Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / exu / rtl / exu.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: exu.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 exu (
36 l2clk,
37 scan_in,
38 wmr_scan_in,
39 tcu_pce_ov,
40 spc_aclk,
41 spc_bclk,
42 spc_aclk_wmr,
43 tcu_scan_en,
44 tcu_array_wr_inhibit,
45 tcu_se_scancollar_in,
46 tcu_dectest,
47 tcu_muxtest,
48 in_rngl_cdbus,
49 dec_tid_p,
50 dec_inst_rs1_vld_p,
51 dec_inst_rs2_vld_p,
52 dec_inst_rs3_vld_p,
53 dec_inst_rs1_p,
54 dec_inst_rs2_p,
55 dec_inst_rs3_p,
56 dec_exu_clken,
57 dec_inst_rd_d,
58 dec_inst_d,
59 dec_decode_d,
60 dec_thread_group,
61 tlu_pc_d,
62 dec_valid_e,
63 tlu_itlb_bypass_e,
64 dec_flush_m,
65 dec_flush_b,
66 fgu_exu_icc_fx5,
67 fgu_exu_xcc_fx5,
68 fgu_exu_cc_vld_fx5,
69 fgu_exu_result_fx5,
70 fgu_result_tid_fx5,
71 fgu_irf_w_addr_fx5,
72 fgu_exu_w_vld_fx5,
73 lsu_exu_ld_data_b,
74 lsu_exu_ld_b,
75 lsu_exu_rd_m,
76 lsu_exu_tid_m,
77 lsu_exu_ld_vld_w,
78 tlu_flush_exu_b,
79 tlu_ccr,
80 tlu_cwp,
81 tlu_ccr_cwp_valid,
82 tlu_ccr_cwp_tid,
83 tlu_pstate_am,
84 tlu_gl_thr0,
85 tlu_gl_thr1,
86 tlu_gl_thr2,
87 tlu_gl_thr3,
88 tlu_cerer_irf,
89 tlu_ceter_pscce,
90 lsu_asi_error_inject_b31,
91 lsu_asi_error_inject_b25,
92 lsu_asi_error_inject,
93 lsu_exu_pmen,
94 lsu_asi_clken,
95 spc_core_running_status,
96 mbi_run,
97 mbi_addr,
98 mbi_write_data_p1,
99 mbi_irf_read_en,
100 mbi_irf_write_en,
101 mbi_irf_save_en,
102 mbi_irf_restore_en,
103 fgu_fld_fcc_fx3,
104 lsu_fgu_fld_tid_b,
105 fgu_fld_fcc_vld_fx3,
106 lsu_fgu_fld_vld_w,
107 fgu_cmp_fcc_fx3,
108 fgu_cmp_fcc_tid_fx2,
109 fgu_cmp_fcc_vld_fx3,
110 dec_pick_d,
111 exu_rngl_cdbus,
112 exu_oddwin_b,
113 exu_address_e,
114 exu_mdp_mux_sel_e,
115 exu_ms_icc_e,
116 exu_rs1_data_e,
117 exu_rs2_data_e,
118 exu_store_data_e,
119 exu_y_data_e,
120 exu_ecc_m,
121 exu_ecc_winop_flush_m,
122 exu_gsr_data_m,
123 exu_gsr_vld_m,
124 exu_lsu_va_error_m,
125 exu_ibp_m,
126 exu_ecc_addr_m,
127 exu_ecc_check_m,
128 exu_cecc_m,
129 exu_uecc_m,
130 exu_misalign_m,
131 exu_oor_va_m,
132 exu_tcc_m,
133 exu_tof_m,
134 exu_trap_number_b,
135 exu_spill_b,
136 exu_fill_m,
137 exu_normal_b,
138 exu_cleanwin_b,
139 exu_wstate_b,
140 exu_ccr0,
141 exu_ccr1,
142 exu_ccr2,
143 exu_ccr3,
144 exu_cwp_thr0,
145 exu_cwp_thr1,
146 exu_cwp_thr2,
147 exu_cwp_thr3,
148 exu_window_block_m,
149 exu_tlu_window_block,
150 exu_test_valid,
151 exu_test_tid,
152 exu_test_addr,
153 exu_mbi_irf_fail_,
154 exu_br_taken_e,
155 exu_br_taken_e1,
156 exu_cmov_true_m,
157 scan_out,
158 wmr_scan_out);
159wire edp_scanin;
160wire edp_scanout;
161wire ect_wmr_scanin;
162wire ect_wmr_scanout;
163wire ect_scanin;
164wire ect_scanout;
165wire [64:0] edp_rng_in_ff;
166wire ecc_scanin;
167wire ecc_scanout;
168wire rml_wmr_scanin;
169wire rml_wmr_scanout;
170wire rml_scanin;
171wire rml_scanout;
172wire irf_scanin;
173wire irf_scanout;
174wire ect_tg_clken;
175wire ect_valid_lth_w;
176wire [1:0] ect_tid_lth_w;
177wire [4:0] ect_rd_lth_w;
178wire [7:0] ecc_w_synd_w;
179wire [63:0] edp_rd_ff_w;
180wire ect_valid_in_w2;
181wire [1:0] ect_tid_lth_w2;
182wire [4:0] ect_rd_lth_w2;
183wire [7:0] ecc_w2_synd_w2;
184wire [63:0] edp_rd_ff_w2;
185wire [1:0] rml_irf_cwpswap_tid_m;
186wire [2:0] rml_irf_old_lo_cwp_m;
187wire [2:1] rml_irf_old_e_cwp_m;
188wire rml_irf_save_even_m;
189wire rml_irf_save_odd_m;
190wire rml_irf_save_local_m;
191wire [1:0] rml_irf_cwpswap_tid_b;
192wire [2:0] rml_irf_new_lo_cwp_b;
193wire [2:1] rml_irf_new_e_cwp_b;
194wire rml_irf_restore_even_b;
195wire rml_irf_restore_odd_b;
196wire rml_irf_restore_local_b;
197wire rml_irf_save_global;
198wire [1:0] rml_irf_global_tid;
199wire [1:0] rml_irf_old_agp;
200wire rml_irf_restore_global;
201wire [1:0] rml_irf_global_tid_ff;
202wire [1:0] rml_irf_new_agp_ff;
203wire [71:0] irf_rs1_data_d;
204wire [71:0] irf_rs2_data_d;
205wire [71:0] irf_rs3_data_d;
206wire [5:0] rml_rng_data_out;
207wire [4:0] rml_rng_rd_ctl;
208wire [1:0] rml_rng_ack_ctl;
209wire [1:0] rml_rng_ack_cwp_tid;
210wire [1:0] rml_rng_ack_ecc_tid;
211wire rml_rng_ack_det_vld;
212wire rml_rng_wt_imask_ctl;
213wire [7:0] rml_irf_ecc_data;
214wire rml_rng_ack_sel_ctl;
215wire [31:0] rml_rng_y_data;
216wire [7:0] ect_rng_ccr_data;
217wire ect_mbist_sel;
218wire [7:0] ecc_mbist_write_data_p4;
219wire [4:0] ect_rs1_early_sel_d;
220wire [4:0] ect_rs2_early_sel_d;
221wire [4:0] ect_rs3_early_sel_d;
222wire [7:0] ect_rs2_imm_sel_d;
223wire [3:0] ect_rs1_late_sel_d;
224wire [3:0] ect_rs2_late_sel_d;
225wire [3:0] ect_rs3_late_sel_d;
226wire [3:0] ect_logic_sel_d;
227wire [6:0] ect_shift_sel_d;
228wire ect_br_taken_z0_e;
229wire ect_br_taken_z1_e;
230wire ect_alignaddress_little_e;
231wire ect_as_clip_e_;
232wire ect_as_cin_e;
233wire [1:0] ect_array_sel_e;
234wire [7:0] ect_edge_lmask_e;
235wire [7:0] ect_edge_lrmask_e;
236wire ect_pstate_am_e;
237wire [5:0] ect_rm_early_sel_e;
238wire [2:0] ect_rm_late_sel_e;
239wire ect_store_mux_sel_e;
240wire ect_ex_emb_clken;
241wire [1:0] edp_br_flag_e;
242wire [63:0] edp_rcc_data_e;
243wire [63:0] edp_rs3_data_e;
244wire [7:0] edp_rcc_ecc_e;
245wire [7:0] edp_rs2_ecc_e;
246wire [7:0] edp_rs3_ecc_e;
247wire edp_add_cout64_e;
248wire edp_add_data_e_b63;
249wire [1:0] edp_add_zdetect_e_;
250wire edp_sub_cout64_e;
251wire edp_sub_data_e_b63;
252wire edp_sub_data_e_b31;
253wire [1:0] edp_sub_zdetect_e_;
254wire edp_logical_data_e_b63;
255wire edp_logical_data_e_b31;
256wire [1:0] edp_lg_zdetect_e;
257wire [63:47] edp_address_m;
258wire [63:47] edp_rd_ff_m;
259wire rml_rng_wt_ccr_ctl;
260wire rml_test_valid_d;
261wire [1:0] ect_tid_lth_e;
262wire [4:0] ect_rs1_addr_e;
263wire [4:0] ect_rs2_addr_e;
264wire [4:0] ect_rs3_addr_e;
265wire ect_rs1_valid_e;
266wire ect_rs2_valid_e;
267wire ect_rs3_valid_e;
268wire ect_two_cycle_m;
269wire ect_yreg_wr_w;
270wire ect_misaligned_error_m;
271
272
273input l2clk;
274input scan_in;
275input wmr_scan_in;
276input tcu_pce_ov; // scan signals
277input spc_aclk;
278input spc_bclk;
279input spc_aclk_wmr;
280input tcu_scan_en;
281input tcu_array_wr_inhibit;
282input tcu_se_scancollar_in;
283input tcu_dectest; // Passgate mux test control
284input tcu_muxtest; // Passgate mux test control
285
286input [64:0] in_rngl_cdbus; // ASI Ring
287
288input [1:0] dec_tid_p;
289input dec_inst_rs1_vld_p;
290input dec_inst_rs2_vld_p;
291input dec_inst_rs3_vld_p;
292input [4:0] dec_inst_rs1_p;
293input [4:0] dec_inst_rs2_p;
294input [4:0] dec_inst_rs3_p;
295
296input dec_exu_clken; // Powerdown for D->E Flops
297input [4:0] dec_inst_rd_d;
298input [31:0] dec_inst_d;
299input dec_decode_d; // Instruction and TID are valid
300input dec_thread_group; // Static Signal : Tie UP or DOWN where cloning occurs
301input [47:2] tlu_pc_d;
302
303input dec_valid_e; // Late "E" Stage Valid
304input tlu_itlb_bypass_e; // Ignore Address Out-Of-Range
305
306input dec_flush_m;
307input dec_flush_b;
308
309input [3:0] fgu_exu_icc_fx5; // FGU int icc cond code {N,Z,V,C}
310input [1:0] fgu_exu_xcc_fx5; // FGU int xcc cond code {N,Z}
311input fgu_exu_cc_vld_fx5; // FGU int icc/xcc cond code valid
312input [63:0] fgu_exu_result_fx5; // FGU Integer results
313input [1:0] fgu_result_tid_fx5;
314input [4:0] fgu_irf_w_addr_fx5;
315input fgu_exu_w_vld_fx5;
316
317input [63:0] lsu_exu_ld_data_b;
318input lsu_exu_ld_b;
319input [4:0] lsu_exu_rd_m;
320input [2:0] lsu_exu_tid_m;
321input lsu_exu_ld_vld_w;
322
323input tlu_flush_exu_b; // EXU to flush instr in B stage
324input [7:0] tlu_ccr;
325input [2:0] tlu_cwp;
326input tlu_ccr_cwp_valid;
327input [1:0] tlu_ccr_cwp_tid;
328input [3:0] tlu_pstate_am; // 32-bit addressing mode if = 1
329
330input [1:0] tlu_gl_thr0; // From TLU : current GL value to update
331input [1:0] tlu_gl_thr1; // From TLU : current GL value to update
332input [1:0] tlu_gl_thr2; // From TLU : current GL value to update
333input [1:0] tlu_gl_thr3; // From TLU : current GL value to update
334
335input tlu_cerer_irf; // IRF ecc error trap enable
336input [3:0] tlu_ceter_pscce; // core error trap enable reg precise enable
337
338
339input lsu_asi_error_inject_b31; // [31]=global inject en
340input lsu_asi_error_inject_b25; // [25]=IRF inject en
341input [7:0] lsu_asi_error_inject; // [7:0]=mask
342input lsu_exu_pmen; // Power Management : Master Enable
343input lsu_asi_clken; // Power Management : ASI ring
344input [3:0] spc_core_running_status; // Power Management : Thread active
345
346input mbi_run; // MBIST
347input [9:0] mbi_addr; // MBIST
348input [7:0] mbi_write_data_p1; // MBIST
349input mbi_irf_read_en; // MBIST
350input mbi_irf_write_en; // MBIST
351input mbi_irf_save_en; // MBIST
352input mbi_irf_restore_en; // MBIST
353
354// *** DEC_CCR Inputs ***
355
356input [7:0] fgu_fld_fcc_fx3; // fcc's from the fgu
357input [2:0] lsu_fgu_fld_tid_b;
358input [1:0] fgu_fld_fcc_vld_fx3;
359input lsu_fgu_fld_vld_w; // Float load valid
360
361input [1:0] fgu_cmp_fcc_fx3; // fcc's from the fgu
362input [2:0] fgu_cmp_fcc_tid_fx2;
363input [3:0] fgu_cmp_fcc_vld_fx3;
364
365input [3:0] dec_pick_d; // which stand is valid at d
366
367
368output [64:0] exu_rngl_cdbus; // ASI Ring
369
370output [3:0] exu_oddwin_b; // To Decode
371output [47:0] exu_address_e; // To IFU and LSU
372output [5:0] exu_mdp_mux_sel_e; // To MDP
373output exu_ms_icc_e;
374output [63:0] exu_rs1_data_e; // To MDP
375output [63:0] exu_rs2_data_e; // To MDP
376output [63:0] exu_store_data_e; // To LSU
377output [31:0] exu_y_data_e; // To MDP
378
379output exu_ecc_m; // To FGU
380output exu_ecc_winop_flush_m; // To FGU : signal "1" when ECC or WINOP exception
381 // to flush FGU
382output [31:0] exu_gsr_data_m; // To FGU
383output [1:0] exu_gsr_vld_m; // To FGU
384output exu_lsu_va_error_m; // To LSU : Address Out of Range
385
386output exu_ibp_m; // To TLU : Raw Intruction Breakpoint
387output [4:0] exu_ecc_addr_m; // To TLU :
388output [7:0] exu_ecc_check_m; // To TLU :
389output exu_cecc_m; // To TLU : Correctable ECC Error
390output exu_uecc_m; // To TLU : Uncorrectable ECC Error
391
392output exu_misalign_m; // To TLU : Misaligned address for Jump,Return
393output exu_oor_va_m; // To TLU : Address Out of Range
394output exu_tcc_m; // To TLU : Trap taken
395output exu_tof_m; // To TLU : Tagged Add TV with overflow
396output [7:0] exu_trap_number_b; // To TLU
397
398output exu_spill_b; // To TLU : report window spill exception
399output exu_fill_m; // To TLU : report window fill exception
400output exu_normal_b; // To TLU : report window spill/fill exception type
401output exu_cleanwin_b; // To TLU : report clean window exception
402output [2:0] exu_wstate_b; // To TLU : report fill/spill vector
403
404output [7:0] exu_ccr0; // To TLU : Architected CCR
405output [7:0] exu_ccr1; // To TLU : Architected CCR
406output [7:0] exu_ccr2; // To TLU : Architected CCR
407output [7:0] exu_ccr3; // To TLU : Architected CCR
408
409output [2:0] exu_cwp_thr0; // To TLU : Current Window Pointer - thr0
410output [2:0] exu_cwp_thr1; // To TLU : Current Window Pointer - thr1
411output [2:0] exu_cwp_thr2; // To TLU : Current Window Pointer - thr2
412output [2:0] exu_cwp_thr3; // To TLU : Current Window Pointer - thr3
413
414output exu_window_block_m; // create bubble for SWAP signal for IRF
415output exu_tlu_window_block; // create bubble for SWAP signal for IRF
416
417output exu_test_valid; // To PKU : read IRF data
418output [1:0] exu_test_tid;
419output [4:0] exu_test_addr;
420
421output [1:0] exu_mbi_irf_fail_; // MBIST [0] == [63:0]; [1] == [71:64]
422
423
424// *** DEC_CCR Outputs ***
425
426output exu_br_taken_e; // To IFU : branch is taken
427output exu_br_taken_e1; // To DEC_DEL and PKU : branch is taken
428output exu_cmov_true_m;
429
430output scan_out;
431output wmr_scan_out;
432
433
434
435exu_edp_dp edp (
436.scan_in(edp_scanin),
437.scan_out(edp_scanout),
438.l2clk(l2clk),
439 .tcu_pce_ov(tcu_pce_ov),
440 .spc_aclk(spc_aclk),
441 .spc_bclk(spc_bclk),
442 .tcu_scan_en(tcu_scan_en),
443 .tcu_dectest(tcu_dectest),
444 .tcu_muxtest(tcu_muxtest),
445 .in_rngl_cdbus(in_rngl_cdbus[64:0]),
446 .tlu_pc_d(tlu_pc_d[47:2]),
447 .dec_inst_d(dec_inst_d[31:0]),
448 .dec_thread_group(dec_thread_group),
449 .dec_exu_clken(dec_exu_clken),
450 .fgu_exu_w_vld_fx5(fgu_exu_w_vld_fx5),
451 .fgu_exu_result_fx5(fgu_exu_result_fx5[63:0]),
452 .irf_rs1_data_d(irf_rs1_data_d[71:0]),
453 .irf_rs2_data_d(irf_rs2_data_d[71:0]),
454 .irf_rs3_data_d(irf_rs3_data_d[71:0]),
455 .lsu_asi_clken(lsu_asi_clken),
456 .lsu_exu_ld_data_b(lsu_exu_ld_data_b[63:0]),
457 .mbi_write_data_p1(mbi_write_data_p1[7:0]),
458 .exu_y_data_e(exu_y_data_e[31:0]),
459 .rml_rng_data_out(rml_rng_data_out[5:0]),
460 .rml_rng_rd_ctl(rml_rng_rd_ctl[4:0]),
461 .rml_rng_ack_ctl(rml_rng_ack_ctl[1:0]),
462 .rml_rng_ack_cwp_tid(rml_rng_ack_cwp_tid[1:0]),
463 .rml_rng_ack_ecc_tid(rml_rng_ack_ecc_tid[1:0]),
464 .rml_rng_ack_det_vld(rml_rng_ack_det_vld),
465 .rml_rng_wt_imask_ctl(rml_rng_wt_imask_ctl),
466 .rml_irf_ecc_data(rml_irf_ecc_data[7:0]),
467 .rml_rng_ack_sel_ctl(rml_rng_ack_sel_ctl),
468 .rml_rng_y_data(rml_rng_y_data[31:0]),
469 .ect_rng_ccr_data(ect_rng_ccr_data[7:0]),
470 .ect_mbist_sel(ect_mbist_sel),
471 .ecc_mbist_write_data_p4(ecc_mbist_write_data_p4[7:0]),
472 .ect_rs1_early_sel_d(ect_rs1_early_sel_d[4:0]),
473 .ect_rs2_early_sel_d(ect_rs2_early_sel_d[4:0]),
474 .ect_rs3_early_sel_d(ect_rs3_early_sel_d[4:0]),
475 .ect_rs2_imm_sel_d(ect_rs2_imm_sel_d[7:0]),
476 .ect_rs1_late_sel_d(ect_rs1_late_sel_d[3:0]),
477 .ect_rs2_late_sel_d(ect_rs2_late_sel_d[3:0]),
478 .ect_rs3_late_sel_d(ect_rs3_late_sel_d[3:0]),
479 .ect_logic_sel_d(ect_logic_sel_d[3:0]),
480 .ect_shift_sel_d(ect_shift_sel_d[6:0]),
481 .ect_br_taken_z0_e(ect_br_taken_z0_e),
482 .ect_br_taken_z1_e(ect_br_taken_z1_e),
483 .ect_alignaddress_little_e(ect_alignaddress_little_e),
484 .ect_as_clip_e_(ect_as_clip_e_),
485 .ect_as_cin_e(ect_as_cin_e),
486 .ect_array_sel_e(ect_array_sel_e[1:0]),
487 .ect_edge_lmask_e(ect_edge_lmask_e[7:0]),
488 .ect_edge_lrmask_e(ect_edge_lrmask_e[7:0]),
489 .ect_pstate_am_e(ect_pstate_am_e),
490 .ect_rm_early_sel_e(ect_rm_early_sel_e[5:0]),
491 .ect_rm_late_sel_e(ect_rm_late_sel_e[2:0]),
492 .ect_store_mux_sel_e(ect_store_mux_sel_e),
493 .ect_ex_emb_clken(ect_ex_emb_clken),
494 .ect_tg_clken(ect_tg_clken),
495 .exu_rngl_cdbus(exu_rngl_cdbus[64:0]),
496 .exu_br_taken_e(exu_br_taken_e),
497 .exu_br_taken_e1(exu_br_taken_e1),
498 .exu_address_e(exu_address_e[47:0]),
499 .exu_gsr_data_m(exu_gsr_data_m[31:0]),
500 .exu_store_data_e(exu_store_data_e[63:0]),
501 .exu_ibp_m(exu_ibp_m),
502 .exu_trap_number_b(exu_trap_number_b[7:0]),
503 .exu_mbi_irf_fail_(exu_mbi_irf_fail_[1:0]),
504 .edp_rng_in_ff(edp_rng_in_ff[64:0]),
505 .edp_br_flag_e(edp_br_flag_e[1:0]),
506 .exu_rs1_data_e(exu_rs1_data_e[63:0]),
507 .edp_rcc_data_e(edp_rcc_data_e[63:0]),
508 .exu_rs2_data_e(exu_rs2_data_e[63:0]),
509 .edp_rs3_data_e(edp_rs3_data_e[63:0]),
510 .edp_rcc_ecc_e(edp_rcc_ecc_e[7:0]),
511 .edp_rs2_ecc_e(edp_rs2_ecc_e[7:0]),
512 .edp_rs3_ecc_e(edp_rs3_ecc_e[7:0]),
513 .edp_add_cout64_e(edp_add_cout64_e),
514 .edp_add_data_e_b63(edp_add_data_e_b63),
515 .edp_add_zdetect_e_(edp_add_zdetect_e_[1:0]),
516 .edp_sub_cout64_e(edp_sub_cout64_e),
517 .edp_sub_data_e_b63(edp_sub_data_e_b63),
518 .edp_sub_data_e_b31(edp_sub_data_e_b31),
519 .edp_sub_zdetect_e_(edp_sub_zdetect_e_[1:0]),
520 .edp_logical_data_e_b63(edp_logical_data_e_b63),
521 .edp_logical_data_e_b31(edp_logical_data_e_b31),
522 .edp_lg_zdetect_e(edp_lg_zdetect_e[1:0]),
523 .edp_address_m(edp_address_m[63:47]),
524 .edp_rd_ff_m(edp_rd_ff_m[63:47]),
525 .edp_rd_ff_w(edp_rd_ff_w[63:0]),
526 .edp_rd_ff_w2(edp_rd_ff_w2[63:0])
527);
528
529exu_ect_ctl ect ( // FS:wmr_protect
530.wmr_scan_in(ect_wmr_scanin),
531.wmr_scan_out(ect_wmr_scanout),
532.scan_in(ect_scanin),
533.scan_out(ect_scanout),
534.l2clk(l2clk),
535.edp_add_data_e_b0 ( exu_address_e[0] ),
536.edp_add_data_e_b1 ( exu_address_e[1] ),
537.edp_add_data_e_b31( exu_address_e[31] ),
538.edp_rng_in_ff_b57 ( edp_rng_in_ff[57] ),
539.edp_rng_in_ff_b56 ( edp_rng_in_ff[56] ),
540 .tcu_pce_ov(tcu_pce_ov),
541 .spc_aclk(spc_aclk),
542 .spc_bclk(spc_bclk),
543 .spc_aclk_wmr(spc_aclk_wmr),
544 .tcu_scan_en(tcu_scan_en),
545 .dec_tid_p(dec_tid_p[1:0]),
546 .dec_inst_rs1_vld_p(dec_inst_rs1_vld_p),
547 .dec_inst_rs2_vld_p(dec_inst_rs2_vld_p),
548 .dec_inst_rs3_vld_p(dec_inst_rs3_vld_p),
549 .dec_inst_rs1_p(dec_inst_rs1_p[4:0]),
550 .dec_inst_rs2_p(dec_inst_rs2_p[4:0]),
551 .dec_inst_rs3_p(dec_inst_rs3_p[4:0]),
552 .dec_inst_rd_d(dec_inst_rd_d[4:0]),
553 .dec_inst_d(dec_inst_d[31:5]),
554 .dec_decode_d(dec_decode_d),
555 .dec_thread_group(dec_thread_group),
556 .dec_valid_e(dec_valid_e),
557 .tlu_itlb_bypass_e(tlu_itlb_bypass_e),
558 .dec_flush_m(dec_flush_m),
559 .dec_flush_b(dec_flush_b),
560 .fgu_exu_icc_fx5(fgu_exu_icc_fx5[3:0]),
561 .fgu_exu_xcc_fx5(fgu_exu_xcc_fx5[1:0]),
562 .fgu_exu_cc_vld_fx5(fgu_exu_cc_vld_fx5),
563 .fgu_result_tid_fx5(fgu_result_tid_fx5[1:0]),
564 .fgu_irf_w_addr_fx5(fgu_irf_w_addr_fx5[4:0]),
565 .fgu_exu_w_vld_fx5(fgu_exu_w_vld_fx5),
566 .lsu_exu_ld_b(lsu_exu_ld_b),
567 .lsu_exu_rd_m(lsu_exu_rd_m[4:0]),
568 .lsu_exu_tid_m(lsu_exu_tid_m[2:0]),
569 .lsu_exu_ld_vld_w(lsu_exu_ld_vld_w),
570 .tlu_flush_exu_b(tlu_flush_exu_b),
571 .tlu_ccr(tlu_ccr[7:0]),
572 .tlu_ccr_cwp_valid(tlu_ccr_cwp_valid),
573 .tlu_ccr_cwp_tid(tlu_ccr_cwp_tid[1:0]),
574 .tlu_pstate_am(tlu_pstate_am[3:0]),
575 .lsu_exu_pmen(lsu_exu_pmen),
576 .spc_core_running_status(spc_core_running_status[3:0]),
577 .mbi_run(mbi_run),
578 .mbi_addr(mbi_addr[6:0]),
579 .mbi_irf_write_en(mbi_irf_write_en),
580 .edp_rng_in_ff(edp_rng_in_ff[7:0]),
581 .rml_rng_wt_ccr_ctl(rml_rng_wt_ccr_ctl),
582 .edp_br_flag_e(edp_br_flag_e[1:0]),
583 .exu_rs1_data_e(exu_rs1_data_e[63:0]),
584 .exu_rs2_data_e(exu_rs2_data_e[63:0]),
585 .edp_add_cout64_e(edp_add_cout64_e),
586 .edp_add_data_e_b63(edp_add_data_e_b63),
587 .edp_add_zdetect_e_(edp_add_zdetect_e_[1:0]),
588 .edp_sub_cout64_e(edp_sub_cout64_e),
589 .edp_sub_data_e_b63(edp_sub_data_e_b63),
590 .edp_sub_data_e_b31(edp_sub_data_e_b31),
591 .edp_sub_zdetect_e_(edp_sub_zdetect_e_[1:0]),
592 .edp_logical_data_e_b63(edp_logical_data_e_b63),
593 .edp_logical_data_e_b31(edp_logical_data_e_b31),
594 .edp_lg_zdetect_e(edp_lg_zdetect_e[1:0]),
595 .edp_address_m(edp_address_m[63:47]),
596 .edp_rd_ff_m(edp_rd_ff_m[63:47]),
597 .exu_ecc_m(exu_ecc_m),
598 .rml_test_valid_d(rml_test_valid_d),
599 .fgu_fld_fcc_fx3(fgu_fld_fcc_fx3[7:0]),
600 .lsu_fgu_fld_tid_b(lsu_fgu_fld_tid_b[2:0]),
601 .fgu_fld_fcc_vld_fx3(fgu_fld_fcc_vld_fx3[1:0]),
602 .lsu_fgu_fld_vld_w(lsu_fgu_fld_vld_w),
603 .fgu_cmp_fcc_fx3(fgu_cmp_fcc_fx3[1:0]),
604 .fgu_cmp_fcc_tid_fx2(fgu_cmp_fcc_tid_fx2[2:0]),
605 .fgu_cmp_fcc_vld_fx3(fgu_cmp_fcc_vld_fx3[3:0]),
606 .dec_pick_d(dec_pick_d[3:0]),
607 .exu_mdp_mux_sel_e(exu_mdp_mux_sel_e[5:0]),
608 .exu_ms_icc_e(exu_ms_icc_e),
609 .exu_gsr_vld_m(exu_gsr_vld_m[1:0]),
610 .exu_cmov_true_m(exu_cmov_true_m),
611 .exu_lsu_va_error_m(exu_lsu_va_error_m),
612 .exu_misalign_m(exu_misalign_m),
613 .exu_oor_va_m(exu_oor_va_m),
614 .exu_tcc_m(exu_tcc_m),
615 .exu_tof_m(exu_tof_m),
616 .exu_ccr0(exu_ccr0[7:0]),
617 .exu_ccr1(exu_ccr1[7:0]),
618 .exu_ccr2(exu_ccr2[7:0]),
619 .exu_ccr3(exu_ccr3[7:0]),
620 .ect_mbist_sel(ect_mbist_sel),
621 .ect_rs1_early_sel_d(ect_rs1_early_sel_d[4:0]),
622 .ect_rs2_early_sel_d(ect_rs2_early_sel_d[4:0]),
623 .ect_rs3_early_sel_d(ect_rs3_early_sel_d[4:0]),
624 .ect_rs2_imm_sel_d(ect_rs2_imm_sel_d[7:0]),
625 .ect_rs1_late_sel_d(ect_rs1_late_sel_d[3:0]),
626 .ect_rs2_late_sel_d(ect_rs2_late_sel_d[3:0]),
627 .ect_rs3_late_sel_d(ect_rs3_late_sel_d[3:0]),
628 .ect_logic_sel_d(ect_logic_sel_d[3:0]),
629 .ect_shift_sel_d(ect_shift_sel_d[6:0]),
630 .ect_br_taken_z0_e(ect_br_taken_z0_e),
631 .ect_br_taken_z1_e(ect_br_taken_z1_e),
632 .ect_alignaddress_little_e(ect_alignaddress_little_e),
633 .ect_as_clip_e_(ect_as_clip_e_),
634 .ect_as_cin_e(ect_as_cin_e),
635 .ect_array_sel_e(ect_array_sel_e[1:0]),
636 .ect_edge_lmask_e(ect_edge_lmask_e[7:0]),
637 .ect_edge_lrmask_e(ect_edge_lrmask_e[7:0]),
638 .ect_pstate_am_e(ect_pstate_am_e),
639 .ect_rm_early_sel_e(ect_rm_early_sel_e[5:0]),
640 .ect_rm_late_sel_e(ect_rm_late_sel_e[2:0]),
641 .ect_store_mux_sel_e(ect_store_mux_sel_e),
642 .ect_tid_lth_e(ect_tid_lth_e[1:0]),
643 .ect_rs1_addr_e(ect_rs1_addr_e[4:0]),
644 .ect_rs2_addr_e(ect_rs2_addr_e[4:0]),
645 .ect_rs3_addr_e(ect_rs3_addr_e[4:0]),
646 .ect_rs1_valid_e(ect_rs1_valid_e),
647 .ect_rs2_valid_e(ect_rs2_valid_e),
648 .ect_rs3_valid_e(ect_rs3_valid_e),
649 .ect_two_cycle_m(ect_two_cycle_m),
650 .ect_rd_lth_w(ect_rd_lth_w[4:0]),
651 .ect_rd_lth_w2(ect_rd_lth_w2[4:0]),
652 .ect_tid_lth_w(ect_tid_lth_w[1:0]),
653 .ect_tid_lth_w2(ect_tid_lth_w2[1:0]),
654 .ect_valid_lth_w(ect_valid_lth_w),
655 .ect_valid_in_w2(ect_valid_in_w2),
656 .ect_yreg_wr_w(ect_yreg_wr_w),
657 .ect_rng_ccr_data(ect_rng_ccr_data[7:0]),
658 .ect_misaligned_error_m(ect_misaligned_error_m),
659 .ect_ex_emb_clken(ect_ex_emb_clken),
660 .ect_tg_clken(ect_tg_clken)
661);
662
663exu_ecc_ctl ecc (
664.scan_in(ecc_scanin),
665.scan_out(ecc_scanout),
666.l2clk(l2clk),
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 .ect_mbist_sel(ect_mbist_sel),
672 .mbi_write_data_p1(mbi_write_data_p1[7:0]),
673 .edp_rd_ff_w(edp_rd_ff_w[63:0]),
674 .edp_rd_ff_w2(edp_rd_ff_w2[63:0]),
675 .tlu_cerer_irf(tlu_cerer_irf),
676 .tlu_ceter_pscce(tlu_ceter_pscce[3:0]),
677 .lsu_asi_error_inject_b31(lsu_asi_error_inject_b31),
678 .lsu_asi_error_inject_b25(lsu_asi_error_inject_b25),
679 .lsu_asi_error_inject(lsu_asi_error_inject[7:0]),
680 .ecc_w_synd_w(ecc_w_synd_w[7:0]),
681 .ecc_w2_synd_w2(ecc_w2_synd_w2[7:0]),
682 .ecc_mbist_write_data_p4(ecc_mbist_write_data_p4[7:0]),
683 .ect_ex_emb_clken(ect_ex_emb_clken),
684 .ect_tg_clken(ect_tg_clken),
685 .ect_tid_lth_e(ect_tid_lth_e[1:0]),
686 .ect_rs1_valid_e(ect_rs1_valid_e),
687 .ect_rs2_valid_e(ect_rs2_valid_e),
688 .ect_rs3_valid_e(ect_rs3_valid_e),
689 .ect_two_cycle_m(ect_two_cycle_m),
690 .ect_rs1_addr_e(ect_rs1_addr_e[4:0]),
691 .ect_rs2_addr_e(ect_rs2_addr_e[4:0]),
692 .ect_rs3_addr_e(ect_rs3_addr_e[4:0]),
693 .edp_rcc_data_e(edp_rcc_data_e[63:0]),
694 .exu_rs2_data_e(exu_rs2_data_e[63:0]),
695 .edp_rs3_data_e(edp_rs3_data_e[63:0]),
696 .edp_rcc_ecc_e(edp_rcc_ecc_e[7:0]),
697 .edp_rs2_ecc_e(edp_rs2_ecc_e[7:0]),
698 .edp_rs3_ecc_e(edp_rs3_ecc_e[7:0]),
699 .dec_valid_e(dec_valid_e),
700 .dec_flush_m(dec_flush_m),
701 .exu_ecc_check_m(exu_ecc_check_m[7:0]),
702 .exu_ecc_addr_m(exu_ecc_addr_m[4:0]),
703 .exu_ecc_m(exu_ecc_m),
704 .exu_cecc_m(exu_cecc_m),
705 .exu_uecc_m(exu_uecc_m)
706);
707
708exu_rml_ctl rml ( // FS:wmr_protect
709.wmr_scan_in(rml_wmr_scanin),
710.wmr_scan_out(rml_wmr_scanout),
711.scan_in(rml_scanin),
712.scan_out(rml_scanout),
713.l2clk(l2clk),
714 .tcu_pce_ov(tcu_pce_ov),
715 .spc_aclk(spc_aclk),
716 .spc_bclk(spc_bclk),
717 .spc_aclk_wmr(spc_aclk_wmr),
718 .tcu_scan_en(tcu_scan_en),
719 .dec_tid_p(dec_tid_p[1:0]),
720 .dec_inst_d(dec_inst_d[31:13]),
721 .dec_valid_e(dec_valid_e),
722 .dec_thread_group(dec_thread_group),
723 .tlu_flush_exu_b(tlu_flush_exu_b),
724 .dec_flush_m(dec_flush_m),
725 .dec_flush_b(dec_flush_b),
726 .tlu_gl_thr0(tlu_gl_thr0[1:0]),
727 .tlu_gl_thr1(tlu_gl_thr1[1:0]),
728 .tlu_gl_thr2(tlu_gl_thr2[1:0]),
729 .tlu_gl_thr3(tlu_gl_thr3[1:0]),
730 .tlu_ccr_cwp_valid(tlu_ccr_cwp_valid),
731 .tlu_ccr_cwp_tid(tlu_ccr_cwp_tid[1:0]),
732 .tlu_cwp(tlu_cwp[2:0]),
733 .mbi_run(mbi_run),
734 .mbi_addr(mbi_addr[9:0]),
735 .mbi_irf_read_en(mbi_irf_read_en),
736 .mbi_irf_save_en(mbi_irf_save_en),
737 .mbi_irf_restore_en(mbi_irf_restore_en),
738 .edp_rng_in_ff(edp_rng_in_ff[64:0]),
739 .edp_rd_ff_w(edp_rd_ff_w[63:32]),
740 .ect_misaligned_error_m(ect_misaligned_error_m),
741 .ect_yreg_wr_w(ect_yreg_wr_w),
742 .ect_tid_lth_w(ect_tid_lth_w[1:0]),
743 .exu_lsu_va_error_m(exu_lsu_va_error_m),
744 .exu_ecc_m(exu_ecc_m),
745 .edp_rs3_ecc_e(edp_rs3_ecc_e[7:0]),
746 .ect_tg_clken(ect_tg_clken),
747 .exu_y_data_e(exu_y_data_e[31:0]),
748 .exu_fill_m(exu_fill_m),
749 .exu_spill_b(exu_spill_b),
750 .exu_normal_b(exu_normal_b),
751 .exu_cleanwin_b(exu_cleanwin_b),
752 .exu_wstate_b(exu_wstate_b[2:0]),
753 .exu_cwp_thr0(exu_cwp_thr0[2:0]),
754 .exu_cwp_thr1(exu_cwp_thr1[2:0]),
755 .exu_cwp_thr2(exu_cwp_thr2[2:0]),
756 .exu_cwp_thr3(exu_cwp_thr3[2:0]),
757 .exu_oddwin_b(exu_oddwin_b[3:0]),
758 .exu_window_block_m(exu_window_block_m),
759 .exu_tlu_window_block(exu_tlu_window_block),
760 .exu_ecc_winop_flush_m(exu_ecc_winop_flush_m),
761 .exu_test_valid(exu_test_valid),
762 .exu_test_tid(exu_test_tid[1:0]),
763 .exu_test_addr(exu_test_addr[4:0]),
764 .rml_test_valid_d(rml_test_valid_d),
765 .rml_rng_data_out(rml_rng_data_out[5:0]),
766 .rml_rng_rd_ctl(rml_rng_rd_ctl[4:0]),
767 .rml_rng_ack_ctl(rml_rng_ack_ctl[1:0]),
768 .rml_rng_ack_cwp_tid(rml_rng_ack_cwp_tid[1:0]),
769 .rml_rng_ack_ecc_tid(rml_rng_ack_ecc_tid[1:0]),
770 .rml_rng_ack_det_vld(rml_rng_ack_det_vld),
771 .rml_rng_wt_imask_ctl(rml_rng_wt_imask_ctl),
772 .rml_rng_wt_ccr_ctl(rml_rng_wt_ccr_ctl),
773 .rml_irf_ecc_data(rml_irf_ecc_data[7:0]),
774 .rml_rng_ack_sel_ctl(rml_rng_ack_sel_ctl),
775 .rml_rng_y_data(rml_rng_y_data[31:0]),
776 .rml_irf_cwpswap_tid_m(rml_irf_cwpswap_tid_m[1:0]),
777 .rml_irf_old_lo_cwp_m(rml_irf_old_lo_cwp_m[2:0]),
778 .rml_irf_old_e_cwp_m(rml_irf_old_e_cwp_m[2:1]),
779 .rml_irf_cwpswap_tid_b(rml_irf_cwpswap_tid_b[1:0]),
780 .rml_irf_new_lo_cwp_b(rml_irf_new_lo_cwp_b[2:0]),
781 .rml_irf_new_e_cwp_b(rml_irf_new_e_cwp_b[2:1]),
782 .rml_irf_save_even_m(rml_irf_save_even_m),
783 .rml_irf_save_odd_m(rml_irf_save_odd_m),
784 .rml_irf_save_local_m(rml_irf_save_local_m),
785 .rml_irf_restore_even_b(rml_irf_restore_even_b),
786 .rml_irf_restore_odd_b(rml_irf_restore_odd_b),
787 .rml_irf_restore_local_b(rml_irf_restore_local_b),
788 .rml_irf_global_tid(rml_irf_global_tid[1:0]),
789 .rml_irf_global_tid_ff(rml_irf_global_tid_ff[1:0]),
790 .rml_irf_old_agp(rml_irf_old_agp[1:0]),
791 .rml_irf_new_agp_ff(rml_irf_new_agp_ff[1:0]),
792 .rml_irf_save_global(rml_irf_save_global),
793 .rml_irf_restore_global(rml_irf_restore_global)
794);
795
796
797
798
799
800// Note : All IRF READ/WRITE/SAVE/RESTORE pins are flopped inside the IRF.
801// Note : The save and restore have one full cycle to decode. The actual save or restore will occur in the 1st phase of the cycle after decode.
802// Note : The READ and WRITE decode in the 1st phase and the actual read/write occurs in the 2nd phase.
803
804// Note : To delay a signal in a 0in assertion : use "$0in_delay(signal_name,# of cycles)" example $0in_delay(a_wr_en_p0,1)
805
806
807// 0. N2 : Read and Write without bypassing
808// 1. N1 : WRITE p0 and WRITE p1 to the same TID in the same cycle
809// 2. N2 : Any WRITE port followed by a SAVE in the 1st phase of next cycle (coded as the SAVE pins the same cycle as the WRITE pins)
810// 3. N1 : Any WRITE port followed by a RESTORE in the 1st phase of next cycle (coded as the RESTORE pins the same cycle as the WRITE pins)
811// 4. N1 : Any READ port followed by a SAVE in the 1st phase of next cycle (coded as the SAVE pins the same cycle as the READ pins)
812// 5. N1 : Any READ port followed by a RESTORE in the 1st phase of next cycle (coded as the RESTORE pins the same cycle as the READ pins)
813// 6. N2 : Any SAVE port followed by a READ in the same cycle (coded as the SAVE pins one cycle ahead of the READ pins)
814// 7. N2 : Any RESTORE port followed by a READ in the same cycle (coded as the RESTORE pins one cycle ahead of the READ pins)
815// 8. N2 : Any SAVE port followed by a WRITE in the same cycle (coded as the SAVE pins one cycle ahead as the WRITE pins)
816// 9. N2 : Any RESTORE port followed by a WRITE in the same cycle (coded as the RESTORE pins one cycle ahead as the WRITE pins)
817
818
819// #0
820// 0in custom -fire ( $0in_delay((dec_inst_rs1_vld_p & ect_valid_lth_w & (dec_tid_p[1:0] == ect_tid_lth_w[1:0]) & (dec_inst_rs1_p[4:0] == ect_rd_lth_w[4:0] )),1) & (ect_rs1_late_sel_d[3:1] == 3'b000 )) -message "IRF p0 write & p0 read without bypass" -group core_array
821// 0in custom -fire ( $0in_delay((dec_inst_rs2_vld_p & ect_valid_lth_w & (dec_tid_p[1:0] == ect_tid_lth_w[1:0]) & (dec_inst_rs2_p[4:0] == ect_rd_lth_w[4:0] )),1) & (ect_rs2_late_sel_d[3:0] == 4'b0000)) -message "IRF p0 write & p1 read without bypass" -group core_array
822// 0in custom -fire ( $0in_delay((dec_inst_rs3_vld_p & ect_valid_lth_w & (dec_tid_p[1:0] == ect_tid_lth_w[1:0]) & (dec_inst_rs3_p[4:0] == ect_rd_lth_w[4:0] )),1) & (ect_rs3_late_sel_d[3:0] == 4'b0000)) -message "IRF p0 write & p2 read without bypass" -group core_array
823// 0in custom -fire ( $0in_delay((dec_inst_rs1_vld_p & ect_valid_in_w2 & (dec_tid_p[1:0] == ect_tid_lth_w2[1:0]) & (dec_inst_rs1_p[4:0] == ect_rd_lth_w2[4:0])),1) & (ect_rs1_late_sel_d[3:1] == 3'b000 )) -message "IRF p1 write & p0 read without bypass" -group core_array
824// 0in custom -fire ( $0in_delay((dec_inst_rs2_vld_p & ect_valid_in_w2 & (dec_tid_p[1:0] == ect_tid_lth_w2[1:0]) & (dec_inst_rs2_p[4:0] == ect_rd_lth_w2[4:0])),1) & (ect_rs2_late_sel_d[3:0] == 4'b0000)) -message "IRF p1 write & p1 read without bypass" -group core_array
825// 0in custom -fire ( $0in_delay((dec_inst_rs3_vld_p & ect_valid_in_w2 & (dec_tid_p[1:0] == ect_tid_lth_w2[1:0]) & (dec_inst_rs3_p[4:0] == ect_rd_lth_w2[4:0])),1) & (ect_rs3_late_sel_d[3:0] == 4'b0000)) -message "IRF p1 write & p2 read without bypass" -group core_array
826
827// #1
828// 0in custom -fire (ect_valid_lth_w & ect_valid_in_w2 & (ect_tid_lth_w[1:0] == ect_tid_lth_w2[1:0]) ) -message "IRF p0 & p1 ports wrote to same TID" -group core_array
829
830// #2
831// 0in custom -fire (ect_valid_lth_w & (rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ) & (ect_tid_lth_w[1:0] == rml_irf_cwpswap_tid_m[1:0])) -message "IRF p0 write & save to same TID" -group core_array
832// 0in custom -fire (ect_valid_in_w2 & (rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ) & (ect_tid_lth_w2[1:0] == rml_irf_cwpswap_tid_m[1:0])) -message "IRF p1 write & save to same TID" -group core_array
833// 0in custom -fire (ect_valid_lth_w & rml_irf_save_global & (ect_tid_lth_w[1:0] == rml_irf_global_tid[1:0]) ) -message "IRF p0 write & save global to same TID" -group core_array
834// 0in custom -fire (ect_valid_in_w2 & rml_irf_save_global & (ect_tid_lth_w2[1:0] == rml_irf_global_tid[1:0]) ) -message "IRF p1 write & save global to same TID" -group core_array
835
836// #3
837// 0in custom -fire (ect_valid_lth_w & (rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b) & (ect_tid_lth_w[1:0] == rml_irf_cwpswap_tid_b[1:0])) -message "IRF p0 write & restore to same TID" -group core_array
838// 0in custom -fire (ect_valid_in_w2 & (rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b) & (ect_tid_lth_w2[1:0] == rml_irf_cwpswap_tid_b[1:0])) -message "IRF p1 write & restore to same TID" -group core_array
839// 0in custom -fire (ect_valid_lth_w & rml_irf_restore_global & (ect_tid_lth_w[1:0] == rml_irf_global_tid_ff[1:0])) -message "IRF p0 write & restore global to same TID" -group core_array
840// 0in custom -fire (ect_valid_in_w2 & rml_irf_restore_global & (ect_tid_lth_w2[1:0] == rml_irf_global_tid_ff[1:0])) -message "IRF p1 write & restore global to same TID" -group core_array
841
842// #4
843// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & (rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_m[1:0])),2))) -message "IRF p0 read & save to same TID" -group core_array
844// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & rml_irf_save_global & (dec_tid_p[1:0] == rml_irf_global_tid[1:0] )),2))) -message "IRF p0 read & save global to same TID" -group core_array
845// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & (rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_m[1:0])),2))) -message "IRF p1 read & save to same TID" -group core_array
846// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & rml_irf_save_global & (dec_tid_p[1:0] == rml_irf_global_tid[1:0] )),2))) -message "IRF p1 read & save global to same TID" -group core_array
847// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & (rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_m[1:0])),2))) -message "IRF p2 read & save to same TID" -group core_array
848// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & rml_irf_save_global & (dec_tid_p[1:0] == rml_irf_global_tid[1:0] )),2))) -message "IRF p2 read & save global to same TID" -group core_array
849
850
851// #5
852// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & (rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_b[1:0])),2))) -message "IRF p0 read & restore to same TID" -group core_array
853// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & rml_irf_restore_global & (dec_tid_p[1:0] == rml_irf_global_tid_ff[1:0])),2))) -message "IRF p0 read & restore global to same TID" -group core_array
854// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & (rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_b[1:0])),2))) -message "IRF p1 read & restore to same TID" -group core_array
855// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & rml_irf_restore_global & (dec_tid_p[1:0] == rml_irf_global_tid_ff[1:0])),2))) -message "IRF p1 read & restore global to same TID" -group core_array
856// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & (rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b) & (dec_tid_p[1:0] == rml_irf_cwpswap_tid_b[1:0])),2))) -message "IRF p2 read & restore to same TID" -group core_array
857// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & rml_irf_restore_global & (dec_tid_p[1:0] == rml_irf_global_tid_ff[1:0])),2))) -message "IRF p2 read & restore global to same TID" -group core_array
858
859
860// #6
861// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & $0in_delay((rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_m[1:0],1))),2))) -message "IRF p0 read & save to same TID in same cycle" -group core_array
862// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & $0in_delay( rml_irf_save_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid[1:0] ,1))),2))) -message "IRF p0 read & save global to same TID in same cycle" -group core_array
863// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & $0in_delay((rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_m[1:0],1))),2))) -message "IRF p1 read & save to same TID in same cycle" -group core_array
864// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & $0in_delay( rml_irf_save_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid[1:0] ,1))),2))) -message "IRF p1 read & save global to same TID in same cycle" -group core_array
865// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & $0in_delay((rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_m[1:0],1))),2))) -message "IRF p2 read & save to same TID in same cycle" -group core_array
866// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & $0in_delay( rml_irf_save_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid[1:0] ,1))),2))) -message "IRF p2 read & save global to same TID in same cycle" -group core_array
867
868
869// #7 fails isa3_scratchpad_f2.s single thread at 130000
870// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & $0in_delay((rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_b[1:0],1))),2))) -message "IRF p0 read & restore to same TID in same cycle" -name "EXU_7a" -group core_array
871// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs1_vld_p & $0in_delay( rml_irf_restore_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid_ff[1:0],1))),2))) -message "IRF p0 read & restore global to same TID in same cycle" -name "EXU_7b" -group core_array
872// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & $0in_delay((rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_b[1:0],1))),2))) -message "IRF p1 read & restore to same TID in same cycle" -name "EXU_7c" -group core_array
873// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs2_vld_p & $0in_delay( rml_irf_restore_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid_ff[1:0],1))),2))) -message "IRF p1 read & restore global to same TID in same cycle" -name "EXU_7d" -group core_array
874// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & $0in_delay((rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b),1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_cwpswap_tid_b[1:0],1))),2))) -message "IRF p2 read & restore to same TID in same cycle" -name "EXU_7e" -group core_array
875// 0in custom -fire (dec_valid_e & ($0in_delay((dec_inst_rs3_vld_p & $0in_delay( rml_irf_restore_global ,1) & (dec_tid_p[1:0] == $0in_delay(rml_irf_global_tid_ff[1:0],1))),2))) -message "IRF p2 read & restore global to same TID in same cycle" -name "EXU_7f" -group core_array
876
877
878// #8
879// 0in custom -fire (ect_valid_lth_w & $0in_delay((rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ),1) & (ect_tid_lth_w[1:0] == $0in_delay(rml_irf_cwpswap_tid_m[1:0],1))) -message "IRF p0 write & save to same TID in same cycle" -group core_array
880// 0in custom -fire (ect_valid_in_w2 & $0in_delay((rml_irf_save_odd_m | rml_irf_save_local_m | rml_irf_save_even_m ),1) & (ect_tid_lth_w2[1:0] == $0in_delay(rml_irf_cwpswap_tid_m[1:0],1))) -message "IRF p1 write & save to same TID in same cycle" -group core_array
881// 0in custom -fire (ect_valid_lth_w & $0in_delay( rml_irf_save_global ,1) & (ect_tid_lth_w[1:0] == $0in_delay(rml_irf_global_tid[1:0] ,1))) -message "IRF p0 write & save global to same TID in same cycle" -group core_array
882// 0in custom -fire (ect_valid_in_w2 & $0in_delay( rml_irf_save_global ,1) & (ect_tid_lth_w2[1:0] == $0in_delay(rml_irf_global_tid[1:0] ,1))) -message "IRF p1 write & save global to same TID in same cycle" -group core_array
883
884// #9
885// 0in custom -fire (ect_valid_lth_w & $0in_delay((rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b),1) & (ect_tid_lth_w[1:0] == $0in_delay(rml_irf_cwpswap_tid_b[1:0],1))) -message "IRF p0 write & restore to same TID in same cycle" -group core_array
886// 0in custom -fire (ect_valid_in_w2 & $0in_delay((rml_irf_restore_odd_b | rml_irf_restore_local_b | rml_irf_restore_even_b),1) & (ect_tid_lth_w2[1:0] == $0in_delay(rml_irf_cwpswap_tid_b[1:0],1))) -message "IRF p1 write & restore to same TID in same cycle" -group core_array
887// 0in custom -fire (ect_valid_lth_w & $0in_delay( rml_irf_restore_global ,1) & (ect_tid_lth_w[1:0] == $0in_delay(rml_irf_global_tid_ff[1:0],1))) -message "IRF p0 write & restore global to same TID in same cycle" -group core_array
888// 0in custom -fire (ect_valid_in_w2 & $0in_delay( rml_irf_restore_global ,1) & (ect_tid_lth_w2[1:0] == $0in_delay(rml_irf_global_tid_ff[1:0],1))) -message "IRF p1 write & restore global to same TID in same cycle" -group core_array
889
890
891n2_irf_mp_128x72_cust irf (
892
893 .scan_in(irf_scanin),
894 .scan_out(irf_scanout),
895 .l2clk ( l2clk ),
896 .tcu_pce_ov ( tcu_pce_ov ),
897 .tcu_aclk ( spc_aclk ),
898 .tcu_bclk ( spc_bclk ),
899 .clken ( ect_tg_clken ),
900
901 .rd_tid ( dec_tid_p[1:0] ),
902 .rd_addr_p0 ( dec_inst_rs1_p[4:0] ),
903 .rd_addr_p1 ( dec_inst_rs2_p[4:0] ),
904 .rd_addr_p2 ( dec_inst_rs3_p[4:0] ),
905 .rd_en_p0 ( dec_inst_rs1_vld_p ),
906 .rd_en_p1 ( dec_inst_rs2_vld_p ),
907 .rd_en_p2 ( dec_inst_rs3_vld_p ),
908
909 .wr_en_p0 ( ect_valid_lth_w ),
910 .wr_tid_p0 ( ect_tid_lth_w[1:0] ),
911 .wr_addr_p0 ( ect_rd_lth_w[4:0] ),
912 .wr_data_p0 ({ecc_w_synd_w[7:0] , edp_rd_ff_w[63:0]} ),
913 .wr_en_p1 ( ect_valid_in_w2 ),
914 .wr_tid_p1 ( ect_tid_lth_w2[1:0] ),
915 .wr_addr_p1 ( ect_rd_lth_w2[4:0] ),
916 .wr_data_p1 ({ecc_w2_synd_w2[7:0] , edp_rd_ff_w2[63:0]} ),
917
918 .save_tid ( rml_irf_cwpswap_tid_m[1:0] ),
919 .save_local_addr ( rml_irf_old_lo_cwp_m[2:0] ),
920 .save_even_addr ( rml_irf_old_e_cwp_m[2:1] ),
921 .save_odd_addr ( rml_irf_old_lo_cwp_m[2:1] ),
922 .save_even_en ( rml_irf_save_even_m ),
923 .save_odd_en ( rml_irf_save_odd_m ),
924 .save_local_en ( rml_irf_save_local_m ),
925
926 .restore_tid ( rml_irf_cwpswap_tid_b[1:0] ),
927 .restore_local_addr ( rml_irf_new_lo_cwp_b[2:0] ),
928 .restore_even_addr ( rml_irf_new_e_cwp_b[2:1] ),
929 .restore_odd_addr ( rml_irf_new_lo_cwp_b[2:1] ),
930 .restore_even_en ( rml_irf_restore_even_b ),
931 .restore_odd_en ( rml_irf_restore_odd_b ),
932 .restore_local_en ( rml_irf_restore_local_b ),
933
934 .save_global_en ( rml_irf_save_global ),
935 .save_global_tid ( rml_irf_global_tid[1:0] ),
936 .save_global_addr ( rml_irf_old_agp[1:0] ),
937
938 .restore_global_en ( rml_irf_restore_global ),
939 .restore_global_tid ( rml_irf_global_tid_ff[1:0] ),
940 .restore_global_addr ( rml_irf_new_agp_ff[1:0] ),
941
942
943 .dout_p0 ( irf_rs1_data_d[71:0] ),
944 .dout_p1 ( irf_rs2_data_d[71:0] ),
945 .dout_p2 ( irf_rs3_data_d[71:0] ),
946 .tcu_array_wr_inhibit(tcu_array_wr_inhibit),
947 .tcu_scan_en(tcu_scan_en),
948 .tcu_se_scancollar_in(tcu_se_scancollar_in));
949
950
951//********************************************************************************
952//
953// Instruction Notes
954//
955//
956// Opcode Page FUNCTION Comments Implementation
957// ------ ---- ------------------------ ----------------------- --------------
958//
959// Add/Sub
960//
961// ADD 135 rs1 + rs2
962// ADDcc 135 rs1 + rs2 CCR.icc,xcc
963// ADDC 135 rs1 + rs2 + icc.c
964// ADDCcc 135 rs1 + rs2 + icc.c CCR.icc,xcc
965// ADDi 135 rs1 + sext(imm) imm=[12:0]
966// ADDcci 135 rs1 + sext(imm) imm=[12:0] CCR.icc,xcc
967// ADDCi 135 rs1 + sext(imm) + icc.c imm=[12:0]
968// ADDCcci 135 rs1 + sext(imm) + icc.c imm=[12:0] CCR.icc,xcc
969//
970// SUB 230 rs1 - rs2
971// SUBcc 230 rs1 - rs2 CCR.icc,xcc
972// SUBC 230 rs1 - rs2 + icc.c
973// SUBCcc 230 rs1 - rs2 + icc.c CCR.icc,xcc
974// SUBi 230 rs1 - sext(imm) imm=[12:0]
975// SUBcci 230 rs1 - sext(imm) imm=[12:0] CCR.icc,xcc
976// SUBCi 230 rs1 - sext(imm) + icc.c imm=[12:0]
977// SUBCcci 230 rs1 - sext(imm) + icc.c imm=[12:0] CCR.icc,xcc
978//
979//
980// Logical
981//
982// AND 181 rs1 & rs2 lg_sel=1000
983// ANDcc 181 rs1 & rs2 CCR.icc,xcc lg_sel=1000
984// ANDN 181 rs1 & ~rs2 lg_sel=0100
985// ANDNcc 181 rs1 & ~rs2 CCR.icc,xcc lg_sel=0100
986// OR 181 rs1 | rs2 lg_sel=1110
987// ORcc 181 rs1 | rs2 CCR.icc,xcc lg_sel=1110
988// ORN 181 rs1 | ~rs2 lg_sel=1101
989// ORNcc 181 rs1 | ~rs2 CCR.icc,xcc lg_sel=1101
990// XOR 181 rs1 ^ rs2 lg_sel=0110
991// XORcc 181 rs1 ^ rs2 CCR.icc,xcc lg_sel=0110
992// XORN 181 rs1 ^ ~rs2 lg_sel=1001
993// XORNcc 181 rs1 ^ ~rs2 CCR.icc,xcc lg_sel=1001
994// ANDi 181 rs1 & sext(imm) imm=[12:0] lg_sel=1000
995// ANDcci 181 rs1 & sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=1000
996// ANDNi 181 rs1 & ~sext(imm) imm=[12:0] lg_sel=0100
997// ANDNcci 181 rs1 & ~sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=0100
998// ORi 181 rs1 | sext(imm) imm=[12:0] lg_sel=1110
999// ORcci 181 rs1 | sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=1110
1000// ORNi 181 rs1 | ~sext(imm) imm=[12:0] lg_sel=1101
1001// ORNcci 181 rs1 | ~sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=1101
1002// XORi 181 rs1 ^ sext(imm) imm=[12:0] lg_sel=0110
1003// XORcci 181 rs1 ^ sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=0110
1004// XORNi 181 rs1 ^ ~sext(imm) imm=[12:0] lg_sel=1001
1005// XORNcci 181 rs1 ^ ~sext(imm) imm=[12:0] CCR.icc,xcc lg_sel=1001
1006//
1007// SETHI 217 {32'b0,imm[21:0],10'b0} NOP if rd=0 & imm=0
1008//
1009//
1010// Shift
1011//
1012// SLL 218 shift_left(rs1) fill w/ 0 sa=rs2[4:0] sh_sel=0100001
1013// SRL 218 shift_right(rs1) fill w/ 0 sa=rs2[4:0] rd[63:32]=32'b0 sh_sel=1000001
1014// SRA 218 shift_right(rs1) w/ sext sa=rs2[4:0] rd[63:32]=rs1[31] sh_sel=1001001
1015// SLLX 218 shift_left(rs1) fill w/ 0 sa=rs2[5:0] sh_sel=0100010
1016// SRLX 218 shift_right(rs1) fill w/ 0 sa=rs2[5:0] sh_sel=1000100
1017// SRAX 218 shift_right(rs1) w/ sext sa=rs2[5:0] sh_sel=1010100
1018//
1019// SLLi 218 shift_left(rs1) fill w/ 0 sa=rs2[4:0] sh_sel=0100001
1020// SRLi 218 shift_right(rs1) fill w/ 0 sa=rs2[4:0] rd[63:32]=32'b0 sh_sel=1000001
1021// SRAi 218 shift_right(rs1) w/ sext sa=rs2[4:0] rd[63:32]=rs1[31] sh_sel=1001001
1022// SLLXi 218 shift_left(rs1) fill w/ 0 sa=rs2[5:0] sh_sel=0100010
1023// SRLXi 218 shift_right(rs1) fill w/ 0 sa=rs2[5:0] sh_sel=1000100
1024// SRAXi 218 shift_right(rs1) w/ sext sa=rs2[5:0] sh_sel=1010100
1025//
1026// VIS
1027// EDGE8 70 Eight 8-bit Edge
1028// EDGE8N 70 Eight 8-bit Edge; no CC
1029// EDGE8L 70 Eight 8-bit Edge; Little-Endian
1030// EDGE8LN 70 Eight 8-bit Edge; no CC; Little-Endian
1031// EDGE16 70 Four 16-bit Edge
1032// EDGE16N 70 Four 16-bit Edge; no CC
1033// EDGE16L 70 Four 16-bit Edge; Little-Endian
1034// EDGE16LN 70 Four 16-bit Edge; no CC; Little-Endian
1035// EDGE32 70 Two 32-bit Edge
1036// EDGE32N 70 Two 32-bit Edge; no CC
1037// EDGE32L 70 Two 32-bit Edge; Little-Endian
1038// EDGE32LN 70 Two 32-bit Edge; no CC; Little-Endian
1039//
1040//
1041// ARRAY8 74 Convert 8-bit 3-D addres to blocked byte address
1042// ARRAY16 74 Convert 16-bit 3-D addres to blocked byte address
1043// ARRAY32 74 Convert 32-bit 3-D addres to blocked byte address
1044//
1045//
1046// ALIGNADDRESS 55 RD = rs1 + rs2; clip low 3 bits; GSR <- low 3 bits
1047// ALIGNADDRESS-little RD = rs1 + rs2; clip low 3 bits; GSR <- ~low 3 bits
1048// BMASK 55 RD = rs1 + rs2; clip low 3 bits; GSR <- low 32 bits
1049
1050
1051
1052// fixscan start:
1053assign edp_scanin = scan_in ;
1054assign ect_scanin = edp_scanout ;
1055assign ecc_scanin = ect_scanout ;
1056assign rml_scanin = ecc_scanout ;
1057assign irf_scanin = rml_scanout ;
1058assign scan_out = irf_scanout ;
1059
1060assign ect_wmr_scanin = wmr_scan_in ;
1061assign rml_wmr_scanin = ect_wmr_scanout ;
1062assign wmr_scan_out = rml_wmr_scanout ;
1063// fixscan end:
1064endmodule
1065