結論から言うと CTS 後に一度入れ,配線後に再度入れると良いことがわかった.
具体的には以下のように入れる.
# スタセル配置
place_opt
# セル電源接続
derive_pg_connection -power_net {VDD} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
... # 電源レール作成,電源メッシュ,配線ルールなど略
# CTS
set_fix_hold_options -default
set_fix_hold [all_clocks]
clock_opt -no_clock_route # 配線はさせない
clock_opt -no_clock_route -fix_hold_all_clock -only_hold_time # 配線はさせない
# First filler insertion
insert_stdcell_filler -cell_with_metal {cell_with_metal}
insert_stdcell_filler -cell_without_metal {cell_without_metal}
derive_pg_connection # 電源を論理的につなぐ
# route
route_opt
# Final filler insertion
remove_zrt_filler_with_violation # 配線と干渉するFillerを削除
insert_stdcell_filler -cell_with_metal {cell_with_metal}
insert_stdcell_filler -cell_without_metal {cell_without_metal}
derive_pg_connection # 電源を論理的につなぐ
remove_zrt_filler_with_violation
を使うと,Zroute が配線と干渉する Filler (=-cell_metal_with) を見つけてくれるので,その後 -cell_without_metal を入れてやるのがマニュアルの手法らしい.
誤ってCTS 時に配線をしてしまうと -cell_with_metal が入らなくなるので注意.
挙動としては,Utilizationが100%を超えるとIC Compilerの動作がおかしくなる.セルが重なったり配置グリッドに載らなくなったときは,
report_placement_utilization
を実行してUtilizationが100%を超えていないか確認する.Std cell utilization (Non-fixed only)が100%を超えているときはおかしいことをしている.