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
1. Открываем проект GOWIN EDA
2. Во вкладке Design проверяем, что выбранный чип соответствует надписи на кристалле, а также содержимое файла .cst похоже на распиновку из даташита.
3. Заходим в Process и правой клавишей мыши > Run активируем сборку.
4. После успешной сборки переходим в Program Device, выбираем SRAM Mode/SRAM Program и прошиваем.

На данный момент светодиоды мигают, первый шаг сделан, а дальше уже можно плясать в сторону более крупных проектов на HDL, но меня привлек инструмент Tools > IP Core Generator, где лежат два синтезированных ядра ARM Cortex M1 и picoRV32.
picoRV32 сжатая по размеру открытая архитектура RISC-V. Интересный зверь, но уж больно экзотический!
ARM Cortex M1 тот самый старый добрый ARM, его то мы и потрогаем!
GOWIN свои сборки ядер зашифровал, но picoRV32 вполне можно собрать под ПЛИС самому.

Запуск проекта с синтезированным ядром состоит из нескольких этапов:
1. Берём за основу проект из архива, что предоставляет нам GOWIN Arm DesignStart FPGA Program, дабы ручками не настраивать Verilog файлы от внутренней периферии к внешней.
2. Собираем проект для MCU: из скомпилированного в Keil .bin файла с помощью GOWIN скрипта make_hex.exe нарезаем четыре itcm файла (itcm0, itcm1, itcm2, itcm3).
NOTE: При компиляции очень важно проверить в файле .ld или настройках линкера: правильность конфигурации начальных адресов RAM/ROM памяти. В документации про это не нашел где почитать, а сам не сразу додумался в файлы линкера посмотреть.
3. Из проекта выпиливаем все файлы синтеза ядра (src\gowin_empu_m1), дабы собрать своё.
5. Средствами GOWIN IP Core Generator собирается ядро и периферия, с указанием path файлов itcm из 2-го пункта.
6. По завершению генерации ядра, добавляем его в проект и собираем проект целиком.
7. Прошиваем в 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. Присоединяйтесь!