我試圖驗證兩個模塊之間的一個非常簡單的握手。一個模塊處於慢速時鐘並提高「請求」,較快的模塊應該在下一個快速時鐘上提高「確認」並保持它,直到下一個慢速時鐘爲止。最終的結果是這樣的:e HVL(IEEE 1647):期望的表達意外失敗
這是我寫的期待:
expect expect_ack_when_req_go is
(@req_rise_e) => @ack_rise_e
else dut_error("ERROR: ack expected to be asserted when req rises!");
*既@req_rise_e和@ack_rise_e是在慢時鐘採樣。
運行模擬器會產生錯誤,因爲第一個表達式似乎成功了,但第二個表達式沒有成功。儘管事件追蹤到wave時,我可以看到兩個事件一起發生(如wave:event_req,event_ack中所見)。
我會先嚐試添加一個採樣時鐘給TE,即'expect ...(@req_rise_e => @ack_rise_e)@slow_clk;' – Thorsten
已經嘗試過了,它沒有做任何好處...此外,我認爲這是多餘的,因爲這兩個事件已經被慢速時鐘採樣: 'event req_rise_e is rise(smp.port_req $)@slow_clk_e;' 'event ack_rise_e is rise(smp.port_ack $)@slow_clk_e;' –
好吧,@ Thorsten看起來你是對的!看起來,在兩個**信號上增加一個採樣時鐘一起改變了模擬器理解檢查表達式的方式。我按照你所建議的方式改變了它,但它仍然奏效......儘管我無法解釋它......如果你能理解它,也許你應該將它作爲解決方案發布? –