使用来自其他两个模块的输出(Verilog)

时间:2018-01-20 05:46:43

标签: verilog

我有一个简单的问题。

如何使用新模块的其他两个模块的输出?

示例:

module test1(ans, X, Y)
  output ans;
  input X, Y;

  do stuff

endmodule

module test2(ans2, X, Y)
  output ans2;
  input X, Y;

  do stuff

endmodule

module result(final_ans, ans, ans2)   <------- this is what I mean.

  do stuff

endmodule

我该怎么做?我如何call其他两个模块?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您没有致电模块。您实例模块。 Verilog不像普通的编程语言,它是一种硬件模拟语言。如果您坚持使用该语言的一个子集,并以正确的方式使用该语言,那么语言也可以转换为真实硬件。后者称为RTL(寄存器传输语言)。我强烈建议您找到一些现有的Verilog代码示例并研究人们如何使用它。

因此,您所做的就是创建每个模块的实例并进行连接 信号输入和输出。将其与将IC放置在电路板上并将电线焊接到电路板上相比较。但后来全都是软件。

test1 instance_of_test1 (
   .X(signal_into_X),
   .Y(signal_into_Y),
   .ans(signal_outof_ans)
);

然后你可以使用test1和test2发出的信号进入结果:

result instance_of_result  (
   .ans(signal_outof_ans),
   .ans2(signal_outof_ans2),
   .final_ans(signal_outof_final_ans)
);

正如旁注:
我使用的示例还显示使用端口方向的命名约定通常是个坏主意。信号来自 out 一个模块,然后进入另一个模块。因此名称​​ signal_outof_ans 对于模块 test1 来说没什么问题,但对于模块结果是错误的,因为它进入 >模块。在这里,我想强调模块test1级别的内容。 (我也知道有些公司甚至将它规定为首选的编码风格,所以我在等待高手来到这里)。在我自己的代码中,我永远不会使用它。所以这是正确的编码方式:

wire ans,ans2;
test1 instance_of_test1 (
   .X(X),
   .Y(Y),
   .ans(ans)
);
...
...
result instance_of_result  (
   .ans(ans),
   .ans2(ans2),
   .final_ans(final_ans)
);