vivado扫描:synth_1 和 Out-of-Context (OOC) Modules Runs 的区别(腾讯元宝)
在 Vivado 中,综合后生成的 synth_1
目录 和 Out-of-Context (OOC) Modules Runs 虽然都涉及综合过程,但它们的用途、工作流程和生成结果有显著区别。以下是详细对比:
1. synth_1
(默认综合运行)
特点
- 触发条件:当运行综合(
synth_design
)时,Vivado 默认生成一个名为<design>_synth_1
的目录。 - 作用范围:对整个顶层设计进行全局综合,所有子模块(包括 OOC 模块)会被一起处理。
- 输出内容:
- 综合后的网表(
.dcp
文件)。 - 资源利用率报告(
utilization.rpt
)。 - 时序报告(
timing.rpt
)。 - 日志文件(
runme.log
)。
- 综合后的网表(
适用场景
- 首次综合整个设计。
- 需要分析顶层设计的全局资源或时序。
- 不涉及模块化或增量编译的简单项目。
关键限制
- 每次修改任意子模块(包括 OOC 模块)后,必须重新运行全局综合,耗时长。
2. Out-of-Context (OOC) Modules Runs**
特点
- 触发条件:手动将某个模块标记为 OOC(右键模块 → Set as Out-of-Context),或通过 Tcl 命令:
tcl
tcl
复制
set_property SYNTH_CHECKPOINT_MODE OutOfContext [get_files <module>.vhd]
- 作用范围:仅对单个模块独立综合,不依赖顶层设计。
- 输出内容:
- 模块独立的
.dcp
文件(位于<module>_synth_1
目录)。 - 模块级约束和时序报告。
- 黑箱接口定义(供顶层集成使用)。
- 模块独立的
适用场景
- 模块化设计(如 IP 核开发)。
- 团队协作(多人并行开发不同模块)。
- 增量编译(仅重新综合修改的模块)。
关键优势
- 隔离性:模块约束和综合与顶层解耦。
- 复用性:未修改的模块 DCP 可直接复用,减少编译时间。
3. 核心区别对比
特性 | **synth_1 (默认综合)** | OOC Modules Runs |
---|---|---|
综合对象 | 整个顶层设计 | 单个独立模块 |
依赖关系 | 需要完整设计上下文 | 无需顶层设计(脱离上下文) |
输出位置 | <design>_synth_1 | <module>_synth_1 |
修改影响范围 | 任何修改需重新综合整个设计 | 仅需重新生成修改的模块 DCP |
黑箱处理 | 不适用 | 顶层综合时将 OOC 模块视为黑箱 |
适用阶段 | 初始综合或全局修改 | 模块化开发/增量编译 |
4. 工作流程示例
场景:设计包含模块 A
(OOC)和顶层 top
。
- OOC 模块处理:
- 综合模块
A
生成A_synth_1/A.dcp
。 - 顶层综合时直接引用
A.dcp
,无需重新综合A
。
- 综合模块
- 默认综合处理:
- 若未使用 OOC,每次修改
A
或top
均需重新运行top_synth_1
。
- 若未使用 OOC,每次修改
Tcl 命令对比
- OOC 模块综合:
tcl
tcl
复制
synth_design -top A -mode out_of_context
- 默认综合:
tcl
tcl
复制
synth_design -top top
5. 如何选择?
- 用 OOC 模式:
- 模块接口稳定且需重复使用。
- 设计庞大,需减少综合时间。
- 用默认综合:
- 小型设计或快速迭代。
- 需要全局优化(如跨模块时序分析)。
6. 注意事项
- OOC 的约束隔离:OOC 模块需单独约束(如时钟定义),与顶层约束可能冲突,需协调。
- 版本同步:若 OOC 模块的接口(端口/参数)修改,必须重新生成 DCP。
- 调试支持:OOC 模块的调试信息(如波形)需在顶层实现后完整生成。
通过合理选择综合模式,可以显著提升 Vivado 的工作效率。对于复杂设计,推荐混合使用:关键模块用 OOC,顶层用默认综合。