3.1.1熟悉FPGA 软硬件开发环境
一、实验目的
1. 熟悉Quartus II开发环境及开发流程。
2. 掌握Quartus II中VHDL 文本输入设计方法。
3. 熟悉FPGA 实验台的功能和使用方法。
二、实验内容
利用Quartus Ⅱ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出2选1多路选择器仿真波形。最后在实验系统上进行硬件测试,验证2选1多路选择器的功能。
三、实验环境
PC 计算机 1台
Quartus II软件环境 1套
GW48-CP++实验台 1台
四、实验原理与电路
本实验利用VHDL 设计2选1多路选择器,其电路示意图和原理图如分别见2.1节的图2-1和图2-2,真值表见2.1节的表2-8。利用Quartus II设计2选1多路选择器主要设计步骤如图3-1所示。
1. 设计输入。主要完成2选1多路选择器的逻辑电路描述,2选1多路选择器的真值表如表2-8所示,采用VHDL 语言设计2选1多路选择器,VHDL 代码见第2章2.1节中的程序P2-1。
2. 编译前设置。主要完成目标芯片的选择,即制定实验台上的FPGA 芯片型号。GW48-CP++实验台上的芯片型号为EP3C40Q240,在建立工程时可以指定芯片型号,也可以在建立工程后通过主菜单“Assignment→Device”设置。
3. 编译。主要实现逻辑电路的排错,完成电路的综合、布局、布线等工作。在编译过程中可以输出电路中存在的错误,需要改正后,才能编译成功。
4. 仿真。完成对电路的功能测试,通过建立波形文件设置电路的输入信号,运行仿真观察波形的输出结果,检查电路的逻辑器功能是否正确。仿真的关键是在波形图上合理的设置输入信号的值,可以按照真值表设置输入信号的值,仿真后,按照输入信号和电路的逻辑自动在波形图上产生相应的输出信号,然后按照真值表的理论值验证仿真波形图上输入输出信号的值是否正确。仿真的时间可以根据实际需求以及电路功能的复杂程度设置,比较简单的电路,可以设置较短的仿真时间,即可完全仿真电路的功能。仿真时间的设置可通过主菜单“Edit ”→“End Time”来设置。一般设置us 数量级就可以满足要求。
5. 编程和配置。Quartus II编译电路成功后,自动将布局布线的电路,逻辑单元和引脚分配转换为该电路的编程图像,即生成电路的Programmer 对象文件(.pof)或SRAM 对象文件(.sof)。在生成编程图像之前需要对电路的输入信号进行引脚分配,即使电路的每个输入输出信号与FPGA 上的引脚相连。以便后续利用实验台的按键和数码管等外设对电路进行测试。引脚锁定和实验台的使用方法见第2章的2.3.5节。
6. 下载和测试。生成Sof 文件后,启动编程器Programmer ,选择“ByteblasterMV[Lpt1]”编程方式(计算机与实验台采用LPT 数据线连接) ,然后可以将电路的Sof 文件下载到实验台的FPGA 芯片中。下载之前需要保证实验台与计算机已用数据线连接,并且实验台的电源已经打开。下载之后,可以利用实验台的按键和数码管等外设对电路进行测试。
五、实验任务与步骤
1. 建立工作库文件夹和编辑设计文件
首先建立工作库目录,以便存储工程项目设计文件。任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。此文件夹将被EDA 软件默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。注意不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。在建立了文件夹后就可以将设计文件通过QuartusII 的文本编辑器编辑并存盘,详细步骤如下:
(1)新建一个文件夹。利用资源管理器新建一个文件夹,如:D:\muxfile。注意:文件夹名不能用中文。
(2)输入VHDL 源程序。打开QuartusII ,选择主菜单“File ”→“New ”,在“New ”窗中的“Device Design Files”中选择编译文件的语言类型,这里选“VHDL Files”(如图3-2所示) 。然后在VHDL 文本编译窗中键入如图3-3所示的VHDL 程序。
(3)文件存盘。选择主菜单“File ”→“Save As”,找到已设立的文件夹D:\muxfile,存盘文件名应该与实体名一致,即mux21a.vhd ,实体名将在建立工程时候指定。当出现问句“Do You Want To Create…”时,若选“否”,可按以下的方法进入创建工程流程;若选“是”,则直接进入创建工程流程。
2. 创建工程
使用“New Project Wizard”可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其他源文件、用户库和EDA 工具,以及目标器件系列和具体器件等。
在此要利用“New Preject Wizard”创建此设计工程,即令mux21a.vhd 为工程,并设定此工程一些相关的信息,如工程名、目标器件、综合器、访真器等。步骤如下:
(1)建立新工程管理窗。
选择主菜单“File ”→“New Preject Wizard”,即弹出工程设置对话框(图3-4) 。点击此对话框最上一栏右侧的按钮“…”,找到文件夹D:\muxfile,选中已存盘的文件mux21a.vhd ,再点击“打开”,即出现如图3-4所示设置情况。其中第一行表示工程所在的工作库文件夹;第二行表示此项工程的工程名,此工程名可以取任何其它的名,通常直接用实体名作为工程名,第三行是实体名。
(2)将设计文件加入工程中
点击工程设置对话框(图3-4) 下方的“Next ”按钮,在弹出如图3-5所示的添加文件对话框中,将此工程相关的所有VHDL 文件加入进此工程。工程的文件加入的方法有两种:第1种是点击右边的“Add All”按钮,将设定的工程目录中的所有VHD 文件加入到工程文件栏中;第2种方法是点击浏览按钮,从工程目录中选出相关的VHDL 文件,点击“Add ”按钮将文件加入到工程。
(3)选择目标芯片
点击添加文件对话框(图3-5) 中的“Next ”,弹出的器件设置对话框如图3-6所示,首先在“Family ”栏选芯片系列,在此选“Cyclone III”系列,在窗口右侧设置Pin Count为240,这时列表中显示了3种具有240个引脚的芯片,这里选择EP3C40Q240C8。此芯片即是GW48-CP++实验台上的FPGA 芯片。只有指定实验台上的目标芯片,后续才允许将电路下载到实验台的FPGA 芯片中,不同的实验台或开发板上的FPGA 芯片不同,需要根据实际情况选择目标芯片。
(4)选择仿真器和综合器类型
点击图3-6所示对话框的“Next ”按钮,这时弹出的窗口是EDA 工具设置窗口,在此窗口可以选择仿真器和综合器类型的,如果都是选默认的“None ”,表示都选Quartus II中自带的仿真器和综合器,因此,在此都选默认项“None ”。
(5)结束设置
继续点击“Next ”按钮,弹出工程信息报告窗口如图3-7所示,显示了工程的实体名,目标芯片等信息。最后按键“Finish ”按钮,即已设定好此工程,弹出如图3-8所示的窗口,此工程管理窗口(“Project Navigator”) 主要显示工程项目的层次结构和各层次的实体名。
建立工程后,可以使用“Settings 对话框”(“Assignments ”菜单) 的“Add/Remove”页在程中添加和删除、设计其他文件。在执行Quartus II的“Analysis & Synthesis”期间,Quartus II将按“Add/Remove页”中显示的顺序处理文件。
利用工程管理窗口(“Project Navigator”) 可以方便的管理工程的文件,双击图3-8中“Project Navigator”窗口的实体名mux21a ,可以打开顶层实体的设计文件,即mux21a.vhd 。如图3-9所示。点击“Project Navigator”窗口的“Files ”页面,如图3-10所示,可以看到工程中所有的文件,这里只有mux21a.vhd ,以后建立的其他文件也会出现在此页面。
如果主窗
口中没有显示“Project Navigator”窗口(可能不小心关闭了) ,可以选择主菜单
“View ”→“Utility Windows”→“Project Navigator”,或者按Alt+0键打开工程管理窗口。
3. 编译前设置
在对工程进行编译处理前,必须作好必要的设置。步骤如下:
(1)选择目标芯片
如果在建立工程时已经选择目标芯片可忽略此步骤。目标芯片的选择也可以这样来实现:选择主菜单“Assignmemts ”→“Settings ”项,在弹出的对话框中选“Compiler Settings”项下的“Device ”,选择目标芯片EP3C40Q240C8,如图3-11所示。首先在“
Show in Available
devices ’ list”栏分别选“Package ”:PQFP ;“Pin Count”:240;“Speed ”:8,然后在“Available Devices“列表中选目标芯片:EP3C40Q240C8。
4. 编译
Quartus II编译器是由一系列处理模块构成的,这些模块负责对设计项目的检错,逻辑综合和结构综合。即将设计项目适配进FPGA/CPLD目标器中,同时产生多种用途的输出文件,如功能和时序仿真文件,器件编程的目标文件等。编译器首先从工程设计文件间的层次结构描述中提取信息,包括每个低层次文件中的错误信息,供设计者排除,然后将这些层次构建产生一个结构化的以网表文件表达的电路原理图文件,并把各层次中所有的文件结合成一个数据包,以便更有效地处理。
下面首先选择主菜单“Processing ”→“Start Compilation”项,启动全程编译。注意这里所谓的编译(Compilation)包括Quartus II对设计输入的多项处理操作,其中包括排错、数据网表文件提取、逻辑综合、适配、装配文件(仿真文件与编程配置文件) 生成,以及基于目标器件的工程时序分析等。如果工程中的文件有错误,启动编译后在下方的“Processing ”栏中会显示出来(如图3-12所示) 。对于“Processing ”栏显示出的语句格式错误,可双击此条文,即弹出对应的VHDL 文件,在深色标记条处(或附近) 可发现文件中的错误。改正错误,再次进行编译直至排除所有错误。注意,如果发现报出多条错误信息,每次只要检查和纠正最上面报出的错误,因为许多情况下,都是由于某一种错误导致了多条错误信息报告。如果主窗口“Processing ”栏中没有显示“Messages ”窗口(可能不小心关闭了) ,可以选择主菜单“View ”→“Utility Windows”→“Messages ”,或者按Alt+3键打开“Messages ”窗口。
如果编译成功,可以见到如图3-13所示的窗口。“Compilation Report”栏是编译报告项目选择主菜单,点击其中各项可以详细了解编译与分析结果(默认显示“Flow Summary”项的信息) 。“Flow Summary”窗口了显示硬件耗用统计报告,其中报告了当前工程耗用了1个逻辑宏单元、4个引脚,0个内部RAM 位等。
如果点击“Timequest Timing Analyzer”项的“+”号,则能通过点击以下列出的各项目,看到当前工程所有相关时序特性报告。
如果点击“Fitter ”项的“+”号,则能通过点击以下列出的各项看到当前工程所有相关硬件特性适配报告。
5. 仿真
对工程的编译通过后,必须对其功能和时序性质进行仿真测试,以了解设计结果是否满足原设计要求。以vwf 文件方式的仿真流程的详细步骤如下:
(1)打开波形编辑器。选择主菜单“File “→”New ”项,在“New ”窗中选
“Verification/Debugging Files”中的“Vector Waveform File”(图3-14) ,点击“Ok ”按钮,即出现空白的波形编辑器(图3-15) 。注意可以选择主菜单“View ”→“Full Screen”或者点击工具栏上的全屏窗口按钮将窗口扩大或缩小,以利观察仿真波形。
(2)设置仿真时间区域。在选择主菜单“Edit ”→“End Time”项,在弹出的窗中的“Time ”窗中键入50,单位选“us ”,如图3-16,即整个仿真域的时间设定为50微秒,点击“Ok ”按钮,结束设置。对于时序仿真来说,将仿真时间轴设置在一个合理的时间区域上十分重要。通常设置的时间范围在数十微秒间。如果电路功能比较复杂,需要验证的功能较多,则需要适当加长仿真时间。仿真时间设置越长,将会导致仿真的耗时越长,如果设置为几秒,则实际仿真电路需要的时间可能需要几个小时,因此仿真时间设置一定要合理。
(3)存盘波形文件。选择File 中的“Save As”,将以名为mux21a.vwf(默认名) 的波形文件存入文件夹D:\muxfile中。
(4)输入信号节点。将工程mux21a 的端口信号节点选入波形编辑器中。主要有两种方法(可以任选一种) :
方法一:首先选择主菜单“View ”→“Utility Windows”→“Node Finder”选项,出现如图3-17所示的“Node Finder”窗口。点击“List ”按钮,可以在下面的“Node Found”栏中看到4个引脚。可以用鼠标左键点击“Node Found”栏中的引脚,拖拽到mux21a.vwf 编辑窗口中的“Name ”栏,添加完引脚的mux21a.vwf 编辑窗口如图3-18所示。
方法二:双击图3-15波形编辑器左侧栏(“Name ”栏) 的空白处,弹出对话框如图3-19所示。在“Filter ”框中选“Pins:All”,然后点击“List ”钮。于是在左侧“Node Found”栏中出现了设计中的mux21a 工程的所有端口引脚名(如果此对话框中的“List ”不显示,需要重新编译一次,即选主菜单“Processing ”→“Start Compilation”,然后重复以上操作过程) 。用鼠标点击窗口中间的按钮,可将“Node Found”栏中所有的节点加入到右侧“Selected Nodes ”栏中,也可以先选中“Node Found”栏中的某个信号,点击按钮,将其加入到“Selected Nodes”栏中。最后点击“Ok ”按钮,完成仿真波形节点信号的添加。
(5)
大缩小钮放大缩小按钮后,用鼠标在波形编辑区域左键单击(放大)
或右键单击(缩小) ,使仿真坐标处于适当位置。这时仿真时间横坐标设定在数十微秒数量级。
在“Name ”栏中用鼠标左键点击端口信号a ,使之变蓝色,点击编辑器工具栏上的高电平按钮,使a 信号设置为高电平。编辑器工具栏上的按钮与主菜单“Edit ”→“Value ”的功能一致,其常用功能说明如图3-20所示。利用编辑器工具栏可以方便的对输入信号进行编辑,设置不同的值。同理设置b 信号为低电平(默认为低电平) ,然后按下面方法手动设置s 信号先为高电平,一段时间后变成低电平,首先点击波形编辑器工具栏上的选择工具(白色箭头) 使得鼠标处于选择状态,然后用鼠标左键点击s 信号的波形(不是Name 栏中的s 信号,而是信号后面的直线) ,向后拖动一段,大约25us ,即选中这段波形(变成蓝色) ,如图3-21所示,再点击工具栏上的“高电平”按钮,设置这段s 信号为高电平。编辑完的波形图如图3-22所示。
波形编辑器工具栏 选择工具
全屏显示
低电平
高电平
时钟信号/周期信号
(6)仿真器参数设置(可以选择默认设置,忽略此步骤) 。选择主菜单
“Assignment ”→“Settings ’,在“Settings ”窗口中选择“Category ”→“Simulator
Setting ”,如图3-23所示。可以设置仿真模式“Time Mode”,默认为“Time ”。还可以进行毛刺检测“Glitch Detection”(1ns宽度) 等设置。
(7)启动仿真器。所有设置完毕,在选择主菜单“Processing ”→“Start Simulation”,或者点击Quartus II工具栏上的按钮,开始仿真,直到出现“Simulator Was Successful”,仿真结束。
(8)观察仿真结果。仿真波形文件“Simulation Waveforms”窗口通常会自动弹出,如图3-24所示。如果不小心关闭了“Simulation Waveforms”窗口,可以重新启动仿真器,或者选择主菜单“Processing ”→“Simulation Report”,打开仿真波形报告。
从波形图可以看出,mux21a 电路共仿真运行了50us ,前25us 这段时间s 信号为高电平时,y 选择输出b 的信号,即低电平,当s 信号为低电平时,选择输出a 的信号,即高电平,证明了此2选1选择器(mux21a)的“2选1”功能。
注意,Quartus II的仿真波形文件中,波形编辑文件(*.vwf)与波形仿真报告文件
(“Simulation Report”) 是分开的。如果在启动仿真(“Processing ”→“Run Simulation”) 后,并没有出现仿真完成后的波形图,而是出现文字“Can’t Open Simulation Report Window ”,但报告仿真成功,则可自己打开仿真波形报告,选择主菜单“processing ”→“Simulation Report ”。
如果无法展开波形显示时间轴上的所有波形图或者波形图上一片空白,可以点击
“Simulation Waveforms”窗口左侧工具栏上的放大缩小按钮,用鼠标在波形上左键单击或右键单击,对波形图进行放大和缩小。如果波形无法放大或缩小,可以右键点击波形编辑窗中任何位置,这时再选择弹出窗口的“Zoom ”项,在出现的下拉菜单中选择“
Fit In
Window ”(图3-25) 。如果即使缩小波形也不能显示电路的全部功能,可能是仿真时间太短,参考(2)设置仿真时间区域,设置合理的仿真时间。
(9)在上面的仿真中,a ,b 的信号在整个仿真过程中是不变的,恒为高电平或者低电平,为了进一步练习编辑输入波形的方法,下面重新编辑输入波形,修改a ,b 信号为周期变化的信号,再进行一次仿真,查看仿真结果。
首先打开仿真前波形文件:mux21a.vwf ,可以选择主菜单“File ”→“Open ”,选择打开工程所在目录下的mux21a.vwf 或者在“Project Navigator”窗口的“Files ”页面(如图3-26所示) 中双击打开mux21a.vwf 。然后在波形编辑器的Name 栏中用鼠标左键点击端口信号a ,使之变蓝色,再选择主菜单“Edit ”→“Value ”→“Clock ”选项,或则在波形编辑器工具栏上选择时钟信号按钮(见图3-20) 在弹出的“Clock ”窗中设置Clk 的周期为3us ;所示的“Clock ”窗中的“Duty Cycle”是占空比,可选50,即50%占空比;如图3-27所示。同样方法设置端口信号b 的周期为6us ,前面第(5)步中,s 信号在整个仿真周期变化了一次,先高后低,下面设置s 信号再变化一次,可以采用手动方法设置(参考步骤(5)),也可以同a
信号一样
利用时钟信号方法来设置,例如设置时钟周期为50us 。编辑好的波形如图3-28所示。然后保存文件。
参考步骤(7),重新启动仿真器,出现仿真结果如图3所示。从波形图1可以看出,当s
信号为高电平时,
y 的波形与b 一致,即y 输出b 的信号,
当s 信号为低电平时,y 的波形与a 一致,即y 输出a 的信号,证明了此2选1选择器(mux21a)的“2选1”功能。
在输出波形图上,利用“标线”可以定位任意时刻的仿真情况,如图3-29所示,在10us 时刻,各个信号的值为:a=0,b=1,s=0,y=1,与2选一选择器的真值表(表2-8) 一致。注意:点击工具栏上的箭头按钮使鼠标处于选择状态,可以拖动“标线按钮”到指定时间位置。
6. 应用RTL 电路图观察器
Quartus II中的RTL Viewer工具可生成硬件描述语言或网表文件(VHDL、Verilog 、Bdf 、Tdf 、Edif 、Vqm) 对应的RTL 电路图。通常,VHDL 代码或原理图经过编译后,功能仿真之前,可以利用RTL Viewer分析电路逻辑行为是否符合用户的要求。方法如下:
选择主菜单“File ”→“Open ”,选择打开工程所在目录下的mux21a.vhd 或者在“Project Navigator ”窗口的Files 页面(如图3-26所示) 中双击打开mux21a.vhd 。选择主菜单
“Tools ”→“Netlist Viewer”→“RTL Viewer”项,可以打开mux21a 工程各层次的RTL 电路图(图3-30) 。双击图形中有关模块,或选择左侧各项,可逐层了解各层次的电路结构。
7. 编程配置、下载与硬件测试
为了能对此选择器进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上,编译后下载。当硬件测试完成后,还必须对配置芯片进行编程,完成FPGA 的最终开发。
(1)引脚锁定
为了能对选择器进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上。在此选择GW48-CP++实验台的电路模式No.5,如图1所示。即用键1控制信号s ;a 、b 分别接Clock5和Clock0;输出信号y 接扬声器Speaker 。根据上面确定的实验模式锁定mux21a 在目标芯片中的具体引脚。通过查阅2.3.3节的图2-46和2.3.4节的芯片引脚分配表(表2-14) 来确定。mux21a 工程的引脚锁定方案如表3-1所示。
打开mux21a 工程(如果刚打开Quartus II,应选择主菜单“File ”→“Open Preject”项,并点击工程文件mux21a) ,选择主菜单“Assignments ”→“Pin ”项,弹出的对话框如图3-31所示,在“Location ”处填写每个信号的引脚号,引脚锁定完毕如图3-32所示。最后点击存盘。关闭对话框。引脚锁定后,必须再编译一次(选择主菜单“Processing ”→“Start
Compilation) ”,将引脚锁定信息编译进下载文件中。如果图3-31中没有“Location ”列,则右键点击“Name Node”栏,在弹出右键菜单中选择“Customize Columns”项,如图3-33所示。然后按照图3-34和图3-35添加“Location ”列。
(2)选择编程器
用数据线连接GW48-CP++实验台与计算机,并打开实验台电源。在Quartus II中选择主菜单“Tool ”→“Programmer ”项,弹出图3-36所示的编程窗。如果窗口上方显示
“ByteBlasterMV[LPT1]”,则忽略以下步骤,否则如果显示“No Hardware”或其他方式,则点击编程窗上的“Hardware Setup”钮,即弹出“Hardware Setup”对话框,如图3-37所示;选择此框的“Hardware Settings”页,点击“Add Hardware”按钮,在弹出的窗口中选择ByteBlasterMV ,单击“Ok ”按钮,再双击此页中的选项“ByteBlasterMV ”,使“Currently Selected Hardware”右侧显示ByteBlasterMV[LPT1],如图3-38所示,最后单击“Close ”按钮,关闭对话框即可。这时应该在编程窗右上显示出编程方式:ByteBlasterMV[LPT1],如图3-39所示。
(3)选择编程模式及配置并进行编程
为了将编译产生的下载文件配置进FPGA 中进行测试,要将系统连接好,上电,然后在图3-39所示的编程窗中,在“Mode ”栏中有三种编程模式可以选择,JTAG 、Passive Serial 和Active Serial。为了直接对FPGA 进行配置,在编程窗的编程模式Mode 中选
“JTAG ”(默认) ,并选中打勾下载文件右侧的第一小方框,如图3-39所示。注意要仔细核对下载文件路径与文件名。如果此文件没有出现或有错,单击左侧“Add File”按钮,手动选择配置文件mux21a.sof 。如果出现多个mux21a.sof 文件,删除多余的其他路径下面的Sof 文件,确保mux21a.sof 是想要下载到实验台测试的电路。最后单击下载标符“Start ”按钮,即进入对目标器件FPGA 的配置下载操作。当“Progress ”显示出100%,以及在底部的处理栏中出现“Configuration Succesful”时,表示编程成功,如图3-40所示。单击下载标符“Start ”按钮后,“Progress ”一直为0%,并且在Quartus II主窗口下面的“Message ”窗口“System ”栏显示出错信息,如图3-41所示。则说明下载失败,一般是下面的一个或多个原因:①没有选择ByteBlasterMV[LPT1]编程器,②没有打开实验台电源,③数据线与电脑并口松动,④数据线与实验台连接不正确(数据线端口中间有凸起的一面向上) 没有连接好的缘故。
(4)硬件测试
下载后,按动实验台左下角的模式选择按钮,选实验电路模式“No.5”,在实验台右上角的时钟区,用短路帽设定Clock5和Clock0的频率分别为1024hz 和256hz 。注意:一个时钟上不能同时选择两个频率,即不能同时放两个短路帽。当用键1输入高电平时,扬声器发出256hz 低频声,当用键1输入低电平时,扬声器发出1024hz 高频声。思考:扬声器为什么会发出不同的声音,分析电路的功能和原理。
3.1.1熟悉FPGA 软硬件开发环境
一、实验目的
1. 熟悉Quartus II开发环境及开发流程。
2. 掌握Quartus II中VHDL 文本输入设计方法。
3. 熟悉FPGA 实验台的功能和使用方法。
二、实验内容
利用Quartus Ⅱ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出2选1多路选择器仿真波形。最后在实验系统上进行硬件测试,验证2选1多路选择器的功能。
三、实验环境
PC 计算机 1台
Quartus II软件环境 1套
GW48-CP++实验台 1台
四、实验原理与电路
本实验利用VHDL 设计2选1多路选择器,其电路示意图和原理图如分别见2.1节的图2-1和图2-2,真值表见2.1节的表2-8。利用Quartus II设计2选1多路选择器主要设计步骤如图3-1所示。
1. 设计输入。主要完成2选1多路选择器的逻辑电路描述,2选1多路选择器的真值表如表2-8所示,采用VHDL 语言设计2选1多路选择器,VHDL 代码见第2章2.1节中的程序P2-1。
2. 编译前设置。主要完成目标芯片的选择,即制定实验台上的FPGA 芯片型号。GW48-CP++实验台上的芯片型号为EP3C40Q240,在建立工程时可以指定芯片型号,也可以在建立工程后通过主菜单“Assignment→Device”设置。
3. 编译。主要实现逻辑电路的排错,完成电路的综合、布局、布线等工作。在编译过程中可以输出电路中存在的错误,需要改正后,才能编译成功。
4. 仿真。完成对电路的功能测试,通过建立波形文件设置电路的输入信号,运行仿真观察波形的输出结果,检查电路的逻辑器功能是否正确。仿真的关键是在波形图上合理的设置输入信号的值,可以按照真值表设置输入信号的值,仿真后,按照输入信号和电路的逻辑自动在波形图上产生相应的输出信号,然后按照真值表的理论值验证仿真波形图上输入输出信号的值是否正确。仿真的时间可以根据实际需求以及电路功能的复杂程度设置,比较简单的电路,可以设置较短的仿真时间,即可完全仿真电路的功能。仿真时间的设置可通过主菜单“Edit ”→“End Time”来设置。一般设置us 数量级就可以满足要求。
5. 编程和配置。Quartus II编译电路成功后,自动将布局布线的电路,逻辑单元和引脚分配转换为该电路的编程图像,即生成电路的Programmer 对象文件(.pof)或SRAM 对象文件(.sof)。在生成编程图像之前需要对电路的输入信号进行引脚分配,即使电路的每个输入输出信号与FPGA 上的引脚相连。以便后续利用实验台的按键和数码管等外设对电路进行测试。引脚锁定和实验台的使用方法见第2章的2.3.5节。
6. 下载和测试。生成Sof 文件后,启动编程器Programmer ,选择“ByteblasterMV[Lpt1]”编程方式(计算机与实验台采用LPT 数据线连接) ,然后可以将电路的Sof 文件下载到实验台的FPGA 芯片中。下载之前需要保证实验台与计算机已用数据线连接,并且实验台的电源已经打开。下载之后,可以利用实验台的按键和数码管等外设对电路进行测试。
五、实验任务与步骤
1. 建立工作库文件夹和编辑设计文件
首先建立工作库目录,以便存储工程项目设计文件。任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。此文件夹将被EDA 软件默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。注意不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。在建立了文件夹后就可以将设计文件通过QuartusII 的文本编辑器编辑并存盘,详细步骤如下:
(1)新建一个文件夹。利用资源管理器新建一个文件夹,如:D:\muxfile。注意:文件夹名不能用中文。
(2)输入VHDL 源程序。打开QuartusII ,选择主菜单“File ”→“New ”,在“New ”窗中的“Device Design Files”中选择编译文件的语言类型,这里选“VHDL Files”(如图3-2所示) 。然后在VHDL 文本编译窗中键入如图3-3所示的VHDL 程序。
(3)文件存盘。选择主菜单“File ”→“Save As”,找到已设立的文件夹D:\muxfile,存盘文件名应该与实体名一致,即mux21a.vhd ,实体名将在建立工程时候指定。当出现问句“Do You Want To Create…”时,若选“否”,可按以下的方法进入创建工程流程;若选“是”,则直接进入创建工程流程。
2. 创建工程
使用“New Project Wizard”可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其他源文件、用户库和EDA 工具,以及目标器件系列和具体器件等。
在此要利用“New Preject Wizard”创建此设计工程,即令mux21a.vhd 为工程,并设定此工程一些相关的信息,如工程名、目标器件、综合器、访真器等。步骤如下:
(1)建立新工程管理窗。
选择主菜单“File ”→“New Preject Wizard”,即弹出工程设置对话框(图3-4) 。点击此对话框最上一栏右侧的按钮“…”,找到文件夹D:\muxfile,选中已存盘的文件mux21a.vhd ,再点击“打开”,即出现如图3-4所示设置情况。其中第一行表示工程所在的工作库文件夹;第二行表示此项工程的工程名,此工程名可以取任何其它的名,通常直接用实体名作为工程名,第三行是实体名。
(2)将设计文件加入工程中
点击工程设置对话框(图3-4) 下方的“Next ”按钮,在弹出如图3-5所示的添加文件对话框中,将此工程相关的所有VHDL 文件加入进此工程。工程的文件加入的方法有两种:第1种是点击右边的“Add All”按钮,将设定的工程目录中的所有VHD 文件加入到工程文件栏中;第2种方法是点击浏览按钮,从工程目录中选出相关的VHDL 文件,点击“Add ”按钮将文件加入到工程。
(3)选择目标芯片
点击添加文件对话框(图3-5) 中的“Next ”,弹出的器件设置对话框如图3-6所示,首先在“Family ”栏选芯片系列,在此选“Cyclone III”系列,在窗口右侧设置Pin Count为240,这时列表中显示了3种具有240个引脚的芯片,这里选择EP3C40Q240C8。此芯片即是GW48-CP++实验台上的FPGA 芯片。只有指定实验台上的目标芯片,后续才允许将电路下载到实验台的FPGA 芯片中,不同的实验台或开发板上的FPGA 芯片不同,需要根据实际情况选择目标芯片。
(4)选择仿真器和综合器类型
点击图3-6所示对话框的“Next ”按钮,这时弹出的窗口是EDA 工具设置窗口,在此窗口可以选择仿真器和综合器类型的,如果都是选默认的“None ”,表示都选Quartus II中自带的仿真器和综合器,因此,在此都选默认项“None ”。
(5)结束设置
继续点击“Next ”按钮,弹出工程信息报告窗口如图3-7所示,显示了工程的实体名,目标芯片等信息。最后按键“Finish ”按钮,即已设定好此工程,弹出如图3-8所示的窗口,此工程管理窗口(“Project Navigator”) 主要显示工程项目的层次结构和各层次的实体名。
建立工程后,可以使用“Settings 对话框”(“Assignments ”菜单) 的“Add/Remove”页在程中添加和删除、设计其他文件。在执行Quartus II的“Analysis & Synthesis”期间,Quartus II将按“Add/Remove页”中显示的顺序处理文件。
利用工程管理窗口(“Project Navigator”) 可以方便的管理工程的文件,双击图3-8中“Project Navigator”窗口的实体名mux21a ,可以打开顶层实体的设计文件,即mux21a.vhd 。如图3-9所示。点击“Project Navigator”窗口的“Files ”页面,如图3-10所示,可以看到工程中所有的文件,这里只有mux21a.vhd ,以后建立的其他文件也会出现在此页面。
如果主窗
口中没有显示“Project Navigator”窗口(可能不小心关闭了) ,可以选择主菜单
“View ”→“Utility Windows”→“Project Navigator”,或者按Alt+0键打开工程管理窗口。
3. 编译前设置
在对工程进行编译处理前,必须作好必要的设置。步骤如下:
(1)选择目标芯片
如果在建立工程时已经选择目标芯片可忽略此步骤。目标芯片的选择也可以这样来实现:选择主菜单“Assignmemts ”→“Settings ”项,在弹出的对话框中选“Compiler Settings”项下的“Device ”,选择目标芯片EP3C40Q240C8,如图3-11所示。首先在“
Show in Available
devices ’ list”栏分别选“Package ”:PQFP ;“Pin Count”:240;“Speed ”:8,然后在“Available Devices“列表中选目标芯片:EP3C40Q240C8。
4. 编译
Quartus II编译器是由一系列处理模块构成的,这些模块负责对设计项目的检错,逻辑综合和结构综合。即将设计项目适配进FPGA/CPLD目标器中,同时产生多种用途的输出文件,如功能和时序仿真文件,器件编程的目标文件等。编译器首先从工程设计文件间的层次结构描述中提取信息,包括每个低层次文件中的错误信息,供设计者排除,然后将这些层次构建产生一个结构化的以网表文件表达的电路原理图文件,并把各层次中所有的文件结合成一个数据包,以便更有效地处理。
下面首先选择主菜单“Processing ”→“Start Compilation”项,启动全程编译。注意这里所谓的编译(Compilation)包括Quartus II对设计输入的多项处理操作,其中包括排错、数据网表文件提取、逻辑综合、适配、装配文件(仿真文件与编程配置文件) 生成,以及基于目标器件的工程时序分析等。如果工程中的文件有错误,启动编译后在下方的“Processing ”栏中会显示出来(如图3-12所示) 。对于“Processing ”栏显示出的语句格式错误,可双击此条文,即弹出对应的VHDL 文件,在深色标记条处(或附近) 可发现文件中的错误。改正错误,再次进行编译直至排除所有错误。注意,如果发现报出多条错误信息,每次只要检查和纠正最上面报出的错误,因为许多情况下,都是由于某一种错误导致了多条错误信息报告。如果主窗口“Processing ”栏中没有显示“Messages ”窗口(可能不小心关闭了) ,可以选择主菜单“View ”→“Utility Windows”→“Messages ”,或者按Alt+3键打开“Messages ”窗口。
如果编译成功,可以见到如图3-13所示的窗口。“Compilation Report”栏是编译报告项目选择主菜单,点击其中各项可以详细了解编译与分析结果(默认显示“Flow Summary”项的信息) 。“Flow Summary”窗口了显示硬件耗用统计报告,其中报告了当前工程耗用了1个逻辑宏单元、4个引脚,0个内部RAM 位等。
如果点击“Timequest Timing Analyzer”项的“+”号,则能通过点击以下列出的各项目,看到当前工程所有相关时序特性报告。
如果点击“Fitter ”项的“+”号,则能通过点击以下列出的各项看到当前工程所有相关硬件特性适配报告。
5. 仿真
对工程的编译通过后,必须对其功能和时序性质进行仿真测试,以了解设计结果是否满足原设计要求。以vwf 文件方式的仿真流程的详细步骤如下:
(1)打开波形编辑器。选择主菜单“File “→”New ”项,在“New ”窗中选
“Verification/Debugging Files”中的“Vector Waveform File”(图3-14) ,点击“Ok ”按钮,即出现空白的波形编辑器(图3-15) 。注意可以选择主菜单“View ”→“Full Screen”或者点击工具栏上的全屏窗口按钮将窗口扩大或缩小,以利观察仿真波形。
(2)设置仿真时间区域。在选择主菜单“Edit ”→“End Time”项,在弹出的窗中的“Time ”窗中键入50,单位选“us ”,如图3-16,即整个仿真域的时间设定为50微秒,点击“Ok ”按钮,结束设置。对于时序仿真来说,将仿真时间轴设置在一个合理的时间区域上十分重要。通常设置的时间范围在数十微秒间。如果电路功能比较复杂,需要验证的功能较多,则需要适当加长仿真时间。仿真时间设置越长,将会导致仿真的耗时越长,如果设置为几秒,则实际仿真电路需要的时间可能需要几个小时,因此仿真时间设置一定要合理。
(3)存盘波形文件。选择File 中的“Save As”,将以名为mux21a.vwf(默认名) 的波形文件存入文件夹D:\muxfile中。
(4)输入信号节点。将工程mux21a 的端口信号节点选入波形编辑器中。主要有两种方法(可以任选一种) :
方法一:首先选择主菜单“View ”→“Utility Windows”→“Node Finder”选项,出现如图3-17所示的“Node Finder”窗口。点击“List ”按钮,可以在下面的“Node Found”栏中看到4个引脚。可以用鼠标左键点击“Node Found”栏中的引脚,拖拽到mux21a.vwf 编辑窗口中的“Name ”栏,添加完引脚的mux21a.vwf 编辑窗口如图3-18所示。
方法二:双击图3-15波形编辑器左侧栏(“Name ”栏) 的空白处,弹出对话框如图3-19所示。在“Filter ”框中选“Pins:All”,然后点击“List ”钮。于是在左侧“Node Found”栏中出现了设计中的mux21a 工程的所有端口引脚名(如果此对话框中的“List ”不显示,需要重新编译一次,即选主菜单“Processing ”→“Start Compilation”,然后重复以上操作过程) 。用鼠标点击窗口中间的按钮,可将“Node Found”栏中所有的节点加入到右侧“Selected Nodes ”栏中,也可以先选中“Node Found”栏中的某个信号,点击按钮,将其加入到“Selected Nodes”栏中。最后点击“Ok ”按钮,完成仿真波形节点信号的添加。
(5)
大缩小钮放大缩小按钮后,用鼠标在波形编辑区域左键单击(放大)
或右键单击(缩小) ,使仿真坐标处于适当位置。这时仿真时间横坐标设定在数十微秒数量级。
在“Name ”栏中用鼠标左键点击端口信号a ,使之变蓝色,点击编辑器工具栏上的高电平按钮,使a 信号设置为高电平。编辑器工具栏上的按钮与主菜单“Edit ”→“Value ”的功能一致,其常用功能说明如图3-20所示。利用编辑器工具栏可以方便的对输入信号进行编辑,设置不同的值。同理设置b 信号为低电平(默认为低电平) ,然后按下面方法手动设置s 信号先为高电平,一段时间后变成低电平,首先点击波形编辑器工具栏上的选择工具(白色箭头) 使得鼠标处于选择状态,然后用鼠标左键点击s 信号的波形(不是Name 栏中的s 信号,而是信号后面的直线) ,向后拖动一段,大约25us ,即选中这段波形(变成蓝色) ,如图3-21所示,再点击工具栏上的“高电平”按钮,设置这段s 信号为高电平。编辑完的波形图如图3-22所示。
波形编辑器工具栏 选择工具
全屏显示
低电平
高电平
时钟信号/周期信号
(6)仿真器参数设置(可以选择默认设置,忽略此步骤) 。选择主菜单
“Assignment ”→“Settings ’,在“Settings ”窗口中选择“Category ”→“Simulator
Setting ”,如图3-23所示。可以设置仿真模式“Time Mode”,默认为“Time ”。还可以进行毛刺检测“Glitch Detection”(1ns宽度) 等设置。
(7)启动仿真器。所有设置完毕,在选择主菜单“Processing ”→“Start Simulation”,或者点击Quartus II工具栏上的按钮,开始仿真,直到出现“Simulator Was Successful”,仿真结束。
(8)观察仿真结果。仿真波形文件“Simulation Waveforms”窗口通常会自动弹出,如图3-24所示。如果不小心关闭了“Simulation Waveforms”窗口,可以重新启动仿真器,或者选择主菜单“Processing ”→“Simulation Report”,打开仿真波形报告。
从波形图可以看出,mux21a 电路共仿真运行了50us ,前25us 这段时间s 信号为高电平时,y 选择输出b 的信号,即低电平,当s 信号为低电平时,选择输出a 的信号,即高电平,证明了此2选1选择器(mux21a)的“2选1”功能。
注意,Quartus II的仿真波形文件中,波形编辑文件(*.vwf)与波形仿真报告文件
(“Simulation Report”) 是分开的。如果在启动仿真(“Processing ”→“Run Simulation”) 后,并没有出现仿真完成后的波形图,而是出现文字“Can’t Open Simulation Report Window ”,但报告仿真成功,则可自己打开仿真波形报告,选择主菜单“processing ”→“Simulation Report ”。
如果无法展开波形显示时间轴上的所有波形图或者波形图上一片空白,可以点击
“Simulation Waveforms”窗口左侧工具栏上的放大缩小按钮,用鼠标在波形上左键单击或右键单击,对波形图进行放大和缩小。如果波形无法放大或缩小,可以右键点击波形编辑窗中任何位置,这时再选择弹出窗口的“Zoom ”项,在出现的下拉菜单中选择“
Fit In
Window ”(图3-25) 。如果即使缩小波形也不能显示电路的全部功能,可能是仿真时间太短,参考(2)设置仿真时间区域,设置合理的仿真时间。
(9)在上面的仿真中,a ,b 的信号在整个仿真过程中是不变的,恒为高电平或者低电平,为了进一步练习编辑输入波形的方法,下面重新编辑输入波形,修改a ,b 信号为周期变化的信号,再进行一次仿真,查看仿真结果。
首先打开仿真前波形文件:mux21a.vwf ,可以选择主菜单“File ”→“Open ”,选择打开工程所在目录下的mux21a.vwf 或者在“Project Navigator”窗口的“Files ”页面(如图3-26所示) 中双击打开mux21a.vwf 。然后在波形编辑器的Name 栏中用鼠标左键点击端口信号a ,使之变蓝色,再选择主菜单“Edit ”→“Value ”→“Clock ”选项,或则在波形编辑器工具栏上选择时钟信号按钮(见图3-20) 在弹出的“Clock ”窗中设置Clk 的周期为3us ;所示的“Clock ”窗中的“Duty Cycle”是占空比,可选50,即50%占空比;如图3-27所示。同样方法设置端口信号b 的周期为6us ,前面第(5)步中,s 信号在整个仿真周期变化了一次,先高后低,下面设置s 信号再变化一次,可以采用手动方法设置(参考步骤(5)),也可以同a
信号一样
利用时钟信号方法来设置,例如设置时钟周期为50us 。编辑好的波形如图3-28所示。然后保存文件。
参考步骤(7),重新启动仿真器,出现仿真结果如图3所示。从波形图1可以看出,当s
信号为高电平时,
y 的波形与b 一致,即y 输出b 的信号,
当s 信号为低电平时,y 的波形与a 一致,即y 输出a 的信号,证明了此2选1选择器(mux21a)的“2选1”功能。
在输出波形图上,利用“标线”可以定位任意时刻的仿真情况,如图3-29所示,在10us 时刻,各个信号的值为:a=0,b=1,s=0,y=1,与2选一选择器的真值表(表2-8) 一致。注意:点击工具栏上的箭头按钮使鼠标处于选择状态,可以拖动“标线按钮”到指定时间位置。
6. 应用RTL 电路图观察器
Quartus II中的RTL Viewer工具可生成硬件描述语言或网表文件(VHDL、Verilog 、Bdf 、Tdf 、Edif 、Vqm) 对应的RTL 电路图。通常,VHDL 代码或原理图经过编译后,功能仿真之前,可以利用RTL Viewer分析电路逻辑行为是否符合用户的要求。方法如下:
选择主菜单“File ”→“Open ”,选择打开工程所在目录下的mux21a.vhd 或者在“Project Navigator ”窗口的Files 页面(如图3-26所示) 中双击打开mux21a.vhd 。选择主菜单
“Tools ”→“Netlist Viewer”→“RTL Viewer”项,可以打开mux21a 工程各层次的RTL 电路图(图3-30) 。双击图形中有关模块,或选择左侧各项,可逐层了解各层次的电路结构。
7. 编程配置、下载与硬件测试
为了能对此选择器进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上,编译后下载。当硬件测试完成后,还必须对配置芯片进行编程,完成FPGA 的最终开发。
(1)引脚锁定
为了能对选择器进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上。在此选择GW48-CP++实验台的电路模式No.5,如图1所示。即用键1控制信号s ;a 、b 分别接Clock5和Clock0;输出信号y 接扬声器Speaker 。根据上面确定的实验模式锁定mux21a 在目标芯片中的具体引脚。通过查阅2.3.3节的图2-46和2.3.4节的芯片引脚分配表(表2-14) 来确定。mux21a 工程的引脚锁定方案如表3-1所示。
打开mux21a 工程(如果刚打开Quartus II,应选择主菜单“File ”→“Open Preject”项,并点击工程文件mux21a) ,选择主菜单“Assignments ”→“Pin ”项,弹出的对话框如图3-31所示,在“Location ”处填写每个信号的引脚号,引脚锁定完毕如图3-32所示。最后点击存盘。关闭对话框。引脚锁定后,必须再编译一次(选择主菜单“Processing ”→“Start
Compilation) ”,将引脚锁定信息编译进下载文件中。如果图3-31中没有“Location ”列,则右键点击“Name Node”栏,在弹出右键菜单中选择“Customize Columns”项,如图3-33所示。然后按照图3-34和图3-35添加“Location ”列。
(2)选择编程器
用数据线连接GW48-CP++实验台与计算机,并打开实验台电源。在Quartus II中选择主菜单“Tool ”→“Programmer ”项,弹出图3-36所示的编程窗。如果窗口上方显示
“ByteBlasterMV[LPT1]”,则忽略以下步骤,否则如果显示“No Hardware”或其他方式,则点击编程窗上的“Hardware Setup”钮,即弹出“Hardware Setup”对话框,如图3-37所示;选择此框的“Hardware Settings”页,点击“Add Hardware”按钮,在弹出的窗口中选择ByteBlasterMV ,单击“Ok ”按钮,再双击此页中的选项“ByteBlasterMV ”,使“Currently Selected Hardware”右侧显示ByteBlasterMV[LPT1],如图3-38所示,最后单击“Close ”按钮,关闭对话框即可。这时应该在编程窗右上显示出编程方式:ByteBlasterMV[LPT1],如图3-39所示。
(3)选择编程模式及配置并进行编程
为了将编译产生的下载文件配置进FPGA 中进行测试,要将系统连接好,上电,然后在图3-39所示的编程窗中,在“Mode ”栏中有三种编程模式可以选择,JTAG 、Passive Serial 和Active Serial。为了直接对FPGA 进行配置,在编程窗的编程模式Mode 中选
“JTAG ”(默认) ,并选中打勾下载文件右侧的第一小方框,如图3-39所示。注意要仔细核对下载文件路径与文件名。如果此文件没有出现或有错,单击左侧“Add File”按钮,手动选择配置文件mux21a.sof 。如果出现多个mux21a.sof 文件,删除多余的其他路径下面的Sof 文件,确保mux21a.sof 是想要下载到实验台测试的电路。最后单击下载标符“Start ”按钮,即进入对目标器件FPGA 的配置下载操作。当“Progress ”显示出100%,以及在底部的处理栏中出现“Configuration Succesful”时,表示编程成功,如图3-40所示。单击下载标符“Start ”按钮后,“Progress ”一直为0%,并且在Quartus II主窗口下面的“Message ”窗口“System ”栏显示出错信息,如图3-41所示。则说明下载失败,一般是下面的一个或多个原因:①没有选择ByteBlasterMV[LPT1]编程器,②没有打开实验台电源,③数据线与电脑并口松动,④数据线与实验台连接不正确(数据线端口中间有凸起的一面向上) 没有连接好的缘故。
(4)硬件测试
下载后,按动实验台左下角的模式选择按钮,选实验电路模式“No.5”,在实验台右上角的时钟区,用短路帽设定Clock5和Clock0的频率分别为1024hz 和256hz 。注意:一个时钟上不能同时选择两个频率,即不能同时放两个短路帽。当用键1输入高电平时,扬声器发出256hz 低频声,当用键1输入低电平时,扬声器发出1024hz 高频声。思考:扬声器为什么会发出不同的声音,分析电路的功能和原理。