idma_frontend_wrapper

Accept AXI control traffic in an iDMA register frontend and emit 1-D iDMA requests.

Each control interface has its own chain: an axi_cut, an axi_dw_converter to 32-bit AXI, a second axi_cut, an axi_to_reg_v2 bridge to a 32-bit register interface, the idma_reg64_2d register frontend, a stream_fifo that buffers 2-D requests between the register frontend and the 2-D midend, and an idma_nd_midend that splits each 2-D request into 1-D requests. An idma_transfer_id_gen per interface issues transfer IDs and retires one on each midend completion. NUM_CTRL_INTERFACES and NUM_CTRL_STREAMS must be >= 1. F2M_FIFO_DEPTH is passed unchanged to the stream_fifo DEPTH and is the FIFO depth in requests; fifo_v3 asserts DEPTH > 0.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
NUM_CTRL_INTERFACESint unsigned1Independent control ports, each with its own frontend, FIFO and midend; must be >= 1.
NUM_CTRL_STREAMSint unsigned1Register-frontend streams per control port; must be >= 1. The stream index is unconnected, so all streams share one FIFO and midend.
F2M_FIFO_DEPTHint unsigned4Depth in requests of the FIFO between the register frontend and the 2-D midend; passed unchanged to stream_fifo DEPTH and must be > 0.
BYPASS_DMA_CTRL_FLOPSbit1'b0When set, the control-port axi_cut is a pass-through with no registers. The axi_cut between the width converter and axi_to_reg_v2 is always registered.
NUM_DIMint unsigned2Transfer dimension count of the midend; the 2-D register frontend and two-entry RepWidths match only 2.
REP_WIDTHint unsigned32Width of each midend repetition counter.
CTRL_ADDR_WIDTHint unsigned9Ctrl AXI address width.
CTRL_DATA_WIDTHint unsigned64Ctrl AXI data width; must be >= 32. axi_dw_converter narrows it to the 32-bit register width.
CTRL_ID_WIDTHint unsigned8Ctrl AXI ID width.
CTRL_USER_WIDTHint unsigned12Ctrl AXI user width.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicFrontend clock; the gated frontend clock in idma_wrapper.
rst_niinputlogicAsync reset, active-low.
test_en_iinputlogicTest mode, driven to the request FIFO testmode input.
dma_frontend_wakeup_ooutputlogicHigh while any interface has an AXI control command in flight, a queued request, or a busy midend.
dma_frontend_busy_ooutputlogicHigh while any request FIFO is non-empty or any midend is busy; in-flight AXI control commands are excluded.
dma_ctrl_axi_req_iinputdma_ctrl_req_t [NUM_CTRL_INTERFACES-1:0]AXI control subordinate request per interface.
dma_ctrl_axi_resp_ooutputdma_ctrl_resp_t [NUM_CTRL_INTERFACES-1:0]AXI control subordinate response per interface.
req_ooutputidma_req_t [NUM_CTRL_INTERFACES-1:0]1-D request from each midend.
req_valid_ooutputlogic [NUM_CTRL_INTERFACES-1:0]Outbound request valid.
req_ready_iinputlogic [NUM_CTRL_INTERFACES-1:0]Outbound request ready.
resp_iinputidma_resp_t [NUM_CTRL_INTERFACES-1:0]1-D response to each midend.
resp_valid_iinputlogic [NUM_CTRL_INTERFACES-1:0]Response valid; a response with last set completes the 2-D transfer and retires its ID.
resp_ready_ooutputlogic [NUM_CTRL_INTERFACES-1:0]Midend ready for the backend response.