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

问题描述:

模块的层次输入其中uart_receiver.v = ModuleA,RSD.v = ModuleB,uart_transmitter.V = ModuleC
的Verilog,模块实例化与来自不同模块

假设我要实例化ModuleA与从输入不同的模块,B和输入的名称是:WR_ENmoduleBRD_ENDTmoduleC

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

我试着做以下,但没有成功,在ISE赛灵思使用Verilog

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

如果我打电话具有相同名称的模块实例,程序不会再做第二次i尽管我想要一个。 我搜查,但我还没有发现类似的例子

我试图清理你的问题,但我仍然不知道你打算在拥有的一个(一个两个实例中另一C)或者如果您试图共享A的一个实例BC

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

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 

可以放置内部的Ç并路由来自其它通过父级输入。

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 

如果放置在Ç一个的实例,则具有两个独立的情况下,即使输入是从一个共同的资源。

+0

Xmm谢谢,第一听起来不错。我已经考虑过第二或第三个想法。所以,用SAME名称调用模块的实例2次会创建2个不同的硬件? – trakis95

+0

会有两个_instances_,并且它们需要具有不同的实例名称。 Verilog不会调用模块 – Greg