[an error occurred while processing this directive] [an error occurred while processing this directive]
Первое что приходит в голову это сделать регистр на максимальную длину и кучу выводов после каждого разряда, которые мультиплексировать в зависимости от значения длины. Например вот так...
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Pashka 21 мая 2002 г. 11:59
В ответ на: Подскажите, как на VHDL описать сдвиговый регистр переменной длины (с загрузкой значения его длины) отправлено paha 21 мая 2002 г. 10:32

--
-- Сдвиговый регистр на 32 разряда
--
--

Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;

entity SHREG is
port (
RESET : in std_logic;
CLOCK : in std_logic;
LENGTH : in std_logic_vector(5 downto 0);

DATA_IN : in std_logic;
DATA_OUT: out std_logic
);
end SHREG;

architecture rtl of SHREG is

signal ShiftReg : std_logic_vector(31 downto 0);

begin

process(RESET, CLOCK)
begin
if (RESET = '1') then
ShiftReg <= (others => '0');
elsif rising_edge(CLOCK) then
ShiftReg <= ShiftReg(30 downto 0) & DATA_IN;
end if;
end process;

DATA_OUT <= ShiftReg(31) when LENGTH = "11111" else
ShiftReg(30) when LENGTH = "11110" else
ShiftReg(29) when LENGTH = "11101" else
ShiftReg(28) when LENGTH = "11100" else
ShiftReg(27) when LENGTH = "11011" else
ShiftReg(26) when LENGTH = "11010" else
ShiftReg(25) when LENGTH = "11001" else
ShiftReg(24) when LENGTH = "11000" else
ShiftReg(23) when LENGTH = "10111" else
ShiftReg(22) when LENGTH = "10110" else
ShiftReg(21) when LENGTH = "10101" else
ShiftReg(20) when LENGTH = "10100" else
ShiftReg(19) when LENGTH = "10011" else
ShiftReg(18) when LENGTH = "10010" else
ShiftReg(17) when LENGTH = "10001" else
ShiftReg(16) when LENGTH = "10000" else
ShiftReg(15) when LENGTH = "01111" else
ShiftReg(14) when LENGTH = "01110" else
ShiftReg(13) when LENGTH = "01101" else
ShiftReg(12) when LENGTH = "01100" else
ShiftReg(11) when LENGTH = "01011" else
ShiftReg(10) when LENGTH = "01010" else
ShiftReg( 9) when LENGTH = "01001" else
ShiftReg( 8) when LENGTH = "01000" else
ShiftReg( 7) when LENGTH = "00111" else
ShiftReg( 6) when LENGTH = "00110" else
ShiftReg( 5) when LENGTH = "00101" else
ShiftReg( 4) when LENGTH = "00100" else
ShiftReg( 3) when LENGTH = "00011" else
ShiftReg( 2) when LENGTH = "00010" else
ShiftReg( 1) when LENGTH = "00001" else
ShiftReg( 0) when LENGTH = "00000" else
'0';

end rtl;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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

E-mail: info@telesys.ru