Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование FPGA для начинающих

Покупка
Артикул: 817286.01.99
Данная книга открывает серию переводов зарубежных изданий по проектированию цифровых систем, которую готовят к выходу в свет компания «ДМК Пресс» и МИЭМ НИУ ВШЭ при поддержке группы компаний YADRO (yadro.com). Она предназначена для тех, кто хочет узнать о том, как устроена технология FPGA, и получить практический опыт работы с реальными проектами. Читатель получит общее представление о программируемых логических интегральных схемах, научится программировать на языке SystemVerilog, разработает, выполнит тестирование и реализует ряд проектов разной степени сложности от простого калькулятора до комплексного проекта, использующего AXI и внешнюю периферию, подключенную через PS/2 и VGA. Демонстрационные примеры реализованы на доступных платах Nexys A7 или Basys 3 (с чипами Xilinx) и сопровождаются исходными кодами. Издание будет полезно студентам, инженерам, а также широкому кругу читателей, интересующихся современной схемотехникой.
Бруно, Ф. Программирование FPGA для начинающих : практическое руководство / Ф. Бруно ; пер. с англ. С. Л. Плехановой ; под науч. ред. А. Ю. Романова, Ю. В. Ревича. - Москва : ДМК Пресс, 2022. - 304 с. - ISBN 978-5-97060-986-6. - Текст : электронный. - URL: https://znanium.com/catalog/product/2109588 (дата обращения: 28.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Фрэнк Бруно

Программирование FPGA 
для начинающих
FPGA Programming 
for Beginners

Bring your ideas to life by creating  
hardware designs and electronic circuits 
with SystemVerilog

Frank Bruno

BIRMINGHAM—MUMBAI
Программирование 
FPGA для начинающих

Воплощайте свои идеи в жизнь, и создавайте 
цифровые устройства и электронные схемы 
с помощью SystemVerilog

Фрэнк Бруно

Москва, 2022
УДК 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).

Все права защищены. Любая часть этой книги не может быть воспроизведена 
в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения 
владельцев авторских прав.

Copyright © 2021 Packt Publishing
© Оформление, издание, перевод, ДМК Пресс, 2022
© Научное редактирование, НИУ ВШЭ, 2022
ISBN (анг.) 978-1-78980-541-3
ISBN (рус.) 978-5-97060-986-6
Оглавление

Об авторах ......................................................................................... 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
Работа со знаковыми и беззнаковыми числами ........................................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

6  
Оглавление
Проект 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

Оглавление  7
Глава 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

8  
Оглавление
РАЗДЕЛ 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

Оглавление  9
Тестирование контроллера 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

10  
Оглавление
Об авторах

Автор

Фрэнк Бруно – опытный инженер-разработчик высокопроизводительных 
систем, специализирующийся на FPGA и имеющий некоторый опыт работы 
с ASIC. Работал в таких компаниях, как Cruise, SpaceX, Allston Trading и Number 
Nine. В настоящее время работает инженером по разработке на FPGA в компании 
Cruise.

рецензент

Джордж Калдис получил степень бакалавра электротехники в Северо-Восточном 
университете и имеет более чем 30-летний опыт работы с FPGA. Является 
президентом GK-Digital LLC, консалтинговой компании по проектированию 
FPGA. Реализовал множество проектов FPGA для различных приложений – от 
беспроводных и проводных сетей до высокочастотного трейдинга и тестового 
оборудования.

редАкторы русского переводА

