У меня есть два модуля и класс, и я хотел бы переместить этот класс из одного модуля в другой. Что-то вроде этого:
class foo;
int x;
int y;
endclass
module mod_A(output foo foo_inst, output event trig);
initial begin
foo my_foo = new;
my_foo.x = 1;
my_foo.y = 2;
foo_inst = my_foo;
->trig;
end
endmodule
module mod_B(input foo foo_inst, input event trig);
always @(trig) begin
$display("%d%d, is a funky number.", foo_inst.x, foo_inst.y);
end
endmodule
module top();
event trig;
foo foo_inst;
mod_A mod_A(.trig, .foo_inst);
mod_B mod_B(.trig, .foo_inst);
endmodule
Конечно, в классе определены некоторые функции, которые используются в каждом модуле. Проблема с этой настройкой заключается в том, что я вижу ошибки для каждого порта mod_B:
Error-[RIPLIP] Register in low conn of input port
Non-net variable 'foo_inst' cannot be an input or inout port.
Non-net variable 'trig' cannot be an input or inout port.
EDAplayground не поддерживает объекты классов в качестве портов модулей и 1800-2012. упоминает только объявления интерфейса, события, структуры массивов или объединения в объявлениях портов (23.2.2), поэтому мои вопросы:
- Законно ли вообще проходить занятия через порты? Если нет, то какой элегантный способ сделать это?
- Что означает «Регистрация в низком соединении входного порта»? Я знаю, что это может быть специфическая ошибка компилятора и ничего показательного, но если бы я знал, что он пытается мне сказать, я мог бы быть на шаг ближе к исправлению этого.