使用Vivado Design Suite进行仅属性优化

在Vivado Design Suite中,使用仅属性优化需要明确指定哪些属性应该触发优化过程,如果未找到任何触发优化的属性,opt_design将不会执行任何优化操作,并保持设计的当前状态不变。这可以帮助用户更加精确地控制优化过程,只针对特定的设计属性进行优化。这提供了一种更加灵活和定制化的优化方法,可以根据项目的具体需求和约束来调整优化策略,可以确保只有需要优化的部分得到处理。
以下是会触发优化的opt_design单元属性。

一、MUXF_REMAP

该选项可以将 MUXF7、MUXF8 和 MUXF9 基础单元(primitives)转换为 LUT3,以减少布线拥塞。这个特性与 LUT_REMAP 属性的工作方式类似。如果在 MUXF* 单元上设置该属性为 true,那么在执行 opt_design 时会自动触发 MUX 重映射优化,并将这些单元映射到 LUT3。
与 LUT_REMAP 属性不同的是,MUXF_REMAP 属性可以通过设置单个 MUXF 单元的属性为 FALSE 来限制 -muxf_remap 优化的范围。如果某个 MUXF 单元的此属性被设置为 FALSE,并且调用了 opt_design -muxf_remap 命令,那么这些 MUXF 单元将不会被映射到 LUT3。
通过这种方法,可以更加精确地控制哪些 MUXF 单元应该被重映射为 LUT3,以便在满足设计性能要求的同时,尽可能地减少布线拥塞。
适用对象
MUXF 单元(通过 get_cells 获取)

•TRUE | 1
如果调用了 opt_design -mux_remap,则即使存在值为 TRUE 的 MUXF_REMAP 属性,也不会产生额外的效果。
如果未调用 opt_design -mux_remap,那么特定单元上存在值为 TRUE 的 MUXF_REMAP 属性将仅在这些特定单元上调用 MUX 重映射,发生在 opt_design 过程中。
• FALSE | 0
如果调用了 opt_design -mux_remap,那么存在值为 FALSE 的 MUXF_REMAP 属性将阻止指定的 MUXF 单元被重映射。
如果未调用 opt_design -mux_remap,那么即使存在值为 FALSE 的 MUXF_REMAP 属性,也不会产生额外的效果。
XDC 语法及示例

set_property MUXF_REMAP <value> <objects> 
set_property MUXF_REMAP 0 [get_cells -hier \ -filter {name =~ cpu* && ref_name =~ MUXF*}] 

该示例命令将 MUXF_REMAP 属性设置为 FALSE,应用于指定的 MUXF 原始单元,以便在使用 opt_design -mux_remap 命令时排除这些单元进行重映射。其中 -hier 选项表示搜索应包括所有层级的单元,-filter 选项用于过滤单元,这里使用了正则表达式来匹配单元名称和引用名称。
这种设置通常用于优化设计中特定部分的行为或性能,通过排除某些单元的重映射来减少不必要的逻辑变化或布线拥塞。

二、CARRY_REMAP

该选项可以将单个 CARRY* 单元重映射为查找表(LUTs),以改善设计的布线结果。当使用 -carry_remap 选项时,只有单级进位链会被转换为 LUTs。CARRY_REMAP 属性可以指定在优化期间要转换的更长的进位链。
可以使用 CARRY_REMAP 单元属性来控制任何长度的单个进位链的转换。CARRY_REMAP 属性值是一个整数,指定要映射到 LUTs 的最大进位链长度。CARRY_REMAP 属性应用于链中的 CARRY* 基础单元,并且每个单元在优化期间必须具有相同的值才能转换为 LUTs。
进位链中的每个 CARRY 单元必须具有相同的 CARRY_REMAP 值。如果由于存在 DONT_TOUCH 属性而导致至少一个级联单元不能被重映射,则整个链都不能被重映射。发生这种情况时,将发出警告。
适用对象
CARRY 单元(通过 get_cells 获取)

