English version draft

Assisted-by: Claude:claude-4.6-sonnet
This commit is contained in:
Andrei Solodovnikov
2026-04-12 13:53:25 +03:00
parent 63260f434e
commit f3fcd27387
74 changed files with 5133 additions and 5875 deletions

178
.github/Intro.md vendored
View File

@@ -1,116 +1,116 @@
# Предисловие
# Preface
Данная книга проведёт вас от азов разработки цифровых схем до проектирования однотактного микроконтроллера с архитектурой RISC-V, а также написания и компиляции программного обеспечения для него. Освоив материал, вы приобретёте практические навыки разработки на языке SystemVerilog, познакомитесь с основами работы с ПЛИС и инструментами проектирования, такими как Vivado, а также получите опыт программирования на языке ассемблера, что откроет для вас двери в мир низкоуровневого программирования.
This book will guide you from the fundamentals of digital circuit design all the way to designing a single-cycle RISC-V microcontroller and writing and compiling software for it. By working through the material, you will gain practical skills in SystemVerilog, learn the basics of working with FPGAs and design tools such as Vivado, and gain hands-on experience programming in assembly language — opening the door to the world of low-level programming.
Таким образом, книга предоставляет уникальную возможность начать с нуля и шаг за шагом освоить основы проектирования процессоров и работы с ПЛИС, что может стать первым шагом к вашей карьере в области цифровой электроники.
The book thus provides a unique opportunity to start from scratch and step by step master the fundamentals of processor design and FPGA development, which can serve as a first step toward a career in digital electronics.
Несмотря на то, что создаваемый процессор имеет чисто академическое назначение, на нём можно запускать простые игры, например "змейку". Представленный здесь материал является сборником лабораторных работ, выполняемых студентами в НИУ МИЭТ в рамках дисциплины "Архитектуры процессорных систем" (АПС) и, в первую очередь, рассчитан именно на них, поэтому в тексте будут встречаться фразы вроде: "Допуск к лабораторной работе", "Проконсультироваться с преподавателем", которые имеют смысл, только для обучающихся в ВУЗе. Если вы читаете эту книгу для самостоятельного обучения, большую часть подобных фраз можно игнорировать.
Although the processor being built is purely academic in nature, it is perfectly capable of running simple games such as Snake. The material presented here is a collection of lab assignments completed by students at MIET as part of the "Architectures of Processor Systems" (APS) course, and is primarily aimed at those students. As a result, the text occasionally contains phrases such as "Pre-lab admission" or "Consult your instructor," which are meaningful only in a university context. If you are reading this book for self-study, most such phrases can be safely ignored.
## Мотивация
## Motivation
Целью курса "Архитектуры процессорных систем" является изучение устройства и способов организации процессоров, а также систем под их управлением. Практическая часть курса ориентирована на разработку процессора с архитектурой RISC-V.
The goal of the "Architectures of Processor Systems" course is to study the design and organization of processors and the systems they control. The practical component of the course focuses on developing a processor with the RISC-V architecture.
Под словом Архитектура понимается некоторый способ организации. Процессор это программно-управляемое устройство для обработки информации. Проще говоря, это устройство, управлять поведением которого можно с помощью программ (последовательности команд/действий). Система это комбинация взаимодействующих элементов, организованных для достижения поставленных целей. Таким образом, дисциплина "Архитектуры процессорных систем" посвящена способам организации и построения систем под управлением устройств, управляемых программами.
The word *Architecture* refers to a particular way of organizing something. A *processor* is a programmable device for information processing — in other words, a device whose behavior can be controlled through programs (sequences of instructions/actions). A *system* is a combination of interacting elements organized to achieve defined goals. Thus, the "Architectures of Processor Systems" discipline is concerned with the ways of organizing and building systems controlled by programmable devices.
Дисциплина реализуется Институтом МПСУ на базе НИУ МИЭТ сразу для 7 различных направлений подготовки, которые имеют разные названия и количество теоретического и практического материалов. Несмотря на это масштаб покрытия у них одинаковый, а суть предмета изучения общая - организация компьютеров. Отличаются лишь глубина погружения и акценты.
The course is delivered by the MPSU Institute at MIET across 7 different degree programs, which vary in name and in the balance of theoretical and practical material. Despite these differences, the scope of coverage is the same across all programs, and the core subject is the same — computer organization. The programs differ only in depth and emphasis.
Для успешного погружения в дисциплину важно понимать зачем эта дисциплина нужна именно тебе, будучи студентом:
To engage successfully with this discipline, it is important to understand why it is relevant to you as a student in your particular field:
### Информационной безопасности
### Information Security
Нет никаких сомнений в том, что люди, разрабатывающие системы безопасностей для автомобилей, хорошо знают, как эти автомобили устроены и работают. Очевидно, что пожарную безопасность невозможно организовать не понимая, как горят материалы или, к примеру, в чем особенность помещений, которые будут защищаться. Также невозможно организовать стойкую информационную безопасность без понимания принципов работы устройств, которые эту информацию получают, обрабатывают и передают. Чтобы специалисту по информационной безопасности обеспечивать соблюдение правил обмена и обработки информации в информационных системах, очевидно, что нужно понимать как эти системы работают.
There is no doubt that people who design automotive safety systems have a thorough understanding of how those automobiles work. It is obvious that fire safety cannot be organized without understanding how materials burn or, for example, the specific characteristics of the spaces being protected. In the same way, robust information security cannot be achieved without understanding the principles of operation of the devices that receive, process, and transmit that information. For an information security specialist to enforce the rules governing the exchange and processing of information in information systems, it is clearly necessary to understand how those systems work.
Преступники в сфере информационных технологий знают как они устроены и работают, потому что в результате своих действий они их не "ломают" (как принято говорить), а заставляют работать так, как нужно им, а не владельцам этих систем. Ну, а если чтобы найти преступника нужно думать, как преступник, то хорошему безопаснику остается только одно разобраться как компьютеры работают, изучив курс АПС.
Criminals in the field of information technology know how these systems are built and how they work — because the result of their actions is not "breaking" the systems (as is commonly said), but rather making them work the way the attacker wants, rather than the way the owner intends. And if catching a criminal requires thinking like a criminal, a good security professional has only one option: learn how computers work by studying the APS course.
### Информатики и вычислительной техники
### Computer Science and Engineering
3040 лет назад, когда персональные компьютеры были ещё в новинку, а интернета как такового не было, пионеры вычислительной техники предсказывали, что в будущем электронные чипы станут настолько дешёвыми, что они будут повсюду — в домах, в транспорте, даже в человеческом теле. Для того времени эта идея казалась фантастической, даже абсурдной. Персональные компьютеры тогда были очень дороги и в большинстве своём даже не подключались к интернету. Мысль о том, что миллиарды крохотных чипов когда-нибудь будут во всем и станут дешевле семечек, казалась нелепой. Сегодня эти мысли уже не кажутся фантастическими. В последнее десятилетие почти всегда, какой-нибудь компьютер или компьютеры находятся на расстоянии вытянутой руки от человека. Билетик в метро тоже компьютер, который спроектировал, возможно, выпускник ИВТ.
3040 years ago, when personal computers were still a novelty and the internet as we know it did not yet exist, the pioneers of computing predicted that in the future, electronic chips would become so cheap that they would be everywhere — in our homes, in transportation, even in the human body. At the time, this idea seemed fantastical, even absurd. Personal computers were very expensive and mostly not connected to any network. The notion that billions of tiny chips would one day be embedded in everything and cost less than a handful of seeds seemed ridiculous. Today, these ideas no longer seem far-fetched. Over the past decade, some computer or another has almost always been within arm's reach of a person. Even a metro ticket is a computer — one that was perhaps designed by a graduate of a Computer Science and Engineering program.
Если ты выпускник направления Информатика и Вычислительная Техника, то скорее всего, в будущем, ты будешь разрабатывать электронику, компьютеры цифровые автоматические устройства, которые, как правило, управляются процессорами и ПЛИС. Типичное современное электронное устройство это набор датчиков физических величин, которые посылают свои измерения в процессор, который обрабатывает полученную информацию согласно заданной программе. Понимать, как это работает также разумно, как и терапевту знать из каких органов состоит человек, несмотря на то что он не хирург и внутрь не полезет. Выпускник ИВТ, понимающий устройство компьютера будет способен разрабатывать более эффективные решения: более быстрые, точные, энергоэффективные.
If you are a graduate of Computer Science and Engineering, you will most likely be developing electronics and computers in the future — digital automated devices that are typically controlled by processors and FPGAs. A typical modern electronic device consists of a set of physical sensors that send their measurements to a processor, which processes the received information according to a given program. Understanding how this works is just as reasonable as a physician knowing what organs the human body contains, even if they are not a surgeon and will not be operating. A Computer Science and Engineering graduate who understands how a computer is built will be able to develop more effective solutions: faster, more accurate, and more energy-efficient.
Логика такая: "Чтобы разрабатывать электронику, я должен понимать из чего она делается", "Современными электронными устройствами управляют процессоры" ⟹ "Чтобы разрабатывать электронику, я должен разбираться в процессорах".
The logic goes: "To develop electronics, I need to understand what it is made of," "Modern electronic devices are controlled by processors" ⟹ "To develop electronics, I need to understand processors."
### Инфокоммуникационных технологий и систем связи
### Infocommunication Technologies and Communication Systems
Помимо своей очевидности существует множество подтверждений того, что уровень развития цивилизации связан с развитием связи. Разработка новейших систем связи и их внедрение еще очень долго будет одной из самых актуальных задач развития человечества. Мы сталкиваемся с постоянной потребностью обеспечивать связь нужных адресатов и делать это быстро и безопасно. Достигается это благодаря современным программно-аппаратным решениям, которые постоянно развиваются и совершенствуются. По сути, сетевые инженеры разрабатывают специализированные компьютеры, задачей которых является обмен информацией между некоторыми входными и выходными узлами по заданным правилам. Все это требует понимания работы программируемых устройств, которые и лежат в основе сетевых узлов.
In addition to being self-evident, there is abundant evidence that the level of civilizational development is linked to the development of communications. The design of cutting-edge communication systems and their deployment will remain one of the most pressing challenges for humanity for a long time to come. We are constantly faced with the need to connect the right parties quickly and securely. This is achieved through modern hardware-software solutions that are continuously evolving and improving. In essence, network engineers design specialized computers whose purpose is to exchange information between certain input and output nodes according to defined rules. All of this requires an understanding of the operation of programmable devices, which form the foundation of network nodes.
Существует множество разнообразных сетевых процессоров и решений, реализуемых в программируемых логических интегральных схемах (ПЛИС). Для успешного участия в разработке современных сетевых решений необходимо не только знание методов передачи данных, алгоритмов кодирования и тому подобного, но и понимание принципов функционирования строительных блоков, из которых создаются сетевые системы. Глубина таких знаний позволяют увеличивать скорость передачи данных и улучшать безопасность.
There are numerous diverse network processors and solutions implemented in FPGAs. Successfully participating in the development of modern networking solutions requires not only knowledge of data transmission methods, coding algorithms, and the like, but also an understanding of the operating principles of the building blocks from which network systems are constructed. The depth of such knowledge makes it possible to increase data transfer speeds and improve security.
Знания в области разработки компьютеров являются важным инструментом в создании информационно-коммуникационных систем связи.
Knowledge in the area of computer design is an essential tool in the creation of information and communication systems.
### Конструирования и технологии электронных средств
### Electronic Device Design and Technology
Не так давно, когда персональные компьютеры только начали завоевывать мир, и интернет еще не был доступен для всех, многие представители конструкторской и технологической индустрии предсказывали будущее, в котором электроника будет всюду: в наших домах, транспорте и даже в наших собственных телах. Это казалось невероятным и даже фантастическим сценарием для тех времен, когда персональные компьютеры были дорогими и не имели доступа к сети Интернет.
Not so long ago, when personal computers were just beginning to conquer the world and the internet was not yet available to everyone, many in the design and technology industry predicted a future in which electronics would be everywhere: in our homes, our transportation, and even in our own bodies. This seemed incredible and even fantastical at a time when personal computers were expensive and had no internet access.
Сегодня эти идеи уже не кажутся фантастическими. В последние десятилетия мы постоянно окружены электроникой и множеством вычислительных систем, часть из которых появляется благодаря выпускникам Конструирования и технологии электронных средств. Возьмем, к примеру, роботов. Современные роботы это высокотехнологичные электронные системы, спроектированные для выполнения различных задач. Они оснащены датчиками и процессорами, которые позволяют им воспринимать окружающую среду и принимать решения в реальном времени. Выпускник направления "Конструирование и Технология электронных средств" будет иметь уникальную возможность создавать и улучшать такие устройства, делая их более эффективными и функциональными.
Today, these ideas no longer seem far-fetched. In recent decades we have been constantly surrounded by electronics and numerous computing systems, some of which are brought into existence by graduates of Electronic Device Design and Technology programs. Take robots, for example. Modern robots are high-technology electronic systems designed to perform a wide range of tasks. They are equipped with sensors and processors that allow them to perceive their environment and make decisions in real time. A graduate of "Electronic Device Design and Technology" will have a unique opportunity to create and improve such devices, making them more efficient and functional.
Суть заключается в том, что для успешной карьеры в области конструирования и технологии электронных средств, необходимо обладать глубоким пониманием электронных систем. Это включает в себя знание принципов работы процессоров, сенсоров и других ключевых компонентов. Выпускники этой специальности будут способны создавать современные электронные устройства и внедрять их в самые разные области. Знание основ организации процессорных систем является мощным и необходимым инструментом в достижении цели создания передовых электронных систем.
The key point is that to succeed in a career in electronic device design and technology, one must have a deep understanding of electronic systems. This includes knowledge of how processors, sensors, and other key components work. Graduates of this program will be able to create modern electronic devices and deploy them across the most diverse application areas. Knowledge of the fundamentals of processor system organization is a powerful and essential tool in achieving the goal of creating advanced electronic systems.
### Программной инженерии
### Software Engineering
Не понимать как устроен и работает компьютер современному программисту, все равно что гонщику Формулы-1 не знать, как работает и устроена его машина. Это просто немыслимо! Такое возможно, но скорее исключение из правил. Конечно же кузнец знает, как устроен его инструмент, ведь тогда он может его более эффективно использовать. Понимает его слабые стороны и знает как хитро применить его на практике. Только в этом случае кузнец ценен.
For a modern software developer not to understand how a computer is structured and how it works is like a Formula 1 driver not knowing how his car works. It is simply unthinkable! It is possible, but very much the exception. Of course, a blacksmith knows how his tools work — because that knowledge allows him to use them more effectively. He understands their weaknesses and knows how to apply them cleverly in practice. Only then is the blacksmith truly valuable.
Современные языки программирования дают возможность значительно оторваться от реального железа. Не редко в этом есть практический смысл, но далеко не всегда. Большинство современных компьютеров автономны (на батарейном питании), а значит, что эффективность их работы есть продолжительность их работы. Понимание нюансов может значительно сэкономить энергию. А порой надо выбрать железо для сервера, а порой понять почему очевидно быстрый код работает медленно. Часто приходится разбираться в новых технологиях, фреймворках, языках, сервисах, библиотеках, но все это дается легко только в том случае, если есть устойчивая база, отвечающая на вопрос - "как это работает и почему именно так?". Во всем перечисленном поможет знание АПС.
Modern programming languages make it possible to operate at a great distance from the actual hardware. Often there is practical value in this abstraction, but not always. Most modern computers are autonomous (battery-powered), which means that efficiency directly translates to battery life. Understanding the nuances can lead to significant energy savings. Sometimes you need to choose hardware for a server, or figure out why obviously fast code is running slowly. You frequently have to get up to speed with new technologies, frameworks, languages, services, and libraries — but all of this comes easily only when there is a solid foundation that answers the question: "How does this work, and why does it work this way?" Knowledge of APS helps with all of the above.
"Разобраться в работе компьютера" не значит "делать(разрабатывать) компьютер". Врачи знают как устроен человек, чтобы лечить его, а не разрабатывать его. Гонщики знают свой автомобиль, чтобы совершенствовать его и использовать по-полной. Также и программисту необходимо понимание работы компьютера не для того, чтобы разрабатывать процессоры, а для более эффективного и разумного его использования.
"Understanding how a computer works" does not mean "building (designing) a computer." Doctors know how the human body is structured in order to treat it, not to design it. Racing drivers know their cars in order to optimize and fully exploit them. Likewise, a software developer needs to understand how a computer works not in order to design processors, but to use the computer more effectively and intelligently.
### Прикладной математики
### Applied Mathematics
Практически все современные приложения математики так или иначе связаны с компьютерами: большие данные, искусственный интеллект, робототехника, финансы и так далее. Математика давно вышла за рамки тетрадных листов, сегодня алгоритмы это мысли процессоров.
Virtually all modern applications of mathematics are connected in one way or another with computers: big data, artificial intelligence, robotics, finance, and so on. Mathematics has long since outgrown the pages of a notebook — today, algorithms are the thoughts of processors.
Математические приложения, какими бы они ни были (моделирование, автоматизация, расчеты или что-то другое), требуют инструмента их решения компьютера. Понимание устройства и работы основного инструмента дает явные преимущества перед тем, у кого этого понимания нет. Порой надо выбрать железо для системы, решающей некоторую задачу, порой понять почему очевидно быстрый код работает медленно. Часто приходится разбираться в новых технологиях, фреймворках, языках, сервисах, библиотеках, но все это дается легко только в том случае, если есть устойчивая база, отвечающая на вопрос - "как это работает и почему именно так?". Во всем перечисленном поможет знание АПС.
Mathematical applications, whatever form they take — simulation, automation, computation, or something else — require an instrument to execute them: a computer. Understanding how your primary instrument is structured and how it works provides a clear advantage over those who lack that understanding. Sometimes you need to choose hardware for a system solving a particular problem; sometimes you need to figure out why obviously fast code is running slowly. You frequently have to get up to speed with new technologies, frameworks, languages, services, and libraries — but all of this comes easily only when there is a solid foundation that answers the question: "How does this work, and why does it work this way?" Knowledge of APS helps with all of the above.
"Разобраться в работе компьютера" не значит "делать(разрабатывать) компьютер". Врачи знают как устроен человек, чтобы лечить его, а не разрабатывать его. Гонщики знают свой автомобиль, чтобы совершенствовать его и использовать по-полной. Также и выпускнику прикладной математики необходимо понимание работы компьютера не для того, чтобы разрабатывать процессоры, а для более эффективного и разумного его использования в своих приложениях.
"Understanding how a computer works" does not mean "building (designing) a computer." Doctors know how the human body is structured in order to treat it, not to design it. Racing drivers know their cars in order to optimize and fully exploit them. Likewise, an applied mathematics graduate needs to understand how a computer works not in order to design processors, but to use the computer more effectively and intelligently in their own applications.
### Радиотехники
### Radio Engineering
Использование радиоволн сегодня помогает в решении огромного круга задач связанных с передачей информации/энергии на расстояние, локацией, позиционированием, изучением свойств объектов отражения и многим другим на что только фантазии хватит. На практике радиоволны оказываются удивительно полезными, и для того чтобы управлять ими и извлекать из них максимум, используются антенны. Эти устройства могут быть довольно сложными, и за ними должны стоять профессионалы, способные их создать. Управляют антеннами, контролируют их и получают с них информацию специальные устройства, которые, в конечном итоге, преобразуют радиосигналы в электрические цифровые, или наоборот.
The use of radio waves today helps solve an enormous range of problems related to transmitting information and energy over a distance, locating and positioning objects, studying the properties of reflecting objects, and much more — limited only by one's imagination. In practice, radio waves turn out to be remarkably useful, and antennas are the devices used to control them and extract maximum value from them. These devices can be quite complex, and professionals capable of designing them are needed behind them. The devices that control, monitor, and receive information from antennas are specialized systems that ultimately convert radio signals into electrical digital signals, or vice versa.
Современные микросхемы СВЧ (сверхвысоких частот), которые используются в антенных устройствах, часто являются программируемыми. Это означает, что они либо содержат в себе процессор, либо спроектированы для взаимодействия с процессорами. Чтобы раскрыть потенциал этих микросхем, вам нужно знать, как работают процессоры. Понимание их функций также пригодится в области радиотехники, особенно если вам нужно управлять сигналами в строгие временные рамки.
Modern microwave integrated circuits (operating at extremely high frequencies), used in antenna systems, are frequently programmable. This means they either contain a processor or are designed to interact with processors. To unlock the full potential of these chips, you need to know how processors work. Understanding their functions is also valuable in radio engineering, especially when you need to control signals within strict timing constraints.
Радиотехника — это не только работа с радиосигналами, но и их обработка. Иногда нужно обрабатывать сигналы очень быстро. В таких случаях важно знать, какой вычислитель выбрать, чтобы обеспечить точность обработки в установленные временные рамки и при этом не превысить требования по энергопотреблению. Без понимания АПС вы не сможете решать такие задачи. Ведь приходится выбирать из множества устройств, включая микроконтроллеры и процессоры цифровой обработки сигналов с различными характеристиками, ПЛИС. А как это сделать, если даже не понимаешь что это такое.
Radio engineering is not just about working with radio signals, but also about processing them. Sometimes signals must be processed very quickly. In such cases it is important to know which computing device to choose to ensure processing accuracy within the required time constraints while staying within power consumption requirements. Without an understanding of APS you cannot solve such problems — because you have to choose from a wide range of devices, including microcontrollers, digital signal processors with various characteristics, and FPGAs. But how can you make that choice if you do not even understand what these things are?
По сути, радиотехник это специалист, который может не только посчитать антенну, но и создать ее, а также разработать систему управления, сбора и обработки данных с использованием знаний АПС.
In essence, a radio engineer is a specialist who can not only calculate an antenna design, but also build it and develop systems for control, data acquisition, and processing — using the knowledge gained from APS.
Радиотехника связана с радиосигналами, а радиосигналы всегда связаны с процессорами в современной аппаратуре. И если вы хотите быть в центре этой захватывающей области, изучение АПС — важный шаг на этом пути.
Radio engineering is tied to radio signals, and radio signals in modern equipment are always tied to processors. If you want to be at the forefront of this exciting field, studying APS is an important step on that path.
## Как читать эту книгу
## How to Read This Book
Книга рассчитана на широкий охват аудитории по уровню их подготовки на момент начала прослушивания дисциплины АПС, поэтому для кого-то некоторые материалы окажутся избыточными, а для кого-то — крайне необходимыми.
The book is designed for a wide range of readers with varying levels of preparation at the start of the APS course, so some material may be redundant for some readers while being essential for others.
Вне зависимости от вашего уровня подготовки, работу с этим курсом рекомендуется начать с прочтения документов из части: "Введение".
Regardless of your background, it is recommended to begin by reading the documents in the "Introduction" section.
Далее можно приступать к разделу "Лабораторные работы". Перед каждым лабораторным занятием вам **рекомендуется** ознакомиться с методичкой, т.к. они очень подробные и их чтение требует какого-то времени. Время, отведенное на лабораторное занятие, рекомендуется использовать по-максимуму: заниматься практической деятельностью, консультироваться с преподавателем, отлаживать разработанные блоки устройства и тому подобное, а для этого лучше прочитать методичку заранее.
You can then proceed to the "Lab Assignments" section. Before each lab session, you are **strongly encouraged** to read the corresponding lab guide in advance, as the guides are quite detailed and require some time to read. The time allocated for the lab session itself should be used to maximum effect: carrying out practical work, consulting with your instructor, debugging the device blocks you have designed, and so on — all of which requires having read the guide beforehand.
Кроме того, важно отметить, что в начале многих лабораторных работ указаны **дополнительные материалы для подготовки**, где перечислены все материалы со ссылками на главы раздела "Базовые конструкции SystemVerilog", которые студент **должен освоить** перед выполнением этой лабораторной работы. Данный раздел ориентирован в первую очередь на студентов, не работавших ранее с Verilog/SystemVerilog, однако, даже если вы работали с этими языками, рекомендуется пролистать данные главы и проверить свои знания в разделе "Проверь себя".
It is also important to note that at the beginning of many lab assignments, **additional preparation materials** are listed, with references to chapters in the "Basic SystemVerilog Constructs" section that the student **must study** before completing that lab. This section is primarily aimed at students who have not previously worked with Verilog/SystemVerilog; however, even if you have experience with these languages, it is recommended to skim through those chapters and test your knowledge in the "Check Yourself" section.
Лабораторные занятия будут проходить с использованием САПР `Vivado` (и отладочными стендами `Nexys A7`). Это очень сложный профессиональный инструмент, на полноценное изучение которого могут уйти годы. Во время данного курса лабораторных работ нет времени на годы изучения Vivado, поэтому для вас собрана основная информация по взаимодействию с САПР в разделе "Основы Vivado". Этой информации хватит, чтобы с помощью `Vivado` реализовать весь цикл лабораторных работ.
Lab sessions will use the `Vivado` EDA tool (along with `Nexys A7` development boards). This is a very complex professional tool that can take years to master fully. During this lab course there is no time for years of Vivado study, so the essential information for working with the tool has been compiled for you in the "Vivado Basics" section. This information is sufficient to complete the entire lab cycle using `Vivado`.
Традиционно, данные лабораторные считаются сложными. Однако за годы отработки методичек со студентами, было написано множество вспомогательных материалов, уточнений, а также акцентов на места, которые могут привести к ошибке. В данный момент, для успешного выполнения лабораторной работы от студента требуется только внимательно прочитать предоставленный ему материал и не бояться задать вопрос, если что-то непонятно.
Traditionally, these lab assignments are considered challenging. However, over the years of refining the guides with students, numerous supplementary materials, clarifications, and notes highlighting potential pitfalls have been added. At this point, successfully completing a lab assignment requires only that the student read the provided material carefully and not be afraid to ask a question if something is unclear.
Если вы читаете данную книгу не в рамках курса АПС, вы вольны в выборе как программных средств, так и способов отладки. [Репозиторий](https://github.com/MPSU/APS), сопровождающий эту книгу будет содержать некоторые файлы, специализированные для плат Nexys A7 (так называемые _ограничения_/_констрейны_), однако при должном уровне навыков вы с легкостью сможете портировать его под свою плату. В этому случае, авторы будут признательны, если вы предоставите получившиеся файлы и название платы, чтобы их можно было добавить в отдельную папку по другим платам для будущих читателей. По всем вопросам/замечаниям/предложениям вы можете связаться с авторами курса через разделы `Issues` и `Discussions` данного репозитория.
If you are reading this book outside the APS course, you are free to choose your own software tools and debugging approaches. The [repository](https://github.com/MPSU/APS) accompanying this book will contain some files specific to Nexys A7 boards (so-called _constraints_), but with the appropriate level of skill you will easily be able to port them to your own board. In that case, the authors would appreciate it if you could contribute the resulting files along with the board name, so they can be added to a separate folder for other boards for the benefit of future readers. For any questions, comments, or suggestions, you can contact the course authors through the `Issues` and `Discussions` sections of the repository.
Эта книга может быть интересна и полезна читателю, не имеющему никакой отладочной платы: проверка работоспособности осуществляется в первую очередь на моделировании, т.е. программно (на самом деле, 90% времени вы будете проверять все именно посредством моделирования).
This book can also be useful and interesting for readers who do not have any development board: functionality is verified primarily through simulation, i.e., in software (in fact, 90% of the time you will be testing everything through simulation).
В ходе выполнения лабораторных работ вы наверняка столкнетесь как с ошибками, связанными с работой Vivado, так и с ошибками описания на языке SystemVerilog. В первую очередь, рекомендуется ознакомиться с текстом ошибки. В случае ошибок, связанных с языком SystemVerilog, чаще всего там содержится вся необходимая информация по её устранению. В случае, если текст непонятен, рекомендуется ознакомиться со [списком типичных ошибок](Other/FAQ.md).
In the course of completing the lab assignments, you will inevitably encounter both errors related to Vivado's operation and errors in your SystemVerilog code. The first recommendation is always to read the error message carefully. For SystemVerilog-related errors, the message most often contains all the information needed to resolve the issue. If the message is unclear, consult the [list of common errors](Other/FAQ.md).
Материал этой книги будет пестрить множеством ссылок, которые в электронной версии этой книги, разумеется, будут кликабельными. Однако, если вы имеете удовольствие читать эту книгу в "аналоговом" формате, для вашего удобства все ссылки будут представлены в виде сносок под соответствующей страницей в текстовом формате. Текстовый формат вместо QR-кодов выбран чтобы иметь возможность ввести ссылку вручную (все ссылки будут представлены в формате Unicode, так что не беспокойтесь, что вам придется вводить что-то наподобие "https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80"). Кроме того, "умные" камеры современных смартфонов отлично справляются с распознаванием текстовых ссылок, поэтому авторы надеются, что и с этой стороны отсутствие QR-кодов не произведет неудобств.
The material in this book contains many links, which in the electronic version are of course clickable. However, if you have the pleasure of reading this book in "analog" format, all links are provided as footnotes on the corresponding page in plain text. Plain text was chosen over QR codes to allow links to be typed in manually (all links are in Unicode format, so do not worry about having to type something like "https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80"). Furthermore, the smart cameras on modern smartphones handle text link recognition very well, so the authors hope that the absence of QR codes will not cause inconvenience in that regard either.
Большая часть информации, касающаяся архитектуры RISC-V, взята напрямую из спецификации. Поскольку работа над спецификацией всё ещё идёт (хотя базовый набор инструкций rv32i уже заморожен и не изменится), чтобы ссылки на конкретные страницы спецификации имели смысл, они будут даваться на следующие версии двух документов:
The majority of the information concerning the RISC-V architecture is taken directly from the specification. Since work on the specification is still ongoing (although the base rv32i instruction set is now frozen and will not change), all references to specific pages of the specification will point to the following versions of two documents:
- "The RISC-V Instruction Set Manual Volume I: Unprivileged ISA" — [версия документа `20240411`](https://github.com/riscv/riscv-isa-manual/releases/download/20240411/unpriv-isa-asciidoc.pdf);
- "The RISC-V Instruction Set Manual Volume II: Privileged Architecture" — [версия документа `20240411`](https://github.com/riscv/riscv-isa-manual/releases/download/20240411/priv-isa-asciidoc.pdf).
- "The RISC-V Instruction Set Manual Volume I: Unprivileged ISA" — [document version `20240411`](https://github.com/riscv/riscv-isa-manual/releases/download/20240411/unpriv-isa-asciidoc.pdf);
- "The RISC-V Instruction Set Manual Volume II: Privileged Architecture" — [document version `20240411`](https://github.com/riscv/riscv-isa-manual/releases/download/20240411/priv-isa-asciidoc.pdf).
Курс лабораторных работ неразрывно связан с онлайн-репозиторием, расположенным по адресу: https://github.com/MPSU/APS. Этот репозиторий хранит методические материалы, верификационное окружение, готовые модули и файлы ограничений для отладочного стенда Nexys A7.
The lab course is inseparably linked to the online repository located at: https://github.com/MPSU/APS. This repository contains the course materials, verification environment, ready-made modules, and constraint files for the Nexys A7 development board.
По всем вопросам/замечаниям/предложениям вы можете связаться с авторами курса через разделы Issues и Discussions данного репозитория.
For any questions, comments, or suggestions, you can contact the course authors through the Issues and Discussions sections of this repository.
Данный курс непрерывно эволюционировал на протяжении нескольких лет до самого своего издания. Авторы допускают, что где-то в тексте могли остаться некоторые недочёты, которые после издания тиража уже "не вырубишь топором". Для того чтобы дать читателям возможность узнать об ошибках, найденных уже после издания, в корне репозитория находится специальный документ errata.
This course has evolved continuously over several years up until its publication. The authors acknowledge that some imperfections may remain in the text that can no longer be corrected after printing. To allow readers to learn about errors discovered after publication, a dedicated errata document is located at the root of the repository.
## Как пользоваться репозиторием
## How to Use the Repository
В корне репозитория находятся следующие элементы (символом / на конце обозначены папки):
The root of the repository contains the following items (folders are marked with a trailing '/'):
- <p style="color:LightGray;">.github/</p>
- <p style="color:LightGray;">.pic/</p>
@@ -124,11 +124,11 @@
- <p style="color:LightGray;">LICENSE</p>
- <p style="color:LightGray;">README.md</p>
Серым цветом обозначены элементы, которые не потребуются в ходе выполнения лабораторных работ.
Items shown in gray are not needed when completing the lab assignments.
В папках Introduction, Basic Verilog structures и Vivado Basics описаны разделы 1, 3 и 4 данной книги. Папка Other, среди прочего, содержит информацию, формирующую раздел 5 данной книги.
The Introduction, Basic Verilog structures, and Vivado Basics folders contain the material corresponding to Parts 1, 3, and 4 of this book, respectively. The Other folder contains, among other things, the material that forms Part 5 of this book.
Рассмотрим структуру папки Labs:
The structure of the Labs folder is as follows:
01. Adder/
02. Arithmetic-logic unit/
@@ -149,46 +149,46 @@
Made-up modules/
Readme.md
Здесь находятся методические материалы ко всем 16 лабораторным работам, разложенные по соответствующим им папкам.
Each of these folders contains the instructional materials for the corresponding lab assignment.
Практически в каждой такой папке находится файл формата _lab_xx.tb_xxx.sv_ — это файл с верификационным окружением для данной лабораторной работы. Такой файл необходимо добавлять в _Simulation Sources_ проекта (подробнее в разделе _Vivado Basics_).
In almost every such folder there is a file named _lab_xx.tb_xxx.sv_ — this is the verification environment (testbench) file for that lab assignment. This file must be added to the _Simulation Sources_ of the project (see the _Vivado Basics_ section for details).
Кроме того, в папке лабораторной работы могут находиться _xxx_pkg.sv_ и _xxx.mem_ файлы, содержащие соответственно параметры и данные, которыми необходимо проинициализировать память устройства. Такие файлы будет необходимо добавлять в _Design Sources_ проекта.
Additionally, a lab folder may contain _xxx_pkg.sv_ and _xxx.mem_ files, holding parameters and data, respectively, that are used to initialize the device memory. These files must be added to the _Design Sources_ of the project.
Ещё в большинстве папок будет находиться папка _board files_. Такая папка содержит модуль верхнего уровня (если требуется), описание способов взаимодействия с ним, а также файлы ограничений (_constraints_) под отладочную плату _Nexys A7_.
Most folders also contain a _board files_ subfolder. This subfolder contains the top-level module (if required), a description of how to interact with it, and constraint files for the _Nexys A7_ development board.
Помимо прочего, в папке `Made-up modules/` находятся готовые модули для некоторых лабораторных работ. В случае, если по какой-то причине вы не смогли выполнить лабораторную работу, вы можете продолжить работу над курсом, использовав готовый модуль из этой папки.
Furthermore, the `Made-up modules/` folder contains pre-built modules for certain lab assignments. If for any reason you were unable to complete a lab assignment, you can continue working through the course by using the corresponding ready-made module from this folder.
У репозитория есть зеркало (копия сайта), расположенное по адресу: https://gitlab.chips-miet.ru/MPSU/APS. Структура файлов в зеркале полностью совпадает с исходным репозиторием.
The repository has a mirror located at: https://gitlab.chips-miet.ru/MPSU/APS. The file structure of the mirror is identical to the original repository.
## История курса и разработчики
## Course History and Contributors
Дисциплины связанные с организацией вычислительной техники читаются в МИЭТ с самого его основания. Текущий курс эволюционировал из "Микропроцессорных средств и систем" (МПСиС), читаемый факультету МПиТК (Микроприборов и технической кибернетики) сначала [Савченко Юрием Васильевичем](https://miet.ru/person/10551), а после [Переверзевым Алексеем Леонидовичем](https://miet.ru/person/49309). С 2014 по 2022 годы дисциплина проводилась и значительно модернизировалась [Поповым Михаилом Геннадиевичем](https://miet.ru/person/50480) совместно с коллективом сотрудников и студентов Института МПСУ. С 2022 года группам ИБ, ИКТ, КТ и РТ курс читает [Силантьев Александр Михайлович](https://miet.ru/person/64030), а группам ИВТ, ПИН, ПМ [Орлов Александр Николаевич](https://miet.ru/person/53686), разработка методических материалов перешла в руки [Солодовникова Андрея Павловича](https://miet.ru/person/141139).
Disciplines related to computer organization have been taught at MIET since its founding. The current course evolved from "Microprocessor Means and Systems" (MMS), taught to the MPiTK (Microdevices and Technical Cybernetics) faculty — first by [Yuri Vasilyevich Savchenko](https://miet.ru/person/10551), and later by [Alexei Leonidovich Pereverzev](https://miet.ru/person/49309). From 2014 to 2022, the course was conducted and significantly modernized by [Mikhail Gennadyevich Popov](https://miet.ru/person/50480) together with a team of staff and students from the MPSU Institute. Since 2022, the course for the IB, IKT, KT, and RT student groups has been taught by [Alexander Mikhailovich Silantyev](https://miet.ru/person/64030), while the IVT, PIN, and PM groups are taught by [Alexander Nikolaevich Orlov](https://miet.ru/person/53686); the development of course materials has been taken over by [Andrei Pavlovich Solodovnikov](https://miet.ru/person/141139).
В 2019-2023 годах была значительно переработана, осовременена и дополнена теоретическая часть курса. Тогда же разработаны и полностью обновлены лабораторные работы с переходом на использование архитектуры RISC-V, введены новые способы оценки полученных знаний. Все материалы курса включая [видеозаписи лекций](https://www.youtube.com/c/АПСПопов), были выложены в свободный доступ.
Between 2019 and 2023 the theoretical part of the course was substantially revised, modernized, and expanded. During the same period, the lab assignments were redesigned and fully updated to use the RISC-V architecture, and new methods for assessing student knowledge were introduced. All course materials, including [lecture recordings](https://www.youtube.com/c/АПСПопов), were made publicly available.
Основное влияние на структуру и содержание курса в современном виде оказали: оригинальные лекции МПСиС для МПиТК, курс Вычислительных структур 6.004, читаемый в MIT, Харрис и Харрис "Цифровая схемотехника и архитектура компьютера", Орлов и Цилькер "Организация ЭВМ и систем".
The primary influences on the structure and content of the course in its current form are: the original MMS lectures for MPiTK, the 6.004 Computation Structures course taught at MIT, Harris & Harris "Digital Design and Computer Architecture," and Orlov & Tsil'ker "Computer Organization and Systems."
С подготовкой курса и репозитория помогали студенты и сотрудники института МПСУ (бывшие и нынешние): <!--- В алфавитном порядке -->
The following current and former students and staff of the MPSU Institute helped prepare the course and repository: <!--- In alphabetical order -->
| Фамилия, Имя, Отчество | Вклад в курс |
| Full Name | Contribution to the course |
|-------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Барков Евгений Сергеевич | Профессиональные консультации по деталям языка SystemVerilog, спецификации RISC-V и RTL-разработки, тематике синтеза и констрейнов. |
| Булавин Никита Сергеевич | Отработка материалов, подготовка тестбенчей и модулей верхнего уровня для плат Nexys A7 для лабораторных работ. |
| Козин Алексей Александрович | Отработка материалов, подготовка обфусцированных модулей для лабораторных работ. |
| [Кулешов Владислав Константинович](https://t.me/SaintLiver) | Вычитка и исправление ошибок в методических материалах, сбор обратной связи от студентов. |
| Орлов Александр Николаевич | Профессиональные консультации по деталям языка SystemVerilog, спецификации RISC-V и RTL-разработки, примерам программ иллюстрирующим особенности архитектуры. |
| Примаков Евгений Владимирович | Профессиональные консультации по деталям языка SystemVerilog, спецификации RISC-V и RTL-разработки и вопросам микроархитектуры. |
| [Протасова Екатерина Андреевна](https://t.me/Katkus_s) | Подготовка индивидуальных заданий и допусков к лабораторным работам, вычитка и отработка материалов, а также сбор обратной связи от студентов. |
| Русановский Богдан Витальевич | Перенос лабораторной работы по прерываниям из PDF в Markdown, подготовка иллюстраций. |
| Рыжкова Дарья Васильевна | Подготовка тестбенчей для лабораторных работ. |
| Силантьев Александр Михайлович | Профессиональные консультации по деталям языка SystemVerilog, спецификации RISC-V и RTL-разработки, вопросам микроархитектуры, тематике синтеза и констрейнов, особенностям компиляции и профилирования. |
| Стрелков Даниил Владимирович | Отработка материалов, подготовка тестбенчей для лабораторных работ и иллюстраций структуры курса. |
| [Терновой Николай Эдуардович](https://t.me/cpu_design) | Профессиональные консультации по деталям языка SystemVerilog, спецификации RISC-V и RTL-разработки, вычитка материалов, сбор обратной связи от студентов. |
| Харламов Александр Александрович | Отработка материалов, проектирование вспомогательных модулей для лабораторных работ. |
| [Хисамов Василь Тагирович](https://t.me/PascalVT) | Вычитка материалов, сбор обратной связи от студентов. |
| Чусов Сергей Андреевич | Вычитка материалов, сбор обратной связи от студентов. |
| Barkov Evgeny Sergeyevich | Professional consultations on SystemVerilog language details, the RISC-V specification, RTL development, synthesis, and constraints. |
| Bulavin Nikita Sergeyevich | Refinement of materials, preparation of testbenches and top-level modules for Nexys A7 boards for the lab assignments. |
| Kozin Alexei Alexandrovich | Refinement of materials, preparation of obfuscated modules for the lab assignments. |
| [Kuleshov Vladislav Konstantinovich](https://t.me/SaintLiver) | Proofreading and correction of errors in the course materials, collection of student feedback. |
| Orlov Alexander Nikolaevich | Professional consultations on SystemVerilog language details, the RISC-V specification, RTL development, and example programs illustrating architectural features. |
| Primakov Evgeny Vladimirovich | Professional consultations on SystemVerilog language details, the RISC-V specification, RTL development, and microarchitecture topics. |
| [Protasova Ekaterina Andreyevna](https://t.me/Katkus_s) | Preparation of individual assignments and pre-lab admission tasks, proofreading and refinement of materials, collection of student feedback. |
| Rusanovsky Bogdan Vitalyevich | Migration of the interrupt lab assignment from PDF to Markdown, preparation of illustrations. |
| Ryzhkova Darya Vasilyevna | Preparation of testbenches for the lab assignments. |
| Silantyev Alexander Mikhailovich | Professional consultations on SystemVerilog language details, the RISC-V specification, RTL development, microarchitecture topics, synthesis and constraints, and compilation and profiling specifics. |
| Strelkov Daniil Vladimirovich | Refinement of materials, preparation of testbenches for the lab assignments, and preparation of course structure illustrations. |
| [Ternovoy Nikolai Eduardovich](https://t.me/cpu_design) | Professional consultations on SystemVerilog language details, the RISC-V specification, RTL development, proofreading of materials, collection of student feedback. |
| Kharlamov Alexander Alexandrovich | Refinement of materials, design of auxiliary modules for the lab assignments. |
| [Khisamov Vasil Tagirovich](https://t.me/PascalVT) | Proofreading of materials, collection of student feedback. |
| Chusov Sergei Andreyevich | Proofreading of materials, collection of student feedback. |
Кроме того, часть иллюстраций была нарисована Краснюк Екатериной Александровной.
In addition, some of the illustrations were drawn by Ekaterina Alexandrovna Krasnyuk.
На этом вводное слово окончено, желаю вам успехов в этом увлекательнейшем путешествии!
With that, the introductory remarks are complete — I wish you success on this most fascinating journey!