|
A r b、C t r l、M e m _ B l k和B y t e為模塊端口。這些端口同時也是外部端口,即在實例中,當采用名稱關聯方式時,外部端口名稱用于相互連接。下面是模塊 S c r a m _ A的實例。
Scram_A SX( .B y t e(B 1) , .M e m _ B l k(M 1) , .C t r l(C 1) , .A r b(A 1) ) ;
在模塊S c r a m _ A中,外部端口名稱隱式地。Verilog HDL中提供顯式方式外部端
口名稱。這可以通過按如下形式一個端口來完成:
.e x t e r n a l _ p o r t _ n a m e(i n t e r n a l _ p o r t _ n a m e)
下面是同一個例子,只不過是顯式地外部端口。
模塊S c r a m _ B在此實例中的外部端口是 D a t a、C o n t ro l、M e m _ Wo rd和A d d r。端口表顯式地表明了外部端口和內部端口之間的連接。注意外部端口無需聲明,但是模塊的內部端口卻必須聲明。外部端口在模塊內不可見,但是卻要在模塊實例語句中使用,而內部端口因為在模塊中可見,所以必須在模塊中說明。在模塊實例語句中,外部端口的使用如下所示:
Scram_B S1 ( .A d d r(A 1) , .D a t a(D 1) , .C o n t r o l(C 1) ,
.M e m _ W o r d(M 1) ) ;
在模塊定義的端口表中,這兩種概念不能混淆,即在模塊定義中所有端口必須顯式的端口名稱,或者沒有一個端口帶有顯式的端口名稱。如果模塊端口通過位置連接,則模塊實例語句中不能使用外部端口名稱。
內部端口名稱可以是標識符,也可以是下述類型的表達式:
? 位選擇;
? 部分選擇;
? 位選擇、部分選擇和標識符的合并。
例如,
在S c r a m _ C的模塊定義中,端口表包括部分選擇( A r b[ 0 : 2 ])、標識符( C t r l)、合并({M e m _ B l k[ 0 ],M e m _ B l k[ 1 ] } )和位選擇(B y t e[ 3 ])。在內部端口是位選擇、部分選擇或合并的情況下,沒有隱式地外部端口名。因此,在這樣的模塊實例語句中,模塊端口必須通過位置關聯相互連接。例如,
Scram_C SYA (L 1[ 4 : 6 ] ,C L , M M Y[ 1 : 0 ] ,B T) ;
在這個實例語句中,端口通過位置關聯相連接,因此 L 1[ 4∶6 ]連接到A r b[ 0∶2 ],C L連接
到C t r l,M M Y[ 1 ]連接到M e m _ B l k[ 0 ] ,M M Y[ 0 ]連接到M e m _ B l k[ 1 ],B T連接到B y t e[ 3 ]。
|