Verilog语法基础 (2).ppt
《Verilog语法基础 (2).ppt》由会员分享,可在线阅读,更多相关《Verilog语法基础 (2).ppt(72页珍藏版)》请在三一办公上搜索。
1、操作符类型,下表以优先级顺序列出了Verilog操作符。注意“与”操作符的优先级总是比相同类型的“或”操作符高。本章将对每个操作符用一个例子作出解释。,最高,最低,优先级,Verilog中的大小(size)与符号,Verilog根据表达式中变量的长度对表达式的值自动地进行调整。Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算,module sign_size;reg 3:0 a,b;reg 15:0 c;initial begin a=-1;/a是无符号数,因此其值为1111 b=8;c=8;/b=c
2、=1000#10 b=b+a;/结果10111截断,b=0111#10 c=c+a;/c=10111#10 c=b+a;endendmodule,算术操作符,module arithops();parameter five=5;integer ans,int;reg 3:0 rega,regb;reg 3:0 num;initial begin rega=3;regb=4b1010;int=-3;/int=11111111_1101 end initial fork#10 ans=five*int;/ans=-15#20 ans=(int+5)/2;/ans=1#30 ans=five/int
3、;/ans=-1#40 num=rega+regb;/num=1101#50 num=rega+1;/num=0100#60 num=int;/num=1101#70 num=regb%rega;/num=1#80$finish;joinendmodule,+加-减*乘/除%模,将负数赋值给reg或其它无符号变量使用2的补码算术。如果操作数的某一位是x或z,则结果为x 在整数除法中,余数舍弃 模运算中使用第一个操作数的符号,注意integer和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。,按位操作符,module bitwise();reg 3:0 rega,r
4、egb,regc;reg 3:0 num;initial begin rega=4b1001;regb=4b1010;regc=4b11x0;end initial fork#10 num=rega joinendmodule,not&and|orxor xnor xnor,按位操作符对矢量中相对应位运算。regb=4b1 0 1 0 regc=4b1 x 1 0num=regb 位值为x时不一定产生x结果。如#50时的or计算。,当两个操作数位数不同时,位数少的操作数零扩展到相同位数。,a=4b1011;b=8b01010011;c=a|b;/a零扩展为 8b00001011,逻辑操作符,m
5、odule logical();parameter five=5;reg ans;reg 3:0 rega,regb,regc;initial begin rega=4b0011;/逻辑值为“1”regb=4b10 xz;/逻辑值为“1”regc=4b0z0 x;/逻辑值为“x”end initial fork#10 ans=rega joinendmodule,!not&and|or,逻辑操作符的结果为一位1,0或x。逻辑操作符只对逻辑值运算。如操作数为全0,则其逻辑值为false如操作数有一位为1,则其逻辑值为true若操作数只包含0、x、z,则逻辑值为x,逻辑反操作符将操作数的逻辑值取反
6、。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,逻辑反与位反的对比,module negation();reg 3:0 rega,regb;reg 3:0 bit;reg log;initial begin rega=4b1011;regb=4b0000;end initial fork#10 bit=rega;/num=0100#20 bit=regb;/num=1111#30 log=!rega;/num=0#40 log=!regb;/num=1#50$finish;joinendmodule,!logical not 逻辑反 bit-wise not 位反,逻辑反的结果为一
7、位1,0或x。位反的结果与操作数的位数相同,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,一元归约操作符,module reduction();reg val;reg 3:0 rega,regb;initial begin rega=4b0100;regb=4b1111;end initial fork#10 val=joinendmodule,&and|orxor xnor xnor,归约操作符的操作数只有一个。对操作数的所有位进行位操作。结果只有一位,可以是0,1,X。,移位操作符,module shift();reg 9:0 num,num1
8、;reg 7:0 rega,regb;initial rega=8b00001100;initial fork#10 num 3;/num=00_0000_0001#20 regb 3;/regb=0000_0001#30 num 2;/rega=1111_1100#50 num1 2;/num1=00_1111_1100#60$finish;joinendmodule,逻辑右移逻辑左移,移位操作符对其左边的操作数进行向左或向右的位移位操作。第二个操作数(移位位数)是无符号数若第二个操作数是x或z则结果为x,在赋值语句中,如果右边(RHS)的结果:位宽大于左边,则把最高位截去位宽小于左边,则零
9、扩展,将左边的操作数右移右边操作数指定的位数,左移先补后移右移先移后补,建议:表达式左右位数一致,关系操作符,module relationals();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b0 x10;end initial fork#10 val=regc rega;/val=x#20 val=regb=rega;/val=1#40 val=regb regc;/val=1#50$finish;joinendmodule,大于=大于等于=小于等于,其结果是1b1、1b0或1bx。
10、,无论x为何值,regbregc,rega和regc的关系取决于x,相等操作符,赋值操作符,将等式右边表达式的值拷贝到左边。,注意逻辑等与case等的差别,=,逻辑等,=,case等,=,2b1x=2b0 x 值为0,因为不相等2b1x=2b1x 值为x,因为可能不相等,也可能相等,2b1x=2b0 x 值为0,因为不相同2b1x=2b1x 值为1,因为相同,a=2b1x;b=2b1x;if(a=b)$display(a is equal to b);else$display(a is not equal to b);,a=2b1x;b=2b1x;if(a=b)$display(a is id
11、entical to b);else$display(a is not identical to b);,Case等只能用于行为描述,不能用于RTL描述。,相等操作符,逻辑等 逻辑不等,=!=,module equalities1();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b1x10;end initial fork#10 val=rega=regb;/val=0#20 val=rega!=regc;/val=1#30 val=regb!=regc;/val=x#40 val=reg
12、c=regc;/val=x#50$finish;joinendmodule,其结果是1b1、1b0或1bx。如果左边及右边为确定值并且相等,则结果为1。如果左边及右边为确定值并且不相等,则结果为0。如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。!=的结果与=相反,值确定是指所有的位为0或1。不确定值是有值为x或z的位。,相等操作符,相同(case等)不相同(case不等),=!=,module equalities2();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b1x1
13、0;end initial fork#10 val=rega=regb;/val=0#20 val=rega!=regc;/val=1#30 val=regb=regc;/val=0#40 val=regc=regc;/val=1#50$finish;joinendmodule,其结果是1b1、1b0或1bx。如果左边及右边的值相同(包括x、z),则结果为1。如果左边及右边的值不相同,则结果为0。!=的结果与=相反,综合工具不支持,条件操作符,条件,?:,module likebufif(in,en,out);input in;input en;output out;assign out=(e
14、n=1)?in:bz;endmodulemodule like4to1(a,b,c,d,sel,out);input a,b,c,d;input 1:0 sel;output out;assign out=sel=2b00?a:sel=2b01?b:sel=2b10?c:d;endmodule,如果条件值为x或z,则结果可能为x或z,条件操作符,条件操作符的语法为:=?:,registger=condition?true_value:false_value;,其意思是:if condition is TRUE,then LHS=true_expression,else LHS=false_ex
15、pression,每个条件操作符必须有三个参数,缺少任何一个都会产生错误。最后一个操作数作为缺省值。,上式中,若condition为真则register等于true_value;若condition为假则register等于false_value。一个很有意思的地方是,如果条件值不确定,且true_value和false_value不相等,则输出不确定值。,例如:assign out=(sel=0)?a:b;,若sel为0则out=a;若sel为1则out=b。如果sel为x或z,若a=b=0,则out=0;若ab,则out值不确定。,复制,复制,复制一个变量或在 中的值,module rep
16、licate();reg 3:0 rega;reg 1:0 regb,regc;reg 7:0 bus;initial begin rega=4b1001;regb=2b11;regc=2b00;end initial fork#10 bus=4 regb;/bus=11111111/regb is replicated 4 times.#20 bus=2 regb,2 regc;/bus=11110000.regc and regb are each/replicated,and the resulting vectors/are concatenated together#30 bus=4
17、 rega1,rega;/bus=00001001.rega is sign-extended#40$finish;joinendmodule,前两个 符号之间的正整数指定复制次数。,复习,行为描述,行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是实现。Verilog有高级编程语言结构用于行为描述,包括:wait,while,if then,case和foreverVerilog的行为建模是用一系列以高级编程语言编写的并行的、动态的过程块来描述系统的工作。,过程(procedural)块,过程块是行为模型的基础。过程块有两种:initial块,只能执行一次alway
18、s块,循环执行过程块中有下列部件过程赋值语句:在描述过程块中的数据流高级结构(循环,条件语句):描述块的功能时序控制:控制块的执行及块中的语句。,第11章 行为建模,学习内容:行为建模的基本概念Verilog中高级编程语言结构如何使用连续赋值,过程赋值(procedural assignment),在过程块中的赋值称为过程赋值。在过程赋值语句中表达式左边的信号必须是寄存器类型(如reg类型)在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。,module adder(out,a,b,cin);i
19、nput a,b,cin;output 1:0 out;wire a,b,cin;reg half_sum;reg 1:0 out;always(a or b or cin)begin half_sum=a b cin;/OK half_carry=a endendmodule,half_carry没有声明,过程时序控制,在过程块中可以说明过程时序。过程时序控制有三类:简单延时(#delay):延迟指定时间步后执行边沿敏感的时序控制:()在信号发生翻转后执行。可以说明信号有效沿是上升沿(posedge)还是下降沿(negedge)。可以用关键字or指定多个参数。电平敏感的时序控制:wait()
20、直至expr值为真时(非零)才执行。若expr已经为真则立即执行。,module wait_test;reg clk,waito,edgeo;initial begininitial begin clk=0;edgeo=0;waito=0;endalways#10 clk=clk;always(clk)#2 edgeo=edgeo;always wait(clk)#2 waito=waito;endmodule,简单延时,在test bench中使用简单延时(#延时)施加激励,或在行为模型中模拟实际延时。,module muxtwo(out,a,b,sl);input a,b,sl;outpu
21、t out;reg out;always(sl or a or b)if(!sl)#10 out=a;/从a到out延时10个时间单位 else#12 out=b;/从b到out延时12个时间单位endmodule,在简单延时中可以使用模块参数parameter:module clock_gen(clk);output clk;reg clk;parameter cycle=20;initial clk=0;always#(cycle/2)clk=clk;endmodule,边沿敏感时序,时序控制可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可以用关键字posedge和negedge限定信
22、号敏感边沿。敏感表中可以有多个信号,用关键字or连接。,module reg_ adder(out,a,b,clk);input clk;input 2:0 a,b;output 3:0 out;reg 3:0 out;reg 3:0 sum;always(a or b)/若a或b发生任何变化,执行#5 sum=a+b;always(negedge clk)/在clk下降沿执行 out=sum;endmodule,注:事件控制符or和位或操作符|及逻辑或操作符|没有任何关系。,wait语句,wait用于行为级代码中电平敏感的时序控制。下面 的输出锁存的加法器的行为描述中,使用了用关键字or的边
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog语法基础 2 Verilog 语法 基础

链接地址:https://www.31ppt.com/p-6522825.html