uvm_reg_field是寄存器模型中的最小单位,可以理解为寄存器的1位;uvm_reg是更高一级别的层次,一个uvm_reg至少应包含一个uvm_reg_field;再往上是uvm_reg_block,在其中可以加入多个uvm_reg,也可以加入其他uvm_reg_block,即它支持嵌套;uvm_reg_map则存放所有被加入寄存器模型的寄存器的地址,并将其转换成可以访问的...
uvm_reg_field中的volatile,主要来设置m_check的变量, m_check,主要用在uvm_reg的mirror task,以及read task,(需要map中配置check_on_read) uvm_reg_field中的desired,mirrored,m_parent,m_access变量都是local的,继承类中完全看不到,只能 通过function来得到数据。 m_access,指定field的access policy。 m_writ...
(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...
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中也可以再...
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中会被...
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中...
uvm_reg_no_individual_field_access 是一个宏定义,用于指示寄存器模型不支持对单个字段(field)的独立访问。在默认情况下,UVM 允许对寄存器中的单个字段进行读写操作,但某些硬件设计可能不支持这种细粒度的访问,只能以整个寄存器为单位进行访问。此时,定义 uvm_reg_no_individual_field_access 可以强制所有字段访问都转...
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(),否则寄存器⽐特位可能不对。