Романов Александр Юрьевич – главный научный редактор русского перевода 
данной книги, доцент Московского института электроники и математики 
им. А. Н. Тихонова Национального исследовательского университета «Высшая 
школа экономики» (МИЭМ НИУ ВШЭ). С 2014 г. работает в МИЭМ НИУ ВШЭ, 
где возглавляет лабораторию САПР (https://miem.hse.ru/edu/ce/cadsystem), специализирующуюся 
на проектной деятельности, а также разработке цифровых 
систем на ПЛИС/микроконтроллерах, робототехнических комплексов, аппаратных 
реализаций систем искусственного интеллекта, многопроцессорных 
систем, систем удаленного доступа к лабораторному оборудованию и т. д. 
В 2015 г. защитил диссертацию в Институте проблем проектирования в микроэлектронике 
РАН (г. Зеленоград), является автором более 150 научных статей, 
патентов и книг. Более подробно об учебном процессе в лаборатории можно 
узнать из интервью: https://miem.hse.ru/news/364316102.html.

Юрий Всеволодович Ревич – научный редактор русского перевода – инженер-
электронщик с многолетним стажем. Занимался автоматизацией производств, 
конструированием измерительных приборов для изучения океана 
и другими научными исследованиями. Работал редактором в периодических 
изданиях по IT-направлению. Автор многих статей и ряда популярных книг 
по электронике, среди которых «Занимательная электроника», «Практическое 
программирование микроконтроллеров Atmel AVR», сборник «Информационные 
технологии в СССР» и др.
Смехов Дмитрий Геннадьевич – консультант русского перевода – инженер-
разработчик на ПЛИС с многолетним стажем. Занимается разработкой и верификацией 
проектов  на основе ПЛИС Xilinx и Altera (Intel FPGA). Является 
сертифицированным инструктором компании Xilinx, проводит тренинги 
по темам PCI Express, Vitis AI, Versal ACAP. Работал в таких компаниях, как 
АО «ИнСис», КТЦ «Инлайн Групп», IRQ.

12  
Об авторах
Предисловие от главного редактора 
русского перевода

Дорогие друзья!
Книга, которую вы держите в руках, открывает серию переводов зарубежных 
изданий по проектированию цифровых систем, которую готовят к выходу 
в свет компания «ДМК Пресс» и МИЭМ НИУ ВШЭ при поддержке группы компаний 
YADRO (yadro.com).
Актуальность подобных книг несомненна. Очевидно, что после 24 февраля 
2022 г. развитие отечественной электроники сталкивается с новыми вызовами: 
жесткие торговые ограничения, запрет на пользование интеллектуальными 
продуктами (в том числе САПРами; например, такими как Quartus), а также 
и множество иных санкционных действий оказывают серьезное давление на 
высокотехнологичные отрасли в России. Единственный путь, который позволит 
не оказаться в стороне от прогресса, – это предпринимать консолидированные 
усилия ведущими компаниями и организациями по развитию отечественной 
электроники и в первую очередь по подготовке высококвалифицированных 
кадров. Серьезный барьер на этом направлении – существенная нехватка качественных 
учебных материалов на русском языке.  
Впрочем, благодаря усилиям многих людей в последние годы уже наметилась 
тенденция к ее преодолению. Прошли те времена, когда для многих практически 
единственными доступным источником русскоязычных материалов был 
известный сайт Наливатора – Егорова Антона (http://www.naliwator.narod.ru/), – 
где преимущественно собраны машинные переводы руководств по проектированию 
на FPGA Altera. Появилась и много раз переиздана знаменитая книга 
Харрисов «Цифровая схемотехника и архитектура компьютера», вышел к ней 
сборник практических работ по Verilog «Цифровой синтез: практический курс» 
(под. ред. А. Ю. Романова и Ю. В. Панчула), издана в русском переводе книга 
Д. Томаса «Логическое проектирование и верификация систем на System-
Verilog», вышло множество других изданий. (О наличии материалов по FPGA 
на русском языке можно узнать на «Книжном FPGA-стриме #42» с М. Коробко-
вым и С. Иванцом https://www.youtube.com/watch?v=XaYGfNlhX0c.) Тем не менее 
недостаток в русскоязычных материалах по различным аспектам проектирования 
цифровых систем все еще ощущается. 
Компания «ДМК Пресс» в сотрудничестве с МИЭМ НИУ ВШЭ выбрала стратегию, 
обеспечивающую (кроме подготовки собственных изданий по цифровому 
синтезу) создание серии переводов наиболее популярных зарубежных 
книг по данной проблематике. Настоящее издание – Ф. Бруно «Программирование 
FPGA для начинающих» – является первым в этой серии. (В обозримом 
будущем планируется также выход в свет перевода книги С. Сазерленда 
«RTL-моделирование на SystemVerilog для моделирования и синтеза: применение 
SystemVerilog для проектирования ASIC и FPGA».)
Следует отметить, что процесс создания переводных изданий по проектированию 
цифровых систем является достаточно непростой задачей: несмотря 
на свою популярность, оригинальные англоязычные книги имеют множество 
недостатков – частые повторения, опечатки, неточности, значительные стилистические 
погрешности. Бытующее американское изложение от первого лица 
при переложении на русский язык выглядит неестественным и является чуждым 
русской научной речи. Оказалось, что зарубежные авторы технической 
литературы в погоне за прибылью часто пишут «на поток», не сильно утруждаясь 
стилистикой. Поэтому при редактировании переводных материалов научно-
технического содержания редактору приходится решать многочисленные 
задачи, связанные с обеспечением выполнения основой функции научного 
стиля речи – точной передачи логической информации в переведенном тексте, 
исключающей выражение субъективных, личных эмоций автора и его отступления 
от стилистических норм. Таким образом, отредактированный русский 
перевод в его окончательном виде – это скорее переизложение начального 
материала, обеспечивающее его читабельность для русскоязычной аудитории; 
фактически это книга, написанная заново. 
О чем эта книга? 
При выборе изданий для перевода в первую очередь преследовалась цель 
восполнить очевидные пробелы в массиве существующей русскоязычной литературы, 
при этом важным критерием отбора являлась популярность книги. 
Привлечение ряда экспертов (в том числе Ю. Панчула) позволило составить 
список наиболее интересных книг. Выбор книги «Программирование FPGA 
для начинающих» обусловлен тем, что она рассказывает о проектировании на 
FPGA компании Xilinx, демонстрационные примеры в ней реализованы на дешевых 
и доступных платах Nexys A7 и сопровождаются исходными кодами. 
В целом абсолютному новичку эта книга поначалу может показаться несколько 
сложной, но если проявить немного усидчивости и вникнуть в исходные 
коды первых примеров, то ее восприятие заметно облегчится. В принципе, 
большая часть курсов по SystemVerilog, в отличие от других классических 
языков программирования, так и построена – обучаемого сразу погружают 
в несколько больших примеров, где он ведет разработку, часто копируя или 
модифицируя уже готовый код, постепенно изучая особенности языка (разработка 
программ, описывающих аппаратуру, гораздо сложнее, и постепенно 
изучать операторы языка нет никакого смысла). 
Данная книга хороша для тех, кто раньше работал, например, в Quartus 
c продукцией фирмы Intel FPGA (т. е. имеет некоторый базис) и хочет расширить 
свой кругозор, познакомившись с Vivado и FPGA от Xilinx. 
Если же у читателя имеется опыт работы в Vivado, эта книга все равно может 
быть полезной, потому что содержит ряд примеров работы с различной периферией (
VGA, датчик температуры, микрофон, PS/2-клавиатура), а также обеспечивает 
знакомство с организацией проектов на основе интерконнекта AXI. 
Книга, несомненно, понадобится студентам вузов (МИЭТ, ИТМО и др.), изучающим 
SystemVerilog, а также более продвинутым разработчикам, которые 
хотели бы получить практический опыт работы с реальными проектами.

14  
Предисловие от главного редактора русского перевода
Научный редактор будет очень признателен тем внимательным читателям, 
которые обнаружат в данном издании какие-либо ошибки или опечатки и сообщат 
о них на e-mail a.romanov@hse.ru. (Книги постоянно перепечатываются, 
и в каждом новом тираже все найденные ошибки и недочеты исправляются.) 

Александр Юрьевич Романов,
главный научный редактор русского перевода,
к. т. н., доцент ДКИ МИЭМ НИУ ВШЭ,
преподаватель курсов «Проектирование систем на кристалле»
и «Системное проектирование цифровых устройств»,
г. Москва, Россия

Предисловие от главного редактора русского перевода  15
Предисловие

Готовьтесь повеселиться. Автор этой книги разрабатывает ASIC и FPGA1 уже 
30 лет и каждый день сталкивается с новыми вызовами и волнениями, поскольку 
продвигает технологии к разработке новых приложений. За свою карьеру автор 
разработал ASIC, которые обеспечивали работу военных самолетов; графику, 
работающую на высокопроизводительных рабочих станциях и обычных ПК; 
технологию для питания следующего поколения программно-определяемых 
радиосистем; а также участвовал в проекте по обеспечению сети интернет через 
космос на всем земном шаре. Часть этого опыта представлена в данной книге.

для кого этА книгА 

Эта книга предназначена для тех, кто хочет узнать о технологии FPGA и о том, 
как ее можно использовать в своих проектах. Предполагается, что читатель ничего 
не знает о цифровой логике, поэтому книга начинается с представления 
базовых логических элементов и их функций, а заканчивается разработкой 
полноценной системы на кристалле. Некоторые знания в области программирования 
или аппаратного обеспечения полезны, но не обязательны. Если вы 
сможете установить программу, подключить USB-кабель и следовать пошаговым 
инструкциям, вы узнаете много нового.

Что вклюЧАет в себя этА книгА

Глава 1.  Введение в FPGA и Xilinx Vivado.  В главе объясняется что такое ASIC 
и FPGA и как установить Xilinx Vivado и создать небольшой проект.
Глава 2. Комбинационная логика. В главе описано как разработать с нуля полноценный 
модуль на SystemVerilog для выполнения некоторых базовых операций, 
чтобы продемонстрировать, как использовать комбинационную логику 
в собственных проектах. Глава также знакомит с разработкой testbench2 на 
примере создания testbench с самопроверкой.

1 ASIC (application-specific integrated circuit, «интегральная схема специального назначения») – 
интегральная схема, специализированная для решения конкретной 
задачи. FPGA (field-programmable gate array, «программируемая пользователем вентильная 
матрица») – разновидность программируемых логических интегральных 
схем, ПЛИС. Существуют и другие разновидности программируемых схем, но FPGA, 
как самые распространенные и универсальные, фактически стали синонимом ПЛИС. 
ASIC, подобно FPGA, разрабатываются на типовой основе, но затем отдаются в производство, 
в то время, как FPGA выпускается в виде полуфабриката, который доводится 
до нужной функциональности программными методами непосредственно 
перед применением. Подробнее об ASIC и FPGA рассказано в главе 1.  – Прим. ред. 

2 Testbench (дословно «испытательный стенд») – тестирующая программа или программно-
аппаратный комплект, созданный для испытания запрограммированной в FPGA 
функциональности. В русскоязычной профессиональной среде прижился оригинальный 
англоязычный термин, потому в этой книге он приводится без перевода. – Прим. ред.