寄存器模型之reg model作用,结构,生成
资料来源:
(1)SystemVerilo | UVM | 精讲RAL寄存器模型基础 (qq.com)
(2)路科课程;
注1:在验证的过程中,寄存器的验证排在了验证清单的前列(因为其他测试都不可避免的需要涉及到寄存器的配置);
注2:环境可以通过读出寄存器的状态,获取硬件当前的状况;环境也可可以通过配置寄存器,使得硬件工作在一定模式下;
注3:寄存器模型的内容包括寄存器模型的构建(涉及到寄存器模型相关类)、寄存器模型的集成(与总线uvc桥接)与寄存器模型的使用(涉及到寄存器模型的常用方法以及预定义的sequence与寄存器的测试,还包括寄存器覆盖率);
1.寄存器与寄存器模型简介
(1) 寄存器(register)是数字系统中非常重要的部件,它常被用于数字系统的功能控制(control)和状态(status)显示。
注1:寄存器的硬件实现是触发器;
注2:寄存器一般由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域,不同的域代表着某一项独立的功能;
注3:寄存器单个的域可能由多个比特位构成,也可能由单一比特位构成,这取决于该域的功能模式可配置的数量;
(2) 寄存器模型(RAL, register abstract layer)是一组高度抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模;
(3) 寄存器模型,要能模拟任意数量的寄存器域操作、副作用以及不同寄存器间的交互作用.
2. 寄存器模型的作用(为什么对寄存器建模?)
(1)寄存器建模要做的事情就是在软件的世界里面复刻RTL中的寄存器.既然是面向软件世界做的事情,自然就是为软件所用,要么方便软件观测,要么方便软件使用。这里的软件指的是整个验证环境所构造出来的面向对象的世界。有了寄存器模型,软件世界中的参考模型(reference model)可以很方便的获取到当前RTL的功能配置和状态,我们也可以很方便的收集到对寄存器各个域段甚至位的测试覆盖情况等等。
(2)寄存器模型充当验证平台(尤其是uvm_component)与DUT之间寄存器访问操作的桥梁,简化了寄存器访问的流程. 比如,reference model里面需要读取寄存器的值,在没有寄存器模型之前,需要考虑怎么在reference model里启动一个sequence以及怎么将sequence读回的值返回给reference model.
注1:不使用ral的register sequence(只支持frontdoor);
注2:使用ral的register sequence(支持frontdoor与backdoor);
(3)寄存器模型完成启动sequence以及将读结果返回等操作;
(4)寄存器模型的本质是重新定义了验证平台与DUT的寄存器接口;
3.寄存器模型的结构(含层次化的regmodel&file)
寄存器模型就是一些类的集合,这些类模拟了DUT中的存储器、寄存器以及寄存器、存储器映射行为.这些类用于产生特定激励,进行功能检查.
3.1 normal register model
3.2 hierarchical regmodel(含regfile及sub_regmodel)
3.3 hierarchical regmodel实现方式1(含regfile及sub_regmodel, multi_reg_field)
3.4 hierarchical regmodel实现方式2(含regfile及sub_regmodel, multi_reg_field)
4. regmodel的生成
由于项目中寄存器数量多,通常使用工具产生和维护UVM寄存器模型,常见工具如下:
(1) Synopsys VCS自带的ralgen可以产生uvm寄存器模型;
(2) Paradigm works公司开源的RegWorks Spec2Reg;
5. register model的并行访问
(1) 多个并行执行的线程可同时访问register model,但是当访问同一个register时,内部会对这些访问进行串行处理;
(2) 每一个register内都有一个旗语,用于确保同一时刻只有一个线程对其进行读写操作; 如果一个线程在执行register访问操作的过程中被显式kill,有必要通过调用uvm_reg::reset()函数release该register的旗语;
【推荐】国内首个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吗?