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

Subversion Repositories rv01_riscv_core

[/] [rv01_riscv_core/] [trunk/] [VHDL/] [RV01_idec_pkg.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 madsilicon
-----------------------------------------------------------------
2
--                                                             --
3
-----------------------------------------------------------------
4
--                                                             --
5
-- Copyright (C) 2015 Stefano Tonello                          --
6
--                                                             --
7
-- This source file may be used and distributed without        --
8
-- restriction provided that this copyright statement is not   --
9
-- removed from the file and that any derivative work contains --
10
-- the original copyright notice and the associated disclaimer.--
11
--                                                             --
12
-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY         --
13
-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   --
14
-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   --
15
-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      --
16
-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         --
17
-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    --
18
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   --
19
-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        --
20
-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  --
21
-- LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  --
22
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  --
23
-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         --
24
-- POSSIBILITY OF SUCH DAMAGE.                                 --
25
--                                                             --
26
-----------------------------------------------------------------
27
 
28
---------------------------------------------------------------
29
-- Instruction decoding data types
30
---------------------------------------------------------------
31
 
32
library IEEE;
33
use IEEE.std_logic_1164.all;
34
use IEEE.numeric_std.all;
35
 
36
library work;
37
use work.RV01_CONSTS_PKG.all;
38
use work.RV01_TYPES_PKG.all;
39
use work.RV01_OP_PKG.all;
40
use work.RV01_CSR_PKG.all;
41
 
42
package RV01_IDEC_PKG is
43
 
44
  type INST_MNEMONIC_T is (
45
    IM_ADDI,
46
    IM_SLTI,
47
    IM_SLTIU,
48
    IM_ANDI,
49
    IM_ORI,
50
    IM_XORI,
51
    IM_SLLI,
52
    IM_SRAI,
53
    IM_SRLI,
54
    IM_LUI,
55
    IM_AUIPC,
56
    IM_ADD,
57
    IM_SUB,
58
    IM_SLT,
59
    IM_SLTU,
60
    IM_AND,
61
    IM_OR,
62
    IM_XOR,
63
    IM_SLL,
64
    IM_SRA,
65
    IM_SRL,
66
    IM_J,
67
    IM_JAL,
68
    IM_JALR,
69
    IM_BEQ,
70
    IM_BNE,
71
    IM_BLT,
72
    IM_BLTU,
73
    IM_BGE,
74
    IM_BGEU,
75
    IM_LB,
76
    IM_LH,
77
    IM_LW,
78
    IM_LBU,
79
    IM_LHU,
80
    IM_SB,
81
    IM_SH,
82
    IM_SW,
83
    IM_FENCE,
84
    IM_FENCEI,
85
    IM_SCALL,
86
    IM_SBREAK,
87
    IM_ERET,
88
    IM_WFI,
89
    IM_SFENCEVM,
90
    IM_CSRRW,
91
    IM_CSRRS,
92
    IM_CSRRC,
93
    IM_CSRRWI,
94
    IM_CSRRSI,
95
    IM_CSRRCI,
96
    --IM_RDCYCLE,
97
    --IM_RDTIME,
98
    --IM_RDINSTRET,
99
    --IM_RDCYCLEH,
100
    --IM_RDTIMEH,
101
    --IM_RDINSTRETH,
102
 
103
    -- RV32M
104
 
105
    IM_MUL,
106
    IM_MULH,
107
    IM_MULHU,
108
    IM_MULHSU,
109
    IM_DIV,
110
    IM_DIVU,
111
    IM_REM,
112
    IM_REMU,
113
 
114
    -- RV32F
115
 
116
    IM_FLW,
117
    IM_FSW,
118
    IM_FADDS,
119
    IM_FSUBS,
120
    IM_FMULS,
121
    IM_FDIVS,
122
    -- IM_FMIN, -- not implemented
123
    -- IM_FMAX, -- not implemented
124
    -- IM_FSQRT, -- not implemented
125
    -- IM_FMADD, -- not implemented
126
    -- IM_FMSUB, -- not implemented
127
    -- IM_FNMADD, -- not implemented
128
    -- IM_FNMSUB, -- not implemented
129
    -- IM_FSGNJS, -- not implemented
130
    -- IM_FSGNJNS, -- not implemented
131
    -- IM_FSGNJXS, -- not implemented
132
    IM_FCVTWS,
133
    IM_FCVTSW,
134
    IM_FMVXS,
135
    IM_FMVSX,
136
    IM_FCMP,
137
    -- IM_FCLASS, -- not implemented
138
 
139
    IM_BAD_INSTR -- this is not a valid instruction!
140
  );
141
 
142
  type RES_SRC_T is (
143
    RS_PIPEA,
144
    RS_PIPEB,
145
    RS_LSU,
146
    RS_SIU,
147
    RS_DIVU,
148
    RS_NIL
149
  );
150
 
151
  type DEC_INSTR_T is record
152
    IMNMC : INST_MNEMONIC_T;
153
    WCSR : std_logic;
154
    WRD : std_logic;
155
    RRS1 : std_logic;
156
    RRS2 : std_logic;
157
    RD : RID_T;
158
    RS1 : RID_T;
159
    RS2 : RID_T;
160
    IMM : signed(SDLEN-1 downto 0);
161
    SU : std_logic;
162
    ALU_OP : ALU_OP_T;
163
    BJ_OP : BJ_OP_T;
164
    LS_OP : LS_OP_T;
165
    CS_OP : CS_OP_T;
166
    RES_SRC : RES_SRC_T;
167
    P0_ONLY : std_logic;
168
    P1_ONLY : std_logic;
169
    EXCP : std_logic;
170
    ECAUSE : std_logic_vector(5-1 downto 0);
171
    RFTCH : std_logic;
172
    SEQX : std_logic;
173
  end record;
174
 
175
  constant DEC_NIL : DEC_INSTR_T := (
176
    IM_BAD_INSTR,
177
    '0',
178
    '0',
179
    '0',
180
    '0',
181
    0,
182
    0,
183
    0,
184
    (others => '0'),
185
    '0',
186
    ALU_NIL,
187
    BJ_NIL,
188
    LS_NIL,
189
    CS_NIL,
190
    RS_NIL,
191
    '0',
192
    '0',
193
    '0',
194
    (others => '0'),
195
    '0',
196
    '0'
197
  );
198
 
199
  type DEC_INSTR_VEC_T is array (natural range<>) of DEC_INSTR_T;
200
 
201
  -- main opcode values
202
  constant OP_LUI     : std_logic_vector(7-1 downto 0) := "0110111"; --X"37";
203
  constant OP_AUIPC   : std_logic_vector(7-1 downto 0) := "0010111"; --X"17";
204
  constant OP_JAL     : std_logic_vector(7-1 downto 0) := "1101111"; --X"6f";
205
  constant OP_JALR    : std_logic_vector(7-1 downto 0) := "1100111"; --X"67";
206
  constant OP_BRANCH  : std_logic_vector(7-1 downto 0) := "1100011"; --X"63";
207
  constant OP_LOAD    : std_logic_vector(7-1 downto 0) := "0000011"; --X"03";
208
  constant OP_STORE   : std_logic_vector(7-1 downto 0) := "0100011"; --X"23";
209
  constant OP_ALUI    : std_logic_vector(7-1 downto 0) := "0010011"; --X"13";
210
  constant OP_ALU     : std_logic_vector(7-1 downto 0) := "0110011"; --X"33";
211
  constant OP_MISCMEM : std_logic_vector(7-1 downto 0) := "0001111"; --X"0f";
212
  constant OP_SYSTEM  : std_logic_vector(7-1 downto 0) := "1110011"; --X"73";
213
  -- "F" extension
214
  constant OP_LOADFP  : std_logic_vector(7-1 downto 0) := "0000111"; --X"07";
215
  constant OP_STOREFP : std_logic_vector(7-1 downto 0) := "0100111"; --X"27";
216
  constant OP_FP      : std_logic_vector(7-1 downto 0) := "1010011"; --X"53";
217
 
218
end package;

powered by: WebSVN 2.1.0

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