可编程逻辑器件设计.docx
- 文档编号:13718432
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:54
- 大小:199.39KB
可编程逻辑器件设计.docx
《可编程逻辑器件设计.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件设计.docx(54页珍藏版)》请在冰点文库上搜索。
可编程逻辑器件设计
可编程逻辑器件设计
第一篇可编程逻辑器件介绍
1.FPGA/CPLD简介
可编程逻辑器件(ProgrammableLogicDevice,PLD)是一类半定制的通用性器件,用户可以通过对PLD器件进行编程来实现所需的逻辑功能。
与专用集成电路ASIC相比,PLD具有灵活性高、设计周期短、成本低、风险小等优势,因而得到了广泛应用,各项相关技术也迅速发展起来,PLD目前已经成为数字系统设计的重要硬件基础。
PLD从20世纪70年代发展到现在,已经形成了许多类型的产品,其结构、工艺、集成度、速度等方面都在不断完善和提高。
随着数字系统规模和复杂度的增长,许多简单PLD产品已经逐渐退出市场,目前使用最广泛的可编程逻辑器件有两类:
现场可编程门阵列(FieldProgrammableGateArray,FPGA)和复杂可编程逻辑器件(ComplexProgrammableLogicDevice,CPLD)。
1.1.可编程逻辑器件分类
广义上讲,可编程逻辑器件是一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。
目前常用的可编程逻辑器件主要有PAL/GAL,CPLD(复杂可编程逻辑器件)和FPGA(现场可编程逻辑器件)。
●PAL:
可编程逻辑阵列(ProgrammableArrayLogic)。
●GAL:
通用阵列逻辑(GenericArrayLogic)
●CPLD:
复杂可编程逻辑(ComplexProgrammableLogicDevice)
●FPGA:
现场可编程逻辑器件(FiledProgrammableGateArray)
1.2.可编程逻辑器件基本结构
1.2.1.FPGA的基本结构;
典型的FPGA通常包含三类基本资源:
可编程逻辑功能块、可编程输入/输出块和可编程互连资源。
可编程逻辑功能块是实现用户功能的基本单元,多个逻辑功能块通常规则地排成一个阵列结构,分布于整个芯片;可编程输入/输出块完成芯片内部逻辑与外部管脚之间的接口,围绕在逻辑单元阵列四周;可编程内部互连资源包括各种长度的连线线段和一些可编程连接开关,它们将各个可编程逻辑块或输入/输出块连接起来,构成特定功能的电路。
用户可以通过编程决定每个单元的功能以及它们的互连关系,从而实现所需的逻辑功能。
除了上述构成FPGA基本结构的三种资源以外,随着工艺的进步和应用系统需求的发展,一般在FPGA中还可能包含以下可选资源:
●存储器资源(块RAM、分布式RAM);
●数字时钟管理单元(分频/倍频、数字延迟、时钟锁定);
●算数运算单元(高速硬件乘法器、乘加器);
●多电平标准兼容的I/O接口;
●高速串行I/O接口;
●特殊功能模块(以太网MAC等硬IP核);
●微处理器(PowerPC405等硬处理器IP核)。
FPGA的逻辑功能块基本上是由查找表(LookUpTable,LUT)和寄存器(Register)组成。
查找表简称为LUT,本质上就是一个RAM。
目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。
这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出该地址对应的内容,然后输出即可。
由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的。
而SRAM工艺的芯片在掉电后信息就会丢失,因此需要外加一片专用的配置芯片。
在上电的时候,由这个专用配置芯片把数据加载到FPGA中,FPGA就可以正常工作。
少数FPGA产品采用反熔丝或Flash工艺,掉电后配置信息不会丢失,因此这种FPGA芯片不需要外加的专用配置芯片。
1.2.2.CPLD的基本结构;
CPLD在工艺和结构上与FPGA是有区别的。
CPLD通常采用E2CMOS工艺,其基本结构是基于乘积项的。
CPLD的基本构成包括可编程I/0单元、基本逻辑单元、布线池和其它辅助功能模块。
●;
Ø;
基本逻辑单元是CPLD的主体。
通过不同的配置,CPLD的基本逻辑单元可以完成不同的逻辑功能。
CPLD的基本逻辑单元是一种被称为宏单元(MacroCell)的结构。
所谓宏单元,其本质是由一些与、或阵列加上触发器构成的,其中“与或”阵列完成组合逻辑功能,触发器用以完成时序逻辑。
器件规模一般用MC的数目表示。
CPLD的布线及连通方式与FPGA差异较大。
CPLD采用集中式布线池结构。
Altera的布线池叫做可编程互连阵列(PIA,ProgrammableInterconnectArray)。
其本质是一个开关矩阵,通过打节点完成不同MC的输入与输出项之间的连接。
由于CPLD的布线池结构固定,所以CPLD的输入管脚到输出管脚的标准延时固定,被称为PingtoPing延时,其反应了CPLD器件可以实现的最高频率。
1.3.FPGA/CPLD的设计流程
完整的FPGA/CPLD设计流程包括设计准备、设计输入、功能仿真、综合、综合后仿真、布局布线、布线后仿真、板级仿真验证和在线调试。
1.3.1.设计准备
在设计之前,首先要进行方案论证、系统设计、器件选择等准备工作。
设计人员根据任务的功能和性能指标需求,对器件的资源、成本以及功耗等方面进行折衷,选择合适的设计方案和FPGA器件。
1.3.2.设计输入
设计输入是指通过某些规范的描述方式,将电路构思输入给EDA工具。
常用的设计输入方法有硬件描述语言(HDL)和原理图设计输入方法等。
●原理图输入方式是一种最直接的设计描述方式,使用元件库中的元件画出系统或电路的原理图,符合人们的思维习惯。
这种设计输入方式要求设计人员具有丰富的硬件知识、熟悉FPGA器件的结构。
主要优点是系统结构清晰直观、便于信号的观察和电路的调整;缺点是设计效率低,产品升级、FPGA器件更换、EDA软件更换时需要重新输入原理图,而硬件描述语言输入方式就没有这方面的问题;
●硬件描述语言输入方式使用文本进行设计描述,包括普通硬件描述语言和行为级硬件描述语言。
行为级硬件描述语言是目前常用的高层硬件描述语言,主要有VHDL和VerilogHDL两个IEEE标准。
其突出优点有:
逻辑设计与具体工艺无关,使设计人员在系统设计、逻辑验证阶段确定方案的可行性;行为级描述便于设计大规模、复杂的数字系统;具有很强的逻辑描述和仿真功能,输入效率高;在不同的FPGA器件和EDA软件之间的转换方便;不必对底层的电路和FPGA器件结构非常熟悉;
1.3.3.功能仿真
功能仿真也称为前仿真或行为仿真。
用户所设计的电路在综合之前应该首先进行逻辑功能的验证,这种仿真没有器件内部逻辑单元和连线的实际延时信息,只是初步验证系统的逻辑功能。
为了能够完成功能仿真,需要先使用波形编辑器或硬件描述语言,来建立仿真时需要的波形文件和测试向量(尽可能包含所有可能影响设计功能的输入信号的组合)。
仿真结果将以波形图的方式直观显示在计算机屏幕上,并生成报告。
从中设计者可以观察到各个信号的变化,以判断电路是否实现了预期的功能。
如果发现错误,则应该返回设计输入阶段进行逻辑设计的修改。
1.3.4.设计处理
确定设计描述的功能无误后,就可以使用EDA软件对设计描述和相应的性能约束进行处理,设计处理是FPGA设计开发中的重要环节。
在设计处理的过程中,EDA软件对设计输入文件进行语法和设计规则检查、逻辑简化、优化、综合、适配、布局布线、时间参数提取,最后产生器件编程用的数据文件。
首先,EDA软件对设计输入进行语法和设计规则检查,然后简化和优化逻辑方程,通过综合和适配将优化后的设计映射到器件相应的逻辑单元中,生成网表文件。
布局布线将映射产生的物理单元在目标器件上进行放置和连接,并提取相应的时间参数。
时间参数提取将生成当前设计的含有时间参数的网表,用于时序仿真。
另外,时间参数提取输出的时序报告可以反映当前设计是否满足时序约束。
设计处理的效果主要取决于设计者的风格和综合工具的能力。
使用EDA软件进行设计处理时需要注意:
首先,最优化的目标可以是速度、资源、功耗等,这些指标时相互制约的。
其次,目前综合器所支持的硬件描述语言的语法是有限的,过于抽象的语法还无法综合。
因此,设计者应该具有良好的硬件描述语言编码风格。
1.3.5.时序仿真
时序仿真又称为后仿真或延时仿真,是高速FPGA设计过程中必不可少的仿真验证阶段。
由于不同FPGA器件内部的延时不一样,不同的布局布线方案也将影响电路各部分的延时,这些延时可能会导致系统和电路功能的变化。
因此在设计处理以后,需要对系统和各模块进行时序仿真,分析时序关系,检查和消除竞争冒险、并对器件的实际工作性能进行估计。
由于时序仿真中需要参考的参数非常多,因此将比功能仿真花费的时间长。
时序仿真中使用了电路延时的最坏情况,因此,通过时序仿真验证之后的设计一般都能够在实际器件上正确运行。
1.3.6.器件编程与测试
器件编程也可以称为配置。
时序仿真完成之后,就可以使用EDA软件生成FPGA器件编程时所需的数据文件。
器件的编程就是将编程数据下载到相应的FPGA器件中去。
器件编程需要满足一定的条件,如编程电压、编程时序、编程算法等。
一次性编程的FPGA需要专用的编程器完成器件的编程工作,基于SRAM的FPGA可以由EPROM或其他存储器件进行配置。
在线可编程的FPGA器件不需要专门的编程器,仅需要一根编程下载电缆和相应的编程软件。
器件在编程结束后,还可以对器件进行校验、加密等操作工作。
对于支持JTAG技术,具有边界扫描测试BST(Boundary-ScanTesting)能力和在线编程能力的器件来说,编程和测试过程都比较方便。
1.4.FPGA/CPLD的设计常用的开发工具
●文本编辑器和原理图编辑器;
●综合工具-Synplify
●仿真工具-ModelSim
●实现和优化工具;
Ø约束编辑器(AssignmentEditor)
Ø布局布线器(PoewerFitFitter)
Ø布局规划器(FloorplanEditor)
Ø底层编辑器(ChipEditor)
Ø检查设计可靠性(DesignAssistant)
●后端辅助工具
Ø编程文件生成器(Assembler)
Ø下载配置工具(Programmer)
●验证调试工具
Ø在线逻辑分析仪(SignalTap)
Ø信号探针(SignalProbe)
1.5.Altera可编程逻辑器件分类
1.5.1.高密度FPGA
●Stratix
●StratixGX;
1.5.2.低成本FPGA
●Cyclone
●CycloneⅡ;
1.5.3.CPLD器件
●MAX3000A
●MAXⅡ;
2.可编程逻辑基本设计原则
2.1.面积与速度平衡的原则
●这里“面积”指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价逻辑门数。
“速度”指设计在芯片上稳定运行,所能够达到的最高频率,这个频率由设计的时序状况决定,和设计满足的时钟周期,PADtoPADTime,ClockSetupTime,Clock]HoldTime,Clock-to-OutputDelay等众多时序特征量密切相关。
面积(area)和速度(speed)这两个指标贯穿着FPGA/CPLD设计的始终,是设计质量的评价的终极标准;
●面积和速度是一对对立统一的矛盾体。
要求一个同时具备设计面积最小,运行频率最高是不现实的。
更科学的设计目标应该是在满足设计时序要求(包含对设计频率的要求)的前提下,占用最小的芯片面积。
或者在所规定的面积下,使设计的时序余量更大,频率跑得更高。
这两种目标充分体现了面积和速度的平衡的思想。
关于面积和速度的要求,我们不应该简单的理解为工程师水平的提高和设计完美性的追求,而应该认识到它们是和我们产品的质量和成本直接相关的。
如果设计的时序余量比较大,跑的频率比较高,意味着设计的健壮性更强,整个系统的质量更有保证;另一方面,设计所消耗的面积更小,则意味着在单位芯片上实现的功能模块更多,需要的芯片数量更少,整个系统的成本也随之大幅度削减;
●作为矛盾的两个组成部分,面积和速度的地位是不一样的。
相比之下,满足时序、工作频率的要求更重要一些,当两者冲突时,采用速度优先的准则。
面积和速度的互换是FPGA/CPLD设计的一个重要思想。
从理论上讲,一个设计如果时序余量较大,所能跑的频率远远高于设计要求,那么就能通过功能模块复用减少整个设计消耗的芯片面积,这就是用速度的优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块,对整个设计采取“乒乓操作”和“串并转换”的思想进行运作,在芯片输出模块再在对数据进行“并串转换”,是从宏观上看整个芯片满足了处理速度的要求,这相当于用面积复制换速度提高;
2.2.硬件原则;
●硬件原则主要针对HDL代码编写而言的。
●首先应该明确FPGA/CPLD、ASIC的逻辑设计所采用的硬件描述语言(HDL)与同软件语言(如C,C++等)是有本质区别的!
它的本质作用在于描述硬件,它的最终实现结果是芯片内部的实际电路。
所以评判一段HDL代码的优劣的最终标准是:
其描述并实现的硬件电路的性能(包括面积和速度两个方面)。
评价一个设计的代码水平较高,仅仅是说这个设计由硬件向HDL代码这种表现形式转换的更流畅、合理。
而一个设计的最终性能,在更大程度上取决于设计工程师所构想的硬件实现方案的效率以及合理性;
●初学者,特别是由软件转行的初学者,片面追求代码的整洁、简短,这是错误的,是与评价HDL的标准背道而驰的!
正确的编码方法是,首先要做到对所需实现的硬件电路"心有成竹",对该部分硬件的结构与连接十分清晰,然后再用适当的HDL语句表达出来即可;
●硬件原则的另外一个重要理解是“并行”和“串行”的概念。
大家知道一般来说硬件系统比软件系统速度快,实时性高。
其中一个重要原因就是硬件系统中各个单元的运算是独立的,信号流是并行的。
而C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的,即使有一些并行处理的技术,也是在一定程度上和十分有限的。
所以在写HDL代码的时候,应该充分理解硬件系统的并行处理特点,合理安排数据流的时序,提高整个设计的效率;
2.3.系统原则
●系统原则包含两个层次的含义:
更高层面上看,是一个硬件系统,一块单板如何进行模块花费与任务分配,什么样的算法和功能适合放在FPGA里面实现,什么样的算法和功能适合放在DSP、CPU里面实现,以及FPGA的规模估算数据接口设计等;具体到FPGA设计就要求对设计的全局有个宏观上的合理安排,比如时钟域,模块复用,约束,面积,速度等问题;
●可编程器件附加功能模块的使用
Ø存储器资源的使用;
Ø软核的使用;
Ø串行收发器的使用;
2.4.同步设计原则
●异步电路特点
Ø电路的核心逻辑用组合逻辑电路实现。
比如异步的FIFO/RAM读写信号,地址译码等电路。
Ø电路的主要信号,输出信号等并不依赖于任何一个时钟性信号。
不是由时钟信号驱动FF产生的。
Ø异步时序电路的最大缺点是容易产生毛刺。
●同步时序电路
Ø电路的核心逻辑用各种各样的触发器实现;
Ø电路的主要信号,输出信号等都是由某个时钟沿驱动触发器产生出来的;
Ø同步时序电路可以很好的避免毛刺;
●同步时序设计遵从的原则
Ø在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的Setup时间之久,这条原则简称满足Setup时间原则;
Ø在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的Hold时间之久,这条原则简称满足Hold时间原则;
●同步时序电路的核心就是时钟,时钟沿驱动FF(触发器)控制数据的产生,是同步时序电路的主要表现形式。
所以时钟的质量和稳定性直接决定着同步时序电路的性能。
为了获得高驱动能、低抖动时延、稳定的占空比的时钟信号,一般使用FPGA/CPLD内部的专用时钟资源产生同步时序电路的主工作时钟。
专用时钟资源主要指两部分,一部分是布线资源,包括全局时钟布线资源,和长线资源等。
另一部分是FPGA内部的PLL或者DLL;
●同步时序电路要求对输入信号进行同步化,同步化的主要作用是使本级时钟的处理沿获得相对于数据的最长有效处理时间,从而获得了更长的时间余量。
如果输入数据的节拍和本级芯片的处理时钟同频,并且建立、保持时间匹配,可以直接用本级芯片的主时钟对输入数据寄存器采样,完成输入数据的同步化。
如果输入数据和本级芯片的处理时钟是异步的,特别是频率不匹配的时候,则只是要用处理时钟对输入数据做两次寄存器采样,才能完成输入数据的同步化。
需要说明的是,两次寄存器采样的作用在于有效地防止了亚稳态(数据状态不定)的传播,是后级电路获得的电平为有效电平,但是这种处理并不能防止错误采样电平的产生;
2.5.
FPGA设计规划流程
第二篇开发工具介绍
1.QuartusⅡ开发流程
;
2.FPGA的配置方法
配置,又称为加载或下载,是对FPGA的内容进行编程的一个过程。
每次上电后需要进行配置(Configuration)是基于SRAM工艺FPGA的一个特点,也可说是一个缺点。
在FPGA内部,有许多可以编程的逻辑、互连节点和RAM初始化内容等,都需要配置数据控制。
FPGA的配置RAM(ConfigurationRAM)就是起到这样一个作用。
2.1.FPGA的配置过程
在FPGA正常工作中,配置数据存储在SRAM中。
这个SRAM单元也被称为配置存储器(ConfigurationRAM)。
由于SRAM的易失性,因此FPGA上电后,外部电路需要将配置数据重新载入片内的配置RAM中。
在芯片配置完成后,内部的寄存器及I/O管脚必须进行初始化(Initialization)。
等到初始化完成以后,芯片才会按照用户设计的功能正常工作,即进入用户模式。
一个器件完整的配置过程将经历复位、配置和初始化3个过程。
FPGA正常上电后,当其nConfig管脚被拉低时,器件处于复位状态。
这是所有的配置RAM内容被清空,并且所有I/O处于高阻状态。
FPGA的nStatus和CONF_DONE管脚也将输出低。
当FPGA的nConfig管脚出现一个从低到高的跳变以后,配置就开始了。
同时芯片会采样配置模式(MSEL0,MSEL1)管脚的信号状态,决定接收何种配置模式。
随之,芯片将释放nStatus管脚,使其由片外的上拉电阻拉高。
这样,FPGA就可以接收配置数据了。
在配置之前和配置过程中,FPGA的用户I/O均处于高阻状态。
在接收配置数据的过程中,配置数据由DATA管脚送入,而配置时钟信号由DCLK管脚送入,配置数据在DCLK的上升沿被锁存到FPGA中。
当配置数据被全部载入到FPGA中以后,FPGA的CONF_DONE信号就会被释放,而漏极开路的CONF_DONE信号同样被由外部上拉电阻拉高。
因此,CONF_DONE管脚的从低到高的跳变意味着配置的完成,初始化过程的开始,而不是芯片开始正常工作。
INIT_DONE是初始化完成的指示信号,它是FPGA的一个可选信号,需要通过工具设置决定是否使用该管脚(【Assignments】/【Device】,单击【Device&Options】按钮,选择【General】选项)。
在初始化过程中,内部逻辑、内部寄存器和I/O寄存器将被初始化,I/O驱动器将被使能。
当初始化完成后,器件上漏极开路输出的INIT_DONE管脚被释放,同时被外部的上拉电阻拉高。
这是,FPGA进入用户模式,所有的内部逻辑以及I/O都按照用户的设计运行。
在完成配置后,DCLK和DATA管脚不应该浮空(floating),而应该被拉成固定电平,高或低均可以。
如果需要重新配置FPGA,就需要在外部将nConfig重新拉低一段时间,然后再拉高。
当nConfig被拉低后,nStatus和CONF_DONE也将随即被FPGA拉低,配置RAM被清,所以I/O都变成三态。
当nConfig和nStatus都变为高时,重新配置就开始了。
2.2.FPGA配置方式选择
FPGA的配置模式是由器件的MSEL0和MSEL1管脚状态决定的。
2.3.FPGA的配置方式
根据FPGA在配置电路中的角色,其配置数据可以使用3种不同的方式载入(Download)到目标器件中:
●FPGA主动(Active)方式;
●FPGA被动(Passive)方式;
●JTAG方式;
2.3.1.主动配置(AS)
在FPGA主动串行配置方式下,FPGA必须与Altera专用AS串行配置器件一起使用。
由目标FPGA来主动输出控制和同步信号(包括配置时钟)。
AS配置器件是一种非易失性的存储器,它与FPGA的接口为以下简单的4个信号线:
●串行时钟输入(DCLK)
●AS控制信号输入(ASDI)
●片选信号(nCS),低有效
●串行数据输出(DATA)
系统上电后,FPGA和配置器件都进入到上电复位状态(POR)。
这时,FPGA驱动nStatus为低,指示其处于“忙”态;同时驱动CONF_DONE为低,表示器件未被配置。
当POR过程完成后,FPGA随即释放nStatus信号,这个开漏(Open-Drain)信号被外部上拉电阻拉为高电平后,FPGA就进入到了配置模式(ConfigurationMode)。
在AS模式下,所有操作均由FPGA发起,它在配置过程中完全处于主动状态。
在该模式下,FPGA输出有效配置时钟信号DCLK,它是由FPGA内部的振荡器产生的。
在配置完成以后,该振荡器被关掉。
FPGA将驱动nCSO信号为低,这就使能了串行配置器件。
FPGA使用ASDO到ASDI的信号配置控制配置芯片,配置数据由DATA管脚读出,配置到FPGA中。
2.3.2.AS配置器件的在线编程
AS串行配置芯片是一种非易失、基于FLASH存储器的器件。
可以使用Altera的ByteBlasterⅡ下载电缆来对其编程。
在使用电缆编程配置芯片时,电缆驱动nCE为高,以禁止FPGA访问配置芯片;同时nCONFIG被驱动为低,使得FPGA处于复位状态,防止FPGA的信号干扰配置过程。
在AS配置方式下,EPCS1和EPCS4配置器件的DCLK时钟工作在20MHz左右;而EPCS16和EPCS64可以支持到40MHz。
2.3.3.被动串行配置(PS)
在PS方式下,FPGA处于完全被动的地位。
FPGA接收配置时钟、配置命令和配置数据,给出配置状态信号以及配置完成指示信号。
它使用以下几个信号:
●DCLK:
为外部数据源提供时钟
●DATA0:
配置数据输入
●nCONFIG:
配置控制输入。
低电位使器件复位,在由低到高的跳变过程中启动配置;
●nSTATUS:
双向漏极开路,命令状态下器件的状态输出。
加电后,立即驱动该引脚到低电位,然后在100ms内释放掉它,nSTATUS必须经过10k电阻上拉到Vcc,如果配置中发生错误,将其拉低;
●CONF_DONE:
双向漏极开路,状态输出。
在配置期间,此告警为低。
所有配置数据无误差接收后,将其置为三态,由于有上拉电阻,所以将变为高电平,表示配置成功;
●nCE:
器件使能输入,nCE为低时使能配置过程,当为单片配置时,nCE必须始终为低
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 逻辑 器件 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)