首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >武力释放声明的用途是什么?

武力释放声明的用途是什么?
EN

Stack Overflow用户
提问于 2015-07-11 09:38:57
回答 2查看 31.5K关注 0票数 5

从硬件的角度来看,forcerelease语句模型是什么?这些陈述的用途是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-07-11 13:06:54

强制/释放语句通常用于帮助模拟

一种方案是避免X-传播门模拟.RTL代码有时包含没有异步重置的寄存器。虽然RTL仿真将运行干净,但门模拟通常不会。要么X的问题永远不会得到解决,要么它们需要这么多的周期来解决,从而使模拟运行的时间不太实际。通过在复位期间强制并释放一个随机的已知值到寄存器中,使模拟能够干净地进行并及时完成。

另一个场景涉及大型计数器。例如,要看到32位计数器翻转,需要40亿个周期.通常,您希望它在一次模拟中滚动几次。同样,这可能需要相当长的时间来模拟。所述力/释放可用于将一个随机值存放到接近该翻转值的计数器中。

另一个场景涉及提高代码覆盖率结果。在所有指标上都很难达到100%的覆盖率,特别是当使用无法修改的IP时。该力可用于切换未使用的信号。

只有当你确信这样做是有效的时,才应该谨慎使用武力/释放。

票数 9
EN

Stack Overflow用户

发布于 2015-07-11 10:12:26

基于IEEE Std 1364-2005,强制过程连续分配语句应覆盖变量或网的所有过程分配。释放程序声明应终止对变量或净额的程序连续分配。变量的值应保持不变,直到通过过程分配或过程连续分配为变量分配新值为止。

例如:

代码语言:javascript
复制
module test;  
    reg a, b, c, d;
    wire e;
    and and1 (e, a, b, c);

    initial begin
      $monitor("%d d=%b,e=%b", $stime, d, e);
      assign d = a & b & c;
      a = 1;
      b = 0;
      c = 1;
      #10;
      force d = (a | b | c);
      force e = (a | b | c);
      #10;
      release d;
      release e;
      #10 $finish;
    end
endmodule

在上面的示例中,门and1被修补为或门。如果您模拟它,您将得到以下结果:

结果: 00 d=0,e=0 10 d=1,e=1 20 d=0,e=0

如果没有force语句,对于t = 10e应该等于0(自1 & 0 & 1 = 0)。使用force语句重写and1和force e = 1的结果。但是,一旦将发布应用于e,该值就会更改为0(恢复和门的功能)。

在上面的示例中,您还可以看到强制/释放既可以应用于regs (d),也可以应用于电线(e)。当您想在reg或wire中强制确定值时,此语句将用于testbenches中。

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

https://stackoverflow.com/questions/31355714

复制
相关文章

相似问题

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