Недавно ко мне в руки попала китайская ПЛИС, а именно отладочная плата GW1N DK-START-GW1N4, на которой по факту стоит чип GW1N-LV9LQ144C6/I5 (Flash-based FPGA, 8640 LUT4, User flash:608Kb,B-SRAM:468Kb, S-SRAM:17280bit). GOWIN предоставляет много разных вариантов комплектации своих FPGA со встроенным Cortex M3, BluetothFPGA, System-in-Package(SoC + RAM), SecureFPGA…
GW1N-9 представитель базового варианта ПЛИС с наименьшим количеством наворотов и по этому привлекательна демократичной ценой в ~3.5$/1kQty.
Доступность отладочных плат к сожалению пока низкая, найти их для личного пользования не помогает даже Aliexpress. На данный момент покупка доступна юридическим лицам в АО«Восток», там же мне помогли с бесплатной на год лицензией разработчика, да и в целом поддержка отличная!
Лицензионных файла три на каждый поставляемый продукт (Gowin EDA YunYuan + Gowin SynplifyPro + Gowin MCU Designer), они привязываются к NIC-ID (MAC адресу сетевой карты). Windows: «Win+R» >> «cmd.exe» >> «getmac /v /fo list» — вводить без кавычек. Можно настроить сервер-лицензий Gowin License Server For Windows:
Скачав с официального сайта всё необходимое и разобравшись лицензиями, собираем первый пробный проект мигания светодиодами в GOWIN EDA.
Тут впервые замечаю, что на плате хоть и написано GW1N-4, а сам чип GW1N-9. Соответственно для GW1N-9 и качаем blink-project с сайта. Накидал побольше базовых примеров у себя в GitHub .
В левом окне расположены вкладки:
Не стану заострять внимание на интерфейсе, о нём достаточно подробно описано в документации.
Важно на данном этапе обратить внимание на переключатели SW3/SW2 на плате у разъема питания, отвечающие за выбор памяти, куда будет загружен проект:
SW3[1]/SW2[0] — SRAM mode
SW3[0]/SW2[0] — Embeded flash mode
На данный момент светодиоды мигают, первый шаг сделан, а дальше уже можно плясать в сторону более крупных проектов на HDL, но меня привлек инструмент Tools > IP Core Generator, где лежат два синтезированных ядра ARM Cortex M1 и picoRV32.
picoRV32 — сжатая по размеру открытая архитектура RISC-V. Интересный зверь, но уж больно экзотический!
ARM Cortex M1 — тот самый старый добрый ARM, его то мы и потрогаем!
GOWIN свои сборки ядер зашифровал, но picoRV32 вполне можно собрать под ПЛИС самому.
Запуск проекта с синтезированным ядром состоит из нескольких этапов:
Пришлось немного помучиться, так как сначала установил Gowin EDA не в директорию по умолчанию. Проект не увидел свои внутренние зависимости, переустановка в C:/Gowin помогла.
ARM Cortex M1 с GPIO занимает ~4k/9k LUT. Т.е в ПЛИСе остается место под задачи обработки данных.
Следующим шагом будет запуск периферии: UART, I2C, SPI… Ну и конечно же начну изучать RISC-V, раз уж он так ловко попал ко мне в руки. Надеюсь, данный пост поможет кому-нибудь сэкономить пару вечеров и перейти сразу к реализации проекта.
P.S. Данный пост родился из моего телеграмм канала t.me/difarobot, где делюсь своими мыслями в мире embedded.
Присоединяйтесь!
GW1N-9 представитель базового варианта ПЛИС с наименьшим количеством наворотов и по этому привлекательна демократичной ценой в ~3.5$/1kQty.
Доступность отладочных плат к сожалению пока низкая, найти их для личного пользования не помогает даже Aliexpress. На данный момент покупка доступна юридическим лицам в АО«Восток», там же мне помогли с бесплатной на год лицензией разработчика, да и в целом поддержка отличная!
Лицензионных файла три на каждый поставляемый продукт (Gowin EDA YunYuan + Gowin SynplifyPro + Gowin MCU Designer), они привязываются к NIC-ID (MAC адресу сетевой карты). Windows: «Win+R» >> «cmd.exe» >> «getmac /v /fo list» — вводить без кавычек. Можно настроить сервер-лицензий Gowin License Server For Windows:
- Gowin EDA YunYuan — IDE для синтеза проектов как на Gowin Synthesis, так и
Synplify Pro. В качестве инструментов: Programmer, IP Core Generator, Gowin Analysis Oscilloscope etc. - Gowin SynplifyPro by Synopsys — Унифицированное средство синтеза для FPGA
- Gowin MCU Designer — IDE на базе Eclipse для создания прошивок как к синтезированным ядрам, так и для SoC. Также c Gowin удобно работать через Keil MDK
Скачав с официального сайта всё необходимое и разобравшись лицензиями, собираем первый пробный проект мигания светодиодами в GOWIN EDA.
Тут впервые замечаю, что на плате хоть и написано GW1N-4, а сам чип GW1N-9. Соответственно для GW1N-9 и качаем blink-project с сайта. Накидал побольше базовых примеров у себя в GitHub .
В левом окне расположены вкладки:
- Design — отвечает за редактирование и хранение файлов проекта, конфигураций.
- Process — генерирует и синтезирует выходной файл прошивки. А ниже переход в утилиту загрузки на плату.
Не стану заострять внимание на интерфейсе, о нём достаточно подробно описано в документации.
Важно на данном этапе обратить внимание на переключатели SW3/SW2 на плате у разъема питания, отвечающие за выбор памяти, куда будет загружен проект:
SW3[1]/SW2[0] — SRAM mode
SW3[0]/SW2[0] — Embeded flash mode
- Открываем проект GOWIN EDA
- Во вкладке Design проверяем, что выбранный чип соответствует надписи на кристалле, а также содержимое файла .cst похоже на распиновку из даташита.
- Заходим в Process и правой клавишей мыши > Run активируем сборку.
- После успешной сборки переходим в Program Device, выбираем SRAM Mode/SRAM Program и прошиваем.
На данный момент светодиоды мигают, первый шаг сделан, а дальше уже можно плясать в сторону более крупных проектов на HDL, но меня привлек инструмент Tools > IP Core Generator, где лежат два синтезированных ядра ARM Cortex M1 и picoRV32.
picoRV32 — сжатая по размеру открытая архитектура RISC-V. Интересный зверь, но уж больно экзотический!
ARM Cortex M1 — тот самый старый добрый ARM, его то мы и потрогаем!
GOWIN свои сборки ядер зашифровал, но picoRV32 вполне можно собрать под ПЛИС самому.
Запуск проекта с синтезированным ядром состоит из нескольких этапов:
- Берём за основу проект из архива, что предоставляет нам GOWIN Arm DesignStart FPGA Program, дабы ручками не настраивать Verilog файлы от внутренней периферии к внешней.
- Собираем проект для MCU: из скомпилированного в Keil .bin файла с помощью GOWIN скрипта make_hex.exe нарезаем четыре itcm файла (itcm0, itcm1, itcm2, itcm3).
NOTE: При компиляции очень важно проверить в файле .ld или настройках линкера: правильность конфигурации начальных адресов RAM/ROM памяти. В документации про это не нашел где почитать, а сам не сразу додумался в файлы линкера посмотреть. - Из проекта выпиливаем все файлы синтеза ядра (src\gowin_empu_m1), дабы собрать своё.
- Средствами GOWIN IP Core Generator собирается ядро и периферия, с указанием path файлов itcm из 2-го пункта.
- По завершению генерации ядра, добавляем его в проект и собираем проект целиком.
- Прошиваем в RAM. Видимо как побежали светодиодики. Если хочется прошить во flash нашего ПЛИС, выставляем скорость порта пониже(например 2.5Mhz), выбираем Embedded flash mode.
Пришлось немного помучиться, так как сначала установил Gowin EDA не в директорию по умолчанию. Проект не увидел свои внутренние зависимости, переустановка в C:/Gowin помогла.
ARM Cortex M1 с GPIO занимает ~4k/9k LUT. Т.е в ПЛИСе остается место под задачи обработки данных.
Следующим шагом будет запуск периферии: UART, I2C, SPI… Ну и конечно же начну изучать RISC-V, раз уж он так ловко попал ко мне в руки. Надеюсь, данный пост поможет кому-нибудь сэкономить пару вечеров и перейти сразу к реализации проекта.
P.S. Данный пост родился из моего телеграмм канала t.me/difarobot, где делюсь своими мыслями в мире embedded.
Присоединяйтесь!
GarryC
Я уже думал, что век покупных систем разработки закончился и вдруг вот оно снова. И как китайцы собираются с таким подходом побеждать Xililnx или Altera или Actel?
Jensanf Автор
Не думаю, что они хотят побеждать, но в некоторых нишах и решениях их ценовая политика может стать решающим факторов в выборе не в сторону лидеров рынка.
proton17
А чем в этом смысле лучше Xilinx или Intel? Такие же закрытые корки, закрытые синтезаторы и трассировщики проекта и т.п. В открытой среде можно только писать ПО для SoC, ну и verilog в sumblime.
GarryC
Закрытый != платный, я именно об этом.
proton17
Ну вообще автор получил бесплатную лицензию. А Intel и Xilinix тоже не совсем бесплатные. У веб-версий не все ПЛИСы доступны и не все инструменты. Про IP я вообще молчу, в халявной версии самый минимум. Для серьезной разработки все равно придется покупать.