
现代电子系统分析与设计第2章.ppt
104页第二章 开发环境与S3开发板 第二章第二章 开发环境与开发环境与S3开发板开发板 软件综述软件综述2.2 S3开发板简介开发板简介2.3 ISE开发流程开发流程2.4 第三方开发工具第三方开发工具本章小结本章小结第二章 开发环境与S3开发板 软件综述软件综述 套件分类套件分类 除了性能上的改进之外,设计套件依然延续了在中提供的针对四个特定领域而优化配置版本的解决方案:逻辑版本(Logic Edition)、DSP版本(DSP Edition)、嵌入式版本(Embedded Edition)和系统版本(System Edition) 每一版本都提供了完整的FPGA设计流程,并且专门针对特定的用户群体(工程师)和特定领域的设计方法及设计环境要求进行了优化,从而使设计人员能够将更多精力集中于开发具有竞争力的差异化产品和应用这4种版本的功能分别如下: 第二章 开发环境与S3开发板 (1) ISE设计套件逻辑版本针对采用赛灵思基础目标设计平台,主要关注逻辑和连接功能 (2) ISE设计套件DSP版本针对采用赛灵思DSP领域目标设计平台,主要面向算法、系统和硬件的设计人员而优化。
(3) ISE设计套件嵌入式版本针对采用赛灵思嵌入式领域目标设计平台的嵌入式系统设计人员(硬件和软件设计师)而优化 (4) ISE设计套件系统版本针对采用赛灵思连接领域目标设计平台的系统设计人员而优化 第二章 开发环境与S3开发板 功能介绍功能介绍 工具涵盖了整个FPGA开发流程,包括了设计输入、综合、仿真、实现以及下载各个步骤采用ISE集成环境可以独立完成整个Xilinx FPGA的开发,而无须借助其他第三方开发工具 (1) 设计输入:提供的设计输入工具包括HDL代码的输入,原理图编辑工具,用于IP Core的Core Generator,以及用于约束文件编辑的Constraints Editor等软件 (2) 综合:自带的综合工具为XST,还可以与业界非常优秀的综合工具—Mentor Graphic公司的Leonardo Spectrum和Synplicity公司的Synplify实现无缝链接第二章 开发环境与S3开发板 (3) 仿真:自带ISim仿真工具,同时提供使用Mentor Graphic公司的ModelSim各个版本的仿真接口 (4) 实现:包括对综合文件的翻译、映射、布局布线等,还包括时序分析、增量设计、手动布局约束等高级功能。
(5) 下载:包括生成bit 流文件,还包括一个专用的下载软件IMPACT,可以进行设备通信和配置,并将程序烧写到FPGA芯片中去 使用ISE进行FPGA设计的各个过程可能涉及的工具如表2-1所示 第二章 开发环境与S3开发板 第二章 开发环境与S3开发板 用户界面和菜单操作用户界面和菜单操作 ISE用户界面如图2-1所示界面各分区及功能如下: (1) 标题栏:主要显示当前工程的名称和当前打开的文件名称 (2) 菜单栏:主要包括“文件(File)”、“编辑(Edit)”、“视图(View)”、“工程(Project)”、“源文件(Source)”、“操作(Porcess)”、“工具(Tools)”、“窗口(Window)”、“布局(Layout)”和“帮助(Help)”等10个下拉菜单其使用方法和常用的Windows软件类似 (3) 工具栏:为方便用户操作而提供的常用命令快捷键随着版本升级,提供的快捷键越来越多 第二章 开发环境与S3开发板 (4) 设计管理区:提供工程以及相关文件的显示和管理功能,包括设计源文件视图和仿真源文件视图源文件视图显示了源文件的层次和分类关系。
(5) 过程管理区:本窗口显示的内容取决于工程管理区中所选定的文件,相关的操作和FPGA设计的流程相关,不仅显示当前进行的步骤,而且还用动态图标的方式显示当前的操作 第二章 开发环境与S3开发板 图2-1 ISE用户界面 第二章 开发环境与S3开发板 (6) 信息显示区:显示ISE中的处理信息,如操作步骤信息、告警信息和错误信息等,信息显示区的下面有控制台信息区(Console)和文件查找区(Find in Files Results)如果编译过程出现错误,双击信息显示区的告警和错误标志,就能自动切换到源代码出错的地方 第二章 开发环境与S3开发板 2.2 S3开发板简介开发板简介 Digilent S3开发板是基于Spartan-3系列FPGA(XC3S200)所开发的一款FPGA入门级学习与验证板,包含丰富的外围接口,是初学者学习数字电路设计的良好平台其外观图如图2-2所示结构框图如图2-3所示其主要器件以及包含的接口如下: (1) Xilinx Spartan-3 SC3S200 FPGA器件(XC3S200-FT256); (2) 2 Mb的Xilinx XCF02S配置PROM; (3) 2个256K × 16异步静态SRAM(ISSI IS61LV25616AL-10T); (4) VGA显示端口; (5) RS232串口; (6) PS/2鼠标键盘接口; 第二章 开发环境与S3开发板 (7) 4位7段数码管; (8) 8个拨码开关; (9) 50 MHz晶振的时钟输入; (10) 3个40脚的外扩插槽; (11) JTAG下载接口; (12) 3.3 V、2.5 V、1.2 V的稳压电源。
第二章 开发环境与S3开发板 图2-2 Spartan-3FPGA开发板外观图 第二章 开发环境与S3开发板 图2-3 Spartan-3 FPGA开发板结构框图 第二章 开发环境与S3开发板 2.3 ISE开发流程开发流程 包含了一系列的开发工具这些工具不在本书介绍范围,这里仅通过一个简单的实例,结合节FPGA 的开发流程来描述FPGA的整个开发流程,帮助读者理解FPGA的基本开发步骤具体包含以下5步: (1) 创建工程和设计输入; (2) 创建TestBech并进行RTL仿真; (3) 添加约束; (4) 综合与实现; (5) 生成配置文件并对FPGA进行配置 第二章 开发环境与S3开发板 【程序2-1】 带使能控制的计数器 module Count_EN #( parameter Width = 8, parameter U_DLY = 1 ) ( input wire EN, input wire Clock, input wire reset, output reg [Width-1:0] Out); always@(posedge Clock, negedge reset) if(!reset) Out <= 8‘b0; else if (EN ) Out <= #U_DLY Out +1; endmodule 第二章 开发环境与S3开发板 2.3.1 创建工程和设计输入创建工程和设计输入 本阶段包含三个任务:创建工程目录、创建工程、添加或创建HDL文件输入。
1.创建工程目录.创建工程目录 规范的FPGA设计在建立工程之前,首先要求进行项目文件管理规划清晰的文件目录有助于提高设计效率和避免错误的发生建立的一个清晰的工程目录如下: (1) project name:工程名称,在这里建立一个Count_EN的目录来存放工程所有相关文件; (2) scr:存放源代码目录; (3) coregen:CoreGenerator工具产生的各种IP文件; (4) sim:存放仿真相关文件,funcsim:目录存放与功能仿真相关文件,parsim:目录存放与时序仿真相关文件; (5) doc:存放FPGA相关设计文档 第二章 开发环境与S3开发板 2.创建工程.创建工程 ISE软件每次打开时,会默认列出最近几次打开的工程目录,方便用户直接双击打开如果用户需要新建工程,那么按照下面的步骤来进行:选择“File | New Project”选项,在弹出的新建工程对话框中填写如下几项:“Project Name”中填写工程名称,“Browse”中指定项目存放的路径,“Top-Level Source Type”选项中选择工程顶层源代码的类型。
第二章 开发环境与S3开发板 关于输入文件类型有如下几个选项: (1) HDL:表示工程顶层源代码为vhdl或者Verilog代码形式; (2) Schematic:表示工程顶层源代码为原理图形式; (3) EDIF:表示工程源代码是由Symplify 综合工具综合之后的网表文件,后缀是 .edf文件; (4) NGC/NGO:表示工程源代码是ISE自带的XST综合工具产生的网表文件 第二章 开发环境与S3开发板 在本例中,将“Project Name”填写为“Count_EN”,“Top-Level Source Type”选择为HDL类型 单击“Next”按钮,进入下一步,选择所使用的芯片类型以及综合和仿真的工具如图2-4所示,“Product Category”选择“All”,列出所有FPGA器件,“Family”选项包含了所有的Xilinx公司的器件系列,“Device”选项包含了对应系列的所有型号的器件,“Package”选择封装,“Speed”选择速度等级,“Synthesis Tool”选择支持的综合工具,“Simulator”选择支持的仿真工具,“Preferred Language”选择语言:Verilog或者VHDL。
在本例中,各选项按照如图2-4所示进行选择 第二章 开发环境与S3开发板 图2-4 新建工程器件配置图 第二章 开发环境与S3开发板 再单击“Next”按钮,进入下一页,可以选择新建源代码文件,读者可以选择现在开始新建源代码,也可以直接跳过,等工程建立完毕之后再建立源代码单击“Next”按钮,进入第四页,添加已有的代码;如果没有源代码,单击“Next”按钮,直接进入最后一页;点击“Finish”按钮,就建立好一个完整的工程 第二章 开发环境与S3开发板 3.添加或创建.添加或创建HDL文件输入文件输入 在工程建立结束之后,就可以添加或创建HDL文件输入如果已经设计好HDL文件,则直接添加到工程中来下面首先介绍添加HDL文件的步骤 在工程管理区单击右键,选择“Add Files”,然后弹出对话框,找到HDL文件保存的路径来添加所有文件需要注意的是,如果要添加多个文件,可以按住“Ctrl”键,选择多个文件进行添加;添加完毕之后,点击“OK”按钮,所有文件将按照相关调用层次显示在工程管理区 新建HDL文件的步骤相对来说复杂些在工程管理区任一位置单击鼠标右键,在弹出的菜单中选择“New Source”命令,出现如图2-5所示的“New Source Wizard”对话框。
第二章 开发环境与S3开发板 图2-5 新建源代码向导图 第二章 开发环境与S3开发板 对话框左侧的列表用于选择代码的类型,部分项的意义如下: IP(CORE Generator & Architecture Wizard):由ISE的IP Core生成工具快速生成可靠的源代码,选择IP,定义File name,点击“Next”按钮,进入IP定制界面这与单独使用Core Generator工具产生IP的方法是一样的 第二章 开发环境与S3开发板 User Document:用户文档类型 Verilog Module:Verilog 模块类型,用于编写Verilog代码 Verilog Test Fixture:Verilog测试模块类型,专门用于编写Verilog测试代码 VHDL Module:VHDL模块类型,用于编写VHDL代码 VHDL Library:VHDL库类型,用于制作VHDL库 VHDL Package:VHDL包类型,用于制作VHDL包 VHDL Test Bench:VHDL测试模块类型,用于专门编写VHDL测试代码 Embedded Processor:嵌入式处理器。
将调用XPS工具进入MicoBlaze处理器的硬件定制界面 第二章 开发环境与S3开发板 在本例中,在“Select Source Type”中选择“Verilog Module”选项,在“File name”文本框中输入“Count_EN ”,单击“Next”按钮,进入端口定义对话框,如图2-6所示其中,“Module name”输入“Count_EN”下面的列表对应端口的定义:“Port Name”表示端口名称;“Direction”表示端口方向(可以选择input、output、inout三种类型);如果为总线,则“Bus”选项打钩;“MSB”和“LSB”分别表示信号的最高位和最低位,单位信号的MSB和LSB不必填写 第二章 开发环境与S3开发板 图2-6 Verilog模块端口定义对话框 第二章 开发环境与S3开发板 定义了模块端口之后,单击“Next”按钮,进入下一步,单击“Finish”按钮,完成创建ISE自动创建一个Verilog模块例,在源代码编辑区内打开,标准的代码端口的注释都已经生成,剩下来的工作就是在模块中实现功能ISE独特的源码模块自动生成方式,极大地节省了开发者的时间。
在源代码区只要填写如程序2-1所示的代码内容,就完成了源码输入的工作 第二章 开发环境与S3开发板 2.3.2 创建创建TestBench并进行并进行RTL仿真仿真 1.建立仿真.建立仿真TestBench 建立基于程序2-1的ISim测试仿真平台① 在工程管理区将“View”设置为“Simulation”;② 在工程管理区任意位置点击鼠标右键,并在弹出的菜单中选择“New Source”命令;③ 选中“Verilog Test Fixture”,输入文件名“Count_EN _tb”;④ 单击“Next”按钮,进入下一页,这时工程中显示的是所有module的名字,设计人员根据需要选择要进行测试的module在本例中只有一个module—Count_EN,用鼠标选中,然后单击“Next”按钮,进入下一页,直接单击“Finish”,ISE在源代码区显示测试模块的代码: 第二章 开发环境与S3开发板 module Count_EN_tb; // Inputs reg EN; reg Clock; reg Reset; // Outputs wire [7:0] Out; // Instantiate the Unit Under Test (UUT) Count_EN uut ( .EN(EN), .Clock(Clock), .Reset(Reset), .Out(Out) );第二章 开发环境与S3开发板 initial begin // Initialize Inputs EN = 0; Clock = 0; Reset = 0; // Wait 100 ns for global reset to finish #100; // Add stimulus here end endmodule 第二章 开发环境与S3开发板 ISE自动生成了测试文件的框架,包括所需要的信号、端口声明以及模块例化。
设计人员需要做的工作,就是在“// Add stimulus here”后面补充添加测试向量生成代码为了验证计数器是否工作正常,添加如下代码(关于TestBench的编写,将在后续章节详细介绍,现在只需要了解如何使用ISim进行仿真即可): Reset = 1; EN = 1; forever #10 Clock = !Clock; 此时添加代码完毕 第二章 开发环境与S3开发板 2.使用.使用ISim进行仿真进行仿真 选中过程管理区“Simulate Behavioral Model”选项,单击鼠标右键,选择菜单中的Properties选项,会弹出如图2-7所示的仿真设置属性对话框 对话框中有如下两项需要注意: (1) “Simulation Run Time”:用来设置仿真时间长短; (2) “Waveform Database Filename”:设置波形文件存储路径及文件名第二章 开发环境与S3开发板 图2-7 仿真设置属性对话框 第二章 开发环境与S3开发板 仿真参数设置完之后,直接双击ISim中的“Simulate Behavioral Model”,ISE自动启动ISim软件。
ISim软件界面如图2-8所示 图2-8 ISim软件仿真界面 第二章 开发环境与S3开发板 ISim仿真工具主界面由三个部分组成:源文件区、目标信号区和波形仿真区 (1) 源文件区:存放仿真源文件以及库文件 (2) 目标信号区:显示工程信号名,方便用户选中并添加到波形仿真图上在目标信号区,有快捷按钮,方便用户在本工程中提取需要观察的信号快捷按钮包括输入输出端口、双向端口、内部信号、常量、参数、变量、缓冲信号等第二章 开发环境与S3开发板 (3) 波形仿真区:显示目标信号波形图 选择菜单中的“Simulation”或者快捷键栏目相关按钮来控制仿真流程,这些快捷按钮是: (1) Restart:重新开始仿真; (2) Run All:仿真全部执行; (3) Run:执行仿真; (4) Step:单步执行; (5) Break:仿真停止 对应快捷按钮如图2-9所示 仿真结果如图2-8所示 第二章 开发环境与S3开发板 图2-9 仿真流程控制快捷按钮第二章 开发环境与S3开发板 2.3.3 添加约束添加约束 工程中源代码输入之后,需要给设计添加管脚和时序约束。
管脚约束是将设计文件的输入输出信号设置到器件的某个管脚,而且包括设置此管脚的电平标准、电流强度、上下拉特性等 时序约束在高速数字电路设计中非常重要,其作用是为了提高设计的工作频率和获得正确的时序分析报告在综合、映射和布局布线阶段附加约束,可以使时序分析工具以用户的时序约束为标准,尽量满足约束要求,同时产生实际时序和用户约束时序之间的差异,并形成报告因此要求用户必须进行时序约束,而且越全面越好在ISE中时序约束由专门的工具Constraints Editor来完成 第二章 开发环境与S3开发板 1.创建管脚约束.创建管脚约束 下面以程序2-1为例创建约束 (1) 新建约束文件首先新建源代码,在源代码类型中选取“Implementation Constraints File”,在File name中输入约束文件名“Count_EN_ucf”,单击“Next”按钮,进入下一页;然后单击“Finish”,完成约束文件的创建 (2) 编辑约束文件在工程管理区选择建立的约束文件,双击过程管理区的“User Constraints”下的“Edit Constraints(Text)”,就可以打开约束文件编辑器。
第二章 开发环境与S3开发板 (3) 建立管脚约束由于手工编辑UCF文件通常效率较高,且出错概率较小,因此我们这里有必要介绍手工编辑管脚约束的语法其语法格式为 {NET|INST|PIN}"signal name" Attribute; 其中,“signal name”是指约束对象名字,也支持对约束对象的层次描述;“Attribute”为约束的具体描述;语句必须以分号结束UCF文件采用“#”进行注释需要注意的是,UCF文件约束对象必须与设计中的对象名字一致例如,若将信号CLK约束到FPGA的P30管脚上,信号电平标准为,则添加约束如下: NET "CLK" LOC = P30 |IOSTANDAND = LVCMOS33; 第二章 开发环境与S3开发板 在UCF文件设计中支持通配符“*”和“?”,“*”可以代表任何字符串和空格,“?”则代表一个字符在编辑约束文件时,通过通配符可以快速选择一组信号例如,语句 NET "*DATA? " "FAST"; 将选择包含“DATA”字符并以一个字符结尾的所有信号,并选择速率为“FAST”对于S3开发板可以参考其硬件使用手册进行管脚约束。
第二章 开发环境与S3开发板 2.建立时序约束.建立时序约束 时序约束采用Constraints Editor比较方便在工程管理区选择顶层模块,在过程管理区“User Constraints”下面双击“Creat Timing Constraints”,打开Constraints Editor界面可以添加的约束包括“Timing Constraints”、“Group Constraints”和“Miscellaneous”三部分约束,根据需要添加时钟、输入输出端口等约束完成之后,约束结果将自动添加到 .ucf文件当中在本例中,由于设计比较简单,所以约束输入时钟信号的频率就可以了,如图2-10所示 第二章 开发环境与S3开发板 图2-10 使用Timing Constraints添加时序约束 第二章 开发环境与S3开发板 2.3.4 综合与实现综合与实现 1.综合过程.综合过程 综合就是针对输入设计以及约束条件,按照一定的优化算法进行优化处理,获得一个能满足预期功能的电路设计方案在FPGA设计时,工程师设计的文件是用硬件描述语言或者原理图形式来表示电路功能的。
综合工具将这些输入文件翻译成由FPGA内部逻辑资源(逻辑单元、RAM存储单元、时钟单元等)按照某种连接方式组成的逻辑连接(网表),并根据用户要求生成网表文件,这一过程称为综合过程XST为Xilinx自己的综合工具,对于Xilinx最新的芯片能够更好地支持,其最终生成的文件后缀名为 .ngc 用宏观的事物理解,综合过程就相当于设计电路板时画电路原理图的过程在设计电路板时,首先要画原理图原理图其实就是由一系列符号组成的;可以随便画一个符号代表一个器件,但是也是有一些规则必须遵循,比如代表符号和真实器件之间的管脚对应关系要一致 第二章 开发环境与S3开发板 2.实现过程.实现过程 实现(Implement)就是通过翻译、映射、布局布线等过程来完成设计的固化实现过程首先将综合成的网表(Netlist)文件,通过翻译变成所选器件的内部资源和硬件单元,如可配置逻辑块(CLB)、数字时钟单元(DCM)、存储单元(RAM)等,这个步骤称为翻译过程(Translate);然后找到对应的硬件关系,将设计与这些硬件资源关系一一对应起来,这又称为映射过程(Map);最后进行布局布线(Place&Route),这样设计基本上就可以完全固化到FPGA当中了。
实现过程如果用宏观的方式理解,就相当于完成原理图之后,开始调用器件库,如果没有原理图中的器件,那么就要找对应的器件,直到设计中所有的元件都能找到对应的器件(对应于翻译过程),接下来将其对应关系完全确定(对应于映射过程),最后进行布局布线,完成整块电路板的设计,提交厂家进行生产 第二章 开发环境与S3开发板 类似的FPGA实现也是这么一个过程,下面详细介绍FPGA实现过程中的每个环节 1) 翻译过程 翻译过程将网表文件和约束文件合并生成NGD(原始类型数据库)输出文件和BLD文件NGD文件包含了当前设计网表以及约束的所有信息,可用于下一步进行映射可用于翻译的输入文件包括EDN、EDF、EDIF、SEDIF格式的网表文件,以及UCF(用户约束文件)、NCF(网表约束文件)、NMC(物理宏库文件)、NGC(含有约束信息的网表)格式的约束文件 第二章 开发环境与S3开发板 2) 映射过程 映射过程将翻译过程生成的NGD文件映射为目标器件的特定物理逻辑单元,并保存在NCD(Native Circuit Description)文件中映射的输入文件包括NGD、NMC、NCD和NGM文件,输出文件包括NCD、PCF(物理约束文件)、NGM和MRP(映射报告)文件。
其中, NCD文件包含当前设计的物理映射信息;PCF文件包含当前设计的物理约束信息;NGM文件与当前设计的静态时序分析有关;MRP文件是映射的运行报告,主要包括映射的命令行参数、目标设计占用的逻辑资源、映射过程中出现的错误和告警、优化过程中删除的逻辑等内容 第二章 开发环境与S3开发板 3) 布局布线过程 布局布线过程通过读取当前设计的NCD文件,将映射后生成的物理逻辑单元在目标系统中放置和连线,并提取相应的时间参数布局布线的输入文件包括NCD和PCF模板文件,输出文件包括NCD、DLY(延时文件)、PAD和PAR文件在布局布线的输出文件中,NCD包含当前设计的全部物理实现信息,DLY文件包含当前设计的网络延时信息,PAD文件包含当前设计的输入输出(I/O)管脚配置信息,PAR文件主要包括布局布线的命令行参数、布局布线中出现的错误和告警、目标占用的资源、未布线网络、网络时序信息等内容第二章 开发环境与S3开发板 3.完成综合与实现.完成综合与实现 (1) 选择要综合的模块(设计的顶层模块) (2) 在过程管理区双击“Implement Design”,如图2-11所示,ISE工具会首先进行综合,然后执行Translate、Map和Place & Route。
在Synthesize-XST前面有一个由两个圆形箭头组成的小圆圈开始转动;如果发生错误,则出现一个带叉的红色小圆圈;如果有警告,综合结束之后,小圆圈变黄色,并且上面带有一个叹号综合的告警和错误都会显示在消息窗口 第二章 开发环境与S3开发板 2.3.5 生成配置文件并对生成配置文件并对FPGA进行配置进行配置 在实现完成之后,仅剩FPGA设计的最后一步—芯片编程 (1) 生成编程文件,只需在过程管理区中双击“Generate Programming File”即可完成,完成之后,该选项前面会出现一个打钩的圆圈,如图2-11所示,然后在ISE工程目录下产生一个以 .bit为后缀的位流文件 第二章 开发环境与S3开发板 图2-11 生成编程文件窗口 第二章 开发环境与S3开发板 (2) 点击“Configure Target Device”,进行器件配置,出现如图2-12所示的主界面;在主界面中间区域点击鼠标右键,并选择“Initialize Chain”选项,初始化JTAG链,将会扫描在JTAG链上所有的可配置器件,如图2-13所示;如果正确,则右键单击所要配置的器件,选择“Programming”进行编程;如果需要配置别的编程文件,则右键单击所要配置的器件,选择“Assign New Configuration File”,然后再进行编程。
配置成功之后,出现“Successfully”字样 第二章 开发环境与S3开发板 图2-12 Configure Programming Device界面 第二章 开发环境与S3开发板 图2-13 扫描JTAG链界面 第二章 开发环境与S3开发板 2.4 第三方开发工具第三方开发工具 2.4.1 ModelSim介绍介绍 ModelSim是业界最优秀的HDL语言仿真器,许多工程师将其作为FPGA/ASIC设计的RTL级以及门级电路仿真的首选ModelSim与其它仿真器相比,不仅具有人性化的图形界面和用户接口,为用户加快调试提供强有力的手段,同时具有强大的调试功能,如:先进的数据流窗口,可以迅速追踪到产生不定或者错误状态的原因;丰富的性能分析工具,可以帮助分析性能瓶颈,加速仿真;代码覆盖率检查,确保测试的完备;多种模式的波形比较功能;先进的Signal Spy功能,可以方便地访问VHDL 或者VHDL和Verilog混合设计中的底层信号;支持加密IP;可以实现与MATLAB的Simulink的联合仿真等 第二章 开发环境与S3开发板 ModelSim分几种不同的版本:SE、PE、LE和OEM,其中SE是最高级的版本,而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。
SE版和OEM版在功能和性能方面有较大差别,以Xilinx公司提供的OEM版本ModelSim XE为例,对于代码少于40 000行的设计,ModelSim SE 比ModelSim XE要快10倍;对于代码超过40 000行的设计,ModelSim SE要比ModelSim XE快近40倍另外,从仿真功能上,两个版本之间的差别也非常大,比如说,ModelSim SE版本支持SignalSpy,代码覆盖率检查、性能分析、数据流与X跟踪、波形比较、检查点复原、混合语言调试、Debug Detective等特性,而这些ModelSim XE都不支持,但是SE版本不自带Xilinx器件库文件,需要编译器件库在ModelSim当中鉴于两个版本在用法上相同,本节以ModelSim版本为例来介绍 第二章 开发环境与S3开发板 2.4.2 在在ModelSim中编译中编译Xilinx的器件库的器件库 1.关联.关联ISE和和ModelSim 需要将ModelSim和ISE软件关联之后才能在ISE中直接使用ModelSim进行仿真,避免了用户在ISE上开发完代码设计之后,另外建立工程进行ModelSim的仿真。
关联步骤如下: 运行ISE软件,在主界面中选择“Edit | Preference”菜单项,在弹出的“Preference”对话框中选择“Integrated Tools”选项卡该选项卡用于设定与ISE集成的软件的路径第一项的“Model Tech Simulator”就用于设定ModelSim仿真软件的路径,指定“Model Tech Simulator”选项为ModelSim安装路径下win32目录下的“”文件即可假如安装在“E:\ModelSim6.5”,则ModelSim仿真软件的路径为“E:\ModelSim6.5\win32\modelsim.exe”,如图2-14所示这样就设置好了ISE与ModelSim的关联 第二章 开发环境与S3开发板 图2-14 ModelSim与ISE的关联设置 第二章 开发环境与S3开发板 2.在.在ModelSim中编译中编译Xilinx的仿真库的仿真库 ModelSim SE版本身不带有任何FPGA厂家的仿真库,因此我们必须手动编译这些库Xilinx元件库的位置在ISE安装目录“\Xilinx\12.1\ISE\verilog\src\”的下面;有三个文件夹:simprims、unisims和XilinxCoreLib,里面有所有Xilinx FPGA的库。
下面介绍一种比较常用的手动编译这些库到ModelSim中的方法分为5步来完成: (1) 将ModelSim根目录下的的属性由只读改为可写; (2) 在ModelSim安装目录下新建一个名为library的文件夹,用来保存安装的Xilinx库; (3) 启动ModelSim,选择“File”/“Charge Directory”,选择刚才建立的library文件夹路径; 第二章 开发环境与S3开发板 (4) 选择“File”/“New”/“Library”命令,弹出“Creat a New Library”,在“Library name”中输入“simprims_ver”,同时在“Library Physical Name”栏也自动输入“simprims_ver”,单击“OK”按钮; (5) 在主窗口中选择“Compile”/“Compile”命令,弹出“Compile Source Files”,在“Library”的下拉列表中选择“simprims_ver”;然后在【查找范围】中选中“\Xilinx\12.1\ISE\verilog \src\ simprims”下面的全部文件,单击Compile进行编译,这时需要花一些时间等待编译结束,之后就可在ModelSim库中看到simprims库。
依同样的办法编译unisims和XilinxCoreLib库,完成之后,以后就可以在ModelSim中直接仿真ISE的工程 第二章 开发环境与S3开发板 2.4.3 ModelSim 功能仿真举例功能仿真举例 1.建立工程.建立工程 使用ModelSim建立工程主要包括5个基本步骤: (1) 选中或添加源文件点击开始→程序→,启动ModelSim,选择菜单“File New Poject”,打开“Create Project”对话框,如图2-15所示 第二章 开发环境与S3开发板 图2-15 ModelSim 新建工程窗口第二章 开发环境与S3开发板 首先在“Create Project”对话框中填写“Project Name”为“DivClk_Simu”;然后在“Project Location”栏中选择Project文件的存储目录(注意:ModelSim不可以为工程自动建立一个目录,这里我们最好是自己在Project Location中输入路径来为工程建立目录);接着用“Default Library Name”指定设计编译到哪个库中,默认为work,不需要修改,这样在编译设计文件之后,在WorkSpace窗口的Library中就会出现work库。
点击“OK”按钮确认,在ModelSim软件主窗口的工作区中即增加了一个空的Project标签,同时弹出一个“Add items to the Project”对话框,如图2-16所示,可以选中新建源文件或者将已经设计好的源文件添加到当前工程中 第二章 开发环境与S3开发板 图2-16 添加文件到工程向导示意图 第二章 开发环境与S3开发板 (2) 添加包含设计单元的文件在“Add items to the Project”对话框中利用“Add Existing File”或“Create New File”选项,可以在工程中加入已经存在的文件或建立新文件点击“Create Simulation”可以为工程添加仿真点击“Create New Folder”可以为工程添加新的目录这里点击“Create New File”,弹出如图2-17所示的界面,在“File Name”中输入“Div_Clk_Simu”作为文件的名称,“Add file as type”为输入文件的类型,我们选择“Verilog”;“Folder”为新建的文件所在的路径,“Top Level”为在我们刚才所设定的工程路径下。
点击“OK”按钮,并在“Add items to the project”窗口点击“Close”,关闭该窗口 第二章 开发环境与S3开发板 图2-17 添加新文件 第二章 开发环境与S3开发板 (3) 输入设计文件在“WorkSpace”窗口中出现了“Project”选项卡,在其中有“”,其状态栏有一个问号,表示未编译;双击该文件,出现“”的编辑窗口,在其中我们输入设计文件如下: module DivClk_Simu ( input wire clk , input wire reset, output wire divclk ); reg [4:0]counter; reg tempdivclk; 第二章 开发环境与S3开发板 always@(posedge clk , negedge reset) if(!reset) begin counter <= 5'b00000; tempdivclk <= 1'b0; end else if (counter >=5'b11000) begin counter <= 5'b00000; tempdivclk <= !tempdivclk; end else counter <= counter + 1; assign divclk = tempdivclk; endmodule 第二章 开发环境与S3开发板 (4) 编译文件。
点击“File”→“Save”,在弹出的“WorkSpace”窗口中的“DivClk_Simu”上点击右键,选择“Compile”→“Compile All”,如图2-18所示,如果编译成功,在信息窗口将出现一行绿色字符“Complie of was successful”,说明文件编译成功;如果编译有错误,会提示红色字符提示“Compile of failed with 1 error”,双击该提示行,将会弹出对话框,详细描述对应错误发生的位置,并提示用户修改错误 第二章 开发环境与S3开发板 图2-18 ModelSim软件中的工程编译窗口 第二章 开发环境与S3开发板 (5) 确认编译结果文件编译完后,用鼠标点击“Library”标签栏;在标签栏中用鼠标点击work库前面的“+”,展开work库,就会看到编译了的设计文件 第二章 开发环境与S3开发板 2.仿真.仿真 1) 手动添加激励仿真 (1) 形成仿真界面点击“Simulate”→“Start Simulate”,出现如图2-19所示的界面,展开“Design”选项下的work库,并选中其中的“DicClk_Simu”,点击“OK”按钮,出现仿真界面。
为了观察波形,选择“View<窗口名>”,调出“signal”、“list”和“wave”窗口也可以通过在主窗口命令行操作区的VSIM提示符下输入命令“view signals list wave”(回车)来观察波形 第二章 开发环境与S3开发板 图2-19 开始仿真界面 第二章 开发环境与S3开发板 (2) 向“Wave”窗口添加信号在“Objects”窗口中,选择需要添加在“Wave”窗口的信号,单击右键,在弹出的菜单中选择“Add”→“to Wave”选项中的“Selected Signals”,将设计中用到的所有信号都列在“Wave”窗口中,如图2-20所示 第二章 开发环境与S3开发板 图2-20 在Wave窗口中添加信号 第二章 开发环境与S3开发板 (3) 手动添加激励由于我们没有写“TestBench”文件对原设计加激励,所以需要手动添加激励在主窗口中输入命令对信号添加驱动首先为reset信号输入驱动:force reset 0 0, 1 10000,然后为clk添加驱动:force clk 0 0,1 10000 –r 20000其中force为命令,clk表示为clk信号添加驱动,0 0 表示在零时刻该值为0,1 10000表示在10 ns处值为1,-r 20000表示在20 ns处开始重复。
也就是说,我们输入的时钟为50 MHz同样可以分析reset信号是在零时刻值为0,10 ns处开始一直为1这样一来,所有信号的驱动就添加完毕 第二章 开发环境与S3开发板 (4) 开始仿真仿真的命令为run,后面跟时间单位,或者为run –all,表示一直仿真,直到仿真结束输入run 200us,就可以出现如图2-21所示的波形仿真完成之后,确认无误,可以退出仿真;如果有错误,则返回源码区,进行源码修改,然后再重复以上步骤进行仿真 图2-21 仿真结果 第二章 开发环境与S3开发板 2) 使用TestBench对设计进行仿真 手动添加输入激励在设计比较简单的情况下比较方便,但是在很多情况下,尤其要考虑到验证情况比较复杂时,都需要编写TestBench为设计添加激励比如,设计两个四位数相加的加法器,要考虑到所有可能的输入,手动添加就过于繁琐下面我们为刚才的分频电路添加TestBench 选择File→New→Sourse→Verilog命令,新建Verilog文件,编写TestBench文件如下: 'timescale 1ns/1ps module TB_DivClk(); reg clk; reg reset;第二章 开发环境与S3开发板 wire divclk; parameter ClkPeriod = 200; DivClk_Simu DivClk_Simu_0( .clk(clk), .reset(reset), .divclk(divclk) ); initial begin reset = 0; #2000; reset = 1; end initial begin clk = 0; forever clk = #(ClkPeriod/2) ~clk; end endmodule 第二章 开发环境与S3开发板 保存文件名为“”,在Project栏空白处点击右键,选择“Add to Project→Existing File”,把刚才保存的“”文件添加到本工程。
选择“”和“”两个文件,点击“Compile”→“Compile All”进行编译编译成功之后,就可以直接进行仿真了仿真过程不再冗述,结果如图2-22所示 仿真结束之后,选择“Simulate”→“End Simulate”,结束仿真 第二章 开发环境与S3开发板 图2-22 仿真结果波形图 第二章 开发环境与S3开发板 2.4.4 Synplify Pro介绍介绍 Synplify和Synplify Pro是Synplicity公司开发的专门针对FPGA和CPLD的逻辑综合工具,前者为简装版,后者包含了前者所有功能我们主要以Synplify Pro来讲解虽然ISE自带有综合工具,但是相比起来,Synplify Pro软件具有更好的综合性能和更高的速度优势,无论在系统运行频率上,还是物理面积上,都更胜一筹因此,Synplify Pro软件成为FPGA开发工程师非常青睐的一款综合工具Synplify Pro工具支持大部分FPGA公司的产品,这些公司有Xilinx、Altera、Actel、Lattice公司等 第二章 开发环境与S3开发板 2.4.5 关联关联ISE和和Synplify Pro ISE和Synplify Pro的关联比较简单。
和ModelSim的关联是一样的,同样需要将SynplifyPro软件和ISE软件关联后才可以直接在ISE 中调用Synplify Pro进行综合 运行ISE软件,在主界面中选择“Edit”→“Preference”菜单项,进行“Preference”设定,在弹出的“Preference”对话框中选择“ISE General”菜单下的“Integrated Tools”选项卡该选项卡用于设定与ISE集成的软件的路径右边第三项的“Synplify Pro”就用于设定Synplify Pro仿真软件的路径,如图2-23所示 第二章 开发环境与S3开发板 图2-23 ISE集成工具设定页面 第二章 开发环境与S3开发板 2.4.6 Synplify Pro使用流程使用流程 在讲述ISE自带综合工具XST时,已经讲述过综合的概念综合工具的主要任务是将HDL代码转化为目标FPGA器件对应的门级网表其过程包括以下3个步骤:① 把HDL源代码编译成已知的结构元素;② 运用相关算法,对设计进行面积优化和时延优化;③ 将设计映射到指定厂家的目标器件上,并执行一些附加的优化措施,包括根据器件供应商提供的专用约束进行优化等。
具体过程如图2-24所示 第二章 开发环境与S3开发板 图2-24 Synplify综合流程 第二章 开发环境与S3开发板 随着版本的不断升级,Synplify Pro图形界面越来越人性化下面按照图2-25中数字所标的次序,对其界面作简要介绍 (1) 图中①表示Synplify的工程区,在这个窗口详细显示设计者创建工程所产生的各种结果文件同时,如果综合完成后,每个源文件有多少错误或者警告都会在这个窗口显示出来 (2) 图中②表示信息栏,在这个窗口中设计者可以通过TCL命令完成相应的功能,同时在信息栏中选择“Messege”还可以实时观察编译综合信息 第二章 开发环境与S3开发板 (3) 图中③表示观察窗口,在这里可以观察设计被综合后的一些特性,比如设计元件寄存器和查找表以及I/O所占用的资源等 (4) 图中④是状态窗口,它表示现在Synplify所处的状态,平时为闲置状态,在综合过程中会显示编译状态、映射状态等,综合结束之后显示“Done”,以及产生的“warnings”和“notes”数量 (5) 图中⑤所示的一些复选框,可以对将要综合的设计的一些特性进行设置。
Synplify可以根据这些设置对设计进行相应的优化工作最上面是运行按钮,当一个工程加入之后,按这个“Run”按钮,Synplify就会对工程进行综合 第二章 开发环境与S3开发板 (6) 图中⑥所示的是Synplify的工具栏 Synplify Pro使用流程如下: 1) 形成Synplify Pro界面 形成的Synplify Pro界面如图2-25所示(不含圈号数) 第二章 开发环境与S3开发板 图2-25 Synplify Pro综合工具示意图 第二章 开发环境与S3开发板 2) 建立工程和添加源文件 打开“Synplicity Pro”,启动“Synplify Pro”缺省情况下,Synplify将自动打开上次打开的工程如果想新建一个工程,则可以选择“Close Project”,关闭当前工程;点击“File”→“New”,出现如图2-26所示的对话框,选择“Project File”,填写所要建立工程的名称以及工程文件存储路径,然后点击“OK”按钮第二章 开发环境与S3开发板 图2-26 新建工程界面 第二章 开发环境与S3开发板 新建工程之后,需要将源文件添加进来。
点击“Add Files”按钮,添加源文件和约束文件Synplify Pro默认把最后编译的文件的模块名称作为顶层设计,所以需要把顶层设计文件用左键拖拉到源文件菜单的末尾处,或者点击“Implementation Options”按钮,在Verilog属性页中设置顶层模块的名称 第二章 开发环境与S3开发板 3) 设置工程属性 设置工程属性,点击“Implementation Option”按钮,出现属性页对话框,如图2-27所示下面介绍常用的芯片设置、综合选项、约束设置以及实现结果选项等参数的配置第二章 开发环境与S3开发板 图2-27 设置器件属性页 第二章 开发环境与S3开发板 “FPGA芯片信息”:打开“Device”属性页,分别设置器件厂家、器件型号、速度级别和封装信息根据设计的速度和面积要求,可以设置最大扇出系数,缺省是10000根据该工程所属模块是否和片外有信号联系,选中或者不选中“Disable I/O Insertion”;如果选中该选项,则Synplify Pro禁止为输入输出信号加缓冲,缺省为不选 第二章 开发环境与S3开发板 “设置通用综合选项”:点击“Options”属性页,设置综合选项。
对于综合来说,此项目设置尤为关键,详细解释如下: (1) “FSM Compiler”选项:是专门支持有限状态机优化的内嵌工具如果选上此项,会在综合过程中启动有限状态机编译器,对设计中的状态机进行优化 (2) “Use FSM Explorer”选项:即可以在尝试不同的状态机优化方案之后选定最佳结果,然后用FSM viewer工具观察状态机的状态转移过程 (3) “Resource Sharing”选项:启动资源共享综合工具在综合过程中,会尽量将资源进行复用,这样一来能节约很多资源,因此在设计能够满足时钟频率要求的情况下,一般选中来节省资源 第二章 开发环境与S3开发板 (4) 选中“Pipelining”选项:启动流水线综合,将较大的组合逻辑用寄存器分割成若干较小的逻辑,减少从输入到输出的时延对于FPGA来说,可以自动优化乘法器、ROM等结构,提高系统的工作频率 (5) “Retiming”选项:在不改变逻辑功能的前提下,自动用寄存器分割组合逻辑,在组合逻辑电路中插入适当的时延,提高系统工作频率,本质上属于寄存器的移动,使其更能够满足时序特性选中Retiming就自动选中Pipelining,因为要实现Retiming,必须要支持Pipelining。
第二章 开发环境与S3开发板 “设置约束选项”:点击“Constraints”属性页,设置模块最高工作频率以及添加约束文件(.sdc)过严或是过松的约束都达不到最佳的效果一般可先尝试通用的约束,如时钟扇出限制等;如果没有达到要求,可加入一些严格的具体约束,同时注意放松一些可以放松的约束需要注意的是,综合约束的结果只是估计值,应该以布局布线的结果为准 “设置实现结果”:点击“Implementation Results”属性页,设置综合结果放置的目录、综合结果的文件名称默认将“Write Vendor Constraint File”和“Write Verification Interface Format”选项选中 “设置Timing Report”:点击“Timing Report”属性页,设置“Number of Critical Paths”和“Number of Start/End Points” “设置Verilog 选项”:设置“Top Level Module”为设计中顶层模块的名称 第二章 开发环境与S3开发板 4) 添加时序(约束) 定义时间约束是为了让综合结果满足预期的时序要求。
时间约束通常分为两类:一是通用时间约束,用于目标结构的时序要求;二是黑盒时间约束,用于在设计中指定为黑盒的模块时间约束在Synplify Pro中,可通过SCOPE、约束文件以及综合属性和指示等3种方法添加时序本节主要介绍利用约束文件添加约束的方法 约束文件采用Tcl语言,以后缀名 *.sdc 保存,用来提供设计者定义的时序约束、综合属性以及FPGA生产商定义的属性等约束文件既可以通过SCOPE创建编辑,也可以使用文本编辑器创建编辑,可被添加到工程窗口的代码菜单中,也可以被TCL脚本文件调用 第二章 开发环境与S3开发板 5) 运行综合以及结果查看 Synplify Pro运行很简单,点击“Run”直接运行首先进行“Compling”编译程序,然后进行“Map”,生成后缀名为 .edf的文件,可以直接在ISE中实现以 .srr为后缀名的文件是运行期间产生的综合报告,可以帮助查看编译报告、映射报告、时钟约束时序匹配报告以及利用资源报告等 第二章 开发环境与S3开发板 本本 章章 小小 结结 本章详细介绍了Xilinx FPGA 开发常用工具,包括软件的主要特性、安装流程,以及使用的综合、实现和配置流程,详细介绍了综合、翻译、映射、布局布线各个过程参数的意义以及设置,帮助读者快速掌握ISE软件的使用。
另外,介绍了ModelSim仿真软件和Synplify Pro综合软件的使用,并通过例程演示这两款软件的使用方法限于篇幅,本章仅介绍每款软件的基本使用方法,更加高级的应用,希望读者在实践中进一步体会。
