我想将记分板与代理的定序器+监视器连接起来。通过使用分析 imp ( uvm_analysis_imp )连接显示器非常简单,因为显示器拥有一个分析端口。
但是,我不确定如何连接定序器和记分板,因为定序器拥有 uvm_seq_item_pull_imp并且不可能简单地将其连接到分析 imp。我的想法是检查uvm_driver使用的端口,即uvm_seq_item_pull_port。
不幸的是,连接定序器和记分板似乎并不常见,但出于我的目的,这是必要的。是否只能使用uvm_seq_item_pull_port进行序列器-记分板连接,还是有更简单的方法?
由于可重用性方面的原因,在有源组件(定序器或驱动程序)之间进行这种连接通常是不受欢迎的(根据合同,我有义务这么说: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 编码指南中采用了一些快捷方式)。