【问题标题】:Wire with multiple modules连接多个模块
【发布时间】: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)不能由多个驱动程序驱动(即来自mb1mb2 的输出信号)。
  • 有没有办法从多个信号中驱动某些东西? @qiu
  • 是的,它被称为三态缓冲区,在这里查看最后一个图:cs.umd.edu/class/sum2003/cmsc311/Notes/CompOrg/tristate.html

标签: verilog


【解决方案1】:

您需要三态输出来执行此操作。三态在启用时驱动电线,在未启用时处于高阻抗状态。但您需要确保不要同时启用两个模块。

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

    assign dataOut = enable? dataIn : 8'bzzzzzzzz;


endmodule

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多