OpenCores
URL https://opencores.org/ocsvn/core_arm/core_arm/trunk

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [sparc/] [sparcv8.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tarookumic
 
2
 
3
 
4
 
5
----------------------------------------------------------------------------
6
--  This file is a part of the LEON VHDL model
7
--  Copyright (C) 1999  European Space Agency (ESA)
8
--
9
--  This library is free software; you can redistribute it and/or
10
--  modify it under the terms of the GNU Lesser General Public
11
--  License as published by the Free Software Foundation; either
12
--  version 2 of the License, or (at your option) any later version.
13
--
14
--  See the file COPYING.LGPL for the full details of the license.
15
 
16
 
17
-----------------------------------------------------------------------------
18
-- Package:     sparcv8
19
-- File:        sparcv8.vhd
20
-- Author:      Jiri Gaisler - ESA/ESTEC
21
-- Description: Package with SPARC V8 instruction definitions
22
------------------------------------------------------------------------------
23
-- Version control:
24
-- 01-09-1997:  First implemetation
25
-- 26-09-1999:  Release 1.0
26
------------------------------------------------------------------------------
27
 
28
library IEEE;
29
use IEEE.std_logic_1164.all;
30
use IEEE.std_logic_arith.conv_unsigned;
31
use work.leon_config.all;
32
 
33
package sparcv8 is
34
 
35
-- These are computed automatically - do not change!!
36
constant CWPMIN : std_logic_vector(NWINLOG2-1  downto 0) := (others => '0');
37
constant CWPMAX : std_logic_vector(NWINLOG2-1  downto 0) :=
38
        std_logic_vector(conv_unsigned(NWINDOWS-1, NWINLOG2));
39
constant R0ADDR : std_logic_vector(RABITS-5  downto 0) :=
40
        std_logic_vector(conv_unsigned(NWINDOWS + FPREG/16, RABITS-4));
41
constant F0ADDR : std_logic_vector(RABITS-5  downto 0) :=
42
        std_logic_vector(conv_unsigned(NWINDOWS, RABITS-4));
43
 
44
-- OP codes (INST[31..30])
45
constant CALL     : std_logic_vector(1 downto 0) := "01";
46
constant FMT2     : std_logic_vector(1 downto 0) := "00";
47
constant FMT3     : std_logic_vector(1 downto 0) := "10";
48
constant LDST     : std_logic_vector(1 downto 0) := "11";
49
 
50
-- OP2 codes (INST[31..30])
51
constant UNIMP    : std_logic_vector(2 downto 0) := "000";
52
constant BICC     : std_logic_vector(2 downto 0) := "010";
53
constant SETHI    : std_logic_vector(2 downto 0) := "100";
54
constant FBFCC    : std_logic_vector(2 downto 0) := "110";
55
constant CBCCC    : std_logic_vector(2 downto 0) := "111";
56
 
57
-- OP3 codes (INST[24..19])
58
constant IADD     : std_logic_vector(5 downto 0) := "000000";
59
constant IAND     : std_logic_vector(5 downto 0) := "000001";
60
constant IOR      : std_logic_vector(5 downto 0) := "000010";
61
constant IXOR     : std_logic_vector(5 downto 0) := "000011";
62
constant ISUB     : std_logic_vector(5 downto 0) := "000100";
63
constant ANDN     : std_logic_vector(5 downto 0) := "000101";
64
constant ORN      : std_logic_vector(5 downto 0) := "000110";
65
constant IXNOR    : std_logic_vector(5 downto 0) := "000111";
66
constant ADDX     : std_logic_vector(5 downto 0) := "001000";
67
constant UMUL     : std_logic_vector(5 downto 0) := "001010";
68
constant SMUL     : std_logic_vector(5 downto 0) := "001011";
69
constant SUBX     : std_logic_vector(5 downto 0) := "001100";
70
constant UDIV     : std_logic_vector(5 downto 0) := "001110";
71
constant SDIV     : std_logic_vector(5 downto 0) := "001111";
72
constant ADDCC    : std_logic_vector(5 downto 0) := "010000";
73
constant ANDCC    : std_logic_vector(5 downto 0) := "010001";
74
constant ORCC     : std_logic_vector(5 downto 0) := "010010";
75
constant XORCC    : std_logic_vector(5 downto 0) := "010011";
76
constant SUBCC    : std_logic_vector(5 downto 0) := "010100";
77
constant ANDNCC   : std_logic_vector(5 downto 0) := "010101";
78
constant ORNCC    : std_logic_vector(5 downto 0) := "010110";
79
constant XNORCC   : std_logic_vector(5 downto 0) := "010111";
80
constant ADDXCC   : std_logic_vector(5 downto 0) := "011000";
81
constant UMULCC   : std_logic_vector(5 downto 0) := "011010";
82
constant SMULCC   : std_logic_vector(5 downto 0) := "011011";
83
constant SUBXCC   : std_logic_vector(5 downto 0) := "011100";
84
constant UDIVCC   : std_logic_vector(5 downto 0) := "011110";
85
constant SDIVCC   : std_logic_vector(5 downto 0) := "011111";
86
constant TADDCC   : std_logic_vector(5 downto 0) := "100000";
87
constant TSUBCC   : std_logic_vector(5 downto 0) := "100001";
88
constant TADDCCTV : std_logic_vector(5 downto 0) := "100010";
89
constant TSUBCCTV : std_logic_vector(5 downto 0) := "100011";
90
constant MULSCC   : std_logic_vector(5 downto 0) := "100100";
91
constant ISLL     : std_logic_vector(5 downto 0) := "100101";
92
constant ISRL     : std_logic_vector(5 downto 0) := "100110";
93
constant ISRA     : std_logic_vector(5 downto 0) := "100111";
94
constant RDY      : std_logic_vector(5 downto 0) := "101000";
95
constant RDPSR    : std_logic_vector(5 downto 0) := "101001";
96
constant RDWIM    : std_logic_vector(5 downto 0) := "101010";
97
constant RDTBR    : std_logic_vector(5 downto 0) := "101011";
98
constant WRY      : std_logic_vector(5 downto 0) := "110000";
99
constant WRPSR    : std_logic_vector(5 downto 0) := "110001";
100
constant WRWIM    : std_logic_vector(5 downto 0) := "110010";
101
constant WRTBR    : std_logic_vector(5 downto 0) := "110011";
102
constant FPOP1    : std_logic_vector(5 downto 0) := "110100";
103
constant FPOP2    : std_logic_vector(5 downto 0) := "110101";
104
constant CPOP1    : std_logic_vector(5 downto 0) := "110110";
105
constant CPOP2    : std_logic_vector(5 downto 0) := "110111";
106
constant JMPL     : std_logic_vector(5 downto 0) := "111000";
107
constant TICC     : std_logic_vector(5 downto 0) := "111010";
108
constant FLUSH    : std_logic_vector(5 downto 0) := "111011";
109
constant RETT     : std_logic_vector(5 downto 0) := "111001";
110
constant SAVE     : std_logic_vector(5 downto 0) := "111100";
111
constant RESTORE  : std_logic_vector(5 downto 0) := "111101";
112
constant UMAC     : std_logic_vector(5 downto 0) := "111110";
113
constant SMAC     : std_logic_vector(5 downto 0) := "111111";
114
 
115
constant LD       : std_logic_vector(5 downto 0) := "000000";
116
constant LDUB     : std_logic_vector(5 downto 0) := "000001";
117
constant LDUH     : std_logic_vector(5 downto 0) := "000010";
118
constant LDD      : std_logic_vector(5 downto 0) := "000011";
119
constant LDSB     : std_logic_vector(5 downto 0) := "001001";
120
constant LDSH     : std_logic_vector(5 downto 0) := "001010";
121
constant LDSTUB   : std_logic_vector(5 downto 0) := "001101";
122
constant SWAP     : std_logic_vector(5 downto 0) := "001111";
123
constant LDA      : std_logic_vector(5 downto 0) := "010000";
124
constant LDUBA    : std_logic_vector(5 downto 0) := "010001";
125
constant LDUHA    : std_logic_vector(5 downto 0) := "010010";
126
constant LDDA     : std_logic_vector(5 downto 0) := "010011";
127
constant LDSBA    : std_logic_vector(5 downto 0) := "011001";
128
constant LDSHA    : std_logic_vector(5 downto 0) := "011010";
129
constant LDSTUBA  : std_logic_vector(5 downto 0) := "011101";
130
constant SWAPA    : std_logic_vector(5 downto 0) := "011111";
131
constant LDF      : std_logic_vector(5 downto 0) := "100000";
132
constant LDFSR    : std_logic_vector(5 downto 0) := "100001";
133
constant LDDF     : std_logic_vector(5 downto 0) := "100011";
134
constant LDC      : std_logic_vector(5 downto 0) := "110000";
135
constant LDCSR    : std_logic_vector(5 downto 0) := "110001";
136
constant LDDC     : std_logic_vector(5 downto 0) := "110011";
137
 
138
constant ST       : std_logic_vector(5 downto 0) := "000100";
139
constant STB      : std_logic_vector(5 downto 0) := "000101";
140
constant STH      : std_logic_vector(5 downto 0) := "000110";
141
constant ISTD     : std_logic_vector(5 downto 0) := "000111";
142
constant STA      : std_logic_vector(5 downto 0) := "010100";
143
constant STBA     : std_logic_vector(5 downto 0) := "010101";
144
constant STHA     : std_logic_vector(5 downto 0) := "010110";
145
constant STDA     : std_logic_vector(5 downto 0) := "010111";
146
constant STF      : std_logic_vector(5 downto 0) := "100100";
147
constant STFSR    : std_logic_vector(5 downto 0) := "100101";
148
constant STDFQ    : std_logic_vector(5 downto 0) := "100110";
149
constant STDF     : std_logic_vector(5 downto 0) := "100111";
150
constant STC      : std_logic_vector(5 downto 0) := "110100";
151
constant STCSR    : std_logic_vector(5 downto 0) := "110101";
152
constant STDCQ    : std_logic_vector(5 downto 0) := "110110";
153
constant STDC     : std_logic_vector(5 downto 0) := "110111";
154
 
155
-- BICC codes
156
constant BA  : std_logic_vector(3 downto 0) := "1000";
157
 
158
-- FPOP1
159
constant FITOS    : std_logic_vector(8 downto 0) := "011000100";
160
constant FITOD    : std_logic_vector(8 downto 0) := "011001000";
161
constant FSTOI    : std_logic_vector(8 downto 0) := "011010001";
162
constant FDTOI    : std_logic_vector(8 downto 0) := "011010010";
163
constant FSTOD    : std_logic_vector(8 downto 0) := "011001001";
164
constant FDTOS    : std_logic_vector(8 downto 0) := "011000110";
165
constant FMOVS    : std_logic_vector(8 downto 0) := "000000001";
166
constant FNEGS    : std_logic_vector(8 downto 0) := "000000101";
167
constant FABSS    : std_logic_vector(8 downto 0) := "000001001";
168
constant FSQRTS   : std_logic_vector(8 downto 0) := "000101001";
169
constant FSQRTD   : std_logic_vector(8 downto 0) := "000101010";
170
constant FADDS    : std_logic_vector(8 downto 0) := "001000001";
171
constant FADDD    : std_logic_vector(8 downto 0) := "001000010";
172
constant FSUBS    : std_logic_vector(8 downto 0) := "001000101";
173
constant FSUBD    : std_logic_vector(8 downto 0) := "001000110";
174
constant FMULS    : std_logic_vector(8 downto 0) := "001001001";
175
constant FMULD    : std_logic_vector(8 downto 0) := "001001010";
176
constant FSMULD   : std_logic_vector(8 downto 0) := "001101001";
177
constant FDIVS    : std_logic_vector(8 downto 0) := "001001101";
178
constant FDIVD    : std_logic_vector(8 downto 0) := "001001110";
179
 
180
-- FPOP2
181
constant FCMPS    : std_logic_vector(8 downto 0) := "001010001";
182
constant FCMPD    : std_logic_vector(8 downto 0) := "001010010";
183
constant FCMPES   : std_logic_vector(8 downto 0) := "001010101";
184
constant FCMPED   : std_logic_vector(8 downto 0) := "001010110";
185
 
186
-- ALU operation codes
187
 
188
constant ALU_AND   : std_logic_vector(2 downto 0) := "000";
189
constant ALU_XOR   : std_logic_vector(2 downto 0) := "001";-- must be equal to ALU_PASS2
190
constant ALU_OR    : std_logic_vector(2 downto 0) := "010";
191
constant ALU_XNOR  : std_logic_vector(2 downto 0) := "011";
192
constant ALU_ANDN  : std_logic_vector(2 downto 0) := "100";
193
constant ALU_ORN   : std_logic_vector(2 downto 0) := "101";
194
constant ALU_DIV   : std_logic_vector(2 downto 0) := "110";
195
 
196
constant ALU_PASS1 : std_logic_vector(2 downto 0) := "000";
197
constant ALU_PASS2 : std_logic_vector(2 downto 0) := "001";
198
constant ALU_STB   : std_logic_vector(2 downto 0) := "010";
199
constant ALU_STH   : std_logic_vector(2 downto 0) := "011";
200
constant ALU_ONES  : std_logic_vector(2 downto 0) := "100";
201
constant ALU_RDY   : std_logic_vector(2 downto 0) := "101";
202
constant ALU_FSR   : std_logic_vector(2 downto 0) := "110";
203
constant ALU_FOP   : std_logic_vector(2 downto 0) := "111";
204
 
205
constant ALU_SLL   : std_logic_vector(2 downto 0) := "001";
206
constant ALU_SRL   : std_logic_vector(2 downto 0) := "010";
207
constant ALU_SRA   : std_logic_vector(2 downto 0) := "100";
208
 
209
constant ALU_NOP   : std_logic_vector(2 downto 0) := "000";
210
 
211
-- ALU result select
212
 
213
constant ALU_RES_ADD   : std_logic_vector(1 downto 0) := "00";
214
constant ALU_RES_SHIFT : std_logic_vector(1 downto 0) := "01";
215
constant ALU_RES_LOGIC : std_logic_vector(1 downto 0) := "10";
216
constant ALU_RES_MISC  : std_logic_vector(1 downto 0) := "11";
217
 
218
-- ALU operand 2 codes
219
 
220
constant ALU_RS2   : std_logic := '0';
221
constant ALU_SIMM  : std_logic := '1';
222
 
223
-- Load types
224
 
225
constant LDBYTE    : std_logic_vector(1 downto 0) := "00";
226
constant LDHALF    : std_logic_vector(1 downto 0) := "01";
227
constant LDWORD    : std_logic_vector(1 downto 0) := "10";
228
constant LDDBL     : std_logic_vector(1 downto 0) := "11";
229
 
230
-- Trap types
231
 
232
constant IAEX_TT   : std_logic_vector(5 downto 0) := "000001";
233
constant IINST_TT  : std_logic_vector(5 downto 0) := "000010";
234
constant PRIV_TT   : std_logic_vector(5 downto 0) := "000011";
235
constant FPDIS_TT  : std_logic_vector(5 downto 0) := "000100";
236
constant WINOF_TT  : std_logic_vector(5 downto 0) := "000101";
237
constant WINUF_TT  : std_logic_vector(5 downto 0) := "000110";
238
constant UNALA_TT  : std_logic_vector(5 downto 0) := "000111";
239
constant FPEXC_TT  : std_logic_vector(5 downto 0) := "001000";
240
constant DAEX_TT   : std_logic_vector(5 downto 0) := "001001";
241
constant TAG_TT    : std_logic_vector(5 downto 0) := "001010";
242
constant WATCH_TT  : std_logic_vector(5 downto 0) := "001011";
243
 
244
constant CPDIS_TT  : std_logic_vector(5 downto 0) := "100100";
245
constant CPEXC_TT  : std_logic_vector(5 downto 0) := "101000";
246
constant DIV_TT    : std_logic_vector(5 downto 0) := "101010";
247
constant DSEX_TT   : std_logic_vector(5 downto 0) := "101011";
248
constant TICC_TT   : std_logic_vector(5 downto 0) := "111111";
249
 
250
-- ASI types
251
 
252
constant LASI_IFLUSH  : std_logic_vector(3 downto 0) := "0101";
253
constant LASI_DFLUSH  : std_logic_vector(3 downto 0) := "0110";
254
constant LASI_UINST   : std_logic_vector(3 downto 0) := "1000";
255
constant LASI_SINST   : std_logic_vector(3 downto 0) := "1001";
256
constant LASI_UDATA   : std_logic_vector(3 downto 0) := "1010";
257
constant LASI_SDATA   : std_logic_vector(3 downto 0) := "1011";
258
constant LASI_ITAG    : std_logic_vector(3 downto 0) := "1100";
259
constant LASI_IDATA   : std_logic_vector(3 downto 0) := "1101";
260
constant LASI_DTAG    : std_logic_vector(3 downto 0) := "1110";
261
constant LASI_DDATA   : std_logic_vector(3 downto 0) := "1111";
262
 
263
constant ASI_IFLUSH  : std_logic_vector(4 downto 0) := "00101";
264
constant ASI_DFLUSH  : std_logic_vector(4 downto 0) := "00110";
265
constant ASI_UINST   : std_logic_vector(4 downto 0) := "01000";
266
constant ASI_SINST   : std_logic_vector(4 downto 0) := "01001";
267
constant ASI_UDATA   : std_logic_vector(4 downto 0) := "01010";
268
constant ASI_SDATA   : std_logic_vector(4 downto 0) := "01011";
269
constant ASI_ITAG    : std_logic_vector(4 downto 0) := "01100";
270
constant ASI_IDATA   : std_logic_vector(4 downto 0) := "01101";
271
constant ASI_DTAG    : std_logic_vector(4 downto 0) := "01110";
272
constant ASI_DDATA   : std_logic_vector(4 downto 0) := "01111";
273
 
274
constant ASI_FLUSH_PAGE     : std_logic_vector(4 downto 0) := "10000";  -- 0x10 i/dcache flush page
275
constant ASI_FLUSH_CTX      : std_logic_vector(4 downto 0) := "10011";  -- 0x13 i/dcache flush ctx
276
 
277
constant ASI_DCTX           : std_logic_vector(4 downto 0) := "10100";  -- 0x14 dcache ctx
278
constant ASI_ICTX           : std_logic_vector(4 downto 0) := "10101";  -- 0x15 icache ctx
279
 
280
constant ASI_MMUFLUSHPROBE  : std_logic_vector(4 downto 0) := "11000";  -- 0x18 i/dtlb flush/(probe)
281
constant ASI_MMUREGS        : std_logic_vector(4 downto 0) := "11001";  -- 0x19 mmu regs access
282
constant ASI_MMU_BP         : std_logic_vector(4 downto 0) := "11100";  -- 0x1c mmu Bypass 
283
constant ASI_MMU_DIAG       : std_logic_vector(4 downto 0) := "11101";  -- 0x1d mmu diagnostic 
284
constant ASI_MMU_DSU        : std_logic_vector(4 downto 0) := "11111";  -- 0x1f mmu diagnostic 
285
 
286
-- FSR ftt codes
287
 
288
constant FPIEEE_ERR  : std_logic_vector(2 downto 0) := "001";
289
constant FPSEQ_ERR   : std_logic_vector(2 downto 0) := "100";
290
 
291
end;
292
 
293
 
294
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.