UVM:连接音序器+监视器与记分板

时间:2015-03-17 17:10:03

标签: monitor agent uvm

我想将记分板与代理的音序器+监视器连接起来。使用分析imp( uvm_analysis_imp )可以直接连接监视器,因为监视器拥有分析端口。

但是,我不知道如何连接音序器和记分板,因为音序器持有 uvm_seq_item_pull_imp ,并且不可能简单地将它连接到分析imp。我的想法是检查 uvm_driver 使用的端口,即 uvm_seq_item_pull_port

不幸的是,连接音序器和记分板似乎并不常见,但出于我的目的,这是必要的。是否只能将 uvm_seq_item_pull_port 用于音序器记分板连接,还是有更简单的方法?

2 个答案:

答案 0 :(得分:4)

由于可重用性方面的问题,在活动组件(音序器或驱动程序)之间进行这种连接通常是不受欢迎的(我在合同上有义务说:D)。尽管如此,它在SoC级别可能有意义。

你可以做的是创建你自己的音序器类(你可能已经有一个),它包含一个分析端口。您必须扩展send_request(...)以在该分析端口上写入该项目。然后,您可以将此分析端口连接到记分板,就像通常的监视器一样:

class some_sequencer extends uvm_sequencer #(some_item);
  uvm_analysis_port #(some_item) aport;

  function void send_request(uvm_sequence_base sequence_ptr, uvm_sequence_item t, bit rerandomize = 0);
    some_item item;
    if (!$cast(item, t))
      `uvm_fatal("CASTERR", "Can't cast")
    super.send_request(sequence_ptr, t, rerandomize);
    aport.write(item);
  endfunction
endclass

你可以在EDAPlayground上找到一个有效的例子(注意:我从公认的UVM编码指南中选择了一些快捷方式)。

答案 1 :(得分:0)

此解决方案是可行的,但可能会限制SoC级别的可重用性。如果您想在SoC级别重新使用UVM环境,那么最好将SB与监视器连接。原因在于,在社交层面,您的刺激可能来自其他区块,例如CORE,在这种情况下,交易(应用于您的区块的刺激)应该由监控器捕获。