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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [rtl/] [core/] [neorv32_package.vhd] - Diff between revs 8 and 11

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 8 Rev 11
Line 39... Line 39...
package neorv32_package is
package neorv32_package is
 
 
  -- Architecture Constants -----------------------------------------------------------------
  -- Architecture Constants -----------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  constant data_width_c : natural := 32; -- data width - FIXED!
  constant data_width_c : natural := 32; -- data width - FIXED!
  constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01000100"; -- no touchy!
  constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01000600"; -- no touchy!
 
 
  -- Internal Functions ---------------------------------------------------------------------
  -- Internal Functions ---------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  function index_size_f(input : natural) return natural;
  function index_size_f(input : natural) return natural;
  function cond_sel_natural_f(cond : boolean; val_t : natural; val_f : natural) return natural;
  function cond_sel_natural_f(cond : boolean; val_t : natural; val_f : natural) return natural;
Line 176... Line 176...
  constant ctrl_bus_if_c          : natural := 35; -- instruction fetch request (1: output PC, 0: output MAR)
  constant ctrl_bus_if_c          : natural := 35; -- instruction fetch request (1: output PC, 0: output MAR)
  constant ctrl_bus_mar_we_c      : natural := 36; -- memory address register write enable
  constant ctrl_bus_mar_we_c      : natural := 36; -- memory address register write enable
  constant ctrl_bus_mdo_we_c      : natural := 37; -- memory data out register write enable
  constant ctrl_bus_mdo_we_c      : natural := 37; -- memory data out register write enable
  constant ctrl_bus_mdi_we_c      : natural := 38; -- memory data in register write enable
  constant ctrl_bus_mdi_we_c      : natural := 38; -- memory data in register write enable
  constant ctrl_bus_unsigned_c    : natural := 39; -- is unsigned load
  constant ctrl_bus_unsigned_c    : natural := 39; -- is unsigned load
 
  constant ctrl_bus_exc_ack_c     : natural := 40; -- acknowledge bus exception
 
  constant ctrl_bus_reset_c       : natural := 41; -- reset bus unit, terminate all actions
  -- co-processor --
  -- co-processor --
  constant ctrl_cp_use_c          : natural := 40; -- is cp operation
  constant ctrl_cp_use_c          : natural := 42; -- is cp operation
  constant ctrl_cp_id_lsb_c       : natural := 41; -- cp select lsb
  constant ctrl_cp_id_lsb_c       : natural := 43; -- cp select lsb
  constant ctrl_cp_id_msb_c       : natural := 42; -- cp select msb
  constant ctrl_cp_id_msb_c       : natural := 44; -- cp select msb
  constant ctrl_cp_cmd0_c         : natural := 43; -- cp command bit 0
  constant ctrl_cp_cmd0_c         : natural := 45; -- cp command bit 0
  constant ctrl_cp_cmd1_c         : natural := 44; -- cp command bit 1
  constant ctrl_cp_cmd1_c         : natural := 46; -- cp command bit 1
  constant ctrl_cp_cmd2_c         : natural := 45; -- cp command bit 2
  constant ctrl_cp_cmd2_c         : natural := 47; -- cp command bit 2
  -- system --
 
  constant ctrl_sys_c_ext_en_c    : natural := 46; -- CPU C extension enabled
 
  constant ctrl_sys_m_ext_en_c    : natural := 47; -- CPU M extension enabled
 
  -- control bus size --
  -- control bus size --
  constant ctrl_width_c           : natural := 48; -- control bus size
  constant ctrl_width_c           : natural := 48; -- control bus size
 
 
  -- ALU Comparator Bus ---------------------------------------------------------------------
  -- ALU Comparator Bus ---------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
Line 275... Line 274...
  constant funct3_csrrci_c : std_ulogic_vector(2 downto 0) := "111"; -- atomic read & clear bit immediate
  constant funct3_csrrci_c : std_ulogic_vector(2 downto 0) := "111"; -- atomic read & clear bit immediate
  -- fence --
  -- fence --
  constant funct3_fence_c  : std_ulogic_vector(2 downto 0) := "000"; -- fence - order IO/memory access (->NOP)
  constant funct3_fence_c  : std_ulogic_vector(2 downto 0) := "000"; -- fence - order IO/memory access (->NOP)
  constant funct3_fencei_c : std_ulogic_vector(2 downto 0) := "001"; -- fencei - instructon stream sync
  constant funct3_fencei_c : std_ulogic_vector(2 downto 0) := "001"; -- fencei - instructon stream sync
 
 
 
  -- RISC-V Funct12 --------------------------------------------------------------------------
 
  -- -------------------------------------------------------------------------------------------
 
  -- system --
 
  constant funct12_ecall_c  : std_ulogic_vector(11 downto 0) := x"000"; -- ECALL
 
  constant funct12_ebreak_c : std_ulogic_vector(11 downto 0) := x"001"; -- EBREAK
 
  constant funct12_mret_c   : std_ulogic_vector(11 downto 0) := x"302"; -- MRET
 
  constant funct12_wfi_c    : std_ulogic_vector(11 downto 0) := x"105"; -- WFI
 
 
  -- Co-Processor Operations ----------------------------------------------------------------
  -- Co-Processor Operations ----------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- cp ids --
  -- cp ids --
  constant cp_sel_muldiv_c : std_ulogic_vector(1 downto 0) := "00"; -- MULDIV CP
  constant cp_sel_muldiv_c : std_ulogic_vector(1 downto 0) := "00"; -- MULDIV CP
  -- muldiv cp --
  -- muldiv cp --
