diff --git a/.github/SUMMARY.md b/.github/SUMMARY.md index 2b0a269..e378e0b 100644 --- a/.github/SUMMARY.md +++ b/.github/SUMMARY.md @@ -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) --- diff --git a/.github/index.md b/.github/index.md index 5ca4d32..176fff1 100644 --- a/.github/index.md +++ b/.github/index.md @@ -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)) diff --git a/.pic/Labs/lab_12_periph/fig_01.drawio.svg b/.pic/Labs/lab_13_periph/fig_01.drawio.svg similarity index 100% rename from .pic/Labs/lab_12_periph/fig_01.drawio.svg rename to .pic/Labs/lab_13_periph/fig_01.drawio.svg diff --git a/.pic/Labs/lab_12_periph/fig_02.png b/.pic/Labs/lab_13_periph/fig_02.png similarity index 100% rename from .pic/Labs/lab_12_periph/fig_02.png rename to .pic/Labs/lab_13_periph/fig_02.png diff --git a/.pic/Labs/lab_12_periph/fig_02.xlsx b/.pic/Labs/lab_13_periph/fig_02.xlsx similarity index 100% rename from .pic/Labs/lab_12_periph/fig_02.xlsx rename to .pic/Labs/lab_13_periph/fig_02.xlsx diff --git a/.pic/Labs/lab_12_periph/fig_04.png b/.pic/Labs/lab_13_periph/fig_04.png similarity index 100% rename from .pic/Labs/lab_12_periph/fig_04.png rename to .pic/Labs/lab_13_periph/fig_04.png diff --git a/.pic/Labs/lab_12_periph/fig_05.png b/.pic/Labs/lab_13_periph/fig_05.png similarity index 100% rename from .pic/Labs/lab_12_periph/fig_05.png rename to .pic/Labs/lab_13_periph/fig_05.png diff --git a/.pic/Labs/lab_12_periph/fig_06.png b/.pic/Labs/lab_13_periph/fig_06.png similarity index 100% rename from .pic/Labs/lab_12_periph/fig_06.png rename to .pic/Labs/lab_13_periph/fig_06.png diff --git a/.pic/Labs/lab_12_peripheral_units.drawio.svg b/.pic/Labs/lab_13_peripheral_units.drawio.svg similarity index 100% rename from .pic/Labs/lab_12_peripheral_units.drawio.svg rename to .pic/Labs/lab_13_peripheral_units.drawio.svg diff --git a/.pic/Labs/lab_13_programming.png b/.pic/Labs/lab_14_programming.png similarity index 100% rename from .pic/Labs/lab_13_programming.png rename to .pic/Labs/lab_14_programming.png diff --git a/.pic/Labs/lab_14_programming_device.drawio.svg b/.pic/Labs/lab_15_programming_device.drawio.svg similarity index 100% rename from .pic/Labs/lab_14_programming_device.drawio.svg rename to .pic/Labs/lab_15_programming_device.drawio.svg diff --git a/.pic/Labs/lab_14_programming_device/fig_02.png b/.pic/Labs/lab_15_programming_device/fig_02.png similarity index 100% rename from .pic/Labs/lab_14_programming_device/fig_02.png rename to .pic/Labs/lab_15_programming_device/fig_02.png diff --git a/.pic/Labs/lab_14_programming_device/fig_03.drawio.png b/.pic/Labs/lab_15_programming_device/fig_03.drawio.png similarity index 100% rename from .pic/Labs/lab_14_programming_device/fig_03.drawio.png rename to .pic/Labs/lab_15_programming_device/fig_03.drawio.png diff --git a/.pic/Labs/lab_14_programming_device/fig_03.drawio.svg b/.pic/Labs/lab_15_programming_device/fig_03.drawio.svg similarity index 100% rename from .pic/Labs/lab_14_programming_device/fig_03.drawio.svg rename to .pic/Labs/lab_15_programming_device/fig_03.drawio.svg diff --git a/.pic/Labs/lab_14_programming_device/fig_04.drawio.svg b/.pic/Labs/lab_15_programming_device/fig_04.drawio.svg similarity index 100% rename from .pic/Labs/lab_14_programming_device/fig_04.drawio.svg rename to .pic/Labs/lab_15_programming_device/fig_04.drawio.svg diff --git a/.pic/Labs/lab_15_coremark/fig_01.png b/.pic/Labs/lab_16_coremark/fig_01.png similarity index 100% rename from .pic/Labs/lab_15_coremark/fig_01.png rename to .pic/Labs/lab_16_coremark/fig_01.png diff --git a/Basic Verilog structures/Controllers.md b/Basic Verilog structures/Controllers.md index 77d1b47..4de94d8 100644 --- a/Basic Verilog structures/Controllers.md +++ b/Basic Verilog structures/Controllers.md @@ -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#светодиоды)"): ## Спецификация контроллера diff --git a/Labs/12. Peripheral units/README.md b/Labs/13. Peripheral units/README.md similarity index 99% rename from Labs/12. Peripheral units/README.md rename to Labs/13. Peripheral units/README.md index 14d2941..07698e0 100644 --- a/Labs/12. Peripheral units/README.md +++ b/Labs/13. Peripheral units/README.md @@ -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 байт памяти. diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_map.mem b/Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_map.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_map.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_map.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_t_ro.mem b/Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_t_ro.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_t_ro.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_t_ro.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_t_rw.mem b/Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_t_rw.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab12_vga_ch_t_rw.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab12_vga_ch_t_rw.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab12_vga_col_map.mem b/Labs/13. Peripheral units/firmware/mem_files/lab12_vga_col_map.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab12_vga_col_map.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab12_vga_col_map.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2_hex_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2_hex_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2_hex_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2_hex_instr.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2_vga_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2_vga_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2_vga_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2_vga_instr.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2ascii_data.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2ascii_data.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_ps2ascii_data.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_ps2ascii_data.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_hex_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_hex_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_hex_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_hex_instr.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_led_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_led_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_led_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_led_instr.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_tx_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_tx_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_rx_tx_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_rx_tx_instr.mem diff --git a/Labs/12. Peripheral units/firmware/mem_files/lab_12_sw_led_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_12_sw_led_instr.mem similarity index 100% rename from Labs/12. Peripheral units/firmware/mem_files/lab_12_sw_led_instr.mem rename to Labs/13. Peripheral units/firmware/mem_files/lab_12_sw_led_instr.mem diff --git a/Labs/12. Peripheral units/firmware/software/ps2_hex.S b/Labs/13. Peripheral units/firmware/software/ps2_hex.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/ps2_hex.S rename to Labs/13. Peripheral units/firmware/software/ps2_hex.S diff --git a/Labs/12. Peripheral units/firmware/software/ps2_vga.S b/Labs/13. Peripheral units/firmware/software/ps2_vga.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/ps2_vga.S rename to Labs/13. Peripheral units/firmware/software/ps2_vga.S diff --git a/Labs/12. Peripheral units/firmware/software/rx_hex.S b/Labs/13. Peripheral units/firmware/software/rx_hex.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/rx_hex.S rename to Labs/13. Peripheral units/firmware/software/rx_hex.S diff --git a/Labs/12. Peripheral units/firmware/software/rx_led.S b/Labs/13. Peripheral units/firmware/software/rx_led.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/rx_led.S rename to Labs/13. Peripheral units/firmware/software/rx_led.S diff --git a/Labs/12. Peripheral units/firmware/software/rx_tx.S b/Labs/13. Peripheral units/firmware/software/rx_tx.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/rx_tx.S rename to Labs/13. Peripheral units/firmware/software/rx_tx.S diff --git a/Labs/12. Peripheral units/firmware/software/sw_led.S b/Labs/13. Peripheral units/firmware/software/sw_led.S similarity index 100% rename from Labs/12. Peripheral units/firmware/software/sw_led.S rename to Labs/13. Peripheral units/firmware/software/sw_led.S diff --git a/Labs/12. Peripheral units/nexys_a7_100t.xdc b/Labs/13. Peripheral units/nexys_a7_100t.xdc similarity index 100% rename from Labs/12. Peripheral units/nexys_a7_100t.xdc rename to Labs/13. Peripheral units/nexys_a7_100t.xdc diff --git a/Labs/12. Peripheral units/peripheral modules/PS2Receiver.sv b/Labs/13. Peripheral units/peripheral modules/PS2Receiver.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/PS2Receiver.sv rename to Labs/13. Peripheral units/peripheral modules/PS2Receiver.sv diff --git a/Labs/12. Peripheral units/peripheral modules/hex_digits.sv b/Labs/13. Peripheral units/peripheral modules/hex_digits.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/hex_digits.sv rename to Labs/13. Peripheral units/peripheral modules/hex_digits.sv diff --git a/Labs/12. Peripheral units/peripheral modules/uart_rx.sv b/Labs/13. Peripheral units/peripheral modules/uart_rx.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/uart_rx.sv rename to Labs/13. Peripheral units/peripheral modules/uart_rx.sv diff --git a/Labs/12. Peripheral units/peripheral modules/uart_tx.sv b/Labs/13. Peripheral units/peripheral modules/uart_tx.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/uart_tx.sv rename to Labs/13. Peripheral units/peripheral modules/uart_tx.sv diff --git a/Labs/12. Peripheral units/peripheral modules/vgachargen.sv b/Labs/13. Peripheral units/peripheral modules/vgachargen.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/vgachargen.sv rename to Labs/13. Peripheral units/peripheral modules/vgachargen.sv diff --git a/Labs/12. Peripheral units/peripheral modules/vgachargen_pkg.sv b/Labs/13. Peripheral units/peripheral modules/vgachargen_pkg.sv similarity index 100% rename from Labs/12. Peripheral units/peripheral modules/vgachargen_pkg.sv rename to Labs/13. Peripheral units/peripheral modules/vgachargen_pkg.sv diff --git a/Labs/12. Peripheral units/sys_clk_rst_gen.sv b/Labs/13. Peripheral units/sys_clk_rst_gen.sv similarity index 100% rename from Labs/12. Peripheral units/sys_clk_rst_gen.sv rename to Labs/13. Peripheral units/sys_clk_rst_gen.sv diff --git a/Labs/12. Peripheral units/tb_riscv_unit.sv b/Labs/13. Peripheral units/tb_riscv_unit.sv similarity index 100% rename from Labs/12. Peripheral units/tb_riscv_unit.sv rename to Labs/13. Peripheral units/tb_riscv_unit.sv diff --git a/Labs/13. Programming/README.md b/Labs/14. Programming/README.md similarity index 99% rename from Labs/13. Programming/README.md rename to Labs/14. Programming/README.md index 7d170dd..68183d2 100644 --- a/Labs/13. Programming/README.md +++ b/Labs/14. Programming/README.md @@ -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`. diff --git a/Labs/13. Programming/linker_script.ld b/Labs/14. Programming/linker_script.ld similarity index 100% rename from Labs/13. Programming/linker_script.ld rename to Labs/14. Programming/linker_script.ld diff --git a/Labs/13. Programming/platform.h b/Labs/14. Programming/platform.h similarity index 100% rename from Labs/13. Programming/platform.h rename to Labs/14. Programming/platform.h diff --git a/Labs/13. Programming/startup.S b/Labs/14. Programming/startup.S similarity index 100% rename from Labs/13. Programming/startup.S rename to Labs/14. Programming/startup.S diff --git a/Labs/14. Programming device/README.md b/Labs/15. Programming device/README.md similarity index 98% rename from Labs/14. Programming device/README.md rename to Labs/15. Programming device/README.md index 43f527b..31f38b0 100644 --- a/Labs/14. Programming device/README.md +++ b/Labs/15. Programming device/README.md @@ -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`. diff --git a/Labs/14. Programming device/flash.py b/Labs/15. Programming device/flash.py similarity index 100% rename from Labs/14. Programming device/flash.py rename to Labs/15. Programming device/flash.py diff --git a/Labs/14. Programming device/tb_bluster.sv b/Labs/15. Programming device/tb_bluster.sv similarity index 100% rename from Labs/14. Programming device/tb_bluster.sv rename to Labs/15. Programming device/tb_bluster.sv diff --git a/Labs/14. Programming device/tb_top_asic.sv b/Labs/15. Programming device/tb_top_asic.sv similarity index 100% rename from Labs/14. Programming device/tb_top_asic.sv rename to Labs/15. Programming device/tb_top_asic.sv diff --git a/Labs/15. Coremark/Makefile b/Labs/16. Coremark/Makefile similarity index 100% rename from Labs/15. Coremark/Makefile rename to Labs/16. Coremark/Makefile diff --git a/Labs/15. Coremark/README.md b/Labs/16. Coremark/README.md similarity index 98% rename from Labs/15. Coremark/README.md rename to Labs/16. Coremark/README.md index dadf9d9..8a2e1c2 100644 --- a/Labs/15. Coremark/README.md +++ b/Labs/16. Coremark/README.md @@ -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. diff --git a/Labs/15. Coremark/linker_script.ld b/Labs/16. Coremark/linker_script.ld similarity index 100% rename from Labs/15. Coremark/linker_script.ld rename to Labs/16. Coremark/linker_script.ld diff --git a/Labs/15. Coremark/startup.S b/Labs/16. Coremark/startup.S similarity index 100% rename from Labs/15. Coremark/startup.S rename to Labs/16. Coremark/startup.S diff --git a/Labs/15. Coremark/tb_coremark.sv b/Labs/16. Coremark/tb_coremark.sv similarity index 100% rename from Labs/15. Coremark/tb_coremark.sv rename to Labs/16. Coremark/tb_coremark.sv diff --git a/Labs/15. Coremark/tb_timer.sv b/Labs/16. Coremark/tb_timer.sv similarity index 100% rename from Labs/15. Coremark/tb_timer.sv rename to Labs/16. Coremark/tb_timer.sv diff --git a/Labs/Made-up modules/lab_12.uart_tx_sb_ctrl.sv b/Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv similarity index 100% rename from Labs/Made-up modules/lab_12.uart_tx_sb_ctrl.sv rename to Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv diff --git a/Labs/README.md b/Labs/README.md index 8caccda..d7c28ef 100644 --- a/Labs/README.md +++ b/Labs/README.md @@ -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. Оценка производительности