Module axi_id_remap

Remap AXI IDs from wide IDs at the slave port to narrower IDs at the master port.

This module is designed to remap an overly wide, sparsely used ID space to a narrower, densely

used ID space. This scenario occurs, for example, when an AXI master has wide ID ports but

effectively only uses a (not necessarily contiguous) subset of IDs.

This module retains the independence of IDs. That is, if two transactions have different IDs at

the slave port of this module, they are guaranteed to have different IDs at the master port of

this module. This implies a lower bound on the [width of IDs on the master

port](#parameter.AxiMstPortIdWidth). If you require narrower master port IDs and can forgo ID

independence, use axi_id_serialize instead.

Internally, a table is used for remapping IDs.

Parameters

AxiSlvPortIdWidth: int unsigned

ID width of the AXI4+ATOP slave port.

AxiSlvPortMaxUniqIds: int unsigned

Maximum number of different IDs that can be in flight at the slave port. Reads and writes are

counted separately (except for ATOPs, which count as both read and write).

It is legal for upstream to have transactions with more unique IDs than the maximum given by

this parameter in flight, but a transaction exceeding the maximum will be stalled until all

transactions of another ID complete.

The maximum value of this parameter is 2**AxiSlvPortIdWidth.

AxiMaxTxnsPerId: int unsigned

Maximum number of in-flight transactions with the same ID.

It is legal for upstream to have more transactions than the maximum given by this parameter in

flight for any ID, but a transaction exceeding the maximum will be stalled until another

transaction with the same ID completes.

AxiMstPortIdWidth: int unsigned

ID width of the AXI4+ATOP master port.

The minimum value of this parameter is the ceiled binary logarithm of AxiSlvPortMaxUniqIds,

because IDs at the master port must be wide enough to represent IDs up to

AxiSlvPortMaxUniqIds-1.

If master IDs are wider than the minimum, they are extended by prepending zeros.

slv_req_t: type

Request struct type of the AXI4+ATOP slave port.

The width of all IDs in this struct must match AxiSlvPortIdWidth.

slv_resp_t: type

Response struct type of the AXI4+ATOP slave port.

The width of all IDs in this struct must match AxiSlvPortIdWidth.

mst_req_t: type

Request struct type of the AXI4+ATOP master port

The width of all IDs in this struct must match AxiMstPortIdWidth.

mst_resp_t: type

Response struct type of the AXI4+ATOP master port

The width of all IDs in this struct must match AxiMstPortIdWidth.

IdxWidth: int unsigned

ZeroWidth:

Ports

clk_i: input logic

Rising-edge clock of all ports

rst_ni: input logic

Asynchronous reset, active low

slv_req_i: input slv_req_t

Slave port request

slv_resp_o: output slv_resp_t

Slave port response

mst_req_o: output mst_req_t

Master port request

mst_resp_i: input mst_resp_t

Master port response

Types

field_t
id_inp_t
idx_t

Signals

wr_free: field_t

rd_free: field_t

both_free: field_t

rd_push_inp_id: id_inp_t

wr_free_oup_id: idx_t

rd_free_oup_id: idx_t

both_free_oup_id: idx_t

wr_push_oup_id: idx_t

rd_push_oup_id: idx_t

wr_exists_id: idx_t

rd_exists_id: idx_t

ar_id_d: idx_t

ar_id_q: idx_t

aw_id_d: idx_t

aw_id_q: idx_t