UVM RAL Model中get_reg_by_name應用詳解
一、Register定義
DBG_MSB_0
DBG_MSB_1
DBG_MSB_2
DBG_MSB_3
DBG_MSB_4
DBG_MSB_5
DBG_MSB_6
DBG_MSB_7
- 現在有沒有一種辦法在循環體中Read這些Register呢?答案是肯定的
二、通過ral_model讀寫Register的方法
sys_ral_model ral_model;
ral_model.xxx_blk.REG_NAME.read(.states(states),
.value(read_data),
.path(UVM_FRONTDOOR),
.parent(this)
);
ral_model.xxx_blk.REG_NAME.write(.states(states),
.value(write_data),
.path(UVM_FRONTDOOR),
.parent(this)
);
三、在循環體中讀Register
- 若果現在需要Read一中所列的Register,那麼可以通過下面的方法實現
bit [31:0] read_data_q[$];
bit [31:0] read_data;
string reg_name_tmp;
uvm_reg reg_name;
uvm_reg_field reg_field;
for(int i = 0; i < 8; i++) begin
reg_name_tmp = $sformatf("DBG_MSB_%d", i);
reg_name = ral_model.xxx_blk.get_reg_by_name(reg_name_tmp);
ral_model.xxx_blk.reg_name.read(.states(states),
.value(read_data),
.path(UVM_FRONTDOOR),
.parent(this)
);
read_data_q.push_back(read_data);
end