我有两个模块和一个类,我想将该类从一个模块移动到另一个模块。像这样:
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)中提到接口声明,事件,数组结构或联合,所以我的问题是:
答案 0 :(得分:1)
任何类型的变量都可以是input
或output
端口。您可能必须为编译器编写
input var foo foo_inst,
但是当端口真的是一个句柄时,最好使用ref
。
module mod_A(ref foo foo_inst, ref event trig);
请注意,您有foo_o
或foo_inst
的拼写错误以及触发器>trig
和事件控件@(trig)
之间的竞争条件。