Главная / Без рубрики / Языки описания аппаратуры (HDL): Verilog, VHDL

Языки описания аппаратуры (HDL): Verilog, VHDL

1. Введение: зачем нужны HDL

Языки описания аппаратуры (HDL, Hardware Description Language) — специализированные языки для проектирования, моделирования и верификации цифровых схем. Они позволяют:

  • описывать структуру и поведение электронных устройств на разных уровнях абстракции;
  • автоматизировать синтез реальных схем (на ПЛИС, ASIC);
  • проводить симуляцию до физического изготовления;
  • документировать проект в машиночитаемой форме.

Ключевые задачи HDL:

  • описание структуры (какие блоки и как соединены);
  • описание поведения (как схема реагирует на входные сигналы);
  • временной анализ (задержки, синхронизация);
  • верификация (проверка корректности через тесты).

2. Основные HDL: Verilog и VHDL

2.1. Краткая история

VHDL (VHSIC Hardware Description Language):

  • разработан в 1980‑х по заказу Минобороны США (программа VHSIC);
  • стандартизован IEEE (1076), версии: 1987, 1993, 2002, 2008;
  • строгая типизация, близок к Ada.

Verilog:

  • создан в 1984 г. компанией Gateway Design Automation;
  • приобретён Cadence, передан в общественное пользование;
  • стандартизован IEEE (1364), версии: 1995, 2001, 2005, 2012;
  • синтаксис напоминает C.

2.2. Области применения

  • проектирование ПЛИС (FPGA, CPLD);
  • разработка ASIC (специализированных ИС);
  • моделирование и симуляция цифровых систем;
  • генерация тестовых стендов и верификация.

3. Общие концепции HDL

3.1. Уровни абстракции описания

  1. Поведенческий — что делает схема (алгоритмы, уравнения).
  2. Регистрово‑передаточный (RTL) — передача данных между регистрами, логические операции.
  3. Вентильный (gate‑level) — конкретные логические элементы (И, ИЛИ, НЕ).
  4. Физическй (layout) — размещение на кристалле (обычно не в HDL).

3.2. Параллелизм

В отличие от программных языков, HDL моделирует параллельные процессы:

  • несколько блоков выполняются одновременно;
  • сигналы распространяются с задержками;
  • синхронизация через тактовые сигналы.

3.3. Временная модель

  • Дельта‑задержки (внутри такта);
  • инкрементные задержки (например, #5 — задержка 5 нс);
  • тактовая синхронизация (всегда@(posedge clk)).

3.4. Иерархия проектирования

  • модули/сущности (top‑level, подблоки);
  • порты (входы/выходы);
  • сигналы (внутренние связи);
  • компоненты (экземпляры подблоков).

4. VHDL: основы и особенности

4.1. Структура модуля (entity + architecture)

entity MyAdder is
    port (
        A, B : in  std_logic_vector(7 downto 0);
        Sum  : out std_logic_vector(7 downto 0);
        Cout : out std_logic
    );
end entity;

architecture RTL of MyAdder is
begin
    -- Описание поведения
    process(A, B)
    begin
        Sum <= A + B;
        Cout <= (A(7) and B(7)) or (A(7) and Sum(7)) or (B(7) and Sum(7));
    end process;
end architecture;

Компоненты:

  • entity — интерфейс (порты);
  • architecture — реализация (логика);
  • port — входы/выходы;
  • signal — внутренние сигналы;
  • process — параллельный блок кода.

4.2. Типы данных

  • bit, boolean — бинарные;
  • std_logic — 9‑знаковый тип (U, X, 0, 1, Z, W, L, H, -);
  • std_logic_vector — вектор битов;
  • integer, natural, positive;
  • пользовательские типы (type, subtype).

4.3. Операторы

  • Логические: and, or, not, xor;
  • Сравнения: =, /=, <, >, <=, >=;
  • Присваивание: <= (для сигналов), := (для переменных в process);
  • Конкатенация: &.

4.4. Управляющие конструкции

  • ifthenelsifelseend if;
  • casewhenend case;
  • циклы: for, while;
  • wait (для моделирования задержек).

4.5. Пакеты и библиотеки

  • use ieee.std_logic_1164.all; — стандартные типы;
  • use ieee.numeric_std.all; — арифметические операции;
  • пользовательские пакеты (package).

5. Verilog: основы и особенности

5.1. Структура модуля

module MyAdder (
    input  [7:0] A, B,
    output [7:0] Sum,
    output       Cout
);

    // Описание поведения
    assign {Cout, Sum} = A + B;

endmodule

Компоненты:

  • module — объявление модуля;
  • input, output, inout — порты;
  • wire, reg — типы сигналов;
  • assign — непрерывное присваивание;
  • always — процедурный блок.

5.2. Типы данных

  • wire — комбинационный сигнал;
  • reg — регистр (может хранить значение);
  • integer, real;
  • векторы: [7:0] (от старшего к младшему биту);
  • parameter — константы.

5.3. Операторы

  • Логические: &&, ||, !, ^;
  • Побитовые: &, |, ~, ^;
  • Арифметические: +, -, *, /, %;
  • Сдвиги: <<, >>;
  • Условный: ? :.

5.4. Управляющие конструкции

  • ifelse;
  • caseendcase;
  • циклы: for, while, repeat;
  • процедурные блоки:
    • always @(posedge clk) — синхронный процесс;
    • always @* — комбинационный процесс.

5.5. Макросы и компиляторные директивы

  • define — макроопределения;
  • include — включение файлов;
  • ifdef/ifndef — условная компиляция.

6. Сравнение VHDL и Verilog

ПараметрVHDLVerilog
СинтаксисСтрогий, много ключевых словЛаконичный, похож на C
ТипизацияСтрогая, безопаснаяМенее строгая, проще ошибки
Типы сигналовstd_logic (9 значений)wire, reg (2 значения + Z)
Параллелизмprocess, blockassign, always
АрифметикаЧерез пакеты (numeric_std)Встроенная для векторов
ЧитаемостьЯвный, самодокументируемыйКомпактный, но менее очевидный
РаспространениеЕвропа, оборонка, аэрокосмосСША, коммерция, стартапы
ОбучениеТребует понимания типов и иерархииПроще для программистов на C

7. Синтез: от HDL к аппаратуре

7.1. Что такое синтез

Преобразование HDL‑кода в сеть логических элементов (вентилей, триггеров, мультиплексоров) с учётом:

  • технологических библиотек (стандартные ячейки);
  • ограничений по времени (тайминги);
  • площади и мощности.

7.2. Синтезируемые конструкции

VHDL:

  • процессы с чувствительным списком (process(clk, reset));
  • операторы if, case;
  • арифметические

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *