Проверка работы регистрового файла на ПЛИС
После того, как вы проверили на моделировании регистровый файл, вам необходимо проверить его работу на прототипе в ПЛИС.
Инструкция по реализации прототипа описана здесь.
На рис. 1 представлена схема прототипа в ПЛИС.
Рисунок 1. Структурная схема модуля nexys_rf_riscv.
Описание используемой периферии
Периферия показана на рис. 2.
Рисунок 2. Описание периферии, доступной прототипу, в виде рисунка.
-
Переключатели и кнопки.
Для работы с регистровым файлом необходимо выставлять сигналы адресов и данных. У платы недостаточно переключателей для такого количества входов регистрового файла, поэтому адреса и данные задаются одним источником ввода:
-
Ввод адресов (
read_addr1_i/read_addr2_i/write_addr_i) регистрового файла осуществляется через переключателиSW[14:0]. Соответствие следующее:SW[ 4: 0]—write_addr_iSW[ 9: 5]—read_addr2_iSW[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_iLED[ 9: 5]—read_addr2_iLED[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).