#####################################################################
# Flash & Reboot Control
#####################################################################
- LOCATE COMP "PROGRAMb_OUT" SITE "B15"; # PGRAMN_F1
- IOBUF PORT "PROGRAMb_OUT" IO_TYPE=LVTTL33 PULLMODE=UP ;
+ LOCATE COMP "PROGRAMB_OUT" SITE "B15"; # PGRAMN_F1
+ IOBUF PORT "PROGRAMB_OUT" IO_TYPE=LVTTL33 PULLMODE=UP ;
LOCATE COMP "SPI_CLK_OUT" SITE "G15"; # L1_SPI_F1CLK
LOCATE COMP "SPI_CS_OUT" SITE "J16"; # L1_SPI_F1CS
#####################################################################
# Flash & Reboot Control
#####################################################################
- LOCATE COMP "PROGRAMb_OUT" SITE "G18"; # PGRAMN_F_2
- IOBUF PORT "PROGRAMb_OUT" IO_TYPE=LVTTL33 PULLMODE=UP ;
+ LOCATE COMP "PROGRAMB_OUT" SITE "G18"; # PGRAMN_F_2
+ IOBUF PORT "PROGRAMB_OUT" IO_TYPE=LVTTL33 PULLMODE=UP ;
LOCATE COMP "SPI_CLK_OUT" SITE "G22"; # L2_SPI_F2CLK
LOCATE COMP "SPI_CS_OUT" SITE "E23"; # L2_SPI_F2CS
#####################################################################
# Flash & Reboot Control
#####################################################################
- LOCATE COMP "PROGRAMb" SITE "D11"; # PGRAMN_F_3
- IOBUF PORT "PROGRAMb" IO_TYPE=LVTTL33 PULLMODE=UP ;
+ LOCATE COMP "PROGRAMB" SITE "D11"; # PGRAMN_F_3
+ IOBUF PORT "PROGRAMB" IO_TYPE=LVTTL33 PULLMODE=UP ;
LOCATE COMP "SPI_CLK_OUT" SITE "E20"; # L3_SPI_F3CLK
LOCATE COMP "SPI_CS_OUT" SITE "D21"; # L3_SPI_F3CS
signal last_buf_CTS_START_READOUT_OUT : std_logic;
signal cts_start_readout_rising : std_logic;
+ signal end_of_data_reached : std_logic;
+ signal data_counter : signed(17 downto 0);
+ signal data_length : signed(17 downto 0);
begin
cts_start_readout_rising <= buf_CTS_START_READOUT_OUT and not last_buf_CTS_START_READOUT_OUT;
end if;
end process;
- APL_FEE_SEND_IN <= cts_start_readout_rising;
+ APL_FEE_SEND_IN <= cts_start_readout_rising;
- APL_FEE_READ_IN <= '1' when FEE_READ_IN = '1' or (APL_FEE_TYP_OUT /= TYPE_DAT) else '0';
-
- FEE_DATAREADY_OUT <= APL_FEE_DATAREADY_OUT when APL_FEE_TYP_OUT = TYPE_DAT else '0';
+ APL_FEE_READ_IN <= '1' when FEE_READ_IN = '1' or (APL_FEE_TYP_OUT /= TYPE_DAT) or end_of_data_reached = '1' else '0';
+ FEE_DATAREADY_OUT <= APL_FEE_DATAREADY_OUT when APL_FEE_TYP_OUT = TYPE_DAT and end_of_data_reached = '0' else '0';
FEE_DATA_OUT <= APL_FEE_DATA_OUT;
FEE_BUSY_OUT <= APL_FEE_RUN_OUT;
CTS_CODE_OUT <= buf_CTS_CODE_OUT;
CTS_START_READOUT_OUT <= buf_CTS_START_READOUT_OUT;
+---------------------------------------------------------------------
+-- Find end of data
+---------------------------------------------------------------------
+ PROC_COUNT_DATA : process(CLK)
+ begin
+ if rising_edge(CLK) then
+ if RESET = '1' or APL_FEE_RUN_OUT = '0' then
+ data_counter <= to_signed(-4,18);
+ elsif APL_FEE_DATAREADY_OUT = '1' and APL_FEE_TYP_OUT = TYPE_DAT then
+ data_counter <= data_counter + 1;
+ end if;
+ end if;
+ end process;
+
+ PROC_EOD : process(CLK)
+ begin
+ if rising_edge(CLK) then
+ if RESET = '1' or APL_FEE_RUN_OUT = '0' then
+ end_of_data_reached <= '0';
+ data_length <= to_signed(0,18);
+ elsif APL_FEE_DATAREADY_OUT = '1' and APL_FEE_TYP_OUT = TYPE_DAT and data_counter = to_signed(-2,18) then
+ data_length <= signed('0' & APL_FEE_DATA_OUT & '0');
+ elsif data_counter = data_length then
+ end_of_data_reached <= '1';
+ end if;
+ end if;
+ end process;
---------------------------------------------------------------------
-- Handle incoming data from FEE
end process;
--save data from api while sending trailer in secure mode
- SECURE_GEN: if SECURE_MODE = 1 generate
+-- SECURE_GEN: if SECURE_MODE = 1 generate
CLK_REG2: process(CLK)
begin
if rising_edge(CLK) then
end if;
end if;
end process;
- end generate;
+-- end generate;
- SECURE_GEN2: if SECURE_MODE = 0 generate
- buf_TRG_ERROR_PATTERN_IN <= TRG_ERROR_PATTERN_IN;
- end generate;
+-- SECURE_GEN2: if SECURE_MODE = 0 generate
+-- buf_TRG_ERROR_PATTERN_IN <= TRG_ERROR_PATTERN_IN;
+-- end generate;
--count packets