diff --git a/Labs/README.md b/Labs/README.md index f5df57c..deb5297 100644 --- a/Labs/README.md +++ b/Labs/README.md @@ -10,19 +10,19 @@ - [ПИН, ПМ](#пин-пм) - [ИВТ](#ивт) - [Обзор лабораторных работ](#обзор-лабораторных-работ) - - [1. Сумматор. SystemVerilog (Adder)](#1-сумматор-systemverilog-adder) - - [2. Арифметико-логическое устройство (ALU)](#2-арифметико-логическое-устройство-alu) - - [3. Регистровый файл и внешняя память (RF)](#3-регистровый-файл-и-внешняя-память-rf) - - [4. Простейшее программируемое устройство (PPD)](#4-простейшее-программируемое-устройство-ppd) - - [5. Основной дешифратор команд (MD)](#5-основной-дешифратор-команд-md) + - [1. Сумматор. SystemVerilog](#1-сумматор-systemverilog) + - [2. Арифметико-логическое устройство](#2-арифметико-логическое-устройство) + - [3. Регистровый файл и внешняя память](#3-регистровый-файл-и-внешняя-память) + - [4. Простейшее программируемое устройство](#4-простейшее-программируемое-устройство) + - [5. Декодер инструкций](#5-декодер-инструкций) - [6. Основная память](#6-основная-память) - - [7. Тракт данных (DP)](#7-тракт-данных-dp) - - [8. Блог загрузки и сохранения данных (LSU)](#8-блог-загрузки-и-сохранения-данных-lsu) - - [9 Интеграция LSU](#9-интеграция-lsu) - - [10. Подсистема прерывания (IC)](#10-подсистема-прерывания-ic) + - [7. Тракт данных](#7-тракт-данных) + - [8. Блок загрузки и сохранения данных](#8-блок-загрузки-и-сохранения-данных) + - [9 Интеграция блока загрузки и сохранения](#9-интеграция-блока-загрузки-и-сохранения) + - [10. Подсистема прерывания](#10-подсистема-прерывания) - [11. Интеграция подсистемы прерывания](#11-интеграция-подсистемы-прерывания) - [12. Увеличение количества источников прерываний с помощью дейзи-цепочки](#12-увеличение-количества-источников-прерываний-с-помощью-дейзи-цепочки) - - [13. Периферийные устройства (PU)](#13-периферийные-устройства-pu) + - [13. Периферийные устройства](#13-периферийные-устройства) - [14. Программирование на языке высокого уровня](#14-программирование-на-языке-высокого-уровня) - [15. Программатор](#15-программатор) - [16. Оценка производительности](#16-оценка-производительности) @@ -106,27 +106,27 @@ https://github.com/MPSU/APS/assets/17159587/4daac01f-dc9a-4ec8-8d3f-c5dc1ef97119 Далее приводится краткое описание и цель каждой отдельной лабораторной работы. -## 1. Сумматор. SystemVerilog (Adder) +## 1. Сумматор. SystemVerilog ![../.pic/Labs/lab_01_adder.drawio.svg](../.pic/Labs/lab_01_adder.drawio.svg) На первой лабораторной работе изучаются базовые конструкции языка описания аппаратуры SystemVerilog, с помощью которого разрабатывается цифровой сумматор из примитивных логических вентилей, который, в последствии, конфигурируется в ПЛИС и его работа проверяется на отладочном стенде. -## 2. Арифметико-логическое устройство (ALU) +## 2. Арифметико-логическое устройство ![../.pic/Labs/lab_02_alu.drawio.svg](../.pic/Labs/lab_02_alu.drawio.svg) На второй лабораторной изучаются новые конструкции языка SystemVerilog, на основе которых разрабатывается блок арифметико-логического устройства (АЛУ). АЛУ — это устройство, на входы которого подаются операнды, над которыми нужно выполнить некоторую операцию (сложение, вычитание и тому подобное) и код операции, которую нужно выполнить, а на выходе появляется результат этой операции. Проще говоря АЛУ - это "калькулятор" процессора. -## 3. Регистровый файл и внешняя память (RF) +## 3. Регистровый файл и внешняя память ![../.pic/Labs/lab_03_rf.drawio.svg](../.pic/Labs/lab_03_rf.drawio.svg) На третьей лабораторной разрабатываются элементы памяти для будущего процессора: память команд, память данных и регистровый файл. В памяти команд будет храниться программа, которую будет выполнять процессор. В памяти данных хранятся данные, которые будут обрабатываться процессором. Регистровый файл — это маленькая память, тоже с данными, которые могут быть поданы непосредственно на АЛУ. Особенность RISC-архитектур в том, что данные перед обработкой необходимо перенести из памяти данных в регистровый файл, только после этого к ним можно применять различные операции. -## 4. Простейшее программируемое устройство (PPD) +## 4. Простейшее программируемое устройство ![../.pic/Labs/lab_04_cybercobra/ppd_5.drawio.svg](../.pic/Labs/lab_04_cybercobra/ppd_5.drawio.svg) Эта работа – небольшое отступление от реализации процессора с архитектурой RISC-V и нужна для более глубокого понимания принципов работы и организации программируемых устройств. В рамках четвертой лабораторной работы из реализованных блоков собирается примитивное программируемое устройство, для которого пишется программа в машинных кодах. -## 5. Основной дешифратор команд (MD) +## 5. Декодер инструкций ![../.pic/Labs/lab_05_md.drawio.svg](../.pic/Labs/lab_05_md.drawio.svg) Пятая лабораторная посвящена разработке устройства управления – основному дешифратору команд. Функция основного дешифратора — получать на вход коды выполняемых операций и преобразовывать их в управляющие сигналы для всех блоков процессора (АЛУ, память, регистровый файл, мультиплексоры). Работа требует внимательности в реализации, а ее результат проверяется заранее подготовленными автоматическими тестами. @@ -137,24 +137,24 @@ https://github.com/MPSU/APS/assets/17159587/4daac01f-dc9a-4ec8-8d3f-c5dc1ef97119 Данная вспомогательная лабораторная работа позволяет реализовать память без этого ограничения. -## 7. Тракт данных (DP) +## 7. Тракт данных ![../.pic/Labs/lab_07_datapath.drawio.svg](../.pic/Labs/lab_07_datapath.drawio.svg) Разработанные блоки объединяются, образуя тракт данных, управляемый основным дешифратором команд. Результатом шестой лабораторной работы является однотактный процессор, с архитектурой RISC-V, поддерживающий стандартный набор целочисленных инструкций RV32I. В качестве проверки на процессоре запускаются программы, заранее написанные на языке ассемблера RISC-V. Сравнивается результат полученный на симуляторе и на разработанном процессоре. -## 8. Блог загрузки и сохранения данных (LSU) +## 8. Блок загрузки и сохранения данных ![../.pic/Labs/lab_08_lsu.drawio.svg](../.pic/Labs/lab_08_lsu.drawio.svg) Для корректного исполнения инструкций `LB`, `LBU`, `SB`, `LH`, `LHU`, `SH` мало использовать память с побайтовой записью. Необходимо также уметь управлять этой памятью, определенным образом подготавливать данные как для записи в память данный, так и для записи в регистровый файл, а также следить за тем, чтобы за время работы с памятью, программа процессора не начала исполняться дальше. Все эти задачи возлагаются на специальный модуль, который называется **Блок загрузки и сохранения** (**Load and Store Unit**, **LSU**) -## 9 Интеграция LSU +## 9 Интеграция блока загрузки и сохранения Вспомогательная лабораторная работа по интеграции реализованного ранее блока загрузки и сохранения, а также новой памяти данных в модуль `riscv_unit`. ![../.pic/Labs/lab_09_lsu_integration.drawio.svg](../.pic/Labs/lab_09_lsu_integration.drawio.svg) -## 10. Подсистема прерывания (IC) +## 10. Подсистема прерывания ![../.pic/Labs/lab_10_irq.drawio.svg](../.pic/Labs/lab_10_irq.drawio.svg) @@ -172,7 +172,7 @@ https://github.com/MPSU/APS/assets/17159587/4daac01f-dc9a-4ec8-8d3f-c5dc1ef97119 ![../.pic/Labs/lab_12_daisy_chain/fig_02.drawio.svg](../.pic/Labs/lab_12_daisy_chain/fig_02.drawio.svg) -## 13. Периферийные устройства (PU) +## 13. Периферийные устройства ![../.pic/Labs/lab_13_peripheral_units.drawio.svg](../.pic/Labs/lab_13_peripheral_units.drawio.svg)