相关阅读
Design Compiler
https://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482
在设计周期的早期迭代中,设计数据可能是不完整的、错误的或不一致的。这会阻碍你对设计进行实现、探索等工作。拓扑模式的Design Compiler NXT在2022版本推出了Early Data Flow,允许用户执行数据检查,并指定综合工具如何处理这些检查。该功能可以改善运行时间,但可能会对结果质量(QoR)产生一定影响。
Early Data Flow由Early Data Check Manager和Low-Effort Flow组成,其中Early Data Check Manager允许用户在设计周期的早期阶段检查设计中的问题,Low-Effort Flow则可以关闭高强度优化过程,降低引擎的努力等级,在结果质量(QoR)与运行时间之间取得平衡。
使用Early Data Check Manager
使用set_early_data_check_policy命令即可启动Early Data Check Manager,set_early_data_check_policy命令的BNF范式(有关BNF范式,可以参考以往文章)为:
set_early_data_check_policy
[-checks checks]
-policy [error | tolerate | repair | strict | lenient]
//注:-policy选项的error, tolerate, repair参数只有在指定-checks选项时可以使用(即无法当做全局策略设置)
Design Compiler提供了一套检查项,每个检查项支持一些策略(在error、tolerate、repair之中选择若干),用户需要首先在set_early_data_check_policy -policy strict和set_early_data_check_policy -policy lenient命令之中选择其一执行(不指定-checks选项即设置全局策略),strict表示检查项被设置为其所支持的最高严重级别策略(即按照error、tolerate、repair的顺序尝试设置),lenient表示检查项被设置为其所支持的最低严重级别策略(即按照repair、tolerate、error的顺序尝试设置),随后用户可以指定-checks选项以设置各检查项的策略(覆盖之前的全局策略),工具将出现以下提示表明开启了Early Data Check Manager。
Information: Early data checks are enabled. (DCT-453)
使用report_early_data_checks命令可以报告所有检查项设置的策略、出现次数以及支持的策略,如下所示。
dcnxt_shell-topo> report_early_data_checks
****************************************
Report : report_early_data_checks
Design : TOP
Version: W-2024.09-SP2
Date : Fri Dec 12 00:18:06 2025
****************************************
Check Applied Policy Fail Count Supported Policies
------------------------------------------------------------------------------------------------
ldc_busBitBlasted error 0 error,repair
ldc_busWidthMismatch error 0 error,repair
ldc_missingLogicalPins error 2 error,repair
ldc_missingLogicalReference error 0 error,repair
ldc_missingPhysicalCells tolerate 0 tolerate
ldc_missingPhysicalPins tolerate 0 tolerate
ldc_pinDirectionMismatch tolerate 1 tolerate
ldc_pinNameSynonym error 0 error,repair
ldc_unconnectedInterfacePins error 0 error,repair
pdc_blockedPins tolerate 0 tolerate
pdc_emptyRegions tolerate 0 error,tolerate
pdc_groupsOverlap tolerate 0 error,tolerate
pdc_ignoreSpecialpgNets tolerate 1 tolerate,repair
pdc_macroOutsideCore tolerate 0 error,repair,tolerate
pdc_macrosOverlap tolerate 0 error,repair,tolerate
pdc_physicalOnlyCells tolerate 0 error,tolerate
pdc_placerOverUtil tolerate 0 error,tolerate
pdc_regionOutsideCore tolerate 0 error,tolerate
pdc_voltageAreaOverUtil tolerate 3 error,tolerate
------------------------------------------------------------------------------------------------
使用remove_early_data_check_records命令即可重置所有检查项的出现次数。
使用Low-Effort Flow
在Design Compiler:简化性能、功耗和面积(PPA)的优化设置(set_qor_strategy命令)一文中,我们了解了如何使用set_qor_strategy命令设置应用变量,其中-mode选项可用于指定目标模式,默认为balanced,在Early Data Flow中需要将其设置为early_design,此时工具会自动关闭 PPA相关的高强度优化设置,并在综合时将物理数据检查项的全局策略设置为lenient,该设置的优先级低于set_early_data_check_policy命令。
物理数据检查
在之前的版本中,compile_ultra或compile_ultra -check_only命令可以对物理数据进行检查,并产生警告或错误,例如当宏单元被发现放置在核心区域外时,会产生PDC-029警告或PDC-028错误,Early Data Check Manager拓展了更多检查项,这些检查项被命名为pdc_**,如表1所示。
表1 物理数据检查项
|-------------------------|-----------------------|----------------------------------------|---------------------------------|
| 检查项 | 支持的策略 | 描述 | 提示信息 |
| pdc_groupsOverlap | error、tolerate | 检查bound与电压域是否发生重叠 | PDC-024、PDC-025、PDC-026、PDC-027 |
| pdc_regionOutsideCore | error、tolerate | 检查bound与电压域是否位于核心区域外 | PDC-022、PDC-023 |
| pdc_emptyRegions | error、tolerate | 检查是否存在空的bound或电压域 | PDC-020、PDC-021 |
| pdc_physicalOnlyCells | error、tolerate | 检查物理仅有单元是否超过阈值 | PDC-033、PDC-034 |
| pdc_blockedPins | tolerate | 检查在全局布线中阻塞布线的实例(通过report_congestion命令) | PDC-035 |
| pdc_voltageAreaOverUtil | error、tolerate | 检查电压域是否过度利用,可能导致布局问题 | PDC-037、PDC-038 |
| pdc_placerOverUtil | error、tolerate | 检查布局器是否处于过度利用状态 | PDC-039、PDC-040 |
| pdc_macroOutsideCore | error、tolerate、repair | 检查是否有宏单元位于核心区域外 | PDC-028、PDC-029、PDC-032 |
| pdc_macrosOverlap | error、tolerate、repair | 检查是否有宏单元发生重叠 | PDC-031、PDC-031a、PDC-032 |
| pdc_ignoreSpecialpgNets | error、tolerate | 忽略特殊的电源/地线网 | |
需要注意的是,如果检查项的策略是repair,则需要调用IC Compiler II Link,需要工具处于Milkyway模式且使用了set_icc2_options命令或工具处于NDM模式,否则会出现下面的警告。
Warning: The repair policy is ignored due to absense of NDM reference libraries. (DCT-424)
逻辑数据检查
从2023版本开始,除了物理数据,Design Compiler还支持逻辑数据检查,这是原本来自于DC Explorer的功能,它是一款用于RTL早期探索和快速综合预测的工具。
这些检查项被命名为ldc_**,如表2所示。
表2 逻辑数据检查项
|------------------------------|--------------|------------------------------------------------|---------------------------------------------------|
| 检查项 | 支持的策略 | 描述 | 提示信息 |
| ldc_missingLogicalReference | error、repair | 逻辑库中缺失单元(库单元vs叶单元)或缺少模块(顶层模块vs子模块) | LINK-5、LINK-909、LINK-919、DESH-017 |
| ldc_missingLogicalPins | error、repair | 库单元缺失引脚(库单元vs叶单元)或模块缺失引脚(顶层模块vs子模块) | LINK-1、LINK-5、LINK-902、LINK-903、LINK-911、DESH-017 |
| ldc_busWidthMismatch | error、repair | 位宽不匹配(库单元vs叶单元或顶层模块vs子模块) | LINK-3、LINK-5、LINK-903、LINK-904、LINK-911、DESH-017 |
| ldc_unconnectedInterfacePins | error、repair | 引脚未连接(库单元vs叶单元或顶层模块vs子模块) | DESH-017 |
| ldc_pinNameSynonym | error、repair | 由于别名(Synonym)导致的引脚名称不匹配(库单元vs叶单元或顶层模块vs子模块) | LINK-1、LINK-5、LINK-901、DESH-017 |
| ldc_busBitBlasted | error、repair | 由于位拆分(Bit-Blast)导致的引脚名称不匹配(库单元vs叶单元或顶层模块vs子模块) | LINK-1、LINK-5、LINK-912、DESH-017 |
如果检查项的策略是repair,可以使用report_design_mismatch命令报告有哪些被修复的逻辑数据问题,如下所示,但修复可能导致验证或形式验证失败。
dcnxt_shell-topo> report_design_mismatch
****************************************
Report : design mismatches
Design : top
Version: W-2024.09-SP2
Date : Sat Dec 13 22:08:01 2025
****************************************
Number of missing pins on logical library cells : 1
Design Object Type Mismatch
-----------------------------------------------------------------------
top U1 cell 'BOG_IN' pin on 'U1' cell in 'top' design is missing from the 'AND4X4_HVT' reference.
Number of unconnectable nets due to missing pins : 1
Design Object Type Mismatch
-----------------------------------------------------------------------
top BOG_IN net Unable to connect 'BOG_IN' net to the 'BOG_IN' pin of 'U1' cell in 'top' design.
Number of linker anchor cells : 1
Design Object Type Mismatch
-----------------------------------------------------------------------
top U1_SNPBSBIT_BOG_IN cell Linker anchor cell inserted for unconnectable pin on 'U1' cell.
在2024版本中,新增了三个检查项,如表3所示。
表3 逻辑数据检查项
|--------------------------|-----------|----------------------|----------------------------|
| 检查项 | 支持的策略 | 描述 | 提示信息 |
| ldc_missingPhysicalCells | tolerate | 逻辑库存在单元,但物理库中不存在 | PSYN-024、PSYN-039 |
| ldc_missingPhysicalPins | tolerate | 单元引脚存在于逻辑库,但不存在于物理库 | PSYN-024、PSYN-039、PSYN-200 |
| ldc_pinDirectionMismatch | tolerate | 单元引脚逻辑库与物理库中的引脚方向不一致 | PSYN-024、PSYN-039、PSYN-058 |
SDC约束检查
在Design Compiler:SDC相关运行时间问题的报告和修复一文中,我们了解了如何通过sdc_runtime_analysis_enable变量以及check_timing -sdc_runtime命令报告关于SDC约束复杂性的反馈信息,在2025版本中,Design Compiler将其引入了Early Data Check Manager。
这些检查项被命名为sdc_**,如表4所示。
表4 SDC约束检查检查项
|-----------------------------|-----------------|----------------------------------------------------------------------------------------------|----------------------------------|
| 检查项 | 支持的策略 | 描述 | 提示信息 |
| sdc_duplicateClocks | tolerate、repair | 当大量周期和波形相同的时钟到达同一个时钟引脚,综合工具在优化时会将这些时钟逐一考虑,导致运行时间显著增加 | TIM-612 |
| sdc_infeasiblePaths | tolerate、repair | 当设计中存在不可行路径时 | TIM-604 |
| sdc_highFanoutNets | tolerate、repair | 如果设计中存在高扇出线网,且这些网络未使用set_ideal_network和set_dont_touch_network等命令约束,综合时对这些线网进行缓冲可能会增加运行时间 | TIM-606 |
| sdc_missingTimingExceptions | tolerate、repair | 如果设计中出现很高的WNS,可能的原因之一就是缺少多周期(set_multicycle_path)或虚假路径约束(set_fasle_path),在这种情况下优化设计可能会增加运行时间 | TIM-608 |
| sdc_unusedClocks | tolerate、repair | 设计中有些时钟并未被实际使用,但仍然存在于数据库中,这会成为综合工具额外运行时间的来源 | TIM-601 |
| sdc_noPathExists | tolerate、repair | 约束可能被施加在实际上不存在的时序路径上,这会导致综合工具运行时间变长 | TIM-610 |
| sdc_multipleClocksOnPorts | tolerate、repair | 当输入/输出端口被大量时钟约束时,综合工具为了优化会增加运行时间 | TIM-607 |
| sdc_multipleClocksOnPin | tolerate、repair | 多时钟交互(多个时钟到达同一个触发器的时钟引脚)可能导致运行时间显著上升 | TIM-099、TIM-605、TIM-613、TIM-614、 |
| sdc_overConstraining | tolerate、repair | 当大量存在严格约束的时序组共享同一个时钟驱动时,优化可能会显著增加运行时间 | TIM-603 |
可以使用report_sdc_fixes命令报告有哪些被修复的SDC约束问题,如下所示。
dcnxt_shell-topo> report_sdc_fixes
****************************************
Report : sdc fixes
Design : ORCA_TOP
Version: X-2025.06-DEV
Date : Thu Apr 24 14:17:57 2025
****************************************
Number of duplicate clocks fixed/repaired in the design : 2
Design Clock Name Constraint File
----------------------------------------------------------------------------------------------------
ORCA_TOP clk_dup_24 /remote/testcases/TC19/9001410001_9001410500/9001410404/early_data_SDC_4_X_Proj/TESTCASES_0305/DATABASE_1/test.sdc:34
ORCA_TOP clk_dup_23 /remote/testcases/TC19/9001410001_9001410500/9001410404/early_data_SDC_4_X_Proj/TESTCASES_0305/DATABASE_1/test.sdc:33
Number of unused clocks fixed/repaired in the design : 2
Design Clock Name Constraint File
----------------------------------------------------------------------------------------------------
ORCA_TOP clk_unused_24 /remote/testcases/TC19/9001410001_9001410500/9001410404/early_data_SDC_4_X_Proj/TESTCASES_0305/DATABASE_1/test.sdc:44
ORCA_TOP clk_unused_23 /remote/testcases/TC19/9001410001_9001410500/9001410404/early_data_SDC_4_X_Proj/TESTCASES_0305/DATABASE_1/test.sdc:43
SDC约束问题的修复与Design Compiler:SDC相关运行时间问题的报告和修复类似,可以通过sdc_runtime_analysis_log_file变量设置报告保存的文件,如果将其设置为空则输出至标准输出,默认情况下报告保存在sdc_runtime_<timestamp>.log文件中,生成的包含推荐修复方案的Tcl文件名为<报告名>.tcl。