欢迎来到EDA中国!
当前位置:网站首页 >资源共享 > FPGA

Verilog HDL语言教程第九章--结构建模

  • 415k
  • pdf
  •  
  •  
  • 下载
  • 2013-04-26
  • 软件简介
9.1 模块
Verilog HDL中,基本单元定义成模块形式,如下所示:
m o d u l e m o d u l e n a m e(p o r t l i s t) ;
D e c l a r a t i o n s a n d S t a t e m e n t s
e n d m o d u l e
端口队列p o rt l i s t列出了该模块通过哪些端口与外部模块通信。
9.2 端口
模块的端口可以是输入端口、输出端口或双向端口。缺省的端口类型为线网类型(即
w i r e类型)。但是,端口可被显式地指定为线网。输出或输入输出端口能够被重新声明为r e g型
寄存器。无论是在线网说明还是寄存器说明中,线网或寄存器必须与端口说明中指定的长度
相同。下面是一些端口说明实例。
m o d u l e M i c r o (PC, Instr, NextAdd)r;
/ /端口说明
i n p u t [3:1] P C;
o u t p u t [1:8] I n s t r;
i n o u t [16:1] N e x t A d d r;
/ /重新说明端口类型:
w i r e [16:1] N e x t A d d r; //该说明是可选的,但如果指定了,就必须与它的端口说明保持相同长度。
r e g [1:8] I n s t r;
/ /I n s t r已被重新说明为r e g类型,因此它能在always 语句或在i n i t i a l语句中赋值。
. . .
e n d m o d u l e
9.3 模块实例语句
一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例语句形式
如下:
module_name instance_name(p o r t a s s o c i a t i o n s) ;
信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。端口关联形式如下:
p o r t e x p r / /通过位置。
.P o r t N a m e (p o r t e x p r) / /通过名称。
p o rt e x p r可以是以下的任何类型:
1) 标识符(r e g或n e t)
2) 位选择
3) 部分选择
4) 上述类型的合并
5) 表达式(只适用于输入端口)
在位置关联中,端口表达式按指定的顺序与模块中的端口关联。在通过名称实现的关联
中,模块端口和端口表达式的关联被显式地指定,因此端口的关联顺序并不重要。下例使用
两个半加器模块构造全加器;逻辑图如图9 - 1所示。
m o d u l e H A(A , B , S , C);
i n p u t A , B;
o u t p u t S, C;
p a r a m e t e r A N D D E L A Y = 1, X O R D E L A Y = 2;
a s s i g n #X O R D E L A Y S = A ^ B;
a s s i g n #A N D D E L A Y C = A & B;
e n d m o d u l e
m o d u l e F A(P, Q, Cin, Sum, Cout ) ;
i n p u t P, Q, Cin;
o u t p u t Sum, Cout;
p a r a m e t e r O R D E L A Y = 1;
w i r e S1, C1, C2;
/ /两个模块实例语句
HA h1 (P, Q, S1, C1); //通过位置关联。
HA h2 ( .A(C i n), .S(S u m), .B(S 1), .C(C 2)); //通过端口与信号的名字关联。
/ /门实例语句:
or #O R D E L A Y O1 (Cout, C1, C2) ;
e n d m o d u l e
在第一个模块实例语句中, H A是模块的名字,h 1是实例名称,并且端口按位置关联,即
信号P与模块( H A)的端口A连接,信号Q与端口B连接, S 1与S连接,C 1与模块端口C连接。
在第二个实例中,端口按名称关联,即模块( H A)和端口表达式间的连接是显示地定义
的。
下例是使用不同端口表达式形式的模块实例语句。
Micro M1 (U d I n[3:0], {WrN, RdN}, S t a t u s[0], S t a t u s[ 1 ] ,
& U d O u t [0:7], T x D a t a) ;
这个实例语句表示端口表达式可以是标识符( T x D a t a)、位选择( S t a t u s[ 0 ])、部分位选
择(U d I n[ 3 : 0 ])、合并( {Wr N,R d N})或一个表达式(& u d O u t[ 0 : 7 ]);表达式只能够连接到
输入端口。
9.3.1 悬空端口
在实例语句中,悬空端口可通过将端口表达式表示为空白来指定为悬空端口,例如:
84 Verilog HDL 硬件描述语言
下载
图9-1 使用两个半加器模块构造
的全加器
DFF d1 ( .Q(Q S), .Q b a r(), .D a t a( D ) ,
.P r e s e t(), .C l o c k(CK)); //名称对应方式。
DFF d2 (QS, , D, , CK) ; / /位置对应方式。
/ /输出端口Q b a r悬空。
/ /输入端口P r e s e t打开,其值设定为z。
在这两个实例语句中,端口Q b a r和P re s e t悬空。
模块的输入端悬空,值为高阻态z。模块的输出端口悬空,表示该输出端口废弃不用。
9.3.2 不同的端口长度
当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹
配。例如:
m o d u l e C h i l d(Pba, Ppy) ;
i n p u t [5:0] P b a;
o u t p u t [2:0] P p y;
. . .
e n d m o d u l e
m o d u l e T o p;
w i r e [1:2] B d l;
w i r e [2:6] M p r;
Child C1 (Bdl, Mpr) ;
e n d m o d u l e
在对C h i l d模块的实例中, B d l[ 2 ]连接到P b a[ 0 ],B d l[1] 连接到P b a[ 1 ],余下的输入端口
P b a[ 5 ]、P b a[ 4 ]和P b a[ 3 ]悬空,因此为高阻态z。与之相似, M p r[ 6 ]连接到P p y[ 0 ],M p r[ 5 ]连
接到P p y[ 1 ],M p r[4] 连接到P p y[ 2 ]。参见图9 - 2。
图9-2 端口匹配
9.3.3 模块参数值
当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数
值的改变可采用下述两种方式:
1) 参数定义语句(d e f p a r a m);
2) 带参数值的模块引用。
1. 参数定义语句
参数定义语句形式如下:
d e f p a r a m hier_path_name1 = v a l u e 1,
hier_path_name2 = v a l u e 2, ...;
较低层模块中的层次路径名参数可以使用如下语句显式定义(层次路径名在下一章中讲
第9章结构建模85
下载
述)。下面是一个例。模块FA和H A已在本节前面描
关键字 : 结构建模 erilog HDL 语言 
获取帮助