3.1 ISE的基本使用方法
使用ISE的设计流程主要包括创建工程、设计输入、设计编译、设计仿真、引脚分配、编程下载等。本节将针对ISE的各个过程进行详细介绍,通过对本节内容的学习,初学者可以掌握ISE的基本使用技巧。
3.1.1 新建工程
使用ISE设计FPGA,首先要新建一个工程。ISE集成开发环境提供了对整个工程的集成管理和开发,设计者可以在ISE环境中完成所有的FPGA设计环节。
【例3-1】创建工程。
(1)选择File→New Project命令,弹出New Project Wizard对话框,如图3-1所示。在Name输入框中输入工程名称,在Location输入框中指定工程位置,在Top-level source type下拉列表中指定顶层设计的类型,然后单击Next按钮。
图3-1 创建新工程
(2)在Project Settings界面中,选择要使用的FPGA器件的型号、综合工具、仿真工具以及所使用的硬件描述语言,单击Next按钮,如图3-2所示。
图3-2 工程设置
(3)可以在建立好ISE工程以后再建立设计文件,所以这里单击Next按钮,直到Project Summary界面出现,单击Finish按钮完成新建的工程,如图3-3所示。
图3-3 工程概要
3.1.2 新建HDL文件
建好工程后,设计者需要新建HDL(硬件描述语言)文件,HDL文件是设计FPGA的基础。目前最流行的HDL语言有VHDL和Verilog HDL。
ISE集成的HDL编辑器是HDL Editor,它有一个Language Templates语法设计辅助模板,提供了VHDL、Verilog HDL语言和UCF用户约束的语法说明及例子。
【例3-2】新建HDL文件。
(1)启动ISE,软件默认打开上次关闭的工程。选择File→New,在弹出的New对话框中选择Text File,单击OK按钮。
(2)接下来会打开HDL Editor编辑器,允许编写用户的HDL代码。
(3)输入用户代码后,选择File→Save,在弹出的对话框中输入文件名,选择要保存文件的类型,单击按钮。保存后的文件会以不同的颜色显示关键字。
(4)单击Language Templates按钮,打开语言辅助模板,如图3-4所示。
图3-4 语言辅助模板
(5)从左边的窗格选择模板的类型,右边窗格会显示模板的具体内容。
(6)在用户设计的HDL代码中,将光标定位到需要使用模板的位置,然后回到选择模板窗格,选择好需要使用的模板,单击use in file命令,将范例插入到用户的代码中,最后根据需要修改模板范例即可。
3.1.3 添加HDL文件
使用HDL语言进行设计的好处之一就是便于重用其他设计者的代码,所以可以在已有的工程中添加HDL代码。
【例3-3】添加HDL文件。
(1)如果只是添加文件,而不需要将文件复制到用户自己的工程中,单击Project→Add Source命令。
如果需要将添加的文件复制到用户自己的工程中,单击Project→Add Copy of Source命令。
(2)在弹出的Add Existing Sources对话框中选择需要添加的文件,单击打开命令,即可完成添加文件的操作。
3.1.4 新建原理图设计
以原理图方式设计工程具有直观清晰的特点,几乎所有的FPGA设计软件都提供原理图设计输入方法。ISE集成了原理图输入工具ECS(Engineering Capture System)。
设计者可以采用原理图方式来进行工程顶层设计,而底层设计则采用HDL代码。这样的设计结构清晰,便于工程的设计和维护。
【例3-4】新建原理图。
(1)启动ISE,默认会打开上次关闭的工程,选择File→New,在弹出的New对话框中选择Schematic,如图3-5所示,单击OK按钮。
图3-5 文件类型
(2)接下来会出现一个空白的原理图输入界面。在ISE中,该界面默认嵌入在ISE集成环境中,为了获得更大的编辑空间,可以将窗口悬浮,以便更加方便地编辑原理图。右击窗口下侧文件名,单击Float命令,可以将原理图编辑窗口悬浮,如图3-6所示。
图3-6 原理图编辑窗口
3.1.5 在原理图中调用模块
在ISE中提供了很多模块供设计者使用,这些模块都是经过验证的、功能正确的设计,设计者调用这些模块可以大大加快设计进程。同时,设计者还可以自己设计具有特定功能的模块,以便在后续的设计中使用。
【例3-5】在原理图中调用模块。
(1)在原理图输入窗口左边的窗格选择Symbols选项卡,如图3-7所示。
图3-7 Symbols选项卡
(2)在Categories窗格中选择模块所属的类型,例如选择Arithmetic算术类型模块。
(3)在Symbols窗格中选择需要的模块,例如选择add4,将鼠标指针移动到原理图编辑窗口,会看到出现一个4位的加法器。
(4)将模块移动到合适的位置,单击鼠标左键,放置模块,如图3-8所示。
图3-8 模块放置
3.1.6 编辑原理图
ISE的原理图输入工具提供了许多实用的技巧,方便设计者快速编辑原理图,包括自动连线、快速添加端口等。
【例3-6】编辑原理图。
(1)首先在原理图中添加设计模块,并将模块放置到适当的位置。
(2)单击绘图工具栏中的按钮,出现十字指针,移动十字指针连接原理图中的信号端口。
(3)单击按钮,在窗口左边Options选项卡下,Name输入框中输入网络名称,如图3-9所示。然后单击需要命名的网络,该网络会被命名为指定的名称。
图3-9 原理图编辑窗口
(4)完成设计后,需要添加I/O端口引脚。单击按钮,在Options选项卡中,指定I/O类型,然后在原理图中需要添加引脚的端口上,按住鼠标左键拖出一个框,该框内的信号端口会自动添加I/O引脚,如图3-10所示。
图3-10 添加I/O引脚
(5)完成设计后,可以将设计生成用户器件,以便将来调用。在资源管理窗口中选择需要生成器件的文件,这里选择flash,在Process:flash窗格中打开Design Utilities,双击Create Schematic Symbol选项生成相应的用户模块,如图3-11所示。
图3-11 生成用户模块
(6)在原理图设计窗口的左边窗格,选择Symbols选项卡,在Categories窗格中选择用户工程目录,然后选择用户模块,如图3-12所示。
图3-12 选择用户模块
3.1.7 用Constraints Editor设置约束
ISE提供的Constraints Editor工具可以简单地进行时钟周期、输入延迟、端口和分组等约束设置,并将约束结果自动保存到UCF文件中。设计者可以通过修改生成的UCF文件完成约束设置,而不需要特别研究UCF文件的语法。
【例3-7】使用Constraints Editor设置时钟周期约束。
(1)在ISE的资源管理窗口中,选择需要添加约束的顶层文件,在Processes窗口中,展开User Constraints,双击Create Timing Constraints选项,如图3-13所示。
图3-13 创建时序约束
(2)打开如图3-14所示的界面,首先设置系统时钟周期约束。
图3-14 Constraints Editor界面
(3)在Constraints Editor界面的左边窗格打开Timing Constraints,单击【Clock Domains】,设置时钟周期的界面出现。双击该界面右侧Period标签下边的空白处,会弹出Clock Period对话框。
(4)如图3-15所示,设置时钟周期的图形界面能够帮助设计者方便地进行约束设置,其中最上方是图形说明,说明各个约束的含义。这里设置时钟周期为10ns,即100MHz,占空比为1:1。
图3-15 Clock Period界面
3.1.8 使用XST进行综合
Xilinx公司在ISE中提供了自带的综合工具XST(Xilinx Synthesis Technology),XST相对于专业的综合工具而言并没有多大优势,但是对于Xilinx公司的器件而言,使用XST进行综合还是相当方便的,因为可以从ISE中直接调用XST。
【例3-8】使用XST进行综合。
(1)在ISE的资源管理窗口中,选择需要综合的顶层文件。
(2)在Processes窗口中,右击Synthesize-XST,在弹出的菜单中选择Process Properties,如图3-16所示。
图3-16 选择Synthesize-XST项
(3)打开Process Properties对话框后,可以看到在Category窗格中有3个选项:Synthesis Options、HDL Options和Xilinx Specific Options。选择Synthesis Options,可以看到如图3-17所示的界面,在这里主要需要设置Optimization Goal和Optimization Effort这两个选项。其中,Optimization Goal用于设置优化目标,可以选择是以速度为优化目标,还是以面积为优化目标;Optimization Effort用于设置优化难度,即综合器工作的难度。如果设计者对时序或者面积约束要求较高,可以选择优化难度为High。
图3-17 Process Properties对话框
(4)设计者还可以对HDL Options选项进行设置,选择Category窗格中的HDL Options选项,出现如图3-18所示的界面。
图3-18 HDL Options选项设置界面
(5)在HDL Options选项中,设计者需要设置与HDL语言编写规则和编译方式相关的属性。其中以下常用属性需要设计者注意。
FSM Encoding Algorithm:表示状态机的编码方式,包括One-Hot编码、格雷码等。设计者可以根据设计要求选择,对于初学者,可以选择Auto选项让ISE自动选择编码方式。
RAM Style表示RAM的类型,可以选择使用Block RAM或者Distribute RAM。如果设计中使用的RAM对时序要求不高,而且RAM容量也比较小,可以选择Distribute RAM选项,以节约FPGA中的BlockRAM资源,反之选择Block RAM。
Resource Sharing:表示是否允许XST综合工具复用一些逻辑模块。因为在设计中有的模块是重复的,如果能够按照时分复用的方式进行综合,可以大大降低资源的消耗。
(6)Category窗格中的最后一个选项用于设置Xilinx专用参数。
(7)双击Process窗格中的Synthesize-XST选项,开始执行综合操作。完成后,会在Transcript窗口中显示报告信息,设计者可以根据这些信息对设计进行分析。如图3-19所示,在完成综合以后,展开Synthesize-XST选项,可以对综合结果进行分析。
图3-19 Synthesize-XST
View RTL Schematic:双击该选项,可以查看RTL级的综合结果,该结果应该与设计相同。
View Technology Schematic:双击该选项,可以看到和器件相关的综合结果,该结果表示了设计被映射到FPGA中的结果。
Generate Post-Synthesis Simulation Model:双击该选项,可以生成综合后仿真的HDL文件。在该HDL文件中包含器件的延迟信息,可以调用这个HDL文件来进行后仿真,以验证时序的正确性。
以查看RTL综合结果为例,双击View RTL Schematic,ISE会打开RTL查看窗口,在该窗口中可以看到综合后生成的顶层接口,如图3-20所示。
图3-20 RTL综合结果
3.1.9 设计实现
完成综合以后,需要将设计映射到FPGA中,对应于ISE中的操作就是Implement Design。这一步完成后会生成用于生成下载文件的NCD文件。
在ISE中设计实现分为3步,分别是Translate、Map和Place & Route。
(1)Translate:读取综合生成EDIF和NGC格式的网表文件,生成Xilinx的NGD格式文件。NGD文件是用逻辑元件表示的网表,包括触发器、逻辑门和RAM等逻辑元件。
(2)Map:输入文件是Translate生成的NGD格式的网表文件,输出为NCD(Native Circuit Description)格式的文件。Map的功能是将NGD文件中的逻辑元件映射成Xilinx FPGA中的元件,例如Logic Cell、I/O cells或者是Block RAM等。
(3)Place & Route:接收Map生成的NCD文件,将各个元件放置到FPGA中适当的位置,并通过布线器连接各个元件,完成在FPGA中的设计实现。Place & Route输出的NCD文件用于生成下载文件。
【例3-9】设计的实现。
(1)在ISE资源管理窗口的Processes窗格中右击Implement Design,弹出Process Properties对话框。
(2)单击Process Properties对话框中的Translate Properties选项,设置Translate属性,如图3-21所示。如果没有出现图3-21所示的界面,则单击Property display level旁的下拉菜单,选择Advanced。需要强调的是,如果设计中调用了其他设计,或者需要使用其他IP的网表文件进行布局布线,则需要在Macro Search Path项中指定存放这些网表文件的地址。
图3-21 设置Translate属性
(3)依次设置好其他的参数,单击OK按钮。
(4)在Processes窗格中双击Implement Design,即可完成Translate、Map和Place & Route的全部操作。设计者也可以单独执行各个步骤。
3.1.10 生成下载文件
Xilinx的下载文件有两种主要的类型:后缀名为bit的文件,该类文件可直接下载到FPGA;后缀名为mcs的文件,该类文件可下载到PROM中,上电后PROM中的内容会配置FPGA。
【例3-10】生成下载文件。
(1)生成BIT文件的方法很简单,在ISE资源管理器窗口的Processes窗格中双击Generate Programming File,就会在ISE工程目录下生成和顶层设计同名的BIT文件。
(2)要生成MCS文件,可在Processes窗格中展开Configure Target Device,双击Generate Target PROM/ACE File,如图3-22所示。
图3-22 Generate Target PROM/ACE File选项
(3)在弹出的ISE iMPACT窗口中双击Create PROM File,弹出PROM File Formatter对话框,选择目标器件为Xilinx Flash/PROM,在指定PROM器件对话框中,选择PROM类型和型号。PROM文件类型选择MCS,指定PROM文件的文件名和存储位置,如图3-23所示。如果PROM器件容量不够大,可以选择Enable Compression。如果压缩后文件还不能放到PROM器件中,就需要考虑更换PROM器件了。设置完成后单击OK按钮。
图3-23 PROM File Formatter对话框
(4)提示添加文件,单击OK按钮,会提示添加生成MCS文件的BIT文件,选中文件后打开。
(5)添加好BIT文件后,会出现图3-24所示的界面。从图中可以看到PROM器件的使用率以及关联的BIT文件。在iMPACT Processes窗格中双击Generate File生成MCS文件。文件生成成功后,会提示Generate Succeeded。
图3-24 PROM File Formatter对话框
3.1.11 下载FPGA
生成下载文件后,需要下载到FPGA,以便验证其功能的正确性。下载到FPGA有两种方式:一种是直接通过JTAG接口将BIT文件下载到FPGA,下载完成后FPGA就开始执行BIT文件定义的功能;另一种是将MCS文件下载到PROM,这样每次上电以后,PROM就会配置FPGA。
【例3-11】配置FPGA。
(1)将JTAG下载线连接到电路板上,打开电源。
(2)在ISE Project Navigator对话框的Processes窗格中展开Configure Target Device选项,选择Manage Configuration Project选项,如图3-25所示。
图3-25 选择Manage Configuration Project选项
(3)弹出如图3-26所示的ISE iMPACT对话框,右击Boundary Scan选项,选择Initialize Chain。
图3-26 右击Boundary Scan选项
(4)接下来ISE会自动扫描连接在JTAG链上的器件,根据设计者电路板设计的不同,会出现如图3-27所示的界面。ISE会要求设计者为连接在JTAG链上的器件指定配置文件,如果没有配置文件,可以单击Bypass按钮,跳到下一个器件。这里选择的是型号为led_test的BIT文件,现在已经准备好配置FPGA了。
图3-27 Initialize Chain