[转载]synplify使用

评定综合好坏最重要的两个指标:速度是否快和面积是否小;
synplify是专门针对FPGA/CPLD的逻辑综合工具;
synplify两个最显著的特点是BEST和Timing driven引擎,使得综合结果在速度和面积上都达到比较理想的效果;
synplify的几个版本使用相同的核心,但synlify pro的功能最强大;

synplify综合过程包括三方面内容:
1.对HDL源代码进行编译
    synplify将输入的HDL源代码翻译成boolean表达式并优化逻辑关系;
2.对编译的结果优化
    通过逻辑优化消除冗余逻辑和复用模块,这种优化是针对逻辑关系的,与具体器件无关;
3.对优化的结果进行逻辑映射与结构层次上的优化,最后生成网表;
    synplify将编译生成的逻辑关系映射成FPGA的地层模块和硬件原语(primitive)生成网表并优化;

synplify pro的主要特色:
1.支持混合设计: 一个工程中的源程序既可以包含verilog HDL代码又可以包含VHDL代码;
2.HDL源代码编辑器:可以直接在synplify中编辑HDL源代码,其语法纠错功能强大,有syntax check和synthesis check两个层次;
3.BEST(行为级提取技术):将行为级提取的模块直接适配到FPGA底层单元中去;
4.scope(综合约束优化环境):以电子表格形式输入、管理设计的约束,使用户可以方便、全面、有效地对设计进行综合约束,结果是.sdc文件
5.cross-probing:可以方便在代码、视图(RTL视图和technology view视图)、仿真、报告和关键路径之间切换
6.RTL view:synplify pro在对源码编译后应用BEST技术再现寄存器传输级原理图
7.technology view:将设计用FPGA的硬件原语(primitive)和底层模块(嵌入式PLL RAM等)描述的门级结构原理图
  technology视图是RTL视图向具体器件进行结构映射的结果
8.FSM compiler: 有限状态机综合工具
  FSM EXPLOER/FSM VIEVER:fsm explorer的本质是timing driven的状态机优化技术;
  fsm viewer是有限状态机观察器;
9.TCL命令界面,可以通过TCL脚本极大的提高工作效率;
10.resource sharing:资源共享,有助于减少设计占用的物理面积
11.retiming:用寄存器分割组合逻辑,在组合电路中插入寄存器平衡时延,以提高芯片工作频率;
   retiming技术也属于timing driven优化技术之一;
   pipelining: pipelining主要运用于一些算法路径,如乘法器、加法器等;
   pipelining是局部优化而retiming是整体优化;
12.针对具体的厂家器件提供了丰富的综合属性attributes;
13.probe:探针,不改变源码的前提下拉出任意信号到输出引脚;
14.timing analyst:时序分析专家,能够进行点对点的路径时序分析;
15.automativ gate clock conversion:IC设计和FPGA设计时的门控时钟向同步时钟的转换;

synplify的界面:
1.菜单栏
2.工具栏
3.状态显示栏:显示综合器当前状态
4.基本操作步骤按钮:按实际操作顺序组织
5.重要综合优化参数选项设置: 集中了综合优化过程中罪重要的一些参数,这些参数将直接决定综合的结果
6.工程管理窗口: 显示了工程结构和资源文件
7.工程文件显示窗口: 显示工程输入文件和综合结果文件
8.消息/TCL脚本显示窗口
9.综合结果观察窗口:显示综合结果的时钟频率、IO引脚、寄存器资源、LUT资源和选用器件等重要信息;

synplify与quartus联合使用:
1. quartus中的setting中选择synplify pro为综合工具,则quartus将自动调用synplify pro完成设计流程中的综合;
2. 单独启用synplify pro完成综合,输出EDIF或VQM网表文件;此时quartus仅仅完成对网表的映射和布局布线等操作;

synplify pro的操作步骤:
1.创建工程
2.源代码添加与编译
3.RTL和technology观察
4.使用scope设计综合约束
5.设置综合优化参数
6.综合
7.综合后分析

