Задача
Сформировать бит чётности для передачи и проверить его на приёме.
Тип схемы: Комбинационная схема на основе функции.
Модуль: parity_check. Среда: Quartus, Vivado, ISE или свободный GHDL для моделирования.
Теорию по языку смотрите в статье VHDL — язык описания аппаратуры,
по самим микросхемам — на странице ПЛИС.
Алгоритм
- Описать функцию, сворачивающую вектор операцией XOR в цикле.
- Применить её к передаваемому байту — результат и есть бит чётности.
- Применить ту же функцию к принятому байту.
- Сравнить результат с принятым битом чётности и сообщить о расхождении.
Код на VHDL
Код проверен компилятором GHDL: проходит анализ и элаборацию без ошибок и предупреждений. Скачать: v40.vhd
--=====================================================
-- Проект 40. Генератор и проверка чётности
-- Формирует бит паритета для передачи и проверяет
-- целостность принятого байта с этим битом.
--=====================================================
library ieee;
use ieee.std_logic_1164.all;
entity parity_check is
port (
data_tx : in std_logic_vector(7 downto 0); -- байт на передачу
parity_tx : out std_logic; -- бит чётности для него
data_rx : in std_logic_vector(7 downto 0); -- принятый байт
parity_rx : in std_logic; -- принятый бит чётности
error : out std_logic -- обнаружено расхождение
);
end entity parity_check;
architecture rtl of parity_check is
function calc_parity(v : std_logic_vector) return std_logic is
variable p : std_logic := '0';
begin
for i in v'range loop
p := p xor v(i); -- чётность через XOR всех бит
end loop;
return p;
end function;
begin
parity_tx <= calc_parity(data_tx);
error <= '1' when calc_parity(data_rx) /= parity_rx else '0';
end architecture rtl;
Пояснения
- Функция в VHDL — обычный синтезируемый блок: цикл
forпо разрядам вектора разворачивается синтезатором в дерево из вентилей XOR. - Контроль чётности ловит только нечётное число ошибочных бит; две одновременные ошибки останутся незамеченными.
- Одна и та же функция используется дважды — для формирования и для проверки, что исключает рассинхронизацию логики между этими двумя местами.
Что дальше
Следующие проекты — в разделе проекты на VHDL. Сравнить подход с языком Verilog можно в статье Verilog, а разобраться в устройстве самих кристаллов — в статье ПЛИС: FPGA и CPLD.