Part 11 · Senior Prep · Intermediate
RAL Adapter reg2bus Whiteboard Q&A
Model answers on uvm_reg_adapter reg2bus/bus2reg, byte enables, bus direction, predictor hookup, and frontdoor path whiteboard.
Adapter mechanism questions
Q: Whiteboard reg2bus and bus2reg — what each does
[INT][SENIOR][UVM] MODEL ANSWER
Q: reg2bus vs bus2reg?
A:
MECHANISM: reg2bus converts uvm_reg_bus_op (from reg.write) to bus-specific txn
for sequencer. bus2reg converts observed bus txn back to reg_bus_op
for predictor/mirror update.
MOTIVATION: RAL is bus-agnostic — adapter is the only bus-specific layer.
PITFALL: Swapping directions — classic whiteboard fail.
EXAMPLE: reg.write → reg2bus → apb_txn → sequencer → driver → DUT.class apb_reg_adapter extends uvm_reg_adapter;
`uvm_object_utils(apb_reg_adapter)
function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
apb_txn t = apb_txn::type_id::create("t");
t.addr = rw.addr;
t.write = (rw.kind == UVM_WRITE);
t.data = rw.data;
return t;
endfunction
function void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw);
apb_txn t;
if (!$cast(t, bus_item)) `uvm_fatal("ADP", "cast fail")
rw.kind = t.write ? UVM_WRITE : UVM_READ;
rw.addr = t.addr;
rw.data = t.data;
rw.status = t.slverr ? UVM_NOT_OK : UVM_IS_OK;
endfunction
endclassQ: Where does adapter plug into env?
[INT][SENIOR][UVM] MODEL ANSWER
Q: Adapter integration?
A:
MECHANISM: reg_model.default_map.set_sequencer(agt.sqr, adapter);
predictor maps bus mon → bus2reg → mirror.
MOTIVATION: Frontdoor path needs sequencer + adapter pair registered on map.
CONNECT: mon.ap → predictor.bus_in; predictor.map = reg_model.default_map.
PITFALL: Adapter set but sequencer null — reg.write hangs in frontdoor.function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
apb_reg_adapter adp = apb_reg_adapter::type_id::create("adp");
reg_model.default_map.set_sequencer(agt.sqr, adp);
predictor.map = reg_model.default_map;
predictor.adapter = adp;
agt.mon.ap.connect(predictor.bus_in);
endfunctionKey takeaways
reg2bus: RAL → bus txn; bus2reg: bus txn → RAL — do not swap.
set_sequencer(sqr, adapter) on default_map — frontdoor requirement.
Predictor: mon.ap → bus_in + adapter + map.
Common pitfalls
Forgetting supports_byte_enable on adapter — sub-word writes break.
bus2reg status always UVM_IS_OK — slverr paths never propagate.
Field masks and byte order
Q: Sub-word write — how does adapter handle byte_en?
[INT][SENIOR][UVM] MODEL ANSWER
Q: Byte enable handling?
A:
MECHANISM: adapter provides byte_en from reg_bus_op; driver maps to wstrb/pstrb.
MOTIVATION: 32-bit reg in 64-bit bus needs lane selection — field access supplies mask.
PITFALL: Full-width write always — corrupts adjacent fields in same register.
EXAMPLE: STATUS field write sets byte_en=4'b0011 — lower half only.Q: Endianness and address alignment in adapter
[INT][SENIOR][UVM] MODEL ANSWER
Q: Endian / alignment?
A:
MECHANISM: reg offset from map + bus width determines lane shift in data.
MOTIVATION: APB 32-bit at offset 4 in 64-bit word — data in upper half.
PITFALL: Using byte address as word index without >>2 — classic adapter bug.
EXAMPLE: addr=0x4 on 64-bit bus → data << 32 in reg2bus mapping.function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
apb_txn t = apb_txn::type_id::create("t");
int unsigned lane = (rw.addr % (DATA_WIDTH/8));
t.addr = rw.addr;
t.data = rw.data >> (lane * 8); // simplify — interview shows awareness
t.strb = rw.byte_en << lane;
return t;
endfunctionQ: Whiteboard full frontdoor path
[INT][SENIOR][UVM] whiteboard frontdoor
seq.reg.write(status, val, .parent(this))
→ default_map → reg2bus → apb_txn
→ sequencer → driver → DUT pins
DUT → monitor → bus2reg → predictor → mirror update
Narrate each arrow — common 5-minute interview drillKey takeaways
byte_en / strb mapping — required for sub-word RAL writes.
Address lane shift for wide bus — show >>2 and lane awareness.
Draw full frontdoor path — seq to mirror in one diagram.
Common pitfalls
backdoor and frontdoor confused on whiteboard — separate paths.
predictor not connected — mirror stale after frontdoor traffic.