Line 460... Line 467...
      bus_rdata_i : in  std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
      bus_rdata_i : in  std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
      bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
      bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
      bus_ben_o   : out std_ulogic_vector(03 downto 0); -- byte enable
      bus_ben_o   : out std_ulogic_vector(03 downto 0); -- byte enable
      bus_we_o    : out std_ulogic; -- write enable
      bus_we_o    : out std_ulogic; -- write enable
      bus_re_o    : out std_ulogic; -- read enable
      bus_re_o    : out std_ulogic; -- read enable
 
      bus_cancel_o : out std_ulogic; -- cancel current bus transaction
      bus_ack_i   : in  std_ulogic; -- bus transfer acknowledge
      bus_ack_i   : in  std_ulogic; -- bus transfer acknowledge
      bus_err_i   : in  std_ulogic; -- bus transfer error
      bus_err_i   : in  std_ulogic; -- bus transfer error
 
      -- system time input from MTIME --
 
      time_i       : in  std_ulogic_vector(63 downto 0); -- current system time
      -- external interrupts --
      -- external interrupts --
      clic_irq_i  : in  std_ulogic; -- CLIC interrupt request
      clic_irq_i  : in  std_ulogic; -- CLIC interrupt request
      mtime_irq_i : in  std_ulogic  -- machine timer interrupt
      mtime_irq_i : in  std_ulogic  -- machine timer interrupt
    );
    );
  end component;
  end component;
Line 531... Line 541...
      csr_wdata_i   : in  std_ulogic_vector(data_width_c-1 downto 0); -- CSR write data
      csr_wdata_i   : in  std_ulogic_vector(data_width_c-1 downto 0); -- CSR write data
      csr_rdata_o   : out std_ulogic_vector(data_width_c-1 downto 0); -- CSR read data
      csr_rdata_o   : out std_ulogic_vector(data_width_c-1 downto 0); -- CSR read data
      -- external interrupt --
      -- external interrupt --
      clic_irq_i    : in  std_ulogic; -- CLIC interrupt request
      clic_irq_i    : in  std_ulogic; -- CLIC interrupt request
      mtime_irq_i   : in  std_ulogic; -- machine timer interrupt
      mtime_irq_i   : in  std_ulogic; -- machine timer interrupt
 
      -- system time input from MTIME --
 
      time_i        : in  std_ulogic_vector(63 downto 0); -- current system time
      -- bus access exceptions --
      -- bus access exceptions --
      mar_i         : in  std_ulogic_vector(data_width_c-1 downto 0); -- memory address register
      mar_i         : in  std_ulogic_vector(data_width_c-1 downto 0); -- memory address register
      ma_instr_i    : in  std_ulogic; -- misaligned instruction address
      ma_instr_i    : in  std_ulogic; -- misaligned instruction address
      ma_load_i     : in  std_ulogic; -- misaligned load data address
      ma_load_i     : in  std_ulogic; -- misaligned load data address
      ma_store_i    : in  std_ulogic; -- misaligned store data address
      ma_store_i    : in  std_ulogic; -- misaligned store data address
      be_instr_i    : in  std_ulogic; -- bus error on instruction access
      be_instr_i    : in  std_ulogic; -- bus error on instruction access
      be_load_i     : in  std_ulogic; -- bus error on load data access
      be_load_i     : in  std_ulogic; -- bus error on load data access
      be_store_i    : in  std_ulogic; -- bus error on store data access
      be_store_i    : in  std_ulogic; -- bus error on store data access
      bus_exc_ack_o : out std_ulogic; -- bus exception error acknowledge
 
      bus_busy_i    : in  std_ulogic  -- bus unit is busy
      bus_busy_i    : in  std_ulogic  -- bus unit is busy
    );
    );
  end component;
  end component;
 
 
  -- Component: CPU Register File -----------------------------------------------------------
  -- Component: CPU Register File -----------------------------------------------------------
