Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: niu_rdmc_wr_sched.v | |
4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
6 | // | |
7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
8 | // | |
9 | // This program is free software; you can redistribute it and/or modify | |
10 | // it under the terms of the GNU General Public License as published by | |
11 | // the Free Software Foundation; version 2 of the License. | |
12 | // | |
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | // | |
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | // | |
22 | // For the avoidance of doubt, and except that if any non-GPL license | |
23 | // choice is available it will apply instead, Sun elects to use only | |
24 | // the General Public License version 2 (GPLv2) at this time for any | |
25 | // software where a choice of GPL license versions is made | |
26 | // available with the language indicating that GPLv2 or any later version | |
27 | // may be used, or where a choice of which version of the GPL is applied is | |
28 | // otherwise unspecified. | |
29 | // | |
30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
31 | // CA 95054 USA or visit www.sun.com if you need additional information or | |
32 | // have any questions. | |
33 | // | |
34 | // ========== Copyright Header End ============================================ | |
35 | module niu_rdmc_wr_sched ( | |
36 | clk, | |
37 | reset, | |
38 | rx_addr_32b_mode, | |
39 | pt_drr_wt0_reg, | |
40 | pt_drr_wt1_reg, | |
41 | pt_drr_wt2_reg, | |
42 | pt_drr_wt3_reg, | |
43 | muxed_l2_len_r, | |
44 | muxed_pkt_len_r, | |
45 | rdmc_eop_for_padding, | |
46 | pkt_req_cnt_pre_done, | |
47 | pkt_req_cnt_done, | |
48 | pkt_req_cnt_done_r, | |
49 | pkt_wrbk_data, | |
50 | drop_pkt_done, | |
51 | ipp_full_pkt, | |
52 | zcp_full_pkt, | |
53 | ipp_pkt_sop, | |
54 | zcp_pkt_sop, | |
55 | muxed_zcopy_mode_r, | |
56 | muxed_data_err_r2, | |
57 | zcopy_mode, | |
58 | jmb_pkt_type, | |
59 | zcp_wr_type, | |
60 | zcp_rdc_num, | |
61 | zcp_vaddr0, | |
62 | zcp_vaddr1, | |
63 | zcp_vaddr2, | |
64 | zcp_vaddr3, | |
65 | zcp_len0, | |
66 | zcp_len1, | |
67 | zcp_len2, | |
68 | zcp_len3, | |
69 | zcp_func_num, | |
70 | full_hdr_bits, | |
71 | drop_pkt, | |
72 | pkt_buf_gnt, | |
73 | pkt_buf_addr0, | |
74 | pkt_buf_addr1, | |
75 | pkt_buf_addr2, | |
76 | pkt_buf_addr3, | |
77 | pkt_buf_addr4, | |
78 | pkt_buf_addr5, | |
79 | pkt_buf_addr6, | |
80 | pkt_buf_addr7, | |
81 | pkt_buf_addr8, | |
82 | pkt_buf_addr9, | |
83 | pkt_buf_addr10, | |
84 | pkt_buf_addr11, | |
85 | pkt_buf_addr12, | |
86 | pkt_buf_addr13, | |
87 | pkt_buf_addr14, | |
88 | pkt_buf_addr15, | |
89 | pkt_buf_size0, | |
90 | pkt_buf_size1, | |
91 | pkt_buf_size2, | |
92 | pkt_buf_size3, | |
93 | pkt_buf_size4, | |
94 | pkt_buf_size5, | |
95 | pkt_buf_size6, | |
96 | pkt_buf_size7, | |
97 | pkt_buf_size8, | |
98 | pkt_buf_size9, | |
99 | pkt_buf_size10, | |
100 | pkt_buf_size11, | |
101 | pkt_buf_size12, | |
102 | pkt_buf_size13, | |
103 | pkt_buf_size14, | |
104 | pkt_buf_size15, | |
105 | orig_buf_addr0, | |
106 | orig_buf_addr1, | |
107 | orig_buf_addr2, | |
108 | orig_buf_addr3, | |
109 | orig_buf_addr4, | |
110 | orig_buf_addr5, | |
111 | orig_buf_addr6, | |
112 | orig_buf_addr7, | |
113 | orig_buf_addr8, | |
114 | orig_buf_addr9, | |
115 | orig_buf_addr10, | |
116 | orig_buf_addr11, | |
117 | orig_buf_addr12, | |
118 | orig_buf_addr13, | |
119 | orig_buf_addr14, | |
120 | orig_buf_addr15, | |
121 | dma_func_num0, | |
122 | dma_func_num1, | |
123 | dma_func_num2, | |
124 | dma_func_num3, | |
125 | dma_func_num4, | |
126 | dma_func_num5, | |
127 | dma_func_num6, | |
128 | dma_func_num7, | |
129 | dma_func_num8, | |
130 | dma_func_num9, | |
131 | dma_func_num10, | |
132 | dma_func_num11, | |
133 | dma_func_num12, | |
134 | dma_func_num13, | |
135 | dma_func_num14, | |
136 | dma_func_num15, | |
137 | pref_buf_used_num0, | |
138 | pref_buf_used_num1, | |
139 | pref_buf_used_num2, | |
140 | pref_buf_used_num3, | |
141 | pref_buf_used_num4, | |
142 | pref_buf_used_num5, | |
143 | pref_buf_used_num6, | |
144 | pref_buf_used_num7, | |
145 | pref_buf_used_num8, | |
146 | pref_buf_used_num9, | |
147 | pref_buf_used_num10, | |
148 | pref_buf_used_num11, | |
149 | pref_buf_used_num12, | |
150 | pref_buf_used_num13, | |
151 | pref_buf_used_num14, | |
152 | pref_buf_used_num15, | |
153 | pkt_trans_len0, | |
154 | pkt_trans_len1, | |
155 | pkt_trans_len2, | |
156 | pkt_trans_len3, | |
157 | pkt_trans_len4, | |
158 | pkt_trans_len5, | |
159 | pkt_trans_len6, | |
160 | pkt_trans_len7, | |
161 | pkt_trans_len8, | |
162 | pkt_trans_len9, | |
163 | pkt_trans_len10, | |
164 | pkt_trans_len11, | |
165 | pkt_trans_len12, | |
166 | pkt_trans_len13, | |
167 | pkt_trans_len14, | |
168 | pkt_trans_len15, | |
169 | meta0_rdmc_wr_req_accept, | |
170 | ||
171 | rdmc_meta0_wr_req, | |
172 | rdmc_meta0_wr_req_cmd, | |
173 | rdmc_meta0_wr_req_address, | |
174 | rdmc_meta0_wr_req_length, | |
175 | rdmc_meta0_wr_req_port_num, | |
176 | rdmc_meta0_wr_req_dma_num, | |
177 | rdmc_meta0_wr_req_func_num, | |
178 | rdmc_meta0_wr_req_dma_num_int, | |
179 | full_hdr_r, | |
180 | pkt_trans_len_r, | |
181 | pref_buf_used_num_r, | |
182 | drop_pkt_en_sm, | |
183 | drop_pkt_en, | |
184 | drop_pkt_port_gnt, | |
185 | drop_pad_data, | |
186 | is_zcp0_wr_req, | |
187 | is_zcp1_wr_req, | |
188 | is_zcp2_wr_req, | |
189 | is_zcp3_wr_req, | |
190 | rdmc_wr_req_accept_hdr, | |
191 | rdmc_wr_req_accept_jmb, | |
192 | rdmc_wr_req_accept_zcp0, | |
193 | rdmc_wr_req_accept_zcp1, | |
194 | rdmc_wr_req_accept_zcp2, | |
195 | rdmc_wr_req_accept_zcp3, | |
196 | port_gnt, | |
197 | port_gnt_r, | |
198 | stage0_en, | |
199 | stage1_en_r, | |
200 | sel_buf_en, | |
201 | pkt_buf_done, | |
202 | is_hdr_wr_data, | |
203 | is_jmb1_wr_data, | |
204 | wr_last_pkt_data, | |
205 | update_rcr_shadw, | |
206 | rcr_wrbk_data, | |
207 | wr_sched_sm_state | |
208 | ); | |
209 | ||
210 | input clk; | |
211 | input reset; | |
212 | input rx_addr_32b_mode; | |
213 | input[15:0] pt_drr_wt0_reg; | |
214 | input[15:0] pt_drr_wt1_reg; | |
215 | input[15:0] pt_drr_wt2_reg; | |
216 | input[15:0] pt_drr_wt3_reg; | |
217 | input[13:0] muxed_l2_len_r; | |
218 | input[13:0] muxed_pkt_len_r; | |
219 | input rdmc_eop_for_padding; | |
220 | input pkt_req_cnt_pre_done; | |
221 | input pkt_req_cnt_done; | |
222 | input pkt_req_cnt_done_r; | |
223 | input[22:0] pkt_wrbk_data; | |
224 | input drop_pkt_done; | |
225 | input[3:0] ipp_full_pkt; | |
226 | input[3:0] zcp_full_pkt; | |
227 | input[3:0] ipp_pkt_sop; | |
228 | input[3:0] zcp_pkt_sop; | |
229 | input muxed_zcopy_mode_r; | |
230 | input muxed_data_err_r2; | |
231 | input zcopy_mode; | |
232 | input[1:0] jmb_pkt_type; | |
233 | input[1:0] zcp_wr_type; | |
234 | input[4:0] zcp_rdc_num; | |
235 | input[63:0] zcp_vaddr0; | |
236 | input[63:0] zcp_vaddr1; | |
237 | input[63:0] zcp_vaddr2; | |
238 | input[63:0] zcp_vaddr3; | |
239 | input[13:0] zcp_len0; | |
240 | input[13:0] zcp_len1; | |
241 | input[13:0] zcp_len2; | |
242 | input[13:0] zcp_len3; | |
243 | input[1:0] zcp_func_num; | |
244 | input[15:0] full_hdr_bits; | |
245 | input[15:0] drop_pkt; | |
246 | input[15:0] pkt_buf_gnt; | |
247 | input[63:0] pkt_buf_addr0; | |
248 | input[63:0] pkt_buf_addr1; | |
249 | input[63:0] pkt_buf_addr2; | |
250 | input[63:0] pkt_buf_addr3; | |
251 | input[63:0] pkt_buf_addr4; | |
252 | input[63:0] pkt_buf_addr5; | |
253 | input[63:0] pkt_buf_addr6; | |
254 | input[63:0] pkt_buf_addr7; | |
255 | input[63:0] pkt_buf_addr8; | |
256 | input[63:0] pkt_buf_addr9; | |
257 | input[63:0] pkt_buf_addr10; | |
258 | input[63:0] pkt_buf_addr11; | |
259 | input[63:0] pkt_buf_addr12; | |
260 | input[63:0] pkt_buf_addr13; | |
261 | input[63:0] pkt_buf_addr14; | |
262 | input[63:0] pkt_buf_addr15; | |
263 | input[1:0] pkt_buf_size0; | |
264 | input[1:0] pkt_buf_size1; | |
265 | input[1:0] pkt_buf_size2; | |
266 | input[1:0] pkt_buf_size3; | |
267 | input[1:0] pkt_buf_size4; | |
268 | input[1:0] pkt_buf_size5; | |
269 | input[1:0] pkt_buf_size6; | |
270 | input[1:0] pkt_buf_size7; | |
271 | input[1:0] pkt_buf_size8; | |
272 | input[1:0] pkt_buf_size9; | |
273 | input[1:0] pkt_buf_size10; | |
274 | input[1:0] pkt_buf_size11; | |
275 | input[1:0] pkt_buf_size12; | |
276 | input[1:0] pkt_buf_size13; | |
277 | input[1:0] pkt_buf_size14; | |
278 | input[1:0] pkt_buf_size15; | |
279 | input[35:0] orig_buf_addr0; | |
280 | input[35:0] orig_buf_addr1; | |
281 | input[35:0] orig_buf_addr2; | |
282 | input[35:0] orig_buf_addr3; | |
283 | input[35:0] orig_buf_addr4; | |
284 | input[35:0] orig_buf_addr5; | |
285 | input[35:0] orig_buf_addr6; | |
286 | input[35:0] orig_buf_addr7; | |
287 | input[35:0] orig_buf_addr8; | |
288 | input[35:0] orig_buf_addr9; | |
289 | input[35:0] orig_buf_addr10; | |
290 | input[35:0] orig_buf_addr11; | |
291 | input[35:0] orig_buf_addr12; | |
292 | input[35:0] orig_buf_addr13; | |
293 | input[35:0] orig_buf_addr14; | |
294 | input[35:0] orig_buf_addr15; | |
295 | input[1:0] dma_func_num0; | |
296 | input[1:0] dma_func_num1; | |
297 | input[1:0] dma_func_num2; | |
298 | input[1:0] dma_func_num3; | |
299 | input[1:0] dma_func_num4; | |
300 | input[1:0] dma_func_num5; | |
301 | input[1:0] dma_func_num6; | |
302 | input[1:0] dma_func_num7; | |
303 | input[1:0] dma_func_num8; | |
304 | input[1:0] dma_func_num9; | |
305 | input[1:0] dma_func_num10; | |
306 | input[1:0] dma_func_num11; | |
307 | input[1:0] dma_func_num12; | |
308 | input[1:0] dma_func_num13; | |
309 | input[1:0] dma_func_num14; | |
310 | input[1:0] dma_func_num15; | |
311 | input[1:0] pref_buf_used_num0; | |
312 | input[1:0] pref_buf_used_num1; | |
313 | input[1:0] pref_buf_used_num2; | |
314 | input[1:0] pref_buf_used_num3; | |
315 | input[1:0] pref_buf_used_num4; | |
316 | input[1:0] pref_buf_used_num5; | |
317 | input[1:0] pref_buf_used_num6; | |
318 | input[1:0] pref_buf_used_num7; | |
319 | input[1:0] pref_buf_used_num8; | |
320 | input[1:0] pref_buf_used_num9; | |
321 | input[1:0] pref_buf_used_num10; | |
322 | input[1:0] pref_buf_used_num11; | |
323 | input[1:0] pref_buf_used_num12; | |
324 | input[1:0] pref_buf_used_num13; | |
325 | input[1:0] pref_buf_used_num14; | |
326 | input[1:0] pref_buf_used_num15; | |
327 | input[13:0] pkt_trans_len0; | |
328 | input[13:0] pkt_trans_len1; | |
329 | input[13:0] pkt_trans_len2; | |
330 | input[13:0] pkt_trans_len3; | |
331 | input[13:0] pkt_trans_len4; | |
332 | input[13:0] pkt_trans_len5; | |
333 | input[13:0] pkt_trans_len6; | |
334 | input[13:0] pkt_trans_len7; | |
335 | input[13:0] pkt_trans_len8; | |
336 | input[13:0] pkt_trans_len9; | |
337 | input[13:0] pkt_trans_len10; | |
338 | input[13:0] pkt_trans_len11; | |
339 | input[13:0] pkt_trans_len12; | |
340 | input[13:0] pkt_trans_len13; | |
341 | input[13:0] pkt_trans_len14; | |
342 | input[13:0] pkt_trans_len15; | |
343 | input meta0_rdmc_wr_req_accept; | |
344 | ||
345 | output rdmc_meta0_wr_req; | |
346 | output[7:0] rdmc_meta0_wr_req_cmd; | |
347 | output[63:0] rdmc_meta0_wr_req_address; | |
348 | output[13:0] rdmc_meta0_wr_req_length; | |
349 | output[1:0] rdmc_meta0_wr_req_port_num; | |
350 | output[4:0] rdmc_meta0_wr_req_dma_num; | |
351 | output[4:0] rdmc_meta0_wr_req_dma_num_int; | |
352 | output[1:0] rdmc_meta0_wr_req_func_num; | |
353 | output full_hdr_r; | |
354 | output[13:0] pkt_trans_len_r; | |
355 | output[1:0] pref_buf_used_num_r; | |
356 | output drop_pkt_en_sm; | |
357 | output drop_pkt_en; | |
358 | output[3:0] drop_pkt_port_gnt; | |
359 | output drop_pad_data; | |
360 | output is_zcp0_wr_req; | |
361 | output is_zcp1_wr_req; | |
362 | output is_zcp2_wr_req; | |
363 | output is_zcp3_wr_req; | |
364 | output rdmc_wr_req_accept_hdr; | |
365 | output rdmc_wr_req_accept_jmb; | |
366 | output rdmc_wr_req_accept_zcp0; | |
367 | output rdmc_wr_req_accept_zcp1; | |
368 | output rdmc_wr_req_accept_zcp2; | |
369 | output rdmc_wr_req_accept_zcp3; | |
370 | output[3:0] port_gnt; | |
371 | output[3:0] port_gnt_r; | |
372 | output stage0_en; | |
373 | output stage1_en_r; | |
374 | output sel_buf_en; | |
375 | output pkt_buf_done; | |
376 | output is_hdr_wr_data; | |
377 | output is_jmb1_wr_data; | |
378 | output wr_last_pkt_data; | |
379 | output update_rcr_shadw; | |
380 | output[63:0] rcr_wrbk_data; | |
381 | output[4:0] wr_sched_sm_state; | |
382 | ||
383 | reg rdmc_wr_req_accept_in; | |
384 | reg rdmc_wr_req_accept_reg; | |
385 | reg rdmc_meta0_wr_req; | |
386 | reg[7:0] rdmc_meta0_wr_req_cmd; | |
387 | reg[63:0] rdmc_meta0_wr_req_address; | |
388 | reg[13:0] rdmc_meta0_wr_req_length; | |
389 | reg[1:0] rdmc_meta0_wr_req_port_num; | |
390 | reg[4:0] rdmc_meta0_wr_req_dma_num; | |
391 | reg[4:0] rdmc_meta0_wr_req_dma_num_int; | |
392 | reg[1:0] rdmc_meta0_wr_req_func_num; | |
393 | reg sel_buf_en; | |
394 | reg rdmc_wr_req_pulse; | |
395 | reg full_hdr_r; | |
396 | reg[13:0] pkt_trans_len_r; | |
397 | reg[13:0] pad_data_len; | |
398 | reg[1:0] pref_buf_used_num_r; | |
399 | reg[35:0] orig_buf_addr; | |
400 | reg[63:0] rcr_wrbk_data; | |
401 | ||
402 | reg idle_cycle; | |
403 | reg arb_cyc0_en; | |
404 | reg arb_cyc1_en; | |
405 | reg stage0_en; | |
406 | reg stage1_en; | |
407 | reg stage2_en; | |
408 | reg stage1_en_r; | |
409 | reg rdmc_wr_req_sm_hdr; | |
410 | reg rdmc_wr_req_sm_jmb1; | |
411 | reg rdmc_wr_req_sm_jmb2; | |
412 | reg rdmc_wr_req_sm_zcp0; | |
413 | reg rdmc_wr_req_sm_zcp1; | |
414 | reg rdmc_wr_req_sm_zcp2; | |
415 | reg rdmc_wr_req_sm_zcp3; | |
416 | reg pkt_buf_done; | |
417 | reg zcp_last_data_sm; | |
418 | reg drop_pkt_en_sm; | |
419 | reg bkup_wt_en; | |
420 | reg reset_port_gnt_sm; | |
421 | reg drop_pad_data; | |
422 | reg[4:0] state; | |
423 | reg[4:0] next_state; | |
424 | ||
425 | reg is_hdr_wr_req; | |
426 | reg is_jmb1_wr_req; | |
427 | reg is_jmb2_wr_req; | |
428 | reg is_zcp0_wr_req; | |
429 | reg is_zcp1_wr_req; | |
430 | reg is_zcp2_wr_req; | |
431 | reg is_zcp3_wr_req; | |
432 | reg is_hdr_wr_data; | |
433 | reg is_jmb1_wr_data; | |
434 | reg is_jmb2_wr_data; | |
435 | reg is_zcp0_wr_data; | |
436 | reg is_zcp1_wr_data; | |
437 | reg is_zcp2_wr_data; | |
438 | reg is_zcp3_wr_data; | |
439 | ||
440 | reg wr_last_pkt_data; | |
441 | reg zcp_wr_last_data; | |
442 | reg[1:0] pkt_buf_size_r; | |
443 | reg[22:0] pkt_wrbk_data_r; | |
444 | reg[40:0] bus_wrbk_data; | |
445 | ||
446 | reg drop_pkt_en; | |
447 | reg[3:0] drop_pkt_port_gnt; | |
448 | reg reset_port_gnt; | |
449 | reg[3:0] port_gnt; | |
450 | reg[3:0] port_gnt_r; | |
451 | reg[3:0] token; | |
452 | reg[3:0] final_req_r; | |
453 | reg is_org_req_r; | |
454 | reg is_bkup_req_r; | |
455 | ||
456 | reg[15:0] curr_wt0; | |
457 | reg[15:0] curr_wt1; | |
458 | reg[15:0] curr_wt2; | |
459 | reg[15:0] curr_wt3; | |
460 | ||
461 | reg[15:0] bkup_wt0; | |
462 | reg[15:0] bkup_wt1; | |
463 | reg[15:0] bkup_wt2; | |
464 | reg[15:0] bkup_wt3; | |
465 | ||
466 | wire[4:0] wr_sched_sm_state = state; | |
467 | ||
468 | wire rdmc_wr_req_sm; | |
469 | wire rdmc_wr_req_accept; | |
470 | wire rdmc_wr_req_accept_pulse; | |
471 | ||
472 | wire[3:0] pkt_buf_gnt_enc; | |
473 | wire[1:0] port_gnt_enc; | |
474 | wire full_hdr; | |
475 | ||
476 | wire rdmc_wr_req_sm_nom; | |
477 | wire[63:0] rdmc_req_addr_all; | |
478 | wire[13:0] pkt_trans_len_all; | |
479 | ||
480 | wire[3:0] mask_req; | |
481 | wire[3:0] org_req; | |
482 | wire[3:0] bkup_req; | |
483 | wire[3:0] final_req; | |
484 | wire is_org_req; | |
485 | wire is_mask_req; | |
486 | wire is_bkup_req; | |
487 | ||
488 | wire[3:0] n_flag = {curr_wt3[15], curr_wt2[15], curr_wt1[15], curr_wt0[15]}; | |
489 | wire[3:0] bkup_n_flag = {bkup_wt3[15], bkup_wt2[15], bkup_wt1[15], bkup_wt0[15]}; | |
490 | ||
491 | wire[3:0] sel_port_gnt; | |
492 | ||
493 | wire muxed_full_pkt = |(ipp_full_pkt & zcp_full_pkt & port_gnt); | |
494 | wire muxed_pkt_sop = |(ipp_pkt_sop & zcp_pkt_sop & port_gnt); | |
495 | ||
496 | wire jmb_pkt = pref_buf_used_num_r[1]; | |
497 | ||
498 | wire drop_pkt_req = |drop_pkt; | |
499 | ||
500 | wire is_wr_data; | |
501 | wire has_ly2_padding; | |
502 | ||
503 | parameter | |
504 | ||
505 | PORT_REQ = 5'd0, | |
506 | PORT_ARB = 5'd1, | |
507 | WAIT_PORT_RDY = 5'd2, | |
508 | BUF_COMP = 5'd3, | |
509 | BUF_SEL = 5'd4, | |
510 | BUS_REQ = 5'd5, | |
511 | WAIT_S1 = 5'd6, | |
512 | WAIT_S2 = 5'd7, | |
513 | JMB_REQ1_WAIT = 5'd8, | |
514 | JMB_REQ1_PRE = 5'd9, | |
515 | JMB_REQ1 = 5'd10, | |
516 | JMB_WAIT1 = 5'd11, | |
517 | JMB_REQ2 = 5'd12, | |
518 | JMB_WAIT2 = 5'd13, | |
519 | ZCP_REQ0_WAIT = 5'd14, | |
520 | ZCP_REQ0_PRE = 5'd15, | |
521 | ZCP_REQ0 = 5'd16, | |
522 | ZCP_WAIT0 = 5'd17, | |
523 | ZCP_REQ1 = 5'd18, | |
524 | ZCP_WAIT1 = 5'd19, | |
525 | ZCP_REQ2 = 5'd20, | |
526 | ZCP_WAIT2 = 5'd21, | |
527 | ZCP_REQ3 = 5'd22, | |
528 | ZCP_WAIT3 = 5'd23, | |
529 | DIS_PKT = 5'd24, | |
530 | DIS_PKT_WAIT = 5'd25, | |
531 | DIS_PKT_DONE_W = 5'd26, | |
532 | DIS_LY2_PADDING_W = 5'd27, | |
533 | DIS_LY2_PADDING = 5'd28; | |
534 | ||
535 | ||
536 | always @ (state or final_req or | |
537 | muxed_full_pkt or muxed_pkt_sop or | |
538 | rdmc_wr_req_accept or rdmc_meta0_wr_req or rdmc_wr_req_accept_pulse or | |
539 | muxed_zcopy_mode_r or jmb_pkt or pkt_req_cnt_done or pkt_req_cnt_done_r or | |
540 | pref_buf_used_num_r or zcp_wr_type or is_wr_data or | |
541 | drop_pkt_req or drop_pkt_done or muxed_data_err_r2 or | |
542 | pkt_req_cnt_pre_done or has_ly2_padding or rdmc_eop_for_padding) | |
543 | begin | |
544 | idle_cycle = 1'b0; | |
545 | arb_cyc0_en = 1'b0; | |
546 | arb_cyc1_en = 1'b0; | |
547 | stage0_en = 1'b0; | |
548 | stage1_en = 1'b0; | |
549 | stage2_en = 1'b0; | |
550 | rdmc_wr_req_sm_hdr = 1'b0; | |
551 | rdmc_wr_req_sm_jmb1 = 1'b0; | |
552 | rdmc_wr_req_sm_jmb2 = 1'b0; | |
553 | rdmc_wr_req_sm_zcp0 = 1'b0; | |
554 | rdmc_wr_req_sm_zcp1 = 1'b0; | |
555 | rdmc_wr_req_sm_zcp2 = 1'b0; | |
556 | rdmc_wr_req_sm_zcp3 = 1'b0; | |
557 | zcp_last_data_sm = 1'b0; | |
558 | pkt_buf_done = 1'b0; | |
559 | drop_pkt_en_sm = 1'b0; | |
560 | bkup_wt_en = 1'b0; | |
561 | reset_port_gnt_sm = 1'b0; | |
562 | drop_pad_data = 1'b0; | |
563 | ||
564 | case (state) //synopsys parallel_case full_case | |
565 | ||
566 | PORT_REQ: | |
567 | begin | |
568 | if (final_req) | |
569 | begin | |
570 | arb_cyc0_en = 1'b1; | |
571 | next_state = PORT_ARB; | |
572 | end | |
573 | else | |
574 | begin | |
575 | idle_cycle = 1'b1; | |
576 | next_state = state; | |
577 | end | |
578 | end | |
579 | ||
580 | PORT_ARB: | |
581 | begin | |
582 | arb_cyc1_en = 1'b1; | |
583 | next_state = WAIT_PORT_RDY; | |
584 | end | |
585 | ||
586 | WAIT_PORT_RDY: | |
587 | begin | |
588 | if (!(rdmc_meta0_wr_req | rdmc_wr_req_accept_pulse) | rdmc_wr_req_accept) | |
589 | begin | |
590 | if (!muxed_full_pkt & muxed_data_err_r2) | |
591 | next_state = PORT_REQ; | |
592 | else if (muxed_full_pkt & muxed_pkt_sop) | |
593 | begin | |
594 | stage0_en = 1'b1; | |
595 | next_state = BUF_COMP; | |
596 | end | |
597 | else | |
598 | next_state = state; | |
599 | end | |
600 | else | |
601 | next_state = state; | |
602 | end | |
603 | ||
604 | BUF_COMP: | |
605 | begin | |
606 | stage1_en = 1'b1; | |
607 | next_state = BUF_SEL; | |
608 | end | |
609 | ||
610 | BUF_SEL: | |
611 | begin | |
612 | stage2_en = 1'b1; | |
613 | next_state = BUS_REQ; | |
614 | end | |
615 | ||
616 | BUS_REQ: | |
617 | begin | |
618 | if (drop_pkt_req) | |
619 | next_state = DIS_PKT; | |
620 | else | |
621 | begin | |
622 | rdmc_wr_req_sm_hdr = 1'b1; | |
623 | next_state = WAIT_S1; | |
624 | end | |
625 | end | |
626 | ||
627 | WAIT_S1: | |
628 | begin | |
629 | reset_port_gnt_sm = 1'b1; | |
630 | if (muxed_zcopy_mode_r) | |
631 | begin | |
632 | pkt_buf_done = 1'b1; | |
633 | next_state = ZCP_REQ0_WAIT; | |
634 | end | |
635 | else if (jmb_pkt) | |
636 | next_state = JMB_REQ1_WAIT; | |
637 | else | |
638 | begin | |
639 | pkt_buf_done = 1'b1; | |
640 | bkup_wt_en = 1'b1; | |
641 | next_state = WAIT_S2; | |
642 | end | |
643 | end | |
644 | ||
645 | WAIT_S2: | |
646 | ||
647 | next_state = PORT_REQ; | |
648 | ||
649 | ||
650 | JMB_REQ1_WAIT: | |
651 | begin | |
652 | if (!(rdmc_meta0_wr_req | rdmc_wr_req_accept_pulse) | rdmc_wr_req_accept) | |
653 | next_state = JMB_REQ1_PRE; | |
654 | else | |
655 | next_state = state; | |
656 | end | |
657 | ||
658 | JMB_REQ1_PRE: | |
659 | next_state = JMB_REQ1; | |
660 | ||
661 | ||
662 | JMB_REQ1: | |
663 | begin | |
664 | if (pkt_req_cnt_done) | |
665 | begin | |
666 | rdmc_wr_req_sm_jmb1 = 1'b1; | |
667 | next_state = JMB_WAIT1; | |
668 | end | |
669 | else | |
670 | next_state = state; | |
671 | end | |
672 | ||
673 | JMB_WAIT1: | |
674 | begin | |
675 | if (pref_buf_used_num_r == 2'b10) | |
676 | begin | |
677 | pkt_buf_done = 1'b1; | |
678 | bkup_wt_en = 1'b1; | |
679 | next_state = PORT_REQ; | |
680 | end | |
681 | else | |
682 | next_state = JMB_REQ2; | |
683 | end | |
684 | ||
685 | JMB_REQ2: | |
686 | begin | |
687 | if (pkt_req_cnt_done) | |
688 | begin | |
689 | rdmc_wr_req_sm_jmb2 = 1'b1; | |
690 | next_state = JMB_WAIT2; | |
691 | end | |
692 | else | |
693 | next_state = state; | |
694 | end | |
695 | ||
696 | JMB_WAIT2: | |
697 | begin | |
698 | pkt_buf_done = 1'b1; | |
699 | bkup_wt_en = 1'b1; | |
700 | next_state = PORT_REQ; | |
701 | end | |
702 | ||
703 | ||
704 | ZCP_REQ0_WAIT: | |
705 | begin | |
706 | if (!(rdmc_meta0_wr_req | rdmc_wr_req_accept_pulse) | rdmc_wr_req_accept) | |
707 | next_state = ZCP_REQ0_PRE; | |
708 | else | |
709 | next_state = state; | |
710 | end | |
711 | ||
712 | ZCP_REQ0_PRE: | |
713 | next_state = ZCP_REQ0; | |
714 | ||
715 | ||
716 | ZCP_REQ0: | |
717 | begin | |
718 | if (pkt_req_cnt_done_r) | |
719 | begin | |
720 | rdmc_wr_req_sm_zcp0 = 1'b1; | |
721 | next_state = ZCP_WAIT0; | |
722 | end | |
723 | else | |
724 | next_state = state; | |
725 | end | |
726 | ||
727 | ZCP_WAIT0: | |
728 | begin | |
729 | if (zcp_wr_type == 2'b00) | |
730 | begin | |
731 | zcp_last_data_sm = 1'b1; | |
732 | bkup_wt_en = 1'b1; | |
733 | if (has_ly2_padding) | |
734 | next_state = DIS_LY2_PADDING_W; | |
735 | else | |
736 | next_state = PORT_REQ; | |
737 | end | |
738 | else | |
739 | next_state = ZCP_REQ1; | |
740 | end | |
741 | ||
742 | ZCP_REQ1: | |
743 | begin | |
744 | if (pkt_req_cnt_done_r) | |
745 | begin | |
746 | rdmc_wr_req_sm_zcp1 = 1'b1; | |
747 | next_state = ZCP_WAIT1; | |
748 | end | |
749 | else | |
750 | next_state = state; | |
751 | end | |
752 | ||
753 | ZCP_WAIT1: | |
754 | begin | |
755 | if (zcp_wr_type == 2'b01) | |
756 | begin | |
757 | zcp_last_data_sm = 1'b1; | |
758 | bkup_wt_en = 1'b1; | |
759 | if (has_ly2_padding) | |
760 | next_state = DIS_LY2_PADDING_W; | |
761 | else | |
762 | next_state = PORT_REQ; | |
763 | end | |
764 | else | |
765 | next_state = ZCP_REQ2; | |
766 | end | |
767 | ||
768 | ZCP_REQ2: | |
769 | begin | |
770 | if (pkt_req_cnt_done_r) | |
771 | begin | |
772 | rdmc_wr_req_sm_zcp2 = 1'b1; | |
773 | next_state = ZCP_WAIT2; | |
774 | end | |
775 | else | |
776 | next_state = state; | |
777 | end | |
778 | ||
779 | ZCP_WAIT2: | |
780 | begin | |
781 | if (zcp_wr_type == 2'b10) | |
782 | begin | |
783 | zcp_last_data_sm = 1'b1; | |
784 | bkup_wt_en = 1'b1; | |
785 | if (has_ly2_padding) | |
786 | next_state = DIS_LY2_PADDING_W; | |
787 | else | |
788 | next_state = PORT_REQ; | |
789 | end | |
790 | else | |
791 | next_state = ZCP_REQ3; | |
792 | end | |
793 | ||
794 | ||
795 | ZCP_REQ3: | |
796 | begin | |
797 | if (pkt_req_cnt_done_r) | |
798 | begin | |
799 | rdmc_wr_req_sm_zcp3 = 1'b1; | |
800 | next_state = ZCP_WAIT3; | |
801 | end | |
802 | else | |
803 | next_state = state; | |
804 | end | |
805 | ||
806 | ZCP_WAIT3: | |
807 | begin | |
808 | zcp_last_data_sm = 1'b1; | |
809 | bkup_wt_en = 1'b1; | |
810 | if (has_ly2_padding) | |
811 | next_state = DIS_LY2_PADDING_W; | |
812 | else | |
813 | next_state = PORT_REQ; | |
814 | end | |
815 | ||
816 | DIS_PKT: | |
817 | begin | |
818 | if (is_wr_data) | |
819 | next_state = DIS_PKT_WAIT; | |
820 | else | |
821 | begin | |
822 | reset_port_gnt_sm = 1'b1; | |
823 | drop_pkt_en_sm = 1'b1; | |
824 | bkup_wt_en = 1'b1; | |
825 | next_state = DIS_PKT_DONE_W; | |
826 | end | |
827 | end | |
828 | ||
829 | DIS_PKT_WAIT: | |
830 | begin | |
831 | if (!is_wr_data) | |
832 | next_state = DIS_PKT; | |
833 | else | |
834 | next_state = state; | |
835 | end | |
836 | ||
837 | DIS_PKT_DONE_W: | |
838 | begin | |
839 | if (drop_pkt_done) | |
840 | next_state = PORT_REQ; | |
841 | else | |
842 | next_state = state; | |
843 | end | |
844 | ||
845 | DIS_LY2_PADDING_W: | |
846 | begin | |
847 | if (pkt_req_cnt_pre_done) | |
848 | next_state = DIS_LY2_PADDING; | |
849 | else | |
850 | next_state = state; | |
851 | end | |
852 | ||
853 | DIS_LY2_PADDING: | |
854 | begin | |
855 | if (rdmc_eop_for_padding) | |
856 | next_state = PORT_REQ; | |
857 | else | |
858 | begin | |
859 | drop_pad_data = 1'b1; | |
860 | next_state = state; | |
861 | end | |
862 | end | |
863 | ||
864 | default: | |
865 | next_state = PORT_REQ; | |
866 | ||
867 | endcase | |
868 | end | |
869 | ||
870 | always @ (posedge clk) | |
871 | if (reset) | |
872 | state <= 5'b0; | |
873 | else | |
874 | state <= next_state; | |
875 | ||
876 | always @ (posedge clk) | |
877 | if (reset) | |
878 | sel_buf_en <= 1'b0; | |
879 | else | |
880 | sel_buf_en <= stage0_en; | |
881 | ||
882 | always @ (posedge clk) | |
883 | if (reset) | |
884 | stage1_en_r <= 1'b0; | |
885 | else | |
886 | stage1_en_r <= stage1_en; | |
887 | ||
888 | ||
889 | always @ (posedge clk) | |
890 | if (reset) | |
891 | rdmc_wr_req_pulse <= 1'b0; | |
892 | else | |
893 | rdmc_wr_req_pulse <= rdmc_wr_req_sm; | |
894 | ||
895 | always @ (posedge clk) | |
896 | if (reset) | |
897 | begin | |
898 | is_hdr_wr_req <= 1'b0; | |
899 | is_jmb1_wr_req <= 1'b0; | |
900 | is_jmb2_wr_req <= 1'b0; | |
901 | is_zcp0_wr_req <= 1'b0; | |
902 | is_zcp1_wr_req <= 1'b0; | |
903 | is_zcp2_wr_req <= 1'b0; | |
904 | is_zcp3_wr_req <= 1'b0; | |
905 | end | |
906 | else if (rdmc_wr_req_sm) | |
907 | begin | |
908 | is_hdr_wr_req <= rdmc_wr_req_sm_hdr; | |
909 | is_jmb1_wr_req <= rdmc_wr_req_sm_jmb1; | |
910 | is_jmb2_wr_req <= rdmc_wr_req_sm_jmb2; | |
911 | is_zcp0_wr_req <= rdmc_wr_req_sm_zcp0; | |
912 | is_zcp1_wr_req <= rdmc_wr_req_sm_zcp1; | |
913 | is_zcp2_wr_req <= rdmc_wr_req_sm_zcp2; | |
914 | is_zcp3_wr_req <= rdmc_wr_req_sm_zcp3; | |
915 | end | |
916 | else if (rdmc_wr_req_accept) | |
917 | begin | |
918 | is_hdr_wr_req <= 1'b0; | |
919 | is_jmb1_wr_req <= 1'b0; | |
920 | is_jmb2_wr_req <= 1'b0; | |
921 | is_zcp0_wr_req <= 1'b0; | |
922 | is_zcp1_wr_req <= 1'b0; | |
923 | is_zcp2_wr_req <= 1'b0; | |
924 | is_zcp3_wr_req <= 1'b0; | |
925 | end | |
926 | else | |
927 | begin | |
928 | is_hdr_wr_req <= is_hdr_wr_req; | |
929 | is_jmb1_wr_req <= is_jmb1_wr_req; | |
930 | is_jmb2_wr_req <= is_jmb2_wr_req; | |
931 | is_zcp0_wr_req <= is_zcp0_wr_req; | |
932 | is_zcp1_wr_req <= is_zcp1_wr_req; | |
933 | is_zcp2_wr_req <= is_zcp2_wr_req; | |
934 | is_zcp3_wr_req <= is_zcp3_wr_req; | |
935 | end | |
936 | ||
937 | ||
938 | always @ (posedge clk) | |
939 | if (reset) | |
940 | begin | |
941 | is_hdr_wr_data <= 1'b0; | |
942 | is_jmb1_wr_data <= 1'b0; | |
943 | is_jmb2_wr_data <= 1'b0; | |
944 | is_zcp0_wr_data <= 1'b0; | |
945 | is_zcp1_wr_data <= 1'b0; | |
946 | is_zcp2_wr_data <= 1'b0; | |
947 | is_zcp3_wr_data <= 1'b0; | |
948 | end | |
949 | else if (rdmc_wr_req_accept) | |
950 | begin | |
951 | is_hdr_wr_data <= is_hdr_wr_req; | |
952 | is_jmb1_wr_data <= is_jmb1_wr_req; | |
953 | is_jmb2_wr_data <= is_jmb2_wr_req; | |
954 | is_zcp0_wr_data <= is_zcp0_wr_req; | |
955 | is_zcp1_wr_data <= is_zcp1_wr_req; | |
956 | is_zcp2_wr_data <= is_zcp2_wr_req; | |
957 | is_zcp3_wr_data <= is_zcp3_wr_req; | |
958 | ||
959 | end | |
960 | else if (pkt_req_cnt_pre_done) | |
961 | begin | |
962 | is_hdr_wr_data <= 1'b0; | |
963 | is_jmb1_wr_data <= 1'b0; | |
964 | is_jmb2_wr_data <= 1'b0; | |
965 | is_zcp0_wr_data <= 1'b0; | |
966 | is_zcp1_wr_data <= 1'b0; | |
967 | is_zcp2_wr_data <= 1'b0; | |
968 | is_zcp3_wr_data <= 1'b0; | |
969 | end | |
970 | else | |
971 | begin | |
972 | is_hdr_wr_data <= is_hdr_wr_data; | |
973 | is_jmb1_wr_data <= is_jmb1_wr_data; | |
974 | is_jmb2_wr_data <= is_jmb2_wr_data; | |
975 | is_zcp0_wr_data <= is_zcp0_wr_data; | |
976 | is_zcp1_wr_data <= is_zcp1_wr_data; | |
977 | is_zcp2_wr_data <= is_zcp2_wr_data; | |
978 | is_zcp3_wr_data <= is_zcp3_wr_data; | |
979 | end | |
980 | ||
981 | always @ (posedge clk) | |
982 | if (reset) | |
983 | zcp_wr_last_data <= 1'b0; | |
984 | else if (zcp_last_data_sm) | |
985 | zcp_wr_last_data <= 1'b1; | |
986 | else if (pkt_req_cnt_pre_done) | |
987 | zcp_wr_last_data <= 1'b0; | |
988 | else | |
989 | zcp_wr_last_data <= zcp_wr_last_data; | |
990 | ||
991 | ||
992 | assign rdmc_wr_req_sm = rdmc_wr_req_sm_hdr | rdmc_wr_req_sm_jmb1 | rdmc_wr_req_sm_jmb2 | | |
993 | rdmc_wr_req_sm_zcp0 | rdmc_wr_req_sm_zcp1 | rdmc_wr_req_sm_zcp2 | | |
994 | rdmc_wr_req_sm_zcp3; | |
995 | ||
996 | wire rdmc_wr_req_accept_hdr = rdmc_wr_req_accept & is_hdr_wr_req; | |
997 | wire rdmc_wr_req_accept_jmb1 = rdmc_wr_req_accept & is_jmb1_wr_req; | |
998 | wire rdmc_wr_req_accept_jmb2 = rdmc_wr_req_accept & is_jmb2_wr_req; | |
999 | wire rdmc_wr_req_accept_zcp0 = rdmc_wr_req_accept & is_zcp0_wr_req; | |
1000 | wire rdmc_wr_req_accept_zcp1 = rdmc_wr_req_accept & is_zcp1_wr_req; | |
1001 | wire rdmc_wr_req_accept_zcp2 = rdmc_wr_req_accept & is_zcp2_wr_req; | |
1002 | wire rdmc_wr_req_accept_zcp3 = rdmc_wr_req_accept & is_zcp3_wr_req; | |
1003 | wire rdmc_wr_req_accept_jmb = rdmc_wr_req_accept_jmb1 | rdmc_wr_req_accept_jmb2; | |
1004 | ||
1005 | wire update_rcr_shadw_en = is_hdr_wr_data & !zcopy_mode | | |
1006 | is_jmb1_wr_data | is_jmb2_wr_data | | |
1007 | zcp_wr_last_data; | |
1008 | ||
1009 | wire wr_last_pkt_data_en = is_hdr_wr_data & !(zcopy_mode | jmb_pkt_type[1]) | | |
1010 | is_jmb1_wr_data & (jmb_pkt_type == 2'b10) | | |
1011 | is_jmb2_wr_data | zcp_wr_last_data; | |
1012 | ||
1013 | ||
1014 | wire update_rcr_shadw = pkt_req_cnt_pre_done & update_rcr_shadw_en; | |
1015 | ||
1016 | always @ (posedge clk) | |
1017 | if (reset) | |
1018 | wr_last_pkt_data <= 1'b0; | |
1019 | else | |
1020 | wr_last_pkt_data <= wr_last_pkt_data_en & pkt_req_cnt_pre_done; | |
1021 | ||
1022 | ||
1023 | /*********************************/ | |
1024 | //Select RDA Channel | |
1025 | /*********************************/ | |
1026 | wire[63:0] rdmc_req_addr_tmp = {64{pkt_buf_gnt[0]}} & pkt_buf_addr0 | | |
1027 | {64{pkt_buf_gnt[1]}} & pkt_buf_addr1 | | |
1028 | {64{pkt_buf_gnt[2]}} & pkt_buf_addr2 | | |
1029 | {64{pkt_buf_gnt[3]}} & pkt_buf_addr3 | | |
1030 | {64{pkt_buf_gnt[4]}} & pkt_buf_addr4 | | |
1031 | {64{pkt_buf_gnt[5]}} & pkt_buf_addr5 | | |
1032 | {64{pkt_buf_gnt[6]}} & pkt_buf_addr6 | | |
1033 | {64{pkt_buf_gnt[7]}} & pkt_buf_addr7 | | |
1034 | {64{pkt_buf_gnt[8]}} & pkt_buf_addr8 | | |
1035 | {64{pkt_buf_gnt[9]}} & pkt_buf_addr9 | | |
1036 | {64{pkt_buf_gnt[10]}} & pkt_buf_addr10 | | |
1037 | {64{pkt_buf_gnt[11]}} & pkt_buf_addr11 | | |
1038 | {64{pkt_buf_gnt[12]}} & pkt_buf_addr12 | | |
1039 | {64{pkt_buf_gnt[13]}} & pkt_buf_addr13 | | |
1040 | {64{pkt_buf_gnt[14]}} & pkt_buf_addr14 | | |
1041 | {64{pkt_buf_gnt[15]}} & pkt_buf_addr15; | |
1042 | ||
1043 | wire[35:0] orig_buf_addr_tmp = {36{pkt_buf_gnt[0]}} & orig_buf_addr0 | | |
1044 | {36{pkt_buf_gnt[1]}} & orig_buf_addr1 | | |
1045 | {36{pkt_buf_gnt[2]}} & orig_buf_addr2 | | |
1046 | {36{pkt_buf_gnt[3]}} & orig_buf_addr3 | | |
1047 | {36{pkt_buf_gnt[4]}} & orig_buf_addr4 | | |
1048 | {36{pkt_buf_gnt[5]}} & orig_buf_addr5 | | |
1049 | {36{pkt_buf_gnt[6]}} & orig_buf_addr6 | | |
1050 | {36{pkt_buf_gnt[7]}} & orig_buf_addr7 | | |
1051 | {36{pkt_buf_gnt[8]}} & orig_buf_addr8 | | |
1052 | {36{pkt_buf_gnt[9]}} & orig_buf_addr9 | | |
1053 | {36{pkt_buf_gnt[10]}} & orig_buf_addr10 | | |
1054 | {36{pkt_buf_gnt[11]}} & orig_buf_addr11 | | |
1055 | {36{pkt_buf_gnt[12]}} & orig_buf_addr12 | | |
1056 | {36{pkt_buf_gnt[13]}} & orig_buf_addr13 | | |
1057 | {36{pkt_buf_gnt[14]}} & orig_buf_addr14 | | |
1058 | {36{pkt_buf_gnt[15]}} & orig_buf_addr15; | |
1059 | ||
1060 | wire[1:0] pkt_buf_size_tmp = {2{pkt_buf_gnt[0]}} & pkt_buf_size0 | | |
1061 | {2{pkt_buf_gnt[1]}} & pkt_buf_size1 | | |
1062 | {2{pkt_buf_gnt[2]}} & pkt_buf_size2 | | |
1063 | {2{pkt_buf_gnt[3]}} & pkt_buf_size3 | | |
1064 | {2{pkt_buf_gnt[4]}} & pkt_buf_size4 | | |
1065 | {2{pkt_buf_gnt[5]}} & pkt_buf_size5 | | |
1066 | {2{pkt_buf_gnt[6]}} & pkt_buf_size6 | | |
1067 | {2{pkt_buf_gnt[7]}} & pkt_buf_size7 | | |
1068 | {2{pkt_buf_gnt[8]}} & pkt_buf_size8 | | |
1069 | {2{pkt_buf_gnt[9]}} & pkt_buf_size9 | | |
1070 | {2{pkt_buf_gnt[10]}} & pkt_buf_size10 | | |
1071 | {2{pkt_buf_gnt[11]}} & pkt_buf_size11 | | |
1072 | {2{pkt_buf_gnt[12]}} & pkt_buf_size12 | | |
1073 | {2{pkt_buf_gnt[13]}} & pkt_buf_size13 | | |
1074 | {2{pkt_buf_gnt[14]}} & pkt_buf_size14 | | |
1075 | {2{pkt_buf_gnt[15]}} & pkt_buf_size15; | |
1076 | ||
1077 | wire[1:0] pref_buf_used_num_tmp = {2{pkt_buf_gnt[0]}} & pref_buf_used_num0 | | |
1078 | {2{pkt_buf_gnt[1]}} & pref_buf_used_num1 | | |
1079 | {2{pkt_buf_gnt[2]}} & pref_buf_used_num2 | | |
1080 | {2{pkt_buf_gnt[3]}} & pref_buf_used_num3 | | |
1081 | {2{pkt_buf_gnt[4]}} & pref_buf_used_num4 | | |
1082 | {2{pkt_buf_gnt[5]}} & pref_buf_used_num5 | | |
1083 | {2{pkt_buf_gnt[6]}} & pref_buf_used_num6 | | |
1084 | {2{pkt_buf_gnt[7]}} & pref_buf_used_num7 | | |
1085 | {2{pkt_buf_gnt[8]}} & pref_buf_used_num8 | | |
1086 | {2{pkt_buf_gnt[9]}} & pref_buf_used_num9 | | |
1087 | {2{pkt_buf_gnt[10]}} & pref_buf_used_num10 | | |
1088 | {2{pkt_buf_gnt[11]}} & pref_buf_used_num11 | | |
1089 | {2{pkt_buf_gnt[12]}} & pref_buf_used_num12 | | |
1090 | {2{pkt_buf_gnt[13]}} & pref_buf_used_num13 | | |
1091 | {2{pkt_buf_gnt[14]}} & pref_buf_used_num14 | | |
1092 | {2{pkt_buf_gnt[15]}} & pref_buf_used_num15; | |
1093 | ||
1094 | wire[13:0] pkt_trans_len_tmp = {14{pkt_buf_gnt[0]}} & pkt_trans_len0 | | |
1095 | {14{pkt_buf_gnt[1]}} & pkt_trans_len1 | | |
1096 | {14{pkt_buf_gnt[2]}} & pkt_trans_len2 | | |
1097 | {14{pkt_buf_gnt[3]}} & pkt_trans_len3 | | |
1098 | {14{pkt_buf_gnt[4]}} & pkt_trans_len4 | | |
1099 | {14{pkt_buf_gnt[5]}} & pkt_trans_len5 | | |
1100 | {14{pkt_buf_gnt[6]}} & pkt_trans_len6 | | |
1101 | {14{pkt_buf_gnt[7]}} & pkt_trans_len7 | | |
1102 | {14{pkt_buf_gnt[8]}} & pkt_trans_len8 | | |
1103 | {14{pkt_buf_gnt[9]}} & pkt_trans_len9 | | |
1104 | {14{pkt_buf_gnt[10]}} & pkt_trans_len10 | | |
1105 | {14{pkt_buf_gnt[11]}} & pkt_trans_len11 | | |
1106 | {14{pkt_buf_gnt[12]}} & pkt_trans_len12 | | |
1107 | {14{pkt_buf_gnt[13]}} & pkt_trans_len13 | | |
1108 | {14{pkt_buf_gnt[14]}} & pkt_trans_len14 | | |
1109 | {14{pkt_buf_gnt[15]}} & pkt_trans_len15; | |
1110 | ||
1111 | wire[1:0] dma_func_num_tmp = {2{pkt_buf_gnt[0]}} & dma_func_num0 | | |
1112 | {2{pkt_buf_gnt[1]}} & dma_func_num1 | | |
1113 | {2{pkt_buf_gnt[2]}} & dma_func_num2 | | |
1114 | {2{pkt_buf_gnt[3]}} & dma_func_num3 | | |
1115 | {2{pkt_buf_gnt[4]}} & dma_func_num4 | | |
1116 | {2{pkt_buf_gnt[5]}} & dma_func_num5 | | |
1117 | {2{pkt_buf_gnt[6]}} & dma_func_num6 | | |
1118 | {2{pkt_buf_gnt[7]}} & dma_func_num7 | | |
1119 | {2{pkt_buf_gnt[8]}} & dma_func_num8 | | |
1120 | {2{pkt_buf_gnt[9]}} & dma_func_num9 | | |
1121 | {2{pkt_buf_gnt[10]}} & dma_func_num10 | | |
1122 | {2{pkt_buf_gnt[11]}} & dma_func_num11 | | |
1123 | {2{pkt_buf_gnt[12]}} & dma_func_num12 | | |
1124 | {2{pkt_buf_gnt[13]}} & dma_func_num13 | | |
1125 | {2{pkt_buf_gnt[14]}} & dma_func_num14 | | |
1126 | {2{pkt_buf_gnt[15]}} & dma_func_num15; | |
1127 | ||
1128 | ||
1129 | niu_rdmc_encode_32 encode_32_inst_a ( | |
1130 | .din (pkt_buf_gnt), | |
1131 | .dout (pkt_buf_gnt_enc) | |
1132 | ); | |
1133 | ||
1134 | assign port_gnt_enc = (port_gnt == 4'b0010) ? 2'b01 : | |
1135 | (port_gnt == 4'b0100) ? 2'b10 : | |
1136 | (port_gnt == 4'b1000) ? 2'b11 : | |
1137 | 2'b00; | |
1138 | ||
1139 | assign full_hdr = |(full_hdr_bits & pkt_buf_gnt); | |
1140 | ||
1141 | ||
1142 | assign rdmc_wr_req_sm_nom = rdmc_wr_req_sm_hdr | rdmc_wr_req_sm_jmb1 | rdmc_wr_req_sm_jmb2; | |
1143 | ||
1144 | assign rdmc_req_addr_all = rdmc_wr_req_sm_nom ? rdmc_req_addr_tmp : | |
1145 | rdmc_wr_req_sm_zcp0 ? zcp_vaddr0 : | |
1146 | rdmc_wr_req_sm_zcp1 ? zcp_vaddr1 : | |
1147 | rdmc_wr_req_sm_zcp2 ? zcp_vaddr2 : | |
1148 | zcp_vaddr3; | |
1149 | ||
1150 | assign pkt_trans_len_all = rdmc_wr_req_sm_nom ? pkt_trans_len_tmp : | |
1151 | rdmc_wr_req_sm_zcp0 ? zcp_len0 : | |
1152 | rdmc_wr_req_sm_zcp1 ? zcp_len1 : | |
1153 | rdmc_wr_req_sm_zcp2 ? zcp_len2 : | |
1154 | zcp_len3; | |
1155 | ||
1156 | always @ (posedge clk) | |
1157 | if (reset) | |
1158 | pkt_trans_len_r <= 14'b0; | |
1159 | else if (rdmc_wr_req_sm) | |
1160 | pkt_trans_len_r <= pkt_trans_len_all; | |
1161 | else | |
1162 | pkt_trans_len_r <= pkt_trans_len_r; | |
1163 | ||
1164 | always @ (posedge clk) | |
1165 | if (reset) | |
1166 | orig_buf_addr <= 36'b0; | |
1167 | else if (rdmc_wr_req_pulse) | |
1168 | orig_buf_addr <= orig_buf_addr_tmp; | |
1169 | else | |
1170 | orig_buf_addr <= orig_buf_addr; | |
1171 | ||
1172 | always @ (posedge clk) | |
1173 | if (reset) | |
1174 | pkt_buf_size_r <= 2'b0; | |
1175 | else if (rdmc_wr_req_pulse & is_hdr_wr_req) | |
1176 | pkt_buf_size_r <= pkt_buf_size_tmp; | |
1177 | else | |
1178 | pkt_buf_size_r <= pkt_buf_size_r; | |
1179 | ||
1180 | always @ (posedge clk) | |
1181 | if (reset) | |
1182 | pref_buf_used_num_r <= 2'b0; | |
1183 | else if (rdmc_wr_req_sm_hdr) | |
1184 | pref_buf_used_num_r <= pref_buf_used_num_tmp; | |
1185 | else | |
1186 | pref_buf_used_num_r <= pref_buf_used_num_r; | |
1187 | ||
1188 | ||
1189 | always @ (posedge clk) | |
1190 | if (reset) | |
1191 | full_hdr_r <= 1'b0; | |
1192 | else if (rdmc_wr_req_pulse & is_hdr_wr_req) | |
1193 | full_hdr_r <= full_hdr; | |
1194 | else | |
1195 | full_hdr_r <= full_hdr_r; | |
1196 | ||
1197 | wire multi_bit = rdmc_wr_req_accept_hdr ? pref_buf_used_num_r[1] : | |
1198 | rdmc_wr_req_accept_jmb1 ? (&pref_buf_used_num_r) : 1'b0; | |
1199 | ||
1200 | ||
1201 | always @ (posedge clk) | |
1202 | if (reset) | |
1203 | pkt_wrbk_data_r <= 23'b0; | |
1204 | else if (rdmc_wr_req_accept_hdr) | |
1205 | pkt_wrbk_data_r <= pkt_wrbk_data[22:0]; | |
1206 | else | |
1207 | pkt_wrbk_data_r <= pkt_wrbk_data_r; | |
1208 | ||
1209 | always @ (posedge clk) | |
1210 | if (reset) | |
1211 | bus_wrbk_data <= 41'b0; | |
1212 | else if (rdmc_wr_req_accept_hdr | rdmc_wr_req_accept_jmb1 | rdmc_wr_req_accept_jmb2) | |
1213 | bus_wrbk_data <= {multi_bit, pkt_buf_size_r, orig_buf_addr[35:0], 2'b00}; | |
1214 | else | |
1215 | bus_wrbk_data <= bus_wrbk_data; | |
1216 | ||
1217 | always @ (posedge clk) | |
1218 | if (reset) | |
1219 | rcr_wrbk_data <= 64'b0; | |
1220 | else if (update_rcr_shadw) | |
1221 | rcr_wrbk_data <= {bus_wrbk_data[40], pkt_wrbk_data_r[22:0], bus_wrbk_data[39:0]}; | |
1222 | else | |
1223 | rcr_wrbk_data <= rcr_wrbk_data; | |
1224 | ||
1225 | ||
1226 | /******************/ | |
1227 | //Drop Packet | |
1228 | /******************/ | |
1229 | always @ (posedge clk) | |
1230 | if (reset) | |
1231 | drop_pkt_en <= 1'b0; | |
1232 | else if (drop_pkt_en_sm) | |
1233 | drop_pkt_en <= 1'b1; | |
1234 | else if (drop_pkt_done) | |
1235 | drop_pkt_en <= 1'b0; | |
1236 | else | |
1237 | drop_pkt_en <= drop_pkt_en; | |
1238 | ||
1239 | always @ (posedge clk) | |
1240 | if (reset) | |
1241 | drop_pkt_port_gnt <= 4'b0; | |
1242 | else if (drop_pkt_en_sm) | |
1243 | drop_pkt_port_gnt <= port_gnt; | |
1244 | else if (drop_pkt_done) | |
1245 | drop_pkt_port_gnt <= 4'b0; | |
1246 | else | |
1247 | drop_pkt_port_gnt <= drop_pkt_port_gnt; | |
1248 | ||
1249 | /******************/ | |
1250 | //Detect L2 Padding | |
1251 | /******************/ | |
1252 | wire pad_data_len_reg_en = rdmc_wr_req_sm_hdr | | |
1253 | rdmc_wr_req_sm_zcp0 | rdmc_wr_req_sm_zcp1 | | |
1254 | rdmc_wr_req_sm_zcp2 | rdmc_wr_req_sm_zcp3 ; | |
1255 | ||
1256 | wire[13:0] pad_data_len_in = {14{rdmc_wr_req_sm_hdr}} & muxed_pkt_len_r | | |
1257 | {14{rdmc_wr_req_sm_zcp0}} & zcp_len0 | | |
1258 | {14{rdmc_wr_req_sm_zcp1}} & zcp_len1 | | |
1259 | {14{rdmc_wr_req_sm_zcp2}} & zcp_len2 | | |
1260 | {14{rdmc_wr_req_sm_zcp3}} & zcp_len3 ; | |
1261 | ||
1262 | wire[13:0] pad_data_len_tmp = pad_data_len - pad_data_len_in; | |
1263 | ||
1264 | always @ (posedge clk) | |
1265 | if (reset) | |
1266 | pad_data_len <= 14'b0; | |
1267 | else if (pad_data_len_reg_en) | |
1268 | pad_data_len <= pad_data_len_tmp; | |
1269 | else if (stage1_en) | |
1270 | pad_data_len <= muxed_l2_len_r; | |
1271 | else | |
1272 | pad_data_len <= pad_data_len; | |
1273 | ||
1274 | ||
1275 | assign has_ly2_padding = (|pad_data_len[13:4]) | (pad_data_len[3:0] >= muxed_l2_len_r[3:0]) & (|muxed_l2_len_r[3:0]); | |
1276 | ||
1277 | ||
1278 | /*********************************/ | |
1279 | //CMD interface signals | |
1280 | /*********************************/ | |
1281 | always @ (posedge clk) | |
1282 | if (reset) | |
1283 | rdmc_meta0_wr_req <= 1'b0; | |
1284 | else if (meta0_rdmc_wr_req_accept) | |
1285 | rdmc_meta0_wr_req <= 1'b0; | |
1286 | else if (rdmc_wr_req_sm) | |
1287 | rdmc_meta0_wr_req <= 1'b1; | |
1288 | else | |
1289 | rdmc_meta0_wr_req <= rdmc_meta0_wr_req; | |
1290 | ||
1291 | always @ (posedge clk) | |
1292 | if (reset) | |
1293 | rdmc_meta0_wr_req_cmd <= 8'b0; | |
1294 | else if (rdmc_wr_req_sm & rx_addr_32b_mode) | |
1295 | rdmc_meta0_wr_req_cmd <= 8'b0010_0001; | |
1296 | else if (rdmc_wr_req_sm) | |
1297 | rdmc_meta0_wr_req_cmd <= 8'b0010_1001; | |
1298 | else | |
1299 | rdmc_meta0_wr_req_cmd <= rdmc_meta0_wr_req_cmd; | |
1300 | ||
1301 | always @ (posedge clk) | |
1302 | if (reset) | |
1303 | rdmc_meta0_wr_req_address <= 64'b0; | |
1304 | else if (rdmc_wr_req_sm & rx_addr_32b_mode) | |
1305 | rdmc_meta0_wr_req_address <= {32'b0, rdmc_req_addr_all[31:0]}; | |
1306 | else if (rdmc_wr_req_sm) | |
1307 | rdmc_meta0_wr_req_address <= rdmc_req_addr_all[63:0]; | |
1308 | else | |
1309 | rdmc_meta0_wr_req_address <= rdmc_meta0_wr_req_address; | |
1310 | ||
1311 | always @ (posedge clk) | |
1312 | if (reset) | |
1313 | rdmc_meta0_wr_req_length <= 14'b0; | |
1314 | else if (rdmc_wr_req_sm) | |
1315 | rdmc_meta0_wr_req_length <= pkt_trans_len_all[13:0]; | |
1316 | else | |
1317 | rdmc_meta0_wr_req_length <= rdmc_meta0_wr_req_length; | |
1318 | ||
1319 | always @ (posedge clk) | |
1320 | if (reset) | |
1321 | rdmc_meta0_wr_req_port_num <= 2'b0; | |
1322 | else if (rdmc_wr_req_sm_hdr) | |
1323 | rdmc_meta0_wr_req_port_num <= port_gnt_enc; | |
1324 | else | |
1325 | rdmc_meta0_wr_req_port_num <= rdmc_meta0_wr_req_port_num; | |
1326 | ||
1327 | wire rdmc_wr_req_sm_zcp = rdmc_wr_req_sm_zcp0 | | |
1328 | rdmc_wr_req_sm_zcp1 | | |
1329 | rdmc_wr_req_sm_zcp2 | | |
1330 | rdmc_wr_req_sm_zcp3; | |
1331 | always @ (posedge clk) | |
1332 | if (reset) | |
1333 | rdmc_meta0_wr_req_dma_num <= 5'b0; | |
1334 | else if (rdmc_wr_req_sm_hdr) | |
1335 | rdmc_meta0_wr_req_dma_num <= {1'b0, pkt_buf_gnt_enc}; | |
1336 | else if (rdmc_wr_req_sm_zcp) | |
1337 | rdmc_meta0_wr_req_dma_num <= zcp_rdc_num; | |
1338 | else | |
1339 | rdmc_meta0_wr_req_dma_num <= rdmc_meta0_wr_req_dma_num; | |
1340 | ||
1341 | always @ (posedge clk) | |
1342 | if (reset) | |
1343 | rdmc_meta0_wr_req_dma_num_int <= 5'b0; //for output timing | |
1344 | else if (rdmc_wr_req_sm_hdr) | |
1345 | rdmc_meta0_wr_req_dma_num_int <= {1'b0, pkt_buf_gnt_enc}; | |
1346 | else if (rdmc_wr_req_sm_zcp) | |
1347 | rdmc_meta0_wr_req_dma_num_int <= zcp_rdc_num; | |
1348 | else | |
1349 | rdmc_meta0_wr_req_dma_num_int <= rdmc_meta0_wr_req_dma_num_int; | |
1350 | ||
1351 | always @ (posedge clk) | |
1352 | if (reset) | |
1353 | rdmc_meta0_wr_req_func_num <= 2'b0; | |
1354 | else if (rdmc_wr_req_sm_hdr) | |
1355 | rdmc_meta0_wr_req_func_num <= dma_func_num_tmp; | |
1356 | else if (rdmc_wr_req_sm_zcp) | |
1357 | rdmc_meta0_wr_req_func_num <= zcp_func_num; //need change | |
1358 | else | |
1359 | rdmc_meta0_wr_req_func_num <= rdmc_meta0_wr_req_func_num; | |
1360 | ||
1361 | ||
1362 | /**********************************************************/ | |
1363 | //Generate rdmc_wr_req_accept pulse for the second pipeline | |
1364 | /**********************************************************/ | |
1365 | assign is_wr_data = is_hdr_wr_data | is_jmb1_wr_data | is_jmb2_wr_data | | |
1366 | is_zcp0_wr_data | is_zcp1_wr_data | is_zcp2_wr_data | is_zcp3_wr_data; | |
1367 | ||
1368 | assign rdmc_wr_req_accept_pulse = rdmc_wr_req_accept_in | rdmc_wr_req_accept_reg; | |
1369 | ||
1370 | always @ (posedge clk) | |
1371 | if (reset) | |
1372 | rdmc_wr_req_accept_in <= 1'b0; | |
1373 | else | |
1374 | rdmc_wr_req_accept_in <= meta0_rdmc_wr_req_accept; | |
1375 | ||
1376 | always @ (posedge clk) | |
1377 | if (reset) | |
1378 | rdmc_wr_req_accept_reg <= 1'b0; | |
1379 | else if (rdmc_wr_req_accept_in & is_wr_data & !pkt_req_cnt_pre_done) | |
1380 | rdmc_wr_req_accept_reg <= 1'b1; | |
1381 | else if (rdmc_wr_req_accept) | |
1382 | rdmc_wr_req_accept_reg <= 1'b0; | |
1383 | else | |
1384 | rdmc_wr_req_accept_reg <= rdmc_wr_req_accept_reg; | |
1385 | ||
1386 | assign rdmc_wr_req_accept = rdmc_wr_req_accept_pulse & !is_wr_data | | |
1387 | rdmc_wr_req_accept_pulse & is_wr_data & pkt_req_cnt_pre_done; | |
1388 | ||
1389 | ||
1390 | /***************************/ | |
1391 | //4-Portso DDR Arbiter | |
1392 | /***************************/ | |
1393 | assign org_req = ipp_full_pkt & zcp_full_pkt; | |
1394 | assign mask_req = org_req & ~n_flag; | |
1395 | assign bkup_req = org_req & ~bkup_n_flag; | |
1396 | ||
1397 | assign is_mask_req = |mask_req; | |
1398 | assign is_org_req = |org_req; | |
1399 | assign is_bkup_req = |bkup_req; | |
1400 | ||
1401 | assign final_req = is_mask_req ? mask_req : | |
1402 | is_bkup_req ? bkup_req : | |
1403 | org_req; | |
1404 | ||
1405 | niu_rdmc_rr_arbiter rr_arbiter_inst_a (.req (final_req_r), | |
1406 | .token (token), | |
1407 | .gnt (sel_port_gnt) | |
1408 | ); | |
1409 | ||
1410 | ||
1411 | always @ (posedge clk) | |
1412 | if (reset) | |
1413 | reset_port_gnt <= 1'b0; | |
1414 | else | |
1415 | reset_port_gnt <= reset_port_gnt_sm; | |
1416 | ||
1417 | always @ (posedge clk) | |
1418 | if (reset) | |
1419 | port_gnt <= 4'b0; | |
1420 | else if (arb_cyc1_en) | |
1421 | port_gnt <= sel_port_gnt; | |
1422 | else if (reset_port_gnt) | |
1423 | port_gnt <= 4'b0; | |
1424 | else | |
1425 | port_gnt <= port_gnt; | |
1426 | ||
1427 | always @ (posedge clk) | |
1428 | if (reset) | |
1429 | port_gnt_r <= 4'b0; | |
1430 | else if (rdmc_wr_req_sm_hdr | drop_pkt_req) | |
1431 | port_gnt_r <= port_gnt; | |
1432 | else | |
1433 | port_gnt_r <= port_gnt_r; | |
1434 | ||
1435 | always @ (posedge clk) | |
1436 | if (reset) | |
1437 | token <= 4'b0001; | |
1438 | else if (arb_cyc1_en & (|sel_port_gnt)) | |
1439 | token <= {sel_port_gnt[2:0], sel_port_gnt[3]}; | |
1440 | else | |
1441 | token <= token; | |
1442 | ||
1443 | ||
1444 | always @ (posedge clk) | |
1445 | if (reset) | |
1446 | final_req_r <= 4'b0; | |
1447 | else if (arb_cyc0_en) | |
1448 | final_req_r <= final_req; | |
1449 | else | |
1450 | final_req_r <= final_req_r; | |
1451 | ||
1452 | always @ (posedge clk) | |
1453 | if (reset) | |
1454 | begin | |
1455 | is_bkup_req_r <= 1'b0; | |
1456 | is_org_req_r <= 1'b0; | |
1457 | end | |
1458 | else if (arb_cyc0_en) | |
1459 | begin | |
1460 | is_bkup_req_r <= !is_mask_req & is_bkup_req; | |
1461 | is_org_req_r <= !(is_mask_req | is_bkup_req) & is_org_req; | |
1462 | end | |
1463 | else | |
1464 | begin | |
1465 | is_bkup_req_r <= is_bkup_req_r; | |
1466 | is_org_req_r <= is_org_req_r; | |
1467 | end | |
1468 | ||
1469 | ||
1470 | /*********************************/ | |
1471 | //Weight Calculation | |
1472 | /*********************************/ | |
1473 | wire[15:0] curr_wt0_tmp = (curr_wt0 - {6'b0, muxed_l2_len_r[13:4]}); | |
1474 | wire[15:0] curr_wt1_tmp = (curr_wt1 - {6'b0, muxed_l2_len_r[13:4]}); | |
1475 | wire[15:0] curr_wt2_tmp = (curr_wt2 - {6'b0, muxed_l2_len_r[13:4]}); | |
1476 | wire[15:0] curr_wt3_tmp = (curr_wt3 - {6'b0, muxed_l2_len_r[13:4]}); | |
1477 | ||
1478 | wire[15:0] bkup_wt0_tmp = n_flag[0] ? (pt_drr_wt0_reg + curr_wt0[15:0]) : pt_drr_wt0_reg; | |
1479 | wire[15:0] bkup_wt1_tmp = n_flag[1] ? (pt_drr_wt1_reg + curr_wt1[15:0]) : pt_drr_wt1_reg; | |
1480 | wire[15:0] bkup_wt2_tmp = n_flag[2] ? (pt_drr_wt2_reg + curr_wt2[15:0]) : pt_drr_wt2_reg; | |
1481 | wire[15:0] bkup_wt3_tmp = n_flag[3] ? (pt_drr_wt3_reg + curr_wt3[15:0]) : pt_drr_wt3_reg; | |
1482 | ||
1483 | wire[15:0] new_bkup_wt0 = bkup_n_flag[0] ? (pt_drr_wt0_reg + bkup_wt0[15:0]) : pt_drr_wt0_reg; | |
1484 | wire[15:0] new_bkup_wt1 = bkup_n_flag[1] ? (pt_drr_wt1_reg + bkup_wt1[15:0]) : pt_drr_wt1_reg; | |
1485 | wire[15:0] new_bkup_wt2 = bkup_n_flag[2] ? (pt_drr_wt2_reg + bkup_wt2[15:0]) : pt_drr_wt2_reg; | |
1486 | wire[15:0] new_bkup_wt3 = bkup_n_flag[3] ? (pt_drr_wt3_reg + bkup_wt3[15:0]) : pt_drr_wt3_reg; | |
1487 | ||
1488 | wire update_curr_wt = arb_cyc1_en & is_bkup_req_r; | |
1489 | wire reset_curr_wt = arb_cyc1_en & is_org_req_r | idle_cycle; | |
1490 | wire update_bkup_wt = bkup_wt_en & (&(bkup_n_flag | ~org_req)); | |
1491 | wire reset_bkup_wt = update_curr_wt | reset_curr_wt; | |
1492 | ||
1493 | always @ (posedge clk) | |
1494 | if (reset) | |
1495 | curr_wt0 <= 16'h0400; | |
1496 | else if (stage1_en & port_gnt[0]) | |
1497 | curr_wt0 <= curr_wt0_tmp; | |
1498 | else if (reset_curr_wt) | |
1499 | curr_wt0 <= pt_drr_wt0_reg; | |
1500 | else if (update_curr_wt) | |
1501 | curr_wt0 <= bkup_wt0; | |
1502 | else | |
1503 | curr_wt0 <= curr_wt0; | |
1504 | ||
1505 | always @ (posedge clk) | |
1506 | if (reset) | |
1507 | curr_wt1 <= 16'h0400; | |
1508 | else if (stage1_en & port_gnt[1]) | |
1509 | curr_wt1 <= curr_wt1_tmp; | |
1510 | else if (reset_curr_wt) | |
1511 | curr_wt1 <= pt_drr_wt1_reg; | |
1512 | else if (update_curr_wt) | |
1513 | curr_wt1 <= bkup_wt1; | |
1514 | else | |
1515 | curr_wt1 <= curr_wt1; | |
1516 | ||
1517 | always @ (posedge clk) | |
1518 | if (reset) | |
1519 | curr_wt2 <= 16'h0066; | |
1520 | else if (stage1_en & port_gnt[2]) | |
1521 | curr_wt2 <= curr_wt2_tmp; | |
1522 | else if (reset_curr_wt) | |
1523 | curr_wt2 <= pt_drr_wt2_reg; | |
1524 | else if (update_curr_wt) | |
1525 | curr_wt2 <= bkup_wt2; | |
1526 | else | |
1527 | curr_wt2 <= curr_wt2; | |
1528 | ||
1529 | always @ (posedge clk) | |
1530 | if (reset) | |
1531 | curr_wt3 <= 16'h0066; | |
1532 | else if (stage1_en & port_gnt[3]) | |
1533 | curr_wt3 <= curr_wt3_tmp; | |
1534 | else if (reset_curr_wt) | |
1535 | curr_wt3 <= pt_drr_wt3_reg; | |
1536 | else if (update_curr_wt) | |
1537 | curr_wt3 <= bkup_wt3; | |
1538 | else | |
1539 | curr_wt3 <= curr_wt3; | |
1540 | ||
1541 | ||
1542 | always @ (posedge clk) | |
1543 | if (reset) | |
1544 | bkup_wt0 <= 16'h0400; | |
1545 | else if (stage2_en & port_gnt[0]) | |
1546 | bkup_wt0 <= bkup_wt0_tmp; | |
1547 | else if (update_bkup_wt) | |
1548 | bkup_wt0 <= new_bkup_wt0; | |
1549 | else if (reset_bkup_wt) | |
1550 | bkup_wt0 <= pt_drr_wt0_reg; | |
1551 | else | |
1552 | bkup_wt0 <= bkup_wt0; | |
1553 | ||
1554 | ||
1555 | always @ (posedge clk) | |
1556 | if (reset) | |
1557 | bkup_wt1 <= 16'h0400; | |
1558 | else if (stage2_en & port_gnt[1]) | |
1559 | bkup_wt1 <= bkup_wt1_tmp; | |
1560 | else if (update_bkup_wt) | |
1561 | bkup_wt1 <= new_bkup_wt1; | |
1562 | else if (reset_bkup_wt) | |
1563 | bkup_wt1 <= pt_drr_wt1_reg; | |
1564 | else | |
1565 | bkup_wt1 <= bkup_wt1; | |
1566 | ||
1567 | always @ (posedge clk) | |
1568 | if (reset) | |
1569 | bkup_wt2 <= 16'h0066; | |
1570 | else if (stage2_en & port_gnt[2]) | |
1571 | bkup_wt2 <= bkup_wt2_tmp; | |
1572 | else if (update_bkup_wt) | |
1573 | bkup_wt2 <= new_bkup_wt2; | |
1574 | else if (reset_bkup_wt) | |
1575 | bkup_wt2 <= pt_drr_wt2_reg; | |
1576 | else | |
1577 | bkup_wt2 <= bkup_wt2; | |
1578 | ||
1579 | always @ (posedge clk) | |
1580 | if (reset) | |
1581 | bkup_wt3 <= 16'h0066; | |
1582 | else if (stage2_en & port_gnt[3]) | |
1583 | bkup_wt3 <= bkup_wt3_tmp; | |
1584 | else if (update_bkup_wt) | |
1585 | bkup_wt3 <= new_bkup_wt3; | |
1586 | else if (reset_bkup_wt) | |
1587 | bkup_wt3 <= pt_drr_wt3_reg; | |
1588 | else | |
1589 | bkup_wt3 <= bkup_wt3; | |
1590 | ||
1591 | ||
1592 | endmodule | |
1593 | ||
1594 | ||
1595 | ||
1596 | ||
1597 | ||
1598 | ||
1599 |