Verilog HDL数字设计初步.ppt

上传人:牧羊曲112 文档编号:5452046 上传时间:2023-07-08 格式:PPT 页数:35 大小:524.50KB
返回 下载 相关 举报
Verilog HDL数字设计初步.ppt_第1页
第1页 / 共35页
Verilog HDL数字设计初步.ppt_第2页
第2页 / 共35页
Verilog HDL数字设计初步.ppt_第3页
第3页 / 共35页
Verilog HDL数字设计初步.ppt_第4页
第4页 / 共35页
Verilog HDL数字设计初步.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Verilog HDL数字设计初步.ppt》由会员分享,可在线阅读,更多相关《Verilog HDL数字设计初步.ppt(35页珍藏版)》请在三一办公上搜索。

1、现代数字系统设计 基于Verilog HDL,主讲:胡文静()专业:电子信息工程,第五章 Verilog HDL语言,Important Points,Verilog HDL模块的结构Verilog HDL语言要素数据类型、运算符常量、变量寄存器和存储器,Verilog HDL发展历史,什么是Verilog HDL?Verilog是一种硬件描述语言,可以在算法级、门级到开关级的多种抽象层次上对数字系统建模语法结构上,继承和借鉴了许多C语言特性版本演变1983年,Gateway Automation公司创建(Philip Moorby)19841986年,第一个Verilog HDL仿真器(Mo

2、orby)1987年,Synopsys公司将Verilog作为综合工具的输入1989年,Cadence收购Gateway,于1990年公开发布Verilog HDLIEEE 1364-1995IEEE 1076-2001IEEE 1076-2005,Top-down结构化设计思想,一个系统由总设计师先进行系统描述,将系统划分为若干模块,编写模块模型(一般为行为级),仿真验证后,再把这些模块分配给下一层的设计师,由他们完成模块的具体设计,而总设计师负责各模块的接口定义,Verilog HDL建模的概念,Verilog建模与Top-Down结构化层次设计思想十分吻合Verilog采用模块(Modu

3、le)的概念来描述一个基本的功能块模块(Module)通过接口(输入、输出或双向)被更高层模块调用,但隐藏内部实现细节,便于修改与维护与数字电路对应关系数字电路归结为“线”与“器件”线:器件之间的物理连接,对应Verilog的wire等器件:完成特定逻辑功能的物理实体,对应Verilog的moduleVerilog建模实质就是如何利用HDL语言对数字电路的线和器件以及相互关系进行描述的过程,Top-Down结构化设计原则,底层的模块应适合表达对于原理图方式设计输入,可以分解到门、触发器和宏单元级对于HDL设计输入,可以分解到算法级应有利于提高模块设计的复用率(共享)相似的功能应设计成共享的基本

4、模块,供高级模块调用,减少模块数量、改善结构化特性模块接口信号线力求最少复杂的接口信号会增加综合布局布线的复杂度,增加设计的错误风险在达到相同逻辑功能的前提下,以最少的信号线进行信号与数据交换为最佳方案模块划分应力求结构均称同一层模块之间的设计复杂度、资源消耗等不能有太大的悬殊模块设计通用性好,易于移植模块的设计应与器件无关,便于升级与移植,Verilog模块的定义,语法:module(端口列表);endmodule注解:module关键字声明模块开始是模块惟一的标识符用于与其他模块的连接(相当于器件的引脚)定义数据对象的类型(信号、端口等)定义模块(器件)的逻辑功能endmodule关键字标

5、识模块结束,模块定义:一个简单的例子,4位全加器Verilog代码module adder4(a,b,cin,sum,cout);input 3:0 a,b;/加数,位宽4位,输入input cin;/低位进位,输入output 3:0 sum;/和,输出output cout;/高位进位,输出assign cout,sum=a+b+cin;/逻辑功能定义endmodule说明:模块名称:adder4端口列表:a,b,cin,sum,cout端口定义:input 3:0 a,b;output 3:0 sum;input cin;功能描述:assign cout,sum=a+b+cin;,综合与

