以下にそれぞれのライブラリの使用方法を簡単に述べます。詳細は、関連のページ (NEL 九大版など)などにありますので、そちらも適宜参照下さい。 また、ここでは、あくまでもここのツールを独立して使用することを前提として いますので、 Cadence の CSI(Synopsys Interface) などは、各自で行なって下さい。 うまい方法がありましたら、設計手法のページとしてリンクなどを張りますので、 お知らせ下さい。
利用可能ゲート数ですが、 東大版ライブラリを使用した場合、4.9mm角チップにおいて、 敷き詰めで 210kゲート(2nand換算)と なっています。一方、セル寸法が若干小さい Passport Library の場合、 敷き詰めで 180kゲート(2nand換算)ととされています。 この差はIOセルの大きさなどによるものと想像されます。また、実際には、配置配線効率など から、搭載可能なゲート数は上の数字より小さくなるものと想像されます。 以下の設計フローは東大版ライブラリとして提供している Synopsys Design Compiler, Cadence Verilog-XL, Avant! Apollo, を使用したデジタルLSI設計 フローとなっています。
モデルとして、線形遅延モデルとテーブル遅延モデルの2種類が用意されています。 ただし、抽出条件は、標準値(Typical: 25度, 3.3V) のみとなっていますが、その他の 条件が必要な場合には別途作成しますので、御連絡下さい。(ただし必ずしも即応 出来ないことがありますので御了承下さい) 現在の合成ライブラリはMaxFanout数が若干厳しめに設定されています。もっと Fanoutを 取りたい(遅くても良いから面積を小さくしたい、消費電力を小さくしたい)などの場合には 御要望に応じてモデルを作成致します(但し最低48時間掛かります)。 また、配線モデルはあまり正確ではありません。一応の目安として下さい。
以下、簡単なカウンター(cnt.v)の例題をもとにして線形モデルを仮定して 進めます。非線形モデル(テーブルモデル)を利用される場合には lin を tblに置き換えて下さい。 まず、カウンターの記述のシミュレーションを行ないます。
それ以外の配置を希望される場合には スクリプトの修正が必要となりますが、その際にはパッド位置がずれないよう十分 注意して下さい。 また、いずれの場合でも パッドフレーム図面に記載されている、コーナ部分の計8ピンは 定義通り電源およびグランド使用することはできません。 コーナセルを自作すれば、配置は変更可能ですが、IOセルを配置することはできません。
次に同じ GenRohm035IOPlace.pl を用いて、Avant! ApolloXO 用のパッド制約ファイルを 作成します。
このシミュレーションとネットリストレベルのシミュレーションの結果が一致している、 もしくは動作的に等価であることを確認すること。
*/N* AT STAGE: 380 ******************************************************************************* */N* GDS2OUT ( REV. 4.51.0998 / SUN-4 S5R4 /GENDATE: 1-SEP-98/18 ) *** ( Copyright 1995, Cadence ) *** */N* EXEC TIME =15:47:26 DATE =20-SEP-99 HOSTNAME = vdec ******************************************************************************* * 0.157 Mbytes allocated to the current process. * 0.000 Mbytes is still in use. * THE END OF PROGRAM TIME = 15:47:26 DATE =20-SEP-99 *ここで、本ルールの場合STAGE番号が380で終ることになっているので、それを 確認すること。
セル名 レイヤー 範囲(llx, lly, urx, ury ) 個数 DR008A63 63/ 0 -2347.90 -2347.90 2347.90 2347.90 4032 0上記の例は項目1でコメントアウトを忘れた場合のエラーの例で、実際にはエラーが出力されて いる場合、エラーがなくなるように修正する必要がある。
エラーの図形は drc.gdsに出力されているので、レイアウトエディタを用いて場所の確認を 行なうことが出来る。また、エラーセル名は最後の2文字(数字)がエラーセルのレイヤー名を 表しており、上の例では、 DR008A という名前で レイヤー番号63に出力されたセルという ことになる。そこで、DR008A という名前をルールファイルで探すと
% LOGLVS <<! fpin cir ROHM035.spi cir ROHM035IO.spi ver cntout.v link con x !以上の操作により LVSLOGIC.DAT というファイルが生成されます。 fpin はVerilogのマクロなどの呼び出しの際にオープン端子がある時の 処理用ですので、そのような端子がない場合には不要です。
Verilog ネットリスト中では 1, 0 への接続を 1'b1, 1'b0 という形で記述しているが Dracula LVS はこれを解釈してくれない。。ようなので、それぞれ VDD, VSSに修正する。
別な方法としては Milkyway で verilogOut させる手もあるが、一旦 Apollo に入ってしまった 正体不明のネットリストで LVSを行なうのは危険であるので、 Synopsys が出力したもの を修正することを勧める。
また、Apolloにおいてクロックツリー合成などを行なっている場合には、当然Synopsysの ネットリストとLVSを行なっても不一致が見られることとなるので、Milkyway で VerilogOutを 行なったネットリストを用いてLVSを行なうことになる。この場合には、VerilogOutした ネットリストが本当に機能的に正しいかを Verilogシミュレーション(もしくは、フォーマルベリフィケーション?)により 確かめておく必要があるであろう。
% PDRACULA <<! /get lvs.rul /finish !この操作で jxrun.com が生成されているはずである。生成されていない場合には lvs.rul のファイル中にエラーが存在しているということであるので、適宜修正すること。
jxrun.com の実行
% jxrun.com >& lvs.log標準出力は出来る限り log にとっておくことを推奨する。
lvs.erc, lvs.lvs などにエラーがないことを確認する。