From 0d126cdfbff63d3e646798543e898aa80691c074 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Sat, 23 Nov 2019 12:21:08 +0100 Subject: testsuite/synth: add testcase from #1023 --- testsuite/synth/issue1023/barrel_shifter.vhdl | 42 +++++++++++++++++++++++++++ testsuite/synth/issue1023/testsuite.sh | 9 ++++++ 2 files changed, 51 insertions(+) create mode 100644 testsuite/synth/issue1023/barrel_shifter.vhdl create mode 100755 testsuite/synth/issue1023/testsuite.sh (limited to 'testsuite') 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" -- cgit v1.2.3