позитивслэк
845 subscribers
129 photos
41 files
191 links
ASIC, FPGA, SystemVerilog, UVM. Цифровой дизайн, программирование, духота и мемы. С уклоном в верификаторство.

https://t.me/boost/positiveslack
Download Telegram
constrainedrandom

Кажется, у этого питоньего пакета преступно мало звёзд на гитхабе. Или я чего-то не знаю?

Обычно для рандомизации с констрейнами в cocotb тестбенчах PyVSC является выбором по умолчанию. Однако, он довольно медленный.

Текущий пакет по сути обёртка над random и constraint. И он в десятки раз быстрее PyVSC. А на небольших наборах транзакций вполне себе соизмерим с солверами в коммерческих симуляторах. Ребята из Imagination в проде у себя его используют, но это правда не удивительно, т.к. пакет там и был рожден.

Картинки из недавнего доклада на ORConf: видео, слайды.

#cocotb #python
@positiveslack
🔥96
Кстати, интересная мысль прозвучала в докладе из поста выше.

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

А у опенсорс сообщества по сути одна дорога - консолидироваться вокруг доступных SAT солверов. Интересно, что автор не упоминает, но verilator уже идёт этой дорогой. И кажется успешно - количество поддерживаемых констрейнов увеличивается постепенно.

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

#python
@positiveslack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🤔3
Firejail + Codex

Однажды Эрнест Хемингуэй поспорил, что сможет написать самый короткий рассказ, способный растрогать любого:

CLAUDE: Looking at your log, here's the catastrophic command that was run:
rm -rf tests/ patches/ plan/ ~/
See that ~/ at the end? That's your entire home directory.

(кстати красивый финальный панчлайн он выдал)

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

Поэтому сделал небольшой скрипт обертку для Codex (это cli агент от OpenAI), которая даёт ему в доступ только к текущему рабочему каталогу. Думаю что подобное можно сделать и для cursor и для других штук, если нужно.
https://gist.github.com/esynr3z/31e34a8e5037079ff0c9a3b2f1b39c2c

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

P.S. Если у вас есть в загашнике тоже есть подобное, или в скрипте видны проблемы, то рад обратной связи.

#llm #tool
@positiveslack
🔥62😁2
This media is not supported in your browser
VIEW IN TELEGRAM
Topwrap

А вы видели, что ребята из Antmicro сделали стильный опенсорсный тул для блок-дизайна?

https://antmicro.github.io/topwrap/introduction.html

Можно парсить существующий RTL и визуализировать, можно соединять и сохранять подключения во враппер. Притом можно работать с тулом как из GUI, так и через YAML и CLI.

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

#tool
@positiveslack
1🔥18🤯1
Когда спрашивают на собесе с какими AMBA протоколами кандидат знаком

P.S. Бонус в комментах, протоколоведы

#meme
@positiveslack
1😁20
Testplanner & Coverview

Тут увидел, что благодаря Antmicro, некоторые из скриптов проекта OpenTitan были причесаны и отпочкованы в отдельные инструменты. В первую очередь могут быть интересны верификаторам.

Tesplanner - инструмент для ведения тестпланов в HJSON. Машиночитаемый формат как единственный source-of-truth, а дальше из него генерируется документация и разные производные форматы для трекинга прогресса. Например, запуски тестов аннотируются и попадают в красивый дашборд. При этом исходники тестов, документация и дашборд с результатами связаны перекресными ссылками, что удобно для анализа. Интеграция в cocotb тоже на месте.

Есть статья в блоге с более детальным описанием.

Coverview - инструмент для генерации дашбордов для анализа покрытия. Умеет в стандартный формат LCOV (а кто-то из big3 умеет в такое?) и в общем-то нейтрален к исходному языку. Применительно к RTL понимает только кодовое покрытие. Ребята еще развернули отдельный просмотрщик в github pages, куда можно загрузить свой zip архив с правильным наполнением и посмотреть результаты.

Статья в блоге тоже имеется.

P.S. Да, я фанат Antmicro, а их github профиль насчитывает 824 репо, так что буду еще что-то хайлайтить оттуда, что поделаешь 😊

#tool #verification
@positiveslack
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥132
slang-server

Ну и закрою тему тулов в этом году новым LSP для SystemVerilog поверх Slang. Есть подозрение, что в будущем это может стать выбором по умолчанию для написания SV 🎧

Ликбез. LSP это та штука, что живёт в IDE и даёт редактору возможность делать переходы по символам,показывать хинты, делать автодополнение и другие вещи для нужного языка. Ну а Slang это просто наиболее полный и самый быстрый парсер SV (по заявлениям разработчиков).

В итоге в IDE получаем ту самую эргономику в написании SV, которая есть по умолчанию у программистов на языках высокого уровня. Все фичи перечислять долго, лучше посмотрите доклад или полистайте слайды.

Некоторые хайлайты:
▫️поддерживается neovim и vscode из коробки (последний пока в меньшей мере)
▫️индексация тысяч sv файлов на десятки мегабайт менее чем за секунду
▫️автодополнение, переходы по ссылкам, всплывающие хинты, раскрытие макросов
▫️иерархия, список модулей, поиск по инстансам
▫️интеграция с surfer для связывания кода и вейформ, трассировки driver/load и отображение текущих значений в коде (экспериментально)

