第三讲的基本语法_第1页
第三讲的基本语法_第2页
第三讲的基本语法_第3页
第三讲的基本语法_第4页
第三讲的基本语法_第5页
已阅读5页,还剩213页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三讲的基本语法verilog2009--TJU.ASICCenter---ArnoldShi第一页,共二百一十八页,编辑于2023年,星期五3.1数据类型及其常量及变量天津大学电子科学与技术系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第二页,共二百一十八页,编辑于2023年,星期五0、低、伪、逻辑低、地、VSS、负插入01XZ0bufbufbufbufif11、高、真、逻辑高、电源、VDD、正插入X、不确定:逻辑冲突无法确定其逻辑值HiZ、高阻抗、三态、无驱动源Verilog的四种逻辑值x和X、z和Z不区别大小写。Z有时候也用?代替verilog2009--TJU.ASICCenter---ArnoldShi第三页,共二百一十八页,编辑于2023年,星期五数据类型VerilogHDL中共有19种数据类型,分成常量和变量最基本最常用的4种:寄存器型reg线网型wire整形integer参数型parameter其余的包括:large\medium\scalared\time\small\tri\trio\tri1\triand\trior\trireg\vectored\wand\wor型,主要与基本单元库有关,设计时很少使用verilog2009--TJU.ASICCenter---ArnoldShi第四页,共二百一十八页,编辑于2023年,星期五一、常量在程序运行中,其值不能被改变的量叫常量两类最基本的常量:数字型常量和参数(parameter)数字型常量:整型数可以按如下两种方式书写简单的十进制数格式基数格式verilog2009--TJU.ASICCenter---ArnoldShi第五页,共二百一十八页,编辑于2023年,星期五基数表示法(一)格式:[位宽]’进制

值无符号数。位宽是按照二进制数来计算的。进制可以为b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)。值是基于进制的数字序列。如:3’b001,3’B110三位二进制6’o12,6’O12六位八进制4’d9,4’D9十位十进制8’hBF,8’HBF八位十六进制verilog2009--TJU.ASICCenter---ArnoldShi第六页,共二百一十八页,编辑于2023年,星期五基数表示法(二)基数格式计数形式的数通常为无符号数。这种形式的整型数的长度定义是可选的。如果没有定义一个整数型的长度,数的长度为相应值中定义的位数。下面是两个例子:'o7219位八进制数'hAF8位十六进制数verilog2009--TJU.ASICCenter---ArnoldShi第七页,共二百一十八页,编辑于2023年,星期五基数表示法(三)如果定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位为x或z,就相应地用x或z在左边补位。例如:10'b10左边添0占位,000000001010'bx0x1左边添x占位,xxxxxxx0x1如果长度定义得更小,那么最左边的位相应地被截断。例如:3'b1001_0011与3'b011相等5'H0FFF与5'H1F相等?字符在数中可以代替值z在值z被解释为不分大小写的情况下提高可读性verilog2009--TJU.ASICCenter---ArnoldShi第八页,共二百一十八页,编辑于2023年,星期五下划线下划线可以用来分割数的表达式以提高程序的可读性,但不能用在位宽和进制处,只能用于具体的数字之间比如16’b1010_1011_11111_000//合法格式8’b_0011_1011//非法格式verilog2009--TJU.ASICCenter---ArnoldShi第九页,共二百一十八页,编辑于2023年,星期五负数一个数字可以被定义成负数,只要在位宽表达式前加一个减号-8’d5//合法格式8’d-5//非法格式verilog2009--TJU.ASICCenter---ArnoldShi第十页,共二百一十八页,编辑于2023年,星期五简单的十进制格式这种形式的整数定义为带有一个可选的“+”(一元)或“-”(一元)运算符的数字序列。这种形式的整数值代表一个有符号的数。负数使用补码形式表示。例如15 相当于二进制01111-15 相当于二进制10001

