После получения большого количества отзывов и комментариев на обзор платы на Cyclone IV из части из них четко прослеживались мысль: “А почему Cyclone IV, это же старый хлам!”. В ответ на это я решил сделать обзор на что-нибудь современное, функциональное и очень недорогое. И такой вариант нашелся — это отладочная плата Tang Primer 20K на ПЛИС от небезызвестной компании Gowin. На неё я и сделаю обзор в этой статье и расскажу про примеры проектов, доступных для этой платы.

Кого заинтересовала тема — добро пожаловать под кат! =)

image


Что это такое и зачем оно?


Tang Primer 20K — это SoM-модуль в формате SO-DIMM, с ПЛИС Gowin GW2A-LV18PG256C8/I7 в качестве центрального элемента, который поставляется (на выбор) с двумя интерфейсными платами, побогаче и попроще. В моем обзоре я расскажу про ту, что побогаче — Dock ext-board.

Перечислю основные характеристики SoM:

  • Gowin GW2A-LV18PG256C8/I7;
  • 128M DDR3 на SoM;
  • 32 Mbits NOR Flash;
  • JTAG + UART порт для программатора;
  • Слот для установки SD-Card;
  • 8-пиновый разъем для SPI-дисплея;
  • Доступное количество I/O-пинов — 177 шт.

Основные характеристики Dock-ext board:

  • RGB565 40P FPC Connector для подключения дисплея с RGB-интерфейсом, например такого;
  • 24P FPC Connector для подключения CMOS камеры с интерфейсом DVP;
  • 10P FPC разъем для подключения микрофонов;
  • 4P FPC разъем для подключения тач-сенсора;
  • 4 интерфейса PMOD;
  • 3.5mm headphone Jack с драйвером LPA4809MSF;
  • 5-пиновый DIP switch;
  • 2-позиционный переключатель для определения функции USB (Host/Device);
  • USB type-C разъем для соединения JTAG-отладчика c ПК;
  • USB type-C разъем с USB3317 в качестве USB PHY-контроллера;
  • Антенна на 2.4ГГц диапазон;
  • 6 кнопок;
  • 6 LED;
  • 1 RGB LED WS2812;
  • HDMI-интерфейс;
  • Ethernet-интерфейс c PHY Realtek RTL8201F.

Давайте детально рассмотрим с каким комплектом поставляется эта плата и что же там есть на плате.

К слову, всю интересующую вас информацию можете найти на официальном сайте проекта.

Комплект поставки


Начнем, уже традиционно с вопроса о комплекте, как это всё было упаковано и где купить (иначе зачем бы этот обзор еще был бы нужен, верно?). С первоначальным описанием и ценой вы можете ознакомиться на сайте продавца. Для работы с данной отладкой идёт сразу все необходимое. Нет нужды докупать программаторы и провода:

  • SoM в SO-DIMM форм-факторе с FGPA;
  • Материнская плата с необходимым минимумом интерфейсов, кнопок, индикаторов;
  • Кабель USB-A — type-C;
  • Переходник с USB-A Female — type-C, для подключения к USB-Host внешних устройств;
  • 8-пиновый переходник на PLS-female с платы SoM для подключения внешнего программатора;
  • Две миниатюрных перемычки для включения\выключения BL702 (подробнее ниже);
  • Жесткий пластиковый бокс для переноса платы.

Небольшое количество фотографий с распаковки:

image

image

Общий вид материнской платы:

image

image

SoM-модуль:

image

image

При внешнем осмотре нет ни следов флюса, ни следов пайки. Запаяно все качественно, без косяков и следов кривого монтажа.

Ну и фото мелких аксессуаров:

image

Немного про SoM


В качестве центрального ядра, как я уже писал выше, используется ПЛИС от Gowin GW2A-LV18PG256C8/I7. Среди его ключевых характеристик можно выделить следующие:

image

Общий вид SoM с ключевыми элементами:

image

Также на SoM есть SDRAM DDR3 128MB (1Gbit) память. В моем случае это SK Hynix H5TQ1G63EFR (13 row x 10 col x 8 banks x 16 bits). SpeedGrade памяти определить не удалось по гравировке на чипе, но судя по упомянутой в Schematic на SoM DDR-памяти IMD128M16R39CG8GNF-125 — доступен режим работы DDR-1600.

Помимо DDR-памяти на SoM еще располагается SPI Flash W25Q32JVS:

image

В качестве дополнительных опций на SoM-е доступны две дополнительные опции. Первая — это слот для установки microSD карт:

image

И вторая опция — разъем для подключения SPI LCD:

image

Для тактирования ПЛИС — установлен 27 МГц генератор:

image

Если не хочется использовать программатор, который установлен на материнской плате — SoM можно прошить внешним программатором подключившись к 8-пиновому разъему через переходник, идущий в комплекте:

image


ВНИМАНИЕ! Тут мне следует сделать очень важное предостережение. Подключение программатора к этим пинам, переключение кабелей программатора стоит делать только при полном отключении программатора и платы от питания т.к. неоднократно замечалось, что JTAG в Gowin очень «нежный» и может выйти из строя!

Речь идет вот об этом разъеме на SoM, рядом с которым находится разъем для подключеня SPI LCD и тест-поинты:

image

Для проверки работоспособности DC-DC преобразователей разработчики заботливо вывели 8 тестовых поинтов. Буду надеяться, что они вам не пригодятся ????:

image

Материнская плата Dock-ext


Перейдем к рассмотрению возможностей предоставляемых материнской платой:

image

Питание платы


Давайте перейдем к схематику, посмотрим, что на материнской плате. Кажется, что обзор получится объемным ???? и начнем с питания.

Плата может запитываться со штыревого входа с входным напряжением 6-12 В:

image

Преобразованием 12В в 5В занимается DC Buck Converter EUP3458VIR1:

image

Есть светодиодная индикация о том, что присутствует выходное напряжение с преобразователя.

Второй вариант обеспечить плату питающим напряжением: два type-C разъема. Один предназначен для USB-OTG, второй — разъем для подключения USB-JTAG:

image

image

Также есть светодиодная индикация о том, что на плате присутствует напряжение в 5 В.

image

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

JTAG-программатор на BL702


Ядром JTAG-программатора на плате является микроконтроллер BL702 — 32-разрядный процессор RISC-V от Bouffalo Labs. Полистав базовое описание на этот SoC, я весьма был удивлен, что у этого МК есть еще и 2.4GHz RF transceiver c поддержкой IEEE 802.15.4 MAC/PHY, Bluetooth 5.0 LE и Zigbee 3.0. Но обо всём по порядку.

Основное назначение этого чипа и идущего по умолчанию ПО в нём — обеспечить прошивку ПЛИС микропрограммой, которую по итогу генерирует IDE. Но если у вас есть внешний программатор — его можно подключить через 8-пиновый разъем на самом SoM-модуле, а этот BL702 использовать для нужных вам целей: можно хоть USB Device сделать, хоть IoT-устройство под управлением Linux, который можно завести на ПЛИС.

Для отключения BL702 даже предусмотрена соответствующая перемычка подписанная на плате как 702_EN:

image

Прошивка заливается по UART на BL702 через USB-порт и для ввода BL702 в режиме Firmware Update так же предусмотрена кнопка, которая расположена в аккурат над перемычкой:

image

Неизвестно, можно ли через UART-пины управлять в последующем из ПЛИС BL702, но кажется что теоретически это возможно:

image

Также у BL702 есть два пользовательских светодиода, которые можно использовать в своих целях:

image

Особенно приятно было увидеть, что на что на плате всё-таки имеется чип-антенна и небольшая цепь согласования для пользования BL702 в качестве радиоустройства:

image

GPIO-пины


На плате присутствует 4 PMOD разъема для подключения внешних устройств или какой-нибудь периферии, которые прямо шелкографией подписаны на оборотной стороне платы. Так же для GPIO предусмотрен разъем, который также подходит для подключения внешних микрофонов (подписан как MIC ARRAY на плате):

image

Кнопки и светодиоды


Тут разработчики заложили кажется вполне оптимальное количество кнопок и LED-ов. Для пользовательских операций доступно 4 из 5 кнопок:

