diff --git a/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd b/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd index eeb0b8388dbcf2fba8aa515c005f858227e87c78..aceb82ea9b974f12f2f29d36bd3d5deb9f2ef210 100644 --- a/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd +++ b/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd @@ -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;