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

下载本文档

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

文档简介

1、第6章 VHDL硬件描述语言vVHDL语言的数据结构vVHDL语言的顺序语句和并行语句vVHDL程序设计第6章 VHDL硬件描述语言6.1 6.1 VHDLVHDL概述概述6.1.1 6.1.1 VHDLVHDL的特点的特点(1)作为HDL的第一个国际标准,VHDL具有很强的可移植性。(2)具有丰富的模拟仿真语句和库函数。(3)VHDL有良好的可读性,接近高级语言,容易理解。(4)系统设计与硬件结构无关。(5)支持模块化设计。(6)用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。(7)设计灵活,修改方便。第6章 VHDL硬件描述语言 用VHDL设计电

2、路主要的工作过程是:编辑、编译、功能仿真(前仿真)、综合、布局、布线、后仿真(时序仿真)。6.1.2 VHDL的基本结构的基本结构 一个VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE)。除实体和结构体外,多数程序还要包含库和程序包部分。实体中定义了一个设计模块的外部输入和输出端口,即模块(或元件)的外部特征,描述了一个元件或一个模块与其他部分(模块)之间的连接关系,可以看作是输入输出信号和芯片管脚信息。结构体主要用来说明元件内部的具体结构,即对元件内部的逻辑功能进行说明,是程序设计的核心部分。库是程序包的集合,不同的库有不同类型的程序包。程序包用来定义结构体和实体中

3、要用到的数据类型、元件和子程序等。 第6章 VHDL硬件描述语言【例【例6-16-1】用】用VHDLVHDL设计一个非门(反向器)。设计一个非门(反向器)。非门即 y = a,设反相器的VHDL的文件名是not1.vhd,其中的.vhd是VHDL程序文件的扩展名。程序结构如下:-库和程序包部分LIBRARY IEEE; -打开IEEE库USE IEEE.STD_LOGIC_1164.ALL; -调用库中STD_LOGIC_1164程序包 -实体部分ENTITY not1 IS -实体名为 not1PORT ( -端口说明a:IN STD_LOGIC; -定义端口类型和数据类型y:OUT STD

4、_LOGIC);END not1: -实体结束-结构体部分ARCHITECTURE inv OF not1 IS -结构体名为 invBEGINy = NOT a; -将a取反后赋值给输出端口yEND inv; -结构体结束第6章 VHDL硬件描述语言 这是一个完整的VHDL源程序实例。其中的第一部分是库和程序包,是用VHDL编写的共享文件,定义结构体和实体中要用到的数据类型、元件、子程序等,放在名为IEEE的库中。第二部分是实体,相当于定义电路单元的管脚信息。第三部分是结构体,用来描述电路的内部结构和逻辑功能。两条短划线是注释标识符,其右侧内容是对程序的具体注释,并不执行。所有语句都是以“;

5、”结束,另外程序中不区分字母的大小写。第6章 VHDL硬件描述语言6.1.3 VHDL的库和程序包 1库 库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入某个“库”内才可以被其他实体共享。常用的库有IEEE库、STD库和WORK库。库语句格式如下:LIBRARY库名;2程序包 程序包是用VHDL语言编写的一段程序,可以供其他设计单元调用和共享,相当于公用的“工具箱”,各种数据类型、子程序等一旦放入了程序包,就成为共享的“工具”,类似于C语言的头文件,使用它可以减少代码的输入量,使程序结构清晰。程序包

6、分为包头和包体两部分。第6章 VHDL硬件描述语言程序包格式如下。包头格式:PACKAGE程序包名IS包头说明语句END程序包名;包体格式:PACKAGEBODY程序包名IS包体说明语句END程序包名;调用程序包的通用模式为:USE库名.程序包名.ALL;常用预定义程序包有以下四个:(1)STD_LOGIC_1164程序包(2)STD_LOGIC_ARITH程序包(3)STD_LOGIC_SIGNED程序包(4)STD_LOGIC_UNSIGNED程序包第6章 VHDL硬件描述语言6.1.4 VHDL的实体VHDL描述的对象称为实体,是设计中最基本的模块。实体的格式如下:ENTITY实体名IS

7、GENERIC(类属说明)PORT(端口说明)END实体名;1类属说明 类属说明是实体说明的一个可选项(可选项用表示),主要为设计实体指定参数,可以用来定义端口宽度、实体中元件的数目、器件延迟时间等。第6章 VHDL硬件描述语言类属说明语句的格式如下:GENERIC(常数名1:数据类型1:=设定值1;常数名n:数据类型n:=设定值n);2端口说明 端口说明也是实体说明的一个可选项,负责对实体中输入和输出端口进行描述。端口说明语句格式如下:PORT(端口信号名1:端口模式1数据类型1;端口信号名n:端口模式n数据类型n);第6章 VHDL硬件描述语言6.1.5 VHDL的结构体结构体用来描述设计

