簡體   English   中英

SystemVerilog 斷言在它應該失敗時不會失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM