【PARTHENON解説書の目次に戻る】

7. マッピング&論理回路最適化プログラム OPT_MAP

7.1 OPT_MAPの概要
7.2 起動形式と起動例
7.3 基本的な使い方
7.4 代表的な機能とその考え方
7.5 コマンド一覧

7.1 OPT_MAPの概要

● OPT_MAPの基本機能

マッピング&論理回路最適化プログラムの OPT_MAP (OPTimizer and technology MAPper) は,

を入力として,その階層構成に対応した構造を内部処理で用いるメモリ上に構築したあと,各種のコマンドによって回路の最適化などを実施し,その結果を,

として出力します.

OPT_MAPの重要な機能である最適化処理は,設定する設計条件,および各構成要素が満たすべき制約条件をすべて満足させる方向に自動的に実施されます.そして,この過程で,テクノロジ・マッピングの処理も同時に実施されることになります.

そのほかにOPT_MAPは,階層構成の制御機能,部分回路の置換機能,冗長回路の除去機能,各種の物理的特性(遅延時間,負荷容量,面積など)の評価機能など数多くの機能をもっており,これらの動作は,OPT_MAPに与えられるコマンドによって制御されます.

● NLDモジュールとPCDモジュール

NLD,PCD形式のファイルが構成要素のクラス(種類)単位で存在するのに対し,メモリ上には,インスタンス(実体)に相当する構成要素のすべてと,その階層関係,接続関係が構築されます.

このOPT_MAPの内部処理のためにメモリ上に構築された構成要素の中で,

とそれぞれ呼び,トップ・モジュール以外のNLDモジュール,PCDモジュールを総称してサブモジュールと呼びます.セル・ライブラリを構成するファイルやネットリスト・ファイルそのものを指す PCDファイル,NLDファイルなどといった用語と混同しないよう注意してください.


7.2 起動形式と起動例

● 起動形式

opt_map module_name directory ...

module_name : 対象とする回路のトップ・モジュール名

directory : NLDファイルまたはPCDファイルが格納されているディレクトリ名

トップ・モジュール名に続いて,そのモジュールの構成要素となるすべてのNLDファイルおよびPCDファイルが存在するディレクトリ名を並べて指定します.さらに,テクノロジ・マッピングの対象となる実セル・ライブラリの存在するディレクトリ名も,必要に応じて指定します.

OPT_MAP は,起動の際に与えられたディレクトリを検索し,トップ・モジュール名として指定された回路を内部で構築しようとします.このとき,「構成要素として必要なファイルが見つからない」,「指定されたディレクトリが存在しない」,「PCDファイル,NLDファイルの形式に誤りがある」などの理由によって回路の構築が不可能である場合には,直ちに処理を中断します.

必要なNLDファイル,PCDファイルを読み込む順番は,次のとおりです.

(1) すべてのPCDファイルの読み込み
まず,起動の際に与えられたディレクトリのすべてを,与えられた順に探索し,存在するすべてのPCDファイルを読み込みます.
ここで読み込んだPCDファイルの情報だけが,初期回路およびテクノロジ・マッピングを含む最適化の過程で構築される回路に使用されるPCDモジュールとなります.なお,すでに読み込んだPCDファイルと同一名のPCDファイルが見つかった場合は,その読み込みを無視し,最初に読み込んだPCDファイルだけが有効に扱われます.

(2) 指定されたトップ・モジュール名のNLDファイルの読み込み
続いて,指定されたトップ・モジュール名に一致するNLDファイルを,与えられたディレクトリ・リストの順に探索して,最初に見つかったものを読み込みます.

(3) 構成要素となるNLDファイルの読み込みと回路の構築
そして,読み込んだNLDファイルの記述内容に基づき,構成要素となるNLDモジュールのクラス名に一致するNLDファイルを,またディレクトリ・リストの先頭から順に探索して読み込みます.これを,構成要素となるすべてのNLDファイルについて,再帰的に繰り返して読み込み,先に読み込んだPCDファイルの情報と合わせて,全体の回路を構築します.

