verilog 多路复用器不工作

Posted

技术标签:

【中文标题】verilog 多路复用器不工作【英文标题】:verilog mux not working 【发布时间】:2015-05-09 13:19:01 【问题描述】:

我想为 2*1 多路复用器构建一个小代码,其中输入来自不同的模块(使其更实用),但我总是得到高阻抗 ('Z') 的输出。有什么建议吗?

module  mux_using_assign(
  din_0      , // Mux first input
  din_1      , // Mux Second input
  sel        , // Select input
  mux_out      // Mux output
  );
  input din_0, din_1, sel ;
  output mux_out;
  wire  mux_out;
  assign mux_out = (sel) ? din_1 : din_0;

  endmodule //End Of Module mux


  module ip1();
  wire a;
  mux_using_assign dut1(.din_0(a));
  assign a = 1;
  endmodule


  module ip2();
  wire b;
  mux_using_assign dut1(.din_1(b));
  assign b = 0;
  endmodule



  module test();
  wire sel        ; // Select input
  wire mux_out;
  ip1 aa();    // tried commenting this and following line also
  ip2 bb();
  mux_using_assign dut1(.sel(sel),.mux_out(mux_out));
  assign sel=1;
  endmodule

【问题讨论】:

【参考方案1】:

问题在于每个模块中的dut1 实例是与其他模块不同的实例。换句话说,ip1ip2test 中的每一个都有自己的dut1 复用器。您需要使用输入/输出线并将它们全部链接到单个 mux_using_assign 声明。

【讨论】:

只是想确认一下,为所有 mux 实例提供相同的名称并不意味着它们是同一个物理块? 那么有没有办法只使用语法来做到这一点,而不是使用所有详细的接线解决方案(寻找更简单的出路),因为这只是一个更大项目的实验代码.我必须实现一个仲裁器,它从不同的块中获取输入并根据选定的输入块访问内存输出。 我不知道。此外,布线解决方案并不是那么“详细”——事实上,它可以说比您尝试做的更好,因为它将接口与实现分开。

以上是关于verilog 多路复用器不工作的主要内容,如果未能解决你的问题,请参考以下文章

行为verilog:使用1个模块创建多个多路复用器

TCP的多路复用和分解

Verilog 没有给出预期的结果

IO多路复用

IO多路复用和线程池

VHDL:当涉及时钟信号时,多路复用器输出不跟随输入