[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进行任何操作;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?