社長さま、ぶっちさま、
* 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"
* これで一通り終わり。