VHDL硬件描述语言.ppt
《VHDL硬件描述语言.ppt》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言.ppt(47页珍藏版)》请在三一文库上搜索。
1、第6章 VHDL硬件描述语言,本章要点 VHDL语言的数据结构 VHDL语言的顺序语句和并行语句 VHDL程序设计,6.1 VHDL概述,6.1.1 VHDL的特点 (1)作为HDL的第一个国际标准,VHDL具有很强的可移植性。 (2)具有丰富的模拟仿真语句和库函数 。 (3)VHDL有良好的可读性,接近高级语言,容易理解。 (4)系统设计与硬件结构无关。 (5)支持模块化设计。 (6)用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。 (7)设计灵活,修改方便。,用VHDL设计电路主要的工作过程是: 编辑 、编译、功能仿真(前仿真)、综合 、布局、布
2、线 、后仿真(时序仿真)。,6.1.2 VHDL的基本结构,一个VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE)。除实体和结构体外,多数程序还要包含库和程序包部分。实体中定义了一个设计模块的外部输入和输出端口,即模块(或元件)的外部特征,描述了一个元件或一个模块与其他部分(模块)之间的连接关系,可以看作是输入输出信号和芯片管脚信息。结构体主要用来说明元件内部的具体结构,即对元件内部的逻辑功能进行说明,是程序设计的核心部分。库是程序包的集合,不同的库有不同类型的程序包。程序包用来定义结构体和实体中要用到的数据类型、元件和子程序等。,【例6-1】用VHDL设计一个非门(
3、反向器)。 非门即 y = a,设反相器的VHDL的文件名是not1.vhd,其中的.vhd是VHDL程序文件的扩展名。程序结构如下: -库和程序包部分 LIBRARY IEEE; -打开IEEE库 USE IEEE.STD_LOGIC_1164.ALL; -调用库中STD_LOGIC_1164程序包 -实体部分 ENTITY not1 IS -实体名为 not1 PORT ( -端口说明 a:IN STD_LOGIC; -定义端口类型和数据类型 y:OUT STD_LOGIC); END not1: -实体结束 -结构体部分 ARCHITECTURE inv OF not1 IS -结构体名
4、为 inv BEGIN y = NOT a; -将a取反后赋值给输出端口y END inv; -结构体结束,这是一个完整的VHDL源程序实例。其中的第一部分是库和程序包,是用VHDL编写的共享文件,定义结构体和实体中要用到的数据类型、元件、子程序等,放在名为IEEE的库中。第二部分是实体,相当于定义电路单元的管脚信息。第三部分是结构体,用来描述电路的内部结构和逻辑功能。两条短划线是注释标识符,其右侧内容是对程序的具体注释,并不执行。所有语句都是以“;”结束,另外程序中不区分字母的大小写。,6.1.3 VHDL的库和程序包,1库 库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包
5、的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入某个“库”内才可以被其他实体共享。常用的库有IEEE库、STD库和WORK库。库语句格式如下: LIBRARY 库名 ; 2程序包 程序包是用VHDL语言编写的一段程序,可以供其他设计单元调用和共享,相当于公用的“工具箱”,各种数据类型、子程序等一旦放入了程序包,就成为共享的“工具”,类似于C语言的头文件,使用它可以减少代码的输入量,使程序结构清晰。程序包分为包头和包体两部分。,程序包格式如下。 包头格式:PACKAGE 程序包名 IS 包头说明语句 END 程序包名; 包体格式: PACKAGE BODY 程序包名
6、 IS 包体说明语句 END 程序包名; 调用程序包的通用模式为:USE 库名.程序包名.ALL; 常用预定义程序包有以下四个: (1)STD_LOGIC_1164程序包 (2)STD_LOGIC_ARITH程序包 (3)STD_LOGIC_SIGNED程序包 (4)STD_LOGIC_UNSIGNED程序包,6.1.4 VHDL的实体,VHDL描述的对象称为实体,是设计中最基本的模块。实体的格式如下: ENTITY 实体名 IS GENERIC(类属说明) PORT(端口说明) END 实体名; 1类属说明 类属说明是实体说明的一个可选项(可选项用表示),主要为设计实体指定参数,可以用来定义
7、端口宽度、实体中元件的数目、器件延迟时间等。,类属说明语句的格式如下: GENERIC(常数名1:数据类型1:= 设定值1; ; 常数名n:数据类型n:= 设定值n); 2端口说明 端口说明也是实体说明的一个可选项,负责对实体中输入和输出端口进行描述。端口说明语句格式如下: PORT(端口信号名1:端口模式1 数据类型1; ; 端口信号名n:端口模式n 数据类型n);,6.1.5 VHDL的结构体,结构体用来描述设计实体的内部结构或行为,是实体的一个重要组成部分,定义了实体的具体功能,规定了实体中的信号数据流程,确定了实体中内部元件的连接关系。结构体用三种方式对设计实体进行描述,分别是行为描述
8、、寄存器传输描述和结构描述。其格式如下: ARCHITECTURE 结构体名 OF 实体名 IS 结构体说明部分; BEGIN 功能描述语句; END 结构体名;,【例6-4】通过中间信号m实现输入端到输出端的数据传输。 ENTITY mybody IS -实体名为mybody PORT( in1 :IN BIT; -定义端口 output1 :OUT BIT ); END mybody; ARCHITECTURE myprog OF mybody IS -结构体名为myprog SIGNAL m:BIT; -定义中间信号m BEGIN m = in1; -输入信号传送给中间信号 output
9、1 = m; -中间信号送给输出信号 END myprog;,6.2 VHDL的数据结构,VHDL定义了常量、变量和信号三种数据对象,并规定每个对象都要有唯一确定的数据类型。 6.2.1 标识符 标识符是书写程序时允许使用的一些符号(字符串),主要由26个英文字母、数字09及下划线“_”的组合构成,允许包含图形符号(如回车符、换行符等)。可以用来定义常量、变量、信号、端口、子程序或参数的名字。标识符的命名规则如下: l 第一个字符必须以字母开头;下划线不能连用;最后一个字符不能是下划线;对大小写字母不敏感(英文字母不区分大小写);长度不能超过32个字符。,6.2.2 数据对象 VHDL中凡是可
10、以赋予一个值的对象都可称为数据对象。 1常量 常量是在设计实体中保持某一特定值不变的量。常量的格式如下: CONSTANT 常量名:数据类型:= 表达式; 注意:数值和单位之间要留空格 常量一旦赋值之后,在程序中就不能再改变了。常量的使用范围取决于被定义的位置。常量所赋的值应该与定义的表达式数据类型一致,否则将会出现错误。,2变量 变量属于局部量,主要用来暂存数据。变量只能在进程和子程序中定义和使用,可以在变量定义语句中赋初值,但变量初值不是必需的。格式如下: VARIABLE 变量名:数据类型 约束条件:= 表达式;3信号 信号是描述硬件系统的基本数据对象,是设计实体中并行语句模块间的信息交
11、流通道。通常可认为信号是电路中的一根连接线。信号有外部端口信号和内部信号之分:外部端口信号是设计单元电路的管脚或称为端口,在程序实体中定义,有IN、OUT、INOUT、BUFFER四种信号流动方向,其作用是在设计的单元电路之间实现互连。外部端口信号供给整个设计单元使用,属于全局量;信号描述格式如下: SIGNAL 信号名:数据类型 约束条件:= 初始值;,在程序中,信号赋值使用符号=,变量赋值使用符号:=,信号与变量都能被连续地赋值,其主要区别如下: l 信号赋值有附加延时,变量赋值则没有。 l 信号可看成硬件的一根连线,变量在硬件中没有类似的对应关系。 l 对于进程语句,进程只对信号敏感,不
12、对变量敏感。 l 信号除了具有当前值外还具有一定的历史信息(保存在预定义属性中),变量只有当前值。 l 在进程中,信号和变量的赋值是不同的,信号的赋值在进程结束时起作用,而变量赋值是立即起作用。,6.2.3 数据类型 对于常量、变量和信号这三种数据对象,在为每一种数据对象赋值时都要确定其数据类型。VHDL对数据类型有着很强的约束性,不同的数据类型不能直接运算,相同的类型如果位长不同也不能运算。根据数据产生来源可将数据类型分为预定义类型和用户自定义类型两大类,这两类都在VHDL的标准程序包中作了定义,设计时可随时调用。 1预定义数据类型 该类型是最常用、最基本的一种数据类型,在标准程序包STAN
13、DARD和STD LOGIC_ 1164及其他程序包中作了定义,已自动包含在VHDL源文件中,不必通过USE语句进行显示调用。,具体类型如下: (1)整数类型(INTEGER) (2)自然数(NATURAL)和正整数(POSITIVE)类型 (3)实数(REAL)类型 (4)位(BIT)类型 (5)位向量(BIT_VECTOR)类型 (6)布尔量(BOOLEAN)类型 (7)字符(CHARACTER)类型 (8)字符串(STRING)类型 (9)时间(TIME)类型 (10)错误等级(SEVERITY LEVEL)类型,2用户自定义数据类型 用户定义的数据类型格式如下: TYPE 数据类型名
14、IS 数据类型定义 OF 基本数据类型; 或写成下面的格式: TYPE 数据类型名 IS 数据类型定义; VHDL允许用户定义的数据类型主要有枚举类型、数组类型和用户自定义子类型三种。 (1)枚举类型(ENUMERATED) 枚举类型是在数据类型定义中直接列出数据的所有取值。其格式如下: TYPE 数据类型名 IS(取值1,取值2,);,(2)数组类型(ARRAY) 数组类型是将相同类型的数据集合在一起所形成的一个新数据类型,可以是一维的,也可以是多维的。数组类型定义格式如下: TYPE 数据类型 IS ARRAY 范围 OF 数据类型; (3)用户自定义子类型 用户若对自己定义的数据作一些限
15、制,由此就形成了原自定义数据类型的子类型。对于每一个类型说明,都定义了一个范围。子类型的格式如下: SUBTYPE 子类型名 IS 基本数据类型名 范围限制;,6.2.4 VHDL的表达式 VHDL的表达式是将操作数用不同类型的运算符连接而成,其基本元素包括运算符和操作数。 1运算符 VHDL与其他高级语言相似,有着丰富的运算符,以满足描述不同功能的需要。主要有四类常用的运算符,分别是逻辑运算符、算术运算符、关系运算符和连接(并置)运算符 。 (1)逻辑运算符 VHDL有7种逻辑运算符:AND、OR、NAND、NOR、XOR、XNOR、NOT。,(2)关系运算符 VHDL有6种关系运算符,是将
16、两个相同类型的操作数进行数值相等比较或大小比较,要求这些关系运算符两边的数据类型必须相同,其运算结果为BOOLEAN类型,即表达式成立结果为TURE、不成立结果为FALSE。 (3)移位运算符 移位运算符是VHDL_94新增的运算符,其中SLL(逻辑左移)和SRL(逻辑右移)是逻辑移位、SLA(算术左移)和SRA(算术右移)是算术移位、ROL(循环左移)和ROR(循环右移)是循环移位。 (4)符号运算符 +(正号)、-(负号)与日常数值运算相同,主要用于浮点和物理类型运算。,(5)连接运算符 连接运算符也称为并置运算符,只有一种符号,用&表示。 (6)算术运算符 算术运算符中,单目运算(ABS
17、、*)的操作数可以是任何数据类型、+(加)、-(减)的操作数为整数类型、*(乘)、/(除)的操作数可以为整数或实数。 2操作数 操作数是运算符进行运算时所需的数据,操作数将其数值传递给运算符进行运算。操作数种类有多种,最简单的操作数可以是一个数字,或者是一个标识符,如一个变量或者信号的名称。操作数的类型有:常量、变量、信号、表达式、函数、文件等。,6.3 VHDL的顺序语句,VHDL语句用来描述系统内部硬件结构、动作行为及信号间的基本逻辑关系,这些语句不仅是程序设计的基础,也是最终构成硬件的基础。 6.3.1 赋值语句 赋值语句是将一个值或者一个表达式的结果传递给某一个数据对象。数据在实体内部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 硬件 描述 语言
链接地址:https://www.31doc.com/p-2895113.html