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

Verilog, Module Instantiation with inputs from different modules

模块的层次结构,其中 uart_receiver.v=ModuleA,RSD.v=ModuleB,uart_transmitter.V=ModuleC

假设我想用来自不同模块 B 的输入实例化 ModuleA,输入的名称是:WR_EN 来自 moduleBRD_ENDT 来自 moduleC

module A(
  input wr_EN,
  input rd_EN,
  input DT,
  output out
);

我尝试在带有 Verilog 的 ISE Xilinx 中执行以下操作但没有成功

B模块

module B(...)
  assign wr_EN = 1;
  ...  
  // Now call module A from B:
  module A A_instance(.wr_EN(wr_EN) );

C 模块

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) );

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

我试图解决你的问题,但我仍然不确定你是否打算有两个 A 实例(一个在 B C) 中的另一个,或者如果您试图在 B 和之间共享 A 的一个实例C.

一个实例代表一个物理硬件。同一实例不能在其他模块实例之间共享。您可以路由网络以连接实例。例如:

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

您可以将 A 放在 BC 内,并将输入从其他通过父级别。

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

如果你在 BC 中放置了一个 A 的实例,那么你有两个独立的实例,即使输入来自共同来源。