我有一个虚拟音序器,我可以并行执行三个事务,每个事务都在其对应的音序器上执行。所以,我有这样的事情:如何在没有随机化的情况下执行uvm_do_on?
class top_vseqr extends uvm_seqr extends uvm_sequencer;
type_a_seqr seqr_a;
type_b_seqr seqr_b;
type_c_seqr seqr_c;
...
endclass: top_vseqr
class simple_vseq extends uvm_sequence;
`uvm_declare_p_sequencer(top_vseqr)
type_a_seq seq_a;
type_b_seq seq_b;
type_c_seq seq_c;
...
virtual task body();
fork
`uvm_do_on(seq_a, p_sequencer.seqr_a)
`uvm_do_on(seq_b, p_sequencer.seqr_b)
`uvm_do_on(seq_c, p_sequencer.seqr_c)
join
endtask: body
endclass: simple_vseq
但现在我希望能够促成特定交易到虚拟序,这取决于我运行测试。为此,我有一个分析导入类,每次监视器在界面中看到一个事务时都会更新一次分析导入,并且会返回一个返回要驱动的下一个事务的函数。所以,现在我想要做的东西像下面这样:
class test extends uvm_test;
model model_a;
simple_vseq seq;
top_vseqr virt_seqr;
...
task run_phase(uvm_phase phase);
...
seq = simple_vseq::type_id::create("seq", this);
seq.seq_a = model_a.get_sequence();
seq.start(virt_seqr);
...
endtask: run_phase
通过UVM文件我已经看到有一个“uvm_send宏观挖,但它不会让你选择音序器上运行的顺序(即我没有看到'uvm_send_on或类似的东西)。我能做什么?
谢谢!