VIVADO 综合策略介绍

  • -flatten_hierarchy:这个选项决定了Vivado综合工具如何控制设计的层次结构。

    • none:指示综合工具永远不要展平层次结构。综合输出的层次结构与原始RTL(寄存器传输级)相同。
    • full:指示工具完全展平层次结构,只保留顶层。
    • rebuilt:当设置为rebuilt时,允许综合工具展平层次结构,执行综合,然后基于原始RTL重新构建层次结构。这个值允许跨边界优化的质量(Quality of Results, QoR)优势,同时最终的层次结构与RTL相似,便于分析。
  • -gated_clock_conversion:这个选项开启或关闭综合工具将带使能(enable)的时钟逻辑进行转换的能力。
           off:禁用门控时钟转换。这意呀着无论RTL代码中是否设置了gated_clock属性,Vivado                 都不会尝试进行门控时钟的转换。
           on:如果RTL代码中设置了gated_clock属性,则进行门控时钟转换。这种方式允许开发                  者对转换过程有更多的控制。
          auto:如果满足以下条件之一,则自动进行门控时钟转换:
                     1, RTL代码中gated_clock属性被设置为TRUE。

                       例如: (* gated_clock = "true" *) input clk;   
                     2, Vivado综合工具能够检测到门控逻辑,并且已经设置了有效的时钟约束。这种                         方式让工具根据内部逻辑和约束自动做出决策

-directive 选项允许在 Vivado 综合过程中指定不同的优化策略。这些优化策略旨在根据不同的设计目标和需求来调整综合过程。下面是对各个值的解释:

  • Default:默认设置。这些设置通常提供了一组平衡的性能、面积和功耗优化。

  • RuntimeOptimized:执行较少的时序优化,并消除一些RTL优化,以减少综合运行时间。这对于需要快速迭代的设计流程特别有用。

  • AreaOptimized_high:执行高级别的面积优化,包括强制使用三进制加法器实现、在比较器中使用进位链的新阈值,以及实现面积优化的多路选择器(MUX)操作。这些优化旨在显著减少设计占用的面积。

  • AreaOptimized_medium:执行中等级别的面积优化,包括调整控制集优化的阈值、强制使用三进制加法器、降低将乘法器推断为DSP块的阈值、将移位寄存器移动到块RAM(BRAM)中、在比较器中使用进位链的较低阈值,以及面积优化的MUX操作。这些优化在面积和性能之间提供了较好的平衡。

  • AlternateRoutability:一组算法,旨在提高设计的可布线性(减少MUXF和CARRY的使用),从而可能改善布局和布线后的性能。

  • AreaMapLargeShiftRegToBRAM:检测大型移位寄存器,并使用专用的块RAM来实现它们。这可以显著减少移位寄存器占用的逻辑资源。

  • AreaMultThresholdDSP:降低将乘法操作推断为专用DSP块的阈值。这有助于更高效地利用DSP资源,减少乘法操作占用的逻辑面积。

  • FewerCarryChains:提高使用查找表(LUT)代替进位链的操作数大小阈值。这可以减少进位链的使用,有时可以改善布局和布线的效率,但可能会以牺牲一些性能为代价。

  • LogicCompaction:通过重新排列进位链和LUT,使逻辑更加紧凑,从而使用更少的SLICE。这有助于减少设计的面积,但可能会对时序质量(QoR)产生负面影响。

-retiming 是一个布尔选项,其值可以是 <on|off>,用于通过自动在组合逻辑门或查找表(LUT)之间移动寄存器(即寄存器平衡)来改善电路中的时钟内顺序路径的性能。此选项保持电路的原始行为和延迟,并且不需要对RTL源代码进行任何更改。默认情况下,该选项是关闭的(off)。

注意:在OOC(Out-Of-Context,上下文无关)模式下进行重定时时,那些由端口驱动或驱动端口的寄存器不会被重定时。这是因为在OOC模式下,综合器可能无法完全理解端口与外部设计之间的交互,因此为了避免潜在的问题,它会避免对这些寄存器进行重定时。

