positive slack
Open in 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
Show more519
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
Платформа СФ-блоков
https://сф-блоки.рф/
Тут похоже Цифровые решения запустили что-то типа своего design&reuse. Интересно будет посмотреть что будет с наполняемостью со временем.
P.S. Справка для тех, кто не работал с отечественными аббревиатурами:
СФ-блок = Сложно-Функциональный Блок = IP Core
#ip_core
@positiveslack
Разработка VIP: учимся на чужих ошибках
ChipEXPO-2021
SK hynix memory solutions Eastern Europe
Спасибо @zvord за материал!
#vip #verification #uvm #systemverilog
@positiveslack
UVM и Modelsim
Оказывается, UVM можно поднять в Modelsim, и никакой Questa не надо:
ModelSim 10.1d supports all SystemVerilog/Verilog features except:
* SystemVerilog assertions
* SystemVerilog coverage
* randomize method
* program blocks
Out of the above, only the randomize method is used by the UVM library.
Только надо всего-навсего отключить рандомизацию в UVM классах.
С одной стороны, зачем UVM такой нужен, если без констрейнов, рандомизации и покрытия никакого Constraint Random Verification не поднять.
Но с другой стороны любое достаточно развитое верификационное окружение становится похоже на UVM, так что почему бы и не использовать какие-то компоненты. Тем более что туда входит куча всяких полезных штук, которые могут наносить пользу даже без каноничного UVM тестбенча. Например, система логирования, базы данных и различные пулы для обмена данными между компонентами, утилиты для работ со строками, включая регулярки, и куча всего другого.
Так что почему бы и нет?
#modelsim #uvm
@positiveslackTAR
Вот вроде работаю в линуксах долгие годы, но никак не мог запомнить как там
tar.gz распаковать, не подглядывая никуда. Полагаю, что тут я не одинок - xkcd даже комикс на эту тему делал.
Пока не увидел, я считаю, гениальную мнемонику:
tar -xzvf foo.tar.gzxtract ze vucking files Возможно есть ещё какие-нибудь о которых стоит знать? #linux #tar @positiveslack
Open Circuits
The Inner Beauty of Electronic Components by Windell Oskay and Eric Schlaepfer
Какова красота же 😍. Это первая глава взятая здесь.
Книгу можно заказать на nostarch.com. Выйдет в бумаге уже в сентябре.
#book #components
@positiveslack
Идущий к RTL
Я в своем познании настолько преисполнился, что я как будто бы уже сто триллионов миллиардов лет пишу на триллионах и триллионах таких же HDL, как этот Verilog, мне этот RTL абсолютно понятен, и я здесь ищу только одного - покоя, умиротворения и вот этой гармонии, от слияния с бесконечно вечными fsm , от созерцания великого фрактального подобия иерархии и от вот этого замечательного всеединства модулей, бесконечно вечного, куда ни посмотри, хоть вглубь - бесконечно малый FF, хоть ввысь - бесконечно большой top, понимаешь? А ты мне опять со своим вот этим SpinalHDL, Chisel, продуктивность, абстракции, иди суетись дальше, это твоё распределение, это твой путь и твой горизонт познания и ощущения твоей природы, он несоизмеримо мелок по сравнению с моим, понимаешь?
#memes
@positiveslack
SpinalHDL Latency Matching
Прикольно, в SpinalHDL оказывается есть Latency Matching (пост Tom Verbeure, ссылку на блог постил когда-то). Т.е. можно автоматически выравнивать задержки в разных блоках, и строить довольно глубокие и супергибкие конвейеры, без тонны ручного пересчёта.
Например, этот же парень делал HW ray tracer на Spartan3E, используя SpinalHDL. Куча float-point вычислений и общий конвейер глубиной в +100 стадий.
P.s. А всё началось с недавнего поста в r/FPGA о том чем хорош Chisel, где увидел что Том отметился про SpinalHDL:
Very little has changed since I first started writing RTL back in 1995. VHDL and (System)Verilog are still crappy and very limited languages with hardly any capabilities to write generic code. Chisel and SpinalHDL solve that problem. But it's hard to see that if you haven't spent enough effort to realize it. It took me quite a while too. ... At work, I have access to pretty much all state-of-the-art tools you can imagine, and a (System)Verilog-based workflow, backed by a huge support department, that's designed to crank out first-time-right chips at high speed. And yet, when I use SpinalHDL for hobby projects at home, my productivity jumps to another level.P.p.s. в посте есть и другие интересные комменты. #spinal_hdl #chisel @positiveslack
@punzik:
Попробовал "в лоб" скормить pls небольшой модуль с тестбенчем, но потерпел фиаско. Pls не захотел понимать функции и real. Как мог, почикал лишнее, и вот что получилось:
pls - 0.320s
vvp - 2.818s
Заменил где можно функции на таски и поправил код для совместимости с PLS. Вот результаты:
vvp native: 608.744s
vvp + DPI: 33.337s
pls: 4.096s
modelsim: 7.630s
В тестбенче вычисляется референсное значение медианы. Native - код сортировки пузырьком (лень было что-то более быстрое писать) на верилоге; DPI - quick sort на C из стандартной библиотеки.
Т.е. там конечно не DPI, а VPI. Но это не важно
Modelsim запускался с опциями -O4 -vopt
В общем, тему можно закрывать. Разработчики не врут - два порядка ускорения реально.
Но конечно не всё так гладко со стабильностью и поддержкой разных конструкций.Посыпаю голову пеплом. В коде была комбинационная петля 🙈.
После её фикса iverilog-v11 симулирует тестбенч за 2 часа. Он не умеет делать чувствительность на части упакованного массива, и если он достаточно длинный, то идут тормоза. Если заменить массивы на неупакованные, то время уже исчисляется секундами. @punzik не даст соврать)
А на неупакованных векторах iverilog-pls дает иксы при использованнии их в интерконнекте.
В общем с наскока не удалось сделать нормальное сравнение. Нужно что-то более приближенное к жизни всё-таки.
Icarus-pls vs Icarus-v11
Потестил накануне этот Икарус на стероидах. В двух словах - быстро, но сыро.
Про сыро. Вроде базируется на оригинальном икарусе, но не все конструкции корректно поддерживаются/работают. И узнаешь об этом в лучшем случае из ошибок компиляции, в худшем по segfault и иксам.
Так например,
$urandom_range не компилится, дамп VCD вызывает segfault, а использование неупакованных массивов для соединений внутри generate приводит к непонятным иксам на шинах. При этом всё это работает в оригинале. Т.е. скорее всего оригинальный тестбенч придется фиксить под этот PLS.
И теперь про быстро. У меня наверное довольно синтетический пример, который вероятно очень удачно оптимизируется в PLS и очень неудачно симулируется в оригинале - просто сгенерил длинную цепочку широких XOR с триггерами и некоторой логикой. Результаты:
◽️iverilog-v11: 10+ часов на 75 тиков из 1000 (WTF!?)
◽️iverilog-pls: ~3 сек
◽️modelsim: ~2 cек
Детали собрал в Gist на Github.
#icarus #benchmark
@positiveslackVerilator и UVM
Только в соседнем чате пообсуждали, что какой же это опенсорс, раз тесты гоняются только в проприетарщине (например, pulpissimo). И мне попадаются на глаза ссылки, что счастье то как-будто не за горами.
Dynamic scheduling in Verilator - milestone towards open source UVM
Если кратко, ребята из Antmicro предлагают перекроить планировщик в Verilator, чтобы стали возможными wait, #, @, fork, event. А значит и нормальные тестбенчи на SV!
У них есть уже и работающий пример на Github, куда кстати до кучи докинули ещё базовый constrained randomization.
Эта работа является частью более масштабного проекта по добавлению SV в опенсорс тулы силами CHIPS Alliance (Google, Western Digital и др.).
А ещё есть видео со слайдами.
P.s. а пошло всё с этой страницы.
#verilator #uvm #verification
@positiveslack
Библиотеки RTL примитивов на SystemVerilog
Теперь подборка библиотек с синтезируемым кодом.
◽️libsv
FIFO, кодеры/декодеры, синхронизаторы пр. Суммарно полтора десятка небольших примитивов. Но зато как красиво инфраструктура построена - тесты написаны на Python (cocotb) и запускаются в Verilator, в качестве лаунчера pytest, автоматический линт/форматирование с Verible, генерация документации в Sphinx, и Docker образ для CI.
Github, Docs
◽️basejump_stl
Контроллер DRAM, FPU, кэш, фифошки, буферы и куча всего. Проект неплохо задокументирован, живой и развивается.
Github, Whitepaper, Site
◽️svreal
Синтезируемые примитивы для чисел с фиксированной и плавающей запятой. Кстати тоже приятная инфраструктура на pytest с CI.
Github
#system_verilog #rtl #library
@positiveslack
Bespoke Silicon Group
Кстати, библиотека basejump_stl разрабатывается в рамках BSG (Bespoke Silicon Group). Это группа исследователей из University of Washington.
У них много прикольного на Github и на их сайте. Кроме того, можно найти их SV стайлгайд (на мой вкус местами странный) и слайды с лекций по SV. Последнее прикреплено.
#system_verilog #codestyle
@positiveslack
Какой-то товарищ запилил компиляцию в нативный код для Икаруса. Говорит, что получил ускорение 20-100 раз. И даже в некоторых случаях в несколько раз быстрее коммерческих симуляторов. Я ещё не пробовал, но попробую.
https://github.com/steveicarus/iverilog/discussions/561
Библиотеки утилит для SystemVerilog
Подборка несинтезируемых библиотек для SV, цель которых значительно уменьшить количество boilerplate кода и расширить возможности языка. Работа со строками, коллекциями, файлами и прочие удобности, которые обычно бывают в стандартной библиотеке высокоуровневых языков.
◽️svlib (Verilab)
Утилиты для работы со строками, енумами, регулярками, файлами/директориями и многое другое. Библиотека встроена в EdaPlayground.
Bitbucket, Docs, Whitepaper
◽️cluelib (ClueLogic)
Коллекции, деревья, форматтеры и немного разного рода утилит. Последний коммит был в 2016, однако даже какая-то версия была встроена в EdaPlayground.
Github, Docs
◽️svx (NVIDIA)
Контейнеры, мапы, итераторы, связные списки и пр. Развитие тоже остановилось в 2016.
Github, Whitepaper
◽️Бонус: System-Verilog-Packet-Library
Библиотека классов, чтобы собирать/разбирать разные сетвые хедеры: eth, arp, igmp, udp, infiniband и т.д. (30 штук). Последние коммиты были в 2019 году.
Github
#system_verilog #library #verification
@positiveslack
Дженерики в SystemVerilog
Грубо говоря, если функция - это обобщение над действиями с определенными данными, то дженерики - это обобщение над типами этих данных. Это способ, который позволяет применять один и тот же метод к разным типам данных в языках со статической типизацией.
И такой механизм есть в SV, правда в немного костыльном виде.
Например, у нас есть функция для сложения чисел:
function int add(int a, int b);
return a + b;
endfunction
Нужна такая же, но для real. Можно конечно сделать две функции add_int и add_real, но удобнее параметризировать тип. Это можно сделать через виртуальный класс и статический метод
virtual class math #(type T = int);
static function T add(T a, T b);
return a + b;
endfunction
endclass
Метод статический, чтобы можно было вызывать его не создавая объект класса. А класс виртуальный, т.к. мы в целом не хотим, чтобы можно было создать объекты этого класса. В итоге получаем такое:
int foo = math#(int)::add(42, 13);
real bar = math#(real)::add(3.14, 2.71);
Это будет работать с любыми параметризируемыми "контейнерами": class, module, interface. Причем с последними двумя это должно даже синтезироваться (но я не проверял).
#system_verilog #generics
@positiveslackVLSI Interview Questions- By vlsi4freshers
Довольно широкий сборник вопросов для собеса по темам ASIC/FPGA
https://whimsical.com/vlsi-interview-questions-by-vlsi4freshers-QXjLZRWMZHBX3PnKvH7Wki
#interview
@positiveslack
EDA log colorizer
https://github.com/esynr3z/eda-log-colorizer
Наконец-то нашлось время причесать и расшарить раскрашиватель унылых монохромных логов. Никакого rocket science - просто bash и sed =)
Пока поддерживаются только UVM и VCS.
Большое спасибо @iDoka за референс, @Xtyll за то что напомнил о нём, ну и сайту regex101.com за то, что сохраняет нервные клетки при написании и отладке регулярок.
#tool #log
Rapid Open Hardware Development (ROHD) Framework
https://github.com/intel/rohd
Yet another попытка ухода от низкого уровня HDL к чуть более высокоуровневым описаниям, причем довольно свежая (репозиторию и 2 недель нет). Что на этот раз: Intel, язык Dart, фреймворк для дизайна и верификации, амбиции построить opensource community вокруг.
ROHD is not a new language, it is not a hardware description language (HDL), and it is not a version of High-Level Synthesis (HLS). ROHD can be classified as a generator framework.
You can think of this project as an attempt to replace SystemVerilog and related build systems as the front-end methodology of choice in the industry.
One of ROHD's goals is to help grow an open-source community around reusable hardware designs and verification components.Ну и фич целый вагон: ▫️Full power of the modern Dart language for hardware design and verification ▫️Makes validation collateral simpler to develop and debug. A future package (like UVM for ROHD) to help build testbenches is planned for release soon. ▫️Develop layers of abstraction within a hardware design, making it more flexible and powerful ▫️Easy IP integration and interfaces; using an IP is as easy as an import. Reduces tedious, redundant, and error prone aspects of integration ▫️Simple and fast build, free of complex build systems and EDA vendor tools ▫️Can use the excellent pub.dev package manager and all the packages it has to offer ▫️Built-in event-based fast simulator, with waveform dumper to .vcd file format ▫️Conversion of modules to equivalent, human-readable, structurally similar SystemVerilog for integration or downstream tool consumption ▫️Run-time dynamic module port definitions (numbers, names, widths, etc.) and internal module logic, including recursive module contents ▫️Simple, free, open source tool stack without any headaches from library dependencies, file ordering, elaboration/analysis options, +defines, etc. ▫️Excellent, simple, fast unit-testing framework ▫️Less verbose than alternatives (fewer lines of code) ▫️Enables higher quality development ▫️Replaces hacky perl/python scripting for automation with powerful native control of design generation ▫️Fewer bugs and lines of code means shorter development schedule ▫️Support for cosimulation with verilog modules and instantiation of verilog modules in generated SystemVerilog code ▫️Use modern IDEs like Visual Studio Code, with excellent static analysis, fast autocomplete, built-in debugger, linting, git integration, extensions, and much more ▫️Simulate with various abstraction levels of models from architectural, to functional, to cycle-accurate, to RTL levels in the same language and environment. Ну и естественно они не могли не пройтись по альтернативам в лице: SystemVerilog, Chisel, MyHDL, HLS, TL-Verilog, PyMTL, cocotb. #digital_design #verification #framework #dart #rtl
