FPGA入门及Quartus II使用教程(内部资料)_第1页
FPGA入门及Quartus II使用教程(内部资料)_第2页
FPGA入门及Quartus II使用教程(内部资料)_第3页
FPGA入门及Quartus II使用教程(内部资料)_第4页
FPGA入门及Quartus II使用教程(内部资料)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FPGA 入门及入门及 Quartus II 使用教程使用教程FPGA 是英文 Field Programmable Gate Array 的缩写, 即现场可编程门阵列,它 是 在 可 编 程 阵 列 逻 辑 PAL(Programmable Array Logic) 、 门 阵 列 逻 辑GAL(Gate Array Logic)等可编程器件的基础上上进一步发展的产物。可以这样讲,ASIC(Application Specific Integrated Circuit )内部的所有资源,是用积木堆积起来的小房子,可以是一个欧美风情的房子,还可以是一个北京四合院.而 FPGA 内部就可以说是一

2、个个小积木,也就是内部有大量的资源提供给我们,根据我们的需求进行内部的设计。并且可以通过软件仿真,我们可以事先验证设计的正确性。第一章第一章 FPGA 的基本开发流程的基本开发流程下面我们基于 Altera 公司的 QuantusII 软件来说明 FPGA 的开发流程。下图是一个典型的基于 Quartus II 的 FPGA 开发整体流程框图。1、建立工程师每个开发过程的开始, Quartus II 以工程为单位对设计过程进行管理。2、建立顶层图。可以这样理解,顶层图是一个容器,将整个工程的各个模块包容在里边,编译的时候就将这些模块整合在一起。也可以理解为它是一个大元件,比如一个单片机,内部包

3、含各个模块,编译的时候就是生成一个这样的大元件。3、采用 ALTERA 公司提供的 LPM 功能模块。 Quartus 软件环境包含了大量的常用功能模块,比如计数器、累加器、比较器等等。4、自己建立模块。由于有些设计中现有的模块功能不能满足具体设计的要求,那就只能自己设计。使用硬件描述语言,当然也可以用原理图的输入方法,可以独立的把它们当成一个工程来设计,并且生成一个模块符号(Symbol),类似于那些 LPM 功能模块。这里可以理解为,如果我们需求的滤波器,没有现成的合适的,那我们可以通过 LC 自己来搭建一个滤波器。5、 将顶层图的各个功能模块连线起来。这个过程类似电路图设计,把各个芯片连

4、起来,组成电路系统。6、系统的功能原理图至此已经基本出炉了,下一步就是选择芯片字载体,分配引脚,设置编译选项等等。7、编译。这个过程类似软件开发里德编译,但是实际上这个过程比软件的编译复杂的多,因为它最终要实现硬件里边的物理结构,包含了优化逻辑的组合,综合逻辑以及布线等步骤。8、编译后会生成 2 个文件,一个是*.sof 文件,一个是*.pof 文件,前者可以通过JTAG 方式下载到 FPGA 内部,可以进行调试,但断电后数据丢失;后者通过 AS 或者 PS 方式下载到 FPGA 的配置芯片里边(EEPROM 或者 FLASH) ,重新上电后 FPGA 会通过配置将数据读出。9、对于复杂的设计

5、,工程编译好了,我们可以通过 Quartus 软件或者其他仿真软件来对设计进行反复仿真和验证,直到满足要求。 (主要是时序仿真) 。第二章第二章 基于基于 Quartus II 的实例的实例一、建立工程首先,打开 Quartus II 软件。接下来,建议一个新工程第一行,是所建工程的路径,第二工程项目名称,第三项,是填好后,如下图下边一直点击 NEXT,直到出现以下界面Family 里边选择 Sratix II, Available devices 里边选择 EP2S60F672C5(具体内容根据你所使用的芯片所决定),接着点 NEXT,不需要做任何修改了,一直点到 Finish。 到此为止,

6、 工程已经建立完成。 需要建立一个 Block Diagram/SchematicFile,点击 File-New 出现如下图。点击 OK,建立完成,工程中出现一个 Block1.bdf 文件。现在点 “保存” 是不管用的, 建议随便放一个器件后点保存文件为 bdf 文件。方法是在这个 bdf 文件空白处双击鼠标,或者右键点鼠标,点 insert-symbol这里边的器件很多,可以再里边输入你所需要的器件,也可以直接点分类,根据分类查找你需要的器件。点击 File-New,选择 VHDL File(根据你所使用的编程语言)点击 OK 后,再下边的界面就可以编写 VHDL 程序了。当然可以根据自

