Verilog 多模块布线

Verilog 多模块布线,verilog,Verilog,我试图通过让多个内存块启动一个基本模块,并将所有这些块的输出连接到一根导线,来模拟一个真正的基本内存模型。是这样做的吗 module memoryBlock( input Enable, output [7:0] dataOut, input [7:0] dataIN ); always @(*) begin if(Enable == 1) dataOut = dataIn; end endmodule; 这个想法是一次只启用其中一个数据块,然后我可以将启用块中的任何信

我试图通过让多个内存块启动一个基本模块,并将所有这些块的输出连接到一根导线,来模拟一个真正的基本内存模型。是这样做的吗

module memoryBlock(
 input Enable,
 output [7:0] dataOut,
 input [7:0] dataIN
);

always @(*) begin
  if(Enable == 1)
    dataOut = dataIn;

end

endmodule;
这个想法是一次只启用其中一个数据块,然后我可以将启用块中的任何信息传递到输出线。以下是我将如何使用它:

module testbench;
  reg [7:0] exampleData1 = 8'b00000001;
  reg [7:0] exampleData2 = 8'b11111111;
  reg enable1 = 0;
  reg enable2 = 1;
  wire [7:0] outputForBoth;

memoryBlock mb1(enable1, outputForBoth, exampleData1);
memoryBlock mb2(enable2, outputForBoth, exampleData2);

endmodule;
当我在输出为“zzzzzz”之前尝试过这样的示例时。我的目标是能够拥有多个内存块。。只启用其中一个,并让该线路保存来自该块的任何数据。这是正确的方法吗?任何帮助都是巨大的


这样,我只需要去一个地方检索所有的输出信息。我认为另一种方法是构建某种MUX,它看起来要复杂得多

要做到这一点,您需要三态输出。启用时,三态驱动导线,未启用时处于高阻抗状态。但您需要确保不要同时启用两个模块

module memoryBlock(
 input enable,
 inout [7:0] dataOut,
 input [7:0] dataIN
);

    assign dataOut = enable? dataIn : 8'bzzzzzzzz;


endmodule

您的方法是不正确的,因为两个驱动器的导线(即输出)不能由多个驱动器驱动,即来自mb1和mb2的输出信号。有没有办法从多个信号驱动某些东西@qiuYes,它被称为三态缓冲区,最后一个图: