позитивслэк
Why do you cry, Willy? Все же любят задачки на нюансы работы SV? Так вот, если добавить в код такой пакет (uvm там просто для примера) и импортировать его где-либо, то компиляция пройдет, но симуляция упадет. Почему и как? package foobar; import uvm_pkg::*;…
Why do you cry, Willy? [1]
Интересные грабли. В VCS сигналы logic в портах модуля реализованы не по стандарту.
По стандарту (раздел 23.2.2.3) вот эти записи должны быть эквивалентны:
Про эту проблему можно найти посты на форумах (input port cannot be driven, bind port type logic). Интересно, что один юзер написал
>SYNOPSYS has a switch for it. Ask their AE.
Так вот, действительно есть ключ, с которым можно получить поведение по стандарту. И, ожидаемо, он ни в какой документации не фигурирует 🙈
Этот ключ
#system_verilog #vcs #synopsys
@positiveslack
Интересные грабли. В 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
@positiveslack
🤯7✍2👍2🔥2😱1
The Untapped Power of UVM Resources and Why Engineers Should Use the uvm_resource_db API
Свежая статья от Клифа Каммингса для DVCon2023.
TL;DR
◽️ UVM внутри имеет одну базу ресурсов, а
◽️ 90% инженеров используют
◽️ API
◽️ Именно
◽️ API
▫️ Скоуп привязан к компонентам
▫️ Нельзя брать ресурс по типу и скоупу (без имени)
▫️Нельзя использовать полноценные регулярки в скоупе, только glob
◽️ API
▫️Можно создавать свои псевдо-скоупы, не привязанные к иерархии UVM компонентов
▫️Можно получать доступ к ресурсам из UVM объектов, и не нужно иметь поблизости ссылку на компонент для этого (например, сиквенсор для сиквенса) или знать его полный путь
▫️Получение ресурса менее ресурсоёмкая задача - не нужно внутри проверять что скоуп, это валидный путь среди компонентов
◽️ Многие отмечают неочевидность комбинации
◽️В
Общие советы:
◽️ Всегда проверять результат, возвращаемый геттерами БД вне зависимости от API - предсказуемость выше и легче отлаживать
▫️ Всегда делать это через
◽️ Ограничить обращение к БД ресурсов в рантайме, т.к. положить и взять что-то из базы ресурсоёмкие задачи, и могут снижать производительность симуляции
#uvm #verification #tldr
@positiveslack
Свежая статья от Клифа Каммингса для 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 #tldr
@positiveslack
🔥8👌2👍1
позитивслэк
Verilator и UVM [3] На днях в открытый доступ выложили видео "Open source SV UVM support" с недавней конференции CHIPS Alliance, о которой было в предыдущей серии. Кстати, ещё материал вышел и в виде статьи. Итак, самое главное что было добавлено в последний…
Verilator и UVM [4]
Очередная серия. Недавно прошла конференция ORConf на которой был доклад про текущий статус верилятора и... он не показал особо ничего нового. Всё примерно дублирует информацию из предыдущего доклада, но добавились некоторые цифры и факты.
Например, год назад верилятор в принципе не мог скомпилировать UVM, а сейчас только 40 строчек (!) из примерно 36к (кодовая база UVM) мешают осуществить полноценную поддержку. Ну и плюс, вскользь упомянутые, некоторые проблемы уже в рантайме. Прогресс мощный.
Штош, подождем ещё.
P.S. видео выложено на канале FOSSi Foundation, там есть видео и про иные опенсорс проекты в области чип-дизайна, возможно будет интересно.
#verilator #uvm #verification
@positiveslack
Очередная серия. Недавно прошла конференция ORConf на которой был доклад про текущий статус верилятора и... он не показал особо ничего нового. Всё примерно дублирует информацию из предыдущего доклада, но добавились некоторые цифры и факты.
Например, год назад верилятор в принципе не мог скомпилировать UVM, а сейчас только 40 строчек (!) из примерно 36к (кодовая база UVM) мешают осуществить полноценную поддержку. Ну и плюс, вскользь упомянутые, некоторые проблемы уже в рантайме. Прогресс мощный.
Штош, подождем ещё.
P.S. видео выложено на канале FOSSi Foundation, там есть видео и про иные опенсорс проекты в области чип-дизайна, возможно будет интересно.
#verilator #uvm #verification
@positiveslack
YouTube
Open source design testing and verification with UVM and Verilator (Krzysztof Bieganski=
The presentation will discuss the current status of non-synthesizable SystemVerilog support in the Verilator open source simulator. The talk will shed light on the latest developments on the way towards full Universal Verification Methodology (UVM) support…
🔥6
позитивслэк
Verilator + SVUnit Хм, тут в линкеде пишут что Verilator, начиная с версии 5.010, поддерживает уже достаточно фич несинтезируемого подмножества, чтобы полноценно запускать SVUnit. Повод поэксперементировать. P.s. напоминаю, что ребята из CHIPS Alliance обещали…
Verilator + SVUnit [1]
Теперь не просто домыслы, а твердое и четкое в release notes v3.37 неделю назад:
@positiveslack
Теперь не просто домыслы, а твердое и четкое в release notes v3.37 неделю назад:
Add support for Verilator
#verilator #svunit@positiveslack
GitHub
Release v3.37.0 · svunit/svunit
Added
Add support for Verilator
Fixed
Fix csh setup script to work with directory paths containing spaces
Fix compile error in Vivado (and maybe others) caused by typedef in class
Signal interna...
Add support for Verilator
Fixed
Fix csh setup script to work with directory paths containing spaces
Fix compile error in Vivado (and maybe others) caused by typedef in class
Signal interna...
🔥4
позитивслэк
Verilator и UVM [4] Очередная серия. Недавно прошла конференция ORConf на которой был доклад про текущий статус верилятора и... он не показал особо ничего нового. Всё примерно дублирует информацию из предыдущего доклада, но добавились некоторые цифры и факты.…
Verilator и UVM [5]
Initial open source support for UVM testbenches in Verilator
Нет времени на оригинальный контент, так хоть вполглаза за индустрией посматриваю.
Первый пошёл. В тестовый набор верилятора две недели назад вмержен первый полноценный UVM тестбенч. Пока довольно простой, но тем не менее!
PR, files
#uvm #verilator #verification
@positiveslack
Initial open source support for UVM testbenches in Verilator
Нет времени на оригинальный контент, так хоть вполглаза за индустрией посматриваю.
Первый пошёл. В тестовый набор верилятора две недели назад вмержен первый полноценный UVM тестбенч. Пока довольно простой, но тем не менее!
PR, files
#uvm #verilator #verification
@positiveslack
Antmicro
Initial open source support for UVM testbenches in Verilator
🔥11❤2
Ачивки верификатора
Пятничное о насущном. 20 ачивок на около-верификаторскую тематику.
Полярник
Найти баг после rtl freeze.
Сомелье
Поработать во всех основных HDL симуляторах.
Однолюб
Пользоваться только EDA одного вендора.
Ограничен технологиями своего времени
Словить ошибку "Feature is not implemented" в симуляторе.
Небесная кара
Найти баг, который воспроизводится только без опций отладки.
Самая быстрая рука в опенспейсе
Успеть захватить лицензию на симулятор или VIP, опередив коллегу.
Верификатор в квадрате
Найти баги в VIP стороннего вендора.
Заклинатель змей
Отверифицировать блок на cocotb.
Секонд-хэнд
Стать владельцем тестбенча ушедшего из компании инженера.
Горшочек не вари
Открыть 20 багрепортов за неделю.
Хакер
Написать и отладить тест в консоли без помощи вейвформ.
Универсальный солдат
Пофиксить RTL баг самостоятельно будучи верификатором.
Богоподобный
Завершить верификацию блока в обозначенный срок.
Шерлок
Отверифицировать блок несмотря на отсутствующую документацию.
Мудрость предков
Победить в споре по UVM/SystemVerilog, опираясь на комменты/статьи Дейва (Dave Rich).
Сантехник
Найти и пофиксить текущую память в тестбенче.
Безумный титан
Оптимизировать регрессионный список, сократив количество тестов вдвое.
Ювелир
Уронить все тесты в регрессии неудачным фиксом тестбенча.
Не просто формальность
Найти критический RTL баг в ходе формальной верификации.
Позёр
Рассказывать всем как хорош Verilator, но не использовать его на практике.
#meme
@positiveslack
Пятничное о насущном. 20 ачивок на около-верификаторскую тематику.
Полярник
Найти баг после rtl freeze.
Сомелье
Поработать во всех основных HDL симуляторах.
Однолюб
Пользоваться только EDA одного вендора.
Ограничен технологиями своего времени
Словить ошибку "Feature is not implemented" в симуляторе.
Небесная кара
Найти баг, который воспроизводится только без опций отладки.
Самая быстрая рука в опенспейсе
Успеть захватить лицензию на симулятор или VIP, опередив коллегу.
Верификатор в квадрате
Найти баги в VIP стороннего вендора.
Заклинатель змей
Отверифицировать блок на cocotb.
Секонд-хэнд
Стать владельцем тестбенча ушедшего из компании инженера.
Горшочек не вари
Открыть 20 багрепортов за неделю.
Хакер
Написать и отладить тест в консоли без помощи вейвформ.
Универсальный солдат
Пофиксить RTL баг самостоятельно будучи верификатором.
Богоподобный
Завершить верификацию блока в обозначенный срок.
Шерлок
Отверифицировать блок несмотря на отсутствующую документацию.
Мудрость предков
Победить в споре по UVM/SystemVerilog, опираясь на комменты/статьи Дейва (Dave Rich).
Сантехник
Найти и пофиксить текущую память в тестбенче.
Безумный титан
Оптимизировать регрессионный список, сократив количество тестов вдвое.
Ювелир
Уронить все тесты в регрессии неудачным фиксом тестбенча.
Не просто формальность
Найти критический RTL баг в ходе формальной верификации.
Позёр
Рассказывать всем как хорош Verilator, но не использовать его на практике.
#meme
@positiveslack
🤣18🤝6🔥5❤1
Гайд по стриминговым операторам SV от AMIQ
Просто классные статьи на тему работы SystemVerilog streaming operators (>>, <<). Только посмотрите на эти картинки!
Две части:
▫️как запаковать данные
▫️как распаковать данные
#system_verilog
@positiveslack
Просто классные статьи на тему работы SystemVerilog streaming operators (>>, <<). Только посмотрите на эти картинки!
Две части:
▫️как запаковать данные
▫️как распаковать данные
#system_verilog
@positiveslack
👍9🔥3❤1
позитивслэк
Why 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]…
Why do you cry, Willy? [2]
Довольно редкие, но всё же грабли.
Есть структура, есть очередь этих структур. Если мы захотим поискать в этой очереди через локаторы по одному из полей, то мы можем ничего не найти, даже если структура точно есть в очереди. А точнее, это зависит от симулятора.
В данном примере некоторые симуляторы выведут указанное сообщение об ошибке. Другие отработают противоположным образом.
В чем проблема?
P.S. Ого как красиво стал код рендерится в постах!
#system_verilog
@positiveslack
Довольно редкие, но всё же грабли.
Есть структура, есть очередь этих структур. Если мы захотим поискать в этой очереди через локаторы по одному из полей, то мы можем ничего не найти, даже если структура точно есть в очереди. А точнее, это зависит от симулятора.
class test;
typedef struct {
int foo;
string bar;
int unsigned index;
} item_fail_t;
task test_fail();
item_fail_t example_item = '{foo:42, bar:"HELLO!", index:1};
item_fail_t item_q [$];
int res_q[$];
item_q.push_back(example_item);
res_q = item_q.find_first_index() with (item.index == example_item.index);
if (res_q.size() == 0) begin // WHYYY
$error("WTF! res_q.size() has to be 1!");
end
endtask : test_fail
endclass
В данном примере некоторые симуляторы выведут указанное сообщение об ошибке. Другие отработают противоположным образом.
В чем проблема?
P.S. Ого как красиво стал код рендерится в постах!
#system_verilog
@positiveslack
🤔5👍1
On SystemVerilog Interface Polymorphism and Extendability
Статья про то, что обычно называется "полиморфные интерфейсы", на примере стандартного APB агента.
Показывается как замена виртуального интерфейса на комбинацию из ООП техник позволяет снизить связанность кода со статическим миром SV, повысить гибкость и переиспользуемость агента в долгосроке.
TL;DR
◽️Интерфейсы нельзя наследовать, поэтому логики в них должно быть минимум, чтобы избегать копипасты. Т.е. когда много логики уезжает из драйвера в интерфейс (BFM), то это сильно бьёт по возможной кастомизации в будущем.
◽️Классический интерфейс и передача ссылки него в класс через virtual interface может мешать кастомизации агента. Например, заменить и/или расширить интерфейс и драйвер.
◽️Альтернатива - использовать Proxy паттерн + Abstract/Concrete class подход, как было описано сначала в этой, а потом в этой статье. Вместо интерфейса в агент приходит прокси объект, через методы которого можно контролировать/мониторить интерфейс.
◽️Удобно получается когда прокси класс даёт API в виде простых геттеров/сеттеров на сигналы и пачку тасок на контроль клока/ресета. Вся остальная логика - в драйвере.
◽️Недостаток подхода лишь в чуть большем количестве кода в краткосроке, взамен получаем большую гибкость в долгосроке.
🏆 В фонд цитат и выражений:
#system_verilog #verification #tldr
@positiveslack
Статья про то, что обычно называется "полиморфные интерфейсы", на примере стандартного APB агента.
Показывается как замена виртуального интерфейса на комбинацию из ООП техник позволяет снизить связанность кода со статическим миром SV, повысить гибкость и переиспользуемость агента в долгосроке.
TL;DR
◽️Интерфейсы нельзя наследовать, поэтому логики в них должно быть минимум, чтобы избегать копипасты. Т.е. когда много логики уезжает из драйвера в интерфейс (BFM), то это сильно бьёт по возможной кастомизации в будущем.
◽️Классический интерфейс и передача ссылки него в класс через virtual interface может мешать кастомизации агента. Например, заменить и/или расширить интерфейс и драйвер.
◽️Альтернатива - использовать Proxy паттерн + Abstract/Concrete class подход, как было описано сначала в этой, а потом в этой статье. Вместо интерфейса в агент приходит прокси объект, через методы которого можно контролировать/мониторить интерфейс.
◽️Удобно получается когда прокси класс даёт API в виде простых геттеров/сеттеров на сигналы и пачку тасок на контроль клока/ресета. Вся остальная логика - в драйвере.
◽️Недостаток подхода лишь в чуть большем количестве кода в краткосроке, взамен получаем большую гибкость в долгосроке.
🏆 В фонд цитат и выражений:
Clipboard-based inheritance at its finest!#system_verilog #verification #tldr
@positiveslack
🔥6👍2
Switchboard by ZeroAsic
Интересную тут штуку заопенсорсили на днях.
Фреймворк, которых позволяет поднимать обмен данными между разными сущностями типа симуляции, эмуляции и программных моделей. Всё подключается довольно однородно через точка-точка очереди, по которым гоняются довольно простые пакеты. Обещают большие скорости и минимальный оверхед.
Пока не придумал где лично мне бы пригодилось, но может натолкнет кого-то на идею.
Github
#framework
@positiveslack
Интересную тут штуку заопенсорсили на днях.
Фреймворк, которых позволяет поднимать обмен данными между разными сущностями типа симуляции, эмуляции и программных моделей. Всё подключается довольно однородно через точка-точка очереди, по которым гоняются довольно простые пакеты. Обещают большие скорости и минимальный оверхед.
Пока не придумал где лично мне бы пригодилось, но может натолкнет кого-то на идею.
Github
#framework
@positiveslack
👍8👌1
SystemVerilog Interface Classes – More Useful Than You Thought
Снова воскресная рубрика tl;dr. Теперь статья про interface class.
Интерфейсы (нет, не полу-модули для проводов, а тип класса) довольно распространены в мире "большого" программирования, но о том, что этот механизм есть в SV такое ощущение что мало кто знает.
Ребята из ARM как-то прокачали свое окружение для очередного Cortex-A с помощью интерфейсов и рассказали о профитах в статье.
TL;DR
◽️
◽️ Позволяют гибко реализовать паттерн наблюдателя (Observer/Listener) - можно динамически "подключаться", любой класс (вне зависимости от иерархии наследования) может слушать, информация не ограничена одним объектом.
▫️ Например, можно давать возможность сиквенсам слушать мониторы без костылей в виде TLM портов в сиквенсор
◽️ Позволяют эмулировать ещё одну фичу взрослых языков - "множественное наследование". Например, есть транзакция барьера DMB, есть транзакция LD, и можно элегантно сделать их гибрид LDAR, не засоряя базовый класс.
◽️ Позволяют легко генерализировать классы по какой-либо функциональности вне зависимости от дерева наследования (в статье это прикручивание фичи дампа в SQL и получения тика клока).
◽️Можно имплементировать множество интерфейсов, и имплементирован ли конкретный у объекта можно узнать через
Небольшой сторонний пример.
Ещё информация про интерфейсы: Verification Gentelman, DVTalk
#system_verilog #verification #tldr
@positiveslack
Снова воскресная рубрика tl;dr. Теперь статья про interface class.
Интерфейсы (нет, не полу-модули для проводов, а тип класса) довольно распространены в мире "большого" программирования, но о том, что этот механизм есть в SV такое ощущение что мало кто знает.
Ребята из ARM как-то прокачали свое окружение для очередного Cortex-A с помощью интерфейсов и рассказали о профитах в статье.
TL;DR
◽️
interface class (далее "интерфейс") появился в SV-2012, но все основные библиотеки были написаны ранее (типа UVM), поэтому юзались макросы и иные обходы вместо них (а как бы приятны могли бы быть TLM порты)◽️ Позволяют гибко реализовать паттерн наблюдателя (Observer/Listener) - можно динамически "подключаться", любой класс (вне зависимости от иерархии наследования) может слушать, информация не ограничена одним объектом.
▫️ Например, можно давать возможность сиквенсам слушать мониторы без костылей в виде TLM портов в сиквенсор
◽️ Позволяют эмулировать ещё одну фичу взрослых языков - "множественное наследование". Например, есть транзакция барьера DMB, есть транзакция LD, и можно элегантно сделать их гибрид LDAR, не засоряя базовый класс.
◽️ Позволяют легко генерализировать классы по какой-либо функциональности вне зависимости от дерева наследования (в статье это прикручивание фичи дампа в SQL и получения тика клока).
◽️Можно имплементировать множество интерфейсов, и имплементирован ли конкретный у объекта можно узнать через
$cast этого объекта к интерфейсуНебольшой сторонний пример.
interface class Verificator;Т.е. неважно если у котика лапки и иное дерево наследования, пока он имплементирует интерфейс верификатора, то может им считаться и быть задействованным соответственно.
pure virtual function report verify_rtl(rtl code);
endclass
class Person implements Verificator;
virtual function report verify_rtl(rtl code);
// implementation here
endfunction
endclass
class Cat extends Animal implements Verificator;
virtual function report verify_rtl(rtl code);
// implementation here
endfunction
endclass
...
Verificator verif = get_free_verificator(); // Person, Cat or any
report = verif.verify_rtl(code);
...
Ещё информация про интерфейсы: Verification Gentelman, DVTalk
#system_verilog #verification #tldr
@positiveslack
👍13🌚1
😁15
Cohesion and Coupling: the difference
Просто понравились картинки из статьи про сцеплённость (cohesion) и связность (coupling). Помним, что наиболее профитно формировать логический объект (класс, модуль, пакет, whatever) из хорошо сцеплённых кусочков, а связей с соседними объектами делать по-минимуму. В общем-то универсальная база, но следовать порой тяжело, однако.
P.S. Кстати, эта статья одна из серии коротких статей про наиболее ценные концепции программирования (и не только): YAGNI, KISS, Encapsulation, DRY, Fail Fast, Explicit Assumptions.
#programming
@positiveslack
Просто понравились картинки из статьи про сцеплённость (cohesion) и связность (coupling). Помним, что наиболее профитно формировать логический объект (класс, модуль, пакет, whatever) из хорошо сцеплённых кусочков, а связей с соседними объектами делать по-минимуму. В общем-то универсальная база, но следовать порой тяжело, однако.
P.S. Кстати, эта статья одна из серии коротких статей про наиболее ценные концепции программирования (и не только): YAGNI, KISS, Encapsulation, DRY, Fail Fast, Explicit Assumptions.
#programming
@positiveslack
👍8
позитивслэк
Verilator и UVM [5] Initial open source support for UVM testbenches in Verilator Нет времени на оригинальный контент, так хоть вполглаза за индустрией посматриваю. Первый пошёл. В тестовый набор верилятора две недели назад вмержен первый полноценный UVM…
Verilator и UVM [6]
Думал сейчас быстро возьму этот первый UVM тестбенч, запущу побольше транзакций и сравню производительность с проприетарными симами. Приключение на 20 минут, ага.
Тестбенч оказался кривоват и считай ничего не делал - пришлось на ходу костыли докидывать, чтобы он хоть какой-то вменяемый траффик гнал.
Ну а верилятор я не победил. Он драйвит виртуальный интерфейс, и своим же монитором видит как он его драйвит, но на DUT ничего не заходит почему-то. Данные от дута всегда нулевые, и вейвы показывают мертвые нули на всех сигналах кроме сброса и клока.
Подозреваю что я как-то криво это всё приготовил, но не вижу явного косяка.
Ну и результаты пока такие себе:
- проприетарные симы: ~15сек компиляция (1 поток), ~30сек симуляция 1М транзакций
- verilator: ~10мин (6 потоков) компиляция, ~30сек симуляция 1М транзакций (бесполезных)
Скрипты и исходники закинул в репо. Ах да, версия верилятора 5.018.
#uvm #verilator
@positiveslack
Думал сейчас быстро возьму этот первый UVM тестбенч, запущу побольше транзакций и сравню производительность с проприетарными симами. Приключение на 20 минут, ага.
Тестбенч оказался кривоват и считай ничего не делал - пришлось на ходу костыли докидывать, чтобы он хоть какой-то вменяемый траффик гнал.
Ну а верилятор я не победил. Он драйвит виртуальный интерфейс, и своим же монитором видит как он его драйвит, но на DUT ничего не заходит почему-то. Данные от дута всегда нулевые, и вейвы показывают мертвые нули на всех сигналах кроме сброса и клока.
Подозреваю что я как-то криво это всё приготовил, но не вижу явного косяка.
Ну и результаты пока такие себе:
- проприетарные симы: ~15сек компиляция (1 поток), ~30сек симуляция 1М транзакций
- verilator: ~10мин (6 потоков) компиляция, ~30сек симуляция 1М транзакций (бесполезных)
Скрипты и исходники закинул в репо. Ах да, версия верилятора 5.018.
#uvm #verilator
@positiveslack
👍4
How I Learned UVM Verification: A Resource Guide
Примерно год назад я набросал список материалов по которым я бы учил SV и UVM, если бы делал это заново.
Сейчас я бы его оставил таким же, разве что стандарт на SV поместил бы в фоновый режим, т.е. всегда на столе — всегда почитываем.
Я к чему. Тут набрел на еще один верификаторский блог verification-explorer.com. И вот там последний пост как раз про то же самое - ресурсы для изучения. Добротная коллекция. Думаю она покрывает большинство значимых источников информации по верификации, которые существуют в вебе. Рекомендую.
#verification #system_verilog #uvm
@positiveslack
Примерно год назад я набросал список материалов по которым я бы учил SV и UVM, если бы делал это заново.
Сейчас я бы его оставил таким же, разве что стандарт на SV поместил бы в фоновый режим, т.е. всегда на столе — всегда почитываем.
Я к чему. Тут набрел на еще один верификаторский блог verification-explorer.com. И вот там последний пост как раз про то же самое - ресурсы для изучения. Добротная коллекция. Думаю она покрывает большинство значимых источников информации по верификации, которые существуют в вебе. Рекомендую.
#verification #system_verilog #uvm
@positiveslack
🔥6❤1👍1
Constant Reference in SystemVerilog: Is It Really Constant?
Когда надо показать что в функцию аргумент передается по ссылке, и при этом внутри его никто не собирается модифицировать, то его можно пометить как
Я провел микро-исследование в 5 симуляторах, и вполне ожидаемо получил следующее:
◽️Степень защиты от изменения сильно разнится от симулятора к симулятору. Особенно когда речь про класс и его члены.
◽️Можно намеренно или случайно написать код, непереносимый между симуляторами.
◽️В итоге, const ref хорош в основном только как хинт, чтобы выразить свои намерения другому программисту, хотя и даёт некоторые безусловные гарантии.
#system_verilog
@positiveslack
Когда надо показать что в функцию аргумент передается по ссылке, и при этом внутри его никто не собирается модифицировать, то его можно пометить как
const ref. Но какие на самом деле гарантии неизменяемости даёт симулятор?Я провел микро-исследование в 5 симуляторах, и вполне ожидаемо получил следующее:
◽️Можно намеренно или случайно написать код, непереносимый между симуляторами.
◽️В итоге, const ref хорош в основном только как хинт, чтобы выразить свои намерения другому программисту, хотя и даёт некоторые безусловные гарантии.
#system_verilog
@positiveslack
👍7
VCDrom
Огненный плагин к VSCode от Алексея Чепыженко (автор wavedrom), чтобы смотреть VCD вейвы прямо в IDE.
Демо на ютубе
#vscode
@positiveslack
Огненный плагин к VSCode от Алексея Чепыженко (автор wavedrom), чтобы смотреть VCD вейвы прямо в IDE.
Демо на ютубе
#vscode
@positiveslack
🔥15❤3