(4) 回路構築の終了
回路の構築に成功し,OPT_MAP の起動が完了すると,
OPT_MAP>
というプロンプトが表示され,標準入力からのコマンド入力状態になります.また,対話処理の過程では各種のメッセージが標準出力へ出力されます.OPT_MAPの各コマンドについては,7.5に概要を示しています.また,help コマンドによって,各コマンドの機能の説明を見ることができます.

なお,対象とする回路の構築に必要なNLDファイルは,どのような合成,最適化過程を経て作成されたものでもかまいません.つまり, を,OPT_MAP 起動時にすべて結合し,対象回路全体の回路を構築することができます.2.3節で示した(1)〜(4)のコマンド投入による論理合成の例は,この機能を利用しています.

● 起動例

サブディレクトリTIMER.1st にあるネットリスト,および,A:\par\celldemo\start にある仮想セル・ライブラリ(4.3節のセル・ライブラリに関する説明を参照のこと)から,トップモジュール名 TIMER の回路を構築するために OPT_MAP を起動する.

A>opt_map TIMER TIMER.1st A:\par\celldemo\start
サブディレクトリTIMER.3rd にあるネットリスト,および,A:\par\celldemo\start にある仮想セル・ライブラリから,トップモジュール名 TIMER の回路を構築するために OPT_MAP を起動する.さらに,テクロノジ・マッピング先の実セル・ライブラリとして A: \par\celldemo\cell を用いる.
A>opt_map TIMER TIMER.3rd A:\par\celldemo\start A:\par\celldemo\cell
上記と同様に起動するが,起動後は,標準入力からの対話的な実行ではなく,MS-DOSのパイプ機能を用いて,スクリプト・ファイル TIMER.op2 を呼び出して実行する.
A>echo TIMER.op2 | opt_map TIMER TIMER.3rd A:\par\celldemo\start A:\par\celldemo\cell

7.3 基本的な使い方

● auto.bat における使われ方

2.3節で例題を用いて説明しているように,auto.bat による論理合成の過程では,OPT_MAP は 2度起動され,それぞれ,与えられるスクリプト・ファイルによって以下のような役割を果たします.これらは,OPT_MAP の典型的な使用例になっています.

1回目の OPT_MAP では,仮想セル・ライブラリによるPCDモジュールからなる回路に対して,論理的(使用するテクノロジとは無関係)な回路の簡単化を実施するため,以下の処理を行います.

そして,RINVによる処理を経た後の,2回目の OPT_MAPでは,テクノロジ・マッピングと,制約条件を満たす最適化を実施するため,次のステップを踏みます.

● auto.bat から一歩踏み込んだ使用方法

さて,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 の機能を十分に理解しておく必要があります.


7.4 代表的な機能とその考え方

● 階層構成とコマンド

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コマンドの実行により,以下の一連の操作が起こります.

極端な例として,出力端子が存在しない回路を論理合成すると,OPT_MAPのrmコマンドを実行した時点で,すべてのサブモジュールが消滅してしまいます.

● 設計条件の設定

設計条件として,トップ・モジュールの外部端子に設定すべき条件とそのためのコマンドには,以下の種類があります.

外部入力端子に対する設定

(1) 入力端子をドライブする外部回路のドライブ能力の制限の設定

(2) 入力端子へのイベント到達の時刻の設定

外部出力端子に対する設定

(3) 出力端子に接続される外部回路の負荷容量の設定

(4) 出力端子へのイベント到達時刻の条件設定

なお,イベントとは信号の変化のことで,/ (立ち上がり),\ (立ち下がり),% (不定への変化)のそれぞれを区別して,それらの変化の時刻で表します.これらの時刻の単位と,負荷容量の単位は,使用するセル・ライブラリの記述で用いている単位と同一でなければなりません.

