Skip to content
Snippets Groups Projects
Commit f8b0e70c authored by joachim.schmidt's avatar joachim.schmidt
Browse files

Back pressure process update

parent 997921ee
No related branches found
Tags v0.9.1
No related merge requests found
......@@ -15,7 +15,7 @@
-- Tool version: 2019.2
-- Description: scalp_firmware
--
-- Last update: 2020-11-07
-- Last update: 2020-11-08
--
---------------------------------------------------------------------------------
......@@ -711,114 +711,118 @@ begin
BackPressurexB : block is
signal NorthSendXOFFxSN : std_ulogic := '0';
signal NorthSendXOFFxSP : std_ulogic := '0';
signal EastSendXOFFxSN : std_ulogic := '0';
signal EastSendXOFFxSP : std_ulogic := '0';
signal SouthSendXOFFxSN : std_ulogic := '0';
signal SouthSendXOFFxSP : std_ulogic := '0';
signal WestSendXOFFxSN : std_ulogic := '0';
signal WestSendXOFFxSP : std_ulogic := '0';
-- North
signal NorthNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal NorthNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal NorthNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal NorthNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal NorthNFCValidxSN : std_ulogic := '0';
signal NorthNFCValidxSP : std_ulogic := '0';
signal NorthProgFullxSN : std_ulogic := '0';
signal NorthProgFullxSP : std_ulogic := '0';
signal NorthProgEmptyxSN : std_ulogic := '0';
signal NorthProgEmptyxSP : std_ulogic := '0';
signal NorthNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal NorthNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal NorthNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal NorthNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal NorthNFCValidxSN : std_ulogic := '0';
signal NorthNFCValidxSP : std_ulogic := '0';
-- East
signal EastNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal EastNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal EastNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal EastNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal EastNFCValidxSN : std_ulogic := '0';
signal EastNFCValidxSP : std_ulogic := '0';
signal EastProgFullxSN : std_ulogic := '0';
signal EastProgFullxSP : std_ulogic := '0';
signal EastProgEmptyxSN : std_ulogic := '0';
signal EastProgEmptyxSP : std_ulogic := '0';
signal EastNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal EastNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal EastNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal EastNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal EastNFCValidxSN : std_ulogic := '0';
signal EastNFCValidxSP : std_ulogic := '0';
-- South
signal SouthNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal SouthNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal SouthNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal SouthNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal SouthNFCValidxSN : std_ulogic := '0';
signal SouthNFCValidxSP : std_ulogic := '0';
signal SouthProgFullxSN : std_ulogic := '0';
signal SouthProgFullxSP : std_ulogic := '0';
signal SouthProgEmptyxSN : std_ulogic := '0';
signal SouthProgEmptyxSP : std_ulogic := '0';
signal SouthNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal SouthNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal SouthNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal SouthNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal SouthNFCValidxSN : std_ulogic := '0';
signal SouthNFCValidxSP : std_ulogic := '0';
-- West
signal WestNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal WestNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal WestNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal WestNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal WestNFCValidxSN : std_ulogic := '0';
signal WestNFCValidxSP : std_ulogic := '0';
signal WestProgFullxSN : std_ulogic := '0';
signal WestProgFullxSP : std_ulogic := '0';
signal WestProgEmptyxSN : std_ulogic := '0';
signal WestProgEmptyxSP : std_ulogic := '0';
signal WestNFCStatexDN : t_nfc_states := C_NFC_IDLE;
signal WestNFCStatexDP : t_nfc_states := C_NFC_IDLE;
signal WestNFCDataxDN : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal WestNFCDataxDP : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
signal WestNFCValidxSN : std_ulogic := '0';
signal WestNFCValidxSP : std_ulogic := '0';
begin -- block BackPressurexB
NorthSendXONxAS : NorthSendXOFFxSN <= '1' when
(NorthRXFromFifoS2MxD.ReadyxS = '0') or
(NorthFifoStatusxD.ProgFullxS = '1') else
'0';
EastSendXONxAS : EastSendXOFFxSN <= '1' when
(EastRXFromFifoS2MxD.ReadyxS = '0') or
(EastFifoStatusxD.ProgFullxS = '1') else
'0';
SouthSendXONxAS : SouthSendXOFFxSN <= '1' when
(SouthRXFromFifoS2MxD.ReadyxS = '0') or
(SouthFifoStatusxD.ProgFullxS = '1') else
'0';
WestSendXONxAS : WestSendXOFFxSN <= '1' when
(WestRXFromFifoS2MxD.ReadyxS = '0') or
(WestFifoStatusxD.ProgFullxS = '1') else
'0';
-- NFC Data and valid signals
NorthNFCDataxAS : NorthTXNFCM2SxD.DataxD <= NorthNFCDataxDP;
NorthNFCValidxAS : NorthTXNFCM2SxD.ValidxS <= NorthNFCValidxSP;
EastNFCDataxAS : EastTXNFCM2SxD.DataxD <= EastNFCDataxDP;
EastNFCValidxAS : EastTXNFCM2SxD.ValidxS <= EastNFCValidxSP;
SouthNFCDataxAS : SouthTXNFCM2SxD.DataxD <= SouthNFCDataxDP;
SouthNFCValidxAS : SouthTXNFCM2SxD.ValidxS <= SouthNFCValidxSP;
WestNFCDataxAS : WestTXNFCM2SxD.DataxD <= WestNFCDataxDP;
WestNFCValidxAS : WestTXNFCM2SxD.ValidxS <= WestNFCValidxSP;
NorthNFCDataxAS : NorthTXNFCM2SxD.DataxD <= NorthNFCDataxDP;
NorthNFCValidxAS : NorthTXNFCM2SxD.ValidxS <= NorthNFCValidxSP;
NorthProgFullxAS : NorthProgFullxSN <= NorthFifoStatusxD.ProgFullxS;
NorthProgEmptyxAS : NorthProgEmptyxSN <= NorthFifoStatusxD.ProgEmptyxS;
EastNFCDataxAS : EastTXNFCM2SxD.DataxD <= EastNFCDataxDP;
EastNFCValidxAS : EastTXNFCM2SxD.ValidxS <= EastNFCValidxSP;
SouthNFCDataxAS : SouthTXNFCM2SxD.DataxD <= SouthNFCDataxDP;
SouthNFCValidxAS : SouthTXNFCM2SxD.ValidxS <= SouthNFCValidxSP;
WestNFCDataxAS : WestTXNFCM2SxD.DataxD <= WestNFCDataxDP;
WestNFCValidxAS : WestTXNFCM2SxD.ValidxS <= WestNFCValidxSP;
UpdateRegxP : process (AuroraClkMasterxC.PllNotLockedxS,
AuroraClkMasterxC.UserClkxC) is
begin -- process UpdateRegxP
if not AuroraClkMasterxC.PllNotLockedxS then
NorthSendXOFFxSP <= '0';
EastSendXOFFxSP <= '0';
SouthSendXOFFxSP <= '0';
WestSendXOFFxSP <= '0';
NorthNFCStatexDP <= C_NFC_IDLE;
NorthNFCDataxDP <= (others => '0');
NorthNFCValidxSP <= '0';
EastNFCStatexDP <= C_NFC_IDLE;
EastNFCDataxDP <= (others => '0');
EastNFCValidxSP <= '0';
SouthNFCStatexDP <= C_NFC_IDLE;
SouthNFCDataxDP <= (others => '0');
SouthNFCValidxSP <= '0';
WestNFCStatexDP <= C_NFC_IDLE;
WestNFCDataxDP <= (others => '0');
WestNFCValidxSP <= '0';
NorthProgFullxSP <= '0';
NorthProgEmptyxSP <= '0';
NorthNFCStatexDP <= C_NFC_IDLE;
NorthNFCDataxDP <= (others => '0');
NorthNFCValidxSP <= '0';
EastProgFullxSP <= '0';
EastProgEmptyxSP <= '0';
EastNFCStatexDP <= C_NFC_IDLE;
EastNFCDataxDP <= (others => '0');
EastNFCValidxSP <= '0';
SouthProgFullxSP <= '0';
SouthProgEmptyxSP <= '0';
SouthNFCStatexDP <= C_NFC_IDLE;
SouthNFCDataxDP <= (others => '0');
SouthNFCValidxSP <= '0';
WestProgFullxSP <= '0';
WestProgEmptyxSP <= '0';
WestNFCStatexDP <= C_NFC_IDLE;
WestNFCDataxDP <= (others => '0');
WestNFCValidxSP <= '0';
elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
NorthSendXOFFxSP <= NorthSendXOFFxSN;
EastSendXOFFxSP <= EastSendXOFFxSN;
SouthSendXOFFxSP <= SouthSendXOFFxSN;
WestSendXOFFxSP <= WestSendXOFFxSN;
NorthNFCStatexDP <= NorthNFCStatexDN;
NorthNFCDataxDP <= NorthNFCDataxDN;
NorthNFCValidxSP <= NorthNFCValidxSN;
EastNFCStatexDP <= EastNFCStatexDN;
EastNFCDataxDP <= EastNFCDataxDN;
EastNFCValidxSP <= EastNFCValidxSN;
SouthNFCStatexDP <= SouthNFCStatexDN;
SouthNFCDataxDP <= SouthNFCDataxDN;
SouthNFCValidxSP <= SouthNFCValidxSN;
WestNFCStatexDP <= WestNFCStatexDN;
WestNFCDataxDP <= WestNFCDataxDN;
WestNFCValidxSP <= WestNFCValidxSN;
NorthProgFullxSP <= NorthProgFullxSN;
NorthProgEmptyxSP <= NorthProgEmptyxSN;
NorthNFCStatexDP <= NorthNFCStatexDN;
NorthNFCDataxDP <= NorthNFCDataxDN;
NorthNFCValidxSP <= NorthNFCValidxSN;
EastProgFullxSP <= EastProgFullxSN;
EastProgEmptyxSP <= EastProgEmptyxSN;
EastNFCStatexDP <= EastNFCStatexDN;
EastNFCDataxDP <= EastNFCDataxDN;
EastNFCValidxSP <= EastNFCValidxSN;
SouthProgFullxSP <= SouthProgFullxSN;
SouthProgEmptyxSP <= SouthProgEmptyxSN;
SouthNFCStatexDP <= SouthNFCStatexDN;
SouthNFCDataxDP <= SouthNFCDataxDN;
SouthNFCValidxSP <= SouthNFCValidxSN;
WestProgFullxSP <= WestProgFullxSN;
WestProgEmptyxSP <= WestProgEmptyxSN;
WestNFCStatexDP <= WestNFCStatexDN;
WestNFCDataxDP <= WestNFCDataxDN;
WestNFCValidxSP <= WestNFCValidxSN;
end if;
end process UpdateRegxP;
NorthNFCStatexP : process (NorthNFCDataxDP, NorthNFCStatexDP,
NorthNFCValidxSP, NorthSendXOFFxSN,
NorthSendXOFFxSP,
NorthNFCValidxSP, NorthProgEmptyxSN,
NorthProgEmptyxSP, NorthProgFullxSN,
NorthProgFullxSP,
NorthRXFromFifoS2MxD.ReadyxS,
NorthTXUFCS2MxD.ReadyxS) is
begin -- process NorthNFCStatexP
-- Default values
......@@ -830,14 +834,16 @@ begin
when C_NFC_IDLE =>
NorthNFCStatexDN <= C_NFC_IS_XON;
when C_NFC_IS_XON =>
if NorthSendXOFFxSP = '0' and NorthSendXOFFxSN = '1' then
if (NorthProgFullxSP = '0' and NorthProgFullxSN = '1') or
(NorthRXFromFifoS2MxD.ReadyxS = '0') then
NorthNFCDataxDN <= C_NFC_XOFF;
NorthNFCValidxSN <= '1';
NorthNFCStatexDN <= C_NFC_SEND_XOFF;
end if;
when C_NFC_IS_XOFF =>
if NorthSendXOFFxSP = '1' and NorthSendXOFFxSN = '0' then
if (NorthProgEmptyxSP = '0' and NorthProgEmptyxSN = '1') and
(NorthRXFromFifoS2MxD.ReadyxS = '1') then
NorthNFCDataxDN <= C_NFC_XON;
NorthNFCValidxSN <= '1';
NorthNFCStatexDN <= C_NFC_SEND_XON;
......@@ -861,8 +867,10 @@ begin
end process NorthNFCStatexP;
EastNFCStatexP : process (EastNFCDataxDP, EastNFCStatexDP,
EastNFCValidxSP, EastSendXOFFxSN,
EastSendXOFFxSP,
EastNFCValidxSP, EastProgEmptyxSN,
EastProgEmptyxSP, EastProgFullxSN,
EastProgFullxSP,
EastRXFromFifoS2MxD.ReadyxS,
EastTXUFCS2MxD.ReadyxS) is
begin -- process EastNFCStatexP
-- Default values
......@@ -874,14 +882,16 @@ begin
when C_NFC_IDLE =>
EastNFCStatexDN <= C_NFC_IS_XON;
when C_NFC_IS_XON =>
if EastSendXOFFxSP = '0' and EastSendXOFFxSN = '1' then
if (EastProgFullxSP = '0' and EastProgFullxSN = '1') or
(EastRXFromFifoS2MxD.ReadyxS = '0') then
EastNFCDataxDN <= C_NFC_XOFF;
EastNFCValidxSN <= '1';
EastNFCStatexDN <= C_NFC_SEND_XOFF;
end if;
when C_NFC_IS_XOFF =>
if EastSendXOFFxSP = '1' and EastSendXOFFxSN = '0' then
if (EastProgEmptyxSP = '0' and EastProgEmptyxSN = '1') and
(EastRXFromFifoS2MxD.ReadyxS = '1') then
EastNFCDataxDN <= C_NFC_XON;
EastNFCValidxSN <= '1';
EastNFCStatexDN <= C_NFC_SEND_XON;
......@@ -905,8 +915,10 @@ begin
end process EastNFCStatexP;
SouthNFCStatexP : process (SouthNFCDataxDP, SouthNFCStatexDP,
SouthNFCValidxSP, SouthSendXOFFxSN,
SouthSendXOFFxSP,
SouthNFCValidxSP, SouthProgEmptyxSN,
SouthProgEmptyxSP, SouthProgFullxSN,
SouthProgFullxSP,
SouthRXFromFifoS2MxD.ReadyxS,
SouthTXUFCS2MxD.ReadyxS) is
begin -- process SouthNFCStatexP
-- Default values
......@@ -918,14 +930,16 @@ begin
when C_NFC_IDLE =>
SouthNFCStatexDN <= C_NFC_IS_XON;
when C_NFC_IS_XON =>
if SouthSendXOFFxSP = '0' and SouthSendXOFFxSN = '1' then
if (SouthProgFullxSP = '0' and SouthProgFullxSN = '1') or
(SouthRXFromFifoS2MxD.ReadyxS = '0') then
SouthNFCDataxDN <= C_NFC_XOFF;
SouthNFCValidxSN <= '1';
SouthNFCStatexDN <= C_NFC_SEND_XOFF;
end if;
when C_NFC_IS_XOFF =>
if SouthSendXOFFxSP = '1' and SouthSendXOFFxSN = '0' then
if (SouthProgEmptyxSP = '0' and SouthProgEmptyxSN = '1') and
(SouthRXFromFifoS2MxD.ReadyxS = '1') then
SouthNFCDataxDN <= C_NFC_XON;
SouthNFCValidxSN <= '1';
SouthNFCStatexDN <= C_NFC_SEND_XON;
......@@ -949,8 +963,10 @@ begin
end process SouthNFCStatexP;
WestNFCStatexP : process (WestNFCDataxDP, WestNFCStatexDP,
WestNFCValidxSP, WestSendXOFFxSN,
WestSendXOFFxSP,
WestNFCValidxSP, WestProgEmptyxSN,
WestProgEmptyxSP, WestProgFullxSN,
WestProgFullxSP,
WestRXFromFifoS2MxD.ReadyxS,
WestTXUFCS2MxD.ReadyxS) is
begin -- process WestNFCStatexP
-- Default values
......@@ -962,14 +978,16 @@ begin
when C_NFC_IDLE =>
WestNFCStatexDN <= C_NFC_IS_XON;
when C_NFC_IS_XON =>
if WestSendXOFFxSP = '0' and WestSendXOFFxSN = '1' then
if (WestProgFullxSP = '0' and WestProgFullxSN = '1') or
(WestRXFromFifoS2MxD.ReadyxS = '0') then
WestNFCDataxDN <= C_NFC_XOFF;
WestNFCValidxSN <= '1';
WestNFCStatexDN <= C_NFC_SEND_XOFF;
end if;
when C_NFC_IS_XOFF =>
if WestSendXOFFxSP = '1' and WestSendXOFFxSN = '0' then
if (WestProgEmptyxSP = '0' and WestProgEmptyxSN = '1') and
(WestRXFromFifoS2MxD.ReadyxS = '1') then
WestNFCDataxDN <= C_NFC_XON;
WestNFCValidxSN <= '1';
WestNFCStatexDN <= C_NFC_SEND_XON;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment