以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態における配線設計支援装置のハードウェア構成例を示す図である。図1の配線設計支援装置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はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
図2は、本発明の実施の形態における配線設計支援装置の機能構成例を示す図である。配線設計支援装置10は、プリント配線板(PCB)上における、BGA(Ball Grid Array)等の集積回路パッケージ同士の概略配線を支援する装置である。斯かる概略配線の支援のため、配線設計支援装置10は、配線プラン生成部11、妥当性判定部12、配線プラン出力部13、配線領域情報記憶部D1、障害物情報記憶部D2、部品情報記憶部D3、ピン情報記憶部D4、バス情報記憶部D5、ネット情報記憶部D6、配線幅情報記憶部D7、間隙ルール情報記憶部D8、バス経路矩形情報記憶部D9、及び配線脱出口情報記憶部D10等を有する。これら各部は、配線設計支援装置10にインストールされたプログラムが、CPU104に実行させる処理により実現される。
配線プラン生成部11は、配線プランを生成する。配線プラントは、基板上に配置されるBGA(Ball Grid Array)等の部品間を接続する各バス(ネットの束)について、配線プランを生成する。本実施の形態において、配線プランとは、バスの配線経路及び配線層の割り当てを示す情報をいう。
妥当性判定部12は、配線プラン生成部11によって生成された配線プランの妥当性を判定する。より詳しくは、妥当性判定部12は、各バスについて、当該バスが接続する二つの部品内のピンより、当該バスに属する各所属ネットがそれぞれの部品外に引き出せるか否かを判定する。二つの部品のそれぞれより全ての所属ネットが引き出せたバスの配線プランの妥当性は肯定される。二つの部品の少なくともいずれか一方より少なくとも一部の所属ネットが引き出せなかったバスの配線プランの妥当性は否定される。妥当性が否定された配線プランに係るバスについては、配線プラン生成部11によって、配線プランが再生成される。
配線プラン出力部13は、妥当性判定部12によって妥当性が肯定された配線プランを出力する。
各記憶部の説明については後述される。
以下、配線設計支援装置10の処理手順について説明する。図3は、配線設計支援装置による処理手順の概要を説明するためのフローチャートである。
ステップS1において、配線プラン生成部11は、配線プランが未確定のバスの有無を判定する。後述されるように、配線プランは、妥当性判定部12によって妥当性が肯定された場合に確定される。したがって、ステップS1が初めて実行される場合、配線予定の全てのバスの配線プランは未確定である。
続いて、配線プラン生成部11は、配線予定の各バスについて配線プランを生成する(S2)。配線プランの生成方法は、公知の技術を用いればよい。本実施の形態では、特許文献1に記載された方法を利用する。但し、本実施の形態では、ステップS2において、バスの占有領域は、過小に見積もられる。バスの占有領域が過大評価されることによる不都合を避けるためである。一方、過小に見積もられることによる不都合は、妥当性判定部12等の処理によって解消される。なお、特許文献1における「ネットグループ」は、本実施の形態における「バス」に対応する。
続いて、配線プラン生成部11は、配線プランの生成回数に1を加算する(S3)。配線プランの生成回数の初期値は0である。続いて、妥当性判定部12は、配線プラン生成部11によって生成された各バスの配線プランについて妥当性の有無を判定する(S4)。続いて、配線プラン生成部11は、妥当性判定部12によって妥当性が肯定された配線プランを確定させる(S5)。続いて、配線プラン生成部11は、配線プランの生成回数が予め設定された上限に達していないか否かを判定する(S6)。
配線プラン生成回数が予め設定された上限に達していない場合(S6でYes)、ステップS1以降が繰り返される。この場合、配線プランが未確定のバスについてステップS2以降が実行される。
配線プラン生成回数が予め設定された上限に達した場合(S6でNo)、又は配線プランが未確定のバスが無くなった場合(S1でNo)、配線プラン出力部13は、確定された配線プランを出力する(S7)。
このように、本実施の形態では、バスの占有領域が過小に見積もられて配線プランが生成される。したがって、バスの占有領域の過大評価に基づく問題を解消することができる。一方、生成された配線プランについて妥当性(すなわち、各ネットの部品内からの引き出しの可能性)が判定され、妥当性が否定された配線プランについては求めなおしが行われる。したがって、バスの占有領域を過小評価したことによる弊害の発生を回避することができる。
続いて、ステップS2の詳細について説明する。図4は、配線プランの生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS2−1において、配線プラン生成部11は、配線プランの生成に必要な情報を、配線領域情報記憶部D1、障害物情報記憶部D2、部品情報記憶部D3、バス情報記憶部D5、ネット情報記憶部D6、及び配線幅情報記憶部D7のそれぞれより取得する。
図5は、配線領域情報記憶部の構成例を示す図である。同図に示されるように、配線領域情報記憶部D1には、配線領域情報として、原点座標、配線領域寸法、及び層数等が記録されている。配線領域情報は、配線設計に対する入力情報として予め設定される。
原点座標は、配線領域の原点の座標値である。配線領域とは、部品が配置され、部品間の配線が行われる基板において配線可能な領域をいう。配線領域寸法は、配線領域のX方向(幅方向)及びY方向(高さ方向)のサイズ(実寸)である。層数は、配線領域における配線層の層数である。
図6は、障害物情報記憶部の構成例を示す図である。同図に示されるように、障害物情報記憶部D2には、障害物情報として、配線領域における障害物ごとに、ID、開始座標S、終了座標E、及び層L等が記録されている。障害物情報は、配線設計に対する入力情報として予め設定される。また、障害物との一例としては、トランジスタ、配線、及びビア等が挙げられる。
IDは、各障害物の識別子である。開始座標Sは、障害物を矩形領域として表現した場合における、左上頂点の座標値である。終了座標Eは、当該矩形領域の右下頂点の座標値である。なお、障害物の座標値は、配線領域の座標系(以下、「実寸系」という。)に従う。層Lは、障害物が存在する層の識別子である。本実施の形態では、各層を番号(層番号)によって識別する。
図7は、部品情報記憶部の構成例を示す図である。同図に示されるように、部品情報記憶部D3には、部品情報PInfoとして、配線領域における部品ごとに、部品配置座標loc、左上ピン座標、部品サイズ、ピン配列数、ピンピッチ、接続バス群hp、及びピン情報等が記録されている。部品情報PInfoは、配線設計に対する入力情報として予め設定される。表の下には、各項目の意味の理解を容易にするため、最初のレコード(行)である部品情報Pinfo[0]のイメージ図が示されている。なお、部品情報記憶部D3における各レコードのレコード名は、Pinfo[インデックス番号]によって示される。インデックス番号は、レコードの順番を示す値であり、0オリジンである。
部品配置座標locは、配線領域における部品の左上頂点の座標値である。左上ピン座標は、部品の左上(1行1列)のピンについて、部品配置座標locからのオフセット値である。オフセット値は、実寸系に従う。部品サイズは、部品の幅(W)及び高さ(H)である。それぞれの値は、実寸系に従う。ピン配列数は、幅方向(x方向)及び高さ方向(y方向)のそれぞれにおけるピンの配列数である。ピンピッチは、幅方向(x方向)及び高さ方向(y方向)のそれぞれにおけるピン間の距離である。当該距離は、実寸系に従う。接続バス群は、部品に接続される各バスのバス情報へのリンクである。バス情報は、バス情報記憶部D5に記録されている。ピン情報は、部品内の各ピンの情報(ピン情報)へのリンクである。ピン情報は、ピン情報記憶部D4に記録されている。
なお、ステップS2−1では、部品配置情報loc、部品サイズ、及び接続バス群が参照される。
図8は、バス情報記憶部の構成例を示す図である。同図に示されるように、バス情報記憶部D5には、バス情報Bとして、バスごとに、所属ネット群netG、接続対象部品群parts、優先度prio、バス経路矩形リストsP、層L、引出線分リストescS、引出成功回数nEsc、経路確定フラグacc、経路固定フラグfix、及びネット数n等が記録される。バス情報記憶部D5における各レコードのレコード名は、B[インデックス番号]によって示される。
所属ネット群netGは、バスに所属するネット(所属ネット)のIDの集合である。所属ネットのIDは、後述されるネット情報記憶部D6におけるインデックス番号である。接続対象部品群partsは、バスによって接続される部品のIDである。バスは二つの部品を接続する。したがって、二つの部品のIDが記録される。部品のIDは、部品情報記憶部D3におけるインデックス番号である。優先度prioは、バスの配線における優先度である。値が大きい程、優先度は高い。バス経路矩形リストsPは、バスの配線経路(バス経路)を矩形の集合によって表現した場合における各矩形の情報へのリンクである。各矩形の情報は、バス経路矩形情報記憶部D9に記録される。層Lは、バスに割り当てられた層の番号である。引出線分リストescSは、バス経路の中で部品内に係る部分について、各所属ネットの引き出し経路を示す線分データのリストである。引き出し線分リストescSは、配線プラン出力部13によって生成される。引出成功回数nEscは、妥当性判定部12によって、バスの全ての所属ネットの部品内からの引き出しに成功した回数である。バスは2つの部品に接続される。したがって、引出成功回数nEscの初期値は「0」であり、最大値は「2」である。経路確定フラグaccは、バス経路(すなわち、バスに対する配線プラン)が確定されたか(「T」)否か(「F」)を示すフラグである。経路確定フラグaccの初期値は「F」である。経路固定フラグfixは、バス経路が固定であるか(「T」)否か(「F」)を示すフラグである。ネット数は、バスの所属ネットの本数である。
なお、バス情報記憶部D5において、所属ネット群netG、接続対象部品群parts、優先度prio、経路固定フラグfix、及びネット数nは、配線設計に対する入力情報として予め設定される。一方、太線で囲まれた項目(バス経路矩形リストsP、層L、引出線分リストescS、引出成功回数nEsc、及び経路確定フラグacc)は、処理結果として記録される。但し、経路固定フラグfixの値が「T」であるバスについては、全ての項目の値が予め設定されている。
図9は、ネット情報記憶部の構成例を示す図である。同図に示されるように、ネット情報記憶部D6には、ネット情報NInfoとして、バスに属するネットごとに、所属バスb、ソースピンsPin、ターゲットピンtPin、及び配線幅w等が記録されている。ネット情報NInfoは、配線設計に対する入力情報として予め設定される。ネット情報記憶部D6における各レコードのレコード名は、NInfo[インデックス番号]によって示される。
所属バスbは、ネットが所属するバスのID(バスID)である。バスIDは、バス情報記憶部D5におけるインデックス番号である。ソースピンsPin及びターゲットピンtPinは、ネットによって接続される二つのピンである。それぞれのピンは、部品pid及びピンtidによって特定される。部品pidは、ピンが配置されている部品のIDである。ピンtidは、ピンのIDである。ピンのIDは、部品pidに係る部品に対応するピン情報におけるインデックスである。配線幅wは、配線幅情報記憶部D7のレコードへのリンクである。当該レコードには、配線幅の値が記録されている。
図10は、配線幅情報記憶部の構成例を示す図である。同図に示されるように、配線幅情報記憶部D7には、配線幅情報WRuleとして、ID及び線幅等が記録されている。IDは、各レコードのIDである。線幅は、層ごとの1本の配線に要する幅である。幅の値は実寸系に従う。
なお、配線領域情報、障害物情報、及び部品情報PInfoに基づいて、配線領域について、例えば、図11に示される状態が特定される。図11は、本実施の形態における配線領域の例を示す図である。
同図に示されるように、本実施の形態の配線領域Aは、左上頂点座標が(0,0)、右下頂点座標が(Xmax,Ymax)であり、6層を有する。これは、配線領域情報(図5)に基づいて特定される。また、配線領域Aに配置されている各部品には、当該部品に対応する部品情報PInfo(PInfo[0]〜PInfo[3])が参照番号として付されている。すなわち、各部品の位置及びサイズは、参照番号として付与された部品情報PIfo(図7)に基づいて特定される。更に、配線領域Aに配置されている障害物F1及びF2等は、障害物情報(図6)に基づいて特定される。
図4に戻る。続いて、配線プラン生成部11は、配線領域Aの1層から6層において、障害物F1及びF2等を除く残余の領域を配線可能領域として、バスごとに、当該バスの始点座標から終点座標に辿り着くまでの配線経路(バス経路)を探索する(S2−2)。
具体的には、配線プラン生成部11は、例えば、配線可能領域において、各バスの固有の始点座標から終点座標に辿り着くまでに1回の曲がりを許して配線経路を探索する。配線経路が探索されなかった場合、配線プラン生成部11は、同様に2回の曲がりを許して配線経路を探索する。これでも配線経路が探索されなかった場合、配線プラン生成部11は、配線不能として探索処理を終了する。
なお、配線経路の探索対象とされるバスは、バス情報記憶部D5にバス情報が記録されているバスである。各バスの始点座標及び終点座標は、当該バスの接続対象部品群partsに係る部品の任意の点とすればよい。また、各バスの幅は、ネット数n×幅に基づいて算出される。ここで、幅の値は、配線幅情報記憶部D7より取得すればよい。この段階では、所属ネットが配線される層は決定されていないため、各層の中の最小値が取得されればよい。部品内においては、バスの所属ネットは、ピンによって枝分かれせざるを得ない。枝分かれの結果、バス全体としての幅は、ネット数n×幅によって算出される値よりも大きくなる。したがって、ネット数n×幅によって算出されたバスの幅は、過小評価されたものであるといえる。なお、配線経路の探索順は、バス情報記憶部D5に記録されている優先度prioに基づいて決定される。
配線プラン生成部11は、バス経路の探索に成功したバスについて、当該バス経路を構成する矩形群の情報をバス経路矩形情報記憶部D9に記録する。
図12は、バス経路矩形情報記憶部の構成例を示す図である。同図に示されるように、バス経路矩形情報記憶部D9には、バス経路矩形情報BRとして、バス経路を構成する矩形ごとに、所属バスowner、始点座標、終点座標、層L、固定フラグfixF、及び次矩形next等が記録される。バス経路矩形情報記憶部D9における各レコードのレコード名は、BR[インデックス番号]によって示される。
所属バスownerは、矩形が属するバスIDである。始点座標は、矩形の左上頂点の座標値(実寸系)である。終点座標は、矩形の右下頂点の座標値(実寸系)である。層Lは、矩形に割り当てられた(すなわち、矩形が属するバスに割り当てられた)層の番号である。固定フラグfixFは、矩形が属するバス経路が固定であるか(「T」)否か(「F」)を示すフラグである。次矩形nextは、同一のバス経路に属する矩形の中で、次の矩形に対するリンクである。当該リンクは、次の矩形のレコードへの参照である。次の矩形が無いことは、「null」によって示される。
配線プラン生成部11は、また、バス経路の探索に成功した各バスについて、バス情報記憶部D5のバス経路矩形リストsP(図8)に、当該バス経路に所属する各矩形のバス経路矩形情報BRへのリンクを記録する。例えば、図8の例では、バス情報B[0]のバス矩形リストsPに、バス経路矩形情報BR[0]、BR[1]、BR[2]へのリンクが記録されている。
なお、バス経路が探索され、当該バス経路についてバス経路矩形情報BRとバス情報Bのバス矩形リストsPとが記録されることにより、配線領域Aは、概念的に図13に示されるような状態となる。
図13は、バス経路の探索後の配線領域の状態の一例を示す図である。同図には、バス経路が探索された各バスには、当該バスに対応するバス情報のレコード名(B[0]〜B[5])が参照番号として付与されている。各バスのバス経路に属する矩形について、当該矩形に対応するレコード名が参照番号として付与されている。同図によれば、図8のバス矩形リストsPに示される通り、矩形BR[0]、BR[1]、及びBR[2]が、バスB[0]を構成していることが分かる。同様に、矩形BR[3]及びBR[4]が、バスB[1]を構成していることが分かる。
続いて、配線プラン生成部11は、探索されたバス経路間で相互に交差関係を有するバス経路の組み合わせを検出する(S2−3)。検出結果は、例えば、メモリ103を用いて形成される交差情報テーブルに記録される。
図14は、交差情報テーブルの一例を示す図である。なお、同図に示される交差情報テーブルt1の内容は、便宜上、図13の状態に対応したものではない。
交差情報テーブルt1の各レコードは、エッジID、始点、及び終点に関する情報を含む。エッジIDは、後述する無向グラフにおいて、交差関係を有するバス経路のノード間をつなぐエッジを識別する識別子である。始点及び終点は、交差関係を有するバス経路の組み合わせの一方に対応するレコード名と、他方に対応するレコード名である。同図では、レコード名の添え字は、本実施の形態においては本来数字(バスID)であるところ、アルファベット(a〜d)によって抽象化されている。
したがって、交差情報テーブルt1は、バス経路B[a]とB[c]の他、合計5組のバス経路の間で交差が検出された例を示す。
続いて、配線プラン生成部11は、交差情報テーブルt1に登録された各バス経路がノード化され、交差関係を有するバス経路に係るノード間がエッジによって接続された無向グラフを生成する(S2−4)。具体的には、配線プラン生成部11は、交差情報テーブルt1に基づいて、バス経路B[a]〜B[d]をノード化する。続いて、配線プラン生成部11は、交差情報テーブルt1に登録されたレコード分のエッジE1〜E5によってノード間を接続する。
図15は、バス経路の交差関係を示す無向グラフの一例を示す図である。同図に示される無向グラフg1は、バス経路B[a]〜B[d]に対応するノードB[a]〜B[d]を有する。また、交差関係を有するバス経路に対応するノード間は、エッジE1〜E4のいずれかのエッジによって接続されている。
続いて、配線プラン生成部11は、無向グラフg1の彩色問題を解くことにより、無向グラフg1において直接接続されたノード間で割当先の層が異なるように、各ス経路B[a]〜B[d]に割り当てる層を決定する(S2−5)。具体的には、例えば、SEQ(SEQuential heuristic)を用いて、無向グラフg1内の各ノードB[a]〜B[d]に、隣接ノードに割り当てられていない色を順次割り当てていく。その結果、例えば、図16に示されるように各バス経路に対して割り当てられる層が決定される。
図16は、各バス経路に対する層の割り当て結果の例を示す図である。同図では、バス経路B[a]及びB[b]は、第1層に割り当てられている。また、バス経路B[c]及びB[d]は、第2層に割り当てられている。
続いて、配線プラン生成部11は、図16に示されるような決定結果をバス情報記憶部D5及びバス経路矩形情報記憶部D9に記録する(S2−6)。具体的には、層が割り当てられたバス経路に対応するバス情報Bの層Lに、当該層の番号が記録される。また、層が割り当てられたバス経路に属する矩形のバス経路矩形情報BRの層Lに、当該層の番号が記録される。
以上で、ステップS2に関する詳細な説明は終了する。なお、上記において説明したバス経路の探索方法、及びバス経路に対する層の割り当て方法は一例に過ぎない。例えば、特許文献1に記載された他の変形例が適用されてもよいし、他の公知技術が適用されてもよい。
続いて、図3のステップS4の妥当性判定部12による処理の詳細について説明する。図17は、妥当性判定部の機能構成例を示す図である。同図において、妥当性判定部12は、引き出し問題生成部121及び引き出し配線部122を含む。
引き出し問題生成部121は、各バスの所属ネットについて、接続対象の部品内からの配線経路を探索する(ネットを引き出す)ための引き出し問題を生成する。引き出し配線部122は、引き出し問題生成部121によって生成された引き出し問題を解くことにより、引き出し経路を生成する。
引き出し問題生成部121は、有向グラフ生成部1211及び防護壁生成部1212等を含む。有向グラフ生成部1211は、概略配線を実施するためのネットワークフローモデル化された有向グラフを生成する。すなわち、引き出し問題生成部121は、BGA(Ball Grid Array)等の部品からの配線の引き出し問題に対しネットワークフローモデルを適用する。配線の引き出し問題にネットワークフローモデルを適用するにあたり、有向グラフ生成部1211は、配線対象とされた部品の少なくともピン(又は端子ともいう。以下、「ピン」で統一する。)、水平ピン間(空きピンも含めて水平方向に隣接する二つのピンに挟まれた領域)、垂直ピン間(空きピンも含めて垂直方向に隣接する二つのピンに挟まれた領域)、及び対角ピン間(空きピンも含めて4つのピンに囲まれた領域)に配線通過数を規制するボトルネック(配線数の制限)を設ける。また、空きピン(ピンが配置されていない部分)が有る場合は空きピンにもボトルネックが設けられる。当該ボトルネックは図18に示されるようにモデル化される。
図18は、部品に設けられたボトルネックのモデル化の例を示す図である。同図には、配線領域Aにおける一つの部品の一部分が示されている。
同図における円c1〜c4は、部品のピンを示す。各ピンに配置された矩形(r1〜r4)、水平ピン間に設けられた矩形(r5及びr6)、垂直ピン間に設けられた矩形(r7及びr8)、及び対角ピン間に設けられた矩形(r9)は、ボトルネック箇所を表現するためのものである。本実施の形態では、当該各矩形を「セル」という。各セルには容量(配線通過許容数)が与えられる。図中において、各セル内における数値は、当該セルに付与された容量を示す。すなわち、妥当性判定部12による処理では、各部品内において、セルの行列がマッピングされる。セルの行番号及び列番号によって規定される一つの部品内における座標系を「セル座標系」という。
各セルは、二つのノードを有する。左上のノードは入り口ノードであり、右下のノードは出口ノードである。有向グラフ生成部1211は、所定の規則に従って各ノードを接続する有向枝を生成する。図中においてノード間を接続する矢印が有向枝を示す。有向枝が生成されることにより、概略配線を実施するための有向グラフが生成される。
なお、有向グラフ生成部1211は、セル生成部1211a、セル容量算出部1211b、ノード生成部1211c、及び有向枝生成部1211d等を有する。各部の機能については後述する。
防護壁生成部1212は、セル座標系において、防護壁を生成する。防護壁とは、各バスについて順番に引き出し経路(概略経路)を探索する際に、引き出し対象とされていない他のバスのための引き出し領域を防護するための仮想的な壁である。防護壁の詳細については後述する。
一方、引き出し配線部122は、経路探索部1221及び概略経路確定部1222等を含む。経路探索部1221は、有向グラフ生成部1211によって生成された有向グラフにおいて、バスに属するネットごとに部品内から配線を引き出すための最短経路を探索する。経路探索部1221は、最短経路探索部1221a及びバックトレース部1222b等を有する。各部の機能については後述する。
概略経路確定部1222は、経路探索部1221によって探索された各経路を各配線に分配することにより、概略配線の引き出し経路(概略経路)を確定する。
以下、ステップS4の処理手順の詳細について説明する。図19は、配線プランの妥当性の判定処理の処理手順を説明するためのフローチャートである。
ステップS4−1において、妥当性判定部12は、バス情報記憶部D5の全レコードの引出成功回数nEscを0にリセット(初期化)する。続いて、妥当性判定部12は、処理対象として着目する部品(着目部品)のインデックスを示す変数pに0を代入する。妥当性判定部12は、また、配線領域Aに配置されている部品の総数を変数pmaxに代入する(S4−2)。当該部品の総数は、部品情報記憶部D3のレコードの総数である。
続いて、妥当性判定部12は、変数pの値が変数pmaxに達したか、すなわち、全ての部品について処理が完了したか否かを判定する(S4−3)。未処理の部品がある場合(S4−3でYes)、妥当性判定部12は、p番目の部品情報(部品情報PInfo[p])(図7参照)に係る部品を着目部品とする(S404)。続いて、妥当性判定部12は、着目部品に接続されるバスの中で、配線経路が未確定のバスが有るか否かを判定する(S4−5)。具体的には、着目部品に接続されるバスは、部品情報PInfo[p]の接続バス群bPに基づいて特定される。当該バスの配線経路が未確定であるか否かは、当該バスのバス情報B(図8参照)の経路確定フラグaccに基づいて判定される。
配線経路が未確定のバスが有る場合(S4−5でYes)、妥当性判定部12は、処理対象として着目する層(着目層L)を1とする。妥当性判定部12は、また、配線領域の層数を変数Lmaxに代入する(S4−6)。配線領域の層数は、配線領域情報記憶部D1(図5参照)より取得される。
続いて、妥当性判定部12は、着目層Lが変数Lmaxを超えていないか否かを判定する(S4―7)。着目層Lが変数Lmaxを超えていない場合(S4−7でYes)、妥当性判定部12は、着目部品PInfo[p]及び着目層Lに係るバス経路の有無を判定する(S4−8)。具体的には、着目部品PInfo[p]の接続バス群bPに含まれているバスの中で、バス情報Bの層Lの値が着目層Lと一致するレコードが有るか否かが判定される。
着部品PInfo[p]及び着目層Lに係るバスが有る場合(S4−8でYes)、引き出し問題生成部121は、着目部品に接続されるバスの中で、着目層Lに配線経路が割り当てられたバスに属するネットについて着目部品内における引き出し問題を生成する(S4−9)。続いて、引き出し配線部122は、引き出し問題生成部121によって生成された引き出し問題を解くことにより、着目部品PInfo[p]及び着目層Lに係る各バスの所属ネットについて引き出し経路を生成する(S4−10)。
ステップS4−8〜ステップS4−10は、着目部品に関して、全ての層について実行される(S4−8及びS4―11)。但し、着目部品PInfo[p]に係るバス経路が無い層については、ステップS4−9及びS4−10は実行されない(S4―8)。すなわち、同一部品のピンが、複数の層に渡って貫通している状態が想定されている。
着目部品PInfo[p]に関して全ての層に関する処理が終了すると(S4−7でNo)、妥当性判定部12は、変数pの値に1が加算する(S4−12)。すなわち、部品情報記憶部D3において、次の部品が着目部品とされる。全ての部品について処理が完了すると(S4−3でNo)、図19の処理は終了する。
続いて、ステップS4−9の詳細について説明する。図20は、着目部品及び着目層に係るバスの引き出し問題の生成処理を説明するためのフローチャートである。
ステップS4−9−1において、引き出し問題生成部121は、着目部品PInfo[p]及び着目層Lに係るバスを部品情報記憶部D3及びバス情報記憶部D5に基づいて抽出し、抽出されたバスをバス集合BGに登録する。続いて、有向グラフ生成部1211は、バス集合BGに登録されたバス属するネットについて、着目部品PInfo[p]及び着目層Lに係る概略配線を実施するためのネットワークフローモデル化された有向グラフを生成する(S4−9−2)。
続いて、引き出し問題生成部121は、バス集合BGに含まれるバスを、それぞれのバス情報Bの優先度prioの降順にソートする(S4−9−3)。この際、経路が固定されているバスの優先度は最高として扱われる。経路が固定されているバスとは、バス情報記憶部D5において、経路固定フラグfixの値が「T」であるバスである。続いて、防護壁生成部1212は、バス集合BGに属するバスについて、ソートされた順に防護壁の生成処理を実行する(S4−9−4)。
続いて、ステップS4−9−2の詳細について説明する。まず、ステップS4−9−2の処理の成果物である有向グラフについて説明する。
図21は、有向グラフ生成部によって生成される有向グラフの例を示す図である。
同図において、実線による円はピンを示す。グレーに塗りつぶされた円は、配線の引き出し対象(引き出し元)となるピン(以下、「引き出し対象ピン」という。)を示す。破線による円は空きピンを示す。また、各矩形はセルを示す。同図では、配線の出口位置を破線で囲まれた出口位置Oに限定した場合の有向グラフの生成状態を示す。出口位置Oに含まれるセルを以下「出口セル」という。このように、セル内の入り口ノードから出口ノードへの方向を有する有向枝、及び出口ノードから隣接する他のセルの入り口ノードへの方向を有する有向枝が生成されることにより有向グラフが生成される。図中において、湧き出しノードSは、有向グラフの始点として設けられたノードである。流入ノードTは、有向グラフの終点として設けられたノードである。なお、各有向枝は、当該有向枝が接続するノードが属するセルの容量に応じた容量を有する。
図21に示されるような有向グラフを生成するための処理内容について説明する。図22は、有向グラフ生成部による有向グラフの生成処理の処理手順を説明するためのフローチャートである。以降の説明において、部品は、着目層Lにおける着目部品PInfo[p]を意味する。
ステップS4−921において、セル生成部1211aは、部品のボトルネック箇所にセルを生成し、当該セルを示すデータ(セルデータ)を補助記憶装置102に保存する。本実施の形態において、ボトルネック箇所は、ピン、水平ピン間、垂直ピン間、対角ピン間、及び空きピンである。したがって、これらの位置に対応するセルデータが生成される。
図23は、ボトルネック箇所にセルが生成された状態を示す図である。換言すれば、同図は、一つの部品のセル座標系の全体を示す図である。同図の表記法は、図21と同様である。同図には、セル行及びセル列(セル行列)とピン行及びピン列(ピン行列)における行番号及び列番号が示されている。このように、各セルの位置は、セル行の行番号及びセル列の列番号によって管理される。また、各ピンの位置は、ピン行の行番号及びピン列の値によって管理される。なお、本実施の形態において、セル行列又はピン行列における方向は、東西南北によって識別される。図中右方向は東、左方向は西、上方向は北、下方向は南とする。但し、このような方向付けは相対的、かつ、便宜的なものであり、いずれの方向に東西南北を割り当ててもよい。
図24は、セルデータの構成例を示す図である。同図において、セルデータは構造体として定義されている。但し、セルデータ及び後述される他のデータをどのような実体によって実現するかについては適宜選択すればよい。
同図において、セルデータは、セル属性(attr)、ネットID(netID)、出口フラグ(exitF)、x座標(x)、y座標(y)、入り口ノードのノードID(iN)、出口ノードのノードID(oN)、容量(cap)、当初容量(cap2)、行番号(r)、列番号(c)、防護壁色(flavor)、容量確認済みフラグ(pinCapCheckedF)、右隣のセルポインタ(rLink)、左隣のセルポインタ(lLink)、東隣のセルポインタ(cE)、西隣のセルポインタ(cW)、北隣のセルポインタ(cN)、南隣のセルポインタ(cS)、ラベル伝播元方向(parentDir)、探索ソースフラグ(sFlag)、探索ターゲットフラグ(tFlag)、道程(label)、防護壁ツリーID(treeID)、防護壁ツリー線分リスト(segList)、防護壁ツリー線分数(segNum)、防護壁ツリーセル数(cellNum)、及び防護壁ツリー線分通過数(patternNum)等のメンバ変数(データ項目)を有する(括弧内はメンバ変数名を示す。)。
セル属性(attr)は、各セルがいずれのボトルネック箇所に対応するかを示す属性である。「S」は、引き出し対象ピンに位置するセルであることを示す。「EP」は、空きピンに位置するセルであることを示す。「D」は、通常のピン(引き出し対象ピン又は空きピン以外のピン)に位置するセルであることを示す。「V」は、水平ピン間に位置するセルであることを示す。「H」は、垂直ピン間に位置するセルであることを示す。「SB」は、対角ピン間に位置するセルであることを示す。図23の各セル内には、セル属性の値が記されている。図23からも明らかなように、本実施の形態では、東端列のピンの東に隣接する箇所(セル)、及び西端列のピンの西に隣接する箇所(セル)も水平ピン間(V)とされる。また、北端行のピンの北に隣接する箇所(セル)、及び南端行のピンの南に隣接する箇所(セル)も垂直ピン間(H)とされる。また、東端列のピン、西端列のピン、北端行のピン、又は南端行のピンに対して部品の外周側に斜めに接する(斜め隣)箇所(セル)も対角ピン間(SB)とされる。なお、本実施の形態において、水平ピン間を「V」、垂直ピン間を「H」によって示すのは、セルの並びとしては、水平ピン間は垂直方向に配列され、垂直ピン間は水平方向に配列されるからである。
ネットID(netID)は、引き出し対象ピンに位置するセルに関して有効となるメンバ変数であり、当該引き出し対象ピンから引き出されるネット(配線)の識別子(ネットID)が登録される。出口フラグ(exitF)は、図23のセル行列におい出口セルであるか否かを示すメンバ変数である。出口セルに対してはtrueが登録され、出口セルでないセルにはfalseが登録される。x座標(x)は、部品上の相対座標系におけるセルの代表位置(例えば、左上頂点)のx座標値である。y座標(y)は、部品上の相対座標系におけるセルの所定の位置のy座標値である。なお、部品上の相対座標系とは、例えば、部品の左上頂点を原点とし、実寸(例えば、ミリメートル)を単位とする座標系である。入り口ノードのノードID(iN)は、セルの入り口ノードの識別子(ノードID)である。出口ノードのノードID(oN)は、セルの出口ノードの識別子(ノードID)である。容量(cap)は、セルの容量、すなわち、配線通過許容数である。当初容量(cap2)は、容量(cap)の値を退避(保持)しておくためのメンバ変数である。処理の便宜上、容量(cap)の値が一時的に変更されることがあるからである。行番号(r)は、セルが位置するセル行の行番号である。列番号(c)はセルが位置するセル列の列番号である。
容量確認済みフラグ(pinCapCheckedF)、右隣のセルポインタ(rLink)、左隣のセルポインタ(lLink)、東隣のセルポインタ(cE)、西隣のセルポインタ(cW)、北隣のセルポインタ(cN)、南隣のセルポインタ(cS)、ラベル伝播元方向(parentDir)、探索ソースフラグ(sFlag)、探索ターゲットフラグ(tFlag)、道程(label)、防護壁ツリーID(treeID)、防護壁ツリー線分リスト(segList)、防護壁ツリー線分数(segNum)、防護壁ツリーセル数(cellNum)、及び防護壁ツリー線分通過数(patternNum)については、処理手順の説明の過程において説明する。
一つのセルデータは、一つのセルに対応する。従って、ステップS4−921では、セルの個数分のセルデータが生成される。
続いて、セル容量算出部1211bは、部品情報記憶部D3、配線領域情報記憶部D1、及び間隙ルール情報記憶部D8等を用いて各セルの容量を算出し、算出結果をセルデータの容量(cap)及び当初容量(cap2)に記録する。(S4−922)。
続いて、ノード生成部1211cは、セルごとにノードを示すデータ(ノードデータ)を補助記憶装置102に生成し、各セルデータの入り口ノードのノードIDと出口ノードのノードIDに対応する各ノードデータのノードIDを記録する(S4−923)。続いて、ノード生成部1211cは、湧き出しノードSのノードデータと流入ノードTのノードデータとを生成する(S4−924)。
図25は、ノードが生成された状態を示す図である。同図には、各セルの入り口ノード及び出口ノードのそれぞれを示す点が記されている。また、湧き出しノードS及び流入ノードTのそれぞれを示す点が記されている。
また、図26は、ノードデータの構成例を示す図である。同図において、ノードデータは、ラベル伝播元ノード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)は、経路探索の最前線(ラベルフロント)のノードであるか否かを示すフラグである。
続いて、有向枝生成部1211dは、ノード間に有向枝を生成し、当該有向枝を示す枝データを補助記憶装置102に保存する(S4−925)。ステップS4−925が終了すると、図21に示した状態が得られる。但し、この時点では、湧き出しノードSからの有効枝と、流入ノードTへの有効枝とは生成されない。当該有効枝は、所属ネットの配線の引き出し経路の探索対象とされるバスに応じて異なるからである。
続いて、ステップS4−921の詳細について説明する。図27は、セルの生成処理の処理手順を説明するためのフローチャートである。
ステップS4−921−1において、セル生成部1211aは、セルデータの配列(セルデータ配列cell)を補助記憶装置102に生成する。セルデータ配列cellの要素数は、ピンの行数がr、ピンの列数がcである場合、(2r+1)×(2c+1)個とされる。ピンの行数及び列数は、部品情報記憶部D3において、着目部品に対応する部品情報PIfoのピン配列サイズに記録されている値が利用される。セルデータ生成部111は、セルデータ配列cellに要素として含まれる各セルデータに、行番号(r)及びセルの列番号(c)を記録する。なお、セルデータ配列cellは、2次元配列でもよいが、本実施の形態では1次元配列とする。また、便宜上、後述の処理におけるセルデータは、補助記憶装置102に生成されたセルデータをいうが、処理性能を考慮してメモリ装置103にセルデータを生成し、当該セルデータを処理対象としてもよい。
続いて、セル生成部1211aは、セル行列の偶数行偶数列に位置するセルのセルデータについてピン(空きピンも含む。)との対応付けを行い、セル属性を付与する(S4−921−2)。
続いて、セル生成部1211aは、セル行列の奇数行偶数列、偶数行奇数列、及び奇数行奇数列に位置するそれぞれのセルのセルデータにH属性、V属性、又はSB属性を付与する(S4−921−3)。すなわち、奇数行偶数列のセルのセルデータのセル属性に「H(垂直ピン間)」が記録される。また、偶数行奇数列のセルのセルデータのセル属性に「V(水平ピン間)」が記録される。更に、奇数行奇数列のセルのセルデータのセル属性に「SB(対角ピン間)」が記録される。
続いて、セル生成部1211aは、セル属性の値が「S」、「H」、「V」、又は「EP」のセルデータにセルのうち、セル行列において外周に位置するセルに対応するセルデータの出口フラグ(exitF)の値をtrueとし、外周に位置しないセルに対応するセルデータの出口フラグ(exitF)の値をfalseとする(S4−921−4)。
続いて、ステップS4−921−2の詳細について説明する。図28は、偶数行偶数列に位置するセルのセルデータに対する処理の処理手順を説明するためのフローチャートである。
ステップS4−921−2aにおいて、セル生成部1211aは、ピン情報記憶部D4より、ピン行列の1行1列に対応するピン情報を取得し、処理対象とする。
図29は、ピン情報記憶部の構成例を示す図である。同図に示されるように、ピン情報記憶部D4には、ピン情報TInfoとして、ピンごとに、中心座標、接続net、形状shape、及び半径r等が記録される。ピン情報TInfoは、配線設計に対する入力情報として予め設定される。同図では、部品ごとにテーブルが区別されている例が示されている。すなわち、一つのテーブルには、一つの部品に対する全てのピンのピン情報TInfoが記録される。なお、部品情報記憶部D3(図7)におけるピン情報は、各テーブルへのリンクである。
中心座標は、ピンの位置をピン行H及び列Vによって示す。接続netは、ピンに接続されるネットのIDである。したがって、接続netは、引き出し対象ピンに関して有効である。当該ネットのIDは、ネット情報記憶部D6(図9)におけるインデックス番号である。ネットに接続されないピンに対する接続netの値は「nil」とされる。形状shapeは、ピンの形状である。ピンの形状としては、矩形、円、又は空等がある。空は、空きピンであることを示す。半径rは、ピンの半径(実寸)である。半径rはx及びyのパラメータを含むが、ピンの形状が矩形である場合を考慮したものである。
ステップS4−921−2aでは、着目部品に対応するテーブルより、中心座標の行Hが「1」であり、列Vが「1」であるレコードが取得される。
続いて、セル生成部1211aは、変数iの値を2c+2に初期化する(S4−921−2b)。ここで、cはピンの列数である。したがって、2c+1は、セルの列数である。そうすると、2c+2は、セルデータ配列cellにおいて2行2列目の要素(セルデータ)に対する添え字となる。なお、添え字の起点は0(0オリジン)であるとする。続いて、セル生成部1211aは、セルデータ配列cellにおいて添え字がiである要素(セルデータ)を処理対象とする(S4−921−2c)。
続いて、セル生成部1211aは、処理対象のピン情報TInfoに基づいて、当該ピン情報TInfoに係るピン(以下、「着目ピン」という。)が引き出し対象であるか否かを判定する(S4−921−2d)。すなわち、当該ピン情報TInfoの接続netの値がnilでないか否かが判定される。
着目ピンが引き出し対象ピンである場合(S4−921−2dでYes)、セル生成部1211aは、処理対象のセルデータのセル属性(attr)に「S(引き出し対象ピン)」を記録し、ネットID(netID)に処理対象のピン情報TInfoに登録されている接続netの値を記録する(S4−921−2e)。処理対象のピン情報TInfoに係るピンが引き出し対象ピンでない場合(S4−921−2dでNo)、セル生成部1211aは、当該ピン情報TInfoに基づいて着目ピンが空きピンであるか否かを判定する(S4−921−2f)。すなち、当該ピン情報TInfoの形状shapeが「空」であるか否かが判定される。着目ピンが空きピンである場合(S4−921−2fでYes)、セル生成部1211aは、処理対象のセルデータのセル属性(attr)に「EP(空きピン)」を記録する(S4−921−2g)。処理対象のピン情報TInfoに係るピンが空きピンでない場合(S4−921−2fでNo)、セル生成部1211aは、処理対象のセルデータのセル属性(attr)に「D(ピン)」を記録する(S4−921−2h)。
ステップS4−429−e、ステップS4−921−2g、又はS4−921−2hに続いて、セル生成部1211aは、処理対象のピン情報TInfoの列番号が最大値(ピンの列数)に達しているか否かを判定する(S4−921−2i)。ピンの列数は、着目部品の部品情報PInfo(図7)のピン配列サイズcの値によって特定される。ピン情報TInfoの列番号が最大値でない場合(S4−921−2iでNo)、セル生成部1211aは、ピン列において東側に1列隣のピンに係るピン情報TInfo(すなわち、中心座標の列Vの値が1つ大きいピン情報TInfo)を処理対象とする(S4−921−2j)。また、セル生成部1211aは、変数iに2を加算する(S4−921−2k)。すなわち、処理対象のセルデータがセル列において2列分東側にずらされる。
一方、ピン情報TInfoの列番号が最大値である場合(S4−921−2iでNo)、セル生成部1211aは、当該ピン情報TInfoの行番号が最大値(ピンの行数)に達しているか否かを判定する(1−1−2l)。ピンの行数は、着目部品の部品情報PInfo(図7)のピン配行サイズrの値によって特定される。ピン情報TInfoの行番号が最大値でない場合(S4−921−2lでNo)、セル生成部1211aは、次のピン行(南側の行)において先頭のピンに対応するピン情報TInfoを処理対象とする(S4−921−2m)。また、セル生成部1211aは、変数iに2c+4を加算する(S4−921−2k)。すなわち、セル行列において南側に2行先(すなわち、次の偶数行)の2列目のセルに対応するセルデータが処理対象とされる。
ステップS4−921−2k又はステップS4−921−2nに続いて、次の偶数行偶数列のセル(セルデータ)についてステップS4−921−2c以降の処理が繰り返される。全てのピンが処理されると(S4−921−2lでYes)、図28の処理は終了する。
以上で図22のステップS4−921の説明は終了する。続いて、図22のステップS4−922の詳細について説明する。図30は、セルの容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS4−922−1において、セル容量算出部1211bは、水平方向(東西方向)に隣接するピン間の配線容量を計算し、V属性のセルデータ(セル属性の値が「V」のセルデータ)の容量(cap)に計算結果を記録する。続いて、セル容量算出部1211bは、垂直方向(南北方向)に隣接するピン間の配線容量を計算し、H属性のセルデータ(セル属性の容量に計算結果を記録する(S4−922−2)。続いて、セル容量算出部1211bは、対角ピン間の配線容量を計算し、SB属性のセルデータの容量に計算結果を記録する(S4−922−3)。続いて、セル容量算出部1211bは、空きピンの配線容量を計算し、EP属性のセルデータの容量に計算結果を記録する(S4−922−4)。続いて、セル容量算出部1211bは、D属性のセルデータの容量に0(ゼロ)を記録する(S4−922−5)。続いて、セル容量算出部1211bは、全てのセルデータの容量(cap)の値を当初容量(cap2)に転記する(退避しておく)(S4−922−6)。
ところで、各セルの容量の算出には、図31に示されるような配線ルールが利用される。配線ルールは、図31に示されるパラメータによって規定される。
図31は、配線ルールを規定するパラメータを説明するための図である。同図において、円はピンを示す。また、水平方向の2本の線は配線を示す。同図に示されるように配線ルールは、lx、ly、VR、SV、SW、及びSS等のパラメータによって規定される。
lxは、ピンの水平方向の中心間距離である。lyは、ピンの垂直方向の中心間距離である。VRは、ピンの半径である。SVは、配線(ネット)とピンの間隔である。SWは、配線の幅(太さ)である。SSは、配線と配線との間隔である。
なお、lx及びlyには、着目部品の部品情報PInfo(図7)のピンピッチ(lx、ly)の値が適用される。VRには、着目部品に対するピン情報TInfo(図29)の半径rの値が適用される。本実施の形態では、便宜上、同一部品における全てのピンの半径rの値は同じであるとする。SWには、配線幅情報WRule(図10)において、着目層Lに対する線幅が適用される。本実施の形態では、便宜上、同一層における全ての線幅は同じであるとする。SV及びSSには、間隙ルール情報記憶部D8に記録されている値が適用される。
図32は、間隙ルール情報記憶部の構成例を示す図である。同図に示されるように、間隙ルール情報記憶部D8には、間隙ルール情報CRuleとして、層ごとに、間隙値(実寸値)が記録されている。間隙値は、配線とピンとの間の値と、配線間の値とを含む、したがって、着目層Lに対する間隙ルール情報CRuleにおいて、配線とピンとの間の間隙値が、図31のSVに適用される。また、配線間の間隙値が図31のSSに適用される。
図31に示したパラメータを利用して、図30の各ステップの詳細について説明する。なお、図30における処理は、予め実行されていてもよい。この場合、当該処理の実行結果として得られる値(各ボトルネック箇所に応じた容量)が配線ルールとして記録されていればよい。
まず、ステップS4−922−1の詳細について説明する。図33は、水平方向に隣接するピン間の配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS4−922−1Aにおいて、セル容量算出部1211bは、d=lx−2×(VR+SV)を計算する。計算結果dは、水平方向のピン間において配線に利用可能な最大距離である。続いて、セル容量算出部1211bは、dが配線の幅SW以上か否かを判定する(S4−922−1B)。dが配線の幅SW以上である場合(S4−922−1BでYes)、セル容量算出部1211bは、d=d−SWを計算し、続いて、capV=1+floor(d/(SS+SW))を計算する(S4−922−1C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capV=1+floor(d/(SS+SW))の計算結果capVは、水平方向のピン間における配線可能数を示す。なお、floor関数は、引数とされた数値の最大の整数値を計算する関数である。
一方、dが配線の幅SW未満である場合(S4−922−1BでNo)、セル容量算出部1211bは、capVの値を0とする(S4−922−1D)。ステップS4−922−1C又はS4−922−1Dに続いて、セル容量算出部1211bは、capVの値を全てのV属性のセルデータの容量(cap)に記録する(S4−922−1E)。
なお、ステップS4−922−2については、図33より自明であるためその説明は省略する。すなわち、図33におけるlxをlyに置き換えて、capVの値をH属性のセルデータの容量に記録すればよい。
続いて、ステップS4−922−3の詳細について説明する。図34は、対角ピン間の配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS4−922−3Aにおいて、セル容量算出部1211bは、L=min(lx,ly)を計算し、続いて、d=L×√2−2×(VR+SV)を計算する。L=min(lx,ly)の計算結果Lは、lxとlyとの最小値である。d=L×√2−2×(VR+SV)の計算結果は、対角ピン間において配線に利用可能な最大距離である。
続いて、セル容量算出部1211bは、dが配線の幅SW以上か否かを判定する(S4−922−3B)。dが配線の幅SW以上である場合(S4−922−3BでYes)、セル容量算出部1211bは、d=d−SWを計算し、続いて、capSB=1+floor(d/(SS+SW))を計算する(S4−922−3C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capSB=1+floor(d/(SS+SW))の計算結果capSBは、対角ピン間における配線可能数を示す。
一方、dが配線の幅SW未満である場合(S4−922−3BでNo)、セル容量算出部1211bは、capSBの値を0とする(S4−922−3D)。ステップS4−922−3C又はS4−922−3Dに続いて、セル容量算出部1211bは、capSBの値を全てのSB属性のセルデータの容量(cap)に記録する(S4−922−3E)。
続いて、ステップS4−922−4の詳細について説明する。図35は、空きピンの配線容量の算出処理の処理手順を説明するためのフローチャートである。
ステップS4−922−4Aにおいて、セル容量算出部1211bは、d=2×VRを計算する。d=2×VRの計算結果dは、ピンの直径である。続いて、セル容量算出部1211bは、dが配線の幅SW以上か否かを判定する(S4−922−4B)。dが配線の幅SW以上である場合(S4−922−4BでYes)、セル容量算出部1211bは、d=d−SWを計算し、続いて、capEP=1+floor(d/(SS+SW))を計算する(S4−922−4C)。d=d−SWの計算結果dは、1本の配線によって余った距離を示す。また、capEP=1+floor(d/(SS+SW))の計算結果capEPは、空きピンにおける配線可能数を示す。
一方、dが配線の幅SW未満である場合(S4−922−4BでNo)、セル容量算出部1211bは、capEPの値を0とする(S4−922−4D)。ステップS4−922−4C又はS4−922−4Dに続いて、セル容量算出部1211bは、capEPの値を全てのEP属性のセルデータの容量(cap)に記録する(S4−922−4E)。
なお、一つの部品上においてピンの形状(半径等)が均一で無い場合、図33又は図34等の処理において、処理対象とされるセルごとに、当該セル関係するピンの形状を用いて図33、図34、又は図35等の処理が実行されればよい。
以上で図22のステップS4−922の説明は終了する。続いて、図22のステップS4−923の詳細について説明する。図36は、ノードの生成処理の処理手順を説明するためのフローチャートである。
ステップS4−923−1において、ノード生成部1211cは、セル数×2+2個の要素を有するノードデータの配列(ノードデータ配列v)を補助記憶装置102に生成する。ノードデータ配列vは、各セルに2個ずつのノードデータと、湧き出しノードS及び流入ノードTのそれぞれのノードデータとを格納するための配列である。なお、ノードデータ配列vの最初の要素(v[0])は、湧き出しノードSに対応する。また、最後の要素(v[vertexNum−1])は、流入ノードTに対応する。vertexNumは、ノードデータ配列の要素数である。
続いて、ノード生成部1211cは、ノードデータ配列の最初の要素及び最後の要素を除く全てのノードデータを各セルデータに順番に2個ずつ割り当て、ノードデータとセルデータとの間に双方向の関連付けを記録する(S4−923−2)。すなわち、各セルデータの入り口ノードのノードID(iN)と出口ノードのノードID(oN)のそれぞれに、当該セルデータに割り当てられた二つのノードデータの一方のノードIDと他方のノードIDとを記録する。また、セルデータに割り当てられたノードデータのオーナーセルのセルID(cellID)に当該セルデータのセルIDを記録する。なお、ノードIDは、ノードデータ配列vにおける添え字である。セルIDは、セルデータ配列cellにおける添え字である。
続いて、ノード生成部1211cは、ノードデータ配列vの最初の要素及び最後の要素を除く全てのノードデータの相棒ノードID(bros)に相棒ノード(同一セルに割り当てられた他方のノード)のノードデータのノードIDを記録する(S4−923−3)。
続いて、ノード生成部1211cは、各ノードデータのメンバ変数に初期値を記録する(S4−923−4)。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。NULLIDは、データが無いことを示すIDである。また、最短経路長(dist)に0を記録する。また、入り口ノードとして割り当てられたノードデータのノード属性(attr)に「in」を記録し、出口ノードとして割り当てられたノードデータのノード属性(attr)に「out」を記録する。また、探索ソースフラグ(sFlag)、探索ターゲットフラグ(tFlag)のそれぞれにfalseを記録する。
以上で図22のステップS4−923の説明は終了する。続いて、図22のステップS4−924の詳細について説明する。図37は、湧き出しノード及び流入ノードの生成処理の処理手順を説明するためのフローチャートである。
ステップS4−924−1において、ノード生成部1211cは、湧き出しノードSに対応するノードデータ(ノードデータ配列v[0])の各メンバ変数に初期値を記録する。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。また、最短経路長(dist)に0を記録する。また、ノード属性(attr)にoutを記録する。また、探索ソースフラグ(sFlag)にtrueを記録し、探索ターゲットフラグ(tFlag)にfalseを記録する。
続いて、ノード生成部1211cは、流入ノードTに対応するノードデータ(ノードデータ配列v[vertexNum−1])の各メンバ変数に初期値を記録する(S4−924−2)。具体的には、ラベル伝播元ノードID(pID)にNULLIDを記録する。また、最短経路長(dist)にdistMaxを記録する。distMaxは、経路探索における経路長の最大値である。また、ノード属性(attr)にinを記録する。また、探索ソースフラグ(sFlag)にfalseを記録し、探索ターゲットフラグ(tFlag)にtrueを記録する。
以上で図22のステップS4−924の説明は終了する。続いて、図22のステップS4−925の詳細について説明する。図38は、有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−1において、有向枝生成部1211dは、全てのセルについて入り口ノードから出口ノードへの有向枝を生成する。
図39は、セルの入り口ノードから出口ノードへの有向枝を示す図である。同図では、便宜上9個のセルが示されている。各セルには、入り口ノードを示す点から出口ノードを示す点への矢印が記されている。当該矢印が、入り口ノードから出口ノードへの有向枝を示す。
続いて、有向枝生成部1211dは、隣接するセル間で(セル間を跨いで)、出口ノードから入り口ノードへの有向枝を相互に生成する(S4−925−2)。
続いて、図38のステップS4−925−1の詳細について説明する。図40は、セルの入り口ノードから出口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−1Aにおいて、有向枝生成部1211dは、変数cellIDMaxにセルの個数−1を代入する。また、有向枝生成部1211dは、変数iを0で初期化する。ここで、cellIDMaxは、セルIDの最大値(すなわち、セルデータ配列cellの添え字の最大値)を示す。また、変数iは、セルデータ配列cellにおいて、処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部1211dは、枝データeをメモリ装置103に一つ生成し、枝データのメンバ変数に初期値を記録する(S4−925−1B)。
図41は、枝データの構成例を示す図である。同図において枝データは、始点ノードID(sN)、終点ノードID(eN)、枝の長さ(eLen)、容量(cap)、フロー(flow)、及び残余(res)等のメンバ変数(データ項目)を有する。
始点ノードID(sN)は、枝データが対応する有向枝の始点に位置するノードのノードIDである。終点ノードID(eN)は、枝データが対応する有向枝の終点に位置するノードのノードIDである。枝の長(eLen)さは、有向枝の長さである。本実施の形態において、全ての有向枝は同じ長さ(1)を有する。容量(cap)は、有向枝の容量である。有向枝の容量は、経路探索において有向枝を経路に割り当てることが可能な回数の最大値を示す。フロー(flow)は、有向枝が経路に割り当てられた(経路に使用された)回数である。残余(res)は、有向枝を経路に割り当てられる残りの回数を示す。すなわち、res=cap−flowの関係を有する。
ステップS4−925−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)の値が記録される。
続いて、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の相棒ノードとの有向枝(eBros)に枝データeを記録する(S4−925−1C)。続いて、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の相棒ノードとの有向枝(eBros)に枝データeを記録する(S4−925−1D)。ステップS4−925−1C及びS4−925−1Dによって、処理対象のセルに属する二つのノードのノードデータのそれぞれに、他方のノード(相棒ノード)との有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、iの値をインクリメントする(S4−925−1E)。続いて、有向枝生成部1211dは、iの値がcellMaxに達したか否か、すなわち、全てのセルデータについて処理が完了したか否かを判定する(S4−925−1F)。iの値がcellMaxに達していない場合(S4−925−1FでNo)、有向枝生成部1211dは、次のセルデータを処理対象としてステップS4−925−1B以降を繰り返す。iの値がcellMaxに達した場合(S4−925−1FでNo)、有向枝生成部1211dは、図40の処理を終了させる。その結果、全てのセル内の入り口ノードから出口ノードへの有向枝が生成される(図39参照)。
続いて、図38のステップS4−925−2の詳細について説明する。図42は、隣接セル間の出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−21において、有向枝生成部1211dは、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝を相互に生成する。
図43は、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝を示す図である。同図に示されるように、ステップS4−925−21では、東側のセルの出口ノードから西側のセルの入り口ノードへの有向枝と、西側のセルの出口ノードから東側のセルの入り口ノードへの有向枝とが生成される。
続いて、有向枝生成部1211dは、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝を相互に生成する(S4−925−22)。
図44は、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝を示す図である。同図に示されるように、ステップS4−925−22では、南側のセルの出口ノードから北側のセルの入り口ノードへの有向枝と、北側のセルの出口ノードから南側のセルの入り口ノードへの有向枝とが生成される。
続いて、有向枝生成部1211dは、SB属性のセル(対角ピン間のセル)に属するノードについて、斜め方向(北東方向、北西方向、南東方向、又は南西方向)に隣接するセル(斜め隣接セル)に属するノードとの間に有向枝を相互に生成する(S4−925−23)。
図45は、斜め隣接セルのノード間の有向枝を示す図である。同図に示されるように、ステップS4−925−23では、SBセルの出口ノードから全ての斜め隣接セルの入り口ノードへの有向枝と、当該全ての斜め隣接セルの出口ノードからSBセルの入り口ノードへの有向枝とが生成される。
続いて、図42のステップS4−925−21の詳細について説明する。図46は、東西方向に隣接するセルの出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−21Aにおいて、有向枝生成部1211dは、変数colMaxに列方向のセルの数を、変数rowMaxに行方向のセルの数を代入する。また、有向枝生成部1211dは、変数iと変数jとをそれぞれ0で初期化する。変数iは、処理対象とされる東西に隣接する二つのセルのうち、西側のセルの列方向へのオフセット値として利用される。変数jは、処理対象とされる東西に隣接する二つのセルの行方向のオフセット値として利用される。
続いて、有向枝生成部1211dは、w_cell_id=colMax×j+iを計算し、更に、e_cell_id=w_cell_id+1を計算する(S4−925−21B)。w_cell_idは、セルデータ配列cellにおいて、処理対象とされる西側のセル(西セル)に対応する要素(セルデータ)に対する添え字である。また、e_cell_idは、処理対象とされる東側のセル(東セル)に対応する要素(セルデータ)に対する添え字である。なお、最初は、西セルは、1行1列目のセルであり、東セルは1行2列目のセルである。
続いて、有向枝生成部1211dは、西セルの出口ノードから東セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−925−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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の東隣セルのノードとの有向枝(eE)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の西隣セルのノードとの有向枝(eW)に枝データeを記録する。これによって、東セルの出口ノードのノードデータと西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、東セルの出口ノードから西セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−925−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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の西隣セルのノードとの有向枝(eW)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の東隣セルのノードとの有向枝(eE)に枝データeを記録する。これによって、西セルの出口ノードのノードデータと東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、変数iをインクリメントする(S4−925−21E)。すなわち、処理対象とされる東西に隣接する二つのセルがセル行列において東側に1列分ずらされる。続いて、有向枝生成部1211dは、変数iの値がcolMax−1に達したか否か、すなわち、処理対象とされる西セルがセル行列の東端に達したか否かを判定する(S4−925−21F)。変数iの値がcolMax−1に達していない場合(S4−925−21FでNo)、有向枝生成部1211dは、東側に一つずれた東西の隣接セルを処理対象としてステップS4−925−21B以降の処理を実行する。
変数iの値がcolMax−1に達した場合(S4−925−21FでYes)、有向枝生成部1211dは、変数jの値をインクリメントする(S4−925−21G)。すなわち、処理対象とされる東西に隣接する二つのセルがセル行列において南側に1行分ずらされる。続いて、有向枝生成部1211dは、変数jの値がrowMax−1以下であるか否か、すなわち、処理対象とされるセルがセル行列の南端に達していないか否かを判定する(S4−925−21H)。変数jの値がrowMax−1以下である場合(S4−925−21HでYes)、有向枝生成部1211dは、変数iの値を0にし(S4−925−21I)、ステップS4−925−21B以降の処理を繰り返す。変数iの値を0にすることにより、処理対象とされる西セルがセル行列における西端に移動される。一方、変数jの値がrowMax−1を超える場合(S4−925−21HでNo)、有向枝生成部1211dは、図46の処理を終了させる。図46の処理結果は、図43に示した通りである。
続いて、図42のステップS4−925−22の詳細について説明する。図47は、南北方向に隣接するセルの出口ノードから入り口ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−22Aにおいて、有向枝生成部1211dは、変数colMaxに列方向のセルの数を、変数rowMaxに行方向のセルの数を代入する。また、有向枝生成部1211dは、変数iと変数jとをそれぞれ0で初期化する。変数iは、処理対象とされる南北に隣接する二つのセルの列方向のオフセット値として利用される。
変数jは、処理対象とされる南北に隣接する二つのセルのうち、北側のセルの行方向へのオフセット値として利用される。
続いて、有向枝生成部1211dは、n_cell_id=colMax×j+iを計算し、更に、s_cell_id=n_cell_id+colMaxを計算する(S4−925−22B)。n_cell_idは、セルデータ配列cellにおいて、処理対象とされる北側のセル(北セル)に対応する要素(セルデータ)に対する添え字である。また、s_cell_idは、処理対象とされる南側のセル(南セル)に対応する要素(セルデータ)に対する添え字である。なお、最初は、北セルは、1行1列目のセルであり、南セルは2行1列目のセルである。
続いて、有向枝生成部1211dは、北セルの出口ノードから南セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−925−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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南隣セルのノードとの有向枝(eS)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北隣セルのノードとの有向枝(eN)に枝データeを記録する。これによって、北セルの出口ノードのノードデータと南セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、南セルの出口ノードから北セルの入り口ノードへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−925−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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北隣セルのノードとの有向枝(eN)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南隣セルのノードとの有向枝(eS)に枝データeを記録する。これによって、南セルの出口ノードのノードデータと北セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、変数jをインクリメントする(S4−925−22E)。すなわち、処理対象とされる南北に隣接する二つのセルがセル行列において南側に1行分ずらされる。続いて、有向枝生成部1211dは、変数jの値がrowMax−1に達したか否か、すなわち、処理対象とされる北セルがセル行列の南端に達したか否かを判定する(S4−925−22F)。変数jの値がrowMax−1に達していない場合(S4−925−22FでNo)、有向枝生成部1211dは、南側に一つずれた南北の隣接セルを処理対象としてステップS4−925−22B以降の処理を実行する。
変数jの値がrowMax−1に達した場合(S4−925−22FでYes)、有向枝生成部1211dは、変数iの値をインクリメントする(S4−925−22G)。すなわち、処理対象とされる南北に隣接する二つのセルがセル行列において東側に1列分ずらされる。続いて、有向枝生成部1211dは、変数iの値がcolMax−1以下であるか否か、すなわち、処理対象とされるセルがセル行列の東端に達していないか否かを判定する(S4−925−22H)。変数iの値がcolMax−1以下である場合(S4−925−22HでYes)、有向枝生成部1211dは、変数jの値を0にし(S4−925−22I)、ステップS4−925−22B以降の処理を繰り返す。変数jの値を0にすることにより、処理対象とされる北セルがセル行列における北端に移動される。一方、変数iの値がcolMax−1を超える場合(S4−925−22HでNo)、有向枝生成部1211dは、図47の処理を終了させる。図47の処理結果は、図44に示した通りである。
続いて、図42のステップS4−925−23の詳細について説明する。図48は、斜め隣接セルのノード間の有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−925−23Aにおいて、有向枝生成部1211dは、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。続いて、有向枝生成部1211dは、変数iに初期値0を代入する(S4−925−23B)。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、有向枝生成部1211dは、処理対象のセルデータ(セルデータ配列cell[i])のセル属性(attr)の値が「SB(対角ピン間)」であるか否かを判定する(S4−925−23C)。処理対象のセルデータのセル属性の値がSBの場合(S4−925−23CでYes)、有向枝生成部1211dは、当該セルデータの行番号(r)が1より大きいか否かを判定することにより、当該セルデータのセルより北側にセル行が存在するか否かを判定する(S4−925−23D)。
当該セルデータのセルより北側にセル行が存在する場合(S4−925−23DでYes)、有向枝生成部1211dは、当該セルデータの列番号(c)が1より大きいか否かを判定することにより、当該セルデータのセルより西側にセル列が存在するか否かを判定する(S4−925−23E)。当該セルデータのセルより西側にセル列が存在する場合(S4−925−23EでYes)、有向枝生成部1211dは、当該セルと北西のセルとの間の有向枝を生成する(S4−925−23F)。
ステップS4−925−23F、又はステップS4−925−23EでNoの場合に続いて、有向枝生成部1211dは、処理対象のセルデータの列番号(c)がcolMax−1以下であるか否かを判定することにより、当該セルデータのセルより東側にセル列が存在するか否かを判定する(S4−925−23G)。当該セルデータのセルより東側にセル列が存在する場合(S4−925−23GでYes)、有向枝生成部1211dは、当該セルと北東のセルとの間の有向枝を生成する(S4−925−23H)。
ステップS4−925−23H、ステップS4−925−23GでNoの場合、又はステップS4−925−23DでNoの場合に続いて、有向枝生成部1211dは、処理対象のセルデータの行番号(r)がrowMax−1以下であるか否かを判定することにより、当該セルデータのセルより南側にセル行が存在するか否かを判定する(S4−925−23I)。当該セルデータのセルより南側にセル行が存在する場合(S4−925−23IでYes)、有向枝生成部1211dは、当該セルデータの列番号(c)が1より大きいか否かを判定することにより、当該セルデータのセルより西側にセル列が存在するか否かを判定する(S4−925−23J)。当該セルデータのセルより西側にセル列が存在する場合(S4−925−23JでYes)、有向枝生成部1211dは、当該セルと南西のセルとの間の有向枝を生成する(S4−925−23K)。
ステップS4−925−3K、又はステップS4−925−23JでNoの場合に続いて、有向枝生成部1211dは、処理対象のセルデータの列番号(c)がcolMax−1以下であるか否かを判定することにより、当該セルデータのセルより東側にセル列が存在するか否かを判定する(S4−925−23L)。当該セルデータのセルより東側にセル列が存在する場合(S4−925−23LでYes)、有向枝生成部1211dは、当該セルと南東のセルとの間の有向枝を生成する(S4−925−23M)。
ステップS4−925−23M、ステップS4−925−23LでNoの場合、ステップS4−925−23IでNoの場合、又はステップS4−925−23CでNoの場合に続いて、有向枝生成部1211dは、変数iをインクリメントする(S4−925−23N)。続いて、有向枝生成部1211dは、変数iの値がcellMax(セルの総数)より小さいか否かを判定することにより、未処理のセルデータが残っているか否かを判定する(S4−925−23O)。未処理のセルデータが残っている場合(S4−925−23OでYes)、有向枝生成部1211dは、次のセルデータを処理対象としてステップS4−925−23B以降を繰り返す。未処理のセルデータが残っていない場合(S4−925−23OでNo)、有向枝生成部1211dは、図48の処理を生成させる。図48の処理結果は、図45に示した通りである。
続いて、図48のステップS4−925−23Fの詳細について説明する。図49は、北西のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23F−1において、有向枝生成部1211dは、nw_cell_id=i−colMax−1を計算する。ここで、変数i及びcolMaxの値は、図48の処理においてステップS4−925−23Fが呼び出された時点の値である。したがって、計算結果nw_cell_idは、図48の処理において処理対象とされているセルデータのセルの北西のセル(北西セル)のセルデータに対する添え字である。
続いて、有向枝生成部1211dは、処理対象のセルの出口ノードから北西セルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと北西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、北西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。これによって、北西セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図48のステップS4−925−23Hの詳細について説明する。図50は、北東のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23H−1において、有向枝生成部1211dは、ne_cell_id=i−colMax+1を計算する。ここで、変数i及びcolMaxの値は、図48の処理においてステップS4−925−23Hが呼び出された時点の値である。したがって、計算結果ne_cell_idは、図48の処理において処理対象とされているセルデータのセルの北東のセル(北東セル)のセルデータに対する添え字である。
続いて、有向枝生成部1211dは、処理対象のセルの出口ノードから北東セルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと北東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、北東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。これによって、北東セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図48のステップS4−925−23Kの詳細について説明する。図51は、南西のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23K−1において、有向枝生成部1211dは、sw_cell_id=i+colMax−1を計算する。ここで、変数i及びcolMaxの値は、図48の処理においてステップS4−925−23Kが呼び出された時点の値である。したがって、計算結果sw_cell_idは、図48の処理において処理対象とされているセルデータのセルの南西のセル(南西セル)のセルデータに対する添え字である。
続いて、有向枝生成部1211dは、処理対象のセルの出口ノードから南西セルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと南西セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、南西セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北東セルのノードとの有向枝(eNE)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南西セルのノードとの有向枝(eSW)に枝データeを記録する。これによって、南西セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、図48のステップS4−925−23Mの詳細について説明する。図52は、南東のセルとの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS23M−1において、有向枝生成部1211dは、se_cell_id=i+colMax+1を計算する。ここで、変数i及びcolMaxの値は、図48の処理においてステップS4−925−23Mが呼び出された時点の値である。したがって、計算結果se_cell_idは、図48の処理において処理対象とされているセルデータのセルの南東のセル(南東セル)のセルデータに対する添え字である。
続いて、有向枝生成部1211dは、処理対象のセルの出口ノードから南東セルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。これによって、処理対象のセルの出口ノードのノードデータと南東セルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
続いて、有向枝生成部1211dは、南東セルの出口ノードから処理対象のセルの入り口ノードへの有向枝に対応させる枝データ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)の値が記録される。
また、有向枝生成部1211dは、枝データeの始点ノードのノードデータ(ノードデータ配列v[e−>sN])の北西セルのノードとの有向枝(eNW)に枝データeを記録する。また、有向枝生成部1211dは、枝データeの終点ノードのノードデータ(ノードデータ配列v[e−>eN])の南東セルのノードとの有向枝(eSE)に枝データeを記録する。これによって、南東セルの出口ノードのノードデータと処理対象のセルの入り口ノードのノードデータとのそれぞれに、他方のノードとの有向枝の枝データが登録されたことになる。
以上で図22のステップS4−925の説明は終了する。すなわち、図20のステップS4−9−2の説明は終了する。この時点のセル座標系における処理結果は、図21に示した通りである。但し、湧き出しノードSからの有効枝と、流入ノードTへの有効枝とは生成されない。
続いて、図20のステップS4−9−4(すなわち、防護壁の生成)の詳細について説明する。図53は、防護壁の意義を説明するための図である。同図において、P1は、或る部品の一部分(右上頂点を含む一部分)を示す。円は、部品に配置されたピンを示す。それぞれ、破線で囲まれた黒塗りのピン集合tg1、tg2、及びtg3は、それぞれ、同一のバスに属するネットの引き出しピンの集合を示す。したがって、同図では、3つのバスに属するネットの引き出しピンの集合が示されている。
上記において生成された有向グラフを利用して、バスごとに所属ネットの配線の引き出し経路を探索していくとき、他のバスに属するネットが接続されるピン間を通過するような経路を許容してしまうと、当該ピン間が分断されてしまう。例えば、図53では、ピン集合tg1の一つのピンより引き出されたネットn1の引き出し経路がピン集合tg2内を通過することにより、ピン集合tg2の一部のピン間を分断している。その結果、ピン間が分断されたピンからの配線の引き出しが破綻してしまう。したがって、ピン間の分断を回避するための対策が必要となる。そこで、防護壁生成部1212は、同一バスによって接続されるピン群ごとに、当該ピン間を閉鎖する防護壁を生成する。また、防護壁生成部1212は、部品の外周とバス経路が交差する部分において、バスに所属するネット数分の配線脱出口を、他のバスの引き出しに使われてしまうのを避けるために確保し、当該部分に対してピン間の防護壁と一体化された防護壁を生成する。したがって、一つの防護壁は、引き出しピン間を閉鎖する部分(以下、「ピン間閉鎖部分」という。)、配線脱出口を確保する部分(以下、「配線脱出口部分」という。)、及びピン間閉鎖部分と配線脱出光部分とを連結する部分(以下、「連結部分」という。)を含む。
或るバスの所属ネットの配線の引き出し経路の探索時において、当該バス以外のバスに対応する防護壁は有効化される。その結果、当該バスに係る引き出し経路によって他のバスのピン間が分断されてしまうのが防止される。
防護壁は、例えば、図54に示されるような形状を有する。図54は、防護壁の一例を示す図である。同図には、図13より部品PInfo[0]が抽出されている。また、部品PInfo[0]に接続される、バスB[0]〜B[5]のバス経路の一部が示されている。ここで、防護壁w0は、バスB「0」に対応する防護壁である。防護壁w1は、バスB「1」に対応する防護壁である。防護壁w2は、バスB「2」に対応する防護壁である。防護壁w3は、バスB「3」に対応する防護壁である。防護壁w4は、バスB「4」に対応する防護壁である。防護壁w5は、バスB「5」に対応する防護壁である。なお、同図には、防護壁w0について、ピン間閉鎖部分w01、配線脱出口部分w02、及び連結部分w03が示されている。各防護壁は、例えば、迷路法によって引き出しピン間等を接続することにより形成される。以下、斯かる防護壁の生成処理について説明する。
図55は、防護壁の生成処理を説明するためのフローチャートである。
ステップS4−94−1において、防護壁生成部1212は、セル座標系のセル行列の外周に位置するセルのセルデータについて、外周方向において隣接するセルのセルデータへのポインタを設定する。
図56は、セル行列の外周に位置するセルに対して外周方向に隣接するセルを説明するための図である。同図において、矢印a1は、セル行列の外周方向を示す。ステップS4−94−1では、セル行列の外周に位置する各セルのセルデータに対し、矢印a1の方向(右回り(時計回り))において、左側のセルと右側のセルとのそれぞれのセルデータの間に他方のセルデータのポインタが設定される。
続いて、防護壁生成部1212は、図20のステップS4−9−1において抽出されたバス集合BGに対するインデックスとしての変数iを0に初期化する。また、防護壁生成部1212は、バス集合BGの要素数(すなわち、着目部品及び着目層Lに係るバスの総数)を変数bMaxに代入する(S4−94−2)。
続いて、防護壁生成部1212は、バス集合BGにおいてi番目のバス(BG[i])を着目バスbPとする(S4−94―3)。続いて、防護壁生成部1212は、着目バスbPの所属ネットの着目部品側の引き出し対象ピンに対応するセルのセルデータの防護壁色(flavor)に、着目バスbPのバスIDを代入する(S4−94−4)。具体的には、着目バスbPの各所属ネットのIDが、着目バスbPのバス情報B(図8)の所属ネット群netGに基づいて特定される。続いて、着目部品の部品情報PInfoのピン情報に基づいて、着目部品のピン情報PInfoに係るテーブル(図29)が特定される。続いて、当該テーブルより、接続ネットの値が、着目バスbPの各所属ネットのIDのいずれかに一致するレコード(ピン情報TInfo)が抽出される。続いて、抽出されたレコードの行H及び列Vに基づいて、セルデータ配列cell中において、各レコードに対応するセルデータが特定される。なお、当該行H及び列Vは、ピン行列における行番号又は列番号である。したがって、ピン行列における行H及び列Vが、セル行列における行番号又は列番号に変換された後、各レコードに対応するセルデータが特定される。ここで特定されたセルデータが目的とするセルデータである。したがって、当該各セルデータの防護壁色(flavor)の値に着目バスbPのバスIDが代入される。なお、セルデータの防護壁色(flavor)に、いずれかのバスのバスIDが代入されたセルを以下「リーフセル」という。後述されるように、リーフセルは、防護壁の基礎となるセルである。ステップS4−94−4では、着目バスbPに対する防護壁のピン間閉鎖部分に関して、着目バスbPの各所属ネットの引き出しピンに対応するセルがリーフセルとして設定される。
図57は、リーフセルを説明するための図である。同図では、着目部品として部品PInfo[0]に関するセル行列が示されている。円が描画されているセルは、ピンに対応するセルであることを示す。また、同図には、バスB[0]及びバス[1]のそれぞれの一部が示されている。
同図において、セルc1〜c20は、バスB[0]に属する20本のネットのそれぞれの引き出しピンに対応するセルである。したがって、バスB[0]が着目バスbPである場合、ステップS4−94−4では、セルc1〜c20がバスB[0]に係るリーフセルとされる。すなわち、セルc1〜c20のそれぞれに対応するセルデータの防護壁色(flavor)に、バスB[0]のバスIDである0が代入される。
続いて、防護壁生成部1212は、変数iの値をインクリメントして、着目バスをバス集合BG内の次のバスとする(S4−94−5)。ステップS4−94−3〜S4−94−5は、バス集合BGに含まれる全てのバスについて実行される(S4−94−6)。
ステップS4−94−3〜S4−94−5がバス集合BGに含まれる全てのバスについて終了すると(S4−94−6でNo)、防護壁生成部1212は、続くステップS4−94−7からS4−94−15において、バス集合BGに含まれる各バスが着目部品の外周辺を横切る部分(すなわち、配線脱出口部分)に係るセル群を、リーフセルとするための処理を実行する。すなわち、防護壁の配線脱出口部分のリーフセルを設定するための処理である。
まず、ステップS4−94−7において、防護壁生成部1212は、変数iの値を再び0に初期化する。続いて、防護壁生成部1212は、バス集合BGにおいてi番目のバス(BG[i])を着目バスbPとする。また、防護壁生成部1212は、着目バスbPのバスIDを変数FLAVORに代入する。また、防護壁生成部1212は、着目バスbPのバス矩形リストsPの中で最初の矩形のバス経路矩形情報BR(図12)を着目矩形sppとする。更に、防護壁生成部1212は、変数CAPに0を代入する(S4−94−8)。変数CAPは、着目バスが着目部品の外周辺を横切る部分(配線脱出口部分)に係るセル群の容量(配線容量)の総和を記憶するための変数である。
続いて、防護壁生成部1212は、セル座標系のセル行列の外周に位置するセルの中で着目矩形sppに包含されるセルのセルデータの防護壁色(flavor)に着目バスbPのバスIDを代入し、当該セルの容量の総和を変数CAPに代入する(S4−94−9)。すなわち、着目矩形sppに包含されるセルがリーフセルとされる。ステップS4−94−9は、着目バスbPに属する全ての矩形に関して実行される(S4−94−10、S4−94−11)。なお、ステップS4−94−9からS4−94−11は、バス集合BGに含まれる一つの着目バスbPが着目部品の外周辺を横切る部分(配線脱出口部分)に係るセル群に、防護壁の印を付加するための処理である。
図57を参照して具体的に説明する。同図には、バスB[0]を構成する一部の矩形である、矩形BR[1]及びBR[2]が示されている。このうち、矩形BR[1]は、部品PInfo[0]の外周に位置するセルc21〜c27を包含している。したがって、着目バスbPがバスB[0]であり、着目矩形sppが矩形BR[1]である場合に、セルc21〜c27がバスB[0]に係るリーフセルとされる。すなわち、セルc21〜c27のそれぞれに対応するセルデータの防護壁色(flavor)に、バスB[0]のバスIDである0が代入される。また、セルc21〜c27のそれぞれに対応するセルデータの容量(cap)の総和が変数CAPに記録される。
ステップS4−94−9が、着目バスbPに属する全ての矩形について終了すると(S4−94−11でYes)、防護壁生成部1212は、変数CAPの値が着目バスbPの所属ネットの総数以上であるか否かを判定する(S4−94−12)。すなわち、着目バスbPに関する配線脱出口部分において、着目バスbPの全ての所属ネットの配線の引き出しの可否が判定される。例えば、図57において、着目バスbPがバスB[0]である場合、所属ネットの総数は20である。したがって、変数CAPの値が20以上であるか否かが判定される。
変数CAPの値が着目バスbPの所属ネットの総数以上である場合(S4−94−12でYes)、防護壁生成部1212は、変数iの値をインクリメントして、着目バスをバス集合BG内の次のバスとする(S4−94−14)。
変数CAPの値が着目バスbPの所属ネットの総数未満である場合(S4−94−12でNo)、現状のままでは着目バスbPの所属ネットを配線脱出口部分から引き出すことはできない。そこで、防護壁生成部1212は、着目バスbPの全ての所属ネットの引き出しが可能となるよう、配線脱出口部分に係るリーフセルを伸張する(追加する)ための処理を実行する(S4−94−13)。続いて、防護壁生成部1212は、変数iをインクリメントする(S4−94−14)。
図58は、配線脱出口部分に係るリーフセルの伸張を示す図である。同図では、バスB[0]の配線脱出口部分が伸張され、符号LCellによって示される部分に含まれるセルc28〜c33と、符号RCellによって示される部分に含まれるセルc34〜c39とが、バスB[0]に対するリーフセルとして追加された様子が示されている。
ステップS4−94−8からS4−94−13が、バス集合BGに含まれる全てのバスについて終了すると(S4−94−15でNo)、防護壁生成部1212は、防護壁色(flavor)の値が同じリーフセル同士を連結する経路を探索し、探索された経路に基づいて防護壁を生成する(S4−94−17)。
続いて、ステップS4−94−1の詳細について説明する。図59は、セル行列の外周に位置するセルについて右回り又は左回りに隣接セルへのポインタの設定処理を説明するためのフローチャートである。図56より明らかなように、セル行列の外周に位置する或るセルから見て右回りにおける左右の意味は、当該或るセルが北側、東側、南側、西側のいずれに位置するかによって異なる。例えば、当該或るセルが北側又は南側に位置すれば、左右方向は、東西方向となる。一方、当該或るセルが東側又は西側に位置すれば、左右方向は、南北方向となる。したがって、図59では、北側に位置するセル、東側に位置するセル、南側に位置するセル、西側に位置するセルに応じて処理手順が示されている。
ステップS4−94−1aからS4−94−1dは、北側に位置するセルに関する処理である。ステップS4−94−1aにおいて、防護壁生成部1212は、セルデータ配列cellの最初の要素(cell[0])に係るセルデータのポインタを、右回りにおいて左側のセルのセルデータを保持するための変数LCellPに代入する。当該セルデータは、1行1列に位置するセルのセルデータである。また、防護壁生成部1212は、変数LCellに係るセルのセルデータの東隣のセルポインタ(cE)を、右回りにおいて右側のセルのセルデータを保持するための変数RCellPに代入する。更に、防護壁生成部1212は、変数cMaxに、セル行列の列数を代入する。
続いて、防護壁生成部1212は、RCellPの値がNULLでなく、かつ、セルデータRCellPの列番号(c)が変数cMax以下であるか否かを判定する(S4−94−1b)。すなわち、右側のセルが東端に到達していないか否かが判定される。
RCellPの値がNULLでなく、かつ、セルデータRCellPの列番号(c)が変数cMax以下である場合(S4−94−1bでYes)、防護壁生成部1212は、左側のセルと右側のセルとを関連付ける(S4−94−1c)。すなわち、左側のセルのセルデータLCellPの右隣のセルポインタ(rLink)に、右側のセルデータのポインタ(RCellP)が代入される。また、右側のセルのセルデータRCellPの左隣のセルポインタ(lLink)に、左側のセルデータのポインタ(LCellP)が代入される。
続いて、防護壁生成部1212は、LCellPに係るセル及びRCellPに係るセルをそれぞれ東側に一つずらす(S4−94−1d)。すなわち、LCellPに、右側のセルのセルデータのポインタ(RCellP)が代入される。RCellPに、一つ東にずれた左側のセルのセルデータLCellPの東隣のセルポインタ(cE)が代入される。続いて、ステップS4−94−1b以降が繰り返される。
その後、ステップS4−94−1bにおいて、RCellPの値がNULL、又はセルデータRCellPの列番号がcMaxを超えたと判定されると(S4−94−1bでNo)、東側のセルの処理(S4−94−1e〜S4−94−1h)に進む。
ステップS4−94−1eにおいて、防護壁生成部1212は、1行目の東端に位置するセルのセルデータ(cell[cMax−1])のポインタを変数LCellPに代入する。また、防護壁生成部1212は、変数LCellに係るセルのセルデータの南隣のセルポインタ(cS)を、変数RCellPに代入する。更に、防護壁生成部1212は、変数rMaxに、セル行列の行数を代入する。
続いて、防護壁生成部1212は、RCellPの値がNULLでなく、かつ、セルデータRCellPの行番号(r)が変数rMax以下であるか否かを判定する(S4−94−1f)。すなわち、右側のセルが南端に到達していないか否かが判定される。
RCellPの値がNULLでなく、かつ、セルデータRCellPの行番号(r)が変数rMax以下である場合(S4−94−1fでYes)、防護壁生成部1212は、左側のセルと右側のセルとを関連付ける(S4−94−1g)。すなわち、左側のセルのセルデータLCellPの右隣のセルポインタ(rLink)に、右側のセルデータのポインタ(RCellP)が代入される。また、右側のセルのセルデータRCellPの左隣のセルポインタ(lLink)に、左側のセルデータのポインタ(LCellP)が代入される。
続いて、防護壁生成部1212は、LCellPに係るセル及びRCellPに係るセルをそれぞれ南側に一つずらす(S4−94−1h)。すなわち、LCellPに、右側のセルのセルデータのポインタ(RCellP)が代入される。RCellPに、一つ南にずれた左側のセルのセルデータLCellPの南隣のセルポインタ(cS)が代入される。続いて、ステップS4−94−1f以降が繰り返される。
その後、ステップS4−94−1fにおいて、RCellPの値がNULL、又はセルデータRCellPの列番号がcMaxを超えたと判定されると(S4−94−1fでNo)、南側のセルの処理(S4−94−1i〜S4−94−1l)に進む。
ステップS4−94−1iにおいて、防護壁生成部1212は、セル行列の最終行の東端に位置するセルのセルデータ(cell[rMax×cMax−1])のポインタを変数LCellPに代入する。また、防護壁生成部1212は、変数LCellに係るセルのセルデータの西隣のセルポインタ(cW)を、変数RCellPに代入する。
続いて、防護壁生成部1212は、RCellPの値がNULLでなく、かつ、セルデータRCellPの列番号(c)が1以上であるか否かを判定する(S4−94−1j)。すなわち、右側のセルが西端に到達していないか否かが判定される。
RCellPの値がNULLでなく、かつ、セルデータRCellPの列番号(c)が1以上である場合(S4−94−1jでYes)、防護壁生成部1212は、左側のセルと右側のセルとを関連付ける(S4−94−1k)。すなわち、左側のセルのセルデータLCellPの右隣のセルポインタ(rLink)に、右側のセルデータのポインタ(RCellP)が代入される。また、右側のセルのセルデータRCellPの左隣のセルポインタ(lLink)に、左側のセルデータのポインタ(LCellP)が代入される。
続いて、防護壁生成部1212は、LCellPに係るセル及びRCellPに係るセルをそれぞれ西側に一つずらす(S4−94−1l)。すなわち、LCellPに、右側のセルのセルデータのポインタ(RCellP)が代入される。RCellPに、一つ西にずれた左側のセルのセルデータLCellPの西隣のセルポインタ(cW)が代入される。続いて、ステップS4−94−1j以降が繰り返される。
その後、ステップS4−94−1jにおいて、RCellPの値がNULL、又はセルデータRCellPの列番号が0になったと判定されると(S4−94−1jでNo)、西側のセルの処理(S4−94−1m〜S4−94−1p)に進む。
ステップS4−94−1mにおいて、防護壁生成部1212は、セル行列の最終行の西端に位置するセルのセルデータ(cell[cMax×(rMax−1)])のポインタを変数LCellPに代入する。また、防護壁生成部1212は、変数LCellに係るセルのセルデータの北隣のセルポインタ(cN)を、変数RCellPに代入する。
続いて、防護壁生成部1212は、RCellPの値がNULLでなく、かつ、セルデータRCellPの行番号(r)が1以上であるか否かを判定する(S4−94−1n)。すなわち、右側のセルが北端に到達していないか否かが判定される。
RCellPの値がNULLでなく、かつ、セルデータRCellPの行番号(r)が1以上である場合(S4−94−1nでYes)、防護壁生成部1212は、左側のセルと右側のセルとを関連付ける(S4−94−1o)。すなわち、左側のセルのセルデータLCellPの右隣のセルポインタ(rLink)に、右側のセルデータのポインタ(RCellP)が代入される。また、右側のセルのセルデータRCellPの左隣のセルポインタ(lLink)に、左側のセルデータのポインタ(LCellP)が代入される。
続いて、防護壁生成部1212は、LCellPに係るセル及びRCellPに係るセルをそれぞれ北側に一つずらす(S4−94−1p)。すなわち、LCellPに、右側のセルのセルデータのポインタ(RCellP)が代入される。RCellPに、一つ北にずれた左側のセルのセルデータLCellPの北隣のセルポインタ(cN)が代入される。続いて、ステップS4−94−1n以降が繰り返される。
続いて、図55のステップS4−94−9の詳細について説明する。図60は、セル行列の外周のセルの中で着目矩形に包含されるセルをリーフセルとする処理の処理手順を説明するためのフローチャートである。
ステップS4−949−1において、防護壁生成部1212は、着目矩形sppと着目部品とは共有領域(重複部分)を有するか否かを判定する。すなわち、着目矩形sppのバス経路矩形情報BR(図12)の始点座標及び終点座標に基づいて特定される矩形と、着目部品の部品情報PInfo(図7)の部品配置座標loc及び部品サイズに基づいて特定される矩形とが共有領域(重複領域)を有するか否かが判定される。両者に共有領域が無い場合(S4−949−1でNo)、図60の処理は終了する。
両者に共有領域が有る場合(S4−949−1でYes)、防護壁生成部1212は、セル行列の北端の行、東端の列、南端の行、西端の列について、着目矩形sppに包含されるセルを探索する。
すなわち、共有領域が北端の行を含む場合(S4−999−2でYes)、防護壁生成部1212は、北端の行を探索対象とする。まず、防護壁生成部1212は、セル行列において北端の1列目に位置するセルのセルデータ(cell[0])のポインタを変数headCellに代入する。変数headCellは、探索の先頭とされるセルの識別するための変数である。また、防護壁生成部1212は、変数Sideに定数NORTHを代入する(S4−949−3)。続いて、防護壁生成部1212は、変数headCell及び変数Sideの値等を利用して、着目矩形sppに包含されるセルをリーフセルとするための処理を実行する(S4−949−4)。
共有領域が東端列を含む場合(S4−999−5でYes)、防護壁生成部1212は、東端の列を探索対象とする。まず、防護壁生成部1212は、セル行列において1行目の東端に位置するセルのセルデータ(cell[cMax−1])のポインタを変数headCellに代入する。cMaxはセル行列の列数を示す。また、防護壁生成部1212は、変数Sideに定数EASTを代入する(S4−949−6)。続いて、防護壁生成部1212は、変数headCell及び変数Sideの値等を利用して、着目矩形sppに包含されるセルをリーフセルとするための処理を実行する(S4−949−7)。
共有領域が南端列を含む場合(S4−949−8でYes)、防護壁生成部1212は、南端の行を探索対象とする。まず、防護壁生成部1212は、セル行列において南端の1列目に位置するセルのセルデータ(cell[(rMax−1)×cMax])のポインタを変数headCellに代入する。rMaxはセル行列の行数を示す。また、防護壁生成部1212は、変数Sideに定数SOUTHを代入する(S4−949−9)。続いて、防護壁生成部1212は、変数headCell及び変数Sideの値等を利用して、着目矩形sppに包含されるセルをリーフセルとするための処理を実行する(S4−949−10)。
共有領域が西端列を含む場合(S4−999−11でYes)、防護壁生成部1212は、西端の列を探索対象とする。まず、防護壁生成部1212は、セル行列において北端の1列目に位置するセルのセルデータ(cell[0])のポインタを変数headCell代入する。また、防護壁生成部1212は、変数Sideに定数WESTを代入する(S4−949−12)。続いて、防護壁生成部1212は、変数headCell及び変数Sideの値等を利用して、着目矩形sppに包含されるセルをリーフセルとするための処理を実行する(S4−949−13)。
続いて、図60のステップS4−949−4、S4−949−7、S4−949−10、又はS4−949−13において呼び出される処理について説明する。
図61は、特定の行又は列において着目矩形に包含されるセルをリーフセルとする処理の処理手順を説明するためのフローチャートである。
ステップS4−949−A1において、防護壁生成部1212は、着目矩形sppに包含されるか否かについて検査対象とするセルを走査するための変数cellPに、変数headCellPの値(セルデータのポインタ)を代入する。変数headCellPの値は、図60において代入されている。
続いて、防護壁生成部1212は、セルデータcellPの代表位置(x座標、y座標)が、着目矩形sppに包含されるか否かを判定する(S4−949−A2)。代表位置の座標値は、着目部品上の相対座標系における座標値である。一方、着目矩形の始点座標及び終点座標は、配線領域A上の実寸座標系における値である。したがって、当該代表位置の座標値を、着目部品の部品情報PInfoの部品座標情報locに基づいて配線領域A上の実寸座標系の座標値に変換すれば、当該代表位置が着目矩形sppに包含されるか否かは容易に判定可能である。
セルデータcellPの代表位置が着目矩形に包含される場合(S4−949−A2でYes)、防護壁生成部1212は、フラグ変数capSkipFの値をFALSEに初期化し、フラグ変数overlapFの値をFALSEに初期化する(S4−949−A3)。capSkipFは、変数CAPへの容量(セルデータcellPの容量(cap))の加算をスキップするか否かを示すフラグ変数である。変数CAPは、図55のステップS4−94−8において定義された、着目バスbPの配線脱出口部分の容量を記憶するための変数である。overlapFは、セルデータcellPに係るセルが、他のバスのリーフセルであるか否かを示すフラグである。
続いて、防護壁生成部1212は、セルデータcellPの防護壁色(flavor)の値に応じて、フラグ変数等の値を変化させる(S4−999−A4)。具体的には、セルデータcellPの防護壁色(flavor)の値が変数FLAVORと同じであれば、防護壁生成部1212は、capSkipFの値をTRUEとする。変数FLAVORの値は、図55のステップS4−94−8に示されるように、着目バスbPのバスIDである。したがって、セルデータcellPの防護壁色(flavor)の値が変数FLAVORと同じであるということは、セルデータcellPに係るセルは、既に着目バスbPに対するリーフセル(防護壁の元となるセル)とされていることを意味する。したがって、セルデータcellPの容量(cap)は、既に変数CAPに加算されているはずである。よって、変数CAPへの容量の重複加算を避けるためcapSkipFの値がTRUEとされるのである。
一方、セルデータcellPの防護壁色(flavor)の値が未設定(−1)の場合であって、かつ、セルデータcellPの容量(cap)が0より大きい場合、防護壁生成部1212は、セルデータcellPの防護壁色(flavor)に変数FLAVORの値を代入する。すなわち、セルデータcellPに係るセルが、着目バスbPに対するリーフセルとされる。
また、上記以外の場合、防護壁生成部1212は、overlapFの値をTRUEとする。この場合は、セルデータcellPに係るセルは、既に着目バスbP以外のバスのリーフセルとされているからである。
続いて、防護壁生成部1212は、overlapFの値がTRUEであるか否かを判定する(S4−949−A5)。overlapFの値がTRUEである場合、図61の処理は終了する。
一方、overlapFの値がFALSEであり(S4−949−A5でYes)、capSkipFの値がFALSEである場合(S4−949−A6でYes)、防護壁生成部1212は、セルデータcellPに係るセルの一つ内側のセルのセルデータのポインタを変数ICellPに代入する(S4−949−A7)。ここで、一つ内側のセルが処理対象とされるのは、本実施の形態のセル行列において外周にはピンは配置されていないからである。すなわち、着目バスbPの配線脱出口部分において外周のセルの容量を積算したのでは、当該配線脱出口部分全体の正しい容量を得ることはできない。一つ内側の周のセルに対応するピンによって配線は制限されるからである。そこで、一つ内側のセルを処理対象とし、当該内側のセルの容量を積算することにより、当該配線脱出口部分全体の容量を得ようというわけである。
なお、「内側」の方向は、セルデータcellPに係るセルの位置に応じて異なる。したがって、防護壁生成部1212は、図60において設定された変数Sideの値に応じて、ICellPへの代入元を変化させる。具体的には、変数Sideの値がSOUTHである場合(処理対象が南端行である場合)、セルデータcellPの北隣のセルポインタ(cN)がICellPに代入される。変数Sideの値がWESTである場合(処理対象が西端列である場合)、セルデータcellPの東隣のセルポインタ(cE)がICellPに代入される。変数Sideの値がNORTHである場合(処理対象が北端行である場合)、セルデータcellPの南隣のセルポインタ(cS)がICellPに代入される。変数Sideの値がEASTである場合(処理対象が東端列である場合)、セルデータcellPの西隣のセルポインタ(cW)がICellPに代入される。
続いて、防護壁生成部1212は、セルデータICellPの内容に応じて、変数CAPの値を更新する(S4−949−A8)。
具体的には、セルデータlCellPのセル属性(attr)の値がV(水平ピン間)、H(垂直ピン間)、又はEP(空きピン)である場合、防護壁生成部1212は、セルデータlCellPの容量(cap)の値を変数CAPに加算する。すなわち、セルデータlCellPに係るセルが配線可能なセルである場合は、当該セルの容量が変数CAPに加算される。
一方、セルデータICellPの防護壁色(flavor)の値が変数FLAVORの値と一致し、かつ、セルデータICellPの容量確認済みフラグ(pinCapCheckedF)の値がFALSEである場合、防護壁生成部1212は、変数CAPに1を加算する。この場合、セルデータICellPに係るセルは、引き出しピンに相当する。したがって、当該引き出しピンより1本のネットが引き出される。よって、変数CAPに1が加算されるのである。また、この場合、防護壁生成部1212は、セルデータICellPの容量確認済みフラグ(pinCapCheckedF)にTRUEを代入する。当該引き出しピンに係るセルについて、容量(cap)が重複して加算されるのを防止するためのである。
続いて、防護壁生成部1212は、変数cellPの値を、次のセルのセルデータのポインタに更新する(S4−949−A9)。具体的には、変数Sideの値がSOUTHの場合、セルデータcellPの東隣のセルポインタ(cE)がcellPに代入される。変数Sideの値がWESTの場合、セルデータcellPの南隣のセルポインタ(cS)がcellPに代入される。変数Sideの値がNORTHの場合、セルデータcellPの東隣のセルポインタ(cE)がcellPに代入される。変数Sideの値がEASTの場合、セルデータcellPの南隣のセルポインタ(cS)がcellPに代入される。
上記処理手順は、ステップS4−949−A10において、変数cellPの値がNULLであるか、又はセルデータcellPの容量(cap)の値が0以下であると判定されるまで繰り返される(S4−949−A10)。すなわち、処理対象の行又は列において全てのセルが走査されるか、又は配線できない(配線脱出口となり得ない)セルが検出されるまで繰り返される。
一方、ステップS4−949−A2において、セルデータcellPの代表位置(x座標、y座標)が、着目矩形sppに包含されないと判定された場合(S4−949−A2でNo)、ステップS4−949−A3〜ステップS4−949−A8は実行されずに、走査対象のセルがずらされる(ステップS4−949−A9)。
また、ステップS4−949−A6において、capSkipFの値がTRUEの場合(S4−949−A6でYes)、ステップS4−949−A7及びS4−949−A8は実行されずに走査対象のセルがずらされる(ステップS4−949−A9)。
続いて、図55のステップS4−94−13の詳細について説明する。図62は、着目バスに関する配線脱出口部分のリーフセルの伸張処理を説明するためのフローチャートである。
ステップS4−9413−1において、防護壁生成部1212は、各変数の値を初期化する。すなわち、処理対象のセルを走査するための変数cellPに、先頭のセルデータ(cell[0])のポインタが代入される。セルデータの走査回数を記憶するための変数loopCountが0に初期化される。セルデータの走査回数の最大値を記憶する変数LoopMaxに、セル行列の外周のセルの総数が代入される。着目バスbPに対するリーフセルが見つかったか否かを記憶する変数FOUNDにFALSEが代入される。また、変数LeftP及び変数RightPのそれぞれにNULLが代入される。変数LeftPは、セル行列の外周に存在する、着目バスbPに対するリーフセル(すなわち、着目バスbPの配線脱出口部分に係るリーフセル)の中で、左端のリーフセルのセルデータへのポインタを記憶するための変数である。変数RightPは、着目バスbPの配線脱出口部分に係るリーフセルの中で、右端のリーフセルのセルデータへのポインタを記憶するための変数である。
続いて、防護壁生成部1212は、防護壁色(flavor)の値が変数FLAVORの値(すなわち、着目バスbPのバスID)と一致するセルデータに係るセルを、セル行列の外周上において探索する(S4−9413−2)。具体的には、セルデータcellPの防護壁色(flavor)の値が変数FLAVORの値と一致する場合、防護壁生成部1212は、変数FOUNDにTRUEを代入する。セルデータcellPの防護壁色(flavor)の値が変数FLAVORの値と一致しない場合、防護壁生成部1212は、変数cellPに、セルデータcellPの右隣のセルポインタ(rLink)を代入し、変数LoopCountの値をインクリメントする。続いて、防護壁生成部1212は、改めてセルデータcellPの防護壁色(flavor)の値と変数FLAVORの値とを比較する。セルデータcellPの防護壁色(flavor)の値が変数FLAVORの値と一致した場合、又は変数LoopCountの値がLoopMaxの値に達した場合、防護壁生成部1212は、ステップS4−9413−3に進む。なお、変数LoopCountの値がLoopMaxの値に達した場合とは、外周の全てのセルに係るセルデータが走査された場合である。
ステップS4−9413−2において、防護壁生成部1212は、変数FOUNDの値がTRUEであるか否かを判定する。変数FOUNDの値がFALSEである場合(S4−9413−3でNo)、図62の処理は終了する。変数FLAVORの値と一致する防護壁色(flavor)を有するセルデータが無ければ、目的とするリーフセルの伸張は不可能だからである。
変数FOUNDの値がTRUEである場合、すなわち、変数FLAVORの値と一致する防護壁色(flavor)を有するセルデータが見つかった場合(S4−9413−3でYes)、防護壁生成部1212は、変数LeftP及び変数RightPのそれぞれに当該セルデータのポインタ(cellP)を代入する(S4−9413−4)。すなわち、最初に見つかったリーフセルが、初期状態において、着目バスbPの配線脱出口部分の左端及び右端とされる。防護壁生成部1212は、また、変数LoopCountの値を0に初期化する。
続いて、防護壁生成部1212は、見つかったリーフセルを起点として、着目バスbPの配線脱出口部分のリーフセルの左端をセル行列の外周の左回りに探索する(S4−9413−5)。セル行列の外周の左回りとは、図56の矢印a1の反対方向である。
具体的には、防護壁生成部1212は、セルデータLeftPの左隣のセルポインタ(lLink)に係るセルデータの防護壁色(flavor)の値が変数FLAVORの値と一致しなくなるまで、変数LeftPの値を左隣のセルポインタ(lLink)によって更新する。また、変数LoopCountの値がインクリメントされる。すなわち、着目バスbPのリーフセルの左端まで、走査対象のセルが左に移動される。セルデータLeftPの左隣のセルポインタ(lLink)に係るセルデータの防護壁色(flavor)の値が変数FLAVORの値と一致しなくなった場合、又は変数LoopCountの値が、変数LoopMaxの値に達した場合、防護壁生成部1212は、ステップS4−9413−5の処理を抜ける。変数LoopCountの値が、変数LoopMaxの値に達した場合とは、セル行列の外周の全てのセルが走査された場合である。
続いて、防護壁生成部1212は、変数LoopCountの値を0に初期化する(S4−9413−6)。続いて、防護壁生成部1212は、ステップS4−9413−2において見つかったリーフセルを起点として、着目バスbPの配線脱出口部分のリーフセルの右端をセル行列の外周の右回りに探索する(S4−9413−7)。
具体的には、防護壁生成部1212は、セルデータRightPの右隣のセルポインタ(rLink)に係るセルデータの防護壁色(flavor)の値が変数FLAVORの値と一致しなくなるまで、変数RightPの値を右隣のセルポインタ(rLink)によって更新する。また、変数LoopCountの値がインクリメントされる。すなわち、着目バスbPのリーフセルの右端まで、走査対象のセルが右に移動される。セルデータRightPの右隣のセルポインタ(rLink)に係るセルデータの防護壁色(flavor)の値が変数FLAVORの値と一致しなくなった場合、又は変数LoopCountの値が、変数LoopMaxの値に達した場合、防護壁生成部1212は、ステップS4−9413−7の処理を抜ける。
続いて、防護壁生成部1212は、着目バスbPの配線脱出口部分のリーフセルを伸張するか否かを示すフラグ変数の値を初期化する(S4−9413−8)。具体的には、左回り(左方向)に伸張するか否かを示すフラグ変数L_ExpandFにTRUEが代入される。また、右回り(右方向)に伸張するか否かを示すフラグ変数R_ExpandFにTRUEが代入される。すなわち、最初は、両方向が伸張方向の候補とされる。
続いて、防護壁生成部1212は、L_ExpandFの値がTRUEであるか否かを判定する(S4−9413−9)。L_ExpandFの値がTRUEでない場合(ステップS4−9413−9でNo)、ステップS4−9413−12に進む。L_ExpandFの値がTRUEである場合(S4−9413−9でYes)、防護壁生成部1212は、着目バスbPの配線脱出口部分について左側へのリーフセルの伸張を試行する(S4−9413−10)。当該ステップの詳細については後述する。伸張に成功した場合、当該配線脱出口部分に係るリーフセルの容量の総和を記憶する変数CAPの値が、伸張された分のセルの容量だけ増加され、変数LeftPの値が、伸張されたセルのセルデータへのポインタに更新される。伸張に失敗した場合、L_ExpandFの値はFALSEに更新される。
続いて、防護壁生成部1212は、変数CAPの値が、着目バスbPの所属ネット数以上であるか否かを判定する(S4−9413−11)。すなわち、着目バスbPの所属ネットを引き出すだすために十分な配線脱出口が確保されたか否かが判定される。変数CAPの値が、着目バスbPの所属ネット数以上である場合(S4−9413−11でYes)、防護壁生成部1212は、リーフセルの伸張は終了させ、ステップS4−9413−15に進む。変数CAPの値が、着目バスbPの所属ネット数未満である場合(S4−9413−11でNo)、防護壁生成部1212は、R_ExpandFの値がTRUEであるか否かを判定する(S4−9413−12)。
R_ExpandFの値がTRUEでない場合(ステップS4−9413−12でNo)、ステップS4−9413−14に進む。R_ExpandFの値がTRUEである場合(S4−9413−12でYes)、防護壁生成部1212は、着目バスbPの配線脱出口部分について右側へのリーフセルの伸張を試行する(S4−9413−13)。当該ステップの詳細については後述する。伸張に成功した場合、当該配線脱出口部分に係るリーフセルの容量の総和を記憶する変数CAPの値が、伸張された分のセルの容量だけ増加され、変数RightPの値が、伸張されたセルのセルデータへのポインタに更新される。伸張に失敗した場合、R_ExpandFの値はFALSEに更新される。
続いて、防護壁生成部1212は、変数CAPの値が、着目バスbPの所属ネット数以上であるか否か、又はL_Expand及びR_Expandの双方の値がFALSEであるか否かを判定する(S4−9413−14)。変数CAPの値が、着目バスbPの所属ネット数未満であり、かつ、L_Expand及びR_Expandの少なくともいずれか一方の値がTRUEである場合(S4−9413−14でNo)、防護壁生成部1212は、ステップS4−9413−9以降を繰り返す。
変数CAPの値が、着目バスbPの所属ネット数以上である場合、又はL_Expand及びR_Expandの双方の値がFALSEである場合(S4−9413−14でYes)、防護壁生成部1212は、着目バスbPの配線脱出口に関する情報が記録された配線脱出口データGateを配線脱出口情報記憶部D10に登録する(S4−9413−15)。
図63は、配線脱出口情報記憶部の構成例を示す図である。同図に示されるように、配線脱出口情報記憶部D10は、対応バス(flavor)、左端セル(LeftP)、右端セル(RightP)、容量(CAP)、及び防護壁ツリーID(treeID)等のデータ項目を有する。
対応バス(flavor)は、配線脱出口に対応するバスのバスIDである。左端セル(LeftP)は、配線脱出口の左端のセルのセルデータへのポインタである。右端セル(RightP)は、配線脱出口の右端のセルのセルデータへのポインタである。容量(CAP)は、配線脱出口に属するセルの容量(cap)の合計である。防護壁ツリーID(treeID)は、配線脱出口に対応する防護壁ツリーのIDである。
ステップS4−9413−15では、配線脱出口情報記憶部D10に新たなレコード(配線脱出口データGate)が確保され、当該配線脱出口データGateの防護壁色(flavor)に変数FLAVORの値が記録される。また、当該配線脱出口データGateの左端セル(LeftP)に変数LeftPの値が記録される。また、当該配線脱出口データGateの右端セル(RightP)に変数RightPの値が記録される。更に、当該配線脱出口データGateの容量(CAP)に、変数CAPの値が記録される。
続いて、図62のステップS4−9413−10の詳細について説明する。図64は、左側へのリーフセルの伸張の試行処理の処理手順を説明するためのフローチャートである。
ステップS4−9413−10Aにおいて、防護壁生成部1212は、セルデータLeftPの左隣のセルポインタ(lLink)を、変数expCellに代入する。変数expCellは、伸張先候補のセルのセルデータへのポインタを記憶する変数である。変数LeftPは、図62において定義された変数である。
続いて、防護壁生成部1212は、セルデータexpCellの容量(cap)の値が0より大きいか否かを判定する(S4−9413−10B)。セルデータexpCellの容量(cap)の値が0より大きい場合(S4−9413−10BでYes)、防護壁生成部1212は、セルデータexpCellの防護壁色(flavor)の値が−1であるか否かを判定する(S4−9413−10C)。すなわち、伸張先候補のセルが、未だいずれのバスのリーフセルとされてないか否かが判定される。
セルデータexpCellの防護壁色(flavor)の値が−1である場合、すなわち、伸張先候補のセルがまだリーフセルではない場合(S4−9413−10CでYes)、防護壁生成部1212は、セルデータexpCellの防護壁色(flavor)に変数FLAVORの値を代入する(S4−9413−10D)。すなわち、伸張候補のセルが、着目バスbPのリーフセルとされる。これにより、着目バスbPの配線脱出口部分の左端は、左方向に一つ伸張された。したがって、防護壁生成部1212は、変数LeftPに変数expCellの値を代入する。
続いて、防護壁生成部1212は、セル行列内において、セルデータexpCellに係るセルの一つ内側のセルを探索し、探索されたセルのセルデータへのポインタをinsidePに代入する(S4−9413−10E)。続いて、防護壁生成部1212は、当該一つ内側のセルのセルデータinsidePに基づいて、変数CAPの値を更新する(S4−9413−10F)。
一方、セルデータexpCellの容量(cap)の値が0以下である場合(S4−9413−10BでNo)、又はセルデータexpCellの防護壁色(flavor)の値が−1以外である場合(S4−9413−10CでNo)、防護壁生成部1212は、L_ExpandFの値をFALSEとし、リーフセルの伸張は行わない(S4−9413−10G)。伸張先候補のセルの容量が0の場合は、伸張する意味がないからである。また、既にリーフセルとなっているセルを横取りすると、他のバスのネット配線の引き出しが破綻してしまうからである。
続いて、図62のステップS4−9413−13の詳細について説明する。図65は、右側へのリーフセルの伸張の試行処理の処理手順を説明するためのフローチャートである。
ステップS4−9413−13Aにおいて、防護壁生成部1212は、セルデータRightPの右隣のセルポインタ(rLink)を、変数expCellに代入する。変数expCellは、伸張先候補のセルのセルデータへのポインタを記憶する変数である。変数RightPは、図62において定義された変数である。
続いて、防護壁生成部1212は、セルデータexpCellの容量(cap)の値が0より大きいか否かを判定する(S4−9413−13B)。セルデータexpCellの容量(cap)の値が0より大きい場合(S4−9413−13BでYes)、防護壁生成部1212は、セルデータexpCellの防護壁色(flavor)の値が−1であるか否かを判定する(S4−9413−13C)。すなわち、伸張先候補のセルが、未だいずれのバスのリーフセルとされてないか否かが判定される。
セルデータexpCellの防護壁色(flavor)の値が−1である場合、すなわち、伸張先候補のセルがまだリーフセルではない場合(S4−9413−13CでYes)、防護壁生成部1212は、セルデータexpCellの防護壁色(flavor)に変数FLAVORの値を代入する(S4−9413−13D)。すなわち、伸張候補のセルが、着目バスbPのリーフセルとされる。これにより、着目バスbPの配線脱出口部分の右端は、右方向に一つ伸張された。したがって、防護壁生成部1212は、変数RightPに変数expCellの値を代入する。
続いて、防護壁生成部1212は、セル行列内において、セルデータexpCellに係るセルの一つ内側のセルを探索し、探索されたセルのセルデータへのポインタをinsidePに代入する(S4−9413−13E)。続いて、防護壁生成部1212は、当該一つ内側のセルのセルデータinsidePに基づいて、変数CAPの値を更新する(S4−9413−13F)。
一方、セルデータexpCellの容量(cap)の値が0以下である場合(S4−9413−13BでNo)、又はセルデータexpCellの防護壁色(flavor)の値が−1以外である場合(S4−9413−13CでNo)、防護壁生成部1212は、R_ExpandFの値をFALSEとし、リーフセルの伸張は行わない(S4−9413−13G)。
続いて、図64のステップS4−9413−10E、及び図65のステップS4−9413−13Eの詳細について説明する。
図66は、セル行列の外周セルの一つ内側のセルの探索処理を説明するためのフローチャートである。
セルデータexpCellの行番号が1である場合、セルデータexpCellに係るセルは、セル行列において北端の行に位置する。したがって、セルデータexpCellの南隣のセルポインタ(cS)が変数insidePに代入される。
セルデータexpCellの行番号が最大値(行数−1)である場合、セルデータexpCellに係るセルは、セル行列において南端の行に位置する。したがって、セルデータexpCellの北隣のセルポインタ(cN)が変数insidePに代入される。
セルデータexpCellの列番号が1である場合、セルデータexpCellに係るセルは、セル行列において西端の列に位置する。したがって、セルデータexpCellの東隣のセルポインタ(cE)が変数insidePに代入される。
セルデータexpCellの列番号が最大値(列数−1)である場合、セルデータexpCellに係るセルは、セル行列において東端の列に位置する。したがって、セルデータexpCellの西隣のセルポインタcNが変数insidePに代入される。
続いて、図64のステップS4−9413−10F、及び図65のステップS4−9413−13Fの詳細について説明する。
図67は、伸張先のリーフセルの一つ内側のセルに基づいて配線脱出口部分の容量を更新する処理の処理手順を説明するためのフローチャートである。なお、図67の処理内容は、図61のステップS4−949−A8の処理内容と同じである。
セルデータinsidePのセル属性(attr)の値がV(水平ピン間)、H(垂直ピン間)、又はEP(空きピン)である場合、変数CAPには、セルデータinsidePの容量(cap)の値が加算される。なお、セルデータinsidePは、伸張先のリーフセルの一つ内側のセルのセルデータである。
一方、セルデータinsidePの防護壁色(flavor)の値が変数FLAVORと一致し、かつ、セルデータinsidePの容量確認済みフラグ(pinCapCheckedF)の値がFALSEである場合、変数CAPには1が加算される。
以上で、着目バスbPの防護壁の配線脱出口部分に係るリーフセルの伸張処理は終了する。続いて、図55のステップS4−94−17の詳細について説明する。
図68及び図69は、リーフセルの連結による防護壁の生成処理の処理手順を説明するためのフローチャートである。図68及び図69では、防護壁色(flavor)の値が同じリーフセル同士を結ぶ経路がセル行列上において探索され、当該経路によって1つのツリーが生成される。当該ツリーが目的とする防護壁を構成する。以下、当該ツリーを「防護壁ツリー」という。防護壁ツリーの生成は、着目層L及び着目部品に係るバスごとに実行される。全部のバスについて防護壁ツリーが生成された後、防護壁ツリー間の干渉の有無がバスごと(防護壁ツリーごと)に検査される。他の防護壁ツリーとの干渉が検出された防護壁については、改めて経路探索が行われる。但し、防護壁ツリーの干渉が回避できない場合も考えられる。したがって、無限ループを避けるため、経路探索のやり直し回数には上限が設けられる。以下、ステップごとに説明する。
ステップS4−9417−1において、防護壁生成部1212は、各変数を初期化する。具体的には、変数Nに1が代入される。変数Eに2が代入される。変数Wに3が代入される。変数Sに4が代入される。変数N、E、W、Sは、セル行列における方向(北、東、西、南)を示す変数である。また、全てのセルデータの防護壁ツリーID(treeID)に、当該セルデータのセルデータ配列cellにおける添え字(インデックス番号)が代入される。すなわち、初期状態において、各セルの防護壁ツリーID(treeID)の値は、それぞれ一意なものとなる。後述の処理において、防護壁ツリーが形成される際に、連結される一方のセルの防護壁ツリーID(treeID)の値は、他方の防護壁ツリーID(treeID)の値によって更新される(塗り替えられる)。また、変数Iterationの値が0に初期化される。変数Iterationは、防護壁ツリー間に干渉が検出された場合に、防護壁ツリーの経路探索のやり直し回数を記憶するための変数である。
続いて、防護壁生成部1212は、バス集合BGのインデックスとしての変数iを0に初期化する。また、防護壁生成部1212は、変数ModifiedTreeNを0に初期化する(S4−9417−2)。変数ModifiedTreeNは、バス集合BGに含まれるバス群の中で、防護壁ツリーの形状に変化があったバスの数を記憶するための変数である。防護壁ツリーの形状の変化には、防護壁ツリーの新規生成も含まれる。
続いて、防護壁生成部1212は、バス集合BGにおいてi番目のバス(BG[i])を着目バスbPとし、着目バスbPの変更に応じて値が変化する変数の値を初期化する(S4−9417−3)。具体的には、変数FLAVORに、着目バスのバスIDが代入される。また、セルデータ配列cellの中から、防護壁色(flavor)の値が変数FLAVORの値と一致するセルデータがセル集合cellGとして抽出される。セル集合cellGは、着目バスbPに対する防護壁ツリーを形成するために連結されるセルに係るセルデータの集合である。例えば、図58において、着目バスがバスB[0]の場合、セルc1〜c39のそれぞれに対応する39個のセルデータがセル集合cellGに抽出される。
また、変数wireNに、セル集合cellGの要素数−1が代入される。変数wireNは、防護壁ツリーを形成するために連結すべき区間数を記憶する変数である。したがって、変数wireNの値は、セル集合cellGの要素数(連結対象のセルの数)−1とされる。また、フラグ変数CrossoverFにFALSEが代入される。CrossoverFは、防護壁ツリー間に干渉が検出されたときにTRUEとされるフラグ変数である。
続いて、防護壁生成部1212は、変数Iterationの値が0より大きいか否かを判定する(S4−9417−4)。変数Iterationは、ステップS4−9417−1において0に初期化されている。したがって、最初にステップS4−9417−4が実行される場合、その判定結果はNoとなる。
ステップS4−9417−4における判定結果がNoの場合、防護壁生成部1212は、セル行列データcellに含まれる全てのセルデータについて、防護壁ツリーの経路探索に使用するメンバ変数を初期化する(S4−9417−21)。具体的には、ラベル伝播元方向(parentDir)に0(不定)が代入される。また、道程(label)に最大値が代入される。最大値は、道程(label)として取り得る値を超える所定値であればよい。探索ソースフラグ(sFlag)及び探索ターゲットフラグ(tFlag)のそれぞれにはFALSEが代入される。
続いて、防護壁生成部1212は、セル集合cellGに含まれるセルデータの中から、後述の処理によって他のセルと連結されていないセルに係るセルデータを検索し、検索されたセルデータのうちの一つを変数sourceCellに代入する(S4−9417−22)。複数のセルデータが検索される場合、いずれか一つがランダムに選択されればよい。変数sourceCellに係るセルは、ステップS4−9417−25における防護壁ツリーの経路探索の始点とされる。
なお、他のセルと連結されていないセルに係るセルデータは、防護壁ツリーID(treeID)の値が当該セルデータのインデックス番号と一致し、かつ、防護壁ツリー線分数(segNum)の値が0であるセルデータである。後述されるように、防護壁ツリーID(treeID)の値が当該セルデータのインデックス番号と一致しないセルデータに係るセルは、他のセルと連結されたセルだからである。また、防護壁ツリーID(treeID)の値が当該セルデータのインデックス番号と一致するセルデータであっても、防護壁ツリー線分数SegNumの値が0以外であれば、当該セルデータに係るセルは他のセルと連結されたセルだからである。
一方、他のセルと連結されていないセルに係るセルデータが無い場合、防護壁生成部1212は、セル集合cellGの中で、他のセルと連結されている数が最も少ないセルのうちの一つを変数sourceCellに代入する。すなわち、防護壁ツリーの経路探索の始点となるセルはランダムに選択されるため、防護壁ツリーを形成する過程において、お互いに分断されている複数の島が形成された状態が生じうる。ここでは、斯かる島の中で最小の島に属するセルのうちの一つが変数sourceCellに代入される(すなわち、経路探索の始点とされる)。いずれを代入するかは、ランダムに決定されてよい。なお、最小の島に属するセル群のセルデータは、防護壁ツリーセル数(cellNum)が最小のセルデータである。防護壁ツリーセル数(cellNum)には、同じ島に属しているセル数が記録されるからである。また、後述より明らかなように、各島において、当該島の経路を示す防護壁線分データのリストは、当該島に属するいずれか一つのセルのセルデータの防護壁ツリー線分リスト(segList)に記録される。防護壁線分データのリストが記録されるセルは、当該島の経路探索において最後に始点となったセルである。なお、防護壁線分データの詳細については後述する。
上記より、ステップS4−9417−22において、変数sourceCellに格納されるセルデータは、他のセルと島を形成していないセルのセルデータ、又は他のセルと最小の島を形成しているセルのセルデータである。以下、「sourceCellに係る島」というとき、変数sourceCellに格納されたセルデータに係るセル及び当該セルと連結されたセル群とによって形成される島を意味する。該当するセルが一つしか無い場合は、当該一つのセルによって形成される島である。
続いて、防護壁生成部1212は、セルデータsourceCellの探索ソースフラグ(sFlag)にTRUEを代入する。また、防護壁生成部1212は、sourceCellに係る島の経路を示す防護壁線分データのリストによって示される線(直線又は折れ線)が通過している各セルのセルデータの探索ソースフラグ(sFlag)にTRUEを代入する(S4−9417−23)。sFlagがTRUEであるということは、経路探索において始点とされることを意味する。例えば、図57において、セルデータsourceCellに係るセルがセルc1であり、セルc1とセルc2とが連結されて一つの島を形成している場合、当該島には、セルc1及びc2の間のセル(ピン間のセル)も属する。したがって、当該島を示す線を通過するセルには、セルc1及びc2の他に、その間のセルが含まれる。なお、上記したように、当該防護壁線分データのリストは、sourceCellに係る島に属するいずれか一つのセルのセルデータの防護壁ツリー線分リスト(segList)に記録されている。
続いて、防護壁生成部1212は、sourceCellに係る島以外の島(一つのセルによって形成される島も含む)に属する全てのセルのセルデータの探索ターゲットフラグ(tFlag)にTRUEを代入する(S4−9417−24)。すなわち、セル集合cellGに含まれるセルデータの中で、ソースフラグ(sFlag)の値がFALSEのセルデータと、ソースフラグ(sFlag)の値がFALSEのいずれかのセルデータの防護壁ツリー線分リスト(segList)によって示される線が通過するセルに係るセルデータの探索ターゲットフラグ(tFlag)にTRUEが代入される。
ステップS4−9417−22からS4−9417−24によって、いずれか一つの島に属するセルが経路探索の始点とされ、他の全ての島に属するセルが経路探索の終点(目的地)とされたことになる。例えば、最初に当該ステップが実行される場合について、図58を用いて説明すると、セルc1が始点とされた場合、セルc2〜セルc39が終点とされる。なお、最初に当該ステップが実行される場合は、まだ、いずれのリーフセルも連結されていないため、島の経路を示す防護壁線分データのリストは生成されていない。したがって、リーフセル間のセルは、始点又は終点に含まれない。
続いて、防護壁生成部1212は、着目部品のセル行列の各セルをグリッドと見なし、迷路法によって、始点のセル(グリッド)から終点のセル(グリッド)への経路を探索する(S4−9417−25)。始点のセルとは、セルデータの探索ソースフラグ(sFlag)がTRUEであるセルである。終点のセルとは、セルデータの探索ターゲットフラグ(tFlag)がTRUEであるセルである。経路探索の枝は、各セルデータの東隣のセルポインタ(cE)、西隣のセルポインタ(cW)、北隣のセルポインタ(cN)、及び南隣のセルポインタ(cS)である。すなわち、終点のセルが見つかるまで、経路探索のラベル(前線)が十時方向に放射状に伝播していく。但し、ラベルの伝播条件は、伝播先のセルのセルデータの容量(cap)の値が0より大きく、かつ、伝播先セルのセルデータの道程(label)が、伝播元セルの道程×COSTより大きいことである。ここで、COSTは、伝播先への道程のコストを示し、以下の式によって計算される。
COST=(1+COEFF×伝播先セルのセルデータの防護壁ツリー線分通過数(patternNum))
防護壁ツリー線分通過数(patternNum)は、防護壁ツリーを示す線分が当該セルを通過している数である。この値が0でないということは、伝播先セルは、既に他のバスの防護壁ツリーの一部とされていることを意味する。COEFFは、既に他のバスの防護壁ツリーの一部とされているセルに対するペナルティ係数である。すなわち、防護壁ツリー間の干渉を避けるためには、他のバスの防護壁ツリーの一部とされているセルを通過する経路が選択されるのは好ましくない。そこで、既に他のバスの防護壁ツリーの一部とされているセルを経路として選択するコストを増加させるために、当該セルへの道程のコスト(COST)には、(COEFF×伝播先セルのセルデータの防護壁ツリー線分通過数(patternNum))が加算されるのである。なお、COEFFの初期値は、適宜定めればよい。
上記伝播条件が満たされた伝播先には、ラベルが伝播する。この場合、伝播先セルのセルデータのラベル伝播元方向(parentDir)には、当該伝播先セルから見た場合の伝播元セルの方向を示す値(N、E、W、又はSのいずれかの値)が代入される。また、伝播先セルのセルデータの道程(label)には、伝播元セルのセルデータの道程(label)+COSTが代入される。
例えば、図58において、セルc1のみが始点の場合、セルc1から最も近いセルc2又はc4に到達した時点で、経路探索(ステップS4−9417−25)は終了する。セルc2又はc4のいずれに先に到達するかは、ラベルの伝播方向に関していずれを優先させるかによる。ここでは、セルc2に先に到達したこととする。その場合、セルc1及びセルc2の間のセルと、セルc2とに関して、上記した伝播先セルに対するセルデータの更新が行われる。
続いて、防護壁生成部1212は、探索された経路(探索経路)を示す防護壁線分データを生成するための準備を行う(S4−9417−31)。具体的には、探索経路の終点のセルのセルデータが変数targetCellに代入される。上記の例では、セルc2のセルデータである。変数x1、y1のそれぞれに、セルデータtargetCellの列番号(c)、行番号(r)が代入される。変数x1及びy1は、防護壁線分データを生成する過程において更新されうる。すなわち、防護壁線分データは、探索経路の終点から始点へかけて当該経路を遡ることにより生成されるところ、変数x1及びy1は、当該探索経路の曲がり角が検出された際に、当該曲がり角の頂点に位置するセルの列番号又は行番号によって更新される。また、セルデータtargetCellの伝播元方向parentDirが変数currentDirに代入される。セルデータtargetCellの伝播元方向(parentDirの方向)に隣接するセルのセルデータが、変数currentCellに代入される。変数currentCellは、遡りの最前線に位置するセルに係るセルデータを示す。なお、図58におけるセルc1からセルc2への経路の場合、当該隣接セルは、セルc1及びc2の間のセルである。また、フラグ変数SFoundにFALSEが代入される。SFoundは、経路探索の始点のセルが見つかったか否かを記憶するフラグ変数である。また、変数tmpSegにNULLが代入される。
なお、防護壁線分データは、例えば、次のような構造を有する。図70は、防護壁線分データの構成例を示す図である。同図に示されるように、防護壁線分データは、始点x座標(x1)、始点y座標(y1)、終点x座標(x2)、終点y座標(y2)、防護壁ツリーID(treeID)、及び次ポインタ(next)等のメンバ変数(データ項目)を有する。
始点x座標(x1)は、防護壁線分データが示す線分の始点となるセルのセル行列における列番号である。始点y座標(y1)は、防護壁線分データが示す線分の始点となるセルのセル行列における行番号である。終点x座標(x2)は、防護壁線分データが示す線分の終点となるセルのセル行列における列番号である。終点y座標(y2)は、防護壁線分データが示す線分の終点となるセルのセル行列における行番号である。防護壁ツリーID(treeID)は、防護壁線分データが対応する防護壁ツリーの識別子である。次ポインタ(next)は、次の防護壁線分データへのポインタである。すなわち、各防護壁線分データが、次ポインタ(next)によって関連付けられることにより、折れ曲がった経路に基づく防護壁ツリーが表現される。なお、一つの防護壁線分データは、防護壁ツリーの一つの直線区間に対応する。
続いて、防護壁生成部1212は、フラグ変数MakeSegFにFALSEを代入する(S4−9417−32)。MakeSegFは、防護壁線分データを生成したか否かを記憶するフラグ変数である。続いて、防護壁生成部1212は、所定の条件が満たされる場合、探索経路を示す防護壁線分データの一部又は全部を生成する(S4−9417−33)。
具体的には、セルデータcurrentCellの探索ソースフラグ(sFlag)がTRUEである場合(以下、「ケース1」という。)、すなわち、探索経路の終点からの遡りが始点のセルに到達した場合、変数x2、y2のそれぞれにセルデータcurrentCellの列番号(c)、行番号(r)が代入される。続いて、防護壁線分データseg(図70参照)がメモリ装置103内に1つ生成される。防護壁線分データsegの始点x座標(x1)、始点y座標(y1)、終点x座標(x2)、終点y座標(y2)には、順番に、変数x1、y1、x2、y2の値が代入される。続いて、防護壁線分データsegの防護壁ツリーID(treeID)に、セルデータsourceCellの防護壁ツリーID(treeID)が代入される。すなわち、防護壁線分データの防護壁ツリーIDは、当該防護壁線分データが示す経路の始点となった島に属するセルのセルデータの防護壁ツリーIDの値に従う。また、防護壁線分データsegが生成されたため、MakeSegFにTRUEが代入される。更に、探索経路の始点のセルが見つかったため、SFoundにTRUEが代入される。
一方、セルデータcurrentCellのラベル伝播元方向(parentDir)の値が、変数currentDirの値と異なる場合(以下「ケース2」という。)、すなわち、遡りの過程において曲がり角が検出された場合、変数x2、y2のそれぞれにセルデータcurrentCellの列番号(c)、行番号(r)が代入される。続いて、防護壁線分データsegがメモリ装置103内に1つ生成される。防護壁線分データsegの始点x座標(x1)、始点y座標(y1)、終点x座標(x2)、終点y座標(y2)には、順番に、変数x1、y1、x2、y2の値が代入される。続いて、防護壁線分データsegの防護壁ツリーID(treeID)に、セルデータsourceCellの防護壁ツリーID(treeID)が代入される。また、防護壁線分データsegが生成されたため、MakeSegFにTRUEが代入される。また、曲がり角が検出されたため、当該曲がり角の頂点の列番号及び行番号によって、変数x1及びy1の値が更新される。すなわち、変数x1に変数x2の値が代入される。変数y1に変数y2の値が代入される。また、変数currentDirに、セルデータcurrentCellのラベル伝播元方向(parentDir)が代入される。すなわち、新たな遡りの方向が変数currentDirに代入される。更に、変数currentCellには、セルデータcurrentCellのラベル伝播元方向(parentDir)の方向に隣接するセルのセルデータが代入される。すなわち、遡りの最前線がセル一つ分ずらされる。
又は、ケース1及びケース2のいずれにも該当しない場合(以下「ケース3」という。)、変数currentCellには、セルデータcurrentCellのラベル伝播元方向(parentDir)の方向に隣接するセルのセルデータが代入される。すなわち、遡りの最前線がセル一つ分ずらされる。
続いて、防護壁生成部1212は、MakeSegFの値がTRUEである場合であるか否かを判定する(S4−9417−34)。すなわち、線分データが生成されたか否かが判定される。MakeSegFの値がTRUEでない場合(S4−9417−34でNo)、すなわち、ステップS4−9417−33でケース3だった場合、ステップS4−9417−33が繰り返される。
MakeSegFの値がTRUEである場合(S4−9417−34でYes)、防護壁生成部1212は、生成された防護壁線分データをセルデータsourceCellの防護壁ツリー線分データリスト(segList)に登録する(S4−9417−35)。また、セルデータsourceCellの防護壁ツリー線分数(segNum)に1が加算される。更に、セルデータsourceCellの防護壁ツリーセル数(cellNum)に、防護壁線分データsegに含まれるセル数−1が代入される。
続いて、防護壁生成部1212は、SFoundの値がTRUEであるか否かを判定する(S4−9417−36)。SFoundがFALSEの場合、すなわち、遡りが探索経路の始点に到達していない場合(S4−9417−36でNo)、ステップS4−9417−32以降が繰り返される。
SFoundがTRUEの場合、すなわち、遡りが探索経路の始点に到達した場合(S4−9417−36でYes)、防護壁生成部1212は、探索経路の終点に位置するセル(targetCell)が属していた島の経路を示す防護壁ツリー線分データのリストを取得し、変数SEGに代入する(S4−9417−37)。また、当該防護壁ツリー線分データの防護壁ツリーID(treeID)の値を変数TIDに代入する。なお、探索経路の終点に位置するセルが属していた島の経路を示す防護壁ツリー線分データは、当該島に属するいずれか一つのセルによって保持されている。したがって、具体的には、セルデータtargetCellの列番号(c)及び行番号(r)を通過する防護壁ツリー線分データを防護壁ツリー線分リスト(segList)に含むセルデータがセル集合cellGより検索され、当該セルデータの防護壁ツリー線分リスト(segList)が変数SEGに代入される。
但し、ステップS4−9417−37において、目的とする防護壁ツリー線分データのリストが取得できるのは、探索経路の終点側の島が複数のセルを含む場合である。この場合(S4−9417−38でYes)、防護壁生成部1212は、探索経路によって連結された二つの島を統合するための処理を実行する(S4−9417−39)。すなわち、探索経路の終点に位置するセルが属していた島の経路を示す防護壁ツリー線分データのリストが、探索経路の始点側の島の経路を示す防護壁ツリー線分データに統合される。また、探索経路の終点に位置するセルが属していた島に属する各セルのセルデータの防護壁ツリーID(treeID)が、探索経路の始点側の島に属するセルのセルデータの防護壁ツリーIDによって更新される。具体的には、セルデータ行列cellにおいてTID番目のセルデータ(セルデータ配列cell[TID])の防護壁ツリー線分リスト(segList)に含まれている各防護壁線分データの防護壁ツリーID(treeID)が、セルデータsourceCellの防護壁ツリーID(treeID)によって更新される。また、セルデータsourceCellの防護壁ツリー線分リスト(segList)に、変数SEGに代入されている防護壁ツリー線分リストをつなぎ加える。また、セルデータsourceCellの防護壁ツリー線分数(segNum)に、変数SEGに含まれていた防護壁ツリー線分の数が加算される。また、セルデータsourceCellの防護壁ツリーセル数(cellNum)に、セルデータcell[TID]の防護壁ツリーセル数(cellNum)が加算される。また、セルデータcell(TID)の防護壁ツリー線分数(segNum)の値が0に更新され、防護壁ツリー線分リスト(segList)が空にされる。また、セルデータcell(TID)の防護壁ツリーセル数(cellNum)に1が代入される。更に、セル集合cellGの中で、防護壁ツリーID(teeID)がTIDであるセルデータの防護壁ツリーID(teeID)に、セルデータsourceCellの防護壁ツリーID(treeID)の値が代入される。以上はSEGリストに連結されていた線分をsourceCellの方に移動させたことを意味する。
一方、ステップS4−9417−37において、探索経路の終点側の島が一つのセルしか含まない場合、目的とする防護壁ツリー線分のリストは取得されない(S4−9417−36でNo)。この場合、防護壁生成部1212は、セルデータtargetCellの防護壁ツリーID(treeID)に、セルデータsourceCellの防護壁ツリーID(treeID)を代入する(S4−9417−40)。
ステップS4−9417−39及びS4−9417−40より、同じ島を形成するセル群の防護壁ツリーID(treeID)の値は、当該セル群に属するいずれか一つのセルのセルIDとされることがわかる。当該セルは、当該島が形成されたときのセルデータsourceCellに係るセルである。
続いて、防護壁ツリーを形成するために連結すべき区間のうちの一つが連結されたため、防護壁ツリー生成部は、変数wireNより1を減算する(S4−9417−41)。続いて、防護壁生成部1212は、変数wireNの値が0より大きいか否かを判定する(S4−9417−42)。すなわち、着目バスbPに対応する防護壁に関して、連結されていないリーフセルの有無が判定される。wireNの値が0より大きい場合、すなわち、連結されていないリーフセルが有る場合(S4−9417−42でYes)、ステップS4−9417−21以降が繰り返される。連結されていないリーフセルが有る場合とは、要するに、分断されている島が存在する場合である。
一方、wireNの値が0以下である場合、すなわち、図54の防護壁w0のように、リーフセルが一つの島に統合された場合(S4−9417−42でNo)、防護壁生成部1212は、当該島(すなわち完成された防護壁ツリー)の経路を示す防護壁ツリー線分データのリストによって示される線が通過しているセルのセルデータの防護壁ツリー線分通過数(patternNum)に1を加算する(S4−9417−43)。なお、防護壁ツリー線分通過数(patternNum)の加算対象となるセルには、当該線の端点に位置するセルも含まれる。当該線は、具体的には、セルデータ配列cell[セルデータsourceCellの防護壁ツリーID(treeID)]の防護壁ツリー線分リスト(segList)によって示される線である。
続いて、防護壁生成部1212は、バス集合BGのインデックスである変数iに1を加算する。これにより、ステップS4−9417−3において着目バスbPが更新される。また、一つの防護壁ツリーに関して経路変更(新規作成も含む)が発生したため、ModifiedTreeNに1が加算される(S4−9417−44)。
続いて、防護壁生成部1212は、変数iの値が変数bMax未満であるか否かを判定する(S4−9417−45)。変数iの値が変数bMaxより小さい場合、すなわち、バス集合BGに含まれる全てのバス(着目層L及び着目部品に係るバス)の中で、防護壁ツリーが生成されていないバスが存在する場合(S4−9417−45でYes)、ステップS4−9417−3以降が繰り返される。
一方、変数iの値が変数bMax以上である場合(S4−9417−45でNo)、防護壁生成部1212は、変数iteration及びCOEFFのそれぞれに1を加算する(S4−9417−46)。COEFFの値を変化させるのは、他の防護壁ツリーとの間に干渉が検出された防護壁ツリーに関して改めて経路探索(S4−9417−25)が行われる場合に、当該防護壁ツリーの探索経路が前回と同じになってしまう可能性を低減させるためである。なお、COEFFへの加算値は1でなくてもよい。加算値は、既に他のバスの防護壁ツリーの一部とされているセルに対するペナルティをどの程度強化したいかに依存する。COEFFの値を大きくすればする程、干渉の再発が防止される可能性は低くなる。但し、経路が探索されなくなる可能性も大きくなる。したがって、両者のバランスを考慮してCOEFFの値を変える必要がある。
続いて、防護壁生成部1212は、変数Itarationの値が、予め定められている最大値MaxIteration未満であるか否かを判定する(S4−9417−47)。変数Iterasionの値が、最大値MaxIteration未満である場合(S4−9417−47でYes)、ステップS4−9417−2以降が繰り返される。
一方、変数Iterasionの値が、最大値MaxIterationに達している場合(S4−9417−47でNo)、防護壁生成部1212は、バス集合BGに含まれている各バスについて、バス情報Bの優先度prioの低い順に、当該バスの防護壁ツリーと他のバスの防護壁ツリーとの干渉の有無を検査し、干渉している部分の防護壁ツリー線分を削除する(S4−9417−48)。
ステップS4−9417−2以降又はS4−9417−3以降が繰り返される場合について説明する。変数Itarationの値が1以上であると(S4−9417−4でYes)、ステップS4−9417−5が実行される。ステップS4−9417−5において、防護壁生成部1212は、セル集合cellGに含まれる各セルについて、着目バスbP以外のバスに対応する防護壁ツリーの防護壁ツリー線分との干渉の有無を検査する(S4−9417−5)。当該ステップの詳細については後述するが、干渉が検出されるとCrossoverFにTRUEが代入される。
続いて、防護壁生成部1212は、CrossoverFの値がFALSEであるか否か、すなわち、干渉は検出されなかったか否かを判定する(S4−9417−6)。干渉が検出された場合(S4−9417−6でNo)、ステップS4−9417−21以降が実行される。すなわち、着目バスbPについて、防護壁ツリーの再生成が実行される。
干渉が検出されなかった場合(S4−9417−6でYes)、防護壁生成部1212は、ステップS4−9417−5の実行によって、cellGに含まれる各セルについて減算された防護ツリー線分通過数(patternNum)の値を復元する(S4−9417−7)。すなわち、当該値に1が加算される。また、変数iに1が加算される。
続いて、防護壁生成部1212は、変数iの値が変数bMax未満であるか否かを判定する(S4−9417−45)。変数iの値が変数bMaxより小さい場合、すなわち、バス集合BGに含まれる全てのバス(着目層L及び着目部品に係るバス)の中で、干渉のチェックが行われていないバスが存在する場合(S4−9417−8でYes)、ステップS4−9417−3以降が繰り返される。
一方、変数iの値が変数bMax以上である場合(S4−9417−8でNo)、防護壁生成部1212は、変数iteration及びCOEFFのそれぞれに1を加算する(S4−9417−9)。当該ステップの意義は、ステップS4−9417−46と同様である。したがって、COEFFへの加算値は1でなくてもよい。
続いて、防護壁生成部1212は、ModifiedTreeNの値が0であるか否かを判定する(S4−9417−10)。すなわち、変数Itarationの値が変更されない間において、バス集合BGに含まれるバスの中で防護壁ツリーに経路変更が生じたバスは無かったか否かが判定される。当該判定は、他の防護壁ツリーと干渉の有った防護壁ツリーは無かったか否かの判定と同義である。
ModifiedTreeNの値が0である場合(S4−9417−10でYes)、防護壁の生成処理は終了する。ModifiedTreeNの値が0でない場合(4−10でNo)、防護壁生成部1212は、変数Itarationの値が、予め定められている最大値MaxIteration未満であるか否かを判定する(S4−9417−11)。変数Iterasionの値が、最大値MaxIteration未満である場合(S4−9417−11Yes)、ステップS4−9417−2以降が繰り返される。
一方、変数Iterasionの値が、最大値MaxIterationに達している場合(S4−9417−11でNo)、ステップS4−9417−48が実行された後、防護壁の生成処理は終了する。
続いて、図68のステップS4−9417−5の詳細について説明する。図71は、他の防護壁ツリーとの干渉の有無の検査処理を説明するためのフローチャートである。
ステップS4−9417−5aにおいて、防護壁生成部1212は、セル集合cellGの要素数(すなわち、着目バスbPのリーフセルの総数)を変数CMaxに代入する。また、変数elmに0が代入される。
続いて、防護壁生成部1212は、セル集合cellGのelm番目の要素(セルデータ)の防護壁ツリー線分数(segNum)の数が0より大きいか否かを判定する(S4−9417−5b)。すなわち、着目バスbPに対する防護壁ツリーの防護壁ツリー線分データのリストを有しているセルであるか否かが判定される。
当該セルデータの防護壁ツリー線分数(segNum)の数が0より大きい場合(S4−9417−5bでYes)、防護壁生成部1212は、当該セルデータの防護壁ツリー線分リスト(segList)によって示される線が通過する各セルのセルデータの防護壁ツリー線分通過数(pattarnNum)の値を1減算する(S4−9417−5c)。具体的には、当該防護壁ツリー線分リスト(segList)に含まれている防護壁ツリー線分データごとに、当該防護壁ツリー線分データの始点から終点の間に位置するセルのセルデータの防護壁ツリー線分通過数(pattarnNum)について1が減算される。但し、同一のセルについて重複して減算は行われない。なお、当該減算によって、一つの防護壁ツリーにしか属していないセルのセルデータの防護壁ツリー線分通過数(pattarnNum)の値は0となるはずである。
続いて、防護壁生成部1212は、変数elmに1を加算する(S4−9417−5d)。変数elmの値が変数CMaxより小さい場合(S4−9417−5eでYes)、ステップS4−9417−5b以降が繰り返される。変数elmの値が変数CMax以上である場合(S4−9417−5eでNo)、防護壁生成部1212は、変数elmに0を代入する(S4−9417−5f)。
続く、ステップS4−9417−5gからS4−9417−5kにおいて、ステップS4−9417−5bからS4−9417−5eと同様のループ処理が実行される。但し、ステップS4−9417−5hにおいて、防護壁生成部1212は、ステップS4−9417−5gの条件に合致するセルデータの防護壁ツリー線分リスト(segList)によって示される線が通過する、いずれかのセルのセルデータの防護壁ツリー線分通過数(pattarnNum)が0より大きい場合、CrossoverFの値をTRUEに更新する。当該セルに関して、他の防護壁ツリーとの干渉が検出されたからである。CrossoverFの値がTRUEとされた場合(S4−9417−5i)、又はループが終了した場合(S4−9417−5kでNo)、図71の処理は終了する。
以上で防護壁の生成処理の説明は終了する。続いて、図19のステップS4−10の詳細について説明する。
図72は、着目部品及び着目層に係るバスの所属ネットの引き出し経路の生成処理の処理手順を説明するためのフローチャートである。同図の処理は、バス集合BGに含まれるバスごとに実行される。
ステップS4−10−1において、引き出し配線部122は、バス集合BGの中で処理対象のバス(着目バス)を示す変数bを0に初期化する。続いて、引き出し配線部122は、着目バスのバスIDを変数FLAVORに代入する(S4−10−2)。
続いて、引き出し配線部122は、着目部品及び着目層Lに係るセル行列データcellに含まれる全てのセルについて以下の処理を行う(S4−10−3)。すなわち、引き出し配線部122は、セル属性(attr)の値が「D」(通常ピン)又は「S」(引き出し対象ピン)であるセルデータのうち、防護壁色(flavor)の値がFLAVORと同じセルデータのセル属性(attr)の値を「S」とし、防護壁色(flavor)の値がFLAVORと異なるセルデータのセル属性(attr)の値「D」とする。すなわち、着目バスに関する引き出し対象ピンに対応するセルデータのみのセル属性(attr)が「S」とされる。また、引き出し配線部122は、全てのセルデータの容量(cap)の値を、セル属性(attr)の値に応じた値とする。すなわち、図34の処理が実行される。更に、引き出し配線部122は、セル行列の外周に位置する全てのセルのセルデータの出口フラグ(exitF)を一旦FALSEとする。
続いて、引き出し配線部122は、配線脱出口情報記憶部D10(図63)に登録されている各レコードに基づいて、セルデータへの防護壁の反映を行う(S4−10−3)。まず、引き出し配線部122は、対応バス(flavor)の値がFLAVORと異なるレコードの防護壁ツリーIDをセル行列データcellにおけるインデックスとするセルデータの防護壁ツリー線分リスト(segList)に係る線分が通過するセルのセルデータの容量(cap)を0とする。すなわち、着目バス以外のバスに対する防護壁に係るセルの容量が0とされる。容量が0とされるということは、これから行われる着目バスに関する配線が通過できないセルとされたことに相当する。また、引き出し配線部122は、対応バス(flavor)の値がFLAVORと一致するレコードの左端セル(LeftP)から右端セル(RightP)の区間のセルのセルデータの出口フラグ(exitF)をTRUEとする。すなわち、着目バスに対応する防護壁の配線脱出口部分に係るセルが、これから行われる配線の出口セルとされる。
続いて、引き出し配線部122は、既に着目部品の着目層Lにおいて既に引き出しが行われた配線の経路に係るセルのセルデータの容量(cap)の値を0とする(S4−10−5)。これから行われる引き出し経路が、他の引き出し経路と干渉しないようにするためである。なお、既に引き出しが行われたネットの経路に関する情報は、後述される引き出し経路データePath(図93参照)として生成される。ステップS4−10−5が初めて実行される際は、まだ、引き出し経路情報ePathは生成されていないため、当該ステップでは何も行われない。
続いて、引き出し配線部122は、引き出し経路の探索に用いる有向グラフの状態を初期化する(S4−10−6)。具体的には、引き出し配線部122は、ノードデータ配列vに格納されている各ノードデータ(図26)のラベル伝播元ノードID(pID)にNULLIDを記録し、最短経路長(dist)に0を記録し、ラベルフロントフラグ(lFrontF)にfalseを記録する。湧き出しノードS又は流入ノードTに対応するノードデータについては、図37と同様の処理が実行される。また、引き出し配線部122は、各枝データのフロー(flow)を0に初期化し、容量(cap)を再計算する。容量の計算方法は、枝データの生成時(図46〜図52)において説明した通りである。すなわち、有向枝によって接続させるセルのセルデータの容量(cap)の小さい方の値が当該有向枝の枝データの容量(cap)となる。なお、ステップS4−10−6において、ノードデータ及び枝データを初期化するのは、図72のループ内において同一有向グラフ(ノードデータ及び枝データ)が繰り返し利用されるからである。したがって、前回の経路探索時に各データに記録された値を消去する必要があるからである。
続いて、引き出し配線部122は、湧き出しノードSから全ての引き出し対象ピンに対応するセル(引き出し対象セル)の入り口ノードへの有向枝を生成する(S4−10−7)。続いて、引き出し配線部122は、出口フラグ(exitF)がtrueの全てのセル(すなわち、出口セル)の出口ノードから流入ノードTへの有向枝を生成する(S4−10−8)。
続いて、引き出し配線部122の経路探索部1221は、有向グラフにおいて、全ての引き出し対象の配線ごとに最短経路を探索する(S4−10−9)。
図73は、経路探索部によって探索される経路の例を示す図である。すなわち、同図はステップS4−10−9の処理結果を示す。
同図において、太い実線が、経路探索部1221によって探索された経路を示す。本実施の形態では、6本の配線が要求されている場合が例とされている。したがって、同図に示される経路は、6配線分の経路を示す。各経路は、湧き出しノードSから引き出し対象ピンの入り口ノードを経由し、更に、出口セルの出口ノードを経由して流入ノードTまで至る。なお、ステップS4−10−9の終了時点では、各経路に属する各有向枝がいずれの配線の持ち物になるかは決定されていない。
続いて、引き出し配線部122の概略経路確定部1222は、経路探索部1221によって探索された各経路を各配線に分配し、概略配線の引き出し経路(概略経路)を確定する(S4−10−10)。
図74は、概略経路確定部によって確定された概略経路の例を示す図である。すなわち、同図はステップS4−10−10の処理結果を示す。同図において、符号en(nは整数)が付されている有向枝は、確定された概略経路が通過する有向枝である。同図では、便宜上、3本の概略経路が確定した状態を示す。
続いて、引き出し配線部122の引き出し成否判定部1223は、着目バスの全ての所属ネットについて引き出しに成功したか否かを判定する(S4−10−11)。当該ステップでは、引き出せに成功したネットの配線について、引き出し経路情報が保存される。また、引き出しに成功した場合、変数requestNに0が代入される。引き出しに失敗している場合、変数requestNに引き出せなかったネットの数が代入される。
続いて、引き出し配線部122は、引き出しの成否(変数requestNの値)に基づいて処理を分岐させる(S4−10−12)。引き出しに成功した場合(S4−10−12でYes)、引き出し配線部122は、変数bの値をインクリメントし、バスグループBGにおいて次のバスを着目バスとする(S4−10−13)。全てのバスについて処理が終了していない場合(SS4−10−14でYes)、引き出し配線部122は、全てのセルデータの当初容量(cap2)の値を、容量(cap)に代入する(S4−10−15)。すなわち、ステップS4−10−4又はS4−10−5において一時的に変更された容量(cap)の値が当初の値に復元される。続いて、新たな着目バスについてステップS4−10−2以降が実行される。
一方、引き出しに失敗した場合(S4−10−12)、引き出し配線部122は、引き出せなかった本数(requestN)分だけ、着目バスに対応する、配線脱出口データGate(図63)の左端セル(LeftP)から右端セル(RightP)の区間を広げる(S4−10−16)。すなわち、出口セルが追加される。
出口セルの追加に成功した場合(S4−10−17でYes)、引き出し配線部122は、新たな出口セルのセルデータの出口フラグ(exitF)にTRUEを代入し(S4−10−18)、ステップS4−10−6以降を繰り返す。すなわち、着目バスの所属ネットについて引き出しが再実行される。
一方、出口セルの追加に失敗した場合(S4−10−17でNo)、引き出し配線部122は、バスグループBGにおいて次のバスを着目バスとし(S4−10−13)、ステップS4−10−14以降を実行する。
続いて、ステップS4−10−7の詳細について説明する
図75は、湧き出しノードから引き出し対象セルへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−10−7Aにおいて、引き出し配線部122は、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。また、引き出し配線部122は、変数iに初期値0を代入する。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、引き出し配線部122は、処理対象のセルデータ(セルデータ配列cell[i])のセル属性(attr)の値が「S(引き出し対象ピン)」であるか否かを判定する(S4−10−7B)。処理対象のセルデータのセル属性の値がSの場合(S4−10−7BでYes)、引き出し配線部122は、処理対象のセルデータのセルの入り口ノードのノードデータ(ノードデータ配列v[cell[i].iN])の探索ソースフラグ(sFlag)にtrueを記録する(S4−10−7C)。
続いて、引き出し配線部122は、湧き出しノードSから処理対象のセルへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−10−7D)。具体的には、枝データ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)の値が記録される。
また、引き出し配線部122は、枝データeに係る有向枝の始点ノード(すなわち、湧き出しノードS)のノードデータ(ノードデータ配列v[0])の湧き出しノードSからの有向枝のリスト(sourceEdgeList)に、枝データeを追加する。
ステップS4−10−7D、又はステップS4−10−7BでNoの場合に続いて、引き出し配線部122は、変数iをインクリメントする(S4−10−7E)。すなわち、セルデータ配列cellにおいて次のセルデータが処理対象とされる。続いて、引き出し配線部122は、変数iの値がcellMax(セルの総数)未満であるか否かを判定することにより、未処理のセルデータが有るか否かを判定する(S4−10−7F)。未処理のセルデータが有る場合(S4−10−7FでYes)、引き出し配線部122は、ステップS4−10−7B以降を繰り返す。未処理のセルデータが無い場合(S4−10−7FでNo)、引き出し配線部122は、図75の処理を終了させる。
続いて、図72のステップS4−10−8の詳細について説明する。図76は、出口セルから流入ノードへの有向枝の生成処理の処理手順を説明するためのフローチャートである。
ステップS4−10−8Aにおいて、引き出し配線部122は、変数colMaxに列方向のセルの数を代入し、変数rowMaxに行方向のセルの数を代入し、変数cellMaxにセルの総数(colMax×rowMax)を代入する。また、引き出し配線部122は、変数iに初期値0を代入する。変数iは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)の添え字として利用される。
続いて、引き出し配線部122は、処理対象のセルデータ(セルデータ配列cell[i])の出口フラグ(exitF)の値がtrueであり、かつ、処理対象のセルデータの容量(cap)が0より大きいか否かを判定する(S4−10−8B)。この判定は、処理対象のセルデータが出口セルに対応するセルデータであるか否かの判定に相当する。すなわち、出口フラグの値がtrueであるセルデータは、セル行列において外周に位置するセルのセルデータである(図27のステップS4−921−4参照)。また、外周に位置するセルのセルデータのうち、容量が0より大きいのは出口セルのセルデータだけである(図30のステップS4−922−6参照)。
ステップS4−10−8BでYesの場合、すなわち、処理対象のセルデータが出口セルのセルデータである場合、引き出し配線部122は、処理対象のセルデータのセルの出口ノードのノードデータ(ノードデータ配列v[cell[i].oN])の探索ターゲットフラグ(tFlag)にtrueを記録する(S4−10−8C)。
続いて、引き出し配線部122は、処理対象のセルから流入ノードTへの有向枝に対応させる枝データeをメモリ装置103に一つ生成し、枝データeのメンバ変数に値を記録する(S4−10−8D)。具体的には、枝データ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)の値が記録される。
また、引き出し配線部122は、枝データeに係る有向枝の終点ノード(すなわち、流入ノードT)のノードデータ(ノードデータ配列v[vertexNum−1])の流入ノードへの有向枝のリスト(targetEdgeList)に、枝データeを追加する。
ステップS4−10−8D、又はステップS4−10−8BでNoの場合に続いて、引き出し配線部122は、変数iをインクリメントする(S4−10−8E)。すなわち、セルデータ配列cellにおいて次のセルデータが処理対象とされる。続いて、引き出し配線部122は、変数iの値がcellMax(セルの総数)未満であるか否かを判定することにより、未処理のセルデータが有るか否かを判定する(S4−10−8F)。未処理のセルデータが有る場合(S4−10−8FでYes)、引き出し配線部122は、ステップS4−10−8B以降を繰り返す。未処理のセルデータが無い場合(S4−10−8FでNo)、引き出し配線部122は、図76の処理を終了させる。
続いて、図72のステップS4−10−9の詳細について説明する。図77は、有向グラフにおける最短経路の探索処理の処理手順を説明するためのフローチャートである。なお、本実施の形態では、最短経路を求めるアルゴリズムとしてダイクストラ法(Dijkstra's Algorithm)を採用する。但し、公知の他のアルゴリズムを採用してもよい。
ステップS4−109−1において、最短経路探索部1221aは、湧き出しノードSのノードデータの湧き出しノードSからの有向枝のリスト(sourceEdgeList)からフロー(flow)の値が0の枝データを一つ取得し、変数cEdgeに代入する。湧き出しノードSのsourceEdgeListには、図75の処理によって湧き出しノードSから全ての引き出し対象セルの入り口ノードへの有向枝に対する枝データが記録されている。当該有向枝は、図21の例では6本示されている。ステップS4−109−1では、6本のうちフロー(flow)の値が0の有向枝の枝データが一つ取得される。なお、最初は、全ての枝データのフロー(flow)の値は0であり、後段の処理によってフローの値は変化する。また、変数cEdgeは、処理対象とする枝データを格納する枝データ型の変数である。cEdgeに代入された枝データを以下、「枝データcEdge」という。
枝データcEdgeを取得できた場合、すなわち、湧き出しノードSのノードデータのsourceEdgeListに該当する枝データが存在した場合(S4−109−2)、最短経路探索部1221aは、全てのノードデータ(ノードデータ配列vの全ての要素)の中で、探索ソースフラグ(sFlag)又は探索ターゲットフラグ(tFlag)がtrueでないノードデータのラベル伝播元ノードID(pID)、最短経路長(dist)、及びラベルフロントフラグ(lFrontF)の値を初期化する(S4−109−3)。具体的には、pIDにNULLIDを、distにdistMaxを、lFrontFにfalseを代入する。なお、探索ソースフラグ(sFlag)がtrueのノードデータとは、湧き出しノードS又は引き出し対象セルの入り口ノードのノードデータである。また、探索ターゲットフラグ(tFlag)がtrueのノードデータとは、流入ノードT又は出口セルの出口ノードのノードデータである。したがって、湧き出しノードS、引き出し対象セルの入り口ノード、流入ノードT、及び出口セルの出口ノードを除く全てのノードのノードデータに関してステップS4−109−3の処理が実行される。
続いて、最短経路探索部1221aは、変数pathFの値をfalseに初期化する(S4−109−4)。
続いて、最短経路探索部1221aは、枝データcEdgeの始点ノードID(sN)をcurrentVに代入し、枝データcEdgeの終点ノードID(eN)をnextVに代入する(S4−109−5)。枝データcEdgeは、湧き出しノードSから引き出し対象セルの入り口ノードへの有向枝の枝データである。したがって、currentVは、湧き出しノードSのノードIDを示す。また、nextVは、引き出し対象セルの入り口ノードのノードIDを示す。
続いて、最短経路探索部1221aは、引き出し対象セルの入り口ノードのノードデータ(ノードデータ配列v[nextV])のメンバ変数の値を更新する(S4−109−6)。具体的には、ラベル伝播元ノードID(pID)にcurrentVの値が代入される。また、最短経路長(dist)に枝データcEdgeの枝の長さ(eLen=1)が代入される。また、ラベルフロントフラグ(lFrontF)にtrueが代入される。lFtontFがtrueとされることにより、当該ノードデータが経路探索においてラベルフロント(最前線)に位置することが識別される。また、最短経路探索部1221aは、当該ノードデータを変数lFrontListに追加する。変数lFrontListは、経路探索において最前線に位置するノードのノードデータの一覧を格納するための変数である。
続いて、最短経路探索部1221aは、変数lFrontListから最短経路長(dist)の値が最小のノードデータcvを取り出し、経路探索のラベリングを行う(S4−109−7)。なお、変数lFrontListから取り出されたノードデータは、変数lFrontListより除去される。続いて、最短経路探索部1221aは、変数lFrontListにノードデータが残っているか否かを判定する(S4−109−8)。ノードデータが残っている場合(S4−109−8でYes)、最短経路探索部1221aは、変数lFrontListからノードデータが無くなるまでステップS4−109−7を繰り返し実行する。
変数lFrontListにノードデータが残っていない場合(S4−109−8でNo)、最短経路探索部1221aは、変数pathFの値はtrueであるか否かを判定する(S4−109−9)。変数pathFの値は、ステップS4−109−7における経路探索において、目的地点のノード、すなわち、出口セルの出口ノードまで到達した場合にtrueとされる。
変数pathFの値がtrueの場合(S4−109−9でYes)、バックトレース部1222bは、経路探索の結果をバックトレースし、探索された経路において使用された有向枝のフロー(flow)と残余(res)とを更新する(S4−109−10)。ステップS4−109−10、又はステップS4−109−9でNoの場合に続いて、ステップS4−109−1以降が繰り返し実行される。ステップS4−109−1においてフロー(flow)枝データcEdgeが取得できなかったら(S4−109−2でNo)、図77の処理は終了する。
続いて、図77のステップS4−109−7の詳細について説明する。図78は、経路探索のラベリング処理の処理手順を説明するためのフローチャートである。
ステップS4−1097−1において、最短経路探索部1221aは、変数iを0に初期化する。続いて、最短経路探索部1221aは、枝データcrrEdgeにノードデータcv(経路探索において最前線に居るノードデータの1つ)に接続しているいずれかの枝データを代入する。枝データcrrEdgeは、図78において処理対象とされる枝データである。枝データ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の値は、ステップS4−1097−2以降のループが実行されるたびにインクリメントされる。したがって、ステップS4−1097−2以降では、ループの回数に応じて処理対象とされる枝データcrrEdgeが順番に変化する。
続いて、最短経路探索部1221aは、枝データcrrEdgeの値が空であるか否かを判定する(S4−1097−3)。枝データcrrEdgeが空でない場合(S4−1097−3でNo)、最短経路探索部1221aは、ノードデータcVの最短経路長(dist)に枝データcrrEdgeの枝の長さ(eLen)を加算した値を変数Dに代入する(S4−1097−4)。変数Dの値は、枝データcrrEdgeにおいてノードデータcvの他方に位置するノードデータの経路長を示す。但し、当該経路長が最短経路長であることは確定されていない。
続いて、最短経路探索部1221aは、変数Dの値が流入ノードTの最短経路長(dist)より小さいか否かを判定する(S4−1097−5)。なお、流入ノードTまでの経路が探索されるまでは流入ノードTの最短経路長(dist)の値はdistMax(最大値)である。
続いて、最短経路探索部1221aは、ノードデータcvに係るノードは枝データcrrEdgeの始点ノードであり、かつ、枝データcrrEdgeの残余(res)の値が0より大きく、かつ、枝データcrrEdgeに係る有向枝の終点ノードのノードデータの最短経路長(dist)は変数Dより大きいか否かを判定する(S4−1097−6)。
この判定は、ノードデータcvに係るノードが枝データcrrEdgeの始点ノードである場合において、枝データcrrEdgeに係る有向枝が目的地点までの最短経路を構成する有向枝となりうるか否か(当該有向枝の先を探索する価値は有るか否か)の判定に相当する。すなわち、枝データcrrEdgeの残余が0であれば、当該枝データcrrEdgeを経路として使うことはできないからである。また、枝データcrrEdgeの終点ノードの最短経路長(dist)の値が変数Dの値以下であれば、これから探索しようとする当該終点ノードまでの経路は最短経路ではないからである。なお、特定のノード以外のノードデータの最短経路長(dist)は、図77のステップS4−109−3においてdistMaxに初期化されている。したがって、少なくとも最初の探索時において、ノードデータcvに係るノードが枝データcrrEdgeの始点ノードである場合は、ステップS4−1097−6の判定はYesとなる。
ステップS4−1097−6でYesの場合、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードデータの最短経路長(dist)の値を変数Dの値によって更新する。また、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードデータのラベル伝播元ノードID(pID)の値をノードデータcVのノードIDによって更新する(S4−1097−7)。
続いて、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードデータの探索ターゲットフラグ(tFlag)がtrueであるか否か、すなわち、当該終点ノードが出口セルの出口ノード(目的地点のノード)であるか否かを判定する(S4−1097−8)。枝データcrrEdgeの終点ノードのノードデータの探索ターゲットフラグ(tFlag)がtrueの場合(S4−1097−8でYes)、最短経路探索部1221aは、目的地点まで到達したとして変数pathFの値をtrueとする(S4−1097−9)。また、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードIDを流入ノードTのノードデータの伝播元ノードIDに記録する(S4−1097−10)。
ステップS4−1097−10、又はステップS4−1097−8でNoの場合に続いて、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードデータのラベルフロントフラグ(lFrontF)の値がfalseであり、かつ、当該ノードデータの探索ターゲットフラグ(tFlag)がfalseであるか否かを判定する(S4−1097−11)。すなわち、枝データcrrEdgeの終点ノードは経路探索の最前線とされていない否か、及び当該終点ノードは出口セルの出口ノード(すなわち、目的地点のノード)でないか否かが判定される。
ステップS4−1097−11でYesの場合、最短経路探索部1221aは、枝データcrrEdgeの終点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S4−1097−12)。これにより、当該終点ノードが経路探索の最前線のノードの一つとされる。
一方、ステップS4−1097−6でNoの場合、最短経路探索部1221aは、ノードデータcvに係るノードは枝データcrrEdgeの終点ノードであり、かつ、枝データcrrEdgeのフロー(flow)の値が0より大きく、かつ、枝データcrrEdgeに係る有向枝の始点ノードのノードデータの最短経路長(dist)は変数Dより大きいか否かを判定する(S4−1097−13)。
この判定は、ノードデータcVに係るノードから枝データcrrEdgeの終点ノードへの向きが枝データcrrEdgeの有向枝の向きに逆行(逆流)する場合において、枝データcrrEdgeに係る有向枝が目的地点までの最短経路を構成する有向枝となりうるか否か(当該有向枝の先を探索する価値は有るか否か)の判定に相当する。ここで、逆行は、枝データcrrEdgeに係る有向枝が既に最短経路も利用されている場合、すなわち、枝データcrrEdgeのフロー(flow)が0より大きい場合に限り許可される。逆行の意義及び既に最短経路に利用されている有向枝についてのみ逆行が許可される理由については後述する。
ステップS4−1097−13でYesの場合、最短経路探索部1221aは、枝データcrrEdgeの始点ノードのノードデータの最短経路長(dist)の値を変数Dの値によって更新する。また、最短経路探索部1221aは、枝データcrrEdgeの始点ノードのノードデータのラベル伝播元ノードID(pID)の値をノードデータcVのノードIDによって更新する(S4−1097−14)。
続いて、最短経路探索部1221aは、枝データcrrEdgeの始点ノードのノードデータのラベルフロントフラグ(lFrontF)の値がfalseであり、かつ、当該ノードデータの探索ターゲットフラグ(tFlag)がfalseであるか否かを判定する(S4−1097−15)。すなわち、枝データcrrEdgeの始点ノードは経路探索の最前線とされていない否か、及び当該始点ノードは出口セルの出口ノード(すなわち、目的地点のノード)でないか否かが判定される。
ステップS4−1097−15でYesの場合、最短経路探索部1221aは、枝データcrrEdgeの始点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S4−1097−16)。これにより、当該始点ノードが経路探索の最前線のノードの一つとされる。
ステップS4−1097−15でYesの場合、最短経路探索部1221aは、枝データcrrEdgeの始点ノードのノードデータを変数lFrontListに追加し、当該ノードデータのラベルフロントフラグ(lFrontF)をtrueとする(S4−1097−16)。これにより、当該始点ノードが経路探索の最前線のノードの一つとされる。
ステップS4−1097−16、ステップS4−1097−15でNoの場合、ステップS4−1097−13でNoの場合、ステップS4−1097−12、ステップS4−1097−11でNoの場合、又は、ステップS4−1097−5でNoの場合に続いて、最短経路探索部1221aは、変数iをインクリメントする(S4−1097−17)。続いて、最短経路探索部1221aは、変数iの値が9に達したか否かを判定する(S4−1097−18)。ここで、変数iを9と比較するのは、一つのノードに接続されうる最大の有向枝の数は9本だからである。より具体的には、ステップS4−1097−2を介して、枝データcVのメンバ変数として含まれる全ての枝データに関して処理が完了した場合、変数iの値は9となるからである。
変数iの値が9でない場合(S4−1097−18でNo)、最短経路探索部1221aは、ステップS4−1097−2以降を繰り返す。変数iの値が9である場合(S4−1097−18でYes)、最短経路探索部1221aは、図78の処理を終了させる。
なお、図78の処理が実行されることにより、経路探索の最前線はノードデータcVと有向枝で接続されているノードのうち、最短経路である可能性がある次のノードへと移動する(当該次ノードは複数存在しうる。)。続いて、当該次のノードを対象として、再帰的に図78の処理が実行される。再帰的に図78の処理が実行されることにより、最前線のノードに接続されている有向枝が一つずつ辿られ最短経路が探索される。探索された経路に係るノードデータには、ラベル伝播元ノードID(pID)及び最短距離長(dist)の値が記録されている。
但し、各ノードデータのメンバ変数(pID、dist、lFrontF)の値は、図77のステップS4−109−1において処理対象の枝データcEdgeが変化する度に初期化される(S4−109−3)。したがって、湧き出しノードSから引き出し対象セルへの有向枝ごとに、各ノードデータのpID、dist、及びlFrontFは変化しうる。
続いて、図77のステップS4−109−10の詳細について説明する。図79は、バックトレース処理の処理手順を説明するためのシーケンス図である。ところで、ステップS4−109−10(図79の処理)は、変数lFlontListにノードデータが無く(S4−109−8でNo)、かつ、変数pathFの値がtrueのとき(S4−109−9でYesの場合)に実行される。すなわち、一つの引き出し対象セルの入り口ノード(引き出し対象ノード)から出口セルの出口ノードまでの間の最短経路の探索が完了したときに実行される。図79では、探索された最短経路を流入ノードTからのバックトレースによって、当該最短経路に使用された有向枝のフロー(flow)及び残余(res)が更新される。
ステップS4−1090−1において、バックトレース部1222bは、流入ノードTのノードデータ(ノードデータ配列v[vertexNum−1])のラベル伝播元ノードID(pID)を変数parNに代入する。変数parNをノードIDとするノードを図79において「親ノード」という。また、バックトレース部1222bは、親ノードのノードデータ(ノードデータ配列v[parN])のラベル伝播元ノードID(pID)を変数ancNに代入する。変数ancNをノードIDとするノードを図79において「祖先ノード」という。
続いて、バックトレース部1222bは、親ノードのノードデータ(ノードデータ配列v[parN])に登録されている各枝データ(eBros、eE、eW、eS、eN、eNE、eNW、eSE、eSW)の中から変数parNをノードIDとするノードと変数ancNをノードIDとするノードとを両端点とする枝データを検索し、検索された枝データを枝データsegとする(S4−1090−2)。
続いて、バックトレース部1222bは、枝データsegの始点ノードID(sN)の値が変数ancNの値と一致し、かつ、枝データsegの終点ノードID(eN)の値が変数parNの値と一致するか否かを判定する(S4−1090−3)。すなわち、枝データsegの向きと、ラベル伝播の方向とが一致しているか否かが判定される。
ステップS4−1090−3でYesの場合、バックトレース部1222bは、枝データsegのフロー(flow)に1を加算する。また、バックトレース部1222bは、枝データsegの残余(res)の値を{容量(cap)−フロー(frow)}の計算結果で更新する(S4−1090−4)。すなわち、枝データsegに係る有向枝が、最短経路に利用されたことが記録される。
一方、ステップS4−1090−3でNoの場合、バックトレース部1222bは、枝データsegの始点ノードID(sN)の値が変数parNの値と一致し、かつ、枝データsegの終点ノードID(eN)の値が変数ancNの値と一致するか否かを判定する(S4−1090−4)。すなわち、ラベル伝播の方向が枝データsegの向きに対して逆行しているか否かが判定される。このような状況(ラベル伝播の方向が枝データsegの向きに逆行する状況)は、図78においてステップS4−1097−14が実行された場合に発生する。
ステップS4−1090−6でYesの場合、バックトレース部1222bは、枝データsegのフロー(flow)より1を減算する。また、バックトレース部1222bは、枝データsegの残余(res)の値を{容量(cap)−フロー(frow)}の計算結果で更新する(S4−1090−6)。その結果、残余(res)の値は増加する。すなわち、枝データsegに係る有向枝が最短経路に利用されたことの記録が1つ分除去される。
ステップS4−1090−4、ステップS4−1090−6、又はステップS4−1090−5でNoの場合に続いて、バックトレース部1222bは、祖先ノードのノードデータ(ノードデータ配列v[ancN])の探索ソースフラグ(sFlag)がtrueであるか否か、すなわち、引き出し対象セルの入り口ノードまでバックトレースが完了したか否かを判定する(S4−1090−7)。バックトレースが完了していない場合(S4−1090−7でNo)、バックトレース部1222bは、バックトレースを一枝分進める(S4−1090−8)。具体的には、変数parNに変数ancNの値が代入される。また、変数ancNにはこれまで祖先ノードだったノードデータ(v[parN])のラベル伝播元ノードID(pID)が代入される。続いて、バックトレース部1222bは、ステップS4−1090−2を繰り返し実行する。
バックトレースが完了した場合(S4−1090−7でYes)、バックトレース部1222bは、図79の処理を終了させる。
ここで、ステップS4−1090−6の処理の意味について説明する。当該ステップは、有向枝の向きに逆行して経路探索が行われた場合(図78のステップS4−1097−14が実行された場合)に実行される。
図80は、有向枝の向きに逆行して経路探索された状態を示す模式図である。同図において、実線の矢印は有向枝を示す。小文字のアルファベットはノードを示す。ノード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のバックトレース後に、図77及び図78の処理によって探索された経路である。経路hにおいて破線の矢印で示される部分(f→e区間)は、有向枝efの向きに逆行している。
斯かる経路hに関してバックトレース(図79)の処理が行われる場合、親ノードがfで祖先ノードがeのときにステップS4−4090−6が実行される。当該ステップでは、有向枝efのフロー(flow)の値が1減算され、0となる。その結果、有向枝efは、経路a及び経路hのいずれからも利用されないことになる。その後、f→i→hの順でバックトレースが行われ、有向枝hi、有向枝ifのフロー(flow)は1とされる。この時点でいずれかの経路に利用されている有向枝(フローの値が1以上である有向枝)は図81に示される通りである。
図81は、有向枝の向きに逆行して経路探索された場合にバックトレースが実行された結果の例を示す模式図である。
同図では、引き出し対象のノード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が形成されたのである。
このように有向枝の向きに逆行して経路探索された場合は、一部の経路の入れ替えが行われることにより、入れ替え前と同じ本数(図80及び図81の例では2本)の経路が確保される。但し、逆行対象とされる有向枝は、フロー(flow)の値が1以上である(すなわち、既に他の経路に利用されている)必要がある。そうでなければ、一部の経路の入れ替えは不可能だからである。
以上で図72のステップS4−10−9の説明は終了する。この時点における処理結果の一例は、図73に示した通りである。同図では、有向グラフ上には6本分の経路が確保されている。具体的には、6本分の経路に利用された各有向枝の枝データには容量(cap)の範囲内でフロー(flow)の値(使用回数)が記録されている。但し、この時点では、各有向枝のフローがどの配線に割り当てられるかは特定されていない。すなわち、引き出し配線の概略経路は確定されていない。続くステップS3では、各有向枝のフローが配線に分配されることにより概略経路が確定される。
続いて、図72のステップS4−10−10の詳細について説明する。図82は、概略経路の確定処理を説明するためのフローチャートである。
ステップS4−1010−1において、概略経路確定部1222は、引き出し順位path_orderを0に初期化する。引き出し順位path_orderは、各配線の引き出し順を管理するための変数である。続いて、概略経路確定部1222は、配線数分の引き出し順データを補助記憶装置102に生成する(S4−1010−2)。配線数は、例えば、ネットリスト141に基づいて判定される。すなわち、ネットリスト141には、引き出し対象のピンのピンIDの一覧が含まれている。したがって、当該ピンIDの個数を配線数として利用することができる。
図83は、引き出し順データの構成例を示す図である。同図に示されるように、一つの引き出し順データは、ネットID(netID)及び引き出し順位(order)等のメンバ変数(データ項目)を有する。ネットID(netID)は、配線のネットIDである。引き出し順位(order)は、ネットIDによって識別される配線の引き出し順位(順番)である。このように、一つの引き出し順データでは、一つの配線の引き出し順位を管理することができる。したがって、配線数分の引き出し順データが生成されることにより、各配線の引き出し順がそれぞれの引き出し順データによって管理される。
続いて、概略経路確定部1222は、セル行列における北側を出口とする探索経路(ステップS4−10−9で探索された経路)の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S4−1010−3)。
続いて、概略経路確定部1222は、概略経路確定部1222は、セル行列における東側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S4−1010−4)。
続いて、概略経路確定部1222は、セル行列における南側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S4−1010−5)。
続いて、概略経路確定部1222は、セル行列における西側を出口とする探索経路の各有向枝のフロー(flow)を配線に分配することにより当該配線の概略経路を確定する(S4−1010−6)。
続いて、ステップS4−1010−3〜S4−1010−6の詳細について説明する。ここでは、代表してステップS4−1010−4の詳細について説明する。
図84は、セル行列の東側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。図84の処理手順は、図74を参照しながら説明する。なお、本実施の形態では、セル行列の外周において時計回りに探索経路の出口が探索される。したがって、東側については、セル行列の東端列に属するセルについて、北端行から南端行に向かって探索経路の出口が探索される。
ステップS4−1014−1において、概略経路確定部1222は、変数cの値をcolMax−1によって初期化する。変数cは、セルデータ配列cellにおいて処理対象とする要素(セルデータ)に対する添え字である。また、colMaxはセルの列数である。したがって、セルデータ配列cellにおいて変数cの初期値(colMax−1)を添え字とするセルデータ(cell[c])は、東端列において北端行のセルのセルデータである。
続いて、ステップS4−1014−2、S4−1014−3、S4−1014−14、及びS4−1014−15では、探索経路の出口となっているセルが探索される。
すなわち、ステップS4−1014−2において、概略経路確定部1222は、処理対象のセルデータの出口フラグ(exitF)がfalseであるか(すなわち、当該セルデータが外周のセルでないか)、又は当該セルデータの容量(cap)の値が0以下であるかを判定する。
ステップ3−4−2でNoの場合、概略経路確定部1222は、当該セルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros)のフロー(flow)が0より大きいか否かを判定する(S4−1014−3)。
ステップS4−1014−2でYesの場合、又はステップS4−1014−3でNoの場合は処理対象のセルデータは探索経路の出口となっていないセルのセルデータである。したがって、概略経路確定部1222は、変数cの値にcolMaxを加算し、東端列の次の行のセルのセルデータを処理対象とする(S4−1014−14)。続いて、概略経路確定部1222は、変数cの値がセルIDの最大値以下であるか否か、すなわち、東端列において未処理の行は残っているか否かを判定する(S4−1014−15)。未処理のセルが残っている場合(S4−1014−15でYes)、概略経路確定部1222は、ステップS4−1014−2以降を繰り返す。
ステップS4−1014−3でYesの場合、処理対象のセルデータは探索経路の出口となっているセルのセルデータである。そこで、概略経路確定部1222は、当該セルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros)を変数pathEdgeによって参照する(S4−1014−4)。なお、図74の場合、最初に7行目のセルE1のセル内の有向枝e1の枝データがpathEdgeによって参照される。以下、pathEdgeによって参照される枝データを「枝データpathEdge」という。なお、枝データpathEdgeに対する変更は、pathEdgeによって参照される枝データ(ここでは、処理対象のセルデータの出口ノードのノードデータの相棒ノードとの有向枝(eBros))への変更を意味する。
続いて、概略経路確定部1222は、枝データpathEdgeのフロー(flow)に対応する線分データを生成する(S4−1014−5)。
図85は、線分データの生成処理の処理手順を説明するためのフローチャートである。
ステップS4−10L−1において、概略経路確定部1222は、線分データsegを一つメモリ装置103に生成する。
図86は、線分データの構成例を示す図である。同図に示されるように、一つの線分データは、概略経路を構成する線分を表現するデータであり、始点ノードID(sN)、終点ノードID(eN)、ネットID(netID)、及び引き出し順位(order)等のメンバ変数(データ項目)を有する。
始点ノードID(sN)は、線分データの始点ノードのノードIDである。終点ノードID(eN)は、線分データの終点ノードのノードIDである。ネットID(netID)は、線分データが属する概略経路が対応する配線のネットIDである。引き出し順位(order)は、線分データが属する概略経路が対応する配線の引き出し順位である。
続いて、概略経路確定部1222は、線分データsegの始点ノードID(sN)に、枝データpathEdgeの始点ノードID(sN)の値を記録する(S4―2)。続いて、概略経路確定部1222は、線分データsegの終点ノードID(eN)に、枝データpathEdgeの終点ノードID(eN)の値を記録する(S4−10L−3)。続いて、概略経路確定部1222は、線分データsegをcurrentSegリストに追加する(S4−10L−4)。currentSegリストは、一本分の概略経路を構成する線分データの集合(リスト)を格納するためのデータ又はレコードであり、例えば、メモリ装置103に生成される。
図84に戻る。ステップS4−1014−5に続いてステップS4−1014−6に進み、概略経路確定部1222は、枝データpathEdgeのフロー(flow)の値を1減らす。ステップS4−1014−5及びS4−1014−6により、枝データpathEdgeのフロー(flow)が概略経路の線分として有向枝より分離されたことになる。
続いて、概略経路確定部1222は、枝データpathEdgeの始点ノードのノードデータの探索ソースフラグ(sFlag)がtrueであるか否かを判定する(S4−1014−7)。すなわち、引き出し対象セルの入り口ノード(配線の起点)まで遡ったか否かが判定される。本実施の形態において最初にステップS4−1014−7が実行される段階では有向枝e1の始点ノードまでしか遡っていないため、この判定はNoとなる。
ステップS4−1014−7でNoの場合、概略経路確定部1222は、枝データpathEdgeの始点ノードを終点ノードとする有向枝であって、フロー(flow)の値が0より大きい有向枝の枝データを当該始点ノードに接続されている有向枝の中から1本検索し、検索された有向枝を新たにpathEdgeによって参照する(S4−1014−10)。ここで、有向枝の検索では、複数の有向枝が候補として存在する場合は有向枝の遡りの進行方向の右側に有る方が優先的に選択される。具体的には、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)の順で検索される。
遡りの進行方向の右側が優先されるのは、配線が他の配線と交差しないことを保障するためである。すなわち、本実施の形態では、探索経路の出口の探索がセル行列の外周において時計回り行われる。斯かる前提において、遡り方向において右側の有向枝を優先的に選択すれば、当該概略経路より右側の概略経路は生成されることはない。したがって、例えば、探索経路の出口の探索がセル行列の外周において反時計回りに行われる場合、遡りの進行方向の左側に有る方を優先的に選択すればよい。
なお、図74において最初にステップS4−1014−10が実行される段階では、有向枝e2が検索され、pathEdgeによって参照される。
続いて、概略経路確定部1222は、新たな枝データpathEdgeのフロー(flow)について線分データを生成する(S4−1014−11)。当該ステップの処理内容は、図85において説明した通りである。続いて、概略経路確定部1222は、枝データpathEdgeのフロー(flow)の値を1減らす(S4−1014−12)。続いて、概略経路確定部1222は、枝データpathEdgeの始点ノードの相棒ノードとの有向枝(eBros)を新たにpathEdgeによって参照する(S4−1014−13)。図74において最初にステップS4−1014−13が実行される段階では、有向枝e3がpathEdgeによって参照される。
以降、枝データpathEdgeの始点ノードが引き出し対象セルの入り口ノードに到達するまでステップS4−1014−10〜S4−1014−13が繰り返される。その結果、図74では、既に線分データが生成された有向枝e1、e2に続いてe3、e4、e5、e6、e7、e8、e9、e10、e11、e12、e13、e14、e15、e16のフロー(flow)に基づいて線分データが生成され、currentSegリストに登録される。
有向枝e17が枝データpathEdgeとされると、ステップS4−1014−7でYesとなる。ステップS4−1014−7でYesの場合、概略経路確定部1222は、線分データの保存処理を実行する(S4−1014−8)。
図87は、線分データの保存処理の処理手順を説明するためのフローチャートである。
ステップS4−10s−1において、概略経路確定部1222は、枝データpathEdgeの始点ノードのノードデータのオーナーセルのセルデータのネットID(netID)の値を取得し、変数NIDに代入する(S4−10s−1)。図74において最初にステップS4−10s−1が実行される段階では、セルS1のセルデータのネットID(netID)が変数NIDに代入される。
続いて、概略経路確定部1222は、currentSegリストに登録されている各線分データsegのネットID(netID)にNIDの値を記録し、引き出し順位(order)にpath_orderの値(初期値は0)を記録する(S4−10s−2)。
続いて、概略経路確定部1222は、currentSegリストに登録されている各線分データを補助記憶装置102に保存する(S4−10s−3)。
続いて、概略経路確定部1222は、path_order番目の引き出し順データのネットID(netID)にNIDの値を記録し、引き出し順位(order)にpath_orderの値を記録する。
図87の処理によって、1本分の概略経路に関する線分データと引き出し順位とが補助記憶装置102に保存される。なお、線分データは、配線がどのピン間を通過するかを示す情報であり、引き出し順位は、各配線の相対的な位置関係を示す情報である。
図84に戻る。ステップS4−1014−8に続いてステップS4−1014−9に進み、概略経路確定部1222は、path_orderの値をインクリメントする。続いて、概略経路確定部1222は、ステップS4−1014−3を実行する。ここで、探索経路の出口とされている次のセルを探索せずに、現在処理対象とされているセルデータについて再度ステップS4−1014−3を実行するのは、現在処理対象のセルデータに係るセル内の有向枝(図74では有向枝e1)にフロー(flow)が残っている可能性があるからである。当該有向枝にフロー残っている場合(S4−1014−3でYes)、ステップS4−1014−4以降が実行される。その結果、図74では、有向枝e1、e2、e3、e4、e5、e6、e7、e8、e9、e10、e11、e12、e13、e14、e15、e21、e22、及びe23のフローに基づいて線分データが生成され、保存される。すなわち、2番目に引き出されるべき配線の概略経路が確定される。
セルE1の有向枝e1にフロー(flow)が残っていない場合(S4−1014−3でNo)、次の行のセルE2が処理対象とされる(S4−1014−14)。セルE2についてステップS4−1014−4以降が実行されることにより、有向枝e31、e32、e33、e34、e35、e36、e5、e37、e38、e39、e40、及びe41のフローに基づいて線分データが生成され、保存される。すなわち、3番目に引き出されるべき配線の概略経路が確定される。
以降、ステップS4−1014−2以降が繰り返し実行されることにより、本実施の形態(図74)では、合計6本分の概略経路が生成される。すなわち、本実施の形態の概略配線は完了する。詳細配線の段階では、線分データと引き出し順位とに基づいて、各配線の物理的な位置を決定すればよい。
なお、図82のステップS4−1010−3、S4−1010−5、及びS4−1010−6処理手順は、図84より自明であるため、フローチャートのみを示し、詳細な説明は省略する。
図88は、セル行列の北側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図88は、ステップS4−1010−3を詳細に説明するフローチャートである。図88では、セル行列の北端行に属するセルについて、西端列から東端列に向かって(すなわち、時計回りに)探索経路の出口が探索される(S4−1013−1、S4−1013−14、及びS4−1013−15参照)。
また、ステップS4−1013−10では、遡りの進行方向の右側に有る方を優先的に選択するため、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)の順で有向枝が検索される。
また、図89は、セル行列の南側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図89は、ステップS4−1010−5を詳細に説明するフローチャートである。図89では、セル行列の南端行に属するセルについて、東端列から西端列に向かって(すなわち、時計回りに)探索経路の出口が探索される(S4−1015−1、S4−1015−14、及びS4−1015−15参照)。
また、ステップS4−1015−10では、遡りの進行方向の右側に有る方を優先的に選択するため、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)の順で有向枝が検索される。
また、図90は、セル行列の西側を出口とする探索経路に基づく概略経路の確定処理の処理手順を説明するためのフローチャートである。すなわち、図90は、ステップS4−1010−6を詳細に説明するフローチャートである。図90では、セル行列の西端列に属するセルについて、南端行から北端行に向かって(すなわち、時計回りに)探索経路の出口が探索される(S4−1016−1、S4−1016−14、及びS4−1016−15参照)。
また、ステップS4−1016−10では、遡りの進行方向の右側に有る方を優先的に選択するため、西隣セルのノードとの有向枝(eW)、南西セルのノードとの有向枝(eSW)、南隣セルのノードとの有向枝(eS)、南東セルのノードとの有向枝(eSE)、東隣セルのノードとの有向枝(eE)、北東セルのノードとの有向枝(eNE)、北隣セルのノードとの有向枝(eN)、北西セルのノードとの有向枝(eNW)、の順で有向枝が検索される。
なお、上記では、セル行列の外周のセルを全て走査して探索経路の出口を探索する例を示した。しかし、流入ノードTと有向枝によって接続されているノードを探索経路の出口とし、当該ノードから有向枝を遡るようにしてもよい。当該ノードは、流入ノードTのノードデータのtagetEdgeListに登録されている枝データに基づいて特定することができる。当該ノードが複数存在する場合、セル行列の外周における一定方向(本実施の形態では時計回りの方向)に従って、遡るノードを順番に選択すればよい。
続いて、図72のステップS4−10−11の詳細について説明する。
図91は、着目バスに関する配線の引き出しの成否の判定処理及び引き出し経路情報の保存処理の処理手順を説明するためのフローチャートである。
ステップS4−1011−1において、引き出し成否判定部1223は、着目バスの全ての所属ネットについて配線を引き出せたか否かを判定する。当該判定は、着目バスのバス情報Bのネット数n分の配線が、流入ノードTに到達したか否かに基づいて行えばよい。流入ノードTに到達した配線の数は、流入ノードTを終点ノードとする枝データのフロー(flaw)の合計である。
着目バスの全ての所属ネットについて配線を引き出せた場合(S4−1011−1でYes)、引き出し成否判定部1223は、変数requestNに0を代入する(S4−1011−2)。変数requestNは、図72のステップS4−10−12における変数requestNと同一の実体である。続いて、引き出し成否判定部1223は、着目バスのバス情報Bの引出成功回数nEscの値に1を加算する(S4−1011−3)。着目バスの全所属ネットについて、一端の部品(着目部品)からの引き出しに成功したからである。
続いて、引き出し成否判定部1223は、補助記憶装置102に保存されている全ての線分データ(図86)を、セル系線分データに変換する(S4−1011−4)。
図92は、セル系線分データの構成例を示す図である。同図に示されるように、セル系線分データは、始点列番号(x1)、始点行番号(y1)、終点列番号(x2)、終点行番号(y2)、層番号(layer)、ネットID(netID)、及び次データ(next)等のメンバ変数(データ項目)を有する。
始点列番号(x1)は、線分の始点のセル行列における列番号である。終点行番号(y1)は、線分の始点のセル行列における行番号である。終点列番号(x2)は、線分の終点のセル行列における列番号である。終点行番号(y2)は、線分の終点のセル行列における行番号である。層番号(layer)は、線分が対応するネット(配線)が属する層の層番号である。次データ(next)は、セル系線分データのリスト構造を形成するための、次のセル系線分データへのポインタである。
このように、セル系線分データは、線分の始点及び終点をセルの行番号及び列番号によって線分を特定するデータである。一方、線分データ(図86)は、有向グラフのノードによって線分を特定するデータである。したがって、ステップS4−1011−4では、ノードに基づく座標系からセル行列の座標系への変換が行われる。
続いて、引き出し成否判定部1223は、引き出し経路データePathを一つメモリ装置103に生成する(S4−1011―5)。
図93は、引き出し経路データの構成例を示す図である。同図において、引き出し経路データePathは、バスの所属ネットの配線の引き出し経路を示すデータであり、バスID(bus)、部品ID(part)、層番号(layer)、経路線分リスト(segList)等のメンバ変数(データ項目)を有する。
バスID(bus)は、引き出し経路に係るバスのバスIDである。部品ID(part)は、引き出し経路に係る部品の部品IDである。層番号(layer)は、引き出し経路に係る層の層番号である。経路線分リストは、配線の引き出し経路を示すセル系線分データのリストの先頭のセル系線分データへのポインタである。
続いて、引き出し成否判定部1223は、生成された引き出し経路データePathの各メンバ変数に値を代入する(S4−1011−6)。具体的には、バスID(bus)に変数FLAVORの値(着目バスのバスID)が代入される。部品ID(part)に着目部品の部品IDが代入される。層番号(layer)に着目層Lの層番号が代入される。経路線分リスト(segList)に、ステップS4−1011−4における変換によって生成されたセル系線分データのリストへのポインタが代入される。
一方、着目バスの少なくとも一部の所属ネットについて配線を引き出せなかった場合(S4−1011−1でNo)、引き出し成否判定部1223は、着目バスのバス情報Bのネット数nから流入ノードTに到達した配線数を減じた値を変数reuqestNに代入する(S4−1011−7)。
続いて、ステップS4−1011−4の詳細について説明する。図94は、線分データからセル系線分データへの変換処理の処理手順を説明するためのフローチャートである。
ステップS4−10CL−1において、引き出し成否判定部1223は、線分データの総数分のセル系線分データを生成する。続いて、線分データの総数が0で無い場合(S4−10CL−2でNo)、引き出し成否判定部1223は、ステップS4−10CL−3及びS4−10CL−4を実行する。
ステップS4−10CL−3において、引き出し成否判定部1223は、線分データごとに以下の処理を実行する。まず、線分データの始点ノードのオーナーセルと終点ノードのオーナーセルのセルIDとが同じか否かが判定される。同じであれば、次の線分データが処理対象とされる。始点ノードのオーナーセルと終点ノードのオーナーセルとが異なる場合、当該線分データに対応するセル系線分データのメンバ変数に値が代入される。すなわち、始点列番号(x1)に、線分データの始点ノードのオーナーセルの列番号が代入される。また、始点行番号(y1)に、線分データの始点ノードのオーナーセルの行番号が代入される。また、終点列番号(x2)に、線分データの終点ノードのオーナーセルの列番号が代入される。また、終点行番号(y2)に、線分データの終点ノードのオーナーセルの行番号が代入される。また、層番号(L)に、着目層Lの層番号が代入される。また、ネットID(netID)に、線分データのネットIDが代入される。
ステップS4−10CL−4において、引き出し成否判定部1223は、有効なセル系線分データをリスト構造に接続する。すなわち、各セル系線分データの次データ(next)に、次のセル系線分データのポインタが代入される。最後のセル系線分データの次データ(next)にはNULLが代入される。なお、有効なセル系線分データとは、ステップS4−10CL−3において、メンバ変数に値が代入されたセル系線分データである。
続いて、図72のステップS4−10−16の詳細について説明する。図95は、出口セルの追加処理の処理手順を説明するためのフローチャートである。同図の処理手順は、図62のステップS4−9413−9以降に類似している。
ステップS4−1016−1において、引き出し配線部122は、着目バスの配線脱出口部分のリーフセルを伸張するか否かを示すフラグ変数の値を初期化する(S4−1016−8)。具体的には、左回り(左方向)に伸張するか否かを示すフラグ変数L_ExpandFにTRUEが代入される。また、右回り(右方向)に伸張するか否かを示すフラグ変数R_ExpandFにTRUEが代入される。すなわち、最初は、両方向が伸張方向の候補とされる。また、出口セルの追加分として獲得できたセル数を記憶するための変数Gainが0に初期化される。また、出口セルの左端を記憶するための変数LeftPに、着目バスに対応する配線脱出口データGate(図63)の左端セル(LeftP)の値が代入される。また、出口セルの右端を記憶するための変数RightPに、着目バスに対応する配線脱出口データGate(図63)の右端セルRightPの値が代入される。
続いて、引き出し配線部122は、L_ExpandFの値がTRUEであるか否かを判定する(S4−1016−2)。L_ExpandFの値がTRUEでない場合(ステップS4−1016−2でNo)、ステップS4−1016−5に進む。L_ExpandFの値がTRUEである場合(S4−1016−2でYes)、引き出し配線部122は、着目バスの配線脱出口部分について左側へのリーフセルの伸張を試行する(S4−1016−3)。伸張に成功した場合、変数Gainの値が、伸張された分のセルの容量だけ増加され、変数LeftPの値が、伸張されたセルのセルデータへのポインタに更新される。伸張に失敗した場合、L_ExpandFの値はFALSEに更新される。
続いて、引き出し配線部122は、変数Gainの値が、変数requestN以上であるか否かを判定する(S4−1016−4)。すなわち、引き出せなかった配線数分の配線脱出口が追加されたか否かが判定される。変数Gainの値が、変数requestNの値以上である場合(S4−1016−4でYes)、引き出し配線部122は、リーフセルの伸張は終了させ、ステップS4−1016−8に進む。変数Gainの値が、変数requestNの値未満である場合(S4−1016−4でNo)、引き出し配線部122は、R_ExpandFの値がTRUEであるか否かを判定する(S4−1016−5)。
R_ExpandFの値がTRUEでない場合(ステップS4−1016−5でNo)、ステップS4−1016−7に進む。R_ExpandFの値がTRUEである場合(S4−1016−5でYes)、引き出し配線部122は、着目バスの配線脱出口部分について右側へのリーフセルの伸張を試行する(S4−1016−6)。伸張に成功した場合、変数Gainの値が、伸張された分のセルの容量だけ増加され、変数RightPの値が、伸張されたセルのセルデータへのポインタに更新される。伸張に失敗した場合、R_ExpandFの値はFALSEに更新される。
続いて、引き出し配線部122は、変数Gainの値が、変数requestNの値以上であるか否か、又はL_Expand及びR_Expandの双方の値がFALSEであるか否かを判定する(S4−1016−7)。変数Gainの値が、変数requestNの値未満であり、かつ、L_Expand及びR_Expandの少なくともいずれか一方の値がTRUEである場合(S4−1016−7でNo)、引き出し配線部122は、ステップS4−1016−2以降を繰り返す。
変数Gainの値が、変数requestNの値以上である場合、又はL_Expand及びR_Expandの双方の値がFALSEである場合(S4−1016−7でYes)、変数Gainの値が変数requestNの値未満であれば(S4−1016−8でNo)、引き出し配線部122は、変数statusにFALSEを代入する(S4−1016−9)。一方、変数Gainの値が変数requestNの値以上であれば(S4−1016−8でYes)、引き出し配線部122は、変数statusにTRUEを代入する(S4−1016−10)。続いて、引き出し配線部122は、着目バスに対応する配線脱出口データGateを更新する(S4−1016−11)。すなわち、当該配線脱出口データGateの防護壁色(flavor)に変数FLAVORの値が記録される。また、当該配線脱出口データGateの左端セル(LeftP)に変数LeftPの値が記録される。また、当該配線脱出口データGateの右端セル(RightP)に変数RightPの値が記録される。更に、当該配線脱出口データGateの容量(CAP)に、変数Gainの値が加算される。
なお、ステップS4−1016−3の詳細な処理手順は、図64を用いて説明した処理手順において変数CAPを変数Gainに置き換えたものでよい。同様に、ステップS4−1016−6の詳細な処理手順は、図65を用いて説明した処理手順において変数CAPを変数Gainに置き換えたものでよい。
以上で、ステップS4に関する詳細な説明は終了する。続いて、図3のステップS5の配線プラン生成部11による処理の詳細について説明する。
図96は、妥当性が肯定された配線プランの確定処理の処理手順を説明するためのフローチャートである。同図では、ステップS5−3〜S5−9が、バス情報記憶部D5に登録されたバスごと(バス情報Bごと)に実行される。
ステップS5−3において、配線プラン生成部11は、処理対象とされたバス(着目バス)のバス情報B(図8参照)の引出成功回数nEscの値が2であるか、又は経路固定フラグfixの値が「T」であるか否かを判定する。すなわち、着目バスの両端について全ての所属ネットの配線の引き出しに成功しているか、又はバス経路が固定であるか否かが判定される。
着目バスの両端について少なくとも一部の所属ネットの配線の引き出しに成功しておらず、かつ、着目バスのバス経路は固定でない場合(S5−3でNo)、配線プラン生成部11は、着目バスのバス情報Bの経路確定フラグaccの値を「F」とする(S5−4)。続いて、配線プラン生成部11は、着目バスのバス経路矩形情報BRをバス経路矩形情報記憶部D9より削除する(S5−5)。続いて、配線プラン生成部11は、バスID(bus)が着目バスのバスIDと一致する全ての引き出し経路データePathを削除する(S5−6)。
すなわち、着目バスの配線プランを再実行するため、今回着目バスについて生成されたバス経路矩形情報及び引き出し経路データePath等は削除される。
一方、着目バスの両端について全ての所属ネットの配線の引き出しに成功している場合、又は着目バスのバス経路が固定である場合(S5−3でYes)、配線プラン生成部11は、着目バスのバス情報Bの経路確定フラグaccの値を「T」とする(S5−7)。続いて、配線プラン生成部11は、着目バスに係るバス経路矩形情報BRのうち、ソース側又はターゲット側の部品内に含まれる部分(当該部品と重複する部分)をバス経路矩形情報記憶部D9より削除する(S5−8)。続いて、配線プラン生成部11は、バスID(bus)が着目バスのバスIDと一致する全ての引き出し経路データePathの経路線分リスト(segList)によって示される線分を配線領域における障害物として記録する(S5−9)。
すなわち、ステップS5−5及びS5−6において、部品と着目バスとが重複する部分について、単なる矩形情報から所属ネットごとの詳細な配線の経路を示す線分情報に置換される。そうすることにより、配線プランが未確定のバスについてステップS2以降が再実行される際に、より正確な障害物に基づいて、当該バスの経路を生成することができる。
続いて、ステップS5−5の詳細について説明する。図97は、バス経路矩形情報の削除処理の処理手順を説明するためのフローチャートである。配線プラン生成部11は、着目バスのバス情報Bの経路矩形リストsPにリンクされている各バス経路矩形情報BR(図12)についてステップS5−5−3及びS5−5−4を実行する(S5−5−1、S5−5−2、S5−5−5)。
ステップS5−5−3において、配線プラン生成部11は、処理対象とされたバス経路矩形情報BRをバス経路矩形情報記憶部D9より削除する(S5−5−3)。続いて、配線プラン生成部11は、着目バスのバス情報Bのバス経路矩形リストsPより当該バス経路矩形情報BRへのリンクを削除する(S5−5−4)。
続いて、図96のステップS5−8の詳細について説明する。図98は、部品内に含まれるバス経路矩形情報の削除処理の処理手順を説明するためのフローチャートである。配線プラン生成部11は、着目バスのバス情報Bの経路矩形リストsPにリンクされている各バス経路矩形情報BRについてステップS5−8−5〜S5−8−11を、着目バスのバス情報Bの接続対象部品群partsの要素ごとに実行する(S5−8−1〜S5−8−4、S5−8−10、S5−8−11)。着目バスのバス情報Bの接続対象部品群partsの要素ごととは、着目バスによって接続される二つの部品ごとを意味する。
ステップS5−8−5において、配線プラン生成部11は、処理対象の部品の領域が、処理対象のバス経路矩形情報BRに係る矩形を包含しているか否かを判定する。当該判定は、当該部品に係る部品情報PInfo(図7)の部品配置座標loc及び部品サイズに基づいて特定される矩形が、当該バス経路矩形情報BRの始点座標及び終点座標に基づいて特定される矩形を含むか否かに基づいて行われる。
当該部品の領域が当該バス矩形情報BRに係る矩形を包含している場合(S5−8−5でYes)、配線プラン生成部11は、当該バス経路矩形情報BRをバス経路矩形情報記憶部D9より削除する(S5−8−6)。続いて、配線プラン生成部11は、着目バスのバス情報Bのバス経路矩形リストsPより当該バス経路矩形情報BRへのリンクを削除する(S5−8−7)。
一方、当該部品の領域が当該バス矩形情報BRに係る矩形を包含していない場合(S5−8−5でNo)、配線プラン生成部11は、当該バス経路矩形情報BRに係る矩形の一部が当該部品の領域と重複しているか否かを判定する(S5−8−8)。当該判定については、ステップS5−8−5における判定方法より自明であるためその詳細は省略する。
当該バス経路矩形情報BRに係る矩形の一部が当該部品の領域と重複している場合(S5−8−8でYes)、配線プラン生成部11は、当該バス矩形情報BRに係る矩形を当該部品の内側に係る部分と外側に係る部分とに分割し、外側に係る部分を当該バス矩形情報BRとする(S5−8−9)。すなわち、当該バス矩形情報BRの始点座標又は終点座標が外側に係る部分を示す値に更新される。
一方、当該バス経路矩形情報BRに係る矩形の一部が当該部品の領域と重複していない場合(S5−8−8でNo)、配線プラン生成部11は、当該部品に関しては、当該バス矩形情報BRの更新は行わない。なお、この場合、当該バス矩形情報BRに係る矩形は、当該部品の外側に有る。
続いて、図96のステップS5−9の詳細について説明する。図99は、引き出し線の障害物としての登録処理の処理手順を説明するためのフローチャートである。
ステップS5−9−1において、配線プラン生成部11は、バスID(bus)の値が着目バスのバスIDと一致する引き出し経路データePath(図93)を抽出する。続いて、配線プラン生成部11は、抽出された引き出し経路データePathごとにステップS5−9−3〜S5−9−8を実行する(S5−9−1、S5−9−2、S5−9−9)。
ステップS5−9−3において、配線プラン生成部11は、処理対象の引き出し経路データePath(着目引き出し経路データePath)の層番号(layer)を変数layerに代入し、部品ID(part)を変数partIDに代入する。なお、変数layerに係る層を着目層layerといい、変数partIDに係る部品を着目部品partIDという。
続いて、配線プラン生成部11は、着目部品partIDの部品情報PInfo(図7)の部品配置情報locのx座標値、y座標値をそれぞれ変数PrtX、変数PrtYに代入する(S5−9−4)。
続いて、配線プラン生成部11は、着目部品partIDの部品情報PInfoのx方向のピンピッチIxを2で除した値を変数pitXに代入し、y方向のピンピッチIyを2で除した値を変数pitYに代入する(S5−9−5)。
続いて、配線プラン生成部11は、PrtXに着目部品partIDの部品情報Pnfoの左上ピン座標(offx)にPrtXを加算し、pitXを減算した値を変数orgCellXに代入する。また、配線プラン生成部11は、PrtYに着目部品partIDの部品情報Pnfoの左上ピン座標(offy)にPrtYを加算し、pitYを減算した値を変数orgCellYに代入する。すなわち、orgCellX及びorgCellYによって示される座標値は、着目部品の西端及び北端から、ピン間の半分だけ東側及び南側にずれた位置の実寸系の座標値である。当該座標値は、セル行列における1行1列のセルの実寸系の代表座標値とされる。
続いて、配線プラン生成部11は、着目引き出し経路データePathの経路線分リスト(segList)を変数segListに代入する(S5−9−7)。以下、変数segListに係るセル系線分データ(図92)のリストを、着目経路線分リストsegListという。
続いて、配線プラン生成部11は、着目経路線分リストsegListに含まれるセル系線分データごとに当該セル系線分データによって示される線分についてセル座標系から実寸系への座標変換を行い、障害物情報記憶部D2への記録(登録)を行う(S5−9−8)。
具体的には、処理対象とされたセル系線分データsegPのネットID(segP−>netID)と存在層(segP−>layer)をみて、segPを配線化したときに使うべき線幅WをWRuleから引きあて、その半分の幅をW2とする。segPが縦線の場合、処理対象とされたセル系線分データsegPの始点列番号から1を減じた値にpitX(x方向のピン間)を乗じた値をorgCellXに加算することにより、当該セル系線分データに係る線分の始点の実寸系におけるx座標値が算出され、変数xに代入される。
続いて、障害物情報記憶部D2(図6)に新たなレコードを一つ生成される。続いて、当該レコードの開始座標Sのx座標値にxから線幅の半分(W2)減じた値が代入される。また、当該レコードの終了座標Eのx座標値にxへ線幅の半分(W2)足した値が代入される。また、当該レコードの開始座標Sのy座標値は、segP−>y1とsegP−>y2の小さい方の値から1減じた値にpitY(y方向のピン間)を乗じた値をorgCellYに加算しW2減ずることにより計算され、yの値が代入される。また、当該レコードの終了座標Eのy座標値は、segP−>y1とsegP−>y2の大きい方の値から1減じた値にpitY(y方向のピン間)を乗じた値をorgCellYに加算しW2足すことにより計算され、yの値が代入される。更に、当該レコードの層Lに、layerの値が代入される。
segPが横線の場合の障害物情報生成処理についても同様である。
segPが斜め線の場合の障害物情報生成処理については、1つのsegPをセル系座標の1メモリ毎に分割して、複数の障害物情報にしている。座標変換の方法は縦線や横線のときと同様である。
これにより、当該線分は、配線領域における障害物として登録されたことになる。
以上で、ステップS5に関する詳細な説明について終了する。続いて、図3のステップS7の配線プラン出力部13による処理手順について説明する。
図100は、確定された配線プランの出力処理の処理手順を説明するためのフローチャートである。ここでいう出力とは、バス情報記憶部D5における引出線分リストescSへの登録をいう。配線プラン出力部13は、バス経路が確定されたバスごとにステップS7−3〜S7−7を実行する(S7−1、S7−2、S7−8)。
ステップS7−3において、配線プラン出力部13は、バスID(bus)の値が処理対象のバス(着目バス)のバスIDと一致する引き出し経路データePath(図93)を抽出する。続いて、配線プラン出力部13は、抽出された引き出し経路データePathごとにステップS7−4及びS7−5を実行する(S7−3、S7−6、S7−7)。
ステップS7−4において、配線プラン出力部13は、処理対象の引き出し経路データePathを実寸系線分データのリストに変換する。
図101は、実寸系線分データの構成例を示す図である。同図に示されるように、実寸系線分データは、始点x座標(x1)、始点y座標(y1)、終点x座標(x2)、終点y座標(y2)、層番号(layer)、バスID(bus)、部品ID(part)、ネットID(netID)、次データ(next)等のメンバ変数(データ項目)を有する。
始点x座標(x1)は、線分の始点の実寸系のx座標値である。始点y座標(y1)は、線分の始点の実寸系のy座標値である。終点x座標(x2)は、線分の終点の実寸系のx座標値である。終点y座標(y2)は、線分の終点の実寸系のy座標値である。層番号(layer)は、線分が対応する配線が属する層の層番号である。バスID(bus)は、線分が対応する配線が属するバスのバスIDである。部品ID(part)は、線分が対応する配線が属する部品の部品IDである。ネットID(netID)は、線分が対応する配線が属するネットのネットIDである。次データ(next)は、実寸系線分データのリスト構造を形成するための、次の実寸系線分データへのポインタである。
このように、実寸系線分データは、実寸系の座標値によって線分を示すものである。したがって、ステップS7−4では、配線の引き出し経路を示す線分についてセル行列座標系から実寸系への座標変換が行われる。
続いて、配線プラン出力部13は、ステップS7−4において生成された実寸系線分データのリストの最後尾の実寸系線分データの次データ(next)に、着目バスのバス情報Bの引出線分リストescSに既に登録されている実寸系線分データのリストの先頭のポインタを代入する。また、配線プラン出力部13は、ステップS7−4において生成された実寸系線分データのリストの先頭のポインタを着目バスのバス情報Bの引出線分リストescSに登録する(S7−6)。
続いて、ステップS7−4の詳細について説明する。図102は、引き出し経路データから実寸系線分データのリストへの変換処理の処理手順を説明するためのフローチャートである。
同図において、ステップS7−4−1〜S7−4−5は、図99のステップS5−9−3〜S5−9−7とほぼ同様である。便宜上、変数名も一致させている。但し、ステップS7−4−1において、処理対象とされている引き出し経路線分データePath(着目引き出し経路線分データePath)のバスID(bus)の値が、変数busIDに代入される。
ステップS7−4−5に続いて、配線プラン出力部13は、着目経路線分リストsegListのリスト長(セル系線分データの数)を変数segNumに代入する(S7−4−6)。続いて、配線プラン出力部13は、segNum分の実寸系線分データを連続で(配列として)生成する(S7−4−7)。
続いて、配線プラン出力部13は、着目経路線分リストsegListに含まれるセル系線分データごとに実寸系線分データへの変換処理を行う(S7−4−8)。
処理対象とされたセル系線分データの始点及び終点から、実寸系線分データへの始点及び終点への変換は、図99のステップS5−9−8において説明した通りである。また、実寸系線分データの層番号(layer)、バスID(bus)、部品ID(part)、ネットID(netID)のそれぞれに、変数layer、busID、partID、netIDの値が代入される。更に、当該実寸系線分データの次データ(next)に、連続で生成された次の実寸系線分データへのポインタが代入される。但し、最後尾の実寸系線分データの次データ(next)にはNULLが代入される。
以上で、ステップS7に関する詳細な説明は終了する。すなわち、図3における全ステップの説明は終了する。
上述したように、本実施の形態によれば、バスの配線経路について、バスに属するネットごとに引き出しの可能性を検証して当該配線経路の妥当性を判定する。したがって、実際の詳細配線において使用される引き出し領域の形に近い形状に基づいてバスの配線経路を生成することができる。
よって、バスの占有領域が、実際に詳細配線を行う際に必要となる配線引き出し部の占有領域に比べて過大に又は過小に見積もられている状態でバスの配線経路が確定される可能性を低減させることができる。その結果、少ない配線層で高密度な配線の可能性を高めることができる。
また、実際の配線段階で引き出し不能になるようなバス配線経路を、修正が容易な段階で検出し、再生成することができる。したがって詳細配線が進んでからバスの配線経路を修正するような手戻りを回避することができ、配線設計時間の短縮化を期待することができる。
また、本実施の形態の配線設計支援装置10によれば、引き出し配線経路の収容性を保障した容量を有する有向枝によって構成される有向グラフを生成し、当該有向グラフに基づいて経路探索を行い、更に概略経路を確定することにより、ピン間の配線収容本数の上限を正しく表現することができる。よって、概略配線時に許容数以上の概略経路が作成されてしまうことを回避でき、概略経路を詳細化したときにルール違反が生じて配線ができないといった事態の発生を防止することができる。特に、水平又は垂直ピン間のみならず、対角ピン間についてもボトルネックを配置するようにしたことにより、対角ピン間における配線経路の収容性についても適切に保障される。同様に、空きピンについてもボトルネックを配置するようにしたことにより、空きピン箇所についても配線経路の収容が適切に保障される。
また、各概略経路には各配線の相対的な位置関係を示す情報として引き出し順位が付与されている。すなわち、引き出し順位に従ってピン間等における配線の位置を決定することにより、ピン間等において各配線が交差(ショート)してしまうことが防止される。具体的には、本実施の形態の場合であれば、引き出し順位が若い配線を北側又は東側に貼り付けるようにすればよい。そうすることで、各配線のクロスが防止される。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
コンピュータが、
一以上の配線層を含む配線領域に対して、それぞれ図形によって表現された複数のバスの経路を前記バス間で交差しないように生成する配線プラン生成手順と、
前記バスごとに、当該バスが接続される部品内からの当該バスの所属ネットごとの配線の引き出しの可否の検証を行う妥当性判定手順と、
前記妥当性判定手順によって全ての前記所属ネットが引き出せることが確認された前記バスの前記所属ネットを示す図形を前記配線領域に記録する配線プラン確定手順とを実行し、
前記妥当性判定手順によって少なくとも一部の前記所属ネットが引き出せないことが確認された前記バスについて前記配線プラン生成手順を再実行する配線設計支援方法。
(付記2)
前記妥当性判定手順は、
前記部品の少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を前記所属ネットの配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手順と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手順と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手順と
前記所属ネットごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手順と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手順と、
前記経路探索手順によって最短経路が探索された所属ネットの数に基づいて前記バスの配線の成否を判定する配線成否判定手順とを有し、
前記経路探索手順は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記1記載の配線設計支援方法。
(付記3)
前記妥当性判定手順は、
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手順を有し、
前記概略経路確定手順は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記2記載の配線設計支援方法。
(付記4)
前記概略経路確定手順は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従って、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記3記載の配線設計支援方法。
(付記5)
前記妥当性判定手順は、前記経路探索手順より前に、
前記配線の引き出しの可否の検証対象とされている第一の前記バス以外の第二の前記バスの所属ネットの引き出し対象のピンのピン間の第一の前記ボトルネック箇所、前記第二のバスの前記配線の出口の第二の前記ボトルネック箇所、及び前記第一のボトルネック箇所と前記第二のボトルネック箇所とを接続する前記ボトルネック箇所の前記配線容量を一時的に0とする防護壁生成手順を有する付記2乃至4いずれか一項記載の配線設計支援方法。
(付記6)
前記防護壁生成手順は、前記第二のボトルネック箇所に付与されている容量の合計が、当該第二のボトルネック箇所を前記配線の出口とする前記バスの所属ネット数に対して不足する場合は、前記第二のボトルネック箇所を追加する付記5記載の配線設計支援方法。
(付記7)
コンピュータに、
一以上の配線層を含む配線領域に対して、それぞれ図形によって表現された複数のバスの経路を前記バス間で交差しないように生成する配線プラン生成手順と、
前記バスごとに、当該バスが接続される部品内からの当該バスの所属ネットごとの配線の引き出しの可否の検証を行う妥当性判定手順と、
前記妥当性判定手順によって全ての前記所属ネットが引き出せることが確認された前記バスの前記所属ネットを示す図形を前記配線領域に記録する配線プラン確定手順とを実行させ、
前記妥当性判定手順によって少なくとも一部の前記所属ネットが引き出せないことが確認された前記バスについて前記配線プラン生成手順を再実行する配線設計支援プログラム。
(付記8)
前記妥当性判定手順は、
前記部品の少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を前記所属ネットの配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手順と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手順と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手順と
前記所属ネットごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手順と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手順と、
前記経路探索手順によって最短経路が探索された所属ネットの数に基づいて前記バスの配線の成否を判定する配線成否判定手順とを有し、
前記経路探索手順は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記7記載の配線設計支援プログラム。
(付記9)
前記妥当性判定手順は、
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手順を有し、
前記概略経路確定手順は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記8記載の配線設計支援プログラム。
(付記10)
前記概略経路確定手順は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従って、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記9記載の配線設計支援プログラム。
(付記11)
前記妥当性判定手順は、前記経路探索手順より前に、
前記配線の引き出しの可否の検証対象とされている第一の前記バス以外の第二の前記バスの所属ネットの引き出し対象のピンのピン間の第一の前記ボトルネック箇所、前記第二のバスの前記配線の出口の第二の前記ボトルネック箇所、及び前記第一のボトルネック箇所と前記第二のボトルネック箇所とを接続する前記ボトルネック箇所の前記配線容量を一時的に0とする防護壁生成手順を有する付記8乃至10いずれか一項記載の配線設計支援プログラム。
(付記12)
前記防護壁生成手順は、前記第二のボトルネック箇所に付与されている容量の合計が、当該第二のボトルネック箇所を前記配線の出口とする前記バスの所属ネット数に対して不足する場合は、前記第二のボトルネック箇所を追加する付記11記載の配線設計支援プログラム。
(付記13)
一以上の配線層を含む配線領域に対して、それぞれ図形によって表現された複数のバスの経路を前記バス間で交差しないように生成する配線プラン生成手段と、
前記バスごとに、当該バスが接続される部品内からの当該バスの所属ネットごとの配線の引き出しの可否の検証を行う妥当性判定手段と、
前記妥当性判定手段によって全ての前記所属ネットが引き出せることが確認された前記バスの前記所属ネットを示す図形を前記配線領域に記録する配線プラン確定手段とを実行し、
前記妥当性判定手段によって少なくとも一部の前記所属ネットが引き出せないことが確認された前記バスについて前記配線プラン生成手段を再実行する配線設計支援装置。
(付記14)
前記妥当性判定手段は、
前記部品の少なくとも各ピン、各水平ピン間、各垂直ピン間、及び各対角ピン間を前記所属ネットの配線のボトルネック箇所とし、前記各ボトルネック箇所に水平ピン間、垂直ピン間、又は対角ピン間に応じた配線容量を付与するボトルネック配置手段と、
前記ボトルネック箇所ごとに入り口ノード及び出口ノードの二つのノードを生成するノード生成手段と、
それぞれの前記ボトルネック箇所について、同一の前記ボトルネック箇所内の前記入り口ノードから前記出口ノードへの有向枝を生成し、垂直又は水平方向に隣接する前記ボトルネック箇所間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、前記対角ピン間のボトルネック箇所と当該対角ピン間の全ての斜め隣の前記ボトルネック箇所との間において一方の前記出口ノードから他方の前記入り口ノードへの有向枝を相互に生成し、生成された全ての有向枝に、当該有向枝によって接続される前記ノードが属する前記ボトルネック箇所に付与された前記配線容量の最小値を枝容量として付与する有向グラフ生成手段と
前記所属ネットごとに、配線の引き出し対象のピンに対応するボトルネック箇所の前記入り口ノードから配線の出口に係る前記ボトルネック箇所の前記出口ノードまでの間において、1以上の前記枝容量が付与された前記有向枝を使用して最短経路を探索する経路探索手段と、
探索された経路に使用された各有向枝に、経路に使用された使用回数を付与する使用回数付与手段と、
前記経路探索手段によって最短経路が探索された所属ネットの数に基づいて前記バスの配線の成否を判定する配線成否判定手段とを有し、
前記経路探索手段は、前記使用回数が前記枝容量を超えないように前記最短経路を探索する付記13記載の配線設計支援装置。
(付記15)
前記妥当性判定手段は、
前記ボトルネック箇所の相対的な位置関係において外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所の該出口ノードから前記引き出し対象のピンに対応するボトルネック箇所の出口ノードまでを前記使用回数が1以上の有向枝に沿って遡ることによって形成される経路を配線の概略経路として確定する概略経路確定手段を有し、
前記概略経路確定手段は、遡られた前記有向枝の前記使用回数を当該有向枝の遡りの回数に応じて減ずる付記14記載の配線設計支援装置。
(付記16)
前記概略経路確定手段は、前記外周に位置し前記使用回数が1以上の前記有向枝を前記入り口ノードから前記出口ノードへの有向枝として有する前記ボトルネック箇所が複数有るときは、前記外周における一定方向に従って、遡りを開始する前記ボトルネック箇所を順番に選択し、前記一定方向に応じて、遡りにおいて優先させる前記有向枝を選択する付記15記載の配線設計支援装置。
(付記17)
前記妥当性判定手段は、
前記経路探索手段による最短経路の探索より前に、前記配線の引き出しの可否の検証対象とされている第一の前記バス以外の第二の前記バスの所属ネットの引き出し対象のピンのピン間の第一の前記ボトルネック箇所、前記第二のバスの前記配線の出口の第二の前記ボトルネック箇所、及び前記第一のボトルネック箇所と前記第二のボトルネック箇所とを接続する前記ボトルネック箇所の前記配線容量を一時的に0とする防護壁生成手段を有する付記14乃至16いずれか一項記載の配線設計支援装置。
(付記18)
前記防護壁生成手段は、前記第二のボトルネック箇所に付与されている容量の合計が、当該第二のボトルネック箇所を前記配線の出口とする前記バスの所属ネット数に対して不足する場合は、前記第二のボトルネック箇所を追加する付記5記載の配線設計支援装置。