社長さま、ぶっちさま、 * Astroのデザインフローを残してもらいたいと思いますが、多分お二人は非常にあっさりとしたものを残してあとは勉強せい、ということになるのかと思います。しかし、今回、先輩後輩間の技術ギャップは大きく、これではとても伝承はできない、と思います。 * それでふんがが自分でPOCOPをレイアウトしてみて、疑問点を質問する、という形式で、まずは基本技術の伝承をお願いしたいです。もちろん、これ以外にもお二人にはドキュメントを期待します。 * 以下、答えていただけるとすごく嬉しいです。デザインフローは、どちらかというと社長のに基づいています。scriptsファイルは~hunga/verilog/f65/pr/scriptsにあります。 * まずはマクロPOCOPのフローです。フロー自体にも問題があったらご指摘下さい。また、コメントがおかしかったら突っこんで下さいませ。 ==== 環境セットアップ ==== set design_name POCOP set is_combinational_circuit false set core_width 100 set core_height 100 set cell_width 101.8 set cell_height 101.4 * **cellとcoreの幅、高さの決め方はどうするのでしょうか?** * 物理的に入るか入らないかで判断してます * 合計セル面積が 200 なのに,10x10 だとダメですよね? * かつ配線の事も考えて,(デザインにもよりますが)大体 70〜80% 程度をとればいいです * フロアプラン設定ウィンドウで右上に "set" があるのでそれで大体の目安が取れます set core_to_top 0.9 set core_to_bottom 0.9 set core_to_right 0.9 set core_to_left 0.9 * **それぞれの値の決め方、なんで0.9なの?** * てきとーです * 大きすぎると面積もったいないです * もっと小さくても OK です * 因みに 0.9 はセルの高さの半分です * 因みに,「何故この数値?」という質問が下記に幾つか見られますが「なんとなく」「これで上手く行ったから」という答えが多々です * 特に「これでないといけない」という数値はないです * 見た目カッコよければそれで良しです * マクロを配置するときに、core_to_bottom をセルの高さの半分にしとくと railがきれずにマクロを置きやすいと思い、自分はこの値を使っています。 ____|__________ __ = rail ____|__________ ____|__________ +---------- <- マクロ下端 ↑ マクロ左端 * 現在のフローではマクロ外の rail と マクロ内の rail が接続しているのですが、core_to_bottom を 0 にしてしまうと、マクロ内の一番下の rail には外の rail が上手くつながりません。 * セルの高さの 1.8 よりも大きい値にすると、マクロ外で無駄に切れる rail が増えます。なので間を取って 0.9 を使ってます。 * # 言葉だと説明しづらいです…… ==== ファイル読み込み ==== source ./scripts/verilog_to_cell.tcl Verilogを読み込む。 source ./scripts/apply_tlu_plus.tcl ライブラリアタッチファイルをTLU+に変換。TLU+とはC,Rのモデルのこと。 * **libの下にモデルがあるので、このうちMin/Maxを指定。マッピングファイルは、tlu2mw.mapを指定。ところで、これはどうやって作ったの??** * Fujitsu 提供のものです ==== フロアプラン ==== source ./scripts/pin_guide.tcl * **このブロッケージを作る理由は?なんで横長なのができちゃうんだろう??** * 当時ボクが考えたアンテナ回避方法その1です * やらなくて,いいです source ./scripts/antenna_route_guide.tcl * **このアンテナルートガイドの作り方の作戦は? ** * 当時ボクが考えたアンテナ回避方法その2です * やらなくて,いいです source ./scripts/floorplan.tcl * **ここで、Max Metal Routing Layerを11にしているがこれはAstroのせい?** * はい,落ちます * 以前かなりお話したヤツです source ./scripts/check_design.tcl source ./scripts/remove_blockage.tcl source ./scripts/remove_route_guide.tcl source ./scripts/check_timing.tcl source ./scripts/connect_pg.tcl source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "01_pre_route_pg" formOK "Save As" 上記は理解できる。 ==== ストラップとレール ==== source ./scripts/route_strap.tcl * **縦は、MET6, 横は、サイズ、間隔の決め方は?なぜ2回に分けて張るのか?** * 数値はてきとーです * 2回に分けなくてもいいです source ./scripts/route_rail.tcl * 横のレールを張る。 source ./scripts/insert_tap_array.tcl * YUZTAPを入れる。ゆーずたっぷゆーずたっぷゆーずゆーずゆず、、 source ./scripts/antenna_route_guide.tcl * **これも間隔、目的等が謎。教えて下さいませ。** * 当時ボクが考えたアンテナ回避方法その3です * やらなくて,いいです * というか2回目やりましたっけ (・ω・)? * 昔の事は既に脳内から揮発してます ==== 配置 ==== source ./scripts/load_sdc.tcl * **合成時のsdcをここに指定すると、それが配置配線の目標となる。** * **配線遅延の増大のため、これが満足できないことも多く、手で直したりする??** * しません * タイミング考慮しながら配線を手修正できたら神です source ./scripts/pre_cts_timing_setup.tcl * CTS(Clock Tree Synthesis)用のタイミングセットアップ source ./scripts/auto_place.tcl * ここでセルの配置。時間が掛かる。 source ./scripts/connect_pg.tcl * **ここ、必要なんだろうか?0 ports connectedって出てくるけど、、** * ここでは特に意味はないです,電源を接続しているだけです source ./scripts/pin_guide.tcl * **ピンガイドだがこれはなぜ必要なんだろう?** * 当時ボクが考えたアンテナ回避方法その4です * やらなくて,いいです * というかここの段階でやりましたっけ (・ω・)? * 昔の事は既に脳内から揮発してます source ./scripts/pin_loc_opt.tcl * **これをやるとピンの位置がずれてくれるらしいのだが、このケースでは0 pins movedと出てくる。** * これはやらなくてもいいです source ./scripts/remove_blockage.tcl source ./scripts/antenna_route_guide.tcl * **ここで、ブロッケージをなくして、ルートガイドを付けるがなぜか??** * 当時ボクが考えたアンテナ回避方法その5です * やらなくて,いいです source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "03_pre_cts" formOK "Save As" * ここでまたセーブ ==== CTS ==== source ./scripts/pre_cts_opt.tcl * post place optimization, fix holdをやる。 source ./scripts/cts.tcl * CTSをやる。CLKBuffer, DelayBufferを色々指定 source ./scripts/show_clk_tree.tcl * すぐ閉じてしまうので、部分的に実行しないとツリーは見れない。しかしトップしか見れない。 source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "05_pre_post_cts_place_opt" formOK "Save As" * いちどセーブ source ./scripts/post_cts_timing_setup.tcl * ポストCTSのタイミングセットアップ source ./scripts/post_cts_place_opt.tcl * post place optimizationをやる。すごく時間が掛かる。 source ./scripts/fix_hold.tcl * hold time合わせをやる。 * これでCTSはおしまい。 ==== ゆずキューバ ==== source ./scripts/insert_cuba.tcl source ./scripts/connect_pg.tcl * ここで、ゆずきゅーばを入れる。これを入れないとERC 3が出る。 * ゆずとキューバは仲良しこよし、ゆずとキューバでYUZCUBA source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "07_pre_auto_route" formOK "Save As" ==== 配線 ==== source ./scripts/fix_hold.tcl * ホールド合わせだが、結構何かやっているので、ここでやらないとまずいらしい。 load_scheme ./scripts/antenna_rule.scm * アンテナルールの読み込み。富士通からもらったもので、スキームでしか読み込めない。 source ./scripts/route_setup.tcl * 配線用のセットアップ source ./scripts/route_clk.tcl * クロックの配線、時間が掛かる。 source ./scripts/auto_route.tcl * 自動配線、すごく時間が掛かる。 source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "08_post_route" formOK "Save As" ==== ポストレイアウト最適化 ==== source ./scripts/post_route_timing_setup.tcl * ポストレイアウト用のタイミングセットアップ source ./scripts/post_route_cto.tcl * ポストレイアウト用のクロックツリー最適化 source ./scripts/remove_clk_antenna.tcl * クロックのアンテナ削除 source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "09_pre_post_route_opt" formOK "Save As" source ./scripts/post_route_opt.tcl * ポストレイアウト最適化、時間が掛かる source ./scripts/connect_pg.tcl * これも0だが、、、 * サーチアンドリペア ==== 仕上げ ==== source ./scripts/fix_hold.tcl * ホールドタイム合わせ source ./scripts/via_opt.tcl * ビア最適化 source ./scripts/remove_blockage.tcl source ./scripts/remove_route_guide.tcl * ブロッケージとルートガイドを取り除く source ./scripts/insert_filler.tcl * フィラーをいれる。これはただのYUZSにしているがYUZBも入れないと密度チェックに引っかかる可能性がある。 source ./scripts/fill_notch.tcl * ノッチを埋める source ./scripts/connect_pg.tcl * 相変わらず0だが、、 source ./scripts/save_cell.tcl geSaveAs setFormField "Save As" "Cell Name" "11_final" formOK "Save As" * これで一通り終わり。