广告

您的位置 首页 模拟

Verilog门电平模型化

下面讲述 Verilog HDL为门级电路建模的能力,包括可以使用的内置基本门和如何使用它们来进行硬件描述。

下面叙述 Verilog HDL为门级电路建模的才能,包括可以运用的内置根本门和怎么运用它们来进行硬件描绘

1 内置根本门

   Verilog HDL中供给下列内置根本门:
   1) 多输入门:

and, nand,or, nor,xor,xnor

   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, rtranif1

   门级逻辑设计描绘中可运用详细的门实例句子。下面是简略的门实例句子的格局。

gate_type[instance_name] (term1, term2, . . . ,termN);

留意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表明与门的输入/输出端口相连的线网或寄存器。

   同一门类型的多个实例可以在一个结构方式中界说。语法如下:

gate_type
[instance_name1] (term11, term12, . . .,term1N),
[instance_name2] (term21, term22, . . .,term2N),
. . .
[instance_nameM] (termM1, termM2, . . .,termMN);

2 多输入门

   内置的多输入门如下:

and nand nor or xor xnor

   这些逻辑门只要单个输出,1个或多个输入。多输入门实例句子的语法如下:

multiple_input_gate_type
[instance_name] (OutputA, Input1, Input2, . . .,InputN);

第一个端口是输出,其它端口是输入。

   下面是几个详细实例。

and A1(Out1, In1, In2);

and RBX (Sty, Rib, Bro, Qit, Fix);

xor (Bar, Bud[0],Bud[1], Bud[2]),
(Car, Cut[0], Cut[1]),
(Sar, Sut[2], Sut[1], Sut[0], Sut[3]);

   第一个门实例句子是单元名为A1、输出为Out1、并带有两个输入In1和In2的两输入与门。第二个门实例句子是四输入与门,单元名为RBX,输出为Sty,4个输入为Rib、Bro、Qit和Fix。第三个门实例句子是异或门的详细实例,没有单元名。它的输出是Bar,三个输入分别为Bud[0]、Bud[1]和Bud[2]。一起,这一个实例句子中还有两个相同类型的单元。

3 多输出门

   多输出门有:

buf not

   这些门都只要单个输入,一个或多个输出。这些门的实例句子的根本语法如下:

multiple_output_gate_type
[instance_name] (Out1, Out2, . . . OutN ,InputA);
最终的端口是输入端口,其他的一切端口为输出端口。
   例如:

buf B1 (Fan [0],Fan [1],Fan [2],Fan [3],Clk);
not N1 (PhA,PhB,Ready);

在第一个门实例句子中,Clk是缓冲门的输入。门B1有4个输出:Fan[0]到Fan[3]。在第二个门实例句子中,Ready是非门的仅有输入端口。门N1有两个输出:PhA和PhB。

4 三态门

   三态门有:

bufif0 bufif1 notif0 notif1

这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个操控输入。三态门实例句子的根本语法如下:

tristate_gate[instance_name] (OutputA, InputB,ControlC);

   第一个端口OutputA是输出端口,第二个端口InputB是数据输入,ControlC是操控输入。依据操控输入,输出可被驱动到高阻状况,即值z。关于bufif0,若经过操控输入为1,则输出为z;不然数据被传输至输出端。关于bufif1,若操控输入为0,则输出为z。关于notif0,假如操控输出为1,那么输出为z;不然输入数据值的非传输到输出端。关于notif1,若操控输入为0;则输出为z。
   例如:

bufif1 BF1 (Dbus,MemData,Strobe);
notif0 NT2 (Addr, Abus, Probe);
当Strobe为0时,bufif1门BF1驱动输出Dbus为高阻;不然MemData被传输至Dbus。在第2个实例句子中,当Probe为1时,Addr为高阻;不然Abus的非传输到Addr。

5 上拉、下拉电阻

   上拉、下拉电阻有:

pullup pulldown

   这类门设备没有输入只要输出。上拉电阻将输出置为1。下拉电阻将输出置为0。门实例句子方式如下:

pull_gate[instance_name] (OutputA);
门实例的端口表只包括1个输出。例如:
pullup PUP (Pwr);
此上拉电阻实例名为PUP,输出Pwr置为高电平1。

6 MOS开关

   MOS开关有:

cmos pmos nmos rcmos rpmos rnmos

   这类门用来为单向开关建模。即数据从输入流向输出,而且可以经过设置适宜的操控输入封闭数据流。
pmos(p类型MOS管)、nmos(n类型MOS管),rnmos(r代表电阻)和rpmos开关有一个输出、一个输入和一个操控输入。实例的根本语法如下:

gate_type[instance_name] (OutputA, InputB, ControlC);
第一个端口为输出,第二个端口是输入,第三个端口是操控输入端。假如nmos和rnmos开关的操控输入为0,pmos和rpmos开关的操控为1,那么开关封闭,即输出为z;假如操控是1,输入数据传输至输出;如图5-5所示。与nmos和pmos比较,rnmos和rpmos在输入引线和输出引线之间存在高阻抗(电阻)。因而当数据从输入传输至输出时,关于rpmos和rmos,存在数据信号强度衰减。信号强度将在第10章进行解说。
   例如:

pmos P1 (BigBus, SmallBus, GateControl);
rnmos RN1 (ControlBit, ReadyBit, Hold);

   第一个实例为一个实例名为P1 的pmos开关。开关的输入为SmallBus,输出为BigBus,操控信号为GateControl。
   这两个开关实例句子的语法方式如下:

(r)cmos [instance_name]
(OutputA, InputB, Ncontrol, PControl);
第一个端口为输出端口,第二个端口为输入端口,第三个端口为n通道操控输入,第四个端口为是P通道操控输入。cmos(rcmos)开关行为与带有公共输入、输出的pmos(rpmos)和nmos(rnmos)开关组合十分相似。

7 双向开关

   双向开关有:

tran rtran tranif0 rtranif0 tranif1 rtranif1

这些开关是双向的,即数据可以双向活动,而且当数据在开关中传达时没有延时。后4个开关可以经过设置适宜的操控信号来封闭。tran和rtran开关不能被封闭。
   tran或rtran(tran 的高阻态版别)开关实例句子的语法如下:

(r)tran [instance_name] (SignalA, SignalB );

端口表只要两个端口,而且无条件地双向活动,即从SignalA向SignalB,反之亦然。
   其它双向开关的实例句子的语法如下:

gate_type[instance_name] (SignalA, SignalB, ControlC);

前两个端口是双向端口,即数据从SignalA流向SignalB,反之亦然。第三个端口是操控信号。假如对tranif0和tranif0,ControlC是1;对tranif1和rtranif1,Controlc是0;那么制止双向数据活动。关于rtran、rtranif0和rtranif1,当信号经过开关传输时,信号强度削弱。

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/192745.html

广告

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部