Задача
Сформировать псевдослучайную последовательность максимального периода.
Тип схемы: Синхронная схема: сдвиговый регистр и логика обратной связи.
Модуль: lfsr. Среда: Quartus, Vivado, ISE или свободный GHDL для моделирования.
Теорию по языку смотрите в статье VHDL — язык описания аппаратуры,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Объявить регистр с ненулевым начальным состоянием.
- Сложить по модулю два несколько разрядов — это сигнал обратной связи.
- Сдвигать регистр, вдвигая результат обратной связи.
- Снимать выход последовательно или всем словом сразу.
Код на VHDL
Код проверен компилятором GHDL: проходит анализ и элаборацию без ошибок и предупреждений. Скачать: v27.vhd
--=====================================================
-- Проект 27. Генератор псевдослучайной последовательности
-- Регистр сдвига с линейной обратной связью (LFSR):
-- максимальная длина периода при верных отводах.
--=====================================================
library ieee;
use ieee.std_logic_1164.all;
entity lfsr is
port (
clk : in std_logic;
rst : in std_logic;
en : in std_logic;
rnd : out std_logic_vector(15 downto 0);
bit_out : out std_logic -- последовательный выход
);
end entity lfsr;
architecture rtl of lfsr is
-- начальное состояние не может быть нулевым, иначе регистр «залипнет»
signal reg : std_logic_vector(15 downto 0) := x"ACE1";
signal fb : std_logic;
begin
-- отводы 16, 14, 13, 11 дают период 65535
fb <= reg(15) xor reg(13) xor reg(12) xor reg(10);
process (clk, rst)
begin
if rst = '1' then
reg <= x"ACE1";
elsif rising_edge(clk) then
if en = '1' then
reg <= reg(14 downto 0) & fb;
end if;
end if;
end process;
rnd <= reg;
bit_out <= reg(15);
end architecture rtl;
Пояснения
- Нулевое состояние для LFSR запрещено: обратная связь даст ноль, и регистр останется в нём навсегда.
- Правильный выбор отводов даёт максимальный период: для шестнадцати разрядов это 65535 состояний.
- Последовательность полностью детерминирована и повторяема при том же начальном значении — это удобно для тестов, но непригодно для криптографии без доработок.
Что дальше
Следующие проекты — в разделе проекты на VHDL. Сравнить подход с языком Verilog можно в статье Verilog, а разобраться в устройстве самих кристаллов — в статье ПЛИС: FPGA и CPLD.