Files
APS/Labs/03. Register file and memory/board files/README.md
2024-02-27 16:00:55 +03:00

82 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Проверка работы регистрового файла на ПЛИС
Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md)
> [!NOTE]
> ## Список подключенной периферии
>
> - _Переключатели_ — установки адреса, данных.
> - `BTND` — запись
>
> ...
## Описание используемой периферии
Периферия показана на _рис. 2_.
![../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg)
_Рисунок 2. Описание периферии, доступной прототипу, в виде рисунка._
- ### Переключатели и кнопки.
Для работы с регистровым файлом, необходимо выставлять сигналы адресов и данных.
У платы недостаточно переключателей для такого количества входов регистрового файла, поэтому адреса и данные задаются одним источником ввода:
1. Ввод **адресов** (`read_addr1_i`/`read_addr2_i`/`write_addr_i`) регистрового файла осуществляется через переключатели `SW[14:0]`. Соответствие следующее:
- `SW[ 4: 0]``write_addr_i`
- `SW[ 9: 5]``read_addr2_i`
- `SW[14:10]``read_addr1_i`
Для того чтобы выставить введенные адреса на входные порты регистрового файла, необходимо нажать кнопку `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`), которые выставлены в данный момент на порты регистрового файла:
- `LED[ 4: 0]``write_addr_i`
- `LED[ 9: 5]``read_addr2_i`
- `LED[14:10]``read_addr1_i`
- ### Семисегментные индикаторы
На левом блоке семисегментных индикаторов (индикаторы 7-4) отображаются нижние 16 бит порта `read_data1_o`, а не правом блоке семисегментных индикаторов (индикаторы 3-0) отображаются нижние 16 бит порта `read_data2_o`.
Числа отображаются в **шестнадцатеричном** формате.
## Выполнение операций с регистровым файлом на прототипе
Доступные операции: запись, чтение.
- ### Запись
Рассмотрим последовательность действий, необходимых для осуществления записи в регистровый файл на примере. Запишем значение 0x1234 в регистр 5.
1. Сразу после прошивки, как видно по не горящим светодиодам, на портах регистрового файла выставлены нулевые адреса. Нам нужно изменить адрес записи, поэтому выставим на переключателях значение 5 и нажмем кнопку `BTND` (смотри _рис. 3_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr.drawio.svg)
_Рисунок 3. Выставление адреса 5 на порт `write_addr_i` регистрового файла._
Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес 5.
1. Чтобы записать данные в регистр выставим на переключателях значение 0x1234 и нажмем кнопку `BTNR` (смотри _рис. 4_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data.drawio.svg)
_Рисунок 4. Запись 0x1234 в регистр 5._
- ### Чтение
Рассмотрим последовательность действий, необходимых для осуществления чтения из регистрового файла на примере. Прочитаем из регистра 5 заранее записанное значение 0x1234 и выведем его на оба блока семисегментных индикаторов 7-0 и 3-0.
Выставим значение 5 на блоки переключателей `ra1` и `ra2` (см. _рис. 2_), и нажмем кнопку `BTND`, чтобы обновить адрес значением с переключателей (см. _рис. 5_).
![../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg)
_Рисунок 5. Чтение из регистра 5._
Обратите внимание на то, что для чтения достаточно выставить нужный адрес на порт регистрового файла, и содержимое регистра оказывается считанным.
Попробуйте записать информацию в нулевой регистр, затем по другим адресам. После чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).