1836 lines
91 KiB
Verilog
1836 lines
91 KiB
Verilog
// © 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.
|
|
|
|
//********************************************************************
|
|
//*
|
|
//* TITLE: debug event mux
|
|
//*
|
|
//* NAME: mmq_dbg.v
|
|
//*
|
|
//*********************************************************************
|
|
|
|
`timescale 1 ns / 1 ns
|
|
|
|
`include "tri_a2o.vh"
|
|
`include "mmu_a2o.vh"
|
|
|
|
|
|
module mmq_dbg(
|
|
|
|
inout vdd,
|
|
inout gnd,
|
|
input clk,
|
|
input rst,
|
|
|
|
input pc_func_slp_sl_thold_2,
|
|
input pc_func_slp_nsl_thold_2,
|
|
input pc_sg_2,
|
|
input pc_fce_2,
|
|
input tc_ac_ccflush_dc,
|
|
|
|
input lcb_clkoff_dc_b,
|
|
input lcb_act_dis_dc,
|
|
input lcb_d_mode_dc,
|
|
input lcb_delay_lclkr_dc,
|
|
input lcb_mpw1_dc_b,
|
|
input lcb_mpw2_dc_b,
|
|
|
|
(* pin_data="PIN_FUNCTION=/SCAN_IN/" *)
|
|
input scan_in,
|
|
(* pin_data="PIN_FUNCTION=/SCAN_OUT/" *)
|
|
output scan_out,
|
|
|
|
input [8:11] mmucr2,
|
|
|
|
input pc_mm_trace_bus_enable,
|
|
input [0:10] pc_mm_debug_mux1_ctrls,
|
|
|
|
input [0:`DEBUG_TRACE_WIDTH-1] debug_bus_in,
|
|
output [0:`DEBUG_TRACE_WIDTH-1] debug_bus_out,
|
|
|
|
// Instruction Trace (HTM) Control Signals:
|
|
// 0 - ac_an_coretrace_first_valid
|
|
// 1 - ac_an_coretrace_valid
|
|
// 2:3 - ac_an_coretrace_type[0:1]
|
|
input [0:3] coretrace_ctrls_in,
|
|
output [0:3] coretrace_ctrls_out,
|
|
|
|
//--------- spr debug signals
|
|
input spr_dbg_match_64b, // these match sigs are spr_int phase
|
|
input spr_dbg_match_any_mmu,
|
|
input spr_dbg_match_any_mas,
|
|
input spr_dbg_match_pid,
|
|
input spr_dbg_match_lpidr,
|
|
input spr_dbg_match_mmucr0,
|
|
input spr_dbg_match_mmucr1,
|
|
input spr_dbg_match_mmucr2,
|
|
input spr_dbg_match_mmucr3,
|
|
|
|
input spr_dbg_match_mmucsr0,
|
|
input spr_dbg_match_mmucfg,
|
|
input spr_dbg_match_tlb0cfg,
|
|
input spr_dbg_match_tlb0ps,
|
|
input spr_dbg_match_lratcfg,
|
|
input spr_dbg_match_lratps,
|
|
input spr_dbg_match_eptcfg,
|
|
input spr_dbg_match_lper,
|
|
input spr_dbg_match_lperu,
|
|
|
|
input spr_dbg_match_mas0,
|
|
input spr_dbg_match_mas1,
|
|
input spr_dbg_match_mas2,
|
|
input spr_dbg_match_mas2u,
|
|
input spr_dbg_match_mas3,
|
|
input spr_dbg_match_mas4,
|
|
input spr_dbg_match_mas5,
|
|
input spr_dbg_match_mas6,
|
|
input spr_dbg_match_mas7,
|
|
input spr_dbg_match_mas8,
|
|
input spr_dbg_match_mas01_64b,
|
|
input spr_dbg_match_mas56_64b,
|
|
input spr_dbg_match_mas73_64b,
|
|
input spr_dbg_match_mas81_64b,
|
|
|
|
input spr_dbg_slowspr_val_int, // spr_int phase
|
|
input spr_dbg_slowspr_rw_int,
|
|
input [0:1] spr_dbg_slowspr_etid_int,
|
|
input [0:9] spr_dbg_slowspr_addr_int,
|
|
input spr_dbg_slowspr_val_out, // spr_out phase
|
|
input spr_dbg_slowspr_done_out,
|
|
input [0:63] spr_dbg_slowspr_data_out,
|
|
|
|
//--------- mmq_inval debug signals
|
|
input [0:4] inval_dbg_seq_q,
|
|
input inval_dbg_seq_idle,
|
|
input inval_dbg_seq_snoop_inprogress,
|
|
input inval_dbg_seq_snoop_done,
|
|
input inval_dbg_seq_local_done,
|
|
input inval_dbg_seq_tlb0fi_done,
|
|
input inval_dbg_seq_tlbwe_snoop_done,
|
|
input inval_dbg_ex6_valid,
|
|
input [0:1] inval_dbg_ex6_thdid, // encoded
|
|
input [0:2] inval_dbg_ex6_ttype, // encoded
|
|
input inval_dbg_snoop_forme,
|
|
input inval_dbg_snoop_local_reject,
|
|
input [2:8] inval_dbg_an_ac_back_inv_q, // 2=valid b, 3=target b, 4=L, 5=GS, 6=IND, 7=local, 8=reject
|
|
input [0:7] inval_dbg_an_ac_back_inv_lpar_id_q,
|
|
input [22:63] inval_dbg_an_ac_back_inv_addr_q,
|
|
input [0:2] inval_dbg_snoop_valid_q,
|
|
input [0:2] inval_dbg_snoop_ack_q,
|
|
input [0:34] inval_dbg_snoop_attr_q,
|
|
input [18:19] inval_dbg_snoop_attr_tlb_spec_q,
|
|
input [17:51] inval_dbg_snoop_vpn_q,
|
|
input [0:1] inval_dbg_lsu_tokens_q,
|
|
|
|
//--------- tlb_req debug signals
|
|
input tlb_req_dbg_ierat_iu5_valid_q,
|
|
input [0:1] tlb_req_dbg_ierat_iu5_thdid,
|
|
input [0:3] tlb_req_dbg_ierat_iu5_state_q,
|
|
input [0:1] tlb_req_dbg_ierat_inptr_q,
|
|
input [0:1] tlb_req_dbg_ierat_outptr_q,
|
|
input [0:3] tlb_req_dbg_ierat_req_valid_q,
|
|
input [0:3] tlb_req_dbg_ierat_req_nonspec_q,
|
|
input [0:7] tlb_req_dbg_ierat_req_thdid, // encoded
|
|
input [0:3] tlb_req_dbg_ierat_req_dup_q,
|
|
input tlb_req_dbg_derat_ex6_valid_q,
|
|
input [0:1] tlb_req_dbg_derat_ex6_thdid, // encoded
|
|
input [0:3] tlb_req_dbg_derat_ex6_state_q,
|
|
input [0:1] tlb_req_dbg_derat_inptr_q,
|
|
input [0:1] tlb_req_dbg_derat_outptr_q,
|
|
input [0:3] tlb_req_dbg_derat_req_valid_q,
|
|
input [0:7] tlb_req_dbg_derat_req_thdid, // encoded
|
|
input [0:7] tlb_req_dbg_derat_req_ttype_q,
|
|
input [0:3] tlb_req_dbg_derat_req_dup_q,
|
|
|
|
//--------- tlb_ctl debug signals
|
|
input [0:5] tlb_ctl_dbg_seq_q, // tlb_seq_q
|
|
input tlb_ctl_dbg_seq_idle,
|
|
input tlb_ctl_dbg_seq_any_done_sig,
|
|
input tlb_ctl_dbg_seq_abort,
|
|
input tlb_ctl_dbg_any_tlb_req_sig,
|
|
input tlb_ctl_dbg_any_req_taken_sig,
|
|
input tlb_ctl_dbg_tag0_valid,
|
|
input [0:1] tlb_ctl_dbg_tag0_thdid, // encoded
|
|
input [0:2] tlb_ctl_dbg_tag0_type, // encoded
|
|
input [0:1] tlb_ctl_dbg_tag0_wq, // encoded
|
|
input tlb_ctl_dbg_tag0_gs,
|
|
input tlb_ctl_dbg_tag0_pr,
|
|
input tlb_ctl_dbg_tag0_atsel,
|
|
input [0:3] tlb_ctl_dbg_tag5_tlb_write_q,
|
|
input [0:3] tlb_ctl_dbg_resv_valid,
|
|
input [0:3] tlb_ctl_dbg_set_resv,
|
|
input [0:3] tlb_ctl_dbg_resv_match_vec_q,
|
|
input tlb_ctl_dbg_any_tag_flush_sig,
|
|
input tlb_ctl_dbg_resv0_tag0_lpid_match,
|
|
input tlb_ctl_dbg_resv0_tag0_pid_match,
|
|
input tlb_ctl_dbg_resv0_tag0_as_snoop_match,
|
|
input tlb_ctl_dbg_resv0_tag0_gs_snoop_match,
|
|
input tlb_ctl_dbg_resv0_tag0_as_tlbwe_match,
|
|
input tlb_ctl_dbg_resv0_tag0_gs_tlbwe_match,
|
|
input tlb_ctl_dbg_resv0_tag0_ind_match,
|
|
input tlb_ctl_dbg_resv0_tag0_epn_loc_match,
|
|
input tlb_ctl_dbg_resv0_tag0_epn_glob_match,
|
|
input tlb_ctl_dbg_resv0_tag0_class_match,
|
|
input tlb_ctl_dbg_resv1_tag0_lpid_match,
|
|
input tlb_ctl_dbg_resv1_tag0_pid_match,
|
|
input tlb_ctl_dbg_resv1_tag0_as_snoop_match,
|
|
input tlb_ctl_dbg_resv1_tag0_gs_snoop_match,
|
|
input tlb_ctl_dbg_resv1_tag0_as_tlbwe_match,
|
|
input tlb_ctl_dbg_resv1_tag0_gs_tlbwe_match,
|
|
input tlb_ctl_dbg_resv1_tag0_ind_match,
|
|
input tlb_ctl_dbg_resv1_tag0_epn_loc_match,
|
|
input tlb_ctl_dbg_resv1_tag0_epn_glob_match,
|
|
input tlb_ctl_dbg_resv1_tag0_class_match,
|
|
input tlb_ctl_dbg_resv2_tag0_lpid_match,
|
|
input tlb_ctl_dbg_resv2_tag0_pid_match,
|
|
input tlb_ctl_dbg_resv2_tag0_as_snoop_match,
|
|
input tlb_ctl_dbg_resv2_tag0_gs_snoop_match,
|
|
input tlb_ctl_dbg_resv2_tag0_as_tlbwe_match,
|
|
input tlb_ctl_dbg_resv2_tag0_gs_tlbwe_match,
|
|
input tlb_ctl_dbg_resv2_tag0_ind_match,
|
|
input tlb_ctl_dbg_resv2_tag0_epn_loc_match,
|
|
input tlb_ctl_dbg_resv2_tag0_epn_glob_match,
|
|
input tlb_ctl_dbg_resv2_tag0_class_match,
|
|
input tlb_ctl_dbg_resv3_tag0_lpid_match,
|
|
input tlb_ctl_dbg_resv3_tag0_pid_match,
|
|
input tlb_ctl_dbg_resv3_tag0_as_snoop_match,
|
|
input tlb_ctl_dbg_resv3_tag0_gs_snoop_match,
|
|
input tlb_ctl_dbg_resv3_tag0_as_tlbwe_match,
|
|
input tlb_ctl_dbg_resv3_tag0_gs_tlbwe_match,
|
|
input tlb_ctl_dbg_resv3_tag0_ind_match,
|
|
input tlb_ctl_dbg_resv3_tag0_epn_loc_match,
|
|
input tlb_ctl_dbg_resv3_tag0_epn_glob_match,
|
|
input tlb_ctl_dbg_resv3_tag0_class_match,
|
|
input [0:3] tlb_ctl_dbg_clr_resv_q, // tag5
|
|
input [0:3] tlb_ctl_dbg_clr_resv_terms, // tag5, threadwise condensed into to tlbivax, tlbilx, tlbwe, ptereload
|
|
|
|
//--------- tlb_cmp debug signals
|
|
input [0:`TLB_TAG_WIDTH-1] tlb_cmp_dbg_tag4,
|
|
input [0:`TLB_WAYS] tlb_cmp_dbg_tag4_wayhit,
|
|
input [0:`TLB_ADDR_WIDTH-1] tlb_cmp_dbg_addr4,
|
|
input [0:`TLB_WAY_WIDTH-1] tlb_cmp_dbg_tag4_way,
|
|
input [0:4] tlb_cmp_dbg_tag4_parerr,
|
|
input [0:`LRU_WIDTH-5] tlb_cmp_dbg_tag4_lru_dataout_q,
|
|
input [0:`TLB_WAY_WIDTH-1] tlb_cmp_dbg_tag5_tlb_datain_q,
|
|
input [0:`LRU_WIDTH-5] tlb_cmp_dbg_tag5_lru_datain_q,
|
|
input tlb_cmp_dbg_tag5_lru_write,
|
|
input tlb_cmp_dbg_tag5_any_exception,
|
|
input [0:3] tlb_cmp_dbg_tag5_except_type_q,
|
|
input [0:1] tlb_cmp_dbg_tag5_except_thdid_q,
|
|
input [0:9] tlb_cmp_dbg_tag5_erat_rel_val,
|
|
input [0:131] tlb_cmp_dbg_tag5_erat_rel_data,
|
|
input [0:19] tlb_cmp_dbg_erat_dup_q,
|
|
|
|
input [0:8] tlb_cmp_dbg_addr_enable,
|
|
input tlb_cmp_dbg_pgsize_enable,
|
|
input tlb_cmp_dbg_class_enable,
|
|
input [0:1] tlb_cmp_dbg_extclass_enable,
|
|
input [0:1] tlb_cmp_dbg_state_enable,
|
|
input tlb_cmp_dbg_thdid_enable,
|
|
input tlb_cmp_dbg_pid_enable,
|
|
input tlb_cmp_dbg_lpid_enable,
|
|
input tlb_cmp_dbg_ind_enable,
|
|
input tlb_cmp_dbg_iprot_enable,
|
|
input tlb_cmp_dbg_way0_entry_v, // these are tag3 versions
|
|
input tlb_cmp_dbg_way0_addr_match,
|
|
input tlb_cmp_dbg_way0_pgsize_match,
|
|
input tlb_cmp_dbg_way0_class_match,
|
|
input tlb_cmp_dbg_way0_extclass_match,
|
|
input tlb_cmp_dbg_way0_state_match,
|
|
input tlb_cmp_dbg_way0_thdid_match,
|
|
input tlb_cmp_dbg_way0_pid_match,
|
|
input tlb_cmp_dbg_way0_lpid_match,
|
|
input tlb_cmp_dbg_way0_ind_match,
|
|
input tlb_cmp_dbg_way0_iprot_match,
|
|
input tlb_cmp_dbg_way1_entry_v,
|
|
input tlb_cmp_dbg_way1_addr_match,
|
|
input tlb_cmp_dbg_way1_pgsize_match,
|
|
input tlb_cmp_dbg_way1_class_match,
|
|
input tlb_cmp_dbg_way1_extclass_match,
|
|
input tlb_cmp_dbg_way1_state_match,
|
|
input tlb_cmp_dbg_way1_thdid_match,
|
|
input tlb_cmp_dbg_way1_pid_match,
|
|
input tlb_cmp_dbg_way1_lpid_match,
|
|
input tlb_cmp_dbg_way1_ind_match,
|
|
input tlb_cmp_dbg_way1_iprot_match,
|
|
input tlb_cmp_dbg_way2_entry_v,
|
|
input tlb_cmp_dbg_way2_addr_match,
|
|
input tlb_cmp_dbg_way2_pgsize_match,
|
|
input tlb_cmp_dbg_way2_class_match,
|
|
input tlb_cmp_dbg_way2_extclass_match,
|
|
input tlb_cmp_dbg_way2_state_match,
|
|
input tlb_cmp_dbg_way2_thdid_match,
|
|
input tlb_cmp_dbg_way2_pid_match,
|
|
input tlb_cmp_dbg_way2_lpid_match,
|
|
input tlb_cmp_dbg_way2_ind_match,
|
|
input tlb_cmp_dbg_way2_iprot_match,
|
|
input tlb_cmp_dbg_way3_entry_v,
|
|
input tlb_cmp_dbg_way3_addr_match,
|
|
input tlb_cmp_dbg_way3_pgsize_match,
|
|
input tlb_cmp_dbg_way3_class_match,
|
|
input tlb_cmp_dbg_way3_extclass_match,
|
|
input tlb_cmp_dbg_way3_state_match,
|
|
input tlb_cmp_dbg_way3_thdid_match,
|
|
input tlb_cmp_dbg_way3_pid_match,
|
|
input tlb_cmp_dbg_way3_lpid_match,
|
|
input tlb_cmp_dbg_way3_ind_match,
|
|
input tlb_cmp_dbg_way3_iprot_match,
|
|
|
|
//--------- lrat debug signals
|
|
input lrat_dbg_tag1_addr_enable,
|
|
input [0:7] lrat_dbg_tag2_matchline_q,
|
|
input lrat_dbg_entry0_addr_match, // tag2
|
|
input lrat_dbg_entry0_lpid_match,
|
|
input lrat_dbg_entry0_entry_v,
|
|
input lrat_dbg_entry0_entry_x,
|
|
input [0:3] lrat_dbg_entry0_size,
|
|
input lrat_dbg_entry1_addr_match, // tag2
|
|
input lrat_dbg_entry1_lpid_match,
|
|
input lrat_dbg_entry1_entry_v,
|
|
input lrat_dbg_entry1_entry_x,
|
|
input [0:3] lrat_dbg_entry1_size,
|
|
input lrat_dbg_entry2_addr_match, // tag2
|
|
input lrat_dbg_entry2_lpid_match,
|
|
input lrat_dbg_entry2_entry_v,
|
|
input lrat_dbg_entry2_entry_x,
|
|
input [0:3] lrat_dbg_entry2_size,
|
|
input lrat_dbg_entry3_addr_match, // tag2
|
|
input lrat_dbg_entry3_lpid_match,
|
|
input lrat_dbg_entry3_entry_v,
|
|
input lrat_dbg_entry3_entry_x,
|
|
input [0:3] lrat_dbg_entry3_size,
|
|
input lrat_dbg_entry4_addr_match, // tag2
|
|
input lrat_dbg_entry4_lpid_match,
|
|
input lrat_dbg_entry4_entry_v,
|
|
input lrat_dbg_entry4_entry_x,
|
|
input [0:3] lrat_dbg_entry4_size,
|
|
input lrat_dbg_entry5_addr_match, // tag2
|
|
input lrat_dbg_entry5_lpid_match,
|
|
input lrat_dbg_entry5_entry_v,
|
|
input lrat_dbg_entry5_entry_x,
|
|
input [0:3] lrat_dbg_entry5_size,
|
|
input lrat_dbg_entry6_addr_match, // tag2
|
|
input lrat_dbg_entry6_lpid_match,
|
|
input lrat_dbg_entry6_entry_v,
|
|
input lrat_dbg_entry6_entry_x,
|
|
input [0:3] lrat_dbg_entry6_size,
|
|
input lrat_dbg_entry7_addr_match, // tag2
|
|
input lrat_dbg_entry7_lpid_match,
|
|
input lrat_dbg_entry7_entry_v,
|
|
input lrat_dbg_entry7_entry_x,
|
|
input [0:3] lrat_dbg_entry7_size,
|
|
|
|
//--------- mmq_htw debug signals
|
|
input htw_dbg_seq_idle,
|
|
input htw_dbg_pte0_seq_idle,
|
|
input htw_dbg_pte1_seq_idle,
|
|
input [0:1] htw_dbg_seq_q,
|
|
input [0:1] htw_dbg_inptr_q,
|
|
input [0:2] htw_dbg_pte0_seq_q,
|
|
input [0:2] htw_dbg_pte1_seq_q,
|
|
input htw_dbg_ptereload_ptr_q,
|
|
input [0:1] htw_dbg_lsuptr_q,
|
|
input [0:3] htw_dbg_req_valid_q,
|
|
input [0:3] htw_dbg_resv_valid_vec,
|
|
input [0:3] htw_dbg_tag4_clr_resv_q,
|
|
input [0:3] htw_dbg_tag4_clr_resv_terms, // tag4, threadwise condensed into to tlbivax, tlbilx, tlbwe, ptereload
|
|
input [0:1] htw_dbg_pte0_score_ptr_q,
|
|
input [58:60] htw_dbg_pte0_score_cl_offset_q,
|
|
input [0:2] htw_dbg_pte0_score_error_q,
|
|
input [0:3] htw_dbg_pte0_score_qwbeat_q, // 4 beats of data per CL
|
|
input htw_dbg_pte0_score_pending_q,
|
|
input htw_dbg_pte0_score_ibit_q,
|
|
input htw_dbg_pte0_score_dataval_q,
|
|
input htw_dbg_pte0_reld_for_me_tm1,
|
|
input [0:1] htw_dbg_pte1_score_ptr_q,
|
|
input [58:60] htw_dbg_pte1_score_cl_offset_q,
|
|
input [0:2] htw_dbg_pte1_score_error_q,
|
|
input [0:3] htw_dbg_pte1_score_qwbeat_q, // 4 beats of data per CL
|
|
input htw_dbg_pte1_score_pending_q,
|
|
input htw_dbg_pte1_score_ibit_q,
|
|
input htw_dbg_pte1_score_dataval_q,
|
|
input htw_dbg_pte1_reld_for_me_tm1,
|
|
|
|
//--------- lsu debug signals
|
|
input [0:`THREADS-1] mm_xu_lsu_req,
|
|
// 0=tlbivax_op, 1=tlbi_complete, 2=mmu read with core_tag=01100, 3=mmu read with core_tag=01101
|
|
input [0:1] mm_xu_lsu_ttype,
|
|
input [0:4] mm_xu_lsu_wimge,
|
|
input [0:3] mm_xu_lsu_u,
|
|
input [22:63] mm_xu_lsu_addr,
|
|
input [0:7] mm_xu_lsu_lpid, // tlbivax data
|
|
input mm_xu_lsu_gs, // tlbivax data
|
|
input mm_xu_lsu_ind, // tlbivax data
|
|
input mm_xu_lsu_lbit, // -- tlbivax data, "L" bit, for large vs. small
|
|
input xu_mm_lsu_token,
|
|
|
|
//--------- misc top level debug signals
|
|
input tlb_mas_tlbre,
|
|
input tlb_mas_tlbsx_hit,
|
|
input tlb_mas_tlbsx_miss,
|
|
input tlb_mas_dtlb_error,
|
|
input tlb_mas_itlb_error,
|
|
input [0:`THDID_WIDTH-1] tlb_mas_thdid,
|
|
input lrat_mas_tlbre,
|
|
input lrat_mas_tlbsx_hit,
|
|
input lrat_mas_tlbsx_miss,
|
|
input [0:`THDID_WIDTH-1] lrat_mas_thdid,
|
|
input [0:3] lrat_tag3_hit_status, // val,hit,multihit,inval_pgsize
|
|
input [0:2] lrat_tag3_hit_entry,
|
|
|
|
input tlb_seq_ierat_req,
|
|
input tlb_seq_derat_req,
|
|
input [0:`THREADS-1] mm_xu_hold_req,
|
|
input [0:`THREADS-1] xu_mm_hold_ack,
|
|
input [0:`THREADS-1] mm_xu_hold_done,
|
|
input mmucsr0_tlb0fi,
|
|
input tlbwe_back_inv_valid,
|
|
input [18:19] tlbwe_back_inv_attr,
|
|
input xu_mm_lmq_stq_empty,
|
|
input iu_mm_lmq_empty,
|
|
input [0:`THREADS-1] mm_xu_eratmiss_done,
|
|
input [0:`THREADS-1] mm_iu_barrier_done,
|
|
input [0:`THREADS-1] mm_xu_ex3_flush_req,
|
|
input [0:`THREADS-1] mm_xu_illeg_instr,
|
|
input [0:3] lrat_tag4_hit_status,
|
|
input [0:2] lrat_tag4_hit_entry,
|
|
input [0:`THREADS-1] mm_xu_cr0_eq, // for record forms
|
|
input [0:`THREADS-1] mm_xu_cr0_eq_valid, // for record forms
|
|
input tlb_htw_req_valid,
|
|
input htw_lsu_req_valid,
|
|
input [0:1] htw_dbg_lsu_thdid,
|
|
input [0:1] htw_lsu_ttype,
|
|
input [22:63] htw_lsu_addr,
|
|
input ptereload_req_taken,
|
|
|
|
input [0:63] ptereload_req_pte // pte entry
|
|
|
|
);
|
|
|
|
|
|
parameter DEBUG_LATCH_WIDTH = 372;
|
|
parameter TRIGGER_LATCH_WIDTH = 48;
|
|
|
|
wire pc_mm_trace_bus_enable_q; // input=>pc_mm_trace_bus_enable, sleep=>Y, needs_sreset=>0
|
|
//========================================================================================
|
|
wire [0:10] pc_mm_debug_mux1_ctrls_q; // input=>pc_mm_debug_mux1_ctrls, act=>pc_mm_trace_bus_enable_q, sleep=>Y, needs_sreset=>0
|
|
wire [0:10] pc_mm_debug_mux1_ctrls_loc_d;
|
|
wire [0:10] pc_mm_debug_mux1_ctrls_loc_q;
|
|
wire [0:`DEBUG_TRIGGER_WIDTH-1] trigger_data_out_d;
|
|
wire [0:`DEBUG_TRIGGER_WIDTH-1] trigger_data_out_q;
|
|
wire [0:`DEBUG_TRACE_WIDTH-1] trace_data_out_d;
|
|
wire [0:`DEBUG_TRACE_WIDTH-1] trace_data_out_q;
|
|
wire [0:7] trace_data_out_int_q;
|
|
wire [0:DEBUG_LATCH_WIDTH-1] debug_d; // act=>pc_mm_trace_bus_enable_q, sleep=>Y, needs_sreset=>0, scan=>N
|
|
wire [0:DEBUG_LATCH_WIDTH-1] debug_q;
|
|
wire [0:TRIGGER_LATCH_WIDTH-1] trigger_d; // act=>pc_mm_trace_bus_enable_q, sleep=>Y, needs_sreset=>0, scan=>N
|
|
wire [0:TRIGGER_LATCH_WIDTH-1] trigger_q;
|
|
wire [0:`DEBUG_TRACE_WIDTH-1] debug_bus_in_q;
|
|
wire [0:`DEBUG_TRIGGER_WIDTH-1] trace_triggers_in_q;
|
|
wire [0:3] coretrace_ctrls_in_q;
|
|
wire [0:3] coretrace_ctrls_out_d, coretrace_ctrls_out_q;
|
|
|
|
parameter trace_bus_enable_offset = 0;
|
|
parameter debug_mux1_ctrls_offset = trace_bus_enable_offset + 1;
|
|
parameter debug_mux1_ctrls_loc_offset = debug_mux1_ctrls_offset + 11;
|
|
parameter trigger_data_out_offset = debug_mux1_ctrls_loc_offset + 11;
|
|
parameter trace_data_out_offset = trigger_data_out_offset + `DEBUG_TRIGGER_WIDTH;
|
|
parameter trace_data_out_int_offset = trace_data_out_offset + `DEBUG_TRACE_WIDTH;
|
|
parameter coretrace_ctrls_out_offset = trace_data_out_int_offset + 8;
|
|
parameter scan_right = coretrace_ctrls_out_offset + 4 - 1;
|
|
//========================================================================================
|
|
// non-scan latches
|
|
|
|
wire [0:87] dbg_group0;
|
|
wire [0:87] dbg_group1;
|
|
wire [0:87] dbg_group2;
|
|
wire [0:87] dbg_group3;
|
|
wire [0:87] dbg_group4;
|
|
wire [0:87] dbg_group5;
|
|
wire [0:87] dbg_group6;
|
|
wire [0:87] dbg_group7;
|
|
wire [0:87] dbg_group8;
|
|
wire [0:87] dbg_group9;
|
|
|
|
wire [0:87] dbg_group10a;
|
|
wire [0:87] dbg_group11a;
|
|
wire [0:87] dbg_group12a;
|
|
wire [0:87] dbg_group13a;
|
|
wire [0:87] dbg_group14a;
|
|
wire [0:87] dbg_group15a;
|
|
wire [0:87] dbg_group10b;
|
|
wire [0:87] dbg_group11b;
|
|
wire [0:87] dbg_group12b;
|
|
wire [0:87] dbg_group13b;
|
|
wire [0:87] dbg_group14b;
|
|
wire [0:87] dbg_group15b;
|
|
wire [0:87] dbg_group10;
|
|
wire [0:87] dbg_group11;
|
|
wire [0:87] dbg_group12;
|
|
wire [0:87] dbg_group13;
|
|
wire [0:87] dbg_group14;
|
|
wire [0:87] dbg_group15;
|
|
|
|
parameter group12_offset = 68;
|
|
parameter group13_offset = 112;
|
|
|
|
wire [0:11] trg_group0;
|
|
wire [0:11] trg_group1;
|
|
wire [0:11] trg_group2;
|
|
wire [0:11] trg_group3a;
|
|
wire [0:11] trg_group3b;
|
|
wire [0:11] trg_group3;
|
|
|
|
wire [24:55] dbg_group0a;
|
|
|
|
wire tlb_ctl_dbg_tag1_valid;
|
|
wire [0:1] tlb_ctl_dbg_tag1_thdid;
|
|
wire [0:2] tlb_ctl_dbg_tag1_type;
|
|
wire [0:1] tlb_ctl_dbg_tag1_wq;
|
|
wire tlb_ctl_dbg_tag1_gs;
|
|
wire tlb_ctl_dbg_tag1_pr;
|
|
wire tlb_ctl_dbg_tag1_atsel;
|
|
wire [0:1] tlb_cmp_dbg_tag4_thdid; // encoded
|
|
wire [0:2] tlb_cmp_dbg_tag4_type; // encoded
|
|
wire tlb_cmp_dbg_tag4_valid;
|
|
wire [0:`TLB_WAYS] tlb_cmp_dbg_tag5_wayhit;
|
|
wire [0:1] tlb_cmp_dbg_tag5_thdid; // encoded
|
|
wire [0:2] tlb_cmp_dbg_tag5_type; // encoded
|
|
wire [0:1] tlb_cmp_dbg_tag5_class; // what kind of derat is it?
|
|
wire tlb_cmp_dbg_tag5_iorderat_rel_val; // i or d
|
|
wire tlb_cmp_dbg_tag5_iorderat_rel_hit; // i or d
|
|
wire [0:167] tlb_cmp_dbg_tag5_way;
|
|
wire [0:11] tlb_cmp_dbg_tag5_lru_dataout;
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
wire [0:11] unused_dc;
|
|
|
|
wire [0:DEBUG_LATCH_WIDTH-1] unused_debug_latch_scan;
|
|
wire [0:TRIGGER_LATCH_WIDTH-1] unused_trigger_latch_scan;
|
|
wire [0:`DEBUG_TRACE_WIDTH-1] unused_busin_latch_scan;
|
|
wire [0:`DEBUG_TRIGGER_WIDTH-1] unused_trigin_latch_scan;
|
|
wire [0:3] unused_coretrace_ctrls_in_latch_scan;
|
|
|
|
// Pervasive
|
|
wire pc_func_slp_sl_thold_1;
|
|
wire pc_func_slp_sl_thold_0;
|
|
wire pc_func_slp_sl_thold_0_b;
|
|
wire pc_func_slp_sl_force;
|
|
wire pc_func_slp_nsl_thold_1;
|
|
wire pc_func_slp_nsl_thold_0;
|
|
wire pc_func_slp_nsl_thold_0_b;
|
|
wire pc_func_slp_nsl_force;
|
|
wire pc_sg_1;
|
|
wire pc_sg_0;
|
|
wire pc_fce_1;
|
|
wire pc_fce_0;
|
|
|
|
wire [0:scan_right] siv;
|
|
wire [0:scan_right] sov;
|
|
|
|
wire tidn;
|
|
wire tiup;
|
|
|
|
//---------------------------------------------------------------------
|
|
// Logic
|
|
//---------------------------------------------------------------------
|
|
|
|
assign tidn = 1'b0;
|
|
assign tiup = 1'b1;
|
|
|
|
assign pc_mm_debug_mux1_ctrls_loc_d = pc_mm_debug_mux1_ctrls_q; // local timing latches
|
|
|
|
//---------------------------------------------------------------------
|
|
// debug input signals from various logic entities
|
|
//---------------------------------------------------------------------
|
|
assign debug_d[12] = tlb_ctl_dbg_tag0_valid;
|
|
assign debug_d[13:14] = tlb_ctl_dbg_tag0_thdid[0:1];
|
|
assign debug_d[15:17] = tlb_ctl_dbg_tag0_type[0:2];
|
|
assign debug_d[18:19] = tlb_ctl_dbg_tag0_wq[0:1];
|
|
assign debug_d[20] = tlb_ctl_dbg_tag0_gs;
|
|
assign debug_d[21] = tlb_ctl_dbg_tag0_pr;
|
|
assign debug_d[22] = tlb_ctl_dbg_tag0_atsel;
|
|
assign debug_d[23] = 1'b0;
|
|
|
|
assign tlb_ctl_dbg_tag1_valid = debug_q[12];
|
|
assign tlb_ctl_dbg_tag1_thdid[0:1] = debug_q[13:14];
|
|
assign tlb_ctl_dbg_tag1_type[0:2] = debug_q[15:17];
|
|
assign tlb_ctl_dbg_tag1_wq[0:1] = debug_q[18:19];
|
|
assign tlb_ctl_dbg_tag1_gs = debug_q[20];
|
|
assign tlb_ctl_dbg_tag1_pr = debug_q[21];
|
|
assign tlb_ctl_dbg_tag1_atsel = debug_q[22];
|
|
|
|
// tlb_low_data
|
|
// [0:51] - EPN
|
|
// [52:55] - SIZE (4b)
|
|
// [56:59] - ThdID
|
|
// [60:61] - Class
|
|
// [62] - ExtClass
|
|
// [63] - TID_NZ
|
|
// [64:65] - reserved (2b)
|
|
// [66:73] - 8b for LPID
|
|
// [74:83] - parity 10bits
|
|
assign debug_d[192:275] = tlb_cmp_dbg_tag4_way[0:83];
|
|
assign tlb_cmp_dbg_tag5_way[0:83] = debug_q[192:275];
|
|
|
|
// tlb_high_data
|
|
// [84] - [0] - X-bit
|
|
// [85:87] - [1:3] - reserved (3b)
|
|
// [88:117] - [4:33] - RPN (30b)
|
|
// [118:119] - [34:35] - R,C
|
|
// [120:121] - [36:37] - WLC (2b)
|
|
// [122] - [38] - ResvAttr
|
|
// [123] - [39] - VF
|
|
// [124] - [40] - IND
|
|
// [125:128] - [41:44] - U0-U3
|
|
// [129:133] - [45:49] - WIMGE
|
|
// [134:135] - [50:51] - UX,SX
|
|
// [136:137] - [52:53] - UW,SW
|
|
// [138:139] - [54:55] - UR,SR
|
|
// [140] - [56] - GS
|
|
// [141] - [57] - TS
|
|
// [142:143] - [58:59] - reserved (2b)
|
|
// [144:149] - [60:65] - 6b TID msbs
|
|
// [150:157] - [66:73] - 8b TID lsbs
|
|
// [158:167] - [74:83] - parity 10bits
|
|
assign debug_d[276:359] = tlb_cmp_dbg_tag4_way[84:167];
|
|
assign tlb_cmp_dbg_tag5_way[84:167] = debug_q[276:359];
|
|
|
|
// lru data format
|
|
// [0:3] - valid(0:3)
|
|
// [4:6] - LRU
|
|
// [7] - parity
|
|
// [8:11] - iprot(0:3)
|
|
// [12:14] - reserved
|
|
// [15] - parity
|
|
assign debug_d[360:371] = tlb_cmp_dbg_tag4_lru_dataout_q[0:11];
|
|
assign tlb_cmp_dbg_tag5_lru_dataout[0:11] = debug_q[360:371];
|
|
|
|
assign trigger_d[0:11] = {12{1'b0}};
|
|
assign trigger_d[12:23] = {12{1'b0}};
|
|
assign trigger_d[24:35] = {12{1'b0}};
|
|
assign trigger_d[36:47] = {12{1'b0}};
|
|
|
|
//group0 (slowspr interface)
|
|
assign dbg_group0[0] = spr_dbg_slowspr_val_int; // spr_int phase
|
|
assign dbg_group0[1] = spr_dbg_slowspr_rw_int;
|
|
assign dbg_group0[2:3] = spr_dbg_slowspr_etid_int;
|
|
assign dbg_group0[4:13] = spr_dbg_slowspr_addr_int;
|
|
assign dbg_group0[14] = spr_dbg_slowspr_done_out; // spr_out phase
|
|
assign dbg_group0[15] = spr_dbg_match_any_mmu; // spr_int phase
|
|
assign dbg_group0[16] = spr_dbg_match_any_mas;
|
|
assign dbg_group0[17] = spr_dbg_match_pid;
|
|
assign dbg_group0[18] = spr_dbg_match_lpidr;
|
|
assign dbg_group0[19] = spr_dbg_match_mas2;
|
|
assign dbg_group0[20] = spr_dbg_match_mas01_64b;
|
|
assign dbg_group0[21] = spr_dbg_match_mas56_64b;
|
|
assign dbg_group0[22] = spr_dbg_match_mas73_64b;
|
|
assign dbg_group0[23] = spr_dbg_match_mas81_64b;
|
|
|
|
// alternate bit muxes when 64b decodes 19:23=00000
|
|
assign dbg_group0a[24] = spr_dbg_match_mmucr0;
|
|
assign dbg_group0a[25] = spr_dbg_match_mmucr1;
|
|
assign dbg_group0a[26] = spr_dbg_match_mmucr2;
|
|
assign dbg_group0a[27] = spr_dbg_match_mmucr3;
|
|
assign dbg_group0a[28] = spr_dbg_match_mmucsr0;
|
|
assign dbg_group0a[29] = spr_dbg_match_mmucfg;
|
|
assign dbg_group0a[30] = spr_dbg_match_tlb0cfg;
|
|
assign dbg_group0a[31] = spr_dbg_match_tlb0ps;
|
|
assign dbg_group0a[32] = spr_dbg_match_lratcfg;
|
|
assign dbg_group0a[33] = spr_dbg_match_lratps;
|
|
assign dbg_group0a[34] = spr_dbg_match_eptcfg;
|
|
assign dbg_group0a[35] = spr_dbg_match_lper;
|
|
assign dbg_group0a[36] = spr_dbg_match_lperu;
|
|
assign dbg_group0a[37] = spr_dbg_match_mas0;
|
|
assign dbg_group0a[38] = spr_dbg_match_mas1;
|
|
assign dbg_group0a[39] = spr_dbg_match_mas2u;
|
|
assign dbg_group0a[40] = spr_dbg_match_mas3;
|
|
assign dbg_group0a[41] = spr_dbg_match_mas4;
|
|
assign dbg_group0a[42] = spr_dbg_match_mas5;
|
|
assign dbg_group0a[43] = spr_dbg_match_mas6;
|
|
assign dbg_group0a[44] = spr_dbg_match_mas7;
|
|
assign dbg_group0a[45] = spr_dbg_match_mas8;
|
|
assign dbg_group0a[46] = tlb_mas_tlbre;
|
|
assign dbg_group0a[47] = tlb_mas_tlbsx_hit;
|
|
assign dbg_group0a[48] = tlb_mas_tlbsx_miss;
|
|
assign dbg_group0a[49] = tlb_mas_dtlb_error;
|
|
assign dbg_group0a[50] = tlb_mas_itlb_error;
|
|
assign dbg_group0a[51] = tlb_mas_thdid[2] | tlb_mas_thdid[3]; // encoded
|
|
assign dbg_group0a[52] = tlb_mas_thdid[1] | tlb_mas_thdid[3]; // encoded
|
|
assign dbg_group0a[53] = lrat_mas_tlbre;
|
|
assign dbg_group0a[54] = lrat_mas_thdid[2] | lrat_mas_thdid[3]; // encoded
|
|
assign dbg_group0a[55] = lrat_mas_thdid[1] | lrat_mas_thdid[3]; // encoded
|
|
// alternate bit muxes when 64b decodes 19:23/=00000
|
|
assign dbg_group0[24:55] = ({55-24+1{spr_dbg_match_64b}} & spr_dbg_slowspr_data_out[0:31]) |
|
|
({55-24+1{(~(spr_dbg_match_64b))}} & dbg_group0a[24:55]);
|
|
assign dbg_group0[56:87] = spr_dbg_slowspr_data_out[32:63];
|
|
|
|
// snoop_attr:
|
|
// 0 -> Local
|
|
// 1:3 -> IS/Class: 0=all, 1=tid, 2=gs, 3=epn, 4=class0, 5=class1, 6=class2, 7=class3
|
|
// 4:5 -> GS/TS
|
|
// 6:13 -> TID(6:13)
|
|
// 14:17 -> Size
|
|
// 18 -> reserved for tlb, extclass_enable(0) for erats
|
|
// 19 -> mmucsr0.tlb0fi for tlb, or TID_NZ for erats
|
|
// 20:25 -> TID(0:5)
|
|
// 26:33 -> LPID
|
|
// 34 -> IND
|
|
|
|
//group1 (invalidate, local generation)
|
|
assign dbg_group1[0:4] = inval_dbg_seq_q[0:4];
|
|
assign dbg_group1[5] = inval_dbg_ex6_valid;
|
|
assign dbg_group1[6:7] = inval_dbg_ex6_thdid[0:1]; // encoded
|
|
assign dbg_group1[8:9] = inval_dbg_ex6_ttype[1:2]; // encoded
|
|
assign dbg_group1[10] = htw_lsu_req_valid;
|
|
assign dbg_group1[11] = mmucsr0_tlb0fi;
|
|
assign dbg_group1[12] = tlbwe_back_inv_valid;
|
|
assign dbg_group1[13] = inval_dbg_snoop_forme;
|
|
assign dbg_group1[14] = inval_dbg_an_ac_back_inv_q[4]; // L bit
|
|
assign dbg_group1[15] = inval_dbg_an_ac_back_inv_q[7]; // local bit
|
|
assign dbg_group1[16:50] = inval_dbg_snoop_attr_q[0:34];
|
|
assign dbg_group1[51:52] = inval_dbg_snoop_attr_tlb_spec_q[18:19];
|
|
assign dbg_group1[53:87] = inval_dbg_snoop_vpn_q[17:51];
|
|
|
|
//group2 (invalidate, bus snoops)
|
|
assign dbg_group2[0:4] = inval_dbg_seq_q[0:4];
|
|
assign dbg_group2[5] = inval_dbg_snoop_forme;
|
|
assign dbg_group2[6] = inval_dbg_snoop_local_reject;
|
|
assign dbg_group2[7:13] = inval_dbg_an_ac_back_inv_q[2:8]; // 2=valid b, 3=target b, 4=L, 5=GS, 6=IND, 7=local, 8=reject
|
|
assign dbg_group2[14:21] = inval_dbg_an_ac_back_inv_lpar_id_q[0:7];
|
|
assign dbg_group2[22:63] = inval_dbg_an_ac_back_inv_addr_q[22:63];
|
|
assign dbg_group2[64:66] = inval_dbg_snoop_valid_q[0:2];
|
|
assign dbg_group2[67:87] = {inval_dbg_snoop_attr_q[0:19], inval_dbg_snoop_attr_q[34]};
|
|
|
|
//group3 (lsu interface)
|
|
assign dbg_group3[0:4] = inval_dbg_seq_q[0:4];
|
|
assign dbg_group3[5] = inval_dbg_ex6_valid;
|
|
assign dbg_group3[6:7] = inval_dbg_ex6_thdid[0:1]; // encoded
|
|
assign dbg_group3[8:9] = inval_dbg_ex6_ttype[1:2]; // encoded
|
|
assign dbg_group3[10] = inval_dbg_snoop_forme;
|
|
assign dbg_group3[11] = inval_dbg_an_ac_back_inv_q[7]; // 2=valid b, 3=target b, 4=L, 5=GS, 6=IND, 7=local, 8=reject
|
|
assign dbg_group3[12] = xu_mm_lmq_stq_empty;
|
|
assign dbg_group3[13] = iu_mm_lmq_empty;
|
|
assign dbg_group3[14:15] = htw_dbg_seq_q[0:1];
|
|
assign dbg_group3[16] = htw_lsu_req_valid;
|
|
assign dbg_group3[17:18] = htw_dbg_lsu_thdid[0:1];
|
|
assign dbg_group3[19:20] = htw_lsu_ttype[0:1];
|
|
assign dbg_group3[21] = xu_mm_lsu_token;
|
|
assign dbg_group3[22] = inval_dbg_lsu_tokens_q[1];
|
|
assign dbg_group3[23] = |(mm_xu_lsu_req);
|
|
assign dbg_group3[24:25] = mm_xu_lsu_ttype; // 0=tlbivax_op L=0, 1=tlbi_complete, 2=mmu read with core_tag=01100, 3=mmu read with core_tag=01101
|
|
assign dbg_group3[26:30] = mm_xu_lsu_wimge;
|
|
assign dbg_group3[31] = mm_xu_lsu_ind; // tlbivax sec enc data
|
|
assign dbg_group3[32] = mm_xu_lsu_gs; // tlbivax sec enc data
|
|
assign dbg_group3[33] = mm_xu_lsu_lbit; // tlbivax sec enc data, "L" bit, for large vs. small
|
|
assign dbg_group3[34:37] = mm_xu_lsu_u;
|
|
assign dbg_group3[38:45] = mm_xu_lsu_lpid; // tlbivax lpar id data
|
|
assign dbg_group3[46:87] = mm_xu_lsu_addr[22:63];
|
|
|
|
// `tagpos_epn : natural := 0;
|
|
// `tagpos_pid : natural := 52; -- 14 bits
|
|
// `tagpos_is : natural := 66;
|
|
// `tagpos_class : natural := 68;
|
|
// `tagpos_state : natural := 70; -- state: 0:pr 1:gs 2:as 3:cm
|
|
// `tagpos_thdid : natural := 74;
|
|
// `tagpos_size : natural := 78;
|
|
// `tagpos_type : natural := 82; -- derat,ierat,tlbsx,tlbsrx,snoop,tlbre,tlbwe,ptereload
|
|
// `tagpos_lpid : natural := 90;
|
|
// `tagpos_ind : natural := 98;
|
|
// `tagpos_atsel : natural := 99;
|
|
// `tagpos_esel : natural := 100;
|
|
// `tagpos_hes : natural := 103;
|
|
// `tagpos_wq : natural := 104;
|
|
// `tagpos_lrat : natural := 106;
|
|
// `tagpos_pt : natural := 107;
|
|
// `tagpos_recform : natural := 108;
|
|
// `tagpos_endflag : natural := 109;
|
|
|
|
assign tlb_cmp_dbg_tag5_iorderat_rel_val = |(tlb_cmp_dbg_tag5_erat_rel_val[0:3] | tlb_cmp_dbg_tag5_erat_rel_val[5:8]); // i or d
|
|
assign tlb_cmp_dbg_tag5_iorderat_rel_hit = tlb_cmp_dbg_tag5_erat_rel_val[4] | tlb_cmp_dbg_tag5_erat_rel_val[9]; // i or d
|
|
|
|
//group4 (sequencers, the big picture)
|
|
assign dbg_group4[0:5] = tlb_ctl_dbg_seq_q[0:5]; // tlb_seq_q
|
|
assign dbg_group4[6:7] = tlb_ctl_dbg_tag0_thdid[0:1]; // encoded
|
|
assign dbg_group4[8:10] = tlb_ctl_dbg_tag0_type[0:2]; // encoded
|
|
assign dbg_group4[11] = tlb_ctl_dbg_any_tag_flush_sig;
|
|
assign dbg_group4[12:15] = tlb_cmp_dbg_tag4_wayhit[0:3];
|
|
//assign dbg_group4(16 to 19) = mm_xu_eratmiss_done[0:3];
|
|
//assign dbg_group4[20 to 23) = mm_iu_barrier_done[0:3];
|
|
//assign dbg_group4[24 to 27) = mm_xu_ex3_flush_req[0:3];
|
|
assign dbg_group4[28] = tlb_cmp_dbg_tag5_iorderat_rel_val; // i or d
|
|
assign dbg_group4[29] = tlb_cmp_dbg_tag5_iorderat_rel_hit; // i or d
|
|
assign dbg_group4[30:31] = htw_dbg_seq_q[0:1];
|
|
assign dbg_group4[32:34] = htw_dbg_pte0_seq_q[0:2];
|
|
assign dbg_group4[35:37] = htw_dbg_pte1_seq_q[0:2];
|
|
assign dbg_group4[38:42] = inval_dbg_seq_q[0:4];
|
|
assign dbg_group4[43] = mmucsr0_tlb0fi;
|
|
assign dbg_group4[44] = inval_dbg_ex6_valid;
|
|
assign dbg_group4[45:46] = inval_dbg_ex6_thdid[0:1]; // encoded
|
|
assign dbg_group4[47:49] = inval_dbg_ex6_ttype[0:2]; // encoded tlbilx & tlbivax & eratilx & erativax, csync, isync
|
|
assign dbg_group4[50] = inval_dbg_snoop_forme;
|
|
assign dbg_group4[51:57] = inval_dbg_an_ac_back_inv_q[2:8]; // 2=valid b, 3=target b, 4=L, 5=GS, 6=IND, 7=local, 8=reject
|
|
assign dbg_group4[58] = xu_mm_lmq_stq_empty;
|
|
assign dbg_group4[59] = iu_mm_lmq_empty;
|
|
|
|
generate
|
|
begin : xhdl0
|
|
genvar tid;
|
|
for (tid = 0; tid <= 3; tid = tid + 1)
|
|
begin : Grp4Threads
|
|
if (tid < `THREADS)
|
|
begin : Grp4Exist
|
|
assign dbg_group4[16 + tid] = mm_xu_eratmiss_done[tid];
|
|
assign dbg_group4[20 + tid] = mm_iu_barrier_done[tid];
|
|
assign dbg_group4[24 + tid] = mm_xu_ex3_flush_req[tid];
|
|
assign dbg_group4[60 + tid] = mm_xu_hold_req[tid];
|
|
assign dbg_group4[64 + tid] = xu_mm_hold_ack[tid];
|
|
assign dbg_group4[68 + tid] = mm_xu_hold_done[tid];
|
|
end
|
|
if (tid >= `THREADS)
|
|
begin : Grp4NExist
|
|
assign dbg_group4[16 + tid] = tidn;
|
|
assign dbg_group4[20 + tid] = tidn;
|
|
assign dbg_group4[24 + tid] = tidn;
|
|
assign dbg_group4[60 + tid] = tidn;
|
|
assign dbg_group4[64 + tid] = tidn;
|
|
assign dbg_group4[68 + tid] = tidn;
|
|
end
|
|
end
|
|
end
|
|
endgenerate
|
|
|
|
assign dbg_group4[72:74] = inval_dbg_snoop_valid_q[0:2];
|
|
assign dbg_group4[75:77] = inval_dbg_snoop_ack_q[0:2];
|
|
assign dbg_group4[78] = |(mm_xu_lsu_req);
|
|
assign dbg_group4[79:80] = mm_xu_lsu_ttype; // 0=tlbivax_op L=0, 1=tlbi_complete, 2=mmu read with core_tag=01100, 3=mmu read with core_tag=01101
|
|
assign dbg_group4[81] = |(mm_xu_illeg_instr);
|
|
assign dbg_group4[82:85] = tlb_cmp_dbg_tag5_except_type_q[0:3]; // tag5 except valid/type, (hv_priv | lrat_miss | pt_fault | pt_inelig)
|
|
assign dbg_group4[86:87] = tlb_cmp_dbg_tag5_except_thdid_q[0:1]; // tag5 encoded thdid
|
|
|
|
//group5 (tlb_req)
|
|
assign dbg_group5[0] = tlb_req_dbg_ierat_iu5_valid_q;
|
|
assign dbg_group5[1:2] = tlb_req_dbg_ierat_iu5_thdid[0:1]; // encoded
|
|
assign dbg_group5[3:6] = tlb_req_dbg_ierat_iu5_state_q[0:3];
|
|
assign dbg_group5[7] = tlb_seq_ierat_req;
|
|
assign dbg_group5[8:9] = tlb_req_dbg_ierat_inptr_q[0:1];
|
|
assign dbg_group5[10:11] = tlb_req_dbg_ierat_outptr_q[0:1];
|
|
assign dbg_group5[12:15] = tlb_req_dbg_ierat_req_valid_q[0:3];
|
|
assign dbg_group5[16:19] = tlb_req_dbg_ierat_req_nonspec_q[0:3];
|
|
assign dbg_group5[20:27] = tlb_req_dbg_ierat_req_thdid[0:7]; // encoded
|
|
assign dbg_group5[28:31] = tlb_req_dbg_ierat_req_dup_q[0:3];
|
|
assign dbg_group5[32] = tlb_req_dbg_derat_ex6_valid_q;
|
|
assign dbg_group5[33:34] = tlb_req_dbg_derat_ex6_thdid[0:1]; // encoded
|
|
assign dbg_group5[35:38] = tlb_req_dbg_derat_ex6_state_q[0:3];
|
|
assign dbg_group5[39] = tlb_seq_derat_req;
|
|
assign dbg_group5[40:41] = tlb_req_dbg_derat_inptr_q[0:1];
|
|
assign dbg_group5[42:43] = tlb_req_dbg_derat_outptr_q[0:1];
|
|
assign dbg_group5[44:47] = tlb_req_dbg_derat_req_valid_q[0:3];
|
|
assign dbg_group5[48:55] = tlb_req_dbg_derat_req_thdid[0:7]; // encoded
|
|
assign dbg_group5[56:63] = tlb_req_dbg_derat_req_ttype_q[0:7];
|
|
assign dbg_group5[64:67] = tlb_req_dbg_derat_req_dup_q[0:3];
|
|
assign dbg_group5[68:87] = tlb_cmp_dbg_erat_dup_q[0:19];
|
|
|
|
// unused tag bits for certain ops are re-purposed as below:
|
|
// unused `tagpos_is def is mas1_v, mas1_iprot for tlbwe, and is pte.valid & 0 for ptereloads
|
|
// unused `tagpos_pt, `tagpos_recform def are mas8_tgs, mas1_ts for tlbwe
|
|
// unused `tagpos_atsel | `tagpos_esel used as indirect entry's thdid to update tlb_entry.thdid for ptereloads
|
|
// unused `tagpos_wq used as htw reserv write enab & dup bits (set in htw) for ptereloads
|
|
// unused esel for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number (1 thru 5)
|
|
// unused "is" for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number msb (9 thru 13, or 17 thru 21)
|
|
// unused HES bit for snoops is used as mmucsr0.tlb0fi full invalidate of all non-protected entries
|
|
|
|
// some encoding of debug sigs
|
|
// ttype: derat,ierat,tlbsx,tlbsrx,snoop,tlbre,tlbwe,ptereload
|
|
assign tlb_cmp_dbg_tag4_valid = |(tlb_cmp_dbg_tag4[`tagpos_thdid:`tagpos_thdid + 3]);
|
|
|
|
assign tlb_cmp_dbg_tag4_thdid[0] = (tlb_cmp_dbg_tag4[`tagpos_thdid + 2] | tlb_cmp_dbg_tag4[`tagpos_thdid + 3]); // encoded
|
|
assign tlb_cmp_dbg_tag4_thdid[1] = (tlb_cmp_dbg_tag4[`tagpos_thdid + 1] | tlb_cmp_dbg_tag4[`tagpos_thdid + 3]); // encoded
|
|
|
|
assign tlb_cmp_dbg_tag4_type[0] = (tlb_cmp_dbg_tag4[`tagpos_type_snoop] | tlb_cmp_dbg_tag4[`tagpos_type_tlbre] | tlb_cmp_dbg_tag4[`tagpos_type_tlbwe] | tlb_cmp_dbg_tag4[`tagpos_type_ptereload]); // encoded
|
|
assign tlb_cmp_dbg_tag4_type[1] = (tlb_cmp_dbg_tag4[`tagpos_type_tlbsx] | tlb_cmp_dbg_tag4[`tagpos_type_tlbsrx] | tlb_cmp_dbg_tag4[`tagpos_type_tlbwe] | tlb_cmp_dbg_tag4[`tagpos_type_ptereload]); // encoded
|
|
assign tlb_cmp_dbg_tag4_type[2] = (tlb_cmp_dbg_tag4[`tagpos_type_ierat] | tlb_cmp_dbg_tag4[`tagpos_type_tlbsrx] | tlb_cmp_dbg_tag4[`tagpos_type_tlbre] | tlb_cmp_dbg_tag4[`tagpos_type_ptereload]); // encoded
|
|
|
|
//group6 (general erat and search compare values, truncated epn)
|
|
assign dbg_group6[0] = tlb_cmp_dbg_tag4_valid; // or_reduce of thdid;
|
|
assign dbg_group6[1:2] = tlb_cmp_dbg_tag4_thdid[0:1]; // encoded
|
|
assign dbg_group6[3:5] = tlb_cmp_dbg_tag4_type[0:2]; // encoded
|
|
assign dbg_group6[6:7] = tlb_cmp_dbg_tag4[`tagpos_class:`tagpos_class + 1];
|
|
assign dbg_group6[8:9] = tlb_cmp_dbg_tag4[`tagpos_is:`tagpos_is + 1];
|
|
assign dbg_group6[10:12] = tlb_cmp_dbg_tag4[`tagpos_esel:`tagpos_esel + 2];
|
|
assign dbg_group6[13] = tlb_cmp_dbg_tag4[`tagpos_cm];
|
|
assign dbg_group6[14] = tlb_cmp_dbg_tag4[`tagpos_pr];
|
|
assign dbg_group6[15] = tlb_cmp_dbg_tag4[`tagpos_ind];
|
|
assign dbg_group6[16] = tlb_cmp_dbg_tag4[`tagpos_endflag];
|
|
assign dbg_group6[17:23] = tlb_cmp_dbg_addr4[0:6];
|
|
assign dbg_group6[24:27] = tlb_cmp_dbg_tag4_wayhit[0:`TLB_WAYS - 1];
|
|
assign dbg_group6[28] = tlb_cmp_dbg_tag4[`tagpos_gs];
|
|
assign dbg_group6[29:36] = tlb_cmp_dbg_tag4[`tagpos_lpid:`tagpos_lpid + 7];
|
|
assign dbg_group6[37] = tlb_cmp_dbg_tag4[`tagpos_as];
|
|
assign dbg_group6[38:51] = tlb_cmp_dbg_tag4[`tagpos_pid:`tagpos_pid + 13];
|
|
assign dbg_group6[52:87] = tlb_cmp_dbg_tag4[`tagpos_epn + 16:`tagpos_epn + 51];
|
|
|
|
// match <= addr_match and -- Address compare
|
|
// pgsize_match and -- Size compare
|
|
// class_match and -- Class compare
|
|
// extclass_match and -- ExtClass compare
|
|
// state_match and -- State compare
|
|
// thdid_match and -- ThdID compare
|
|
// pid_match and -- PID compare
|
|
// lpid_match and -- LPID compare
|
|
// ind_match and -- indirect compare
|
|
// iprot_match and -- inval prot compare
|
|
// entry_v; -- Valid
|
|
|
|
//group7 (detailed compare/match)
|
|
assign dbg_group7[0] = tlb_cmp_dbg_tag4_valid;
|
|
assign dbg_group7[1:2] = tlb_cmp_dbg_tag4_thdid[0:1];
|
|
assign dbg_group7[3:5] = tlb_cmp_dbg_tag4_type[0:2];
|
|
assign dbg_group7[6:7] = tlb_cmp_dbg_tag4[`tagpos_is:`tagpos_is + 1];
|
|
assign dbg_group7[8:9] = tlb_cmp_dbg_tag4[`tagpos_class:`tagpos_class + 1];
|
|
assign dbg_group7[10:12] = tlb_cmp_dbg_tag4[`tagpos_esel:`tagpos_esel + 2];
|
|
assign dbg_group7[13:19] = tlb_cmp_dbg_addr4[0:6];
|
|
assign dbg_group7[20:23] = tlb_cmp_dbg_tag4_wayhit[0:3];
|
|
|
|
assign debug_d[24:32] = tlb_cmp_dbg_addr_enable[0:8]; // these are tag3 versions coming in
|
|
assign debug_d[33] = tlb_cmp_dbg_pgsize_enable;
|
|
assign debug_d[34] = tlb_cmp_dbg_class_enable;
|
|
assign debug_d[35:36] = tlb_cmp_dbg_extclass_enable[0:1];
|
|
assign debug_d[37:38] = tlb_cmp_dbg_state_enable[0:1];
|
|
assign debug_d[39] = tlb_cmp_dbg_thdid_enable;
|
|
assign debug_d[40] = tlb_cmp_dbg_pid_enable;
|
|
assign debug_d[41] = tlb_cmp_dbg_lpid_enable;
|
|
assign debug_d[42] = tlb_cmp_dbg_ind_enable;
|
|
assign debug_d[43] = tlb_cmp_dbg_iprot_enable;
|
|
assign debug_d[44] = tlb_cmp_dbg_way0_entry_v;
|
|
assign debug_d[45] = tlb_cmp_dbg_way0_addr_match;
|
|
assign debug_d[46] = tlb_cmp_dbg_way0_pgsize_match;
|
|
assign debug_d[47] = tlb_cmp_dbg_way0_class_match;
|
|
assign debug_d[48] = tlb_cmp_dbg_way0_extclass_match;
|
|
assign debug_d[49] = tlb_cmp_dbg_way0_state_match;
|
|
assign debug_d[50] = tlb_cmp_dbg_way0_thdid_match;
|
|
assign debug_d[51] = tlb_cmp_dbg_way0_pid_match;
|
|
assign debug_d[52] = tlb_cmp_dbg_way0_lpid_match;
|
|
assign debug_d[53] = tlb_cmp_dbg_way0_ind_match;
|
|
assign debug_d[54] = tlb_cmp_dbg_way0_iprot_match;
|
|
assign debug_d[55] = tlb_cmp_dbg_way1_entry_v;
|
|
assign debug_d[56] = tlb_cmp_dbg_way1_addr_match;
|
|
assign debug_d[57] = tlb_cmp_dbg_way1_pgsize_match;
|
|
assign debug_d[58] = tlb_cmp_dbg_way1_class_match;
|
|
assign debug_d[59] = tlb_cmp_dbg_way1_extclass_match;
|
|
assign debug_d[60] = tlb_cmp_dbg_way1_state_match;
|
|
assign debug_d[61] = tlb_cmp_dbg_way1_thdid_match;
|
|
assign debug_d[62] = tlb_cmp_dbg_way1_pid_match;
|
|
assign debug_d[63] = tlb_cmp_dbg_way1_lpid_match;
|
|
assign debug_d[64] = tlb_cmp_dbg_way1_ind_match;
|
|
assign debug_d[65] = tlb_cmp_dbg_way1_iprot_match;
|
|
assign debug_d[66] = tlb_cmp_dbg_way2_entry_v;
|
|
assign debug_d[67] = tlb_cmp_dbg_way2_addr_match;
|
|
assign debug_d[68] = tlb_cmp_dbg_way2_pgsize_match;
|
|
assign debug_d[69] = tlb_cmp_dbg_way2_class_match;
|
|
assign debug_d[70] = tlb_cmp_dbg_way2_extclass_match;
|
|
assign debug_d[71] = tlb_cmp_dbg_way2_state_match;
|
|
assign debug_d[72] = tlb_cmp_dbg_way2_thdid_match;
|
|
assign debug_d[73] = tlb_cmp_dbg_way2_pid_match;
|
|
assign debug_d[74] = tlb_cmp_dbg_way2_lpid_match;
|
|
assign debug_d[75] = tlb_cmp_dbg_way2_ind_match;
|
|
assign debug_d[76] = tlb_cmp_dbg_way2_iprot_match;
|
|
assign debug_d[77] = tlb_cmp_dbg_way3_entry_v;
|
|
assign debug_d[78] = tlb_cmp_dbg_way3_addr_match;
|
|
assign debug_d[79] = tlb_cmp_dbg_way3_pgsize_match;
|
|
assign debug_d[80] = tlb_cmp_dbg_way3_class_match;
|
|
assign debug_d[81] = tlb_cmp_dbg_way3_extclass_match;
|
|
assign debug_d[82] = tlb_cmp_dbg_way3_state_match;
|
|
assign debug_d[83] = tlb_cmp_dbg_way3_thdid_match;
|
|
assign debug_d[84] = tlb_cmp_dbg_way3_pid_match;
|
|
assign debug_d[85] = tlb_cmp_dbg_way3_lpid_match;
|
|
assign debug_d[86] = tlb_cmp_dbg_way3_ind_match;
|
|
assign debug_d[87] = tlb_cmp_dbg_way3_iprot_match;
|
|
|
|
assign dbg_group7[24:87] = debug_q[24:87]; // tag4 phase, see below
|
|
|
|
// unused tag bits for certain ops are re-purposed as below:
|
|
// unused `tagpos_is def is mas1_v, mas1_iprot for tlbwe, and is pte.valid & 0 for ptereloads
|
|
// unused `tagpos_pt, `tagpos_recform def are mas8_tgs, mas1_ts for tlbwe
|
|
// unused `tagpos_atsel | `tagpos_esel used as indirect entry's thdid to update tlb_entry.thdid for ptereloads
|
|
// unused `tagpos_wq used as htw reserv write enab & dup bits (set in htw) for ptereloads
|
|
// unused esel for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number (1 thru 5)
|
|
// unused "is" for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number msb (9 thru 13, or 17 thru 21)
|
|
// unused HES bit for snoops is used as mmucsr0.tlb0fi full invalidate of all non-protected entries
|
|
// unused class is derat ttype for derat miss, 0=load,1=store,2=epid load,3=epid store
|
|
|
|
//group8 (erat miss, tlbre, tlbsx mas updates and parerr)
|
|
assign dbg_group8[0] = tlb_cmp_dbg_tag4_valid;
|
|
assign dbg_group8[1:2] = tlb_cmp_dbg_tag4_thdid[0:1];
|
|
assign dbg_group8[3:5] = tlb_cmp_dbg_tag4_type[0:2];
|
|
assign dbg_group8[6:7] = tlb_cmp_dbg_tag4[`tagpos_class:`tagpos_class + 1];
|
|
assign dbg_group8[8] = tlb_cmp_dbg_tag4[`tagpos_cm];
|
|
assign dbg_group8[9] = tlb_cmp_dbg_tag4[`tagpos_gs];
|
|
assign dbg_group8[10] = tlb_cmp_dbg_tag4[`tagpos_pr];
|
|
assign dbg_group8[11] = tlb_cmp_dbg_tag4[`tagpos_endflag];
|
|
assign dbg_group8[12] = tlb_cmp_dbg_tag4[`tagpos_atsel];
|
|
assign dbg_group8[13:15] = tlb_cmp_dbg_tag4[`tagpos_esel:`tagpos_esel + 2];
|
|
assign dbg_group8[16:19] = tlb_cmp_dbg_tag4[`tagpos_size:`tagpos_size + 3];
|
|
assign dbg_group8[20:33] = tlb_cmp_dbg_tag4[`tagpos_pid:`tagpos_pid + 13];
|
|
assign dbg_group8[34:58] = tlb_cmp_dbg_tag4[`tagpos_epn + 27:`tagpos_epn + 51];
|
|
assign dbg_group8[59:65] = tlb_cmp_dbg_addr4[0:6];
|
|
assign dbg_group8[66:69] = tlb_cmp_dbg_tag4_wayhit[0:`TLB_WAYS - 1];
|
|
assign dbg_group8[70] = tlb_mas_dtlb_error;
|
|
assign dbg_group8[71] = tlb_mas_itlb_error;
|
|
assign dbg_group8[72] = tlb_mas_tlbsx_hit;
|
|
assign dbg_group8[73] = tlb_mas_tlbsx_miss;
|
|
assign dbg_group8[74] = tlb_mas_tlbre;
|
|
assign dbg_group8[75] = lrat_mas_tlbre;
|
|
assign dbg_group8[76] = lrat_mas_tlbsx_hit;
|
|
assign dbg_group8[77] = lrat_mas_tlbsx_miss;
|
|
assign dbg_group8[78:80] = lrat_tag4_hit_entry[0:2];
|
|
assign dbg_group8[81:85] = tlb_cmp_dbg_tag4_parerr[0:4]; // way0 to 3, lru
|
|
assign dbg_group8[86] = |(mm_xu_cr0_eq_valid);
|
|
assign dbg_group8[87] = |(mm_xu_cr0_eq & mm_xu_cr0_eq_valid);
|
|
|
|
//group9 (tlbwe, ptereload write control)
|
|
assign dbg_group9[0] = tlb_cmp_dbg_tag4_valid;
|
|
assign dbg_group9[1:2] = tlb_cmp_dbg_tag4_thdid[0:1];
|
|
assign dbg_group9[3:5] = tlb_cmp_dbg_tag4_type[0:2];
|
|
assign dbg_group9[6] = tlb_cmp_dbg_tag4[`tagpos_gs];
|
|
assign dbg_group9[7] = tlb_cmp_dbg_tag4[`tagpos_pr];
|
|
assign dbg_group9[8] = tlb_cmp_dbg_tag4[`tagpos_cm];
|
|
assign dbg_group9[9] = tlb_cmp_dbg_tag4[`tagpos_hes];
|
|
assign dbg_group9[10:11] = tlb_cmp_dbg_tag4[`tagpos_wq:`tagpos_wq + 1];
|
|
assign dbg_group9[12] = tlb_cmp_dbg_tag4[`tagpos_atsel];
|
|
assign dbg_group9[13:15] = tlb_cmp_dbg_tag4[`tagpos_esel:`tagpos_esel + 2];
|
|
assign dbg_group9[16:17] = tlb_cmp_dbg_tag4[`tagpos_is:`tagpos_is + 1];
|
|
assign dbg_group9[18] = tlb_cmp_dbg_tag4[`tagpos_pt];
|
|
assign dbg_group9[19] = tlb_cmp_dbg_tag4[`tagpos_recform];
|
|
assign dbg_group9[20] = tlb_cmp_dbg_tag4[`tagpos_ind];
|
|
assign dbg_group9[21:27] = tlb_cmp_dbg_addr4[0:6];
|
|
assign dbg_group9[28:31] = tlb_cmp_dbg_tag4_wayhit[0:`TLB_WAYS - 1];
|
|
assign dbg_group9[32:43] = tlb_cmp_dbg_tag4_lru_dataout_q[0:11]; // current valid. lru, iprot
|
|
assign dbg_group9[44:47] = lrat_tag4_hit_status[0:3];
|
|
assign dbg_group9[48:50] = lrat_tag4_hit_entry[0:2];
|
|
assign dbg_group9[51] = |(mm_iu_barrier_done);
|
|
assign dbg_group9[52:55] = tlb_ctl_dbg_resv_valid[0:3];
|
|
assign dbg_group9[56:59] = tlb_ctl_dbg_resv_match_vec_q[0:3]; // tag4
|
|
assign dbg_group9[60:63] = tlb_ctl_dbg_tag5_tlb_write_q[0:3]; // tag5
|
|
assign dbg_group9[64:75] = tlb_cmp_dbg_tag5_lru_datain_q[0:11]; // tag5
|
|
assign dbg_group9[76] = tlb_cmp_dbg_tag5_lru_write; // all bits the same
|
|
assign dbg_group9[77] = |(mm_xu_illeg_instr);
|
|
assign dbg_group9[78:81] = tlb_cmp_dbg_tag5_except_type_q[0:3]; // tag5 except valid/type, (hv_priv | lrat_miss | pt_fault | pt_inelig)
|
|
assign dbg_group9[82:83] = tlb_cmp_dbg_tag5_except_thdid_q[0:1]; // tag5 encoded thdid
|
|
assign dbg_group9[84] = tlbwe_back_inv_valid; // valid
|
|
assign dbg_group9[85] = tlbwe_back_inv_attr[18]; // not extclass enable
|
|
assign dbg_group9[86] = tlbwe_back_inv_attr[19]; // tid_nz
|
|
assign dbg_group9[87] = 1'b0;
|
|
|
|
// constant `eratpos_epn : natural := 0;
|
|
// constant `eratpos_x : natural := 52;
|
|
// constant `eratpos_size : natural := 53;
|
|
// constant `eratpos_v : natural := 56;
|
|
// constant `eratpos_thdid : natural := 57;
|
|
// constant `eratpos_class : natural := 61;
|
|
// constant `eratpos_extclass : natural := 63;
|
|
// constant `eratpos_wren : natural := 65;
|
|
// constant `eratpos_rpnrsvd : natural := 66;
|
|
// constant `eratpos_rpn : natural := 70;
|
|
// constant `eratpos_r : natural := 100;
|
|
// constant `eratpos_c : natural := 101;
|
|
// constant `eratpos_rsv : natural := 102;
|
|
// constant `eratpos_wlc : natural := 103;
|
|
// constant `eratpos_resvattr : natural := 105;
|
|
// constant `eratpos_vf : natural := 106;
|
|
// constant `eratpos_ubits : natural := 107;
|
|
// constant `eratpos_wimge : natural := 111;
|
|
// constant `eratpos_usxwr : natural := 116;
|
|
// constant `eratpos_gs : natural := 122;
|
|
// constant `eratpos_ts : natural := 123;
|
|
// constant `eratpos_tid : natural := 124; -- 8 bits
|
|
|
|
assign debug_d[0:1] = tlb_cmp_dbg_tag4_thdid; // tag5 thdid encoded
|
|
assign debug_d[2:4] = tlb_cmp_dbg_tag4_type; // tag5 type encoded
|
|
assign debug_d[5:6] = tlb_cmp_dbg_tag4[`tagpos_class:`tagpos_class + 1]; // what kind of derat is it?
|
|
assign debug_d[7:11] = tlb_cmp_dbg_tag4_wayhit[0:`TLB_WAYS];
|
|
|
|
assign tlb_cmp_dbg_tag5_thdid[0:1] = debug_q[0:1];
|
|
assign tlb_cmp_dbg_tag5_type[0:2] = debug_q[2:4];
|
|
assign tlb_cmp_dbg_tag5_class[0:1] = debug_q[5:6];
|
|
assign tlb_cmp_dbg_tag5_wayhit[0:4] = debug_q[7:11];
|
|
|
|
//group10 (erat reload bus, epn) --------> can mux tlb_datain(0:83) epn for tlbwe/ptereload ops
|
|
assign dbg_group10a[0] = tlb_cmp_dbg_tag5_iorderat_rel_val;
|
|
assign dbg_group10a[1:2] = tlb_cmp_dbg_tag5_thdid[0:1];
|
|
assign dbg_group10a[3:5] = tlb_cmp_dbg_tag5_type[0:2];
|
|
assign dbg_group10a[6:7] = tlb_cmp_dbg_tag5_class[0:1]; // what kind of derat is it?
|
|
assign dbg_group10a[8:11] = tlb_cmp_dbg_tag5_wayhit[0:`TLB_WAYS - 1];
|
|
assign dbg_group10a[12:21] = tlb_cmp_dbg_tag5_erat_rel_val[0:9];
|
|
assign dbg_group10a[22:87] = tlb_cmp_dbg_tag5_erat_rel_data[`eratpos_epn:`eratpos_wren];
|
|
|
|
// tlb_low_data
|
|
// [0:51] - EPN
|
|
// [52:55] - SIZE (4b)
|
|
// [56:59] - ThdID
|
|
// [60:61] - Class
|
|
// [62] - ExtClass
|
|
// [63] - TID_NZ
|
|
// [64:65] - reserved (2b)
|
|
// [66:73] - 8b for LPID
|
|
// [74:83] - parity 10bits
|
|
assign dbg_group10b[0:83] = tlb_cmp_dbg_tag5_tlb_datain_q[0:83]; // tlb_datain epn
|
|
assign dbg_group10b[84] = (tlb_cmp_dbg_tag5_type[0:2] == 3'b110) & |(tlb_ctl_dbg_tag5_tlb_write_q); // tlbwe
|
|
assign dbg_group10b[85] = (tlb_cmp_dbg_tag5_type[0:2] == 3'b111) & |(tlb_ctl_dbg_tag5_tlb_write_q); // ptereload
|
|
assign dbg_group10b[86] = (tlb_ctl_dbg_tag5_tlb_write_q[2] | tlb_ctl_dbg_tag5_tlb_write_q[3]);
|
|
assign dbg_group10b[87] = (tlb_ctl_dbg_tag5_tlb_write_q[1] | tlb_ctl_dbg_tag5_tlb_write_q[3]);
|
|
|
|
assign dbg_group10 = (mmucr2[8] == 1'b1) ? dbg_group10b :
|
|
dbg_group10a;
|
|
|
|
//group11 (erat reload bus, rpn) --------> can mux tlb_datain(84:167) rpn for tlbwe/ptereload ops
|
|
assign dbg_group11a[0] = tlb_cmp_dbg_tag5_iorderat_rel_val;
|
|
assign dbg_group11a[1:2] = tlb_cmp_dbg_tag5_thdid[0:1];
|
|
assign dbg_group11a[3:5] = tlb_cmp_dbg_tag5_type[0:2];
|
|
assign dbg_group11a[6:7] = tlb_cmp_dbg_tag5_class[0:1]; // what kind of derat is it?
|
|
assign dbg_group11a[8:11] = tlb_cmp_dbg_tag5_wayhit[0:`TLB_WAYS - 1];
|
|
assign dbg_group11a[12:21] = tlb_cmp_dbg_tag5_erat_rel_val[0:9];
|
|
assign dbg_group11a[22:87] = tlb_cmp_dbg_tag5_erat_rel_data[`eratpos_rpnrsvd:`eratpos_tid + 7];
|
|
|
|
// tlb_high_data
|
|
// [84] - [0] - X-bit
|
|
// [85:87] - [1:3] - reserved (3b)
|
|
// [88:117] - [4:33] - RPN (30b)
|
|
// [118:119] - [34:35] - R,C
|
|
// [120:121] - [36:37] - WLC (2b)
|
|
// [122] - [38] - ResvAttr
|
|
// [123] - [39] - VF
|
|
// [124] - [40] - IND
|
|
// [125:128] - [41:44] - U0-U3
|
|
// [129:133] - [45:49] - WIMGE
|
|
// [134:135] - [50:51] - UX,SX
|
|
// [136:137] - [52:53] - UW,SW
|
|
// [138:139] - [54:55] - UR,SR
|
|
// [140] - [56] - GS
|
|
// [141] - [57] - TS
|
|
// [142:143] - [58:59] - reserved (2b)
|
|
// [144:149] - [60:65] - 6b TID msbs
|
|
// [150:157] - [66:73] - 8b TID lsbs
|
|
// [158:167] - [74:83] - parity 10bits
|
|
assign dbg_group11b[0:83] = tlb_cmp_dbg_tag5_tlb_datain_q[84:167]; // tlb_datain rpn
|
|
assign dbg_group11b[84] = (tlb_cmp_dbg_tag5_type[0:2] == 3'b110) & |(tlb_ctl_dbg_tag5_tlb_write_q); // tlbwe
|
|
assign dbg_group11b[85] = (tlb_cmp_dbg_tag5_type[0:2] == 3'b111) & |(tlb_ctl_dbg_tag5_tlb_write_q); // ptereload
|
|
assign dbg_group11b[86] = (tlb_ctl_dbg_tag5_tlb_write_q[2] | tlb_ctl_dbg_tag5_tlb_write_q[3]);
|
|
assign dbg_group11b[87] = (tlb_ctl_dbg_tag5_tlb_write_q[1] | tlb_ctl_dbg_tag5_tlb_write_q[3]);
|
|
|
|
assign dbg_group11 = (mmucr2[8] == 1'b1) ? dbg_group11b :
|
|
dbg_group11a;
|
|
|
|
//group12 (reservations)
|
|
assign dbg_group12a[0] = tlb_ctl_dbg_tag1_valid;
|
|
assign dbg_group12a[1:2] = tlb_ctl_dbg_tag1_thdid[0:1];
|
|
assign dbg_group12a[3:5] = tlb_ctl_dbg_tag1_type[0:2];
|
|
assign dbg_group12a[6:7] = tlb_ctl_dbg_tag1_wq[0:1];
|
|
|
|
assign dbg_group12a[8:11] = tlb_ctl_dbg_resv_valid[0:3];
|
|
assign dbg_group12a[12:15] = tlb_ctl_dbg_set_resv[0:3];
|
|
assign dbg_group12a[16:19] = tlb_ctl_dbg_resv_match_vec_q[0:3]; // tag4
|
|
|
|
assign debug_d[group12_offset + 20] = tlb_ctl_dbg_resv0_tag0_lpid_match;
|
|
assign debug_d[group12_offset + 21] = tlb_ctl_dbg_resv0_tag0_pid_match;
|
|
assign debug_d[group12_offset + 22] = tlb_ctl_dbg_resv0_tag0_as_snoop_match;
|
|
assign debug_d[group12_offset + 23] = tlb_ctl_dbg_resv0_tag0_gs_snoop_match;
|
|
assign debug_d[group12_offset + 24] = tlb_ctl_dbg_resv0_tag0_as_tlbwe_match;
|
|
assign debug_d[group12_offset + 25] = tlb_ctl_dbg_resv0_tag0_gs_tlbwe_match;
|
|
assign debug_d[group12_offset + 26] = tlb_ctl_dbg_resv0_tag0_ind_match;
|
|
assign debug_d[group12_offset + 27] = tlb_ctl_dbg_resv0_tag0_epn_loc_match;
|
|
assign debug_d[group12_offset + 28] = tlb_ctl_dbg_resv0_tag0_epn_glob_match;
|
|
assign debug_d[group12_offset + 29] = tlb_ctl_dbg_resv0_tag0_class_match;
|
|
assign debug_d[group12_offset + 30] = tlb_ctl_dbg_resv1_tag0_lpid_match;
|
|
assign debug_d[group12_offset + 31] = tlb_ctl_dbg_resv1_tag0_pid_match;
|
|
assign debug_d[group12_offset + 32] = tlb_ctl_dbg_resv1_tag0_as_snoop_match;
|
|
assign debug_d[group12_offset + 33] = tlb_ctl_dbg_resv1_tag0_gs_snoop_match;
|
|
assign debug_d[group12_offset + 34] = tlb_ctl_dbg_resv1_tag0_as_tlbwe_match;
|
|
assign debug_d[group12_offset + 35] = tlb_ctl_dbg_resv1_tag0_gs_tlbwe_match;
|
|
assign debug_d[group12_offset + 36] = tlb_ctl_dbg_resv1_tag0_ind_match;
|
|
assign debug_d[group12_offset + 37] = tlb_ctl_dbg_resv1_tag0_epn_loc_match;
|
|
assign debug_d[group12_offset + 38] = tlb_ctl_dbg_resv1_tag0_epn_glob_match;
|
|
assign debug_d[group12_offset + 39] = tlb_ctl_dbg_resv1_tag0_class_match;
|
|
assign debug_d[group12_offset + 40] = tlb_ctl_dbg_resv2_tag0_lpid_match;
|
|
assign debug_d[group12_offset + 41] = tlb_ctl_dbg_resv2_tag0_pid_match;
|
|
assign debug_d[group12_offset + 42] = tlb_ctl_dbg_resv2_tag0_as_snoop_match;
|
|
assign debug_d[group12_offset + 43] = tlb_ctl_dbg_resv2_tag0_gs_snoop_match;
|
|
assign debug_d[group12_offset + 44] = tlb_ctl_dbg_resv2_tag0_as_tlbwe_match;
|
|
assign debug_d[group12_offset + 45] = tlb_ctl_dbg_resv2_tag0_gs_tlbwe_match;
|
|
assign debug_d[group12_offset + 46] = tlb_ctl_dbg_resv2_tag0_ind_match;
|
|
assign debug_d[group12_offset + 47] = tlb_ctl_dbg_resv2_tag0_epn_loc_match;
|
|
assign debug_d[group12_offset + 48] = tlb_ctl_dbg_resv2_tag0_epn_glob_match;
|
|
assign debug_d[group12_offset + 49] = tlb_ctl_dbg_resv2_tag0_class_match;
|
|
assign debug_d[group12_offset + 50] = tlb_ctl_dbg_resv3_tag0_lpid_match;
|
|
assign debug_d[group12_offset + 51] = tlb_ctl_dbg_resv3_tag0_pid_match;
|
|
assign debug_d[group12_offset + 52] = tlb_ctl_dbg_resv3_tag0_as_snoop_match;
|
|
assign debug_d[group12_offset + 53] = tlb_ctl_dbg_resv3_tag0_gs_snoop_match;
|
|
assign debug_d[group12_offset + 54] = tlb_ctl_dbg_resv3_tag0_as_tlbwe_match;
|
|
assign debug_d[group12_offset + 55] = tlb_ctl_dbg_resv3_tag0_gs_tlbwe_match;
|
|
assign debug_d[group12_offset + 56] = tlb_ctl_dbg_resv3_tag0_ind_match;
|
|
assign debug_d[group12_offset + 57] = tlb_ctl_dbg_resv3_tag0_epn_loc_match;
|
|
assign debug_d[group12_offset + 58] = tlb_ctl_dbg_resv3_tag0_epn_glob_match;
|
|
assign debug_d[group12_offset + 59] = tlb_ctl_dbg_resv3_tag0_class_match;
|
|
|
|
assign dbg_group12a[20:59] = debug_q[group12_offset + 20:group12_offset + 59]; // tag1
|
|
|
|
assign dbg_group12a[60:63] = tlb_ctl_dbg_clr_resv_q[0:3]; // tag5
|
|
assign dbg_group12a[64:67] = tlb_ctl_dbg_clr_resv_terms[0:3]; // tag5, threadwise condensed into to tlbivax, tlbilx, tlbwe, ptereload
|
|
|
|
assign dbg_group12a[68:71] = htw_dbg_req_valid_q[0:3];
|
|
assign dbg_group12a[72:75] = htw_dbg_resv_valid_vec[0:3];
|
|
assign dbg_group12a[76:79] = htw_dbg_tag4_clr_resv_q[0:3];
|
|
assign dbg_group12a[80:83] = htw_dbg_tag4_clr_resv_terms[0:3]; // tag4, threadwise condensed into to tlbivax, tlbilx, tlbwe, ptereload
|
|
assign dbg_group12a[84:87] = 4'b0000;
|
|
|
|
// tlb_low_data
|
|
// [0:51] - EPN
|
|
// [52:55] - SIZE (4b)
|
|
// [56:59] - ThdID
|
|
// [60:61] - Class
|
|
// [62] - ExtClass
|
|
// [63] - TID_NZ
|
|
// [64:65] - reserved (2b)
|
|
// [66:73] - 8b for LPID
|
|
// [74:83] - parity 10bits
|
|
assign dbg_group12b[0:83] = tlb_cmp_dbg_tag5_way[0:83]; // tag5 way epn
|
|
assign dbg_group12b[84] = (tlb_cmp_dbg_tag5_lru_dataout[0] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[1] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[2] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[3] & tlb_cmp_dbg_tag5_wayhit[3]); // valid
|
|
assign dbg_group12b[85] = (tlb_cmp_dbg_tag5_lru_dataout[8] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[9] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[10] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[11] & tlb_cmp_dbg_tag5_wayhit[3]); // iprot
|
|
assign dbg_group12b[86] = tlb_cmp_dbg_tag5_lru_dataout[4]; // encoded lru way msb
|
|
assign dbg_group12b[87] = ((~(tlb_cmp_dbg_tag5_lru_dataout[4])) & tlb_cmp_dbg_tag5_lru_dataout[5]) | (tlb_cmp_dbg_tag5_lru_dataout[4] & tlb_cmp_dbg_tag5_lru_dataout[6]); // encoded lru way lsb
|
|
|
|
assign dbg_group12 = (mmucr2[9] == 1'b1) ? dbg_group12b :
|
|
dbg_group12a;
|
|
|
|
// unused tag bits for certain ops are re-purposed as below:
|
|
// unused `tagpos_is def is mas1_v, mas1_iprot for tlbwe, and is pte.valid & 0 for ptereloads
|
|
// unused `tagpos_pt, `tagpos_recform def are mas8_tgs, mas1_ts for tlbwe
|
|
// unused `tagpos_atsel | `tagpos_esel used as indirect entry's thdid to update tlb_entry.thdid for ptereloads
|
|
// unused `tagpos_wq used as htw reserv write enab & dup bits (set in htw) for ptereloads
|
|
// unused esel for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number (1 thru 5)
|
|
// unused "is" for derat,ierat,tlbsx,tlbsrx becomes tlb_seq page size attempted number msb (9 thru 13, or 17 thru 21)
|
|
// unused HES bit for snoops is used as mmucsr0.tlb0fi full invalidate of all non-protected entries
|
|
// unused class is derat ttype for derat miss, 0=load,1=store,2=epid load,3=epid store
|
|
|
|
// type: derat,ierat,tlbsx,tlbsrx,snoop,tlbre,tlbwe,ptereload
|
|
|
|
//group13 (lrat match logic)
|
|
assign dbg_group13a[0] = lrat_dbg_tag1_addr_enable; // tlb_addr_cap_q(1)
|
|
assign dbg_group13a[1] = tlb_ctl_dbg_tag1_valid;
|
|
assign dbg_group13a[2:3] = tlb_ctl_dbg_tag1_thdid[0:1];
|
|
assign dbg_group13a[4:5] = {(tlb_ctl_dbg_tag1_type[0] & tlb_ctl_dbg_tag1_type[1]), (tlb_ctl_dbg_tag1_type[0] & tlb_ctl_dbg_tag1_type[2])}; // tlbsx,tlbre,tlbwe,ptereload
|
|
assign dbg_group13a[6] = tlb_ctl_dbg_tag1_gs;
|
|
assign dbg_group13a[7] = tlb_ctl_dbg_tag1_pr;
|
|
assign dbg_group13a[8] = tlb_ctl_dbg_tag1_atsel;
|
|
assign dbg_group13a[9:11] = lrat_tag3_hit_entry[0:2];
|
|
assign dbg_group13a[12:15] = lrat_tag3_hit_status[0:3]; // hit_status to val,hit,multihit,inval_pgsize
|
|
|
|
assign debug_d[group13_offset + 16] = lrat_dbg_entry0_addr_match; // tag1
|
|
assign debug_d[group13_offset + 17] = lrat_dbg_entry0_lpid_match;
|
|
assign debug_d[group13_offset + 18] = lrat_dbg_entry0_entry_v;
|
|
assign debug_d[group13_offset + 19] = lrat_dbg_entry0_entry_x;
|
|
assign debug_d[group13_offset + 20:group13_offset + 23] = lrat_dbg_entry0_size[0:3];
|
|
assign debug_d[group13_offset + 24] = lrat_dbg_entry1_addr_match; // tag1
|
|
assign debug_d[group13_offset + 25] = lrat_dbg_entry1_lpid_match;
|
|
assign debug_d[group13_offset + 26] = lrat_dbg_entry1_entry_v;
|
|
assign debug_d[group13_offset + 27] = lrat_dbg_entry1_entry_x;
|
|
assign debug_d[group13_offset + 28:group13_offset + 31] = lrat_dbg_entry1_size[0:3];
|
|
assign debug_d[group13_offset + 32] = lrat_dbg_entry2_addr_match; // tag1
|
|
assign debug_d[group13_offset + 33] = lrat_dbg_entry2_lpid_match;
|
|
assign debug_d[group13_offset + 34] = lrat_dbg_entry2_entry_v;
|
|
assign debug_d[group13_offset + 35] = lrat_dbg_entry2_entry_x;
|
|
assign debug_d[group13_offset + 36:group13_offset + 39] = lrat_dbg_entry2_size[0:3];
|
|
assign debug_d[group13_offset + 40] = lrat_dbg_entry3_addr_match; // tag1
|
|
assign debug_d[group13_offset + 41] = lrat_dbg_entry3_lpid_match;
|
|
assign debug_d[group13_offset + 42] = lrat_dbg_entry3_entry_v;
|
|
assign debug_d[group13_offset + 43] = lrat_dbg_entry3_entry_x;
|
|
assign debug_d[group13_offset + 44:group13_offset + 47] = lrat_dbg_entry3_size[0:3];
|
|
assign debug_d[group13_offset + 48] = lrat_dbg_entry4_addr_match; // tag1
|
|
assign debug_d[group13_offset + 49] = lrat_dbg_entry4_lpid_match;
|
|
assign debug_d[group13_offset + 50] = lrat_dbg_entry4_entry_v;
|
|
assign debug_d[group13_offset + 51] = lrat_dbg_entry4_entry_x;
|
|
assign debug_d[group13_offset + 52:group13_offset + 55] = lrat_dbg_entry4_size[0:3];
|
|
assign debug_d[group13_offset + 56] = lrat_dbg_entry5_addr_match; // tag1
|
|
assign debug_d[group13_offset + 57] = lrat_dbg_entry5_lpid_match;
|
|
assign debug_d[group13_offset + 58] = lrat_dbg_entry5_entry_v;
|
|
assign debug_d[group13_offset + 59] = lrat_dbg_entry5_entry_x;
|
|
assign debug_d[group13_offset + 60:group13_offset + 63] = lrat_dbg_entry5_size[0:3];
|
|
assign debug_d[group13_offset + 64] = lrat_dbg_entry6_addr_match; // tag1
|
|
assign debug_d[group13_offset + 65] = lrat_dbg_entry6_lpid_match;
|
|
assign debug_d[group13_offset + 66] = lrat_dbg_entry6_entry_v;
|
|
assign debug_d[group13_offset + 67] = lrat_dbg_entry6_entry_x;
|
|
assign debug_d[group13_offset + 68:group13_offset + 71] = lrat_dbg_entry6_size[0:3];
|
|
assign debug_d[group13_offset + 72] = lrat_dbg_entry7_addr_match; // tag1
|
|
assign debug_d[group13_offset + 73] = lrat_dbg_entry7_lpid_match;
|
|
assign debug_d[group13_offset + 74] = lrat_dbg_entry7_entry_v;
|
|
assign debug_d[group13_offset + 75] = lrat_dbg_entry7_entry_x;
|
|
assign debug_d[group13_offset + 76:group13_offset + 79] = lrat_dbg_entry7_size[0:3];
|
|
|
|
assign dbg_group13a[16:79] = debug_q[group13_offset + 16:group13_offset + 79]; // tag2
|
|
assign dbg_group13a[80:87] = lrat_dbg_tag2_matchline_q[0:7];
|
|
|
|
// tlb_high_data
|
|
// [84] - [0] - X-bit
|
|
// [85:87] - [1:3] - reserved (3b)
|
|
// [88:117] - [4:33] - RPN (30b)
|
|
// [118:119] - [34:35] - R,C
|
|
// [120:121] - [36:37] - WLC (2b)
|
|
// [122] - [38] - ResvAttr
|
|
// [123] - [39] - VF
|
|
// [124] - [40] - IND
|
|
// [125:128] - [41:44] - U0-U3
|
|
// [129:133] - [45:49] - WIMGE
|
|
// [134:135] - [50:51] - UX,SX
|
|
// [136:137] - [52:53] - UW,SW
|
|
// [138:139] - [54:55] - UR,SR
|
|
// [140] - [56] - GS
|
|
// [141] - [57] - TS
|
|
// [142:143] - [58:59] - reserved (2b)
|
|
// [144:149] - [60:65] - 6b TID msbs
|
|
// [150:157] - [66:73] - 8b TID lsbs
|
|
// [158:167] - [74:83] - parity 10bits
|
|
assign dbg_group13b[0:83] = tlb_cmp_dbg_tag5_way[84:167]; // tag5 way rpn
|
|
assign dbg_group13b[84] = (tlb_cmp_dbg_tag5_lru_dataout[0] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[1] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[2] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[3] & tlb_cmp_dbg_tag5_wayhit[3]); // valid
|
|
assign dbg_group13b[85] = (tlb_cmp_dbg_tag5_lru_dataout[8] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[9] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[10] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[11] & tlb_cmp_dbg_tag5_wayhit[3]); // iprot
|
|
assign dbg_group13b[86] = tlb_cmp_dbg_tag5_lru_dataout[4]; // encoded lru way msb
|
|
assign dbg_group13b[87] = ((~(tlb_cmp_dbg_tag5_lru_dataout[4])) & tlb_cmp_dbg_tag5_lru_dataout[5]) | (tlb_cmp_dbg_tag5_lru_dataout[4] & tlb_cmp_dbg_tag5_lru_dataout[6]); // encoded lru way lsb
|
|
|
|
assign dbg_group13 = (mmucr2[9] == 1'b1) ? dbg_group13b :
|
|
dbg_group13a;
|
|
|
|
//group14 (htw control)
|
|
assign dbg_group14a[0:1] = htw_dbg_seq_q[0:1];
|
|
assign dbg_group14a[2:3] = htw_dbg_inptr_q[0:1];
|
|
assign dbg_group14a[4] = htw_dbg_ptereload_ptr_q;
|
|
assign dbg_group14a[5:6] = htw_dbg_lsuptr_q[0:1];
|
|
assign dbg_group14a[7] = htw_lsu_ttype[1];
|
|
assign dbg_group14a[8:9] = htw_dbg_lsu_thdid[0:1]; // encoded
|
|
assign dbg_group14a[10:51] = htw_lsu_addr[22:63];
|
|
assign dbg_group14a[52:54] = htw_dbg_pte0_seq_q[0:2];
|
|
assign dbg_group14a[55:56] = htw_dbg_pte0_score_ptr_q[0:1];
|
|
assign dbg_group14a[57:59] = htw_dbg_pte0_score_cl_offset_q[58:60];
|
|
assign dbg_group14a[60:62] = htw_dbg_pte0_score_error_q[0:2];
|
|
assign dbg_group14a[63:66] = htw_dbg_pte0_score_qwbeat_q[0:3]; // 4 beats of data per CL
|
|
assign dbg_group14a[67] = htw_dbg_pte0_score_pending_q;
|
|
assign dbg_group14a[68] = htw_dbg_pte0_score_ibit_q;
|
|
assign dbg_group14a[69] = htw_dbg_pte0_score_dataval_q;
|
|
assign dbg_group14a[70:72] = htw_dbg_pte1_seq_q[0:2];
|
|
assign dbg_group14a[73:74] = htw_dbg_pte1_score_ptr_q[0:1];
|
|
assign dbg_group14a[75:77] = htw_dbg_pte1_score_cl_offset_q[58:60];
|
|
assign dbg_group14a[78:80] = htw_dbg_pte1_score_error_q[0:2];
|
|
assign dbg_group14a[81:84] = htw_dbg_pte1_score_qwbeat_q[0:3]; // 4 beats of data per CL
|
|
assign dbg_group14a[85] = htw_dbg_pte1_score_pending_q;
|
|
assign dbg_group14a[86] = htw_dbg_pte1_score_ibit_q;
|
|
assign dbg_group14a[87] = htw_dbg_pte1_score_dataval_q;
|
|
|
|
// tlb_low_data
|
|
// [0:51] - EPN
|
|
// [52:55] - SIZE (4b)
|
|
// [56:59] - ThdID
|
|
// [60:61] - Class
|
|
// [62] - ExtClass
|
|
// [63] - TID_NZ
|
|
// [64:65] - reserved (2b)
|
|
// [66:73] - 8b for LPID
|
|
// [74:83] - parity 10bits
|
|
|
|
// tlb_high_data
|
|
// [84] - [0] - X-bit
|
|
// [85:87] - [1:3] - reserved (3b)
|
|
// [88:117] - [4:33] - RPN (30b)
|
|
// [118:119] - [34:35] - R,C
|
|
// [120:121] - [36:37] - WLC (2b)
|
|
// [122] - [38] - ResvAttr
|
|
// [123] - [39] - VF
|
|
// [124] - [40] - IND
|
|
// [125:128] - [41:44] - U0-U3
|
|
// [129:133] - [45:49] - WIMGE
|
|
// [134:135] - [50:51] - UX,SX
|
|
// [136:137] - [52:53] - UW,SW
|
|
// [138:139] - [54:55] - UR,SR
|
|
// [140] - [56] - GS
|
|
// [141] - [57] - TS
|
|
// [142:143] - [58:59] - reserved (2b)
|
|
// [144:149] - [60:65] - 6b TID msbs
|
|
// [150:157] - [66:73] - 8b TID lsbs
|
|
// [158:167] - [74:83] - parity 10bits
|
|
assign dbg_group14b[0] = (tlb_cmp_dbg_tag5_lru_dataout[0] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[1] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[2] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[3] & tlb_cmp_dbg_tag5_wayhit[3]); // valid
|
|
assign dbg_group14b[1] = (tlb_cmp_dbg_tag5_lru_dataout[8] & tlb_cmp_dbg_tag5_wayhit[0]) | (tlb_cmp_dbg_tag5_lru_dataout[9] & tlb_cmp_dbg_tag5_wayhit[1]) | (tlb_cmp_dbg_tag5_lru_dataout[10] & tlb_cmp_dbg_tag5_wayhit[2]) | (tlb_cmp_dbg_tag5_lru_dataout[11] & tlb_cmp_dbg_tag5_wayhit[3]); // iprot
|
|
|
|
assign dbg_group14b[2] = tlb_cmp_dbg_tag5_way[140]; // gs
|
|
assign dbg_group14b[3] = tlb_cmp_dbg_tag5_way[141]; // ts
|
|
assign dbg_group14b[4:11] = tlb_cmp_dbg_tag5_way[66:73]; // tlpid
|
|
assign dbg_group14b[12:25] = tlb_cmp_dbg_tag5_way[144:157]; // tid, 14bits
|
|
assign dbg_group14b[26:45] = tlb_cmp_dbg_tag5_way[32:51]; // epn truncated to lower 20b
|
|
assign dbg_group14b[46:49] = tlb_cmp_dbg_tag5_way[52:55]; // size
|
|
assign dbg_group14b[50:53] = tlb_cmp_dbg_tag5_way[56:59]; // thdid
|
|
assign dbg_group14b[54] = tlb_cmp_dbg_tag5_way[84]; // xbit
|
|
assign dbg_group14b[55] = tlb_cmp_dbg_tag5_way[40]; // ind
|
|
assign dbg_group14b[56:57] = tlb_cmp_dbg_tag5_way[60:61]; // class
|
|
assign dbg_group14b[58:77] = tlb_cmp_dbg_tag5_way[98:117]; // rpn truncated to lower 20b
|
|
assign dbg_group14b[78:81] = tlb_cmp_dbg_tag5_way[130:133]; // imge
|
|
assign dbg_group14b[82:87] = tlb_cmp_dbg_tag5_way[134:139]; // user/sup prot bits
|
|
|
|
assign dbg_group14 = (mmucr2[10] == 1'b1) ? dbg_group14b :
|
|
dbg_group14a;
|
|
|
|
//group15 (ptereload pte)
|
|
assign dbg_group15a[0:1] = htw_dbg_seq_q[0:1];
|
|
assign dbg_group15a[2:4] = htw_dbg_pte0_seq_q[0:2];
|
|
assign dbg_group15a[5:7] = htw_dbg_pte1_seq_q[0:2];
|
|
assign dbg_group15a[8] = htw_lsu_req_valid;
|
|
assign dbg_group15a[9:21] = htw_lsu_addr[48:60];
|
|
assign dbg_group15a[22] = htw_dbg_ptereload_ptr_q;
|
|
assign dbg_group15a[23] = ptereload_req_taken;
|
|
assign dbg_group15a[24:87] = ptereload_req_pte[0:63]; // pte entry
|
|
|
|
assign dbg_group15b[0:73] = tlb_cmp_dbg_tag5_way[0:73]; // tag5 way epn
|
|
assign dbg_group15b[74:77] = tlb_cmp_dbg_tag5_lru_dataout[0:3];
|
|
assign dbg_group15b[78:81] = tlb_cmp_dbg_tag5_lru_dataout[8:11];
|
|
assign dbg_group15b[82] = tlb_cmp_dbg_tag5_lru_dataout[4]; // encoded lsu way msb
|
|
assign dbg_group15b[83] = ((~(tlb_cmp_dbg_tag5_lru_dataout[4])) & tlb_cmp_dbg_tag5_lru_dataout[5]) | (tlb_cmp_dbg_tag5_lru_dataout[4] & tlb_cmp_dbg_tag5_lru_dataout[6]); // encoded lsu way lsb
|
|
assign dbg_group15b[84:87] = tlb_cmp_dbg_tag5_wayhit[0:3];
|
|
|
|
assign dbg_group15 = (mmucr2[10] == 1'b1) ? dbg_group15b :
|
|
dbg_group15a;
|
|
|
|
// trigger group0
|
|
assign trg_group0[0] = (~(tlb_ctl_dbg_seq_idle));
|
|
assign trg_group0[1:2] = tlb_ctl_dbg_tag0_thdid[0:1]; // encoded
|
|
assign trg_group0[3:5] = tlb_ctl_dbg_tag0_type[0:2]; // encoded
|
|
assign trg_group0[6] = (~(inval_dbg_seq_idle));
|
|
assign trg_group0[7] = inval_dbg_seq_snoop_inprogress; // bus snoop
|
|
assign trg_group0[8] = (~(htw_dbg_seq_idle));
|
|
assign trg_group0[9] = (~(htw_dbg_pte0_seq_idle));
|
|
assign trg_group0[10] = (~(htw_dbg_pte1_seq_idle));
|
|
assign trg_group0[11] = tlb_cmp_dbg_tag5_any_exception; // big or gate
|
|
|
|
// trigger group1
|
|
assign trg_group1[0:5] = tlb_ctl_dbg_seq_q[0:5];
|
|
assign trg_group1[6:10] = inval_dbg_seq_q[0:4];
|
|
assign trg_group1[11] = tlb_ctl_dbg_seq_any_done_sig | tlb_ctl_dbg_seq_abort | inval_dbg_seq_snoop_done | inval_dbg_seq_local_done | inval_dbg_seq_tlb0fi_done | inval_dbg_seq_tlbwe_snoop_done;
|
|
|
|
// trigger group2
|
|
assign trg_group2[0] = tlb_req_dbg_ierat_iu5_valid_q;
|
|
assign trg_group2[1] = tlb_req_dbg_derat_ex6_valid_q;
|
|
assign trg_group2[2] = tlb_ctl_dbg_any_tlb_req_sig;
|
|
assign trg_group2[3] = tlb_ctl_dbg_any_req_taken_sig;
|
|
assign trg_group2[4] = tlb_ctl_dbg_seq_any_done_sig | tlb_ctl_dbg_seq_abort;
|
|
assign trg_group2[5] = inval_dbg_ex6_valid; //--------------> need tlbivax/erativax indication?
|
|
assign trg_group2[6] = mmucsr0_tlb0fi;
|
|
assign trg_group2[7] = inval_dbg_snoop_forme;
|
|
assign trg_group2[8] = tlbwe_back_inv_valid;
|
|
assign trg_group2[9] = htw_lsu_req_valid;
|
|
assign trg_group2[10] = inval_dbg_seq_snoop_done | inval_dbg_seq_local_done | inval_dbg_seq_tlb0fi_done | inval_dbg_seq_tlbwe_snoop_done;
|
|
assign trg_group2[11] = |(mm_xu_lsu_req);
|
|
|
|
// trigger group3
|
|
assign trg_group3a[0] = spr_dbg_slowspr_val_int;
|
|
assign trg_group3a[1] = spr_dbg_slowspr_rw_int;
|
|
assign trg_group3a[2:3] = spr_dbg_slowspr_etid_int;
|
|
assign trg_group3a[4] = spr_dbg_match_64b;
|
|
assign trg_group3a[5] = spr_dbg_match_any_mmu; // int phase
|
|
assign trg_group3a[6] = spr_dbg_match_any_mas;
|
|
assign trg_group3a[7] = spr_dbg_match_mmucr0 | spr_dbg_match_mmucr1 | spr_dbg_match_mmucr2 | spr_dbg_match_mmucr3;
|
|
assign trg_group3a[8] = spr_dbg_match_pid | spr_dbg_match_lpidr;
|
|
assign trg_group3a[9] = spr_dbg_match_lper | spr_dbg_match_lperu;
|
|
assign trg_group3a[10] = spr_dbg_slowspr_val_out;
|
|
assign trg_group3a[11] = spr_dbg_slowspr_done_out;
|
|
|
|
assign trg_group3b[0] = tlb_htw_req_valid;
|
|
assign trg_group3b[1:2] = htw_dbg_seq_q[0:1];
|
|
assign trg_group3b[3:5] = htw_dbg_pte0_seq_q[0:2];
|
|
assign trg_group3b[6:8] = htw_dbg_pte1_seq_q[0:2];
|
|
assign trg_group3b[9] = htw_dbg_pte0_reld_for_me_tm1 | htw_dbg_pte1_reld_for_me_tm1;
|
|
assign trg_group3b[10] = |(htw_dbg_pte0_score_error_q | htw_dbg_pte1_score_error_q);
|
|
assign trg_group3b[11] = tlb_cmp_dbg_tag5_any_exception;
|
|
|
|
assign trg_group3 = (mmucr2[11] == 1'b1) ? trg_group3b :
|
|
trg_group3a;
|
|
|
|
tri_debug_mux16 #(.DBG_WIDTH(`DEBUG_TRACE_WIDTH)) dbg_mux0(
|
|
.select_bits(pc_mm_debug_mux1_ctrls_loc_q),
|
|
.trace_data_in(debug_bus_in_q),
|
|
|
|
.dbg_group0(dbg_group0[0:31]),
|
|
.dbg_group1(dbg_group1[0:31]),
|
|
.dbg_group2(dbg_group2[0:31]),
|
|
.dbg_group3(dbg_group3[0:31]),
|
|
.dbg_group4(dbg_group4[0:31]),
|
|
.dbg_group5(dbg_group5[0:31]),
|
|
.dbg_group6(dbg_group6[0:31]),
|
|
.dbg_group7(dbg_group7[0:31]),
|
|
.dbg_group8(dbg_group8[0:31]),
|
|
.dbg_group9(dbg_group9[0:31]),
|
|
.dbg_group10(dbg_group10[0:31]),
|
|
.dbg_group11(dbg_group11[0:31]),
|
|
.dbg_group12(dbg_group12[0:31]),
|
|
.dbg_group13(dbg_group13[0:31]),
|
|
.dbg_group14(dbg_group14[0:31]),
|
|
.dbg_group15(dbg_group15[0:31]),
|
|
|
|
.trace_data_out(trace_data_out_d),
|
|
|
|
// Instruction Trace (HTM) Control Signals:
|
|
// 0 - ac_an_coretrace_first_valid
|
|
// 1 - ac_an_coretrace_valid
|
|
// 2:3 - ac_an_coretrace_type[0:1]
|
|
.coretrace_ctrls_in(coretrace_ctrls_in_q), // input [0:3]
|
|
.coretrace_ctrls_out(coretrace_ctrls_out_d) // output [0:3]
|
|
|
|
);
|
|
|
|
assign debug_bus_out = trace_data_out_q;
|
|
assign coretrace_ctrls_out = coretrace_ctrls_out_q;
|
|
|
|
|
|
// unused spare signal assignments
|
|
assign unused_dc[0] = tlb_mas_thdid[0];
|
|
assign unused_dc[1] = lrat_mas_thdid[0];
|
|
assign unused_dc[2] = lrat_mas_thdid[0];
|
|
assign unused_dc[3] = inval_dbg_lsu_tokens_q[0];
|
|
assign unused_dc[4] = tlb_cmp_dbg_tag4[82]; // `tagpos_derat, not used for type encoding of '0'
|
|
assign unused_dc[5] = tlb_cmp_dbg_tag4[106]; // `tagpos_lrat
|
|
|
|
assign unused_dc[6] = |(tlb_cmp_dbg_tag4[0:7]); // `tagpos_epn
|
|
assign unused_dc[7] = |(tlb_cmp_dbg_tag4[8:15]);
|
|
assign unused_dc[8] = tlb_cmp_dbg_tag5_wayhit[4];
|
|
|
|
generate
|
|
if (`TLB_TAG_WIDTH > 110)
|
|
begin : itagExist
|
|
assign unused_dc[9] = debug_q[23] | |(tlb_cmp_dbg_tag4[110:`TLB_TAG_WIDTH - 1]); // tag bits
|
|
end
|
|
endgenerate
|
|
|
|
generate
|
|
if (`TLB_TAG_WIDTH < 111)
|
|
begin : itagNExist
|
|
assign unused_dc[9] = debug_q[23]; // tag bits
|
|
end
|
|
endgenerate
|
|
|
|
assign unused_dc[10] = |(trigger_q[0:47]);
|
|
assign unused_dc[11] = tlb_cmp_dbg_tag5_lru_dataout[7]; // lru parity bit
|
|
|
|
//---------------------------------------------------------------------
|
|
// Latches
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(0)) trace_bus_enable_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(tiup),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.scin(siv[trace_bus_enable_offset]),
|
|
.scout(sov[trace_bus_enable_offset]),
|
|
.din(pc_mm_trace_bus_enable),
|
|
.dout(pc_mm_trace_bus_enable_q)
|
|
);
|
|
|
|
//========================================================================================
|
|
tri_rlmreg_p #(.WIDTH(11), .INIT(0), .NEEDS_SRESET(0)) debug_mux1_ctrls_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.scin(siv[debug_mux1_ctrls_offset:debug_mux1_ctrls_offset + 11 - 1]),
|
|
.scout(sov[debug_mux1_ctrls_offset:debug_mux1_ctrls_offset + 11 - 1]),
|
|
.din(pc_mm_debug_mux1_ctrls),
|
|
.dout(pc_mm_debug_mux1_ctrls_q)
|
|
);
|
|
|
|
tri_rlmreg_p #(.WIDTH(11), .INIT(0), .NEEDS_SRESET(0)) debug_mux1_ctrls_loc_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.scin(siv[debug_mux1_ctrls_loc_offset:debug_mux1_ctrls_loc_offset + 11 - 1]),
|
|
.scout(sov[debug_mux1_ctrls_loc_offset:debug_mux1_ctrls_loc_offset + 11 - 1]),
|
|
.din(pc_mm_debug_mux1_ctrls_loc_d),
|
|
.dout(pc_mm_debug_mux1_ctrls_loc_q)
|
|
);
|
|
//========================================================================================
|
|
|
|
tri_rlmreg_p #(.WIDTH(`DEBUG_TRIGGER_WIDTH), .INIT(0)) trigger_data_latch(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.scin(siv[trigger_data_out_offset:trigger_data_out_offset + 12 - 1]),
|
|
.scout(sov[trigger_data_out_offset:trigger_data_out_offset + 12 - 1]),
|
|
.din({12{1'b0}}),
|
|
.dout(trigger_data_out_q)
|
|
);
|
|
|
|
|
|
tri_rlmreg_p #(.WIDTH(`DEBUG_TRACE_WIDTH), .INIT(0)) trace_data_out_latch(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.scin(siv[trace_data_out_offset:trace_data_out_offset + `DEBUG_TRACE_WIDTH - 1]),
|
|
.scout(sov[trace_data_out_offset:trace_data_out_offset + `DEBUG_TRACE_WIDTH - 1]),
|
|
.din(trace_data_out_d),
|
|
.dout(trace_data_out_q)
|
|
);
|
|
|
|
|
|
tri_rlmreg_p #(.WIDTH(8), .INIT(0)) trace_data_out_int_latch(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.scin(siv[trace_data_out_int_offset:trace_data_out_int_offset + 8 - 1]),
|
|
.scout(sov[trace_data_out_int_offset:trace_data_out_int_offset + 8 - 1]),
|
|
.din(trace_data_out_d[0:7]),
|
|
.dout(trace_data_out_int_q)
|
|
);
|
|
|
|
tri_rlmreg_p #(.WIDTH(4), .INIT(0)) coretrace_ctrls_out_latch(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.thold_b(pc_func_slp_sl_thold_0_b),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.scin(siv[coretrace_ctrls_out_offset:coretrace_ctrls_out_offset + 4 - 1]),
|
|
.scout(sov[coretrace_ctrls_out_offset:coretrace_ctrls_out_offset + 4 - 1]),
|
|
.din(coretrace_ctrls_out_d),
|
|
.dout(coretrace_ctrls_out_q)
|
|
);
|
|
|
|
|
|
tri_regk #(.WIDTH(DEBUG_LATCH_WIDTH), .INIT(0), .NEEDS_SRESET(0)) debug_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b),
|
|
.scin(unused_debug_latch_scan),
|
|
.scout(unused_debug_latch_scan),
|
|
.din(debug_d),
|
|
.dout(debug_q)
|
|
);
|
|
|
|
|
|
tri_regk #(.WIDTH(TRIGGER_LATCH_WIDTH), .INIT(0), .NEEDS_SRESET(0)) trigger_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b),
|
|
.scin(unused_trigger_latch_scan),
|
|
.scout(unused_trigger_latch_scan),
|
|
.din(trigger_d),
|
|
.dout(trigger_q)
|
|
);
|
|
|
|
|
|
tri_regk #(.WIDTH(`DEBUG_TRACE_WIDTH), .INIT(0), .NEEDS_SRESET(0)) debug_bus_in_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.sg(pc_sg_0),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b),
|
|
.scin(unused_busin_latch_scan),
|
|
.scout(unused_busin_latch_scan),
|
|
.din(debug_bus_in),
|
|
.dout(debug_bus_in_q)
|
|
);
|
|
|
|
|
|
tri_regk #(.WIDTH(`DEBUG_TRIGGER_WIDTH), .INIT(0), .NEEDS_SRESET(0)) trace_triggers_in_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.sg(pc_sg_0),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b),
|
|
.scin(unused_trigin_latch_scan),
|
|
.scout(unused_trigin_latch_scan),
|
|
.din({12{1'b0}}),
|
|
.dout(trace_triggers_in_q)
|
|
);
|
|
|
|
tri_regk #(.WIDTH(4), .INIT(0), .NEEDS_SRESET(0)) coretrace_ctrls_in_latch(
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.act(pc_mm_trace_bus_enable_q),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.sg(pc_sg_0),
|
|
.d_mode(lcb_d_mode_dc),
|
|
.delay_lclkr(lcb_delay_lclkr_dc),
|
|
.mpw1_b(lcb_mpw1_dc_b),
|
|
.mpw2_b(lcb_mpw2_dc_b),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b),
|
|
.scin(unused_coretrace_ctrls_in_latch_scan),
|
|
.scout(unused_coretrace_ctrls_in_latch_scan),
|
|
.din(coretrace_ctrls_in),
|
|
.dout(coretrace_ctrls_in_q)
|
|
);
|
|
|
|
//-----------------------------------------------
|
|
// pervasive
|
|
//-----------------------------------------------
|
|
|
|
|
|
tri_plat #(.WIDTH(4)) perv_2to1_plat(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.flush(tc_ac_ccflush_dc),
|
|
.din( {pc_func_slp_sl_thold_2, pc_func_slp_nsl_thold_2, pc_sg_2, pc_fce_2} ),
|
|
.q( {pc_func_slp_sl_thold_1, pc_func_slp_nsl_thold_1, pc_sg_1, pc_fce_1} )
|
|
);
|
|
|
|
|
|
tri_plat #(.WIDTH(4)) perv_1to0_plat(
|
|
.vd(vdd),
|
|
.gd(gnd),
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.flush(tc_ac_ccflush_dc),
|
|
.din( {pc_func_slp_sl_thold_1, pc_func_slp_nsl_thold_1, pc_sg_1, pc_fce_1} ),
|
|
.q( {pc_func_slp_sl_thold_0, pc_func_slp_nsl_thold_0, pc_sg_0, pc_fce_0} )
|
|
);
|
|
|
|
|
|
tri_lcbor perv_sl_lcbor(
|
|
.clkoff_b(lcb_clkoff_dc_b),
|
|
.thold(pc_func_slp_sl_thold_0),
|
|
.sg(pc_sg_0),
|
|
.act_dis(lcb_act_dis_dc),
|
|
.force_t(pc_func_slp_sl_force),
|
|
.thold_b(pc_func_slp_sl_thold_0_b)
|
|
);
|
|
|
|
|
|
tri_lcbor perv_nsl_lcbor(
|
|
.clkoff_b(lcb_clkoff_dc_b),
|
|
.thold(pc_func_slp_nsl_thold_0),
|
|
.sg(pc_fce_0),
|
|
.act_dis(tidn),
|
|
.force_t(pc_func_slp_nsl_force),
|
|
.thold_b(pc_func_slp_nsl_thold_0_b)
|
|
);
|
|
|
|
//---------------------------------------------------------------------
|
|
// Scan
|
|
//---------------------------------------------------------------------
|
|
assign siv[0:scan_right] = {sov[1:scan_right], scan_in};
|
|
assign scan_out = sov[0];
|
|
|
|
|
|
endmodule
|