verilog的基本语法

上传人:M****1 文档编号:580392484 上传时间:2024-08-28 格式:PPT 页数:219 大小:2.76MB
返回 下载 相关 举报
verilog的基本语法_第1页
第1页 / 共219页
verilog的基本语法_第2页
第2页 / 共219页
verilog的基本语法_第3页
第3页 / 共219页
verilog的基本语法_第4页
第4页 / 共219页
verilog的基本语法_第5页
第5页 / 共219页
点击查看更多>>
资源描述

《verilog的基本语法》由会员分享,可在线阅读,更多相关《verilog的基本语法(219页珍藏版)》请在金锄头文库上搜索。

1、TJIC第三章第三章第三章第三章 verilogverilogverilogverilog的基本语法的基本语法的基本语法的基本语法天津大学电子科学与技术系史再峰天津大学电子科学与技术系史再峰verilog2009-TJU.ASICCenter-ArnoldShiTJIC3.13.13.13.1数据类型及其常量及变数据类型及其常量及变数据类型及其常量及变数据类型及其常量及变量量量量天津大学电子科学与技术系史再峰天津大学电子科学与技术系史再峰verilog2009-TJU.ASICCenter-ArnoldShi 0 0、低、伪、逻辑低、地、低、伪、逻辑低、地、VSSVSS、负插入、负插入01XZ

2、0bufbufbufbufif11 1、高、真、逻辑高、电源、高、真、逻辑高、电源、VDDVDD、正插入、正插入X X、不确定:逻辑冲突无法确定其逻辑值、不确定:逻辑冲突无法确定其逻辑值HiZHiZ、高阻抗、三态、无驱动源、高阻抗、三态、无驱动源 Verilog 的四种逻辑值x和X、z和Z不区别大小写。Z有时候也用?代替verilog2009-TJU.ASICCenter-ArnoldShi数据类型数据类型vVerilogHDL中共有19种数据类型,分成常量和变量v最基本最常用的4种:寄存器型reg线网型wire整形integer参数型parameterv其余的包括:largemediumsc

3、alaredtimesmalltritriotri1triandtriortriregvectoredwandwor型,主要与基本单元库有关,设计时很少使用verilog2009-TJU.ASICCenter-ArnoldShi一、常量一、常量v在程序运行中,其值不能被改变的量叫常量v两类最基本的常量:数字型常量和参数(parameter)数字型常量:整型数可以按如下两种方式书写简单的十进制数格式基数格式verilog2009-TJU.ASICCenter-ArnoldShi基数表示法(一)基数表示法(一)格式:位宽进制值无符号数。位宽是按照二进制数来计算的。进制可以为b或B(二进制)、o或O

4、(八进制)、d或D(十进制)、h或H(十六进制)。值是基于进制的数字序列。如:3b001,3B110三位二进制6o12,6O12六位八进制4d9,4D9十位十进制8hBF,8HBF八位十六进制verilog2009-TJU.ASICCenter-ArnoldShi基数表示法(二)基数表示法(二)v基数格式计数形式的数通常为无符号数。v这种形式的整型数的长度定义是可选的。如果没有定义一个整数型的长度,数的长度为相应值中定义的位数。v下面是两个例子:o7219位八进制数hAF8位十六进制数verilog2009-TJU.ASICCenter-ArnoldShi基数表示法(三)基数表示法(三)v如果

5、定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位为x或z,就相应地用x或z在左边补位。例如:10b10左边添0占位,000000001010bx0x1左边添x占位,xxxxxxx0x1v如果长度定义得更小,那么最左边的位相应地被截断。例如:3b1001_0011与3b011相等5H0FFF与5H1F相等v?字符在数中可以代替值z在值z被解释为不分大小写的情况下提高可读性verilog2009-TJU.ASICCenter-ArnoldShi下划线下划线u下划线可以用来分割数的表达式以提高程序的可读性,但不能用在位宽和进制处,只能用于具体的数字之间u比如u16b1010_

6、1011_11111_000/合法格式u8b_0011_1011/非法格式verilog2009-TJU.ASICCenter-ArnoldShi负数负数一个数字可以被定义成负数,只要在位宽表达式前加一个减号-8d5/合法格式8d-5/非法格式verilog2009-TJU.ASICCenter-ArnoldShi简单的十进制格式简单的十进制格式v这种形式的整数定义为带有一个可选的“+”(一元)或“”(一元)运算符的数字序列。v这种形式的整数值代表一个有符号的数。负数使用补码形式表示。例如15相当于二进制01111-15相当于二进制10001verilog2009-TJU.ASICCenter

7、-ArnoldShi实数类型实数类型v实数可以用下列两种形式定义十进制记数法,例如:2.0;-0.1等科学记数法,例如:235.1e2等于23510.0234_12e2等于2341200.0v实数小数通过四舍五入被隐式地转换为最相近的整数。例如:42.446,42.45转换为整数4292.5,92.699转换为整数935.62转换为整数626.22转换为整数6verilog2009-TJU.ASICCenter-ArnoldShi常量的位数常量的位数v,x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)v当常量不说明位数时候默认是32位,每个

8、字母用8位ASCII码来表示10=32d10=32b10101=32d1=32b1-1=-32d1=32hFFFF_FFFFBX=32BX=32BXXXXXXXXXX.“AB”=16B010000001_01000010A的ASCII值是85,B的值是86verilog2009-TJU.ASICCenter-ArnoldShi字符串字符串字符串是双引号内的字符串列。一个字符可用八位二进制表示。如: “INTEGER” 需要 8*7位。例:reg 8*14:1 Message; Message = “INTERNAL ERROR”;verilog2009-TJU.ASICCenter-Arnol

9、dShi课堂练习课堂练习v下列表达式的位模式是什么?写出其具体的二进制表示值7o44,Bx0,5bx110,hA0,10d2,hzFVerilog描述实际的二进制值7o44100100Bx0x05bx110xx110hA01010_000010d20000_0000_10hzFzzzz1111verilog2009-TJU.ASICCenter-ArnoldShi参数参数参数是一个常量。用parameter定义一个标识符来代表一个常量。参数经常用于定义时延和变量的宽度。格式:parameterparam1=const_expr1,param2=const_expr2,paramN=const_

10、exprN;如:parameterDelay=1;parameterA=32,B=4b0001;parameterstring=“exec_command”;verilog2009-TJU.ASICCenter-ArnoldShi参数的传递参数的传递v参数值也可以在编译时被改变。改变参数值可以使用参数定义语句或通过在模块初始化语句中定义参数值v当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数值的改变可采用下述两种方式:参数定义语句(defparam);带参数值的模块引用。verilog2009-TJU.ASICCenter-ArnoldShidefparamdefp

11、aram举例举例module TOP(NewA,NewB,NewS,NewC);input NewA,NewB;output NewS,NewC;defparam Ha1.XOR_DELAY=5,/实例Ha1中的参数XOR_DELAY。Ha1.AND_DELAY=2;/实例Ha1中参数的AND_DELAY。HAHa1(NewA,NewB,NewS,NewC);endmodulemoduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=AB;assign#AND_DELAYC=A

12、&B;endmoduleHATOPverilog2009-TJU.ASICCenter-ArnoldShi参数值的模块引用参数值的模块引用module TOP3(NewA,NewB,NewS,NewC);input NewA,NewB;output NewS,NewC;HA#(5,2)Ha1(NewA,NewB,NewS,NewC);/第1个值5赋给参数AND_DELAY,该参数在模块HA中说明。/第2个值2赋给参数XOR_DELAY,该参数在模块HA中说明。endmoduleverilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习- -参数传递参数传递v假定一

13、个模块为BK,内部两个参数P1,P2;另外一个模块为HA,内部参数P3,P4v其在TOP模块中实例化调用的名称分别为U1,U2v请尝试在top模块中用两种不同的方法改变其参数值p1-p4分别为1,2,3,4verilog2009-TJU.ASICCenter-ArnoldShi二、变二、变 量量v在Verilog中有两大主要数据类型:线网类型(wire)、寄存器类型(reg)。v线网类型包含下述不同种类的线网子类型。wire,tri用于连线的最常见的线网类型wor,trior线或wand,triand线与trireg此线网存储数值,用于电容节点的建模tri1,tri0用于线逻辑的建模,上拉或下

14、拉驱动supply0,supply1supply0用于对“地”建模,supply1对电源建模verilog2009-TJU.ASICCenter-ArnoldShinets(网络连线)网络连线)nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。 netsabslselbselansloutverilog2009-TJU.ASICCenter-ArnoldShiNets(线网型)线网型)例:wireBpW;assignBpW=Error&Wait;assignBpW=Valid|Clear;BpW电路图

