Hi,
I’m completely new to UVM and I’d like to consult on the architecture of test environment
I have an simple FPGA with:
- Interface to the CPU host
- A few peripherals with its own registers, hooked to the CPU bus and Interfaces to external world.
- Those peripherals do communicate with each other internally
I will create UVC for each interface. I have a few questions as follow:
Q1) a) Should I have a central register model at the top and all UVCs will reference to this model?
b) OR should each UVC have its own register model?
With b) it’s easier to bring the UVC from project to project but because the peripherals do communicate with each other, this makes things really messy.
Q2) a) For scoreboard, should I have a central scoreboard that recieves transactions from all UVC then perform checks (most examples/books do it this way)?
b) OR should I create a checker inside each UVC and perform checks internally. For example, the SPI slave UVC would have to monitor 2 interfaces: the CPU interface and the SPI interface to check if the SPI frames are generated correctly.
In summary:
- Where should we put the register model, Central at top or inside UVC?
- How to deal with the case where peripherals are communicating with each other. What kind of ports should be used at each UVC to facilitate this?
- Where should we put the checker, central at top or inside each UVC?
Thank you!
Jeff