📄 ec66 中国电子技术信息网 - 中文版verilog hdl简明教程(5).htm
字号:
<TD height=20><FONT color=#ffffff>文章类别:</FONT></TD></TR>
<TR>
<TD height=20>
<P align=center><FONT color=#f3f3f3>语言编程</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>文章来源:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>未知</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>文章作者:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>未知</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>关 键 字:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>Verilog HDL</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>今天阅读:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>2</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>总共阅读:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>5962</FONT></P></TD></TR>
<TR>
<TD height=20><FONT color=#ffffff>加入日期:</FONT></TD></TR>
<TR>
<TD height=20><FONT color=#f3f3f3>
<P align=center>2003-9-4</FONT></P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 width=150 border=0>
<TBODY>
<TR>
<TD height=20><FONT color=#ffffff>相关文章:</FONT> </TD></TR>
<TR>
<TD height=20>
<DIV align=center><A
href="http://www.ec66.com/article/list.asp?indexid=604"><FONT
color=#ffffff>Verilog HDL网上资源</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=602"><FONT
color=#ffffff>中文版Verilog HDL简明教程(4)</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=601"><FONT
color=#ffffff>中文版Verilog HDL简明教程(3)</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=600"><FONT
color=#ffffff>中文版Verilog
HDL简明教程(1、2)</FONT></A><BR></DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 width=150 border=0>
<TBODY>
<TR>
<TD height=20></TD></TR>
<TR>
<TD height=20>
<P align=center><FONT color=#ffffff>==关于文章版权==</FONT></P></TD></TR>
<TR>
<TD height=20><FONT
color=#ffffff><BR>“本站”本站站主原创文章,未经本人(帝国老手/aoe)许可其他媒体一律不得转载。<BR><BR>“本站整理”本站站主根据个人见解及他人经验总结整理的文章,其他媒体转载必须标明出处为我站。<BR><BR>“某单位或个人”全文转载来自网络上的文章,其他媒体转载与我站无关。<BR><BR>“未知”(1)来自网络,由于来源混乱,无从考证作者,其他媒体转载与我站无关。<BR><BR>“未知”(2)其文章也是本站站主原创的,只所以标注“未知”,主要是因为引用文字过多或其他原因。建议其他媒体转载标明出处为我站。<BR><BR>我站版权请标注:“www.EC66.com”或“中国电子技术信息网”字样。</FONT></TD></TR>
<TR>
<TD height=20></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top width=600 height=240>
<TABLE height=20 cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD bgColor=#5b9595> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD bgColor=#aecece height=20>
<DIV align=center><FONT color=#0a52d8><B>中文版Verilog
HDL简明教程(5)</B></FONT> </DIV></TD></TR>
<TR>
<TD width=600>〖文章转载或出处〗≡中国电子技术信息网≡ 网址:www.EC66.com</TD></TR>
<TR>
<TD
width=600>中文版Verilog HDL简明教程:第5章 门电平模型<BR><BR> <BR> 本章讲述Verilog HDL为门级电路建模的能力,包括可以使用的内置基本门和如何使用它们来进行硬件描述。<BR><BR>5.1 内置基本门<BR><BR> Verilog HDL中提供下列内置基本门:<BR> 1) 多输入门:<BR><BR>and, nand,or, nor,xor,xnor<BR><BR> 2) 多输出门:<BR><BR>buf, not<BR><BR> 3) 三态门:<BR><BR>bufif0, bufif1, notif0,notif1<BR><BR> 4) 上拉、下拉电阻:<BR><BR>pullup, pulldown<BR><BR> 5) MOS开关:<BR><BR>cmos, nmos, pmos, rcmos, rnmos, rpmos<BR><BR> 6) 双向开关:<BR><BR>tran,tranif0, tranif1, rtran, rtranif0, rtranif1<BR><BR> 门级逻辑设计描述中可使用具体的门实例语句。下面是简单的门实例语句的格式。<BR><BR>gate_type[instance_name] (term1, term2, . . . ,termN);<BR><BR>注意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表示与门的输入/输出端口相连的线网或寄存器。<BR><BR> 同一门类型的多个实例能够在一个结构形式中定义。语法如下:<BR><BR>gate_type<BR>[instance_name1] (term11, term12, . . .,term1N),<BR>[instance_name2] (term21, term22, . . .,term2N),<BR>. . .<BR>[instance_nameM] (termM1, termM2, . . .,termMN);<BR><BR>5.2 多输入门<BR><BR> 内置的多输入门如下:<BR><BR>and nand nor or xor xnor<BR><BR> 这些逻辑门只有单个输出,1个或多个输入。多输入门实例语句的语法如下:<BR><BR>multiple_input_gate_type<BR>[instance_name] (OutputA, Input1, Input2, . . .,InputN);<BR><BR>第一个端口是输出,其它端口是输入。<BR><BR> 下面是几个具体实例。<BR><BR>and A1(Out1, In1, In2);<BR><BR>and RBX (Sty, Rib, Bro, Qit, Fix);<BR><BR>xor (Bar, Bud[0],Bud[1], Bud[2]),<BR>(Car, Cut[0], Cut[1]),<BR>(Sar, Sut[2], Sut[1], Sut[0], Sut[3]);<BR><BR> 第一个门实例语句是单元名为A1、输出为Out1、并带有两个输入In1和In2的两输入与门。第二个门实例语句是四输入与门,单元名为RBX,输出为Sty,4个输入为Rib、Bro、Qit和Fix。第三个门实例语句是异或门的具体实例,没有单元名。它的输出是Bar,三个输入分别为Bud[0]、Bud[1]和Bud[2]。同时,这一个实例语句中还有两个相同类型的单元。<BR><BR>5.3 多输出门<BR><BR> 多输出门有:<BR><BR>buf not<BR><BR> 这些门都只有单个输入,一个或多个输出。这些门的实例语句的基本语法如下:<BR><BR>multiple_output_gate_type<BR>[instance_name] (Out1, Out2, . . . OutN ,InputA);<BR>最后的端口是输入端口,其余的所有端口为输出端口。<BR> 例如:<BR><BR>buf B1 (Fan [0],Fan [1],Fan [2],Fan [3],Clk);<BR>not N1 (PhA,PhB,Ready);<BR><BR>在第一个门实例语句中,Clk是缓冲门的输入。门B1有4个输出:Fan[0]到Fan[3]。在第二个门实例语句中,Ready是非门的唯一输入端口。门N1有两个输出:PhA和PhB。<BR><BR>5.4 三态门<BR><BR> 三态门有:<BR><BR>bufif0 bufif1 notif0 notif1<BR><BR>这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。三态门实例语句的基本语法如下:<BR><BR>tristate_gate[instance_name] (OutputA, InputB,ControlC);<BR><BR> 第一个端口OutputA是输出端口,第二个端口InputB是数据输入,ControlC是控制输入。根据控制输入,输出可被驱动到高阻状态,即值z。对于bufif0,若通过控制输入为1,则输出为z;否则数据被传输至输出端。对于bufif1,若控制输入为0,则输出为z。对于notif0,如果控制输出为1,那么输出为z;否则输入数据值的非传输到输出端。对于notif1,若控制输入为0;则输出为z。<BR> 例如:<BR><BR>bufif1 BF1 (Dbus,MemData,Strobe);<BR>notif0 NT2 (Addr, Abus, Probe);<BR>当Strobe为0时,bufif1门BF1驱动输出Dbus为高阻;否则MemData被传输至Dbus。在第2个实例语句中,当Probe为1时,Addr为高阻;否则Abus的非传输到Addr。<BR><BR>5.5 上拉、下拉电阻<BR><BR> 上拉、下拉电阻有:<BR><BR>pullup pulldown<BR><BR> 这类门设备没有输入只有输出。上拉电阻将输出置为1。下拉电阻将输出置为0。门实例语句形式如下:<BR><BR>pull_gate[instance_name] (OutputA);<BR>门实例的端口表只包含1个输出。例如:<BR>pullup PUP (Pwr);<BR>此上拉电阻实例名为PUP,输出Pwr置为高电平1。<BR><BR>5.6 MOS开关<BR><BR> MOS开关有:<BR><BR>cmos pmos nmos rcmos rpmos rnmos<BR><BR> 这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。<BR>pmos(p类型MOS管)、nmos(n类型MOS管),rnmos(r代表电阻)和rpmos开关有一个输出、一个输入和一个控制输入。实例的基本语法如下:<BR><BR>gate_type[instance_name] (OutputA, InputB, ControlC);<BR>第一个端口为输出,第二个端口是输入,第三个端口是控制输入端。如果nmos和rnmos开关的控制输入为0,pmos和rpmos开关的控制为1,那么开关关闭,即输出为z;如果控制是1,输入数据传输至输出;如图5-5所示。与nmos和pmos相比,rnmos和rpmos在输入引线和输出引线之间存在高阻抗(电阻)。因此当数据从输入传输至输出时,对于rpmos和rmos,存在数据信号强度衰减。信号强度将在第10章进行讲解。<BR> 例如:<BR><BR>pmos P1 (BigBus, SmallBus, GateControl);<BR>rnmos RN1 (ControlBit, ReadyBit, Hold);<BR><BR> 第一个实例为一个实例名为P1 的pmos开关。开关的输入为SmallBus,输出为BigBus,控制信号为GateControl。<BR> 这两个开关实例语句的语法形式如下:<BR><BR>(r)cmos [instance_name]<BR>(OutputA, InputB, Ncontrol, PControl);<BR>第一个端口为输出端口,第二个端口为输入端口,第三个端口为n通道控制输入,第四个端口为是P通道控制输入。cmos(rcmos)开关行为与带有公共输入、输出的pmos(rpmos)和nmos(rnmos)开关组合十分相似。<BR><BR>5.7 双向开关<BR><BR> 双向开关有:<BR><BR>tran rtran tranif0 rtranif0 tranif1 rtranif1<BR><BR>这些开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后4个开关能够通过设置合适的控制信号来关闭。tran和rtran开关不能被关闭。<BR> tran或rtran(tran 的高阻态版本)开关实例语句的语法如下:<BR><BR>(r)tran [instance_name] (SignalA, SignalB );<BR><BR>端口表只有两个端口,并且无条件地双向流动,即从SignalA向SignalB,反之亦然。<BR> 其它双向开关的实例语句的语法如下:<BR><BR>gate_type[instance_name] (SignalA, SignalB, ControlC);<BR><BR>前两个端口是双向端口,即数据从SignalA流向SignalB,反之亦然。第三个端口是控制信号。如果对tranif0和tranif0,ControlC是1;对tranif1和rtranif1,Controlc是0;那么禁止双向数据流动。对于rtran、rtranif0和rtranif1,当信号通过开关传输时,信号强度减弱。<BR><BR>5.8 门时延<BR><BR> 可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:<BR><BR>gate_type [delay][instance_name](terminal_list);<BR><BR>时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为0。<BR> 门时延由三类时延值组成:<BR> 1) 上升时延<BR> 2) 下降时延<BR> 3) 截止时延<BR> 门时延定义可以包含0个、1个、2个或3个时延值。下表为不同个数时延值说明条件下,各种具体的时延取值情形。<BR><BR>无时延 1个时延(d) 2个时延(d1, d2) 3个时延 (dA, dB, dC)<BR>上升 0 d d1 dA<BR>下降 0 d d2 dB<BR>to_x 0 d min① (d1, d2) min (dA, dB, dC)<BR>截止 0 d min (d1, d2) dC<BR>① min 是minimum 的缩写词。<BR> 注意转换到x的时延(to_x)不但被显式地定义,还可以通过其它定义的值决定。<BR> 下面是一些具体实例。注意Verilog HDL模型中的所有时延都以单位时间表示。单位时间与实际时间的关联可以通过`timescale编译器指令实现。在下面的实例中,<BR><BR>not N1 (Qbar, Q);<BR><BR>因为没有定义时延,门时延为0。下面的门实例中,<BR><BR>nand #6 (Out, In1, In2);<BR><BR>所有时延均为6,即上升时延和下降时延都是6。因为输出决不会是高阻态,截止时延不适用于与非门。转换到x的时延也是6。<BR><BR>and #(3,5) (Out, In1, In2, In3);<BR><BR>在这个实例中,上升时延被定义为3,下降时延为5,转换到x的时延是3和5中间的最小值,即3。在下面的实例中,<BR><BR>notif1 #(2,8,6) (Dout, Din1, Din2);<BR><BR>上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。<BR> 对多输入门(例如与门和非门)和多输出门(缓冲门和非门)总共只能够定义2个时延(因为输出决不会是z)。三态门共有3个时延,并且上拉、下拉电阻实例门不能有任何时延。<BR><BR>min:typ:max时延形式<BR><BR>门延迟也可采用min:typ:max形式定义。形式如下:<BR><BR>minimum: typical: maximum<BR><BR> 最小值、典型值和最大值必须是常数表达式。下面是在实例中使用这种形式的实例。<BR><BR>nand #(2:3:4, 5:6:7) (Pout, Pin1, Pin2);<BR><BR>选择使用哪种时延通常作为模拟运行中的一个选项。例如,如果执行最大时延模拟,与非门单元使用上升时延4和下降时延7。<BR> 程序块也能够定义门时延。<BR><BR>5.9 实例数组<BR><BR> 当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明(范围说明也能够在模块实例语句中使用)。这种情况的门描述语句的语法如下:<BR><BR>gate_type [delay]instance_name [leftbound:rightbound]<BR>(list_of_terminal_names);<BR>leftbound和rightbound值是任意的两个常量表达式。左界不必大于右界,并且左、右界两者都不必限定为0。示例如下。<BR>wire [3:0] Out, InA, InB;<BR>. . .<BR>nand Gang [3:0] (Out, InA, InB);<BR>带有范围说明的实例语句与下述语句等价:<BR>nand<BR>Gang3 (Out[3], InA[3], InB[3]),<BR>Gang2 (Out[2], InA[2], InB[2]),<BR>Gang1 (Out[1], InA[1], InB[1]),<BR>Gang0 (Out[0], InA[0], InB[0]);<BR>注意定义实例数组时,实例名称是不可选的。<BR><BR>5.10 隐式线网<BR><BR> 如果在Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是<BR><BR>`default_nettype编译指令能够用于取代缺省线网类型。编译指令格式如下:<BR>`default_nettype net_type<BR>例如:<BR>`default_nettype wand<BR>根据此编译指令,所有后续未说明的线网都是wand类型。<BR>`default_nettype编译指令在模块定义外出现,并且在下一个相同编译指令或`resetall编译指令出现前一直有效。<BR><BR>5.11 简单示例<BR><BR> 下面是4-1多路选择电路的门级描述。注意因为实例名是可选的(除用于实例数组情况外),在门实例语句中没有指定实例名。<BR><BR>module MUX4x1 (Z,D0,D1,D2,D3,S0,S1);<BR>output Z;<BR>input D0,D1,D2,D3,S0,S1;<BR><BR>and (T0,D0,S0bar,S1bar),<BR>(T1,D1,S0bar,S1),<BR>(T2,D2,S0,S1bar),<BR>(T3,D3,S0,S1),<BR><BR>not (S0bar,S0),<BR>(S1bar,S1);<BR><BR>or (Z,T0,T1,T2,T3,);<BR>endmodule<BR>如果或门实例由下列的实例代替呢?<BR>or Z (Z,T0,T1,T2,T3); //非法的Verilog HDL表达式。<BR> 注意实例名还是Z,并且连接到实例输出的线网也是Z。这种情况在Verilog HDL中是不允许的。在同一模块中,实例名不能与线网名相同。<BR><BR>5.12 2-4解码器举例<BR><BR> 2-4解码器电路的门级描述如下:<BR><BR>module DEC2×4 (A,B,Enable,Z);<BR>input A,B,Enable;<BR>output [0:3] Z;<BR>wire Abar, Bbar;<BR><BR>not # (1,2)<BR>V0 (Abar,A),<BR>V1(Bbar, B);<BR><BR>nand # (4,3)<BR>N0 (Z[3], Enable, A,B),<BR>N1 (Z[0], Enable, Abar,Bbar),<BR>N2 (Z[1], Enable, Abar,B),<BR>N3 (Z[2], Enable, A,Bbar),<BR>endmodule<BR><BR>5.13 主从触发器举例<BR><BR> 主从D触发器的门级描述如下:<BR><BR>module MSDFF (D,C,Q,Qbar);<BR>input D,C;<BR>output Q,Qbar;<BR><BR>not <BR>NT1 (NotD,D),<BR>NT2 (NotC,C),<BR>NT3 (NotY,Y);<BR><BR>nand<BR>ND1 (D1,D,C),<BR>ND2 (D2,C,NotD),<BR>ND3 (Y,D1,Ybar),<BR>ND4 (Ybar,Y,D2),<BR>ND5 (Y1,Y,NotC),<BR>ND6 (Y2,NotY,NotC),<BR>ND7 (Q,Qbar,Y1),<BR>ND8 (Qbar,Y2,Q);<BR>endmodule<BR><BR>5.14 奇偶电路<BR><BR> 9位奇偶发生器门级模型描述如下:<BR><BR>module Parity_9_Bit (D, Even,Odd);<BR>input [0:8] D;<BR>output Even, Odd;<BR>xor # (5,4)<BR>XE0 (E0,D[0],D[1]),<BR>XE1 (E1,D[2],D[3]),<BR>XE2 (E2,D[4],D[5]),<BR>XE3 (E3,D[6],D[7]),<BR>XF0 (F0,E0,E1),<BR>XF1 (F1,E2,E3),<BR>XH0 (H0,F0,F1),<BR>XEVEN (Even, D[8], H0);<BR>not #2<BR>XODD (Odd, Even);<BR>endmodule<BR><BR>习题<BR><BR>1. 用基本门描述图5-11显示的电路模型。编写一个测试验证程序用于测试电路的输出。使用所有可能的输入值对电路进行测试。<BR>2. 使用基本门描述如图5-12所示的优先编码器电路模型。当所有输入为0时,输出Valid为0,否则输出为1。并且为验证优先编码器的模型行为编写测试验证程序。</TD></TR>
<TR>
<TD width=600></TD></TR>
<TR>
<TD width=600><B>郑重声明</B><BR>
近年来我站数百篇“原创文章”被一些媒体肆意转载,不但不标明出自“中国电子技术信息网”,而且把相关字眼删除!这是无视技术价值的盗窃行为,是对技术人员辛勤劳动的蔑视,我对此种行为表示强烈的谴责。<BR>
“本是同根生,相煎何太急”,考虑到我们做技术的都是同门兄弟,对以前的盗窃行为不再追究,今后再有此类事件,最低处理限度是“明示于天下”。在这里向转载过又标注了出处的兄弟媒体表示崇高的敬意!<BR>
兄弟网站如果引用本站“原创文章”,请首先经本人许可,并标注“www.EC66.com”或“中国电子技术信息网”字样。<BR>
欢迎个人下载使用!</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR></DIV>
<DIV align=center>
<P
align=center>本站所载文章力求原创,部分资料转自网上,转载文章均注明出处。<BR>假如您认为某些文章侵犯了您的权益,请告知我们,我们将在最短的时间内删除有关文章。<BR>如果您对文章内容有任何心得或异议,请到<A
href="http://www.ecbbs.com/" target=_blank><FONT
color=red>技术论坛</FONT></A>发表高见!</P>
<P align=center>中国电子技术信息网 文章管理系统由:Aoe 制作<BR>Copyright (C) 2001-2006 EC66.COM All
Rights Reserved</P></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -