Verilog中二等号==和三等号===的用法总结

本文详细解析Verilog HDL中的四种等式运算符:逻辑等式(==和!=)、case等式(===和!==),并提供真值表和实际案例,讨论它们在条件判断中的使用及陷阱。

在Verilog HDL语言中,存在着4中等式运算符:

  1. == 等于
  2. != 不等于
  3. === 等于
  4. != 不等于
注意:求反号,双等号,三等号之间不能有空格。
这四个运算符都是双目运算符,它要求有两个操作数。
==和!=又称为逻辑等式运算符,其结果有两个操作数的值决定。由于操作数中某些为可能是不定值x和高阻值z。
而===和!==运算符则不同,它在对操作数进行比较时,对某些位的不定值x和高阻值z也进行比较,两个操作数必须完全一致,其结果才是1,否则为0。
===和!==运算符常用于case表达式判别,所以又称为case等式运算符。
这四个等式运算符的优先级相同。

双等号等式运算符的真值表

==01xz
010xx
101xx
xxxxx
zxxxx
双等号:等式两边有x或z,结果就为x。

三等号等式运算符

===01xz
01000
10100
x0010
z0001
三等号:完全相等结果才为1,否则结果为0。
  1. bresp或rresp为可能为x;
  2. 条件判断中结果为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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值