ダニエエエエエエル「どうしたんだい,ジョン?」
ジ「IC Compilerがバッファーを勝手に消すんだよ.いったい何考えているんだこの○×■※!」
ダ「ハハッ,IC Compilerはタイミング制約を満たしていると判断して消しているんだね.」
ジ「そうかもしれないけれど,P&Rツールなんだから最適化なんてせずに配置配線だけしてくれたらいいのに.」
ダ「ジョン,もしかしてplace_optをしていないかい?そんなときはcreate_placementして,legalize_placementすれば一発さ!これで手書きのネットリストも自動配置してくれるぞ!」
ジ「まあダニエル!素敵!愛してるわ!」
むやみに"place_opt"コマンドを使うのは止めましょう,というのが今日のお話.
"place_opt"コマンドを手書きのネットリストに対して実行すると,セルのタイミング情報を読みに行き,バッファ等を最適化して消してしまう場合があります.たとえばバッファリングするだけのマクロを作る場合,"place_opt"を実行するとバッファはすべて消されます.その場合,"place_opt"ではなく,"create_placement"と"legalize_placement"を利用する事で,セルの配置,およびアラインメントをしてくれます.
実際にバッファマクロに対してフロアプランを作り,
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpxcHxWJ7WqirPdfTsuxnBhFCSxTOgpcbmmUIjbpeVtPlIPol92hD-cr8KMvnHmPqfZCTqtb1kX2sEqO8QT_gKpFNFkfMolO7Ujom8HcXdi-GrVsBYTV9Iaf5Y8G8lqpnDBNAPQcOW5sqo/s320/Create_Floorplan.png)
"create_placement"をしてみる.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirDJ9wLXLsXbnRQ9Cfl2V4uwjFmaK0TLAW77Feex6xDoDubHTK_GEVE1s1GJAyoReHBvAebZme4PRN86S_I7qUbRvLTtNeK0Vk2K7oCV7pE8N4UCWJAZT5xs2-MNYnhhsV70mXLpmeWqeH/s320/Create_Placement.png)
セルがフロアプランに配置されます.
セル同士が重なっているので,"legalize_placement"でアラインメントします.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvqwvV9NmUsriNNPYySh5spz824HlP5wllmbVara1kRz-DNv17r8E9w88d76Q5UFyoRl2UdvsZE_QMLrCB_YN_lB4UWtj82MxST8GUW9krHojA7UGpW04tZ47kkZvlKUE9pG0w5w44laN/s320/Legalize_Placement.png)
重なりが取れました.
あとは電源レール,ストラップを張り,配線したら終了です.
むやみに最適化コマンドを使わないようにしましょう.配線の最適化を行う"route_opt"も危険です.
IC Compilerはネタはあるけれど,NDAに引っかかりそうなのが残念なところ.