0.1.1 1. 综合策略(Synthesis Strategy)#
- 作用:控制综合工具优化设计的方向(性能、面积、功耗)。
- 选项:
- Vivado Synthesis Defaults:默认策略,平衡性能和资源。
- AreaOptimized_high:优先减少资源占用(如 LUT、寄存器)。
- PerformanceOptimized_high:优先时序性能(降低关键路径延迟)。
- PowerOptimized_high:优化功耗(需配合电源约束)。
- 配置位置:
- Vivado 的
Project Settings > Synthesis > Strategy
。 - 命令行:
set_property strategy <strategy_name> [current_run]
- Vivado 的
0.1.2 2. 关键优化属性#
0.1.2.1 (1) 资源控制#
- MAX_FANOUT:
- 限制信号的最大扇出,减少高扇出网络导致的时序问题。
- 设置方式:在 RTL 代码或 XDC 约束中添加
set_property MAX_FANOUT <value> [get_nets <net_name>]
。
- RAM_STYLE:
- 指定 RAM 实现方式(
block
使用 BRAM,distributed
使用 LUTRAM)。 - 示例:
set_property RAM_STYLE block [get_cells <ram_instance>]
。
- 指定 RAM 实现方式(
- USE_DSP48:
- 强制乘法器使用 DSP48 单元(而非 LUT),提升性能。
- 设置方式:
set_property USE_DSP48 yes [get_cells <mult_instance>]
。
0.1.2.2 (2) 时序优化#
- Retiming:
- 跨寄存器调整逻辑位置,平衡关键路径延迟。
- 启用方式:在综合设置中勾选
Perform register retiming
。
- Control Set Optimization:
- 合并相同控制信号(复位 / 使能)的寄存器,减少控制集数量。
- 选项:
Auto
(默认)或Aggressive
。
0.1.3 3. 跨时钟域(CDC)处理#
- 异步路径约束:
-
对跨时钟域路径设置
set_false_path
或set_clock_groups
,避免无效时序分析。 -
示例:
set_clock_groups -asynchronous -group {clkA} -group {clkB}
-
- 同步器识别:
- Vivado 自动识别常见的同步器结构(如双寄存器),无需额外约束。
0.1.4 4. 增量综合(Incremental Synthesis)#
- 作用:仅重新综合修改部分,缩短编译时间。
- 启用条件:
- 需在首次综合后生成
checkpoint
文件(.dcp
)。 - 后续运行时勾选
Incremental Synthesis
选项。
- 需在首次综合后生成
- 适用场景:小型设计迭代,避免全流程耗时。
0.1.5 5. 约束文件(XDC)关键设置#
-
时钟定义:
create_clock -period 10 [get_ports clk] ; 定义10ns周期时钟
-
输入 / 输出延迟:
set_input_delay 2.0 -clock [get_clocks clk] [get_ports data_in] set_output_delay 1.5 -clock [get_clocks clk] [get_ports data_out]
-
多周期路径:
set_multicycle_path 2 -setup -from [get_pins {regA|C}] -to [get_pins {regB|D}]
0.1.6 6. 综合报告分析#
生成报告的命令:report_timing_summary -file timing.rpt
关键指标:
- WNS (Worst Negative Slack):最差负裕量(需 ≥0)。
- 资源利用率:LUT、FF、BRAM、DSP 占用比例。
- 时钟频率:检查是否满足目标频率(
Target Frequency
)。
0.1.7 7. 常见问题与调优#
- 高扇出网络:
- 解决方案:插入
BUFG
(全局缓冲)或复制寄存器。
- 解决方案:插入
- 关键路径未优化:
- 检查逻辑层级,手动添加流水线(
pipeline
)。
- 检查逻辑层级,手动添加流水线(
- 控制集过多:
- 减少复位 / 使能信号种类,或启用
Control Set Optimization
。
- 减少复位 / 使能信号种类,或启用
0.1.8 总结#
Vivado 综合设置的核心是通过策略、属性、约束协同优化设计目标(性能 / 面积 / 功耗)。建议:
- 初始阶段:使用默认策略,逐步添加约束。
- 时序违例:优先调整
PerformanceOptimized_high
和Retiming
。 - 资源紧张:启用
AreaOptimized_high
和资源共享(如Resource Sharing
)。 - 迭代优化:结合综合报告与增量编译快速验证修改效果。