(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 done_field 接下来就需要实例化这些reg_field,实例化的方式有很多,可以在status_reg中...
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) ...
class reg_model extends uvm_reg_block; rand reg_invert invert; … endclass 1. 2. 3. 4. 由此可以判断,对register_model来说,支持randomize操作。可以在uvm_reg_block级别调用randomize函数,也可以在uvm_reg级别,甚至可以在uvm_reg_field级别调用: ...
4. uvm_mem与uvm_reg的联系与差别 一、基本概念 寄存器模型的组成: 寄存器块(uvm_reg_block)由包含很多的寄存器(uvm_reg),也可以有存储器(uvm_mem); 每个寄存器(uvm_reg)都由很多的域(uvm_reg_field)组成; 单个域(uvm_reg_filed)包含多个bit位。
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。