与门(and)和或门(or):
与门、或门都有一个标量输出端和多个标量输入端。门的端口列表中的第一个端口必是输出端口,其后为输入端口。当任意一个输入端口的值发生变化时,输出端的值立即重新计算。
verilog中可以使用的属于与/或门类的术语包括:
and nand or nor xor xnor
例:与门/或门的实例引用
wire OUT,IN1,IN2;
and a1(OUT,IN1,IN2); //基本门的实例引用
nand na1_3inp(OUT,IN1,IN2,IN3); //输入端超过两个,三输入与非门
and (OUT,IN1,IN2); //合法的门实例引用,不给实例命名
缓冲器/非门
与and/or门相反,buf/not门具有一个标量输入和多个标量输出。端口列表中的最后一个终端连接至输入端口,其他终端连接至输出端口。对于多个输出端的buf/not门,所有输出端的值都是相同的。
verilog提供了两种基本的门: buf not
在verilog中可以实例引用这些门,注意:buf和not门可以具有多个输出端口,但只能具有一个输入端口,这个输入端口必须是实例端口列表的最后一个。例:
buf b1(OUT1,IN); //基本门的实例引用
not n1(OUT1,IN);
buf b1_2out(OUT1,OUT2,IN); //输出端多于两个
not (OUT1,IN); //实例引用门时,不给实例命名
带控制端的缓冲器/非门(bufif/notif)
bufif1 bufif0 notif1 notif0
这四类门只有在控制信号有效的情况下才能传递数据;如果控制信号无效,则输出为高阻抗Z。
bufif1 b0(out,in,ctrl);
在控制信号有效的情况下,这些门才能传递信号。在某些情况下,例如当一个信号由多个驱动源驱动时,这样设计驱动源:让它们的控制信号的有效时间相互错开,从而避免一条信号线同时被两个源驱动,这时就需要用带控制端的缓冲器/非门来搭建电路。
门延迟
Verilog中允许用户通过门延迟来说明逻辑电路中的延迟,此外用户还可以指定端到端的延迟。
在Verilog门级原语中,有三种从输入到输出的延迟。
1 上升延迟:在门的输入发生变化的情况下,门的输出从0,x,z变化到1所需的时间成为上升延迟。
2 下降延迟:下降延迟是指门的输出从1,x,z变化到0所需的时间。
3 关断延迟:门的输出从0,1,x变化为高阻Z所需的时间。
另外,如果值变化到不确定值x,则所需的时间可以看成是以上三种延迟值中最小的那个。
Verilog中有三种不同的方法来说明门的延迟。如果用户只确定了一个延迟值,那么所有类型的延迟都是用这个延迟值,如果用户指定了两个延迟值,则他们分别代表上升延迟和下降延迟,两者中小者为关断延迟,如果用户指定了三个延迟值,则他们分别代表上升延迟、下降延迟和关断延迟。如果为制定延迟值,那么默认延迟值为0.
延迟声明的例子
and #(3,4,5) b1 (out,in,control); //上升延迟为3,下降延迟为4,关断延迟为5
最小/典型/最大延迟
Verilog中,用户除可以指定上面所述的三种类型的延迟以外,对每种类型的延迟还可以指定其最小值、最大值和典型值。