synplify pro 2015是Synopsys公司推出的一款免费的FPGA综合工具,采用FPGA工具套件,可以增益设计师进入超结果为复杂的FPGA,具有自动化软错误环节,分层设计功能等,适用于航空航天、通讯、计算机、半导体领域,有需要的朋友可以下载!

软件功能
集成了Synplify Pro所有的优化选项,包括BEST算法、Resource Sharing,Retiming和Cross-Probing等等。更集成了专利的Graph-Based Physical Synthesis综合技术,并提供Floor Plan选项,是业界领先的FPGA物理综合解决方案,能把高端FPGA性能发挥到最好;从而可以轻松应对复杂的高端FPGA设计和单芯片ASIC 原型验证。
这些特有的功能包括:
全面兼容ASIC代码;
支持Gated Clock的转换;
支持Design Ware的转换。
同时,因为整合了在线调试工具Identify,极大的方便了用户进行软硬件协同仿真,确保设计一次成功,从而大大缩短了整个软硬件开发和调试的周期。
Identify是唯一的RTL级调试工具,能够在FPGA运行时对其进行实时调试,加快整个FPGA验证的速度。Identify软件有Instrumentor和Debugger两部分。
在调试前,通过Instrumentor设定需要观测的信号和断点信息,然后进行综合,布局布线。最后,通过Debugger进行在线调试。
Synplify Premier HDL Analyst提供优秀的代码优化和图形化分析调试界面;
Certify 确保客户在使用多片FPGA进行ASIC/SoC验证时快速而高效地完成工作;
现在Synopsys 又推出了基于DSP算法的代码产生和综合工具Synplify DSP,架起了算法验证和RTL代码实现之间的桥梁;
HAPS是高性能的ASIC原型验证系统,大大减少了一次流片成功的风险及节省了产品推向市场时间。
软件特色
为复杂可编程逻辑设计提供了优秀的HDL综合解决方案;
包含了BEST算法对设计进行整体优化;
自动对关键路径做Retiming,可以提高性能高达25%;
支持VHDL和Verilog的混合设计输入,并支持网表*.edn文件的输入;
synplify新版增强了对System Verilog的支持;
Pipeline功能提高了乘法器和ROM的性能;
有限状态机优化器可以自动找到最优的编码方法;
在timing报告和RTL视图及RTL源代码之间进行交互索引;
自动识别RAM,避免了繁复的RAM例化。
synplify pro使用教程
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 设置器件属性页
首先,设置FPGA芯片信息。打开 “Device”属性页,分别设置器件厂家器件型号、速度级别和封装信息。根据设计的速度和面积要求。可以设置最大扇出系数,缺省是10000。根据该工 程所属模块是否和片外有信号联系,选中或者不选中“Disable I/O insert”,如果选中该选项,则Synplify Pro不会为输入输出信号加缓冲,缺省为不选。
设 置通用综合选项。点击“options”属性页,选中“Symbolic FSM Compiler”,Synplify Pro会在综合过程中启动有限状态机编译器,对设计中的状态机进行优化。选中“Resource Sharing”选项,则启动资源共享;设置了资源共享后,设计的最高工作频率会低于不选中的情况,但是资源会节约很多,因此在设计能够满足时钟频率要求 的情况下,一般选中以节省资源。选中“Use FSM Explorer”选项,即可以用synplify内置的状态机浏览器观察状态机的各种属性。选中“Pipelining”选项,即启动流水,在高速时钟 设计中,如果其他措施都不能达到目标频率则最好选中此项。
设 置约束选项。点击“Constraints”属性页,设置模块最高工作频率以及添加约束文件(.sdc)。过严或是过松的约束都达不到最佳的效果。一般可 先尝试通用的约束,如时钟扇出限制等;如果没有达到要求,可加入一些严格的具体约束,同时注意放松一些可以放松的约束。需要注意的是,综合约束的结果是估 计值,应该以布局布线的结果为准。
设 置实现结果。点击“Implementation Results”属性页,设置综合结果放置的目录,综合结果的文件名称。同时一定要将“Write Vendor Constraint File”和“Write Verification Interface Format”选项选中。
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。
syn_sharing
确定综合时是否对运算符进行资源共享。缺省值是禁止,也可以在project视窗里设置这一选项。其语法如下:
object / * synthesis syn_sharing = " on|off " */ ;
其中object可以是module定义语句。
syn_state_machine
对设计中的某组状态寄存器进行自动机优化,其语法如下:
object /* synthesis syn_state_machine = 0|1 */ ;
其中object是该组状态寄存器。
syn_tco
提供黑盒的输出延迟信息,其语法如下:
object /* syn_tcon = "[!]clock -> bundle = value" */ ;
其中bundle是总线或标量信号的集合。
syn_tpd
提供穿过黑盒的组合逻辑的传输延迟信息,其语法如下:
object /* syn_tpdn = "[!]clock -> bundle = value" */ ;
其中bundle是总线或标量信号的集合。
syn_tristate
指定黑盒的一个输出端口为三态端口,其语法如下:
object /* synthesis syn_tristate = 0|1 */ ;
其中object可以是黑盒的output port。
syn_tsu
说明一个黑盒的输入要求的建立时间,其语法如下:
object /* syn_tsun = "[!]clock -> bundle = value" */ ;
translate_on/translate_off
用于与其他综合软件的兼容,这两者经常配对使用。在这两个指示中间的所有代码将在综合时被忽略,也可以用于在源代码中插入一段仿真代码。其语法如下:
/* synthesis translate_off */
综合时忽略的代码
/* synthesis translate_on */
6)综合报告解读
综合报告主要由3部分组成:编译报告、映射优化报告以及时序报告,但是该报告是冗长的,不容易快速找出用户所关心的结果。因此,Synplify公司提供 了综合报告观察窗,如图4-92中第3部分所示,可从综合报告文件中取出重要的信息。该窗口的使用非常简单,点击空白的参数显示栏,在下拉栏中选择要查看 的项目,则会在同行的右侧显示出结果,如图4-94所示。
图4-93 Synplify综合结果示意图