Design Compiler:Multibit优化(布局感知的Multibit Banking流程)

📅 2026/8/5 14:57:00
Design Compiler:Multibit优化(布局感知的Multibit Banking流程)
相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482写在开始关于Multibit优化的简介和RTL向量自动推断流程、手动创建多比特组件流程已经在之前的文章中讨论本文将不再赘述具体内容可以参考下面的博客建议在阅读本文前先学习该文章。Design CompilerMultibit优化RTL向量自动推断流程和手动创建多比特组件流程https://chenzhang.blog.csdn.net/article/details/155949999布局感知的Multibit Banking流程拓扑模式的Design Compiler Graphical推出了布局感知的Multibit Banking流程会将物理位置上彼此接近的单比特单元分组并进行替换与RTL向量自动推断流程和手动创建多比特组件流程相比更加强大。图1展示布局感知的Multibit Banking流程。图1 布局感知的Multibit Banking流程具体来说identify_register_banks命令会识别物理位置上彼此接近、且相互兼容的单比特单元并生成一个包含create_register_bank命令的Tcl脚本随后可以执行该脚本完成单比特单元到多比特单元的实际替换需要注意在RTL向量自动推断流程和手动创建多比特组件流程中实际替换在综合时发生。多比特映射引导文件Multibit Banking流程可以使用输入映射文件(Input Map File)和寄存器分组文件(Register Group File)作为映射的引导文件它们都是ASCII文本文件。如果未指定这些文件identify_register_banks命令会根据库中单元的功能信息自动识别哪些单比特单元可以被可用的多比特单元替换。本节谈到的单比特单元和多比特单元指的都是库单元。输入映射文件输入映射文件用于指定用哪些多比特单元来替换给定位宽寄存器组中的单比特单元该文件由多行文本组成每一行的格式如下number_of_bits {number_of_instances multibit_lib_cell_name} [ { ... } ]下面是一个示例2 {1 dff_2bit} ; 将2个单比特单元映射为1个dff_2bit单元 3 {1 dff_2bit} ; 将3个单比特单元映射为1个dff_2bit单元 1个单比特单元 4 {1 dff_4bit} ; 将4个单比特单元映射为1个dff_4bit单元 5 {1 dff_4bit} ; 将5个单比特单元映射为1个dff_4bit单元 1个单比特单元 6 {1 dff_4bit} {1 dff_2bit} ; 将6个单比特单元映射为1个dff_4bit单元 1个dff_2bit单元 7 {1 dff_4bit} {1 dff_2bit} ; 将7个单比特单元映射为1个dff_4bit单元 1个dff_2bit单元 1个单比特单元 8 {2 dff_4bit} ; 将8个单比特单元映射为2个dff_4bit单元 .....该列表应持续定义直到你希望综合工具替换的最大单比特单元数量通常为32位。如果库中存在多种仅在物理尺寸或驱动能力上不同的多比特单元输入映射文件中只需列出面积最小的单元综合工具会优先使用这些最小面积的单元在之后的优化过程中根据时序需要将这些单元放大(size up)为更大驱动能力的版本。如果用户希望对同一位宽使用多种多比特单元则需要为每种库单元分别重复定义例如2 {1 dff_2bitA} ; 将2个单比特单元映射为1个dff_2bitA单元 2 {1 dff_2bitB} ; 将2个单比特单元映射为1个dff_2bitB单元 3 {1 dff_2bitA} ; 将3个单比特单元映射为1个dff_2bitA单元 1个单比特单元 3 {1 dff_2bitB} ; 将3个单比特单元映射为1个dff_2bitB单元 1个单比特单元 .....但需要注意的是即使上例中同一位宽映射的库单元可以不同但其位宽配置需要一样否则以第一条定义为准例如4 {1 dff_4bitA} ; 将4个单比特单元映射为1个dff_4bitA单元 4 {2 dff_2bitA} ; 将4个单比特单元映射为2个dff_2bitA单元被忽略寄存器分组文件输入映射文件只指定了多比特单元的类型寄存器分组文件则指定了哪些单比特单元可以被分在一个寄存器组以及每种寄存器组允许使用哪些多比特单元进行替换该文件由多行文本组成每一行的格式如下reg_group_name number {1_bit_lib_cells} {multibit_lib_cells}其中number表示后续花括号中的单比特单元数量下面是一个示例reg_group_plain 3 {dff_A dff_B dff_C} {dff_2bit dff_4bit} reg_group_scan 3 {sdff_A sdff_B sdff_C} {sdff_2bit sdff_4bit} reg_group_Reset 2 {Rdff_A Rdff_B} {Rdff_2bit Rdff_4bit} reg_group_Reset_scan 2 {Rsdff_A Rsdff_B} {Rsdff_2bit Rsdff_4bit}第一行表示单比特单元dff_A、dff_B、dff_C可以被分在一个寄存器组reg_group_plain该寄存器组也只能被多比特单元dff_2bit和dff_4bit替换。后面三行则定义了扫描触发器组reg_group_scan、带复位触发器组reg_group_Reset和带复位的扫描触发器组reg_group_Reset_scan。当上面的寄存器分组文件与如下输入映射文件配合使用时可以完整定义允许的寄存器分组与映射关系2 {1 dff_2bit} 2 {1 sdff_2bit} 2 {1 Rdff_2bit} 2 {1 Rsdff_2bit} 3 {1 dff_2bit} 3 {1 sdff_2bit} 3 {1 Rdff_2bit} 3 {1 Rsdff_2bit} ... 6 {1 dff_2bit 1 dff_4bit} 6 {1 sdff_2bit 1 sdff_4bit} 6 {1 Rdff_2bit 1 Rdff_4bit} 6 {1 Rsdff_2bit 1 Rsdff_4bit} ... 32 {8 dff_4bit} 32 {8 sdff_4bit} 32 {8 Rdff_4bit} 32 {8 Rsdff_4bit}指定寄存器分组在布局感知的Multibit Banking流程中要将单比特单元分成寄存器组可在综合工具中使用identify_register_banks命令此时综合工具会进行可行性分析并立即生成一个包含create_register_bank命令的Tcl脚本。只有在满足以下条件的前提下单比特单元才可能被分为寄存器组单比特单元位于相同的逻辑层级单比特单元位于相同的物理边界(bound)内如有单比特单元由相同的时钟线网驱动单比特单元由相同的控制信号线网驱动-common_net_pins选项控制该条件单比特单元在寄存器分组文件中属于同一个寄存器组单比特单元上没有设置dont_touch属性、size_only属性或fixed_placement属性默认情况下如果某个单比特单元在共享引脚时钟引脚、控制引脚上设置了时序例外如虚假路径、多周期路径则需要同组的其他单比特单元也是如此如果使用了set_multibit_options命令的-exclude_registers_with_timing_exceptions选项则不允许单比特单元设置时序例外identify_register_banks命令在执行过程中会输出类似如下的信息Total number of ignored flops which are multi-bit flops : 80 Total ignored flops : 80 Total flops banked : 5606 Total flops in design : 6064 Banking ratio : 92.45% Effective banking ratio: 93.68%其中Banking ratio定义为已分组单元数/设计中的单元总数Effective banking ratio定义为已分组单元数/(设计中的单元总数-被忽略的单元数多比特单元按照其比特数计算数量。Banking ratio和Effective banking ratio是identify_register_banks命令分析的结果实际执行create_register_bank命令进行替换时可能会被综合工具拒绝因此最终通过report_multibit_banking命令报告的分组比例可能不同。与RTL向量自动推断流程和手动创建多比特组件流程类似多比特单元替换前report_multibit命令可用于报告设计中的多比特组件此时称为寄存器组更合适以及其中包含的单元多比特单元替换后report_multibit命令可用于报告设计中的多比特组件此时称为寄存器组更合适的实现情况。多比特组件被命名为phys_mb_*以表明其实际上是由布局感知的Multibit Banking流程得到的。identify_register_banks命令identify_register_banks命令的BNF范式有关BNF范式可以参考以往文章为identify_register_banks -output_file file_name [-input_map_file file_name -register_group_file file_name | -multibit_components_only] [-exclude_instances exclude_cells] [-wns_threshold percentage] [-common_net_pins names] [-name_prefix prefix] [-exclude_library_cells library_cells] [-multibit_components_only] //注该命令的选项和参数顺序任意identify_register_banks命令用于将设计中的单比特单元分配到不同的寄存器组中该命令并不会真正替换单比特单元而是生成一个Tcl脚本其中包含一系列create_register_bank命令要真正执行多比特单元替换并修改设计网表必须执行该脚本。任何已经存在的多比特单元都会被identify_register_banks命令自动排除在分组过程之外忽略。如果不通过-input_map_file和-register_group_file选项指定输入映射文件和寄存器分组文件identify_register_banks命令会根据库中单元的功能信息自动识别哪些单比特单元可以被可用的多比特单元替换并提示以下信息。此时综合工具只会对在公共引脚上具有相同线网连接的单比特单元进行分组不必显式指定-common_net_pins选项。Information: Multi-bit library matching and banking solutions are being generated automatically. (PSYN-1255)如果通过-input_map_file和-register_group_file选项指定输入映射文件和寄存器分组文件必须同时指定两文件否则会被忽略综合工具会按照指定规则进行分组并提示以下信息。Information: Multi-bit library matching and banking solutions are being extracted from files ***** and *****. (PSYN-1255)如果想查看综合工具自动识别的规则可以使用write_multibit_guidance_files命令该命令会生成输入映射文件和寄存器分组文件以反映综合工具的内置行为。用户可以修改这些文件并在执行identify_register_banks命令时指定以进行定制化微调。-exclude_instances选项用于将特定单比特单元排除-wns_threshold选项用于将部分时序负裕量的单比特单元排除-exclude_library_cells选项用于将特定库单元排除。-multibit_components_only选项指定仅对属于同一个多比特组件的单比特单元进行分组这相当于将RTL向量自动推断流程和手动创建多比特组件流程与布局感知的Multibit Banking流程进行了结合该功能由2016版本引入图1和图2分别展示了利用该选项的单会话流程和多会话流程即使用write_multibit_components命令保存多比特组件信息。图2 使用-multibit_components_only选项时的单会话流程图3 使用-multibit_components_only选项时的多会话流程需要注意的是-multibit_components_only选项不能和-input_map_file、-register_group_file选项一起使用即该流程不能指定输入映射文件和寄存器分组文件。多比特单元命名规则2014版本引入的变量banking_enable_concatenate_name默认值为true用于控制布局感知的Multibit Banking流程中identify_register_banks命令生成的Tcl脚本中create_register_bank命令所使用的的多比特单元名称。默认情况下当实现多个多比特单元时综合工具会使用下划线将各单比特单元的名称连接起来如下所示-name_prefix选项可用于指定额外的前缀。create_register_bank -name q0_reg[11]_q0_reg[16]_q0_reg[53]_q0_reg[55] { q0_reg[11] q0_reg[16] q0_reg[53] q0_reg[55] } -lib_cell saed14hvt_base_ff0p88v25c/SAEDHVT14_LSRDPQ4_1当该变量设置为false时综合工具恢复到2014版本前的旧版命名方式prefixN1_N2如下所示其中默认前缀为groupN1和N2为整数保证其命名唯一性前缀可使用-name_prefix选项指定。create_register_bank -name group0_0 { q0_reg[11] q0_reg[16] q0_reg[53] q0_reg[55] } -lib_cell saed14hvt_base_ff0p88v25c/SAEDHVT14_LSRDPQ4_1合并与拆分create_register_bank命令create_register_bank命令的BNF范式有关BNF范式可以参考以往文章为create_register_bank object_list [-name bank_name] -lib_cell library_name/lib_cell_name //注该命令的选项和参数顺序任意create_register_bank命令完成了单比特单元到多比特单元的实际替换操作用户可以修改、删除、编辑Tcl脚本中的create_register_bank命令需要注意的是对于Design Compiler-lib_cell选项是必须的。下面展示了将单比特单元q0_reg[1]、q0_reg[2]、q0_reg[3]、q0_reg[4]替换为多比特单元merg的过程。dcnxt_shell-topo create_register_bank -name merg {q0_reg[1] q0_reg[2] q0_reg[3] q0_reg[4]} -lib_cell saed14hvt_base_ff0p88v25c/SAEDHVT14_LSRDPQ4_1 ************ CREATE BANK ************ Creating cell merg in design test Removing cell q0_reg[1] Removing cell q0_reg[2] Removing cell q0_reg[3] Removing cell q0_reg[4] ********* CONNECTION SUMMARY ************ Cell: merg Reference: SAEDHVT14_LSRDPQ4_1 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D1 N4 CK clk D2 N5 D3 N6 D4 N7 Output Pins Net ---------------- ------------ Q1 q0[1] QN1 Q2 q0[2] QN2 Q3 q0[3] QN3 Q4 q0[4] QN4 ************ BANKING SUMMARY ************ The following 4 register instances: q0_reg[1] q0_reg[2] q0_reg[3] q0_reg[4] have been merged into 4-bit register merg (lib_cell : SAEDHVT14_LSRDPQ4_1)综合工具有可能拒绝create_register_bank命令该命令执行期间综合工具会检查指定单比特单元是否满足以下条件单比特单元已映射且与目标多比特单元功能等价单比特单元位于相同的逻辑层级单比特单元位于相同的物理边界(bound)内如有单比特单元由相同的时钟线网驱动单比特单元由相同的控制信号线网驱动单比特单元上没有设置dont_touch属性或fixed_placement属性单比特单元上具有相同的size_only属性如果某个单比特单元在共享引脚时钟引脚、控制引脚上设置了时序例外如虚假路径、多周期路径则需要同组的其他单比特单元也是如此如果这些单比特单元不满足上述条件它们将不会被替换为多比特单元并且综合工具会生成一条PSYN消息例如dcnxt_shell-topo create_register_bank -name group0_1 {data_a_reg data_b_reg} -lib_cell mb_lib/MB2FF ************ CREATE BANK ************ Warning: Inconsistent net connection between pin (data_a_reg/CLK) and pin (data_2_reg/CLK) (PSYN-1203)在使用create_register_bank命令之后多比特单元的布局位置可能并不是最优的经过笔者的实验多比特单元的位置由列表中最后一个单比特单元的位置决定。在增量综合过程中综合工具会重新布局多比特单元以获得更好的结果质量(QoR)如图4所示。图4 Multibit分组当工具用多比特单元替换单比特单元时会在该多比特单元上设置一个名为register_list的属性顺序与列表中一致映射时按照多比特单元引脚名升序该属性记录了被映射到该多比特单元中的原始单比特单元列表。split_register_bank命令split_register_bank命令的BNF范式有关BNF范式可以参考以往文章为split_register_bank bank_name -lib_cells list_of_lib_cells //注该命令的选项和参数顺序任意要将一个多比特单元拆分为比特数更少的单元包括单比特单元可以使用split_register_bank命令需要注意的是对于Design Compiler-lib_cell选项是必须的。下面展示了将一个多比特单元merg拆分为单比特单元q0_reg[1]、q0_reg[2]、q0_reg[3]、q0_reg[4]的过程。dcnxt_shell-topo split_register_bank merg -lib_cells {saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5} ************ CREATE SPLIT REGISTERS ************ Creating cell q0_reg[1] in design test Creating cell q0_reg[2] in design test Creating cell q0_reg[3] in design test Creating cell q0_reg[4] in design test Warning: The pin of specified cell is dangling: merg/QN1 . (PSYN-1206) Warning: The pin of specified cell is dangling: merg/QN2 . (PSYN-1206) Warning: The pin of specified cell is dangling: merg/QN3 . (PSYN-1206) Warning: The pin of specified cell is dangling: merg/QN4 . (PSYN-1206) Removing cell merg ********* CONNECTION SUMMARY ************ Cell: q0_reg[1] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N4 CK clk Output Pins Net ---------------- ------------ Q q0[1] QN ********* CONNECTION SUMMARY ************ Cell: q0_reg[2] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N5 CK clk Output Pins Net ---------------- ------------ Q q0[2] QN ********* CONNECTION SUMMARY ************ Cell: q0_reg[3] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N6 CK clk Output Pins Net ---------------- ------------ Q q0[3] QN ********* CONNECTION SUMMARY ************ Cell: q0_reg[4] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N7 CK clk Output Pins Net ---------------- ------------ Q q0[4] QN ************ SPLITTING SUMMARY ************ The original 4-bit register bank merg has been split into 4 instances: q0_reg[1] q0_reg[2] q0_reg[3] q0_reg[4]该命令会按照库单元列表的顺序分配多比特单元中的每一比特并使用多比特单元的register_list属性中保存的原始单比特单元名。如果因为某种原因多比特单元丢失了register_list属性比如将设计保存为Verilog格式的网表此时如果被拆分将使用多比特单元名重新命名如下所示。dcnxt_shell-topo split_register_bank merg -lib_cells {saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FDP_V2_0P5} ************ CREATE SPLIT REGISTERS ************ Creating cell merg_bank[0] in design test Creating cell merg_bank[1] in design test Creating cell merg_bank[2] in design test Creating cell merg_bank[3] in design test Removing cell merg ********* CONNECTION SUMMARY ************ Cell: merg_bank[0] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N4 CK clk Output Pins Net ---------------- ------------ Q q0[1] QN ********* CONNECTION SUMMARY ************ Cell: merg_bank[1] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N5 CK clk Output Pins Net ---------------- ------------ Q q0[2] QN ********* CONNECTION SUMMARY ************ Cell: merg_bank[2] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N6 CK clk Output Pins Net ---------------- ------------ Q q0[3] QN ********* CONNECTION SUMMARY ************ Cell: merg_bank[3] Reference: SAEDHVT14_FDP_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N7 CK clk Output Pins Net ---------------- ------------ Q q0[4] QN ************ SPLITTING SUMMARY ************ The original 4-bit register bank merg has been split into 4 instances: merg_bank[0] merg_bank[1] merg_bank[2] merg_bank[3]需要注意的是register_list属性仅适用于将多比特单元拆分为单比特单元的情况如果将多比特单元拆分为比特数更少的多比特单元则还是会使用多比特单元名重新命名如下所示。dcnxt_shell-topo split_register_bank merg -lib_cells {saed14hvt_base_ff0p88v25c/SAEDHVT14_FSDN2_V2_0P5 saed14hvt_base_ff0p88v25c/SAEDHVT14_FSDN_V2_1 saed14hvt_base_ff0p88v25c/SAEDHVT14_FSDN_V2_1} ************ CREATE SPLIT REGISTERS ************ Creating cell merg_bank[1_0] in design test Creating cell q0_reg[2] in design test Creating cell q0_reg[3] in design test Removing cell merg ********* CONNECTION SUMMARY ************ Cell: merg_bank[1_0] Reference: SAEDHVT14_FSDN2_V2_0P5 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D0 N3 CK clk SE n1 SI n1 D1 N4 Output Pins Net ---------------- ------------ Q0 q0[0] QN0 Q1 q0[1] QN1 ********* CONNECTION SUMMARY ************ Cell: q0_reg[2] Reference: SAEDHVT14_FSDN_V2_1 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N5 SI n1 SE n1 CK clk Output Pins Net ---------------- ------------ Q q0[2] QN ********* CONNECTION SUMMARY ************ Cell: q0_reg[3] Reference: SAEDHVT14_FSDN_V2_1 Hierarchy: test Library: saed14hvt_base_ff0p88v25c Input Pins Net ---------------- ------------ D N6 SI n1 SE n1 CK clk Output Pins Net ---------------- ------------ Q q0[3] QN ************ SPLITTING SUMMARY ************ The original 4-bit register bank merg has been split into 3 instances: merg_bank[1_0] q0_reg[2] q0_reg[3]在使用split_register_bank命令之后单元的布局位置可能并不是最优的经过笔者的实验单元的位置由多比特单元的位置决定。在增量综合过程中综合工具会重新布局单元以获得更好的结果质量(QoR)如图5所示。图5 Multibit拆分set_multibit_options命令set_multibit_options命令的BNF范式有关BNF范式可以参考以往文章为set_multibit_options [-default] [-stage rtl | physical | debanking | banking_all | none] [-mode non_timing_driven | timing_driven | timing_friendly | none] [-critical_range range | -slack_threshold percentage] [-path_groups list_of_pathgoups] [-exclude_registers_with_timing_exceptions true|false] [-ignore_timing_exceptions list_of_timing_exceptions_to_not_exclude] [-exclude cells_to_exclude] [-name_prefix prefix_for_created_mb_cells] [-multibit_components_only] //注该命令的选项和参数顺序任意该命令可以控制布局感知的Multibit Banking流程。-mode选项对布局感知的Multibit Banking流程无效如果使用-stage physical选项则该选项可以在增强型布局感知的Multibit Banking流程生效。默认情况下如果某个单比特单元在共享引脚时钟引脚、控制引脚上设置了时序例外如虚假路径、多周期路径则需要同组的其他单比特单元也是如此如果某个单比特单元在非共享引脚上设置了时序例外如虚假路径、多周期路径综合工具可以将时序例外转移到多比特单元上。如果使用了set_multibit_options命令的-exclude_registers_with_timing_exceptions选项则不允许单比特单元设置时序例外-ignore_timing_exceptions选项用于在使用-exclude_registers_with_timing_exceptions选项的基础上允许部分时序例外支持group_path、false_path、multicycle_path、max_delay、min_delay。需要注意的是只有未使用-stage选项的时-exclude_registers_with_timing_exceptions选项和-ignore_timing_exceptions选项才生效如果使用-stage physical选项则这些选项可以在增强型布局感知的Multibit Banking流程生效。该命令的-exclude选项、-name_prefix选项、-multibit_components_only选项对布局感知的Multibit Banking流程无效需要使用identify_register_banks命令的同名选项如果使用-stage physical选项则这些选项可以在增强型布局感知的Multibit Banking流程生效。-critical_range选项和-path_groups选项可以开启时序感知的Multibit增量综合拆分流程该功能由2016版本引入该流程发生在图1的最后一步图6展示了时序感知的Multibit增量综合拆分流程。图6 时序感知的Multibit增量综合拆分将单比特单元替换为多比特单元有时会影响设计的时序结果质量(QoR)。相反将关键路径上的多比特单元拆分为单比特单元则可以改善时序结果质量(QoR)。综合工具可以在增量综合需要使用compile_ultra -spg -incr命令过程中识别多比特单元中的关键比特并将其拆分成单比特单元并将非关键比特重新合并成更小位宽的多比特单元如图7所示。需要注意的是综合工具仅在这种操作能够改善时序的情况下才会拆分并尽量保持设计中的单元为多比特形式。图7 多比特单元拆分-critical_range选项用于指定关键范围是一个相对关键路径(Worst Negative Slack, WNS)的范围它可以是一个非负数、一个百分数数值后添加%、0表示仅关键路径、default表示综合工具会根据优化时的设计状态为每个时序组确定合适的关键范围、full表示所有裕量为负的路径。-slack_threshold percentage选项相当于百分数形式的-critical_range选项不可一起使用。-path_groups选项用于将关键范围的影响限制在某些时序组中默认情况下关键范围针对整个设计。需要注意的是只有未使用-stage选项或使用-stage debanking选项时时序感知的Multibit增量综合拆分才生效。例如下面的命令设置时序组CLK的关键范围为2.0。dcnxt_shell-topo set_multibit_options -mode timing_driven -critical_range 2.0 -path_groups {CLK}如果该时序组的WNS为-3.0则在增量综合过程中综合工具会尝试拆分裕量位于-3.0到-1.0之间的次关键路径上的多比特单元。被拆分后的单比特单元的命名方式与split_register_bank命令相同。功耗感知的混合驱动强度Multibit优化拓扑模式的Design Compiler NXT在2019版本推出了功耗感知的混合驱动强度Multibit优化一些库厂商提供混合驱动强度的多比特单元即一个多比特单元中的一个或多个比特比其他比特拥有更高的驱动强度。当多比特单元中的某一个比特在设计中出现时序违例时综合工具可以使用混合驱动强度的多比特单元并将关键比特重新连接(rewire)到具有更高驱动强度的比特上而不是对整个多比特单元进行拆分如图8所示。图8 功耗感知的混合驱动强度Multibit优化使用混合驱动强度多比特单元与将直接将多比特单元拆分为比特数更少的单元包括单比特单元相比可以在保持分组比例的同时获得更好的时序结果质量(QoR)除此之外将这些多比特单元放大(size up)也是综合工具改善时序的一种选择。将2019版本引入的compile_enable_multibit_rewiring_in_incremental变量设置为true默认值为false即可在增量综合需要使用compile_ultra -spg -incr命令与使用optimize_netlist -area命令时启用该功能。在多比特单元有限时提升分组比例综合时工具将通用时序单元SEQGEN映射为单比特单元默认情况下这一步与Multibit优化无关即不要求库中存在与单比特单元功能等价的多比特单元综合后再使用identify_register_banks命令自动识别。当库中的多比特单元种类较少时可能会造成分组比例较低此时将2018版本引入的seqmap_prefer_registers_with_multibit_equivalent变量默认值为false设置为true这样综合工具在映射通用时序单元时会尽可能选择那些有功能等价多比特单元的单比特单元从而提高分组比例。报告Multibit优化结果可以使用report_multibit_banking命令报告设计中的多比特单元数量和比例如下所示。dcnxt_shell-topo report_multibit_banking **************************************** Report : multibit banking Design : mul Version: W-2024.09-SP2 Date : Fri Dec 26 17:15:32 2025 **************************************** Total number of sequential cells: 74 (a) Number of single-bit flip-flops: 13 (b) Number of single-bit latches: 0 (c) Number of multi-bit flip-flops: 61 (d) Number of multi-bit latches: 0 Total number of single-bit equivalent sequential cells: 257 (A) Single-bit flip-flops: 13 (B) Single-bit latches: 0 (C) Multi-bit flip-flops: 244 (D) Multi-bit latches: 0 Sequential cells banking ratio ((C D) / (A B C D)): 94.94% Flip-Flop cells banking ratio ((C) / (A C)): 94.94% Sequential bits per cell ((A B C D) / (a b c d)): 3.47 Flip-Flop bits per cell ((A C) / (a c)): 3.47 Multi-bit Register Decomposition: -------------------------------------------------------------------------------- Bit-Width Reference Number of instances Single-bit Equivalent -------------------------------------------------------------------------------- 4-bits 61 ( 82.43%) 244 ( 94.94%) SAEDHVT14_LSRDPQ4_1 61 --------------------------------------------------------------------------------写在最后拓扑模式的Design Compiler NXT在2021版本推出了增强型布局感知的Multibit Banking流程可以在综合过程中就进行布局感知的Multibit优化在进行增量综合前就获得较好的结果质量(QoR)。关于增强型布局感知的Multibit Banking流程可以看下面的博客。Design CompilerMultibit优化增强型布局感知的Multibit Banking流程https://chenzhang.blog.csdn.net/article/details/156580551Multibit优化会对形式验证产生影响Design Compiler在Multibit优化时会在SVF文件中添加guide_multibit命令用于指导Formality进行验证。参考文档Multibit Register Synthesis and Physical Implementation Application Note 2025.06