以下、図面に基づいて本発明の実施の形態を説明する。図2は、本発明の実施の形態における配線経路作成支援装置のハードウェア構成例を示す図である。図2の配線経路作成支援装置10は、それぞれバスBで相互に接続されているドライブ装置100と、補助記憶装置102と、メモリ装置103と、CPU104と、インタフェース装置105と、表示装置106と、入力装置107とを有する。
配線経路作成支援装置10での処理を実現するプログラムは、CD−ROM等の記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従って配線経路作成支援装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はCRTディスプレイや液晶ディスプレイ等の表示装置である。入力装置107はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
図3は、本発明の実施の形態における配線経路作成支援装置の機能構成例を示す図である。同図において、配線経路作成支援装置10は、有向グラフ生成部110、経路探索部120、概略経路確定部130、ネットリスト141、ピンリスト142、配線ルール143、及び出口情報144等を有する。
有向グラフ生成部110は、概略配線を実施するためのネットワークフローモデル化された有向グラフを生成する。すなわち、配線経路作成支援装置10は、BGA(Ball Grid Array)の配線問題に対しネットワークフローモデルを適用することにより概略配線を実行する。BGAの配線問題にネットワークフローモデルを適用するにあたり、有向グラフ生成部110は、配線対象とされたBGAの少なくともピン(又は端子ともいう。以下、「ピン」で統一する。)、水平ピン間(空きピンも含めて水平方向に隣接する二つのピンに挟まれた領域)、垂直ピン間(空きピンも含めて垂直方向に隣接する二つのピンに挟まれた領域)、及び対角ピン間(空きピンも含めて4つのピンに囲まれた領域)に配線通過数を規制するボトルネック(配線数の制限)を設ける。また、空きピン(ピンが配置されていない部分)が有る場合は空きピンにもボトルネックが設けられる。当該ボトルネックは図4に示されるようにモデル化される。
図4は、BGAに設けられたボトルネックのモデル化の例を示す図である。同図には、BGAの一部分が示されている。
同図における円c1〜c4は、BGAモデルのピンを示す。各ピンに配置された矩形(r1〜r4)、水平ピン間に設けられた矩形(r5及びr6)、垂直ピン間に設けられた矩形(r7及びr8)、及び対角ピン間に設けられた矩形(r9)は、ボトルネック箇所を表現するためのものである。本実施の形態では、当該各矩形を「セル」という。各セルには容量(配線通過許容数)が与えられる。図中において、各セル内における数値は、当該セルに付与された容量を示す。
各セルは、対角線上に二つのノードを有する。左上のノードは入り口ノードであり、右下のノードは出口ノードである。有向グラフ生成部110は、所定の規則に従って各ノードを接続する有向枝を生成する。図中においてノード間を接続する矢印が有向枝を示す。有向枝が生成されることにより、概略配線を実施するための有向グラフが生成される。
有向グラフ生成部110は、セル生成部111、セル容量算出部112、ノード生成部113、及び有向枝生成部114等を有する。各部の機能については、図9において説明する。
経路探索部120は、有向グラフ生成部110によって生成された有向グラフにおいて、全ての引き出し対象の配線ごとに最短経路を探索する。経路探索部120は、最短経路探索部121、及びバックトレース部122等を有する。各部の機能については、図40及び図41において説明する。
概略経路確定部130は、経路探索部によって探索された各経路を各配線に分配することにより、概略配線の引き出し経路(概略経路)を確定する。
ネットリスト141、ピンリスト142、配線ルール143、及び出口情報144等は、概略配線における入力情報であり、例えば、補助記憶装置102に保存されている。ネットリスト141は、引き出し対象のピンの識別子の一覧情報を含む。ピンリスト142は、配線対象のBGAに配置されている全てのピンに関する情報を含む。配線ルール143は、配線可能領域を規定する各種のパラメータを含む。出口情報144は、配線対象のBGAにおいて配線の出口位置を識別するための情報を含む。
以下、配線経路作成支援装置の処理手順について説明する。図5は、配線経路作成支援装置による処理概要を説明するためのフローチャートである。
ステップS1において、有向グラフ生成部110は、概略配線を実施するためのネットワークフローモデル化された有向グラフを生成する。
図6は、有向グラフ生成部によって生成される有向グラフの例を示す図である。すなわち、同図はステップS1の処理結果を示す。
同図において、実線による円はピンを示す。グレーに塗りつぶされた円は、配線の引き出し対象(引き出し元)となるピン(以下、「引き出し対象ピン」という。)を示す。破線による円は空きピンを示す。また、各矩形はセルを示す。同図では、配線の出口位置を破線で囲まれた出口位置Oに限定した場合の有向グラフの生成状態を示す。出口位置Oに含まれるセルを以下「出口セル」という。このように、セル内の入り口ノードから出口ノードへの方向を有する有向枝、及び出口ノードから隣接する他のセルの入り口ノードへの方向を有する有向枝が生成されることにより有向グラフが生成される。図中において、湧き出しノードSは、有向グラフの始点として設けられたノードである。流入ノードTは、有向グラフの終点として設けられたノードである。なお、各有向枝は、当該有向枝が接続するノードが属するセルの容量に応じた容量を有する。
ステップS1に続いてステップS2に進み、経路探索部120は、有向グラフ生成部110によって生成された有向グラフにおいて、全ての引き出し対象の配線ごとに最短経路を探索する。
図7は、経路探索部によって探索される経路の例を示す図である。すなわち、同図はステップS2の処理結果を示す。
同図において、太い実線が、経路探索部によって探索された経路を示す。本実施の形態では、6本の配線が要求されている場合を例とする。したがって、同図に示される経路は、6配線分の経路を示す。各経路は、湧き出しノードSから引き出し対象ピンの入り口ノードを経由し、更に、出口セルの出口ノードを経由して流入ノードTまで至る。なお、ステップS2の終了時点では、各経路に属する各有向枝がいずれの配線の持ち物になるかは決定されていない。
ステップS2に続いてステップS3に進み、概略経路確定部130は、経路探索部120によって探索された各経路を各配線に分配し、概略配線の引き出し経路(概略経路)を確定する。
図8は、経路確定部によって確定された概略経路の例を示す図である。すなわち、同図はステップS3の処理結果を示す。同図において、符号en(nは整数)が付されている有向枝は、確定された概略経路が通過する有向枝である。同図では、便宜上、3本の概略経路が確定した状態を示す。
以上の処理手順によって、配線経路作成支援装置10は、BGAの概略配線を自動的に実行する。以下、各ステップの詳細について説明する。
まず、ステップS1の詳細について説明する。図9は、有向グラフ生成部による有向グラフの生成処理の処理手順を説明するためのフローチャートである。
ステップS1−1において、セル生成部111は、BGAのボトルネック箇所にセルを生成し、当該セルを示すデータ(セルデータ)を補助記憶装置102に保存する。本実施の形態において、ボトルネック箇所は、ピン、水平ピン間、垂直ピン間、対角ピン間、及び空きピンである。したがって、これらの位置に対応するセルデータが生成される。
図10は、ボトルネック箇所にセルが生成された状態を示す図である。同図の表記法は、図6と同様である。同図には、セル行及びセル列(セル行列)とピン行及びピン列(セル行列)における行番号及び列番号が示されている。すなわち、各セルの位置は、セル行の行番号及びセル列の列番号によって管理される。また、各ピンの位置は、ピン行の行番号及びピン列の値によって管理される。なお、本実施の形態において、セル行列又はピン配列における方向は、東西南北によって識別される。図中右方向は東、左方向は西、上方向は北、下方向は南とする。但し、このような方向付けは相対的、かつ、便宜的なものであり、いずれの方向に東西南北を割り当ててもよい。
図11は、セルデータの構成例を示す図である。同図において、セルデータは構造体として定義されている。但し、セルデータ及び後述される他のデータをどのような実体によって実現するかについては適宜選択すればよい。
同図において、セルデータは、セル属性(attr)、ネットID(netID)、出口フラグ(exitF)、x座標(x)、y座標(y)、入り口ノードのノードID(iN)、出口ノードのノードID(oN)、容量(cap)、セルの行番号(r)、及びセルの列番号(c)等のメンバ変数(データ項目)を有する(括弧内はメンバ変数名を示す。)。
セル属性(attr)は、各セルがいずれのボトルネック箇所に対応するかを示す属性である。「S」は、引き出し対象ピンに位置するセルであることを示す。「EP」は、空きピンに位置するセルであることを示す。「D」は、通常のピン(引き出し対象ピン又は空きピン以外のピン)に位置するセルであることを示す。「V」は、水平ピン間に位置するセルであることを示す。「H」は、垂直ピン間に位置するセルであることを示す。「SB」は、対角ピン間に位置するセルであることを示す。図10の各セル内には、セル属性の値が記されている。図10からも明らかなように、本実施の形態では、東端列のピンの東に隣接する箇所(セル)、及び西端列のピンの西に隣接する箇所(セル)も水平ピン間(V)とされる。また、北端行のピンの北に隣接する箇所(セル)、及び南端行のピンの南に隣接する箇所(セル)も垂直ピン間(H)とされる。また、東端列のピン、西端列のピン、北端行のピン、又は南端行のピンに対してBGAの外周側に斜めに接する(斜め度なり)箇所(セル)も対角ピン間(SB)とされる。なお、本実施の形態において、水平ピン間を「V」、垂直ピン間を「H」によって示すのは、セルの並びとしては、水平ピン間は垂直方向に配列され、垂直ピン間は水平方向に配列されるからである。
ネットID(netID)は、引き出し対象ピンに位置するセルに関して有効となるメンバ変数であり、当該引き出し対象ピンから引き出される配線の識別子(ネットID)が登録される。出口フラグ(exitF)は、図10のセル行列において外周のセルであるか否かを示すメンバ変数である。外周に位置するセルに対してはtrueが登録され、外周に位置しないセルにはfalseが登録される。x座標(x)は、BGA上の相対座標系におけるセルの所定の位置(例えば、左上頂点)のx座標値である。y座標(y)は、BGA上の相対座標系におけるセルの所定の位置のy座標値である。なお、BGA上の相対座標系とは、例えば、BGAの左上頂点を原点とし、単位をミリメートルとする座標系である。入り口ノードのノードID(iN)は、セルの入り口ノードの識別子(ノードID)である。出口ノードのノードID(oN)は、セルの出口ノードの識別子(ノードID)である。容量(cap)は、セルの容量、すなわち、配線通過許容数である。セルの行番号(r)は、セルが位置するセル行の行番号である。セルの列番号(c)はセルが位置するセル列の列番号である。
一つのセルデータは、一つのセルに対応する。従って、ステップS1−1では、セル個数分のセルデータが生成される。
続いて、セル容量算出部112は、配線ルール143等に基づいて各セルの容量を算出し、算出結果をセルデータの容量(cap)に記録する。(S1−2)。
続いて、ノード生成部113は、セルごとにノードを示すデータ(ノードデータ)を補助記憶装置102に生成し、各セルデータの入り口ノードのノードIDと出口ノードのノードIDに対応する各ノードデータのノードIDを記録する(S1−3)。続いて、ノード生成部113は、湧き出しノードSのノードデータと流入ノードTのノードデータとを生成する(S1−4)。
図12は、ノードが生成された状態を示す図である。同図には、各セルの入り口ノード及び出口ノードのそれぞれを示す点が記されている。また、湧き出しノードS及び流入ノードTのそれぞれを示す点が記されている。
また、図13は、ノードデータの構成例を示す図である。同図において、ノードデータは、ラベル伝播元ノードID(pID)、最短経路長(dist)、オーナーセルのセルID(cellID)、ノード属性(attr)、相棒ノードID(bros)、ソースフラグ(sFlag)、ターゲットフラグ(tFlag)、相棒ノードとの有向枝(eBros)、東隣セルのノードとの有向枝(eE)、西隣セルのノードとの有向枝(eW)、南隣セルのノードとの有向枝(eS)、北隣セルのノードとの有向枝(eN)、北東セルのノードとの有向枝(eNE)、北西セルのノードとの有向枝(eNW)、南東セルのノードとの有向枝(eSE)、南西セルのノードとの有向枝(eSW)、湧き出しノードSからの有向枝のリスト(soureEdgeList)、流入ノードTへの有向枝のリスト(targetEdgeList)、及びラベルフロントフラグ(lFrontF)等のメンバ変数(データ項目)を有する。
ラベル伝播元ノードID(pID)は、経路探索におけるラベルの伝播元となるノード(親ノード)のノードIDである。最短経路長(dist)は、引き出し対象のセルの入り口ノードから当該ノードまでの最短の経路長である。オーナーセルのセルID(cellID)は、当該ノードが属するセル(オーナーセル)の識別子(セルID)である。ノード属性(attr)は、入り口ノードか出口ノードかを示す属性である。「in」は入り口ノードを示し、「out」は出口ノードを示す。相棒ノードID(bros)は、同じセル内における他方のノード(相棒ノード)のノードIDである。ソースフラグ(sFlag)は、ノードが湧き出しノードS又は引き出しセルの入り口ノードであるか(true)否か(false)を示すメンバ変数である。ターゲットフラグ(tFlag)は、ノードが流入ノードT又は出口セルの出口ノードであるか(true)否か(false)を示すメンバ変数である。
相棒ノードとの枝(eBros)は、相棒ノードとの間に生成される有向枝のデータ(枝データ)である。東隣セルのノードとの有向枝(eE)は、東側に隣接するセル(東隣セル)のノードとの間に生成される有向枝の枝データである。西隣セルのノードとの有向枝(eW)は、西側に隣接するセル(西隣セル)のノードとの間に生成される有向枝の枝データである。南隣セルのノードとの有向枝(eS)は、南側に隣接するセル(南隣セル)のノードとの間に生成される有向枝の枝データである。北隣セルのノードとの有向枝(eN)は、北側に隣接するセル(北隣セル)のノードとの間に生成される有向枝の枝データである。北東セルのノードとの有向枝(eNE)は、北東側に隣接するセル(北東セル)のノードとの間に生成される有向枝の枝データである。北西セルのノードとの有向枝(eNW)は、北西側に隣接するセル(北西セル)のノードとの間に生成される有向枝の枝データである。南東セルのノードとの有向枝(eSE)は、南東側に隣接するセル(南東セル)のノードとの間に生成される有向枝の枝データである。南西セルのノードとの有向枝(eSW)は、南西側に隣接するセル(南西セル)のノードとの間に生成される有向枝の枝データである。
湧き出しノードSからの有向枝のリスト(soureEdgeList)は、湧き出しノードSから引き出し対象セルの入り口ノードに対する有向枝の枝データのリストであり、湧き出しノードSのノードデータにおいて有効である。流入ノードTへの有向枝のリスト(targetEdgeList)は、出口セルの出口ノードから流入ノードTへの有向枝の枝データのリストであり、流入ノードTのノードデータにおいて有効である。ラベルフロントフラグ(lFrontF)は、経路探索の最前線(ラベルフロント)のノードであるか否かを示すフラグである。
続いて、有向枝生成部114は、ノード間に有向枝を生成し、当該有向枝を示す枝データを補助記憶装置102に保存する(S1−5)。ステップS1−5が終了すると、図6に示した状態となる。
続いて、ステップS1−1の詳細について説明する。図14は、セルの生成処理の処理手順を説明するためのフローチャートである。
ステップS1−1−1において、セル生成部111は、セルデータの配列(セルデータ配列cell)を補助記憶装置102に生成する。セルデータ配列cellの要素数は、ピンの行数がr、ピンの列数がcである場合、(2r+1)×(2c+1)個とされる。ピンの行数及び列数は、ピンリスト142に基づいて判定される。セルデータ生成部111は、セルデータ配列cellに要素として含まれる各セルデータに、セルの行番号(r)及びセルの列番号(r)を記録する。なお、セルデータ配列cellは、2次元配列でもよいが、本実施の形態では1次元配列とする。また、便宜上、後述の処理におけるセルデータは、補助記憶装置102に生成されたセルデータをいうが、処理性能を考慮してメモリ装置103にセルデータを生成し、当該セルデータを処理対象としてもよい。この場合、セルデータは、ステップS3の終了時までに補助記憶装置102に保存されればよい。ノードデータ及び枝データの扱いについても同様である。
続いて、セル生成部111は、セル行列の偶数行偶数列に位置するセルのセルデータについてピン(空きピンも含む。)との対応付けを行い、セル属性を付与する(S1−1−2)。
続いて、セル生成部111は、セル行列の奇数行偶数列、偶数行奇数列、及び奇数行奇数列に位置するそれぞれのセルのセルデータにH属性、V属性、又はSB属性を付与する(S1−1−3)。すなわち、奇数行偶数列のセルのセルデータのセル属性に「H(垂直ピン間)」が記録される。また、偶数行奇数列のセルのセルデータのセル属性に「V(水平ピン間)」が記録される。更に、奇数行奇数列のセルのセルデータのセル属性に「SB(対角ピン間)」が記録される。
続いて、セル生成部111は、セル属性の値が「S」、「H」、「V」、又は「EP」のセルデータにセルのうち、セル行列において外周に位置するセルに対応するセルデータの出口フラグ(exitF)の値をtrueとし、外周に位置しないセルに対応するセルデータの出口フラグ(exitF)の値をfalseとする(S1−1−4)。
続いて、ステップS1−1−2の詳細について説明する。図15は、偶数行偶数列に位置するセルのセルデータに対する処理の処理手順を説明するためのフローチャートである。
ステップS1−1−2aにおいて、セル生成部111は、ピンリスト142に登録されているピンデータの中から、ピン行列の1行1列に対応するピンデータを取得し、処理対象とする。ピンリスト142には、配線対象とするBGAのピン毎にピンデータが登録されている。各ピンデータは、ピンの識別子(ピンID)、ピン行列における位置(行番号及び列番号)、BGA上の相対座標系における位置(x座標及びy座標)、空きピンであるか否か等の情報を含む。また、引き出し対象ピンに対応するピンデータは、ネットID(引き出し配線の識別子)を含む。
続いて、セル生成部111は、変数iの値を2c+2に初期化する(S1−1−2b)。ここで、cはピンの列数である。したがって、2c+1は、セルの列数である。そうすると、2c+2は、セルデータ配列cellにおいて2行2列目の要素(セルデータ)に対する添え字となる。なお、添え字の起点は0(0オリジン)であるとする。続いて、セル生成部111は、セルデータ配列cellにおいて添え字がiである要素(セルデータ)を処理対象とする(S1−1−2c)。
続いて、セル生成部111は、処理対象のピンデータとネットリスト141とに基づいて、当該ピンデータに係るピンが引き出し対象であるか否かを判定する(S1−1−2d)。ネットリスト141には、引き出し対象ピンのピンIDの一覧が登録されている。したがって、セル生成部111は、処理対象のピンデータのピンIDが、引き出し対象ピンのピンIDとしてネットリスト141に登録されているか否かに基づいて当該判定を行うことができる。
処理対象のピンデータに係るピンが引き出し対象ピンである場合(S1−1−2dでYes)、セル生成部111は、処理対象のセルデータのセル属性(attr)に「S(引き出し対象ピン)」を記録し、ネットID(netID)に処理対象のピンデータに登録されているネットIDを記録する(S1−1−2e)。処理対象のピンデータに係るピンが引き出し対象ピンでない場合(S1−1−2dでNo)、セル生成部111は、当該ピンデータに基づいて当該ピンが空きピンであるか否かを判定する(S1−1−2f)。当該ピンが空きピンである場合(S1−1−2fでYes)、セル生成部111は、処理対象のセルデータのセル属性(attr)に「EP(空きピン)」を記録する(S1−1−2g)。処理対象のピンデータに係るピンが空きピンでない場合(S1−1−2fでNo)、セル生成部111は、処理対象のセルデータのセル属性(attr)に「D(ピン)」を記録する(S1−1−2h)。
ステップS1−1−2g又はS1−1−2hに続いて、セル生成部111は、処理対象のピンデータの列番号が最大値(ピンの列数)に達しているか否かを判定する(S1−1−2i)。ピンデータの列番号が最大値でない場合(S1−1−2iでNo)、セル生成部111は、ピン列において東側に1列隣のピンに係るピンデータ(すなわち、列番号が1つ大きいピンデータ)を処理対象とする(S1−1−2j)。また、セル生成部111は、変数iに2を加算する(S1−1−2k)。すなわち、処理対象のセルデータがセル列において2列分東側にずらされる。
一方、ピンデータの列番号が最大値である場合(S1−1−2iでNo)、セル生成部111は、当該ピンデータの行番号が最大値(ピンの行数)に達しているか否かを判定する(1−1−2l)。ピンデータの行番号が最大値でない場合(S1−1−2lでNo)、セル生成部111は、次のピン行(南側の行)において先頭のピンに対応するピンデータを処理対象とする(S1−1−2m)。また、セル生成部111は、変数iに2c+4を加算する(S1−1−2k)。すなわち、セル行列において南側に2行先(すなわち、次の偶数行)の2列目のセルに対応するセルデータが処理対象とされる。
ステップS1−1−2k又はステップS1−1−2nに続いて、次の偶数行偶数列のセル(セルデータ)についてステップS1−1−2c以降の処理が繰り返される。全てのピンが処理されると(S1−1−2lでYes)、図15の処理は終了する。
以上で図9のステップS1−1の説明は終了する。続いて、図9のステップS1−2の詳細について説明する。図16は、セルの容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS1−2−1において、セル容量算出部112は、水平方向(東西方向)に隣接するピン間の配線容量を計算し、V属性のセルデータ(セル属性の値が「V」のセルデータ)の容量(cap)に計算結果を記録する。続いて、セル容量算出部112は、垂直方向(南北方向)に隣接するピン間の配線容量を計算し、H属性のセルデータ(セル属性の容量に計算結果を記録する(S1−2−2)。続いて、セル容量算出部112は、対角ピン間の配線容量を計算し、SB属性のセルデータの容量に計算結果を記録する(S1−2−3)。続いて、セル容量算出部112は、空きピンの配線容量を計算し、EP属性のセルデータの容量に計算結果を記録する(S1−2−4)。続いて、セル容量算出部112は、D属性のセルデータの容量に0(ゼロ)を記録する(S1−2−5)。続いて、セル容量算出部112は、セル行列において出口セル以外の外周のセルのセルデータの容量に0を記録する(S1−2−6)。当該セルデータの容量に0を記録することにより、概略経路の出口を出口セルに限定することができる。なお、出口セルか否かは、出口情報144とセルデータとに基づいて判定される。出口情報144には、出口位置O(図6参照)の範囲を示す座標情報が含まれている。したがって、セルデータの座標値と、出口位置Oとの座標情報とを照合することで当該セルデータに係るセルが出口セルか否かを判定することができる。なお、図6において、出口位置Oは、面情報(2次元の情報)とされている。但し、出口位置Oは、例えば、BGAの外周上の一部分の始点と終点とによって特定されてもよい。
ところで、各セルの容量の算出には配線ルール143が利用される。配線ルール143には、図17に示されるパラメータが登録されている。
図17は、配線ルールに登録されているパラメータを説明するための図である。同図において、円はピンを示す。また、水平方向の2本の線は配線を示す。同図に示されるように配線ルール143には、lx、ly、VR、SV、SW、及びSS等のパラメータの値が登録されている。
lxは、ピンの水平方向の中心間距離である。lyは、ピンの垂直方向の中心間距離である。VRは、ピンの半径である。SVは、配線と端子の間隔である。SWは、配線の幅(太さ)である。SSは、配線と配線との間隔である。
以上のパラメータを利用して、図16の各ステップの詳細について説明する。なお、図16における処理は、予め実行されていてもよい。この場合、当該処理の実行結果として得られる値(各ボトルネック箇所に応じた容量)が配線ルール143として記録されていればよい。
まず、ステップS1−2−1の詳細について説明する。図18は、水平方向に隣接するピン間の配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS1−2−1Aにおいて、セル容量算出部112は、d=lx−2×(VR+SV)を計算する。計算結果dは、水平方向のピン間において配線に利用可能な最大距離である。続いて、セル容量算出部112は、dが配線の幅SW以上か否かを判定する(S1−2−1B)。dが配線の幅SW以上である場合(S1−2−1BでYes)、セル容量算出部112は、d=d−SWを計算し、続いて、capV=1+floor(d/(SS+SW))を計算する(S1−2−1C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capV=1+floor(d/(SS+SW))の計算結果capVは、水平方向のピン間における配線可能数を示す。なお、floor関数は、引数とされた数値の最大の整数値を計算する関数である。
一方、dが配線の幅SW未満である場合(S1−2−1BでNo)、セル容量算出部112は、capVの値を0とする(S1−2−1D)。ステップS1−2−1C又はS1−2−1Dに続いて、セル容量算出部112は、capVの値を全てのV属性のセルデータの容量(cap)に記録する(S1−2−1E)。
なお、ステップS1−2−2については、図18より自明であるためその説明は省略する。すなわち、図18におけるlxをlyに置き換えて、capVの値をH属性のセルデータの容量に記録すればよい。
続いて、ステップS1−2−3の詳細について説明する。図19は、対角ピン間の配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS1−2−3Aにおいて、セル容量算出部112は、L=min(lx,ly)を計算し、続いて、d=L×√2−2×(VR+SV)を計算する。L=min(lx,ly)の計算結果Lは、lxとlyとの最小値である。d=L×√2−2×(VR+SV)の計算結果は、対角ピン間において配線に利用可能な最大距離である。
続いて、セル容量算出部112は、dが配線の幅SW以上か否かを判定する(S1−2−3B)。dが配線の幅SW以上である場合(S1−2−3BでYes)、セル容量算出部112は、d=d−SWを計算し、続いて、capSB=1+floor(d/(SS+SW))を計算する(S1−2−3C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capSB=1+floor(d/(SS+SW))の計算結果capSBは、対角ピン間における配線可能数を示す。
一方、dが配線の幅SW未満である場合(S1−2−3BでNo)、セル容量算出部112は、capSBの値を0とする(S1−2−3D)。ステップS1−2−3C又はS1−2−3Dに続いて、セル容量算出部112は、capSBの値を全てのSB属性のセルデータの容量(cap)に記録する(S1−2−3E)。
続いて、ステップS1−2−4の詳細について説明する。図20は、空きピンの配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS1−2−4Aにおいて、セル容量算出部112は、d=2×VRを計算する。d=2×VRの計算結果dは、ピンの直径である。続いて、セル容量算出部112は、dが配線の幅SW以上か否かを判定する(S1−2−4B)。dが配線の幅SW以上である場合(S1−2−4BでYes)、セル容量算出部112は、d=d−SWを計算し、続いて、capEP=1+floor(d/(SS+SW))を計算する(S1−2−4C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capEP=1+floor(d/(SS+SW))の計算結果capEPは、空きピンにおける配線可能数を示す。
一方、dが配線の幅SW未満である場合(S1−2−4BでNo)、セル容量算出部112は、capEPの値を0とする(S1−2−4D)。ステップS1−2−4C又はS1−2−4Dに続いて、セル容量算出部112は、capEPの値を全てのEP属性のセルデータの容量(cap)に記録する(S1−2−4E)。
以上で図9のステップS1−2の説明は終了する。続いて、図9のステップS1−3の詳細について説明する。図21は、ノードの生成処理の処理手順を説明するためのフローチャートである。
ステップS1−3−1において、ノード生成部113は、セル数×2+2個の要素を有するノードデータの配列(ノードデータ配列v)を補助記憶装置102に生成する。ノードデータ配列vは、各セルに2個ずつのノードデータと、湧き出しノードS及び流入ノードTのそれぞれのノードデータとを格納するための配列である。なお、ノードデータ配列vの最初の要素(v[0])は、湧き出しノードSに対応する。また、最後の要素(v[vertexNum−1])は、流入ノードTに対応する。vertexNumは、ノード配列の要素数である。
続いて、ノード生成部113は、ノード配列の最初の要素及び最後の要素を除く全てのノードデータを各セルデータに順番に2個ずつ割り当て、ノードデータとセルデータとの間に双方向の関連付けを記録する(S1−3−2)。すなわち、各セルデータの入り口ノードのノードID(iN)と出口ノードのノードID(oN)のそれぞれに、当該セルデータに割り当てられた二つのノードデータの一方のノードIDと他方のノードIDとを記録する。また、セルデータに割り当てられたノードデータのオーナーセルのセルID(cellID)に当該セルデータのセルIDを記録する。なお、ノードIDは、ノードデータ配列における添え字である。セルIDは、セルデータ配列cellにおける添え字である。
続いて、ノード生成部113は、ノード配列の最初の要素及び最後の要素を除く全てのノードデータの相棒ノードID(bros)に相棒ノード(同一セルに割り当てられた他方のノード)のノードデータのノードIDを記録する(S1−3−3)。
続いて、ノード生成部113は、各ノードデータのメンバ変数に初期値を記録する(S1−3−4)。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。NULLIDは、データが無いことを示すIDである。また、最短経路長(dist)に0を記録する。また、入り口ノードとして割り当てられたノードデータのノード属性(attr)に「in」を記録し、出口ノードとして割り当てられたノードデータのノード属性(attr)に「out」を記録する。また、ソースフラグ(sFlag)、ターゲットフラグ(tFlag)のそれぞれにfalseを記録する。
以上で図9のステップS1−3の説明は終了する。続いて、図9のステップS1−4の詳細について説明する。図22は、湧き出しノード及び流入ノードの生成処理の処理手順を説明するためのフローチャートである。
ステップS1−4−1において、ノード生成部113は、湧き出しノードSに対応するノードデータ(ノードデータ配列v[0])の各メンバ変数に初期値を記録する。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。また、最短経路長(dist)に0を記録する。また、ノード属性(attr)にoutを記録する。また、ソースフラグ(sFlag)にtrueを記録し、ターゲットフラグ(tFlag)にfalseを記録する。
続いて、ノード生成部113は、流入ノードTに対応するノードデータ(ノードデータ配列v[vertexNum−1])の各メンバ変数に初期値を記録する(S1−4−2)。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。また、最短経路長(dist)にdistMaxを記録する。distMaxは、経路探索における経路長の最大値である。また、ノード属性(attr)にinを記録する。また、ソースフラグ(sFlag)にfalseを記録し、ターゲットフラグ(tFlag)にtrueを記録する。
以上で図9のステップS1−4の説明は終了する。続いて、図9のステップS1−5の詳細について説明する。図23は、有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−1において、有向枝生成部114は、全てのセルについて入り口ノードから出口ノードへの有向枝を生成する。
図24は、セルの入り口ノードから出口ノードへの有向枝を示す図である。同図では、便宜上9個のセルが示されている。各セルには、入り口ノードを示す点から出口ノードを示す点への矢印が記されている。当該矢印が、入り口ノードから出口ノードへの有向枝を示す。
続いて、有向枝生成部114は、隣接するセル間で(セル間を跨いで)、出口ノードから入り口ノードへの有向枝を相互に生成する(S1−5−2)。続いて、有向枝生成部114は、湧き出しノードSから全ての引き出し対象ピンに対応するセル(引き出し対象セル)の入り口ノードへの有向枝を生成する(S1−5−3)。続いて、有向枝生成部114は、出口フラグ(exitF)がtrueの全てのセル(すなわち、出口セル)の出口ノードから流入ノードTへの有向枝を生成する(S1−5−4)。
続いて、図23のステップS1−5−1の詳細について説明する。図25は、セルの入り口ノードから出口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−1Aにおいて、有向枝生成部114は、変数cellIDMaxにセルの個数−1を代入する。また、有向枝生成部114は、変数iを0で初期化する。ここで、cellIDMaxは、セルIDの最大値(すなわち、セルデータ配列cellの添え字の最大値)を示す。また、変数iは、セルデータ配列cellにおいて、処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部114は、枝データeをメモリ装置103に一つ生成し、枝データのメンバ変数に初期値を記録する(S1−5−1B)。
図26は、枝データの構成例を示す図である。同図において枝データは、始点ノードID(sN)、終点ノードID(eN)、枝の長さ(eLen)、容量(cap)、フロー(flow)、及び残余(res)等のメンバ変数(データ項目)を有する。
始点ノードID(sN)は、枝データが対応する有向枝の始点に位置するノードのノードIDである。終点ノードID(eN)は、枝データが対応する有向枝の終点に位置するノードのノードIDである。枝の長(eLen)さは、有向枝の長さである。本実施の形態において、全ての有向枝は同じ長さ(1)を有する。容量(cap)は、有向枝の容量である。有向枝の容量は、経路探索において有向枝を経路に割り当てることが可能な回数の最大値を示す。フロー(flow)は、有向枝が経路に割り当てられた(経路に使用された)回数である。残余(res)は、有向枝を経路に割り当てられる残り回数を示す。すなわち、res=cap−flowの関係を有する。
ステップS1−5−1Bでは、生成された枝データeの始点ノードID(sN)に処理対象のセルデータの入り口ノードID(iN)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルデータの出口ノードID(oN)が記録される。これによって、枝データeは、処理対象のセルの入り口ノードから出口ノードへの有向枝に対応する枝データとなる。また、枝データeの容量(cap)に処理対象のセルデータの容量(cap)が記録される。すなわち、セルの入り口ノードから出口ノードへの有向枝の容量は、当該セルの容量と同じとされる。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
続いて、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の相棒ノードとの有向枝(eBros)に枝データeを記録する(S1−5−1C)。続いて、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の相棒ノードとの有向枝(eBros)に枝データeを記録する(S1−5−1D)。ステップS1−5−1C及びS1−5−1Dによって、処理対象のセルに属する二つのノードのノードデータのそれぞれに、他方のノード(相棒ノード)との有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、iの値をインクリメントする(S1−5−1E)。続いて、有向枝生成部114は、iの値がcellMaxに達したか否か、すなわち、全てのセルデータについて処理が完了したか否かを判定する(S1−5−1F)。iの値がcellMaxに達していない場合(S1−5−1FでNo)、有向枝生成部114は、次のセルデータを処理対象としてステップS1−5−1B以降を繰り返す。iの値がcellMaxに達した場合(S1−5−1FでNo)、有向枝生成部114は、図25の処理を終了させる。その結果、全てのセル内の入り口ノードから出口ノードへの有向枝が生成される(図24参照)。
続いて、図23のステップS1−5−2の詳細について説明する。図27は、隣接セル間の出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−21において、有向枝生成部114は、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝を相互に生成する。
図28は、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝を示す図である。同図に示されるように、ステップS1−5−21では、東側のセルの出口ノードから西側のセルの入り口ノードへの有向枝と、西側のセルの出口ノードから東側のセルの入り口ノードへの有向枝とが生成される。
続いて、有向枝生成部114は、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝を相互に生成する(S1−5−22)。
図29は、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝を示す図である。同図に示されるように、ステップS1−5−22では、南側のセルの出口ノードから北側のセルの入り口ノードへの有向枝と、北側のセルの出口ノードから南側のセルの入り口ノードへの有向枝とが生成される。
続いて、有向枝生成部114は、SB属性のセル(対角ピン間のセル)に属するノードについて、斜め方向(北東方向、北西方向、南東方向、又は南西方向)に隣接するセル(斜め隣接セル)に属するノードとの間に有向枝を相互に生成する(S1−5−23)。
図30は、斜め隣接セルのノード間の有向枝を示す図である。同図に示されるように、ステップS1−5−23では、SBセルの出口ノードから全ての斜め隣接セルの入り口ノードへの有向枝と、当該全ての斜め隣接セルの出口ノードからSBセルの入り口ノードへの有向枝とが生成される。
続いて、図27のステップS1−5−21の詳細について説明する。図31は、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−21Aにおいて、有向枝生成部114は、変数colMaxに列方向のセルの数を、変数rowMaxに行方向のセルの数を代入する。また、有向枝生成部114は、変数iと変数jとをそれぞれ0で初期化する。変数iは、処理対象とされる東西に隣接する二つのセルのうち、西側のセルの列方向へのオフセット値として利用される。変数jは、処理対象とされる東西に隣接する二つのセルの行方向のオフセット値として利用される。
続いて、有向枝生成部114は、w_cell_id=colMax×j+iを計算し、更に、e_cell_id=w_cell_id+1を計算する(S1−5−21B)。w_cell_idは、セルデータ配列cellにおいて、処理対象とされる西側のセル(西セル)に対応する要素(セルデータ)に対する添え字である。また、e_cell_idは、処理対象とされる東側のセル(東セル)に対応する要素(セルデータ)に対する添え字である。なお、最初は、西セルは、1行1列目のセルであり、東セルは1行2列目のセルである。
続いて、有向枝生成部114は、西セルの出口ノードから東セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−21C)。具体的には、枝データeの始点ノードID(sN)に西セルのセルデータ(セルデータ配列cell[w_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に東セルのセルデータ(セルデータ配列cell[e_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、西セルの出口ノードから東セルの入り口ノードへの有向枝に対応する枝データとなる。また、西セルのセルデータの容量(cap)の値と東セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。すなわち、東西に隣接するセルの出口ノードから入り口ノードへの有向枝の容量は、当該隣接セルの容量の最小値とされる。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の東隣セルのノードとの有向枝(eE)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の西隣セルのノードとの有向枝(eW)に枝データeを記録する。これによって、東セルの出口ノードのノードデータと西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、東セルの出口ノードから西セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−21D)。具体的には、枝データeの始点ノードID(sN)に東セルのセルデータ(セルデータ配列cell[e_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に西セルのセルデータ(セルデータ配列cell[w_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、東セルの出口ノードから西セルの入り口ノードへの有向枝に対応する枝データとなる。また、東セルのセルデータの容量(cap)の値と西セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の西隣セルのノードとの有向枝(eW)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の東隣セルのノードとの有向枝(eE)に枝データeを記録する。これによって、西セルの出口ノードのノードデータと東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、変数iをインクリメントする(S1−5−21E)。すなわち、処理対象とされる東西に隣接する二つのセルがセル行列において東側に1列分ずらされる。続いて、有向枝生成部114は、変数iの値がcolMax−1に達したか否か、すなわち、処理対象とされる西セルがセル行列の東端に達したか否かを判定する(S1−5−21F)。変数iの値がcolMax−1に達していない場合(S1−5−21FでNo)、有向枝生成部114は、東側に一つずれた東西の隣接セルを処理対象としてステップS1−5−21B以降の処理を実行する。
変数iの値がcolMax−1に達した場合(S1−5−21FでYes)、有向枝生成部114は、変数jの値をインクリメントする(S1−5−21G)。すなわち、処理対象とされる東西に隣接する二つのセルがセル行列において南側に1行分ずらされる。続いて、有向枝生成部114は、変数jの値がrowMax−1以下であるか否か、すなわち、処理対象とされるセルがセル行列の南端に達していないか否かを判定する(S1−5−21H)。変数jの値がrowMax−1以下である場合(S1−5−21HでYes)、有向枝生成部114は、変数iの値を0にし(S1−5−21I)、ステップS1−5−21B以降の処理を繰り返す。変数iの値を0にすることにより、処理対象とされる西セルがセル行列における西端に移動される。一方、変数jの値がrowMax−1を超える場合(S1−5−21HでNo)、有向枝生成部114は、図31の処理を終了させる。図31の処理結果は、図28に示した通りである。
続いて、図27のステップS1−5−22の詳細について説明する。図32は、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−22Aにおいて、有向枝生成部114は、変数colMaxに列方向のセルの数を、変数rowMaxに行方向のセルの数を代入する。また、有向枝生成部114は、変数iと変数jとをそれぞれ0で初期化する。変数iは、処理対象とされる南北に隣接する二つのセルの列方向のオフセット値として利用される。
変数jは、処理対象とされる南北に隣接する二つのセルのうち、北側のセルの行方向へのオフセット値として利用される。
続いて、有向枝生成部114は、n_cell_id=colMax×j+iを計算し、更に、s_cell_id=n_cell_id+colMaxを計算する(S1−5−22B)。n_cell_idは、セルデータ配列cellにおいて、処理対象とされる北側のセル(北セル)に対応する要素(セルデータ)に対する添え字である。また、s_cell_idは、処理対象とされる南側のセル(南セル)に対応する要素(セルデータ)に対する添え字である。なお、最初は、北セルは、1行1列目のセルであり、南セルは2行1列目のセルである。
続いて、有向枝生成部114は、北セルの出口ノードから南セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−22C)。具体的には、枝データeの始点ノードID(sN)に北セルのセルデータ(セルデータ配列cell[n_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に南セルのセルデータ(セルデータ配列cell[s_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、北セルの出口ノードから南セルの入り口ノードへの有向枝に対応する枝データとなる。また、北セルのセルデータの容量(cap)の値と南セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。すなわち、南北に隣接するセルの出口ノードから入り口ノードへの有向枝の容量は、当該隣接セルの容量の最小値とされる。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南隣セルのノードとの有向枝(eS)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北隣セルのノードとの有向枝(eN)に枝データeを記録する。これによって、北セルの出口ノードのノードデータと南セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、南セルの出口ノードから北セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−22D)。具体的には、枝データeの始点ノードID(sN)に南セルのセルデータ(セルデータ配列cell[s_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に北セルのセルデータ(セルデータ配列cell[n_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、南セルの出口ノードから北セルの入り口ノードへの有向枝に対応する枝データとなる。また、南セルのセルデータの容量(cap)の値と北セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北隣セルのノードとの有向枝(eN)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南隣セルのノードとの有向枝(eS)に枝データeを記録する。これによって、南セルの出口ノードのノードデータと北セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、変数jをインクリメントする(S1−5−22E)。すなわち、処理対象とされる南北に隣接する二つのセルがセル行列において南側に1行分ずらされる。続いて、有向枝生成部114は、変数jの値がrowMax−1に達したか否か、すなわち、処理対象とされる北セルがセル行列の南端に達したか否かを判定する(S1−5−22F)。変数jの値がrowMax−1に達していない場合(S1−5−22FでNo)、有向枝生成部114は、南側に一つずれた南北の隣接セルを処理対象としてステップS1−5−22B以降の処理を実行する。
変数jの値がrowMax−1に達した場合(S1−5−22FでYes)、有向枝生成部114は、変数iの値をインクリメントする(S1−5−22G)。すなわち、処理対象とされる南北に隣接する二つのセルがセル行列において東側に1列分ずらされる。続いて、有向枝生成部114は、変数iの値がcolMax−1以下であるか否か、すなわち、処理対象とされるセルがセル行列の東端に達していないか否かを判定する(S1−5−22H)。変数iの値がcolMax−1以下である場合(S1−5−22HでYes)、有向枝生成部114は、変数jの値を0にし(S1−5−22I)、ステップS1−5−22B以降の処理を繰り返す。変数jの値を0にすることにより、処理対象とされる北セルがセル行列における北端に移動される。一方、変数iの値がcolMax−1を超える場合(S1−5−22HでNo)、有向枝生成部114は、図32の処理を終了させる。図32の処理結果は、図29に示した通りである。
続いて、図27のステップS1−5−23の詳細について説明する。図33は、斜め隣接セルのノード間の有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−23Aにおいて、有向枝生成部114は、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。続いて、有向枝生成部114は、変数iに初期値0を代入する(S1−5−23B)。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部114は、処理対象のセルデータ(セルデータ配列cell[i])のセル属性(attr)の値が「SB(対角ピン間)」であるか否かを判定する(S1−5−23C)。処理対象のセルデータのセル属性の値がSBの場合(S1−5−23CでYes)、有向枝生成部114は、当該セルデータの行番号(r)が1より大きいか否かを判定することにより、当該セルデータのセルより北側にセル行が存在するか否かを判定する(S1−5−23D)。
当該セルデータのセルより北側にセル行が存在する場合(S1−5−23DでYes)、有向枝生成部114は、当該セルデータの列番号(c)が1より大きいか否かを判定することにより、当該セルデータのセルより西側にセル列が存在するか否かを判定する(S1−5−23E)。当該セルデータのセルより西側にセル列が存在する場合(S1−5−23EでYes)、有向枝生成部114は、当該セルと北西のセルとの間の有向枝を生成する(S1−5−23F)。
ステップS1−5−23F、又はステップS1−5−23EでNoの場合に続いて、有向枝生成部114は、処理対象のセルデータの列番号(c)がcolMax−1以下であるか否かを判定することにより、当該セルデータのセルより東側にセル列が存在するか否かを判定する(S1−5−23G)。当該セルデータのセルより東側にセル列が存在する場合(S1−5−23GでYes)、有向枝生成部114は、当該セルと北東のセルとの間の有向枝を生成する(S1−5−23H)。
ステップS1−5−23H、ステップS1−5−23GでNoの場合、又はステップS1−5−23DでNoの場合に続いて、有向枝生成部114は、処理対象のセルデータの行番号(r)がrowMax−1以下であるか否かを判定することにより、当該セルデータのセルより南側にセル行が存在するか否かを判定する(S1−5−23I)。当該セルデータのセルより南側にセル行が存在する場合(S1−5−23IでYes)、有向枝生成部114は、当該セルデータの列番号(c)が1より大きいか否かを判定することにより、当該セルデータのセルより西側にセル列が存在するか否かを判定する(S1−5−23J)。当該セルデータのセルより西側にセル列が存在する場合(S1−5−23JでYes)、有向枝生成部114は、当該セルと南西のセルとの間の有向枝を生成する(S1−5−23K)。
ステップS1−5−3K、又はステップS1−5−23JでNoの場合に続いて、有向枝生成部114は、処理対象のセルデータの列番号(c)がcolMax−1以下であるか否かを判定することにより、当該セルデータのセルより東側にセル列が存在するか否かを判定する(S1−5−23L)。当該セルデータのセルより東側にセル列が存在する場合(S1−5−23LでYes)、有向枝生成部114は、当該セルと南東のセルとの間の有向枝を生成する(S1−5−23M)。
ステップS1−5−23M、ステップS1−5−23LでNoの場合、ステップS1−5−23IでNoの場合、又はステップS1−5−23CでNoの場合に続いて、有向枝生成部114は、変数iをインクリメントする(S1−5−23N)。続いて、有向枝生成部114は、変数iの値がcellMax(セルの総数)より小さいか否かを判定することにより、未処理のセルデータが残っているか否かを判定する(S1−5−23O)。未処理のセルデータが残っている場合(S1−5−23OでYes)、有向枝生成部114は、次のセルデータを処理対象としてステップS1−5−23B以降を繰り返す。未処理のセルデータが残っていない場合(S1−5−23OでNo)、有向枝生成部114は、図33の処理を生成させる。図33の処理結果は、図30に示した通りである。
続いて、図33のステップS1−5−23Fの詳細について説明する。図34は、北西のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23F−1において、有向枝生成部114は、nw_cell_id=i−colMax−1を計算する。ここで、変数i及びcolMaxの値は、図33の処理においてステップS1−5−23Fが呼び出された時点の値である。したがって、計算結果nw_cell_idは、図33の処理において処理対象とされているセルデータのセルの北西のセル(北西セル)のセルデータに対する添え字である。
続いて、有向枝生成部114は、処理対象のセルの出口ノードから北西セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23F−2)。具体的には、枝データeの始点ノードID(sN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に北西セルのセルデータ(セルデータ配列cell[nw_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、処理対象のセルの出口ノードから北西セルの入り口ノードへの有向枝に対応する枝データとなる。また、処理対象のセルのセルデータの容量(cap)の値と北西セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと北西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、北西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23F−3)。具体的には、枝データeの始点ノードID(sN)に北西セルのセルデータ(セルデータ配列cell[nw_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の入り口ノードID(iN)が記録される。これによって、枝データeは、北西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応する枝データとなる。また、北西セルのセルデータの容量(cap)の値と処理対象のセルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。これによって、北西セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図33のステップS1−5−23Hの詳細について説明する。図35は、北東のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23H−1において、有向枝生成部114は、ne_cell_id=i−colMax+1を計算する。ここで、変数i及びcolMaxの値は、図33の処理においてステップS1−5−23Hが呼び出された時点の値である。したがって、計算結果ne_cell_idは、図33の処理において処理対象とされているセルデータのセルの北東のセル(北東セル)のセルデータに対する添え字である。
続いて、有向枝生成部114は、処理対象のセルの出口ノードから北東セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23H−2)。具体的には、枝データeの始点ノードID(sN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に北東セルのセルデータ(セルデータ配列cell[ne_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、処理対象のセルの出口ノードから北東セルの入り口ノードへの有向枝に対応する枝データとなる。また、処理対象のセルのセルデータの容量(cap)の値と北東セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと北東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、北東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23H−3)。具体的には、枝データeの始点ノードID(sN)に北東セルのセルデータ(セルデータ配列cell[ne_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の入り口ノードID(iN)が記録される。これによって、枝データeは、北東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応する枝データとなる。また、北東セルのセルデータの容量(cap)の値と処理対象のセルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。これによって、北東セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図33のステップS1−5−23Kの詳細について説明する。図36は、南西のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23K−1において、有向枝生成部114は、sw_cell_id=i+colMax−1を計算する。ここで、変数i及びcolMaxの値は、図33の処理においてステップS1−5−23Kが呼び出された時点の値である。したがって、計算結果sw_cell_idは、図33の処理において処理対象とされているセルデータのセルの南西のセル(南西セル)のセルデータに対する添え字である。
続いて、有向枝生成部114は、処理対象のセルの出口ノードから南西セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23K−2)。具体的には、枝データeの始点ノードID(sN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に南西セルのセルデータ(セルデータ配列cell[sw_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、処理対象のセルの出口ノードから南西セルの入り口ノードへの有向枝に対応する枝データとなる。また、処理対象のセルのセルデータの容量(cap)の値と南西セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと南西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、南西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23K−3)。具体的には、枝データeの始点ノードID(sN)に南西セルのセルデータ(セルデータ配列cell[sw_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の入り口ノードID(iN)が記録される。これによって、枝データeは、南西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応する枝データとなる。また、南西セルのセルデータの容量(cap)の値と処理対象のセルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。これによって、南西セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図33のステップS1−5−23Mの詳細について説明する。図37は、南東のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23M−1において、有向枝生成部114は、se_cell_id=i+colMax+1を計算する。ここで、変数i及びcolMaxの値は、図33の処理においてステップS1−5−23Mが呼び出された時点の値である。したがって、計算結果se_cell_idは、図33の処理において処理対象とされているセルデータのセルの南東のセル(南東セル)のセルデータに対する添え字である。
続いて、有向枝生成部114は、処理対象のセルの出口ノードから南東セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23M−2)。具体的には、枝データeの始点ノードID(sN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に南東セルのセルデータ(セルデータ配列cell[se_cell_id])の入り口ノードID(iN)が記録される。これによって、枝データeは、処理対象のセルの出口ノードから南東セルの入り口ノードへの有向枝に対応する枝データとなる。また、処理対象のセルのセルデータの容量(cap)の値と南東セルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと南東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部114は、南東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S23M−3)。具体的には、枝データeの始点ノードID(sN)に南東セルのセルデータ(セルデータ配列cell[se_cell_id])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の入り口ノードID(iN)が記録される。これによって、枝データeは、南東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応する枝データとなる。また、南東セルのセルデータの容量(cap)の値と処理対象のセルのセルデータの容量の値とのうち小さい方の値が枝データeの容量(cap)に記録される。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。また、有向枝生成部114は、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。これによって、南東セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図23のステップS1−5−3の詳細について説明する。図38は、湧き出しノードから引き出し対象セルへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−3Aにおいて、有向枝生成部114は、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。また、有向枝生成部114は、変数iに初期値0を代入する。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部114は、処理対象のセルデータ(セルデータ配列cell[i])のセル属性(attr)の値が「S(引き出し対象ピン)」であるか否かを判定する(S1−5−3B)。処理対象のセルデータのセル属性の値がSの場合(S1−5−3BでYes)、有向枝生成部114は、処理対象のセルデータのセルの入り口ノードのノードデータ(ノードデータ配列v[cell[i].iN])のソースフラグ(sFlag)にtrueを記録する(S1−5−3C)。
続いて、有向枝生成部114は、湧き出しノードSから処理対象のセルへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−3D)。具体的には、枝データeの始点ノードID(sN)に湧き出しノードSのノードID(0)が記録される。また、枝データeの終点ノードID(eN)に処理対象のセルのセルデータ(セルデータ配列cell[i])の入り口ノードID(iN)が記録される。これによって、枝データeは、処理対象の湧き出しノードSから処理対象のセルの入り口ノードへの有向枝に対応する枝データとなる。また、枝データeの容量(cap)に1が記録される。すなわち、湧き出しノードSから引き出し対象セルの入り口ノードへの有向枝の容量は1とされる。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeに係る有向枝の始点ノード(すなわち、湧き出しノードS)のノードデータ(ノードデータ配列v[0])の湧き出しノードSからの有向枝のリスト(sourceEdgeList)に、枝データeを追加する。
ステップS1−5−3D、又はステップS1−5−3BでNoの場合に続いて、有向枝生成部114は、変数iをインクリメントする(S1−5−3E)。すなわち、セルデータ配列cellにおいて次のセルデータが処理対象とされる。続いて、有向枝生成部114は、変数iの値がcellMax(セルの総数)未満であるか否かを判定することにより、未処理のセルデータが有るか否かを判定する(S1−5−3F)。未処理のセルデータが有る場合(S1−5−3FでYes)、有向枝生成部114は、ステップS1−5−3B以降を繰り返す。未処理のセルデータが無い場合(S1−5−3FでNo)、有向枝生成部114は、図38の処理を終了させる。
続いて、図23のステップS1−5−4の詳細について説明する。図39は、出口セルから流入ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS1−5−4Aにおいて、有向枝生成部114は、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。また、有向枝生成部114は、変数iに初期値0を代入する。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部114は、処理対象のセルデータ(セルデータ配列cell[i])の出口フラグ(exitF)の値がtureであり、かつ、処理対象のセルデータの容量が0より大きいか否かを判定する(S1−5−4B)。この判定は、処理対象のセルデータが出口セルに対応するセルデータであるか否かの判定に相当する。すなわち、出口フラグの値がtrueであるセルデータは、セル行列において外周に位置するセルのセルデータである(図14のステップS1−1−4参照)。また、外周に位置するセルのセルデータのうち、容量が0より大きいのは出口セルのセルデータだけである(図16のステップS1−2−6参照)。
ステップS1−5−4BでYesの場合、すなわち、処理対象のセルデータが出口セルのセルデータである場合、有向枝生成部114は、処理対象のセルデータのセルの出口ノードのノードデータ(ノードデータ配列v[cell[i].oN])のターゲットフラグ(tFlag)にtrueを記録する(S1−5−4C)。
続いて、有向枝生成部114は、処理対象のセルから流入ノードTへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S1−5−4D)。具体的には、枝データeの始点ノードID(sN)に処理対象のセルデータ(セルデータ配列cell[i])の出口ノードID(oN)が記録される。また、枝データeの終点ノードID(eN)に流入ノードTのノードID(vertexNum−1)が記録される。これによって、枝データeは、処理対象のセルの出口ノードから流入ノードTへの有向枝に対応する枝データとなる。また、枝データeの容量(cap)に処理対象のセルデータの容量(cap)が記録される。すなわち、出口セルの出口ノードから流入ノードTへの有向枝の容量は出口セルの容量とされる。また、枝データeの枝の長さ(eLen)に1が記録される。また、枝データeのフロー(flow)に初期値0が記録される。また、枝データeの残余(res)に枝データeの容量(cap)の値が記録される。
また、有向枝生成部114は、枝データeに係る有向枝の終点ノード(すなわち、流入ノードT)のノードデータ(ノードデータ配列v[vertexNum−1])の流入ノードへの有向枝のリスト(targetEdgeList)に、枝データeを追加する。
ステップS1−5−4D、又はステップS1−5−4BでNoの場合に続いて、有向枝生成部114は、変数iをインクリメントする(S1−5−4E)。すなわち、セルデータ配列cellにおいて次のセルデータが処理対象とされる。続いて、有向枝生成部114は、変数iの値がcellMax(セルの総数)未満であるか否かを判定することにより、未処理のセルデータが有るか否かを判定する(S1−5−4F)。未処理のセルデータが有る場合(S1−5−4FでYes)、有向枝生成部114は、ステップS1−5−4B以降を繰り返す。未処理のセルデータが無い場合(S1−5−4FでNo)、有向枝生成部114は、図39の処理を終了させる。
以上で図9のステップS1−5の説明は終了する。すなわち、図5のステップS1の説明は終了する。この時点における処理結果は、図6に示した通りである。
続いて、図5のステップS2の詳細について説明する。図40は、有向グラフにおける最短経路の探索処理の処理手順を説明するためのフローチャートである。なお、本実施の形態では、最短経路を求めるアルゴリズムとしてダイクストラ法(Dijkstra's Algorithm)を採用する。但し、公知の他のアルゴリズムを採用してもよい。
ステップS2−1において、最短経路探索部121は、湧き出しノードSのノードデータの湧き出しノードSからの有向枝のリスト(sourceEdgeList)からフロー(flow)の値が0の枝データを一つ取得し、変数cEdgeに代入する。湧き出しノードSのsourceEdgeListには、図38の処理によって湧き出しノードSから全ての引き出し対象セルの入り口ノードへの有向枝に対する枝データが記録されている。当該有向枝は、図6の例では6本示されている。ステップS2−1では、6本のうちフロー(flow)の値が0の有向枝の枝データが一つ取得される。なお、最初は、全ての枝データのフロー(flow)の値は0であり、後段の処理によってフローの値は変化する。また、変数cEdgeは、処理対象とする枝データを格納する枝データ型の変数である。cEdgeに代入された枝データを以下、「枝データcEdge」という。
枝データcEdgeを取得できた場合、すなわち、湧き出しノードSのノードデータのsourceEdgeListに該当する枝データが存在した場合(S2−2)、最短経路探索部121は、全てのノードデータ(ノードデータ配列vの全ての要素)の中で、ソースフラグ(sFlag)又はターゲットフラグ(tFlag)がtrueでないノードデータのラベル伝播元ノードID(pID)、最短経路長(dist)、及びラベルフロントフラグ(lFrontF)の値を初期化する(S2−3)。具体的には、pIDにNULLIDを、distにdistMaxを、lFrontFにfalseを代入する。なお、ソースフラグ(sFlag)がtrueのノードデータとは、湧き出しノードS又は引き出し対象セルの入り口ノードのノードデータである。また、ターゲットフラグ(tFlag)がtrueのノードデータとは、流入ノードT又は出口セルの出口ノードのノードデータである。したがって、湧き出しノードS、引き出し対象セルの入り口ノード、流入ノードT、及び出口セルの出口ノードを除く全てのノードのノードデータに関してステップS2−3の処理が実行される。
続いて、最短経路探索部121は、変数pathFの値をfalseに初期化する(S2−4)。
続いて、最短経路探索部121は、枝データcEdgeの始点ノードID(sN)をcurrentVに代入し、枝データcEdgeの終点ノードID(eN)をnextVに代入する(S2−5)。枝データcEdgeは、湧き出しノードSから引き出し対象セルの入り口ノードへの有向枝の枝データである。したがって、currentVは、湧き出しノードSのノードIDを示す。また、nextVは、引き出し対象セルの入り口ノードのノードIDを示す。
続いて、最短経路探索部121は、引き出し対象セルの入り口ノードのノードデータ(ノードデータ配列v[nextV])のメンバ変数の値を更新する(S2−6)。具体的には、ラベル伝播元ノードID(pID)にcurrentVの値が代入される。また、最短経路長(dist)に枝データcEdgeの枝の長さ(eLen=1)が代入される。また、ラベルフロントフラグ(lFrontF)にtrueが代入される。lFtontFがtrueとされることにより、当該ノードデータが経路探索においてラベルフロント(最前線)に位置することが識別される。また、最短経路探索部121は、当該ノードデータを変数lFrontListに追加する。変数lFrontListは、経路探索において最前線に位置するノードのノードデータの一覧を格納するための変数である。
続いて、最短経路探索部121は、変数lFrontListから最短経路長(dist)の値が最小のノードデータcvを取り出し、経路探索のラベリングを行う(S2−7)。なお、変数lFrontListから取り出されたノードデータは、変数lFrontListより除去される。続いて、最短経路探索部121は、変数lFrontListにノードデータが残っているか否かを判定する(S2−8)。ノードデータが残っている場合(S2−8でYes)、最短経路探索部121は、変数lFrontListからノードデータが無くなるまでステップS2−7を繰り返し実行する。
変数lFrontListにノードデータが残っていない場合(S2−8でNo)、最短経路探索部121は、変数pathFの値はtrueであるか否かを判定する(S2−9)。変数pathFの値は、ステップS2−7における経路探索において、目的地点のノード、すなわち、出口セルの出口ノードまで到達した場合にtrueとされる。
変数pathFの値がtrueの場合(S2−9でYes)、バックトレース部122は、経路探索の結果をバックトレースし、探索された経路において使用された有向枝のフロー(flow)と残余(res)とを更新する(S2−10)。ステップS2−10、又はステップS2−9でNoの場合に続いて、ステップS2−1以降が繰り返し実行される。ステップS2−1においてフロー(flow)枝データcEdgeが取得できなかったら(S2−2でNo)、図40の処理は終了する。
続いて、図40のステップS2−7の詳細について説明する。図41は、経路探索のラベリング処理の処理手順を説明するためのフローチャートである。
ステップS2−7−1において、最短経路探索部121は、変数iを0に初期化する。続いて、最短経路探索部121は、枝データcrrEdgeにノードデータcv(経路探索において最前線に居るノードデータの1つ)に接続しているいずれかの枝データを代入する。枝データcrrEdgeは、図41において処理対象とされる枝データである。枝データcrrEdgeに代入される枝データは、変数iの値によって変化する。すなわち、変数iの値が0のとき、ノードデータcvの相棒ノードとの有向枝(eBros)が枝データcrrEdgeに代入される。変数iの値が1のとき、ノードデータcvの東隣セルのノードとの有向枝(eE)が枝データcrrEdgeに代入される。変数iの値が2のとき、ノードデータcvの西隣セルのノードとの有向枝(eW)が枝データcrrEdgeに代入される。変数iの値が3のとき、ノードデータcvの南隣セルのノードとの有向枝(eS)が枝データcrrEdgeに代入される。変数iの値が4のとき、ノードデータcvの北隣セルのノードとの有向枝(eN)が枝データcrrEdgeに代入される。変数iの値が5のとき、ノードデータcvの北東セルのノードとの有向枝(eNE)が枝データcrrEdgeに代入される。変数iの値が6のとき、ノードデータcvの北西セルのノードとの有向枝(eNW)が枝データcrrEdgeに代入される。変数iの値が7のとき、ノードデータcvの南東セルのノードとの有向枝(eSE)が枝データcrrEdgeに代入される。変数iの値が7のとき、ノードデータcvの南西セルのノードとの有向枝(eSW)が枝データcrrEdgeに代入される。
なお、変数iの値は、ステップS2−7−2以降のループが実行されるたびにインクリメントされる。したがって、ステップS2−7−2以降では、ループの回数に応じて処理対象とされる枝データcrrEdgeが順番に変化する。
続いて、最短経路探索部121は、枝データcrrEdgeの値が空であるか否かを判定する(S2−7−3)。枝データcrrEdgeが空でない場合(S2−7−3でNo)、最短経路探索部121は、ノードデータcVの最短経路長(dist)に枝データcrrEdgeの枝の長さ(eLen)を加算した値を変数Dに代入する(S2−7−4)。変数Dの値は、枝データcrrEdgeにおいてノードデータcvの他方に位置するノードデータの経路長を示す。但し、当該経路長が最短経路長であることは確定されていない。
続いて、最短経路探索部121は、変数Dの値が流入ノードTの最短経路長(dist)より小さいか否かを判定する(S2−7−5)。なお、流入ノードTまでの経路が探索されるまでは流入ノードTの最短経路長(dist)の値はdistMax(最大値)である。
続いて、最短経路探索部121は、ノードデータcvに係るノードは枝データcrrEdgeの始点ノードであり、かつ、枝データcrrEdgeの残余(res)の値が0より大きく、かつ、枝データcrrEdgeに係る有向枝の終点ノードのノードデータの最短経路長(dist)は変数Dより大きいか否かを判定する(S2−7−6)。
この判定は、ノードデータcvに係るノードが枝データcrrEdgeの始点ノードである場合において、枝データcrrEdgeに係る有向枝が目的地点までの最短経路を構成する有向枝となりうるか否か(当該有向枝の先を探索する価値は有るか否か)の判定に相当する。すなわち、枝データcrrEdgeの残余が0であれば、当該枝データcrrEdgeを経路として使うことはできないからである。また、枝データcrrEdgeの終点ノードの最短経路長(dist)の値が変数Dの値以下であれば、これから探索しようとする当該終点ノードまでの経路は最短経路ではないからである。なお、特定のノード以外のノードデータの最短経路長(dist)は、図40のステップS2−3においてdistMaxに初期化されている。したがって、少なくとも最初の探索時において、ノードデータcvに係るノードが枝データcrrEdgeの始点ノードである場合は、ステップS2−7−6の判定はYesとなる。
ステップS2−7−6でYesの場合、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードデータの最短経路長(dist)の値を変数Dの値によって更新する。また、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードデータのラベル伝播元ノードID(pID)の値をノードデータcVのノードIDによって更新する(S2−7−7)。
続いて、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードデータのターゲットフラグ(tFlag)がtrueであるか否か、すなわち、当該終点ノードが出口セルの出口ノード(目的地点のノード)であるか否かを判定する(S2−7−8)。枝データcrrEdgeの終点ノードのノードデータのターゲットフラグ(tFlag)がtrueの場合(S2−7−8でYes)、最短経路探索部121は、目的地点まで到達したとして変数pathFの値をtrueとする(S2−7−9)。また、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードIDを流入ノードTのノードデータの伝播元ノードIDに記録する(S2−7−10)。
ステップS2−7−10、又はステップS2−7−8でNoの場合に続いて、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードデータのラベルフロントフラグ(lFrontF)の値がfalseであり、かつ、当該ノードデータのターゲットフラグ(tFlag)がfalseであるか否かを判定する(S2−7−11)。すなわち、枝データcrrEdgeの終点ノードは経路探索の最前線とされていない否か、及び当該終点ノードは出口セルの出口ノード(すなわち、目的地点のノード)でないか否かが判定される。
ステップS2−7−11でYesの場合、最短経路探索部121は、枝データcrrEdgeの終点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S2−7−12)。これにより、当該終点ノードが経路探索の最前線のノードの一つとされる。
一方、ステップS2−7−6でNoの場合、最短経路探索部121は、ノードデータcvに係るノードは枝データcrrEdgeの終点ノードであり、かつ、枝データcrrEdgeのフロー(flow)の値が0より大きく、かつ、枝データcrrEdgeに係る有向枝の始点ノードのノードデータの最短経路長(dist)は変数Dより大きいか否かを判定する(S2−7−13)。
この判定は、ノードデータcVに係るノードから枝データcrrEdgeの終点ノードへの向きが枝データcrrEdgeの有向枝の向きに逆行(逆流)する場合において、枝データcrrEdgeに係る有向枝が目的地点までの最短経路を構成する有向枝となりうるか否か(当該有向枝の先を探索する価値は有るか否か)の判定に相当する。ここで、逆行は、枝データcrrEdgeに係る有向枝が既に最短経路も利用されている場合、すなわち、枝データcrrEdgeのフロー(flow)が0より大きい場合に限り許可される。逆行の意義及び既に最短経路に利用されている有向枝についてのみ逆行が許可される理由については後述する。
ステップS2−7−13でYesの場合、最短経路探索部121は、枝データcrrEdgeの始点ノードのノードデータの最短経路長(dist)の値を変数Dの値によって更新する。また、最短経路探索部121は、枝データcrrEdgeの始点ノードのノードデータのラベル伝播元ノードID(pID)の値をノードデータcVのノードIDによって更新する(S2−7−14)。
続いて、最短経路探索部121は、枝データcrrEdgeの始点ノードのノードデータのラベルフロントフラグ(lFrontF)の値がfalseであり、かつ、当該ノードデータのターゲットフラグ(tFlag)がfalseであるか否かを判定する(S2−7−15)。すなわち、枝データcrrEdgeの始点ノードは経路探索の最前線とされていない否か、及び当該始点ノードは出口セルの出口ノード(すなわち、目的地点のノード)でないか否かが判定される。
ステップS2−7−15でYesの場合、最短経路探索部121は、枝データcrrEdgeの始点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S2−7−16)。これにより、当該始点ノードが経路探索の最前線のノードの一つとされる。
ステップS2−7−15でYesの場合、最短経路探索部121は、枝データcrrEdgeの始点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S2−7−16)。これにより、当該始点ノードが経路探索の最前線のノードの一つとされる。
ステップS2−7−16、ステップS2−7−15でNoの場合、ステップS2−7−13でNoの場合、ステップS2−7−12、ステップS2−7−11でNoの場合、又は、ステップS2−7−5でNoの場合に続いて、最短経路探索部121は、変数iをインクリメントする(S2−7−17)。続いて、最短経路探索部121は、変数iの値が9に達したか否かを判定する(S2−7−18)。ここで、変数iを9と比較するのは、一つのノードに接続されうる最大の有向枝の数は9本だからである。より具体的には、ステップS2−7−2を介して、枝データcVのメンバ変数として含まれる全ての枝データに関して処理が完了した場合、変数iの値は9となるからである。
変数iの値が9でない場合(S2−7−18でNo)、最短経路探索部121は、ステップS2−7−2以降を繰り返す。変数iの値が9である場合(S2−7−18でYes)、最短経路探索部121は、図41の処理を終了させる。
なお、図41の処理が実行されることにより、経路探索の最前線はノードデータcVと有向枝で接続されているノードのうち、最短経路である可能性がある次のノードへと移動する(当該次ノードは複数存在しうる。)。続いて、当該次のノードを対象として、再帰的に図41の処理が実行される。再帰的に図41の処理が実行されることにより、最前線のノードに接続されている有向枝が一つずつ辿られ最短経路が探索される。探索された経路に係るノードデータには、ラベル伝播元ノードID(pID)及び最短距離長(dist)の値が記録されている。
但し、各ノードデータのメンバ変数(pID、dist、lFrontF)の値は、図40のステップS2−1において処理対象の枝データcEdgeが変化する度に初期化される(S2−3)。したがって、湧き出しノードSから引き出し対象セルへの有向枝ごとに、各ノードデータのpID、dist、及びlFrontFは変化しうる。
続いて、図40のステップS2−10の詳細について説明する。図42は、バックトレース処理の処理手順を説明するためのシーケンス図である。ところで、ステップS2−10(図42の処理)は、変数lFlontListにノードデータが無く(S2−8でNo)、かつ、変数pathFの値がtrueのとき(S2−9でYesの場合)に実行される。すなわち、一つの引き出し対象セルの入り口ノード(引き出し対象ノード)から出口セルの出口ノードまでの間の最短経路の探索が完了したときに実行される。図42では、探索された最短経路を流入ノードTからのバックトレースによって、当該最短経路に使用された有向枝のフロー(flow)及び残余(res)が更新される。
ステップS2−10−1において、バックトレース部122は、流入ノードTのノードデータ(ノードデータ配列v[vertexNum−1])のラベル伝播元ノードID(pID)を変数parNに代入する。変数parNをノードIDとするノードを図42において「親ノード」という。また、バックトレース部122は、親ノードのノードデータ(ノードデータ配列v[parN])のラベル伝播元ノードID(pID)を変数ancNに代入する。変数ancNをノードIDとするノードを図42において「祖先ノード」という。
続いて、バックトレース部122は、親ノードのノードデータ(ノードデータ配列v[parN])に登録されている各枝データ(eBros、eE、eW、eS、eN、eNE、eNW、eSE、eSW)の中から変数parNをノードIDとするノードと変数ancNをノードIDとするノードとを両端点とする枝データを検索し、検索された枝データを枝データsegとする(S2−10−2)。
続いて、バックトレース部122は、枝データsegの始点ノードID(sN)の値が変数ancNの値と一致し、かつ、枝データsegの終点ノードID(eN)の値が変数parNの値と一致するか否かを判定する(S2−10−3)。すなわち、枝データsegの向きと、ラベル伝播の方向とが一致しているか否かが判定される。
ステップS2−10−3でYesの場合、バックトレース部122は、枝データsegのフロー(flow)に1を加算する。また、バックトレース部122は、枝データsegの残余(res)の値を{容量(cap)−フロー(frow)}の計算結果で更新する(S2−10−4)。すなわち、枝データsegに係る有向枝が、最短経路に利用されたことが記録される。
一方、ステップS2−10−3でNoの場合、バックトレース部122は、枝データsegの始点ノードID(sN)の値が変数parNの値と一致し、かつ、枝データsegの終点ノードID(eN)の値が変数ancNの値と一致するか否かを判定する(S2−10−4)。すなわち、ラベル伝播の方向が枝データsegの向きに対して逆行しているか否かが判定される。このような状況(ラベル伝播の方向が枝データsegの向きに逆行する状況)は、図41においてステップS2−7−14が実行された場合に発生する。
ステップS2−10−6でYesの場合、バックトレース部122は、枝データsegのフロー(flow)より1を減算する。また、バックトレース部122は、枝データsegの残余(res)の値を{容量(cap)−フロー(frow)}の計算結果で更新する(S2−10−6)。その結果、残余(res)の値は増加する。すなわち、枝データsegに係る有向枝が最短経路に利用されたことの記録が1つ分除去される。
ステップS2−10−4、ステップS2−10−6、又はステップS2−10−5でNoの場合に続いて、バックトレース部122は、祖先ノードのノードデータ(ノードデータ配列v[ancN])のソースフラグ(sFlag)がtrueであるか否か、すなわち、引き出し対象セルの入り口ノードまでバックトレースが完了したか否かを判定する(S2−10−7)。バックトレースが完了していない場合(S2−10−7でNo)、バックトレース部122は、バックトレースを一枝分進める(S2−10−8)。具体的には、変数parNに変数ancNの値が代入される。また、変数ancNにはこれまで祖先ノードだったノードデータ(v[parN])のラベル伝播元ノードID(pID)が代入される。続いて、バックトレース部122は、ステップS2−10−2を繰り返し実行する。
バックトレースが完了した場合(S2−10−7でYes)、バックトレース部122は、図42の処理を終了させる。
ここで、ステップS2−10−6の処理の意味について説明する。当該ステップは、有向枝の向きに逆行して経路探索が行われた場合(図41のステップS2−7−14が実行された場合)に実行される。
図43は、有向枝の向きに逆行して経路探索された状態を示す模式図である。同図において、実線の矢印は有向枝を示す。小文字のアルファベットはノードを示す。ノードa及びノードhは、それぞれ引き出し対象のノードである。ノードzは、目的地点のノードである。なお、同図では、便宜上、有向枝の傾きは水平又は垂直としている。
太線の有向枝によって構成される経路a→b→c→d→e→f→g→z(以下、「経路a」という。)は、既にバックトレースが完了した経路である。したがって、経路aに利用された各有向枝のフロー(flow)には1が記録されている。
一方、経路h→i→f→e→k→m→n→p→z(以下、「経路h」という。)は、経路aのバックトレース後に、図40及び図41の処理によって探索された経路である。経路hにおいて破線の矢印で示される部分(f→e区間)は、有向枝efの向きに逆行している。
斯かる経路hに関してバックトレース(図42)の処理が行われる場合、親ノードがfで祖先ノードがeのときにステップS2−10−6が実行される。当該ステップでは、有向枝efのフロー(flow)の値が1減算され、0となる。その結果、有向枝efは、経路a及び経路hのいずれからも利用されないことになる。その後、f→i→hの順でバックトレースが行われ、有向枝hi、有向枝ifのフロー(flow)は1とされる。この時点でいずれかの経路に利用されている有向枝(フローの値が1以上である有向枝)は図44に示される通りである。
図44は、有向枝の向きに逆行して経路探索された場合にバックトレースが実行された結果の例を示す模式図である。
同図では、引き出し対象のノードaからの経路は、a→b→c→d→e→k→m→n→p→z(以下、「経路a2」という。)となっている。また、引き出し対象のノードhからの経路は、h→i→f→g→z(以下、「経路h2」という。)となっている。すなわち、経路hに関するバックトレースの過程において有向枝efが利用対象から除去されることにより、経路aのノードf以降の経路が経路hによって利用され、その結果、経路h2が形成されたのである。また、経路hのノードe以降の経路が経路aに利用され、その結果、経路a2が形成されたのである。
このように有向枝の向きに逆行して経路探索された場合は、一部の経路の入れ替えが行われることにより、入れ替え前と同じ本数(図43及び図44の例では2本)の経路が確保される。但し、逆行対象とされる有向枝は、フロー(flow)の値が1以上である(すなわち、既に他の経路に利用されている)必要がある。そうでなければ、一部の経路の入れ替えは不可能だからである。
以上で図5のステップS2の説明は終了する。この時点における処理結果は、図7に示した通りである。すなわち、有向グラフ上には6本分の経路が確保されている。具体的には、6本分の経路に利用された各有向枝の枝データには容量(cap)の範囲内でフロー(flow)の値(使用回数)が記録されている。但し、この時点では、各有向枝のフローがどの配線に割り当てられるかは特定されていない。すなわち、引き出し配線の概略経路は確定されていない。続くステップS3では、各有向枝のフローが配線に分配されることにより概略経路が確定される。
続いて、図5のステップS3の詳細について説明する。図45は、概略経路の確定処理を説明するためのフローチャートである。
ステップS3−1において、概略経路確定部130は、引き出し順位path_orderを0に初期化する。引き出し順位path_orderは、各配線の引き出し順を管理するための変数である。続いて、概略経路確定部130は、配線数分の引き出し順データを補助記憶装置102に生成する(S3−2)。配線数は、例えば、ネットリスト141に基づいて判定される。すなわち、ネットリスト141には、引き出し対象のピンのピンIDの一覧が含まれている。したがって、当該ピンIDの個数を配線数として利用することができる。
図46は、引き出し順データの構成例を示す図である。同図に示されるように、一つの引き出し順データは、ネットID(netID)及び引き出し順位(order)等のメンバ変数(データ項目)を有する。ネットID(netID)は、配線のネットIDである。引き出し順位(order)は、ネットIDによって識別される配線の引き出し順位(順番)である。このように、一つの引き出し順データでは、一つの配線の引き出し順位を管理することができる。したがって、配線数分の引き出し順データが生成されることにより、各配線の引き出し順がそれぞれの引き出し順データによって管理される。
続いて、概略経路確定部130は、セル行列における北側を出口とする探索経路(ステップS2で探索された経路)の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S3−3)。
続いて、概略経路確定部130は、概略経路確定部130は、セル行列における東側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S3−4)。
続いて、概略経路確定部130は、セル行列における南側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S3−5)。
続いて、概略経路確定部130は、セル行列における西側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S3−6)。
ところで、本実施の形態では、探索経路の出口は東側に限定されている。したがって、本実施の形態においては、ステップS3−3、S3−5、及びS3−6で確定される概略経路は無い。そこで、ステップS3−4の詳細について説明する。
図47は、セル行列の東側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。図47の処理手順は、図8を参照しながら説明する。なお、本実施の形態では、セル行列の外周において時計回りに探索経路の出口が探索される。したがって、東側については、セル行列の東端列に属するセルについて、北端行から南端行に向かって探索経路の出口が探索される。
ステップS3−4−1において、概略経路確定部130は、変数cの値をcolMax−1によって初期化する。変数cは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)に対する添え字である。また、colMaxはセルの列数である。したがって、セルデータ配列cellにおいて変数cの初期値(colMax−1)を添え字とするセルデータ(cell[c])は、東端列において北端行のセルのセルデータである。
続いて、ステップS3−4−2、S3−4−3、S3−4−14、及びS3−4−15では、探索経路の出口となっているセルが探索される。
すなわち、ステップS3−4−2において、概略経路確定部130は、処理対象のセルデータの出口フラグ(exitF)がfalseであるか(すなわち、当該セルデータが外周のセルでないか)、又は当該セルデータの容量(cap)の値が0以下であるかを判定する。
ステップ3−4−2でNoの場合、概略経路確定部130は、当該セルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros)のフロー(flow)が0より大きいか否かを判定する(S3−4−3)。
ステップS3−4−2でYesの場合、又はステップS3−4−3でNoの場合は処理対象のセルデータは探索経路の出口となっていないセルのセルデータである。したがって、概略経路確定部130は、変数cの値にcolMaxを加算し、東端列の次の行のセルのセルデータを処理対象とする(S3−4−14)。続いて、概略経路確定部130は、変数cの値がセルIDの最大値以下であるか否か、すなわち、東端列において未処理の行は残っているか否かを判定する(S3−4−15)。未処理のセルが残っている場合(S3−4−15でYes)、概略経路確定部130は、ステップS3−4−2以降を繰り返す。
ステップS3−4−3でYesの場合、処理対象のセルデータは探索経路の出口となっているセルのセルデータである。そこで、概略経路確定部130は、当該セルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros)を変数pathEdgeによって参照する(S3−4−4)。なお、図8の場合、最初に7行目のセルE1のセル内の有向枝e1の枝データがpathEdgeによって参照される。以下、pathEdgeによって参照される枝データを「枝データpathEdge」という。なお、枝データpathEdgeに対する変更は、pathEdgeによって参照される枝データ(ここでは、処理対象のセルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros))への変更を意味する。
続いて、概略経路確定部130は、枝データpathEdgeのフロー(flow)に対応する線分データを生成する(S3−4−5)。
図48は、線分データの生成処理の処理手順を説明するためのフローチャートである。
ステップS4−1において、概略経路確定部130は、線分データsegを一つメモリ装置103に生成する。
図49は、線分データの構成例を示す図である。同図に示されるように、一つの線分データは、概略経路を構成する線分を表現するデータであり、始点ノードID(sN)、終点ノードID(eN)、ネットID(netID)、及び引き出し順位(order)等のメンバ変数(データ項目)を有する。
始点ノードID(sN)は、線分データの始点ノードのノードIDである。終点ノードID(eN)は、線分データの終点ノードのノードIDである。ネットID(netID)は、線分データが属する概略経路が対応する配線のネットIDである。引き出し順位(order)は、線分データが属する概略経路が対応する配線の引き出し順位である。
続いて、概略経路確定部130は、線分データsegの始点ノードID(sN)に、枝データpathEdgeの始点ノードID(sN)の値を記録する(S4―2)。続いて、概略経路確定部130は、線分データsegの終点ノードID(eN)に、枝データpathEdgeの終点ノードID(eN)の値を記録する(S4―3)。続いて、概略経路確定部130は、線分データsegをcurrentSegリストに追加する(S4−4)。currentSegリストは、一本分の概略経路を構成する線分データの集合(リスト)を格納するためのデータ又はレコードであり、例えば、メモリ装置103に生成される。
図47に戻る。ステップS3−4−5に続いてステップS3−4−6に進み、概略経路確定部130は、枝データpathEdgeのフロー(flow)の値を1減らす。ステップS3−4−5及びS3−4−6により、枝データpathEdgeのフロー(flow)が概略経路の線分として有向枝より分離されたことになる。
続いて、概略経路確定部130は、枝データpathEdgeの始点ノードのノードデータのソースフラグ(sFlag)がtrueであるか否かを判定する(S3−4−7)。すなわち、引き出し対象セルの入り口ノード(配線の起点)まで遡ったか否かが判定される。本実施の形態において最初にステップS3−4−7が実行される段階では有向枝e1の始点ノードまでしか遡っていないため、この判定はNoとなる。
ステップS3−4−7でNoの場合、概略経路確定部130は、枝データpathEdgeの始点ノードを終点ノードとする有向枝であって、フロー(flow)の値が0より大きい有向枝の枝データを当該始点ノードに接続されている有向枝の中から1本検索し、検索された有向枝を新たにpathEdgeによって参照する(S3−4−10)。ここで、有向枝の検索では、複数の有向枝が候補として存在する場合は有向枝の遡りの進行方向の右側に有る方が優先的に選択される。具体的には、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)の順で検索される。
遡りの進行方向の右側が優先されるのは、配線が他の配線と交差しないことを保障するためである。すなわち、本実施の形態では、探索経路の出口の探索がセル行列の外周において時計回り行われる。斯かる前提において、遡り方向において右側の有向枝を優先的に選択すれば、当該概略経路より右側の概略経路は生成されることはない。したがって、例えば、探索経路の出口の探索がセル行列の外周において反時計回りに行われる場合、遡りの進行方向の左側に有る方を優先的に選択すればよい。
なお、図8において最初にステップS3−4−10が実行される段階では、有向枝e2が検索され、pathEdgeによって参照される。
続いて、概略経路確定部130は、新たな枝データpathEdgeのフロー(flow)について線分データを生成する(S3−4−11)。当該ステップの処理内容は、図48において説明した通りである。続いて、概略経路確定部130は、枝データpathEdgeのフロー(flow)の値を1減らす(S3−4−12)。続いて、概略経路確定部130は、枝データpathEdgeの始点ノードの相棒ノードとの有向枝(eBros)を新たにpathEdgeによって参照する(S3−4−13)。図8において最初にステップS3−4−13が実行される段階では、有向枝e3がpathEdgeによって参照される。
以降、枝データpathEdgeの始点ノードが引き出し対象セルの入り口ノードに到達するまでステップS3−4−10〜S3−4−13が繰り返される。その結果、図8では、既に線分データが生成された有向枝e1、e2に続いてe3、e4、e5、e6、e7、e8、e9、e10、e11、e12、e13、e14、e15、e16のフロー(flow)に基づいて線分データが生成され、currentSegリストに登録される。
有向枝e17が枝データpathEdgeとされると、ステップS3−4−7でYesとなる。ステップS3−4−7でYesの場合、概略経路確定部130は、線分データの保存処理を実行する(S3−4−8)。
図50は、線分データの保存処理の処理手順を説明するためのフローチャートである。
ステップS5−1において、概略経路確定部130は、枝データpathEdgeの始点ノードのノードデータのオーナーセルのセルデータのネットID(netID)の値を取得し、変数NIDに代入する(S5−1)。図8において最初にステップS5−1が実行される段階では、セルS1のセルデータのネットID(netID)が変数NIDに代入される。
続いて、概略経路確定部130は、currentSegリストに登録されている各線分データsegのネットID(netID)にNIDの値を記録し、引き出し順位(order)にpath_orderの値(初期値は0)を記録する(S5−2)。
続いて、概略経路確定部130は、currentSegリストに登録されている各線分データを補助記憶装置102に保存する(S5−3)。
続いて、概略経路確定部130は、path_order番目の引き出し順データのネットID(netID)にNIDの値を記録し、引き出し順位(order)にpath_orderの値を記録する。
図50の処理によって、1本分の概略経路に関する線分データと引き出し順位とが補助記憶装置102に保存される。なお、線分データは、配線がどのピン間を通過するかを示す情報であり、引き出し順位は、各配線の相対的な位置関係を示す情報である。
図47に戻る。ステップS3−4−8に続いてステップS3−4−9に進み、概略経路確定部130は、path_orderの値をインクリメントする。続いて、概略経路確定部130は、ステップS3−4−3を実行する。ここで、探索経路の出口とされている次のセルを探索せずに、現在処理対象とされているセルデータについて再度ステップS3−4−3を実行するのは、現在処理対象のセルデータに係るセル内の有向枝(図8では有向枝e1)にフロー(flow)が残っている可能性があるからである。当該有向枝にフロー残っている場合(S3−4−3でYes)、ステップS3−4−4以降が実行される。その結果、図8では、有向枝e1、e2、e3、e4、e5、e6、e7、e8、e9、e10、e11、e12、e13、e14、e15、e21、e22、及びe23のフローに基づいて線分データが生成され、保存される。すなわち、2番目に引き出されるべき配線の概略経路が確定される。
セルE1の有向枝e1にフロー(flow)が残っていない場合(S3−4−3でNo)、次の行のセルE2が処理対象とされる(S3−4−14)。セルE2についてステップS3−4−4以降が実行されることにより、有向枝e31、e32、e33、e34、e35、e36、e5、e37、e38、e39、e40、及びe41のフローに基づいて線分データが生成され、保存される。すなわち、3番目に引き出されるべき配線の概略経路が確定される。
以降、ステップS3−4−2以降が繰り返し実行されることにより、本実施の形態(図8)では、合計6本分の概略経路が生成される。すなわち、本実施の形態の概略配線は完了する。詳細配線の段階では、線分データと引き出し順位とに基づいて、各配線の物理的な位置を決定すればよい。
なお、図45のステップS3−3、S3−5、及びS3−6処理手順は、図S3−4より自明であるため、フローチャートのみを示し、詳細な説明は省略する。
図51は、セル行列の北側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図51は、ステップS3−3を詳細に説明するフローチャートである。図51では、セル行列の北端行に属するセルについて、西端列から東端列に向かって(すなわち、時計回りに)探索経路の出口が探索される(S3−3−1、S3−3−14、及びS3−3−15参照)。
また、ステップS3−3−10では、遡りの進行方向の右側に有る方を優先的に選択するため、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)の順で有向枝が検索される。
また、図52は、セル行列の南側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図52は、ステップS3−5を詳細に説明するフローチャートである。図52では、セル行列の南端行に属するセルについて、東端列から西端列に向かって(すなわち、時計回りに)探索経路の出口が探索される(S3−5−1、S3−5−14、及びS3−5−15参照)。
また、ステップS3−5−10では、遡りの進行方向の右側に有る方を優先的に選択するため、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)の順で有向枝が検索される。
また、図53は、セル行列の西側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図53は、ステップS3−6を詳細に説明するフローチャートである。図53では、セル行列の西端列に属するセルについて、南端行から北端行に向かって(すなわち、時計回りに)探索経路の出口が探索される(S3−6−1、S3−6−14、及びS3−6−15参照)。
また、ステップS3−6−10では、遡りの進行方向の右側に有る方を優先的に選択するため、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、の順で有向枝が検索される。
なお、上記では、セル行列の外周のセルを全て走査して探索経路の出口を探索する例を示した。しかし、流入ノードTと有向枝によって接続されているノードを探索経路の出口とし、当該ノードから有向枝を遡るようにしてもよい。当該ノードは、流入ノードTのノードデータのtagetEdgeListに登録されている枝データに基づいて特定することができる。当該ノードが複数存在する場合、セル行列の外周における一定方向(本実施の形態では時計回りの方向)に従って、遡るノードを順番に選択すればよい。
また、本実施の形態では、セルデータ、ノードデータ、線分データ、及び引き出し順データ等の保存先を補助記憶装置102であると説明したが、その保存形態は特定のものに限定されない。単なるファイルであってもよいし、データベースであってもよい。また、各データは概略経路作成支援装置10とネットワークを介して接続されている装置に保存されてもよい。
また、本実施の形態では、集積回路パッケージの具体例としてBGAを利用した。但し、本実施の形態は、他の集積回路パッケージに対しても同様に適用可能である。
上述したように、本実施の形態の配線経路作成支援装置10によれば、BGAのような高密度にピンが配列された集積回路パッケージの概略配線について、引き出し配線経路の収容性を保障した容量を有する有向枝によって構成される有向グラフを生成することができる。したがって、斯かる有向グラフに基づいて経路探索を行い、更に概略経路を確定することにより、ピン間の配線収容本数の上限を正しく表現することができる。よって、概略配線時に許容数以上の概略経路が作成されてしまうことを回避でき、概略経路を詳細化したときにルール違反が生じて配線ができないといった事態の発生を防止することができる。特に、水平又は垂直ピン間のみならず、対角ピン間についてもボトルネックを配置するようにしたことにより、対角ピン間における配線経路の収容性についても適切に保障される。同様に、空きピンについてもボトルネックを配置するようにしたことにより、空きピン箇所についても配線経路の収容が適切に保障される。また、配線の出口が特定の場所に制限される場合は、配線の出口に係るボトルネック箇所(セル)の容量を0とすることにより、概略経路の出口を適切に制限することができる。
また、各概略経路には各配線の相対的な位置関係を示す情報として引き出し順位が付与されている。すなわち、引き出し順位に従ってピン間等における配線の位置を決定することにより、ピン間等において各配線が交差(ショート)してしまうことが防止される。具体的には、本実施の形態の場合であれば、引き出し順位が若い配線を北側又は東側に貼り付けるようにすればよい。そうすることで、各配線のクロスが防止される。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
コンピュータが実行する配線経路作成支援方法であって、
集積回路パッケージの少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手順と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手順と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手順とを有する配線経路作成支援方法。
(付記2)
前記ボトルネック配置手順は、前記集積回路パッケージに空きピンが有る場合は空きピンをもボトルネック箇所とし、当該ボトルネック箇所に空きピンに応じた配線容量を付与し、
前記水平ピン間、前記垂直ピン間、及び前記対角ピン間を構成するピンには、空きピンも含まれる付記1記載の配線経路作成支援方法。
(付記3)
前記ボトルネック配置手順は、前記集積回路パッケージにおいて配線の出口とされている部分に係る前記ボトルネック箇所を除いて、前記ボトルネック箇所の相対的な位置関係において外周に位置するボトルネック箇所の前記容量に0を付与する付記1又は2記載の配線経路作成支援方法。
(付記4)
引き出し対象の配線ごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手順と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手順とを有し、
前記経路探索手順は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記1乃至3いずれか一項記載の配線経路作成支援方法。
(付記5)
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手順を有し、
前記概略経路確定手順は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記4記載の配線経路作成支援方法。
(付記6)
前記概略経路確定手順は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従ったって、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記5記載の配線経路作成支援方法。
(付記7)
前記配線経路確定手順は、前記概略経路が確定された順番を当該概略経路に係る配線の引き出し順として当概略経路に付与する請求項6記載の配線経路作成支援方法。
(付記8)
コンピュータに、
集積回路パッケージの少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手順と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手順と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手順とを実行させるための配線経路作成支援プログラム。
(付記9)
前記ボトルネック配置手順は、前記集積回路パッケージに空きピンが有る場合は空きピンをもボトルネック箇所とし、当該ボトルネック箇所に空きピンに応じた配線容量を付与し、
前記水平ピン間、前記垂直ピン間、及び前記対角ピン間を構成するピンには、空きピンも含まれる付記8記載の配線経路作成支援プログラム。
(付記10)
前記ボトルネック配置手順は、前記集積回路パッケージにおいて配線の出口とされている部分に係る前記ボトルネック箇所を除いて、前記ボトルネック箇所の相対的な位置関係において外周に位置するボトルネック箇所の前記容量に0を付与する付記8又は9記載の配線経路作成支援プログラム。
(付記11)
引き出し対象の配線ごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手順と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手順とを有し、
前記経路探索手順は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記8乃至10いずれか一項記載の配線経路作成支援プログラム。
(付記12)
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手順を有し、
前記概略経路確定手順は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記11記載の配線経路作成支援プログラム。
(付記13)
前記概略経路確定手順は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従ったって、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記12記載の配線経路作成支援プログラム。
(付記14)
前記配線経路確定手順は、前記概略経路が確定された順番を当該概略経路に係る配線の引き出し順として当概略経路に付与する請求項13記載の配線経路作成支援プログラム。
(付記15)
集積回路パッケージの少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手段と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手段と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手段とを有する配線経路作成支援装置。
(付記16)
前記ボトルネック配置手段は、前記集積回路パッケージに空きピンが有る場合は空きピンをもボトルネック箇所とし、当該ボトルネック箇所に空きピンに応じた配線容量を付与し、
前記水平ピン間、前記垂直ピン間、及び前記対角ピン間を構成するピンには、空きピンも含まれる付記15記載の配線経路作成支援装置。
(付記17)
前記ボトルネック配置手段は、前記集積回路パッケージにおいて配線の出口とされている部分に係る前記ボトルネック箇所を除いて、前記ボトルネック箇所の相対的な位置関係において外周に位置するボトルネック箇所の前記容量に0を付与する付記15又は16記載の配線経路作成支援装置。
(付記18)
引き出し対象の配線ごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手段と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手段とを有し、
前記経路探索手段は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記15乃至17いずれか一項記載の配線経路作成支援装置。
(付記19)
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手段を有し、
前記概略経路確定手段は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記18記載の配線経路作成支援装置。
(付記20)
前記概略経路確定手段は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従ったって、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記19記載の配線経路作成支援装置。
(付記21)
前記配線経路確定手段は、前記概略経路が確定された順番を当該概略経路に係る配線の引き出し順として当概略経路に付与する請求項20記載の配線経路作成支援装置。