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,它被称为三态缓冲区,最后一个图: