




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.1 VHDL概述6.1.1 VHDL的特点VHDL是一种用普通文本形式设计数字系统的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口,可以在任何文字处理软件环境中编辑。除了含有许多具有硬件特征的语句外,其形式、描述风格及语法十分类似于计算机高级语言。VHDL程序将一项工程设计项目(或称设计实体)分成描述外部端口信号的可视部分和描述端口信号之间逻辑关系的内部不可视部分,这种将设计项目分成内、外两个部分的概念是硬件描述语言(HDL)的基本特征。当一个设计项目定义了外部界面(端口),在其内部设计完成后,其他的设计就可以利用外部端口直接调用这个项目。VHDL的主要特点如下:(1)作为HDL的第一个国际标准,VHDL具有很强的可移植性。(2)具有丰富的模拟仿真语句和库函数,随时可对设计进行仿真模拟,因而能将设计中的错误消除在电路系统装配之前,在设计早期就能检查设计系统功能的可行性,有很强的预测能力。(3)VHDL有良好的可读性,接近高级语言,容易理解。(4)系统设计与硬件结构无关,方便了工艺的转换,也不会因工艺变化而使描述过时。(5)支持模块化设计,可将大规模设计项目分解成若干个小项目,还可以把已有的设计项目作为一个模块调用。(6)对于用VHDL完成的一个确定设计,可以利用EDA工具进行逻辑综合和优化,并能自动地把VHDL描述转变成门电路级网表文件。(7)设计灵活,修改方便,同时也便于设计结果的交流、保存和重用,产品开发速度快,成本低。VHDL是一种快速的电路设计工具,其功能涵盖了电路描述、电路合成、电路仿真等设计工作。VHDL具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门电路级三个不同层次的设计,能够完成从上层到下层(从抽象到具体)逐层描述的结构化设计思想。用VHDL设计电路主要的工作过程是:1)编辑。用文本编辑器输入设计的源文件(为了提高输入效率,可用某些专用编辑器)。2)编译。用编译工具将文本文件编译成代码文件,并检查语法错误。3)功能仿真(前仿真)。在编译前进行逻辑功能验证,此时的仿真没有延时,对于初步的功能检测非常方便。4)综合。将设计的源文件用自动综合工具由语言转换为实际的电路图(门电路级网表),但此时还没有在芯片中形成真正的电路,就好像是把设计者脑海中的电路画成了原理图。5)布局、布线。用已生成的网表文件,再根据CPLD(或FPGA)器件的容量和结构,用自动布局布线工具进行电路设计。首先根据网表文件内容和器件结构确定逻辑门的位置,然后再根据网表提供的门连接关系,把各个门的输入输出连接起来,类似于设计PCB(印刷电路板)时的布局布线工作。最后生成一个供器件编程(或配置)的文件,同时还会在设计项目中增加一些时序信息,以便于后仿真。6)后仿真(时序仿真)。这是与实际器件工作情况基本相同的仿真,用来确定设计在经过布局、布线之后,是否仍能满足设计要求。如果设计的电路时延满足要求,则可以进行器件编程(或配置)。6.1.2 VHDL的基本结构一个VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE)。一个设计实体可看成一个盒子,通过它只能了解其外部输入及输出端口,无法知道盒子里的东西,而结构体则用来描述盒子内部的详细内容。至于完整的VHDL程序是什么样,实际上并没有统一的标准,因为不同的程序设计目的可以有不同的程序结构。除实体和结构体外,多数程序还要包含库和程序包部分。实体中定义了一个设计模块的外部输入和输出端口,即模块(或元件)的外部特征,描述了一个元件或一个模块与其他部分(模块)之间的连接关系,可以看作是输入输出信号和芯片管脚信息。一个设计可以有多个实体,只有处于最高层的实体称为顶层实体,EDA工具的编译和仿真都是对顶层实体进行的。处于低层的各个实体都可作为单个元件,被高层实体调用。结构体主要用来说明元件内部的具体结构,即对元件内部的逻辑功能进行说明,是程序设计的核心部分。库是程序包的集合,不同的库有不同类型的程序包。程序包用来定义结构体和实体中要用到的数据类型、元件和子程序等。【例6-1】用VHDL设计一个非门(反向器)。非门即 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_LOGIC);END not1; -实体结束-结构体部分ARCHITECTURE inv OF not1 IS -结构体名为 invBEGINy = NOT a; -将a取反后赋值给输出端口yEND inv; -结构体结束这是一个完整的VHDL源程序实例。其中的第一部分是库和程序包,是用VHDL编写的共享文件,定义结构体和实体中要用到的数据类型、元件、子程序等,放在名为IEEE的库中。第二部分是实体,相当于定义电路单元的管脚信息。实体名是自己任意取的,但要注意要与项目名和文件名相同,并符合标识符规则。实体以ENTITY开头,以END结束。第三部分是结构体,用来描述电路的内部结构和逻辑功能。结构体名也是任意取的,结构体以ARCHITECTURE开头,以END结束。BEGIN是开始描述实体端口逻辑关系的标志,有行为描述、数据流(也称寄存器)描述和结构描述三种描述方式,这里采用的是数据流描述方式。符号=是信号赋值运算符,从电路角度看就是表示信号传输;NOT是关键字,表示取反(对后面的信号a操作),结构体实现了将a取反后传送到输出端y的功能。两条短划线是注释标识符,其右侧内容是对程序的具体注释,并不执行。所有语句都是以分号结束,另外程序中不区分字母的大小写。【例6-2】用VHDL设计一个将输入端信号直接送到输出端输出的程序。ENTITY mybody IS -mybody是实体名PORT ( -定义端口in1 :IN BIT; output1 :OUT BIT ); END mybody; -实体结束 ARCHITECTURE myprog OF mybody IS -结构体名myprog BEGIN -结构体开始output1 = in1; -输入状态直接送到输出END myprog; -结构体结束程序的15行构成实体部分,mybody是实体名。PORT是关键字(或保留字),定义了实体(元件)的端口(相当于管脚)信息。in1是一个管脚(位信号)名称,自己定义,IN表示信号传输方向是输入,BIT是数据类型名称,其取值范围是0、1。output1也是一个管脚名称,OUT表示输出。END是结束标志,只有一个实体时其右边的实体名称mybody可以省略。程序的69行构成结构体部分,OF mybody说明结构体是属于实体mybody,OF右边的实体名称必须与实体部分的实体名称相同。BEGIN是结构体开始的标志,该关键字是必须的。END myprog是结构体结束标志,只有一个结构体时结构体名myprog可省略。由于例6-2实体中信号使用的数据类型(BIT)和结构体中的运算符(=)都是默认类型,所以程序文件可省略库和程序包。6.1.3 VHDL的库和程序包1库库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入某个“库”内才可以被其他实体共享。库的说明总是放在设计单元的最前面,表示该库资源对以下的设计单元开放。库语句格式如下:LIBRARY 库名 ;常用的库有IEEE库、STD库和WORK库。(1)IEEE库:是VHDL设计中最常用的资源库,包含IEEE标准的STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD以及其他一些支持工业标准的程序包。其中最重要和最常用的是STD_LOGIC_1164程序包,大部分程序都是以此程序包中设定的标准为设计基础。(2)STD库:是VHDL的标准库,VHDL在编译过程中会自动调用这个库,所以使用时不需要用语句另外说明。(3)WORK库:是用户在进行VHDL设计时的现行工作库,用户的设计成果将自动保存在这个库中,是用户自己的仓库,同STD库一样,使用该库不需要任何说明。2程序包程序包是用VHDL语言编写的一段程序,可以供其他设计单元调用和共享,相当于公用的“工具箱”,各种数据类型、子程序等一旦放入了程序包,就成为共享的“工具”,类似于C语言的头文件,使用它可以减少代码的输入量,使程序结构清晰。在一个设计中,实体部分所定义的数据类型、常量和子程序可以在相应的结构体中使用,但在一个实体的声明部分和结构体部分中定义的数据类型、常量及子程序却不能被其他设计单元使用。因此,程序包的作用是可以使一组数据类型、常量和子程序能够被多个设计单元使用。程序包分为包头和包体两部分。包头(也称程序包说明)是对包中使用的数据类型、元件、函数和子程序进行定义,其形式与实体定义类似。包体规定了程序包的实际功能,存放函数和过程的程序体,而且还允许建立内部的子程序、内部变量和数据类型。包头、包体均以关键字PACKAGE开头。程序包格式如下。包头格式:PACKAGE 程序包名 IS包头说明语句END 程序包名;包体格式:PACKAGE BODY 程序包名 IS包体说明语句END 程序包名;调用程序包的通用模式为:USE 库名.程序包名.ALL;常用预定义程序包有以下四个:(1)STD_LOGIC_1164程序包STD_LOGIC_1164程序包定义了一些数据类型、子类型和函数。数据类型包括:STD_ULOGIC、STD_ULOGIC _VECTOR、STD_LOGIC和STD_LOGIC _VECTOR,用的最多最广的是STD_LOGIC和STD_LOGIC_VECTOR数据类型。调用STD_LOGIC_1164程序包中的项目需要使用以下语句:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;该程序包预先在IEEE库中编译,是IEEE库中最常用的标准程序包,其数据类型能够满足工业标准,非常适合CPLD(或FPGA)器件的多值逻辑设计结构。(2)STD_LOGIC_ARITH程序包该程序包是美国Synopsys公司的程序包,预先编译在IEEE库中。主要是在STD_LOGIC_1164程序包的基础上扩展了UNSIGNED(无符号)、SIGNED(符号)和SMALL_INT(短整型)三个数据类型,并定义了相关的算术运算符和转换函数。(3)STD_LOGIC_SIGNED程序包该程序包预先编译在IEEE库中,也是Synopsys公司的程序包。主要定义有符号数的运算,重载后可用于INTEGER(整数)、STD_LOGIC(标准逻辑位)和STD_LOGIC _VECTOR(标准逻辑位向量)之间的混合运算,并且定义了STD_LOGIC _VECTOR到INTEGER的转换函数。(4)STD_LOGIC_UNSIGNED程序包该程序包用来定义无符号数的运算,其他功能与STD_LOGIC_SIGNED相似。6.1.4 VHDL的实体VHDL描述的对象称为实体,是设计中最基本的模块。实体提供一个设计单元的公共信息(相当于方框图)。实体具体代表什么几乎没有限制,可以是任意复杂的系统、一块电路板、一个芯片、一个单元电路等等。如果对系统自顶向下分层来划分模块,则各层的设计模块都可作为实体。实体的格式如下:ENTITY 实体名 ISGENERIC(类属说明)PORT(端口说明) END 实体名;实体名代表该电路的元件名称,所以最好根据电路功能来定义。例如:对于4位二进制计数器,实体名可以定义为counter4b,这样容易分析程序。1类属说明类属说明是实体说明的一个可选项(可选项用表示),主要为设计实体指定参数,可以用来定义端口宽度、实体中元件的数目、器件延迟时间等。使用类属说明可以使设计具有通用性。例如,在设计中有一些参数事先不能确定,为了简化设计和减少VHDL源代码的书写量,通常编写通用的VHDL源代码,源代码中这些参数是待定的,在仿真时只要用GENERIC语句将待定参数初始化即可。下面是一个使用类属说明的例子。【例6-3】设计一个二输入与门,两个信号相与后,经过指定的延迟时间才送到输出端。其实体与结构体如下:ENTITY gand2 IS -实体名为andGENERIC (delay:TIME); -类属说明,delay是常数名,为时间类型 PORT ( a,b :IN BIT;c :OUT BIT);END gand2;ARCHITECTURE behave OF gand2 ISBEGINc = a AND b AFTER ( delay ); -a和b与运算后,延迟delay输出END behave;实际器件从输入到输出必然存在延时,但不同型号器件的延迟时间不同,因此可以在源代码中用类属说明语句指定待定参数。AFTER是关键字,表示延迟。当调用这个二输入与门元件时,可以使用GENERIC语句将参数初始化为不同的值。类属说明一定放在端口说明的前面。类属说明语句的格式如下:GENERIC(常数名1:数据类型1:= 设定值1;常数名n:数据类型n:= 设定值n);如上例改写成:GENERIC(delay:TIME:= 10 ns);表示a和b与运算后经10 ns延时才输出。2端口说明端口说明也是实体说明的一个可选项,负责对实体中输入和输出端口进行描述。实体与外界交流的信息必须通过端口输入或输出,端口的功能相当于元件的一个管脚。实体中的每一个输入、输出信号都被称为一个端口,一个端口就是一个数据对象。端口可以被赋值,也可以作为信号用在逻辑表达式中。端口说明语句格式如下:PORT(端口信号名1:端口模式1 数据类型1;端口信号名n:端口模式n 数据类型n);端口信号名是设计者为实体的每一个对外通道所取的名字;端口模式是指这些通道上的信号传输方向,共有四种传输方向,如表6-1所示。表6-1 端口信号传输方向方向定义说明IN单向输入模式,将变量或信号信息通过该端口读入实体OUT单向输出模式,信号通过该端口从实体输出INOUT双向输入输出模式,既可以输入端口,还可以输出端口BUFFER缓冲输出模式,具有回读功能的输出模式,可以输入端口,也可以输出端口其中,IN相当于电路中的只允许输入的管脚;OUT相当于只允许输出的管脚;INOUT相当于双向管脚,是在普通输出端口基础上增加了一个三态输出缓冲器和一个输入缓冲器构成的,既可以作输入端口,也可以作输出端口;BUFFER是带有输出缓冲器并可以回读的管脚,是INOUT的子集,BUFFER作输入端口使用时,信号不是由外部输入,而是从输出端口反馈得到,即BUFFER类的信号在输出到外部电路的同时,也可以被实体本身的结构体读入,这种类型的信号常用来描述带反馈的逻辑电路,如计数器等。数据类型指的是端口信号的类型,常用数据类型如表6-2所示。表6-2 常用端口数据类型关键字说明BOOLEAN布尔类型,取值有FALSE、TRUE两种,只用于关系运算,不能用于计算BIT二进制位类型,取值只能是0、1,由STANDARD程序包定义BIT_VECTOR位向量类型,表示一组二进制数,常用来描述地址总线、数据总线等端口STD_LOGIC工业标准的逻辑类型,取值0、1、X、Z等,由STD_LOGIC_1164程序包定义STD_LOGIC_VECTOR工业标准的逻辑向量类型,是STD_LOGIC的组合INTEGER整数类型,可用作循环的指针或常数,通常不用作I/O信号6.1.5 VHDL的结构体一个实体中可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国甘肃版信息技术六年级下册新授课 第11课聆听你的声音 教学设计
- 六、有教无类教学设计-2025-2026学年高中语文人教版选修先秦诸子选读-人教版
- 人教版高中化学选修3导学案第一章第1、2、3三课时第一节原子结构教学设计
- 2025年中考化学试题分类汇编:溶液(第2期)原卷版
- 蓄电池相关知识培训内容课件
- 2.1 计算机解决问题的过程 教学设计 2023-2024学年高中信息技术教科版(2019)必修1
- 2025年标准礼仪试题及答案
- 2025年北京市高考物理试卷(附答案)
- Unit 5 Wonders of Our Body教学设计-2025-2026学年高中英语高二下册重庆大学版
- 2025-2026学年地质版(2024)小学体育与健康二年级全一册《关注眼睛健康》教学设计
- 临床患者走失事件的应急预案
- 实验室用电安全
- 全员应急教育与培训
- 中华人民共和国工会法课件
- 路灯灯杆项目投资计划书
- 环保项目配电室电气安装方案
- 新概念第二册单词表(完整版)
- 初三考试化学试卷(含答案)
- 2024-2025学年小学信息技术(信息科技)五年级全一册义务教育版(2024)教学设计合集
- 【新课标】人音版五年级上册第一单元 朝夕 大单元整体教学设计
- 自然保护区管理中的生态系统恢复策略
评论
0/150
提交评论