Design Compiler:Early Data Flow

相关阅读

Design Compilerhttps://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。

相关推荐
日晨难再6 天前
Design Compiler:SDC相关运行时间问题的报告和修复
数字ic
日晨难再11 天前
Design Compiler:Guide Hierarchical Map(GHM) Flow
数字ic
IC_Brother20 天前
数字IC经典电路(6)—Ring Oscillator(环形振荡器)与工艺角监控
verilog·数字ic·dc综合
0基础学习者1 个月前
跨时钟域处理
fpga开发·verilog·数字ic
日晨难再1 个月前
Design Compiler:时钟树在综合时的特性
数字ic
日晨难再1 个月前
SDC命令详解:使用set_dont_touch_network命令进行约束
数字ic·sdc命令
日晨难再4 个月前
Design Compiler:Milkyway库的创建与使用
硬件工程·数字ic
日晨难再5 个月前
Power Compiler:漏电功耗、内部功耗、切换功耗及其计算方式(NLPM)
硬件工程·数字ic
日晨难再5 个月前
Genus:设计信息结构以及导航方式(路径种类)
硬件工程·数字ic