0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RTL仿真中X态行为的传播—从xprop说起

冬至子 来源:芯时代青年 作者:尼德兰的喵 2023-12-04 16:20 次阅读

在使用VCS进行仿真时,工程师们常常会面对一个极为重要且充满挑战的问题——X态传播行为。X态信号代表了未知或不确定的逻辑值(或者高阻Z态),可能会在设计中引入意想不到的问题,因此如何处理X态成为了芯片设计与仿真中的一个关键议题。

VCS提供了仿真选项-xprop=vmerge/tmerge/xmerge来处理和扩散X态传播问题。本文将深入探讨仿真中的X态传播行为,着重于不同仿真选项对X态传播的影响,以及应对X态隐匿和扩散的一些方法。

对于-xprop,官方给出的解释是:

Verilog和VHDL常用于数字设计建模。设计人员使用RTL构造描述硬件行为。然而,某些RTL仿真语义不足以准确地为硬件行为建模。因此,相比实际硬件行为,仿真结果要么太过乐观,要么太过悲观。

因为这些语义限制,Verilog和VHDL仿真器会忽略掉控制信号上的X不定态,在输出上会分配一个固定的数值。这样造成的结果就是,由于缺少X的传播,RTL仿真器往往无法检测到和X态相关的设计问题。然而,同样的设计问题可以在门级仿真中检测出来,因此许多时候必须运行大量的门级仿真,只是为了调试X相关问题。现在VCS在RTL阶段提供了的全新X传播(X-propagation)支持,使用该技术,工程师可以节省大量用于调试RTL和门级仿真的X建模的差异上的时间和精力。

进一步查询可以明确,不加入-xprop选项时默认的仿真行为是vmerge。从X态传播的严重程度来看,xmerge>tmerge>vmerge,三个选项可以等价理解为悲观预期>合理预期>乐观预期。那么到底是需要X态传播严重些呢还是乐观些呢?单纯从验证的角度,通常我们是希望X态尽可能的传播以便发现更多的隐藏问题;但是如果过于悲观的行为预期又会和实际电路行为有所出入。因此根据个人的经验,数据和运算通路的模块应该能够通过xmege测试,而控制通路的模块至少通过tmerge测试。

好了言归正传,我们来探究下不同-xprop选项对仿真结果的影响,主要对三种常用语句继续探究:assign/case/if-else,那么先上个省流版:

1.jpg

好了接下来咱们来展开聊聊,就从assign说起吧。

assign

assign是对xprop选项最不敏感的语法,无论是在哪种xprop配置反应都是一样的(如有遗漏请不吝赐教)。对于逻辑运算,assign遵循合理X态规则: 如果能确定数值,则传播确定值,否则传播X态 。具体的规则如下:

x & 1 = x
x | 1 = 1
x & 0 = 0
x | 0 = x
x ^ 0 = x
x ^ 1 = x

参考如下代码和波形:

