Что-то давно на Хабре не было статей про FPGA и я решил немножко восполнить этот пробел. Расскажу про нашу новую плату на ПЛИС Cyclone I. Да-да, вы правильно прочитали. На плате стоит первый циклон компании Альтера. Микросхеме больше десяти лет, но еще поработает. Причины использования этого чипа думаю всем понятны: санкции и плюс недавно случившийся мировой кризис полупроводников, который еще не вполне закончился.
Цель разработки этой платы — создать по возможности недорогую FPGA плату для студентов из минимального числа доступных и имеющихся в наличии компонентов. Далее давайте рассмотрим плату подробнее.
В ПЛИС EP1C12Q240C8 содержатся 12060 логических элементов, 239616 бит встроенной памяти, два PLL. Так же, на плате установлены:
- Кварцевый генератор 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;
- Разъем Active Serial для прошивки флэш памяти автозагрузки ПЛИС тем же самым программатором MBFTDI или UsbBlaster.
Как видите, всего по минимуму, но тем не менее, осваивать технологию FPGA на такой плате вполне можно. На плате нет встроенного JTAG программатора, но прямо на плату сверху можно установить и использовать программатор MBFTDI:
При установке программатора MBFTDI получается полноценное рабочее место разработчика ПЛИС. Этот программатор хорош тем, что он дает JTAG для загрузки ПЛИС, последовательный порт для связи ПК к ПЛИС и питание плате через USB кабель.
Для платы MCY112 уже созданы несколько демонстрационных проектов и их можно взять и посмотреть на github.com/marsohod4you/MCY112
Проекты как вы понимаете выполнены в среде САПР Altera Quartus Web Edition v9.1. Хорошо, что аппаратная разработка в отличии от того же Web очень консервативна и среда Quartus v9.1 не так уж и сильно отличается от современных сред Intel Quartus v22.
Среди опубликованных на гитхабе проектов для платы MCY112 есть совсем простой проект типа двоичного счетчика на светодиодах и семисегментных индикаторах. Но есть и проекты посложнее. Например, есть проекты вывод звука на Дельта-Сигма ЦАП или проект записи и чтения SPI флэш памяти. С помощью этой простой платы пользователь даже сможет запустить и исследовать RISC-V микроконтроллер PICORV32. Микроконтроллер стартует прямо из SPI флэш памяти и программа выводит в консоль последовательного порта свои сообщения:
Архитектура микропроцессоров RISC-V становится всё более популярной, и вот с помощью даже такой простой FPGA платы MCY112 можно заниматься исследованиями RISC-V.
Еще один интересный проект, опубликованный для этой платы на гитхабе — это проект фреймбуффера. На плате стоит SDRAM и содержимое памяти можно отображать на экране монитора через VGA. Вы спросите, а где же разъем VGA? А всё просто. На плате стоят 40-ка пиновые разъемы квазисовместимые с Raspberry. На плате MCY112 по крайней мере питание и земля разъема точно совпадают с распиновкой разъема Распбери. Сигналы Raspberry GPIO по возможности присоединены к ПЛИС Cyclone. Таким образом, можно некоторые платы расширения Raspberry поставить на эту плату MCY112. Например, можно поставить адаптер VGA:
После этого, можно откомпилировать готовый проект фреймбуффера, загрузить его в ПЛИС и потом с компьютера через последовательный порт записывать в память видеоадаптера картинки:
Но и это еще не все возможности платы. Есть еще редкая возможность присоединить FPGA плату MCY112 к микрокомпьютеру Raspberry Pi вот так:
В этом случае получается связка FPGA-Микрокомпьютер. Raspberry может загружать ПЛИС через зарезервированные GPIO пины например из OpenOCD:
//inout wire gpio0, //JTAG TMS
//inout wire gpio1, //JTAG TDO
//inout wire gpio7, //JTAG TCK
//inout wire gpio11, //JTAG TDI
Остальные же пины могут использоваться для обмена данными из Распбери в ПЛИС. В этой связке можно создавать проекты для управления сложными станками или роботами.
Если же привередливый читатель всё же скажет, что Cyclone I морально устарел (а в нынешней санкционной ситуации у нас не очень много возможностей), то у нас есть еще другая новая FPGA плата на китайской FPGA микросхеме Gowin, плата называется Марсоход3GW. Однако, про неё я расскажу как нибудь в другой раз.
sim31r
Ну более новые и дороже заметно.