本文是依据FPGA技能牛人历年来的经历所总结出来的关于FPGA开发根本流程及注意事项根本介绍,期望给初学者丁点协助。众所周知,FPGA是可编程芯片,因而FPGA的规划办法包括硬件规划和软件规划两部分。硬件包括FPGA芯片电路、 存储器、输入输出接口电路以及其他设备,软件便是相应的HDL程序以及嵌入式C程序。
因为现在微电子技能现已开展到SOC阶段,即集成体系(Integrated System)阶段,相关于集成电路(IC)的规划思维有着革命性的改变。SOC是一个杂乱的体系,它将一个完好产品的功用集成在一个芯片上,包括中心处理器、存储单元、硬件加速单元以及很多的外部设备接口等,具有规划周期长、完结本钱高档特征,因而其规划办法必定是自顶向下的从体系级到功用模块的软、硬件协同规划,到达软、硬件的无缝结合。
这么巨大的作业量明显超出了单个工程师的才能,因而需求依照层次化、结构化的规划办法来施行。首要由总规划师将整个软件开发使命区分为若干个可操作的模块,并对其接口和资源进行评价,编制出相应的行为或结构模型,再将其分配给下一层的规划师。这就答应多个规划者一起规划一个硬件体系中的不同模块,并为自己所规划的模块担任;然后由上层规划师对基层模块进行功用验证。
自顶向下的规划流程从体系级规划开端,区分为若干个二级单元,然后再把各个二级单元区分为下一层次的根本单元。一向下去,直到能够运用根本模块或许IP核直接完结停止,盛行的FPGA开发东西都供给了层次化办理,能够有用地整理错综杂乱的层次,能够方便地查看某一层次模块的源代码以修正过错。
在工程实践中,还存在软件编译时长的问题。因为大型规划包括多个杂乱的功用模块,其时序收敛与仿真验证杂乱度很高,为了满意时序方针的要求,往往需求重复修正源文件,再对所修正的新版本进行从头编译,直到满意要求停止。这里边存在两个问题:首要,软件编译一次需求长达数小时乃至数周的时刻,这是开发所不能容忍的;其次,从头编译和布局布线后成果差异很大,会将已满意时序的电路损坏。因而有必要提出一种有用进步规划功用,承继已有成果、便于团队化规划的软件东西。FPGA厂商意识到这类需求,由此开发出了相应的逻辑确定和增量规划的软件东西。例如,赛灵思公司的处理计划便是PlanAhead。
Planahead答应高层规划者为不同的模块区分相应FPGA芯片区域,并答应底层规划者在所给定的区域内独登时进行规划、完结和优化,等各个模块都正确后,再进行规划整合。假如在规划整合中呈现过错,独自修正即可,不会影响到其它模块。Planahead将结构化规划办法、团队化协作规划办法以及重用承继规划办法三者完美地结合在一起,有用地进步了规划功率,缩短了规划周期。
不过从其描绘能够看出,新式的规划办法对体系顶层规划师有很高的要求。在规划初期,他们不只要评价每个子模块所耗费的资源,还需求给出相应的时序联系;在规划后期,需求依据底层模块的完结状况完结相应的修订。
典型FPGA开发流程与注意事项
FPGA的规划流程便是运用EDA开发软件和编程东西对FPGA芯片进行开发的进程。典型FPGA的开发流程一般如图4.1.1所示,包括功用界说/器材选型、规划输入、功用仿真、归纳优化、归纳后仿真、完结、布线后仿真、板级仿真以及芯片编程与调试等首要进程。
1.功用界说/器材选型
在FPGA规划项目开端之前,有必要有体系功用的界说和模块的区分,其他便是要依据使命要求,如体系的功用和杂乱度,对作业速度和器材自身的资源、本钱、以及连线的可布性等方面进行权衡,挑选适宜的规划计划和适宜的器材类型。一般都选用自顶向下的规划办法,把体系分红若干个根本单元,然后再把每个根本单元区分为下一层次的根本单元,一向这样做下去,直到能够直接运用EDA元件库停止。
2.规划输入
规划输入是将所规划的体系或电路以开发软件要求的某种办法表示出来,并输入给EDA东西的进程。常用的办法有硬件描绘言语(HDL)和原理图输入办法等。原理图输入办法是一种最直接的描绘办法,在可编程芯片开展的前期运用比较广泛,它将所需的器材从元件库中调出来,画出原理图。这种办法尽管直观并易于仿真,但功率很低,且不易保护,不利于模块结构和重用。更首要的缺陷是可移植性差,当芯片晋级后,一切的原理图都需求作必定的改动。现在,在实践开发中运用最广的便是HDL言语输入法,运用文本描绘规划,能够分为一般HDL和行为HDL。一般HDL有ABEL、CUR等,支撑逻辑方程、真值表和状态机等表达办法,首要用于简略的小型规划。而在中大型工程中,首要运用行为HDL,其干流言语是Verilog HDL和VHDL。这两种言语都是美国电气与电子工程师协会(IEEE)的规范,其一起的杰出特征有:言语与芯片工艺无关,利于自顶向下规划,便于模块的区分与移植,可移植性好,具有很强的逻辑描绘和仿真功用,而且输入功率很高。除了这IEEE规范言语外,还有厂商自己的言语。也能够用HDL为主,原理图为辅的混合规划办法,以发挥两者的各自特征。
3.功用仿真
功用仿真也称为前仿真是在编译之前对用户所规划的电路进行逻辑功用验证,此刻的仿真没有推迟信息,仅对开始的功用进行检测。仿真前,要先运用波形编辑器和HDL等树立波形文件和测验向量(行将所关怀的输入信号组合成序列),仿真成果将会生成陈述文件和输出信号波形,从中便能够调查各个节点信号的改变。假如发现过错,则回来规划修正逻辑规划。常用的东西有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。
4.归纳优化
所谓归纳便是将较高档笼统层次的描绘转化成较低层次的描绘。归纳优化依据方针与要求优化所生成的逻辑衔接,使层次规划平面化,供FPGA布局布线软件进行完结。就现在的层次来看,归纳优化(Synthesis)是指将规划输入编译成由与门、或门、非门、RAM、触发器等根本逻辑单元组成的逻辑衔接网表,而并非实在的门级电路。实在详细的门级电路需求运用FPGA制造商的布局布线功用,依据归纳后生成的规范门级结构网表来发生。为了能转换成规范的门级结构网表,HDL程序的编写有必要契合特定归纳器所要求的风格。因为门级结构、RTL级的HDL程序的归纳是很老练的技能,一切的归纳器都能够支撑到这一级其他归纳。常用的归纳东西有Synplicity公司的Synplify/Synplify Pro软件以及各个FPGA厂家自己推出的归纳开发东西。
5.归纳后仿真
归纳后仿真查看归纳成果是否和原规划共同。在仿真时,把归纳生成的规范延时文件反标注到归纳仿真模型中去,可估量门延时带来的影响。但这一进程不能估量线延时,因而和布线后的实践状况还有必定的距离,并不非常准确。现在的归纳东西较为老练,关于一般的规划能够省掉这一步,但假如在布局布线后发现电路结构和规划目的不符,则需求回溯到归纳后仿真来承认问题之地点。在功用仿真中介绍的软件东西一般都支撑归纳后仿真。
6. 完结与布局布线
布局布线可理解为运用完结东西把逻辑映射到方针器材结构的资源中,决议逻辑的最佳布局,挑选逻辑与输入输出功用链接的布线通道进行连线,并发生相应文件(如装备文件与相关陈述),完结是将归纳生成的逻辑网表装备到详细的FPGA芯片上,布局布线是其间最重要的进程。布局将逻辑网表中的硬件原语和底层单元合理地装备到芯片内部的固有硬件结构上,而且往往需求在速度最优和面积最优之间作出挑选。布线依据布局的拓扑结构,运用芯片内部的各种连线资源,合理正确地衔接各个元件。现在,FPGA的结构非常杂乱,特别是在有时序约束条件时,需求运用时序驱动的引擎进行布局布线。布线完毕后,软件东西会主动生成陈述,供给有关规划中各部分资源的运用状况。因为只要FPGA芯片出产商对芯片结构最为了解,所以布局布线有必要挑选芯片开发商供给的东西。
7.时序仿真
时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到规划网表中来检测有无时序违规(即不满意时序约束条件或器材固有的时序规矩,如树立时刻、坚持时刻等)现象。时序仿真包括的推迟信息最全,也最准确,能较好地反映芯片的实践作业状况。因为不同芯片的内部延时不一样,不同的布局布线计划也给延时带来不同的影响。因而在布局布线后,经过对体系和各个模块进行时序仿真,剖析其时序联系,估量体系功用,以及查看和消除竞赛冒险对错常有必要的。在功用仿真中介绍的软件东西一般都支撑归纳后仿真。
8. 板级仿真与验证
板级仿真首要运用于高速电路规划中,对高速体系的信号完好性、电磁搅扰等特征进行剖析,一般都以第三方东西进行仿真和验证。
9.芯片编程与调试
规划的最终一步便是芯片编程与调试。芯片编程是指发生运用的数据文件(位数据流文件,Bitstream Generation),然后将编程数据下载到FPGA芯片中。其间,芯片编程需求满意必定的条件,如编程电压、编程时序和编程算法等方面。逻辑剖析仪(Logic Analyzer,LA)是FPGA规划的首要调试东西,但需求引出很多的测验管脚,且LA价格昂贵。现在,干流的FPGA芯片出产商都供给了内嵌的在线逻辑剖析仪(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)来处理上述对立,它们只需求占用芯片少数的逻辑资源,具有很高的实用价值。