Знакомство с GOWIN. Отладочная плата DK-START-GW1N4/GW1N9

FPGAПрограммирование микроконтроллеровПроизводство и разработка электроники
Tutorial
Недавно ко мне в руки попала китайская ПЛИС, а именно отладочная плата 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 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), дабы собрать своё.
  4. Средствами GOWIN IP Core Generator собирается ядро и периферия, с указанием path файлов itcm из 2-го пункта.
  5. По завершению генерации ядра, добавляем его в проект и собираем проект целиком.
  6. Прошиваем в 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.

Присоединяйтесь!
Теги:fpgagowingow1narmcortex-m1ip-core
Хабы: FPGA Программирование микроконтроллеров Производство и разработка электроники
+15
4,5k 25
Комментарии 7

Похожие публикации

Лучшие публикации за сутки