【vivado UG学习】Synthesis策略学习

article/2025/10/6 15:01:42

目录

  • 1.1 综合方法
  • 1.2 使用Sythesis
    • 1.2.1 Sythesis设置
    • 1.2.2 创建运行策略
    • 1.2.3 控制文件编译顺序
  • 1.2 运行Synthesis
    • 1.2.1 使用Tcl运行Synthesis
    • 1.2.2 RTL synthesis的多线程处理
  • 参考文档

综合是将rtl指定的设计转换为门级表示的过程

1.1 综合方法

Vivado,可以:

  • 创建以及保存策略。策略是命令选项的配置,您可以将其应用于设计运行以进行综合或实现。
  • 对综合和实现运行进行排队,以便在多处理器机器上顺序或同时运行。
  • 监视综合或时间过程,查看log报告。

1.2 使用Sythesis

1.2.1 Sythesis设置

在这里插入图片描述

  1. Constraints(约束):选择默认的约束设置,对应工程种添加了的.XDC文件。包含两种类型的约束:

    1. Physical constraints: 物理约束。包含引脚布置、cells(如RAMs,LUTs,Flip-Flops)的布置、器件配置相关设置。
    2. Timing constraints: 时序约束。定义设计的频率要求,如果没有要求,Vivado仅对wire的长度和布局进行优化。
  2. Options-Strategy选项:有一些已经定义好的策略可选,自己选择定义的策略。
    在这里插入图片描述

    各策略选项的默认值:
    在这里插入图片描述

  3. 策略的选项:

  • -flatten_hierarchy:确定Vivado合成如何控制层次结构。
    在这里插入图片描述

    1. full: 指示工具将层次结构完全变平,只留下顶层。
    2. none:指示合成工具永远不要把层次结构变平。合成的输出与原RTL具有相同的层次结构。
    3. rebuilt:当设置为rebuild时,合成工具可以将层次结构扁平化,执行合成,然后基于原始RTL重建层次结构。这个值允许跨边界优化的QoR好处,其最终层次结构与RTL类似,便于分析。
  • -gated_clock_conversion: 是否转换时钟逻辑为门控时钟。

  • -bufg: 控制工具在设计中推断的bufg数量。当设计网表中的其他bufg对合成过程不可见时,Vivado设计工具才会使用这个选项。

  • -fanout_limit: 指定信号在开始复制逻辑之前必须驱动的负载数。也就是扇出的最大值。这个全局限制是一个通用指南,当工具确定它是必要的时,它可以忽略这个选项。
    注意:-fanout_limit开关不影响控制信号(如设置,复位,时钟使能),如果需要,使用MAX_FANOUT复制这些信号。

  • -directive: 替换-effort_level选项。指定后,运行此选项Vivado综合与不同的优化。
    在这里插入图片描述

    1. Default:
    2. RuntimeOptimized: 运行时间最优化。即减少时序优化和RTL优化以减少综合的运行时间。
    3. AreaOptimized_high: 执行的面积优化,包含强制三值加法器(ternary adder)的实现,改变比较器中是否应用进位链的阈值,实现area-optimized多路复用器。
    4. AreaOptimized_medium: 执行的面积优化,包含更改是否执行控制集优化的阈值,强制三值加法器(ternary adder)的实现,降低推断为DSP块时的乘数的阈值,移动移位寄存器到BRAM,降低在比较器中应用进位链的阈值,实现area-optimized多路复用器。
    5. AlternateRoutability: 改进路由能力的算法集(少使用MUXFs和CARRYs)。
    6. AreaMapLargeShiftRegToBRAM: 检测大移位寄存器并使用专用块RAM实现它们。
    7. AreaMultThresholdDSP: 降低推断为DSP块实现的阈值。
    8. FewerCarryChains: 提高【使用lut而不是进位链】的操作数大小阈值。
  • -retiming: 是否通过【组合门或lut】自动移动寄存器来改善【时钟内顺序路径的电路性能(寄存器平衡)】。它保持电路的原始行为和延迟,不需要更改RTL文件,默认值是OFF。

  • -fsm_extraction: 控制Sythesis如何提取和映射有限状态机。

  • -keep_equivalent_registers: 防止合并具有相同输入逻辑的寄存器。

  • -resource_sharing: 设置不同信号间算术运算的共享。值:auto, on和off。auto设置是否共享取决于设计的时序。

  • control_set_opt_threshold: 设置将clock enable 优化为较低数量的控制信号集(control set)的门限。auto:根据选择的器件自动选择一个值。当控制信号的扇出数小于给定的值时,工具合并control sets到寄存器D端输入。如果控制信号扇出高于设置值,工具试图让该控制信号信号驱动寄存器上的control_set_pin,也就是实际的控制引脚。支持任何正整数值。但IDE最大可选16,如果选0,则禁用此项优化。【20211123修正】

  • -no_lc: 关闭LUT组合。

  • -no_srlextract:关闭SRL提取,使它们实现为简单寄存器。

  • -shreg_min_size: 推断为SRLs的门限值。默认值为3,这设置了将推断为固定延迟链(静态SRL)的SRL 时 顺序元素的数量。

  • -max_bram:描述设计中允许的最大block RAM数目。当设计中有黑盒子或第三方网表时,通常会使用这种方法,为这些网表节省空间。默认设置为-1表示工具选择指定部件允许的最大数量。

  • -max_uram: 设置设计中允许的UltraRAM (UltraScale®和UltraScale+™设备块ram)块的最大数量。默认设置为-1表示工具选择指定部件允许的最大数量。

  • -max_dsp:描述设计中允许的最大块DSP数量。通常在设计中有黑盒或第三方网表时使用,并允许使用这些网表。默认设置为-1表示工具选择指定部件允许的最大数量。

  • -max_bram_cascade_height: 控制工具可级联的最大BRAM数量。默认设置为-1表示工具选择指定部件允许的最大数量。

  • -max_uram_cascade_height:控制URAMs的最大数量(UltraScale+™设备UltraRAM块),可以由工具级联。默认设置-1表示工具选择指定部件允许的最大数量。

  • -cascade_dsp: 控制如何在DSP块输出中实现加法器。默认情况下,DSP输出的和是使用块内置加法器链计算的。值树强制在结构中实现总和。取值为:auto、tree和force。默认为auto。

  • -no_timing_driven: (可选)禁用默认的timing driven 综合算法。这减少了synthesis时间,但忽略了timing对synthesis的影响。

  • -sfcu: 在单文件编译单元模式下运行synthesis。

  • -assert: 使VHDL断言语句得到评估。

  • tcl.pre tcl.post 设置综合前后执行的tcl脚本。
    在这里插入图片描述

1.2.2 创建运行策略

更改策略后点保存即可
在这里插入图片描述

1.2.3 控制文件编译顺序

当一个文件有一个声明,而另一个文件依赖于该声明时,就需要特定的编译顺序。
Sources窗口底部的的Compile Order窗口选项可以打开编译顺序。

1.2 运行Synthesis

1.2.1 使用Tcl运行Synthesis

例子:synth_design -part xc7k30tfbg484-2 -top my_top
synth_design -help 查看帮助:
在这里插入图片描述

1.2.2 RTL synthesis的多线程处理

  • 在多处理器系统上,RTL合成在默认情况下利用多个CPU核(最多4个)来加速编译时间。
  • 并发线程的最大数量是不同的,这取决于系统上可用的处理器数量、操作系统和流程的阶段。
  • Tcl参数 general.maxThreads 设置线程数,一般写在Vivado_init.tcl 中用以在打开软件时执行。

参考文档

UG901:Vivado Design Suite User Guide: Synthesis


http://chatgpt.dhexx.cn/article/jpaffLYA.shtml

相关文章

vivado filemgmt 20-2001

这个问题可能和vivado的打开路径有关,最好在工程路径下的shell中打开vivado在选择当前工程, 实测我遇到这个现象就是这个问题: 换到当前工程目录后:vivado在打开的位置都会生成一些log/jou文件等 参考: Xilinx Custo…

vivado 和 modesim 联合仿真快速修改重仿

vivado与modelsim的联合仿真(一)_坚持-CSDN博客_modelsim和vivado 1 编译联合仿真库 tool → compile_simulation_libraries ,选择simulator 为 modelsim simulator,填写好 compiled library location(联合库存放地址),simulator ex…

Vivado设置

1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除; 2.未经原作者允许不得转载本文内容,否则将视为侵权; 3.转载或者引用本文内容请注明来源及原作者; 4.对于不遵…

