6.VHDL硬件描述语言_第1页
6.VHDL硬件描述语言_第2页
6.VHDL硬件描述语言_第3页
6.VHDL硬件描述语言_第4页
6.VHDL硬件描述语言_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1VHDL概述2VHDL语言基础知识3VHDL的基本语句4VHDL的子程序,VHDL硬件描述语言,VHDL语言(VHSICHardwareDescriptionLanguage,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。VHDL语言已成为IEEE的一种工业标准,是实现信息系统硬件开发所必备的知识和技能。,VHDL概述,一、VHDL语言及产生背景VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)即超高速集成电路硬件描述语言。美国国防部在20世纪80年代初为其超高速集成电路VHSIC计划提出的硬件描述语言,它是硬件设计者和EDA工具之间的界面。设计者使用HDL来描述自己的设计,并把这个描述告诉EDA工具,最后在EDA工具的帮助下进行详细地设计及验证。,产生背景:美国国防部电子系统项目有着众多的承包商,他们各自建立和使用自己的电路硬件描述语言,这就使得各公司之间的设计不能被重复利用,造成了信息交换和维护方面的困难。为解决此问题,20世纪80年代初美国国防部制定了VHDL,以作为各承包商之间提交复杂电路设计文档的一种标准方案。1987年12月,VHDL被正式接受为国际标准,编号为IEEEStd1076-1987,即VHDL87。1993年被更新为IEEEStd1164-1993,即VHDL93。,功能强大,描述力强。可移植性好。研制周期短,成本低。可以延长设计的生命周期。具有向ASIC移植的能力。HDL语言设计硬件电路的优点:系统中可大量采用芯片采用系统早期仿真降低了硬件电路设计难度,二、VHDL的特点,libraryieee;useieee.std_logic_unsigned.all;entitytest_02isport(a:inintegerrange0to2;b:inintegerrange0to2;c:inintegerrange0to2;x:outintegerrange0to4;y:outintegerrange0to4);endtest_02;architecturetest_02oftest_02isbeginprocess(a,b,c)variabled:integerrange0to2;begind:=a;x=b+d;d:=c;y=b+d;endprocess;endtest_02;,一、VHDL的程序结构,五个部分,实体(Entity),结构体(Architecture),配置(Configuration),程序包(Package),库(Library),可选,VHDL语言基础知识,VHDL源程序基本格式举例:,ENTITYtestISPORT(input_pin_name:INbit;output_pin_name:OUTbit);ENDtest;ARCHITECTUREtest_bodyOFtestISBEGINoutput_pin_name=input_pin_name;ENDtest_body;,LIBRARY库名;库USE库名.程序包名.;程序包ENTITY实体名IS实体PORT();END实体名;ARCHITECTURE结构体名OF实体名结构体()END结构体名;,VHDL源文件基本格式,实体和结构体是VHDL设计文件的两个基本组成部分。实体描述设计系统的外部接口信号;结构体用于描述系统的行为、系统数据的流程或者系统组织结构形式(即系统的内部电路)。配置用于从库中选取所需元件安装到设计单元的实体中。包集合存放各设计模块能共享的数据类型、常数、子程序等。库用于存放已编译的实体、结构体、包集合和配置。,1、实体,格式,ENTITY实体名ISGENERIC(类属表);PORT(端口表);END实体名;,实体说明所设计的逻辑电路的输入、输出信号及其特性(输入、输出、双向),说明,ENTITYtestISPORT(input_pin_name:INbit;output_pin_name:OUTbit);ENDtest,PORT(端口名:端口模式数据类型;端口名:端口模式数据类型);,端口名是设计者为实体的每一个对外通道所取的名字端口模式是指这些通道上的数据流动方式数据类型是指端口上流动的数据的表达格式或取值类型,VHDL要求只有相同数据类型的端口信号和操作数才能相互作用。,PORT说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。,格式,说明,ENTITYtestISPORT(input_pin_name:INbit;output_pin_name:OUTbit);ENDtest,IN输入,信号只能自端口到实体OUT输出,信号只能自实体到端口INOUT双向,信号既可输入又可输出BUFFER缓冲,信号自实体输出,又有内部反馈,端口模式,Out与Buffer的区别,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;Entitytest1isport(a:instd_logic;b,c:outstd_logic);endtest1;architectureaoftest1isbeginb=not(a);c=b;enda;,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;Entitytest2isport(a:instd_logic;b:bufferstd_logic;c:outstd_logic);endtest2;architectureaoftest2isbeginb=not(a);c=b;enda;,2、结构体,格式,对数据类型、常数、信号、子程序和元件等元素的说明描述实体逻辑行为,ARCHITECTURE结构体名OF实体名IS说明语句BEGIN功能描述语句END结构体名;,功能,ARCHITECTUREtest_bodyOFtestISBEGINoutput_pin_name=input_pin_name;ENDtest_body,ARCHITECTUREoneOFmux21aISBEGINy=aWHENs=0ELSEb;ENDone;,结构体,2选1多路选择器的VHDL结构体描述,ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDmux21a;ARCHITECTUREoneOFmux21aISBEGINy=aWHENs=0ELSEb;ENDone;,2选1多路选择器的VHDL描述,3、配置,CONFIGURATION配置名OF实体名IS说明语句;END配置名;,格式,这种配置用于选择不包含块(BLOCK)和元件(COMPONENTS)的构造体。在配置语句中只包含有实体所选配的构造体名,其他什么也没有。,说明,描述层与层之间的连接关系以及实体与构造体之间的连接关系。在仿真时利用配置选择不同的构造体。,4、包集合,PACKAGE包集合名IS说明语句;END包集合名;PACKAGEBODY包集合名IS说明语句;ENDBODY;一个包集合由包集合标题和包集合体两大部分组成。包集合体是一个可选项。包集合用于封装属于多个设计单元分享的公共信息。包集合由包说明(说明数据类型、子程序和常量等)和包体(它含有子程序体与现有的延时常数)所组成。子程序由执行公共操作的过程和函数组成。包集合是分享属于实体数据的一种机制,把子程序、数据类型和元件说明看成建立设计的工具,则包集合可看成工具箱。,包集合的使用:usework.包集合名.all;,5、库,格式,USE语句的使用有两种常用格式:USE库名.程序包名.项目名;USE库名.程序包名.ALL;,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;USEIEEE.STD_LOGIC_1164.RISING_EDGE;USEIEEE.STD_LOGIC_1164.ALL;,LIBRARY库名;USE库名.程序包名.All;,例,IEEE库:IEEE标准库使用需声明STD库:VHDL标准库使用无需声明ASIC库:EDA厂商提供库使用需声明WORK库:现行作业库,当前工作目录的所有设计使用无需声明USER库:用户自定义库使用需声明,STD_LOGIC_1164程序包STD_LOGIC_ARITH程序包STD_LOGIC_UNSIGNED程序包,VHDL库的种类,库说明的作用范围,从一个实体说明开始到其所属的结构体、配置为止,当一个源程序中出现两个以上的实体时,必须重复说明。,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexample1IS()ENDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexample2IS()END,二、VHDL的语言元素,一)VHDL文字规则,1数字型文字整数文字实数文字以数制基数表示的文字2字符串型文字文字字符串数位字符串,VHDL语言基础知识,3标识符,VHDL中的标识符有:,保留标识符即关键字或保留字,短标识符由用户创建的符合VHDL87规定的标识符,扩展标识符VHDL93规定的标识符,1)保留标识符,保留标识符是VHDL的关键字或保留字,如:,2)短标识符,VHDL的短标识符是遵守以下规则的字符序列:,有效字符:英文字符(a-z,A-Z),数字(0-9)和下划线(_),必须以英文字母打头,下划线(_)的前后都必须有英文字母或数字,EDA工具综合、仿真时,短标识符不区分大小写,二)对象VHDL有四类对象:常量(CONSTANT)是一个在仿真和综合过程中固定不变的值,可通过其标识符来引用。信号(SIGNAL)代表电路内部各元件之间的连接线,是实体间动态交换数据的手段。变量(VARIABLE)暂存数据的量,只在进程和子程序中用。文件(FILES)是传输大量数据的客体,包含一些专门数据类型的数值。,常数(constant),常数(constant)格式:constant常数名:数据类型:=初始值;例:constantVCC:real:=5.0;constantdelay,delay:Time:=10ns;常数赋值后不能变;赋的值要与数据类型一致;常数有和信号一样的可视性规则,在程序包中说明的常数为全局量;在实体说明部分的常数可以被该实体中任何构造体引用,在构造体中的常数能被其构造体内部任何语句采用,包括被进程语句采用;在进程说明中说明的常量只能在进程中使用。,变量,变量只能在进程、函数或过程中使用;用做局部的数据存储,为局部量,赋值立即生效。格式:Variable变量名:数据类型约束条件:=表达式;例:Variablex,y:integer;Variablecount:integerrange0to255:=10;,信号,信号信号数据对象:把实体连在一起形成模块,信号是实体间动态数据交换的手段;除无方向说明外,与端口概念一致;通常在构造体、包集合、实体中说明。全局信号在程序包中说明,它们被所属的实体分享。格式:signal变量名:数据类型约束条件:=初始值;即在关键词SIGNAL后跟一个或者多个信号名,每个信号名将建一个新信号,用冒号:把信号名和信号的数据类型分隔开,信号数据类型规定信号包含的数据类型信息,最后信号还可包含初始化信号指定的初值。,信号,例:signalground:bit:=0;signalen:std_logic_vector(7downto0);信号赋值有附加延迟;信号为全局量,可实现进程之间的通信;程序中赋值采用=。,延迟,延迟进程中向信号赋值的时刻和信号得到该值的时刻之间有延迟;当向信号赋值时未给定延迟,但有一隐含延迟,称延迟;延迟是一个无穷小的时间量;,信号与变量的区别,变量赋值立即发生,无延迟;信号赋值至少有延迟,在进程中仅当碰到wait语句或进程结束赋值才生效。进程只对信号敏感,而对变量不敏感。信号除当前值外还有许多相关信息,而变量只有当前值。信号是全局量,变量为局部量。信号在电路中的功能是保存变化的数值和连接子元件;变量在电路中无类似的对应关系,用于计算。,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitytest_01isport(a:inintegerrange0to2;c:inintegerrange0to2;b:inintegerrange0to2;x:outintegerrange0to4;y:outintegerrange0to4);endtest_01;architecturetest_01oftest_01issignald:integerrange0to2;beginprocess(a,b,c,d)begind=a;x=b+d;d=c;y=b+d;endprocess;endtest_01;,结果:a不起作用;x=b+c;y=b+c;例2:,结果:x=b+a;y=b+c;,例2:useieee.std_logic_unsigned.all;entitytest_02isport(a:inintegerrange0to2;c:inintegerrange0to2;b:inintegerrange0to2;x:outintegerrange0to4;y:outintegerrange0to4);endtest_02;architecturetest_02oftest_02isbeginprocess(a,b,c)variabled:integerrange0to2;begind:=a;x=b+d;d:=c;y:=为对象赋初值,说明,三)数据类型,数据类型根据产生的来源分为:1、标准数据类型VHDL语言定义了10种标准的数据类型。1)字符(CHARACTER)字符是用单引号括起来的一个字母数字空格或一些特殊字符。字符区分大小写字母。2)字符串(STRING)字符串是用双引号括起来的一个字符序列。字符串区分大小写字母。常用于程序的提示和结果的说明等。3)布尔量(BOOLEAN)布尔量是二值枚举量,用TURE和FALSE表示。用于关系运算和逻辑判断。,4)位(BIT)位用来表示一个信号的取值。位只有两种取值0和1。例如:TYPEBITIS(0,1);注意:位的值0和1表示信号的状态,而布尔量的取值0和1表示真假,两者意义不同。5)位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据,每位只有0,1两种取值。在其前面可以加数值标记,例如:X(十六进制)B(二进制)O(八进制)等。位矢量常用于表示总线的状态。6)整数(INTEGER)整数的取值范围从-(-1)到+(-1)。整数不能看作矢量,不能单独对某一位操作,只能用于算术运算。整数可用来抽象的表达总线状态,例如:多位计数器的输出。,7)实数(REAL)实数的取值范围从-1.0E+28到+1.0E+38。主要用于硬件方案的研究和实验。8)自然数(NATUREAL)和正整数(POSITIVE)前者是零和零以上的整数;后者是大于零的整数。9)时间(TIME)时间的取值范围从-(-1)到+(-1)。书写格式含整数和时间单位两部分。常用于指定时间延时和标定仿真时刻。10)错误等级(SEVERITYLEVEL)错误等级分为:注意(NOTE)警告(WARING)出错(ERROR)失败(FAILURE)四级,用于提示系统错误等级。,时间(time)类型,*格式:TYPE数组名IS范围;UNITS基本单位;单位;ENDUNITS;*例:,typetimeisrange2147483647to2147483647unitsfs;ps=1000fs;ns=1000ps;us=1000ns;ms=1000us;sec=1000ms;min=60sec;hr=60min;endunits;*architectureeaxampleofexampleisbeginprocess(x)variables:time;begina:=1fs;a:=1ns;a:=1sec;a:=1min;endprocess;endexample;,存放在IEEE库STD_LOGIC_1164程序包中的STD_LOGIC类型(对应于BIT类型)和STD_LOGIC_VECTOR类型(对应于BIT_VECTOR类型)也是两类很常用的数据类型,它们有九种取值,其含义如下:U:初始值0:01:1W:弱信号不定,未知L:弱信号0H:弱信号1-:不可能情况X:不定,未知Z:高阻其中X方便了系统仿真,Z方便了双向总线的描述,因此对信号和总线的描述能力大大增强,应用十分广泛。,2、用户自定义数据类型,VHDL语言允许用户自己定义数据类型。TYPE数据类型名,数据类型名IS数据类型定义;常用的用户自定义类型有:1)枚举(ENUMERATED)类型枚举类型就是把类型中的所有元素一一列举。TYPE数据类型名IS(元素,元素,);TYPEbooleanIS(FALSE,TRUE);,例,2)数组(ARRAY)类型数组类型是多个相同类型的数据集合。它可以是二维的和多维的。TYPE数据类型ISARRAY(范围)OF元素类型名;其中(范围)规定数组下标的类型和范围。TYPEkkkISARRAY(INTEGER0TO9)OFSTD_LOGIC;本句话的含义是:数据类型kkk是一个具有10个元素的数组型数据类型,数组中的每一个元素的数据类型都是STD_LOGIC型。,例,3)记录(RECORD)类型记录类型是多个不同数据类型的集合。TYPE数据类型ISRECORD元素名:数据类型名;元素名:数据类型名;ENDRECORD;记录适用于描述总线仿真等。对于记录类型的数据对象进行单元素赋值时,可在记录类型对象名后加点.,然后再加赋值元素的元素名。,说明,3数据类型转换在VHDL程序中,不同类型的对象不能代入,因此要进行类型转换。类型转换的方法有下述两种:1)类型标记法用类型名称来实现关系密切的标量类型之间的转换。VARIABLEx:INTEGER;VARIABLEy:REAL;则x:=INTEGER(y);y:=REAL(x).其中INTEGER(y)可将y从实数类型转换为整数类型;REAL(x)可将x从整数类型转换为实数类型。,例,2)函数转换法利用VHDL语言程序包中提供的转换函数进行数据类型的相互转换。转换函数的作用是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的数据对象。STD_LOGIC_1164程序包定义的转换函数有:TO_STDLOGICVECTOR():将BIT_VECTOR类型转STD_LOGIC_VECTOR类型TO_BITVECTOR():将STD_LOGIC_VECTOR类型转换为BIT_VECTOR类型TO_STDLOGIC():将BIT类型转换为STD_LOGIC类型TO_BIT():将STD_LOGIC类型转换为BIT类型其中,括号内填写要进行转换的数据对象。这些函数在引用前必须打开库和相应的程序包。,注意,4、运算操作符,VHDL的运算符,算术运算符,关系运算符,逻辑运算符,连接运算符,+ABS+-*/MODREM*,=/=,NOTANDORNANDNORXOR,1)算术运算符,算术运算符包括:,定义在一维数组上,元素类型必须为Bit或Boolean,2)关系运算符,关系运算符包括:,,,注意,运算符两边必须为相同的类型,结果为Boolean类型,3)逻辑运算符(Logical),逻辑运算符包括:,它们对“STDLOGIC”和“BIT”等的逻辑型数据,“STDLOGICVECTOR”逻辑型数组及布尔型数组进行逻辑运算,)连接运算符,其它运算符包括:,连接运算符用于一维数组,右边的内容接在左边内容之后形成一个新的元素,或将两个元素连接成数组。,“VH”“DL”“VHDL”01“01”,例,四种运算操作符的优先级按从高到低的顺序排列为:NOT、ABS、*、REM、MOD、/、*、-(负)、+(正)、-(减)、+(加)、=、=、/=、=、XOR、NOR、NAND、OR、AND。在编写VHDL程序时,必须保证操作数的数据类型和运算符所要求的数据类型一致。,注意,四)属性(ATTRIBUTE)VHDL中可具有属性的项目有:类型、子类型;过程、函数;信号、变量、常量;实体、结构体、配置、程序包;元件等。属性是所述各类项目的特征。属性的值与对象的值不同,在任一给定的时刻,一个对象只能具有一个值,但可以有多个属性。属性功能有许多重要应用,如:检出时钟边沿,完成定时检查,获取未约束的数据类型范围等。VHDL的属性可分为:数值类属性函数函数类属性函数信号类属性函数数据类型类属性函数数据范围类属性函数。对象属性。,格式,1、数值类属性函数数值类属性函数常用于返回数组块和常用数据类型的特定值。数值类属性函数又分为:1)一般数据的数值属性函数,返回函数的边界值。对象LEFT:返回左边界值对象RIGHT:返回右边界值对象HIGH:返回上限值对象LOW:返回下限值,格式,2)数组的数值属性函数,返回数组的长度值。对象LENGTH3)块结构体的数值属性函数,返回块的信息。对象BEHAVIOR对象STRUTURE其中对象为块或结构体名称。前者可获得行为信息,若对象中不含有元件安装语句COMPONENT时,其值为真(TRUE);否则为假(FALSE)。后者可获得结构信息,若对象中含元件安装语句,或具有被动进程时,其值为真(TRUE);反之为假(FALSE)。,格式,格式,2、函数类属性函数函数类属性函数指属性以函数形式为设计人员提供数据类型数组信号的相关信息。函数类属性函数分为五类:1)数据类型的属性函数。对象SUCC(X)获取X的下一个值对象PRED(X)获取X的前一个值对象LEFTOF(X)获取X的左边值对象RIGHTOF(X)获取X的右边值其中对象为数据类型名。,格式,2)信号的属性函数信号的属性函数用来得到有关信号的行为和功能信息。信号EVENT信号的值发生改变(不同于前一时刻的值),则返回真信号ACTIVE信号的值发生变化(可以与前一时刻的值相同),则返回真信号LAST_EVENT返回一个时间值,即从信号最近一次改变到现在经过的时间信号LAST_VALUE信号最后一次变化前的值,并将该历史值返回信号LAST_ACTIVE返回一个时间值,即从信号最近一次变化到现在经过的时间,在程序包中STD_IEEE_1164中,有两个函数可用来检查时钟沿:FUNCTIONrising_edge(SIGNALS:STD_LOGIC)RETURNBOOLEAN;FUNCTIONfalling_edge(SIGNALS:STD_LOGIC)RETURNBOOLEAN;因此,检查时钟信号clk的上升沿可用rising_edge(clk);检查时钟信号clk的下降沿可用:falling_edge(clk)。,3、信号类属性函数信号类属性函数的作用对象是信号,其返回值也是信号。VHDL语言中带属性函数的信号有:1)signalDELAYED(time)该属性使信号signal延时time所规定的值。如:aDELAYED(5ns)即信号延时5ns。2)signalSTABLE(time)若信号signal在规定的time时间内无变化,则返回一个布尔真值。,4、数据类型类属性函数此类函数可获取数据类型中的一个值。数据类型B

温馨提示

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

评论

0/150

提交评论