image

Первая кнопка S1 отвечает за сброс ПЛИС (почему-то он у меня на плате не срабатывал), остальные можно использовать для пользовательских кейсов:

image

Помимо кнопок доступен 5-разрядный DIP-переключатель:

image

Первый переключатель используется для переключения источника загрузки ПЛИС, остальные 4 из 5 переключателей можно использовать в пользовательском сценарии:

image

С LED-индикаторами тоже не все так просто. На плате их установлено 6 штук, из них доступно для пользователя только 4, т. к. первые два используются для индикации FPGA_DONE и FPGA_READY:

image

При программировании Blink-примера, LED-светодиоды наоборот тухли при когда FPGA-прошивка была загружена и работала. С этим тоже предстоит разобраться:

image

В дополнение к обычным светодиодам на плату еще разместили RGB-светодиод WS2812B:

image

HDMI интерфейс


На плате расположен HDMI-разъем, через который можно вывести изображение на внешний монитор, телевизор и прочее. Всё выглядит достаточно стандартно, линии данных, Hot Plug Detect, SDA/SCL. Т. к. я практически не работал с HDMI — тут я мало чего могу вам рассказать.

image

USB 2.0 PHY


На плате имеется USB-контроллер Microchip USB3317 с поддержкой как USB Device так и USB Host сценариев. Для переключения между этими режимами на плате предусмотрен соответствующий переключатель. Всё выглядит достаточно стандартно и добавить тут, в целом, тоже нечего.

image

Ethernet 10/100M


Приятным дополнением ко всему, что было перечислено выше является интерфейс Ethernet, с поддержкой 10/100 Half-Full Duplex. На плате установлен Ethernet PHY, являющийся по сути надежным и проверенным стандартом — Realtek RTL8201F-VB-CG.

На изображении ниже — линии RMII идущие в ПЛИС:

image

Audio DAC + Headphone AMP


На плате для разнообразных сценариев, в которых нужен вывод звука, расположены несколько интересных микросхем.

Первая — двухканальный 16-битный ЦАП от Princeton Technology PT8211-S:

image

На правом и левом выходных аналоговых каналах установлены просты Low-Pass простые постфильтры второго порядка подавления остаточных шумов с частотой среза примерно около 40 кГц:

image

Вторая микросхема — стерео Headphone-усилитель от LowPowerSemi LPA4809MSF, который по заявлениям производителя может дать до 140 mW на канал с 16 Ω нагрузкой с THD 0.1% при питании от 5 В.

image

Интерфейсы для подключения Display и DVP-камеры


Порадовало наличие на плате 40-пинового разъема для подключения внешнего RGB24 дисплея и 24-пиновый DVP-интерфейс для подключения CMOS сенсора.

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

image

А вот с DVP-камерой из предыдущей статьи такое не получится т.к. гибкого шлейфа нет, и PMOD-интерфейс не подходит. Возможно закажу себе отдельный модуль с Aliexpress который совместим с этой платой.

Touch Panel


На плате присутствует разъем для подключения внешнего тач-контроллера, который можно было бы использовать вместе с дисплеем:

image

Доступная документация и примеры


Отдельно стоит отметить, что для данного отладочного набора есть всё что нужно в открытом доступе.

  1. После простой регистрации на сайте Gowin можно скачать IDE, любые Datasheet-ы, Reference Manual-ы и прочее: www.gowinsemi.com/en/product/detail/38
  2. Есть официальный Wiki со всей документацией и ЧаВо: wiki.sipeed.com/hardware/en/tang/tang-primer-20k/primer-20k.html
  3. Есть централизованное хранилище документации: dl.sipeed.com/shareURL/TANG/Primer_20K
  4. Есть Git-репозиторий с большим количеством примеров: github.com/sipeed/TangPrimer-20K-example

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


Заключение


После подробного изучения возможностей этой отладки — хочется вскрикнуть “Ого! И это — за такие небольшие деньги!”. Оптимальное количество LUT-ов, куча интерфейсов, всякое разное на борту и даже чип с RF-интерфейсом! Учитывая общую стоимость платы — кажется это отличная альтернатива Cyclone для начала работы с ПЛИС. Вывод который напрашивается после знакомства с этой отладкой “А может Cyclone IV действительно устарел?” ????.