8、实体的内部结构或行为,是实体的一个重要组成部分,定义了实体的具体功能,规定了实体中的信号数据流程,确定了实体中内部元件的连接关系。结构体用三种方式对设计实体进行描述,分别是行为描述、寄存器传输描述和结构描述。其格式如下:ARCHITECTURE结构体名OF实体名IS结构体说明部分;BEGIN功能描述语句;END结构体名;第6章 VHDL硬件描述语言【例6-4】通过中间信号m实现输入端到输出端的数据传输。ENTITYmybodyIS-实体名为mybodyPORT(in1:INBIT;-定义端口output1:OUTBIT);ENDmybody;ARCHITECTUREmyprogOFmybody

9、IS-结构体名为myprogSIGNALm:BIT;-定义中间信号mBEGINm=in1;-输入信号传送给中间信号output1=m;-中间信号送给输出信号ENDmyprog;第6章 VHDL硬件描述语言6.2 VHDL的数据结构 VHDL定义了常量、变量和信号三种数据对象,并规定每个对象都要有唯一确定的数据类型。6.2.1 标识符 标识符是书写程序时允许使用的一些符号(字符串),主要由26个英文字母、数字09及下划线“_”的组合构成,允许包含图形符号(如回车符、换行符等)。可以用来定义常量、变量、信号、端口、子程序或参数的名字。标识符的命名规则如下:l第一个字符必须以字母开头;下划线不能连用

10、;最后一个字符不能是下划线;对大小写字母不敏感(英文字母不区分大小写);长度不能超过32个字符。第6章 VHDL硬件描述语言6.2.2 数据对象VHDL中凡是可以赋予一个值的对象都可称为数据对象。1常量 常量是在设计实体中保持某一特定值不变的量。常量的格式如下:CONSTANT常量名:数据类型:=表达式; 常量一旦赋值之后,在程序中就不能再改变了。常量的使用范围取决于被定义的位置。常量所赋的值应该与定义的表达式数据类型一致,否则将会出现错误。第6章 VHDL硬件描述语言2变量 变量属于局部量,主要用来暂存数据。变量只能在进程和子程序中定义和使用,可以在变量定义语句中赋初值,但变量初值不是必需的

11、。格式如下:VARIABLE变量名:数据类型约束条件:=表达式;3信号 信号是描述硬件系统的基本数据对象,是设计实体中并行语句模块间的信息交流通道。通常可认为信号是电路中的一根连接线。信号有外部端口信号和内部信号之分:外部端口信号是设计单元电路的管脚或称为端口,在程序实体中定义,有IN、OUT、INOUT、BUFFER四种信号流动方向,其作用是在设计的单元电路之间实现互连。外部端口信号供给整个设计单元使用,属于全局量;信号描述格式如下:SIGNAL信号名:数据类型约束条件:=初始值;第6章 VHDL硬件描述语言在程序中,信号赋值使用符号=,变量赋值使用符号:=,信号与变量都能被连续地赋值,其主

12、要区别如下:l信号赋值有附加延时,变量赋值则没有。l信号可看成硬件的一根连线,变量在硬件中没有类似的对应关系。l对于进程语句,进程只对信号敏感,不对变量敏感。l信号除了具有当前值外还具有一定的历史信息(保存在预定义属性中),变量只有当前值。l在进程中,信号和变量的赋值是不同的,信号的赋值在进程结束时起作用,而变量赋值是立即起作用。第6章 VHDL硬件描述语言6.2.3 数据类型 对于常量、变量和信号这三种数据对象,在为每一种数据对象赋值时都要确定其数据类型。VHDL对数据类型有着很强的约束性,不同的数据类型不能直接运算,相同的类型如果位长不同也不能运算。根据数据产生来源可将数据类型分为预定义类

