vivado使用那些事之综合策略

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

实际使用建议

  1. LUT 资源紧张 :首选 Flow_AreaOptimized_high,如果 LUT 降下来了但时序崩了,再退到 Flow_AreaOptimized_medium
  2. 乘法器多 :配合 RTL 属性 (* use_dsp = "yes" *) 使用 Flow_AreaMultThresholdDSP,进一步压榨 LUT
  3. 布线拥塞Flow_AlternateRoutability 虽然可能增加 LUT,但如果设计因布线拥塞而失败,它是救命策略
  4. 快速迭代Flow_RuntimeOptimized 适合 RTL 开发阶段,不关注最终资源/时序
  5. 每次切换策略后 :务必对比 report_utilizationreport_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
相关推荐
2CM_Embed2 小时前
Quartus II 工程编译与 FPGA 下载流程记录
嵌入式硬件·fpga开发
千寻xun4 小时前
视频图像学习笔记
fpga开发
国科安芯14 小时前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试
謓泽1 天前
【6.26】芯片测试入门 从零搭自动化测试框架|PyVISA+OOP 保姆级教程
stm32·单片机·fpga开发·雷达·tr
乌恩大侠1 天前
【AI-RAN】面向电信行业的 NVIDIA DGX BasePOD
人工智能·fpga开发·o-ru
传感器与混合集成电路2 天前
伺服数据采集控制模块系统集成实战手册:接口设计要点、上电顺序与开发环境配置全解析
fpga开发
xxLearn3 天前
Vivado 2025.2 下载程序时提示:“ERROR : invalid command name ps7_init“
fpga开发
科恒盛远3 天前
【无标题】
fpga开发·硬件工程·信号处理
千寻xun4 天前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议