blob: 7b3d1f1040529e3b60d19232f5e2645f019b6d57 [file] [log] [blame] [edit]
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T1 Processor File: ifu.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
////////////////////////////////////////////////////////////////////////
/*
//
// Module Name: ifu.h
// Description:
// All ifu defines
*/
//--------------------------------------------
// Icache Values in IFU::ICD/ICV/ICT/FDP/IFQDP
//--------------------------------------------
// Set Values
`define IC_SZ 16384
// IC_IDX_HI = log(icache_size/4ways) - 1
`define IC_IDX_HI 11
// !!IMPORTANT!! a change to IC_LINE_SZ will mean a change to the code as
// well. Unfortunately this has not been properly parametrized.
// Changing the IC_LINE_SZ param alone is *not* enough.
`define IC_LINE_SZ 32
// !!IMPORTANT!! a change to IC_TAG_HI will mean a change to the code as
// well. Changing the IC_TAG_HI param alone is *not* enough to
// change the PA range.
// highest bit of PA
`define IC_TAG_HI 39
// Derived Values
// 4095
`define IC_ARR_HI (`IC_SZ/4 - 1)
// number of entries - 1 = 511
`define IC_ENTRY_HI ((`IC_SZ/`IC_LINE_SZ) - 1)
// 12
`define IC_TAG_LO (`IC_IDX_HI + 1)
// 28
`define IC_TAG_SZ (`IC_TAG_HI - `IC_IDX_HI)
// 7
`define IC_IDX_SZ (`IC_IDX_HI - 4)
// tags for all 4 ways + parity
// 116
`define IC_TAG_ALL ((`IC_TAG_SZ * 4) + 4)
// 115
`define IC_TAG_ALL_HI ((`IC_TAG_SZ * 4) + 3)
//----------------------------------------------------------------------
// For thread scheduler in IFU::DTU::SWL
//----------------------------------------------------------------------
// thread states: (thr_state[4:0])
`define THRFSM_DEAD 5'b00000
`define THRFSM_IDLE 5'b00000
`define THRFSM_HALT 5'b00010
`define THRFSM_RDY 5'b11001
`define THRFSM_SPEC_RDY 5'b10011
`define THRFSM_RUN 5'b00101
`define THRFSM_SPEC_RUN 5'b00111
`define THRFSM_WAIT 5'b00001
// thread configuration register bit fields
`define TCR_READY 4
`define TCR_URDY 3
`define TCR_RUNNING 2
`define TCR_SPEC 1
`define TCR_ACTIVE 0
//----------------------------------------------------------------------
// For MIL fsm in IFU::IFQ
//----------------------------------------------------------------------
`define MILFSM_NULL 4'b0000
`define MILFSM_WAIT 4'b1000
`define MILFSM_REQ 4'b1100
`define MILFSM_FILL0 4'b1001
`define MILFSM_FILL1 4'b1011
`define MIL_V 3
`define MIL_R 2
`define MIL_A 1
`define MIL_F 0
//---------------------------------------------------
// Interrupt Block
//---------------------------------------------------
`define INT_VEC_HI 5
`define INT_VEC_LO 0
`define INT_THR_HI 12
`define INT_THR_LO 8
`define INT_TYPE_HI 17
`define INT_TYPE_LO 16
//-------------------------------------
// IFQ
//-------------------------------------
// valid bit plus ifill
`define CPX_IFILLPKT {1'b1, `IFILL_RET}
`define CPX_INVPKT {1'b1, `INV_RET}
`define CPX_STRPKT {1'b1, `ST_ACK}
`define CPX_STRMACK {1'b1, `STRST_ACK}
`define CPX_EVPKT {1'b1, `EVICT_REQ}
`define CPX_LDPKT {1'b1, `LOAD_RET}
`define CPX_ERRPKT {1'b1, `ERR_RET}
`define CPX_FREQPKT {1'b1, `FWD_RQ_RET}
`define CPX_REQFIELD `CPX_RQ_HI:`CPX_RQ_LO
`define CPX_THRFIELD `CPX_TH_HI:`CPX_TH_LO
`define CPX_RQ_SIZE (`CPX_RQ_HI - `CPX_RQ_LO + 1)
//`ifdef SPARC_L2_64B
`define BANK_ID_HI 7
`define BANK_ID_LO 6
//`else
//`define BANK_ID_HI 8
//`define BANK_ID_LO 7
//`endif
//`define CPX_INV_PA_HI 116
//`define CPX_INV_PA_LO 112
`define IFU_ASI_VA_HI 17
`define IFU_ASI_DATA_HI 47
`define ICT_FILL_BITS (32 - `IC_TAG_SZ)
`define ICV_IDX_SZ (`IC_IDX_HI - 5)
//----------------------------------------
// IFU Traps
//----------------------------------------
// precise
`define INST_ACC_EXC 9'h008
`define INST_ACC_ERR 9'h00a
`define CORR_ECC_ERR 9'h063
`define DATA_ACC_ERR 9'h032
`define DATA_ERR 9'h078
`define ASYN_DATA_ERR 9'h040
`define INST_ACC_MMU_MS 9'h009
`define FAST_MMU_MS 9'h064
`define PRIV_OPC 9'h011
`define ILL_INST 9'h010
`define SIR 9'h004
`define FP_DISABLED 9'h020
`define REAL_TRANS_MS 9'h03e
`define INST_BRK_PT 9'h076
// disrupting
`define SPU_MAINT 9'h074
`define SPU_ENCINT 9'h070
`define HSTICK_CMP 9'h05e
`define RESUMABLE_ERR 9'h07e