在进行寄存器写操作时,还有一种方法是使用set,update的方式
下面来介绍一下
首先是set方法
function void uvm_reg::set(uvm_reg_data_t value,
string fname = "",
int lineno = 0);
// Split the value into the individual fields
m_fname = fname;
m_lineno = lineno;
foreach (m_fields[i])
m_fields[i].set((value >> m_fields[i].get_lsb_pos()) &
((1 << m_fields[i].get_n_bits()) - 1));
endfunction: set
其实最终调用的field的set方法,根据之前设置的field的access来设置field的m_desired value,最终的效果就是设置reg的desired value
task uvm_reg::update(output uvm_status_e status,
input uvm_door_e path = UVM_DEFAULT_DOOR,
input uvm_reg_map map = null,
input uvm_sequence_base parent = null,