FPGA & Verilog БлогFPGA chips

САПР Altera Quartus II / Intel Quartus Prime, язык Verilog HDL и кое-что про VHDL, FPGA Cyclone III, Cyclone IV, MAX II, MAX10. Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


На этом видео - демонстрация лабораторной работы Школы Синтеза Цифровых Схем по распознаванию нот. К плате MCY316 аудио проводом подключен смартфон Андроид на котором я играю ноты, а плата распознает их и отображает на 7-ми сегментном индикаторе.

Сейчас занимаюсь портированием проектов Юрия Панчула Школы Синтеза Цифровых Схем для наших плат MCY112 и MCY316. Обе платы в принципе подходят для выполнения лабораторных работ.

Исходные тексты проектов находятся вот здесь https://github.com/yuri-panchul/basics-graphics-music
А я сделал форк этих проектов, надеюсь потом мои изменения вольются в основной репозиторий.

Структура всего проекта я считаю не сложная.

Есть папка boards, где расположены специфичные для каждой отдельной платы назначения выводов, здесь же находятся какие-то дополнительные модули и самое главное модуль самого верхнего уровня board_specific_top. Таким образом, удается запустить лабораторные работы на самых разных платах. Я добавил в эту папку две новых папки marsohod_mcy112 и marsohod_mcy316 для двух наших плат MCY112 (на базе Cyclone I) и MCY316 (на Cyclone III).

Далее расскажу чуть подробнее о лабораторных работах.

mcy316

Выпущена наша новая плата MCY316.

На плате MCY316 установлена ПЛИС EP3C16Q240C8, в ней содержатся 15408 логических элементов, 516098 бит встроенной памяти, четыре PLL и 112 умножиетелей. Так же, на плате стоят:

- Кварцевый генератор 100Мгц;
- Две пользовательские кнопки;
- Восемь пользовательских светодиодов и 7-ми сегментный индикатор;
- SDRAM IS42S32200B, 8 (или 16) Мбайт, 32 разряда шина данных (на обратной стороне платы);
- Двухканальная аудио АЦП PCM1801U,16 бит, 48 Кгц;
- Двухканальный аудио выход для Дельта Сигма ЦАП (8бит);
- Три разъема для установки плат расширения, квазисовместимые с Raspberry Pi;
- SPI Flash W25Q16, 2 Мбайта для автозагрузки ПЛИС:
- SPI Flash W25Q16, 2 Мбайта для пользовательских данных;
- Разъем для установки USB JTAG программатора, например MBFTDI или UsbBlaster

Плата отличается довольно ёмкой ПЛИС (почти 16 тысяч логических элементов) и довольно большим количеством доступных пользователю выводов GPIO.

Дальше более подробное описание платы и проектов для неё.

На этом демонстрационном видео показана очень простая игра Теннис, реализованная в плате Марсоход3GW.

Здесь используется HDMI вывод изображения, которое формируется на лету просто из текущих координат строчной и кадровой развертки. Управление ракеткой выполнено переменным резистором, который подключен к АЦП платы.

Про HDMI вывод я уже писал раньше, впрочем, как и про захват данных из АЦП.

Весь проект можно посмотреть в папке _hdmi_tennis нашего репозитория на github: https://github.com/marsohod4you/Marsohod3GW

 

cat on hdmi

У микросхем FPGA компании Gowin может быть встроенное динамическое ОЗУ, причем один из двух возможных типов:

  • классическая SDR SDRAM типа MT48LC4M16 (64 мегабита);
  • PSRAM (псевдо статическая) HyperRAM типа W955D8MBYA (2*32 мегабита ).

HyperRAM отличается от "классики" интерфейсом и наличием встроенной системы регенерации. Конкретно в чипе GW1NR-UV9QN88PC6/I5, установленном на нашей плате Марсоход3GW, есть ОЗУ именно второго типа. 

На основе этой встроенной памяти создан этот проект фреймбуффера. Можно загружать битмапы прямо в чип FPGA платы Марсоход3GW и отображать их через HDMI выход на мониторе.

Проект находится в папке _hdmi_psram_fb репозитория гитхаб https://github.com/marsohod4you/Marsohod3GW.

hdmi 800x600

Читатели нашего блога уже наверняка знают, что плата Марсоход3GW построена на основе платы Марсоход3. Мы заменили чип Intel MAX10 на чип китайской компании Gowin GW1NR. В остальном платы, как близнецы, похожи и по габаритам и по компоновке и наличием одинаковых разъемов для шилдов и выход HDMI.

Для платы Марсоход3 у нас когда-то уже был создан проект генерации сигнала HDMI. Можно попробовать адаптировать тот прежний проект к новому чипу. Собственно это мы и сделали. На картинке выше показан вывод вертикальных цветных полос на монитор через HDMI разъем платы Марсоход3GW.

Микросхема FPGA GW1NR-UV9QN88PC6/I5 китайской компании Gowin имеет много довольно интересных встроенных блоков. Сейчас в этом проекте HDMI мы сможем попробовать использовать встроенные в ПЛИС сериализаторы и LVDS блоки.

Кратко скажу, что в используемой нами микросхеме серии GW1NR есть сериализаторы из параллельного кода в последовательный, это такие блоки, как: OSER4, OSER8, OVIDEO, OSER10, OSER16. И есть десериализаторы, преобразующие последовательный код в параллельный, это блоки IDES4, IDES8, IVIDEO, IDES10 и IDES16.

Если бы мы делали проект захвата видео, тогда нужно было бы пытаться использовать модули IDES. Но в нашем проекте HDMI вывода нам нужны блоки преобразования из параллельного в последовательный, а именно OSER10.  Используем их!