verilog2009--TJU.ASICCenter---ArnoldShi第十一页,共二百一十八页,编辑于2023年,星期五实数类型实数可以用下列两种形式定义十进制记数法,例如:2.0;-0.1等科学记数法,例如:235.1e2 等于23510.0234_12e2 等于2341200.0实数小数通过四舍五入被隐式地转换为最相近的整数。例如:42.446,42.45转换为整数4292.5,92.699转换为整数93-5.62转换为整数-6-26.22转换为整数-6verilog2009--TJU.ASICCenter---ArnoldShi第十二页,共二百一十八页,编辑于2023年,星期五常量的位数,x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)当常量不说明位数时候默认是32位,每个字母用8位ASCII码来表示10=32’d10=32’b10101=32’d1=32’b1-1=-32’d1=32’hFFFF_FFFF‘BX=32’BX=32’BXXXXXXXXXX...“AB”=16’B010000001_01000010A的ASCII值是85,B的值是86verilog2009--TJU.ASICCenter---ArnoldShi第十三页,共二百一十八页,编辑于2023年,星期五字符串字符串是双引号内的字符串列。一个字符可用八位二进制表示。如:“INTEGER”需要8*7位。 例: reg[8*14:1]Message; Message=“INTERNALERROR”;verilog2009--TJU.ASICCenter---ArnoldShi第十四页,共二百一十八页,编辑于2023年,星期五课堂练习下列表达式的位模式是什么?写出其具体的二进制表示值7'o44,'Bx0,5'bx110,'hA0,10'd2,'hzFVerilog描述实际的二进制值7'o44100100'Bx0x05'bx110xx110'hA01010_000010'd20000_0000_10'hzFzzzz1111verilog2009--TJU.ASICCenter---ArnoldShi第十五页,共二百一十八页,编辑于2023年,星期五参数参数是一个常量。用parameter定义一个标识符来代表一个常量。参数经常用于定义时延和变量的宽度。格式:parameterparam1=const_expr1,param2=const_expr2, …, paramN=const_exprN;如:parameterDelay=1;

parameterA=32,B=4’b0001;

parameterstring=“exec_command”;verilog2009--TJU.ASICCenter---ArnoldShi第十六页,共二百一十八页,编辑于2023年,星期五参数的传递参数值也可以在编译时被改变。改变参数值可以使用参数定义语句或通过在模块初始化语句中定义参数值当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数值的改变可采用下述两种方式:参数定义语句(defparam);带参数值的模块引用。verilog2009--TJU.ASICCenter---ArnoldShi第十七页,共二百一十八页,编辑于2023年,星期五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。HAHa1(NewA,NewB,NewS,NewC);endmodulemoduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=A^B;assign#AND_DELAYC=A&B;endmoduleHATOPverilog2009--TJU.ASICCenter---ArnoldShi第十八页,共二百一十八页,编辑于2023年,星期五参数值的模块引用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第十九页,共二百一十八页,编辑于2023年,星期五课堂练习-参数传递假定一个模块为BK,内部两个参数P1,P2;另外一个模块为HA,内部参数P3,P4其在TOP模块中实例化调用的名称分别为U1,U2请尝试在top模块中用两种不同的方法改变其参数值p1-p4分别为1,2,3,4verilog2009--TJU.ASICCenter---ArnoldShi第二十页,共二百一十八页,编辑于2023年,星期五二、变量在Verilog中有两大主要数据类型:线网类型(wire)、寄存器类型(reg)。线网类型

包含下述不同种类的线网子类型。

wire,tri 用于连线的最常见的线网类型

wor,trior线或

wand,triand线与

trireg 此线网存储数值,用于电容节点的建模

tri1,tri0用于线逻辑的建模,上拉或下拉驱动

supply0,supply1supply0用于对“地”建模,supply1对电源建模verilog2009--TJU.ASICCenter---ArnoldShi第二十一页,共二百一十八页,编辑于2023年,星期五nets(网络连线)nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselansloutverilog2009--TJU.ASICCenter---ArnoldShi第二十二页,共二百一十八页,编辑于2023年,星期五Nets(线网型)例:

wireBpW;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;BpW电路图verilog2009--TJU.ASICCenter---ArnoldShi第二十三页,共二百一十八页,编辑于2023年,星期五Nets(网络连线,线网类型)简单的线网类型定义说明语句为:net_kind[msb:lsb]net1,net2,….netN;当一个线形有两个或多个驱动时,线网的有效值按如下表确定。verilog2009--TJU.ASICCenter---ArnoldShi第二十四页,共二百一十八页,编辑于2023年,星期五补充:CMOSNORABF001010100110A+BABABABverilog2009--TJU.ASICCenter---ArnoldShi第二十五页,共二百一十八页,编辑于2023年,星期五补充:CMOSNANDABA•BABABF001011101110ABverilog2009--TJU.ASICCenter---ArnoldShi第二十六页,共二百一十八页,编辑于2023年,星期五Nets(网络连线)verilog2009--TJU.ASICCenter---ArnoldShi第二十七页,共二百一十八页,编辑于2023年,星期五补充知识:连续赋制值语句连续赋制语句用于把值赋给线网型变量(不能为寄存器型变量赋值)语句形式为:assignA=B&C;连续赋值语句在什么时候执行呢?只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;如果结果值有变化,新结果就赋给左边的线网。verilog2009--TJU.ASICCenter---ArnoldShi第二十八页,共二百一十八页,编辑于2023年,星期五连续赋值的目标类型标量线网向量线网向量的常数型位选择,如a[1]向量的常数型部分选择如:a[3:1]上述类型的任意的拼接运算结果verilog2009--TJU.ASICCenter---ArnoldShi第二十九页,共二百一十八页,编辑于2023年,星期五连续赋值语句举例module