重定时是一种强大的优化技术,它可以在不改变电路功能的情况下,通过重新排列寄存器来减少关键路径的长度,从而提高电路的性能。然而,它也可能增加设计的复杂度,并且需要仔细评估其对时序和功耗的潜在影响。因此,在启用重定时之前,设计者应该充分了解其工作原理和潜在影响。

resource_sharing 选项用于设置不同信号之间算术运算符的共享。其值可以是 autoon 和 off。当设置为 auto 时,资源共享的执行将依赖于设计的时序。这意味着综合工具会根据设计的具体情况和目标设备自动决定是否进行资源共享。

-control_set_opt_threshold 选项用于设置时钟使能优化的阈值,即控制集数量的下限。默认值为 auto,表示工具将基于目标设备选择一个合适的值。任何正整数值都是支持的。给定的值表示工具将控制集移动到寄存器D逻辑中所需的扇出数。如果扇出数高于该值,工具将尝试让该信号驱动该寄存器的控制集引脚。

-no_lc 选项用于关闭查找表(LUT)合并。当选中此选项时,综合工具将不会尝试将多个LUT合并为一个更大的LUT,这可能会减少设计的面积,但可能会增加延迟和功耗。

-no_srlextract 选项用于关闭整个设计中移位寄存器逻辑(SRL)的提取。当选中此选项时,所有原本可能被推断为SRL的移位寄存器都将被实现为简单的寄存器。这可能会影响设计的面积和性能。

-shreg_min_size 选项用于设置推断移位寄存器逻辑(SRL)的阈值。默认值为3,表示当顺序元素数量达到或超过3时,综合工具将尝试将这些元素推断为SRL以实现固定延迟链(静态SRL)。不同的策略可能会定义不同的阈值,如5和10。具体设置请参考表1-2。

-max_bram 选项用于描述设计中允许的最大块RAM(Block RAM, BRAM)数量。这通常用于设计中包含黑盒或第三方网表时,允许设计者为这些网表预留空间。通过限制BRAM的使用量,设计者可以确保设计在目标设备上具有足够的资源来实现其他功能。

max_uram:设置设计中允许的最大UltraRAM块数量。UltraRAM是UltraScale+™设备中的一种高性能块RAM。默认设置-1表示工具将选择指定器件允许的最大数量。

-max_dsp:描述设计中允许的最大DSP块数量。DSP块通常用于执行数字信号处理任务。当设计中包含黑盒或第三方网表时,此选项特别有用,因为它允许为这些网表保留空间。默认设置-1表示工具将选择指定器件允许的最大数量。

-max_bram_cascade_height:控制工具可以级联的最大BRAM数量。级联多个BRAM可以扩展存储容量,但也会增加设计的复杂性和功耗。默认设置-1表示工具将选择指定器件允许的最大数量。

-max_uram_cascade_height:控制工具可以级联的UltraScale+设备UltraRAM块的最大数量。与BRAM类似,级联UltraRAM块可以扩展存储容量。默认设置-1表示工具将选择指定器件允许的最大数量。

-cascade_dsp:控制DSP块输出中加法器的实现方式。默认情况下,DSP块输出的和是通过块内置的加法器链计算的。但是,可以通过将此选项设置为tree来强制在FPGA的布线资源中实现加法器的和,这可能会增加设计的面积但减少延迟。值auto表示工具将自动选择最佳实现方式。值force通常不是直接可用的选项,但可能是指通过其他方式强制工具使用特定实现。

-no_timing_driven:这是一个可选选项,用于禁用默认的基于时序的综合算法。当启用此选项时,综合的运行时间可能会减少,但综合过程将忽略时序对综合结果的影响。这可能会导致生成的网表在时序上不是最优的,因此通常只在需要快速综合结果而不太关心时序性能时使用。

-sfcu:此选项使综合在单文件编译单元模式下运行。在单文件编译单元模式下,综合工具将每个源文件视为独立的编译单元,而不是将它们组合成一个大的编译单元。这可能会影响综合的性能和结果,但在某些情况下,如处理大型设计或需要更细粒度控制时,此选项可能很有用。