15、verilog2009-TJU.ASICCenter-ArnoldShiNets(网络连线,线网类型)v简单的线网类型定义说明语句为:vnet_kindmsb:lsbnet1,net2,.netN;v当一个线形有两个或多个驱动时,线网的有效值按如下表确定。verilog2009-TJU.ASICCenter-ArnoldShi补充:补充:CMOSNORABF001010100110A+BABABABverilog2009-TJU.ASICCenter-ArnoldShi补充:补充:CMOSNANDABABABABF001011101110ABverilog2009-TJU.ASICCenter

16、-ArnoldShiNets(网络连线)网络连线)verilog2009-TJU.ASICCenter-ArnoldShi补充知识补充知识: :连续赋制值语句连续赋制值语句v连续赋制语句用于把值赋给线网型变量(不能为寄存器型变量赋值)v语句形式为:assign A = B & C;连续赋值语句在什么时候执行呢? 只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;如果结果值有变化,新结果就赋给左边的线网。verilog2009-TJU.ASICCenter-ArnoldShi连续赋值的目标类型v 标量线网v 向量线网v 向量的常数型位选择 ,如 a1v 向量的常数型部分选

17、择 如:a3:1v 上述类型的任意的拼接运算结果verilog2009-TJU.ASICCenter-ArnoldShi连续赋值语句举例连续赋值语句举例moduleF A _ D f (A, B, Cin, Sum, Cout );inputA, B, Cin;outputSum, Cout ;assignS u m =A B Cin;assignC o u t =(A & Cin)|(B & Cin)|(A & B);endmodule在本例中,有两个连续赋值语句。这些赋值语句是并发的,与其书写的顺序无关verilog2009-TJU.ASICCenter-ArnoldShi数据流描述方式数

18、据流描述方式例例: wor BpW; wand BpR; assign BpW=Error & Wait; assign BpW=Valid | Clear; assign BpR=Error Valid; assign BpR=! Clear;BpW和BpR电路图verilog2009-TJU.ASICCenter-ArnoldShi寄存器(register)类型变量 寄存器(寄存器(register)类型变量)类型变量 register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbs

19、elansloutreg_areg_selreg_bverilog2009-TJU.ASICCenter-ArnoldShiregreg型型v寄存器是数据存储单元的抽象vreg型数据常用来表示always块内的指定信号,常代表触发器vreg型数据用initial或者always块中指定信号vreg型数据的缺省值是x。可以被赋正值或者负值。当它作为一个表达式中的操作数时候,作为无符号数。vreg数据类型定义格式为regn-1:0数据名1,.;或者regn:1数据名1,.;verilog2009-TJU.ASICCenter-ArnoldShi寄存器阵列 VerilogVerilog 语言支持寄存

20、器阵列的声明语言支持寄存器阵列的声明:integer NUMS 7:0; / 8个整型变量的寄存器阵列time t_vals 3:0; /4个时间变量的寄存器阵列数据类型为 reg 的阵列常称为存储器(即 memory):reg 15:0 MEM 0:1023; / 1K x 16 位的存储器reg 7:0 PREP hfffe : hffff; / 2 x 8 位的存储器可以用参数来表示存储器的大小:parameter wordsize = 16;parameter memsize = 1024;reg wordsize-1:0 MEM3memsize-1:0;只能一次选择一个字,不允许对存

21、储器变量值部分进行部分选择或位选择.如 dram60 2:4是错误的verilog2009-TJU.ASICCenter-ArnoldShi存储器存储器 memorymemory型变型变 量量存储器存储器 memorymemory型型 用一个寄存器数组来对存储器建模。用一个寄存器数组来对存储器建模。 格式格式: : regreg msb:lsbmsb:lsb 存储器名存储器名 upper1:lower1upper1:lower1; 如如: : regreg 3:0 3:0 MyMemMyMem 63:0; / 64 63:0; / 64个四位寄存器组个四位寄存器组 verilog2009-TJ

22、U.ASICCenter-ArnoldShi其他类型变量其他类型变量vintegerinteger 整数寄存器整数寄存器 有符号数。有符号数。 主要用来高层次建模。主要用来高层次建模。 如如: : integer A; integer A;/ / 整形寄存器整形寄存器,32,32位位 integer B 1023:0; / 10integer B 1023:0; / 10位位vtimetime 时间类型寄存器时间类型寄存器 如如: : time time CurrentTimeCurrentTime;/ ;/ CurrentTimeCurrentTime存储一个时间值存储一个时间值 Curre

23、ntTimeCurrentTime = $time; = $time;verilog2009-TJU.ASICCenter-ArnoldShi输入端口(input)可以由寄存器(reg)或线网(wire)连接驱动,但它本身只能驱动网络连接。输出端口(output)可以由寄存器或线网连接驱动,但它本身只能驱动线网连接。输入/输出端口(inout)只可以由线网连接驱动,但它本身只能驱动线网连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量 如何选择正确的数据类型?verilog2009-TJU.ASICCenter-ArnoldShimodul

24、e top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule举例说明数据类型的选择verilog2009-TJU.ASICCenter-ArnoldShi在过程块(alwaysinitial)中对变量

25、赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型把模块的输入信号定义为寄存器类型。这是经常犯的三个错误!选择数据类型时常犯的错误verilog2009-TJU.ASICCenter-ArnoldShiTJIC3.23.23.23.2运算符及表达式运算符及表达式运算符及表达式运算符及表达式天津大学电子科学与技术系史再峰天津大学电子科学与技术系史再峰verilog2009-TJU.ASICCenter-ArnoldShi3.2 3.2 运算符(操作符)及表达式运算符(操作符)及表达式vVerilogHDL中的运算符可以分为下

26、述类型:算术运算符关系运算符相等运算符逻辑运算符按位运算符缩减(归约)运算符移位运算符条件运算符连接和复制运算符verilog2009-TJU.ASICCenter-ArnoldShi按所带操作数的个数分类按所带操作数的个数分类v单目运算符(unaryoperator)带一个操作数,操作数在运算符的右边如clockv双目运算符(binaryoperator)带两个操作数,操作数分别在运算符的两边如a|bv三目运算符(ternaryoperator)带三个操作数,用三目运算符隔开verilog2009-TJU.ASICCenter-ArnoldShi3.2.13.2.1算术运算符算术运算符算术运

27、算符有:v+(一元加和二元加)v-(一元减和二元减)v*(乘)v/(除)v%(取模)整数除法截断任何小数部分。例如:7/4结果为1取模运算符求出与第一个运算符符号相同的余数。7%4结果为3而-7%4结果为-3verilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习v以下表达式在verilogHDL中的值是多少?(结果用16位hex表示表示)5/3(-9)/6(-9)%611%(-5)12/(-7)答案是5/3=16h0001(-9)/6=16hFFFF(-9)%6=16hFFFD11%(-5)=16h000112/(-7)=16hFFFFverilog2009-

28、TJU.ASICCenter-ArnoldShi3.2.23.2.2按位运算符按位运算符v按位运算符有:(一元非)&(二元与)|(二元或)(二元异或),(二元异或非)v这些运算符在输入操作数的对应位上按位操作,并产生向量结果。v不同长度操作符运算时,会右端对齐,左端补0verilog2009-TJU.ASICCenter-ArnoldShi3.2.2.13.2.2.1按位非运算符按位非运算符verilog2009-TJU.ASICCenter-ArnoldShi3.2.2.23.2.2.2按位与运算符按位与运算符verilog2009-TJU.ASICCenter-ArnoldShi3.2.2

29、.33.2.2.3按位或运算符按位或运算符verilog2009-TJU.ASICCenter-ArnoldShi3.2.2.43.2.2.4按位异或运算符按位异或运算符verilog2009-TJU.ASICCenter-ArnoldShi3.2.2.53.2.2.5按位异或非运算符按位异或非运算符verilog2009-TJU.ASICCenter-ArnoldShi按位操作符举例按位操作符举例v假定A =b0110;B =b0100;那么:A |B 结果为0110A&B 结果为01004b10114bx010=4bx001v如果操作数长度不相等,长度较小的操作数在最左侧添0补位。例如,b

30、0110b10000与如下式的操作相同:b00110b10000结果为b10110。verilog2009-TJU.ASICCenter-ArnoldShi3.2.33.2.3逻辑运算符逻辑运算符v逻辑运算符有: & (逻辑与) | (逻辑或) !(一元逻辑非)v这些运算符在逻辑值0或1上运算。逻辑运算的结构为0或1。verilog2009-TJU.ASICCenter-ArnoldShi逻辑与运算举例逻辑与运算举例assigna=8haa;assignb=8hff;assignc_out=a&b;assignc_out2=a&b;c_out2结果是0000_0001verilog2009-T

31、JU.ASICCenter-ArnoldShi课堂练习课堂练习v以下表达式在verilogHDL中的值是多少?(结果用8位表示)vassignd_0=4b11018h0a;vassignd_1=4b11018h0a;vassignd_2=4b1z01|8h0a;vassignd_3=4b1101&8h0a;vassignd_4=!4b1x01;vassignd_5=4b1010|8h55;v答案是v#hexd_0is07v#hexd_1isF8v#binaryd_2is0000_1x11v#hexd_3is01v#hexd_4is00v#hexd_5is01verilog2009-TJU.AS

32、ICCenter-ArnoldShi3.2.43.2.4关系运算符关系运算符v关系运算符有:(大于)=(不小于)45结果为假(0)52=b01110等价于:b01000=b01110结果为假(0)verilog2009-TJU.ASICCenter-ArnoldShi3.2.53.2.5相等关系运算符相等关系运算符v相等关系运算符有:=(逻辑相等)!=(逻辑不等)=(全等)!=(非全等)v如果比较结果为假,则结果为0;否则结果为1。在全等比较中,值x和z严格按位比较。verilog2009-TJU.ASICCenter-ArnoldShi相等关系运算举例相等关系运算举例vData=b11x0;

33、Addr=b11x0;那么(Data=Addr)不定,值为x,但:Data=Addr为真,值为1。v如果操作数的长度不相等,长度较小的操作数在左侧添0补位,例如:2b10=4b0010与下面的表达式相同:4b0010=4b0010结果为真(1)。verilog2009-TJU.ASICCenter-ArnoldShi关系及相等关系运算符练习关系及相等关系运算符练习判断以下表达式中的d值是多少assignd_relation1=(4b1011=4b10x1);assignd_relation2=(4b1011=4b10x1);assignd_relation3=(4b10x1=4b10x1);a

34、ssignd_relation4=(4b10z1=4b10x1);assignd_relation5=(4b10x1!=4b10x1);assignd_relation6=(4b10x1!=4b10x1);v答案是:v#bind_relation1is1bxv#bind_relation2is1bxv#bind_relation3is1bxv#bind_relation4is1b0v#bind_relation5is1b0v#bind_relation6is1bxverilog2009-TJU.ASICCenter-ArnoldShi3.2.6 3.2.6 缩减(归约)运算符缩减(归约)运算符

35、v归约运算符在单一操作数的所有位上操作,并产生1位结果。归约运算符有:&(归约与):如果存在位值为0,那么结果为0;若如果存在位值为x或z,结果为x;否则结果为1。&(归约与非):与归约运算符&相反。|(归约或):如果存在位值为1,那么结果为1;如果存在位x或z,结果为x;否则结果为0。|(归约或非):与归约运算符|相反。(归约异或):如果存在位值为x或z,那么结果为x;否则如果操作数中有偶数个1,结果为0;否则结果为1。(归约异或非):与归约运算符正好相反。verilog2009-TJU.ASICCenter-ArnoldShi缩减(归约)运算符练习缩减(归约)运算符练习判断以下表达式中的d

36、值是多少assignd_reduction1=&8b1011_0011;assignd_reduction2=|8b1011_0011;assignd_reduction3=&8b1011_0011;assignd_reduction4=8b1011_0011;assignd_reduction5=8b1011_0011;assignd_reduction6=|8b1011_00x1;assignd_reduction7=8b10z1_0011;assignd_reduction8=&8b1011_00x1;assignd_reduction8=&8b1011_00x1;modelsim仿真验

37、证的答案是v#bind_reduction1is1b0v#bind_reduction2is1b0v#bind_reduction3is1b1v#bind_reduction4is1b0v#bind_reduction5is1b1v#bind_reduction6is1b0v#bind_reduction7is1bxv#bind_reduction8is1b0vError:./vlog_test.v(57):near:syntaxerror,verilog2009-TJU.ASICCenter-ArnoldShi3.2.3.2.7 7 移位运算符移位运算符v移位运算符有:(右移)v移位运算符左

38、侧操作数移动右侧操作数表示的次数,它是一个逻辑移位。空闲位添0补位。v如果右侧操作数的值为x或z,移位操作的结果为x。假定:reg 0:7Qreg;.Qreg =4b0111;那么:Qreg 2是8b0000_0001verilog2009-TJU.ASICCenter-ArnoldShi3.2.8 3.2.8 条件运算符条件运算符v条件运算符根据条件表达式的值选择表达式,形式如下:cond_expr?expr1:expr2v如果cond_expr为真(即值为1),选择expr1;v如果cond_expr为假(值为0),选择expr2。v如果cond_expr为x或z,结果将是按以下逻辑exp

39、r1和expr2按位操作的值:0与0得0,1与1得1,其余情况为x。verilog2009-TJU.ASICCenter-ArnoldShi条件运算符举例条件运算符举例vwire 0:2Student=Marks18?GA:GC;计算表达式Marks 18;如果真,GA 赋值给Student;如果Marks B,B_GT_A=BA;等价于等价于wireclear;assignclear=b1;v不允许在同一个线网上出现多个线网说明赋值。如果多个赋值是必需的,则必须使用连续赋值语句。verilog2009-TJU.ASICCenter-ArnoldShi隐式线网隐式线网v如果在VerilogHD

40、L模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是default_nettype编译指令能够用于取代缺省线网类型.v例:default_nettypewand/根据此编译指令,所有后续未说明的线网都是wand类型v再例:default_nettypewiremoduleAND4to1(Z,D0,D1,D2,D3,S0);outputZ;inputD0,D1,D2,D3,S0;assignZ=S0?(D0&D1&D2&D3):1b0;endmoduleverilog2009-TJU.ASICCenter-ArnoldShi数据流建模课堂练习数据流建模课堂练习verilog2009-

41、TJU.ASICCenter-ArnoldShi数据流建模参考答案moduleMSDFF_DF(D,C,Q,Qbar);inputD,C;outputQ,Qbar;/wireNotC,NotD,NotY,Y,D1,D2,Ybar,Y1,;Y2assignNotD=D;assignNotC=C;assignNotY=Y;assignD1=(D&C);assignD2=(C&NotD);assignY=(D1&Ybar);assignYbar=(Y&D2);assignY1=(Y&NotC);assignY2=(NotY&NotC);assignQ=(Qbar&Y1);assignQbar=(Y2

42、&Q);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi三、时延说明三、时延说明vassign#6Ask=Quiet|Late;v规定右边表达式结果的计算到其赋给左边目标需经过6个时间单位时延。v例如,如果在时刻5,Late值发生变化,则赋值的右端表达式被计算,并且Ask在时刻11(=5+6)被赋于新值verilog2009-TJU.ASICCenter-ArnoldShi时延vVerilogHDL模型中的所有时延都根据时间单位定义v使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义,如下所示: timescale 1ns/10

43、0ps此语句说明时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模块包含上面的连续赋值语句,#2代表2ns。v如果没有这样的编译器指令,VerilogHDL模拟器会指定一个缺省时间单位。IEEEVerilogHDL标准中没有规定缺省时间单位。verilog2009-TJU.ASICCenter-ArnoldShi为什么会有延时?为什么会有延时?以下两个最基本的电路单元verilog2009-TJU.ASICCenter-ArnoldShiCMOSNANDABABABABF001011101110ABverilog2009-T

44、JU.ASICCenter-ArnoldShiCMOSNORABF001010100110A+BABABABverilog2009-TJU.ASICCenter-ArnoldShiMOSFETMOSFET的结构的结构 verilog2009-TJU.ASICCenter-ArnoldShiMOSMOS电容电容verilog2009-TJU.ASICCenter-ArnoldShi静态静态CMOS的开关模型的开关模型AReqARpARpARnCLACLBRnARpBRpARnCintBRpARpARnBRnCLCintNAND2INVNOR2verilog2009-TJU.ASICCenter-

45、ArnoldShi关于时延探讨关于时延探讨v如果右端在传输给左端之前变化,右端发生在时延间隔内的变化被滤掉。例如:assign#4Cab=Drm;v这也同样适用于惯性时延行为:即右端值变化在能够传播到左端前必须至少保持时延间隔;如果在时延间隔内右端值变化,则前面的值不能传输到输出。verilog2009-TJU.ASICCenter-ArnoldShi三类时延值三类时延值v对于每个时延定义,总共能够指定三类时延值:上升时延下降时延关闭时延assign#(rise, fall, turn-off)LHS=RHS_expr;v如果右端从非0向量变化到0向量,那么就使用下降时延。如果右端值到达z z