7、己掌握的语言种类进行编程。VHDL 语言,注意:保存的文件名字,必须与实体名字一致,否则编译会出错。设置当前为最高实体。点击那个紫色的三角,进行编译下面就是产生模块了。如图点击就可以生成模块完成后,回到 bdf 主界面。双击该界面,再 Project 下拉栏,就会出现刚才所编译文件生成的模块,左键点击就可以将其放入主原理图实体中,并且今后如果重新改变VHDL 程序,必须走这个过程,先设置最高实体,然后编译,产生模块,最后要添加这样如下的过程。放置模块的时候,通过自己的程序编译产生的模块,会在 Project 目录下,如图所示特别注意: 已经做好的并且放入到原理图的模块程序如果需要改动, 改动后

8、也必须先编译,后产生模块,最后按照如下所示进行模块更新。根据需求进行选择一下以后每次要用的时候,都可以双击鼠标,进入 project 里边进行选择,进行使用。右键点击模块,点 Generate-引脚也可以自己设置输入输出引脚并且命名。设置当前实体为最高实体,再次进行编译编译完成后,要分配引脚,通常分配引脚有两种方式,一种是直接在工程分配,这种方式对于引脚较少比较方便,如下图所示。选择 PIN双击引脚分配处的 to 和 location,就可以确定应用的 FPGA 引脚分配情况。分配好引脚后,点击保存,再看原理图,每个引脚后边都有一个“小尾巴” ,表示信号线的实际物理引脚分配情况。然后再编译。最

9、后在点击 TOOL-Programmer,或者直接点击下载图标就会出现下载对话框点击 Hardware Setup 如果你没插 USB-BLASTER,打开后不会有显示,如果插上后,这里就会显示有一个硬件可以选择,右上位置选择下载方式。注意:JTAG 模式和 AS 模式接口是不同的选择好 USB-BLASTER 后,点 Close,然后点 Start当前选择的是 JTAG 模式,因此下载程序到 RAM,可以看调试结果。至此,FPGA 的原理图制作,代码编写流程及下载流程已经全部完毕。现在以一个简单的分频器来讲一下。第一件事,如同单片机的最小系统一样,FPGA 的系统需要一个时钟源作为支撑,FP

10、GA 内部有个 PLL(锁相环)资源,这个 PLL 可以对输入频率进行倍频。因此,几乎在每个系统设计的时候,都需要对这个 PLL 进行设置。如下所示选择第一个点 NEXT,往下进行选择 IO 栏目下的 ALTPLL,给这个模块起一个名字叫PLL 然后点 NEXT根据提示进行选择,选择好了后,点击进入下一个设置在这里, 把所有的勾全部去掉就可以, 然后一直点下一步, 一直到下面图示,每个芯片可以设置输出的频率个数不同,当前我用的 ep2s60 总共有 2 个PLL,每个 PLL 可以设置 6 个不同的频率输出。现在就可以一直点下一步,直到Finish 就可以。然后再 Project 里边将 PL

11、L 放置到原理图上。新建一个 test_div 的程序,程序代码如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity test_div isport(clkin:in std_logic;clkout1:out std_logic;clkout2:out std_logic);end test_div;architecture fenpin_arc of test_div issignal count1:integer range 0 to 7;-计数寄存器 16 分频signal c

12、lkbuff1:std_logic;signal count2:integer range 0 to 3;-计数寄存器 8 分频signal clkbuff2:std_logic;beginprocess(clkin,count1,count2)beginif rising_edge(clkin) then-计数、分频 1if (count1 = 7) thencount1 = 0;clkbuff1 = not clkbuff1;elsecount1 = count1 + 1;clkout1 = 3) thencount2 = 0;clkbuff2 = not clkbuff2;elsecou

