Сброс и инициализация встроенной ПЛИС

Для правильной работы микросхему ПЛИС (FPGA) нужно корректно сбросить и загрузить в неё исполняемый двоичный код. Поскольку у Tibbit-модулей M1 только четыре линии связи с процессором, выделенную линию сброса сделать не удалось. Поэтому сброс ПЛИС формируется манипуляциями с линиями -CS и SCLK.

Процедура сброса ПЛИС такова (за образцом см. tbt57_init() в файле tbt57_common.tbs проекта test_tibbit_57_sled):

  • Установите линию -CS в HIGH.
  • Установите линию SCLK в LOW.
  • Установите линию SCLK в HIGH. Теперь ПЛИС находится в состоянии сброса.
  • Выдержите небольшую паузу (необязательно).
  • Установите линию -CS в LOW.
  • Установите линию SCLK в LOW.
  • Установите линию SCLK в HIGH. Теперь ПЛИС выведена из сброса.

Если всё это звучит туманно, вот принципиальная схема цепи сброса:

Схема цепи сброса Tibbit-модуля #57.

Цепь построена на D-триггере, тактируемом линией SCLK. Информационный вход D триггера подключён к линии -CS. Линия сброса ПЛИС (активный уровень LOW) берётся с инверсного выхода -Q триггера. Если установить -CS в HIGH и создать на линии SCLK передний фронт, триггер защёлкивается, и его инверсный выход -Q становится LOW. Микросхема ПЛИС переходит в состояние сброса. Чтобы вывести ПЛИС из сброса, нужно установить -CS в LOW и создать ещё один передний фронт на линии SCLK.

Когда ПЛИС выведена из сброса, не переключайте линию SCLK, пока линия -CS в HIGH (неактивна). Это не должно вызвать затруднений, так как формировать тактовые импульсы SPI при неактивном выборе микросхемы незачем.

После сброса в ПЛИС нужно загрузить исполняемый двоичный файл (за образцом см. tbt57_init() в файле tbt57_common.tbs проекта test_tibbit_57_sled). Какой именно двоичный файл загружать, зависит от нужной функции ПЛИС. Полный список имеющихся конфигураций приведён на странице «Реализованные конфигурации».

Ключевые моменты:

  • Используется режим SPI 2; байты передаются старшим битом (MSB) вперёд.
  • Байты исполняемого двоичного файла (IR_Remote_bitmap.bin) отправляются в ПЛИС один за другим.
  • После отправки последнего байта программа формирует ещё 50 тактовых циклов. Зачем это нужно, неизвестно; мы просто следовали спецификации Lattice.
  • После этого успех или неудача загрузки проверяется по линии DONE/MISO.

Как следует из названия, линия DONE/MISO выполняет две функции. Когда -CS активна (LOW), эта линия работает как стандартная линия MISO для функций SPI. Когда линия -CS в HIGH, по этой линии передаётся состояние выхода CDONE ПЛИС. Этот выход становится HIGH, если загрузка двоичного файла прошла успешно.

Исходный материал Tibbo обновлён 12 апреля 2022Оригинал на docs.tibbo.com · Сообщить об ошибке