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

Back pressure process update

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