brosandr.lab_03_rf (#66)

* Feat(labs/03/board):Переписывание топа

* Ref(labs/03/board/top):Уд-ие лишнего условия в we

* Repo(labs/03/board/top):Изм-кредита

* Repo(pic/03/struct):Доб-ие начального drawio

* Feat(pic/03/board/struct):Нарисовка картинки

* Feat(pic/03/board/struct):Доб-ие цветов в схему

* Ref(pic/03/board/struct):Различные улучшения

* Ref(pic/03/board/struct):Выделение wa

* Ref(pic/03/board/struct):Различные улучшения

* Ref(pic/03/board/struct):Подвижка nexys_rf_riscv

* Ref(pic/03/board/struct):Изм-ие цвета шины

* Ref(pic/03/board/struct):Утолщение шины

* Ref(pic/03/board/struct):Изм-ие цветов, выд кнопок

* Ref(pic/03/board/struct):Изм-ие цвета ra2

* Feat(pic/03/board/control):Начальный комит

* Ref(pic/03/board/control):Обрезка пикчи платы

* Ref(03/board):Выпиливание старой пикчи контроля

* Ref(03/board/md):Некоторые испр-ия

* Ref(03/board/md):Доб-ие описание остальной периф

* Ref(03/board/md):Выделеине в заголовки перефирии

* Fix(03/board/nexys_rf):Испр-ие мапинга кнопок

* Ref(pic/03/board/write_addr):Перерисовка пикчи

* Ref(pic/03/board/write_data):Перерисовка пикчи

* Ref(pic/03/board/read):Перерисовка пикчи

* Ref(03/board/md):Переписывание

* Feat(03/board/md):Доб-ие рисунка структуры

* Ref(03/board/md):Улучшение

* Ref(03/board/nexys_rf_riscv):Уд-ие reg wd

Тк не нужно и усложняет схему

* Ref(03/board/md):Испр-ие содержимого note

* Fix(03/board):Apply suggestions from code review

Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru>

* Ref(03/board/md):Замена нижние->младшие

* Ref(03/board):Ren картинок

* Ref(pic/03/board/wa_5):Crop image

* Feat(03/board):Доб-ие записи в регистр 6

* Ref(pic/03/board/struct):Вырав-ие портов rf

* Ref(03/board/md):Изм-ие подписи рис. 2

* Ref(03/board/md/control):Доб-ие обводки

* Revert "Ref(03/board/md/control):Доб-ие обводки"

This reverts commit d55735e859.

* Ref(pic/03/board/struct):Улуч-ие разрядности рег

* Ref(pic/03/board):Выделение фона у текстов

* Fix(pic/03/board/control):Испр-ие фона теста

---------

Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru>
This commit is contained in:
BROsandr
2024-03-06 17:06:38 +03:00
committed by GitHub
parent 4c57e67712
commit f8efc0bab5
15 changed files with 301 additions and 215 deletions

View File

@@ -1,39 +1,101 @@
# Проверка работы регистрового файла на ПЛИС
Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md)
После того, как вы проверили на моделировании регистровый файл, вам необходимо проверить его работу на прототипе в ПЛИС.
Для работы с регистровым файлом, необходимо выставлять сигналы адресов и данных.
У платы недостаточно переключателей, для такого количества входов регистрового файла, поэтому подача сигналов на вход происходит в несколько этапов.
Сперва можно ввести один из адресов регистрового файла (`A1`/`A2`/`A3`). Ввод осуществляется через `SW[4:0]`. Для того, чтобы выставить введенный адрес на какой-то из входов адреса, необходимо нажать одну из следующих кнопок:
Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md).
1. `BTNL` чтобы выставить значение с `SW[4:0]` на `A1`
2. `BTNC` чтобы выставить значение с `SW[4:0]` на `A2`
3. `BTNR` чтобы выставить значение с `SW[4:0]` на `A3`
На _рис. 1_ представлена схема прототипа в ПЛИС.
(расположение кнопок смотри на изображениях ниже).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_structure.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_structure.drawio.svg)
После выставления адресов, переключатели можно использовать в качестве ввода первых шестнадцате бит данных. Для записи введенных данных по адресу `A3` используется кнопка `BTND`, для чтения данных по адресам `A1`, `A2` (с выводом результатов чтения на семисегментные индикаторы) используется кнопка `BTNU`.
_Рисунок 1. Структурная схема модуля `nexys_rf_riscv`._
Управление регистровым файлом.
## Описание используемой периферии
![../../../.pic/Labs/board%20files/nexys_rf1.jpg](../../../.pic/Labs/board%20files/nexys_rf1.jpg)
Периферия показана на _рис. 2_.
Ниже показан пример последовательности действий для работы с платой.
![../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg)
Установка значения `5'b10101` на входы `A1`,`A2`,`A3`.
_Рисунок 2. Периферия, доступная прототипу._
![../../../.pic/Labs/board%20files/nexys_rf2.jpg](../../../.pic/Labs/board%20files/nexys_rf2.jpg)
- ### Переключатели и кнопки.
Запись информации по адресу А3.
Для работы с регистровым файлом необходимо выставлять сигналы адресов и данных.
У платы недостаточно переключателей для такого количества входов регистрового файла, поэтому адреса и данные задаются одним источником ввода:
![../../../.pic/Labs/board%20files/nexys_rf3.jpg](../../../.pic/Labs/board%20files/nexys_rf3.jpg)
1. Ввод **адресов** (`read_addr1_i`/`read_addr2_i`/`write_addr_i`) регистрового файла осуществляется через переключатели `SW[14:0]`. Соответствие следующее:
Чтение по адресам А1 и А2.
- `SW[ 4: 0]``write_addr_i`
- `SW[ 9: 5]``read_addr2_i`
- `SW[14:10]``read_addr1_i`
![../../../.pic/Labs/board%20files/nexys_rf4.jpg](../../../.pic/Labs/board%20files/nexys_rf4.jpg)
Для того чтобы выставить введенные адреса на входные порты регистрового файла, необходимо нажать кнопку `BTND` (`addr_en` на _рис. 2_). Таким образом, происходит запоминание адресов в элемент памяти.
1. Ввод **данных** (`write_data_i`) регистрового файла осуществляется через переключатели `SW[15:0]`. Таким образом, можно выставить только младшие 16 бит данных. Для записи введенных данных по адресу `write_addr_i` используется кнопка `BTNR` (`we` на _рис. 2_).
- ### Светодиоды
Для того чтобы считать информацию по любому адресу, достаточно установить желаемый адрес на один из портов чтения и нажать на кнопку чтения.
Светодиоды `LED[14:0]` отображают адреса (`read_addr1_i`/`read_addr2_i`/`write_addr_i`), которые выставлены в данный момент на порты регистрового файла:
![../../../.pic/Labs/board%20files/nexys_rf5.jpg](../../../.pic/Labs/board%20files/nexys_rf5.jpg)
- `LED[ 4: 0]``write_addr_i`
- `LED[ 9: 5]``read_addr2_i`
- `LED[14:10]``read_addr1_i`
Попробуйте записать информацию в нулевой регистр, затем по другим адресам, после чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).
- ### Семисегментные индикаторы
На левом блоке семисегментных индикаторов (индикаторы 7-4) отображется значение младших 16-ти бит порта `read_data1_o`, а на правом блоке семисегментных индикаторов (индикаторы 3-0) отображается значение младших 16-ти бит порта `read_data2_o`.
Числа отображаются в **шестнадцатеричном** формате.
## Выполнение операций с регистровым файлом на прототипе
Доступные операции: запись, чтение.
- ### Запись
Рассмотрим последовательность действий, которые надо осуществить для записи в регистровый файл, на примере.
1. Запишем значение `0x1234` в регистр `5`.
1. Сразу после прошивки, как видно по негорящим светодиодам, на портах регистрового файла выставлены нулевые адреса. Нам нужно изменить адрес записи, поэтому выставим на переключателях значение `5` и нажмем кнопку `BTND` (см. _рис. 3_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr_5.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr_5.drawio.svg)
_Рисунок 3. Выставление адреса `5` на порт `write_addr_i` регистрового файла._
Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес `5`.
1. Чтобы записать данные в указанный (пятый) регистр, выставим на переключателях значение `0x1234` и нажмем кнопку `BTNR` (см. _рис. 4_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data_1234.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data_1234.drawio.svg)
_Рисунок 4. Запись `0x1234` в регистр `5`._
1. Запишем значение `0x5678` в регистр `6`.
1. Выставим на блок переключателей, отвечающих за порт записи, значение `6` и нажмем кнопку `BTND` (см. _рис. 5_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr_6.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr_6.drawio.svg)
_Рисунок 5. Выставление адреса `6` на порт `write_addr_i` регистрового файла._
Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес `6`.
1. Чтобы записать данные в указанный (шестой) регистр, выставим на переключателях значение `0x5678` и нажмем кнопку `BTNR` (см. _рис. 6_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data_5678.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data_5678.drawio.svg)
_Рисунок 6. Запись `0x5678` в регистр `6`._
- ### Чтение
Рассмотрим последовательность действий, которые надо осуществить для чтения из регистрового файла, на примере. Прочитаем из регистров `5` и `6` заранее записанные значения `0x1234` и `0x5678` соответственно и выведем его на оба блока семисегментных индикаторов 7-0 и 3-0.
Выставим значение `5` и `6` на блоки переключателей `ra1` и `ra2` (см. _рис. 2_) соответственно, и нажмем кнопку `BTND`, чтобы обновить адрес значением с переключателей (см. _рис. 7_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg)
_Рисунок 7. Чтение из регистров `5` и `6`._
Обратите внимание на то, что для чтения достаточно выставить нужный адрес на порт регистрового файла, и содержимое регистра оказывается считанным.
> [!NOTE]
> Кнопка сброса `CPU_RESETN` не сбрасывает содержимое регистрового файла, т.к. сигнал сброса не заведен в модуль регистрового файла, а модуль `nexys_rf_riscv` самостоятельно его не сбрасывает. Для сброса можно осуществить перепрошивку ПЛИС.
Попробуйте записать информацию в нулевой регистр, затем по другим адресам. После чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).