第8回 バックエンド設計その2 配線前処理 慶應義塾大学 理工学部 天野
7,8,9回の目的 RTL記述 論理合成、簡単化 フロントエンド設計 ネットリスト バックエンド設計 配置、配線 レイアウト 合成したネットリストをレイアウトパターンに落とすバックエンド設計の手順を紹介 ライブラリの問題で完全にはうまく行かない Rohm0.6umプロセスを利用 取り扱いには注意 前回のディレクトリを利用 RTL記述 論理合成、簡単化 フロントエンド設計 ネットリスト バックエンド設計 配置、配線 レイアウト
前回の作業の再現 ライブラリの作成は既に終わっている ライブラリのオープン以降をスクリプトにより実行 前回の演習で提出したスクリプトを実行して仮フロアプランまでを行う
仮フロアプランの結果
レイヤの確認 各レイヤに適切な色が割り当てられていることを確認 このプロセスはメタル3層 横はM1, 縦はM2,重なりそうな所はM3 CEL WindowのLayer Panelをクリック 各レイヤに適切な色が割り当てられていることを確認 このプロセスはメタル3層 横はM1, 縦はM2,重なりそうな所はM3
配線前作業 電源、GNDの読込みと論理的な接続 I/Oセル位置の確定 キャパシタンスモデルの設定 Padリングの作成 ストラップの作成 スタンダードセルの電源、GNDの接続 クロックツリーの作成 Filler Cellの挿入
電源セルの読込みと接続 VDDをPowerに接続しApply PADもONにしてください OKを押す VDDOも同様に接続する コマンドウインドウにload “cnt_clf.sc”を入力 ネットリストに現れない電源Pad等を読み込む ネットリストの電源・グランドの論理的接続 PrePoute → Connects Port to P/G VDDをPowerに接続しApply PADもONにしてください OKを押す VDDOも同様に接続する
Groundの接続 次にVSSを接続 VSSをGroundに 接続しApply OKを押す VSSOも同様に接続する 最後に左上のOKを押す
IOセル位置の確定 load “cnt_tdf.sc” をコマンドウインドウで打ち込む IOセルの位置が確定する redrawすると 微妙に変わっているのがわかる
キャパシタンスモデルの設定 ライブラリにキャパシタンスモデルが設定されていないため、ここで設定してやる cmCreateCapModelとコマンドラインに打ち込む 現れたウインドウにテクノロジファイルとライブラリ名を入力 値はかなりいい加減だが、これでクロックの配線等が可能になる
rohm06apollo.tf PICO16 OKを押す 少し時間が かかる
Pad Ringの作成 PGのみ Metal3層を利用 OKを押す 見かけに変化はない Pad Ringとは、IOセルの電源とグランドを供給するための外周を回るリング IOセルが完全に隣接していれば、IOセル上のパターンで形成されるため、本当はたぶん不要 PreRoute → Pad Rings PGのみ Metal3層を利用 OKを押す 見かけに変化はない
電源、グランドリングの作成 VDD,VSS 太さは50位で良い 縦はM2、横はM1 位置は適当 PreRoute → Rectangular Rings VDD,VSS 太さは50位で良い 縦はM2、横はM1 位置は適当
電源、グランドリング
気に入らないとき Undoはできないが、指定して消すことは可能 RreRoute→Delete Route Typeを選択 この場合はP/G ringを指定すれば消える OKで消える サイズ等を変えて いろいろやってみよう
電源・GNDストラップの挿入 スタート位置:適当 たて方向でMetal2層 間隔も適当、今回は1セットのみ Core領域が大きい場合に電源供給線を増強するためのもの PreRoute → Straps スタート位置:適当 たて方向でMetal2層 間隔も適当、今回は1セットのみ
ストラップ リングと同様、消して調整してみよ
セルの配置 InPlace → Design Placement 今回は特に 変更せずOK
これも先と同じ方法でStripeを設定すれば消せるのでいろいろやってみて 配置結果 拡大して 様子を見よう これも先と同じ方法でStripeを設定すれば消せるのでいろいろやってみて
配置の改善 InPlace → Search and Refine 今回は余裕なので効果はない
スタンダードセルに電源、GNDを供給 PreRoute→Standard Cells そのままOK
拡大して セルに接続されている様子を見よう
電源、グランドの配線 今回のチップは、電源とGNDが上下左右に端から数えて8ピン目と9ピン目に配置されている これをCel ウィンドウのSelect Point で選択する 失敗したらDeslect-pointでやり直す
選択されると白く変化
PreRoute → Macros/Pads 電源、グランドの配線 PreRoute → Macros/Pads Pad選択 Selectedにする Specified → Horizontal を19 M3にする Route Boundary…をセット(今回は関係ない)
電源、グランドの配線 DRCをクリック Use Fat Viaをクリック (ルールを満足するため) HideしてOKをクリック
クロックツリーが必要な理由 同時にクロックが立ち上がらなければならない クロック間の位相のずれ→クロックスキュー D Q D Q 同時にクロックが立ち上がらなければならない クロック間の位相のずれ→クロックスキュー クロックスキューがあると、Hold Time errorが起きる Hold Time エラーは怖い:クロックを下げてもとにかく動かない
クロックツリーが必要な理由 クロックのファンアウトは大きい 配線も考慮する必要がある したがって、クロックツリーは 配置後、配線前に作る
クロックツリーの作成:遅延情報ファイルの読込み Timing → Load SDC 合成時に作った遅延情報ファイルppico16.sdc を読み込み OKを押す
クロックツリーの作成:オプション設定 Clock → Clock Common Options クロック名(CLK) 使うゲートの種類INV1, BUF1 インバータ バッファ OKを押す
クロックツリーの作成 Clock → Clock Tree Synthesis そのままOKを押す
クロックツリー Clock→Clock Browser CLKを選択し、 Show Selectedをクリック
ツリー状に配送されているのがわかる 見たら、Clear Allで 消しといた方が良い
Filler Cellの挿入 セル同士の間隔が狭い/広いと 設計制約を満足できなくなる そこで、ダミーのセルで埋めてやる スタンダードセルは連続して並んでいない セル同士の間隔が狭い/広いと 設計制約を満足できなくなる そこで、ダミーのセルで埋めてやる これをFillerと呼ぶ
Well Filler埋め Post Place→Add Intra Row Well Filler Layerを2に設定し、Apply
Well Filler埋め Post Place→Add Intra Row Well Filler Layerを2に設定し、Apply
アクティブ領域のFiller埋め 52 NACTを指定しApply 53 PACTを指定しApply
N-WELL, N-ACT,P-ACTって何? ために必要 PACT:酸化薄膜を作って トランジスタとして動作させる 領域 NACT
Fillerにより セルが増えている
演習 前回設計したPICOをこの段階まで配線前処理をせよ。 操作過程はlogファイルとして残るので、それからスクリプトファイルをまとめよ。(hunga@am.ics.keio.ac.jp)までスクリプトファイルを提出のこと