Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
 I. Введение
 Что такое язык описания аппаратуры (HDL) . . . . . . . . . . . . . . . . . . . . . . . 15
 Что такое ПЛИС и как она работает. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
 Последовательностная логика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
 Этапы реализации проекта в ПЛИС . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
 II. Лабораторный практикум
 Лабораторная работа № 1 «Сумматор» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
 Лабораторная работа № 2 «Арифметико-логическое устройство» . . . . . . . . . 73
 Лабораторная работа № 3 «Регистровый файл и память инструкций» . . . . . 87
 Лабораторная работа № 4 «Простейшее программируемое устройство» . . . 101
 Написание программы под процессор CYBERcobra . . . . . . . . . . . . . . . . . . 114
 Лабораторная работа № 5 «Декодер инструкций» . . . . . . . . . . . . . . . . . . . 123
 Лабораторная работа № 6 «Основная память» . . . . . . . . . . . . . . . . . . . . . . 141
 Лабораторная работа № 7 «Тракт данных» . . . . . . . . . . . . . . . . . . . . . . . . 147
 Лабораторная работа № 8 «Блок загрузки и сохранения» . . . . . . . . . . . . . . 155
 Лабораторная работа № 9 «Интеграция блока загрузки и сохранения» . . . . 165
 Лабораторная работа № 10 «Подсистема прерывания» . . . . . . . . . . . . . . . . 167
 Лабораторная работа № 11 «Интеграция подсистемы прерывания» . . . . . . 185
 Лабораторная работа № 12 «Блок приоритетных прерываний». . . . . . . . . . 187
 Лабораторная работа № 13 «Периферийные устройства» . . . . . . . . . . . . . . 193
 Лабораторная работа № 14 «Высокоуровневое программирование» . . . . . . 223
 Лабораторная работа № 15 «Программатор» . . . . . . . . . . . . . . . . . . . . . . . 247
 Лабораторная работа № 16 «Оценка производительности» . . . . . . . . . . . . . 267
 III. Базовые конструкции SystemVerilog
 Описание модулей в SystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
 Описание мультиплексоров в SystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . 291
 Описание регистров в SystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
 Конкатенация (объединение сигналов) . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
 D-защёлка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
 О различиях между блокирующими и неблокирующими присваиваниями 313
 Пример разработки модуля-контроллера периферийного устройства . . . . . 329
 IV. Основы Vivado
 Создание нового проекта в Vivado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
 Навигатор по маршруту проектирования (Flow Navigator) . . . . . . . . . . . . . 341
 Менеджер проекта (Project Manager) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
 Как запустить симуляцию в Vivado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
 Руководство по поиску функциональных ошибок . . . . . . . . . . . . . . . . . . . 359
 Анализ RTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
 Как прошить ПЛИС. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
 V. Выдержки из спецификации RISC V
 RV32I — стандартный набор целочисленных инструкций RISC-V . . . . . . . 385
 О регистрах контроля и статуса. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395