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

时间:2015-07-04 14:52:01

标签: module verilog

我试图调用2个模块中的一个(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_test_1和fifo_test_2模块正常运行。但上面的代码给出了这些错误:

  

**错误:C:/Users/Swayam/Documents/VC_selector.v(8):未定义的变量:fifo_test_1。
  **错误:C:/Users/Swayam/Documents/VC_selector.v(8):near" t1":语法错误,意外IDENTIFIER
  **错误:C:/Users/Swayam/Documents/VC_selector.v(12):未定义的变量:fifo_test_2。
  **错误:C:/Users/Swayam/Documents/VC_selector.v(12):near" t2":语法错误,意外IDENTIFIER

请帮我调试代码。

1 个答案:

答案 0 :(得分:2)

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

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

assign my_switched_output = data[0] ? module_1_output : module_2_output;

三元运算符(此处使用)允许您执行此尝试所做的切换。

确保您已完成的另一件事是包括您尝试模拟/合成的模块文件以及命令中所需的所有子模块verilog文件。如何根据模拟器包含所有这些文件。