第10章Verilog操作符_第1页
第10章Verilog操作符_第2页
第10章Verilog操作符_第3页
第10章Verilog操作符_第4页
第10章Verilog操作符_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、第第1010章章 Verilog操作符操作符学习内容:学习内容:熟悉熟悉Verilog语言的操作符语言的操作符操作符类型操作符类型下表以优先级顺序列出了下表以优先级顺序列出了Verilog操作符。注意操作符。注意“与与”操作符的优先级总是比相同操作符的优先级总是比相同类型的类型的“或或”操作符高。本章将对每个操作符用一个例子作出解释。操作符高。本章将对每个操作符用一个例子作出解释。 操作符类型操作符类型符号符号连接及复制操作符一元操作符算术操作符逻辑移位操作符关系操作符相等操作符按位操作符逻辑操作符条件操作符 ! & | * / %+ - = = = = = = != != =&

2、; | &|?:最高最高最低最低优先级优先级Verilog中的大小中的大小(size)与符号与符号Verilog根据表达式中变量的长度对表达式的值自动地进行调整。根据表达式中变量的长度对表达式的值自动地进行调整。Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。自动截断或扩展赋值语句中右边的值以适应左边变量的长度。当一个负数赋值给无符号变量如当一个负数赋值给无符号变量如reg时,时,Verilog自动完成二进制补码计算自动完成二进制补码计算module sign_size;module sign_size; reg 3:0 a, b; reg 3:0 a, b; re

3、g 15:0 c; reg 15:0 c; initial begin initial begin a = -1; a = -1; / a/ a是无符号数,因此其值为是无符号数,因此其值为11111111 b = 8; c= 8; b = 8; c= 8; / b = c = 1000/ b = c = 1000 #10 b = b + a; #10 b = b + a; / / 结果结果1011110111截断截断, b = 0111, b = 0111 #10 c = c + a; #10 c = c + a; / c = 10111/ c = 10111 end endendmodule

4、endmodule算术操作符算术操作符module arithops module arithops ();(); parameter parameter five = 5;five = 5; integer ans, integer ans, int;int; reg 3: 0 rega, reg 3: 0 rega, regb;regb; reg 3: 0 num; reg 3: 0 num; initial begin initial begin rega = 3; rega = 3; regb = 4b1010; regb = 4b1010; int = -3; int = -3; /

5、int = 1111/int = 11111111_11011111_1101 end end initial fork initial fork #10 ans = five #10 ans = five * * int; / ans = int; / ans = -15-15 #20 ans = (int #20 ans = (int + 5)/ 2; / ans = 1+ 5)/ 2; / ans = 1 #30 ans = #30 ans = five/ int; five/ int; / ans = -1/ ans = -1 #40 num = #40 num = rega + re

6、gb; / rega + regb; / num = 1101num = 1101 #50 num = #50 num = rega + 1; / rega + 1; / num = 0100num = 0100 #60 num = int; #60 num = int; / num = 1101/ num = 1101 #70 num = #70 num = regb % rega; / regb % rega; / num = 1num = 1 #80 $finish; #80 $finish;joinjoinendmoduleendmodule+加加-减减*乘乘除除%模模 将负数赋值给将

7、负数赋值给reg或其它无符号变量或其它无符号变量使用使用2的补码算术。的补码算术。 如果操作数的某一位是如果操作数的某一位是x或或z,则结,则结果为果为x 在整数除法中,余数舍弃在整数除法中,余数舍弃 模运算中使用第一个操作数的符号模运算中使用第一个操作数的符号注意integer和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。按位操作符按位操作符module bitwise module bitwise ();(); reg 3: 0 rega, reg 3: 0 rega, regb, regc;regb, regc; reg 3: 0 num; reg 3:

8、0 num; initial begin initial begin rega = 4b1001; rega = 4b1001; regb = 4b1010; regb = 4b1010; regc = 4b11x0; regc = 4b11x0; end end initial fork initial fork #10 num = #10 num = rega & 0; / num rega & 0; / num = 0000= 0000 #20 num = #20 num = rega & regb; / rega & regb; / num = 1000

9、num = 1000 #30 num = #30 num = rega | regb; / rega | regb; / num = 1011num = 1011 #40 num = #40 num = regb & regc; / regb & regc; / num = 10 x0num = 10 x0 #50 num = #50 num = regb | regc; / regb | regc; / num = 1110num = 1110 #60 $finish; #60 $finish; join joinendmoduleendmodulenot&and|o

