3.2 Quartus Prime设计流程
使用Quartus Prime开发工具进行FPGA器件的开发和应用,其过程主要有设计输入、设计处理、波形仿真和器件编程等阶段。在设计的任何阶段出现错误,都需要进行修改,纠正错误,重复上述过程,直至每个阶段都正确为止。
下面将以一个6位二进制计数器设计项目myexam设计为例,介绍Quartus Prime的使用流程,介绍如何经过设计各个阶段,最终将myexam.vhd设计下载到FPGA芯片,完成6位二进制计数器设计的完整过程。
3.2.1 设计输入
Quartus Prime编辑器的工作对象是项目,项目用来管理所有设计文件以及编辑设计文件过程中产生的中间文档,建议读者在开始设计之前先建立一个文件夹,方便项目的管理。在一个项目下,可以有多个设计文件,这些设计文件的格式可以是原理图文件、文本文件(如AHDL、VHDL、Verilog HDL等文件)、符号文件、底层输入文件以及第三方EDA工具提供的多种文件格式,如EDIF、Tcl等。下面以文本文件为例,学习设计输入过程中的主要操作。
1. 建立设计项目
在Quartus Prime管理器窗口中选择菜单File→New Project Wizard...,出现新建项目向导New Project Wizard对话框的第一页,如图3-3所示。在对话框下输入项目目录、项目名称和顶层实体文件名,如myexam。顶层实体文件名可以与项目名称不一致,系统默认一致的名称。
图3-3 New Project Wizard对话框第一页
新建项目向导第三页,单击按钮“...”可浏览文件选项,添加或删除与该项目有关的文件。初学者还没有建立文件,可以先跳过该页。
新建项目向导第四页,根据器件的封装形式、引脚数目和速度级别,选择目标器件。用户可以根据具备的实验条件进行选择,这里选择的芯片是Cyclone V系列中5CSEMA5F31C6芯片,如图3-4所示。
图3-4 New Project Wizard对话框第四页
新建项目向导第五页,添加第三方EDA综合、仿真、定时等分析工具,系统默认选择Quartus Prime的分析工具,对开发工具不熟悉的读者,建议采用系统默认选项。
在新建项目向导对话框的最后一页,给出前面输入内容的总览。单击Finish按钮,myexam项目出现在项目导航窗口,myexam表示顶层实体文件,如图3-5所示。在任务窗口出现设计项目过程中的全部操作,执行操作命令的方法可以在菜单栏下选择命令、单击工具栏中对应的工具按钮或者在任务窗口双击命令。
新建项目向导中的各个选项,在新建项目结束后,仍然可以修改或重新进行设置,通过选择菜单命令Assignments→Settings…→General实现。
2. 输入文本文件
Quartus Prime支持AHDL、VHDL及Verilog HDL等硬件描述语言描述的文本文件,关于如何用VHDL描述硬件电路请参考本书中的第2章。这里将结合实例说明如何使用文本编辑器模板输入VHDL文本文件。
图3-5 建立项目myexam
新建VHDL文本文件,在Quartus Prime管理器界面中选择菜单File→New...,或单击新建文件按钮,出现New对话框,如图3-6所示。在对话框Design Files中选择VHDL File,单击OK按钮,打开文本编辑器。在文本编辑器窗口下,按照VHDL语言规则输入设计文件,并将其保存,VHDL文件的扩展名为.vhd。
Quartus Prime支持多种硬件描述语言,不同的硬件描述语言编写的文件,其文件扩展名不同,如AHDL文件扩展名为.tdf,Verilog HDL文件扩展名为.v。
Quartus Prime提供了文本文件的编辑模板,使用这些模板可以快速准确地创建VHDL文本文件,避免语法错误,提高编辑效率。例如,用VHDL模板设计一个6位二进制计数器的VHDL文本文件。
(1)选择菜单Edit→Insert Template…,打开Insert Template对话框,单击左侧Language temp lates栏目打开VHDL,VHDL栏目下显示出所有VHDL的程序模板,如图3-7所示。
(2)在VHDL模板中选择Full Design→Arithmetic→Counters→Binary Counter,Insert Template对话框的右侧会出现计数器模板程序的预览。这是一个带清零和使能端的计数器模板。单击Insert,模板程序出现在文本编辑器中,其中蓝色的字母是关键字,绿色部分为注释语句。
图3-6 新建文本文件对话框
图3-7 程序模板对话框
(3)根据设计要求,对模板中的文件名、信号名、变量名等黑色部分的内容进行修改。将实体名binary_counter修改为myexam;将程序中的变量表示改为常数形式;删掉enable输入信号等。修改后的VHDL代码如下:
3. 添加或删除与当前项目有关的文件
如果希望将存放在别处的文件加入到当前的设计项目中,需要选择菜单Assignments→Settings…,打开如图3-8所示的Settings对话框。在Settings对话框左侧的Category栏目下选择Files项,通过右边File Name栏的“…”按钮查找文件选项,单击Add按钮添加文件。Add All按钮的作用是将当前目录下的所有文件添加到项目中。
如果希望将当前项目中的文件从项目中删除,首先选中待删除文件,Remove按钮则被激活,单击Remove按钮即可。
如图3-8所示,在Settings对话框,除了可以进行设计项目的文件设置外,还可以进行与设计有关的各种其他功能设置,如:库Libraries、IP、EDA Tool、Compilation、定时分析Timing Analysis、SSN Analyzer等设置。
4. 指定目标器件
如果在建立项目时,没有指定目标器件,可以通过选择菜单Assignments→Device…,打开如图3-9所示的Device对话框,指定设计项目使用的目标器件。在Family下拉列表中选择器件系列;在Show in'Available devices'list中选择封装形式、引脚数和速度级别;在Available devices中选择目标器件;单击Device and Pin Options按钮,出现器件和引脚选项对话框,根据设计需要进行配置、编程文件、不用引脚、双用途引脚以及引脚电压等选项的详细设置。
图3-8 Settings对话框
3.2.2 设计处理
Quartus Prime设计处理的功能包括设计错误检查、逻辑综合、器件配置以及产生下载编程文件等,称作编译Compilation。编译后生成的编程文件可以用Quartus Prime编程器或其他工业标准的编程器对器件进行编程或配置。
编辑设计文件后可以直接执行编译Compilation操作,对设计进行全面的设计处理。也可以分步骤执行,首先进行分析和综合处理Analysis & Synthesis,检查设计文件有无错误,基本分析正确后,再进行项目的完整编译Compilation。
1. 设置编译器
初学者如果选择系统默认的设置,可以跳过编译器设置。
图3-9 Device对话框
如果确实需要对编译器进行专门的设置,选择菜单Assignments→Settings…,在Settings对话框Category栏目下选择Compilation Process Settings项,可以设置与编译相关的内容,如图3-10所示。
2. 执行编译
Quartus Prime软件实行的是项目管理,一个项目中可能会有多个文件,如果要对其中的某一个文件进行编译处理时,需要将该文件设置成顶层文件。
设置顶层文件:首先打开准备进行编译的文件,如打开前面编辑的文件myexam.vhd,执行菜单命令Project→Set as Top-Level Entity。下面进行设计处理的各项操作就是针对这一顶层文件myexam.vhd进行的。
执行编译:选择菜单Processing→Start Compilation或直接单击工具栏中编译按钮,开始执行编译操作,对设计文件进行全面的检查,编译操作结束后,出现如图3-11所示的界面,界面中给出编译后的信息。
任务窗口:显示编译过程中编译进程以及具体操作的项目。
信息窗口:显示所有信息、警告和错误。如果编译有错误,需要修改设计,重新进行编译。双击某个错误信息项,可以定位到原设计文件并高亮显示。
图3-10 在Settings对话框的编译设置选项
图3-11 设计项目的编译
编译报告栏:编译完成后显示编译报告,编译报告栏包含了将一个设计编译正确后,将设计放到器件中的所有信息,如器件资源统计、编译设置、底层显示、器件资源利用率、适配结果、延时分析结果等。编译报告栏是一个只读窗口,选中某项可获得详细信息。
编译总结报告:编译完成后直接给出该报告,报告中给出编译的主要信息:项目名、文件名、选用器件名、占用器件资源、使用器件引脚数等。
3. 锁定引脚
锁定引脚是指将设计文件的输入输出信号分配到器件指定引脚,这是设计文件下载到FPGA芯片必须完成的过程。在Quartus Prime中,锁定引脚分为前锁定和后锁定两种。前锁定指的是编译之前的引脚锁定,后锁定是指对设计项目编译后的引脚锁定,这里介绍后锁定引脚的操作过程。
值得注意的是,在后锁定引脚完成之后,必须再次进行编译。
选择菜单Assignments→Pins Planner,出现Pins Planner对话框如图3-12所示。由于设计项目已经进行过编译,因此在节点列表区会自动列出所有信号的名称,在需要锁定的节点名处,双击引脚锁定区Location,在列出的引脚号中进行选择。例如,选择clk节点信号,锁定在PIN_AF14号引脚上,如图3-12所示。重复此过程,逐个进行引脚锁定,所有引脚锁定完成后,再次进行编译。
图3-12 引脚锁定
3.2.3 波形仿真
当一个设计项目的编译通过之后,能否实现预期的逻辑功能,仍需要进一步的检验,波形仿真分析是必不可少的一个环节。波形仿真就是在波形编辑器中将设计的逻辑功能用波形图的形式显示,通过查看波形图,检查设计的逻辑功能是否符合设计要求。Quartus Ⅱ 13.0及之后的版本包含了Simulation Waveform Editor仿真工具,除此之外,Quartus Prime 16.0也支持ModelSim、questasim等第三方仿真工具软件,Simulation Waveform Editor仿真也借助了仿真工具ModelSim。如果安装了ModelSim和ModelSim-Altera,Simulation Waveform Editor默认选择ModelSim-Altera。本节主要以Simulation Waveform Editor和ModelSim为例介绍仿真流程。
1. ModelSim仿真
ModelSim是Mentor Graphics公司开发的一款功能强大的仿真软件,具有速度快、精度高和便于操作的特点,此外还具有代码分析能力,可以看出不同代码段消耗资源的情况。ModelSim的功能侧重于编译和仿真,但不能指定编译的器件和下载配置,需要和Quartus Prime等软件关联。
在Quartus Prime 16.0界面菜单栏中选择Tools→options选项卡中的EDA tool options,在ModelSim一项指定ModelSim安装的路径。本文安装并指定的ModelSim路径为D:\quartus\quartus\ModelSim 10.4 se\win64。
在Quartus Prime 16.0界面菜单栏中选择Assignments→Settings。选中该界面中EDA Tool settings中的Simulation。在Tool name中选择ModelSim,Format for output netlist中选择开发语言的类型VHDL(如果项目是基于Verilog语言写的,则此处选择Verilog),如图3-13所示。然后单击Apply和OK按钮。
图3-13 设置仿真工具
设置完成后,编译工程。在Quartus Prime 16.0菜单栏中选择Processing→Start Compilation,等待编译,编译无错后会在myexam目录下生成simulation目录。单击菜单栏Processing→Start→Start Test Bench Template Writer,如图3-14所示,在myexam/simulation/modelsim下会生成一个与项目顶层文件同名的testbench测试文件模板:myexam.vht(Verilog语言环境下生成的测试文件为myexam.vt)。
图3-14 生成test bench文件模板
打开myexam.vht文件,可以看到此时生成的testbench文件是基于VHDL语言的,程序结构包含了library库、无端口实体myexam_vhd_tst、结构体myexam_arch,程序如下所示。结构体分为三部分:信号定义、实例化、施加激励。施加激励通过程序中的两个进程实现,设计者需要根据测试需求,设计需要的激励信号,其中init进程主要产生执行一次的激励信号,如复位信号、非周期性输入信号等;always进程中主要产生由敏感事件列表触发的信号,如时钟信号、周期性输入信号等。
根据测试需求在模板中修改测试文件,在init进程中添加reset激励信号,always进程中添加周期为20ns的时钟信号,编写完成仿真测试文件后保存。
图3-15 选择仿真文件步骤1
在Quartus Prime界面菜单栏中选择Assignments→Settings→EDA Tool Settings→Simulation界面,在界面NativeLink settings项中单击Compile test bench右边的Test Benches按钮,如图3-15所示。弹出界面如图3-16所示,在界面中单击New…按钮。在新出现的界面图3-17中Test bench name输入测试文件名字,在Top level module in test bench栏中输入测试文件中的顶层模块名。选中Use test bench to perform VHDL timing simulation并在Design instance name in test bench中输入设计测试文件中设计例化名默认为i1。然后在Test bench and Simulation files栏下的File name选择测试文件myexam.vht,然后单击add按钮,单击OK按钮设置完成。
图3-16 选择仿真文件步骤2
图3-17 选择仿真文件步骤3
仿真文件配置完成后回到Quartus Prime 16.0开发界面,在菜单栏中选择菜单栏Tools中的Run Simulation Tool→RTL Simulation进行行为级仿真,即功能仿真,接下来就可以看到ModelSim的运行界面,观察仿真波形如图3-18所示。通过功能仿真波形,可以验证设计文件逻辑功能的正确性。如果选择Run Simulation Tool→Gate Level Simulation可以进行门级仿真,即时序仿真。时序仿真中可以看到信号的传输延迟,以及可能产生的竞争冒险现象。
图3-18 仿真结果
下面把基于Verilog语言的测试文件myexam.vt也提供给读者,以供参考。
2. Simulation Waveform Editor仿真
当myexam工程编译成功后,在Quartus Prime管理器界面中选择菜单File→New,或单击新建文件按钮,出现New对话框。在对话框Verification→Debugging Files中选择University Program VWF,单击OK按钮,然后弹出Simulation Waveform Editor界面,如图3-19所示。
添加信号之前先设置仿真截止时间,在管理器界面选择菜单Edit→Set End Time,弹出界面End Time,如图3-20所示。End Time的时间范围是10ns~100μs,如果设置的时间不在这个时间范围内,单击OK按钮会有时间范围设置的提示,关闭End Time界面。
仿真运行时间设置后,需在图3-19中的Name栏添加仿真信号。在管理器界面选择菜单Edit→Insert→Insert Node or Bus…,或者双击图3-19中Name栏的空白处,会弹出Insert Node or Bus界面,如图3-21所示。图中Name中没有任何信号,我们需要单击Node Finder…,弹出如图3-22所示Node Finder界面。图中Look in右边需要放置工程文件名,我们单击“…”,然后在弹出的界面中选择myexam工程文件并单击OK,如果是对当前工程的仿真,此步可省略;接下来单击List,myexam工程中的信号就会出现在Nodes Found下方的空白处。
图3-19 University Program VWF界面
图3-20 End Time界面
图3-21 Insert Node or Bus界面
图3-22 Node Finder界面
在Nodes Found中单击需要仿真的输出信号和全部的输入信号,然后单击“>”,将选择的信号放入Selected Nodes栏中。不需要仿真的信号,可以单击“<”进行删除。如果需要仿真所有的信号,直接单击“>>”,Nodes Found栏中的所有信号会出现在Selected Nodes栏中。当信号选定后,单击OK按钮,则返回到图3-21,再单击OK后,信号和信号默认的波形图会出现在Simulation Waveform Editor界面中,如图3-23所示。
图3-23 Simulation Waveform Editor界面
现在需要为输入信号赋值。在Simulation Waveform Editor界面的图标中,共有11种赋值方式,设计者可以根据需要选取。我们选择对clk赋值,单击弹出Clock界面,将时钟周期Period设置为20ns。reset赋值时,如图3-24单击鼠标选中其中的一段后单击,选中的一段将会变成高电平1。信号clk和reset赋值完成后,如图3-25所示;在管理器界面选择菜单File→Sava As…,将文件名改为myexam,最好与要仿真的项目同名,然后单击保存。
图3-24 reset信号赋值
Simulation Waveform Editor包含功能仿真和时序仿真。这里进行功能仿真,在管理器界面选择菜单Simulation→Run Functional Simulation或者单击,弹出仿真进程窗口,仿真完成自动关闭,并弹出包含输出波形的仿真完成界面,如图3-26所示。注意对输入波形的任何改动,都需要重新进行仿真。
图3-25 完成信号赋值
图3-26 功能仿真图
时序仿真能观察到电路信号的实际延迟情况。只有Cyclone IV和Stratix IV支持时序仿真,如果Quartus工程所选择的芯片不是这两种芯片,那么时序仿真会定义为功能仿真。
3.2.4 器件编程
编译成功后,Quartus Prime将生成编程数据文件,如.pof和.sof等编程数据文件,通过下载电缆将编程文件下载到预先选择的FPGA芯片中,该芯片就会执行设计文件描述的功能。
1. 编程连接
在进行编程操作之前,首先将下载电缆的一端与PC机对应的端口相连。使用MasterBlaster下载电缆编程,将MasterBlaster电缆连接到PC机的RS-232C串行端口。使用ByteBlasterMV下载电缆,将ByteBlasterMV电缆连接到PC机的并行端口。使用USB Blaster下载电缆,则连接到PC机的USB端口。下载电缆的另一端与编程器件相连,连接好后进行编程操作。
2. 编程操作
选择菜单Tools→Programmer或单击工具栏中编程快捷按钮,打开编程窗口如图3-27所示。读者需要根据自己的实验设备情况,进行器件编程的设置。
图3-27 Programmer编程窗口
作者根据自己的实验设备,进行设置的情况如下:
(1)下载电缆Hardware Setup…设置:USB Blaster。注意,编程设置时要保证下载电缆连接,且设备上电。
(2)配置模式Mode设置:JTAG模式。
(3)配置文件:自动给出当前项目的配置文件myexam.sof。如果需要自己添加配置文件,则单击Add File…添加配置文件。
(4)执行编程操作:单击编程按钮Start,开始对器件进行编程。编程过程中进度表显示下载进程,信息窗口显示下载过程中的警告和错误信息。
(5)实际检验:器件编程结束后,在实验设备上实际查看FPGA芯片作为计数器的工作情况,应当给计数器加入频率为1Hz的时钟信号,方便观察计数器的变化。如果计数器工作正常,说明读者已经基本学会了FPGA的开发流程以及Quartus Prime 16.0的使用。
3. 其他编程文件的产生
Quartus Prime在编译过程中会自动产生编程文件,如.sof文件。但对于其他格式的文件,如二进制格式的.rbf配置数据文件,需要专门进行设置才能产生。
编译后产生.rbf文件过程如下:选择菜单File→Convert Programming File…,出现图3-28所示的对话框。首先,在Outp ut programming file列表中选择Raw Binary File(.rbf)。下一步,将File name一栏改成myexam.rbf。然后,单击Input files to convert栏中的SOF Data,此时Add File按钮被激活,单击Add File按钮,添加输入数据文件myexam.sof,单击Generate即可产生.rbf文件。查找设计项目目录,可以找到myexam.rbf文件。
图3-28 编译后生成.rbf文件