Pull to refresh

Comments 39

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Тут соглашусь - с каждым обновлением вивады все больше несогласованности между различными частями 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/

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

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

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

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

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

P.S.

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

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

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

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

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

Интересна была бы практика. А то мы уже окирпичили с т.з. JTAG пару камушков, оставшимися живыми во всём остальном

Также на 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 означает ждать вечно.

А мне напомнил старый добрый и неудобный Altera Max Plus II )))

На безрыбье, как говорится. В России, так вообще ещё ничего не родили. Воронежский видели? И не надо. Покамест )

@megalloid, спасибо большое за статью. С ПЛИС сталкивался в колледже, так что такой материал стал отчасти глотком свежего воздуха. Интересует следующий вопрос - есть идея на уровне бреда реализовать ata over ethernet и понимаю, что ПЛИС для этого идеально подходит, но никак не могу понять это какие характеристики надо иметь. Предположим, что хотим реализовать SATA I (1.5 Gbit/s) и Gigabit Ethernet. Какая плата подойдёт для реализации данного проекта? Я смог нагуглить только такие проекты: https://github.com/enjoy-digital/litesata и https://github.com/enjoy-digital/liteeth . Реализовывать я маловероятно буду, но интерес как можно было бы это сделать есть. Спасибо!

Спасибо за доверие и веру в мой профессионализм. Но я, к сожалению, простой новичок и в дебри таких сложных материй не заныривал.

Я в следующих статьях буду начинать описывать самый простейший I2C-контроллер. А уж SATA/Ethernet - мне ещё долго не светит :)

Интересует следующий вопрос - есть идея на уровне бреда реализовать ata over ethernet и понимаю, что ПЛИС для этого идеально подходит, но никак не могу понять это какие характеристики надо иметь. Предположим, что хотим реализовать SATA I (1.5 Gbit/s) и Gigabit Ethernet. Какая плата подойдёт для реализации данного проекта?

Извините за вмешательство, люблю вопросы про оценки.

По части характеристик, во-первых скорость пинов. 1.5 Гбит/с -- это многовато для обычных пинов, как правило они держат до 700-900 Мбит/с. Поэтому вам потребуется ПЛИС с трансиверами. Во-вторых, ресурсы удобно грубо прикидывать по существующим ядрам вендоров. Например SATA у Xilinx тянет порядка 1К LUT, это совсем немного. Gigiabit Ethernet порядка 1.5К LUT.

С готовой платой сложнее, почему-то SATA нечасто встречается. Видел например такую. Возможно для экспериментов проще будет взять плату ПЛИС+Gig Ethernet и отдельный SATA-мезонин к ней, например как тут.

Как вариант, можно взять IDE to SATA чип или готовую платку и прилепить его к любой FPGA с достаточным количеством IO, например JM20330. Да, ATA133 медленный, но через гигабитный Ethernet все равно больше передать не получится.

Так что же это такое и для чего оно?

Гуглите ПЛИС. Или в личку, если она тут есть.

посмотрел на сайте производителя и этот чип один из самых слабых. Жалко им чтоли получше поставить, все равно ведь продают, а не дарят?

Как делать симуляцию проекта GoWin в ModelSim/QuestaSim, кнопка симуляции отправляет на канадский сайт с оплатой по $20 долларов за 11 часов

Sign up to leave a comment.