FA_Df(A,B,Cin,Sum,Cout);input

A,B,Cin;output

Sum,Cout;assign

Sum=A^B^Cin;assign

Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有两个连续赋值语句。这些赋值语句是并发的,与其书写的顺序无关verilog2009--TJU.ASICCenter---ArnoldShi第三十页,共二百一十八页,编辑于2023年,星期五数据流描述方式例:worBpW;wandBpR;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;

assignBpR=Error^Valid;

assignBpR=!Clear;BpW和BpR电路图verilog2009--TJU.ASICCenter---ArnoldShi第三十一页,共二百一十八页,编辑于2023年,星期五寄存器(register)类型变量寄存器(register)类型变量register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_bverilog2009--TJU.ASICCenter---ArnoldShi第三十二页,共二百一十八页,编辑于2023年,星期五reg型寄存器是数据存储单元的抽象reg型数据常用来表示always块内的指定信号,常代表触发器reg型数据用initial或者always块中指定信号reg型数据的缺省值是x。可以被赋正值或者负值。当它作为一个表达式中的操作数时候,作为无符号数。reg数据类型定义格式为reg[n-1:0]数据名1,....;或者reg[n:1]数据名1,....;verilog2009--TJU.ASICCenter---ArnoldShi第三十三页,共二百一十八页,编辑于2023年,星期五寄存器阵列

Verilog语言支持寄存器阵列的声明:integerNUMS[7:0];//8个整型变量的寄存器阵列timet_vals[3:0];//4个时间变量的寄存器阵列数据类型为reg的阵列常称为存储器(即memory):reg[15:0]MEM[0:1023];//1Kx16位的存储器reg[7:0]PREP[‘hfffe:‘hffff];//2x8位的存储器可以用参数来表示存储器的大小:parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];只能一次选择一个字,不允许对存储器变量值部分进行部分选择或位选择.如dram[60][2:4]是错误的verilog2009--TJU.ASICCenter---ArnoldShi第三十四页,共二百一十八页,编辑于2023年,星期五存储器memory型变量存储器memory型用一个寄存器数组来对存储器建模。格式:reg[msb:lsb]存储器名[upper1:lower1];如:reg[3:0]MyMem[63:0];//64个四位寄存器组

verilog2009--TJU.ASICCenter---ArnoldShi第三十五页,共二百一十八页,编辑于2023年,星期五其他类型变量integer整数寄存器有符号数。主要用来高层次建模。如:integerA; //整形寄存器,32位integerB[1023:0];//10位time时间类型寄存器如:timeCurrentTime;//CurrentTime存储一个时间值 CurrentTime=$time;verilog2009--TJU.ASICCenter---ArnoldShi第三十六页,共二百一十八页,编辑于2023年,星期五输入端口(input)可以由寄存器(reg)或线网(wire)连接驱动,但它本身只能驱动网络连接。输出端口(output)可以由寄存器或线网连接驱动,但它本身只能驱动线网连接。输入/输出端口(inout)只可以由线网连接驱动,但它本身只能驱动线网连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量

如何选择正确的数据类型?verilog2009--TJU.ASICCenter---ArnoldShi第三十七页,共二百一十八页,编辑于2023年,星期五moduletop;wirey;

rega,b;DUTu1(y,a,b);

initial

begina=0;b=0;#10a=1;….

endendmodule

