第一部分VHDL语言基础知识.docx
- 文档编号:24800595
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:19
- 大小:61.44KB
第一部分VHDL语言基础知识.docx
《第一部分VHDL语言基础知识.docx》由会员分享,可在线阅读,更多相关《第一部分VHDL语言基础知识.docx(19页珍藏版)》请在冰豆网上搜索。
第一部分VHDL语言基础知识
第1部分
VHDL语言基础知识
第1章概述
1.1电子器件的发展和现状
电子技术的发展总是同电子器件的发展密切相关的,由于电子器件的不断更新换代,电子技术得到了飞速发展,当今信息技术被广泛应用在国民经济的方方面面。
多媒体技术的普及、高速宽带网络的建设、数字电视的出现以及与我们日常生活息息相关的各种家用电器,都离不开微处理器、存储器和一些采用行业标准的专用芯片。
这些电子器件的发展经历了从电子管、晶体管、小规模集成电路、中规模集成电路到大规模集成电路和超大规模集成电路几个阶段,其发展趋势是体积越来越小,集成度越来越高。
随着半导体技术的迅速发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担,系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好在自己的实验室里就能设计并制造出适用的ASIC芯片,并且能够得到实际的应用。
使用ASIC完成电子系统的设计,其优点是集成度高、保密性强、可大幅度地减少印刷电路板的面积和接插件、电路性能好并能降低装配和调试费用、更适合较大规模批量生产、降低生产成本。
例如,现在微机中使用的显卡、网卡、数字电视等都是专用的ASIC芯片。
采用ASIC设计的不足之处是一次性的投资大,设计周期一般比较长,不便于以后修改设计,因而近几年在ASIC领域出现了一种半定制电路,即现场可编程逻辑器件FPLD。
目前使用较多的可编程逻辑器是现场可编程门阵列FPGA(fieldprogrammablegatearray)和复杂可编程逻辑器件CPLD(complexprogrammablegatearray)。
早期使用的可编程器件有PROM、EPROM、E2PROM、PAL、GAL等,这些芯片的容量一般比较小,只能完成简单的数字逻辑功能,这些器件基本上是使用专用的编程器进行装载。
CPLD和FPGA的芯片是在早期使用的PAL和GAL基础上发展起来的,相比早期的可编程器件,现场可编程逻辑器件FPLD的容量大,器件的容量远远大于PAL和GAL,更适合做时序和组合逻辑电路的设计,不但集成度高,而且逐渐向低功耗发展,芯片的使用电压有+5V、+3.3V和+2.5V几种,有的芯片外部是+5V而内部的工作电压则是+3.3V或+2.5V。
现在市场上FPLD的品种很多,使用较多的是Altera、Xilinx和Lattice这3个公司的产品,各公司都有不同型号的CPLD和FPGA产品,例如,Xilinx的XC系列;Altera的EPLD系列、FPGA系列;Lattice的ispLSI、ispGAL等。
由于各个公司的FPLD结构不同,使用的装载电缆线是不一样的,设计软件也不同,但共同的特点是:
现场可编程逻辑器件FPLD都可以在系统进行编程加载程序,不需要使用专用的编程器,它们都是直接将实验系统和计算机的并行口连接,通过运行软件对芯片进行装载,在实验室中就可将大量的数字电路设计集成到一个大芯片中,实现系统的微型化和可靠性。
目前工程设计人员通常都采用这种方法进行电路设计。
1.CPLD或EPLD芯片
这类器件的使用特点是:
芯片一经上电加载即已完成编程,不必在每次上电时重新进行加载,也就是当程序烧入芯片后,只有下一次需要再修改程序时才需要对芯片重新进行加载,否则将不会改变先前所烧入的代码,类似于大的GAL芯片。
例如,Lattice的ispGAL芯片可以在系统进行编程加载程序,也可以与该公司的ispLSI芯片在同一个电路中加载程序。
CPLD在结构上主要由可编程逻辑宏单元LMC(logicmacrocell)围绕中心的可编程互连矩阵单元组成,其中LMC的逻辑结构比较复杂,并具有复杂的I/O单元互连结构,可以由用户根据设计的需要生成特定的电路结构,完成一定的功能。
2.FPGA芯片
这类器件不像CPLD或EPLD,每次上电使用时不管是否改变程序都要对芯片进行加载。
现在FPGA芯片的容量一般比CPLD或EPLD的容量要大得多,更适合于做较大系统的复杂设计。
FPGA芯片通常包含3类可编程资源:
可编程的逻辑功能块、可编程I/O块和可编程的内部互连。
可编程的逻辑功能块是实现用户功能的基本单元,它们通常排成一个阵列,遍布于整个芯片中;可编程I/O块完成芯片上的逻辑与外部封装管脚的接口,常围绕着阵列排列于芯片四周;可编程的内部互连包括各种长度的连接线段和一些可编程连接开关,它们将各个可编程逻辑块或I/O块连接起来,构成特定功能的电路。
Xilinx的XC系列器件采用的是现场可编程门阵列FPGA,现场可编程门阵列是一种类似门阵列的结构,它的基本单元以阵列的形式排列在芯片上,但它不像门阵列那样由连线掩膜确定其最终的逻辑功能,而是将规则的连线阵列也已做好,其逻辑功能由各连线节点的控制开关的通断来确定。
这些节点的控制开关的值有各种不同的控制方法,如静态随机存储器控制(SRAM)、反熔丝(antifusebased)控制以及由快闪烁存储器(Flash)控制等几大类。
SRAM控制的FPGA器件是用静态随机存储器中存储的数值来控制芯片中可编程节点的通断,以实现芯片的设计功能。
这种FPGA在使用时,需要在系统加电时首先进行功能初始化,将存储器的内容加载到芯片的控制器中。
反熔丝控制的FPGA器件是用反熔丝单元来控制可编程器件内的可编程节点的通断,使芯片中每一部分具有应有的逻辑功能,以实现器件的设计功能。
反熔丝单元是一个被动的两端器件,通常情况下处于开路状态,在施加充足的电压后,能够永久地导通。
用于现场可编程器件的反熔丝其占用芯片面积非常小,速度也很高,这方面的性能几乎可以与门阵列相比。
但这种FPGA在编程时需要专用的编程设备,而且芯片功能一经编程确定后,不能再修改,反熔丝控制的FPGA器件价格最低。
Flash控制的FPGA器件是用快闪烁存储器的数值来控制FPGA节点的通断,实现现场可编程目的。
这种FPGA的工作特性与SRAM-FPGA相似,但与SRAM-FPGA相比,它的单元面积小。
由于Flash具有不挥发性,使用时不必在每次上电时都重新进行功能加载,所以使用是很方便的。
1.2设计方法的发展
传统的手工设计方法一般是根据系统的要求,首先画出系统的硬件流程图,再根据功能划分成不同的模块,设计过程一般从底层开始,先要选择具体的元器件,用所选择的元器件进行各功能模块的逻辑电路设计,手工画出一张张的电路原理图,根据原理图制作印刷电路板,每个功能模块都调试通过后,再把各个模块连接起来进行系统的调试。
对整个系统的仿真、调试只能在完成硬件设计以后才能进行,系统设计中的问题在调试的后期才能发现,如果出现设计中没有考虑到的问题,就要再从底层重新设计,这样的设计周期一般较长。
设计结果是若干张的电路原理图和信号的连接表,如果是一个大的系统,将是一大摞图纸,以后系统出现问题,查找修改起来都不直观。
上述过程是从底层开始,并在已有的功能模块的基础上来搭建高层次的模块直至整个系统。
因此这种电子系统的传统的设计方法称为是自底至上(bottom-up)的设计。
这里的底指的是设计树的末枝,设计过程必须从存在的基本单元模块出发,基本单元模块必须是已经设计成熟的单元,也可采用其他项目已开发好的标准单元。
由于电子器件的更新换代,在现代数字系统设计中,现场可编程器件FPGA和CPLD的使用越来越广泛,与此同时基于大规模可编程逻辑器件的EDA(electronicdesignautomation)硬件解决方案(EDAsolution)也被广泛采用。
这使得电子电路的设计方法也发生了根本性的变化,出现了电子电路设计自动化。
计算机应用的普及,自然产生了计算机辅助设计(CAD)。
最早的电子CAD软件仅仅是一些绘图软件,包括绘制电路原理图、绘制印刷电路板图、绘制集成电路芯片板图以及一些简单的数值计算等。
当出现了自动设计、验证和自动布局布线工具后,这类软件称之为第一代的EDA软件。
后来又出现了第二代的EDA软件,它包括逻辑综合、仿真以及“自顶向下”的设计等。
近年来又出现了第三代的EDA软件,称为电子系统设计自动化EsDA,可以通过概念输入(框图、公式等)自动生成各种设计结果,包括ASIC芯片设计结果、电路原理图、PCB板图以及软件等,并且可以进行机电一体化设计。
与传统的设计方法不同,现代电子工程师们设计系统的过程是首先描述系统,然后用EDA工具在计算机上进行系统级仿真,设计适合自己用的ASIC芯片,用通用和专用芯片构成系统,进行功能模拟和带时延的仿真,布PCB板,对PCB板进行仿真,最终生产调试成功。
EDA,即电子设计自动化。
所谓自动化是指利用计算机完成电子系统设计,现在已经逐渐成为电子系统的主要设计手段,尤其是采用可编程器件和软件仿真模拟方法的使用,给传统的电路设计方法带来了重大的变革,它使得设计工程师们从繁杂而零乱的工作中解放出来,而把着眼点放在电路的设计上,是一种节省时间而又高效率的现代设计理念。
EDA技术以计算机为工具,设计者只需要完成对系统功能的描述,就可以由计算机软件进行处理,代替人来完成数字系统的逻辑综合、仿真模拟和布局布线等工作。
其中模拟硬件电路在实际工作时的时序关系是相当重要的,因为系统设计上的错误通过仿真模拟波形时就可以发现,而不是等到线路板调试时才发现错误,即使是在线路板调试时又发现错误,在外部连接线已经固定的情况下,只要对内部的软件设计进行改进,就可达到修改设计方案的目的,这种方法比起传统的电路设计方法进步多了,修改设计如同修改软件一样方便。
当今的硬件设计方法有几大优点:
一是设计方法由手工设计变为自动设计,可以大大提高设计效率和设计质量,缩短设计周期;二是在系统设计和各个过程中可分别进行仿真,保证了设计的正确性,使得设计能够一次成功;三是能够根据实际需要来自行设计ASIC芯片。
可编程逻辑器件和EDA技术给硬件系统设计者提供了强有力的工具。
如今,只要拥有一台计算机、一套相应的EDA软件和空白的可编程器件芯片,在实验室就可以完成数字系统的设计与生产。
可以说,当今的数字系统设计离不开可编程器件和EDA设计工具。
1.3层次化的设计与VHDL的应用
1.自顶向下(top-down)的设计方式
一般来说,EDA解决方案是一种采用计算机自顶向下(top-down)的设计方式。
这里的顶指的是设计树的树根,按照数字系统的功能描述,把系统划分为若干个功能模块,然后再把每个模块划分为不同的层次,由高层次到低层次逐步细化。
这样的设计过程称之为自顶向下的设计方式。
在底层设计时对逻辑进行必要的描述,并依赖特定的软件执行逻辑优化(logicoptimization)与器件映射(devicemapping),自顶向下设计的特点是每一层次划分时都要对某些目标进行优化,这些目标包括工作速度、芯片面积和芯片成本等。
最后再使用由各芯片生产厂商提供的编译器执行布线(route)和网单优化(netlistoptimization)。
而直接采用原始逻辑图或布尔方程输入进行电路设计虽然对于简单的逻辑可以获得非常有效的结果。
但是对于复杂的系统设计,应用它们就很容易产生错误,而必须依靠一种高层的逻辑输入方式,这样就产生了硬件描述语言HDL(hardwaredescriptionlanguage)。
所谓硬件描述语言,就是对实际的硬件设计用语言的方式来描述,能够把复杂的电路设计用形象化的语言方式表示出来,可以描述硬件电路的功能,信号连接关系以及定时关系的语言,它能比电路原理图更能有效地表示电路的特征。
利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是该设计方法的一个重要特征。
硬件描述语言有HDL、AHDL、VerilogHDL和VHDL等。
VHDL语言的全称是“超高速集成电路硬件描述语言”(veryhighspeedintegratedcircuithardwaredescriptionlanguage)属于硬件描述语言中的一种,对系统硬件的描述功能很强而语法规范又比较简单。
其中符合IEEE-1076标准的VHDL的应用成为EDA解决方案中的首选。
VHDL这种行为描述性语言将被广泛应用到新一代EDA硬件设计方案中,因此对VHDL的应用成为EDA解决方案的核心,更是整个电子逻辑系统设计的核心。
2.VHDL语言的应用
VHDL语言源于美国政府于1980年开始启动的超高速集成电路(veryhighspeedintegratedcircuits,vHSIC)计划。
在这一计划的执行过程中,专家们认识到需要有一种标准的语言来描述集成电路的结构和功能。
这样,vHSIC的硬件描述语言(vHSIChardwaredescriptionlanguage),即VHDL诞生了。
很快,这一标准被美国电气和电子工程师协会(IEEE)所承认。
VHDL语言作为高级硬件行为描述型语言,如今已经广泛被应用到FPGA/CPLD和ASIC中的设计。
严格地讲,VHDL是一种用来描述数字逻辑系统的“编程语言”。
它通过对硬件行为的直接描述来实现对硬件的物理实现,代表了当今硬件设计的发展方向。
VHDL是为了满足逻辑设计过程中的各种需求而设计的。
第一,它是可以用来描述逻辑设计的结构,比如逻辑设计中有多少个子逻辑,而这些子逻辑又是如何连接的。
除此之外,VHDL并不十分关心一个具体逻辑依靠何种方式实现,而是把开发者的精力集中到逻辑所实现的功能上。
第二,VHDL采用类似高级语言的语句格式完成对硬件行为的描述,具备更强的模块化能力,并拥有良好的可读性以及程序的移植性。
另外,VHDL淡化状态机,与或表达式等早一代硬件描述语言中的元素,用更类似于高级语言的表达式取代。
这些也是为什么把VHDL称为“编程语言”的原因。
第三,VHDL给出逻辑的模拟与调试为设计工作提供了最大的空间。
VHDL调试的过程是相当灵活的:
一方面可以使用传统的调试方法,比如适用传统的波形激励或编写测试向量;另一方面,可以使用一些VHDL原码调试器,这类调试器可以大大加快VHDL程序调试的速度,因为它可以像调试软件一样单步跟踪调试每一条语句,并且可以设置断点,观察内部变量等。
这些功能是传统的调试仿真方法所不具备的。
这种调试器比较著名的有Aldec的Active-HDL。
拥有高效率的生成代码,能够节省大量的资源。
甚至不必编写任何测试向量便可以进行源代码级的调试。
而且,设计者可以非常方便地比较各种方案之间的可行性及其优劣而不需做任何实际的电路实验。
鉴于VHDL具有以上诸多优点,只要开发者具备一定的高级语言程序设计基础,拥有Pascal、C等计算机高级语言的基础,同时又了解一些基本数字电路的设计方法,在此基础上来学习VHDL程序设计应该是比较容易的,可以轻松地掌握VHDL使硬件工作软件化。
现代电子系统设计人员应该把VHDL语言作为一种基础知识来学习,并要求能够熟练地使用EDA的设计工具。
在EDA解决方案中应用VHDL有助于缩短数字系统的开发周期。
但还应该注意,除了靠编写VHDL程序简化逻辑之外,还需要选择合理的HDLsynthesis。
不同公司的HDLsynthesis所支持的语法并不相同,而且生成的代码效率也不同。
经实验对比,相同的程序经过不同的编译器编译,芯片资源的消耗相差高达10%。
另外,由于知识产权和专利保护问题,目前国际上尚无统一的集成化开发工具可以完成从逻辑输入到下载所需的全部工作,这也给VHDL在EDA解决方案中的广泛应用带来了一定的困难。
但是总的来讲,广大厂商均遵循VHDL’87这一通用标准并互相提供良好的软件接口,在某种程度上可以缓解该矛盾。
随着VHDL’93标准的广泛应用以及第二代可编程逻辑器件的推出,VHDL必将在未来的EDA解决方案中发挥不可替代的作用。
第2章VHDL语言与程序结构
2.1语言特点与设计流程
1.VHDL语言的特点
VHDL语言目前主要是对数字电路设计的描述,对模拟电路的设计尚不能很好地表达。
VHDL语言在编程时要更加规范,程序结构要适合整个系统的硬件结构,要符合各模块的信号时序关系,以及数据流的走向。
VHDL语言的设计格式更是面向具体的硬件对象的语言,因此任何独立于硬件实体的程序设计是没有意义的。
现在EDA设计代替了传统的手工设计,都是以FPGA、CPLD、EPLD等可编程器件作为系统中硬件的载体,大部分是以VHDL作为设计语言,并针对所使用的芯片来选择不同公司的软件在计算机上进行设计、综合。
这种用程序设计完成的硬件结构可装载到对应的可编程器件中,进行仿真、模拟、验证。
VHDL的语言特点主要有:
(1)更加类似软件上的高级语言,具备更强的模块化能力并拥有良好的可读性以及程序的移植性;
(2)淡化状态机,与或表达式等早一代硬件描述语言中的元素,用更类似于高级语言的表达式取代;
(3)拥有高效率的生成代码,能够节省大量的资源。
2.VHDL的设计流程
应用VHDL语言进行电子设计,首先要了解基本的设计流程。
在EDA解决方案中采用VHDL要经过的流程如图2.1所示。
从图2.1可以看出,在分析系统指标后,就进入了设计阶段,首先是设计输入,可以采用的输入方式有VHDL语言、VHDL语言与逻辑图混合输入或采用逻辑图输入,这一步通常都使用芯片生产商提供的开发工具,有关这方面的内容将在后面介绍。
接下来是对所输入的源文件进行编译,即HDLSynthesis。
通常称为合成或逻辑合成,这一步通常由三个过程组成,分别是HDL语言合成(languagesynthesis或HDLcompilation)、逻辑优化(optimization)、目标映射(technologymapping)。
前两个过程很好理解,最后一步是为了适应不同公司的编译器而生成EDIF(electronicdesigninterchangeformat)的中间文件,也有的生成AHDL、DSL、QDIF、XNF等内部网单描述文件。
有些公司的软件自带编译器,而也有些公司的软件不带编译器,这时需要使用第三方软件,比较著名的有Exemplar公司的LeonardoSpectrum和Synplicity公司的Synplify等。
一般这类工具都采用BehaviorExtractingSynthesisTechnology(B.E.S.T.)和SynthesisConstraintsOptimizationEnvironment(SCOPE),这两种技术可以提高VHDL逻辑合成的效率和可靠性。
另外,这类工具在生成EDIF文件的同时还生成VHDL格式的网单,可以用于对逻辑功能调试(functionalsimulator)。
这里的逻辑功能调试也就是图中的功能仿真,这是在芯片装载程序前的功能仿真模拟,它仅仅验证逻辑的正确性。
在一般的EDA解决方案中,这一步一般采用编写测试向量或加激励波形的方法,只能对逻辑的输出信号进行模拟,而对于一些重要的内部信号则无能为力了。
在采用VHDL后可以借助HDLSynthesis生成的VHDL格式的内部网单使用一些特殊的调试器对VHDL源程序进行类似于高级语言调试的单步跟踪调试。
这样不仅可以观察重要的内部信号,而且可以清楚地看到程序执行的流程。
一般还要经过时序模拟(timingsimulatior)也就是图2.1中的时序分析,在这里可以对电路的工作频率、工作延时做定性的模拟,虽然这也还会跟实际情况有一定的差距,但还是建议开发者要进行这一步模拟。
图2.1VHDL的设计流程
对于这些步骤,一般均可借助由芯片生产商提供的开发软件完成。
因此一定要在这里将各项功能都调试正确,接下来就是对芯片进行装载程序,在这里要用各个芯片厂商提供的编译器来生成可用于装载(download)的文件进行装载。
例如,Altera公司的软件生成的装载文件是.POF,用软件菜单中的Program命令装载芯片;Lattice公司的软件生成的装载文件是.JED,用软件菜单中的Fitter命令装载芯片。
每个公司的开发工具都具备这些功能。
最后是对装载的芯片进行系统调试以验证设计的正确性。
如果其中哪一步出现错误,都要重复前面的步骤,直到最终产品调试通过。
2.2VHDL程序基本结构
一个VHDL程序由5个部分组成,包括实体(ENTITY)、结构体(architecture)、配置(coxnfiguration)、包(package)和库(library)。
实体和结构体两大部分组成程序设计的最基本单元。
图2.2表示的是一个VHDL程序的基本组成。
配置是用来从库中选择所需要的单元来组成该系统设计的不同规格的不同版本,VHDL和VerilogHDL已成为IEEE的标准语言,使用IEEE提供的版本。
包是存放每个设计模块都能共享的设计类型、常数和子程序的集合体。
库是用来存放已编译的实体、结构体、包和配置。
在设计中可以使用ASIC芯片制造商提供的库,也可以使用由用户生成的IP库。
下面主要介绍VHDL程序的基本组成部分实体和结构体。
图2.2VHDL程序的基本组成
2.2.1实体
在用VHDL描述数字系统结构时,使用实体(ENTITY)结构。
实体是VHDL程序设计中最基本的模块,可以单独编译并且可以并入设计库。
ENTITY所描述的是数字系统输入/输出接口,同时还定义一些全局常量以及与其他电路(程序模块或逻辑图模块)之间必要连接的拓扑结构,实体是用来描述一个元件或一个模块与整个系统中其他的元件或模块间的关系。
但在ENTITY部分并不对电路的逻辑做任何描述,可以看成是一个所谓的逻辑“黑盒子”。
很明显,VHDL遵循EDA解决方案中自顶向下的设计原则,并能够保持良好的接口兼容性。
在一个设计中可以同时声明若干组entity-achitecture,也就是说entity-achitecture是VHDL描述逻辑时的基本结构。
设计的最顶层是顶级实体。
如果设计分层次,那么在顶级实体中将包含较低级别的实体。
实体组织的一般格式是:
ENTITY实体名IS
[GENERIC(类属表);]
[PORT(端口表);]
实体说明部分;
[BEGIN
实体语句部分;]
END[实体名];
大写字母表示的是实体说明的框架,对于每一个实体说明都应该这样写,是不可缺少的。
实际上VHDL是不区分大小写的。
用大写表示是为了使程序结构更清晰而方便阅读。
图2.3是一个简单的器件,实体描述如下。
图2.3一个实际器件及其实体描述
从上面实体组织的格式看到,实体说明形象地描述了一个器件的外观视图,也就是从外部看这个器件时包括哪些端口。
在实体说明的头部是类属说明和端口说明,用来设计实体和外部环境通信的对象、通信的格式约定和通信通道的大小等。
2.2.1.1类属
1.格式
GENERIC [CONSTANT(名字表)]:
[IN]子类型标识[:
=静态表达式]
2.功能
参数的类属设计是为实体和外部环境通信的集体静态信息提供通道。
用来规定端口的大小、实体中元件的数目和实体的定时特性等相关的参数。
3.实例
(1)对于各种译码器电路,如2-4译码器、3-8译码器、4-16译码器等,其特点是有N个输入,就有2N个输出。
而这些译码器除了端口数目不同之外,其他方面(如器件的连接)都是一样的,因此用类属进行统一的描述。
ENTITYdecoderIS
GENERIC(N:
Positive);
PORT
(Sel:
inBit_vector(1toN);
Dout:
outBit_vector(1to2**N));
ENDdecoder;
这里的N代表输入端口的数目,Positive是N的类型,为正整数。
定义了N之后,在实体说明中定义端口时,就可以用N来代替位向量的维数,输入端口如果为N个,按照译码器的功能,输出端口自然就是2N个。
(2)对于一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一 部分 VHDL 语言 基础知识