UVM:将定序器+监视器与记分板连接起来

seb*_*ebs 0 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进行序列器-记分板连接,还是有更简单的方法?

Tud*_*imi 6

由于可重用性方面的原因,在有源组件(定序器或驱动程序)之间进行这种连接通常是不受欢迎的(根据合同,我有义务这么说: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
Run Code Online (Sandbox Code Playgroud)

您可以在EDAPlayground上找到一个工作示例(注意:我从公认的 UVM 编码指南中采用了一些快捷方式)。