1classmcdf_rgm extends uvm_reg_block;2...3virtualfunctionvoidbuild();4slv_en = slv_en_reg::type_id::create("slv_en");5slv_en.configure(this);6slv_en.build();78parity_err_clr = parity_err_clr_reg::type_id::create("parity_err_clr");9parity_err_clr.configure(this);10parity_er...
functionvoiduvm_reg_field::configure(uvm_reg parent,intunsigned size,intunsigned lsb_pos,stringaccess, bitvolatile, uvm_reg_data_t reset, bit has_reset, bit is_rand, bit individually_accessible); m_parent=parent;if(size ==0) begin `uvm_error("RegModel", $sformatf("Field \"%s\" cannot...
regm.lock_model(); endfunction 因为是最简单的寄存器模型,因此regm的configure我们全部采用默认参数,即regm不再处于某个uvm_reg_block中,且没有后门操作。 create_map,用于uvm_reg_block直接定义,创建并且配置一个uvm_reg_map对象,相关配置由本函数的参数提供: · string name,定义map的名字 · uvm_reg_addr_...
这时候我们在configure的时候就不能简单的configure单个寄存器,因为实际的hierarchy中并没有这样的寄存器,我们需要将该寄存器包含的所有uvm_reg_field以uvm_hdl_path_slice的形式通过add_hdl_path的形式配置给该寄存器,这样我们在执行backdoor_read和和write的时候才能正确执行,否则就会报对应backdoor hierarchy不存在的warni...
在实例化后reg_model还要做四件事:第一是调用configure函数,其第一个参数是parent block,由于是最顶层的reg_block,因此填写null,第二个参数是后门访问路径 第二是调用build函数,将所有的寄存器实例化 第三是调用lock_model函数,调用此函数后,reg_model中就不能再加入新的寄存器了 第四是调用reset函数,如果不调用...
一、reg_model的实现 uvm_reg_field 用来针对寄存器功能域来构建对应的比特位 uvm_reg 与寄存器相匹配,其内部可以例化和配置多个uvm_reg_field对象(uvm_object) uvm_mem 匹配硬件存储模型 uvm_reg_map 用来指定寄存器列表中各个寄存器的偏移地址、访问属性以及对应的总线 uvm_reg_block 可以容纳多个寄存器(uvm_reg)...
reg model的coverage设置, 1) include_coverage,是一个全局性的coverage开关的设置, 2) build_coverage,一般是在configure的时候,初始化model中的变量的函数。 3) has_coverage,在new covergroup的时候,进行选择, 4) set_coverage和get_coverage,是在sample的时候,进行选择。
当然,reg_block中的add_reg关联操作也会在reg的configure中被调用。至此,一个完整的reg_block创建完成...
the apb_agentconfigure_apb_agent(m_apb_cfg);// More to followendfunction:build_phase// Convenience function to configure the env// This can be overloaded by extensions to this base classfunctionvoidspi_test_base::configure_env(spi_env_config cfg);cfg.has_functional_coverage=1;cfg.has_reg_...
Filename regmodel.sv class dummy_reg extends uvm_reg; `uvm_object_utils(dummy_reg) rand uvm_reg_field F; ... virtual function void build(); F = uvm_reg_field::create("F"); F.configure(this, 8, 0, "RW", 1, 8'h00, 1, 1, 1); ...