BREAKING CHANGE! Сдвиг нумерации в лабах

Лабу по дейзи-цепочке необходимо вставить сразу после лабы по интеграции
контроллера прерываний, поэтому приходится увеличить нумерацию
оставшихся лаб.
This commit is contained in:
Andrei Solodovnikov
2024-02-04 11:08:37 +03:00
parent d4d813a7ea
commit 45585ff9c4
60 changed files with 37 additions and 37 deletions

8
.github/SUMMARY.md vendored
View File

@@ -28,10 +28,10 @@
- [Лабораторная №10. Подсистема прерываний](Labs/10.%20Interrupt%20subsystem/README.md)
- [Лабораторная №11. Интеграция подсистемы прерываний](Labs/11.%20Interrupt%20integration/README.md)
- [Лабораторная №12. Дейзи-цепочка](Labs/12.%20Daisy%20chain/README.md)
- [Лабораторная №12. Периферийные устройства](Labs/12.%20Peripheral%20units/README.md)
- [Лабораторная №13. Программирование](Labs/13.%20Programming/README.md)
- [Лабораторная №14. Программатор](Labs/14.%20Programming%20device/README.md)
- [Лабораторная №15. Оценка производительности](Labs/15.%20Coremark/README.md)
- [Лабораторная №13. Периферийные устройства](Labs/13.%20Peripheral%20units/README.md)
- [Лабораторная №14. Программирование](Labs/14.%20Programming/README.md)
- [Лабораторная №15. Программатор](Labs/15.%20Programming%20device/README.md)
- [Лабораторная №16. Оценка производительности](Labs/16.%20Coremark/README.md)
---

8
.github/index.md vendored
View File

@@ -28,8 +28,8 @@
1. Тракт данных ([06. Datapath](Labs/06.%20Datapath))
2. Интеграция блока загрузки и сохранения ([09. LSU Integration](Labs/09.%20LSU%20Integration))
3. Интеграция подсистемы прерываний ([11. Interrupt Integration](Labs/11.%20Interrupt%20integration))
7. Периферийные устройства ([12. Peripheral units](Labs/12.%20Peripheral%20units))
8. Программирование ([13. Programming](Labs/13.%20Programming))
7. Периферийные устройства ([13. Peripheral units](Labs/13.%20Peripheral%20units))
8. Программирование ([14. Programming](Labs/14.%20Programming))
### ИВТ
@@ -45,5 +45,5 @@
6.
1. Контроллер прерываний ([10. Interrupt subsystem](Labs/10.%20Interrupt%20subsystem))
2. Интеграция подсистемы прерываний ([11. Interrupt Integration](Labs/11.%20Interrupt%20integration))
7. Периферийные устройства ([12. Peripheral units](Labs/12.%20Peripheral%20units))
8. Программирование ([13. Programming](Labs/13.%20Programming))
7. Периферийные устройства ([13. Peripheral units](Labs/13.%20Peripheral%20units))
8. Программирование ([14. Programming](Labs/14.%20Programming))

View File

Before

Width:  |  Height:  |  Size: 578 KiB

After

Width:  |  Height:  |  Size: 578 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

Before

Width:  |  Height:  |  Size: 249 KiB

After

Width:  |  Height:  |  Size: 249 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

Before

Width:  |  Height:  |  Size: 731 KiB

After

Width:  |  Height:  |  Size: 731 KiB

View File

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -2,7 +2,7 @@
Для того, чтобы лучше понять, что от вас требуется в рамках лабораторной работы по периферийным устройствам, рассмотрим процесс разработки структурной схемы (не SystemVerilog-описания) для контроллера светодиодов.
В первую очередь, здесь будет продублирована выдержка из спецификации на этот контроллер (общая часть раздела "[Описание контроллеров периферийных устройств](../Labs/12.%20Peripheral%20units/README.md#описание-контроллеров-периферийных-устройств)", а также подраздел "[Светодиоды](../Labs/12.%20Peripheral%20units/README.md#светодиоды)"):
В первую очередь, здесь будет продублирована выдержка из спецификации на этот контроллер (общая часть раздела "[Описание контроллеров периферийных устройств](../Labs/13.%20Peripheral%20units/README.md#описание-контроллеров-периферийных-устройств)", а также подраздел "[Светодиоды](../Labs/13.%20Peripheral%20units/README.md#светодиоды)"):
## Спецификация контроллера

