In reply to vvv:
Few low hanging fruits (from a review perspective, non-exhaustive):
- Avoid uvm_sequence_utils - it is removed from 1.2 onwards
uvm_info,
uvm_error macros are handier than uvm_report_info etc.- seq::body should call crate_item inside the loop (as of now you have it outside the loop) - this will enable late factory overrides.
- Use get_name() for IDs in messages than inventing your own
- Change: scoreboard::connect → scoreboard::connect_phase
- Driver uses posedge/negedge - instead use clocking blocks and avoid edges in driver/monitor
- signal level comparisons could better use === instead of ==
- Better indentation (2 space is what I prefer)
- req.randomize → UVM internally uses a pre-defined ID RNDFLD, better stick to that: e.g.
`uvm_warning("RNDFLD", "Randomization failed in uvm_do_with action")
(In fact I have a tiny macro `vw_uvm_rand for doing that)
10. Where are the assertions BTW? (Perhaps not shown, but ideal to use SVA for standard protocols like this)
Good Luck
Srini
www.verifworks.com