Еще один пример FPGA проекта для платы MCY112.
На этом демонстрационном видео показано, что на плату MCY112 можно установить плату расширения VGA от микрокомпьютера Raspberry Pi. На нашей плате как раз есть совместимые с распбери GPIO разъемы. Затем после загрузки ПЛИС можно через последовательный порт специальной программой на питоне записывать в видеопамять изображения.
Я передаю в плату изображения котиков. Надеюсь все любят котиков!
Клонируйте проект с гитхаба https://github.com/marsohod4you/MCY112
В папке MCY112/SdramVgaFb есть проект для САПР Quartus Web Edition 9.1
В топе установлены:
- модуль PLL выдающий две частоты, частота на SDRAM чип (на плате MCY112 стоит 32х разрядная микросхема) и частота на видеогенератор. Я реализовал видео разрешение 1280x720 60Hz, частота видео пикселов должна быть 74,25МГц, но так не получилось к сожалению, поэтому 75МГц. Частоту на SDRAM так же поставил 75МГц, но можно попробовать поднять её.
- модуль SDRAM контроллера sdrc_core, я взял готовый опенсоурсный контроллер от opencores.org.
- модуль синхрогенератора hvsync, выдает сигналы синхронизации и активности в строке.
- модуль последовательного порта, работает на скорости 3000000 бита в секунду. Принимает байты команд и изображение из последовательного порта.
- модуль видео фифо ViFifo. Система старается удерживать это фифо почти всегда наполненным выше половины. Когда видео строка активна из фифо происходит чтение пикселов и фифо опустошается, когда опустошилось больше некоторого уровня система начинает читать из SDRAM памяти и дополнительно подпитывать фифо. Фифо 32х разрядное и хранит в каждом слове два 16ти битных цветных пикселя. А память тоже 32х разрядная, поэтому пропускной способности хватает с запасом - читать из фифо нужно в два раза реже чем писать в него даже при одинаковых частотах на SDRAM и Видео. Еще и остаются свободные окошки для доступа к SDRAM для записи, хоть чтение и имеет высший приоритет.
- модуль memwr. Получает байты из последовательного порта и анализирует их. Там у меня целый протокол передачи данных, где есть команды, указывается адрес для записи в память и длина данных, затем сами пикселы данных.
В папке python лежит программа img2serial.py. Она берет из командной строки имя файла изображения и читает этот файл. Так же берет координаты на экране, куда это изображение выводить. Изображение конвертируется в 16ти битное, формируются команды и передаются в плату MCY112.
Подробнее...