:指定一个整数,表示在 opt_design 过程中可以被转换为查找表(LUTs)的进位链的长度。
• CARRY_REMAP=0:不进行重映射。
• CARRY_REMAP=1:重映射那些不属于进位链的单个 CARRY 单元。
• CARRY_REMAP=2:重映射长度为 2 或更短的进位链。
XDC 语法及示例(将 CARRY_REMAP 属性分配给所有 CARRY8 基础单元):

set_property CARRY_REMAP <value> <objects> 
set_property CARRY_REMAP 2 [get_cells -hier -filter {ref_name == CARRY8}]

三、 SRL_TO_REG

SRL 基础单元可以通过将 SRL_TO_REG 属性设置为 true 来转换为逻辑上等价的寄存器原始单元链。这种转换通常用于增加可用的流水线寄存器级数,以便信号在设备内部穿越长距离时可以分散使用。
适用对象
作为叶级 SRL 实例的单元(通过 get_cells 获取)。

1:Vivado 逻辑优化将从指定的 SRL 原始单元输入中拉出一个寄存器。
XDC 语法及示例

set_property SRL_TO_REG <True | False> <objects> 
set_property SRL_TO_REG 1 [get_cells {cell1 cell2}] 

默认情况下,SRL_TO_REG属性的值为false。需要转换的对象应该是可以实例化或推断的静态移位寄存器,例如SRL16E和SRL32E。

4、REG_TO_SRL

一串寄存器基础单元可以使用 REG_TO_SRL 属性并设置其值为 true 来转换为逻辑上等价的 SRL基础单元。这种转换通常用于减少信号在设备内部穿越长距离时所使用的流水线寄存器级数。过多的寄存器级数可能会导致布线拥塞或其他布局问题。
适用对象
作为叶级寄存器实例的单元(通过 get_cells 获取)

• True(或 1):Vivado 逻辑优化会将指定的寄存器原始单元转换为 SRL。
• False(或 0):Vivado 逻辑优化不会将指定的寄存器原始单元转换为 SRL。
XDC语法及示例

set_property REG_TO_SRL <True | False> <objects> 
set_property REG_TO_SRL 1 [get_cells {cell1 cell2}] 

默认情况下,REG_TO_SRL属性的值为false。对象应该是寄存器,并且要被吸收到同一个SRL中的寄存器应该共享相同的控制集,并且没有复位。

五、SRL_STAGES_TO_REG_INPUT

通过使用该属性,可以将寄存器级从SRL输入中拉出,或者推入SRL输入中。这提供了对流水线寄存器结构的控制,以解决SRL基本单元输入端流水线不足或过多的问题。
适用对象
作为leaf级SRL实例的单元(get_cells)
属性值
1:Vivado逻辑优化器将从指定的SRL基本单元输入中拉出一个寄存器。
-1:Vivado逻辑优化器将向指定的SRL基本单元输入中推入一个寄存器。
XDC 语法及示例

set_property SRL_STAGES_TO_REG_INPUT <1 | -1> <objects> 
set_property SRL_STAGES_TO_REG_INPUT 1 [get_cells {cell1 cell2}] 

对于对象来说,它们应该是SRLs,并且要被吸收到SRL中的寄存器应该共享相同的控制集,并且没有复位功能。

六、SRL_STAGES_TO_REG_OUTPUT

通过使用该属性,可以从SRL的输出端拉出一个寄存器级,或者向SRL的输出端推入一个寄存器级。这提供了对流水线寄存器结构的控制,以解决SRL基本单元输出端流水线不足或过多的问题。
适用对象
作为leaf级SRL实例的单元(get_cells)
属性值
1:Vivado逻辑优化器将从指定的SRL基本单元输出端拉出一个寄存器。
-1:Vivado逻辑优化器将向指定的SRL基本单元输出端推入一个寄存器。
XDC 语法及示例

set_property SRL_STAGES_TO_REG_OUTPUT <1 | -1> <objects> 
set_property SRL_STAGES_TO_REG_OUTPUT 1 [get_cells {cell1 cell2}] 

对象的类型应该是SRL(Shift Register Lookup,移位寄存器查找表),并且要被吸收到同一个SRL中的寄存器应该共享相同的控制集,并且没有复位功能。

