




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数 字 逻 辑数 字 逻 辑2第第2 2章章 逻辑代数和硬件描述语言基础逻辑代数和硬件描述语言基础 本章介绍分析和设计数字逻辑电路的数学方法,包括:本章介绍分析和设计数字逻辑电路的数学方法,包括:逻辑代数的基本概念,逻辑函数及其表示方法,逻辑代数逻辑代数的基本概念,逻辑函数及其表示方法,逻辑代数的基本公式、常用公式和重要定理以及逻辑函数的简化方的基本公式、常用公式和重要定理以及逻辑函数的简化方法。并介绍硬件描述语言法。并介绍硬件描述语言Verilog HDL的基本知识。的基本知识。 v 2.1 逻辑代数基本概念逻辑代数基本概念 v 2.2 逻辑代数的运算法则逻辑代数的运算法则v 2.3 逻辑函
2、数的表达式逻辑函数的表达式v 2.4 逻辑函数的公式简化法逻辑函数的公式简化法v 2.5 Verilog HDL基础基础32.5.1 Verilog HDL基本结构基本结构2.5.2 Verilog HDL的词法的词法2.5.3 Verilog HDL常用语句常用语句2.5.4 不同抽象级别的不同抽象级别的Verilog HDL模型模型2.5 Verilog HDL基础基础4硬件描述语言简介硬件描述语言简介v硬件描述语言硬件描述语言(Hradware Description Language ) 是一种用形式化方是一种用形式化方法(即文本形式)来描述和设计数字电路和数字系统的高级模块化语言法(
3、即文本形式)来描述和设计数字电路和数字系统的高级模块化语言。它是设计人员和。它是设计人员和EDA工具之间的一个桥梁,主要用于编写工具之间的一个桥梁,主要用于编写设计文件设计文件,在在EDA工具中建立电路模型;也用来编写工具中建立电路模型;也用来编写测试文件测试文件进行仿真。进行仿真。用用HDL描描述设计述设计编程下载编程下载EDAEDA工具工具综合、仿真综合、仿真目标文件目标文件vHDL发展至今已有近三十年的历史,到发展至今已有近三十年的历史,到20世纪世纪80年代,已出现了数十种年代,已出现了数十种硬件描述语言。硬件描述语言。80年代后期,年代后期, HDL向着标准化、集成化的方向发展,向着
4、标准化、集成化的方向发展,最终最终VHDL、Verilog HDL先后成为先后成为IEEE标准。标准。 wVHDL :VHSIC Hardware Description Language(VHSICVery High Speed Integrated Circuits),甚高速集成电路的硬件),甚高速集成电路的硬件描述语言,来源于美国军方,描述语言,来源于美国军方,1987年成为年成为IEEE标准。目前标准化程标准。目前标准化程度最高的一种度最高的一种HDL。5Verilog HDL简介简介vVerilog HDL是目前应用最为广泛的硬件描述语言,可以用来是目前应用最为广泛的硬件描述语言,可
5、以用来进行数字电路的建模、仿真验证、时序分析、逻辑综合进行数字电路的建模、仿真验证、时序分析、逻辑综合。w1983年,由年,由GDA(GateWay Design Automation)公司)公司的的Phil Moorby首创;首创;w1989年,年,Cadence公司收购了公司收购了GDA公司;公司;w1990年,年, Cadence公司公开发表公司公开发表Verilog HDL;w1995年年,IEEE制定并公开发表制定并公开发表Verilog HDL1364-1995标标准。准。vVerilog HDL模型可以是实际电路的不同级别的抽象。抽象级模型可以是实际电路的不同级别的抽象。抽象级别
6、可分为五级:系统级,别可分为五级:系统级,算算法级,法级,RTL级,门级,开关级。级,门级,开关级。6Verilog HDL的特点的特点v 语法结构上的主要语法结构上的主要特点特点w 形式化地表示电路的形式化地表示电路的行为行为和和结构结构;w 借用借用C语言语言的结构和语句;的结构和语句;w 可在多个层次上对所设计的系统加以描述,语言对设计规模可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;不加任何限制;w 具有混合建模能力:一个设计中的各子模块可用不同级别的具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;抽象模型来描述;w 基本逻辑门、开关级结构模型均
7、内置于基本逻辑门、开关级结构模型均内置于Verilog HDL语言库中语言库中,可直接调用;,可直接调用;w 易创建用户定义原语(易创建用户定义原语(UDP,User Designed Primitive) 。v 易学易用,功能强易学易用,功能强与与C C语言语言非常相似非常相似!7Verilog HDL与与C语言的比较语言的比较v 语句及函数的比较语句及函数的比较语句及函数语句及函数C语言语言Verilog HDL函数函数无参函数,有参函数无参函数,有参函数 function块语句块语句赋值语句赋值语句赋值赋值变量变量 = 表达式表达式;阻塞阻塞赋值赋值,非阻塞非阻塞赋值赋值条件语句条件语句
8、if-elseif-else条件条件语句语句switchcase循环语句循环语句forfor循环语句循环语句whilewhile中止语句中止语句breakbreak宏定义语句宏定义语句define(以符号(以符号#开头)开头)define(以符号(以符号开头)开头)格式输出函数格式输出函数printfprintf8运算符的比较运算符的比较C语言语言Verilog HDL功能功能C语言语言Verilog HDL功能功能加加=小于等于小于等于减减=等于等于*乘乘!=!=不等于不等于/除除按位取反按位取反%取模取模&按位与按位与!逻辑非逻辑非|按位或按位或&逻辑与逻辑与按位异或按位异
9、或|逻辑或逻辑或大于大于右移右移=大于等于大于等于Verilog HDL与与C语言的运算符几乎完全相同!语言的运算符几乎完全相同!9Verilog HDL 与与VHDL的比较的比较Verilog HDLVHDL成为成为IEEE标准标准1995年1987年语法结构语法结构比VHDL简单语法结构比较严格,模块风格比较清晰学习难易程度学习难易程度容易掌握较难掌握建模能力建模能力门级开关电路描述方面很强系统级抽象能力较强测试激励模块容易编写适合由多人合作完成的特大型项目(一百万门以上)。较多的第三方工具的支持仿真工具比较好用102.5.1 Verilog HDL基本结构基本结构一、简单的一、简单的Ve
10、rilog HDL例子例子【例例2.13】 8位全加器位全加器module adder8 ( cout,sum,a,b,cin ); output cout; / 输出端口声明输出端口声明 output 7:0 sum; input 7:0 a,b; / 输入端口声明输入端口声明 input cin; assign cout,sum=a+b+cin;endmoduleI/O说说明明端口定义端口定义功能描述功能描述模块名模块名( (文件名文件名) )v整个程序嵌套在整个程序嵌套在module和和endmodule声明语句中。声明语句中。v每条语句相对每条语句相对module和和endmodule
11、最好缩进最好缩进2格或格或4格!格!v/ 表示注释部分,一般只占据表示注释部分,一般只占据一一行。对编译不起作用!行。对编译不起作用!单行注释符单行注释符11简单的简单的Verilog HDL例子(例子(1/3) 【例例2.14】 8位计数器位计数器module counter8 ( out,cout,data,load, cin,clk ); output 7:0 out; output cout; input 7:0 data; input load, cin,clk ; reg7:0 out; always (posedge clk) begin if(load) out = data;
12、 / 同步预置数据同步预置数据 else out = out + 1 + cin; / 加加1计数计数 end assign cout = &out & cin; /若若out为为8hFF,cin为为1,则,则cout为为1endmodule功能描述功能描述信号类型声明信号类型声明缩减运算符缩减运算符按位与按位与12简单的简单的Verilog HDL例子(例子(2/3)【例例2.15】三态驱动器三态驱动器module trist2(out,in,enable); output out; input in, enable; bufif1 mybuf(out,in,enable);
13、endmodule例化元件名例化元件名门元件关键字门元件关键字门元件例化门元件例化程序通过调用一程序通过调用一个在个在Verilog语言库中现存的实例语言库中现存的实例门元件来实现某逻辑门功能。门元件来实现某逻辑门功能。 Inputs | Output in enable| out X 0| Z 1 1| 1 0 1| 0bufif1的的真值表真值表门元件例化门元件例化13module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable);endmodulemodule mytri(
14、out,in,enable); output out; input in, enable; assign out = enable? in:bz; / * 如果如果enable为为1,则,则out = in,否则为高阻态,否则为高阻态 * /endmodule简单的简单的Verilog HDL例子(例子(3/3)【例例2.16】三态驱动器(三态驱动器( trist1.v)例化元件名例化元件名(可可省略省略)子模块名子模块名顶层模块顶层模块子模块子模块模块元件例化模块元件例化顶层模块(顶层模块(trist1)调用由某子模块()调用由某子模块(mytri)定义的实例元件()定义的实例元件(tri_
15、inst)来实现某功能。)来实现某功能。模块元件例化模块元件例化14Verilog HDL基本结构总结基本结构总结 1.Verilog HDL程序是由程序是由模块模块构成的。每个模块嵌套在构成的。每个模块嵌套在module和和endmodule声明语句中。模块是可以进行层次声明语句中。模块是可以进行层次嵌套的。嵌套的。 2.每个每个Verilog HDL源文件中只准有一个顶层模块,其源文件中只准有一个顶层模块,其他为子模块。他为子模块。源文件名称与顶层模块同名(后缀为源文件名称与顶层模块同名(后缀为.v)!)! 3.每个模块要进行端口定义,并说明输入输出端口,然每个模块要进行端口定义,并说明输
16、入输出端口,然后对模块的功能进行描述。后对模块的功能进行描述。 4.程序书写格式自由,一行可以写几个语句,一个语句程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。也可以分多行写。 5.除了除了endmodule语句、语句、begin_end语句和语句和fork_join语语句外,每个语句和数据定义的最后必须有分号。句外,每个语句和数据定义的最后必须有分号。 6.可用可用/*.*/和和/.对程序的任何部分作注释。加上必对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性。要的注释,以增强程序的可读性和可维护性。15二、二、Verilog HDL模块的结构模块的结构v
17、 Verilog的基本设计单元是的基本设计单元是“模块模块(block) ” 。v Verilog模块的结构由在模块的结构由在module和和endmodule关键词关键词之间的之间的4个主要部分组成:个主要部分组成:module block1(a,b,c,d ); input a,b,c; output d; wire x; assign d = a | x; assign x = ( b & c );endmoduleI/O说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明123416模块端口定义与模块端口定义与I/O说明说明1、模块端口定义、模块端口定义w模块端口定
18、义用来声明设计电路模块的输入输出端口,端口定义格式:模块端口定义用来声明设计电路模块的输入输出端口,端口定义格式: module 模块名模块名(端口端口1, 端口端口2, 端口端口3, );w在端口定义的圆括弧中,是设计电路模块与外界联系的全部输入输出端口在端口定义的圆括弧中,是设计电路模块与外界联系的全部输入输出端口信号或引脚,它是设计实体对外的一个通信界面,是外界可以看到的部分信号或引脚,它是设计实体对外的一个通信界面,是外界可以看到的部分(不包含电源和接地端),多个端口名之间用(不包含电源和接地端),多个端口名之间用“,”分隔。分隔。2、 I/O说明说明w模块的模块的I/O说明用来声明模
19、块端口定义中各端口数据流动方向,包括输说明用来声明模块端口定义中各端口数据流动方向,包括输入(入(input)、输出()、输出(output)和双向()和双向(inout)。)。 input 端口端口1, 端口端口2, 端口端口3, ; output 端口端口1, 端口端口2, 端口端口3, ; inout 端口端口1, 端口端口2, 端口端口3, ;w 端口定义、端口定义、I/O说明和程序语句中的标点符号及说明和程序语句中的标点符号及圆括弧均要求用圆括弧均要求用半角半角符号书写符号书写!17信号类型声明与功能描述信号类型声明与功能描述3、信号类型声明、信号类型声明w信号类型声明用来说明设计电
20、路的功能描述中,所用的信号的数据信号类型声明用来说明设计电路的功能描述中,所用的信号的数据类型以及函数声明。类型以及函数声明。w信号的数据类型主要有信号的数据类型主要有连线连线(wire)、)、寄存器寄存器(reg)、)、整型整型(integer)、)、实型实型(real)和)和时间时间(time)等类型。)等类型。 4、功能描述、功能描述w功能描述是功能描述是Verilog HDL程序设计中最主要的部分,用来描述设计程序设计中最主要的部分,用来描述设计模块的模块的内部结构内部结构和模块端口间的和模块端口间的逻辑关系逻辑关系,在电路上相当于器件,在电路上相当于器件的内部电路结构。的内部电路结构
21、。w功能描述可以用功能描述可以用assign语句、元件例化(语句、元件例化(instantiate)、)、always块语句等方法来实现,通常把确定这些设计模块描述的方法称为块语句等方法来实现,通常把确定这些设计模块描述的方法称为建模建模。 18逻辑功能定义逻辑功能定义v在在Verilog 模块中有模块中有3种方法可以描述电路的逻辑功能:种方法可以描述电路的逻辑功能:用用assign 语句语句 assign x = ( b & c );数据流描述数据流描述常用于描述常用于描述组合逻辑组合逻辑结构描述结构描述例化元件名例化元件名门元件关键字门元件关键字 用元件例化用元件例化(instan
22、tiate)and myand3( f,a,b,c);v 注注1:元件例化即是调用:元件例化即是调用Verilog HDL提供的元件提供的元件或由某子模块定义的实例元件;或由某子模块定义的实例元件;v 注注2:元件例化包括:元件例化包括门门元件例化和元件例化和模块模块元件例化;元件例化;v 注注3:例化元件名也可以省略!若不省略,则每个例化元件名也可以省略!若不省略,则每个实例元件的名字必须实例元件的名字必须唯一唯一!以避免与其它调用该元!以避免与其它调用该元件的实例相混淆。件的实例相混淆。19逻辑功能定义(续)逻辑功能定义(续) 用用“always”块语句块语句 always (posedg
23、e clk) / 每当时钟上升沿到来时执行一遍块内语句每当时钟上升沿到来时执行一遍块内语句 begin if(load) out = data; / 同步预置数据同步预置数据 else out = data + 1 + cin; / 加加1计数计数 end行为描述行为描述v注注1:“always” 块语句块语句常用于描述常用于描述时序时序逻辑,也可描逻辑,也可描述述组合组合逻辑。逻辑。v注注2:“always” 块块可用多种手段来表达逻辑关系,如可用多种手段来表达逻辑关系,如用用if-else语句或语句或case语句。语句。v注注3:“always” 块语句与块语句与assign语句是并发执行
24、的,语句是并发执行的, assign语句一定要放在语句一定要放在“always” 块语句之外!块语句之外!20Verilog HDL程序的三种描述方式程序的三种描述方式 对设计电路的对设计电路的结构结构进行描述,即描述设计电路使用的元进行描述,即描述设计电路使用的元件及这些元件之间的连接关系件及这些元件之间的连接关系属于属于低层次低层次的描述方法,包括门级和开关级的描述方法,包括门级和开关级2种抽象级别种抽象级别21三、三、 Verilog HDL模块的模板模块的模板v Verilog HDL模块的模块的模板(仅考虑用于逻辑综合的模板(仅考虑用于逻辑综合的程序程序)module () ; ou
25、tput 输出端口列表;输出端口列表; input 输入端口列表输入端口列表; /(1)使用)使用assign语句定义逻辑功能语句定义逻辑功能 wire ; assign = 表达式表达式 ; /(2)使用)使用always块定义逻辑功能块定义逻辑功能 always () begin /过程赋值语句过程赋值语句 /if语句语句 /case语句语句 /while,repeat,for循环语句循环语句 /task,function调用调用 end22Verilog HDL模块的模板模块的模板(续)(续)/ (3)元件例化)元件例化 (); / 模块元件例化模块元件例化 (); / 门元件例化门元件
26、例化endmodule例化元件名例化元件名也也可以省略!可以省略!23 2.5.2 Verilog HDL的词法的词法一、空白符和注释一、空白符和注释v Verilog HDL的的空白符空白符包括空格、包括空格、Tab、换行和换页符号、换行和换页符号。空白符如果不是出现在字符串中,编译源程序时将被。空白符如果不是出现在字符串中,编译源程序时将被忽略。忽略。v 注释注释用来帮助读者理解程序,编译源程序时将被忽略。用来帮助读者理解程序,编译源程序时将被忽略。注释分为行注释和块注释两种方式。注释分为行注释和块注释两种方式。w行注释行注释用符号用符号/(两个斜杠)开始,注释到本行结束。(两个斜杠)开始
27、,注释到本行结束。w块注释块注释用用/*开始,用开始,用*/结束。块注释可以跨越多行,但它们结束。块注释可以跨越多行,但它们不能嵌套。不能嵌套。 v Verilog HDL源源程序程序由空白符分隔的词法符号流组成。由空白符分隔的词法符号流组成。v 词法符号包括空白符、注释、操作符(运算符)、常数词法符号包括空白符、注释、操作符(运算符)、常数、字符串、标识符及关键字。、字符串、标识符及关键字。24二、常数二、常数整数的整数的3种表达方式种表达方式说说 明明 举举 例例 完整的表达方式完整的表达方式8b11000101或或8 hc5 缺省位宽,则位宽由机器缺省位宽,则位宽由机器系统决定,至少系统
28、决定,至少32位位hc5缺省进制为十进制,位宽缺省进制为十进制,位宽默认为默认为32位位197v 常数包括整数、常数包括整数、x(未知)和(未知)和z(高阻)值、负数、实数高阻)值、负数、实数v 整数的整数的4种进制表示形式:种进制表示形式:w二进制整数(二进制整数(b或或B););w十进制整数(十进制整数(d或或D););w十六进制整数(十六进制整数(h或或H););w八进制整数(八进制整数(o或或O)。)。v这里位宽指对应二进制数的宽度。这里位宽指对应二进制数的宽度。v整数型常量是可以综合的,而实数型和整数型常量是可以综合的,而实数型和字符串型常量都是不可综合的字符串型常量都是不可综合的建
29、议最好写明建议最好写明位宽和进制位宽和进制清楚,不易清楚,不易出错!出错!25x和和z值值v x和和z值值wx表示不定值,表示不定值,z表示高阻值;表示高阻值;wx和和z代表的二进制位数取决于所用的进制代表的二进制位数取决于所用的进制 “?”是是z的另一种表示符号,建议在的另一种表示符号,建议在case语句中使用语句中使用?表示高阻态表示高阻态z【例例2.17 】casez (select) 4b?1: out = a; 4b?1?: out = b; 4b?1?: out = c; 4b1?: out = d; endcasev 负数负数w在位宽前加一个负号,即表示负数在位宽前加一个负号,即
30、表示负数,负数通常表示为负数通常表示为该负数的二进制补码该负数的二进制补码w如:如:-8d5 /-5的补码,的补码,= 8b1111101126实数(实数(Real)v实数的两种表示法实数的两种表示法w十进制表示法十进制表示法2.0,5.678,0.1/合法合法2./非法,小数点两侧都必须有数字非法,小数点两侧都必须有数字w科学计数法科学计数法43_5.1e2/ 等于等于435.1 102=435105E-4/等于等于5 10-4=0.0005, e与与E相同相同v实数通过四舍五入被转换为最相近的整数实数通过四舍五入被转换为最相近的整数 【例例】42.446,42.45 /若转换为整数都是若转
31、换为整数都是42 92.5,92.699/若转换为整数都是若转换为整数都是93 -15.62,-25.26 /若转换为整数分别为若转换为整数分别为-16,-25v下划线下划线“_”可随意用在整数或实数的数字中间,以提高可读性;可随意用在整数或实数的数字中间,以提高可读性;但数字的第但数字的第1个字符不能是下划线,也不能用在位宽和进制处。个字符不能是下划线,也不能用在位宽和进制处。27三、字符串三、字符串v 字符串字符串是用双引号括起来的可打印字符序列,不能多行书写。是用双引号括起来的可打印字符序列,不能多行书写。v 作用:在仿真时显示一些相关信息,或者指定显示的格式作用:在仿真时显示一些相关信
32、息,或者指定显示的格式u例:例:”INTERNAL ERROR”, ”this is an example for Verilog HDL”v 字符串能够用在系统任务(如字符串能够用在系统任务(如$display、$monitor)中作为变量,字)中作为变量,字符串的值可像数值一样存储在寄存器中,也可以像对数字一样对字符符串的值可像数值一样存储在寄存器中,也可以像对数字一样对字符串进行赋值、比较和拼接操作串进行赋值、比较和拼接操作【例例】$display($time,”a=%h b=%h c=%h”,a,b,c); / 显示当前仿真时间,空显示当前仿真时间,空3格后显示格后显示a=xx b=x
33、x c=xxv 字符串属于字符串属于reg型变型变量,宽度为字符串中量,宽度为字符串中字符的个数乘以字符的个数乘以8。【例例】reg8*12:1 stringvar; initial begin stringvar = “Hello world!”; end28四、标识符四、标识符 v任何用任何用Verilog HDL语言描述的对象都通过其名字来识别,这语言描述的对象都通过其名字来识别,这个名字被称为个名字被称为标识符标识符。标识符可由字母、数字、下划线和标识符可由字母、数字、下划线和$符符号构成。号构成。v如源文件名、模块名、端口名、变量名、常量名、实例名等。如源文件名、模块名、端口名、变量
34、名、常量名、实例名等。v定义标识符时应遵循如下规则定义标识符时应遵循如下规则 首字符必须是字母或下划线,不能是数字或首字符必须是字母或下划线,不能是数字或$符号符号! 字符数不能多于字符数不能多于1024个。个。 大小写字母是不同的。大小写字母是不同的。 不要与关键字同名!不要与关键字同名! v不合法不合法的名字:的名字:w123aw$datawmodulew7seg.vwout*/不允许包含字符不允许包含字符*v 合法合法的名字:的名字:wA_99_ZwResetw_54MHz_Clock$wModule 29五、关键字五、关键字v 关键字(保留字)关键字(保留字)Verilog HDL事先
35、定义好的确事先定义好的确认符,用来组织语言结构;或者用于定义认符,用来组织语言结构;或者用于定义Verilog HDL提供的门元件(如提供的门元件(如and,not,or,buf)。)。v 每个关键字全部用每个关键字全部用小写小写字母定义!字母定义! 如如always,assign,begin,case,casex,else,end, endmodule ,for,function,if,input, module ,output,repeat,table,time,while,wirev Verilog -1995的关键字有的关键字有97个(见教材表个(见教材表2.14),),Verilog
36、 -2001增加了增加了5个共个共102个。个。 用户程序中的用户程序中的模块模块、变量、节点变量、节点等的等的名称不能与名称不能与关键字关键字同名!同名!30六、运算符及表达式六、运算符及表达式v运算符按运算符按功能功能分为分为9类类:w算术算术运算符运算符w逻辑逻辑运算符运算符w关系关系运算符运算符w等值等值运算符运算符w缩减缩减运算符运算符w条件条件运算符运算符w位位运算符运算符w移位移位运算符运算符w位拼接位拼接运算符运算符v运算符按运算符按操作数的个数操作数的个数分为分为3类:类:w 单目单目运算符运算符带一个操作数带一个操作数 逻辑非!,按位取反逻辑非!,按位取反,缩减运算,缩减运
37、算符,移位运算符符,移位运算符w 双目双目运算符运算符带两个操作数带两个操作数 算术、关系、等值运算符,逻辑算术、关系、等值运算符,逻辑运算符(运算符(除逻辑非外除逻辑非外)、位运算符)、位运算符(除按位取反外除按位取反外)w 三目三目运算符运算符带三个操作数带三个操作数 条件运算符条件运算符v 运算符运算符也称为也称为操作符操作符,是,是Verilog HDL预定义的函数符号,预定义的函数符号,这些函数对被操作的对象(即操作数)进行规定的运算,这些函数对被操作的对象(即操作数)进行规定的运算,得到一个结果。得到一个结果。311、算术运算符、算术运算符v 双双目运算符目运算符算术运算符算术运算
38、符功能功能 */%加加减减乘乘除除求模求模v 进行整数除法运算时,结果值略去小数部分,只取整数部分!进行整数除法运算时,结果值略去小数部分,只取整数部分!v 求模求模即是即是求一个数被另一个数相除后所得的余数。求一个数被另一个数相除后所得的余数。%称为称为求模求模(或(或求余求余)运算符,要求)运算符,要求%两侧两侧均为均为整型整型数据;数据;v 求模运算结果值的符号位取第一个操作数的符号位!求模运算结果值的符号位取第一个操作数的符号位! 【例例】 -11%3 结果为结果为-2v 进行算术运算时,若某操作数为不定值进行算术运算时,若某操作数为不定值x,则整个结果也为,则整个结果也为x。 322
39、、逻辑运算符、逻辑运算符v 逻辑运算符把它的操作数当作逻辑运算符把它的操作数当作布尔变量布尔变量(逻辑(逻辑1、逻辑、逻辑0或不定值):或不定值):w 非零非零的操作数被认为是的操作数被认为是真真(1b1);w 零零被认为是被认为是假假(1b0);w 不确定不确定的操作数如的操作数如4bxx00, 被认为是不确定的(可能为零,也可被认为是不确定的(可能为零,也可能为非零)(记为能为非零)(记为1bx); 但但4bxx11被认为是真(记为被认为是真(记为1b1,因,因为它肯定是非零的)。为它肯定是非零的)。逻辑运算符逻辑运算符功能功能 &(双目双目)|(双目双目)!(单目单目)逻辑与逻辑
40、或逻辑非v如果操作数不止一位,应将操作数作为一个整体来对待!如果操作数不止一位,应将操作数作为一个整体来对待!v进行逻辑运算后的结果为布尔值(为进行逻辑运算后的结果为布尔值(为1或或0或或x)!)!【例例】 若若A=4b0000,B=4b0101 则则 !A=1b b1,A&B=1b0,A|B=1b1。333、位运算符、位运算符位运算符位运算符功能功能 &|,按位取反按位与按位或按位异或按位同或双双目运算符目运算符单单目运算符目运算符v 位运算符中的双目运算符要求对两个操作数的相应位位运算符中的双目运算符要求对两个操作数的相应位逐位逐位进行逻辑运算。位运算其结果与操作数位数相同
41、。进行逻辑运算。位运算其结果与操作数位数相同。v 两个不同长度的操作数进行位运算时,将自动按两个不同长度的操作数进行位运算时,将自动按右右端端对齐对齐,位数少的操作数会在高位用,位数少的操作数会在高位用0补齐。补齐。 【例例】若若A = 5b11001,B = 3b101, 则则A & B = (5b11001)&(5b00101)= 5b00001 344、关系运算符、关系运算符v 双双目运算符目运算符v 用来对两个操作数进行比较。用来对两个操作数进行比较。关系运算符关系运算符功能功能= 小于小于或等于大于大于或等于括号内先运算括号内先运算算术运算先运算算术运算先运算v 运算
42、结果为运算结果为1位的逻辑值位的逻辑值1或或0或或x。关系运算时,若声明的关系为。关系运算时,若声明的关系为真真,则返回值为,则返回值为1;若关系为;若关系为假假,则返回值为,则返回值为0;若某操作数为;若某操作数为不定值不定值x,则返回值为,则返回值为x,表示结果是模糊的。,表示结果是模糊的。v 所有的关系运算符优先级别相同。所有的关系运算符优先级别相同。v 关系运算符的优先级关系运算符的优先级低于低于算术运算符。算术运算符。【例例】 asize - 1等同于等同于: a(size - 1) size -(1a)不等同于不等同于: size-1 n 或或 A3 的结果的结果= 4b0001;
43、 4b10014的结果的结果= 4b0000 4b10011的结果的结果= 4b0010; 4b10012的结果的结果= 4b0100; 16 = 32b0001000000将操作数右移或左移将操作数右移或左移n位,相位,相当于将操作数除以或乘以当于将操作数除以或乘以2n。右移的数据右移的数据会丢失!会丢失!388、条件运算符、条件运算符v 三三目运算符目运算符v 常用于数据选择器的设计常用于数据选择器的设计in1outMUXin0sel信号信号 = 条件条件?表达式表达式1:表达式表达式2;v 条件运算符为条件运算符为?:?:v 用法:用法:【例例】数据选择器数据选择器assign out
44、= sel? in1:in0;当条件为当条件为真真,信号取表,信号取表达式达式1的值;为的值;为假假,则,则取表达式取表达式2的值。的值。sel=1时时out=in1; sel=0时时out=in0399、位拼接运算符、位拼接运算符v 位拼接运算符为位拼接运算符为 v 用于将两个或多个信号的某些位拼接起来,表示一个用于将两个或多个信号的某些位拼接起来,表示一个整体整体信号。信号。v 用法:用法:信号信号1的某几位的某几位, 信号信号2的某几位的某几位, , 信号信号n的某几位的某几位u例如在进行全加运算时,可将进位输出与算术和拼接在一起使用。例如在进行全加运算时,可将进位输出与算术和拼接在一起
45、使用。【例例2.19 】output 3:0 sum; /算术和算术和 output cout; /进位输出进位输出 input3:0 ina,inb; input cin; assign cout,sum = ina + inb +cin;/进位与算术和拼接在一起进位与算术和拼接在一起u位拼接可以嵌套使用,或用重复法简化书写位拼接可以嵌套使用,或用重复法简化书写【例例2.20 】3a,b3:0 = a,b3,b2,b1,b0, a,b3,b2,b1,b0, a,b3,b2,b1,b040运算符的优先级运算符的优先级类类 别别运运 算算 符符优先级优先级逻辑非、按位取反! 高低算术运算符* /
46、 % 移位运算符关系运算符 =等式运算符= = ! = = !=缩减运算符& & | |逻辑运算符&|条件运算符?:v为避免错误,提高程为避免错误,提高程序的可读性,建议使序的可读性,建议使用用括号括号来控制运算的来控制运算的优先级!优先级!【例例】(ab)&(bc) (a= =b)|(x= = y) (!a)|(ab)41七、七、 Verilog HDL数据对象数据对象v Verilog HDL数据对象是指用来存放各种类型数据的容器,数据对象是指用来存放各种类型数据的容器,包括常量和变量。包括常量和变量。 (1)常量)常量w常量用来存放一个恒定不变的数据,一般
47、在程序前部定义。用常量用来存放一个恒定不变的数据,一般在程序前部定义。用parameter来定义一个标识符,代表一个常量,来定义一个标识符,代表一个常量,称为称为符号常量符号常量或或parameter常量常量。parameter 常量名常量名1 = 表达式表达式, 常量名常量名2 = 表达式表达式, , 常量名常量名n = 表达式表达式;w 每个赋值语句的右边必须为每个赋值语句的右边必须为常数常数表达式,即只能包含数字或先前定义过表达式,即只能包含数字或先前定义过的符号常量!的符号常量!w parameter常量常用来定义常量常用来定义延迟时间延迟时间和和变量宽度变量宽度。当程序中有多处地方用
48、。当程序中有多处地方用到相同的常量时,建议用到相同的常量时,建议用parameter常量来定义常量来定义便于修改便于修改 ,有意义,有意义 w parameter常量是常量是本地本地的,其定义只在本模块内有效。的,其定义只在本模块内有效。wparameter是常量定义关键字,常量名是用户定义的标识符,表是常量定义关键字,常量名是用户定义的标识符,表达式是为常量赋的值。达式是为常量赋的值。【例例】 parameter addrwidth = 16;42变量变量(2)变量)变量v 在程序运行过程中,其值可以改变的量,称为在程序运行过程中,其值可以改变的量,称为变量变量。v 其数据类型有其数据类型有
49、19种,常用的有种,常用的有3种:种:w网络型(网络型(nets type)w寄存器型(寄存器型(register type )w数组(数组(memory type)v其它数据类型:其它数据类型:large型、型、medium型型、 scalared型、型、 small型、型、time型、型、tri型、型、tri0型、型、tri1型、型、triand型、型、trior型、型、trireg型、型、vectored型、型、wand型、型、wor型等型等43nets型变量型变量1. nets1. nets型变量型变量v 网络型变量网络型变量( nets型变量)是输出值始终随输入的变化型变量)是输出值
50、始终随输入的变化而变化的变量。而变化的变量。v 一般用来定义电路中的各种物理连线。一般用来定义电路中的各种物理连线。v 有两种驱动方式:在结构描述中将其连接到一个门元件有两种驱动方式:在结构描述中将其连接到一个门元件或模块的输出端;或用或模块的输出端;或用assign语句对其赋值语句对其赋值v 常用的常用的nets型变量型变量wwire,tri:连线类型(两者功能一致),:连线类型(两者功能一致),可综合可综合wwor,trior:具有线或特性的连线(两者功能一致):具有线或特性的连线(两者功能一致)wwand,triand:具有线与特性的连线(两者功能一致):具有线与特性的连线(两者功能一致
51、)wtri1,tri0:上拉电阻和下拉电阻:上拉电阻和下拉电阻wsupply1,supply0:电源(逻辑:电源(逻辑1)和地(逻辑)和地(逻辑0),),可综合可综合netsnets型变量型变量不能储存值!不能储存值!44wire型变量型变量vwire型变量型变量w最常用的最常用的nets型变量,常用来表示以型变量,常用来表示以assign语句赋值的语句赋值的组合组合逻辑信号。逻辑信号。w模块中的输入模块中的输入/输出信号类型输出信号类型缺省缺省为为wire型型当对输入当对输入/输出信号不加输出信号不加以信号类型声明时,则输入以信号类型声明时,则输入/输出信号为输出信号为wire型。型。 w可
52、用做任何方程式的输入,或可用做任何方程式的输入,或“assign”语句和实例元件的输出。语句和实例元件的输出。wire 变量名变量名1,变量变量名名2, ,变量变量名名n;【例例】 将输入将输入a赋值给赋值给wire型变量型变量b input a; wire b; /* 中间节点。若为中间节点。若为output信号,则信号,则默认为默认为wire型变量,不必单独声明型变量,不必单独声明 */ assign b=a; /当当a变化时,变化时,b立即随之变化立即随之变化45wire型向量(总线)型向量(总线)wiren-1:0 变量名变量名1,变量名变量名2, ,变量名变量名m;或或 wiren:
53、1 变量名变量名1,变量名变量名2, ,变量名变量名m;每条总线每条总线位宽为位宽为n共有共有m条总线条总线【例例】 wire型向量型向量 wire7:0 in,out; assign out=in; /将等号右边的值赋给等号左边的将等号右边的值赋给等号左边的变量。变量。位宽为位宽为1位的变量称为位的变量称为标量标量,位宽超过位宽超过1位的变量称为位的变量称为向量向量。向量的宽度定义。向量的宽度定义 :MSB : LSB /* MSB(Most Significant Bit,最高有效位),最高有效位), LSB (Least Significant Bit,最低有效位),最低有效位) */4
54、6register型变量型变量v 寄存器型变量(register型变量)对应型变量)对应具有状态保持作用具有状态保持作用的的电路元件(如触发器、寄存器等)电路元件(如触发器、寄存器等),常用来表示常用来表示过程块过程块语句语句(如(如initial,always,task,function)内的指定信号。)内的指定信号。v 常用的常用的register型变量型变量wreg:常代表触发器、寄存器,:常代表触发器、寄存器,可综合可综合winteger:32位带符号整数型变量,位带符号整数型变量,可综合可综合wreal:64位带符号实数型变量,表示实数寄存器,用于位带符号实数型变量,表示实数寄存器,
55、用于仿真仿真wtime:无符号时间变量,用于对仿真时间的存储与处理:无符号时间变量,用于对仿真时间的存储与处理 纯数学的纯数学的抽象描述抽象描述2. register2. register型变量型变量47register型变量与型变量与nets型变量的区别型变量的区别v register型变量需要被明确地赋值,并且在被重新型变量需要被明确地赋值,并且在被重新赋值前一直保持原值。赋值前一直保持原值。v register型变量必须通过型变量必须通过过程过程赋值语句赋值!不能赋值语句赋值!不能通过通过assign语句赋值!语句赋值! v nets型变量必须通过型变量必须通过assign语句赋值!不能
56、通过过语句赋值!不能通过过程赋值语句赋值!程赋值语句赋值!v 在在always、initial、task、function等过程块内被等过程块内被赋值的每个信号必须定义成赋值的每个信号必须定义成register型!型!48reg型变量型变量v reg型变量型变量wreg型变量型变量是数字系统中存储设备的抽象,常用于具体的硬件描述是数字系统中存储设备的抽象,常用于具体的硬件描述,是最常用的寄存器型变量。,是最常用的寄存器型变量。 w它是在过程块中被赋值的信号,它是在过程块中被赋值的信号,往往往往代表触发器(代表触发器(沿沿触发时),但触发时),但不一定不一定就是触发器(也可以是组合逻辑信号,就是
57、触发器(也可以是组合逻辑信号,电平电平触发时)!触发时)!reg 变量变量名名1,变量变量名名2, ,变量变量名名n;regn-1:0 变量名变量名1,变量名变量名2, ,变量名变量名m;或或 regn:1 变量名变量名1,变量名变量名2, ,变量名变量名m;【例例】 reg4:1 regc,regd; /regc,regd为为4位宽的位宽的reg型向量型向量 reg0:7 data;/8位寄存器型变量,最高有效位是位寄存器型变量,最高有效位是0,最低有效位是,最低有效位是7u向量定义后可以采用多种使用形式(即赋值)向量定义后可以采用多种使用形式(即赋值) data=8b00000000; d
58、ata5:3=3B111; data7=1; v reg型向量(总线)型向量(总线)reg型变量生成触发器和组合逻辑举例型变量生成触发器和组合逻辑举例【例例2.21】在时钟在时钟沿沿触发的触发的always块中块中,用,用reg型变量生成型变量生成触发器触发器 module rw1( clk, d, out1); input clk, d; output out1; reg out1; always (posedge clk) /沿沿触发触发 out1 = d; endmoduledclkout1D QDFF【例例2.22】使用使用电平电平触发,用触发,用reg型变量生成型变量生成组合逻辑组合
59、逻辑 module rw2( clk, d, out1); input clk, d; output out1; reg out1; always (d) /电平电平触发触发 out1 = d; endmoduledout1BUFF49返回返回50memory型变量型变量v 存储器型变量存储器型变量( memory型变量)是由若干个相同宽度的型变量)是由若干个相同宽度的reg型向型向量构成的数组。量构成的数组。v Verilog HDL通过通过reg型变量建立数组来对型变量建立数组来对存储器存储器建模。定义存储器建模。定义存储器,需定义存储器的,需定义存储器的容量容量(存储器中存储单元的数量)
60、和(存储器中存储单元的数量)和字长字长(每个(每个存储单元的数据宽度)存储单元的数据宽度)v memory型变量可描述型变量可描述RAM、ROM和和reg文件。文件。v memory型变量通过扩展型变量通过扩展reg型变量的地址范围来生成型变量的地址范围来生成:regn-1:0 存储器名存储器名m-1:0;或或 regn-1:0存储器名存储器名m:1;每个存储单每个存储单元位宽为元位宽为n共有共有m个存个存储单元储单元3. memory3. memory型变量型变量数组数组Quartus IIQuartus II不支持!不支持!【例例】 reg 7:0 mema m-1:0 ; /容量为容量为m、字长为、字长为8位的存储器位的存储器v实际设计中,我们是直实际设计中,我们是直接调用接调用Quartus
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小吃技术材料传授协议书
- 高校外联部合同范本
- 墨尔本哈士奇买卖协议书
- 健身合伙投资经营协议书
- 提前解除入股合同范本
- 政府委托经营土地协议书
- 模具承揽合同解除协议书
- 农村一个儿子分户协议书
- 企业咨询管理合同范本
- 关于房屋之间围墙协议书
- 超市经营服务方案投标方案(技术标)
- 新质生产力视角下高校产教融合人才培养模式研究
- 景观鱼池施工合同范本
- 孟万金编制的中国大学生积极心理品质量表+评分方式
- 《应用文写作》中职全套教学课件
- 新能源并网系统宽频振荡分析与抑制阅读记录
- 12J3-3蒸压加气混凝土砌块墙
- 医疗器械经营质量管理体系文件模板
- 2024年天津高考英语第二次高考真题(原卷版)
- 浙江省2024年中考英语模拟试卷(含答案)
- 国开2024春《人文英语4》第5-8单元作文练习参考答案
评论
0/150
提交评论