From 708cbe6c1ff75f5bccb09af043577b50982529b9 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 29 Dec 2020 18:33:35 +0100 Subject: testsuite/gna: add tests for #1549 --- testsuite/gna/issue1549/ent2.vhdl | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 testsuite/gna/issue1549/ent2.vhdl (limited to 'testsuite/gna/issue1549/ent2.vhdl') diff --git a/testsuite/gna/issue1549/ent2.vhdl b/testsuite/gna/issue1549/ent2.vhdl new file mode 100644 index 000000000..818d980db --- /dev/null +++ b/testsuite/gna/issue1549/ent2.vhdl @@ -0,0 +1,50 @@ +library ieee; +use ieee.std_logic_1164.all; + +entity ent2 is + generic ( + TUSER_WIDTH : natural := 1); +end ent2; + +architecture ent of ent2 is + type data_t is record + tuser : std_logic_vector; + end record; + + type data_array_t is array (natural range <>) of data_t; + type std_logic_array_t is array (natural range <>) of std_logic_vector; + subtype tuser_array_t is std_logic_array_t(open)(TUSER_WIDTH - 1 downto 0); + +begin + + process + procedure write_data (constant tuser : tuser_array_t) is + begin + for i in tuser'range loop + report integer'image(i) & " =>" & to_bstring(tuser(i)); + end loop; + + assert tuser(1)(0) = '1'; -- <<<<<====== This should not fail + end procedure; + + procedure handle_data_array ( constant data : data_array_t) is + variable local_tuser : std_logic_array_t(data'range)(TUSER_WIDTH - 1 downto 0); + begin + -- Convert a list of tuples into two lists + for i in data'range loop + local_tuser(i) := data(i).tuser; + assert local_tuser(i) = data(i).tuser + report "local_tuser and data(i).tuser should not be different here"; + end loop; + + write_data(tuser => local_tuser); + end; + + constant data : data_array_t(0 to 1)(tuser(0 downto 0)) := + (0 => (tuser => (0 downto 0 => '0')), + 1 => (tuser => (0 downto 0 => '1'))); + begin + handle_data_array(data); + wait; + end process; +end ent; -- cgit v1.2.3