また,セル・ライブラリに存在する各PCDファイルには,そのセルが正常に動作するための条件が def-constraint文(4.2を参照のこと)によって記述されており,OPT_MAPが回路を構築した場合,その条件が,対応する各PCDモジュールにおける制約条件とみなされます.OPT_MAPが認識する制約条件とは,この各PCDモジュールにおける制約条件と,上記の(1),(4)の外部端子における制約条件がすべてになります.

● 設計条件の評価

遅延計算のしくみ

PCDファイルの def-pin文,あるいは,上記の(3)によって,回路の内部端子,外部端子に付加される負荷容量は,lcalcコマンドによって,各端子と接続する他のすべての負荷容量と加算され,それらを接続しているネットの負荷容量として保持されます.このネットの負荷容量は遅延計算の際に参照されて使用されます.

dcalcコマンドによる遅延計算は,上記の(2)により外部入力端子に設定されたイベント(同一端子に同一種類の複数のイベントが設定してあれば,それぞれが有効)を起点として,回路全体に渡って到達可能なすべての遅延の計算を実施します.ただし,イベント到達時刻として意味を持つのは,各ネットにおける,/,\,% の各イベントのそれぞれの max,min の時刻ですので,これに反映されない遅延経路の計算は実施しないことで,処理を高速化しています.


<図7.2> OPT_MAPにおける設計条件の設定,評価モデルの例

遅延の伝搬とその時刻の計算は,あくまでも PCDファイルの def-delay文 における定義に従います.したがって,データ系の信号伝搬において,立ち上がり,立ち下がりの遅延時間の差異を考慮するかどうかは,セル・ライブラリでの def-delay文 の記述と,OPT_MAPでの設計条件の設定とで統一しておく必要があります.

celldemo として添付しているセル・ライブラリでは,データ系の信号の遅延は,すべて立ち上がりイベントの伝搬とみなして評価するモデルを採用しています.ここでの,def-delay文 では,たとえ論理が反転していても / から / のイベントが伝搬するように書かれています.ただし,クロック系の信号のみは,/ と \ を区別して扱っています.

OPT_MAPにおける設計条件の設定,評価モデルの例を図7.2 に示します.celldemo はこのモデルを想定したセル・ライブラリとなっています.

変数への値の設定

PCDファイルにおける def-constraint文 などの記述では,?で始まる名前を持った変数を使用できます.celldemo のセル・ライブラリでは,?cycle という変数が使用されており,このライブラリではこの変数にサイクル時間の値が代入されることを前提に,条件式が書かれています.

これらの変数に対する値の代入は,OPT_MAPの setv コマンドで実施します.セル・ライブラリの記述では,このように,実行時に設定できる重要な変数が含まれていますので,opt コマンドで最適化を実施する前に,値を代入しておくことが必須になります.

celldemo では,?cycle しか使用していませんが,他にもこのような変数を使用することによって,条件設定の自由度が広がります.例えば,def-pin文 の負荷式の定義に変数を使用するようなセル・ライブラリを作成することによって,配線遅延の影響を柔軟に変化させながら遅延評価することなどが可能となります.

● 最適化のメカニズム

同期回路における最適化とは

PARTHENONの設計対象となる同期回路では,設計評価,動作確認の問題を,

の二つに,完全に切り離して考えることができます.

このうち,前者の評価確認は,SFL言語レベルの動作シミュレータSECONDSを用いることによって,設計者の責任で論理合成前に実施されています.そして,OPT_MAPの段階で,後者の1マシンサイクル内におけるタイミング条件の確認を実施することになります.しかも,OPT_MAPは,たんに確認のための手段を提供するだけではなく,条件を満たす方向へ向けた回路の最適化を自動的に実施します.これを実現するのがoptコマンドです.

最適化を起こす要因

optコマンドは,制約違反を解決するというメカニズムだけによって動作します.つまり,仮想セルは実セルに置き換えなければならない,セットアップ時間,ホールド時間の条件は満たさなければならないといった意味を判断しながら回路を改善するわけではありません.そうではなく,そのような改善を引き起こすような制約条件が,各PCDモジュールにおける制約条件,および,トップ・モジュールの外部端子に対する制約条件として設定されていることが前提であり,この設定条件を満たすための動作しか起こり得ません.

