FPGA实验指导书第三章QuartusII软件应用Altera公司的QuartusII设计软件提供了完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境。QuartuSII软件含有FPGA和CPLD设计所有阶段的解决方案,如图1所示。设计输入包括基于模块的设计、系统级设+计和软件开发综合功耗分析★布局布线一调试工程更改管理时序分析+时序逼近仿真?编程和配置图1QuartusII设计流程QuartusII设计工具支持基于VHDL、VHDLHDL的设计,其内部嵌有VHDL、VHDLHDL逻辑综合器。QuartusII可以利用第三方的综合工具如Synplify进行逻辑综合,也可以利用第三方的仿真工具如Modelsim进行仿真。此外QuartusII与MATLAB和DSPBuilder结合,可以进行基于FPGA的DSP系统开发。使用QuartusII内嵌的SOPCBuilder,配合NiosIIIDE集成开发环境,可以开发NiosII嵌入式软核处理器。3.1图形用户界面设计流程QuartusII软件为设计流程的每个阶段提供QuartusII图形用户界面及命令行界面,可以在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同的界面。图2所示为QuartusII图形用户界面的功能。以下步骤描述了使用QuartusII图形用户界面的基本设计流程。(1)使用NewProjectWizard(“File”菜单)建立新工程并指定目标器件或器件系列。(2)使用TextEditor建立VHDLHDL、VHDL或Altera硬件描述语言(AHDL)设计。根据需要,使用BlockEditor建立表示其他设计文件的符号框图,也可以建立原理图。还可以使用MegaWizarPlug-InManager(Tools菜单)生成宏功能模块和IP功能的自定义变量,在设计中将它们例化。16
FPGA 实验指导书 16 第三章 Quartus II 软件应用 Altera 公司的 Quartus II 设计软件提供了完整的多平台设计环境,能够直接满足特定设计 需要,为可编程芯片系统(SOPC)提供全面的设计环境。Quartus II 软件含有 FPGA 和 CPLD 设 计所有阶段的解决方案,如图 1 所示。 图 1 Quartus II 设计流程 Quartus II 设计工具支持基于 VHDL、VHDL HDL 的设计,其内部嵌有 VHDL、VHDL HDL 逻辑 综合器。Quartus II 可以利用第三方的综合工具如 Synplify 进行逻辑综合,也可以利用第三方 的仿真工具如 Modelsim 进行仿真。此外 Quartus II 与 MATLAB 和 DSP Builder 结合,可以进行 基于 FPGA 的 DSP 系统开发。使用 Quartus II 内嵌的 SOPC Builder,配合 Nios II IDE 集成开 发环境,可以开发 Nios II 嵌入式软核处理器。 3.1 图形用户界面设计流程 Quartus II 软件为设计流程的每个阶段提供 Quartus II 图形用户界面及命令行界面,可以 在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同的界面。 图 2 所示为 Quartus II 图形用户界面的功能。以下步骤描述了使用 Quartus II 图形用户 界面的基本设计流程。 (1)使用 New Project Wizard(“File”菜单)建立新工程并指定目标器件或器件系列。 (2)使用 Text Editor 建立 VHDL HDL、VHDL 或 Altera 硬件描述语言(AHDL)设计。根据 需要,使用 Block Editor 建立表示其他设计文件的符号框图,也可以建立原理图。还可以使用 Mega Wizar Plug-In Manager(Tools 菜单)生成宏功能模块和 IP 功能的自定义变量,在设计 中将它们例化。 设计输入 综 合 布局布线 时序分析 仿 真 编程和配置 置 功耗分析 调 试 工程更改管理 时序逼近 包括基于模块的 设计、系统级设 计和软件开发
FPGA实验指导书系统级设计设计输入文本编辑器(TextEditor)·SOPC Builder·模块和符号编辑部(Block&SyinbolEditor)·DSP Builder约束输入软件开发·分配编辑器.Software Builder(AssignmentEditor)·引脚规划器(PinPlanner)·Settings对话框基于模块的设计:平面布局图编辑器(FloorplanEditcr)·LogicLock窗·设计分区窗口·平面布局图编辑器(FloorplanEditor)VQMWriter综合·分析和综合(Analysis&Synthesis)EDA界面.VHDL,Verilong HDL&AHDL·EDA Netlist Writer·设计助手·RTL查看器(RTLViewer)功耗分析·技术映射查看器(TechnologyMapViewer)·PowerPlay Power Analyxer工具·渐进式综合(IncrementalSynthesis)·PowerPlay EarlyPower Estimator布局布线:适配器(Fitter)时序逼近·分配编辑器(AssignmentEditor)平面布局图编辑器(FloorplanEditor)平面布局图编辑器(FlcorplanEditor)·LogicLock窗·渐进式编辑(IncrementaiCompilation)·时序优化顾问(Timing Optimization报告窗口(ReportWindow)Adviscr)·资源优化顾尚(ResourceOptimization·设计空间管理器(DesignSpaceExplorer)Advisor)·进式编译(Incremental Compilation)·设计空间管理器(DesignSpaceExplorer)芯片编辑器(ChipEditor)调试SignalTap If时序分析.SignalProbe·时序分析仪(TimingAnalyzer)·在系统存储内容编辑器·报告窗口(ReportWindow)(In-System Memory Content Editor)·技术映射查看器(TechnologyMapViewer)·RTL查看器(RTLViewer)仿真·技术映射查看器(TechnologyMapViewer)·仿真器(Simulator)·芯片编辑器(ChipEditor)·波形编辑器(WaveformEditor)工程更改管理编程·芯片编辑器(ChipEditor)·汇编程序(Assembler)·资源属性编辑器(ResourcePropertyEditor)·编程器(Programmer)·转换程序文件(ConvertProgrammingFiles)·更改管理器(ChengeManager)图2QuartusII图形用户界面功能(3)可选项:使用AssignmentEditor、PinPlanner、Settings对话框(Assignment菜单)、FloorplanEditor、DesignPartitions窗口、LogicLock功能指定初始设计约束。(4)可选项:进行EarlyTimingEstimate,在完成Fitter之前生成时序结果的早期估算。(5)可选项:使用SOPCBuilder或DSPBuilder建立系统级设计。(6)可选项:使用SoftwareBuilder为Excalibur器件处理器或Nios嵌入式处理器建立软件和编程文件。(7)使用Analysis&Synthesis对设计进行综合。(8)可选项:如果设计含有分区,而没有进行完整编译,则需要采用PartitionMerge合并分区。(9)可选项:通过使用Simulator和GenerateFunctionalSimulationNetlist命令在设计中执行功能仿真。(10)使用Fitter对设计进行布局布线。17
FPGA 实验指导书 17 图 2 Quartus II 图形用户界面功能 (3)可选项:使用 Assignment Editor、Pin Planner、Settings 对话框(Assignment 菜 单)、Floorplan Editor、Design Partitions 窗口、LogicLock 功能指定初始设计约束。 (4)可选项:进行 Early Timing Estimate,在完成 Fitter 之前生成时序结果的早期估算。 (5)可选项:使用 SOPC Builder 或 DSP Builder 建立系统级设计。 (6)可选项:使用 Software Builder 为 Excalibur 器件处理器或 Nios 嵌入式处理器建立 软件和编程文件。 (7)使用 Analysis & Synthesis 对设计进行综合。 (8)可选项:如果设计含有分区,而没有进行完整编译,则需要采用 Partition Merge 合 并分区。 (9)可选项:通过使用 Simulator 和 Generate Functional Simulation Netlist 命令在 设计中执行功能仿真。 (10)使用 Fitter 对设计进行布局布线。 时序逼近 ·平面布局图编辑器(Floorplan Editor) ·LogicLock 窗口 ·时序优化顾问(Timing Optimization Adviscr) ·设计空间管理器(Design Space Explorer) ·渐进式编译(Incremental Compilation) 调试 ·SignalTap II ·SignalProbe ·在系统存储内容编辑器 (In-System Memory Content Editor) ·RTL 查看器(RTL Viewer) ·技术映射查看器(Technology Map Viewer) ·芯片编辑器(Chip Editor) 工程更改管理 ·芯片编辑器(Chip Editor) ·资源属性编辑器(Resource Property Editor) ·更改管理器(Chenge Manager) 布局布线 ·适配器(Fitter) ·分配编辑器(Assignment Editor) ·平面布局图编辑器(Flcorplan Editor) ·渐进式编辑(Incremental Compilation) ·报告窗口(Report Window) ·资源优化顾问(Resource Optimization Advisor) ·设计空间管理器(Design Space Explorer) ·芯片编辑器(Chip Editor) 时序分析 ·时序分析仪(Timing Analyzer) ·报告窗口(Report Window) ·技术映射查看器(Technology Map Viewer) 仿真 ·仿真器(Simulator) ·波形编辑器(Waveform Editor) 编程 ·汇编程序(Assembler) ·编程器(Programmer) ·转换程序文件(Convert Programming Files) 系统级设计 ·SOPC Builder ·DSP Builder 设计输入 ·文本编辑器(Text Editor) ·模块和符号编辑部(Block & Syinbol Editor) 软件开发 ·Software Builder 基于模块的设计 ·LogicLock 窗口 ·平面布局图编辑器(Floorplan Editor) ·VQM Writer EDA 界面 ·EDA Netlist Writer 功耗分析 ·PowerPlay Power Analyxer 工具 ·PowerPlay Early Power Estimator 约束输入 ·分配编辑器(Assignment Editor) ·引脚规划器(Pin Planner) ·Settings 对话框 ·平面布局图编辑器(Floorplan Editcr) ·设计分区窗口 综合 ·分析和综合(Analysis & Synthesis) ·VHDL,Verilong HDL & AHDL ·设计助手 ·RTL 查看器(RTL Viewer) ·技术映射查看器(Technology Map Viewer) ·渐进式综合(Incremental Synthesis)
FPGA实验指导书(11)可选项:使用PowerPlayPowerAnalyzer进行功耗估算和分析。(12)可选项:使用TimingAnalyzer对设计进行时序分析。(13)可选项:使用Simulator对设计进行时序仿真。(14)可选项:使用物理综合、TimingClosure平面布局图、LogicLock功能、Settings对话框和AssignmentEditor改进时序,达到时序逼近。(15)使用Assembler为设计建立编程文件。(16)使用编程文件、Programmer和Altera硬件对器件进行编程;或将编程文件转换为其他文件格式以供嵌入式处理器等其他系统使用。(17)可选项:使用SignalTapIILogicAnalyzer、SignalProbe功能或ChipEditor对设计进行调试。(18)可选项:使用ChipEditor、ResourcePropertyEditor和ChangeManager管理工程更改。3.2命令行设计流程QuartusII软件提供全面的命令行界面解决方案。软件包括用于设计流程每个阶段不同的可执行文件。每个可执行文件只在开始运行时才占用内存。这些可执行文件能够与标准命令行命令和脚本、Tcl脚本以及Makefile脚本一起使用。相关命令行可执行文件的列表如表1所示。使用命令行流程可以降低内存要求,并可使用脚本或标准的命令行选项和命令(包括Tc1命令)控制QuartusII软件,建立Makefile,如图3所示。表1命令行可执行文件可执行文件应用场合功能Analysis&Synthesis建立工程,然后建立工程数据库、综合设计并对工程设计文件进行技术映射quartus_map quartus_fitFitter对设计进行布局布线。在运行Fitter之前必须成功运行Analysis&Synthesis根据一组设计规则检查设计的可靠性。在为HardCopy器件件换设计之前,Designquartus_drcDesign AssistantAssistant非常有助于检查可靠性。在运行DesignAssistant之前必须成功运行Analysis&Synthesis或FitterTiming Analyzer分析已实现电路的速度性能.在运行Timing Analyzer之前必须成功运行Fitter quartus_tan为目标器件编程或配置建立一个或多个编程文件。运行Assembler前须成功运行Assemblerquartus_asmFitter生成与其他EDA工具配合使用的网表文件和其他输出文件。根据使用的选项,在quartus_edaEDA Netlist Writer运行EDANetlistWriter之前,必须成功运行Analysis&Synthesis、Fitter或者TimingAnalyzer生成内部网表文件,包括用于QuartusIICompiler数据库的VQM文件,使它们Compiler可以用于反标和LogicLock功能,反标器件和资源分配以保持适配不变,方便今DatabaseInterfacequartus_cdb后的编译还可以导入、导出版本兼容的数据库,并合并分区。在运行Compiler(包括VQMWriter)DatabaseInterface之前必须成功运行Fitter或Analysis&Synthesis对设计进行功能或时序仿真。在进行功能仿真之前必须运行Analysis&Simulatorquartus_simSynthesis。在进行时序仿真之前,必须运行TimingAnalyzer分析并估算设计的全部动态和静态功耗。计算输出信号的触发速率和静态概率。Power Analyzerquartus_pow在运行PowerPlayPowerAnalyzer之前,必须成功运行Fitter18
FPGA 实验指导书 18 (11)可选项:使用 PowerPlay Power Analyzer 进行功耗估算和分析。 (12)可选项:使用 Timing Analyzer 对设计进行时序分析。 (13)可选项:使用 Simulator 对设计进行时序仿真。 (14)可选项:使用物理综合、Timing Closure 平面布局图、LogicLock 功能、Settings 对话框和 Assignment Editor 改进时序,达到时序逼近。 (15)使用 Assembler 为设计建立编程文件。 (16)使用编程文件、Programmer 和 Altera 硬件对器件进行编程;或将编程文件转换为其 他文件格式以供嵌入式处理器等其他系统使用。 (17)可选项:使用 SignalTap II Logic Analyzer、SignalProbe 功能或 Chip Editor 对 设计进行调试。 (18)可选项:使用 Chip Editor、Resource Property Editor 和 Change Manager 管理工 程更改。 3.2 命令行设计流程 Quartus II 软件提供全面的命令行界面解决方案。软件包括用于设计流程每个阶段不同的 可执行文件。每个可执行文件只在开始运行时才占用内存。这些可执行文件能够与标准命令行 命令和脚本、Tcl 脚本以及 Makefile 脚本一起使用。相关命令行可执行文件的列表如表 1 所示。 使用命令行流程可以降低内存要求,并可使用脚本或标准的命令行选项和命令(包括 Tcl 命令) 控制 Quartus II 软件,建立 Makefile,如图 3 所示。 表 1 命令行可执行文件 可执行文件 应用场合 功 能 quartus_map Analysis&Synthesis 建立工程,然后建立工程数据库、综合设计并对工程设计文件进行技术映射 quartus_fit Fitter 对设计进行布局布线。在运行 Fitter 之前必须成功运行 Analysis & Synthesis quartus_drc Design Assistant 根据一组设计规则检查设计的可靠性。在为 HardCopy 器件件换设计之前,Design Assistant 非常有助于检查可靠性。在运行 Design Assistant 之前必须成功运行 Analysis & Synthesis 或 Fitter quartus_tan Timing Analyzer 分析已实现电路的速度性能.在运行 Timing Analyzer 之前必须成功运行 Fitter quartus_asm Assembler 为目标器件编程或配置建立一个或多个编程文件。运行 Assembler 前须成功运行 Fitter quartus_eda EDA Netlist Writer 生成与其他 EDA 工具配合使用的网表文件和其他输出文件。根据使用的选项,在 运行 EDA Netlist Writer 之前,必须成功运行 Analysis & Synthesis、Fitter 或者 Timing Analyzer quartus_cdb Compiler DatabaseInterface (包括 VQM Writer) 生成内部网表文件,包括用于 Quartus II Compiler 数据库的 VQM 文件,使它们 可以用于反标和 LogicLock 功能,反标器件和资源分配以保持适配不变,方便今 后的编译还可以导入、导出版本兼容的数据库,并合并分区。在运行 Compiler Database Interface 之前必须成功运行 Fitter 或 Analysis & Synthesis quartus_sim Simulator 对设计进行功能或时序仿真。在进行功能仿真之前必须运行 Analysis & Synthesis。在进行时序仿真之前,必须运行 Timing Analyzer quartus_pow Power Analyzer 分析并估算设计的全部动态和静态功耗。计算输出信号的触发速率和静态概率。 在运行 PowerPlay PowerAnalyzer 之前,必须成功运行 Fitter
FPGA实验指导书对Altera器件编程 quartus_pgmProgrammerConvert Programming将编程文件转换为辅助编程文件格式quartus_cpfFilesSignalTap II Logic建立SignalTapII文件(*.stp)。在Assembler之后运行时,器件全速运行的情quartus_stpAnalyzer况下,SignalTapIILogicAnalyzer捕获内部器件节点信号为Excalibur嵌入式处理器进行设计quartus_swbSoftware BuilderTel Shell为QuartusII软件提供Tcl脚本she11quartus_shQuartus II SheIquartus shQuartusIShe!可用做QuartusI可执行文件的Tcl解释器源设计文件。包括VerllogDesign文件(.V).VHDLDeslgn文件(vhd).VerllogQuartusMapptng文件(.vqm)TextDesign文作(idn)、BlockDesign文件(.bdt)以及EDIF网表文件(.edf)分析与综合quartus_map设计助手仿真quartus_drcquartus_sim适配编译数据库quartus_fitquartus_cdb时序分析务Yquartus_tanquartus_pow汇编EDA网表输出quartus_asmquartusedaSoftware Builderquartus_swbEDA工具输出文件,包括VerllogOutput超霸务积转换编程文件编程文件(VO)VHDLOutput文件quartus_pgmaartus cnfquartus_stp(.vho).VQM文件和StandandDelayFomtatOutput文件(sdo)图3QuartusII命令行设计流程3.3交通灯设计实例本节通过一个LED流水灯的设计实例,详细介绍QuartusII的主要功能、使用方法和设计流程。本书中所有实例都是在QuartusII8.1下编译通过,相应界面也是QuartusII8.1下的界面。3.3.1设计原理在这个实例中,我们设计一个简单的LED流水指示灯,8个彩灯共阴接地,阳极分别为EP3C16的8个I/0相连,I/0输出变化的电平,来控制彩灯的点亮,流水灯分不同的时段,指示灯有不同的显示模式,开始时刻LED流水灯从右到左依次点亮,第二时间段LED流水灯从左到右依次熄灭,第三时间段LED流水从中间向两边点依次点亮,第四时间段LED流水灯从中间向两边点依次熄灭,第五时间段LED流水灯奇偶位循环点亮,最后完成一次循环又回到开始时刻,进人第二轮循环,来实现LED流水灯的控制实验。从LED流水灯的工作原理来看,无论是第一时间段还是其他的时间段,LED流水灯点亮还是熄灭,都是一个频率来控制LED流水灯点亮和熄灭的快慢。只不过这个频率可以在程序中控制,19
FPGA 实验指导书 19 quartus_pgm Programmer 对 Altera 器件编程 quartus_cpf Convert Programming Files 将编程文件转换为辅助编程文件格式 quartus_stp SignalTap II Logic Analyzer 建立 SignalTap II 文件(*.stp)。在 Assembler 之后运行时,器件全速运行的情 况下,SignalTap II Logic Analyzer 捕获内部器件节点信号 quartus_swb Software Builder 为 Excalibur 嵌入式处理器进行设计 quartus_sh Tcl Shell 为 Quartus II 软件提供 Tcl 脚本 shell 图 3 Quartus II 命令行设计流程 3.3 交通灯设计实例 本节通过一个 LED 流水灯的设计实例,详细介绍 Quartus II 的主要功能、使用方法和设计 流程。本书中所有实例都是在 Quartus II 8.1 下编译通过,相应界面也是 Quartus II 8.1 下 的界面。 3.3.1 设计原理 在这个实例中,我们设计一个简单的 LED 流水指示灯,8 个彩灯共阴接地,阳极分别为 EP3C16 的 8 个 I/O 相连,I/O 输出变化的电平,来控制彩灯的点亮,流水灯分不同的时段,指示灯有不 同的显示模式,开始时刻 LED 流水灯从右到左依次点亮,第二时间段 LED 流水灯从左到右依次 熄灭,第三时间段 LED 流水从中间向两边点依次点亮,第四时间段 LED 流水灯从中间向两边点 依次熄灭,第五时间段 LED 流水灯奇偶位循环点亮,最后完成一次循环又回到开始时刻,进人 第二轮循环,来实现 LED 流水灯的控制实验。 从 LED 流水灯的工作原理来看,无论是第一时间段还是其他的时间段,LED 流水灯点亮还是 熄灭,都是一个频率来控制 LED 流水灯点亮和熄灭的快慢。只不过这个频率可以在程序中控制, Quartus II She ll quartus_sh Quartus II She ll 可用做 Quartus II 可执行文件的 Tcl 解释器 仿真 quartus_sim 时序分析 quartus_tan EDA 网表输出 quartus_eda 汇编 quartus_asm 编程 quartus_pgm 转换编程文件 quartus_cpf SignalTap II 逻辑分析仪 quartus_stp Software Builder quartus_swb PowerPlay 功耗分析 quartus_pow 适配 quartus_fit 设计助手 quartus_drc 编译数据库 quartus_cdb 分析与综合 quartus_map 源设计文件。包括 Verllog Design 文件(.V).VHDL Deslgn 文件(vhd).Verllog Quartus Mapptng 文件 (.vqm)、Text Design 文件(.tdf)、Block Design 文件 (.bdt)以及 EDIF 网表文件(.edf) EDA工具输出文件,包括Verllog Output 文 件 (.VO).VHDL Output 文 件 (.vho).VQM 文件和 Standand Delay Fomtat Output 文件(sdo)
FPGA实验指导书也可以在定义输入引脚时把频率选择不同的频率段。[例1-1]LED流水灯设计(1ight.V)。module light(clk_in,light):inputclk_in;//20MHzoutput [7:0] light;reg clk2://clk二分频reg [22:0] counter;reg clkl;wire clk;reg [7:0]light://灯方式的选择reg [2:0] flag;t_switch://节拍的选择regparameter len =7:always @(posedgeclk_in)begincounter<=counter+1'b1://10111110101111000010000if(counter==6250000)beginclkl=~clkl;counter<=23'b0:endendalways @(posedge clk1)clk2<=~clk2:assign clk = (t_switch) ? clkl : clk2;always @ (posedge clk)begin//顺序循环移位//依次点亮if (flag = 3'b000)beginlight<=(1'bl,light[len :1]] :if(light[1] =- I'b1)flag<= 3'b001;end//依次熄灭else if(flag==3'b001)beginlight <= [light[len-1 : 0],1'b0] :if(1ight[6]=-1'b0)flag<=3'b010;end//从中间向两边点else if(flag==3'b0i0)beginlight[len:4]<=(light[len-1:4],1'b1];light[len-4 : 0] <= (1'bl,light[len-4 : 1]] :if(light[1] == I'b1)flag <= 3'b01l;20
FPGA 实验指导书 20 也可以在定义输入引脚时把频率选择不同的频率段。 [例 1-1]LED 流水灯设计(light.V)。 module light(clk_in,light); input clk_in; //20MHz output [7:0] light; reg clk2; //clk 二分频 reg [22:0] counter; reg clk1; wire clk; reg [7:0] light; reg [2:0] flag; //灯方式的选择 reg t_switch; //节拍的选择 parameter len = 7; always @(posedge clk_in) begin counter<=counter + 1'b1;//101 1111 0101 1110 0001 0000 if (counter==6250000) begin clk1=~clk1; counter<=23'b0; end end always @(posedge clk1) clk2 <= ~clk2; assign clk = (t_switch) ? clk1 : clk2; always @ (posedge clk) begin //顺序循环移位 //依次点亮 if (flag == 3'b000) begin light <= {1'b1,light[len : 1]}; if(light[1] == 1'b1) flag <= 3'b001; end //依次熄灭 else if (flag == 3'b001) begin light <= {light[len-1 : 0],1'b0}; if(light[6] == 1'b0) flag <= 3'b010; end //从中间向两边点 else if (flag == 3'b010) begin light[len : 4] <= {light[len-1 : 4],1'b1}; light[len-4 : 0] <= {1'b1,light[len-4 : 1]}; if(light[1] == 1'b1) flag <= 3'b011;