Commit | Line | Data |
---|---|---|
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 | ||
35 | module 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); | |
53 | wire siclk; | |
54 | wire soclk; | |
55 | wire l1clk; | |
56 | wire [31:0] i_wr_data_ff0_scanin; | |
57 | wire [31:0] i_wr_data_ff0_scanout; | |
58 | wire [63:0] wr_data_ff; | |
59 | wire [3:0] i_wr_addr_ff_scanin; | |
60 | wire [3:0] i_wr_addr_ff_scanout; | |
61 | wire [3:0] wr_addr_ff; | |
62 | wire [1:0] i_wr_en_ff_scanin; | |
63 | wire [1:0] i_wr_en_ff_scanout; | |
64 | wire [1:0] wr_enable_ff; | |
65 | wire [4:0] i_rd_ff_scanin; | |
66 | wire [4:0] i_rd_ff_scanout; | |
67 | wire l1clk_free; | |
68 | wire [3:0] rd_addr_ff; | |
69 | wire rd_enable_ff; | |
70 | wire [4:0] rd_lat_l_unused; | |
71 | wire [4:0] rd_dout_l_unused; | |
72 | wire [4:0] rd_dout_unused; | |
73 | wire [31:0] i_wr_data_ff1_scanin; | |
74 | wire [31:0] i_wr_data_ff1_scanout; | |
75 | ||
76 | ||
77 | input l2clk; | |
78 | input scan_in; | |
79 | input pce; | |
80 | input tcu_pce_ov; | |
81 | ||
82 | input tcu_array_wr_inhibit; | |
83 | input tcu_se_scancollar_in; | |
84 | input tcu_scan_en; | |
85 | input tcu_aclk; | |
86 | input tcu_bclk; | |
87 | input clken; | |
88 | input [3:0] rd_addr; | |
89 | input rd_enable; | |
90 | input [3:0] wr_addr; | |
91 | input [63:0] wr_data; | |
92 | input [1:0] wr_enable; | |
93 | ||
94 | output [127:0] arf_rd_data; | |
95 | ||
96 | output scan_out; | |
97 | ||
98 | ||
99 | ||
100 | assign siclk = tcu_aclk; | |
101 | assign soclk = tcu_bclk; | |
102 | ||
103 | ||
104 | n2_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 | ||
114 | n2_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 | ||
124 | n2_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 | ||
134 | n2_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 | ||
144 | n2_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 | ||
158 | n2_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 | |
171 | n2_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 | ||
180 | lib_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 | ||
192 | lib_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 | ||
206 | supply0 vss; | |
207 | supply1 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 | |
221 | assign i_wr_data_ff0_scanin[0]=scan_in; | |
222 | assign i_wr_data_ff0_scanin[1]=i_wr_data_ff0_scanout[0]; | |
223 | assign i_wr_data_ff0_scanin[2]=i_wr_data_ff0_scanout[1]; | |
224 | assign i_wr_data_ff0_scanin[3]=i_wr_data_ff0_scanout[2]; | |
225 | assign i_wr_data_ff0_scanin[4]=i_wr_data_ff0_scanout[3]; | |
226 | assign i_wr_data_ff0_scanin[5]=i_wr_data_ff0_scanout[4]; | |
227 | assign i_wr_data_ff0_scanin[6]=i_wr_data_ff0_scanout[5]; | |
228 | assign i_wr_data_ff0_scanin[7]=i_wr_data_ff0_scanout[6]; | |
229 | assign i_wr_data_ff0_scanin[8]=i_wr_data_ff0_scanout[7]; | |
230 | assign i_wr_data_ff0_scanin[9]=i_wr_data_ff0_scanout[8]; | |
231 | assign i_wr_data_ff0_scanin[10]=i_wr_data_ff0_scanout[9]; | |
232 | assign i_wr_data_ff0_scanin[11]=i_wr_data_ff0_scanout[10]; | |
233 | assign i_wr_data_ff0_scanin[12]=i_wr_data_ff0_scanout[11]; | |
234 | assign i_wr_data_ff0_scanin[13]=i_wr_data_ff0_scanout[12]; | |
235 | assign i_wr_data_ff0_scanin[14]=i_wr_data_ff0_scanout[13]; | |
236 | assign i_wr_data_ff0_scanin[15]=i_wr_data_ff0_scanout[14]; | |
237 | assign i_wr_data_ff0_scanin[16]=i_wr_data_ff0_scanout[15]; | |
238 | assign i_wr_data_ff0_scanin[17]=i_wr_data_ff0_scanout[16]; | |
239 | assign i_wr_data_ff0_scanin[18]=i_wr_data_ff0_scanout[17]; | |
240 | assign i_wr_data_ff0_scanin[19]=i_wr_data_ff0_scanout[18]; | |
241 | assign i_wr_data_ff0_scanin[20]=i_wr_data_ff0_scanout[19]; | |
242 | assign i_wr_data_ff0_scanin[21]=i_wr_data_ff0_scanout[20]; | |
243 | assign i_wr_data_ff0_scanin[22]=i_wr_data_ff0_scanout[21]; | |
244 | assign i_wr_data_ff0_scanin[23]=i_wr_data_ff0_scanout[22]; | |
245 | assign i_wr_data_ff0_scanin[24]=i_wr_data_ff0_scanout[23]; | |
246 | assign i_wr_data_ff0_scanin[25]=i_wr_data_ff0_scanout[24]; | |
247 | assign i_wr_data_ff0_scanin[26]=i_wr_data_ff0_scanout[25]; | |
248 | assign i_wr_data_ff0_scanin[27]=i_wr_data_ff0_scanout[26]; | |
249 | assign i_wr_data_ff0_scanin[28]=i_wr_data_ff0_scanout[27]; | |
250 | assign i_wr_data_ff0_scanin[29]=i_wr_data_ff0_scanout[28]; | |
251 | assign i_wr_data_ff0_scanin[30]=i_wr_data_ff0_scanout[29]; | |
252 | assign i_wr_data_ff0_scanin[31]=i_wr_data_ff0_scanout[30]; | |
253 | assign i_wr_addr_ff_scanin[0]=i_wr_data_ff0_scanout[31]; | |
254 | assign i_wr_addr_ff_scanin[1]=i_wr_addr_ff_scanout[0]; | |
255 | assign i_wr_addr_ff_scanin[2]=i_wr_addr_ff_scanout[1]; | |
256 | assign i_wr_addr_ff_scanin[3]=i_wr_addr_ff_scanout[2]; | |
257 | assign i_wr_en_ff_scanin[0]=i_wr_addr_ff_scanout[3]; | |
258 | assign i_wr_en_ff_scanin[1]=i_wr_en_ff_scanout[0]; | |
259 | assign i_rd_ff_scanin[0]=i_wr_en_ff_scanout[1]; | |
260 | assign i_rd_ff_scanin[1]=i_rd_ff_scanout[0]; | |
261 | assign i_rd_ff_scanin[2]=i_rd_ff_scanout[1]; | |
262 | assign i_rd_ff_scanin[3]=i_rd_ff_scanout[2]; | |
263 | assign i_rd_ff_scanin[4]=i_rd_ff_scanout[3]; | |
264 | assign i_wr_data_ff1_scanin[0]=i_rd_ff_scanout[4]; | |
265 | assign i_wr_data_ff1_scanin[1]=i_wr_data_ff1_scanout[0]; | |
266 | assign i_wr_data_ff1_scanin[2]=i_wr_data_ff1_scanout[1]; | |
267 | assign i_wr_data_ff1_scanin[3]=i_wr_data_ff1_scanout[2]; | |
268 | assign i_wr_data_ff1_scanin[4]=i_wr_data_ff1_scanout[3]; | |
269 | assign i_wr_data_ff1_scanin[5]=i_wr_data_ff1_scanout[4]; | |
270 | assign i_wr_data_ff1_scanin[6]=i_wr_data_ff1_scanout[5]; | |
271 | assign i_wr_data_ff1_scanin[7]=i_wr_data_ff1_scanout[6]; | |
272 | assign i_wr_data_ff1_scanin[8]=i_wr_data_ff1_scanout[7]; | |
273 | assign i_wr_data_ff1_scanin[9]=i_wr_data_ff1_scanout[8]; | |
274 | assign i_wr_data_ff1_scanin[10]=i_wr_data_ff1_scanout[9]; | |
275 | assign i_wr_data_ff1_scanin[11]=i_wr_data_ff1_scanout[10]; | |
276 | assign i_wr_data_ff1_scanin[12]=i_wr_data_ff1_scanout[11]; | |
277 | assign i_wr_data_ff1_scanin[13]=i_wr_data_ff1_scanout[12]; | |
278 | assign i_wr_data_ff1_scanin[14]=i_wr_data_ff1_scanout[13]; | |
279 | assign i_wr_data_ff1_scanin[15]=i_wr_data_ff1_scanout[14]; | |
280 | assign i_wr_data_ff1_scanin[16]=i_wr_data_ff1_scanout[15]; | |
281 | assign i_wr_data_ff1_scanin[17]=i_wr_data_ff1_scanout[16]; | |
282 | assign i_wr_data_ff1_scanin[18]=i_wr_data_ff1_scanout[17]; | |
283 | assign i_wr_data_ff1_scanin[19]=i_wr_data_ff1_scanout[18]; | |
284 | assign i_wr_data_ff1_scanin[20]=i_wr_data_ff1_scanout[19]; | |
285 | assign i_wr_data_ff1_scanin[21]=i_wr_data_ff1_scanout[20]; | |
286 | assign i_wr_data_ff1_scanin[22]=i_wr_data_ff1_scanout[21]; | |
287 | assign i_wr_data_ff1_scanin[23]=i_wr_data_ff1_scanout[22]; | |
288 | assign i_wr_data_ff1_scanin[24]=i_wr_data_ff1_scanout[23]; | |
289 | assign i_wr_data_ff1_scanin[25]=i_wr_data_ff1_scanout[24]; | |
290 | assign i_wr_data_ff1_scanin[26]=i_wr_data_ff1_scanout[25]; | |
291 | assign i_wr_data_ff1_scanin[27]=i_wr_data_ff1_scanout[26]; | |
292 | assign i_wr_data_ff1_scanin[28]=i_wr_data_ff1_scanout[27]; | |
293 | assign i_wr_data_ff1_scanin[29]=i_wr_data_ff1_scanout[28]; | |
294 | assign i_wr_data_ff1_scanin[30]=i_wr_data_ff1_scanout[29]; | |
295 | assign i_wr_data_ff1_scanin[31]=i_wr_data_ff1_scanout[30]; | |
296 | assign scan_out=i_wr_data_ff1_scanout[31]; | |
297 | // fixscan end | |
298 | endmodule | |
299 | ||
300 | ||
301 | ||
302 | ||
303 | ||
304 | ||
305 | // any PARAMS parms go into naming of macro | |
306 | ||
307 | module 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 | ||
327 | cl_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 | ||
340 | endmodule | |
341 | ||
342 | ||
343 | ||
344 | ||
345 | ||
346 | ||
347 | ||
348 | ||
349 | ||
350 | ||
351 | ||
352 | ||
353 | ||
354 | // any PARAMS parms go into naming of macro | |
355 | ||
356 | module 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); | |
364 | wire [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; | |
376 | assign fdin[31:0] = din[31:0]; | |
377 | ||
378 | ||
379 | ||
380 | ||
381 | ||
382 | ||
383 | dff #(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 | ||
404 | endmodule | |
405 | ||
406 | ||
407 | ||
408 | ||
409 | ||
410 | ||
411 | ||
412 | ||
413 | ||
414 | ||
415 | ||
416 | ||
417 | ||
418 | // any PARAMS parms go into naming of macro | |
419 | ||
420 | module 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); | |
428 | wire [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; | |
440 | assign fdin[3:0] = din[3:0]; | |
441 | ||
442 | ||
443 | ||
444 | ||
445 | ||
446 | ||
447 | dff #(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 | ||
468 | endmodule | |
469 | ||
470 | ||
471 | ||
472 | ||
473 | ||
474 | ||
475 | ||
476 | ||
477 | ||
478 | ||
479 | ||
480 | ||
481 | ||
482 | // any PARAMS parms go into naming of macro | |
483 | ||
484 | module 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); | |
492 | wire [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; | |
504 | assign fdin[1:0] = din[1:0]; | |
505 | ||
506 | ||
507 | ||
508 | ||
509 | ||
510 | ||
511 | dff #(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 | ||
532 | endmodule | |
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 | ||
551 | module 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); | |
563 | input [4:0] d; | |
564 | input [4:0] scan_in; | |
565 | input l1clk; | |
566 | input and_clk; | |
567 | input siclk; | |
568 | input soclk; | |
569 | output [4:0] mq; | |
570 | output [4:0] mq_l; | |
571 | output [4:0] scan_out; | |
572 | output [4:0] q; | |
573 | output [4:0] q_l; | |
574 | ||
575 | ||
576 | ||
577 | ||
578 | ||
579 | ||
580 | new_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 | ||
605 | endmodule | |
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 | ||
633 | module 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); | |
642 | wire rd_enable; | |
643 | wire wr_enable; | |
644 | wire rd_eq_wr; | |
645 | ||
646 | ||
647 | input clk; | |
648 | input tcu_array_wr_inhibit; | |
649 | input [3:0] rd_addr; | |
650 | input rd_en; | |
651 | input wr_en; | |
652 | input [3:0] wr_addr; | |
653 | ||
654 | input [63:0] din; | |
655 | output [63:0] dout; | |
656 | ||
657 | ||
658 | reg [63:0] mem[15:0]; | |
659 | reg [63:0] local_dout; | |
660 | ||
661 | `ifndef NOINITMEM | |
662 | integer i; | |
663 | initial 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}}; | |
668 | end | |
669 | `endif | |
670 | ||
671 | ||
672 | assign rd_enable = rd_en & ~tcu_array_wr_inhibit; | |
673 | assign wr_enable = wr_en & ~tcu_array_wr_inhibit; | |
674 | assign rd_eq_wr = wr_en & (rd_addr[3:0] == wr_addr[3:0]); | |
675 | ||
676 | ////////////////////// | |
677 | // Read/write array | |
678 | ////////////////////// | |
679 | ||
680 | always @ (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 | |
691 | end // ALWAYS | |
692 | ||
693 | ||
694 | ||
695 | always @ (negedge clk) begin | |
696 | ||
697 | if (wr_enable) begin | |
698 | mem[wr_addr] <= din; | |
699 | ||
700 | ||
701 | ||
702 | end | |
703 | ||
704 | end // NEGEDGE ALWAYS | |
705 | ||
706 | ||
707 | assign dout[63:0] = local_dout[63:0]; | |
708 | ||
709 | supply0 vss; | |
710 | supply1 vdd; | |
711 | endmodule | |
712 |