Hello All,
I wanted to implement the driver for the AXI3 protocol. As protocol has five independent channels, we have a multiple way to implement the protocol, like five drivers for each channel, single driver with multiple task but I want it to be done via five sequencer connection with single driver, so some one please can explain how it’s possible or what is the best way to do this?
Second question is, if I want to do this with single sequencer how can I use sequwnce REQ FIFO to deal with Address and data driving parallelly and independently? Also what is the default size(depth)of the REQ FIFO inside the sequencer?
Thanks in Advance!
In reply to Harshad:
I have not implemented an AXI testbench, so I’m not sure 5 truly separate channels is the best way to model this. For example, for a single write command, the write request and write response are related.
The TLM connection between a sequencer and driver is a 1:1 connection. You can start multiple sequences on a single sequencer. On the other end, the driver’s run_phase() can call seq_item_port.get(req) to get a request, decode the type, and call separate methods for each. These methods can use fork-join_none to spawn a thread to process the request and return the response. When a driver calls get(req), the sequence’s finish_item(req) returns without waiting for the driver to call item_done(). This frees up the sequencer to process the next sequence / item.
In reply to chrisspear:
Thanks for reply!
Please share example if you have any.