1 ------------------------------------------------------------------------------- 2 -- File : AxiStreamDeMux.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2014-04-25 5 -- Last update: 2016-09-06 6 ------------------------------------------------------------------------------- 8 -- Block to connect a single incoming AXI stream to multiple outgoing AXI 9 -- streams based upon the incoming tDest value. 10 ------------------------------------------------------------------------------- 11 -- This file is part of 'SLAC Firmware Standard Library'. 12 -- It is subject to the license terms in the LICENSE.txt file found in the 13 -- top-level directory of this distribution and at: 14 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 15 -- No part of 'SLAC Firmware Standard Library', including this file, 16 -- may be copied, modified, propagated, or distributed except according to 17 -- the terms contained in the LICENSE.txt file. 18 ------------------------------------------------------------------------------- 21 use ieee.std_logic_1164.
all;
33 MODE_G : := "INDEXED";
-- Or "ROUTED" 75 report "In ROUTED mode, length of TDEST_ROUTES_G: " & 'image(TDEST_ROUTES_G'length) & 84 -- Latch the current value 87 -- Reset strobing signals 90 -- Update tValid register 98 if (MODE_G = "INDEXED") then 99 -- TDEST indicates the output port 101 elsif (MODE_G = "ROUTED") then 102 -- Output port determined by TDEST_ROUTES_G 103 -- Set to invalid idx first, if non match then frame will be dumped 105 -- Search for a matching MASK in ascending order of mask array 113 -- Check for invalid destination 117 -- Check if ready to move data 130 -- Register the variable for next clock cycle 154 end generate GEN_VEC;
PIPE_STAGES_Ginteger range 0 to 16:= 0
PIPE_STAGES_Gnatural range 0 to 16:= 0
array(natural range <> ) of AxiStreamSlaveType AxiStreamSlaveArray
RegType :=(slave => AXI_STREAM_SLAVE_INIT_C,masters =>( others => AXI_STREAM_MASTER_INIT_C)) REG_INIT_C
AxiStreamMasterType :=(tValid => '0',tData =>( others => '0'),tStrb =>( others => '1'),tKeep =>( others => '1'),tLast => '0',tDest =>( others => '0'),tId =>( others => '0'),tUser =>( others => '0')) AXI_STREAM_MASTER_INIT_C
out mAxisMastersAxiStreamMasterArray( NUM_MASTERS_G- 1 downto 0)
out sAxisSlaveAxiStreamSlaveType
in mAxisSlaveAxiStreamSlaveType
out sAxisSlaveAxiStreamSlaveType
AxiStreamMasterArray( NUM_MASTERS_G- 1 downto 0) masters
TDEST_LOW_Ginteger range 0 to 7:= 0
in sAxisMasterAxiStreamMasterType
AxiStreamSlaveType :=(tReady => '0') AXI_STREAM_SLAVE_INIT_C
in sAxisMasterAxiStreamMasterType
array(natural range <> ) of AxiStreamMasterType AxiStreamMasterArray
AxiStreamSlaveArray( NUM_MASTERS_G- 1 downto 0) pipeAxisSlaves
out mAxisMasterAxiStreamMasterType
in mAxisSlavesAxiStreamSlaveArray( NUM_MASTERS_G- 1 downto 0)
TDEST_HIGH_Ginteger range 0 to 7:= 7
AxiStreamMasterArray( NUM_MASTERS_G- 1 downto 0) pipeAxisMasters
TDEST_ROUTES_Gslv8Array :=( 0=> "--------")
NUM_MASTERS_Ginteger range 1 to 32:= 12
MODE_Gstring := "INDEXED"