![](https://csdnimg.cn/release/download_crawler_static/1732170/bg5.jpg)
a s s i g n #(9:10:11,11:12:13,13:14:15) Z o o m = A > B ? C : 1bz;
时延值通常可以是表达式。
基本门和U D P 中的时延可以通过在实例中指定时延值建模。下面是 5输入基本与门。
a n d #(2,3) A 1( O t , I n 1 , I n 2 , I n 3 , I n 4 , I n 5) ;
已指定输出的上升时延为2个时间单位,下降时延为 3个时间单位。
模型中位于端口边界的时延可使用指定程序块来定义。如下面的半加器模块的例子。
m o d u l e H a l f _ A d d e r(A , B , S , C ) ;
i n p u t A , B ;
o u t p u t S , C ;
s p e c i f y
(A => S) = (1.2,0.8);
(B => S) = (1.0,0.6);
(A => C) = (1.2,1.0);
(B => C) = (1.2,0.6);
e n d s p e c i f y
a s s i g n S = A ^ B;
a s s i g n C = A | B ;
e n d m o d u l e
除在连续赋值语句中对时延建模外,时延还可以用指定程序块建模。是否存在一种从模
块外部指定时延的方法?一种选择是使用 S D F (标准时延格式)和 Ve r i l o g仿真器可能提供的
反标机制。如果需要在 Verilog HDL模型中显式地指定这一信息,一种方法是在 H a l f - A d d e r模
块上创建两个虚模块,每个模块带有不同的时延集。
m o d u l e H a l f _ A d d e r(A , B , S , C ) ;
i n p u t A , B ;
o u t p u t S , C ;
a s s i g n S = A ^ B;
a s s i g n C = A | B;
e n d m o d u l e
module H a _ O p t( A , B , S , C ) ;
i n p u t A , B ;
o u t p u t S , C ;
s p e c i f y
(A => S) = (1.2,0.8);
(B => S) = (1.0,0.6);
(A => C) = (1.2,1.0);
(B => C) = (1.2,0.6);
e n d s p e c i f y
Half_Adder H1 (A , B , S , C ) ;
e n d m o d u l e
m o d u l e H a l f _ P e s s ( A , B , S , C) ;
140 Verilog HDL 硬件描述语言