有人可以解释为什么这两段代码表现不同。在第二种情况下,当我以10个事务开始序列时,我同时有两个事务,一个覆盖另一个事务,它只发生在模拟开始时。之后一切都很好。
task fir_driver::drive_write(input fir_item#(D_WIDTH) it);
seq_item_port.get_next_item(it);
@mp_p.cb_fir;
mp_p.cb_fir.i_data_sample <= it.i_data_sample;
seq_item_port.item_done();
endtask : drive_write
task fir_driver::drive_write(input fir_item#(D_WIDTH) it);
seq_item_port.get_next_item(it);
mp_p.cb_fir.i_data_sample <= it.i_data_sample;
@mp_p.cb_fir;
seq_item_port.item_done();
endtask : drive_write
答案 0 :(得分:0)
我打算猜测在调用drive_write()
之前的最后一个阻塞事件不是@mp_p.cb_fir
,或者可能是在时间0。并且在调用{{1}之间没有其他阻塞语句然后第一个驱动器与第二个驱动器重合。请参见1800-2012 LRM中的 14.16同步驱动部分。