verilog的基本语法.ppt

上传人:牧羊曲112 文档编号:5452063 上传时间:2023-07-08 格式:PPT 页数:219 大小:2.18MB
返回 下载 相关 举报
verilog的基本语法.ppt_第1页
第1页 / 共219页
verilog的基本语法.ppt_第2页
第2页 / 共219页
verilog的基本语法.ppt_第3页
第3页 / 共219页
verilog的基本语法.ppt_第4页
第4页 / 共219页
verilog的基本语法.ppt_第5页
第5页 / 共219页
点击查看更多>>
资源描述

《verilog的基本语法.ppt》由会员分享,可在线阅读,更多相关《verilog的基本语法.ppt(219页珍藏版)》请在三一办公上搜索。

1、verilog2009-TJU.ASIC Center-Arnold Shi,第三章 verilog的基本语法,天津大学电子科学与技术系史再峰,verilog2009-TJU.ASIC Center-Arnold Shi,3.1数据类型及其常量及变量,天津大学电子科学与技术系史再峰,verilog2009-TJU.ASIC Center-Arnold Shi,0、低、伪、逻辑低、地、VSS、负插入,1、高、真、逻辑高、电源、VDD、正插入,X、不确定:逻辑冲突无法确定其逻辑值,HiZ、高阻抗、三态、无驱动源,Verilog 的四种逻辑值,x和X、z和Z不区别大小写。Z有时候也用?代替,veri

2、log2009-TJU.ASIC Center-Arnold Shi,数据类型,Verilog HDL中共有19种数据类型,分成常量和变量最基本最常用的4种:寄存器型reg线网型wire整形 integer参数型 parameter其余的包括:large medium scalared time small tri trio tri1 triand trior trireg vectored wand wor型,主要与基本单元库有关,设计时很少使用,verilog2009-TJU.ASIC Center-Arnold Shi,一、常量,在程序运行中,其值不能被改变的量叫常量两类最基本的常量:数

3、字型常量和参数(parameter)数字型常量:整型数可以按如下两种方式书写简单的十进制数格式 基数格式,verilog2009-TJU.ASIC Center-Arnold Shi,基数表示法(一),格式:位宽进制 值无符号数。位宽是按照二进制数来计算的。进制可以为b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)。值是基于进制的数字序列。如:3b001,3B110 三位二进制 6o12,6O12 六位八进制 4d9,4D9 十位十进制 8hBF,8HBF 八位十六进制,verilog2009-TJU.ASIC Center-Arnold Shi,基数表示法(二),基数

4、格式计数形式的数通常为无符号数。这种形式的整型数的长度定义是可选的。如果没有定义一个整数型的长度,数的长度为相应值中定义的位数。下面是两个例子:o721 9位八进制数hAF 8位十六进制数,verilog2009-TJU.ASIC Center-Arnold Shi,基数表示法(三),如果定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位为x或z,就相应地用x或z在左边补位。例如:10b10 左边添0占位,000000001010bx0 x1 左边添x占位,x x x x x x x 0 x 1如果长度定义得更小,那么最左边的位相应地被截断。例如:3 b1001_0011

5、与3b011 相等5H0FFF 与5H1F 相等?字符在数中可以代替值z在值z被解释为不分大小写的情况下提高可读性,verilog2009-TJU.ASIC Center-Arnold Shi,下划线,下划线可以用来分割数的表达式以提高程序的可读性,但不能用在位宽和进制处,只能用于具体的数字之间比如 16b1010_1011_11111_000/合法格式8b_0011_1011/非法格式,verilog2009-TJU.ASIC Center-Arnold Shi,负数,一个数字可以被定义成负数,只要在位宽表达式前加一个减号-8d5/合法格式 8d-5/非法格式,verilog2009-TJU

6、.ASIC Center-Arnold Shi,简单的十进制格式,这种形式的整数定义为带有一个可选的“+”(一元)或“”(一元)运算符的数字序列。这种形式的整数值代表一个有符号的数。负数使用补码形式表示。例如 15相当于二进制01111-15相当于二进制10001,verilog2009-TJU.ASIC Center-Arnold Shi,实数类型,实数可以用下列两种形式定义 十进制记数法,例如:2.0;-0.1等 科学记数法,例如:235.1e2等于23510.0234_12e2等于2341200.0实数小数通过四舍五入被隐式地转换为最相近的整数。例如:42.446,42.45 转换为整数

