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.

2229 lines
103 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.
-- Description: XU LSU L1 Data Directory Wrapper
library ibm, ieee, work, tri, support;
use ibm.std_ulogic_support.all;
use ibm.std_ulogic_function_support.all;
use ibm.std_ulogic_unsigned.all;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use tri.tri_latches_pkg.all;
use support.power_logic_pkg.all;
-- ##########################################################################################
-- VHDL Contents
-- 1) L1 D$ Directory Array
-- 2) Valid Register Array
-- 3) LRU Register Array
-- 4) Data Cache Control
-- 5) Flush Generation
-- 6) 8 way tag compare
-- 7) Parity Check
-- 8) Reload Update
-- ##########################################################################################
entity xuq_lsu_dir is
generic(expand_type : integer := 2;
l_endian_m : integer := 1;
regmode : integer := 6;
lmq_entries : integer := 8;
dc_size : natural := 14; -- 2^14 = 16384 Bytes L1 D$
cl_size : natural := 6; -- 2^6 = 64 Bytes CacheLines
wayDataSize : natural := 35; -- TagSize + Parity Bits
real_data_add : integer := 42);
port(
xu_lsu_rf0_act :in std_ulogic;
xu_lsu_rf1_cmd_act :in std_ulogic;
xu_lsu_rf1_axu_op_val :in std_ulogic;
xu_lsu_rf1_axu_ldst_falign :in std_ulogic;
xu_lsu_rf1_axu_ldst_fexcpt :in std_ulogic; -- AXU force alignment exception on misaligned access
xu_lsu_rf1_cache_acc :in std_ulogic;
xu_lsu_rf1_thrd_id :in std_ulogic_vector(0 to 3);
xu_lsu_rf1_optype1 :in std_ulogic;
xu_lsu_rf1_optype2 :in std_ulogic;
xu_lsu_rf1_optype4 :in std_ulogic;
xu_lsu_rf1_optype8 :in std_ulogic;
xu_lsu_rf1_optype16 :in std_ulogic;
xu_lsu_rf1_optype32 :in std_ulogic;
xu_lsu_rf1_target_gpr :in std_ulogic_vector(0 to 8);
xu_lsu_rf1_mtspr_trace :in std_ulogic; -- Operation is a mtspr trace instruction
xu_lsu_rf1_load_instr :in std_ulogic;
xu_lsu_rf1_store_instr :in std_ulogic;
xu_lsu_rf1_dcbf_instr :in std_ulogic;
xu_lsu_rf1_sync_instr :in std_ulogic;
xu_lsu_rf1_l_fld :in std_ulogic_vector(0 to 1);
xu_lsu_rf1_dcbi_instr :in std_ulogic;
xu_lsu_rf1_dcbz_instr :in std_ulogic;
xu_lsu_rf1_dcbt_instr :in std_ulogic;
xu_lsu_rf1_dcbtst_instr :in std_ulogic;
xu_lsu_rf1_th_fld :in std_ulogic_vector(0 to 4);
xu_lsu_rf1_dcbtls_instr :in std_ulogic;
xu_lsu_rf1_dcbtstls_instr :in std_ulogic;
xu_lsu_rf1_dcblc_instr :in std_ulogic;
xu_lsu_rf1_dcbst_instr :in std_ulogic;
xu_lsu_rf1_icbi_instr :in std_ulogic;
xu_lsu_rf1_icblc_instr :in std_ulogic;
xu_lsu_rf1_icbt_instr :in std_ulogic;
xu_lsu_rf1_icbtls_instr :in std_ulogic;
xu_lsu_rf1_icswx_instr :in std_ulogic;
xu_lsu_rf1_icswx_dot_instr :in std_ulogic;
xu_lsu_rf1_icswx_epid :in std_ulogic;
xu_lsu_rf1_tlbsync_instr :in std_ulogic;
xu_lsu_rf1_ldawx_instr :in std_ulogic;
xu_lsu_rf1_wclr_instr :in std_ulogic;
xu_lsu_rf1_wchk_instr :in std_ulogic;
xu_lsu_rf1_lock_instr :in std_ulogic;
xu_lsu_rf1_mutex_hint :in std_ulogic; -- Mutex Hint For larx instructions
xu_lsu_rf1_mbar_instr :in std_ulogic;
xu_lsu_rf1_is_msgsnd :in std_ulogic;
xu_lsu_rf1_dci_instr :in std_ulogic; -- DCI instruction is valid
xu_lsu_rf1_ici_instr :in std_ulogic; -- ICI instruction is valid
xu_lsu_rf1_algebraic :in std_ulogic;
xu_lsu_rf1_byte_rev :in std_ulogic;
xu_lsu_rf1_src_gpr :in std_ulogic;
xu_lsu_rf1_src_axu :in std_ulogic;
xu_lsu_rf1_src_dp :in std_ulogic;
xu_lsu_rf1_targ_gpr :in std_ulogic;
xu_lsu_rf1_targ_axu :in std_ulogic;
xu_lsu_rf1_targ_dp :in std_ulogic;
xu_lsu_ex4_val :in std_ulogic_vector(0 to 3); -- There is a valid Instruction in EX4
xu_lsu_ex1_add_src0 :in std_ulogic_vector(64-(2**REGMODE) to 63);
xu_lsu_ex1_add_src1 :in std_ulogic_vector(64-(2**REGMODE) to 63);
xu_lsu_rf1_src0_vld :in std_ulogic;
xu_lsu_rf1_src0_reg :in std_ulogic_vector(0 to 7);
xu_lsu_rf1_src1_vld :in std_ulogic;
xu_lsu_rf1_src1_reg :in std_ulogic_vector(0 to 7);
xu_lsu_rf1_targ_vld :in std_ulogic;
xu_lsu_rf1_targ_reg :in std_ulogic_vector(0 to 7);
-- Error Inject
pc_xu_inj_dcachedir_parity :in std_ulogic;
pc_xu_inj_dcachedir_multihit :in std_ulogic;
ex3_wimge_w_bit :in std_ulogic; -- WIMGE bits in EX3
ex3_wimge_i_bit :in std_ulogic; -- WIMGE bits in EX3
ex3_wimge_e_bit :in std_ulogic; -- WIMGE bits in EX3
ex3_p_addr :in std_ulogic_vector(64-real_data_add to 51);
derat_xu_ex3_noop_touch :in std_ulogic_vector(0 to 3);
ex3_ld_queue_full :in std_ulogic; -- LSQ load queue full
ex3_stq_flush :in std_ulogic; -- LSQ store queue full
ex3_ig_flush :in std_ulogic; -- LSQ I=G=1 flush
ex2_lm_dep_hit :in std_ulogic;
-- Directory Way Tag Compare
ex3_way_cmp_a :in std_ulogic;
ex3_way_cmp_b :in std_ulogic;
ex3_way_cmp_c :in std_ulogic;
ex3_way_cmp_d :in std_ulogic;
ex3_way_cmp_e :in std_ulogic;
ex3_way_cmp_f :in std_ulogic;
ex3_way_cmp_g :in std_ulogic;
ex3_way_cmp_h :in std_ulogic;
ex3_wayA_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayB_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayC_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayD_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayE_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayF_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayG_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex3_wayH_tag :in std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
xu_lsu_mtspr_trace_en :in std_ulogic_vector(0 to 3);
spr_xucr0_clkg_ctl_b1 :in std_ulogic;
xu_lsu_spr_xucr0_aflsta :in std_ulogic;
xu_lsu_spr_xucr0_flsta :in std_ulogic;
xu_lsu_spr_xucr0_l2siw :in std_ulogic; -- L2 store interface width
xu_lsu_spr_xucr0_dcdis :in std_ulogic;
xu_lsu_spr_xucr0_wlk :in std_ulogic;
xu_lsu_spr_ccr2_dfrat :in std_ulogic;
xu_lsu_spr_xucr0_clfc :in std_ulogic;
xu_lsu_spr_xucr0_flh2l2 :in std_ulogic;
xu_lsu_spr_xucr0_cls :in std_ulogic; -- Cacheline Size = 1 => 128Byte size, 0 => 64Byte size
xu_lsu_spr_msr_cm :in std_ulogic_vector(0 to 3); -- 64bit mode enable
-- MSR[GS,PR] bits, indicates which state we are running in
xu_lsu_msr_gs :in std_ulogic_vector(0 to 3); -- Guest State
xu_lsu_msr_pr :in std_ulogic_vector(0 to 3); -- Problem State
an_ac_flh2l2_gate :in std_ulogic; -- Gate L1 Hit forwarding SPR config bit
ldq_rel1_early_v :in std_ulogic;
ldq_rel1_val :in std_ulogic;
ldq_rel_mid_val :in std_ulogic; -- Reload data is valid for middle 32B beat
ldq_rel_retry_val :in std_ulogic; -- Reload is recirculated, dont update D$ array
ldq_rel3_early_v :in std_ulogic;
ldq_rel3_val :in std_ulogic;
ldq_rel_back_invalidated :in std_ulogic;
ldq_rel_data_val_early :in std_ulogic; -- Reload Interface ACT
rel_data_val :in std_ulogic;
ldq_rel_tag :in std_ulogic_vector(1 to 3);
ldq_rel_tag_early :in std_ulogic_vector(1 to 3);
ldq_rel_set_val :in std_ulogic;
ldq_rel_ecc_err :in std_ulogic;
ldq_rel_classid :in std_ulogic_vector(0 to 1);
ldq_rel_lock_en :in std_ulogic;
ldq_rel_l1dump_cslc :in std_ulogic;
ldq_rel3_l1dump_val :in std_ulogic;
ldq_rel_watch_en :in std_ulogic;
ldq_rel_addr :in std_ulogic_vector(64-real_data_add to 52);
ldq_rel_addr_early :in std_ulogic_vector(64-real_data_add to 63-cl_size);
ldq_recirc_rel_val :out std_ulogic;
xu_lsu_dci :in std_ulogic; -- Flash invalidate the Directory
is2_l2_inv_val :in std_ulogic;
ex6_ld_par_err :in std_ulogic;
xu_lsu_rf1_flush :in std_ulogic_vector(0 to 3);
xu_lsu_ex1_flush :in std_ulogic_vector(0 to 3);
xu_lsu_ex2_flush :in std_ulogic_vector(0 to 3);
xu_lsu_ex3_flush :in std_ulogic_vector(0 to 3);
xu_lsu_ex4_flush :in std_ulogic_vector(0 to 3);
xu_lsu_ex5_flush :in std_ulogic_vector(0 to 3);
xu_lsu_slowspr_val :in std_ulogic;
xu_lsu_slowspr_rw :in std_ulogic;
xu_lsu_slowspr_etid :in std_ulogic_vector(0 to 1);
xu_lsu_slowspr_addr :in std_ulogic_vector(0 to 9);
xu_lsu_slowspr_data :in std_ulogic_vector(64-(2**REGMODE) to 63);
xu_lsu_slowspr_done :in std_ulogic;
slowspr_val_out :out std_ulogic;
slowspr_rw_out :out std_ulogic;
slowspr_etid_out :out std_ulogic_vector(0 to 1);
slowspr_addr_out :out std_ulogic_vector(0 to 9);
slowspr_data_out :out std_ulogic_vector(64-(2**REGMODE) to 63);
slowspr_done_out :out std_ulogic;
ldq_rel_axu_val :in std_ulogic;
ldq_rel_thrd_id :in std_ulogic_vector(0 to 3);
ldq_rel_ta_gpr :in std_ulogic_vector(0 to 8);
ldq_rel_upd_gpr :in std_ulogic;
ldq_rel_ci :in std_ulogic;
dir_arr_rd_addr_01 :out std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
dir_arr_rd_addr_23 :out std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
dir_arr_rd_addr_45 :out std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
dir_arr_rd_addr_67 :out std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
dir_arr_rd_data :in std_ulogic_vector(0 to 8*wayDataSize-1);
dir_wr_enable :out std_ulogic_vector(0 to 3);
dir_wr_way :out std_ulogic_vector(0 to 7);
dir_arr_wr_addr :out std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
dir_arr_wr_data :out std_ulogic_vector(64-real_data_add to 64-real_data_add+wayDataSize-1);
ex1_src0_vld :out std_ulogic;
ex1_src0_reg :out std_ulogic_vector(0 to 7);
ex1_src1_vld :out std_ulogic;
ex1_src1_reg :out std_ulogic_vector(0 to 7);
ex1_targ_vld :out std_ulogic;
ex1_targ_reg :out std_ulogic_vector(0 to 7);
ex1_check_watch :out std_ulogic_vector(0 to 3); -- Instructions that need to wait for ldawx to complete in loadmiss queue
ex3_cache_acc :out std_ulogic;
ex1_optype1 :out std_ulogic;
ex1_optype2 :out std_ulogic;
ex1_optype4 :out std_ulogic;
ex1_optype8 :out std_ulogic;
ex1_optype16 :out std_ulogic;
ex1_optype32 :out std_ulogic;
ex1_saxu_instr :out std_ulogic;
ex1_sdp_instr :out std_ulogic;
ex1_stgpr_instr :out std_ulogic;
ex1_store_instr :out std_ulogic;
ex1_axu_op_val :out std_ulogic;
lsu_xu_ex3_align :out std_ulogic_vector(0 to 3);
lsu_xu_ex3_dsi :out std_ulogic_vector(0 to 3);
lsu_xu_ex3_inval_align_2ucode :out std_ulogic;
ex3_stg_flush :out std_ulogic;
ex4_stg_flush :out std_ulogic;
lsu_xu_ex3_n_flush_req :out std_ulogic;
lsu_xu_ex4_ldq_full_flush :out std_ulogic;
lsu_xu_ex3_dep_flush :out std_ulogic;
xu_derat_ex1_epn_arr :out std_ulogic_vector(64-(2**regmode) to 51);
xu_derat_ex1_epn_nonarr :out std_ulogic_vector(64-(2**regmode) to 51);
snoop_addr :in std_ulogic_vector(64-(2**regmode) to 51);
snoop_addr_sel :in std_ulogic;
xu_derat_rf1_binv_val :out std_ulogic;
ex3_req_thrd_id :out std_ulogic_vector(0 to 3);
ex3_target_gpr :out std_ulogic_vector(0 to 8);
ex3_dcbt_instr :out std_ulogic;
ex3_dcbtst_instr :out std_ulogic;
ex3_th_fld_l2 :out std_ulogic;
ex3_dcbst_instr :out std_ulogic;
ex3_dcbf_instr :out std_ulogic;
ex3_sync_instr :out std_ulogic;
ex3_mtspr_trace :out std_ulogic;
ex3_byte_en :out std_ulogic_vector(0 to 31);
ex3_l_fld :out std_ulogic_vector(0 to 1);
ex3_dcbi_instr :out std_ulogic;
ex3_dcbz_instr :out std_ulogic;
ex3_icbi_instr :out std_ulogic;
ex3_icswx_instr :out std_ulogic;
ex3_icswx_dot :out std_ulogic;
ex3_icswx_epid :out std_ulogic;
ex3_mbar_instr :out std_ulogic;
ex3_msgsnd_instr :out std_ulogic;
ex3_dci_instr :out std_ulogic;
ex3_ici_instr :out std_ulogic;
ex3_load_instr :out std_ulogic;
ex3_store_instr :out std_ulogic;
ex3_axu_op_val :out std_ulogic;
ex3_algebraic :out std_ulogic;
ex3_dcbtls_instr :out std_ulogic;
ex3_dcbtstls_instr :out std_ulogic;
ex3_dcblc_instr :out std_ulogic;
ex3_icblc_instr :out std_ulogic;
ex3_icbt_instr :out std_ulogic;
ex3_icbtls_instr :out std_ulogic;
ex3_tlbsync_instr :out std_ulogic;
ex3_local_dcbf :out std_ulogic;
ex3_lock_en :out std_ulogic;
ex4_drop_rel :out std_ulogic;
ex3_load_l1hit :out std_ulogic;
ex3_rotate_sel :out std_ulogic_vector(0 to 4);
ex3_watch_en :out std_ulogic;
ex3_data_swap :out std_ulogic;
ex3_blkable_touch :out std_ulogic;
ex7_targ_match :out std_ulogic; -- EX6vsEX5 matched
ex8_targ_match :out std_ulogic; -- EX7vsEX6 or EX7vsEX5 matched
ex4_ld_entry :out std_ulogic_vector(0 to 67);
ex3_cache_inh :out std_ulogic;
ex3_l_s_q_val :out std_ulogic;
ex3_drop_ld_req :out std_ulogic;
ex3_drop_touch :out std_ulogic;
ex3_stx_instr :out std_ulogic;
ex3_larx_instr :out std_ulogic;
ex3_mutex_hint :out std_ulogic;
ex3_opsize :out std_ulogic_vector(0 to 5);
ex4_dir_perr_det :out std_ulogic;
ex4_dir_multihit_det :out std_ulogic;
ex4_n_lsu_ddmh_flush :out std_ulogic_vector(0 to 3); -- Directory Multihit Flush
ex2_p_addr_lwr :out std_ulogic_vector(52 to 57);
ex3_p_addr_lwr :out std_ulogic_vector(58 to 63);
dcpar_err_flush :out std_ulogic;
pe_recov_begin :out std_ulogic;
lsu_xu_ex3_ddir_par_err :out std_ulogic;
ex3_cClass_collision :in std_ulogic;
-- Inter-Thread Congruence Class Check
ex3_cClass_upd_way_a :out std_ulogic;
ex3_cClass_upd_way_b :out std_ulogic;
ex3_cClass_upd_way_c :out std_ulogic;
ex3_cClass_upd_way_d :out std_ulogic;
ex3_cClass_upd_way_e :out std_ulogic;
ex3_cClass_upd_way_f :out std_ulogic;
ex3_cClass_upd_way_g :out std_ulogic;
ex3_cClass_upd_way_h :out std_ulogic;
-- Directory Read Data
ex2_wayA_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayB_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayC_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayD_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayE_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayF_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayG_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
ex2_wayH_tag :out std_ulogic_vector(64-real_data_add to 63-(dc_size-3));
-- Update Data Array Valid
rel_upd_dcarr_val :out std_ulogic;
lsu_xu_ex4_cr_upd :out std_ulogic;
lsu_xu_ex5_cr_rslt :out std_ulogic;
lsu_xu_ex5_wren :out std_ulogic;
lsu_xu_rel_wren :out std_ulogic;
lsu_xu_rel_ta_gpr :out std_ulogic_vector(0 to 7);
lsu_xu_perf_events :out std_ulogic_vector(0 to 37);
lsu_xu_need_hole :out std_ulogic;
xu_fu_ex5_reload_val :out std_ulogic;
xu_fu_ex5_load_val :out std_ulogic_vector(0 to 3);
xu_fu_ex5_load_tag :out std_ulogic_vector(0 to 8);
-- ICBI Interface
xu_iu_ex6_icbi_val :out std_ulogic_vector(0 to 3);
xu_iu_ex6_icbi_addr :out std_ulogic_vector(64-real_data_add to 57);
-- Data Array Controls
dcarr_up_way_addr :out std_ulogic_vector(0 to 2);
-- DERAT SlowSPR Regs
xu_derat_epsc_wr :out std_ulogic_vector(0 to 3);
xu_derat_eplc_wr :out std_ulogic_vector(0 to 3);
xu_derat_eplc0_epr :out std_ulogic;
xu_derat_eplc0_eas :out std_ulogic;
xu_derat_eplc0_egs :out std_ulogic;
xu_derat_eplc0_elpid :out std_ulogic_vector(40 to 47);
xu_derat_eplc0_epid :out std_ulogic_vector(50 to 63);
xu_derat_eplc1_epr :out std_ulogic;
xu_derat_eplc1_eas :out std_ulogic;
xu_derat_eplc1_egs :out std_ulogic;
xu_derat_eplc1_elpid :out std_ulogic_vector(40 to 47);
xu_derat_eplc1_epid :out std_ulogic_vector(50 to 63);
xu_derat_eplc2_epr :out std_ulogic;
xu_derat_eplc2_eas :out std_ulogic;
xu_derat_eplc2_egs :out std_ulogic;
xu_derat_eplc2_elpid :out std_ulogic_vector(40 to 47);
xu_derat_eplc2_epid :out std_ulogic_vector(50 to 63);
xu_derat_eplc3_epr :out std_ulogic;
xu_derat_eplc3_eas :out std_ulogic;
xu_derat_eplc3_egs :out std_ulogic;
xu_derat_eplc3_elpid :out std_ulogic_vector(40 to 47);
xu_derat_eplc3_epid :out std_ulogic_vector(50 to 63);
xu_derat_epsc0_epr :out std_ulogic;
xu_derat_epsc0_eas :out std_ulogic;
xu_derat_epsc0_egs :out std_ulogic;
xu_derat_epsc0_elpid :out std_ulogic_vector(40 to 47);
xu_derat_epsc0_epid :out std_ulogic_vector(50 to 63);
xu_derat_epsc1_epr :out std_ulogic;
xu_derat_epsc1_eas :out std_ulogic;
xu_derat_epsc1_egs :out std_ulogic;
xu_derat_epsc1_elpid :out std_ulogic_vector(40 to 47);
xu_derat_epsc1_epid :out std_ulogic_vector(50 to 63);
xu_derat_epsc2_epr :out std_ulogic;
xu_derat_epsc2_eas :out std_ulogic;
xu_derat_epsc2_egs :out std_ulogic;
xu_derat_epsc2_elpid :out std_ulogic_vector(40 to 47);
xu_derat_epsc2_epid :out std_ulogic_vector(50 to 63);
xu_derat_epsc3_epr :out std_ulogic;
xu_derat_epsc3_eas :out std_ulogic;
xu_derat_epsc3_egs :out std_ulogic;
xu_derat_epsc3_elpid :out std_ulogic_vector(40 to 47);
xu_derat_epsc3_epid :out std_ulogic_vector(50 to 63);
-- ACT signals
ex1_stg_act :out std_ulogic;
ex2_stg_act :out std_ulogic;
ex3_stg_act :out std_ulogic;
ex4_stg_act :out std_ulogic;
binv1_stg_act :out std_ulogic;
binv2_stg_act :out std_ulogic;
-- SPR status
lsu_xu_spr_xucr0_cslc_xuop :out std_ulogic; -- Invalidate type instruction invalidated lock
lsu_xu_spr_xucr0_cslc_binv :out std_ulogic; -- Back-Invalidate invalidated lock
lsu_xu_spr_xucr0_clo :out std_ulogic; -- Cache Lock instruction caused an overlock
lsu_xu_spr_xucr0_cul :out std_ulogic; -- Cache Lock unable to lock
spr_xucr0_cls :out std_ulogic; -- Cacheline Size
-- Directory Read interface
dir_arr_rd_is2_val :out std_ulogic;
dir_arr_rd_congr_cl :out std_ulogic_vector(0 to 4);
-- Debug Data Compare
ex4_load_op_hit :out std_ulogic;
ex4_store_hit :out std_ulogic;
ex4_axu_op_val :out std_ulogic;
spr_dvc1_act :out std_ulogic;
spr_dvc2_act :out std_ulogic;
spr_dvc1_dbg :out std_ulogic_vector(64-(2**regmode) to 63);
spr_dvc2_dbg :out std_ulogic_vector(64-(2**regmode) to 63);
-- Debug Data
pc_xu_trace_bus_enable :in std_ulogic;
dc_fgen_dbg_data :out std_ulogic_vector(0 to 1);
dc_cntrl_dbg_data :out std_ulogic_vector(0 to 66);
dc_val_dbg_data :out std_ulogic_vector(0 to 293);
dc_lru_dbg_data :out std_ulogic_vector(0 to 81);
dc_dir_dbg_data :out std_ulogic_vector(0 to 35);
dir_arr_dbg_data :out std_ulogic_vector(0 to 60);
vdd :inout power_logic;
gnd :inout power_logic;
nclk :in clk_logic;
sg_0 :in std_ulogic;
func_sl_thold_0_b :in std_ulogic;
func_sl_force :in std_ulogic;
func_slp_sl_thold_0_b :in std_ulogic;
func_slp_sl_force :in std_ulogic;
func_nsl_thold_0_b :in std_ulogic;
func_nsl_force :in std_ulogic;
func_slp_nsl_thold_0_b :in std_ulogic;
func_slp_nsl_force :in std_ulogic;
d_mode_dc :in std_ulogic;
delay_lclkr_dc :in std_ulogic;
mpw1_dc_b :in std_ulogic;
mpw2_dc_b :in std_ulogic;
scan_in :in std_ulogic_vector(0 to 3);
scan_out :out std_ulogic_vector(0 to 3)
);
-- synopsys translate_off
-- synopsys translate_on
end xuq_lsu_dir;
----
architecture xuq_lsu_dir of xuq_lsu_dir is
----------------------------
-- components
----------------------------
----------------------------
-- constants
----------------------------
constant uprCClassBit :natural := 64-(dc_size-3);
constant lwrCClassBit :natural := 63-cl_size;
constant uprTagBit :natural := 64-real_data_add;
constant lwrTagBit :natural := 63-(dc_size-3);
constant tagSize :natural := lwrTagBit-uprTagBit+1;
constant parExtCalc :natural := 8 - (tagSize mod 8);
constant parBits :natural := (tagSize+parExtCalc) / 8;
constant lwr_p_addr_offset :natural := 0;
constant ldq_rel1_val_stg_offset :natural := lwr_p_addr_offset + 12;
constant ldq_rel_mid_stg_offset :natural := ldq_rel1_val_stg_offset + 1;
constant ldq_rel3_val_stg_offset :natural := ldq_rel_mid_stg_offset + 1;
constant spr_xucr0_dcdis_offset :natural := ldq_rel3_val_stg_offset + 1;
constant ex4_dir_perr_det_offset :natural := spr_xucr0_dcdis_offset + 1;
constant recirc_rel_val_offset :natural := ex4_dir_perr_det_offset + 1;
constant trace_bus_enable_offset :natural := recirc_rel_val_offset + 1;
constant scan_right :natural := trace_bus_enable_offset + 1 - 1;
----------------------------
-- signals
----------------------------
signal ex1_p_addr :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal lwr_p_addr_d :std_ulogic_vector(52 to 63);
signal lwr_p_addr_q :std_ulogic_vector(52 to 63);
signal rel1_val :std_ulogic;
signal rel_mid_val :std_ulogic;
signal rel3_val :std_ulogic;
signal ldq_rel_stg24_val_d :std_ulogic;
signal ldq_rel_stg24_val_q :std_ulogic;
signal rel_st_tag :std_ulogic_vector(1 to 3);
signal rel_st_tag_early :std_ulogic_vector(1 to 3);
signal rel24_addr_d :std_ulogic_vector(64-real_data_add to 52);
signal rel24_addr_q :std_ulogic_vector(64-real_data_add to 52);
signal rel_way_val_a :std_ulogic;
signal rel_way_val_b :std_ulogic;
signal rel_way_val_c :std_ulogic;
signal rel_way_val_d :std_ulogic;
signal rel_way_val_e :std_ulogic;
signal rel_way_val_f :std_ulogic;
signal rel_way_val_g :std_ulogic;
signal rel_way_val_h :std_ulogic;
signal rel_way_lock_a :std_ulogic;
signal rel_way_lock_b :std_ulogic;
signal rel_way_lock_c :std_ulogic;
signal rel_way_lock_d :std_ulogic;
signal rel_way_lock_e :std_ulogic;
signal rel_way_lock_f :std_ulogic;
signal rel_way_lock_g :std_ulogic;
signal rel_way_lock_h :std_ulogic;
signal ex2_is_inval_op :std_ulogic;
signal ex2_lock_set :std_ulogic;
signal ex2_lock_clr :std_ulogic;
signal rel_wayA_wen :std_ulogic;
signal rel_wayB_wen :std_ulogic;
signal rel_wayC_wen :std_ulogic;
signal rel_wayD_wen :std_ulogic;
signal rel_wayE_wen :std_ulogic;
signal rel_wayF_wen :std_ulogic;
signal rel_wayG_wen :std_ulogic;
signal rel_wayH_wen :std_ulogic;
signal ex3_l1hit :std_ulogic;
signal ex4_l1miss :std_ulogic;
signal ex4_way_a_hit :std_ulogic;
signal ex4_way_b_hit :std_ulogic;
signal ex4_way_c_hit :std_ulogic;
signal ex4_way_d_hit :std_ulogic;
signal ex4_way_e_hit :std_ulogic;
signal ex4_way_f_hit :std_ulogic;
signal ex4_way_g_hit :std_ulogic;
signal ex4_way_h_hit :std_ulogic;
signal ex4_way_a_dir :std_ulogic_vector(0 to 5);
signal ex4_way_b_dir :std_ulogic_vector(0 to 5);
signal ex4_way_c_dir :std_ulogic_vector(0 to 5);
signal ex4_way_d_dir :std_ulogic_vector(0 to 5);
signal ex4_way_e_dir :std_ulogic_vector(0 to 5);
signal ex4_way_f_dir :std_ulogic_vector(0 to 5);
signal ex4_way_g_dir :std_ulogic_vector(0 to 5);
signal ex4_way_h_dir :std_ulogic_vector(0 to 5);
signal rel_way_upd_a :std_ulogic;
signal rel_way_upd_b :std_ulogic;
signal rel_way_upd_c :std_ulogic;
signal rel_way_upd_d :std_ulogic;
signal rel_way_upd_e :std_ulogic;
signal rel_way_upd_f :std_ulogic;
signal rel_way_upd_g :std_ulogic;
signal rel_way_upd_h :std_ulogic;
signal rel_way_clr_a :std_ulogic;
signal rel_way_clr_b :std_ulogic;
signal rel_way_clr_c :std_ulogic;
signal rel_way_clr_d :std_ulogic;
signal rel_way_clr_e :std_ulogic;
signal rel_way_clr_f :std_ulogic;
signal rel_way_clr_g :std_ulogic;
signal rel_way_clr_h :std_ulogic;
signal rel4_set_val :std_ulogic;
signal stg_ex2_flush :std_ulogic;
signal stg_ex3_flush :std_ulogic;
signal stg_ex4_flush :std_ulogic;
signal stg_ex5_flush :std_ulogic;
signal ex2_no_lru_upd :std_ulogic;
signal ex3_tag_way_perr :std_ulogic_vector(0 to 7);
signal ex3_cache_en :std_ulogic;
signal rel_lock_en :std_ulogic;
signal rel_l1dump_cslc :std_ulogic;
signal rel3_l1dump_val :std_ulogic;
signal rel1_classid :std_ulogic_vector(0 to 1);
signal dcbtstls_instr_ex3 :std_ulogic;
signal dcbtls_instr_ex3 :std_ulogic;
signal ex1_frc_align2 :std_ulogic;
signal ex1_frc_align4 :std_ulogic;
signal ex1_frc_align8 :std_ulogic;
signal ex1_frc_align16 :std_ulogic;
signal ex1_frc_align32 :std_ulogic;
signal spr_xucr2_rmt :std_ulogic_vector(0 to 31);
signal spr_xucr0_wlck :std_ulogic;
signal ex5_load_op_hit :std_ulogic;
signal ex2_ddir_acc_instr :std_ulogic;
signal ex3_dir_perr_det :std_ulogic;
signal ex4_ldq_full_flush :std_ulogic;
signal rel_up_way_addr_b :std_ulogic_vector(0 to 2); -- Reload upper Address Inverted
signal rel_dcarr_addr_en :std_ulogic; -- Reload Select
signal rel_dcarr_val_upd :std_ulogic;
signal spr_xucr0_dcdis_d :std_ulogic;
signal spr_xucr0_dcdis_q :std_ulogic;
signal ex2_p_addr_lwr_int :std_ulogic_vector(52 to 63);
signal ex1_thrd_id :std_ulogic_vector(0 to 3);
signal ex2_ldawx_instr :std_ulogic;
signal ex2_wclr_instr :std_ulogic;
signal ex2_wchk_val :std_ulogic;
signal ex2_l_fld :std_ulogic_vector(0 to 1);
signal store_instr_ex2 :std_ulogic;
signal rel_watch_en :std_ulogic;
signal rel_thrd_id :std_ulogic_vector(0 to 3);
signal ex1_l2_inv_val :std_ulogic;
signal ex1_l2_inv_val_b :std_ulogic;
signal ex2_frc_align_d :std_ulogic_vector(59 to 63);
signal ex2_frc_align_q :std_ulogic_vector(59 to 63);
signal ex1_lsu_64bit_agen :std_ulogic;
signal ex1_agen_addr :std_ulogic_vector(64-(2**regmode) to 51);
signal ex1_dir01_addr :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal ex1_dir23_addr :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal ex1_dir45_addr :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal ex1_dir67_addr :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal ex1_eff_addr :std_ulogic_vector(64-(2**regmode) to 63);
signal ex4_dir_perr_det_d :std_ulogic;
signal ex4_dir_perr_det_q :std_ulogic;
signal recirc_rel_val :std_ulogic;
signal recirc_rel_val_d :std_ulogic;
signal recirc_rel_val_q :std_ulogic;
signal ex1_dir_acc_val :std_ulogic;
signal ex1_dir_acc_val_b :std_ulogic;
signal rf1_l2_inv_val :std_ulogic;
signal ex1_agen_binv_val :std_ulogic;
signal dir_wr_enable_int :std_ulogic_vector(0 to 3);
signal dir_arr_wr_addr_int :std_ulogic_vector(64-(dc_size-3) to 63-cl_size);
signal dir_wr_way_int :std_ulogic_vector(0 to 7);
signal dir_arr_wr_data_int :std_ulogic_vector(64-real_data_add to 64-real_data_add+wayDataSize-1);
signal ex1_stg_act_int :std_ulogic;
signal ex2_stg_act_int :std_ulogic;
signal ex3_stg_act_int :std_ulogic;
signal ex4_stg_act_int :std_ulogic;
signal ex5_stg_act_int :std_ulogic;
signal binv1_stg_act_int :std_ulogic;
signal binv2_stg_act_int :std_ulogic;
signal binv3_stg_act_int :std_ulogic;
signal binv4_stg_act_int :std_ulogic;
signal binv5_stg_act_int :std_ulogic;
signal rel1_stg_act_int :std_ulogic;
signal rel2_stg_act_int :std_ulogic;
signal rel3_stg_act_int :std_ulogic;
signal binv1_ex1_stg_act :std_ulogic;
signal ex2_lockwatchSet_rel_coll :std_ulogic;
signal ex3_wclr_all_flush :std_ulogic;
signal spr_xucr0_cls_int :std_ulogic;
signal agen_xucr0_cls :std_ulogic;
signal agen_xucr0_cls_b :std_ulogic;
signal tag_scan_out :std_ulogic;
signal lru_scan_out :std_ulogic;
signal dir_scan_out :std_ulogic;
signal ex3_way_tag_par_a :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_b :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_c :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_d :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_e :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_f :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_g :std_ulogic_vector(0 to parBits-1);
signal ex3_way_tag_par_h :std_ulogic_vector(0 to parBits-1);
signal ex4_dir_lru :std_ulogic_vector(0 to 6);
signal ex3_load_val :std_ulogic;
signal ex3_l2_request :std_ulogic;
signal ex3_ldq_potential_flush :std_ulogic;
signal ex4_snd_ld_l2 :std_ulogic;
signal ldq_rel1_val_stg_d :std_ulogic;
signal ldq_rel1_val_stg_q :std_ulogic;
signal ldq_rel_mid_stg_d :std_ulogic;
signal ldq_rel_mid_stg_q :std_ulogic;
signal ldq_rel3_val_stg_d :std_ulogic;
signal ldq_rel3_val_stg_q :std_ulogic;
signal ldq_rel_data_stg_d :std_ulogic;
signal ldq_rel_data_stg_q :std_ulogic;
signal ldq_rel_set_stg_d :std_ulogic;
signal ldq_rel_set_stg_q :std_ulogic;
signal trace_bus_enable_q :std_ulogic;
signal dir_arr_dbg_data_d :std_ulogic_vector(0 to 60);
signal dir_arr_dbg_data_q :std_ulogic_vector(0 to 60);
signal ex3_cache_acc_int :std_ulogic;
signal tiup :std_ulogic;
signal siv :std_ulogic_vector(0 to scan_right);
signal sov :std_ulogic_vector(0 to scan_right);
begin
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Inputs
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
tiup <= '1';
-- Force Alignment
ex2_frc_align_d(59) <= not ex1_frc_align32;
ex2_frc_align_d(60) <= not (ex1_frc_align32 or ex1_frc_align16);
ex2_frc_align_d(61) <= not (ex1_frc_align32 or ex1_frc_align16 or ex1_frc_align8);
ex2_frc_align_d(62) <= not (ex1_frc_align32 or ex1_frc_align16 or ex1_frc_align8 or ex1_frc_align4);
ex2_frc_align_d(63) <= not (ex1_frc_align32 or ex1_frc_align16 or ex1_frc_align8 or ex1_frc_align4 or ex1_frc_align2);
spr_xucr0_dcdis_d <= xu_lsu_spr_xucr0_dcdis;
ldq_rel_stg24_val_d <= ldq_rel1_val or ldq_rel3_val or ldq_rel_ci or rel_data_val or ldq_rel_mid_val;
ldq_rel1_val_stg_d <= ldq_rel1_val;
ldq_rel_mid_stg_d <= ldq_rel_mid_val;
ldq_rel3_val_stg_d <= ldq_rel3_val;
ldq_rel_data_stg_d <= rel_data_val;
ldq_rel_set_stg_d <= ldq_rel_set_val;
rel1_val <= ldq_rel1_val and not spr_xucr0_dcdis_q;
rel_st_tag <= ldq_rel_tag;
rel_st_tag_early <= ldq_rel_tag_early;
rel24_addr_d <= ldq_rel_addr;
rel4_set_val <= ldq_rel_set_val;
rel_lock_en <= ldq_rel_lock_en;
rel_l1dump_cslc <= ldq_rel_l1dump_cslc and not spr_xucr0_dcdis_q;
rel3_l1dump_val <= ldq_rel3_l1dump_val and not spr_xucr0_dcdis_q;
rel_watch_en <= ldq_rel_watch_en;
rel_thrd_id <= ldq_rel_thrd_id;
rel1_classid <= ldq_rel_classid;
rel3_val <= ldq_rel3_val and not spr_xucr0_dcdis_q;
rel_mid_val <= ldq_rel_mid_val and not spr_xucr0_dcdis_q;
ex2_p_addr_lwr_int <= lwr_p_addr_q(52 to 58) & (lwr_p_addr_q(59 to 63) and ex2_frc_align_q);
binv1_ex1_stg_act <= binv1_stg_act_int or ex1_stg_act_int;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Agen Adder
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
agen_xucr0_cls_b <= not agen_xucr0_cls;
ex1_dir_acc_val_b <= not ex1_dir_acc_val;
ex1_l2_inv_val_b <= not ex1_l2_inv_val;
Mode32b : if regmode = 5 generate begin
ex1_eff_addr <= std_ulogic_vector(unsigned(xu_lsu_ex1_add_src0) + unsigned(xu_lsu_ex1_add_src1));
ex1_agen_addr <= ex1_eff_addr(64-(2**regmode) to 51);
lwr_p_addr_d <= ex1_eff_addr(52 to 63);
ex1_p_addr <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size);
ex1_dir01_addr(64-(dc_size-3) to 63-cl_size-1) <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size-1);
ex1_dir01_addr(63-cl_size) <= ex1_eff_addr(63-cl_size) or agen_xucr0_cls;
ex1_dir23_addr(64-(dc_size-3) to 63-cl_size-1) <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size-1);
ex1_dir23_addr(63-cl_size) <= ex1_eff_addr(63-cl_size) or agen_xucr0_cls;
ex1_dir45_addr(64-(dc_size-3) to 63-cl_size-1) <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size-1);
ex1_dir45_addr(63-cl_size) <= ex1_eff_addr(63-cl_size) or agen_xucr0_cls;
ex1_dir67_addr(64-(dc_size-3) to 63-cl_size-1) <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size-1);
ex1_dir67_addr(63-cl_size) <= ex1_eff_addr(63-cl_size) or agen_xucr0_cls;
end generate Mode32b;
Mode64b : if regmode = 6 generate begin
lsuagen : entity work.xuq_agen(xuq_agen)
port map(
x => xu_lsu_ex1_add_src0,
y => xu_lsu_ex1_add_src1,
mode64 => ex1_lsu_64bit_agen,
dir_ig_57_b => agen_xucr0_cls_b,
snoop_addr => snoop_addr(0 to 51),
snoop_sel => snoop_addr_sel,
binv_val => ex1_agen_binv_val,
sum_non_erat => ex1_eff_addr,
sum => ex1_agen_addr(0 to 51),
sum_arr_dir01 => ex1_dir01_addr,
sum_arr_dir23 => ex1_dir23_addr,
sum_arr_dir45 => ex1_dir45_addr,
sum_arr_dir67 => ex1_dir67_addr,
z => dir_arr_wr_addr_int,
way => dir_wr_way_int,
inv1_val_b => ex1_l2_inv_val_b,
ex1_cache_acc_b => ex1_dir_acc_val_b,
rel3_val => rel3_val,
ary_write_act_01 => dir_wr_enable(0),
ary_write_act_23 => dir_wr_enable(1),
ary_write_act_45 => dir_wr_enable(2),
ary_write_act_67 => dir_wr_enable(3),
ary_write_act => dir_wr_enable_int,
match_oth => recirc_rel_val,
vdd => vdd,
gnd => gnd
);
lwr_p_addr_d <= ex1_eff_addr(52 to 63);
ex1_p_addr <= ex1_eff_addr(64-(dc_size-3) to 63-cl_size);
end generate Mode64b;
recirc_rel_val_d <= recirc_rel_val and rel3_val;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- L1 Data Control Logic
-- 1) Contains Staging Latches
-- 2) Flush Generation
-- 3) Exception Handling
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
lsudc : entity work.xuq_lsu_dc(xuq_lsu_dc)
generic map(expand_type => expand_type,
l_endian_m => l_endian_m,
regmode => regmode,
dc_size => dc_size,
parBits => parBits,
real_data_add => real_data_add)
port map(
xu_lsu_rf0_act => xu_lsu_rf0_act,
xu_lsu_rf1_cmd_act => xu_lsu_rf1_cmd_act,
xu_lsu_rf1_axu_op_val => xu_lsu_rf1_axu_op_val,
xu_lsu_rf1_axu_ldst_falign => xu_lsu_rf1_axu_ldst_falign,
xu_lsu_rf1_axu_ldst_fexcpt => xu_lsu_rf1_axu_ldst_fexcpt,
xu_lsu_rf1_cache_acc => xu_lsu_rf1_cache_acc,
xu_lsu_rf1_thrd_id => xu_lsu_rf1_thrd_id,
xu_lsu_rf1_optype1 => xu_lsu_rf1_optype1,
xu_lsu_rf1_optype2 => xu_lsu_rf1_optype2,
xu_lsu_rf1_optype4 => xu_lsu_rf1_optype4,
xu_lsu_rf1_optype8 => xu_lsu_rf1_optype8,
xu_lsu_rf1_optype16 => xu_lsu_rf1_optype16,
xu_lsu_rf1_optype32 => xu_lsu_rf1_optype32,
xu_lsu_rf1_target_gpr => xu_lsu_rf1_target_gpr,
xu_lsu_rf1_mtspr_trace => xu_lsu_rf1_mtspr_trace,
xu_lsu_rf1_load_instr => xu_lsu_rf1_load_instr,
xu_lsu_rf1_store_instr => xu_lsu_rf1_store_instr,
xu_lsu_rf1_dcbf_instr => xu_lsu_rf1_dcbf_instr,
xu_lsu_rf1_sync_instr => xu_lsu_rf1_sync_instr,
xu_lsu_rf1_l_fld => xu_lsu_rf1_l_fld,
xu_lsu_rf1_dcbi_instr => xu_lsu_rf1_dcbi_instr,
xu_lsu_rf1_dcbz_instr => xu_lsu_rf1_dcbz_instr,
xu_lsu_rf1_dcbt_instr => xu_lsu_rf1_dcbt_instr,
xu_lsu_rf1_dcbtst_instr => xu_lsu_rf1_dcbtst_instr,
xu_lsu_rf1_th_fld => xu_lsu_rf1_th_fld,
xu_lsu_rf1_dcbtls_instr => xu_lsu_rf1_dcbtls_instr,
xu_lsu_rf1_dcbtstls_instr => xu_lsu_rf1_dcbtstls_instr,
xu_lsu_rf1_dcblc_instr => xu_lsu_rf1_dcblc_instr,
xu_lsu_rf1_dcbst_instr => xu_lsu_rf1_dcbst_instr,
xu_lsu_rf1_icbi_instr => xu_lsu_rf1_icbi_instr,
xu_lsu_rf1_icblc_instr => xu_lsu_rf1_icblc_instr,
xu_lsu_rf1_icbt_instr => xu_lsu_rf1_icbt_instr,
xu_lsu_rf1_icbtls_instr => xu_lsu_rf1_icbtls_instr,
xu_lsu_rf1_icswx_instr => xu_lsu_rf1_icswx_instr,
xu_lsu_rf1_icswx_dot_instr => xu_lsu_rf1_icswx_dot_instr,
xu_lsu_rf1_icswx_epid => xu_lsu_rf1_icswx_epid,
xu_lsu_rf1_tlbsync_instr => xu_lsu_rf1_tlbsync_instr,
xu_lsu_rf1_ldawx_instr => xu_lsu_rf1_ldawx_instr,
xu_lsu_rf1_wclr_instr => xu_lsu_rf1_wclr_instr,
xu_lsu_rf1_wchk_instr => xu_lsu_rf1_wchk_instr,
xu_lsu_rf1_lock_instr => xu_lsu_rf1_lock_instr,
xu_lsu_rf1_mutex_hint => xu_lsu_rf1_mutex_hint,
xu_lsu_rf1_mbar_instr => xu_lsu_rf1_mbar_instr,
xu_lsu_rf1_is_msgsnd => xu_lsu_rf1_is_msgsnd,
xu_lsu_rf1_dci_instr => xu_lsu_rf1_dci_instr,
xu_lsu_rf1_ici_instr => xu_lsu_rf1_ici_instr,
xu_lsu_rf1_algebraic => xu_lsu_rf1_algebraic,
xu_lsu_rf1_byte_rev => xu_lsu_rf1_byte_rev,
xu_lsu_rf1_src_gpr => xu_lsu_rf1_src_gpr,
xu_lsu_rf1_src_axu => xu_lsu_rf1_src_axu,
xu_lsu_rf1_src_dp => xu_lsu_rf1_src_dp,
xu_lsu_rf1_targ_gpr => xu_lsu_rf1_targ_gpr,
xu_lsu_rf1_targ_axu => xu_lsu_rf1_targ_axu,
xu_lsu_rf1_targ_dp => xu_lsu_rf1_targ_dp,
xu_lsu_ex4_val => xu_lsu_ex4_val,
xu_lsu_rf1_src0_vld => xu_lsu_rf1_src0_vld,
xu_lsu_rf1_src0_reg => xu_lsu_rf1_src0_reg,
xu_lsu_rf1_src1_vld => xu_lsu_rf1_src1_vld,
xu_lsu_rf1_src1_reg => xu_lsu_rf1_src1_reg,
xu_lsu_rf1_targ_vld => xu_lsu_rf1_targ_vld,
xu_lsu_rf1_targ_reg => xu_lsu_rf1_targ_reg,
ex2_p_addr_lwr => ex2_p_addr_lwr_int,
ex3_wimge_w_bit => ex3_wimge_w_bit,
ex3_wimge_i_bit => ex3_wimge_i_bit,
ex3_wimge_e_bit => ex3_wimge_e_bit,
ex2_lm_dep_hit => ex2_lm_dep_hit,
ex3_p_addr => ex3_p_addr,
ex3_ld_queue_full => ex3_ld_queue_full,
ex3_stq_flush => ex3_stq_flush,
ex3_ig_flush => ex3_ig_flush,
ex3_hit => ex3_l1hit,
ex4_miss => ex4_l1miss,
ex4_snd_ld_l2 => ex4_snd_ld_l2,
derat_xu_ex3_noop_touch => derat_xu_ex3_noop_touch,
ex3_cClass_collision => ex3_cClass_collision,
ex2_lockwatchSet_rel_coll => ex2_lockwatchSet_rel_coll,
ex3_wclr_all_flush => ex3_wclr_all_flush,
rel_dcarr_val_upd => rel_dcarr_val_upd,
xu_lsu_mtspr_trace_en => xu_lsu_mtspr_trace_en,
spr_xucr0_clkg_ctl_b1 => spr_xucr0_clkg_ctl_b1,
xu_lsu_spr_xucr0_aflsta => xu_lsu_spr_xucr0_aflsta,
xu_lsu_spr_xucr0_flsta => xu_lsu_spr_xucr0_flsta,
xu_lsu_spr_xucr0_l2siw => xu_lsu_spr_xucr0_l2siw,
xu_lsu_spr_xucr0_dcdis => xu_lsu_spr_xucr0_dcdis,
xu_lsu_spr_xucr0_wlk => xu_lsu_spr_xucr0_wlk,
xu_lsu_spr_ccr2_dfrat => xu_lsu_spr_ccr2_dfrat,
xu_lsu_spr_xucr0_flh2l2 => xu_lsu_spr_xucr0_flh2l2,
xu_lsu_spr_xucr0_cls => xu_lsu_spr_xucr0_cls,
xu_lsu_spr_msr_cm => xu_lsu_spr_msr_cm,
xu_lsu_msr_gs => xu_lsu_msr_gs,
xu_lsu_msr_pr => xu_lsu_msr_pr,
an_ac_flh2l2_gate => an_ac_flh2l2_gate,
xu_lsu_rf1_flush => xu_lsu_rf1_flush,
xu_lsu_ex1_flush => xu_lsu_ex1_flush,
xu_lsu_ex2_flush => xu_lsu_ex2_flush,
xu_lsu_ex3_flush => xu_lsu_ex3_flush,
xu_lsu_ex4_flush => xu_lsu_ex4_flush,
xu_lsu_ex5_flush => xu_lsu_ex5_flush,
xu_lsu_slowspr_val => xu_lsu_slowspr_val,
xu_lsu_slowspr_rw => xu_lsu_slowspr_rw,
xu_lsu_slowspr_etid => xu_lsu_slowspr_etid,
xu_lsu_slowspr_addr => xu_lsu_slowspr_addr,
xu_lsu_slowspr_data => xu_lsu_slowspr_data,
xu_lsu_slowspr_done => xu_lsu_slowspr_done,
slowspr_val_out => slowspr_val_out,
slowspr_rw_out => slowspr_rw_out,
slowspr_etid_out => slowspr_etid_out,
slowspr_addr_out => slowspr_addr_out,
slowspr_data_out => slowspr_data_out,
slowspr_done_out => slowspr_done_out,
ldq_rel_data_val_early => ldq_rel_data_val_early,
ldq_rel_stg24_val => ldq_rel_stg24_val_q,
ldq_rel_axu_val => ldq_rel_axu_val,
ldq_rel_thrd_id => ldq_rel_thrd_id,
ldq_rel_ta_gpr => ldq_rel_ta_gpr,
ldq_rel_upd_gpr => ldq_rel_upd_gpr,
ldq_rel_ci => ldq_rel_ci,
is2_l2_inv_val => is2_l2_inv_val,
ex3_wayA_tag => ex3_wayA_tag,
ex3_wayB_tag => ex3_wayB_tag,
ex3_wayC_tag => ex3_wayC_tag,
ex3_wayD_tag => ex3_wayD_tag,
ex3_wayE_tag => ex3_wayE_tag,
ex3_wayF_tag => ex3_wayF_tag,
ex3_wayG_tag => ex3_wayG_tag,
ex3_wayH_tag => ex3_wayH_tag,
ex3_way_tag_par_a => ex3_way_tag_par_a,
ex3_way_tag_par_b => ex3_way_tag_par_b,
ex3_way_tag_par_c => ex3_way_tag_par_c,
ex3_way_tag_par_d => ex3_way_tag_par_d,
ex3_way_tag_par_e => ex3_way_tag_par_e,
ex3_way_tag_par_f => ex3_way_tag_par_f,
ex3_way_tag_par_g => ex3_way_tag_par_g,
ex3_way_tag_par_h => ex3_way_tag_par_h,
ex4_way_a_dir => ex4_way_a_dir,
ex4_way_b_dir => ex4_way_b_dir,
ex4_way_c_dir => ex4_way_c_dir,
ex4_way_d_dir => ex4_way_d_dir,
ex4_way_e_dir => ex4_way_e_dir,
ex4_way_f_dir => ex4_way_f_dir,
ex4_way_g_dir => ex4_way_g_dir,
ex4_way_h_dir => ex4_way_h_dir,
ex4_dir_lru => ex4_dir_lru,
ex1_src0_vld => ex1_src0_vld,
ex1_src0_reg => ex1_src0_reg,
ex1_src1_vld => ex1_src1_vld,
ex1_src1_reg => ex1_src1_reg,
ex1_targ_vld => ex1_targ_vld,
ex1_targ_reg => ex1_targ_reg,
ex1_check_watch => ex1_check_watch,
ex1_dir_acc_val => ex1_dir_acc_val,
ex3_cache_acc => ex3_cache_acc_int,
ex1_lsu_64bit_agen => ex1_lsu_64bit_agen,
ex1_frc_align2 => ex1_frc_align2,
ex1_frc_align4 => ex1_frc_align4,
ex1_frc_align8 => ex1_frc_align8,
ex1_frc_align16 => ex1_frc_align16,
ex1_frc_align32 => ex1_frc_align32,
ex1_optype1 => ex1_optype1,
ex1_optype2 => ex1_optype2,
ex1_optype4 => ex1_optype4,
ex1_optype8 => ex1_optype8,
ex1_optype16 => ex1_optype16,
ex1_optype32 => ex1_optype32,
ex1_saxu_instr => ex1_saxu_instr,
ex1_sdp_instr => ex1_sdp_instr,
ex1_stgpr_instr => ex1_stgpr_instr,
ex1_store_instr => ex1_store_instr,
ex1_axu_op_val => ex1_axu_op_val,
ex2_no_lru_upd => ex2_no_lru_upd,
ex2_is_inval_op => ex2_is_inval_op,
ex2_lock_set => ex2_lock_set,
ex2_lock_clr => ex2_lock_clr,
ex2_ddir_acc_instr => ex2_ddir_acc_instr,
ex3_p_addr_lwr => ex3_p_addr_lwr,
ex3_req_thrd_id => ex3_req_thrd_id,
ex3_target_gpr => ex3_target_gpr,
ex3_dcbt_instr => ex3_dcbt_instr,
ex3_dcbtst_instr => ex3_dcbtst_instr,
ex3_th_fld_l2 => ex3_th_fld_l2,
ex3_dcbst_instr => ex3_dcbst_instr,
ex3_dcbf_instr => ex3_dcbf_instr,
ex3_sync_instr => ex3_sync_instr,
ex3_mtspr_trace => ex3_mtspr_trace,
ex3_byte_en => ex3_byte_en,
ex2_l_fld => ex2_l_fld,
ex3_l_fld => ex3_l_fld,
ex3_dcbi_instr => ex3_dcbi_instr,
ex3_dcbz_instr => ex3_dcbz_instr,
ex3_icbi_instr => ex3_icbi_instr,
ex3_icswx_instr => ex3_icswx_instr,
ex3_icswx_dot => ex3_icswx_dot,
ex3_icswx_epid => ex3_icswx_epid,
ex3_mbar_instr => ex3_mbar_instr,
ex3_msgsnd_instr => ex3_msgsnd_instr,
ex3_dci_instr => ex3_dci_instr,
ex3_ici_instr => ex3_ici_instr,
ex3_load_instr => ex3_load_instr,
ex2_store_instr => store_instr_ex2,
ex3_store_instr => ex3_store_instr,
ex3_axu_op_val => ex3_axu_op_val,
ex3_algebraic => ex3_algebraic,
ex3_dcbtls_instr => dcbtls_instr_ex3,
ex3_dcbtstls_instr => dcbtstls_instr_ex3,
ex3_dcblc_instr => ex3_dcblc_instr,
ex3_icblc_instr => ex3_icblc_instr,
ex3_icbt_instr => ex3_icbt_instr,
ex3_icbtls_instr => ex3_icbtls_instr,
ex3_tlbsync_instr => ex3_tlbsync_instr,
ex3_local_dcbf => ex3_local_dcbf,
ex4_drop_rel => ex4_drop_rel,
ex3_load_l1hit => ex3_load_l1hit,
ex3_rotate_sel => ex3_rotate_sel,
ex1_thrd_id => ex1_thrd_id,
ex2_ldawx_instr => ex2_ldawx_instr,
ex2_wclr_instr => ex2_wclr_instr,
ex2_wchk_val => ex2_wchk_val,
ex3_watch_en => ex3_watch_en,
ex3_data_swap => ex3_data_swap,
ex3_load_val => ex3_load_val,
ex3_blkable_touch => ex3_blkable_touch,
ex3_l2_request => ex3_l2_request,
ex3_ldq_potential_flush => ex3_ldq_potential_flush,
ex7_targ_match => ex7_targ_match,
ex8_targ_match => ex8_targ_match,
ex4_ld_entry => ex4_ld_entry,
ex3_lock_en => ex3_lock_en,
ex3_cache_en => ex3_cache_en,
ex3_cache_inh => ex3_cache_inh,
ex3_l_s_q_val => ex3_l_s_q_val,
ex3_drop_ld_req => ex3_drop_ld_req,
ex3_drop_touch => ex3_drop_touch,
ex3_stx_instr => ex3_stx_instr,
ex3_larx_instr => ex3_larx_instr,
ex3_mutex_hint => ex3_mutex_hint,
ex3_opsize => ex3_opsize,
ex4_store_hit => ex4_store_hit,
spr_xucr2_rmt => spr_xucr2_rmt,
spr_xucr0_wlck => spr_xucr0_wlck,
ex4_load_op_hit => ex4_load_op_hit,
ex5_load_op_hit => ex5_load_op_hit,
ex4_axu_op_val => ex4_axu_op_val,
spr_dvc1_act => spr_dvc1_act,
spr_dvc2_act => spr_dvc2_act,
spr_dvc1_dbg => spr_dvc1_dbg,
spr_dvc2_dbg => spr_dvc2_dbg,
lsu_xu_spr_xucr0_cul => lsu_xu_spr_xucr0_cul,
spr_xucr0_cls => spr_xucr0_cls_int,
agen_xucr0_cls => agen_xucr0_cls,
-- Directory Read interface
dir_arr_rd_is2_val => dir_arr_rd_is2_val,
dir_arr_rd_congr_cl => dir_arr_rd_congr_cl,
lsu_xu_ex3_align => lsu_xu_ex3_align,
lsu_xu_ex3_dsi => lsu_xu_ex3_dsi,
lsu_xu_ex3_inval_align_2ucode => lsu_xu_ex3_inval_align_2ucode,
ex2_stg_flush => stg_ex2_flush,
ex3_stg_flush => stg_ex3_flush,
ex4_stg_flush => stg_ex4_flush,
ex5_stg_flush => stg_ex5_flush,
lsu_xu_ex3_n_flush_req => lsu_xu_ex3_n_flush_req,
lsu_xu_ex3_dep_flush => lsu_xu_ex3_dep_flush,
-- Back-invalidate
rf1_l2_inv_val => rf1_l2_inv_val,
ex1_agen_binv_val => ex1_agen_binv_val,
ex1_l2_inv_val => ex1_l2_inv_val,
-- Update Data Array Valid
rel_upd_dcarr_val => rel_upd_dcarr_val,
lsu_xu_ex4_cr_upd => lsu_xu_ex4_cr_upd,
lsu_xu_ex5_wren => lsu_xu_ex5_wren,
lsu_xu_rel_wren => lsu_xu_rel_wren,
lsu_xu_rel_ta_gpr => lsu_xu_rel_ta_gpr,
lsu_xu_perf_events => lsu_xu_perf_events(0 to 20),
lsu_xu_need_hole => lsu_xu_need_hole,
xu_fu_ex5_reload_val => xu_fu_ex5_reload_val,
xu_fu_ex5_load_val => xu_fu_ex5_load_val,
xu_fu_ex5_load_tag => xu_fu_ex5_load_tag,
-- ICBI Interface
xu_iu_ex6_icbi_val => xu_iu_ex6_icbi_val,
xu_iu_ex6_icbi_addr => xu_iu_ex6_icbi_addr,
-- DERAT SlowSPR Regs
xu_derat_epsc_wr => xu_derat_epsc_wr,
xu_derat_eplc_wr => xu_derat_eplc_wr,
xu_derat_eplc0_epr => xu_derat_eplc0_epr,
xu_derat_eplc0_eas => xu_derat_eplc0_eas,
xu_derat_eplc0_egs => xu_derat_eplc0_egs,
xu_derat_eplc0_elpid => xu_derat_eplc0_elpid,
xu_derat_eplc0_epid => xu_derat_eplc0_epid,
xu_derat_eplc1_epr => xu_derat_eplc1_epr,
xu_derat_eplc1_eas => xu_derat_eplc1_eas,
xu_derat_eplc1_egs => xu_derat_eplc1_egs,
xu_derat_eplc1_elpid => xu_derat_eplc1_elpid,
xu_derat_eplc1_epid => xu_derat_eplc1_epid,
xu_derat_eplc2_epr => xu_derat_eplc2_epr,
xu_derat_eplc2_eas => xu_derat_eplc2_eas,
xu_derat_eplc2_egs => xu_derat_eplc2_egs,
xu_derat_eplc2_elpid => xu_derat_eplc2_elpid,
xu_derat_eplc2_epid => xu_derat_eplc2_epid,
xu_derat_eplc3_epr => xu_derat_eplc3_epr,
xu_derat_eplc3_eas => xu_derat_eplc3_eas,
xu_derat_eplc3_egs => xu_derat_eplc3_egs,
xu_derat_eplc3_elpid => xu_derat_eplc3_elpid,
xu_derat_eplc3_epid => xu_derat_eplc3_epid,
xu_derat_epsc0_epr => xu_derat_epsc0_epr,
xu_derat_epsc0_eas => xu_derat_epsc0_eas,
xu_derat_epsc0_egs => xu_derat_epsc0_egs,
xu_derat_epsc0_elpid => xu_derat_epsc0_elpid,
xu_derat_epsc0_epid => xu_derat_epsc0_epid,
xu_derat_epsc1_epr => xu_derat_epsc1_epr,
xu_derat_epsc1_eas => xu_derat_epsc1_eas,
xu_derat_epsc1_egs => xu_derat_epsc1_egs,
xu_derat_epsc1_elpid => xu_derat_epsc1_elpid,
xu_derat_epsc1_epid => xu_derat_epsc1_epid,
xu_derat_epsc2_epr => xu_derat_epsc2_epr,
xu_derat_epsc2_eas => xu_derat_epsc2_eas,
xu_derat_epsc2_egs => xu_derat_epsc2_egs,
xu_derat_epsc2_elpid => xu_derat_epsc2_elpid,
xu_derat_epsc2_epid => xu_derat_epsc2_epid,
xu_derat_epsc3_epr => xu_derat_epsc3_epr,
xu_derat_epsc3_eas => xu_derat_epsc3_eas,
xu_derat_epsc3_egs => xu_derat_epsc3_egs,
xu_derat_epsc3_elpid => xu_derat_epsc3_elpid,
xu_derat_epsc3_epid => xu_derat_epsc3_epid,
-- Debug Data
dc_fgen_dbg_data => dc_fgen_dbg_data,
dc_cntrl_dbg_data => dc_cntrl_dbg_data,
-- ACT signals
ex1_stg_act => ex1_stg_act_int,
ex2_stg_act => ex2_stg_act_int,
ex3_stg_act => ex3_stg_act_int,
ex4_stg_act => ex4_stg_act_int,
ex5_stg_act => ex5_stg_act_int,
binv1_stg_act => binv1_stg_act_int,
binv2_stg_act => binv2_stg_act_int,
binv3_stg_act => binv3_stg_act_int,
binv4_stg_act => binv4_stg_act_int,
binv5_stg_act => binv5_stg_act_int,
rel1_stg_act => rel1_stg_act_int,
rel2_stg_act => rel2_stg_act_int,
rel3_stg_act => rel3_stg_act_int,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_slp_sl_thold_0_b => func_slp_sl_thold_0_b,
func_slp_sl_force => func_slp_sl_force,
func_nsl_thold_0_b => func_nsl_thold_0_b,
func_nsl_force => func_nsl_force,
func_slp_nsl_thold_0_b => func_slp_nsl_thold_0_b,
func_slp_nsl_force => func_slp_nsl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => scan_in(0),
scan_out => scan_out(0)
);
dir16k : if (2**dc_size) = 16384 generate begin
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Directory Valids Array
-- 1) Contains an Array of Valids
-- 2) Updates Valid bits on Reloads
-- 3) Invalidates Valid bits for Flush type commands and Back Invalidates
-- 4) Outputs Valids for Congruence Class
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
l1dcdv: entity work.xuq_lsu_dir_val16(xuq_lsu_dir_val16)
GENERIC MAP(expand_type => expand_type,
dc_size => dc_size,
cl_size => cl_size)
PORT MAP (
-- Stage Act Signals
ex1_stg_act => ex1_stg_act_int,
ex2_stg_act => ex2_stg_act_int,
ex3_stg_act => ex3_stg_act_int,
ex4_stg_act => ex4_stg_act_int,
ex5_stg_act => ex5_stg_act_int,
binv1_stg_act => binv1_stg_act_int,
binv2_stg_act => binv2_stg_act_int,
binv3_stg_act => binv3_stg_act_int,
binv4_stg_act => binv4_stg_act_int,
binv5_stg_act => binv5_stg_act_int,
rel1_stg_act => rel1_stg_act_int,
rel2_stg_act => rel2_stg_act_int,
ldq_rel1_early_v => ldq_rel1_early_v,
rel1_val => rel1_val,
rel_addr_early => ldq_rel_addr_early(64-(dc_size-3) to 63-cl_size),
rel_lock_en => rel_lock_en,
rel_l1dump_cslc => rel_l1dump_cslc,
rel3_l1dump_val => rel3_l1dump_val,
rel_watch_en => rel_watch_en,
rel_thrd_id => rel_thrd_id,
rel_way_clr_a => rel_way_clr_a,
rel_way_clr_b => rel_way_clr_b,
rel_way_clr_c => rel_way_clr_c,
rel_way_clr_d => rel_way_clr_d,
rel_way_clr_e => rel_way_clr_e,
rel_way_clr_f => rel_way_clr_f,
rel_way_clr_g => rel_way_clr_g,
rel_way_clr_h => rel_way_clr_h,
ldq_rel3_early_v => ldq_rel3_early_v,
rel3_val => rel3_val,
rel_back_inval => ldq_rel_back_invalidated,
rel4_set_val => rel4_set_val,
rel4_recirc_val => recirc_rel_val_q,
rel4_ecc_err => ldq_rel_ecc_err,
rel_way_wen_a => rel_wayA_wen,
rel_way_wen_b => rel_wayB_wen,
rel_way_wen_c => rel_wayC_wen,
rel_way_wen_d => rel_wayD_wen,
rel_way_wen_e => rel_wayE_wen,
rel_way_wen_f => rel_wayF_wen,
rel_way_wen_g => rel_wayG_wen,
rel_way_wen_h => rel_wayH_wen,
rel_up_way_addr_b => rel_up_way_addr_b,
rel_dcarr_addr_en => rel_dcarr_addr_en,
xu_lsu_dci => xu_lsu_dci,
xu_lsu_spr_xucr0_clfc => xu_lsu_spr_xucr0_clfc,
spr_xucr0_dcdis => spr_xucr0_dcdis_q,
spr_xucr0_cls => spr_xucr0_cls_int,
ex1_thrd_id => ex1_thrd_id,
ex1_p_addr => ex1_p_addr,
ex2_is_inval_op => ex2_is_inval_op,
ex2_lock_set => ex2_lock_set,
ex2_lock_clr => ex2_lock_clr,
ex3_cache_en => ex3_cache_en,
ex3_cache_acc => ex3_cache_acc_int,
ex3_tag_way_perr => ex3_tag_way_perr,
ex5_load_op_hit => ex5_load_op_hit,
ex6_ld_par_err => ex6_ld_par_err,
ex2_ldawx_instr => ex2_ldawx_instr,
ex2_wclr_instr => ex2_wclr_instr,
ex2_wchk_val => ex2_wchk_val,
ex2_l_fld => ex2_l_fld,
ex2_store_instr => store_instr_ex2,
ex3_load_val => ex3_load_val,
ex3_wimge_i_bit => ex3_wimge_i_bit,
ex3_l2_request => ex3_l2_request,
ex3_ldq_potential_flush => ex3_ldq_potential_flush,
inv1_val => ex1_l2_inv_val,
ex3_way_cmp_a => ex3_way_cmp_a,
ex3_way_cmp_b => ex3_way_cmp_b,
ex3_way_cmp_c => ex3_way_cmp_c,
ex3_way_cmp_d => ex3_way_cmp_d,
ex3_way_cmp_e => ex3_way_cmp_e,
ex3_way_cmp_f => ex3_way_cmp_f,
ex3_way_cmp_g => ex3_way_cmp_g,
ex3_way_cmp_h => ex3_way_cmp_h,
ex2_stg_flush => stg_ex2_flush,
ex3_stg_flush => stg_ex3_flush,
ex4_stg_flush => stg_ex4_flush,
ex5_stg_flush => stg_ex5_flush,
pc_xu_inj_dcachedir_multihit => pc_xu_inj_dcachedir_multihit,
-- L1 Directory Contents
ex4_way_a_dir => ex4_way_a_dir,
ex4_way_b_dir => ex4_way_b_dir,
ex4_way_c_dir => ex4_way_c_dir,
ex4_way_d_dir => ex4_way_d_dir,
ex4_way_e_dir => ex4_way_e_dir,
ex4_way_f_dir => ex4_way_f_dir,
ex4_way_g_dir => ex4_way_g_dir,
ex4_way_h_dir => ex4_way_h_dir,
ex4_way_a_hit => ex4_way_a_hit,
ex4_way_b_hit => ex4_way_b_hit,
ex4_way_c_hit => ex4_way_c_hit,
ex4_way_d_hit => ex4_way_d_hit,
ex4_way_e_hit => ex4_way_e_hit,
ex4_way_f_hit => ex4_way_f_hit,
ex4_way_g_hit => ex4_way_g_hit,
ex4_way_h_hit => ex4_way_h_hit,
ex2_lockwatchSet_rel_coll => ex2_lockwatchSet_rel_coll,
ex3_wclr_all_flush => ex3_wclr_all_flush,
-- Inter-Thread Congruence Class Check
ex3_cClass_upd_way_a => ex3_cClass_upd_way_a,
ex3_cClass_upd_way_b => ex3_cClass_upd_way_b,
ex3_cClass_upd_way_c => ex3_cClass_upd_way_c,
ex3_cClass_upd_way_d => ex3_cClass_upd_way_d,
ex3_cClass_upd_way_e => ex3_cClass_upd_way_e,
ex3_cClass_upd_way_f => ex3_cClass_upd_way_f,
ex3_cClass_upd_way_g => ex3_cClass_upd_way_g,
ex3_cClass_upd_way_h => ex3_cClass_upd_way_h,
ex3_hit => ex3_l1hit,
ex3_dir_perr_det => ex3_dir_perr_det,
ex4_dir_multihit_det => ex4_dir_multihit_det,
ex4_n_lsu_ddmh_flush => ex4_n_lsu_ddmh_flush,
ex4_ldq_full_flush => ex4_ldq_full_flush,
ex4_miss => ex4_l1miss,
ex4_snd_ld_l2 => ex4_snd_ld_l2,
dcpar_err_flush => dcpar_err_flush,
pe_recov_begin => pe_recov_begin,
lsu_xu_ex5_cr_rslt => lsu_xu_ex5_cr_rslt,
rel_way_val_a => rel_way_val_a,
rel_way_val_b => rel_way_val_b,
rel_way_val_c => rel_way_val_c,
rel_way_val_d => rel_way_val_d,
rel_way_val_e => rel_way_val_e,
rel_way_val_f => rel_way_val_f,
rel_way_val_g => rel_way_val_g,
rel_way_val_h => rel_way_val_h,
rel_way_lock_a => rel_way_lock_a,
rel_way_lock_b => rel_way_lock_b,
rel_way_lock_c => rel_way_lock_c,
rel_way_lock_d => rel_way_lock_d,
rel_way_lock_e => rel_way_lock_e,
rel_way_lock_f => rel_way_lock_f,
rel_way_lock_g => rel_way_lock_g,
rel_way_lock_h => rel_way_lock_h,
dcarr_up_way_addr => dcarr_up_way_addr,
lsu_xu_perf_events => lsu_xu_perf_events(21 to 37),
lsu_xu_spr_xucr0_cslc_xuop => lsu_xu_spr_xucr0_cslc_xuop,
lsu_xu_spr_xucr0_cslc_binv => lsu_xu_spr_xucr0_cslc_binv,
dc_val_dbg_data => dc_val_dbg_data,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_slp_sl_thold_0_b => func_slp_sl_thold_0_b,
func_slp_sl_force => func_slp_sl_force,
func_nsl_thold_0_b => func_nsl_thold_0_b,
func_nsl_force => func_nsl_force,
func_slp_nsl_thold_0_b => func_slp_nsl_thold_0_b,
func_slp_nsl_force => func_slp_nsl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => scan_in(1 to 3),
scan_out(0 to 1) => scan_out(1 to 2),
scan_out(2) => dir_scan_out
);
ex4_dir_perr_det_d <= ex3_dir_perr_det;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- LRU Register Array
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
l1dcdl : entity work.xuq_lsu_dir_lru16(xuq_lsu_dir_lru16)
GENERIC MAP(expand_type => expand_type,
dc_size => dc_size,
lmq_entries => lmq_entries,
cl_size => cl_size)
PORT MAP(
-- Stage Act Signals
ex1_stg_act => ex1_stg_act_int,
ex2_stg_act => ex2_stg_act_int,
ex3_stg_act => ex3_stg_act_int,
ex4_stg_act => ex4_stg_act_int,
ex5_stg_act => ex5_stg_act_int,
rel1_stg_act => rel1_stg_act_int,
rel2_stg_act => rel2_stg_act_int,
rel3_stg_act => rel3_stg_act_int,
rel1_val => rel1_val,
rel1_classid => rel1_classid,
rel_mid_val => rel_mid_val,
rel_retry_val => ldq_rel_retry_val,
rel3_val => rel3_val,
rel_st_tag => rel_st_tag,
rel_st_tag_early => rel_st_tag_early,
rel_addr_early => ldq_rel_addr_early(64-(dc_size-3) to 63-cl_size),
rel_lock_en => rel_lock_en,
rel4_recirc_val => recirc_rel_val_q,
rel4_ecc_err => ldq_rel_ecc_err,
rel_way_val_a => rel_way_val_a,
rel_way_val_b => rel_way_val_b,
rel_way_val_c => rel_way_val_c,
rel_way_val_d => rel_way_val_d,
rel_way_val_e => rel_way_val_e,
rel_way_val_f => rel_way_val_f,
rel_way_val_g => rel_way_val_g,
rel_way_val_h => rel_way_val_h,
rel_way_lock_a => rel_way_lock_a,
rel_way_lock_b => rel_way_lock_b,
rel_way_lock_c => rel_way_lock_c,
rel_way_lock_d => rel_way_lock_d,
rel_way_lock_e => rel_way_lock_e,
rel_way_lock_f => rel_way_lock_f,
rel_way_lock_g => rel_way_lock_g,
rel_way_lock_h => rel_way_lock_h,
ex1_p_addr => ex1_p_addr,
ex2_no_lru_upd => ex2_no_lru_upd,
ex3_cache_en => ex3_cache_en,
ex4_way_a_hit => ex4_way_a_hit,
ex4_way_b_hit => ex4_way_b_hit,
ex4_way_c_hit => ex4_way_c_hit,
ex4_way_d_hit => ex4_way_d_hit,
ex4_way_e_hit => ex4_way_e_hit,
ex4_way_f_hit => ex4_way_f_hit,
ex4_way_g_hit => ex4_way_g_hit,
ex4_way_h_hit => ex4_way_h_hit,
ex3_hit => ex3_l1hit,
ex3_stg_flush => stg_ex3_flush,
ex4_stg_flush => stg_ex4_flush,
ex5_stg_flush => stg_ex5_flush,
spr_xucr2_rmt => spr_xucr2_rmt,
spr_xucr0_wlck => spr_xucr0_wlck,
spr_xucr0_dcdis => spr_xucr0_dcdis_q,
spr_xucr0_cls => spr_xucr0_cls_int,
rel_way_upd_a => rel_way_upd_a,
rel_way_upd_b => rel_way_upd_b,
rel_way_upd_c => rel_way_upd_c,
rel_way_upd_d => rel_way_upd_d,
rel_way_upd_e => rel_way_upd_e,
rel_way_upd_f => rel_way_upd_f,
rel_way_upd_g => rel_way_upd_g,
rel_way_upd_h => rel_way_upd_h,
rel_way_wen_a => rel_wayA_wen,
rel_way_wen_b => rel_wayB_wen,
rel_way_wen_c => rel_wayC_wen,
rel_way_wen_d => rel_wayD_wen,
rel_way_wen_e => rel_wayE_wen,
rel_way_wen_f => rel_wayF_wen,
rel_way_wen_g => rel_wayG_wen,
rel_way_wen_h => rel_wayH_wen,
rel_way_clr_a => rel_way_clr_a,
rel_way_clr_b => rel_way_clr_b,
rel_way_clr_c => rel_way_clr_c,
rel_way_clr_d => rel_way_clr_d,
rel_way_clr_e => rel_way_clr_e,
rel_way_clr_f => rel_way_clr_f,
rel_way_clr_g => rel_way_clr_g,
rel_way_clr_h => rel_way_clr_h,
rel_dcarr_val_upd => rel_dcarr_val_upd,
rel_up_way_addr_b => rel_up_way_addr_b,
rel_dcarr_addr_en => rel_dcarr_addr_en,
lsu_xu_spr_xucr0_clo => lsu_xu_spr_xucr0_clo,
ex4_dir_lru => ex4_dir_lru,
dc_lru_dbg_data => dc_lru_dbg_data,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_nsl_thold_0_b => func_nsl_thold_0_b,
func_nsl_force => func_nsl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => dir_scan_out,
scan_out => lru_scan_out
);
end generate dir16k;
dir32k : if (2**dc_size) = 32768 generate begin
-- Bugspray Include: xuq_lsu_dir32k
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Directory Valids Array
-- 1) Contains an Array of Valids
-- 2) Updates Valid bits on Reloads
-- 3) Invalidates Valid bits for Flush type commands and Back Invalidates
-- 4) Outputs Valids for Congruence Class
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
l1dcdv: entity work.xuq_lsu_dir_val32(xuq_lsu_dir_val32)
GENERIC MAP(expand_type => expand_type,
dc_size => dc_size,
cl_size => cl_size)
PORT MAP (
-- Stage Act Signals
ex1_stg_act => ex1_stg_act_int,
ex2_stg_act => ex2_stg_act_int,
ex3_stg_act => ex3_stg_act_int,
ex4_stg_act => ex4_stg_act_int,
ex5_stg_act => ex5_stg_act_int,
binv1_stg_act => binv1_stg_act_int,
binv2_stg_act => binv2_stg_act_int,
binv3_stg_act => binv3_stg_act_int,
binv4_stg_act => binv4_stg_act_int,
binv5_stg_act => binv5_stg_act_int,
rel1_stg_act => rel1_stg_act_int,
rel2_stg_act => rel2_stg_act_int,
ldq_rel1_early_v => ldq_rel1_early_v,
rel1_val => rel1_val,
rel_addr_early => ldq_rel_addr_early(64-(dc_size-3) to 63-cl_size),
rel_lock_en => rel_lock_en,
rel_l1dump_cslc => rel_l1dump_cslc,
rel3_l1dump_val => rel3_l1dump_val,
rel_watch_en => rel_watch_en,
rel_thrd_id => rel_thrd_id,
rel_way_clr_a => rel_way_clr_a,
rel_way_clr_b => rel_way_clr_b,
rel_way_clr_c => rel_way_clr_c,
rel_way_clr_d => rel_way_clr_d,
rel_way_clr_e => rel_way_clr_e,
rel_way_clr_f => rel_way_clr_f,
rel_way_clr_g => rel_way_clr_g,
rel_way_clr_h => rel_way_clr_h,
ldq_rel3_early_v => ldq_rel3_early_v,
rel3_val => rel3_val,
rel_back_inval => ldq_rel_back_invalidated,
rel4_set_val => rel4_set_val,
rel4_recirc_val => recirc_rel_val_q,
rel4_ecc_err => ldq_rel_ecc_err,
rel_way_wen_a => rel_wayA_wen,
rel_way_wen_b => rel_wayB_wen,
rel_way_wen_c => rel_wayC_wen,
rel_way_wen_d => rel_wayD_wen,
rel_way_wen_e => rel_wayE_wen,
rel_way_wen_f => rel_wayF_wen,
rel_way_wen_g => rel_wayG_wen,
rel_way_wen_h => rel_wayH_wen,
rel_up_way_addr_b => rel_up_way_addr_b,
rel_dcarr_addr_en => rel_dcarr_addr_en,
xu_lsu_dci => xu_lsu_dci,
xu_lsu_spr_xucr0_clfc => xu_lsu_spr_xucr0_clfc,
spr_xucr0_dcdis => spr_xucr0_dcdis_q,
spr_xucr0_cls => spr_xucr0_cls_int,
ex1_thrd_id => ex1_thrd_id,
ex1_p_addr => ex1_p_addr,
ex2_is_inval_op => ex2_is_inval_op,
ex2_lock_set => ex2_lock_set,
ex2_lock_clr => ex2_lock_clr,
ex3_cache_en => ex3_cache_en,
ex3_cache_acc => ex3_cache_acc_int,
ex3_tag_way_perr => ex3_tag_way_perr,
ex5_load_op_hit => ex5_load_op_hit,
ex6_ld_par_err => ex6_ld_par_err,
ex2_ldawx_instr => ex2_ldawx_instr,
ex2_wclr_instr => ex2_wclr_instr,
ex2_wchk_val => ex2_wchk_val,
ex2_l_fld => ex2_l_fld,
ex2_store_instr => store_instr_ex2,
ex3_load_val => ex3_load_val,
ex3_wimge_i_bit => ex3_wimge_i_bit,
ex3_l2_request => ex3_l2_request,
ex3_ldq_potential_flush => ex3_ldq_potential_flush,
inv1_val => ex1_l2_inv_val,
ex3_way_cmp_a => ex3_way_cmp_a,
ex3_way_cmp_b => ex3_way_cmp_b,
ex3_way_cmp_c => ex3_way_cmp_c,
ex3_way_cmp_d => ex3_way_cmp_d,
ex3_way_cmp_e => ex3_way_cmp_e,
ex3_way_cmp_f => ex3_way_cmp_f,
ex3_way_cmp_g => ex3_way_cmp_g,
ex3_way_cmp_h => ex3_way_cmp_h,
ex2_stg_flush => stg_ex2_flush,
ex3_stg_flush => stg_ex3_flush,
ex4_stg_flush => stg_ex4_flush,
ex5_stg_flush => stg_ex5_flush,
pc_xu_inj_dcachedir_multihit => pc_xu_inj_dcachedir_multihit,
-- L1 Directory Contents
ex4_way_a_dir => ex4_way_a_dir,
ex4_way_b_dir => ex4_way_b_dir,
ex4_way_c_dir => ex4_way_c_dir,
ex4_way_d_dir => ex4_way_d_dir,
ex4_way_e_dir => ex4_way_e_dir,
ex4_way_f_dir => ex4_way_f_dir,
ex4_way_g_dir => ex4_way_g_dir,
ex4_way_h_dir => ex4_way_h_dir,
ex4_way_a_hit => ex4_way_a_hit,
ex4_way_b_hit => ex4_way_b_hit,
ex4_way_c_hit => ex4_way_c_hit,
ex4_way_d_hit => ex4_way_d_hit,
ex4_way_e_hit => ex4_way_e_hit,
ex4_way_f_hit => ex4_way_f_hit,
ex4_way_g_hit => ex4_way_g_hit,
ex4_way_h_hit => ex4_way_h_hit,
ex2_lockwatchSet_rel_coll => ex2_lockwatchSet_rel_coll,
ex3_wclr_all_flush => ex3_wclr_all_flush,
-- Inter-Thread Congruence Class Check
ex3_cClass_upd_way_a => ex3_cClass_upd_way_a,
ex3_cClass_upd_way_b => ex3_cClass_upd_way_b,
ex3_cClass_upd_way_c => ex3_cClass_upd_way_c,
ex3_cClass_upd_way_d => ex3_cClass_upd_way_d,
ex3_cClass_upd_way_e => ex3_cClass_upd_way_e,
ex3_cClass_upd_way_f => ex3_cClass_upd_way_f,
ex3_cClass_upd_way_g => ex3_cClass_upd_way_g,
ex3_cClass_upd_way_h => ex3_cClass_upd_way_h,
ex3_hit => ex3_l1hit,
ex3_dir_perr_det => ex3_dir_perr_det,
ex4_dir_multihit_det => ex4_dir_multihit_det,
ex4_n_lsu_ddmh_flush => ex4_n_lsu_ddmh_flush,
ex4_ldq_full_flush => ex4_ldq_full_flush,
ex4_miss => ex4_l1miss,
ex4_snd_ld_l2 => ex4_snd_ld_l2,
dcpar_err_flush => dcpar_err_flush,
pe_recov_begin => pe_recov_begin,
lsu_xu_ex5_cr_rslt => lsu_xu_ex5_cr_rslt,
rel_way_val_a => rel_way_val_a,
rel_way_val_b => rel_way_val_b,
rel_way_val_c => rel_way_val_c,
rel_way_val_d => rel_way_val_d,
rel_way_val_e => rel_way_val_e,
rel_way_val_f => rel_way_val_f,
rel_way_val_g => rel_way_val_g,
rel_way_val_h => rel_way_val_h,
rel_way_lock_a => rel_way_lock_a,
rel_way_lock_b => rel_way_lock_b,
rel_way_lock_c => rel_way_lock_c,
rel_way_lock_d => rel_way_lock_d,
rel_way_lock_e => rel_way_lock_e,
rel_way_lock_f => rel_way_lock_f,
rel_way_lock_g => rel_way_lock_g,
rel_way_lock_h => rel_way_lock_h,
dcarr_up_way_addr => dcarr_up_way_addr,
lsu_xu_perf_events => lsu_xu_perf_events(21 to 37),
lsu_xu_spr_xucr0_cslc_xuop => lsu_xu_spr_xucr0_cslc_xuop,
lsu_xu_spr_xucr0_cslc_binv => lsu_xu_spr_xucr0_cslc_binv,
dc_val_dbg_data => dc_val_dbg_data,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_slp_sl_thold_0_b => func_slp_sl_thold_0_b,
func_slp_sl_force => func_slp_sl_force,
func_nsl_thold_0_b => func_nsl_thold_0_b,
func_nsl_force => func_nsl_force,
func_slp_nsl_thold_0_b => func_slp_nsl_thold_0_b,
func_slp_nsl_force => func_slp_nsl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => scan_in(1 to 3),
scan_out(0 to 1) => scan_out(1 to 2),
scan_out(2) => dir_scan_out
);
ex4_dir_perr_det_d <= ex3_dir_perr_det;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- LRU Register Array
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
l1dcdl : entity work.xuq_lsu_dir_lru32(xuq_lsu_dir_lru32)
GENERIC MAP(expand_type => expand_type,
dc_size => dc_size,
lmq_entries => lmq_entries,
cl_size => cl_size)
PORT MAP(
-- Stage Act Signals
ex1_stg_act => ex1_stg_act_int,
ex2_stg_act => ex2_stg_act_int,
ex3_stg_act => ex3_stg_act_int,
ex4_stg_act => ex4_stg_act_int,
ex5_stg_act => ex5_stg_act_int,
rel1_stg_act => rel1_stg_act_int,
rel2_stg_act => rel2_stg_act_int,
rel3_stg_act => rel3_stg_act_int,
rel1_val => rel1_val,
rel1_classid => rel1_classid,
rel_mid_val => rel_mid_val,
rel_retry_val => ldq_rel_retry_val,
rel3_val => rel3_val,
rel_st_tag => rel_st_tag,
rel_st_tag_early => rel_st_tag_early,
rel_addr_early => ldq_rel_addr_early(64-(dc_size-3) to 63-cl_size),
rel_lock_en => rel_lock_en,
rel4_recirc_val => recirc_rel_val_q,
rel4_ecc_err => ldq_rel_ecc_err,
rel_way_val_a => rel_way_val_a,
rel_way_val_b => rel_way_val_b,
rel_way_val_c => rel_way_val_c,
rel_way_val_d => rel_way_val_d,
rel_way_val_e => rel_way_val_e,
rel_way_val_f => rel_way_val_f,
rel_way_val_g => rel_way_val_g,
rel_way_val_h => rel_way_val_h,
rel_way_lock_a => rel_way_lock_a,
rel_way_lock_b => rel_way_lock_b,
rel_way_lock_c => rel_way_lock_c,
rel_way_lock_d => rel_way_lock_d,
rel_way_lock_e => rel_way_lock_e,
rel_way_lock_f => rel_way_lock_f,
rel_way_lock_g => rel_way_lock_g,
rel_way_lock_h => rel_way_lock_h,
ex1_p_addr => ex1_p_addr,
ex2_no_lru_upd => ex2_no_lru_upd,
ex3_cache_en => ex3_cache_en,
ex4_way_a_hit => ex4_way_a_hit,
ex4_way_b_hit => ex4_way_b_hit,
ex4_way_c_hit => ex4_way_c_hit,
ex4_way_d_hit => ex4_way_d_hit,
ex4_way_e_hit => ex4_way_e_hit,
ex4_way_f_hit => ex4_way_f_hit,
ex4_way_g_hit => ex4_way_g_hit,
ex4_way_h_hit => ex4_way_h_hit,
ex3_hit => ex3_l1hit,
ex3_stg_flush => stg_ex3_flush,
ex4_stg_flush => stg_ex4_flush,
ex5_stg_flush => stg_ex5_flush,
spr_xucr2_rmt => spr_xucr2_rmt,
spr_xucr0_wlck => spr_xucr0_wlck,
spr_xucr0_dcdis => spr_xucr0_dcdis_q,
spr_xucr0_cls => spr_xucr0_cls_int,
rel_way_upd_a => rel_way_upd_a,
rel_way_upd_b => rel_way_upd_b,
rel_way_upd_c => rel_way_upd_c,
rel_way_upd_d => rel_way_upd_d,
rel_way_upd_e => rel_way_upd_e,
rel_way_upd_f => rel_way_upd_f,
rel_way_upd_g => rel_way_upd_g,
rel_way_upd_h => rel_way_upd_h,
rel_way_wen_a => rel_wayA_wen,
rel_way_wen_b => rel_wayB_wen,
rel_way_wen_c => rel_wayC_wen,
rel_way_wen_d => rel_wayD_wen,
rel_way_wen_e => rel_wayE_wen,
rel_way_wen_f => rel_wayF_wen,
rel_way_wen_g => rel_wayG_wen,
rel_way_wen_h => rel_wayH_wen,
rel_way_clr_a => rel_way_clr_a,
rel_way_clr_b => rel_way_clr_b,
rel_way_clr_c => rel_way_clr_c,
rel_way_clr_d => rel_way_clr_d,
rel_way_clr_e => rel_way_clr_e,
rel_way_clr_f => rel_way_clr_f,
rel_way_clr_g => rel_way_clr_g,
rel_way_clr_h => rel_way_clr_h,
rel_dcarr_val_upd => rel_dcarr_val_upd,
rel_up_way_addr_b => rel_up_way_addr_b,
rel_dcarr_addr_en => rel_dcarr_addr_en,
lsu_xu_spr_xucr0_clo => lsu_xu_spr_xucr0_clo,
ex4_dir_lru => ex4_dir_lru,
dc_lru_dbg_data => dc_lru_dbg_data,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_nsl_thold_0_b => func_nsl_thold_0_b,
func_nsl_force => func_nsl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => dir_scan_out,
scan_out => lru_scan_out
);
end generate dir32k;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Directory Tag Array
-- 1) Contains an Array of Tags
-- 2) Updates Tag on Reload
-- 3) Contains Hit Logic
-- 4) Outputs Way Hit indicators
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
l1dcdt : entity work.xuq_lsu_dir_tag(xuq_lsu_dir_tag)
GENERIC MAP(expand_type => expand_type,
dc_size => dc_size,
cl_size => cl_size,
wayDataSize => wayDataSize,
parBits => parBits,
real_data_add => real_data_add)
PORT MAP (
ex2_stg_act => ex2_stg_act_int,
binv2_stg_act => binv2_stg_act_int,
rel_addr_early => ldq_rel_addr_early,
rel_way_upd_a => rel_way_upd_a,
rel_way_upd_b => rel_way_upd_b,
rel_way_upd_c => rel_way_upd_c,
rel_way_upd_d => rel_way_upd_d,
rel_way_upd_e => rel_way_upd_e,
rel_way_upd_f => rel_way_upd_f,
rel_way_upd_g => rel_way_upd_g,
rel_way_upd_h => rel_way_upd_h,
inv1_val => ex1_l2_inv_val,
xu_lsu_spr_xucr0_dcdis => xu_lsu_spr_xucr0_dcdis,
ex1_p_addr_01 => ex1_dir01_addr,
ex1_p_addr_23 => ex1_dir23_addr,
ex1_p_addr_45 => ex1_dir45_addr,
ex1_p_addr_67 => ex1_dir67_addr,
ex2_ddir_acc_instr => ex2_ddir_acc_instr,
-- Error Inject
pc_xu_inj_dcachedir_parity => pc_xu_inj_dcachedir_parity,
dir_arr_rd_addr_01 => dir_arr_rd_addr_01,
dir_arr_rd_addr_23 => dir_arr_rd_addr_23,
dir_arr_rd_addr_45 => dir_arr_rd_addr_45,
dir_arr_rd_addr_67 => dir_arr_rd_addr_67,
dir_arr_rd_data => dir_arr_rd_data,
dir_wr_way => dir_wr_way_int,
dir_arr_wr_addr => dir_arr_wr_addr_int,
dir_arr_wr_data => dir_arr_wr_data_int,
ex2_wayA_tag => ex2_wayA_tag,
ex2_wayB_tag => ex2_wayB_tag,
ex2_wayC_tag => ex2_wayC_tag,
ex2_wayD_tag => ex2_wayD_tag,
ex2_wayE_tag => ex2_wayE_tag,
ex2_wayF_tag => ex2_wayF_tag,
ex2_wayG_tag => ex2_wayG_tag,
ex2_wayH_tag => ex2_wayH_tag,
ex3_way_tag_par_a => ex3_way_tag_par_a,
ex3_way_tag_par_b => ex3_way_tag_par_b,
ex3_way_tag_par_c => ex3_way_tag_par_c,
ex3_way_tag_par_d => ex3_way_tag_par_d,
ex3_way_tag_par_e => ex3_way_tag_par_e,
ex3_way_tag_par_f => ex3_way_tag_par_f,
ex3_way_tag_par_g => ex3_way_tag_par_g,
ex3_way_tag_par_h => ex3_way_tag_par_h,
ex3_tag_way_perr => ex3_tag_way_perr,
vdd => vdd,
gnd => gnd,
nclk => nclk,
sg_0 => sg_0,
func_sl_thold_0_b => func_sl_thold_0_b,
func_sl_force => func_sl_force,
func_slp_sl_thold_0_b => func_slp_sl_thold_0_b,
func_slp_sl_force => func_slp_sl_force,
d_mode_dc => d_mode_dc,
delay_lclkr_dc => delay_lclkr_dc,
mpw1_dc_b => mpw1_dc_b,
mpw2_dc_b => mpw2_dc_b,
scan_in => lru_scan_out,
scan_out => tag_scan_out
);
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Debug Data
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
dir_arr_dbg_data_d <= dir_wr_enable_int & dir_wr_way_int & dir_arr_wr_addr_int & dir_arr_wr_data_int &
ex1_dir_acc_val & ex1_l2_inv_val & binv1_ex1_stg_act & recirc_rel_val_q &
lwr_p_addr_q(53 to 57);
dir_arr_dbg_data <= dir_arr_dbg_data_q;
dc_dir_dbg_data <= ldq_rel1_val_stg_q & ldq_rel_mid_stg_q & ldq_rel3_val_stg_q & ldq_rel_data_stg_q &
ldq_rel_set_stg_q & rel24_addr_q;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Outputs
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
xu_derat_ex1_epn_arr <= ex1_agen_addr(64-(2**regmode) to 51);
xu_derat_ex1_epn_nonarr <= ex1_eff_addr(64-(2**regmode) to 51);
ex3_dcbtls_instr <= dcbtls_instr_ex3;
ex3_dcbtstls_instr <= dcbtstls_instr_ex3;
ex3_stg_flush <= stg_ex3_flush;
ex4_stg_flush <= stg_ex4_flush;
lsu_xu_ex3_ddir_par_err <= ex3_dir_perr_det;
lsu_xu_ex4_ldq_full_flush <= ex4_ldq_full_flush;
ex4_dir_perr_det <= ex4_dir_perr_det_q;
spr_xucr0_cls <= spr_xucr0_cls_int;
ldq_recirc_rel_val <= recirc_rel_val_q;
xu_derat_rf1_binv_val <= rf1_l2_inv_val;
dir_arr_wr_addr <= dir_arr_wr_addr_int;
dir_arr_wr_data <= dir_arr_wr_data_int;
dir_wr_way <= dir_wr_way_int;
ex2_p_addr_lwr <= ex2_p_addr_lwr_int(52 to 57);
ex3_cache_acc <= ex3_cache_acc_int;
ex1_stg_act <= ex1_stg_act_int;
ex2_stg_act <= ex2_stg_act_int;
ex3_stg_act <= ex3_stg_act_int;
ex4_stg_act <= ex4_stg_act_int;
binv1_stg_act <= binv1_stg_act_int;
binv2_stg_act <= binv2_stg_act_int;
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-- Registers
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
lwr_p_addr_reg: tri_rlmreg_p
generic map (width => 12, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => binv1_ex1_stg_act,
forcee => func_slp_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_slp_sl_thold_0_b,
sg => sg_0,
scin => siv(lwr_p_addr_offset to lwr_p_addr_offset + lwr_p_addr_d'length-1),
scout => sov(lwr_p_addr_offset to lwr_p_addr_offset + lwr_p_addr_d'length-1),
din => lwr_p_addr_d,
dout => lwr_p_addr_q);
ldq_rel1_val_stg_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_sl_thold_0_b,
sg => sg_0,
scin => siv(ldq_rel1_val_stg_offset),
scout => sov(ldq_rel1_val_stg_offset),
din => ldq_rel1_val_stg_d,
dout => ldq_rel1_val_stg_q);
ldq_rel_mid_stg_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_sl_thold_0_b,
sg => sg_0,
scin => siv(ldq_rel_mid_stg_offset),
scout => sov(ldq_rel_mid_stg_offset),
din => ldq_rel_mid_stg_d,
dout => ldq_rel_mid_stg_q);
ldq_rel3_val_stg_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_sl_thold_0_b,
sg => sg_0,
scin => siv(ldq_rel3_val_stg_offset),
scout => sov(ldq_rel3_val_stg_offset),
din => ldq_rel3_val_stg_d,
dout => ldq_rel3_val_stg_q);
ldq_rel_data_stg_reg: tri_regk
generic map (width => 1, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din(0) => ldq_rel_data_stg_d,
dout(0) => ldq_rel_data_stg_q);
ldq_rel_set_stg_reg: tri_regk
generic map (width => 1, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din(0) => ldq_rel_set_stg_d,
dout(0) => ldq_rel_set_stg_q);
rel24_addr_reg: tri_regk
generic map (width => real_data_add-11, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => rel1_stg_act_int,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din => rel24_addr_d,
dout => rel24_addr_q);
spr_xucr0_dcdis_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_sl_thold_0_b,
sg => sg_0,
scin => siv(spr_xucr0_dcdis_offset),
scout => sov(spr_xucr0_dcdis_offset),
din => spr_xucr0_dcdis_d,
dout => spr_xucr0_dcdis_q);
ex2_frc_align_reg: tri_regk
generic map (width => 5, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => ex1_stg_act_int,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din => ex2_frc_align_d,
dout => ex2_frc_align_q);
ldq_rel_stg24_val_reg: tri_regk
generic map (width => 1, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din(0) => ldq_rel_stg24_val_d,
dout(0) => ldq_rel_stg24_val_q);
ex4_dir_perr_det_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_slp_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_slp_sl_thold_0_b,
sg => sg_0,
scin => siv(ex4_dir_perr_det_offset),
scout => sov(ex4_dir_perr_det_offset),
din => ex4_dir_perr_det_d,
dout => ex4_dir_perr_det_q);
recirc_rel_val_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_sl_thold_0_b,
sg => sg_0,
scin => siv(recirc_rel_val_offset),
scout => sov(recirc_rel_val_offset),
din => recirc_rel_val_d,
dout => recirc_rel_val_q);
trace_bus_enable_reg: tri_rlmlatch_p
generic map (init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => tiup,
forcee => func_slp_sl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_slp_sl_thold_0_b,
sg => sg_0,
scin => siv(trace_bus_enable_offset),
scout => sov(trace_bus_enable_offset),
din => pc_xu_trace_bus_enable,
dout => trace_bus_enable_q);
dir_arr_dbg_data_reg: tri_regk
generic map (width => 61, init => 0, expand_type => expand_type, needs_sreset => 1)
port map (vd => vdd,
gd => gnd,
nclk => nclk,
act => trace_bus_enable_q,
forcee => func_nsl_force,
d_mode => d_mode_dc,
delay_lclkr => delay_lclkr_dc,
mpw1_b => mpw1_dc_b,
mpw2_b => mpw2_dc_b,
thold_b => func_nsl_thold_0_b,
din => dir_arr_dbg_data_d,
dout => dir_arr_dbg_data_q);
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
siv(0 to scan_right) <= sov(1 to scan_right) & tag_scan_out;
scan_out(3) <= sov(0);
end xuq_lsu_dir;