Основы Verilog и VHDL: проектирование логических схем и архитектура ПЛИС

Курс для начинающих по разработке цифровых схем на языках Verilog и VHDL. Вы изучите фундаментальные принципы работы FPGA и ASIC, поймете отличие декларативного описания аппаратуры от классического программирования, а также научитесь создавать базовые логические вентили и триггеры, опираясь на современные методы цифрового синтеза, упоминаемые на [habr.com](https://habr.com/ru/articles/893594/) и [mnmc.hse.ru](https://mnmc.hse.ru/course/Verilog_HDL).

1. Архитектура ПЛИС и ASIC

Архитектура ПЛИС и ASIC

Когда программист пишет код на Python или C++, он создает набор инструкций. Процессор читает эти инструкции одну за другой и выполняет их. Это последовательный процесс. Но когда мы говорим о разработке аппаратуры с использованием языков Verilog или VHDL, парадигма полностью меняется. Мы не пишем инструкции для процессора. Мы описываем физическую электрическую схему.

Чтобы понять, как строки кода превращаются в реальные логические вентили и триггеры, необходимо разобраться в том, на чем именно эти схемы реализуются. В мире цифровой микроэлектроники существуют два главных подхода к созданию чипов: ASIC и ПЛИС.

ASIC: Монолитный фундамент микроэлектроники

ASIC (Application-Specific Integrated Circuit, или интегральная схема специального назначения) — это микросхема, созданная для выполнения одной конкретной задачи.

Представьте, что вы строите дом из монолитного железобетона. Вы заранее чертите план, возводите опалубку, заливаете бетон. Когда бетон застынет, дом станет невероятно прочным, надежным и будет идеально выполнять свою функцию. Но если вы вдруг решите перенести кухню в другую часть дома или добавить еще одно окно — вам придется сносить стену. Изменить конструкцию после завершения строительства практически невозможно.

Именно так работает ASIC. Инженеры проектируют схему, состоящую из миллионов или миллиардов транзисторов, которые на заводе физически вытравливаются на кремниевой пластине.

Преимущества ASIC:

  • Максимальная производительность: Поскольку схема оптимизирована под одну задачу, она работает на предельно возможных частотах.
  • Энергоэффективность: Нет лишних элементов, ток течет только там, где нужно.
  • Низкая стоимость при массовом производстве: Если вам нужно выпустить миллион одинаковых чипов (например, процессоров для смартфонов), стоимость одного кристалла будет копеечной.
  • Главный недостаток ASIC — колоссальная стоимость и сложность разработки. Ошибка в коде, обнаруженная после выпуска чипа, означает, что всю партию придется выбросить, а процесс проектирования и производства (который может занимать месяцы и стоить миллионы долларов) начинать заново.

    ПЛИС (FPGA): Аппаратный конструктор

    Чтобы решить проблему высокой стоимости ошибок и долгого цикла разработки, была создана ПЛИС — программируемая логическая интегральная схема. В английской терминологии чаще используется аббревиатура FPGA (Field-Programmable Gate Array).

    Если ASIC — это монолитный бетонный дом, то ПЛИС — это огромный набор деталей конструктора Lego. У вас есть универсальная платформа с тысячами базовых блоков и миллионами связей между ними. Загружая специальный файл конфигурации, вы указываете, как именно эти блоки должны соединиться друг с другом.

    Сегодня вы можете «собрать» из этого конструктора контроллер дисплея, завтра — стереть конфигурацию и превратить этот же чип в процессор для обработки звука, а послезавтра — в модуль управления двигателем дрона.

    > ПЛИС — это аппаратная заготовка. После загрузки конфигурационный файл определяет, как будут соединены тысячи логических ячеек внутри кристалла. Мы мысленно можем представить это как создание схемы из стандартных программируемых блоков и проводников. > > Как проектируют на ПЛИС: что нужно знать новичку

    Сравнение технологий

    | Характеристика | ASIC | ПЛИС (FPGA) | | :--- | :--- | :--- | | Гибкость | Нулевая (нельзя изменить после выпуска) | Максимальная (перепрограммируется за секунды) | | Скорость работы | Очень высокая | Средняя / Высокая | | Энергопотребление | Низкое | Относительно высокое | | Стоимость разработки | Миллионы долларов | Стоимость самой платы (от десятков долларов) | | Время выхода на рынок | Месяцы и годы | Дни и недели |

    Для новичка, изучающего Verilog или VHDL, ПЛИС — это идеальная песочница. Вы можете написать код, загрузить его в плату и сразу увидеть, как мигают светодиоды или работают моторы, не тратя миллионы на заводское производство.

    Анатомия ПЛИС: Как это работает на физическом уровне

    Чтобы понять, как код транслируется в «железо», нужно заглянуть внутрь кристалла ПЛИС. Архитектура большинства современных FPGA состоит из трех главных элементов.

    !Схема архитектуры ПЛИС

  • Логические блоки (CLB - Configurable Logic Blocks): Это те самые кубики Lego. Они выполняют всю математическую и логическую работу. Внутри них создаются базовые логические вентили (И, ИЛИ, НЕ) и триггеры для хранения данных.
  • Программируемые связи (Interconnects): Это сетка «проводов» и переключателей, которая пронизывает весь чип. Она позволяет соединить выход одного логического блока со входом любого другого.
  • Блоки ввода-вывода (I/O Blocks): Располагаются по периметру чипа. Они связывают внутреннюю логику с физическими ножками (пинами) микросхемы, к которым подключаются кнопки, датчики и экраны.
  • Когда вы пишете код на Verilog, компилятор не создает новые транзисторы. Он вычисляет, какие логические блоки нужно задействовать и как настроить переключатели в сетке связей, чтобы электрический сигнал прошел нужный путь.

    Секрет логического блока: LUT (Look-Up Table)

    Самый важный вопрос: как универсальный логический блок может превращаться то в вентиль «И» (AND), то в вентиль «ИЛИ» (OR)? Секрет кроется в компоненте под названием LUT (Look-Up Table, или таблица истинности).

    LUT — это, по сути, крошечная ячейка памяти (SRAM). Вместо того чтобы физически собирать логический вентиль из транзисторов, ПЛИС использует память для хранения готовых ответов.

    Допустим, у нас есть LUT с двумя входами. Количество возможных комбинаций нулей и единиц на входе вычисляется по формуле , где — количество входов. Для двух входов это комбинации (00, 01, 10, 11).

    Если вы напишете на Verilog код логического «И» (Y = A & B), программа-синтезатор запишет в память этого LUT следующие значения:

  • По адресу 00 лежит 0
  • По адресу 01 лежит 0
  • По адресу 10 лежит 0
  • По адресу 11 лежит 1
  • Когда на физические входы A и B поступают электрические сигналы, LUT просто смотрит на них как на адрес в памяти и выдает наружу то значение, которое там сохранено.

    !Интерактивный симулятор LUT

    Если вы измените свой код на логическое «ИЛИ» (Y = A | B), физическая структура чипа не изменится. Изменятся лишь нули и единицы, записанные в ячейки памяти этого LUT. Именно так достигается аппаратная гибкость ПЛИС.

    Кроме LUT, в каждом логическом блоке обязательно есть триггер (Flip-Flop). Если LUT выполняет комбинационную логику (принимает решение здесь и сейчас), то триггер нужен для запоминания результата до следующего такта генератора частоты. Без триггеров было бы невозможно создать счетчики, таймеры или процессоры.

    От кода к кремнию: Этапы трансляции

    Теперь, когда мы понимаем архитектуру, давайте проследим путь вашего будущего кода на Verilog или VHDL до реального железа. Этот процесс называется маршрутом проектирования (Design Flow) и состоит из нескольких шагов:

  • Написание кода (RTL Design): Вы описываете поведение схемы текстом. Например, говорите: «Если нажата кнопка, увеличь счетчик на единицу».
  • Синтез (Synthesis): Специальная программа (синтезатор) читает ваш код и переводит его в абстрактную схему из базовых логических элементов. На этом этапе код превращается в математическую модель вентилей и триггеров.
  • Имплементация и Трассировка (Place and Route): Это самый сложный физический этап. Программа берет абстрактную схему и пытается разместить ее на реальной сетке конкретной ПЛИС. Она решает, какой именно физический LUT будет выполнять вашу логику, и прокладывает маршруты (трассировку) по программируемым связям между ними.
  • Генерация битстрима (Bitstream Generation): Результат трассировки превращается в длинную последовательность нулей и единиц — конфигурационный файл.
  • Прошивка: Битстрим загружается в ПЛИС. Миллионы крошечных переключателей внутри чипа замыкаются или размыкаются согласно файлу. Ваша схема начинает существовать физически.
  • Понимание того, что ваш код в итоге превращается в физические провода и таблицы памяти, — это главный шаг к успешному освоению Verilog и VHDL. В отличие от программирования ПО, здесь вы должны думать о том, сколько времени потребуется электрическому сигналу, чтобы добежать от одного логического блока до другого.