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 @@
-- 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.
Please register or to comment