synplify pro的SCOPE综合约束选项:
1.时钟 clock
2.时钟延迟 clock to clock
3.输入输出 inputs/outputs
4.寄存器 registers
5.多周期路径 multi-cycle paths
6.弱约束路径 false paths
7.路径最大延迟 max_delay path
8.约束属性 attributes
9.多位置编译  compile points
10.其他 other
11.collections
12.IO标准IO standard

synplify pro中设计FSM的工具:
    FSM Compiler将FSM编译为类似状态转移图的连接图,然后对FSM重新编码、优化以达到更好的综合效果;
    FSM Explorer使用FSM Compiler的编译结果,遴选不同的编码方式进行状态机编码探测,从而达到对FSM编码的最佳优化效果;
    FSM Viewer是观查FSM的好工具
    它们的作用: 重新选择编码方式、确定更恰当的起始状态、删除冗余逻辑和不可达状态;
    综合时使用了FSM compiler则可以在log file中查看每一个状态机的综合结果;

综合以后生成的文件有.srr  .tlg  .srs
    .srr: 工程报告(重要),以"project_name.srr"命令;
    .tlg:工程组织结构信息文件
    .srs:RTL视图文件

tcl脚本文件的使用:

设计者可以用批处理命令的形式执行一个综合,也可以一次执行同一设计的多个综合,尝试不同器件、不同延时目标、不同约束条件;
工程文件prj、约束文件sdc本质上都是采用tcl脚本编写的;
添加约束的方法: synplify的scope, HDL中添加约束;
synplify把最后编译的module/entity and architecture作为顶层设计,所以要把顶层设计文件拉到设计文件列表的最底端(否则只会在RTL视图中显示末尾HDL的视图)
优化时如果resource sharing被选中,则最高频率一般来说会降低,但是资源有所节约;建议在设计能够满足时钟频率要求时选中以节省资源;
pipelining即流水,在高速设计时如果其他措施都不能达到目标频率则最好选中此项;
technology view和RTL view都是针对HDL的,都是综合之前就能显示的,technology view是基于目标器件技术的层次结构电路图;
时间报告(timing report):即srr中的preference summary部分,注意综合产生的时间报告只是估计值,设计实际的时序状况极大程度依赖于布局布线工具;

时间: 2024-10-12 20:08:27

[转载]synplify使用的相关文章

时钟域译文转载

第六章   时钟域 有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域.换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口.虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPG**外各种系统限制,只使用一个时钟常常又不现实.FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证.本章讨论一下在FPGA设计中多时钟域

【转载】C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CExample {private:     int a;public:     CExample(int b)     { a=b;}     void Show ()     {        cout<

门控时钟-理论分析 ---- 转载

转载自:http://www.chipsbank.com/news_detail/newsId=123.html 门控的基本要求: 1. 所需要的沿(对于正沿触发的寄存器是正沿,对于负沿触发的寄存器是负沿)不增加,不减少: 1. 不会产生毛刺: 1. 使用后功耗要能够降低: 1. 最好面积还会减小. 1. 上升沿触发的门控时钟的结构研究:应用与上升沿触发的寄存器的门控. 1. 直接与门结构: 1. 高电平使能Latch + 与门结构: 1. 低电平使能Latch + 与门结构: 1. 波形研究:

浅谈Java中的equals和==(转载)

在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

2.EasyUI学习总结(二)——easyloader分析与使用(转载)

本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除了可以使用通常的方式加载之外,还提供了使用 easyloader 加载的方式.这个组件主要是为了按需加载组件而诞生.什么情况下使用它呢? 你觉得一次性导入 easyui 的核心 min js 和 css 太大 你只用到 easyui 的其中几个组件 你想使用其中的一个组件,但是你又不知道这个组件依赖

Data guard概念篇一(转载)

本文转载至以下链接,感谢作者分享! http://tech.it168.com/db/2008-02-14/200802141545840_1.shtml 一.Data Guard配置(Data Guard Configurations) Data Guard是一个集合,由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成.组成Data Guard的数据库通过Oracle Net连接,并且有可能分布于不同地域.只要各库之间可以相互通信,它们的物理位置并没有什么

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排