Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / pku / rtl / pku.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: pku.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 pku (
36 tlu_halted,
37 tcu_do_mode,
38 dec_block_store_stall,
39 dec_ierr_d,
40 lsu_spec_enable,
41 spc_core_running_status,
42 lsu_pku_pmen,
43 tlu_retry_state,
44 tlu_flush_ifu,
45 dec_true_valid_e,
46 dec_decode0_d,
47 dec_decode1_d,
48 dec_valid0_d,
49 dec_valid1_d,
50 lsu_sync,
51 lsu_complete,
52 dec_br_taken_e,
53 fgu_divide_completion,
54 ifu_ibuffer_write_c,
55 lsu_stb_alloc,
56 lsu_stb_dealloc,
57 lsu_block_store_kill,
58 ifu_buf0_inst0,
59 ifu_buf0_inst1,
60 ifu_buf0_inst2,
61 ifu_buf0_inst3,
62 ifu_buf0_inst4,
63 ifu_buf0_inst5,
64 ifu_buf0_inst6,
65 ifu_buf0_inst7,
66 ifu_buf0_valid_p,
67 ifu_upper_buffer_valid_p,
68 l2clk,
69 scan_in,
70 tcu_pce_ov,
71 spc_aclk,
72 spc_bclk,
73 tcu_scan_en,
74 pku_raw_pick0_p,
75 pku_raw_pick1_p,
76 pku_base_pick_p,
77 pku_pick_p,
78 pku_lsu_p,
79 pku_fgu_p,
80 pku_pdist_p,
81 pku_twocycle_p,
82 pku_idest_p,
83 pku_fdest_p,
84 pku_fsrc_rd_p,
85 pku_isrc_rs1_p,
86 pku_isrc_rs2_p,
87 pku_isrc_rd_p,
88 pku_valid_e,
89 pku_annul_ds_dcti_brtaken0_e,
90 pku_annul_ds_dcti_brtaken1_e,
91 pku_flush_f1,
92 pku_flush_f2,
93 pku_flush_lb,
94 pku_flush_lm,
95 pku_flush_m,
96 pku_flush_b,
97 pku_load_flush_w,
98 pku_ds_e,
99 pku_flush_upper_buffer,
100 pku_flush_buffer0,
101 pku_quiesce,
102 pku_inst_cnt_brtaken00,
103 pku_inst_cnt_brtaken01,
104 pku_inst_cnt_brtaken02,
105 pku_inst_cnt_brtaken03,
106 pku_inst_cnt_brtaken04,
107 pku_inst_cnt_brtaken05,
108 pku_inst_cnt_brtaken06,
109 pku_inst_cnt_brtaken07,
110 pku_inst_cnt_brtaken10,
111 pku_inst_cnt_brtaken11,
112 pku_inst_cnt_brtaken12,
113 pku_inst_cnt_brtaken13,
114 pku_inst_cnt_brtaken14,
115 pku_inst_cnt_brtaken15,
116 pku_inst_cnt_brtaken16,
117 pku_inst_cnt_brtaken17,
118 scan_out);
119wire [7:0] swl_divide_wait;
120wire swl0_scanin;
121wire swl0_scanout;
122wire [7:0] swl_ready_p;
123wire [7:0] swl_spec_ready_p;
124wire [7:0] swl_cancel_pick_p;
125wire swl1_scanin;
126wire swl1_scanout;
127wire swl2_scanin;
128wire swl2_scanout;
129wire swl3_scanin;
130wire swl3_scanout;
131wire pck0_scanin;
132wire pck0_scanout;
133wire swl4_scanin;
134wire swl4_scanout;
135wire swl5_scanin;
136wire swl5_scanout;
137wire swl6_scanin;
138wire swl6_scanout;
139wire swl7_scanin;
140wire swl7_scanout;
141wire pck1_scanin;
142wire pck1_scanout;
143
144
145input [7:0] tlu_halted; // thread is in halted state
146
147input tcu_do_mode;
148
149input [7:0] dec_block_store_stall; // prevent window ops from coming too early after a block store
150input [1:0] dec_ierr_d; // tell pku that an inst error has occurred: illegal, parity error or ifetch error
151
152input [7:0] lsu_spec_enable; // enable speculation; assume this is serializing (if not pipeline it)
153input [7:0] spc_core_running_status; // active bits for each of the threads
154
155input lsu_pku_pmen; // power management enable for pku
156
157input [7:0] tlu_retry_state; // IF the first part of a retry, must let it go even in dcti w/out DS (part of address optimization)
158input [7:0] tlu_flush_ifu; // flush this thread (traps)
159input [1:0] dec_true_valid_e; // instruction at e stage is valid taking exceptions into account
160input dec_decode0_d; // instruction at d stage is decoded this cycle (TG0)
161input dec_decode1_d; // instruction at d stage is decoded this cycle (TG1)
162input dec_valid0_d; // instruction at d stage is valid (TG0)
163input dec_valid1_d; // instruction at d stage is valid (TG1)
164input [7:0] lsu_sync; // lsu needs thread to resync due to dcache_miss, ASI register access, etc.
165input [7:0] lsu_complete; // completion of lsu sync event
166input [1:0] dec_br_taken_e; // br is taken for e stage (br mispredict)
167
168input [7:0] fgu_divide_completion; // divide completion for any thread
169input [7:0] ifu_ibuffer_write_c; // any write to the ibuffer (C stage)
170input [7:0] lsu_stb_alloc; // lsu has allocated store in stb; sent in b_stage; increment ccnt by 1
171input [7:0] lsu_stb_dealloc; // lsu is deallocating store in stb; decrement sscnt,ccnt by 1
172input [7:0] lsu_block_store_kill; // error occured in block store sequence; use this to set scnt=ccnt=0
173
174input [31:0] ifu_buf0_inst0; // oldest instruction for each of the instruction buffers
175input [31:0] ifu_buf0_inst1;
176input [31:0] ifu_buf0_inst2;
177input [31:0] ifu_buf0_inst3;
178input [31:0] ifu_buf0_inst4;
179input [31:0] ifu_buf0_inst5;
180input [31:0] ifu_buf0_inst6;
181input [31:0] ifu_buf0_inst7;
182
183input [7:0] ifu_buf0_valid_p; // instruction valid signals for each of the buffers (oldest instruction)
184input [7:0] ifu_upper_buffer_valid_p; // instruction after oldest instruction is valid for each buffer
185
186input l2clk;
187input scan_in;
188input tcu_pce_ov; // scan signals
189input spc_aclk;
190input spc_bclk;
191input tcu_scan_en;
192
193output [3:0] pku_raw_pick0_p; // raw pick signals to ifu to mux pc addresses (no swl_cancel_pick or decode cancel)
194output [7:4] pku_raw_pick1_p;
195
196output [7:0] pku_base_pick_p; // base pick signals to dec (no decode cancel)
197
198output [7:0] pku_pick_p; // final pick signals (with everything)
199
200output [7:0] pku_lsu_p; // lsu op at pick
201output [7:0] pku_fgu_p; // fgu op at pick
202output [7:0] pku_pdist_p; // pdist inst at pick
203output [7:0] pku_twocycle_p; // twocycle op at pick (std or casa)
204output [7:0] pku_idest_p; // op has integer dest at pick
205output [7:0] pku_fdest_p; // op has fp dest at pick
206
207output [7:0] pku_fsrc_rd_p; // fgu sources rd
208
209output [7:0] pku_isrc_rs1_p; // int op has rs1 source
210output [7:0] pku_isrc_rs2_p; // int op has rs2 source
211output [7:0] pku_isrc_rd_p; // int op has rd dest
212
213output [7:0] pku_valid_e; // inst is valid at e stage
214
215output [7:0] pku_annul_ds_dcti_brtaken0_e; // DS of dcti at e stage is annulled
216output [7:0] pku_annul_ds_dcti_brtaken1_e; // DS of dcti at e stage is annulled
217
218output [7:0] pku_flush_f1; // flush inst at f1 pipe stage of the fgu
219output [7:0] pku_flush_f2; // flush inst at f2 pipe stage of the fgu
220
221output [7:0] pku_flush_lb; // flush inst at b pipe stage of the lsu
222output [7:0] pku_flush_lm; // flush inst at m pipe stage of the lsu
223
224output [7:0] pku_flush_m; // flush inst at m pipe stage of trap
225output [7:0] pku_flush_b; // flush inst at b pipe stage of trap
226
227output [7:0] pku_load_flush_w; // tell ifu to flush this thread and fetch the npc of inst at w stage (due to load mispredict)
228
229output [7:0] pku_ds_e; // inst at e stage is a DS
230
231output [7:0] pku_flush_upper_buffer; // flush upper instruction buffers
232output [7:0] pku_flush_buffer0; // flush buffer0 of instruction buffers (oldest)
233
234output [7:0] pku_quiesce; // quiesce signal for each thread to tlu
235
236output [1:0] pku_inst_cnt_brtaken00; // inst cnts at e,m,b pipe stages for each thread
237output [1:0] pku_inst_cnt_brtaken01;
238output [1:0] pku_inst_cnt_brtaken02;
239output [1:0] pku_inst_cnt_brtaken03;
240output [1:0] pku_inst_cnt_brtaken04;
241output [1:0] pku_inst_cnt_brtaken05;
242output [1:0] pku_inst_cnt_brtaken06;
243output [1:0] pku_inst_cnt_brtaken07;
244output [1:0] pku_inst_cnt_brtaken10; // inst cnts at e,m,b pipe stages for each thread
245output [1:0] pku_inst_cnt_brtaken11;
246output [1:0] pku_inst_cnt_brtaken12;
247output [1:0] pku_inst_cnt_brtaken13;
248output [1:0] pku_inst_cnt_brtaken14;
249output [1:0] pku_inst_cnt_brtaken15;
250output [1:0] pku_inst_cnt_brtaken16;
251output [1:0] pku_inst_cnt_brtaken17;
252
253output scan_out;
254
255
256pku_swl_ctl swl0 (
257 .tlu_halted(tlu_halted[0]),
258 .dec_block_store_stall(dec_block_store_stall[0]),
259 .dec_ierr_d(dec_ierr_d[0]),
260 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[0]),
261 .ifu_buf0_inst(ifu_buf0_inst0[31:0]),
262 .swl_divide_wait_all(swl_divide_wait[7:0]),
263 .fgu_divide_completion(fgu_divide_completion[0]),
264 .lsu_spec_enable(lsu_spec_enable[0]),
265 .spc_core_running_status(spc_core_running_status[0]),
266 .ifu_buf0_valid_p(ifu_buf0_valid_p[0]),
267 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[0]),
268 .pku_raw_pick_p(pku_raw_pick0_p[0]),
269 .tlu_flush_ifu(tlu_flush_ifu[0]),
270 .dec_true_valid_e(dec_true_valid_e[0]),
271 .dec_decode_d(dec_decode0_d),
272 .dec_valid_d(dec_valid0_d),
273 .tlu_retry_state(tlu_retry_state[0]),
274 .lsu_stb_dealloc(lsu_stb_dealloc[0]),
275 .lsu_stb_alloc(lsu_stb_alloc[0]),
276 .lsu_block_store_kill(lsu_block_store_kill[0]),
277 .lsu_sync(lsu_sync[0]),
278 .lsu_complete(lsu_complete[0]),
279 .dec_br_taken_e(dec_br_taken_e[0]),
280 .scan_in(swl0_scanin),
281 .scan_out(swl0_scanout),
282 .l2clk(l2clk),
283 .pku_quiesce(pku_quiesce[0]),
284 .pku_lsu_p(pku_lsu_p[0]),
285 .pku_fgu_p(pku_fgu_p[0]),
286 .pku_pdist_p(pku_pdist_p[0]),
287 .pku_twocycle_p(pku_twocycle_p[0]),
288 .pku_idest_p(pku_idest_p[0]),
289 .pku_fdest_p(pku_fdest_p[0]),
290 .pku_isrc_rs1_p(pku_isrc_rs1_p[0]),
291 .pku_isrc_rs2_p(pku_isrc_rs2_p[0]),
292 .pku_isrc_rd_p(pku_isrc_rd_p[0]),
293 .pku_fsrc_rd_p(pku_fsrc_rd_p[0]),
294 .swl_ready_p(swl_ready_p[0]),
295 .swl_spec_ready_p(swl_spec_ready_p[0]),
296 .pku_load_flush_w(pku_load_flush_w[0]),
297 .pku_flush_upper_buffer(pku_flush_upper_buffer[0]),
298 .pku_flush_buffer0(pku_flush_buffer0[0]),
299 .pku_valid_e(pku_valid_e[0]),
300 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[0]),
301 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[0]),
302 .pku_flush_m(pku_flush_m[0]),
303 .pku_flush_b(pku_flush_b[0]),
304 .pku_flush_lm(pku_flush_lm[0]),
305 .pku_flush_lb(pku_flush_lb[0]),
306 .pku_flush_f1(pku_flush_f1[0]),
307 .pku_flush_f2(pku_flush_f2[0]),
308 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken00[1:0]),
309 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken10[1:0]),
310 .pku_ds_e(pku_ds_e[0]),
311 .swl_divide_wait(swl_divide_wait[0]),
312 .swl_cancel_pick_p(swl_cancel_pick_p[0]),
313 .tcu_do_mode(tcu_do_mode),
314 .lsu_pku_pmen(lsu_pku_pmen),
315 .tcu_pce_ov(tcu_pce_ov),
316 .spc_aclk(spc_aclk),
317 .spc_bclk(spc_bclk),
318 .tcu_scan_en(tcu_scan_en)
319);
320
321pku_swl_ctl swl1 (
322 .tlu_halted(tlu_halted[1]),
323 .dec_block_store_stall(dec_block_store_stall[1]),
324 .dec_ierr_d(dec_ierr_d[0]),
325 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[1]),
326 .ifu_buf0_inst(ifu_buf0_inst1[31:0]),
327 .swl_divide_wait_all(swl_divide_wait[7:0]),
328 .fgu_divide_completion(fgu_divide_completion[1]),
329 .lsu_spec_enable(lsu_spec_enable[1]),
330 .spc_core_running_status(spc_core_running_status[1]),
331 .ifu_buf0_valid_p(ifu_buf0_valid_p[1]),
332 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[1]),
333 .pku_raw_pick_p(pku_raw_pick0_p[1]),
334 .tlu_flush_ifu(tlu_flush_ifu[1]),
335 .dec_true_valid_e(dec_true_valid_e[0]),
336 .dec_decode_d(dec_decode0_d),
337 .dec_valid_d(dec_valid0_d),
338 .tlu_retry_state(tlu_retry_state[1]),
339 .lsu_stb_dealloc(lsu_stb_dealloc[1]),
340 .lsu_stb_alloc(lsu_stb_alloc[1]),
341 .lsu_block_store_kill(lsu_block_store_kill[1]),
342 .lsu_sync(lsu_sync[1]),
343 .lsu_complete(lsu_complete[1]),
344 .dec_br_taken_e(dec_br_taken_e[0]),
345 .scan_in(swl1_scanin),
346 .scan_out(swl1_scanout),
347 .l2clk(l2clk),
348 .pku_quiesce(pku_quiesce[1]),
349 .pku_lsu_p(pku_lsu_p[1]),
350 .pku_fgu_p(pku_fgu_p[1]),
351 .pku_pdist_p(pku_pdist_p[1]),
352 .pku_twocycle_p(pku_twocycle_p[1]),
353 .pku_idest_p(pku_idest_p[1]),
354 .pku_fdest_p(pku_fdest_p[1]),
355 .pku_isrc_rs1_p(pku_isrc_rs1_p[1]),
356 .pku_isrc_rs2_p(pku_isrc_rs2_p[1]),
357 .pku_isrc_rd_p(pku_isrc_rd_p[1]),
358 .pku_fsrc_rd_p(pku_fsrc_rd_p[1]),
359 .swl_ready_p(swl_ready_p[1]),
360 .swl_spec_ready_p(swl_spec_ready_p[1]),
361 .pku_load_flush_w(pku_load_flush_w[1]),
362 .pku_flush_upper_buffer(pku_flush_upper_buffer[1]),
363 .pku_flush_buffer0(pku_flush_buffer0[1]),
364 .pku_valid_e(pku_valid_e[1]),
365 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[1]),
366 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[1]),
367 .pku_flush_m(pku_flush_m[1]),
368 .pku_flush_b(pku_flush_b[1]),
369 .pku_flush_lm(pku_flush_lm[1]),
370 .pku_flush_lb(pku_flush_lb[1]),
371 .pku_flush_f1(pku_flush_f1[1]),
372 .pku_flush_f2(pku_flush_f2[1]),
373 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken01[1:0]),
374 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken11[1:0]),
375 .pku_ds_e(pku_ds_e[1]),
376 .swl_divide_wait(swl_divide_wait[1]),
377 .swl_cancel_pick_p(swl_cancel_pick_p[1]),
378 .tcu_do_mode(tcu_do_mode),
379 .lsu_pku_pmen(lsu_pku_pmen),
380 .tcu_pce_ov(tcu_pce_ov),
381 .spc_aclk(spc_aclk),
382 .spc_bclk(spc_bclk),
383 .tcu_scan_en(tcu_scan_en)
384);
385
386pku_swl_ctl swl2 (
387 .tlu_halted(tlu_halted[2]),
388 .dec_block_store_stall(dec_block_store_stall[2]),
389 .dec_ierr_d(dec_ierr_d[0]),
390 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[2]),
391 .ifu_buf0_inst(ifu_buf0_inst2[31:0]),
392 .swl_divide_wait_all(swl_divide_wait[7:0]),
393 .fgu_divide_completion(fgu_divide_completion[2]),
394 .lsu_spec_enable(lsu_spec_enable[2]),
395 .spc_core_running_status(spc_core_running_status[2]),
396 .ifu_buf0_valid_p(ifu_buf0_valid_p[2]),
397 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[2]),
398 .pku_raw_pick_p(pku_raw_pick0_p[2]),
399 .tlu_flush_ifu(tlu_flush_ifu[2]),
400 .dec_true_valid_e(dec_true_valid_e[0]),
401 .dec_decode_d(dec_decode0_d),
402 .dec_valid_d(dec_valid0_d),
403 .tlu_retry_state(tlu_retry_state[2]),
404 .lsu_stb_dealloc(lsu_stb_dealloc[2]),
405 .lsu_stb_alloc(lsu_stb_alloc[2]),
406 .lsu_block_store_kill(lsu_block_store_kill[2]),
407 .lsu_sync(lsu_sync[2]),
408 .lsu_complete(lsu_complete[2]),
409 .dec_br_taken_e(dec_br_taken_e[0]),
410 .scan_in(swl2_scanin),
411 .scan_out(swl2_scanout),
412 .l2clk(l2clk),
413 .pku_quiesce(pku_quiesce[2]),
414 .pku_lsu_p(pku_lsu_p[2]),
415 .pku_fgu_p(pku_fgu_p[2]),
416 .pku_pdist_p(pku_pdist_p[2]),
417 .pku_twocycle_p(pku_twocycle_p[2]),
418 .pku_idest_p(pku_idest_p[2]),
419 .pku_fdest_p(pku_fdest_p[2]),
420 .pku_isrc_rs1_p(pku_isrc_rs1_p[2]),
421 .pku_isrc_rs2_p(pku_isrc_rs2_p[2]),
422 .pku_isrc_rd_p(pku_isrc_rd_p[2]),
423 .pku_fsrc_rd_p(pku_fsrc_rd_p[2]),
424 .swl_ready_p(swl_ready_p[2]),
425 .swl_spec_ready_p(swl_spec_ready_p[2]),
426 .pku_load_flush_w(pku_load_flush_w[2]),
427 .pku_flush_upper_buffer(pku_flush_upper_buffer[2]),
428 .pku_flush_buffer0(pku_flush_buffer0[2]),
429 .pku_valid_e(pku_valid_e[2]),
430 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[2]),
431 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[2]),
432 .pku_flush_m(pku_flush_m[2]),
433 .pku_flush_b(pku_flush_b[2]),
434 .pku_flush_lm(pku_flush_lm[2]),
435 .pku_flush_lb(pku_flush_lb[2]),
436 .pku_flush_f1(pku_flush_f1[2]),
437 .pku_flush_f2(pku_flush_f2[2]),
438 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken02[1:0]),
439 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken12[1:0]),
440 .pku_ds_e(pku_ds_e[2]),
441 .swl_divide_wait(swl_divide_wait[2]),
442 .swl_cancel_pick_p(swl_cancel_pick_p[2]),
443 .tcu_do_mode(tcu_do_mode),
444 .lsu_pku_pmen(lsu_pku_pmen),
445 .tcu_pce_ov(tcu_pce_ov),
446 .spc_aclk(spc_aclk),
447 .spc_bclk(spc_bclk),
448 .tcu_scan_en(tcu_scan_en)
449);
450
451pku_swl_ctl swl3 (
452 .tlu_halted(tlu_halted[3]),
453 .dec_block_store_stall(dec_block_store_stall[3]),
454 .dec_ierr_d(dec_ierr_d[0]),
455 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[3]),
456 .ifu_buf0_inst(ifu_buf0_inst3[31:0]),
457 .swl_divide_wait_all(swl_divide_wait[7:0]),
458 .fgu_divide_completion(fgu_divide_completion[3]),
459 .lsu_spec_enable(lsu_spec_enable[3]),
460 .spc_core_running_status(spc_core_running_status[3]),
461 .ifu_buf0_valid_p(ifu_buf0_valid_p[3]),
462 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[3]),
463 .pku_raw_pick_p(pku_raw_pick0_p[3]),
464 .tlu_flush_ifu(tlu_flush_ifu[3]),
465 .dec_true_valid_e(dec_true_valid_e[0]),
466 .dec_decode_d(dec_decode0_d),
467 .dec_valid_d(dec_valid0_d),
468 .tlu_retry_state(tlu_retry_state[3]),
469 .lsu_stb_dealloc(lsu_stb_dealloc[3]),
470 .lsu_stb_alloc(lsu_stb_alloc[3]),
471 .lsu_block_store_kill(lsu_block_store_kill[3]),
472 .lsu_sync(lsu_sync[3]),
473 .lsu_complete(lsu_complete[3]),
474 .dec_br_taken_e(dec_br_taken_e[0]),
475 .scan_in(swl3_scanin),
476 .scan_out(swl3_scanout),
477 .l2clk(l2clk),
478 .pku_quiesce(pku_quiesce[3]),
479 .pku_lsu_p(pku_lsu_p[3]),
480 .pku_fgu_p(pku_fgu_p[3]),
481 .pku_pdist_p(pku_pdist_p[3]),
482 .pku_twocycle_p(pku_twocycle_p[3]),
483 .pku_idest_p(pku_idest_p[3]),
484 .pku_fdest_p(pku_fdest_p[3]),
485 .pku_isrc_rs1_p(pku_isrc_rs1_p[3]),
486 .pku_isrc_rs2_p(pku_isrc_rs2_p[3]),
487 .pku_isrc_rd_p(pku_isrc_rd_p[3]),
488 .pku_fsrc_rd_p(pku_fsrc_rd_p[3]),
489 .swl_ready_p(swl_ready_p[3]),
490 .swl_spec_ready_p(swl_spec_ready_p[3]),
491 .pku_load_flush_w(pku_load_flush_w[3]),
492 .pku_flush_upper_buffer(pku_flush_upper_buffer[3]),
493 .pku_flush_buffer0(pku_flush_buffer0[3]),
494 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[3]),
495 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[3]),
496 .pku_valid_e(pku_valid_e[3]),
497 .pku_flush_m(pku_flush_m[3]),
498 .pku_flush_b(pku_flush_b[3]),
499 .pku_flush_lm(pku_flush_lm[3]),
500 .pku_flush_lb(pku_flush_lb[3]),
501 .pku_flush_f1(pku_flush_f1[3]),
502 .pku_flush_f2(pku_flush_f2[3]),
503 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken03[1:0]),
504 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken13[1:0]),
505 .pku_ds_e(pku_ds_e[3]),
506 .swl_divide_wait(swl_divide_wait[3]),
507 .swl_cancel_pick_p(swl_cancel_pick_p[3]),
508 .tcu_do_mode(tcu_do_mode),
509 .lsu_pku_pmen(lsu_pku_pmen),
510 .tcu_pce_ov(tcu_pce_ov),
511 .spc_aclk(spc_aclk),
512 .spc_bclk(spc_bclk),
513 .tcu_scan_en(tcu_scan_en)
514);
515
516pku_pkd_dp pkd0 (
517 .pku_raw_pick_p(pku_raw_pick0_p[3:0]),
518 .dec_decode_d(dec_decode0_d),
519 .dec_valid_d(dec_valid0_d),
520 .swl_cancel_pick_p(swl_cancel_pick_p[3:0]),
521 .pku_flush_buffer0(pku_flush_buffer0[3:0]),
522 .pku_pick_p(pku_pick_p[3:0]),
523 .pku_base_pick_p(pku_base_pick_p[3:0])
524);
525
526pku_pck_ctl pck0 (
527 .pku_pick_p(pku_pick_p[3:0]),
528 .swl_ready_p(swl_ready_p[3:0]),
529 .swl_spec_ready_p(swl_spec_ready_p[3:0]),
530 .ifu_buf0_valid_p(ifu_buf0_valid_p[3:0]),
531 .scan_in(pck0_scanin),
532 .scan_out(pck0_scanout),
533 .l2clk(l2clk),
534 .pku_raw_pick_p(pku_raw_pick0_p[3:0]),
535 .lsu_pku_pmen(lsu_pku_pmen),
536 .tcu_pce_ov(tcu_pce_ov),
537 .spc_aclk(spc_aclk),
538 .spc_bclk(spc_bclk),
539 .tcu_scan_en(tcu_scan_en)
540);
541
542
543pku_swl_ctl swl4 (
544 .tlu_halted(tlu_halted[4]),
545 .dec_block_store_stall(dec_block_store_stall[4]),
546 .dec_ierr_d(dec_ierr_d[1]),
547 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[4]),
548 .ifu_buf0_inst(ifu_buf0_inst4[31:0]),
549 .swl_divide_wait_all(swl_divide_wait[7:0]),
550 .fgu_divide_completion(fgu_divide_completion[4]),
551 .lsu_spec_enable(lsu_spec_enable[4]),
552 .spc_core_running_status(spc_core_running_status[4]),
553 .ifu_buf0_valid_p(ifu_buf0_valid_p[4]),
554 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[4]),
555 .pku_raw_pick_p(pku_raw_pick1_p[4]),
556 .tlu_flush_ifu(tlu_flush_ifu[4]),
557 .dec_true_valid_e(dec_true_valid_e[1]),
558 .dec_decode_d(dec_decode1_d),
559 .dec_valid_d(dec_valid1_d),
560 .tlu_retry_state(tlu_retry_state[4]),
561 .lsu_stb_dealloc(lsu_stb_dealloc[4]),
562 .lsu_stb_alloc(lsu_stb_alloc[4]),
563 .lsu_block_store_kill(lsu_block_store_kill[4]),
564 .lsu_sync(lsu_sync[4]),
565 .lsu_complete(lsu_complete[4]),
566 .dec_br_taken_e(dec_br_taken_e[1]),
567 .scan_in(swl4_scanin),
568 .scan_out(swl4_scanout),
569 .l2clk(l2clk),
570 .pku_quiesce(pku_quiesce[4]),
571 .pku_lsu_p(pku_lsu_p[4]),
572 .pku_fgu_p(pku_fgu_p[4]),
573 .pku_pdist_p(pku_pdist_p[4]),
574 .pku_twocycle_p(pku_twocycle_p[4]),
575 .pku_idest_p(pku_idest_p[4]),
576 .pku_fdest_p(pku_fdest_p[4]),
577 .pku_isrc_rs1_p(pku_isrc_rs1_p[4]),
578 .pku_isrc_rs2_p(pku_isrc_rs2_p[4]),
579 .pku_isrc_rd_p(pku_isrc_rd_p[4]),
580 .pku_fsrc_rd_p(pku_fsrc_rd_p[4]),
581 .swl_ready_p(swl_ready_p[4]),
582 .swl_spec_ready_p(swl_spec_ready_p[4]),
583 .pku_load_flush_w(pku_load_flush_w[4]),
584 .pku_flush_upper_buffer(pku_flush_upper_buffer[4]),
585 .pku_flush_buffer0(pku_flush_buffer0[4]),
586 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[4]),
587 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[4]),
588 .pku_valid_e(pku_valid_e[4]),
589 .pku_flush_m(pku_flush_m[4]),
590 .pku_flush_b(pku_flush_b[4]),
591 .pku_flush_lm(pku_flush_lm[4]),
592 .pku_flush_lb(pku_flush_lb[4]),
593 .pku_flush_f1(pku_flush_f1[4]),
594 .pku_flush_f2(pku_flush_f2[4]),
595 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken04[1:0]),
596 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken14[1:0]),
597 .pku_ds_e(pku_ds_e[4]),
598 .swl_divide_wait(swl_divide_wait[4]),
599 .swl_cancel_pick_p(swl_cancel_pick_p[4]),
600 .tcu_do_mode(tcu_do_mode),
601 .lsu_pku_pmen(lsu_pku_pmen),
602 .tcu_pce_ov(tcu_pce_ov),
603 .spc_aclk(spc_aclk),
604 .spc_bclk(spc_bclk),
605 .tcu_scan_en(tcu_scan_en)
606);
607
608pku_swl_ctl swl5 (
609 .tlu_halted(tlu_halted[5]),
610 .dec_block_store_stall(dec_block_store_stall[5]),
611 .dec_ierr_d(dec_ierr_d[1]),
612 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[5]),
613 .ifu_buf0_inst(ifu_buf0_inst5[31:0]),
614 .swl_divide_wait_all(swl_divide_wait[7:0]),
615 .fgu_divide_completion(fgu_divide_completion[5]),
616 .lsu_spec_enable(lsu_spec_enable[5]),
617 .spc_core_running_status(spc_core_running_status[5]),
618 .ifu_buf0_valid_p(ifu_buf0_valid_p[5]),
619 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[5]),
620 .pku_raw_pick_p(pku_raw_pick1_p[5]),
621 .tlu_flush_ifu(tlu_flush_ifu[5]),
622 .dec_true_valid_e(dec_true_valid_e[1]),
623 .dec_decode_d(dec_decode1_d),
624 .dec_valid_d(dec_valid1_d),
625 .tlu_retry_state(tlu_retry_state[5]),
626 .lsu_stb_dealloc(lsu_stb_dealloc[5]),
627 .lsu_stb_alloc(lsu_stb_alloc[5]),
628 .lsu_block_store_kill(lsu_block_store_kill[5]),
629 .lsu_sync(lsu_sync[5]),
630 .lsu_complete(lsu_complete[5]),
631 .dec_br_taken_e(dec_br_taken_e[1]),
632 .scan_in(swl5_scanin),
633 .scan_out(swl5_scanout),
634 .l2clk(l2clk),
635 .pku_quiesce(pku_quiesce[5]),
636 .pku_lsu_p(pku_lsu_p[5]),
637 .pku_fgu_p(pku_fgu_p[5]),
638 .pku_pdist_p(pku_pdist_p[5]),
639 .pku_twocycle_p(pku_twocycle_p[5]),
640 .pku_idest_p(pku_idest_p[5]),
641 .pku_fdest_p(pku_fdest_p[5]),
642 .pku_isrc_rs1_p(pku_isrc_rs1_p[5]),
643 .pku_isrc_rs2_p(pku_isrc_rs2_p[5]),
644 .pku_isrc_rd_p(pku_isrc_rd_p[5]),
645 .pku_fsrc_rd_p(pku_fsrc_rd_p[5]),
646 .swl_ready_p(swl_ready_p[5]),
647 .swl_spec_ready_p(swl_spec_ready_p[5]),
648 .pku_load_flush_w(pku_load_flush_w[5]),
649 .pku_flush_upper_buffer(pku_flush_upper_buffer[5]),
650 .pku_flush_buffer0(pku_flush_buffer0[5]),
651 .pku_valid_e(pku_valid_e[5]),
652 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[5]),
653 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[5]),
654 .pku_flush_m(pku_flush_m[5]),
655 .pku_flush_b(pku_flush_b[5]),
656 .pku_flush_lm(pku_flush_lm[5]),
657 .pku_flush_lb(pku_flush_lb[5]),
658 .pku_flush_f1(pku_flush_f1[5]),
659 .pku_flush_f2(pku_flush_f2[5]),
660 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken05[1:0]),
661 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken15[1:0]),
662 .pku_ds_e(pku_ds_e[5]),
663 .swl_divide_wait(swl_divide_wait[5]),
664 .swl_cancel_pick_p(swl_cancel_pick_p[5]),
665 .tcu_do_mode(tcu_do_mode),
666 .lsu_pku_pmen(lsu_pku_pmen),
667 .tcu_pce_ov(tcu_pce_ov),
668 .spc_aclk(spc_aclk),
669 .spc_bclk(spc_bclk),
670 .tcu_scan_en(tcu_scan_en)
671);
672
673pku_swl_ctl swl6 (
674 .tlu_halted(tlu_halted[6]),
675 .dec_block_store_stall(dec_block_store_stall[6]),
676 .dec_ierr_d(dec_ierr_d[1]),
677 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[6]),
678 .ifu_buf0_inst(ifu_buf0_inst6[31:0]),
679 .swl_divide_wait_all(swl_divide_wait[7:0]),
680 .fgu_divide_completion(fgu_divide_completion[6]),
681 .lsu_spec_enable(lsu_spec_enable[6]),
682 .spc_core_running_status(spc_core_running_status[6]),
683 .ifu_buf0_valid_p(ifu_buf0_valid_p[6]),
684 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[6]),
685 .pku_raw_pick_p(pku_raw_pick1_p[6]),
686 .tlu_flush_ifu(tlu_flush_ifu[6]),
687 .dec_true_valid_e(dec_true_valid_e[1]),
688 .dec_decode_d(dec_decode1_d),
689 .dec_valid_d(dec_valid1_d),
690 .tlu_retry_state(tlu_retry_state[6]),
691 .lsu_stb_dealloc(lsu_stb_dealloc[6]),
692 .lsu_stb_alloc(lsu_stb_alloc[6]),
693 .lsu_block_store_kill(lsu_block_store_kill[6]),
694 .lsu_sync(lsu_sync[6]),
695 .lsu_complete(lsu_complete[6]),
696 .dec_br_taken_e(dec_br_taken_e[1]),
697 .scan_in(swl6_scanin),
698 .scan_out(swl6_scanout),
699 .l2clk(l2clk),
700 .pku_quiesce(pku_quiesce[6]),
701 .pku_lsu_p(pku_lsu_p[6]),
702 .pku_fgu_p(pku_fgu_p[6]),
703 .pku_pdist_p(pku_pdist_p[6]),
704 .pku_twocycle_p(pku_twocycle_p[6]),
705 .pku_idest_p(pku_idest_p[6]),
706 .pku_fdest_p(pku_fdest_p[6]),
707 .pku_isrc_rs1_p(pku_isrc_rs1_p[6]),
708 .pku_isrc_rs2_p(pku_isrc_rs2_p[6]),
709 .pku_isrc_rd_p(pku_isrc_rd_p[6]),
710 .pku_fsrc_rd_p(pku_fsrc_rd_p[6]),
711 .swl_ready_p(swl_ready_p[6]),
712 .swl_spec_ready_p(swl_spec_ready_p[6]),
713 .pku_load_flush_w(pku_load_flush_w[6]),
714 .pku_flush_upper_buffer(pku_flush_upper_buffer[6]),
715 .pku_flush_buffer0(pku_flush_buffer0[6]),
716 .pku_valid_e(pku_valid_e[6]),
717 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[6]),
718 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[6]),
719 .pku_flush_m(pku_flush_m[6]),
720 .pku_flush_b(pku_flush_b[6]),
721 .pku_flush_lm(pku_flush_lm[6]),
722 .pku_flush_lb(pku_flush_lb[6]),
723 .pku_flush_f1(pku_flush_f1[6]),
724 .pku_flush_f2(pku_flush_f2[6]),
725 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken06[1:0]),
726 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken16[1:0]),
727 .pku_ds_e(pku_ds_e[6]),
728 .swl_divide_wait(swl_divide_wait[6]),
729 .swl_cancel_pick_p(swl_cancel_pick_p[6]),
730 .tcu_do_mode(tcu_do_mode),
731 .lsu_pku_pmen(lsu_pku_pmen),
732 .tcu_pce_ov(tcu_pce_ov),
733 .spc_aclk(spc_aclk),
734 .spc_bclk(spc_bclk),
735 .tcu_scan_en(tcu_scan_en)
736);
737
738pku_swl_ctl swl7 (
739 .tlu_halted(tlu_halted[7]),
740 .dec_block_store_stall(dec_block_store_stall[7]),
741 .dec_ierr_d(dec_ierr_d[1]),
742 .ifu_ibuffer_write_c(ifu_ibuffer_write_c[7]),
743 .ifu_buf0_inst(ifu_buf0_inst7[31:0]),
744 .swl_divide_wait_all(swl_divide_wait[7:0]),
745 .fgu_divide_completion(fgu_divide_completion[7]),
746 .lsu_spec_enable(lsu_spec_enable[7]),
747 .spc_core_running_status(spc_core_running_status[7]),
748 .ifu_buf0_valid_p(ifu_buf0_valid_p[7]),
749 .ifu_upper_buffer_valid_p(ifu_upper_buffer_valid_p[7]),
750 .pku_raw_pick_p(pku_raw_pick1_p[7]),
751 .tlu_flush_ifu(tlu_flush_ifu[7]),
752 .dec_true_valid_e(dec_true_valid_e[1]),
753 .dec_decode_d(dec_decode1_d),
754 .dec_valid_d(dec_valid1_d),
755 .tlu_retry_state(tlu_retry_state[7]),
756 .lsu_stb_dealloc(lsu_stb_dealloc[7]),
757 .lsu_stb_alloc(lsu_stb_alloc[7]),
758 .lsu_block_store_kill(lsu_block_store_kill[7]),
759 .lsu_sync(lsu_sync[7]),
760 .lsu_complete(lsu_complete[7]),
761 .dec_br_taken_e(dec_br_taken_e[1]),
762 .scan_in(swl7_scanin),
763 .scan_out(swl7_scanout),
764 .l2clk(l2clk),
765 .pku_quiesce(pku_quiesce[7]),
766 .pku_lsu_p(pku_lsu_p[7]),
767 .pku_fgu_p(pku_fgu_p[7]),
768 .pku_pdist_p(pku_pdist_p[7]),
769 .pku_twocycle_p(pku_twocycle_p[7]),
770 .pku_idest_p(pku_idest_p[7]),
771 .pku_fdest_p(pku_fdest_p[7]),
772 .pku_isrc_rs1_p(pku_isrc_rs1_p[7]),
773 .pku_isrc_rs2_p(pku_isrc_rs2_p[7]),
774 .pku_isrc_rd_p(pku_isrc_rd_p[7]),
775 .pku_fsrc_rd_p(pku_fsrc_rd_p[7]),
776 .swl_ready_p(swl_ready_p[7]),
777 .swl_spec_ready_p(swl_spec_ready_p[7]),
778 .pku_load_flush_w(pku_load_flush_w[7]),
779 .pku_flush_upper_buffer(pku_flush_upper_buffer[7]),
780 .pku_flush_buffer0(pku_flush_buffer0[7]),
781 .pku_valid_e(pku_valid_e[7]),
782 .pku_annul_ds_dcti_brtaken0_e(pku_annul_ds_dcti_brtaken0_e[7]),
783 .pku_annul_ds_dcti_brtaken1_e(pku_annul_ds_dcti_brtaken1_e[7]),
784 .pku_flush_m(pku_flush_m[7]),
785 .pku_flush_b(pku_flush_b[7]),
786 .pku_flush_lm(pku_flush_lm[7]),
787 .pku_flush_lb(pku_flush_lb[7]),
788 .pku_flush_f1(pku_flush_f1[7]),
789 .pku_flush_f2(pku_flush_f2[7]),
790 .pku_inst_cnt_brtaken0(pku_inst_cnt_brtaken07[1:0]),
791 .pku_inst_cnt_brtaken1(pku_inst_cnt_brtaken17[1:0]),
792 .pku_ds_e(pku_ds_e[7]),
793 .swl_divide_wait(swl_divide_wait[7]),
794 .swl_cancel_pick_p(swl_cancel_pick_p[7]),
795 .tcu_do_mode(tcu_do_mode),
796 .lsu_pku_pmen(lsu_pku_pmen),
797 .tcu_pce_ov(tcu_pce_ov),
798 .spc_aclk(spc_aclk),
799 .spc_bclk(spc_bclk),
800 .tcu_scan_en(tcu_scan_en)
801);
802
803
804pku_pkd_dp pkd1 (
805 .pku_raw_pick_p(pku_raw_pick1_p[7:4]),
806 .dec_decode_d(dec_decode1_d),
807 .dec_valid_d(dec_valid1_d),
808 .swl_cancel_pick_p(swl_cancel_pick_p[7:4]),
809 .pku_flush_buffer0(pku_flush_buffer0[7:4]),
810 .pku_pick_p(pku_pick_p[7:4]),
811 .pku_base_pick_p(pku_base_pick_p[7:4])
812);
813
814pku_pck_ctl pck1 (
815 .pku_pick_p(pku_pick_p[7:4]),
816 .swl_ready_p(swl_ready_p[7:4]),
817 .swl_spec_ready_p(swl_spec_ready_p[7:4]),
818 .ifu_buf0_valid_p(ifu_buf0_valid_p[7:4]),
819 .scan_in(pck1_scanin),
820 .scan_out(pck1_scanout),
821 .l2clk(l2clk),
822 .pku_raw_pick_p(pku_raw_pick1_p[7:4]),
823 .lsu_pku_pmen(lsu_pku_pmen),
824 .tcu_pce_ov(tcu_pce_ov),
825 .spc_aclk(spc_aclk),
826 .spc_bclk(spc_bclk),
827 .tcu_scan_en(tcu_scan_en)
828);
829
830// fixscan start:
831assign swl0_scanin = scan_in ;
832assign swl1_scanin = swl0_scanout ;
833assign swl2_scanin = swl1_scanout ;
834assign swl3_scanin = swl2_scanout ;
835assign pck0_scanin = swl3_scanout ;
836assign swl4_scanin = pck0_scanout ;
837assign swl5_scanin = swl4_scanout ;
838assign swl6_scanin = swl5_scanout ;
839assign swl7_scanin = swl6_scanout ;
840assign pck1_scanin = swl7_scanout ;
841assign scan_out = pck1_scanout ;
842// fixscan end:
843endmodule