УДК 004.41
ББК 32.372
Б89
Главный научный редактор:
Романов А. Ю. – к.т.н., доцент Московского института электроники
и математики им. А. Н. Тихонова Национального исследовательского
университета «Высшая школа экономики».
Фрэнк Бруно
Б89 Программирование FPGA для начинающих / пер. с англ. С. Л. Плехановой;
под науч. ред. А. Ю. Романова, Ю. В. Ревича. – М.: ДМК Пресс, 2022. –
304 с.: ил.
ISBN 978-5-97060-986-6
Данная книга открывает серию переводов зарубежных изданий по проектированию
цифровых систем, которую готовят к выходу в свет компания
«ДМК Пресс» и МИЭМ НИУ ВШЭ при поддержке группы компаний YADRO
(yadro.com). Она предназначена для тех, кто хочет узнать о том, как устроена
технология FPGA, и получить практический опыт работы с реальными проектами.
Читатель получит общее представление о программируемых логических
интегральных схемах, научится программировать на языке SystemVerilog, разработает,
выполнит тестирование и реализует ряд проектов разной степени
сложности от простого калькулятора до комплексного проекта, использующего
AXI и внешнюю периферию, подключенную через PS/2 и VGA.
Демонстрационные примеры реализованы на доступных платах Nexys A7
или Basys 3 (с чипами Xilinx) и сопровождаются исходными кодами.
Издание будет полезно студентам, инженерам, а также широкому кругу
читателей, интересующихся современной схемотехникой.
УДК 004.41
ББК 32.372
Copyright © Packt Publishing 2021. First published in the English language under the title
"FPGA Programming for Beginners" – (9781789805413).
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
ISBN (анг.) 978-1-78980-541-3
ISBN (рус.) 978-5-97060-986-6
Copyright © 2021 Packt Publishing
© Оформление, издание, перевод, ДМК Пресс, 2022
© Научное редактирование, НИУ ВШЭ, 2022
Стр.5
Оглавление
Об авторах ......................................................................................... 11
Предисловие от главного редактора русского перевода .......... 13
Предисловие ...................................................................................... 16
РАЗДЕЛ 1. ВВЕДЕНИЕ В FPGA ............................................... 21
Глава 1. Введение в FPGA и Xilinx Vivado ..................................... 23
Технические требования ..................................................................................23
Аппаратура....................................................................................................24
Программное обеспечение ..........................................................................24
Что такое ASIC? .................................................................................................24
Почему ASIC или FPGA? ...............................................................................25
Как компания создает программируемое устройство, используя ASIC ...27
Базовые логические элементы ....................................................................27
Более сложные операции .............................................................................30
Знакомство с FPGA .......................................................................................31
Изучение Xilinx Artix-7 и устройств 7-й серии ...........................................33
Знакомство с набором инструментов Vivado и отладочными платами ...37
Знакомство с Vivado .....................................................................................40
Выполнение примера ...................................................................................46
Программирование платы ...........................................................................55
Выводы ..............................................................................................................56
Вопросы .............................................................................................................56
Задание повышенной сложности ....................................................................57
Дополнительное чтение ...................................................................................57
РАЗДЕЛ 2. ВВЕДЕНИЕ В ПРОЕКТИРОВАНИЕ,
МОДЕЛИРОВАНИЕ И СИНТЕЗ НА VERILOG RTL .......... 59
Глава 2. Комбинационная логика ................................................... 61
Технические требования ..................................................................................61
Создание модулей SystemVerilog .....................................................................61
Создание многократно используемого кода
с помощью параметров ................................................................................62
Знакомство с типами данных ......................................................................63
Представление встроенных типов данных .................................................63
Создание массивов .......................................................................................64
Обращение к элементам массива................................................................65
Присвоение значений элементам массива ................................................66
Работа с цепями с тремя состояниями .......................................................66
Стр.6
6 Оглавление
Работа со знаковыми и беззнаковыми числами ........................................67
Добавление битов к сигналу с помощью операции конкатенации ..........68
Преобразование знаковых и беззнаковых чисел .......................................68
Создание типов, определяемых пользователем ........................................69
Доступ к сигналам при использовании значений перечисляемых типов ... 69
Упаковка кода с помощью функций ...........................................................70
Создание комбинационной логики ................................................................70
Операторы присваивания ............................................................................71
Принятие решений: if-then-else ..................................................................73
Сравнение значений ....................................................................................73
Операторы if с уникальностью или приоритетностью ..............................74
Оператор выбора case ......................................................................................75
Использование пользовательских типов данных ..........................................76
Создание структур ........................................................................................76
Создание объединений ................................................................................77
Проект 1. Создание комбинационной схемы .................................................77
Testbench .......................................................................................................78
Моделирование с помощью целевого тестирования .................................80
Моделирование с использованием рандомизированного тестирования ... 80
Моделирование с использованием ограниченной рандомизации ..........80
Реализация детектора ведущей единицы с использованием
оператора case ..............................................................................................80
Управление реализацией с помощью generate ..........................................81
Проектирование многоразового детектора ведущей единицы
с помощью цикла for ....................................................................................83
Реализация сумматора/вычитателя (adder/subtractor) ..................................85
Сложение .......................................................................................................85
Вычитание .....................................................................................................86
Умножение ....................................................................................................86
Объединяем все вместе ....................................................................................87
Добавление защелки ....................................................................................89
Выводы ..............................................................................................................89
Вопросы .............................................................................................................89
Задание повышенной сложности ....................................................................90
Дополнительное чтение ...................................................................................90
Глава 3. Подсчет нажатий на кнопку ............................................. 91
Технические требования ..................................................................................91
Что такое последовательностный элемент? ...................................................91
Синхронизация проекта ..............................................................................91
Базовый регистр ...........................................................................................93
Создание триггеров ......................................................................................93
Когда использовать always@() для генерации триггера ............................95
Использование неблокирующих присваиваний ........................................96
Регистры в Artix 7 .........................................................................................97
Как удерживать состояние схемы с помощью входа разрешения
тактового сигнала .........................................................................................98
Сброс триггера ..............................................................................................99
Стр.7
Оглавление 7
Проект 2. Подсчет нажатий на кнопку ..........................................................100
Семисегментный индикатор .....................................................................100
Обнаружение нажатия на кнопку..............................................................103
Проблемы, возникающие из-за асинхронных сигналов .........................104
Использование асинхронного сигнала напрямую ...................................105
Проблема с нажатием кнопок ...................................................................106
Разработка безопасной реализации .........................................................107
Переход на десятичное представление.....................................................109
Знакомство с ILA .........................................................................................110
Что насчет симуляции? ..............................................................................114
Подробное изучение синхронизации ...........................................................115
Зачем использовать несколько тактовых сигналов? ...............................115
Двухступенчатый синхронизатор .............................................................115
Синхронизация управляющих сигналов ..................................................116
Передача данных ........................................................................................117
Выводы ............................................................................................................118
Вопросы ...........................................................................................................118
Задание повышенной сложности ..............................................................119
Дополнительное чтение .................................................................................119
Глава 4. Разработка калькулятора................................................120
Технические требования ................................................................................121
Реализация первого конечного автомата .....................................................121
Разработка последовательного конечного автомата ...............................121
Разделение комбинационной и последовательностной логики
в конечном автомате ..................................................................................122
Разработка интерфейса калькулятора .....................................................123
Проектирование конечного автомата Мура ............................................124
Реализация конечного автомата Мили ....................................................126
Практическое проектирование конечных автоматов .............................126
Проект 3. Создание простого калькулятора ..................................................127
Инкапсуляция для повторного использования ........................................127
Проектирование модуля верхнего уровня иерархии ...............................129
Изменение тактовой частоты с помощью PLL или MMCM .....................130
Разработка блока деления ..............................................................................134
Построение конечного автомата невосстанавливающего
делителя .....................................................................................................134
Моделирование делителя ..........................................................................138
Определение размера промежуточного остатка ......................................138
Проект 4. Управление перекрестком с помощью светофоров ....................139
Определение графа состояний ..................................................................140
Отображение состояний светофоров ........................................................140
Выводы ............................................................................................................142
Вопросы ...........................................................................................................142
Задание повышенной сложности ..................................................................143
Задание еще более высокой сложности ........................................................143
Дополнительное чтение .................................................................................143
Стр.8
8 Оглавление
Глава 5. Ресурсы FPGA, и как их использовать...........................144
Технические требования ................................................................................144
Проект 5. Слушать и учиться ..........................................................................145
Что такое цифровой PDM-микрофон? ......................................................145
Моделирование работы микрофона .........................................................148
Встроенная память .....................................................................................150
Захват аудиоданных ...................................................................................154
Проект 6. Использование датчика температуры ..........................................157
Обработка данных ......................................................................................158
Сглаживание данных .................................................................................159
Более глубокое погружение в FIFO ............................................................160
Ограничения ...............................................................................................163
Генерация FIFO ...........................................................................................163
Выводы ............................................................................................................165
Вопросы ...........................................................................................................165
Дополнительное чтение .................................................................................166
Глава 6. Математика, параллелизм и конвейеризация ............ 167
Технические требования ................................................................................168
Числа с фиксированной точкой .....................................................................168
Проект 7. Использование чисел с фиксированной точкой
для обработки данных с датчика температуры ............................................169
Использование арифметики чисел с фиксированной точкой
для очистки времени запуска ....................................................................170
Преобразование температуры с помощью арифметики
с фиксированной точкой............................................................................172
А как насчет чисел с плавающей точкой? .....................................................174
Сложение и вычитание с плавающей точкой ...........................................176
Умножение с плавающей точкой ...............................................................176
Обратное значение для числа с плавающей точкой ................................176
Более практичная библиотека операций с плавающей точкой ..............176
Краткий обзор потокового интерфейса AXI .................................................177
Проект 8. Обновление проекта датчика температуры
до конвейерной реализации с плавающей точкой ......................................179
Преобразование чисел из представления с фиксированной
точкой в формат с плавающей точкой ......................................................179
Математические операции с плавающей точкой ....................................181
Преобразование формата с плавающей точкой в формат
с фиксированной точкой............................................................................182
Моделирование ...........................................................................................183
Параллельные конструкции...........................................................................185
ML, AI и массовый параллелизм ................................................................185
Параллельное проектирование – небольшой пример .............................186
Выводы ............................................................................................................187
Вопросы ...........................................................................................................187
Задание повышенной сложности ..................................................................188
Дополнительное чтение .................................................................................188
Стр.9
Оглавление 9
РАЗДЕЛ 3. ВЗАИМОДЕЙСТВИЕ
С ВНЕШНИМИ КОМПОНЕНТАМИ ......................................189
Глава 7. Введение в AXI ..................................................................191
Технические требования ................................................................................191
Потоковая передача AXI .................................................................................192
Проект 9. Создание IP-блоков для Vivado с использованием
потоковых интерфейсов AXI..........................................................................192
Потоковый интерфейс для семисегментного индикатора ......................193
Разработка IP ADT7420 ...............................................................................198
Ядро t_temp .................................................................................................198
IP-интегратор .............................................................................................198
Отладка проекта с помощью IP-интегратора ...........................................206
Интерфейсы AXI4 (AXI full и AXI-Lite) ..........................................................207
Разработка IP-блоков – AXI-Lite, AXI full и AXI Stream ............................209
Добавление неупакованного IP-блока в IP-интегратор ..........................212
Выводы ............................................................................................................214
Вопросы ...........................................................................................................214
Дополнительное чтение .................................................................................215
Глава 8. Много данных? MIG и DDR2 ...........................................216
Технические требования ................................................................................216
Проект 10. Подключение внешней памяти ...................................................217
Память DDR2 ...............................................................................................218
Генерация контроллера DDR2 с помощью Xilinx MIG .............................219
Установка параметров интерфейса AXI ....................................................223
Настройка параметров памяти .................................................................223
Настройка параметров FPGA .....................................................................224
Модификация проекта для использования на плате ...............................232
Другие типы внешней памяти .......................................................................236
Память SRAM с четырехкратной скоростью передачи данных
(Quad Data Rate, QDR) .................................................................................236
HyperRAM ....................................................................................................236
SPI RAM .......................................................................................................236
Выводы ............................................................................................................237
Вопросы ...........................................................................................................237
Задача повышенной сложности ....................................................................238
Дополнительное чтение .................................................................................238
Глава 9. Лучший способ отображения – VGA ..............................239
Технические требования ................................................................................239
Проект 11. Основы работы с VGA...................................................................240
Определение регистров .............................................................................243
Разработка простого интерфейса AXI-Lite ...............................................244
Генерация сигналов синхронизации для VGA ..........................................245
Отображение текста ...................................................................................251
Запрос памяти ............................................................................................253
Стр.10
10 Оглавление
Тестирование контроллера VGA ................................................................257
Проверка ограничений ..............................................................................257
Выводы ............................................................................................................259
Вопросы ...........................................................................................................259
Задание повышенной сложности ..................................................................260
Дополнительное чтение .................................................................................260
Глава 10. Свести все воедино ........................................................261
Технические требования ................................................................................261
Изучение интерфейса клавиатуры ................................................................262
Проект 12. Работа с клавиатурой ...................................................................267
Моделирование работы интерфейса PS/2 .................................................270
Проект 13. Сводим все воедино .....................................................................272
Отображение кодов клавиш PS/2 на экране VGA .....................................272
Отображение показаний датчика температуры ......................................275
Отображение аудиоданных .......................................................................277
Выводы ............................................................................................................280
Вопросы ...........................................................................................................281
Задание повышенной сложности ..................................................................281
Дополнительное чтение .................................................................................281
Глава 11. Темы повышенной сложности .....................................282
Технические требования ................................................................................282
Изучение более продвинутых конструкций SystemVerilog .........................282
Взаимодействие компонентов с использованием конструкции
под названием «интерфейс» ......................................................................282
Использование структур ............................................................................285
Метки блоков ..............................................................................................286
Цикл for .......................................................................................................287
Цикл do...while ............................................................................................287
Выход из цикла с помощью оператора disable .........................................288
Пропуск фрагментов кода с помощью оператора continue ....................288
Использование констант ............................................................................289
Некоторые продвинутые конструкции языка SystemVerilog
для верификации ............................................................................................289
Знакомство с очередями SystemVerilog ....................................................289
Продвинутое использование системной функции $display ....................291
Утверждения ...............................................................................................292
Использование $error или $fatal при синтезе проекта ............................292
Другие проблемы, и как их избежать ............................................................293
Выведение однобитных проводов ............................................................293
Несоответствие ширины шин ....................................................................294
Повышение или понижение приоритетности сообщений Vivado ..........294
Обработка timing closure ............................................................................295
Конвейеризация .........................................................................................297
Выводы ............................................................................................................301
Вопросы ...........................................................................................................302
Дополнительное чтение .................................................................................303
Стр.11