13、nt2 = count2 + 1;clkout2 Simulation Debug-Current Vector Inputs在 name 处点右键,选择 Inset-Inset Node or Bus点击 Node Finder,进入可以选择引脚,通常我习惯于显示所有引脚,在 Filter 处选择 all,当然也可以选择一些你需要的引脚,其他的引脚不显示,然后点击 List,然后再点击加入符号,如图所示点击 OK,一直回到仿真页面,鼠标左键单击输入信号,给输入信号加所需信号,如 clkin,是时钟信号,直接点击时钟符号,就可以进行设置设置好输入后,可以点 Edit 菜单下的 End Time

14、 可以选择仿真多长时间。全部设置好后,点保存,起好名字,然后点 Start simulation,便开始进行时序仿真。仿真结束后,可以观察信号时序。第三章第三章 MATLAB、DSPBUILDER、QUARTUS 联合仿真联合仿真首先我们了解一个背景,现在在 DSP 算法软件中最牛的毋庸置疑的就是Matlab 了。N 多人在用它搭建模型。我们可以把 Matlab 分为 matlab 和 simulink两部分。Matlab 更多的是对数组进行一系列的计算,而这些计算式静态的,纯粹算法上的。而 simulink 是使用模块化的方式来搭建一个平台,这个模型才是动态的。当我们用 matlab 做成一

15、个算法的时候,这个算法在实际应用中有可能可以实现,当然也有可能实现不了,更多的是一种理论上的公式。只有当我们用simulink 来搭建出一个模型的时候,我们可以知道,它是可以被实现出来的,无论是软件,还是硬件方式。DSP builder 是什么?通过前边的学习,我们知道,FPGA 内部就如同一个个小积木。DSP builder 就是 ALTERA 公司工程师,专门用这些小积木已经搭建好了各式各样的小门、 小窗、 房梁.而这些一个个做好的小模块, 都放到了 DSPBUILDER 里边。好了,这样,我们就可以在 MATLAB 的 simulink 环境下,用DSP BUILDER 的内部小模块,开

16、始堆积我们想要的那栋房子。这一下就省去了我们的好多工作,因为现在很多模块资源都是现成的,不需要我们用 VHDL 或者是 Verilog 语言去做这些小模块。当在 simulink 环境下模拟搭建好了后,我们通过 DSP 工具,就可以直接转换到 Quartus II 环境下,进行真正的搭建过程了。当然了,这个过程 Quartus II 可以完全替代我们去完成。同样,有一些功能模块,是 DSP builder 库里边所不具备的,这个时候还可以通过使用 Quartus II 进行语言编程,生成一个功能模块,并且加载到 matlab 的simulink 库里边进行仿真应用。利用 Matlab 软件中的

17、 Simulink 模块进行通信系统的仿真,并通过 DSPBuilder 软件将系统级和 RTL 级(寄存器传输级)两个设计领域的设计工具连接起来,把 Simulink 的设计文件(后缀为.mdl 文件)转成相应的硬件描述语言 VHDL设计文件(后缀为.vhd 文件), 以及用于控制综合与编译的 TCL 脚本, 之后即可通过 FPGA/CPLD 开发工具 Quartus II 来完成相应的处理。DSP Builder 依赖于数学分析工具 Matlab/Simulink,以 Simulink 的 Blockset形式出现,可以在 Simulink 中进行图形化设计和仿真。在安装 DSP Buil

18、der 软件后,Matlab 软件的 Simulink 库中会自动添加如下两个库:Altera DSP BuilderBlockset 和 Altera DSP BuilderAdvanced Blockset。后续的仿真及编译工作主要基于 Altera DSP Builder Blockset 库中的各个模块组成的系统。下面以 Matlab R2009b(Matalb 7.9.0)版本为例,与 Altera 公司 Quartus II9.1/DSP Builder v9.1 软件对应使用,并以 BFSK(二进制频移键控)的调制系统为例,详细介绍 Simulink 的使用步骤。1. 打开 Ma

19、tlab 环境Matlab 环境界面如图所示,Matlab 的主窗口界面被分割成三个窗口:命令窗 口 (Command Window) 、 工 作 区 (Workspace) 和 命 令 历 史 记 录 (CommandHistory)。在命令窗口中可以键入 Matlab 命令,同时获得 Matlab 对命令的响应信息、出错警告提示等。2. 建立工作库在建立一个新的设计模型前,最好先建立一个新的文件夹,作为工作目录,并把 Matlab 当前的 work 目录切换到新建的文件夹下。 可以点击 “File” 中的 “SetPath ” 选 项 , 添 加 该 工 作 目 录 路 径 , 如 图 所

