下载第 5章 门电平模型化本章讲述 Verilog HDL为门级电路建模的能力,包括可以使用的内置基本门和如何使用它们来进行硬件描述。
5.1 内置基本门
Verilog HDL中提供下列内置基本门:
1) 多输入门:
and,nand,or,nor,x o r,x n o r
2) 多输出门:
buf,not
3) 三态门:
bufif0,bufif1,notif0,notif1
4) 上拉、下拉电阻:
pullup,pulldown
5) MOS开关:
cmos,nmos,pmos,rcmos,rnmos,rpmos
6) 双向开关:
tran,tranif0,tranif1,rtran,rtranif0,rt r a n i f 1
门级逻辑设计描述中可使用具体的门实例语句。下面是简单的门实例语句的格式。
g a t e _ t y p e[i n s t a n c e _ n a m e] (term1,term2,.,,,termN) ;
注意,i n s t a n c e _ n a m e是可选的; g a t e _ t y p e为前面列出的某种门类型。各 t e r m用于表示与门的输入 /输出端口相连的线网或寄存器。
同一门类型的多个实例能够在一个结构形式中定义。语法如下,
g a t e _ t y p e
[i n s t a n c e _ n a m e 1] (term11,term12,.,,,term1N),
[i n s t a n c e _ n a m e 2] (term21,term22,.,,,term2N),
.,,
[i n s t a n c e _ n a m e M] (termM1,termM2,.,,,termMN) ;
5.2 多输入门内置的多输入门如下,
and nand nor or xor xnor
这些逻辑门只有单个输出,1个或多个输入。多输入门实例语句的语法如下,
m u l t i p l e _ i n p u t _ g a t e _ t y p e
[i n s t a n c e _ n a m e] (OutputA,Input1,Input2,.,,,InputN) ;
第一个端口是输出,其它端口是输入。如图 5 - 1所示。
图 5-1 多输入门多输入门
40 Verilog HDL 硬件描述语言下面是几个具体实例。图 5 - 2为对应的逻辑图。
and A 1(Out1,In1,In2) ;
a n d R B X (Sty,Rib,Bro,Qit,Fix) ;
x o r (Bar,Bud[ 0 ],B u d[1],B u d[ 2 ] ),
(Car,Cut[0],C u t[ 1 ] ),
(Sar,Sut[2],S u t[1],S u t[0],S u t[ 3 ] ) ;
图 5-2 多输入门实例第一个门实例语句是单元名为 A 1、输出为 O u t 1、并带有两个输入 I n 1和 I n 2的两输入与门。
第二个门实例语句是四输入与门,单元名为 R B X,输出为 S t y,4个输入为 R i b,B ro,Q i t和 F i x。
第三个门实例语句是异或门的具体实例,没有单元名。它的输出是 B a r,三个输入分别为
B u d[ 0 ],B u d[ 1 ]和 B u d[ 2 ]。同时,这一个实例语句中还有两个相同类型的单元。
下面是这些门的真值表。注意在输入端的 z与对 x的处理方式相同;多输入门的输出决不能是 z。
下载
5.3 多输出门多输出门有,
buf not
这些门都只有单个输入,一个或多个输出。如图 5 - 3所示。这些门的实例语句的基本语法如下,
m u l t i p l e _ o u t p u t _ g a t e _ t y p e
[i n s t a n c e _ n a m e] (Out1,Out2,.,,OutN,InputA) ;
最后的端口是输入端口,其余的所有端口为输出端口。
图 5-3 多输出门例如,
b u f B 1 ( Fan [ 0 ],Fan [ 1 ],Fan [ 2 ],Fan [ 3 ],C l k) ;
n o t N 1 ( P h A,P h B,R e a d y) ;
在第一个门实例语句中,C l k是缓冲门的输入。门 B 1有 4个输出,F a n[ 0 ]到 F a n[ 3 ]。在第二个门实例语句中,R e a d y是非门的唯一输入端口。门 N 1有两个输出,P h A和 P h B。
这些门的真值表如下,
5.4 三态门三态门有,
bufif0 bufif1 notif0 notif1
这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。三态门实例语句的基本语法如下:
t r i s t a t e _ g a t e[i n s t a n c e _ n a m e] (OutputA,InputB,ControlC) ;
第一个端口 O u t p u t A是输出端口,第二个端口 I n p u t B是数据输入,C o n t ro l C是控制输入。
参见图 5 - 4。根据控制输入,输出可被驱动到高阻状态,即值 z。对于 b u f i f 0,若通过控制输入为 1,则输出为 z;否则数据被传输至输出端。对于 b u f i f 1,若控制输入为 0,则输出为 z。对于
n o t i f 0,如果控制输出为 1,那么输出为 z;否则输入数据值的非传输到输出端。对于 n o t i f 1,
若控制输入为 0;则输出为 z。
例如,
b u f i f 1 BF1 ( D b u s,M e m D a t a,S t r o b e);
n o t i f 0 N T 2 (Addr,Abus,Probe) ;
当 S t ro b e为 0时,b u f i f 1门 B F 1驱动输出 D b u s为高阻;否则 M e m D a t a被传输至 D b u s。在第 2
个实例语句中,当 P ro b e为 1时,A d d r为高阻;否则 A b u s的非传输到 A d d r。
第 5章 门电平模型化 41下载
(输出) (输出)
图 5-4 三态门下面是这些门的真值表。表中的某些项是可选项。例如,0 /z表明输出根据数据的信号强度和控制值既可以为 0也可以为 z,信号强度在第 1 0章中讨论。
5.5 上拉、下拉电阻上拉、下拉电阻有:
pullup pulldown
这类门设备没有输入只有输出。上拉电阻将输出置为 1。下拉电阻将输出置为 0。门实例语句形式如下:
p u l l _ g a t e[i n s t a n c e _ n a m e] (O u t p u t A) ;
门实例的端口表只包含 1个输出。例如:
p u l l u p PUP (P w r) ;
此上拉电阻实例名为 P U P,输出 P w r置为高电平 1。
5.6 MOS开关
M O S开关有:
cmos pmos nmos rcmos rpmos rnmos
42 Verilog HDL 硬件描述语言 下载数据 数据控 制 控 制控 制控 制数据 数据这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。
p m o s ( p类型 M O S管 ),n m o s ( n类型 M O S管 ),r n m o s ( r代表电阻 )和 r p m o s开关有一个输出、
一个输入和一个控制输入。实例的基本语法如下:
g a t e _ t y p e[i n s t a n c e _ n a m e] (OutputA,InputB,ControlC) ;
第一个端口为输出,第二个端口是输入,第三个端口是控制输入端。如果 n m o s和 r n m o s开关的控制输入为 0,p m o s和 r p m o s开关的控制为 1,那么开关关闭,即输出为 z;如果控制是 1,
输入数据传输至输出;如图 5 - 5所示。与 n m o s和 p m o s相比,r n m o s和 r p m o s在输入引线和输出引线之间存在高阻抗 (电阻 )。因此当数据从输入传输至输出时,对于 r p m o s和 r m o s,存在数据信号强度衰减。信号强度将在第 1 0章进行讲解。
图 5-5 nmos和 p m o s开关例如:
p m o s P 1 (BigBus,SmallBus,GateControl) ;
r n m o s R N 1 (ControlBit,ReadyBit,Hold) ;
第一个实例为一个实例名为 P 1 的 p m o s开关。开关的输入为 S m a l l B u s,输出为 B i g B u s,控制信号为 G a t e C o n t ro l。
这些开关的真值表如下所示。表中的某些项是可选项。例如,1 /z表明,根据输入和控制信号的强度,输出既可以为 1,也可以为 z。
c m o s ( m o s求补 )和 r c m o s ( c m o s的高阻态版本 )开关有一个数据输出,一个数据输入和两个控制输入。这两个开关实例语句的语法形式如下:
(r)cmos [i n s t a n c e _ n a m e]
(OutputA,InputB,NControl,PControl);
第一个端口为输出端口,第二个端口为输入端口,第三个端口为 n通道控制输入,第四个端口为是 P通道控制输入。 c m o s ( r c m o s )开关行为与带有公共输入、输出的 p m o s
( r p m o s)和 n m o s ( r n m o s )开关组合十分相似。参见图 5 - 6。
第 5章 门电平模型化 43下载开关 开关控制数据 数据控制图 5-6 (r)cmos开关
5.7 双向开关双向开关有:
tran rtran tranif0 rtranif0 tranif1 rtranif1
这些开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后 4个开关能够通过设置合适的控制信号来关闭。 t r a n和 r t r a n开关不能被关闭。
t r a n或 r t r a n ( t r a n 的高阻态版本 )开关实例语句的语法如下:
( r ) t r a n [i n s t a n c e _ n a m e] (SignalA,SignalB) ;
端口表只有两个端口,并且无条件地双向流动,即从 S i g n a l A向 S i g n a l B,反之亦然。
其它双向开关的实例语句的语法如下:
g a t e _ t y p e[i n s t a n c e _ n a m e] (SignalA,SignalB,ControlC) ;
前两个端口是双向端口,即数据从 S i g n a l A流向 S i g n a l B,反之亦然。第三个端口是控制信号。如果对 t r a n i f 0和 t r a n i f 0,C o n t ro l C是 1;对 t r a n i f 1和 r t r a n i f 1,C o n t ro lC是 0;那么禁止双向数据流动。对于 r t r a n,r t r a n i f 0和 r t r a n i f 1,当信号通过开关传输时,信号强度减弱。
5.8 门时延可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:
gate_type [d e l a y] [i n s t a n c e _ n a m e] (t e r m i n a l _ l i s t) ;
时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为 0。
门时延由三类时延值组成:
1) 上升时延
2) 下降时延
3) 截止时延门时延定义可以包含 0个,1个,2个或 3个时延值。下表为不同个数时延值说明条件下,
各种具体的时延取值情形。
无时延 1个时延 ( d ) 2个时延 (d1,d2) 3个时延 (dA,dB,dC)
上升 0 d d 1 d A
下降 0 d d 2 d B
t o _ x 0 d m i n① (d1,d2) min (dA,dB,dC)
截止 0 d min (d1,d2) d C
① m i n 是 m i n i m u m 的缩写词。
注意转换到 x的时延 ( t o _ x )不但被显式地定义,还可以通过其它定义的值决定。
下面是一些具体实例。注意 Verilog HDL模型中的所有时延都以单位时间表示。单位时间与实际时间的关联可以通过 ` t i m e s c a l e编译器指令实现。在下面的实例中,
n o t N 1 (Qbar,Q) ;
因为没有定义时延,门时延为 0。下面的门实例中,
n a n d #6 (Out,In1,In2) ;
44 Verilog HDL 硬件描述语言 下载所有时延均为 6,即上升时延和下降时延都是 6。因为输出决不会是高阻态,截止时延不适用于与非门。转换到 x的时延也是 6。
a n d #(3,5) (Out,In1,In2,In3) ;
在这个实例中,上升时延被定义为 3,下降时延为 5,转换到 x的时延是 3和 5中间的最小值,即
3。在下面的实例中,
n o t i f 1 #(2,8,6) (Dout,Din1,Din2) ;
上升时延为 2,下降时延为 8,截止时延为 6,转换到 x的时延是 2,8和 6中的最小值,即 2。
对多输入门(例如与门和非门)和多输出门 (缓冲门和非门 )总共只能够定义 2个时延
(因为输出决不会是 z)。三态门共有 3个时延,并且上拉、下拉电阻实例门不能有任何时延。
min:typ:max时延形式门延迟也可采用 m i n,t y p,m a x形式定义。形式如下:
minimum,typical,maximum
最小值、典型值和最大值必须是常数表达式。下面是在实例中使用这种形式的实例。
n a n d #(2:3:4,5:6:7) (Pout,Pin1,Pin2) ;
选择使用哪种时延通常作为模拟运行中的一个选项。例如,如果执行最大时延模拟,与非门单元使用上升时延 4和下降时延 7。
程序块也能够定义门时延。程序块的定义和说明在第 1 0章中讨论。
5.9 实例数组当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明 (范围说明也能够在模块实例语句中使用 )。这种情况的门描述语句的语法如下:
g a t e _ t y p e [d e l a y]instance_name [l e f t b o u n d,r i g h t b o u n d]
(l i s t _ o f _ t e r m i n a l _ n a m e s) ;
l e f t b o u n d和 r i g h t b o u n d值是任意的两个常量表达式。左界不必大于右界,并且左、右界两者都不必限定为 0。示例如下。
w i r e [3:0] Out,InA,InB;
.,,
n a n d G a n g [3:0] (Out,InA,InB) ;
带有范围说明的实例语句与下述语句等价:
n a n d
Gang3 (O u t[3],I n A[3],I n B[ 3 ] ),
G a n g 2 (O u t[2],I n A[2],I n B[ 2 ] ),
G a n g 1 (O u t[ 1 ],I n A[1],I n B[ 1 ] ),
Gang0 (O u t[0],I n A[ 0 ],I n B[ 0 ] ) ;
注意定义实例数组时,实例名称是不可选的。
5.10 隐式线网如果在 Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为 1位线网。但是 ` d e f a u l t _ n e t t y p e编译指令能够用于取代缺省线网类型。编译指令格式如下:
第 5章 门电平模型化 45下载
` d e f a u l t _ n e t t y p e n e t _ t y p e
例如:
`default_nettype wand
根据此编译指令,所有后续未说明的线网都是 w a n d类型。
` d e f a u l t _ n e t t y p e编译指令在模块定义外出现,并且在下一个相同编译指令或 ` re s e t a l l编译指令出现前一直有效。
5.11 简单示例下面是图 5 - 7中 4 - 1多路选择电路的门级描述。注意因为实例名是可选的 (除用于实例数组情况外 ),在门实例语句中没有指定实例名。
m o d u l e M U X 4 x 1 (Z,D 0,D 1,D 2,D 3,S 0,S 1) ;
o u t p u t Z;
i n p u t D 0,D 1,D 2,D 3,S 0,S 1;
a n d (T 0,D 0,S 0 b a r,S 1 b a r),
(T 1,D 1,S 0 b a r,S 1),
(T 2,D 2,S 0,S 1 b a r),
(T 3,D 3,S 0,S 1),
n o t (S 0 b a r,S 0),
(S 1 b a r,S 1) ;
o r (Z,T 0,T 1,T 2,T 3,) ;
e n d m o d u l e
如果或门实例由下列的实例代替呢?
o r Z (Z,T 0,T 1,T 2,T 3); //非法的 Verilog HDL表达式。
注意实例名还是 Z,并且连接到实例输出的线网也是 Z。这种情况在 Verilog HDL中是不允许的。在同一模块中,实例名不能与线网名相同。
5.12 2-4解码器举例图 5 - 8中显示的 2 - 4解码器电路的门级描述如下:
m o d u l e D E C 2× 4 (A,B,E n a b l e,Z) ;
i n p u t A,B,E n a b l e;
o u t p u t [0:3] Z ;
w i r e Abar,Bbar;
n o t # ( 1,2 )
V 0 (A b a r,A),
V 1(Bbar,B) ;
n a n d # (4,3)
N 0 (Z[3],Enable,A,B),
N 1 (Z[0],Enable,Abar,Bbar),
N 2 (Z[1],Enable,Abar,B),
N 3 (Z[2],Enable,A,Bbar),
e n d m o d u l e
46 Verilog HDL 硬件描述语言 下载图 5-7 4-1多路选择电路图 5-8 2-4解码器电路
5.13 主从触发器举例图 5 - 9所示的主从 D触发器的门级描述如下:
m o d u l e M S D F F (D,C,Q,Q b a r) ;
i n p u t D,C ;
o u t p u t Q,Q b a r ;
n o t
NT1 (N o t D,D),
NT2 (N o t C,C),
N T 3 (N o t Y,Y) ;
n a n d
N D 1 (D 1,D,C),
N D 2 (D 2,C,N o t D),
N D 3 (Y,D 1,Y b a r),
N D 4 (Y b a r,Y,D 2),
N D 5 (Y 1,Y,N o t C),
N D 6 (Y 2,N o t Y,N o t C),
N D 7 (Q,Q b a r,Y 1),
N D 8 (Q b a r,Y 2,Q) ;
e n d m o d u l e
图 5-9 主从触发器
5.14 奇偶电路图 5 - 1 0所示的 9位奇偶发生器门级模型描述如下:
m o d u l e Parity_9_Bit (D,Even,Odd) ;
i n p u t [0:8] D ;
o u t p u t Even,Odd;
第 5章 门电平模型化 47下载
x o r # ( 5,4 )
XE0 (E 0,D[ 0 ],D[ 1 ] ),
XE1 (E 1,D[ 2 ],D[ 3 ] ),
XE2 (E 2,D[ 4 ],D[ 5 ] ),
XE3 (E 3,D[ 6 ],D[ 7 ] ),
XF0 (F 0,E 0,E 1),
XF1 (F 1,E 2,E 3),
XH0 (H 0,F 0,F 1),
X E V E N (Even,D[ 8 ],H0) ;
n o t #2
X O D D (Odd,Even) ;
e n d m o d u l e
图 5-10 奇偶发生器习题
1,用基本门描述图 5 - 11显示的电路模型。编写一个测试验证程序用于测试电路的输出。
使用所有可能的输入值对电路进行测试。
2,使用基本门描述如图 5 - 1 2所示的优先编码器电路模型。当所有输入为 0时,输出 Va l i d为
0,否则输出为 1。并且为验证优先编码器的模型行为编写测试验证程序。
48 Verilog HDL 硬件描述语言 下载图 5 - 11 A不等于 B的逻辑 图 5-12 优先编码器
5.1 内置基本门
Verilog HDL中提供下列内置基本门:
1) 多输入门:
and,nand,or,nor,x o r,x n o r
2) 多输出门:
buf,not
3) 三态门:
bufif0,bufif1,notif0,notif1
4) 上拉、下拉电阻:
pullup,pulldown
5) MOS开关:
cmos,nmos,pmos,rcmos,rnmos,rpmos
6) 双向开关:
tran,tranif0,tranif1,rtran,rtranif0,rt r a n i f 1
门级逻辑设计描述中可使用具体的门实例语句。下面是简单的门实例语句的格式。
g a t e _ t y p e[i n s t a n c e _ n a m e] (term1,term2,.,,,termN) ;
注意,i n s t a n c e _ n a m e是可选的; g a t e _ t y p e为前面列出的某种门类型。各 t e r m用于表示与门的输入 /输出端口相连的线网或寄存器。
同一门类型的多个实例能够在一个结构形式中定义。语法如下,
g a t e _ t y p e
[i n s t a n c e _ n a m e 1] (term11,term12,.,,,term1N),
[i n s t a n c e _ n a m e 2] (term21,term22,.,,,term2N),
.,,
[i n s t a n c e _ n a m e M] (termM1,termM2,.,,,termMN) ;
5.2 多输入门内置的多输入门如下,
and nand nor or xor xnor
这些逻辑门只有单个输出,1个或多个输入。多输入门实例语句的语法如下,
m u l t i p l e _ i n p u t _ g a t e _ t y p e
[i n s t a n c e _ n a m e] (OutputA,Input1,Input2,.,,,InputN) ;
第一个端口是输出,其它端口是输入。如图 5 - 1所示。
图 5-1 多输入门多输入门
40 Verilog HDL 硬件描述语言下面是几个具体实例。图 5 - 2为对应的逻辑图。
and A 1(Out1,In1,In2) ;
a n d R B X (Sty,Rib,Bro,Qit,Fix) ;
x o r (Bar,Bud[ 0 ],B u d[1],B u d[ 2 ] ),
(Car,Cut[0],C u t[ 1 ] ),
(Sar,Sut[2],S u t[1],S u t[0],S u t[ 3 ] ) ;
图 5-2 多输入门实例第一个门实例语句是单元名为 A 1、输出为 O u t 1、并带有两个输入 I n 1和 I n 2的两输入与门。
第二个门实例语句是四输入与门,单元名为 R B X,输出为 S t y,4个输入为 R i b,B ro,Q i t和 F i x。
第三个门实例语句是异或门的具体实例,没有单元名。它的输出是 B a r,三个输入分别为
B u d[ 0 ],B u d[ 1 ]和 B u d[ 2 ]。同时,这一个实例语句中还有两个相同类型的单元。
下面是这些门的真值表。注意在输入端的 z与对 x的处理方式相同;多输入门的输出决不能是 z。
下载
5.3 多输出门多输出门有,
buf not
这些门都只有单个输入,一个或多个输出。如图 5 - 3所示。这些门的实例语句的基本语法如下,
m u l t i p l e _ o u t p u t _ g a t e _ t y p e
[i n s t a n c e _ n a m e] (Out1,Out2,.,,OutN,InputA) ;
最后的端口是输入端口,其余的所有端口为输出端口。
图 5-3 多输出门例如,
b u f B 1 ( Fan [ 0 ],Fan [ 1 ],Fan [ 2 ],Fan [ 3 ],C l k) ;
n o t N 1 ( P h A,P h B,R e a d y) ;
在第一个门实例语句中,C l k是缓冲门的输入。门 B 1有 4个输出,F a n[ 0 ]到 F a n[ 3 ]。在第二个门实例语句中,R e a d y是非门的唯一输入端口。门 N 1有两个输出,P h A和 P h B。
这些门的真值表如下,
5.4 三态门三态门有,
bufif0 bufif1 notif0 notif1
这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。三态门实例语句的基本语法如下:
t r i s t a t e _ g a t e[i n s t a n c e _ n a m e] (OutputA,InputB,ControlC) ;
第一个端口 O u t p u t A是输出端口,第二个端口 I n p u t B是数据输入,C o n t ro l C是控制输入。
参见图 5 - 4。根据控制输入,输出可被驱动到高阻状态,即值 z。对于 b u f i f 0,若通过控制输入为 1,则输出为 z;否则数据被传输至输出端。对于 b u f i f 1,若控制输入为 0,则输出为 z。对于
n o t i f 0,如果控制输出为 1,那么输出为 z;否则输入数据值的非传输到输出端。对于 n o t i f 1,
若控制输入为 0;则输出为 z。
例如,
b u f i f 1 BF1 ( D b u s,M e m D a t a,S t r o b e);
n o t i f 0 N T 2 (Addr,Abus,Probe) ;
当 S t ro b e为 0时,b u f i f 1门 B F 1驱动输出 D b u s为高阻;否则 M e m D a t a被传输至 D b u s。在第 2
个实例语句中,当 P ro b e为 1时,A d d r为高阻;否则 A b u s的非传输到 A d d r。
第 5章 门电平模型化 41下载
(输出) (输出)
图 5-4 三态门下面是这些门的真值表。表中的某些项是可选项。例如,0 /z表明输出根据数据的信号强度和控制值既可以为 0也可以为 z,信号强度在第 1 0章中讨论。
5.5 上拉、下拉电阻上拉、下拉电阻有:
pullup pulldown
这类门设备没有输入只有输出。上拉电阻将输出置为 1。下拉电阻将输出置为 0。门实例语句形式如下:
p u l l _ g a t e[i n s t a n c e _ n a m e] (O u t p u t A) ;
门实例的端口表只包含 1个输出。例如:
p u l l u p PUP (P w r) ;
此上拉电阻实例名为 P U P,输出 P w r置为高电平 1。
5.6 MOS开关
M O S开关有:
cmos pmos nmos rcmos rpmos rnmos
42 Verilog HDL 硬件描述语言 下载数据 数据控 制 控 制控 制控 制数据 数据这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。
p m o s ( p类型 M O S管 ),n m o s ( n类型 M O S管 ),r n m o s ( r代表电阻 )和 r p m o s开关有一个输出、
一个输入和一个控制输入。实例的基本语法如下:
g a t e _ t y p e[i n s t a n c e _ n a m e] (OutputA,InputB,ControlC) ;
第一个端口为输出,第二个端口是输入,第三个端口是控制输入端。如果 n m o s和 r n m o s开关的控制输入为 0,p m o s和 r p m o s开关的控制为 1,那么开关关闭,即输出为 z;如果控制是 1,
输入数据传输至输出;如图 5 - 5所示。与 n m o s和 p m o s相比,r n m o s和 r p m o s在输入引线和输出引线之间存在高阻抗 (电阻 )。因此当数据从输入传输至输出时,对于 r p m o s和 r m o s,存在数据信号强度衰减。信号强度将在第 1 0章进行讲解。
图 5-5 nmos和 p m o s开关例如:
p m o s P 1 (BigBus,SmallBus,GateControl) ;
r n m o s R N 1 (ControlBit,ReadyBit,Hold) ;
第一个实例为一个实例名为 P 1 的 p m o s开关。开关的输入为 S m a l l B u s,输出为 B i g B u s,控制信号为 G a t e C o n t ro l。
这些开关的真值表如下所示。表中的某些项是可选项。例如,1 /z表明,根据输入和控制信号的强度,输出既可以为 1,也可以为 z。
c m o s ( m o s求补 )和 r c m o s ( c m o s的高阻态版本 )开关有一个数据输出,一个数据输入和两个控制输入。这两个开关实例语句的语法形式如下:
(r)cmos [i n s t a n c e _ n a m e]
(OutputA,InputB,NControl,PControl);
第一个端口为输出端口,第二个端口为输入端口,第三个端口为 n通道控制输入,第四个端口为是 P通道控制输入。 c m o s ( r c m o s )开关行为与带有公共输入、输出的 p m o s
( r p m o s)和 n m o s ( r n m o s )开关组合十分相似。参见图 5 - 6。
第 5章 门电平模型化 43下载开关 开关控制数据 数据控制图 5-6 (r)cmos开关
5.7 双向开关双向开关有:
tran rtran tranif0 rtranif0 tranif1 rtranif1
这些开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后 4个开关能够通过设置合适的控制信号来关闭。 t r a n和 r t r a n开关不能被关闭。
t r a n或 r t r a n ( t r a n 的高阻态版本 )开关实例语句的语法如下:
( r ) t r a n [i n s t a n c e _ n a m e] (SignalA,SignalB) ;
端口表只有两个端口,并且无条件地双向流动,即从 S i g n a l A向 S i g n a l B,反之亦然。
其它双向开关的实例语句的语法如下:
g a t e _ t y p e[i n s t a n c e _ n a m e] (SignalA,SignalB,ControlC) ;
前两个端口是双向端口,即数据从 S i g n a l A流向 S i g n a l B,反之亦然。第三个端口是控制信号。如果对 t r a n i f 0和 t r a n i f 0,C o n t ro l C是 1;对 t r a n i f 1和 r t r a n i f 1,C o n t ro lC是 0;那么禁止双向数据流动。对于 r t r a n,r t r a n i f 0和 r t r a n i f 1,当信号通过开关传输时,信号强度减弱。
5.8 门时延可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:
gate_type [d e l a y] [i n s t a n c e _ n a m e] (t e r m i n a l _ l i s t) ;
时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为 0。
门时延由三类时延值组成:
1) 上升时延
2) 下降时延
3) 截止时延门时延定义可以包含 0个,1个,2个或 3个时延值。下表为不同个数时延值说明条件下,
各种具体的时延取值情形。
无时延 1个时延 ( d ) 2个时延 (d1,d2) 3个时延 (dA,dB,dC)
上升 0 d d 1 d A
下降 0 d d 2 d B
t o _ x 0 d m i n① (d1,d2) min (dA,dB,dC)
截止 0 d min (d1,d2) d C
① m i n 是 m i n i m u m 的缩写词。
注意转换到 x的时延 ( t o _ x )不但被显式地定义,还可以通过其它定义的值决定。
下面是一些具体实例。注意 Verilog HDL模型中的所有时延都以单位时间表示。单位时间与实际时间的关联可以通过 ` t i m e s c a l e编译器指令实现。在下面的实例中,
n o t N 1 (Qbar,Q) ;
因为没有定义时延,门时延为 0。下面的门实例中,
n a n d #6 (Out,In1,In2) ;
44 Verilog HDL 硬件描述语言 下载所有时延均为 6,即上升时延和下降时延都是 6。因为输出决不会是高阻态,截止时延不适用于与非门。转换到 x的时延也是 6。
a n d #(3,5) (Out,In1,In2,In3) ;
在这个实例中,上升时延被定义为 3,下降时延为 5,转换到 x的时延是 3和 5中间的最小值,即
3。在下面的实例中,
n o t i f 1 #(2,8,6) (Dout,Din1,Din2) ;
上升时延为 2,下降时延为 8,截止时延为 6,转换到 x的时延是 2,8和 6中的最小值,即 2。
对多输入门(例如与门和非门)和多输出门 (缓冲门和非门 )总共只能够定义 2个时延
(因为输出决不会是 z)。三态门共有 3个时延,并且上拉、下拉电阻实例门不能有任何时延。
min:typ:max时延形式门延迟也可采用 m i n,t y p,m a x形式定义。形式如下:
minimum,typical,maximum
最小值、典型值和最大值必须是常数表达式。下面是在实例中使用这种形式的实例。
n a n d #(2:3:4,5:6:7) (Pout,Pin1,Pin2) ;
选择使用哪种时延通常作为模拟运行中的一个选项。例如,如果执行最大时延模拟,与非门单元使用上升时延 4和下降时延 7。
程序块也能够定义门时延。程序块的定义和说明在第 1 0章中讨论。
5.9 实例数组当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明 (范围说明也能够在模块实例语句中使用 )。这种情况的门描述语句的语法如下:
g a t e _ t y p e [d e l a y]instance_name [l e f t b o u n d,r i g h t b o u n d]
(l i s t _ o f _ t e r m i n a l _ n a m e s) ;
l e f t b o u n d和 r i g h t b o u n d值是任意的两个常量表达式。左界不必大于右界,并且左、右界两者都不必限定为 0。示例如下。
w i r e [3:0] Out,InA,InB;
.,,
n a n d G a n g [3:0] (Out,InA,InB) ;
带有范围说明的实例语句与下述语句等价:
n a n d
Gang3 (O u t[3],I n A[3],I n B[ 3 ] ),
G a n g 2 (O u t[2],I n A[2],I n B[ 2 ] ),
G a n g 1 (O u t[ 1 ],I n A[1],I n B[ 1 ] ),
Gang0 (O u t[0],I n A[ 0 ],I n B[ 0 ] ) ;
注意定义实例数组时,实例名称是不可选的。
5.10 隐式线网如果在 Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为 1位线网。但是 ` d e f a u l t _ n e t t y p e编译指令能够用于取代缺省线网类型。编译指令格式如下:
第 5章 门电平模型化 45下载
` d e f a u l t _ n e t t y p e n e t _ t y p e
例如:
`default_nettype wand
根据此编译指令,所有后续未说明的线网都是 w a n d类型。
` d e f a u l t _ n e t t y p e编译指令在模块定义外出现,并且在下一个相同编译指令或 ` re s e t a l l编译指令出现前一直有效。
5.11 简单示例下面是图 5 - 7中 4 - 1多路选择电路的门级描述。注意因为实例名是可选的 (除用于实例数组情况外 ),在门实例语句中没有指定实例名。
m o d u l e M U X 4 x 1 (Z,D 0,D 1,D 2,D 3,S 0,S 1) ;
o u t p u t Z;
i n p u t D 0,D 1,D 2,D 3,S 0,S 1;
a n d (T 0,D 0,S 0 b a r,S 1 b a r),
(T 1,D 1,S 0 b a r,S 1),
(T 2,D 2,S 0,S 1 b a r),
(T 3,D 3,S 0,S 1),
n o t (S 0 b a r,S 0),
(S 1 b a r,S 1) ;
o r (Z,T 0,T 1,T 2,T 3,) ;
e n d m o d u l e
如果或门实例由下列的实例代替呢?
o r Z (Z,T 0,T 1,T 2,T 3); //非法的 Verilog HDL表达式。
注意实例名还是 Z,并且连接到实例输出的线网也是 Z。这种情况在 Verilog HDL中是不允许的。在同一模块中,实例名不能与线网名相同。
5.12 2-4解码器举例图 5 - 8中显示的 2 - 4解码器电路的门级描述如下:
m o d u l e D E C 2× 4 (A,B,E n a b l e,Z) ;
i n p u t A,B,E n a b l e;
o u t p u t [0:3] Z ;
w i r e Abar,Bbar;
n o t # ( 1,2 )
V 0 (A b a r,A),
V 1(Bbar,B) ;
n a n d # (4,3)
N 0 (Z[3],Enable,A,B),
N 1 (Z[0],Enable,Abar,Bbar),
N 2 (Z[1],Enable,Abar,B),
N 3 (Z[2],Enable,A,Bbar),
e n d m o d u l e
46 Verilog HDL 硬件描述语言 下载图 5-7 4-1多路选择电路图 5-8 2-4解码器电路
5.13 主从触发器举例图 5 - 9所示的主从 D触发器的门级描述如下:
m o d u l e M S D F F (D,C,Q,Q b a r) ;
i n p u t D,C ;
o u t p u t Q,Q b a r ;
n o t
NT1 (N o t D,D),
NT2 (N o t C,C),
N T 3 (N o t Y,Y) ;
n a n d
N D 1 (D 1,D,C),
N D 2 (D 2,C,N o t D),
N D 3 (Y,D 1,Y b a r),
N D 4 (Y b a r,Y,D 2),
N D 5 (Y 1,Y,N o t C),
N D 6 (Y 2,N o t Y,N o t C),
N D 7 (Q,Q b a r,Y 1),
N D 8 (Q b a r,Y 2,Q) ;
e n d m o d u l e
图 5-9 主从触发器
5.14 奇偶电路图 5 - 1 0所示的 9位奇偶发生器门级模型描述如下:
m o d u l e Parity_9_Bit (D,Even,Odd) ;
i n p u t [0:8] D ;
o u t p u t Even,Odd;
第 5章 门电平模型化 47下载
x o r # ( 5,4 )
XE0 (E 0,D[ 0 ],D[ 1 ] ),
XE1 (E 1,D[ 2 ],D[ 3 ] ),
XE2 (E 2,D[ 4 ],D[ 5 ] ),
XE3 (E 3,D[ 6 ],D[ 7 ] ),
XF0 (F 0,E 0,E 1),
XF1 (F 1,E 2,E 3),
XH0 (H 0,F 0,F 1),
X E V E N (Even,D[ 8 ],H0) ;
n o t #2
X O D D (Odd,Even) ;
e n d m o d u l e
图 5-10 奇偶发生器习题
1,用基本门描述图 5 - 11显示的电路模型。编写一个测试验证程序用于测试电路的输出。
使用所有可能的输入值对电路进行测试。
2,使用基本门描述如图 5 - 1 2所示的优先编码器电路模型。当所有输入为 0时,输出 Va l i d为
0,否则输出为 1。并且为验证优先编码器的模型行为编写测试验证程序。
48 Verilog HDL 硬件描述语言 下载图 5 - 11 A不等于 B的逻辑 图 5-12 优先编码器