uvm_reg_field:包含uvm_reg_data_t类型的三个成员变量value,m_mirrored,m_desire。 uvm_reg:包含成员变量m_fields,加入各个uvm_reg_field。 uvm_reg_block:uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再...
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...
field automation机制还提供自动得到使用config_db::set设置的参数的功能 field automation机制中标志位的使用 对于多出来的这个ecc_err字段,是不是也应该用uvm_field_int宏来注册呢?如果不使用宏注册的话,那么当调用print函数时,在显示结果中就看不到其值,但是如果使用了宏,结果就是这个根本就不需要在pack和unpack...
data_regmodel_inblk = RAL_data_regmodel::type_id::create("data_regmodel_inblk");//实例化reg_model data_regmodel_inblk.configure( .blk_parent(this));//reg_model只需要指定层次结构,里面的reg_field的参数已经在定义里指定了。 data_regmodel_inblk.build();//build出reg_model里面的全部reg_f...
无论是uvm_reg,还是uvm_field、uvm_block,都是支持randomize()。 1 2 3 assert(rm.invert.reg_data.randomize()); assert(rm.invert.randomize()); assert(rm.randomize()): 当寄存器随机化后,期望值会被随机,但是镜像值不变,之后调用update任务,可以更新DUT中的寄存器值。
路桑也同意他的观点,UVM寄存器模型的理解是不那么容易的,譬如你想获取某个寄存器的mirror value,那么你是无法在UVM环境中查找到它的值的,而你只可以查到它每个reg_field的mirror value!因为UVM环境中的最小单元是uvm_reg_field,而不是uvm_reg! OK...以上描述的问题可以这样归类: ...
uvm_reg_map, uvm_mem, uvm_reg_field, uvm_reg, uvm_reg_file, uvm_reg_block 等与寄存器相关的众多的类都是派生自uvm_object,它们都是用于register model。 uvm_phase :派生自uvm_object,主要作用为控制uvm_component的行为方式,使得uvm_component平滑地在各个不同的phase之间依次运转。 uvm_driver :所有的...
无论是uvm_reg,还是uvm_field、uvm_block,都是支持randomize()。 assert(rm.invert.reg_data.randomize()); assert(rm.invert.randomize()); assert(rm.randomize()): 1. 2. 3. 当寄存器随机化后,期望值会被随机,但是镜像值不变,之后调用update任务,可以更新DUT中的寄存器值。
`uvm_warning("RegModel", {"Trying to predict value of field '", get_name(),"' while register '",m_parent.get_full_name(),"' is being accessed"}) rw.status=UVM_NOT_OK; end end endcase//update the mirror with predicted valuem_mirrored =field_val; ...
If the register is mapped in more than one address map, the default address map of the parent block is used. Whether a register field can be read or written depends on both the field’s configured access policy (see <uvm_reg_field::configure>) and the register’s accessibility rights in...