20、 示 “ F:ProgramFilesMATLABR2009bwork” ,并将其移到目录顶部“Move to top”然后保存。在下一次打开 Matlab 时,可以通过改变主界面中的“Current Folder” ,选择该目录路径,改变当前 Matlab 工作目录。3、打开 Simulink 库单击 Matlab 界面上的快捷键(Simulink)可以打开 Simulink 的库文件,如图所示。上图即为 Simulink 的库浏览器(Library Browser),在库浏览器的左侧是Simulink Library 列表,右侧是选中的 Library 中的组件、子模块列表。其中左侧 Li

21、brary 列表中的“Simulink”库是 Simulink 的基本模型库。当安装完 DSP Builder v9.1 后, 在 Simulink 的库浏览器中可以看到多出的两个库文件:“Altera DSP Builder Advanced Blockset”和“Altera DSP Builder Blockset” 。在以下的 DSP Builder 应用中, 主要是使用 “Altera DSP Builder Blockset” 库中的组件、子模型来完成各项设计,再使用 Simulink 完成模型的仿真验证。4.Simulink 的模型文件在打开 Simulink 库浏览器后,需要新

22、建一个 Simulink 的模型文件(后缀为mdl),如图,在 Simulink 的库浏览器中选择“File”菜单,在出现的菜单项中选择“New” ,在弹出的子菜单项中选择新建模型“Model”即可,或者通过直接单击界面上的打开一个空白文件。5、添加正弦产生模块如下图,点击 Simulink 库浏览器左侧的库内树形列表中的“Simulink”条,使其库器件展开,这时会出现一长串树形列表,对基本模型库的子模块(Block)进行了分组。再次点击其中的“Sources”项,选 中库浏览器右侧的“Sine Wave”组件,按住鼠标左键并拖动“Sine Wave”模块到新模型窗口中。该模块即为 BFSK