10、rxor xnor xnor 按位操作符对矢量中相对应位运算。按位操作符对矢量中相对应位运算。 regb = 4b1 0 1 0 regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ; 位值为位值为x时不一定产生时不一定产生x结果。如结果。如#50时时的的or计算。计算。当两个操作数位数不同时,位数少的操作数零扩展到相同位数。a = 4b1011;b = 8b01010011;c = a | b; / a零扩展为零扩展为 8b00001011逻辑操作符逻辑操作符module logical ();module logical (); paramete

11、r parameter five = 5;five = 5; reg ans; reg ans; reg 3: 0 rega, reg 3: 0 rega, regb, regc;regb, regc; initial initial begin begin rega = 4 rega = 4b0011;b0011; / /逻辑值为逻辑值为“1 1” regb = regb = 4 4b10 xz; /b10 xz; /逻辑值为逻辑值为“1 1” regc = regc = 4 4b0z0 x; /b0z0 x; /逻辑值为逻辑值为“xx” end end initial fork initi

12、al fork #10 ans = rega #10 ans = rega & 0; / ans = 0& 0; / ans = 0 #20 ans = rega #20 ans = rega | 0; / ans = 1| 0; / ans = 1 #30 ans = rega #30 ans = rega & five; / ans = 1& five; / ans = 1 #40 ans = #40 ans = regb & rega; / regb & rega; / ans = 1ans = 1 #50 ans = #50 ans =

13、regc | 0; / regc | 0; / ans = xans = x #60 $finish; #60 $finish; join joinendmoduleendmodule!not&and|or 逻辑操作符的结果为一位逻辑操作符的结果为一位1,0或或x。逻辑操作符只对逻辑值运算。逻辑操作符只对逻辑值运算。如操作数为全如操作数为全0,则其逻辑值为,则其逻辑值为false如操作数有一位为如操作数有一位为1,则其逻辑值为,则其逻辑值为true若操作数若操作数只只包含包含0、x、z,则逻辑值为,则逻辑值为x逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作

14、数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,逻辑反操作值为,逻辑反操作值为1。逻辑反与位反的对比逻辑反与位反的对比module negation();module negation(); reg 3: 0 rega, reg 3: 0 rega, regb;regb; reg 3: 0 bit; reg 3: 0 bit; reg log; reg log; initial begin initial begin rega = 4b1011; rega = 4b1011; regb = 4b0000; regb = 4b0000; end end initial fork i

15、nitial fork #10 bit = #10 bit = rega; / num = 0100rega; / num = 0100 #20 bit = #20 bit = regb; / num = 1111regb; / num = 1111 #30 log #30 log = !rega; / num = 0= !rega; / num = 0 #40 log #40 log = !regb; / num = 1= !regb; / num = 1 #50 $finish; #50 $finish; join joinendmoduleendmodule! logical not 逻

16、辑反逻辑反 bit-wise not 位反位反 逻辑反的结果为一位逻辑反的结果为一位1,0或或x。位反的结果与操作数的位数相同位反的结果与操作数的位数相同逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,逻辑反操作值为,逻辑反操作值为1。一元归约操作符一元归约操作符module module reduction();reduction(); reg val; reg val; reg 3: 0 rega, reg 3: 0 rega, regb;regb; initial initial beginbegi

17、n rega = rega = 4b0100;4b0100; regb = regb = 4b1111;4b1111; end end initial fork initial fork #10 val = #10 val = & & rega ; / val = 0rega ; / val = 0 #20 val = #20 val = | | rega ; / val = 1rega ; / val = 1 #30 val = #30 val = & regb ; / val = 1regb ; / val = 1 #40 val = #40 val = | | r

18、egb ; / val = 1regb ; / val = 1 #50 val = #50 val = rega ; / val = 1rega ; / val = 1 #60 val = #60 val = regb ; / val = 0regb ; / val = 0 #70 val = #70 val = | | rega; / (nor) val = rega; / (nor) val = 0 0 #80 val = #80 val = & rega; / (nand) rega; / (nand) val = 1val = 1 #90 val = #90 val = reg

19、a & &regb; / rega & &regb; / val = 1val = 1 $finish;$finish; join joinendmoduleendmodule&and|orxor xnor xnor 归约操作符的操作数只有一个。归约操作符的操作数只有一个。对操作数的所有位进行位操作。对操作数的所有位进行位操作。结果只有一位,可以是结果只有一位,可以是0, 1, X。移位操作符移位操作符module shift ();module shift (); reg 9: 0 num, num1; reg 9: 0 num, num1; reg

20、7: 0 rega, reg 7: 0 rega, regb;regb; initial rega = initial rega = 8b00001100; 8b00001100; initial fork initial fork #10 num = rega #10 num = rega 5 ; / num = 01_1000_00005 ; / num = 01_1000_0000 #10 regb = rega #10 regb = rega 5 ; / regb = 5 ; / regb = 1000_00001000_0000 #20 num #20 num 3; / num =

