aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/issue2113/a.vhdl
blob: 82f8039cd664c80861e5840b0b22fd0a17a16969 (plain)
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
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 :  in 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_valid       : std_ulogic;
	signal src_ready       : std_ulogic;
begin
	u0 : entity work.b
	generic map(
		NUM_CHANNELS => 1
	)
	port map(
		src_channel => 0,
		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;
	end process;

end architecture;