13、型和用户自定义类型两大类,这两类都在VHDL的标准程序包中作了定义,设计时可随时调用。1预定义数据类型该类型是最常用、最基本的一种数据类型,在标准程序包STANDARD和STDLOGIC_1164及其他程序包中作了定义,已自动包含在VHDL源文件中,不必通过USE语句进行显示调用。第6章 VHDL硬件描述语言具体类型如下:(1)整数类型(INTEGER)(2)自然数(NATURAL)和正整数(POSITIVE)类型(3)实数(REAL)类型(4)位(BIT)类型(5)位向量(BIT_VECTOR)类型(6)布尔量(BOOLEAN)类型(7)字符(CHARACTER)类型(8)字符串(STRIN

14、G)类型(9)时间(TIME)类型(10)错误等级(SEVERITYLEVEL)类型第6章 VHDL硬件描述语言2用户自定义数据类型用户定义的数据类型格式如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或写成下面的格式:TYPE数据类型名IS数据类型定义;VHDL允许用户定义的数据类型主要有枚举类型、数组类型和用户自定义子类型三种。(1)枚举类型(ENUMERATED)枚举类型是在数据类型定义中直接列出数据的所有取值。其格式如下:TYPE数据类型名IS(取值1,取值2,);第6章 VHDL硬件描述语言(2)数组类型(ARRAY)数组类型是将相同类型的数据集合在一起所形成的一个新数据类

15、型,可以是一维的,也可以是多维的。数组类型定义格式如下:TYPE数据类型ISARRAY范围OF数据类型;(3)用户自定义子类型 用户若对自己定义的数据作一些限制,由此就形成了原自定义数据类型的子类型。对于每一个类型说明,都定义了一个范围。子类型的格式如下:SUBTYPE子类型名IS基本数据类型名范围限制;第6章 VHDL硬件描述语言6.2.4 VHDL的表达式VHDL的表达式是将操作数用不同类型的运算符连接而成,其基本元素包括运算符和操作数。1运算符VHDL与其他高级语言相似,有着丰富的运算符,以满足描述不同功能的需要。主要有四类常用的运算符,分别是逻辑运算符、算术运算符、关系运算符和连接(并

16、置)运算符。(1)逻辑运算符VHDL有7种逻辑运算符:AND、OR、NAND、NOR、XOR、XNOR、NOT。第6章 VHDL硬件描述语言(2)关系运算符VHDL有6种关系运算符,是将两个相同类型的操作数进行数值相等比较或大小比较,要求这些关系运算符两边的数据类型必须相同,其运算结果为BOOLEAN类型,即表达式成立结果为TURE、不成立结果为FALSE。(3)移位运算符 移位运算符是VHDL_94新增的运算符,其中SLL(逻辑左移)和SRL(逻辑右移)是逻辑移位、SLA(算术左移)和SRA(算术右移)是算术移位、ROL(循环左移)和ROR(循环右移)是循环移位。(4)符号运算符 +(正号)

17、、-(负号)与日常数值运算相同,主要用于浮点和物理类型运算。第6章 VHDL硬件描述语言(5)连接运算符 连接运算符也称为并置运算符,只有一种符号,用&表示。(6)算术运算符 算术运算符中,单目运算(ABS、*)的操作数可以是任何数据类型、+(加)、-(减)的操作数为整数类型、*(乘)、/(除)的操作数可以为整数或实数。2操作数 操作数是运算符进行运算时所需的数据,操作数将其数值传递给运算符进行运算。操作数种类有多种,最简单的操作数可以是一个数字,或者是一个标识符,如一个变量或者信号的名称。操作数的类型有:常量、变量、信号、表达式、函数、文件等。第6章 VHDL硬件描述语言6.3 6.3 VH

18、DLVHDL的顺序语句的顺序语句 VHDL语句用来描述系统内部硬件结构、动作行为及信号间的基本逻辑关系,这些语句不仅是程序设计的基础,也是最终构成硬件的基础。6.3.1赋值语句赋值语句是将一个值或者一个表达式的结果传递给某一个数据对象。数据在实体内部的传递以及对端口外的传递都必须通过赋值语句来实现。主要有变量赋值语句和信号赋值语句两种。1变量赋值语句 变量的说明和赋值都限定在其定义区域内,无法传递到所定义的区域外,因此具有局部性。第6章 VHDL硬件描述语言变量赋值语句的语法格式如下:目的变量:=变量表达式(赋值源);【例6-5】给变量a赋值。PROCESS-进程VARIABLEa:BIT;-

19、在进程中定义变量aBEGINa:=0;-给变量a赋值为0ENDPROCESS;2信号赋值语句 信号赋值语句具有全局特征,不但可以使数据在设计实体内传递,还可以通过信号的赋值操作与其他实体进行数据交流。第6章 VHDL硬件描述语言信号赋值语句的语法格式如下:目的信号名:=信号表达式(赋值源);【例6-6】设计一个二输入与门电路,输入信号为a、b,输出信号为y。ENTITYandgISPORT(a,b:INBIT;y:OUTBIT);ENDandg;ARCHITECTUREdataOFandgISBEGINPROCESSBEGINy顺序语句1;WHEN条件选择值2=顺序语句2;WHEN条件选择值3