21、00_0000_00013; / num = 00_0000_0001 #20 regb = rega #20 regb 3 ; / regb = 3 ; / regb = 0000_00010000_0001 #30 num = #30 num = 10b11_1111_0000;10b11_1111_0000; #40 rega = num 2; #40 rega = num 2; /rega = 1100_0000/rega = 1100_0000 #40 num1 = num #40 num1 = num 2;/num1=11_1100_00002;/num1=11_1100_0000

22、 #50 rega #50 rega 2; /rega = 1111_11002; /rega = 1111_1100 #50 num1 #50 num1 2;/num1=00_1111_11002;/num1=00_1111_1100 #60 $finish; #60 $finish; join joinendmoduleendmodule逻辑右移逻辑左移 移位操作符对其左边的操作数进行移位操作符对其左边的操作数进行向左或向右的位移位操作。向左或向右的位移位操作。第二个操作数(移位位数)是无符第二个操作数(移位位数)是无符号数号数若第二个操作数是若第二个操作数是x或或z则结果为则结果为x在赋

23、值语句中,如果右边在赋值语句中,如果右边(RHS)的结果的结果:位宽大于左边,则把最高位截去位宽大于左边,则把最高位截去位宽小于左边,则零扩展位宽小于左边,则零扩展 将左边的操作数右移右边操将左边的操作数右移右边操作数指定的位数作数指定的位数左移先补后移左移先补后移右移先移后补右移先移后补建议:表达式左右位数一致建议:表达式左右位数一致关系操作符关系操作符module module relationals ();relationals (); reg 3: 0 rega, reg 3: 0 rega, regb, regc;regb, regc; reg val; reg val; initi

24、al begin initial begin rega = 4b0011; rega = 4b0011; regb = 4b1010; regb = 4b1010; regc = 4b0 x10; regc = 4b0 x10; end end initial fork initial fork #10 val = #10 val = regc rega ; / regc rega ; / val = xval = x #20 val = #20 val = regb rega ; / regb = rega ; / regb = rega ; / val = 1val = 1 #40 val

25、 = #40 val = regb regc ; / regb regc ; / val = 1val = 1 #50 $finish; #50 $finish; join joinendmoduleendmodule大于=大于等于大于等于regcrega和和regc的的关系取决于关系取决于x相等操作符相等操作符 赋值操作符,将等式右边表达式的值拷贝到左边。赋值操作符,将等式右边表达式的值拷贝到左边。注意逻辑等与注意逻辑等与case等的差别等的差别= 逻辑等逻辑等= = =01xz010 xx101xxxxxxxzxxxx case等等= = = =01xz0100010100 x0010z0

26、0012b1x=2b0 x 值为值为0,因为不相等,因为不相等2b1x=2b1x 值为值为x,因为可能不,因为可能不相等,也可能相等相等,也可能相等2b1x=2b0 x 值为值为0,因为不相同,因为不相同2b1x=2b1x 值为值为1,因为相同,因为相同a = 2b1x;a = 2b1x;b = 2b1x;b = 2b1x;if (a = b)if (a = b) $display( a $display( a is equal to is equal to b);b);elseelse $display( a $display( a is not equal is not equal to

27、b);to b);a = 2b1x;a = 2b1x;b = 2b1x;b = 2b1x;if (a = b)if (a = b) $display( a $display( a is identical is identical to b);to b);elseelse $display( a $display( a is not is not identical identical to b);to b);Case等只能用于行为描述,不能用于RTL描述。相等操作符相等操作符 逻辑等逻辑等 逻辑不等逻辑不等=! =module module equalities1();equalities1

28、(); reg 3: 0 reg 3: 0 rega, regb, rega, regb, regc;regc; reg val; reg val; initial initial beginbegin rega = rega = 4b0011;4b0011; regb = regb = 4b1010;4b1010; regc = regc = 4b1x10;4b1x10; end end initial fork initial fork #10 val = #10 val = rega = regb ; rega = regb ; / val = 0/ val = 0 #20 val =

29、#20 val = rega != regc; rega != regc; / val = 1/ val = 1 #30 val = #30 val = regb != regc; regb != regc; / val = x/ val = x #40 val = #40 val = regc = regc; regc = regc; / val = x/ val = x #50 $finish; #50 $finish; join joinendmoduleendmodule 其结果是其结果是1b1、1b0或或1bx。 如果左边及右边为确定值并且如果左边及右边为确定值并且相等,则结果为相等