Жаль, конечно, что на плате нет EEPROM, которая мне необходима для построения I2C Master Controller, но кажется для этой отладки найдется куча самых разнообразных применений. Например, можно на этой плате “поднять” ядро RISC-V и на нем запустить полноценный Linux. На первый взгляд кажется, что можно собрать полноценный мини-ПК: оперативной памяти достаточно, есть USB-интерфейс для подключения клавиатуры, есть Ethernet для сетевого взаимодействия с другими элементами сети, интерфейс для дисплея. Кажется, это звучит как одна из идей для следующих статей.

Можно это добавить себе в заметки на будущее, но для начала в одной из следующих статей я познакомлю читателя с Gowin EDA, как с ним работать под Linux (да, есть поддержка), как настроить программатор, как заливать bitstream на плату и прочее.

До встречи в следующих статьях! ????



Возможно, захочется почитать и это:


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


  1. dlinyj
    12.07.2023 08:24
    +11

    Мне очень не хватает примера вхождения для работы с такими устройствами. Плата крутая, спору нет. Но вот прям бомба была бы сделать статью, как там установить ПО, сделать хелло ворд (мигание светодиодом), затем вывести на дисплей.


    ПЛИС — это такой космос, но вообще недостижимый.


    1. megalloid Автор
      12.07.2023 08:24
      +14

      Этот материал уже на стадии подготовки. Примерно на следующей неделе ждите публикации!)


      1. dlinyj
        12.07.2023 08:24

        Спасибо, очень ждём!


    1. Mogwaika
      12.07.2023 08:24

      *такой же недостижимый, как и МК.


      1. dlinyj
        12.07.2023 08:24
        +5

        ПЛИС немного другого уровня железяка. Мне доводилось писать как на ассемблере, для МК, как на си, так и на verilog. Там вообще иное мышление нужно. Всё программирование — это каждая следующая инструкция выполняется за предыдущей. А для плис всё выполняется одновременно, и это взрывает мозг.


        1. Mogwaika
          12.07.2023 08:24
          +4

          У вас профдеформация, вы вероятно сначала освоили МК. Вам же не взрывают мозг аппаратные блоки или всякие dma, которые работают параллельно с основной программой или синхронизация нескольких ядер.

          Если сначала освоить ПЛИС, будет больно работать с МК.

          В общем случае одинаковая сложность.


          1. dlinyj
            12.07.2023 08:24

            Кто ж спорит :). Поэтому и прошу немного приоткрыть завесу тайны.


          1. virtanen
            12.07.2023 08:24

            Для МК гораздо больше инструментов, подходов, учебников, коммьюнити и т.п., соответственно, там априори легче. А плисоводы это довольно экзотические звери. И да, для меня лично теперь именно МК взрывает мозг, хотя начинал я именно с них.


            1. Mogwaika
              12.07.2023 08:24

              Возьмите какой-нибудь китайский мк и там будет всё то же самое или даже хуже, одна проприетарная ide под конкретную ОСь, никакого саппорта, ерраты и коммьюнити…
              Под тот же bl702/bl808 много инструментов? megalloid сделаешь вводную статью и про них тоже?


              1. megalloid Автор
                12.07.2023 08:24

                Ковырял в их сторону, я отладку отдельно от Buffalo c Wi-Fi 6 и BR/EDR/BLE 5.3 заказал. Может аналогичный обзор сделаю с разбором инструментария, если будет о чем рассказать, конечно


              1. drunkdebugger
                12.07.2023 08:24

                А что там не так?
                Там CMake/Makefiles в зависимости от SDK. Собирается из cmdline, прошивается. Win/Linux/Darwin.
                Прикрутить отладку в VSCode - час-два времени (если ни разу не делал)


                1. Mogwaika
                  12.07.2023 08:24

                  1) Мне казалось, что там мунлайтстудио и прочая хрень (fix. спутал с ch582).
                  2) Есть статья для хлебушков?


        1. MaxAkaAltmer
          12.07.2023 08:24
          +1

          Чтобы мозг не взрывал verilog, лучше использовать vhdl =)


          1. megalloid Автор
            12.07.2023 08:24
            +4

            Лучше использовать System Verilog, я бы сказал :D


            1. MaxAkaAltmer
              12.07.2023 08:24
              +1

              Если похожесть с С/С++ мешает, лучше использовать VHDL. Я много пишу на плюсах, и параллельно пишу под ПЛИС, поэтому использую VHDL (когда устаешь - меньше тупишь с параллельной и последовательной логикой), Verilog только если что-то не для себя или не свое. Эти ПЛИС на удивление неплохие, хотя главное не это, а то, что на данный момент они являются самыми доступными.


    1. MinimumLaw
      12.07.2023 08:24
      +4

      ПЛИС — это такой космос, но вообще недостижимый.

      Когда жареный петух в известное место клюнул пришлось освоить. Не боги горшки обжигают. В принципе все подъемно. Главная ерунда - для таких игрушек нужен проект, который не сделать другими методами. Я, правда, с Latice игрался, но учиться пришлось на Alter'ах.

      Самая большая беда в ПЛИС это откровенно кривой софт. Его мало, и всякий раз садясь за ПЛИС вспоминаешь известное Грузинское блюдо - Жри-Чё-Дали. Вывод компилятора не информативен. В горе бесполезных, не отключаемых предупреждений найти важное - отдельный навык. В этом смысле что Hello world, что примеры - практически не несут смысловой нагрузки. Я долго не мог понять где с моем простейшем проекте ошибка и выяснилась классическая заморочка с пониманием где wire, а где reg. Но прежде чем мне это растолковали я готов был поломать все вокруг. Так что практический опыт очного общения с ПЛИСоводами - он очень важен. При чем даже не столь важно что конкретно используется: Xilinx, Altera, Latice или еще что. Грабли после установки и настройки ПО везде примерно одинаковые.

      Но самое главное - нужен проект, который иначе не сделаешь. Как только он появляется, остальное подтягивается само собой.


      1. mikkal
        12.07.2023 08:24
        +2

        Самая большая беда в ПЛИС это откровенно кривой софт.

        Тут соглашусь - с каждым обновлением вивады все больше несогласованности между различными частями ide. Фичи пилятся, но баги не исправляются.

        В горе бесполезных, не отключаемых предупреждений найти важное - отдельный навык.

        Та же vivado умеет подавлять предупреждения, ограничивать количество сообщений. Гуглится по warning suppression. Например, https://docs.xilinx.com/r/2022.1-English/ug893-vivado-ide/Suppressing-Messages Но на начальных этапах не стоит этим пользоваться, тк скорее всего большинство предупреждений разумны и их следует исправлять в коде, а не подавлять. В других ide подозреваю наличие подобного функционала.

        Я долго не мог понять где с моем простейшем проекте ошибка и выяснилась классическая заморочка с пониманием где wire, а где reg

        Это вопрос к пониманию языка описания аппаратуры, а не самих ПЛИС. Для быстрого старта можно почитать соответствующий раздел Харрисов - Digital Design and Computer Architecture. Для дальнейшего понимания Stuart Sutherland SystemVerilog for design. Для еще более глубокого Cliff Cummings http://www.sunburst-design.com/papers/

        Но самое главное - нужен проект, который иначе не сделаешь.

        Нужны болванка проекта и система сборки. Такое зачастую каждый пишет себе сам, чтобы при старте нового проекта не протыкивать все в ручную. Предполагаю, что где-нибудь тоже можно найти. При этом система сборки нужна для автоматизации сборочных процессов и хранения не всего проекта, а только исходников и сборочных скриптов. Имея последнии, проект можно смело удалять и пересоздавать заново по несколько раз на дню


        1. MinimumLaw
          12.07.2023 08:24

          Про отключаемые предупреждения - наверное. Но проект в десяток строк с простейшей логической функцией выдающий 30+ предупреждений из коробки (привет Altera) или почти десяток (привет LaticeDiamond) - это впечатляет. Про Vivado не скажу - она мимо меня прошла.

          Вообще удивляет количество предупреждений даже при компиляции примеров из комплекта поставки. Программистам-системщикам, привыкшим за время работы с тем же С, к тому что все должно компилироваться с ключом -Werror (т.е. требовать чистой сборки и трактовать предупреждения как ошибки) сразу становится несколько не по себе. При этом каждое конкретное предупреждение вроде бы правильное, но часть из них вообще непонятно как устранять. Ну не используем мой проект один из системных клоков. На тебе предупредеждение. По одному (минимум) на каждый неиспользуемый. Хорошо. И что мне с ними делать?

          На самом деле, конечно, ПЛИСоводство это совершенно отдельный навык. Его, по хорошему, не стоит совмещать с классическим программированием. Меня именно что вынудили обстоятельства. До какой-то степени я изучил вопрос и сделал решение. Но углубляться дальше... Нет, пожалуй я лучше оставлю это профессионалам. У них получится лучше и быстрее. Меня другое кормит. Но если понадобится что-то похожее, я уже справлюсь.

          P.S.

          Да, я под проектом понимал не проект в IDE, а некое ТЗ, которое надо реализовать. При чем такое, что без ПЛИС не обойдешься. Тут или не браться, или учить, разбираться, жрать кактус, топтать грабли, но все равно делать (и доделывать!).


  1. Saa12
    12.07.2023 08:24
    +1

    Спасибо за статью! Вы выше писали про "нежность" JTAG. Его защитить извне как-то можно? Есть у кого конкретный опыт этого?


    1. megalloid Автор
      12.07.2023 08:24
      +1

      Пока не ковырял в эту сторону, но если появится рецепт какой-нибудь на эту тему - я им обязательно со всеми поделюсь (в этой статье допишу).


    1. okhsunrog
      12.07.2023 08:24

      TVS-диоды могут помочь, в теории


      1. megalloid Автор
        12.07.2023 08:24

        Вероятно да, вероятно ещё опторазвязка сможет уберечь. Но для меня ситуация не то чтобы сильно актуальна, т.к. пока планирую пользоваться встроенным программатором и риск такого рода повреждения кажется сведен к минимуму.


  1. drunkdebugger
    12.07.2023 08:24
    +4

    Также на SoM есть SDRAM DDR3 128MB (1Gbit) память. В моем случае это SK Hynix H5TQ1G63EFR (13 row x 10 col x 8 banks x 16 bits). SpeedGrade памяти определить не удалось по гравировке на чипе, но судя по упомянутой в Schematic на SoM DDR-памяти IMD128M16R39CG8GNF-125 — доступен режим работы DDR-1600.

    Тайминги могут и не совпадать. Сильно некрасиво вышло со стороны Sipeed. Особенно "хорошо" получилось с Litex:
    https://github.com/enjoy-digital/litex/issues/1649

    Особенно приятно было увидеть, что на что на плате всё-таки имеется чип-антенна и небольшая цепь согласования для пользования BL702 в качестве радиоустройства:

    Хех, я это упустил, попробую на днях.

    Жаль, конечно, что на плате нет EEPROM, которая мне необходима для построения I2C Master Controller, но кажется для этой отладки найдется куча самых разнообразных применений.

    Не совсем понятно зачем для I2C Master нужен EEPROM, если можно в HDL реализовать или даже bitbang применить из soft core. Litex I2C так работает.

    Например, можно на этой плате “поднять” ядро RISC-V и на нем запустить полноценный Linux. На первый взгляд кажется, что можно собрать полноценный мини-ПК: оперативной памяти достаточно, есть USB-интерфейс для подключения клавиатуры, есть Ethernet для сетевого взаимодействия с другими элементами сети, интерфейс для дисплея. 

    Нет работающего DDR3 в Litex/SpinalHDL - нет Linux'а. И нет полноценного framebuffer, только текстовый терминал на HDMI/whatever. Наработчки есть (TangPrimer-20K-example, Nestang), но они не используют Wishbone или AXI(-lite).

    В заключение отмечу, что рано или поздно трудности будут преодолены. Будет реально-нереальный бюджетный девкит. К сожалению, надеяться только на Sipeed означает ждать вечно.