教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

第五章 综合的约束与优化(9)

来源:网络收集 时间:2026-04-29
导读: 通过对每个组设置权(默认权是1.0),设置路径组的优先权。权可以是从0.0到100.0。 比如,图5.14显示了一个有多重路径到触发器FF1的设计: 图5.14 Path Group Example 为指出从输入in3到FF1的路径的优先权最高,采

通过对每个组设置权(默认权是1.0),设置路径组的优先权。权可以是从0.0到100.0。 比如,图5.14显示了一个有多重路径到触发器FF1的设计:

图5.14 Path Group Example

为指出从输入in3到FF1的路径的优先权最高,采用下列命令:

dc_shell> group_path -name group3 \\-from in3 -to FF1/D -weight 2.5 (2)最优化接近临界的路径

当你对一个路径组增加了临界范围,你改变了最大延迟成本函数。Design Compiler在临界范围内优化所有路径。

指定一个临界范围会增加运行时间。为限制运行时间的增加,只在设计的最后实现阶

段使用临界范围,并使用一个合理的临界范围值。一个最大临界范围值的方针就是时钟周期的10%。

使用下列方法之一指定临界范围: ? 使用group_path命令的-critical_range选项 ? 使用set_critical_range命令

如下,图5.15显示了一个带有三个输出A,B,C的设计:

图5.15 临界范围举例

假设时钟周期为20ns,每一个输出的最大延迟为10ns,临界延迟如图所示。默认时,Design Compiler只优化最差情况(到输出A的路径)。为优化所有路径,设置临界延迟为3.0ns:

dc_shell> create_clock -period 20 clk

dc_shell> set_critical_range 3.0 current_design dc_shell> set_max_delay 10 {A B C}

dc_shell> group_path -name group1 -to {A B C} (3)优化所有路径

通过对设计的每一个终点创建一个路径组来对所有路径进行优化,但导致了更长的编译运行时间。利用下列脚本创建一个路径组:

endpoints = all_outputs() + all_registers(-data_pins) foreach (endpt, endpoints) {

178

group_path -name endpt -to endpt }

2.修理高负载的线

高负载的线常常产生临界路径。你可以用两种方法来减少线上的负载: ? 如果这个高负载位于一个模块内,而这个模块不包含层次,用命令 balance_buffer修理高负载线。如下,输入: dc_shell> include constraints.con dc_shell> compile

dc_shell> balance_buffer -from find(pin, buf1/Z)

当你的库使用线性延迟模型时,balance_buffer命令提供了最好的结果。如果你的库使用非线性延迟模型,那么第二种方法将提供一个更好的结果。

? 如果这个高负载穿越几个模块之间的层次,那用设计规则来修复这个问 题,输入:

dc_shell> include constraints.con dc_shell> compile

dc_shell> set_max_capacitance 3.0 dc_shell> compile -only_design_rule

一个很少见的情况是层次化的结构使Design Compiler失去修复设计规则的能力。 在图5.16所示的简单事例中,O1负荷过多。为减少负荷,通过group命令或改变HDL

使尽可能多的负荷在一个层次上组合。然后再利用其中一个策略。

图5.16 Heavily Loaded Net

3. 展开关键路径的逻辑

展平会改进将设计重新转换为两级乘积和的性能。然而,展开需要相当可观的CPU资

源,而且不可能展开整个设计。在这里,你通过展开临界临界上的逻辑来提高性能。

为展开临界路径上的逻辑,

1)用all_fanin命令来确定与临界路径相关的逻辑

dc_shell> all_fanin -to all_critical_pins() -only_cells dc_shell> cp_logic = dc_shell_status

179

2)组合临界路径逻辑

dc_shell> group -design critical_block -cell_name cp1 \\cp_logic 3)描述临界路径逻辑的特色 dc_shell> characterize cp1 4)展开临界路径逻辑

dc_shell> current_design critical_block dc_shell> set_flatten true dc_shell> compile

dc_shell> set_flatten false 5)取消临界路径逻辑模块的组 dc_shell> current_design ..

dc_shell> ungroup -simple_names cp1 4.执行高效果的编译

最优化结果依赖起点。有时候,默认编译产生的起点导致一个局部的最小解决方案,而且在产生一个最佳的设计前Design Compiler就已退出。一个高效果的编译可以解决这个问题。

这个高效果的编译利用compile命令的-map_effort high选项来进行最初的编译(针对设计的HDL描述):

dc_shell> elaborate my_design dc_shell> compile -map_effort high 5.执行高效果的、递增编译

你也可以利用递增编译选项来改进高效果编译的编译性能。如果先期的策略中没有一个可以使设计满足最优化目标,那高效果的、递增编译可以得到想要得到的结果。

一个递增的编译(-incremental_mapping编译选项)允许你实验不同的方法来递增地

改进设计。递增的编译只适用于门级最优化,不适用于逻辑级最优化。设计性能的结果与原先设计的相同或更好。

这个方法需要大量的CPU时间,但它是将最差消极延迟减少为0的最成功的方法。为减少运行时间,你可以对那些已经达到时序要求的所有模块设置dont_touch属性: dc_shell> dont_touch noncritical_blocks

dc_shell> compile -map_effort high -incremental_mapping 5-4-4-4 为达到最小面积的最优化

如果你的设计定义了时序约束,通常这些约束的优先级比面积约束要高。对面积关键

的设计来说,在你编译前不要应用时序约束。如果你想要查看时序报告,在编译后对设计加以时序约束。

180

如果你的设计没有达到面积约束,你可以试试下面的方法来减少面积:

? 取消总的负延迟的最优化Disable total negative slack optimization ? 允许时序面积恢复Enable sequential area recovery ? 允许布尔最优化Enable Boolean optimization ? 资源选择管理Manage resource selection ? 利用展开Use flattening

? 跨层次边界的最优化Optimize across hierarchical boundaries 1.取消总的负延迟的最优化

默认时,Design Compiler确定总的负延迟的优先级比面积约束高。这就意味着Design 在设置面积约束时,用-ignore_tns选项来改变默认的优先级: …… 此处隐藏:1389字,全部文档内容请下载后查看。喜欢就下载吧 ……

第五章 综合的约束与优化(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/565731.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)