Telegram Group Search
Channel created
Продолжаю тыкать палкой интерфейсы совместно с опенсорсными тулами. На этот раз речь пойдет про массивы интерфейсов, в частности их применимость в портах модулей.

Следующий код компилируется в 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);
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

Можно заметить, что утилита сохранила иерархию интерфейсов. Т.е., например, констрейны не сломаются, т.к. пути к сигналам сохранятся. Можно безболезненно симулировать код в Icarus, не опасаясь поломки иерархии.
IEEE_Std_1800-2005.pdf
6.6 MB
В SV можно описать модуль с неопределенным (generic) интерфейсом (IEEE 1800-2005, стр.353). Но там же написано, что такой порт можно описывать только в стиле SV, т.е. в скобочках после имени модуля, а в стиле V95 нельзя. Первый раз встречаю отсутствие обратной совместимости в SV.
Наверное все использовали или видели такую конструкцию для генерации случайного числа в нужном диапазоне (в данном случае от 0 до 123):

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.
Всегда говорил "констрейны" и даже не замечал, что некоторые люди пишут "констрейнты", пока на конференции не услышал это слово от докладчика. Немного удивился и задумался, может я тупой и неправильно пишу? Ведь правильно действительно "констрейнты".
Но оказалось, не один я такой. Более того, нас большинство :)
Интересно, возможно ли сделать полностью оптическую нейросеть на голографических структурах с применением нелинейной интерференции? Прямо как позитронный мозг в известных романах 🧠
Осилил наконец поддержку плагина SV для Yosys в SymbiYosys. Для успешной компиляции в скрипте sby нужно написать вот такие строки:

plugin -i systemverilog
read_systemverilog -formal -defer source.sv
read_systemverilog -link

Причём, если при синтезе можно обойтись только read_systemverilog без —defer (если один исходник), то тут никак.
Теперь sby поддерживает очень большую часть стандарта SV. А ещё говорят, что в плагин скоро завезут SVA. Такие дела.
Феранек пригласил на стрим товарища, который показал пример DC симуляции печатной платы (кусочка) с помощью опенсорсных тулов.
В комментах на хабре упомянули опенсорсную библиотеку GRLIB с большим набором IP кор. Написана VHDL, но т.к. Yosys теперь умеет VHDL через GHDL, то можно пользоваться :)
Потыкал палкой плату Maixduino с нейропроцессором Kendryte K210. Просто охренительная штука за 3к рублей. Внутри два ядра RiscV, аудиопроцессор (пока не смотрел, что он умеет), аппаратный FFT и ускоритель сверточных сетей на 1TOPs.
Программировать можно на голом Си (есть SDK) или на MicroPython, который выдаёт консоль прямо в последовательный порт.
В сети много примеров, типа распознавания объектов, детектирования лиц и пр. Один из них я потестил. Результат на картинке :)
В общем, я под впечатлением. Пятнадцать лет назад для детектирования лиц с помощью каскадов Хаара нужен был неслабый такой комп, чтобы обрабатывать видеопоток в реальном времени. Сейчас это делает хреновинка с пол пачки сигарет вообще не напрягаясь.
Пока одни закрываются (ДКО Электронщик), другие открываются. Пришло письмо от Резонита:

Рады сообщить, что мы запустили онлайн сервис по закупке комплектации из наших складских запасов — магазин электронных компонентов shop.rezonit.ru. Номенклатура, представленная в магазине, формируется из компонентов, которые остаются от технологических запасов на нашем контрактном производстве и остатков складских программ. Это позволяет нам предложить инженерам-разработчикам и небольшим контрактным производителям электронные компоненты по цене значительно ниже среднерыночной — со скидками до 50%.
Копался в своих исходниках и нашёл такую конструкцию в тестбенче:

seq #("-__-_--____-__") seq0 (clock, s0);


Конструкция генерит последовательность по "временной диаграмме" в виде строки. Интересная идея. Я её где-то подсмотрел, но забыл где. Можно сделать более универсальный модуль, с какой нибудь умной генерацией, с условиями, остановками и пр. Для простых линейных тестбенчей было бы наверное полезно.
Вышел Qucs-S 1.1.0, в который добавили возможность симуляции чисто цифровых схем при помощи Icarus Verilog или FreeHDL.

Кто тут хотел схемки мышевозить?
Запилил небольшой бенчмарк для HDL симуляторов. Пока минималистично, и скрипты для запуска только на Icarus, Verilator и ModelSim/QuestaSim. Надеюсь люди добавят запуск других симуляторов.
Пока писал скрипт на баше, нашел классную штуку для линтинга shell-скриптов. За одно есть её онлайн версия, чтобы по-быстрому копипастом проверить скрипт.
Тул проверяет не только синтаксис, но и семантику. Например, предлагает более правильные конструкции, или предупреждает о deprecated.
2025/02/25 12:30:18
Back to Top
HTML Embed Code: