[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: Barrel Shifter (+)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Nicky 17 декабря 2001 г. 08:34
В ответ на: немножко соображения о сдвигах (не уверен что правда) отправлено yes 14 декабря 2001 г. 12:21

Ваш пример в 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: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru