问题导引:当我们需要在顶层模块中调用子模块时,需进行例化操作,即利用已经写好的module来生成一个模块供顶层模块调用(相当于黑盒子)。然而,对于黑盒子内部,显然我们知道黑盒子内部的输入引脚在定义时一定是wire型,而输出根据是否需要过程中赋值可定义为wire或reg型,当然再次重复这是在写黑盒子这个module时。然而,在顶层调用时,需将黑盒子的输入、输出引脚连接至顶层模块中去,这时在顶层模块中,传入到黑盒子的输入输出引脚的变量类型是怎样的呢?
引脚号 | 变量类型 | 输入or输出 |
1 | wire | 输入 |
2 | wire | 输入 |
3 | wire | 输入 |
4 | wire/reg | 输出 |
5 | wire/reg | 输出 |
6 | wire/reg | 输出 |
顶层连线 | 顶层传入的变量的类型 |
.1(IN_S1) | reg/wire |
.2(IN_S2) | reg/wire |
.3(IN_S3) | reg/wire |
.4(OUT_S1) | wire |
.5(OUT_S2) | wire |
.6(OUT_S3) | wire |
上表直观的列举了传入到黑盒子(例化元件)的变量可取的类型,即对于黑盒子的输入信号,既可以是顶层中wire类型的信号线直接供给,也可以是顶层中存储器(reg)型变量传入。而对于黑盒子(例化元件)的输出而言,这个黑盒子已经对顶层中传入的信号进行处理并输出,想要应用的黑盒子的输出信号,需要直接用wire类型的变量(可以想象成线)将其引出供顶层模块使用,因此,对于黑盒子的输出信号,只能使用顶层模块中的wire变量连接。否则在编程会报错:
Error (10663): Verilog HDL Port Connection error at test.v(20): output or inout port "out" must be connected to a structural net expression
到此,结束!