Появился модуль VGA для Arduino (оформленный как плата-шилд): Gameduino [1]. Проект с открытым исходным кодом и принципиальной схемой. Здесь описывается процесс самостоятельного изготовления Gameduino.
[Сборка Gameduino]
Решил заказать основные детали для gameduino на digikey.com. Главные детали, которых нет:
1. U2, XC3S200AVQ100 FPGA XILINX (XC3S200A-4VQG100C). XC3S200A, корпус VQFP100. На Digikey 122-1594-ND site:digikey.com, цена $12.37 (365 рублей).
2. QG1, SM77, производитель pletronics.com. Генератор на 25 МГц, корпус SMD 5X7. На DigiKey при покупке 1000 шт. цена около $0.6, при покупке 100 шт. цена $1.10250 (535-10078-1-ND sity:digikey.com, part number производителя ASV-25.000MHZ-E-T).
3. U5, LD117AS12TR корпус SOT-223. Регулятор на 1.2 V, входное напряжение 5V. На Digikey при покупке 100 шт. цена $0.30590 (497-6974-1-ND site:digikey.com, part number производителя LD1117S12CTR).
4. U4, AT45DB041BWIDE Atmel. Память SPI на 4 мегабит, корпус 8-SOIC (SOIC8, EIAJ SOIC, ширина 0.210"). На DigiKey цена не указана (похоже, что в продаже их нет - AT45DB041B-SC-ND, part number производителя AT45DB041B-SC). Посоветовали AT25DF041A (на DigiKey AT25DF041A-SH-B-ND site:digikey.com), однако по ножкам она оказалась несовместима. Я нашел другую микрушку AT45DB041D-SU. На Digikey при покупке 100 шт. цена $1.29 (AT45DB041D-SU-ND site:digikey.com, part number производителя AT45DB041D-SU).
Сборка большого труда не составила, так как схема Gameduino и плата довольно простые. Так что пайка доставила удовольствие.
Коротко опишу назначение составных частей принципиальной схемы.
Коннекторы X1 и X4 - выход видео VGA и стереофонический аудиовыход. На них выводится изображение и звук.
U1 - так на принципиальной схеме обозначено подключение к внешней управляющей плате. Подключение расположено по краям платы Gameduino в виде однорядных коннекторов с шагом 2.54 мм. Коннекторы расположены так, что из Gameduno получается стандартный шилд (дочерняя плата) для Arduino (или metaboard). Однако можно также подключить Gameduino к любой другой плате с микроконтроллером, имеющим интерфейс SPI и соответствующие напряжения питания 3.3V и 5V (питается Gameduino от внешней управляющей платы). Моя версия Gameduino имеет встроенный стабилизатор на 3.3V (IC1), поэтому достаточно одного напряжения питания - только 5V.
U2BGND, U2B3, U2BVCCAUX, U2B0, U2B2, U2B1, U2BVCCINT - так на схеме показаны различные группы выводов микросхемы FPGA Xilinx XC3S200A-4VQG100C (семейство Spartan-3A). Она выполняет все необходимые функции Gameduino - формирование видео и звука по командам управляющего микроконтроллера.
IC1, U5 - интегральные стабилизаторы напряжения на 3.3V и 1.2V соответственно. Эти напряжения необходимы для питания FPGA.
QG1 - кварцевый генератор (не просто кварц!), который выдает частоту 25 МГц для тактирования FPGA.
U4 - микросхема памяти с интерфейсом SPI для хранения микропрограммы для FPGA.
SJ1 - по умолчанию замкнутая перемычка, находится она на обратной стороне платы. Служит для отключения сигнала выборки интерфейса SPI (зачем - неизвестно).
SJ2 - по умолчанию замкнутая перемычка, находится она на обратной стороне платы. Служит для отключения при необходимости стабилизатора IC1 на 3.3V - в том случае, что используется Arduino-совместимая управляющая плата, на которой уже есть источник питания 3.3V.
X2X3 - коннектор для JTAG, интерфейс программирования Gameduino. Через этот интерфейс можно залить новую прошивку (микропрограмму) для FPGA.
R1 .. R9 - резисторы для ЦАП, формирующего сигналы R, G, B интерфейса VGA.
C1R10, C2R11 - интегрирующие цепочки ФНЧ для правого и левого аудиоканала соответственно. Служат для сглаживания импульсов ШИМ.
[Компиляция исходного кода Verilog для Gameduino]
Самым трудным делом оказалось скомпилировать и прошить в плату исходный код Verilog, для меня как для новичка это оказалось непросто. Для начала на AliExpress был куплен программатор Xilinx Platform Cable USB [3]. Драйвера для этого программатора находятся в составе пакета Xilinx ISE WebPack 14.1 (см. каталог установки этой системы, папка 14.1\ISE_DS\common\bin\nt\), который можно скачать бесплатно и также бесплатно получить у Xilinx на него лицензию. После установки WebPack драйвера для программатора Xilinx Platform Cable USB установились автоматически.
К сожалению, на сайте автора на исходный код Verilog дана плохая ссылка - некоторых модулей там не хватало (отсутствовали ck_div.v и generated.v, не было UCF-файла constrains - определение внешних ножек), все это пришлось искать и выуживать самостоятельно в других местах. Автор рекомендовал для компиляции использовать ISE Webpack 11.1, однако в этой версии компиляция не шла - почему-то не хватало ресурсов кристалла, на шаге Implementation выводилась ошибка "Number of RAMB16s: 16 out of 12 133% (OVERMAPPED)". Пришлось попробовать версии WebPack 13.3 и 14.1. В версии 13.3 даже не захотел запускаться процесс синтеза (synthesis), выдавалась какая-то странная ошибка "[Common 53] User Exception: Unable to launch Synthesis run. No Verilog or VHDL sources found in project". И только в версии WebPack 14.1 удалось успешно скомпилировать проект (полностью готовый проект и скомпилированную прошивку Gameduino можно найти в общем пакете по ссылке [2]).
Процесс сборки проекта из исходного кода Verilog (создание проекта Gameduino в среде Xilinx ISE WebPack 14.1), по шагам:
1. Запустите Xilinx PlanAhead 14.1, создайте новый проект gameduino: меню File -> NewProject -> Next, укажите имя проекта gameduino.
2. Тип проекта укажите RTL, нажмите Next.
3. Добавьте файлы исходного кода ck_div.v, fifo.v, generated.v, j0.v, revision.v, top.v. Для этого нажмите кнопку Add Files... и добавьте указанные файлы, и нажмите Next.
4. Шаг добавления IP пропустите, просто нажмите Next.
5. На шаге Add Constraints добавьте файл gameduino-200a.ucf. В этом файле содержится информация, какие внешние ножки FPGA используются gameduino.
6. Выберите кристалл FPGA. Для этого в поле Search вбейте строку xc3s200avq100-4 и нажмите Next.
7. Создание проекта завершено, нажмите кнопку Finish.
Компиляция состоит из трех основных шагов, выполняемых последовательно: Synthesis, Implementation, Generate BitStream. Компиляция у меня шла довольно долго, около получаса, самая долгая фаза Implementation. По окончании синтеза на диаграмме Resources -> Synthesis Estimation можно увидеть затраченное количество ресурсов микросхемы.
По окончании всех операций (Synthesis, Implementation, Generate BitStream) получите файл top.bit, который находится в подпапке проекта gameduino\gameduino.runs\impl_1. Это и есть данные, которые нужно будет прошить в плату Gameduino.
[Прошивка Gameduino]
Убедитесь, что программатор подключен к компьютеру, а JTAG соединен 6-проводным кабелем с платой Gameduino, и на плату Gameduino подано питание. Запустите из PlanAhead утилиту программатора iMPACT (Program and Debug -> iMPACT).
Щелкните на большую микросхемку чипа Xilinx, левом верхнем углу iMPACT Flows выберите Create PROM File (PROM File Formatter).
Откроется окно диалога PROM File Formatter. На шаге Step 1 выберите SPI Flash -> Configure Single FPGA, потом нажмите первую зеленую стрелочку, на шаге Step 2 из выпадающего списка Storage Device (bits) выберите 4M (4 мегабита), нажмите Add Storage Device, щелкните вторую зеленую стрелочку, проверьте формат файла MCS, и справа внизу нажмите OK.
Далее Вам предложат выбрать файл top.bit, созданный на шаге 6, укажите его. На запрос добавления другого файла ответьте "No". Файл top.bit появится на карте памяти PROM/FLASH.
Щелкните слева на iMPACT Processes -> Available Operations are: -> Generate File..., после чего в папке gameduino\gameduino.data\ сгенерируется файл Untitled.mcs. Снова перейдите на закладку Boundary Scan, двойным щелчком щелкните на "SPI/BPI?", укажите файл Untitled.mcs.
После выбора файла предложат выбрать подключенную микросхему памяти, выберите SPI PROM, AT45DB041D, нажмите OK.
Теперь можно выполнять с микросхемой все необходимые операции Program, Verify, Erase и проч. Для прошивки программы для FPGA xc3s200avq100-4 выберите Program.
[Как проверить работоспособность Gameduino]
Сразу после включения исправная платка Gameduino выводит весь экран стилизованный логотип "Gameduino", а в нижнем правом углу номер версии "1.0".
Чтобы полностью проверить, работает ли Ваша платка Gameduino, её нужно подключить по SPI к управляющему микроконтроллеру, который должен посылать в Gameduino какую-нибудь графику. Для этого нужно скомпилировать любой из примеров [5]. Процесс по шагам на примере платы metaboard [6].
1. Скачайте среду разработки Arduino IDE [7]. Скачанный ZIP-архив содержит папку наподобие arduino-1.0.1, распакуйте её в C:\Program Files.
2. Подключите платку metaboard по USB, активизируйте в ней бутлоадер. Для этого замкните перемычку JP6 Upload и нажмите кнопку S1 Reset.
3. Настройте среду Arduino для использования metaboard, для этого отредактируйте файл boards.txt, подробности см. в [8].
4. Скачайте пакет библиотеки GD для Gameduino [9]. Внутри скачанного архива будет папка Gameduino, распакуйте её в папку c:\Program Files\arduino-1.0.1\libraries\.
5. В меню Arduino выберите файл -> Примеры -> Gameduino -> Basics -> sprites256.
6. Скомпилируйте, залейте в плату Arduino (или в metaboard, или в USnooBie), передерните питание. На экране будут отображены цветные картинки (спрайты, 256 штук), которые движутся с разной скоростью, отражаясь от краев экрана.
[Ссылки]
1. Gameduino: игровой адаптер для микроконтроллеров. 2. 120621gameduino-public.zip - проект Verilog Gameduino для Xilinx ISE WebPack 14.1, документация, схема, разводка печатной платы, GDI-библиотека с примерами скетчей Arduino, видеофайлы демонстрационных программ. 3. Free shipping, Xilinx Platform Cable USB, FPGA/CPLD downloader, FPGA/CPLD download cable site:aliexpress.com. 6. Макетная плата metaboard. 7. Download the Arduino Software site:arduino.cc. 8. Работа с макетной платой metaboard в среде программирования Arduino. 9. Gameduino GD library site:excamera.com. |