じつは,仮想セル,実セルといった区別も,PCDファイル上で陽に記述しているわけではありません.負荷ドライブ能力が最大 0 という制約条件をもった PCDモジュールは,必ず制約違反を引き起こし,他の PCDモジュールへと置換されてしまうということから,結果的に仮想セルになるということにすぎません(start というディレクトリに仮想セルを置く約束になっているのも,auto.bat などの便宜上の都合によるもの).そして,この置換のメカニズムによって,テクノロジ・マッピングが実施されることになります.

このため,正確なテクノロジ・マッピング,最適化処理を実施させるためには,正確なセル・ライブラリを使用し,正確な設計条件を設定しなけばなりません.これは,一見面倒なような印象を与えるかもしれませんが,各PCDサブモジュールの制約条件はセル・ライブラリにある PCDファイルの def-constraint文 で記述してあるものがそのまま反映されます.したがって,対象回路ごとに注意深く設定しなければならないのは,トップ・モジュールの外部端子に対する制約条件だけですみます.すなわち,制約条件の設定に関しては,どんなに複雑な階層構成で多数のPCDモジュールを含む回路を扱う場合であっても,小規模な回路と同程度の手間しかかからないと言えます.

optコマンドによる回路の改善

OPT_MAPが認識する制約条件は,負荷ドライブ能力と,イベント到達時刻(遅延時間)に関連してそれぞれ 2種ずつに分類できます.したがって,optコマンドでは,制約の種類に応じて,以下の 4種の段階で回路の改善を図っていきます.

これらの各処理の過程で,それぞれ,以下のような回路の改善が起こります.ただし,対象が3ステートの端子であるか,凍結されたサブモジュールの端子であるかなどの状況によって,異なる処理となりますので,ここではそれ以外の代表的な場合についてだけ説明します.

(1) power up (図7.3)

step 1
置換可能なセル(PCDファイルの def-function文で記述されている内容に基づいて判断)が,指定されたセル・ライブラリに存在し,改善対象の pcdモジュールをそのセルへ置換することによって条件が満足される場合は,その置換を実施します.

step 2
対象が 1 出力の pcdモジュールで,かつ,step 1 での改善が行われなかった場合,同一機能の pcdモジュールを複数個パラレルに並べ,負荷を分散させることによって条件が満足される場合は,これによって改善を行います.ただし, n 個 (optコマンドのパラメータで指定する) を越えてパラレルに並べる必要がある場合,あるいは,必要数並べることによって,対象 pcdモジュールの入力側のネットの負荷条件が満足されなくなる場合には,本改善を行いません.

step 3
step 1,step 2 のいずれの改善も行われなかった場合,必要数のバッファを出力端子にツリー状に挿入することによって,改善をはかります.バッファをドライブするためのパワー不足,あるいは,用意されているバッファ 1 個あたりのパワー不足によって,改善が不可能 な場合はその旨のメッセージを表示します.

なお,バッファ挿入のためには,機能が "buffer" および "clock_buf" であるセルが,指定したセル・ライブラリに準備されている必要があります.

<図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 コマンドによって,凍結されていない状態に戻ります.


7.5 コマンド一覧

OPT_MAPのコマンド一覧を,表7.1に示します.各コマンドごとのより詳しい説明は,helpコマンドによるオンライン・ヘルプ機能によって,表示させることができます(MS-DOSの more.com が OPT_MAPから呼び出される).



<表7.1> OPT_MAPのコマンド一覧

(注)
* : このマークがついているコマンドの実行により,回路構成の変化が起こり得る
m : カレント・モジュールに対するコマンド
t : 回路全体に対する(あるいはカレント・モジュールを意識しない)コマンド
EDIF: ネットリストなどのインタフェース用に制定されている標準形式
BDNET: UCバークレーのレイアウト・プログラム用のネットリスト形式
BLIF: UCバークレーの多段論理回路表現形式