我试图验证两个模块之间的一个非常简单的握手。一个模块处于慢速时钟并提高“请求”,较快的模块应该在下一个快速时钟上提高“确认”并保持它,直到下一个慢速时钟为止。最终的结果是这样的: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看起来你是对的!看起来,在两个**信号上增加一个采样时钟一起改变了模拟器理解检查表达式的方式。我按照你所建议的方式改变了它,但它仍然奏效......尽管我无法解释它......如果你能理解它,也许你应该将它作为解决方案发布? –