I use the Axi4Lite VVC as a master to access an AXI slave in the DUT from two different processes. One of the processes is checking on and interrupt coming from the DUT/slave indicating an arriving data. How do I make sure to not miss the edge detection of the interrupt and carry out the axi access from one process and wait for it to complete to start the same time the AXI access in the other process. Is there any which handles this communicatio or how are interrupts handled with VVCs in UVVM?
Hi, just so I understand your setup; you have one process (p1) that trigger an axi access when an interrupt is detected, and another process (p2) that shall trigger another axi access as soon as the axi access in p1 is finished, allowing for p1 to continue monitoring the interrupt?
Yes, exactly. How do I handle the communication of the VVC here? There is only one VVC. Also, is there a way to pipeline the transction with VVC config instead of using the await_completion command after every transaction?
Hi,
The VVCs have command queues, so passing multiple commands to them should not be a problem as long as they are sent in the correct order. If p1 simply waits for an interrupt, executes an AXI access, and then goes back to monitoring interrupts, you might not need to explicitly wait for the VVC to finish the command—unless you expect a new interrupt to occur while the VVC is still handling the previous one.
One approach is to use a synchronizer signal: p1 can drive this signal once its AXI access is completed (e.g. gen_pulse(axi_sync_signal, 0 ns);
), and p2 can wait for that signal before issuing the second AXI access.
Alternatively, is there any particular reason why you cannot combine both accesses into the same process (p1)?