UVM_NO_CHECK : UVM_CHECK;24m_individually_accessible =individually_accessible;2526if(has_reset)27set_reset(reset);28else29uvm_resource_db#(bit)::set({"REG::", get_full_name()},30"NO_REG_HW_RESET_TEST",1);3132m_parent.add_field(this);3334if(!m_policy_names.exists(m_access))begin...
value都赋值成我们预先设置的reset值(reset值即可以是默认的key="HARD",也可以是我们预先定义的key对应的reset值),同时将m_written变量赋值为0表示该uvm_reg_field没有被写过,纵观整个uvm_reg_field类的定义,只有在do_predict()函数里才有涉及到将m_written赋值为1的情况,后面我们再具体介绍do_predict()函数,这...
1my_reg1.myfield2.set(0x11);2my_reg1.myfield3.set(1);3my_reg1.update(); 2.2 update源码 1//uvm_reg_field.svh2functionbit uvm_reg_field::needs_update();3needs_update = (m_mirrored != m_desired) |m_volatile;4endfunction: needs_update56//uvm_reg.svh7functionbit uvm_reg::need...
update的时候,write的值是根据regmodel目前的值,来写进去的,也就是set field的值,write函数其实只是写入改变了的field。 所有的field都没有更新时,是不会进行update操作的。 update直接更新reg model内的值,需要检测此时没有reg model的frontdoor操作等,即not_busy。 在reg_field中的task中,基本都调用uvm_reg的ta...
rand uvm_reg_field enable; //control for enabling the DUT `uvm_object_utils(cfs_dut_reg_config) function new(string name = "cfs_dut_reg_config"); //specify the name of the register, its width in bits and if it has coverage
我们需要将该寄存器包含的所有uvm_reg_field以uvm_hdl_path_slice的形式通过add_hdl_path的形式配置给该寄存器,这样我们在执行backdoor_read和和write的时候才能正确执行,否则就会报对应backdoor hierarchy不存在的warning信息,转而使用frontdoor实现,关于这一点可以参考文章最后代码示例中的jb_recipe_reg寄存器的后门访问...
sequencer.get_full_name,"'"},UVM_MEDIUM) end m_sequencer = sequencer; m_adapter = adapter; endfunction 对adapter的调用发生在uvm_reg_map的内部,详细调用reg2bus和bus2reg的过程见下节: 寄存器模型组成 uvm_reg_field:包含uvm_reg_data_t类型的三个成员变量value,m_mirrored,m_desire。
uvm_reg_item:用于寄存器模型中。uvm_phase:控制uvm_component的行为,用于在不同phase间平滑运转。与寄存器相关的类:如uvm_reg_map,uvm_mem,uvm_reg_field,uvm_reg等,均派生自uvm_object。派生自uvm_component的常用类:uvm_driver:向sequencer请求并处理sequence_item,实现从transaction到DUT端口...
uvm_reg_field done_field 接下来就需要实例化这些reg_field,实例化的方式有很多,可以在status_reg中...
每个组件在树结构中的hierarchy路径由get_full_name函数获取。类似地,uvm_reg也利用了parent和children机制实现层次化结构。在uvm_reg_block中,包含多个uvm_reg;在uvm_reg中,存在多个uvm_field。uvm_reg_block包含uvm_reg的children;uvm_reg包含uvm_field的children;uvm_field包含uvm_reg的parent。uvm...