mirror of
https://github.com/MPSU/APS.git
synced 2025-09-17 10:00:40 +00:00
85 lines
7.3 KiB
Markdown
85 lines
7.3 KiB
Markdown
# Проверка работы регистрового файла на ПЛИС
|
||
|
||
После того, как вы проверили на моделировании регистровый файл, вам необходимо проверить его работу на прототипе в ПЛИС.
|
||
|
||
Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md).
|
||
|
||
На _рис. 1_ представлена схема прототипа в ПЛИС.
|
||
|
||

|
||
|
||
_Рисунок 1. Структурная схема модуля `nexys_rf_riscv`._
|
||
|
||
## Описание используемой периферии
|
||
|
||
Периферия показана на _рис. 2_.
|
||
|
||

|
||
|
||
_Рисунок 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_).
|
||
|
||

|
||
|
||
_Рисунок 3. Выставление адреса 5 на порт `write_addr_i` регистрового файла._
|
||
|
||
Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес 5.
|
||
1. Чтобы записать данные в регистр выставим на переключателях значение 0x1234 и нажмем кнопку `BTNR` (смотри _рис. 4_).
|
||
|
||

|
||
|
||
_Рисунок 4. Запись 0x1234 в регистр 5._
|
||
|
||
- ### Чтение
|
||
|
||
Рассмотрим последовательность действий, которые надо осуществить для чтения из регистрового файла, на примере. Прочитаем из регистра 5 заранее записанное значение 0x1234 и выведем его на оба блока семисегментных индикаторов 7-0 и 3-0.
|
||
|
||
Выставим значение 5 на блоки переключателей `ra1` и `ra2` (см. _рис. 2_), и нажмем кнопку `BTND`, чтобы обновить адрес значением с переключателей (см. _рис. 5_).
|
||
|
||

|
||
|
||
_Рисунок 5. Чтение из регистра 5._
|
||
|
||
Обратите внимание на то, что для чтения достаточно выставить нужный адрес на порт регистрового файла, и содержимое регистра оказывается считанным.
|
||
|
||
> [!NOTE]
|
||
> Кнопка сброса `CPU_RESETN` не сбрасывает регистровый файл, т.к. сигнал сброса не заведен в модуль регистрового файла, а модуль `nexys_rf_riscv` самостоятельно не сбрасывает регистровый файл. Для сброса можно осуществить перепрошивку ПЛИС.
|
||
|
||
Попробуйте записать информацию в нулевой регистр, затем по другим адресам. После чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).
|