模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule举例说明数据类型的选择verilog2009--TJU.ASICCenter---ArnoldShi第三十八页,共二百一十八页,编辑于2023年,星期五在过程块(alwaysinitial)中对变量赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型把模块的输入信号定义为寄存器类型。这是经常犯的三个错误!!!选择数据类型时常犯的错误verilog2009--TJU.ASICCenter---ArnoldShi第三十九页,共二百一十八页,编辑于2023年,星期五3.2运算符及表达式天津大学电子科学与技术系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第四十页,共二百一十八页,编辑于2023年,星期五3.2运算符(操作符)及表达式VerilogHDL中的运算符可以分为下述类型:算术运算符关系运算符相等运算符逻辑运算符按位运算符缩减(归约)运算符移位运算符条件运算符连接和复制运算符verilog2009--TJU.ASICCenter---ArnoldShi第四十一页,共二百一十八页,编辑于2023年,星期五按所带操作数的个数分类单目运算符(unaryoperator)带一个操作数,操作数在运算符的右边如~clock双目运算符(binaryoperator)带两个操作数,操作数分别在运算符的两边如a|b三目运算符(ternaryoperator)带三个操作数,用三目运算符隔开verilog2009--TJU.ASICCenter---ArnoldShi第四十二页,共二百一十八页,编辑于2023年,星期五3.2.1算术运算符算术运算符有:+(一元加和二元加)-(一元减和二元减)*(乘)/(除)%(取模)整数除法截断任何小数部分。例如:7/4结果为1取模运算符求出与第一个运算符符号相同的余数。7%4结果为3而-7%4结果为-3verilog2009--TJU.ASICCenter---ArnoldShi第四十三页,共二百一十八页,编辑于2023年,星期五课堂练习以下表达式在verilogHDL中的值是多少?(结果用16位hex表示表示)5/3(-9)/6(-9)%611%(-5)12/(-7)答案是5/3=16’h0001(-9)/6=16’hFFFF(-9)%6=16’hFFFD11%(-5)=16’h000112/(-7)=16’hFFFFverilog2009--TJU.ASICCenter---ArnoldShi第四十四页,共二百一十八页,编辑于2023年,星期五3.2.2按位运算符按位运算符有:~(一元非)&(二元与)|(二元或)^(二元异或)~^,^~(二元异或非)这些运算符在输入操作数的对应位上按位操作,并产生向量结果。不同长度操作符运算时,会右端对齐,左端补0verilog2009--TJU.ASICCenter---ArnoldShi第四十五页,共二百一十八页,编辑于2023年,星期五按位非运算符verilog2009--TJU.ASICCenter---ArnoldShi第四十六页,共二百一十八页,编辑于2023年,星期五按位与运算符verilog2009--TJU.ASICCenter---ArnoldShi第四十七页,共二百一十八页,编辑于2023年,星期五按位或运算符verilog2009--TJU.ASICCenter---ArnoldShi第四十八页,共二百一十八页,编辑于2023年,星期五按位异或运算符verilog2009--TJU.ASICCenter---ArnoldShi第四十九页,共二百一十八页,编辑于2023年,星期五按位异或非运算符verilog2009--TJU.ASICCenter---ArnoldShi第五十页,共二百一十八页,编辑于2023年,星期五按位操作符举例假定A='b0110;B='b0100;那么:A|B结果为0110A&B结果为01004'b1011^4'bx010=4'bx001如果操作数长度不相等,长度较小的操作数在最左侧添0补位。例如,'b0110^'b10000与如下式的操作相同:'b00110^'b10000结果为'b10110。verilog2009--TJU.ASICCenter---ArnoldShi第五十一页,共二百一十八页,编辑于2023年,星期五3.2.3逻辑运算符逻辑运算符有:&&(逻辑与)||(逻辑或)!(一元逻辑非)这些运算符在逻辑值0或1上运算。逻辑运算的结构为0或1。verilog2009--TJU.ASICCenter---ArnoldShi第五十二页,共二百一十八页,编辑于2023年,星期五逻辑与运算举例assigna=8'haa;assignb=8'hff;assignc_out=a&b;assignc_out2=a&&b;c_out2结果是0000_0001verilog2009--TJU.ASICCenter---ArnoldShi第五十三页,共二百一十八页,编辑于2023年,星期五课堂练习以下表达式在verilogHDL中的值是多少?(结果用8位表示)assignd_0=4'b1101^8'h0a;assignd_1=4'b1101^~8'h0a;assignd_2=4'b1z01|8'h0a;assignd_3=4'b1101&&8'h0a;assignd_4=!4'b1x01;assignd_5=4'b1010||8'h55;答案是#hexd_0is07#hexd_1isF8#binaryd_2is0000_1x11#hexd_3is01#hexd_4is00#hexd_5is01verilog2009--TJU.ASICCenter---ArnoldShi第五十四页,共二百一十八页,编辑于2023年,星期五3.2.4关系运算符关系运算符有:>(大于)<(小于)>=(不小于)<=(不大于)关系运算符的结果为真(1)或假(0)。如果操作数中有一位为X或Z,那么结果为X。例如:23>45结果为假(0)52<8‘hxFF结果为x。verilog2009--TJU.ASICCenter---ArnoldShi第五十五页,共二百一十八页,编辑于2023年,星期五关系运算符语法如果操作数长度不同,长度较短的操作数在最重要的位方向(左方)添0补齐。例如:'b1000>='b01110等价于:'b01000>='b01110结果为假(0)verilog2009--TJU.ASICCenter---ArnoldShi第五十六页,共二百一十八页,编辑于2023年,星期五3.2.5相等关系运算符相等关系运算符有:==(逻辑相等)!=(逻辑不等)===(全等)!==(非全等)如果比较结果为假,则结果为0;否则结果为1。在全等比较中,值x和z严格按位比较。verilog2009--TJU.ASICCenter---ArnoldShi第五十七页,共二百一十八页,编辑于2023年,星期五相等关系运算举例Data='b11x0;Addr='b11x0;那么(Data==Addr)不定,值为x,但:Data===Addr为真,值为1。如果操作数的长度不相等,长度较小的操作数在左侧添0补位,例如:2'b10==4'b0010与下面的表达式相同:4'b0010==4'b0010结果为真(1)。verilog2009--TJU.ASICCenter---ArnoldShi第五十八页,共二百一十八页,编辑于2023年,星期五关系及相等关系运算符练习判断以下表达式中的d值是多少assignd_relation1=(4'b1011>=4'b10x1);

