2020/2/9南京理工大学机械工程学院1第四章VHDL硬件描述语言张志安南京理工大学2020/2/9南京理工大学机械工程学院2主要内容4.1VHDL语言概述4.2VHDL语言程序的基本结构4.3VHDL语言的数据类型及运算操作符4.4VHDL语言的顺序描述语句4.5VHDL语言的并发描述语句4.6VHDL语言在数字电路中的应用2020/2/9南京理工大学机械工程学院34.1VHDL语言概述VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage80年代初由美国国防部在实施超高速集成电路(VHSIC)项目时开发的。1987年由IEEE协会批准为IEEE工业标准,称为IEEE1076-1987。各EDA公司相继推出支持VHDL的设计环境。1993年被更新为93标准,即IEEE1076-1993。进一步提高抽象描述层次,扩展系统描述能力。数字电子技术的基本知识回顾组合逻辑电路编码器、译码器、数据选择器、加法器、数值比较器等时序逻辑电路同步时序逻辑电路异步时序逻辑电路寄存器、移位寄存器、计数器、序列信号发生器一、传统设计方法(1)首先确定可用的元器件;(2)根据这些器件进行逻辑设计,完成各模块;(3)将各模块进行连接,最后形成系统;(4)而后经调试、测量观察整个系统是否达到规定的性能指标。传统的设计方法是基于中小规模集成电路器件进行设计(如74系列及其改进系列、74HC系列等都属于通用型数字集成电路),而且是采用自底向上进行设计:EDA(ElectronicsDesignAutomation)即电子设计自动化技术,是利用计算机工作平台,从事电子系统和电路设计的一项技术。EDA技术为电子系统设计带来了这样的变化:(1)设计效率提高,设计周期缩短;(2)设计质量提高;(3)设计成本降低;(4)能更充分地发挥设计人员的创造性;(5)设计成果的重用性大大提高,省去了不必要的重复劳动。二、EDA设计方法自顶向下的设计方法数字电路的EDA设计是基于PLD进行设计的,支持自顶向下的设计方法:(1)首先从系统设计入手,在顶层进行功能划分和结构设计;(2)然后再逐级设计底层的结构;(3)并在系统级采用仿真手段验证设计的正确性;(4)最后完成整个系统的设计,实现从设计、仿真、测试一体化。传统设计方法vsEDA设计方法传统设计方法EDA设计方法自底向上手动设计软硬件分离原理图设计方式系统功能固定不易仿真难测试修改模块难移植共享设计周期长自顶向下自动设计打破软硬件屏障原理图、HDL等设计方式系统功能易改易仿真易测试修改模块可移植共享设计周期短三、PLD器件如果能把所设计的数字系统做成一片大规模集成电路,则不仅能减小电路的体积、重量、功耗,而且会使电路的可靠性大为提高。为某种专门用途而设计的集成电路叫做专用集成电路,即所谓的ASIC(ApplicationSpecificIntegratedCircuit的缩写)。在用量不大的情况下,设计和制造这样的专用集成电路成本很高,而且设计、制造的周期也较长。可编程逻辑器件的研制成功为解决上述问题提供了比较理想的途径。(一)出现的背景(二)PLD概述PLD:可编程逻辑器件(ProgrammableLogicDevice)可编程逻辑器件是一种数字集成电路的半成品,在其芯片上按一定排列方式集成了大量的逻辑门和触发器等基本逻辑元件。通过编程可以设置其逻辑功能。PLD编程:利用开发工具对PLD进行加工,即按设计要求将这些片内的元件连接起来,使之完成某个逻辑电路或系统的功能,成为一个专用集成电路(ASIC—ApplicationSpecificIntegratedCircuit)。PLD开发系统PLD开发系统包括硬件和软件两部分。硬件部分:计算机、下载电缆或编程器;软件部分:集成开发系统。Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem2020/2/9南京理工大学机械工程学院12四、PLD设计流程设计准备设计输入设计处理器件编程功能仿真时序仿真器件测试1、PLD设计准备在设计之前,首先要进行方案论证和器件选择等设计准备工作。设计者首先要根据任务要求,判断系统的可行性。系统的可行性要受到逻辑要求合理性、成本、开发条件、器件供应等方面的约束。若系统可行,则根据系统所完成的功能及复杂程度,对器件本身的资源和成本、工作速度及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。2、设计输入将所设计的电路的逻辑功能按照开发系统要求的形式表达出来的过程称为设计输入。通常,设计输入有如下三种方式:(1)原理图输入方式适用于对系统及各部分电路很熟悉的场合。(2)硬件描述语言输入方式硬件描述语言是用文本方式描述设计,硬件描述语言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成为IEEE标准。(3)波形输入方式3、设计处理逻辑优化把逻辑描述转变为最适合在器件中实现的形式,优化使设计所占用的资源最少。逻辑综合根据设计描述,对给定的硬件结构组件,最终获得门级电路甚至更底层的电路描述文件,即将多个模块化设计文件合并为一个网表文件。适配确定优化后的逻辑能否与器件中的宏单元和I/O单元适配。分割将大的设计分割为多个便于器件内部资源实现的逻辑小块的形式。2020/2/9南京理工大学机械工程学院164、设计校验设计校验过程包括功能仿真和时序仿真。功能仿真时序仿真5、器件编程器件编程就是将开发系统生成的目标文件下载到可编程逻辑器件中,来定义内部模块的逻辑功能以及它们的相互连接关系。两种编程方式:编程器下载电缆返回2020/2/9南京理工大学机械工程学院174.2VHDL语言程序的基本结构Librarystd;Usestd.standard.all;Entityand2isPort(a,b:inbit;c:outbit);Endand2;Architecturea1ofand2isBeginc=aandb;Enda1;VHDL程序库、包集合实体(Entity)结构体(Architecture)进程或其它并行结构配置(Configuration)2020/2/9南京理工大学机械工程学院18库(Library)是经编译后的数据的集合,它用于存放包集合定义、实体定义、构造体定义和配置定义。声明格式:Library库名;(1)库(Library)4.2VHDL语言程序的基本结构VHDL库可分为5种:1)IEEE库2)STD库(标准库)3)面向ASIC的库4)WORK库(默认库)5)用户定义库2020/2/9南京理工大学机械工程学院194.2VHDL语言程序的基本结构(2)包集合(Package)包集合(Package)中定义了基本的常数、信号、数据类型、元件语句、函数定义及过程定义等。是库结构中的一个层次。声明格式:use库名.包集合名.项目名;use库名.PACKAGE名.All;包集合的结构包括:包集合标题(包首)包集合主体(包体)2020/2/9南京理工大学机械工程学院20package包集合名is{包说明项}end包集合名;4.2VHDL语言程序的基本结构(2)包集合(Package)packagebody包集合名is{包体说明项}end包集合名;包集合标题包集合主体包集合体并非必须,只有在包集合中要说明子程序时,包集合体才是必须的。2020/2/9南京理工大学机械工程学院21作用:ENTITY(实体)用于定义电路的外观,即I/O端口的类型和数量。定义格式:Entity实体名isPort(a:inbit;b:inbit;c:outbit);End实体名;(3)实体(ENTITY)定义区端口名数据类型端口模式4.2VHDL语言程序的基本结构:;2020/2/9南京理工大学机械工程学院22端口说明(PORT)端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。其一般书写格式为:PORT(端口名:端口模式数据类型;端口名:端口模式数据类型;……);(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构2020/2/9南京理工大学机械工程学院23标识符的定义原则:(1)标识符由字母、数字和下划线组成,a_7;(2)标识符不区分大小写,ab和AB是一样的;(3)第一个字符必须是字母,即a666;(4)不允许有两个连续的下划线,a__b错误;(5)末尾不能是下划线,mname_错误;(6)标识符不能和关键字相同,如Entity,is等。(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构2020/2/9南京理工大学机械工程学院24端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER端口模式可用下图说明:(黑框代表一个设计或模块)INOUTBUFFERINOUT(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构2020/2/9南京理工大学机械工程学院25(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构输入(IN)允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。输出(OUT)输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。2020/2/9南京理工大学机械工程学院26(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构双向模式(INOUT)双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。缓冲(BUFFER)缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。2020/2/9南京理工大学机械工程学院27(3)实体(ENTITY)定义区4.2VHDL语言程序的基本结构out和buffer的区别:2020/2/9南京理工大学机械工程学院28结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。(4)结构体(ARCHITECTURE)定义区4.2VHDL语言程序的基本结构2020/2/9南京理工大学机械工程学院29(4)结构体(ARCHITECTURE)定义区定义格式:Architecture结构体名of实体名is[声明语句;(内部信号、变量、常数,元件,子程序声明)]Begin并行描述语句;End结构体名;4.2VHDL语言程序的基本结构2020/2/9南京理工大学机械工程学院30结构体(ARCHITECTURE)说明语句功能描述语句块语句(BLOCK)进程语句(PROCESS)信号赋值语句子程序调用语句元件例化语句结构体(ARCHITECTURE)构造图2020/2/9南京理工大学机械工程学院31图中5种功能描述语句的基本组成和功能分别是:块语句是由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块。进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值。信号赋值语句将设计实体内的处理结果向定义的信号或