UVM 寄存器常规方法
文章目录
uvm_reg的访问方法,更全面了解uvm_reg_block、uvm_reg、uvm_reg_field三个类提供的用于访问寄存器的方法:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/12d49bfea053355cd785ccae890c33bb.png)
将uvm_reg_sequence提供的方法(均是针对寄存器对象的,而不是寄存器块或者寄存器域)整理如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d4b3fd4a6c41cb438944e7ad8d3ce21b.png)
结合着mirrored value、desired value和actual value,我们需要理解这四种方法在调用时,三种数值的变化时序关系:
- 对于前门访问的read()和write(),在总线事务完成时,镜像值和期望值才会更新为与总线上相同的值,这种预测方式是显示预测。
- 对于peek()和poke(),以及后门访问模式下的read()和write(),由于不通过总线,默认采取自动预测的方式,因此在零时刻方法调用返回后,镜像值和期望值也相应修改。
reset()和get_reset()
关于reset()和get_reset()的用法,例如硬件在复位触发时,会将内部寄存器值复位,而寄存器模型在捕捉到复位时间时,为了保持同硬件行为一致,也应当对其复位。这里注意的是,复位的对象是寄存器模型,而不是硬件。
@(negedge p_sequencer.vif.rstn);
rgm.reset();
rgm.chnl0_ctrl_reg.reset();
rgm.chnl0_ctrl_reg.pkt_len.reset();
在复位之后,用户也可以通过读取寄存器模型的复位值(与寄存器描述文件一致),与前门访问获取的寄存器复位值进行比较&