TGViewer
Записки CPU designer'a Записки CPU designer'a @cpu_design · 3.56K subscribers
Post #411 2.31K
Новый инструмент для работы с Verilator-based регрессиями - wzv. record now, get waveforms later

Как обычно выглядит регрессионное тестирование RTL?

На условный IP есть большой набор тестов. Писать полный waveform dump для каждого из них - плохая идея: очень быстро закончится место на диске, а сама симуляция из-за tracing может замедлиться.

Поэтому regression обычно запускают без waves.
А дальше начинается классический debug workflow:

1) Запускаем regression без tracing.
2) Тест из regression коллекци падает, допустим, через 40 минут.
3) Видим error и время падения.
4)Пересобираем или перезапускаем тест с --trace-fst.
5) Ждём, ждём, ждём.
6) Получаем огромный FST файл, где информация нужна не вся, а в некотором окне от момента падения.

wzv решает именно эту проблему.
Вместо полного waveform dump симуляция запускается практически как обычно, но wzv записывает только информацию, которую Verilator не сможет потом восстановить самостоятельно:
- значения top-level inputs при каждом eval();
- simulation/tick time;
- периодические checkpoints состояния модели через VerilatedSave.

Такая запись получается очень маленькой и почти не влияет на скорость основной regression.
После падения теста workflow становится примерно таким:

1) Запускаем regression + wzv.
2) Тест падает. Получаем failure time.
3) Запускаем wzv replay только для небольшого окна, относительно failure time.
4) Получаем небольшой FST для интересующего участка.

То есть вместо того, чтобы заранее сохранять огромные дампы значений внутренних сигналов, мы сохраняем stimulus + checkpoints, а waveform восстанавливаем post-mortem только там, где он реально понадобился.
Причём можно восстановить как произвольное временное окно, так и весь run целиком.

Как же это работает?
This works because a Verilator model (2-state, --no-timing) is a deterministic function of its state and its inputs: the waveform carries no information beyond the input stream, so it doesn't have to be stored — only replayed. Checkpoints exist purely so replay can start near the window you ask for instead of at time 0.


Больше деталей - https://github.com/muzafferkal/wzv
GitHub GitHub - muzafferkal/wzv: wzv — record now, get waveforms later wzv — record now, get waveforms later. Contribute to muzafferkal/wzv development by creating an account on GitHub.
  • ✍ 14
  • 😁 3
  • 👍 2
More from @cpu_design
  1. Sep 27, 2026RTL/Verif/PhysDesign-инженеры, теперь наша пора радоваться (либо трястись, что нас всех ск…
  2. Sep 14, 2026How OpenAI Used Its Own LLMs to Design Its Jalapeño Chip https://spectrum.ieee.org/llms-fo…
  3. Sep 14, 2026Люблю технологии ASUS driver - https://github.com/torvalds/linux/blob/master/drivers/hid/h…
  4. Sep 13, 2026Вышел новый формат от Истового Инженера - «Разгоны», где инженеры разных специальностей об…
  5. Sep 12, 2026Jane Street запустили новый ASIC Challenge - на этот раз предлагают спроектировать настоящ…
  6. Sep 11, 2026AI EDAs: Is It Real? В последнее время на канале мы всё чаще обсуждаем, как AI меняет инду…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →