Verilog,模块实例化,来自不同模块的输入

时间:2016-11-08 23:26:13

标签: module verilog instantiation xilinx-ise

模块的层次结构,其中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) );

如果我调用具有相同名称的模块实例,程序不会创建第二个实例,尽管事实上我想要一个。  我搜索了但我还没有找到类似的例子

1 个答案:

答案 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 的实例,则您有两个独立的实例,即使输入来自共同来源。