在UVM验证环境中,我们通常会有很多不同类型的sequence,例如:控制复位的sequence、控制寄存器配置的sequence、控制总线的sequence等等,这些不同的sequence需要管理。本文主要记录一下,在同一个uvm验证环境中,不同的sequence之间,同步以及执行顺序先后,的控制方法。
控制不同sequence之间的同步以及执行顺序的方法,通常是采用top_sequence来进行管理。top_sequence能够在一个phase中,同时管理多个sequence的执行,能够控制sequence的独占访问,不需要单独写sequence和sequencer,而是复用已有的sequence和sequencer,只是对其进行管理。


top_sequence的代码如下所示,首先利用`uvm_declare_p_sequencer宏来创建一个p_sequencer,然后声明需要管理的sequence,最后在body()方法中,将sequence送入对应的sequencer中。


在top_sequencer中,只需要声明一下需要管理的sequence对应的sequencer即可。


在测试用例中,首选需要声明并创建top_sequencer,其次将每个sequence与之对应sequencer的default_sequence设置成null,最后再配置top_sequencer去执行top_sequence。
要注意的是,需要在connect_phase中将top_sequencer中声明的sequencer,与agent中对应的sequencer连接起来。


如下图所示,利用top_sequence,实现先执行pci_seq,i2c_seq等待某个事件之后再去执行。

应用top_sequence实现sequence的管理实例,可以参考文章《UVM环境中reset复位的处理》
本文主要记录一下,如何利用top_sequence,实现多个sequence的管理。