1.4 FPGA/CPLD的设计流程
一般来说,完整的FPGA/CPLD设计流程包括电路设计与输入、功能仿真、综合、综合后仿真、实现、布线后仿真与验证、板级仿真验证与调试等主要步骤,如图1-3所示。
图1-3 完整的FPGA/CPLD设计流程
(1) 电路设计与输入。
电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA工具。常用的设计输入方法有硬件描述语言(HDL)和原理图设计输入方法等。原理图设计输入法在早期应用得比较广泛,它根据设计要求,选用器件、绘制原理图、完成输入过程。这种方法的优点是直观、便于理解、元器件库资源丰富。但是在大型设计中,这种方法的可维护性较差,不利于模块构造与重用;更主要的缺点是当所选用芯片升级换代后,所有的原理图都要做相应的改动。目前进行大型工程设计时,最常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL语言是VHDL和Verilog HDL。它们的共同特点是利于由顶向下设计,利于模块的划分与复用,可移植性好,通用性好,设计不因芯片的工艺与结构的不同而变化,更利于向ASIC的移植。波形输入和状态机输入方法是两种常用的辅助设计输入方法:使用波形输入法时,只要绘制出激励波形和输出波形,EDA软件就能自动地根据响应关系进行设计;使用状态机输入法时,设计者只需画出状态转移图,EDA软件就能生成相应的HDL代码或原理图,使用十分方便。但是需要指出的是,波形输入和状态机输入方法只能在某些特殊情况下缓解设计者的工作量,并不适合所有的设计。
(2) 功能仿真。
电路设计完成后,要用专用的仿真工具对设计进行功能仿真,验证电路功能是否符合设计要求。功能仿真有时也被称为前仿真。常用的仿真工具有Mentor公司的Model Sim、Synopsys公司的VCS、Cadence公司的NC-Verilog和NC-VHDL及Aldec公司的Active-HDL等。通过仿真能及时发现设计中的错误,加快设计进度,提高设计的可靠性。
(3) 综合优化。
综合优化(Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门及RAM和触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的逻辑连接,输出.edf和.edn等标准格式的网表文件,供FPGA/CPLD厂家的布局布线器进行实现。常用的专业综合优化工具有Synplicity公司的Synplify/Synplify Pro、Amplify,Synopsys公司的FPGA Compiler Ⅱ(Synopsys公司将停止发展FPGA Express软件,致力于FPGA Compiler Ⅱ平台的开发),Mentor公司旗下Exemplar Logic公司出品的Leonardo Spectrum和Mentor Graphics公司出品的Precision RTL等。另外,FPGA/CPLD厂商的集成开发环境也自带综合工具。
(4) 综合后仿真。
综合完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。综合后仿真虽然比功能仿真精确一些,但是只能估计门延时,不能估计线延时,仿真结果与布线后的实际情况还有一定的差距,并不十分准确。这种仿真的主要目的在于检查综合器的综合结果是否与设计输入一致。目前主流综合工具日益成熟,对于一般性设计,如果设计者确信自己表述明确,没有综合歧义发生,则可以省略综合后仿真步骤。但是如果在布局布线后仿真时发现有电路结构与设计意图不符的现象,则常常需要回溯到综合后仿真以确认是否是由于综合歧义造成的问题。在功能仿真中介绍的仿真工具一般都支持综合后仿真功能。
(5) 实现与布局布线。
综合结果的本质是一些由与、或、非门及触发器和RAM等基本逻辑单元组成的逻辑网表,它与芯片实际的配置情况还有较大差距。此时应该使用FPGA/CPLD厂商提供的软件工具,根据所选芯片的型号,将综合输出的逻辑网表适配到具体FPGA/CPLD器件上,这个过程就叫作实现过程。因为只有器件开发商最了解器件的内部结构,所以实现步骤必须选用器件开发商提供的工具。在实现过程中最主要的过程是布局布线(PAR,Place And Route):所谓布局(Place)是指将逻辑网表中的硬件原语或底层单元合理地适配到FPGA内部的固有硬件结构上,布局的优劣对设计的最终实现结果(在速度和面积两个方面)影响很大;所谓布线(Route)是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。FPGA的结构相对复杂,为了获得更好的实现结果,特别是保证能够满足设计的时序条件,一般采用时序驱动的引擎进行布局布线,所以对于不同的设计输入,特别是不同的时序约束,获得的布局布线结果一般有较大差异。CPLD结构相对简单得多,其资源有限而且布线资源一般为交叉连接矩阵,故CPLD的布局布线过程相对简单明朗得多,一般被称为适配过程。一般情况下,用户可以通过设置参数指定布局布线的优化准则,总的来说优化目标主要有面积和速度两个方面。一般根据设计的主要矛盾,选择面积或速度或平衡两者等优化目标,但是当两者冲突时,满足时序约束要求更重要一些,此时选择速度或时序优化目标效果更佳。
关于“面积”和“速度”两个设计目标的平衡与互换可以参考人民邮电出版社出版的《Intel FPGA/CPLD设计(高级篇)》中的相关论述。
(6) 时序仿真与验证。
将布局布线的时延信息反标注到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,简称后仿真。布局布线之后生成的仿真时延文件包含的时延信息最全,不仅包含门延时,还包含实际布线延时,所以布线后仿真最准确,能较好地反映芯片的实际工作情况。一般来说,布线后仿真步骤必须进行,通过布局布线后仿真能检查设计时序与FPGA实际运行情况是否一致,确保设计的可靠性和稳定性。布局布线后仿真的主要目的在于发现时序违规(Timing Violation),即不满足时序约束条件或器件固有时序规则(建立时间、保持时间等)的情况。在功能仿真中介绍的仿真工具一般都支持布局布线后仿真功能。
到此我们介绍了FPGA/CPLD设计流程中3个不同阶段的仿真,请大家明确这些仿真的本质和目的,功能仿真的主要目的在于验证语言设计的电路结构和功能是否和设计意图相符;综合后仿真的主要目的在于验证综合后的电路结构是否与设计意图相符、是否存在歧义综合结果;布局布线后仿真即时序仿真的主要目的在于验证是否存在时序违规。这些不同阶段不同层次的仿真配合使用,能够更好地确保设计的正确性,明确问题定位,节约调试时间。
有时为了保证设计的可靠性,在时序仿真后还要做一些验证。验证的手段比较丰富,可以用Quartus Ⅱ内嵌时序分析工具完成静态时序分析(STA,Static Timing Analyzer),也可以用第三方验证工具(如Synopsys的Formality验证工具、Prime Time静态时序分析工具等),还可以用Quartus Ⅱ内嵌的Chip Editor分析芯片内部的连接与配置情况。
(7) 板级仿真与验证。
在有些高速设计情况下还需要使用第三方的板级验证工具进行仿真与验证,如Mentor Tau、Forte Design - Timing Designer、Mentor Hyperlynx、Mentor ICX、Cadence SPECCTRAQuest、Synopsys HSPICE。这些工具通过对设计的IBIS和HSPICE等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰(EMI)等电路特性。
(8) 调试与加载配置。
设计开发的最后步骤就是在线调试或将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪(LA,Logic Analyzer)是逻辑设计的主要调试工具。传统的逻辑功能板级验证手段是用逻辑分析仪分析信号,设计时要求FPGA和PCB设计人员保留一定数量的FPGA管脚作为测试管脚,编写FPGA代码时将需要观察的信号作为模块的输出信号,在综合实现时再把这些输出信号锁定到测试管脚上,然后连接逻辑分析仪的探头到这些测试脚,设定触发条件,进行观测。逻辑分析仪的特点是专业、高速,触发逻辑可以相对复杂。其缺点是价格昂贵(好一些的LA需要几十万甚至上百万元人民币),灵活性差。PCB布线后测试脚的数量就固定了,不能灵活增加,当测试脚不足时会影响测试,如果测试脚太多又影响PCB布局布线。
对于相对简单一些的设计,使用Quartus Ⅱ内嵌的Signal Tap Ⅱ对设计进行在线逻辑分析可以较好地解决上述矛盾。Signal Tap Ⅱ是一种FPGA在线片内信号分析工具,它的主要功能是通过JTAG口,在线、实时地读出FPGA的内部信号。其基本原理是利用FPGA中未使用的Block RAM,根据用户设定的触发条件将信号实时地保存到这些Block RAM中,然后通过JTAG口传送到计算机,最后在计算机屏幕上显示出时序波形。
任何仿真或验证步骤出现问题,就需要根据错误的定位返回到相应的步骤更改或重新设计。