-assert:此选项启用VHDL断言语句的评估。VHDL断言用于在仿真过程中验证设计的某些属性。当断言的严重级别设置为失败或错误时,如果断言失败,综合流程将停止并产生错误。如果严重级别设置为警告,则断言失败将生成警告而不是停止综合流程。

-debug_log:此选项在综合日志文件中打印额外的信息,以便进行调试。要将此选项添加到综合过程中,需要将其添加到“更多选项”字段中。这可以帮助设计者理解综合过程中发生了什么,特别是在解决综合错误或优化设计时。

不同策略对应的设置

在Vivado综合过程中,不同的综合策略具有不同的侧重点和优化目标。

1. Default

  • 侧重点:默认设置,不提供特定的优化方向,适用于快速启动综合过程而不进行特别优化的情况。
  • 特点:综合过程中会使用一些基本的优化算法,但不会针对特定指标(如面积、时序或运行时间)进行深度优化。

2. Flow_Area Optimized_high

  • 侧重点:高度面积优化。
  • 特点
    • 强制执行一些高级的面积优化技术,如使用三进制加法器、优化多路复用器等。
    • 可能包括将大型移位寄存器映射到块RAM(BRAM)中,以减少逻辑资源的使用。
    • 旨在通过减少使用的逻辑资源数量来优化最终设计的面积。

3. Flow_AreaOptimized_medium

  • 侧重点:中等程度的面积优化。
  • 特点
    • 相较于高度面积优化,此策略在优化力度上有所降低。
    • 仍然会执行一些面积优化技术,但可能不包括所有高级优化。
    • 适用于在面积优化和性能之间寻找平衡的场景。

4. Flow_Area Mult ThresholdDSP

  • 侧重点:DSP块资源的优化使用。
  • 特点
    • 调整DSP块使用的阈值,以更多地利用DSP资源来处理乘法等复杂运算。
    • 旨在通过减少对其他逻辑资源的依赖来优化性能,特别是在需要高速数学运算的设计中。

5. Flow_Alternate Routability

  • 侧重点:提高布线能力。
  • 特点
    • 使用算法来减少MUXF和CARRY资源的使用,从而改善布线的灵活性和效率。
    • 适用于设计中有大量复杂布线需求的情况,以提高布局布线的成功率。

6. Flow_Perf Optimized_high

  • 侧重点:高度性能优化。
  • 特点
    • 强调时序优化,以确保设计满足高性能要求。
    • 可能包括重新布局寄存器、调整逻辑顺序等高级优化技术。
    • 适用于对性能有严格要求的设计场景。

7. Flow_Perf ThreshholdCarry

  • 侧重点:减少进位链的使用。
  • 特点
    • 通过使用查找表(LUT)来实现位宽较大的操作数,以减少进位链的使用。
    • 旨在提高运算速度和减少时序延迟,特别是在涉及大量位操作的设计中。

8. Flow_Runtime Optimized

  • 侧重点:减少综合运行时间。
  • 特点
    • 执行较少的时序优化和RTL优化,以快速完成综合过程。
    • 适用于需要在短时间内完成多次综合迭代或资源受限的环境。

综上所述,每种综合策略都有其特定的优化目标和适用场景。在选择综合策略时,需要根据设计的具体要求和目标来权衡不同的优化指标(如面积、性能、运行时间等),以选择最合适的策略。

ooc综合设置

      该方法适用于将顶层设置为OOC综合方式,以便进行时序评估。因为在OOC综合方式下不会插入IBUF或OBUF,所以可避免因引脚不够用而无法布线。

        在使用OOC综合方式时的注意事项:①如果在某模块下包含IP,且该P采用OOC综合方式,那么该模块将不能使用OOC综合方式,除非将该IP置为Global综合方式;②如果在某模块内有利用parameter(Verilog版)或generic(VHDL版)定义的参数,那么该模块也不能采用OOC综合方式。

        使用OOC综合方式的好处:节省编译时间,这是因为OOC综合方式只运行一次,只要代码没有改动,已经生成DCP文件的模块就不会再执行。同时,对关键模块采用OOC综合方式,还可能会有改善时序、加速时序收敛的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值