Skip to content

Latest commit

 

History

History
 
 

Labs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Курс лабораторных работ

Содержание

Полезное

Порядок выполнения лабораторных работ для групп

ИБ, ИКТ, КТ, РТ

  1. Сумматор (01. Adder)
  2. АЛУ (02. Arithmetic-logic unit)
  3. Регистровый файл и внешняя память (03. Register file and memory)
  4. Простейшее программируемое устройство (04. Primitive programmable device)

ПИН, ПМ

  1. Сумматор (01. Adder)
  2. АЛУ (02. Arithmetic-logic unit)
  3. Регистровый файл и внешняя память (03. Register file and memory)
  4. Простейшее программируемое устройство (04. Primitive programmable device)
  5. Основной дешифратор (05. Main decoder)
    1. Тракт данных (06. Datapath)
    2. Интеграция блока загрузки и сохранения (09. LSU Integration)
    3. Интеграция подсистемы прерываний (11. Interrupt Integration)
  6. Периферийные устройства (13. Peripheral units)
  7. Программирование (14. Programming)

ИВТ

  1. АЛУ (02. Arithmetic-logic unit)
    1. Память (03. Register file and memory),
    2. Простейшее программируемое устройство (04. Primitive programmable device)
  2. Основной дешифратор (05. Main decoder)
  3. Тракт данных (06. Datapath)
    1. Модуль загрузки и сохранения (08. Load-store unit)
    2. Интеграция блока загрузки и сохранения (09. LSU Integration)
    1. Контроллер прерываний (10. Interrupt subsystem)
    2. Интеграция подсистемы прерываний (11. Interrupt Integration)
  4. Периферийные устройства (13. Peripheral units)
  5. Программирование (14. Programming)

Обзор лабораторных работ

../.pic/Labs/labs.png

Курс Архитектур процессорных систем включает в себя цикл из 16 лабораторных работ (10 основных + 6 вспомогательных), в течение которых используя язык описания аппаратуры SystemVerilog на основе FPGA (ПЛИС, программируемая логическая интегральная схема), с нуля, последовательно, создается система, под управлением процессора с архитектурой RISC-V, управляющего периферийными устройствами и программируемого на языке высокого уровня C++.

Создаваемая система на ПЛИС состоит из: процессора, памяти, контроллера прерываний и контроллеров периферийных устройств.

../.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 На первой лабораторной работе изучаются базовые конструкции языка описания аппаратуры SystemVerilog, с помощью которого разрабатывается цифровой сумматор из примитивных логических вентилей, который, в последствии, конфигурируется в ПЛИС и его работа проверяется на отладочном стенде.

2. Арифметико-логическое устройство (ALU)

../.pic/Labs/l2.png На второй лабораторной изучаются новые конструкции языка SystemVerilog, на основе которых разрабатывается блок арифметико-логического устройства (АЛУ). АЛУ — это устройство, на входы которого подаются операнды, над которыми нужно выполнить некоторую операцию (сложение, вычитание и тому подобное) и код операции, которую нужно выполнить, а на выходе появляется результат этой операции. Проще говоря АЛУ - это "калькулятор" процессора.

3. Регистровый файл и внешняя память (RF)

../.pic/Labs/l3.png На третьей лабораторной разрабатываются элементы памяти для будущего процессора: память команд, память данных и регистровый файл. В памяти команд будет храниться программа, которую будет выполнять процессор. В памяти данных хранятся данные, которые будут обрабатываться процессором. Регистровый файл — это маленькая память, тоже с данными, которые могут быть поданы непосредственно на АЛУ. Особенность RISC-архитектур в том, что данные перед обработкой необходимо перенести из памяти данных в регистровый файл, только после этого к ним можно применять различные операции.

4. Простейшее программируемое устройство (PPD)

../.pic/Labs/lab_04_cybercobra/ppd_6.drawio.svg Эта работа – небольшое отступление от реализации процессора с архитектурой RISC-V и нужна для более глубокого понимания принципов работы и организации программируемых устройств. В рамках четвертой лабораторной работы из реализованных блоков собирается примитивное программируемое устройство, для которого пишется программа в машинных кодах.

5. Основной дешифратор команд (MD)

../.pic/Labs/l5.png Пятая лабораторная посвящена разработке устройства управления – основному дешифратору команд. Функция основного дешифратора — получать на вход коды выполняемых операций и преобразовывать их в управляющие сигналы для всех блоков процессора (АЛУ, память, регистровый файл, мультиплексоры). Работа требует внимательности в реализации, а ее результат проверяется заранее подготовленными автоматическими тестами.

6. Тракт данных (DP)

