[Из песочницы] Знакомство и старт разработки на ПЛИС iCE40 от Lattice Semiconductor

17dbb66f2d5442e9a06451e233ed3ada.jpg Здравствуйте! Сегодня мы познакомимся с новым семейством дешевых и малопотребляющих ПЛИС от Lattice Semiconductor семейств iCE40LP/HX/LM, научимся работать с фирменным компилятором iCEcube2 и редактором кода Sublime Text 3, а также программировать чип на отладочной плате Lattice iCEstick с помощью прошивки, написанной на SystemVerilog.

Все будет сопровождаться подробными инструкциями и скриншотами.

Бывает, для некоторых задач в разработке железа, особенно связанных с высокой параллельностью обработки данных, быстротой их обработки или с другой спецификой задачи не подходят микроконтроллеры, а что-нибудь мощное из Cortex-A видится пушкой по воробьям. Тогда как правило, разработчик обращает внимание на ПЛИС, предоставляющие за относительно недорогую цену ему полную свободу действий на самом низком уровне цифровых систем — отдельных логических элементов и триггеров. Это позволяет сделать «свою собственную микросхему» внутри ПЛИС, используя ее выводы и уже встроенную внутри периферию. Например, если вдруг вам понадобилось 50 таймеров с ШИМ, или сверхбыстрая обработка данных, или, скажем, SPI с 3 линиями MISO и 2 MOSI, передать 5 Гбит по 2 дифф. линиям — все это вполне реализуемо на ПЛИС. Инженер тут ограничен только количеством универсальных логических ячеек и их временем переключения.

Среди производителей ПЛИС два уже завоевали популярность среди разработчиков — это Altera и Xilinx, выпускающие как наиболее простые ПЛИС (MAX II, MAX 10, Spartan II, Spartan III), на которых можно построить логику практически любой сложности, так и сверхбыстродействующие (Stratix 10, Arria 10, Spartan 7, Artix 7), способные передавать данные со скоростью до 56 Гбит/с, чтобы у вас был быстрый интернет. Однако, далеко не всегда нужны такие кошмарные скорости работы.

Некоторые особенности ПЛИС семейства iCE40 (данные с сайта производителя):

• Серия HX — высокопроизводительные ПЛИС, LP — малопотребляющие и LM — малопотребляющие с встроенной периферией;
• От 384 до 7680 LUT ячеек;
• Низкое энергопотребление, начиная с 25 мкВт у некоторых чипов;
• Интегрированные в железе SPI и I2C интерфейсы, облегчающие конфигурирование микросхемы;
• Возможность реализации интерфейсов: Parallel RGB, 7:1 LVDS, MIPI DPI/DBI, HiSPi, subLVDS, LVDS, Parallel LVCMOS;
• До 128 кбит встроенного ОЗУ;
• Внутренней Flash памяти нет, поэтому придется подключить к встроенному автоматическому SPI интерфейсу внешнюю память (подходящие модели можно узнать в прошивателе Diamond Programmer);
• Корпуса BGA с шагом 0.35–0.4 мм, с минимальными размерами 1.40×1.48×0.45 мм с шагом 0.35 мм, имеется и TQFP-144 корпус с шагом 0.4 мм.

Если Altera и Xilinx имеют удобные среды разработки с большим количеством уроков по ним, то ПО от Lattice — это компилятор с оболочкой над Synopsys Synplify, и писать код там мне показалось неудобным, поэтому я решил просто загружать туда готовые исходники. ПО для других серий — Lattice Diamond не подходит для серии iCE40, поэтому для редактирования кода я поставил известный редактор Sublime Text 3 и установил на него плагин для поддержки языка SystemVerilog. Можно писать и на других языках, iCEcube2 автоматически распознает язык по расширению файла.

Хорошо, если у вас есть отладочная плата iCEstick с USB (кликабельные изображения с сайтов производителей):
image
Вместо нее можно купить вот эту (распиновка и настройки прошивателя будут отличаться!):

image

Итак, подробные шаги установки ПО, создания и настройки проекта и прошивателя, тестовый код, прошивка и наблюдение результатов:

1. Регистрируемся на сайте Lattice Semiconductor и скачиваем iCEcube2.

2. Нажимаем «Click here to request your license» на той же странице. После этого нужно будет ввести в поле свой MAC-адрес.

3. На почту придет письмо с файлом лицензии.

4. Устанавливаем iCEcube2, копируем файл лицензии в его папку, и указываем к нему путь, запустив iCEcube2.

5. Устанавливаем ПО для прошивки ПЛИС — Lattice Diamond Programmer.

6. Устанавливаем Sublime Text 3 и менеджер пакетов для него.

7. В Sublime Text 3 жмем Preferences → Package Control, в открывшемся списке жмем «Package Control: Install Package».

8. Вводим «SystemVerilog». Жмем на первый (и единственный) пункт в списке, ждем пока установится плагин (см. строку внизу редактора).

9. Создаем пустой файл и сохраняем его как top.sv там, где будут исходники вашего проекта прошивки ПЛИС.

10. В iCEcube2 жмем New project (или желтый листок вверху), откроется окно, где нужно заполнить параметры как на скриншоте, указав путь к проекту:

1c5d815a74c94e318f624d55a9e9688f.png

