##// END OF EJS Templates
WaveFormPicker :Correction du registre Status et de l'arbitre en entree de la FIFO
pellion -
r240:af3a90f3ec47 LPP-LFR-em-WaveFormPicker-0-0-5 JC
parent child
Show More
@@ -490,7 +490,7 BEGIN
490 490 pirq_ms => 6,
491 491 pirq_wfp => 14,
492 492 hindex => 2,
493 top_lfr_version => X"00000003")
493 top_lfr_version => X"00000005")
494 494 PORT MAP (
495 495 clk => clkm,
496 496 rstn => rstn,
@@ -146,7 +146,7 BEGIN
146 146
147 147 send => single_send,
148 148 address => address,
149 data => data,
149 data => data_2_halfword,
150 150 ren => single_ren,
151 151
152 152 send_ok => single_send_ok, -- TODO
@@ -59,7 +59,17 ENTITY lpp_lfr IS
59 59 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- todo
60 60 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); -- todo
61 61 --
62 data_shaping_BW : OUT STD_LOGIC
62 data_shaping_BW : OUT STD_LOGIC;
63
64 --debug
65 debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
66 debug_f0_data_valid : OUT STD_LOGIC;
67 debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
68 debug_f1_data_valid : OUT STD_LOGIC;
69 debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
70 debug_f2_data_valid : OUT STD_LOGIC;
71 debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
72 debug_f3_data_valid : OUT STD_LOGIC
63 73 );
64 74 END lpp_lfr;
65 75
@@ -395,7 +405,17 BEGIN
395 405 data_f3_data_out => data_f3_data_out,
396 406 data_f3_data_out_valid => data_f3_data_out_valid_s,
397 407 data_f3_data_out_valid_burst => data_f3_data_out_valid_burst_s,
398 data_f3_data_out_ren => data_f3_data_out_ren
408 data_f3_data_out_ren => data_f3_data_out_ren,
409
410 --debug
411 debug_f0_data => debug_f0_data,
412 debug_f0_data_valid => debug_f0_data_valid ,
413 debug_f1_data => debug_f1_data ,
414 debug_f1_data_valid => debug_f1_data_valid,
415 debug_f2_data => debug_f2_data ,
416 debug_f2_data_valid => debug_f2_data_valid ,
417 debug_f3_data => debug_f3_data ,
418 debug_f3_data_valid => debug_f3_data_valid
399 419
400 420 );
401 421
@@ -309,9 +309,12 BEGIN -- beh
309 309 reg_sp.status_error_anticipating_empty_fifo <= reg_sp.status_error_anticipating_empty_fifo OR error_anticipating_empty_fifo;
310 310 reg_sp.status_error_bad_component_error <= reg_sp.status_error_bad_component_error OR error_bad_component_error;
311 311 all_status: FOR I IN 3 DOWNTO 0 LOOP
312 reg_wp.status_full(I) <= (reg_wp.status_full(I) OR status_full(I)) AND reg_wp.run;
313 reg_wp.status_full_err(I) <= (reg_wp.status_full_err(I) OR status_full_err(I)) AND reg_wp.run;
314 reg_wp.status_new_err(I) <= (reg_wp.status_new_err(I) OR status_new_err(I)) AND reg_wp.run ;
312 --reg_wp.status_full(I) <= (reg_wp.status_full(I) OR status_full(I)) AND reg_wp.run;
313 --reg_wp.status_full_err(I) <= (reg_wp.status_full_err(I) OR status_full_err(I)) AND reg_wp.run;
314 --reg_wp.status_new_err(I) <= (reg_wp.status_new_err(I) OR status_new_err(I)) AND reg_wp.run ;
315 reg_wp.status_full(I) <= status_full(I) AND reg_wp.run;
316 reg_wp.status_full_err(I) <= status_full_err(I) AND reg_wp.run;
317 reg_wp.status_new_err(I) <= status_new_err(I) AND reg_wp.run ;
315 318 END LOOP all_status;
316 319
317 320 paddr := "000000";
@@ -99,7 +99,17 PACKAGE lpp_lfr_pkg IS
99 99 ahbo : OUT AHB_Mst_Out_Type;
100 100 coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
101 101 fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
102 data_shaping_BW : OUT STD_LOGIC);
102 data_shaping_BW : OUT STD_LOGIC;
103
104 --debug
105 debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
106 debug_f0_data_valid : OUT STD_LOGIC;
107 debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
108 debug_f1_data_valid : OUT STD_LOGIC;
109 debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
110 debug_f2_data_valid : OUT STD_LOGIC;
111 debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0);
112 debug_f3_data_valid : OUT STD_LOGIC );
103 113 END COMPONENT;
104 114
105 115 COMPONENT lpp_lfr_apbreg
@@ -127,9 +127,17 ENTITY lpp_waveform IS
127 127 data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
128 128 data_f3_data_out_valid : OUT STD_LOGIC;
129 129 data_f3_data_out_valid_burst : OUT STD_LOGIC;
130 data_f3_data_out_ren : IN STD_LOGIC
130 data_f3_data_out_ren : IN STD_LOGIC;
131 131
132
132 --debug
133 debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
134 debug_f0_data_valid : OUT STD_LOGIC;
135 debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
136 debug_f1_data_valid : OUT STD_LOGIC;
137 debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
138 debug_f2_data_valid : OUT STD_LOGIC;
139 debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
140 debug_f3_data_valid : OUT STD_LOGIC
133 141 );
134 142
135 143 END lpp_waveform;
@@ -269,6 +277,18 BEGIN -- beh
269 277 data_out => data_f3_out,
270 278 data_out_valid => data_f3_out_valid);
271 279
280 -----------------------------------------------------------------------------
281 -- DEBUG
282 debug_f0_data_valid <= data_f0_out_valid;
283 debug_f0_data <= data_f0_out;
284 debug_f1_data_valid <= data_f1_out_valid;
285 debug_f1_data <= data_f1_out;
286 debug_f2_data_valid <= data_f2_out_valid;
287 debug_f2_data <= data_f2_out;
288 debug_f3_data_valid <= data_f3_out_valid;
289 debug_f3_data <= data_f3_out;
290 -----------------------------------------------------------------------------
291
272 292 PROCESS (clk, rstn)
273 293 BEGIN -- PROCESS
274 294 IF rstn = '0' THEN -- asynchronous reset (active low)
@@ -323,6 +343,7 BEGIN -- beh
323 343
324 344 data_out => wdata,
325 345 data_out_wen => data_wen,
346 full_almost => full_almost,
326 347 full => full);
327 348
328 349 lpp_waveform_fifo_1 : lpp_waveform_fifo
@@ -51,6 +51,7 ENTITY lpp_waveform_fifo_arbiter IS
51 51 ---------------------------------------------------------------------------
52 52 data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
53 53 data_out_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
54 full_almost : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
54 55 full : IN STD_LOGIC_VECTOR(3 DOWNTO 0)
55 56
56 57 );
@@ -58,6 +59,9 END ENTITY;
58 59
59 60
60 61 ARCHITECTURE ar_lpp_waveform_fifo_arbiter OF lpp_waveform_fifo_arbiter IS
62 TYPE state_type_fifo_arbiter IS (IDLE,TIME1,TIME2,DATA1,DATA2,DATA3,LAST);
63 SIGNAL state : state_type_fifo_arbiter;
64
61 65 -----------------------------------------------------------------------------
62 66 -- DATA MUX
63 67 -----------------------------------------------------------------------------
@@ -77,6 +81,9 ARCHITECTURE ar_lpp_waveform_fifo_arbite
77 81 -----------------------------------------------------------------------------
78 82 SIGNAL valid_in_rr : STD_LOGIC_VECTOR(3 DOWNTO 0);
79 83 SIGNAL sel : STD_LOGIC_VECTOR(3 DOWNTO 0);
84 SIGNAL sel_s : STD_LOGIC_VECTOR(3 DOWNTO 0);
85 SIGNAL sel_reg : STD_LOGIC;
86 SIGNAL sel_ack : STD_LOGIC;
80 87 SIGNAL no_sel : STD_LOGIC;
81 88
82 89 -----------------------------------------------------------------------------
@@ -86,13 +93,13 ARCHITECTURE ar_lpp_waveform_fifo_arbite
86 93 SIGNAL count : STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
87 94 SIGNAL count_s : STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
88 95
89 SIGNAL shift_data_enable : STD_LOGIC;
90 SIGNAL shift_data : STD_LOGIC_VECTOR(1 DOWNTO 0);
91 SIGNAL shift_data_s : STD_LOGIC_VECTOR(1 DOWNTO 0);
96 --SIGNAL shift_data_enable : STD_LOGIC;
97 --SIGNAL shift_data : STD_LOGIC_VECTOR(1 DOWNTO 0);
98 --SIGNAL shift_data_s : STD_LOGIC_VECTOR(1 DOWNTO 0);
92 99
93 SIGNAL shift_time_enable : STD_LOGIC;
94 SIGNAL shift_time : STD_LOGIC_VECTOR(1 DOWNTO 0);
95 SIGNAL shift_time_s : STD_LOGIC_VECTOR(1 DOWNTO 0);
100 --SIGNAL shift_time_enable : STD_LOGIC;
101 --SIGNAL shift_time : STD_LOGIC_VECTOR(1 DOWNTO 0);
102 --SIGNAL shift_time_s : STD_LOGIC_VECTOR(1 DOWNTO 0);
96 103
97 104 BEGIN
98 105
@@ -103,60 +110,123 BEGIN
103 110 BEGIN -- PROCESS
104 111 IF rstn = '0' THEN -- asynchronous reset (active low)
105 112 count_enable <= '0';
106 shift_time_enable <= '0';
107 shift_data_enable <= '0';
108 113 data_in_ack <= (OTHERS => '0');
109 114 data_out_wen <= (OTHERS => '1');
115 sel_ack <= '0';
116 state <= IDLE;
110 117 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
111 IF run = '0' OR no_sel = '1' THEN
112 118 count_enable <= '0';
113 shift_time_enable <= '0';
114 shift_data_enable <= '0';
115 119 data_in_ack <= (OTHERS => '0');
116 120 data_out_wen <= (OTHERS => '1');
121 sel_ack <= '0';
122 IF run = '0' THEN
123 state <= IDLE;
117 124 ELSE
118 --COUNT
119 IF shift_data_s = "10" THEN
125 CASE state IS
126 WHEN IDLE =>
127 IF no_sel = '0' THEN
128 state <= TIME1;
129 END IF;
130 WHEN TIME1 =>
120 131 count_enable <= '1';
132 IF UNSIGNED(count) = 0 THEN
133 state <= TIME2;
134 data_out_wen <= NOT sel;
135 data_out <= data_sel(0);
121 136 ELSE
122 count_enable <= '0';
137 state <= DATA1;
123 138 END IF;
124 --DATA
125 IF shift_time_s = "10" THEN
126 shift_data_enable <= '1';
127 ELSE
128 shift_data_enable <= '0';
129 END IF;
139 WHEN TIME2 =>
140 data_out_wen <= NOT sel;
141 data_out <= data_sel(1) ;
142 state <= DATA1;
143 WHEN DATA1 =>
144 data_out_wen <= NOT sel;
145 data_out <= data_sel(2);
146 state <= DATA2;
147 WHEN DATA2 =>
148 data_out_wen <= NOT sel;
149 data_out <= data_sel(3);
150 state <= DATA3;
151 WHEN DATA3 =>
152 data_out_wen <= NOT sel;
153 data_out <= data_sel(4);
154 state <= LAST;
155 data_in_ack <= sel;
156 WHEN LAST =>
157 state <= IDLE;
158 sel_ack <= '1';
130 159
131 --TIME
132 IF ((shift_data_s = "10") AND (count = nb_data_by_buffer)) OR
133 shift_time_s = "00" OR
134 shift_time_s = "01"
135 THEN
136 shift_time_enable <= '1';
137 ELSE
138 shift_time_enable <= '0';
139 END IF;
140
141 --ACK
142 IF shift_data_s = "10" THEN
143 data_in_ack <= sel;
144 ELSE
145 data_in_ack <= (OTHERS => '0');
146 END IF;
147
148 --VALID OUT
149 all_wen: FOR I IN 3 DOWNTO 0 LOOP
150 IF sel(I) = '1' AND count_enable = '0' THEN
151 data_out_wen(I) <= '0';
152 ELSE
153 data_out_wen(I) <= '1';
154 END IF;
155 END LOOP all_wen;
156
160 WHEN OTHERS => NULL;
161 END CASE;
157 162 END IF;
158 163 END IF;
159 164 END PROCESS;
165 -----------------------------------------------------------------------------
166
167
168 --PROCESS (clk, rstn)
169 --BEGIN -- PROCESS
170 -- IF rstn = '0' THEN -- asynchronous reset (active low)
171 -- count_enable <= '0';
172 -- shift_time_enable <= '0';
173 -- shift_data_enable <= '0';
174 -- data_in_ack <= (OTHERS => '0');
175 -- data_out_wen <= (OTHERS => '1');
176 -- sel_ack <= '0';
177 -- ELSIF clk'event AND clk = '1' THEN -- rising clock edge
178 -- IF run = '0' OR no_sel = '1' THEN
179 -- count_enable <= '0';
180 -- shift_time_enable <= '0';
181 -- shift_data_enable <= '0';
182 -- data_in_ack <= (OTHERS => '0');
183 -- data_out_wen <= (OTHERS => '1');
184 -- sel_ack <= '0';
185 -- ELSE
186 -- --COUNT
187 -- IF shift_data_s = "10" THEN
188 -- count_enable <= '1';
189 -- ELSE
190 -- count_enable <= '0';
191 -- END IF;
192 -- --DATA
193 -- IF shift_time_s = "10" THEN
194 -- shift_data_enable <= '1';
195 -- ELSE
196 -- shift_data_enable <= '0';
197 -- END IF;
198
199 -- --TIME
200 -- IF ((shift_data_s = "10") AND (count = nb_data_by_buffer)) OR
201 -- shift_time_s = "00" OR
202 -- shift_time_s = "01"
203 -- THEN
204 -- shift_time_enable <= '1';
205 -- ELSE
206 -- shift_time_enable <= '0';
207 -- END IF;
208
209 -- --ACK
210 -- IF shift_data_s = "10" THEN
211 -- data_in_ack <= sel;
212 -- sel_ack <= '1';
213 -- ELSE
214 -- data_in_ack <= (OTHERS => '0');
215 -- sel_ack <= '0';
216 -- END IF;
217
218 -- --VALID OUT
219 -- all_wen: FOR I IN 3 DOWNTO 0 LOOP
220 -- IF sel(I) = '1' AND count_enable = '0' THEN
221 -- data_out_wen(I) <= '0';
222 -- ELSE
223 -- data_out_wen(I) <= '1';
224 -- END IF;
225 -- END LOOP all_wen;
226
227 -- END IF;
228 -- END IF;
229 --END PROCESS;
160 230
161 231 -----------------------------------------------------------------------------
162 232 -- DATA MUX
@@ -196,18 +266,19 BEGIN
196 266 data_2 WHEN sel(2) = '1' ELSE
197 267 data_3;
198 268
199 data_out <= data_sel(0) WHEN shift_time = "00" ELSE
200 data_sel(1) WHEN shift_time = "01" ELSE
201 data_sel(2) WHEN shift_data = "00" ELSE
202 data_sel(3) WHEN shift_data = "01" ELSE
203 data_sel(4);
269 --data_out <= data_sel(0) WHEN shift_time = "00" ELSE
270 -- data_sel(1) WHEN shift_time = "01" ELSE
271 -- data_sel(2) WHEN shift_data = "00" ELSE
272 -- data_sel(3) WHEN shift_data = "01" ELSE
273 -- data_sel(4);
204 274
205 275
206 276 -----------------------------------------------------------------------------
207 277 -- RR and SELECTION
208 278 -----------------------------------------------------------------------------
209 279 all_input_rr : FOR I IN 3 DOWNTO 0 GENERATE
210 valid_in_rr(I) <= data_in_valid(I) AND NOT full(I);
280 -- valid_in_rr(I) <= data_in_valid(I) AND NOT full(I);
281 valid_in_rr(I) <= data_in_valid(I) AND NOT full_almost(I);
211 282 END GENERATE all_input_rr;
212 283
213 284 RR_Arbiter_4_1 : RR_Arbiter_4
@@ -215,7 +286,33 BEGIN
215 286 clk => clk,
216 287 rstn => rstn,
217 288 in_valid => valid_in_rr,
218 out_grant => sel);
289 out_grant => sel_s); --sel_s);
290
291 -- sel <= sel_s;
292
293 PROCESS (clk, rstn)
294 BEGIN -- PROCESS
295 IF rstn = '0' THEN -- asynchronous reset (active low)
296 sel <= "0000";
297 sel_reg <= '0';
298 ELSIF clk'event AND clk = '1' THEN -- rising clock edge
299 -- sel_reg
300 -- sel_ack
301 -- sel_s
302 -- sel = "0000 "
303 --sel <= sel_s;
304 IF sel_reg = '0' OR sel_ack = '1'
305 --OR shift_data_s = "10"
306 THEN
307 sel <= sel_s;
308 IF sel_s = "0000" THEN
309 sel_reg <= '0';
310 ELSE
311 sel_reg <= '1';
312 END IF;
313 END IF;
314 END IF;
315 END PROCESS;
219 316
220 317 no_sel <= '1' WHEN sel = "0000" ELSE '0';
221 318
@@ -236,34 +333,34 BEGIN
236 333 data => count,
237 334 data_s => count_s);
238 335
239 reg_shift_data_i: lpp_waveform_fifo_arbiter_reg
240 GENERIC MAP (
241 data_size => 2,
242 data_nb => 4)
243 PORT MAP (
244 clk => clk,
245 rstn => rstn,
246 run => run,
247 max_count => "10", -- 2
248 enable => shift_data_enable,
249 sel => sel,
250 data => shift_data,
251 data_s => shift_data_s);
336 --reg_shift_data_i: lpp_waveform_fifo_arbiter_reg
337 -- GENERIC MAP (
338 -- data_size => 2,
339 -- data_nb => 4)
340 -- PORT MAP (
341 -- clk => clk,
342 -- rstn => rstn,
343 -- run => run,
344 -- max_count => "10", -- 2
345 -- enable => shift_data_enable,
346 -- sel => sel,
347 -- data => shift_data,
348 -- data_s => shift_data_s);
252 349
253 350
254 reg_shift_time_i: lpp_waveform_fifo_arbiter_reg
255 GENERIC MAP (
256 data_size => 2,
257 data_nb => 4)
258 PORT MAP (
259 clk => clk,
260 rstn => rstn,
261 run => run,
262 max_count => "10", -- 2
263 enable => shift_time_enable,
264 sel => sel,
265 data => shift_time,
266 data_s => shift_time_s);
351 --reg_shift_time_i: lpp_waveform_fifo_arbiter_reg
352 -- GENERIC MAP (
353 -- data_size => 2,
354 -- data_nb => 4)
355 -- PORT MAP (
356 -- clk => clk,
357 -- rstn => rstn,
358 -- run => run,
359 -- max_count => "10", -- 2
360 -- enable => shift_time_enable,
361 -- sel => sel,
362 -- data => shift_time,
363 -- data_s => shift_time_s);
267 364
268 365
269 366
@@ -166,7 +166,17 PACKAGE lpp_waveform_pkg IS
166 166 data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
167 167 data_f3_data_out_valid : OUT STD_LOGIC;
168 168 data_f3_data_out_valid_burst : OUT STD_LOGIC;
169 data_f3_data_out_ren : IN STD_LOGIC);
169 data_f3_data_out_ren : IN STD_LOGIC;
170
171 --debug
172 debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
173 debug_f0_data_valid : OUT STD_LOGIC;
174 debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
175 debug_f1_data_valid : OUT STD_LOGIC;
176 debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
177 debug_f2_data_valid : OUT STD_LOGIC;
178 debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0);
179 debug_f3_data_valid : OUT STD_LOGIC);
170 180 END COMPONENT;
171 181
172 182 COMPONENT lpp_waveform_dma_genvalid
@@ -197,8 +207,8 PACKAGE lpp_waveform_pkg IS
197 207 wen : IN STD_LOGIC;
198 208 mem_re : OUT STD_LOGIC;
199 209 mem_we : OUT STD_LOGIC;
200 mem_addr_ren : out STD_LOGIC_VECTOR(6 DOWNTO 0);
201 mem_addr_wen : out STD_LOGIC_VECTOR(6 DOWNTO 0);
210 mem_addr_ren : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
211 mem_addr_wen : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
202 212 empty_almost : OUT STD_LOGIC;
203 213 empty : OUT STD_LOGIC;
204 214 full_almost : OUT STD_LOGIC;
@@ -220,6 +230,7 PACKAGE lpp_waveform_pkg IS
220 230 time_in : IN Data_Vector(3 DOWNTO 0, 47 DOWNTO 0);
221 231 data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
222 232 data_out_wen : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
233 full_almost : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
223 234 full : IN STD_LOGIC_VECTOR(3 DOWNTO 0));
224 235 END COMPONENT;
225 236
General Comments 0
You need to be logged in to leave comments. Login now