FPGA/ASIC技术
本节旨在通过给定的工程实例——“按键开关控制LED”来熟悉Xilinx ISE软件的基本操作、设计、编译及仿真流程。同时使用基于Xilinx FPGA的开发板将该实例进行下载、验证及调试,完成工程设计的硬件实现,熟悉Xilinx FPGA开发板的使用及配置方式。
在本训练中设计软件采用ISE 7.1i,实现功能是利用4个按键开关来控制8个LED灯。具体的显示方案是由4个按键开关控制8个LED灯,根据按键开关按下的不同,会有不同的灯点亮。
在本训练中,将主要讲解下面一些知识点。
·Xilinx ISE工程创建及属性设置。
·Xilinx ISE源文件设计输入方式。
·Xilinx ISE综合。
·Xilinx ISE行为仿真。
·Xilinx ISE约束设计。
·Xilinx ISE布局布线。
·Xilinx ISE时序仿真。
·Xilinx ISE硬件下载。
通过这些知识点,按照下面提供的训练流程,读者可以迅速地掌握使用Xilinx ISE软件进行FPGA开发的方法。
通过详细的流程讲解,读者应达到下面的目标。
·熟悉Xilinx ISE软件的操作环境。
·熟悉Xilinx ISE软件开发FPGA的基本流程。
·可独立使用Xilinx ISE软件开发新工程。
2.6.2 平台简介
本实例基于红色飓风II代Xilinx板,此开发板集成了Xilinx的Spartan3 40万门FPGA及相关的丰富外设资源。
此开发板更加详细的信息、扩展附件及使用方法,可以到红色飓风的官方网站:获取更多的信息。
本实例将通过一个简单的实例在这个开发板上对Xilinx的FPGA设计流程做一个全面的介绍,依照此例程的流程便可在该开发板上运行一个FPGA程序。
如图2.65所示为此开发板的一个外观图。
图2.65 红色飓风II代Xilinx板外观图
2.6.3 实例详解
本节同样将使用图解的方式将整个流程一步一步展现给读者,使读者能够轻松掌握ISE的开发流程。
(1)启动Project Navigator。
安装好ISE7.1套件后,可以按照以下的方法打开Project Navigator。
① 在桌面上面双击Xilinx ISE 7.1i的快捷方式图标,如图2.66左图所示。
② 选择“开始”→“所有程序”→“Xilinx ISE 7.1i”→“Project Navigator”,打开Project Navigator,如图2.66右图所示。
打开后的Project Navigator界面如图2.67所示。可以看到,Project Navigator的界面是一个标准的Windows软件视窗。分别包括标题栏、菜单栏、工具栏、工程浏览器、进度浏览器、主工作区、信息栏、状态栏。
图2.66 ISE的启动
图2.67 Project Navigator主界面
(2)创建一个新的工程。
单击“File”→“New Project…”,弹出如图2.68所示对话框。
图2.68 新建工程对话框
在这里填写将要创建的工程的名称(Project Name)、路径(Project Location)和工程的顶层模块类型(Top-Level Module Type)。 顶层模块类型我们主要使用前面两种:HDL(Hardware Design Language)硬件设计语言模式和Schematic原理图模式,这里选择HDL。
(3)设置工程属性。
填写好后,单击“Next”按钮,在如图2.69所示的对话框中设置工程的属性。
图2.69 工程属性对话框
在这个对话框可设置的属性定义,如表2.4所示。
表2.4 属性定义Device Family
使用的FPGA的种类 Device 使用的FPGA的型号 Package 使用的FPGA的封装 Speed Grade 使用的FPGA的速度级别 Top-Level Module Type 顶层模块类型 Synthesis Tool 综合工具 Simulator 仿真工具 Generated Simulation Language 仿真模块语言类型
本实例选用的都是ISE自己带的综合工具和仿真工具,这里也可以选择第三方的应用软件,如图2.70和图2.71所示。
图2.70 工程属性对话框选择第三方综合工具
图2.71 工程属性对话框选择第三方仿真工具
ModelSim和Synplify Pro是比较通用的第三方仿真和综合软件。在这里如果我们选择了使用第三方的软件进行综合及仿真的话,在后面执行相应步骤的时候ISE Navigator就会自动寻找并打开相应的软件。
(4)添加设计文件。
填写好FPGA型号和使用的综合,仿真软件后,单击“Next”按钮打开如图2.72所示的创建源文件对话框。
图2.72 创建源文件对话框
在这个对话框里面,允许用户为即将建立的工程创建一个新的源文件,并且这里只可以创建一个源文件。其他的要在工程建立以后创建,也可以在创建工程以后再建立所有的源文件。直接单击“Next”按钮,进入如图2.73所示的添加源文件对话框。
在这个对话框里面为即将建立的工程添加已经存在的源文件。如果没有现成的源文件,直接单击“Next”按钮,完成新工程的创建。
(5)完成工程创建。
在如图2.74所示的新工程信息对话框中,列出了新建工程的相关参数及属性。
在这个对话框里面显示将要创建的工程的全部信息,确认无误后单击“Finish”按钮,Project Navigator将自动创建一个名为sw_led的工程。如图2.75所示是新工程的界面。
图2.73 添加源文件对话框
图2.74 工程信息对话框
图2.75 工程创建后的界面
创建好工程以后就要为工程添加源文件了,具体方法如下。
为工程添加源文件有两种方式,可以双击“Process View”对话框里面的“Create New Source”,也可以在“Module View”对话框里面的“xc3s400-4pq208”图标上面单击鼠标右键,选择“New Source…”选项,如图2.76所示。
图2.76 添加源文件的两种方式
选择“New Source”,弹出如图2.77所示的新建源文件对话框。
图2.77 新建资源对话框
在右面的“File Name”栏里面填写要生成的源文件的名字,在“Location”栏填写源文件保存的路径,一般位于工程文件夹里面,没有特殊需要不必更改。另外一定要选择“Add to project”选项,然后在左边的一排图标里面选择源文件的类型后单击“Next”按钮,进入如图2.78所示的Verilog源定义对话框。
可以在上面的对话框里面输入源文件的模块名称和管脚定义,也可以先不输入,后面写程序的时候自己输入。单击“Next”按钮,完成源文件的创建,在如图2.79所示的对话框中列出了新建源文件的一些信息。
确认信息无误后,单击“Finish”按钮,ISE将生成名为sw_led.v的源文件,如图2.80所示。
图2.78 新建Verilog文件设置对话框
图2.79 新建源文件信息对话框
图2.80 添加新资源后工程界面
用户可以在工作区中开始进行设计的输入,也可参考实例代码中的例程,将代码直接复制到新建的Verilog文件下。输入好程序以后,保存源文件,完成设计的输入。
(1)综合。
在“Process View”对话框里面双击“Synthesize – XST”,开始进行工程的综合,如图2.81所示。
综合主要检查源文件程序里面的语法错误(Check Syntax),双击“View Synthesis Report”可以观察综合的结果报告,如图2.82所示。
图2.82 综合报告
如果在这步发现源程序的设计语言有语法毛病,就会弹出Error警告。这样就可以根据报错的位置,在源程序里面查找错误位置,修改好以后重新进行综合,直至无错误为止。
(2)综合后仿真。
这里的仿真是综合后的仿真,也可以称为功能仿真。仿真时并不考虑工程的约束条件及器件的资源使用状况,因此不会产生仿真延迟。这里使用的是ISE自带的仿真工具进行综合后仿真。下面是仿真的步骤。
① 产生仿真文件。
如图2.76的方式,在“New Source”对话框里面选择创建Test Bench Wavefrom文件,如图2.83所示。
单击“Next”按钮,在如图2.84所示对话框中为Test Bench指定源文件。如图所示在源文件对话框中只有一个文件,这是因为我们只为工程添加了一个设计文件。如果我们为工程添加了几个设计文件,在这个对话框中,将出现多个源文件。此时用户可以选择需要进行仿真的源文件即可。
图2.83 新建Test Bench对话框
在本训练中,将要进行仿真的源文件是sw_led,如图2.84所示。单击“Next”按钮完成仿真文件的产生,如图2.85所示。
图2.84 为Test Bench指定源文件
图2.85 Test Bench信息对话框
单击“完成”按钮,ISE将创建名为test.tbw的仿真文件,同时弹出如图2.86所示的对话框。在该对话框中,用户可以对仿真的时间参数进行设置。
在这个对话框中,包括时钟信息、时钟时间信息、全局信号、仿真时间等多个参数都可以进行设置。按照仿真需求修改好时间参数以后,单击“OK”按钮就能在ISE的工作区里面看见新建的波形文件了,如图2.87所示。
在波形文件里面,clk是时钟信号,在前面的时间参数设计里面已经设置好了。用户若需要对时钟进行更改,可选择执行“Test Bench”→“Rescale Timing…”命令,弹出修改时间参数的对话框,如图2.88所示。
图2.86 仿真时间参数设置对话框
图2.87 时钟波形
图2.88 修改时间参数对话框
同样也可以执行“Test Bench”→“Set End of Test Bench…”,在弹出的对话框里面修改仿真波形的截止时间,如图2.89所示。
图2.89 截止时间设置对话框
单击“OK”按钮就会发现仿真波形的时间长度由1000ns变成了2000ns。
② 添加仿真激励。
要进行仿真,还需要为仿真添加激励。这里可以通过点击波形图中的蓝色方块来设置输入波形电平的高低,如图2.90所示。
图2.90 设置输入电平
设置好以后一定不要忘记保存波形文件。保存以后就会在工程浏览器的当前工程的子目录下看见刚生成测试的文件,如图2.91所示。
图2.91 保存仿真文件到工程
③ 仿真。
首先在工程浏览器的【Module View】里面选择“test(test.tbw)”。
图2.92 由波形文件生成测试代码
然后在进度浏览器的“Process View”对话框里面双击“View Generated Test Bench As HDL”图标,就能看见ISE根据刚才设置的波形文件自动生成的测试文件,如图2.93所示。
图2.93 生成的测试代码
在进度浏览器中双击【Generate Expected Simulation Result】,弹出两个对话框,都选择是(Y),将看见生成的预期输出波形,如图2.94所示。
图2.94 预期仿真波形
在进度浏览器中双击“Add Test Bench to Project”,将测试波形添加到工程里面。将会看到工程浏览器中test文件的图标由变成。
如图2.95所示,在进度浏览器中双击“Simulate Behavioral Model”将对工程进行行为仿真,仿真结果如图2.96所示。
图2.95 运行功能仿真
图2.96 功能仿真结果
从图中可以看出功能仿真结果符合设计要求,可以继续进行下面的设计。如果此处仿真发现设计功能不符合要求,则要对原代码进行修改,直到仿真结果符合设计要求为止。4.约束设计在源程序输入完成以后,就可以设置约束,规划布局布线了。
约束有很多种:时序约束(Timing Constrains)、管脚约束(Assign Package Pins)以及面积约束(Area Const- raints)等。
如图2.97所示是ISE进度浏览器中包含的用户约束的选项。
图2.97 设置约束
(1)时序约束。
时需约束主要约束设计的时序和时钟频率,双击图2.97中的“Create Timing Constraints”图标,ISE将打开约束编辑器,如图2.98所示。
图2.98 时序约束界面
在约束编辑器里面有4个复选页,定义如表2.5所示。
表2.5 属性定义属 性
定 义Global 用于附加全局约束,包括周期约束,输入延迟约束和输出延迟约束Ports 附加端口约束,可以对每一个端口进行单独设置,包括物理位置、输入延迟和输出延迟。同时,也可以设置分组,进行分组约束Advanced 附加分组约束(TNM/TNM_NET/TIMEGRP)和时序约束(FROM_TO/TIG O/OFFSET)等Misc 附加专用约束,包括电压、初始值等 注意:附加约束的原则是先加全局约束后加分组约束。 在本实例中只做简单的时钟约束。在clk的period中输入:20ns HIGH 50%,即设置时钟的周期和占空比。设置后保存,完成时序约束。
(2)管脚约束。
管脚约束即约束工程设计源文件与选定器件对应的输入/输出管脚属性。双击图2.97中的“Assign Package Pins”图标,ISE将打开PACE工具,如图2.99所示。 通过图2.99的“Design Object List”对话框里面的Loc列,可以为设计添加输入/输出管脚,添加形式为“Pxxx”或者“pxxx”。其中P/p代表Pin,xxx是数值。
(3)面积约束。
面积约束目的在于规划FPGA里面的逻辑使用大小。双击图2.97中的“Create Area Constraints”图标,ISE同样打开PACE工具,面积约束和管脚约束用的是一个界面。在面积约束里面我们可以对设计使用的资源面积加以规划,控制使用资源在FPGA里面的位置。
这里只使用到管脚约束,按照按键和LED灯与FPGA的连接,输入管脚分配,然后保存分配。在保存选项中,选择“XST Optional”,如图2.100所示,关闭对话框,完成约束设计。
图2.99 管脚约束工具PACE
图2.100 保存管脚约束结果
设置好了各种约束以后就可以进行布局和布线了。双击进度浏览器中的“Implement Design”,开始进行布局布线实现。与综合相同,如果在“Implement Design”的右边出现绿色的对号,说明已经完成布局布线,没有发现错误,如图2.101所示。
图2.101 运行布局布线
如果实现过程中出现错误,在信息栏中根据错误的提示,修改相关的约束设计,再进行布局布线的实现,直至没有错误为止。
在工程浏览器中选择测试文件,双击进度浏览器中“Implement Design”下面的“Simulate Post-Place & Route Model”,对工程进行布局布线后仿真,仿真结果如图2.102所示。
图2.102 时序仿真结果
通过与行为仿真结果图2.96对比,可以发现,布局布线后仿真加入了布线的延迟,输出的结果相对于时钟有相应的延迟。在工作区里面单击鼠标右键,在弹出的菜单里面选择“Add Measure”选项,可以通过放大工作区和拖动时间测量游标,读取时间延迟,如图2.103所示。
由上图可以看出,尽管输出相对于时钟存在一定的延时,但输出结果是正确的,符合设计要求,可以进行下载和在线调试了。
图2.103 测量时间延迟
布局布线完成以后就可以将程序下载到开发板上进行调试。开发板提供两种下载方式:JTAG模式和PROM模式。区别在于JTAG模式是用于在线调试使用的,断电后不保留程序;而PROM模式则是将程序烧写在存储器里面,上电后自动加载。
(1)JTAG模式下载。
如图2.104所示,在进度浏览器中“Generate Programming File”下面可以看到有3个选项,分别是编程文件生成报告、生成编程文件和使用iMPACT配置器件。
在“Generate Programming File”图标上面单击右键,选择“Properties…”,弹出如图2.105所示的属性对话框,在其中可以设置下载文件的属性。
图2.104 生成下载文件
图2.105 “General Options”选项卡
在该对话框中有4个选项卡,可以对相应的下载参数进行设置。
“General Options”选项卡里面的“Create Bit File”选项生成用于JTAG模式下载的二进制下载文件。确定选择该项,如图2.105所示。
在“Startup Options”选项卡里面将“FPGA Start-Up Clock”后面的内容改为“JTAG Clock”,如图2.106所示,在这里要根据不同的下载模式正确地选择时钟。
在“Readback Options”选项卡里面将“Security”后面的内容置为“Enable Readback an Reconfiguration”,如图2.107所示,然后单击“OK”按钮,完成下载的属性设置。
图2.106 “Startup Options”选项卡
图2.107 “Readback Options”选项卡
如图2.108所示,双击进度浏览器里面的“Generate Programming File”图标,ISE将生成供 JTAG模式下载的bit文件。“Generate Programming File”左边的绿色对号说明已经成功生成了下载 文件。
图2.108 生成下载文件
双击“Generate Programming File”下面的“Configure Device(iMPACT)”图标,打开如图2.109所示的iMPACT工具。
图2.109 iMPACT工具
在如图2.109所示的对话框里面选择器件配置的模式,这里选择边界扫描模式“Boundary-Scan Mode”,单击“下一步”按钮,如图2.110所示。
图2.110 边界扫描模式选择对话框
选择自动加载边界扫描链路,单击完成。
由于开发板上面的JTAG和PROM下载是在一条链路上的,所以会弹出如图2.111所示的对话框,单击“确定”按钮就能看见ISE扫描到的开发板上面的下载链,如图2.112所示。图2.111 边界扫描检测结果对话框
图2.112 ISE扫描下载链结果
其中下面标有xcf02s的图标代表的是PROM,下面标有xc3s400的图标代表FPGA。
双击FPGA图标,在弹出的对话框里面选择刚才生成的二进制下载文件(后缀为.bit)。配置好以后右键单击FPGA图标,在弹出的菜单里面选择“Program…”选项,如图2.113所示。此时将会出现如图2.114所示的下载属性设置对话框。
图2.113 设置配置文件
图2.114 配置设置对话框 单击“OK”按钮就可以开始下载了。若下载成功将会有如图2.115所示的下载成功提示。
图2.115 JTAG下载成功
(2)PROM模式下载。
PROM模式下载是把程序存在一块存储器里面(开发板上面使用的是Xilinx公司的xcf02s)。当开发板上电的时候,FPGA就自动加载存储器里面的程序。下面是PROM模式下载的具体操作方法。 要进行PROM模式下载,首先要生成相应的二进制下载文件,双击进程浏览器中“Generate Programming File”下面的“Generate PROM, ACE, or JTAG File”图标,弹出如图2.116的对话框。
图2.116 生成PROM文件对话框
选择“PROM File”选项,单击“下一步”按钮,打开如图2.117所示的PROM文件配置对话框。
图2.117 PROM文件设置对话框
在该对话框中,选择生成一个Xilinx PROM,后缀选择MCS,文件格式选择FF(十六进制),在“PROM File Name”后面填写生成的PROM下载文件的名称,在“Location”后面填写PROM文件保存地址。配置后单击“Next”按钮,出现PROM器件配置对话框,如图2.118所示。 选择PROM的型号,要与开发板上面使用的对应。这里选择xcf02s,单击“Next”按钮。
图2.118 选择PROM型号
图2.119 为生成PROM文件添加二进制文件
在出现的如图2.119所示对话框中单击“Add File…”按钮,在弹出的对话框里面选择JTAG下载的时候使用的二进制文件(后缀为.bit),ISE将通过这个二进制文件生成PROM文件。图2.120 是否还要加载一个设计文件对话框 选择完一个二进制文件后,会弹出如图2.120所示的对话框,询问是否还要加载一个设计文件。单击“NO”按钮,完成PROM模式下载的配置。
图2.121 生成PROM文件
在出现的图2.121中单击“Finish”按钮,ISE就会自动为我们生成后缀为.MCS的十六进制PROM下载文件。生成成功后,将出现如图2.122所示的提示。
图2.122 PROM文件生成成功提示
生成了PROM的下载文件以后,再按照JTAG下载的方法,扫描下载链。将生成的.MCS文件加载到PROM图标中去,然后再在PROM图标上面点击右键,选择“Program…”选项,如图2.123所示。 如图2.124,在出现的下载属性配置对话框中选择相应的选项后,单击“OK”按钮就开始PROM的下载了(PROM下载相对比较慢,并且最好先擦除PROM里面的内容再下载)。成功下载会出现如图2.125所示的提示。
图2.123 下载PROM器件
图2.124 下载PROM器件设置对话框
图2.125 完成对PROM器件的烧写
需要注意的是,如果选用JTAG下载模式,则下载成功后,FPGA就可实现预想的功能。如果选用PROM下载模式,下载成功后,要重新上电后FPGA才能正常工作。
因为PROM直接方式是将文件下载到PROM器件中,并没有直接下载到FPGA里,要重新上电后由FPGA自动从PROM器件中加载配置文件,才能实现预想的功能。
当然用户也可以在如图2.124所示的属性配置中选择“Load FPGA”选项。这样PROM下载完成后,下载的逻辑将自动加载至FPGA内,而无需重新上电。
2.6.4 小结
上述步骤就是利用ISE进行的一个完整的FPGA设计流程。虽然例程实现的功能比较简单,但对于初学者来说,是一个不错的入门实例。
此实例的主要目的是让初学者对FPGA的设计有一个初步的了解,并熟悉ISE软件的使用,为今后的学习打下基础。
全部0条评论
快来发表一下你的评论吧 !