Прототип графического контроллера для игрового автомата
Заказчик
Российская компания, занимающаяся выпуском игровых автоматов.
Задача
Проанализировать возможности создания игрового автомата с разрешением 1600х1200 и частотой кадровой развертки 60Гц. Видеоинформация должна формироваться из четырёх слоёв методом наложения друг на друга с учётом канала прозрачности в каждом слое.
Каждый слой изображения формируется из готовых знакомест 8х8 пикселей, общее количество знакомест — 128К. Знакоместа хранятся в постоянном запоминающем устройстве и после включения питания перезагружаются для последующего считывания в более быструю память DDR. Указатели знакомест считываются из видеопамяти для каждого слоя независимо.
Текущий адрес видеопамяти для считывания указателя знакоместа формируется из текущего номера строки, номера знакоместа в строке и данных о смещении по горизонтали и вертикали. Информация о текущем смещении формируется независимо для каждого слоя и может быть не кратна 8 пикселям, для каждого слоя она устанавливается софт-процессором и в процессе работы может изменяться. Смещения могут быть положительные и отрицательные.
Решение
После проведения предварительной оценки, анализа требуемых ресурсов и новых программных модулей, а также расчета времени, необходимого для выполнения поставленной задачи (с учётом имеющихся программных модулей и IP-ядер), были поставлены следующие цели: оценить возможности создания игровой платформы и провести тестирование основных модулей на готовой плате от Xilinx Spartan-3A DSP FPGA Video Kit.
Концепция
В проекте реализовано и проверено три основных алгоритма формирования видеоданных:
- Режим формирования видеоданных с кэшированием одной строки. В данном режиме использовались два буфера внутренней блочной памяти с длинной на всю строку в 2048 символов и шириной в 24 бита (по 8 бит на каждую цветовую компоненту R, G и B). Алгоритм заключается в том, что во время активной части строки, пока информация считывается из одного буфера, другой буфер заполняется следующей сформированной строкой. Т.е. за время активной части строки и интервала гашения по строке необходимо произвести вычитку информации о текущей строке знакоместа по всем четырём слоям, учитывая сдвиги, а также произвести их смешивание и загрузку в блочную память — и так по всей строке. С учетом того, что вывод знакомест может быть случайный (т.е. чтение данных из DDR-памяти не линейно, на закрытие банков памяти требуется дополнительное время), общее время формирования новой строки оказывается больше, чем время прохода строки по горизонтали для разрешения 1600х1200х60. Эта особенность в результате ограничивает применение данного алгоритма.
- Режим формирования видеоданных с кэшированием восьми строк, т.е. на ширину всего знакоместа. Так же как и в первом алгоритме, здесь используется два буфера: один считывается, а второй формируется. В данном алгоритме весь знакомест загружается в память DDR линейно в одну строку, что позволяет считать весь знакомест без закрытия банков. В результате это существенно уменьшает время на формирование новой строки при разрешении 1600х1200х60. Однако данный режим требует много внутренней блочной памяти, для данного случая — 2 (два буфера) х 8 (восемь строк) х 3 (три компоненты RGB) = 48 банков памяти. Данная цифра превышает количество банков внутренней памяти в закладываемом в проект ПЛИС, что также ограничивает применение данного алгоритма.
- Режим формирования видеоданных с поочерёдным открытием банков памяти DDR. Суть данного алгоритма заключается в том, что во всех четырёх банках памяти DDR лежат одинаковые копии всех знакомест, и каждая последующая вычитка производится из очередного банка, с автоматическим закрытием текущего. Т.о. к тому времени, когда снова начнётся считывание из этого банка, он уже будет находится в закрытом состоянии. Такой подход позволяет проводить вычитку без прерывания чтения на всей активной части строки для максимального разрешения.
Последний алгоритм был взят за основу в данном проекте. Он существенно экономит внутренние ресурсы ПЛИС и не накладывает ограничения на производительность системы в целом. Недостаток данного алгоритма заключается в том, что для четырёх слоёв необходимо использование двух независимых специальных контроллеров и большого объёма памяти DDR.
Аппаратная платформа
Основой платы является ПЛИС XC3SD3400A-4FGG676CES от Xilinx.
К данной ПЛИС подключены следующие модули и контроллеры:
- Контроллер выхода видеосигнала CH7301C-TF DVI-I. Применялся для вывода графической информации на монитор.
- Модуль памяти DDR2 с шиной данных в 32 разряда. Использовался для хранения знакомест 8х8 пикселей.
- Статическая память ZBT RAM CY7C1354C-166AXC (ZBT — Zero-bus turnaround). Использовалась для хранения указателей знакомест для двух слоёв.
- Генератор сетки частот IDT5V9885PFGI.
- Модули защиты и формирователи питающих напряжений для платы.

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

Структурная схема реализованного программного обеспечения
Преимущества
- Использование готовой платы Spartan-3A DSP FPGA Video Kit существенно сократило время на реализацию проекта.
- С учетом существующей на данной плате периферии и рекомендаций по ограничению используемой системной частоты проведенные тесты на производительность системы в целом позволили существенно снизить ограничения, которые могли бы возникнуть при производстве собственной платы.
- В результате всех проведенных отдельных и комплексных тестов модулей, получена полная функциональная схема реализации полноценного проекта в целом.
Недостатки
- Основным недостатком являются недостаточные ресурсы платы. В частности выявлена нехватка внешней памяти DDR для хранения знакомест для всех четырёх слоёв, поэтому в проекте использовались только два слоя. Также выражена нехватка ресурсов на реализацию
32-разрядного софт-процессора для полнофункционального управления и взаимодействия всей платформы.
|
Языки программирования
|
VHDL, Assembler
|
|
Средства разработки
|
ISE Xilinx
|
|
Средства управления проектом
|
DotProject, SVN
|
|
Трудозатраты
|
80 человеко-дней
|
|
Срок выполнения проекта
|
3 месяца
|
|