(4) uvm_reg_field的例化以及configure函数的调用均在uvm_reg的build函数内实现; 1functionvoid uvm_reg_field::configure(uvm_reg parent,2intunsignedsize,3intunsignedlsb_pos,4stringaccess,5bit volatile,6uvm_reg_data_t reset,7bit has_reset,8bit is_rand,9bit individually_accessible);10m_parent =pa...
UVM_PREDICT_DIRECT表示不需要经过read/write行为直接将value值更新到对应的m_mirrored和m_desired值上,并不会考虑该uvm_reg_field的m_access(访问属性)值是否可写(例如RO也会被更新),这种调用存在一定的风险,需要建立在对该uvm_reg_field足够了解,并且如果此时该uvm_reg_field所在的uvm_reg不处于空闲状态,那么pred...
reg_model.INVERT_REG.read(status, value, UVM_FRONTDOOR); 但是如果按照传统的启动sequence,发送transaction等,代码量会有几十倍的增加,而且这只是一个寄存器的访问,如果有上百个寄存器需要访问的时候,寄存器模型的加入优势就更明显了。 UVM寄存器模型的加入也带来了4个新的概念。 uvm_reg_field:这是寄存器模型中...
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中也可以再...
项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源。 uvm_reg_field中的volatile,主要来设置m_check的变量, m_check,主要用在uvm_reg的mirror task,以及read task,(需要map中配置check_on_read) ...
1)当在uvm_reg中定义此field时,不要设置为rand类型。 2)在调用此field的configure函数时,第八个参数设置为0。 3)设置此field的类型为RO、RC、RS、WC、WS、W1C、W1S、W1T、W0C、W0S、W0T、W1SRC、W1CRS、W0SRC、W0CRS、WSRC、WCRS、WOC、WOS中的一种。
uvm_reg_field done_field 接下来就需要实例化这些reg_field,实例化的方式有很多,可以在status_reg中...
update直接更新reg model内的值,需要检测此时没有reg model的frontdoor操作等,即not_busy。 在reg_field中的task中,基本都调用uvm_reg的task,但是read、write根据是否支持individual可能会调用map中的task。 uvm_reg中还有一些hdl_path的function,add_hdl_path_slice,添加到field的path路径。这些路径,之后在map中会被...
uvm_reg_field temp_field_h;temp_field_h=temp_reg.get_field_by_name("FIELD_NAME");temp_field_h.set(write_value);tempreg.update(status);temp_field_h.read(status, read_data);需要注意的是,需要事先调⽤ral_model_h.reset(),否则寄存器⽐特位可能不对。
uvm_reg_field:这是寄存器模型中的最⼩单位。 uvm_reg:它⽐ uvm_reg_field ⾼⼀个级别,但是依然是⽐较⼩的单位。⼀个寄存器中⾄少包含⼀个 uvm_reg_field。 uvm_reg_block:它是⼀个⽐较⼤的单位,在其中可以加⼊许多的 uvm_reg,也可以加⼊其他的 uvm_reg_block。