1. はじめに
最近のプロジェクトで検証段階に入り、LVS(Layout Versus Schematic)の実行中にいくつかの問題に直面しました。ネット上には完全な解決策を提供する記事が少なく、試行錯誤を重ねてこの問題を解決しました。ここでは、学習と交流のためにそのプロセスを記録します。
全体のフローは以下の7つのステップで構成されます:デジタルモジュール単体のLVS、アナログモジュール単体のLVS、デジタルネットリストからの回路図逆抽出、トップレベルデジタルシンボル処理、回路図からのCDL抽出、大規模ネットリストのマージ、大規模回路図のLVS。
2. デジタルモジュール単体のLVS
デジタルバックエンド工程が完了すると、LVSに使用するGDSレイアウトとVerilogゲートレベルネットリストが提供されます。Calibre LVSツールを使用する前に、ゲートレベルネットリストをCDLネットリストに変換する必要があります。これにはv2lvsツールを使用します。
主に以下のものを準備する必要があります:
- Verilog標準セルライブラリ
- Spice標準セルネットリストライブラリ
実際のケースでは、cim_core_syn.lvs.vというゲートレベルネットリストをCDLネットリストに変換する場合、svtとlvtの2種類のセルを使用しているため、svtとlvtのVerilog標準セルライブラリ(tcbn28hpcplusbwp7t40p140_pwr.vとtcbn28hpcplusbwp7t40p140lvt_pwr.v)とSpice標準セルネットリストライブラリ(tcbn28hpcplusbwp7t40p140_110a.spiとtcbn28hpcplusbwp7t40p140lvt_110a.spi)をすべて読み込む必要があります。
-vパラメータで入力ゲートレベルネットリストを、-lパラメータでVerilogライブラリを、-sパラメータでSpiceライブラリを、-oで出力CDLを指定します。
v2lvs -v cim_core_syn.lvs.v -l tcbn28hpcplusbwp7t40p140_pwr.v -l tcbn28hpcplusbwp7t40p140lvt_pwr.v -s tcbn28hpcplusbwp7t40p140_110a.spi -s tcbn28hpcplusbwp7t40p140lvt_110a.spi -o cim_core_syn.cdl
これでゲートレベルネットリストから変換されたCDLネットリストが得られます。このCDLネットリストを使用する際は、tcbn28hpcplusbwp7t40p140_110a.spiとtcbn28hpcplusbwp7t40p140lvt_110a.spiの2つのSpice標準セルライブラリもパス上にあることを確認する必要があります。CDLネットリストを開くと、これら2つのSpiceファイルを先頭で呼び出していることがわかります。
このCDLファイルを使用してデジタルモジュールのLVSを実行できます。LVS実行時の注意点として、POWER&GROUNDが見つからないためにLVSが中止される(サブモジュールでGlobal PGが定義されていないため)可能性があり、以下のエラーが発生することがあります:
WARNING: Invalid PATHCHK request "GROUND && ! POWER": no POWER nets present, operation aborted
解決策は、Setup->LVS OptionsでLVS Optionsを開き、Supplyタブで「Abort LVS on power/ground net errors」のチェックを外し、下部にPower netsとGround netsのラベル名を記入することです:
これでスムーズにLVSを実行できます。
3. アナログモジュール単体のLVS
アナログモジュールのLVSは比較的簡単ですので、ここでは詳細は割愛します。関連情報は他の技術ブログを参照してください。
4. デジタルネットリストからの回路図逆抽出
デジタル部分とアナログ部分のレイアウト統合段階では、まず大規模な回路図を作成する必要があり、これはVirtuoso環境で行います。デジタルCDLを回路図に変換する方法は以下のブログを参考にしてください。
主にVirtuosoでFile->Import->Spiceを選択し、インポートインターフェースを開きます。InputタブでNetlist Fileに変換済みのデジタルCDLネットリストを選択し、Netlist Languageにcdlを選択、Reference Library Listに使用しているプロセスライブラリを入力します。そしてDevice Mapping Fileオプションをチェックします。
Outputタブで、Output Libraryに出力先ライブラリを選択します。
変換中に以下のエラーが発生する場合があります:
Spice In did not find the symbol view of the master cell 'nfet' of the instance
解決方法:
Device MapタブでDevice Mapを作成し、マッピングするデバイスを入力します。Spiceネットリスト内のpfet、nfet、diodeなどのデバイス名をライブラリ内の対応するデバイス名にマッピングします:
複数のデバイスを使用している場合、MappedToで1つのデバイスを選択すれば十分です。最終的に変換された回路図内のトランジスタのセル名は不正確かもしれませんが、モデルは正しいままです。
変換中に別のエラーが発生する場合:
解決方法:CDLネットリストでスラッシュ/を含むインスタンス名を探し、スラッシュをすべて削除します。ここではvimを使用してスラッシュ/を検索し、すべて空に置換します。
:%s/\///g
すべての問題を解決した後、OKまたはApplyをクリックして変換を実行し、最終的に変換された大規模な回路図を取得します。
この回路図を使用してシンボルを作成し、アナログ部分とマージして大規模な図を作成します。
5. トップレベルデジタルシンボル処理
デジタルネットリストに対応する回路図は取得できましたが、これを使用してCDLネットリストをエクスポートしLVSを実行するとエラーが発生します。これは主にツールの問題です。
tsmc28のSpiceライブラリを確認すると、すべてのモデルでfinger width属性が定義されていないことがわかります。回路図内のfinger width属性はwidthとfinger numberから計算されます。しかし、Virtuosoソフトウェアのバグにより、CDLネットリストから直接変換された回路図ではfinger widthの値が不正確になります。すべてのLVSエラーもこれによって引き起こされます。
上記はCDL->回路図->ネットリストの変換後にLVSを実行した結果です。このように抽出されたwの値が元のネットリストのwidthと一致しないことがわかり、これがLVSエラーの原因です。また、回路図内でfinger widthとwidthが一致していない問題も確認できます。
Skillスクリプトを使用してfinger widthを一括で修正する方法も試しました。
このSkillスクリプトを編集して実行すると、すべてのfinger widthを修正して回路図とwidthを一致させることができますが、最終的にLVSで再度エクスポートされたネットリスト内の属性は依然として不正確です。
したがって、LVSを実行する際には、デジタルCDLを回路図にインポートしてから回路図からCDLを抽出する方法を絶対に使用せず、元のデジタルCDLで大規模な図のデジタル部分を直接上書きする必要があります。
この上書き操作を容易にするために、ピン情報のみを持つ空のデジタルシンボルを作成し、以前の回路図から抽出したシンボルを置き換える必要があります。元の回路図ですべてのインスタンスと配線を選択して削除し、大規模な回路図のシンボルをこのピンのみの空の回路図に対応するシンボルに置き換えることができます。
6. 回路図からのCDL抽出
VirtuosoでFile->Export->CDLを選択し、エクスポートする大規模な回路図を選択します。実行が成功すると、ネットリストインターフェースが表示され、File->Save Asで保存します。
7. 大規模ネットリストのマージ
次に大規模ネットリストのマージを行います。これは以下の3つのステップで構成されます:
- まず、トップレベル回路図CDLからデジタルネットリストのポート部分をコピーし、デジタルネットリストCDL内の対応するデジタルトップレベルのポートを上書き置換します(これは呼び出し時にポートの順序が要求されるためで、置換しないと配線順序の不一致が発生します)。
- トップレベル回路図CDLにデジタルネットリストCDLをINCLUDEします。
- トップレベル回路図CDLからデジタルトップレベルネットリスト部分を削除します。
これで大規模な図のネットリストのマージ操作が完了します。
8. 大規模回路図のLVS
通常のLVSプロセスと基本的に違いはありません。主にInputs->Spice Filesで前のステップでマージした大規模なCDLネットリストを選択します。
LVS Optionsでいくつかの設定を行う必要があります。そうしないとダミーによって問題が発生する可能性があります。
次にRun LVSを実行し、LVSレポートに基づいていくつかのポートやネットの問題をクリーンアップし、最終的にclean状態にします。