复习.docx
《复习.docx》由会员分享,可在线阅读,更多相关《复习.docx(18页珍藏版)》请在冰豆网上搜索。
复习
1.1EDA发展历程
1、CAD阶段是从20世纪60年代中期到20世纪80年代初期,该阶段的特点是一些单独的工具软件,主要有PCB(PrintedCircuitBoard)布线设计、电路模拟、逻辑模拟及版图的绘制等。
CAD阶段的设计过程存在两个方面的问题:
第一,由于各个工具软件是由不同的公司和专家开发的,只解决一个领域的问题,若将一个工具软件的输出作为另一个工具软件的输入,就需要人工处理,过程很繁琐,影响了设计速度;第二,对于复杂电子系统的设计,当时的EDA工具由于缺乏系统级的设计考虑,不能提供系统级的仿真与综合,设计错误如果在开发后期才被发现,将给修改工作带来极大的不便。
2、CAE阶段是从20世纪80年代初期到20世纪90年代初期。
各种设计工具,如原理图输入、编译与连接、逻辑模拟、测试码生成、版图自动布局以及各种单元库已齐全。
由于采用了统一数据管理技术,因而能够将各个工具集成为一个CAE(ComputerAidedEngineering,计算机辅助工程)系统。
按照设计方法学制定的设计流程,可以实现从设计输入到版图输出的全程设计自动化。
这个阶段主要采用基于单元库的半定制设计方法,采用门阵列和标准单元设计的各种ASIC(ApplicationSpecificIntegratedCircuit,专用集成电路)得到了极大的发展,将集成电路工业推入了ASIC时代。
3、EDA阶段20世纪90年代以来,电子设计技术发展到EDA阶段,其中微电子技术以惊人的速度发展。
此阶段主要出现了以高级语言描述、系统仿真和综合技术为特征的第三代EDA技术。
EDA技术的主要特征。
(1)高层综合(HLS,HighLevelSynthesis)的理论与方法取得较大进展,将EDA设计层次由RTL级提高到了系统级(又称行为级),分为逻辑综合和测试综合。
逻辑综合
是对不同层次和不同形式的设计描述进行转换,通过综合算法,以具体的工艺背景实现高层目标所规定的优化设计。
测试综合
是以设计结果的性能为目标的综合方法,以电路的时序、功耗、电磁辐射和负载能力等性能指标为综合对象。
测试综合是保证电子系统设计结果稳定可靠工作的必要条件,也是对设计进行验证的有效方法,其典型工具有Synopsys公司的BehavioralCompiler以及MentorGraphics公司的Monet和Renoir。
(2)随着VHDL和VerilogHDL语言的完善,设计工程师已经习惯用语言而不是电路图来描述电路。
(3)采用平面规划(Floorplaning)技术对逻辑综合和物理版图设计进行联合管理,做到在逻辑综合早期设计阶段就考虑到物理设计信息的影响。
(4)可测性综合设计。
随着ASIC的规模与复杂性的增加,测试难度与费用急剧上升,由此产生了将可测性电路结构制作在ASIC芯片上的想法,于是开发了扫描插入、BLST(内建自测试)、边界扫描等可测性设计(DFT)工具,并已集成到EDA系统中。
1.2可编程逻辑器件
ASIC的分类
ASIC是专门为某一应用领域或某一专门用户需要而设计制造的LSI或VLSI电路,具有体积小、重量轻、功耗低、高性能、高可靠性和高保密性等优点。
半定制ASIC包括门阵列、标准单元和可编程逻辑器件三种:
*可编程逻辑器件是ASIC的一个重要分支,是厂家作为一种通用性器件生产的半定制电路,用户可通过对器件编程实现所需要的逻辑功能。
PLD是用户可配置的逻辑器件。
SPLD包括PROM、PLA、PAL和GAL。
其结构特点是由与阵列和或阵列组成,能有效地实现"积之和"形式的布尔逻辑函数。
现场可编程门阵列FPGA器件是Xilinx公司于1985年首家推出的,它是一种新型的高密度PLD,采用CMOS-SRAM工艺制作。
FPGA的结构与门阵列PLD不同,其内部由许多独立的可编程逻辑模块组成,逻辑块之间可以灵活地相互连接。
FPGA结构一般分为三部分:
可编程逻辑块、可编程I/O模块和可编程内部连线。
在现场修改器件的逻辑功能,即所谓现场可编程。
FPGA的发展非常迅速,形成了各种不同的结构。
(1)按逻辑功能块的大小,FPGA可分为细粒度PGA和粗粒度FPGA。
细粒度FPGA的逻辑功能块较小,资源可以充分利用,但是随著设计密度的增加,信号不得不通过许多开关,路由延迟也快速增加,从而削弱了整体性能,导致速度降低;粗粒度FPGA的逻辑功能块规模大,功能强,可以用较少的功能块和内部连线就能完成较复杂的逻辑功能,易于获得较好的性能,但其缺点是资源不能充分利用。
(2)从逻辑功能块的结构上,可分为查找表结构、多路开关结构和多级与非门结构。
(3)根据FPGA内部连线的结构不同,可分为分段互连型FPGA和连续互连型FPGA两类。
(4)根据编程方式,FPGA可分为一次编程型和可重复编程型两类。
一次编程,比较适合于定型产品及大批量应用。
可重复编程型FPGA采用SRAM开关元件或快闪EPROM控制的开关元件,配置数据存储在SRAM或快闪EPROM中。
SRAM型FPGA的突出优点是可反复编程,系统上电时,给FPGA加载不同的配置数据就可完成不同的硬件功能,甚至在系统运行中改变配置,实现系统功能的动态重构。
目前,绝大多数的FPGA器件都采用了基于SRAM的查找表结构。
查找表(LUT,LookUpTable)本质上就是一个RAM。
FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16×1位的RAM。
1.可编程逻辑块CLB
CLB是FPGA的主要组成部分,是实现逻辑功能的基本单元。
它主要由逻辑函数发生器、触发器、数据选择器等电路组成。
CLB有三个逻辑函数发生器G、F和H,相应的输出是G'、F'和H'。
CLB中有两个边沿触发的D触发器,它们有公共的时钟和时钟使能输入端。
S/R控制电路可以分别对两个触发器异步置位和复位。
2.输入/输出模块IOB
每个IOB控制一个引脚,可被配置为输入、输出或双向I/O功能。
3.可编程互连资源IR
可编程互连资源包括各种长度的金属连线线段和一些可编程连接开关,它们将各个CLB之间和CLB与IOB之间互相连接起来,构成各种复杂功能的系统。
XC4000系列采用分段互连资源能力,片内连线按相对长度分单长度线、双长度线和长线三种。
利用双长度线可将两个非相邻的CLB连接在一起。
1.2.5FPGA与CPLD的比较
尽管FPGA和CPLD都属于可编程逻辑器件,有很多相似的特点,但由于CPLD和FPGA结构上的差异,使得二者在性能上互有长短。
表1.3将FPGA和CPLD做了一个对比,列出了FPGA和CPLD之间的性能差异,用户在选择器件时,必须要注意到这些性能差异对设计项目所带来的影响。
1.3PLD的设计
1.3.1设计方法
1.自下而上的设计方法
传统的硬件电路采用自下而上(BottomUp)的设计方法,其主要步骤是:
在系统硬件设计的后期进行仿真和调试。
系统硬件设计好以后才能进行仿真和调试,进行仿真和调试的仪器一般为系统仿真器、逻辑分析仪和示波器等。
由于系统设计时存在的问题只有在后期才能较容易发现,一旦考虑不周,系统设计存在缺陷,那就得重新设计系统,使得设计费用和周期大大增加。
主要设计文件是电原理图。
该文件是用户使用和维护系统的依据。
如此多的电原理图给归档、阅读、修改和使用都带来了极大的不便。
2.自上而下的设计方法
各种新兴的EDA工具开始出现,特别是硬件描述语言HDL(HardwareDescriptionLanguage)的出现,使得传统的硬件电路设计方法发生了巨大的变革,新兴的EDA设计方法采用了自上而下(TopDown)的设计方法。
所谓自上而下的设计方法,就是从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。
EDA自上而下的设计方法主要特点。
1)电路设计更趋合理
2)采用系统早期仿真
在系统设计过程中进行了三级仿真,即行为级仿真、RTL级仿真和门级仿真,从而可以在系统设计早期发现设计中存在的问题,这样就可以大大缩短系统的设计周期,降低费用。
3)降低了硬件电路设计难度
在使用传统的硬件电路设计方法时,往往要求设计人员设计电路前应写出该电路的逻辑表达式和真值表(或时序电路的状态表),然后进行化简等,这一工作是相当困难和繁杂的,特别是在设计复杂系统时,工作量大也易出错。
如采用HDL语言,就可免除编写逻辑表达式或真值表的过程,使设计难度大幅度下降,从而也缩短了设计周期。
4)主要设计文件是用HDL语言编写的源程序
在传统的硬件电路设计中,最后形成的主要文件是电原理图,而采用HDL语言设计系统硬件电路时,主要的设计文件是用HDL语言编写的源程序。
用HDL语言的源程序作为归档文件有很多好处:
一是资料量小,便于保存;二是可继承性好;三是阅读方便。
如果需要,也可以将HDL语言编写的源程序转换成电原理图形式输出。
第一层次为行为描述,它是对整个系统的数学模型的描述。
一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现系统设计中存在的问题。
第二层是RTL(寄存器传输)方式描述(又称数据流描述)。
用行为描述的系统结构程序是很难直接映射到具体逻辑元件结构的,要想得到硬件的具体实现,必须将行为方式描述的HDL程序,针对某一特定的逻辑综合工具,采用RTL方式描述,然后导出系统的逻辑表达式,再用仿真工具对RTL方式描述的程序进行仿真。
第三层是逻辑综合。
利用逻辑综合工具,可将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表),也可将综合结果以逻辑原理图方式输出,也就是说逻辑综合结果相当于在人工设计硬件电路时,根据系统要求画出了系统的逻辑电原理图。
由逻辑综合工具产生门级网络表后,在最终完成硬件设计时,还可以有两种选择:
一种是由自动布线程序将网络表转换成相应的ASIC芯片的制造工艺,定制ASIC芯片;第二种是将网络表转换成相应的PLD编程码点,利用PLD完成硬件电路的设计。
1.3.2设计流程
1.设计准备
2.设计输入
1)原理图输入方式
原理图输入方式是一种最直接的设计描述方式,要设计什么,就从软件系统提供的元件库中调出来,画出原理图,这样比较符合人们的习惯。
这种方式要求设计人员有丰富的电路知识及对PLD的结构比较熟悉。
其主要优点是容易实现仿真,便于信号的观察和电路的调整;缺点是效率低,特别是产品有所改动,需要选用另外一个公司的PLD器件时,就需要重新输入原理图,而采用硬件描述语言输入方式就不存在这个问题。
2)硬件描述语言输入方式
硬件描述语言是用文本方式描述设计,它分为普通硬件描述语言和行为描述语言。
普通硬件描述语言有ABEL、CUR和LFM等,它们支持逻辑方程、真值表、状态机等逻辑表达方式,主要用于SPLD的设计输入。
行为描述语言是目前常用的高层硬件描述语言,主要有VHDL和VerilogHDL两个IEEE标准。
硬件描述语言的突出优点:
语言与工艺的无关性,可以使设计人员在系统设计、逻辑验证阶段便确立方案的可行性;语言的公开可利用性,便于实现大规模系统的设计;
具有很强的逻辑描述和仿真功能,而且输入效率高,在不同的设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。
3)波形输入方式
波形输入方式主要是用来建立和编辑波形设计文件,以及输入仿真向量和功能测试向量。
波形设计输入适用于时序逻辑和有重复性的逻辑函数。
3.功能仿真
功能仿真也叫前仿真。
用户所设计的电路必须在编译之前进行逻辑功能验证,此时的仿真没有延时信息,对于初步的功能检测非常方便。
仿真前,要先利用波形编辑器和硬件描述语言等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察到各个节点的信号变化。
4.设计处理
设计处理是器件设计中的核心环节。
在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合优化和适配,最后产生编程用的编程文件。
1)语法检查和设计规则检查
设计输入完成后,首先进行语法检查,如原理图中有无漏连信号线,信号有无双重来源,文本输入文件中关键字有无输错等各种语法错误,并及时列出错误信息报告供设计人员修改,然后进行设计规则检验,检查总的设计有无超出器件资源或规定的限制,并将编译报告列出,指明违反规则情况以供设计人员纠正。
2)逻辑优化和综合
化简所有的逻辑方程或用户自建的宏,使设计所占用的资源最少。
所谓综合,也就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。
3)适配和分割
分割可全自动、部分或全部用户控制,目的是使器件数目最少,器件之间通信的引脚数目最少。
4)布局和布线
前面的工作完成以后,就需要进行布局和布线操作。
布局布线就是根据设计者指定的约束条件(如面积、延时、时钟等)、目标器件的结构资源和工艺特性,以最优的方式对逻辑元件布局,并准确地实现元件间的互连,完成实现方案(网表)到使实际目标器件(FPGA或CPLD)的变换。
5.时序仿真
时序仿真又称后仿真或延时仿真。
由于不同器件的内部延时不一样,不同的布局布线方案也给延时造成不同的影响,因此在设计处理以后,对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能,以及检查和消除竞争冒险等是非常有必要的。
6.器件编程和测试
时序仿真完成后,软件就可产生供器件编程使用的数据文件。
对EPLD/CPLD来说,是产生熔丝图文件,即JED文件,对于FPGA来说,是产生位流数据文件(BitstreamGeneration)。
器件编程就是将布局布线后形成的数据文件通过下载工具下载到具体的PLD器件中。
下载软件一般是由各个FPGA厂家提供。
器件编程需要满足一定的条件,如编程电压、编程时序和编程算法等。
普通的EPLD/CPLD器件和一次性编程的FPGA需要专用的编程器完成器件的编程工作。
基于SRAM的FPGA可以由EPROM或其它存储体进行配置。
在线可编程的PLD器件不需要专门的编程器,只要一根编程下载电缆就可以了。
7.测试
1.3.3基于IP的设计
FPGA厂家及其第三方预先设计好这些通用单元并根据各种FPGA芯片的结构对布局和布线进行优化,从而构成具有自主知识产权的功能模块,称之为IP(IntellectualProperty)模块,也可称为IP核(IPCore)。
IP模块可分为硬件IP(HardIP)模块、软件IP(SoftIP)模块和固件IP(FirmIP)模块三种。
硬件IP模块已完成了布局布线和功能验证并将设计映射到IC硅片的物理版图上。
软件IP模块通常是可综合的寄存器级硬件描述语言模型,它包括仿真模型、测试方法和说明文档。
因此,一种有效的方法就是将带有布局布线信息的网表提供给用户,这样就避免了用户重新布线所带来的问题。
这种含有布局布线信息的软件IP模块又称作固件IP模块。
2.1概述
Altera分别在1988年和1992年推出了基于乘积项的MAX构架和基于查找表(LUT)的FLEX构架,并且最近又推出了更新、更强大和更高效的QuartusⅡ开发系统和广泛的IP功能,进一步拓展了该公司在行业中的技术领先地位。
做为世界上最大的可编程逻辑器件供应商之一,Altera把它的PLD产品分为FPGA、CPLD和结构化ASIC三个大类,其中FPGA包括Stratix、StratixⅡ、StratixⅡGX、StratixGX、Cyclone、CycloneⅡ、APEXⅡ、APEX20K、Mercury、FLEX10K、ACEX1K、FLEX6000、FLEX8000和Excalibur系列器件,CPLD包括MAXⅡ、MAX3000A、MAX5000、MAX7000、MAX9000以及Classic系列,结构化ASIC则包括HardCopyAPEX、HardCopyStratix和HardCopyⅡ。
2.2FPGA
2.2.1Stratix器件
Altera的Stratix器件系列突破了大容量可编程逻辑器件的性能和容量瓶颈,能够将复杂设计集成到单一系统中。
Stratix器件具有系统级的功能,为设计提供了复杂SOPC方案所需的性能、存储带宽、DSP功能和I/O性能。
3.1硬件描述语言概述
VHDL的特点是:
*VHDL是IEEE标准,语法比较严格;
*VHDL支持各种设计方法和技术,例如自上而下和自下而上设计,同步和异步设计等;
*VHDL能够处理各种对象,从描述逻辑门层次的电路到描述整个数字系统;
*VHDL支持由若干小组协同完成一个系统的设计。
VerilogHDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由,目前ASIC设计大多采用这种语言。
该语言的主要特点是:
*过程性描述和结构性描述两者都能接受;
*所使用的基本数据类型是“线”和“寄存器”,它采用四状态制表示布尔值:
“0”、"1"、“X”、“Z”,其中“X”表示不确定状态,“Z”表示悬空;
*能够使用混合模式的模型,即用其描述的设计可以包含不同的抽象层次,并能用一个仿真程序做仿真;
*能够描述模块的并行行为以及描述有限状态机。
现在,VHDL和VerilogHDL作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
用VHDL/VerilogHDL语言开发可编程逻辑电路的完整流程为:
(1)文本编辑。
用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件,VerilogHDL文件保存为.v文件。
(2)功能仿真。
将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只有在布线完成以后,才进行时序仿真)。
(3)逻辑综合。
将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。
逻辑综合软件会生成.edf(EDIF)的EDA工业标准文件。
(4)布局布线。
将.edf文件调入FPGA厂商提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。
(5)时序仿真:
需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序(也叫后仿真)。
如果编写的HDL程序仅用于仿真,那么几乎所有的语法和编程方法都可以使用。
但如果程序是用于FPGA硬件实现,那么就必须保证程序具有“可综合性”,即程序所描述的功能可以用硬件电路实现。
不可综合的HDL语句在软件综合时将被忽略或者报错。
也就是说,所有的HDL程序都可以用于仿真,但不是所有的HDL程序都能用硬件实现。
掌握HDL语言的关键是充分理解HDL语句和硬件电路的关系。
3.2VHDL程序的基本结构
一段完整的VHDL程序包括:
实体(ENTITY)、结构体(ARCHITECTURE)、配置(CONFIGURATION)、库(LIBRARY)和程序包(PACKAGE)五个组成部分,其中前四部分是可分别编译的源设计单元。
实体是一个VHDL语言程序的基本单元,它既可以很简单,也可以很复杂,简单到可以描述一个门电路,复杂到可以描述一个微处理器或一个片上系统(SOC)。
无论是简单的还是复杂的数字电路,实体的基本构成是一致的,即由实体说明和结构体两部分组成。
实体说明部分用于描述所设计系统的外部端口信号和参数的属性和设置,而结构体部分则定义了设计单元的具体功能、行为、数据流程或内部结构。
VHDL程序中设计实体的保留字为ENTITY,结构体的保留字为ARCHITECTURE。
一个设计实体有且只能有一个实体说明,但可以有一个或多个结构体。
对于VHDL的编译器和综合器来讲,VHDL语言代码是不区分其大小写字母的,但是为了方便阅读和识别,建议将VHDL语句中的保留字用大写字母来表示,设计者自己添加的内容用小写字母来表示。
3.2.1实体说明
VHDL程序中的实体说明的一般格式为:
ENTITY实体名IS
[类属参数说明];
[端口说明];
END实体名;
【例3-2】实体说明示例一。
ENTITYhaIS
PORT(h1,h2:
INBIT;
q:
OUTBIT;
haq:
OUTBIT_VECTOR(7DOWNTO0));
ENDha;
例3-2中的端口h1、h2、q的数据类型为BIT,而端口haq的数据类型为BIT_VECTOR,其中的(7DOWNTO0)表示haq端口是一个8位的端口,由最高位B7到最低位B0,位矢量长度为8。
3.2.2结构体
1.基本格式
结构体(ARCHITECTURE)为一个基本设计实体的另一重要组成部分,它描述了设计实体所要实现的功能,指明了设计实体中的行为和内部器件的连接关系以及数据流程。
由于结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。
一个结构体通常由结构体名称、定义语句和并行处理语句构成,有如下两种格式:
格式1
ARCHITECTURE结构体名OF实体名IS
[定义语句];--内部信号,常数,数据类型,函数等的定义
BEGIN
[并行处理语句];
END结构体名;
格式2
ARCHITECTURE结构体名OF实体名IS
[定义语句];--内部信号,常数,数据类型,函数等的定义
BEGIN
[并行处理语句];
ENDARCHITECTURE结构体名;
格式1和格式2分别对应于IEEEStandard1076-1987和IEEEStandard1076-1993标准。
结构体的名称是由设计者自由命名的,它是结构体的唯一名称。
OF后面的实体名称表明该结构体是属于哪个设计实体的。
为了让人一目了然,大多数的资料文献中通常采用以下三种方式来命名结构体:
ARCHITECTUREbehavioralOFflipflopIS用结构体的行为命名
ARCHITECTUREdataflowOFflipflopIS用结构体的数据流命名
ARCHITECTUREstructuralOFflipflopIS用结构体的结构命名
这三种命名方式对应了结构体的三种描述方式,即行为级描述、数据流级描述和结构级描述,下一小节将详细介绍这三种描述方式。
设计者可以根据自己设计的VHDL程序的结构体描述方式来给结构体命名,以方便阅读和使用。
结构体的名称后面就是定义语句,用于定义结构体内部使用到的信号、常数、数据类型和函数等。
定义语句位于ARCHITECTURE和BEGIN之间,也就是在结构体内部,而不是实体内部,因为一个实体可以有多个结构体。
结构体内部的定义语句和端口说明语句类似,因为是内部连接使用,所以不用说明方向。
【例3-4】结构体的定义语句。
ARCHITECTUREstructuralOFflipflopIS
SIGNALq:
BIT;
BEGIN
ENDstructural;
并行处理语句是结构体功能描述的主要语句,它位于BEGIN和END之间。
所谓并行处理语句,就是指语句的执行不以书写的顺序为执行顺序,而是并行进行处理的。
比如在