assignd_relation2=(4'b1011==4'b10x1);

assignd_relation3=(4'b10x1==4'b10x1);

assignd_relation4=(4'b10z1===4'b10x1);assignd_relation5=(4'b10x1!==4'b10x1);assignd_relation6=(4'b10x1!=4'b10x1);答案是:#bind_relation1is1'bx#bind_relation2is1'bx#bind_relation3is1'bx#bind_relation4is1'b0#bind_relation5is1'b0#bind_relation6is1'bxverilog2009--TJU.ASICCenter---ArnoldShi第五十九页,共二百一十八页,编辑于2023年,星期五3.2.6缩减(归约)运算符归约运算符在单一操作数的所有位上操作,并产生1位结果。归约运算符有:&(归约与):如果存在位值为0,那么结果为0;若如果存在位值为x或z,结果为x;否则结果为1。~&(归约与非):与归约运算符&相反。

|(归约或):如果存在位值为1,那么结果为1;如果存在位x或z,结果为x;否则结果为0。~|(归约或非):与归约运算符|相反。

^(归约异或):如果存在位值为x或z,那么结果为x;否则如果操作数中有偶数个1,结果为0;否则结果为1。

~^(归约异或非):与归约运算符^正好相反。verilog2009--TJU.ASICCenter---ArnoldShi第六十页,共二百一十八页,编辑于2023年,星期五缩减(归约)运算符练习判断以下表达式中的d值是多少

assignd_reduction1=&8'b1011_0011;

assignd_reduction2=~|8'b1011_0011;

assignd_reduction3=~&8'b1011_0011;assignd_reduction4=~^8'b1011_0011;

assignd_reduction5=^8'b1011_0011;assignd_reduction6=~|8'b1011_00x1;

assignd_reduction7=^8'b10z1_0011;

assignd_reduction8=&8'b1011_00x1;assign

d_reduction8=&~8'b1011_00x1;modelsim仿真验证的答案是#bind_reduction1is1'b0#bind_reduction2is1'b0#bind_reduction3is1'b1#bind_reduction4is1'b0#bind_reduction5is1'b1#bind_reduction6is1'b0#bind_reduction7is1'bx#bind_reduction8is1'b0

Error:./vlog_test.v(57):near"~":syntaxerror,

verilog2009--TJU.ASICCenter---ArnoldShi第六十一页,共二百一十八页,编辑于2023年,星期五3.2.7移位运算符移位运算符有:<<(左移)

>>(右移)移位运算符左侧操作数移动右侧操作数表示的次数,它是一个逻辑移位。空闲位添0补位。如果右侧操作数的值为x或z,移位操作的结果为x。假定:reg

[0:7]Qreg;...Qreg=4'b0111;那么:Qreg>>2是8'b0000_0001verilog2009--TJU.ASICCenter---ArnoldShi第六十二页,共二百一十八页,编辑于2023年,星期五3.2.8条件运算符条件运算符根据条件表达式的值选择表达式,形式如下:cond_expr

?expr1:expr2如果cond_expr为真(即值为1),选择expr1;如果cond_expr为假(值为0),选择expr2。如果cond_expr为x或z,结果将是按以下逻辑expr1和expr2按位操作的值:0与0得0,1与1得1,其余情况为x。verilog2009--TJU.ASICCenter---ArnoldShi第六十三页,共二百一十八页,编辑于2023年,星期五条件运算符举例wire