46、,那么使用下降时延;否则使用上升时延。assign#4Ask=Quiet|Late;/Onedelayvalue.assign#(4,8)Ask=Quick;/Twodelayvalues.assign#(4,8,6)Arb=&DataBus;/Threedelayvalues.assignBus=MemAddr7:4;/Nodelayvalue.verilog2009-TJU.ASICCenter-ArnoldShi带时延的译码器建模带时延的译码器建模timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output0:3Z;wireA

47、bar,Bbar;assign#1Abar=A;assign#1Bbar=B;assign#2Z0=(Abar&Bbar&EN);assign#2Z1=(Abar&B&EN);assign#2Z2=(A&Bbar&EN);assign#2Z3=(A&B&EN);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi结果波形结果波形verilog2009-TJU.ASICCenter-ArnoldShi3.3.33.3.3 线网时延线网时延v时延也可以在线网说明中定义,如:wire#5Arb;线网时延效果如图线网时延线网时延Textassign 时延assig

48、n 时延驱动2驱动2驱动1RHS表达式RHS表达式线网目标verilog2009-TJU.ASICCenter-ArnoldShi线网时延举例线网时延举例wire#5Arb;assign#2Arb=Bod⋒v因为定义了线网时延,实际对Arb的赋值发生在时刻17(=10+2+5)。verilog2009-TJU.ASICCenter-ArnoldShi课后作业课后作业v数据流建模以下的奇偶发生器verilog2009-TJU.ASICCenter-ArnoldShiTJIC3.4 3.4 3.4 3.4 门级结构建模门级结构建模门级结构建模门级结构建模天津大学电子科学与技术系史再峰天津大

49、学电子科学与技术系史再峰verilog2009-TJU.ASICCenter-ArnoldShi3.4 门级结构建模moduleaddbit(a,b,ci,sum,co);inputa,b,ci;outputsum,co;wirea,b,ci,sum,co,n1,n2,n3;xor(n1,a,b,);xor(sum,n1,ci);and(n2,a,b);and(n3,n1,ci);or(co,n2,n3);endmodule由一些Verilog原型列出结构化的元件并按网表连接verilog2009-TJU.ASICCenter-ArnoldShi3.4.13.4.1内置的基本门内置的基本门vV

50、erilogHDL为门级电路建模的能力.提供下列内置基本门:多输入门:and,nand,or,nor,xor,xnor多输出门:buf,not三态门:bufif0,bufif1,notif0,notif1上拉、下拉电阻:pullup,pulldownMOS开关:cmos,nmos,pmos,rcmos,rnmos,rpmos双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1verilog2009-TJU.ASICCenter-ArnoldShi门级结构建模语法v语句形式gate_typeinstance_name(term1,term2,.,te

51、rmN);v注意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表示与门的输入/输出端口相连的线网或寄存器.v同一门类型的多个实例能够在一个结构形式中定义gate_typeinstance_name1(term1,term2,.,termN),instance_name2(term1,term2,.,termN),instance_name3(term1,term2,.,termN),instance_name4(term1,term2,.,termN);verilog2009-TJU.ASICCenter-ArnoldShi3.4.2 3.4.2

52、 多输入门多输入门v内置的多输入门包括:andnandnororxorxnorv这些逻辑门只有单个输出,1个或多个输入。门实例语句的语法如:multi_input_gate_typeinstance_name(OutputA,Input1,Input2,.,InputN);v第一个端口是输出,其它端口是输入多输入门多输入门input1input2inputNOutputAverilog2009-TJU.ASICCenter-ArnoldShi多输入门语法举例多输入门语法举例andA1(Out1,In1,In2);andRBX(Sty,Rib,Bro,Qit,Fi)x;xor(Bar,Bud0,

53、Bud1,Bud2),(Car,Cut0,Cut1),(Sar,Sut2,Sut1,Sut0,Sut3);verilog2009-TJU.ASICCenter-ArnoldShi多输入门的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXXverilog2009-TJU.ASICCenter-ArnoldShi多输入门的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XXverilog2009-TJU.ASICCenter-ArnoldShi多输入门的真值表(

54、三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXXverilog2009-TJU.ASICCenter-ArnoldShi3.4.3 3.4.3 多输出门多输出门v多输出门有:bufnotv这些门都只有单个输入,一个或多个输出。v多输出门的实例语句的基本语法如:vmulti_output_gate_typeinstance_name(Out1,Out2,.OutN,InputA);多输出门多输出门output1output2outputNInputAverilog2009-TJU.ASICCenter-ArnoldShi多输出门语

55、法举例多输出门语法举例vbufB1(Fan0,Fan1,Fan2,Fan3,Clk);vnotN1(PhA,PhB,Ready);真值表01XZbuf01XXnot10XXverilog2009-TJU.ASICCenter-ArnoldShi3.4.4 3.4.4 三态门三态门v三态门有:bufif0bufif1notif0notif1v这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。v三态门实例语句的基本语法如下: tristate_gateinstance_name(OutputA,InputB,ControlC);v第一个端口OutputA是输出端口,第二个端

56、口InputB是数据输入,ControlC是控制输入。inputAoutputAControlC三态门verilog2009-TJU.ASICCenter-ArnoldShi三态门的真值表三态门的真值表bufif0控制信号控制信号01XZ数数据据输输入入00Z0/z0/z11Z1/z1/zXXZXxZXZXxbufif1控制信号控制信号01XZ数数据据输输入入0Z00/z0/z1Z11/z1/zXZXXxZZXXxnotif0控制信号控制信号01XZ数数据据输输入入01Z1/z1/z10Z0/z0/zXXZXxZXZXxnotif1控制信号控制信号01XZ数数据据输输入入0Z11/z1/z1Z

57、00/z0/zXZXXxZZXXxverilog2009-TJU.ASICCenter-ArnoldShi门级结构建模例题门级结构建模例题verilog2009-TJU.ASICCenter-ArnoldShimodule flop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#9nd3(

58、c,a,d),nd7(q,e,qb);not#10iv1(ndata,data),iv2(nclock,clock);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习v用verilog的内置基本门结构建模以下电路verilog2009-TJU.ASICCenter-ArnoldShi参考答案参考答案moduleParity_9_Bit(D,Even,Odd);input0:8D;outputEven,Odd;xorXE0(E0,D0,D1),XE1(E1,D2,D3),XE2(E2,D4,D5),XE3(E3,D6,D7),XF0(F0

59、,E0,E1),XF1(F1,E2,E3),XH0(H0,F0,F1),XEVEN(Even,D8,H0);notXODD(Odd,Even);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi3.4.53.4.5其他门级模型其他门级模型v其他门级模型包括上拉、下拉电阻:pullup,pulldownMOS开关:cmos,nmos,pmos,rcmos,rnmos,rpmos双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1verilog2009-TJU.ASICCenter-ArnoldShi上拉、下拉电

60、阻vpullup,pulldown,这类门设备没有输入只有输出。v上拉电阻将输出置为1。下拉电阻将输出置为0。v门实例的端口表只包含1个输出。例如:pullupPUP(SCL);此上拉电阻实例名为PUP,输出Pwr置为高电平1。verilog2009-TJU.ASICCenter-ArnoldShiMOS开关开关v这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。vpmos(p类型MOS管)、nmos(n类型MOS管),rnmos(r代表电阻)和rpmos开关有一个输出、一个输入和一个控制输入,例如:rnmosRN1(ControlBit,ReadyBi

61、t,Hold);vcmos(mos互补)和rcmos(cmos的高阻态版本)开关有一个数据输出,一个数据输入和两个控制输入。例如:(r)cmos instance _name(OutputA, InputB, NControl, PControl);verilog2009-TJU.ASICCenter-ArnoldShirnmosrnmos、rpmosrpmos、驱动强度、驱动强度vrnmos和pmos在输入引线和输出引线之间存在高阻抗(电阻)。因此当数据从输入传输至输出时,对于rpmos和rmos,存在数据信号强度衰减。v值1强度supply1strong1pull1weak1highz1v

62、值0强度supply0strong0pull0weak0highz0verilog2009-TJU.ASICCenter-ArnoldShi双向开关v双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1v开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后4个开关能够通过设置合适的控制信号来关闭。tran和rtran(tran的高阻态版本)开关不能被关闭。vgate_typeinstance_name(SignalA,SignalB, ControlC);v前两个端口是双向端口,即数据从SignalA流向SignalB,反之亦然。

