aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/issue2113
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-07-07 22:35:03 +0200
committerTristan Gingold <tgingold@free.fr>2022-07-08 05:29:15 +0200
commitaad4702adb85eeb15ce666643f386ba171ddc675 (patch)
tree961789b6516509b1100791d2f32e4cccafe03396 /testsuite/synth/issue2113
parentbb991c5aef8cb86249af9c963c7da5d914bdec9c (diff)
downloadghdl-aad4702adb85eeb15ce666643f386ba171ddc675.tar.gz
ghdl-aad4702adb85eeb15ce666643f386ba171ddc675.tar.bz2
ghdl-aad4702adb85eeb15ce666643f386ba171ddc675.zip
testsuite/synth: add a test for #2113
Diffstat (limited to 'testsuite/synth/issue2113')
-rw-r--r--testsuite/synth/issue2113/c.vhdl61
-rwxr-xr-xtestsuite/synth/issue2113/testsuite.sh5
2 files changed, 66 insertions, 0 deletions
diff --git a/testsuite/synth/issue2113/c.vhdl b/testsuite/synth/issue2113/c.vhdl
new file mode 100644
index 000000000..b5df551cf
--- /dev/null
+++ b/testsuite/synth/issue2113/c.vhdl
@@ -0,0 +1,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;
diff --git a/testsuite/synth/issue2113/testsuite.sh b/testsuite/synth/issue2113/testsuite.sh
index 9ab046cc4..34a015435 100755
--- a/testsuite/synth/issue2113/testsuite.sh
+++ b/testsuite/synth/issue2113/testsuite.sh
@@ -12,4 +12,9 @@ if grep "0'" syn_a.v; then
exit 1;
fi
+synth --out=verilog -Wno-nowrite c.vhdl -e > syn_c.v
+if grep channel syn_c.v; then
+ exit 1
+fi
+
echo "Test successful"