Продолжаю тыкать палкой интерфейсы совместно с опенсорсными тулами. На этот раз речь пойдет про массивы интерфейсов, в частности их применимость в портах модулей.
Следующий код компилируется в Verilator, Tabby CAD (Yosys+Verific) и в Vivado. Yosys с открытым плагином от Antmicro ругается на массив интерфейсов в описании портов модуля (Encountered unhandled type in process_port: interface_array).
Порадовала утилита sv2v, которая преобразовала этот код в код на чистом верилоге, который успешно синтезировался Yosys без плагинов.
Следующий код компилируется в Verilator, Tabby CAD (Yosys+Verific) и в Vivado. Yosys с открытым плагином от Antmicro ругается на массив интерфейсов в описании портов модуля (Encountered unhandled type in process_port: interface_array).
interface iface;Одиночный интерфейс, не в виде массива, открытым плагином поддерживается и успешно синтезируется.
logic a;
modport in(input a);
endinterface
module test_mod (iface.in x[2], output logic y);
assign y = x[0].a | x[1].a;
endmodule
module top (input logic [1:0] x, output logic y);
iface i[2]();
test_mod DUT (i, y);
assign i[0].a = x[0];
assign i[1].a = x[1];
endmodule
Порадовала утилита sv2v, которая преобразовала этот код в код на чистом верилоге, который успешно синтезировался Yosys без плагинов.
module top (x, y);Можно заметить, что утилита сохранила иерархию интерфейсов. Т.е., например, констрейны не сломаются, т.к. пути к сигналам сохранятся. Можно безболезненно симулировать код в Icarus, не опасаясь поломки иерархии.
input wire [1:0] x;
output wire y;
genvar _arr_DA352;
generate
for (_arr_DA352 = 0; _arr_DA352 <= 1; _arr_DA352 = _arr_DA352 + 1) begin : i
wire a;
end
endgenerate
localparam _bbase_D0DCC_x = 0;
generate
if (1) begin : DUT
localparam _mbase_x = 0;
wire y;
assign y = top.i[0].a | top.i[1].a;
end
endgenerate
assign y = DUT.y;
assign i[0].a = x[0];
assign i[1].a = x[1];
endmodule
Yosyshq
Tabby CAD Datasheet
See Tabby CAD Datasheet (this page) for details on Tabby CAD Suite; see OSS CAD Suite GitHub for details on OSS CAD Suite.
IEEE_Std_1800-2005.pdf
6.6 MB
В SV можно описать модуль с неопределенным (generic) интерфейсом (IEEE 1800-2005, стр.353). Но там же написано, что такой порт можно описывать только в стиле SV, т.е. в скобочках после имени модуля, а в стиле V95 нельзя. Первый раз встречаю отсутствие обратной совместимости в SV.
Наверное все использовали или видели такую конструкцию для генерации случайного числа в нужном диапазоне (в данном случае от 0 до 123):
Функция $urandom выдаёт 32-битное число, т.е. максимальное значение 2^32 и неравномерность в примере выше будет настолько маленькая, что ни в каких реальных применениях вы её не заметите. Однако, если интервал сделать, например, 0.1 от максимального случайного числа, то неравномерность будет заметна уже на тысячах выборок.
Как можно догадаться, чтобы распределение не ломалось, нужно выбирать интервал равный степени двойки, чтобы весь интервал случайных чисел делился на него нацело.
a = $urandom % 123
Но не все обращают внимание на то, что такое выражение выдаст случайное число не с равномерным распределением (не всегда). Конкретно в этом случае вероятность получения чисел от 0 до 36 будет выше, чем всех остальных. При этом, чем меньше отношение интервала к максимальному случайному числу, тем больше будет неравномерность.Функция $urandom выдаёт 32-битное число, т.е. максимальное значение 2^32 и неравномерность в примере выше будет настолько маленькая, что ни в каких реальных применениях вы её не заметите. Однако, если интервал сделать, например, 0.1 от максимального случайного числа, то неравномерность будет заметна уже на тысячах выборок.
Как можно догадаться, чтобы распределение не ломалось, нужно выбирать интервал равный степени двойки, чтобы весь интервал случайных чисел делился на него нацело.
Media is too big
VIEW IN TELEGRAM
Геннадий Зеленко (и Сергей Попов, инженеры и преподаватели, которые разработали Микро-80 и Радио-86РК) говорит, что все эти ваши Мили и Муры устарели и нормальному инженеру вообще не нужны. Так-то.
Please open Telegram to view this post
VIEW IN TELEGRAM
Мне тут пришло письмо от Элитана, что после шестилетнего перерыва они возобновляют продажу компонентов физлицам.
На картинке предложение по GW1N-UV2QN48C6.
На картинке предложение по GW1N-UV2QN48C6.
Всегда говорил "констрейны" и даже не замечал, что некоторые люди пишут "констрейнты", пока на конференции не услышал это слово от докладчика. Немного удивился и задумался, может я тупой и неправильно пишу? Ведь правильно действительно "констрейнты".
Но оказалось, не один я такой. Более того, нас большинство :)
Но оказалось, не один я такой. Более того, нас большинство :)
Интересно, возможно ли сделать полностью оптическую нейросеть на голографических структурах с применением нелинейной интерференции? Прямо как позитронный мозг в известных романах 🧠
Осилил наконец поддержку плагина SV для Yosys в SymbiYosys. Для успешной компиляции в скрипте sby нужно написать вот такие строки:
Теперь sby поддерживает очень большую часть стандарта SV. А ещё говорят, что в плагин скоро завезут SVA. Такие дела.
plugin -i systemverilogПричём, если при синтезе можно обойтись только
read_systemverilog -formal -defer source.sv
read_systemverilog -link
read_systemverilog
без —defer
(если один исходник), то тут никак.Теперь sby поддерживает очень большую часть стандарта SV. А ещё говорят, что в плагин скоро завезут SVA. Такие дела.
GitHub
GitHub - chipsalliance/synlig: SystemVerilog support for Yosys
SystemVerilog support for Yosys. Contribute to chipsalliance/synlig development by creating an account on GitHub.
Феранек пригласил на стрим товарища, который показал пример DC симуляции печатной платы (кусочка) с помощью опенсорсных тулов.
YouTube
How To Simulate PCB in Open Source Software
A step by step tutorial to setup PDN simulation using open source software and much more. Thank you very much Lukas.
Links:
- Lukas Henkel LinkedIn: https://www.linkedin.com/in/lukas-henkel-ovt/
- Lukas' youtube: https://www.youtube.com/@LukasHenkel
- FEDEVEL…
Links:
- Lukas Henkel LinkedIn: https://www.linkedin.com/in/lukas-henkel-ovt/
- Lukas' youtube: https://www.youtube.com/@LukasHenkel
- FEDEVEL…
В комментах на хабре упомянули опенсорсную библиотеку GRLIB с большим набором IP кор. Написана VHDL, но т.к. Yosys теперь умеет VHDL через GHDL, то можно пользоваться :)
Gaisler
GRLIB IP Library
Потыкал палкой плату Maixduino с нейропроцессором Kendryte K210. Просто охренительная штука за 3к рублей. Внутри два ядра RiscV, аудиопроцессор (пока не смотрел, что он умеет), аппаратный FFT и ускоритель сверточных сетей на 1TOPs.
Программировать можно на голом Си (есть SDK) или на MicroPython, который выдаёт консоль прямо в последовательный порт.
В сети много примеров, типа распознавания объектов, детектирования лиц и пр. Один из них я потестил. Результат на картинке :)
В общем, я под впечатлением. Пятнадцать лет назад для детектирования лиц с помощью каскадов Хаара нужен был неслабый такой комп, чтобы обрабатывать видеопоток в реальном времени. Сейчас это делает хреновинка с пол пачки сигарет вообще не напрягаясь.
Программировать можно на голом Си (есть SDK) или на MicroPython, который выдаёт консоль прямо в последовательный порт.
В сети много примеров, типа распознавания объектов, детектирования лиц и пр. Один из них я потестил. Результат на картинке :)
В общем, я под впечатлением. Пятнадцать лет назад для детектирования лиц с помощью каскадов Хаара нужен был неслабый такой комп, чтобы обрабатывать видеопоток в реальном времени. Сейчас это делает хреновинка с пол пачки сигарет вообще не напрягаясь.
Пока одни закрываются (ДКО Электронщик), другие открываются. Пришло письмо от Резонита:
Рады сообщить, что мы запустили онлайн сервис по закупке комплектации из наших складских запасов — магазин электронных компонентов shop.rezonit.ru. Номенклатура, представленная в магазине, формируется из компонентов, которые остаются от технологических запасов на нашем контрактном производстве и остатков складских программ. Это позволяет нам предложить инженерам-разработчикам и небольшим контрактным производителям электронные компоненты по цене значительно ниже среднерыночной — со скидками до 50%.
Рады сообщить, что мы запустили онлайн сервис по закупке комплектации из наших складских запасов — магазин электронных компонентов shop.rezonit.ru. Номенклатура, представленная в магазине, формируется из компонентов, которые остаются от технологических запасов на нашем контрактном производстве и остатков складских программ. Это позволяет нам предложить инженерам-разработчикам и небольшим контрактным производителям электронные компоненты по цене значительно ниже среднерыночной — со скидками до 50%.
Копался в своих исходниках и нашёл такую конструкцию в тестбенче:
Конструкция генерит последовательность по "временной диаграмме" в виде строки. Интересная идея. Я её где-то подсмотрел, но забыл где. Можно сделать более универсальный модуль, с какой нибудь умной генерацией, с условиями, остановками и пр. Для простых линейных тестбенчей было бы наверное полезно.
seq #("-__-_--____-__") seq0 (clock, s0);
Конструкция генерит последовательность по "временной диаграмме" в виде строки. Интересная идея. Я её где-то подсмотрел, но забыл где. Можно сделать более универсальный модуль, с какой нибудь умной генерацией, с условиями, остановками и пр. Для простых линейных тестбенчей было бы наверное полезно.
Вышел Qucs-S 1.1.0, в который добавили возможность симуляции чисто цифровых схем при помощи Icarus Verilog или FreeHDL.
Кто тут хотел схемки мышевозить?
Кто тут хотел схемки мышевозить?
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
GitHub
GitHub - punzik/simbench: Simple HDL simulators benchmark
Simple HDL simulators benchmark. Contribute to punzik/simbench development by creating an account on GitHub.
Пока писал скрипт на баше, нашел классную штуку для линтинга shell-скриптов. За одно есть её онлайн версия, чтобы по-быстрому копипастом проверить скрипт.
Тул проверяет не только синтаксис, но и семантику. Например, предлагает более правильные конструкции, или предупреждает о deprecated.
Тул проверяет не только синтаксис, но и семантику. Например, предлагает более правильные конструкции, или предупреждает о deprecated.
GitHub
GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts
ShellCheck, a static analysis tool for shell scripts - koalaman/shellcheck