• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

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

  1. == 等于
  2. != 不等于
  3. === 等于
  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。
  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()

posted on 2022-05-15 21:39  SOC验证工程师  阅读(1377)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3