23、 调制的一个输入载波,为了便于确认,双击模块下方的名字“Sine Wave” ,将其修改为“fc1” 。双击该模块可以得到“Source Block Parameters: fc1”的对话框,这里包括了该模块功能的介绍,以及各个相关参数的设定。修改参数设置如上图,其中幅度(Amplitude)为 210-1,表示输入信号位宽(Number of Bits)为 11 位;频率(Frequency(rad/sec)设定为 263.158kHz;初始相位为 pi/2 表示产生余弦波;由于采样频率为 2MHz, 采样时间(Sample time)设为 1/2000000。 设置完成后点击 “OK”即可

24、。可以利用同样的方法放置并设置 BFSK 调制的另一个输入载波,频率为277.778kHz,其余参数相同即可。6、添加输入端口模块如下图,点击 Simulink 库浏览器左侧的库内树形列表中的“Altera DSPBuilder Blockset”条,选择其中的“IO & Bus”项并展开,选中库浏览器右侧的“Input”模块,同样按住鼠标左键将其拖动到模型窗口中。将该输入端口名称改为“SinIn1” ,双击模块,得到如下图的参数设置对话框,设置如下,总线类型(Bus Type)选择有符号整数(Signed Integer),输出位宽(number of bits)设定为 11 位。下

25、面把这两个模块连接起来,将鼠标的指针移动到模块的输入或输出端口上, 鼠标指针就会变成十字形 “+” , 这时按住鼠标左键, 拖动鼠标就可以连线了。或者先按住 “Ctrl” 键, 然后用鼠标单击第一个模块 fc1, 再单击第二个模块 SinIn1,则会自动产生连线,连线后如图所示。7、完成 BFSK 调制模型按照上述方法,依照 BFSK 调制系统的原理框图,可以逐步添加各个功能模块以及输入、输出端口,最终完成的 BFSK 调制模型文件如下图所示。上图中用到了波形观察模块示波器“Scope” ,该模块属于 Simulink 库下的Sinks 库。双击该模块,打开的是一个示波器窗口,其中只有一个信号

26、的波形观察窗口,若希望可以同时观察多路信号,可以点击 Scope 模块窗口上侧工具栏的第二个工具按钮“Parameters” ,参数设置按钮,打开 Scope 参数设置对话框。在Scope 参数设置对话框中有 “Gerneral”(通用)和“Data history”(数据历史) 两个选项页。在“Gerneral”选项页中将“Number of axes”参数改为 2,如图所示。点击“OK”按钮确认后,可以看到 Scope 窗口增加为两个波形观察窗,每个观察窗都可以分别观察信号波形,而且相对独立。频谱观察模块 “Spectrum Scope” 属于 “Signal Processing Blo

27、ckset” 下的 “SignalProcessing Sinks”库,可以用来观察输出 BFSK 调制信号的频谱波形情况。8、加入时钟模块展开“Altera DSP Builder Blockset”库下的“AltLab” ,选择“Clock”模块添加到模型文件中,并双击模块,设置参数如下图所示。9、设计文件存盘完成系统中各个模块的设置与连接后,在进行仿真验证和编译(SignalCompiler)之前,先对设计进行存盘操作。点击新建模型窗口的“File”菜单,在下拉菜单中选择“Save”项,取名并保存,等同于直接点击窗口界面的按钮。在上述例子中,对新建模型取名为“fskmodu” ,模型文件

28、为 fskmodu.mdl。在保存完毕后,新建模型窗口的标题栏就会显示模型名称,如下图所示。注意:对模型文件取名时,尽量用英文字母开头,不使用空格,不用中文,文件名不要过长。10、Simulink 模型仿真在对模型取名存盘后, 就可以对文件进行编译, 并把 mdl 文件转换为 VHDL文件。 不过现在模型的正确性还是未知的, 需要进行仿真验证。 Matlab 的 Simulink环境具有强大的图形化仿真验证功能。用 DSP Builder 模块设计好一个新的模型后,可以直接在 Simulink 中进行算法级、系统级仿真验证。对一个模型文件进行仿真,需要施加合适的激励、一定的仿真步进和仿真周期,

29、 并添加合适的观察点和观察方式。 在 fskmodu 模型窗口中, 点击 “Simulation”菜单,在下拉菜单中选择“Configuration Parameters.”菜单项,将弹出 fskmodu模型的仿真参数设置对话框“Configuration Parameters: fskmodu/Configuration(Active)” 。该对话框中的“Solver”选项包括了仿真基本的时间设置、步进间隔、方式设置及输出选项设置。具体各项设置如上图所示,最后,点击“OK”按钮确认。11、启动仿真在 fskmodu 模型窗口中选择“Simulation”菜单,再选“Start”项开始仿真,或

30、者直接点击按钮开始。待仿真结束,双击 Scope 模块,打开示波器观察窗。下图给出了仿真结果,显示的是系统生成的 BFSK 调制信号的基带波形及时域波形图, 在下面的放大波形图中,可以清晰的看到在不同的基带信号值“0”和“1”下,BFSK 信号具有不同的频率,此时生成的是相位不连续的 BFSK 信号。在 Scope 观察窗中,可以使用工具栏中的按钮来放大或缩小波形,或者用鼠标左键选择波形并放大,也可以在波形上单击鼠标右键使用“Autoscale” ,使波形自动适配波形观察窗。模块 “fsk modu Spectrum” 可以得到 BFSK 调制信号的频谱波形, 如图所示。该 BFSK 信号在频

31、率为 270.468kHz 附近(263.158kHz 及 277.778kHz)两处有明显的波峰,表明实现了 BFSK 调制信号的产生。12、编译模型文件在 Simulink 中完成仿真验证后,就需要把设计转到硬件上加以实现,并获得针对特定 FPGA 芯片的 VHDL 代码, 这是整个 DSP Builder 设计流程中最为关键的一步,包括对模型文件的编译,以及 RTL 的仿真。首先需要放置 Signal Compiler 模块,选择 “Altera DSP Builder Blockset”库中“AltLab”项内的“Signal Compiler”模块,将其拖放到 fskmodu.mdl 文件中,如图。双击该模块,在下图所示的对话框中可以选择进行编译所使用的器件类型,此例中选择默认的 Stratix Family,以及 AUTO Device,单击“Compile”即可对完成的 fskmodu.mdl 模型文件进行编译。编译没有错误,成功完成后,点击“OK”即可,然后再次保存 fskmodu.mdl模型文件。13、运行 RTL 仿真这一步骤是将 Simulink 模型文件转化为 VHDL 语言, 并可以利用 ModelSim软件进行仿真。首

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论