Проверка работы регистрового файла на ПЛИС
После того, как вы проверили на моделировании регистровый файл, вам необходимо проверить его работу на прототипе в ПЛИС.
Инструкция по реализации прототипа описана здесь.
На рис. 1 представлена схема прототипа в ПЛИС.
Рисунок 1. Структурная схема модуля nexys_rf_riscv
.
Описание используемой периферии
Периферия показана на рис. 2.
Рисунок 2. Описание периферии, доступной прототипу, в виде рисунка.
-
Переключатели и кнопки.
Для работы с регистровым файлом необходимо выставлять сигналы адресов и данных. У платы недостаточно переключателей для такого количества входов регистрового файла, поэтому адреса и данные задаются одним источником ввода:
-
Ввод адресов (
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). Таким образом, происходит запоминание адресов в элемент памяти. -
Ввод данных (
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.
-
Сразу после прошивки, как видно по не горящим светодиодам, на портах регистрового файла выставлены нулевые адреса. Нам нужно изменить адрес записи, поэтому выставим на переключателях значение 5 и нажмем кнопку
BTND
(смотри рис. 3).Рисунок 3. Выставление адреса 5 на порт
write_addr_i
регистрового файла.Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес 5.
-
Чтобы записать данные в регистр выставим на переключателях значение 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).