专题:元件例化

元件例化是指在一个module中调用了其他的module。
例如,下图中模块MUXK调用了两个MUX21A模块u1和u2。

专题:元件例化_第1张图片
元件例化

实现方式如下:

module MUXK(input a1,a2,a3,s0,s1,output outy)
   wire tmp; 
   MUX21A  u1(.a(a2), .b(a3) , .s(s0), .y(tmp));
   MUX21A  u2(.a(a1), .b(tmp) , .s(s1), .y(outy));
endmodule

相信你已经看明白了。解释如下:
1、要调用某个子模块,直接写上子模块名MUX21A,后面加上实例名u1,再后面括号内是子模块引脚信号与当前顶层module内信号的连接关系。
2、实例名u1,u2可以省略。
3、子模块引脚名(.a .b .s .y)可以省略,条件是括号内被连接的信号排列顺序,需要与子模块定义时的引脚名保持一致。
4、如果连接线tmp是单根信号线,可以省略不定义。
即,简略版的描述可以这样:

module MUXK(input a1,a2,a3,s0,s1,output outy)
   // wire tmp; 
   MUX21A  (a2, a3 , s0, tmp);
   MUX21A  (a1, tmp, s1, outy);
endmodule

需要注意的事项
1、虽然上面说了一些可以省略的内容,但为了保证便于调试,以及防止因省略产生歧义,强烈建议不要省略。
2、在连接两个多位宽端口(信号线宽大于1)的时候,连接线wire必须定义,且wire线宽需与总线宽度一致。否则,程序会认为只连接总线所有信号线里的其中一根线。
例如:下图元件例化中,用导线data连接DOUT[7..0]和B[7..0]时,必须事先定义
wire [7:0] data ;

元件例化 - 多位宽总线连接

你可能感兴趣的:(专题:元件例化)