[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Ваш пример в Sinplify весит 135 LUTов.
Мой пример (см. ниже) на VHDL - в Sinplify - 171 LUT.
----------------------------- - в OrCADе - 160 LUT.
В принципе это не так уж много (800...1000 экв. вентилей).
В будущем вставлю.
library IEEE;
use IEEE.std_logic_1164.all;
entity BARREL is
port (data_in: in std_logic_vector(31 downto 0);
shift: in std_logic_vector(4 downto 0);
data_out: out std_logic_vector(31 downto 0)
);
end BARREL;
architecture logic of BARREL is
signal buffer_a, buffer_b, buffer_c, buffer_d: std_logic_vector(31 downto 0);
begin
buffer_a(31 downto 0) <=
data_in(30 downto 0) & data_in(31) when shift(0) = '1'
else data_in(31 downto 0);
buffer_b(31 downto 0) <=
buffer_a(29 downto 0) & buffer_a(31 downto 30)
when shift(1) = '1' else buffer_a(31 downto 0);
buffer_c(31 downto 0) <=
buffer_b(27 downto 0) & buffer_b(31 downto 28)
when shift(2) = '1' else buffer_b(31 downto 0);
buffer_d(31 downto 0) <=
buffer_c(23 downto 0) & buffer_c(31 downto 24)
when shift(3) = '1' else buffer_c(31 downto 0);
data_out(31 downto 0) <=
buffer_d(15 downto 0) & buffer_d(31 downto 16)
when shift(4) = '1' else buffer_d(31 downto 0);
end logic;
E-mail: info@telesys.ru