求助:如何将两个不同driver发送的sequence放到一起?
前几天发过帖子求助virtual sequence错误的问题,到目前为止没人解答,所以干脆另开一贴,从零开始,重新考虑如何将两个sequence放到一起。
有两个单独的验证环境,一个是apb的,另外一个是video(r,g,b,hs,vs....)的。现在要把这两个验证环境整合到一起,使用apb配置DUT的寄存器,然后再使用video发送DUT需要的图像激励。那么需要先发送apb验证环境的apb_config_seq,然后再发送video验证环境的send_two_frame_seq。该如何操作才能实现呢?
看了你的具体问题,应该是uvm中模块级如何过渡到系统级验证的问题吧?
最直接的办法,在test里面例化,然后用启动sequence自带的一个函数就可以执行了。呵呵。
其实主要是两个driver同步的问题,根据我的VMM的经验,可以采用类似notify的机制啊,实质就是event sync的机制。想必UVM里也有同样的机制
是的。本来是打算用virtual sequence的,但是具体实现过程中遇到一些问题,可能是我中间哪步出错了,所以想知道别人是怎么做的,好对照一下,另外,也看是否有其他办法来实现。
那个, 我刚开始学UVM,你说的太简洁,我不大明白呀。请问在test里面例化是例化sequencer还是sequence,然后,这个sequence自带的一个函数是什么函数呢?
谢谢! 请问是不是systemverilog中使用的用event同步呢,就像generater和driver一样?这个我会。
例化的是sequence。
以下是伪代码,供参考:
class sys_test
{
apb_config_seq apb_config_seq0;
send_two_frame_seqsend_two_frame_seq0;
virtual task body();
`uvm_do(apb_config_seq0)
`uvm_do(send_two_frame_seq0)
endtask : body
}
可是这两个sequence是通过不同的sequencer发送的,这样可以么?
可以。 sequence和sequencer是在上层组件中的connect_phase()阶段函数中连接好的,若没有连接,会报error的。
正如楼上所说的。
一般通过virtual sequencer/sequence来做。
不写virtual sequencer也行,可以用`uvm_do_on来发sequence。
class config_sequence extends uvm_sequence #(uvm_sequence_item);
{
apb_config_seq apb_config_seq0;
apb_config_sequencer apb_sqr_h;
send_two_frame_seqsend_two_frame_seq0;
video_config_sequencer video_sqr_h;
virtual task body();
`uvm_do_on(apb_config_seq0,apb_seqr_h)
`uvm_do_on(send_two_frame_seq0,video_seqr_h)
endtask : body
}
例化config_sequence时,把apb_sqr_h,video_sqr_h连一下就好了。
谢谢诸位。最后用的是12楼的办法。虽然没用virtual sequencer,但是跟virtual sequencer的方法很像。10楼说的应该就是在connect_phase中要为apb_sqr_h和video_sqr_h连接好吧。这样一说我就明白了。非常感谢!