Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / libs / n2sram / mp / n2_mam_mp_160x66_cust_l / n2_mam_mp_160x66_cust / rtl / n2_arf_dp_16x128_cust.v
CommitLineData
86530b38
AT
1
2////////////////////////////////////////////////////////////////////////////////
3// $Id: n2_arf_dp_16x128_cust.v,v 1.1.1.1 2007/02/13 22:19:31 drp Exp $
4//
5// Copyright (C) 2003 by Sun Microsystems, Inc.
6//
7// All rights reserved. No part of this design may be reproduced,
8// stored in a retrieval system, or transmitted, in any form or by
9// any means, electronic, mechanical, photocopying, recording, or
10// otherwise, without prior written permission of Sun Microsystems,
11// Inc.
12//
13// Sun Proprietary/Confidential
14//
15// Description: SPU AES Key Register File
16// - 16 entry, 128-bit with a two bit interleave
17// - 1 Read
18// - 1 Write
19// + no write bypassing necessary (internal or external)
20// + 64-bit writeable with 64-bit write data
21// - Logically holds up to 60 32-bit keys
22//
23//
24// The 128-bits are interleaved in such a way so the output
25// will match the 64-bit datapath below.
26//
27// Datapath -> 63 62 1 0
28// Array -> [127],[63] [126],[62] ... [65],[1] [64],[0]
29//
30//
31// Primary Contact: christopher.olson@sun.com
32////////////////////////////////////////////////////////////////////////////////
33
34
35module n2_arf_dp_16x128_cust (
36 l2clk,
37 scan_in,
38 pce,
39 tcu_pce_ov,
40 tcu_array_wr_inhibit,
41 tcu_se_scancollar_in,
42 tcu_scan_en,
43 tcu_aclk,
44 tcu_bclk,
45 clken,
46 rd_addr,
47 rd_enable,
48 wr_addr,
49 wr_data,
50 wr_enable,
51 arf_rd_data,
52 scan_out);
53wire siclk;
54wire soclk;
55wire l1clk;
56wire [31:0] i_wr_data_ff0_scanin;
57wire [31:0] i_wr_data_ff0_scanout;
58wire [63:0] wr_data_ff;
59wire [3:0] i_wr_addr_ff_scanin;
60wire [3:0] i_wr_addr_ff_scanout;
61wire [3:0] wr_addr_ff;
62wire [1:0] i_wr_en_ff_scanin;
63wire [1:0] i_wr_en_ff_scanout;
64wire [1:0] wr_enable_ff;
65wire [4:0] i_rd_ff_scanin;
66wire [4:0] i_rd_ff_scanout;
67wire l1clk_free;
68wire [3:0] rd_addr_ff;
69wire rd_enable_ff;
70wire [4:0] rd_lat_l_unused;
71wire [4:0] rd_dout_l_unused;
72wire [4:0] rd_dout_unused;
73wire [31:0] i_wr_data_ff1_scanin;
74wire [31:0] i_wr_data_ff1_scanout;
75
76
77input l2clk;
78input scan_in;
79input pce;
80input tcu_pce_ov;
81
82input tcu_array_wr_inhibit;
83input tcu_se_scancollar_in;
84input tcu_scan_en;
85input tcu_aclk;
86input tcu_bclk;
87input clken;
88input [3:0] rd_addr;
89input rd_enable;
90input [3:0] wr_addr;
91input [63:0] wr_data;
92input [1:0] wr_enable;
93
94output [127:0] arf_rd_data;
95
96output scan_out;
97
98
99
100assign siclk = tcu_aclk;
101assign soclk = tcu_bclk;
102
103
104n2_arf_dp_16x128_cust_l1clkhdr_ctl_macro clkgen (
105 .l2clk (l2clk ),
106 .l1en (clken ),
107 .pce_ov (tcu_pce_ov ),
108 .stop (1'b0 ),
109 .se (tcu_se_scancollar_in ),
110 .l1clk (l1clk ));
111
112
113
114n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_32 i_wr_data_ff0 (
115 .scan_in(i_wr_data_ff0_scanin[31:0]),
116 .scan_out(i_wr_data_ff0_scanout[31:0]),
117 .l1clk( l1clk ),
118 .din ( wr_data[31:0] ),
119 .dout ( wr_data_ff[31:0] ),
120 .siclk(siclk),
121 .soclk(soclk));
122
123
124n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_4 i_wr_addr_ff (
125 .scan_in(i_wr_addr_ff_scanin[3:0]),
126 .scan_out(i_wr_addr_ff_scanout[3:0]),
127 .l1clk( l1clk ),
128 .din ( wr_addr[3:0] ),
129 .dout ( wr_addr_ff[3:0] ),
130 .siclk(siclk),
131 .soclk(soclk));
132
133
134n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_2 i_wr_en_ff (
135 .scan_in(i_wr_en_ff_scanin[1:0]),
136 .scan_out(i_wr_en_ff_scanout[1:0]),
137 .l1clk( l1clk ),
138 .din ( wr_enable[1:0] ),
139 .dout ( wr_enable_ff[1:0] ),
140 .siclk(siclk),
141 .soclk(soclk));
142
143
144n2_arf_dp_16x128_cust_sram_msff_mo_macro__fs_1__scanreverse_1__width_5 i_rd_ff (
145 .scan_in(i_rd_ff_scanin[4:0]),
146 .scan_out(i_rd_ff_scanout[4:0]),
147 .l1clk ( l1clk ),
148 .and_clk ( l1clk_free ),
149 .d ({rd_addr[3:0] , rd_enable} ),
150 .mq ({rd_addr_ff[3:0] , rd_enable_ff} ),
151 .mq_l ( rd_lat_l_unused[4:0] ),
152 .q_l ( rd_dout_l_unused[4:0] ),
153 .q ( rd_dout_unused[4:0] ),
154 .siclk(siclk),
155 .soclk(soclk));
156
157
158n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_32 i_wr_data_ff1 (
159 .scan_in(i_wr_data_ff1_scanin[31:0]),
160 .scan_out(i_wr_data_ff1_scanout[31:0]),
161 .l1clk( l1clk ),
162 .din ( wr_data[63:32] ),
163 .dout ( wr_data_ff[63:32] ),
164 .siclk(siclk),
165 .soclk(soclk));
166
167
168
169
170// L2 clock "free-running" clock
171n2_arf_dp_16x128_cust_l1clkhdr_ctl_macro clkgen_free (
172 .l2clk (l2clk ),
173 .l1en (pce ),
174 .pce_ov (tcu_pce_ov ),
175 .stop (1'b0 ),
176 .se (tcu_scan_en ),
177 .l1clk (l1clk_free ));
178
179
180lib_16x64b_1r1w_array arf_array0 (
181 .clk ( l1clk_free ),
182 .rd_addr ( rd_addr_ff[3:0] ),
183 .rd_en ( rd_enable_ff ),
184 .wr_addr ( wr_addr_ff[3:0] ),
185 .wr_en ( wr_enable_ff[0] ),
186 .din ( wr_data_ff[63:0] ),
187 .dout ( arf_rd_data[63:0] ),
188 .tcu_array_wr_inhibit(tcu_array_wr_inhibit));
189
190
191
192lib_16x64b_1r1w_array arf_array1 (
193 .clk ( l1clk_free ),
194 .rd_addr ( rd_addr_ff[3:0] ),
195 .rd_en ( rd_enable_ff ),
196 .wr_addr ( wr_addr_ff[3:0] ),
197 .wr_en ( wr_enable_ff[1] ),
198 .din ( wr_data_ff[63:0] ),
199 .dout ( arf_rd_data[127:64] ),
200 .tcu_array_wr_inhibit(tcu_array_wr_inhibit));
201
202
203
204
205
206supply0 vss;
207supply1 vdd;
208
209
210
211
212
213// scanorder start
214// i_wr_data_ff0_scanin[0:31]
215// i_wr_addr_ff_scanin[0:3]
216// i_wr_en_ff_scanin[0:1]
217// i_rd_ff_scanin[0:4]
218// i_wr_data_ff1_scanin[0:31]
219// scanorder end
220// fixscan start
221assign i_wr_data_ff0_scanin[0]=scan_in;
222assign i_wr_data_ff0_scanin[1]=i_wr_data_ff0_scanout[0];
223assign i_wr_data_ff0_scanin[2]=i_wr_data_ff0_scanout[1];
224assign i_wr_data_ff0_scanin[3]=i_wr_data_ff0_scanout[2];
225assign i_wr_data_ff0_scanin[4]=i_wr_data_ff0_scanout[3];
226assign i_wr_data_ff0_scanin[5]=i_wr_data_ff0_scanout[4];
227assign i_wr_data_ff0_scanin[6]=i_wr_data_ff0_scanout[5];
228assign i_wr_data_ff0_scanin[7]=i_wr_data_ff0_scanout[6];
229assign i_wr_data_ff0_scanin[8]=i_wr_data_ff0_scanout[7];
230assign i_wr_data_ff0_scanin[9]=i_wr_data_ff0_scanout[8];
231assign i_wr_data_ff0_scanin[10]=i_wr_data_ff0_scanout[9];
232assign i_wr_data_ff0_scanin[11]=i_wr_data_ff0_scanout[10];
233assign i_wr_data_ff0_scanin[12]=i_wr_data_ff0_scanout[11];
234assign i_wr_data_ff0_scanin[13]=i_wr_data_ff0_scanout[12];
235assign i_wr_data_ff0_scanin[14]=i_wr_data_ff0_scanout[13];
236assign i_wr_data_ff0_scanin[15]=i_wr_data_ff0_scanout[14];
237assign i_wr_data_ff0_scanin[16]=i_wr_data_ff0_scanout[15];
238assign i_wr_data_ff0_scanin[17]=i_wr_data_ff0_scanout[16];
239assign i_wr_data_ff0_scanin[18]=i_wr_data_ff0_scanout[17];
240assign i_wr_data_ff0_scanin[19]=i_wr_data_ff0_scanout[18];
241assign i_wr_data_ff0_scanin[20]=i_wr_data_ff0_scanout[19];
242assign i_wr_data_ff0_scanin[21]=i_wr_data_ff0_scanout[20];
243assign i_wr_data_ff0_scanin[22]=i_wr_data_ff0_scanout[21];
244assign i_wr_data_ff0_scanin[23]=i_wr_data_ff0_scanout[22];
245assign i_wr_data_ff0_scanin[24]=i_wr_data_ff0_scanout[23];
246assign i_wr_data_ff0_scanin[25]=i_wr_data_ff0_scanout[24];
247assign i_wr_data_ff0_scanin[26]=i_wr_data_ff0_scanout[25];
248assign i_wr_data_ff0_scanin[27]=i_wr_data_ff0_scanout[26];
249assign i_wr_data_ff0_scanin[28]=i_wr_data_ff0_scanout[27];
250assign i_wr_data_ff0_scanin[29]=i_wr_data_ff0_scanout[28];
251assign i_wr_data_ff0_scanin[30]=i_wr_data_ff0_scanout[29];
252assign i_wr_data_ff0_scanin[31]=i_wr_data_ff0_scanout[30];
253assign i_wr_addr_ff_scanin[0]=i_wr_data_ff0_scanout[31];
254assign i_wr_addr_ff_scanin[1]=i_wr_addr_ff_scanout[0];
255assign i_wr_addr_ff_scanin[2]=i_wr_addr_ff_scanout[1];
256assign i_wr_addr_ff_scanin[3]=i_wr_addr_ff_scanout[2];
257assign i_wr_en_ff_scanin[0]=i_wr_addr_ff_scanout[3];
258assign i_wr_en_ff_scanin[1]=i_wr_en_ff_scanout[0];
259assign i_rd_ff_scanin[0]=i_wr_en_ff_scanout[1];
260assign i_rd_ff_scanin[1]=i_rd_ff_scanout[0];
261assign i_rd_ff_scanin[2]=i_rd_ff_scanout[1];
262assign i_rd_ff_scanin[3]=i_rd_ff_scanout[2];
263assign i_rd_ff_scanin[4]=i_rd_ff_scanout[3];
264assign i_wr_data_ff1_scanin[0]=i_rd_ff_scanout[4];
265assign i_wr_data_ff1_scanin[1]=i_wr_data_ff1_scanout[0];
266assign i_wr_data_ff1_scanin[2]=i_wr_data_ff1_scanout[1];
267assign i_wr_data_ff1_scanin[3]=i_wr_data_ff1_scanout[2];
268assign i_wr_data_ff1_scanin[4]=i_wr_data_ff1_scanout[3];
269assign i_wr_data_ff1_scanin[5]=i_wr_data_ff1_scanout[4];
270assign i_wr_data_ff1_scanin[6]=i_wr_data_ff1_scanout[5];
271assign i_wr_data_ff1_scanin[7]=i_wr_data_ff1_scanout[6];
272assign i_wr_data_ff1_scanin[8]=i_wr_data_ff1_scanout[7];
273assign i_wr_data_ff1_scanin[9]=i_wr_data_ff1_scanout[8];
274assign i_wr_data_ff1_scanin[10]=i_wr_data_ff1_scanout[9];
275assign i_wr_data_ff1_scanin[11]=i_wr_data_ff1_scanout[10];
276assign i_wr_data_ff1_scanin[12]=i_wr_data_ff1_scanout[11];
277assign i_wr_data_ff1_scanin[13]=i_wr_data_ff1_scanout[12];
278assign i_wr_data_ff1_scanin[14]=i_wr_data_ff1_scanout[13];
279assign i_wr_data_ff1_scanin[15]=i_wr_data_ff1_scanout[14];
280assign i_wr_data_ff1_scanin[16]=i_wr_data_ff1_scanout[15];
281assign i_wr_data_ff1_scanin[17]=i_wr_data_ff1_scanout[16];
282assign i_wr_data_ff1_scanin[18]=i_wr_data_ff1_scanout[17];
283assign i_wr_data_ff1_scanin[19]=i_wr_data_ff1_scanout[18];
284assign i_wr_data_ff1_scanin[20]=i_wr_data_ff1_scanout[19];
285assign i_wr_data_ff1_scanin[21]=i_wr_data_ff1_scanout[20];
286assign i_wr_data_ff1_scanin[22]=i_wr_data_ff1_scanout[21];
287assign i_wr_data_ff1_scanin[23]=i_wr_data_ff1_scanout[22];
288assign i_wr_data_ff1_scanin[24]=i_wr_data_ff1_scanout[23];
289assign i_wr_data_ff1_scanin[25]=i_wr_data_ff1_scanout[24];
290assign i_wr_data_ff1_scanin[26]=i_wr_data_ff1_scanout[25];
291assign i_wr_data_ff1_scanin[27]=i_wr_data_ff1_scanout[26];
292assign i_wr_data_ff1_scanin[28]=i_wr_data_ff1_scanout[27];
293assign i_wr_data_ff1_scanin[29]=i_wr_data_ff1_scanout[28];
294assign i_wr_data_ff1_scanin[30]=i_wr_data_ff1_scanout[29];
295assign i_wr_data_ff1_scanin[31]=i_wr_data_ff1_scanout[30];
296assign scan_out=i_wr_data_ff1_scanout[31];
297// fixscan end
298endmodule
299
300
301
302
303
304
305// any PARAMS parms go into naming of macro
306
307module n2_arf_dp_16x128_cust_l1clkhdr_ctl_macro (
308 l2clk,
309 l1en,
310 pce_ov,
311 stop,
312 se,
313 l1clk);
314
315
316 input l2clk;
317 input l1en;
318 input pce_ov;
319 input stop;
320 input se;
321 output l1clk;
322
323
324
325
326
327cl_sc1_l1hdr_8x c_0 (
328
329
330 .l2clk(l2clk),
331 .pce(l1en),
332 .l1clk(l1clk),
333 .se(se),
334 .pce_ov(pce_ov),
335 .stop(stop)
336);
337
338
339
340endmodule
341
342
343
344
345
346
347
348
349
350
351
352
353
354// any PARAMS parms go into naming of macro
355
356module n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_32 (
357 din,
358 l1clk,
359 scan_in,
360 siclk,
361 soclk,
362 dout,
363 scan_out);
364wire [31:0] fdin;
365
366 input [31:0] din;
367 input l1clk;
368 input [31:0] scan_in;
369
370
371 input siclk;
372 input soclk;
373
374 output [31:0] dout;
375 output [31:0] scan_out;
376assign fdin[31:0] = din[31:0];
377
378
379
380
381
382
383dff #(32) d0_0 (
384.l1clk(l1clk),
385.siclk(siclk),
386.soclk(soclk),
387.d(fdin[31:0]),
388.si(scan_in[31:0]),
389.so(scan_out[31:0]),
390.q(dout[31:0])
391);
392
393
394
395
396
397
398
399
400
401
402
403
404endmodule
405
406
407
408
409
410
411
412
413
414
415
416
417
418// any PARAMS parms go into naming of macro
419
420module n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_4 (
421 din,
422 l1clk,
423 scan_in,
424 siclk,
425 soclk,
426 dout,
427 scan_out);
428wire [3:0] fdin;
429
430 input [3:0] din;
431 input l1clk;
432 input [3:0] scan_in;
433
434
435 input siclk;
436 input soclk;
437
438 output [3:0] dout;
439 output [3:0] scan_out;
440assign fdin[3:0] = din[3:0];
441
442
443
444
445
446
447dff #(4) d0_0 (
448.l1clk(l1clk),
449.siclk(siclk),
450.soclk(soclk),
451.d(fdin[3:0]),
452.si(scan_in[3:0]),
453.so(scan_out[3:0]),
454.q(dout[3:0])
455);
456
457
458
459
460
461
462
463
464
465
466
467
468endmodule
469
470
471
472
473
474
475
476
477
478
479
480
481
482// any PARAMS parms go into naming of macro
483
484module n2_arf_dp_16x128_cust_msff_ctl_macro__fs_1__scanreverse_1__width_2 (
485 din,
486 l1clk,
487 scan_in,
488 siclk,
489 soclk,
490 dout,
491 scan_out);
492wire [1:0] fdin;
493
494 input [1:0] din;
495 input l1clk;
496 input [1:0] scan_in;
497
498
499 input siclk;
500 input soclk;
501
502 output [1:0] dout;
503 output [1:0] scan_out;
504assign fdin[1:0] = din[1:0];
505
506
507
508
509
510
511dff #(2) d0_0 (
512.l1clk(l1clk),
513.siclk(siclk),
514.soclk(soclk),
515.d(fdin[1:0]),
516.si(scan_in[1:0]),
517.so(scan_out[1:0]),
518.q(dout[1:0])
519);
520
521
522
523
524
525
526
527
528
529
530
531
532endmodule
533
534
535
536
537
538
539
540
541
542//
543// macro for cl_mc1_sram_msff_mo_{16,8,4}x flops
544//
545//
546
547
548
549
550
551module n2_arf_dp_16x128_cust_sram_msff_mo_macro__fs_1__scanreverse_1__width_5 (
552 d,
553 scan_in,
554 l1clk,
555 and_clk,
556 siclk,
557 soclk,
558 mq,
559 mq_l,
560 scan_out,
561 q,
562 q_l);
563input [4:0] d;
564 input [4:0] scan_in;
565input l1clk;
566input and_clk;
567input siclk;
568input soclk;
569output [4:0] mq;
570output [4:0] mq_l;
571 output [4:0] scan_out;
572output [4:0] q;
573output [4:0] q_l;
574
575
576
577
578
579
580new_dlata #(5) d0_0 (
581.d(d[4:0]),
582.si(scan_in[4:0]),
583.so(scan_out[4:0]),
584.l1clk(l1clk),
585.and_clk(and_clk),
586.siclk(siclk),
587.soclk(soclk),
588.q(q[4:0]),
589.q_l(q_l[4:0]),
590.mq(mq[4:0]),
591.mq_l(mq_l[4:0])
592);
593
594
595
596
597
598
599
600
601
602
603//place::generic_place($width,$stack,$left);
604
605endmodule
606
607
608
609
610
611////////////////////////////////////////////////////////////////////////////////
612// $Id: n2_arf_dp_16x128_cust.v,v 1.1.1.1 2007/02/13 22:19:31 drp Exp $
613//
614// Copyright (C) 2003 by Sun Microsystems, Inc.
615//
616// All rights reserved. No part of this design may be reproduced,
617// stored in a retrieval system, or transmitted, in any form or by
618// any means, electronic, mechanical, photocopying, recording, or
619// otherwise, without prior written permission of Sun Microsystems,
620// Inc.
621//
622// Sun Proprietary/Confidential
623//
624// Description: 16 x 64 dual port array
625// read produces X's on read/write collision
626//
627// To produce a debussy dump of memory contents,
628// add -vcs_run_args=+DUMPMEM_16x64 to sims command line
629//
630// Primary Contact: Chris Olson
631////////////////////////////////////////////////////////////////////////////////
632
633module lib_16x64b_1r1w_array (
634 clk,
635 tcu_array_wr_inhibit,
636 rd_addr,
637 rd_en,
638 wr_en,
639 wr_addr,
640 din,
641 dout);
642wire rd_enable;
643wire wr_enable;
644wire rd_eq_wr;
645
646
647input clk;
648input tcu_array_wr_inhibit;
649input [3:0] rd_addr;
650input rd_en;
651input wr_en;
652input [3:0] wr_addr;
653
654input [63:0] din;
655output [63:0] dout;
656
657
658reg [63:0] mem[15:0];
659reg [63:0] local_dout;
660
661`ifndef NOINITMEM
662integer i;
663initial begin
664 for (i=0; i<16; i=i+1) begin
665 mem[i] = {64{1'b0}};
666 end
667 local_dout = {64{1'b0}};
668end
669`endif
670
671
672assign rd_enable = rd_en & ~tcu_array_wr_inhibit;
673assign wr_enable = wr_en & ~tcu_array_wr_inhibit;
674assign rd_eq_wr = wr_en & (rd_addr[3:0] == wr_addr[3:0]);
675
676//////////////////////
677// Read/write array
678//////////////////////
679
680always @ (clk or rd_enable or rd_addr or rd_eq_wr) begin
681 if (clk) begin
682
683 if (rd_enable)
684 begin
685 if(rd_eq_wr) local_dout[63:0] <= {64{1'bx}}; // Read = Write conflict
686 else local_dout[63:0] <= mem[rd_addr]; // Normal Read
687 end
688 else local_dout[63:0] <= {64{1'b0}}; // Precharge
689
690 end // CLK
691end // ALWAYS
692
693
694
695always @ (negedge clk) begin
696
697 if (wr_enable) begin
698 mem[wr_addr] <= din;
699
700
701
702 end
703
704end // NEGEDGE ALWAYS
705
706
707assign dout[63:0] = local_dout[63:0];
708
709supply0 vss;
710supply1 vdd;
711endmodule
712