63、第三个端口是控制信号。根据开关例化的选择有控制信号或者没有控制信号。verilog2009-TJU.ASICCenter-ArnoldShi3.4.6 3.4.6 门的延时门的延时v可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:gate_typedelayinstance_name(terminal_list) ;v时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为0。v门时延由三类时延值组成: 上升时延 下降时延 截止时延verilog2009-TJU.ASICCenter-Ar

64、noldShi门时延定义个数门时延定义个数0个时延个时延1个时延个时延2个时延个时延3个时延个时延上升上升0dd1d1下降下降0dd2d2to_Xto_X0dmin(d1,d2)min(d1,d2,d3)截止截止0dmin(d1,d2)d3门时延由三类时延值组成:上升时延,下降时延,截止时延门时延定义可以包含0个、1个、2个或3个时延值。verilog2009-TJU.ASICCenter-ArnoldShi门时延举例门时延举例vnotN1(Qbar,Q);/门时延为0vnand#6(Out,In1,In2);/所有时延均为6,即上升和下降时延都是6vand#(3,5)(Out,In1,In2

65、,In3);vnotif1#(2,8,6)(Dout,Din1,Din2);/上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。门延迟也可采用min:type:max形式定义。最小值、典型值和最大值必须是常数表达式。例如:and#(2:3:4,5:6:7)(Pout,Pin1,Pin2);如要更精确定义门延时,可用specify语句定义从特定的输入到输出端的各种延时.verilog2009-TJU.ASICCenter-ArnoldShi矢量线网用于门结构描述矢量线网用于门结构描述v当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明wire3:0

66、Out,InA,InB;nandGang3:0(Out,InA,InB);v实例化时自动以相同的标号对齐。等价于nandGang3(Out3,InA3,InB3),Gang2(Out2,InA2,InB2),Gang1(Out1,InA1,InB1),Gang0(Out0,InA0,InB0);verilog2009-TJU.ASICCenter-ArnoldShi门级结构建模例题门级结构建模例题timescale1ns/1nsmoduleDEC2X4(A,B,Enable,Z);inputA,B,Enable;output0:3Z;wireAbar,Bbar;not#(1,2)V0(Abar

67、,A),V1(Bbar,B);nand#(4,3)N0(Z3,Enable,A,B),N1(Z0,Enable,Abar,Bbar),N2(Z1,Enable,Abar,B),N3(Z2,Enable,A,Bbar);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi门级结构建模练习题门级结构建模练习题verilog2009-TJU.ASICCenter-ArnoldShi参考解答参考解答timescale1ns/1nsmoduleGateCircuit(Data,Encode,Valid)input3:0Data;output1:0Encode,Val

68、id;notG1(NotData2,Data2);andG2(A,NotData2,Data1);orG3(B,Data1,Data0),G4(Encode0,Data3,A),G5(Encode1,Data3,Data2),G6(Valid,Data3,Data2,B);endmoduleverilog2009-TJU.ASICCenter-ArnoldShi作业题作业题v先画出完整门级电路图,然后用门级结构描述以下电路,并试分析其功能M1-EM2-Dverilog2009-TJU.ASICCenter-ArnoldShiM3-CLAverilog2009-TJU.ASICCenter-Ar

69、noldShiTJIC3.53.53.53.5行为建模行为建模行为建模行为建模verilog2009-TJU.ASICCenter-ArnoldShi3.5 3.5 行为建模行为建模v行为描述方式v设计的行为功能使用下述过程语句结构描述:initial语句:此语句只执行一次。always语句:此语句总是循环执行,或者说此语句重复执行。v只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的initial语句和always语句在0时刻并发执行。v一个模块中可包含任意多个initial和always语句verilog2009-TJU.ASICCenter-Ar

70、noldShi过程性赋值(过程结构)过程性赋值(过程结构)v过程性赋值是在initial语句或always语句内的赋值,它只能对寄存器数据类型的变量赋值。表达式的右端可以是任何表达式。.reg1:4Enable,A,B;.#5Enable=AB;.vEnable为寄存器。根据时延控制,赋值语句被延迟5个时间单位执行。右端表达式被计算,并赋值给Enablev过程性赋值分两类:阻塞性过程赋值、非阻塞性过程赋值verilog2009-TJU.ASICCenter-ArnoldShiinitial initial 过程结构语句过程结构语句vinitial语句只执行一次。initial语句在仿真开始时执

71、行,即在0时刻开始执行。vinitial语句的语法如下:initialbegin.endv顺序过程(begin.end)最常使用在进程语句中。verilog2009-TJU.ASICCenter-ArnoldShiinitial initial 的时序控制的时序控制v时序控制可以是时延控制,即等待一个确定的时间;v或事件控制,即等待确定的事件发生或某一特定的条件为真。vinitial语句的各个进程语句仅执行一次。在模拟的0时刻开始执行。vinitial语句根据进程语句中出现的时间控制在以后的某个时间完成执行。vInitial语句主要用于初始化和波形生成verilog2009-TJU.ASICC

72、enter-ArnoldShiinitial语句举例parameterAPPLY_DELAY=5;reg0:7port_A;.initialbeginPort_A=8h20;#APPLY_DELAYPort_A=8hF2;#APPLY_DELAYPort_A=8h41;#APPLY_DELAYPort_A=8h0A;endverilog2009-TJU.ASICCenter-ArnoldShiinitial initial 语句举例语句举例timescale1ns/100psmodulet_s2();rega;initialbegina=1;#5a=0;#8a=1;#10;a=0;#11a=1

73、;endendmoduleverilog2009-TJU.ASICCenter-ArnoldShiInitial 语句练习语句练习modulestimulus;regx,y,a,b,m;initialm=1b0;initialbegin#5a=1b1;#25b=1b0;endinitialbegin#10x=1b0;#25y=1b1;endinitial#50$finish;endmodule时间被执行的叙述0m=1b0;5a=1b1;10x=1b0;30b=1b0;35y=1b1;50$finish;verilog2009-TJU.ASICCenter-ArnoldShialways语句va

74、lways语句重复执行v例如:alwaysClk=Clk;/将无限循环。valways语句的执行必须带有某种时序控制always#5Clk=Clk;/产生时钟周期为10的波形。verilog2009-TJU.ASICCenter-ArnoldShialways语句举例moduleDFF(Clk,D,Set,Q,Qbar);inputClk,D,Set;outputQ,Qbar;regQ,Qbar;alwayswait(Set=1)begin#3Q=1;#2Qbar=0;wait(Set=0);endalways(negedgeClk)beginif(Set!=1)begin#5Q=D;#1Qb

75、ar=Q;endendendmoduleverilog2009-TJU.ASICCenter-ArnoldShialwaysalways用法举例用法举例modulelab1(a,b,c,sel,z);input7:0a,b,c;inputsel;output8:0z;always(aorborc)beginif(sel)z=a+b;elsez=a+c;endendmoduleverilog2009-TJU.ASICCenter-ArnoldShi两类语句在同一模块的使用两类语句在同一模块的使用moduleTestXorBehavior;regSa,Sb,Zeus;initialbeginSa=

76、0;Sb=0;#5Sb=1;#5Sa=1;#5Sb=0;endalways(SaorSb)Zeus=SaSb;endmoduleverilog2009-TJU.ASICCenter-ArnoldShi3.5.2 3.5.2 行为建模中的时序控制行为建模中的时序控制v时序控制与过程语句关联。有2种时序控制形式:时延控制事件控制v这两类时序控制形式只能用于initial 或者always语句块之中,即只能用于行为建模verilog2009-TJU.ASICCenter-ArnoldShi时延控制时延控制v时延控制定义为执行过程中首次遇到该语句与该语句的执行的时间间隔。时延控制表示在语句执行前的“等

77、待时延”形式如:#2Tx=Rx-5;v时延控制也可以用另一种形式定义:#5;这种形式指定了在下一条语句执行前等待给定的时延v时延控制中的时延可以是任意表达式,不必限定为某一常量v如果时延表达式的值为0,则称之为显式零时延。促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才将其唤醒;模拟时间不前进。verilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习v写出完整代码,生成如下波形。v生成一个周期为10的时钟信号verilog2009-TJU.ASICCenter-ArnoldShi参考答案参考答案timescale1ns/100psmodulet

78、_s2();rega;regclk;initialbegina=0;clk=0;#10a=1;#10a=0;#20;a=1;#10a=0;#10a=1;#10a=0;#10a=1;endalwaysbegin#5clk=clk;endendmoduleverilog2009-TJU.ASICCenter-ArnoldShi事件控制事件控制( (消息控制消息控制) )v边沿触发事件控制格式为:事件声明例如(posedgeClock)v带有事件控制的进程或过程语句的执行,须等到指定事件发生。上例中,如果Clock信号从低电平变为高电平(正沿),就执行赋值语句;否则进程被挂起,直到Clock信号产生

