第4章-Verilog-HDL的描述方式_第1页
第4章-Verilog-HDL的描述方式_第2页
第4章-Verilog-HDL的描述方式_第3页
第4章-Verilog-HDL的描述方式_第4页
第4章-Verilog-HDL的描述方式_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上节回顾块语句语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。在VerilogHDL中有两类语句块,即:

顺序语句块(begin...end):语句块中的语句按给定次序顺序执行。

并行语句块(fork...join):语句块中的语句并行执行。语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符的语句块可被引用编译预处理Verilog-HDL语言中有几种特殊命令,编译系统先对这些特殊命令进行“预处理”,然后将预处理的结果和源程序一起进行通常的编译处理。这些预处理命令:以重音符号ˋ开头行末尾不加分号常用预处理命令:

`include/`define,`undef/`timescale/`ifdef,`else,`endif/`default_nettype`resetall/

`unconnected_drive,`nounconnected_drive`celldefine,`endcelldefine1)编写一模块test1,生成如下波形2)编写一模块test2,生成一个周期为20的时钟信号VerilogHDL的描述方式结构描述

12行为描述3混合描述4数据流描述一、结构描述在Verilog程序中可通过如下方式描述电路的结构◆调用Verilog内置门元件(门级结构描述)◆调用开关级元件(晶体管级结构描述)◆用户自定义元件UDP(也在门级)1、门级结构描述moduleaddbit(a,b,ci,sum,co);inputa,b,ci;outputsum,co;wirea,b,ci,sum,co,n1,n2,n3;

xor(n1,a,b,);xor(sum,n1,ci);and(n2,a,b);and(n3,n1,ci);or(co,n2,n3);endmodule

由一些Verilog原型列出结构化的元件并按网表连接1.1内置的基本门VerilogHDL为门级电路建模的能力提供下列内置基本门:多输入门:and,nand,or,nor,xor,xnor

多输出门:buf,not

三态门:bufif0,bufif1,notif0,notif1

上拉、下拉电阻:pullup,pulldownMOS开关:cmos,nmos,pmos,rcmos,rnmos,rpmos

双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1门级结构建模语法语句形式gate_type[instance_name](term1,term2,...,termN);注意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表示与门的输入/输出端口相连的线网或寄存器.同一门类型的多个实例能够在一个结构形式中定义gate_type[instance_name1](term1,term2,...,termN),

[instance_name2](term1,term2,...,termN),

[instance_name3](term1,term2,...,termN),

[instance_name4](term1,term2,...,termN);1.2

多输入门内置的多输入门包括:andnandnororxor

xnor这些逻辑门只有单个输出,1个或多个输入。门实例语句的语法如:multi_input_gate_type[instance_name](OutputA,Input1,Input2,...,InputN);第一个端口是输出,其它端口是输入input1多输入门input2inputNOutputA多输入门语法举例andA1(Out1,In1,In2);andRBX(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]);多输入门的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXX多输入门的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XX多输入门的真值表(三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXX1.3多输出门多输出门有:bufnot这些门都只有单个输入,一个或多个输出。多输出门的实例语句的基本语法如:multi_output_gate_type[instance_name](Out1,Out2,...OutN,InputA);多输出门output1output2outputNInputA多输出门语法举例buf

B1(Fan[0],Fan[1],Fan[2],Fan[3],Clk);notN1(PhA,PhB,Ready);真值表01XZbuf01XXnot10XX1.4三态门三态门有:bufif0bufif1notif0notif1这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。三态门实例语句的基本语法如下:

tristate_gate[instance_name](OutputA,InputB,ControlC);第一个端口OutputA是输出端口,第二个端口InputB是数据输入,ControlC是控制输入。inputAoutputAControlC三态门三态门的真值表bufif0控制信号01XZ数据输入00Z0/z0/z11Z1/z1/zXXZXxZXZXxbufif1控制信号01XZ数据输入0Z00/z0/z1Z11/z1/zXZXXxZZXXxnotif0控制信号01XZ数据输入01Z1/z1/z10Z0/z0/zXXZXxZXZXxnotif1控制信号01XZ数据输入0Z11/z1/z1Z00/z0/zXZXXxZZXXx门级结构建模例题module

flop(data,clock,clear,q,qb);input

data,clock,clear;output

q,qb;nand

#10 nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand

#9nd3(c,a,d),nd7(q,e,qb);not

#10 iv1(ndata,data),iv2(nclock,clock);endmodule课堂练习用verilog的内置基本门结构建模以下电路参考答案moduleParity_9_Bit(D,Even,Odd);input[0:8]D;outputEven,Odd;xor

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);notXODD(Odd,Even);endmodule门级描述的特点:1.一个逻辑网络是由许多逻辑门和开关所组成,因此用逻辑门的模型来描述逻辑网络是最直观的。2.不易得出模块逻辑功能。1.5其他门级模型其他门级模型包括上拉、下拉电阻:pullup,pulldownMOS开关:cmos,nmos,pmos,rcmos,rnmos,rpmos

双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1上拉、下拉电阻pullup,pulldown,这类门设备没有输入只有输出。上拉电阻将输出置为1。下拉电阻将输出置为0。门实例的端口表只包含1个输出。例如:pullupPUP(SCL);此上拉电阻实例名为PUP,输出Pwr置为高电平1。MOS开关这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。pmos(p类型MOS管)、nmos(n类型MOS管),rnmos(r代表电阻)和rpmos开关有一个输出、一个输入和一个控制输入,例如:rnmosRN1(ControlBit,ReadyBit,Hold);cmos(mos互补)和rcmos(cmos的高阻态版本)开关有一个数据输出,一个数据输入和两个控制输入。例如:(r)cmos

[instance_name](OutputA,InputB,NControl,PControl);rnmos、rpmos、驱动强度rnmos和

rpmos在输入引线和输出引线之间存在高阻抗(电阻)。因此当数据从输入传输至输出时,对于rpmos和rnmos,存在数据信号强度衰减。值1强度supply1>strong1>pull1>weak1>highz1值0强度supply0>strong0>pull0>weak0>highz0双向开关双向开关:tran,tranif0,tranif1,rtran,rtranif0,rtranif1开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后4个开关能够通过设置合适的控制信号来关闭。tran和rtran(tran的高阻态版本)开关不能被关闭。gate_type[instance_name](SignalA,SignalB,ControlC);前两个端口是双向端口,即数据从SignalA流向SignalB,反之亦然。第三个端口是控制信号。根据开关例化的选择有控制信号或者没有控制信号。1.6门的延时可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:

gate_type[delay][instance_name](terminal_list);时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为0。门时延由三类时延值组成:上升时延下降时延截止时延门时延定义个数0个时延1个时延2个时延3个时延上升0dd1d1下降0dd2d2to_X0dmin(d1,d2)min(d1,d2,d3)截止0dmin(d1,d2)d3门时延由三类时延值组成:上升时延,下降时延,截止时延门时延定义可以包含0个、1个、2个或3个时延值。门时延举例notN1(Qbar,Q);//门时延为0nand

#6(Out,In1,In2);//所有时延均为6,即上升和下降时延都是6and#(3,5)(Out,In1,In2,In3);notif1#(2,8,6)(Dout,Din1,Din2);//上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。门延迟也可采用min:type:max形式定义。最小值、典型值和最大值必须是常数表达式。例如:and#(2:3:4,5:6:7)(Pout,Pin1,Pin2);如要更精确定义门延时,可用specify语句定义从特定的输入到输出端的各种延时.1.7矢量线网用于门结构描述当需要进行多次实例引用时,在实例描述语句中能够有选择地定义范围说明,以便自动生成多个重复的实例。wire[3:0]Out,InA,InB;nand

Gang[3:0](Out,InA,InB);实例化时自动以相同的标号对齐。等价于nandGang3(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]);注意:当指定实例数组时,必须明确定义实例名。例:parameterNUM=4;

wire[NUM-1:0]gate,in; wirebypass; and#(1,2)u0and[NUM-1:0](gate,in,bypass);注意:bypass是一个标量。这种情况下,该标量扇出(连接)到所有实例的端口。门级结构建模例题`timescale1ns/1nsmoduleDEC2X4(A,B,Enable,Z);inputA,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注意:在同一模块中,实例名不能与线网名相同。not#(1,2)Abar(Abar,A)

