Регистры - обычно это массивы из 8, 16, 32 или большего количества триггеров T или D-типа. В VHDL, регистры чаще всего кодируются так, что все триггеры синхронизированы с системными часами и используют другое средство управления, типа предварительной установки или сброса. Каждый активный переход часов вызывает массив триггеров. Если приходит асинхронный сигнал сброса, выход регистра должен обнуляться. Исходный текст, для блоков регистра подобен тексту показанному в отдельных моделях D-триггера, в разделе Сброса и предварительной установки.
Ниже вы найдете пример строительства блоков регистра на VHDL.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity reg8 is
port(reset, ck : in std_logic;
d : in std_logic_vector (7 downto 0);
q : out std_logic_vector (7 downto 0));
end;
architecture behavior of reg8 is
begin
process (reset, ck)
begin
if reset = '1' then
q <= "00000000";
elsif (ck = '1' and ck'event) then
q <= d;
end if;
end process;
end;
dn = указывает состояние соответствующего входа до активного перехода часов.
Диаграмма работы иллюстрирует моделирование блока регистра.
Сдвиговый регистр.
Сдвиговый регистр, сдвигает набор сигналов данных на определенное количество разрядов, в течение одного периода.
Чтобы создать сдвиговый регистр в VHDL, желательно использовать стандартный числовой пакет, чтобы воспользоваться преимуществом сдвига для операторов знакового и без знакового типов данных, как показано в следующих примерах:
shift_left (data, shift_amount)
shift_right (data, shift_amount)
rotate_left (data, rotate_amount)
rotate_right (data, rotate_amount)
Фрагмент кода демонстрирует строительство сдвигового регистра, используя VHDL.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity shiftl is
port(clk : in std_logic; -- часы
ldst: in std_logic; -- загрузка управления
s: in std_logic_vector (2 downto 0); -- сдвиг на выбранное количество разрядов
d: in std_logic_vector (7 downto 0); -- данные
q: in std_logic_vector (7 downto 0));-- выход сдвигающего устройства
end;
architecture behavior of shiftl is
signal s_sig : unsigned (2 downto 0);
signal d_sig : unsigned (7 downto 0);
signal q_sig : unsigned (7 downto 0);
begin
-- преобразование типов
s_sig <= unsigned(s);
d_sig <= unsigned(d);
q <= std_logic_vector(q_sig);
-- сдвигающее устройство барабанного типа
process (clk,ldst,s_sig,d_sig)
begin
if (clk='1' and clk'event) then
if (ldst='1') then
q_sig <= d_sig;
elsif (s_sig=b"000") then
q_sig <= shift_right(q_sig,0);
elsif (s_sig=b"001") then
q_sig <= shift_right(q_sig,1);
elsif (s_sig=b"010") then
q_sig <= shift_right(q_sig,2);
elsif (s_sig=b"011") then
q_sig <= shift_right(q_sig,3);
elsif (s_sig=b"100") then
q_sig <= shift_right(q_sig,4);
elsif (s_sig=b"101") then
q_sig <= shift_right(q_sig,5);
elsif (s_sig=b"110") then
q_sig <= shift_right(q_sig,6);
elsif (s_sig=b"111") then
q_sig <= shift_right(q_sig,7);
end if;
end if;
end process;
end;
qn+s = (где s - 0 .. 7) указывает состояние выхода после передачи активных часов
Таблица ниже иллюстрирует моделирование сдвигового регистра.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.