Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / libs / n2sram / mp / n2_frf_mp_256x78_cust_l / n2_frf_mp_256x78_cust / rtl / n2_frf_mp_256x78_cust.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: n2_frf_mp_256x78_cust.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 n2_frf_mp_256x78_cust (
36 frf_r1_data,
37 frf_r1_ecc,
38 frf_r2_data,
39 frf_r2_ecc,
40 l2clk,
41 scan_in,
42 pce,
43 tcu_pce_ov,
44 tcu_aclk,
45 tcu_bclk,
46 tcu_array_wr_inhibit,
47 tcu_scan_en,
48 tcu_se_scancollar_in,
49 main_clken,
50 scan_out,
51 r_tid,
52 r1_valid,
53 r1_addr,
54 r2_valid,
55 r2_addr,
56 w1_tid,
57 w1_valid,
58 w1_addr,
59 w2_tid,
60 w2_valid,
61 w2_addr,
62 w1_data,
63 w1_ecc,
64 w2_data,
65 w2_ecc);
66wire siclk;
67wire soclk;
68wire l1clk;
69wire l1clk_main;
70wire [13:0] w1_ecc_synd_fb_to_fw_scanin;
71wire [13:0] w1_ecc_synd_fb_to_fw_scanout;
72wire [13:0] w1_ecc_fw;
73wire [13:0] w2_ecc_synd_fb_to_fw_scanin;
74wire [13:0] w2_ecc_synd_fb_to_fw_scanout;
75wire [13:0] w2_ecc_fw;
76wire [14:0] frf_read_ctl_in2ph2_scanin;
77wire [14:0] frf_read_ctl_in2ph2_scanout;
78wire [4:0] r1_addr_ph2;
79wire [4:0] r2_addr_ph2;
80wire r1_valid_ph2;
81wire r2_valid_ph2;
82wire [2:0] r_tid_ph2;
83wire [63:0] fw_w2data_scanin;
84wire [63:0] fw_w2data_scanout;
85wire [63:0] w2_data_fw;
86wire [63:0] fw_w1data_scanin;
87wire [63:0] fw_w1data_scanout;
88wire [63:0] w1_data_fw;
89wire [19:0] frf_write_input_ctl_in2fb_scanin;
90wire [19:0] frf_write_input_ctl_in2fb_scanout;
91wire [2:0] w1_tid_fw;
92wire [1:0] w1_valid_fw;
93wire [4:0] w1_addr_fw;
94wire [2:0] w2_tid_fw;
95wire [1:0] w2_valid_fw;
96wire [4:0] w2_addr_fw;
97wire l1clk_free;
98
99
100 // -----------------------------------------------------------------------
101 // Read output ports
102 // -----------------------------------------------------------------------
103 output [63:0] frf_r1_data;
104 output [13:0] frf_r1_ecc;
105 output [63:0] frf_r2_data;
106 output [13:0] frf_r2_ecc;
107
108 // -----------------------------------------------------------------------
109 // global signals
110 // -----------------------------------------------------------------------
111
112 input l2clk;
113 input scan_in;
114 input pce;
115 input tcu_pce_ov;
116 input tcu_aclk;
117 input tcu_bclk;
118 input tcu_array_wr_inhibit;
119 input tcu_scan_en;
120 input tcu_se_scancollar_in;
121
122 input main_clken;
123
124 output scan_out;
125
126
127 // -----------------------------------------------------------------------
128 // Reading controls
129 // -----------------------------------------------------------------------
130 input [2:0] r_tid;
131 input r1_valid;
132 input [4:0] r1_addr;
133 input r2_valid;
134 input [4:0] r2_addr;
135
136 // -----------------------------------------------------------------------
137 // Writing controls
138 // -----------------------------------------------------------------------
139 input [2:0] w1_tid;
140 input [1:0] w1_valid;
141 input [4:0] w1_addr;
142 input [2:0] w2_tid;
143 input [1:0] w2_valid;
144 input [4:0] w2_addr;
145
146 // -----------------------------------------------------------------------
147 // Write data ports
148 // -----------------------------------------------------------------------
149 input [63:0] w1_data;
150 input [13:0] w1_ecc;
151 input [63:0] w2_data;
152 input [13:0] w2_ecc;
153
154`ifndef FPGA
155 // synopsys translate_off
156`endif
157
158 assign siclk = tcu_aclk;
159 assign soclk = tcu_bclk;
160
161 n2_frf_mp_256x78_cust_l1clkhdr_ctl_macro clkgen (
162 .l2clk (l2clk ),
163 .l1en (pce ),
164 .pce_ov (tcu_pce_ov ),
165 .stop (1'b0 ),
166 .se (tcu_se_scancollar_in ),
167 .l1clk (l1clk ));
168
169
170 n2_frf_mp_256x78_cust_l1clkhdr_ctl_macro clkgen_main (
171 .l2clk (l2clk ),
172 .l1en (main_clken ),
173 .pce_ov (tcu_pce_ov ),
174 .stop (1'b0 ),
175 .se (tcu_se_scancollar_in ),
176 .l1clk (l1clk_main ));
177
178
179
180 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_14 w1_ecc_synd_fb_to_fw (
181 .scan_in(w1_ecc_synd_fb_to_fw_scanin[13:0]),
182 .scan_out(w1_ecc_synd_fb_to_fw_scanout[13:0]),
183 .l1clk (l1clk_main),
184 .din (w1_ecc [13:0]),
185 .dout (w1_ecc_fw[13:0]),
186 .siclk(siclk),
187 .soclk(soclk));
188
189 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__scanreverse_1__width_14 w2_ecc_synd_fb_to_fw (
190 .scan_in(w2_ecc_synd_fb_to_fw_scanin[13:0]),
191 .scan_out(w2_ecc_synd_fb_to_fw_scanout[13:0]),
192 .l1clk (l1clk_main),
193 .din (w2_ecc [13:0]),
194 .dout (w2_ecc_fw[13:0]),
195 .siclk(siclk),
196 .soclk(soclk));
197
198 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_15 frf_read_ctl_in2ph2 (
199 .scan_in(frf_read_ctl_in2ph2_scanin[14:0]),
200 .scan_out(frf_read_ctl_in2ph2_scanout[14:0]),
201 .l1clk (l1clk),
202 .din ({r1_addr [4:0], // requires free running clk or dec_fgu_decode_d en
203 r2_addr [4:0], // requires free running clk or dec_fgu_decode_d en
204 r1_valid , // requires free running clk or dec_fgu_decode_d en
205 r2_valid , // requires free running clk or dec_fgu_decode_d en
206 r_tid [2:0]}), // requires free running clk or dec_fgu_decode_d en
207 .dout ({r1_addr_ph2[4:0],
208 r2_addr_ph2[4:0],
209 r1_valid_ph2 ,
210 r2_valid_ph2 ,
211 r_tid_ph2 [2:0]}),
212 .siclk(siclk),
213 .soclk(soclk));
214
215
216 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__scanreverse_1__width_64 fw_w2data (
217 .scan_in(fw_w2data_scanin[63:0]),
218 .scan_out(fw_w2data_scanout[63:0]),
219 .l1clk (l1clk_main),
220 .din (w2_data [63:0]),
221 .dout (w2_data_fw[63:0]),
222 .siclk(siclk),
223 .soclk(soclk));
224
225 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_64 fw_w1data (
226 .scan_in(fw_w1data_scanin[63:0]),
227 .scan_out(fw_w1data_scanout[63:0]),
228 .l1clk (l1clk_main),
229 .din (w1_data [63:0]),
230 .dout (w1_data_fw[63:0]),
231 .siclk(siclk),
232 .soclk(soclk));
233
234
235 n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_20 frf_write_input_ctl_in2fb (
236 .scan_in(frf_write_input_ctl_in2fb_scanin[19:0]),
237 .scan_out(frf_write_input_ctl_in2fb_scanout[19:0]),
238 .l1clk (l1clk_main),
239 .din ({w1_tid [2:0],
240 w1_valid [1:0],
241 w1_addr [4:0],
242 w2_tid [2:0],
243 w2_valid [1:0],
244 w2_addr [4:0]}),
245 .dout ({w1_tid_fw [2:0],
246 w1_valid_fw [1:0],
247 w1_addr_fw [4:0],
248 w2_tid_fw [2:0],
249 w2_valid_fw [1:0],
250 w2_addr_fw [4:0]}),
251 .siclk(siclk),
252 .soclk(soclk));
253
254
255
256
257// L2 clock "free-running" clock
258n2_frf_mp_256x78_cust_l1clkhdr_ctl_macro clkgen_free (
259 .l2clk (l2clk ),
260 .l1en (pce ),
261 .pce_ov (tcu_pce_ov ),
262 .stop (1'b0 ),
263 .se (tcu_scan_en ),
264 .l1clk (l1clk_free ));
265
266fgu_frf_array frf_array_o (
267 .clk ( l1clk_free ),
268 .r1_valid ( r1_valid_ph2 ),
269 .r1_addr ({r_tid_ph2[2:0] , r1_addr_ph2[4:0]} ),
270 .r2_valid ( r2_valid_ph2 ),
271 .r2_addr ({r_tid_ph2[2:0] , r2_addr_ph2[4:0]} ),
272 .w1_valid ( w1_valid_fw[0] ),
273 .w1_addr ({w1_tid_fw[2:0] , w1_addr_fw[4:0]} ),
274 .w1_data ({w1_ecc_fw[6:0] , w1_data_fw[31:0]} ),
275 .w2_valid ( w2_valid_fw[0] ),
276 .w2_addr ({w2_tid_fw[2:0] , w2_addr_fw[4:0]} ),
277 .w2_data ({w2_ecc_fw[6:0] , w2_data_fw[31:0]} ),
278 .r1_data ({frf_r1_ecc[6:0] , frf_r1_data[31:0]} ),
279 .r2_data ({frf_r2_ecc[6:0] , frf_r2_data[31:0]} ),
280 .tcu_array_wr_inhibit(tcu_array_wr_inhibit));
281
282
283
284fgu_frf_array frf_array_e (
285 .clk ( l1clk_free ),
286 .r1_valid ( r1_valid_ph2 ),
287 .r1_addr ({r_tid_ph2[2:0] , r1_addr_ph2[4:0]} ),
288 .r2_valid ( r2_valid_ph2 ),
289 .r2_addr ({r_tid_ph2[2:0] , r2_addr_ph2[4:0]} ),
290 .w1_valid ( w1_valid_fw[1] ),
291 .w1_addr ({w1_tid_fw[2:0] , w1_addr_fw[4:0]} ),
292 .w1_data ({w1_ecc_fw[13:7] , w1_data_fw[63:32]} ),
293 .w2_valid ( w2_valid_fw[1] ),
294 .w2_addr ({w2_tid_fw[2:0] , w2_addr_fw[4:0]} ),
295 .w2_data ({w2_ecc_fw[13:7] , w2_data_fw[63:32]} ),
296 .r1_data ({frf_r1_ecc[13:7] , frf_r1_data[63:32]} ),
297 .r2_data ({frf_r2_ecc[13:7] , frf_r2_data[63:32]} ),
298 .tcu_array_wr_inhibit(tcu_array_wr_inhibit));
299
300
301
302
303
304supply0 vss;
305supply1 vdd;
306
307
308
309
310
311// scanorder start
312// w1_ecc_synd_fb_to_fw_scanin[13:7]
313// fw_w1data_scanin[63:32]
314// frf_write_input_ctl_in2fb_scanin[16]
315// frf_read_ctl_in2ph2_scanin[14:10]
316// frf_write_input_ctl_in2fb_scanin[9:7]
317// frf_write_input_ctl_in2fb_scanin[0]
318// frf_read_ctl_in2ph2_scanin[2:0]
319// frf_read_ctl_in2ph2_scanin[9:5]
320// frf_write_input_ctl_in2fb_scanin[4]
321// frf_write_input_ctl_in2fb_scanin[5]
322// w1_ecc_synd_fb_to_fw_scanin[6:0]
323// fw_w1data_scanin[31:0]
324// fw_w2data_scanin[0:31]
325// w2_ecc_synd_fb_to_fw_scanin[0:6]
326// frf_write_input_ctl_in2fb_scanin[15]
327// frf_write_input_ctl_in2fb_scanin[1]
328// frf_write_input_ctl_in2fb_scanin[2]
329// frf_write_input_ctl_in2fb_scanin[3]
330// frf_read_ctl_in2ph2_scanin[3]
331// frf_read_ctl_in2ph2_scanin[4]
332// frf_write_input_ctl_in2fb_scanin[10]
333// frf_write_input_ctl_in2fb_scanin[11]
334// frf_write_input_ctl_in2fb_scanin[12]
335// frf_write_input_ctl_in2fb_scanin[13]
336// frf_write_input_ctl_in2fb_scanin[14]
337// frf_write_input_ctl_in2fb_scanin[17]
338// frf_write_input_ctl_in2fb_scanin[18]
339// frf_write_input_ctl_in2fb_scanin[19]
340// frf_write_input_ctl_in2fb_scanin[6]
341// fw_w2data_scanin[32:63]
342// w2_ecc_synd_fb_to_fw_scanin[7:13]
343// scanorder end
344// fixscan start
345assign w1_ecc_synd_fb_to_fw_scanin[13]=scan_in;
346assign w1_ecc_synd_fb_to_fw_scanin[12]=w1_ecc_synd_fb_to_fw_scanout[13];
347assign w1_ecc_synd_fb_to_fw_scanin[11]=w1_ecc_synd_fb_to_fw_scanout[12];
348assign w1_ecc_synd_fb_to_fw_scanin[10]=w1_ecc_synd_fb_to_fw_scanout[11];
349assign w1_ecc_synd_fb_to_fw_scanin[9]=w1_ecc_synd_fb_to_fw_scanout[10];
350assign w1_ecc_synd_fb_to_fw_scanin[8]=w1_ecc_synd_fb_to_fw_scanout[9];
351assign w1_ecc_synd_fb_to_fw_scanin[7]=w1_ecc_synd_fb_to_fw_scanout[8];
352assign fw_w1data_scanin[63]=w1_ecc_synd_fb_to_fw_scanout[7];
353assign fw_w1data_scanin[62]=fw_w1data_scanout[63];
354assign fw_w1data_scanin[61]=fw_w1data_scanout[62];
355assign fw_w1data_scanin[60]=fw_w1data_scanout[61];
356assign fw_w1data_scanin[59]=fw_w1data_scanout[60];
357assign fw_w1data_scanin[58]=fw_w1data_scanout[59];
358assign fw_w1data_scanin[57]=fw_w1data_scanout[58];
359assign fw_w1data_scanin[56]=fw_w1data_scanout[57];
360assign fw_w1data_scanin[55]=fw_w1data_scanout[56];
361assign fw_w1data_scanin[54]=fw_w1data_scanout[55];
362assign fw_w1data_scanin[53]=fw_w1data_scanout[54];
363assign fw_w1data_scanin[52]=fw_w1data_scanout[53];
364assign fw_w1data_scanin[51]=fw_w1data_scanout[52];
365assign fw_w1data_scanin[50]=fw_w1data_scanout[51];
366assign fw_w1data_scanin[49]=fw_w1data_scanout[50];
367assign fw_w1data_scanin[48]=fw_w1data_scanout[49];
368assign fw_w1data_scanin[47]=fw_w1data_scanout[48];
369assign fw_w1data_scanin[46]=fw_w1data_scanout[47];
370assign fw_w1data_scanin[45]=fw_w1data_scanout[46];
371assign fw_w1data_scanin[44]=fw_w1data_scanout[45];
372assign fw_w1data_scanin[43]=fw_w1data_scanout[44];
373assign fw_w1data_scanin[42]=fw_w1data_scanout[43];
374assign fw_w1data_scanin[41]=fw_w1data_scanout[42];
375assign fw_w1data_scanin[40]=fw_w1data_scanout[41];
376assign fw_w1data_scanin[39]=fw_w1data_scanout[40];
377assign fw_w1data_scanin[38]=fw_w1data_scanout[39];
378assign fw_w1data_scanin[37]=fw_w1data_scanout[38];
379assign fw_w1data_scanin[36]=fw_w1data_scanout[37];
380assign fw_w1data_scanin[35]=fw_w1data_scanout[36];
381assign fw_w1data_scanin[34]=fw_w1data_scanout[35];
382assign fw_w1data_scanin[33]=fw_w1data_scanout[34];
383assign fw_w1data_scanin[32]=fw_w1data_scanout[33];
384assign frf_write_input_ctl_in2fb_scanin[16]=fw_w1data_scanout[32];
385assign frf_read_ctl_in2ph2_scanin[14]=frf_write_input_ctl_in2fb_scanout[16];
386assign frf_read_ctl_in2ph2_scanin[13]=frf_read_ctl_in2ph2_scanout[14];
387assign frf_read_ctl_in2ph2_scanin[12]=frf_read_ctl_in2ph2_scanout[13];
388assign frf_read_ctl_in2ph2_scanin[11]=frf_read_ctl_in2ph2_scanout[12];
389assign frf_read_ctl_in2ph2_scanin[10]=frf_read_ctl_in2ph2_scanout[11];
390assign frf_write_input_ctl_in2fb_scanin[9]=frf_read_ctl_in2ph2_scanout[10];
391assign frf_write_input_ctl_in2fb_scanin[8]=frf_write_input_ctl_in2fb_scanout[9];
392assign frf_write_input_ctl_in2fb_scanin[7]=frf_write_input_ctl_in2fb_scanout[8];
393assign frf_write_input_ctl_in2fb_scanin[0]=frf_write_input_ctl_in2fb_scanout[7];
394assign frf_read_ctl_in2ph2_scanin[2]=frf_write_input_ctl_in2fb_scanout[0];
395assign frf_read_ctl_in2ph2_scanin[1]=frf_read_ctl_in2ph2_scanout[2];
396assign frf_read_ctl_in2ph2_scanin[0]=frf_read_ctl_in2ph2_scanout[1];
397assign frf_read_ctl_in2ph2_scanin[9]=frf_read_ctl_in2ph2_scanout[0];
398assign frf_read_ctl_in2ph2_scanin[8]=frf_read_ctl_in2ph2_scanout[9];
399assign frf_read_ctl_in2ph2_scanin[7]=frf_read_ctl_in2ph2_scanout[8];
400assign frf_read_ctl_in2ph2_scanin[6]=frf_read_ctl_in2ph2_scanout[7];
401assign frf_read_ctl_in2ph2_scanin[5]=frf_read_ctl_in2ph2_scanout[6];
402assign frf_write_input_ctl_in2fb_scanin[4]=frf_read_ctl_in2ph2_scanout[5];
403assign frf_write_input_ctl_in2fb_scanin[5]=frf_write_input_ctl_in2fb_scanout[4];
404assign w1_ecc_synd_fb_to_fw_scanin[6]=frf_write_input_ctl_in2fb_scanout[5];
405assign w1_ecc_synd_fb_to_fw_scanin[5]=w1_ecc_synd_fb_to_fw_scanout[6];
406assign w1_ecc_synd_fb_to_fw_scanin[4]=w1_ecc_synd_fb_to_fw_scanout[5];
407assign w1_ecc_synd_fb_to_fw_scanin[3]=w1_ecc_synd_fb_to_fw_scanout[4];
408assign w1_ecc_synd_fb_to_fw_scanin[2]=w1_ecc_synd_fb_to_fw_scanout[3];
409assign w1_ecc_synd_fb_to_fw_scanin[1]=w1_ecc_synd_fb_to_fw_scanout[2];
410assign w1_ecc_synd_fb_to_fw_scanin[0]=w1_ecc_synd_fb_to_fw_scanout[1];
411assign fw_w1data_scanin[31]=w1_ecc_synd_fb_to_fw_scanout[0];
412assign fw_w1data_scanin[30]=fw_w1data_scanout[31];
413assign fw_w1data_scanin[29]=fw_w1data_scanout[30];
414assign fw_w1data_scanin[28]=fw_w1data_scanout[29];
415assign fw_w1data_scanin[27]=fw_w1data_scanout[28];
416assign fw_w1data_scanin[26]=fw_w1data_scanout[27];
417assign fw_w1data_scanin[25]=fw_w1data_scanout[26];
418assign fw_w1data_scanin[24]=fw_w1data_scanout[25];
419assign fw_w1data_scanin[23]=fw_w1data_scanout[24];
420assign fw_w1data_scanin[22]=fw_w1data_scanout[23];
421assign fw_w1data_scanin[21]=fw_w1data_scanout[22];
422assign fw_w1data_scanin[20]=fw_w1data_scanout[21];
423assign fw_w1data_scanin[19]=fw_w1data_scanout[20];
424assign fw_w1data_scanin[18]=fw_w1data_scanout[19];
425assign fw_w1data_scanin[17]=fw_w1data_scanout[18];
426assign fw_w1data_scanin[16]=fw_w1data_scanout[17];
427assign fw_w1data_scanin[15]=fw_w1data_scanout[16];
428assign fw_w1data_scanin[14]=fw_w1data_scanout[15];
429assign fw_w1data_scanin[13]=fw_w1data_scanout[14];
430assign fw_w1data_scanin[12]=fw_w1data_scanout[13];
431assign fw_w1data_scanin[11]=fw_w1data_scanout[12];
432assign fw_w1data_scanin[10]=fw_w1data_scanout[11];
433assign fw_w1data_scanin[9]=fw_w1data_scanout[10];
434assign fw_w1data_scanin[8]=fw_w1data_scanout[9];
435assign fw_w1data_scanin[7]=fw_w1data_scanout[8];
436assign fw_w1data_scanin[6]=fw_w1data_scanout[7];
437assign fw_w1data_scanin[5]=fw_w1data_scanout[6];
438assign fw_w1data_scanin[4]=fw_w1data_scanout[5];
439assign fw_w1data_scanin[3]=fw_w1data_scanout[4];
440assign fw_w1data_scanin[2]=fw_w1data_scanout[3];
441assign fw_w1data_scanin[1]=fw_w1data_scanout[2];
442assign fw_w1data_scanin[0]=fw_w1data_scanout[1];
443assign fw_w2data_scanin[0]=fw_w1data_scanout[0];
444assign fw_w2data_scanin[1]=fw_w2data_scanout[0];
445assign fw_w2data_scanin[2]=fw_w2data_scanout[1];
446assign fw_w2data_scanin[3]=fw_w2data_scanout[2];
447assign fw_w2data_scanin[4]=fw_w2data_scanout[3];
448assign fw_w2data_scanin[5]=fw_w2data_scanout[4];
449assign fw_w2data_scanin[6]=fw_w2data_scanout[5];
450assign fw_w2data_scanin[7]=fw_w2data_scanout[6];
451assign fw_w2data_scanin[8]=fw_w2data_scanout[7];
452assign fw_w2data_scanin[9]=fw_w2data_scanout[8];
453assign fw_w2data_scanin[10]=fw_w2data_scanout[9];
454assign fw_w2data_scanin[11]=fw_w2data_scanout[10];
455assign fw_w2data_scanin[12]=fw_w2data_scanout[11];
456assign fw_w2data_scanin[13]=fw_w2data_scanout[12];
457assign fw_w2data_scanin[14]=fw_w2data_scanout[13];
458assign fw_w2data_scanin[15]=fw_w2data_scanout[14];
459assign fw_w2data_scanin[16]=fw_w2data_scanout[15];
460assign fw_w2data_scanin[17]=fw_w2data_scanout[16];
461assign fw_w2data_scanin[18]=fw_w2data_scanout[17];
462assign fw_w2data_scanin[19]=fw_w2data_scanout[18];
463assign fw_w2data_scanin[20]=fw_w2data_scanout[19];
464assign fw_w2data_scanin[21]=fw_w2data_scanout[20];
465assign fw_w2data_scanin[22]=fw_w2data_scanout[21];
466assign fw_w2data_scanin[23]=fw_w2data_scanout[22];
467assign fw_w2data_scanin[24]=fw_w2data_scanout[23];
468assign fw_w2data_scanin[25]=fw_w2data_scanout[24];
469assign fw_w2data_scanin[26]=fw_w2data_scanout[25];
470assign fw_w2data_scanin[27]=fw_w2data_scanout[26];
471assign fw_w2data_scanin[28]=fw_w2data_scanout[27];
472assign fw_w2data_scanin[29]=fw_w2data_scanout[28];
473assign fw_w2data_scanin[30]=fw_w2data_scanout[29];
474assign fw_w2data_scanin[31]=fw_w2data_scanout[30];
475assign w2_ecc_synd_fb_to_fw_scanin[0]=fw_w2data_scanout[31];
476assign w2_ecc_synd_fb_to_fw_scanin[1]=w2_ecc_synd_fb_to_fw_scanout[0];
477assign w2_ecc_synd_fb_to_fw_scanin[2]=w2_ecc_synd_fb_to_fw_scanout[1];
478assign w2_ecc_synd_fb_to_fw_scanin[3]=w2_ecc_synd_fb_to_fw_scanout[2];
479assign w2_ecc_synd_fb_to_fw_scanin[4]=w2_ecc_synd_fb_to_fw_scanout[3];
480assign w2_ecc_synd_fb_to_fw_scanin[5]=w2_ecc_synd_fb_to_fw_scanout[4];
481assign w2_ecc_synd_fb_to_fw_scanin[6]=w2_ecc_synd_fb_to_fw_scanout[5];
482assign frf_write_input_ctl_in2fb_scanin[15]=w2_ecc_synd_fb_to_fw_scanout[6];
483assign frf_write_input_ctl_in2fb_scanin[1]=frf_write_input_ctl_in2fb_scanout[15];
484assign frf_write_input_ctl_in2fb_scanin[2]=frf_write_input_ctl_in2fb_scanout[1];
485assign frf_write_input_ctl_in2fb_scanin[3]=frf_write_input_ctl_in2fb_scanout[2];
486assign frf_read_ctl_in2ph2_scanin[3]=frf_write_input_ctl_in2fb_scanout[3];
487assign frf_read_ctl_in2ph2_scanin[4]=frf_read_ctl_in2ph2_scanout[3];
488assign frf_write_input_ctl_in2fb_scanin[10]=frf_read_ctl_in2ph2_scanout[4];
489assign frf_write_input_ctl_in2fb_scanin[11]=frf_write_input_ctl_in2fb_scanout[10];
490assign frf_write_input_ctl_in2fb_scanin[12]=frf_write_input_ctl_in2fb_scanout[11];
491assign frf_write_input_ctl_in2fb_scanin[13]=frf_write_input_ctl_in2fb_scanout[12];
492assign frf_write_input_ctl_in2fb_scanin[14]=frf_write_input_ctl_in2fb_scanout[13];
493assign frf_write_input_ctl_in2fb_scanin[17]=frf_write_input_ctl_in2fb_scanout[14];
494assign frf_write_input_ctl_in2fb_scanin[18]=frf_write_input_ctl_in2fb_scanout[17];
495assign frf_write_input_ctl_in2fb_scanin[19]=frf_write_input_ctl_in2fb_scanout[18];
496assign frf_write_input_ctl_in2fb_scanin[6]=frf_write_input_ctl_in2fb_scanout[19];
497assign fw_w2data_scanin[32]=frf_write_input_ctl_in2fb_scanout[6];
498assign fw_w2data_scanin[33]=fw_w2data_scanout[32];
499assign fw_w2data_scanin[34]=fw_w2data_scanout[33];
500assign fw_w2data_scanin[35]=fw_w2data_scanout[34];
501assign fw_w2data_scanin[36]=fw_w2data_scanout[35];
502assign fw_w2data_scanin[37]=fw_w2data_scanout[36];
503assign fw_w2data_scanin[38]=fw_w2data_scanout[37];
504assign fw_w2data_scanin[39]=fw_w2data_scanout[38];
505assign fw_w2data_scanin[40]=fw_w2data_scanout[39];
506assign fw_w2data_scanin[41]=fw_w2data_scanout[40];
507assign fw_w2data_scanin[42]=fw_w2data_scanout[41];
508assign fw_w2data_scanin[43]=fw_w2data_scanout[42];
509assign fw_w2data_scanin[44]=fw_w2data_scanout[43];
510assign fw_w2data_scanin[45]=fw_w2data_scanout[44];
511assign fw_w2data_scanin[46]=fw_w2data_scanout[45];
512assign fw_w2data_scanin[47]=fw_w2data_scanout[46];
513assign fw_w2data_scanin[48]=fw_w2data_scanout[47];
514assign fw_w2data_scanin[49]=fw_w2data_scanout[48];
515assign fw_w2data_scanin[50]=fw_w2data_scanout[49];
516assign fw_w2data_scanin[51]=fw_w2data_scanout[50];
517assign fw_w2data_scanin[52]=fw_w2data_scanout[51];
518assign fw_w2data_scanin[53]=fw_w2data_scanout[52];
519assign fw_w2data_scanin[54]=fw_w2data_scanout[53];
520assign fw_w2data_scanin[55]=fw_w2data_scanout[54];
521assign fw_w2data_scanin[56]=fw_w2data_scanout[55];
522assign fw_w2data_scanin[57]=fw_w2data_scanout[56];
523assign fw_w2data_scanin[58]=fw_w2data_scanout[57];
524assign fw_w2data_scanin[59]=fw_w2data_scanout[58];
525assign fw_w2data_scanin[60]=fw_w2data_scanout[59];
526assign fw_w2data_scanin[61]=fw_w2data_scanout[60];
527assign fw_w2data_scanin[62]=fw_w2data_scanout[61];
528assign fw_w2data_scanin[63]=fw_w2data_scanout[62];
529assign w2_ecc_synd_fb_to_fw_scanin[7]=fw_w2data_scanout[63];
530assign w2_ecc_synd_fb_to_fw_scanin[8]=w2_ecc_synd_fb_to_fw_scanout[7];
531assign w2_ecc_synd_fb_to_fw_scanin[9]=w2_ecc_synd_fb_to_fw_scanout[8];
532assign w2_ecc_synd_fb_to_fw_scanin[10]=w2_ecc_synd_fb_to_fw_scanout[9];
533assign w2_ecc_synd_fb_to_fw_scanin[11]=w2_ecc_synd_fb_to_fw_scanout[10];
534assign w2_ecc_synd_fb_to_fw_scanin[12]=w2_ecc_synd_fb_to_fw_scanout[11];
535assign w2_ecc_synd_fb_to_fw_scanin[13]=w2_ecc_synd_fb_to_fw_scanout[12];
536assign scan_out=w2_ecc_synd_fb_to_fw_scanout[13];
537// fixscan end
538
539`ifndef FPGA
540// synopsys translate_on
541`endif
542
543endmodule // fgu_frf_cust
544
545
546
547
548
549
550// any PARAMS parms go into naming of macro
551
552module n2_frf_mp_256x78_cust_l1clkhdr_ctl_macro (
553 l2clk,
554 l1en,
555 pce_ov,
556 stop,
557 se,
558 l1clk);
559
560
561 input l2clk;
562 input l1en;
563 input pce_ov;
564 input stop;
565 input se;
566 output l1clk;
567
568
569
570
571
572cl_sc1_l1hdr_8x c_0 (
573
574
575 .l2clk(l2clk),
576 .pce(l1en),
577 .l1clk(l1clk),
578 .se(se),
579 .pce_ov(pce_ov),
580 .stop(stop)
581);
582
583
584
585endmodule
586
587
588
589
590
591
592
593
594
595
596
597
598
599// any PARAMS parms go into naming of macro
600
601module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_14 (
602 din,
603 l1clk,
604 scan_in,
605 siclk,
606 soclk,
607 dout,
608 scan_out);
609wire [13:0] fdin;
610
611 input [13:0] din;
612 input l1clk;
613 input [13:0] scan_in;
614
615
616 input siclk;
617 input soclk;
618
619 output [13:0] dout;
620 output [13:0] scan_out;
621assign fdin[13:0] = din[13:0];
622
623
624
625
626
627
628dff #(14) d0_0 (
629.l1clk(l1clk),
630.siclk(siclk),
631.soclk(soclk),
632.d(fdin[13:0]),
633.si(scan_in[13:0]),
634.so(scan_out[13:0]),
635.q(dout[13:0])
636);
637
638
639
640
641
642
643
644
645
646
647
648
649endmodule
650
651
652
653
654
655
656
657
658
659
660
661
662
663// any PARAMS parms go into naming of macro
664
665module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__scanreverse_1__width_14 (
666 din,
667 l1clk,
668 scan_in,
669 siclk,
670 soclk,
671 dout,
672 scan_out);
673wire [13:0] fdin;
674
675 input [13:0] din;
676 input l1clk;
677 input [13:0] scan_in;
678
679
680 input siclk;
681 input soclk;
682
683 output [13:0] dout;
684 output [13:0] scan_out;
685assign fdin[13:0] = din[13:0];
686
687
688
689
690
691
692dff #(14) d0_0 (
693.l1clk(l1clk),
694.siclk(siclk),
695.soclk(soclk),
696.d(fdin[13:0]),
697.si(scan_in[13:0]),
698.so(scan_out[13:0]),
699.q(dout[13:0])
700);
701
702
703
704
705
706
707
708
709
710
711
712
713endmodule
714
715
716
717
718
719
720
721
722
723
724
725
726
727// any PARAMS parms go into naming of macro
728
729module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_15 (
730 din,
731 l1clk,
732 scan_in,
733 siclk,
734 soclk,
735 dout,
736 scan_out);
737wire [14:0] fdin;
738
739 input [14:0] din;
740 input l1clk;
741 input [14:0] scan_in;
742
743
744 input siclk;
745 input soclk;
746
747 output [14:0] dout;
748 output [14:0] scan_out;
749assign fdin[14:0] = din[14:0];
750
751
752
753
754
755
756dff #(15) d0_0 (
757.l1clk(l1clk),
758.siclk(siclk),
759.soclk(soclk),
760.d(fdin[14:0]),
761.si(scan_in[14:0]),
762.so(scan_out[14:0]),
763.q(dout[14:0])
764);
765
766
767
768
769
770
771
772
773
774
775
776
777endmodule
778
779
780
781
782
783
784
785
786
787
788
789
790
791// any PARAMS parms go into naming of macro
792
793module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__scanreverse_1__width_64 (
794 din,
795 l1clk,
796 scan_in,
797 siclk,
798 soclk,
799 dout,
800 scan_out);
801wire [63:0] fdin;
802
803 input [63:0] din;
804 input l1clk;
805 input [63:0] scan_in;
806
807
808 input siclk;
809 input soclk;
810
811 output [63:0] dout;
812 output [63:0] scan_out;
813assign fdin[63:0] = din[63:0];
814
815
816
817
818
819
820dff #(64) d0_0 (
821.l1clk(l1clk),
822.siclk(siclk),
823.soclk(soclk),
824.d(fdin[63:0]),
825.si(scan_in[63:0]),
826.so(scan_out[63:0]),
827.q(dout[63:0])
828);
829
830
831
832
833
834
835
836
837
838
839
840
841endmodule
842
843
844
845
846
847
848
849
850
851
852
853
854
855// any PARAMS parms go into naming of macro
856
857module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_64 (
858 din,
859 l1clk,
860 scan_in,
861 siclk,
862 soclk,
863 dout,
864 scan_out);
865wire [63:0] fdin;
866
867 input [63:0] din;
868 input l1clk;
869 input [63:0] scan_in;
870
871
872 input siclk;
873 input soclk;
874
875 output [63:0] dout;
876 output [63:0] scan_out;
877assign fdin[63:0] = din[63:0];
878
879
880
881
882
883
884dff #(64) d0_0 (
885.l1clk(l1clk),
886.siclk(siclk),
887.soclk(soclk),
888.d(fdin[63:0]),
889.si(scan_in[63:0]),
890.so(scan_out[63:0]),
891.q(dout[63:0])
892);
893
894
895
896
897
898
899
900
901
902
903
904
905endmodule
906
907
908
909
910
911
912
913
914
915
916
917
918
919// any PARAMS parms go into naming of macro
920
921module n2_frf_mp_256x78_cust_msff_ctl_macro__fs_1__width_20 (
922 din,
923 l1clk,
924 scan_in,
925 siclk,
926 soclk,
927 dout,
928 scan_out);
929wire [19:0] fdin;
930
931 input [19:0] din;
932 input l1clk;
933 input [19:0] scan_in;
934
935
936 input siclk;
937 input soclk;
938
939 output [19:0] dout;
940 output [19:0] scan_out;
941assign fdin[19:0] = din[19:0];
942
943
944
945
946
947
948dff #(20) d0_0 (
949.l1clk(l1clk),
950.siclk(siclk),
951.soclk(soclk),
952.d(fdin[19:0]),
953.si(scan_in[19:0]),
954.so(scan_out[19:0]),
955.q(dout[19:0])
956);
957
958
959
960
961
962
963
964
965
966
967
968
969endmodule
970
971
972
973
974`ifndef FPGA
975module fgu_frf_array (
976 clk,
977 tcu_array_wr_inhibit,
978 r1_valid,
979 r1_addr,
980 r2_valid,
981 r2_addr,
982 w1_valid,
983 w1_addr,
984 w2_valid,
985 w2_addr,
986 w1_data,
987 w2_data,
988 r1_data,
989 r2_data);
990wire masked_r1_valid;
991wire masked_r2_valid;
992
993
994 input clk;
995
996 input tcu_array_wr_inhibit;
997
998 // -----------------------------------------------------------------------
999 // Reading controls
1000 // -----------------------------------------------------------------------
1001 input r1_valid;
1002 input [7:0] r1_addr;
1003 input r2_valid;
1004 input [7:0] r2_addr;
1005
1006 // -----------------------------------------------------------------------
1007 // Writing controls
1008 // -----------------------------------------------------------------------
1009 input w1_valid;
1010 input [7:0] w1_addr;
1011 input w2_valid;
1012 input [7:0] w2_addr;
1013
1014 // -----------------------------------------------------------------------
1015 // Write data ports
1016 // -----------------------------------------------------------------------
1017 input [38:0] w1_data;
1018 input [38:0] w2_data;
1019
1020
1021 // -----------------------------------------------------------------------
1022 // Read output ports
1023 // -----------------------------------------------------------------------
1024 output [38:0] r1_data;
1025 output [38:0] r2_data;
1026
1027 reg [38:0] r1_data; // *** Temporary array read regs (no physical flops involved) ***
1028 reg [38:0] r2_data; // *** Temporary array read regs (no physical flops involved) ***
1029
1030 assign masked_r1_valid = r1_valid & ~(w1_valid & (r1_addr[7:0] == w1_addr[7:0]))
1031 & ~(w2_valid & (r1_addr[7:0] == w2_addr[7:0]));
1032
1033 assign masked_r2_valid = r2_valid & ~(w1_valid & (r2_addr[7:0] == w1_addr[7:0]))
1034 & ~(w2_valid & (r2_addr[7:0] == w2_addr[7:0]));
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048 reg [38:0] data_array[255:0];
1049
1050 // *** Initialize section ***
1051`ifndef NOINITMEM
1052 integer i;
1053 initial begin
1054 for (i=0; i<=255; i=i+1) begin
1055 data_array[i] = {39{1'b0}};
1056 end
1057 end
1058`endif
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079 always @ (posedge clk) begin
1080
1081 r1_data[38:0] <= {39{1'b0}};
1082 r2_data[38:0] <= {39{1'b0}};
1083
1084 end // posedge always
1085
1086
1087 always @ (negedge clk) begin
1088
1089
1090 // -----------------------------------------------------------------------
1091 // *** Read Section ***
1092 // -----------------------------------------------------------------------
1093
1094 if (masked_r1_valid) begin
1095 r1_data[38:0] <= data_array[r1_addr[7:0]];
1096 end
1097
1098
1099 if (masked_r2_valid) begin
1100 r2_data[38:0] <= data_array[r2_addr[7:0]];
1101 end
1102
1103
1104 // -----------------------------------------------------------------------
1105 // *** Write Section ***
1106 // -----------------------------------------------------------------------
1107
1108
1109 // 0in assert -active (w1_valid & w2_valid) -var (w1_addr[7:0] != w2_addr[7:0]) -message "FGU FRF Multiple Write"
1110
1111
1112 if (w1_valid & ~tcu_array_wr_inhibit) begin
1113 data_array[w1_addr[7:0]] <= w1_data[38:0];
1114 end
1115
1116
1117 if (w2_valid & ~tcu_array_wr_inhibit) begin
1118 data_array[w2_addr[7:0]] <= w2_data[38:0];
1119 end
1120
1121
1122
1123
1124
1125
1126
1127
1128 end // negedge always
1129
1130
1131supply0 vss;
1132supply1 vdd;
1133
1134endmodule // fgu_frf_array
1135
1136`endif
1137
1138`ifdef FPGA
1139module fgu_frf_array(clk, tcu_array_wr_inhibit, r1_valid, r1_addr, r2_valid,
1140 r2_addr, w1_valid, w1_addr, w2_valid, w2_addr, w1_data, w2_data,
1141 r1_data, r2_data);
1142
1143 input clk;
1144 input tcu_array_wr_inhibit;
1145 input r1_valid;
1146 input [7:0] r1_addr;
1147 input r2_valid;
1148 input [7:0] r2_addr;
1149 input w1_valid;
1150 input [7:0] w1_addr;
1151 input w2_valid;
1152 input [7:0] w2_addr;
1153 input [38:0] w1_data;
1154 input [38:0] w2_data;
1155 output [38:0] r1_data;
1156 output [38:0] r2_data;
1157
1158 wire masked_r1_valid;
1159 wire masked_r2_valid;
1160 reg [38:0] r1_data;
1161 reg [38:0] r2_data;
1162
1163
1164 reg [38:0] data_array[255:0];
1165 integer i;
1166
1167 assign masked_r1_valid = ((r1_valid & (~(w1_valid & (r1_addr[7:0] ==
1168 w1_addr[7:0])))) & (~(w2_valid & (r1_addr[7:0] == w2_addr[7:0]))
1169 ));
1170 assign masked_r2_valid = ((r2_valid & (~(w1_valid & (r2_addr[7:0] ==
1171 w1_addr[7:0])))) & (~(w2_valid & (r2_addr[7:0] == w2_addr[7:0]))
1172 ));
1173
1174 initial begin
1175 for (i = 0; (i <= 255); i = (i + 1)) begin
1176 data_array[i] = {39 {1'b0}};
1177 end
1178 end
1179 always @(negedge clk) begin
1180 if (masked_r1_valid) begin
1181 r1_data[38:0] <= data_array[r1_addr[7:0]];
1182 end
1183 else
1184 begin
1185 r1_data[38:0] <= {39 {1'b0}};
1186 end
1187 if (masked_r2_valid) begin
1188 r2_data[38:0] <= data_array[r2_addr[7:0]];
1189 end
1190 else
1191 begin
1192 r2_data[38:0] <= {39 {1'b0}};
1193 end
1194 if (w1_valid & (~tcu_array_wr_inhibit)) begin
1195 data_array[w1_addr[7:0]] <= w1_data[38:0];
1196 end
1197 if (w2_valid & (~tcu_array_wr_inhibit)) begin
1198 data_array[w2_addr[7:0]] <= w2_data[38:0];
1199 end
1200 end
1201
1202endmodule
1203
1204`endif
1205