Arnold Enginegger
699 subscribers
38 photos
4 videos
12 files
81 links
Тоже хочу в блогеры
Download Telegram
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
2🔥1
Мне тут пришло письмо от Элитана, что после шестилетнего перерыва они возобновляют продажу компонентов физлицам.
На картинке предложение по GW1N-UV2QN48C6.
Всегда говорил "констрейны" и даже не замечал, что некоторые люди пишут "констрейнты", пока на конференции не услышал это слово от докладчика. Немного удивился и задумался, может я тупой и неправильно пишу? Ведь правильно действительно "констрейнты".
Но оказалось, не один я такой. Более того, нас большинство :)
👍1
Интересно, возможно ли сделать полностью оптическую нейросеть на голографических структурах с применением нелинейной интерференции? Прямо как позитронный мозг в известных романах 🧠
Осилил наконец поддержку плагина SV для Yosys в SymbiYosys. Для успешной компиляции в скрипте sby нужно написать вот такие строки:

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

Причём, если при синтезе можно обойтись только read_systemverilog без —defer (если один исходник), то тут никак.
Теперь sby поддерживает очень большую часть стандарта SV. А ещё говорят, что в плагин скоро завезут SVA. Такие дела.
Феранек пригласил на стрим товарища, который показал пример DC симуляции печатной платы (кусочка) с помощью опенсорсных тулов.
🔥2
В комментах на хабре упомянули опенсорсную библиотеку GRLIB с большим набором IP кор. Написана VHDL, но т.к. Yosys теперь умеет VHDL через GHDL, то можно пользоваться :)