Verilog中关系运算符有>, 大于;>= ,大于等于;< ,小于;<=,小于等于。还有四个等式运算符==,!=,===,!==也可并入关系运算符。但由于他们有些特殊性,特别是===及!==对X,Z的比较运算结果,有独特的规则,而且运算优先级也不同,因此我们把等式运算符分开讨论。
由关系运算符组成的表达式,其结果是二值0,1;或TRUE ,FALSE;该值可以在赋值语句中赋给其它变量,也可以用在判断语句中,如 if语句, case语句, 选择语句中 “?”。还可以利用逻辑运算符将不同的运算结果组成更复杂的表达式。
例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
module test ( input [3:0] a, input [3:0] b, output [3:0] c, output [3:0] d, output e, f, g ); assign c = a > b; assign d = a <= b; assign e = a > b; assign f = a <= b; assign g = a < b; endmodule |
Testbench 程序如下:
|
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 33 34 35 36 37 38 39 40 |
`timescale 10ns/1ns module tb ( ); reg [3:0] ta, tb; wire [3:0] tc, td; wire te, tf, tg; initial begin #10 ta = 4'b1101; tb = 4'b0101; #20 ta = 4'b0000; tb = 4'b1000; #20 ta = 4'b1111; tb = 4'b1111; end test test_inst ( .a (ta), .b (tb), .c (tc), .d (td), .e (te), .f (tf), .g (tg) ); endmodule |
Modelsim的仿真结果如图1,

图1
从modelsim的仿真波形可以看出,两个向量(vector)型变量如a[3:0],b[3:0]比较时,其结果是1bit的逻辑值0,1或true ,false二值逻辑,虽然可以赋值给向量型变量或端口,只是利用位扩展的方式实现的,如上例中c,d在比较结果为真时,只有最低位为1,其它位都为零,如图1中tc==4’b0000或4‘b0001。
如果在关系运算符中包含有Z,X值,结果会如何?
在关系运算中,无论1,0,Z,X任何值,在与 值Z或X运算时,其结果皆为X。
例:设a,b两个wire型变量,y = a > b结果如下:
表1:
| 关系运算符 “>” y = a > b; | ||
| a | b | y |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
表2
| 关系运算符 “>” y = a > b; | ||
| a | b | y |
| 1 | Z/X | X |
| 1 | Z/X | X |
| 1 | Z/X | X |
| 1 | Z/X | X |
表3
| 关系运算符 “>” y = a > b; | ||
| a | b | y |
| 0 | Z/X | X |
| 0 | Z/X | X |
| 0 | Z/X | X |
| 0 | Z/X | X |
其它>=,<,<=的比较结果与上面的> 在有Z或X参与运算时一样,其结果都是X;
在向量的关系运算中,只要比较的两个变量中有一个含有X或Z,其结果都为X;
例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
module test ( input [3:0] a, input [3:0] b, output [3:0] c, output [3:0] d, output e, f, g, output h ); assign c = a > b; assign d = a <= b; assign e = a > b; assign f = a <= b; assign g = a > b; assign h = a[0] > b[0]; endmodule |
Testbench
|
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
`timescale 10ns/1ns module tb ( ); reg [3:0] ta, tb; wire [3:0] tc, td; wire te, tf, tg; wire th; initial begin #10 ta = 4'b1101; tb = 4'b0101; #20 ta = 4'b0000; tb = 4'b1001; #20 ta = 4'b1111; tb = 4'b1111; #20 tb = 4'b1110; #20 tb = 4'b111x; #20 tb = 4'b111z; #20 ta = 4'b1110; #20 tb = 4'b111x; end test test_inst ( .a (ta), .b (tb), .c (tc), .d (td), .e (te), .f (tf), .g (tg), .h (th) ); endmodule |
Modelsim 的仿真结果如图2:

图2
从上面的波形可以证实上面的分析结果。
对应视频: