Entity: AxiStreamMux

Diagram

time TPD_G integer range 0 to 16 PIPE_STAGES_G integer range 1 to 256 NUM_SLAVES_G string MODE_G Slv8Array TDEST_ROUTES_G string TID_MODE_G Slv8Array TID_ROUTES_G integer range 0 to 7 TDEST_LOW_G boolean ILEAVE_EN_G boolean ILEAVE_ON_NOTVALID_G natural range 0 to 4095 ILEAVE_REARB_G boolean REARB_DELAY_G boolean FORCED_REARB_HOLD_G sl axisClk sl axisRst slv(NUM_SLAVES_G-1 downto 0) disableSel sl rearbitrate slv(11 downto 0) ileaveRearb AxiStreamMasterArray(NUM_SLAVES_G-1 downto 0) sAxisMasters AxiStreamSlaveType mAxisSlave AxiStreamSlaveArray(NUM_SLAVES_G-1 downto 0) sAxisSlaves AxiStreamMasterType mAxisMaster

Description


Company : SLAC National Accelerator Laboratory

Description: Block to connect multiple incoming AXI streams into a single encoded

outbound stream. The destination field is updated accordingly.

This file is part of 'SLAC Firmware Standard Library'. It is subject to the license terms in the LICENSE.txt file found in the top-level directory of this distribution and at: https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. No part of 'SLAC Firmware Standard Library', including this file, may be copied, modified, propagated, or distributed except according to

the terms contained in the LICENSE.txt file.

Generics

Generic name Type Value Description
TPD_G time 1 ns
PIPE_STAGES_G integer range 0 to 16 0
NUM_SLAVES_G integer range 1 to 256 4
MODE_G string "INDEXED" Note: Planning to rename "MODE_G" to "TDEST_MODE_G" in a future MAJOR release of SURF
TDEST_ROUTES_G Slv8Array (0 => "--------") In ROUTED mode, an array mapping how TDEST should be assigned for each slave port Each TDEST bit can be set to '0', '1' or '-' for passthrough from slave TDEST.
TID_MODE_G string "PASSTHROUGH" In INDEXED mode, the output TID is set based on the selected slave index In ROUTED mode, TID is set according to the TID_ROUTES_G table In PASSTHROUGH mode, TID is passed through from the slave untouched (default)
TID_ROUTES_G Slv8Array (0 => "--------") In ROUTED mode, an array mapping how TID should be assigned for each slave port
TDEST_LOW_G integer range 0 to 7 0 In INDEXED mode, assign slave index to TDEST at this bit offset
ILEAVE_EN_G boolean false Set to true if interleaving dests
ILEAVE_ON_NOTVALID_G boolean false Rearbitrate when tValid drops on selected channel, ignored when ILEAVE_EN_G=false
ILEAVE_REARB_G natural range 0 to 4095 0 Max number of transactions between arbitrations, 0 = unlimited, ignored when ILEAVE_EN_G=false
REARB_DELAY_G boolean true One cycle gap in stream between during re-arbitration. Set true for better timing, false for higher throughput.
FORCED_REARB_HOLD_G boolean false Block selected slave txns arriving on same cycle as rearbitrate or disableSel from going through, creating 1 cycle gap. This might be needed logically but decreases throughput.

Ports

Port name Direction Type Description
axisClk in sl Clock and reset
axisRst in sl
disableSel in slv(NUM_SLAVES_G-1 downto 0) Slaves
rearbitrate in sl
ileaveRearb in slv(11 downto 0)
sAxisMasters in AxiStreamMasterArray(NUM_SLAVES_G-1 downto 0)
sAxisSlaves out AxiStreamSlaveArray(NUM_SLAVES_G-1 downto 0)
mAxisMaster out AxiStreamMasterType Master
mAxisSlave in AxiStreamSlaveType

Signals

Name Type Description
r RegType
rin RegType
sAxisMastersTmp AxiStreamMasterArray(NUM_SLAVES_G-1 downto 0)
pipeAxisMaster AxiStreamMasterType
pipeAxisSlave AxiStreamSlaveType

Constants

Name Type Value Description
DEST_SIZE_C integer bitSize(NUM_SLAVES_G-1)
ARB_BITS_C integer 2**DEST_SIZE_C
REG_INIT_C RegType ( acks => (others => '0'),
ackNum => toSlv(NUM_SLAVES_G-1,
DEST_SIZE_C),
valid => '0',
arbCnt => (others => '0'),
slaves => (others => AXI_STREAM_SLAVE_INIT_C),
master => AXI_STREAM_MASTER_INIT_C)

Types

Name Type Description
RegType

Processes

Description
Override TDESTS and TIDs according to the routing tables

Instantiations

Description
Optional output pipeline registers to ease timing