Module 从一个模块调用另一个模块

Module 从一个模块调用另一个模块,module,verilog,Module,Verilog,我试图调用两个模块中的一个(fifo_test_1或fifo_test_2),具体取决于以下Verilog代码中位data[0]的值 module VC_selector(data); input [10:0] data; always @ (data[0]) begin if(~data[0]) begin fifo_test_1 t1(.buf_in(data)); end else if (data[0]) begin

我试图调用两个模块中的一个(fifo_test_1或fifo_test_2),具体取决于以下Verilog代码中位
data[0]
的值

module VC_selector(data);

  input [10:0] data;

  always @ (data[0])
  begin
    if(~data[0])
    begin
      fifo_test_1 t1(.buf_in(data));
    end
    else if (data[0])
    begin
      fifo_test_2 t2 (.buf_in(data));
    end
  end
endmodule
fifo_测试_1和fifo_测试_2模块工作正常。但上述代码给出了以下错误:

**错误:C:/Users/Swayam/Documents/VC_selector.v(8):未定义变量:fifo_test_1。
**错误:C:/Users/Swayam/Documents/VC_selector.v(8):靠近“t1”:语法错误,意外标识符
**错误:C:/Users/Swayam/Documents/VC_selector.v(12):未定义变量:fifo_test_2。
**错误:C:/Users/Swayam/Documents/VC_selector.v(12):靠近“t2”:语法错误,意外标识符


请帮助我调试代码。

硬件运行时,您无法更改包含的模块。在执行期间,模块必须是常量。因此,不能在always语句中包含模块定义


您可以做的一件事是将两个模块移到always块之外,并使用一些逻辑在它们的输出之间切换。因为这两个fifo模块都没有在这种特殊情况下很难实现的输出,但在一般情况下是可能的

assign my_switched_output = data[0] ? module_1_output : module_2_output;
三元运算符(此处使用)允许您执行看起来您正在尝试执行的切换


另一件确保您已经完成的事情是在命令中包括您尝试模拟/合成的模块文件和您需要的所有子模块verilog文件。如何基于模拟器包含所有这些文件。

因为两个fifo模块都没有输出,所有逻辑都将被合成。