Настоящее издание открывает цикл сборников лекций и лабораторных
практикумов, созданных в национальном исследовательском университете
«Московский институт электронной техники» (НИУ МИЭТ) в рамках деятель-
ности Передовой инженерной школы «Средства проектирования и производ-
ства электронной компонентной базы» (далее — ПИШ).
Реализация программы развития ПИШ осуществляется совместно с про-
мышленными партнёрами, интересом которых является целевая и заказная под-
готовка дефицитных инженерных и управленческих кадров. На базе ПИШ со-
здаются новые научно-образовательные пространства и лаборатории, в том
числе для организации практики, стажировок и переподготовки кадров с учётом
потребностей отрасли. Разрабатываются и реализуются новые образовательные
программы с участием ведущих специалистов высокотехнологичных компаний.
Важной частью образовательных программ ПИШ является практика обу-
чающихся в составе проектных команд, которые привлекаются к научным и
инженерным проектам промышленных партнёров. Например, совместно с
YADRO в 2024 году была разработана новая магистерская программа «Вычис-
лительные системы и электронная компонентная база», в рамках которой осу-
ществляется подготовка кадров, обладающих компетенциями в области сквоз-
ного проектирования сложнофункциональных блоков и систем на кристалле
на базе открытой микропроцессорной архитектуры RISC-V.
Проектное обучение в магистратуре ведётся по трём направлениям:
RTL-проектирование, функциональная верификация, топологическое проек-
тирование. В рамках обучения в магистратуре каждый обучающийся получает
актуальные знания от ведущих экспертов компании YADRO и преподавателей
НИУ МИЭТ, а также проходит практику в лаборатории ПИШ «СФ-блоки и
библиотеки», где решаются задачи в области расширения системы команд, а
также оптимизации вычислительных ядер. При выполнении командного про-
екта по разработке экспериментальных образцов СФ-блоков и систем-на-кри-
сталле обучающиеся имеют возможность изготовить в формате MPW (Multi
Project Wafer) спроектированные микросхемы на отечественной фабрике и
провести её экспериментальное исследование.
Кроме того, НИУ МИЭТ участвует в организации Школы синтеза цифро-
вых схем, которая при поддержке YADRO действует по всей России и успеш-
но решает свою задачу быстрого освоения современных подходов к проекти-
рованию цифровых микросхем для различных уровней подготовки — от
школьников до инженеров. Также НИУ МИЭТ совместно с YADRO ежегодно
проводит инженерный хакатон SoC Design Challenge для студентов и професси-
ональных инженеров по тематике проектирования СнК.
Таким образом, на базе ПИШ НИУ МИЭТ реализуется сквозной цикл ме-
роприятий по подготовке кадров в области проектирования сложнофункцио-
нальных блоков и систем на кристалле на основе архитектуры RISC-V.
Представленный в книге лабораторный практикум является результатом
более чем 20-летней эволюции курса АПС в рамках инженерной и научной
школы кафедры Вычислительной техники, а позже Института микроприборов
и систем управления имени Л.Н. Преснухина. Сборник отражает один из
трендов развития методологии проектирования вычислительной техники и си-
стем управления: степень интеграции такой аппаратуры неуклонно повышает-
ся, а её разработчики заходят в область проектирования электронной компо-
нентной базы.
Лабораторный практикум ориентирован на разработку процессора с архи-
тектурой RISC-V: читатель может пройти путь от азов разработки цифровых
схем до проектирования однотактного микроконтроллера с архитектурой
RISC-V, а также написания и компиляции программного обеспечения для
него. Несмотря на то что проектируемый процессор имеет исключительно
академическое назначение, на нём вполне можно запускать простые игры, на-
пример «змейку»1.
Освоив материал данной книги, вы приобретёте практические навыки раз-
работки на языке SystemVerilog, познакомитесь с основами работы с ПЛИС и
инструментами проектирования, такими как Vivado, а также получите опыт
программирования на языке ассемблер. Таким образом, книга предоставляет
уникальную возможность начать с нуля и шаг за шагом освоить основы проек-
тирования процессоров и работы с ПЛИС, что может стать первым шагом к
вашей карьере в области цифровой электроники.
Авторы надеются, что книга будет полезна как при самостоятельном изу-
чении, так и при использовании в качестве пособия в университете. Желаем
вам успехов в освоении данного материала лабораторного практикума «Архи-
тектуры процессорных систем»!
История курса и разработчики
Дисциплины, связанные с организацией вычислительной техники, читают-
ся в МИЭТ с самого его основания. Курс «Архитектуры процессорных систем»
эволюционировал из курса «Микропроцессорные средства и системы»
(МПСиС), читаемого на факультете Микроприборов и технической киберне-
тики сначала д.т.н., профессором Савченко Юрием Васильевичем, а после —
директором Института микроприборов и систем управления, д.т.н. Перевер-
зевым Алексеем Леонидовичем. С 2014 по 2024 годы дисциплина значитель-
но модернизировалась с участием преподавателей, сотрудников и студентов
Института МПСУ, в частности существенный вклад внесли преподаватели
Попов Михаил Геннадиевич и Солодовников Андрей Павлович.
В 2019—2024 годах была значительно переработана, осовременена и дополне-
на теоретическая часть курса. Разработаны и полностью обновлены лабораторные
работы с переходом на использование архитектуры RISC-V. Все материалы курса,
включая видеозаписи лекций2, были выложены в свободный доступ.
С подготовкой курса и репозитория помогали студенты и сотрудники
Института МПСУ и ПИШ НИУ МИЭТ (бывшие и нынешние):
6 Предисловие
1 https://github.com/MPSU/APS/tree/master/Labs#обзор-лабораторных-работ
2 https://www.youtube.com/@digital_machines
Фамилия, имя,
отчество
Вклад в курс
Барков Евгений
Сергеевич
Профессиональные консультации по деталям языка SystemVerilog,
спецификации RISC-V и RTL-разработки,
тематике синтеза и констрейнов.
Булавин Никита
Сергеевич
Отработка материалов, подготовка тестбенчей и модулей
верхнего уровня для плат Nexys A7 для лабораторных
работ.
Козин Алексей
Александрович
Отработка материалов, подготовка обфусцированных
модулей для лабораторных работ.
Коршунов Андрей
Владимирович
Профессиональные консультации по темам проектиро-
вания и синтеза цифровых схем.
Кулешов Владислав
Константинович
Вычитка и исправление ошибок в методических матери-
алах, сбор обратной связи от студентов.
Орлов Александр
Николаевич
Профессиональные консультации по деталям языка SystemVerilog,
спецификации RISC-V и RTL-разработки,
примерам программ, иллюстрирующим особенности ар-
хитектуры.
Примаков Евгений
Владимирович
Профессиональные консультации по деталям языка SystemVerilog,
спецификации RISC-V и RTL-разработки и
вопросам микроархитектуры.
Протасова
Екатерина
Андреевна
Подготовка индивидуальных заданий и допусков к лабо-
раторным работам, вычитка и отработка материалов, а
также сбор обратной связи от студентов.
Русановский Богдан
Витальевич
Перенос лабораторной работы по прерываниям из PDF
в Markdown, подготовка иллюстраций.
Рыжкова Дарья
Васильевна
Подготовка тестбенчей для лабораторных работ.
Силантьев
Александр
Михайлович
Профессиональные консультации по деталям языка SystemVerilog,
спецификации RISC-V и RTL-разработки,
вопросам микроархитектуры, тематике синтеза и конст-
рейнов, особенностям компиляции и профилирования.
Стрелков Даниил
Владимирович
Отработка материалов, подготовка тестбенчей для лабо-
раторных работ и иллюстраций структуры курса.
Терновой Николай
Эдуардович
Профессиональные консультации по деталям языка SystemVerilog,
спецификации RISC-V и RTL-разработки,
вычитка материалов, сбор обратной связи от студентов.
Харламов Александр
Александрович
Отработка материалов, проектирование вспомогательных
модулей для лабораторных работ.
Хисамов Василь
Тагирович
Вычитка материалов, сбор обратной связи от студентов.
Чусов Сергей
Андреевич
Вычитка материалов, сбор обратной связи от студентов.
Иллюстрации были подготовлены Краснюк Екатериной Александровной.
Предисловие 7
Как читать эту книгу
Представленный здесь материал является сборником лабораторных работ,
выполняемых студентами в НИУ МИЭТ в рамках дисциплины «Архитектуры
процессорных систем» (АПС), и в первую очередь рассчитан именно на них,
поэтому в тексте будут встречаться фразы вроде: «Допуск к лабораторной ра-
боте», «Проконсультироваться с преподавателем», которые имеют смысл толь-
ко для обучающихся в вузе. Если вы читаете эту книгу для самостоятельного
обучения, большую часть подобных фраз можно игнорировать.
В целом книга рассчитана на широкий охват аудитории по уровню их под-
готовки на момент начала прослушивания дисциплины АПС, поэтому для ко-
го-то некоторые материалы окажутся избыточными, а для кого-то — крайне
необходимыми.
Вне зависимости от вашего уровня подготовки, работу с этим курсом реко-
мендуется начать с прочтения раздела «Введение».
Далее можно приступать к разделу «Лабораторные работы». Перед каждым
лабораторным занятием вам рекомендуется заранее ознакомиться с методиче-
скими материалами, т.к. они очень подробные и их чтение требует некоторого
терпения. Время, отведённое на лабораторное занятие, рекомендуется исполь-
зовать по максимуму: заниматься практической деятельностью, консультиро-
ваться с преподавателем, отлаживать разработанные блоки устройства и тому
подобное, а для этого лучше прочитать методичку заранее.
Важно отметить, что в начале многих лабораторных работ приведены до
полнительные материалы для подготовки со ссылками на главы раздела «Базо-
вые конструкции SystemVerilog», которые студент должен освоить перед выпол-
нением этой лабораторной работы. Данный раздел ориентирован в первую
очередь на студентов, не работавших ранее с Verilog/SystemVerilog, однако,
даже если вы работали с этими языками, рекомендуется пролистать данные
главы и проверить свои знания в параграфе «Проверь себя».
Лабораторные занятия будут проходить с использованием САПР Vivado
(и отладочных стендов Nexys A7). Это сложный профессиональный инстру-
мент, однако основной информации по взаимодействию с САПР в разделе
«Основы Vivado» хватит, чтобы с помощью Vivado реализовать весь цикл лабо-
раторных работ.
Традиционно данный лабораторный практикум считают сложным, однако
за годы отработки методических материалов в них было внесено множество
уточнений и акцентов на действия, которые могут привести к ошибкам, до-
бавлены ссылки на вспомогательные материалы. В данный момент авторы
считают, что для успешного выполнения лабораторной работы от обучающе-
гося требуется внимательно прочитать предоставленный ему материал и не бо-
яться задать вопрос преподавателю, если что-то непонятно.
Если вы читаете данную книгу не в рамках курса АПС, вы вольны в выбо-
ре как программных средств, так и способов отладки. Репозиторий1, сопро-
вождающий эту книгу, будет содержать некоторые файлы, специализирован-
ные для плат Nexys A7 (так называемые ограничения/constraints), однако при
8 Предисловие
1 https://github.com/MPSU/APS
должном уровне навыков вы с лёгкостью сможете портировать его под свою
плату. В случае если вы будете использовать стороннюю плату, обратите вни-
мание на число её переключателей, светодиодов и семисегментных индикато-
ров. В курсе их необходимо 16, 16 и 8 соответственно, поэтому, возможно, вам
потребуется плата расширения.
Эта книга может быть интересна и полезна читателю, не имеющему ника-
кой отладочной платы: проверка работоспособности осуществляется в первую
очередь моделированием (на самом деле 90% времени вы будете проверять всё
именно посредством моделирования).
В ходе выполнения лабораторных работ вы наверняка столкнётесь как
с ошибками, связанными с работой Vivado, так и с ошибками описания на
языке SystemVerilog. В первую очередь рекомендуется ознакомиться с тек-
стом ошибки. В случае ошибок, связанных с языком SystemVerilog, чаще
всего там содержится вся необходимая информация по её устранению.
В случае если текст непонятен, рекомендуется ознакомиться со списком
типичных ошибок1.
Материал этой книги будет пестрить множеством ссылок, которые в элект-
ронной версии этой книги, разумеется, будут представлены в виде гиперссы-
лок. Однако, если вы имеете удовольствие читать эту книгу в «аналоговом»
формате, для вашего удобства все ссылки будут представлены в виде сносок
под соответствующей страницей в текстовом формате.
Большая часть информации, касающаяся архитектуры RISC-V, взята на-
прямую из спецификации. Поскольку работа над спецификацией всё ещё идёт
(хотя базовый набор инструкций rv32i уже заморожен и не изменится), чтобы
ссылки на конкретные страницы спецификации имели смысл, они будут дава-
ться на следующие версии двух документов:
• The RISC-V Instruction Set Manual Volume I: Unprivileged ISA — версия
документа 202404112;
• The RISC-V Instruction Set Manual Volume II: Privileged Architecture —
версия документа 202404113.
Курс лабораторных работ неразрывно связан с онлайн-репозиторием, рас-
положенным по адресу: https://github.com/MPSU/APS. Этот репозиторий
хранит методические материалы, верификационное окружение, готовые моду-
ли и файлы ограничений для отладочного стенда Nexys A7.
По всем вопросам / замечаниям / предложениям вы можете связаться с ав-
торами курса через разделы Issues и Discussions данного репозитория.
Данный курс непрерывно эволюционировал на протяжении нескольких
лет до самого своего издания. Авторы допускают, что где-то в тексте могли
остаться некоторые недочёты, которые после издания тиража уже «не выру-
бишь топором». Для того чтобы дать читателям возможность узнать об ошиб-
ках, найденных уже после издания, в корне репозитория находится специаль-
ный документ ERRATA.md.
Предисловие 9
1 https://github.com/MPSU/APS/blob/master/Other/FAQ.md
2 https://github.com/riscv/riscv-isa-manual/releases/download/20240411/unpriv-isa-asciidoc.pdf
3 https://github.com/riscv/riscv-isa-manual/releases/download/20240411/priv-isa-asciidoc.pdf
Как пользоваться репозиторием
В корне репозитория находятся следующие элементы (символом ‘/’ на
конце обозначены папки):
• .github/
• .pic/
• Basic Verilog structures/
• Introduction/
• Labs/
• Lectures/
• Other/
• Vivado Basics/
• .gitmodules
• ERRATA.md
• LICENSE
• README.md
Серым цветом обозначены элементы, которые не потребуются в ходе вы-
полнения лабораторных работ.
В папках Introduction, Basic Verilog structures и Vivado Basics описаны раз-
делы 1, 3 и 4 данной книги. Папка Other среди прочего содержит информа-
цию, формирующую раздел 5 данной книги. Файл ERRATA.md содержит спи-
сок ошибок, обнаруженных после публикации издания.
Рассмотрим структуру папки Labs:
01. Adder/
02. Arithmetic-logic unit/
03. Register file and memory/
04. Primitive programmable device/
05. Main decoder/
06. Main memory/
07. Datapath/
08. Load-store unit/
09. LSU Integration/
10. Interrupt subsystem/
11. Interrupt integration/
12. Daisy chain/
13. Peripheral units/
14. Programming/
15. Programming device/
16. CoreMark/
Made-up modules/
Readme.md
Здесь находятся методические материалы ко всем 16 лабораторным рабо-
там, разложенные по соответствующим им папкам.
Практически в каждой такой папке находится файл формата
lab_xx.tb_xxx.sv, это файл с верификационным окружением для данной лабо-
раторной работы. Такой файл необходимо добавлять в Simulation Sources про-
екта (подробней в разделе Vivado Basics).
10 Предисловие
Кроме того, в папке лабораторной работы могут находиться файлы
xxx_pkg.sv и xxx.mem, содержащие параметры и данные, соответственно, кото-
рыми необходимо проинициализировать память устройства. Такие файлы бу-
дет необходимо добавлять в Design Sources проекта.
Также в большинстве папок будет находиться папка board files, которая
содержит модуль верхнего уровня (если требуется), описание способов взаи-
модействия с ним и файлы ограничений (constraints) под отладочную плату
Nexys A7.
Помимо прочего, в папке Made-up modules/ находятся готовые модули для
некоторых лабораторных работ. В случае если по какой-то причине вы не
смогли выполнить лабораторную работу, вы можете продолжить работу над
курсом, использовав готовый модуль из этой папки.
У репозитория есть зеркало (копия сайта), расположенное по адресу:
https://git-chips.miet.ru/MPSU/APS. Структура файлов в зеркале полностью
совпадает с исходным репозиторием.
Предисловие 11
I. Введение
Что вас ждёт в этом разделе
Первая глава посвящена концепции использования языков описания аппа
ратуры (Hardware Description Languages, HDL). Это ключевая тема, поскольку
в ходе работы вы будете описывать цифровые схемы в виде кода. У многих на
этом этапе возникает ощущение, что они пишут программу. Однако важно
осознать фундаментальное различие: описание цифровых схем предписывает
каким устройство будет, а программирование предписывает какую последова-
тельность действий нужно выполнить, это принципиально разные вещи. Если
при работе над лабораторными заданиями вы будете использовать выражения
вроде «объявляем переменную» или «вызываем функцию», это станет сигналом
того, вы по-прежнему пытаетесь писать программу. Такой взгляд может
усложнить процесс освоения материала.
Лабораторный практикум построен таким образом, чтобы вы могли прове-
рить свои разработки с помощью программируемой логической интегральной
схемы (ПЛИС). Это устройство позволяет воспроизводить цифровые схемы,
описанные вами на языке HDL. Отладочные платы с ПЛИС могут вызвать
ассоциацию с аналогичными платами на основе процессоров и микроконтрол-
леров, например, Arduino. Чтобы этого избежать, вторая глава подробно объ-
ясняет, что такое ПЛИС и принципы их работы.
Третья глава посвящена классификации цифровой логики с акцентом на
элементы последовательностной логики, или другими словами – устройств
с памятью. Эти знания необходимы для понимания ключевых аспектов чет-
вёртой главы, а также особенностей цифровой электроники, которые станут
основой для выполнения лабораторных работ. Кроме того, четвёртая глава
проведёт вас по маршруту преобразования текстового описания схемы в её
физическое воспроизведение в ПЛИС.