* WIP: APS cumulative update * Update How FPGA works.md * Перенос раздела "Последовательностная логика" в отдельный док * Исправление картинки * Исправление оформления индексов * Переработка раздела Vivado Basics * Добавление картинки в руководство по созданию проекта * Исправление ссылок в анализе rtl * Обновление изображения в sequential logic * Исправление ссылок в bug hunting * Исправление ссылок * Рефактор руководства по прошивке ПЛИС * Mass update * Update fig_10 * Restore fig_02
8.7 KiB
Проверка работы регистрового файла на ПЛИС
После того, как вы проверили на моделировании регистровый файл, вам необходимо проверить его работу на прототипе в ПЛИС.
Инструкция по реализации прототипа описана здесь.
На рис. 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.
-
-
Запишем значение
0x5678в регистр6.-
Выставим на блок переключателей, отвечающих за порт записи, значение
6и нажмем кнопкуBTND(см. рис. 5).Рисунок 5. Выставление адреса
6на портwrite_addr_iрегистрового файла.Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес
6. -
Чтобы записать данные в указанный (шестой) регистр, выставим на переключателях значение
0x5678и нажмем кнопкуBTNR(см. рис. 6).Рисунок 6. Запись
0x5678в регистр6.
-
-
-
Чтение
Рассмотрим последовательность действий, которые надо осуществить для чтения из регистрового файла, на примере. Прочитаем из регистров
5и6заранее записанные значения0x1234и0x5678соответственно и выведем его на оба блока семисегментных индикаторов 7-0 и 3-0.Выставим значение
5и6на блоки переключателейra1иra2(см. рис. 2) соответственно, и нажмем кнопкуBTND, чтобы обновить адрес значением с переключателей (см. рис. 7).Рисунок 7. Чтение из регистров
5и6.Обратите внимание на то, что для чтения достаточно выставить нужный адрес на порт регистрового файла, и содержимое регистра оказывается считанным.
Note
Кнопка сброса
CPU_RESETNне сбрасывает содержимое регистрового файла, т.к. сигнал сброса не заведен в модуль регистрового файла, а модульnexys_rf_riscvсамостоятельно его не сбрасывает. Для сброса можно осуществить перепрошивку ПЛИС.
Попробуйте записать информацию в нулевой регистр, затем по другим адресам. После чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).