七、 LUT_REMAP

该属性可以通过将该属性应用于顺序查找表对来执行选择性查找表重映射,从而指示 opt_design 将它们合并为一个查找表。
具有 LUT_REMAP 属性的查找表链在可能的情况下被折叠成更少的逻辑层次。
适用对象
查找表单元(通过 get_cells 获取)

TRUE | 1

  • 如果调用了 opt_design -remap,那么即使存在值为 TRUE 的 LUT_REMAP 属性,也不会产生额外的影响。
  • 如果没有调用 opt_design -remap,那么在特定的单元上设置值为 TRUE 的 LUT_REMAP 属性,会在 opt_design 期间仅针对这些特定的单元调用查找表重映射。
    FALSE | 0:这个设置没有效果,因为它不会阻止查找表被重映射。
    **XDC 语法及示例(为指定的查找表分配 LUT_REMAP 属性) **
set_property LUT_REMAP <value> <objects> 
set_property LUT_REMAP 1 [get_cells usbEngine*/* -filter {ref_name =~ LUT*}] 

八、CONTROL_SET_REMAP

虽然所有寄存器都支持复位和时钟使能,但它们的使用会对最终实现的性能、利用率和功耗产生显著影响。具有大量唯一控制集(control sets )的设计在放置时可能具有较少的选项,从而导致更高的功耗和更低的性能。CONTROL_SET_REMAP 属性放置在寄存器基本单元上,以在逻辑优化期间对特定寄存器触发控制集缩减(control set reduction)。
当逻辑路径终止于一个 fabric 寄存器(FD)的时钟使能或同步置位/复位时,该寄存器上的属性会指示 Vivado 逻辑优化将使能或复位信号映射到数据引脚(D),该引脚具有专用的查找表(LUT)连接,可能会更快。如果可能的话,逻辑将与驱动 D 输入的现有查找表组合,以防止插入额外的逻辑级别。
当在任何寄存器上检测到 CONTROL_SET_REMAP 属性时,此优化将自动触发。DONT_TOUCH 属性可以防止对指定的单元或层次结构进行优化。
适用对象
单元(通过 get_cells 获取)

• ENABLE:将 EN 输入重映射到 D 输入。
• RESET:将同步的 S 或 R 输入重映射到 D 输入。
• ALL:与 ENABLE 和 RESET 组合的效果相同。
• NONE:不执行任何操作。这是默认值,与未在该单元上设置该属性时相同。
XDC语法及示例 (制定基于启动信号的控制集缩减)

set_property CONTROL_SET_REMAP <value> [get_cells <cell_pattern>] 
set_property CONTROL_SET_REMAP ENABLE [get_cells ff*] 

九、 EQUIVALENT_DRIVER_OPT

该选项会将所有逻辑上等价的信号驱动器合并成单个驱动器,并可以在运行 opt_design 时控制哪些等价的网络和驱动器应该被合并或不被合并:
• 将 EQUIVALENT_DRIVER_OPT 属性设置为 MERGE 在原始驱动器及其副本上,会触发 opt_design 期间的合并等价驱动器阶段,并合并具有该属性的逻辑上等价的驱动器。
• 将 EQUIVALENT_DRIVER_OPT 属性设置为 KEEP 在原始驱动器及其副本上,会防止在等价驱动器合并和控制集合并阶段中合并这些指定的驱动器。这会排除指定的驱动器,但会在设计的其余部分上运行等价驱动器合并。
适用对象
单元(通过 get_cells 获取)

• MERGE:仅在指定的单元上启用等价驱动器合并优化。
• KEEP:在指定的单元上禁用等价驱动器合并优化,但会对设计的其余部分进行合并。
XDC 语法及示例(指定在指定的单元上合并等价驱动器)

set_property EQUIVALENT_DRIVER_OPT < MERGE | KEEP > [get_cells <instance>] 
set_property EQUIVALENT_DRIVER_OPT MERGE [get_cells U0/ mem_reg_mux_sel_reg_0*] 
  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值