当前位置: 首页 > news >正文

Verilog中X态的危险:仿真漏掉的bug

 

由于Verilog中X态的微妙语义,RTL仿真可能PASS,而网表仿真却会fail。

目前进行的网表仿真越来越少,这个问题尤其严重,主要是网表仿真比RTL仿真慢得多,因此对整个回归测试而言成本效益不高。

上面的例子中,用Verilog RTL中的case语句描述了一个简单的AND函数,它被综合成AND2门。然而,波形图显示RTL仿真与网表仿真存在差异。

当w1信号上出现任何X值时(可能来自显式的X赋值或未初始化的寄存器),仿真差异就会发生。w1上的X值意味着w1无法匹配任何一个case项。由于没有default行,输出o1必须保持其之前的值,这意味着在上面的波形中o1会保持高电平锁存状态。

最有趣的差异出现在w1==2'b0X时:

  • 网表仿真正确地显示o1为低电平

  • RTL仿真错误地保持o1为高电平(相反的值)

无论w1上的X值如何优化,每个网表都会表现得像这样。综合工具不会警告这个“锁存行为”,但当RTL验证仅因为这种X态解释而通过某些测试用例时,RTL和网表仿真之间的差异就变得危险了。

RTL仿真中乐观的X态语义

Verilog RTL中常见的问题是if语句周围的X- optimistic。考虑下面的例子:

always @(i1 or i2)
case({i1, i2})
2'b00,2'b01: o1 =1'bX;// 无关项X赋值
2'b10: o1 =1'b0;
2'b11: o1 =1'b1;
default: o1 =1'bX;// X传播
endcase
always @(i2 or o1)
if(o1) o2 =1'b0;
else o2 = i2;

在这个例子中,输出o1上的X只会选择else分支,后续暴露i2被赋值给o2时的问题。如果综合后X态无关项被最小化为1'b1——如果你运行网表仿真,可能会使先前通过的测试用例fail!

关于Verilog X态的40个面试题

 

相关文章:

  • 网站制作公司多少钱一年/东莞网站设计公司
  • 网站做担保交易 是否资质/八百客crm登录入口
  • 前端角度实现网站首页加载慢优化/推广普通话的手抄报
  • 【初阶数据结构】栈
  • 七年级角的概念
  • NNI 适配 TensorRT10教程
  • 人工智能之数学基础:幂法和反幂法求特征值和特征向量
  • Linux练习——有关硬盘、联网、软件包的管理
  • java项目之基于ssm的医院门诊挂号系统(源码+文档)
  • 001 使用单片机实现的逻辑分析仪——吸收篇
  • sort命令:排序
  • JS判断变量是否为空的方法
  • Maven 构建配置文件详解
  • Java高频面试之集合-20
  • 【区块链安全 | 第十二篇】安装 Solidity 编译器(npm | docker | Linux | macOS)
  • Qwen最新多模态大模型:Qwen2.5-Omni介绍与快速入门
  • 2025年渗透测试面试题总结- 某蚂蚁-安全工程师-实习(题目+回答)
  • 华为OD机试 - 王者荣耀匹配机制 - 回溯(Java 2024 D卷 200分)
  • arco design框架中的树形表格使用中的缓存问题
  • golang接口-interface
  • TCP 协议深度解析
  • Java基础 3.30
  • 小智机器人关键函数解析,Application::InputAudio()处理麦克风音频数据输入的函数