7、4292.5,92.699 转换为整数935.62 转换为整数626.22 转换为整数6,verilog2009-TJU.ASIC Center-Arnold Shi,常量的位数,,x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)当常量不说明位数时候默认是32位,每个字母用8位ASCII码来表示10=32d10=32b10101=32d1=32b1-1=-32d1=32hFFFF_FFFFBX=32BX=32BXXXXXXXXXX.“AB”=16B 010000001_01000010A的ASCII值是85,B的值是86,verilog20

8、09-TJU.ASIC Center-Arnold Shi,字符串,字符串是双引号内的字符串列。一个字符可用八位二进制表示。如:“INTEGER”需要 8*7位。例:reg 8*14:1 Message;Message=“INTERNAL ERROR”;,verilog2009-TJU.ASIC Center-Arnold Shi,课堂练习,下列表达式的位模式是什么?写出其具体的二进制表示值7o44,Bx0,5bx110,hA0,10d2,hzF,verilog2009-TJU.ASIC Center-Arnold Shi,参数,参数是一个常量。用parameter定义一个标识符来代表一个常量

9、。参数经常用于定义时延和变量的宽度。格式:parameter param1=const_expr1,param2=const_expr2,paramN=const_exprN;如:parameter Delay=1;parameter A=32,B=4b0001;parameter string=“exec_command”;,verilog2009-TJU.ASIC Center-Arnold Shi,参数的传递,参数值也可以在编译时被改变。改变参数值可以使用参数定义语句或通过在模块初始化语句中定义参数值当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数值的改变可采

10、用下述两种方式:参数定义语句(defparam);带参数值的模块引用。,verilog2009-TJU.ASIC Center-Arnold Shi,defparam举例,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。HA Ha1(NewA,NewB,NewS,NewC);endmodule,module HA(A,B,S,C);input A,B;o

11、utput S,C;parameter AND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAY S=AB;assign#AND_DELAY C=A&B;endmodule,HA,TOP,verilog2009-TJU.ASIC Center-Arnold Shi,参数值的模块引用,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_D

12、ELAY,该参数在模块HA中说明。endmodule,verilog2009-TJU.ASIC Center-Arnold Shi,课堂练习-参数传递,假定一个模块为BK,内部两个参数P1,P2;另外一个模块为HA,内部参数P3,P4其在TOP模块中实例化调用的名称分别为U1,U2请尝试在top模块中用两种不同的方法改变其参数值p1-p4分别为1,2,3,4,verilog2009-TJU.ASIC Center-Arnold Shi,二、变 量,在Verilog中有两大主要数据类型:线网类型(wire)、寄存器类型(reg)。线网类型 包含下述不同种类的线网子类型。wire,tri 用于连线

13、的最常见的线网类型 wor,trior 线或 wand,triand 线与 trireg 此线网存储数值,用于电容节点的建模 tri1,tri0 用于线逻辑的建模,上拉或下拉驱动 supply0,supply1 supply0用于对“地”建模,supply1对电源建模,verilog2009-TJU.ASIC Center-Arnold Shi,nets(网络连线),nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。,nets,verilog2009-TJU.ASIC Center-Arnold Sh

14、i,Nets(线网型),例:wire BpW;assign BpW=Error,BpW电路图,verilog2009-TJU.ASIC Center-Arnold Shi,Nets(网络连线,线网类型),简单的线网类型定义说明语句为:net_kind msb:lsb net1,net2,.netN;当一个线形有两个或多个驱动时,线网的有效值按如下表确定。,verilog2009-TJU.ASIC Center-Arnold Shi,补充:CMOS NOR,A+B,A,B,A,B,A,B,verilog2009-TJU.ASIC Center-Arnold Shi,补充:CMOS NAND,A,

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