[0:2]Student=Marks>18?GA:GC;计算表达式Marks>18;如果真,GA赋值给Student;如果Marks<=18,GC赋值给Student。再例如:always#5Ctr=(Ctr!=25)?(Ctr+1):5;过程赋值中的表达式表明如果Ctr不等于25,则加1;否则如果Ctr值为25时,将Ctr值重新置为5。verilog2009--TJU.ASICCenter---ArnoldShi第六十四页,共二百一十八页,编辑于2023年,星期五3.3.8连接和复制操作连接操作是将小表达式合并形成大表达式的操作。形式如:{expr1,expr2,...,exprN}实例如下所示:wire[7:0]Dbus;wire[11:0]Abus;assignDbus[7:4]={Dbus[0],Dbus[1],Dbus[2],Dbus[3]};//以反转的顺序将低端4位赋给高端4位。assignDbus={Dbus[3:0],Dbus[7:4]};//高4位与低4位交换。verilog2009--TJU.ASICCenter---ArnoldShi第六十五页,共二百一十八页,编辑于2023年,星期五复制运算符通过指定重复次数来执行操作。形式如下:{repetition_number{expr1,expr2,...,exprN}}以下是一些实例:Abus={3{4'b1011}};/位向量12'b1011_1011_1011)Abus={{4{Dbus[7]}},Dbus};/*符号扩展*/verilog2009--TJU.ASICCenter---ArnoldShi第六十六页,共二百一十八页,编辑于2023年,星期五运算符的优先级verilog2009--TJU.ASICCenter---ArnoldShi第六十七页,共二百一十八页,编辑于2023年,星期五3.2.10关键词所有关键词都是事先定义好的确认符,用于组织语言结构,全部是小写定义。常用的有assignalwaysinitialbeginendbufbufif0bufif1casexcasezcmosdeassigndefaultdefparamdisableedgecaseifelseendcasejoinlargeforkjoinnotnotif0notif1xorwireregworxorxnorwhiletritri0tri1triandtriorrepeattaskfunctionforeverendtask等等verilog2009--TJU.ASICCenter---ArnoldShi第六十八页,共二百一十八页,编辑于2023年,星期五作业练习题假定32位总线Address_Bus,编写一个表达式,计算从第11位到第20位的归约与非。假定一条总线Control_Bus[15:0],编写赋值语句将总线分为两条总线:Abus[0:9]和Bbus[6:1]。编写一个表达式,执行算术移位,将Qparity中包含的8位有符号数算术移位。使用条件运算符,编写赋值语句选择NextState的值。如果CurrentState的值为RESET,那么NextState的值为GO;如果CurrentState的值为GO,则NextState的值为BUSY;如果CurrentState的值为BUSY;则NextState的值为RESET。verilog2009--TJU.ASICCenter---ArnoldShi第六十九页,共二百一十八页,编辑于2023年,星期五习题解答错误解答:assign

CurrentState==RESET?NextState=Go:(CurrentState==Go?NextState=BUSY:(CurrentState==BUSY?NextState=RESET:))正确解答:assignnextstate=(currentstate==RESET)?GO:((currentstate==GO)?BUSY:((currentstate==BUSY)?RESET:1’bz));verilog2009--TJU.ASICCenter---ArnoldShi第七十页,共二百一十八页,编辑于2023年,星期五3.3数据流建模天津大学电子科学与技术系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第七十一页,共二百一十八页,编辑于2023年,星期五一、连续赋制值语句连续赋制语句用于把值赋给线网型变量(不能为寄存器型变量赋值)语句形式为:assignA=B&C;只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;如果计算的结果值有变化,新结果就赋给左边的线网。verilog2009--TJU.ASICCenter---ArnoldShi第七十二页,共二百一十八页,编辑于2023年,星期五数据流的模型化连续赋值语句将值赋给线网(连续赋值不能为reg)例如assign

Mux=(S==0)?A:1'bz;assign

Mux=(S==1)?B:1'bz;assign

Mux=(S==2)?C:1'bz;assign

Mux=(S==3)?D:1'bz;assign

Mux=(S==0)?A:1‘bz,//也可以这样在一个语句中写Mux=(S==1)?B:1‘bz,

Mux=(S==2)?C:1‘bz,

Mux=(S==3)?D:1'bz;verilog2009--TJU.ASICCenter---ArnoldShi第七十三页,共二百一十八页,编辑于2023年,星期五连续赋值的目标类型标量线网wirea;向量线网wire[7:0]a;向量线网的常数型位选择,如a[1]向量线网的常数型部分选择如:a[3:1]上述类型的任意的拼接运算结果{3a[2],a[2:1]}verilog2009--TJU.ASICCenter---ArnoldShi第七十四页,共二百一十八页,编辑于2023年,星期五连续赋值语句举例module

FA_Df(A,B,Cin,Sum,Cout);input

A,B,Cin;output

Sum,Cout;assign

Sum=A^B^Cin;assign

Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有两个连续赋值语句。这些赋值语句是并发的,与其书写的顺序无关verilog2009--TJU.ASICCenter---ArnoldShi第七十五页,共二百一十八页,编辑于2023年,星期五对应的电路连接关系verilog2009--TJU.ASICCenter---ArnoldShi第七十六页,共二百一十八页,编辑于2023年,星期五赋值给向量线网的拼接wire

Cout,Cin;wire[3:0]Sum,A,B;assign{Cout,Sum}=A+B+Cin;verilog2009--TJU.ASICCenter---ArnoldShi第七十七页,共二百一十八页,编辑于2023年,星期五数据流描述方式例:worBpW;wandBpR;

assignBpW=Error&Wait;

assignBpW=Valid|Clear;

