【发布时间】:2013-11-08 15:05:10
【问题描述】:
我将如何编写 SVA 来检查 sig 是否变高,触发器是否在 trigger [*4] |-> signal 之前 4 个周期为高
不够好,因为它没有检查信号在 3 个周期内没有变高。我应该怎么用$past??
【问题讨论】:
标签: system-verilog assertions system-verilog-assertions
我将如何编写 SVA 来检查 sig 是否变高,触发器是否在 trigger [*4] |-> signal 之前 4 个周期为高
不够好,因为它没有检查信号在 3 个周期内没有变高。我应该怎么用$past??
【问题讨论】:
标签: system-verilog assertions system-verilog-assertions
这将检查在sig 的上升沿,trigger 在 4 个 clk 周期前为高:
assert_name: assert property (
@(posedge clk) (
($rose(sig) -> $past(trigger,4))
)
);
【讨论】:
|->($past(trigger,4) & $past(trigger, 3) )...?
没有什么能阻止你编写一小段可综合的 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)
)
);
【讨论】: