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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [rtl/] [core/] [neorv32_top.vhd] - Diff between revs 47 and 48

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

Rev 47 Rev 48
Line 134... Line 134...
    cfs_in_i    : in  std_ulogic_vector(31 downto 0) := (others => '0'); -- custom CFS inputs conduit
    cfs_in_i    : in  std_ulogic_vector(31 downto 0) := (others => '0'); -- custom CFS inputs conduit
    cfs_out_o   : out std_ulogic_vector(31 downto 0); -- custom CFS outputs conduit
    cfs_out_o   : out std_ulogic_vector(31 downto 0); -- custom CFS outputs conduit
    -- system time input from external MTIME (available if IO_MTIME_EN = false) --
    -- system time input from external MTIME (available if IO_MTIME_EN = false) --
    mtime_i     : in  std_ulogic_vector(63 downto 0) := (others => '0'); -- current system time
    mtime_i     : in  std_ulogic_vector(63 downto 0) := (others => '0'); -- current system time
    -- Interrupts --
    -- Interrupts --
    soc_firq_i  : in  std_ulogic_vector(3 downto 0) := (others => '0'); -- fast interrupt channels
    soc_firq_i  : in  std_ulogic_vector(7 downto 0) := (others => '0'); -- fast interrupt channels
    mtime_irq_i : in  std_ulogic := '0'; -- machine timer interrupt, available if IO_MTIME_EN = false
    mtime_irq_i : in  std_ulogic := '0'; -- machine timer interrupt, available if IO_MTIME_EN = false
    msw_irq_i   : in  std_ulogic := '0'; -- machine software interrupt
    msw_irq_i   : in  std_ulogic := '0'; -- machine software interrupt
    mext_irq_i  : in  std_ulogic := '0'  -- machine external interrupt
    mext_irq_i  : in  std_ulogic := '0'  -- machine external interrupt
  );
  );
end neorv32_top;
end neorv32_top;
Line 233... Line 233...
  signal sysinfo_ack    : std_ulogic;
  signal sysinfo_ack    : std_ulogic;
 
 
  -- IRQs --
  -- IRQs --
  signal mtime_irq : std_ulogic;
  signal mtime_irq : std_ulogic;
  --
  --
  signal fast_irq     : std_ulogic_vector(7 downto 0);
  signal fast_irq     : std_ulogic_vector(15 downto 0);
  signal fast_irq_ack : std_ulogic_vector(7 downto 0);
  signal fast_irq_ack : std_ulogic_vector(15 downto 0);
 
  --
  signal gpio_irq     : std_ulogic;
  signal gpio_irq     : std_ulogic;
  signal wdt_irq      : std_ulogic;
  signal wdt_irq      : std_ulogic;
  signal uart_irq     : std_ulogic;
  signal uart_rxd_irq : std_ulogic;
 
  signal uart_txd_irq : std_ulogic;
  signal spi_irq      : std_ulogic;
  signal spi_irq      : std_ulogic;
  signal twi_irq      : std_ulogic;
  signal twi_irq      : std_ulogic;
  signal cfs_irq      : std_ulogic;
  signal cfs_irq      : std_ulogic;
 
  signal cfs_irq_ack  : std_ulogic;
 
 
  -- misc --
  -- misc --
  signal mtime_time : std_ulogic_vector(63 downto 0); -- current system time from MTIME
  signal mtime_time : std_ulogic_vector(63 downto 0); -- current system time from MTIME
  signal cpu_sleep  : std_ulogic; -- CPU is in sleep mode when set
  signal cpu_sleep  : std_ulogic; -- CPU is in sleep mode when set
 
 
Line 410... Line 413...
  -- advanced memory control --
  -- advanced memory control --
  fence_o  <= cpu_d.fence; -- indicates an executed FENCE operation
  fence_o  <= cpu_d.fence; -- indicates an executed FENCE operation
  fencei_o <= cpu_i.fence; -- indicates an executed FENCEI operation
  fencei_o <= cpu_i.fence; -- indicates an executed FENCEI operation
 
 
  -- fast interrupts - processor-internal --
  -- fast interrupts - processor-internal --
  fast_irq(0) <= wdt_irq;             -- highest priority, watchdog timeout interrupt
  fast_irq(00) <= wdt_irq;      -- HIGHEST PRIORITY - watchdog timeout
  fast_irq(1) <= gpio_irq or cfs_irq; -- GPIO input pin-change interrupt or custom CFS interrupt
  fast_irq(01) <= '0';          -- reserved
  fast_irq(2) <= uart_irq;            -- UART TX done or RX complete interrupt
  fast_irq(02) <= cfs_irq;      -- custom functions subsystem
  fast_irq(3) <= spi_irq or twi_irq;  -- lowest priority, can be triggered by SPI or TWI
  fast_irq(03) <= uart_rxd_irq; -- UART data received
  -- fast interrupts - platform level (for cutsom use) --
  fast_irq(04) <= uart_txd_irq; -- UART transmission done
  fast_irq(4) <= soc_firq_i(0);
  fast_irq(05) <= spi_irq;      -- SPI transmission done
  fast_irq(5) <= soc_firq_i(1);
  fast_irq(06) <= twi_irq;      -- TWI transmission done
  fast_irq(6) <= soc_firq_i(2);
  fast_irq(07) <= gpio_irq;     -- GPIO pin-change
  fast_irq(7) <= soc_firq_i(3);
 
 
  -- fast interrupts - platform level (for custom use) --
 
  fast_irq(08) <= soc_firq_i(0);
 
  fast_irq(09) <= soc_firq_i(1);
 
  fast_irq(10) <= soc_firq_i(2);
 
  fast_irq(11) <= soc_firq_i(3);
 
  fast_irq(12) <= soc_firq_i(4);
 
  fast_irq(13) <= soc_firq_i(5);
 
  fast_irq(14) <= soc_firq_i(6);
 
  fast_irq(15) <= soc_firq_i(7);
 
 
 
  -- IRQ acknowledge --
 
  cfs_irq_ack <= fast_irq_ack(2);
 
 
 
 
  -- CPU Instruction Cache ------------------------------------------------------------------
  -- CPU Instruction Cache ------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  neorv32_icache_inst_true:
  neorv32_icache_inst_true:
