Verilog

第8回 バックエンド設計その2
配線前処理
慶應義塾大学 理工学部
天野
7,8,9回の目的



合成したネットリストをレイアウトパターンに落とすバックエンド設計
の手順を紹介
ライブラリの問題で完全にはうまく行かない
Rohm0.6umプロセスを利用


取り扱いには注意
前回のディレクトリを利用
RTL記述
論理合成、簡単化
フロントエンド設計
ネットリスト
配置、配線
レイアウト
バックエンド設計
前回の作業の再現



ライブラリの作成は既に終わっている
ライブラリのオープン以降をスクリプトによ
り実行
前回の演習で提出したスクリプトを実行し
て仮フロアプランまでを行う
仮フロアプランの結果
レイヤの確認
CEL WindowのLayer Panelをクリック
各レイヤに適切な色が割り当てられていることを確認
このプロセスはメタル3層
横はM1, 縦はM2,重なりそうな所はM3
配線前作業
1.
2.
3.
4.
5.
6.
7.
8.
9.
電源、GNDの読込みと論理的な接続
I/Oセル位置の確定
キャパシタンスモデルの設定
Padリングの作成
電源、GNDリングの作成
ストラップの作成
スタンダードセルの電源、GNDの接続
クロックツリーの作成
Filler Cellの挿入
電源セルの読込みと接続
コマンドウインドウに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の作成



Pad Ringとは、IOセルの電源とグランドを供給するための外周を回るリング
IOセルが完全に隣接していれば、IOセル上のパターンで形成されるため、
本当はたぶん不要
PreRoute → Pad Rings
PGのみ
Metal3層を利用
OKを押す
見かけに変化はない
電源、グランドリングの作成

PreRoute → Rectangular Rings
VDD,VSS
太さは50位で良い
縦はM2、横はM1
位置は適当
電源、グランドリング
気に入らないとき



Undoはできないが、指定して消すことは可能
RreRoute→Delete Route Typeを選択
この場合はP/G ringを指定すれば消える
OKで消える
サイズ等を変えて
いろいろやってみよう
電源・GNDストラップの挿入


Core領域が大きい場合に電源供給線を増強するためのもの
PreRoute → Straps
スタート位置:適当
たて方向でMetal2層
間隔も適当、今回は1セットのみ
ストラップ
リングと同様、消し
て調整してみよ
セルの配置

InPlace → Design Placement
今回は特に
変更せずOK
配置結果
拡大して
様子を
見よう
これも先と同
じ方法で
Stripeを設定
すれば消せ
るのでいろい
ろやってみて
配置の改善


InPlace → Search and Refine
今回は余裕なので効果はない
スタンダードセルに電源、GNDを供給

PreRoute→Standard Cells
そのままOK
拡大して
セルに接続さ
れている様子
を見よう
電源、グランドの配線



今回のチップは、電源とGNDが上下左右
に端から数えて8ピン目と9ピン目に配置さ
れている
これをCel ウィンドウのSelect Point で選
択する
失敗したらDeslect-pointでやり直す
選択され
ると白く
変化
電源、グランドの配線
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って何?
N-WELL:全体がp型の時
N型のサブストレートを作る
ために必要
PACT:酸化薄膜を作って
トランジスタとして動作させる
領域
NACT
Fillerにより
セルが増え
ている
演習


前回設計したPICOをこの段階まで配線
前処理をせよ。
操作過程はlogファイルとして残るので、
それからスクリプトファイルをまとめよ。
([email protected])までスクリ
プトファイルを提出のこと