Мастер VHDL: полное введение в проектирование FPGA и ASIC
Учебник — Введение в VHDL
VHDL — страшный акроним. Он означает VHSIC Hardware Description Language. Акроним внутри акронима, потрясающе! VHSIC расшифровывается как Very High Speed Integrated Circuit. Таким образом, полное расширение VHDL: Very High Speed Integrated Circuit Hardware Description Language. Ого, как много слов. VHDL — один из двух языков, используемых в образовании и бизнесе для проектирования FPGA и ASIC. Если вы незнакомы с этими удивительными схемами, сначала изучите введение в FPGA и ASIC. VHDL и Verilog — два языка, которыми цифровые проектировщики описывают свои схемы, и они принципиально отличаются от традиционных языков программирования вроде C и Java.
В примере ниже мы создадим VHDL-файл, который описывает логическое элемент «И» (AND Gate). Напоминание: простой элемент И имеет два входа и один выход. Выход равен 1 только когда оба входа равны 1. Ниже приведена схема элемента И, который мы будем описывать на VHDL.
Элемент И
Начнем! Фундаментальная единица VHDL — это сигнал. Пока предположим, что сигнал может быть 0 или 1 (существуют и другие значения, но об этом позже). Базовая логика VHDL:
signal and_gate : std_logic; and_gate <= input_1 and input_2;
Первая строка определяет сигнал типа std_logic с именем and_gate. Std_logic — самый распространенный тип для сигналов, но есть и другие. Этот код генерирует элемент И с одним выходом (and_gate) и двумя входами (input_1, input_2). Ключевое слово «and» зарезервировано в VHDL. Оператор <= — оператор присваивания. Прочитав код вслух: «Сигнал and_gate ПОЛУЧАЕТ input_1 И input_2».
Откуда берутся input_1 и input_2? Это входы файла, их нужно объявить. Входы и выходы задаются в entity (сущность). Entity содержит порт, описывающий все входы и выходы. Создадим простую сущность:
entity example_and is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic ); end example_and;
Базовая сущность: example_and с тремя сигналами — двумя входами и одним выходом, все типа std_logic. Для завершения нужен еще один ключевой элемент — architecture (архитектура). Архитектура описывает функциональность сущности. Аналогия: entity — это оглавление диссертации, architecture — её содержание. Создадим архитектуру:
architecture rtl of example_and is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
Архитектура rtl сущности example_and. Все сигналы, используемые архитектурой, объявляются между «is» и «begin». Логика размещается между «begin» и «end». Осталось подключить библиотеку. Библиотека определяет поведение ключевых слов. В начале файла нужны две строки:
library ieee; use ieee.std_logic_1164.all;
Поздравляем! Вы создали первый VHDL-файл. Полный листинг:
library ieee; use ieee.std_logic_1164.all; entity example_and is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic ); end example_and; architecture rtl of example_and is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
Кажется, для простого элемента И написано много кода? Во-первых, элементы И не глупые. Во-вторых, вы правы — VHDL очень вербален. Привыкайте: то, что в ПО делается легко, в HDL (Verilog или VHDL) занимает значительно больше времени. Но попросите программиста вывести изображение «Жизни» Конвея на VGA-монитор — и голова у них пойдет кругом! Кстати, то видео создано на VHDL и FPGA. Вы тоже скоро сможете!
Далее рассмотрим другое фундаментальное ключевое слово VHDL: process.
VHDL
- Использование записей (Records) в VHDL для чистых, повторно используемых интерфейсов FIFO
- Инициализация блочной памяти FPGA из текстовых файлов с помощью библиотеки TEXTIO в VHDL
- Использование констант и generic map в VHDL для гибкого дизайна модулей
- Освоение параллельных операторов в VHDL: практическое руководство
- Освоение std_logic_vector: создание сигнальных векторов в VHDL
- Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
- Создание эффекта «дыхания» светодиода с помощью синусоиды из блочной памяти
- Мастер VHDL: полное введение в проектирование FPGA и ASIC
- Продвинутый тест по владению VHDL — Часть 3
- Освоение std_logic в VHDL: состояния, разрешение и анализ волновой формы