assignBpR=Error^Valid;

assignBpR=!Clear;BpW和BpR电路图verilog2009--TJU.ASICCenter---ArnoldShi第七十八页,共二百一十八页,编辑于2023年,星期五用数据流描述对2-4解码器电路的建模verilog2009--TJU.ASICCenter---ArnoldShi第七十九页,共二百一十八页,编辑于2023年,星期五参考答案`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assignAbar=~A;assignBbar=~B;assignZ[0]=~(Abar&Bbar&EN);assignZ[1]=~(Abar&B&EN);assignZ[2]=~(A&Bbar&EN);assignZ[3]=~(A&B&EN);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十页,共二百一十八页,编辑于2023年,星期五课堂练习题使用连续赋值语句,描述图示的优先编码器电路的行为2bar02bar12bar2verilog2009--TJU.ASICCenter---ArnoldShi第八十一页,共二百一十八页,编辑于2023年,星期五某同学的解答module(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wire2bar0,2bar1,0bar;assign2bar0=~Data[2];assign2bar1=2bar0&Data[1];assign0bar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmodule程序基本没有问题,但是:第1行module没有命名,这是不可以的第4行变量定义的时候,标识符的首字母应该是字母或者下划线verilog2009--TJU.ASICCenter---ArnoldShi第八十二页,共二百一十八页,编辑于2023年,星期五正确解答moduleencoder(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wirebar0,bar1,bar;assignbar0=~Data[2];assignbar1=2bar0&Data[1];assignbar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十三页,共二百一十八页,编辑于2023年,星期五二、线网说明赋值连续赋值可作为线网说明本身的一部分。这样的赋值被称为线网说明赋值。如:wire[3:0]Sum=4'b0;wireClear='b1;wireA_GT_B=A>B,B_GT_A=B>A;等价于

wireclear;

assignclear=‘b1;不允许在同一个线网上出现多个线网说明赋值。如果多个赋值是必需的,则必须使用连续赋值语句。verilog2009--TJU.ASICCenter---ArnoldShi第八十四页,共二百一十八页,编辑于2023年,星期五隐式线网如果在VerilogHDL模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是`default_nettype编译指令能够用于取代缺省线网类型.例:`default_nettypewand

//根据此编译指令,所有后续未说明的线网都是wand类型再例:`default_nettypewiremoduleAND4to1(Z,D0,D1,D2,D3,S0);outputZ;inputD0,D1,D2,D3,S0;

assignZ=S0?(D0&D1&D2&D3):1’b0;

endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十五页,共二百一十八页,编辑于2023年,星期五数据流建模课堂练习verilog2009--TJU.ASICCenter---ArnoldShi第八十六页,共二百一十八页,编辑于2023年,星期五数据流建模参考答案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&Q);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第八十七页,共二百一十八页,编辑于2023年,星期五三、时延说明assign#6Ask=Quiet||Late;规定右边表达式结果的计算到其赋给左边目标需经过6个时间单位时延。例如,如果在时刻5,Late值发生变化,则赋值的右端表达式被计算,并且Ask在时刻11(=5+6)被赋于新值verilog2009--TJU.ASICCenter---ArnoldShi第八十八页,共二百一十八页,编辑于2023年,星期五时延VerilogHDL模型中的所有时延都根据时间单位定义使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义,如下所示:`timescale

