首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Verilog - 0&&0中的覆盖分析

Verilog - 0&&0中的覆盖分析
EN

Stack Overflow用户
提问于 2013-06-05 06:46:45
回答 1查看 249关注 0票数 1

我正在通过Verilog为一个芯片运行一些测试,我遇到了一个小问题,我有点摸不着头脑。我正在测试代码的覆盖率,以确保所有状态都发生在所有参数的随机测试中,等等。

在计算以下类型的两个值时:

代码语言:javascript
代码运行次数:0
运行
复制
case(state_vector)

    STATE1:
        ...

    STATE2:
        if(!var1 && var2)
             state_vector = STATE1;
        else
             state_vector = STATE2;

    STATE3:
        ...

现在的问题是,在进行覆盖率分析时,else语句后面的语句永远不会到达,这意味着if语句总是计算为true。

我最初假设var1和var2的值分别为0和1。在完成我的报告之前,经过仔细检查,我注意到这个假设是不正确的,因为波形分析显示,在整个模拟过程中,var1始终为1,var2始终为0。

现在我将测试以确保值按我想要的方式改变,但我很好奇在Verilog中这是如何发生的。从本质上讲,我正在滑入一种状态,因为if语句在无穷小的时间单位内的计算结果为true。

对如何更好地评估这个问题有什么想法吗?我想在检查当前状态的同时,检查另一个函数是否没有更改我的state_vector。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 08:02:25

又快又脏的方法是在有问题的代码周围散布$display("%t %m got here",$time);,并确保begin-end块有标签,例如:

代码语言:javascript
代码运行次数:0
运行
复制
begin : meaningful_label
  $display("%t %m got here",$time);
  ... code ...
  $display("%t %m got here too",$time);
end

如果调用了display语句,则会将state_vector赋值到其他地方。否则,某些东西会阻止代码令人兴奋。

要进一步调试,请执行以下操作:

  • Not display message:
    • add more display messages to higher levels.

  • 显示消息:
    • 某些波形查看器具有活动的驱动程序跟踪功能。如果查看器没有此功能,则在所有其他赋值语句周围添加消息,并观察条件应为true.

时的时间戳

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16928742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档