[英]SystemVerilog Assertion does not fail when it should
我有一個簡單的斷言如下:
$rose(req) |=> !req[*1:10] 直到 ack ##1 !ack;
據我了解,在檢測到 $rose(req) 時,斷言應檢查 !req 是否連續為低 10 個時鍾或 - 直到 - ack 到達 (ack=1)。 一旦 ack 為真,它應該取消斷言下一個時鍾。
我的測試從 $rose(req); 開始然后保持 !req 聲明幾個時鍾(少於 10 個),然后驅動 ack=1。 然后,我保持 ack=1 4 個時鍾。 正如斷言所要求的那樣,它不會在下一個時鍾變低。 盡管如此,斷言並沒有失敗。 線程 "!req[*1:10] until ack" 似乎一直在觸發,即使在 ack 到達並且滿足 'until' 條件之后也是如此。
任何想法為什么斷言不會失敗?
這是模擬場景的 EDA 操場鏈接。
你的說法完全正確!
您在!req[*1:10]
階段沒有提供有關 ack 信號的信息。
模擬器找到一個序列,其中一些時鍾周期(最大 10 個)的 req=0,然后找到 ack=1,然后是 ack=0;
您想要的可以通過以下方式獲得:
$rose(req) |=> (!ack throughout !req[*1:10]) ##1 ack ##1 !ack;
我不會在這里使用until ack
,只需##1 ack
C。,
是的,您的解決方案有效。 非常感謝。 我也找到了另一個解決方案。
@(posedge clk) $rose(req) |=> first_match(!req[*1:10] ##1 ack) ##1 !ack;
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.