利用ralf生成寄存器模型之后,可以利用uvm自带的uvm_reg_hw_reset_seq完成对寄存器默认值的check.
此seq通过前门读取寄存器的值与ral模型中的mirror值做比较,不一样则报错.
1.继承uvm_reg_hw_reset_seq
此seq的介绍中可以看到,在body函数中会检查modle是否为null,因为原始的seq中没有对model赋值,所以实例化sequence之后,需要对model赋值.为了以后测试的方便,例如有些寄存器是只写的,那么在检查复位值时,就需要exclude,因此,可以通过继承构建自定义的sequence.
2.model赋值
在对hw_reset_sequence例化之后,对model赋值.调用start函数启动sequence,实现对寄存器默认值的检查.
3.结果
为了达到测试的效果,ral模型中的值与dut中默认值不一样,运行之后,发现dut与ral的mirror值不一样报错.
4.exclude_reg
在测试时如果有些寄存器的默认值不需要关注,那么可以通过设置NO_REG_TESTS或者NO_REG_HW_RESET_TEST来实现.在实际的应用当中也支持对整个block做exclude处理.
5.$sformatf
在对字符串处理时,可以使用$sformatf获取对应的字符串值,它会将处理之后的字符串作为返回值,而$sformat则不会有返回值,它需要事先指定将字符串赋值给谁.
6.uvm_reg_bit_bash_seq
uvm_reg_bit_bash_seq实现对寄存器每个bit的遍历操作,通过前门写前门读确认每个bit读写操作是否ok.此操作对RW寄存器有效,因为本身其就要支持读写操作,如果读写有问题就可以发现错误;对于诸如RO、RC这样属性的寄存器,本身就不支持写操作,会导致误报错误,所以后续需要exclude掉.
示例中是一个RW寄存器,默认值全0,bit_bash操作如下:
uvm_reg_hw_reset_seq
于 2020-11-25 15:52:11 首次发布