Professional Documents
Culture Documents
DVClub UVM Registers
DVClub UVM Registers
DVClub UVM Registers
1
Overview
2
Register Model Requirements
4
Register Model Components
user sequence
m_regblock.R0.write(8'ha5);
Register Access API uvm_reg_block
m_regblock.R1.read(data);
. . .
uvm_reg_map
uvm_reg_adapter
predict(uvm_reg_item)
0110110110
0010100100
Predictor
1100100001
uvm_reg_adapter
Bus Agent
S DUT
0110110110
D M bus_item
0010100100
1100100001
active part
5
Register Access API
write()
• Generate a physical write to the DUT register set() Register Model get()
field configuration
function void configure(uvm_reg parent,
int unsigned size,
int unsigned lsb_pos,
class SYS_CTRL_0 extends uvm_reg; string access,
bit volatile,
rand uvm_reg_field SYS_CONF0; uvm_reg_data_t reset,
rand uvm_reg_field SYS_CONF1; bit has_reset,
rand uvm_reg_field SYS_STATUS0; bit is_rand,
bit individually_accessible)
virtual function void build();
SYS_CONF0 = uvm_reg_field::type_id::create("SYS_CONF0");
SYS_CONF0.configure (this, 1, 0, "RW", 0, 1'h0, 1, 1, 1);
. . .
hierarchical
endfunction build() of
regmodel
function new(string name = "SYS_CTRL_0");
super.new(name,16,build_coverage(UVM_NO_COVERAGE));
endfunction
`uvm_object_utils(SYS_CTRL_0)
endclass: SYS_CTRL_0
7
Handling "Quirky" Registers
8
Simple Callback – "Control" field
• Set
Write 0 1 0 1
After predictor
• Clear has observed
Write 1 0 0 0 R/W
value before
class control_reg_field_cbs extends uvm_reg_cbs;
predict()
if (kind == UVM_PREDICT_WRITE)
value = (value === 2'b01) ? 2'b01 : UVM_PREDICT_READ
(value === 2'b10) ? 2'b00 : previous; UVM_PREDICT_WRITE
UVM_PREDICT_DIRECT
endfunction
endclass: control_reg_field_cbs
9
Callback for Locking Behaviour
10
Modeling Status Registers
Does not
task my_scoreboard::update_rtc_count;
int unsigned cnt = 0; use access
policy "RO"
forever begin
@(timer_event_e);
void'(m_regmodel.SYS_RTC_COUNT.predict(cnt++)); Possible to use
end access policy &
callbacks
endtask: update_rtc_count
reg.predict(value, .kind(UVM_PREDICT_WRITE));
reg.predict(value, .kind(UVM_PREDICT_READ));
11
Handling DUT Uncertainty
Register Model 0 1
endclass: my_reg_field
12
Using Extension Information
return bus_trans;
Endfunction: reg2bus
13
Synchronising to Register Access
ev_timer_start.wait_trigger();
. . .
endtask: model_timer
14
Conclusions
15
Energy Management Excellence
Questions ?
16