79、下一个正跳边沿。vposedge表示上升沿(正沿);nededge表示下降沿(负沿)verilog2009-TJU.ASICCenter-ArnoldShi正沿和负沿代表的意义正沿和负沿代表的意义negedgeposedge1 -X0 - x1 - Z0 - Z1 - 00 - 1x - 0x - 1z - 0z - 1verilog2009-TJU.ASICCenter-ArnoldShi边沿触发事件控制举例边沿触发事件控制举例timeRiseEdge,OnDelay;.initialbegin/等待,直到在时钟上发生正边沿:(posedgeClockA);RiseEdge=$time;/等

80、待,直到在时钟上发生负边沿:(negedgeClockA);OnDelay=$time-RiseEdge;$display(Theon-periodofclockis%t.D,elay);endverilog2009-TJU.ASICCenter-ArnoldShi两个边沿触发事件控制举例两个边沿触发事件控制举例.always(posedgeclkornegedgereset)begind1=1b1;d222)Sum =0;wait(DataReady)Data =Bus;wait(Preset);verilog2009-TJU.ASICCenter-ArnoldShi行为建模举例行为建模举例

81、moduleshifter(in,clock,reset,out);inputin,clock,reset;output7:0out;reg7:0out;always(posedgeclock)beginif(reset)out=8h00;elsebeginout=out1;out0=in;endendendmoduleverilog2009-TJU.ASICCenter-ArnoldShi3.5.3 3.5.3 语句块语句块v语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。在VerilogHDL中有两类语句块,即:顺序语句块(begin.end):语句块中的语句按给定次序顺

82、序执行。并行语句块(fork.join):语句块中的语句并行执行。v语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符的语句块可被引用语句块标识符提供唯一标识寄存器的一种方式。但是,要注意所有的寄存器均是静态的,即它们的值在整个模拟运行中不变verilog2009-TJU.ASICCenter-ArnoldShi顺序语句块顺序语句块v顺序语句块(beginwith)中的语句按顺序方式执行。每条语句中的时延值与其前面的语句执行的模拟时间相关。一旦顺序语句块执行结束,跟随顺序语句块过程的下一条语句继续执行。begin:example_1#10stream=0;#2stre

83、am =1;#5stream=0;#3stream=1;#4stream=0;#2stream=1;#5stream=0;endverilog2009-TJU.ASICCenter-ArnoldShi并行语句块并行语句块v并行语句块带有定界符forkjoin,并行语句块中的各语句并行执行。并行语句块内的各条语句指定的时延值都与语句块开始执行的时间相关。v当并行语句块中最后的动作执行完成时(最后的动作并不一定是最后的语句),顺序语句块的语句继续执行。v并行语句块内的所有语句必须在控制转出语句块前完成执行。v例如alwaysfork:my_test_parr.a=5;.joinverilog200

84、9-TJU.ASICCenter-ArnoldShi并行语句块举例并行语句块举例/如果并行语句块在第10个时间单位开始执行fork#2stream=1;#7stream=0;#10stream=1;#14stream=0;#16stream=1;#21stream=0;joinverilog2009-TJU.ASICCenter-ArnoldShi混合使用顺序块和并行块混合使用顺序块和并行块alwaysbegin:SEQ_A#4Dry=5;/S1fork:PAR_A/S2#6Cun=7;/P1begin:SEQ_B/P2EXE=Box;/S6#5Jap=Exe;/S7end#2Dop=3;/P

85、3#4Gos=2;/P4#8Pas=4;/P5join#8Bax=1;/S3#2Zoom=52;/S4#6$stop;/S5endverilog2009-TJU.ASICCenter-ArnoldShi运行图示运行图示verilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习initialbegin:come_ona=0;b=0#10;a=1;b=1;fork:parral#5a=0;#6b=0;#9b=1;join#10a=1;#15a=0;b=0;begin#10b=1;#5a=1;endendalwaysbeginc=ab;endverilog2009-TJ

86、U.ASICCenter-ArnoldShi混合建模混合建模RTLRTL代码举例代码举例(1)(1)v/VerilogModuleNucleon_Digital_lib.Spike_Filter.arch_namev/Created:v/byArnoldShiv/at-13:44:1707/01/2004v/usingMentorGraphicsHDLDesigner(TM)2004.1(Build41)vresetallvtimescale1ns/10psvmoduleSpike_Filter(vIN_SPIKE,vCLK,vRESET,vOUT_SPIKE,vNEG_EDET,vPOS_E

87、DETv);verilog2009-TJU.ASICCenter-ArnoldShi混合建模混合建模RTLRTL代码举例代码举例(2)(2)vinputIN_SPIKE;vinputCLK;vinputRESET;voutputOUT_SPIKE;voutputNEG_EDET;voutputPOS_EDET;vwireIN_SPIKE;vwireCLK;vwireRESET;vregOUT_SPIKE;vwireNEG_EDET;vwirePOS_EDET;v/Spikerejectfiltervregin_d0,in_d1,in_d2,in_d3;verilog2009-TJU.ASICC

88、enter-ArnoldShi混合建模混合建模RTLRTL代码举例代码举例(3)(3)valways(negedgeRESETorposedgeCLK)vif(RESET)beginvin_d0=1b1;vin_d1=1b1;vin_d2=1b1;vin_d3=1b1;vendvelsebeginvin_d0=IN_SPIKE;vin_d1=in_d0;vin_d2=in_d1;vin_d3=in_d2;vendverilog2009-TJU.ASICCenter-ArnoldShi混合建模混合建模RTLRTL代码举例代码举例(4)(4)vassignPOS_EDET=in_d0&in_d1&

89、in_d2&in_d3;vassignNEG_EDET=in_d0&in_d1&in_d2&in_d3;valways(negedgeRESETorposedgeCLK)vif(RESET)vOUT_SPIKE=1b1;velsevcasez(POS_EDET,NEG_EDET)v2b1?:OUT_SPIKE=1b1;v2b01:OUT_SPIKE=1b0;v2b00:OUT_SPIKE=OUT_SPIKE;vendcasevendmoduleverilog2009-TJU.ASICCenter-ArnoldShi作业作业v用行为建模的方式描述一个十进制计数器verilog2009-TJU.A

90、SICCenter-ArnoldShiTJIC3.6 3.6 3.6 3.6 过程性赋值语句过程性赋值语句过程性赋值语句过程性赋值语句verilog2009-TJU.ASICCenter-ArnoldShi3.6 3.6 过程性赋值过程性赋值v过程性赋值是仅仅在initial语句或always语句内的赋值,它只能对寄存器数据类型的变量赋值。表达式的右端可以是任何表达式。.reg1:4Enable,A,B;.#5Enable=AB;Enable为寄存器。根据时延控制,赋值语句被延迟5个时间单位执行。右端表达式被计算,并赋值给Enablev过程性赋值分两类:阻塞性过程赋值=、非阻塞性过程赋值=ve

91、rilog2009-TJU.ASICCenter-ArnoldShi3.6.13.6.1语句内部时延语句内部时延v在赋值语句中表达式右端出现的时延是语句内部时延。Done = #5 1b1;v通过语句内部时延表达式,右端的值在赋给左端目标前被延迟。即右端表达式在语句内部时延之前计算,随后进入时延等待,再对左端目标赋值。v对比以下语句间的时延对比以下语句间的时延beginTemp=1b1;#5Done=Temp;/语句间时延控制endverilog2009-TJU.ASICCenter-ArnoldShi3.6.23.6.2阻塞性过程赋值阻塞性过程赋值v赋值运算符是“=”的过程赋值是阻塞性过程赋

92、值。v阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。initialbeginClr=#50;Clr=#41;Clr=#100;endverilog2009-TJU.ASICCenter-ArnoldShiregSum,Cout;regT1,T2,T3;always(AorBorCin)beginSum=(AB)Cin;T1=A&Cin;T2=B&Cin;T3=A&B;Cout=T1|T2|T3;end常用的阻塞性赋值的例子常用的阻塞性赋值的例子verilog2009-TJU.ASICCenter-ArnoldShi3.6.3 3.6.3 非阻塞性过程赋值非阻塞性