20、=顺序语句3;WHENOTHERS=顺序语句n;ENDCASE;第6章 VHDL硬件描述语言其中WHEN的条件选择值有以下几种形式:l单个数值,如WHEN3。l并列数值,如WHEN1|2,表示取值1或者2。l数值选择范围,如WHEN(1TO3),表示取值为1、2、或者3。l其他取值情况,如WHENOTHERS,常出现在ENDCASE之前,代表已给出的各条件选择值中未能列出的其他可能取值。第6章 VHDL硬件描述语言6.3.4 WAIT语句进程在执行过程中总是处于两种状态:执行或挂起。进程中的敏感信号能够触发进程执行,WAIT语句也能起到与敏感信号同样的作用。(1)无限等待。不设置停止挂起条件的

21、表达式,表示永远挂起。格式如下:WAIT;(2)等待敏感信号变化。格式如下:WAITON信号名,信号名;(3)等待条件满足。格式如下:WAITUNTIL布尔表达式;(4)超时等待。格式如下:WAIT FOR 时间表达式; 第6章 VHDL硬件描述语言6.3.5 子程序 子程序是由一组顺序语句组成的,可以在程序包、结构体和进程中定义,只有定义后才能被主程序调用,子程序将处理结果返回给主程序,主程序和子程序之间通过端口参数关联进行数据传送,其含义与其他高级语言相同。VHDL中的子程序有两种类型:过程和函数。1过程(PROCEDURE)过程的定义语句由两部分组成,即过程首和过程体。过程定义的格式为:

22、PROCEDURE过程名参数列表-过程首PROCEDURE过程名参数列表IS-过程体说明部分;BEGIN顺序语句END过程名;调用过程语句的格式为:过程名参数列表;第6章 VHDL硬件描述语言2函数(FUNCTION)函数语句分为两个部分:函数首和函数体。在进程和结构体中,函数首可以省略,而在程序包中,必须定义函数首,放在程序包的包首部分,而函数体放在包体部分。格式如下:FUNCTION 函数名(参数列表) -函数首RETURN 数据类型名;FUNCTION 函数名(参数列表) -函数体RETURN数据类型名IS说明部分;BEGIN顺序语句;RETURN返回变量;END函数名;调用函数语句的格

23、式为:y=函数名(参数列表);第6章 VHDL硬件描述语言6.3.6 LOOP语句LOOP语句可以使程序有规则地循环执行,循环次数取决于循环参数的取值范围。常用的循环语句有FOR和WHILE两种。1FOR循环FOR循环是一种已知循环次数的语句,其格式如下:循环标号:FOR循环变量IN循环次数范围LOOP顺序语句;ENDLOOP循环标号;2WHILE循环WHILE循环是一种未知循环次数的语句,循环次数取决于条件表达式是否成立。其格式如下:循环标号:WHILE条件表达式LOOP顺序语句;ENDLOOP循环标号;第6章 VHDL硬件描述语言6.3.7 返回语句返回语句是一段子程序结束后,返回主程序的

24、控制语句,返回语句只能用在子程序中。其格式有两种:(1)RETURN;(2)RETURN表达式; 第一种格式语句只能用于过程,无条件地结束过程,不返回任何值;第二种格式语句只能用于函数,其表达式提供函数返回值,每一函数必须包含一个或多个返回语句,但在函数调用时只有一个返回语句能将返回值带回。 可见,RETURN语句在函数和过程中的使用是有区别的。过程中的RETURN语句不能含有表达式,而在函数中的RETURN语句必须含有一个表达式,同时RETURN语句也是结束函数执行的惟一条件。第6章 VHDL硬件描述语言6.4 6.4 VHDLVHDL的并行语句的并行语句 并行语句是VHDL区别于传统软件描

25、述语言最显著的一个方面。各种并行语句在结构体中是同时并发执行的,也就是说,只要某个信号发生变化,都会引起相应语句被执行而产生相应的输出,其执行顺序与书写顺序没有任何关系。在结构体中并行语句的位置如下:ARCHITECTURE结构体名OF实体名IS说明语句;BEGIN并行语句;END结构体名;在结构体中常用的并行语句有:并行信号赋值语句、进程语句、元件例化语句、块语句和生成语句等。第6章 VHDL硬件描述语言6.4.1 并行信号赋值语句并行信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。其共同点是赋值目标必须都是信号,这三种语句与其他并行语句一样,在结构体内是同时执行的。1简单信号赋值语句 简单信号赋值语句的格式为:信号=表达式;2条件信号赋值语句条件信

温馨提示

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

评论

0/150

提交评论