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

Недавно ко мне в руки попала китайская ПЛИС, а именно отладочная плата 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.

hwuqpwqjlal1p6qpaem99o8omz8.jpeg
Доступность отладочных плат к сожалению пока низкая, найти их для личного пользования не помогает даже 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


o1vyclwtnobn4dwuxqfjtlnhbmc.jpeg

Скачав с официального сайта всё необходимое и разобравшись лицензиями, собираем первый пробный проект мигания светодиодами в GOWIN EDA.

Тут впервые замечаю, что на плате хоть и написано GW1N-4, а сам чип GW1N-9. Соответственно для GW1N-9 и качаем blink-project с сайта. Накидал побольше базовых примеров у себя в GitHub.

В левом окне расположены вкладки:

  • Design — отвечает за редактирование и хранение файлов проекта, конфигураций.


  • Process — генерирует и синтезирует выходной файл прошивки. А ниже переход в утилиту загрузки на плату.


Не стану заострять внимание на интерфейсе, о нём достаточно подробно описано в документации.

howbxfudjrwfraxxq2rg_f8h2vk.jpeg

Важно на данном этапе обратить внимание на переключатели 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 и прошиваем.


py05tjwadrd2diti7h8hwruagnm.jpeg

На данный момент светодиоды мигают, первый шаг сделан, а дальше уже можно плясать в сторону более крупных проектов на HDL, но меня привлек инструмент Tools > IP Core Generator, где лежат два синтезированных ядра ARM Cortex M1 и picoRV32.

picoRV32 — сжатая по размеру открытая архитектура RISC-V. Интересный зверь, но уж больно экзотический!

ARM Cortex M1 — тот самый старый добрый ARM, его то мы и потрогаем!

GOWIN свои сборки ядер зашифровал, но picoRV32 вполне можно собрать под ПЛИС самому.

ze8mk8r3ei0e3onwjmljs1ucu1e.jpeg

Запуск проекта с синтезированным ядром состоит из нескольких этапов:

  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.

    ymuy40a0yri3lzwya8eplolajca.jpeg


Пришлось немного помучиться, так как сначала установил Gowin EDA не в директорию по умолчанию. Проект не увидел свои внутренние зависимости, переустановка в C:/Gowin помогла.

ARM Cortex M1 с GPIO занимает ~4k/9k LUT.Т. е в ПЛИСе остается место под задачи обработки данных.

Следующим шагом будет запуск периферии: UART, I2C, SPI… Ну и конечно же начну изучать RISC-V, раз уж он так ловко попал ко мне в руки. Надеюсь, данный пост поможет кому-нибудь сэкономить пару вечеров и перейти сразу к реализации проекта.

P.S. Данная пост родился из моего телеграмм канала t.me/difarobot, где делюсь своими мыслями в мире embedded.

Присоединяйтесь!

© Habrahabr.ru