Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_rdmc_desp_acc_ctrl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_rdmc_desp_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_desp_acc_ctrl (
36 clk,
37 reset,
38 rx_addr_32b_mode,
39 desp_rd_req,
40 fetch_desp_addr0,
41 fetch_desp_addr1,
42 fetch_desp_addr2,
43 fetch_desp_addr3,
44 fetch_desp_addr4,
45 fetch_desp_addr5,
46 fetch_desp_addr6,
47 fetch_desp_addr7,
48 fetch_desp_addr8,
49 fetch_desp_addr9,
50 fetch_desp_addr10,
51 fetch_desp_addr11,
52 fetch_desp_addr12,
53 fetch_desp_addr13,
54 fetch_desp_addr14,
55 fetch_desp_addr15,
56 fetch_desp_numb0,
57 fetch_desp_numb1,
58 fetch_desp_numb2,
59 fetch_desp_numb3,
60 fetch_desp_numb4,
61 fetch_desp_numb5,
62 fetch_desp_numb6,
63 fetch_desp_numb7,
64 fetch_desp_numb8,
65 fetch_desp_numb9,
66 fetch_desp_numb10,
67 fetch_desp_numb11,
68 fetch_desp_numb12,
69 fetch_desp_numb13,
70 fetch_desp_numb14,
71 fetch_desp_numb15,
72 dma_func_num0,
73 dma_func_num1,
74 dma_func_num2,
75 dma_func_num3,
76 dma_func_num4,
77 dma_func_num5,
78 dma_func_num6,
79 dma_func_num7,
80 dma_func_num8,
81 dma_func_num9,
82 dma_func_num10,
83 dma_func_num11,
84 dma_func_num12,
85 dma_func_num13,
86 dma_func_num14,
87 dma_func_num15,
88 rdmc_resp_accept_array,
89 fetch_desp_resp_valid_array,
90 meta1_rdmc_rbr_req_accept,
91 meta1_rdmc_rbr_req_error,
92 meta1_rdmc_rbr_resp_ready,
93 meta1_rdmc_rbr_resp_cmd,
94 meta1_rdmc_rbr_resp_cmd_status,
95 meta1_rdmc_rbr_resp_dma_num,
96 meta1_rdmc_rbr_resp_client,
97 meta1_rdmc_rbr_resp_comp,
98 meta1_rdmc_rbr_resp_trans_comp,
99 meta1_rdmc_rbr_resp_data_valid,
100 meta1_rdmc_rbr_resp_data,
101 meta1_rdmc_rbr_resp_byteenable,
102 meta1_rdmc_rbr_resp_data_status,
103
104 rdmc_meta1_rbr_req,
105 rdmc_meta1_rbr_req_cmd,
106 rdmc_meta1_rbr_req_address,
107 rdmc_meta1_rbr_req_length,
108 rdmc_meta1_rbr_req_dma_num,
109 rdmc_meta1_rbr_req_port_num,
110 rdmc_meta1_rbr_req_func_num,
111 rdmc_meta1_rbr_resp_accept,
112 fetch_desp_gnt,
113 resp_data_in_process,
114 rdmc_resp_rdy_valid,
115 rdmc_req_err,
116 rdmc_resp_cmd,
117 rdmc_resp_cmd_status,
118 rdmc_resp_dma_num,
119 rdmc_resp_data_valid,
120 rdmc_resp_byteenable,
121 rdmc_resp_comp,
122 rdmc_resp_trans_comp,
123 rdmc_resp_data_status,
124 cache_wr_data
125 );
126
127input clk;
128input reset;
129input rx_addr_32b_mode;
130input[15:0] desp_rd_req;
131input[63:0] fetch_desp_addr0;
132input[63:0] fetch_desp_addr1;
133input[63:0] fetch_desp_addr2;
134input[63:0] fetch_desp_addr3;
135input[63:0] fetch_desp_addr4;
136input[63:0] fetch_desp_addr5;
137input[63:0] fetch_desp_addr6;
138input[63:0] fetch_desp_addr7;
139input[63:0] fetch_desp_addr8;
140input[63:0] fetch_desp_addr9;
141input[63:0] fetch_desp_addr10;
142input[63:0] fetch_desp_addr11;
143input[63:0] fetch_desp_addr12;
144input[63:0] fetch_desp_addr13;
145input[63:0] fetch_desp_addr14;
146input[63:0] fetch_desp_addr15;
147input[4:0] fetch_desp_numb0;
148input[4:0] fetch_desp_numb1;
149input[4:0] fetch_desp_numb2;
150input[4:0] fetch_desp_numb3;
151input[4:0] fetch_desp_numb4;
152input[4:0] fetch_desp_numb5;
153input[4:0] fetch_desp_numb6;
154input[4:0] fetch_desp_numb7;
155input[4:0] fetch_desp_numb8;
156input[4:0] fetch_desp_numb9;
157input[4:0] fetch_desp_numb10;
158input[4:0] fetch_desp_numb11;
159input[4:0] fetch_desp_numb12;
160input[4:0] fetch_desp_numb13;
161input[4:0] fetch_desp_numb14;
162input[4:0] fetch_desp_numb15;
163input[1:0] dma_func_num0;
164input[1:0] dma_func_num1;
165input[1:0] dma_func_num2;
166input[1:0] dma_func_num3;
167input[1:0] dma_func_num4;
168input[1:0] dma_func_num5;
169input[1:0] dma_func_num6;
170input[1:0] dma_func_num7;
171input[1:0] dma_func_num8;
172input[1:0] dma_func_num9;
173input[1:0] dma_func_num10;
174input[1:0] dma_func_num11;
175input[1:0] dma_func_num12;
176input[1:0] dma_func_num13;
177input[1:0] dma_func_num14;
178input[1:0] dma_func_num15;
179input[15:0] rdmc_resp_accept_array;
180input[15:0] fetch_desp_resp_valid_array;
181input meta1_rdmc_rbr_req_accept;
182input meta1_rdmc_rbr_req_error;
183input meta1_rdmc_rbr_resp_ready;
184input[7:0] meta1_rdmc_rbr_resp_cmd;
185input[3:0] meta1_rdmc_rbr_resp_cmd_status;
186input[4:0] meta1_rdmc_rbr_resp_dma_num;
187input meta1_rdmc_rbr_resp_client;
188input meta1_rdmc_rbr_resp_comp;
189input meta1_rdmc_rbr_resp_trans_comp;
190input meta1_rdmc_rbr_resp_data_valid;
191input[127:0] meta1_rdmc_rbr_resp_data;
192input[15:0] meta1_rdmc_rbr_resp_byteenable;
193input[3:0] meta1_rdmc_rbr_resp_data_status;
194
195output rdmc_meta1_rbr_req;
196output[7:0] rdmc_meta1_rbr_req_cmd;
197output[63:0] rdmc_meta1_rbr_req_address;
198output[13:0] rdmc_meta1_rbr_req_length;
199output[4:0] rdmc_meta1_rbr_req_dma_num;
200output[1:0] rdmc_meta1_rbr_req_port_num;
201output[1:0] rdmc_meta1_rbr_req_func_num;
202output rdmc_meta1_rbr_resp_accept;
203output[15:0] fetch_desp_gnt;
204output resp_data_in_process;
205output rdmc_resp_rdy_valid;
206output rdmc_req_err;
207output[4:0] rdmc_resp_cmd;
208output[3:0] rdmc_resp_cmd_status;
209output[4:0] rdmc_resp_dma_num;
210output rdmc_resp_data_valid;
211output[15:0] rdmc_resp_byteenable;
212output rdmc_resp_comp;
213output rdmc_resp_trans_comp;
214output[3:0] rdmc_resp_data_status;
215output[147:0] cache_wr_data;
216
217
218reg rdmc_meta1_rbr_req;
219reg[7:0] rdmc_meta1_rbr_req_cmd;
220reg[63:0] rdmc_meta1_rbr_req_address;
221reg[4:0] rdmc_meta1_rbr_req_num;
222reg[3:0] rdmc_meta1_rbr_req_dma_num_i;
223reg[1:0] rdmc_meta1_rbr_req_func_num;
224reg rdmc_meta1_rbr_resp_accept;
225
226reg rdmc_req_accept;
227reg rdmc_req_err;
228reg[7:0] rdmc_resp_cmd_f;
229reg[3:0] rdmc_resp_cmd_status;
230reg[4:0] rdmc_resp_dma_num;
231reg rdmc_resp_client;
232reg rdmc_resp_ready;
233reg rdmc_resp_comp;
234reg rdmc_resp_trans_comp;
235reg rdmc_resp_data_valid;
236reg[127:0] rdmc_resp_data;
237reg[15:0] rdmc_resp_byteenable;
238reg[3:0] rdmc_resp_data_status;
239reg[147:0] cache_wr_data;
240
241reg[1:0] state;
242reg[1:0] next_state;
243reg cycle0;
244reg cycle1;
245reg[15:0] token;
246reg[15:0] desp_rd_gnt;
247
248wire[4:0] rdmc_resp_cmd = rdmc_resp_cmd_f[4:0];
249
250wire[3:0] desp_rd_gnt_enc;
251wire[15:0] fetch_desp_gnt;
252wire resp_data_in_process;
253wire rdmc_resp_rdy_valid;
254wire vaild_bit0;
255wire vaild_bit1;
256wire vaild_bit2;
257wire vaild_bit3;
258wire[3:0] vaild_bits = {vaild_bit3, vaild_bit2, vaild_bit1, vaild_bit0};
259
260wire[15:0] start_mask = 16'h1111;
261wire[3:0] start_slide_num;
262wire[15:0] start_mask_slide;
263wire is_req = |desp_rd_req;
264wire[15:0] right_req;
265wire[15:0] left_req;
266wire sel_left;
267wire[15:0] req_tmp;
268wire[15:0] pre_desp_rd_gnt;
269
270
271parameter
272C0 = 2'b00,
273C1 = 2'b01,
274C2 = 2'b10;
275
276always @ (state or is_req or rdmc_req_accept)
277begin
278 cycle0 = 1'b0;
279 cycle1 = 1'b0;
280
281case (state) //synopsys parallel_case full_case
282
283C0:
284begin
285 if (is_req)
286 begin
287 cycle0 = 1'b1;
288 next_state = C1;
289 end
290 else
291 next_state = state;
292end
293
294C1:
295begin
296 cycle1 = 1'b1;
297 next_state = C2;
298end
299
300C2:
301begin
302 if (rdmc_req_accept)
303 next_state = C0;
304 else
305 next_state = state;
306end
307
308default:
309 next_state = C0;
310
311endcase
312end
313
314always @ (posedge clk)
315if (reset)
316 state <= 2'b0;
317else
318 state <= next_state;
319
320
321/**********************/
322//Arbiter
323/**********************/
324niu_rdmc_encode_32 encode_32_inst_a (
325 .din (token),
326 .dout (start_slide_num)
327 );
328
329niu_rdmc_barrel_shl_32 barrel_shl_32_inst_a (
330 .din (start_mask),
331 .shift (start_slide_num),
332 .dout (start_mask_slide)
333 );
334
335assign right_req = desp_rd_req & ~start_mask_slide;
336assign left_req = desp_rd_req & start_mask_slide;
337
338assign sel_left = !(left_req == 16'b0);
339assign req_tmp = sel_left ? left_req : right_req;
340
341niu_rdmc_pri_encode_32 pri_encode_32_inst_a (
342 .din (req_tmp),
343 .dout (pre_desp_rd_gnt)
344 );
345
346always @ (posedge clk)
347if (reset)
348 token <= 16'h0001;
349else if (cycle0)
350 token <= {token[14:0], token[15]};
351else
352 token <= token;
353
354always @ (posedge clk)
355if (reset)
356 desp_rd_gnt <= 16'h0;
357else if (cycle0)
358 desp_rd_gnt <= pre_desp_rd_gnt;
359else if (rdmc_req_accept)
360 desp_rd_gnt <= 16'h0;
361else
362 desp_rd_gnt <= desp_rd_gnt;
363
364assign fetch_desp_gnt = {16{rdmc_req_accept}} & desp_rd_gnt[15:0];
365
366
367/****************************/
368//Read Request Interface
369/****************************/
370wire[63:0] fetch_desp_addr_tmp = {64{desp_rd_gnt[0]}} & fetch_desp_addr0 |
371 {64{desp_rd_gnt[1]}} & fetch_desp_addr1 |
372 {64{desp_rd_gnt[2]}} & fetch_desp_addr2 |
373 {64{desp_rd_gnt[3]}} & fetch_desp_addr3 |
374 {64{desp_rd_gnt[4]}} & fetch_desp_addr4 |
375 {64{desp_rd_gnt[5]}} & fetch_desp_addr5 |
376 {64{desp_rd_gnt[6]}} & fetch_desp_addr6 |
377 {64{desp_rd_gnt[7]}} & fetch_desp_addr7 |
378 {64{desp_rd_gnt[8]}} & fetch_desp_addr8 |
379 {64{desp_rd_gnt[9]}} & fetch_desp_addr9 |
380 {64{desp_rd_gnt[10]}} & fetch_desp_addr10 |
381 {64{desp_rd_gnt[11]}} & fetch_desp_addr11 |
382 {64{desp_rd_gnt[12]}} & fetch_desp_addr12 |
383 {64{desp_rd_gnt[13]}} & fetch_desp_addr13 |
384 {64{desp_rd_gnt[14]}} & fetch_desp_addr14 |
385 {64{desp_rd_gnt[15]}} & fetch_desp_addr15;
386
387wire[4:0] fetch_desp_numb_tmp = {5{desp_rd_gnt[0]}} & fetch_desp_numb0 |
388 {5{desp_rd_gnt[1]}} & fetch_desp_numb1 |
389 {5{desp_rd_gnt[2]}} & fetch_desp_numb2 |
390 {5{desp_rd_gnt[3]}} & fetch_desp_numb3 |
391 {5{desp_rd_gnt[4]}} & fetch_desp_numb4 |
392 {5{desp_rd_gnt[5]}} & fetch_desp_numb5 |
393 {5{desp_rd_gnt[6]}} & fetch_desp_numb6 |
394 {5{desp_rd_gnt[7]}} & fetch_desp_numb7 |
395 {5{desp_rd_gnt[8]}} & fetch_desp_numb8 |
396 {5{desp_rd_gnt[9]}} & fetch_desp_numb9 |
397 {5{desp_rd_gnt[10]}} & fetch_desp_numb10 |
398 {5{desp_rd_gnt[11]}} & fetch_desp_numb11 |
399 {5{desp_rd_gnt[12]}} & fetch_desp_numb12 |
400 {5{desp_rd_gnt[13]}} & fetch_desp_numb13 |
401 {5{desp_rd_gnt[14]}} & fetch_desp_numb14 |
402 {5{desp_rd_gnt[15]}} & fetch_desp_numb15;
403
404wire[1:0] dma_func_num_tmp = {2{desp_rd_gnt[0]}} & dma_func_num0 |
405 {2{desp_rd_gnt[1]}} & dma_func_num1 |
406 {2{desp_rd_gnt[2]}} & dma_func_num2 |
407 {2{desp_rd_gnt[3]}} & dma_func_num3 |
408 {2{desp_rd_gnt[4]}} & dma_func_num4 |
409 {2{desp_rd_gnt[5]}} & dma_func_num5 |
410 {2{desp_rd_gnt[6]}} & dma_func_num6 |
411 {2{desp_rd_gnt[7]}} & dma_func_num7 |
412 {2{desp_rd_gnt[8]}} & dma_func_num8 |
413 {2{desp_rd_gnt[9]}} & dma_func_num9 |
414 {2{desp_rd_gnt[10]}} & dma_func_num10 |
415 {2{desp_rd_gnt[11]}} & dma_func_num11 |
416 {2{desp_rd_gnt[12]}} & dma_func_num12 |
417 {2{desp_rd_gnt[13]}} & dma_func_num13 |
418 {2{desp_rd_gnt[14]}} & dma_func_num14 |
419 {2{desp_rd_gnt[15]}} & dma_func_num15;
420
421
422niu_rdmc_encode_32 encode_32_inst_b (
423 .din (desp_rd_gnt),
424 .dout (desp_rd_gnt_enc)
425 );
426
427
428wire[4:0] rdmc_meta1_rbr_req_dma_num = {1'b0, rdmc_meta1_rbr_req_dma_num_i};
429wire[13:0] rdmc_meta1_rbr_req_length = {7'b0, rdmc_meta1_rbr_req_num[4:0], 2'b0};
430wire[1:0] rdmc_meta1_rbr_req_port_num = 2'b0;
431
432always @ (posedge clk)
433if (reset)
434 rdmc_meta1_rbr_req <= 1'b0;
435else if (cycle1)
436 rdmc_meta1_rbr_req <= 1'b1;
437else if (meta1_rdmc_rbr_req_accept | meta1_rdmc_rbr_req_error)
438 rdmc_meta1_rbr_req <= 1'b0;
439else
440 rdmc_meta1_rbr_req <= rdmc_meta1_rbr_req;
441
442always @ (posedge clk)
443if (reset)
444 rdmc_meta1_rbr_req_cmd <= 8'b0;
445else if (cycle1 & rx_addr_32b_mode)
446 rdmc_meta1_rbr_req_cmd <= 8'b0000_0000; // 32 bit address
447else if (cycle1)
448 rdmc_meta1_rbr_req_cmd <= 8'b0000_1000; // hardwired to 64 bit addressing
449else if (rdmc_req_accept)
450 rdmc_meta1_rbr_req_cmd <= 8'b0;
451else
452 rdmc_meta1_rbr_req_cmd <= rdmc_meta1_rbr_req_cmd;
453
454always @ (posedge clk)
455if (reset)
456 rdmc_meta1_rbr_req_address <= 64'b0;
457else if (cycle1 & rx_addr_32b_mode)
458 rdmc_meta1_rbr_req_address <= {32'b0, fetch_desp_addr_tmp[31:0]};
459else if (cycle1)
460 rdmc_meta1_rbr_req_address <= fetch_desp_addr_tmp[63:0];
461else
462 rdmc_meta1_rbr_req_address <= rdmc_meta1_rbr_req_address;
463
464always @ (posedge clk)
465if (reset)
466 rdmc_meta1_rbr_req_num <= 5'b0;
467else if (cycle1)
468 rdmc_meta1_rbr_req_num <= fetch_desp_numb_tmp;
469else
470 rdmc_meta1_rbr_req_num <= rdmc_meta1_rbr_req_num;
471
472always @ (posedge clk)
473if (reset)
474 rdmc_meta1_rbr_req_func_num <= 2'b0;
475else if (cycle1)
476 rdmc_meta1_rbr_req_func_num <= dma_func_num_tmp;
477else
478 rdmc_meta1_rbr_req_func_num <= rdmc_meta1_rbr_req_func_num;
479
480
481always @ (posedge clk)
482if (reset)
483 rdmc_meta1_rbr_req_dma_num_i <= 4'b0;
484else if (cycle1)
485 rdmc_meta1_rbr_req_dma_num_i <= desp_rd_gnt_enc;
486else
487 rdmc_meta1_rbr_req_dma_num_i <= rdmc_meta1_rbr_req_dma_num_i;
488
489//Input registers
490always @ (posedge clk)
491if (reset)
492begin
493 rdmc_req_accept <= 1'b0;
494 rdmc_req_err <= 1'b0;
495end
496else
497begin
498 rdmc_req_accept <= meta1_rdmc_rbr_req_accept;
499 rdmc_req_err <= meta1_rdmc_rbr_req_error;
500end
501
502/****************************/
503//Read Response Interface
504/****************************/
505//Input registers
506
507always @ (posedge clk)
508if (reset)
509begin
510 rdmc_resp_cmd_f <= 8'b0;
511 rdmc_resp_cmd_status <= 4'b0;
512 rdmc_resp_dma_num <= 5'b0;
513 rdmc_resp_client <= 1'b0;
514 rdmc_resp_ready <= 1'b0;
515 rdmc_resp_comp <= 1'b0;
516 rdmc_resp_trans_comp <= 1'b0;
517
518 rdmc_resp_data_valid <= 1'b0;
519 rdmc_resp_data <= 128'b0;
520 rdmc_resp_byteenable <= 16'b0;
521 rdmc_resp_data_status <= 4'b0;
522end
523else
524begin
525 rdmc_resp_cmd_f <= meta1_rdmc_rbr_resp_cmd;
526 rdmc_resp_cmd_status <= meta1_rdmc_rbr_resp_cmd_status;
527 rdmc_resp_dma_num <= meta1_rdmc_rbr_resp_dma_num;
528 rdmc_resp_client <= meta1_rdmc_rbr_resp_client;
529 rdmc_resp_ready <= meta1_rdmc_rbr_resp_ready;
530 rdmc_resp_comp <= meta1_rdmc_rbr_resp_comp;
531 rdmc_resp_trans_comp <= meta1_rdmc_rbr_resp_trans_comp;
532
533 rdmc_resp_data_valid <= meta1_rdmc_rbr_resp_data_valid;
534 rdmc_resp_data <= meta1_rdmc_rbr_resp_data;
535 rdmc_resp_byteenable <= meta1_rdmc_rbr_resp_byteenable;
536 rdmc_resp_data_status <= meta1_rdmc_rbr_resp_data_status; //not used for now
537end
538
539always @ (posedge clk)
540if (reset)
541 rdmc_meta1_rbr_resp_accept <= 1'b0;
542else
543 rdmc_meta1_rbr_resp_accept <= |rdmc_resp_accept_array;
544
545
546assign rdmc_resp_rdy_valid = rdmc_resp_ready & rdmc_resp_client;
547assign resp_data_in_process = |fetch_desp_resp_valid_array;
548
549assign vaild_bit0 = &rdmc_resp_byteenable[3:0];
550assign vaild_bit1 = &rdmc_resp_byteenable[7:4];
551assign vaild_bit2 = &rdmc_resp_byteenable[11:8];
552assign vaild_bit3 = &rdmc_resp_byteenable[15:12];
553
554wire[32:0] rdmc_resp_data0 = {vaild_bits[0], rdmc_resp_data[31:0]};
555wire[32:0] rdmc_resp_data1 = {vaild_bits[1], rdmc_resp_data[63:32]};
556wire[32:0] rdmc_resp_data2 = {vaild_bits[2], rdmc_resp_data[95:64]};
557wire[32:0] rdmc_resp_data3 = {vaild_bits[3], rdmc_resp_data[127:96]};
558
559wire[15:0] cache_data_parity = {^rdmc_resp_data3[32:24],
560 ^rdmc_resp_data3[23:16],
561 ^rdmc_resp_data3[15:8],
562 ^rdmc_resp_data3[7:0],
563 ^rdmc_resp_data2[32:24],
564 ^rdmc_resp_data2[23:16],
565 ^rdmc_resp_data2[15:8],
566 ^rdmc_resp_data2[7:0],
567 ^rdmc_resp_data1[32:24],
568 ^rdmc_resp_data1[23:16],
569 ^rdmc_resp_data1[15:8],
570 ^rdmc_resp_data1[7:0],
571 ^rdmc_resp_data0[32:24],
572 ^rdmc_resp_data0[23:16],
573 ^rdmc_resp_data0[15:8],
574 ^rdmc_resp_data0[7:0]};
575
576always @ (posedge clk)
577if (reset)
578 cache_wr_data <= 148'b0;
579else
580 cache_wr_data <= {cache_data_parity, vaild_bits[3:0], rdmc_resp_data[127:0]};
581
582
583endmodule
584
585
586
587
588
589