../.pic/Labs/l6.png Разработанные блоки объединяются, образуя тракт данных, управляемый основным дешифратором команд. Результатом шестой лабораторной работы является однотактный процессор, с архитектурой RISC-V, поддерживающий стандартный набор целочисленных инструкций RV32I. В качестве проверки на процессоре запускаются программы, заранее написанные на языке ассемблера RISC-V. Сравнивается результат полученный на симуляторе и на разработанном процессоре.

7. Внешняя память

Недостатком реализации процессора из предыдущей лабораторной работы была его неспособность выполнять операции LB, LBU, SB, LH, LHU, SH. Отчасти это связано с ограничением реализованной ранее памяти (в этой памяти не было возможности обновить отдельный байт в ячейке памяти).

Данная вспомогательная лабораторная работа позволяет реализовать память без этого ограничения.

8. Блог загрузки и сохранения данных (LSU)

../.pic/Labs/l7.png

Для корректного исполнения инструкций LB, LBU, SB, LH, LHU, SH мало использовать память с побайтовой записью. Необходимо также уметь управлять этой памятью, определенным образом подготавливать данные как для записи в память данный, так и для записи в регистровый файл, а также следить за тем, чтобы за время работы с памятью, программа процессора не начала исполняться дальше. Все эти задачи возлагаются на специальный модуль, который называется Блок загрузки и сохранения (Load and Store Unit, LSU)

9 Интеграция LSU

Вспомогательная лабораторная работа по интеграции реализованного ранее блока загрузки и сохранения, а также новой памяти данных в модуль riscv_unit.

../.pic/Labs/l8.png

10. Подсистема прерывания (IC)

../.pic/Labs/l8.png

Одной из основных функций процессоров является возможность реагировать на внешние события (дернуть мышку, нажать кнопку и т.п.), автоматически запуская, при их возникновении, соответствующие программы. В данной лабораторной создается и подсистема прерывания, к которой относятся контроллер прерываний с циклическим опросом и блок регистров статуса и управления.

11. Интеграция подсистемы прерывания

Вспомогательная лабораторная работа по интеграции реализованной ранее подсистемы прерывания.

../.pic/Labs/l9.png

12. Увеличение количества источников прерываний с помощью дейзи-цепочки

В базовом варианте лабораторных работ вам было предложено реализовать процессорную систему с одним источником прерываний. Этого достаточно для выполнения лабораторных работ, однако, в случае если вы захотите увеличить количество периферийных устройств, поддержка только одного источника прерываний станет источником проблем. В данной лабораторной работе вы реализуете блок приоритетных прерываний и интегрируете его в контроллер прерываний, увеличив число источников прерываний до 16.

../.pic/Labs/lab_12_daisy_chain/fig_02.drawio.svg

12. Периферийные устройства (PU)

../.pic/Labs/l9.png

В данной лабораторной создаются и подключаются к общей шине и подсистеме прерывания контроллеры периферийных устройств: переключатели, светодиоды, клавиатура, семисегментные дисплеи а также контроллер uart.

13. Программирование на языке высокого уровня

../.pic/Labs/l10.png

В рамках данной лабораторной настраивается компилятор GCC для RISC-V и для разработанной системы пишется программное обеспечение на языке программирования C++.

14. Программатор

До этого момента, исполняемая процессором программа попадала в память инструкций через магический вызов $readmemh. Однако реальные микроконтроллеры не обладают такими возможностями. Программа из внешнего мира попадает в них посредством так называемого программатора — устройства, обеспечивающего запись программы в память микроконтроллера. Программатор записывает данные в постоянное запоминающее устройство (ПЗУ). Для того, чтобы программа попала из ПЗУ в память инструкций, после запуска контроллера сперва начинает исполняться загрузчик (bootloader) — небольшая программа, вшитая в память микроконтроллера на этапе изготовления, которая отвечает за первичную инициализацию и подготовку микроконтроллера к выполнению основной программы (включая её перенос из ПЗУ в память инструкций).

В рамках данной лабораторной работы мы немного упростим процесс передачи программы: вместо записи в ПЗУ, программатор будет записывать её сразу в память инструкций, минуя загрузчик.

../.pic/Labs/lab_15_programming_device/fig_04.drawio.svg

15. Оценка производительности

На текущий момент мы создали процессорную систему, которая способна взаимодействовать с внешним миром посредством периферийных устройств ввода-вывода и программатора. Однако сложно понять, какое место данная система занимает в ряду уже существующих вычислительных систем.

Для оценки производительности мы модифицируем процессорную систему, соберем и запустим специализированное ПО, отвечающее за измерение производительности (мы будем использовать программу Coremark). Получив результаты, сравним наш процессор, с существующими.