Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_rdmc_pio_if.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_rdmc_pio_if.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_pio_if (
36 clk,
37 reset,
38 pio_rdmc_sel,
39 pio_rdmc_rd,
40 pio_rdmc_addr,
41 pio_rdmc_wdata,
42 pio_client_32b,
43 stage1_en_r,
44 port_gnt,
45 port_err_event,
46 ipp_dat_req0_data,
47 ipp_dat_req1_data,
48 ipp_dat_req2_data,
49 ipp_dat_req3_data,
50 wr_debug_data,
51 wr_transfer_comp_int,
52 pio_rd_gnt,
53 chnl_pio_rd_data0,
54 chnl_pio_rd_data1,
55 chnl_pio_rd_data2,
56 chnl_pio_rd_data3,
57 chnl_pio_rd_data4,
58 chnl_pio_rd_data5,
59 chnl_pio_rd_data6,
60 chnl_pio_rd_data7,
61 chnl_pio_rd_data8,
62 chnl_pio_rd_data9,
63 chnl_pio_rd_data10,
64 chnl_pio_rd_data11,
65 chnl_pio_rd_data12,
66 chnl_pio_rd_data13,
67 chnl_pio_rd_data14,
68 chnl_pio_rd_data15,
69 cache_rd_strobe,
70 cache_wr_strobe,
71 cache_rd_addr,
72 cache_wr_addr,
73 cache_wr_data,
74 cache_rd_data_reg,
75 shadw_rd_strobe,
76 shadw_wr_strobe,
77 shadw_rd_addr,
78 shadw_wr_addr,
79 shadw_wr_data,
80 shadw_rd_data_reg, //reged shadw_rd_data
81 pkt_buf_gnt,
82
83 pio_32b_mode,
84 pio_wen,
85 pio_addr,
86 pio_wen_a,
87 pio_addr_a,
88 pio_wen_b,
89 pio_addr_b,
90 pio_wen_c,
91 pio_addr_c,
92 pio_wdata,
93 rx_addr_32b_mode,
94 wred_enable,
95 random_num,
96 clk_div_value,
97 port_err_status,
98 muxed_port_rdc_num,
99 pt_drr_wt0_reg,
100 pt_drr_wt1_reg,
101 pt_drr_wt2_reg,
102 pt_drr_wt3_reg,
103 muxed_cache_rd_strobe,
104 muxed_cache_wr_strobe,
105 muxed_cache_rd_addr,
106 muxed_cache_wr_addr,
107 muxed_cache_wr_data,
108 muxed_shadw_rd_strobe,
109 muxed_shadw_wr_strobe,
110 muxed_shadw_rd_addr,
111 muxed_shadw_wr_addr,
112 muxed_shadw_wr_data,
113 muxed_cache_rd_strobe_r,
114 muxed_shadw_rd_strobe_r,
115 cache_parity_err,
116 shadw_parity_err,
117 rdmc_debug_port,
118 rdmc_pio_port_int,
119 rdmc_pio_ack,
120 rdmc_pio_err,
121 rdmc_pio_rdata
122
123 );
124
125input clk;
126input reset;
127input pio_rdmc_sel;
128input pio_rdmc_rd;
129input[19:0] pio_rdmc_addr;
130input[63:0] pio_rdmc_wdata;
131input pio_client_32b;
132input stage1_en_r;
133input[3:0] port_gnt;
134input[8:0] port_err_event;
135input ipp_dat_req0_data;
136input ipp_dat_req1_data;
137input ipp_dat_req2_data;
138input ipp_dat_req3_data;
139input wr_transfer_comp_int;
140input[31:0] wr_debug_data;
141input[15:0] pio_rd_gnt;
142input[63:0] chnl_pio_rd_data0;
143input[63:0] chnl_pio_rd_data1;
144input[63:0] chnl_pio_rd_data2;
145input[63:0] chnl_pio_rd_data3;
146input[63:0] chnl_pio_rd_data4;
147input[63:0] chnl_pio_rd_data5;
148input[63:0] chnl_pio_rd_data6;
149input[63:0] chnl_pio_rd_data7;
150input[63:0] chnl_pio_rd_data8;
151input[63:0] chnl_pio_rd_data9;
152input[63:0] chnl_pio_rd_data10;
153input[63:0] chnl_pio_rd_data11;
154input[63:0] chnl_pio_rd_data12;
155input[63:0] chnl_pio_rd_data13;
156input[63:0] chnl_pio_rd_data14;
157input[63:0] chnl_pio_rd_data15;
158input cache_rd_strobe;
159input cache_wr_strobe;
160input[7:0] cache_rd_addr;
161input[7:0] cache_wr_addr;
162input[147:0] cache_wr_data;
163input[147:0] cache_rd_data_reg;
164input shadw_rd_strobe;
165input shadw_wr_strobe;
166input[7:0] shadw_rd_addr;
167input[7:0] shadw_wr_addr;
168input[147:0] shadw_wr_data;
169input[147:0] shadw_rd_data_reg;
170input[15:0] pkt_buf_gnt;
171
172output pio_32b_mode;
173output pio_wen;
174output[19:0] pio_addr;
175output pio_wen_a;
176output[19:0] pio_addr_a;
177output pio_wen_b;
178output[19:0] pio_addr_b;
179output pio_wen_c;
180output[19:0] pio_addr_c;
181output[63:0] pio_wdata;
182output rx_addr_32b_mode;
183output wred_enable;
184output[15:0] random_num;
185output[3:0] port_err_status;
186output[15:0] clk_div_value;
187output[4:0] muxed_port_rdc_num;
188output[15:0] pt_drr_wt0_reg;
189output[15:0] pt_drr_wt1_reg;
190output[15:0] pt_drr_wt2_reg;
191output[15:0] pt_drr_wt3_reg;
192output muxed_cache_rd_strobe;
193output muxed_cache_wr_strobe;
194output[7:0] muxed_cache_rd_addr;
195output[7:0] muxed_cache_wr_addr;
196output[147:0] muxed_cache_wr_data;
197output muxed_shadw_rd_strobe;
198output muxed_shadw_wr_strobe;
199output[7:0] muxed_shadw_rd_addr;
200output[7:0] muxed_shadw_wr_addr;
201output[147:0] muxed_shadw_wr_data;
202output muxed_cache_rd_strobe_r;
203output muxed_shadw_rd_strobe_r;
204output cache_parity_err;
205output shadw_parity_err;
206output[31:0] rdmc_debug_port;
207output rdmc_pio_port_int;
208output rdmc_pio_ack;
209output rdmc_pio_err;
210output[63:0] rdmc_pio_rdata;
211
212reg pio_32b_mode;
213reg pio_sel;
214reg pio_rd;
215reg[19:0] pio_addr;
216reg pio_sel_a;
217reg pio_rd_a;
218reg[19:0] pio_addr_a;
219reg pio_sel_b;
220reg pio_rd_b;
221reg[19:0] pio_addr_b;
222reg pio_sel_c;
223reg pio_rd_c;
224reg[19:0] pio_addr_c;
225
226reg[63:0] pio_wdata;
227reg pio_sel_dly;
228reg pio_sel_dly_a;
229reg pio_sel_dly_b;
230reg pio_sel_dly_c;
231reg pio_sel_cycle1;
232reg pio_sel_cycle2;
233reg rdmc_pio_ack;
234reg rdmc_pio_err;
235reg[63:0] rdmc_pio_rdata;
236reg port_pio_gnt;
237reg port_pio_rd_err;
238reg[63:0] port_pio_rd_data_tmp;
239reg[63:0] port_pio_rd_data;
240reg rdmc_pio_port_int;
241
242reg[15:0] clk_div_value;
243reg[4:0] def_port0_rdc_reg;
244reg[4:0] def_port1_rdc_reg;
245reg[4:0] def_port2_rdc_reg;
246reg[4:0] def_port3_rdc_reg;
247
248reg[15:0] pt_drr_wt0_reg;
249reg[15:0] pt_drr_wt1_reg;
250reg[15:0] pt_drr_wt2_reg;
251reg[15:0] pt_drr_wt3_reg;
252reg[19:0] pt_use0_reg;
253reg[19:0] pt_use1_reg;
254reg[19:0] pt_use2_reg;
255reg[19:0] pt_use3_reg;
256
257reg[16:0] red_ran_init_reg;
258reg[15:0] red_ran_curr_reg;
259reg[3:0] rx_addr_mode_reg;
260reg[9:0] cache_parity_log_reg;
261reg[9:0] shadw_parity_log_reg;
262
263reg[8:0] pio_mem_addr_reg;
264reg[31:0] pio_mem_data_reg0;
265reg[31:0] pio_mem_data_reg1;
266reg[31:0] pio_mem_data_reg2;
267reg[31:0] pio_mem_data_reg3;
268
269reg pio_mem_data_reg4_wen_dly;
270reg pio_cache_rd;
271reg pio_shadw_rd;
272reg pio_cache_wr;
273reg pio_shadw_wr;
274reg pio_acc_dly0;
275reg pio_acc_dly1;
276reg pio_acc_dly2;
277
278reg cache_rd_strobe_r;
279reg cache_rd_strobe_r1;
280reg shadw_rd_strobe_r;
281reg shadw_rd_strobe_r1;
282reg muxed_cache_rd_strobe_r;
283reg muxed_cache_rd_strobe_r1;
284reg muxed_shadw_rd_strobe_r;
285reg muxed_shadw_rd_strobe_r1;
286reg[7:0] muxed_cache_rd_addr_r;
287reg[7:0] muxed_shadw_rd_addr_d;
288reg[7:0] muxed_shadw_rd_addr_r;
289reg[8:0] port_err_status_reg;
290reg[8:0] port_err_mask_reg;
291
292reg[31:0] debug_training_vector;
293reg[31:0] rdmc_debug_port;
294
295reg[3:0] pkt_id_err_reg;
296
297wire pio_mem_rd;
298wire muxed_cache_rd_strobe;
299wire muxed_cache_wr_strobe;
300wire[7:0] muxed_cache_rd_addr;
301wire[7:0] muxed_cache_wr_addr;
302wire[147:0] muxed_cache_wr_data;
303wire muxed_shadw_rd_strobe;
304wire muxed_shadw_wr_strobe;
305wire[7:0] muxed_shadw_rd_addr;
306wire[7:0] muxed_shadw_wr_addr;
307wire[147:0] muxed_shadw_wr_data;
308wire[147:0] muxed_mem_rd_data;
309wire[147:0] pio_mem_wr_data;
310
311wire[32:0] cache_rd_data0;
312wire[32:0] cache_rd_data1;
313wire[32:0] cache_rd_data2;
314wire[32:0] cache_rd_data3;
315wire[15:0] cache_orig_parity_bits;
316wire[15:0] cache_data_parity_bits;
317wire cache_parity_err;
318wire acc_cache_parity_err;
319wire[31:0] shadw_rd_data0;
320wire[31:0] shadw_rd_data1;
321wire[31:0] shadw_rd_data2;
322wire[31:0] shadw_rd_data3;
323wire[15:0] shadw_orig_parity_bits;
324wire[15:0] shadw_data_parity_bits;
325wire shadw_parity_err;
326wire acc_shadw_parity_err;
327
328
329wire pio_sel_cycle0;
330wire pio_wen;
331wire pio_ren;
332
333wire pio_sel_cycle0_a;
334wire pio_wen_a;
335
336wire pio_sel_cycle0_b;
337wire pio_wen_b;
338
339wire pio_sel_cycle0_c;
340wire pio_wen_c;
341
342wire pio_err;
343wire[63:0] pio_rd_data;
344wire[63:0] chnl_pio_rd_data;
345
346wire clk_div_pio_wen;
347wire def_port0_rdc_pio_wen;
348wire def_port1_rdc_pio_wen;
349wire def_port2_rdc_pio_wen;
350wire def_port3_rdc_pio_wen;
351wire pt_drr_wt0_pio_wen;
352wire pt_drr_wt1_pio_wen;
353wire pt_drr_wt2_pio_wen;
354wire pt_drr_wt3_pio_wen;
355wire pt_use0_pio_ren;
356wire pt_use1_pio_ren;
357wire pt_use2_pio_ren;
358wire pt_use3_pio_ren;
359wire red_ran_init_pio_wen;
360wire rx_addr_mode_pio_wen;
361wire cache_parity_log_pio_wen;
362wire shadw_parity_log_pio_wen;
363wire pio_mem_addr_reg_wen;
364wire pio_mem_data_reg0_wen;
365wire pio_mem_data_reg1_wen;
366wire pio_mem_data_reg2_wen;
367wire pio_mem_data_reg3_wen;
368wire pio_mem_data_reg4_wen;
369wire pio_mem_data_reg4_ren;
370wire port_err_status_reg_wen;
371wire port_err_mask_reg_wen;
372wire debug_training_vector_pio_wen;
373wire port_err_status_reg_wr;
374
375wire pt_use0_reg_overflow;
376wire pt_use1_reg_overflow;
377wire pt_use2_reg_overflow;
378wire pt_use3_reg_overflow;
379
380wire[4:0] muxed_port_rdc_num;
381wire shift_in;
382wire wred_enable;
383wire[15:0] random_num = red_ran_curr_reg;
384
385wire chnl_pio_gnt_all= |pio_rd_gnt;
386
387wire rx_addr_32b_mode = rx_addr_mode_reg[0];
388wire debug_mode = rx_addr_mode_reg[1];
389wire[1:0] debug_port_mux_sel = rx_addr_mode_reg[3:2];
390
391
392always @ (posedge clk)
393if (reset)
394begin
395 pio_32b_mode <= 1'b0;
396 pio_sel <= 1'b0;
397 pio_rd <= 1'b0;
398 pio_addr <= 20'b0;
399 pio_wdata <= 64'b0;
400end
401else
402begin
403 pio_32b_mode <= pio_client_32b;
404 pio_sel <= pio_rdmc_sel;
405 pio_rd <= pio_rdmc_rd;
406 pio_addr <= pio_rdmc_addr;
407 pio_wdata <= pio_rdmc_wdata;
408end
409
410always @ (posedge clk)
411if (reset)
412begin
413 pio_sel_a <= 1'b0;
414 pio_rd_a <= 1'b0;
415 pio_addr_a <= 20'b0;
416end
417else
418begin
419 pio_sel_a <= pio_rdmc_sel;
420 pio_rd_a <= pio_rdmc_rd;
421 pio_addr_a <= pio_rdmc_addr;
422end
423
424always @ (posedge clk)
425if (reset)
426begin
427 pio_sel_b <= 1'b0;
428 pio_rd_b <= 1'b0;
429 pio_addr_b <= 20'b0;
430end
431else
432begin
433 pio_sel_b <= pio_rdmc_sel;
434 pio_rd_b <= pio_rdmc_rd;
435 pio_addr_b <= pio_rdmc_addr;
436end
437
438always @ (posedge clk)
439if (reset)
440begin
441 pio_sel_c <= 1'b0;
442 pio_rd_c <= 1'b0;
443 pio_addr_c <= 20'b0;
444end
445else
446begin
447 pio_sel_c <= pio_rdmc_sel;
448 pio_rd_c <= pio_rdmc_rd;
449 pio_addr_c <= pio_rdmc_addr;
450end
451
452always @ (posedge clk)
453if (reset)
454 pio_sel_dly <= 1'b0;
455else
456 pio_sel_dly <= pio_sel;
457
458always @ (posedge clk)
459if (reset)
460 pio_sel_dly_a <= 1'b0;
461else
462 pio_sel_dly_a <= pio_sel_a;
463
464always @ (posedge clk)
465if (reset)
466 pio_sel_dly_b <= 1'b0;
467else
468 pio_sel_dly_b <= pio_sel_b;
469
470always @ (posedge clk)
471if (reset)
472 pio_sel_dly_c <= 1'b0;
473else
474 pio_sel_dly_c <= pio_sel_c;
475
476assign pio_sel_cycle0 = pio_sel & !pio_sel_dly;
477assign pio_wen = pio_sel_cycle0 & !pio_rd;
478assign pio_ren = pio_sel_cycle2 & pio_rd;
479
480assign pio_sel_cycle0_a = pio_sel_a & !pio_sel_dly_a;
481assign pio_wen_a = pio_sel_cycle0_a & !pio_rd_a;
482
483assign pio_sel_cycle0_b = pio_sel_b & !pio_sel_dly_b;
484assign pio_wen_b = pio_sel_cycle0_b & !pio_rd_b;
485
486assign pio_sel_cycle0_c = pio_sel_c & !pio_sel_dly_c;
487assign pio_wen_c = pio_sel_cycle0_c & !pio_rd_c;
488
489assign pio_err = !(chnl_pio_gnt_all | port_pio_gnt) & pio_sel_cycle2 & pio_rd;
490assign pio_rd_data = chnl_pio_gnt_all ? chnl_pio_rd_data : port_pio_rd_data;
491
492
493always @ (posedge clk)
494if (reset)
495begin
496 pio_sel_cycle1 <= 1'b0;
497 pio_sel_cycle2 <= 1'b0;
498end
499else
500begin
501 pio_sel_cycle1 <= pio_sel_cycle0;
502 pio_sel_cycle2 <= pio_sel_cycle1;
503end
504
505
506always @ (posedge clk)
507if (reset)
508 rdmc_pio_ack <= 1'b0;
509else if (pio_sel_cycle2 & !pio_mem_data_reg4_ren | pio_acc_dly2)
510 rdmc_pio_ack <= 1'b1;
511else
512 rdmc_pio_ack <= 1'b0;
513
514always @ (posedge clk)
515if (reset)
516 rdmc_pio_err <= 1'b0;
517else
518 rdmc_pio_err <= pio_err;
519
520always @ (posedge clk)
521if (reset)
522 rdmc_pio_rdata <= 64'b0;
523else if (pio_sel_cycle2 & !pio_mem_data_reg4_ren | pio_acc_dly2)
524 rdmc_pio_rdata <= pio_rd_data;
525else
526 rdmc_pio_rdata <= rdmc_pio_rdata;
527
528
529assign clk_div_pio_wen = pio_wen & (pio_addr == 20'h80000);
530assign def_port0_rdc_pio_wen = pio_wen & (pio_addr == 20'h80008);
531assign def_port1_rdc_pio_wen = pio_wen & (pio_addr == 20'h80010);
532assign def_port2_rdc_pio_wen = pio_wen & (pio_addr == 20'h80018);
533assign def_port3_rdc_pio_wen = pio_wen & (pio_addr == 20'h80020);
534
535assign pt_drr_wt0_pio_wen = pio_wen & (pio_addr == 20'h80028);
536assign pt_drr_wt1_pio_wen = pio_wen & (pio_addr == 20'h80030);
537assign pt_drr_wt2_pio_wen = pio_wen & (pio_addr == 20'h80038);
538assign pt_drr_wt3_pio_wen = pio_wen & (pio_addr == 20'h80040);
539
540assign pt_use0_pio_ren = pio_ren & (pio_addr == 20'h80048);
541assign pt_use1_pio_ren = pio_ren & (pio_addr == 20'h80050);
542assign pt_use2_pio_ren = pio_ren & (pio_addr == 20'h80058);
543assign pt_use3_pio_ren = pio_ren & (pio_addr == 20'h80060);
544
545assign red_ran_init_pio_wen = pio_wen & (pio_addr == 20'h80068);
546assign rx_addr_mode_pio_wen = pio_wen & (pio_addr == 20'h80070);
547
548assign cache_parity_log_pio_wen = pio_wen & (pio_addr == 20'h80078);
549assign shadw_parity_log_pio_wen = pio_wen & (pio_addr == 20'h80080);
550
551assign pio_mem_addr_reg_wen = pio_wen & (pio_addr == 20'h80088);
552assign pio_mem_data_reg0_wen = pio_wen & (pio_addr == 20'h80090);
553assign pio_mem_data_reg1_wen = pio_wen & (pio_addr == 20'h80098);
554assign pio_mem_data_reg2_wen = pio_wen & (pio_addr == 20'h800a0);
555assign pio_mem_data_reg3_wen = pio_wen & (pio_addr == 20'h800a8);
556assign pio_mem_data_reg4_wen = pio_wen & (pio_addr == 20'h800b0);
557assign pio_mem_data_reg4_ren = pio_ren & (pio_addr == 20'h800b0);
558assign port_err_status_reg_wen = pio_wen & (pio_addr == 20'h800b8);
559assign port_err_mask_reg_wen = pio_wen & (pio_addr == 20'h800c0);
560
561assign debug_training_vector_pio_wen = pio_wen & (pio_addr == 20'h800c8);
562
563assign port_err_status_reg_wr = pio_wen & (pio_addr == 20'h800d0);
564
565/***********************/
566//Program Registers
567/***********************/
568always @ (posedge clk)
569if (reset)
570 rx_addr_mode_reg <= 4'b0;
571else if (rx_addr_mode_pio_wen)
572 rx_addr_mode_reg <= pio_wdata[3:0];
573else
574 rx_addr_mode_reg <= rx_addr_mode_reg;
575
576always @ (posedge clk)
577if (reset)
578 clk_div_value <= 16'b0;
579else if (clk_div_pio_wen)
580 clk_div_value <= pio_wdata[15:0];
581else
582 clk_div_value <= clk_div_value;
583
584always @ (posedge clk)
585if (reset)
586 def_port0_rdc_reg <= 5'b0;
587else if (def_port0_rdc_pio_wen)
588 def_port0_rdc_reg <= pio_wdata[4:0];
589else
590 def_port0_rdc_reg <= def_port0_rdc_reg;
591
592always @ (posedge clk)
593if (reset)
594 def_port1_rdc_reg <= 5'b0;
595else if (def_port1_rdc_pio_wen)
596 def_port1_rdc_reg <= pio_wdata[4:0];
597else
598 def_port1_rdc_reg <= def_port1_rdc_reg;
599
600always @ (posedge clk)
601if (reset)
602 def_port2_rdc_reg <= 5'b0;
603else if (def_port2_rdc_pio_wen)
604 def_port2_rdc_reg <= pio_wdata[4:0];
605else
606 def_port2_rdc_reg <= def_port2_rdc_reg;
607
608always @ (posedge clk)
609if (reset)
610 def_port3_rdc_reg <= 5'b0;
611else if (def_port3_rdc_pio_wen)
612 def_port3_rdc_reg <= pio_wdata[4:0];
613else
614 def_port3_rdc_reg <= def_port3_rdc_reg;
615
616assign muxed_port_rdc_num = {5{port_gnt[0]}} & def_port0_rdc_reg |
617 {5{port_gnt[1]}} & def_port1_rdc_reg |
618 {5{port_gnt[2]}} & def_port2_rdc_reg |
619 {5{port_gnt[3]}} & def_port3_rdc_reg ;
620
621always @ (posedge clk)
622if (reset)
623 pt_drr_wt0_reg <= 16'h0400;
624else if (pt_drr_wt0_pio_wen)
625 pt_drr_wt0_reg <= pio_wdata[15:0];
626else
627 pt_drr_wt0_reg <= pt_drr_wt0_reg;
628
629always @ (posedge clk)
630if (reset)
631 pt_drr_wt1_reg <= 16'h0400;
632else if (pt_drr_wt1_pio_wen)
633 pt_drr_wt1_reg <= pio_wdata[15:0];
634else
635 pt_drr_wt1_reg <= pt_drr_wt1_reg;
636
637always @ (posedge clk)
638if (reset)
639 pt_drr_wt2_reg <= 16'h0066;
640else if (pt_drr_wt2_pio_wen)
641 pt_drr_wt2_reg <= pio_wdata[15:0];
642else
643 pt_drr_wt2_reg <= pt_drr_wt2_reg;
644
645always @ (posedge clk)
646if (reset)
647 pt_drr_wt3_reg <= 16'h0066;
648else if (pt_drr_wt3_pio_wen)
649 pt_drr_wt3_reg <= pio_wdata[15:0];
650else
651 pt_drr_wt3_reg <= pt_drr_wt3_reg;
652
653
654assign pt_use0_reg_overflow = (pt_use0_reg == 20'hfffff);
655assign pt_use1_reg_overflow = (pt_use1_reg == 20'hfffff);
656assign pt_use2_reg_overflow = (pt_use2_reg == 20'hfffff);
657assign pt_use3_reg_overflow = (pt_use3_reg == 20'hfffff);
658
659always @ (posedge clk)
660if (reset)
661 pt_use0_reg <= 20'b0;
662else if (pt_use0_pio_ren)
663 pt_use0_reg <= 20'b0;
664else if (pt_use0_reg_overflow)
665 pt_use0_reg <= pt_use0_reg;
666else if (ipp_dat_req0_data)
667 pt_use0_reg <= pt_use0_reg + 20'd1;
668else
669 pt_use0_reg <= pt_use0_reg;
670
671always @ (posedge clk)
672if (reset)
673 pt_use1_reg <= 20'b0;
674else if (pt_use1_pio_ren)
675 pt_use1_reg <= 20'b0;
676else if (pt_use1_reg_overflow)
677 pt_use1_reg <= pt_use1_reg;
678else if (ipp_dat_req1_data)
679 pt_use1_reg <= pt_use1_reg + 20'd1;
680else
681 pt_use1_reg <= pt_use1_reg;
682
683always @ (posedge clk)
684if (reset)
685 pt_use2_reg <= 20'b0;
686else if (pt_use2_pio_ren)
687 pt_use2_reg <= 20'b0;
688else if (pt_use2_reg_overflow)
689 pt_use2_reg <= pt_use2_reg;
690else if (ipp_dat_req2_data)
691 pt_use2_reg <= pt_use2_reg + 20'd1;
692else
693 pt_use2_reg <= pt_use2_reg;
694
695always @ (posedge clk)
696if (reset)
697 pt_use3_reg <= 20'b0;
698else if (pt_use3_pio_ren)
699 pt_use3_reg <= 20'b0;
700else if (pt_use3_reg_overflow)
701 pt_use3_reg <= pt_use3_reg;
702else if (ipp_dat_req3_data)
703 pt_use3_reg <= pt_use3_reg + 20'd1;
704else
705 pt_use3_reg <= pt_use3_reg;
706
707always @ (posedge clk)
708if (reset)
709 port_err_mask_reg <= 9'b1_1111_1111;
710else if (port_err_mask_reg_wen)
711 port_err_mask_reg <= pio_wdata[8:0];
712else
713 port_err_mask_reg <= port_err_mask_reg;
714
715
716wire[7:0] port_err_status_reg_tmp = (~pio_wdata[7:0]) & port_err_status_reg[7:0] | port_err_event[7:0];
717
718always @ (posedge clk)
719if (reset)
720 port_err_status_reg <= 9'b0;
721else if (port_err_status_reg_wen)
722 port_err_status_reg <= {pio_wdata[8], port_err_status_reg_tmp[7:0]};
723else if (port_err_status_reg_wr)
724 port_err_status_reg <= pio_wdata[8:0];
725else
726 port_err_status_reg <= port_err_event[8:0] | port_err_status_reg[8:0];
727
728wire pkt_id_err0 = port_err_status_reg[8] | port_err_status_reg[4];
729wire pkt_id_err1 = port_err_status_reg[8] | port_err_status_reg[5];
730wire pkt_id_err2 = port_err_status_reg[8] | port_err_status_reg[6];
731wire pkt_id_err3 = port_err_status_reg[8] | port_err_status_reg[7];
732
733always @ (posedge clk)
734if (reset)
735 pkt_id_err_reg <= 4'b0;
736else
737 pkt_id_err_reg <= {pkt_id_err3, pkt_id_err2, pkt_id_err1, pkt_id_err0};
738
739
740wire port0_err = pkt_id_err_reg[0] | port_err_status_reg[0];
741wire port1_err = pkt_id_err_reg[1] | port_err_status_reg[1];
742wire port2_err = pkt_id_err_reg[2] | port_err_status_reg[2];
743wire port3_err = pkt_id_err_reg[3] | port_err_status_reg[3];
744
745wire[3:0] port_err_status = {port3_err, port2_err, port1_err, port0_err};
746wire port_int_tmp = |(port_err_status_reg & (~port_err_mask_reg));
747
748always @ (posedge clk)
749if (reset)
750 rdmc_pio_port_int <= 1'b0;
751else
752 rdmc_pio_port_int <= port_int_tmp;
753
754/*************************/
755//Random Number Gen
756/*************************/
757assign shift_in = red_ran_curr_reg[15] ^ red_ran_curr_reg[4] ^ red_ran_curr_reg[2] ^ red_ran_curr_reg[1];
758assign wred_enable = red_ran_init_reg[16];
759
760always @ (posedge clk)
761if (reset)
762 red_ran_init_reg <= 17'b0;
763else if (red_ran_init_pio_wen)
764 red_ran_init_reg <= pio_wdata[16:0];
765else
766 red_ran_init_reg <= red_ran_init_reg;
767
768
769always @ (posedge clk)
770if (reset)
771 red_ran_curr_reg <= 16'b0;
772else if (red_ran_init_pio_wen)
773 red_ran_curr_reg <= pio_wdata[15:0];
774else if (stage1_en_r)
775 red_ran_curr_reg <= {shift_in, red_ran_curr_reg[15:1]};
776else
777 red_ran_curr_reg <= red_ran_curr_reg;
778
779
780/*************************/
781//Memory Access
782/*************************/
783always @ (posedge clk)
784if (reset)
785 pio_mem_addr_reg <= 9'b0;
786else if (pio_mem_addr_reg_wen)
787 pio_mem_addr_reg <= pio_wdata[8:0];
788else
789 pio_mem_addr_reg <= pio_mem_addr_reg;
790
791always @ (posedge clk)
792if (reset)
793 pio_mem_data_reg0 <= 32'b0;
794else if (pio_mem_data_reg0_wen)
795 pio_mem_data_reg0 <= pio_wdata[31:0];
796else if (pio_acc_dly1 & pio_rd)
797 pio_mem_data_reg0 <= muxed_mem_rd_data[31:0];
798else
799 pio_mem_data_reg0 <= pio_mem_data_reg0;
800
801always @ (posedge clk)
802if (reset)
803 pio_mem_data_reg1 <= 32'b0;
804else if (pio_mem_data_reg1_wen)
805 pio_mem_data_reg1 <= pio_wdata[31:0];
806else if (pio_acc_dly1 & pio_rd)
807 pio_mem_data_reg1 <= muxed_mem_rd_data[63:32];
808else
809 pio_mem_data_reg1 <= pio_mem_data_reg1;
810
811
812always @ (posedge clk)
813if (reset)
814 pio_mem_data_reg2 <= 32'b0;
815else if (pio_mem_data_reg2_wen)
816 pio_mem_data_reg2 <= pio_wdata[31:0];
817else if (pio_acc_dly1 & pio_rd)
818 pio_mem_data_reg2 <= muxed_mem_rd_data[95:64];
819else
820 pio_mem_data_reg2 <= pio_mem_data_reg2;
821
822always @ (posedge clk)
823if (reset)
824 pio_mem_data_reg3 <= 32'b0;
825else if (pio_mem_data_reg3_wen)
826 pio_mem_data_reg3 <= pio_wdata[31:0];
827else if (pio_acc_dly1 & pio_rd)
828 pio_mem_data_reg3 <= muxed_mem_rd_data[127:96];
829else
830 pio_mem_data_reg3 <= pio_mem_data_reg3;
831
832assign pio_mem_wr_data = {pio_wdata[19:0],
833 pio_mem_data_reg3, pio_mem_data_reg2,
834 pio_mem_data_reg1, pio_mem_data_reg0};
835
836always @ (posedge clk)
837if (reset)
838 pio_cache_rd <= 1'b0;
839else if (pio_mem_data_reg4_ren & !pio_mem_addr_reg[8])
840 pio_cache_rd <= 1'b1;
841else
842 pio_cache_rd <= 1'b0;
843
844always @ (posedge clk)
845if (reset)
846 pio_shadw_rd <= 1'b0;
847else if (pio_mem_data_reg4_ren & pio_mem_addr_reg[8])
848 pio_shadw_rd <= 1'b1;
849else
850 pio_shadw_rd <= 1'b0;
851
852always @ (posedge clk)
853if (reset)
854 pio_cache_wr <= 1'b0;
855else if (pio_mem_data_reg4_wen & !pio_mem_addr_reg[8])
856 pio_cache_wr <= 1'b1;
857else
858 pio_cache_wr <= 1'b0;
859
860
861always @ (posedge clk)
862if (reset)
863 pio_mem_data_reg4_wen_dly <= 1'b0;
864else if (pio_mem_data_reg4_wen & wr_transfer_comp_int)
865 pio_mem_data_reg4_wen_dly <= 1'b1;
866else
867 pio_mem_data_reg4_wen_dly <= 1'b0;
868
869wire pio_shadw_wr_en = (pio_mem_data_reg4_wen & !wr_transfer_comp_int | pio_mem_data_reg4_wen_dly);
870
871always @ (posedge clk)
872if (reset)
873 pio_shadw_wr <= 1'b0;
874else if (pio_shadw_wr_en & pio_mem_addr_reg[8])
875 pio_shadw_wr <= 1'b1;
876else
877 pio_shadw_wr <= 1'b0;
878
879always @ (posedge clk)
880if (reset)
881begin
882 pio_acc_dly0 <= 1'b0;
883 pio_acc_dly1 <= 1'b0;
884 pio_acc_dly2 <= 1'b0;
885end
886else
887begin
888 pio_acc_dly0 <= pio_mem_rd;
889 pio_acc_dly1 <= pio_acc_dly0;
890 pio_acc_dly2 <= pio_acc_dly1;
891end
892
893assign pio_mem_rd = pio_cache_rd | pio_shadw_rd;
894assign muxed_cache_rd_strobe = debug_mode ? pio_cache_rd : cache_rd_strobe;
895assign muxed_cache_wr_strobe = debug_mode ? pio_cache_wr : cache_wr_strobe;
896
897assign muxed_cache_rd_addr = debug_mode ? pio_mem_addr_reg[7:0] : cache_rd_addr;
898assign muxed_cache_wr_addr = debug_mode ? pio_mem_addr_reg[7:0] : cache_wr_addr;
899
900assign muxed_cache_wr_data = debug_mode ? pio_mem_wr_data : cache_wr_data;
901
902assign muxed_shadw_rd_strobe = debug_mode ? pio_shadw_rd : shadw_rd_strobe;
903assign muxed_shadw_rd_addr = debug_mode ? pio_mem_addr_reg[7:0] : shadw_rd_addr;
904assign muxed_mem_rd_data = pio_mem_addr_reg[8] ? shadw_rd_data_reg : cache_rd_data_reg;
905
906//assign muxed_shadw_wr_strobe = debug_mode ? pio_shadw_wr : shadw_wr_strobe;
907//assign muxed_shadw_wr_addr = debug_mode ? pio_mem_addr_reg[7:0] : shadw_wr_addr;
908//assign muxed_shadw_wr_data = debug_mode ? pio_mem_wr_data : shadw_wr_data;
909
910assign muxed_shadw_wr_strobe = pio_shadw_wr | shadw_wr_strobe;
911assign muxed_shadw_wr_addr = pio_shadw_wr ? pio_mem_addr_reg[7:0] : shadw_wr_addr;
912assign muxed_shadw_wr_data = pio_shadw_wr ? pio_mem_wr_data : shadw_wr_data;
913
914
915/**********************/
916//Parity Check
917/**********************/
918always @ (posedge clk)
919if (reset)
920begin
921 muxed_cache_rd_strobe_r <= 1'b0;
922 muxed_cache_rd_strobe_r1 <= 1'b0;
923 muxed_shadw_rd_strobe_r <= 1'b0;
924 muxed_shadw_rd_strobe_r1 <= 1'b0;
925 cache_rd_strobe_r <= 1'b0;
926 cache_rd_strobe_r1 <= 1'b0;
927 shadw_rd_strobe_r <= 1'b0;
928 shadw_rd_strobe_r1 <= 1'b0;
929 muxed_cache_rd_addr_r <= 8'b0;
930 muxed_shadw_rd_addr_d <= 8'b0;
931 muxed_shadw_rd_addr_r <= 8'b0;
932end
933else
934begin
935 muxed_cache_rd_strobe_r <= muxed_cache_rd_strobe;
936 muxed_cache_rd_strobe_r1 <= muxed_cache_rd_strobe_r;
937 muxed_shadw_rd_strobe_r <= muxed_shadw_rd_strobe;
938 muxed_shadw_rd_strobe_r1 <= muxed_shadw_rd_strobe_r;
939 cache_rd_strobe_r <= cache_rd_strobe;
940 cache_rd_strobe_r1 <= cache_rd_strobe_r;
941 shadw_rd_strobe_r <= shadw_rd_strobe;
942 shadw_rd_strobe_r1 <= shadw_rd_strobe_r;
943 muxed_cache_rd_addr_r <= muxed_cache_rd_addr;
944 muxed_shadw_rd_addr_d <= muxed_shadw_rd_addr;
945 muxed_shadw_rd_addr_r <= muxed_shadw_rd_addr_d;
946end
947
948assign cache_rd_data0 = {cache_rd_data_reg[128], cache_rd_data_reg[31:0]};
949assign cache_rd_data1 = {cache_rd_data_reg[129], cache_rd_data_reg[63:32]};
950assign cache_rd_data2 = {cache_rd_data_reg[130], cache_rd_data_reg[95:64]};
951assign cache_rd_data3 = {cache_rd_data_reg[131], cache_rd_data_reg[127:96]};
952
953assign cache_orig_parity_bits = cache_rd_data_reg[147:132];
954assign cache_data_parity_bits = {^cache_rd_data3[32:24],
955 ^cache_rd_data3[23:16],
956 ^cache_rd_data3[15:8],
957 ^cache_rd_data3[7:0],
958 ^cache_rd_data2[32:24],
959 ^cache_rd_data2[23:16],
960 ^cache_rd_data2[15:8],
961 ^cache_rd_data2[7:0],
962 ^cache_rd_data1[32:24],
963 ^cache_rd_data1[23:16],
964 ^cache_rd_data1[15:8],
965 ^cache_rd_data1[7:0],
966 ^cache_rd_data0[32:24],
967 ^cache_rd_data0[23:16],
968 ^cache_rd_data0[15:8],
969 ^cache_rd_data0[7:0]};
970
971assign acc_cache_parity_err = !(cache_orig_parity_bits == cache_data_parity_bits) & muxed_cache_rd_strobe_r1;
972assign cache_parity_err = !(cache_orig_parity_bits == cache_data_parity_bits) & cache_rd_strobe_r1;
973
974assign shadw_rd_data0 = shadw_rd_data_reg[31:0];
975assign shadw_rd_data1 = shadw_rd_data_reg[63:32];
976assign shadw_rd_data2 = shadw_rd_data_reg[95:64];
977assign shadw_rd_data3 = shadw_rd_data_reg[127:96];
978
979assign shadw_orig_parity_bits = shadw_rd_data_reg[147:132];
980assign shadw_data_parity_bits = {^shadw_rd_data3[31:24],
981 ^shadw_rd_data3[23:16],
982 ^shadw_rd_data3[15:8],
983 ^shadw_rd_data3[7:0],
984 ^shadw_rd_data2[31:24],
985 ^shadw_rd_data2[23:16],
986 ^shadw_rd_data2[15:8],
987 ^shadw_rd_data2[7:0],
988 ^shadw_rd_data1[31:24],
989 ^shadw_rd_data1[23:16],
990 ^shadw_rd_data1[15:8],
991 ^shadw_rd_data1[7:0],
992 ^shadw_rd_data0[31:24],
993 ^shadw_rd_data0[23:16],
994 ^shadw_rd_data0[15:8],
995 ^shadw_rd_data0[7:0]};
996
997assign acc_shadw_parity_err = !(shadw_orig_parity_bits == shadw_data_parity_bits) & muxed_shadw_rd_strobe_r1;
998assign shadw_parity_err = !(shadw_orig_parity_bits == shadw_data_parity_bits) & shadw_rd_strobe_r1;
999
1000always @ (posedge clk)
1001if (reset)
1002 cache_parity_log_reg <= 10'b0;
1003else if (cache_parity_log_pio_wen)
1004 cache_parity_log_reg <= {pio_wdata[15:14], pio_wdata[7:0]};
1005else if (acc_cache_parity_err & cache_parity_log_reg[8])
1006 cache_parity_log_reg <= {2'b11, cache_parity_log_reg[7:0]};
1007else if (acc_cache_parity_err)
1008 cache_parity_log_reg <= {2'b10, muxed_cache_rd_addr_r[7:0]};
1009else
1010 cache_parity_log_reg <= cache_parity_log_reg;
1011
1012
1013always @ (posedge clk)
1014if (reset)
1015 shadw_parity_log_reg <= 10'b0;
1016else if (shadw_parity_log_pio_wen)
1017 shadw_parity_log_reg <= {pio_wdata[15:14], pio_wdata[7:0]};
1018else if (acc_shadw_parity_err & shadw_parity_log_reg[8])
1019 shadw_parity_log_reg <= {2'b11, shadw_parity_log_reg[7:0]};
1020else if (acc_shadw_parity_err)
1021 shadw_parity_log_reg <= {2'b10, muxed_shadw_rd_addr_r[7:0]};
1022else
1023 shadw_parity_log_reg <= shadw_parity_log_reg;
1024
1025
1026/*****************/
1027//Debug port
1028/*****************/
1029
1030always @ (posedge clk)
1031if (reset)
1032 debug_training_vector <= 32'b0;
1033else if (debug_training_vector_pio_wen)
1034 debug_training_vector <= pio_wdata[31:0];
1035else
1036 debug_training_vector <= debug_training_vector;
1037
1038
1039wire[31:0] debug_default_data = debug_port_mux_sel[0] ? wr_debug_data[31:0] : {16'b0, pkt_buf_gnt[15:0]};
1040wire[31:0] debug_port_data = (debug_port_mux_sel == 2'b10) ? debug_training_vector[31:0] :
1041 (debug_port_mux_sel == 2'b11) ? ~rdmc_debug_port :
1042 debug_default_data;
1043
1044always @ (posedge clk)
1045if (reset)
1046 rdmc_debug_port <= 32'b0;
1047else
1048 rdmc_debug_port <= debug_port_data;
1049
1050
1051/***************/
1052//PIO Read
1053/***************/
1054assign chnl_pio_rd_data = {64{pio_rd_gnt[0]}} & chnl_pio_rd_data0 |
1055 {64{pio_rd_gnt[1]}} & chnl_pio_rd_data1 |
1056 {64{pio_rd_gnt[2]}} & chnl_pio_rd_data2 |
1057 {64{pio_rd_gnt[3]}} & chnl_pio_rd_data3 |
1058 {64{pio_rd_gnt[4]}} & chnl_pio_rd_data4 |
1059 {64{pio_rd_gnt[5]}} & chnl_pio_rd_data5 |
1060 {64{pio_rd_gnt[6]}} & chnl_pio_rd_data6 |
1061 {64{pio_rd_gnt[7]}} & chnl_pio_rd_data7 |
1062 {64{pio_rd_gnt[8]}} & chnl_pio_rd_data8 |
1063 {64{pio_rd_gnt[9]}} & chnl_pio_rd_data9 |
1064 {64{pio_rd_gnt[10]}} & chnl_pio_rd_data10 |
1065 {64{pio_rd_gnt[11]}} & chnl_pio_rd_data11 |
1066 {64{pio_rd_gnt[12]}} & chnl_pio_rd_data12 |
1067 {64{pio_rd_gnt[13]}} & chnl_pio_rd_data13 |
1068 {64{pio_rd_gnt[14]}} & chnl_pio_rd_data14 |
1069 {64{pio_rd_gnt[15]}} & chnl_pio_rd_data15;
1070
1071
1072/*
1073always @ (pio_addr or clk_div_value or
1074 def_port0_rdc_reg or def_port1_rdc_reg or
1075 def_port2_rdc_reg or def_port3_rdc_reg or
1076 pt_drr_wt0_reg or pt_drr_wt1_reg or
1077 pt_drr_wt2_reg or pt_drr_wt3_reg or
1078 pt_use0_reg or pt_use1_reg or
1079 pt_use2_reg or pt_use3_reg or
1080 red_ran_init_reg or rx_addr_mode_reg or
1081 cache_parity_log_reg or shadw_parity_log_reg or
1082 pio_mem_addr_reg or pio_mem_data_reg0 or
1083 pio_mem_data_reg1 or pio_mem_data_reg2 or
1084 pio_mem_data_reg3 or muxed_mem_rd_data or
1085 port_err_status_reg or port_err_mask_reg or
1086 debug_training_vector)
1087begin
1088
1089port_pio_rd_err = 1'b0;
1090case (pio_addr) //synopsys parallel_case full_case
1091
109220'h80000: port_pio_rd_data_tmp = {48'b0, clk_div_value[15:0]};
109320'h80008: port_pio_rd_data_tmp = {59'b0, def_port0_rdc_reg[4:0]};
109420'h80010: port_pio_rd_data_tmp = {59'b0, def_port1_rdc_reg[4:0]};
109520'h80018: port_pio_rd_data_tmp = {59'b0, def_port2_rdc_reg[4:0]};
109620'h80020: port_pio_rd_data_tmp = {59'b0, def_port3_rdc_reg[4:0]};
109720'h80028: port_pio_rd_data_tmp = {48'b0, pt_drr_wt0_reg[15:0]};
109820'h80030: port_pio_rd_data_tmp = {48'b0, pt_drr_wt1_reg[15:0]};
109920'h80038: port_pio_rd_data_tmp = {48'b0, pt_drr_wt2_reg[15:0]};
110020'h80040: port_pio_rd_data_tmp = {48'b0, pt_drr_wt3_reg[15:0]};
110120'h80048: port_pio_rd_data_tmp = {44'b0, pt_use0_reg[19:0]};
110220'h80050: port_pio_rd_data_tmp = {44'b0, pt_use1_reg[19:0]};
110320'h80058: port_pio_rd_data_tmp = {44'b0, pt_use2_reg[19:0]};
110420'h80060: port_pio_rd_data_tmp = {44'b0, pt_use3_reg[19:0]};
110520'h80068: port_pio_rd_data_tmp = {47'b0, red_ran_init_reg[16:0]};
110620'h80070: port_pio_rd_data_tmp = {60'b0, rx_addr_mode_reg[3:0]};
110720'h80078: port_pio_rd_data_tmp = {48'b0, cache_parity_log_reg[9:8], 6'b0, cache_parity_log_reg[7:0]};
110820'h80080: port_pio_rd_data_tmp = {48'b0, shadw_parity_log_reg[9:8], 6'b0, shadw_parity_log_reg[7:0]};
110920'h80088: port_pio_rd_data_tmp = {55'b0, pio_mem_addr_reg[8:0]};
111020'h80090: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg0[31:0]};
111120'h80098: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg1[31:0]};
111220'h800a0: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg2[31:0]};
111320'h800a8: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg3[31:0]};
111420'h800b0: port_pio_rd_data_tmp = {44'b0, muxed_mem_rd_data[147:128]};
111520'h800b8: port_pio_rd_data_tmp = {55'b0, port_err_status_reg[8:0]};
111620'h800c0: port_pio_rd_data_tmp = {55'b0, port_err_mask_reg[8:0]};
111720'h800c8: port_pio_rd_data_tmp = {32'b0, debug_training_vector[31:0]};
111820'h800d0: port_pio_rd_data_tmp = {55'b0, port_err_status_reg[8:0]};
1119default: begin
1120 port_pio_rd_err = 1'b1;
1121 port_pio_rd_data_tmp = 64'b0;
1122 end
1123
1124endcase
1125end
1126*/
1127
1128always @ (pio_addr or clk_div_value or
1129 def_port0_rdc_reg or def_port1_rdc_reg or
1130 def_port2_rdc_reg or def_port3_rdc_reg or
1131 pt_drr_wt0_reg or pt_drr_wt1_reg or
1132 pt_drr_wt2_reg or pt_drr_wt3_reg or
1133 pt_use0_reg or pt_use1_reg or
1134 pt_use2_reg or pt_use3_reg or
1135 red_ran_init_reg or rx_addr_mode_reg or
1136 cache_parity_log_reg or shadw_parity_log_reg or
1137 pio_mem_addr_reg or pio_mem_data_reg0 or
1138 pio_mem_data_reg1 or pio_mem_data_reg2 or
1139 pio_mem_data_reg3 or muxed_mem_rd_data or
1140 port_err_status_reg or port_err_mask_reg or
1141 debug_training_vector)
1142begin
1143
1144port_pio_rd_err = 1'b0;
1145case (pio_addr[19:2]) //synopsys parallel_case full_case
1146
114718'h20000: port_pio_rd_data_tmp = {48'b0, clk_div_value[15:0]};
114818'h20001: port_pio_rd_data_tmp = 64'b0;
114918'h20002: port_pio_rd_data_tmp = {59'b0, def_port0_rdc_reg[4:0]};
115018'h20003: port_pio_rd_data_tmp = 64'b0;
115118'h20004: port_pio_rd_data_tmp = {59'b0, def_port1_rdc_reg[4:0]};
115218'h20005: port_pio_rd_data_tmp = 64'b0;
115318'h20006: port_pio_rd_data_tmp = {59'b0, def_port2_rdc_reg[4:0]};
115418'h20007: port_pio_rd_data_tmp = 64'b0;
115518'h20008: port_pio_rd_data_tmp = {59'b0, def_port3_rdc_reg[4:0]};
115618'h20009: port_pio_rd_data_tmp = 64'b0;
115718'h2000a: port_pio_rd_data_tmp = {48'b0, pt_drr_wt0_reg[15:0]};
115818'h2000b: port_pio_rd_data_tmp = 64'b0;
115918'h2000c: port_pio_rd_data_tmp = {48'b0, pt_drr_wt1_reg[15:0]};
116018'h2000d: port_pio_rd_data_tmp = 64'b0;
116118'h2000e: port_pio_rd_data_tmp = {48'b0, pt_drr_wt2_reg[15:0]};
116218'h2000f: port_pio_rd_data_tmp = 64'b0;
116318'h20010: port_pio_rd_data_tmp = {48'b0, pt_drr_wt3_reg[15:0]};
116418'h20011: port_pio_rd_data_tmp = 64'b0;
116518'h20012: port_pio_rd_data_tmp = {44'b0, pt_use0_reg[19:0]};
116618'h20013: port_pio_rd_data_tmp = 64'b0;
116718'h20014: port_pio_rd_data_tmp = {44'b0, pt_use1_reg[19:0]};
116818'h20015: port_pio_rd_data_tmp = 64'b0;
116918'h20016: port_pio_rd_data_tmp = {44'b0, pt_use2_reg[19:0]};
117018'h20017: port_pio_rd_data_tmp = 64'b0;
117118'h20018: port_pio_rd_data_tmp = {44'b0, pt_use3_reg[19:0]};
117218'h20019: port_pio_rd_data_tmp = 64'b0;
117318'h2001a: port_pio_rd_data_tmp = {47'b0, red_ran_init_reg[16:0]};
117418'h2001b: port_pio_rd_data_tmp = 64'b0;
117518'h2001c: port_pio_rd_data_tmp = {60'b0, rx_addr_mode_reg[3:0]};
117618'h2001d: port_pio_rd_data_tmp = 64'b0;
117718'h2001e: port_pio_rd_data_tmp = {48'b0, cache_parity_log_reg[9:8], 6'b0, cache_parity_log_reg[7:0]};
117818'h2001f: port_pio_rd_data_tmp = 64'b0;
117918'h20020: port_pio_rd_data_tmp = {48'b0, shadw_parity_log_reg[9:8], 6'b0, shadw_parity_log_reg[7:0]};
118018'h20021: port_pio_rd_data_tmp = 64'b0;
118118'h20022: port_pio_rd_data_tmp = {55'b0, pio_mem_addr_reg[8:0]};
118218'h20023: port_pio_rd_data_tmp = 64'b0;
118318'h20024: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg0[31:0]};
118418'h20025: port_pio_rd_data_tmp = 64'b0;
118518'h20026: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg1[31:0]};
118618'h20027: port_pio_rd_data_tmp = 64'b0;
118718'h20028: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg2[31:0]};
118818'h20029: port_pio_rd_data_tmp = 64'b0;
118918'h2002a: port_pio_rd_data_tmp = {32'b0, pio_mem_data_reg3[31:0]};
119018'h2002b: port_pio_rd_data_tmp = 64'b0;
119118'h2002c: port_pio_rd_data_tmp = {44'b0, muxed_mem_rd_data[147:128]};
119218'h2002d: port_pio_rd_data_tmp = 64'b0;
119318'h2002e: port_pio_rd_data_tmp = {55'b0, port_err_status_reg[8:0]};
119418'h2002f: port_pio_rd_data_tmp = 64'b0;
119518'h20030: port_pio_rd_data_tmp = {55'b0, port_err_mask_reg[8:0]};
119618'h20031: port_pio_rd_data_tmp = 64'b0;
119718'h20032: port_pio_rd_data_tmp = {32'b0, debug_training_vector[31:0]};
119818'h20033: port_pio_rd_data_tmp = 64'b0;
119918'h20034: port_pio_rd_data_tmp = {55'b0, port_err_status_reg[8:0]};
120018'h20035: port_pio_rd_data_tmp = 64'b0;
1201default: begin
1202 port_pio_rd_err = 1'b1;
1203 port_pio_rd_data_tmp = 64'hdeadbeefdeadbeef;
1204 end
1205
1206endcase
1207end
1208
1209
1210always @ (posedge clk)
1211if (reset)
1212 port_pio_gnt <= 1'b0;
1213else
1214 port_pio_gnt <= !port_pio_rd_err;
1215
1216always @ (posedge clk)
1217if (reset)
1218 port_pio_rd_data <= 64'b0;
1219else
1220 port_pio_rd_data <= port_pio_rd_data_tmp;
1221
1222
1223
1224
1225endmodule
1226
1227
1228
1229