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

使用其他两个模块(Verilog)的输出,verilog,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

我有一个简短的问题

如何将其他两个模块的输出用于新模块

例如:

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
模块test1(ans,X,Y)
输出ans;
输入X,Y;
做事
端模
模块测试2(ans2,X,Y)
输出ans2;
输入X,Y;
做事
端模

模块结果(最终答案、答案、答案2)您不调用模块。您可以实例模块。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)
);
作为旁注:
我使用的示例还表明,使用端口方向的命名约定通常不是一个好主意。信号从一个模块发出,然后进入另一个模块。因此,模块test1的名称信号\u outof \u ans是正确的,但是模块结果是错误的,因为它进入了模块。在这里,我想强调模块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)
);