【发布时间】:2017-03-23 00:39:08
【问题描述】:
我试图通过具有多个内存块(基本模块的启动)并将所有这些块的输出连接到一根电线来模拟一个真正基本的内存模型。这是这样做的方法吗?
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;
当我在输出刚刚成为“zzzzzzzz”之前尝试过这样的示例时。我的目标是能够拥有多个内存块..只启用其中一个,并让那根线保存来自该块的任何数据。这是正确的方法吗?任何帮助都会很大!
这样我只有一个地方需要去检索所有的输出信息。我想到的另一种方法是构建某种多路复用器,但它看起来要复杂得多!
【问题讨论】:
-
您的方法不正确,因为线(即
outputForBoth)不能由多个驱动程序驱动(即来自mb1和mb2的输出信号)。 -
有没有办法从多个信号中驱动某些东西? @qiu
-
是的,它被称为三态缓冲区,在这里查看最后一个图:cs.umd.edu/class/sum2003/cmsc311/Notes/CompOrg/tristate.html
标签: verilog