【问题标题】:system verilog assertion trigger==1 4 cycles before signal asserted系统 Verilog 断言触发器 ==1 信号断言前 4 个周期
【发布时间】:2013-11-08 15:05:10
【问题描述】:

我将如何编写 SVA 来检查 sig 是否变高,触发器是否在 trigger [*4] |-> signal 之前 4 个周期为高 不够好,因为它没有检查信号在 3 个周期内没有变高。我应该怎么用$past??

【问题讨论】:

    标签: system-verilog assertions system-verilog-assertions


    【解决方案1】:

    这将检查在sig 的上升沿,trigger 在 4 个 clk 周期前为高:

    assert_name: assert property (
       @(posedge clk) (
         ($rose(sig) -> $past(trigger,4))
       )
    );
    

    【讨论】:

    • 但我不认为这会在 sig 上升之前检查 4 个 连续 个周期的触发器是否很高?这就是我需要的。所以也许|->($past(trigger,4) & $past(trigger, 3) )...?
    • @Meir 你是对的,这只是检查它在 4 时钟前是高的。然后,您可以检查它从那个点开始的 4 时钟高。
    【解决方案2】:

    没有什么能阻止你编写一小段可综合的 RTL,它计算 trigger 高了多少个周期。

    always @(posedge clk) begin
        if (trigger) begin
            triggerCount := triggerCount + 1;
        end else begin
            triggerCount := 0;
        end
    end
    
    assert_name: assert property (
       @(posedge clk) (
         ($rose(sig) -> triggerCount == 4)
       )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2014-09-13
      • 2015-12-19
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多