Учебник FPGA и Verilog для начинающих
FPGA — это «железо, которое перепрошивается»: микросхема, внутри которой вы сами выкладываете цифровую схему из тысяч элементарных кирпичиков. В этом курсе вы научитесь описывать такую схему на языке Verilog — и поймёте главный сдвиг мышления: вы не пишете последовательную программу, а описываете параллельную электрическую схему, где всё работает одновременно. Мы пройдём весь путь: от того, как устроена FPGA внутри (LUT, триггеры, матрица соединений), через комбинационную и последовательностную логику, триггеры, счётчики, конечные автоматы (FSM), делители частоты и память, до тайминга, метастабильности, тестбенчей и реальных проектов вроде светофора, ШИМ и UART. Курс опирается на знания из «Логики и булевой алгебры», «Компьютерной архитектуры» и «Основ электроники». Verilog-код мы читаем как описание схемы, а сопутствующие расчёты (делители, таблицы истинности, симуляции автоматов) иллюстрируем исполнимым Python.
Курс «FPGA и Verilog: цифровая схемотехника» состоит из 8 разделов и 26 уроков: Что такое FPGA и зачем она нужна, Основы Verilog: модули, типы и комбинационная логика, Последовательностная логика: триггеры, такты и присваивания, Конечные автоматы и параметризация, Делители частоты, память и конвейеризация, Тайминг, критический путь и тактовые домены, Симуляция, тестбенчи и инструменты и Проекты, SystemVerilog, HLS и смена парадигмы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Что такое FPGA и зачем она нужна
- Программируемая логика: железо, которое перепрошивается
Что такое FPGA: программируемая логическая микросхема, параллелизм на уровне схемы, где применяется — DSP, ускорители, прототипы чипов, телеком, ИИ.
- FPGA против ASIC и процессора: компромиссы
Сравнение FPGA, ASIC и процессора: гибкость, стоимость, энергопотребление, скорость разработки. Когда выбирать каждое из трёх решений.
- Как устроена FPGA внутри: LUT, триггеры, матрица соединений
Внутреннее устройство FPGA: таблицы поиска LUT, триггеры, логические блоки CLB, программируемая матрица соединений, блоки DSP и память.
- HDL и поток проектирования: от Verilog до битстрима
Что такое HDL и Verilog как язык описания аппаратуры, и весь поток проектирования FPGA: синтез, размещение и трассировка, генерация битстрима, прошивка.
- Программируемая логика: железо, которое перепрошивается
2 Основы Verilog: модули, типы и комбинационная логика
- Модули и порты: первый блок схемы
Модуль Verilog как строительный блок схемы: объявление module, порты input и output, иерархия и подключение подмодулей по имени.
- wire и reg, шины и разрядность
Типы данных Verilog: wire против reg, зачем нужны оба, объявление шин [7:0], разрядность сигналов и почему reg — не обязательно регистр.
- Комбинационная логика: assign и оператор «всё сразу»
Комбинационная логика в Verilog: непрерывное присваивание assign, логические и битовые операторы, и почему результат вычисляется мгновенно и постоянно.
- Мультиплексоры, таблицы истинности и базовые вентили
Реализация базовых вентилей и мультиплексора в Verilog, чтение таблиц истинности и три способа описать одну и ту же комбинационную схему.
- Модули и порты: первый блок схемы
3 Последовательностная логика: триггеры, такты и присваивания
- always-блоки, тактовый сигнал и posedge
Последовательностная логика в Verilog: процедурный always-блок, тактовый сигнал clock, чувствительность к фронту posedge и рождение триггера.
- Блокирующее = и неблокирующее <= присваивание
Главная грабли новичков в Verilog: разница между блокирующим = и неблокирующим <= присваиванием, когда какое использовать и почему это критично.
- Регистры и счётчики
Регистры и счётчики в Verilog: многоразрядный регистр на триггерах, инкрементирующий счётчик, переполнение и применение счётчиков в схемах.
- Сброс: синхронный и асинхронный
Сброс (reset) в Verilog: разница между синхронным и асинхронным сбросом, как описать каждый, плюсы и минусы, и почему начальное состояние критично.
- always-блоки, тактовый сигнал и posedge
4 Конечные автоматы и параметризация
- Конечные автоматы (FSM): состояния и переходы
Конечный автомат как модель управляющей логики: состояния, переходы по входам и тактам, диаграмма состояний, типы Мили и Мура.
- Реализация FSM на Verilog
Канонический шаблон конечного автомата на Verilog: разделение на три блока — регистр состояния, логика переходов, логика выходов; кодирование состояний.
- Параметры и обобщённые модули: parameter и generate
Обобщение модулей в Verilog: параметры parameter для настройки разрядности, блоки generate и genvar для повторения аппаратуры по шаблону.
- Конечные автоматы (FSM): состояния и переходы
5 Делители частоты, память и конвейеризация
- Делитель частоты: классика на счётчике
Делитель частоты в Verilog: как из быстрого такта получить медленный сигнал на счётчике, расчёт делителя и формирование секундного импульса.
- Память в FPGA: block RAM
Встроенная память FPGA: block RAM против регистров, описание синхронной памяти на Verilog, инференс BRAM, однопортовая и двухпортовая память.
- Конвейеризация в железе
Конвейеризация (pipelining) в FPGA: разбиение длинной комбинационной цепочки регистрами для повышения тактовой частоты и пропускной способности.
- Делитель частоты: классика на счётчике
6 Тайминг, критический путь и тактовые домены
- Setup и hold: почему у схемы есть предел частоты
Временные ограничения триггера: setup и hold, что такое критический путь, как длина логики между триггерами определяет максимальную тактовую частоту.
- Метастабильность и переход между тактовыми доменами
Метастабильность триггера и переход между тактовыми доменами (CDC): почему асинхронные сигналы опасны и как синхронизатор из двух триггеров спасает схему.
- Setup и hold: почему у схемы есть предел частоты
7 Симуляция, тестбенчи и инструменты
- Тестбенчи и симуляция: проверка до железа
Тестбенч в Verilog: модуль без портов, генерация тактов и стимулов, задачи $display и $monitor, временная задержка #, проверка схемы в симуляторе.
- Инструменты и отладочные платы
Экосистема инструментов FPGA: Vivado и Quartus от вендоров, open-source поток Yosys/nextpnr, симуляторы iverilog/Verilator, отладочные платы для старта.
- Тестбенчи и симуляция: проверка до железа
8 Проекты, SystemVerilog, HLS и смена парадигмы
- Практические проекты: ШИМ, бегущий огонёк, UART
Обзор учебных проектов FPGA: бегущий огонёк, ШИМ для яркости и моторов, светофор на FSM, UART-передатчик — что в них устроено и чему учат.
- SystemVerilog и HLS: что дальше
Обзор SystemVerilog (что добавляет к Verilog) и HLS — синтеза аппаратуры из C/C++: возможности, плюсы и ограничения высокоуровневого проектирования.
- Смена парадигмы: параллельное железо против последовательной программы
Ключевой сдвиг мышления при работе с FPGA: Verilog описывает параллельную схему, а не последовательный код. Чем мышление аппаратчика отличается от программиста.
- Применения и карьера в FPGA, ASIC и верификации
Где работают FPGA-инженеры и куда расти: цифровой дизайн на RTL, ASIC, верификация чипов. Отрасли применения, нужные навыки и траектории развития.
- Практические проекты: ШИМ, бегущий огонёк, UART