概念
当我们完成一个比较完整的系统的时候,通常需要编写一个Testbench来验证自己的设计的功能能否满足设计要求。在这个系统中通常会有一个top模块来连接那些小的模块,verilog通过实例化的方式来完成这些子模块和顶层模块的连接,然后顶层模块可以由此来调用各个子模块。
用法
调用模块的端口一般有两种方式,一种是位置关联,一种是名字关联,顺序关联不容易漏掉端口,名字关联容易理解(两个相同的名字肯定好理解啊)
举例说明
子模块(这里以一个简单的全加器模块说明)描述如下:
module adder(a,b,cin,s,cout);
innput a,b,cin;
output cout,s;
assign {cout,s} = a + b + cin;
endmodule
下面有一个顶层模块调用全加器模块:
module top(A,B,CIN,S,COUT);
…
adder ADDER(A,B,CIN,S,COUT);//这里采用位置关联
…
endmodule
如果采用名称关联
adder ADDER(
.a(A),
.b(B),
.cin(CIN),
.cout(COUT)
);
上面两种关联方式有一些共同点:
1、例化中一定会有一个例化名,比如上面的ADDER,就代表着对adder模块的调用,这个例化名可以自己定,没有什么特别要求。
值得一讲的是名称关联,这种方法注意是前面写的是子模块内的端口名称,括号里面的是顶层模块里面的端口名称。一般我们写模块时都喜欢将两个模块里面的端口名称写成一样的,方便自己理解。
还有就是注意悬空端口的处理。综合时悬空端口会有一定的影响。