2.2 Quartus Ⅱ的设计流程
2.2.1 设计输入
Quartus Ⅱ支持多种设计输入方式。设计输入可以采用文本形式的文件(如VHDL、Verilog HDL、AHDL等)、存储器数据文件(如HEX、MIF等)、波形文件输入、原理图设计输入和第三方EDA工具产生的文件(如EDIF、HDL、VQM等)。同时,还可以混合使用以上几种设计输入文件进行设计。
1. Verilog HDL/VHDL
HDL语言设计方法是大型模块化设计工程中最常用的设计方法。目前较为流行的HDL语言有VHDL、Verilog HDL等。它们的共同特点是易于使用自顶向下的设计方法,易于模块划分和复用,移植性强,通用性好,设计不因芯片工艺和结构的改变而变化,利于向ASIC的移植等。HDL语言是纯文本文件,用任何编辑器都可以编辑。有些编辑器集成了语言检查、语法辅助模板等功能,这些功能给HDL语言的设计和调试带来了很大的方便。
2. AHDL输入方式
AHDL是完全集成到Quartus Ⅱ软件系统中的一种高级模块化语言,可以利用Quartus Ⅱ软件文本编辑器或其他的文本编辑器产生AHDL文件。一个工程中可以全部使用AHDL语言,也可以和其他类型的设计文件混用。AHDL语言只能使用Altera器件FPGA/CPLD设计,其代码不能移植到其他厂商器件上(如Xilinx、Lattice等)使用,其通用性不强,所以较少使用。
3. 模块/原理图输入方式
原理图输入方式是FPGA/CPLD设计的基本方法之一,几乎所有的设计环境都集成了原理图输入法。这种设计方法直观、易用,支撑它的是一个功能强大、分门别类的器件库。然而,由于器件库元件通用性差,导致其移植性差,如更换设计实现的芯片型号时,整个原理图需要进行很大的修改甚至是全部重新设计,所以,原理图设计方式主要是一种辅助设计方式,它更多应用于混合设计中个别模块设计。
2.2.2 综合
向工程中添加设计文件及设置引脚锁定后,下一步就是对工程进行综合。随着FPGA/CPLD越来越复杂、性能要求越来越高,高级综合在设计流程中成为一个重要的部分,综合结果的优劣直接影响了布局布线的结果。综合的主要功能是将HDL语言翻译成最基本的与门、或门、非门、RAM和触发器等基本逻辑单元的链接关系(网络表),并根据要求(约束条件),优化所生成的门级逻辑链接,输出网络表文件,供布局、布线用。好的综合工具能够使设计占用芯片的物理面积更小,工作频率更高。
Quartus Ⅱ集成综合工具Analysis & Synthesis完全支持VHDL和Verilog HDL语言,并提供控制综合过程的一些可选项。用户可以在【Settings】对话框中选择语言标准,同时还可以制定Quartus Ⅱ软件,将非Quartus Ⅱ软件函数映射到Quartus Ⅱ软件函数的库映射文件(.lmf)上。
Analysis & Synthesis的分析阶段将检查工程的逻辑完整性和一致性,并检查边界连接和语法错误。它使用多种算法减少门的数量,删除冗余逻辑,并尽可能有效地利用器件体系结构。分析完成后,构建工程数据库,此数据库中包含完全优化的且合适的工程,该工程将用于为时序仿真、时序分析、器件编程等建立一个或多个文件。Quartus Ⅱ的综合设计流程如图2-3所示。
图2-3 Quartus Ⅱ的综合设计流程
2.2.3 布局布线
Quartus II Fitter也称为PowerFit Fitter,执行布局布线功能,这在Quartus Ⅱ软件中也称为“布局布线”。Fitter使用由Analysis & Synthesis建立的数据库,将工程的逻辑和时序要求与器件的可用资源相匹配。它将每个逻辑功能分配给最好的逻辑单元位置,进行布线和时序分析,并选择相应的互连路径和引脚分配。Quartus Ⅱ软件中的布局布线流程如图2-4所示。
图2-4 布局布线设计流程图
如果在设计中执行了资源分配,Fitter会试图将这些资源分配与器件上的资源相匹配,并努力满足已设置的任何其他约束条件,然后试图优化设计中的其余逻辑。如果尚未对设计设置任何约束条件,则Fitter将自动优化设计。如果找不到布局布线,Fitter会终止编译。
在【Settings】对话框中,可以指定是使用正常编译还是智能编译。如果使用智能编译,编译器将建立详细的数据库,有助于将来更快地编译,但这样可能会占用额外的磁盘空间。在智能编译之后的重新编译期间,编译器将评估自上次编译以来对当前设计所做的更改,然后只运行处理这些更改所需的编译模块。如果对设计的逻辑做任何更改,编译器在处理期间将使用所有模块。此选项类似于Quartus II Smart Recompile命令(【Processing】菜单)。可以在包括Fitter模块的Quartus Ⅱ软件中启动全编译,也可以单独启动Fitter。在单独启动Fitter之前,必须成功运行Analysis & Synthesis。
2.2.4 时序分析
时序要求允许为整个工程、特定的设计实体或个别实体、节点和引脚指定所需要的速度性能。Quartus II Timing Analyzer(时序分析工具)允许用户分析设计中所有逻辑的性能,并协助引导Fitter满足设计中的时序分析要求。默认情况下,时序分析工具作为全编译的一部分自动运行,它观察和报告时序信息,例如,建立时间(tSU)、保持时间(tH)、时钟至输出延时(tCO)、引脚至引脚延时(tPD)、最大时钟频率(fMAX)、延缓时间以及设计的其他时序特性。可以使用时序分析工具生成信息分析、调试和验证设计的时序性能;还可以使用Quartus Ⅱ时序分析工具进行最少的时序分析,它报告最佳情况时序结果,验证驱动芯片外信号的时钟至引脚延时。
图2-5 时序分析流程
1.指定工程范围的时序设置
工程范围的时序设置包括最大频率、建立时间、保持时间、时钟至输出延时、引脚至引脚延时以及最低时序要求。还可以设置工程范围的时钟设置和多个时钟域、路径切割选项和默认外部延时工程范围的时序设置如表2-1所示。
表2-1 工程范围的时序设置
2.指定个别时序分配
可以使用资源分配编辑器对个别实体、节点和引脚进行个别时序分配。资源分配编辑器支持点到点时序分配和通配符,用于在分配时标志特定节点。输入的引脚和节点时序保存在当前层次结构中最高层实体的实体设置文件(.esf)中。在时序分析工具中可以进行以下类型的个别时序分配。
(1)个别时钟设置:通过定义时序要求和设计中所有时钟信号之间的关系,进行精确的多时钟时序分析。
(2)多周期路径:需要一个以上时钟周期才能稳定下来的寄存器之间的路径,可以设置多周期路径,指示时序分析工具调整其度量。
(3)剪切路径:默认情况下,如果没有设置时序要求或只使用默认的fMAX时钟设置,Quartus Ⅱ软件将切断不相关时钟域之间的路径。如果设置了各个时钟分配,但没有定义时钟分配之间的关系,Quartus Ⅱ也将切断不相关时钟域之间的路径,还可以定义设计中特定路径的剪切路径。
(4)最少延时要求:特定节点或组的个别tH、最小tCO和最小tPD时序要求。可以对特定节点或组进行这些分配,以超越工程范围最小时序要求。
(5)外部延时:指定信号从外部寄存器(器件之外)到达输入引脚的延时。
(6)设计特定节点的个别tSU、tPD和tCO要求。
3.进行时序分析
指定时序设置和分配之后,就可以进行编译。完成编译之后,可以使用【Start】→【Start Timing Analysis】命令重新单独运行时序分析,或通过选择【Start】→【Start Minimum Timing Analysis】命令运行最少时序分析。
2.2.5 仿真
仿真的目的就是在软件环境下,验证电路的行为与设想中的是否一致。在FPGA/CPLD中,仿真分为功能仿真和时序仿真。功能仿真是在设计输入之后、综合和布局布线之前的仿真,又称为行为仿真或前仿真,不考虑电路的逻辑和门的时间延时,着重考虑电路在理想环境下的行为和设计构思的一致性。时序仿真又称为后仿真,是在综合、布局布线后,即电路已经映射到特定的工艺环境后,考虑器件延时的情况下对布局布线的网络表文件进行的一种仿真,其中器件延时信息是通过反向标注时序延时信息实现的。功能仿真的目的是设计出能工作的电路,它不是一个孤立的过程,与综合、时序分析等形成一个反馈工作过程,只有过程收敛之后的综合、布局布线等环节才有意义。所以,首先要保证功能仿真结果是正确的。不过,孤立的功能仿真通过也是没有意义的,如果在时序分析中发现时序不能满足要求,需要更改代码,而功能仿真必须重新进行。
Quartus Ⅱ软件中集成的仿真器可以对工程中的设计或设计的一部分进行功能仿真或时序仿真,其仿真流程如图2-6所示。
图2-6 Quartus Ⅱ软件的仿真流程
2.2.6 编程与配置
用Quartus Ⅱ软件成功编译工程之后,就可以对Altera器件进行编程或配置。Quartus Ⅱ编译器的Assembler模块生成编程文件,Quartus Ⅱ编程器可以用它与Altera编程硬件一起对器件进行编程或配置,还可以使用Quartus Ⅱ编程器的独立版本对器件进行编程和配置。其编程设计流程如图2-7所示。
图2-7 编程设计流程
1.设置Assembler生成编程文件
Assembler自动将Fitter的器件、逻辑单元和引脚分配转换为该器件的编程图像,这些图像以目标器件的一个或多个编程对象文件(.pof)或SRAM对象文件(.sof)的形式存在。Assembler通过以下方法之一以其他格式生成编程文件。
① 在【Device & Pin Options】对话框中,允许指定可选编程文件格式,例如,十六进制(Intel格式)输出文件(.hexout)、表格文本文件(.ttf)、原二进制文件(.rbf)、Jam™ 文件(.jam)、Jam字节代码文件(.jbc)、串行矢量格式文件(.svf)和系统内配置文件(.isc)。
② 利用【Create/Update】→【Create JAM, SVF, or ISC File】命令,生成Jam文件、Jam字节代码文件、串行矢量格式文件或系统内配置文件。
③ 利用【Convert Programming Files】命令将一个或多个SOF和POF组合转换为其他辅助编程文件格式。例如,原编程数据文件(.rpd)、EPC16或SRAM的HEXOUT文件、POF、局域更新或远程更新的POF、原二进制文件和表格文本文件。
2.设置编程器生成编程文件
编程器可以使用Assembler生成的POF和SOF对Quartus Ⅱ软件支持的所有Altera器件进行编程或配置。
Quartus Ⅱ编程器允许编辑CDF、CDF存储器件名称、器件顺序和设计的可选编程文件名称信息。可以通过一个或多个SOF、POF或通过单个Jam文件或Jam字节代码文件对器件进行编程或配置。
下面介绍使用编程器对一个或多个器件进行编程的基本流程。
(1)将Altera编程硬件与系统相连,并安装必要的启动程序。
(2)进行设计的全编译,或至少运行Compiler的Analysis & Synthesis、Fitter和Assembler模块。Assembler自动为设计建立SOF和POF。
(3)打开编程器,建立新的CDF。每个打开的编程器窗口代表一个CDF;可以打开多个CDF,但每次只能使用一个CDF进行编程。
(4)设置编程硬件。选择的编程硬件设置将影响编程器中可用的编程模式类型。
(5)选择相应的编程模式。例如,被动串行模式、JTAG模式、主动串行编程模式或套接字内编程模式。
(6)视编程模式而定,可以在CDF中添加、删除或更改编程文件与器件的顺序。可以指示编程器在JTAG链中自动检测Altera支持的器件,并将其添加至CDF器件列表中。还可以添加用户自定义的器件。
(7)对于非SRAM稳定器件,例如,配置器件、MAX 3000和MAX 7000器件,可以指定额外编程选项来查询器件。
(8)启动编程器。
2.2.7 工程更改管理
Quartus II软件允许在全编译之后对设计进行少量修改,通常称为工程更改纪录(ECO)。可以直接在设计数据库上做这些ECO更改,而不是在源代码或设置和配置文件上做,这样就无须运行全编译来实施这些更改。工程更改流程如图2-8所示。
图2-8 工程更改流程
以下步骤概述了Quartus Ⅱ软件中工程更改管理的设计流程。
(1)全编译之后,使用Chip Editor查看设计布局布线详细信息,并确定要更改的资源。如果需要的话,可以使用Netlist Explorer过滤和高亮显示资源。
(2)使用Resource Property Editor编辑资源的内部属性。
(3)使用【Check Resource Properties】命令(在【Edit】菜单中)检查资源更改的合法性。
(4)在更改管理器中查看更改的摘要和状态,并控制要实现和/或保存对资源属性的哪些更改。还可以添加备注,帮助您引用每个更改。
(5)使用检查和保存所有网表功能更改命令(【Check and Save All Netlist Changes】)检查网表中所有其他资源更改的合法性。
(6)运行Assembler,生成新的编程文件,或再次运行EDA Netlist Writer,生成新网表。如果要验证时序更改,可以运行时序分析工具。