我有一个简单的问题。
如何使用新模块的其他两个模块的输出?
示例:
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
其他两个模块?
感谢您的帮助。
答案 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)
);