View File

@@ -1,4 +1,4 @@
# Лабораторная работа 12 "Периферийные устройства"
# Лабораторная работа 13 "Периферийные устройства"
На прошлой лабораторной работе вы реализовали свой собственный RISC-V процессор. Однако пока что он находится "в вакууме" и никак не связан с внешним миром. Для исправления этого недостатка вами будет реализована системная шина, через которую к процессору смогут подключаться различные периферийные устройства.
@@ -50,7 +50,7 @@
На рисунке ниже представлен способ подключения процессора к памяти инструкций и данных, а также 255 периферийным устройствам.
![../../.pic/Labs/lab_12_periph/fig_01.drawio.svg](../../.pic/Labs/lab_12_periph/fig_01.drawio.svg)
![../../.pic/Labs/lab_13_periph/fig_01.drawio.svg](../../.pic/Labs/lab_13_periph/fig_01.drawio.svg)
_Рисунок 1. Итоговая структура процессорной системы._
@@ -127,9 +127,9 @@ sys_clk_rst_gen divider(.ex_clk_i(clk_i),.ex_areset_n_i(resetn_i),.div_i(5),.sys
## Задание
В рамках данной лабораторной работы необходимо реализовать модули-контроллеры двух периферийных устройств, реализующих управление в соответствии с приведенной ниже картой памяти и встроить их в процессорную систему, используя [_рис. 1_](../../.pic/Labs/lab_12_periph/fig_01.drawio.svg). На карте приведено шесть периферийных устройств, вам необходимо взять только два из них. Какие именно — сообщит преподаватель.
В рамках данной лабораторной работы необходимо реализовать модули-контроллеры двух периферийных устройств, реализующих управление в соответствии с приведенной ниже картой памяти и встроить их в процессорную систему, используя [_рис. 1_](../../.pic/Labs/lab_13_periph/fig_01.drawio.svg). На карте приведено шесть периферийных устройств, вам необходимо взять только два из них. Какие именно — сообщит преподаватель.
![Карта памяти](../../.pic/Labs/lab_12_periph/fig_02.png)
![Карта памяти](../../.pic/Labs/lab_13_periph/fig_02.png)
_Рисунок 2. Карта памяти периферийных устройств._
@@ -161,7 +161,7 @@ _Рисунок 2. Карта памяти периферийных устрой
2. Добавьте в модуль `riscv_unit` входы и выходы периферии. **Необходимо добавить порты даже тех периферийных устройств, которые вы не будете реализовывать**.
3. Создайте в начале описания модуля `riscv_unit` экземпляр модуля `sys_clk_rst_gen`, скопировав приведенный фрагмент кода.
4. Замените подключение тактового сигнала исходных подмодулей `riscv_unit` на появившийся сигнал `sysclk`. Убедитесь, что на модули, имеющие сигнал сброса, приходит сигнал `rst`.
5. Интегрируйте модули контроллеров периферии в процессорную систему по приведенной схеме руководствуясь старшими адресами контроллеров, представленными на карте памяти ([_рис. 2_](../../.pic/Labs/lab_12_periph/fig_02.png)). Это означает, что если вы реализуете контроллер светодиодов, на его вход `req_i` должна подаваться единица в случае, если `mem_req_o == 1` и старшие 8 бит адреса равны `0x02`.
5. Интегрируйте модули контроллеров периферии в процессорную систему по приведенной схеме руководствуясь старшими адресами контроллеров, представленными на карте памяти ([_рис. 2_](../../.pic/Labs/lab_13_periph/fig_02.png)). Это означает, что если вы реализуете контроллер светодиодов, на его вход `req_i` должна подаваться единица в случае, если `mem_req_o == 1` и старшие 8 бит адреса равны `0x02`.
1. При интеграции вы должны подключить только модули-контроллеры вашего варианта. Контроллеры периферии других вариантов подключать не надо.
2. При этом во время интеграции, вы должны использовать старшую часть адреса, представленную в карте памяти для формирования сигнала `req_i` для ваших модулей-контроллеров.
6. Проверьте работу процессорной системы с помощью моделирования.
@@ -633,7 +633,7 @@ _Рисунок 3. Пример игры с использованием сим
Для управления выводимым на экран содержимым, адресное пространство модуля разделено на следующие диапазоны:
![../../.pic/Labs/lab_12_periph/fig_04.png](../../.pic/Labs/lab_12_periph/fig_04.png)
![../../.pic/Labs/lab_13_periph/fig_04.png](../../.pic/Labs/lab_13_periph/fig_04.png)
_Рисунок 4. Карта памяти vga-модуля._
@@ -651,7 +651,7 @@ _Рисунок 4. Карта памяти vga-модуля._
Цветовая схема каждой позиции состоит из двух цветов: цвета фона и цвета символа. Оба эти цвета выбираются из палитры 8 цветов, каждый из которых содержит два оттенка: цвет на полной яркости и цвет на уменьшенной яркости (см. рис. 5). Один из цветов — черный, оба его оттенка представляют собой один и тот же цвет. Ниже приведены коды цветов их rgb-значения:
![../../.pic/Labs/lab_12_periph/fig_05.png](../../.pic/Labs/lab_12_periph/fig_05.png)
![../../.pic/Labs/lab_13_periph/fig_05.png](../../.pic/Labs/lab_13_periph/fig_05.png)
_Рисунок 5. Цветовая палитра vga-модуля._
@@ -669,7 +669,7 @@ _Рисунок 5. Цветовая палитра vga-модуля._
Допустим, нам необходимо отрисовать символ `F` (ascii-код `0x46`).
![../../.pic/Labs/lab_12_periph/fig_06.png](../../.pic/Labs/lab_12_periph/fig_06.png)
![../../.pic/Labs/lab_13_periph/fig_06.png](../../.pic/Labs/lab_13_periph/fig_06.png)
_Рисунок 6. Отрисовка символа `F` в разрешении 16х8 пикселей._
Данный символ состоит из 16 строчек по 8 пикселей. Каждый пиксель кодируется одним битом (горит/не горит, цвет символа/фоновый цвет). Каждая строчка кодируется одним байтом (8 бит на 8 пикселей). Таким образом, каждый сканкод требует 16 байт памяти.

View File

@@ -1,4 +1,4 @@
# Лабораторная работа 13 "Высокоуровневое программирование"
# Лабораторная работа 14 "Высокоуровневое программирование"
Благодаря абстрагированию можно создавать действительно сложные системы — из вентелей можно собрать модули, из модулей микроархитектуру и так далее. В этом контексте архитектура выступает как фундамент, на котором строится программный стек абстракций. На основе архитектур строятся ассемблеры, на основе которых "строятся" языки высокого уровня, на основе которых создаются фреймворки и метафреймворки, что обеспечивает более высокий уровень и удобство при разработке новых программ. Давайте немного глубже погрузимся в этот стек.
@@ -623,7 +623,7 @@ Disassembly of section .data:
При этом, вам необходимо получить входные данные от вашего устройства ввода и вывести результат на устройство вывода. Продумайте, как именно будет работать ваша программа, (бесконечно пересчитывать значения, получая новые данные от устройства ввода, или считать один раз, ожидая данные в бесконечном цикле — вариантов реализации очень много).
Доступ к регистрам контроллеров периферии осуществляется через обращение в память. В простейшем случае такой доступ осуществляется через [разыменование указателей](https://ru.wikipedia.org/wiki/Указатель_(тип_данных)ействия_над_указателями), проинициализированных адресами регистров из [карты памяти](../12.%20Peripheral%20units#задание) 12-ой лабораторной работы.
Доступ к регистрам контроллеров периферии осуществляется через обращение в память. В простейшем случае такой доступ осуществляется через [разыменование указателей](https://ru.wikipedia.org/wiki/Указатель_(тип_данных)ействия_над_указателями), проинициализированных адресами регистров из [карты памяти](../13.%20Peripheral%20units#задание) 12-ой лабораторной работы.
При написании программы помните, что в C++ сильно ограничена арифметика указателей, поэтому при присваивании указателю целочисленного значения адреса, необходимо использовать оператор `reinterpret_cast`.

View File

@@ -1,4 +1,4 @@
# Лабораторная работа 14 "Программатор"
# Лабораторная работа 15 "Программатор"
Чтобы выпустить микроконтроллер в "дикую природу", то есть, чтобы его можно было использовать не в лабораторных условиях, а независимо от всего этого дополнительного оборудования, необходимо придусмотреть механизм замены исполняемой программы.
@@ -105,7 +105,7 @@ module turnstile_fsm(
Кроме того, при должной поддержке со стороны инструментов моделирования, значения объектов перечислений могут выводиться на временную диаграмму в виде перечисленных имен:
![../../.pic/Labs/lab_14_programming_device/fig_02.png](../../.pic/Labs/lab_14_programming_device/fig_02.png)
![../../.pic/Labs/lab_15_programming_device/fig_02.png](../../.pic/Labs/lab_15_programming_device/fig_02.png)
_Рисунок 2. Вывод значений объекта `enum` на временную диаграмму._
@@ -224,7 +224,7 @@ module rw_instr_mem(
В основе работы модуля лежит конечный автомат со следующим графом перехода между состояниями:
![../../.pic/Labs/lab_14_programming_device/fig_03.drawio.svg](../../.pic/Labs/lab_14_programming_device/fig_03.drawio.svg)
![../../.pic/Labs/lab_15_programming_device/fig_03.drawio.svg](../../.pic/Labs/lab_15_programming_device/fig_03.drawio.svg)
_Рисунок 3. Граф перехода между состояниями программатора._
@@ -473,7 +473,7 @@ endmodule
### Интеграция программатора в riscv_unit
![../../.pic/Labs/lab_14_programming_device/fig_04.drawio.svg](../../.pic/Labs/lab_14_programming_device/fig_04.drawio.svg)
![../../.pic/Labs/lab_15_programming_device/fig_04.drawio.svg](../../.pic/Labs/lab_15_programming_device/fig_04.drawio.svg)
В первую очередь, необходимо заменить память инструкций и добавить новый модуль. После чего подключить программатор к памяти инструкций и мультиплексировать выход интерфейса памяти данных программатора с интерфейсом памяти данных LSU. Сигнал сброса процессора необходимо заменить на выход `core_reset_o`.

View File

@@ -1,11 +1,11 @@
# Лабораторная работа 15 "Оценка производительности"
# Лабораторная работа 16 "Оценка производительности"
## Допуск к лабораторной работе
Данная лабораторная работа будет полностью опираться на навыки, полученные в ходе выполнения лабораторных работ:
12. [Периферийные устройства](../12.%20Peripheral%20units/)
13. [Программирование](../13.%20Programming/)
13. [Периферийные устройства](../13.%20Peripheral%20units/)
14. [Программирование](../14.%20Programming/)
## Цель
@@ -31,7 +31,7 @@
1. Реализовать модуль-контроллер "таймер".
2. Подключить этот модуль к системной шине.
2.1. В случае, если до этого в ЛР12 вашим устройством вывода было не UART TX, вам необходимо подключить к системной шине готовый модуль [uart_tx_sb_ctrl](../Made-up%20modules/lab_12.uart_tx_sb_ctrl.sv).
2.1. В случае, если до этого в ЛР12 вашим устройством вывода было не UART TX, вам необходимо подключить к системной шине готовый модуль [uart_tx_sb_ctrl](../Made-up%20modules/lab_13.uart_tx_sb_ctrl.sv).
3. Добавить реализацию платформозависимых функций программы coremark.
4. Скомпилировать программу.
5. Изменить размер памяти инструкций.
@@ -192,7 +192,7 @@ portable_init(core_portable *p, int *argc, char *argv[])
### Компиляция
Для компиляции программы, вам потребуются предоставленные файлы [Makefile](Makefile) и [linker_script.ld](linker_script.ld), а также файл [startup.S](../13.%20Programming/startup.S) из ЛР13. Эти файлы необходимо скопировать с заменой в корень папки с программой.
Для компиляции программы, вам потребуются предоставленные файлы [Makefile](Makefile) и [linker_script.ld](linker_script.ld), а также файл [startup.S](../14.%20Programming/startup.S) из ЛР13. Эти файлы необходимо скопировать с заменой в корень папки с программой.
`Makefile` написан из расчёта, что кросс-компилятор расположен по пути `C:/riscv_cc/`. В случае, если это не так, измените первую строчку данного файла в соответствии с расположением кросс-компилятора.
@@ -267,7 +267,7 @@ Correct operation validated. See README.md for run and reporting rules.
1. [Опишите](#таймер) таймер в виде модуля `timer_sb_ctrl`.
2. Проверьте описанный модуль с помощью тестового окружения [tb_timer](tb_timer.sv).
3. Подключите `timer_sb_ctrl` к системной шине. Сигнал прерывания этого модуля подключать не нужно.
2.1 В случае, если до этого в ЛР12 вашим устройством вывода было не UART TX, вам необходимо подключить к системной шине и готовый модуль [uart_tx_sb_ctrl](../Made-up%20modules/lab_12.uart_tx_sb_ctrl.sv).
2.1 В случае, если до этого в ЛР12 вашим устройством вывода было не UART TX, вам необходимо подключить к системной шине и готовый модуль [uart_tx_sb_ctrl](../Made-up%20modules/lab_13.uart_tx_sb_ctrl.sv).
4. Получите исходники программы Coremark. Для этого можно либо склонировать репозиторий, либо скачать его в виде архива со страницы: [https://github.com/eembc/coremark](https://github.com/eembc/coremark).
5. Добавьте реализацию платформозависимых функций программы coremark. Для этого в папке `barebones` необходимо:
1. в файле `core_portme.c`:
@@ -275,7 +275,7 @@ Correct operation validated. See README.md for run and reporting rules.
2. объявить макрос `CLOCKS_PER_SEC`, характеризующий тактовую частоту процессора;
3. [реализовать](#3-реализация-функции-первичной-настройки) функцию `portable_init`, выполняющую первичную инициализацию периферийных устройств до начала теста;
2. в файле `ee_printf.c` [реализовать](#2-реализация-вывода-очередного-символа-сообщения) функцию `uart_send_char`, отвечающую за отправку очередного символа сообщения о результате.
6. Добавьте с заменой в корень программы файлы [Makefile](Makefile), [linker_script.ld](linker_script.ld) и [startup.S](../13.%20Programming/startup.S).
6. Добавьте с заменой в корень программы файлы [Makefile](Makefile), [linker_script.ld](linker_script.ld) и [startup.S](../14.%20Programming/startup.S).
7. Скомпилируйте программу вызовом `make`.
1. Если кросскомпилятор расположен не в директории `C:/riscv_cc`, перед вызовом `make` вам необходимо соответствующим образом отредактировать первую строчку в `Makefile`.
2. В случае отсутствия на компьютере утилиты `make`, вы можете самостоятельно скомпилировать программу вызовом команд, представленных в разделе ["Компиляция"](#компиляция).
@@ -327,7 +327,7 @@ Iterations/Sec : <скрыто до получения результатов
Мы получим следующий расклад:
![../../.pic/Labs/lab_15_coremark/fig_01.png](../../.pic/Labs/lab_15_coremark/fig_01.png)
![../../.pic/Labs/lab_16_coremark/fig_01.png](../../.pic/Labs/lab_16_coremark/fig_01.png)
На что мы можем обратить внимание? Ну, во-первых, мы видим, что ближайший к нам микроконтроллер по кормарку — это `ATmega2560` с результатом `4.25` кормарка. Т.е. наш процессор по производительности схож с микроконтроллерами Arduino.

View File

@@ -56,8 +56,8 @@
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))
7. Периферийные устройства ([13. Peripheral units](13.%20Peripheral%20units))
8. Программирование ([14. Programming](14.%20Programming))
### ИВТ
@@ -73,8 +73,8 @@
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))
7. Периферийные устройства ([13. Peripheral units](13.%20Peripheral%20units))
8. Программирование ([14. Programming](14.%20Programming))
## Обзор лабораторных работ
@@ -172,7 +172,7 @@
## 12. Периферийные устройства (PU)
![../.pic/Labs/l9.png](../.pic/Labs/lab_12_peripheral_units.drawio.svg)
![../.pic/Labs/l9.png](../.pic/Labs/lab_13_peripheral_units.drawio.svg)
В данной лабораторной создаются и подключаются к общей шине и подсистеме прерывания контроллеры периферийных устройств: переключатели, светодиоды, клавиатура, семисегментные дисплеи а также контроллер uart.
@@ -188,7 +188,7 @@
В рамках данной лабораторной работы мы немного упростим процесс передачи программы: вместо записи в ПЗУ, программатор будет записывать её сразу в память инструкций, минуя загрузчик.
![../.pic/Labs/lab_14_programming_device/fig_04.drawio.svg](../.pic/Labs/lab_14_programming_device.drawio.svg)
![../.pic/Labs/lab_15_programming_device/fig_04.drawio.svg](../.pic/Labs/lab_15_programming_device.drawio.svg)
## 15. Оценка производительности