UVM 寄存器内建测试序列(built-in sequences)
不少有经验的UVM用户可能会忽略UVM针对寄存器模型内建的一些sequence,实际上如果可以将这些自建的序列作为验证项目一开始的健康检查必选项的化,这对于整个项目的平稳运行会有不小的贡献。
这是因为在项目一开始的阶段,设计内部的逻辑还不稳定,对于verifier而言,如果想要跟上设计的进度,可以展开验证的部分无外乎是系统控制信号(时钟、复位、电源)和寄存器的验证。
在项目早期,寄存器模型的验证可以为后期各个功能点验证打下良好的基础。比如,通过内建的寄存器或者存储序列可以实现完善的寄存器复位值检查,又比如检查读写寄存器的读写功能是否正常等。
不过有一些寄存器即便可以测试,也建议将其作为例外而过滤出去,例如一些重要的系统控制信号(时钟、复位、电源),当写入某些值以后,会使得系统全部或者局部复位、时钟也可能被关闭,这就可能阻碍寄存器的下一步检查。
所以UVM提供了一些特殊域,用来禁止sequence检查这些寄存器或者存储。
内建序列
内建序列示例
下面的例码演示如何利用内建序列完成MCDF寄存器测试一开始的健康检查。分别添加了uvm_reg_hw_reset_seq、uvm_reg_bit_bash_seq和uvm_reg_access_seq来测试寄存器模型。
从代码的整洁性来看,用户并不需要额外再添加什么,这种使用方法非常方便,且又能完成寄存器的大规模集成测试。
class mcdf_example_seq extends uvm_reg_sequence;
mcdf_rgm rgm;
`uvm_object_utils(mcdf_example_seq)
`uvm_declare_p_sequencer(mcdf_bus_sequencer)
...
task body();
uvm_status_e status;
uvm_reg_data_t data;
uvm_reg_hw_reset_seq reg_rst_seq=new