1 |
2 |
dmitryr |
/*
|
2 |
|
|
* ========== Copyright Header Begin ==========================================
|
3 |
|
|
*
|
4 |
|
|
* OpenSPARC T1 Processor File: ifu.h
|
5 |
|
|
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
|
6 |
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
|
7 |
|
|
*
|
8 |
|
|
* The above named program is free software; you can redistribute it and/or
|
9 |
|
|
* modify it under the terms of the GNU General Public
|
10 |
|
|
* License version 2 as published by the Free Software Foundation.
|
11 |
|
|
*
|
12 |
|
|
* The above named program is distributed in the hope that it will be
|
13 |
|
|
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15 |
|
|
* General Public License for more details.
|
16 |
|
|
*
|
17 |
|
|
* You should have received a copy of the GNU General Public
|
18 |
|
|
* License along with this work; if not, write to the Free Software
|
19 |
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
20 |
|
|
*
|
21 |
|
|
* ========== Copyright Header End ============================================
|
22 |
|
|
*/
|
23 |
|
|
////////////////////////////////////////////////////////////////////////
|
24 |
|
|
/*
|
25 |
|
|
//
|
26 |
|
|
// Module Name: ifu.h
|
27 |
|
|
// Description:
|
28 |
|
|
// All ifu defines
|
29 |
|
|
*/
|
30 |
|
|
|
31 |
|
|
//--------------------------------------------
|
32 |
|
|
// Icache Values in IFU::ICD/ICV/ICT/FDP/IFQDP
|
33 |
|
|
//--------------------------------------------
|
34 |
|
|
// Set Values
|
35 |
|
|
`define IC_SZ 16384
|
36 |
|
|
// IC_IDX_HI = log(icache_size/4ways) - 1
|
37 |
|
|
`define IC_IDX_HI 11
|
38 |
|
|
|
39 |
|
|
// !!IMPORTANT!! a change to IC_LINE_SZ will mean a change to the code as
|
40 |
|
|
// well. Unfortunately this has not been properly parametrized.
|
41 |
|
|
// Changing the IC_LINE_SZ param alone is *not* enough.
|
42 |
|
|
`define IC_LINE_SZ 32
|
43 |
|
|
|
44 |
|
|
// !!IMPORTANT!! a change to IC_TAG_HI will mean a change to the code as
|
45 |
|
|
// well. Changing the IC_TAG_HI param alone is *not* enough to
|
46 |
|
|
// change the PA range.
|
47 |
|
|
// highest bit of PA
|
48 |
|
|
`define IC_TAG_HI 39
|
49 |
|
|
|
50 |
|
|
|
51 |
|
|
// Derived Values
|
52 |
|
|
// 4095
|
53 |
|
|
`define IC_ARR_HI (`IC_SZ/4 - 1)
|
54 |
|
|
|
55 |
|
|
// number of entries - 1 = 511
|
56 |
|
|
`define IC_ENTRY_HI ((`IC_SZ/`IC_LINE_SZ) - 1)
|
57 |
|
|
|
58 |
|
|
// 12
|
59 |
|
|
`define IC_TAG_LO (`IC_IDX_HI + 1)
|
60 |
|
|
|
61 |
|
|
// 28
|
62 |
|
|
`define IC_TAG_SZ (`IC_TAG_HI - `IC_IDX_HI)
|
63 |
|
|
|
64 |
|
|
// 7
|
65 |
|
|
`define IC_IDX_SZ (`IC_IDX_HI - 4)
|
66 |
|
|
|
67 |
|
|
// tags for all 4 ways + parity
|
68 |
|
|
// 116
|
69 |
|
|
`define IC_TAG_ALL ((`IC_TAG_SZ * 4) + 4)
|
70 |
|
|
|
71 |
|
|
// 115
|
72 |
|
|
`define IC_TAG_ALL_HI ((`IC_TAG_SZ * 4) + 3)
|
73 |
|
|
|
74 |
|
|
|
75 |
|
|
//----------------------------------------------------------------------
|
76 |
|
|
// For thread scheduler in IFU::DTU::SWL
|
77 |
|
|
//----------------------------------------------------------------------
|
78 |
|
|
// thread states: (thr_state[4:0])
|
79 |
|
|
`define THRFSM_DEAD 5'b00000
|
80 |
|
|
`define THRFSM_IDLE 5'b00000
|
81 |
|
|
`define THRFSM_HALT 5'b00010
|
82 |
|
|
`define THRFSM_RDY 5'b11001
|
83 |
|
|
`define THRFSM_SPEC_RDY 5'b10011
|
84 |
|
|
`define THRFSM_RUN 5'b00101
|
85 |
|
|
`define THRFSM_SPEC_RUN 5'b00111
|
86 |
|
|
`define THRFSM_WAIT 5'b00001
|
87 |
|
|
|
88 |
|
|
// thread configuration register bit fields
|
89 |
|
|
`define TCR_READY 4
|
90 |
|
|
`define TCR_URDY 3
|
91 |
|
|
`define TCR_RUNNING 2
|
92 |
|
|
`define TCR_SPEC 1
|
93 |
|
|
`define TCR_ACTIVE 0
|
94 |
|
|
|
95 |
|
|
|
96 |
|
|
//----------------------------------------------------------------------
|
97 |
|
|
// For MIL fsm in IFU::IFQ
|
98 |
|
|
//----------------------------------------------------------------------
|
99 |
|
|
`define MILFSM_NULL 4'b0000
|
100 |
|
|
`define MILFSM_WAIT 4'b1000
|
101 |
|
|
`define MILFSM_REQ 4'b1100
|
102 |
|
|
`define MILFSM_FILL0 4'b1001
|
103 |
|
|
`define MILFSM_FILL1 4'b1011
|
104 |
|
|
|
105 |
|
|
`define MIL_V 3
|
106 |
|
|
`define MIL_R 2
|
107 |
|
|
`define MIL_A 1
|
108 |
|
|
`define MIL_F 0
|
109 |
|
|
|
110 |
|
|
//---------------------------------------------------
|
111 |
|
|
// Interrupt Block
|
112 |
|
|
//---------------------------------------------------
|
113 |
|
|
`define INT_VEC_HI 5
|
114 |
|
|
`define INT_VEC_LO 0
|
115 |
|
|
`define INT_THR_HI 12
|
116 |
|
|
`define INT_THR_LO 8
|
117 |
|
|
`define INT_TYPE_HI 17
|
118 |
|
|
`define INT_TYPE_LO 16
|
119 |
|
|
|
120 |
|
|
//-------------------------------------
|
121 |
|
|
// IFQ
|
122 |
|
|
//-------------------------------------
|
123 |
|
|
// valid bit plus ifill
|
124 |
|
|
`define CPX_IFILLPKT {1'b1, `IFILL_RET}
|
125 |
|
|
`define CPX_INVPKT {1'b1, `INV_RET}
|
126 |
|
|
`define CPX_STRPKT {1'b1, `ST_ACK}
|
127 |
|
|
`define CPX_STRMACK {1'b1, `STRST_ACK}
|
128 |
|
|
`define CPX_EVPKT {1'b1, `EVICT_REQ}
|
129 |
|
|
`define CPX_LDPKT {1'b1, `LOAD_RET}
|
130 |
|
|
`define CPX_ERRPKT {1'b1, `ERR_RET}
|
131 |
|
|
`define CPX_FREQPKT {1'b1, `FWD_RQ_RET}
|
132 |
|
|
|
133 |
|
|
`define CPX_REQFIELD `CPX_RQ_HI:`CPX_RQ_LO
|
134 |
|
|
`define CPX_THRFIELD `CPX_TH_HI:`CPX_TH_LO
|
135 |
|
|
`define CPX_RQ_SIZE (`CPX_RQ_HI - `CPX_RQ_LO + 1)
|
136 |
|
|
|
137 |
|
|
//`ifdef SPARC_L2_64B
|
138 |
|
|
`define BANK_ID_HI 7
|
139 |
|
|
`define BANK_ID_LO 6
|
140 |
|
|
//`else
|
141 |
|
|
//`define BANK_ID_HI 8
|
142 |
|
|
//`define BANK_ID_LO 7
|
143 |
|
|
//`endif
|
144 |
|
|
|
145 |
|
|
//`define CPX_INV_PA_HI 116
|
146 |
|
|
//`define CPX_INV_PA_LO 112
|
147 |
|
|
|
148 |
|
|
`define IFU_ASI_VA_HI 17
|
149 |
|
|
`define IFU_ASI_DATA_HI 47
|
150 |
|
|
|
151 |
|
|
`define ICT_FILL_BITS (32 - `IC_TAG_SZ)
|
152 |
|
|
`define ICV_IDX_SZ (`IC_IDX_HI - 5)
|
153 |
|
|
|
154 |
|
|
//----------------------------------------
|
155 |
|
|
// IFU Traps
|
156 |
|
|
//----------------------------------------
|
157 |
|
|
// precise
|
158 |
|
|
`define INST_ACC_EXC 9'h008
|
159 |
|
|
`define INST_ACC_ERR 9'h00a
|
160 |
|
|
`define CORR_ECC_ERR 9'h063
|
161 |
|
|
`define DATA_ACC_ERR 9'h032
|
162 |
|
|
`define DATA_ERR 9'h078
|
163 |
|
|
`define ASYN_DATA_ERR 9'h040
|
164 |
|
|
`define INST_ACC_MMU_MS 9'h009
|
165 |
|
|
`define FAST_MMU_MS 9'h064
|
166 |
|
|
`define PRIV_OPC 9'h011
|
167 |
|
|
`define ILL_INST 9'h010
|
168 |
|
|
`define SIR 9'h004
|
169 |
|
|
`define FP_DISABLED 9'h020
|
170 |
|
|
`define REAL_TRANS_MS 9'h03e
|
171 |
|
|
`define INST_BRK_PT 9'h076
|
172 |
|
|
|
173 |
|
|
// disrupting
|
174 |
|
|
`define SPU_MAINT 9'h074
|
175 |
|
|
`define SPU_ENCINT 9'h070
|
176 |
|
|
`define HSTICK_CMP 9'h05e
|
177 |
|
|
`define RESUMABLE_ERR 9'h07e
|
178 |
|
|
|
179 |
|
|
|
180 |
|
|
|