6、仿真,4位全加器Quartus II综合结果,综合与仿真,4位全加器Quartus II综合结果,综合与仿真,adder4仿真测试向量文件timescale 1ns/1nsmodule adder4_tb;wire 3:0 sum;reg 3:0 a;reg cin;reg 3:0 b;wire cout;integer i,j;adder4 DUT(.sum(sum),.a(a),.cin(cin),.b(b),.cout(cout);,always#5 cin=!cin;initial begin a=0;b=0;cin=0;for(i=1;i16;i=i+1)#10 a=i;endini

7、tial begin for(j=1;j16;j=j+1)#10 b=j;endinitial begin$monitor($time,%d+%d+%b=%b,%d,a,b,cin,cout,sum);#200$stop;end endmodule,Modelsim功能仿真结果,Verilog模块基本结构,四个部分:模块声明、端口定义、信号说明、逻辑功能描述。1.模块声明包括模块名称、输入、输出端口列表语法:module 模块名称(端口1,端口2,端口n);/模块描述endmodule2.模块端口定义说明模块端口的输入、输出类别语法:input n-1:0 端口1,端口2,端口n;/输入端口o

8、utput n-1:0 端口1,端口2,端口n;/输出端口inout n-1:0 端口1,端口2,端口n;/双向端口信号位宽n-1:0若不指定,则缺省位1位。,Verilog模块基本结构,3.信号类型说明对模块的所有信号(端口、节点信号)进行数据类型说明;Verilog提供了各种信号数据类型,用于模拟实际电路中的物理连接与物理实体(详见后续章节);语法:信号类型 n-1:0 信号名称;举例:reg cout;/定义cout信号为寄存器类型,位宽位1位;reg 3:0 sum;/定义sum信号位寄存器类型,位宽为4位;wire A,B,C,D;/定义A,B,C,D四个信号为wire(连线)型,默

9、认位宽位1位。缺省:未指定数据类型的信号,缺省数据类型为wire型。,Verilog模块基本结构,4.逻辑功能描述对模块的逻辑功能进行定义,是模块的核心部分;逻辑功能描述形式上多种多样,包括调用“函数(function)”和“任务(task)”。基本描述方法:(1)assign持续赋值,一般用于组合逻辑描述如:assign a=c end,Verilog模块的模板,module();output 输出端口列表;/输出端口声明input 输入端口列表;/输入端口声明/*定义数据,信号的类型,函数声明,用关键字wire,reg,task,funtion等定义*/wire 信号名;reg 信号名;/

10、逻辑功能定义/用assign语句定义逻辑功能assign=;/用always块描述逻辑功能always()begin/过程赋值/if-else,case语句/while,repeat,for循环语句/task,function调用end,/调用其他模块();/门元件例化门元件关键字();endmodule【小测试】利用Verilog描述一个42的乘法器module mult42(a,b,re);input 3:0 a;input 1:0 b;output 5:0 re;assign re=a*b;endmodule,Verilog语言要素,注释语句(Comments)用于提高程序可读性,帮助程

11、序员阅读、修改和理解代码的非执行语句为代码添加注释是一个优秀程序员必备的良好习惯Verilog注释书写形式1.单行注释用“/”开头,从此符号开始到本行结束都被认为是注释只能注释到本行结束如:reg a,b;/定义两个寄存器型信号2.多行注释从符号“/*”开始,到符号“*/”结束都被认为是注释可以跨越多行如:and gate1(a,b,out);/*元件2输入与门and例化,与门输入通 过a,b两个信号提供,与门输出送给信号out.*/,Verilog语言要素,标识符与关键字标识符(Identifier)由字母、数字以及符号“$”和“_”组成的符号序列第一个字符只能是字母或下划线大小写敏感如:c

12、ount,COUNT,Count,_A1_d2,R56_930count,out*关键字(Keywords)Verilog语言内部已经使用的词,又称保留字关键字用户不能作为标识符使用所有关键字都为小写,如:for,always,if,reg,wire,FOR,ALWAYS,Verilog语言要素,参数声明模块中某些数值(如延迟时间、信号位宽等)在例化时可能需要改变,此时可以通过参数声明加以解决参数一经声明,就视其为一常量语法:parameter WIDTH=4,DELY=50,period=10.4parameter BIT=1,BYTE=8,PI=3.14;parameter STROBE_

13、DELAY=(BYTE+BIT)/2;预处理指令以单反引号“”开始的某些标识符用于指示编译器执行某些操作define,undefifdef,else,endifincludetimescaleresetall,Verilog 数据类型,数据类型常量四种基本取值:0,1,x,z整型常量十进制格式带有正负号的数字序列,代表一个有符号数如:10,-45,基数格式三个部分:sizebase value,位宽基数 取值size:位宽,可选项base:基数,常量的进制:o/O,b/B,d/D,h/Hvalue:数字序列,与基数base相符的数字序列,x,z以及16进制的AF不区分大小写;“?”可以代替z。

14、如:5O37,4hz,8h2A;10b10,10bx0 x1;3b1001_0011;4 hB,Verilog 数据类型,实型常量用于浮点数的表示十进制格式由数字和小数点构成,且必须有小数点,小数点后必须由数字如:2.0,5.678,0.1,2.指数格式由数字和字符e(或E)构成,e(E)的前面必须由数字且后面必须为整数如:23_5.1e2,3.6E2,5e-4字符串常量由一对双引号括起来的字符序列,双引号中的任何字符都被认为是字符串的一部分如:“This is a Verilog test!”,“Begin function simulation”存储:一个字符采用8位二进制ASCII存储,

15、Verilog 数据类型,变量线网型表示元件之间的物理连线,没有存储功能线网是“被驱动”的,可连续赋值或连接到元件的输出Verilog共提供11种线网类型wire,tri,wor,trior,wand,triand,trireg,tril,tri0,supply0,supply1(斜体为可综合的线网类型)语法:net_type msb:lsb net1,net2,net_type为线网类型;msb:lsb定义线网位宽及最高与最低位,可选;如:wire Rdy,Start;/Rdy,Start为两个1位连线wand 2:0 Addr;/Addr为3位线与型线网类型wire是最常用的线网类型,为信

16、号的默认类型,可作为任何表达式的输入,也可作为assign语句和例化元件的输出。,Verilog 数据类型,寄存器型(reg)对应具有状态保持功能的电路元件,表示一个抽象的数据存储单元,可通过赋值语句改变其存储内容只能在always和initial语句中赋值,在未被赋值之前,寄存器的缺省值为x在always和initial过程语句中赋值的变量必须定义为reg型5种类型reg,integer,time,real,realtimereg寄存器型最常用的寄存器类型,但只能存储无符号数语法:reg msb:lsb varn upper:lower,msb:lsb为位宽,缺省为1upper:lower为

17、存储器深度,缺省为1,用于定义存储器。,reg 1:4 comb;comb=5;comb=-2;,Verilog 数据类型,integer寄存器型用于存储整数值的变量数据类型,可以存储有符号数语法:integer var1,var2,varnmsb:lsb;msb:lsb用于定义整型数组的边界,可选项如:integer A,B,C;/声明三个整型寄存器integer Hist3:6;/声明一个整型寄存器数组,下标36说明:整型寄存器可以存储一个32位的数,但不能直接进行按位访问,而需要将integer赋给reg类型,然后进行按位访问如:reg 31:0 Areg;integer Aint;Ar

18、eg=Aint;通过Aregi进行按位访问。,Verilog 数据类型,integer寄存器型又如:integer J;reg 3:0 Bcq;J=6;Bcq=J;Bcq=4b0101;J=Bcq;J=-6;Bcq=J;结论:赋值总是从最低位(最右侧)向最高位(最左侧)进行,任何多余的位都会被截断。time,real,realtime寄存器类型,Verilog 运算符,Verilog提供了丰富的运算符,以支持其强大的建模能力分类算术运算符:+,-,*,/,%关系运算符:,=,条件运算符:?:连接运算符:,Verilog 运算符,算术运算符(+,-,*,/,%)整数除法将截断所有小数部分如7/4

19、结果为1取模运算符将求出与第一个操作数符号相同的余数如:7%4,-10%7如果算术运算符的操作数出现x或z,则运算结果为xb10 x1+b01111结果为bxxxxx运算结果的长度:由最长的操作数长度决定,但在赋值语句中算术运算的结果的长度由赋值目标长度决定操作数的符号线网、一般寄存器和基数格式整数只能存储无符号数整数寄存器可以存储有符号数如:reg 5:0 bar;bar=-4d12;/bar的值是?bar=-4d12/4;/bar的值是?bar=-2+(-4);/bar 的值是?,Verilog 运算符,关系运算符(,=,45;528hxFF;b1000=b01110;相等运算符(=,!=

20、,=,!=)与关系运算符类似,结果为真“1”或假“0”分为两组:=,!=和=,!=,与前者不同,后者以按位比较的方式进行如:Data=b11x0;Addr=b11x0;则Data=Addr;Data=Addr;再如:2b10=4b0010,Verilog 运算符,逻辑运算符(,Verilog 运算符,移位运算符(,)移位次数两个操作数,分布于操作符两侧左侧操作数为要执行移位操作的数右侧操作数为移位的次数移位产生的空位补0条件操作符根据条件表达式的值执行不同的表达式语法:cond_expr?expr1:expr2;cond_expr结果为真,则执行expr1,反之执行expr2。,Verilog

21、 运算符,规约运算符(则&A=?|A=?A=?,Verilog 运算符,连接运算符,将位于大括号中的两个或两个以上的用逗号,分隔的表达式进行按位拼接,得到一个长表达式语法:expr1,expr2,expr3,exprN如,设:wire 7:0 Dbus;wire 11:0 Abus;则assign Dbus7:4=Dbus0,Dbus1,Dbus2,Dbus3;或assign Dbus=Dbus3:0,Dbus7:4;非定长常数不能连接如:Dbus,5;/非法,低4位反转赋高4位,高低4位交换,Verilog 运算符,复制运算符用于按指定次数重复执行连接操作语法repetition_numberexpr1,expr2,exprN;reprtition_number为赋值次数内层大括号为待重复的连接操作如:Abus=34b1011;/3次连接,Abus=12b1011_1011_101131b1;/结果为 3b1113Ack;/结果与Ack,Ack,Ack;相同(Ack为已定义变量)Abus=4Dbus7,Dbus;/结果为Dbus7,Dbus7,Dbus7,Dbus7,Dbus,Summary of Important Points,Verilog HDL模块的结构Verilog HDL语言要素数据类型、运算符常量、变量寄存器和存储器,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号