Line 74... |
Line 74... |
writeContent_o : out Array1(SWITCH_PORTS-1 downto 0);
|
writeContent_o : out Array1(SWITCH_PORTS-1 downto 0);
|
writeContentData_o : out Array32(SWITCH_PORTS-1 downto 0);
|
writeContentData_o : out Array32(SWITCH_PORTS-1 downto 0);
|
|
|
readFrameEmpty_i : in Array1(SWITCH_PORTS-1 downto 0);
|
readFrameEmpty_i : in Array1(SWITCH_PORTS-1 downto 0);
|
readFrame_o : out Array1(SWITCH_PORTS-1 downto 0);
|
readFrame_o : out Array1(SWITCH_PORTS-1 downto 0);
|
readFrameRestart_o : out Array1(SWITCH_PORTS-1 downto 0);
|
|
readFrameAborted_i : in Array1(SWITCH_PORTS-1 downto 0);
|
|
readContentEmpty_i : in Array1(SWITCH_PORTS-1 downto 0);
|
|
readContent_o : out Array1(SWITCH_PORTS-1 downto 0);
|
readContent_o : out Array1(SWITCH_PORTS-1 downto 0);
|
readContentEnd_i : in Array1(SWITCH_PORTS-1 downto 0);
|
readContentEnd_i : in Array1(SWITCH_PORTS-1 downto 0);
|
readContentData_i : in Array32(SWITCH_PORTS-1 downto 0);
|
readContentData_i : in Array32(SWITCH_PORTS-1 downto 0);
|
|
|
portLinkTimeout_o : out std_logic_vector(23 downto 0);
|
portLinkTimeout_o : out std_logic_vector(23 downto 0);
|
Line 241... |
Line 238... |
lookupData_i : in std_logic_vector(7 downto 0);
|
lookupData_i : in std_logic_vector(7 downto 0);
|
lookupAck_i : in std_logic;
|
lookupAck_i : in std_logic;
|
|
|
readFrameEmpty_i : in std_logic;
|
readFrameEmpty_i : in std_logic;
|
readFrame_o : out std_logic;
|
readFrame_o : out std_logic;
|
readFrameRestart_o : out std_logic;
|
|
readFrameAborted_i : in std_logic;
|
|
readContentEmpty_i : in std_logic;
|
|
readContent_o : out std_logic;
|
readContent_o : out std_logic;
|
readContentEnd_i : in std_logic;
|
readContentEnd_i : in std_logic;
|
readContentData_i : in std_logic_vector(31 downto 0);
|
readContentData_i : in std_logic_vector(31 downto 0);
|
writeFrameFull_i : in std_logic;
|
writeFrameFull_i : in std_logic;
|
writeFrame_o : out std_logic;
|
writeFrame_o : out std_logic;
|
Line 329... |
Line 323... |
slaveData_o=>slaveDataRead(portIndex), slaveAck_o=>slaveAck(portIndex),
|
slaveData_o=>slaveDataRead(portIndex), slaveAck_o=>slaveAck(portIndex),
|
lookupStb_o=>masterLookupStb(portIndex),
|
lookupStb_o=>masterLookupStb(portIndex),
|
lookupAddr_o=>masterLookupAddr(portIndex),
|
lookupAddr_o=>masterLookupAddr(portIndex),
|
lookupData_i=>masterLookupData(portIndex), lookupAck_i=>masterLookupAck(portIndex),
|
lookupData_i=>masterLookupData(portIndex), lookupAck_i=>masterLookupAck(portIndex),
|
readFrameEmpty_i=>readFrameEmpty_i(portIndex), readFrame_o=>readFrame_o(portIndex),
|
readFrameEmpty_i=>readFrameEmpty_i(portIndex), readFrame_o=>readFrame_o(portIndex),
|
readFrameRestart_o=>readFrameRestart_o(portIndex),
|
readContent_o=>readContent_o(portIndex),
|
readFrameAborted_i=>readFrameAborted_i(portIndex),
|
|
readContentEmpty_i=>readContentEmpty_i(portIndex), readContent_o=>readContent_o(portIndex),
|
|
readContentEnd_i=>readContentEnd_i(portIndex), readContentData_i=>readContentData_i(portIndex),
|
readContentEnd_i=>readContentEnd_i(portIndex), readContentData_i=>readContentData_i(portIndex),
|
writeFrameFull_i=>writeFrameFull_i(portIndex), writeFrame_o=>writeFrame_o(portIndex),
|
writeFrameFull_i=>writeFrameFull_i(portIndex), writeFrame_o=>writeFrame_o(portIndex),
|
writeFrameAbort_o=>writeFrameAbort_o(portIndex), writeContent_o=>writeContent_o(portIndex),
|
writeFrameAbort_o=>writeFrameAbort_o(portIndex), writeContent_o=>writeContent_o(portIndex),
|
writeContentData_o=>writeContentData_o(portIndex));
|
writeContentData_o=>writeContentData_o(portIndex));
|
end generate;
|
end generate;
|
Line 428... |
Line 420... |
lookupAck_i : in std_logic;
|
lookupAck_i : in std_logic;
|
|
|
-- Physical port frame buffer interface.
|
-- Physical port frame buffer interface.
|
readFrameEmpty_i : in std_logic;
|
readFrameEmpty_i : in std_logic;
|
readFrame_o : out std_logic;
|
readFrame_o : out std_logic;
|
readFrameRestart_o : out std_logic;
|
|
readFrameAborted_i : in std_logic;
|
|
readContentEmpty_i : in std_logic;
|
|
readContent_o : out std_logic;
|
readContent_o : out std_logic;
|
readContentEnd_i : in std_logic;
|
readContentEnd_i : in std_logic;
|
readContentData_i : in std_logic_vector(31 downto 0);
|
readContentData_i : in std_logic_vector(31 downto 0);
|
writeFrameFull_i : in std_logic;
|
writeFrameFull_i : in std_logic;
|
writeFrame_o : out std_logic;
|
writeFrame_o : out std_logic;
|
Line 448... |
Line 437... |
-- Architecture for SwitchPort.
|
-- Architecture for SwitchPort.
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
architecture SwitchPortImpl of SwitchPort is
|
architecture SwitchPortImpl of SwitchPort is
|
|
|
type MasterStateType is (STATE_IDLE,
|
type MasterStateType is (STATE_IDLE,
|
STATE_WAIT_HEADER_0, STATE_READ_HEADER_0,
|
STATE_ERROR,
|
|
STATE_WAIT_HEADER_0,
|
|
STATE_READ_HEADER_0,
|
STATE_READ_PORT_LOOKUP,
|
STATE_READ_PORT_LOOKUP,
|
STATE_READ_TARGET_PORT,
|
STATE_READ_TARGET_PORT,
|
STATE_WAIT_TARGET_PORT,
|
STATE_WAIT_TARGET_PORT,
|
STATE_WAIT_TARGET_WRITE,
|
STATE_WAIT_TARGET_WRITE,
|
STATE_WAIT_COMPLETE);
|
STATE_WAIT_COMPLETE);
|
Line 483... |
Line 474... |
masterAddr_o <= (others => '0');
|
masterAddr_o <= (others => '0');
|
masterData_o <= (others => '0');
|
masterData_o <= (others => '0');
|
|
|
readContent_o <= '0';
|
readContent_o <= '0';
|
readFrame_o <= '0';
|
readFrame_o <= '0';
|
readFrameRestart_o <= '0';
|
|
elsif (clk'event and clk = '1') then
|
elsif (clk'event and clk = '1') then
|
readContent_o <= '0';
|
readContent_o <= '0';
|
readFrame_o <= '0';
|
readFrame_o <= '0';
|
readFrameRestart_o <= '0';
|
|
|
|
-- REMARK: Add support for aborted frames...
|
|
case masterState is
|
case masterState is
|
|
|
when STATE_IDLE =>
|
when STATE_IDLE =>
|
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
-- Wait for a new packet or content of a new packet.
|
-- Wait for a new packet or content of a new packet.
|
Line 563... |
Line 551... |
masterState <= STATE_READ_PORT_LOOKUP;
|
masterState <= STATE_READ_PORT_LOOKUP;
|
end if;
|
end if;
|
else
|
else
|
-- Unsupported tt-value, discard the frame.
|
-- Unsupported tt-value, discard the frame.
|
readFrame_o <= '1';
|
readFrame_o <= '1';
|
masterState <= STATE_IDLE;
|
masterState <= STATE_ERROR;
|
end if;
|
end if;
|
else
|
else
|
-- End of frame.
|
-- End of frame.
|
-- The frame is too short to contain a valid frame. Discard it.
|
-- The frame is too short to contain a valid frame. Discard it.
|
readFrame_o <= '1';
|
readFrame_o <= '1';
|
masterState <= STATE_IDLE;
|
masterState <= STATE_ERROR;
|
end if;
|
end if;
|
|
|
|
when STATE_ERROR =>
|
|
---------------------------------------------------------------------
|
|
-- Wait one tick for the packet buffer to update its outputs. Then
|
|
-- start waiting for a new packet.
|
|
---------------------------------------------------------------------
|
|
|
|
masterState <= STATE_IDLE;
|
|
|
when STATE_READ_PORT_LOOKUP =>
|
when STATE_READ_PORT_LOOKUP =>
|
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
-- Wait for the address lookup to be complete.
|
-- Wait for the address lookup to be complete.
|
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
|
|
Line 992... |
Line 988... |
|
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
-- Route table access signals.
|
-- Route table access signals.
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
|
|
signal address0 : std_logic_vector(7 downto 0);
|
|
signal address1 : std_logic_vector(7 downto 0);
|
|
signal address2 : std_logic_vector(7 downto 0);
|
|
signal address3 : std_logic_vector(7 downto 0);
|
|
|
|
signal lookupEnable : std_logic;
|
signal lookupEnable : std_logic;
|
signal lookupAddress : std_logic_vector(10 downto 0);
|
signal lookupAddress : std_logic_vector(10 downto 0);
|
signal lookupData : std_logic_vector(7 downto 0);
|
signal lookupData : std_logic_vector(7 downto 0);
|
signal lookupAck : std_logic;
|
signal lookupAck : std_logic;
|
|
|
Line 1815... |
Line 1806... |
LookupProcess: process(clk, areset_n)
|
LookupProcess: process(clk, areset_n)
|
begin
|
begin
|
if (areset_n = '0') then
|
if (areset_n = '0') then
|
lookupAck <= '0';
|
lookupAck <= '0';
|
elsif (clk'event and clk = '1') then
|
elsif (clk'event and clk = '1') then
|
if ((lookupStb_i = '1') and (lookupAck = '0')) then
|
if (lookupAck = '0') then
|
|
if (lookupStb_i = '1') then
|
lookupAck <= '1';
|
lookupAck <= '1';
|
|
end if;
|
else
|
else
|
lookupAck <= '0';
|
lookupAck <= '0';
|
end if;
|
end if;
|
end if;
|
end if;
|
end process;
|
end process;
|
Line 2338... |
Line 2331... |
end process;
|
end process;
|
|
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
-- Interconnection.
|
-- Interconnection.
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
stb_o <= stb_i(selectedMaster);
|
stb_o <= stb_i(selectedMaster) and activeCycle;
|
addr_o <= addr_i(selectedMaster);
|
addr_o <= addr_i(selectedMaster);
|
|
|
Interconnect: for i in 0 to WIDTH-1 generate
|
Interconnect: for i in 0 to WIDTH-1 generate
|
dataM_o(i) <= dataS_i;
|
dataM_o(i) <= dataS_i;
|
ack_o(i) <= ack_i when (selectedMaster = i) else '0';
|
ack_o(i) <= ack_i when (selectedMaster = i) else '0';
|
Line 2391... |
Line 2384... |
|
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
--
|
--
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
architecture SwitchPortInterconnectImpl of SwitchPortInterconnect is
|
architecture SwitchPortInterconnectImpl of SwitchPortInterconnect is
|
--component ChipscopeIcon1 is
|
|
-- port (
|
|
-- CONTROL0 : inout STD_LOGIC_VECTOR ( 35 downto 0 )
|
|
-- );
|
|
--end component;
|
|
--component ChipscopeIlaWb is
|
|
-- port (
|
|
-- CLK : in STD_LOGIC := 'X';
|
|
-- TRIG0 : in STD_LOGIC_VECTOR ( 46 downto 0);
|
|
-- CONTROL : inout STD_LOGIC_VECTOR ( 35 downto 0 )
|
|
-- );
|
|
--end component;
|
|
--signal control : std_logic_vector(35 downto 0);
|
|
--signal trig : std_logic_vector(46 downto 0);
|
|
|
|
signal activeCycle : std_logic;
|
signal activeCycle : std_logic;
|
signal selectedMaster : natural range 0 to WIDTH-1;
|
signal selectedMaster : natural range 0 to WIDTH-1;
|
signal selectedSlave : natural range 0 to WIDTH-1;
|
signal selectedSlave : natural range 0 to WIDTH-1;
|
|
|
begin
|
begin
|
Line 2417... |
Line 2395... |
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
-- Arbitration process.
|
-- Arbitration process.
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
|
|
RoundRobinArbiter: process(areset_n, clk)
|
RoundRobinArbiter: process(areset_n, clk)
|
variable index : natural range 0 to WIDTH-1;
|
variable index : natural range 0 to WIDTH-1 := 0;
|
begin
|
begin
|
if (areset_n = '0') then
|
if (areset_n = '0') then
|
activeCycle <= '0';
|
activeCycle <= '0';
|
selectedMaster <= 0;
|
selectedMaster <= 0;
|
elsif (clk'event and clk = '1') then
|
elsif (clk'event and clk = '1') then
|
Line 2481... |
Line 2459... |
|
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
-- Interconnection matrix.
|
-- Interconnection matrix.
|
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
Interconnect: for i in 0 to WIDTH-1 generate
|
Interconnect: for i in 0 to WIDTH-1 generate
|
slaveCyc_o(i) <= masterCyc_i(selectedMaster) when (selectedSlave = i) else '0';
|
slaveCyc_o(i) <= masterCyc_i(selectedMaster) when ((activeCycle = '1') and (selectedSlave = i)) else '0';
|
slaveStb_o(i) <= masterStb_i(selectedMaster) when (selectedSlave = i) else '0';
|
slaveStb_o(i) <= masterStb_i(selectedMaster) when ((activeCycle = '1') and (selectedSlave = i)) else '0';
|
slaveWe_o(i) <= masterWe_i(selectedMaster);
|
slaveWe_o(i) <= masterWe_i(selectedMaster);
|
slaveAddr_o(i) <= masterAddr_i(selectedMaster);
|
slaveAddr_o(i) <= masterAddr_i(selectedMaster);
|
slaveData_o(i) <= masterData_i(selectedMaster);
|
slaveData_o(i) <= masterData_i(selectedMaster);
|
masterData_o(i) <= slaveData_i(selectedSlave);
|
masterData_o(i) <= slaveData_i(selectedSlave);
|
masterAck_o(i) <= slaveAck_i(selectedSlave) when (selectedMaster = i) else '0';
|
masterAck_o(i) <= slaveAck_i(selectedSlave) when (selectedMaster = i) else '0';
|
end generate;
|
end generate;
|
|
|
-----------------------------------------------------------------------------
|
|
-- Chipscope debugging probe.
|
|
-----------------------------------------------------------------------------
|
|
--trig <= masterCyc_i(selectedMaster) & masterStb_i(selectedMaster) &
|
|
-- masterWe_i(selectedMaster) & masterAddr_i(selectedMaster) &
|
|
-- masterData_i(selectedMaster) & slaveData_i(selectedSlave) &
|
|
-- slaveAck_i(selectedSlave);
|
|
--ChipscopeIconInst: ChipscopeIcon1
|
|
-- port map(CONTROL0=>control);
|
|
--ChipscopeIlaInst: ChipscopeIlaWb
|
|
-- port map(CLK=>clk, TRIG0=>trig, CONTROL=>control);
|
|
|
|
end architecture;
|
end architecture;
|
|
|
|
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|