2014-04-14 34 views
1

我有一个基本的基于UVM的TB的问题我试图理解序列及其工作。基本的UVM序列模拟查询

  1. BVALID在响应项
  2. 夫妇对于最后2个交易错误消息(#UVM_ERROR @ 18被更新时被总是在驱动器选为0:uvm_test_top.axi_agent1.axi_base_seqr1 @@ axi_base_seq1 [uvm_test_top .axi_agent1.axi_base_seqr1.axi_base_seq1]响应队列溢出,响应已被删除)

这里是链接到编译代码上EDA游乐场 http://www.edaplayground.com/x/3x9

甲ny对我失踪的建议?

感谢

venkstart

回答

2

有一个看看规范$ urandom_range它显示了签名:function int unsigned $urandom_range(int unsigned maxval, int unsigned minval = 0)。改变您的电话$urandom_range(1, 0)它应该工作。

第二个错误来自您从驱动程序发送响应并且不按顺序选取它们的事实。这是行:seq_item_port.item_done(axi_item_driv_src);。您可以在finish_item()之后seq_item_port.item_done();(不发送回复)或拨打电话get_response()。我通常所做的是更新原始请求的字段,并致电item_done()。例如,如果我开始读取事务,在驱动程序中,我将驱动控制信号并等待DUT响应,使用我从DUT获取的数据更新请求的data字段,并在我的驱动程序中调用item_done()以标记请求完成。这样,如果我在我的序列中需要这些数据(例如限制未来的某个项目),我就拥有了它。

+1

@venkstart你可以在这里找到你的固定代码:http://www.edaplayground.com/x/YJ –

+0

谢谢你的解释都铎王朝。还有一个关于为什么错误在大约8个txns之后才会出现的问题?如果顺序没有收到答复,我应该从一开始就看到这一点? – venkstart

+0

@venkstart因为音序器无法知道什么时候调用get_response(),它会在队列中存储未完成的响应。当队列变得太大时,它开始触发错误。这意味着它只会在队列变满时开始给出错误(UVM中默认情况下可以设置8-ish,但我认为你也可以改变这个数字)。 –