aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/issue1023
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-11-23 12:21:08 +0100
committerTristan Gingold <tgingold@free.fr>2019-11-23 12:21:08 +0100
commit0d126cdfbff63d3e646798543e898aa80691c074 (patch)
tree851022025b3a15c9bb88aa53d83484021413131b /testsuite/synth/issue1023
parentdd34ca9d5e79270fee191d476e07d8e2e63848a0 (diff)
downloadghdl-0d126cdfbff63d3e646798543e898aa80691c074.tar.gz
ghdl-0d126cdfbff63d3e646798543e898aa80691c074.tar.bz2
ghdl-0d126cdfbff63d3e646798543e898aa80691c074.zip
testsuite/synth: add testcase from #1023
Diffstat (limited to 'testsuite/synth/issue1023')
-rw-r--r--testsuite/synth/issue1023/barrel_shifter.vhdl42
-rwxr-xr-xtestsuite/synth/issue1023/testsuite.sh9
2 files changed, 51 insertions, 0 deletions
diff --git a/testsuite/synth/issue1023/barrel_shifter.vhdl b/testsuite/synth/issue1023/barrel_shifter.vhdl
new file mode 100644
index 000000000..585c8afd7
--- /dev/null
+++ b/testsuite/synth/issue1023/barrel_shifter.vhdl
@@ -0,0 +1,42 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use ieee.math_real.all;
+
+-------------------------------------------------------------------------------
+
+entity barrel_shifter is
+
+ generic (
+ NBITS : positive := 8);
+
+ port (
+ din, d : in std_logic_vector(NBITS-1 downto 0); -- data in, shift distance
+ dout : out std_logic_vector(NBITS-1 downto 0)); -- data out
+
+end entity barrel_shifter;
+
+-------------------------------------------------------------------------------
+
+architecture dfl of barrel_shifter is
+ -- TODO: Calculate the number of required shift stages as a constant.
+ constant nshift : natural := natural(log2(real(NBITS)));
+
+ -- custom vector for the shift stages
+ type my_vec is array(0 to nshift) of std_logic_vector(NBITS-1 downto 0);
+ signal vector : my_vec;
+ -- vector of zeros
+ constant ZEROS : std_logic_vector(NBITS-1 downto 0) := (others => '0');
+
+begin -- architecture dfl
+ vector(0) <= din;
+
+ gen: for i in 0 to nshift-1 generate
+ vector(i+1) <= (vector(i)(NBITS-1-2**i downto 0)
+ & ZEROS(2**i-1 downto 0))
+ when d(i) = '1'
+ else vector(i);
+ end generate gen;
+ dout <= vector(nshift);
+
+end architecture dfl;
diff --git a/testsuite/synth/issue1023/testsuite.sh b/testsuite/synth/issue1023/testsuite.sh
new file mode 100755
index 000000000..f87fbd010
--- /dev/null
+++ b/testsuite/synth/issue1023/testsuite.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+synth barrel_shifter.vhdl -e $t > syn_barrel_shifter.vhdl
+analyze syn_barrel_shifter.vhdl
+clean
+
+echo "Test successful"