Corsair - генератор карты регистров
Хотел бы поделиться своим проектом, доросшим до первой мажорной версии. Конечно он ещё молодой, и толком необкатанный, но верю, что кому-то уже сможет помочь.
Благодарю всех участвовавших и просто сочувствовавших, без обратной связи и помощи было бы тяжело.
Что? Зачем? Почему?
esynr3z.github.io/2021-09-03-corsair
Репозиторий:
github.com/esynr3z/corsair
Документация:
corsair.readthedocs.io
#python #csr #fpga
Хотел бы поделиться своим проектом, доросшим до первой мажорной версии. Конечно он ещё молодой, и толком необкатанный, но верю, что кому-то уже сможет помочь.
Благодарю всех участвовавших и просто сочувствовавших, без обратной связи и помощи было бы тяжело.
Что? Зачем? Почему?
esynr3z.github.io/2021-09-03-corsair
Репозиторий:
github.com/esynr3z/corsair
Документация:
corsair.readthedocs.io
#python #csr #fpga
GitHub
GitHub - esynr3z/corsair: Control and Status Register map generator for HDL projects
Control and Status Register map generator for HDL projects - esynr3z/corsair
Архитектуры процессорных систем
Курс лекций от МИЭТ. Про RISC-V и внутренности современных процессоров. Классная подача материала, рекомендую.
https://youtube.com/playlist?list=PL0def37HEo5KMH7gONw_JnczvQJBv1EZL
И вообще, вот вам годный канал с постами на эту тему:
Записки CPU designer'a
@cpu_design
#digital_design #cpu #riscv #computer_architecture
Курс лекций от МИЭТ. Про RISC-V и внутренности современных процессоров. Классная подача материала, рекомендую.
https://youtube.com/playlist?list=PL0def37HEo5KMH7gONw_JnczvQJBv1EZL
И вообще, вот вам годный канал с постами на эту тему:
Записки CPU designer'a
@cpu_design
#digital_design #cpu #riscv #computer_architecture
Computer Architecture Animations
[ссылка]
Интерактивные анимации демонстрируют работу процессорного кэша и протоколов когерентности в мультипроцессорных системах:
▫️Cache
▫️Write-through cache coherency
▫️Write-once cache coherency
▫️Firefly cache coherency
▫️MESI cache coherency
▫️All cache coherency protocols
#computer_architecture #cpu #cache #coherency
[ссылка]
Интерактивные анимации демонстрируют работу процессорного кэша и протоколов когерентности в мультипроцессорных системах:
▫️Cache
▫️Write-through cache coherency
▫️Write-once cache coherency
▫️Firefly cache coherency
▫️MESI cache coherency
▫️All cache coherency protocols
#computer_architecture #cpu #cache #coherency
Немного почти оффтопика.
Набрёл на классный сайт со списками почти всего на свете для помощи в выборе имени какого-нибудь нового проекта. А то часто это бывает проблемой, особенно если вдруг нужна серия имён одной тематики.
https://namingschemes.com
Набрёл на классный сайт со списками почти всего на свете для помощи в выборе имени какого-нибудь нового проекта. А то часто это бывает проблемой, особенно если вдруг нужна серия имён одной тематики.
A good naming scheme is scalable, unique, and easy to remember. The purpose of these naming schemes is to name networked servers, wireless access points or client computers, but it can also be used to name projects, products, variables, streets, pets, kids, or any other project where unique names and rememberable names are required.
https://namingschemes.com
Rapid Open Hardware Development (ROHD) Framework
https://github.com/intel/rohd
Yet another попытка ухода от низкого уровня HDL к чуть более высокоуровневым описаниям, причем довольно свежая (репозиторию и 2 недель нет). Что на этот раз: Intel, язык Dart, фреймворк для дизайна и верификации, амбиции построить opensource community вокруг.
▫️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 noscripting 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
https://github.com/intel/rohd
Yet another попытка ухода от низкого уровня HDL к чуть более высокоуровневым описаниям, причем довольно свежая (репозиторию и 2 недель нет). Что на этот раз: Intel, язык Dart, фреймворк для дизайна и верификации, амбиции построить opensource community вокруг.
ROHD is not a new language, it is not a hardware denoscription 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 noscripting 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
GitHub
GitHub - intel/rohd: The Rapid Open Hardware Development (ROHD) framework is a framework for describing and verifying hardware…
The Rapid Open Hardware Development (ROHD) framework is a framework for describing and verifying hardware in the Dart programming language. - intel/rohd
EDA log colorizer
https://github.com/esynr3z/eda-log-colorizer
Наконец-то нашлось время причесать и расшарить раскрашиватель унылых монохромных логов. Никакого rocket science - просто bash и sed =)
Пока поддерживаются только UVM и VCS.
Большое спасибо @iDoka за референс, @Xtyll за то что напомнил о нём, ну и сайту regex101.com за то, что сохраняет нервные клетки при написании и отладке регулярок.
#tool #log
https://github.com/esynr3z/eda-log-colorizer
Наконец-то нашлось время причесать и расшарить раскрашиватель унылых монохромных логов. Никакого rocket science - просто bash и sed =)
Пока поддерживаются только UVM и VCS.
Большое спасибо @iDoka за референс, @Xtyll за то что напомнил о нём, ну и сайту regex101.com за то, что сохраняет нервные клетки при написании и отладке регулярок.
#tool #log
Настало время нарушить молчание и начать разгребать сохранёнки и заметки.
P.S. я тут теперь UVM классами командную на фуллтайм, так что общая тематика сместится в верификацию, но это не точно)
P.S. я тут теперь UVM классами командную на фуллтайм, так что общая тематика сместится в верификацию, но это не точно)
👍4
Чем занимаешься?
Вопрос который всегда заставляет меня жёстко тупить. Начинаешь прикидывать насколько собеседник в теме, какие аналогии можешь заюзать и как это всё объяснить (и стоит ли).
Обычно всё происходит примерно так:
- Чем занимаешься?
- Ммм... Хмм... Ну я программист можно сказать
- О, а на чём пишешь?
- Довольно узкоспецифический язык - SystemVerilog
- М, понятно
* диалог закончен *
А рассказать про микропроцессоры, IP-блоки, верификацию, UVM человеку с нулевым техническим бэкграундом (микропроцессор - это монитор или системный блок) вообще за гранью.
В сабреддитах по микроэлектронике/эмбэддэд периодически вижу подобные вопросы. Ответы порой довольно забавные:
“I use obscure and arcane texts to perform rituals that control machine spirits.”
"I teach poisoned sand how to think so it can communicate telepathically with other poisoned sand."
Как вы с этим справляетесь? Есть какие-нибудь хаки?
@positiveslack
Вопрос который всегда заставляет меня жёстко тупить. Начинаешь прикидывать насколько собеседник в теме, какие аналогии можешь заюзать и как это всё объяснить (и стоит ли).
Обычно всё происходит примерно так:
- Чем занимаешься?
- Ммм... Хмм... Ну я программист можно сказать
- О, а на чём пишешь?
- Довольно узкоспецифический язык - SystemVerilog
- М, понятно
* диалог закончен *
А рассказать про микропроцессоры, IP-блоки, верификацию, UVM человеку с нулевым техническим бэкграундом (микропроцессор - это монитор или системный блок) вообще за гранью.
В сабреддитах по микроэлектронике/эмбэддэд периодически вижу подобные вопросы. Ответы порой довольно забавные:
“I use obscure and arcane texts to perform rituals that control machine spirits.”
"I teach poisoned sand how to think so it can communicate telepathically with other poisoned sand."
Как вы с этим справляетесь? Есть какие-нибудь хаки?
@positiveslack
❤10👍3
Forwarded from Виталий Лотник
Вся суть работы инженера сводится к получению дозы эндорфинов от осознания того, что "оно работает". Когда ты заказываешь свой асик, он к тебе приезжает и он работает, то это максимум счастья.
🔥17
Почему always_comb это улучшенный always@*
✅ always_comb исполняется на старте моделирования, always@* - нет
- отсутствия операторов, управляющих временем (@, #, wait)
- отсутствия элементов хранения (ff, latch)
- отсутствия множественных драйверов
#system_verilog
@positiveslack
✅ always_comb исполняется на старте моделирования, always@* - нет
always@* a = 'd42; // a будет в 'x всегда
always@* begin
b = '0; // будет в 'x, пока d не изменится
c = d;
end
✅ always_comb имеет расширенный список чувствительности, в том числе исполняется при изменении сигналов внутри функции, а не только её аргументов как always@*bit a, b, c;
function bit foo(bit bar);
return bar & b;
endfunction
always@* c = foo(a); //не исполнится при изменении глобальной b, только при изменении a
✅ always_comb даёт compile-time гарантии:- отсутствия операторов, управляющих временем (@, #, wait)
- отсутствия элементов хранения (ff, latch)
- отсутствия множественных драйверов
#system_verilog
@positiveslack
👍10🔥3
Кстати, тут по чатам гуляет отрывок из вроде как внутреннего стайлгайда Intel, как раз о том, чтобы использовать только always_comb в коде.
@positiveslack
The only always statement you ever use should be always_comb
Never use always, always_ff, always_latch, assign etc.
Always_comb automatically detects the sensitivity list and reports warning/errors if you accidently infer a sequential element
Always use blocking assignments “=“
Never use non-blocking assignments “<=“
<= is used in sequential logic, all of our sequentials use macros, therefore you should never have to use it
The rest of this presentation is just “details”:)
Т.е. для всех комбинационных схем нужно использовать always_comb, а все элементы хранения записываются только через макросы, с четким и предсказуемым (оптимально написанным?) содержимым. Полагаю что-то типа`FF(clk, rst, foo, foo_next)
#codestyle #system_verilog @positiveslack
🤔5👍4🎉1🤓1
VLSI Interview Questions- By vlsi4freshers
Довольно широкий сборник вопросов для собеса по темам ASIC/FPGA
https://whimsical.com/vlsi-interview-questions-by-vlsi4freshers-QXjLZRWMZHBX3PnKvH7Wki
#interview
@positiveslack
Довольно широкий сборник вопросов для собеса по темам ASIC/FPGA
https://whimsical.com/vlsi-interview-questions-by-vlsi4freshers-QXjLZRWMZHBX3PnKvH7Wki
#interview
@positiveslack
Whimsical
VLSI Interview Questions- By vlsi4freshers
Whimsical combines whiteboards and docs in an all-in-one collaboration hub.
👍9
Дженерики в SystemVerilog
Грубо говоря, если функция - это обобщение над действиями с определенными данными, то дженерики - это обобщение над типами этих данных. Это способ, который позволяет применять один и тот же метод к разным типам данных в языках со статической типизацией.
И такой механизм есть в SV, правда в немного костыльном виде.
Например, у нас есть функция для сложения чисел:
Нужна такая же, но для real. Можно конечно сделать две функции
#system_verilog #generics
@positiveslack
Грубо говоря, если функция - это обобщение над действиями с определенными данными, то дженерики - это обобщение над типами этих данных. Это способ, который позволяет применять один и тот же метод к разным типам данных в языках со статической типизацией.
И такой механизм есть в 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
@positiveslack
👍13😁1
Библиотеки утилит для 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
Подборка несинтезируемых библиотек для 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
🔥7👍3🤩1
Forwarded from punzik
Какой-то товарищ запилил компиляцию в нативный код для Икаруса. Говорит, что получил ускорение 20-100 раз. И даже в некоторых случаях в несколько раз быстрее коммерческих симуляторов. Я ещё не пробовал, но попробую.
https://github.com/steveicarus/iverilog/discussions/561
https://github.com/steveicarus/iverilog/discussions/561
GitHub
optimization to speed up the execution · steveicarus/iverilog · Discussion #561
We just finished an optimized version of the iverilog: https://github.com/pytec8800/pint_iverilog Instead of using the original vvp execution flow which is based on interpreter virtual machine, we ...
🔥2👍1🤯1
BSG SystemVerilog Coding Standards.pdf
398.7 KB
Bespoke Silicon Group
Кстати, библиотека basejump_stl разрабатывается в рамках BSG (Bespoke Silicon Group). Это группа исследователей из University of Washington.
У них много прикольного на Github и на их сайте. Кроме того, можно найти их SV стайлгайд (на мой вкус местами странный) и слайды с лекций по SV. Последнее прикреплено.
#system_verilog #codestyle
@positiveslack
Кстати, библиотека basejump_stl разрабатывается в рамках BSG (Bespoke Silicon Group). Это группа исследователей из University of Washington.
У них много прикольного на Github и на их сайте. Кроме того, можно найти их SV стайлгайд (на мой вкус местами странный) и слайды с лекций по SV. Последнее прикреплено.
#system_verilog #codestyle
@positiveslack
🔥3❤🔥1
Библиотеки 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
Теперь подборка библиотек с синтезируемым кодом.
◽️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
👍3🔥2