【问题标题】:when to use $rose system task with a signal in assertions何时在断言中使用带有信号的 $rose 系统任务
【发布时间】:2014-09-03 06:19:34
【问题描述】:

我试图了解何时将$rose 用于断言中的信号。例如,以下两个断言在哪些方面会有不同的表现?

first:assert property 
        (@(posedge clk) $rose(reset) |-> (data == 0));

second: assert property
          (@(posedge clk) reset |-> (data==0));

$rose 是不是要和异步信号一起使用?

【问题讨论】:

    标签: system-verilog system-verilog-assertions


    【解决方案1】:

    $rose 表示在上一个时钟周期中信号为“0”,在当前时钟周期中为“1”。

    第一个断言只会在reset 为高电平时检查第一个周期,而第二个断言将在reset 为高电平时在每个时钟周期检查data 是否为“0”。

    这是一张漂亮的图画,显示了每个断言何时触发。

             _   _   _   _   _   _
    clk    _| |_| |_| |_| |_| |_| |_
                 ___________
    reset  _____|           |_______
    
    first           x   
    
    second          x   x   x
    

    $rose 对同步信号有意义。

    【讨论】:

      【解决方案2】:

      $rose(reset) 在从0/x/z1 的转换时起作用,并且在发生这种转换时返回true

      reset 没有$rose 解释了0/x/z1 的这种转换,并且在发生这种转换时将返回false。这是正确的吗?

      【讨论】:

        【解决方案3】:

        $rose() 是一个系统任务,用于检查信号的采样值是否在前一个样本和当前样本之间变为 1(前一个样本可能是 0/x/z)。

        必须是两个连续的时钟周期样本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多