IC Design综合工具--Synplify Pro的常用选项及命令

Synplify Pro是Synplicity公司(Synopsys公司于2008年收购了Synplicity公司, 其客户遍布于通讯、半导体、航空/航天、计算机和军事电子等诸多领域,如:Philips,Agilent,Cisco,Lockheed,GE,Siemens,Lucent,Ericsson,Huawei,ZTE,UTStarcom等。本人所在公司即其中之一。)的高性能FPGA综合工具,为复杂可编程逻辑设计提供了优秀的HDL综合解决方案,它包含了BEST算法对设计进行整体优化。打开它的界面,最醒目的就是左侧偏上位置一个大大的“Run”按钮。就好像是在告诉你“你要做的就只是点一下‘Run’”。事实也的确如此。不过,想要用好它,可不是点一下“Run”这么简单。当然,这篇文章无意也不可能成为Synplify Pro的User Guide。只对使用过程中最常用的选项及命令作个介绍。


一、 状态机相关

FSM Compiler Option
FSM Compiler是一个全局选项。勾选此选项之后Synplify Pro会自动检测代码中的状态机,根据状态数量的不同选择不同的编码方式。状态数量在0~4之间采用顺序编码(Sequential),状态数量在5~40之间采用独热码(One hot),状态数量在40以上采用格雷码(Gray)。对状态机状态进行“可到达分析”,优化掉无法到达的状态和无法执行到的语句。

FSM Explorer Option
它是FSM Compiler的一个子选项,勾选FSM Explorer则FSM Compiler也会被自动选中。勾选FSM Explorer会影响状态机的编码方式,它对每一个检测到的状态机尝试三种不同的编码方式之后选择最优的编码方式。

Syn_state_machine Directive
与FSM Compiler的不同之处在于FSM Compiler是全局选项,而syn_state_machine Directive是局部指令,使用方法如下:
reg   [7:0]    curr_state    ;
如果我们希望某一部分代码按状态机综合但是我们没有勾选FSM Compiler选项或者FSM Compiler没有将它视为状态机,则可以使用上述代码描述将其指定为状态机。同样,也可以将其指定为“非状态机”。

Syn_encoding Attribute
BTW:Attribute和Directive的区别在于Attribute是“综合时作用”,而Directive是“编译时作用”;Attribute和工艺(如ALTERA或XILINX,或同一厂家不同系列)相关,而Directive和工艺无关。
Syn_encoding Attribute的使用方法如下:
reg   [7:0]    curr_state    ;
Syn_encoding Attribute可选的值有“onehot”,“gray”,“sequential”,“safe”,“original”。强烈建议对每一个状态机使用“safe”,它可以在状态机受到扰动进入非法状态时自动将其复位到一个有效的状态,避免状态机“死机”。

二、 面积和速度优化

Resource Sharing Option
是一个全局选项,勾选此选项则允许编译器共用互相排斥语句中的算术单元,常用于加法器、减法器等,有时对Reg/LUT也会略有减少。

Pipelining Option & Retiming Option
它们都是全局选项。若选中Retiming则Pipelining会自动被选中。Pipelining只改变寄存器的位置,通过移动寄存器的位置优化寄存器之间的组合逻辑级数,达到优化时序的目的。而Retiming不仅改变寄存器的位置还可能改变寄存器的数量。值得注意的是,它在改变寄存器数量时不会改变寄存器的级数,确保设计者预期的逻辑功能不被改变。

Fanout Guide – one of the Device Mapping Options
Fanout Guide是全局选项,默认一般为10000,如果设计中有较多单元fanout太大导致最终实现时序难收敛,可以视情况设置。减小扇出则Synplify Pro会自动使用更多的逻辑资源来进行逻辑复制。

Syn_maxfan Attribute
Syn_maxfan是局部属性。它可以用来改变特定单元的扇出,优先级高于全局Fanout Guide选项。下面是一个使用Syn_maxfan attribut的例子:
reg   [31:0]    data_out    ;

三、 其他常用选项及命令

