Разработка графического контроллера для игрового автомата

Заказчик

Российская компания, занимающаяся выпуском игровых автоматов.

Задача

Проанализировать возможности создания игрового автомата с разрешением 1600х1200 и частотой кадровой развёртки 60Гц. Видеоинформация должна формироваться из четырёх слоёв методом наложения друг на друга с учётом канала прозрачности в каждом слое.

Каждый слой изображения формируется из готовых знакомест 8х8 пикселей, общее количество знакомест — 128К. Знакоместа хранятся в постоянном запоминающем устройстве и после включения питания перезагружаются для последующего считывания в более быструю память DDR. Указатели знакомест считываются из видеопамяти для каждого слоя независимо.

Текущий адрес видеопамяти для считывания указателя знакоместа формируется из текущего номера строки, номера знакоместа в строке и данных о смещении по горизонтали и вертикали. Информация о текущем смещении формируется независимо для каждого слоя и может быть не кратна 8 пикселям, для каждого слоя она устанавливается софт-процессором и в процессе работы может изменяться. Смещения могут быть положительные и отрицательные.

Решение

После проведения предварительной оценки и анализа требуемых ресурсов и новых программных модулей, а также для расчёта времени, необходимого для выполнения поставленной задачи (с учётом имеющихся программных модулей и IP-ядер), были поставлены следующие цели: оценить возможности создания игровой платформы и провести тестирование основных модулей на готовой плате от Xilinx Spartan-3A DSP FPGA Video Kit.

1. Разработка концепции устройства

В проекте реализовано и проверено три основных алгоритма формирования видеоданных:

  • Режим формирования видеоданных с кэшированием одной строки. В данном режиме использовались два буфера внутренней блочной памяти с длинной на всю строку в 2048 символов и шириной в 24 бита (по 8 бит на каждую цветовую компоненту R, G и B). Алгоритм заключается в том, что во время активной части строки, пока информация считывается из одного буфера, другой буфер заполняется следующей сформированной строкой. Т.е. за время активной части строки и интервала гашения по строке необходимо произвести вычитку информации о текущей строке знакоместа по всем четырём слоям, учитывая сдвиги, а также произвести их смешивание и загрузку в блочную память — и так по всей строке. С учётом того, что вывод знакомест может быть случайный (т.е. чтение данных из DDR-памяти не линейно, на закрытие банков памяти требуется дополнительное время), общее время формирования новой строки оказывается больше, чем время прохода строки по горизонтали для разрешения 1600х1200х60. Эта особенность в результате ограничивает применение данного алгоритма.
     
  • Режим формирования видеоданных с кэшированием восьми строк, т.е. на ширину всего знакоместа. Так же как и в первом алгоритме, здесь используется два буфера: один считывается, а второй формируется. В данном алгоритме весь знакомест загружается в память DDR линейно в одну строку, что позволяет считать весь знакомест без закрытия банков. В результате это существенно уменьшает время на формирование новой строки при разрешении 1600х1200х60. Однако данный режим требует много внутренней блочной памяти для данного случая — 2 (два буфера) х 8 (восемь строк) х 3 (три компоненты RGB) = 48 банков памяти. Данная цифра превышает количество банков внутренней памяти в закладываемом в проект ПЛИС, что также ограничивает применение данного алгоритма.
     
  • Режим формирования видеоданных с поочерёдным открытием банков памяти DDR. Суть данного алгоритма заключается в том, что во всех четырёх банках памяти DDR лежат одинаковые копии всех знакомест, и каждая последующая вычитка производится из очередного банка, с автоматическим закрытием текущего. Т.о. к тому времени, когда снова начнётся считывание из этого банка, он уже будет находится в закрытом состоянии. Такой подход позволяет проводить вычитку без прерывания чтения на всей активной части строки для максимального разрешения.

Последний алгоритм был взят за основу в данном проекте. Он существенно экономит внутренние ресурсы ПЛИС и не накладывает ограничения на производительность системы в целом. Недостаток данного алгоритма заключается в том, что для четырёх слоёв необходимо использование двух независимых специальных контроллеров и большого объёма памяти DDR.

2. Разработка аппаратной платформы

Основой платы является ПЛИС XC3SD3400A-4FGG676CES от Xilinx.

К данной ПЛИС подключены следующие модули и контроллеры:

  • Контроллер выхода видеосигнала CH7301C-TF DVI-I. Применялся для вывода графической информации на монитор.
  • Модуль памяти DDR2 с шиной данных в 32 разряда. Использовался для хранения знакомест 8х8 пикселей.
  • Статическая память ZBT RAM CY7C1354C-166AXC (ZBT — Zero-bus turnaround). Использовалась для хранения указателей знакомест для двух слоёв.
  • Генератор сетки частот IDT5V9885PFGI.
  • Модули защиты и формирователи питающих напряжений для платы.

Рисунок 1. Структурная схема ПЛИС XC3SD3400A-4FGG676CES компании Xilinx

3. Разработка программного обеспечения

Основной язык написания модулей — VHDL.

В процессе разработки написаны и модифицированы следующие модули:

  • Модифицирован контроллер памяти DDR, позволяющий делать вычитку знакомест в реальном времени во время активной части строки.
  • Разработан арбитр данных контроллера DDR для разделения шин записи от софт-процессора и шины чтения для логики формирования слоёв.
  • Разработан блок разделения данных для слоёв во время вычитки из памяти (с учётом горизонтальных сдвигов в каждом слое).
  • Разработан модуль смешивания слоёв с учётом канала прозрачности в каждом слое.
  • Сделан DVI-контроллер для формирования управляющих сигналов для внутренней логики и сигналов DVI-интерфейса.
  • Разработан контроллер ZBT RAM, позволяющий писать и читать адреса знакомест для каждого слоя во время активной части строки.
  • Сделан арбитр контроллера ZBT RAM, для разделения шин записи от софт-процессора и шины чтения для логики формирования адреса для каждого слоя.
  • Разработан модуль генерации адресов для каждого слоя с учётом горизонтальных и вертикальных сдвигов в каждом слое.
  • Подключён софт-процессор PicoBlaze для управления модулями.
  • Написана программа на ассемблере для PicoBlaze. Она позволяет:
  1. Формировать различный набор знакомест и загружать их в память DDR.
  2. Формировать указатели для знакомест и загружать их в видеопамять.
  3. Формировать данные для сдвигов и устанавливать их по команде пользователя.
  4. Обрабатывать команды полученные по RS-232.
     

Рисунок 2. Структурная схема реализованного программного обеспечения

Преимущества созданного прототипа

  • Использование готовой платы Spartan-3A DSP FPGA Video Kit существенно сократило время на реализацию проекта.
  • С учётом существующей на данной плате периферии и рекомендаций по ограничению используемой системной частоты проведённые тесты на производительность системы в целом позволили существенно снизить ограничения, которые могли бы возникнуть при производстве собственной платы.
  • В результате всех проведённых отдельных и комплексных тестов модулей, получена полная функциональная схема реализации полноценного проекта в целом.

Недостатки прототипа

  • Основным недостатком являются недостаточные ресурсы платы. В частности выявлена нехватка внешней памяти DDR для хранения знакомест для всех четырёх слоёв, поэтому в проекте использовались только два слоя. Также выражена нехватка ресурсов на реализацию 32-разрядного софт-процессора для полнофункционального управления и взаимодействия всей платформы.