×门级结构建模练习题参考解答`timescale1ns/1nsmodule

GateCircuit(Data,Encode,Valid)input[3:0]Data;output[1:0]Encode,Valid;notG1(NotData[2],Data[2]);andG2(A,NotData[2],Data[1]);orG3(B,Data[1],Data[0]),

G4(Encode[0],Data[3],A),

G5(Encode[1],Data[3],Data[2]),

G6(Valid,Data[3],Data[2],B);

endmodule二、行为描述

就是对设计实体的数学模型的描述,其抽象程度远高于结构描述方式。行为描述类似于高级编程语言,当描述一个设计实体的行为时,无需知道具体电路的结构,只需要描述清楚输入与输出信号的行为(即输入、输出的因果关系,也就是在何种输入下产生何种输出),而不需要花费更多的精力关注设计功能的门级实现。EDA的综合工具能自动将行为描述转换成电路结构,形成网表文件。

显然,当电路的规模较大或时序关系较复杂时,通常采用行为描述方式进行设计。

行为描述模块的设计模型其他如:initial语句;并发执行语句。行为描述的2选1MUXmodulemux2(out,a,b,sel);outputout;inputa,b,sel;regout;always@(aorborsel)begin

if(sel) out=b;else out=a;endendmodule三、数据流描述

数据流描述方式主要使用持续赋值语句,多用于描述组合逻辑电路,其格式为:

assign

LHS_net=RHS_expression;狭义上讲,将传统意义上的“逻辑表达式”运用verilog中的运算符,变成连续赋值中的表达式。右边表达式中的操作数无论何时发生变化,都会引起表达式值的重新计算,并将重新计算后的值赋予左边表达式的net型变量。数据流描述模块的设计模型数据流描述的2选1MUXmoduleMUX3(out,a,b,sel);outputout;inputa,b,sel;assignout=sel?b:a;endmodule不同描述风格的设计

对设计者而言,采用的描述级别越高,设计越容易;对综合器而言,行为级的描述为综合器的优化提供了更大的空间,较之门级结构描述更能发挥综合器的性能,所以在电路设计中,除非一些关键路径的设计采用门级结构描述外,一般更多地采用行为建模方式。

结构描述的一位全加器modulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule数据流描述的1位全加器modulefull_add2(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;assignsum=a^b^cin;assigncout=(a&b)|(b&cin)|(cin&a);endmodule行为描述的1位全加器Modulefull_add3(a,b,cin,sum,cout);inputa,b,cin;output

sum,cout;regsum,cout,m1,m2,m3;always@(aorborcin)beginm1=a&b;m2=b&cin;m3=a&cin;sum=(a^b)^cin;cout=(m1|m2)|m3;endendmodule4位加法器`include"full_add1.v"moduleadd4_1(sum,cout,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;full_add1f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论