您好,欢迎访问三七文档
18第二章VHDL语言简介2.1VHDL语言的优点和设计特点2.1.1VHDL语言的优点传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计。采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便。为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发周期,各ASIC研制和生产厂家相继开发了具有自己特色的电路硬件描述语言(HardwareDescriptionLanguage,简称HDL)。但这些硬件描述语言差异很大,各自只能在自己的特定设计环境中使用,这给设计者之间的相互交流带来了极大的困难。因此,开发一种强大的、标准化的硬件描述语言作为可相互交流的设计环境已势在必行。于是,美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门级电路,最后用PLD实现其功能。综合起来讲,VHDL语言具有如下优点:1.覆盖面广,描述能力强,是一个多层次的硬件描述语言。在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。2.具有良好的可读性,即容易被计算机接受,也容易被读者理解。3.使用期长,不会因工艺变化而使描述过时。因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。4.支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。2.1.2利用VHDL语言设计数字系统的特点当电路系统采用VHDL语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点:一.采用自上而下的设计方法。即从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述19的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。应用逻辑综合工具产生的门级网络表,将其转换成PLD的编程码点,即可利用PLD实现硬件电路的设计。由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。二.系统可大量采用PLD芯片。由于目前众多制造PLD芯片的厂家,其工具软件均支持VHDL语言的编程。所以利用VHDL语言设计数字系统时,可以根据硬件电路的设计需要,自行利用PLD设计自用的ASIC芯片,而无须受通用元器件的限制。三.采用系统早期仿真。从自上而下的设计过程中可以看到,在系统设计过程中要进行三级仿真,即行为层次仿真、RTL层次仿真和门级层次仿真。这三级仿真贯穿系统设计的全过程,从而可以在系统设计的早期发现设计中存在的问题,大大缩短系统设计的周期,节约大量的人力和物力。四.降低了硬件电路设计难度。在传统的设计方法中,往往要求设计者在设计电路之前写出该电路的逻辑表达式或真值表(或时序电路的状态表)。这一工作是相当困难和繁杂的,特别是当系统比较复杂时更是如此。而利用VHDL语言设计硬件电路时,就可以使设计者免除编写逻辑表达式或真值表之苦,从而大大降低了设计的难度,也缩短了设计的周期。五.主要设计文件是用VHDL语言编写的源程序。与传统的电路原理图相比,使用VHDL源程序有许多好处:其一是资料量小,便于保存。其二是可继承性好。当设计其他硬件电路时,可使用文件中的某些库、进程和过程等描述某些局部硬件电路的程序。其三是阅读方便。阅读程序比阅读电路原理图要更容易一些,阅读者很容易在程序中看出某一电路的工做原理和逻辑关系。而要从电路原理图中推知其工作原理则需要较多的硬件知识和经验。2.2VHDL设计概览本节仅讲述几个VHDL的实例,通过比较PLD的VHDL设计方法与传统的电路设计方法,使读者从总体上初步理解VHDL。[例2-1]用VHDL语言设计二选一数据选择器。二选一数据选择器的器件图如下:20图2-1二选一数据选择器器件图二选一数据选择器的VHDL程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21ISPORT(A,B:INSTD_LOGIC;S:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDmux21;ARCHITECTUREoneOF21muxISBEGINY=AWHENS=’0’ELSEBWHENS=’1’;ENDone;在上述的程序中:LIBRARY(库)是经编译后的数据的集合,用来存放程序包定义、实体定义、构造体定义和配置定义,使设计者可以共享已经编译过的设计结果。其中IEEE库是最常用的,而STD_LOGIC是它的标准程序包,其中定义了一些常用的数据类型和子程序ENTITY(实体)语句类似于原理图中的一个部件符号,是一个初级设计单元。在实体中,我们可以定义设计单元的输入输出引脚和器件的参数。上述程序中的实体语句描述了mux21的接口信息。其中,PORT(端口)则说明了mux21的外部引脚ARCHITECTURE(构造体)语句描述一个设计的结构或行为,把一个设计的输入和输出之间的关系建立起来。上述程序中的构造体语句描述了mux21内部的工作原理,在电路上相当于器件的内部电路[例2-2]用VHDL设计8位三态锁存器以通用的三态锁存器74373为例,其器件图如2-1所示。其中D1,D2,D3,D4,D5,D6,D7,D8为输入信号,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8为输出信号。它的逻辑关系为:若ONE=1,则Q1…Q8输出为高阻态;若ONE=0,则Q1…Q8输出为保存在锁存器ABYSA,B为输入端S为选择信号输入端Y为输出端若S=0则Y=A;若S=1则Y=B21mux的外部说明,PORT相当于器件的引脚21mux的内部工作逻辑打开库和程序包21中的信号值。若G=1,D1…D8输入的信号被锁存入74373中;若G=0,D1…D8保持原先锁入的信号值。图2-1SN74LS373器件图图2-2SN74LS373的内部工作原理图22下面使用VHDL语言,采用传统的自下而上的方法设计74373。首先设计锁存器(Latch),将实现Latch的VHDL程序保存在文件latch.vhd中。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLatchISPORT(D:INSTD_LOGIC;ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDLatch;ARCHITECTUREoneOFLatchISSIGNALsig_save:STD_LOGIC;BEGINPROCESS(D,ENA)BEGINIFENA=’1’THENSig_save=D;ENDIF;Q=sig_save;ENDPROCESS;ENDone;SN74LS373的VHDL语言设计程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_II64.ALL;ENTITYSN74373ISPORT(D:INSTD_LOGIC_VECTOR(8DOWNTO1);OEN,G:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(8DOWNTO1));ENDSN74373;ARCHITECTUREoneOFSN74373ISCOMPONENTLatchPORT(D,ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALsig_mid:STD_LOGIC_VECTOR(8DOWNTO1);对应于原理图中的器件符号LATCH声明一个内部信号,用来保存输入信号Latch的内部电路行为描述SN74373器件接口说明在例化Latch之前必须声明23BEGINGeLatch:FORiNumIN1TO8GENERATELatchx:LatchPORTMAP(D(iNum),G,sig_mid(iNum));ENDGENERATE;Q=sig_midWHENOEN=‘0’ELSE“ZZZZZZZZ”;ENDone;ARCHITECTUREtwoOFSN74373ISSIGNALsigvec_save:STD_LOGIC_VECTOR(8DOWNTO1);BEGINPROCESS(D,OEN,G)BEGINIFOEN=‘0’THENQ=sigvec_save;ELSEQ=“ZZZZZZZZ”;ENDIF;IFG=‘1’THENSigvec_save=D;ENDIF;ENDPROCESS;ENDtwo;SN74LS373设计程序的解析如下:在电路设计中,不同的电路可以实现相同的逻辑,因而同一种逻辑器件可以用多种方案来实现,这在VHDL中相当于一个实体(ENTITY)可以对应多个构造体(ARCHITECTURE),而每个构造体对应一种实现方案。在例化这个器件的时候,需要通过CONFIGURATION(配置)语句指定一个构造体,即要指定一种实现的方案。否则,VHDL综合器会自动选择最新编译的构造体。COMPONENT(器件)语句对将要例化的器件进行接口声明,它对应一个已经设计好的实体。VHDL综合器根据COMPONENT指定的器件名和接口信息来装配器件。本例中COMPONENT语句说明的器件Latch必须与前面设计的实体Latch完全对应。在构造体one中未用COMPONENT语句声明之前,VHDL编译器和综合器根本不知道有一个已经设计好的Latch器件存在。GENERATE(生成)语句用来生成多个相同的结构。生成语句有两种使用方式:FOR和IF,其中生成方案FOR用于描述重复模式;生成方案IF通常用语描述一个结构中的例外情形,比如在边界处发生的特殊情况。本例中使用FOR形式,其中GeLatch是GENERATE语句的标号,iNum是变量,iNum从1到8共循环了8次。构造体one用FOR语句循环例化构造体two24“Latchx:LatchPORTMAP(D(iNum),G,sig_mid(iNum))”是一条例化语句。所谓例化,在电路设计中相当于取了一个元件符号放在电路原理图中,即往电路中装配元器件。本例中,安装后的元件标号是Latchx,安装的器件的名字是Latch,它的引脚D连在信号线D(
本文标题:VHDL语言简介
链接地址:https://www.777doc.com/doc-2866361 .html