电子科技大学EDA技术课件 3_1.pptx
《电子科技大学EDA技术课件 3_1.pptx》由会员分享,可在线阅读,更多相关《电子科技大学EDA技术课件 3_1.pptx(118页珍藏版)》请在冰点文库上搜索。
第三章硬件描述语言,1,VHDL,3.1.1什么是VHDL?
VHDL:
VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,2,3.1概述,3.1.2VHDL的历史,3,80年代初由美国国防部在实施超高速集成电路(VHSIC)项目时开发的。
1987年:
IEEE1076-1987标准1993年:
IEEE1076-1993标准2001年:
IEEE1076-2001标准VHDL获得广泛支持,3.1.3VHDL的作用,4,1)VHDL打破软、硬件的界限传统的数字系统设计分为:
硬件设计(硬件设计人员)软件设计(软件设计人员)是电子系统设计者和EDA工具之间的桥梁,EDA工具及HDL的流行,促使电子系统向集成化、大规模和高速度等方向发展。
美国硅谷约有80%的ASIC和FPGA/CPLD采用HDL进行设计。
2)VHDL与C、C+的比较:
C、C+代替汇编等语言VHDL代替原理图、逻辑状态图等,5,3)VHDL与电原理图描述的比较:
VHDL具有较强的抽象描述能力,可进行系统行为级别的描述。
描述更简洁,效率更高。
VHDL描述与实现工艺无关。
电原理图描述必须给出完整的、具体的电路结构图,不能进行描象描述。
描述繁杂,效率低。
电原理图描述与实现工艺有关。
6,3.1.4VHDL语言特点,VHDL具有强大的语言结构,系统硬件抽象描述能力强、设计效率高。
一个可置数的16位计数器:
7,用VHDL描述的可置数16位计数器:
8,VHDL语言可读性强,易于修改和发现错误。
VHDL具有丰富的仿真语句和库函数,可进行早期行为仿真,利于大系统的设计与验证。
VHDL设计与硬件电路关系不大。
VHDL设计不依赖于器件,与工艺无关。
移植性好。
VHDL体系符合TOP-DOWN和CE(并行工程)设计思想。
VHDL设计效率高,产品上市时间快,成本低。
易于ASIC实现。
9,3.1.5VHDL与其它硬件描述语言的比较,行为级RTL级门电路级RTL:
RegisterTranslateLevelVHDL:
系统级抽象描述能力强,适合行为级和RTL级的描述。
涉及电路细节少,工作量少,效率高。
IEEE标准,支持广泛。
对综合器要求高,不易控制底层电路的生成。
10,VerilogHDL:
系统级抽象描述能力比VHDL稍差;门级开关电路描述方面比VHDL强。
适合RTL级和门电路级的描述。
需了解电路细节,工作量较多。
IEEE标准,支持广泛。
ABEL、PALASM、AHDL(AlteraHDL):
系统级抽象描述能力差,一般作门级电路,描述。
要求对电路细节有详细的了解。
工作量大。
对综合器要求低,易于控制电路资源。
支持少。
11,VHDL,12,VerilogHDL,3.1.6VHDL设计简述,13,VHDL主要用于描述数字系统的结构、行为、功能和接口。
VHDL将一个设计(元件、电路、系统)分为:
外部(可视部分、端口)内部(不可视部分、内部功能、算法),外部与内部:
ports,ports,CombinationalProcess,SequentialProcess,component,14,器件或子系统ENTITYARCHITECTUREProcessProcess,2选1选择器的VHDL描述:
15,VHDL语言的一些基本特点:
nVHDL语言由保留关键字组成;n一般,VHDL语言对字母大小写不敏感;例外:
、“”所括的字符、字符串;n每条VHDL语句由一个分号(;)结束;nVHDL语言对空格不敏感,增加可读性;n在“-”之后的是VHDL的注释语句;nVHDL有以下描述风格:
行为描述;数据流(寄存器传输RTL)描述;结构化描述;,16,基本结构包括:
实体(Entity)结构体(Architecture)配置(Configuration)库(Library)、程序包(Package),17,3.2VHDL程序基本结构,库、程序包实体(Entity)结构体(Architecture)进程或其它并行结构,配置(Configuration),18,3.2.1实体(说明),实体(说明):
定义系统的输入输出端口语法:
ENTITYISGenericDeclarationsPortDeclarationsEND;(1076-1987version)ENDENTITY;(1076-1993version),19,1、类属说明类属说明:
确定实体或组件中定义的局部常数。
必须放在端口说明之前。
Generic(常数名称:
类型:
=缺省值常数名称:
类型:
=缺省值);,20,类属常用于定义:
实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。
例:
entitymckisgeneric(width:
integer:
=16);port(add_bus:
outstd_logic_vector(width-1downto0);,21,例:
2输入与门的实体描述entityand2isgeneric(risewidth:
time:
=1ns;fallwidth:
time:
=1ns);port(a1:
instd_logic;a0:
instd_logic;z0:
outstd_loigc);endentityand2;注:
time:
用于仿真可综合的类属值:
整数,22,2、端口声明端口声明:
确定输入输出端口的数目和类型。
其中,端口模式:
in输入型,此端口为只读型。
out输出型,此端口只能在实体内部对其赋值。
inout输入输出型,既可读也可赋值。
buffer缓冲型,与out相似,但可读。
Port(,23,数据类型;,数据类型,端口名称,端口名称:
端口模式端口名称,端口名称:
端口模式);,out和buffer的区别:
24,In1,25,In2,In3,Out1,Out2,Out3,Out4,数据类型:
指端口上流动的数据的表达格式。
为预先定义好的数据类型。
如:
bit、bit_vector、integer、real、std_logic、std_logic_vector等。
例:
entitynand2isport(a,b:
inbit;,26,:
outbit,z);endnand2;,3.2.2结构体,27,作用:
定义系统(或模块)的行为、元件及内部的连接关系,即描述其逻辑功能。
两个组成部分:
说明部分逻辑功能描述部分,结构体,结构体说明,结构体功能描述,常数说明,数据类型说明,信号说明,例化元件说明,子程序说明,块语句进程语句,信号赋值语句,子程序调用语句,元件例化语句,28,实体与结构体的关系:
设计实体,结构体3。
结构体n,一个设计实体可有多个结构体,代表实体的多种实现方式。
各个结构体的地位相同。
结构体1结构体2,29,结构体的语法:
architecture结构体名称of实体名称is说明语句内部信号、常数、数据类型、子程序(函数、过程)、元件等的说明;begin并行处理(功能描述)语句;endarchitecture结构体名称;注:
同一实体的结构体不能同名。
定义语句中的常数、信号不能与实体中的端口同名。
30,例:
结构体中错误的信号声明,31,例:
一个完整描述(3bit计数器),32,3bit计数器的等效描述(out与buffer的区别):
33,3.2.3配置,设计实体,结构体1结构体2结构体3,。
结构体n,一个设计实体的多种实现方式,34,配置:
从某个实体的多种结构体描述方式中选择特定的一个。
简单配置的语法:
configuration配置名of实体名isfor选配结构体名endfor;end配置名;例:
一个与非门不同实现方式的配置如下:
35,libraryieee;useieee.std_logic_1164.all;entitynandisport(a:
instd_logic;b:
instd_logic;c:
outstd_logic);endentitynand;architectureart1ofnandisbeginc=not(aandb);endarchitectureart1;,36,architectureart2ofnandisbegin,c=1when(a=0)and(b=0)else1when(a=0)and(b=1)else1when(a=1)and(b=0)else0when(a=1)and(b=1)else0;,37,configurationfirstofnandisforart1;endfor;endfirst;configurationsecondofnandisforart2endfor;endsecond;,38,例:
一个对计数器实现多种形式的配置如下:
39,40,41,程序包:
已定义的常数、数据类型、元件调用说明、子程序的一个集合。
目的:
方便公共信息、资源的访问和共享。
库:
多个程序包构成库。
42,3.2.4程序包、库,程序包说明的内容:
常量说明;VHDL数据类型说明;元件说明;子程序说明;程序包的结构包括:
程序包说明(包首)程序包主体(包体),43,1、程序包说明(包首)语法:
package程序包名is包说明项end程序包名;包说明项:
use语句(用来包括其它程序包);类型说明;子类型说明;常量说明;信号说明;子程序说明;元件说明。
44,例:
程序包说明,45,2、程序包包体,use语句;常量说明;类型说明;子类型说明;子程序说明;子程序主体;,程序包的内容:
子程序的实现算法。
包体语法:
packagebody程序包名is,46,end包体说明项:
包体说明项程序包名;,程序包首与程序包体的关系:
程序包体仅用于子程序的描述。
程序包首可以独立定义和使用。
47,例:
packagesevenissubtypesegmentsisbit_vector(0to6);typebcdisrange0to9;endseven;,librarywork;usework.seven.all;entitydecoderisport(input:
inbcd;drive:
outsegments);enddecoder;architectureartofdecoderisbegin,48,withinputselectdrive=B“1111110”when0,B“0110000”when1,B“1101101”when2,B“1111001”when3,B“0110011”when4,B“1011011”when5,B“1011111”when6,B“1110000”when7,B“1111111”when8,B“1111011”when9,B“0000000”whenothers;endarchitectureart;,a,b,c,d,e,f,g,49,3、库的种类,VHDL库可分为5种:
IEEE库定义了四个常用的程序包:
std_logic_1164(std_logictypes&relatedfunctions)std_logic_arith(arithmeticfunctions)std_logic_signed(signedarithmeticfunctions)std_logic_unsigned(unsignedarithmeticfunctions),50,TypeSTD_ULOGIC、STD_LOGIC:
9logicvaluesystem(U,X,0,1,Z,W,L,H,-)U:
未初始化的,X:
强未知的,,0:
强0,Z:
高阻态,,1:
强1,W:
弱未知,的,,L:
弱0,,H:
弱1,,51,STD库(默认库)库中程序包为:
standard,定义最基本的数据类型:
Bit,bit_vector,Boolean,Integer,Real,andTime注:
TypeBIT2logicvaluesystem(0,1)面向ASIC的库WORK库(默认库)用户定义库,52,4、库及程序包的使用,53,库及程序包的位置:
库的说明:
library程序包的说明:
use默认库及程序包的说明:
库及程序包的作用范围:
库、程序包实体(Entity)结构体(Architecture)进程或其它并行结构,配置(Configuration),54,库的使用语法:
library库名;程序包的使用有两种常用格式:
use库名程序包名项目名use库名程序包名All;例:
libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.conv_integer;,55,2选1选择器:
56,2选1的另一种描述,57,四类语言要素:
数据对象(DataObject)数据类型(DataType)操作数(Operands)操作符(Operator),58,3.3VHDL语言要素,3.3.1VHDL文字规则,59,1、数字型文字整数文字:
十进制整数如:
5,678,156E2(=15600),45_234_287(=45234287)实数文字:
带小数的十进制数如:
23.34,2.0,44.99E-2(=0.4499)88_67_551.23_909(8867551.23909),如:
10#170#2#1111_1110#16#E#E1,(=170)(=254)(=2#1110_0000#=224),或:
(=1416=224)16#F.01#E+2(=(15+1/(1616)1616=3841.00),(3)以数制基数表示的文字格式:
基数#数字文字#E指数,60,(4)物理量文字如:
60s、100m、177A注:
整数可综合实现;实数一般不可综合实现;物理量不可综合实现;,61,2、字符串型文字按字符个数多少分为:
字符:
用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母。
如:
A,*,Z字符串:
用双引号引起来的一维字符数组,62,字符串分为:
(1)文字字符串:
“文字”如:
“ERROR”,“XXXXXXXX”,“ZZZZZZZZ”,“X”,“BOTHSANDQEQUALTOL”,,63,
(2)数位字符串:
称为位矢量,代表二进制、八进制、十六进制的数组。
其位矢量的长度为等值的二进制数的位数。
格式:
基数符号“数值”其中基数符号有三种:
B:
二进制基数符号。
O:
八进制基数符号,每一个八进制数代表一个3位的二进制数。
64,X:
十六进制基数符号,每一个十六进制数代表一个4位的二进制数。
65,二进制数数组,长度为9八进制数数组,长度为6十六进制数数组,长度为,如:
B“1_1101_1110”O“34”X“1AB”12,3、标识符定义常数、变量、信号、端口、子程序或参数的名字。
基本标识符的要求(87标准):
以英文字母开头;不连续使用下划线“_”;不以下划线“_”结尾;由26个大小写英文字母、数字09及下划线“_”组成的字符串。
66,基本标识符中的英文字母不分大小写;VHDL的保留字不能作为标识符使用。
合法标识符如下:
my_counter、Decoder_1、FFT、Sig_N、Not_Ack、State0,67,非法标识符如下:
_Decoder_1、2FFT、Sig_#N、Not-Ack、ALL_RST_、dataBUS、return、entity,68,扩展标识符(93标准):
以反斜杠来界定,免去了87标准中基本标识符的一些限制。
可以以数字打头,允许包含图形符号,允许使用VHDL保留字,区分字母大小写等。
如:
74LS163、Sig_#N、entity、ENTITY,69,4、下标名及下标段名下标名:
用于指示数组型变量或信号的某一个元素。
格式:
下标段名:
用于指示数组型变量或信号的某一段元素。
格式:
如:
a:
std_logic_vector(7downto0)a(7),a(6)a(0)a(7downto0),a(7downto4),a(5downto3),标识符(表达式),标识符(表达式to/downto表达式),70,3.3.2数据对象,71,三种对象:
常量(Constant)变量(Variable)信号(Signal)三种对象的物理含义:
常量:
电源、地、恒定逻辑值等;变量:
暂存某些值的载体,常用于描述算法;信号:
硬件连接线,端口。
三种对象的特点及说明场合:
72,信号:
全局量,定义于architecture、package、entitiy。
变量:
局部量,定义于process、function、procedure。
常量:
全局量,可定义于上面两种场合。
1、常量说明常量说明:
对某一个常量名赋予一个固定的值。
格式:
constant常数名:
数据类型:
=表达式;例:
constantdata:
bit_vector(3downto0):
=“1010”constantwidth:
integer:
=8;constantx:
new_bit:
=x;常量数据类型必须与表达式的数据类型一致。
73,常量的可视性(作用范围):
库、程序包实体(Entity)结构体1进程1_1,结构体2进程2_1,常量是全局量,其作用范围取决于常量被定义的位置。
进程1_2,进程2_2,74,2、变量说明局部量,只能在进程和子程序中定义、使用。
格式:
variablecount:
integerrange0to255:
=10;变量的初值可用于仿真,但综合时被忽略。
variable变量名:
数据类型例:
variablea,b:
bit;,75,约束条件:
=表达式;,3、信号说明电子硬件系统运行的基本特性:
各部分电路工作的并行特性;信号传输过程中的延时特性;多驱动源的总线特性;,时序电路中触发器的记忆特性等。
信号是电子系统内部硬件连接和硬件特性的抽象表示。
格式:
signal信号名:
数据类型约束条件:
表达式;,76,例:
signala,b:
bit;signalinit:
integer:
=-1;signals1:
std_logic:
=0;signals2:
std_logic_vector(15downto0);注:
a.综合时初值被忽略。
b.信号是全局量。
可在结构体、实体、块中说明和使用信号。
c.在进程和子程序中只能使用信号,不能说明信号。
77,例:
进程中信号与变量的使用,Entityexisport(.);endex;architecturearch_exofexissignala,b:
std_logic;beginprocess(a,b)variablec,d:
std_logic;beginc:
=a+b;d:
=a-b;endprocess;endarch_ex;,78,信号与端口的区别:
信号本身无方向,可读可写。
端口是一种有方向的隐形信号。
entityexamisport(signala,b:
instd_logic;signalc:
outstd_logic);endexam;输出端口不能读出数据,只能写入数据;输入端口不能写入数据,只能读出数据。
79,3.3.3VHDL数据类型,80,VHDL是一种强数据类型语言:
数据类型必须事先说明;同类型才能互相传递和作用。
VHDL数据类型分为四大类:
标量类型(SCALARTYPE)、复合类型(COMPOSITETYPE)、存取类型(ACCESSTYPE)、文件类型(FILESTYPE),又分为:
预定义数据类型、用户自定义数据类型1、VHDL的预定义数据类型1)布尔量(boolean)两种状态:
false、true常用于逻辑函数,如相等(=)、比较()等中作逻辑比较。
如,bit值转化成boolean值:
boolean_var:
=(bit_var=1);,81,位(bit)bit表示一位的信号值。
放在单引号中,如0或1。
位矢量(bit_vector)bit_vector是用双引号括起来的一组位数据。
如:
“001100”X“00B10B”字符(character)用单引号将字符括起来。
variablecharacter_var:
character;.Character_var:
=A;,82,5)整数(integer)integer表示所有正的和负的整数。
硬件实现时,利用32位的位矢量来表示。
可实现的整数范围为:
-(231-1)to(231-1)VHDL综合器要求对具体的整数作出范围限定,否则无法综合成硬件电路,或造成资源浪费。
如:
signals:
integerrange0to15;信号s的取值范围是015,可用4位二进制数表示,因此s将被综合成由四条信号线构成的信号。
83,6)自然数(natural)和正整数(positive)natural是integer类型的子类型,表示非负整数。
positive是integer类型的子类型,表示正整数。
定义如下:
subtypenaturalisintegerrange0tointegerhigh;subtypepositiveisintegerrange1tointegerhigh;,84,实数(REAL)或称浮点数取值范围:
-1.0E38+1.0E38实数类型仅能用于VHDL仿真器,一般综合器不支持。
字符串(string)string是character类型的一个非限定数组。
用双引号将一串字符括起来。
如:
variablestring_var:
string(1to7);string_var:
=“Rosebud”;,85,时间(TIME)由整数和物理单位组成如:
55ms,20ns错误等级(SEVERITY_LEVEL)仿真中用来指示系统的工作状态,共有四种:
NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败),86,2、IEEE预定义标准逻辑位与矢量,std_logic及其决断函数(Std_logic_1164包)Packagestd_logic_1164is,typestd_ulogicis(U,X,0,1,Z,W,L,H,-);typestd_ulogic_vectorisarray(naturalrange)ofstd_ulogic;functionresolved(s:
std_ulogic_vector)returnstd_ulogic;subtypestd_logicisresolvedstd_ulogic;typestd_logic_vectorisarray(naturalrange)ofstd_logic;,Endstdlogic1164;,87,Packagebodystd_logic_1164is,constantresolution_table:
stdlogic_table:
=(-|UX01ZWLH-|,(U,U,U,U,U,U,U,U,U),-|U|(U,X,X,X,X,X,X,X,X),-|X|(U,X,0,X,0,0,0,0,X),-|0|(U,X,X,1,1,1,1,1,X),-|1|(U,X,0,1,Z,W,L,H,X),-|Z|(U,X,0,1,W,W,W,W,X),-|W|,88,functionresolved(s:
std_ulogic_vector)returnstd_ulogicisvariableresult:
std_ulogic:
=Z;-weakestbeginifslength=1thenreturns(slow);elseforiinsrangeloopresult:
=resolution_table