UVM 层次类序列(hierarchical sequence)
本节开始,先抛出一个问题,如何完成验证的水平复用和垂直复用?
- 就水平复用而言,它指的是如何利用已有资源,完成高效的激励场景创建。
- 就垂直复用而言,可以完成结构复用和激励场景复用两个方面。
无论是水平复用还是垂直复用,激励场景的复用很大程度上取决于如何设计sequence,使得底层的sequence实现合理的粒度,帮助完成水平复用,进一步依托于底层激励场景,最终可以实现底层到高层的垂直复用。
以下图为例,介绍hierarchical sequence。其中DUT是一个MCDF(multi-channel data formatter 多通道数据整形器)中的寄存器模块。寄存器主要包括三个测试通道的控制寄存器和只读寄存器。
在验证MCDF的寄存器模块时,Verifier将SV验证环境进化到了UVM环境之后,关于测试寄存器模块的场景可以将其拆解为:
- 设置时钟和复位
- 测试通道1的控制寄存器和只读寄存器
- 测试通道2的控制寄存器和只读寄存器
- 测试通道3的控制寄存器和只读寄存器
上面的测试场景拆解下的sequence需要挂载的都是reg_master_agent中的sequencer。这里给出代码来说明底层sequence的设计和顶层hierarchical sequence对这些底层sequence的结构化使用。
typedef enum{
CLKON,CLKOFF,RESET,WRREG,RDREG} cmd_t;
class bus_trans extends uvm_sequence_item;
rand cmd_t cmd;
rand int addr;
rand int data;
constraint cstr{
soft addr == 'h0;
soft data == 'h0;
};
...
endclass
class clk_rst_seq extends uvm_sequence;
rand int freq;
...
task body();
bus_trans req;