// © IBM Corp. 2020 // Licensed under the Apache License, Version 2.0 (the "License"), as modified by // the terms below; you may not use the files in this repository except in // compliance with the License as modified. // You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // // Modified Terms: // // 1) For the purpose of the patent license granted to you in Section 3 of the // License, the "Work" hereby includes implementations of the work of authorship // in physical form. // // 2) Notwithstanding any terms to the contrary in the License, any licenses // necessary for implementation of the Work that are available from OpenPOWER // via the Power ISA End User License Agreement (EULA) are explicitly excluded // hereunder, and may be obtained from OpenPOWER under the terms and conditions // of the EULA. // // Unless required by applicable law or agreed to in writing, the reference design // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License // for the specific language governing permissions and limitations under the License. // // Additional rights, including the ability to physically implement a softcore that // is compliant with the required sections of the Power ISA Specification, are // available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be // obtained (along with the Power ISA) here: https://openpowerfoundation.org. `timescale 1 ns / 1 ns // // Description: XU LSU Flush Generation // //***************************************************************************** // ########################################################################################## // VHDL Contents // 1) Reload Flush generation // 2) Back-Invalidate Flush generation // 4) Instruction Flush Handling // ########################################################################################## `include "tri_a2o.vh" module lq_fgen( ex0_i0_vld, ex0_i0_ucode_preissue, ex0_i0_2ucode, ex0_i0_ucode_cnt, ex0_i1_vld, ex0_i1_ucode_preissue, ex0_i1_2ucode, ex0_i1_ucode_cnt, dec_dcc_ex1_expt_det, dec_dcc_ex1_priv_prog, dec_dcc_ex1_hypv_prog, dec_dcc_ex1_illeg_prog, dec_dcc_ex1_dlock_excp, dec_dcc_ex1_ilock_excp, dec_dcc_ex1_ehpriv_excp, byp_dcc_ex2_req_aborted, ex3_stg_act, ex4_stg_act, ex1_thrd_id, ex2_thrd_id, ex3_thrd_id, ex4_thrd_id, ex5_thrd_id, ex3_cache_acc, ex3_ucode_val, ex3_ucode_cnt, ex4_ucode_op, ex4_mem_attr, ex4_blkable_touch, ex3_ldst_fexcpt, ex3_axu_op_val, ex3_axu_instr_type, ex3_optype16, ex3_optype8, ex3_optype4, ex3_optype2, ex3_eff_addr, ex3_icswx_type, ex3_dcbz_instr, ex3_resv_instr, ex3_mword_instr, ex3_ldawx_instr, ex3_illeg_lswx, ex4_icswx_dsi, ex4_wclr_all_val, ex4_wNComp_rcvd, ex4_dac_int_det, ex4_strg_gate, ex4_restart_val, ex5_restart_val, spr_ccr2_ucode_dis, spr_ccr2_notlb, spr_xucr0_mddp, spr_xucr0_mdcp, spr_xucr4_mmu_mchk, spr_xucr4_mddmh, derat_dcc_ex4_restart, derat_dcc_ex4_wimge_w, derat_dcc_ex4_wimge_i, derat_dcc_ex4_miss, derat_dcc_ex4_tlb_err, derat_dcc_ex4_dsi, derat_dcc_ex4_vf, derat_dcc_ex4_multihit_err_det, derat_dcc_ex4_multihit_err_flush, derat_dcc_ex4_tlb_inelig, derat_dcc_ex4_pt_fault, derat_dcc_ex4_lrat_miss, derat_dcc_ex4_tlb_multihit, derat_dcc_ex4_tlb_par_err, derat_dcc_ex4_lru_par_err, derat_dcc_ex4_par_err_det, derat_dcc_ex4_par_err_flush, derat_fir_par_err, derat_fir_multihit, dir_dcc_ex5_dir_perr_det, dir_dcc_ex5_dc_perr_det, dir_dcc_ex5_dir_perr_flush, dir_dcc_ex5_dc_perr_flush, dir_dcc_ex5_multihit_det, dir_dcc_ex5_multihit_flush, dir_dcc_stq4_dir_perr_det, dir_dcc_stq4_multihit_det, dir_dcc_ex5_stp_flush, spr_xucr0_aflsta, spr_xucr0_flsta, spr_ccr2_ap, spr_msr_fp, spr_msr_spv, iu_lq_cp_flush, ex4_ucode_restart, ex4_sfx_excpt_det, ex4_excp_det, ex4_wNComp_excp, ex4_wNComp_excp_restart, ex5_flush_req, ex5_blk_tlb_req, ex5_flush_pfetch, fgen_ex4_cp_flush, fgen_ex5_cp_flush, fgen_ex1_stg_flush, fgen_ex2_stg_flush, fgen_ex3_stg_flush, fgen_ex4_stg_flush, fgen_ex5_stg_flush, ex5_flush2ucode, ex5_n_flush, ex5_np1_flush, ex5_exception_val, ex5_exception, ex5_dear_val, ex5_misalign_flush, lq_pc_err_derat_parity, lq_pc_err_dir_ldp_parity, lq_pc_err_dir_stp_parity, lq_pc_err_dcache_parity, lq_pc_err_derat_multihit, lq_pc_err_dir_ldp_multihit, lq_pc_err_dir_stp_multihit, vdd, gnd, nclk, sg_0, func_sl_thold_0_b, func_sl_force, d_mode_dc, delay_lclkr_dc, mpw1_dc_b, mpw2_dc_b, scan_in, scan_out ); //------------------------------------------------------------------- // Generics //------------------------------------------------------------------- //parameter EXPAND_TYPE = 2; //parameter THREADS = 2; //parameter UCODE_ENTRIES_ENC = 3; //parameter THREADS_POOL_ENC = 1; //parameter ITAG_SIZE_ENC = 7; // IU Dispatch to RV0 input [0:`THREADS-1] ex0_i0_vld; input ex0_i0_ucode_preissue; input ex0_i0_2ucode; input [0:`UCODE_ENTRIES_ENC-1] ex0_i0_ucode_cnt; input [0:`THREADS-1] ex0_i1_vld; input ex0_i1_ucode_preissue; input ex0_i1_2ucode; input [0:`UCODE_ENTRIES_ENC-1] ex0_i1_ucode_cnt; // Execution Pipe input dec_dcc_ex1_expt_det; input dec_dcc_ex1_priv_prog; input dec_dcc_ex1_hypv_prog; input dec_dcc_ex1_illeg_prog; input dec_dcc_ex1_dlock_excp; input dec_dcc_ex1_ilock_excp; input dec_dcc_ex1_ehpriv_excp; input byp_dcc_ex2_req_aborted; // Control input ex3_stg_act; input ex4_stg_act; input [0:`THREADS-1] ex1_thrd_id; input [0:`THREADS-1] ex2_thrd_id; input [0:`THREADS-1] ex3_thrd_id; input [0:`THREADS-1] ex4_thrd_id; input [0:`THREADS-1] ex5_thrd_id; input ex3_cache_acc; // Cache Access is Valid in ex3 input ex3_ucode_val; // Ucode Preissue is Valid in ex3 input [0:`UCODE_ENTRIES_ENC-1] ex3_ucode_cnt; // Ucode Count in ex3 input ex4_ucode_op; // Op is from Ucode in ex4 input [0:8] ex4_mem_attr; input ex4_blkable_touch; input ex3_ldst_fexcpt; // Force Exception on misaligned AXU access input ex3_axu_op_val; // ex3 AXU operation is valid input [0:2] ex3_axu_instr_type; input ex3_optype16; // Operation is 16 Byte Access input ex3_optype8; // Operation is 8 Byte Access input ex3_optype4; // Operation is 4 Byte Access input ex3_optype2; // Operation is 2 Byte Access input [57:63] ex3_eff_addr; input ex3_icswx_type; input ex3_dcbz_instr; // DCBZ instruction is valid in ex3 input ex3_resv_instr; // lwarx, ldarx, stwcx, and stdcx operations input ex3_mword_instr; // Load/Store Multiple Word preissue input ex3_ldawx_instr; // ldawx operation input ex3_illeg_lswx; // STQ detected illegal form of LSWX input ex4_icswx_dsi; // Unavailable Coprocessor DSI Interrupt input ex4_wclr_all_val; // wclr All instruction is valid input ex4_wNComp_rcvd; // Request is CP_NEXT with recirc valid input ex4_dac_int_det; // Debug Address Compare Interrupt Detected input ex4_strg_gate; // LSWX/STSWX NOOP indicator, gate mem attribute update input ex4_restart_val; // Instruction is getting restarted in EX4 input ex5_restart_val; // Instruction is getting restarted in EX5 // SPR Bits input spr_ccr2_ucode_dis; // CCR2[UCODE_DIS] input spr_ccr2_notlb; // CCR2[NOTLB] input spr_xucr0_mddp; // XUCR0[MDDP] input spr_xucr0_mdcp; // XUCR0[MDCP] input spr_xucr4_mmu_mchk; // XUCR4[MMU_MCHK] input spr_xucr4_mddmh; // XUCR4[MDDMH] // ERAT Interface input derat_dcc_ex4_restart; input derat_dcc_ex4_wimge_w; input derat_dcc_ex4_wimge_i; input derat_dcc_ex4_miss; input derat_dcc_ex4_tlb_err; input derat_dcc_ex4_dsi; input derat_dcc_ex4_vf; input derat_dcc_ex4_multihit_err_det; input derat_dcc_ex4_multihit_err_flush; input derat_dcc_ex4_tlb_inelig; input derat_dcc_ex4_pt_fault; input derat_dcc_ex4_lrat_miss; input derat_dcc_ex4_tlb_multihit; input derat_dcc_ex4_tlb_par_err; input derat_dcc_ex4_lru_par_err; input derat_dcc_ex4_par_err_det; input derat_dcc_ex4_par_err_flush; input derat_fir_par_err; input derat_fir_multihit; // D$ Parity Error Detected input dir_dcc_ex5_dir_perr_det; // Data Directory Parity Error Detected input dir_dcc_ex5_dc_perr_det; // Data Cache Parity Error Detected input dir_dcc_ex5_dir_perr_flush; // Data Directory Parity Error Flush input dir_dcc_ex5_dc_perr_flush; // Data Cache Parity Error Flush input dir_dcc_ex5_multihit_det; // Directory Multihit Detected input dir_dcc_ex5_multihit_flush; // Directory Multihit Flush input dir_dcc_stq4_dir_perr_det; // Data Cache Parity Error Detected on the STQ Commit Pipeline input dir_dcc_stq4_multihit_det; // Directory Multihit Detected on the STQ Commit Pipeline input dir_dcc_ex5_stp_flush; // Directory Error detected on the STQ Commit Pipeline with EX5 LDP valid // SPR's input spr_xucr0_aflsta; input spr_xucr0_flsta; input spr_ccr2_ap; input spr_msr_fp; input spr_msr_spv; // Instruction Flush input [0:`THREADS-1] iu_lq_cp_flush; // Flush Pipe Outputs output ex4_ucode_restart; // Memory Attributes are not known, need to restart output ex4_sfx_excpt_det; // Priveleged and illegal instructions output ex4_excp_det; // Any Exception was detected output ex4_wNComp_excp; // Exception with RECIRC_VAL detected output ex4_wNComp_excp_restart; // CP_NEXT instruction got an exception, restart the 2 younger instructions output ex5_flush_req; // Non-CP_NEXT Flush Request Detected output ex5_blk_tlb_req; // Block ERAT Miss from going to the MMU output ex5_flush_pfetch; // Flush Prefetch in ex5 output fgen_ex4_cp_flush; // Completion Flush Request in ex4 output fgen_ex5_cp_flush; // Completion Flush Request in ex5 output fgen_ex1_stg_flush; // Flush Instructions in ex1 output fgen_ex2_stg_flush; // Flush Instructions in ex2 output fgen_ex3_stg_flush; // Flush Instructions in ex3 output fgen_ex4_stg_flush; // Flush Instructions in ex4 output fgen_ex5_stg_flush; // Flush Instructions in ex5 // Completion Indicators output ex5_flush2ucode; // EX5 Flush to Ucode indicator output ex5_n_flush; // EX5 N Flush Indicator output ex5_np1_flush; // EX5 NP1 Flush Indicator output ex5_exception_val; // EX5 Exception Valid Indicator output [0:5] ex5_exception; // EX5 Exception Encode output [0:`THREADS-1] ex5_dear_val; // EX5 Dear Valid Indicator // Performance Events output ex5_misalign_flush; // Error Reporting output lq_pc_err_derat_parity; output lq_pc_err_dir_ldp_parity; output lq_pc_err_dir_stp_parity; output lq_pc_err_dcache_parity; output lq_pc_err_derat_multihit; output lq_pc_err_dir_ldp_multihit; output lq_pc_err_dir_stp_multihit; //pervasive inout vdd; inout gnd; (* pin_data="PIN_FUNCTION=/G_CLK/CAP_LIMIT=/99999/" *) input [0:`NCLK_WIDTH-1] nclk; input sg_0; input func_sl_thold_0_b; input func_sl_force; input d_mode_dc; input delay_lclkr_dc; input mpw1_dc_b; input mpw2_dc_b; (* pin_data="PIN_FUNCTION=/SCAN_IN/" *) input scan_in; (* pin_data="PIN_FUNCTION=/SCAN_OUT/" *) output scan_out; //-------------------------- // components //-------------------------- //-------------------------- // constants //-------------------------- parameter UCODEDEPTH = (2**`UCODE_ENTRIES_ENC)*`THREADS; //-------------------------- // signals //-------------------------- wire ex3_16Bop16_unal; wire ex3_16Bop8_unal; wire ex3_16Bop4_unal; wire ex3_16Bop2_unal; wire ex3_16Bunal_op; wire ex4_wt_ci_trans; wire ex3_valid_resv; wire ex1_cp_flush_val; wire ex2_cp_flush_val; wire ex3_cp_flush_val; wire ex4_cp_flush_val; wire ex5_cp_flush_val; wire ex4_local_flush; wire ex4_valid_resv_d; wire ex4_valid_resv_q; wire ex4_prealign_int_d; wire ex4_prealign_int_q; wire force_align_int_a; wire force_align_int_x; wire force_align_int; wire ex3_flush_2ucode_chk; wire ex3_flush_2ucode; wire ex4_flush_2ucode_d; wire ex4_flush_2ucode_q; wire ex5_flush_2ucode_d; wire ex5_flush_2ucode_q; wire ex4_ucode_dis_prog_d; wire ex4_ucode_dis_prog_q; wire ex3_op16_unal; wire ex3_op8_unal; wire ex3_op4_unal; wire ex3_op2_unal; wire ex3_unal_op; wire ex5_misalign_flush_d; wire ex5_misalign_flush_q; wire ex4_n_flush_req; wire ex4_tlb_flush_req; wire ex5_tlb_flush_req_d; wire ex5_tlb_flush_req_q; wire ex5_tlb_mchk_req_d; wire ex5_tlb_mchk_req_q; wire ex5_flush_req_mchk; wire ex5_flush_req_int; wire ex3_icswx_unal; wire ex4_is_dcbz_d; wire ex4_is_dcbz_q; wire ex4_dsi_int; wire ex4_align_int; wire ex4_dcbz_err; wire ex4_axu_ap_unavail_d; wire ex4_axu_ap_unavail_q; wire ex4_axu_fp_unavail_d; wire ex4_axu_fp_unavail_q; wire ex4_axu_spv_unavail_d; wire ex4_axu_spv_unavail_q; wire ex5_local_flush; wire ex5_local_flush_d; wire ex5_local_flush_q; wire [0:25] ex4_excp_pri; wire [7:11] ex5_excp_pri; wire ex4_tlb_perr_mchk; wire ex4_tlb_lru_perr_mchk; wire ex4_tlb_multihit_mchk; wire ex5_derat_perr_mchk; wire ex5_dir_perr_mchk; wire ex5_dc_perr_mchk; wire ex5_derat_multihit_mchk; wire ex5_dir_multihit_mchk; wire ex4_tlb_perr_flush; wire ex4_tlb_lru_perr_flush; wire ex4_tlb_multihit_flush; wire ex5_derat_perr_flush; wire ex5_dir_perr_flush; wire ex5_dc_perr_flush; wire ex5_derat_multihit_flush; wire ex5_dir_multihit_flush; wire ex4_non_cp_next_excp; wire ex5_high_pri_excp_d; wire ex5_high_pri_excp_q; wire ex4_cp_next_excp; wire ex4_cp_next_excp_det; wire ex4_cp_next_excp_rpt; wire ex5_low_pri_excp_d; wire ex5_low_pri_excp_q; wire [0:5] ex4_exception; wire ex5_sel_mid_pri_excp; wire [0:5] ex5_mid_pri_excp; wire [0:5] ex5_exception_d; wire [0:5] ex5_exception_q; wire [0:5] ex5_exception_int; wire [0:`THREADS-1] ex5_dear_val_d; wire [0:`THREADS-1] ex5_dear_val_q; wire ex5_derat_multihit_flush_d; wire ex5_derat_multihit_flush_q; wire ex5_derat_multihit_det_d; wire ex5_derat_multihit_det_q; wire ex5_derat_perr_flush_d; wire ex5_derat_perr_flush_q; wire ex5_derat_perr_det_d; wire ex5_derat_perr_det_q; wire ex2_sfx_excpt_det_d; wire ex2_sfx_excpt_det_q; wire ex3_sfx_excpt_det_d; wire ex3_sfx_excpt_det_q; wire ex4_sfx_excpt_det_d; wire ex4_sfx_excpt_det_q; wire ex2_priv_prog_d; wire ex2_priv_prog_q; wire ex3_priv_prog_d; wire ex3_priv_prog_q; wire ex4_priv_prog_d; wire ex4_priv_prog_q; wire ex2_hypv_prog_d; wire ex2_hypv_prog_q; wire ex3_hypv_prog_d; wire ex3_hypv_prog_q; wire ex4_hypv_prog_d; wire ex4_hypv_prog_q; wire ex2_illeg_prog_d; wire ex2_illeg_prog_q; wire ex3_illeg_prog_d; wire ex3_illeg_prog_q; wire ex4_illeg_prog_d; wire ex4_illeg_prog_q; wire ex2_dlock_excp_d; wire ex2_dlock_excp_q; wire ex3_dlock_excp_d; wire ex3_dlock_excp_q; wire ex4_dlock_excp_d; wire ex4_dlock_excp_q; wire ex2_ilock_excp_d; wire ex2_ilock_excp_q; wire ex3_ilock_excp_d; wire ex3_ilock_excp_q; wire ex4_ilock_excp_d; wire ex4_ilock_excp_q; wire ex2_ehpriv_excp_d; wire ex2_ehpriv_excp_q; wire ex3_ehpriv_excp_d; wire ex3_ehpriv_excp_q; wire ex4_ucode_val_d; wire ex4_ucode_val_q; wire [0:`UCODE_ENTRIES_ENC-1] ex4_ucode_cnt_d; wire [0:`UCODE_ENTRIES_ENC-1] ex4_ucode_cnt_q; wire [0:`UCODE_ENTRIES_ENC+`THREADS_POOL_ENC-1] ex0_i0_tid_ucode_cnt; wire [0:`UCODE_ENTRIES_ENC+`THREADS_POOL_ENC-1] ex0_i1_tid_ucode_cnt; wire [0:`UCODE_ENTRIES_ENC+`THREADS_POOL_ENC-1] ex3_tid_ucode_cnt; wire [0:`UCODE_ENTRIES_ENC+`THREADS_POOL_ENC-1] ex4_tid_ucode_cnt; wire [0:UCODEDEPTH-1] ex0_i0_ucode_cnt_entry; wire [0:UCODEDEPTH-1] ex0_i0_ucode_cnt_start; wire [0:UCODEDEPTH-1] ex0_i1_ucode_cnt_entry; wire [0:UCODEDEPTH-1] ex0_i1_ucode_cnt_start; wire [0:UCODEDEPTH-1] ex0_ucode_cnt_rst; wire [0:UCODEDEPTH-1] ex3_ucode_cnt_entry; wire [0:UCODEDEPTH-1] ex4_ucode_cnt_entry; wire [0:UCODEDEPTH-1] ex4_ucode_cnt_set; wire [0:1] ucode_cnt_ctrl[0:UCODEDEPTH-1]; wire [0:1] ucode_cnt_2ucode_ctrl[0:UCODEDEPTH-1]; wire [0:UCODEDEPTH-1] ucode_cnt_val_d; wire [0:UCODEDEPTH-1] ucode_cnt_val_q; wire [0:UCODEDEPTH-1] ucode_cnt_2ucode_d; wire [0:UCODEDEPTH-1] ucode_cnt_2ucode_q; wire [0:8] ucode_cnt_memAttr_d[0:UCODEDEPTH-1]; wire [0:8] ucode_cnt_memAttr_q[0:UCODEDEPTH-1]; wire ex4_cache_acc_d; wire ex4_cache_acc_q; wire [0:UCODEDEPTH-1] ex3_2ucode_cnt_set; wire ex3_2ucode_set; wire [0:UCODEDEPTH-1] ex4_ucode_align_int; wire ex4_ucode_align_val; wire [0:UCODEDEPTH-1] ex4_ucode_cnt_restart; wire ex4_derat_vf_int; wire ex5_wNComp_rcvd_d; wire ex5_wNComp_rcvd_q; wire ex5_wNComp_excp; wire ex6_wNComp_excp_d; wire ex6_wNComp_excp_q; wire ex5_dac_int_det_d; wire ex5_dac_int_det_q; wire [0:6] perv_fir_rpt; wire [0:6] perv_fir_rpt_d; wire [0:6] perv_fir_rpt_q; parameter ex4_valid_resv_offset = 0; parameter ex4_prealign_int_offset = ex4_valid_resv_offset + 1; parameter ex4_flush_2ucode_offset = ex4_prealign_int_offset + 1; parameter ex5_flush_2ucode_offset = ex4_flush_2ucode_offset + 1; parameter ex4_ucode_dis_prog_offset = ex5_flush_2ucode_offset + 1; parameter ex4_is_dcbz_offset = ex4_ucode_dis_prog_offset + 1; parameter ex5_misalign_flush_offset = ex4_is_dcbz_offset + 1; parameter ex4_axu_ap_unavail_offset = ex5_misalign_flush_offset + 1; parameter ex4_axu_fp_unavail_offset = ex4_axu_ap_unavail_offset + 1; parameter ex4_axu_spv_unavail_offset = ex4_axu_fp_unavail_offset + 1; parameter ex5_local_flush_offset = ex4_axu_spv_unavail_offset + 1; parameter ex5_tlb_flush_req_offset = ex5_local_flush_offset + 1; parameter ex5_tlb_mchk_req_offset = ex5_tlb_flush_req_offset + 1; parameter ex5_low_pri_excp_offset = ex5_tlb_mchk_req_offset + 1; parameter ex5_high_pri_excp_offset = ex5_low_pri_excp_offset + 1; parameter ex5_exception_offset = ex5_high_pri_excp_offset + 1; parameter ex5_dear_val_offset = ex5_exception_offset + 6; parameter ex5_derat_multihit_flush_offset = ex5_dear_val_offset + `THREADS; parameter ex5_derat_multihit_det_offset = ex5_derat_multihit_flush_offset + 1; parameter ex5_derat_perr_flush_offset = ex5_derat_multihit_det_offset + 1; parameter ex5_derat_perr_det_offset = ex5_derat_perr_flush_offset + 1; parameter ex2_sfx_excpt_det_offset = ex5_derat_perr_det_offset + 1; parameter ex3_sfx_excpt_det_offset = ex2_sfx_excpt_det_offset + 1; parameter ex4_sfx_excpt_det_offset = ex3_sfx_excpt_det_offset + 1; parameter ex2_priv_prog_offset = ex4_sfx_excpt_det_offset + 1; parameter ex3_priv_prog_offset = ex2_priv_prog_offset + 1; parameter ex4_priv_prog_offset = ex3_priv_prog_offset + 1; parameter ex2_hypv_prog_offset = ex4_priv_prog_offset + 1; parameter ex3_hypv_prog_offset = ex2_hypv_prog_offset + 1; parameter ex4_hypv_prog_offset = ex3_hypv_prog_offset + 1; parameter ex2_illeg_prog_offset = ex4_hypv_prog_offset + 1; parameter ex3_illeg_prog_offset = ex2_illeg_prog_offset + 1; parameter ex4_illeg_prog_offset = ex3_illeg_prog_offset + 1; parameter ex2_dlock_excp_offset = ex4_illeg_prog_offset + 1; parameter ex3_dlock_excp_offset = ex2_dlock_excp_offset + 1; parameter ex4_dlock_excp_offset = ex3_dlock_excp_offset + 1; parameter ex2_ilock_excp_offset = ex4_dlock_excp_offset + 1; parameter ex3_ilock_excp_offset = ex2_ilock_excp_offset + 1; parameter ex4_ilock_excp_offset = ex3_ilock_excp_offset + 1; parameter ex2_ehpriv_excp_offset = ex4_ilock_excp_offset + 1; parameter ex3_ehpriv_excp_offset = ex2_ehpriv_excp_offset + 1; parameter ex4_cache_acc_offset = ex3_ehpriv_excp_offset + 1; parameter ex4_ucode_val_offset = ex4_cache_acc_offset + 1; parameter ex4_ucode_cnt_offset = ex4_ucode_val_offset + 1; parameter ex5_wNComp_rcvd_offset = ex4_ucode_cnt_offset + `UCODE_ENTRIES_ENC; parameter ex6_wNComp_excp_offset = ex5_wNComp_rcvd_offset + 1; parameter ex5_dac_int_det_offset = ex6_wNComp_excp_offset + 1; parameter perv_fir_rpt_offset = ex5_dac_int_det_offset + 1; parameter ucode_cnt_val_offset = perv_fir_rpt_offset + 7; parameter ucode_cnt_2ucode_offset = ucode_cnt_val_offset + UCODEDEPTH; parameter ucode_cnt_memAttr_offset = ucode_cnt_2ucode_offset + UCODEDEPTH; parameter scan_right = ucode_cnt_memAttr_offset + 9*UCODEDEPTH - 1; wire tiup; wire tidn; wire [0:scan_right] siv; wire [0:scan_right] sov; (* analysis_not_referenced="true" *) wire unused; //--!! Bugspray Include: lq_fgen // ############################################# // Inputs // ############################################# assign tiup = 1'b1; assign tidn = 1'b0; assign ex4_derat_vf_int = ((ex4_cache_acc_q | ex4_ucode_val_q) & derat_dcc_ex4_vf) & ~(ex4_blkable_touch | ex4_strg_gate | ex4_wclr_all_val); assign ex5_derat_multihit_flush_d = derat_dcc_ex4_multihit_err_flush & ~ex4_cp_flush_val; assign ex5_derat_multihit_det_d = derat_dcc_ex4_multihit_err_det; assign ex5_derat_perr_flush_d = derat_dcc_ex4_par_err_flush & ~ex4_cp_flush_val; assign ex5_derat_perr_det_d = derat_dcc_ex4_par_err_det; assign ex2_sfx_excpt_det_d = dec_dcc_ex1_expt_det & ~ex1_cp_flush_val; assign ex3_sfx_excpt_det_d = ex2_sfx_excpt_det_q & ~ex2_cp_flush_val; assign ex4_sfx_excpt_det_d = ex3_sfx_excpt_det_q & ~ex3_cp_flush_val; assign ex2_priv_prog_d = dec_dcc_ex1_priv_prog; assign ex3_priv_prog_d = ex2_priv_prog_q; assign ex4_priv_prog_d = ex3_priv_prog_q & ex3_sfx_excpt_det_q & ~ex3_cp_flush_val; assign ex2_hypv_prog_d = dec_dcc_ex1_hypv_prog; assign ex3_hypv_prog_d = ex2_hypv_prog_q; assign ex4_hypv_prog_d = (ex3_hypv_prog_q | ex3_ehpriv_excp_q) & ex3_sfx_excpt_det_q & ~ex3_cp_flush_val; assign ex2_illeg_prog_d = dec_dcc_ex1_illeg_prog; assign ex3_illeg_prog_d = ex2_illeg_prog_q; assign ex4_illeg_prog_d = ((ex3_illeg_prog_q & ex3_sfx_excpt_det_q) | ex3_illeg_lswx) & ~ex3_cp_flush_val; assign ex2_dlock_excp_d = dec_dcc_ex1_dlock_excp; assign ex3_dlock_excp_d = ex2_dlock_excp_q; assign ex4_dlock_excp_d = ex3_dlock_excp_q & ex3_sfx_excpt_det_q & ~ex3_cp_flush_val; assign ex2_ilock_excp_d = dec_dcc_ex1_ilock_excp; assign ex3_ilock_excp_d = ex2_ilock_excp_q; assign ex4_ilock_excp_d = ex3_ilock_excp_q & ex3_sfx_excpt_det_q & ~ex3_cp_flush_val; assign ex2_ehpriv_excp_d = dec_dcc_ex1_ehpriv_excp; assign ex3_ehpriv_excp_d = ex2_ehpriv_excp_q; assign ex4_ucode_val_d = ex3_ucode_val & ~ex3_cp_flush_val; assign ex4_ucode_cnt_d = ex3_ucode_cnt; assign ex4_is_dcbz_d = ex3_dcbz_instr & ex3_cache_acc & ~ex3_cp_flush_val; assign ex4_cache_acc_d = ex3_cache_acc & ~ex3_cp_flush_val; // XUCR[FLSTA] = '0' => Flush to ucode // XUCR[FLSTA] = '1' => Flush to Alignment Interrupt // XUCR[AFLSTA] = '0' => Flush to ucode (AXUop) // XUCR[AFLSTA] = '1' => Flush to Alignment Interrupt (AXUop) assign force_align_int_a = ex3_axu_op_val & (spr_xucr0_aflsta | ex3_ldst_fexcpt); assign force_align_int_x = ~ex3_axu_op_val & spr_xucr0_flsta; assign force_align_int = force_align_int_x | force_align_int_a | ex3_resv_instr | ex3_ldawx_instr | ex3_mword_instr; // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // UCODE Memory Attributes Array // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX generate if (`THREADS_POOL_ENC == 0) begin : tid1 wire [0:`THREADS_POOL_ENC] ex0_i0_enc_tid; wire [0:`THREADS_POOL_ENC] ex0_i1_enc_tid; wire [0:`THREADS_POOL_ENC] ex3_enc_tid; wire [0:`THREADS_POOL_ENC] ex4_enc_tid; assign ex0_i0_tid_ucode_cnt = ex0_i0_ucode_cnt; assign ex0_i1_tid_ucode_cnt = ex0_i1_ucode_cnt; assign ex3_tid_ucode_cnt = ex3_ucode_cnt; assign ex4_tid_ucode_cnt = ex4_ucode_cnt_q; assign ex0_i0_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] = tidn; assign ex0_i1_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] = tidn; assign ex3_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] = tidn; assign ex4_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] = tidn; assign unused = ex0_i0_enc_tid[`THREADS_POOL_ENC] | ex0_i1_enc_tid[`THREADS_POOL_ENC] | ex3_enc_tid[`THREADS_POOL_ENC] | ex4_enc_tid[`THREADS_POOL_ENC]; end endgenerate generate if (`THREADS_POOL_ENC > 0) begin : tidMulti reg [0:`THREADS_POOL_ENC] ex0_i0_enc_tid; reg [0:`THREADS_POOL_ENC] ex0_i1_enc_tid; reg [0:`THREADS_POOL_ENC] ex3_enc_tid; reg [0:`THREADS_POOL_ENC] ex4_enc_tid; always @(*) begin: tidEnc reg [0:`THREADS_POOL_ENC-1] i0Tid; reg [0:`THREADS_POOL_ENC-1] i1Tid; reg [0:`THREADS_POOL_ENC-1] ex3Tid; reg [0:`THREADS_POOL_ENC-1] ex4Tid; //(* analysis_not_referenced="true" *) reg [0:31] tid; i0Tid = {`THREADS_POOL_ENC{1'b0}}; i1Tid = {`THREADS_POOL_ENC{1'b0}}; ex3Tid = {`THREADS_POOL_ENC{1'b0}}; ex4Tid = {`THREADS_POOL_ENC{1'b0}}; ex0_i0_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] <= tidn; ex0_i1_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] <= tidn; ex3_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] <= tidn; ex4_enc_tid[`THREADS_POOL_ENC:`THREADS_POOL_ENC] <= tidn; for (tid=0; tid<`THREADS; tid=tid+1) begin i0Tid = (tid[32-`THREADS_POOL_ENC:31] & {`THREADS_POOL_ENC{ex0_i0_vld[tid]}}) | i0Tid; i1Tid = (tid[32-`THREADS_POOL_ENC:31] & {`THREADS_POOL_ENC{ex0_i1_vld[tid]}}) | i1Tid; ex3Tid = (tid[32-`THREADS_POOL_ENC:31] & {`THREADS_POOL_ENC{ex3_thrd_id[tid]}}) | ex3Tid; ex4Tid = (tid[32-`THREADS_POOL_ENC:31] & {`THREADS_POOL_ENC{ex4_thrd_id[tid]}}) | ex4Tid; end ex0_i0_enc_tid[0:`THREADS_POOL_ENC-1] <= i0Tid; ex0_i1_enc_tid[0:`THREADS_POOL_ENC-1] <= i1Tid; ex3_enc_tid[0:`THREADS_POOL_ENC-1] <= ex3Tid; ex4_enc_tid[0:`THREADS_POOL_ENC-1] <= ex4Tid; end assign ex0_i0_tid_ucode_cnt = {ex0_i0_enc_tid[0:`THREADS_POOL_ENC-1], ex0_i0_ucode_cnt}; assign ex0_i1_tid_ucode_cnt = {ex0_i1_enc_tid[0:`THREADS_POOL_ENC-1], ex0_i1_ucode_cnt}; assign ex3_tid_ucode_cnt = {ex3_enc_tid[0:`THREADS_POOL_ENC-1], ex3_ucode_cnt}; assign ex4_tid_ucode_cnt = {ex4_enc_tid[0:`THREADS_POOL_ENC-1], ex4_ucode_cnt_q}; assign unused = ex0_i0_enc_tid[`THREADS_POOL_ENC] | ex0_i1_enc_tid[`THREADS_POOL_ENC] | ex3_enc_tid[`THREADS_POOL_ENC] | ex4_enc_tid[`THREADS_POOL_ENC]; end endgenerate generate begin : memAttrQ genvar ucodeEntry; for (ucodeEntry=0; ucodeEntry program interrupts, these interrupts ignore any bad machine path errors detected by // data cache, directory, and erat // 2) mid priority interrupt ex4_excp_pri(7:11) => machine check enabled and bad machine path error detected by // data cache, directory, or erat // 3) mid priority interrupt ex4_excp_pri(12:14) => machine check enabled and bad machine path error detected by the MMU, these exceptions // are gated if error detected by data cache, directory, or erat and machine check disabled for error // 4) low priority interrupt ex4_excp_pri(15:25) => translation type interrupts, these exceptions are gated if error detected by // data cache, directory, mmu, or erat and machine check disabled for error assign ex5_exception_val = ex5_high_pri_excp_q | ex5_flush_req_mchk | (ex5_tlb_mchk_req_q & ~ex5_flush_req_int) | (ex5_low_pri_excp_q & ~(ex5_flush_req_int | ex5_tlb_flush_req_q)); assign ex5_exception = ex5_exception_int; assign ex5_dear_val = ex5_dear_val_q; assign ex5_blk_tlb_req = ex5_high_pri_excp_q | ex5_flush_req_int; assign fgen_ex4_stg_flush = ex4_cp_flush_val | ex4_n_flush_req | ex4_non_cp_next_excp | ex4_cp_next_excp_det; assign fgen_ex5_stg_flush = ex5_cp_flush_val | ex5_local_flush | ex5_restart_val | ex5_dac_int_det_q; assign ex5_flush_pfetch = dir_dcc_ex5_dir_perr_det | dir_dcc_ex5_dc_perr_det | dir_dcc_ex5_multihit_det | ex5_derat_multihit_det_q | ex5_derat_perr_det_q | dir_dcc_stq4_dir_perr_det | dir_dcc_stq4_multihit_det; assign fgen_ex4_cp_flush = ex4_cp_flush_val; assign fgen_ex5_cp_flush = ex5_cp_flush_val; // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // FIR Error Reporting // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX assign perv_fir_rpt_d = {derat_fir_par_err, dir_dcc_ex5_dir_perr_det, dir_dcc_ex5_dc_perr_det, derat_fir_multihit, dir_dcc_ex5_multihit_det, dir_dcc_stq4_dir_perr_det, dir_dcc_stq4_multihit_det}; tri_direct_err_rpt #(.WIDTH(7)) pervFir( .vd(vdd), .gd(gnd), .err_in(perv_fir_rpt_q), .err_out(perv_fir_rpt) ); assign lq_pc_err_derat_parity = perv_fir_rpt[0]; assign lq_pc_err_dir_ldp_parity = perv_fir_rpt[1]; assign lq_pc_err_dcache_parity = perv_fir_rpt[2]; assign lq_pc_err_derat_multihit = perv_fir_rpt[3]; assign lq_pc_err_dir_ldp_multihit = perv_fir_rpt[4]; assign lq_pc_err_dir_stp_parity = perv_fir_rpt[5]; assign lq_pc_err_dir_stp_multihit = perv_fir_rpt[6]; // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // Performance Events // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx assign ex5_misalign_flush = ex5_misalign_flush_q; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // Registers //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_valid_resv_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_valid_resv_offset]), .scout(sov[ex4_valid_resv_offset]), .din(ex4_valid_resv_d), .dout(ex4_valid_resv_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_prealign_int_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_prealign_int_offset]), .scout(sov[ex4_prealign_int_offset]), .din(ex4_prealign_int_d), .dout(ex4_prealign_int_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_flush_2ucode_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_flush_2ucode_offset]), .scout(sov[ex4_flush_2ucode_offset]), .din(ex4_flush_2ucode_d), .dout(ex4_flush_2ucode_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_flush_2ucode_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_flush_2ucode_offset]), .scout(sov[ex5_flush_2ucode_offset]), .din(ex5_flush_2ucode_d), .dout(ex5_flush_2ucode_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_ucode_dis_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_ucode_dis_prog_offset]), .scout(sov[ex4_ucode_dis_prog_offset]), .din(ex4_ucode_dis_prog_d), .dout(ex4_ucode_dis_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_is_dcbz_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_is_dcbz_offset]), .scout(sov[ex4_is_dcbz_offset]), .din(ex4_is_dcbz_d), .dout(ex4_is_dcbz_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_misalign_flush_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_misalign_flush_offset]), .scout(sov[ex5_misalign_flush_offset]), .din(ex5_misalign_flush_d), .dout(ex5_misalign_flush_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_axu_ap_unavail_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_axu_ap_unavail_offset]), .scout(sov[ex4_axu_ap_unavail_offset]), .din(ex4_axu_ap_unavail_d), .dout(ex4_axu_ap_unavail_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_axu_fp_unavail_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_axu_fp_unavail_offset]), .scout(sov[ex4_axu_fp_unavail_offset]), .din(ex4_axu_fp_unavail_d), .dout(ex4_axu_fp_unavail_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_axu_spv_unavail_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_axu_spv_unavail_offset]), .scout(sov[ex4_axu_spv_unavail_offset]), .din(ex4_axu_spv_unavail_d), .dout(ex4_axu_spv_unavail_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_local_flush_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_local_flush_offset]), .scout(sov[ex5_local_flush_offset]), .din(ex5_local_flush_d), .dout(ex5_local_flush_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_tlb_flush_req_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_tlb_flush_req_offset]), .scout(sov[ex5_tlb_flush_req_offset]), .din(ex5_tlb_flush_req_d), .dout(ex5_tlb_flush_req_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_tlb_mchk_req_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_tlb_mchk_req_offset]), .scout(sov[ex5_tlb_mchk_req_offset]), .din(ex5_tlb_mchk_req_d), .dout(ex5_tlb_mchk_req_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_low_pri_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_low_pri_excp_offset]), .scout(sov[ex5_low_pri_excp_offset]), .din(ex5_low_pri_excp_d), .dout(ex5_low_pri_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_high_pri_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_high_pri_excp_offset]), .scout(sov[ex5_high_pri_excp_offset]), .din(ex5_high_pri_excp_d), .dout(ex5_high_pri_excp_q) ); tri_rlmreg_p #(.WIDTH(6), .INIT(0), .NEEDS_SRESET(1)) ex5_exception_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(ex4_stg_act), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_exception_offset:ex5_exception_offset + 6 - 1]), .scout(sov[ex5_exception_offset:ex5_exception_offset + 6 - 1]), .din(ex5_exception_d), .dout(ex5_exception_q) ); tri_rlmreg_p #(.WIDTH(`THREADS), .INIT(0), .NEEDS_SRESET(1)) ex5_dear_val_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_dear_val_offset:ex5_dear_val_offset + `THREADS - 1]), .scout(sov[ex5_dear_val_offset:ex5_dear_val_offset + `THREADS - 1]), .din(ex5_dear_val_d), .dout(ex5_dear_val_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_derat_multihit_flush_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_derat_multihit_flush_offset]), .scout(sov[ex5_derat_multihit_flush_offset]), .din(ex5_derat_multihit_flush_d), .dout(ex5_derat_multihit_flush_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_derat_multihit_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_derat_multihit_det_offset]), .scout(sov[ex5_derat_multihit_det_offset]), .din(ex5_derat_multihit_det_d), .dout(ex5_derat_multihit_det_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_derat_perr_flush_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_derat_perr_flush_offset]), .scout(sov[ex5_derat_perr_flush_offset]), .din(ex5_derat_perr_flush_d), .dout(ex5_derat_perr_flush_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_derat_perr_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_derat_perr_det_offset]), .scout(sov[ex5_derat_perr_det_offset]), .din(ex5_derat_perr_det_d), .dout(ex5_derat_perr_det_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_sfx_excpt_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_sfx_excpt_det_offset]), .scout(sov[ex2_sfx_excpt_det_offset]), .din(ex2_sfx_excpt_det_d), .dout(ex2_sfx_excpt_det_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_sfx_excpt_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_sfx_excpt_det_offset]), .scout(sov[ex3_sfx_excpt_det_offset]), .din(ex3_sfx_excpt_det_d), .dout(ex3_sfx_excpt_det_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_sfx_excpt_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_sfx_excpt_det_offset]), .scout(sov[ex4_sfx_excpt_det_offset]), .din(ex4_sfx_excpt_det_d), .dout(ex4_sfx_excpt_det_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_priv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_priv_prog_offset]), .scout(sov[ex2_priv_prog_offset]), .din(ex2_priv_prog_d), .dout(ex2_priv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_priv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_priv_prog_offset]), .scout(sov[ex3_priv_prog_offset]), .din(ex3_priv_prog_d), .dout(ex3_priv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_priv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_priv_prog_offset]), .scout(sov[ex4_priv_prog_offset]), .din(ex4_priv_prog_d), .dout(ex4_priv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_hypv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_hypv_prog_offset]), .scout(sov[ex2_hypv_prog_offset]), .din(ex2_hypv_prog_d), .dout(ex2_hypv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_hypv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_hypv_prog_offset]), .scout(sov[ex3_hypv_prog_offset]), .din(ex3_hypv_prog_d), .dout(ex3_hypv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_hypv_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_hypv_prog_offset]), .scout(sov[ex4_hypv_prog_offset]), .din(ex4_hypv_prog_d), .dout(ex4_hypv_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_illeg_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_illeg_prog_offset]), .scout(sov[ex2_illeg_prog_offset]), .din(ex2_illeg_prog_d), .dout(ex2_illeg_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_illeg_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_illeg_prog_offset]), .scout(sov[ex3_illeg_prog_offset]), .din(ex3_illeg_prog_d), .dout(ex3_illeg_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_illeg_prog_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_illeg_prog_offset]), .scout(sov[ex4_illeg_prog_offset]), .din(ex4_illeg_prog_d), .dout(ex4_illeg_prog_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_dlock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_dlock_excp_offset]), .scout(sov[ex2_dlock_excp_offset]), .din(ex2_dlock_excp_d), .dout(ex2_dlock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_dlock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_dlock_excp_offset]), .scout(sov[ex3_dlock_excp_offset]), .din(ex3_dlock_excp_d), .dout(ex3_dlock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_dlock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_dlock_excp_offset]), .scout(sov[ex4_dlock_excp_offset]), .din(ex4_dlock_excp_d), .dout(ex4_dlock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_ilock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_ilock_excp_offset]), .scout(sov[ex2_ilock_excp_offset]), .din(ex2_ilock_excp_d), .dout(ex2_ilock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_ilock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_ilock_excp_offset]), .scout(sov[ex3_ilock_excp_offset]), .din(ex3_ilock_excp_d), .dout(ex3_ilock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_ilock_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_ilock_excp_offset]), .scout(sov[ex4_ilock_excp_offset]), .din(ex4_ilock_excp_d), .dout(ex4_ilock_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex2_ehpriv_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex2_ehpriv_excp_offset]), .scout(sov[ex2_ehpriv_excp_offset]), .din(ex2_ehpriv_excp_d), .dout(ex2_ehpriv_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex3_ehpriv_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex3_ehpriv_excp_offset]), .scout(sov[ex3_ehpriv_excp_offset]), .din(ex3_ehpriv_excp_d), .dout(ex3_ehpriv_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_cache_acc_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_cache_acc_offset]), .scout(sov[ex4_cache_acc_offset]), .din(ex4_cache_acc_d), .dout(ex4_cache_acc_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex4_ucode_val_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_ucode_val_offset]), .scout(sov[ex4_ucode_val_offset]), .din(ex4_ucode_val_d), .dout(ex4_ucode_val_q) ); tri_rlmreg_p #(.WIDTH(`UCODE_ENTRIES_ENC), .INIT(0), .NEEDS_SRESET(1)) ex4_ucode_cnt_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(ex3_stg_act), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex4_ucode_cnt_offset:ex4_ucode_cnt_offset + `UCODE_ENTRIES_ENC - 1]), .scout(sov[ex4_ucode_cnt_offset:ex4_ucode_cnt_offset + `UCODE_ENTRIES_ENC - 1]), .din(ex4_ucode_cnt_d), .dout(ex4_ucode_cnt_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_wNComp_rcvd_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_wNComp_rcvd_offset]), .scout(sov[ex5_wNComp_rcvd_offset]), .din(ex5_wNComp_rcvd_d), .dout(ex5_wNComp_rcvd_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex6_wNComp_excp_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex6_wNComp_excp_offset]), .scout(sov[ex6_wNComp_excp_offset]), .din(ex6_wNComp_excp_d), .dout(ex6_wNComp_excp_q) ); tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) ex5_dac_int_det_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ex5_dac_int_det_offset]), .scout(sov[ex5_dac_int_det_offset]), .din(ex5_dac_int_det_d), .dout(ex5_dac_int_det_q) ); tri_rlmreg_p #(.WIDTH(7), .INIT(0), .NEEDS_SRESET(1)) perv_fir_rpt_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[perv_fir_rpt_offset:perv_fir_rpt_offset + 7 - 1]), .scout(sov[perv_fir_rpt_offset:perv_fir_rpt_offset + 7 - 1]), .din(perv_fir_rpt_d), .dout(perv_fir_rpt_q) ); tri_rlmreg_p #(.WIDTH(UCODEDEPTH), .INIT(0), .NEEDS_SRESET(1)) ucode_cnt_val_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ucode_cnt_val_offset:ucode_cnt_val_offset + UCODEDEPTH - 1]), .scout(sov[ucode_cnt_val_offset:ucode_cnt_val_offset + UCODEDEPTH - 1]), .din(ucode_cnt_val_d), .dout(ucode_cnt_val_q) ); tri_rlmreg_p #(.WIDTH(UCODEDEPTH), .INIT(0), .NEEDS_SRESET(1)) ucode_cnt_2ucode_reg( .vd(vdd), .gd(gnd), .nclk(nclk), .act(tiup), .force_t(func_sl_force), .d_mode(d_mode_dc), .delay_lclkr(delay_lclkr_dc), .mpw1_b(mpw1_dc_b), .mpw2_b(mpw2_dc_b), .thold_b(func_sl_thold_0_b), .sg(sg_0), .scin(siv[ucode_cnt_2ucode_offset:ucode_cnt_2ucode_offset + UCODEDEPTH - 1]), .scout(sov[ucode_cnt_2ucode_offset:ucode_cnt_2ucode_offset + UCODEDEPTH - 1]), .din(ucode_cnt_2ucode_d), .dout(ucode_cnt_2ucode_q) ); generate begin : ucode_cnt_memAttr genvar ucodeEntry; for (ucodeEntry=0; ucodeEntry