Vivado 综合策略有什么
策略总览
| 策略名称 | 优化方向 | LUT 变化 | 适用场景 |
|---|---|---|---|
| Vivado Synthesis Defaults | 平衡型 | ~ 基准 | 通用起点,首次综合 |
| Flow_AreaOptimized_high | 激进面积优化 | ⬇️ 显著降低 | LUT 资源紧张 |
| Flow_AreaOptimized_medium | 中等面积优化 | ⬇️ 适度降低 | 面积与性能兼顾 |
| Flow_AreaMultThresholdDSP | 乘法器映射 DSP | ⬇️ 降低 | 乘法器多、DSP 富余 |
| Flow_AlternateRoutability | 可布线性优化 | ⬆️ 可能增加 | 布线拥塞、密度过高 |
| Flow_PerfOptimized_high | 激进时序优化 | ⬆️ 通常增加 | 时序紧张、追求 Fmax |
| Flow_PerfThresholdCarry | 进位链优化 | ~ 持平 | 算术运算多、时序紧 |
| Flow_RuntimeOptimized | 运行时间优化 | ~ 无明显优化 | 快速迭代、功能验证 |
可以看出,综合的策略就是围绕时间、空间来进行取舍的
Vivado 综合策略的本质:一场 FPGA 的 权衡
说白了,Vivado 这八套综合策略,核心就一句话:要么用时间换空间,要么用空间换时间。
想跑得快?PerfOptimized 就像公司突然财大气粗,同样的活雇两个人干,LUT 和 FF 咔咔暴涨,但关键路径瞬间畅通------典型的拿资源砸速度 。反过来,AreaOptimized 就是老板抠门,让一个人干三份活,LUT 是省了,但信号绕来绕去累到虚脱,时序直接摆烂。
所以别纠结哪个策略"最好",FPGA 综合没有最优解,只有最适合你当前钱包(LUT 余量)和 deadline(时序余量)的妥协。工具能做的,不过是在"面积-速度"这个跷跷板上,帮你把屁股挪到相对舒服的位置罢了。
1. Vivado Synthesis Defaults(默认策略)
核心特点:在性能、面积、功耗之间取平衡,不做极端偏向。
- LUT 影响:中等,按常规方式映射
- 时序影响:基准水平
- 适用场景:绝大多数常规设计的起点,初次综合时的首选
建议:先用默认策略跑通流程,建立基线,再根据资源或时序瓶颈切换其他策略。
2. Flow_AreaOptimized_high(高面积优化)
核心特点:执行激进的通用面积优化,尽可能减少 LUT、FF 等资源占用。
具体优化手段:
- 强制实现三进制加法器(ternary adder),节省进位链资源
- 调整比较器中是否使用进位链的阈值
- 实现面积优化的多路复用器
- 包含 AreaMapLargeShiftRegToBRAM 和 AreaThresholdUseDSP 的效果
关键指标:
- LUT 影响:⬇️ 显著降低 LUT 使用量,是减少 LUT 的首选策略
- 时序影响:可能牺牲部分 Fmax
- 适用场景:FPGA 资源紧张、LUT 利用率接近或超过 70% 的设计
3. Flow_AreaOptimized_medium(中等面积优化)
核心特点:在面积和性能之间取得平衡,比 high 版本更温和。
具体优化手段:
- 改变控制集优化的阈值
- 强制三进制加法器
- 降低 DSP 推断阈值(让更多乘法器进 DSP)
- 将移位寄存器移到 BRAM
- 降低比较器中使用进位链的阈值
- 面积优化的 MUX 操作
关键指标:
- LUT 影响:⬇️ 适度减少 LUT,同时保留较好的时序余量
- 时序影响:影响较小,较为均衡
- 适用场景:资源有一定压力,但仍需兼顾时序的设计
4. Flow_AreaMultThresholdDSP(乘法器 DSP 优化)
核心特点:降低乘法器被推断为 DSP 块的阈值,让更多乘法器优先使用 DSP48 而非 LUT/进位链实现。
关键指标:
- LUT 影响:⬇️ 减少 LUT 消耗(乘法器改走 DSP),但会增加 DSP 占用
- 风险提示:若 DSP 已用完,此策略可能反而增加 LUT
- 适用场景:设计中包含大量乘法运算,且 DSP 资源仍有富余时
5. Flow_AlternateRoutability(可布线性优化)
核心特点:通过算法减少 MUXF 和 CARRY 的使用,以提升布线能力(Routability)。
关键指标:
- LUT 影响:⬆️ 通常会增加 LUT 使用量(原本用 CARRY 链或 MUXF 实现的逻辑被拆散到更多 LUT 中)
- 本质:用面积换布线
- 适用场景:设计密度极高、布线拥塞风险大;大型设计(SSI 器件跨 SLR)
6. Flow_PerfOptimized_high(高性能优化)
核心特点:执行激进的时序优化,优先满足最高工作频率。
具体优化手段:
- 降低逻辑级数(logic level reduction)
- 更积极的逻辑复制和寄存器优化
- 以面积为代价换取速度
关键指标:
- LUT 影响:⬆️ 通常增加 LUT 和 FF 使用量(通过复制逻辑、展平层次来减少关键路径延迟)
- 时序影响:显著提升 Fmax
- 适用场景:时序紧张、关键路径余量不足的设计
7. Flow_PerfThresholdCarry(进位链高性能优化)
核心特点:专门针对进位链(Carry Chain)的优化策略,调整进位链的使用阈值。
关键指标:
- LUT 影响:~ 更多运算会走进位链而非 LUT,可能减少 LUT 但增加 CARRY 资源
- 与 PerfOptimized_high 的区别:更聚焦于算术/进位路径的优化,而非通用逻辑
- 适用场景:包含大量算术运算(加法、减法、计数器)且对时序要求高的设计
8. Flow_RuntimeOptimized(运行时间优化)
核心特点:牺牲优化质量以换取最短综合时间。
具体优化手段:
- 执行较少的时序优化
- 跳过部分 RTL 优化步骤
关键指标:
- LUT 影响:~ 通常不会刻意减少 LUT,反而可能因为优化不足导致资源略多
- 时序影响:不做深度优化
- 适用场景:RTL 开发阶段快速迭代;功能验证阶段,不关注最终资源/时序
策略选择决策
按目标选择:
| 你的目标 | 推荐策略 |
|---|---|
| LUT 越少越好 | Flow_AreaOptimized_high |
| 面积和性能兼顾 | Flow_AreaOptimized_medium |
| 乘法器多、DSP 富余 | Flow_AreaMultThresholdDSP |
| 布线拥塞、密度太高 | Flow_AlternateRoutability |
| 时序优先、追求 Fmax | Flow_PerfOptimized_high |
| 算术运算多、时序紧 | Flow_PerfThresholdCarry |
| 快速迭代、不关注 QoR | Flow_RuntimeOptimized |
| 通用起点 | Vivado Synthesis Defaults |
实际使用建议
- LUT 资源紧张 :首选
Flow_AreaOptimized_high,如果 LUT 降下来了但时序崩了,再退到Flow_AreaOptimized_medium - 乘法器多 :配合 RTL 属性
(* use_dsp = "yes" *)使用Flow_AreaMultThresholdDSP,进一步压榨 LUT - 布线拥塞 :
Flow_AlternateRoutability虽然可能增加 LUT,但如果设计因布线拥塞而失败,它是救命策略 - 快速迭代 :
Flow_RuntimeOptimized适合 RTL 开发阶段,不关注最终资源/时序 - 每次切换策略后 :务必对比
report_utilization和report_timing_summary,确认 LUT 和 WNS(Worst Negative Slack)的变化
方法一:图形界面操作
1.点击setting

2.点击strategies 
方法二:TCL 命令速查
tcl
# 设置综合策略
set_property strategy Flow_AreaOptimized_high [get_runs synth_1]
# 或直接指定 directive
synth_design -directive AreaOptimized_high
# 关闭 LUT 整合(解决布线拥塞时)
synth_design -no_lc
# 启用资源共享
synth_design -resource_sharing on