版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章开发软件与开发流程2.1开发软件简介
2.2一个简单的开发项目
2.3开发软件使用进阶
FPGA的设计开发流程一般包括设计输入、综合、功能仿真、实现(布局布线),时序仿真、生成配置文件和配置FPGA等步骤,其流程图如图2.1所示。本章首先用一个开发实例介绍一般的开发流程,然后介绍开发流程中各部分在整个开发流程中完成的功能和所起的作用。图2.1XilinxFPGA一般开发流程
2.1开发软件简介
2.1.1ISE开发软件简介
Xilinx公司有很多集成的开发软件,主要包括以下几部分:
ISE(IntegratedSoftwareEnvironment)软件是一个集成的开发环境,在这一环境中可以完成系统级CPLD和FPGA开发的全套流程,集成的功能包括设计输入、逻辑综合、仿真验证、布局布线以及FPGA配置等。
Xilinx公司还有一些辅助开发工具,如PlanAhead等,在不涉及PowerPC硬核和Microblaze软核的系统设计中,我们通常使用ISE就可以完成一般项目的开发。2.1.2ISE9.1i的安装
ISE软件可以运行在Windows2000、WindowsXP、WindowsVista和Linux(32位)操作系统上,在WindowsXP上的安装步骤如下:
(1)将ISE9.1DVD光盘放入计算机光驱中,安装光盘将自动启动安装界面(如图2.2所示)。如果安装光盘没有自动启动安装程序,用户可以进入安装光盘目录,用鼠标左键双击光驱根目录下的Setup.exe图标(见图2.3)启动安装过程。图2.2ISE安装启动界面图2.3ISE安装图标
(2)安装软件经过初始化操作之后进入安装界面,如图2.4所示,首先输入购买ISE软件时Xilinx公司提供的序列号,按照安装向导的提示,同意软件协议并点击一系列确认按钮之后,进入安装目录选择界面。图2.4输入序列号
(3)在图2.5上面的框中填入安装目录,默认情况下为C盘根目录。图2.5选择安装目录
(4)单击下一步选择安装的组件后,进入确认安装界面,如图2.6所示。图2.6确认安装界面
(5)单击图2.6中的Install按钮,开始ISE的安装过程。安装的过程中,安装界面显示了ISE的一些新特性,安装完成后,双击桌面的ISE9.1图标就可以打开ISE开发环境界面,如图2.7所示。图2.7ISE开发环境界面2.1.3ModelSim仿真软件简介
ModelSim是Mentor公司开发的一款功能强大的仿真软件,在通用的仿真软件中,仿真速度最快。ModelSim在设计、编译、仿真、测试和调试开发中,有一整套的工具可以使用,操作起来非常灵活。但它侧重于仿真,不能针对具体的器件编译,在链接到具体器件的仿真库文件后,可以对对应的器件进行布线后仿真。因此我们在使用ModelSim时,常将ModelSim作为ISE的第三方嵌入工具使用。
ModelSim软件的主界面如图2.8所示。图2.8ModelSim仿真界面 2.2一个简单的开发项目
基于FPGA的项目开发是一个比较复杂的过程,为了满足时序收敛,需要进行许多循环操作的步骤。这里我们简化这些步骤,以一个最简单的开发实验为例,逐步了解FPGA开发过程中需要熟悉的软件操作。之前没有接触过VHDL语言和FPGA开发的读者可以不必关心实验过程中涉及到的一些名词和代码,而只需在实验的过程中了解开发环境的相关操作。
最简单的开发实验
实验介绍:
本实验将完成图2.9所示的电路图。实验的过程中将完成MY_AND2和MY_OR2模块的VHDL描述程序,并用这两个模块完成顶层模块AND_OR的结构化描述。图2.9AND_OR电路图实验目标:
通过这个实验将学会以下几点:
编写简单门电路的RTL级描述程序;
创建简单电路的结构级VHDL描述程序;
用VHDL语言建立电路的层级描述;
熟悉ISE集成环境;
使用ISE集成环境的HDL编辑器;
熟悉ISE第三方集成的仿真工具ModelSimSE的使用;
熟悉一般项目开发的步骤。实验过程:
(1)创建一个新的工程,工程命名为“lab1”。
双击桌面的XilinxISE图标或者单击“开始→XilinxISE9.1i→ProjectNavigator”打开ISE开发环境。
在ISE开发环境中单击“File→NewProject”,如图2.10所示,弹出一个建立新工程的对话框,如图2.11所示。在ProjectLocation框中填写工程文件保存路径;在ProjectName框中,填写新建工程的名字“lab1”;在Top-LevelSourceType框中选择HDL。然后单击Next按钮。图2.10选择新建工程图2.11新建工程在弹出的器件属性选项卡(见图2.12)中设置参数。图2.12器件属性选项卡其中,Family表示FPGA器件属于Xilinx的哪一个产品系列;Device表示FPGA器件的器件类型;Package表示FPGA的封装类型;Speed表示FPGA的速度等级;SynthesisTool为工程所选的综合工具;Simulator为工程仿真所用的仿真工具;PreferredLanguage为工程源文件的语言类型。
单击Next和Finish按钮后,新的工程就创建好了。
(2)编写“MY_AND2”和“MY_OR2”的RTL级描述和“AND_OR”的结构级描述。
在ISE环境中选择菜单栏中的“Project→NewSource”,如图2.13所示。图2.13选择创建新的源文件在弹出的对话框中,选择“VHDLModule”,在Filename框中输入新建源文件的文件名“MY_AND2”,如图2.14所示。单击Next按钮进入模块定义对话框,如图2.15所示。图2.14源文件选择窗口图2.15模块输入/输出定义按照图2.15的方法填写模块的定义。
单击Next按钮确认模块属性,然后单击Finish按钮,源文件生成向导会自动生成源文件的框架,并将这个新文件加入到项目中。生成的文件框架已经将必需的库文件和模块的输入/输出定义好了,这时只需要关心模块应完成的功能,并将功能语句加入到“architectureBEHAVIORALofxxis”和“endBEHAVIORAL”之间就可以完成这个模块。
按照如下方法加入功能描述语句,然后单击菜单栏的“File→Save”或直接单击Save功能按钮。采用与生成“MY_AND2”类似的方法创建上层模块“AND_OR”。在生成“AND_OR”模块的过程中,输入信号类型选择为“Bus”,“MSB”填写为“3”,“LSB”填写为“0”,如图2.16所示。图2.16AND_OR模块定义
(3)语法检查。
源文件输入完成后,需要进行语法检查,以验证源文件语法的正确性。
在ISE的“Sources”窗口中选择“AND_OR_STRUCT”。
在“Processes”窗口中展开“Synthesize-XST”,双击“CheckSyntax”,如图2.17所示。图2.17语法检查图2.18查看原理图图2.19AND_OR对应的电路图
(5)行为级仿真。
文件设计完成后,一般需要对工程文件的功能进行仿真验证,确认文件在给定输入的情况下是否能够得到预计的输出。仿真之前,需要建立仿真平台文件(Testbench),用于完成给定输入的测试。
在ISE环境中选择菜单栏中的“Project→NewSource”。
在弹出的对话框中,选择“VHDLTestBench”,在Filename栏中输入新建源文件的文件名“tb_AND_OR”,如图2.20所示。
再单击Next按钮进入选择测试文件对话框,在对话框中选择“AND_OR”,如图2.21所示,再单击Next和Finish按钮即可。图2.20创建测试平台文件图2.21选择测试平台的关联文件在ISE的“Sources”框内上方的“Sourcesfor”中选择“BehavioralSimulation”,如图2.22所示,“Sources”框内显示的文件将会有所变化,选中“tb_AND_OR_vhd-behavior”。图2.22查看仿真平台文件在“Processes”框中展开“ModelSimSimulator”,双击“SimulateBehavioralModel”,系统会弹出ModelSim的仿真界面,如图2.23所示,并且自动进行仿真。从ModelSim的波形窗口(见图2.24)可以看到,系统的仿真输入和仿真输出,验证系统是否在原理上能够满足既定的要求。注意,功能仿真时,仿真波形只能显示出用户指定的信号代入延时,仿真器不会考虑器件延时和线路延时。图2.23选择功能仿真图2.24AND_OR的仿真波形
(6)生成网表文件。
经过行为级仿真后的工程文件在原理上已经可以完成系统功能了。然而,要在最终的XilinxFPGA上实现所需要的功能,应通过FPGA的四个管脚输入系统输入信号,在FPGA的某另一个管脚得到系统的输出信号。因此,我们需要将工程文件转化为配置FPGA的网表文件。网表文件描述了工程文件是如何用FPGA的底层逻辑和互联关系实现的。
在ISE的“Sources”框内上方的“Sourcesfor”中选择“Synthesis/Implementation”,选中“AND_OR”模块,如图2.25所示。图2.25选择查看用于综合的源文件在“Processes”框中双击“ImplementDesign”,或者在“ImplementDesign”处单击右键选择“Run”,如图2.26所示,则集成环境会对工程文件依次进行“Translate”、“Map”和“Place&Route”,并最终生成网表文件。本书在后续内容中有关于Translate、Map、Place&Route的详细介绍。图2.26实现工程设计
(7)布局布线后仿真。
在生成网表文件后,FPGA的底层实现电路的形式已经和图2.9所示的电路完全不一样了。通常情况下,系统仍然可以完成给定的功能,但信号在通过物理逻辑器件和器件之间的连线时会有一定的时延,因此,布局布线后仿真也通常叫做时序仿真。时序仿真的目的是要验证,在信号有时延的情况下,系统是否也能够完成给定的功能。
在ISE的“Sources”框内上方的“Sourcesfor”中选择“Post-RouteSimulation”,选中“tb_AND_OR_vhd”模块,如图2.27所示。图2.27选择查看布线后仿真文件在“Processes”框中展开“ModelSimSimulator”,双击“SimulatePost-Place&RouteModel”,或者在“SimulatePost-Place&RouteModel”处单击右键选择“Run”,系统会弹出ModelSim的仿真界面,如图2.28所示,并且自动进行仿真。这时从仿真波形窗口(见图2.29)中可以看出系统的输出相对于行为级仿真有一定的时延,但仍然可以满足功能的需求。图2.28选择进行布线后仿真图2.29时序仿真波形图
(8)生成编程文件并配置器件。
生成网表文件后,我们需要将网表文件转换为XilinxFPGA编程文件即比特流文件,并将编程文件下载到FPGA器件中,配置FPGA器件。在上述的步骤中,为了简化说明,我们省略了用户约束文件(UCF,UserConstraintFile)的编写。在对器件进行配置前,必须编写用户约束文件,用管脚锁定约束将系统的输入/输出信号和器件的输入/输出管脚绑定。具体配置器件的方法,我们会在后续内容中详细讲解,这里只将其提出,作为项目开发中的必要步骤简单说明。
在本节的实验中,我们完成了一个最小项目的开发,并以这个实验为例,熟悉了ISE和ModelSim的使用方法和一般项目开发的流程,并且初次接触到VHDL程序的编写。在下一节的内容中,我们将针对这个实验,详细介绍每一个步骤涉及的软件的使用方法。
2.3开发软件使用进阶
2.3.1ISE9.1i集成开发环境界面
ISE9.1i集成环境的图形用户界面如图2.30所示。图2.30ISE界面
1.Sources窗口
在初始情况下,Sources窗口包含了三个选项卡“Sources”、“Snapshots”和“Libraries”。其中,“Sources”选项卡包含了用树形结构组织的项目源文件,其中包括新建的文件和之前创建并加入到项目中的源文件;“Snapshots”选项卡包含了用户在项目开发过程中存储的项目快照;在项目开发的过程中,工程师用到的所有库文件、用户创建或加入的文件以及开发过程中生成的文件在ISE环境中都以库的形式做了保存,在“Libraries”选项卡中,显示了这些文件。选择“Sources”选项卡时,在Sources窗口的顶部会显示一个“Sourcesfor”下拉窗口,在这个窗口中可以选择想要的资源类型,当选择某一类型的资源时,Sources窗口的中部会显示这一类型对应的源文件,如图2.31所示。图2.31ISESources窗口
2.Processes窗口
在Sources窗口的“Sources”选项卡中选中任一源文件后,在Processes窗口会显示对应于这个源文件可以进行的操作,Processes窗口中的操作会根据源文件的不同做相应的变化,如图2.32所示。图2.32ISEProcesses窗口图2.33修改处理的属性
3.工作区
工作区用于显示工程文件、处理报告、文件模板以及一些日志记录文档,设计者可以在工作区中修改工程文件。这是工程设计输入的一种重要方式。
4.Transcript窗口
Transcript窗口中包含了很多选项卡,如“Console”、“Errors”、“Warnings”、“TclShell”和“FindinFiles”等。
在“Console”选项卡中,我们可以看到正在执行的处理过程给出的执行结果信息,如果在执行的过程中遇到了警告或者错误,则这些警告和错误信息也同时会在“Warnings”和“Error”选项卡中单独列出,方便工程师查询。
在ISE中也可以采用脚本语言的方式执行处理过程,脚本语言可以在“TclShell”中输入。2.3.2设计输入
1.文本输入方式
ISE内嵌了文本编辑器,文本编辑器可以用于创建、查看和编辑文本文件,如ASCII、VHDL、Verilog、UCF(UserConstraintFile)和Tcl脚本文件等。这里我们以VHDL/Verilog程序的输入为例介绍文本输入方法,其他类型的文本输入方法与此类似。
1)创建一个新的文本文件
按照实验一的方式创建好一个工程后,选择Project→NewSource菜单,在弹出的新文件向导窗口左侧选择VHDLModule/VerilogModule,并在右侧的Filename框中填入新建文件的文件名,如图2.34所示,单击Next按钮。新文件生成向导会以图形用户界面的方式指导用户填写VHDLModule/VerilogModule的输入/输出端口信号。这一步骤中输入/输出信号的填写可以帮助工程师快速建立新的文件,但这不是必需的步骤,用户也可以在最终生成的源文件中直接修改端口信号。单击Finish按钮后,在ISE的工作区将会弹出一个文本编辑窗口,在窗口的下方显示文件名。在新建的文件中,ISE已经帮助工程师按照VHDL/Verilog代码的标准格式将库文件、实体声明和结构声明等内容自动填写好,我们只需要关注模块将要实现的功能,并将相应的功能代码填入对应位置即可。图2.34新源文件创建窗口
2)编辑文本文件
在工作区的文本编辑器中我们可以对文本进行编辑,当我们编辑文本文件时,对应文本文件的选项卡在文件名称后将出现一个“*”号,表示对文本文件进行编辑后未存盘,存盘后“*”号消失。
在编辑过程中,我们可以使用ISE提供的模板进行语法结构的输入,ISE集成环境提供了丰富的模板帮助工程师快速建立源程序,模板的使用方法如下:
将光标放置在要插入模板的文本位置,选择菜单栏中的Edit→LanguageTemplates…或直接用鼠标左键单击工具栏中的图标,在工作区中会弹出一个Template窗口,如图2.35所示。在窗口左侧选择插入模板的类型,单击右键,选择Useinfile,则在文本文件中会自动插入所选模板的文本。图2.35语言模板窗口
3)修改文本编辑器选项
在ISE菜单栏中选择View,在下拉菜单中可以选择文本编辑器的显示选项;或者选择Edit→Preferences,在弹出的Preferences菜单中选择ISETextEditer也可以调整文本编辑器的一些属性。
2.图形输入方式
ISE支持类似于原理图的图形输入方式,帮助工程师直观地构建系统的整个架构和底层模块。ISE支持自顶向下和自底向上两种图形输入方式。采用自顶向下的输入方式,用户可以先用图形构建系统的整体结构和每一级下层模块结构,然后单独编辑每一个模块的功能实现;用户也可以先编辑实现每个底层模块,然后用搭积木的方式自底向上一步一步完成整个系统。在实际的工程应用中,多采用混合的方式,用自顶向下的方式将系统划分为相对独立的模块,然后对各个独立模块用自底向上的方式搭建。
1)自底向上的方式
以2.2节实验中的源文件输入为例,在第二步编写“MY_AND2”和“MY_OR2”的RTL级描述和“AND_OR”的结构级描述中,我们也可以采用图形输入的方式。
(1)创建原理图文件。选择Project→NewSource,在弹出的新文件向导左侧选择Schematic,在右侧填入文件名称,单击Next按钮和Finish按钮,创建一个新的原理图文件。此时弹出的原理图编辑界面如图2.36所示。图2.36原理图编辑界面
(2)单元符号输入。原理图编辑器为工程师设计不同的逻辑功能提供了丰富的基本单元符号库,这些符号可以在原理图编辑中直接调用;设计者也可以将自己生成的模块转化为单元符号,在原理图中直接使用。对应于两种不同的方法,单元符号输入的步骤也不同。
调用库符号。
在原理图编辑器左侧的Symbols选项卡中列出了目前库中的全部Symbol,可以用这些符号建立原理图。符号输入的方法为:
在Categories栏中选择Logic,在SymbolNameFilter栏中输入and,然后在Symbols栏中选择and2,如图2.37所示。图2.37调用库符号图2.38加入全部符号的原理图调用库符号时,一般我们要给符号命名,以方便后续开发中识别这个符号,符号命名的方法如下:
①选择菜单栏中的Add→InstanceName或在工具栏中单击添加符号名按钮。
②在Processes窗口中,选择Options选项卡,在Name框中填入希望命名的名字。
③鼠标移至原理图编辑窗口中,用鼠标左键单击要被命名的符号。
符号命名还有另外一种快捷的方式。用鼠标左键双击希望被命名的符号,将会弹出一个ObjectProperties窗口,如图2.39所示,在InstName对应的Value格中填入名字即可。如果希望在原理图中看到名字,可以点击Visible框。图2.39ObjectProperties窗口
调用用户符号。
我们也可以用自己创建的源文件,生成用户符号,然后在原理图中编辑。其步骤为:
在Sources窗口的Sources显示卡中选择我们创建的源文件MY_AND2,在Processes窗口的Processes显示卡中展开DesignUtilities,双击CreatSchematicSymbol,则会在工程文件夹下生成一个MY_AND2.sym文件,同时这个生成的符号被加入到符号库中。
在原理图编辑界面下,单击添加符号快捷键。选择Sources窗口中的Symbols选项,Categories选项中会出现所需要的工程路径,选择这个路径;在Symbols中选择刚生成的MY_AND2符号,然后将鼠标移至原理图编辑窗口,单击鼠标左键将MY_AND2符号放置在原理图中。
用类似的方法生成MY_OR2和AND_OR的符号,然后将符号都放置到原理图中,就得到了如图2.40所示的原理图。
用与调用库符号相同的方法对输入的用户符号进行命名。图2.40加入用户符号的原理图
(3)建立连线。上层设计文件AND_OR包含了三个下层模块,下层模块之间需要通过连线互相连接,以标明模块之间的信号传递关系。图2.40所示的原理图加入连线的方法
如下:
选择菜单栏中的Add→Wire,或者单击工具栏中的AddWire图标。
鼠标移至原理图编辑窗口,并靠近符号的端口连线处,如图2.41所示,则在端口连线处会出现四个小方框,在此处单击鼠标左键。
将鼠标移至希望与其连接的另一端口连线处,单击鼠标左键,则会在两个连线端口之间建立连线关系。图2.41添加连线过程在建立连接关系后,一般要对这根连线进行命名。选择菜单栏中的Add→NetName或单击工具栏中的添加连线名称按钮,在Processes窗口中选择Options显示卡。
在Whenyouclickonabranch框中选中Namethebranch,在Name框中填入名字。
将鼠标移至希望被命名的信号名上,单击鼠标左键,就完成了对信号的命名,在原理图中,所有被命名为同一名字的连线信号都被认为是互相连通的。上述在连线的过程中,在选择好一个端口连线后,也可以按下鼠标左键,将连线拖动到另一连线端口或原理图中的任意位置,并释放左键。如果连接到另一端口,则在两端口之间建立连接;如果在任意位置释放,则在原理图中画出未完成的连线。
在实际工程设计中,单信号之间的互联是最简单的一种,我们经常会遇到总线之间的互联和单信号与总线之间的互联等问题。下面举一个简单的例子说明这种信号的互联方法。
如图2.42所示,图中包含单根信号与总线的连接、总线与另一总线的一部分之间的连接和两个部分总线之间的连接,连接的方法如下:图2.42总线连接方法用添加连线的方法画出S4模块输入端口的总线,并将其命名为sigA(5:0)。
选择菜单栏中的Add→BusTap,或单击工具栏中的添加总线接入点按钮,在Processes的Options显示卡中Tap的方向上选择Right,用鼠标左键单击sigA信号,然后在Options显示卡的NetName中填写sigA(5)。
用鼠标左键单击S1模块的输出端口,则S1的输出端口和sigA(5)信号建立连接,连接信号名为sigA(5)。
用与建立sigA(5)相同的方法建立sigA(4:2),建立的过程中将信号命名为sigA(4:2)即可。
画出S3模块的输出总线,并将其命名为sigB(5:0)。建立sigB(5:4)与BUFT2的输入端口之间和BUFT2的输出端口与sigA(1:0)之间的连接(部分总线之间的互联信号需要用Buffer进行连接)。
注意:图2.42中所示的电路图只是为了说明连线的不同类型,实际原理图设计时,不可参照此图。
(4)添加输入/输出端口。原理图中的输入/输出端口,如同文本输入方法中定义的模块输入/输出端口,是模块必不可少的一部分。下面以用户符号的原理图为例,介绍添加输入/输出端口的方法如下:
用添加连线命令画出一条连线,并将其命名为INP(3:0)。
用总线接入点将两个MY_AND2的输入信号与INP(3:0)总线连接。选择Add→I/OMarker菜单,或直接单击工具栏中的添加输入/输出端口按钮,用鼠标左键单击INP(3:0)总线的一端,则在总线端口处会出现输入端口图示。
在MY_OR2模块的输出端口处画出一条连线,并将其命名为Z,选择添加输入/输出端口,在连线Z的另一端单击鼠标左键,即会出现一个输出端口图示。添加好输入/输出端口的原理图如图2.43所示。图2.43添加输入/输出端口
(5)原理图检查。在原理图绘制完成后,都需要对原理图进行检查。ISE给用户提供了自动检查工具DRC,用户可以直观地对原理图做初步检查。
选择菜单栏中的Tools→CheckSchematic,或单击工具栏中的DRC图标,ISE会对原理图做设计规则检查,检查的结果在Transcript窗口的Console显示卡中给出。如果原理图中有错误或者警告,则可以在Errors和Warnings显示卡中分别查看。
2)自顶向下的方式
在实际编写底层模块时,我们多采用自底向上的方式。然而在系统定义和模块划分过程中,我们需要用自顶向下的方式直观形象地建立整个系统架构。下面仍以AND_OR为例介绍这种输入方式(虽然AND_OR模块非常简单,我们只以其为例说明问题)。
创建一个新的工程,并创建新原理图,新的原理图命名为AND_OR4。
选择菜单栏Tools→SymbolWizard,弹出一个符号生成向导窗口,在PinNameSource格内选择SpecifyManual,Shape格内选择DonotUseReferenceSymbol和Rectangle,单击Next按钮。如图2.44所示,在SymbolName中填写符号名AND_OR,单击右侧的AddPin按钮,在左侧的Pin窗格内填写新加入管脚的名称和属性定义。每次单击AddPin都会在符号中增加一个输入/输出管脚,每次单击InsertSpacer都会在符号相应位置空出一个管脚的空间。如果想要删除增加的管脚或空间,单击右侧的RemovePin/Spacer。图2.44创建符号向导—定义符号端口连续单击Next和Finish按钮后,生成好的符号文件AND_OR.sym就出现在原理图编辑窗口中,如图2.45所示。在该窗口中可以调整符号的边框、位置和字体等属性。图2.45创建好的AND_OR符号将AND_OR符号放置于原理图AND_OR4中。
用鼠标右键单击AND_OR符号,在弹出的菜单中选择Symbol→PushintoSymbol,将会弹出一个警告窗口(如图2.46所示)提示由于AND_OR模块未曾定义过,因此操作无法完成,并询问是否要创建一个AND_OR模块的框架。在弹出的窗口中单击Yes按钮。图2.46弹出的警告窗口系统会继续弹出一个窗口,询问选择模板的类型。如图2.47所示,我们可以选择AND_OR模块用原理图、VHDL语言或Verilog语言实现,这里仍选用Schematic方式,然后单击OK按钮,弹出新的AND_OR.sch原理图编辑窗口。图2.47选择AND_OR模块的实现方式在AND_OR原理图中,再创建两个Symbol,分别命名为MY_AND2和MY_OR2,并将其加入到AND_OR原理图中,然后将其连接起来。如图2.48所示。图2.48绘制完成的AND_OR原理图用相同的方法编辑MY_OR2模块。设计完成后同样要对原理图进行DRC检查。
这样,采用自顶向下的方式设计的AND_OR模块就完成了。
3.其他输入方式
ISE支持多种其他设计输入方式,包括IPCore输入、状态机输入、仿真平台波形输入、块RAM映射输入和存储配置文件输入等,这些输入方式用智能化的工具和友好的用户界面,可以很大程度上方便用户进行设计。由于本书是初学者的入门教材,因此这些输入方式我们不做详细介绍,将会在后续的中级和高级教材中对这些输入方式做更为详细的介绍。
4.UCF文件的输入
UCF是一类特殊的文本文件,虽然它是文本输入方式的一种,但由于其内容的特殊性,我们在此单独介绍。UCF文件用于在工程文件设计完成后,告知编译器有哪些实现约束条件。一般的工程实现都有特定的实现条件约束,最基本的,如工程文件的输入/输出信号与FPGA管脚的管教锁定约束,时序收敛设计中的时钟周期、偏移约束,工程实现的面积约束等。
UCF涉及的内容很多,可以作为一个专题来深入了解。在这里简单介绍两种最基本的约束,即管脚约束和简单的时钟约束,其他如组信号时钟约束等在后续教材中再做深入探讨。
管脚约束。
管脚约束的命令字为LOCK,语法结构如下:
NET"<SignalName>"LOC=<PinName>;
例如:
NET"INP<0>"LOC=P58;
其中,INP<0>为系统输入信号,P58为FPGA的管脚序号,这个文本框中的约束命令将INP(0)信号锁定到P58管脚。
时钟约束。
时钟约束有很多种,最简单的如全局时钟周期约束,其语法结构为:
NET"<NetName>"PERIOD=period{HIGH/LOW}[highorlowtime];例如:
NETclk33mPERIOD=10nsHIGH5ns;
其中,clk33m为时钟网络的名称,10ns为时钟周期值,HIGH5ns表示时钟的占空比为50%。
约束文件的输入方法。
约束文件有两种输入方法,在ISE中创建一个新的UCF文件后,用户可以在文本编辑器中直接编辑UCF文本,同时,ISE集成环境还提供了专用于配置UCF文件的工具软件,在ISE中可以直接调用,在可视化界面下编辑约束参数。采用文本编辑的方法,约束文件的生成步骤为:
在ISE中选择Project→NewSource创建一个新文件,在弹出的新文件创建向导中选择ImplementationConstraintFile,并填入UCF的文件名ucf_AND_OR,单击Next按钮。
在AssociateSource窗口中选择UCF的关联文件,即对该模块加入约束,这里选择顶层设计模块AND_OR,单击Next和Finish按钮后,新的UCF文件就创建完成了。
在Sources窗口的Sources显示卡中,展开AND_OR的树形结构,选中新创建的ucf_AND_OR文件。
在Processes窗口的Processes显示卡中,双击EditConstraints(Text),则在文本编辑窗口中会弹出ucf_AND_OR文件的编辑界面。在文本编辑界面中加入管脚约束命令,单击保存,完成约束文件的编辑。
采用工具软件编辑时钟约束的生成步骤前三步与文本编辑的方法相同,在第四步的Processes窗口中,用鼠标左键双击CreateTimingConstraints,弹出XilinxConstraintsEditor窗口。在这一窗口中可以配置多种时序约束,如全局时钟约束Global,端口时序约束Ports,组约束等相关高级约束和其他混合时序约束等。由于AND_OR模块是组合逻辑实现的模块,没有时钟网络,因此在XilinxConstraintsEditor窗口中无法编辑全局时钟约束。采用工具软件编辑管脚锁定约束和面积约束的生成步骤前三步也与文本编辑方法相同,在第四步的Processes窗口中,用鼠标左键双击AssignPackagePins或CreateAreaConstraints,弹出XilinxPACE工具软件,在软件中可以对设计模块的输入/输出管脚和面积进行约束。2.3.3设计综合
综合是设计流程中的基本步骤,它将概念性硬件描述语言(HDL)的设计定义转换为针对目标器件的逻辑或物理表示。ISE集成了Xilinx公司的XST综合工具,一般的工程设计中常用的其他综合工具还有Synplicity公司的Synplify/SynplifyPro和MentorGraphics公司的Precision等。经过几个版本的改进,XST的综合效果已经有了很大的提高,基本可以和专业的Synplify综合工具媲美,而且集成于ISE中,使用非常方便,因此我们着重介绍XST综合工具。
XST支持VHDL语言、Verilog语言,VHDL/Verilog混合描述和原理图等多种综合输入,其输出为Xilinx特有的NGC网表文件,NGC文件包含转化后的逻辑数据和约束信息。XST的综合输入/输出文件如图2.49所示。图2.49XST综合输入/输出文件
XST的综合流程包含了几个独立的步骤,流程图如图2.50所示。图2.50XST综合流程图综合流程的第一步骤是语法检查,检查HDL语言代码中是否有语法错误,如果有错误,在综合报告和Transcript窗口中将给出错误语法的位置和信息。
在HDL综合过程中,综合工具对HDL代码进行分析,推测选择用FPGA中的哪些底层单元实现HDL语言描述的功能,并且采用单元共享等技术使得综合后的电路占用的器件资源最少。在综合的过程中,状态机是单独处理、独立分析的,根据综合的选项,综合器选择状态机在综合过程中选用的实现算法。
HDL综合完成后,综合器会根据综合选项和XCF(XSTConstraintFile,综合约束文件)文件,对综合结果做一些基础的优化。以AND_OR模块为例,设计综合的方法如下:
选中Sources窗口中的AND_OR模块。
如果AND_OR模块不是顶层模块,用鼠标右键单击AND_OR模块,在右键菜单中选择SetasTopModule(在ISE9.1中,只能对顶层文件进行综合和实现)。
在Processes窗口中双击Synthesize-XST。
XST综合的过程一方面受用户配置约束的影响,另一方面也可以在ISE中配置XST的综合选项以达到预期的综合效果。
在Sources窗口的Sources显示卡中选中要综合的模块,在Processes窗口中用鼠标右键单击Synthesis-XST, 在右键菜单中单击Properties,系统弹出ProcessProperties窗口,如图2.51所示。在左侧选择属性卡的类别,右侧对应此类中可以配置的参数。在Propertydisplaylevel中选择Standard,窗口显示标准的配置参数;选择Advanced,窗口显示高级的配置参数。
在XST综合配置参数中,最经常用到的几个参数配置为:
● OptimizationGoal:配置综合的优化目标,选择速度优先Speed,综合结果的运行时钟频率最高;选择面积优先Area,综合结果占用的资源最少。
● OptimizationEffort:配置综合的努力程度,选择正常优化级别Normal,优化所用的时间最短;选择高优化级别,优化的效果最好,但同时运行时间也比较长。图2.51XST综合属性配置窗口● KeepHierarchy:保持电路的层次结构,即综合后不打乱设计电路的层次结构,不跨层做优化。
综合选项的很多配置都与底层的器件和实现的算法有关系,如FSMEncodingAlgorithm、ResourceSharing、RegisterDuplication和RegisterBalancing等,在配置这些参数时要初步了解参数涉及的硬件单元和实现算法,才能更好地利用这些参数。2.3.4功能仿真
功能仿真可以对工程设计文件进行初步的功能验证。仿真软件将HDL语言转换为抽象的逻辑电路,忽略信号在逻辑器件和传输线上的延时,并对应各种可能的输入信号仿真得到设计工程的输出信号,检验输出信号是否满足预期的要求。
ISE集成环境可以调用多种仿真工具做仿真验证,新的工程项目在建立时,工程向导会要求用户选择工程文件的仿真工具,如图2.12中的Simulator选项。实际使用中,也可以在工程建立之后,重新修改工程的仿真工具。
ISE开发环境集成了仿真功能,在Simulator选项卡中可以选择ISESimulator做仿真验证。ISESimulator作为ISE的一个组件,使用非常方便。在实际项目开发过程中,也经常使用功能更为强大的第三方仿真工具,如Mentor公司的ModelSim、Synopsys公司的VCS和Cadense公司的NC等。
实验一的行为级仿真步骤中,我们尝试了在ISE中直接打开ModelSim进行功能仿真的步骤,本节在简单介绍ISESimulator的使用方法后,对ModelSim的使用做进一步深入的介绍。
1.ISESimulator使用方法
1)选用ISESimulator做仿真
创建新工程项目时,可以在工程属性选项卡中,选择ISESimulator作为仿真器。项目创建好后可以在项目中修改仿真器的设置,修改方法如下:
在Sources窗口的Sources显示卡中,选中所有工程的最顶层,如图2.52所示,在右键菜单中选择Properties项,弹出工程属性配置窗口。在Simulator位置选择ISESimulator。图2.52修改工程属性
2)创建仿真平台文件
对工程文件进行仿真之前,首先要为仿真器输入激励源,我们可以用本章2.2节实验中的方法创建仿真平台文件,作为ISESimulator的输入测试激励。同时,ISESimulator提供一个可视化的波形输入编辑平台TBW(TestBenchWaveform),在TBW中,即使没有任何HDL知识的工程师也可以很方便地创建输入激励,设定仿真时长,来验证工程的正确性。
(1)创建新的测试平台波形文件。
选择Project
NewSource,弹出新建文件向导。
选择TestBenchWaveForm类型的文件,并命名为tbw_AND_OR,单击Next按钮。在关联模块窗口中,选择AND_OR模块,连续单击Next按钮和Finish按钮,弹出一个初始化窗口,如图2.53所示。2.2节实验中的AND_OR模块是组合逻辑模块,没有用到时钟,因此初始化窗口中,我们只能选择仿真时长等信息。
CombinatorialTimingInformation窗口中可以设定给信号赋值和检查信号输出的时间间隔。InitialLengthofTestBench窗口可以设定初始的仿真时间,在TimeScale窗口设定时间单位,单位可选s、ms(10-3)、μs(10-6)、ns(10-9)、ps(10-12)。单击Finish按钮完成初始化设定。图2.53仿真时间和时钟初始化创建好的测试平台文件会自动加入到工程中,在Sources窗口的Sourcesfor选项卡中选中BehavioralSimulation,则在Sources显示卡中会以树形结构显示测试波形文件及关联模块。
(2)设定测试波形文件的激励信号。
打开创建好的tbw_AND_OR文件,测试平台波形文件在创建的过程中已经将模块的输入/输出信号添加到波形窗口中,如图2.54所示。如果波形窗口中没有列出全部的模块顶层输入信号,选择Processes窗口中的Hierarchy显示卡,这里有被仿真顶层模块的全部输入/输出信号列表,直接用鼠标左键将信号拖入波形编辑窗口即可。图2.54仿真平台波形输入窗口设定测试波形文件激励信号的方式有很多种,以AND_OR模块为例,有下面三种方法。
按钮方式。
在波形编辑窗口中,展开INP(3:0)信号,在波形窗中任一希望修改信号值的位置单击信号,信号值即会随之高低变化。
设定固定值。
波形编辑窗口中,在要编辑的信号位置处单击鼠标左键,或单击鼠标右键,在弹出的窗口中选择SetValue。系统会弹出一个信号值输入窗口,如图2.55所示。在Enterthedesiredbinaryvalue窗口中填入设定的信号值,单击OK按钮。图2.55设定波形信号值
使用向导输入。
在图2.55的窗口中单击PatternWizard,弹出一个波形设置向导,如图2.56所示。在波形设置向导中,可选的波形样式有Alternate、CountUp、CountDown、RandomBus、ShiftLeft、ShiftRight。图2.56波形设置向导
3)设计仿真
激励波形设置完成后,就可以进行设计仿真了。以AND_OR为例,仿真的步骤如下:
在Sources窗口的Sourcesfor选项卡中选择BehavioralSimulation,Sources显示卡中选择仿真平台波形文件tbw_AND_OR。
在Processes窗口中,双击SimulateBehavioralModel,仿真器开始进行仿真。
仿真完成后,在WorkSpace窗口中会弹出一个Simulation窗口显示仿真波形,查看仿真波形,验证工程设计的正确性。进入仿真界面后ISE菜单栏会多出一个Simulation菜单, 对应的在工具栏中会多出一个仿真工具栏,利用仿真工具栏可以快捷地完成波形的查看和验证。仿真工具栏如图2.57所示。图2.57仿真工具栏在查看仿真波形时,如果遇到实际仿真结果与预期结果不一致的情况,通常需要查看底层模块的信号值或顶层模块的中间信号值。在Processes窗口中,单击SimHierarchy显示卡,则在显示卡中以树形结构给出了模块中的全部信号,用鼠标左键可以将这些信号拖入仿真波形窗口中进行仿真。
ISESimulator不仅可以用TBW文件作为仿真的激励输入,也可以用2.2节实验中生成的测试平台文件作为仿真激励文件,仿真的方法与采用TBW文件的仿真方法相同。
2.ModelSim使用方法
1)选用ISESimulator做仿真
在新工程创建过程中,选用ModelSimVHDL/Verilog作为仿真工具;或在建好的工程中直接修改工程属性文件,选用ModelSim进行仿真,具体的方法与选用ISESimulator的方法相同。
2)创建仿真平台文件
创建仿真平台文件的方法参见本章2.2节实验中的“行为级仿真”部分。
3)工程仿真
ModelSim是独立的仿真软件,在ModelSim中可以完成仿真项目的创建、仿真文件输入、功能仿真和时序仿真等一系列完整的工作。也可以在ISE中直接调用ModelSim,ISE集成环境实现了ISE与ModelSim的无缝链接,直接调用不需要考虑ModelSim工程的建立和库文件的导入等复杂过程。
本章2.2节实验中,在ISE环境里直接调用ModelSim,弹出的ModelSim软件界面如图2.58所示。ModelSim软件默认打开Workspace、Objects、Wave和Transcript窗口,其他的窗口可以在菜单栏View中选择打开。图2.58ModelSim仿真软件界面
Workspace窗口。
Workspace窗口包含了仿真工程的可用资源,包括Library、sim、Files等几个显示卡,在仿真过程中打开的Memories等视窗也会在Workspace中显示。
● Library包含了目前仿真工程的库文件,包括标准库文件、Xilinx仿真器件库文件和用户库文件等,其中的Work库为用户库文件,库中包含已编译好的全部工程模块。
● sim包含了仿真工程中用到的模块,选中某一模块则在Objects窗口中显示对应模块中的仿真信号。
● Files包含了仿真工程中用到的全部文件,包含工程文件和库文件。
Objects窗口。在Workspace窗口的sim显示卡中选中某一模块时,Objects窗口中会列出当前模块中包含的信号。在仿真过程中,可以将信号直接拖入波形窗口查看信号波形。
Wave窗口。
Wave窗口中显示了被仿真信号的波形,在仿真过程中发现错误时,通常通过波形窗口查看相关信号的波形查找错误原因。
Transcript窗口。
Transcript窗口用于输入控制命令,显示处理过程的输出。图2.59ModelSim常用仿真工具在ISE中调用ModelSim时,ISE向ModelSim传递了部分仿真参数,这些参数可以在仿真属性窗口中修改,在Processes窗口的Processes显示卡中用鼠标右键单击SimulateBehavioralModel,在弹出的右键菜单中选择Properties,弹出属性配置窗口如图2.60所示,在Propertydisplaylevel下拉菜单中可以选择Advanced配置一些高级参数。图2.60仿真属性配置窗口在图2.60中,SimulationRunTime项用于配置仿真的时长。一般在工程仿真中,固定的仿真时长是不能满足需求的。在弹出的仿真窗口中,可以通过仿真工具栏中的Run、ContinueRun、Restart、Run-all和Break等键控制仿真过程。
在仿真的过程中,如果发现有设计错误,可以直接关闭ModelSim,在ISE中修改设计文件后重新启动仿真,也可以在ModelSim中直接修改工程文件,在对修改后的文件进行编译后重新仿真。2.3.5工程实现
工程文件在功能仿真和综合步骤完成之后,需要进行工程实现(Implementation)。在ISE中,工程实现包含以下四个步骤:
Translate。将综合后的网表文件和约束文件融合到同一个Xilinx的设计文件中。
Map。将设计中的功能器件映射到工程设计的目标器件资源中。
PlaceandRoute。对映射后的目标器件资源进行布局和布线,满足时序约束。
GenerateProgrammingFile。生成比特流文件,这个文件可以下载到器件中,对器件进行编程配置。以AND_OR模块为例,在ISE中进行工程实现的方法如下:
①选中Sources窗口中的AND_OR模块。
②如果AND_OR模块不是顶层模块,用鼠标右键单击AND_OR模块,在右键菜单中选择SetasTopModule。
③在Processes窗口中双击ImplementDesign,或选择菜单栏中的Process→ImplementTopModule。
④在Processes窗口中双击GenerateProgrammingFile,生成下载配置文件。工程实现的过程包含了很多底层操作,用户可以在默认的实现配置下完成工程实现,也可以在ISE中对工程实现的参数做相应的配置,以达到最优的效果。工程实现的参数可以在Implementation的属性卡中统一配置,也可以对每一个步骤的属性做单独配置,统一配置和单独配置的可配置参数是相同的。
选中AND_OR模块后,在Processes窗口中用鼠标右键单击ImplementDesign,在弹出的右键菜单中选择Properties,属性配置卡如图2.61所示。图2.61实现属性配置卡在实现属性的配置中,经常用到的配置属性及其含义为:
● MapProperties类下的PackI/ORegisters/LatchesintoIOBs选项:在输入/输出管脚中加入寄存器,可以优化输入/输出信号的时序。
● Place&RouteProperties类下的Place&RouteEffortLevel(Overall)选项:在给定的时序和管脚约束下,布局布线器的优化努力程度。在给定的约束条件下ISE无法完成布局布线时,可以尝试修改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春信息技术职业学院《自动化实践初步》2023-2024学年第一学期期末试卷
- 玉林师范学院《结构模型设计制作》2023-2024学年第一学期期末试卷
- 市场波动下的投资决策风险分析
- 财务战略述职报告模板
- 保险业务月度报告模板
- 保险行业发展展望模板
- 实施环保生活讲座
- 社团招新简报
- 统编版六年级语文上册寒假作业(十一)(有答案)
- 2025年四川省眉山市区县高考数学一诊模拟试卷(含答案)
- 制造样品生产作业指导书
- 服务经营培训课件ppt 老客户经营综合版
- MT/T 199-1996煤矿用液压钻车通用技术条件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力学性能试验第1部分:桌类强度和耐久性
- 第三方在线纠纷解决机制(ODR)述评,国际商法论文
- 公寓de全人物攻略本为个人爱好而制成如需转载注明信息
- 第5章-群体-团队沟通-管理沟通
- 肾脏病饮食依从行为量表(RABQ)附有答案
- 深基坑-安全教育课件
- 园林施工管理大型园林集团南部区域养护标准图例
评论
0/150
提交评论