1ns/100ps此语句说明时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模块包含上面的连续赋值语句,#2代表2ns。如果没有这样的编译器指令,VerilogHDL模拟器会指定一个缺省时间单位。IEEEVerilogHDL标准中没有规定缺省时间单位。verilog2009--TJU.ASICCenter---ArnoldShi第八十九页,共二百一十八页,编辑于2023年,星期五为什么会有延时?以下两个最基本的电路单元verilog2009--TJU.ASICCenter---ArnoldShi第九十页,共二百一十八页,编辑于2023年,星期五CMOSNANDABA•BABABF001011101110ABverilog2009--TJU.ASICCenter---ArnoldShi第九十一页,共二百一十八页,编辑于2023年,星期五CMOSNORABF001010100110A+BABABABverilog2009--TJU.ASICCenter---ArnoldShi第九十二页,共二百一十八页,编辑于2023年,星期五MOSFET的结构verilog2009--TJU.ASICCenter---ArnoldShi第九十三页,共二百一十八页,编辑于2023年,星期五MOS电容verilog2009--TJU.ASICCenter---ArnoldShi第九十四页,共二百一十八页,编辑于2023年,星期五静态CMOS的开关模型AReqARpARpARnCLACLBRnARpBRpARnCintBRpARpARnBRnCLCintNAND2INVNOR2verilog2009--TJU.ASICCenter---ArnoldShi第九十五页,共二百一十八页,编辑于2023年,星期五关于时延探讨如果右端在传输给左端之前变化,右端发生在时延间隔内的变化被滤掉。 例如:assign#4Cab=Drm;这也同样适用于惯性时延行为:即右端值变化在能够传播到左端前必须至少保持时延间隔;如果在时延间隔内右端值变化,则前面的值不能传输到输出。verilog2009--TJU.ASICCenter---ArnoldShi第九十六页,共二百一十八页,编辑于2023年,星期五三类时延值对于每个时延定义,总共能够指定三类时延值:上升时延下降时延关闭时延assign#(rise,fall,turn-off)LHS=RHS_expr;如果右端从非0向量变化到0向量,那么就使用下降时延。如果右端值到达z,那么使用下降时延;否则使用上升时延。assign#4Ask=Quiet||Late;//Onedelayvalue.assign#(4,8)Ask=Quick;//Twodelayvalues.assign#(4,8,6)Arb=&DataBus;//Threedelayvalues.assignBus=MemAddr[7:4];//Nodelayvalue.verilog2009--TJU.ASICCenter---ArnoldShi第九十七页,共二百一十八页,编辑于2023年,星期五带时延的译码器建模`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assign#1Abar=~A;assign#1Bbar=~B;assign#2Z[0]=~(Abar&Bbar&EN);assign#2Z[1]=~(Abar&B&EN);assign#2Z[2]=~(A&Bbar&EN);assign#2Z[3]=~(A&B&EN);endmoduleverilog2009--TJU.ASICCenter---ArnoldShi第九十八页,共二百一十八页,编辑于2023年,星期五结果波形verilog2009--TJU.ASICCenter---ArnoldShi第九十九页,共二百一十八页,编辑于2023年,星期五3.3.3线网时延时延也可以在线网说明中定义,如:wire#5Arb;线网时延效果如图线网时延Textassign时延assign时延驱动2驱动2驱动1RHS表达式RHS表达式线网目标verilog2009--TJU.ASICCenter---ArnoldShi第一百页,共二百一十八页,编辑于2023年,星期五线网时延举例wire#5Arb;assign#2Arb=Bod⋒因为定义了线网时延,实际对Arb的赋值发生在时刻17(=10+2+5)。verilog2009--TJU.ASICCenter---ArnoldShi第一百零一页,共二百一十八页,编辑于2023年,星期五课后作业数据流建模以下的奇偶发生器verilog2009--TJU.ASICCenter---ArnoldShi第一百零二页,共二百一十八页,编辑于2023年,星期五3.4门级结构建模天津大学电子科学与技术系史再峰shizaifeng@verilog2009--TJU.ASICCenter---ArnoldShi第一百零三页,共二百一十八页,编辑于2023年,星期五3.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---ArnoldShi第一百零四页,共二百一十八页,编辑于2023年,星期五3.4.1内置的基本门VerilogHDL为门级电路建模的能力.提供下列内置基本门:

多输入门: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第一百零五页,共二百一十八页,编辑于2023年,星期五门级结构建模语法语句形式gate_type[instance_name](term1,term2,...,termN);注意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表示与门的输入/输出端口相连的线网或寄存器.同一门类型的多个实例能够在一个结构形式中定义gate_type[instance_name1](term1,term2,...,termN),[instance_name2](term1,term2,...,termN),[instance_name3](term1,term2,...,termN),[instance_name4](term1,term2,...,termN);verilog2009--TJU.ASICCenter---ArnoldShi第一百零六页,共二百一十八页,编辑于2023年,星期五3.4.2多输入门内置的多输入门包括:andnandnororxorxnor这些逻辑门只有单个输出,1个或多个输入。门实例语句的语法如:multi_input_gate_type[instance_name](OutputA,Input1,Input2,...,InputN);第一个端口是输出,其它端口是输入多输入门input1input2inputNOutputAverilog2009--TJU.ASICCenter---ArnoldShi第一百零七页,共二百一十八页,编辑于2023年,星期五多输入门语法举例andA1(Out1,In1,In2);andRBX(Sty,Rib,Bro,Qit,Fi)x;xor(Bar,Bud[0],Bud[1],Bud[2]),(Car,Cut[0],Cut[1]),(Sar,Sut[2],Sut[1],Sut[0],Sut[3]);verilog2009--TJU.ASICCenter---ArnoldShi第一百零八页,共二百一十八页,编辑于2023年,星期五多输入门的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXXverilog2009--TJU.ASICCenter---ArnoldShi第一百零九页,共二百一十八页,编辑于2023年,星期五多输入门的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XXverilog2009--TJU.ASICCenter---ArnoldShi第一百一十页,共二百一十八页,编辑于2023年,星期五多输入门的真值表(三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXXverilog2009--TJU.ASICCenter---ArnoldShi第一百一十一页

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论