在Vivado Design Suite中使用opt_design进行逻辑优化

opt_design命令在Vivado Design Suite 中用于执行逻辑优化。当执行 opt_design 命令时,Vivado Design Suite会根据当前的设计配置和指定的属性来应用一系列优化策略。这些策略可能包括简化逻辑表达式、消除冗余逻辑、合并或重新排列逻辑单元等。通过优化逻辑结构,可以减少设计的复杂性,提高设计的可维护性和性能。
opt_design语法:

opt_design [-retarget] [-propconst] [-sweep] [-bram_power_opt] [-remap] [-aggressive_remap] [-resynth_area] [-resynth_seq_area] 
[-directive <arg>] [-muxf_remap] [-hier_fanout_limit <arg>] [-bufg_opt] [-mbufg_opt] [-shift_register_opt] [-dsp_register_opt] 
[-srl_remap_modes <arg>] [-control_set_merge] [-merge_equivalent_drivers] [-carry_remap] [-debug_log] 
[-property_opt_only] [-quiet] [-verbose]

opt_design 示例脚本(对内存中的设计执行逻辑优化,并在过程中重写设计。完成优化后,它还会写入一个设计检查点,并生成一个时序概要报告,将报告写入到指定的文件中)

opt_design -directive AddRemap 
write_checkpoint -force $outputDir/post_opt 
report_timing_summary -file $outputDir/post_opt_timing_summary.rpt

如果要限制优化到一个或多个特定的类型,可以使用命令行选项来实现。例如,以下是一种跳过默认运行的块RAM(Block RAM)优化的方法:

opt_design -retarget -propconst -sweep -bufg_opt -shift_register_opt

常用的命令行选项有:

1、retarget

在将一个设计从一种设备系列重新定位到另一种设备系列时,会进行重定位(Retargeting),即将一种类型的块重定位到另一种类型的块。例如,将实例化的MUXCY或XORCY组件重定位到CARRY4块;或者将DCM重定位到MMCM。此外,像反相器这样的简单单元会被吸收到下游逻辑中。当下游逻辑无法吸收反相器时,反相操作会被推到驱动器的前面,从而消除驱动器与其负载之间的额外逻辑层。在转换之后,驱动器的INIT值会被反转,并且设置/复位逻辑会被转换以确保功能等效。
重定位是一个重要的步骤,它确保设计在目标设备上能够正确地实现并保持其原始功能。在重定位过程中,Vivado Design Suite会考虑目标设备的特定特性和限制,以确保生成的设计在目标设备上具有最佳的性能和资源利用率。
重定位不仅限于逻辑块和组件的替换,还可能涉及更复杂的逻辑转换和优化。这些转换旨在最大限度地利用目标设备的资源,同时保持设计的正确性和性能。

2、propconst

常数传播(Constant Propagation)是通过逻辑传播常数值的过程,这会导致以下结果:
消除逻辑
例如,当与门(AND gate)的一个输入是常数0时,整个与门逻辑就没有意义了,因为任何数与0进行与操作的结果都是0。因此,这个与门逻辑可以被消除。
简化逻辑
例如,一个三输入的与门(3-input AND gate),如果其中一个输入是常数1,那么这个与门就可以简化为一个两输入的与门(2-input AND gate),因为任何数与1进行与操作的结果都是那个数本身。
冗余逻辑
例如,一个两输入的或门(2-input OR gate),如果其中一个输入是逻辑0,那么这个或门就可以简化为一条线(wire),因为任何数与0进行或操作的结果都是那个数本身。
常数传播是逻辑优化中的一个重要步骤,它可以帮助减少设计的复杂性,提高性能,并减少资源使用。通过识别和替换设计中的常数值,优化器可以消除或简化那些不必要的逻辑结构,从而生成一个更紧凑、更高效的设计。

3、sweep

在逻辑优化中,sweep用于移除没有输出负载(loads)的单元。这意味着如果一个逻辑单元(如一个门电路或寄存器)的输出没有被任何其他逻辑单元使用,即它没有连接任何后续的电路或组件,那么这个单元就被认为是“没有负载”的。在这种情况下,该单元是多余的,因为它不会对设计的最终输出产生任何影响。
执行 “sweep” 操作时,逻辑优化器会遍历设计的所有单元,并标识出那些没有负载的单元。然后,它会从设计中移除这些单元,从而简化设计并减少资源使用。这个过程有助于减少设计的复杂性,提高性能,并可能降低功耗。
需要注意的是,虽然 “sweep” 可以帮助减少资源使用和简化设计,但它也可能在某些情况下导致功能上的变化,尤其是当被移除的单元在原始设计中具有某种非直接作用时(例如,作为时序路径的一部分)。因此,在执行 “sweep” 或其他逻辑优化操作之前,最好先备份原始设计,并在优化后仔细验证设计的正确性和性能。

4、bufg_opt

强制性逻辑优化(Mandatory Logic Optimization,简称MLO)发生在链接设计(link design)的开始阶段,它支持使用CLOCK_BUFFER_TYPE属性来插入全局时钟缓冲器。对于7系列(7 Series)设备,支持的值是BUFG;而对于UltraScale、UltraScale+和Versal设备,则支持BUFG和BUFGCE。对于所有架构,可以使用NONE值来通过MLO和opt_design命令禁止全局时钟缓冲器的插入。
CLOCK_BUFFER_TYPE 的使用提供了一种通过 XDC 约束来控制缓冲器插入的优势,这样就不需要修改设计源代码或网表。使用 CLOCK_BUFFER_TYPE 插入的缓冲器不受任何限制,因此在使用此属性时必须谨慎,以避免在设计中引入过多的全局时钟,这可能会导致布局失败。

5、shift_register_opt

移位寄存器优化能够改善移位寄存器单元(SRLs)与其他逻辑单元之间负slack路径的时序。如果存在指向或来自移位寄存器单元(如SRL16E或SRLC32E)的时序违规,优化过程会从SRL寄存器链的开始或结束处提取一个寄存器,并将其放置在逻辑结构中,以改善时序。这种优化缩短了原始关键路径的连线长度。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值