在硬件设计中采用FPGA的基本要点
2013-05-30
作者:Adam Taylor
许多工程师认为,只要定义了FPGA的功能,工作就算完成了。但实际上将FPGA插入PCB时也会面临一系列挑战。
对于许多工程师和项目经理来说,在FPGA中实现功能并实现时序收敛是主要目标,但实际上在印刷电路板上设计FPGA的硬件级工作也会出现很多有趣的挑战,只有解决了这些挑战才能实现成功设计。
一切的起点均在于架构。硬件开发第一步就是定义解决方案的架构。架构应该对应于系统要求,并具体明确它们如何在硬件中得到实现。虽然不同系统的架构各有差异,而且每个系统的具体应用也大相径庭,但很多系统均包含类似的架构模块。您能够同时也应该对经常需要的硬件模块进行重复利用,就好像您重利用常用的HDL模块一样。
图1和图2分别给出了整体架构和电源架构的实例,而两侧则列出了设计FPGA系统时通常需要考虑的问题。
器件选择
您一开始面临最重要的选择就是在大量可用FPGA中找到最合适的。FPGA器件的选择涉及许多因素。首要因素就是该FPGA提供什么可用资源,是否足够用来以所需的工作频率实现您想要的功能。
根据这些参数,您可以很快将选择范围细化到有限数量的器件,这样您就能再进一步细化选择标准,找到适当的FPGA。另一个重要因素就是您系统可能需要的其它资源,比方说DSPslice或乘法器、嵌入式处理器或高速串行链路等。是否提供这些资源,可以进一步缩小器件选择的范围。在许多情况下,根据具体资源需求,您会进一步寻找器件的子系列,比方说如果需要逻辑或高速串行链路,则应选择赛灵思Spartan®-6 LX或Spartan-6 LXT。
器件所需的输入输出数量会同时影响到器件选择和封装选择,因为一款器件可能提供几种不同的封装选择,每种选择还提供不同数量的用户I/O。这里通常需要注意的是,您应当考虑今后如何升级,而且要考虑所选系列的各种器件是否具有通用的封装尺寸。
此外,选择器件时您还应考虑工作环境。举例来说,是不是商业组件就够了,是否需要工业、医疗或汽车级的部件?某些情况下您的系统可能需要军用或航天级的组件。
此外,您还必须要考虑到配置架构问题。基于SRAM的FPGA能否满足应用需求?或者说赛灵思Spartan-3AN系列这样的非易失性解决方案是否更好一些?设计的安全性同样也是一大重要考虑因素。如果应用需要设计安全性,就应考虑避免读回并对数据流进行加密。
无论应用是进行量产或是作为一次性的定制航天设计,组件成本当然也始终是一个重要因素。您应制定目标成本预算,并努力确保在成本限度内完成任务。
上述许多参数在系统中其它器件的选择上也很重要。特别重要的一个标准就是选择的组件要能够在相同的电压轨上工作,这样就能简化电源架构。
您还应考虑在设计中是否有组件标准降低的问题。所有制造商的组件数据手册都给出了器件的最大额定值和最大工作电应力。如果我们选用的器件刚好在最大额定值以下的电应力工作,那么设计的可靠性就会大幅下降,因为系统一直是在推荐工作条件以外工作的。根据最终应用的不同,故障可能会导致各种后果,包括导致人员伤亡,破坏工作任务,公司质量声誉下挫等。为了生产出可靠的设备,您必须在设计中减少电应力。因此在选择应用器件时,您必须考虑到器件所承受的电应力。
电源架构
器件选择好之后,下一步影响项目成败最关键的部分就是电源架构了。这个因素往往被忽视。现代FPGA的核心电压通常介于0.9V到1.5 V之间。相对于高性能FPGA而言,这种器件需要的静态电流可能很高,而且器件完成配置并开始计时后的动态电流也很大。
设计中的功耗估算非常重要,需要在项目早期进行,以准确评估电源架构。赛灵思提供功耗估算电子数据表,您可在以下网址下载:http://www.origin.xilinx.com/prod- ucts/design_tools/logic_design/xpe.htm。在电子数据表中,您可根据选定器件的环境参数选择FPGA资源的时钟速率和翻转率。如果您不确定,宁可做出更谨慎的选择,也就是要对估算做出悲观考虑而不是过于乐观。一旦明确了FPGA的电源要求,就能将其整合到系统的整体功耗预算中,并在此基础上明确电源架构。
有的系统需要较大电流,我们建议采用开关DC/DC转换器保持整体效率,确保单元散热设计不是很复杂。如果需要的电流较低,而且系统必须特别注意避免噪声,也就是说为高速串行链路或敏感型ADC、DAC组件提供电源的话,那么您可采用线性稳压器和额外的滤波机制。在所有情况下,您都应该仔细阅读具体器件的数据手册。
一旦完成FPGA设计,您就应该使用赛灵思ISE®设计套件中的XPower Analyzer获得详细的功耗估算。这一步骤将帮助您完成电源架构的设计工作。
此外,您还应考虑板上器件的电源去耦问题。现代器件的开关速度比调节电压的电源快很多倍。如果不采用去耦电容,这种局面就会导致当稳压器上升时电源轨下降。理想情况下,应让去耦电容的值在结合PCB层间电容时的阻抗曲线低于0.1Ω,而且可能的话应在100 kHz到1 GHz之间。要实现这样的性能,应采用一系列去耦电容值,每个值都有不同的自谐振频率。这种方法可让电源抑制比(PSRR)值不佳的器件也能实现最佳性能,而PSRR在某些器件上会随工作频率的上升而下降。
最后,要尽可能减少额外电压轨的数量,这有助于降低解决方案的复杂性。此外,您还应注意到任何电源轨排序或斜坡速率,并确保您的解决方案能够满足这些要求。
时钟和复位树
您的系统需要至少一个时钟工作。通常让逻辑级振荡器在所需频率上工作。考虑振荡器时,要注意一系列问题。其中振荡器所需的输出频率和稳定性是关键参数。振荡器稳定性单位为PPM(百万分之一),通常为+/-50 PPM或+/-100 PPM。
驱动高速串行链路或为ADC/DAC提供时钟的振荡器通常还需要低相位噪声和低抖动。保持低噪声和低抖动非常重要,因为低噪声有助于降低高速链路的误码率,而高噪声和高抖动则会增加ADC和DAC上的噪声水平,从而降低信噪比。
您还应考虑输出信号标准。LVDS或LVPECL等差分信号的抗噪性比单端LVCMOS或LVTTL输出要好。此外,差分信号还能减少EMI问题,加速上升和下降时间。不过,差分信号的相位噪声性能比单端输出要差。高性能系统将采用正弦波振荡器作为主时钟源以减少相位噪声和抖动的影响,这在ADC和DAC计时情况下尤其如此。
由于FPGA可在内部支持多个时钟域,因此目前系统通常采用一个以上的时钟域。如果不能通过DLL、DCM或PLL等内部时钟资源实现所需的分频,那么设计人员往往会采用高速时钟和低速率时钟相结合。此外,不同的协议或算法也会需要不同的时钟频率,从而在设计中创建多个时钟和时钟域。图3给出了典型的时钟树。