2011年9月15日 星期四

Design Compiler再了解(四十七)

最佳性能的最优化

資料由http://www.61ic.com/code/ 得來

方法一 创建路径组 (group_path的使用)


默认时,Design Compiler根据控制终点的时钟组合路径(所有与时钟没有
关系的路径在一个默认的组中)。如果你的设计中有复杂的时钟、复杂的时序要求、或复杂的约束,你可以创建路径组,使得Design Compiler专注于设计中指定的关键路径。
    用命令group_path来创建路径组。命令group_path允许你:
1 控制设计的最优化
2.最优化接近临界的路径
3.  最优化所有路径

1)控制设计最优化
    你可以通过创建路径组和对其排序来控制最优化,这只影响最大延迟成本函数。默认情况下,Design Compiler只对每个组中的最差情况起作用。
    通过对每个组设置权(默认权是1.0),设置路径组的优先权。权可以是从0.0100.0





    比如,图显示了一个有多重路径到触发器FF1的设计:

    为指出从输入in3FF1的路径的优先权最高,采用下列命令:
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命令



   如下,图显示了一个带有三个输出ABC的设计:

    假设时钟周期为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}


你也可以用set_max_delayset_min_delay命令来约束穿越不同频率域的异步路径。
    比如:
dc_shell>set_max_delay 17.1 \-from find(clock, clk1) -to find(clock, clk2)
dc_shell> set_max_delay 23.5 \-from find(clock, clk2) -to find(clock, clk3)
dc_shell> set_max_delay 31.6 \-from find(clock, clk3) -to find(clock, clk1)


3)优化所有路径
    通过对设计的每一个终点创建一个路径组来对所有路径进行优化,但导致了更长的编译运行时间。利用下列脚本创建一个路径组:
endpoints = all_outputs() + all_registers(-data_pins)
foreach (endpt, endpoints) {
group_path -name endpt -to endpt
}

沒有留言: