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] - Rev 2

Compare with Previous | Blame | View Log

-----------------------------------------------------------------
--                                                             --
-----------------------------------------------------------------
--                                                             --
-- Copyright (C) 2015 Stefano Tonello                          --
--                                                             --
-- This source file may be used and distributed without        --
-- restriction provided that this copyright statement is not   --
-- removed from the file and that any derivative work contains --
-- the original copyright notice and the associated disclaimer.--
--                                                             --
-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY         --
-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   --
-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   --
-- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      --
-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         --
-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    --
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   --
-- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        --
-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  --
-- LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  --
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  --
-- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         --
-- POSSIBILITY OF SUCH DAMAGE.                                 --
--                                                             --
-----------------------------------------------------------------
 
---------------------------------------------------------------
-- Instruction decoding data types
---------------------------------------------------------------
 
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
 
library work;
use work.RV01_CONSTS_PKG.all;
use work.RV01_TYPES_PKG.all;
use work.RV01_OP_PKG.all;
use work.RV01_CSR_PKG.all;
 
package RV01_IDEC_PKG is
 
  type INST_MNEMONIC_T is (
    IM_ADDI,
    IM_SLTI,
    IM_SLTIU,
    IM_ANDI,
    IM_ORI,
    IM_XORI,
    IM_SLLI,
    IM_SRAI,
    IM_SRLI,
    IM_LUI,
    IM_AUIPC,
    IM_ADD,
    IM_SUB,
    IM_SLT,
    IM_SLTU,
    IM_AND,
    IM_OR,
    IM_XOR,
    IM_SLL,
    IM_SRA,
    IM_SRL,
    IM_J,
    IM_JAL,
    IM_JALR,
    IM_BEQ,
    IM_BNE,
    IM_BLT,
    IM_BLTU,
    IM_BGE,
    IM_BGEU,
    IM_LB,
    IM_LH,
    IM_LW,
    IM_LBU,
    IM_LHU,
    IM_SB,
    IM_SH,
    IM_SW,
    IM_FENCE,
    IM_FENCEI,
    IM_SCALL,
    IM_SBREAK,
    IM_ERET,
    IM_WFI,
    IM_SFENCEVM,
    IM_CSRRW,
    IM_CSRRS,
    IM_CSRRC,
    IM_CSRRWI,
    IM_CSRRSI,
    IM_CSRRCI,
    --IM_RDCYCLE,
    --IM_RDTIME,
    --IM_RDINSTRET,
    --IM_RDCYCLEH,
    --IM_RDTIMEH,
    --IM_RDINSTRETH,
 
    -- RV32M
 
    IM_MUL,
    IM_MULH,
    IM_MULHU,
    IM_MULHSU,
    IM_DIV,
    IM_DIVU,
    IM_REM,
    IM_REMU,
 
    -- RV32F
 
    IM_FLW,
    IM_FSW,
    IM_FADDS,
    IM_FSUBS,
    IM_FMULS,
    IM_FDIVS,
    -- IM_FMIN, -- not implemented
    -- IM_FMAX, -- not implemented
    -- IM_FSQRT, -- not implemented
    -- IM_FMADD, -- not implemented
    -- IM_FMSUB, -- not implemented
    -- IM_FNMADD, -- not implemented
    -- IM_FNMSUB, -- not implemented
    -- IM_FSGNJS, -- not implemented
    -- IM_FSGNJNS, -- not implemented
    -- IM_FSGNJXS, -- not implemented
    IM_FCVTWS,
    IM_FCVTSW,
    IM_FMVXS,
    IM_FMVSX,
    IM_FCMP,
    -- IM_FCLASS, -- not implemented
 
    IM_BAD_INSTR -- this is not a valid instruction!
  );
 
  type RES_SRC_T is (
    RS_PIPEA,
    RS_PIPEB,
    RS_LSU,
    RS_SIU,
    RS_DIVU,
    RS_NIL
  );
 
  type DEC_INSTR_T is record
    IMNMC : INST_MNEMONIC_T;
    WCSR : std_logic;
    WRD : std_logic;
    RRS1 : std_logic;
    RRS2 : std_logic;
    RD : RID_T;
    RS1 : RID_T;
    RS2 : RID_T;
    IMM : signed(SDLEN-1 downto 0);
    SU : std_logic;
    ALU_OP : ALU_OP_T;
    BJ_OP : BJ_OP_T;
    LS_OP : LS_OP_T;
    CS_OP : CS_OP_T;
    RES_SRC : RES_SRC_T;
    P0_ONLY : std_logic;
    P1_ONLY : std_logic;
    EXCP : std_logic;
    ECAUSE : std_logic_vector(5-1 downto 0);
    RFTCH : std_logic;
    SEQX : std_logic;
  end record;
 
  constant DEC_NIL : DEC_INSTR_T := (
    IM_BAD_INSTR,
    '0',
    '0',
    '0',
    '0',
    0,
    0,
    0,
    (others => '0'),
    '0',
    ALU_NIL,
    BJ_NIL,
    LS_NIL,
    CS_NIL,
    RS_NIL,
    '0',
    '0',
    '0',
    (others => '0'),
    '0',
    '0'
  );
 
  type DEC_INSTR_VEC_T is array (natural range<>) of DEC_INSTR_T;
 
  -- main opcode values
  constant OP_LUI     : std_logic_vector(7-1 downto 0) := "0110111"; --X"37";
  constant OP_AUIPC   : std_logic_vector(7-1 downto 0) := "0010111"; --X"17";
  constant OP_JAL     : std_logic_vector(7-1 downto 0) := "1101111"; --X"6f";
  constant OP_JALR    : std_logic_vector(7-1 downto 0) := "1100111"; --X"67";
  constant OP_BRANCH  : std_logic_vector(7-1 downto 0) := "1100011"; --X"63";
  constant OP_LOAD    : std_logic_vector(7-1 downto 0) := "0000011"; --X"03";
  constant OP_STORE   : std_logic_vector(7-1 downto 0) := "0100011"; --X"23";
  constant OP_ALUI    : std_logic_vector(7-1 downto 0) := "0010011"; --X"13";
  constant OP_ALU     : std_logic_vector(7-1 downto 0) := "0110011"; --X"33";
  constant OP_MISCMEM : std_logic_vector(7-1 downto 0) := "0001111"; --X"0f";
  constant OP_SYSTEM  : std_logic_vector(7-1 downto 0) := "1110011"; --X"73";
  -- "F" extension
  constant OP_LOADFP  : std_logic_vector(7-1 downto 0) := "0000111"; --X"07";
  constant OP_STOREFP : std_logic_vector(7-1 downto 0) := "0100111"; --X"27";
  constant OP_FP      : std_logic_vector(7-1 downto 0) := "1010011"; --X"53";
 
end package;

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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