You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3088 lines
137 KiB
VHDL

-- © 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.
library ieee, ibm;
use ieee.std_logic_1164.all;
use ibm.std_ulogic_support.all;
use ibm.std_ulogic_function_support.all;
library support;
use support.power_logic_pkg.all;
library tri;
use tri.tri_latches_pkg.all;
library work;
use work.iuq_pkg.all;
entity iuq_fxu_dep is
generic(expand_type : integer := 2;
regmode : integer := 6;
lmq_entries : integer := 8);
port(
vdd : inout power_logic;
gnd : inout power_logic;
nclk : in clk_logic;
pc_iu_func_sl_thold_0_b : in std_ulogic;
pc_iu_sg_0 : in std_ulogic;
forcee : in std_ulogic;
d_mode : in std_ulogic;
delay_lclkr : in std_ulogic;
mpw1_b : in std_ulogic;
mpw2_b : in std_ulogic;
scan_in : in std_ulogic;
scan_out : out std_ulogic;
pc_iu_trace_bus_enable : in std_ulogic;
pc_iu_event_bus_enable : in std_ulogic;
fdep_dbg_data : out std_ulogic_vector(0 to 21);
fdep_perf_event : out std_ulogic_vector(0 to 11);
fdec_fdep_is1_vld : in std_ulogic;
fdec_fdep_is1_instr : in std_ulogic_vector(0 to 31);
fdec_fdep_is1_ta_vld : in std_ulogic;
fdec_fdep_is1_ta : in std_ulogic_vector(0 to 5);
fdec_fdep_is1_s1_vld : in std_ulogic;
fdec_fdep_is1_s1 : in std_ulogic_vector(0 to 5);
fdec_fdep_is1_s2_vld : in std_ulogic;
fdec_fdep_is1_s2 : in std_ulogic_vector(0 to 5);
fdec_fdep_is1_s3_vld : in std_ulogic;
fdec_fdep_is1_s3 : in std_ulogic_vector(0 to 5);
fdec_fdep_is1_pred_update : in std_ulogic;
fdec_fdep_is1_pred_taken_cnt : in std_ulogic_vector(0 to 1);
fdec_fdep_is1_gshare : in std_ulogic_vector(0 to 3);
fdec_fdep_is1_UpdatesLR : in std_ulogic;
fdec_fdep_is1_UpdatesCR : in std_ulogic;
fdec_fdep_is1_UpdatesCTR : in std_ulogic;
fdec_fdep_is1_UpdatesXER : in std_ulogic;
fdec_fdep_is1_UpdatesMSR : in std_ulogic;
fdec_fdep_is1_UpdatesSPR : in std_ulogic;
fdec_fdep_is1_UsesLR : in std_ulogic;
fdec_fdep_is1_UsesCR : in std_ulogic;
fdec_fdep_is1_UsesCTR : in std_ulogic;
fdec_fdep_is1_UsesXER : in std_ulogic;
fdec_fdep_is1_UsesMSR : in std_ulogic;
fdec_fdep_is1_UsesSPR : in std_ulogic;
fdec_fdep_is1_hole_delay : in std_ulogic_vector(0 to 2);
fdec_fdep_is1_ld_vld : in std_ulogic;
fdec_fdep_is1_to_ucode : in std_ulogic;
fdec_fdep_is1_is_ucode : in std_ulogic;
fdec_fdep_is1_ifar : in EFF_IFAR;
fdec_fdep_is1_error : in std_ulogic_vector(0 to 2);
fdec_fdep_is1_complete : in std_ulogic_vector(0 to 4);
fdec_fdep_is1_axu_ld_or_st : in std_ulogic;
fdec_fdep_is1_axu_store : in std_ulogic;
fdec_fdep_is1_axu_ldst_indexed : in std_ulogic;
fdec_fdep_is1_axu_ldst_tag : in std_ulogic_vector(0 to 8);
fdec_fdep_is1_axu_ldst_size : in std_ulogic_vector(0 to 5);
fdec_fdep_is1_axu_ldst_update : in std_ulogic;
fdec_fdep_is1_axu_ldst_extpid : in std_ulogic;
fdec_fdep_is1_axu_ldst_forcealign : in std_ulogic;
fdec_fdep_is1_axu_ldst_forceexcept : in std_ulogic;
fdec_fdep_is1_axu_mftgpr : in std_ulogic;
fdec_fdep_is1_axu_mffgpr : in std_ulogic;
fdec_fdep_is1_axu_movedp : in std_ulogic;
fdec_fdep_is1_axu_instr_type : in std_ulogic_vector(0 to 2);
fdec_fdep_is1_match : in std_ulogic;
fdec_fdep_is1_force_ram : in std_ulogic;
fdec_fdep_is1_2ucode : in std_ulogic;
fdec_fdep_is1_2ucode_type : in std_ulogic;
fdep_fiss_is2_instr : out std_ulogic_vector(0 to 31);
fdep_fiss_is2_ta_vld : out std_ulogic;
fdep_fiss_is2_ta : out std_ulogic_vector(0 to 5);
fdep_fiss_is2_s1_vld : out std_ulogic;
fdep_fiss_is2_s1 : out std_ulogic_vector(0 to 5);
fdep_fiss_is2_s2_vld : out std_ulogic;
fdep_fiss_is2_s2 : out std_ulogic_vector(0 to 5);
fdep_fiss_is2_s3_vld : out std_ulogic;
fdep_fiss_is2_s3 : out std_ulogic_vector(0 to 5);
fdep_fiss_is2_pred_update : out std_ulogic;
fdep_fiss_is2_pred_taken_cnt : out std_ulogic_vector(0 to 1);
fdep_fiss_is2_gshare : out std_ulogic_vector(0 to 3);
fdep_fiss_is2_ifar : out EFF_IFAR;
fdep_fiss_is2_error : out std_ulogic_vector(0 to 2);
fdep_fiss_is2_axu_ld_or_st : out std_ulogic;
fdep_fiss_is2_axu_store : out std_ulogic;
fdep_fiss_is2_axu_ldst_indexed : out std_ulogic;
fdep_fiss_is2_axu_ldst_tag : out std_ulogic_vector(0 to 8);
fdep_fiss_is2_axu_ldst_size : out std_ulogic_vector(0 to 5);
fdep_fiss_is2_axu_ldst_update : out std_ulogic;
fdep_fiss_is2_axu_ldst_extpid : out std_ulogic;
fdep_fiss_is2_axu_ldst_forcealign : out std_ulogic;
fdep_fiss_is2_axu_ldst_forceexcept : out std_ulogic;
fdep_fiss_is2_axu_mftgpr : out std_ulogic;
fdep_fiss_is2_axu_mffgpr : out std_ulogic;
fdep_fiss_is2_axu_movedp : out std_ulogic;
fdep_fiss_is2_axu_instr_type : out std_ulogic_vector(0 to 2);
fdep_fiss_is2_match : out std_ulogic;
fdep_fiss_is2_2ucode : out std_ulogic;
fdep_fiss_is2_2ucode_type : out std_ulogic;
fdep_fiss_is2_hole_delay : out std_ulogic_vector(0 to 2);
fdep_fiss_is2_to_ucode : out std_ulogic;
fdep_fiss_is2_is_ucode : out std_ulogic;
fdep_fiss_is2early_vld : out std_ulogic;
fdep_fiss_is1_xu_dep_hit_b : out std_ulogic;
fiss_fdep_is2_take : in std_ulogic;
i_afd_is1_instr_v : in std_ulogic;
au_iu_issue_stall : in std_ulogic;
iu_au_is2_stall : out std_ulogic;
au_iu_is1_dep_hit : in std_ulogic;
au_iu_is1_dep_hit_b : in std_ulogic;
au_iu_is2_axubusy : in std_ulogic;
iu_au_is1_stall : out std_ulogic;
fdep_fdec_buff_stall : out std_ulogic;
fdep_fdec_weak_stall : out std_ulogic;
xu_iu_slowspr_done : in std_ulogic;
xu_iu_multdiv_done : in std_ulogic;
iu_au_is1_hold : out std_ulogic;
xu_iu_loadmiss_vld : in std_ulogic;
xu_iu_loadmiss_qentry : in std_ulogic_vector(0 to lmq_entries-1);
xu_iu_loadmiss_target : in std_ulogic_vector(0 to 5);
xu_iu_loadmiss_target_type : in std_ulogic;
xu_iu_complete_vld : in std_ulogic;
xu_iu_complete_qentry : in std_ulogic_vector(0 to lmq_entries-1);
xu_iu_complete_target_type : in std_ulogic;
xu_iu_single_instr_mode : in std_ulogic;
ic_fdep_load_quiesce : in std_ulogic;
iu_xu_quiesce : out std_ulogic;
xu_iu_membar_tid : in std_ulogic;
xu_iu_set_barr_tid : in std_ulogic;
xu_iu_larx_done_tid : in std_ulogic;
an_ac_sync_ack : in std_ulogic;
ic_fdep_icbi_ack : in std_ulogic;
an_ac_stcx_complete : in std_ulogic;
mm_iu_barrier_done : in std_ulogic;
spr_fdep_ll_hold : in std_ulogic;
xu_iu_spr_ccr2_en_dcr : in std_ulogic;
xu_iu_is1_flush : in std_ulogic;
xu_iu_is2_flush : in std_ulogic;
xu_iu_rf0_flush : in std_ulogic;
xu_iu_rf1_flush : in std_ulogic;
xu_iu_ex1_flush : in std_ulogic;
xu_iu_ex2_flush : in std_ulogic;
xu_iu_ex3_flush : in std_ulogic;
xu_iu_ex4_flush : in std_ulogic;
xu_iu_ex5_flush : in std_ulogic
);
end iuq_fxu_dep;
ARCHITECTURE IUQ_FXU_DEP
OF IUQ_FXU_DEP
IS
--@@ Signal Declarations
SIGNAL BARRIER_PT : STD_ULOGIC_VECTOR(1 TO 24) :=
(OTHERS=> 'U');
SIGNAL SLOWSPR_TABLE_PT : STD_ULOGIC_VECTOR(1 TO 20) :=
(OTHERS=> 'U');
SIGNAL is_bar : STD_ULOGIC :=
'U';
SIGNAL is_slowspr : STD_ULOGIC :=
'U';
-- Scan chain connenctions
constant is2_vld_offset : natural := 0;
constant is2_instr_offset : natural := is2_vld_offset + 1;
constant is2_ta_vld_offset : natural := is2_instr_offset + 32;
constant is2_ta_offset : natural := is2_ta_vld_offset + 1;
constant is2_s1_vld_offset : natural := is2_ta_offset + 6;
constant is2_s1_offset : natural := is2_s1_vld_offset + 1;
constant is2_s2_vld_offset : natural := is2_s1_offset + 6;
constant is2_s2_offset : natural := is2_s2_vld_offset + 1;
constant is2_s3_vld_offset : natural := is2_s2_offset + 6;
constant is2_s3_offset : natural := is2_s3_vld_offset + 1;
constant is2_is_barrier_offset : natural := is2_s3_offset + 6;
constant is2_is_slowspr_offset : natural := is2_is_barrier_offset + 1;
constant is2_pred_update_offset : natural := is2_is_slowspr_offset + 1;
constant is2_pred_taken_cnt_offset : natural := is2_pred_update_offset + 1;
constant is2_gshare_offset : natural := is2_pred_taken_cnt_offset + 2;
constant is2_hole_delay_offset : natural := is2_gshare_offset + 4;
constant is2_to_ucode_offset : natural := is2_hole_delay_offset +3;
constant is2_is_ucode_offset : natural := is2_to_ucode_offset + 1;
constant is2_ifar_offset : natural := is2_is_ucode_offset + 1;
constant is2_error_offset : natural := is2_ifar_offset + EFF_IFAR'length;
constant is2_axu_ld_or_st_offset : natural := is2_error_offset + 3;
constant is2_axu_store_offset : natural := is2_axu_ld_or_st_offset + 1;
constant is2_axu_ldst_indexed_offset : natural := is2_axu_store_offset + 1;
constant is2_axu_ldst_tag_offset : natural := is2_axu_ldst_indexed_offset + 1;
constant is2_axu_ldst_size_offset : natural := is2_axu_ldst_tag_offset + 9;
constant is2_axu_ldst_update_offset : natural := is2_axu_ldst_size_offset + 6;
constant is2_axu_ldst_extpid_offset : natural := is2_axu_ldst_update_offset + 1;
constant is2_axu_ldst_forcealign_offset : natural := is2_axu_ldst_extpid_offset + 1;
constant is2_axu_ldst_forceexcept_offset: natural := is2_axu_ldst_forcealign_offset + 1;
constant is2_axu_mftgpr_offset : natural := is2_axu_ldst_forceexcept_offset + 1;
constant is2_axu_mffgpr_offset : natural := is2_axu_mftgpr_offset + 1;
constant is2_axu_movedp_offset : natural := is2_axu_mffgpr_offset + 1;
constant is2_axu_instr_type_offset : natural := is2_axu_movedp_offset + 1;
constant is2_match_offset : natural := is2_axu_instr_type_offset + 3;
constant is2_2ucode_offset : natural := is2_match_offset + 1;
constant is2_2ucode_type_offset : natural := is2_2ucode_offset + 1;
constant sp_ex3_i_nobyp_vld_offset : natural := is2_2ucode_type_offset + 1;
constant sp_ex3_barrier_offset : natural := sp_ex3_i_nobyp_vld_offset + 1;
constant sp_ex4_i_nobyp_vld_offset : natural := sp_ex3_barrier_offset + 1;
constant sp_ex4_barrier_offset : natural := sp_ex4_i_nobyp_vld_offset + 1;
constant sp_ex5_i_nobyp_vld_offset : natural := sp_ex4_barrier_offset + 1;
constant sp_ex5_barrier_offset : natural := sp_ex5_i_nobyp_vld_offset + 1;
constant sp_is2_offset : natural := sp_ex5_barrier_offset + 1;
constant sp_rf0_offset : natural := sp_is2_offset +21;
constant sp_rf1_offset : natural := sp_rf0_offset +21;
constant sp_ex1_offset : natural := sp_rf1_offset +21;
constant sp_ex2_offset : natural := sp_ex1_offset +21;
constant sp_lm_offset : natural := sp_ex2_offset +21;
constant barrier_offset : natural := sp_lm_offset +7*lmq_entries;
constant xu_barrier_offset : natural := barrier_offset +1;
constant mult_hole_barrier_offset : natural := xu_barrier_offset +1;
constant single_instr_mode_offset : natural := mult_hole_barrier_offset +6;
constant quiesce_offset : natural := single_instr_mode_offset +1;
constant perf_event_offset : natural := quiesce_offset +1;
constant perf_early_offset : natural := perf_event_offset +12;
constant fdep_dbg_data_offset : natural := perf_early_offset +12;
constant an_ac_sync_ack_offset : natural := fdep_dbg_data_offset +22;
constant xu_iu_membar_tid_offset : natural := an_ac_sync_ack_offset +1;
constant xu_iu_multdiv_done_offset : natural := xu_iu_membar_tid_offset +1;
constant mm_iu_barrier_done_offset : natural := xu_iu_multdiv_done_offset +1;
constant spr_fdep_ll_hold_offset : natural := mm_iu_barrier_done_offset +1;
constant en_dcr_offset : natural := spr_fdep_ll_hold_offset +1;
constant spare_offset : natural := en_dcr_offset +1;
constant trace_bus_enable_offset : natural := spare_offset + 6;
constant event_bus_enable_offset : natural := trace_bus_enable_offset + 1;
constant scan_right : natural := event_bus_enable_offset + 1 - 1;
signal spare_l2 : std_ulogic_vector(0 to 5);
signal trace_bus_enable_d : std_ulogic;
signal trace_bus_enable_q : std_ulogic;
signal event_bus_enable_d : std_ulogic;
signal event_bus_enable_q : std_ulogic;
signal siv : std_ulogic_vector(0 to scan_right);
signal sov : std_ulogic_vector(0 to scan_right);
signal tiup : std_ulogic;
signal tidn : std_ulogic;
signal unused : std_ulogic_vector(0 to 4);
-- synopsys translate_off
-- synopsys translate_on
signal single_instr_mode_d : std_ulogic;
signal single_instr_mode_l2 : std_ulogic;
signal is2_vld_d : std_ulogic;
signal is2_instr_d : std_ulogic_vector(0 to 31);
signal is2_ta_vld_d : std_ulogic;
signal is2_ta_d : std_ulogic_vector(0 to 5);
signal is2_s1_vld_d : std_ulogic;
signal is2_s1_d : std_ulogic_vector(0 to 5);
signal is2_s2_vld_d : std_ulogic;
signal is2_s2_d : std_ulogic_vector(0 to 5);
signal is2_s3_vld_d : std_ulogic;
signal is2_s3_d : std_ulogic_vector(0 to 5);
signal is2_is_barrier_d : std_ulogic;
signal is2_is_slowspr_d : std_ulogic;
signal is2_pred_update_d : std_ulogic;
signal is2_pred_taken_cnt_d : std_ulogic_vector(0 to 1);
signal is2_gshare_d : std_ulogic_vector(0 to 3);
signal is2_hole_delay_d : std_ulogic_vector(0 to 2);
signal is2_to_ucode_d : std_ulogic;
signal is2_is_ucode_d : std_ulogic;
signal is2_ifar_d : EFF_IFAR;
signal is2_error_d : std_ulogic_vector(0 to 2);
signal is2_axu_ld_or_st_d : std_ulogic;
signal is2_axu_store_d : std_ulogic;
signal is2_axu_ldst_indexed_d : std_ulogic;
signal is2_axu_ldst_tag_d : std_ulogic_vector(0 to 8);
signal is2_axu_ldst_size_d : std_ulogic_vector(0 to 5);
signal is2_axu_ldst_update_d : std_ulogic;
signal is2_axu_ldst_extpid_d : std_ulogic;
signal is2_axu_ldst_forcealign_d : std_ulogic;
signal is2_axu_ldst_forceexcept_d : std_ulogic;
signal is2_axu_mftgpr_d : std_ulogic;
signal is2_axu_mffgpr_d : std_ulogic;
signal is2_axu_movedp_d : std_ulogic;
signal is2_axu_instr_type_d : std_ulogic_vector(0 to 2);
signal is2_match_d : std_ulogic;
signal is2_2ucode_d : std_ulogic;
signal is2_2ucode_type_d : std_ulogic;
signal is2_vld_L2 : std_ulogic;
signal is2_instr_L2 : std_ulogic_vector(0 to 31);
signal is2_ta_vld_L2 : std_ulogic;
signal is2_ta_L2 : std_ulogic_vector(0 to 5);
signal is2_s1_vld_L2 : std_ulogic;
signal is2_s1_L2 : std_ulogic_vector(0 to 5);
signal is2_s2_vld_L2 : std_ulogic;
signal is2_s2_L2 : std_ulogic_vector(0 to 5);
signal is2_s3_vld_L2 : std_ulogic;
signal is2_s3_L2 : std_ulogic_vector(0 to 5);
signal is2_is_barrier_L2 : std_ulogic;
signal is2_is_slowspr_L2 : std_ulogic;
signal is2_pred_update_L2 : std_ulogic;
signal is2_pred_taken_cnt_L2 : std_ulogic_vector(0 to 1);
signal is2_gshare_L2 : std_ulogic_vector(0 to 3);
signal is2_hole_delay_L2 : std_ulogic_vector(0 to 2);
signal is2_to_ucode_L2 : std_ulogic;
signal is2_is_ucode_L2 : std_ulogic;
signal is2_ifar_L2 : EFF_IFAR;
signal is2_error_L2 : std_ulogic_vector(0 to 2);
signal is2_axu_ld_or_st_L2 : std_ulogic;
signal is2_axu_store_L2 : std_ulogic;
signal is2_axu_ldst_indexed_L2 : std_ulogic;
signal is2_axu_ldst_tag_L2 : std_ulogic_vector(0 to 8);
signal is2_axu_ldst_size_L2 : std_ulogic_vector(0 to 5);
signal is2_axu_ldst_update_L2 : std_ulogic;
signal is2_axu_ldst_extpid_L2 : std_ulogic;
signal is2_axu_ldst_forcealign_L2 : std_ulogic;
signal is2_axu_ldst_forceexcept_L2 : std_ulogic;
signal is2_axu_mftgpr_L2 : std_ulogic;
signal is2_axu_mffgpr_L2 : std_ulogic;
signal is2_axu_movedp_L2 : std_ulogic;
signal is2_axu_instr_type_L2 : std_ulogic_vector(0 to 2);
signal is2_match_L2 : std_ulogic;
signal is2_2ucode_L2 : std_ulogic;
signal is2_2ucode_type_L2 : std_ulogic;
signal is1_instr_is_isync : std_ulogic;
signal is1_instr_is_sync : std_ulogic;
signal is1_instr_is_tlbsync : std_ulogic;
signal RAW_dep_hit : std_ulogic;
signal RAW_s1_hit_b : std_ulogic;
signal RAW_s2_hit_b : std_ulogic;
signal RAW_s3_hit_b : std_ulogic;
signal lr_dep_hit : std_ulogic;
signal cr_dep_hit : std_ulogic;
signal ctr_dep_hit : std_ulogic;
signal xer_dep_hit : std_ulogic;
signal msr_dep_hit : std_ulogic;
signal spr_dep_hit : std_ulogic;
signal br_sprs_dep_hit : std_ulogic;
signal WAW_LMQ_dep_hit : std_ulogic;
signal WAW_LMQ_dep_hit_b : std_ulogic;
signal single_instr_dep_hit : std_ulogic;
signal internal_is2_stall : std_ulogic;
signal dep_hit : std_ulogic;
signal dep_hit_no_stall : std_ulogic;
signal xu_dep_hit : std_ulogic;
signal is2_instr_is_barrier : std_ulogic;
signal act_nonvalid : std_ulogic;
signal sp_IS2_d : std_ulogic_vector(0 to 20);
signal sp_IS2_l2 : std_ulogic_vector(0 to 20);
signal sp_RF0_d : std_ulogic_vector(0 to 20);
signal sp_RF0_l2 : std_ulogic_vector(0 to 20);
signal sp_RF1_d : std_ulogic_vector(0 to 20);
signal sp_RF1_l2 : std_ulogic_vector(0 to 20);
signal sp_EX1_d : std_ulogic_vector(0 to 20);
signal sp_EX1_l2 : std_ulogic_vector(0 to 20);
signal sp_EX2_d : std_ulogic_vector(0 to 20);
signal sp_EX2_l2 : std_ulogic_vector(0 to 20);
signal sp_IS2_act : std_ulogic;
signal sp_RF0_act : std_ulogic;
signal sp_RF1_act : std_ulogic;
signal sp_EX1_act : std_ulogic;
signal sp_EX2_act : std_ulogic;
signal sp_EX3_act : std_ulogic;
signal sp_EX4_act : std_ulogic;
signal sp_EX5_act : std_ulogic;
signal sp_LM_d : std_ulogic_vector(0 to 7*lmq_entries-1);
signal sp_LM_l2 : std_ulogic_vector(0 to 7*lmq_entries-1);
signal lm_shadow_pipe_vld : std_ulogic_vector(0 to lmq_entries-1);
signal fdep_dbg_data_d : std_ulogic_vector(0 to 21);
signal fdep_dbg_data_l2 : std_ulogic_vector(0 to 21);
signal perf_event_d : std_ulogic_vector(0 to 11);
signal perf_event_l2 : std_ulogic_vector(0 to 11);
signal perf_early_d : std_ulogic_vector(0 to 11);
signal perf_early_l2 : std_ulogic_vector(0 to 11);
signal perf_dep_hit : std_ulogic;
signal perf_fdec_fdep_is1_vld : std_ulogic;
signal perf_internal_is2_stall : std_ulogic;
signal perf_i_afd_is1_instr_v : std_ulogic;
signal perf_au_iu_is1_dep_hit : std_ulogic;
signal perf_barrier_in_progress : std_ulogic;
signal perf_is2_is_slowspr_L2 : std_ulogic;
signal perf_RAW_dep_hit : std_ulogic;
signal perf_WAW_LMQ_dep_hit : std_ulogic;
signal perf_sync_dep_hit : std_ulogic;
signal perf_xu_dep_hit : std_ulogic;
signal perf_br_sprs_dep_hit : std_ulogic;
signal isMFSPR : std_ulogic;
signal isMTSPR : std_ulogic;
signal is1_is_slowspr : std_ulogic;
signal is1_is_barrier : std_ulogic;
signal an_ac_sync_ack_d : std_ulogic;
signal an_ac_sync_ack_l2 : std_ulogic;
signal xu_iu_membar_tid_d : std_ulogic;
signal xu_iu_membar_tid_l2 : std_ulogic;
signal xu_iu_multdiv_done_d : std_ulogic;
signal xu_iu_multdiv_done_l2 : std_ulogic;
signal mm_iu_barrier_done_d : std_ulogic;
signal mm_iu_barrier_done_l2 : std_ulogic;
signal spr_fdep_ll_hold_d : std_ulogic;
signal spr_fdep_ll_hold_l2 : std_ulogic;
signal is2_mult_hole_barrier : std_ulogic;
signal mult_hole_barrier_d : std_ulogic_vector(0 to 5);
signal mult_hole_barrier_l2 : std_ulogic_vector(0 to 5);
signal mult_hole_barrier_act : std_ulogic;
signal xu_barrier_d : std_ulogic;
signal xu_barrier_l2 : std_ulogic;
signal en_dcr_d : std_ulogic;
signal en_dcr_l2 : std_ulogic;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Shadow Pipe
--------------------------------------------------------------------------------------------------------------------------------------------------------
type PIPE_STAGE is record
i_nobyp_vld : std_ulogic;
i_vld : std_ulogic;
ta_vld : std_ulogic;
ta : std_ulogic_vector(0 to 5);
UpdatesLR : std_ulogic;
UpdatesCR : std_ulogic;
UPdatesCTR : std_ulogic;
UpdatesXER : std_ulogic;
UpdatesMSR : std_ulogic;
UPdatesSPR : std_ulogic;
complete : std_ulogic_vector(0 to 4);
barrier : std_ulogic;
end record;
type SHADOW_PIPE_STAGES is (IS2, RF0, RF1, EX1, EX2);
type MACHINE is array (SHADOW_PIPE_STAGES'left to SHADOW_PIPE_STAGES'right) of PIPE_STAGE;
signal sp_d : MACHINE;
signal sp_L2 : MACHINE;
signal sp_barrier_clr : std_ulogic;
signal sp_EX3_i_nobyp_vld_d : std_ulogic;
signal sp_EX3_i_nobyp_vld_l2 : std_ulogic;
signal sp_EX3_barrier_d : std_ulogic;
signal sp_EX3_barrier_l2 : std_ulogic;
signal sp_EX4_i_nobyp_vld_d : std_ulogic;
signal sp_EX4_i_nobyp_vld_l2 : std_ulogic;
signal sp_EX4_barrier_d : std_ulogic;
signal sp_EX4_barrier_l2 : std_ulogic;
signal sp_EX5_i_nobyp_vld_d : std_ulogic;
signal sp_EX5_i_nobyp_vld_l2 : std_ulogic;
signal sp_EX5_barrier_d : std_ulogic;
signal sp_EX5_barrier_l2 : std_ulogic;
type PIPE_STAGE_LM is record
ta_vld : std_ulogic;
ta : std_ulogic_vector(0 to 5);
end record;
type MACHINE_LM is array (0 to lmq_entries-1) of PIPE_STAGE_LM;
signal sp_d_LM : MACHINE_LM;
signal sp_L2_LM : MACHINE_LM;
signal loadmiss_qentry : std_ulogic_vector(0 to lmq_entries-1);
signal loadmiss_target : std_ulogic_vector(0 to 5);
signal loadmiss_complete : std_ulogic_vector(0 to lmq_entries-1);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- ISYNC
--------------------------------------------------------------------------------------------------------------------------------------------------------
signal shadow_pipe_vld : std_ulogic;
signal sync_dep_hit : std_ulogic;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- barrier
--------------------------------------------------------------------------------------------------------------------------------------------------------
signal set_barrier : std_ulogic;
signal clr_barrier : std_ulogic;
signal barrier_d : std_ulogic;
signal barrier_L2 : std_ulogic;
signal barrier_in_progress : std_ulogic;
signal quiesce_barrier : std_ulogic;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- General Use
--------------------------------------------------------------------------------------------------------------------------------------------------------
subtype s2 is std_ulogic_vector(0 to 1);
subtype s15 is std_ulogic_vector(0 to 14);
signal quiesce_d : std_ulogic;
signal quiesce_l2 : std_ulogic;
signal core64 : std_ulogic;
--mapping
signal is1_force_ram_b : std_ulogic;
signal is1_valid : std_ulogic;
signal is1_dep : std_ulogic;
signal is1_dep0_b : std_ulogic;
signal is1_dep1_b : std_ulogic;
signal is1_stall_b : std_ulogic;
signal is2_stall_b : std_ulogic;
signal fxu_dep0_b : std_ulogic;
signal fxu_dep1_b : std_ulogic;
signal fxu_dep_hit : std_ulogic;
signal fxu_dep_hit_b : std_ulogic;
signal is2_vld_b : std_ulogic;
signal fxu_iss_stall : std_ulogic;
signal is2_iss_stall_b : std_ulogic;
BEGIN
tiup <= '1';
tidn <= '0';
--64-bit mode
c64: if (regmode = 6) generate
begin
core64 <= '1';
end generate;
--32-bit core
c32: if (regmode = 5) generate
begin
core64 <= '0';
end generate;
en_dcr_d <= xu_iu_spr_ccr2_en_dcr;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Mmmmmmm IS1 Decode
--------------------------------------------------------------------------------------------------------------------------------------------------------
is1_instr_is_ISYNC <= (fdec_fdep_is1_instr(0 to 5) = "010011") and (fdec_fdep_is1_instr(21 to 30) = "0010010110");
is1_instr_is_SYNC <= (fdec_fdep_is1_instr(0 to 5) = "011111") and (fdec_fdep_is1_instr(21 to 30) = "1001010110");
is1_instr_is_TLBSYNC <= (fdec_fdep_is1_instr(0 to 5) = "011111") and (fdec_fdep_is1_instr(21 to 30) = "1000110110");
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- RAW hazard dependency tree. GPR, and VRF
--------------------------------------------------------------------------------------------------------------------------------------------------------
raw_s1_cmp: entity work.iuq_fxu_dep_cmp(iuq_fxu_dep_cmp)
port map (
is1_v => fdec_fdep_is1_s1_vld,
is2_v => sp_L2(IS2).ta_vld,
rf0_v => sp_L2(RF0).ta_vld,
rf1_v => sp_L2(RF1).ta_vld,
ex1_v => sp_L2(EX1).ta_vld,
ex2_v => sp_L2(EX2).ta_vld,
lm0_v => sp_L2_LM(0).ta_vld,
lm1_v => sp_L2_LM(1).ta_vld,
lm2_v => sp_L2_LM(2).ta_vld,
lm3_v => sp_L2_LM(3).ta_vld,
lm4_v => sp_L2_LM(4).ta_vld,
lm5_v => sp_L2_LM(5).ta_vld,
lm6_v => sp_L2_LM(6).ta_vld,
lm7_v => sp_L2_LM(7).ta_vld,
is1_ad => fdec_fdep_is1_s1,
is2_ad => sp_L2(IS2).ta,
rf0_ad => sp_L2(RF0).ta,
rf1_ad => sp_L2(RF1).ta,
ex1_ad => sp_L2(EX1).ta,
ex2_ad => sp_L2(EX2).ta,
lm0_ad => sp_L2_LM(0).ta,
lm1_ad => sp_L2_LM(1).ta,
lm2_ad => sp_L2_LM(2).ta,
lm3_ad => sp_L2_LM(3).ta,
lm4_ad => sp_L2_LM(4).ta,
lm5_ad => sp_L2_LM(5).ta,
lm6_ad => sp_L2_LM(6).ta,
lm7_ad => sp_L2_LM(7).ta,
ad_hit_b => RAW_s1_hit_b
);
raw_s2_cmp: entity work.iuq_fxu_dep_cmp(iuq_fxu_dep_cmp)
port map (
is1_v => fdec_fdep_is1_s2_vld,
is2_v => sp_L2(IS2).ta_vld,
rf0_v => sp_L2(RF0).ta_vld,
rf1_v => sp_L2(RF1).ta_vld,
ex1_v => sp_L2(EX1).ta_vld,
ex2_v => sp_L2(EX2).ta_vld,
lm0_v => sp_L2_LM(0).ta_vld,
lm1_v => sp_L2_LM(1).ta_vld,
lm2_v => sp_L2_LM(2).ta_vld,
lm3_v => sp_L2_LM(3).ta_vld,
lm4_v => sp_L2_LM(4).ta_vld,
lm5_v => sp_L2_LM(5).ta_vld,
lm6_v => sp_L2_LM(6).ta_vld,
lm7_v => sp_L2_LM(7).ta_vld,
is1_ad => fdec_fdep_is1_s2,
is2_ad => sp_L2(IS2).ta,
rf0_ad => sp_L2(RF0).ta,
rf1_ad => sp_L2(RF1).ta,
ex1_ad => sp_L2(EX1).ta,
ex2_ad => sp_L2(EX2).ta,
lm0_ad => sp_L2_LM(0).ta,
lm1_ad => sp_L2_LM(1).ta,
lm2_ad => sp_L2_LM(2).ta,
lm3_ad => sp_L2_LM(3).ta,
lm4_ad => sp_L2_LM(4).ta,
lm5_ad => sp_L2_LM(5).ta,
lm6_ad => sp_L2_LM(6).ta,
lm7_ad => sp_L2_LM(7).ta,
ad_hit_b => RAW_s2_hit_b
);
raw_s3_cmp: entity work.iuq_fxu_dep_cmp(iuq_fxu_dep_cmp)
port map (
is1_v => fdec_fdep_is1_s3_vld,
is2_v => sp_L2(IS2).ta_vld,
rf0_v => sp_L2(RF0).ta_vld,
rf1_v => sp_L2(RF1).ta_vld,
ex1_v => sp_L2(EX1).ta_vld,
ex2_v => sp_L2(EX2).ta_vld,
lm0_v => sp_L2_LM(0).ta_vld,
lm1_v => sp_L2_LM(1).ta_vld,
lm2_v => sp_L2_LM(2).ta_vld,
lm3_v => sp_L2_LM(3).ta_vld,
lm4_v => sp_L2_LM(4).ta_vld,
lm5_v => sp_L2_LM(5).ta_vld,
lm6_v => sp_L2_LM(6).ta_vld,
lm7_v => sp_L2_LM(7).ta_vld,
is1_ad => fdec_fdep_is1_s3,
is2_ad => sp_L2(IS2).ta,
rf0_ad => sp_L2(RF0).ta,
rf1_ad => sp_L2(RF1).ta,
ex1_ad => sp_L2(EX1).ta,
ex2_ad => sp_L2(EX2).ta,
lm0_ad => sp_L2_LM(0).ta,
lm1_ad => sp_L2_LM(1).ta,
lm2_ad => sp_L2_LM(2).ta,
lm3_ad => sp_L2_LM(3).ta,
lm4_ad => sp_L2_LM(4).ta,
lm5_ad => sp_L2_LM(5).ta,
lm6_ad => sp_L2_LM(6).ta,
lm7_ad => sp_L2_LM(7).ta,
ad_hit_b => RAW_s3_hit_b
);
raw_dep_nand3: RAW_dep_hit <= not(RAW_s1_hit_b and RAW_s2_hit_b and RAW_s3_hit_b);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Dependency tree for branch related setters and users
--------------------------------------------------------------------------------------------------------------------------------------------------------
lr_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesLR and sp_L2(IS2).UpdatesLR) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesLR and sp_L2(RF0).UpdatesLR) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesLR and sp_L2(RF1).UpdatesLR) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesLR and sp_L2(EX1).UpdatesLR) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesLR and sp_L2(EX2).UpdatesLR);
cr_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesCR and sp_L2(IS2).UpdatesCR) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesCR and sp_L2(RF0).UpdatesCR) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesCR and sp_L2(RF1).UpdatesCR) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesCR and sp_L2(EX1).UpdatesCR) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesCR and sp_L2(EX2).UpdatesCR);
ctr_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesCTR and sp_L2(IS2).UpdatesCTR) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesCTR and sp_L2(RF0).UpdatesCTR) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesCTR and sp_L2(RF1).UpdatesCTR) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesCTR and sp_L2(EX1).UpdatesCTR) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesCTR and sp_L2(EX2).UpdatesCTR);
xer_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesXER and sp_L2(IS2).UpdatesXER) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesXER and sp_L2(RF0).UpdatesXER) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesXER and sp_L2(RF1).UpdatesXER) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesXER and sp_L2(EX1).UpdatesXER) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesXER and sp_L2(EX2).UpdatesXER);
msr_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesMSR and sp_L2(IS2).UpdatesMSR) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesMSR and sp_L2(RF0).UpdatesMSR) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesMSR and sp_L2(RF1).UpdatesMSR) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesMSR and sp_L2(EX1).UpdatesMSR) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesMSR and sp_L2(EX2).UpdatesMSR);
spr_dep_hit <= (sp_L2(IS2).i_vld and fdec_fdep_is1_UsesSPR and sp_L2(IS2).UpdatesSPR) or
(sp_L2(RF0).i_vld and fdec_fdep_is1_UsesSPR and sp_L2(RF0).UpdatesSPR) or
(sp_L2(RF1).i_vld and fdec_fdep_is1_UsesSPR and sp_L2(RF1).UpdatesSPR) or
(sp_L2(EX1).i_vld and fdec_fdep_is1_UsesSPR and sp_L2(EX1).UpdatesSPR) or
(sp_L2(EX2).i_vld and fdec_fdep_is1_UsesSPR and sp_L2(EX2).UpdatesSPR);
br_sprs_dep_hit <= lr_dep_hit or cr_dep_hit or ctr_dep_hit or xer_dep_hit or msr_dep_hit or spr_dep_hit;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- WAW hazard dependency tree for load miss targets against instructions that could be issued under the load miss
--------------------------------------------------------------------------------------------------------------------------------------------------------
waw_cmp: entity work.iuq_fxu_dep_cmp(iuq_fxu_dep_cmp)
port map (
is1_v => fdec_fdep_is1_ld_vld,
is2_v => tidn,
rf0_v => tidn,
rf1_v => tidn,
ex1_v => tidn,
ex2_v => tidn,
lm0_v => sp_L2_LM(0).ta_vld,
lm1_v => sp_L2_LM(1).ta_vld,
lm2_v => sp_L2_LM(2).ta_vld,
lm3_v => sp_L2_LM(3).ta_vld,
lm4_v => sp_L2_LM(4).ta_vld,
lm5_v => sp_L2_LM(5).ta_vld,
lm6_v => sp_L2_LM(6).ta_vld,
lm7_v => sp_L2_LM(7).ta_vld,
is1_ad => fdec_fdep_is1_ta,
is2_ad => sp_L2(IS2).ta,
rf0_ad => sp_L2(RF0).ta,
rf1_ad => sp_L2(RF1).ta,
ex1_ad => sp_L2(EX1).ta,
ex2_ad => sp_L2(EX2).ta,
lm0_ad => sp_L2_LM(0).ta,
lm1_ad => sp_L2_LM(1).ta,
lm2_ad => sp_L2_LM(2).ta,
lm3_ad => sp_L2_LM(3).ta,
lm4_ad => sp_L2_LM(4).ta,
lm5_ad => sp_L2_LM(5).ta,
lm6_ad => sp_L2_LM(6).ta,
lm7_ad => sp_L2_LM(7).ta,
ad_hit_b => WAW_LMQ_dep_hit_b
);
WAW_LMQ_dep_hit <= not WAW_LMQ_dep_hit_b;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- single instruction outstanding mode OR run control. these two modes should not be used in concert
--------------------------------------------------------------------------------------------------------------------------------------------------------
single_instr_mode_d <= xu_iu_single_instr_mode;
single_instr_dep_hit <= ((shadow_pipe_vld or au_iu_is2_axubusy) and single_instr_mode_l2);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- dep_hit calculation
--------------------------------------------------------------------------------------------------------------------------------------------------------
dep_hit <= (not fdec_fdep_is1_force_ram and (RAW_dep_hit or WAW_LMQ_dep_hit or sync_dep_hit or single_instr_dep_hit or br_sprs_dep_hit or barrier_in_progress)) or au_iu_is1_dep_hit or internal_is2_stall;
dep_hit_no_stall <= (not fdec_fdep_is1_force_ram and (RAW_dep_hit or WAW_LMQ_dep_hit or sync_dep_hit or single_instr_dep_hit or br_sprs_dep_hit or barrier_in_progress)) or au_iu_is1_dep_hit;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- derivation of internal_is1_stall and dp_ib_instr_stall
--------------------------------------------------------------------------------------------------------------------------------------------------------
--mapping
is1_force_ram_b <= not fdec_fdep_is1_force_ram;
--is1 stall
is1_valid <= fdec_fdep_is1_vld or i_afd_is1_instr_v;
is1_dep0_nor2: is1_dep0_b <= not (RAW_dep_hit or br_sprs_dep_hit);
is1_dep1_nor3: is1_dep1_b <= not (sync_dep_hit or single_instr_dep_hit or barrier_in_progress);
is1_dep_nand3: is1_dep <= not (WAW_LMQ_dep_hit_b and is1_dep0_b and is1_dep1_b);
is1_stall_nand2: is1_stall_b <= not (is1_dep and fdec_fdep_is1_vld and is1_force_ram_b);
is2_stall_nand2: is2_stall_b <= not (internal_is2_stall and is1_valid);
fxu_stall_nand3: iu_au_is1_stall <= not (au_iu_is1_dep_hit_b and is1_stall_b and is2_stall_b);
--buffer stall
buf_stall_nand3: fdep_fdec_buff_stall <= not (au_iu_is1_dep_hit_b and is1_stall_b and is2_stall_b);
--fxu dep hit
fxu_dep0_nor2: fxu_dep0_b <= not (RAW_dep_hit or br_sprs_dep_hit);
fxu_dep1_nor3: fxu_dep1_b <= not (sync_dep_hit or single_instr_dep_hit or barrier_in_progress);
fxu_dep_nand3: fxu_dep_hit <= not (WAW_LMQ_dep_hit_b and fxu_dep0_b and fxu_dep1_b);
fxu_dep_nand2: fxu_dep_hit_b <= not (fxu_dep_hit and is1_force_ram_b);
xu_dep_hit <= not fxu_dep_hit_b;
--weak stall for clock gating
fdep_fdec_weak_stall <= (sync_dep_hit or single_instr_dep_hit or barrier_in_progress) and fdec_fdep_is1_vld and is1_force_ram_b;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Dependency shadow pipeline
--------------------------------------------------------------------------------------------------------------------------------------------------------
loadmiss_qentry <= gate_and(not xu_iu_ex5_flush and xu_iu_loadmiss_vld and xu_iu_loadmiss_target_type, xu_iu_loadmiss_qentry);
loadmiss_target <= gate_and(not xu_iu_ex5_flush and xu_iu_loadmiss_vld and xu_iu_loadmiss_target_type, xu_iu_loadmiss_target);
loadmiss_complete <= gate_and( xu_iu_complete_vld and xu_iu_complete_target_type, xu_iu_complete_qentry);
shadow_pipe_vld <= sp_L2(IS2).i_nobyp_vld or
sp_L2(RF0).i_nobyp_vld or
sp_L2(RF1).i_nobyp_vld or
sp_L2(EX1).i_nobyp_vld or
sp_L2(EX2).i_nobyp_vld or
sp_EX3_i_nobyp_vld_L2 or
sp_EX4_i_nobyp_vld_L2 or
sp_EX5_i_nobyp_vld_L2 or
or_reduce(lm_shadow_pipe_vld);
lm_shadow_pipe_vld_g: for i in 0 to lmq_entries-1 generate
lm_shadow_pipe_vld(i) <= sp_L2_LM(i).ta_vld;
end generate;
sp_d_proc : process(
xu_iu_is2_flush,
xu_iu_rf0_flush,
xu_iu_rf1_flush,
xu_iu_ex1_flush,
xu_iu_ex2_flush,
xu_iu_ex3_flush,
xu_iu_ex4_flush,
internal_is2_stall,
sp_L2(IS2).i_nobyp_vld, sp_L2(IS2).i_vld, sp_L2(IS2).ta_vld,
sp_L2(IS2).ta, sp_L2(IS2).UpdatesLR, sp_L2(IS2).UpdatesCR, sp_L2(IS2).UPdatesCTR,
sp_L2(IS2).UpdatesXER, sp_L2(IS2).UpdatesMSR, sp_L2(IS2).UPdatesSPR, sp_L2(IS2).complete, sp_L2(IS2).barrier,
sp_L2(RF0).i_nobyp_vld, sp_L2(RF0).i_vld, sp_L2(RF0).ta_vld,
sp_L2(RF0).ta, sp_L2(RF0).UpdatesLR, sp_L2(RF0).UpdatesCR, sp_L2(RF0).UPdatesCTR,
sp_L2(RF0).UpdatesXER, sp_L2(RF0).UpdatesMSR, sp_L2(RF0).UPdatesSPR, sp_L2(RF0).complete, sp_L2(RF0).barrier,
sp_L2(RF1).i_nobyp_vld, sp_L2(RF1).i_vld, sp_L2(RF1).ta_vld,
sp_L2(RF1).ta, sp_L2(RF1).UpdatesLR, sp_L2(RF1).UpdatesCR, sp_L2(RF1).UPdatesCTR,
sp_L2(RF1).UpdatesXER, sp_L2(RF1).UpdatesMSR, sp_L2(RF1).UPdatesSPR, sp_L2(RF1).complete, sp_L2(RF1).barrier,
sp_L2(EX1).i_nobyp_vld, sp_L2(EX1).i_vld, sp_L2(EX1).ta_vld,
sp_L2(EX1).ta, sp_L2(EX1).UpdatesLR, sp_L2(EX1).UpdatesCR, sp_L2(EX1).UPdatesCTR,
sp_L2(EX1).UpdatesXER, sp_L2(EX1).UpdatesMSR, sp_L2(EX1).UPdatesSPR, sp_L2(EX1).complete, sp_L2(EX1).barrier,
sp_L2(EX2).i_nobyp_vld, sp_L2(EX2).barrier,
sp_EX3_i_nobyp_vld_l2,
sp_EX4_i_nobyp_vld_l2,
sp_EX3_barrier_l2,
sp_EX4_barrier_l2,
sp_LM_l2,
fdec_fdep_is1_vld,
fdec_fdep_is1_ta_vld,
fdec_fdep_is1_ta,
fdec_fdep_is1_UpdatesLR,
fdec_fdep_is1_UpdatesCR,
fdec_fdep_is1_UpdatesCTR,
fdec_fdep_is1_UpdatesXER,
fdec_fdep_is1_UpdatesMSR,
fdec_fdep_is1_UpdatesSPR,
fdec_fdep_is1_complete,
xu_iu_is1_flush,
loadmiss_qentry,
loadmiss_target,
loadmiss_complete,
is2_instr_is_barrier,
dep_hit_no_stall
) begin
sp_d(IS2).i_nobyp_vld <= fdec_fdep_is1_vld and not dep_hit_no_stall;
sp_d(IS2).i_vld <= fdec_fdep_is1_vld and not dep_hit_no_stall and not fdec_fdep_is1_complete(0);
sp_d(IS2).ta_vld <= fdec_fdep_is1_vld and fdec_fdep_is1_ta_vld and not dep_hit_no_stall and not fdec_fdep_is1_complete(0);
sp_d(IS2).ta <= fdec_fdep_is1_ta;
sp_d(IS2).UpdatesLR <= fdec_fdep_is1_UpdatesLR;
sp_d(IS2).UpdatesCR <= fdec_fdep_is1_UpdatesCR;
sp_d(IS2).UpdatesCTR <= fdec_fdep_is1_UpdatesCTR;
sp_d(IS2).UpdatesXER <= fdec_fdep_is1_UpdatesXER;
sp_d(IS2).UpdatesMSR <= fdec_fdep_is1_UpdatesMSR;
sp_d(IS2).UpdatesSPR <= fdec_fdep_is1_UpdatesSPR;
sp_d(IS2).complete <= fdec_fdep_is1_complete;
sp_d(IS2).barrier <= '0';
if ib(internal_is2_stall) then
sp_d(IS2) <= sp_L2(IS2);
end if;
if ib(xu_iu_is1_flush) then
sp_d(IS2).i_nobyp_vld <= '0';
sp_d(IS2).i_vld <= '0';
sp_d(IS2).ta_vld <= '0';
end if;
sp_d(RF0) <= sp_L2(IS2);
sp_d(RF0).i_vld <=sp_L2(IS2).i_vld and not sp_L2(IS2).complete(1);
sp_d(RF0).ta_vld <=sp_L2(IS2).ta_vld and not sp_L2(IS2).complete(1);
sp_d(RF0).barrier <=is2_instr_is_barrier;
if ib(xu_iu_is2_flush) or ib(internal_is2_stall) then
sp_d(RF0).ta_vld <= '0';
sp_d(RF0).i_nobyp_vld <= '0';
sp_d(RF0).i_vld <= '0';
sp_d(RF0).barrier <= '0';
end if;
sp_d(RF1) <= sp_L2(RF0);
sp_d(RF1).i_vld <=sp_L2(RF0).i_vld and not sp_L2(RF0).complete(2);
sp_d(RF1).ta_vld <=sp_L2(RF0).ta_vld and not sp_L2(RF0).complete(2);
if ib(xu_iu_rf0_flush) then
sp_d(RF1).ta_vld <= '0';
sp_d(RF1).i_nobyp_vld <= '0';
sp_d(RF1).i_vld <= '0';
sp_d(RF1).barrier <= '0';
end if;
sp_d(EX1) <= sp_L2(RF1);
sp_d(EX1).i_vld <=sp_L2(RF1).i_vld and not sp_L2(RF1).complete(3);
sp_d(EX1).ta_vld <=sp_L2(RF1).ta_vld and not sp_L2(RF1).complete(3);
if ib(xu_iu_rf1_flush) then
sp_d(EX1).ta_vld <= '0';
sp_d(EX1).i_nobyp_vld <= '0';
sp_d(EX1).i_vld <= '0';
sp_d(EX1).barrier <= '0';
end if;
sp_d(EX2) <= sp_L2(EX1);
sp_d(EX2).i_vld <=sp_L2(EX1).i_vld and not sp_L2(EX1).complete(4);
sp_d(EX2).ta_vld <=sp_L2(EX1).ta_vld and not sp_L2(EX1).complete(4);
if ib(xu_iu_ex1_flush) then
sp_d(EX2).ta_vld <= '0';
sp_d(EX2).i_nobyp_vld <= '0';
sp_d(EX2).i_vld <= '0';
sp_d(EX2).barrier <= '0';
end if;
sp_EX3_i_nobyp_vld_d <= sp_L2(EX2).i_nobyp_vld;
sp_EX3_barrier_d <= sp_L2(EX2).barrier;
if ib(xu_iu_ex2_flush) then
sp_EX3_i_nobyp_vld_d <= '0';
sp_EX3_barrier_d <= '0';
end if;
sp_EX4_i_nobyp_vld_d <= sp_EX3_i_nobyp_vld_l2;
sp_EX4_barrier_d <= sp_EX3_barrier_l2;
if ib(xu_iu_ex3_flush) then
sp_EX4_i_nobyp_vld_d <= '0';
sp_EX4_barrier_d <= '0';
end if;
sp_EX5_i_nobyp_vld_d <= sp_EX4_i_nobyp_vld_l2;
sp_EX5_barrier_d <= sp_EX4_barrier_l2;
if ib(xu_iu_ex4_flush) then
sp_EX5_i_nobyp_vld_d <= '0';
sp_EX5_barrier_d <= '0';
end if;
lm_loop: for i in 0 to lmq_entries-1 loop
sp_d_LM(i).ta_vld <= sp_LM_l2(0+7*i);
sp_d_LM(i).ta <= sp_LM_l2(1+7*i to 6+7*i);
if ib(loadmiss_qentry(i)) then
sp_d_LM(i).ta_vld <='1';
sp_d_LM(i).ta <= loadmiss_target;
elsif ib(loadmiss_complete(i)) then
sp_d_LM(i).ta_vld <= '0';
end if;
end loop;
end process sp_d_proc;
--tie off unused SP signals
unused(0 TO 4) <= sp_L2(EX2).complete(0 to 4);
is2_instr_proc : process (
fdec_fdep_is1_vld,
fdec_fdep_is1_instr,
fdec_fdep_is1_ta_vld,
fdec_fdep_is1_ta,
fdec_fdep_is1_s1_vld,
fdec_fdep_is1_s1,
fdec_fdep_is1_s2_vld,
fdec_fdep_is1_s2,
fdec_fdep_is1_s3_vld,
fdec_fdep_is1_s3,
fdec_fdep_is1_pred_update,
fdec_fdep_is1_pred_taken_cnt,
fdec_fdep_is1_gshare,
fdec_fdep_is1_hole_delay,
fdec_fdep_is1_to_ucode,
fdec_fdep_is1_is_ucode,
fdec_fdep_is1_ifar,
fdec_fdep_is1_error,
is1_is_barrier,
is1_is_slowspr,
is2_vld_l2,
is2_instr_l2,
is2_ta_vld_l2,
is2_ta_l2,
is2_s1_vld_l2,
is2_s1_l2,
is2_s2_vld_l2,
is2_s2_l2,
is2_s3_vld_l2,
is2_s3_l2,
is2_is_barrier_l2,
is2_is_slowspr_l2,
is2_pred_update_l2,
is2_pred_taken_cnt_l2,
is2_gshare_l2,
is2_hole_delay_l2,
is2_to_ucode_l2,
is2_is_ucode_l2,
is2_error_l2,
is2_ifar_l2,
is2_axu_ld_or_st_l2,
is2_axu_store_l2,
is2_axu_ldst_indexed_l2,
is2_axu_ldst_tag_l2,
is2_axu_ldst_size_l2,
is2_axu_ldst_update_l2,
is2_axu_ldst_extpid_l2,
is2_axu_ldst_forcealign_l2,
is2_axu_ldst_forceexcept_l2,
is2_axu_mftgpr_l2,
is2_axu_mffgpr_l2,
is2_axu_movedp_l2,
is2_axu_instr_type_l2,
is2_match_l2,
is2_2ucode_l2,
is2_2ucode_type_l2,
dep_hit_no_stall,
xu_iu_is1_flush,
internal_is2_stall,
fdec_fdep_is1_axu_ld_or_st,
fdec_fdep_is1_axu_store,
fdec_fdep_is1_axu_ldst_indexed,
fdec_fdep_is1_axu_ldst_tag,
fdec_fdep_is1_axu_ldst_size,
fdec_fdep_is1_axu_ldst_update,
fdec_fdep_is1_axu_ldst_extpid,
fdec_fdep_is1_axu_ldst_forcealign,
fdec_fdep_is1_axu_ldst_forceexcept,
fdec_fdep_is1_axu_mftgpr,
fdec_fdep_is1_axu_mffgpr,
fdec_fdep_is1_axu_movedp,
fdec_fdep_is1_axu_instr_type,
fdec_fdep_is1_match,
fdec_fdep_is1_2ucode,
fdec_fdep_is1_2ucode_type
) begin
is2_vld_d <= fdec_fdep_is1_vld and not dep_hit_no_stall;
is2_instr_d <= fdec_fdep_is1_instr;
is2_ta_vld_d <= fdec_fdep_is1_ta_vld;
is2_ta_d <= fdec_fdep_is1_ta;
is2_s1_vld_d <= fdec_fdep_is1_s1_vld;
is2_s1_d <= fdec_fdep_is1_s1;
is2_s2_vld_d <= fdec_fdep_is1_s2_vld;
is2_s2_d <= fdec_fdep_is1_s2;
is2_s3_vld_d <= fdec_fdep_is1_s3_vld;
is2_s3_d <= fdec_fdep_is1_s3;
is2_is_barrier_d <= is1_is_barrier;
is2_is_slowspr_d <= is1_is_slowspr;
is2_pred_update_d <= fdec_fdep_is1_pred_update;
is2_pred_taken_cnt_d <= fdec_fdep_is1_pred_taken_cnt;
is2_gshare_d <= fdec_fdep_is1_gshare;
is2_hole_delay_d <= fdec_fdep_is1_hole_delay;
is2_to_ucode_d <= fdec_fdep_is1_to_ucode;
is2_is_ucode_d <= fdec_fdep_is1_is_ucode;
is2_ifar_d <= fdec_fdep_is1_ifar;
is2_error_d <= fdec_fdep_is1_error;
is2_axu_ld_or_st_d <= fdec_fdep_is1_axu_ld_or_st;
is2_axu_store_d <= fdec_fdep_is1_axu_store;
is2_axu_ldst_indexed_d <= fdec_fdep_is1_axu_ldst_indexed;
is2_axu_ldst_tag_d <= fdec_fdep_is1_axu_ldst_tag;
is2_axu_ldst_size_d <= fdec_fdep_is1_axu_ldst_size;
is2_axu_ldst_update_d <= fdec_fdep_is1_axu_ldst_update;
is2_axu_ldst_extpid_d <= fdec_fdep_is1_axu_ldst_extpid;
is2_axu_ldst_forcealign_d <= fdec_fdep_is1_axu_ldst_forcealign;
is2_axu_ldst_forceexcept_d <= fdec_fdep_is1_axu_ldst_forceexcept;
is2_axu_mftgpr_d <= fdec_fdep_is1_axu_mftgpr;
is2_axu_mffgpr_d <= fdec_fdep_is1_axu_mffgpr;
is2_axu_movedp_d <= fdec_fdep_is1_axu_movedp;
is2_axu_instr_type_d <= fdec_fdep_is1_axu_instr_type;
is2_match_d <= fdec_fdep_is1_match;
is2_2ucode_d <= fdec_fdep_is1_2ucode;
is2_2ucode_type_d <= fdec_fdep_is1_2ucode_type;
if (internal_is2_stall = '1') then
is2_vld_d <= is2_vld_l2;
is2_instr_d <= is2_instr_l2;
is2_ta_vld_d <= is2_ta_vld_l2;
is2_ta_d <= is2_ta_l2;
is2_s1_vld_d <= is2_s1_vld_l2;
is2_s1_d <= is2_s1_l2;
is2_s2_vld_d <= is2_s2_vld_l2;
is2_s2_d <= is2_s2_l2;
is2_s3_vld_d <= is2_s3_vld_l2;
is2_s3_d <= is2_s3_l2;
is2_is_barrier_d <= is2_is_barrier_l2;
is2_is_slowspr_d <= is2_is_slowspr_l2;
is2_pred_update_d <= is2_pred_update_l2;
is2_pred_taken_cnt_d <= is2_pred_taken_cnt_l2;
is2_gshare_d <= is2_gshare_l2;
is2_hole_delay_d <= is2_hole_delay_l2;
is2_to_ucode_d <= is2_to_ucode_l2;
is2_is_ucode_d <= is2_is_ucode_l2;
is2_ifar_d <= is2_ifar_l2;
is2_error_d <= is2_error_l2;
is2_axu_ld_or_st_d <= is2_axu_ld_or_st_l2;
is2_axu_store_d <= is2_axu_store_l2;
is2_axu_ldst_indexed_d <= is2_axu_ldst_indexed_l2;
is2_axu_ldst_tag_d <= is2_axu_ldst_tag_l2;
is2_axu_ldst_size_d <= is2_axu_ldst_size_l2;
is2_axu_ldst_update_d <= is2_axu_ldst_update_l2;
is2_axu_ldst_extpid_d <= is2_axu_ldst_extpid_l2;
is2_axu_ldst_forcealign_d <= is2_axu_ldst_forcealign_l2;
is2_axu_ldst_forceexcept_d <= is2_axu_ldst_forceexcept_l2;
is2_axu_mftgpr_d <= is2_axu_mftgpr_l2;
is2_axu_mffgpr_d <= is2_axu_mffgpr_l2;
is2_axu_movedp_d <= is2_axu_movedp_l2;
is2_axu_instr_type_d <= is2_axu_instr_type_l2;
is2_match_d <= is2_match_l2;
is2_2ucode_d <= is2_2ucode_l2;
is2_2ucode_type_d <= is2_2ucode_type_l2;
end if;
if (xu_iu_is1_flush = '1') then
is2_vld_d <= '0';
end if;
end process is2_instr_proc;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Mmmmmmm IS2 Decode
--------------------------------------------------------------------------------------------------------------------------------------------------------
mult_hole_barrier_d(0) <= not xu_iu_is2_flush and ( mult_hole_barrier_L2(1));
mult_hole_barrier_d(1) <= not xu_iu_is2_flush and ( mult_hole_barrier_L2(2));
mult_hole_barrier_d(2) <= not xu_iu_is2_flush and ( mult_hole_barrier_L2(3));
mult_hole_barrier_d(3) <= not xu_iu_is2_flush and ((is2_vld_l2 and is2_hole_delay_L2(0)) or mult_hole_barrier_L2(4));
mult_hole_barrier_d(4) <= not xu_iu_is2_flush and ((is2_vld_l2 and is2_hole_delay_L2(1)) or mult_hole_barrier_L2(5));
mult_hole_barrier_d(5) <= not xu_iu_is2_flush and ((is2_vld_l2 and is2_hole_delay_L2(2)) );
is2_mult_hole_barrier <= (is2_vld_l2 and or_reduce(is2_hole_delay_L2(0 to 2))) or or_reduce(mult_hole_barrier_L2(0 to 5));
mult_hole_barrier_act <= is2_mult_hole_barrier;
is1_is_slowspr <= is_slowspr and (isMTSPR or isMFSPR);
is1_is_barrier <= is_bar or is1_is_slowspr or fdec_fdep_is1_to_ucode;
is2_instr_is_barrier <= is2_vld_l2 and is2_is_barrier_L2;
--
-- Final Table Listing
-- *INPUTS*========================*OUTPUTS*==*
-- | | |
-- | core64 | |
-- | | en_dcr_l2 | |
-- | | | | |
-- | | | fdec_fdep_is1_instr | is_bar |
-- | | | | fdec_fdep_is1_instr| | |
-- | | | | | | | |
-- | | | | 22222222233 | | |
-- | | | 012345 12345678901 | | |
-- *TYPE*==========================+==========+
-- | P P PPPPPP PPPPPPPPPPP | S |
-- *POLARITY*--------------------->| + |
-- *PHASE*------------------------>| T |
-- *TERMS*=========================+==========+
-- 1 | - - 011111 11-1010-101 | 1 |
-- 2 | - - 011111 1111010-10- | 1 |
-- 3 | - - 010011 000-100110- | 1 |
-- 4 | 1 - 011111 000-010100- | 1 |
-- 5 | - - 010011 000011001-- | 1 |
-- 6 | - - 010011 0010010110- | 1 |
-- 7 | 1 - 011111 001-0101101 | 1 |
-- 8 | - - 011111 0000010100- | 1 |
-- 9 | - - 011111 1-01010110- | 1 |
-- 10 | 1 - 011111 -11--010-1- | 1 |
-- 11 | - - 011111 1000110110- | 1 |
-- 12 | - - 011111 0-100101101 | 1 |
-- 13 | - - 011111 1110110-101 | 1 |
-- 14 | - - 011111 00-0010010- | 1 |
-- 15 | - 1 011111 01--000011- | 1 |
-- 16 | - 1 011111 01-0-00011- | 1 |
-- 17 | - - 011111 00-0110011- | 1 |
-- 18 | - - 011111 0100001110- | 1 |
-- 19 | - - 011111 -11--01011- | 1 |
-- 20 | - - 011111 11-0010010- | 1 |
-- 21 | - - 011111 1111011111- | 1 |
-- 22 | - - 011111 1100110011- | 1 |
-- 23 | - - 011111 1110-10010- | 1 |
-- 24 | - - 010001 ---------1- | 1 |
-- *==========================================*
--
-- Table BARRIER Signal Assignments for Product Terms
MQQ1:BARRIER_PT(1) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30) &
FDEC_FDEP_IS1_INSTR(31) ) , STD_ULOGIC_VECTOR'("011111111010101"));
MQQ2:BARRIER_PT(2) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111111101010"));
MQQ3:BARRIER_PT(3) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("010011000100110"));
MQQ4:BARRIER_PT(4) <=
Eq(( CORE64 & FDEC_FDEP_IS1_INSTR(0) &
FDEC_FDEP_IS1_INSTR(1) & FDEC_FDEP_IS1_INSTR(2) &
FDEC_FDEP_IS1_INSTR(3) & FDEC_FDEP_IS1_INSTR(4) &
FDEC_FDEP_IS1_INSTR(5) & FDEC_FDEP_IS1_INSTR(21) &
FDEC_FDEP_IS1_INSTR(22) & FDEC_FDEP_IS1_INSTR(23) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("1011111000010100"));
MQQ5:BARRIER_PT(5) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) ) , STD_ULOGIC_VECTOR'("010011000011001"));
MQQ6:BARRIER_PT(6) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0100110010010110"));
MQQ7:BARRIER_PT(7) <=
Eq(( CORE64 & FDEC_FDEP_IS1_INSTR(0) &
FDEC_FDEP_IS1_INSTR(1) & FDEC_FDEP_IS1_INSTR(2) &
FDEC_FDEP_IS1_INSTR(3) & FDEC_FDEP_IS1_INSTR(4) &
FDEC_FDEP_IS1_INSTR(5) & FDEC_FDEP_IS1_INSTR(21) &
FDEC_FDEP_IS1_INSTR(22) & FDEC_FDEP_IS1_INSTR(23) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30) &
FDEC_FDEP_IS1_INSTR(31) ) , STD_ULOGIC_VECTOR'("10111110010101101"));
MQQ8:BARRIER_PT(8) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0111110000010100"));
MQQ9:BARRIER_PT(9) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(23) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111101010110"));
MQQ10:BARRIER_PT(10) <=
Eq(( CORE64 & FDEC_FDEP_IS1_INSTR(0) &
FDEC_FDEP_IS1_INSTR(1) & FDEC_FDEP_IS1_INSTR(2) &
FDEC_FDEP_IS1_INSTR(3) & FDEC_FDEP_IS1_INSTR(4) &
FDEC_FDEP_IS1_INSTR(5) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("1011111110101"));
MQQ11:BARRIER_PT(11) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0111111000110110"));
MQQ12:BARRIER_PT(12) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(23) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) & FDEC_FDEP_IS1_INSTR(31)
) , STD_ULOGIC_VECTOR'("0111110100101101"));
MQQ13:BARRIER_PT(13) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) & FDEC_FDEP_IS1_INSTR(31)
) , STD_ULOGIC_VECTOR'("0111111110110101"));
MQQ14:BARRIER_PT(14) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111000010010"));
MQQ15:BARRIER_PT(15) <=
Eq(( EN_DCR_L2 & FDEC_FDEP_IS1_INSTR(0) &
FDEC_FDEP_IS1_INSTR(1) & FDEC_FDEP_IS1_INSTR(2) &
FDEC_FDEP_IS1_INSTR(3) & FDEC_FDEP_IS1_INSTR(4) &
FDEC_FDEP_IS1_INSTR(5) & FDEC_FDEP_IS1_INSTR(21) &
FDEC_FDEP_IS1_INSTR(22) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("101111101000011"));
MQQ16:BARRIER_PT(16) <=
Eq(( EN_DCR_L2 & FDEC_FDEP_IS1_INSTR(0) &
FDEC_FDEP_IS1_INSTR(1) & FDEC_FDEP_IS1_INSTR(2) &
FDEC_FDEP_IS1_INSTR(3) & FDEC_FDEP_IS1_INSTR(4) &
FDEC_FDEP_IS1_INSTR(5) & FDEC_FDEP_IS1_INSTR(21) &
FDEC_FDEP_IS1_INSTR(22) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("101111101000011"));
MQQ17:BARRIER_PT(17) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111000110011"));
MQQ18:BARRIER_PT(18) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0111110100001110"));
MQQ19:BARRIER_PT(19) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(22) & FDEC_FDEP_IS1_INSTR(23) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("0111111101011"));
MQQ20:BARRIER_PT(20) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(24) & FDEC_FDEP_IS1_INSTR(25) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111110010010"));
MQQ21:BARRIER_PT(21) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0111111111011111"));
MQQ22:BARRIER_PT(22) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(25) & FDEC_FDEP_IS1_INSTR(26) &
FDEC_FDEP_IS1_INSTR(27) & FDEC_FDEP_IS1_INSTR(28) &
FDEC_FDEP_IS1_INSTR(29) & FDEC_FDEP_IS1_INSTR(30)
) , STD_ULOGIC_VECTOR'("0111111100110011"));
MQQ23:BARRIER_PT(23) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(21) & FDEC_FDEP_IS1_INSTR(22) &
FDEC_FDEP_IS1_INSTR(23) & FDEC_FDEP_IS1_INSTR(24) &
FDEC_FDEP_IS1_INSTR(26) & FDEC_FDEP_IS1_INSTR(27) &
FDEC_FDEP_IS1_INSTR(28) & FDEC_FDEP_IS1_INSTR(29) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("011111111010010"));
MQQ24:BARRIER_PT(24) <=
Eq(( FDEC_FDEP_IS1_INSTR(0) & FDEC_FDEP_IS1_INSTR(1) &
FDEC_FDEP_IS1_INSTR(2) & FDEC_FDEP_IS1_INSTR(3) &
FDEC_FDEP_IS1_INSTR(4) & FDEC_FDEP_IS1_INSTR(5) &
FDEC_FDEP_IS1_INSTR(30) ) , STD_ULOGIC_VECTOR'("0100011"));
-- Table BARRIER Signal Assignments for Outputs
MQQ25:IS_BAR <=
(BARRIER_PT(1) OR BARRIER_PT(2)
OR BARRIER_PT(3) OR BARRIER_PT(4)
OR BARRIER_PT(5) OR BARRIER_PT(6)
OR BARRIER_PT(7) OR BARRIER_PT(8)
OR BARRIER_PT(9) OR BARRIER_PT(10)
OR BARRIER_PT(11) OR BARRIER_PT(12)
OR BARRIER_PT(13) OR BARRIER_PT(14)
OR BARRIER_PT(15) OR BARRIER_PT(16)
OR BARRIER_PT(17) OR BARRIER_PT(18)
OR BARRIER_PT(19) OR BARRIER_PT(20)
OR BARRIER_PT(21) OR BARRIER_PT(22)
OR BARRIER_PT(23) OR BARRIER_PT(24)
);
isMFSPR <= (fdec_fdep_is1_instr(0 to 5) = "011111") and (fdec_fdep_is1_instr(21 to 30) = "0101010011");
isMTSPR <= (fdec_fdep_is1_instr(0 to 5) = "011111") and (fdec_fdep_is1_instr(21 to 30) = "0111010011");
--
-- Final Table Listing
-- *INPUTS*=============*OUTPUTS*========*
-- | | |
-- | fdec_fdep_is1_instr| |
-- | | | is_slowspr |
-- | 1111211111 | | |
-- | 6789012345 | | |
-- *TYPE*===============+================+
-- | PPPPPPPPPP | S |
-- *POLARITY*---------->| + |
-- *PHASE*------------->| T |
-- *TERMS*=*=*==========+================+
-- 1 | 01010111-0 | 1 |
-- 2 | 010101-101 | 1 |
-- 3 | 111--10100 | 1 |
-- 4 | 1001110-1- | 1 |
-- 5 | 11-1111-00 | 1 |
-- 6 | 11-1110-11 | 1 |
-- 7 | 1-0111000- | 1 |
-- 8 | 1-011101-0 | 1 |
-- 9 | 11100-0010 | 1 |
-- 10 | 000011100- | 1 |
-- 11 | 1-10110000 | 1 |
-- 12 | 000011-000 | 1 |
-- 13 | 010011111- | 1 |
-- 14 | 111--10011 | 1 |
-- 15 | 0101011-00 | 1 |
-- 16 | 0101010-1- | 1 |
-- 17 | 1111-111-- | 1 |
-- 18 | 11011110-- | 1 |
-- 19 | -10111010- | 1 |
-- 20 | 111-01---- | 1 |
-- *=====================================*
--
-- Table SLOWSPR_TABLE Signal Assignments for Product Terms
MQQ26:SLOWSPR_TABLE_PT(1) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("010101110"));
MQQ27:SLOWSPR_TABLE_PT(2) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("010101101"));
MQQ28:SLOWSPR_TABLE_PT(3) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13) &
FDEC_FDEP_IS1_INSTR(14) & FDEC_FDEP_IS1_INSTR(15)
) , STD_ULOGIC_VECTOR'("11110100"));
MQQ29:SLOWSPR_TABLE_PT(4) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(14)
) , STD_ULOGIC_VECTOR'("10011101"));
MQQ30:SLOWSPR_TABLE_PT(5) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(14) & FDEC_FDEP_IS1_INSTR(15)
) , STD_ULOGIC_VECTOR'("11111100"));
MQQ31:SLOWSPR_TABLE_PT(6) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(14) & FDEC_FDEP_IS1_INSTR(15)
) , STD_ULOGIC_VECTOR'("11111011"));
MQQ32:SLOWSPR_TABLE_PT(7) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(18) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14)
) , STD_ULOGIC_VECTOR'("10111000"));
MQQ33:SLOWSPR_TABLE_PT(8) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(18) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(15)
) , STD_ULOGIC_VECTOR'("10111010"));
MQQ34:SLOWSPR_TABLE_PT(9) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("111000010"));
MQQ35:SLOWSPR_TABLE_PT(10) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13) &
FDEC_FDEP_IS1_INSTR(14) ) , STD_ULOGIC_VECTOR'("000011100"));
MQQ36:SLOWSPR_TABLE_PT(11) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(18) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("110110000"));
MQQ37:SLOWSPR_TABLE_PT(12) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("000011000"));
MQQ38:SLOWSPR_TABLE_PT(13) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13) &
FDEC_FDEP_IS1_INSTR(14) ) , STD_ULOGIC_VECTOR'("010011111"));
MQQ39:SLOWSPR_TABLE_PT(14) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13) &
FDEC_FDEP_IS1_INSTR(14) & FDEC_FDEP_IS1_INSTR(15)
) , STD_ULOGIC_VECTOR'("11110011"));
MQQ40:SLOWSPR_TABLE_PT(15) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(14) &
FDEC_FDEP_IS1_INSTR(15) ) , STD_ULOGIC_VECTOR'("010101100"));
MQQ41:SLOWSPR_TABLE_PT(16) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(14)
) , STD_ULOGIC_VECTOR'("01010101"));
MQQ42:SLOWSPR_TABLE_PT(17) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) ) , STD_ULOGIC_VECTOR'("1111111"));
MQQ43:SLOWSPR_TABLE_PT(18) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(19) &
FDEC_FDEP_IS1_INSTR(20) & FDEC_FDEP_IS1_INSTR(11) &
FDEC_FDEP_IS1_INSTR(12) & FDEC_FDEP_IS1_INSTR(13)
) , STD_ULOGIC_VECTOR'("11011110"));
MQQ44:SLOWSPR_TABLE_PT(19) <=
Eq(( FDEC_FDEP_IS1_INSTR(17) & FDEC_FDEP_IS1_INSTR(18) &
FDEC_FDEP_IS1_INSTR(19) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) & FDEC_FDEP_IS1_INSTR(12) &
FDEC_FDEP_IS1_INSTR(13) & FDEC_FDEP_IS1_INSTR(14)
) , STD_ULOGIC_VECTOR'("10111010"));
MQQ45:SLOWSPR_TABLE_PT(20) <=
Eq(( FDEC_FDEP_IS1_INSTR(16) & FDEC_FDEP_IS1_INSTR(17) &
FDEC_FDEP_IS1_INSTR(18) & FDEC_FDEP_IS1_INSTR(20) &
FDEC_FDEP_IS1_INSTR(11) ) , STD_ULOGIC_VECTOR'("11101"));
-- Table SLOWSPR_TABLE Signal Assignments for Outputs
MQQ46:IS_SLOWSPR <=
(SLOWSPR_TABLE_PT(1) OR SLOWSPR_TABLE_PT(2)
OR SLOWSPR_TABLE_PT(3) OR SLOWSPR_TABLE_PT(4)
OR SLOWSPR_TABLE_PT(5) OR SLOWSPR_TABLE_PT(6)
OR SLOWSPR_TABLE_PT(7) OR SLOWSPR_TABLE_PT(8)
OR SLOWSPR_TABLE_PT(9) OR SLOWSPR_TABLE_PT(10)
OR SLOWSPR_TABLE_PT(11) OR SLOWSPR_TABLE_PT(12)
OR SLOWSPR_TABLE_PT(13) OR SLOWSPR_TABLE_PT(14)
OR SLOWSPR_TABLE_PT(15) OR SLOWSPR_TABLE_PT(16)
OR SLOWSPR_TABLE_PT(17) OR SLOWSPR_TABLE_PT(18)
OR SLOWSPR_TABLE_PT(19) OR SLOWSPR_TABLE_PT(20)
);
-- | 1101110010 | 1 | IAR 882
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- axu hold
--------------------------------------------------------------------------------------------------------------------------------------------------------
iu_au_is1_hold <= (barrier_in_progress or single_instr_dep_hit);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Creation of internal_is2_stall
--------------------------------------------------------------------------------------------------------------------------------------------------------
is2_vld_b <= not is2_vld_L2;
fxu_iss_stall_nor2: fxu_iss_stall <= not (fiss_fdep_is2_take or is2_vld_b);
is2_iss_stall_nor2: is2_iss_stall_b <= not (fxu_iss_stall or au_iu_issue_stall);
internal_is2_stall <= not is2_iss_stall_b;
iu_au_is2_stall <= internal_is2_stall;
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- ISYNC
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Notes:
-- ISYNC is a context synchronizing instruction. Simple to implement in dependency.
-- Just make ISYNC dependent on all instructions that are valid in the shadow pipe.
-- Then it is allowed to issue. The FXU generates an N+1 flush when ISYNC hits the
-- appropriate flush point
sync_dep_hit <= (is1_instr_is_ISYNC or is1_instr_is_SYNC or is1_instr_is_TLBSYNC) and (shadow_pipe_vld or au_iu_is2_axubusy);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- BARRIER
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Barrier is allowed to issue, it is not dependent on any instruction in front of it.
-- When Barrier moves from IS1 to IS2 an IS2 latch is set that represents an barrier in
-- progress. This status bit is cleared by the IU when it is finished handling the barrier.
-- barrier inprogress is logically or'd into dep_hit. Therefore when the IU is finished
-- handling the barrier, the issue block will be released. A flush will also cause
-- barrier_in_progress to be cleared.
sp_barrier_clr <= (xu_iu_rf0_flush and sp_L2(RF0).barrier) or
(xu_iu_rf1_flush and sp_L2(RF1).barrier) or
(xu_iu_ex1_flush and sp_L2(EX1).barrier) or
(xu_iu_ex2_flush and sp_L2(EX2).barrier) or
(xu_iu_ex3_flush and sp_EX3_barrier_L2) or
(xu_iu_ex4_flush and sp_EX4_barrier_L2) or
(xu_iu_ex5_flush and sp_EX5_barrier_L2) ;
an_ac_sync_ack_d <= an_ac_sync_ack;
xu_iu_membar_tid_d <= xu_iu_membar_tid;
xu_iu_multdiv_done_d <= xu_iu_multdiv_done;
mm_iu_barrier_done_d <= mm_iu_barrier_done;
spr_fdep_ll_hold_d <= spr_fdep_ll_hold;
clr_barrier <= xu_iu_larx_done_tid or an_ac_sync_ack_l2 or ic_fdep_icbi_ack or an_ac_stcx_complete or sp_barrier_clr or xu_iu_slowspr_done or xu_iu_multdiv_done_l2 or mm_iu_barrier_done_l2;
set_barrier <= (not xu_iu_is2_flush and not barrier_L2 and is2_instr_is_barrier and not internal_is2_stall);
barrier_d_proc : process(barrier_L2, clr_barrier, set_barrier)
begin
barrier_d <= barrier_L2;
if ib(set_barrier) then
barrier_d <= '1';
elsif ib(clr_barrier) then
barrier_d <= '0';
end if;
end process barrier_d_proc;
xu_barrier_d_proc : process(xu_barrier_L2, xu_iu_membar_tid_l2, xu_iu_set_barr_tid)
begin
xu_barrier_d <= xu_barrier_L2;
if ib(xu_iu_set_barr_tid) then
xu_barrier_d <= '1';
elsif ib(xu_iu_membar_tid_l2) then
xu_barrier_d <= '0';
end if;
end process xu_barrier_d_proc;
barrier_in_progress <= barrier_L2 or is2_instr_is_barrier or is2_mult_hole_barrier or xu_barrier_L2 or spr_fdep_ll_hold_L2;
quiesce_barrier <= barrier_L2 or is2_instr_is_barrier or is2_mult_hole_barrier or xu_barrier_L2;
quiesce_d <= ic_fdep_load_quiesce and not quiesce_barrier and not au_iu_is2_axubusy;
iu_xu_quiesce <= quiesce_L2;
-----------------------------------
-- Perf
-----------------------------------
perf_early_d(0) <= dep_hit;
perf_early_d(1) <= fdec_fdep_is1_vld;
perf_early_d(2) <= internal_is2_stall;
perf_early_d(3) <= i_afd_is1_instr_v;
perf_early_d(4) <= au_iu_is1_dep_hit;
perf_early_d(5) <= barrier_in_progress;
perf_early_d(6) <= is2_is_slowspr_L2;
perf_early_d(7) <= RAW_dep_hit;
perf_early_d(8) <= WAW_LMQ_dep_hit;
perf_early_d(9) <= sync_dep_hit;
perf_early_d(10) <= xu_dep_hit;
perf_early_d(11) <= br_sprs_dep_hit;
perf_dep_hit <= perf_early_l2(0);
perf_fdec_fdep_is1_vld <= perf_early_l2(1);
perf_internal_is2_stall <= perf_early_l2(2);
perf_i_afd_is1_instr_v <= perf_early_l2(3);
perf_au_iu_is1_dep_hit <= perf_early_l2(4);
perf_barrier_in_progress <= perf_early_l2(5);
perf_is2_is_slowspr_L2 <= perf_early_l2(6);
perf_RAW_dep_hit <= perf_early_l2(7);
perf_WAW_LMQ_dep_hit <= perf_early_l2(8);
perf_sync_dep_hit <= perf_early_l2(9);
perf_xu_dep_hit <= perf_early_l2(10);
perf_br_sprs_dep_hit <= perf_early_l2(11);
perf_event_d(0) <= (perf_dep_hit and perf_fdec_fdep_is1_vld) or
(perf_internal_is2_stall and perf_i_afd_is1_instr_v) or
(perf_au_iu_is1_dep_hit);
perf_event_d(1) <= perf_internal_is2_stall and (perf_fdec_fdep_is1_vld or perf_i_afd_is1_instr_v);
perf_event_d(2) <= perf_barrier_in_progress and perf_fdec_fdep_is1_vld;
perf_event_d(3) <= perf_barrier_in_progress and perf_is2_is_slowspr_L2 and perf_fdec_fdep_is1_vld;
perf_event_d(4) <= perf_RAW_dep_hit and perf_fdec_fdep_is1_vld;
perf_event_d(5) <= perf_WAW_LMQ_dep_hit and perf_fdec_fdep_is1_vld;
perf_event_d(6) <= perf_sync_dep_hit and perf_fdec_fdep_is1_vld;
perf_event_d(7) <= perf_br_sprs_dep_hit and perf_fdec_fdep_is1_vld;
perf_event_d(8) <= perf_au_iu_is1_dep_hit;
perf_event_d(9) <= perf_xu_dep_hit and perf_fdec_fdep_is1_vld;
perf_event_d(10) <= (perf_xu_dep_hit and perf_fdec_fdep_is1_vld) or perf_au_iu_is1_dep_hit;
perf_event_d(11) <= '0';
fdep_perf_event(0 TO 11) <= perf_event_l2(0 to 11);
-----------------------------------
-- Debug
-----------------------------------
fdep_dbg_data_d(0) <= barrier_l2;
fdep_dbg_data_d(1) <= is2_instr_is_barrier;
fdep_dbg_data_d(2) <= is2_mult_hole_barrier;
fdep_dbg_data_d(3) <= xu_barrier_L2;
fdep_dbg_data_d(4) <= xu_iu_larx_done_tid;
fdep_dbg_data_d(5) <= an_ac_sync_ack;
fdep_dbg_data_d(6) <= an_ac_stcx_complete;
fdep_dbg_data_d(7) <= ic_fdep_icbi_ack;
fdep_dbg_data_d(8) <= sp_barrier_clr;
fdep_dbg_data_d(9) <= xu_iu_slowspr_done;
fdep_dbg_data_d(10) <= xu_iu_multdiv_done;
fdep_dbg_data_d(11) <= mm_iu_barrier_done;
fdep_dbg_data_d(12) <= xu_iu_set_barr_tid;
fdep_dbg_data_d(13) <= xu_iu_membar_tid;
fdep_dbg_data_d(14) <= fdec_fdep_is1_vld;
fdep_dbg_data_d(15) <= internal_is2_stall;
fdep_dbg_data_d(16) <= RAW_dep_hit;
fdep_dbg_data_d(17) <= br_sprs_dep_hit;
fdep_dbg_data_d(18) <= sync_dep_hit;
fdep_dbg_data_d(19) <= single_instr_dep_hit;
fdep_dbg_data_d(20) <= WAW_LMQ_dep_hit;
fdep_dbg_data_d(21) <= fdec_fdep_is1_force_ram;
fdep_dbg_data(0 TO 21) <= fdep_dbg_data_l2(0 to 21);
-- Reduce power using act pins to hold state
act_nonvalid <= fdec_fdep_is1_vld or i_afd_is1_instr_v;
-- Latches
is2_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_vld_offset),
scout => sov(is2_vld_offset),
din => is2_vld_d,
dout => is2_vld_l2);
is2_instr: tri_rlmreg_p
generic map (width => is2_instr_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_instr_offset to is2_instr_offset + is2_instr_l2'length-1),
scout => sov(is2_instr_offset to is2_instr_offset + is2_instr_l2'length-1),
din => is2_instr_d,
dout => is2_instr_l2);
is2_ta_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_ta_vld_offset),
scout => sov(is2_ta_vld_offset),
din => is2_ta_vld_d,
dout => is2_ta_vld_l2);
is2_ta: tri_rlmreg_p
generic map (width => is2_ta_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_ta_offset to is2_ta_offset + is2_ta_l2'length-1),
scout => sov(is2_ta_offset to is2_ta_offset + is2_ta_l2'length-1),
din => is2_ta_d,
dout => is2_ta_l2);
is2_s1_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s1_vld_offset),
scout => sov(is2_s1_vld_offset),
din => is2_s1_vld_d,
dout => is2_s1_vld_l2);
is2_s1: tri_rlmreg_p
generic map (width => is2_s1_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s1_offset to is2_s1_offset + is2_s1_l2'length-1),
scout => sov(is2_s1_offset to is2_s1_offset + is2_s1_l2'length-1),
din => is2_s1_d,
dout => is2_s1_l2);
is2_s2_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s2_vld_offset),
scout => sov(is2_s2_vld_offset),
din => is2_s2_vld_d,
dout => is2_s2_vld_l2);
is2_s2: tri_rlmreg_p
generic map (width => is2_s2_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s2_offset to is2_s2_offset + is2_s2_l2'length-1),
scout => sov(is2_s2_offset to is2_s2_offset + is2_s2_l2'length-1),
din => is2_s2_d,
dout => is2_s2_l2);
is2_s3_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s3_vld_offset),
scout => sov(is2_s3_vld_offset),
din => is2_s3_vld_d,
dout => is2_s3_vld_l2);
is2_s3: tri_rlmreg_p
generic map (width => is2_s3_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_s3_offset to is2_s3_offset + is2_s3_l2'length-1),
scout => sov(is2_s3_offset to is2_s3_offset + is2_s3_l2'length-1),
din => is2_s3_d,
dout => is2_s3_l2);
is2_is_slowspr: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_is_slowspr_offset),
scout => sov(is2_is_slowspr_offset),
din => is2_is_slowspr_d,
dout => is2_is_slowspr_l2);
is2_is_barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_is_barrier_offset),
scout => sov(is2_is_barrier_offset),
din => is2_is_barrier_d,
dout => is2_is_barrier_l2);
is2_pred_update: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_pred_update_offset),
scout => sov(is2_pred_update_offset),
din => is2_pred_update_d,
dout => is2_pred_update_l2);
is2_pred_taken_cnt: tri_rlmreg_p
generic map (width => is2_pred_taken_cnt_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_pred_taken_cnt_offset to is2_pred_taken_cnt_offset + is2_pred_taken_cnt_l2'length-1),
scout => sov(is2_pred_taken_cnt_offset to is2_pred_taken_cnt_offset + is2_pred_taken_cnt_l2'length-1),
din => is2_pred_taken_cnt_d,
dout => is2_pred_taken_cnt_l2);
is2_gshare: tri_rlmreg_p
generic map (width => is2_gshare_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_gshare_offset to is2_gshare_offset + is2_gshare_l2'length-1),
scout => sov(is2_gshare_offset to is2_gshare_offset + is2_gshare_l2'length-1),
din => is2_gshare_d,
dout => is2_gshare_l2);
is2_hole_delay: tri_rlmreg_p
generic map (width => is2_hole_delay_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_hole_delay_offset to is2_hole_delay_offset + is2_hole_delay_l2'length-1),
scout => sov(is2_hole_delay_offset to is2_hole_delay_offset + is2_hole_delay_l2'length-1),
din => is2_hole_delay_d,
dout => is2_hole_delay_l2);
is2_is_ucode: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_is_ucode_offset),
scout => sov(is2_is_ucode_offset),
din => is2_is_ucode_d,
dout => is2_is_ucode_l2);
is2_to_ucode: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_to_ucode_offset),
scout => sov(is2_to_ucode_offset),
din => is2_to_ucode_d,
dout => is2_to_ucode_l2);
is2_ifar: tri_rlmreg_p
generic map (width => is2_ifar_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_ifar_offset to is2_ifar_offset + is2_ifar_l2'length-1),
scout => sov(is2_ifar_offset to is2_ifar_offset + is2_ifar_l2'length-1),
din => is2_ifar_d,
dout => is2_ifar_l2);
is2_error: tri_rlmreg_p
generic map (width => is2_error_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_error_offset to is2_error_offset + is2_error_l2'length-1),
scout => sov(is2_error_offset to is2_error_offset + is2_error_l2'length-1),
din => is2_error_d,
dout => is2_error_l2);
--?generate begin a(IS2, RF0, RF1, EX1, EX2, EX3, EX4);
sp_IS2_d <= sp_d(IS2).i_nobyp_vld & sp_d(IS2).i_vld & sp_d(IS2).ta_vld & sp_d(IS2).ta &
sp_d(IS2).UpdatesLR & sp_d(IS2).UpdatesCR & sp_d(IS2).UpdatesCTR & sp_d(IS2).UpdatesXER & sp_d(IS2).UpdatesMSR & sp_d(IS2).UpdatesSPR &
sp_d(IS2).complete & sp_d(IS2).barrier;
sp_l2(IS2).i_nobyp_vld <= sp_IS2_l2(0);
sp_l2(IS2).i_vld <= sp_IS2_l2(1);
sp_l2(IS2).ta_vld <= sp_IS2_l2(2);
sp_l2(IS2).ta <= sp_IS2_l2(3 to 8);
sp_l2(IS2).updateslr <= sp_IS2_l2(9);
sp_l2(IS2).updatescr <= sp_IS2_l2(10);
sp_l2(IS2).updatesctr <= sp_IS2_l2(11);
sp_l2(IS2).updatesxer <= sp_IS2_l2(12);
sp_l2(IS2).updatesmsr <= sp_IS2_l2(13);
sp_l2(IS2).updatesspr <= sp_IS2_l2(14);
sp_l2(IS2).complete <= sp_IS2_l2(15 to 19);
sp_l2(IS2).barrier <= sp_IS2_l2(20);
sp_IS2: tri_rlmreg_p
generic map (width => 21, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_IS2_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_IS2_offset to sp_IS2_offset + 21-1),
scout => sov(sp_IS2_offset to sp_IS2_offset + 21-1),
din => sp_IS2_d,
dout => sp_IS2_l2);
sp_RF0_d <= sp_d(RF0).i_nobyp_vld & sp_d(RF0).i_vld & sp_d(RF0).ta_vld & sp_d(RF0).ta &
sp_d(RF0).UpdatesLR & sp_d(RF0).UpdatesCR & sp_d(RF0).UpdatesCTR & sp_d(RF0).UpdatesXER & sp_d(RF0).UpdatesMSR & sp_d(RF0).UpdatesSPR &
sp_d(RF0).complete & sp_d(RF0).barrier;
sp_l2(RF0).i_nobyp_vld <= sp_RF0_l2(0);
sp_l2(RF0).i_vld <= sp_RF0_l2(1);
sp_l2(RF0).ta_vld <= sp_RF0_l2(2);
sp_l2(RF0).ta <= sp_RF0_l2(3 to 8);
sp_l2(RF0).updateslr <= sp_RF0_l2(9);
sp_l2(RF0).updatescr <= sp_RF0_l2(10);
sp_l2(RF0).updatesctr <= sp_RF0_l2(11);
sp_l2(RF0).updatesxer <= sp_RF0_l2(12);
sp_l2(RF0).updatesmsr <= sp_RF0_l2(13);
sp_l2(RF0).updatesspr <= sp_RF0_l2(14);
sp_l2(RF0).complete <= sp_RF0_l2(15 to 19);
sp_l2(RF0).barrier <= sp_RF0_l2(20);
sp_RF0: tri_rlmreg_p
generic map (width => 21, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_RF0_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_RF0_offset to sp_RF0_offset + 21-1),
scout => sov(sp_RF0_offset to sp_RF0_offset + 21-1),
din => sp_RF0_d,
dout => sp_RF0_l2);
sp_RF1_d <= sp_d(RF1).i_nobyp_vld & sp_d(RF1).i_vld & sp_d(RF1).ta_vld & sp_d(RF1).ta &
sp_d(RF1).UpdatesLR & sp_d(RF1).UpdatesCR & sp_d(RF1).UpdatesCTR & sp_d(RF1).UpdatesXER & sp_d(RF1).UpdatesMSR & sp_d(RF1).UpdatesSPR &
sp_d(RF1).complete & sp_d(RF1).barrier;
sp_l2(RF1).i_nobyp_vld <= sp_RF1_l2(0);
sp_l2(RF1).i_vld <= sp_RF1_l2(1);
sp_l2(RF1).ta_vld <= sp_RF1_l2(2);
sp_l2(RF1).ta <= sp_RF1_l2(3 to 8);
sp_l2(RF1).updateslr <= sp_RF1_l2(9);
sp_l2(RF1).updatescr <= sp_RF1_l2(10);
sp_l2(RF1).updatesctr <= sp_RF1_l2(11);
sp_l2(RF1).updatesxer <= sp_RF1_l2(12);
sp_l2(RF1).updatesmsr <= sp_RF1_l2(13);
sp_l2(RF1).updatesspr <= sp_RF1_l2(14);
sp_l2(RF1).complete <= sp_RF1_l2(15 to 19);
sp_l2(RF1).barrier <= sp_RF1_l2(20);
sp_RF1: tri_rlmreg_p
generic map (width => 21, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_RF1_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_RF1_offset to sp_RF1_offset + 21-1),
scout => sov(sp_RF1_offset to sp_RF1_offset + 21-1),
din => sp_RF1_d,
dout => sp_RF1_l2);
sp_EX1_d <= sp_d(EX1).i_nobyp_vld & sp_d(EX1).i_vld & sp_d(EX1).ta_vld & sp_d(EX1).ta &
sp_d(EX1).UpdatesLR & sp_d(EX1).UpdatesCR & sp_d(EX1).UpdatesCTR & sp_d(EX1).UpdatesXER & sp_d(EX1).UpdatesMSR & sp_d(EX1).UpdatesSPR &
sp_d(EX1).complete & sp_d(EX1).barrier;
sp_l2(EX1).i_nobyp_vld <= sp_EX1_l2(0);
sp_l2(EX1).i_vld <= sp_EX1_l2(1);
sp_l2(EX1).ta_vld <= sp_EX1_l2(2);
sp_l2(EX1).ta <= sp_EX1_l2(3 to 8);
sp_l2(EX1).updateslr <= sp_EX1_l2(9);
sp_l2(EX1).updatescr <= sp_EX1_l2(10);
sp_l2(EX1).updatesctr <= sp_EX1_l2(11);
sp_l2(EX1).updatesxer <= sp_EX1_l2(12);
sp_l2(EX1).updatesmsr <= sp_EX1_l2(13);
sp_l2(EX1).updatesspr <= sp_EX1_l2(14);
sp_l2(EX1).complete <= sp_EX1_l2(15 to 19);
sp_l2(EX1).barrier <= sp_EX1_l2(20);
sp_EX1: tri_rlmreg_p
generic map (width => 21, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX1_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_EX1_offset to sp_EX1_offset + 21-1),
scout => sov(sp_EX1_offset to sp_EX1_offset + 21-1),
din => sp_EX1_d,
dout => sp_EX1_l2);
sp_EX2_d <= sp_d(EX2).i_nobyp_vld & sp_d(EX2).i_vld & sp_d(EX2).ta_vld & sp_d(EX2).ta &
sp_d(EX2).UpdatesLR & sp_d(EX2).UpdatesCR & sp_d(EX2).UpdatesCTR & sp_d(EX2).UpdatesXER & sp_d(EX2).UpdatesMSR & sp_d(EX2).UpdatesSPR &
sp_d(EX2).complete & sp_d(EX2).barrier;
sp_l2(EX2).i_nobyp_vld <= sp_EX2_l2(0);
sp_l2(EX2).i_vld <= sp_EX2_l2(1);
sp_l2(EX2).ta_vld <= sp_EX2_l2(2);
sp_l2(EX2).ta <= sp_EX2_l2(3 to 8);
sp_l2(EX2).updateslr <= sp_EX2_l2(9);
sp_l2(EX2).updatescr <= sp_EX2_l2(10);
sp_l2(EX2).updatesctr <= sp_EX2_l2(11);
sp_l2(EX2).updatesxer <= sp_EX2_l2(12);
sp_l2(EX2).updatesmsr <= sp_EX2_l2(13);
sp_l2(EX2).updatesspr <= sp_EX2_l2(14);
sp_l2(EX2).complete <= sp_EX2_l2(15 to 19);
sp_l2(EX2).barrier <= sp_EX2_l2(20);
sp_EX2: tri_rlmreg_p
generic map (width => 21, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX2_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_EX2_offset to sp_EX2_offset + 21-1),
scout => sov(sp_EX2_offset to sp_EX2_offset + 21-1),
din => sp_EX2_d,
dout => sp_EX2_l2);
sp_IS2_act <= sp_l2(IS2).i_nobyp_vld or fdec_fdep_is1_vld;
sp_RF0_act <= sp_l2(RF0).i_nobyp_vld or sp_l2(IS2).i_nobyp_vld;
sp_RF1_act <= sp_l2(RF1).i_nobyp_vld or sp_l2(RF0).i_nobyp_vld;
sp_EX1_act <= sp_l2(EX1).i_nobyp_vld or sp_l2(RF1).i_nobyp_vld;
sp_EX2_act <= sp_l2(EX2).i_nobyp_vld or sp_l2(EX1).i_nobyp_vld;
sp_EX3_act <= sp_ex3_i_nobyp_vld_l2 or sp_l2(EX2).i_nobyp_vld;
sp_EX4_act <= sp_ex4_i_nobyp_vld_l2 or sp_ex3_i_nobyp_vld_l2;
sp_EX5_act <= sp_ex5_i_nobyp_vld_l2 or sp_ex4_i_nobyp_vld_l2;
sp_ex3_i_nobyp_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX3_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex3_i_nobyp_vld_offset),
scout => sov(sp_ex3_i_nobyp_vld_offset),
din => sp_ex3_i_nobyp_vld_d,
dout => sp_ex3_i_nobyp_vld_l2);
sp_ex3_barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX3_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex3_barrier_offset),
scout => sov(sp_ex3_barrier_offset),
din => sp_ex3_barrier_d,
dout => sp_ex3_barrier_l2);
sp_ex4_i_nobyp_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX4_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex4_i_nobyp_vld_offset),
scout => sov(sp_ex4_i_nobyp_vld_offset),
din => sp_ex4_i_nobyp_vld_d,
dout => sp_ex4_i_nobyp_vld_l2);
sp_ex4_barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX4_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex4_barrier_offset),
scout => sov(sp_ex4_barrier_offset),
din => sp_ex4_barrier_d,
dout => sp_ex4_barrier_l2);
sp_ex5_i_nobyp_vld: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX5_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex5_i_nobyp_vld_offset),
scout => sov(sp_ex5_i_nobyp_vld_offset),
din => sp_ex5_i_nobyp_vld_d,
dout => sp_ex5_i_nobyp_vld_l2);
sp_ex5_barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => sp_EX5_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_ex5_barrier_offset),
scout => sov(sp_ex5_barrier_offset),
din => sp_ex5_barrier_d,
dout => sp_ex5_barrier_l2);
lm_assign: for i in 0 to lmq_entries-1 generate
sp_LM_d(7*i TO 6+7*i) <= sp_d_LM(i).ta_vld & sp_d_LM(i).ta;
sp_l2_LM(i).ta_vld <= sp_LM_l2(0+7*i);
sp_l2_LM(i).ta <= sp_LM_l2(1+7*i to 6+7*i);
end generate;
sp_LM: tri_rlmreg_p
generic map (width => 7*lmq_entries, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(sp_lm_offset to sp_lm_offset + 7*lmq_entries-1),
scout => sov(sp_lm_offset to sp_lm_offset + 7*lmq_entries-1),
din => sp_LM_d,
dout => sp_LM_l2);
barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(barrier_offset),
scout => sov(barrier_offset),
din => barrier_d,
dout => barrier_l2);
xu_barrier: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(xu_barrier_offset),
scout => sov(xu_barrier_offset),
din => xu_barrier_d,
dout => xu_barrier_l2);
mult_hole_barrier: tri_rlmreg_p
generic map (width => mult_hole_barrier_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => mult_hole_barrier_act,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(mult_hole_barrier_offset to mult_hole_barrier_offset + mult_hole_barrier_l2'length-1),
scout => sov(mult_hole_barrier_offset to mult_hole_barrier_offset + mult_hole_barrier_l2'length-1),
din => mult_hole_barrier_d,
dout => mult_hole_barrier_l2);
is2_axu_ld_or_st: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ld_or_st_offset),
scout => sov(is2_axu_ld_or_st_offset),
din => is2_axu_ld_or_st_d,
dout => is2_axu_ld_or_st_l2);
is2_axu_store: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_store_offset),
scout => sov(is2_axu_store_offset),
din => is2_axu_store_d,
dout => is2_axu_store_l2);
is2_axu_ldst_indexed: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_indexed_offset),
scout => sov(is2_axu_ldst_indexed_offset),
din => is2_axu_ldst_indexed_d,
dout => is2_axu_ldst_indexed_l2);
is2_axu_ldst_tag: tri_rlmreg_p
generic map (width => is2_axu_ldst_tag_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_tag_offset to is2_axu_ldst_tag_offset + is2_axu_ldst_tag_l2'length-1),
scout => sov(is2_axu_ldst_tag_offset to is2_axu_ldst_tag_offset + is2_axu_ldst_tag_l2'length-1),
din => is2_axu_ldst_tag_d,
dout => is2_axu_ldst_tag_l2);
is2_axu_ldst_size: tri_rlmreg_p
generic map (width => is2_axu_ldst_size_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_size_offset to is2_axu_ldst_size_offset + is2_axu_ldst_size_l2'length-1),
scout => sov(is2_axu_ldst_size_offset to is2_axu_ldst_size_offset + is2_axu_ldst_size_l2'length-1),
din => is2_axu_ldst_size_d,
dout => is2_axu_ldst_size_l2);
is2_axu_ldst_update: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_update_offset),
scout => sov(is2_axu_ldst_update_offset),
din => is2_axu_ldst_update_d,
dout => is2_axu_ldst_update_l2);
is2_axu_ldst_extpid: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_extpid_offset),
scout => sov(is2_axu_ldst_extpid_offset),
din => is2_axu_ldst_extpid_d,
dout => is2_axu_ldst_extpid_l2);
is2_axu_ldst_forcealign: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_forcealign_offset),
scout => sov(is2_axu_ldst_forcealign_offset),
din => is2_axu_ldst_forcealign_d,
dout => is2_axu_ldst_forcealign_l2);
is2_axu_ldst_forceexcept: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_ldst_forceexcept_offset),
scout => sov(is2_axu_ldst_forceexcept_offset),
din => is2_axu_ldst_forceexcept_d,
dout => is2_axu_ldst_forceexcept_l2);
is2_axu_movedp: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_movedp_offset),
scout => sov(is2_axu_movedp_offset),
din => is2_axu_movedp_d,
dout => is2_axu_movedp_l2);
is2_axu_mffgpr: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_mffgpr_offset),
scout => sov(is2_axu_mffgpr_offset),
din => is2_axu_mffgpr_d,
dout => is2_axu_mffgpr_l2);
is2_axu_mftgpr: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_mftgpr_offset),
scout => sov(is2_axu_mftgpr_offset),
din => is2_axu_mftgpr_d,
dout => is2_axu_mftgpr_l2);
is2_axu_instr_type: tri_rlmreg_p
generic map (width => is2_axu_instr_type_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_axu_instr_type_offset to is2_axu_instr_type_offset + is2_axu_instr_type_l2'length-1),
scout => sov(is2_axu_instr_type_offset to is2_axu_instr_type_offset + is2_axu_instr_type_l2'length-1),
din => is2_axu_instr_type_d,
dout => is2_axu_instr_type_l2);
is2_match: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_match_offset),
scout => sov(is2_match_offset),
din => is2_match_d,
dout => is2_match_l2);
is2_2ucode: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_2ucode_offset),
scout => sov(is2_2ucode_offset),
din => is2_2ucode_d,
dout => is2_2ucode_l2);
is2_2ucode_type: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => act_nonvalid,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(is2_2ucode_type_offset),
scout => sov(is2_2ucode_type_offset),
din => is2_2ucode_type_d,
dout => is2_2ucode_type_l2);
single_instr_mode: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(single_instr_mode_offset),
scout => sov(single_instr_mode_offset),
din => single_instr_mode_d,
dout => single_instr_mode_l2);
event_bus_enable_d <= pc_iu_event_bus_enable;
event_enable_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(event_bus_enable_offset),
scout => sov(event_bus_enable_offset),
din => event_bus_enable_d,
dout => event_bus_enable_q);
trace_bus_enable_d <= pc_iu_trace_bus_enable;
trace_enable_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(trace_bus_enable_offset),
scout => sov(trace_bus_enable_offset),
din => trace_bus_enable_d,
dout => trace_bus_enable_q);
perf_early: tri_rlmreg_p
generic map (width => perf_early_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => event_bus_enable_q,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(perf_early_offset to perf_early_offset + perf_early_l2'length-1),
scout => sov(perf_early_offset to perf_early_offset + perf_early_l2'length-1),
din => perf_early_d,
dout => perf_early_l2);
perf_event: tri_rlmreg_p
generic map (width => perf_event_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => event_bus_enable_q,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(perf_event_offset to perf_event_offset + perf_event_l2'length-1),
scout => sov(perf_event_offset to perf_event_offset + perf_event_l2'length-1),
din => perf_event_d,
dout => perf_event_l2);
fdep_dbg_data_reg: tri_rlmreg_p
generic map (width => fdep_dbg_data_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => trace_bus_enable_q,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(fdep_dbg_data_offset to fdep_dbg_data_offset + fdep_dbg_data_l2'length-1),
scout => sov(fdep_dbg_data_offset to fdep_dbg_data_offset + fdep_dbg_data_l2'length-1),
din => fdep_dbg_data_d,
dout => fdep_dbg_data_l2);
quiesce: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(quiesce_offset),
scout => sov(quiesce_offset),
din => quiesce_d,
dout => quiesce_l2);
an_ac_sync_ack_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(an_ac_sync_ack_offset),
scout => sov(an_ac_sync_ack_offset),
din => an_ac_sync_ack_d,
dout => an_ac_sync_ack_l2);
xu_iu_membar_tid_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(xu_iu_membar_tid_offset),
scout => sov(xu_iu_membar_tid_offset),
din => xu_iu_membar_tid_d,
dout => xu_iu_membar_tid_l2);
xu_iu_multdiv_done_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(xu_iu_multdiv_done_offset),
scout => sov(xu_iu_multdiv_done_offset),
din => xu_iu_multdiv_done_d,
dout => xu_iu_multdiv_done_l2);
mm_iu_barrier_done_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(mm_iu_barrier_done_offset),
scout => sov(mm_iu_barrier_done_offset),
din => mm_iu_barrier_done_d,
dout => mm_iu_barrier_done_l2);
spr_fdep_ll_hold_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(spr_fdep_ll_hold_offset),
scout => sov(spr_fdep_ll_hold_offset),
din => spr_fdep_ll_hold_d,
dout => spr_fdep_ll_hold_l2);
en_dcr_latch: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(en_dcr_offset),
scout => sov(en_dcr_offset),
din => en_dcr_d,
dout => en_dcr_l2);
spare_latch: tri_rlmreg_p
generic map (width => spare_l2'length, init => 0, expand_type => expand_type)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
thold_b => pc_iu_func_sl_thold_0_b,
sg => pc_iu_sg_0,
forcee => forcee,
delay_lclkr => delay_lclkr,
mpw1_b => mpw1_b,
mpw2_b => mpw2_b,
d_mode => d_mode,
scin => siv(spare_offset to spare_offset + spare_l2'length-1),
scout => sov(spare_offset to spare_offset + spare_l2'length-1),
din => spare_l2,
dout => spare_l2);
--------------------------------------------------------------------------------------------------------------------------------------------------------
-- Instruction routed to issue
--------------------------------------------------------------------------------------------------------------------------------------------------------
fdep_fiss_is2_instr <= is2_instr_l2;
fdep_fiss_is2_ta_vld <= is2_ta_vld_l2;
fdep_fiss_is2_ta <= is2_ta_l2;
fdep_fiss_is2_s1_vld <= is2_s1_vld_l2;
fdep_fiss_is2_s1 <= is2_s1_l2;
fdep_fiss_is2_s2_vld <= is2_s2_vld_l2;
fdep_fiss_is2_s2 <= is2_s2_l2;
fdep_fiss_is2_s3_vld <= is2_s3_vld_l2;
fdep_fiss_is2_s3 <= is2_s3_l2;
fdep_fiss_is2_pred_update <= is2_pred_update_l2;
fdep_fiss_is2_pred_taken_cnt <= is2_pred_taken_cnt_l2;
fdep_fiss_is2_gshare <= is2_gshare_l2;
fdep_fiss_is2_ifar <= is2_ifar_l2;
fdep_fiss_is2_error <= is2_error_l2;
fdep_fiss_is2_axu_ld_or_st <= is2_axu_ld_or_st_L2;
fdep_fiss_is2_axu_store <= is2_axu_store_L2;
fdep_fiss_is2_axu_ldst_indexed <= is2_axu_ldst_indexed_L2;
fdep_fiss_is2_axu_ldst_tag <= is2_axu_ldst_tag_L2;
fdep_fiss_is2_axu_ldst_size <= is2_axu_ldst_size_L2;
fdep_fiss_is2_axu_ldst_update <= is2_axu_ldst_update_L2;
fdep_fiss_is2_axu_ldst_extpid <= is2_axu_ldst_extpid_L2;
fdep_fiss_is2_axu_ldst_forcealign <= is2_axu_ldst_forcealign_L2;
fdep_fiss_is2_axu_ldst_forceexcept <= is2_axu_ldst_forceexcept_L2;
fdep_fiss_is2_axu_mftgpr <= is2_axu_mftgpr_L2;
fdep_fiss_is2_axu_mffgpr <= is2_axu_mffgpr_L2;
fdep_fiss_is2_axu_movedp <= is2_axu_movedp_L2;
fdep_fiss_is2_axu_instr_type <= is2_axu_instr_type_L2;
fdep_fiss_is2_match <= is2_match_L2;
fdep_fiss_is2_2ucode <= is2_2ucode_L2;
fdep_fiss_is2_2ucode_type <= is2_2ucode_type_L2;
fdep_fiss_is2_hole_delay <= is2_hole_delay_L2;
fdep_fiss_is2_to_ucode <= is2_to_ucode_L2;
fdep_fiss_is2_is_ucode <= is2_is_ucode_L2;
fdep_fiss_is2early_vld <= fdec_fdep_is1_vld;
fdep_fiss_is1_xu_dep_hit_b <= fxu_dep_hit_b;
-----------------------------------------------------------------------
-- Scan
-----------------------------------------------------------------------
siv(0 TO scan_right) <= sov(1 to scan_right) & scan_in;
scan_out <= sov(0);
END IUQ_FXU_DEP;