也就是说register model中的default_map里的set_sequencer方法实现了将三者的关联,传递的两个参数分别对应着实际的sequencer和adapter。 我们看看这个default_map的声明和类型定义 于是寄存器模型的default_map就把对应的sequencer和adapter存放在了default_map中的m_sequencer和m_adapter中。 下面在看看uvm_reg_adapter中re...
调用create_map函数完成default_map的实例化,default_map = create_map(“default_map”, 0, 2, UVM_LITTLE_ENDIAN, 0); 第一个参数,表示名字; 第二个参数,表示该 reg block 的基地址; 第三个参数,表示寄存器所映射到的总线的宽度(单位是 byte,不是 bit ); 第四个参数,表示大小端...
于是寄存器模型的default_map就把对应的sequencer和adapter存放在了default_map中的m_sequencer和m_adapter...
uvm_map:不需扩展,存在于uvm_block中;也可以包含子map 寄存器模型API 模拟寄存器行为:如WC模式,写之后会清零。向dut进行write操作,dut中寄存器值为0,寄存器模型中期望值及镜像值也为0;而使用poke,完成后dut中寄存器值为0,但寄存器模型中期望值及镜像值为写入的值 mirror:读取dut的值,将其更新到期望值及镜像值 ...
uvm_map:不需扩展,存在于uvm_block中;也可以包含子map 寄存器模型API 模拟寄存器行为:如WC模式,写之后会清零。向dut进行write操作,dut中寄存器值为0,寄存器模型中期望值及镜像值也为0;而使用poke,完成后dut中寄存器值为0,但寄存器模型中期望值及镜像值为写入的值 mirror:读取dut的值,将其更新到期望值及镜像值 ...
最后一步是将寄存器加入default_map之中,否则无法进行前门访问操作。add_reg函数第一个参数是要加入的寄存器,第二个参数是寄存器的地址,第三个是此寄存器的存取方式。 step3:将寄存器模型集成到验证平台之中 进行前门操作时,寄存器模型都会通过sequence产生一个uvm_reg_bus_op的变量,此变量信息要通过一个转换器(...
在connect_phase中,adapter将uvm_reg_map和sequencer连接,实际就是调用set_sequencer给uvm_reg_map中的成员变量m_sequencerm_adapter赋值: functionvoidbase_test::connect_phase(uvm_phase phase); super.connect_phase(phase); ... rm.default_map.set_sequencer(env.bus_agt.sqr, reg_sqr_adapter); rm.defaul...
local_map是uvm_reg,uvm_reg_filed,uvm_mem所在uvm_reg_map的指针。 get_root_map获得最顶层的map,如果是套嵌的uvm_reg_block,uvm_reg_map也是套嵌的。 可以用户自己定义FORONTDOOR,一般使用内建的方式,调用rw.local_map.do_write(rw)。 一般设置default_map.set_auto_predict(1);,这样当寄存器访问结束时...
3在basetest中实例化register model和adapter, 这一步骤要做两件事情,第一,对rm进行configure,build, lock, reset等操作,第二,然后对其中的default_map,进行set_sequencer.
UVM入门学习笔记:寄存器模型1. 层次化的寄存器结构 创建方式:通过uvm_reg_block创建层次化的寄存器结构。 组织方式:通常使用两层结构组织,第一层包含uvm_reg,第二层用于组织子块。 配置与初始化:在父reg_block中实例化子reg_block,并调用configure和build方法。同时,将子reg_block的default_map...