Verilog 运算符比常规的软件编程语言的运算符要复杂的多,也比较难以掌握,不仅涉及到广泛的位操作,还涉及到多值的运算结果。如在Verilog中不仅有数据运算,还涉及到X,Z的与0,1 等的运算结果。本节内容将尽量详细介绍这些运算符的运算规则,并以各种实例展示运算过程和结果,希望帮助大家理解。
Verilog 运算符的分类:
1.按照操作数的多寡分类,可以分为:
单目与多目运算符,具体按照运算符操作数的多少可以将运算符分为三种:
(1)单目运算符(unary operator):
可以带一个操作数,操作数放在运算符的右边。操作数可以为变量,表达式或数值。
单目运算符有: ~ ! + –
~是取反运算符(对向量按位取反)。
!取非运算符,对变量整体评估,
如 wire [3:0] a=4’b1010; ~a的值为4’b0101;
而!a的值为0,或1’b0。对于!a可以这样理解:判断a的是否为零,如果为零,则!a的值为1, 或1’b1; 否则为0,或1’b0。
例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
`timescale 10ns/1ns module tb ( ); reg [3:0] ta, tb; wire [3:0] tc, td; initial begin #100 ta = 4'b0101; tb = 4'b0101; #20 ta = 4'b0000; tb = 4'b0000; #20 ta = 4'b1111; tb = 4'b1111; end test test_inst ( .a (ta), .b (tb), .c (tc), .d (td) ); endmodule |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
module test ( input [3:0] a, input [3:0] b, output [3:0] c, output [3:0] d ); assign c = ~a; assign d = !b; endmodule |
仿真结果如图1,

图1
单目运算符在单个bit变量求值时,运算结果位宽仍然是一位。在对向量求值时,~按位取反,得到与原变量同等位宽的值,而!是对整个向量评估,如果向量为0,则结果为1’b1;如果原变量不为零,则结果为1’b0;
+,-在这里表示符号运算,+表示正数,-表示负数。一般放在十进制数的前面。
还有4个运算符既可以作为单目运算符使用,也可以作为双目运算符使用。作为单目运算符使用时,意义如下:
& 按位与,| 按位或, ^ 按位异或,^~ 按位同或(异或非)
&a[3:0] , 等同于a[0] & a[1] & a[2] & a[3]; 逐位相与求结果,结果位宽为1.
|a[3:0], 等同于a[0] | a[1] | a[2] | a[3]; 逐位相或求结果,结果位宽为1.
^a[3:0], 等同于a[0] ^ a[1] ^ a[2] ^ a[3]; 逐位异或求结果,结果位宽为1.
^~a[3:0], 等同于a[0]^~a[1]^~a[2]^~ a[3];逐位同或(异或非)求结果,结果位宽为1.
(2) 二目运算符(binary operator):
二目运算符有:&& ,|| ,+,–,* ,/,% ,&,|,==,>=, >, <=, <等,其中&&为逻辑与,|| 为逻辑或,
(3) 三目运算符(ternary operator):
r = s ? t : u;
单目或多目运算符的使用见下例:
clock = ~clock; // ~是一个单目取反运算符, clock是操作数。
c = a | b; // 是一个二目按位或运算符, a 和 b是操作数。
r = s ? t : u; // ? : 是一个三目条件运算符, s,t,u是操作数。
2. 按照功能分类,可以分类如下:
a.按位运算符(bitwise operator)
& | ~ 按位 与、或及取反运算符
b.逻辑运算符(logic operator)
&& || ! 逻辑 与 、或、非
c.关系运算符(relation operator)
> >= < <= 大于,大于等于,小于,小于等于
d.等式运算符 (Equality operator)
== != === !== 等于,不等,全等,非全等
e.移位运算符 (shift operator)
<< >> 左移,右移, <<<,>>>带符号操作数的左右移
f.并位运算符 (concatenation operator)
g. 选择运算符 (selection operator)
?选择运算符
h. 符号运算符 (sign operator)
+(正),-(负)
i.算数运算符(arithmetic operator)
+(加),-(减) ,*(乘),/(除),%(求余),**(指数或求幂)
j. 规约运算符
&,| ,^ 也称缩减运算符
例如: &a[3:0] 等效为 a[3]&a[2]&a[1]&a[0];
后面将按照章节分别介绍各个运算符的使用。
对应视频: