《vhdl语言描述数》由会员分享,可在线阅读,更多相关《vhdl语言描述数(135页珍藏版)》请在金锄头文库上搜索。
1、第十三章 VHDL语言描述数字系统,本章介绍用 VHDL 描述硬件电路的一些基本手段和基本方法。,13.1 VHDL 语言的基本结构,VHDL 语言是美国国防部在 20 世纪 80 年代初为实现其高速集成电路计划(VHSIC)而提出的一种超高速集成电路硬件描述语言。 VHDL 语言的基本结构是对任何电路在用 VHDL语言描述时,都应有两部分组成:实体和结构体。实体描述电路的输入、输出关系;结构体描述电路的功能。,VHDL 语言描述与逻辑电路图的对应关系,C=ab,实体,结构体,a,b,c,VHDL模型的基本结构,半加器是我们熟悉的器件,输入变量a和b表示两个加数,输出S和CO表示和及进位位。可
2、以用如下逻辑函数式表示半加器:,也可以用如表131所示的真值表来表示,还可以用如图131(a)所示的逻辑图或用如图131(b)所示的逻辑符号表示之。,图131 半加器电路符号 (a)逻辑图;(b)逻辑符号,表131 半加器真值表,除上述三种表达方式外,还可以用VHDL来表达。 例1 半加器 - halfadder LIBRARY IEEE; USE IEEE.STD -LOGIC -1164.ALL; ENTITY half adder IS PORT(a,b:INSTD-LOGIC;s,co:OUTSTD-LOGIC); END half adder; ARCHITECTURE half O
3、F half adder IS SIGNAL c,d:STD LOGIC;,BEGIN c=a OR b d=a NAND b; co=NOT d; s=c AND d; -S=(a+b)ab END half;,在VHDL中,一个设计单元被称为一个设计实体。它可以是一个简单的电路(如:一个与门、一个译码器或加法器等),也可以是一个复杂的电路(如:一个微处理器或一个系统)。 如本例中的半加器就是一个设计实体。 在VHDL中,由关键字、标识符、对象、符号和表达式按VHDL的语法规则构成的句子称为VHDL语句。而能完成一定功能的若干条VHDL语句就组成VHDL程序。,关键字(又称保留字)是具有特殊
4、含义的标识符。它是组成VHDL语句最基本的元素之一。用户不能把它作为自己创建的标识符。 为了醒目和易于发现错误,在书写VHDL程序时,建议关键字用大写字母或黑体字母,如关键字ENTITY表示实体;而用户自己创建的标识符用小写字母或非黑体字母。 一、在VHDL中,任何一个设计实体都至少由实体说明和结构体说明两部分构成。,1、实体说明:是一个设计实体的外部视图。它定义实体名称、类属、实体输入/输出端口和一些参数。实体说明以关键字ENTITY开始,以关键字END结束,它的一般格式是: ENTITY 实体名 IS GENERIC(类属参数说明); PORT(端口说明); 实体说明部分; BEGIN 实
5、体语句部分; END 实体名;,(1) GENERIC后类属表说明用以将信息参数传递到实体。最常用的信息是:器件的上升沿到下降沿的延迟时间、负载电容和电阻、驱动能力以及功耗等。 (2) PORT端口表:指明实体的输入、输出信号及其模式。端口模式共有五种,如下所示。,方向定义,含义,IN,输入,OUT,输出,INOUT,双向,BUFFER,输出,LINKAGE,不指定方向,无论哪个方向都可,例如: Generic (m:time:=1ns) -指定结构体内m的值为:1ns; tmp:=do and sel after m; -表示do与sel经过ins延迟后送tmp。,对于一个VHDL的初学者来
6、说,在学习一般格式时,除要记住语句外,还要记住每行有没有标点符号和有没有用括号;用的是逗号(,)还是分号(;);用的是圆括号()还是方括号。如ENTITY实体名IS及BEGIN这两行并没有使用任何标点符号。 约定:方括号里的内容为选择项,设计者根据设计要求进行选择。在写程序时方括号要省略。 而圆括号及圆括号里的内容为必选项,在写程序时,圆括号要照写。,2、结构体:主要用来描述实体的功能或内部操作特性。如果把设计实体比喻为“黑盒子”的话,那么,实体说明只定义了“黑盒子”的输入/输出,而结构体则描述了“黑盒子”内部的详细内容。结构体的一般格式。 ARCHITECTURE 结构体名 OF 实体名 I
7、S 说明区; 包括:内部信号、常数、数据类型和函数等的定义 BEGIN 结构体语句部分; END结构体名;,结构体具体地描述了设计实体的逻辑功能或内部电路结构关系,从而建立设计实体输入与输出之间的关系。结构体功能可以用三种方式进行描述,即行为描述、数据流描述、结构描述,另外,还可以采用混合描述。 (1) 结构体名称的命名。 结构体的名称是对本结构的命名,它是该结构体的唯一名称。“OF”后面紧跟的实体名表明了该实体所对应的是 哪一个实体。用 “IS”来结束结构体的命名。,(2)定义语句。位于“ARCHITECTURE”和“BEGIN”之间。用于对结构体内部所使用的信号常数、数据类 型和函数等进行
8、定义。 (3)并行处理语句。处于“BEGIN”和“END”之间。具体描述了结构体的行为及其连接关系。 结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来描述。行为描述在ENA工程中称为高层次描述或高级描述。,有了上述的VHDL知识后,让我们一起来阅读上述半加器的程序,以求对VHDL程序有更进一步的认识。 第1行以表示注释的双连线(-)开始,故该行为注释行,告诉使用者以下是一个半加器程序。 第2行以关键字LIBRARY开始,表示程序所用的库为IEEE。一般地,程序行以分号(;)结束。 第3行以关键字USE开始,以关键字ALL结束,表示程序中使用的数据类型是调用由库IEEEST
9、D -LOGIC -1164提供的数据类型。,第46行是实体说明。 第4行中用语句ENTITYIS定义本实体的名称为halfadder。 第5行用关键字PORT()定义输入/输出端口,即:把a和b定义为输入端,把s和co定义为输出端。并且把输入/输出端的数据类型都定义为STD -LOGIC。 第6行用关键字END结束名为halfadder的实体说明。 第714行是结构体。,第7行给出了结构体的名称为half,并说明了与实体名halfadder的所属关系 第8行是说明区,结构体的说明部分、信号、类型、元器件及其他说明可在该区中描述。本例说明了信号c和d的数据类型为STD -LOGIC。 第9行关
10、键字BEGIN之后直至第14行为止是结构体语句部分,用来叙述设计的函数功能。本实例是一个半加器的VHDL程序,第10行的语义是信号c等于a或b的结果;,第11行的语义是d等于a和b的与非; 第12行的语义是co等于d ,即co等于a和b的与; 第13行的语义是s等于c和d的与,图132 VHDL程序基本结构,实际上,一个完整的VHDL程序通常通常含有五个部分,如图所示。,(1)实体(Entity)说明:描述设计实体的外部接口信号。 (2)结构体(Architecture):描述设计实体的内部结构和功能。 (3)配置(Configuration)说明:它是属性选项,描述层与层之间、实体说明与结构
11、体之间的连接关系。比如高层设计需要将底层实体作为文件调用,这就要用到配置说明。 格式: Configuration 配置名 of 实体名 is 说明语句; end 配置名 例:Configuration s-count of counter is for count_32 end for end 配置名,在counter实体中配置了模为32的计数器。,(4)库(Library)和程序包(Package) 库是一种VHDL设计单元的特定集合,用于存放可重复使用的元件和数据类型说明。它可由用户生成,也可由ASIC芯片制造商提供。 库的语句格式: LIBRARY 库名; 库的种类:IEEE库、STD
12、库、WORK库、ASIC矢量库、用户定义库。 IEEE库:包含标准的程序包和工业标准的程序包。 最常用:IEEE.STD -LOGIC 1164,STD库:VHDL的标准库,存放standard的程序包。 WORK库:现行作业库,描述语句放在此库中、使用时不需说明。 ASIC矢量库:逻辑门库,存放逻辑门对应的实体。 用户定义库:存放自已设计的程序包和实体。 库的用法: LIBRARY IEEE; USE IEEE.STD -LOGIC -1164.ALL,程序包是属性选项,用于存放各模块都能共享的数据类型、常数、元件和子程序等,它通过编译后成为库。 程序包的内容由4种结构组成:(1)常数说明(
13、2)VHDL数据类型说明(3)元件定义(4)子程序。 定义程序包的语句结构: PACKAGE 程序包名 IS 程序包首说明部分 END 程序包名 程序包首说明部分类此C语言的include:罗列数据类型,信号、子程序和元件的说明等。,常用的程序包有: STD-LOGIC-1164 STD-LOGIC-UNSIGNED STD-LOGIC-SIGNED 实体说明、结构体和库是每一个VHDL程序必不可少的三大部分,而配置说明和程序包则是选项,它们的取舍视具体情况来定。,13.2 VHDL的基本元素 VHDL是一门高级硬件描述语言,故它有一套自身的、严格的语法规则。可编程器件的开发软件只能识别按照这
14、些语法规则编写VHDL程序,因此学习VHDL的基本格式和基本元素就显得十分重要了。 VHDL的基本元素包括: 关键字、标识符、数据类型、对象、词法单元、表达式和运算符。,13.2.1 关键字 在VHDL语句的开始、结尾或中间过程都要用到关键字,它被赋予编译器能识别的特殊含义。在编写程序时用户不能把关键字用作为自己创建的标识符。 为了便于阅读,一般用大写字母来写关键字。VHDL93中新引入的关键字以黑体形式表示。,13.2.2 标识符的命名 在VHDL中,用户必须遵循VHDL标识符的命名规则来创建标识符。 标识符中可使用的有效字符: 26个大小写英文字母(az和AZ); 10个数字(09)和下划
15、线(-)。 例如:2illegal%name被视为不合法的标识符,因为%不是有效字符。 标识符用作:常量、变量、信号、端口、子程序和参数的名字,标识符必须以英文字母开头。例如,2illegal -name被视为不合法的标识符,因为它以数字2开头,而不是以英文字母开头。 标识符中下划线(-)的前后都必须有英文字母或数字,在一个标识符中只能有一个下划线(-)。例如,illegal -和illegal-name被视为不合法的标识符,因为前者下划线(-)的后面没有英文字母或数字,后者有两个下划线(-)。 标识符不区分大小写英文字母。例如,HALF -Adder和half -adder被视为同一标识符。
16、,13.2.3 数据类型 VHDL是一种强类型语言, 施加于某对象上的操作必须与该对象的类型匹配。 在VHDL中,信号、变量和常数都要指定数据类型, 不同类型之间的数据不能直接代入。即使数据类型相同,位长不同时也不能直接代入。 标准的数据类型由开发软件提供,共有10种,如表132所示。如果用户需要这10种以外的数据类型,则必须自行定义。用户可定义的数据类型共有五种,如表133所示。,表132 标准的数据类型,表133 用户定义的数据类型,VHDL中一个对象只能有一种类型。VHDL的基本数据类型为标量类型,包括整型、实型、枚举型、以及物理型。此外,还可以定义复合类型,如数组,记录,子类型等。 自定义数据类型举例: TYPE bit3 IS (0,1,Z); -定义枚举类型 TYPE word IS ARRAY (31 DOWNTO 0) OF Bit; -定义数组 TYPE voltage IS