




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Verilog操作符操作符学习内容:学习内容:熟悉熟悉Verilog语言的操作符语言的操作符操作符类型操作符类型下表以优先级顺序列出了下表以优先级顺序列出了Verilog操作符。注意操作符。注意“与与”操作符的优先级总是比相操作符的优先级总是比相同类型的同类型的“或或”操作符高。本章将对每个操作符用一个例子作出解释。操作符高。本章将对每个操作符用一个例子作出解释。 操作符类型操作符类型符号符号连接及复制操作符一元操作符算术操作符逻辑移位操作符关系操作符相等操作符按位操作符逻辑操作符条件操作符 ! & | * / %+ - = = = = = = != != =& | &
2、|?:最高最高最低最低优先级优先级Verilog中的大小中的大小(size)与符号与符号Verilog根据表达式中变量的长度对表达式的值自动地进行调整。根据表达式中变量的长度对表达式的值自动地进行调整。Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。自动截断或扩展赋值语句中右边的值以适应左边变量的长度。当一个负数赋值给无符号变量如当一个负数赋值给无符号变量如reg时,时,Verilog自动完成二进制补码计算自动完成二进制补码计算module sign_size; reg 3:0 a, b; reg 15:0 c; initial begin a = -1; / a是无符号数
3、,因此其值为是无符号数,因此其值为1111 b = 8; c= 8; / b = c = 1000 #10 b = b + a; / 结果结果10111截断截断, b = 0111 #10 c = c + a; / c = 10111 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_11
4、01 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / 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+加加-减减*乘乘/除除%模模 将负数赋值给将负数
5、赋值给reg或其它无符号变量或其它无符号变量使用使用2的补码算术。的补码算术。 如果操作数的某一位是如果操作数的某一位是x或或z,则结,则结果为果为x 在整数除法中,余数舍弃在整数除法中,余数舍弃 模运算中使用第一个操作数的符号模运算中使用第一个操作数的符号注意integer和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。按位操作符按位操作符module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; initial begin rega = 4b1001; regb = 4b1010; regc = 4b
6、11x0; end initial fork #10 num = rega & 0; / num = 0000 #20 num = rega & regb; / num = 1000 #30 num = rega | regb; / num = 1011 #40 num = regb & regc; / num = 10 x0 #50 num = regb | regc; / num = 1110 #60 $finish; joinendmodulenot&and|orxor xnor xnor 按位操作符对矢量中相对应位运算。按位操作符对矢量中相对应位运算。
7、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 (); parameter five = 5; reg ans; reg 3: 0 rega, regb, regc; initial begin rega
8、 = 4b0011; /逻辑值逻辑值为为“1” regb = 4b10 xz; /逻辑值为逻辑值为“1” regc = 4b0z0 x; /逻辑值为逻辑值为“x” end initial fork #10 ans = rega & 0; / ans = 0 #20 ans = rega | 0; / ans = 1 #30 ans = rega & five; / ans = 1 #40 ans = regb & rega; / ans = 1 #50 ans = regc | 0; / ans = x #60 $finish; joinendmodule!not&am
9、p;and|or 逻辑操作符的结果为一位逻辑操作符的结果为一位1,0或或x。逻辑操作符只对逻辑值运算。逻辑操作符只对逻辑值运算。如操作数为全如操作数为全0,则其逻辑值为,则其逻辑值为false如操作数有一位为如操作数有一位为1,则其逻辑值为,则其逻辑值为true若操作数若操作数只只包含包含0、x、z,则逻辑值为,则逻辑值为x逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,逻辑反操作值为,逻辑反操作值为1。逻辑反与位反的对比逻辑反与位反的对比module negation(); reg 3: 0 rega,
10、 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 位反位反 逻辑反的结果为一位逻辑反的结果为一位1,0或或x。位反的结果与操
11、作数的位数相同位反的结果与操作数的位数相同逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,逻辑反操作值为,逻辑反操作值为1。一元归约操作符一元归约操作符module reduction(); reg val; reg 3: 0 rega, regb; initial begin rega = 4b0100; regb = 4b1111; end initial fork #10 val = & rega ; / val = 0 #20 val = | rega ; / val = 1 #30 va
12、l = & regb ; / val = 1 #40 val = | regb ; / val = 1 #50 val = rega ; / val = 1 #60 val = regb ; / val = 0 #70 val = | rega; / (nor) val = 0 #80 val = & rega; / (nand) val = 1 #90 val = rega & ®b; / val = 1 $finish; joinendmodule&and|orxor xnor xnor 归约操作符的操作数只有一个。归约操作符的操作数只有一个。
13、对操作数的所有位进行位操作。对操作数的所有位进行位操作。结果只有一位,可以是结果只有一位,可以是0, 1, X。移位操作符移位操作符module shift (); reg 9: 0 num, num1; reg 7: 0 rega, regb; initial rega = 8b00001100; initial fork #10 num = rega 5 ; / num = 01_1000_0000 #10 regb = rega 5 ; / regb = 1000_0000 #20 num 3; / num = 00_0000_0001 #20 regb 3 ; / regb = 000
14、0_0001 #30 num = 10b11_1111_0000; #40 rega = num 2; /rega = 1100_0000 #40 num1 = num 2;/num1=11_1100_0000 #50 rega 2; /rega = 1111_1100 #50 num1 2;/num1=00_1111_1100 #60 $finish; joinendmodule逻辑右移逻辑左移 移位操作符对其左边的操作数进行移位操作符对其左边的操作数进行向左或向右的位移位操作。向左或向右的位移位操作。第二个操作数(移位位数)是无符第二个操作数(移位位数)是无符号数号数若第二个操作数是若第二
15、个操作数是x或或z则结果为则结果为x在赋值语句中,如果右边在赋值语句中,如果右边(RHS)的结果的结果:位宽大于左边,则把最高位截去位宽大于左边,则把最高位截去位宽小于左边,则零扩展位宽小于左边,则零扩展 将左边的操作数右移右边操将左边的操作数右移右边操作数指定的位数作数指定的位数左移先补后移左移先补后移右移先移后补右移先移后补建议:表达式左右位数一致建议:表达式左右位数一致关系操作符关系操作符module relationals (); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010
16、; 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大于=大于等于大于等于regcrega和和regc的的关系取决于关系取决于x相等操作符相等操作符 赋值操作符,将等式右边表达式的值拷贝到左边。赋值操作符,将等式右边表达式的值拷贝到左边。注意逻辑等与注意逻辑等与case等的差别等的差别= 逻辑等逻辑等= = = 01xz010 xx
17、101xxxxxxxzxxxx case等等= = = = 01xz0100010100 x0010z00012b1x=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)
18、$display( a is identical 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
19、 = rega != regc; / val = 1 #30 val = regb != regc; / val = x #40 val = regc = regc; / val = x #50 $finish; joinendmodule 其结果是其结果是1b1、1b0或或1bx。 如果左边及右边为确定值并且如果左边及右边为确定值并且相等,则结果为相等,则结果为1。 如果左边及右边为确定值并且如果左边及右边为确定值并且不相等,则结果为不相等,则结果为0。 如果左边及右边有值不能确定如果左边及右边有值不能确定的位,但值确定的位相等,则结的位,但值确定的位相等,则结果为果为x。!=的结果与的结果
20、与= =相反相反值确定是指所有的位为值确定是指所有的位为0或或1。不确定值是有值为不确定值是有值为x或或z的位。的位。相等操作符相等操作符 相同相同(case等等) 不相同不相同(case不等不等)=! =module equalities2(); 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
21、 = 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;
22、output out; assign out = (en = 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 = cond
23、ition ? true_value:false_value;其意思是:其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression每个条件操作符必须有三个参数,缺少任何一个都会产生错误。每个条件操作符必须有三个参数,缺少任何一个都会产生错误。最后一个操作数作为缺省值。最后一个操作数作为缺省值。上式中,若上式中,若condition为真则为真则register等于等于true_value;若;若condition为假则为假则register等等于于false_value。一个很有意思的地方是,如
24、果条件值不确定,且。一个很有意思的地方是,如果条件值不确定,且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值不确定。值不确定。级联操作符级联操作符 级联级联 可以从不同的矢量中选择位并用可以从不同的矢量中选择位并用它们组成一个新的矢量。它们组成一个新的矢量。用于位的重组和矢量构造用于位的重组和矢量构造m
25、odule concatenation; reg 7: 0 rega, regb, regc, regd; reg 7: 0 new; initial begin rega = 8b0000_0011; regb = 8b0000_0100; regc = 8b0001_1000; regd = 8b1110_0000; end initial fork #10 new = regc 4: 3, regd 7: 5, regb 2, rega 1: 0; / new = 8b11111111 #20 $finish; joinendmodule在级联和复制时,必须指定位数,在级联和复制时,必须指定位数,否则将产生错误。否则将产生错误。下面是类似错误的例子:下面是类似错误的例子: a7:0 = 4 b10; b7:0 = 2 5; c3:0 = 3 b011, b0;级联时不限定操作数的数目。在级联时不限定操作数的数目。在操作符符号操作符符号 中,用逗号将操中,用逗号将操作数分开。例如作数分开。例如: A, B, C, D复制复制 复制复制 复制一个变量或在复制一个变量或在 中的值中的值mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力干线迁移施工方案
- 新中式瓦工施工方案
- 文官街地铁施工方案
- TSHPA 0006-2024 学校有害生物综合管理指南
- 2025年度跨境电商贷款担保合同
- 二零二五年度餐饮管理辅导合同
- 二零二五年度柜台品牌授权与推广合同
- 茶楼茶艺师劳动合同2025年度与劳动合同签订流程
- 二零二五年度影视演员网络直播聘用协议
- 二零二五年度个体店面转让与市场准入条件协议
- 采血护士培训课件
- XX省南通市海门中学2024届高三第二次调研考试化学试题附参考答案(解析)
- 140m集装箱船船体说明书
- 浙江省杭州市2023年中考数学试卷
- 高等教育学课件-
- 送达地址确认书
- 朱熹《春日》教学课件
- 机动车检测站管理制度
- 大班语言《你是蚂蚁小可》
- 荧光增白剂介绍
- 汽车试验概论-课件
评论
0/150
提交评论