constrainedrandom
Кажется, у этого питоньего пакета преступно мало звёзд на гитхабе. Или я чего-то не знаю?
Обычно для рандомизации с констрейнами в cocotb тестбенчах PyVSC является выбором по умолчанию. Однако, он довольно медленный.
Текущий пакет по сути обёртка над random и constraint. И он в десятки раз быстрее PyVSC. А на небольших наборах транзакций вполне себе соизмерим с солверами в коммерческих симуляторах. Ребята из Imagination в проде у себя его используют, но это правда не удивительно, т.к. пакет там и был рожден.
Картинки из недавнего доклада на ORConf: видео, слайды.
#cocotb #python
@positiveslack
Кажется, у этого питоньего пакета преступно мало звёзд на гитхабе. Или я чего-то не знаю?
Обычно для рандомизации с констрейнами в cocotb тестбенчах PyVSC является выбором по умолчанию. Однако, он довольно медленный.
Текущий пакет по сути обёртка над random и constraint. И он в десятки раз быстрее PyVSC. А на небольших наборах транзакций вполне себе соизмерим с солверами в коммерческих симуляторах. Ребята из Imagination в проде у себя его используют, но это правда не удивительно, т.к. пакет там и был рожден.
Картинки из недавнего доклада на ORConf: видео, слайды.
#cocotb #python
@positiveslack
🔥9✍6
Кстати, интересная мысль прозвучала в докладе из поста выше.
Большие вендоры влили/вливают очень много ресурсов, чтобы их солверы для SV поддерживали всё многообразие констрейнов и были эффективными. Но результатами понятное дело не делятся.
А у опенсорс сообщества по сути одна дорога - консолидироваться вокруг доступных SAT солверов. Интересно, что автор не упоминает, но verilator уже идёт этой дорогой. И кажется успешно - количество поддерживаемых констрейнов увеличивается постепенно.
Т.е. для того что-то похожее на SV рандомизацию появилось для питоньих тестбенчей в максимально эффективном виде, нужно всего-то подсмотреть как это делают в вериляторе, написать подобное отдельной прослойкой на плюсах/расте, сделать биндинги в питон. И кажется будет красиво. Надеюсь когда-нибудь найдется герой для этого подвига😭
#python
@positiveslack
Большие вендоры влили/вливают очень много ресурсов, чтобы их солверы для SV поддерживали всё многообразие констрейнов и были эффективными. Но результатами понятное дело не делятся.
А у опенсорс сообщества по сути одна дорога - консолидироваться вокруг доступных SAT солверов. Интересно, что автор не упоминает, но verilator уже идёт этой дорогой. И кажется успешно - количество поддерживаемых констрейнов увеличивается постепенно.
Т.е. для того что-то похожее на SV рандомизацию появилось для питоньих тестбенчей в максимально эффективном виде, нужно всего-то подсмотреть как это делают в вериляторе, написать подобное отдельной прослойкой на плюсах/расте, сделать биндинги в питон. И кажется будет красиво. Надеюсь когда-нибудь найдется герой для этого подвига
#python
@positiveslack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🤔3
Firejail + Codex
Однажды Эрнест Хемингуэй поспорил, что сможет написать самый короткий рассказ, способный растрогать любого:
(кстати красивый финальный панчлайн он выдал)
Вот такие истории как выше только подтверждают мои переживания, о том, что не сломает ли мне этот llm-джин вдруг что-то на хосте при очередном запуске. Понятно что там довольно много "если" должно сложиться вплоть до прямого разрешения выполнять команды в консоли, не требуя подтверждения от юзера. Но тем не менее.
Поэтому сделал небольшой скрипт обертку для Codex (это cli агент от OpenAI), которая даёт ему в доступ только к текущему рабочему каталогу. Думаю что подобное можно сделать и для cursor и для других штук, если нужно.
https://gist.github.com/esynr3z/31e34a8e5037079ff0c9a3b2f1b39c2c
Не то чтобы это какая-то мощная гарантия, но уже что-то. Дальше наверное только выполнять агентов в каком-то изолированном контейнере/VM, но тут уже комбинацию спокойствие/риски/удобство надо оценивать.
P.S. Если у вас есть в загашнике тоже есть подобное, или в скрипте видны проблемы, то рад обратной связи.
#llm #tool
@positiveslack
Однажды Эрнест Хемингуэй поспорил, что сможет написать самый короткий рассказ, способный растрогать любого:
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
🔥6✍2😁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
А вы видели, что ребята из Antmicro сделали стильный опенсорсный тул для блок-дизайна?
https://antmicro.github.io/topwrap/introduction.html
Можно парсить существующий RTL и визуализировать, можно соединять и сохранять подключения во враппер. Притом можно работать с тулом как из GUI, так и через YAML и CLI.
И что меня особо радует, как любителя разработки всякой автоматизации и тулов, что всё это на их же открытом Pipeline Manager. На основе этой штуки можно строить свои красивые тулы для работы с любыми графо-подобными данными и сущностями.
#tool
@positiveslack
1🔥18🤯1
Когда спрашивают на собесе с какими AMBA протоколами кандидат знаком
P.S. Бонус в комментах, протоколоведы
#meme
@positiveslack
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
Тут увидел, что благодаря 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🔥13✍2
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шники ничего полезного не делают🫣
В соседнем чатике даже отзыв-сравнение есть:
#tool #systemverilog
@positiveslack
Ну и закрою тему тулов в этом году новым 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
2025
Для канала год прошел под лозунгом "на меня забили".
Но показательно, что больше половины постов (12) вышло в конце ноября и декабря. А всё потому что я съездил на конфу FPGA-systems. В первый раз, кстати.
Общение с единомышленниками заряжает. Поэтому делайте крутые штуки, рассказывайте о них, объединяйтесь, общайтесь, творите. И никогда не задавайтесь вопросом "а вдруг это никому не интересно". Интересно.
Увидимся в 2026!
@positiveslack
Для канала год прошел под лозунгом "на меня забили".
Но показательно, что больше половины постов (12) вышло в конце ноября и декабря. А всё потому что я съездил на конфу FPGA-systems. В первый раз, кстати.
Общение с единомышленниками заряжает. Поэтому делайте крутые штуки, рассказывайте о них, объединяйтесь, общайтесь, творите. И никогда не задавайтесь вопросом "а вдруг это никому не интересно". Интересно.
Увидимся в 2026!
@positiveslack
1🎉27🔥3
Forwarded from Записки CPU designer'a
Лекция о микроархитектуре x86-процессоров на примере Intel Skylake.
Разбираются базовые принципы работы современного out-of-order CPU: конвейер, декодирование x86-инструкций в микрооперации (µops), внеочередное исполнение, переименование регистров и аппаратные механизмы повышения производительности.
Лектор: Мэтт Годболт
Создатель Compiler Explorer и
C++ разработчик.
Разбираются базовые принципы работы современного 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
Очень крутой доклад на тему исследования возможных векторов атак на облачные плисины (типа 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
Вот так, например, преобразование выглядит на практике:
Понятно, что подобные развлечения они для гурманов, но из практической пользы - можно забрать девконтейнер себе. Можно использовать чтобы баги в вериляторе воспроизводить/репортить, slang-server тестить, ну или просто разработку/ci вести. Удобно когда в два клика в вскоде разворачивается рабочее окружение с нужными версиями тулов и плагинов.
#verilator
@positiveslack
Сделал тут небольшую песочницу, чтобы поиграться с рандомизацией в вериляторе.
Напоминаю, что в предущих сериях верилятор перешёл на такой формат рандомизации: 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
GitHub
GitHub - esynr3z/verilator-rand: 🎲 Minimal playground for studying Verilator randomization
🎲 Minimal playground for studying Verilator randomization - esynr3z/verilator-rand
1🔥12✍1