15 use IEEE.STD_LOGIC_1164.
ALL;
16 use ieee.numeric_std.
all;
18 library TOB_rdout_lib;
37 data_out : out STD_LOGIC_VECTOR (35 downto 0)
44 signal CLK_280M_i : std_logic ;
45 signal RST_i : std_logic ;
46 signal data_sync_in_1, data_sync_in_2 : std_logic ;
47 signal RAW_data_in_i : STD_LOGIC_VECTOR (223 downto 0) := (others => '0');
48 signal data_sync_out_i : std_logic ;
49 signal data_out_valid_i : std_logic ;
50 signal data_out_i : STD_LOGIC_VECTOR (35 downto 0);
51 signal error_flag_i : STD_LOGIC_VECTOR (3 downto 0);
54 idle, ser_1, ser_2, ser_3, ser_4,
58 SIGNAL current_state : STATE_TYPE;
61 attribute keep : string ;
62 attribute max_fanout : integer;
65 attribute keep of data_sync_in_1 : signal is "true" ;
66 attribute max_fanout of data_sync_in_1 : signal is 30;
67 attribute keep of data_sync_in_2 : signal is "true" ;
68 attribute max_fanout of data_sync_in_2 : signal is 30;
84 U2_280M_clk :
process (CLK_280M_i)
86 if rising_edge (CLK_280M_i) then
88 data_sync_in_2 <= data_sync_in_1 ;
91 if rising_edge (CLK_280M_i) then
92 if data_sync_in_1 = '1' then
104 U3_wr_to_DPR_fsm :
process (CLK_280M_i)
106 if CLK_280M_i'event and CLK_280M_i = '1' then
108 current_state <= idle ;
109 data_out_valid_i <= '0';
111 CASE current_state is
113 data_sync_out_i <= '0';
114 if data_sync_in_2 = '1' then
115 data_out_i <= error_flag_i & RAW_data_in_i(31 downto 0);
116 data_sync_out_i <= '1';
117 data_out_valid_i <= '1';
118 current_state <= ser_1 ;
121 data_out_i <= error_flag_i & RAW_data_in_i(63 downto 32);
122 data_sync_out_i <= '0';
123 data_out_valid_i <= '1';
124 current_state <= ser_2 ;
126 data_out_i <= error_flag_i & RAW_data_in_i(95 downto 64);
127 data_sync_out_i <= '0';
128 data_out_valid_i <= '1';
129 current_state <= ser_3 ;
131 data_out_i <= error_flag_i & RAW_data_in_i(127 downto 96);
132 data_sync_out_i <= '0';
133 data_out_valid_i <= '1';
134 current_state <= ser_4 ;
136 data_out_i <= error_flag_i & RAW_data_in_i(159 downto 128);
137 data_sync_out_i <= '0';
138 data_out_valid_i <= '1';
139 current_state <= ser_5 ;
141 data_out_i <= error_flag_i & RAW_data_in_i(191 downto 160);
142 data_sync_out_i <= '0';
143 data_out_valid_i <= '1';
144 current_state <= ser_6 ;
146 data_out_i <= error_flag_i & RAW_data_in_i(223 downto 192);
147 data_sync_out_i <= '0';
148 data_out_valid_i <= '1';
149 current_state <= idle ;
Calorimeter data PISO for process FPGA.
Calorimeter data PISO for process FPGA.
in data_sync_in STD_LOGIC
calorimeter data valid/synch signal
in RAW_link_data_in STD_LOGIC_VECTOR( 226 downto 0)
calorimeter data array 49 x 227b input frames
out data_out_valid STD_LOGIC
calorimeter data valid signal out
out data_sync_out STD_LOGIC
calorimeter data synch signal out
in clk_in_280M STD_LOGIC
280MHz clock input signal
out data_out STD_LOGIC_VECTOR( 35 downto 0)
calorimeter Error & Data out 36b