Arnold Enginegger
699 subscribers
38 photos
4 videos
12 files
81 links
Тоже хочу в блогеры
Download Telegram
Хорошее замечание и ещё один аргумент в срачах спорах про сбросы. Получается (без учёта других аргументов), что тотальный сброс можно делать любым - синхронным или асинхронным, а частичный (только control path, например) лучше синхронным, чтобы в случае чего синтезатор смог сымитировать его на логике.
👍3
30 ноября, заключительная FPGA-Systems совместно с YADRO, онлайн.

Встречаемся в последнюю субботу ноября на трансляции — регистрируйтесь, чтобы получить ссылку на стрим на одной из популярных платформ (Youtube, Rutube, VK).

В программе:

•‎ Запуск AMDGPU и работа с HDMI на ПЛИСе.
•‎ Опыт применения Chisel/Scala для проектирования сложных систем.
•‎ Чем прототипирование отличается от разработки на ПЛИС.
•‎ Обзор обновления линейки BMTI.
•‎ Индустриальные подходы к верификации RISC-V ядер, доступные каждому.
•‎ Советы по применению Extended Useful Skew и не только!

Участие бесплатное, регистрация обязательна.

До встречи!
👍3🔥21
Если вы не сможете прийти, не успели зарегистрироваться или встретите субботу не в Москве, подключайтесь к трансляции заключительной в этом году FPGA-Systems на Youtube, Rutube или VK.

В программе:

11:10 - Введение в проектирование RTL цифровых систем средствами Chisel/Scala
11:50 - Генерация преднамеренных ошибок в UVM-тесте
12:30 - Проектирование интегральной схемотехники в российских САПР
14:00 - Как мы AMD GPU на ПЛИС с RISC-V Linux запускали
14:40 - Open Source Step-and-Compare: делаем индустриальный подход к верификации RISC-V доступным каждому
15:20 - Увеличиваем производительность, искажая время: Extended Useful Skew
16:20 - Работаем с HDMI на ПЛИС
17:00 - Что нового у BMTI? Смотрим на обновление линейки коммунистических ПЛИС

Пишите вопросы докладчикам - если не успеем задать их сразу после доклада, выступающих попросим зайти в комментарии в трансляциях и ответить вам там.

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

p.p.s. Слайды с мероприятия появятся в течение недели после митапа на его сайте.
Немного поигравшись с Veryl пишу отзыв. Если кратко: потенциал есть, но пока не готов.

Не буду лить воду, пойду по фактам. Плюсы языка:

➡️Полярность сброса и клока можно выбрать при сборке. Очень полезная фича, но есть некоторые проблемы с передачей этих знаний в подключаемые модули на верилоге. Есть автоматическая инверсия сброса, если в вериложном модуле сброс не той полярности. Но пока нет инверсии клока и никак не передать информацию о типе сброса - синхронный он или асинхронный.
➡️Фигурные скобки в качестве операторных скобок конечно выглядят гораздо приятней многословных begin/end и module/endmodule.
➡️Нет разделения на блокирующее и неблокирующее присваивание. Язык предназначен для написания только синтезируемого кода, по этому синхронные присваивания - неблокирующие, асинхронные - блокирующие.
➡️if/else как выражение (expression). Как бы реверанс в сторону функциональных языков, но по сути синтаксический сахар над тернарным оператором.
➡️Дженерики! Наконец-то шаг в сторону метапрограммирования. Шаг скромный, но в верилоге этого очень не хватает.
➡️Есть поддержка аннотации CDC. Если вдруг вы небезопасно передаёте данные из домена в домен, транслятор даст вам по рукам.
➡️Какая-никакая стандартная библиотека с FIFO и некоторыми полезными модулями (кое кто из чата FPGA Systemc был бы очень рад).

Теперь минусы:

