24 use IEEE.STD_LOGIC_1164.
ALL;
28 use IEEE.NUMERIC_STD.
ALL;
30 library TOB_rdout_lib;
39 clk_in_280M : in STD_LOGIC;
76 signal clk_in_280M_i : STD_LOGIC;
78 signal T_TOB_out_valid_i : STD_LOGIC;
79 signal TOB_in_is_char_i : STD_LOGIC;
80 signal TOBs_in_i : STD_LOGIC_VECTOR (31 downto 0);
81 signal MGT_fifo_rd_en_i : STD_LOGIC;
82 signal TOBs_out_i, TOBs_in_tmp_1dly : STD_LOGIC_VECTOR (31 downto 0);
83 signal TOB_out_is_char_i, TOB_in_is_char_tmp_1dly : STD_LOGIC;
85 signal frame_counter_dec_en_i : STD_LOGIC;
89 idle, rd_fifo1, rd_fifo2, tx_data_SOF1, tx_data_SOF2, tx_data1, tx_data2, tx_data_EOF1, tx_data_EOF2,
90 wait1, wait2, wait3, wait4
93 SIGNAL current_state : STATE_TYPE;
97 clk_in_280M_i <= clk_in_280M ;
109 U1_clk_proc :
process (clk_in_280M_i)
111 if clk_in_280M_i'event and clk_in_280M_i = '1' then
122 U2_clk_proc :
process (clk_in_280M_i)
124 if clk_in_280M_i'event and clk_in_280M_i = '1' then
125 if MGT_fifo_rd_en_i = '1' then
135 U4_rd_fsm :
process (clk_in_280M_i)
138 if clk_in_280M_i'event and clk_in_280M_i = '1' then
140 TOB_in_is_char_i <= '0';
141 TOBs_in_i <= (others => '0');
142 current_state <= idle ;
144 TOB_in_is_char_i <= TOB_in_is_char_tmp_1dly;
145 TOBs_in_i <= TOBs_in_tmp_1dly(31 downto 0);
146 T_TOB_out_valid_i <= '0';
149 CASE current_state is
152 T_TOB_out_valid_i <= '0' ;
153 frame_counter_dec_en_i <= '0' ;
154 MGT_fifo_rd_en_i <= '0' ;
155 TOB_out_is_char_i <= '1';
156 TOBs_out_i <= X"000000" & ch_idle ;
161 current_state <= rd_fifo1 ;
166 T_TOB_out_valid_i <= '0' ;
167 TOB_out_is_char_i <= '1';
168 TOBs_out_i <= X"000000" & ch_idle ;
169 MGT_fifo_rd_en_i <= '1';
171 if (TOBs_in_tmp_1dly(7 downto 0) = X"3C" AND TOB_in_is_char_tmp_1dly = '1') then
172 current_state <= tx_data_SOF1 ;
175 current_state <= rd_fifo1 ;
179 MGT_fifo_rd_en_i <= '1';
180 TOB_out_is_char_i <= TOB_in_is_char_i;
181 TOBs_out_i <= TOBs_in_i ;
182 T_TOB_out_valid_i <= '1' ;
183 current_state <= tx_data1 ;
187 T_TOB_out_valid_i <= '0' ;
188 MGT_fifo_rd_en_i <= '1';
189 TOB_out_is_char_i <= '1';
190 TOBs_out_i <= X"000000"& ch_idle ;
191 current_state <= wait4 ;
195 MGT_fifo_rd_en_i <= '1';
196 TOB_out_is_char_i <= TOB_in_is_char_i;
197 TOBs_out_i <= TOBs_in_i ;
198 T_TOB_out_valid_i <= '1' ;
199 current_state <= tx_data1 ;
202 MGT_fifo_rd_en_i <= '1';
203 TOB_out_is_char_i <= TOB_in_is_char_i;
204 TOBs_out_i <= TOBs_in_i ;
205 T_TOB_out_valid_i <= '1' ;
207 if (TOBs_in_tmp_1dly(7 downto 0) = X"DC" AND TOB_in_is_char_tmp_1dly = '1') then
208 frame_counter_dec_en_i <= '1' ;
209 MGT_fifo_rd_en_i <= '0';
210 current_state <= tx_data_EOF1 ;
214 current_state <= tx_data1 ;
218 frame_counter_dec_en_i <= '0' ;
219 TOB_out_is_char_i <= TOB_in_is_char_i;
220 TOBs_out_i <= TOBs_in_i ;
221 T_TOB_out_valid_i <= '1' ;
222 current_state <= wait1 ;
226 T_TOB_out_valid_i <= '0' ;
227 TOB_out_is_char_i <= '1';
228 TOBs_out_i <= X"000000"& ch_idle ;
229 current_state <= wait2 ;
232 T_TOB_out_valid_i <= '0' ;
233 TOB_out_is_char_i <= '1';
234 TOBs_out_i <= X"000000"& ch_idle ;
235 current_state <= tx_data_EOF2 ;
238 T_TOB_out_valid_i <= '0' ;
239 TOB_out_is_char_i <= '1';
240 TOBs_out_i <= X"000000" & ch_idle ;
241 current_state <= tx_data_EOF2 ;
245 if (TOBs_in_i(7 downto 0) = X"DC" AND TOB_in_is_char_i = '1') then
246 current_state <= idle ;
249 MGT_fifo_rd_en_i <= '1';
250 if (TOBs_in_i(7 downto 0) = X"3C" AND TOB_in_is_char_i = '1') then
251 current_state <= wait3 ;
FSM to read TOB/XTOB data from Link Output FIFO for process FPGA.
FSM to read TOB/XTOB data from Link Output FIFO for process FPGA.
out tob_data_mgt_fsm STD_LOGIC_VECTOR( 7 downto 0)
Monitor state machine status register.
in frame_counter STD_LOGIC_VECTOR( 11 downto 0)
Frame counter register.
in FIFO_MGT_TOBs STD_LOGIC_VECTOR( 32 downto 0)
TOB/XTOBs from Link Output FIFO.
out FIFO_MGT_rd_en STD_LOGIC
Read enalbe singal to Link Output FIFO.
out T_TOB_out_valid STD_LOGIC
TOB/XTOB is valid signal to wr to SPY memory.
out T_TOBs_out STD_LOGIC_VECTOR( 31 downto 0)
32b TOB/XTOB to connect to output MGT to control FPGA
in ctrl_TOB_ready_in std_logic
Ready signal from control FPGA to receive data from process FPGA.
out frame_counter_dec_en STD_LOGIC
Decrement Frame Counter.
out T_TOB_is_char STD_LOGIC
TOB/XTOB is CHAR to connect to output MGT to control FPGA.
in MGT_FIFO_empty std_logic
Link Output FIFO Empty Flag.
in TOB_FIFO_sw_rst std_logic
TOB Readout FIFO reset Pulse by software command.
in FIFO_MGT_TOB_valid STD_LOGIC
TOB/XTOBs from Link Output FIFO valid signal.