93、过程赋值v在非阻塞性过程赋值中,使用赋值符号“ =”。对目标的赋值是非阻塞的,但可预定在将来某个时间步发生。v当非阻塞性过程赋值被执行时,计算右端表达式,右端值被赋于左端目标,并继续执行下一条语句。v在当前时间步结束或任意输出被调度时,即完成对左端目标赋值。v例如:beginLoad =32;RegA =Load;RegB =Store;、endverilog2009-TJU.ASICCenter-ArnoldShi非阻塞性过程赋值举例非阻塞性过程赋值举例initialbeginClr=#51;Clr=#40;Clr=#100;endverilog2009-TJU.ASICCenter-Arn

94、oldShi3.6.43.6.4连续性赋值与过程性赋值比较连续性赋值与过程性赋值比较v过程赋值v在always语句或initial语句内出现,执行与周围其它语句有关v驱动寄存器regv使用“=”或“=”赋值符号v无assign关键词v连续赋值v在一个模块内出现v与其它语句并行执行;在右端操作数的值发生变化时执行v驱动线网wirev使用“=”赋值符号v有assign关键词verilog2009-TJU.ASICCenter-ArnoldShi连续赋值与过程赋值比较举例连续赋值与过程赋值比较举例module Procedural;reg A,B,Z;always (B)beginZ=A;A=B;e

95、ndendmodulemodule Continuouswire A,B,Z;assign Z=A;assign A=B;endmoduleverilog2009-TJU.ASICCenter-ArnoldShi课堂练习:用行为建模方法描述此逻辑结构课堂练习:用行为建模方法描述此逻辑结构verilog2009-TJU.ASICCenter-ArnoldShi答案答案modulecoder(Data,Encode,Valid);input3:0Data;outputValid,output1:0Encode;regValid;reg1:0Encode;always(Data0orData1orD

96、ata2orData3)beginEncode0=(Data2)&Data1)|Data3;Encode1=Data3|Data2;Valid=(Data1|Data0)|Data2;endendmoduleverilog2009-TJU.ASICCenter-ArnoldShi非阻塞赋值的例子非阻塞赋值的例子always(posedgeclk)beginb=a;c=b;endverilog2009-TJU.ASICCenter-ArnoldShi阻塞性赋值的例子阻塞性赋值的例子always(posedgeclk)beginb=a;c=b;endverilog2009-TJU.ASICCent

97、er-ArnoldShi同时存在阻塞性和非阻塞赋值同时存在阻塞性和非阻塞赋值reg0:2Q_State;initialbeginQ_State=3b011;Q_State=3b100;$display(“CurrentvalueofQ_Stateis”%b,Q_State);#5;/等待一定的时延。$display(“ThedelayedvalueofQ_Stateis”%,bQ_State);endv执行initial语句产生如下结果:CurrentvalueofQ_Stateis011ThedelayedvalueofQ_Stateis100verilog2009-TJU.ASICCent

98、er-ArnoldShi连续性赋值与过程性赋值比较连续性赋值与过程性赋值比较v过程赋值v在always语句或initial语句内出现,执行与周围其它语句有关v驱动寄存器regv使用“=”或“=”赋值符号v无assign关键词v连续赋值v在一个模块内出现v与其它语句并行执行;在右端操作数的值发生变化时执行v驱动线网wirev使用“=”赋值符号v有assign关键词verilog2009-TJU.ASICCenter-ArnoldShi使用连续赋值八原则使用连续赋值八原则v规则1:建立时序逻辑模型时,采用非阻塞赋值语句。v规则2:建立latch模型时,采用非阻塞赋值语句。v规则3:在always块

99、中建立组合逻辑模型时,采用阻塞赋值语句。v规则4:在一个always块中同时有组合和时序逻辑时时,采用非阻塞赋值语句。v规则5:不要在一个always块中同时采用阻塞和非阻塞赋值语句。v规则6:同一个变量不要在多个always块中赋值。v规则7:调用$strobe系统函数显示用非阻塞赋值语句赋的值。v规则8:不要使用#0延时赋值。verilog2009-TJU.ASICCenter-ArnoldShi练习:用过程性赋值语句描述下列逻辑功能练习:用过程性赋值语句描述下列逻辑功能always(posedgeclk)beginq1=a;q2=q1;q3=q2;q4=q3endalways(q1orq

100、2orq3orq4ora)beginb=(q4&q3);a=q1q2b;endverilog2009-TJU.ASICCenter-ArnoldShiTJIC期末大作业期末大作业期末大作业期末大作业verilog2009-TJU.ASICCenter-ArnoldShi期末大作业期末大作业-project-projectv用verilog语言描述电路,实现把lena图像(也可以是其他图像)(256*256像素)顺时针旋转90度。v要求分组完成3-6人一组,自由组队,至少三人,不可独立完成,自行合理安排组内每个成员的工作,工作量大致适中。抄袭判不及格v考试之前打印上交:原代码、仿真结果、设计说明

101、书、工作报告(包括每个人的工作总结)。v原始图像如果不是256*256*24bit格式的BMP图片,首先用画图工具裁剪成256*256的大小*24bit格式。v具体方法不特别规定,但至少分成两个模块来实现。大作业不答疑。verilog2009-TJU.ASICCenter-ArnoldShi参考方案之一参考方案之一verilog2009-TJU.ASICCenter-ArnoldShiv任务提示:了解BMP位图的格式,verilog中所写的要能testbench中读写BMP文件中的像素点阵。了解数字集成电路的设计与验证的一般方法进行模块划分,可以分成三个以上的模块,一个专门负责按时钟节拍读取数

102、据,然后数据经过缓存之后逆时针旋转90度输出。多借助互联网查阅相关资料、语法等如有必要,可以用C语言针对该原始图像提出二进制数据转化为文本型数据再存储成数据文件,供verilog模块调用。verilog2009-TJU.ASICCenter-ArnoldShilenalena图图verilog2009-TJU.ASICCenter-ArnoldShiTJIC3.73.73.73.7条件语句和循环语句条件语句和循环语句条件语句和循环语句条件语句和循环语句verilog2009-TJU.ASICCenter-ArnoldShi3.7 3.7 条件语句和循环语句条件语句和循环语句vIf语句用于条件选

103、择,其语法如下if(条件表达式1)begin.endelseif(条件表达式2)begin.endelse.verilog2009-TJU.ASICCenter-ArnoldShiifif语句语句v如果存在一个else分支,那么这个分支被执行if(Sum60)beginGrade=C;Total_C=Total_C+1;endelseif(Sum75)beginGrade=B;Total_B=Total_B+1;endelsebeginGrade=A;Total_A=Total_A+1;endverilog2009-TJU.ASICCenter-ArnoldShiifif语句的嵌套语句的嵌套i

104、f(Ctrl)beginif(Ctrl2)Mux=4d2;elseMux=4d1;endelsebeginif(Ctrl2)Mux=4d8;elseMux=4d4;endverilog2009-TJU.ASICCenter-ArnoldShicase 语句语句 vcase语句是一个多路条件分支形式,其语法如下:case(case_expr)case_item_expr,case_item_expr:procedural_statement.default:procedural_statementendcasevcase语句首先对条件表达式case_expr求值,然后依次对各分支项求值并进行比较

105、v第一个与条件表达式值相匹配的分支中的语句被执行。v可以在1个分支中定义多个分支项;这些值不需要互斥。v缺省分支(default)覆盖所有没有被分支表达式覆盖的其他分支。verilog2009-TJU.ASICCenter-ArnoldShicase case 语句语句parameterMON=0,TUE=1,WED=2,THU=3,FRI=4,SAT=5,SUN=6;reg0:2Day;integerPocket_Money;case(Day)TUE:Pocket_Money=6;/分支1MON,WED:Pocket_Money=2;/分支2FRI,SAT,SUN:Pocket_Money=

106、7;/分支3default:Pocket_Money=0;/分支4。endcasev如果Day的值为MON或WED,就选择分支2。分支3覆盖了值FRI、SAT和SUN,而分支4v覆盖了余下的所有值,即THU和位向量111。verilog2009-TJU.ASICCenter-ArnoldShicase case 语句实例语句实例moduleALU(A,B,OpCode,Z);input3:0A,B;input1:2OpCode;output7:0Z;reg7:0Z;parameterADD_INSTR=2b10,SUB_INSTR=2b11,MULT_INSTR=2b01,DIV_INSTR=

107、2b00;always(AorBorOpCode)case(OpCode)ADD_INSTR:Z=A+B;SUB_INSTR:Z=A-B;MULT_INSTR:Z=A*B;DIV_INSTR:Z=A/B;default:Z=A+B;endcaseendmoduleverilog2009-TJU.ASICCenter-ArnoldShicasecase语句与综合电路语句与综合电路 verilog2009-TJU.ASICCenter-ArnoldShicase case 分支长度不同时先统一长度分支长度不同时先统一长度v如果case表达式和分支项表达式的长度不同情况下,在进行任何比较前所有的ca