➡️Нет приведения ширины. Есть приведение к типу, и как бы можно объявить новый тип с нужной шириной и к нему приводить. Но это лишняя писанина, и результирующий верилог не поддерживается парсером Yosys'а. Такая вот шляпа.
➡️В конструкции вида a = {b, '1} единица не расширяется до размера a, и код в неизменном виде попадает в верилог. Т.е. это ошибка и в верилоге и в вериле, что несколько расстраивает. Выражение как бы очевидное, но авторы решили сохранить совместимость с верилогом. А ещё линтер на это не ругается (а Верилятор ругается).
➡️Нельзя объявить несколько переменных одного типа с одной декларации. Для каждой переменной надо писать var бла_бла: тип;.
➡️Невозможно задать начальное значение регистру или памяти. ROM в принципе можно описать в виде const (которое транслируется в localparam), но RAM только через readmem. Авторы говорят, что для асиков это не нужно, а проблемы плисоводов их не волнуют. Конструкция initial поддерживает только вывод сообщений.

По инфраструктуре. В отличие от верилога, у которого только стандарт, Veryl "из коробки" имеет форматтер, линтер и language server. Это очень удобно. Например, на добавление полноценной поддержки языка с в Emacs у меня ушли сутки. А это форматирование с отступами, подсветка синтаксиса, подсветка ошибок в реальном времени, автодополнение, хождение по коду и попапы.

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

Есть и недостатки:

➡️Нет настроек форматирования, есть только настройка длины таба.
➡️У линтера есть только настройки стиля, языковых настроек нет. Например, нет предупреждения о неявном приведении ширины.
➡️При касте сброса транслятор может менять имя сигнала, добавляя к нему префикс или суффикс (настраиваемо). При этом он это делает и для портов вериложных модулей. По этому, если включена эта опция, при имплементации вериложного модуля к именам портов клока и сброса надо прибавлять префикс r#. Но это скорее ошибка, которую нужно исправлять.
➡️Часто неправильно указывает положение ошибки, особенно если забыли или лишняя точка с запятой.

В общем, впечатления от языка двойственные. С одной стороны линтер, language server и дженерики. С другой - ощущение, что пишешь на верилоге с новым синтаксисом и старыми проблемами. А зачем мне старые проблемы? Мне нужны новые 😄

PS: Дописывая пост заглянул в репозиторий. Две недели назад вышла новая версия, в которой добавили приведение ширины. Вот так может и допишут до продакшена.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5
В очередной раз пригодился мой китайский фрезер CNC-3018. Выпилил втулки, чтобы уменьшить диаметр отверстий в печатной плате с 1мм до 0.8мм. Заготовка - текстолит толщиной 2мм. На фото видно, что втулки выпилены не до конца, а до фольги на обратной стороне - это чтобы они не вывалились во время фрезерования и не сломались об фрезу. Потом я их вырезал канцелярским ножом.

Диаметр втулок я сделал чуть больше 1мм, чтобы входили с натягом. Несмотря на толщину стенки, получилось достаточно прочно, при запрессовке пока ни одна не сломалась.

Заусенцы на фото - это остатки стружек. На самом деле поверхность чистая и гладкая ☺️

Фреза - кукуруза 0.8мм, горизонтальная подача - 2мм/с, вертикальная 0.5мм/с.
🔥21
Нашел забавную ошибку в Вериляторе. При иерархической передаче строки в параметре модуля через два и более модуля строка может не дойти до конечного потребителя. Зависит это от того, указан ли, и где конкретно, тип параметра. Если во всей цепочке тип параметра отсутствует (выводится из дефолтного значения), то строка проходит. Если тип везде указан, то тоже проходит. А если во втором модуле тип не указать, то туда приходит строка той же длины, только заполненная пробелами. Причём, если её передать дальше, то она совсем обнулится.

Вот пример кода с багом:

module string_param_0 #(parameter S = "");
initial $display("S = '%s'", S);
endmodule

module string_param_1 #(parameter string S = "");
string_param_0 #(.S(S)) u_sp0();
endmodule

module test;
string_param_1 #(.S("Greetings from the old shoes")) u_sp1();

initial #1 $finish;
endmodule


Вывод такой:

S = '                            '


Если добавить тип параметра в первый модуль или убрать тип из второго, то вывод будет корректным:

S = 'Greetings from the old shoes'
🔥11
Все постят, и я запощу. Коллеги спасибо, приятно 🤝
🔥15🎉51
По просьбе коллеги добавил в бенчмарк симуляторов запуск Квесты с параметром "-O5" и без параметра "+acc". Прирост скорости составил ровно 10 раз, но есть мнение, что могут быть проблемы с доступом к внутренним сигналам (через VPI/DPI или даже из верилога). Сам не проверял.

Ещё добавил запуск VCS (честно взятый "во временное пользование" на всем известном ftp) на своём компе и перезапустил все тесты. Можно заметить, что скорость работы большинства симуляторов значительно возросла - это от того, что я выключил HyperThreading. А ещё верилятор стал заметно быстрее компилировать, особенно для многопоточного варианта симуляции.
🔥13👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Дошли руки до переделки PAL-энкодера на раздельный вывод сигнала яркости и цветности. Спортивный интерес был в том, чтобы использовать один разъём PMOD и минимум внешних компонентов. Была сделана плата с 3-битным R2R ЦАП для сигнала цветности, 4-битным - для яркости, и одним сигналом для синхронизации, который роняет выход яркости на -300мВ. В качестве выходных буферов ЦАП - эмиттерные повторители на КТ368А. Ключ для сигнала синхронизации на КТ230А9 с диодом Шоттки для ускорения переключения.

Как и ожидалось, цветные границы стали мягкими и шелковистыми ровными и чёткими - полностью отсутствует dot crawl, тонкие цветные линии не превращаются в серые. Однако, есть и особенности: 4 бит для яркости маловато, если цвет пересчитывается из RGB в YUV вычислением, а не таблицей. Вычисления могут дать разницу в яркости меньше уровня квантования, и яркость двух объектов на экране окажется одинаковой. В таблицу же можно внести значения, некорректные математически, но более приемлемые визуально. Позже попробую ещё раз переделать плату для использования 5 бит для яркости без отдельного сигнала синхронизации. Тогда на яркость останется 24 значения (4.5 бита), что должно положительно сказаться на качестве картинки в градациях серого.

На видео стандартные цветные полосы. Используется 3 бита на каждый компонент цвета RGB. Использовать больше 4 бит на компонент смысла нет, т.к. разницу в оттенке глаз не заметит, а для яркости не хватит битности АЦП.

В комментах выложу видео цветных линий шириной в 2 "пикселя" на частоте 24МГц и фотки платы.
🔥20👍2💔1
This media is not supported in your browser
VIEW IN TELEGRAM
Вышла девятая версия САПР KiCAD. Очень много полезных изменений, среди которых хочется отметить:

- Редактирование дифпар. "Я джва года ждал". На видео в шапке показана как раз эта фича, как частный случай трассировки/редактирования набора треков. Раньше было практически невозможно перетащить дифпару без нарушения зазора между линиями, из-за чего приходилось полностью перетрассировать редактируемый участок.

- Задание параметров площадок отверстий на разных слоях. Раньше можно было только убрать неиспользуемые площадки, а теперь можно индивидуально задать форму, размер площадки и размер антипада для каждого слоя. Это очень полезно при проектировании скоростных плат.

- Экспорт 3D моделей отдельных цепей. Теперь гораздо проще выполнить моделирование в каком нибудь OpenEMS, потому что не надо вручную выковыривать модель дорожки из модели всей платы. Потенциально это дело теперь можно даже автоматизировать.

И много других изменений, про которые можно почитать например здесь.

KiCAD по возможностям всё больше приближается к профессиональным САПРам. Теперь его можно использовать не только с болью, но и с удовольствием ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥287
SoC Design Challenge: инженерный хакатон для студентов от YADRO и МИЭТ 

Не упусти возможность попробовать свои силы в проектировании и верификации систем на кристалле (SoC) и прокачать свои навыки в одном из четырёх треков: 

🔵UVM-верификация 
🔵Системная верификация СнК 
🔵RTL-проектирование 
🔵Топологическое проектирование 

Где и когда? 18-20 апреля в МИЭТ

Ждём именно тебя, если ты хочешь: 
• Проверить свои навыки в решении индустриальных задач 
• Познакомиться с экспертами отрасли и талантливыми единомышленниками 
• Получить интересный опыт и ценные призы

А для иногородних студентов будет организован бесплатный проезд до Москвы и проживание на время проведения соревнования! 

Смотри подробности и регистрируйся до 18 марта на нашем сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍2👎2
Воистину Попов! (чатжпт согласен с нами)
🔥193
This media is not supported in your browser
VIEW IN TELEGRAM
Грех было не купить за 3т.р. плату с Artix7 75T, да ещё готовую для подключения к PCIe. Вчера приехала, сегодня уже мигаю светодиодами. 😎
Но не просто мигаю. Мы же за опенсорс, по этому собрано и прошито без участия Vivado.

Подробности тут (или альтернативная ссылка)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍7❤‍🔥32🤔2
Из зала подсказали, что есть Xilinx Virtual Cable с поддержкой CH347. Действительно есть, но с этой платой не заработал. Пришлось форкнуть форк и немного пропатчить. Результат тут: https://github.com/punzik/xvcd-ch347
🔥15
This media is not supported in your browser
VIEW IN TELEGRAM
Тут в плисочате народ искал прогу, с помощью которой можно было бы сымитировать вывод фигур Лиссажу на осциллограф из RTL симуляции. Я уже делал что-то подобное - выводил из симуляции картинку на виртуальный SPI дисплей, по этому не составило труда допилить код до виртуального осциллографа. Исходники тут, для запуска нужен Racket (кто бы сомневался, правда? 😏)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14😁3
Кроме гитхаба, репозиторий из предыдущего поста выложен в сеть Radicle. Его можно канонически клонировать с помощью Radicle:
rad clone rad:z3wqoSbJvXijf4dJ9jbMWD3XGjyPQ


Менее канонически - посмотреть через web-интерфейс любого развернутого radicle-explorer. Например:
- https://rad.embddr.xyz/nodes/seed.embddr.xyz/rad:z3wqoSbJvXijf4dJ9jbMWD3XGjyPQ
- https://app.radicle.xyz/nodes/rosa.radicle.xyz/rad:Az3wqoSbJvXijf4dJ9jbMWD3XGjyPQ

И совсем неканонически - клонировать репозиторий git с любого сидера. Например:
git clone https://seed.embddr.xyz/z3wqoSbJvXijf4dJ9jbMWD3XGjyPQ.git virtual-scope


Репозиторий, однажды опубликованный в Radicle, будет жить в сети, пока не исчезнет последний сидер (а это в принципе не подразумевается). Даже я, как владелец, не смогу его удалить или закрыть к нему доступ. Максимум, что я могу - удалить исходники и сделать коммит, но вы же понимаете...

А ещё туда можно отправлять issue и патчи (пулл-реквесты), и делать code review. И всё это будет храниться в распределенной сети. Как вам такое?
👍91
Forwarded from Влада Зуева
👍 Отличные новости для FPGA-сообщества: регистрация на конференцию FPGA-Systems 2025 открыта!

Это редкая возможность всего за один день:
➡️ прокачать свои знания на глубоких технических докладах,
➡️ найти ответы на сложные вопросы у практикующих экспертов,
➡️ обменяться опытом с коллегами из других компаний.

Ждем вас!

🗓 29 ноября 2025 года
🗺 Москва, 2-й Кожуховский пр., д. 29, корп. 6 (МЦК «ЗИЛ»).

Участие бесплатно, но количество мест в офлайне не безлимитно. Так что советуем регистрироваться как можно скорее. Вступайте и в чат конференции. До встречи! 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Засиделись? Расчехляйте свои Вивады, и разомнитесь на констрейнах! Вождь FPGA-Systems приготовил для вас небольшой челленж: https://fpga-systems.ru/fpga-systems-challenge
👨‍💻4
Forwarded from позитивслэк (Bogdan)
Verilator и UVM [8]

Support for upstream UVM 2017 in Verilator

we are happy to announce that Verilator can now elaborate upstream UVM 2017-1.0 - no patches or workarounds required.


holy shi~
они сделали это 😎

#uvm #verilator
@positiveslack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72🎉1
Очередная попытка натравить нейросети на генерацию RTL с использованием текстовых спецификаций. Авторы собрали многоступенчатый пайплайн, состоящий из агента-архитектора, который по спецификации пишет черновик с интерфейсами, состояниями и зависимостями, агентов генерации RTL, симуляции, анализа ошибок, агента - исправлятеля ошибок, и агента верификации. Все они в цикле чего-то там анализируют и пишут, пока не останется ошибок и модуль не пройдёт выходную верификацию. Собственно, подобным образом работают все агентские системы для вайб-кодинга.

Пишут, что результат получился рабочим: в сравнении с прежними подходами без обратной связи pass-rate получится выше, а итераций меньше. Предсказуемо, итеративная коррекция через фидбэк - более жизнеспособный путь, чем прямая генерация RTL в чатике.

Однако есть и ограничения:
🔵работает на уровне небольших модулей, в интеграцию не может;
🔵требует чёткой спецификации, "сделай хорошо" не работает;
🔵не решает проблемы оптимизации, может только корректно отсимулировать и отсинтезировать;
🔵требует внешний тестбенч для выходных тестов.

Т.е. вайбкодить по-настоящему пока не получится. Выдыхаем. Пока... 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌5😱3