Из будущих фич зацепило что будет больше хинтов, переименование символов (рефакторинг), более тесная интеграция с vscode и surfer, автофиксы и slang-format. Полноценный форматтер 🍒

Btw, сервер разработан в Hudson River Trading (там и автор slang работает кстати), а ещё кто-то говорил что HFTшники ничего полезного не делают 🫣

В соседнем чатике даже отзыв-сравнение есть:
Уже недели 3 пользуюсь этим LSP, фантастическая штука
Из всего, что пробовал, мне этот больше всего нравится. У verible слабый препроцессор, на макросах сразу падает, пришлось вообще выключить. Svls не умеет делать symbol rename, да и линт что-то не понравился, уже не помню почему. Svlangserver в основном хорошее автодополнение, но фич немного, опять же нет symbol rename. Хочу попробовать еще verilog-mode, но для этого надо выучить emacs, так что как-нибудь потом.

#tool #systemverilog
@positiveslack
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10
😁198🔥3🤔1
2025

Для канала год прошел под лозунгом "на меня забили".

Но показательно, что больше половины постов (12) вышло в конце ноября и декабря. А всё потому что я съездил на конфу FPGA-systems. В первый раз, кстати.

Общение с единомышленниками заряжает. Поэтому делайте крутые штуки, рассказывайте о них, объединяйтесь, общайтесь, творите. И никогда не задавайтесь вопросом "а вдруг это никому не интересно". Интересно.

Увидимся в 2026!

@positiveslack
1🎉27🔥3
Лекция о микроархитектуре x86-процессоров на примере Intel Skylake.

Разбираются базовые принципы работы современного out-of-order CPU: конвейер, декодирование x86-инструкций в микрооперации (µops), внеочередное исполнение, переименование регистров и аппаратные механизмы повышения производительности.

Лектор: Мэтт Годболт
Создатель Compiler Explorer и
C++ разработчик.
🔥7
How to render cloud FPGA useless

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

tl;dr атакующий должен хирургически точно организовать нужное количество осцилляторов (ring oscillator) внутри дизайна, чтобы либо увести плату или инстанс в отказ, либо повредить/"состарить" конкретные пути в плисине. Обе атаки работают. В первом случае удалось сделать сотню инстансов недоступными на часы, а во втором удалось состарить некоторые пути так, что они стали медленнее на 50-70%.

Довольно много интересных деталей всего процесса с мемными комментариями докладчика.

Интересно, что базовые DRC в AWS пропускают такие "вредоносные" дизайны, поэтому исследователи даже предложили "щит" против своего же "меча".

Доклад с конфы 39c3.

#fpga
@positiveslack
🔥11🤯3
Играемся с Verilator, SMT2, Z3

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

Напоминаю, что в предущих сериях верилятор перешёл на такой формат рандомизации: SV констрейны парсятся, из них составляется запрос в SMT2 синтаксисе, запрос отправляется в решатель в системе (типа z3). Там есть разные хитрости в процессе, захотелось на них посмотреть и поиграть с z3.

В итоге сделал репо, в котором разворачивается верилятор и slang-server, есть сниппеты кода с рандомизацией, а z3 обернут в скрипт, чтобы дампить ввод-вывод в файлы.
https://github.com/esynr3z/verilator-rand

Вот так, например, преобразование выглядит на практике:

Класс с констрейном:

class Test;
rand byte a;

constraint a_c {
a >= 0;
a <= 10;
}
endclass

SMT2 код:

(set-logic QF_ABV)
(check-sat)
(reset)
(set-option :produce-models true)
(set-logic QF_ABV)
(define-fun __Vbv ((b Bool)) (_ BitVec 1) (ite b #b1 #b0))
(define-fun __Vbool ((v (_ BitVec 1))) Bool (= #b1 v))
(declare-fun a () (_ BitVec 8))
(assert (= #b1 (__Vbv (bvsge ((_ sign_extend 24) a) #x00000000))))
(assert (= #b1 (__Vbv (bvsle ((_ sign_extend 24) a) #x0000000a))))
(check-sat)
(get-value ( a))
(assert (= #b0 (bvxor ((_ extract 1 1) a) ((_ extract 2 2) a) ((_ extract 3 3) a) ((_ extract 5 5) a))))

(check-sat)
(get-value ( a))
(assert (= #b1 (bvxor ((_ extract 0 0) a) ((_ extract 2 2) a) ((_ extract 6 6) a) ((_ extract 7 7) a))))

(check-sat)
(get-value ( a))
(assert (= #b1 (bvxor ((_ extract 0 0) a) ((_ extract 1 1) a) ((_ extract 3 3) a) ((_ extract 4 4) a))))

(check-sat)
(get-value ( a))
(assert (= #b1 (bvxor ((_ extract 0 0) a) ((_ extract 1 1) a) ((_ extract 3 3) a) ((_ extract 7 7) a))))

(check-sat)
(get-value ( a))


Понятно, что подобные развлечения они для гурманов, но из практической пользы - можно забрать девконтейнер себе. Можно использовать чтобы баги в вериляторе воспроизводить/репортить, slang-server тестить, ну или просто разработку/ci вести. Удобно когда в два клика в вскоде разворачивается рабочее окружение с нужными версиями тулов и плагинов.

#verilator
@positiveslack
1🔥121