Сейчас на рынке присутствует достаточно много разнообразных миникомпьютеров. Самые распространенные из них это Raspberry Pi, Orange Pi, Odroid. И есть очень популярная платформа Arduino. Но иногда случается, так что не хватает этих распространённых платформ.
Например, хочется какой нибудь миникомпьютер с не очень распространённым CAN, хочется десять UART, а может просто надо два десятка быстрых GPIO ног. Как же быть?
FPGA+CPU или в данном случае Cyclone V SoC
Один из вариантов решения проблемы может быть DevKit DE0-Nano-Soc. Данное решение построено на базе чипа Altera Cyclone V SE, а именно 5CSEMA4U23C6N. Который в свою очередь является комбинацией аппаратного ядра ARM Cortex A9 в данном случае двуядерным, и FPGA Cyclone V. Зачем может понадобиться такой тандем? А нужен он достаточно часто: FPGA хорошо подходит для быстрой обработки сигналов, обычные IO пины спокойно могут работать на сотнях мегагерц, а в моделях с аппаратными трансиверами и до шести гигагерц. А также для параллельной, конвейерной обработки поступающих сигналов. Однако описывать всё на языках вроде Verilog или VHDL достаточно сложно, медленно и неудобно. Поэтому достаточно часто была практика ставить в дизайн на FPGA реализацию процессора: специализированных NIOS II для Altera, MicroBlaze для Xilinx, варианты AVR ядер написанных энтузиазитстами и тому подобное. Из плюсов такого решения это простота, добавил в дизайн процессор и периферию и пиши себе программу на C/C++ для них, к минусам можно отнести то, что они во первых занимают ресурсы FPGA (логические ячейки, блоки памяти, PLL), во вторых достаточно медленны. Ну и в третьих несмотря на разнообразную периферию, она обычно достаточно проста, то есть поддержки DMA для UART в базовом наборе вы вряд ли найдёте, можно конечно написать своё, но это долго и достаточно сложно. С полными характеристиками чипа можно ознакомится
здесь. Но рассмотрим детальней наш devkit.
DE0-Nano-SoC
Основной чип: Altera Cyclone V SE 5CSEMA4U23C6N
Часть аппаратного ядра(HPS):
- 1GB DDR3 SDRAM (32-bit data bus)
- 1 Gigabit Ethernet
- USB OTG Port, USB Micro-AB(работает как в режиме хоста так и девайса)
- Micro SD
- UART to USB, USB Mini-B connector
- Accelerometer (I2C interface + interrupt)
- Кнопки: cold reset, warm reset, user button
- Светодиод
- LTC разём расширения
Часть FPGA:
- EPCS128 для хранения конфигурации FPGA
- Две кнопки
- Четыре переключателя
- Восемь светодиодов
- Два 40пиновых разъёма(36 GPIO+2GND+5V Pin+3V Pin) стандарный для плат от Terasic.
- Разъём расширения совместимый с Arduino Uno R3
- Аналого цифровой преобразователь 8ми канальный
Выводы
Плата достаточно мощная, имеет гибкую конфигурацию, может быть использована в домашних разработках, если нужна высокая скорость или нестандартные интерфейсы, которые можно реализовать на FPGA стороне. Отлично подойдёт для повышения скила как в разработке для FPGA, так и в программировании ARM. Однако, для начального обучения FPGA я бы её не посоветовал из-за малого количества установленной периферии. Она всё же больше плата для использования, в каком либо устройстве, как готового блока управления. Ну и немного подводя итоги:
Плюсы:
- ARM Cortex A9
- FPGA часть на базе Cyclon V(на данный момент самый современный чип семейства Cyclone)
- Гибкая конфигурация: FPGA часть может использовать большую часть пинов HPS части, а в свою очередь HPS часть может направлять сигналы с периферии(UART/SPi/I2C/CAN) «внутрь» FPGA а не только на заданные ноги.
- 72 GPIO выведенных с FPGA части.
- 8 каналов ADC
- 1 Gb Ethernert
- USB OTG порт
Минусы:
- Цена: 99$ что достаточно дорого на фоне Raspberry Pi и её аналогов
- Сложность: придётся работать как с FPGA так и с ARM частью
- документация: документация на сам devkit очень подробна, а вот с документацией на сам чип местами всё достаточно плохо, если FPGA часть описана хорошо, то вот с HPS не так всё радужно, некоторые моменты описаны совсем не интуитивно и можно сказать поверхностно, хотя основные моменты всё же описаны хорошо.
- Сообщество: его можно сказать нет
Достаточно мощная и интересная плата, но как всегда за гибкость приходится платить сложностью в освоении. Если есть, какие либо вопросы по этой плате, задавайте в комментариях, постараюсь ответить.