Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_rdmc_rcr_acc_ctrl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_rdmc_rcr_acc_ctrl.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 ============================================
35module niu_rdmc_rcr_acc_ctrl (
36 clk,
37 reset,
38 rx_addr_32b_mode,
39 rcr_ack_accept,
40 rcr_wrbk_req,
41 rcr_wrbk_data_type,
42 rcr_wrbk_addr0,
43 rcr_wrbk_addr1,
44 rcr_wrbk_addr2,
45 rcr_wrbk_addr3,
46 rcr_wrbk_addr4,
47 rcr_wrbk_addr5,
48 rcr_wrbk_addr6,
49 rcr_wrbk_addr7,
50 rcr_wrbk_addr8,
51 rcr_wrbk_addr9,
52 rcr_wrbk_addr10,
53 rcr_wrbk_addr11,
54 rcr_wrbk_addr12,
55 rcr_wrbk_addr13,
56 rcr_wrbk_addr14,
57 rcr_wrbk_addr15,
58 rcr_wrbk_numb0,
59 rcr_wrbk_numb1,
60 rcr_wrbk_numb2,
61 rcr_wrbk_numb3,
62 rcr_wrbk_numb4,
63 rcr_wrbk_numb5,
64 rcr_wrbk_numb6,
65 rcr_wrbk_numb7,
66 rcr_wrbk_numb8,
67 rcr_wrbk_numb9,
68 rcr_wrbk_numb10,
69 rcr_wrbk_numb11,
70 rcr_wrbk_numb12,
71 rcr_wrbk_numb13,
72 rcr_wrbk_numb14,
73 rcr_wrbk_numb15,
74 dma_func_num0,
75 dma_func_num1,
76 dma_func_num2,
77 dma_func_num3,
78 dma_func_num4,
79 dma_func_num5,
80 dma_func_num6,
81 dma_func_num7,
82 dma_func_num8,
83 dma_func_num9,
84 dma_func_num10,
85 dma_func_num11,
86 dma_func_num12,
87 dma_func_num13,
88 dma_func_num14,
89 dma_func_num15,
90 shadw_rd_data,
91 mailbox_data0,
92 mailbox_data1,
93 mailbox_data2,
94 mailbox_data3,
95 mailbox_data4,
96 mailbox_data5,
97 mailbox_data6,
98 mailbox_data7,
99 mailbox_data8,
100 mailbox_data9,
101 mailbox_data10,
102 mailbox_data11,
103 mailbox_data12,
104 mailbox_data13,
105 mailbox_data14,
106 mailbox_data15,
107 meta0_rdmc_rcr_req_accept,
108 meta0_rdmc_rcr_data_req,
109 meta0_rdmc_rcr_ack_ready,
110 meta0_rdmc_rcr_ack_cmd,
111 meta0_rdmc_rcr_ack_cmd_status,
112 meta0_rdmc_rcr_ack_client,
113 meta0_rdmc_rcr_ack_dma_num,
114 muxed_shadw_rd_strobe_r,
115//output
116
117 rcr_wrbk_gnt,
118 rcr_wrbk_done,
119 rcr_wrbk_pkt_num,
120 rdmc_rcr_req_accept,
121 rdmc_rcr_ack_valid,
122 rdmc_rcr_ack_err,
123 rdmc_rcr_ack_dma_num,
124 shadw_rd_strobe,
125 shadw_rd_data_reg,
126 rdmc_meta0_rcr_req,
127 rdmc_meta0_rcr_req_cmd,
128 rdmc_meta0_rcr_req_address,
129 rdmc_meta0_rcr_req_length,
130 rdmc_meta0_rcr_req_port_num,
131 rdmc_meta0_rcr_req_dma_num,
132 rdmc_meta0_rcr_req_func_num,
133
134 rdmc_meta0_rcr_data_valid,
135 rdmc_meta0_rcr_data,
136 rdmc_meta0_rcr_req_byteenable,
137 rdmc_meta0_rcr_transfer_comp,
138 rdmc_meta0_rcr_status,
139 rdmc_meta0_rcr_ack_accept
140
141 );
142
143input clk;
144input reset;
145input rx_addr_32b_mode;
146input[15:0] rcr_ack_accept;
147input[15:0] rcr_wrbk_req;
148input[15:0] rcr_wrbk_data_type;
149input[63:0] rcr_wrbk_addr0;
150input[63:0] rcr_wrbk_addr1;
151input[63:0] rcr_wrbk_addr2;
152input[63:0] rcr_wrbk_addr3;
153input[63:0] rcr_wrbk_addr4;
154input[63:0] rcr_wrbk_addr5;
155input[63:0] rcr_wrbk_addr6;
156input[63:0] rcr_wrbk_addr7;
157input[63:0] rcr_wrbk_addr8;
158input[63:0] rcr_wrbk_addr9;
159input[63:0] rcr_wrbk_addr10;
160input[63:0] rcr_wrbk_addr11;
161input[63:0] rcr_wrbk_addr12;
162input[63:0] rcr_wrbk_addr13;
163input[63:0] rcr_wrbk_addr14;
164input[63:0] rcr_wrbk_addr15;
165input[3:0] rcr_wrbk_numb0;
166input[3:0] rcr_wrbk_numb1;
167input[3:0] rcr_wrbk_numb2;
168input[3:0] rcr_wrbk_numb3;
169input[3:0] rcr_wrbk_numb4;
170input[3:0] rcr_wrbk_numb5;
171input[3:0] rcr_wrbk_numb6;
172input[3:0] rcr_wrbk_numb7;
173input[3:0] rcr_wrbk_numb8;
174input[3:0] rcr_wrbk_numb9;
175input[3:0] rcr_wrbk_numb10;
176input[3:0] rcr_wrbk_numb11;
177input[3:0] rcr_wrbk_numb12;
178input[3:0] rcr_wrbk_numb13;
179input[3:0] rcr_wrbk_numb14;
180input[3:0] rcr_wrbk_numb15;
181input[1:0] dma_func_num0;
182input[1:0] dma_func_num1;
183input[1:0] dma_func_num2;
184input[1:0] dma_func_num3;
185input[1:0] dma_func_num4;
186input[1:0] dma_func_num5;
187input[1:0] dma_func_num6;
188input[1:0] dma_func_num7;
189input[1:0] dma_func_num8;
190input[1:0] dma_func_num9;
191input[1:0] dma_func_num10;
192input[1:0] dma_func_num11;
193input[1:0] dma_func_num12;
194input[1:0] dma_func_num13;
195input[1:0] dma_func_num14;
196input[1:0] dma_func_num15;
197input[147:0] shadw_rd_data;
198input[168:0] mailbox_data0;
199input[168:0] mailbox_data1;
200input[168:0] mailbox_data2;
201input[168:0] mailbox_data3;
202input[168:0] mailbox_data4;
203input[168:0] mailbox_data5;
204input[168:0] mailbox_data6;
205input[168:0] mailbox_data7;
206input[168:0] mailbox_data8;
207input[168:0] mailbox_data9;
208input[168:0] mailbox_data10;
209input[168:0] mailbox_data11;
210input[168:0] mailbox_data12;
211input[168:0] mailbox_data13;
212input[168:0] mailbox_data14;
213input[168:0] mailbox_data15;
214input meta0_rdmc_rcr_req_accept;
215input meta0_rdmc_rcr_data_req;
216input meta0_rdmc_rcr_ack_ready;
217input[7:0] meta0_rdmc_rcr_ack_cmd;
218input[3:0] meta0_rdmc_rcr_ack_cmd_status;
219input meta0_rdmc_rcr_ack_client;
220input[4:0] meta0_rdmc_rcr_ack_dma_num;
221input muxed_shadw_rd_strobe_r;
222
223output[15:0] rcr_wrbk_gnt;
224output rcr_wrbk_done;
225output[3:0] rcr_wrbk_pkt_num;
226output rdmc_rcr_req_accept;
227output rdmc_rcr_ack_valid;
228output rdmc_rcr_ack_err;
229output[4:0] rdmc_rcr_ack_dma_num;
230output shadw_rd_strobe;
231output[147:0] shadw_rd_data_reg;
232output rdmc_meta0_rcr_req;
233output[7:0] rdmc_meta0_rcr_req_cmd;
234output[63:0] rdmc_meta0_rcr_req_address;
235output[13:0] rdmc_meta0_rcr_req_length;
236output[1:0] rdmc_meta0_rcr_req_port_num;
237output[4:0] rdmc_meta0_rcr_req_dma_num;
238output[1:0] rdmc_meta0_rcr_req_func_num;
239
240output rdmc_meta0_rcr_data_valid;
241output[127:0] rdmc_meta0_rcr_data;
242output[15:0] rdmc_meta0_rcr_req_byteenable;
243output rdmc_meta0_rcr_transfer_comp;
244output[3:0] rdmc_meta0_rcr_status;
245output rdmc_meta0_rcr_ack_accept;
246
247
248reg rdmc_meta0_rcr_req;
249reg[7:0] rdmc_meta0_rcr_req_cmd;
250reg[63:0] rdmc_meta0_rcr_req_address;
251reg[3:0] rdmc_meta0_rcr_req_dma_num_i;
252reg[1:0] rdmc_meta0_rcr_req_func_num;
253
254reg rdmc_meta0_rcr_data_valid;
255reg[127:0] rdmc_meta0_rcr_data;
256reg rdmc_meta0_rcr_transfer_comp;
257
258reg rdmc_rcr_req_accept;
259reg rdmc_rcr_data_req;
260reg rdmc_rcr_ack_ready;
261reg[7:0] rdmc_rcr_ack_cmd;
262reg[3:0] rdmc_rcr_ack_cmd_status;
263reg rdmc_rcr_ack_client;
264reg[4:0] rdmc_rcr_ack_dma_num;
265reg rdmc_meta0_rcr_ack_accept;
266
267reg stage0_en;
268reg stage1_en;
269reg data_valid_sm;
270reg rcr_wrbk_done_sm;
271reg data_cycle0_sm;
272reg data_cycle1_sm;
273reg data_cycle2_sm;
274reg stage0_en_r;
275reg stage1_en_r;
276reg data_valid_sm_r;
277reg rcr_wrbk_done;
278reg data_cycle0;
279reg data_cycle1;
280reg data_cycle2;
281reg[2:0] state;
282reg[2:0] next_state;
283
284reg[15:0] token;
285reg[15:0] start_mask_slide_r;
286reg[15:0] rcr_wrbk_gnt;
287reg[15:0] rcr_wrbk_gnt_r;
288
289reg[3:0] wrbk_addr_cnt;
290reg[3:0] rcr_wrbk_pkt_num;
291
292reg rcr_wrbk_type;
293reg[168:0] mailbox_data_tmp_r;
294
295reg[147:0] shadw_rd_data_reg;
296
297reg[3:0] rcr_wrbk_numb_tmp_r;
298reg[3:0] rcr_wrbk_numb_sub;
299reg[3:0] data_valid_cnt;
300reg data_valid_cnt_done_r;
301reg shadw_rd_strobe_r;
302
303
304wire[15:0] start_mask = 16'h1111;
305wire[3:0] start_slide_num;
306wire[15:0] start_mask_slide;
307wire is_req = |rcr_wrbk_req;
308wire[15:0] right_req;
309wire[15:0] left_req;
310wire sel_left;
311wire[15:0] req_tmp;
312wire[15:0] pre_rcr_wrbk_gnt;
313wire[3:0] rcr_wrbk_gnt_dec;
314
315wire inc_wrbk_pkt_num2;
316wire inc_wrbk_pkt_num1;
317wire[3:0] wrbk_pkt_num_tmp2;
318wire[3:0] wrbk_pkt_num_tmp1;
319
320parameter
321
322RCR_ARB = 3'd0,
323RCR_GNT = 3'd1,
324RCR_REQ = 3'd2,
325RCR_WR_DATA_RDY = 3'd3,
326RCR_WR_DATA1 = 3'd4,
327RCR_WR_DATA2 = 3'd5,
328RCR_WR_DATA3 = 3'd6,
329RCR_DATA_COMP = 3'd7;
330
331always @ (state or is_req or rdmc_rcr_req_accept or rdmc_rcr_data_req)
332begin
333 stage0_en = 1'b0;
334 stage1_en = 1'b0;
335 data_valid_sm = 1'b0;
336 rcr_wrbk_done_sm= 1'b0;
337 data_cycle0_sm = 1'b0;
338 data_cycle1_sm = 1'b0;
339 data_cycle2_sm = 1'b0;
340
341
342case (state) //synopsys parallel_case full_case
343
344RCR_ARB:
345begin
346 if (is_req)
347 begin
348 stage0_en = 1'b1;
349 next_state = RCR_GNT;
350 end
351 else
352 next_state = state;
353end
354
355RCR_GNT:
356begin
357 stage1_en = 1'b1;
358 next_state = RCR_REQ;
359end
360
361RCR_REQ:
362begin
363 if (rdmc_rcr_req_accept)
364 next_state = RCR_WR_DATA_RDY;
365 else
366 next_state = state;
367end
368
369RCR_WR_DATA_RDY:
370begin
371 if (rdmc_rcr_data_req)
372 begin
373 data_valid_sm = 1'b1;
374 data_cycle0_sm = 1'b1;
375 next_state = RCR_WR_DATA1;
376 end
377 else
378 next_state = state;
379end
380
381RCR_WR_DATA1:
382begin
383 if (rdmc_rcr_data_req)
384 begin
385 data_valid_sm = 1'b1;
386 data_cycle1_sm = 1'b1;
387 next_state = RCR_WR_DATA2;
388 end
389 else
390 next_state = state;
391end
392
393RCR_WR_DATA2:
394begin
395 if (rdmc_rcr_data_req)
396 begin
397 data_valid_sm = 1'b1;
398 data_cycle2_sm = 1'b1;
399 next_state = RCR_WR_DATA3;
400 end
401 else
402 next_state = state;
403end
404
405RCR_WR_DATA3:
406begin
407 if (rdmc_rcr_data_req)
408 begin
409 data_valid_sm = 1'b1;
410 rcr_wrbk_done_sm= 1'b1;
411 next_state = RCR_DATA_COMP;
412 end
413 else
414 next_state = state;
415end
416
417RCR_DATA_COMP:
418 next_state = RCR_ARB;
419
420default: next_state = RCR_ARB;
421
422endcase
423end
424
425always @ (posedge clk)
426if (reset)
427 state <= 3'b0;
428else
429 state <= next_state;
430
431
432
433/**********************/
434//Arbiter
435/**********************/
436niu_rdmc_encode_32 encode_32_inst_a (
437 .din (token),
438 .dout (start_slide_num)
439 );
440
441niu_rdmc_barrel_shl_32 barrel_shl_32_inst_a (
442 .din (start_mask),
443 .shift (start_slide_num),
444 .dout (start_mask_slide)
445 );
446
447assign right_req = rcr_wrbk_req & ~start_mask_slide_r;
448assign left_req = rcr_wrbk_req & start_mask_slide_r;
449
450assign sel_left = !(left_req == 16'b0);
451assign req_tmp = sel_left ? left_req : right_req;
452
453niu_rdmc_pri_encode_32 pri_encode_32_inst_a (
454 .din (req_tmp),
455 .dout (pre_rcr_wrbk_gnt)
456 );
457
458always @ (posedge clk)
459if (reset)
460 token <= 16'h0001;
461else if (stage0_en)
462 token <= {token[14:0], token[15]};
463else
464 token <= token;
465
466always @ (posedge clk)
467if (reset)
468 start_mask_slide_r <= 16'b0;
469else
470 start_mask_slide_r <= start_mask_slide;
471
472always @ (posedge clk)
473if (reset)
474 rcr_wrbk_gnt <= 16'h0;
475else if (stage0_en)
476 rcr_wrbk_gnt <= pre_rcr_wrbk_gnt;
477else if (rdmc_rcr_req_accept)
478 rcr_wrbk_gnt <= 16'h0;
479else
480 rcr_wrbk_gnt <= rcr_wrbk_gnt;
481
482always @ (posedge clk)
483if (reset)
484 rcr_wrbk_gnt_r <= 16'b0;
485else
486 rcr_wrbk_gnt_r <= rcr_wrbk_gnt;
487
488
489wire[63:0] rcr_wrbk_addr_tmp = {64{rcr_wrbk_gnt[0]}} & rcr_wrbk_addr0 |
490 {64{rcr_wrbk_gnt[1]}} & rcr_wrbk_addr1 |
491 {64{rcr_wrbk_gnt[2]}} & rcr_wrbk_addr2 |
492 {64{rcr_wrbk_gnt[3]}} & rcr_wrbk_addr3 |
493 {64{rcr_wrbk_gnt[4]}} & rcr_wrbk_addr4 |
494 {64{rcr_wrbk_gnt[5]}} & rcr_wrbk_addr5 |
495 {64{rcr_wrbk_gnt[6]}} & rcr_wrbk_addr6 |
496 {64{rcr_wrbk_gnt[7]}} & rcr_wrbk_addr7 |
497 {64{rcr_wrbk_gnt[8]}} & rcr_wrbk_addr8 |
498 {64{rcr_wrbk_gnt[9]}} & rcr_wrbk_addr9 |
499 {64{rcr_wrbk_gnt[10]}} & rcr_wrbk_addr10 |
500 {64{rcr_wrbk_gnt[11]}} & rcr_wrbk_addr11 |
501 {64{rcr_wrbk_gnt[12]}} & rcr_wrbk_addr12 |
502 {64{rcr_wrbk_gnt[13]}} & rcr_wrbk_addr13 |
503 {64{rcr_wrbk_gnt[14]}} & rcr_wrbk_addr14 |
504 {64{rcr_wrbk_gnt[15]}} & rcr_wrbk_addr15;
505
506wire[3:0] rcr_wrbk_numb_tmp = {4{rcr_wrbk_gnt[0]}} & rcr_wrbk_numb0 |
507 {4{rcr_wrbk_gnt[1]}} & rcr_wrbk_numb1 |
508 {4{rcr_wrbk_gnt[2]}} & rcr_wrbk_numb2 |
509 {4{rcr_wrbk_gnt[3]}} & rcr_wrbk_numb3 |
510 {4{rcr_wrbk_gnt[4]}} & rcr_wrbk_numb4 |
511 {4{rcr_wrbk_gnt[5]}} & rcr_wrbk_numb5 |
512 {4{rcr_wrbk_gnt[6]}} & rcr_wrbk_numb6 |
513 {4{rcr_wrbk_gnt[7]}} & rcr_wrbk_numb7 |
514 {4{rcr_wrbk_gnt[8]}} & rcr_wrbk_numb8 |
515 {4{rcr_wrbk_gnt[9]}} & rcr_wrbk_numb9 |
516 {4{rcr_wrbk_gnt[10]}} & rcr_wrbk_numb10 |
517 {4{rcr_wrbk_gnt[11]}} & rcr_wrbk_numb11 |
518 {4{rcr_wrbk_gnt[12]}} & rcr_wrbk_numb12 |
519 {4{rcr_wrbk_gnt[13]}} & rcr_wrbk_numb13 |
520 {4{rcr_wrbk_gnt[14]}} & rcr_wrbk_numb14 |
521 {4{rcr_wrbk_gnt[15]}} & rcr_wrbk_numb15;
522
523wire[1:0] dma_func_num_tmp = {2{rcr_wrbk_gnt[0]}} & dma_func_num0 |
524 {2{rcr_wrbk_gnt[1]}} & dma_func_num1 |
525 {2{rcr_wrbk_gnt[2]}} & dma_func_num2 |
526 {2{rcr_wrbk_gnt[3]}} & dma_func_num3 |
527 {2{rcr_wrbk_gnt[4]}} & dma_func_num4 |
528 {2{rcr_wrbk_gnt[5]}} & dma_func_num5 |
529 {2{rcr_wrbk_gnt[6]}} & dma_func_num6 |
530 {2{rcr_wrbk_gnt[7]}} & dma_func_num7 |
531 {2{rcr_wrbk_gnt[8]}} & dma_func_num8 |
532 {2{rcr_wrbk_gnt[9]}} & dma_func_num9 |
533 {2{rcr_wrbk_gnt[10]}} & dma_func_num10 |
534 {2{rcr_wrbk_gnt[11]}} & dma_func_num11 |
535 {2{rcr_wrbk_gnt[12]}} & dma_func_num12 |
536 {2{rcr_wrbk_gnt[13]}} & dma_func_num13 |
537 {2{rcr_wrbk_gnt[14]}} & dma_func_num14 |
538 {2{rcr_wrbk_gnt[15]}} & dma_func_num15;
539
540wire[168:0] mailbox_data_tmp = {169{rcr_wrbk_gnt_r[0]}} & mailbox_data0 |
541 {169{rcr_wrbk_gnt_r[1]}} & mailbox_data1 |
542 {169{rcr_wrbk_gnt_r[2]}} & mailbox_data2 |
543 {169{rcr_wrbk_gnt_r[3]}} & mailbox_data3 |
544 {169{rcr_wrbk_gnt_r[4]}} & mailbox_data4 |
545 {169{rcr_wrbk_gnt_r[5]}} & mailbox_data5 |
546 {169{rcr_wrbk_gnt_r[6]}} & mailbox_data6 |
547 {169{rcr_wrbk_gnt_r[7]}} & mailbox_data7 |
548 {169{rcr_wrbk_gnt_r[8]}} & mailbox_data8 |
549 {169{rcr_wrbk_gnt_r[9]}} & mailbox_data9 |
550 {169{rcr_wrbk_gnt_r[10]}} & mailbox_data10 |
551 {169{rcr_wrbk_gnt_r[11]}} & mailbox_data11 |
552 {169{rcr_wrbk_gnt_r[12]}} & mailbox_data12 |
553 {169{rcr_wrbk_gnt_r[13]}} & mailbox_data13 |
554 {169{rcr_wrbk_gnt_r[14]}} & mailbox_data14 |
555 {169{rcr_wrbk_gnt_r[15]}} & mailbox_data15;
556
557wire rcr_wrbk_type_tmp = |(rcr_wrbk_gnt & rcr_wrbk_data_type);
558
559niu_rdmc_encode_32 encode_32_inst_b (
560 .din (rcr_wrbk_gnt),
561 .dout (rcr_wrbk_gnt_dec)
562 );
563
564always @ (posedge clk)
565if (reset)
566 rcr_wrbk_type <= 1'b0;
567else if (stage1_en)
568 rcr_wrbk_type <= rcr_wrbk_type_tmp;
569else
570 rcr_wrbk_type <= rcr_wrbk_type;
571
572always @ (posedge clk)
573if (reset)
574 mailbox_data_tmp_r <= 169'b0;
575else if (stage1_en_r)
576 mailbox_data_tmp_r <= mailbox_data_tmp;
577else
578 mailbox_data_tmp_r <= mailbox_data_tmp_r;
579
580always @ (posedge clk)
581if (reset)
582 shadw_rd_data_reg <= 148'b0;
583else if (muxed_shadw_rd_strobe_r)
584 shadw_rd_data_reg <= shadw_rd_data;
585else
586 shadw_rd_data_reg <= shadw_rd_data_reg;
587
588wire[511:0] mailbox_data_tmp_r1 = {128'b0,
589 48'b0, mailbox_data_tmp_r[168:153],
590 20'b0, mailbox_data_tmp_r[152:112], 3'b0,
591 64'b0,
592 20'b0, mailbox_data_tmp_r[111:70], 2'b0,
593 48'b0, mailbox_data_tmp_r[69:54],
594 10'b0, mailbox_data_tmp_r[53:0]};
595
596wire[127:0] mailbox_data_out = (data_cycle0) ? mailbox_data_tmp_r1[127:0] :
597 (data_cycle1) ? mailbox_data_tmp_r1[255:128] :
598 (data_cycle2) ? mailbox_data_tmp_r1[383:256] :
599 mailbox_data_tmp_r1[511:384];
600
601wire[127:0] rdmc_meta0_rcr_data_tmp = rcr_wrbk_type & shadw_rd_strobe_r ? shadw_rd_data[127:0] :
602 rcr_wrbk_type ? 128'b0 :
603 mailbox_data_out;
604
605wire shadw_rd_strobe = rcr_wrbk_type & rdmc_rcr_data_req & !data_valid_cnt_done_r;
606
607
608/**********************************************/
609//Write Request Interface
610/**********************************************/
611wire[4:0] rdmc_meta0_rcr_req_dma_num = {1'b0, rdmc_meta0_rcr_req_dma_num_i};
612wire[1:0] rdmc_meta0_rcr_req_port_num = 2'b00;
613wire[13:0] rdmc_meta0_rcr_req_length = 14'd64;
614
615always @ (posedge clk)
616if (reset)
617 rdmc_meta0_rcr_req <= 1'b0;
618else if (meta0_rdmc_rcr_req_accept)
619 rdmc_meta0_rcr_req <= 1'b0;
620else if (stage1_en)
621 rdmc_meta0_rcr_req <= 1'b1;
622else
623 rdmc_meta0_rcr_req <= rdmc_meta0_rcr_req;
624
625always @ (posedge clk)
626if (reset)
627 rdmc_meta0_rcr_req_cmd <= 8'b0;
628else if (stage1_en & rx_addr_32b_mode)
629 rdmc_meta0_rcr_req_cmd <= 8'b0001_0001;
630else if (stage1_en)
631 rdmc_meta0_rcr_req_cmd <= 8'b0001_1001; // hardwired to 64 bit addressing
632else if (rdmc_rcr_req_accept)
633 rdmc_meta0_rcr_req_cmd <= 8'b0;
634else
635 rdmc_meta0_rcr_req_cmd <= rdmc_meta0_rcr_req_cmd;
636
637always @ (posedge clk)
638if (reset)
639 rdmc_meta0_rcr_req_address <= 64'b0;
640else if (stage0_en_r & rx_addr_32b_mode)
641 rdmc_meta0_rcr_req_address <= {32'b0, rcr_wrbk_addr_tmp[31:0]};
642else if (stage0_en_r)
643 rdmc_meta0_rcr_req_address <= rcr_wrbk_addr_tmp[63:0];
644else
645 rdmc_meta0_rcr_req_address <= rdmc_meta0_rcr_req_address;
646
647always @ (posedge clk)
648if (reset)
649 rdmc_meta0_rcr_req_dma_num_i <= 4'b0;
650else if (stage1_en)
651 rdmc_meta0_rcr_req_dma_num_i <= rcr_wrbk_gnt_dec;
652else
653 rdmc_meta0_rcr_req_dma_num_i <= rdmc_meta0_rcr_req_dma_num_i;
654
655always @ (posedge clk)
656if (reset)
657 rdmc_meta0_rcr_req_func_num <= 2'b0;
658else if (stage1_en)
659 rdmc_meta0_rcr_req_func_num <= dma_func_num_tmp[1:0];
660else
661 rdmc_meta0_rcr_req_func_num <= rdmc_meta0_rcr_req_func_num;
662
663
664wire[15:0] rdmc_meta0_rcr_req_byteenable = 16'hffff;
665wire[3:0] rdmc_meta0_rcr_status = 4'b0;
666
667always @ (posedge clk)
668if (reset)
669 rdmc_meta0_rcr_data_valid <= 1'b0;
670else
671 rdmc_meta0_rcr_data_valid <= data_valid_sm_r;
672
673
674always @ (posedge clk)
675if (reset)
676 rdmc_meta0_rcr_data <= 128'b0;
677else if (data_valid_sm_r)
678 rdmc_meta0_rcr_data <= rdmc_meta0_rcr_data_tmp;
679else
680 rdmc_meta0_rcr_data <= rdmc_meta0_rcr_data;
681
682always @ (posedge clk)
683if (reset)
684 rdmc_meta0_rcr_transfer_comp <= 1'b0;
685else
686 rdmc_meta0_rcr_transfer_comp <= rcr_wrbk_done;
687
688always @ (posedge clk)
689if (reset)
690 rdmc_meta0_rcr_ack_accept <= 1'b0;
691else
692 rdmc_meta0_rcr_ack_accept <= |rcr_ack_accept;
693
694//Input registers
695always @ (posedge clk)
696if (reset)
697begin
698 rdmc_rcr_req_accept <= 1'b0;
699 rdmc_rcr_data_req <= 1'b0;
700 rdmc_rcr_ack_ready <= 1'b0;
701 rdmc_rcr_ack_cmd <= 8'b0;
702 rdmc_rcr_ack_cmd_status <= 4'b0;
703 rdmc_rcr_ack_client <= 1'b0;
704 rdmc_rcr_ack_dma_num <= 5'b0;
705end
706else
707begin
708 rdmc_rcr_req_accept <= meta0_rdmc_rcr_req_accept;
709 rdmc_rcr_data_req <= meta0_rdmc_rcr_data_req;
710 rdmc_rcr_ack_ready <= meta0_rdmc_rcr_ack_ready;
711 rdmc_rcr_ack_cmd <= meta0_rdmc_rcr_ack_cmd;
712 rdmc_rcr_ack_cmd_status <= meta0_rdmc_rcr_ack_cmd_status;
713 rdmc_rcr_ack_client <= meta0_rdmc_rcr_ack_client;
714 rdmc_rcr_ack_dma_num <= meta0_rdmc_rcr_ack_dma_num;
715end
716
717wire rdmc_rcr_ack_valid = rdmc_rcr_ack_ready & rdmc_rcr_ack_client;
718wire rdmc_rcr_ack_err = !(rdmc_rcr_ack_cmd[4:0] == 5'b00110) | (rdmc_rcr_ack_cmd_status == 4'b1111);
719
720always @ (posedge clk)
721if (reset)
722 stage0_en_r <= 1'b0;
723else
724 stage0_en_r <= stage0_en;
725
726always @ (posedge clk)
727if (reset)
728 stage1_en_r <= 1'b0;
729else
730 stage1_en_r <= stage1_en;
731
732always @ (posedge clk)
733if (reset)
734begin
735 data_cycle0 <= 1'b0;
736 data_cycle1 <= 1'b0;
737 data_cycle2 <= 1'b0;
738end
739else
740begin
741 data_cycle0 <= data_cycle0_sm;
742 data_cycle1 <= data_cycle1_sm;
743 data_cycle2 <= data_cycle2_sm;
744end
745
746always @ (posedge clk)
747if (reset)
748 data_valid_sm_r <= 1'b0;
749else
750 data_valid_sm_r <= data_valid_sm;
751
752always @ (posedge clk)
753if (reset)
754 rcr_wrbk_done <= 1'b0;
755else
756 rcr_wrbk_done <= rcr_wrbk_done_sm;
757
758
759assign inc_wrbk_pkt_num2 = (|wrbk_addr_cnt[3:1]) & (!rdmc_meta0_rcr_data[127] & !rdmc_meta0_rcr_data[63]);
760assign inc_wrbk_pkt_num1 = (|wrbk_addr_cnt[3:1]) & (!rdmc_meta0_rcr_data[127] | !rdmc_meta0_rcr_data[63]) |
761 (wrbk_addr_cnt[0] & !rdmc_meta0_rcr_data[63]);
762assign wrbk_pkt_num_tmp2 = rcr_wrbk_pkt_num + 4'd2;
763assign wrbk_pkt_num_tmp1 = rcr_wrbk_pkt_num + 4'd1;
764
765always @ (posedge clk)
766if (reset)
767 wrbk_addr_cnt <= 4'b0;
768else if (stage1_en)
769 wrbk_addr_cnt <= rcr_wrbk_numb_tmp;
770else if (rdmc_meta0_rcr_data_valid & (wrbk_addr_cnt[3:1] == 3'd0))
771 wrbk_addr_cnt <= 4'b0;
772else if (rdmc_meta0_rcr_data_valid)
773 wrbk_addr_cnt <= wrbk_addr_cnt - 4'd2;
774else
775 wrbk_addr_cnt <= wrbk_addr_cnt;
776
777always @ (posedge clk)
778if (reset)
779 rcr_wrbk_pkt_num <= 4'b0;
780else if (rdmc_meta0_rcr_data_valid & inc_wrbk_pkt_num2)
781 rcr_wrbk_pkt_num <= wrbk_pkt_num_tmp2;
782else if (rdmc_meta0_rcr_data_valid & inc_wrbk_pkt_num1)
783 rcr_wrbk_pkt_num <= wrbk_pkt_num_tmp1;
784else if (rdmc_rcr_req_accept)
785 rcr_wrbk_pkt_num <= 4'b0;
786else
787 rcr_wrbk_pkt_num <= rcr_wrbk_pkt_num;
788
789
790always @ (posedge clk)
791if (reset)
792 rcr_wrbk_numb_tmp_r <= 4'b0;
793else if (stage1_en)
794 rcr_wrbk_numb_tmp_r <= rcr_wrbk_numb_tmp;
795else if (rcr_wrbk_done)
796 rcr_wrbk_numb_tmp_r <= 4'b0;
797else
798 rcr_wrbk_numb_tmp_r <= rcr_wrbk_numb_tmp_r;
799
800wire[3:0] rcr_wrbk_numb_sub_tmp = (rcr_wrbk_numb_tmp_r > 4'd2) ? (rcr_wrbk_numb_tmp_r - 4'd2) : 4'b0;
801wire data_valid_cnt_done = (data_valid_cnt >= rcr_wrbk_numb_sub);
802
803always @ (posedge clk)
804if (reset)
805 rcr_wrbk_numb_sub <= 4'b0;
806else if (rdmc_rcr_req_accept)
807 rcr_wrbk_numb_sub <= rcr_wrbk_numb_sub_tmp;
808else if (rcr_wrbk_done)
809 rcr_wrbk_numb_sub <= 4'b0;
810else
811 rcr_wrbk_numb_sub <= rcr_wrbk_numb_sub;
812
813
814always @ (posedge clk)
815if (reset)
816 data_valid_cnt <= 4'b0;
817else if (rdmc_rcr_data_req & !data_valid_cnt_done)
818 data_valid_cnt <= data_valid_cnt + 4'd2;
819else if (rcr_wrbk_done)
820 data_valid_cnt <= 4'b0;
821else
822 data_valid_cnt <= data_valid_cnt;
823
824always @ (posedge clk)
825if (reset)
826 data_valid_cnt_done_r <= 1'b0;
827else if (data_valid_cnt_done & rdmc_rcr_data_req)
828 data_valid_cnt_done_r <= 1'b1;
829else if (rcr_wrbk_done)
830 data_valid_cnt_done_r <= 1'b0;
831else
832 data_valid_cnt_done_r <= data_valid_cnt_done_r;
833
834always @ (posedge clk)
835if (reset)
836 shadw_rd_strobe_r <= 1'b0;
837else
838 shadw_rd_strobe_r <= shadw_rd_strobe;
839
840
841
842endmodule
843
844
845
846