Initial commit

This commit is contained in:
Andrei Solodovnikov
2023-09-07 17:04:37 +03:00
commit f4c0960704
334 changed files with 36105 additions and 0 deletions

140
Labs/README.md Normal file
View File

@@ -0,0 +1,140 @@
# Курс лабораторных работ
## Содержание
- [Курс лабораторных работ](#курс-лабораторных-работ)
- [Содержание](#содержание)
- [Полезное](#полезное)
- [Порядок выполнения лабораторных работ для групп](#порядок-выполнения-лабораторных-работ-для-групп)
- [ИБ, ИКТ, КТ, РТ](#иб-икт-кт-рт)
- [ПИН, ПМ](#пин-пм)
- [ИВТ](#ивт)
- [Обзор лабораторных работ](#обзор-лабораторных-работ)
- [1. Сумматор. Verilog HDL (Adder)](#1-сумматор-verilog-hdl-adder)
- [2. Арифметико-логическое устройство (ALU)](#2-арифметико-логическое-устройство-alu)
- [3. Регистровый файл и память (RF)](#3-регистровый-файл-и-память-rf)
- [4. Простейшее программируемое устройство (PPD)](#4-простейшее-программируемое-устройство-ppd)
- [5. Основной дешифратор команд (MD)](#5-основной-дешифратор-команд-md)
- [6. Тракт данных (DP)](#6-тракт-данных-dp)
- [7. Блог загрузки и сохранения данных (LSU)](#7-блог-загрузки-и-сохранения-данных-lsu)
- [8. Подсистема прерывания (IC)](#8-подсистема-прерывания-ic)
- [9. Периферийные устройства (PU)](#9-периферийные-устройства-pu)
- [10. Программирование на языке высокого уровня](#10-программирование-на-языке-высокого-уровня)
## Полезное
- [Как установить Vivado](../Vivado%20Basics/Install%20Vivado.md)
- [Создание базового проекта с прошивкой ПЛИС в Vivado](../Vivado%20Basics/Vivado%20trainer.md)
- [Что такое язык описания аппаратуры HDL](../Introduction/What%20is%20HDL.md)
- [Как работает ПЛИС](../Introduction/How%20FPGA%20works.md)
- [Синтакс языка Verilog](../Basic%20Verilog%20structures/Verilog%20syntax.md)
- [Базовые конструкции Verilog](../Basic%20Verilog%20structures/)
- [Тестовое окружение](../Basic%20Verilog%20structures/Testbench.md)
## Порядок выполнения лабораторных работ для групп
### ИБ, ИКТ, КТ, РТ
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. Тракт данных ([06. Datapath](06.%20Datapath))
7. Периферийные устройства ([09. Peripheral units](09.%20Peripheral%20units))
8. Программирование ([10. Programming](10.%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. Модуль загрузки и сохранения (07. Load-store unit)
6. Контроллер прерываний ()
7. Периферийные устройства ([09. Peripheral units](09.%20Peripheral%20units))
8. Программирование ([10. Programming](10.%20Programming))
## Обзор лабораторных работ
![../.pic/Labs/labs.png](../.pic/Labs/labs.png)
Курс *Архитектур процессорных систем* включает в себя цикл из 10 лабораторных работ, в течение которых используя язык описания аппаратуры **Verilog HDL** на основе **FPGA** (ПЛИС, программируемая логическая интегральная схема), с нуля, последовательно, создается система, под управлением процессора с архитектурой **RISC-V**, управляющего периферийными устройствами и программируемого на языке высокого уровня **C++**.
Создаваемая система на ПЛИС состоит из: процессора, памяти, контроллера прерываний и контроллеров периферийных устройств.
![../.pic/Labs/ldone.png](../.pic/Labs/ldone.png)
Выполнение лабораторных работ это последовательный процесс в результате которого будет освоен ряд различных инструментов и средств. В общих словах это:
**Verilog HDL** - язык описания аппаратуры, благодаря которому схемы не рисуются, а описываются с помощью текста (кода).
**Testbench** - тестовые окружения, которые представляют собой несинтезируемые (то есть не существующие в реальном физическом мире) блоки, созданные на языке Verilog HDL для автоматического тестирования разрабатываемых устройств и проверки их корректной работоспособности.
**FPGA** - программируемая логическая интегральная схема (ПЛИС), изменяя внутреннюю конфигурацию которой можно создать любые цифровые устройства (в рамках предоставляемых ресурсов).
**Vivado** - система автоматизированного проектирования, которая превращает Verilog-код в конфигурацию и прошивает ей ПЛИС на отладочной плате.
**Архитектура RISC-V** - открытая и свободная система команд и процессорная архитектура на основе концепции RISC для микропроцессоров и микроконтроллеров.
**Язык ассемблера RISC-V** - список основных команд и особенности их использования и написания программ.
**Ассемблер RISC-V** - программа, которая превращает код, написанный на языке ассемблера RISC-V в машинные инструкции для процессора с архитектурой RISC-V.
Далее приводится краткое описание и цель каждой отдельной лабораторной работы.
## 1. Сумматор. Verilog HDL (Adder)
![../.pic/Labs/l1.png](../.pic/Labs/l1.png)
На первой лабораторной работе изучаются базовые конструкции языка описания аппаратуры Verilog HDL, с помощью которого разрабатывается цифровой сумматор из примитивных логических вентилей, который, в последствии, конфигурируется в ПЛИС и его работа проверяется на отладочном стенде.
## 2. Арифметико-логическое устройство (ALU)
![../.pic/Labs/l2.png](../.pic/Labs/l2.png)
На второй лабораторной изучаются новые конструкции языка Verilog HDL, на основе которых разрабатывается блок арифметико-логического устройства (АЛУ). АЛУ - это устройство, на входы которого подаются операнды, над которыми нужно выполнить некоторую операцию (сложение, вычитание и тому подобное) и код операции, которую нужно выполнить, а на выходе появляется результат этой операции. Проще говоря АЛУ - это "калькулятор" процессора.
Для проверки правильной работоспособности АЛУ в конце лабораторной работы, на языке Verilog HDL, пишется testbench (тестовое окружение), которое автоматически проверяет корректность его реализации.
## 3. Регистровый файл и память (RF)
![../.pic/Labs/l3.png](../.pic/Labs/l3.png)
На третьей лабораторной разрабатываются элементы памяти для будущего процессора: память команд, память данных и регистровый файл. В памяти команд будет храниться программа, которую будет выполнять процессор. В памяти данных хранятся данные, которые будут обрабатываться процессором. Регистровый файл - это маленькая память, тоже с данными, которые могут быть поданы непосредственно на АЛУ. Особенность RISC-архитектур в том, что данные перед обработкой необходимо перенести из памяти данных в регистровый файл, только после этого к ним можно применять различные операции.
## 4. Простейшее программируемое устройство (PPD)
![../.pic/Labs/l4.png](../.pic/Labs/l4.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. Блог загрузки и сохранения данных (LSU)
![../.pic/Labs/l7.png](../.pic/Labs/l7.png)
В современных компьютерах память является отдельным от процессора устройством. В пятой работе память программ и память данных выносится за пределы процессора, объединяются в одну общую память и подключается через общую шину. В процессоре для этого появляется блок Load/Store Unit.
## 8. Подсистема прерывания (IC)
![../.pic/Labs/l8.png](../.pic/Labs/l8.png)
Одной из основных функций процессоров является возможность реагировать на внешние события (дернуть мышку, нажать кнопку и т.п.), автоматически запуская, при их возникновении, соответствующие программы. В шестой работе создается и подключается подсистема прерывания, к которой относятся контроллер прерываний с циклическим опросом и блок регистров статуса и управления.
## 9. Периферийные устройства (PU)
![../.pic/Labs/l9.png](../.pic/Labs/l9.png)
На седьмой работе создаются и подключаются к общей шине и подсистеме прерывания контроллеры периферийных устройств, такие как контроллер клавиатуры и VGA-контроллер.
## 10. Программирование на языке высокого уровня
![../.pic/Labs/l10.png](../.pic/Labs/l10.png)
В рамках восьмой работы настраивается компилятор GCC для RISC-V и для разработанной системы пишется программное обеспечение на языке программирования C++.