108、se表达式都统一为这些表达式的最长长度。case(3b1012)3b100:$display(Firstbranchtaken!);4b0100:$display(Secondbranchtaken!);5b10100:$display(Thirdbranchtaken!);default:$display(Defaultbranchtaken!);endcase因为第3个分支项表达式长度为5位,所有的分支项表达式和条件表达式长度统一为5。当计算3b1012时,结果为5b10100,并选择第3个分支。verilog2009-TJU.ASICCenter-ArnoldShicase语句中的无关位

109、语句中的无关位v在casez语句中,出现在case表达式和任意分支项表达式中的值z被认为是无关值,即那个位被忽略(不比较)。v在casex语句中,值x和z都被认为是无关位。casex(Mask)4b1?:Dbus4=0;4b01?:Dbus3=0;4b001?:Dbus2=0;4b0001:Dbus1=0;defalut:Dbus=4hf;endcaseverilog2009-TJU.ASICCenter-ArnoldShi条件语句的优先级条件语句的优先级vcase语句和ififelse嵌套描述结构就有很大的区别。在VerilogVerilog语法中,ififelse ififelse语句是有

110、优先级的v一般来说第一个ifif的优先级最高,最后一个else的优先级最低。vcase语句是“平行”的结构,所有的case的条件和执行都没有“优先级”。v建立优先级结构(优先级树)会消耗大量的组合逻辑,所以如果能够使用case语句的地方,尽量用case替换ifif.else结构。 verilog2009-TJU.ASICCenter-ArnoldShiverilog2009-TJU.ASICCenter-ArnoldShiifif嵌套的综合结果嵌套的综合结果verilog2009-TJU.ASICCenter-ArnoldShiRTLRTL设计实例设计实例Bit_CntrBit_Cntr/Ve

111、rilogModule.Bit_Cntr/Created:ByARNOLD/at-17:44:3507/01/2004/usingDesigner(TM)2004.1timescale1ns/10psmoduleBit_Cntr(BC_CLR,BC_ENBL,Sclk_posd3,clk_int,reset_int,BC_EQ6,BC_EQ7);/InternalDeclarationsinputBC_CLR;inputBC_ENBL;inputSclk_posd3;inputclk_int;inputreset_int;outputBC_EQ6;outputBC_EQ7;verilog200

112、9-TJU.ASICCenter-ArnoldShiRTLRTL设计实例设计实例Bit_cntrBit_cntralways(negedgereset_intorposedgeclk_int)if(reset_int)Bit_cntr=3b0;elseif(Sclk_posd3)casez(BC_CLR,BC_ENBL)2b1?:Bit_cntr=3b0;2b01:Bit_cntr=Bit_cntr+3b1;2b00:Bit_cntr=Bit_cntr;endcaseassignBC_EQ7=(Bit_cntr=3h7);assignBC_EQ6=(Bit_cntr=3h6);endmodul

113、ewireBC_CLR;wireBC_ENBL;wireSclk_posd3;wireclk_int;wirereset_int;wireBC_EQ6;wireBC_EQ7;/BitCntrwithdetectfor7reg2:0Bit_cntr;verilog2009-TJU.ASICCenter-ArnoldShi课堂练习课堂练习v请用行为描述和case语句描述一个译码器,完成以下功能000-1111_1110001-1111_1101010-1111_1011011-1111_0111100-1110_1111101-1101_1111110-1011_1111111-0111_1111

114、verilog2009-TJU.ASICCenter-ArnoldShiVerilogVerilog HDL HDL中的循环语句中的循环语句forever循环1repeat循环2while循环3for循环4verilog2009-TJU.ASICCenter-ArnoldShiforever循环语句循环语句vforever循环语句连续执行过程语句。为跳出这样的循环,中止语句可以与过程语句共同使用。v同时,在过程语句中必须使用某种形式的时序控制,否则, forever循环将在0时延后永远循环下去。initialbeginClock=0;#5;forever#10Clock=Clock;endve

115、rilog2009-TJU.ASICCenter-ArnoldShiVerilogVerilog HDL HDL中的循环语句中的循环语句forever循环1repeat循环2while循环3for循环4verilog2009-TJU.ASICCenter-ArnoldShirepeat 循环语句循环语句vrepeat循环语句形式如下:repeat(loop_count)procedural_statementvrepeat执行指定循环次数的过程语句。如果循环计数表达式的值不确定,即为x或z时,那么循环次数按0处理repeat(Count)Sum=Sum+10;repeat(ShiftBy)P_

116、Reg=P_Reg1;verilog2009-TJU.ASICCenter-ArnoldShirepeatrepeat使用位置不同的区别使用位置不同的区别repeat(Count)(posedgeClk)Sum=Sum+1;v表示计数的次数,等待Clk的正边沿,并在Clk正沿发生时,对Sum加1。Sum =repeat(Count)(posedge Clk )Sum+1;v此例表示首先计算Sum+1,随后等待Clk上正沿计数,最后为左端赋值。repeat(NUM _OF_TIMES)(negedgeClockZ);v它表示在执行跟随在repeat语句之后的语句之前,等待ClockZ 的NUM

117、_OF_TIMES个负沿verilog2009-TJU.ASICCenter-ArnoldShirepeatrepeat语句举例语句举例parametersize=8,longsize=16;regsize:1opa,opb;reglongsize:1result;reglongsize:1shift_opa;shift_opb;.initialbeginshift_opa=opa;shift_opb=opb;result=0;repeat(size)beginif(shift_opb1)result=result+shift_opa;shift_opa=shift_opa1;endend/根

118、据课本p36,略改动verilog2009-TJU.ASICCenter-ArnoldShiVerilogVerilog HDL HDL中的循环语句中的循环语句forever循环1repeat循环2while循环3for循环4verilog2009-TJU.ASICCenter-ArnoldShiwhilewhile语句语句vwhile循环语句语法如下:while(condition)procedural_statementvwhile语句循环执行过程赋值语句直到指定的条件为假。v如果表达式在开始时为假,那么过程语句便永远不会执行。如果条件表达式为x或z,它也同样按0(假)处理。例如:whil

119、e(BY 0)beginAcc =Acc 1;By =By -1;endverilog2009-TJU.ASICCenter-ArnoldShiVerilogVerilog HDL HDL中的循环语句中的循环语句forever循环1repeat循环2while循环3for循环4verilog2009-TJU.ASICCenter-ArnoldShifor for 循环语句循环语句vfor循环语句的形式如下:for(initial_assignment ; condition ; step_assign)procedural_statementv一个for循环语句按照指定的次数重复执行过程赋值语

120、句若干次。v初始赋值initial_assignment给出循环变量的初始值。condition条件表达式指定循环条件;step_assign给出要修改的赋值,通常为增加或减少循环变量计数。verilog2009-TJU.ASICCenter-ArnoldShiforfor循环举例循环举例integerK;for(K=0;KMAX_RANGE;K=K+1)beginif(AbusK=0)AbusK=1;elseif(Abusk=1)AbusK=0;else$display(AbusKisanxoraz);endverilog2009-TJU.ASICCenter-ArnoldShi计数器举例计

121、数器举例modulecounter(count,clk,reset);output7:0count;inputclk,reset;reg7:0count;parametertpd_rst_count=3;parametertpd_clk_count=2;function7:0increment;input7:0val;reg3:0i;regcarry;beginincrement=val;carry=1b1;/*Exitthisloopwhencarry=zero,ORallbitsprocessed*/for(i=4b0;(carry=4b1)&(i=7);i=i+4b1)beginincr

122、ementi=valicarry;carry=vali&carry;endendendfunctionverilog2009-TJU.ASICCenter-ArnoldShi计数器计数器( (续续) )always(posedgeclkorposedgereset)if(reset)count=8h00;elsecount=count+8h01;endmodulealways(posedgeclkorposedgereset)if(reset)count=#tpd_rst_count8h00;elsecount=#tpd_clk_countincrement(count);verilog2009-TJU.ASICCenter-ArnoldShi考试通知考试通知v考试时间12月25日星期四下午,地点未确定15:5017:30共100分钟,闭卷考试,答疑时间:每周五上午9:0011:00综合实验楼808考试内容以verilog基本语法为主,注重能力的考查题型包括填空、简答、读程序、写程序v大作业截止日期到2009年1月5日前交上以班级为单位,班长/学习委员收齐后交到综合实验楼808verilog2009-TJU.ASICCenter-ArnoldShi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号