模块的层次结构,其中uart_receiver.v = ModuleA,RSD.v = ModuleB,uart_transmitter.V = ModuleC
假设我想使用来自不同模块B的输入实例化 ModuleA ,输入名称为: moduleB 中的 WR_EN 和< em> RD_EN , DT 来自 moduleC
module A(
input wr_EN,
input rd_EN,
input DT,
output out
);
我尝试在ISE Xilinx上使用Verilog
进行以下操作但没有成功B MODULE
module B(...)
assign wr_EN = 1;
...
// Now call module A from B:
module A A_instance(.wr_EN(wr_EN) );
C MODULE
module C(...)
...
assign rd_EN = 0;
assign DT = 1;
....
// And then call module A from C
module A A_instance(.rd_EN(rd_EN), .DT(DT) );
如果我调用具有相同名称的模块实例,程序不会创建第二个实例,尽管事实上我想要一个。 我搜索了但我还没有找到类似的例子
答案 0 :(得分:0)
我试图清理你的问题,但我仍然不确定你打算有两个 A 的实例(一个在 B 另一个 C )或者您是否尝试在 B 和 C 之间共享 A 的一个实例。
实例代表物理硬件。不能在其他模块实例之间共享同一实例。您可以路由网络以连接实例。例如:
module TOP(...);
...
A A_instance( .wr_EN(wr_EN), .rd_EN(rd_EN), .DT(DT), .out(out) );
B B_instance( .wr_EN(wr_EN), ... );
C C_instance( .rd_EN(rd_EN), .DT(DT), ... );
endmodule
您可以在 B 或 C 中放置 A ,并通过父级别将其他人的输入路由。
module B(
input rd_EN, // output for C connected at top
input DT, // output for C connected at top
...
);
...
assign wr_EN = 1;
A A_instance( .wr_EN(wr_EN), .rd_EN(rd_EN), .DT(DT), .out(out) );
endmodule
或
module C(
input wr_EN, // output for B connected at top
...
);
...
assign rd_EN = 0;
assign DT = 1;
A A_instance( .wr_EN(wr_EN), .rd_EN(rd_EN), .DT(DT), .out(out) );
endmodule
如果您在 B 和 C 中放置 A 的实例,则您有两个独立的实例,即使输入来自共同来源。