In my UVM regmodel generator I have added per uvm reg class definition covergroup on register field values.
Coverage is properly enabled both on address map and field values.
while reviewing coverage on status register I saw that coverage collection doesn’t match the read transaction performed.
In the uvm_reg_predcitor write function I see that coverage collection is sampled before the register field values are updated:
begin
uvm_reg_block blk = rg.get_parent();
blk.XsampleX(map_info.offset, <--- blk and all the blks/regs under it are sampled
reg_item.kind == UVM_READ,
local_map);
end
rg.do_predict(reg_item, predict_kind, rw.byte_en); <--- register field values are updated
This means covergroup on reg field values is sampled with previous value and not the current one.
In write access, I see the updated value only because I’m using set uvm_reg_field API before performing the write. Meaning when monitoring transactions not initiated by regmodel I will see same issue in write access.
Am I missing something here? what should I do in order to collect coverage on current register access value?
Regards,
Tomer