vivado常见IP介绍

转自:微信公众号:Lauren的FPGA 目前,越来越多的工程师会用到Vivado IP Integrator(IPI)。它的强大之处在于通过实例化和互连IP构建复杂的设计。现在的IPI中,不仅可以添加Vivado IP,还可以添加用…

vivado工程打包

一般使用自带archive功能进行归档,但是归档的工程路径较乱,不能将源文件和工程进行明显的分析。一种比较常用的方法就是使用tcl脚本: 现在已经有了生成的语法模板,需要在修改下自己需要的新工程名称,并去掉一些不需要的…

使用vivado封装IP

文章目录 Basics定制IP的参数Enablement Expression封装IP时使用了绝对路径封装IP时设置Address Map Addr相关tcl修正警告Bus Interface clk: ASSOCIATED_BUSIF bus parameter is missing.rst识别成低有效复位Bus Interface up_axi: FREQ_HZ bus parameter missing from AXI in…

vivado使用方法(初级)

文章目录 1 创建新工程1.1 工程创建1.2 新建Verilog文件1.3 仿真 参考 1 创建新工程 1.1 工程创建 1、首先打开Vavido软件,点击Creat Project或者在File——>Project——>New里面进行新工程的创建 2、然后在弹出的界面上点击Next进入下一个界面进行项目的命…

Vivado基础教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、创建项目二、添加设计文件代码 三、综合四、添加约束文件五、上板5.1、生产比特流文件5.2、硬件调试 前言 本文详细的讲述了vivado项目创建到上板的流程。…

vivado基本使用流程(详细版,一步步跟着来一定能成功)

创建工程 1、 2 3、项目名称不能有空格,目录不能含有中文路径 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 可以查看一下新建的文件 二、设置IP核 1、 2、 3、 4、 5、 6、 7、 可以查看到生成的ip核 8、 找到例化模板,日常…

虚拟基类

对于虚拟基类的个人理解,如有误恳请指正。 1.不用虚拟基类 class cBase_A{int x; public:cBase_A( ){x10;}int getx(){return x;}void setx(int a){xa;}};class cBase_B: public cBase_A{ };class cBase_C: public cBase_A{ };class cDerived_D: public cBase_B…

系统调用。

什么是系统调用,有何作用? 生活场景:你去学校打印店打印论文,当你按下“打印”之后,打印机开始工作。你的论文打印到一半时,另一位同学按下了“打印”按钮开始打印他自己的论文。最终,你的论文和该同学的论…

C++ 基础之虚函数和虚基类

C 基础之虚函数和虚基类 C 有别于 C ,比较重要的就是其抽象、封装、继承和多态等特性。多态又具体地体现在重载、虚函数和模板等等之上。 今天就和大家聊一聊虚函数和虚基类。 虚函数 我们来思考一个问题。假如子(派生)类 B 继承自父(基&…

虚基类 的作用

虚基类 需要解决的问题 当派生类从多个基类派生,而这些基类又共同基类,则在访问此共同基类中的成员时,将产生冗余,并有可能因冗余带来不一致性虚基类声明 以virtual说明基类继承方式例:class B1:virtual public B作用…

虚基类的作用

1 概念 首先还是先给出虚继承和虚基类的定义。虚继承:在继承定义中包含了virtual关键字的继承关系; 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是: CSubClass : public virtual CBase {}; 其中CB…

系统调用:系统调用的实现

7.3.3 系统调用的实现 1. 中断和陷入硬件机构 (1) 什么是中断和陷入。 中断是指CPU对系统发生某事件时的这样一种响应:CPU暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继…

系统调用、函数调用

1、系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的, 内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给…

C++ 虚基类

C 虚基类 概述多重继承的问题虚基类初始化例子 总结 概述 虚基类 (virtual base class) 是用关键字 virtual 声明继承的父类. 多重继承的问题 N 类: class N { public:int a;void display(){cout << "A::a" << a <<endl;} };A 类: class A :…

虚基类

虚基类 意义:假设定义了一个公共基类A。类B和类C都由类A公有派生,类D由类B和类C公有派生。显然D包含类A的两个拷贝,不仅多占用内存,而且还造成多个拷贝的数据不一致。 不定义虚基类的效果如下: class A {public:int x;void SetX(int a) { x = a; }A(int a = 0) { x = a…