时钟门控风格
Power Compiler 工具根据您指定的风格在设计中插入时钟门控单元。当没有指定时钟门控风格时,工具会使用一组预定义的风格用于时钟门控。set_clock_gating_style 命令的默认设置适用于大多数设计。
以下部分将详细讨论默认时钟门控风格和使用特定时钟门控风格:
• 默认时钟门控风格
• 选择时钟门控风格
compile_ultra -gate_clock 命令在目标库不包含定义的时钟门控风格和操作条件的单元时,会阻止时钟门控插入,并发出 PWR-763 信息消息。必须根据目标库中可用的时钟门控单元,重新定义时钟门控风格或操作条件。
默认时钟门控风格
当指定 set_clock_gating_style 命令时,工具使用的风格与不指定该命令时使用的风格不同。
当仅使用少数选项指定 set_clock_gating_style 命令时,工具会使用表 9 中为未指定选项指定的默认值。
当多次指定 `set_clock_gating_style` 命令时,最后一次设置会覆盖之前的设置。这意味着在同一个设计中,如果需要更改时钟门控的配置,可以通过再次使用该命令并指定新的选项来实现。请注意,只有最后一次指定的配置会被综合工具在处理设计时采用。
当没有指定时钟门控风格时,Power Compiler 工具会根据指定的库派生一个默认的时钟门控风格。库中的单元是按照以下优先级递减的顺序选择的:
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic integrated \
-control_point before -control_signal scan_enable
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic integrated -control_point after \
-control_signal scan_enable
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic integrated -control_point before \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic integrated -control_point after \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic integrated
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic or -control_point after \
-control_signal scan_enable
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic or -control_point before \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic or -control_point after \
-control_signal test_mode
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic or -control_point after \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic integrated \
-negative_edge_logic or
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic integrated -control_point before \
-control_signal scan_enable
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic integrated -control_point after \
-control_signal scan_enable
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic integrated -control_point before \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic integrated -control_point after \
-control_signal test_mode -observation_point true
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic integrated
• set_clock_gating_style -positive_edge_logic and \
-negative_edge_logic or
以下示例通过选择一个合适的默认风格来插入时钟门控单元:
read_verilog # 读取低级别的Verilog文件
compile_ultra -gate_clock # 执行时钟门控综合
report_clock_gating -style # 报告时钟门控风格
compile_ultra -incremental # 执行增量综合
在这个示例中,`read_verilog` 命令用于读取包含设计定义的Verilog文件。`compile_ultra -gate_clock` 命令用于执行时钟门控综合。`report_clock_gating -style` 命令用于报告综合时所使用的时钟门控风格。最后,`compile_ultra -incremental` 命令用于执行增量综合,这通常在对设计进行小的修改后使用,以节省综合时间。
选择时钟门控风格
使用 `set_clock_gating_style` 命令来选择时钟门控风格。`compile_ultra -gate_clock` 命令使用指定的时钟门控风格来插入时钟门控单元。`set_clock_gating_style` 命令的默认设置适用于大多数设计。如果默认设置不符合设计需求,使用 `set_clock_gating_style` 命令来更改默认设置。
指定的时钟门控风格将应用于整个设计。也可以只将时钟门控风格应用于设计的特定电源域或层次单元。有关在特定实例上指定时钟门控风格的更多信息,请参见“使用实例特定的时钟门控风格”。
以下主题描述了如何使用 `set_clock_gating_style` 命令:
- 选择门控逻辑
- 选择集成时钟门控单元
- 为离散门控逻辑选择配置
- 按名称选择简单的门控单元
- 按名称选择简单的门控单元和库
- 指定仅用于时钟门控的简单单元
- 选择特定的锁存器和库
- 选择无锁存器风格
- 提高可测试性
- 在层次结构中连接测试端口
- 使用实例特定的时钟门控风格
这些主题提供了关于如何根据设计要求和目标选择和定制时钟门控风格的指导。通过这些选项,可以优化设计的时钟管理,以满足性能、功耗和可测试性等不同方面的要求。
选择门控逻辑
`set_clock_gating_style` 命令的以下选项指定用于实现时钟门控的时钟门控逻辑或时钟门控单元的类型:`-positive_edge_logic [gate_list]` `-negative_edge_logic [gate_list]`。可以指定用于时钟门控的1输入和2输入门(简单门控单元)的配置,或者在目标库中已经定义的集成时钟门控单元。集成单元是一个专用的时钟门控单元,它将时钟门控的所有简单门控逻辑结合到一个完全表征的单元中,可能还包括额外的逻辑,如多个使能输入、活动低使能逻辑或反相门控时钟输出。
选择集成时钟门控单元
可以使用 `set_clock_gating_style` 命令的 `-positive_edge_logic` 和 `-negative_edge_logic` 选项来指定时钟门控的集成时钟门控单元:`-positive_edge_logic [gate_list]` `-negative_edge_logic [gate_list]`。满足时钟门控要求的第一个单元将被使用,如果库中有不同大小的集成单元,则可能会调整大小以满足设计规则违规。使用 `power_do_not_size_icg_cells` 变量来阻止这种行为。
按功能选择集成单元
当按功能选择集成单元时,时钟门控会在库中搜索具有正确 `clock_gating_integrated_cell` 属性值的集成单元。使用 `set_clock_gating_style` 命令来指定希望时钟门控查找的集成单元的功能。Power Compiler 工具使用它在库中找到的第一个符合使用 `set_clock_gating_style` 命令指定的要求的集成单元。例如,如果输入:
set_clock_gating_style -negative_edge_logic {integrated}
工具将使用它在逻辑库中找到的第一个具有 `clock_gating_integrated_cell` 属性的集成单元,如下所示:
clock_gating_integrated_cell : "latch_negedge";
当没有指定顺序选项时,工具将使用默认的基于锁存器的门控。有关集成单元属性和库语法的更多信息,请参见 Library Compiler 文档。
按名称选择集成单元
当需要特定的集成单元,或者如果有多个具有相同 `clock_gating_integrated_cell` 属性的集成单元时,按名称选择集成单元。例如:
set_clock_gating_style -positive_edge_logic {integrated:my_cell}
在这个例子中,时钟门控从逻辑库中选择一个名为 my_cell 的集成单元。有关集成单元属性和库语法的更多信息,请参见 Library Compiler 文档。
指定集成时钟门控的子集
使用 `set_dont_use -power` 命令将时钟门控插入限制为来自一个或多个库的特定集成时钟门控单元集。此命令确保指定的单元不用于功耗优化。例如:
set_dont_use -power [get_lib_cells /icg_a1_*]
set_dont_use -power [get_lib_cells /icg_b2_*]
set_dont_use -power [get_lib_cells /icg_c3_*]
set_clock_gating_style -positive_edge_logic {integrated}
compile_ultra -gate_clock
在这个例子中,`set_clock_gating_style` 命令指示 `compile_ultra -gate_clock` 命令使用除具有 dont_use 属性的单元之外的所有集成单元。
对集成单元使用设置和保持
当使用 Library Compiler 创建集成单元时,建立(Setup)和保持(Hold)约束是内置的,但可以使用 `set_clock_gating_style` 命令或 `set_clock_gating_check` 命令来覆盖这些值。
如果在命令行上使用集成单元时提供了 `-setup` 和 `-hold` 值,则这些值将被覆盖。
以下示例使用集成单元来门控上升沿触发的寄存器,并使用简单的单元以无锁存器风格来门控下降沿触发的寄存器:
set_clock_gating_style -sequential_cell none
-setup setup_value
-hold hold_value
-positive_edge_logic {integrated}
-negative_edge_logic {inv nor buf}
这里的 `setup_value` 和 `hold_value` 不仅适用于集成单元,还适用于使用简单单元(在此示例中为 INV、NOR 和 BUF 门)为下降沿触发的寄存器构建的时钟门控。有关集成时钟门控单元和时序的更多信息,请参见 Library Compiler 用户指南。
选择离散门控逻辑的配置
`-positive_edge_logic` 和 `-negative_edge_logic` 选项可以有多达三个字符串参数,这些参数指定了时钟门控逻辑的类型:
- 2输入时钟门控的类型(AND、NAND、OR、NOR)
- 2输入时钟门控之前的时钟网络上的反相器或缓冲器
- 2输入时钟门控之后的时钟网络上的反相器或缓冲器
字符串参数的位置决定了时钟门控是在2输入时钟门控之前还是之后放置缓冲器或反相器。例如,如果 `-positive_edge_logic` 的值是 `{and buf}`,时钟门控使用AND门并在AND门的扇出上放置一个缓冲器。如果值是 `{inv nor}`,时钟门控使用NOR门并在NOR门的扇入上放置一个反相器。这两个例子都实现了时钟门控的AND功能。
适用于门控电路的逻辑类型取决于HDL 代码中是通过上升沿还是下降沿时钟推断门控寄存器组,以及是否使用基于锁存器的还是无锁存器的时钟门控。
如果使用无锁存器的时钟门控,必须指定 `-positive_edge_logic` 和 `-negative_edge_logic` 两个选项。
为了门控设计的正确操作,请使用 `set_clock_gating_style` 命令的 `-positive_edge_logic` 和 `-negative_edge_logic` 选项来选择任何组合的门,以提供表 10 和表 11 所示的适当功能。表 10 提供了基于锁存器的时钟门控风格的信息,表 11 提供了无锁存器的时钟门控风格的信息。
注意:
如果 Power Compiler 工具在上升沿触发的寄存器的时钟线上添加了一个反相器,Design Compiler 工具在后续综合中可能会推断出一个下降沿触发的寄存器,如果库中可用的话。如果 Power Compiler 工具从下降沿触发的寄存器的时钟线上移除了一个反相器,Design Compiler 工具可能会推断出一个上升沿触发的寄存器,如果库中可用的话。这些操作是正常的。
例如,要实现 AND 功能,可以简单地使用一个 AND 门。然而,AND 功能也来自于一个 INV 和一个 NOR 门的组合。如果组合产生了表 10 和表 11 所示的适当功能,任何单个门的组合都是允许的。
使用以下选项,基于锁存器的时钟门控对上升沿触发的寄存器组的时钟使用 AND 门进行门控,对下降沿触发的寄存器组的时钟使用 OR 门进行门控。OR 门的使能输入有一个反相器,以确保在使用时钟门控时的正确功能:
-positive_edge_logic {and}
-negative_edge_logic {or}
使用以下选项,基于锁存器的时钟门控选择 NOR 门对上升沿触发的寄存器组的时钟进行门控。时钟门控在 2 输入时钟门控的扇入处插入一个反相器,并在扇出处插入一个缓冲器。这个组合实现了 AND 功能:
-positive_edge_logic {inv nor buf}
-negative_edge_logic {inv and inv}
在这个例子中,对于下降沿触发的寄存器组,时钟门控使用 AND 门进行时钟门控。时钟门控在 2 输入时钟门控的扇入和扇出处都插入了反相器。这个组合实现了 OR 功能。OR 门的使能输入已经有反相器。这抵消了使能输入信号上额外反相器的效果。因此,只有主门的时钟引脚被反相。
通过名称选择简单的门控单元
`-positive_edge_logic` 和 `-negative_edge_logic` 选项允许在时钟门控期间使用特定的时钟门控单元。要使用目标库中的特定门控单元,请在元素类型后指定单元名称,中间用冒号分隔。
对于上升沿触发的寄存器组,以下选项使基于锁存器的时钟门控从目标库中选择特定的名为 MYAND2 的 AND 门。在这个例子中,工具在时钟门控的扇出上插入了一个缓冲器。
-positive_edge_logic {and:MYAND2 buf}
通过名称选择简单的门控单元和库
在某些情况下,可能有多个目标库,且单元名称相同。在这种情况下,可以为时钟门控使用特定库中的特定单元。`-positive_edge_logic` 和 `-negative_edge_logic` 选项允许指明用于时钟门控的特定库和单元,如下所示:
target_library = { "CMOS8_MAX.db" "tech_lib1.db" "tech_lib2.db" }
-positive_edge_logic {and:tech_lib1/MYAND2 buf:tech_lib2/MYBUF2}
在这个例子中,时钟门控使用来自不同逻辑库的特定 AND 单元和 BUF 单元。AND 单元是 tech_lib1 库中的 MYAND2,而缓冲器是 tech_lib2 库中的 MYBUF2。必须先前通过设置 Design Compiler 的 `target_library` 变量来指定这些库为目标库。
专门指定简单单元用于时钟门控
在单元映射期间,Design Compiler 工具使用 Power Compiler 工具创建的通用表示以及库中的单元来构建时钟门控逻辑。除非使用集成单元进行门控,否则没有什么可以阻止 Design Compiler 工具在设计的其他部分使用相同的单元。
可以指定某些单元专门或优先用于门控时钟。这些单元可以是用于基于锁存器的时钟门控风格的 2 输入时钟门控、反相器、缓冲器或锁存器。
要使用特定单元进行时钟门控并阻止其在设计的其他区域使用,请在单元库描述中将以下 Library Compiler 属性设置为 true:
- `dont_use`
当设置为 true 时,此属性防止 Design Compiler 工具在选择单元进行技术映射时选择该单元。
- `is_clock_gating_cell`
这是单元组的布尔类型属性。当设置为 true 时,此属性标识单元用于时钟门控。如果 `dont_use` 和 `is_clock_gating_cell` 都设置为 true,则该单元仅用于时钟门控电路。
可以在以下单元上设置 `dont_use` 和 `is_clock_gating_cell`:
- 2 输入时钟门控
用作时钟门控的 AND、NAND、OR 和 NOR 库单元的示例。
- 1 输入时钟门控
用作 2 输入时钟门控的扇入和扇出的缓冲器和反相器库单元的示例。
- 2 输入 D 锁存器
这些锁存器可以是高电平或低电平有效的,并且必须具有非反相输出。
要在使用时钟门控时优先使用单元,请仅将 `is_clock_gating_cell` 属性设置为 true。时钟门控在插入时钟门控电路时优先使用此类单元。稍后,Design Compiler 工具可以在将设计的其他部分映射到目标技术时使用它们。
有关 Library Compiler 属性的语法和使用的更多信息,请参见 Library Compiler 文档。
2 输入时钟门控有一个使能输入和一个时钟输入,在图 19 中连接到 ENL 和 CLK 信号。如果在 2 输入时钟门控的一个引脚上设置了时钟属性,Power Compiler 工具将识别剩余的输入引脚为使能引脚。然而,库单元语法允许明确指定输入引脚为使能输入。在单元库描述的引脚组中,将 `clock_gate_enable_pin` 属性设置为 true。这是引脚组的布尔类型属性。
如果工具既没有找到时钟属性也没有找到 `clock_gate_enable_pin` 属性,工具将检查引脚上是否存在建立和保持时间。如果在引脚上找到了建立和保持时间,工具将使用该引脚作为使能引脚。有关 Library Compiler 语法和单元描述的更多信息,请参见 Library Compiler 文档。
选择特定的锁存器和库
`set_clock_gating_style` 命令的 `-sequential_cell` 选项允许选择使用锁存器的时钟门控风格或避免使用锁存器。图 19 显示了基于锁存器的时钟门控风格的一个示例。图 27 显示了一个无锁存器时钟门控风格的电路示例。
`-sequential_cell` 选项允许在插入时钟门控电路时使用特定的锁存器。要从目标库中使用特定的锁存器,需要在元素类型后指定锁存器的名称,两者用冒号 (:) 分隔。例如:
-sequential_cell latch:LAH10
在以下示例中,时钟门控使用来自 SPECIFIC_TECHLIB 库的 LAH10 锁存器:
-sequential_cell latch:SPECIFIC_TECHLIB/LAH10
选择无锁存器风格
要指定无锁存器的时钟门控风格,使用 `set_clock_gating_style` 命令的 `-sequential_cell none` 选项。例如,在图 27 中的无锁存器风格中,OR 门通过门控对寄存器组的时钟脉冲进行控制,并防止了尾随的时钟边缘。对于上升沿触发的逻辑,无锁存器时钟门控防止了下降沿。
消除锁存器可以稍微减少功耗和面积。然而,无锁存器方法有一个显著的缺点:EN 信号必须在下降沿之前在其新值上稳定。如果 EN 信号在下降沿之前不稳定,EN 信号上的毛刺可能会破坏寄存器的时钟信号。任何在时钟尾随边缘之后的 EN 信号上的毛刺都会导致门控时钟信号的毛刺和破坏。有关无锁存器时钟门控的示例,请参见图 27。
提高可测试性
时钟门控在设计中引入了多个时钟域。除非增加逻辑以提高可测试性,否则引入多个时钟域可能会影响设计的可测试性。
在某些扫描寄存器风格中,门控寄存器不能包含在扫描链中,因为门控寄存器的时钟使其在测试中无法控制(假设没有专用的扫描时钟)。如果没有寄存器在扫描链中,测试可控性在寄存器输出端降低,测试可观测性在寄存器输入端降低。如果有很多门控寄存器,这可能会显著降低设计中的故障覆盖率。
可以通过使用 `set_clock_gating_style` 命令的选项来确定在时钟门控期间添加的测试逻辑的数量和类型,从而提高电路的可测试性。遵循以下步骤来提高可测试性:
- 添加测试控制点
- 选择 test_mode 或 scan_enable
- 添加可观测性逻辑
为了可测试性插入控制点
控制点通过在测试期间将时钟信号恢复为其未门控的形式来提高设计的可测试性。控制点是一个 OR 门,在测试期间消除时钟门控的功能,从而恢复时钟信号的可控性。
图 28 显示了一个连接到 scan_enable 端口的控制点(OR 门)。在这个例子中,控制点位于锁存器之前。
通过添加控制点,可以在测试模式下通过 OR 门绕过时钟门控逻辑,从而允许测试信号直接控制到寄存器的时钟输入。这通常通过将测试模式信号连接到一个额外的 OR 门来实现,该 OR 门的一个输入是常规的时钟信号,另一个输入是测试模式信号。当测试模式被激活时,它将覆盖常规的时钟门控逻辑,确保测试信号可以到达所有需要测试的寄存器。
例如,使用 `set_clock_gating_style` 命令添加测试控制点的语法可能如下所示:
set_clock_gating_style -control_point before -control_signal scan_enable
这将指定在时钟门控逻辑之前插入控制点,并使用 `scan_enable` 信号作为控制信号。这样,在扫描测试期间,`scan_enable` 信号可以有效地禁用时钟门控,允许测试向量被加载到寄存器中。
当 `scan_enable` 信号为高时,测试信号会覆盖时钟门控,使得在移位模式下 `ENCLK` 和 `CLK` 信号相同。图 28 所示的测试解决方案的优点是通过仅增加一个 OR 门来实现可测试性。这种配置的故障覆盖率与没有时钟门控的设计相当。
`set_clock_gating_style` 命令有两个选项来确定测试的控制点的位置和类型:
- `-control_point none | before | after`
默认值为 `none`。`-control_point` 选项在时钟门控锁存器之前或之后插入控制点。在使用无锁存器时钟门控风格时,`before` 和 `after` 是等效的。
- `-control_signal test_mode | scan_enable`
默认值为 `scan_enable`。此选项创建 `scan_enable` 或 `test_mode` 测试端口,并将端口连接到控制点 OR 门。TestMAX DFT 工具以特定方式解释 `test_mode` 和 `scan_enable`。`-control_signal` 选项也适用于由 `-observation_point` 选项插入的任何可观测性逻辑。只有使用了 `-control_point` 选项后,才能使用 `control_signal` 选项。
在创建控制点时,Power Compiler 工具会创建并命名一个新的测试端口,并为该端口分配适当的属性。表 12 显示了工具在命名新端口和设置端口属性时检查的变量。
通过这些选项,可以配置时钟门控以提高设计在测试期间的可控性和可观测性,从而帮助确保实现高故障覆盖率。控制点的添加允许测试信号在测试模式下覆盖常规的时钟门控逻辑,而适当的 `control_signal` 使您能够通过扫描链或其他测试接口来控制时钟门控的行为。这样,即使在生产硅片上实现了时钟门控以减少功耗,也能够在测试时保持对关键信号的访问和控制。
要将时钟门控设计的测试端口连接到设计的测试端口,使用 `insert_dft` 命令。有关更多信息,请参见层次结构中测试端口的连接。
基于锁存器的时钟门控要求使能信号总是在时钟的后沿(对于下降沿信号来说是上升沿)之后到达。如果在锁存器之前插入控制点,就不可能违反此要求。然而,测试工具可能不支持将控制点定位在时钟门控锁存器之前。在这种情况下,使用 `-control_point after` 在时钟门控锁存器之后插入控制点。
注意:
如果在锁存器之后插入控制点,那么在代工厂进行测试期间,`scan_enable` 信号或 `test_mode` 信号必须在时钟信号的后沿(对于下降沿信号是上升沿)之后转换;否则,它们产生的信号中的毛刺会破坏时钟输出。
扫描使能与测试模式
扫描使能和测试模式的区别如下:
- 扫描使能仅在扫描模式下有效。
- 测试模式在整个测试期间(扫描模式和并行模式)都有效。
扫描使能通常比测试模式提供更高的故障覆盖率。使用扫描使能的故障覆盖率与没有时钟门控的电路相当。然而,可能有必须使用测试模式的情况。例如,如果需要在锁存器之前放置控制点,而您的测试工具不支持使用扫描使能进行控制点的这种定位。
使用测试模式提高可观测性
当使用测试模式时,EN 信号和控制逻辑中的其他信号是不可测试的。如果测试方法需要使用 `test_mode`,可能需要提高故障覆盖率。可以通过在时钟门控期间添加可观测性逻辑来提高测试模式下的故障覆盖率。
注意:
当使用 `-control_signal scan_enable` 选项时,不需要通过可观测性逻辑提高可观测性。
`set_clock_gating_style` 命令有两个选项,可以在使用 `-control_signal test_mode` 选项时增加可观测性:
- `-observation_point true | false`
默认值为 `false`。当将此选项设置为 `true` 时,时钟门控会添加一个包含至少一个可观测性寄存器和适当数量的 XOR 树的单元(如果只有一个信号要观察,则不需要 XOR 树)。扫描链包括可观测性寄存器,但可观测性寄存器的输出在功能上不连接到电路。
- `-observation_logic_depth depth_value`
默认值为 5。此选项的值决定了 `-observation_point` 选项在时钟门控期间构建的 XOR 树的逻辑深度。如果此值设置为 0,则每个 ENL 信号分别被锁存,并且不构建 XOR 树。XOR 树减少了捕获测试签名所需的可观测性寄存器数量。
图 29 显示了一个包括可观测性寄存器和 XOR 树的门控时钟。
在测试期间,可观测性电路允许观察 ENL(Enable after Latch)信号。在电路的正常操作期间,XOR 树不消耗功率,因为 NAND 门阻止了所有 ENL 信号的转换。这种测试解决方案具有很高的可测试性,并且是节能的,因为 XOR 树只在测试期间消耗功率,并且可观测性寄存器的时钟是被门控的。
要将时钟门控设计的测试端口连接到设计的测试端口,请参见《层次结构中测试端口的连接》的相关文档或指导。这通常涉及到使用特定的设计规则和工具命令来确保测试信号能够适当地传递到设计的不同部分,同时在测试模式下能够观察到关键信号的状态。
在设计可测试性时,通常会在设计中加入额外的逻辑,如扫描链,以便于在测试时加载测试向量并捕获测试结果。可观测性逻辑,如 XOR 树,用于在测试时观察关键信号的状态,而不会影响正常操作时的电路性能。通过这种方式,可以在不牺牲电路正常工作的情况下提高测试的覆盖率和效果。
选择可观测性逻辑的深度
使用 `set_clock_gating_style` 命令的 `-observation_logic_depth` 选项来设置可观测性单元中 XOR 树的逻辑深度。默认值是 5。
Power Compiler 工具为每个时钟门控设计构建一个可观测性单元。设计中的每个门控寄存器都提供一个门控使能信号(如图 29 中的 OBS_EN)作为输入到可观测性单元中的 XOR 树。
如果将 XOR 树的逻辑深度设置得太小,时钟门控会创建更多的 XOR 树(和相关寄存器)以提供足够的 XOR 输入来适应来自所有门控寄存器的信号。每增加一个 XOR 树都会为面积和功耗增加一些开销。
如果将 XOR 树的逻辑深度设置得太高,时钟门控可以创建一个具有大量输入的 XOR 树。然而,太大的树可能会导致可观测性电路的延迟变得关键。
在选择或更改 XOR 树的逻辑深度时,请使用以下指南。选择一个值,该值:
- 足够高,以尽可能少地构建 XOR 树。
- 足够低,以防止可观测性电路的延迟变得关键。
找到合适的逻辑深度可能需要权衡。可能需要根据设计的具体要求和约束来调整此值,以确保测试的可观测性同时最小化对面积和功耗的影响。在某些情况下,可能还需要考虑时序要求,以确保在最坏情况下,可观测性逻辑的延迟也不会影响设计的性能。这可能涉及到与时钟树综合和布局布线工程师的协调,以评估不同 XOR 树深度设置对时序和设计的其他方面的影响。
在层次结构中连接测试端口
使用 `insert_dft` 命令在设计层次结构的不同级别连接测试端口。
如果使用了带有可测试性选项的时钟门控特性,必须使用 `insert_dft` 命令连接测试端口。在编译了设计的所有较低层次结构之后,应在设计的最顶层使用该命令。
测试端口有两种类型:`test_mode` 端口和 `scan_enable` 端口。如果使用 `set_dft_signal` 命令将端口指定为 `scan_enable` 或 `test_mode`,则可以识别端口为测试端口。或者,通过设置端口上的 `test_port_clock_gating` 属性,可以将端口指定为测试端口。
`scan_enable`(`test_mode`)端口只连接到设计层次结构中其他 `scan_enable`(`test_mode`)端口。如果在某一级层次结构中存在 `scan_enable`(`test_mode`)端口,它将连接到所有更高级别层次结构中的 `scan_enable`(`test_mode`)端口。如果在某一级层次结构的更高级别不存在 `scan_enable`(`test_mode`)端口,则会创建一个 `scan_enable`(`test_mode`)端口。
`insert_dft` 命令将设计层次结构所有级别的测试端口连接到时钟门控逻辑中的 OR 门的 `test_mode` 或 `scan_enable` 引脚,以及时钟门控可观测性逻辑中的 XOR 门。如果设计在任何层次结构级别上没有测试端口,则会创建一个测试端口。如果存在测试端口,则使用现有的端口。
使用 `insert_dft` 命令时,可能需要指定一些选项来定义如何连接测试端口,例如,确定是连接到 `test_mode` 还是 `scan_enable`,以及是否需要在不存在测试端口的情况下创建它们。这有助于确保测试信号能够适当地在设计的各个层次之间传递,从而实现有效的测试访问和控制。
使用 `insert_dft` 命令
使用 `insert_dft` 命令在设计层次结构中将顶层测试端口连接到时钟门控单元的测试引脚。如果设计在任何层次结构级别上没有测试端口,则会创建一个测试端口。工具使用 `set_dft_signal` 命令指定的选项来识别测试端口。以下示例展示了如何使用 `insert_dft` 命令连接到时钟门控单元。当在执行 `insert_dft` 命令期间将 `set_dft_signal` 命令的 `_usage` 选项的值指定为 `clock_gating` 时,工具会将指定的信号连接到时钟门控单元的测试引脚。
以下是使用 `insert_dft` 命令的示例步骤:
1. 读取设计文件:
dc_shell> read_ddc
2. 设置时钟门控风格,使用扫描使能作为控制信号,并指定控制点在门控单元之前:
dc_shell> set_clock_gating_style -control_signal scan_enable -control_point before
3. 执行综合,包括扫描链和时钟门控:
dc_shell> compile_ultra -scan -gate_clock
4. 使用 `set_dft_signal` 命令定义测试端口 `test_se_1` 为扫描使能类型:
dc_shell> set_dft_signal -type ScanEnable -port test_se_1
5. 同样定义测试端口 `test_se_2` 并指定其用途为时钟门控:
dc_shell> set_dft_signal -type ScanEnable -port test_se_2 -usage clock_gating
6. 创建测试协议:
dc_shell> create_test_protocol
7. 运行 DFT 设计规则检查,详细模式:
dc_shell> dft_drc -verbose
8. 预览 DFT 结果:
dc_shell> preview_dft
9. 最后,执行 `insert_dft` 命令连接测试端口:
dc_shell> insert_dft
使用实例特定的时钟门控风格
Power Compiler 工具支持在特定设计实例和电源域上设置和移除时钟门控风格。还可以通过覆盖指定的风格来启用和禁用时钟门控。这些实例特定的时钟门控风格仅由 compile_ultra -gate_clock 命令支持,如下所述:
- 在设计对象上指定时钟门控风格
- 实例特定时钟门控风格示例
- 在设计对象上移除实例特定时钟门控风格
在设计对象上指定时钟门控风格
使用 set_clock_gating_style 命令指定的时钟门控风格默认适用于整个设计。要将时钟门控风格限制为特定的设计对象,请按照以下步骤操作:
1. 将 power_cg_iscgs_enable 变量设置为 true。默认值为 false。
2. 使用 set_clock_gating_style 命令的 -instances 或 -power_domains 选项,分别将时钟门控风格限制为应用于指定的实例或电源域。
根据指定的时钟门控风格,将插入时钟门控单元。
当设置 power_cg_iscgs_enable 变量为 true,并且特定实例没有指定时钟门控风格时,工具将按以下优先级顺序选择时钟门控风格:
- 包含实例的电源域上指定的风格
- 包含实例的层次单元的风格
- 包含实例的更高层次层次单元的风格
- 如果没有指定时钟门控风格,工具将根据指定的库派生默认的时钟门控风格。有关更多信息,请参见默认时钟门控风格。
注意:
如果将 power_cg_iscgs_enable 变量设置为 true,并且不使用 -instances 或 -power_domains 选项,时钟门控风格仅适用于当前设计。
如果没有将 power_cg_iscgs_enable 变量设置为 true 的情况下使用 set_clock_gating_style 命令的 -instances 或 -power_domains 选项,工具将发出 PWR-815 错误消息。
实例特定时钟门控风格示例
对于图 30 中的设计示例,set_clock_gating_style 命令指定如下:
# 指定时钟门控风格
dc_shell> set_clock_gating_style -designs {design_A}
dc_shell> set_clock_gating_style -instances {Y2}
dc_shell> set_clock_gating_style -instances {U1}
dc_shell> set_clock_gating_style -power_domains {PD_A}
在这个示例中,使用 `set_clock_gating_style` 命令为不同的设计部分指定了不同的时钟门控风格。这允许对设计中的特定部分进行精细控制,以满足不同的性能和功耗要求。
优先级规则从层次结构的底部向上部应用。此外,Power Compiler 工具认为电源域比设计实例更具体。在图 30 的设计示例中:
- 对于 Y2 实例指定的时钟门控风格应用于 Y2 实例。如果为 Y2 实例内部的层次单元定义了时钟门控风格,则该层次单元的时钟门控风格应用于 Y2。这是因为,优先级规则是从层次结构的底部向上部应用的。
- 对于 Y2 实例指定的时钟门控风格比为 PD_A 电源域定义的时钟门控风格具有更高的优先级。
- 对于 U1 实例指定的时钟门控风格应用于 U1 实例、design_A 设计和 PD_A 电源域。
- 对于顶层设计指定的时钟门控风格应用于 W1 和 V1 实例。
在设计对象上移除实例特定的时钟门控风格
使用 `remove_clock_gating_style` 命令来移除在设计对象上指定的实例特定时钟门控风格。然而,此命令只能在将 `power_cg_iscgs_enable` 变量设置为 true 时使用。
这些规则确保了在设计的不同部分可以有一致的时钟门控策略,同时也允许在需要时对特定实例或电源域进行定制化的时钟门控配置。通过这种方式,您以优化整个设计的性能和功耗,同时保持对特定关键部分的精细控制。当需要更新或移除特定实例的时钟门控风格时,`remove_clock_gating_style` 命令提供了一种灵活的方法来调整设计,以响应设计要求的变化或测试和验证的反馈。