Line 718... Line 733...
      clkgen_i    => clk_gen,         -- "clock" inputs
      clkgen_i    => clk_gen,         -- "clock" inputs
      -- CPU state --
      -- CPU state --
      sleep_i     => cpu_sleep,       -- set if cpu is in sleep mode
      sleep_i     => cpu_sleep,       -- set if cpu is in sleep mode
      -- interrupt --
      -- interrupt --
      irq_o       => cfs_irq,         -- interrupt request
      irq_o       => cfs_irq,         -- interrupt request
      irq_ack_i   => fast_irq_ack(1), -- interrupt acknowledge
      irq_ack_i   => cfs_irq_ack,     -- interrupt acknowledge
      -- custom io (conduit) --
      -- custom io (conduit) --
      cfs_in_i    => cfs_in_i,        -- custom inputs
      cfs_in_i    => cfs_in_i,        -- custom inputs
      cfs_out_o   => cfs_out_o        -- custom outputs
      cfs_out_o   => cfs_out_o        -- custom outputs
    );
    );
  end generate;
  end generate;
Line 853... Line 868...
      clkgen_i    => clk_gen,
      clkgen_i    => clk_gen,
      -- com lines --
      -- com lines --
      uart_txd_o  => uart_txd_o,
      uart_txd_o  => uart_txd_o,
      uart_rxd_i  => uart_rxd_i,
      uart_rxd_i  => uart_rxd_i,
      -- interrupts --
      -- interrupts --
      uart_irq_o  => uart_irq     -- uart rx/tx interrupt
      irq_rxd_o   => uart_rxd_irq, -- uart data received interrupt
 
      irq_txd_o   => uart_txd_irq  -- uart transmission done interrupt
    );
    );
  end generate;
  end generate;
 
 
  neorv32_uart_inst_false:
  neorv32_uart_inst_false:
  if (IO_UART_EN = false) generate
  if (IO_UART_EN = false) generate
    uart_rdata <= (others => '0');
    uart_rdata <= (others => '0');
    uart_ack   <= '0';
    uart_ack   <= '0';
    uart_txd_o <= '0';
    uart_txd_o <= '0';
    uart_cg_en <= '0';
    uart_cg_en <= '0';
    uart_irq   <= '0';
    uart_rxd_irq <= '0';
 
    uart_txd_irq <= '0';
  end generate;
  end generate;
 
 
 
 
  -- Serial Peripheral Interface (SPI) ------------------------------------------------------
  -- Serial Peripheral Interface (SPI) ------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
Line 890... Line 907...
      spi_sck_o   => spi_sck_o,   -- SPI serial clock
      spi_sck_o   => spi_sck_o,   -- SPI serial clock
      spi_sdo_o   => spi_sdo_o,   -- controller data out, peripheral data in
      spi_sdo_o   => spi_sdo_o,   -- controller data out, peripheral data in
      spi_sdi_i   => spi_sdi_i,   -- controller data in, peripheral data out
      spi_sdi_i   => spi_sdi_i,   -- controller data in, peripheral data out
      spi_csn_o   => spi_csn_o,   -- SPI CS
      spi_csn_o   => spi_csn_o,   -- SPI CS
      -- interrupt --
      -- interrupt --
      spi_irq_o   => spi_irq      -- transmission done interrupt
      irq_o       => spi_irq      -- transmission done interrupt
    );
    );
  end generate;
  end generate;
 
 
  neorv32_spi_inst_false:
  neorv32_spi_inst_false:
  if (IO_SPI_EN = false) generate
  if (IO_SPI_EN = false) generate
Line 927... Line 944...
      clkgen_i    => clk_gen,
      clkgen_i    => clk_gen,
      -- com lines --
      -- com lines --
      twi_sda_io  => twi_sda_io,  -- serial data line
      twi_sda_io  => twi_sda_io,  -- serial data line
      twi_scl_io  => twi_scl_io,  -- serial clock line
      twi_scl_io  => twi_scl_io,  -- serial clock line
      -- interrupt --
      -- interrupt --
      twi_irq_o   => twi_irq      -- transfer done IRQ
      irq_o       => twi_irq      -- transfer done IRQ
    );
    );
  end generate;
  end generate;
 
 
  neorv32_twi_inst_false:
  neorv32_twi_inst_false:
  if (IO_TWI_EN = false) generate
  if (IO_TWI_EN = false) generate

powered by: WebSVN 2.1.0

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