基本的UVM序列模拟查询

时间:2014-04-14 04:00:20

标签: system-verilog uvm

基于UVM的基础TB我有几个问题我试图了解序列及其工作。

  1. 在响应项
  2. 中更新时,驱动程序中的bvalid总是被选为0
  3. 最近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]响应队列溢出,响应被删除)
  4. 以下是EDA Playground上编译代码的链接 http://www.edaplayground.com/x/3x9

    对我错过的内容有任何建议吗?

    由于

    venkstart

1 个答案:

答案 0 :(得分: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);。在seq_item_port.item_done();之后,您只需执行get_response()(不发送回复)或在{1}}内拨打电话finish_item()。我通常做的是更新原始请求的字段,然后调用item_done()。例如,如果我启动读取事务,在我的驱动程序中,我将驱动控制信号并等待DUT响应,使用从DUT获得的数据更新请求的data字段并调用{{ 1}}在我的驱动程序中将请求标记为已完成。这样,如果我需要我的序列中的这些数据(例如,约束某些未来的项目),我就拥有它。