Verilog中的二等号==和三等号===的用法总结
在Verilog HDL语言中,存在着4中等式运算符:
- == 等于
- != 不等于
- === 等于
- != 不等于
注意:求反号,双等号,三等号之间不能有空格。
这四个运算符都是双目运算符,它要求有两个操作数。
==和!=又称为逻辑等式运算符,其结果有两个操作数的值决定。由于操作数中某些为可能是不定值x和高阻值z。
而===和!==运算符则不同,它在对操作数进行比较时,对某些位的不定值x和高阻值z也进行比较,两个操作数必须完全一致,其结果才是1,否则为0。
===和!==运算符常用于case表达式判别,所以又称为case等式运算符。
这四个等式运算符的优先级相同。
双等号等式运算符的真值表
| == | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | 0 | x | x |
| 1 | 0 | 1 | x | x |
| x | x | x | x | x |
| z | x | x | x | x |
| 双等号:等式两边有x或z,结果就为x。 |
三等号等式运算符
| === | 0 | 1 | x | z |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| x | 0 | 0 | 1 | 0 |
| z | 0 | 0 | 0 | 1 |
| 三等号:完全相等结果才为1,否则结果为0。 |
- bresp或rresp为可能为x;
- 条件判断中结果为x,会被转换为0;
以下条件中bresp为x时,判断条件并不完整:
if((bresp==2'b10)||(bresp==2'b11)) //当bresp为2'bxx时,不会报错,bug
`uvm_fatal()
else
`uvm_info()
if((bresp===2'b10)||(bresp===2'b11)) //当bresp为2'bxx时,不会报错,bug
`uvm_fatal()
else
`uvm_info()
正确的判定条件如下(不考虑bresp为x0/x1/0x/1x的情况):
if((bresp===2'b10)||(bresp===2'b11)||(bresp===2'bxx)) //当bresp为2或3时,报错
`uvm_fatal()
else
`uvm_info()
浙公网安备 33010602011771号