Verilog门电平模型化
8 门时延
可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:
gate_type [delay][instance_name](terminal_list);
时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为0。
门时延由三类时延值组成:
1) 上升时延
2) 下降时延
3) 截止时延
门时延定义可以包含0个、1个、2个或3个时延值。下表为不同个数时延值说明条件下,各种具体的时延取值情形。
无时延 1个时延(d) 2个时延(d1, d2) 3个时延 (dA, dB, dC)
上升 0 d d1 dA
下降 0 d d2 dB
to_x 0 d min① (d1, d2) min (dA, dB, dC)
截止 0 d min (d1, d2) dC
① min 是minimum 的缩写词。
注意转换到x的时延(to_x)不但被显式地定义,还可以通过其它定义的值决定。
下面是一些具体实例。注意Verilog HDL模型中的所有时延都以单位时间表示。单位时间与实际时间的关联可以通过`timescale编译器指令实现。在下面的实例中,
not N1 (Qbar, Q);
因为没有定义时延,门时延为0。下面的门实例中,
nand #6 (Out, In1, In2);
所有时延均为6,即上升时延和下降时延都是6。因为输出决不会是高阻态,截止时延不适用于与非门。转换到x的时延也是6。
and #(3,5) (Out, In1, In2, In3);
在这个实例中,上升时延被定义为3,下降时延为5,转换到x的时延是3和5中间的最小值,即3。在下面的实例中,
notif1 #(2,8,6) (Dout, Din1, Din2);
上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。
对多输入门(例如与门和非门)和多输出门(缓冲门和非门)总共只能够定义2个时延(因为输出决不会是z)。三态门共有3个时延,并且上拉、下拉电阻实例门不能有任何时延。
min:typ:max时延形式
门延迟也可采用min:typ:max形式定义。形式如下:
minimum: typical: maximum
最小值、典型值和最大值必须是常数表达式。下面是在实例中使用这种形式的实例。
nand #(2:3:4, 5:6:7) (Pout, Pin1, Pin2);
选择使用哪种时延通常作为模拟运行中的一个选项。例如,如果执行最大时延模拟,与非门单元使用上升时延4和下降时延7。
程序块也能够定义门时延。
9 实例数组
当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明(范围说明也能够在模块实例语句中使用)。这种情况的门描述语句的语法如下:
gate_type [delay]instance_name [leftbound:rightbound]
(list_of_terminal_names);
leftbound和rightbound值是任意的两个常量表达式。左界不必大于右界,并且左、右界两者都不必限定为0。示例如下。
wire [3:0] Out, InA, InB;
. . .
nand Gang [3:0] (Out, InA, InB);
带有范围说明的实例语句与下述语句等价:
nand
Gang3 (Out[3], InA[3], InB[3]),
Gang2 (Out[2], InA[2], InB[2]),
Gang1 (Out[1], InA[1], InB[1]),
Gang0 (Out[0], InA[0], InB[0]);
注意定义实例数组时,实例名称是不可选的。
10 隐式线网
如果在Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是
`default_nettype编译指令能够用于取代缺省线网类型。编译指令格式如下:
`default_nettype net_type
例如:
`default_nettype wand
根据此编译指令,所有后续未说明的线网都是wand类型。
`default_nettype编译指令在模块定义外出现,并且在下一个相同编译指令或`resetall编译指令出现前一直有效。
11 简单示例
下面是4-1多路选择电路的门级描述。注意因为实例名是可选的(除用于实例数组情况外),在门实例语句中没有指定实例名。
module MUX4x1 (Z,D0,D1,D2,D3,S0,S1);
output Z;
input D0,D1,D2,D3,S0,S1;
and (T0,D0,S0bar,S1bar),
(T1,D1,S0bar,S1),
(T2,D2,S0,S1bar),
(T3,D3,S0,S1),
not (S0bar,S0),
(S1bar,S1);
or (Z,T0,T1,T2,T3,);
endmodule
如果或门实例由下列的实例代替呢?
or Z (Z,T0,T1,T2,T3); //非法的Verilog HDL表达式。
注意实例名还是Z,并且连接到实例输出的线网也是Z。这种情况在Verilog HDL中是不允许的。在同一模块中,实例名不能与线网名相同。
12 2-4解码器举例
2-4解码器电路的门级描述如下:
module DEC2×4 (A,B,Enable,Z);
input A,B,Enable;
output [0:3] Z;
wire Abar, Bbar;
not # (1,2)
V0 (Abar,A),
V1(Bbar, B);
nand # (4,3)
N0 (Z[3], Enable, A,B),
N1 (Z[0], Enable, Abar,Bbar),
N2 (Z[1], Enable, Abar,B),
N3 (Z[2], Enable, A,Bbar),
endmodule
13 主从触发器举例
主从D触发器的门级描述如下:
module MSDFF (D,C,Q,Qbar);
input D,C;
output Q,Qbar;
not
NT1 (NotD,D),
NT2 (NotC,C),
NT3 (NotY,Y);
nand
ND1 (D1,D,C),
ND2 (D2,C,NotD),
ND3 (Y,D1,Ybar),
ND4 (Ybar,Y,D2),
ND5 (Y1,Y,NotC),
ND6 (Y2,NotY,NotC),
ND7 (Q,Qbar,Y1),
ND8 (Qbar,Y2,Q);
endmodule
14 奇偶电路
9位奇偶发生器门级模型描述如下:
module Parity_9_Bit (D, Even,Odd);
input [0:8] D;
output Even, Odd;
xor # (5,4)
XE0 (E0,D[0],D[1]),
XE1 (E1,D[2],D[3]),
XE2 (E2,D[4],D[5]),
XE3 (E3,D[6],D[7]),
XF0 (F0,E0,E1),
XF1 (F1,E2,E3),
XH0 (H0,F0,F1),
XEVEN (Even, D[8], H0);
not #2
XODD (Odd, Even);
endmodule
VerilogHDL 门级电路建模 硬件描述 门电平模型化 相关文章:
- VHDL:中文版Verilog HDL简明教程:第3章 Verilog语言要素(06-06)
- VHDL:中文版Verilog HDL简明教程:第2章 HDL指南(06-06)
- VHDL:中文版Verilog HDL简明教程:第1章 简介(06-06)
- VHDL:中文版Verilog HDL简明教程:第3章 Verilog语言要素(续)(06-06)
- 基于Verilog应用(06-06)
- FPGA系统设计原则和技巧之:FPGA系统设计的3个基本原则(06-05)