aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/bug040/shl_211.vhd
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/gna/bug040/shl_211.vhd')
-rw-r--r--testsuite/gna/bug040/shl_211.vhd46
1 files changed, 46 insertions, 0 deletions
diff --git a/testsuite/gna/bug040/shl_211.vhd b/testsuite/gna/bug040/shl_211.vhd
new file mode 100644
index 000000000..b675a6df2
--- /dev/null
+++ b/testsuite/gna/bug040/shl_211.vhd
@@ -0,0 +1,46 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+library ieee;
+use ieee.numeric_std.all;
+
+entity shl_211 is
+ port (
+ output : out std_logic_vector(31 downto 0);
+ input : in std_logic_vector(31 downto 0);
+ shift : in std_logic_vector(5 downto 0);
+ padding : in std_logic
+ );
+end shl_211;
+
+architecture augh of shl_211 is
+
+ signal tmp_padding : std_logic;
+ signal tmp_result : std_logic_vector(32 downto 0);
+
+ -- Little utility functions to make VHDL syntactically correct
+ -- with the syntax to_integer(unsigned(vector)) when 'vector' is a std_logic.
+ -- This happens when accessing arrays with <= 2 cells, for example.
+
+ function to_integer(B: std_logic) return integer is
+ variable V: std_logic_vector(0 to 0);
+ begin
+ V(0) := B;
+ return to_integer(unsigned(V));
+ end;
+
+ function to_integer(V: std_logic_vector) return integer is
+ begin
+ return to_integer(unsigned(V));
+ end;
+
+begin
+
+ -- Temporary signals
+ tmp_padding <= padding;
+ tmp_result <= std_logic_vector(shift_left( unsigned(input & padding), to_integer(shift) ));
+
+ -- The output
+ output <= tmp_result(32 downto 1);
+
+end architecture;