Line 1... |
Line 1... |
-- #################################################################################################
|
-- #################################################################################################
|
-- # << NEORV32 - External Interrupt Controller (XIRQ) >> #
|
-- # << NEORV32 - External Interrupt Controller (XIRQ) >> #
|
-- # ********************************************************************************************* #
|
-- # ********************************************************************************************* #
|
-- # Simple interrupt controller for platform (processor-external) interrupts. Up to 32 channels #
|
-- # Simple interrupt controller for platform (processor-external) interrupts. Up to 32 channels #
|
-- # are supported that get prioritized into a single CPU interrupt. #
|
-- # are supported that get (optionally) prioritized into a single CPU interrupt. #
|
-- # #
|
-- # #
|
-- # The actual trigger configuration has to be done before synthesis using the XIRQ_TRIGGER_TYPE #
|
-- # The actual trigger configuration has to be done before synthesis using the XIRQ_TRIGGER_TYPE #
|
-- # and XIRQ_TRIGGER_POLARITY generics. These allow to configure channel-independent low-level, #
|
-- # and XIRQ_TRIGGER_POLARITY generics. These allow to configure channel-independent low-level, #
|
-- # high-level, falling-edge and rising-edge triggers. #
|
-- # high-level, falling-edge and rising-edge triggers. #
|
-- # ********************************************************************************************* #
|
-- # ********************************************************************************************* #
|
Line 46... |
Line 46... |
library neorv32;
|
library neorv32;
|
use neorv32.neorv32_package.all;
|
use neorv32.neorv32_package.all;
|
|
|
entity neorv32_xirq is
|
entity neorv32_xirq is
|
generic (
|
generic (
|
XIRQ_NUM_CH : natural := 32; -- number of external IRQ channels (0..32)
|
XIRQ_NUM_CH : natural; -- number of external IRQ channels (0..32)
|
XIRQ_TRIGGER_TYPE : std_ulogic_vector(31 downto 0) := (others => '1'); -- trigger type: 0=level, 1=edge
|
XIRQ_TRIGGER_TYPE : std_ulogic_vector(31 downto 0); -- trigger type: 0=level, 1=edge
|
XIRQ_TRIGGER_POLARITY : std_ulogic_vector(31 downto 0) := (others => '1') -- trigger polarity: 0=low-level/falling-edge, 1=high-level/rising-edge
|
XIRQ_TRIGGER_POLARITY : std_ulogic_vector(31 downto 0) -- trigger polarity: 0=low-level/falling-edge, 1=high-level/rising-edge
|
);
|
);
|
port (
|
port (
|
-- host access --
|
-- host access --
|
clk_i : in std_ulogic; -- global clock line
|
clk_i : in std_ulogic; -- global clock line
|
addr_i : in std_ulogic_vector(31 downto 0); -- address
|
addr_i : in std_ulogic_vector(31 downto 0); -- address
|