From 8f910e6f5f398e21a8eefbcc909ff17adf4f3372 Mon Sep 17 00:00:00 2001 From: NikanorovVD <144456486+NikanorovVD@users.noreply.github.com> Date: Wed, 12 Jun 2024 14:15:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A013.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B0=D0=BD=D1=82=D0=B0=20ps2+led=20(#86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ЛР13. Исправление программы Вместо записи по адресу значения, выводимого на светодиоды, должна производиться запись по адресу режима мигания. * ЛР 13. Уточнение рекомендации При уменьшении значения, до которого считает счётчик, только в 10 раз (то есть с 20 млн. до 2 млн.) светодиоды не успевают моргнуть ни одного раза за всё время симуляции. Чтобы мигания стали видны это значение нужно уменьшать до порядка тысяч. * Update Labs/13. Peripheral units/README.md --------- Co-authored-by: Andrei Solodovnikov --- Labs/13. Peripheral units/README.md | 2 +- .../firmware/mem_files/lab_13_ps2_led_instr.mem | 2 +- Labs/13. Peripheral units/firmware/software/ps2_led.S | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Labs/13. Peripheral units/README.md b/Labs/13. Peripheral units/README.md index cfe81ed..8d3988c 100644 --- a/Labs/13. Peripheral units/README.md +++ b/Labs/13. Peripheral units/README.md @@ -167,7 +167,7 @@ _Рисунок 2. Карта памяти периферийных устрой 6. Проверьте работу процессорной системы с помощью моделирования. 1. Для каждой пары контроллеров в папке `firmware/mem_files` представлены файлы, инициализирующие память инструкций. Обратите внимание, что для пары "PS2-VGA" также необходим файл, инициализирующий память данных (в модуле `ext_mem` необходимо прописать блок `$readmemh`). 2. Исходный код программ с адресами и результирующими инструкциями находится в папке `firmware/software`. - 3. При моделировании светодиодов лучше уменьшить значение, до которого считает счетчик в режиме "моргания" в 10 раз, чтобы уменьшить время моделирования. Перед генерацией битстрима это значение будет необходимо восстановить. + 3. При моделировании светодиодов лучше уменьшить значение, до которого считает счетчик в режиме "моргания" в 1000 раз, чтобы сократить время моделирования до очередного переключения светодиодов. Перед генерацией битстрима это значение будет необходимо восстановить. 4. Для проверки тестбенч имитирует генерацию данных периферийных устройств ввода. При реализации контроллера клавиатуры или uart_rx рекомендуется ознакомиться с тем, какие именно данные тестбенч подает на вход. 5. Для того, чтобы понять, что устройство работает должным образом, в первую очередь необходимо убедиться, что контроллер устройства ввода успешно осуществил прием данных (сгенерированные тестбенчем данные оказались в соответствующем регистре контроллера периферийного устройства) и сгенерировал запрос на прерывание. 6. После чего, необходимо убедиться, что процессор среагировал на данное прерывание, и в процессе его обработки в контроллер устройства вывода были поданы выходные данные. diff --git a/Labs/13. Peripheral units/firmware/mem_files/lab_13_ps2_led_instr.mem b/Labs/13. Peripheral units/firmware/mem_files/lab_13_ps2_led_instr.mem index 1a9fb7e..57fd12f 100644 --- a/Labs/13. Peripheral units/firmware/mem_files/lab_13_ps2_led_instr.mem +++ b/Labs/13. Peripheral units/firmware/mem_files/lab_13_ps2_led_instr.mem @@ -14,5 +14,5 @@ 30200073 00412403 00144413 -00812023 +00812223 30200073 diff --git a/Labs/13. Peripheral units/firmware/software/ps2_led.S b/Labs/13. Peripheral units/firmware/software/ps2_led.S index 3753a95..a969628 100644 --- a/Labs/13. Peripheral units/firmware/software/ps2_led.S +++ b/Labs/13. Peripheral units/firmware/software/ps2_led.S @@ -43,6 +43,6 @@ trap_handler: change_mode: 38: 00412403 lw x8, 4(x2) # считываем значение текущего режима 3c: 00144413 xori x8, x8, 1 # инвертируем его младший бит -40: 00812023 sw x8, 0(x2) # записываем инвертированный режим +40: 00812223 sw x8, 4(x2) # записываем инвертированный режим 44: 30200073 mret # возвращаем управление программе (pc = mepc) # что означает возврат в бесконечный цикл