Quartus II简明教程Word文档格式.docx
《Quartus II简明教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《Quartus II简明教程Word文档格式.docx(42页珍藏版)》请在冰点文库上搜索。
8、编程、配置FPGA器件
9、板级调试
1、
典型的FPGA设计流程
计算机辅助设计(ComputerAidedDesign,CAD)软件的使用使得使用可编程逻辑器件(ProgrammableLogicDevice,PLD)器件(比如FieldProgrammableGateArray,FPGA)进行数字逻辑电路设计变得非常容易。
使用CAD软件进行FPGA设计的典型流程如图1所示。
设计输入(DesignEntry):
采用什么样方法描述你的设计,比如原理图方式、硬件描述语言方式(HardwareDescriptionLanguage,HDL)等。
综合(Synthesis):
将高层次描述转换为低层次描述。
对于FPGA设计就是将设计转换成由FPGA器件所提供的基本单元(LogicElements,LE)所组成的电路。
功能仿真(FunctionalSimulation):
综合后的电路测试你的设计的正确性。
适配(Fitter):
时序分析和仿真(TimingAnalysisandSimulation):
编程和配置(ProgrammingandConfiguration):
图1FPGA设计的典型设计流程
QuartusII软件支持以上设计流程的所有阶段。
本教程介绍QuartusII软件的基本特征。
在QuartusII软件中设计的每个电路或者子电路都叫做项目(Project)。
QuartusII软件每次只能打开一个Project,并且一个Project的所有信息都必须保存在同一个文件夹。
为了开始一个新逻辑电路的设计,首先第一步就是新建一个文件夹来保存此Project的文件。
为了保存本教程的设计项目Project,新建文件夹D:
\introtutorial。
本教程运行的例子是一个简单两路开关控制电路。
启动QuartusII软件,会打开如图2所示启动画面。
启动画面中包含了使用QuartusII软件所需要的几个窗口,用户可以通过鼠标在窗口中选择想要执行的功能。
QuartusII软件所提供的绝大多数命令都可以通过选择位于标题栏下面的一系列菜单命令来完成。
比如,在QuartusII软件的菜单File单击鼠标左键,打开如图3所示的文件菜单。
图2QuartusII启动画面
在弹出的File菜单上单击单击Exit菜单项,这样可以退出QuartusII软件。
一般情况下,无论任何时候使用鼠标选择时,都是使用鼠标左键。
因此,通常情况下我们不再明确指出使用鼠标的那个键。
少数情况下,当有必要使用鼠标右键时,我们才明确指出。
对于有些命令,需要按顺序访问几个菜单命令才可以。
本教程中使用符号Menu1>
Menu2>
Item表示使用鼠标左键先点击菜单Menu1,然后在弹出的菜单中鼠标左键点击Menu2项,然后在弹出的菜单中鼠标单击Item项。
例如,File<
Exit表示使用鼠标命令退出QuartusII软件。
许多的命令也可以通过鼠标点击工具栏上相应得图标来完成。
将鼠标放到工具栏上相应的图标上,与图标相对应的命令会显示出来。
1.1QuartusII在线帮助
QuartusII软件提供了大量的在线帮助文档,帮您解决在使用QuartusII软件过程中遇到的许多问题。
这些文档可以通过Help窗口中菜单访问。
图3文件菜单
3、新建Project
为开始一个新设计,必须先定义一个设计项目project。
QuartusII软件通过提供一个Wizard,使用户的设计任务变得非常简单。
为新建一个Project可按如下步骤执行:
1、选择File<
NewProjectWizard弹出如图4所示对话框,该对话框显示Wizard所包含的各项内容。
如果选中Don’tshowmethisintroductionagain。
那么在下一次在新建项目是可以不再显示本对话框。
点击Next按钮,显示图5所示对话框。
图4
图5
2、设定工作目录为introtutorial,当然如果你喜欢你也可以选择其它的文件夹作为工作目录。
Project项目必须有一个名字,而且项目名一般与设计的顶层模块名一致。
本教程中的Project名和顶层模块名都为light,如图5所示。
点击Next。
因为我们还没有建立文件夹introtutorial,QuartusII软件弹出如图6所示对话框,询问你是否新建introtutorial文件夹,点击Yes,这样会打开如图7所示窗口。
图6
图7
3、如果有些设计文件已经存在,你可以在这一步将文件加入到project中。
因为我们没有任何已经设计好的文件,点击Next,显示图8所示窗口。
4、我们必须项目选择一个器件以实现设计好的电路。
在器件Family中选择CycloneII。
QuartusII软件可以自动帮你从CycloneII系列中选择一个具体的器件,当然你也可以自己选择一个器件。
我们采用后一种方法。
从availabledevices列表中选择器件EP2C35F672C6作为目标器件,因为Altera公司的DE2开发板上用的FPGA用的就是这个器件。
点击Next,打开如图9所示对话框。
图8
5、用户可以指定你想使用的第三方的EDA工具。
电子电路设计中常用的一个名词就是EDA(ElectronicDesignAutomation)工具,EDA工具在QuartusII软件中主要指第三方工具,第三方工具就是指由Altera公司以外的一些其它公司开发的一些工具。
因为我们只使用QuartusII软件,我们不选择任何其它的工具,选择Next,如图10所示。
6、关于整个项目的一些设定会显示在如图10所示的对话框。
点击Finish按钮,返回到QuartusII主窗口。
但是在标题栏中显示的项目名称为light,如图11所示。
图9
图10
图11
4、使用Verilog作为设计输入
本教程使用一个两路Led灯控制电路,如图12所示。
本电路可以用两个开关x1和x2作为输入来控制一个LED灯。
开关的闭合代表逻辑值1。
电路的真值表在图12中一并给出。
注意到该电路实现的正好是输入x1和x2的异或功能,但是我们将使用该电路的门级描述。
图12
图13给出了12所示电路的Verilog描述。
注意到这个Verilog模块叫做light,正好与图5中所填写的项目顶层模块名相匹配。
这些代码可以使用任何的文本编辑器进行编辑并将其保存成ASCII文件,或者使用QuartusII软件的文本编辑工具。
文件可以保存成任意的名字,但一般的设计惯例是使用与顶层模块同样的名字。
文件的扩展名必须是.v,扩展名为.v表明它是Verilog文件,所以我们使用light.v作为文件名。
图13
4.1使用QuartusII文本编辑器
本节介绍如何使用QuartusII文本编辑器。
如果你使用其它的文本编辑器新建Verilog源代码,你可以跳过本节内容,并将其命名为light.v。
选择File>
New弹出如图14所示对话框,选择VerilogHDL,点击OK。
这样会打开文本编辑器窗口。
首先需要为新建的Verilog文件指定一个文件名。
SaveAs打开如图15所示的对话框。
在Saveastype中选择VerilogHDLFile。
在Filename中填写light。
并且勾选Addfiletocurrentproject。
点击Save,这样会将该文件保存在introtutorial文件夹,同时打开TextEditor窗口。
图14
图15
图16
(在light.v标签上点击鼠标右键,弹出图窗口16-1所示,选择DetachWindow,弹出如图16-2所示文本编辑窗口,点击最大化按钮,最大化文件编辑器)
在TextEditor窗口输入图13所示的Verilog代码,点击File<
Save或者通过快捷键Ctrl+s保存文件。
图16-1
图16-2
4.2在项目中加入设计文件
我们在图7中已经介绍过,可以通过勾选复选框的方法来指定哪个设计文件应该包括在项目中。
为了检查哪个文件包含在目前的项目中,选择Assignment>
Settings,打开如图17所示对话框,在左侧的Category中选择File选项。
选择Project>
Add/RemoveFiles也可以打开此对话框。
图17
如果你使用QuartusII文本编辑器新建Verilog文件,并且勾选了Addfiletocurrentproject复选框(按照前面的描述),那么light.v已经是project的一部分了,而且在图17中已经列了出来。
否则light.v必须被加入到该项目中。
所以如果你使用的不是QuartusII软件的文本编辑器,先拷贝light.v文件到introtutorial文件夹,然后在图17中,点击Filename按钮,弹出窗口如图18所示。
图18
选择light.v文件然后点击Open按钮。
弹出图18-1窗口,在图18-1窗口中点击Add按钮,弹出图17所示对话框。
点击OK按钮将light.v文件包含到该项目中。
(需要补充)
图18-1
文件light.v中的Verilog代码被QuartusII软件的几个工具所处理,以分析代码的语法有无错误、综合并且产生针对特定目标器件的配置文件,这些工具由Quartus软件的编译器所控制。
通过选择Processing>
StartCompilation,或者点击工具栏
图标。
随着编译过程的进行,QuartusII软件主窗口的左侧会显示编译的进度。
如编译成功会弹出对话框请求确认,如图19-1所示,点击OK,弹出如图19所示的窗口
图19-1
图19
在QuartusII窗口的底部的message窗口,会显示在编译过程中的各种信息。
如果编译过程中有错误出现,都会有相应的错误信息给出。
编译结束后,QuartusII软件会给出一个编译报告。
显示编译报告的窗口会自动显示,如图19所示。
窗口可以以正常的方式改变大小、最大化或者关闭,可以通过选择Processing>
CompilationReport或者点击
图标随时打开CompilationReport。
以上编译过程中,QuartusII软件自由选择FPGA器件的引脚作为电路的输入和输出。
然而,DE2开发板上的FPGA与其它的器件已经连接好。
我们使用扳钮开关Switch,SW0和SW1作为我们的例子电路的外部输入x1和x2。
这两个开关分别被连接到FPGA的N25和N26引脚。
连接输出f到绿色的发光二极管LEDG0,LEDG0连接到FPGA的AE22引脚。
QuartusII软件的引脚分配通过AssignmentEditor完成。
选择Assignments>
Pins打开如图24所示的AssignmentEditor窗口。
在Category选择框中选择Pin。
在To列中蓝色高亮显示的输入项<
new>
中双击,如图25所示。
图24
图25
选择x1,x1会显示列表中。
双击x1右侧Location列蓝色高亮的输入项,如图26所示。
图26
鼠标向下滑动,选择PIN_N25。
如果不使用鼠标向下滑动,可以在Location位置填入N25也可以。
按照同样的方法将输入x2分配给N26引脚,输出f分配给AE22,这样会导致如图27所示的窗口。
图27
Save保存刚才的引脚分配结果。
当然也可以选择关闭AssignmentEditor窗口,在弹出的询问是否是否保存引脚分配结果的对话框中,点击Yes也可以。
重新编译项目,这样可以按照引脚分配的结果重新对项目进行分配。
DE2开发板具有固定的引脚分配。
在完成一个项目的设计以后,用户在进行以后的项目的时候希望使用同样的引脚分配。
如果在你的项目中使用很多的引脚,按照以上的方法进行引脚分配会变得非常麻烦。
QuartusII软件运行用户倒入和导出一个特定格式的引脚分配文件,而不用每次都使用AssignmentEditor进行引脚分配。
可以用于此目的一种简单的文件格式叫做CSV文件(commaseparatedvalue),CSV文件是一种普通的文本文件格式,文件中用逗号为界定符。
这种文件格式经常与MicrosoftExecl一起使用,但是CSV文件也可以由其它的ASCII文本文件编辑器创建和处理。
本教程使用的CSV文件内容如下:
To,Location
x1,PIN_N25
x2,PIN_N26
f,PIN_AE22
按照以上的格式在文件中加入新的行,可以加入任何新的引脚分配。
这样的csv文件可以导入任何的项目。
如果你已经为了某个特定的项目新建了一个引脚分配文件,你可以将此文件导出以用于其它的项目中。
为了演示如何导出和导入CSV文件,重新打开AssignmentEditor窗口,如图27所示。
Export,弹出如图28所示的对话框。
Filename中填入要导出的CSV文件名字。
默认light.csv文件。
点击Export,这样light.csv文件会保存在introtutorial目录。
图28
通过选择Assignments>
ImportAssignments。
打开如图29所示的对话框
图29
输入要导入的文件名,包括文件的扩展名和文件的路径,然后点击OK按钮。
你当然也可以用Browse指定你所期望的导入的文件。
为了你在做大型项目时的方便,所有DE2相关的引脚分配在文件在DE2开发板CD-ROM的DE2_tutorials\design_files文件夹中的DE2_pin_assignment.csv中给出。
该文件可以从Altera公司的DE2
网站上下载获得。
该文件用的引脚名可以在DE2UserManual中找到。
如果我们希望通过导入该文件为我们的项目完成引脚分配,那么必须在Verilog文件中使用相同的名字,即用SW[0],SW[1]和LEDG[0]分别取代x1,x2和f。
因为这些信号都是在DE2_pin_assignments.csv文件作为向量SW和LEDG中的某一位,必须以Verilog的方式来对其进行引用。
例如,在DE2_pin_assignments.csv文件中,18个扳钮开关分别叫做SW[17]到SW[0]。
在Verilog代码中,它们也可以使用向量SW[17:
0]的形式进行引用。
7、电路仿真
在DE2开发板上FPGA器件实现你所设计的电路之前,谨慎的做法是先仿真你的电路以确定其正确性。
QuartusII软件包括了一个电路仿真工具来仿真你所设计的电路。
仿真你的电路之前,必须先产生测试激励以代表输入信号。
同样需要指定用户希望观察的输出信号和内部节点信号。
仿真器将测试激励应用于你所设计的电路模型,观察期望的输出波形是否正确。
我们使用QuartusII软件的WaveformEditor来画测试激励的波形,可以按照如下的步骤执行:
1、选择File>
New,打开WaveformEditor窗口,如图30所示。
选择OtherFiles标签,打开如图31所示窗口。
选择VectorWaveformFile然后点击Ok。
图30
图31
2、WaveformEditor窗口如图32所示。
以名light.vwf来保存文件,注意在显示的窗口中文件名已经改变了。
通过选择Edit>
EndTime在弹出的对话框中输入200ns,设定仿真的时间为0-200ns。
选择View>
FitinWindow,这样将0-200ns的仿真时间都显示在整个窗口中,如图33所示。
你当然可以将WaveformEditor窗口最大化。
图33
3、接下来,我们希望将需要仿真电路的输入、输出节点包含到波形文件中。
选择Edit>
Insert>
InsertNodeorBus打开如图34所示的对话框。
在Name框中输入信号的名字,当然点击NodeFinder在弹出的对话框中选择需要加入的信号会更加容易。
如图35所示,弹出NodeFinder对话框。
在NodeFinder对话框中有一个滤波器以指示那种类型的结点需要加入到波形窗口。
因为我们只对输入和输出引脚感兴趣,在滤波器选择框选择Pins:
all。
点击List按钮,输入输出引脚节点显示在图35的左侧部分,如图35-1所示。
图34
图35
图35-1
点击NodesFound中列出的信号x1,然后点击
,将选中的x1添加到SelectedNodes:
按照同样的步骤将信号x2和f加入到SelectedNodes:
。
点击OK关闭NodeFinder窗口,恢复到WaveformEditor窗口,如图36所示。
如果选择信号的顺序与图36所示的顺序不一致,你可以对其进行重新调整。
如果需要向上或者向下调整信号的顺序,只需要先用鼠标选中节点名字,然后释放鼠标左键,这样选中的波形被高亮显示而且被选中。
再次用鼠标点击选中的波形,然后向上或者向下拖动到指定的位置,然后释放鼠标左键。
4、我们指定仿真过程中输入信号x1和x2的逻辑值。
输出信号f的值由仿真器自动产生。
为了使波形绘制过程变得更加简单,WaveformEditor提供了一个垂直的TimeBar,而且可以选择这个TimeBar是否必须附着在网格点上(如果该功能没有启动,可以通过选择View>
SnaptoGrid)。
垂直的参考线用于分析电路的时序,将其移动到time=0位置。
波形可以通过选择工具SelectionTool,对应于工具栏的
图标,和WaveformEditingTool,可以通过工具栏上的图标
进行。
为了仿真大电路的行为,必须使用充分多的输入信号的值进而观测输出信号期望值。
在大规模电路项目中,输入信号的数量是非常大,所以实际上我们通常选择少量有代表性的输入信号。
然而,对于规模较小的电路,对于我们设计的小电路,我们可以仿真所有四种可能的输入情况,如图37所示。
我们使用4个50ns间隔的输入信号。
图36
图37
7.1仿真
电路仿真有两种方式。
最简单的方式就是假设FPGA器件内的逻辑元件以及互连线都是理想的,这样使得电路中的信号线信号传播没有延迟,这种方式通常叫做功能仿真。
另外一种复杂的仿真方式考虑所有的传播延时,这叫做时序仿真。
一般情况下,功能仿真用于测试电路的功能是否正确,所以功能仿真一般只需较少的时间,这是因为功能仿真可以通过逻辑表达式执行。
6.1.1功能仿真
为了执行功能仿真,选择Assignment>
Settings打开Setting窗口。
在窗口的左侧选择Simulator,显示如图38所示窗口。
选择Functional作为Simulationmode。
QuartusII软件的Simulator使用light.vwf中定义的输入信号作为输入,产生输出。
点击OK确定。
在运行功能模拟之前,需要先产生网表文件,可以通过Processing<
GenerateFunctionalSimulationNetlist菜单命令进行。
然后可以选择Processing>
StartSimulation或者使用工具栏上的
图标启动功能仿真。
仿真接受后,QuartusII软件提示仿真成功,然后给出仿真报告SimulationReport,如图39所示。
图38
如果report窗口没有完全显示仿真时间范围,点击report窗口,选择View>
FitinWindow。
按照图12所示的真值表来观察输出f的值。
图39
6.12时序仿真
7、编程和配置FPGA器件
设计好的电路必须被下载到FPGA器件,这一过程被叫做编程或者配置。
下载到FPGA器件所需要的配置文件由QuartusII软件Compiler’sAssembler模块产生。
Altera公司的DE2开发板运行配置过程以两种不同的方式进行,一种叫做JTAG模式,一种叫做AS模式。
配置数据通过一根一端连接在主机(HostComputer)的USB端口,另一端连接在DE2开发板最左侧的USB端口上的USB电缆从主机下载到DE2板上。
为了使数据下载正确进行,主机上必须装有USB-Blaster驱动程序。
如果USB-Blaster驱动没有安装,可以参照GettingStartedWithAltera’sED2Board有关信息,安装USB-Blaster驱动程序到你的主机上。
在正式下载配置数据到DE2开发板之前,你需要确认USB电缆已经正确连接同时DE2板上的电源开关已经打开。
JTAG模式是将配置数据直接下载到FPGA器件的一种编程模式。
JTAG是JointTestActionGroup的缩写。
这个组织定义了一种测试数字电路以及将数据下载数字电路的简单方式,而且已经被IEEE采纳为正式标准。
以JTAG方式配置进行配置的FPGA器件,配置数据会一直保持数据直到系统掉电,配置数据在系统掉电后丢失。
DE2开发板支持的第二种配置模式叫做主动串行(ActiveSerial,AS)模式。
在这种配置模式下,除了FPGA器件,还额外需要一块带有一些Flash存储器的配置芯片来存储配置数据。
QuartusII软件将数据下载到DE2开发板的配置器件上。
然后,当系统重新上电或者重新配置时,配置器件内的配置数据会自动地下载到FPGA器件,这样FPGA器件不需要在系统掉电后每次都由QuartusII软件来编程。
可以通过改变RUN/PROG开关的位置在两种编程模式之间进行切换。
开关扳到RUN位置,选择JTAG模式,而当开关扳到PROG位置,选择的则是AS模式。
7.1JTAG模式
JTAG模式编程可以按以下步骤进行。
首先扳动RUN/PROG开关到R