Evgeny_CDАрхитектор (03.02.2017 03:39, просмотров: 7085)
[Основа] iCE40 - это действительно революция. Но чуть в другом. Почему стоит по новому посмотреть на использование FPGA в мире embedded. http://caxapa.ru/733339.html
http://caxapa.ru/733336.html
Я уже всем плешь проел, что такое iCE40. Типа за $2-$5 можно взять мелкую FPGA в мелкопоганистом корпусе, в которой есть всего понемножку - LUT, блочной памяти, даже DSP блоки в Ultra появились. Но все оно вроде бы как какое-то не такое: забабахаешь туда софткор - ресурсы и закончатся.
Очень многие embedded задачи можно разбить на 2 части:
* низкоуровневая подсистема hard RT
* высокоуровневая soft RT система
Для низкоровневого hard RT оптимальны - специализированные блоки на FPGA и программизм в "стиле asm": не обязательно прямо в лоб asm, но мыслить нужно на очень низком уровне, и хорошо понимать, сколько тактов будет выплняться каждая строка кода.
На высоком уровне это вредно. Там уровень абстрации сильно выше, С, еще лучше C++ самое то.
И когда мы в одной FPGA начинаем совмещать обе подсистемы, наступает экономическая неэффективность для массовых рынков.
Апофеоз этого - SoC на Cortex-A9, которые стоят как жменя микроконтроллеров, а ресурсов там весьма немного. Либо много, но цена - как килограмм микроконтроллеров :)
Например, мы делаем модем умеренной продвинутости (например, для проводной связи, 1Мбит/сек на несущей 1 МГц, BPSK). Нам надо:
* отфильтровать входной сигнал в полосе частот
* демодулировать
* синхоронизироваться, выделить биты, получить битовый поток
* реализовать протокол, который может быть весьма разлапистым.
Берем мелкую плиску.
ICE5LP2K-SG48ITR50 IC FPGA 39 I/O 48QFN 100 - $4.27
2048 LUT + Flip-Flop, 20 блоков по 512 байт памяти, 4 DSP Blocks (MULT16 with 32-bit Accumulator
ICE5LP1K-SG48ITR50 1100 LUT + Flip-Flop, 16 блоков по 512 байт памяти, 2 DSP Blocks 100 - $3.28
Делаем там правильный 16 битный софткор ->, который командует DSP боками (фильтрация, демодулирование) и блоком синхронизации, чтобы получить битовый поток.
Описанная выше задача не сильно сложна, ее не так и трудно написать на asm. Блочной памяти все это займет единицы блоков. С качественным симулированием тоже проблем не будет -->
А дельше у нас стоит какой-нибудь Cortex-M*, который за $2-$3 дает 100 MIPS производительности (и которой в FPGA сожрал бы кучу ресурсов), который по SPI обменивается с ПЛИСкой и делает протокольную часть. На С или С++, любой симулятор на уровне битового потока сделать умеренно сложно, никаких особых техник не надо.
Внешние ЦАП-АЦП при условии, что они SPI, имеют сейчас производительность до 4 MSPS и стоят $0.8...$3 (в зависимости от разрядности и прочего). Параметры у них, как правило, гораздо лучше MCUшных аналоговых блоков.
Получаем BOM ~ $10, который довольно трудно переплюнуть другими методами.
Если DSP часть не нужна, то цена становится куда интереснее.
ICE40UL1K-CM36AI - 1248 LUT + Flip-Flop, 14 блоков по 512 байт памяти, 100 - 1.83. Да, корпус мелкопоганистый - но для серии это пережить можно.