




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、P.1P.2硬件描述语言是一种用文本形式来描述和硬件描述语言是一种用文本形式来描述和设计电路的语言。是硬件设计人员和电子设计设计电路的语言。是硬件设计人员和电子设计自动化(自动化(EDAEDA)工具之间的界面。)工具之间的界面。P.3功能:功能:1 1)编写设计文件;)编写设计文件;2 2)建立电子系统行为级的仿真模型;)建立电子系统行为级的仿真模型;3 3)自动综合以生成符合要求且在电路结构上)自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表(可以实现的数字逻辑网表(NetlistNetlist););4 4)写入到)写入到CPLDCPLD和和FPGAFPGA器件中。器件中。P.4
2、1 1、电路设计的规模越来越大,复杂度越来越高。、电路设计的规模越来越大,复杂度越来越高。2 2、电子领域的竞争越来越激烈,开发周期要短。、电子领域的竞争越来越激烈,开发周期要短。3 3、调试电路速度快。不必修改电路原理图原型,、调试电路速度快。不必修改电路原理图原型,只需要对只需要对HDLHDL进行修改。进行修改。4 4、易于理解,易于维护。、易于理解,易于维护。5 5、有许多易于掌握的仿真、综合和布局布线工具。、有许多易于掌握的仿真、综合和布局布线工具。P.51. Bottom Up的设计方法的设计方法1.1.由基本门构成各由基本门构成各个组合与时序逻辑个组合与时序逻辑2.2.由逻辑单元组
3、成各由逻辑单元组成各个独立的功能模块个独立的功能模块3.3.由各个功能模块由各个功能模块连成一个完整系统连成一个完整系统4.4.完成整个系统测完成整个系统测试与性能分析试与性能分析REGISTERPCRAMALU&1P.6传统的电路系统设计方法的步骤传统的电路系统设计方法的步骤: :1.1.采用自下而上的设计方法采用自下而上的设计方法- -从状态图的简化,写出最从状态图的简化,写出最简逻辑表达式简逻辑表达式; ;2. 2. 采用通用逻辑元器件采用通用逻辑元器件- -通常采用通常采用7474系列和系列和CMOS4000CMOS4000系列的产品进行设计;系列的产品进行设计; 3.3.在系
4、统硬件设计的后期进行调试和仿真在系统硬件设计的后期进行调试和仿真 ; 只有在部分或全部硬件电路连接完毕,才可以进行只有在部分或全部硬件电路连接完毕,才可以进行电路调试,一旦考虑不周到,系统设计存在较大缺陷,电路调试,一旦考虑不周到,系统设计存在较大缺陷,则要重新设计,使设计周期延长。则要重新设计,使设计周期延长。 4.4.设计结果是一张电路图设计结果是一张电路图 ; 当设计调试完毕后,形成电原理图,该图包括元器件当设计调试完毕后,形成电原理图,该图包括元器件型号和信号之间的互连关系等等型号和信号之间的互连关系等等 P.7优点:优点:1.1.设计人员对于用这种方法进行设计比较熟悉;设计人员对于用
5、这种方法进行设计比较熟悉;2.2.实现各个子块电路所需的时间短。实现各个子块电路所需的时间短。缺点:缺点:1.1.一般来讲,对系统的整体功能把握不足;一般来讲,对系统的整体功能把握不足;2.2.实现整个系统的功能所需的时间长,因为必须先实现整个系统的功能所需的时间长,因为必须先 将各个小模块完成,使用这种方法对设计人员之将各个小模块完成,使用这种方法对设计人员之间相互进行协作有比较高的要求。间相互进行协作有比较高的要求。P.82. Top down 的设计方法的设计方法4.4.工艺库映射工艺库映射3.3.各个功能模块系各个功能模块系统级联合验证统级联合验证2.2.各个功能模块划各个功能模块划分
6、,设计和验证分,设计和验证1. 1. 系统层:顶层模块,系统层:顶层模块,行为级描述,功能模行为级描述,功能模拟和性能评估拟和性能评估REGISTERPCRAMALU&1CPUP.9从系统层开始设计和优化,保证了设计结果的从系统层开始设计和优化,保证了设计结果的正确性正确性适合复杂的、大规模电路的设计适合复杂的、大规模电路的设计缩短设计周期缩短设计周期依赖于先进的依赖于先进的EDAEDA设计工具和环境,费用昂贵设计工具和环境,费用昂贵需要精确的工艺库支持需要精确的工艺库支持四四. .设计过程设计过程P.10文本编辑器文本编辑器 图形编辑器图形编辑器生成生成Verilog HDLVeri
7、log HDL源程序源程序逻辑综合优化逻辑综合优化FPGA/CPLDFPGA/CPLD布布线线/ /适配器适配器FPGA/CPLDFPGA/CPLD编编程、下载程、下载行为仿真行为仿真功能仿真功能仿真时序仿真时序仿真硬件测试硬件测试Verilog仿真器仿真器P.11 内容简介内容简介vVerilog HDLVerilog HDL与与C C语言的比较语言的比较vVerilogVerilog模块的基本结构模块的基本结构v逻辑功能的定义逻辑功能的定义P.12C语言语言Verilog语言语言functionmodule, functionif-then-elseif-then-elseforforwh
8、ilewhilecasecasebreakbreakdefinedefineprintfprintfintintVerilog HDL是在是在C C语言基础上发展起来的,保留了语言基础上发展起来的,保留了C C语语言的结构特点言的结构特点。P.13C C语言语言VerilogVerilog功能功能C C语言语言VerilogVerilog功能功能+ + +加加=大于等于大于等于- - -减减= 大于大于左移左移 右移右移P.14由关键词由关键词module和和endmodule定义定义module 模块名模块名 ( (端口列表端口列表) )端口定义端口定义数据类型说明数据类型说明逻辑功能定义逻
9、辑功能定义endmoduleP.151.模块声明模块声明module关键词关键词模块名模块名 模块唯一的标识符模块唯一的标识符端口列表端口列表是由输入、输出和双向端口的端是由输入、输出和双向端口的端口表达式按一定的次序组成的一口表达式按一定的次序组成的一个列表,它用来指明模块所具有个列表,它用来指明模块所具有的端口,这些端口用来与其它模的端口,这些端口用来与其它模块进行连接。块进行连接。P.162. 端口定义端口定义 又称又称“端口声明语句端口声明语句”,用来进行端口方向的,用来进行端口方向的说明。说明。 Verilog语言中有如下三种端口声明语句语言中有如下三种端口声明语句:1)input对
10、应的端口是输入端口对应的端口是输入端口2 )output对应的端口是输出端口对应的端口是输出端口3 )inout对应的端口是双向端口对应的端口是双向端口moduleinputoutputinoutP.173. 数据类型说明数据类型说明用来指定模块内用到的数据对用来指定模块内用到的数据对象的类型象的类型。wire连线型连线型wire A,B,C,D;/定义信号定义信号ADAD为为wirewire型型reg寄存器型寄存器型reg 3:0 out;/定义信号定义信号outout的数据类型为的数据类型为 4位位reg型型缺省数据类型为缺省数据类型为wire型型P.184. 逻辑功能定义逻辑功能定义 模
11、块中最核心部分,有三种方法可在模块中模块中最核心部分,有三种方法可在模块中产生逻辑。产生逻辑。例:例: assign a = b & c; 类似于在电路图输入方式下调入图形符号完类似于在电路图输入方式下调入图形符号完成设计。成设计。P.19元件例化的格式为元件例化的格式为:例:调用模块的例子例:调用模块的例子module MUX2-1 (out,a,b,sel););output out;input a,b,sel;not (sel_,sel);and (a1,a,sel _);and ( b1,b,sel);or (out,a1,b1);endmoduleP.20设计师自己设计的各种
12、模块也可以看作元件,被顶层设计师自己设计的各种模块也可以看作元件,被顶层文件或其他文件调用:文件或其他文件调用:端口列表有两种表示方式,端口列表有两种表示方式,第一种方式显式给出端口与信号之间的对应关系:第一种方式显式给出端口与信号之间的对应关系:第二种方法是隐式给出端口与信号之间的关系:第二种方法是隐式给出端口与信号之间的关系:这种方式下,例化的端口列表中信号的顺序要与该模这种方式下,例化的端口列表中信号的顺序要与该模块定义中的端口列表中端口顺序严格一致。而第一种方块定义中的端口列表中端口顺序严格一致。而第一种方法则无此要求。法则无此要求。P.21举例:由举例:由1 1位全加器组成的位全加器
13、组成的4 4位全加器位全加器module full_add (a,b,cin,sum,cout); input a,b,cin; output sum,cout; assign cout,sum = a+b+cin;endmodulemodule add4(sum,cout,a,b,cin); output 3:0 sum; output cout; input 3:0 a,b; input cin;P.22 wire cin1,cin2,cin3; full_add f0 (a0,b0,cin,sum0,cin1); full_add f1 (a1,b1,cin1,sum1,cin2); f
14、ull_add f2 (.a(a2),.b(b2),.cin(cin2), .sum(sum2),.cout(cin3); full_add f3 (.cin(cin3),.a(a3),.b(b3), .cout(cout),.sum(sum3);endmoduleP.23例:例:always (posedge clk) beginif(reset) out=0;else out=out+1; endP.24 在在Verilog模块中,所有的过程块(如模块中,所有的过程块(如initial、always)、持续赋值语句、实例引用之间都)、持续赋值语句、实例引用之间都是并行的;是并行的; 它们表
15、示的是一种通过变量名互相连接的关它们表示的是一种通过变量名互相连接的关系;系; 在同一模块中这三者出现的先后顺序没有关在同一模块中这三者出现的先后顺序没有关系;系; 只有持续赋值语句只有持续赋值语句assign和实例引用语句可和实例引用语句可以独立于过程块而存在于模块的功能定义部以独立于过程块而存在于模块的功能定义部分。分。P.25 内容简介内容简介v 词法词法v 数据类型数据类型v 寄存器和存储器寄存器和存储器v 运算符运算符P.26 空白符(间隔符)空白符(间隔符)包括:空格包括:空格(b)、tab(t)(制表符制表符)、换行符、换行符(n)及换页符。及换页符。空白符使代码错落有致、阅读方
16、便。综合空白符使代码错落有致、阅读方便。综合时,空白符被忽略。但是在字符串中空白和时,空白符被忽略。但是在字符串中空白和制表符会被认为是有意义的字符。制表符会被认为是有意义的字符。P.27Verilog程序可以不分行:程序可以不分行:initial begin ina=3b001;inb=3b011; end也可以加入空白符采用多行编写:也可以加入空白符采用多行编写:initial begin ina=3b001; inb=3b011; endP.28 注释注释有两种注释形式:有两种注释形式:单行注释:以单行注释:以/开始到本行结束。开始到本行结束。多行注释:以多行注释:以/ /* *开始到开
17、始到* */ /结束。结束。/*举例说明举例说明*/module addbit(a,b,ci,sum,co);/输入端口输入端口input a;input b;.P.293. . 数字与字符串数字与字符串Verilog HDL有下面有下面4种基本逻辑状态:种基本逻辑状态:0低电平、逻辑低电平、逻辑0或或“假假”1高电平、逻辑高电平、逻辑1或或“真真”X未知状态未知状态Z高阻态高阻态X、Z不分不分大小写大小写P.301)整数整数有有4种进制表示形式:种进制表示形式: 二进制整数(二进制整数(b或或B) 十进制整数(十进制整数(d或或D) 十六进制整数(十六进制整数(h或或H) 八进制整数(八进制
18、整数(o或或O)常数按照其数值类型可以划分为整数常数按照其数值类型可以划分为整数和实数两种和实数两种P.31数字表达方式有以下数字表达方式有以下3种:种: 举例:举例:8b11000101 /位宽为位宽为8位的二进制数位的二进制数8hd5 /位宽为位宽为8位的十六进制数位的十六进制数d5H5o27 /位宽为位宽为5位的八进制数位的八进制数27OP.324B1X_01/4位二进制数位二进制数1X015HX/5位十六进制数位十六进制数XX4hz/4位十六进制数位十六进制数z8h 2 A/位宽与字符间允许有空格位宽与字符间允许有空格-8D5/8位二进制数,位二进制数,-5的补码的补码X可以用来定义十
19、六进制数的可以用来定义十六进制数的4位二进制状态,位二进制状态,八进制数的八进制数的3位,二进制数的位,二进制数的1位。位。Z的表示方的表示方法同法同X类似。类似。P.33数值常量中的下划线数值常量中的下划线“_”是为了增加可读是为了增加可读性,可以忽略。如性,可以忽略。如8b1100_0110表示表示8位二进制位二进制数。数。数值常量中的数值常量中的“?”表示高阻状态。表示高阻状态。例:例:2B1?表示?表示2位的二进制数其中的一位是高位的二进制数其中的一位是高 阻状态。阻状态。P.34如果没有定义一个整数型的长度,数的如果没有定义一个整数型的长度,数的长度为相应值中定义的位数。下面是两个例
20、子:长度为相应值中定义的位数。下面是两个例子:o721 /9位位2进制位宽的八进制数进制位宽的八进制数hAF /8位位2进制位宽的十六进制数进制位宽的十六进制数如果定义的长度比为常量指定的长度长,如果定义的长度比为常量指定的长度长,通常在左边填通常在左边填0补位。但是如果数最左边一位补位。但是如果数最左边一位为为x或或z,就相应地用,就相应地用x或或z在左边补位。例如:在左边补位。例如:10b10 左边添左边添0占位占位, 0000000010 10bx0 x1 左边添左边添x占位占位,xxxxxxx0 x1P.35如果定义的位宽比实际的位数小,那么最如果定义的位宽比实际的位数小,那么最左边的
21、位相应地被截断:左边的位相应地被截断:3b1001_0011 /与与3b011相等相等5h0FFF /与与5h1F相等相等P.362)实数)实数有两种表示方法:有两种表示方法: 十进制表示方法十进制表示方法 2.0 5.67 2. /非法:小数点两侧必须有数字非法:小数点两侧必须有数字 科学计数法科学计数法 43_5.1e2/43510.0(下划线忽略)(下划线忽略) 9.6E2/960.0 5E-4/0.0005P.37下面的几个例子是无效的格式:下面的几个例子是无效的格式:.253.7.E3.8e-2实数可以转化为整数,根据实数可以转化为整数,根据四舍五入的原则,而不是截四舍五入的原则,而
22、不是截断原则,当将实数赋给一个断原则,当将实数赋给一个整数时,这种转化会自行发整数时,这种转化会自行发生,例如:在转化成整数时,生,例如:在转化成整数时,实数实数25.5和和25.8都变成都变成26,而,而25.2则变成则变成25。P.383)字符串字符串字符串是双引号内的字符序列,不能分成字符串是双引号内的字符序列,不能分成多行书写。若字符串用做多行书写。若字符串用做Verilog HDL表达式或表达式或赋值语句中的操作数,则字符串被看作赋值语句中的操作数,则字符串被看作8位似的位似的ASCII值序列,每一个字符对应值序列,每一个字符对应8位位ASCII值。值。P.39例例1:字符串变量声明
23、:字符串变量声明reg 8*12:1 stringvar;initial begin stringvar=“hello world!”; endP.40转意符:转意符:特殊字符表示特殊字符表示意义意义n换行符换行符tTab键键符号符号*符号符号*ddd3位八进制表示的位八进制表示的ASCII值值%符号符号%P.41Verilog HDL中的标识符可以是任意一中的标识符可以是任意一组字母、数字以及符号组字母、数字以及符号“$”和和“_ ”(下划线)(下划线)的组合,但是标识符的第一个字符必须是字的组合,但是标识符的第一个字符必须是字母或下划线。标识符是区分大小写的。母或下划线。标识符是区分大小写
24、的。count_A1_d2COUNTR56_6830 count/标识符不允许以数字开头标识符不允许以数字开头out */标识符中不允许包含标识符中不允许包含* *P.42Verilog HDL内部已经使用的词称为内部已经使用的词称为关键关键字或保留字。字或保留字。这些关键字用户不能随便使用。这些关键字用户不能随便使用。在编写程序时,变量的定义不要与这些关键词在编写程序时,变量的定义不要与这些关键词冲突。冲突。所有的关键字都是小写所有的关键字都是小写P.43Verilog HDL中共有中共有19种数据类型。种数据类型。这里主要介绍这里主要介绍4种最基本的数据类型。种最基本的数据类型。net t
25、ype 相当于硬件电路中的各种物理连线。相当于硬件电路中的各种物理连线。P.44Net Type的变量不能存储值,而且必须受到驱的变量不能存储值,而且必须受到驱动器的驱动。动器的驱动。两种驱动方式:两种驱动方式:1)在结构描述中将它连接到一个逻辑门或模块)在结构描述中将它连接到一个逻辑门或模块的输出端。的输出端。2)用持续赋值语句)用持续赋值语句assign对其进行赋值。对其进行赋值。特点:特点:输出的值紧跟输入值的变化而变化。输出的值紧跟输入值的变化而变化。 当没有驱动源对其驱动时,它将保持高阻态。当没有驱动源对其驱动时,它将保持高阻态。P.45为了能够精确地反映硬件电路中各种可为了能够精确
26、地反映硬件电路中各种可能的物理信号连接特性,能的物理信号连接特性, Verilog HDL提供了提供了多种连线型数据。常用的有多种连线型数据。常用的有wire型和型和tri型。这型。这两种变量都用于连接器件单元,它们具有相同两种变量都用于连接器件单元,它们具有相同的语法格式和功能。的语法格式和功能。wire型变量:通常用来表示单个门驱动或连续型变量:通常用来表示单个门驱动或连续 赋值语句驱动的连线型数据。赋值语句驱动的连线型数据。tri型变量:通常用来表示多驱动器驱动的连线型变量:通常用来表示多驱动器驱动的连线 型数据。型数据。P.46wire型变量的格式:型变量的格式:wire n-1:0
27、数据名数据名1,数据名,数据名2,数据名,数据名n;wirewire型数据确认符;型数据确认符;n-1:0代表该数据的位宽。缺省状态,位宽代表该数据的位宽。缺省状态,位宽 默认值为默认值为1。这里的位是二进制的位。这里的位是二进制的位。数据名数据名若一次定义多个数据,数据名之间若一次定义多个数据,数据名之间 用逗号隔开。用逗号隔开。声明语句的最后用分号表示语句的结束。声明语句的最后用分号表示语句的结束。P.47例例1. 定义数据总线宽定义数据总线宽8位,地址总线宽位,地址总线宽20位。位。wire7:0 databus;/ databus宽宽8位位wire19:0 addrbus;/ addr
28、bus宽宽20位位或:或:wire8:1 databus;wire20:1 addrbus;P.48例例2. 多位多位wire 型数据可按下面方法使用型数据可按下面方法使用wire7:0 in, out;/定义两个定义两个8位位wire型向量型向量assign out=in;/ assign 就是持续赋值语句就是持续赋值语句例例3. 可只使用多位数据中的几位,但要注意可只使用多位数据中的几位,但要注意 位宽。位宽。wire7:0 out;wire3:0 in;assign out5:2=in;P.49说明:说明:1) wire 型变量常用来表示以型变量常用来表示以assign语句赋值语句赋值的
29、的组合逻辑组合逻辑信号。信号。2)输入)输入/输出信号缺省时自动定义为输出信号缺省时自动定义为wire 型。型。3)对综合器而言,)对综合器而言, wire 型信号的每一位可以型信号的每一位可以取取0,1,X或或Z中的任意值。中的任意值。P.50寄存器是数据存储单元的抽象。寄存器型寄存器是数据存储单元的抽象。寄存器型数据对应的是具有状态保持作用的硬件电路,数据对应的是具有状态保持作用的硬件电路,如触发器、锁存器等。如触发器、锁存器等。寄存器型数据和连线型数据的区别:寄存器型数据和连线型数据的区别:寄存器型数据保持最后一次的赋值。而寄存器型数据保持最后一次的赋值。而连线型数据需有持续的驱动。连线
30、型数据需有持续的驱动。P.51reg 常用的寄存器型变量常用的寄存器型变量reg型数据的格式:型数据的格式:reg n-1:0 数据名数据名1,数据名,数据名2,数据名数据名n;例例1. reg a, b; /定义了两个定义了两个reg型变量型变量reg 7:0 qout; /定义定义qout为为8位宽的位宽的reg 型变量型变量P.52说明:说明:1) reg型数据常用来表示型数据常用来表示“always”模块内的指模块内的指定信号,常代表触发器。定信号,常代表触发器。在在“always”模块内被模块内被赋值的每一个信号都必须定义成赋值的每一个信号都必须定义成reg型型。2)对于)对于reg
31、型数据,其赋值语句的作用就如同型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值。改变一组触发器的存储单元的值。3)若)若reg型数据未初始化(即缺省),则初始型数据未初始化(即缺省),则初始值为不定状态。值为不定状态。P.53在在Verilog HDL中,用中,用parameter来定义来定义常量,即用它来定义变量的位宽及延时等。常量,即用它来定义变量的位宽及延时等。格式:格式:;parameter常用来定义延迟时间和变量宽度。常用来定义延迟时间和变量宽度。P.54例:例:parameter e=2,f=9;/定义两个常数参数定义两个常数参数parameter r=5.7; /定义定
32、义r为一个实型参数为一个实型参数parameter a_delay=(r+f)/2;/用常数表达式赋值用常数表达式赋值P.55用用reg类型变量可构成寄存器和存储器类型变量可构成寄存器和存储器 寄存器寄存器reg 7:0 mybyte;A= mybyte6;/将将mybyte的第的第6位赋值给位赋值给AB= mybyte5:2;/将将mybyte的第的第5,4,3,2 位赋值给位赋值给BP.56例:例:reg 7:0 a,b;reg 3:0 c;reg d;d=a7&b7;/位选择位选择c=a7:4+b3:0;/域选择域选择寄存器可以寄存器可以取任意长度。取任意长度。寄存器中的寄存器中
33、的值通常被解值通常被解释为无符号释为无符号数。数。P.572. 存储器存储器 Verilog HDL通过对通过对reg型变量建立数组来型变量建立数组来对存储器建模,可以描述对存储器建模,可以描述RAM型存储器、型存储器、ROM存储器和存储器和reg 文件。数组中的每一个单元文件。数组中的每一个单元通过一个数组索引进行寻址。在通过一个数组索引进行寻址。在Verilog语言中语言中没有多维数组存在,没有多维数组存在,memory型数据是通过扩型数据是通过扩展展reg型数据的地址范围来生成的。型数据的地址范围来生成的。P.58格式:格式:reg n-1:0 :定义了存储器中每一个存储单元的:定义了存
34、储器中每一个存储单元的大小。大小。m-1:0:定义了该存储器中有多少个这样的单:定义了该存储器中有多少个这样的单元。元。P.59例例1. 定义一个存储器,定义一个存储器,1024个字节,每个字节个字节,每个字节 8位。位。reg 7:0 mymem1023:0;例例2. 存储器与寄存器的区别存储器与寄存器的区别reg n-1:0 rega;/一个一个n位的寄存器位的寄存器reg meman-1:0; /n个一位寄存器组成的存个一位寄存器组成的存 储器组储器组reg 3:0 Amem63:0;P.60说明:说明:1)数组的维数不能大于)数组的维数不能大于2。2)存储器属于寄存器数组类型。连线数据
35、类)存储器属于寄存器数组类型。连线数据类 型没有相应的存储器类型。型没有相应的存储器类型。3)单个寄存器说明既能够用于说明寄存器类)单个寄存器说明既能够用于说明寄存器类 型,也可以用于说明存储器类型。型,也可以用于说明存储器类型。P.61例:例:parameter ADDR_SIZE = 16 , WORD_SIZE = 8;reg WORD_SIZE:1 RamPar ADDR_SIZE- 1 : 0,DataReg;RamPar存储器,是存储器,是16个个8位寄存器数组;位寄存器数组;DataReg8位寄存器。位寄存器。P.624)在赋值语句中需要注意如下区别:)在赋值语句中需要注意如下区
36、别:因此在存储器被赋值时,需要定因此在存储器被赋值时,需要定 义一个索引。下例说明它们之间的不同。义一个索引。下例说明它们之间的不同。reg 5:1 Dig; / Dig为为5位寄存器。位寄存器。. . .Dig = 5b11011; reg BOg5:1; / Bog为为5个个1位寄存器组成的的存储器组位寄存器组成的的存储器组. . .Bog = 5b11011; P.63有一种存储器赋值的方法是分别对存储器中有一种存储器赋值的方法是分别对存储器中的每个字赋值。例如:的每个字赋值。例如:reg 3:0 Xrom 4:1;Xrom1 = 4hA;Xrom2 = 4h8;Xrom3 = 4hF;
37、Xrom4 = 4h2;P.64Verilog语言参考了语言参考了C语言中大多数运算语言中大多数运算符的语义和句法。但符的语义和句法。但Verilog中没有增中没有增1(i+)和减和减1 (i )运算符。运算符。1. 算术运算符算术运算符 +(一元加和二元加)(一元加和二元加) (一元减和二元减)(一元减和二元减) *(乘)(乘) /(除)(除) %(取模)(取模)P.65说明说明:1)两个整数相除,结果值要略去小数部分,只)两个整数相除,结果值要略去小数部分,只取整数部分;取整数部分;2)取模运算时,结果的符号位采用模运算式里)取模运算时,结果的符号位采用模运算式里第一个操作数的符号位;第一
38、个操作数的符号位;模运算表达式模运算表达式 结果结果说明说明10 % 42余数为余数为212 % 30整数整数-11 % 5-1余数为余数为-1P.663)在进行算术运算操作时,如果某个操作数)在进行算术运算操作时,如果某个操作数有不确定的值有不确定的值X或或Z,那么整个结果为,那么整个结果为X。例:例:b10 x1 + b01111 结果为不确定数结果为不确定数bxxxxx4)无符号数和有符号数)无符号数和有符号数 若操作数为寄存器型或连线型,或基数若操作数为寄存器型或连线型,或基数格式表示形式的整数则为无符号数;格式表示形式的整数则为无符号数; 若为整型或实型,则可以是有符号数。若为整型或
39、实型,则可以是有符号数。P.67例:例:reg 5:0 Bar;integer Tab;. . .Bar = -6d12;/寄存器变量寄存器变量Bar的十进制数为的十进制数为 52,向量值为,向量值为110100。Tab = -6d12;/整数整数Tab的十进制数为的十进制数为-12,位,位 形式为形式为110100。 P.685)算术操作结果的长度)算术操作结果的长度算术表达式结果的长度由最长的操作数决算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。作符左端目标长度决定。reg 3:0 Arc, Bar
40、, Crt;reg 5:0 Frx;. . . Arc = Bar + Crt;Frx = Bar + Crt;P.69例:算术运算符应用的一个例子。例:算术运算符应用的一个例子。module arithmetic (a,b,out1,out2,out3, out4,out5) input 2:0 a ,b; output 3:0 out1 ; output 4:0 out3 ; output 2:0 out2 , out4,out5 ; reg 3:0 out1 ; reg 4:0 out3 ; reg 2:0 out2 , out4,out5 ;P.70 always (a or b)be
41、gin out1=a+b ; out2=a-b ; out3=a*b ; out4=a/b ; out5=a%b ;endendmoduleP.71逻辑运算符有逻辑运算符有3种种: & (逻辑与逻辑与) | (逻辑或逻辑或) !(逻辑非逻辑非)P.722) !是单目运算符,只要求一个操作数。!是单目运算符,只要求一个操作数。例:例: !(ab) , ! a 3)在一个逻辑表达式中,如果包含多个逻辑)在一个逻辑表达式中,如果包含多个逻辑运算符,运算符,如:!如:!a&b|(xy)&c按以下优先次序:按以下优先次序: ! & | 逻辑运算符中,逻辑运算符中,“&am
42、p; ”和和“|”的优先级的优先级别低于关系运算符,别低于关系运算符,“!”高于算术运算高于算术运算符。符。P.73 按位取反;按位取反; |按位或;按位或; & 按位与;按位与; 按位异或;按位异或;在在Verilog语言中有语言中有7种位逻辑运算符:种位逻辑运算符:或或 按位异或非;按位异或非;&按位与非;按位与非;|按位或非;按位或非;P.74例:若例:若A=5b11001;B=5b10101,则:,则:A=5b00110A&B= 5b10001A|B= 5b11101AB= 5b01100说明:说明:1)按位运算符中,除了)按位运算符中,除了“”为单目运算符外,
43、为单目运算符外,其余均为双目运算符。其余均为双目运算符。P.752)对于双目运算符,如果操作数长度不相等)对于双目运算符,如果操作数长度不相等, 长度较小的操作数在最左侧添长度较小的操作数在最左侧添0补位。补位。3)无论单目按位运算符还是双目按位运算符,)无论单目按位运算符还是双目按位运算符,经过按位运算后,原来的操作数有几位,所得经过按位运算后,原来的操作数有几位,所得结果仍为几位。结果仍为几位。4)不要将逻辑运算符和按位运算符相混淆。)不要将逻辑运算符和按位运算符相混淆。P.76Verilog关系运算符有:关系运算符有:(大于)(大于)=(大于等于)(大于等于)=(小于等于)(小于等于)P
44、.77例:关系运算符应用的一个例子。例:关系运算符应用的一个例子。module relation (a,b,out1,out2,out3,out4) input 2:0 a ,b; output out1 ,out2,out3,out4 ; reg out1,out2,out3,out4 ; always (a or b)begin out1=ab ; out2=ab ; if (a=b) out4=1 else out4=0 endendmoduleP.78说明:说明:1)在进行关系运算时,若声明的关系为)在进行关系运算时,若声明的关系为“假假”,则返回值是则返回值是“0”;若声明的关系为;
45、若声明的关系为“真真”,则返,则返回值是回值是“1”;2)若某个操作数的值不定,则关系是模糊的,)若某个操作数的值不定,则关系是模糊的,返回值是不定值。返回值是不定值。3)所有关系运算符有着相同的优先级别。关)所有关系运算符有着相同的优先级别。关系运算符的优先级别低于算术运算符。系运算符的优先级别低于算术运算符。P.79等式运算符有等式运算符有4种种 = =(等于)(等于) !=(不等于)(不等于) = = =(全等)(全等) != =(非全等)(非全等)P.80“=”与与“=”的区别:的区别:= 0 1 x z01 0 x x10 1 x xxx x x xzx x x x=0 1 x z0
46、1 0 0 010 1 0 0 x0 0 1 0z0 0 0 1相等运算符真值表相等运算符真值表P.81 单目运算符,也有与、或、非运算。包括下单目运算符,也有与、或、非运算。包括下面几种:面几种: &与与 &与非与非 | 或或 | 或非或非 异或异或 ,同或同或P.82其与、或、非运算规则类似于位运算符的运算其与、或、非运算规则类似于位运算符的运算规则,但其运算过程不同。规则,但其运算过程不同。对操作数的相应位进行与、或、非运算,操作对操作数的相应位进行与、或、非运算,操作数是几位数,则运算结果是几位。数是几位数,则运算结果是几位。位运算:位运算:缩位运算:缩位运算:对单个操
47、作数进行与、或、非递推运算,最后对单个操作数进行与、或、非递推运算,最后的运算结果是的运算结果是1位的二进制数。位的二进制数。P.83具体运算过程:具体运算过程:第一步:先将操作数的第第一步:先将操作数的第1位与第位与第2位进行与、位进行与、 或、非运算;或、非运算;第二步:将运算结果与第第二步:将运算结果与第3位进行与、或、非位进行与、或、非 运算,依次类推,直至最后一位。运算,依次类推,直至最后一位。例:例:reg3:0 a; reg b; b=&a;若:若:A=5b11001则:则:&A=0; |A=1;P.84 右移右移 n 或或 ana代表要进行移位的操作数;代表要进
48、行移位的操作数;n 代表要移几位代表要移几位这两种移位运算都用这两种移位运算都用0来填补移出的空位来填补移出的空位P.85module shift; reg3:0 start, result;initialbigin start=1; result= (start2);endendmoduleP.86? : 条件运算符,有三个操作数,与条件运算符,有三个操作数,与C 语言相同。语言相同。格式:格式:信号信号=条件条件 ? 表达式表达式1 : 表达式表达式2;当条件成立时,信号取表达式当条件成立时,信号取表达式1的值,反的值,反之取表达式之取表达式2的值。的值。P.87 module add_o
49、r_sub(a,b,op,result); parameter ADD=1b0; input 7:0 a,b; input op; output 7:0 result; assign result=(op= ADD)?a+b:a-b; endmoduleP.88这是一个特殊的运算符,这一运算符可以将两这是一个特殊的运算符,这一运算符可以将两个或更多个信号的某些位并接起来进行运算操个或更多个信号的某些位并接起来进行运算操作。其使用方法是把某些信号的某些位详细地作。其使用方法是把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号
50、。来表示一个整体信号。P.89例:例:wire 7:0 Dbus; wire 11:0 Abus; assign Dbus 7:4 = Dbus 0, Dbus 1, Dbus2, Dbus3;/以反转的顺序将低端以反转的顺序将低端4位赋位赋给高端给高端4位。位。 assign Dbus = Dbus 3:0, Dbus 7:4;/高高4位与低位与低4位交换。位交换。P.90由于非定长常数的长度未知由于非定长常数的长度未知, 不允许连接不允许连接非定长常数。非定长常数。例如例如, 下列式子非法:下列式子非法:Dbus,5 /不允许连接操作非定长常数。不允许连接操作非定长常数。P.91运算符优先
51、级排序:运算符优先级排序:! * / %+ - = != = !=& |&|?:高优先级别高优先级别低优先级别低优先级别P.92 内容简介内容简介v 过程语句过程语句v 块语句块语句v 赋值语句赋值语句v 条件语句条件语句v 循环语句循环语句v 编译向导语句编译向导语句P.93Verilog HDL是由模块组成的是由模块组成的行为描述方式行为描述方式结构描述方式结构描述方式模块模块数据流描述方式数据流描述方式P.94过程块过程块过程语句过程语句语句块语句块initialalways过程性赋值语句过程性赋值语句高级程序语句高级程序语句过程赋值语句过程赋值语句过程持续赋值过程持续赋
52、值语句语句条件分支语句条件分支语句循环控制语句循环控制语句1. always过程语句过程语句P.95格式格式:always (敏感信号表达式)(敏感信号表达式)begin/过程赋值过程赋值/if-else,case,casex,casez选择语句选择语句/while,repeat,for循环循环/task,function调用调用end过程块过程块可选项可选项P.961)敏感信号)敏感信号只要表达式中某个信号发生变只要表达式中某个信号发生变化,就会引发块内语句的执行。化,就会引发块内语句的执行。 (a) /当信号当信号a的值发生变化时的值发生变化时 (a b) /当信号当信号a或或b的值发生变
53、化时的值发生变化时 ( clock) /当当clock上升沿到来时上升沿到来时 ( clock) /当当clock下降沿到来时下降沿到来时 ( clk reset)/当当clk的上升沿或的上升沿或reset的下降沿到来时的下降沿到来时P.97 mux4_1(out,in0,in1,in2,in3,sel); out; in0,in1,in2,in3 ; 1:0 sel; out; (in0 in1 in2 in3) (sel)2b00:out=in0 ;2b01:out=in1 ;P.982b10:out=in2 ;2b11:out=in3 ; :out=2bx ; 敏感信号分类敏感信号分类边
54、沿敏感型边沿敏感型电平敏感型电平敏感型wait语句语句P.992) posedge 与与 negedge 关键字关键字例例1:同步置数、同步清零的计数器:同步置数、同步清零的计数器 count(out,data,load,reset,clk);7:0 out; 7:0 data ; load , clk , reset; 7:0 out; ( clk) /clk上升沿触发上升沿触发P.100 (!reset) out=8h00 ;/同步清零,低有效同步清零,低有效 (load)out=data ;/同步预置同步预置 out=out+1 ;/计数计数例例2:时钟信号为:时钟信号为clk,clea
55、r为异步清零信号为异步清零信号 ( clk clear) ( clk clear)P.101错误的描述错误的描述: ( clk clear) (clear)out=0; out=in; /应改为应改为if (!clear)P.1023)用)用过程块实现过程块实现功能功能v 敏感信号表达式内不能包含敏感信号表达式内不能包含posedge 与与 negedge 关键字关键字v 组合逻辑的所有输入信号都要作为组合逻辑的所有输入信号都要作为“信号名信号名” 出现在敏感信号表达式中。出现在敏感信号表达式中。P.103 three_and(f,a,b,c); f; a,b,c ; f; (a or b)
56、f=a&b&c;/应改为应改为 (a or b or c)P.1044)用)用过程块实现过程块实现功能功能v 敏感信号表达式内可以有敏感信号表达式内可以有posedge 与与 negedge 关键字,也可以只有信号名;关键字,也可以只有信号名;v 不要求所有输入信号都出现在敏感信号列表不要求所有输入信号都出现在敏感信号列表的的“信号名信号名”中。中。P.105module D_FF(Q,D,CLK);output Q;input D,CLK;reg Q;always (negedge CLK) begin Q = D; endendmodule例:时钟下降沿触发的例:时钟下降沿
57、触发的D触发器触发器P.106说明:说明:1)过程语句后面可以是一个敏感事件列过程语句后面可以是一个敏感事件列表表,该敏感事件列表的作用是用来激活该敏感事件列表的作用是用来激活过程语句的执行;过程语句的执行;2)如果)如果过程块中的敏感事件列表缺省,过程块中的敏感事件列表缺省,则认为触发条件始终被满足,则认为触发条件始终被满足, 过程块过程块将无条件地循环执行下去,直到遇到将无条件地循环执行下去,直到遇到或或系统任务为止;系统任务为止;3)进行仿真时,)进行仿真时, 过程块是从模拟过程块是从模拟0开始开始执行的,且执行的,且语句在仿真过程中是不断语句在仿真过程中是不断重复执行的;重复执行的;P
58、.1074)敏感事件列表由一个或多个)敏感事件列表由一个或多个“事件表达式事件表达式”构成,事件表达式说明了启动块内语句执行构成,事件表达式说明了启动块内语句执行时的触发条件,时的触发条件,。Verilog规定:只要这些事件表达式所代表的规定:只要这些事件表达式所代表的多个触发条件中有一个成立,就启动块内语多个触发条件中有一个成立,就启动块内语句的执行。句的执行。5)。6)过程块和过程块和过程块都不能嵌套使过程块都不能嵌套使用。用。P.108例:不恰当使用例:不恰当使用always语句而产生仿真死锁的语句而产生仿真死锁的情况。情况。alwaysbegin clk=clk;endalwaysbe
59、gin #50 clk=clk;end加上时延控制加上时延控制“#50”产生一个周期为产生一个周期为100的的方波信号方波信号 当敏感信号列表缺省当敏感信号列表缺省时,语句块将一直执时,语句块将一直执行下去,这就可能在行下去,这就可能在仿真时产生仿真死锁仿真时产生仿真死锁情况情况 2. initial过程块过程块P.109过程块过程块P.110说明:说明:1) initial语句后面没有语句后面没有“敏感信号列表敏感信号列表”;2) initial过程块中的语句是从模拟过程块中的语句是从模拟0开始执开始执 行,它行,它中只执行一次,在执行中只执行一次,在执行 完后,该完后,该initial过程
60、块就被挂起,不再执过程块就被挂起,不再执 行;行;3) initial过程块的使用主要是面向功能模拟过程块的使用主要是面向功能模拟 的,通常的,通常。P.111例例1:用:用initial过程语句对测试变量过程语句对测试变量A、B、C 赋值。赋值。 timescale 1ns/100ps module test; reg A,B,C; initialbeginA=0;B=1;C=0;#50 A=1;B=0;P.112 #50 A= 0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; endendmoduleP.113例例2:initial过程块用于对变量和存储器进行初过程块用于对变量和存储器进行初始化。始化。module register_initialize(memory);inout areg;in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 别墅洋房钢筋劳务合同
- 后勤综合服务合同
- 建筑水电工劳务合同
- 建筑水电劳务安装合同
- 塑钢门窗制作安装合同
- 农业机械承包合同
- 挖机机械设备租赁合同
- 升级合同协议
- 印刷合同保密协议
- 投资上市协议合同范本
- 山东省济南市章丘区2023-2024学年三年级下学期4月期中语文试题
- 《电力负荷聚合服务商需求响应系统技术规范》
- 河南省洛阳市2023-2024学年高二下学期4月期中考试数学试题(含答案)
- 2024年上海市闵行区高三语文二模作文指导与佳作:“温故”和“知新”可以是什么关系呢
- 2023-2024学年四川省小升初考试语文试卷含答案
- 国外导引头技术现状及发展趋势
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 肿瘤防治知识讲座总结与反思
- 5M1E人机料法环测质量
- (高清版)DZT 0426-2023 固体矿产地质调查规范(1:50000)
- 人教版七年级下册地理课件:欧洲西部
评论
0/150
提交评论