Files
APS/Labs/README.md
Andrei Solodovnikov 8b870423c9 Update README.md
2023-11-07 15:05:45 +03:00

171 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Курс лабораторных работ
## Содержание
- [Курс лабораторных работ](#курс-лабораторных-работ)
- [Содержание](#содержание)
- [Полезное](#полезное)
- [Порядок выполнения лабораторных работ для групп](#порядок-выполнения-лабораторных-работ-для-групп)
- [ИБ, ИКТ, КТ, РТ](#иб-икт-кт-рт)
- [ПИН, ПМ](#пин-пм)
- [ИВТ](#ивт)
- [Обзор лабораторных работ](#обзор-лабораторных-работ)
- [1. Сумматор. SystemVerilog (Adder)](#1-сумматор-systemverilog-adder)
- [2. Арифметико-логическое устройство (ALU)](#2-арифметико-логическое-устройство-alu)
- [3. Регистровый файл и внешняя память (RF)](#3-регистровый-файл-и-внешняя-память-rf)
- [4. Простейшее программируемое устройство (PPD)](#4-простейшее-программируемое-устройство-ppd)
- [5. Основной дешифратор команд (MD)](#5-основной-дешифратор-команд-md)
- [6. Тракт данных (DP)](#6-тракт-данных-dp)
- [7. Внешняя память](#7-внешняя-память)
- [8. Блог загрузки и сохранения данных (LSU)](#8-блог-загрузки-и-сохранения-данных-lsu)
- [9 Интеграция LSU](#9-интеграция-lsu)
- [10. Подсистема прерывания (IC)](#10-подсистема-прерывания-ic)
- [11. Интеграция подсистемы прерывания](#11-интеграция-подсистемы-прерывания)
- [12. Периферийные устройства (PU)](#12-периферийные-устройства-pu)
- [13. Программирование на языке высокого уровня](#13-программирование-на-языке-высокого-уровня)
## Полезное
- [Студенческий сервер](../Other/Students%20server.md)
- [Создание базового проекта с прошивкой ПЛИС в Vivado](../Vivado%20Basics/Vivado%20trainer.md)
- [Базовые конструкции Verilog](../Basic%20Verilog%20structures/)
- [Список типичных ошибок в Vivado и SystemVerilog](../Other/FAQ.md)
- [Тестовое окружение](../Basic%20Verilog%20structures/Testbench.md)
- [Готовые модули](Made-up%20modules)
## Порядок выполнения лабораторных работ для групп
### ИБ, ИКТ, КТ, РТ
1. Сумматор ([01. Adder](01.%20Adder))
2. АЛУ ([02. Arithmetic-logic unit](02.%20Arithmetic-logic%20unit))
3. Регистровый файл и внешняя память ([03. Register file and memory](03.%20Register%20file%20and%20memory))
4. Простейшее программируемое устройство ([04. Primitive programmable device](04.%20Primitive%20programmable%20device))
### ПИН, ПМ
1. Сумматор ([01. Adder](01.%20Adder))
2. АЛУ ([02. Arithmetic-logic unit](02.%20Arithmetic-logic%20unit))
3. Регистровый файл и внешняя память ([03. Register file and memory](03.%20Register%20file%20and%20memory))
4. Простейшее программируемое устройство ([04. Primitive programmable device](04.%20Primitive%20programmable%20device))
5. Основной дешифратор ([05. Main decoder](05.%20Main%20decoder))
6.
1. Тракт данных ([06. Datapath](06.%20Datapath))
2. Интеграция блока загрузки и сохранения ([09. LSU Integration](09.%20LSU%20Integration))
3. Интеграция подсистемы прерываний ([11. Interrupt Integration](11.%20Interrupt%20integration))
7. Периферийные устройства ([12. Peripheral units](12.%20Peripheral%20units))
8. Программирование ([13. Programming](13.%20Programming))
### ИВТ
1. АЛУ ([02. Arithmetic-logic unit](02.%20Arithmetic-logic%20unit))
2.
1. Память ([03. Register file and memory](03.%20Register%20file%20and%20memory)),
2. Простейшее программируемое устройство ([04. Primitive programmable device](04.%20Primitive%20programmable%20device))
3. Основной дешифратор ([05. Main decoder](05.%20Main%20decoder))
4. Тракт данных ([06. Datapath](06.%20Datapath))
5.
1. Модуль загрузки и сохранения ([08. Load-store unit](08.%20Load-store%20unit))
2. Интеграция блока загрузки и сохранения ([09. LSU Integration](09.%20LSU%20Integration))
6.
1. Контроллер прерываний ([10. Interrupt subsystem](10.%20Interrupt%20subsystem))
2. Интеграция подсистемы прерываний ([11. Interrupt Integration](11.%20Interrupt%20integration))
7. Периферийные устройства ([12. Peripheral units](12.%20Peripheral%20units))
8. Программирование ([13. Programming](13.%20Programming))
## Обзор лабораторных работ
![../.pic/Labs/labs.png](../.pic/Labs/labs.png)
Курс *Архитектур процессорных систем* включает в себя цикл из 13 лабораторных работ (10 основных + 3 вспомогательных), в течение которых используя язык описания аппаратуры **SystemVerilog** на основе **FPGA** (ПЛИС, программируемая логическая интегральная схема), с нуля, последовательно, создается система, под управлением процессора с архитектурой **RISC-V**, управляющего периферийными устройствами и программируемого на языке высокого уровня **C++**.
Создаваемая система на ПЛИС состоит из: процессора, памяти, контроллера прерываний и контроллеров периферийных устройств.
![../.pic/Labs/ldone.png](../.pic/Labs/ldone.png)
Выполнение лабораторных работ это последовательный процесс в результате которого будет освоен ряд различных инструментов и средств. В общих словах это:
**SystemVerilog** - язык описания аппаратуры, благодаря которому схемы не рисуются, а описываются с помощью текста (кода).
**Testbench** - тестовые окружения, которые представляют собой несинтезируемые (то есть не существующие в реальном физическом мире) блоки, созданные на языке SystemVerilog для автоматического тестирования разрабатываемых устройств и проверки их корректной работоспособности.
**FPGA** - программируемая логическая интегральная схема (ПЛИС), изменяя внутреннюю конфигурацию которой можно создать любые цифровые устройства (в рамках предоставляемых ресурсов).
**Vivado** - система автоматизированного проектирования, которая превращает SystemVerilog-код в конфигурацию и прошивает ей ПЛИС на отладочной плате.
**Архитектура RISC-V** - открытая и свободная система команд и процессорная архитектура на основе концепции RISC для микропроцессоров и микроконтроллеров.
**Язык ассемблера RISC-V** - список основных команд и особенности их использования и написания программ.
**Ассемблер RISC-V** - программа, которая превращает код, написанный на языке ассемблера RISC-V в машинные инструкции для процессора с архитектурой RISC-V.
Далее приводится краткое описание и цель каждой отдельной лабораторной работы.
## 1. Сумматор. SystemVerilog (Adder)
![../.pic/Labs/l1.png](../.pic/Labs/l1.png)
На первой лабораторной работе изучаются базовые конструкции языка описания аппаратуры SystemVerilog, с помощью которого разрабатывается цифровой сумматор из примитивных логических вентилей, который, в последствии, конфигурируется в ПЛИС и его работа проверяется на отладочном стенде.
## 2. Арифметико-логическое устройство (ALU)
![../.pic/Labs/l2.png](../.pic/Labs/l2.png)
На второй лабораторной изучаются новые конструкции языка SystemVerilog, на основе которых разрабатывается блок арифметико-логического устройства (АЛУ). АЛУ — это устройство, на входы которого подаются операнды, над которыми нужно выполнить некоторую операцию (сложение, вычитание и тому подобное) и код операции, которую нужно выполнить, а на выходе появляется результат этой операции. Проще говоря АЛУ - это "калькулятор" процессора.
## 3. Регистровый файл и внешняя память (RF)
![../.pic/Labs/l3.png](../.pic/Labs/l3.png)
На третьей лабораторной разрабатываются элементы памяти для будущего процессора: память команд, память данных и регистровый файл. В памяти команд будет храниться программа, которую будет выполнять процессор. В памяти данных хранятся данные, которые будут обрабатываться процессором. Регистровый файл — это маленькая память, тоже с данными, которые могут быть поданы непосредственно на АЛУ. Особенность RISC-архитектур в том, что данные перед обработкой необходимо перенести из памяти данных в регистровый файл, только после этого к ним можно применять различные операции.
## 4. Простейшее программируемое устройство (PPD)
![../.pic/Labs/lab_04_cybercobra/ppd_6.drawio.png](../.pic/Labs/lab_04_cybercobra/ppd_6.drawio.png)
Эта работа небольшое отступление от реализации процессора с архитектурой RISC-V и нужна для более глубокого понимания принципов работы и организации программируемых устройств. В рамках четвертой лабораторной работы из реализованных блоков собирается примитивное программируемое устройство, для которого пишется программа в машинных кодах.
## 5. Основной дешифратор команд (MD)
![../.pic/Labs/l5.png](../.pic/Labs/l5.png)
Пятая лабораторная посвящена разработке устройства управления основному дешифратору команд. Функция основного дешифратора — получать на вход коды выполняемых операций и преобразовывать их в управляющие сигналы для всех блоков процессора (АЛУ, память, регистровый файл, мультиплексоры). Работа требует внимательности в реализации, а ее результат проверяется заранее подготовленными автоматическими тестами.
## 6. Тракт данных (DP)
![../.pic/Labs/l6.png](../.pic/Labs/l6.png)
Разработанные блоки объединяются, образуя тракт данных, управляемый основным дешифратором команд. Результатом шестой лабораторной работы является однотактный процессор, с архитектурой RISC-V, поддерживающий стандартный набор целочисленных инструкций RV32I. В качестве проверки на процессоре запускаются программы, заранее написанные на языке ассемблера RISC-V. Сравнивается результат полученный на симуляторе и на разработанном процессоре.
## 7. Внешняя память
Недостатком реализации процессора из предыдущей лабораторной работы была его неспособность выполнять операции `LB`, `LBU`, `SB`, `LH`, `LHU`, `SH`. Отчасти это связано с ограничением реализованной ранее памяти (в этой памяти не было возможности обновить отдельный байт в ячейке памяти).
Данная вспомогательная лабораторная работа позволяет реализовать память без этого ограничения.
## 8. Блог загрузки и сохранения данных (LSU)
![../.pic/Labs/l7.png](../.pic/Labs/l7.png)
Для корректного исполнения инструкций `LB`, `LBU`, `SB`, `LH`, `LHU`, `SH` мало использовать память с побайтовой записью. Необходимо также уметь управлять этой памятью, определенным образом подготавливать данные как для записи в память данный, так и для записи в регистровый файл, а также следить за тем, чтобы за время работы с памятью, программа процессора не начала исполняться дальше. Все эти задачи возлагаются на специальный модуль, который называется **Блок загрузки и сохранения** (**Load and Store Unit**, **LSU**)
## 9 Интеграция LSU
Вспомогательная лабораторная работа по интеграции реализованного ранее блока загрузки и сохранения, а также новой памяти данных в модуль `riscv_unit`.
## 10. Подсистема прерывания (IC)
![../.pic/Labs/l8.png](../.pic/Labs/l8.png)
Одной из основных функций процессоров является возможность реагировать на внешние события (дернуть мышку, нажать кнопку и т.п.), автоматически запуская, при их возникновении, соответствующие программы. В данной лабораторной создается и подсистема прерывания, к которой относятся контроллер прерываний с циклическим опросом и блок регистров статуса и управления.
## 11. Интеграция подсистемы прерывания
Вспомогательная лабораторная работа по интеграции реализованной ранее подсистемы прерывания.
## 12. Периферийные устройства (PU)
![../.pic/Labs/l9.png](../.pic/Labs/l9.png)
В данной лабораторной создаются и подключаются к общей шине и подсистеме прерывания контроллеры периферийных устройств: переключатели, светодиоды, клавиатура, семисегментные дисплеи а так же контроллер uart.
## 13. Программирование на языке высокого уровня
![../.pic/Labs/l10.png](../.pic/Labs/l10.png)
В рамках данной лабораторной настраивается компилятор GCC для RISC-V и для разработанной системы пишется программное обеспечение на языке программирования C++.