positive slack
Ir al canal en Telegram
Just yelling at pieces of silicon until they do what I want. ASIC/FPGA, HDL, UVM, embedded, memes, thoughts, etc. Feedback: @esynr3z Longreads: esynr3z.github.io
Mostrar más519
Suscriptores
Sin datos24 horas
Sin datos7 días
Sin datos30 días
Archivo de publicaciones
Verilator + SVUnit [1]
Теперь не просто домыслы, а твердое и четкое в release notes v3.37 неделю назад:
Add support for Verilator
#verilator #svunit
@positiveslackVerilator и UVM [4]
Очередная серия. Недавно прошла конференция ORConf на которой был доклад про текущий статус верилятора и... он не показал особо ничего нового. Всё примерно дублирует информацию из предыдущего доклада, но добавились некоторые цифры и факты.
Например, год назад верилятор в принципе не мог скомпилировать UVM, а сейчас только 40 строчек (!) из примерно 36к (кодовая база UVM) мешают осуществить полноценную поддержку. Ну и плюс, вскользь упомянутые, некоторые проблемы уже в рантайме. Прогресс мощный.
Штош, подождем ещё.
P.S. видео выложено на канале FOSSi Foundation, там есть видео и про иные опенсорс проекты в области чип-дизайна, возможно будет интересно.
#verilator #uvm #verification
@positiveslack
The Untapped Power of UVM Resources and Why Engineers Should Use the uvm_resource_db API
Свежая статья от Клифа Каммингса для DVCon2023.
TL;DR
◽️ UVM внутри имеет одну базу ресурсов, а
uvm_config_db и uvm_resource_db это просто разные API для доступа
◽️ 90% инженеров используют uvm_config_db, потому что так издавна советуют кукбуки
◽️ API uvm_config_db было создано специально для удобства перехода от API set_config_*/get_config_* в OVM, и никогда не задумывалось как основное API
◽️ Именно uvm_resource_db задумывалось как основное API
◽️ API uvm_config_db имеет дополнительные ограничения относительно uvm_resource_db и фактически является его подмножеством
▫️ Скоуп привязан к компонентам
▫️ Нельзя брать ресурс по типу и скоупу (без имени)
▫️Нельзя использовать полноценные регулярки в скоупе, только glob
◽️ API uvm_resource_db не имеет ограничений выше, из чего следует что
▫️Можно создавать свои псевдо-скоупы, не привязанные к иерархии UVM компонентов
▫️Можно получать доступ к ресурсам из UVM объектов, и не нужно иметь поблизости ссылку на компонент для этого (например, сиквенсор для сиквенса) или знать его полный путь
▫️Получение ресурса менее ресурсоёмкая задача - не нужно внутри проверять что скоуп, это валидный путь среди компонентов
◽️ Многие отмечают неочевидность комбинации cntxt+inst_name в uvm_config_db для задания скоупа
◽️В uvm_resource_db скоуп задается просто строкой, что проще, однако предполагает что должны быть выработаны общие правила составления этой строки в проекте
Общие советы:
◽️ Всегда проверять результат, возвращаемый геттерами БД вне зависимости от API - предсказуемость выше и легче отлаживать
▫️ Всегда делать это через if, а не assert, т.к. последний можно отключить намеренно или нет
◽️ Ограничить обращение к БД ресурсов в рантайме, т.к. положить и взять что-то из базы ресурсоёмкие задачи, и могут снижать производительность симуляции
#uvm #verification
@positiveslackWhy do you cry, Willy? [1]
Интересные грабли. В VCS сигналы logic в портах модуля реализованы не по стандарту.
По стандарту (раздел 23.2.2.3) вот эти записи должны быть эквивалентны:
input logic [2:0] a input wire logic [2:0] a input wire [2:0] a input [2:0] aНо нет. В VCS
input logic это по умолчанию var logic, а не wire logic. А это сильно бьет по всяким техникам из тестбенчей типа uvm harness (port coercion работает только с проводами) и разным хитрым драйверам.
Про эту проблему можно найти посты на форумах (input port cannot be driven, bind port type logic). Интересно, что один юзер написал
>SYNOPSYS has a switch for it. Ask their AE.
Так вот, действительно есть ключ, с короторым можно получить поведение по стандарту. И, ожидаемо, он ни в какой документации не фигурирует 🙈
Этот ключ -sv_net_ports.
#system_verilog #vcs #synopsys
@positiveslackSystemVerilog 2023 Teaser
Великий Дейв поделился небольшим инсайдом о том, что мы увидим в новом стандарте SystemVerilog 2023. Из нововведений:
▫️ возможность изменения coverpoint при наследовании класса
▫️ функция map() для работы с массивами (как в питончике)
▫️ ifdef с логическими выражениями (A && B)
▫️ многострочные string
▫️ и другое
#systemverilog
@positiveslack
Установка Modelsim в Ubuntu
https://gist.github.com/esynr3z/cd70859b4e20775c3b6a38c91ac81588
Кто хоть раз ставил раньше модельсим знают, как надо было мучительно доставлять пакеты, даунгрейдить пакеты, править скрипты. Однако, многие проблемы были пофикшены в недавних версиях и теперь молельсим можно поставить в пяток команд.
В гисте выше используется бесплатная интеловская версия. Приятно, что, зная прямую ссылку, можно скачивать без всяких регистраций/логинов на сайте.
У меня этот скрипт даже какое-то время в CI гитхаба крутился. А что, интернет канал там жирный, полная установка с нуля занимала ~5 минут.
P.S. скрипт как есть, на последних версиях модельсима и убунты не проверял.
#eda
@positiveslack
Verilator + SVUnit
Хм, тут в линкеде пишут что Verilator, начиная с версии 5.010, поддерживает уже достаточно фич несинтезируемого подмножества, чтобы полноценно запускать SVUnit.
Повод поэксперементировать.
P.s. напоминаю, что ребята из CHIPS Alliance обещали работающий в вериляторе UVM тестбенч к концу 2023. Держим кулачки.
#verilator #svunit
@positiveslack
Простой бенчмарк для HDL-симуляторов
https://github.com/punzik/simbench
N PicoRV32 ядeр молотят MD5 от блоков размером M. В readme даже есть некоторые результаты похожие на правду.
P.S.
По каким-то причинам в открытом доступе нет ни готовых бенчмарков, ни результатов сравнения производительности основных симуляторов на типичных задачах.
Картельный сговор? Лицензионные ограничения? NDA? Технические сложности?
#eda #performance
@positiveslack
chrome-tracing как фронтенд для ваших логов
Есть такая утилита в браузере для профилирования производительности: chrome://tracing (просто вбить в строке адреса).
И для меня стало открытием то, насколько она универсальна, и что часто ей пользуются совсем не веб-разработчики.
А всё потому, что всё что она делает это принимает json со списком событий (самих типов событий десяток) и отрисовывает их на временной шкале. А также даёт сносный UI для манипуляций и инспекции. Попробуйте или погуглите как это выглядит.
Это всё значит, что можно сконвертировать любой лог трассировки в определенный json формат и изучать полученные диаграммы глазами.
Просто, бесплатно, и не выходя из браузера. Ну почти, конвертер в json написать придётся только.
Звучит как отличное подспорье для любых железячных инженеров - логи трассировки есть везде, и в эмбеддед, и в моделях (RTL и иных). Бывает полезно протокол какой-нибудь потрассировать, да и измерение производительности в программно-аппаратных системах никто не отменял.
▫️ The Trace Event Profiling Tool
▫️ Описание json
▫️ Статья про кастомное использование этой утилиты
▫️ Другая статья про кастомное использование
#tracing #profiling #tool
@positiveslack
Celebrating 10 years of making verification fun again
Тут оказывается на днях был юбилей у cocotb. По сравнению с "консервативными" инструментами конечно пшик, но тем не менее какая-то зрелость была достигнута.
Сейчас вижу что больше и больше команд начинают его использовать и тянуть в прод. Вплоть до того, что новые проекты, где нет випов или наработок больших, сразу начинают на нём. И те, кто вкусили его однажды, больше не особо горят желанием возвращаться на SV почему-то.
Из статьи выше узнал, что оказывается Aldec и Siemens даже предоставили лицензии на симуляторы и поддержку разработчикам. Лайк таким вендорам (*synopsys и cadence, смотрю на вас с укором*).
Есть конечно куча шероховатостей, да и общей методологии нет, и кто во что горазд пилит. Но и это должно устаканиться со временем.
#cocotb #verification
@positiveslack
Verification of Chisel Hardware Designs with ChiselVerify
Интересная и относительно свежая (февраль 2023) штука из мира Chisel.
Академики выкатили библиотеку ChiselVerify. С ней, верификация на Scala уже становится как-будто похожа на традиционную в SV:
Чем бы инженер не тешился, лишь бы на верилоге не писать =)
#chisel #verification
@positiveslack
Our work supports functional coverage, constrained random verification, bus functional models, and transaction-level modeling in a verification library named ChiselVerify, while the formal methods are directly integrated into Chisel3.До этого был доступен лишь ChiselTest, который умел лишь "peek (read value from circuit), poke (write value to circuit), and step (advance time) operations".
Мутационное тестирование
В сегодня лет я узнал что существует такой подход как мутационное тестирование.
Идея супер проста. Вот есть у нас тесты с автопроверками, но мы уверены что они действительно работают? Можно писать тесты для тестов, но так можно и ценарий для Нолановского фильма написать ненароком. А так, берём "мутируем" нашу программу/дизайн - вносим ошибки по определенным правилам во всякие логические выражения и не только. И дальше ждём что тест(-ы) упадут. Если тесты не упали, то возможны разные варианты в том числе то, что тест криво написан.
Такой брутфорс для оценки качества тестов.
Более того, такой инструмент есть во многими любимым Yosys для HDL.
А у big3 есть такое? Или кто-то юзал подробный подход на практике?
#verification #testing #mutation
@positiveslack
Формальная верификация с SymbiYosys
https://fpga-systems.ru/formal-verification-with-symbiyosys
Респект @punzik за статью!
#formal #verification
@positiveslack
Any programmable logic: *exists*
Olof Kindgren: Hey, do you think we can run SERV on that thing?
Ref: linkedin, @neerps
#meme
@positiveslack
Integrating the Language Server Protocol in Verible
Возможно я один такой слоупок, но оказывается в verible активно пилят language server и даже статью вон вчера выпустили на эту тему.
Что это даёт. Можно в файлах релиза найти verible.vsix - это расширение VSCode, которого нет в маркете и которое надо ставить руками. Оно должно сделать разработку на SV такой, какой она должна быть вместе с:
▫️Linting - проверка стиля на соответсвие правилам
▫️Formatting - думаю понятно
▫️Outline - дерево модулей, классов, функций и прочих блоков
▫️Go-To-Definition - прыжки на определение выделенной переменной/символа
Всё это так или иначе есть и в других SV плагинах в VSCode, но там оно работает чаще всего плохо. Есть надежда что развивающийся verible когда-нибудь должен побить всё остальное.
Пока что сходу расширение у меня не завелось полностью - только форматирование нормально работает похоже. Может редактор надо обновить или ещё что. Если у кого вдруг работает хорошо - пишите рецепт в коментах.
P.S. сам verible необходимо предварительно установить для работы расширения.
#verible #tool
@positiveslack
RISC-V ISA online string decoder
Забавно. С расширениями RISC-V уже так далеко зашли, что стали нужны декодеры названия архитектуры процессора, чтобы не запутаться😅
https://rv.drom.io
https://github.com/drom/rv
#riscv
@positiveslack
Давид против Голиафа
Крайне занимательная история о том, как Ядро, Хуавей и немного других игроков боролись за 700 сотрудников ушедшего Интела. Повествование от лица Хуавея.
Читать отсюда и 8 постов вниз.
#industry #intel #huawei #yadro
@positiveslack
Make Verification Fun Again with Python and cocotb
Philipp Wagner
https://youtu.be/EK7yvowRngQ
Довольно неплохой и свежайший обзор cocotb. Презентация в коментах.
#verification #cocotb #python
@positiveslack
