引入virtual sequence后的sequence启动
6.4.3匹配类型
一个sequencer只能产生一种类型的transaction,
一个sequence如果要想在此sequencer上启动,那么其所产生的transaction的类型
必须是这种transaction或者派生自这种transaction。
那么有没有办法将两个截然不同的transaction交给同一个sequencer呢?可以,只是需要将sequencer和driver能够接受的数据类
型设置为uvm_sequence_item:
class my_sequencer extends uvm_sequencer #(uvm_sequence_item);
class my_driver extends uvm_driver#(uvm_sequence_item);
6.5.3 sequence之间的复杂同步
virtual sequence是控制sequence的高级sequence;
virtual sequencer里面包含指向其他真实sequencer的指针;
引入virtual sequence后,
本质上case里start的就是virtual sequence;
而virtual sequence又是一个嵌套的sequence;
virtual sequence运行在virtual sequencer上,
(virtual sequencer包含了需要使用的sequencer的指针,他们的赋值是在顶层的connect阶段完成的);
顶层的virtual sequence在被start以后,通过宏调用次级的virtual sequence,
次级的virtual sequence被调用以后,其成员已包含多组sequence(真sequence),
这多组sequence通过宏选择不同的sequencer,并实际运行以完成任务;
virtual sequence包含了使用多个sequencer的可能,这也意味着需要连接6.4.3中的知识;
不使用virtual sequence的时候,
只需要在case test或是顶层sequence中,
通过宏选择指定运行的sequencer,
也是能够完成任务的;
但是不同sequence之间的通信或许会因此变得困难,(需要引入event等)
虽然本人认为仍有解法,但UVM中提出的virtual sequence显然是一种公共解,通过这种方法编写的代码更容易为他人所接受。
这种规范是应该由我们共同维护的。
还有一些有意思的地方:
uvm_do系列宏传递transaction时视为创建随机并发送,而传入seq视为执行该seq,这为我们提供了很多灵活的使用方法。
但我个人认为应该隔离transaction和sequence。
class cfg_vseq extends uvm_sequence;
`uvm_object_utils(cfg_vseq)
`uvm_declare_p_sequencer(my_vsqr)
function new(string name = "cfg_vseq");
super.new(name);
endfunction
virtual task body();
my_transaction tr;
drv0_seq seq0;
drv1_seq seq1;
`uvm_do_on_with(tr, p_sequencer.p_sqr0, {tr.pload.size == 1500;})
`uvm_info("vseq", "send one longest packet on p_sequencer.p_sqr0", UVM_MEDIUM)
fork
`uvm_do_on(seq0, p_sequencer.p_sqr0);
`uvm_do_on(seq1, p_sequencer.p_sqr1);
join
endtask
endclass
virtual sequencer
使用virtual sequence还有一些好处是,virtual sequencer包含了我们需要使用的sequencer,
我们通过uvm_declare_p_sequencer和p_sequencer可以很好地访问和管理他们。
也可以认为,virtual sequencer是virtual sequence控制真实sequencer的接口。
此时的启动方法变更为,virtual sequencer在main phase阶段启动virtual sequence
virtual sequence进而在其他的sequencer上启动sequence。
可以选择在test里设置default来启动virtual sequence,再手动启动真实的sequence。
(但我看下来认为全部手动启动是最佳的)

浙公网安备 33010602011771号