2016-11-08 10 views
0

иерархии модуля, где uart_receiver.v = ModuleA, RSD.v = ModuleB, uart_transmitter.V = ModuleC
Verilog, модуль Инстанцирование с входами различных модулей

Предположим, я хочу Инстанцировать ModuleA с использованием материалов различные модули, B и название входов: WR_EN от moduleB и RD_EN, DT от moduleC

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

Я попытался сделать ниже без успеха, в ISE Xilinx с 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 Несмотря на то, что я хочу этого. я искал, но я не нашел подобный пример

ответ

0

Я пытался очистить свой вопрос, но я до сих пор не уверен, что вы собираетесь иметь два экземпляра A (один в В другой в C) или если вы пытаетесь предоставить один экземпляр A между B и 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 

Вы можете разместить внутри В или С и маршрутизировать входной от другого через родительский уровень.

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, то у вас есть два независимых экземпляров, даже если входные из общего источник.

+0

Хмм спасибо, 1-й звук хорош. Я рассмотрел вторую или третью, как первую мысль. Итак, вызов экземпляра модуля 2 раза с именем SAME создает 2 разных компонента аппаратного обеспечения? – trakis95

+0

Было бы два _instances_, и они должны иметь разные имена экземпляров. Verilog не _call_ модули – Greg