信息设计网站,宁波制作网站公司,自助网站建设工具,注销公司需要什么资料和流程#x1f525;点击查看精选 IC 技能树系列文章#x1f525; #x1f525;点击进入【芯片设计验证】社区#xff0c;查看更多精彩内容#x1f525; #x1f4e2; 声明#xff1a; #x1f96d; 作者主页#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN#… 点击查看精选 IC 技能树系列文章 点击进入【芯片设计验证】社区查看更多精彩内容 声明 作者主页【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129996971】。⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果本人不承担相关法律责任。⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益请联系我进行删除。 欢迎大家指出文章错误欢迎同行与我交流 ~ 邮箱mangopapayeah.net 直达博主loveic_lovelife 。搜索或点击扫码 文章目录 前言1. X 态是什么2. X 态是由什么引起的3. X 态有什么危害4. 如何避免 X 态的产生4.1 if-else/case Vs. assign 5. 两种 X 态模型X-optimism 和 X-pessimism6. 如何检测 X 态传播6.1 Merge Mode 介绍6.2 xprop 命令使用注意事项 6.3 xprop 报告查看 7. 什么阶段进行 xprop 检测8. 如何用 Verdi Trace XTrace 到什么地方停止8.1 Verdi GUI 内 Trace8.1.1 手动 Trace X8.1.2 自动 Trace X 8.2 Verdi 的 traceX 工具 9. X 态怎么处理10. 其他注意事项11. 参考 前言 简单记录下数字 IC 中的 X 态 (不定态) 相关问题包括 X 态的概念、出现原因、对待 X 态的观念、vcs xprop 仿真、Debug 等等。以下讨论涉及的设计代码仅限 Verilog 及 SV不针对 VHDL 进行讨论。 1. X 态是什么 Verilog 和 SV 定义了四种逻辑状态01Z 及 X
0 为低电平1 为高电平Z 为高阻态可以理解为电路上的引脚悬空X 为不定态、亚稳态可能为 0 可能为 1 也可能为 Z常见于未复位的寄存器、锁存器或 Memory。 其中X 只有在仿真时存在真实电路中不存在。若仿真过程中出现了 X 态表明该处存在潜在的设计风险其有可能会掩盖 RTL Bug。 2. X 态是由什么引起的 RTL 仿真、门仿真及低功耗仿真中均有可能出现 X 态。X 态出现的原因大致总结如下
未初始化。未初始化的四态变量比如 logic、wire、reg、integer、time 变量未初始化的寄存器、锁存器在被复位或有确定的值被锁定之前保持 X 态。输入信号未连接。外部输入信号未设置初值尤其 DFT 信号时为 ZZ 在模块内部经过数字逻辑后变 X 态。信号多驱或总线争用。SV 中允许将多个输入驱动到同一 net 类型上多多个驱动存在冲突时net 即表现为 X 态。操作结果不定导致的 X 态。位选择或数组索引超范围返回 X 态。逻辑门输出的 X 态。SV 自带原语或用户自定义原语 (UDP) 支持四态操作当这些逻辑门输入为 X 或 Z 时输出 X。后仿 setup 或 hold time 不满足存在 timing violation使用 notifier 将输出变为 X 态。若只看 timing violation 不输出 X则添加 vcs 编译选项 no_notifier。主动引入的 X 态。设计人为引入的 X 态比如在 case 分支中对于 don’t care 的默认状态中赋值为 X 态验证平台引入的 X 态比如存在四态变量 wire a assign a ‘bx。寄存器或锁存器掉电后上电。在低功耗仿真中若无特别设置即便在 0 时刻对寄存器或锁存器进行了初始化当其所在的 Power Domain 掉电后重新上电其仍然为 X 态未初始化状态需要在 upf 中设置 reinit。 若 RTL 仿真没问题但门仿出现 X 态可能为以下原因
信号的输入输出方向声明错误控制信号出现 X 态 3. X 态有什么危害 所谓 X 态传播是指 X 态作为触发/控制条件或逻辑输入时引起其他逻辑输出为 X 态。不同情况下 X 态危害情况不同
若 X 态仅仅是存在完全不传播其没什么危害若 X 态出现传播且电路中针对该 X 态传播做了保护这种有限的 X 态传播也没有危害若 X 态出现传播但电路中针没有针对该 X 态传播进行保护那么该 X 态传播可能会影响到芯片的正常工作。 4. 如何避免 X 态的产生 确保引起 X 态的条件不成立即可避免 X 态产生简单列几条
使用二态变量。设计上进行复位操作控制通路寄存器必选带复位数据通路寄存器可以不带复位。验证 TB 中接口输入信号赋初值。仿真时利用 initreg 及 initmem 选项对 reg 和 Memory 进行初始化。RTL model 中添加针对 X 的 assertion以及时发现 X 态并消除。if-else 及 case 中使用确定写法或使用 assign表达式代替if-else及 case。 4.1 if-else/case Vs. assign RTL 仿真中if-else/case 及 assign 对 X 态有不同的行为如下
if(x) 会默认 x0走 else 分支不传播 X 态。case(x)若存在 default 分支则走 default 分支否则不会匹配到任何分支。assign c sel ? a : b; selx输出 X从而将 X 态传播出去。 也就是说if-else 和 case 不能传递 X 态无法暴露 X 态传播问题这就导致无法在仿真时去发现 X 态相关的 Bug。相比之下assign 条件表达式的方式能够传递 X 态。此外if-else/case 为带有优先级的选择电路不利于时序和面积建议使用 assign 代替 if-else 和 case。 有人有疑问if-else/case 不传播 X 态assign 传播 X 态为什么还要用 assign?——我们不希望出现 X 态但我们更不希望由于 RTL 写法原因而掩盖 X 态。使用 assign能够及时暴露 X 态问题从而避免 X 态被掩盖所导致的问题。 5. 两种 X 态模型X-optimism 和 X-pessimism 在对待 X 态问题上有两种模型
X-optimism乐观派其认为 X 态不会被传播。若检测到逻辑输出为 X 态将 X 转换为 0 或 1。X-pessimism悲观派其认为 X 态会一直被传播下去。若检测到逻辑输入存在 X即便输出结果是确定的也要输出 X从而将 X 态传播出去。 在仿真阶段RTL 仿真对 X 态过于乐观RTL 仿真时往往忽略 X 态并赋一个确定的值从而无法检测到 X 态传播所引发的问题门仿更接近硬件行为会暴露出 X 传播问题。 6. 如何检测 X 态传播 从设计角度我们希望电路的逻辑输出都是确定的以避免非预期的功能缺陷。从验证角度我们不喜欢 X 态但我们希望能够发现并评估电路中所有可能存在的 X 态尤其是能够传播的 X 态。 前文提到RTL 仿真往往对 X 态过于乐观在门仿阶段才会暴露出 X 态传播问题。相较于 RTL 仿真门仿的 netlist 易读性差、仿真速度慢且难以 Debug。鉴于此vcs 提供了一种 Shift-Left 方案通过在编译仿真选项中添加 -xprop 相关选项即可在 RTL 仿真阶段对 X 传播进行检查。 6.1 Merge Mode 介绍 vcs xprop 检查有 3 种模式按照从乐观到悲观的顺序分别为vmerge - tmerge - xmerge。其中
vmerge mode对待 X 态最为乐观遵守 Verilog 或 VHDL 规定的 X 态处理规则不存在 X 态传播问题。tmerge mode处于乐观与悲观之间接近实际硬件行为或门仿X 态传播一段路径后终结。xmerge mode对待 X 态最为悲观比门仿还悲观X 态会一直传播下去。 不同 Merge Mode 时的 X 态传播情况如下表所示
逻辑代码逻辑输出真值表if-elsealways* if(s) r a; else r b;casecase (s) 1’b0: r a; 1’b1: r b;endcaseedge sensitivealways(posedge clk, negedge rst) if (! rst) q 1’b0; else q d;latchalways(*) if(g) q d; 说到底-xproptmerge/vmerge 是为了扩散 X 态传播把不传播不定态的情形强制传播出去从而尽早暴露 bug。 6.2 xprop 命令使用 一般来讲可以在编译或仿真任一阶段指定 -xprop 选项即可开启 xprop 检测。-xprop 示例用法如下
vcs ‑xprop[tmerge|xmerge|xprop_config_file]。其中xprop_config_file 用以针对特定 instance 进行特定模式的 xprop 监测或开关特定 instance 的 xprop 检测其示例用法如下
tree {top}
instance {top.A} {xpropOn};
instance {top.B} {xpropOff};
module {C} {xpropOff};
merge tmerge;使能 xprop 后发现的 X 态不一定都是 Bug或者设计已经针对 xprop 做了保护。这种情况下可以采用 -xpropxprop_config_file 对不同模块施以不同的 xprop mode。 注意事项
-xprop 一般不能跟 vcsinitreg0/1/random 同时使用因为 vcsinitreg0/1/random 会把 Verilog 的变量、寄存器及 Memory 初始值设置为 0 或 1 等非 X 状态这样就测不到初始 X 态了。若未指定 -xprop默认为 vmerge即默认不存在 X 态传播问题也不进行检查。若定义了 -xprop 但未指定具体模式默认为 tmerge即采用接近真实电路的 X 态传播模式并进行检查。 6.3 xprop 报告查看 vcs 在编译、仿真两个阶段均提供了相关手段来检查相关 instance 的 xprop 开关情况
若在编译阶段使能了 xprop编译完成之后会生成一个 xprop.log 来报告 if/case 状态、always 边沿触发等条件的 xprop 检查开关情况。simv 仿真阶段添加仿真选项 -reportxprop[exit] 能生成 xprop_config.report便于在仿真后对 xprop 检查情况进行确认。若采用 -reportxpropexit在检测完 xprop 状态情况后后立即终止仿真。 7. 什么阶段进行 xprop 检测 X 态传播不能不做但也不宜早做。一方面在验证初期调 datapath 或 sanity 期间我们并不想看到太多 X 态传播我们希望对待 X 态传播更乐观一点另一方面带有 xprop 的仿真为 4 态仿真毫无疑问4 态仿真比不带 xprop 的 2 态仿真更慢。 那么应该在什么阶段开启 xprop 检测呢以下是推荐的方案
RTL 仿真前期不开启 xprop以尽快调通 sanity/smoke case 及主要 datapath。RTL 仿真后期建议开启 xprop提前排除部分 X 态。 网表中没有 always 块xprop 对门仿不起作用。门仿的一大作用就是排除 X 态传播导致的芯片功能问题尤其是控制通路上的 X 态传播。 8. 如何用 Verdi Trace XTrace 到什么地方停止 我们说的 Trace X 是指追踪 X 态产生的源头。利用 Verdi 能够自动追踪组合逻辑、锁存器、触发器等的 X 态传播的源头。Verdi Trace X 有两种途径一种是在 Verdi GUI 内 Trace一种是直接利用 Verdi 的 traceX 工具直接 Trace。 8.1 Verdi GUI 内 Trace 若 X 态出现传播通常能在波形里找到很多 X 态信号。多个 X 态的源头此时我们可以选择其中一个信号进行跟踪。 假设在波形中已经发现了 X 态该如何 Trace X 呢两种常用方式 8.1.1 手动 Trace X
把出现 X 态的信号 A 拖到 nWave 窗口nWave 窗口 Cursor 点在 X 态信号 0/1 - X 跳变沿的地方在源代码窗口左键双击该信号 A追踪其 Driver检查 A 的 Driver (控制信号、触发条件、逻辑输入等) 是否存在 X 态重复以上步骤直到找到 X 态产生的源头 8.1.2 自动 Trace X
把出现 X 态信号 A 拖到 nWave 窗口nWave 窗口Cursor 点在 X 态信号 0/1 - X 跳变沿的地方nWave 窗口右键单击该信号的波形或源代码窗口右键单击该信号选择 Trace X弹出 Trace X Settings 窗口窗口勾选所需的 Trace X 相关设置。默认 View Options 为 Flow View此处我们也可以改为 nWave View左键单击 Trace开始 Trace XTrace 结果一方面显示在 Flow/nWave 窗口内一方面显示在 tTraceXRst 窗口内Note 提示 X 的大致出现原因 8.2 Verdi 的 traceX 工具 除了在 GUI 内进行 X 态追踪Verdi 还提供了 traceX 工具来追踪 X 态。traceX 用法如下
设置变量打开 traceX 工具setenv VERDI_TRACEX_ENABLE采用以下命令追踪 X 态 未提供 X 态信号列表traceX -lca -ssf xxx.fsdb提供了 X 态信号列表traceX -lca -ssf xxx.fsdb -signal_file signal.list若需要手段加载 database还需要添加选项 -dbdir simv.daidir 查看 trx_report.txt 查看 Trace 结果 9. X 态怎么处理 如果 X 态没有传播无需处理。如果 X 态发生传播但后续有 X 态保护电路无需处理。如果 X 态发生传播且后续没有 X 态保护电路需要从根源上消除 X 态。 10. 其他注意事项
assertion 中应规避 X - 0/1 形成的跳变沿 11. 参考
I’m Still In Love with My XX-Propagation : An Alternative to Gate Level SimulationXprop User Guide关于X-Propagation问题 – Wenhui’s Rotten Pen门级仿真中的X传播现象 - 知乎 (zhihu.com)X态详解与X态传播VCS X-Propagationvcs xprop 仿真的一些理解SystemVerilog and Verilog X OptimismSystemVerilog and Verilog X Optimism – What About X Pessimism?Hardware-like X Propagation with Xprop - Verilog Pro再见xpropVerilog RTL优化策略一推荐使用assign语法替代if-else和case语法提高与 X 态相关的仿真和调试的效率学习一下simulation 仿真中的x态仿真Catching X-propagation related issues at RTL 在Assertion中规避信号从X态到0形成的negedge — END — 精选往期 IC 技能树相关博文请查看【 数字 IC 技能树】专栏 ⬆️ 返回顶部 ⬆️