1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
library IEEE;
use IEEE.std_logic_1164.all;
entity a is
port(
irq : out std_ulogic
);
end a;
library IEEE;
use IEEE.std_logic_1164.all;
entity b is
generic(
NUM_CHANNELS : positive := 4
);
port(
src_channel : out integer range 0 to NUM_CHANNELS-1;
src_valid : in std_ulogic;
src_ready : out std_ulogic
);
end b;
architecture struct of a is
signal src_channel : integer range 0 to 0;
signal src_valid : std_ulogic;
signal src_ready : std_ulogic;
begin
u0 : entity work.b
generic map(
NUM_CHANNELS => 1
)
port map(
src_channel => src_channel,
src_valid => src_valid,
src_ready => src_ready
);
end architecture;
architecture behav of b is
begin
process(all)
variable ready : std_ulogic;
variable channel_ready : std_ulogic;
begin
ready := '1';
for i in 0 to NUM_CHANNELS-1 loop
if i = src_channel and src_valid = '1' then
channel_ready := '0';
else
channel_ready := '1';
end if;
ready := ready and channel_ready;
end loop;
src_ready <= ready;
src_channel <= NUM_CHANNELS-1;
end process;
end architecture;
|