(1) 一个寄存器模型必须包含一个reg_block;一般DUT内具有相同的基地址的所有寄存器,会放在一个reg_block中. (2) uvm_reg_block可以包含任意数量的uvm_reg, register files, memories以及其他低层次的uvm_reg_block; (3) uvm_reg block里含有uvm_reg_map类对象default_map,用于地址映射以及完成寄存器前门访问操作...
我们在创建uvm_reg_map的时候(如果只有一个uvm_reg_map我们一般会用uvm_reg_block自带的default_map)默认会将m_auto_predict设为0。 由于m_auto_predict是被local修饰的本地变量,因而不能在uvm_reg_map类外部访问,可以使用get_predict_map获取当前predict类型 m_auto_predict = 1 首先我们看下当我们执行寄存器...
这是可以理解的,因为子block的default_map只能处理偏移地址,而只有加入了父block的reg_map中才能获取基地址,组成完整地址。因此一般将具有同一基地址的寄存器作为整体加入一个uvm_reg_block中,而不同的基地址对应于不同的uvm_reg_block。 除了已经引入的uvm_reg_field,uvm_reg,uvm_reg_block的概念,UVM的寄存器模型...
第一个是此寄存器所在uvm_reg_block 的指针,这里是this。 第二个是reg_file的指针。 第三个是此寄存器后门路径。 4)需要受到build,将invert中的field 例化。 5)将此寄存器加入default_map中。uvm_reg_map 作用是存储所有寄存器地址,因此必须加入,否则无法前门操作。 第一个是要加入的寄存器。 第二个是寄存器地址。
uvm_reg中的主要变量有,m_locked,由顶层的reg_block调用 m_parent,指向的uvm_reg_block; m_is_busy,当该reg正在执行frontdoor的读写操作时,该信号置 1,避免此时做predict。 m_backdoor,外部设置进去的backdoor的方法。 m_maps[uvm_reg_map],该reg挂载在的map的对象,在default_map,add_reg时,指定。
uvm_reg_block里包含uvm_reg,一般一个最底层模块级的DUT的所有寄存器,具有相同的基地址,会放在一个reg_block中。uvm_reg_block内也可包含其他低层次的reg_block。 reg_block里有含有uvm_reg_map类的对象default_map,进行地址映射,以及用来完成寄存器前后门访问操作。
1.2.3. uvm_reg_map 关于uvm_reg_map的创建,方法也很多,第一种,在例化uvm_reg_block的component中也例化uvm_reg_map,然后调用其configure函数,配置base address,大小端,关联的uvm_reg_block等。这里介绍另一种方法,uvm_reg_block自带了一个create_map函数,我们直接调用该函数,假设我们在uvm_test中定义了reg_bl...
UVM入门学习笔记:寄存器模型1. 层次化的寄存器结构 创建方式:通过uvm_reg_block创建层次化的寄存器结构。 组织方式:通常使用两层结构组织,第一层包含uvm_reg,第二层用于组织子块。 配置与初始化:在父reg_block中实例化子reg_block,并调用configure和build方法。同时,将子reg_block的default_map...
层次化的寄存器结构通过uvm_reg_block创建,通常用两层结构组织,第一层包含uvm_reg,第二层用于组织子块。在配置和初始化时,需在父reg_block中实例化并调用configure和build方法,同时将子reg_block的default_map添加到父block的default_map中,以确保地址完整。UVM的寄存器模型中,uvm_reg_file用于区分...
uvm_reg:包含成员变量m_fields,加入各个uvm_reg_field。 uvm_reg_block:uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再添加子uvm_reg_block,同时子uvm_reg_block的uvm_reg_map也需要添加到父uvm_reg_block...