● OPT_MAPの基本機能
マッピング&論理回路最適化プログラムの OPT_MAP (OPTimizer and technology MAPper) は,
OPT_MAPの重要な機能である最適化処理は,設定する設計条件,および各構成要素が満たすべき制約条件をすべて満足させる方向に自動的に実施されます.そして,この過程で,テクノロジ・マッピングの処理も同時に実施されることになります.
そのほかにOPT_MAPは,階層構成の制御機能,部分回路の置換機能,冗長回路の除去機能,各種の物理的特性(遅延時間,負荷容量,面積など)の評価機能など数多くの機能をもっており,これらの動作は,OPT_MAPに与えられるコマンドによって制御されます.
● NLDモジュールとPCDモジュール
NLD,PCD形式のファイルが構成要素のクラス(種類)単位で存在するのに対し,メモリ上には,インスタンス(実体)に相当する構成要素のすべてと,その階層関係,接続関係が構築されます.
このOPT_MAPの内部処理のためにメモリ上に構築された構成要素の中で,
● 起動形式
OPT_MAP は,起動の際に与えられたディレクトリを検索し,トップ・モジュール名として指定された回路を内部で構築しようとします.このとき,「構成要素として必要なファイルが見つからない」,「指定されたディレクトリが存在しない」,「PCDファイル,NLDファイルの形式に誤りがある」などの理由によって回路の構築が不可能である場合には,直ちに処理を中断します.
必要なNLDファイル,PCDファイルを読み込む順番は,次のとおりです.
● 起動例
サブディレクトリTIMER.1st にあるネットリスト,および,A:\par\celldemo\start にある仮想セル・ライブラリ(4.3節のセル・ライブラリに関する説明を参照のこと)から,トップモジュール名 TIMER の回路を構築するために OPT_MAP を起動する.
● auto.bat における使われ方
2.3節で例題を用いて説明しているように,auto.bat による論理合成の過程では,OPT_MAP は 2度起動され,それぞれ,与えられるスクリプト・ファイルによって以下のような役割を果たします.これらは,OPT_MAP の典型的な使用例になっています.
1回目の OPT_MAP では,仮想セル・ライブラリによるPCDモジュールからなる回路に対して,論理的(使用するテクノロジとは無関係)な回路の簡単化を実施するため,以下の処理を行います.
そして,RINVによる処理を経た後の,2回目の OPT_MAPでは,テクノロジ・マッピングと,制約条件を満たす最適化を実施するため,次のステップを踏みます.
さて,auto.batで 2度目に起動される OPT_MAPでは,最適化処理の前段階として set,maxコマンドなどで設計条件が設定されることになります.しかし auto.batを普通に実行した場合,まず,セル・ライブラリのあるディレクトリに存在するテンプレート・ファイル opt_scr.op2 から module_name.op2 というスクリプト・ファイルが作成されて使用されますから,このテンプレート・ファイルに記述されていた設定値がそのまま使用されてしまうことになります.セル・ライブラリとして PARTHENON に添付している celldemo を用いる場合,ここで設定される設計条件の値は非常に緩い条件になっており,現実的ではありません.
そこで,正確な最適化を実施するためには,実際の使用条件に即した値になるように,module_name.op2 のスクリプト・ファイルをエディタなどで変更し,再度 auto.batによって,OPT_MAPからの処理を再実行すればよいことになります.
● もっと踏み込んだ使用方法
設計対象によって,回路の規模,階層構成,サブモジュールごとの論理的性質,セル・ライブラリのくせ,設計条件などは大きく異なります.auto.bat による論理合成で,すべての論理合成を一応実施することはできますが,これらの対象をすべて同一手順で処理することになり,このままでは,PARTHENONの論理合成系の能力を最大限に引き出すことは困難です.
そこで,OPT_MAPやONSETを十分に活用するためには,OPT_MAPがもっているコマンド・インターフェースを用いて,回路の性質や最適化の状況を判断しながら,対話的に処理を進めていく手法をとることになります.そのためには,OPT_MAP の機能を十分に理解しておく必要があります.
● 階層構成とコマンド
OPT_MAPでは,サブモジュールの階層構造を,UNIXやMS-DOSの階層ディレクトリ構造のように見せるコマンド・インターフェースを提供しています.つまり,UNIXなどの cdコマンドのように,moveコマンドによって着目しているモジュール(カレント・モジュール)を移動したり,そのモジュール内だけの情報を表示させたりできます.
2.3節で示した例題で TIMER.1stから ネットリストを読み込んだ場合のコマンド実行例をリスト7.1 に示します.これから,図7.1 のような階層構成が構築されていることがわかります.
<リスト7.1> 初期回路の階層構成についての情報を見た例
1: A>opt_map TIMER TIMER.1st a:\par\celldemo\start 2: 3: *************************************************************** 4: * OPT_MAP Version 2.3.0 1994/07/05 * 5: * This program is a part of the PARTHENON system. * 6: * Copyright (C) 1989-1994 NTT * 7: *************************************************************** 8: 9: ** load library from TIMER.1st ** 10: ** load library from a:\par\celldemo\start ** 11: opt_map: start to read AND--2.PCD 12: opt_map: start to read AND--3.PCD 13: ------------------ (中略) --------------------- 14: opt_map: start to read TIMER.1st/reg-8.nld 15: opt_map: start to read TIMER.1st/sl1-2.nld 16: OPT_MAP> move 17: position = / 18: type = NLD 19: class_name = TIMER 20: power = 503.6 21: area = 72.6 22: gates = 264 23: OPT_MAP> lsn 24: type class power area gates sub_mod_name 25: ------------------------------------------------------------------ 26: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-2 27: nld reg-8 1.440000e+02 2.400000e+01 80 REMAINED 28: nld DECR8 1.284000e+02 1.722000e+01 64 DECR 29: nld sl8-2 8.160000e+01 1.176000e+01 48 sel-1 30: OPT_MAP> move REMAINED 31: OPT_MAP> lc 32: type nof_instances sum_of_power sum_of_area sum_of_gates class_name 33: ------------------------------------------------------------------------ 34: pcd 8 1.440000e+02 2.400000e+01 80 reg-1 35: OPT_MAP> ls 36: type class power area gates sub_mod_name 37: ------------------------------------------------------------------ 38: pcd reg-1 1.800000e+01 3.000000e+00 10 reg0 39: pcd reg-1 1.800000e+01 3.000000e+00 10 reg1 40: pcd reg-1 1.800000e+01 3.000000e+00 10 reg2 41: pcd reg-1 1.800000e+01 3.000000e+00 10 reg3 42: pcd reg-1 1.800000e+01 3.000000e+00 10 reg4 43: pcd reg-1 1.800000e+01 3.000000e+00 10 reg5 44: pcd reg-1 1.800000e+01 3.000000e+00 10 reg6 45: pcd reg-1 1.800000e+01 3.000000e+00 10 reg7 46: OPT_MAP> move ../DECR 47: OPT_MAP> lc 48: type nof_instances sum_of_power sum_of_area sum_of_gates class_name 49: ------------------------------------------------------------------------ 50: pcd 8 8.000000e+01 6.880000e+00 32 eor--2 51: pcd 1 0.000000e+00 0.000000e+00 0 high- 52: pcd 20 2.800000e+01 7.400000e+00 20 inv- 53: pcd 1 0.000000e+00 0.000000e+00 0 low- 54: pcd 6 2.040000e+01 2.940000e+00 12 nand--2 55: OPT_MAP> move ../sel-1 56: OPT_MAP> ls 57: type class power area gates sub_mod_name 58: ------------------------------------------------------------------ 59: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-0 60: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-1 61: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-2 62: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-3 63: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-4 64: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-5 65: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-6 66: nld sl1-2 1.020000e+01 1.470000e+00 6 sel-7 67: OPT_MAP> move sel-0 68: OPT_MAP> ls 69: type class power area gates sub_mod_name 70: -------------------------------------------------------------------- 71: pcd nand--2 3.400000e+00 4.900000e-01 2 nand-3 72: pcd nand--2 3.400000e+00 4.900000e-01 2 nand-2 73: pcd nand--2 3.400000e+00 4.900000e-01 2 nand-1 74: OPT_MAP> move / 75: OPT_MAP> lc 76: type nof_instances sum_of_power sum_of_area sum_of_gates class_name 77: ------------------------------------------------------------------------ 78: nld 1 1.284000e+02 1.722000e+01 64 DECR8 79: nld 1 1.440000e+02 2.400000e+01 80 reg-8 80: nld 1 1.020000e+01 1.470000e+00 6 sl1-2 81: nld 1 8.160000e+01 1.176000e+01 48 sl8-2 82: pcd 1 0.000000e+00 0.000000e+00 0 high- 83: pcd 2 2.800000e+00 7.400000e-01 2 inv- 84: pcd 1 0.000000e+00 0.000000e+00 0 low- 85: pcd 4 1.360000e+01 1.960000e+00 8 nand--2 86: pcd 1 4.900000e+00 7.400000e-01 3 nand--3 87: pcd 3 1.410000e+01 1.830000e+00 6 nor--2 88: pcd 1 1.100000e+01 9.800000e-01 4 nor--4 89: pcd 1 2.900000e+01 2.100000e+00 9 nor--8 90: pcd 2 4.600000e+01 6.800000e+00 24 reg---1 91: pcd 1 1.800000e+01 3.000000e+00 10 reg--1 92: OPT_MAP> ls reg---1 93: type class power area gates sub_mod_name 94: -------------------------------------------------------------------- 95: pcd reg---1 2.300000e+01 3.400000e+00 12 MAIN--all 96: pcd reg---1 2.300000e+01 3.400000e+00 12 MAIN-RUN 97: OPT_MAP>
<図7.1> TIMER.1st内のNLDファイルから構築される初期回路の階層構成
なお,OPT_MAPのコマンドには,その機能に応じて,
階層構造は,NLDモジュールに包含関係をもたせることによって表現されます.しかし,回路全体の実際の動作を考える際に,トップ・モジュール以外の NLDモジュールの存在は,なんの意味ももちません.回路の本質は,あくまでも PCDモジュールとその接続関係から決定されます.
したがって,NLDモジュールの包含関係,すなわち階層構成は,回路全体の論理的性質,物理的性質をまったく変えることなく,自由に変更することができます.そのためのコマンドとして,flat,make,encc,discといった階層制御コマンドが用意されています.これらの階層制御は,OPT_MAP以降の工程,つまり配置配線プログラムのためなどに使用することができます.
また,部分的に回路をくくり出して,外部の ONSETなどの処理を適用させ,その結果の回路を元の部分回路と置き換えて取り込むといった処理の際にも階層制御コマンドが使われます.この場合には,enciaコマンドなどによって対象部分を一時的にNLDモジュールによって囲い込む,すなわち一時的な階層を作り出すという処理が実施されることになります.
ところで,7.3節で示した auto.bat による処理過程では flat コマンドを何回か実施していますが,これは,MS-DOSのファイル・システムの制限により発生する問題を避けるため,あえて設計階層をフラットにする必要があるからです.ワークステーション版の PARTHENON ではこのような制限がありませんので,設計階層を最終ネットリストまで保存可能ですし,階層構成の変更なども自由に実施することができます.
もし,どうしても,MS-DOS上で階層構成を残したい場合は,OPT_MAP の実行を1度に限定し(RINVは使用しないこととし,中間ネットリストとしてのNLDファイルを不要とする),さらに最終ネットリストとしてEDIF形式だけを出力するという手順にすれば,それが可能となります.
● 冗長回路の除去
SFLEXPなどによって合成された回路には,OPT_MAPにおいて除去されることを前提にして,明らかな冗長回路や不要回路が含まれている場合があります.したがって,OPT_MAPの処理において,この機能を利用するのは必須とも言えます.これらの機能を実現するコマンドとして,rmコマンドがあります.rmコマンドの実行により,以下の一連の操作が起こります.
● 設計条件の設定
設計条件として,トップ・モジュールの外部端子に設定すべき条件とそのためのコマンドには,以下の種類があります.
また,セル・ライブラリに存在する各PCDファイルには,そのセルが正常に動作するための条件が def-constraint文(4.2を参照のこと)によって記述されており,OPT_MAPが回路を構築した場合,その条件が,対応する各PCDモジュールにおける制約条件とみなされます.OPT_MAPが認識する制約条件とは,この各PCDモジュールにおける制約条件と,上記の(1),(4)の外部端子における制約条件がすべてになります.
● 設計条件の評価
dcalcコマンドによる遅延計算は,上記の(2)により外部入力端子に設定されたイベント(同一端子に同一種類の複数のイベントが設定してあれば,それぞれが有効)を起点として,回路全体に渡って到達可能なすべての遅延の計算を実施します.ただし,イベント到達時刻として意味を持つのは,各ネットにおける,/,\,% の各イベントのそれぞれの max,min の時刻ですので,これに反映されない遅延経路の計算は実施しないことで,処理を高速化しています.
<図7.2> OPT_MAPにおける設計条件の設定,評価モデルの例
遅延の伝搬とその時刻の計算は,あくまでも PCDファイルの def-delay文 における定義に従います.したがって,データ系の信号伝搬において,立ち上がり,立ち下がりの遅延時間の差異を考慮するかどうかは,セル・ライブラリでの def-delay文 の記述と,OPT_MAPでの設計条件の設定とで統一しておく必要があります.
celldemo として添付しているセル・ライブラリでは,データ系の信号の遅延は,すべて立ち上がりイベントの伝搬とみなして評価するモデルを採用しています.ここでの,def-delay文 では,たとえ論理が反転していても / から / のイベントが伝搬するように書かれています.ただし,クロック系の信号のみは,/ と \ を区別して扱っています.
OPT_MAPにおける設計条件の設定,評価モデルの例を図7.2 に示します.celldemo はこのモデルを想定したセル・ライブラリとなっています.
これらの変数に対する値の代入は,OPT_MAPの setv コマンドで実施します.セル・ライブラリの記述では,このように,実行時に設定できる重要な変数が含まれていますので,opt コマンドで最適化を実施する前に,値を代入しておくことが必須になります.
celldemo では,?cycle しか使用していませんが,他にもこのような変数を使用することによって,条件設定の自由度が広がります.例えば,def-pin文 の負荷式の定義に変数を使用するようなセル・ライブラリを作成することによって,配線遅延の影響を柔軟に変化させながら遅延評価することなどが可能となります.
このうち,前者の評価確認は,SFL言語レベルの動作シミュレータSECONDSを用いることによって,設計者の責任で論理合成前に実施されています.そして,OPT_MAPの段階で,後者の1マシンサイクル内におけるタイミング条件の確認を実施することになります.しかも,OPT_MAPは,たんに確認のための手段を提供するだけではなく,条件を満たす方向へ向けた回路の最適化を自動的に実施します.これを実現するのがoptコマンドです.
じつは,仮想セル,実セルといった区別も,PCDファイル上で陽に記述しているわけではありません.負荷ドライブ能力が最大 0 という制約条件をもった PCDモジュールは,必ず制約違反を引き起こし,他の PCDモジュールへと置換されてしまうということから,結果的に仮想セルになるということにすぎません(start というディレクトリに仮想セルを置く約束になっているのも,auto.bat などの便宜上の都合によるもの).そして,この置換のメカニズムによって,テクノロジ・マッピングが実施されることになります.
このため,正確なテクノロジ・マッピング,最適化処理を実施させるためには,正確なセル・ライブラリを使用し,正確な設計条件を設定しなけばなりません.これは,一見面倒なような印象を与えるかもしれませんが,各PCDサブモジュールの制約条件はセル・ライブラリにある PCDファイルの def-constraint文 で記述してあるものがそのまま反映されます.したがって,対象回路ごとに注意深く設定しなければならないのは,トップ・モジュールの外部端子に対する制約条件だけですみます.すなわち,制約条件の設定に関しては,どんなに複雑な階層構成で多数のPCDモジュールを含む回路を扱う場合であっても,小規模な回路と同程度の手間しかかからないと言えます.
(1) power up (図7.3)
<図7.3> optコマンドによる power up の例
(2) speed up
改善しようとするイベントの到達経路に存在する全ての PCDモジュールを対象に,置換可能なセルが存在し,置換によって改善が可能となり得るものを,改善の程度が大きいと見込まれる順に,その条件が満足されるまで置換していきます.
条件を満たすための改善が,これ以上存在しない場合には,その旨のメッセージを表示します.この場合は,ONSETによる改善,設計条件での対処,再設計といった対処が必要となります.
(3) speed down
この改善要求は,イベント設定値の誤りに起因する場合も多く,当初の実行時から自動的にバッファを挿入するなどして,遅延を増加させることは必ずしも好ましくありません.そこで, delay 指定なしで optコマンドを実行した場合は,警告メッセージの表示のみを行います.
opt delay という指定で本コマンドが実行された場合は,イベント到達経路の最後のネットへのPCDモジュールの出力端子,あるいはトップモジュールの入力端子に対して必要数のバッファをシリーズに挿入することによって,イベント到達時刻を遅らせます.
なお,バッファ挿入のためには,機能が "buffer" および "clock_buf" であり,入力端子から出力端子への該当イベントの遅延伝搬が可能なセルが,指定したセル・ライブラリに準備されている必要があります.
(4) power down
置換可能なセルが存在する PCDモジュールの出力端子であるならば,その置換によって改善します.
OPT_MAPにおける各処理の過程で,変更を加えたくないサブモジュールに対しては,frzc または frzs コマンドによって,凍結することができます.凍結されたサブモジュールに包含されるすべての構成要素は,回路変更の対象になりません.ただし,凍結されたサブモジュール内においても,負荷容量の計算,イベントの伝搬の計算の対象となりますので,他の凍結されていない回路の最適化は,正確に実施することができます.
凍結の機能は,すでに用意されているハード・マクロの回路を部品として使用する回路の論理合成の際などに役立ちます.凍結されたサブモジュールは,unfrzc または unfrzs コマンドによって,凍結されていない状態に戻ります.
OPT_MAPのコマンド一覧を,表7.1に示します.各コマンドごとのより詳しい説明は,helpコマンドによるオンライン・ヘルプ機能によって,表示させることができます(MS-DOSの more.com が OPT_MAPから呼び出される).
<表7.1> OPT_MAPのコマンド一覧