Implementing A Custom AXI4 Master/Slave Using hls::FIFO
(Ask a Question)In addition to inferring an AXI4-stream interface as shown in the example above,
hls::FIFO
can also be used to implement a custom AXI4 slave or AXI4 master.
The AXI4 interface protocol has 5 channels, read address (AR), read data (R), write address
(AW), write data (W), and write response (B). Each channel is an AXI4 stream interface and can
be described in C++ as a hls::FIFO
object. For example, the read address
channel has an address signal and a length signal. The AXI4 channel can be implemented as
following in C++ to get the corresponding AR channel in the RTL interface.
struct RdAddrSignals { uint32_t addr; uint8_t len; }; void MyTopFunctoin (hls::FIFO<RdAddrSignals> ar) { RdAddrSignals ar_sig; ar_sig.addr = 0x2000; ar_sig.len = 7; // 8-beat burst. ar.write(ar_sig); }
module MyTopFunction ( input clock, input reset, input ar_ready, output ar_valid, output [31:0] ar_addr, output [7:0] ar_len );