Line 568... Line 579...
  end component;
  end component;
 
 
  -- Component: CPU ALU ---------------------------------------------------------------------
  -- Component: CPU ALU ---------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  component neorv32_cpu_alu
  component neorv32_cpu_alu
 
    generic (
 
      CPU_EXTENSION_RISCV_M : boolean := true -- implement muld/div extension?
 
    );
    port (
    port (
      -- global control --
      -- global control --
      clk_i       : in  std_ulogic; -- global clock, rising edge
      clk_i       : in  std_ulogic; -- global clock, rising edge
      rstn_i      : in  std_ulogic; -- global reset, low-active, async
      rstn_i      : in  std_ulogic; -- global reset, low-active, async
      ctrl_i      : in  std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
      ctrl_i      : in  std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
Line 614... Line 628...
 
 
  -- Component: CPU Bus Interface -----------------------------------------------------------
  -- Component: CPU Bus Interface -----------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  component neorv32_cpu_bus
  component neorv32_cpu_bus
    generic (
    generic (
 
      CPU_EXTENSION_RISCV_C : boolean := true; -- implement compressed extension?
      MEM_EXT_TIMEOUT : natural := 15 -- cycles after which a valid bus access will timeout
      MEM_EXT_TIMEOUT : natural := 15 -- cycles after which a valid bus access will timeout
    );
    );
    port (
    port (
      -- global control --
      -- global control --
      clk_i       : in  std_ulogic; -- global clock, rising edge
      clk_i       : in  std_ulogic; -- global clock, rising edge
Line 638... Line 653...
      be_instr_o  : out std_ulogic; -- bus error on instruction access
      be_instr_o  : out std_ulogic; -- bus error on instruction access
      be_load_o   : out std_ulogic; -- bus error on load data access
      be_load_o   : out std_ulogic; -- bus error on load data access
      be_store_o  : out std_ulogic; -- bus error on store data 
      be_store_o  : out std_ulogic; -- bus error on store data 
      bus_wait_o  : out std_ulogic; -- wait for bus operation to finish
      bus_wait_o  : out std_ulogic; -- wait for bus operation to finish
      bus_busy_o  : out std_ulogic; -- bus unit is busy
      bus_busy_o  : out std_ulogic; -- bus unit is busy
      exc_ack_i   : in  std_ulogic; -- exception controller ACK
 
      -- bus system --
      -- bus system --
      bus_addr_o  : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
      bus_addr_o  : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
      bus_rdata_i : in  std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
      bus_rdata_i : in  std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
      bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
      bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
      bus_ben_o   : out std_ulogic_vector(03 downto 0); -- byte enable
      bus_ben_o   : out std_ulogic_vector(03 downto 0); -- byte enable
      bus_we_o    : out std_ulogic; -- write enable
      bus_we_o    : out std_ulogic; -- write enable
      bus_re_o    : out std_ulogic; -- read enable
      bus_re_o    : out std_ulogic; -- read enable
 
      bus_cancel_o : out std_ulogic; -- cancel current bus transaction
      bus_ack_i   : in  std_ulogic; -- bus transfer acknowledge
      bus_ack_i   : in  std_ulogic; -- bus transfer acknowledge
      bus_err_i   : in  std_ulogic  -- bus transfer error
      bus_err_i   : in  std_ulogic  -- bus transfer error
    );
    );
  end component;
  end component;
 
 
Line 730... Line 745...
      wren_i    : in  std_ulogic; -- write enable
      wren_i    : in  std_ulogic; -- write enable
      ben_i     : in  std_ulogic_vector(03 downto 0); -- byte write enable
      ben_i     : in  std_ulogic_vector(03 downto 0); -- byte write enable
      data_i    : in  std_ulogic_vector(31 downto 0); -- data in
      data_i    : in  std_ulogic_vector(31 downto 0); -- data in
      data_o    : out std_ulogic_vector(31 downto 0); -- data out
      data_o    : out std_ulogic_vector(31 downto 0); -- data out
      ack_o     : out std_ulogic; -- transfer acknowledge
      ack_o     : out std_ulogic; -- transfer acknowledge
 
      -- time output for CPU --
 
      time_o    : out std_ulogic_vector(63 downto 0); -- current system time
      -- interrupt --
      -- interrupt --
      irq_o     : out std_ulogic  -- interrupt request
      irq_o     : out std_ulogic  -- interrupt request
    );
    );
  end component;
  end component;
 
 
Line 938... Line 955...
      rden_i   : in  std_ulogic; -- read enable
      rden_i   : in  std_ulogic; -- read enable
      wren_i   : in  std_ulogic; -- write enable
      wren_i   : in  std_ulogic; -- write enable
      ben_i    : in  std_ulogic_vector(03 downto 0); -- byte write enable
      ben_i    : in  std_ulogic_vector(03 downto 0); -- byte write enable
      data_i   : in  std_ulogic_vector(31 downto 0); -- data in
      data_i   : in  std_ulogic_vector(31 downto 0); -- data in
      data_o   : out std_ulogic_vector(31 downto 0); -- data out
      data_o   : out std_ulogic_vector(31 downto 0); -- data out
 
      cancel_i : in  std_ulogic; -- cancel current bus transaction
      ack_o    : out std_ulogic; -- transfer acknowledge
      ack_o    : out std_ulogic; -- transfer acknowledge
      err_o    : out std_ulogic; -- transfer error
      err_o    : out std_ulogic; -- transfer error
      -- wishbone interface --
      -- wishbone interface --
      wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
      wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
      wb_dat_i : in  std_ulogic_vector(31 downto 0); -- read data
      wb_dat_i : in  std_ulogic_vector(31 downto 0); -- read data

powered by: WebSVN 2.1.0

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