diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-11-23 12:21:08 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-11-23 12:21:08 +0100 |
commit | 0d126cdfbff63d3e646798543e898aa80691c074 (patch) | |
tree | 851022025b3a15c9bb88aa53d83484021413131b /testsuite/synth/issue1023 | |
parent | dd34ca9d5e79270fee191d476e07d8e2e63848a0 (diff) | |
download | ghdl-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.vhdl | 42 | ||||
-rwxr-xr-x | testsuite/synth/issue1023/testsuite.sh | 9 |
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" |