我们可以通过调用add_hdl_path来添加寄存器模型的HDL路径,如图13所示,添加HDL路径可以指定不同的键值来对寄存器HDL路径进行分组,实现同一个寄存器模型存储多个不同的HDL路径,这是为了应对同样的寄存器模块在RTL中有多个instance分布在不同的hierarchy下,就可以通过键值来管理寄存器模型的多个HDL hierarchy,来实现一对多的映射...
由于有一大部分通过后门访问仿真的case都是因为hdl path定于不正确导致的,所以遇到这个error我首先会去比对我的bench中和dut中声明这块寄存器的hdl path。 通过add_hdl_path_slice我们可以向寄存器模型中的各个寄存器添加路径信息,在我的base test,这块mem的hdl path是这样定义的: m_addr_map_h.sj_test_mem_cfg_t...
functionvoiduvm_reg_block::add_hdl_path(stringpath,stringkind ="RTL"); uvm_queue #(string) paths; paths= hdl_paths_pool.get(kind); paths.push_back(path); endfunction local uvm_object_string_pool #(uvm_queue #(string)) hdl_paths_pool;//uvm_reg_block内变量//uvm_pool.svhclassuvm_poo...
总结一下UVM中的寄存器访问实现: 后门访问通过add_hdl_path命令来添加寄存器路径,并扩展uvm_reg_backdoor基类,定义read与write函数,最后在uvm_reg_block类中 通过set_backdoor()来将相应的寄存器与它对应的后门访问的读写函数对应起来。其中read和write函数以路径名来直接操作。 前门访问通过总线操作来实现,在其中有u...
uvm_reg中还有一些hdl_path的function,add_hdl_path_slice,添加到field的path路径。这些路径,之后在map中会被集成起来。 形成一个full_name。 uvm_reg_frontdoor,从uvm_reg_sequence继承而来,本身是一个sequence。 uvm_reg_backdoor,从uvm_object继承而来,本身就是一个object,其中定义了read、write的原型函数。
uvm_reg_sequence::read_reg()/write_reg()。参数path需要指定为UVM_FRONTDOOR; 2. 后门访问 在进行后门访问时,在寄存器模型建立时将各个寄存器映射到了DUT一侧的HDL路径。 uvm_reg_block::add_hdl_path( )将寄存器模型block关联到DUT一端; uvm_reg::add_hdl_path_slice( )将寄存器模型中各个寄存器成员与HDL...
例码中通过 uvm_reg_ block: :add_ hdl _path()将寄存器模型关联到了 DUT一端,而通过uvm _reg: :add_ hdl _path_ slice 完成了将寄存器模型各个寄存器成员与 HDL一侧地址的映射。例如,稍后对寄存器 SLVO_RW_REG 进行后门访问时, UVM DPI 函数通过寄存器 HDL 路径 "reg_backdoor_access.dut.regs[0]" ...
add_hdl_path(stringpath,stringkind="RTL");clear_hdl_path(stringkind="RTL"); where thekindargument is used as the key. We can specify the HDL path when we configure the register block: configure(uvm_reg_block parent=null,stringhdl_path=""); ...
HDL path to this instance is tb.DUT.ctrl_reg//Add backdoor access using function add_hdl_path_slice// function void add_hdl_path_slice(string name, int offset, int size, bit first=0, string kind="RTL")ctrl.add_hdl_path_slice("ctrl_reg",0,ctrl.get_n_bits());default_map.add_...
this.REGNAME.add_hdl_path_slice("REGNAME", 29, 3); Which eventually writes the relevant 3 msb bits to the regname with backdoor access. Would you kindly provide a small example how to achieve such a class command using rdl hdl_path/hdl_path_slice properties ?