1 ------------------------------------------------------------------------------- 2 -- File : AxiReadPathMux.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2014-04-25 5 -- Last update: 2014-04-29 6 ------------------------------------------------------------------------------- 7 -- Description: Block to connect multiple incoming AXI write path interfaces. 8 ------------------------------------------------------------------------------- 9 -- This file is part of 'SLAC Firmware Standard Library'. 10 -- It is subject to the license terms in the LICENSE.txt file found in the 11 -- top-level directory of this distribution and at: 12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 13 -- No part of 'SLAC Firmware Standard Library', including this file, 14 -- may be copied, modified, propagated, or distributed except according to 15 -- the terms contained in the LICENSE.txt file. 16 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.std_logic_arith.
all;
21 use ieee.std_logic_unsigned.
all;
55 -------------------------- 57 -------------------------- 91 ---------------------------- 93 ---------------------------- 100 -- Select address source 102 selAddr.arid := (others => '0');
107 addrRequests := (others=>'0');
112 -- Addr State machine 119 -- Aribrate between requesters 156 ---------------------------- 158 ---------------------------- 160 -- Clear existing valids 167 -- Pass response to destination 187 -- Bypass if single slave 197 -- Readies are direct 207 if (rising_edge(axiClk)) then (S_IDLE_C,S_MOVE_C,S_LAST_C) StateType
AxiReadMasterType :=(arvalid => '0',araddr =>( others => '0'),arid =>( others => '0'),arlen =>( others => '0'),arsize =>( others => '0'),arburst =>( others => '0'),arlock =>( others => '0'),arprot =>( others => '0'),arcache =>( others => '0'),arqos =>( others => '0'),arregion =>( others => '0'),rready => '0') AXI_READ_MASTER_INIT_C
slv( 1023 downto 0) rdata
array(natural range <> ) of AxiReadSlaveType AxiReadSlaveArray
AxiReadSlaveArray( NUM_SLAVES_G- 1 downto 0) slaves
in mAxiReadSlaveAxiReadSlaveType
NUM_SLAVES_Ginteger range 1 to 32:= 4
slv( ARB_BITS_C- 1 downto 0) addrAcks
slv( DEST_SIZE_C- 1 downto 0) addrAckNum
out mAxiReadMasterAxiReadMasterType
array(natural range <> ) of AxiReadMasterType AxiReadMasterArray
RegType :=(addrState => S_IDLE_C,addrAcks =>( others => '0'),addrAckNum =>( others => '0'),addrValid => '0',slaves =>( others => AXI_READ_SLAVE_INIT_C),master => AXI_READ_MASTER_INIT_C) REG_INIT_C
integer := bitSize( NUM_SLAVES_G- 1) DEST_SIZE_C
out sAxiReadSlavesAxiReadSlaveArray( NUM_SLAVES_G- 1 downto 0)
in sAxiReadMastersAxiReadMasterArray( NUM_SLAVES_G- 1 downto 0)
integer := 2** DEST_SIZE_C ARB_BITS_C
AxiReadSlaveType :=(arready => '0',rdata =>( others => '0'),rlast => '0',rvalid => '0',rid =>( others => '0'),rresp =>( others => '0')) AXI_READ_SLAVE_INIT_C