我们可以通过调用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...
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_...
例码中通过 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]" ...
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一侧的地址映射。 另外,寄存器模型build()函数最后一句以lock_model()结尾,该函数的功能是结束地址映射关系并保证模型不会被其它用户修改。
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_...
源代码中的get_full_hdl_path函数负责获取寄存器的完整HDL路径,这涉及到uvm_hdl_path_concat和uvm_hdl_path_slice等结构,它们用于描述寄存器的物理信息。通过配置或add_hdl_path操作,可以在寄存器模型中存储和管理多个HDL路径,对应不同的寄存器实例。后门读写操作会调用uvm_hdl_read()函数,它是一个...