Files
APS/Labs/04. Primitive programmable device/board files/README.md
Andrei Solodovnikov a28002e681 WIP: APS cumulative update (#98)
* WIP: APS cumulative update

* Update How FPGA works.md

* Перенос раздела "Последовательностная логика" в отдельный док

* Исправление картинки

* Исправление оформления индексов

* Переработка раздела Vivado Basics

* Добавление картинки в руководство по созданию проекта

* Исправление ссылок в анализе rtl

* Обновление изображения в sequential logic

* Исправление ссылок в bug hunting

* Исправление ссылок

* Рефактор руководства по прошивке ПЛИС

* Mass update

* Update fig_10

* Restore fig_02
2024-09-02 10:20:08 +03:00

6.0 KiB
Raw Blame History

Проверка работы CYBERcobra на ПЛИС

После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС.

Инструкция по реализации прототипа описана здесь.

На рис. 1 представлена схема прототипа в ПЛИС.

../../../.pic/Labs/board%20files/nexys_cobra_structure.drawio.svg

Рисунок 1. Структурная схема модуля nexys_CYBERcobra.

Прототип позволяет потактово исполнять программу, прошитую в память инструкций. Также прототип отображает операцию исполняемую в данный момент.

Note

Объект модуля instr_mem в модуле CYBERcobra должен называться imem. Т.е. строка создания сущности модуля должна выглядеть следующим образом: instr_mem imem(...).

Описание используемой периферии

  • Переключатели.

    Значение с переключателей SW[15:0] подаются напрямую на порт sw_i модуля дизайна.

  • Кнопки

    • BTND — при нажатии создает тактовый импульс, поступающий на порт тактирования clk_i модуля дизайна.
    • CPU_RESET — соединен со входом rst_i модуля дизайна. Поскольку в модуле CYBERcobra используется синхронный сброс (то есть сигнал сброса учитывается только во время восходящего фронта тактового сигнала), то для сброса модуля CYBERcobra и вложенных в него модулей необходимо при зажатой кнопке сброса еще нажать кнопку тактирования.
  • Светодиоды

    Светодиоды LED[15:0] отображают младшие 16 бит значения, выставленного в данный момент на порте out_o модуля дизайна.

  • Семисегментные индикаторы

    Семисегментные индикаторы разбиты на 3 блока (см. рис. 1):

    • out — отображают младшие 8 бит значения, выставленного в данный момент на порте out_o модуля дизайна, в виде шестнадцатеричного числа.
    • PC — отображают в виде шестнадцатеричного числа младшие 8 бит программного счетчика, который подается на вход addr_i модуля памяти инструкций.
    • operation — отображают операцию, исполняемую процессором на текущем такте.

Операции, отображаемые прототипом

Соответствие типа инструкции отображаемой операции:

  1. Вычислительные — соответствует опкодам вычислительных операций АЛУ.
  2. Инструкция загрузки константы — LI (от load immediate).
  3. Инструкция загрузки из внешних устройств — IN (от input).
  4. Безусловный переход — JUMP.
  5. Инструкций условного перехода — соответствует опкодам операций сравнения АЛУ.

Во время исполнения вычислительных инструкций и инструкций условного перехода могут встретиться нелегальные операции (отображается как ILL, от illegal). Операция считается нелегальной в следующих случаях:

  • Если в поле инструкции, отвечающем за операция АЛУ, указана битовая последовательность, не входящая в диапазон допустимых значений.
  • Если инструкция является вычислительной, но в поле инструкции, отвечающем за операция АЛУ, указана битовая последовательность, соответствующая операции, вычисляющей флаг. И обратный случай.

Инструкция 0 0 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxx отображается как NOP (от no operation).

Соответствие операции ее отображению на семисегментных индикаторах представлено на рис. 2:

'../../../.pic/Labs/board%20files/nexys_cobra_operations.drawio.svg'

Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах.

Демонстрационная программа

В качестве демонстрационной программы, предлагается использовать program.mem. Описание ее работы можно прочитать в разделе #финальный обзор.