//test0
logic t0_sel0, sel1;
initial begin
    t0_sel0 = 1'b0;
    `DELAY(20, clk);
    t0_sel0 = 1'bx;
end


wire t0_xend0 = t0_sel0 & 1'b1;
wire t0_xend1 = t0_sel0 | 1'b1;
wire t0_xend2 = t0_sel0 & 1'b0;
wire t0_xend3 = t0_sel0 | 1'b0;
wire t0_xend4 = t0_sel0 ^ 1'b1;
wire t0_xend5 = t0_sel0 ^ 1'b0;

-xprop=vmerge/tmerge/xmerge波形均一致:

图片

但是呢,有一个assign语法不太合理(仅仅从RTL角度而不是仿真角度),会呈现X态:

wire t0_xend6 = (t0_sel0 == t0_sel0)

而对于===则会反馈为1,这个也算是很”著名“的==和===的区别,感兴趣的可以自行查阅:

图片

assign对于选择逻辑,配置为vmerge和tmerge遵循的规则仍然是 如果能确定数值,则传播确定值,否则传播X态 ,比如下面这个代码:

wire t2_en2 = t0_sel0 ? t2_data0 : t2_data1;

vmerge和tmerge的波形如下:

图片

而xmerge的波形如下:

图片

不过需要注意的是在xmerge配置下,如果X态出现在数据内那就不无脑X而是合理X了:

wire t2_en3 = t2_data0 ? t0_sel0 : t2_data1;

图片

好的关于assign的X态传播行为就说这么多吧。

case

对于case语句当判断语句中出现X态时,会是什么行为呢?来看下面这段代码:

always @* begin
    case(t0_sel0) 
        0 : t2_en1 = t2_data0;
        1 : t2_en1 = t2_data1;
        default: t2_en1 = t2_data0;
    endcase
end

vmerge仿真结果:

图片

tmerge仿真结果:

图片

xmerge仿真结果:

图片

区别很明显了,那我们总结一下规律,case(sel)选择a or b:

1.jpg

通过表来看,个人认为tmerge是最为合理的策略。而对于X态在数据中的情况,无论什么配置case都是如实的将X态传播出来,比如这个代码:

always @* begin
    if(t2_data0)begin
        t2_en4 = t0_sel0;
    end
    else begin
        t2_en4 = t2_data1;
    end
end

哪怕xmerge的仿真结果也是这样的:

图片

所以大家也看出来了,X态传播中我们真正需要担心的是条件中的X态,数据里的X态一般都能如实的反馈出来。

if-else

直接上代码:

always @* begin
    if(t0_sel0)begin
        t2_en0 = t2_data0;
    end
    else begin
        t2_en0 = t2_data1;
    end
end

vmerge仿真结果:

图片

tmerge仿真结果:

图片

xmerge仿真结果:

图片

虽然vmerge下都没有传播X态,但是显然行为和case时候又不一样了。那么总结一下if(sel) a else b的选择语句结果:

1.jpg

可以发现sel有X态时if-else语句中vmerge选择的是else分支,而case是选择"不变"策略;tmerge和xmerge的结果则是和case语句相同的。

当然了对于X态在数据内,无论什么配置if-else语句也是如实的将X态反馈出来:

always @* begin
    if(t2_data0)begin
        t2_en5 = t0_sel0;
    end
    else begin
        t2_en5 = t2_data1;
    end
end

图片

好的,做了这么多实验,最后还是汇总刚刚的那张表,对于条件有X态的场景,三种语法的规则如下:

1.jpg

对于数据有X态的场景,三种语法均会如实合理的传播X态。本篇内容至此,下次来讨论下如何快速高效的反馈和定位X态传播问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    1017

    浏览量

    83720
  • VHDL语言
    +关注

    关注

    1

    文章

    113

    浏览量

    18001
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59759
  • VCS
    VCS
    +关注

    关注

    0

    文章

    79

    浏览量

    9600
收藏 人收藏

    评论

    相关推荐

    基于树莓派5的RTL仿真体验

    《基于树莓派5的RTL仿真体验》 对于FPGA或者RTL爱好者来讲,树莓派5开发板可以运行RTL仿真仿
    发表于 04-30 17:35

    LM2903B仿真中,为什么运放Vcc电压为0的时候,同相输入端的电压的电压是负值?

    请问一下,下面的仿真中,为什么运放的Vcc电压为0的时候,同相输入端的电压的电压是负值? 并且在仿真中,LM2903B的供电电压没有时,比较器的输出是呈现高阻还是低阻?实际当中,
    发表于 07-30 08:22

    时序仿真中怎么查看内部信号的变化

    quartus中调用modelsim进行gate level仿真,但是在sim窗口中的信号变得很怪,不能像rtl仿真中一样往wave窗口中加信号
    发表于 08-27 16:14

    RTL仿真与门级仿真

    调用了modelsim进行门级仿真,发现有毛刺,后来才知道有RTL仿真,运行后波形很好。想问下如何消除门级仿真中出现的毛刺?通过时序约束可以吗?上图为
    发表于 08-08 22:57

    新手求助UPF低功耗设计能否在RTL仿真中实现呢?

    RTL设计完毕之后,如何来验证设计的正确性?UPF低功耗设计能否在RTL仿真中实现呢?
    发表于 06-18 08:21

    关于modelsim后仿真锁存器出现不定的问题

    未在延时链上传递时,锁存结果是确定的。但是信号在演示链上传播时,锁存结果却出现了不定。有的时候写其他的程序时,用D触发器锁存组合逻辑的结果,在时序仿真中就会有不定,这该怎么解决?
    发表于 09-26 20:41

    FRED在背光板仿真中的应用

    FRED在背光板仿真中的应用
    发表于 12-22 16:02 34次下载
    FRED在背光板<b class='flag-5'>仿真中</b>的应用

    PSpice教程:PSpice仿真中收敛问题的研究

    PSpice教程:PSpice仿真中收敛问题的研究
    发表于 04-07 15:33 0次下载

    三菱PLC模拟仿真中文软件

    三菱PLC模拟仿真中文软件。
    发表于 01-14 16:46 61次下载

    X如何通过RTL级和门级仿真模型中的逻辑进行传播呢?

    在Verilog中,IC设计工程师使用RTL构造和描述硬件行为。但是RTL代码中的一些语义,并不能够准确地为硬件行为建模。
    的头像 发表于 04-20 09:12 2028次阅读

    IC设计:接口X隔离设计

    虽然真实芯片中,寄存器初始状态值只会为1或者为0。但是在RTL仿真过程中X传播经常会给咱们造成很多麻烦,例如部分信号期望为0,但是
    发表于 09-20 10:47 690次阅读
    IC设计:接口<b class='flag-5'>X</b><b class='flag-5'>态</b>隔离设计

    借助GPT4理解仿真中竞争处理的方法

    上周微信群里的一个小伙伴提到的一个关于仿真中不达预期的一个问题,其中牵涉到关于仿真中信号竞争等问题。这个问题之前算是不求甚解。
    的头像 发表于 11-25 14:23 589次阅读
    借助GPT4理解<b class='flag-5'>仿真中</b>竞争处理的方法

    X传播在低功耗验证中的作用

    随着科技的发展和智能化设备的普及,我们对于高效能、低功耗的半导体设备需求愈加强烈,对低功耗仿真的需求成指数级增长。X传播分析是低功耗仿真
    的头像 发表于 01-24 09:34 732次阅读
    <b class='flag-5'>X</b><b class='flag-5'>态</b><b class='flag-5'>传播</b>在低功耗验证中的作用

    MATLAB电路仿真中能讲电流汇总的元件

    在MATLAB电路仿真中,可以使用许多元件来汇总电流。以下是一些常见的元件和它们在电路中的作用: 电阻(Resistor):电阻是电路中最基本的元件之一,用于限制电流的流动。在MATLAB电路仿真中
    的头像 发表于 04-21 09:23 3164次阅读

    为什么调试X值那么困难?

    能够预示设计或验证环境逻辑仿真中逻辑信号的不确定性。让事情变得更加复杂的是,在RTL和Gate仿真中X的不确定性是各有不同。默认情况下,RTL
    的头像 发表于 08-12 10:23 452次阅读
    为什么调试<b class='flag-5'>X</b>值那么困难?