30、,则结果为1。 如果左边及右边为确定值并且如果左边及右边为确定值并且不相等,则结果为不相等,则结果为0。 如果左边及右边有值不能确定如果左边及右边有值不能确定的位,但值确定的位相等,则结的位,但值确定的位相等,则结果为果为x。!=的结果与的结果与= =相反相反值确定是指所有的位为值确定是指所有的位为0或或1。不确定值是有值为不确定值是有值为x或或z的位。的位。相等操作符相等操作符 相同相同(case等等) 不相同不相同(case不等不等)=! =module module equalities2();equalities2(); reg 3: 0 reg 3: 0 rega, regb, re

31、ga, regb, regc;regc; reg val; reg val; initial initial beginbegin rega = rega = 4b0011;4b0011; regb = regb = 4b1010;4b1010; regc = regc = 4b1x10;4b1x10; end end initial fork initial fork #10 val = #10 val = rega = regb ; rega = regb ; / val = 0/ val = 0 #20 val = #20 val = rega != regc; rega != regc

32、; / val = 1/ val = 1 #30 val = #30 val = regb = regc; regb = regc; / val = 0/ val = 0 #40 val = #40 val = regc = regc; regc = regc; / val = 1/ val = 1 #50 $finish; #50 $finish; join joinendmoduleendmodule 其结果是其结果是1b1、1b0或或1bx。 如果左边及右边的值相同(包如果左边及右边的值相同(包括括x、z),则结果为,则结果为1。如果左边及右边的值不相同,如果左边及右边的值不相同,则结果

33、为则结果为0。!=的结果与的结果与 = 相反相反综合工具不支持综合工具不支持条件操作符条件操作符 条件条件?:module module likebufif( in, likebufif( in, en, out);en, out); input in; input in; input en; input en; output output out;out; assign out = assign out = (en = 1) ? in : (en = 1) ? in : bz;bz;endmoduleendmodulemodule module like4to1( a, b, c, like

34、4to1( a, b, c, d, sel, out);d, sel, out); input a, b, input a, b, c, d;c, d; input 1: 0 input 1: 0 sel;sel; output output out;out; assign out = assign out = sel = 2b00 ? a :sel = 2b00 ? a : sel = 2b01 ? b :sel = 2b01 ? b : sel = 2b10 ? c : sel = 2b10 ? c : d;d;endmoduleendmodule如果条件值为如果条件值为x或或z,则结果可

35、能为,则结果可能为x或或z条件操作符条件操作符条件操作符的语法为:条件操作符的语法为: = ? :registger = condition ? registger = condition ? true_value:false_valuetrue_value:false_value;其意思是:其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression每个条件操作符必须有三个参数,缺少任何一个都会产生错误。每个条件操作符必须有三个参数,缺少任何一个都会产生错误。最后一个操作数作为缺省值。最后一个

36、操作数作为缺省值。上式中,若上式中,若conditioncondition为真则为真则registerregister等于等于true_valuetrue_value;若;若conditioncondition为假则为假则registerregister等于等于false_valuefalse_value。一个很有意思的地方是,。一个很有意思的地方是,如果条件值不确定,且如果条件值不确定,且true_valuetrue_value和和false_valuefalse_value不相等,则输出不确定值。不相等,则输出不确定值。例如:例如:assign out = (sel = 0) ? a :

37、b;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 module concatenation;concatenation; reg 7: 0 reg 7: 0 rega, regb, rega, regb

38、, regc, regd;regc, regd; reg 7: 0 new; reg 7: 0 new; initial initial beginbegin rega = rega = 8b0000_0011;8b0000_0011; regb = regb = 8b0000_0100;8b0000_0100; regc = regc = 8b0001_1000;8b0001_1000; regd = regd = 8b1110_0000;8b1110_0000; end end initial fork initial fork #10 new = #10 new = regc 4: 3,

39、 regc 4: 3, regd 7: 5,regd 7: 5, regb 2, rega 1: regb 2, rega 1: 0;0; / new = / new = 8b111111118b11111111 #20 $finish; #20 $finish; join joinendmoduleendmodule在级联和复制时,必须指定位数,在级联和复制时,必须指定位数,否则将产生错误。否则将产生错误。下面是类似错误的例子:下面是类似错误的例子: a7:0 = 4 b10; b7:0 = 2 5; c3:0 = 3 b011, b0;级联时不限定操作数的数目。在级联时不限定操作数的数目。在操作符符号操作符符号 中,用逗号将操中,用逗号将操作数分开。例如作数分开。例如: A, B, C, D复制复制 复制复制 复

温馨提示

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

评论

0/150

提交评论