1. ISE的界面和设计流程
ISE的界面可以分为8个部分,包括标题栏、菜单栏、工具栏、源文件处理区、源文件管理区、编辑区、信息区以及状态栏。如图1所示。各部分的功能将在后面各节予以介绍。
图1 ISE的界面
使用ISE进行FPGA设计的流程大致可以分为3个步骤:
① 设计输入与仿真
设计输入(Design Entry)是指以HDL代码、原理图、波形图以及状态机的形式输入设计源文件,而设计仿真(Simulation)是指通过仿真工具对设计的整体模块或者局部模块进行仿真来检验设计的功能和性能。
② 用户约束条件、综合和实现
用户约束条件(User Constraints)的作用是对综合、实现过程进行控制,以满足速度、面积、引脚位置等需求。编辑约束条件对应着图2中的User Constraints项。
图2 用户约束条件、综合和实现
综合(Synthesize)是将HDL语言翻译成最基本的与、或、非门,RAM,触发器等基本逻辑单元的连接关系(网表),并根据约束条件优化所生成的门级逻辑连接,输出edf和edn等文件,供CPLD/FPGA厂商的软件进行实现。ISE自带的综合工具是XST,同时它也支持Synplify/Synplify Pro等第三方综合工具。综合对应着图2中的Synthesize-XST项。
实现(Implementation)是将设计的逻辑网表信息翻译成所选器件的底层模块与硬件原语,将设计映射到器件结构上,进行布局布线,达到在选定器件上实现设计的目的。需要注意的是,在进行实现步骤之前必须进行约束的编辑(引脚约束是必须定义的),否则实现可能会出错并且实现的结果是没有用途的。实现对应着图2中的Implement Design项。
③ 硬件编程
硬件编程(Programming)是指生成编程位流文件.bit并且将其下载到FPGA芯片内部的过程。硬件编程对应的是图11.2中的Generate Programming项,具体的硬件编程方法将在11.1.9节介绍。
下面几节通过一个实例来介绍ISE整个设计的流程。本实例要求设计一个十进制脉冲计数器,经过共阴极LED译码后直接送入LED显示0-9,它由三个模块组成,第一个模块是一个分频器,第二个模块是一个10进制的同步计数器,第三个模块设计一个BCD码输入、输出为共阴极LED的译码器。
2.使用ISE编写HDL模块
1、创建ISE工程。运行ISE,选择File菜单的New选项,弹出创建工程的对话框,如图11.3所示。
图3 创建工程对话框
本例中,新建的工程名为led_digital,选择好工程存放的目录,选择顶层文件为原理图(Schematic)。设置完成后点击下一步后出现如图4的设置器件参数对话框。
图4 器件参数设置对话框
本例中,选择Spartan6系列的XC6SLX25芯片,其余各选项均采用默认设置即可。设置完成后,点击下一步后,因为我们需要重新编写VHDL源代码,而不使用以前设计好的源代码,故单击下一步,下一步,单击完成,工程创建完毕。此时在源文件处理区会显示创建的工程和所选择的器件,如图5所示。
图5 源文件处理区中的工程信息
2、HDL代码的编写
在Sources in Project列表下的xc6slx25-2fgg484项上单击鼠标右键,弹出如图6所示的菜单,其中New Source选项用于新建源代码,Add Source选项用于添加现有代码,Add Copy of Source选项用于将某个源代码拷贝到工程路径下并且添加到工程中,Remove选项用于将一个源代码从工程中移除。
图6 弹出的菜单
选择New Source选项,弹出如图7所示的对话框。在Filename中输入counter10.vhd,选择好存放目录后,点击Next按钮进入端口定义对话框,如图8所示。在Entity Name和Architecture Name中分别输入模块的实体名称和结构名称。端口的定义是可选的,它可以在此处直接填写,也完全可以在创建VHDL模块文件时,在实体部分再书写,这两种方法本质上没有什么区别。
图7 New Source对话框
图8 端口定义对话框
本例在VHDL模块中再书写端口部分,因此直接点击Next进入下一步,再单击Finish按钮完成创建,ISE就会自动创建一个VHDL模块的程序文件counter10.vhd,并且在文本编辑框中打开,如图11.9所示。
图9 ISE自动创建的VHDL模块
从图9中可以看出,ISE自动生成的VHDL模块框架已经包括了库申明、实体和结构体的框架,用户只需在实体和结构体中填入相应内容即可。
3.使用ISE编写测试平台
为了测试所设计的模块是否符合预定义的要求,需要编写测试平台对其功能和性能进行测试。ISE提供了使用HDL语言编写的测试平台。
此小节我们专门会花一章节来介绍仿真文件的编写.
4.使用ISE编写顶层模块
完成各个模块的代码编写以及仿真测试后,但是要实现本例(数码管显示0-9)的功能,还需要编写一个顶层模块将计数器模块、led译码器模块和分频器模块组合起来。编写顶层模块也有两种方法:HDL实现和原理图实现。由于原理图编辑法比较直观,因此本例只介绍这种方法。
1)创建模块的符号。如图2所示,在Source in Project窗口中,单击选中counter10- behavioral,再在Processes for Source窗口中选中Design Utilities下的Create Schematic Symbol项,单击鼠标右键选择Run。如果原理图创建成功,那么Create Schematic Symbol项前就会出现一个绿色的小勾。同样的方法创建led模块和分频器的原理图符号。
2)打开如图7所示的New Source对话框,在代码类型中选择Schematic项,在File Name中输入led_digital,点击确认后ISE会自动启动Xinlinx的原理图编辑工具,其主要界面如图10所示。
图10原理图绘制的主要界面
3)在原理图编辑工具的主界面左面的工作区中选中Symbols选项,在其中的Categories列表中选中代表本工程的路径的项,此时在下面的Symbols列表中就会出现刚才所创建的三个模块的符号。如图11所示。
图11 Symbols选项中的Categories列表
4)选中Symbols列表中的counter10,再在编辑区内单击左键,就创建了这个模型的实例。用上述方法再创建led模块和分频器模块的实例。如图12所示。
图12创建的模块实例
5)设置I/O管脚
单击绘图工具栏的按钮或者选择菜单项Add下的I/O Marker,然后在每个端口上单击即可。它会自动给每个I/O端口标记生成一个名称,修改名称的方法是在I/O端口标记上单击鼠标右键,选择Rename Port,将名称修改为原理图符号上相应的输入输出名称。添加管脚后的原理图如图13所示。
图13添加管脚后的原理图
6)添加连线
单击绘图工具栏中的按钮或者选择菜单栏Add下的Wire项后,鼠标移动到原理图可画线区域时,鼠标符号自动变为“+”形状,点击开始连线的器件管脚,然后点击终点连线的管脚,即可将这两个管脚相连,连线完成后,点击鼠标右键结束操作。
7)绘制总线
在原理图绘制中绘制总线的方法与其他原理图工具相比略有区别。它并没有专门的总线绘制命令,绘制总线仍采用绘制连线命令Add Wire,仅仅利用网线命名区分总线与普通连线。总线名称的命名格式为BusName(X:Y),其中BusName是总线名称,()是总线表示符号,X是MSB,Y是LSB。
下面利用绘制总线的方法将counter10模块和led模块连接起来。单击绘图工具栏中的按钮,在原理图上方绘制一条线段,再点击按钮,在网线名称栏输入dataout(3:0),然后在网线的右端口添加总线名称,总线名称一旦加入,就会发现网线变粗,表示由普通网线变成了总线,如图14所示。
图14绘制的总线
然后单击按钮,在总线上添加4个总线分支,总线分支表示总线和单根信号线之间的连接转换,适当旋转总线分支的方向,使总线分支的三角形连接在总线上,如图15所示。
图15添加的总线分支
单击绘图工具栏中的按钮,绘制连线连接总线分支与单根信号线,并将总线连接到counter10模块的输出端上。最后为汇入总线的信号线添加网线名称,添加的网线名称为“BusName(i)”,其中“BusName”为总线名称,“i”为总线MSB与LSB之间的一个阿拉伯数字,表示信号线标号。具体操作方法是:单击绘图工具栏中的按钮,在网线名称栏输入dataout(0),当鼠标移动到原理图上时,发现鼠标指针处已经有了“dataout(0)”的网线名称,在所需添加网线名称的网线左端单击鼠标左键,即可为该网线添加名称。如果单击网线名称栏旁边的按钮,网线名称序号自动加1或减1。用相同的方法依次为其它网线添加名称。
至此,已将顶层模块的原理图绘制完毕,如图16所示。
图16 绘制完成的顶层原理图
8)检查错误
原理图绘制完成后还必须检查错误,原理图检错可以在绘图工具中完成,也可以在源文件管理区选中原理图,双击源文件处理区中Design Utilities下的Check Design Rules项完成。在绘图工具中检查错误比较直观,具体操作是单击绘图工具栏中的按钮,会自动检测当前原理图的连接逻辑,如果正确,会出现如图17所示的情形,如果原理图有错,将罗列所有的错误,用户可根据这些错误信息迅速定位错位位置。
图17原理图检查对话框
顶层模块编写完成后,和其他模块一样,也需要编写测试平台对其进行测试.
5. 使用ISE编写约束文件
完成顶层模块的实现与仿真正确后,还需要编写用户约束文件,其中引脚约束是必不可少的,它将模块的端口和FPGA的管脚对应起来。
ISE中有2种工具可以编辑约束文件,即Implementation Constraints file、PlanAhead。其中Implementation Constraints Editor是示使用ISE的文本编辑器编辑约束文件,PlanAhead还支持引脚和面积的约束条件编辑,Text Editor表示使用ISE的文本编辑器编辑约束文件。下面我们将分别介绍这两种方法。
① 使用Implementation Constraints file的方法来进行管脚锁定。具体操作步骤是:
1)选择图7中的Implementation Constraints file,文件命名为led_digital,此文件名的后缀为.ucf
2)在led_digital.ucf文件里编写约束文件。
② 使用PlanAhead的方法来进行管脚锁定。具体操作步
1)选择图1中的User Constraints,并展开该选项。
2)双击I/O Pin Planing(PlanAhead)-Post-Synthesis。打开PlanAhead界面,如图18所示。在I/O Ports中进行引脚约束,如图19所示。需要注意的是,引脚需要与所用到实验箱上的引脚相匹配。
图18 PlanAhead用户界面
图19 PlanAhead编辑引脚约束
3)对应的引脚配置好之后保存退出,我们可在源文件管理区域看到名为led_digital.ucf的文件,如图20所示。至此,引脚分配完毕。
图20 引脚约束文件.ucf
6.设计的综合、实现和bit文件生成
完成设计的输入和仿真并且编写了约束文件后,就可以对设计进行综合和实现了。综合必须在实现之前进行,综合设计的方法是在源代码管理区中选中顶层模块文件,再双击Processes for Source窗口中选中的Synthesize-XST项,ISE会自动启动综合工具对设计进行综合,综合过程中的信息会在信息窗口中输出。综合可能有3中结果:如果综合完全正确,Synthesize-XST项的前面就会出现一个对钩;如果有警告,则Synthesize-XST项前就会出现一个感叹号;如果有错误,则Synthesize-XST项前就会出现一个红色的叉号。综合成功后可以查看综合结果的报告,方法是运行Synthesize-XST下的View Synthesis Report项。
综合后的步骤是实现,双击源代码处理区中的Implement Design项就可以进行实现过程,实现主要分为3个步骤:翻译逻辑网表(Translate)、映射到器件单元(Map)和布线布局(Place & Rout)。
需要注意的是,一个设计在综合或者实现过程中常会出现一些警告。一般来说,警告不是致命的错误,但是却可能带来一些无法预料的问题,所以在设计时碰到警告,还是应该尽可能去分析其原因并且去除之。
7 .使用iMPACT配置FPGA/CPLD
iMPACT是ISE集成的配置工具,用于生成PROM格式的配置文件、向FPGA/ CPLD/PROM下载配置文件、回读和验证配置的数据是否正确以及调试配置过程出现的问题。
iMPACT支持4中配置方式:边界扫描(Boundary-Scan)模式、从串(Slave Serial)模式、SelectMap模式和Desktop配置模式,其中边界扫描模式标准统一,设备简单,可以通过JTAG口配置FPGA/CPLD/PROM等多种器件,本节将以它为例来说明如何使用iMPACT配置FPGA/CPLD/PROM。
1、下载设计到FPGA芯片
本例使用的芯片信号为XC6SLX25,使用边界扫描模式,具体步骤是:
1)在源文件管理区选中顶层模块文件led_digital.bit,选中源文件处理区中的Generate Programming File项,双击生成 led_digital.bit 文件,供下载使用。如下图11.24所示已经生成 bit 文件。
图21 生成bit文件
2)启动iMPACT。
首先选择Configure Target Device,并展开。选择Manage Configuration Project(iMPACT),并双击。在弹出的界面里,双击 IMPACT Flows 下的 Boundary Scan,如下图22所示。
图22 iMPACT界面
3)将电源适配器连接实验箱的电源接口,将 USB 线连接到实验箱的 USB-JTAG 下载接口,确认连接正确后,用鼠标在图 22中空白右击,弹出添加器件选项,如图23。选择 Initialize Chain,单击,出现如下窗口,点击 OK。
图23 添加器件选项
4)等到适配器连接成功后,会提示如图24所示,询问是否继续加载bit文件,选择YES。添加该工程下的 led_digital.bit 文件,如下图25所示。选中 led_digital.bit 文件,然后打开,会弹出一个窗口,问是否需要将程序烧录到 Flash,这里不烧录,点击 No,如下图26所示。然后鼠标右击 Xilinx 器件,点击 Program 下载,弹出以下如图27所示窗口,为下载属性设置,此处选择默认设置,然后点击“OK”按纽。下载完成会看到提示,如28所示。
图24 适配成功 图25 加载bit文件
图26 加载PROM
图27 下载属性设置 图28下载成功