I want to test a receiver with the following ports:
Details about the arrows in the diagram above:
Control/Status Registers:
Data:
BRAM: i don't think it's important here, as I have to create an agent for that anyway
The control flow would look something like this:
How should I go about implementing the agents? UVM suggests having an agent for both Control/Status and Data, which causes me some headache:
From the UVM environment documentation:
Is it ok to merge Control/Status and Data into one agent? What would be the drawbacks? Can (should?) an agent contain multiple drivers?
From the information provided, it seems you have 3 distinct interfaces (groups of signals) connecting to the DUT:
This means you will have 3 different SystemVerilog interface
's, which leads to 3 different uvm_agent
's.
For the Control/Status Registers agent, consider using an array of 16 agents (one for each of the 32-bit groupings).
When you create a test, you likely need to coordinate the sequences running on the different agents. A virtual sequencer is a standard UVM practice and may be appropriate in your case. It is hard to say whether or not it is overkill in this case. Keep in mind that design verification is not trivial.
Can (should?) an agent contain multiple drivers?
No, a uvm_agent
should consist of at most one uvm_driver
.