11. Жмем Next, появится окно добавления исходных файлов в проект, ищем наш файл top.sv, дважды кликаем на него и жмем Finish.

12. Проект создан, слева находится его дерево и шаги синтеза, размещения и трассировки соединений между ячейками. Пункт Design Files раскрывается, там находятся все включенные в проект файлы. Сейчас там только top.sv:

1f312975837a475984e87dbe94e7d92f.png

13. Напишем стандартный код для мигания светодиодом (хорошо, если у вас есть плата iCEStick):
8d760f6233fd48189c8e323cb01a977d.png

14. Сохраним изменения в файле и перейдем в iCEcube2. Нажмем там на этот файл дважды, и на вопрос, обновить ли файл, отвечаем «Yes».

15. В iCEcube2 жмем Tools>Run All и ждем, пока проект соберется.

16. Жмем на кнопку с 16 зелеными кружочками, Package View:

55d881164c6941f9b18f75a93e200113.png

17. Открывается редактор выводов, в котором можно соотнести входы и выходы вашего модуля на SystemVerilog и выводы корпуса ПЛИС. Схему корпуса можно масштабировать (Ctrl+вращать колесико мыши) и двигать (перетаскивая курсором):

2bd508c167774f71a5a7324585e87cd5.png

18. Если скачать даташит на отладку iCEstick, то можно узнать, что генератор тактовой частоты подключен к 21 выводу, а 5 светодиодов — к 95(зеленый), 96, 97, 98 и 99 (красные) выводам. В панели слева Port нужно раскрыть шину led[4:0], которую мы завели вместо одного выхода чтобы на тех диодах, которыми мы мигать не будем был железный 0, иначе они будут тускло светить. Теперь мышкой перетащите все пункты led[0]…led[4] на выводы, к которым подключены светодиоды, а clk — на 21 вывод.

19. Если все сделано правильно, то эти выводы на схеме окрасятся в зеленый цвет. После этого нужно нажать на каждый из них правой кнопкой и в выпадающем меню нажать Lock, после чего на них появятся замочки. Это избавит вас от сброса распиновки при перекомпиляции кода. Теперь сохраните распиновку, нажав Ctrl-S. В следующих окнах нужно нажимать OK и Yes:

805be784b3614c699395373e2790b697.png

638fd023c3de4cf6a41b47b5cc6ca6ef.png

20. Опять нажмите на 16 кружочков (Package view). Получившаяся картина выглядит так:

488c6994a0a747dead9abe1e90da22fd.png

21. Жмем Tools → Run All и дожидаемся полной компиляции проекта

22. Вставляем отладку iCEstick в USB порт ПК и запускаем Diamond Programmer, жмем там File>New File. Откроется окно, в котором можно нажать Detect Cable, а можно выбрать эти параметры вручную:

47a09173e3a24190bc734c377716edd9.png

23. Нажимаем ОК и ждем сканирование:
5dcb30ebd65c4002a934d2a03e12f28e.png

24. Если все хорошо, появится строка:

28262fc1a4044267a76456f66c6ac076.png

Если все плохо — попробуйте другой USB-порт.

25. Заполняем параметры:

640b0bf6effd4ef9bed692548247098a.png

a04f7eb84fe34310a9ba1b6c18566ae6.png

26. В столбце Operation жмем на надпись Fast programming, открывается окно:
fbc5866c6cde4ee08ddbd2d46261aedc.png

В котором нужно выбрать в раскрывающемся списке Access Mode пункт SPI Flash Programming, после чего окно увеличится, и теперь нужно заполнить остальные поля как на скриншоте:
616e169c1ce8400ea536d125418a416e.png

27. Нажимаем OK, или Enter, кому как удобнее, а затем сохраним конфигурацию прошивателя, нажав Ctrl-S.

28. Жмем Program и ждем минуту, пока ПЛИС сотрется и снова запрограммируется:

54c4d397514b419cb5d68f2d1f678439.png

2632b4461b3c458db96db13720d7f438.png

29. Наблюдаем результат: красный светодиод мигает с заметной частотой:

a37f8c8c162c45428d2730b0902f508d.png
deffe148d02948e6a1d17ace62af188c.png

Заключение


Мы научились настраивать и собирать проект с кодом в ПО iCEcube2, настраивать прошиватель и загружать прошивку в чип ПЛИС. Написали тестовый код мигания светодиодом на плате и подтвердили его работоспособность.

Для того чтобы применить ПЛИС семейства iCE40 в своих проектах нужно изучать даташиты на выбранный чип и его отладочные платы. Самый дешевый чип семейства — ICE40UL640-SWG16ITR50 стоит в Digi-Key 1.53$/шт., имеет 640 ячеек, 55 кб ОЗУ, и корпус WLCSP-16 размером 1.4×1.48 мм. Самый дорогой чип серии — ICE40HX8K-CT256 стоит в Digi-Key 12.78$/шт., имеет 7680 ячеек, 128 кб ОЗУ, и корпус BGA-256 размером 14×14 мм.

В дальнейших статьях будет проведен обзор аналогичных по характеристикам ПЛИС других производителей и сравнение с iCE40 по цене, быстродействию, количеству ячеек, разнообразию корпусов, доступности в России, легкости использования среды разработки и т.д.

Комментарии (0)

© Habrahabr.ru