知识点
寄存器:是模块之间相互交流的窗口,硬件的各个功能可以通过由处理器配置功能以及访问状态,与处理器之间的通话是通过寄存器的读写来实现的。
寄存器按照地址索引的关系是按字对其的,寄存器有多个域,每个域的属性可以不相同,reserved域表示该域所包含的比特位暂时保留以作日后的功能扩展所用,对保留域的读写不起任何作用。

一个寄存器可以由多个域构成,而多个域可以包含多个比特位,一个功能模块中的寄存器可以组团构成一个寄存器模型(register model),下图中包含了寄存器模块和属于验证环境的寄存器模型。两个模块包含的寄存器信息是高度一致的,属于验证环境的寄存器模型可以抽象出一个层次化的寄存器列表;对于功能验证而言,可以将总线访问寄存器的方式抽象成寄存器模型访问的方式,这种方式便于寄存器后期的地址修改或者域的添加,且不会对已有的激励产生影响,从而提高了测试序列的复用性。

中心化管理方式:采用XML、Excel或者DOC等格式来保存寄存器的描述,因为单一源的管理方式可以尽量降低分歧和错误的可能。
uvm_reg相关概念:

寄存器建模的基本要点和顺序:
1:在定义单个寄存器时,需要将寄存器的各个域整理出来,在创建之后还应当通过uvm_ reg_field::configure()函数来进一步配置各自属性;
2:在定义uvm_reg_block时, 读者需要注意reg_block与uvm_mem、uvm_reg以及uvm_reg_map的包含关系。首先uvm_reg和uvm_mem分别对应着硬件中独立的寄存器或者存储,而一个uvm_reg_block可以用来模拟一个功能模块的寄存器模型,其中可以容纳多个uvm_ reg和uvm_ mem实例;其次map的作用一方面用来表示寄存器和存储对应的偏移地址,同时由于一个reg_ block可 以包含多个map,各个map可以分别对应不同总线或者不同地址段。在reg_block中创建了各个uvm_ reg之后,需要调用uvm_reg:configure()去配置各个uvm_reg实例的属性。
3:考虑到uvm_reg_map也会在uvm_reg_block中例化,在例化之后需要通过uvm_reg_map:add_reg()函数来添加各 个uvm_reg对应的偏移地址和访问属性等。只有规定了这些属性,才可以在稍后的前门访问(frontdoor)中给出正确的地址。:4:uvm_reg_block可以对更大的系统做寄存器建模,这意味着uvm

本文围绕寄存器模型展开,介绍了寄存器概念、中心化管理方式,阐述了uvm_reg相关建模要点、访问方式及预测分类。还说明了寄存器模型的完善与嵌入方法,包括adapter类方法实现和组件例化连接。此外,讲解了寄存器模型的使用场景及内建序列在测试中的应用。
最低0.47元/天 解锁文章
2538

被折叠的 条评论
为什么被折叠?



