[CU]reg model使用篇-寄存器模型的复位值,镜像值,期望值,真实值
参考资料:
(1) UVM——RAL模型运用之三(uvm_reg的访问方法介绍) - 灰信网(软件开发博客聚合) (freesion.com)
1. 简介
(1) uvm_reg_field使用四个属性来存储各种寄存器字段值,分别为value, m_mirrored, m_desired和m_reset["HARD"];
1 class uvm_reg_field extends uvm_object;
2
3 rand uvm_reg_data_t value; // Mirrored after randomize()
4
5 local uvm_reg_data_t m_mirrored; // What we think is in the HW
6 local uvm_reg_data_t m_desired; // Mirrored after set()
7 ...
8 local uvm_reg_data_t m_reset[string];
9 ...
10 endclass

注1:m_reset用于存储硬件复位值,有多种类型复位值如SOFT_RESET, HARD_RESET;
注2:m_desired用于存储想要设置DUT的值,先利用寄存器模型修改m_desired值,而后利用该值更新硬件值;
注3:value会被用于功能覆盖率的收集(在uvm_reg_field的set操作中,value会被更新为m_desired;在uvm_reg_field的do_predict操作中, value会被更新为predicted value);
注4:regmodel进行预测的时候(do_predict),会将镜像值,期望值和硬件寄存器值更新为一致的;
(2) uvm_reg_field的四个属性中,只有value是公共的,其他属性都是本地的,因此无法直接从类外访问它们.
2.镜像值
2.1 镜像值m_mirrored的特点
(1) register model会维护一个镜像值;镜像值是寄存器模型中用于最大可能与DUT中register保持同步的变量(镜像值是寄存器模型认为当前DUT内register的值);
(2) 镜像值并不保证是正确的,因为register model获取register信息的来源仅仅是依靠对register的read/write访问(描述不准确). 如果DUT内部通过正常的行为修改了register或register field的内容(如设置一个状态位或者counter的增加),register model的镜像值就会过期;
(3) 镜像值不是scoreboard;
2.2 镜像值的获取
(1) 可以通过get_mirrored_value得到寄存器的镜像值;
2.3 镜像值的更新
(1) register model会尽量更新镜像值;
(2) 对于每一次读操作或者peek, mirror,会基于DUT寄存器的值更新寄存器的镜像值;
(3) 对于每一次写操作或者 poke, set-update, randomize-update, register的镜像值会根据register的访问模式(如read/write, read-only, write-1-to-clear)而进行预测(DUT值也会根据register访问模式有所变化);
(4) 对register model进行reset(或者predict),会将镜像值设置为model中指定的reset值(predict不是设为指定reset值), 但不对DUT进行任何操作;
浙公网安备 33010602011771号