16、数型位选择,如 a1 向量的常数型部分选择 如:a3:1 上述类型的任意的拼接运算结果,verilog2009-TJU.ASIC Center-Arnold Shi,连续赋值语句举例,module F A _ D f(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;assign S u m=A B Cin;assign C o u t=(A endmodule,在本例中,有两个连续赋值语句。这些赋值语句是并发的,与其书写的顺序无关,verilog2009-TJU.ASIC Center-Arnold Shi,数据流描述方式,例:wor BpW;w

17、and BpR;assign BpW=Error,BpW和BpR电路图,verilog2009-TJU.ASIC Center-Arnold Shi,寄存器(register)类型变量,寄存器(register)类型变量 register 型变量能保持其值,直到它被赋于新的值。register 型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。,verilog2009-TJU.ASIC Center-Arnold Shi,reg型,寄存器是数据存储单元的抽象reg型数据常用来表示always块内的指定信号,常代表触发器reg型数据用initial或者alway

18、s块中指定信号reg型数据的缺省值是x。可以被赋正值或者负值。当它作为一个表达式中的操作数时候,作为无符号数。reg数据类型定义格式为reg n-1:0 数据名1,.;或者 reg n:1 数据名1,.;,verilog2009-TJU.ASIC Center-Arnold Shi,寄存器阵列,Verilog 语言支持寄存器阵列的声明: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

19、PREP hfffe:hffff;/2 x 8 位的存储器可以用参数来表示存储器的大小:parameter wordsize=16;parameter memsize=1024;reg wordsize-1:0 MEM3memsize-1:0;只能一次选择一个字,不允许对存储器变量值部分进行部分选择或位选择.如 dram60 2:4是错误的,verilog2009-TJU.ASIC Center-Arnold Shi,存储器 memory型变 量,存储器 memory型 用一个寄存器数组来对存储器建模。格式:reg msb:lsb 存储器名 upper1:lower1;如:reg 3:0 My

20、Mem 63:0;/64个四位寄存器组,verilog2009-TJU.ASIC Center-Arnold Shi,其他类型变量,integer 整数寄存器 有符号数。主要用来高层次建模。如:integer A;/整形寄存器,32位 integer B 1023:0;/10位time 时间类型寄存器 如:time CurrentTime;/CurrentTime存储一个时间值 CurrentTime=$time;,verilog2009-TJU.ASIC Center-Arnold Shi,输入端口(input)可以由寄存器(reg)或线网(wire)连接驱动,但它本身只能驱动网络连接。输出

21、端口(output)可以由寄存器或线网连接驱动,但它本身只能驱动线网连接。输入/输出端口(inout)只可以由线网连接驱动,但它本身只能驱动线网连接。如果信号变量是在过程块(initial块 或 always块)中被赋值的,必须把它声明为寄存器类型变量,如何选择正确的数据类型?,verilog2009-TJU.ASIC Center-Arnold Shi,module top;wire y;reg a,b;DUT u1(y,a,b);initial begin a=0;b=0;#10 a=1;.endendmodule,module DUT(Y,A,B_);output Y;input A,B

22、:wire Y,A,B;and(Y,A,B);endmodule,举例说明数据类型的选择,verilog2009-TJU.ASIC Center-Arnold Shi,在过程块(always initial)中对变量赋值时,忘了把它定义为寄存器 类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型把模块的输入信号定义为寄存器类型。这是经常犯的三个错误!,选择数据类型时常犯的错误,verilog2009-TJU.ASIC Center-Arnold Shi,3.2运算符及表达式,天津大学电子科学与技术系史再峰,verilog2009-TJU.ASIC C

23、enter-Arnold Shi,3.2 运算符(操作符)及表达式,Verilog HDL中的运算符可以分为下述类型:算术运算符关系运算符相等运算符逻辑运算符按位运算符缩减(归约)运算符移位运算符条件运算符连接和复制运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按所带操作数的个数分类,单目运算符(unary operator)带一个操作数,操作数在运算符的 右边如 clock双目运算符(binary operator)带两个操作数,操作数分别在运算符的两边如 a|b三目运算符(ternary operator)带三个操作数,用三目运算符隔开,verilo

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

25、D11%(-5)=16h000112/(-7)=16hFFFF,verilog2009-TJU.ASIC Center-Arnold Shi,按位运算符,按位运算符有:(一元非)&(二元与)|(二元或)(二元异或),(二元异或非)这些运算符在输入操作数的对应位上按位操作,并产生向量结果。不同长度操作符运算时,会右端对齐,左端补0,verilog2009-TJU.ASIC Center-Arnold Shi,按位非运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按位与运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按位或

26、运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按位异或运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按位异或非运算符,verilog2009-TJU.ASIC Center-Arnold Shi,按位操作符举例,假定A=b0110;B=b0100;那么:A|B 结果为0 1 1 0A&B 结果为0 1 0 04b1011 4bx010=4bx001如果操作数长度不相等,长度较小的操作数在最左侧添0补位。例如,b0110 b10000与如下式的操作相同:b00110 b10000结果为 b10110。,verilog

27、2009-TJU.ASIC Center-Arnold Shi,逻辑运算符,逻辑运算符有:&(逻辑与)|(逻辑或)!(一元逻辑非)这些运算符在逻辑值0或1上运算。逻辑运算的结构为0或1。,verilog2009-TJU.ASIC Center-Arnold Shi,逻辑与运算举例,assign a=8haa;assign b=8hff;assign c_out=ac_out2结果是0000_0001,verilog2009-TJU.ASIC Center-Arnold Shi,课堂练习,以下表达式在verilog HDL中的值是多少?(结果用8位表示)assign d_0=4b1101 8h0

28、a;assign d_1=4b1101 8h0a;assign d_2=4b1z01|8h0a;assign d_3=4b1101,答案是#hex d_0 is 07#hex d_1 is F8#binary d_2 is 0000_1x11#hex d_3 is 01#hex d_4 is 00#hex d_5 is 01,verilog2009-TJU.ASIC Center-Arnold Shi,关系运算符,关系运算符有:(大于)=(不小于)45结果为假(0)52 8hxFF结果为x。,verilog2009-TJU.ASIC Center-Arnold Shi,关系运算符语法,如果操作

29、数长度不同,长度较短的操作数在最重要的位方向(左方)添0补齐。例如:b1000=b01110 等价于:b01000=b01110结果为假(0),verilog2009-TJU.ASIC Center-Arnold Shi,相等关系运算符,相等关系运算符有:=(逻辑相等)!=(逻辑不等)=(全等)!=(非全等)如果比较结果为假,则结果为0;否则结果为1。在全等比较中,值x和z严格按位比较。,verilog2009-TJU.ASIC Center-Arnold Shi,相等关系运算举例,Data=b11x0;Addr=b11x0;那么(Data=Addr)不定,值为x,但:Data=Addr为真,

30、值为1。如果操作数的长度不相等,长度较小的操作数在左侧添0补位,例如:2b10=4b0010与下面的表达式相同:4b0010=4b0010结果为真(1)。,verilog2009-TJU.ASIC Center-Arnold Shi,关系及相等关系运算符练习,判断以下表达式中的d值是多少 assign d_relation1=(4b1011=4b10 x1);assign d_relation2=(4b1011=4b10 x1);assign d_relation3=(4b10 x1=4b10 x1);assign d_relation4=(4b10z1=4b10 x1);assign d_r

31、elation5=(4b10 x1!=4b10 x1);assign d_relation6=(4b10 x1!=4b10 x1);,答案是:#bin d_relation1 is 1bx#bin d_relation2 is 1bx#bin d_relation3 is 1bx#bin d_relation4 is 1b0#bin d_relation5 is 1b0#bin d_relation6 is 1bx,verilog2009-TJU.ASIC Center-Arnold Shi,3.2.6 缩减(归约)运算符,归约运算符在单一操作数的所有位上操作,并产生1位结果。归约运算符有:&

32、(归约与):如果存在位值为0,那么结果为0;若如果存在位值为x或z,结果为x;否则结果为1。&(归约与非):与归约运算符&相反。|(归约或):如果存在位值为1,那么结果为1;如果存在位x或z,结果为x;否则结果为0。|(归约或非):与归约运算符|相反。(归约异或):如果存在位值为x或z,那么结果为x;否则如果操作数中有偶数个1,结果为0;否则结果为1。(归约异或非):与归约运算符正好相反。,verilog2009-TJU.ASIC Center-Arnold Shi,缩减(归约)运算符练习,判断以下表达式中的d值是多少 assign d_reduction1=,modelsim仿真验证的答案是

33、#bin d_reduction1 is 1b0#bin d_reduction2 is 1b0#bin d_reduction3 is 1b1#bin d_reduction4 is 1b0#bin d_reduction5 is 1b1#bin d_reduction6 is 1b0#bin d_reduction7 is 1bx#bin d_reduction8 is 1b0 Error:./vlog_test.v(57):near:syntax error,verilog2009-TJU.ASIC Center-Arnold Shi,3.2.7 移位运算符,移位运算符有:(右移)移位运

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

35、逻辑expr1和expr2按位操作的值:0与0得0,1与1得1,其余情况为x。,verilog2009-TJU.ASIC Center-Arnold Shi,条件运算符举例,wire 0:2 Student=Marks 18?GA:GC;计算表达式Marks 18;如果真,GA 赋值给Student;如果Marks=18,GC 赋值给Student。再例如:always#5 Ctr=(Ctr!=25)?(Ctr+1):5;过程赋值中的表达式表明如果Ctr不等于25,则加1;否则如果Ctr值为25时,将Ctr值重新置为5。,verilog2009-TJU.ASIC Center-Arnold S

36、hi,3.3.8 连接和复制操作,连接操作是将小表达式合并形成大表达式的操作。形式如:expr1,expr2,.,exprN实例如下所示:wire 7:0 Dbus;wire 11:0 Abus;assign Dbus 7:4=Dbus 0,Dbus 1,Dbus2,Dbus 3;/以反转的顺序将低端4位赋给高端4位。assign Dbus=Dbus 3:0,Dbus 7:4;/高4位与低4位交换。,verilog2009-TJU.ASIC Center-Arnold Shi,复制运算符,通过指定重复次数来执行操作。形式如下:repetition_number expr1,expr2,.,ex

37、prN 以下是一些实例:Abus=34b1011;/位向量12b1011_1011_1011)Abus=4Dbus7,Dbus;/*符号扩展*/,verilog2009-TJU.ASIC Center-Arnold Shi,运算符的优先级,verilog2009-TJU.ASIC Center-Arnold Shi,关键词,所有关键词都是事先定义好的确认符,用于组织语言结构,全部是小写定义。常用的有assign always initial begin endbuf bufif0 bufif1 casex casez cmos deassign default defparam disable

38、 edge case if else endcase join large fork join not notif0 notif1 xor wire reg wor xor xnor while tri tri0 tri1 triand trior repeat task function forever endtask 等等,verilog2009-TJU.ASIC Center-Arnold Shi,作业练习题,假定3 2位总线Address_Bus,编写一个表达式,计算从第11位到第2 0位的归约与非。假定一条总线Control_Bus 15:0,编写赋值语句将总线分为两条总线:Abus

39、 0:9和Bbus 6:1。编写一个表达式,执行算术移位,将Qparity 中包含的8位有符号数算术移位。使用条件运算符,编写赋值语句选择NextState的值。如果CurrentState的值为RESET,那么NextState的值为GO;如果CurrentState的值为GO,则NextState 的值为BUS Y;如果CurrentState的值为B U S Y;则NextS tate的值为RESET。,verilog2009-TJU.ASIC Center-Arnold Shi,习题解答,错误解答:assign CurrentState=RESET?NextState=Go:(Curr

40、entState=Go?NextState=BUSY:(CurrentState=BUSY?NextState=RESET:)正确解答:assign nextstate=(currentstate=RESET)?GO:(currentstate=GO)?BUSY:(currentstate=BUSY)?RESET:1bz);,verilog2009-TJU.ASIC Center-Arnold Shi,3.3数据流建模,天津大学电子科学与技术系史再峰,verilog2009-TJU.ASIC Center-Arnold Shi,一、连续赋制值语句,连续赋制语句用于把值赋给线网型变量(不能为寄存

41、器型变量赋值)语句形式为:assign A=B 只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;如果计算的结果值有变化,新结果就赋给左边的线网。,verilog2009-TJU.ASIC Center-Arnold Shi,数据流的模型化,连续赋值语句将值赋给线网(连续赋值不能为reg)例如assign Mux=(S=0)?A:1bz;assign Mux=(S=1)?B:1bz;assign Mux=(S=2)?C:1bz;assign Mux=(S=3)?D:1bz;,assign Mux=(S=0)?A:1bz,/也可以这样在一个语句中写Mux=(S=1)?B:

42、1bz,Mux=(S=2)?C:1bz,Mux=(S=3)?D:1bz;,verilog2009-TJU.ASIC Center-Arnold Shi,连续赋值的目标类型,标量线网wire a;向量线网wire 7:0 a;向量线网的常数型位选择,如 a1 向量线网的常数型部分选择 如:a3:1 上述类型的任意的拼接运算结果3a2,a2:1,verilog2009-TJU.ASIC Center-Arnold Shi,连续赋值语句举例,module FA _Df(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;assign Sum=A B Cin

43、;assign Cout=(A endmodule,在本例中,有两个连续赋值语句。这些赋值语句是并发的,与其书写的顺序无关,verilog2009-TJU.ASIC Center-Arnold Shi,对应的电路连接关系,verilog2009-TJU.ASIC Center-Arnold Shi,赋值给向量线网的拼接,wire Cout,Cin;wire 3:0 Sum,A,B;assign Cout,Sum=A+B+Cin;,verilog2009-TJU.ASIC Center-Arnold Shi,数据流描述方式,例:wor BpW;wand BpR;assign BpW=Error,

44、BpW和BpR电路图,verilog2009-TJU.ASIC Center-Arnold Shi,用数据流描述对2-4解码器电路的建模,verilog2009-TJU.ASIC Center-Arnold Shi,参考答案,timescale 1ns/1nsmodule Decoder2x4(A,B,EN,Z);input A,B,EN;output 0:3 Z;wire Abar,Bbar;assign Abar=A;assign Bbar=B;assign Z0=(Abar endmodule,verilog2009-TJU.ASIC Center-Arnold Shi,课堂练习题,使用

45、连续赋值语句,描述图示的优先编码器电路的行为,2bar0,2bar1,2bar2,verilog2009-TJU.ASIC Center-Arnold Shi,某同学的解答,module(Data,Encode,Valid);input 3:0Data;output 1:0Encode;wire 2bar0,2bar1,0bar;assign 2bar0=Data 2;assign 2bar1=2bar0endmodule,程序基本没有问题,但是:第1行module没有命名,这是不可以的第4行变量定义的时候,标识符的首字母应该是字母或者下划线,verilog2009-TJU.ASIC Cent

46、er-Arnold Shi,正确解答,module encoder(Data,Encode,Valid);input 3:0Data;output 1:0Encode;wire bar0,bar1,bar;assign bar0=Data 2;assign bar1=2bar0endmodule,verilog2009-TJU.ASIC Center-Arnold Shi,二、线网说明赋值,连续赋值可作为线网说明本身的一部分。这样的赋值被称为线网说明赋值。如:wire 3:0 Sum=4b0;wire Clear=b1;wire A _GT _ B=A B,B_GT_A=B A;等价于wire

47、 clear;assign clear=b1;不允许在同一个线网上出现多个线网说明赋值。如果多个赋值是必需的,则必须使用连续赋值语句。,verilog2009-TJU.ASIC Center-Arnold Shi,隐式线网,如果在Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是 default_nettype编译指令能够用于取代缺省线网类型.例:default_nettype wand/根据此编译指令,所有后续未说明的线网都是wand类型再例:default_nettype wire module AND4to1(Z,D0,D1,D2,D3,S0);outp

48、ut Z;input D0,D1,D2,D3,S0;assign Z=S0?(D0 endmodule,verilog2009-TJU.ASIC Center-Arnold Shi,数据流建模课堂练习,verilog2009-TJU.ASIC Center-Arnold Shi,数据流建模参考答案,module MSDFF_DF(D,C,Q,Qbar);input D,C;output Q,Qbar;/wire NotC,NotD,NotY,Y,D1,D2,Ybar,Y1,;Y2assign NotD=D;assign NotC=C;assign NotY=Y;assign D1=(Dendm

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

50、时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模块包含上面的连续赋值语句,#2 代表2ns。如果没有这样的编译器指令,Verilog HDL 模拟器会指定一个缺省时间单位。IEEE VerilogHDL 标准中没有规定缺省时间单位。,verilog2009-TJU.ASIC Center-Arnold Shi,为什么会有延时?,以下两个最基本的电路单元,verilog2009-TJU.ASIC Center-Arnold Shi,CMOS NAND,A,B,A B,A,B,A,B,verilog2009-TJU.ASIC

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号