题
我有一个基本的基于UVM的TB的几个问题,我正在尝试理解序列和它们的工作。
- 在响应项中更新时,bvalid在驱动程序中始终被选为0
- 最后2个事务的几个错误消息(#UVM_ERROR@18: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
对我缺少什么有什么建议吗??
谢谢
文克斯特
解决方案
看看specification 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);
.要么就这么做 seq_item_port.item_done();
(不要发送回复)或打电话给 get_response()
在你的序列之后 finish_item()
.我通常做的是更新原始请求的字段,只需调用 item_done()
.例如,如果我开始一个读事务,在我的驱动程序中,我将驱动控制信号并等待DUT响应,更新 data
请求的字段与我从DUT和调用得到的数据 item_done()
在我的驱动程序中将请求标记为已完成。这样,如果我需要这个数据在我的序列(以约束一些未来的项目,例如),我有它。
不隶属于 StackOverflow