Translate_off/translate_on Directive
Translate_off/translate_on必须成对出现。Translate_off之后的语句将在综合过程中被跳过,直到translate_on出现。
Translate_off/translate_on常用于在综合时自动屏蔽仿真需要的语句。以下是一个使用translate_off/translate_on的例子:
//synthesis translate_off
`define SIM_ON
//synthesis translate_on

Syn_black_box Directive
Syn_black_box指令用来将特定模块当成黑盒综合。不论该模块内容是否为空,但要求模块接口已经定义好。曾经在Stratix IV刚发布样片时做一个S-IV的项目,当时已有的Synplify Pro版本只能支持到S-III, 而S-IV与S-III的基本逻辑单元结构完全一样的。当时对S-IV底层强相关的模块使用syn_black_box,然后项目采用S-III器件综合出网表。再将网表和那几个被当作黑盒的模块一起使用Quartus II实现。

Syn_keep/syn_preserve/syn_noprune Directive
Syn_preserve用来保留寄存器,综合工具可能优化掉同样输入或扇出为0的寄存器,使用syn_preserve可以保留它们。
Syn_keep用来保留连线或组合逻辑。
Syn_noprune用来保留一个black box,如果一个black box的输出扇出为0,则该黑盒可能会被优化掉,使用syn_noprune可以保护它不被优化掉。

Syn_useioff Attribute (Technology related)
Syn_useioff attribute用来将输入输出寄存器置入FPGA的IO寄存器。它可以对输入输出管脚、输出寄存器或工程的顶层设置。
Syn_useioff attribute和工艺相关性较大,使用时需确认所用FPGA器件是否支持该属性。同时,该属性只是“尽力而为”,并不能保证最终结果一定符合设计者意图,强烈建议最终实现后在ISE/Quartus II中检查确认。

Syn_probe Attribute
Syn_probe attribute 可以用来方便测试。对一个内部寄存器使用syn_probe后,它在综合出的网表中成为顶层端口。若不使用该属性,则可能需要逐级修改设计文件(HDL代码)将内部寄存器连接到顶层。


black_box_pad_pin

声明用户定义的黑盒的管脚,作为外部环境可见的I/O pad,如果有不止一个端口,列在双引号内,以逗号分开。一般不需要这一属性,Synplify提供了预定义的I/Os。其语法如下
object ;
例如:
module BS(D,IN,PAD,Q) ;

block_box_tri_pins
声明黑盒的一个输出端口是三态,如不止一个列在双引号内以逗号分开。其语法如:" P( d; F6 A& b4 ?% f0 I
object ;
例如:
module BBDLHS(D,E,GIN,GOUT,PAD,Q) ;

full_case
仅用于Verilog,与case 语句一起使用,表明所有可能的状态都已经给出,不需要其他逻辑: X% F2 B" F. t! x. \. x3 O5 d' m
保持信号的值。语法如下:
object
其中object可以是case、casex、casez statements declaration

parallel_case
仅用于Verilog,与case 语句一起使用,强制生成一个并行的多路选择结构而不是一个优先译码结构。其语法:/ [) h9 T% c' q5 U
object
其中object可以是case、casex、casez statements declaration

syn_block_box
说明一个module或component为黑盒,仅利用其界面进行综合而不管是否内部为空,也不进行优化。一般应用于厂家原语或宏,或IP等用户定义的宏。对于厂家I/O或其他一些厂家的宏,通常不需此属性,Synplify提供预定义的黑盒。其语法如下:
object ;
其中object可以是module declaration.

syn_encoding
强制选择自动机实现的方式,其可选值如下:
default-综合根据状态的数量选择编码方式,编码方式可以是:onehot、gray、sequentia 
onehot-采用onehot编码方式! 
gray-采用格雷码
sequential-采用自然码
safe-如果不能到达任一个状态时,让其回到复位态
其语法如下:
object ;
其中object是状态寄存器定义

syn_isclock
说明黑盒的一个输入是时钟信号。对名字为clk、rclk、wclk的黑盒输入信号,软件自动当作时钟,可以用这个属性说明任意输入信号为时钟信号。其语法如下:
object ;
其中object是黑盒的input port
例如:
module ram4(myclk, out, opcode, a, b) ;
output [7:0] out;
input myclk ;
input [2:0] opcode;
input [7:0] a, b;


syn_keep
保证被指定的wire在综合中保持不动,不会被优化掉。用于在define_multicycle_path或define_false_path用了-through 选项。如果你使用了这一属性,将生成一个keepbuf,可以对其定义时间约束,这个Buffer只占用一个位置,不出现在门级网表里。其语法如下:
object ;
其中object是wire或reg声明
syn_noprune
用来保持一个或多个component的实例,即使其输出不能映射。一般无此指示的情况下,有着未用输出端口的实例会从EDIF文件中删除。它可被置于约束文件中,其语法如下:
.sdc 文件中
define_attribute {module|instance} syn_noprune {0|1}
Verilog 中
object ;
其中object可以是module declaration也可以是实例。

syn_preserve
用在某些独立的寄存器上,或module(则相当于施加于module中的所有寄存器)上,使其在优化时保持不动。也可用于保持某个自动机在优化时不动。其语法如下:
object ;
其中object可以是寄存器定义信号,也可以是Module

syn_sharing
使能/禁止综合时对运算符进行资源共享。缺省值是off,也可以在project视窗里设置这一选项。其语法如下:  k1 L. e9 ?+ I# h
object / * synthesis syn_sharing = " on|off " */ ;
其中object可以是module定义语句。

syn_state_machine
使能对设计中的某组状态寄存器进行自动机优化。其语法如下:
object ;
其中object是该组状态寄存器!

syn_tco<n>
提供黑盒的输出延迟信息,参见8.2。语法如下:
object ;
其中bundle是总线或标量信号的集合

syn_tpd<n>
提供穿过黑盒的组合逻辑的传输延迟信息,参见8.2。语法如下:
object ;
其中bundle是总线或标量信号的集合

syn_tristate
指定黑盒的一个输出端口为三态。其语法如下:
object ;
其中object可以是黑盒的output port

syn_tsu<n>
说明一个黑盒的输入要求的建立时间。参见8.2。其语法如下:
object ;

translate_on/translate_off
用于与其他综合软件的兼容。在这两个指示中间的所有代码将在综合时被忽略。也可以用于
在源代码中插入一段仿真代码。其语法如下:

综合时忽略的代码。。。

你可能感兴趣的:(instance)