分类:
2009-11-12 19:44:48
http://www.eefocus.com/article/08-03/37756s.html
4.5.1 Synplify Pro软件的使用
在FPGA设计中,许多设计人员都习惯于使用综合工具Synplify
Pro。虽然ISE软件可以不依赖于任何第三方EDA软件完成整个设计,但Synplify
Pro软件有综合性能高以及综合速度快等特点,无论在物理面积上还是工作频率都能达到较理想的效果。因此如何在ISE中调用Synplify
Pro综合工具,并进行无缝的设计连接仍然是设计人员需要解决的一个设计流程问题。
1. Synplify Pro综合软件的安装
下面介绍Synplify Pro的安装步骤。运行安装程序,欢迎界面过后,将出现如图4-89所示的安装选择界面,可以根据自己的需要选择相应的组件。然后按照默认选项继续即可完成安装。
图4-89 Synplify的安装选择界面
在Synplify安装完后,还需要安装Identify。在开始 程序 Synplify菜单栏中会出现“Identify 211
Installation”,双击即开始安装,一般来讲,可以按照默认选项继续,直至安装完毕。安装完之后需要添加授权的License文件,才能正常使
用。
2. 关联ISE和Synplify Pro
完成了Synplify Pro安装后,需要将其和ISE软件关联后才能使用Synplify
Pro进行综合。运行ISE软件,在主界面中选择“Edit|Preference”菜单项,进行“Reference”设定如图4-90所示。在弹出的
Preference对话框中选择“Integrated Tools”选项卡。该选项卡用于设定与ISE集成的软件的路径,第三项的Synplify
Pro就用于设定Synplify Pro仿真软件的路径,如图4-91所示。
图4-90 选择Preference菜单 项 图4-91 ISE集成工具设定页面
单击Synplify Pro文本框后面的按钮,会弹出一个文件选择对话框,选择Synplify Pro安装路径下bin目录下的“synplify_pro.exe”文件即可。
注意:在“Integrated Tools”选项卡中还可以看到其他几个可以和ISE进行无缝链接的第三方软件,如ModelSim、synplifyLeonardoSpectrum、Chip Scope Analyzer等软件。
3. Synplify Pro的使用方法简介
Synthesis 简单地说就是将HDL代码转化为门级网表的过程,其对电路的综合包括以下3个步骤:首先,HDL compilation
把HDL的描述编译成已知的结构元素;其次,运用一些算法,对设计进行面积优化和减小时延。在没有目标库的情况下,Synplify只能执行一些最基本的
优化措施;最后,将设计映射到指定厂家的特定器件上,并执行一些附加的优化措施,包括根据由器件供应商提供的专用约束进行优化。工程文件以*.prj
作为扩展名,以tcl 的格式保留了以下信息:设计文件、约束文件、综合时开关选项的设置情况等。
1)Synplify Pro用户界面介绍
Synplify Pro是标准的windows应用程序,所有功能均可以通过菜单选择来实现。下面按照图4-92中数字所标示的次序,对其界面作简要介绍。图中1表示 Synplify的主要工作窗口,在这个窗口中可以详细显示设计者所创建工程的详细信息,包括工程的源文件,综合后的各种结果文件。同时如果综合完成后, 每个源文件有多少错误或者警告都会在这个窗口显示出来。图中2表示TCL窗口,在这个窗口中设计者可以通过TCL命令而不是菜单来完成相应的功能。图中3 表示观察窗口,在这里可以观察设计被综合后的一些特性,比如最高工作频率等。图中4是状态窗口,它表示现在Synplify所处的状态,比如下图表示 Synplify处于闲置状态,在综合过程中会显示编译状态、映射状态等等。图中5所示的一些复选框,可以对将要综合的设计的一些特性进行设置。 Synplify可以根据这些设置对设计进行相应的优化工作。图中6是运行按钮,当一个工程加入之后,按这个RUN 按钮,Synplify就会对工程进行综合。图中7所示的是Synplify的工具栏。
图4-92 Synplify Pro综合工具示意图
2) 建立工程、添加源文件
建立工程首先需要打开Synplicity Pro。点击“开始”菜单,依次选择“程序Synplicity Synplify Pro”,启动Synplify Pro。在工程窗口中包含了以下内容:源文件信息、结果文件信息和目标器件信息。
缺省情况下,当Synplify启动时将自动建立一个新工程。这时,可以选择将工程,以新名字保存。如果结束了一个工程的操作,想新建一个工程,则可以选
择“FILE
NEW”;然后选择工程文件,就可以建立一个新的工程。这项操作也可以通过工具条来进行,单击工具条的P图标,则在弹出对话框选择工程文件即可。
新建工程之后,需要将源文件添加进来。点击“ADD FILE”按钮。添加源文件和约束文件。Synplify
Pro把最后编译的“module/entity and the
architecture”作为顶层设计,所以需要把顶层设计文件用左键拖拉到源文件菜单的末尾处或者点击“Impl
Options”按钮,在Verilog属性页中设置顶层模块的名称。
3)工程属性设置
添加完源文件后需要设置工程属性,点击“Impl option”按钮出现属性页对话框,如图4-51所示。下面介绍常用的芯片设置、综合选项、约束设置以及实现结果选项等参数的配置。
图4-93 设置器件属性页
4)时序约束
定义时间约束是为了让综合结果满足预期的时序要求,时间约束通常分为两类:一是通用时间约束,用于目标结构的时序要求;二是黑盒时间约束,用于在设
计中指定为黑盒的模块时间约束。在Synplify
Pro中,可通过SCOPE、约束文件以及综合属性和指示等3种方法添加时序。本节主要介绍利用约束文件添加约束的方法。
约束文件采用Tcl语言,以*.sdc 保存,用来提供设计者定义的时序约束、综合属性以及FPGA生产商定义的属性等。约束文件既可以通过SCOPE创建编辑也可以使用正文编辑器创建编辑可被添加到在工程窗口的代码菜单中也可以被Tcl脚本文件调用。
5)综合属性和指示
(1)综合属性和指示简介
综合指示用于控制综合中编译阶段的设计分析,因而必须加入到源代码中。属性是在编译后读入的,因而既可以在源程序中说明,也可以在约束文件中说明。约束文件提供了较大的灵活性,使得可以仅修改约束而不用重新编译源程序,因而是强烈推荐采用的方法。
在Verilog源程序中,说明指示或属性采用注释的方法语法如下:
// synthesis directive|attribute = "value"
或 /* synthesis directive |attribute = "value" */
(2)综合指示
综合指示用于通知Synplify Pro软件某些用户定制的设置,常以注释的形式出现在源代码后面,Synplify软件会自动识别相应的说明,按照用户指令完成综合。常用的综合只是如下:
① black_box_pad_pin
声明用户定义的黑盒管脚作为外部环境可见的I/O pad。如果有不止一个端口列在双引号内,则以逗号分开。由于Synplify提供了预定义的I/Os,一般不需要这一属性。其语法如下:
object /* synthesis syn_black_box black_box_pad_pin = "port_list" */ ;
例如:
module BS(D,IN,PAD,Q) /*synthesis syn_black_box black_box_pad_pin="PAD" */;
② block_box_tri_pins
声明黑盒的一个输出端口是三态,如不止一个列在双引号内,则以逗号分开。其语法如下:
object /* synthesis syn_black_box black_box_tri_pins = "port_list" */ ;
例如:
module BBDLHS(D,E,GIN,GOUT,PAD,Q) /* synthesis syn_black_box
black_box_tri_pins="PAD" */ ;
③ full_case
仅用于Verilog中的case语句,表明所有可能的状态都已经给出,不需要其他逻辑保持信号的值,其语法如下:
object /* synthesis full_case */
其中object可以是case、casex、casez、statements和declaration。
④ parallel_case
仅用于Verilog中case语句,表明生成一个并行的多路选择结构而不是一个优先译码结构。其语法如下:
object /* synthesis parallel_case */
其中object可以是case、casex、casez、statements和declaration。
⑤ syn_block_box
说明一个模块或组件为黑盒,仅利用其界面进行综合,而不管内部是否为空,也不进行优化。一般应用于厂家原语或宏或IP等用户定义的宏。其语法如下:
object /* synthesis syn_black_box */ ;
其中object可以是module和declaration。
⑥ syn_encoding
强制选择自动机实现的方式,其可选值(value)如下:
default:综合根据状态的数量选择编码方式编码方式可以是onehot gray sequential;
onehot:采用onehot编码方式;
gray:采用格雷码;
sequential:采用自然码;
safe:如果不能到达任一个状态时让其回到复位态。
syn_encoding的语法如下:
object /* synthesis syn_encoding = "value" */ ;
其中object是状态寄存器定义。
⑦ syn_isclock
说明黑盒的一个输入是时钟信号。对名字为clk 、rclk 、wclk的黑盒输入信号,软件自动当作时钟,可以用这个属性说明任意输入信号为时钟信号。其语法如下:
object /* synthesis syn_isclock = 0|1 */ ;
其中object是黑盒的input port。
例如:
module ram4(myclk, out, opcode, a, b) /* synthesis syn_black_box*/;
output [7:0] out;
input myclk /* synthesis syn_isclock = 1 */;
input [2:0] opcode;
input [7:0] a, b;
/* Other coding */
⑧ syn_keep
保证被指定的wire在综合中保持不动,不会被优化掉,常用于用define_multicycle_path或define_false_path,用
了-through
选项。如果你用了这一属性,将生成一个keepbuf,可对其定义时间约束,且这个Buffer只占用一个位置,不出现在门级网表里。其语法如下:
object /* synthesis syn_keep = 0|1 */ ;
其中object是wire或reg声明。
⑨ syn_noprune
用来保持一个或多个component的实例,而不管其输出能否完成映射。一般在没有该指示的情况下,未用输出端口的实例会从EDIF文件中删除。syn_noprune可被置于约束文件中,其语法如下:
.sdc文件中:
define_attribute {module|instance} syn_noprune {0|1}
Verilog中:
object /* synthesis syn_noprune = 0|1 */ ;
其中object可以是module、declaration,也可以是实例。
⑩ syn_preserve
用在某些独立的寄存器上或模块,使模块中的所有寄存器在优化时保持不动,也可用于保持某个自动机在优化时不动。其语法如下:
object /* synthesis syn_preserve = 0|1 */ ;
其中object可以是寄存器定义信号,也可以是Module。
用于与其他综合软件的兼容,这两者经常配对使用。在这两个指示中间的所有代码将在综合时被忽略,也可以用于在源代码中插入一段仿真代码。其语法如下:
/* synthesis translate_off */
综合时忽略的代码
/* synthesis translate_on */
6)综合报告解读
综合报告主要由3部分组成:编译报告、映射优化报告以及时序报告,但是该报告是冗长的,不容易快速找出用户所关心的结果。因此,Synplify公司提供
了综合报告观察窗,如图4-92中第3部分所示,可从综合报告文件中取出重要的信息。该窗口的使用非常简单,点击空白的参数显示栏,在下拉栏中选择要查看
的项目,则会在同行的右侧显示出结果,如图4-94所示。
图4-93 Synplify综合结果示意图
4.5.2 ModelSim软件的使用
ModelSim软件是一款强大的仿真软件,具有速度快、精度高和便于操作的特点,此外还具有代码分析能力,可以看出不同代码段消耗资源的情况。其功能侧重于编译和仿真,不能制定编译的器件和下载配置的能力,所以需要和ISE等软件关联。
1.ModelSim 仿真软件的安装
下面介绍一下ModelSim的安装步骤。
1)运行安装程序后,出现图4-94所示的界面,如果拥有有效的License,可以选择完全版(Full Product)安装,反之,则应当选择评估版(Evaluation Edition)安装。
图4-94 ModelSim版本选择窗口
2)选择完安装类型之后,下一个步骤就是设定安装路径,如图4-95所示。
图4-95 ModelSim安装路径选择窗口
3)如果选择的是完全版本,安装之后会出现Liscense Wizard对话框,如图4-96所示。
图4-96 ModelSim软件License管理向导
4)单击Continue按钮后,会出现License文件选择的对话框,选择有效的License文件。单击OK按键后,系统会自动进行一系列的有效性检查,只有合法的License文件,才能使ModelSim正常工作。
2.关联ISE和ModelSim
完成了ModelSim安装后,需要将其和ISE软件关联后才能使用ModelSim进行仿真。运行ISE软件,在主界面中选择
“Edit|Preference”菜单项,进行Reference设定如图4-4所示。在弹出的“Preference”对话框中选择
“Integrated Tools”选项卡。该选项卡用于设定与ISE集成的软件的路径,第一项的“Model Tech
Simulator”就用于设定ModelSim仿真软件的路径,如图4-5所示。 单击“Model Tech
Simulator”文本框后面的按钮,会弹出一个文件选择对话框,选择ModelSim安装路径下win32目录下的“modelsim.exe”文件
即可。
3. 在ModelSim中指定Xilinx的仿真库
ModelSim SE版在发行时是不带任何FPGA厂家的仿真库,因此用户必须手动编译这些库,由此面临的一个问题就是怎样建立各FPGA器件的仿真库,目前各FPGA厂家都支持用户编译库,所以实现比较简单。
在ModelSim中编译Xilinx仿真库有很多方法,下面介绍一种比较常用的方法,分为3步来完成。
4. ModelSim使用方法简介
本节主要简单介绍ModelSim SE 6. 6.2b的使用方法,主要包括建立工程和基本Verilog仿真,更多的操作方法需要在实际应用中熟悉并掌握。
1)建立工程
使用ModelSim建立工程主要包括5个基本步骤:
<1>启动ModelSim,选择菜单“File New Poject”,会打开“Creat
Project”对话框,如图4-97所示。在“Creat Projec”t对话框中填写“Project
Name”为“test”,然后在“Project Location”栏中选择Project文件的存储目录,保留“Default Library
Name”的设置为work。点击OK按键确认,在ModelSim软件主窗口的工作区中即增加了一个空的Project标签,同时弹出一个“Add
items to the Project”对话框,如图4-98所示。
图4-97 ModelSim新建工程窗口 图4-98 添加文件到工程向导示意图
<2>. 添加包含设计单元的文件。直接点击Add items to the Project对话框以后,在对话框中利用“Add
Existing File”或“Create New File”选项,可以在工程中加入已经存在的文件或建立新文件。本节我们选择“Add
Existing File”,弹出“Add file to the
Project”对话框,如图4-99所示。点击对话框中的Browse按键,打开ModelSim安装路径中的examples/tutorials
/verilog/compare/目录,选取sm.v和sm.v文件(选中多个文件时,只需要一直按住Ctrl按键,用鼠标点击即可),再选中对话框下
面的“Reference from current location”选项,然后点击OK按键确认。
图4-99 ModelSIm添加文件选项示意图
<3>.在工作区中的Project标签页中可以看到新加入的文件,单击右键,选取“Compile Compile All”命令对加入的文件进行编译,如图4-100所示。
图4-100 ModelSim软件中的工程编译窗口
<4>. 两个文件编译完后,用鼠标点击“Library”标签栏。在标签栏中用鼠标点击work库前面的“+”,展开work库,就会看到两个编译了的设计单元。如图4-101。
图4-101 编译后的设计单元示意图
<5>. 导入设计单元。双击Library标签页中的“test_sm”,在工作区中将会出现sim标签,并在右边的对象窗口列出了test_sm单元所用到的信号,如图4-102所示。
图4-102 将test_sm模块加入工作区示意图
到此,一个工程就已经建立好了,接下来的就是开始运行仿真、分析和设计调试了。选择“File Close Poject”可以关闭当前目录。
2)基本Verilog仿真
在准备仿真的时候,需要完成(1)中的所有步骤。然后继续进行下面的步骤:
<1>. 通过选择“View <窗口名>”调出signal、list和wave窗口。 也可以通过在主窗口命令行操作区的VSIM提示符下输入下面的命令:view signals list wave(回车)
<2>. 向wave窗口添加信号。在signal窗口中,单击右键,在弹出的菜单中选择“Add to Wave”选项中的“Signal in design”,将设计中用到的所有信号都列在Wave窗口中,如图4-103所示。
图4-103 在Wave窗口中添加信号
<3>. 导入设计的时候,会在工作区打开一个新的sim标签,点击“+”展开设计层次结构,可以看到实例test_sm、sm等模块。点击sim标签中的顶层行保证test_sm模块显示在source窗口中。
<4>. 点击主窗口工具条的Run启动仿真,默认仿真长度为100ns。或者在命令行输入run。可以在仿真途中点击“Break”中断运行,在source窗口中查看中断时执行的语句。
<5>. 仿真完成,观察仿真波形如图4-104。确认无误后退出仿真,如果有错则返回source区域修改代码。
图4-104 test_sm模块的仿真结果示意图
4.5.3 Synplify Pro、ModelSim和ISE的联合开发流程
利用Synplify
Pro、ModelSim和ISE进行联合开发的步骤基本如下:当工程设计完成后,首先需要利用ModelSim软件完成功能仿真,然后利用
Synplify
Pro进行综合优化,再在ISE中完成映射与布局布线,并借助于ModelSim完成布局布线后的时序仿真,最后在ISE中完成.bit文件的生成和
FPGA芯片的配置。
通常上述流程有两种实现方法:第一,将前两者作为ISE的第三方插件,在ISE中通过按键自动调用;其次,就是通过相应的接口文件,手动完成各个流程。自动调用比较简单,只需要在ISE中进行简单的设计即可。
1. 自动调用流程
完成了Synplify
Pro和ModelSim的安装,并在集成工具设定页面完成与ISE的关联后,如图4-91所示,单击ModelSim、Synplify
/Synplify Pro文本框后面的按钮,会弹出一个文件选择对话框,选择ModelSim、Synplify /Synplify
Pro安装路径中bin目录下的*.exe文件即可。
需要注意的是,并不是任意的ISE版本和任意的ModelSim、Synplify/Synplify
Pro版本都可以实现无缝连接,只有在ISE发布后出现的第三方软件才能和ISE无缝连接,否则Synplify/Synplify
Pro软件只能够用于综合逻辑,而不能识别Xilinx提供的IP
core,ModelSim则不能用于嵌入式开发环境(EDK)设计的仿真。根据个人操作的结果,和ISE 9.1匹配的Synplify
/Synplify Pro应当是8.8及其更高版本,相应的ModelSim应该为6.1f以后的版本。
完成了上述设定后,就可以直接在设计中调用ModelSim和Synplify。在工程管理区的设计芯片上,点击右键,选择“Property”命令,即
可打开用户设计的综合和仿真工具选择界面,如图4-105所示。在“Synthesis
Tool”的下拉框中选择Synplify(Verilog)、在“Simulator”中选择ModelSin-SE Mixed。
图4-105 设计工具选择界面
2. 手动调用
由于ModelSim只是完成功能验证,也ISE没有直接的数据交互,手动操作就是分开单独操作。
手动调用Synplify Pro的方法比较灵活,但操作起来比较麻烦,用户可根据需要自行选择。首先单独启动Synplify
Pro完成综合过程,再输出符合ISE格式的EDIF网表,在设置工程属性时选择EDIF设计流程,ISE仅完成网表的转换、映射和布局布线等操作。同时
可在Synplify Pro中添加时序约束。
综合完成后,生成的后缀为.edif的文件就是综合输出的重要文件,是实现过程的输入,直接将其导入ISE即可。
4.5.4 ISE与MATLAB的联合使用
本节主要介绍MATLAB设计、ISE实现以及二者联合测试的FPGA开发流程,这是全书的核心思想之一,也是目前最流行的设计方法。
MATLAB软件是MathWorks公司的核心产品,具有用法简单、扩展性好、资源库丰富以及与其他软件接口方便的特点,已成为从事电子信息和信号处理
领域人员必备的工具软件之一。MATLAB和ISE的联合使用主要通过以下两个途径来实现:即MATLAB辅助ISE的方法,以及利用接口软件
System Generator的方法。本书主要围绕着第一种方法展开讨论,但System
Generator作为一种新兴的设计模式,具有强大的发展势头,这里对其也作了简单介绍,关于System
Generator的详细讨论将在第8章展开。
1. MATLAB辅助ISE完成FPGA
所谓辅助,就是利用MATLAB来加速浮点算法的实现和功能测试。即在进行FPGA设计之前,先用MATLAB实现浮点算法,分析出算法的瓶颈所在,将程
序的串行结构改造成并行结构,接着利用MATLAB完成定点仿真,得到满足性能需求的最小定点位宽以及中间步骤计算结果的截取范围,然后在ISE中完成设
计。最后再利用MATLAB的定点仿真结果对设计进行功能验证,整个流程如图4-106所示。
图4-106 MATLAB辅助ISE完成设计的流程图
关于怎样完成定点仿真以及模块输出结果截取的原理和方法将在第5章中展开详细关系讨论。此外,利用MATLAB对FPGA设计进行功能仿真是比较关键的,下面介绍如何将MATLAB和ModelSim结合起来使用。
首先,在MATLAB中产生仿真所需的输入信号,以十六进制的形式存放在数据文件中,通常放在后缀为.txt的文本文件中;其次在ModelSim中用
Verilog编写仿真测试文件,并通过系统函数$readmemh将上述仿真数据文件中的测试向量读入,在ModelSim中做功能仿真和时序仿真,并
调用$fopen函数打开另外一个数据文件,用$fdisplay函数将仿真结果写入;再次,在MATLAB中将ModelSim仿真输出数据文件中的数
据读入一个数组中,可以作图分析或者利用统计手段来分析。此外,还可以将ModelSim的仿真输出与MATLAB的浮点性能作对比,来验证设计的性能。
这样比利用其他方式要方便、直观,并且具有更高的正确性。
下面举例介绍Verilog语言中文件输入/输出函数的使用方法。
1)系统函数$fopen用于打开一个文件,并返回一个整数的文件指针。然后,$fdisplay就可以使用这个文件指针在文件中写入信息。写完后,用$fclose关闭文件。
其语法格式为:
integer
$fwrite(
$fclose(
例如:integer W_file; //定义文件指针
W_file = $fopen("W_file.txt");
$fdisplay (W_file, "@%h\n%h", a, b);
$fclose (W_file);
以上语句将“a”和“b”分别显示在”中的两个%h位置,并写入Write_out_file指针所指的文件W_file.txt中。
2)读文件操作通过$readmemh和$readmemb来完成,分别对应的数据文件为16进制和二进制。其语法格式为:
reg [
$readmemh ("
例如:reg [15:0] c [0:15];
$readmemh (“R_file.txt”, c);
上例就是将R_file中的数据读入数组c中,然后就可以直接使用这些数据了。其中数据文件的格式为:
@2c
45
其中,@2c表示地址,为16进制数,45表示该地址的数据。
2. System Generator工具简介
System Generator工具由MathWorks 与 Xilinx 合作开发而成,DSP 设计人员可使用 MATLAB 和
Simulink 工具在 FPGA 内进行开发和仿真来完善 DSP 设计。新型8.2版本System
Generator使DSP系统和算法开发商不用写VHDL或Verilog编程,只需要利用MATLAB 及 Simulink
来开发他们的设计。一旦浮点建模完成,设计工程师采用Xilinx的比特及周期精确工具箱对其进行量化并自动生成HDL/RTL、用于Xilinx
FPGA的网表或完整的比特流,包括新的Virtex-5 LX 和
LXT器件。最后,设计工程师在Simulink环境内采用高带宽硬件环境来验证并调试实际FPGA上的设计。
System Generator的关键特性主要包括:
一个典型的System Generator开发实例如图4-107所示,图中形如Xilinx公司标志的图标就是System Generator,只需要双击图标,就可以将浮点算法自动转化成FPGA实现。Xilinx公司网站上提供了System Generator完整的使用手册和丰富的实例,读者如有兴趣,可自行阅读。
图4-107 一个典型的System Generator开发实例