【手続補正書】
【提出日】平成16年11月30日(2004.11.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
集積回路（「ＩＣ」）レイアウトの特定の領域内の、一組のピンを有するネットをルーティングするための方法であって、
（ａ）前記特定のＩＣ領域を、同じ形の複数のサブ領域に分割するステップと、
（ｂ）前記ネットのピンを含む一組のサブ領域を接続している、少なくともその一部が対角線である経路縁部を有する経路を識別するステップとを含む方法。
【請求項２】
前記経路を識別するステップが、前記ネットのピンを含む前記一組のサブ領域を識別するステップを含む、請求項１記載の方法。
【請求項３】
前記経路を識別するステップが、さらに、記憶構造体から前記経路を検索するために、前記識別した一組のサブ領域の使用を含む、請求項２記載の方法。
【請求項４】
すべての前記サブ領域が同じサイズを有する、請求項１記載の方法。
【請求項５】
各サブ領域が、４つの辺を有するサブ領域である、請求項１記載の方法。
【請求項６】
前記ＩＣ領域が全ＩＣの前記レイアウトである、請求項１記載の方法。
【請求項７】
前記ＩＣ領域が前記全ＩＣの前記レイアウトの一部である、請求項１記載の方法。
【請求項８】
前記方法が、前記ＩＣ領域内に追加のネットをルーティングし、追加の各ネットが、前記領域内に一組のピンを含み、
前記領域内の追加の各ネットに対して、前記ネットの前記一組のピンを含む一組のサブ領域を接続している経路を識別するステップを含み、
前記識別した経路の中のあるものが、少なくともその一部が対角線である経路縁部を有する、請求項１記載の方法。
【請求項９】
複数のパスが前記サブ領域間に存在し、複数の前記パスが対角線パスであり、
各経路が一組のパスを通り、
前記経路の中の少なくとも１つが、前記対角線パスの中の少なくとも１つを通る、請求項８記載の方法。
【請求項１０】
各経路を識別するステップが、前記経路が通る前記一組のパスを識別するステップを含む、請求項９記載の方法。
【請求項１１】
複数の前記パスがマンハッタン・パスであり、前記経路の中の少なくとも１つが、前記マンハッタン・パスの中の少なくとも１つを通る、請求項９記載の方法。
【請求項１２】
複数の領域間縁部が、前記サブ領域間に存在し、複数の前記領域間縁部が対角線であり、
各経路が一組の前記領域間縁部と交差し、
少なくとも１つの経路が、前記対角線領域間縁部の中の少なくとも１つと交差する、請求項８記載の方法。
【請求項１３】
各経路を識別するステップが、前記経路が交差する前記一組の前記領域間縁部を識別するステップを含む、請求項１２記載の方法。
【請求項１４】
前記サブ領域間の複数の前記領域間縁部がマンハッタン縁部であり、少なくとも１つの経路が少なくとも１つのマンハッタン縁部と交差する、請求項１２記載の方法。
【請求項１５】
前記領域内の各ネットに対して、前記ネットの前記ピンを含む前記一組のサブ領域を接続している一組の経路を識別するステップと、
前記識別した経路に対するコストを計算するステップと、
前記計算したコストに基づいて、各ネットに対して１つの識別した経路を選択するステップと、
前記領域内に各ネットに対して前記選択した経路を埋設するステップとをさらに含む、請求項８記載の方法。
【請求項１６】
各ネットに対して識別した１つの経路を選択するステップが、前記識別した経路を含む線形プログラミング問題をこの問題の変数として定式化するステップを含む、請求項１５記載の方法。
【請求項１７】
前記ＩＣ領域を分割するステップが、前記ＩＣ領域を前記複数のサブ領域に分割するために第１の組のラインを使用するステップを含み、前記方法が、前記ネットに対する経路の集中を測定するために、第２の組のラインを使用するステップをさらに含み、前記第２の組内の前記ラインの中の少なくともあるものが、前記第１の組内の前記ラインとは異なる、請求項８記載の方法。
【請求項１８】
前記第１の組のラインが第１のグリッドを形成し、前記第２の組のラインが第２のグリッドを形成する、請求項１７記載の方法。
【請求項１９】
前記第２の組のラインが、対角線グリッドを形成する交差している対角線を含む、請求項１７記載の方法。
【請求項２０】
前記第１の組のラインが、第１の直線グリッドを形成する交差している水平ラインおよび垂直ラインを含む、請求項１９記載の方法。
【請求項２１】
前記第２の組のラインが、さらに、第２の直線グリッドを形成する交差している水平ラインおよび垂直ラインを含む、請求項２０記載の方法。
【請求項２２】
マンハッタン方向の経路の前記集中を測定するために、前記第２の直線グリッドを使用するステップと、
前記対角線方向の経路の前記集中を測定するために、前記対角線グリッドを使用するステップとをさらに含む、請求項２１記載の方法。
【請求項２３】
前記第２の直線グリッドが、前記第１の直線グリッドと同じものである、請求項２１記載の方法。
【請求項２４】
前記対角線が、前記第１の組のラインが生成する前記サブ領域の中心で交差する、請求項２０記載の方法。
【請求項２５】
前記ＩＣ領域を分割するステップが、前記ＩＣ領域を前記複数のサブ領域に分割するために、第１の組のラインを使用するステップを含み、複数の対角線ルーティング・パスが、前記サブ領域間に存在し、前記方法が、
第２の組のラインに基づいて、対角線ルーティング・パスの容量を識別するステップをさらに含み、前記第２の組内のラインの中の少なくともあるものが、前記第１の組内のラインとは異なる、請求項８記載の方法。
【請求項２６】
前記第２の組のラインが複数の対角線を含む、請求項２５記載の方法。
【請求項２７】
前記対角線が、前記ＩＣ領域の複数の軸の中の１つに対して＋Ａ度または−Ａ度の角度を有し、Ａは０度または９０度ではなく、前記方法が、前記サブ領域間の±Ａ度方向のルーティング・パスの前記容量を識別するために対角線を使用する、請求項２６記載の方法。
【請求項２８】
Ａが４５度である、請求項２７記載の方法。
【請求項２９】
前記対角線が、複数の対角線縁部を形成し、
特定の各ルーティング・パスが、特定の対角線縁部と交差し、
前記対角線ルーティング・パスの前記容量を識別するステップが、特定の対角線ルーティング・パスと交差する前記特定の対角線縁部の大きさから特定の各対角線ルーティング・パスの容量を入手するステップを含む、請求項２５記載の方法。
【請求項３０】
各ルーティング・パスが、特定の配線層に対して形成され、各層が特定のピッチを有し、前記対角線ルーティング・パスの前記容量を識別するステップが、前記特定のルーティング・パスの容量を入手するために、特定の各ルーティング・パスの層のピッチを使用するステップを含む、請求項２９記載の方法。
【請求項３１】
前記領域をもっと小さいサブ領域に階層的に分割するステップと、
前記階層の各レベルにおいて各ネットに対して経路を指定するステップとを含み、
前記階層の最も低いレベルのところの前記サブ領域がＧｃｅｌｌであり、
Ｇｃｅｌｌレベルでないレベルで前記対角線ルーティング・パスの前記容量を識別するステップが、前記特定のルーティング・パスの方向の前記Ｇｃｅｌｌレベルのところの配線のトラックの数からＧｃｅｌｌレベルでないレベルの特定の各対角線ルーティング・パスの容量を入手するステップをさらに含む、請求項３０記載の方法。
【請求項３２】
前記サブ領域が、第１の組のサブ領域であり、前記方法が、
ａ）前記第１の組のサブ領域を第２の組のサブ領域に分割するステップと、
ｂ）前記経路を前記第２の組のサブ領域内に伝搬するステップとをさらに含む、請求項１記載の方法。
【請求項３３】
第１の組のパスが前記第１の組のサブ領域間に存在し、第２の組のパスが前記第２の組のサブ領域間に存在し、前記第１の経路が、前記第１の組のパスのサブセットである第３の組のパスに対して形成される、請求項３２記載の方法。
【請求項３４】
前記第２の組のサブ領域内への特定の第３の組のパスの伝搬を表す第１の第２の組のパスを識別するステップをさらに含む、請求項３３記載の方法。
【請求項３５】
前記特定の第３の組のパスおよび前記第１の第２の組のパスが対角線である、請求項３４記載の方法。
【請求項３６】
前記特定の第３の組のパスがマンハッタン・パスであり、前記第１の第２の組のパスが対角線パスである、請求項３４記載の方法。
【請求項３７】
前記特定の第３の組のパスが対角線パスである、請求項３４記載の方法。
【請求項３８】
前記第１の第２の組のパスと一緒に、前記第２の組のサブ領域内への前記特定の第３の組のパスの前記伝搬を表す、第２の第２の組のパスを識別するステップをさらに含む、請求項３４記載の方法。
【請求項３９】
前記特定の第３の組のパスが対角線であり、前記第１および第２の第２の組のパスが対角線である、請求項３８記載の方法。
【請求項４０】
第１の組の領域間縁部が前記第１の組のサブ領域間に存在し、第２の組の領域間縁部が前記第２の組のサブ領域間に存在し、前記第１の経路が、前記第１の組の領域間縁部のサブセットである第３の組の領域間縁部に対して形成される、請求項３２記載の方法。
【請求項４１】
前記第２の組のサブ領域内への特定の第３の組の領域間縁部の伝搬を表す第１の第２の組の領域間縁部を識別するステップをさらに含む、請求項４０に記載の方法。
【請求項４２】
前記特定の第３の組の領域間縁部および前記第１の第２の組の領域間縁部が対角線である、請求項４１記載の方法。
【請求項４３】
前記特定の第３の組の領域間縁部がマンハッタン領域間縁部であり、前記第１の第２の組の領域間縁部が対角線領域間縁部である、請求項４１記載の方法。
【請求項４４】
前記特定の第３の組の領域間縁部が対角線領域間縁部であり、前記第１の第２の組の領域間縁部がマンハッタン領域間縁部である、請求項４１記載の方法。
【請求項４５】
前記第１の第２の組の領域間縁部と一緒に、前記第２の組のサブ領域内への前記特定の第３の組の領域間縁部の前記伝搬を表す第２の第２の組の領域間縁部を識別するステップをさらに含む、請求項４１記載の方法。
【請求項４６】
前記特定の第３の組の領域間縁部が対角線であり、前記第１および第２の第２の組の領域間縁部が対角線である、請求項４５記載の方法。
【請求項４７】
ａ）前記識別したサブ領域を複数のもっと小さいサブ領域に分割するステップと、
ｂ）  前記経路を前記もっと小さいサブ領域内に伝搬するステップとをさらに含む、請求項１記載の方法。
【請求項４８】
前記経路を伝搬するステップが、前記経路が前記もっと小さいサブ領域へ伝搬する少なくとも１つの対角線伝搬パスを識別するステップを含む、請求項４７記載の方法。
【請求項４９】
前記伝搬パスが対角線伝搬パスである、請求項４８記載の方法。
【請求項５０】
前記伝搬パスが水平伝搬パスまたは垂直伝搬パスである、請求項４９記載の方法。
【請求項５１】
ａ）前記識別したサブ領域を複数のもっと小さいサブ領域に分割するステップと、
ｂ）前記対角線縁部が前記もっと小さいサブ領域内に伝搬する伝搬パスを識別するステップとをさらに含む、請求項１記載の方法。
【請求項５２】
前記伝搬パスが対角線パスである、請求項５１に記載の方法。
【請求項５３】
ａ）各サブ領域を複数のもっと小さいサブ領域に分割するステップと、
ｂ）前記ネットに対して、前記特定のサブ領域内の前記ネットのピンを含む一組の前記もっと小さいサブ領域を接続している第２の経路を識別するステップとをさらに含み、前記第２の経路が、少なくともその一部が対角線である経路縁部を有する、請求項１記載の方法。
【請求項５４】
前記ＩＣ領域が、他のＩＣ領域を含むもっと大きいＩＣ領域の一部である第１のＩＣ領域である、請求項５３記載のルーティング方法。
【請求項５５】
前記ネットが、前記もっと大きなＩＣ領域の他のＩＣ領域内に他のピンを含み、もっと高いレベルの経路が、前記ネットの前記ピンを含む前記もっと大きなＩＣ領域のＩＣ領域を接続している、請求項５４に記載のルーティング方法。
【請求項５６】
前記一組のピンが、前記第１のＩＣ領域内への前記もっと高いレベルの経路の伝搬に対応する仮想ピンを含む、請求項５５記載のルーティング方法。
【請求項５７】
ルーティングを実行するための方法であって、
ａ）集積回路（「ＩＣ」）レイアウトの特定の領域を受け取るステップと、
ｂ）前記領域を複数のサブ領域に分割するステップとを含み、複数の対角線および非対角線ルーティング・パスが前記サブ領域間に存在し、前記対角線ルーティング・パスが、第１の組のラインに対して形成され、前記非対角線ルーティング・パスが、第２の組のラインに対して形成される方法。
【請求項５８】
各ルーティング・パスが特定の容量を有し、前記方法が、
ａ）特定の各対角線ルーティング・パスの前記容量を計算するステップと、
ｂ）特定の各非対角線ルーティング・パスの前記容量を計算するステップとをさらに含み、
前記対角線ルーティング・パスの前記容量が、前記非対角線ルーティング・パスの前記容量とは異なる、請求項５７記載の方法。
【請求項５９】
前記第１のグリッドが複数の対角線縁部を含み、前記第２のグリッドが複数の非対角線縁部を含み、
特定の各対角線ルーティング・パスが特定の対角線縁部と交差し、特定の各非対角線ルーティング・パスが特定の非対角線縁部と交差し、
特定の各対角線ルーティング・パスの容量を計算するステップが、前記パスの対応する対角線縁部のサイズから前記特定の対角線ルーティング・パスの容量を入手するステップを含み、
特定の各非対角線ルーティング・パスの容量を計算するステップが、前記パスｔの対応する非対角線縁部の前記サイズから前記特定の非対角線ルーティング・パスの容量を入手するステップを含む、請求項５８記載の方法。
【請求項６０】
前記対角線縁部のサイズが、前記非対角線縁部のサイズとは異なる、請求項５９記載の方法。
【請求項６１】
特定の各対角線縁部が、相互に対角線方向に整合している隣接サブ領域の特定のペアの中心を結んでいる、請求項５９記載の方法。
【請求項６２】
前記ＩＣレイアウトが、それぞれが特定のピッチの値を有する複数の相互接続ライン層を含み、
特定の各ルーティング・パスが、前記層の中の特定の１つの層上に位置していて、
特定の各対角線ルーティング・パスの前記容量を計算するステップが、前記特定の対角線ルーティング・パスにより相互に接続している前記対角線縁部のサイズを前記パスの層の前記ピッチの値で割るステップを含み、
特定の各非対角線ルーティング・パスの容量を計算するステップが、前記特定の非対角線ルーティング・パスにより相互に接続している前記非対角線縁部のサイズを前記パスの層の前記ピッチの値で割るステップを含む、請求項５９記載の方法。
【請求項６３】
前記サブ領域が４つの辺を有するサブ領域であり、前記ルーティング・パスが、±４５度のパスおよびマンハッタン・パスを含み、前記マンハッタン・ルーティング・パスが、第１の直線グリッドを形成する前記第１の組のラインに対して形成され、前記±４５度の対角線ルーティング・パスが、前記第１のグリッドに対して４５度の角度を有する第２の直線グリッドを形成する前記第２の組のラインに対して形成される、請求項５７記載の方法。
【請求項６４】
回路レイアウトのある領域内のネットに対する経路を形成するための方法であって、該方法が、
ａ）経路の長さを測定するために第１の組のラインを使用するステップと、
ｂ）経路の集中を測定するために第２の組のラインを使用するステップとを含み、前記第１の組内の前記ラインの中の少なくともあるものが、前記第２の組内に位置しない方法。
【請求項６５】
前記第２の組のラインが、複数の集中縁部を形成し、前記第２の組のラインを使用するステップが、前記集中縁部を横切る経路の集中を測定するステップを含む、請求項６４記載の方法。
【請求項６６】
前記経路が、前記集中縁部と交差する対角線縁部を有し、前記集中縁部を横切る経路の前記集中を測定するステップが、前記集中縁部を横切る対角線経路縁部の前記集中を測定するステップを含む、請求項６５記載の方法。
【請求項６７】
前記経路が、さらに、前記集中縁部と交差する水平縁部または垂直縁部を有し、前記集中縁部を横切る経路の前記集中を測定するステップが、前記集中縁部を横切る水平経路または垂直経路の前記集中を測定するステップを含む、請求項６６記載の方法。
【請求項６８】
各ネットが一組のピンを有し、前記方法が、
ａ）前記領域を第１の組のサブ領域に分割するために第３の組のラインを使用するステップと、
ｂ）各ネットに対して、前記ネットの一組のピンを含む第１の組のサブ領域のグループを通る経路を識別するステップとをさらに含む、請求項６４記載の方法。
【請求項６９】
前記第２の組のラインおよび前記第３の組のラインが、同じものである、請求項６８記載の方法。
【請求項７０】
各ネットが一組のピンを有し、前記第１の組のラインが第１の組のサブ領域を形成し、前記方法が、
各ネットに対して、前記ネットの一組のピンを含む第１の組のサブ領域のグループを通る経路を識別するステップをさらに含み、各経路が、一組の経路セグメントを有し、各経路セグメントが、前記第１の組のサブ領域内の２つのサブ領域を通る、請求項６４記載の方法。
【請求項７１】
前記経路の一組の経路セグメント内の各経路セグメントの前記長さを合計することにより各経路の前記長さを測定するステップをさらに含む、請求項７０記載の方法。
【請求項７２】
前記第２の組のラインを使用するステップが、前記第２の組のラインを横切る経路の前記集中を測定するステップを含む、請求項７１記載の方法。
【請求項７３】
前記第２の組のラインが複数の集中縁部を形成し、前記経路の前記集中を測定するステップが、前記集中縁部を横切る経路の前記集中を測定するステップを含む、請求項７２記載の方法。
【請求項７４】
経路が完成した場合、前記集中縁部を横切る前記経路のセグメントに対して各経路を指定するステップを含む、請求項７３記載の方法。
【請求項７５】
各ネットに対する前記経路を識別するステップが、
前記ネットのピンを含む第１の組のサブ領域をスタートするステップと、前記経路が、前記ネットのピンを含むサブ領域のすべてのグループを横切るまで、新しい第１の組のサブ領域内に前記経路を延ばす経路セグメントを連続的に指定するステップとを含む、請求項７０記載の方法。
【請求項７６】
経路セグメントの各延長に対して、長さコストを計算するステップと、
第２の組のラインを横切る経路セグメントの各延長に対して、前記第２の組のラインの前記集中に基づいて集中コストを計算するステップとをさらに含む、請求項７５記載の方法。
【請求項７７】
第１の経路セグメントを指定するステップが、複数の潜在的な経路セグメントの延長をチェックするステップを含み、
潜在的な各経路セグメントの延長に対して、長さコストを計算し、
前記潜在的な経路セグメントの延長が第２の組のラインと交差する場合には、前記第２の組のラインの前記集中に基づいて集中コストを計算する、請求項７５記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【発明の名称】ルーティングのための方法および装置
【技術分野】
【０００１】
本発明は、ルーティングのための方法および装置に関する。
【背景技術】
【０００２】
集積回路（「ＩＣ」）は、多くの電子構成要素（例えば、トランジスタ、抵抗、ダイオード等）を含むデバイスである。これらの電子構成要素は、多くの場合、ＩＣ上で相互に接続して、複数の回路構成要素（例えば、ゲート、セル、記憶装置、演算装置、コントローラ、デコーダ等）を形成する。以下の説明においては、ＩＣの電子および回路構成要素全体を「構成要素」と呼ぶ。
ＩＣは、また、電子および回路構成要素を相互に接続している複数の配線の層（「配線層」）を含む。例えば、多くのＩＣは、現在、その電子および回路構成要素を相互に接続している金属またはポリシリコンの配線層（以下の説明においては、総括的に「金属層」と呼ぶ）により製造されている。１つの通常の製造モデルは５つの金属層を使用する。理論的には、金属層上の配線を全角度配線にすることができる（すなわち、任意の方向に配線することができる）。このような全角度配線は、通常、ユークリッド配線と呼ばれる。しかし、実際には、各金属層は、通常、好適な配線方向を持ち、その好適な方向は、連続している金属層間で異なる。多くのＩＣは、好適な方向の交互の層の向きを水平および垂直方向に指定するマンハッタン配線モデルを使用している。この配線モデルの場合には、大多数のワイヤは、９０度曲がることができるだけである。しかし、場合によっては、好適な水平および垂直層上で、対角線方向に急激に曲げることもできる。
設計エンジニアは、ＩＣの回路説明を、レイアウトと呼ぶ幾何学的な表示に変換することによりＩＣを設計する。レイアウトを作成するために、設計エンジニアは、通常、電子設計オートメーション（「ＥＤＡ」）アプリケーションを使用する。これらのアプリケーションは、ＩＣ設計レイアウトを生成し、編集し、分析するための複数の組のコンピュータをベースとするツールを提供する。
【０００３】
ＥＤＡアプリケーションは、ＩＣ上の異なる材料およびデバイスを表す幾何学的形状によりレイアウトを生成する。例えば、ＥＤＡツールは、通常、ＩＣ構成要素を相互に接続するワイヤのセグメントを表すために、長方形のラインを使用する。これらのツールは、また、さまざまな形および大きさの幾何学的対象物として電子および回路ＩＣ構成要素を表す。本明細書においては、説明を分かりやすくするために、これらの幾何学的対象物を長方形のブロックで示す。
また、本明細書においては、「回路モジュール」という用語は、ＥＤＡアプリケーションによる電子または回路ＩＣ構成要素を意味する。ＥＤＡアプリケーションは、通常、その側面上にピンを備える回路モジュールを示す。これらのピンは、相互接続ラインに接続する。
ネットは、通常、電気的に接続しなければならないピンの集合体を形成する。レイアウト内のネットのすべてまたはその一部のリストは、ネット・リストと呼ばれる。すなわち、ネット・リストは、ネットのグループを指定し、ネットのグループは、一組のピン間の相互接続を指定する。
図１は、ＩＣレイアウト１００の一例である。このレイアウトは、ピン１３０〜１６０を有する５つの回路モジュール１０５、１１０、１１５、１２０および１２５を含む。４つの相互接続ライン１６５〜１８０は、そのピンを通してこれらのモジュールを接続する。さらに、３つのネットは、ピン間の相互接続を指定する。より詳細に説明すると、ピン１３５、１４５および１６０は、３つのピン・ネットを形成し、一方、ピン１３０および１５５、およびピン１４０および１５０は、それぞれ２つの２ピン・ネットを形成する。図１に示すように、（１０５のような）回路モジュールは、複数のネット上に複数のピンを持つことができる。
【０００４】
ＩＣ設計プロセスは、種々の動作を必要とする。ＩＣレイアウトを入手するために、ＥＤＡアプリケーションが通常行う物理的設計動作としては下記のようなものがある。（１）単一のチップ上に形成するには、回路が大きすぎる場合に、回路を分割する回路分割；（２）回路モジュールの整合および相対的な向きをチェックするフロア・プラニング；（３）回路モジュールの位置をもっと正確に決定するための設置；（４）回路モジュール間の相互接続を完成するためのルーティング；（５）ＩＣの全面積を小さくするためにレイアウトを圧縮する圧縮；（６）設計および機能要件に適合しているかどうかを確認するために、レイアウトをチェックする確認。
ルーティングは、物理的設計段階での最も重要な動作である。ルーティングは、通常２つの段階、すなわち、グローバル・ルーティングと詳細ルーティングに分けられる。各ネットの場合、グローバル・ルーティングは、ネットのピンを接続するための相互接続ラインに対する「ルーズな」経路（パスまたはルーティング・エリアとも呼ばれる）を生成する。グローバル・ルーティングの「ルーズさ」は、使用する特定のグローバル・ルータにより異なる。グローバル経路が生成された後で、詳細ルーティングは、各ネットに対する特定の個々のルーティング・パスを生成する。
今日、ある種の商用グローバル・ルータを使用すれば、場合によっては、対角線方向に急角度に曲げることができるが、これらのルータは、通常、相互接続ラインのルーティング幾何学的形状を指定している場合には、首尾一貫して対角線ルーティング・パスを探査しない。これにより、レイアウト内のネットを接続するのに必要な全ワイヤ長さ（すなわち、相互接続ラインの全長）が長くなる。それ故、対角線ルーティング・パスを考慮に入れるルーティング方法および装置の開発が待望されている。
【特許文献１】米国特許出願第０９／７３２，１８１号
【非特許文献１】Ｒａｊｅｅｖ  ＭｏｔｗａｎｉおよびＰｒａｂｈａｋａｒ「Ｒａｇｈａｖａｎのランダム化アルゴリズム」、ケンブリッジ大学出版部、  （１９９５年、１９９７年）
【非特許文献２】「Ｐａｒａｌｌｅｌｅｒ  ｕｎｄ  Ｏｂｊｅｋｔｏｒｉｅｎｔｉｅｒｔｅｒ  Ｓｉｍｐｌｅｘ−Ａｌｇｏｒｉｔｈｍｕｓ」、ＰｈＤ．Ｒｏｌａｎｄ  Ｗｕｎｄｅｒｌｉｎｇ
【発明の開示】
【０００５】
本発明は、ルーティングのための方法および装置に関する。いくつかの実施形態は、対角線経路を使用するルーティングを提供する。この方法は、回路レイアウトのある領域内のいくつかのネットを通る。各ネットは、上記領域内に一組のピンを含む。この方法は、最初に、上記領域をいくつかのサブ領域に分割する。上記領域内の各特定のネットの場合、この方法は、特定のネットのピンの組からのピンを含むサブ領域を接続している経路を識別する。識別した経路の中のいくつかは、少なくともその一部が対角線である縁部を有する。
本発明の新規な機能は、添付の特許請求の範囲に記載されている。しかし、説明のために、下記の図面の中に本発明のいくつかの実施形態を示す。
【発明を実施するための最良の形態】
【０００６】
本発明は、ルーティング方法および装置に関する。以下の説明においては、説明のために多くの詳細な点について説明するが、通常の当業者であれば、これらの特定の詳細な記述を使用しなくても、本発明を実施することができることを理解することができるだろう。他の例の場合には、不必要な詳細な説明により、本発明の説明がわかりにくくなるのを避けるために、周知の構造体およびデバイスをブロック図の形で図示してある。
本発明のルーティングのための方法および装置のいくつかの実施形態について以下に説明する。しかし、これらの実施形態について説明する前に、第Ｉ節で、これらの実施形態と一緒に使用することができるいくつかの対角線配線アーキテクチャについて説明する。
【０００７】
Ｉ．対角線配線アーキテクチャ
本発明のいくつかの実施形態は、いくつかの配線モデルと一緒に使用することができる。例えば、いくつかの実施形態は、対角線相互接続ワイヤ、水平相互接続ワイヤ、および垂直相互接続ワイヤを含む配線モデルと一緒に使用することができる。以下の説明においては、相互接続ワイヤを、相互接続または相互接続ラインと呼ぶこともある。また、本明細書で使用するように、レイアウトの境界に対して、０または９０度以外の角度を形成する場合には、相互接続ラインは、「対角線」である。一方、レイアウトの辺の１つに対して０度または９０度を形成する（例えば、レイアウトの幅に対して、０度または９０度を形成する）場合には、相互接続ラインは、「水平」または「垂直」である。
図２は、水平相互接続ライン、垂直相互接続ライン、および４５度の対角線相互接続ラインを使用するＩＣレイアウト２００である。この図の場合、水平ライン２０５は、レイアウトの幅２１０に対して平行なｘ軸に対して平行な（すなわち、０度である）ラインである。垂直ライン２１５は、レイアウトの高さ２２０に対して平行なｙ軸に対して平行なラインである。すなわち、垂直相互接続ライン２１５は、ＩＣレイアウトの幅に対して垂直（すなわち、９０度）である。さらに、一組の対角線２２５は、ＩＣレイアウトの幅に対して＋４５度であり、一方、対角線の他の一組２３０は、ＩＣレイアウトの幅に対して−４５度である。本明細書においては、「八角配線モデル」という用語は、水平相互接続ライン、垂直相互接続ライン、および４５度の対角線相互接続ラインを含む配線モデルを意味する。
【０００８】
図３は、八角配線モデルを実施するための１つの方法を示す。この図の配線モデルは、各層毎に１つの好適な配線方向を持つという考え方を使用する。より詳細に説明すると、図３は、各層がそれ自身の好適な方向を持つ５つの層を示す。最初の３つの層３０５〜３１５は、マンハッタン層である。すなわち、これらの層内の相互接続ラインに対する好適な方向は、水平方向か、垂直方向である。これら３つの層内の好適な配線方向は、通常、２つの連続している層が、同じ好適な配線方向を持たないように交互になっている。しかし、ある場合には、連続している層内の配線は、同じ方向を向いている。
次の２つの層３２０および３２５は、対角線層である。対角線層内の相互接続ラインの好適な方向は±４５度である。また、最初の３つの層内のように、第４および第５の層内の配線方向は、通常、直交している（すなわち、一方の層は＋４５度の方向を向いていて、他方の層は−４５度の方向を向いている）。しかし、必ずしもそうする必要はない。
図３の直交配線モデルを参照しながら、いくつかの実施形態について以下に説明する。しかし、通常の当業者であれば、任意の配線モデルと一緒に、本発明を使用することができることを理解することができるだろう。例えば、本発明は、厳密に対角線である配線アーキテクチャ（すなわち、水平および垂直方向の配線を持たない配線アーキテクチャ）と一緒に使用することができる。
また、いくつかの実施形態は、−４５度でない対角線配線と一緒に使用される。例えば、いくつかの実施形態は、水平相互接続ライン、垂直相互接続ライン、および±１２０度対角線相互接続ラインを使用する配線モデルと一緒に使用される。さらに、いくつかの実施形態は、いくつかのまたはすべてのワイヤ層に対して好適な方向を指定しないワイヤ・モデルと一緒に使用される。例えば、いくつかの実施形態は、すべてのワイヤ層上に水平ライン、垂直ラインおよび、４５度のラインを設置することができる八角配線モデルを使用する。
【０００９】
ＩＩ．概念の流れ
図４は、本発明のいくつかの実施形態により実行した再帰的ルーティング・プロセスの概念図である。このルーティング・プロセスは、ＩＣレイアウトの設計領域（スロットととも呼ぶ）内のネットに対する経路を階層的に定義する。この領域は、ＩＣレイアウト全体であってもよいし、または、このレイアウトの一部であってもよい。同様に、ＩＣレイアウトは、１つまたは複数の集積回路全体であってもよいし、集積回路チップの一ブロック（すなわち、一部）のためのレイアウトであってもよい。
プロセスは、最初に、（ステップ４０５において）ＩＣ領域をいくつかのサブ領域に分割する分割グリッドを定義する。以下の説明においては、分割領域は、現在のスロットとも呼ぶし、分割によりできたサブ領域は、現在のスロットの子スロットとも呼ぶ。
いくつかの実施形態の場合には、分割グリッドは、カット・ラインを交差させることにより形成される。これらの実施形態の中のあるものの場合、交差する分割ラインは、ＩＣ領域を（Ｎ＋１）（Ｍ＋１）のサブ領域に分割するＮ本の水平ラインおよびＭ本の垂直ラインである。この場合、ＮおよびＭは、等しい任意の整数であってもよい。例えば、これらの水平ラインおよび垂直ラインは、受け取ったＩＣ領域を、（１）ＮおよびＭが１である場合には、４つの子スロットに、（２）ＮおよびＭが２である場合には、９つの子スロットに、（３）ＮおよびＭが３である場合には、１６の子スロットに、（４）ＮおよびＭの一方が４であり、他方が５である場合には、２０の子スロットに分割する。
【００１０】
図５は、３つの水平分割ラインおよび３つの垂直分割ラインにより、１６のサブ領域（すなわち、子スロット０〜１５）に分割された設計領域５００である。この図は、また、１６のサブ領域の中の４つに入る５つの回路モジュール５１０、５１５、５２０、５２５および５３０を含むネット５０５である。これら４つのサブ領域は、スロット０、１、７および８である。
分割領域内の（すなわち、現在のスロット内の）各ネットは、分割グリッドにより形成されたサブ領域内に１つまたはそれ以上の実際のまたは仮想のピンを有する。ネットの実際のピンは、設計領域内の回路モジュールのピンであり、一方、ネットの仮想のピンは、以下にさらに詳細に説明するように、もっと高いレベルの経路の伝搬をもっと低い子スロットに設定する人工的なピンである。各ネットの場合、そのネットの実際のまたは仮想のピンを含む一組のサブ領域は、分割グリッドに関するネットの構成を表す。
分割領域内の特定の各ネットに対して、プロセス４００は、（ステップ４１０において）ネットに対する１つまたはそれ以上の経路（ルーティング・グラフまたは接続グラフとも呼ばれる）を識別するために、ネットの構成を使用する。ネットの各経路は、ネットのピンを含む子スロット（すなわち、サブ領域）を接続する一組の相互接続ラインを提供する。
グリッドに対して各ネット構成をモデル化するために、１つまたはそれ以上のネットのピンを含む各子スロットは、ルーティング・グラフのノード（また、頂点または点と呼ばれる）として処理される。次に、グラフのノードは、縁部（ラインとも呼ばれる）により接続される。ある実施形態の場合には、ルーティング・グラフは、完全にまたは部分的対角線である縁部を持つことができる。
【００１１】
異なる実施形態は、相互接続経路を形成するために、異なるタイプのグラフを使用する。下記の実施形態の場合には、ツリー（例えば、シュタイナー・ツリー）が、関連ネット・ピンを含む子スロットを接続するルーティング・グラフとして使用される。図６〜図８は、図５のネット５０５に対する３つの最適なシュタイナー・ツリー６０５、７０５、および８０５である。これらのシュタイナー・ツリーは、すべて、同じ長さを持つ。これらのツリーの中の１つ（６０５）は、シュタイナー・ノード（６２０）を持つ。さらに、これらの各ツリーは、少なくともその一部が対角線である少なくとも１つの縁部を持つ。これらの例の場合には、ルータは、八角配線モデルを使用し、そのため、対角線縁部は、レイアウトの境界に対して４５度の角度を持つ。
プロセス４００がスタートする前に、ある実施形態は、データ記憶装置の子スロットの異なる構成に対する経路を予め計算し、記憶する。実行時、これらの実施形態のルータは、（ステップ４１０において）（１）分割グリッドに対する各ネットの構成を識別することにより、（２）識別した構成に対する経路をデータ記憶装置から検索することにより、ネットに対する経路の一部または全部を識別する。このようなアプローチにより、ルータは、各ネット構成に対してリアルタイム経路の構築から解放される。このようなアプローチの中の１つについては、第Ｖ節で説明する。
【００１２】
一方、他の実施形態は、実行時に経路を生成するためにネット構成を使用する。さらに他の実施形態は、経路を検索し、生成するためにネット構成を使用する。例えば、ある実施形態は、他のネットに対する経路を生成しながら、あるネットに対する予め表の形にした経路を検索するためにネット構成を使用する。このようなアプローチの中の１つについては、第Ｖ節で説明する。
ある実施形態の場合には、予め表の形にした、または生成した経路が最適の経路である。これらの実施形態の中のあるものも、各ネットに対する可能な解決方法の数を増やすために、レイアウト内の各ネット構成に対する次善の経路を識別するためのルータを含む。このようなアプローチの中の１つについては、第ＶＩ節で説明する。
各ネットに対して、プロセス４００は、（ステップ４１５において）そのネットに対して現在の再帰レベルでのネットの経路として識別した経路の中の１つを選択する。このプロセスは、ワイヤの長さの短縮および集中の低減のようないくつかの目的を最適化する経路を選択する。もっと小さい子スロットを形成するために、現在のスロットの子スロットを分割しなければならない場合には、プロセス４００は、（ステップ４２０において）もっと小さい子スロット内への選択した経路の伝搬を決定する。この段階で、プロセスは、そのような伝搬に見合うように、いくつかのネットに仮想ピンを追加することができる。
【００１３】
最後に、ステップ４０５のところで形成された子スロットが、最後の再帰動作によるスロットでない場合には、プロセス４００は、ステップ４０５のところで形成した各子スロットに対して再帰的に反復する。形成した各子スロットに対して再帰的に反復することにより、プロセス４００は、現在の領域内でそのネットに対するもっと多くの詳細な経路を形成する。すなわち、この再帰的プロセス４００は、階層的に経路を形成する。この場合、このプロセスは、再帰階層のレベルが高くなるので、より詳細な経路を形成する。
ある実施形態は、再帰的プロセス内の異なるレベルに対する異なる形の分割グリッドを使用する。しかし、下記の実施形態は、すべての再帰レベルに対して同じ形の分割グリッドを使用する。各再帰レベルにおいて、これらの実施形態は、その再帰レベルでのＩＣ領域の座標と一致させるために、分割グリッドの座標を調整する。すべての再帰レベルに対して同じ形の分割グリッドを使用すると、いくつかの利点が得られる。例えば、このプロセスは、再帰的プロセスのすべてのレベルに対して、同じ一組の予め表の形にした情報を再使用することができる。
【００１４】
ＩＩＩ．多重グリッド  
ある実施形態は、分割グリッドの他に１つまたはそれ以上のグリッドを使用する。
Ａ．多重集中グリッド
ある実施形態は、分割グリッドにより形成されるサブ領域間のルーティング経路の容量を量子化し、集中を測定するための概念上のモデルとして多重集中グリッドを使用する。図９は、２つのこのような集中グリッドである。下記のある実施形態は、図３の八角配線モデルと一緒にこれら２つのグリッドを使用する。
図９においては、２つのグリッドは、（１）３本の水平ラインおよび３本の垂直ラインにより形成されるグリッド９０５と、（２）７本の＋４５度の対角線および７本の−４５度の対角線により形成されるグリッド９１０である。グリッド９０５は、容量を指定し、水平ルーティング経路および垂直ルーティング経路の集中を測定するために使用され、一方、グリッド９１０は、容量を指定し、対角線ルーティング経路の集中を測定するために使用される。
より詳細に説明すると、図１０に示すように、グリッド９０５は、１２の垂直縁部（Ｅ０〜Ｅ１１）および１２の水平縁部（Ｅ１２〜Ｅ２３）を形成し、一方、グリッド９１０は、９つの−４５度縁部（Ｅ２４、Ｅ２６、Ｅ２８、Ｅ３０、Ｅ３２、Ｅ３４、Ｅ３６、Ｅ３８、Ｅ４０）、および９つの＋４５度縁部（Ｅ２５、Ｅ２７、Ｅ２９、Ｅ３１、Ｅ３３、Ｅ３５、Ｅ３７、Ｅ３９、Ｅ４１）を形成する。図１０においては、対角線縁部は、端接する場合に、これら縁部を容易に識別できるように終点を持つ。
図１０に示すように、各対角線縁部は、第１のグリッドで形成され、相互に対角線方向に隣接している２つのサブ領域の中心間の距離を走る。すなわち、各対角線縁部は、それらのコーナーの中の１つのところだけで端接するように、対角線方向に整合している２つのサブ領域の中心を接続する。図１１は、これらの縁部を見やすくするために、若干小さい対角線縁部を示す。
【００１５】
いくつかの実施形態の場合には、グリッド９０５および９１０は、また、分割領域の子スロット間のルーティング・パスを形成するために使用する。より詳細に説明すると、グリッド９０５および９１０により形成された各縁部に直角に、端接スロット（すなわち、端接サブ領域）を接続するために、ルーティング・ツリーが使用することができるルーティング・パスが存在する。例えば、図１２は、図１０の４２の縁部を横切る配線パスを示す。水平パスＰ０〜Ｐ１１は、垂直縁部Ｅ０〜Ｅ１１を横切って形成され、垂直パスＰ１２〜Ｐ２３は、垂直ルーティング・パスが交差する水平縁部Ｅ１２〜Ｅ２３を横切って形成され、＋４５度パスＰ２４、Ｐ２６、Ｐ２８、Ｐ３０、Ｐ３２、Ｐ３４、Ｐ３６、Ｐ３８、Ｐ４０は、−４５度縁部Ｅ２４、Ｅ２６、Ｅ２８、Ｅ３０、Ｅ３２、Ｅ３４、Ｅ３６、Ｅ３８、Ｅ４０を横切って形成され、−４５度パスＰ２５、Ｐ２７、Ｐ２９、Ｐ３１、Ｐ３３、Ｐ３５、Ｐ３７、Ｐ３９、Ｐ４１は、＋４５度縁部Ｅ２５、Ｅ２７、Ｅ２９、Ｅ３１、Ｅ３３、Ｅ３５、Ｅ３７、Ｅ３９、Ｅ４１を横切って形成される。
集中の問題は、縁部の容量または、パスの容量により表現および分析することができる。何故なら、これら二組の容量は相互に関連しているからである。下記のプロセスは、パスの容量により容量の問題を分析する。しかし、通常の当業者であれば、縁部の容量により容量の問題を分析するために、類似のプロセスを使用することができることを理解することができるだろう。
以下にさらに説明するように、ある実施形態は、各パスの容量を、パスが交差する縁部の大きさから入手する。例えば、ある実施形態は、対応する直交縁部の大きさ（すなわち、特定のパスに直交する縁部の大きさ）を、特定のパスに対応する金属層のピッチで割ることにより、特定の各パスの容量を計算する。ある実施形態は、金属層のピッチを、ライン−バイア間のピッチとして定義する。ある実施形態は、ライン−バイア間のピッチを、その金属層上の相互接続ライン間の必要最短距離にライン幅の１／２を加え、さらに金属のオーバラップを含むバイアの幅の１／２を加えたものと定義する。
【００１６】
ある実施形態の場合には、対角線パスの容量は、マンハッタン・パスの容量とは異なる。このような違いは、対角線パスおよびマンハッタン・パスに直交する縁部の大きさの違いによるものと思われる。また、このような違いは、マンハッタン・ラインのピッチとは異なる対角線のピッチによるものと思われる。さらにまた、このような違いは、もう１つの層のピッチとは異なるある層のピッチによるものと思われる。例えば、いくつかの実施形態の場合には、−４５度対金属層のピッチが＋４５度金属層のピッチと異なる場合には、−４５度の対角線パスの容量は、＋４５度対角線パスの容量とは異なる。
図９の場合には、グリッド９０５は、図５の分割グリッドと同じものである。しかし、通常の当業者であれば、両方の集中グリッドは、分割グリッドから異なる場合があることを理解することができるだろう。さらに、図９は、いくつかの実施形態のための２つの集中グリッド９０５および９１０を示す。通常の当業者であれば、他の実施形態も、他の多重グリッド配置構成を使用できることを理解することができるだろう。
ある実施形態は、通常、必要な設計レイアウトおよび／またはＩＣを設計するために使用する配線モデルの配線方向および配線レベルの数に基づいて、集中グリッドの数および構造を定義する。例えば、ある実施形態は、水平方向、垂直方向、＋１２０度対角線方向、および−１２０度対角線方向にルーティングすることができる配線モデルを使用する。このような配線モデルの場合には、２つの集中グリッドを使用することができる。グリッド９０５のように、第１のグリッドは、容量を定義し、垂直ルーティング・パスおよび水平ルーティング・パスの集中を測定するために、交差している水平ラインおよび、垂直ラインにより形成することができる。第２のグリッドは、容量を定義し、±１２０度の対角線ルーティング・パスの集中を測定するために使用することができる。この第２のグリッドは、第１のグリッドの軸に対して第２のグリッドの軸が１２０度回転していることを除けば、第１のグリッドに類似しているものであってもよい。すなわち、この第２のグリッドは、多数の交差している±３０度のラインにより形成することができる。
【００１７】
Ｂ．集中グリッドおよび長さグリッド
ある実施形態は、（１）ＩＣ領域を分割し、この領域内の集中を測定するための第１のグリッド、および（２）この領域内のワイヤの長さのコストを測定するための第２のグリッドを使用する。図１３〜図１８は、いくつかのこのような実施形態を示す。これらの実施形態は、水平ライン、垂直ライン、および、±４５度相互接続ラインを含む配線モデルを使用する。通常の当業者であれば、他の実施形態は、（±１２０度ラインを使用すう配線モデルのような）他の配線モデルを使用する。
図１３は、ある実施形態が、ＩＣ領域を１６のサブ領域に分割するために使用する第１のグリッド１３０５を示す。このグリッドは、また、この領域内のマンハッタン相互接続ラインおよび非マンハッタン相互接続ラインの集中を測定するために使用される２４の縁部Ｅ０〜Ｅ２３を定義する。図１４に示すように、２４のマンハッタン・パスＰ０〜Ｐ２３および４８の対角線パスＰ２４〜Ｐ７１は、これら２４の縁部Ｅ０〜Ｅ２３を横切って形成される。各パスは、縁部に対応するパスを横切るパスの方向の配線の１つまたはそれ以上のトラックを表す。
垂直縁部Ｅ０〜Ｅ１１は、水平パスＰ０〜Ｐ１１の方向、および±４５度対角線パスＰ２４〜Ｐ２９、Ｐ３８〜Ｐ４３、Ｐ５２〜Ｐ５７およびＰ６６〜Ｐ７１の方向に、これらの垂直縁部を横切るワイヤの（すなわち、相互接続ラインの）集中を測定するために使用される。同様に、水平縁部Ｅ１２〜Ｅ２３は、垂直パスＰ１２〜Ｐ２３、および±４５度対角線パスＰ３０〜Ｐ３７、Ｐ４４〜Ｐ５１および、Ｐ５８〜Ｐ６５の方向に、これら水平縁部を横切るワイヤの集中を測定するために使用される。
【００１８】
ある実施形態は、パスＰ０〜Ｐ７１により各経路を定義する。パスＰ０〜Ｐ７１は、また、ＩＣ領域内の集中を測定するために使用される。ある実施形態の場合には、対角線パスＰ２４〜Ｐ７１沿いの容量は、マンハッタン・パスＰ０〜Ｐ２３沿いの容量より小さい。例えば、ある実施形態は、（１）各マンハッタン・パスは、最も低いレベルの（すなわち、Ｇｃｅｌｌレベルの）子スロットのところのワイヤの８トラックを表し、（２）各対角線パスが、対角線層およびマンハッタン層が同じピッチを持っている場合、Ｇｃｅｌｌレベルのところのワイヤの５トラックを表すように指定する。ある実施形態は、対角線パスの層のピッチが、マンハッタン・パス層のピッチより広い場合、Ｇｃｅｌｌレベルのところで、対角線パスに対して４トラック以下を指定する。
すでに説明したように、ある実施形態は、この領域内の経路のワイヤの長さのコストを測定するために第２のグリッドを使用する。この長さグリッドは、各集中グリッドの子スロットをもっと小さなスロットに分割する。例えば、図１５は、グリッド１３０５の１６の各集中グリッドの子スロットを、４つのスロットに分割する長さグリッドを示し、一方、図１６は、グリッド１３０５の１６の各集中グリッドの子スロットを１６のスロットに分割する長さグリッドを示す。他の実施形態は、集中グリッドの子スロットを分割するために、他のタイプのグリッド（例えば、３×５グリッド）を使用する。
【００１９】
図１７は、図１５の２×２の分割が、各集中グリッドの子スロット内の、結果として得られる４つのスロット間のルーティング用の６つのパスを定義し、一方、図１８は、図１６の４×４の分割が、各集中グリッドの子スロットの、結果として得られる１６のスロット間をルーティングするための４２のパスを定義する様子を示す。さらに、各タイプの分割は、隣接する集中グリッドの子スロットの長さグリッド・スロット間の数本のパスを定義する。これらのパスについては、以下にさらに詳細に説明する。
長さグリッドは、すべてのネット・ピンを接続するために、長さグリッド・パスを横切る１つまたはそれ以上のセグメントを識別することにより、各ネットの経路のワイヤ長さのコストを推定するために使用される。すなわち、ネット経路の場合、推定したワイヤ長さのコストは、（１）ネット・ピンを含む長さグリッド・スロットを接続していて、（２）ネット経路が使用する集中グラフ・パスと同じ方向の集中グラフ・パスを横切る一組の長さグリッド・パスの長さである。一組の長さグリッド・パスのワイヤ長さコストは、ネット・ピンを含む長さグリッド・スロットを接続している内部パス（すなわち、集中グリッド・スロット内の長さグリッド・パス）のコストに入射集中グラフ縁部を横切る周辺長さグリッド・パスのコストを加えたものを含む。
ある実施形態の場合には、周辺長さグリッド・パス（すなわち、集中グリッド・スロット間の長さグリッド・パス）への集中グリッド・パスの伝搬は、長さグリッドに対するネット・ピン構成の仮想ピンの設定を必要とする場合がある。さらに、内部長さグリッド・パスは、ネットの実際のまたは仮想のピンを含む長さグリッド・スロットを接続する。また、すでに説明したように、周辺長さグリッド・パス（すなわち、集中グラフ縁部を横切るパス長さグリッド・パス）は、ネット経路が使用する集中グラフ・パスと同じ方向を向いている集中グラフ縁部を横切る。
【００２０】
図１７および図１８は、対角線方向に隣接する集中グリッドの子スロット間の対角線方向の長さグリッド・パスを示す。これらの図面においては、このような対角線方向の長さグリッド・パスは、点線の○で囲んである。ある実施形態は、このような対角線方向の長さグリッド・パスを定義し、他の実施形態はこのような定義を行わない。
また、対角線方向に隣接する集中グリッドの子スロット間の対角線方向の長さグリッド・パスを持ついくつかの実施形態は、これらの対角線方向の長さグリッド・パスを、対角線方向の集中グラフ・パスと相互に関連付けるために、特定の申し合わせを使用する。ある実施形態の場合には、このような−４５度の長さグリッド・パスは、その対応する底部および左の集中グラフ・パス、またはその対応する頂部および右の集中グラフ・パスに接続している。例えば、−４５度の長さグリッド・パスが、集中グラフ子スロット９および１２間に使用されている場合には、ある実施形態は、パス５３および５９のパスの使用を１だけ増加し、一方、他の実施形態は、パス６１および６７のパスの使用を１だけ増加する。（図１４は、パス５３、５９、６１および６７を示す。）
同様に、いくつかの実施形態は、＋４５度の長さグリッド・パスは、その対応する底部および右の集中グラフ・パス、またはその対応する頂部および左の集中グラフ・パスに接続している。例えば、＋４５度の長さグリッド・パスが、集中グラフ子スロット８および１３間に使用されている場合には、いくつかの実施形態は、パス５８および６６のパスの使用を１だけ増加し、一方、他の実施形態は、パス５２および６０のパスの使用を１だけ増加する。（図１４は、パス５２、５８、６０および６６を示す。）
【００２１】
別の方法としては、いくつかの実施形態は、対角線方向に隣接する集中グリッドの子スロット間の対角線方向の長さグリッド・パスを周囲の４つの集中グラフ・パスの中の１本だけに接続し、１つの追加のトラックをこの集中グラフ・パスの容量に割り当てる。いくつかの実施形態は、−４５度の長さグリッド・パスを、その対応する左の集中グラフ・パスに接続し、＋４５度の長さグリッド・パスをその対応する右の集中グラフ・パスに接続する。このアプローチを使用する場合には、いくつかの実施形態は、集中グラフ子スロット９および１２間の−４５度の長さグリッド・パスを、パス５９に関連付け、パス５３に５の容量を割り当てる一方で、Ｇｃｅｌｌレベルで、パス５９に６の容量を割り当てる。
さらに他のいくつかの実施形態は、集中グラフの子スロット間の対角線方向の長さグリッド・パスを対角線方向の集中グラフ・パスＰ０〜Ｐ７１と相互に関連付けない。代わりに、これらの実施形態は、１８組の対角線方向に隣接する集中グラフ・パス間の１８の追加の対角線方向の集中グラフ・パスを定義する。これら１８の追加の各集中パスは、特定の長さグリッド・パスに対応する。また、Ｇｃｅｌｌレベルのところで、いくつかの実施形態は、これら１８の各追加パスが、１トラック幅になるように定義する。
他の実施形態は、別の方法で集中グリッドおよび長さグリッドを使用する。例えば、いくつかの実施形態は、集中グリッド１３０５に対するネット構成に基づいて経路を識別し、次に、識別した経路のワイヤ長さコストおよび集中コストを計算するために、長さグリッドおよび集中グリッドを使用する。他の実施形態は、長さグリッドを通してネットに対する経路を継続的に拡張する。各拡張および、潜在的な拡張の場合、これらの実施形態は、拡張または潜在的な拡張をコストを見積もるために、長さグリッドを使用する。拡張または潜在的な拡張が、集中グリッド縁部の中の１つを横切る場合には、これら実施形態は、それに対する集中コストを要因として考慮する。また、すでに説明したように、いくつかの実施形態は、最終的に、集中グリッドを横切って形成されたパスＰ０〜Ｐ７１により、各経路だけを定義するが、他の実施形態は、そのような定義は行わない。
【００２２】
ＩＶ．配線モデルの適応選択
いくつかの実施形態は、設計領域（すなわち、設計中の領域）のアスペクト比（高さ対幅の比）に基づいてその配線モデルを適応できるように選択する。図１９は、適応できるような選択を行うためのプロセス１９００である。このプロセスは、通常、プロセス４００の４０５のところでの分割グリッドの定義の前に実行される。いくつかの実施形態の場合には、設計者は、手動でこのプロセスのいくつかの動作またはすべての動作を行い、一方、他のいくつかの実施形態の場合には、ルータが、自動的にこのプロセスのいくつかの動作またはすべての動作を行う。
このプロセスは、（ステップ１９０５において）最初に、設計領域のアスペクト比を識別する。アスペクト比を識別するために、プロセスは、設計領域の大きさに基づいてこのアスペクト比を計算することができるし、または、設計ブロックに対する予め表の形にしたアスペクト比を検索することができる。このプロセスは、次に、（ステップ１９１０において）識別したアスペクト比に基づいて配線モデルを選択する。あるいくつかの実施形態の場合には、次に、プロセス１９００は、（ステップ１９１５において）分割グリッドおよび／または集中グリッドを適応できるように選択する。あるいくつかの実施形態の場合には、このプロセスは、配線モデルに基づいて、分割グリッドおよび／または集中グリッドを適応できるように選択する。
【００２３】
配線モデルを適応できるように選択することにより、いくつかの設計目標（例えば、ワイヤの長さの最短距離への短縮および集中のを最小限度への低減）を達成するために、設計領域をルーティングすることができる。例えば、比較的大きなアスペクト比を持つ回路ブロック（すなわち、高さが高くまた細長い回路ブロック）を設計している場合には、いくつかの実施形態は、水平方向、垂直方向、±１２０度の対角線方向でルーティングすることができる配線モデルを、適応できるように選択することができる。何故なら、このような配線モデルは、回路ブロックのようなルーティングの場合、ワイヤの長さを短くし、集中を低減するからである。このような配線モデルの場合、いくつかの実施形態は、交差している水平ラインおよび垂直ラインにより形成されている、（図９のグリッド９０５のような）第１の集中グリッド、およびすでに説明したように、交差している±３０度ラインにより形成されている第２の集中グリッドを使用する。
また、このような配線モデルおよびＩＣ領域の場合には、いくつかの実施形態は、ＩＣ領域を大きなアスペクト比を持つもっと小さい領域に分割する分割グリッドを使用する。このようないくつかの実施形態の場合には、対角線方向に隣接する分割領域は、相互に１２０度ずれているその中心を持っているので、その中心は、１２０度の対角線で接続することができる。
大きなアスペクト比を持つ設計ブロックに対しては、多数の他の配線モデルを使用することができる。例えば、他の配線モデルとしては、水平方向、垂直方向、±４５度対角線方向、および±１２０度対角線方向にルーティングすることができる配線モデルがある。このような配線モデルの場合には、いくつかの実施形態は、下記の３つの集中グリッド、すなわち、（１）水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、（図９のグリッド９０５のように）形成されている第１のグリッド、（２）±１２０度のパス用のものであって、交差している±３０度のラインにより形成されている第２のグリッド、（３）±４５度のパス用のものであって、交差している±４５度の対角線により形成されている第３のグリッドを使用することができる。
【００２４】
同様に、小さなアスペクト比を持つ設計ブロック（すなわち、高さが低く幅の広いブロック）に対しては、多数の配線モデルを使用することができる。例えば、いくつかの実施形態は、このようなブロックに対して、水平方向、垂直方向、±３０にルーティングすることができる配線モデルを選択することができる。このような配線モデルの場合には、いくつかの実施形態は、下記の２つの集中グリッド、すなわち、（１）水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、（図９のグリッド９０５のように）形成されている第１のグリッド、（２）±３０度の対角線パス用のものであって、交差している±１２０度のラインにより形成されている第２のグリッドを使用することができる。
このような配線モデルおよびＩＣグリッドの場合には、いくつかの実施形態は、ＩＣ領域を小さなアスペクト比を持つもっと小さい領域に分割する分割グリッドを使用する。このようないくつかの実施形態の場合には、対角線方向に隣接する分割領域は、相互に３０度ずれているその中心を持っているので、その中心は、３０度の対角線で接続することができる。
このようなブロック用のもう１つの配線モデルとしては、水平方向、垂直方向、±４５度の対角線方向、および、±３０度の対角線方向にルーティングすることができる配線モデルがある。このような配線モデルの場合には、いくつかの実施形態は、下記の３つの集中グリッド、すなわち、（１）水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、（図９のグリッド９０５のように）形成されている第１のグリッド、（２）±３０度の対角線パス用のものであって、交差している±１２０度のラインにより形成されている第２のグリッド、（３）±４５度の対角線パス用のものであって、交差している±４５度の対角線により（図９のグリッド９１０のように）形成されている第３のグリッドを使用することができる。
【００２５】
設計ブロックが正方形である場合には、いくつかの実施形態は、好適には、図３のところで説明した５層の八角配線モデルのような対称形の配線モデルを選択することが好ましい。しかし、この場合には、他のいくつかの実施形態は、もっと複雑な配線モデルを使用することができる。例えば、いくつかの実施形態は、図３の第１の５層の他に、図３の層２〜５に類似している他の４つの層を含むことができる。このような配線モデル用の一組の集中グリッドは、層２〜５に対して上記グリッド９０５および９１０、および層６〜９に対して他の２つのグリッド９０５および９１０を含むことができる。
いくつかの実施形態が使用することができるもう１つの複雑な対称形の配線モデルは、最後の４つの層（すなわち、層６〜９）内の好適な方向が、同じ方向に２２．５度だけずれている点を除けば、上記９層モデルに類似している。このように類似しているので、各ルーティング・パスの方向が、その隣接するルーティング・パスの方向から２２．５度である、任意の所与の点から１６のルーティングを供給する。このような配線モデルに対する一組の集中グリッドは、層１〜５に対して上記のグリッド９０５および９１０、および層６〜９に対して２２．５度ずれているグリッド９０５および９１０というもう１つの２つのグリッドを含むことができる。
【００２６】
Ｖ．予め表の形にするルーティング情報
すでに説明したように、いくつかの実施形態は、記憶装置内に、子スロットの異なる構成に対する経路を予め計算し、記憶する。実行時に、これらの実施形態のルータは、（１）分割グリッドに対する各ネットの構成を識別することにより、（２）記憶構造体から、識別した構成に対する経路検索することにより、ネットに対する経路の一部または全部を識別する。シュタイナー・ツリー経路を予め表の形にする１つの方法については、図２０〜図３４を参照しながら以下に説明する。
一方、他のいくつかの実施形態は、リアルタイムで経路を生成するために、ネット構成を使用する。さらに他のいくつかの実施形態は、経路を生成し、検索するためにネット構成を使用する。例えば、いくつかの実施形態は、いくつかのネットに対する経路を予め表の形にした経路を検索し、他のネットに対する経路を生成するために、ネット構成を使用する。図３５〜図３８を参照しながら、このようなアプローチの１つについて以下に説明する。
【００２７】
Ａ．シュタイナー・ツリー経路を予め表の形にする方法
図２０〜図３４は、分割グリッドに対する可能なネット構成をモデル化する、シュタイナー・ツリーを予め表の形にする１つの方法を示す。これらのツリーの属性を予め表の形にする方法についても以下に説明する。すでに説明したように、ルータは、ルーティング・プロセス中に、このように予め表の形にされた経路および／または属性を使用することができる。他のＥＤＡアプリケーションも、これらの経路および／または属性を使用することができる。例えば、２０００年１２月６日付けの、「再帰的分割設置方法および装置」という名称の米国特許出願番号第０９／７３２，１８１（特許文献１）が開示しているように、プレーサは、設置コストを知るために、予め表の形にしたワイヤの長さ、パス・カウント値、および／またはパス確率値を使用することができる。
【００２８】
１．ツリーの２つのノードを接続している相互接続ラインの長さの計算
図２０および図２１は、いくつかの実施形態が、どのようにして、ツリーの２つのノードを接続している相互接続ラインの長さを測定するかを示す。これらの実施形態は、２つのノードを、長い辺（Ｌ）と短い辺（Ｓ）とを持つ囲みボックスの対向する隅として処理することによりこれらの動作を実行する。
図２０は、２つのノード２０３５および２０４０に対する囲みボックス２００５の一例である。この図に示すように、ライン２０１０は、水平相互接続ライン、垂直相互接続ライン、および対角線相互接続ラインを使用するレイアウトに対してノード２０３５および２０４０間の短い距離を通る。このラインの一部は対角線である。より詳細に説明すると、この例の場合には、このラインの１つにセグメント２０２０は対角線であり、一方他のセグメント２０１５は水平ラインである。
下式（Ａ）は、ライン２０１０が通る距離、（すなわち、ノード２０３５と２０４０間の最短距離）を供給する。
距離＝［Ｌ−｛Ｓ（ｃｏｓＡ／ｓｉｎＡ）｝］＋Ｓ／ｓｉｎＡ    （Ａ）
ここで、「Ｌ」は、この例においてはｘ軸沿いのボックスの幅２０２５である長い辺であり、一方、Ｓは、この例においてはｙ軸沿いのボックスの高さ２０３０である、ボックスの短い辺である。また、ここで、「Ａ」は、対角線セグメント２０２０と囲いボックスの長い方の辺との間の角度である。いくつかの実施形態の場合には、この角度Ａは、レイアウト内の対角線方向の相互接続ラインに対応する。例えば、いくつかの実施形態の場合には、レイアウトが図３の八角配線モデルを使用している場合には、角度Ａは４５度である。
式（Ｂ）〜（Ｄ）は、式（Ａ）を導き出す方法を示す。ライン２０１０の長さは、２つのセグメント２０１５および２０２０の長さの和に等しい。式（Ｂ）により水平セグメント２０１５の長さを求めることができ、式（Ｃ）により対角線セグメント２０２０の長さを求めることができる。
２０１５の長さ＝Ｌ−（２０２０の長さ）＊（ｃｏｓＡ）      （Ｂ）
２０２０の長さ＝Ｓ／ｓｉｎＡ                              （Ｃ）
簡単にした場合上式（Ａ）になる下式（Ｄ）を求めるために、式（Ｂ）および（Ｃ）を一緒にすることができる。
距離＝２０１５の長さ＋２０２０の長さ
＝Ｌ−Ｓ／ｓｉｎＡ＊（ｃｏｓＡ）＋Ｓ／ｓｉｎＡ        （Ｄ）
角度Ａが４５度である場合には、式（Ａ）を簡単にして、下式（Ｅ）にすることができる。
距離＝Ｌ＋Ｓ＊（ｓｑｒｔ（２）−１）                      （Ｅ）
囲みボックスの幅および高さがゼロである場合には、囲みボックスは１本のラインになり、このラインの両端間の距離は、水平ラインの場合もあるし、垂直ラインの場合もある、ボックスの長い（そして唯一の）辺となる。囲みボックスの高さおよび幅が等しい場合、（すなわち、正方形である場合）であり、角度Ａが４５度である場合には、完全な対角線であるラインは、囲みボックスの２つの対向する隅間の最短距離を示す。
【００２９】
図２１は、ツリーの２つのノードに対する囲みボックスを識別し、囲みボックスの大きさおよび式（Ａ）に基づく２つのノードを接続している相互接続ラインの長さを計算するプロセス２１００を示す。このプロセスは、（ステップ２１０５において）最初に、第１のノードのｘ座標（Ｘ１）が、第２のノードのｘ座標（Ｘ２）より長いかどうかを判断する。そうである場合には、プロセスは、（ステップ２１１０において）第１のノードのｘ座標（Ｘ１）を最大ｘ座標（ＸＭＡＸ）として定義し、第２のノードのｘ座標（Ｘ２）を最小ｘ座標（ＸＭＩＮ）として定義する。そうでない場合には、プロセスは、（ステップ２１１５において）第２のノードのｘ座標（Ｘ２）を最大ｘ座標（ＸＭＡＸ）として定義し、第１のノードのｘ座標（Ｘ１）を最小ｘ座標（ＸＭＩＮ）として定義する。
次に、このプロセスは、（ステップ２１２０において）第１のノードのｙ座標（Ｙ１）が第２のノードのｙ座標（Ｙ２）より長いかどうかを判断する。そうである場合には、プロセスは、（ステップ２１２５において）第１のノードのｙ座標（Ｙ１）を最大ｙ座標（ＹＭＡＸ）として定義し、第２のノードのｙ座標（Ｙ２）を最小ｙ座標（ＹＭＩＮ）として定義する。そうでない場合には、プロセスは、（ステップ２１３０において）第２のノードのｙ座標（Ｙ２）を最大ｙ座標（ＹＭＡＸ）として定義し、第１のノードのｙ座標（Ｙ１）を最小ｙ座標（ＹＭＩＮ）として定義する。
次に、プロセスは、（ステップ２１３５において）囲みボックスの４つの座標を、（ＸＭＩＮ，ＹＭＩＮ）、（ＸＭＩＮ，ＹＭＡＸ）、（ＸＭＡＸ，ＹＭＩＮ）および（ＸＭＡＸ，ＹＭＡＸ）として定義する。次に、プロセスは、（ステップ２１４０において）囲みボックスの幅および高さを測定する。次に、プロセスは、（１）ボックスの最大ｘ座標および最小ｘ座標間の距離を測定することにより幅を、（２）ボックスの最大ｙ座標および最小ｙ座標を測定することにより高さを測定する。次に、プロセスは、（ステップ２１４５において）計算した幅が計算した高さより長いかどうかを判断する。そうである場合には、プロセスは、（ステップ２１５０において）幅を長い辺と定義し、高さを短い辺と定義する。そうでない場合には、プロセスは、（ステップ２１５５において）幅を短い辺と定義し、高さを長い辺と定義する。
ステップ２１５０および２１５５の後で、プロセスは、（ステップ２１６０において）２つのノードを接続している最短の相互接続ラインの長さを計算するために式（Ａ）を使用する。これでプロセスは終了する。
【００３０】
２．すべての可能なネット構成に対するシュタイナー・ツリーの形成と、各ツリーに対する長さおよび配線パス情報の予め表の形による表示
図２２は、（１）分割グリッドに対する可能な各ネット構成に対する１つまたはそれ以上の最適なシュタイナー・ツリーを形成し、（２）参照テーブル（「ＬＵＴ」）のような記憶構造体内へ各シュタイナー・ツリーの長さを記憶し、（３）グリッド内の各ワイヤ・パスを使用するツリーの確率を計算し、記憶し、（４）記憶構造体内に各ツリーに対するワイヤ・パスを記憶することにより、各ツリーの同一性を記憶するプロセス２２００を示す。
このプロセス２２００は、ルータがその動作をスタートする前に行われるので、ルータは、各ネット構成に対してシュタイナー・ツリーをリアルタイムで形成する必要はない。代わりに、プロセス２２００のおかげで、ルータは（１）特定のグリッドに対する各ネットの構成を識別し、（２）識別した構成に対して記憶している属性を検索するだけでいい。
図２２に示すように、プロセス２２００は、最初に、（ステップ２２０５において）特定の分割グリッドにより定義された（スロットとも呼ぶ）各サブ領域に対してツリー・ノードの定義することによりスタートする。図２３は、４×４分割グリッドにより生成された１６のスロットに対する１６のツリー・ノード２３０５を示す。これらのノードは、すべてのネット構成の相互接続ライン・トポロジーをモデル化するツリーの潜在的なノードを示す。図２３の場合には、識別されたノードは、各スロットの中心に位置する。他の実施形態の場合には、ノードは、スロット内の他の位置に均等に定義することができる（例えば、スロットの隅の中の１つに均等に位置させることができる）。
【００３１】
次に、プロセス２２００は、（ステップ２２１０において）一組のＮ個の可能なノード構成を定義する。分割グリッドが、Ｙ個（例えば、４、９、１６、２０等）のサブ領域を定義した場合には、一組のＮは、２Ｙのノード構成を含む。可能なノード構成の一組のＮを定義した後で、プロセス２２００は、（ステップ２２１５において）この一組から可能なノード構成ＮＴの中の１つを選択する。
次に、プロセスは、（ステップ２２２０において）ステップ２２１５で選択したノード構成に対する１つまたはそれ以上の最短距離接続ツリー（「ＭＳＴ」）を形成し、形成された各ツリーの長さ（ＭＳＴコスト）を計算する。以下にさらに説明するように、形成された各ＭＳＴは、全体がまたはその一部が対角線である縁部を持つことができる。１つ以下のノードを持つノード構成は、ＭＳＴを持たないので、そのＭＳＴコストはゼロである。さらに、図２５Ａは、１つまたはそれ以上のＭＳＴを形成し、２つまたはそれ以上のノードを含むノード構成に対する各ＭＳＴの長さを計算するプロセス２５００を示す。このプロセス２５００については以下に説明する。
ステップ２２２０の後で、プロセス２２００は、（ステップ２２２５において）潜在的なシュタイナー・ノードを識別し、次に、（ステップ２２３０において）シュタイナー・ノードのすべての可能な組合わせを定義する。図２４を参照しながら、潜在的なシュタイナー・ノードを識別する１つの方法について以下に説明する。ステップ２２３０で定義されたシュタイナー・ノードの各組は、ステップ２２２５で識別された１つまたはそれ以上のシュタイナー・ノードを含む。また、シュタイナー・ノードの定義された各組は、選択したノード構成のノードの数より少ない２つのノードである最大の大きさを持つ。
【００３２】
次に、ステップ２２３０で識別されたシュタイナー・ノードの各組に対して、プロセスは、（ステップ２２４０において）（１）選択したノード構成および選択したシュタイナー・ノードの組内のノードの１つまたはそれ以上のＭＳＴを形成し、（２）各ＭＳＴの長さ（ＭＳＴコスト）を計算し、記憶する。形成された各ＭＳＴは、全体がまたはその一部が対角線である縁部を使用することができる。すでに説明したように、１つ以下のノードを持つノード構成は、ＭＳＴを持たないので、そのＭＳＴコストはゼロである。さらに、図２５Ａは、１つまたはそれ以上のＭＳＴを形成し、２つまたはそれ以上のノードを含むノード構成に対する各ＭＳＴの長さを計算するプロセス２５００を示す。このプロセス２５００については、以下にさらに詳細に説明する。
次に、プロセス２２００は、（ステップ２２４０において）ステップ２２２０または２２３５のところで生成したＭＳＴの最短の組を、現在のノード構成に対する最適なシュタイナー・ツリーとして選択する。他の実施形態の場合には、このプロセスは、その一組のシュタイナー・ツリーを選択するのに他の基準を使用する。ステップ２２４０において、プロセスは、また、（ＬＵＴのような）記憶構造体内に、ステップ２２４０のところで識別した１つまたは複数のシュタイナー・ツリーの長さ（ＭＳＴコスト）を記憶する。
ステップ２２４０において現在のノード構成に対する１つまたはそれ以上のシュタイナー・ツリーを選択した後で、プロセス２２００は、（ステップ２２４５において）選択したシュタイナー・ツリーから得られるルーティング・パス情報およびパス使用の確率を計算するために、プロセス２６００を呼び出す。このプロセスについては、図２６を参照しながら以下に説明する。
次に、プロセス２２００は、（ステップ２２５０において）自分がステップ２２１０のところで定義した一組のＮ内のすべてのノード構成をチェックしたかどうかを判断する。チェックが終わっていない場合には、プロセスは、この一組からチェックしていないノード構成を選択し、新しく選択したノード構成に対してステップ２２２０〜４５を反復して行うためにステップ２２１５に戻る。そうでない場合には、プロセスは終了する。
【００３３】
図２４は、潜在的なシュタイナー・ノードを識別するためのプロセス２４００である。図２４のプロセス２４００は、３つまたはそれ以上のノードを含むノード構成に対してだけ行えばよい。何故なら、ステップ２２２０のところで定義したシュタイナー・ノードの各組は、選択したノード構成のノードの数より少ない２つのノードの最大の大きさを持つからである（すなわち、何故なら、シュタイナー・ノードの組は、２つまたはそれ以下のノードを含むノード構成に対して、ステップ２２２０において定義されていないからである）。
プロセス２４００は、（ステップ２４０５において）ステップ２２１５において選択したノード構成の一部ではないステップ２２０５において定義したすべてのノードに等しい潜在的なシュタイナー・ノードのＰ組を初期化することによりスタートする。次に、このプロセスは、（ステップ２４１０において）潜在的なシュタイナー・ノードの中の１つを選択する。次に、プロセス２４００は、（ステップ２４１５において）ステップ２４１０において選択したノード（Ｑ）が、選択したノード構成の任意の２つのノード間の最短パス上に位置するかどうかを判断する。この判断を行うために、プロセスは、２つのノード（ＢおよびＣ）間の距離が、第１のノード（Ｂ）と選択したノード（Ｑ）間の距離（１）と、第２のノード（Ｃ）と選択したノード（Ｑ）間の距離（２）との和に等しくなるように、ノード構成で任意の２つのノード（ＢおよびＣ）が抜け出すかどうかを判断する。いくつかの実施形態の場合には、プロセスは、任意の一組のノード間の距離を計算するために、上記プロセス２１００および式（Ａ）を使用する。
【００３４】
プロセスが、ステップ２４１０において選択したノードＱが、ノード構成の任意の２つのノード間の最短パス上に位置すると判断した場合には、プロセスは、（ステップ２４２０において）選択したノードを潜在的なシュタイナー・ノードのＰ組内に維持し、このノードをチェック済みのノードとしてフラグを立て、以下に説明するステップ２４３０に進む。一方、選択したノード（Ｑ）が、選択したノード構成の任意の２つのノード間の最短パス上に位置していない場合には、プロセスは、（ステップ２４２５において）潜在的なシュタイナー・ノードのＰ組から選択したノードを除去し、ステップ２４３０に進む。
ステップ２４３０において、プロセスは、自分が潜在的なシュタイナー・ノード内のすべてのノードをチェックしたかどうかを判断する。チェックが終わっていない場合には、プロセスは、この組内のもう１つのノードを選択するためにステップ２４１０に戻り、それにより、プロセスは、ステップ２４１５において、このノードが選択したノード構成の任意の２つのノード間の最短パス上に位置しているかどうかを判断する。プロセスが（ステップ２４３０において）潜在的なシュタイナー・ノードの組内のすべてのノードのチェックは終了したと判断した場合には、プロセスは終了する。
図２５Ａは、図２２のプロセス２２００が、最短距離接続ツリーを形成するために、ステップ２２２０および２２３５において使用するプロセス２５００である。あるノード構成に対する最短距離接続ツリーは、ノードのところでだけ分岐する（すなわち、スタートまたは終了する）最短経路を通して、構成のＮ個のノードを接続する（すなわち、スパンする）Ｎ−１の縁部を持つツリーである。
【００３５】
本発明のいくつかの実施形態の場合には、ＭＳＴの縁部は、水平ラインであっても、垂直ラインであっても、対角線であってもよい。対角線縁部は、全部またはその一部が対角線であるものであってもよい。また、レイアウトが、対角線相互接続ライン（例えば、±４５度の相互接続ライン）を使用している場合には、ＭＳＴの対角線縁部は、レイアウト内の対角線相互接続ラインの一部のように、同じ方向（例えば、±４５度方向）を向いていてもよい。例えば、レイアウトが八角配線モデルを使用している場合には、（すなわち、水平ライン、垂直ラインおよび４５度の対角線を使用している場合には）いくつかの実施形態は、水平縁部、垂直縁部および４５度対角線縁部を持つＭＳＴを形成する。
ＭＳＴの各縁部の２つのノードを囲みボックスの２つの対向コーナーとして処理することにより、上記プロセス２１００および式（Ａ）を使用して、各縁部の長さを入手することができる。
距離＝［Ｌ−｛Ｓ（ｃｏｓＡ／ｓｉｎＡ｝］＋Ｓ／ｓｉｎＡ    （Ａ）
すでに説明したように、この式においては、「Ｌ」は、ボックスの長い辺であり、「Ｓ」は、ボックスの短い辺であり、「Ａ」は、縁部の対角線セグメントと囲みボックスの長い辺とが形成する角度である。
【００３６】
プロセス２５００は、プロセス２２００が、（ステップ２２２０または２２３５において）（１）Ｍ組のノードに対して１つまたはそれ以上のＭＳＴを形成するために、（２）形成された各ＭＳＴの長さを計算するために、プロセス２５００を呼び出した場合何時でもスタートする。このプロセスは、最初に、（ステップ２５０５において）ＭＳＴの長さ（ＭＳＴコスト）をゼロに設定する。次に、プロセスは、（ステップ２５１０において）（１）接続ツリーの第１のノードとして、受け取ったＭ組のノードから１つのノードを選択し、（２）このノードをこのＭ組から除去する。
次に、プロセス２５００は、（ステップ２５１５において）１つまたはそれ以上の完全なＭＳＴを表す１つまたはそれ以上のノードのリンクした組を識別するために、図２５Ｂのプロセス２５５０を呼び出す。このプロセス２５５０は、呼び出された場合、（１）不完全なＭＳＴを表す一組のノード、および（２）受け取った不完全なＭＳＴにまだ追加していなかったノード構成のノードである一組のノードＭを受け取る再帰的プロセスである。プロセス２５００が、プロセス２５５０を呼び出すと、このプロセスは、プロセス２５５０に、ステップ２５１０において選択した第１のノード、および残りのノードＭの修正した一組を供給する。これに応じて、再帰的プロセス２５５０は、以下にさらに詳細に説明するように、１つまたはそれ以上のＭＳＴを表すノードの１つまたはそれ以上のリンクした組を返送する。プロセス２５５０は、同じリンクしたノードの組の１つまたはそれ以上のコピーを返送することができる。それ故、プロセス２５００が、プロセス２５５０から１つまたはそれ以上のリンクしたノードの組を受け取った後で、プロセス２５００は、（ステップ２５２０において）同じ受信したリンクしたノードの組のすべての複写コピーを除去し、その結果、受け取った各ノードの組のコピーは１つだけになる。ステップ２５２０の後で、プロセス２５００は、形成したＭＳＴおよびその長さを返送し、終了する。
【００３７】
図２５Ｂに示すように、プロセス２５５０は、（ステップ２５２５において）呼び出された場合に受信するＭ組のノードに等しい残りのＲ組のノードを定義する。ステップ２５３０において、プロセス２５５０は、残りのノードの組Ｒから１つのノードを選択し、残りのノードの組から選択したノードを除去する。次に、プロセスは、（ステップ２５３５において）ステップ２５３０において選択したノードと、受信した不完全なＭＳＴの現在の各ノード間の距離を計算し、記憶する。選択したノードと各ノード間の距離は、対角線全体またはその一部である縁部により横切ることができる。それ故、いくつかの実施形態の場合には、プロセス２５５０は、選択したノードと各ノード間の最短距離を計算するために、上記プロセス２１００および式（Ａ）を使用する。
次に、プロセスは、（ステップ２５４０において）Ｒ組内に残っているノードがあるかどうかを判断する。残っている場合には、プロセスは、この組からもう１つのノードを選択するためにステップ２５３０に戻り、その結果、プロセスは、（ステップ２５３５において）このノードと接続ツリーの現在のノード間の距離を計算することができる。そうでない場合には、プロセスは、（ステップ２５４５において）ステップ２５３５において記録した最短距離を識別し、この距離から得られる１つまたは複数のノード・ペアを識別する（この場合、各ペア内においては、１つのノードは、受け取った組Ｍからのものであり、１つのノードは、受け取ったＭＳＴからのものである）。
【００３８】
次に、プロセス２５５０は、（ステップ２５５５において）ＭＳＴの長さ（ＭＳＴコスト）への識別した最短距離を加える。次に、プロセスは、（ステップ２５６０において）最も近いノードの１つ以上のペアを識別したかどうかを判断する。識別してない場合には、（すなわち、識別した最短距離が、組Ｍ内のただ１つのノードおよびＭＳＴ内のただ１つのノード間のものである場合には）、プロセスは、（ステップ２５６５において）（１）ステップ２５４５において識別したＭ組のノードに対応するツリー・ノードを定義し、（２）識別したノードを組Ｍから除去し、（３）識別したツリー・ノードをステップ２５４５において識別したＭＳＴノードにリンクする。ステップ２５６５において、プロセス２５５０は、また、識別したノードを除去した後、組Ｍが空である場合には、再帰的に自分自身を呼び出し、修正したＭＳＴおよび修正した組Ｍを供給する。一方、修正した組Ｍが空の場合には、プロセス２５５０は、ステップ２５６５からステップ２５７５へ進み、そこでこのプロセスは、ステップ２５６５において完全になった１つの完全なＭＳＴを表す一組のノードを返送する。ステップ２５７５の後で、プロセス２５５０は終了する。
プロセス２５５０が、（ステップ２５６０において）１つ以上の「最も近い」ノード・ペアを（ステップ２５４５において）識別したと判断した場合には、このプロセスは、識別した最も近い各ノード・ペアに基づいて、完全なＭＳＴを順次、再帰的に入手しようとする。すなわち、このプロセスは、最初、識別したノード・ペアの中の１つを選択し、次に、（１）組Ｍから選択したペアの組Ｍのノードを除去し、（２）除去したノードをペアのＭＳＴノードにリンクし、（３）修正したＭＳＴおよび修正した組Ｍに対して再帰的に反復する。プロセス２５５０がこの再帰の結果を受け取ると、（すなわち、このプロセスが選択したノード・ペアに対する完全なＭＳＴを受け取ると）プロセス２５５０は、このノード・ペアに基づいて、完全なＭＳＴを入手するために、同じ３つの動作を実行する。このプロセスは、このプロセスが、識別した「最も近い」各ノード・ペアに基づいてＭＳＴを生成するまで、この方法で引き続き行われる。識別した各ノード・ペアを順次処理した後で、プロセスは、（ステップ２５７５において）ＭＳＴを返送し、終了する。
【００３９】
図２６は、ステップ２２５０において選択したシュタイナー・ツリーからのルーティング・パス情報およびパス使用確率を計算するプロセス２６００を示す。このプロセス２６００は、プロセス２２００が、ステップ２２４５においてプロセス２６００を呼び出し、それに一組のシュタイナー・ツリーを供給する度にスタートする。
プロセス２６００は、（ステップ２６０５において）各パスに対するカウント値を記憶するグローバル・カウント変数を初期化することによりスタートする。受け取った各ツリーに対して、プロセスは、（ステップ２６１０において）そのツリーのルーティング・パス情報を記憶するためのビット・ストリングを初期化する。次に、プロセスは、（ステップ２６１５において）受け取ったシュタイナー・ツリーを選択し、（ステップ２６２０において）ツリー内の縁部の中の１つを選択する（すなわち、ツリー内のリンクしているノードの１つのペアを選択する。この場合、これらのノードは、プロセス２５５０のステップ２５６５または２５７０においてリンクされる）。次に、プロセスは、（ステップ２６２５において）パスの１つ以上のペアが、選択したツリー縁部をルーティングするために（すなわち、ノードの選択したペアを接続するために）存在するかどうかを判断する。いくつかの実施形態の場合には、プロセスは、ツリー・スロット・ノードの任意の組合わせに対するパス使用値を記憶している記憶構造体（例えば、ＬＵＴ）から、選択したツリー縁部に対するパス値を検索する。すなわち、この記憶構造体は、パス使用値を設定するために、グリッド内の可能な各ツリー縁部の終点をマッピングする。
ツリー縁部の終点が隣接していない場合には（すなわち、ステップ２６２０において選択したノードのペアが隣接していない場合には）、終点間に（すなわち、ノード・ペア間に）２つ以上の最適な経路が存在する。それ故、ＬＵＴ内のパス使用値は、複数の最適経路に対して値を指定することができる。
【００４０】
図６〜図８の３つのシュタイナー・ツリーを表すことができる、二組のノード接続は、（１）図６のシュタイナー・ツリー６０５に対する、ノード６１０−ノード６１５−シュタイナー・ノード６２０−ノード６２５−ノード６３０により形成されたノード・セットであり、（２）図７または図８のシュタイナー・ツリーに対する、ノード６２５−ノード６１０−ノード６１５−ノード６３５により形成されたノード・セットである。
図６のシュタイナー・ツリー６０５を表すノードの第１のセット内においては、ノードの任意の接続しているペア間には、１つの経路が存在するだけである。それ故、このセットからの任意のペアの場合には、ＬＵＴのマッピングは、選択したノード・ペア間の経路に対する値を除いて、０に等しいすべての値と一緒に、４２の値が返送される。このゼロでない値は、選択したノード・ペア間に１つの経路しか存在しないことを示す１である。
一方、シュタイナー・ツリー７０５または８０５を表すノードの第２の組の場合には、ノード６１５とノード６３０との間に２つの経路が存在する。このシュタイナー・ツリー７０５は、これらの経路の中の１つの経路を使用し、一方、シュタイナー・ツリー８０５は他の経路を使用する。このノード・セット内のこのノード・ペア（すなわち、ノード６１５および６３０）に対して、ＬＵＴマッピングは、２つの４２ビットのストリングを返送する。すなわち、一方のストリングをシュタイナー・ツリー７０５に、他方のストリングをシュタイナー・ツリー８０５に返送する。ツリー８０５に対するビット・ストリングは、１に設定されたパス１および２８、および０に設定された残りの値に対して値を持ち、一方、ツリー７０５に対するビット・ストリングは、１に設定されたパス５および２６、および０に設定された残りの値に対して値を持つ。
【００４１】
プロセスが、ステップ２６２５において２つ以上のビット・ストリングを検索しなかった場合には、プロセスはステップ２６３５に進む。これについては以下に説明する。そうでない場合で、プロセスが、選択したツリー縁部をルーティングするために（すなわち、ノードの選択したペアを接続するために）、Ｎ個の経路に対してＮ個のビット・ストリングを検索した場合には（この場合、Ｎは２と等しいか２より大きい整数である）、プロセスは、現在のツリーの１つまたは複数の現在のビット・ストリングのＮ−１の複写コピーを作り、ツリーのコピー間に異なる経路を埋設する。
すなわち、プロセスは、（ステップ２６３０において）現在のツリーの１つまたは複数のビット・ストリングのＮ−１の複写コピーを作る。現在のツリーに対するビット・ストリングは、ステップ２６１０において初期化され、そのビット・ストリングが、ステップ２６３０においてすでに複写されていた場合には、現在ツリーは、複数のビット・ストリングを持つ。ステップ２６３０から、プロセスはステップ２６３５に進む。
ステップ２６３５において、プロセスは、現在のツリーに対する１つまたは複数のビット・ストリングを、選択したツリー縁部に対する（ステップ２６２５において検索した）１つまたは複数のストリングで修正する。次に、プロセスは、（ステップ２６４０において）現在のツリーの最後の縁部をチェックしたかどうか（すなわち、現在のツリーの最後のリンクしたノード・ペアをチェックしたかどうか）を判断する。チェックしなかった場合には、プロセスは、ステップ２６２０に戻り、次のツリー縁部（すなわち、次のリンクしているノード・ペア）を選択する。
【００４２】
プロセスが、（ステップ２６４０において）最後のツリー縁部をチェックしたと判断した場合には、（ステップ２６４５において）プロセス２２００により供給された最後のツリーをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ２６１５に戻り、もう１つのツリーを選択し、このツリーに対するパス使用を判断する。そうでない場合には、プロセスは、ステップ２６５０に進む。
プロセス２６００がステップ２６５０に到着するまで、プロセスは、１つまたはそれ以上のツリーのビット・ストリング表現を生成する。各ツリーのビット・ストリング表現は、４２ビットのストリングである。すでに説明したように、ツリーのノード・セットが、隣接していないリンクしたノードの１つまたはそれ以上のペア、および隣接していないリンクしたペア間に１つまたはそれ以上のパスが存在する場合には、ツリーの１つのノード表現は複数のビット・ストリング表現にある。
さらに、ステップ２２１５において選択したノード構成は、同じＭＳＴビット表現を形成する（すなわち、同じビット表現ＭＳＴを形成する）異なるＭＳＴノード表現（すなわち、異なるノード表現ＭＳＴ）になる。従って、ステップ２６５０において、プロセスは、すべてのビット・ストリング表現ツリーをチェックし、すべての同じビット・ストリング表現ツリーの複写コピーを除去する。
ステップ２２１５において選択したノード構成が、多数のビット・ストリング表現ツリーになる場合には、プロセス２６００は、ツリーを迅速にソートし、探索するし、それにより同じツリーの複写コピーを迅速に識別し、除去するために、２進探索ツリー（「ＢＳＴ」）を使用することができる。図３２および図３３を参照しながら、このようなＢＳＴの１つについて以下に説明する。
【００４３】
ステップ２６５０の後で残るすべてのビット表現ツリーは一意のものである。それ故、同じツリーの複写コピーを除去した後で、プロセス２６００は、（ステップ２６５５において）（ＬＵＴのような）記憶構造体内に残っているすべてのビット・ストリング表現ツリーを記憶する。以下の例のところで説明するように、各ビット・ストリングは、現在のノード構成に対するルーティング・ツリーが通る経路を指定する。より詳細に説明すると、以下の例のところで説明するように、記憶された各ビット・ストリングが、現在のノード構成に対するルーティング・ツリーが通るルーティング経路を指定する。ステップ２６５５において、プロセスは、グローバル・カウント変数の各パス値を、各パスに対する全カウント値を生成するために、各ビット・ストリング表現ツリーの対応するパス値だけ増大する。次に、プロセスは、各パスに対するこの使用カウントを記録する。また、特定の各パスに対して、プロセスは、（ステップ２６５０において）（１）特定のパスの使用確率値を入手するために、ステップ２６５０の後で残るツリーの数により使用カウントを割り、次に（２）この結果として得られる確率値を記憶する。
図６〜図８に示すシュタイナー・ツリーの場合には、プロセス２６００は、３つのツリー６０５、７０５、８０５に対するルーティング・パス情報を指定する４２ビットの３つのストリングを識別する。ツリー６０５、７０５および８０５に対するこれら３つのビット・ストリングは、それぞれ下記のようなものである。
000000000010000000000000000010000000110001；
000000000000000100000000010001000000100001；
000000000000010000000000010001000000000011
（本明細書においては、ビット・ストリングの最下位ビット（「ＬＳＢ」）は、一番右のビットであり、ビット・ストリングの最上位ビット（「ＭＳＢ」）は、一番左のビットである。）図２７および図２８は、それぞれ、図６〜図８のシュタイナー・ツリー６０５、７０５および８０５に対するパス使用カウントおよびパス使用確率を示す。以下の説明においては、パス使用確率値は、「確率的シュタイナー・ツリー値と呼ぶ。
【００４４】
３．シュタイナー・ツリーの検索
シュタイナー・ツリー経路が、プロセス２２００により予め表の形に表示される場合には、ルータは、実行時に、下記の方法によりあるネットに対する１つまたはそれ以上のシュタイナー・ツリーの属性（例えば、経路）を識別する。ルータは、最初に、分割グリッドに関するネット構成を識別する。次に、ルータは、記憶構造体内に、識別した構成に対する記憶している１つまたはそれ以上の属性（例えば、経路）を検索するために、識別した構成を使用する。
いくつかの実施形態の場合には、記憶構造体は、浮動小数点数の参照テーブル（「ＬＵＴ」）である。これらのいくつかの実施形態の場合には、ＬＵＴは、構成コードにより索引を付けられる。すなわち、特定のネット構成に対する特定の属性を検索するために、ネット構成に対する構成コードが識別され、この構成コードが、必要な属性を記憶しているＬＵＴ内のエントリを識別するために使用される。
いくつかの実施形態は、図３の八角配線モデルを使用し、図１２の４２の対角線ルーティング・パスおよびマンハッタン・ルーティング・パスにより、各ネットのルーティング・パスを指定する。いくつかの実施形態の場合には、ＬＵＴは、各経路に対して４２ビットを記憶する。この場合、各ビットは、４２のパスの中の１つを表す。また、ネットの各構成コードは、１６ビット数である。この場合、各ビットは、４×４分割グリッドにより形成されているサブ領域を表す。関連ネットが、構成コード・ビットが表すサブ領域内にピンを持っている場合には、各構成コード・ビットは設定され（例えば、１）、関連ネットが、このサブ領域内にピンを持っていない場合には設定されない（例えば、０）。また、これらの実施形態の場合には、２１６の可能なネット構成を表す２１６の構成コードが存在する。
【００４５】
例えば、ネットが、スロット０および９内にピンを持っている場合には、ネット構成コードは、０００００１００００００００１である。このような構成の場合には、いくつかの実施形態は、２つのツリー、すなわち、パスＰ１７およびパスＰ２４を使用するツリー、およびパスＰ１２およびＰ３０を使用するツリーを予め表の形にする。これら各ツリーは、４２ビットのストリングにより指定することができる。第１のツリーに対するビット・ストリングは、下記のようなものである。
000000000000000001000000100000000000000000
一方、第２のツリーに対するビット・ストリングは、下記のようなものである。
000000000001000000000000000001000000000000
いくつかの実施形態は、ＬＵＴ内にこれら２つのビット・ストリングを記憶し、ネット構成００００００１００００００００１の１６ビットの構成コードにより、これら２つのビット・ストリングを検索する。
【００４６】
４．圧縮した形でのシュタイナー・ツリーの記憶
複数の組のネット構成に対するシュタイナー・ツリー経路を記憶し、使用するために、種々の圧縮技術を使用することができる。図２９は、そのような方法の１つを示す。この図のプロセス２９００は、プロセス２９００が、２つの追加の動作２９０５および２９１０を持ち、若干異なる動作２２１５および２２５０を持っていることを除けば、上記プロセス２２００に類似している。プロセス２９００の動作２２０５、２２１０および、２２２０〜２２４５は、プロセス２２００の類似の番号がついている動作２２０５、２２１０および、２２２０〜２２４５と同じものである。それ故、不必要な詳細な説明により本発明がわかりにくくなるのを避けるために、これらの動作２２０５、２２１０および２２２０〜２２４５についてはこれ以上説明しない。
プロセス２９００は、予め表の形になっている情報の量を少なくするために、追加の動作２９０５および２９１０を実行する。第１の動作２９０５は、プロセス２９００が経路を予め表の形にする潜在的ネット構成の数を減らし、一方、第２の動作２９１０は、プロセス２９００が各シュタイナー・ツリー経路が１回だけ記憶されるのを確実にする。
両方の動作については、以下にさらに詳細に説明する。しかし、通常の当業者であれば、いくつかの実施形態は、これら両方の動作を使用しないことを理解することができるだろう。例えば、いくつかの実施形態は、各シュタイナー・ツリー経路が、確実に１回だけ記憶されるように、動作２９１０を実行する。
【００４７】
ａ．対称ネット構成
動作２９０５は、ステップ２２１０において識別した潜在的ネット構成を、複数の組の対称ネット構成にグループ分けする。ステップ２２１５〜２２５０から、プロセス２９００は、対称構成の各グループの１つの指定されたネット構成に対して、一組のシュタイナー・ツリーを生成し、記憶する。この流れは、ステップ２２１５および２２５０により導かれる。ステップ２２１５、プロセス２９００は、前にチェックしなかった指定のノード構成を選択する。ステップ２２５０において、プロセスは、対称ノード構成の各グループに対する指定のノード構成をチェックしたかどうかを判断する。動作時、各グループの指定の構成は、直接そのグループに対して予め表の形になっている経路を使用し、一方、各グループの指定されていない構成は、このグループに対して予め表の形になっている経路からその経路を生成する。
図３０および図３１は、このグループ分けを行うための１つの技術である。この技術は、図５の４×４分割グリッドに対して実行される。このグリッド内においては、各ネット構成は、他の７のネット構成に対して対称である。これら７の対称構成は、（１）９０度だけネット構成を回転し、（２）１８０度だけネット構成を回転し、（３）２７０度だけネット構成を回転し、（４）Ｘ軸を中心にしてネット構成をフリップし、（５）９０度だけネット構成を回転し、Ｘ軸を中心にして結果をフリップし、（６）１８０度だけネット構成を回転し、Ｘ軸を中心にして結果をフリップし、（７）２７０度だけネット構成を回転し、Ｘ軸を中心にして結果をフリップすることにより識別することができる。
【００４８】
以下に説明するいくつかの実施形態の場合には、回転動作およびフリップ動作は、（１）４×４分割グリッドの幅（すなわち、レイアウトの幅）に平行なＸ軸、（２）上記グリッドの高さに平行なＹ軸、（３）図５に示すグリッドのスロット５、６、９および１０の交点に位置する原点を持つデカルト座標システムに対して定義される。より詳細に説明すると、回転は、原点を中心とする時計方向の回転により定義される。構成のフリップは、各構成スロットのｙ座標の符号の変更を含む。下記の表１は、上記対称関係に基づいて関連している８のネット構成の一例である。
【００４９】
【表１】
2005506588.tif 000001
【００５０】
図３１は、上記対称によりネット構成をグループ分けするためのプロセス３１００である。図３０は、プロセス３１００が、各構成に対して記憶する４のデータ・フィールドを示す。第１のフィールド３０００は、構成の１６ビットのピン配列（すなわち、そのネット／ノード構成）を記憶する。第２のフィールド３００５は、プロセス３１００が、他の構成によりこの構成をすでにグループ分け済みであるかどうかを指定する。
第３のフィールド３０１０は、構成グループに対する１つまたはそれ以上のシュタイナー・ツリー経路３０２５への１つまたはそれ以上の参照を含むツリー・リスト３０２０への参照（例えば、ポインタ）である。グループ内の各構成は、同じツリー・リスト３０２０を参照する。例えば、図３０は、同じツリー・リストを参照する３つのグループ分けした構成３０３０、３０３５および３０４０を示す。第４のフィールド３０１５は、対称関係識別子を記憶する。この識別子は、グループに対して記憶したツリーからどのようにネット構成に対するツリーを入手するかを指定する。すなわち、各構成の識別子は、構成グループに対して予め表の形になっている１つまたはそれ以上のツリーの構成に対する１つまたはそれ以上のツリーへの変換方法を指定する。
プロセス２９００は、プロセス２９００が、（ステップ２２１０において）潜在的ノード構成のすべての組を定義した後で、ステップ２９０５においてプロセス３１００を実行する。図３１に示すように、プロセス３１００は、最初に、（ステップ３１０５において）ステップ２２１０において定義したノード構成の中の１つを選択する。次に、プロセス３１００は、（ステップ３１１０において）この構成に、その構成フィールド３００５にグループ分けしたものというマークを付ける。
【００５１】
次に、プロセスは、（ステップ３１１５において）この構成関連識別子フィールド３０１５内に「なし」を記録する。このマークは、この構成に対して指定された予め表の形になっているツリー（すなわち、この構成のツリー・リスト３０２０により参照されるツリー）は、いかなる方法によっても、選択したノード構成に変換する必要がないことを示す。構成の各グループにおいて、その関連識別子フィールド内に「なし」と記録されている構成が、そのグループに対する指定された構成である（すなわち、上記構成が、そのグループに対して生成されるシュタイナー・ツリーを直接使用することができる構成である）。
次に、ステップ３１２０において、プロセスは、この構成グループに対してツリー・リスト３０２０を生成し、この構成参照フィールド３０１０をこのツリー・リストにリンクする。このツリー・リストに対して、プロセス２９００は、（ステップ２９１０において）この構成グループに対するツリーを参照する参照を追加する。
次に、プロセス３１００は、（ステップ３１２５において）上記の７の対称関係の中の１つを選択する。次に、プロセス３１００は、（ステップ３１３０において）ステップ３１０５において選択した構成に対称の形で関連する７の構成の中の１つを識別するために、選択した対称関係を使用する。いくつかの実施形態は、それぞれが対称変換関係に対するものである７のＬＵＴを持つ。各ＬＵＴは、指定のノード構成の各潜在的ノードに対して対称ノードを指定する、１：１マッピングを供給する。例えば、下記の表２は、指定のノード構成を９０度回転することにより入手することができる対称構成に対する対応するノードを識別する。
【００５２】
【表２】
2005506588.tif 000002
2005506588.tif 000003
【００５３】
次に、ステップ３１３５において、プロセスは、ステップ３１３０において識別した構成に、構成フィールド３００５内にグループ分けしたものであるというマークを付ける。次に、プロセスは、（ステップ３１４０において）構成関連識別子フィールド３０１５内で、ステップ３１２５（例えば、９０度回転）において選択した関係の識別を記録する。この動作は、実行時に、構成グループに対して予め表の形になっている１つまたはそれ以上のツリーを、ステップ３１３０において識別した構成に対する１つまたはそれ以上のツリーに変換するために使用される。
次に、プロセスは、（ステップ３１４５において）識別した構成の参照フィールド３０１０をこの構成グループに対するツリー・リスト３０２０にリンクする。次に、ステップ３１５０において、プロセスは、ステップ３１０５において選択したものに対称的に関連している７つのすべての構成を生成したかどうかを判断する。生成していなかった場合には、プロセスは、（ステップ３１２５において）もう１つの対称関係を選択し、次に、関連構成を識別し、そのグループ・フィールドをポピュレートするために、ステップ３１３０〜３１４５を実行する。
プロセスが、（ステップ３１５０において）ステップ３１０５において選択した構成に関連する７つすべての構成を生成したと判断した場合には、このプロセスは、（ステップ３１５５において）ステップ２２１０においてプロセス２９００が生成したすべてのノード構成をチェックしたかどうか、（すなわち、すべての生成したノード構成に「グループ分けした」とマークしたかどうか）を判断する。チェックしていなかった場合には、プロセスはステップ３１０５に進み、「グループ分けされた」というマークがまだ付いていないノード構成を選択し、新しく選択した構成およびその対称関係にある構成に対して上記動作を反復して実行する。プロセスが、（ステップ３１５５において）すべてのノード構成をチェックしたと判断した場合には、プロセスは終了する。
【００５４】
ｂ．各ツリーの１回だけの記憶
ステップ２９１０において、プロセスは、プロセス２９００が、そのような経路を使用するかも知れない任意のノードに対して、各シュタイナー・ツリー経路を１回だけ記憶するのを確認する。図２２のプロセス２２００のように、プロセス２９００は、（ステップ２２４５において）このプロセスが、ノード構成に対して識別した１つまたは複数のシュタイナー・ツリーに対するルーティング・パス情報を計算するために、プロセス２６００を呼び出す。プロセス２６００は、プロセス２９００が識別した各シュタイナー・ツリーを表示するために、１つまたはそれ以上のビット・ストリングを識別する。プロセス２６００は、また、（１）（ステップ２６５０において）同じノード構成に対して生成する各ビット表現ツリーのすべての複写コピーを除去し、（２）（ステップ２６５５５において）残りの各ビット表現ツリーを記憶する。
しかし、プロセス２６００が、プロセス２９００と一緒に動作する場合には、このプロセスは、（ステップ２６５５において）生成した各ビット・ストリングを永久に記憶しない。代わりに、プロセス２６００は、生成したビット・ストリングをプロセス２９００に返送する。次に、プロセス２９００は、（ステップ２９１０において）前のノード構成に対して（すなわち、ステップ２２１５において前に選択したノード構成に対して）、記憶構造体内に返送した各ビット・ストリング（すなわち、返送した各シュタイナー・ツリー）を前に記憶したかどうかをチェックする。前に記憶した場合には、プロセスは、このビット・ストリングを再度記憶しないで、ノード構成のツリー・リスト３０２０内の参照の中の１つを前に記憶したビット・ストリングにリンクする。前に記憶しなかった場合には、プロセスは、図３０の記憶構造体３０５０内にこのビット・ストリングを記憶し、ノード構成ツリー・リスト３０２０内の参照の中の１つを新しく記憶したビット・ストリングにリンクする。
プロセス２９００が、記憶構造体３０５０内にビット・ストリングを記憶したかどうかを（ステップ２９１０において）チェックするために、種々の異なる技術を使用することができる。以下の実施形態は、このチェック動作を実行するために２進探索ツリーを使用する。
【００５５】
図３２は、そのような２進探索ツリー（「ＢＳＴ」）の１つを示す。このツリー３２００は、それぞれがゼロまたは２つの子ノードを持つ多数のノード３２２０を持つ。ツリー内の各ノードは、ノードの左右の子ノードを参照するための２つの参照３２０５および３２１０を含む。各ノードは、また、そのノードに対応する４２ビットのシュタイナー・ツリーを参照するための１つの参照３２１５を持つ。
ＢＳＴは、４２のレベルを持ち、各レベルは、シュタイナー・ツリーを表す４２ビットのストリング内のビットの中の１つに対応する。ＢＳＴレベルは、ビット・ストリング内のビットと同じオーダである。それ故、ＢＳＴのゼロ番目のレベルは、ストリングのゼロ番目のビット（すなわち、パス０に対応するビット）に対応し、ＢＳＴの１番目のレベルは、ストリングの１番目のビット（すなわち、パス１に対応するビット）に対応し、ＢＳＴの２番目のレベルは、ストリングの２番目のビット（すなわち、パス２に対応するビット）に対応する。以下同じ。各レベルにおいて、そのレベルに対応するストリング・ビットの値が分岐を決定する。
図３３は、プロセス２９００が、（ステップ２９１０において）シュタイナー・ツリーが、記憶構造体内に前に記憶されたかどうかを判断するために、ＢＳＴ３２００を通るために使用するプロセス３３００を示す。図３３に示すように、プロセス３３００は、最初に、（ステップ３３０５において）変数Ｌを０に設定する。この変数は、プロセス３３００が現在チェックしているＢＳＴのレベルを指定する。ステップ３３１０において、プロセスは、ビット・ストリング内のＬ番目のビットが０であるかどうかを判断する。０でない場合には、プロセスは、（ステップ３３１５において）変数Ｌを１だけ増大し、現在のノードの左の子ノードを現在のノードとして定義する。０である場合には、プロセスは、（ステップ３３２０において）変数Ｌを１だけ増大し、現在のノードの右の子ノードを現在のノードとして定義する。
【００５６】
ステップ３３１５または３３２０から、プロセスはステップ３３２５に進む。ここで、プロセスは、ビット・ストリング内のすべてのビットをチェックしたかどうかを判断し、チェックしなかった場合には、残りのチェックしなかったすべてのビット（すなわち、ビット・ストリングのＬ番目のビットから４１番目のビット）がゼロであるかどうかをチェックする。すべてのビットをチェックしなかった場合で、チェックしなかったビットの中の１つまたはそれ以上のビットが１の値を持っている場合には、プロセスは、ステップ３３１０に戻り、現在のノードをチェックする。
一方、すべてのビットをチェックした場合、またはチェックしなかったすべてのビットが０である場合には、プロセスは、ビット・ストリングを記憶しなければならないノードを発見する。それ故、プロセスは、（ステップ３３３０において）現在のノードのノードツリー参照３２１５が、記憶しているツリー（すなわち、記憶しているビット・ストリング）を参照するかどうかを判断する。参照しない場合には、プロセスは、（ステップ３３３５において）記憶構造体３０５０内にビット・ストリングを記憶し、現在のノードのツリー参照３２１５をこの記憶構造体にリンクする。プロセスは、また、ノード構成のツリー・リスト３０２０内の参照の中の１つを新しく記憶したビット・ストリングにリンクする。プロセスが、（ステップ３３３０において）現在のノードのツリー参照３２１５が、前に記憶したビット・ストリングを参照すると判断した場合には、プロセスは、（ステップ３３４０において）単に、ノード構成のツリー・リスト３０２０内の参照の中の１つを前に記憶したビット・ストリングにリンクする。ステップ３３３５または３３４０の後で、プロセスは終了する。
【００５７】
ｃ．圧縮した予め表の形にされた表からの経路の識別
シュタイナー・ツリー経路が、プロセス２９００により予め表の形になっている場合には、ルータは、実行時に、下記の方法でネットに対する１つまたはそれ以上のシュタイナー・ツリー経路を識別する。ルータは、最初に、分割グリッドに関するネットの構成を識別する。記憶構造体３０５０から、ルータは、識別した構成のツリー・リスト３０２０により指定された１つまたはそれ以上の経路３０２５を検索する。
次に、プロセスは、識別したネット構成とそのグループに対して指定された構成の間の対称的な関係を識別する。次に、プロセスは、検索した経路から、識別したネット構成に対する１つまたはそれ以上の経路を識別するためにこの関係を使用する。そうするために、いくつかの実施形態は、それぞれが、各対称的な変換関係に対するものである７つのＬＵＴを使用する。各ＬＵＴは、指定されたノード構成の経路が使用することができる潜在的な各パスに対して対称的なパスを指定する。
【００５８】
例えば、ネット構成は、スロット１０および１２内にピンを持つネットを示す０００１０１００００００００００であるかもしれない。この構成は、スロット０および９内にピンを持つネットを示すネット構成００００００１００００００００１に対称的に関連する。より詳細に説明すると、構成０００１０１００００００００００が９０度回転した場合に、構成００００００１００００００００１が得られる。
ネット構成００００００１００００００００１が、指定された構成である場合は、いくつかの実施形態は、一方がパスＰ１７およびＰ２４を使用し、他方がパスＰ１２およびＰ３０を使用する２つのツリーを予め表の形にする。これらのツリーを９０度回転することにより、ルータは、構成０００１０１００００００００００に対する２つの経路を識別することができる。各ツリーを９０度回転するには、ルータは、（１）ツリーが使用する各パスを識別し（すなわち、そのツリーを指定している４２ビット・ストリング内の各セット・ビットを識別し）、（２）９０度回転したＬＵＴから、分割グリッドの９０度の回転に対して識別したパスに対称的に関連するパスを識別する。
それ故、９０度回転したＬＵＴから、ルータは、パス３７を、９０度の回転によりパス２４に関連したパスとして識別し、パス７を、９０度の回転によりパス１７に関連したパスであると識別する。９０度回転したＬＵＴから、ルータは、パス９を、９０度の回転によりパス１２に関連したパスであると識別し、パス３９を、９０度の回転によりパス３０に関連したパスであると識別する。この方法により、ルータは、構成０００１０１００００００００００に対する２つのツリーを識別する。一方のツリーはパス７および３７を使用し、他方のツリーはパス９および３９を使用する。
通常の当業者であれば、他のいくつかの実施形態は、ＬＵＴを使用することにより、対称的なノード構成に対するツリーを識別しないことを理解することができるだろう。例えば、いくつかの実施形態は、対称的なノード構成に対するツリーを数学的に識別することができる。対称的な各関係の場合、これらの実施形態は、対称的な関係のツリーのパスに対して、予め表の形にしたツリーのパスをマッピングするために、他の数式を使用することができる。
【００５９】
５．異なる配線モデルに対するシュタイナー・ツリーの予め表の形での表示
本発明のいくつかの実施形態は、いくつかの異なる配線モデルに対する数組のシュタイナー・ツリーを予め表の形にする。例えば、図３４は、（１）（ステップ３４０５において）水平ライン、垂直ラインおよび、±４５度のラインを持つ配線モデルに対して１回、（２）（ステップ３４１０において）水平ライン、垂直ラインおよび、±１２０度のラインを持つ配線モデルに対して１回、（３）（ステップ３４１５において）水平ラインおよび垂直ラインを持つ配線モデルに対して１回、プロセス２２００またはプロセス２９００を実行するプロセス３４００を示す。
水平ライン、垂直ラインおよび、±４５度のラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、（ステップ３４０５において）潜在的な４５度の対角線縁部を持つシュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ３４０５において、プロセス３４００は、４５度を、プロセス２２００または２９００のプロセス２４００および２５００が使用する式（Ａ）の角度Ａとして使用する。
水平ライン、垂直ラインおよび、±１２０度のラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、（ステップ３４１０において）潜在的な１２０度の対角線縁部を持つシュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ３４１０において、プロセス３４００は、１２０度を、プロセス２２００または２９００のプロセス２４００および２５００が使用する式（Ａ）の角度Ａとして使用する。
水平ラインおよび垂直ラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、（ステップ３４１５において）マンハッタン・シュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ３４１５において、プロセス３４００は、９０度を、プロセス２２００または２９００のプロセス２４００および２５００が使用する式（Ａ）の角度Ａとして使用する。
【００６０】
Ｂ．ツリーを予め表の形にする方法および生成
いくつかの実施形態は、経路を検索し、生成するためにネット構成を使用する。例えば、いくつかの実施形態は、あるネットに対して予め表の形にした経路を検索するためにネット構成を使用し、一方で、他のネットに対する経路を生成する。図３５〜図３８を参照しながら、このようないくつかの実施形態について説明する。
これらの実施形態は、閉ノード構成に対して、以下の説明において、「最小閉ツリー」またはＭＣＴと呼ぶ経路を予め表の形にする。１つのＭＣＴは、１つの閉ノード構成に対するものである。すなわち、ＭＣＴは、いくつかのノードのところだけで分岐する（すなわち、スタートまたは終了する）最短経路を通って構成のＮ個のノードを接続しているＮ−１の縁部を持つ最小のツリーである。開ノード構成の場合には、これらの実施形態は、いくつかの関連する閉ノード構成を予め表の形にする。閉ノード構成および開ノード構成という用語については、図３５Ａおよび図３５Ｂのところで後で説明する。
図３５Ａは、（ノード３５１５、３５２０、３５３０、３５３５および３５４０を含む）閉ノード構成３５０５の一例であり、一方、図３５Ｂは、（ノード３５１５、３５３０、３５３５および３５４０を含む）開ノード構成３５１０の一例である。ノード構成３５０５は、閉ノード構成である。何故なら、この構成のすべてのノードは、この構成の少なくとも１つの他のノードに隣接しているからである。ノード構成３５１０は、開ノード構成である。何故なら、ノード３５１５は、この構成の他のノードに隣接していないからである。この構成の場合、ノード３５１５は、自分自身と最も近い隣のノード３５３０の間にノード３５４５を持っているからである。
【００６１】
ノード構成３５１０は、いくつかの関連する閉ノード構成を含む。「アンテナ」ノードを含むＭＣＴにならないこのような２つの構成は、（１）３５１５、３５４５、３５３０、３５３５および３５４０を含む第１の構成であり、（２）３５１５、３５５０、３５３０、３５３５および３５４０を含む第２の構成である。第１の構成は、構成は、構成３５１０にノード３５４５を追加することにより形成することができ、一方、第２の構成は、構成３５１０にノード３５５０を追加することにより形成することができる。
構成３５１０に、ノード３５５５およびノード３５４５またはノード３５５０を追加することにより形成する構成は、何時でも、アンテナ・ノードとしてのノード３５５５を含むＭＣＴになる関連閉構成である。開ノード構成に一組のノードを追加することにより形成される閉ノード構成のＭＣＴ内のアンテナ・ノードは、追加した組の一部であり、それに入るＭＣＴ縁部を１つだけ持つノードである。以下にさらに詳細に説明するように、第１の２つのノード構成（構成３５１５、３５４５、３５３０、３５３５および３５４０、および構成３５１５、３５５０、３５３０、３５３５および３５４０）は、開ノード構成３５１５、３５３０、３５３５および３５４０に対して、予め表の形にすることができる閉ノード構成に関連する。一方、第３の構成（３５１５、３５３０、３５３５、３５４０および３５５５）は、この開ノード構成に対して予め表の形にすべきではない。何故なら、この第３の構成は、アンテナ・ノードになるからである。
【００６２】
１．ＭＣＴの予め表の形での表示
図３６は、図５の４×４分割グリッドのような特定の分割グリッド内で、すべてのノード構成に対してＭＣＴを予め表の形にするプロセス３６００である。図３６に示すように、プロセス３６００は、最初に、すべての潜在的なノード構成を（３６０５）と識別する。
次に、プロセス３６００は、（ステップ３６１０において）１つの構成を選択する。選択した構成が、閉ノード構成である場合には、次に、プロセスは、（ステップ３６１５において）選択した構成に対するすべてのＭＣＴを識別する。すでに説明したように、その構成の各ノードが、その構成の少なくとも１つの他のノードに隣接している場合には、あるノード構成は、閉ノード構成である。通常の当業者であれば、プロセス３６００は、選択した閉ノード構成のノード間に存在する、複数の組のパス（例えば、図１２に示す４２のパス）に基づいて直接選択した構成に対する各ＭＣＴを識別することができることを理解することができるだろう。各ＭＣＴは、最短経路により、閉ノード構成のＮ個すべてのノードを接続するパスのＮ−１の一意の組合わせである。このようなＭＣＴは、閉ノード構成のノード間のすべての最短パスを探索する再帰的動作により識別することができる。いくつかの実施形態の場合には、このような再帰的動作は、相互接続パスに基づいて直接各ＭＣＴを指定するという点を除けば、図２５Ａおよび図２５Ｂを参照しながらすでに説明した再帰的動作に類似している。
ステップ３６１５において、プロセスは、また、ステップ３６１５において識別した各ＭＣＴのコストを計算する。いくつかの実施形態の場合には、プロセスは、（１）分割グリッドの隣接スロットを接続しているマンハッタン・パスおよび対角線パスにコストを割り当てることにより、（２）ＭＣＴが使用するパスを識別することにより、（３）パス・コストを合計することにより各ＭＣＴのコストを計算する。１つ以下のノードを含むノード構成は、ＭＣＴを含んでいないので、そのＭＣＴコストはゼロである。
ステップ３６１５の後で、プロセスは、（ステップ３６２０において）すべての構成をチェックしたかどうかを判断する。チェックしなかった場合には、プロセスはステップ３６１０に戻り、他の構成を選択する。チェックした場合には、プロセスは終了する。
【００６３】
２．関連閉ノード構成の予め表の形での表示
図３７は、開ノード構成に対して、いくつかの関連閉ノード構成を予め表の形にするプロセス３７００を示す。このプロセスは、最初に、（ステップ３７０５において）接続ノードの候補の組を識別する。候補の各組は、開ノード構成のノードは全然含んでいない。また、候補の組は、開ノード構成のノードを含んでいない入手することができるすべての可能なノード構成を含む。
次に、プロセスは、（ステップ３７１０において）接続ノードの候補の組を選択する。次に、プロセスは、（ステップ３７１５において）選択した候補の組および開ノード構成を追加することによりできた組合わせ構成が、１つまたはそれ以上の予め表の形にしたＭＣＴを含んでいるかどうかを判断する。含んでいない場合には、プロセスはステップ３７４５に進むが、このステップについては、以下に説明する。
組合わせ構成が、１つまたはそれ以上の予め表の形にしたＭＣＴを持っている場合には、プロセスは、ステップ３７２０〜３７４０において、組合わせノード構成が、アンテナ・ノードを含んでいない少なくとも１つのＭＣＴになるかどうかを判断する。すべてのＭＣＴが、アンテナ・ノードを含んでいる場合には、ステップ３７１０において選択した候補の接続ノードに対して入手した組合わせ構成は、開ノード構成に対する関連閉構成として記憶されない。
【００６４】
より詳細に説明すると、ステップ３７２０において、プロセスは、組合わせ構成のＭＣＴの中の１つを選択する。次に、プロセスは、（ステップ３７２５において）度合い１を持つこのＭＣＴのすべてのノード（すなわち、それに入るＭＣＴ経路を１本だけ含むすべてのノード）を識別する。次に、プロセスは、（ステップ３７３０において）識別したすべてのノードが、開ノード構成の一部であるかどうかを判断する。一部である場合には、プロセスは、（ステップ３７４０において）ステップ３７１０において選択した候補の組を含む入手した組合わせ構成を受け入れて、（ステップ３７１０において選択した候補の組を開ノード構成と結合することにより入手した）組合わせ構成を、開ノード構成に対する関連閉ノード構成として記憶する。ステップ３７４０から、プロセスはステップ３７４５に進むが、このステップについては、以下に説明する。
一方、プロセスが、（ステップ３７３０において）ステップ３７２５において識別したノードの中の少なくとも１つが、開ノード構成の一部ではないと判断した場合には、プロセスは、組合わせノード構成に対するすべてのＭＣＴをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ３７２０に戻り、他のＭＣＴを選択する。チェックしていた場合には、プロセスは、ステップ３７４５に進む。ステップ３７４５において、プロセスは、接続ノードのすべての候補の組をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ３７１０に戻り、他の候補の組を選択し、チェックする。チェックしていた場合には、プロセスは終了する。
【００６５】
３．実行時間中のＭＣＴの生成
経路および閉ノード構成が、プロセス３６００および３７００により予め表の形になっている場合には、ルータは、実行時間に、図３８のプロセス３８００により、あるネットに対する１つまたはそれ以上の経路を識別する。この図に示すように、プロセスは、最初に、（ステップ３８０５において）分割グリッドに対するネットの構成を識別する。
次に、ルータは、（ステップ３８１０において）記憶構造体が、識別した構成に対して１つまたはそれ以上のＭＣＴを記憶しているかどうかを判断する。記憶している場合には、プロセスは、（ステップ３８１５において）その構成に対して記憶しているＭＣＴを検索し、それらをそのネットに対する経路のリスト内に記憶する。ステップ３８１５の後で、プロセスは終了する。
一方、プロセスが、（ステップ３８１０において）記憶構造体が、識別した構成に対するＭＣＴを全然含んでいないと判断した場合には、プロセスは、（ステップ３８２０において）識別した構成に対する関連閉ノード構成を検索する。次に、プロセスは、（ステップ３８２５において）検索した閉構成の中の１つを選択する。
【００６６】
次に、プロセスは、（ステップ３８３０において）選択した閉構成に対するＭＣＴを検索する。次に、プロセスは、（ステップ３８３５において）識別したノード構成に対して検索したＭＣＴを記憶しているかどうかを判断する。いくつかの実施形態の場合には、プロセスは、ＭＣＴのワイヤ長さコストだけに基づいてこの判断を行う。すなわち、これらの実施形態の場合には、プロセスは、ＭＣＴが、プロセスが今迄識別したノード構成に対して、チェックしてきた最短ＭＣＴである場合だけ、ＭＣＴを記憶する。しかし、他の実施形態の場合には、プロセスは、ルーティング・パスの推定集中、バイアの推定数、今迄選択したＭＣＴの数等のような他の要因に基づいて、ＭＣＴを記憶するかどうかを決める。またいくつかの実施形態の場合には、プロセス３７００は、開ノード構成の閉ノード構成を特定の順序でソートする。例えば、プロセス３７００は、もっと短いＭＣＴの最初のものを生成する閉構成をソートすることができる。これらの実施形態の場合には、プロセス３８００は、記憶した順序で閉ノード構成をチェックし、経路のＲ番号を識別した場合、プロセス３８００は終了する。
プロセスが検索したＭＣＴを記憶しないと決定した場合には、プロセスはステップ３８４５に進むが、このステップにつては以下に説明する。しかし、プロセスが、（ステップ３７３０において）検索したＭＣＴを記憶すると決定した場合には、プロセスは、そのネット構成に対する経路のリスト内にこれらのＭＣＴを記憶する。次に、プロセスは、（ステップ３８４０において）識別したネット構成に対するすべての関連閉ノード構成をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ３８２０に戻り、他の閉構成を選択する。いくつかの実施形態の場合には、プロセスがすでにいくつかのＭＣＴを識別していた場合には、プロセスは他の閉構成を選択するためにステップ３８２０に戻ることができない。プロセスが、すべての関連閉ノード構成をチェックしたと判断した場合には、プロセスは終了する。
【００６７】
ＩＶ．再帰的４×４分割ルータ
Ａ．ソフトウェア・アーキテクチャ
図３９は、本発明のいくつかの実施形態のルータ３９００のソフトウェア・アーキテクチャである。このルータは、種々の異なる配線アーキテクチャと一緒に動作することができる。このルータは、また、異なる分割グリッド、集中グリッド、およびパス定義グリッドと一緒に動作することもできる。しかし、以下に説明するいくつかの実施形態の場合には、ルータを、（１）図３の八角配線モデル、（２）図５の分割グリッド、（３）図９〜図１２の集中グリッドおよびその関連する４２本のパスと一緒に動作する場合について主として説明する。
図３９のソフトウェア・アーキテクチャは、いくつかのソフトウェア・モジュール３９０５およびいくつかのデータ構造体３９１０を含む。ソフトウェア・モジュールは、イニシャライザ３９１５、スロット・マネージャ３９２５、ソルバー３９３０、プロパゲータ３９３５、セーバ３９４０、リニア・プログラミング（「ＬＰ」）ソルバー３９４５、整数リニア・プログラミング（「ＩＬＰ」）コンバータ３９５０を含む、一方、データ構造体３９１０は、ＬＵＴ３９６５、回路モジュール３９７０、ネットリスト３９７２、ネット３９７４、スロット３９７６、スロット−ネット３９７８、パス３９８０、およびピン３９８２を含む。
ルータ３９００は、設計領域（すなわち、ＩＣレイアウト・マネージャ、ＩＣレイアウトの１つの領域）をもっと小さなサブ領域に再帰的に分割する分割グリッドを定義する。以下に説明するいくつかの実施形態の場合には、ルータは、設計領域を１６の同じ大きさのサブ領域（すなわち、１６の同じ大きさのスロット）に再帰的に分割するために、３本の等間隔の水平ラインおよび、３本の等間隔の垂直ラインを使用する。図４０は、複数の組の１６のサブ領域に再帰的に分割される設計領域４００５を示す。より詳細に説明すると、設計領域は、最初、１６のもっと小さいサブ領域に分割され、これらの各サブ領域は、さらに、もっと小さい１６のサブ領域に分割され、もっと小さいサブ領域の中の１つ４０１０は、さらに、１６のサブ領域に再分割される。各再帰レベルにおいて、ルータは、その再帰的レベルにおけるＩＣ領域の座標を整合するために、分割グリッドの座標を単に調整するだけである。他のいくつかの実施形態の場合には、ルータは、すべてのまたはいくつかの再帰的レベルにおいて、異なる形の分割グリッドを使用することができる。
【００６８】
ルータ３９００は、階層的トップダウン方法で、設計領域内の各ネットに対する配線パス値を定義する。ルータのイニシャライザ３９１５は、最初に、再帰的レベルの数を決定し、この再帰的レベルの数に由来するスロットの数を決定する。イニシャライザは、また、これらスロットに対するデータ構造体を生成する。さらに、各スロットに対して、イニシャライザは、そのスロット内の各ネットに対するスロット−ネット・データ構造体を生成し、このスロット−ネット・データ構造体は、上記スロット内にネット構成を記憶する。各スロットに対して、イニシャライザは、また、このスロットと交差するすべての回路モジュールを識別する。
いくつかの実施形態の場合には、イニシャライザは、また、各スロット内のルーティング・パスの容量を定義し、これらの容量をスロットのデータ構造体内に記憶する。しかし、以下に説明するいくつかの実施形態の場合には、スロット・マネージャが、各スロットのルーティングを管理するので、これらの容量を定義する。
もっと小さい子スロットに分割される各スロットの場合には、スロット・マネージャが、スロット内の実際のピンまたは仮想のピンを持つ各ネットに対する経路を選択するために、ソルバー３９３０を管理する。ソルバーは、（１）各ネットに対する１つまたはそれ以上の最適な経路を識別するために、また場合によっては、（２）各ネットに対する１つまたはそれ以上の最適より下の経路を識別する目的で偽の構成を生成するために、各ネットの構成を使用する。ソルバーは、第Ｖ節のところで説明したアプローチの中の任意の１つに基づいて、特定の構成に対する１つまたはそれ以上の経路を識別する。
【００６９】
次に、ソルバーは、ＬＰ問題を公式化し、これらの解をＬＰソルバー３９４５に送り、ＬＰソルバーは、多数の実数の解を返送する。次に、これらの実数の解は、ＩＬＰソルバー３９５０により整数の解に変換される。これらの整数の解は、各ネットに対する特定の経路を指定し、ソルバーは、現在のスロットに対するスロット−ネット・データ構造体内に各ネットの経路情報を記憶する。
ソルバーが、現在のスロット内に実際のピンまたは仮想のピンを持つ各ネットに対する経路を指定した後で、現在のスロットがリーフ・スロットではない場合、スロット・マネージャ３９２５はプロパゲータ３９３５を呼び出す。リーフ・スロットが子スロットを有しているスロットであるが、その子スロットは、任意の子スロットを有していない、（すなわち、その子スロットは分割されていない）。リーフ・レベルの子スロットは、Ｇｃｅｌｌと呼ばれる。
スロット・マネージャにより呼び出された場合、プロパゲータは、現在のルーティング・レベルのために、ソルバーにより指定されたルーティング・パスを、現在のスロットの子スロットまで、下方に伝搬する方法を決定する。トップ・レベルのスロットの後ろであって、リーフ・レベルのスロットの前に位置するスロットの場合には、プロパゲータは、また、１レベル下の前のルーティング・レベルのところで、プロパゲータにより指定されたルーティング・パスを伝搬する後続伝搬動作を実行する。
現在のスロット内の各ネットの場合には、プロパゲータは、ネットのルーティング・パスにより影響を受けたすべての子スロット内のネットのピンの配列を決定しなければならない。伝搬プロセスは、多くの場合、現在のスロットの孫スロット（すなわち、現在のスロットの子スロットの子スロット）内に仮想のピンを追加しなければならない。すなわち、プロパゲータは、現在のスロットの子スロット内のネット構成を修正することができる。
【００７０】
本発明の別のいくつかの実施形態は、異なるプロパゲータを使用する。２つの異なるプロパゲータについて以下に説明する。第１のプロパゲータは、各ネット経路に対するいくつかの伝搬解を列挙し、次に、各ネットに対する伝搬解を選択するために、ＬＰソルバー３９４５およびＩＬＰコンバータ３９５０を使用する。一方、第２のプロパゲータは、現在のスロット内の各ネットの経路に対する伝搬を選択し、埋設するための貪欲なアプローチを使用するシーケンシャル・プロパゲータである。以下に説明するいくつかの実施形態の場合には、これら両方のプロパゲータは、使用できる場合には、後続の伝搬を実行するためにシーケンシャル・プロパゲータを使用する。
各ネットの経路に対して識別した伝搬は、影響を受けた各子スロット内のネットに対する特定の構成を指定し、プロパゲータは、影響を受けた子スロットに対するネットのスロット−ネット・データ構造体内にネット構成を記憶する。以下に説明するいくつかの実施形態は、１６ビットのストリングにより各ネット構成を指定する。この場合、各ビットは、１つのスロットの１つの子スロットに対応する。
ソルバーが、リーフ・スロット内で各ネットに対する経路を指定した後で、スロット・マネージャは、各ネット経路のパス構造体を、その各ネットの主なデータ構造体にリンクするために、セーバ３９４０を呼び出す。セーバは、また、主ネット・データ構造体に、リーフ・レベルのスロットの親スロットに対して（すなわち、Ｇｃｅｌｌのグランドペアレント・スロットに対して）プロパゲータが指定する伝搬パスのパス・データ構造体をリンクする。これらの伝搬パスは、プロパゲータが、（１）ソルバーが指定したルーティング・パスに対して、（２）前のルーティング・レベルでプロパゲータが指定したルーティング・パスに対して識別したパスを含む。
このようにして、ネットの主なデータ構造体にリンクしているパス・データ構造体は、ルータが指定するネットに対する最終経路を集合的に表す。いくつかの実施形態の場合には、このような経路は、あるネットに対するグローバル経路である。図４９〜図８３は、さらに、ソフトウェア・モジュール３９０５を示す。しかし、これらのソフトウェア・モジュールを説明する前に、図４１〜図４８を参照しながら、データ構造体３９１０について以下に説明する。
【００７１】
Ｂ．データ構造体
１．ＬＵＴ
ＬＵＴ３９６５は、ネットの回路モジュールを含むサブ領域を接続している経路に関する（ルーティング・パス、長さ、パス使用等のような）情報を記憶する。これらの経路の中のあるものは、全部または一部が対角線である縁部を含む。以下に説明するいくつかの実施形態の場合には、ＬＵＴは、すべての可能なネット構成に対する経路の長さの値、ルーティング・パスの値、およびパス使用確率の値を記憶する。経路を選択し、その長さ、ルーティング・パス、およびパス使用確率を予め表の形にするためのいくつかのプロセスについては、第Ｖ節のところですでに説明した。通常の当業者であれば、他の実施形態もツリーの他の属性を記憶することを理解することができるだろう。図３８の経路生成プロセス３８００を使用する実施形態の場合には、ＬＵＴは、各開ノード構成に対して１つまたはそれ以上の関連閉ノード構成を記憶する。
いくつかの実施形態の場合には、ルータ３９００は、いくつかの配線アーキテクチャと一緒に動作することができる。これらのいくつかの実施形態の場合には、いくつかのＬＵＴを、いくつかの配線モデルに対する経路属性を記憶するために使用することができる。例えば、ＬＵＴは、（１）マンハッタン・ラインおよび±４５度対角線を使用する第１の配線モデル、（２）マンハッタン・ラインおよび±１２０度の対角線を使用する第２の配線モデル、（３）マンハッタン・ラインだけを使用する第３の配線モデル等に関するルーティング情報を記憶することができる。配線モデルを選択すると、各ネット構成に対するルーティング情報を、選択した配線モデルに適しているＬＵＴから検索することができる。
【００７２】
ルータが、いくつかの配線モデルと一緒に動作することができるいくつかの実施形態の場合には、ルータは、通常、設計プロセスの始めに配線モデルを選択する。例えば、いくつかの実施形態の場合には、プロセス４００は、分割グリッドを選択する前に、ステップ４０５において配線モデルを選択する。また、いくつかの実施形態は、設計プロセスのいくつかの部分または設計階層のもっと低いレベルに対して、ある配線モデルから別の配線モデルへと切り替えることができる。
以下に説明するいくつかの実施形態の場合には、ルータは、ルーティング・プロセス全体を通して、図３の八角配線モデルを使用する。ルータは、集中グリッドに対するルーティング情報（例えば、経路、長さ、パス使用の値、スロットの閉鎖した組に対するツリー、ノードの組等）を記憶しているＬＵＴ、および図９〜図１２に示すその関連する４２のパスを使用する。
【００７３】
２．ネットリスト構造体、ｄｂＮｅｔ構造体、スロット−ネット構造体、ピン構造体、およびパス構造体
図４１は、ネットリスト４１００のデータ構造体である。このリストは、それぞれが、ｄｂＮｅｔデータ構造体４１１０を参照する（例えば、ポイントする）１つまたはそれ以上のフィールド４１０５を含む。各ネットは、ネットに対して主データ構造体としての働きをするｄｂＮｅｔデータ構造体を有する。このデータ構造体は、ソフトウェア・モジュール（例えば、プロパゲータ）のあるものが、ネットを識別するために使用する１つの値を含む索引フィールド４２０５を含む。このデータ構造体は、また、ピン・データ構造体を参照する（例えば、ポイントする）多数のフィールド４２１０を含む。
図４３は、ピン位置を指定する位置フィールドを含む簡単なピン・データ構造体４３００である。いくつかの実施形態の場合には、ピン位置は、ｘ位置およびｙ位置ばかりではなく、その層も指定する三次元の位置として供給される。しかし、他の実施形態は、ピンの層の位置をピン・マクロの一部として記憶する。このピン・マクロは、以下に説明するように、スロット−データ構造体により参照される回路マクロの一部として記憶することもできる。
ｄｂＮｅｔデータ構造体も、それぞれが、図４４に示すようなパス・データ構造体４４００を参照する（例えば、ポイントする）１つまたはそれ以上のフィールド４２２０を含む。いくつかの実施形態の場合には、セーバは、各ネットに対する最後の最も低いレベルの経路パスを指定するパス・データ構造体を、参照フィールド４２２０を通してその各ネットのｄｂＮｅｔにリンクする。
【００７４】
パス・データ構造体は、パス・タイプを、水平方向（Ｈ）、垂直方向（Ｖ）、第１の対角線方向（Ｅ）または、第２の対角線方向（Ｗ）として指定するフィールド４４０５を含む。この構造体は、また、データ構造体のパスを、２つのグリッド内に定義された４２のパスの中の１つとして識別する０〜４１の数字であるパスＩＤを記憶するためのフィールド４４１０を含む。さらに、このデータ構造体は、パスに関連するｄｂＮｅｔを参照する（例えば、ポイントする）フィールド４４１５を含む。最後に、このデータ構造体は、パスが入る２つのスロットのデータ構造体を参照する２つのフィールド４４２０を含む。これら２つのフィールドは、確認プロセス中に、ルータ３９００により指定された経路が連続しているのを確認するために使用することができる。
各スロットの場合、ルータ３９００は、そのスロット内に実際のピンまたは仮想のピンを含む各ネットに対してスロット−ネット・データ構造体を定義し、このスロット−ネット・データ構造体は、そのスロット内にネット構成を記憶する。図４５は、このスロット−ネット・データ構造体を示す。この構造体は、そのネットのｄｂＮｅｔを参照する（例えば、ポイントする）フィールド４５０５を含む。この構造体は、また、スロット内のネット・ピンの配列を指定するビット・ストリングを記憶するフィールド４５１０を含む。以下にさらに詳細に説明するように、イニシャライザは、最初に、スロット内のネットのすべての実際のピンに基づいてこのフィールドを設定する。再帰的プロセス中、プロパゲータは、仮想ピンに合わせてこのフィールド４５１０内のビット・ストリングを修正することができる。このスロット−ネット・データ構造体は、また、４２ビットの選択した経路ストリングを記憶するフィールド４５１５を含む。ソルバーは、スロット内のネットに対する経路を選択した後で、このビット・ストリングを設定する。
【００７５】
３．スロット
ルータ３９００は、設計領域を複数の組の１６のサブ領域またはスロットに再帰的に分割する。図４６は、ルータが定義したスロット（すなわち、サブ領域）の階層を概念的に示すグラフである。このグラフ４６００は、再帰的プロセスの２つのレベル４６１０および４６１５を示す。このグラフにおいては、各ノードは、再帰的プロセス中の特定の段階におけるＩＣ領域を示す。また、このグラフ内においては、ルート・ノードは、全設計領域を表し、一方、ルート・ノードでない各ノードは、設計領域の一部を表す。
スロット階層においては、各ノードは、子ノードを持たないか、１６の子ノードを持つ。ルータがそのノード領域を１６のサブ領域に分割する場合には、１つのノードは、１６の子ノードを有する。逆に、その対応する領域が分割されない場合には、１つのノードは、子ノードを持たない。
いくつかの実施形態の場合には、ルータ３９００は、スロット階層内の各ノードを表すために、スロット・データ構造体を定義する。図４７は、あるスロットに対するそのようなデータ構造体４７００を示す。このデータ構造体は、スロットの座標４７１０を指定する。このデータ構造体は、また、スロット内の回路モジュールのリスト４７４０への参照（例えば、ポインタ）４７２０を含む。このリスト４７４０は、スロット内の回路モジュール４８００への１つまたはそれ以上の参照（例えば、１つまたはそれ以上のポインタ）４７４５を含む。
スロット−データ構造体４７００は、また、スロットのスロット−ネットのリスト４７３０を含む。リストは、スロット−ネット・データ構造体４５００への参照４７３５を含む。以下に説明するいくつかの実施形態の場合には、スロット−データ構造体は、その子スロットに対する参照を持たない。これらの実施形態の中のあるものは、リスト上でスロットを予め定めた順序に配列し、この順序に基づいて、これらの実施形態は、対応する子スロットおよび親スロットを識別する。スロット−データ構造体４７００は、また、スロットの一意の識別子を指定するフィールド４７２５を含む。
【００７６】
４．回路モジュール
図４８は、回路モジュールのデータ構造体４８００である。このデータ構造体は、回路モジュールの向き（４８０５）および位置（４８１０）を記憶する。このデータ構造体は、また、回路モジュールの記述を含む回路マクロ４８２０への参照４８１５も含む。例えば、回路マクロは、回路マクロ内の障害物を知るために、データ構造体４８２５を参照する。障害データ構造体は、障害物の層（４８３０）および形（４８３５）のような障害物に関する情報を指定する。
Ｃ．イニシャライザ
図４９は、ルーティング動作のスタート時にイニシャライザが実行するプロセス４９００である。このプロセスをスタートする前に、ルータは、通常、設置されたネットリスト、技術定義（層の数、各層の好適な配線方向、各層に対するルーティング・ピッチを含む）、および最も低いレベルのスロットに対する（すなわち、Ｇｃｅｌｌに対する）トラックの数を受け取っている。
プロセスは、最初に、（ステップ４９０５において）最も低いレベルのスロットからの再帰の回数、トラック当りのピッチ、設計の大きさを計算する。そうするために、プロセスは、最初に、最も低いレベルのスロットの大きさを入手するために、トラック・データにトラック当りのピッチを掛ける。次に、プロセスは、結果として得られる値が計算した大きさよりも大きい間は、設計サイズを反復して４で割る。１回の割り算毎に、レベル・カウントは１だけ増大する。結果として得られる値が計算した大きさより小さくなると、プロセスは、計算およびカウントを終了する。
レベルの数に基づいて、プロセスは、（ステップ４９１０において）スロットの数を計算する。各レベル毎に、１６の子が存在する。それ故、スロットの全数は、１６＊＊ｎの合計である。この場合、ｎは０からレベルに変化する。この段階で、プロセスは、また、すべてのスロットのリストを生成する。
次に、プロセスは、（ステップ４９１５において）すべての再帰レベルにおけるスロットに対するスロット−データ構造体を列挙する。次に、プロセスは、（ステップ４９２０において）（１）各ネットに対して、ネットが通るすべてのスロットを識別し、（２）識別した各スロットに対して、そのスロット内のネット構成を記憶するためのスロット−ネット・データ構造体を列挙する。
図５０は、いくつかの実施形態がステップ４９２０を実行するために使用するプロセス５０００である。より詳細に説明すると、このプロセスは、トップ・レベルのスロットのところでスタートする再帰的プロセスであり、このプロセスは、各ネットに対して実行される。このプロセスが呼び出される度に、このプロセスは、１つのスロットおよび１つのネットを受け取る。図５０に示すように、このプロセス５０００は、最初に、（ステップ５００５において）受信したスロットの囲みボックスを計算する。
【００７７】
次に、このプロセスは、（ステップ５０１０において）受け取った任意のピンが、受け取ったスロットの囲みボックス内に含まれているかどうかを判断する。含まれていない場合には、プロセスは終了する。含まれている場合には、プロセスは、（ステップ５０１５において）現在のスロットに対するネットのピン配列を含むスロット−ネット記録を生成する。さらに、プロセスは、（ステップ５０２０において）受け取ったネットおよび現在のスロットの各子スロットに対して自分自身を呼び出す。その後、プロセス５０００は終了する。
プロセス４９００が、スロット内にネット構成を記憶するためのスロット−ネット・データ構造体を列挙した後で、プロセス４９００は、（ステップ４９２５において）交差するスロットに対するモジュールの表に各回路モジュールを追加し、その後終了する。図５１は、いくつかの実施形態が、ステップ４９２５を実行する際に使用するプロセス５１００である。より詳細に説明すると、このプロセスは、トップ・レベルのスロットからスタートする再帰的プロセスであって、各回路モジュールに対して実行される。このプロセスが呼び出される度に、プロセスは、１つのスロットと１つの回路モジュールを受け取る。図５１に示すように、プロセス５１００は、最初に、（ステップ５１０５において）受け取ったスロットの囲みボックスを計算する。
次に、プロセス５１００は、（ステップ５１１０において）受信した回路モジュールの囲みボックスを計算する。次に、プロセスは、（ステップ５１１５において）２つの囲みボックスが交差するかどうかを判断する。交差しない場合には、プロセスは終了する。交差する場合には、プロセスは、（ステップ５１２０において）現在のスロットに入射する回路モジュールのリストにモジュールを追加する。さらに、プロセスは、（ステップ５１２５において）受信したモジュールおよび、現在のスロットの各子スロットに対して自分自身を呼び出す。その後、プロセス５１００は終了する。
【００７８】
Ｄ．スロット・マネージャ
図５２は、イニシャライザ３９１５がその動作を終了した後で、スロット・マネージャ３９２５が実行するプロセス５２００である。最初に、プロセス５２００は、（ステップ５２０５において）現在のレベルをトップ・レベルのスロットとして設定する。次に、プロセスは、現在のレベルのスロット内のルーティング・パスの容量を定義する。いくつかの実施形態の場合には、プロセスは、記憶構造体から第１のレベルに対するルーティング・パス容量を受け取るか、検索することができ、その後で、子スロットと親スロット間の既知の幾何学的関係に基づいてルーティング・パス容量を数学的に計算する。他のいくつかの実施形態の場合には、プロセスは、リアルタイムで、すべてのレベルに対するルーティング・パスの容量を計算する。しかし、これらの実施形態の中のあるものは、依然として、他のレベルのルーティング・パスの容量からいくつかの再帰レベルのルーティング・パスの容量を計算する。
すでに説明したように、いくつかの実施形態は、パスに直交する縁部のサイズから特定の再帰的レベルの各パスの容量を計算する。例えば、いくつかの実施形態は、特定のパスに対応する金属層のピッチで、対応する直交縁部のサイズ（すなわち、特定のパスに直交する縁部のサイズ）を割ることにより特定の各パスの容量を計算する。いくつかの実施形態は、金属層のピッチをライン−バイア・ピッチとして定義する。いくつかの実施形態は、ライン−バイア・ピッチを、その金属層上の交差ライン間の必要な最短距離にそのラインの幅の１／２を加え、さらに、金属オーバラップを含むバイアの幅の１／２を加えたものとして定義する。
すでに説明したように、いくつかの実施形態の場合には、直交パスの容量は、マンハッタン・パスの容量とは異なる。この違いは、対角線パスおよびマンハッタン・パスに直交する縁部のサイズの違いによりモデル化することができる。この違いは、また、相互接続ライン（例えば、マンハッタン・ラインに対するピッチとは異なる対角線に対するピッチを持つ）のタイプに依存しないピッチを持つことによりモデル化することができる。さらに、この違いは、層に依存するピッチを持つことによりモデル化することができる。例えば、いくつかの実施形態の場合には、−４５度の金属層のピッチは、＋４５度の金属層のピッチとは異なる。
【００７９】
ステップ５２１５において、プロセスは、現在のスロットを、現在のレベルにおける第１のスロットとして設定する。以下にさらに詳細に説明するように、プロセス５２００は、現在のレベルのスロットを順次チェックする。しかし、通常の当業者であれば、他の実施形態も、他の順序でスロットをチェックすることができることを理解することができるだろう。例えば、いくつかの実施形態は、最初に、最も集中しているスロットをチェックすることができる。
次に、プロセスは、（ステップ５２２０において）ソルバーに、現在のレベルにおける現在のスロット内のすべてのネットに対する経路を選択するように命令する。ソルバーがルーティング・パスを選択し、スロット−ネット・データ構造体フィールド４５１５内にこれらのパスを記憶すると、スロット・マネージャは、現在のレベルが最後の再帰レベルであるかどうかを判断する。
そうでない場合には、プロセスは、（ステップ５２３０において）プロパゲータに、次の下位の再帰レベルの子スロットへの（すなわち、現在のスロットの子スロットの子スロットへの）選択した経路の伝搬を定義するように命令する。トップ・レベルのスロットより下位のスロットに対しては、プロパゲータは、また、１レベルさらに低い前のルーティング・レベルのところで、プロパゲータが指定したパスを伝搬する後続伝搬動作を実行する。次の下位の再帰レベルへの伝搬を定義する際に、プロパゲータは、現在の子スロットの子スロット内の仮想ピンを追加することにより現在の子スロット内のネットの構成を修正することができる。
【００８０】
プロセスが、現在のスロットは、最後の再帰レベル上に位置すると（すなわち、現在のスロットはリーフ・スロットであると）判断した場合には、プロセスは、（ステップ５２３５において）セーバに、現在のリーフ・スロット内の各ネットの経路のパス構造体をその各ネットの主データ構造体にリンクするように命令する。すでに説明したように、セーバは、また、プロパゲータが、リーフ・レベルのスロットの親スロット（すなわち、Ｇｃｅｌｌのグランドペアレント・スロット）に対して指定する伝搬パスの主ネット・データ構造体、パス・データ構造体にリンクしている。これらの伝搬パスは、（１）ソルバーが指定したルーティング・パスに対して、（２）前のルーティング・レベルのところでプロパゲータが指定したルーティング・パスに対して、プロパゲータが識別したパスを含む。このようにして、ネットの主データ構造体にリンクしているパス・データ構造体は、全体で、ルータが指定するネットに対する最後の経路を表す。いくつかの実施形態の場合には、このような経路は、あるネットに対するグローバル経路である。
ステップ５２３０および５２３５から、プロセスは、ステップ５２４０に進み、そこでプロセスは、現在のレベルにおいて、最後のスロットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、（ステップ５２４５において）現在のレベルの他のスロットを選択し、ステップ５２２０に戻って、このスロットに対するソルバーを呼び出す。チェックしていた場合には、プロセスは、（ステップ５２５０において）最後の再帰レベル上に位置しているかどうかを判断する。位置していない場合には、プロセスは、次の再帰レベルを選択し、ステップ５２１０に戻り、次の下位の再帰レベルのネットに対してより詳細な経路を指定する。プロセスが、（ステップ５２５０において）それが最後の再帰レベル上に位置すると判断した場合には、プロセスは終了する。
【００８１】
Ｅ．ソルバー
すでに説明したように、ソルバー３９３０は、（１）各ネットに対する１つまたはそれ以上の経路の列挙、（２）ＬＰ／ＩＬＰソルバーに対する、各ネットに対する経路の選択命令、（３）現在のスロットのスロット−ネット・データ構造体内への選択した結果のセーブを行う。図５３は、ソルバーが行うプロセス５３００である。いくつかの実施形態の場合には、このプロセスは、スロット・マネージャが、ソルバーを呼び出し、ソルバーに経路へのスロットを供給した時にスタートする。
プロセス５３００は、最初に、（ステップ５３０５において）スロット内の各パスに対するリソースの集中を予測する。図５４および図５５を参照しながら、パスの集中を予測するための１つの方法について以下に説明する。次に、プロセスは、（ステップ５３１０において）供給されたスロット内の各ネットに対する１つまたはそれ以上の経路を識別する。図５７〜図６０を参照しながら、現在のスロット内のネットに対する経路を識別するための１つの方法について、以下に説明する
現在のスロット内の各ネットに対する（すなわち、現在のスロットのデータ構造体にリンクしている、スロット−ネット構造体を持つ各ネットに対する）、１つまたはそれ以上の経路を識別した後で、プロセス５３００は、（ステップ５３１５において）次の下位の再帰レベルへの伝搬を要因として考慮することにより、検索した各ツリーに、ワイヤ長さコストを割り当る。いくつかの実施形態の場合には、プロセスは、この伝搬を説明するために貪欲な技術を使用する。図６４を参照しながら、検索した各ツリーに対してコストを割り当てるための１つの方法について以下に説明する。
ソルバーが列挙した潜在的経路にワイヤ長さコストを割り当てると、ソルバーは、（ステップ５３２０において）ＬＰソルバー３９４５に対する問題を定式化し、ＬＰソルバーは、（ステップ５３２５において）ＬＰ問題を解く。ＬＰ問題を定式化し、解くための１つの方法については、ＶＩ．Ｅ．４節で以下に説明する。
【００８２】
ステップ５３２５の後で、プロセス５３００は、（ステップ５３３０において）ＬＰ解を、整数ＬＰ（「ＩＬＰ」）解に変換する。いくつかの実施形態は、この変換を行うために、ランダム化四捨五入を使用する。ランダム化四捨五入は、既知の技術であり、多数の文献がこの技術の多数の例を記載している。例えば、ケンブリッジ大学出版部のＲａｊｅｅｖ  ＭｏｔｗａｎｉおよびＰｒａｂｈａｋａｒ  「Ｒａｇｈａｖａｎのランダム化アルゴリズム」（１９９５年、１９９７年）（非特許文献１）がこの技術を説明している。
ランダム化四捨五入プロセスの一例について以下に説明する。最初に、このプロセスは、ＬＰソルバーが返送したスコアを、０と１の間の確率にマッピングする。例えば、ＬＰソルバーが、０と１の間の真の解を返送した場合には、返送された解と０と１の間の確率の間には、１：１のマッピングが存在する。第二に、四捨五入プロセスは、各ネットに対して０と１の間の乱数を生成する。第三に、四捨五入プロセスは、そのネットに対して生成された乱数に対してマッピングされる、ネットの解を選択する。第四に、四捨五入プロセスは、（ＬＰソルバーが使用するもののような）いくつかの目的関数または関数に基づいて、ネットに対する一組の選択した経路の品質を測定する。第五に、四捨五入プロセスは、解のスペースが十分探索されるまで、第２〜第４の動作を逐次反復する。第六に、プロセスは、最善の品質のスコアになる一組の経路を選択する。
ステップ５３３０で選択した一組の経路に基づいて、プロセスは、（ステップ５３３５において）現在のスロットの各スロット−ネット・データ構造体内に、４２ビットの選択した経路ストリングを記憶する。この４２ビットのストリングは、ネットの選択した経路が取る現在のスロット内のパスを指定する。その後、プロセスは終了する。
【００８３】
１．残りのパス容量の予測
すでに説明したように、プロセス５３００は、（ステップ５３０５において）現在のスロット内のパス・リソースの集中を予測する。いくつかの実施形態の場合には、プロセスは、スロット内の各パスの残りの容量を推定することにより、パス集中を指定する。例えば、いくつかの実施形態の場合には、プロセスは、最初に、（１）各パスのブロックされていない容量を推定することにより、（２）各パスの使用を推定することにより、（３）そのブロックされていない容量の推定値から、各パスの使用推定値を引くことによりパスの容量を計算する。図５４を参照しながら、ブロックされていないパスの容量を推定するための１つの方法について以下に説明する。一方、図５５を参照しながら、パス使用を推定するための１つの方法について以下に説明する。
ａ．各パスのブロックされていない容量の推定
図５４は、現在のスロット内の各パスのブロックされていない容量を推定するためのプロセス５４００である。最初に、このプロセスは、（ステップ５４０２において）浮動小数点数の４２フィールドで、データ構造体を割り当てる。各フィールドは、４２のパスの中の１つのブロックされていない容量を記憶するためのものである。ステップ５４０２において、プロセスは、また、データ構造体内の経路の各フィールドを、そのパスに対するデフォールト容量値に初期化する。
ステップ５４０４において、プロセスは、回路モジュールの現在のスロットのリスト内の１つの回路モジュールを選択する。次に、プロセスは、（ステップ５４０６において）選択した回路モジュールに対する回路マクロを検索する。次に、プロセスは、（ステップ５４０８において）回路マクロ上の障害物を選択し、（ステップ５４１０において）回路モジュールの位置により、選択した障害物の囲みボックスを計算する。
次に、プロセスは、（ステップ５４１２において）現在のスロットの４２のパスの中の１つを選択する。次に、プロセスは、（ステップ５４１４において）ステップ５４１２において選択したパスが、ステップ５４０８において選択した障害物の層と同じ層上に位置するかどうかを判断する。選択したパスの層が、選択した障害物の層と一致する場合には、プロセスは、（ステップ５４２２において）選択したパスの囲みボックスを計算する。別のいくつかの実施形態は、パスに対する囲みボックスを別の方法で定義する。例えば、いくつかの実施形態は、パスの長方形の囲みとして、マンハッタン・パスおよび非マンハッタン・パスの両方に対して囲みボックスを定義する。このようなアプローチの場合、対角線パスの周囲の長方形の丸い光は、ｘ−ｙ座標軸に対して対角線方向に位置する。他のいくつかの実施形態は、対角線パスの囲みボックスを別の方法で定義することができる。例えば、いくつかの実施形態は、対角線パスの周囲の４のマンハッタン縁部を含む、４の長方形の円光（４の囲みボックス）により、このような囲みボックスを定義することができる（例えば、対角線パス２６の囲みボックスは、縁部・Ｅ１、Ｅ４、Ｅ１３、およびＥ１４を含む４のボックスを含む）。
【００８４】
次に、プロセスは、（ステップ５４２４において）そのパスの囲みボックスの面積を計算する。次に、プロセスは、（ステップ５４２６において）選択したパスの囲みボックスと選択した回路モジュールの囲みボックスの交差を識別し、（ステップ５４２８において）この交差の面積を計算する。
次に、プロセスは、（ステップ５４３０において）計算したパス面積で、計算した交差面積を割ることにより、妨害係数を計算する。次に、プロセスは、（ステップ５４３２において）障害物により妨害されたパスのトラックの数を推定するために、妨害係数にデフォールトパス容量を掛ける。次に、プロセスは、（ステップ５４３４において）４２のフィールドのデータ構造体内にパスに対して記憶されているパスの現在のブロックされていない容量からこの乗算の結果を引く。次に、プロセスは、ステップ５４１６に進むが、このステップについては以下に説明する。
選択したパスの層が選択した障害物の層と同じでない場合には、プロセスは、また、ステップ５４１４からステップ５４１６に進む。ステップ５４１６において、プロセスは、現在のスロット内のすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ５４１２に戻り、現在のスロットの他のパスを選択する。
しかし、選択したパスが現在のスロットの最後のパスである場合には、プロセスは、（ステップ５４１８において）ステップ５４０４において選択した回路モジュールのすべての障害物をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ５４０８に戻り、選択した回路モジュールの他の障害物を選択する。チェックしていた場合には、プロセスは、（ステップ５４２０において）現在のスロット内のすべての回路モジュールをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ５４０４に進み、現在のスロット内の他の回路モジュールを選択する。
現在のスロット内のすべての回路モジュールをチェックした場合、プロセス５４００は終了する。この段階で、４２のフィールドのデータ構造体は、現在のスロット内の４２のパスのブロックされていない容量を指定する。より詳細に説明すると、この段階で、４２の各フィールドは、４２のパスの中の１つのブロックされていない容量を指定する。
【００８５】
ｂ．パス使用の推定
図５５は、１つのスロット内の各パスの使用を推定するためのプロセス５５００である。このプロセスは、３つの使用構成要素により、現在のスロット内の各パスの使用を計算する再帰的プロセスである。第１のパス使用構成要素は、現在のスロットの子スロット間の経路によるパス使用を表す。第２の構成要素は、現在のスロットの子スロット内の経路によるパスの集中を表す。第３の構成要素は、パス集中に対するバイアの影響を表す。通常の当業者であれば、他の実施形態は、別の方法でパスの使用を計算することを理解することができるだろう。例えば、リーフ・スロットの唯一の子スロット内に位置する各ネットの場合には、いくつかの実施形態は、また、そのネットを含む子スロットに入射する各パスに対する、トークン・パス使用値を含む。
プロセス５５００は、自分が現在のスロットを受け取る度にスタートする。図５５に示すように、プロセス５５００は、最初に、（ステップ５５０２において）現在のスロットがリーフ・スロットであるかどうかを判断する。そうである場合には、プロセスは、ステップ５５１２に進むが、このステップについては以下に説明する。そうでない場合には、プロセスは、現在のスロットの子スロット内の経路による使用値を計算するために、ステップ５５０４および５５１０を実行する。より詳細に説明すると、ステップ５５０４において、プロセスは、現在のスロットの子スロットの中の１つを選択する。次に、プロセスは、（ステップ５５０６において）現在のスロットの子スロットの各パスの使用を推定する。いくつかの実施形態の場合には、プロセスは、各子スロットに対して自身を再帰的に呼び出すことにより、上記推定を行う。
次に、プロセスは、（ステップ５５０８において）ステップ５５０４において選択した子スロットが、最後の子スロットであるかどうかを判断する。そうでない場合には、プロセスは、（ステップ５５０４において）他の子スロットを選択し、（ステップ５５０６において）新しく選択した子スロット内のパス使用を推定する。そうである場合には、プロセスは、ステップ５５１０に進み、現在のスロットの子スロット内の集中によるパス使用構成要素を計算する。
【００８６】
いくつかの実施形態の場合には、プロセスは、現在のスロット内の４２のパスの使用値を記憶するための、４２のフィールドを含む（例えば、アレーのような）データ構造体内に、ステップ５５１０において計算したパス使用値を記憶する。プロセスは、いくつかの実施形態の場合現在のスロットでこのデータ構造体を受け取り、一方、他の実施形態の場合には、プロセス５５００は、このようなデータ構造体を受け取らないが、スタートする時に、データ構造体を初期化する。
ステップ５５１０において、プロセスは、子スロット内の集中によるパス使用構成要素を計算する。例えば、プロセスは、下式により子スロット１および２内の集中により、子スロット１および２間のパス１の構成要素使用値を定義することができる。
パス1の使用=[(0.75)+(0.25)*(1/(1／再帰レベルの数−現在のレベル))]
*(1/2)*(1/2*(パス[1][2]+パス[1][5]+パス[1][8]+パス[1][11]+
1/3*(パス[1][1]+パス[1][4]+パス[1][7]+パス[1][10]+
1/6*(パス[1][0]+パス[1][3]+パス[1][6]+パス[1][9]+
1/2*(パス[2][0]+パス[2][3]+パス[2][6]+パス[2][9]+
1/3*(パス[2][1]+パス[2][4]+パス[2][7]+パス[2][10]+
1/6*(パス[2][2]+パス[2][5]+パス[2][8]+パス[2][11])))
ここで、パス・［ｉ］［ｊ］は、子スロットｉのパスｊの使用である。現在のスロット内の他の４１のパスに対する構成要素使用値を類似の方法で定義するために、類似の式を使用することができる。
上式は、パス１と一直線になっている水平パス・ラインを子スロット内でチェックする場合にだけ使用される。より詳細に説明すると、プロセスは、子スロット１および２のすべての水平パス（すなわち、パス０〜１１）により、パス１の構成要素使用値をチェックする。現在のスロット内のパス１の容量が、子スロット１および２内のパスの容量により、等しく影響を受けることを反映するために、子スロット１および２両方の使用値の合計には、１／２が掛けられる。
乗数１／２、１／３および、１／６は、下記の理由で子スロット１および２に対する合計で使用される。目的は、１つのパスを通して何本のワイヤを通すことができるかを推定することである。これらのワイヤの中のあるものは、パスを通過した直後で終わっているが、一方、あるものは、そのパスに入射するスロットの幅全体を横切っている。パス１の伝搬０に対して、１／４は、子スロット２のスロット０内で終わり、１／４は子スロット２のスロット１内で終わり、１／４は、子スロット２のスロット２内で終わり、１／４は子スロット２のスロット３内または、超えて終わるように、パスを使用するワイヤの「終点」が均等に分布しているものと仮定する。このことは、パス１を使用するワイヤの中の３／４は、子スロット２のパス０も使用し、２／４は、子スロット２のパス１を使用し、１／４は、子スロット２内のパス３を使用することを意味していて、伝搬したパスの推定使用上のこれら３つのパスの使用の相対的なインパクトは、３：２：１（または、３／６、２／６、１／６）になる。
【００８７】
また、子スロット１および２内の使用値の合計には、［（０．７５）＋（０．２５）＊（１／（再帰的レベルの数−現在のレベル）］が掛けられる。この乗算は、大部分のネット経路は、２つの真のピンを接続している１本のパスを含むという仮定に基づいている。孫スロット内にピンが均等に分布していると仮定した場合、所与のパスを使用する経路の３／４番目は、各子スロット内に全部が含まれているネットからの集中に遭遇することになる。ルータが階層内を下に向かって移動すると、経路のもっと多くの割合が、全孫スロットを通り、そのため、もっと多くのネットが、窓のスロット内の全集中に遭遇することになり、それにより、当然乗数は１へ増大する。
ステップ５５０２または５５１０からプロセスはステップ５５１２に進む。プロセスは、現在のスロットの子スロット間の経路による構成要素使用値を計算するために、動作５５１２〜５５２８を実行する。プロセスは、上記確率的シュタイナー・ツリー貢献によりこれら構成要素値を計算する。
ステップ５５１２において、プロセスは、１つのネットを選択する。次に、プロセスは、（ステップ５５１４において）現在のスロット内の選択したネットのピン構成を検索する。次に、プロセスは、（ステップ５５１６において）検索したピン構成に対する確率的シュタイナー・ツリー値を識別する。すでに説明したように、図２８は、図５に示すネット５０５のピン構成に対する確率的シュタイナー・ツリー値である。いくつかの実施形態は、図２６のところですでに説明したように、確率的シュタイナー・ツリー値を再度計算する。しかし、他の実施形態は、パス使用推定プロセス５５００中にこれらの値を生成する。
【００８８】
次に、プロセスは、（ステップ５５２０において）４２フィールド・データ構造体内のパス使用値に、各パス使用確率値を加算する。次に、プロセスは、パス集中上のネットに対するバイアの影響を説明するために、トークン使用値を計算するために、ステップ５５２２〜５５３０を実行する。ネットが現在のスロットの子スロット内に１つまたはそれ以上のピンを持っている場合には、これらのピンは、通常、下の金属層上に位置する。それ故、そのネットに対して指定されたパスへ、これらのピンの中のあるものを接続するために追加しなければならない。各バイアの追加は、パス集中を増大する。
ステップ５５２２において、プロセスは、ステップ５５１２において選択した、ネットのピンの中の１つを含む子スロットを選択する。このネットは、１つまたはそれ以上の経路を持ち、各経路は、１つまたはそれ以上のパスを使用する。それ故、ステップ５５２４において、プロセスは、ステップ５５２２において選択した子スロット上に入射する経路パスの中の１つを選択する。次に、プロセスは、（ステップ５５２６において）トークン量だけ、選択したパス使用値を増大する。いくつかの実施形態の場合には、トークン量は、０．５／（再帰レベルの数  −  現在の再帰レベル）である。
次に、プロセスは、（ステップ５５２８において）選択した子スロット上に入射する（選択したネットのすべてのツリーの）すべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、（ステップ５５２４において）選択した子スロット上に入射する他のパスを選択し、その後で、（ステップ５５２６において）トークン量だけ、選択したパス使用値を増大する。
一方、プロセスが、（ステップ５５２８において）選択した子スロット上に入射する最後のパスを、チェックしたと判断した場合には、プロセスは、（ステップ５５３０において）選択したネットに対する１つのピンを含む最後の子スロットをチェックしたと判断する。チェックしていなかった場合には、プロセスはステップ５５２２に戻り、選択したネットに対する１つのピンを持つ他の子スロットを選択する。チェックした場合には、プロセスは、（ステップ５５３２において）現在のスロット内の最後のネットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ５５１２に戻り、他のネットを選択し、このネットに対して以降の動作を実行する。プロセスが、ステップ５５３２において、最後のネットをチェックしたと判断した場合に、プロセスは終了する。
【００８９】
２．現在のスロット内の各ネットに対する経路の識別
（ステップ５３０５において）現在のスロット内の各パスの残りの容量をチェックした後で、プロセスは、（ステップ５３１０において）現在のスロット内の各ネットに対する１つまたはそれ以上の経路を識別する。下記のいくつかの実施形態は、最初に、各ネットに対する１つまたはそれ以上の経路を識別するために、現在のスロットに関する各ネットの構成を使用する。
次に、これらの実施形態は、いくつかのネットまたはすべてのネットに対して、偽の構成を生成し、生成した偽の構成に基づいて、ネットに対する追加の経路を識別する。いくつかの実施形態は、ネットに対する偽の構成を生成するために、２つの異なるアプローチを使用する。第１のアプローチは、ネット構成に偽のピンを追加する。このアプローチについては、図５６〜図５８を参照しながら以下に説明する。第２のアプローチは、ネット構成を、２つまたはそれ以上の構成に分割し、新しい構成に偽のピンを追加する。このアプローチについては、図６０および図５９を参照しながら以下に説明する。
【００９０】
ａ．各ネット構成に対する経路の識別、およびネット構成に偽のピンを追加することによる迂回路の可能性の生成
図５６は、プロセス５６００が、各ネット構成に対する経路の識別、およびネット構成に偽のピンを追加することによる迂回路の可能性の生成を示す。この図に示すように、プロセス５６００は、最初に、（ステップ５６０２において）現在のスロット内の１つのネット構成を選択する。ステップ５６０４において、プロセスは、（１）選択したネットに対する経路を識別するために、現在のスロット内のネット構成を使用し、（２）ソルバー内の変数内の選択したネットに対する識別した経路を記憶する。プロセス５６００は、第Ｖ節ですでに説明したアプローチの中の１つに基づいて、特定のネット構成に対するツリーを識別する。
選択したネット構成に基づいて経路を識別し、記憶した後で、プロセスは、選択したネットに対して迂回路を生成する必要があるかどうかを判断し、必要がある場合には、１つまたは２つの偽のピンを追加することによりこれらの迂回路を生成するために、動作５６０６〜５６６８の中のいくつかまたは全部を実行する。
プロセス５６００は、ステップ５６０４において識別したすべての最適な経路、が、「危険な状態にある」１つまたはそれ以上のパスを使用する選択したネットに対して迂回路を生成する。推定した集中（パス使用＋閉鎖）が、パスの容量に近かったり、超えている場合には、パスは「危険な状態」にある。いくつかの実施形態は、（ステップ５３０５において計算した）パスの残りの容量が、しきい値より少ないかどうかを判断することにより、あるパスが「危険な状態にある」かどうかを判断する。あるパスが「危険な状態にある」と定義されるしきい値を変化させることにより、変化するネットの数に対して、次善の経路を生成することができる。
【００９１】
図５７および図５８は、１つまたは２つの偽のピン構成を追加することにより、次善の迂回路を生成する方法の例を示す。より詳細に説明すると、図５７は、子スロット８および１１内に２つのピン５７１０および５７１５を含む、あるネットに対する次善の経路５７２５を示す。この次善の経路は、偽のピン５７０５を追加することにより生成される。この次善の経路５７２５は、障害物５７２０により集中している（子スロット９および１０間の）水平パスＰ７を避ける。ネットのピン配列に仮想ピン５７０５を追加すると、新しいピン構成になる。この新しいピン構成に対する最適な経路は、ピン５７１０および５７１５を持つもとのネットに対して次善の経路を提供する。この次善の経路は、「危険な状態にある」パス７を使用しない。
図５８は、２つの偽のピン５８０５および５８１０が、ピン５８１５および５８２０を持つネットに追加された例を示す。これら２つの偽ピンは、障害物５８２５により閉鎖され、集中しているパス７および３３を避ける次善の経路５８３０を生成する。
図５６のプロセス５６００は、（１）ネット構成に１つその後で２つの偽のピンを追加することにより、また（２）結果としてのピン構成に対する最善の最適経路を識別することにより、迂回路を生成する。このプロセスは、最大、ネット構成に２つの偽のピンを追加するに過ぎないが、通常の当業者であれば、他の実施形態も、いくつかのネットまたはすべてのネットに対する有用な迂回路を識別するために、ネット構成にもっと多くのピンを追加することを理解することができるだろう。
ステップ５６０６において、プロセスは、ステップ５６０４において識別した経路の中の１つを選択する。次に、プロセスは、（ステップ５６０８において）ステップ５６０６において選択した経路のパスのうちの１つを識別する。ステップ５６１０において、プロセスは、ステップ５６０８において選択したパスの残りの容量が、しきい値容量値以下であるかどうかを判断する。ステップ５３０５において、パスの残りの容量が計算される。
プロセスが、（ステップ５６１０において）パスの残りの容量がそのしきい値容量値以下であると判断した場合には、プロセスは、（ステップ５６１２において）ステップ５６０６において選択した経路に使用不能のフラグを付け、ステップ５６１６に進むが、このステップについては後で説明する。そうでない場合には、プロセスは、（ステップ５６１４において）選択した経路のすべてのパスをチェックしたかどうかを判断する。すべてのパスをチェックしていなかった場合には、プロセスは、５６０８に戻り、選択した経路の他のパスを選択する。チェックしていた場合には、プロセスは、ステップ５６１６に進む。
【００９２】
ステップ５６１６において、プロセスは、ステップ５６０４において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ５６０６に進み、選択したネットに対して識別した経路を選択する。チェックしていた場合には、プロセスは、（ステップ５６１８において）選択したネットに対するすべての識別した経路に使用不能というマークを付けたかどうかを判断する。付けていなかった場合には、ネットは、任意の「危険な状態にある」パスを使用しない１つまたはそれ以上の経路を持つ。それ故、プロセスは、このネットに対しては偽の構成を生成しない。次に、プロセスは、（ステップ５６２０において）現在のスロット内のすべてのネットをチェックしたかどうかを判断する。すべてのネットをチェックしていた場合には、プロセスは終了する。チェックしてなかった場合には、プロセスはステップ５６２０からステップ５６０２に進み、現在のスロット内の他のネットを選択する。
プロセスが、（ステップ５６１８において）選択したネットに対するすべての識別した経路が使用不能と判断した場合には、プロセスは、（ステップ５６２２において）現在のスロットの子スロットを選択する。次に、選択したネットに対して、プロセスは、（ステップ５６２４において）そのネットがステップ５６２２において選択した子スロット内にピンを持つことを示す偽のピン構成を生成する。いくつかの実施形態の場合には、プロセスは、現在のスロット内の選択したネットの実際のピン構成を複写し、複写したピン構成が、ステップ５６２２において選択した子スロットに対する１つのピンを示すことを確認することにより、この偽のピン構成を生成する。図５７の例の場合には、プロセスは、もとの構成００００１００１００００００００に、６番目の子スロットに対する「１」を追加することにより、偽の構成００００１００１０１００００００を生成する。
【００９３】
次に、プロセスは、（ステップ５６２６において）ステップ５６２４において生成した偽のピン構成に対する経路を識別する。プロセスは、第Ｖ節ですでに説明した方法の中の１つにより、このピン構成に対するこれら経路を識別することができる。次に、プロセスは、（ステップ５６２８において）ステップ５６２６において識別した経路の中の１つを選択する。次に、プロセスは、（ステップ５６３０において）選択した経路が使用できるかどうかを判断する。プロセスは、この判断を、すでに説明したステップ５６０８〜５６１６類似の使用度チェック動作により行う。プロセスが、（ステップ５６３０において）ステップ５６２８において選択した経路が使用できないと判断した場合には、プロセスはステップ５６３４に進むが、このステップについては、後で説明する。選択した経路が使用できない場合には、プロセスは、（ステップ５６３２において）生成した偽の構成に対して選択した経路のコストを記録し、次にステップ５６３４に進む。
ステップ５６３４において、プロセスは、生成した偽の構成に対してステップ５６２６において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ５６２８に戻り、他の識別した経路を選択する。チェックしていた場合には、プロセスは、（ステップ５６３６において）現在のスロットのすべての子スロットに対して偽のピン構成を生成したかどうかを判断する。生成していなかった場合には、プロセスはステップ５６２２に戻り、他の子スロットを選択する。
生成していた場合には、プロセスは、（ステップ５６３８において）もしあるばあいには、ステップ５６３２において記録した最善のコストの使用することができる経路になる偽のピン構成を識別する。ある構成がステップ５６３８において識別された場合には、プロセスは、（ステップ５６４０において）ステップ５６３８において識別したピン構成に対するすべての使用することができる経路を識別し、現在のネットに対する一組の可能なルーティング解にこれら経路を追加する。
【００９４】
次に、プロセスは、最大２までの偽のピンを含む偽の構成に対する経路を生成するために、ステップ５６４２〜５６６８を実行する。より詳細に説明すると、ステップ５６４２において、プロセスは、現在のスロットの子スロットを選択する。プロセスは、（ステップ５６４４において）現在のスロット内の選択したネットの実際のピン構成を複写する。次に、プロセスは、（ステップ５６４６において）複写したピン構成が、ステップ５６４２において選択した子スロットに対するピンを示すことを確認する。図５８の例の場合には、プロセスは、もとの構成００００１００１００００００００に６番目の子スロットに対する「１」を追加することにより、最初の偽の構成００００１００１０１００００００を生成する。
ステップ５６４８において、プロセスは、ステップ５６４２において選択した子スロット以外の子スロットを選択する。次に、プロセスは、（ステップ５６５０において）そのネットがステップ５６４８において選択した子スロット内の１つのピンを持つことを示す偽のピン構成を生成する。いくつかの実施形態の場合には、プロセスは、ステップ５６４６において識別したピン構成を複写し、複写したピン構成が、ステップ５６４８において選択した子スロットに対する、１つのピンを示すことを確認することによりこの偽のピン構成を生成する。図５８の例の場合には、プロセスは、最初の偽の構成００００１００１０１００００００に５番目の子スロットに対する「１」を追加することにより、最後の偽の構成００００１００１０１１０００００を生成する。
次に、プロセスは、（ステップ５６５２において）ステップ５６５０において生成した偽のピン構成に対する経路を識別する。ステップ５６０４および５６２６のところでのように、プロセスは、第Ｖ節のところですでに説明した方法の中の任意の方法により、生成したピン構成に対するこれら経路を識別することができる。
次に、プロセスは、（ステップ５６５４において）ステップ５６５２において識別した経路の中の１つを選択する。次に、プロセスは、（ステップ５６５６において）選択した経路が使用することができるかどうかを判断する。プロセスは、この判断を、すでに説明したステップ５６０８〜５６１６類似の使用度チェック動作により行う。ステップ５６５４において選択した経路が使用できない場合には、プロセスはステップ５６６０に進むが、このステップについては後で説明する。選択した経路が使用できる場合には、プロセスは、（ステップ５６５８において）生成した偽の構成に対して選択した経路のコストを記録し、その後で、ステップ５６６０に進む。
【００９５】
ステップ５６６０において、プロセスは、ステップ５６５０において生成した偽のピン構成に対して、ステップ５６５２において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ５６５４に戻り、他の識別した経路を選択する。チェックしていた場合には、プロセスは、（ステップ５６６２において）ステップ５６４２において選択した子スロット以外のすべての子スロットに対して、偽のピン構成を生成したかどうかを判断する。生成していなかった場合には、プロセスはステップ５６４８に戻り、ステップ５６４２において選択した子スロット以外の他の子スロットを選択する。
生成していた場合には、プロセスは、（ステップ５６６４において）すべての子スロットを潜在的な第１の偽のピンとしてチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ５６４２に戻り、他の子スロットを選択する。すべての子スロットを潜在的な第１の偽のピンとしてチェックした場合には、プロセスは、（ステップ５６６６において）もしある場合は、ステップ５６５８において記録した最善のコストの使用することができる経路になる偽のピン構成を識別する。ある構成がステップ５６６６において識別された場合には、プロセスは、（ステップ５６６８において）ステップ５６６６において識別したピン構成に対するすべての使用することができる経路を識別し、現在のネットに対する一組の可能なルーティング解にこれらの経路を追加する。
ステップ５６６８から、プロセスは、ステップ５６２０に進む。ステップ５６２０において、プロセスは、現在のスロット内のすべてのネットをチェックしたかどうかを判断する。すべてのネットをチェックした場合には、プロセスは終了する。チェックしていなかった場合には、プロセスは、現在のスロット内の他のネットを選択するために、ステップ５６２０からステップ５６０２に進む。
【００９６】
ｂ．ネット構成のもっと小さいピン構成への分割、およびもっと小さい方ピン構成への偽のピンの追加
ある場合には、ネット構成に偽のピンを追加しただけでは、最もよい次善の経路にはならない。場合によっては、このような経路を、（１）１つのネットのピン構成から２つまたはそれ以上のピン構成を生成することにより、（２）生成したピン構成に対する偽の構成を識別することにより、（３）この構成に対する経路を識別することにより、（４）１つまたはそれ以上の次善の経路を発見するために、結果として得られる経路を結合することにより生成することができる。このようなアプローチは、集中したパスが、２つの隣接している「実際」のピンの間に位置しているような状況において特に有用である。
図５９は、このようなアプローチの一例である。この例の場合には、１つのネットは、２つのピン５９０５および５９１０を含む。偽のピン５９１５をもとのネット構成に追加した場合には、結果として得られるネット構成に対する経路は、パスＰ６およびＰ２１を使用する。しかし、このような経路は使用できない。何故なら、障害物５９２０がパスＰ６を完全に閉鎖しているからである。パス２１および３６を使用するもっと理想的な経路は、（１）ピン構成を、一方はピン５９０５を含むピン構成、他方はピン５９１０を含むピン構成の２つのピン構成に分割することにより、（２）偽のピン５９１５を、結果として得られる両方のピン構成に追加することにより入手することができる。
図６０は、あるネット構成に対する追加の経路を識別するプロセス６０００である。このプロセスは、ネットのピン構成から２つのピン構成を生成し、生成した両方のピン構成に対する偽の構成を識別し、偽の構成に対する経路を識別し、結果として得られる経路を結合する。いくつかの実施形態は、現在のスロット内の各ネットに対してこのプロセスを実行し、一方、他の実施形態は、プロセス５６００が使用できる経路を発見できなかったネットのようないくつかのネットに対してだけこのプロセスを実行する。
図６０に示すように、プロセス６０００は、（ステップ６００２において）現在のスロット内のあるネットに対する１つまたはそれ以上の経路を識別することによりスタートする。プロセスは、第Ｖ節のところですでに説明した方法の中の任意の方法により、ネットのピン構成に基づいてこれらの経路を識別することができる。次に、プロセスは、（ステップ６００４において）それに入る識別した経路の大部分のパスを持つ子スロットを識別する。次に、プロセスは、（ステップ６００６において）２つのビットの組ｂｓｅｔ１およびｂｓｅｔ２を定義する。いくつかの実施形態の場合には、各ビットの組は、１６のビットを持ち、これらすべてのビットは最初にゼロとして定義される。
【００９７】
次に、ステップ６００８において、プロセスは、ステップ６００４において識別した子スロットに対応する第１のビットの組のビットを１に設定する。ステップ６００８において、プロセスは、現在のネットの複数のピンを含む残りの子スロットに対応する第２のビットの組の１つまたは複数のビットを１に設定する。ステップ６０１０において、プロセスは、一方は、多数の解の最善の長さを測定するために使用する最善の長さ変数であり、他方は、最善の長さになる解を識別するために使用する最善の迂回路変数である２つの変数を初期化する。最善の長さ変数は、ある大きな値に初期化され、一方、最善の迂回路変数はゼロに初期化される。
ステップ６０１２において、プロセスは、現在のスロットの子スロットの中の１つを選択する。次に、プロセスは、（ステップ６０１４において）現在のネットのピン構成が、１に設定された選択した子スロットの対応するビットを持っているかどうか（すなわち、現在のネットが、選択した子スロット内に１つのピンを持っているかどうか）を判断する。持っている場合には、プロセスは、（ステップ６０１６において）現在のスロットの各子スロットに対して、偽の構成を生成しようとしたかどうかを判断する。現在のスロットのすべての子スロットをチェックしていなかった場合には、プロセスは、ステップ６０１２に戻り、他の子スロットを選択する。チェックしていた場合には、プロセスはステップ６０４０に進むが、このステップについては後で説明する。
プロセスが、（ステップ６０１４において）現在のネットのピン構成内で、選択した子スロットに対応するビットが１に設定されていないと判断した場合には、プロセスは、（ステップ６０１８において）２つのビットの組ｂｉｔｓｅｔ１およびｂｉｔｓｅｔ２から２つの複写したビットの組ｂｉｔｓｅｔ１ｃおよびｂｉｔｓｅｔ２ｃを生成する。複写した各ビットの組において、次に、プロセスは、（ステップ６０２０において）選択した子スロットに対応するビットを１に設定する。
【００９８】
次に、プロセスは、（ステップ６０２２において）複写し、修正した各ビットの組に対する１つまたはそれ以上の経路を識別する。プロセスは、第Ｖ節ですでに説明した方法の中の任意の方法により、複写し、修正したビットの組を識別することができる。次に、プロセスは、（ステップ６０２４において）第１の複写し、修正したビットの組（すなわち、ｂｉｔｓｅｔ１ｃ）に対する経路の中の１つを選択し、（ステップ６０２６において）第２の複写し、修正したビットの組（すなわち、ｂｉｔｓｅｔ２ｃ）に対する経路の中の１つを選択する。次に、ステップ６０２８において、プロセスは、２つの選択した経路が重なり合っているかどうか（すなわち、２つの解が、子スロット間の１つまたはそれ以上の経路を共有しているかどうか）を判断する。重なり合っている場合には、プロセスはステップ６０３６に進むが、このステップについては後で説明する。
重なっていない場合には、プロセスは、（ステップ６０３０において）ステップ６０２４および６０２６において選択した２つの経路を結合することによりできる１つの経路の長さを計算する。いくつかの実施形態の場合には、プロセスは、ステップ６０２４および６０２６において選択した２つの経路の長さを合計することによりこの長さを計算する。ステップ６０３２において、プロセスは、ステップ６０３０において計算した長さが、現在の最善の長さより短いかどうかを判断する。短くなかった場合には、プロセスは、ステップ６０３６に進むが，このステップについては後で説明する。
ステップ６０３０において計算した長さが、現在の最善の長さより短かかった場合には、ステップ６０２４および６０２６において選択した２つの経路は、プロセス６０００が今迄見た最善の解を表す。それ故、ステップ６０３４において、プロセスは、ステップ６０３０において計算した長さに等しい最善の長さを定義する。ステップ６０３４において、プロセスは、また、ステップ６０２４および６０２６において選択した２つの経路の組合わせとして、新しい経路を生成し、最善の迂回路を生成した新しい経路として定義する。ステップ６０３４から、プロセスはステップ６０３６に進む。
【００９９】
ステップ６０３６において、プロセスは、第１の複写し、修正したビットの組（ｂｓｅｔ１ｃ）に対して、ステップ６０２４において選択した経路で、第２の複写し、修正したビットの組（ｂｉｔｓｅｔ２ｃ）に対して（ステップ６０２２において）識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ６０２６に戻り、第２のｂｉｔｓｅｔ２ｃに対する別の経路を選択する。チェックしていた場合には、ステップ６０３８において、プロセスは、第１の複写し、修正したビットの組（ｂｉｔｓｅｔ１ｃ）に対して、（ステップ６０２２において）識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ６０２４に戻り、チェックするために、第１のｂｉｔｓｅｔ１ｃに対する別の経路を選択する。
プロセスが、（ステップ６０３８において）第１の複写し、修正したビットの組（ｂｉｔｓｅｔ１ｃ）に対して、すべての識別した経路をチェックしたと判断した場合には、プロセスは、（ステップ６０１６において）現在のスロットの各子スロットに対して偽の構成を生成しようとしたかどうかを判断する。生成しようとした場合には、プロセスは、（ステップ６０４０において）（もしある場合には）、プロセスが最善の迂回路として識別した解を現在のネットの解のプールに追加し、終了する。一方、プロセスが、各子スロットに対して偽の構成を生成しようとしなかった場合には，プロセスはステップ６０１２に戻り、他の子スロットを選択する。
【０１００】
３．潜在的な経路に対するコストの割当て
（ステップ５３１０において）現在のスロット内の各ネットに対する１つまたはそれ以上の経路を識別した後で、プロセス５３００は、（ステップ５３１５において）次の下位の再帰レベルへの伝搬の要因を考慮して、検索した各ツリーに対してワイヤ長さコストを割り当てる。いくつかの実施形態の場合には、各経路のコストは、下記の３つの構成要素コスト、すなわち、（１）現在のスロットの子スロットを接続している経路の、１つまたは複数のパスのワイヤ長さコスト、（２）子スロットへの経路の１つまたは複数のパスのパス伝搬コスト、（３）パス伝搬を選択した後の各子スロット内のコストを含む。
図６４は、これら３つの構成要素コストにより各経路のコストを計算するためのプロセスである。このプロセスを説明する前に、図６１〜図６３を参照しながら、このプロセスが使用する概念上の枠組みについて説明する。これらの図は、いくつかの実施形態が、下位のレベルの子スロットへのより高いレベルの経路の伝搬をモデル化する方法を示す。より詳細に説明すると、図６１は、現在のスロットの子スロット間の任意の水平パスまたは垂直パスが、１０の伝搬パスの中の１つに沿って子スロットのスロット内に伝搬できることを示す。
【０１０１】
図６２および図６３は、下位のレベルの子スロット内への４５度の対角線パスの伝搬をモデル化するための２つの異なる方法を示す。図６２のモデルは、４５度の対角線パスに対する７つの伝搬の可能性を供給する。一方、図６３のモデルは、２つの対角線方向に位置する子スロット６３０５および６３１０間の４５度の対角線パスに対して１９の伝搬を供給する。何故なら、図６３のモデルは、子スロット６３０５および６３１０の縁部に沿って伝搬するパスだけを指定し、それにより、他の子スロットの対応する縁部に沿った３つのパス伝搬に中の任意のものとペアになるために、子スロットの１つの縁部に沿ってパス伝搬できるからである。例えば、図６３に示すように、縁部６３２０に沿った伝搬６３１５は、縁部６３４０に沿った伝搬６３２５、６３３０および６３３５のどれかとペアになることができる。このアプローチの場合には、スロット６３０５および６３１０間の対角線パスは、１９の伝搬を持つことができる。この場合、（１）伝搬の中の９つは、縁部６３４０沿いの３つのパス伝搬と、縁部６３２０沿いの３つのパス伝搬をペアにすることにより形成され、（２）伝搬の中の９つは、縁部６３５０沿いの３つのパス伝搬と、縁部６３４５沿いの３つのパス伝搬をペアにすることにより形成され、（３）伝搬６３５５の中の１つは、スロット６３１０の頂部の左の隅とスロット６３０５の底部の右隅との間に形成される。
図６４に示すように、プロセス６４００は、最初に、（ステップ６４０２において）１つのネットを選択する。次に、プロセスは、（ステップ６４０４において）選択したネットに対して（ステップ５３１０において）識別した経路に中の１つを（ステップ６４０４において）選択する。次に、プロセスは、（ステップ６４０６において）選択した解の全コストを０に初期化する。次に、プロセスは、ステップ６４０４において選択した経路のパス・コストを識別しなければならない。いくつかの実施形態の場合には、ＬＵＴ３９６５の中の１つが、各ネット構成に対する予め表の形にしたワイヤ長さコストを記憶する。これらの実施形態の場合には、ツリーがそのネットの解の組に追加された時に、選択したツリーの予め表の形にしたワイヤ長さコストをＬＵＴから検索することができる。別な方法としては、プロセス６４００は、ＬＵＴからのツリーの予め表の形にしたワイヤ長さコストを検索するために、現在のネットに対する選択したツリーの識別になったピン構成を使用することができる。
【０１０２】
しかし、以下に説明するいくつかの実施形態の場合には、プロセス６４００は、ステップ６４０８〜６４１２を実行することにより、選択した経路のパス・コストを計算する。より詳細に説明すると、ステップ６４０８において、プロセスは選択した経路の１つのパスを選択する。次に、プロセスは、（ステップ６４１０において）選択した解の全コストを、ステップ６４０８において選択したパスのコストだけ増大する。いくつかの実施形態は、単に他のパスと比較したパスの相対的な長さに基づいてパスのコストを定義する。例えば、いくつかの実施形態は、スロット間（例えば、図１２の各パスＰ０−Ｐ２３）の各水平パスまたは垂直パスに対して１というパス・コストを割り当て、スロット間（例えば、各パスＰ０２４−Ｐ０４１）の各対角線パスに対して１．４というパス・コストを割り当てる。他の実施形態は、スロット間（例えば、図１２の各パスＰ０−Ｐ２３）の各水平パスまたは垂直パスに対して５というパス・コストを割り当て、スロット間（例えば、各パスＰ０２４−Ｐ０４１）の各対角線パスに対して７というパス・コストを割り当てる。
いくつかの実施形態は、相対的なパスの長さだけに基づかないで、パス・コストを定義することができる。ある目的（例えば、下位の層配線の使用を促進するため、またはバイアの使用を少なくするため）を達成するために、いくつかの実施形態は、下位の層の配線と比較した場合、より高いレベルを通るパスを、その相対的な長さのコストよりも高いコストにすることができる。例えば、いくつかの実施形態は、スロット間の各水平パスまたは垂直パスに対して１というパス・コストを割り当て、スロット間の各対角線パスに対して１．４よりも大きいパス・コストを割り当てる。
ステップ６４１２において、プロセスは、すべての選択した経路のパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ６４０８に戻り、コスト計算するために他のパスを選択する。プロセスが、（ステップ６４１２において）すべての選択した経路のパスをチェックしたと判断した場合には、プロセスは、（ステップ６４１４において）現在のスロットがリーフ・レベルのスロットであるかどうかを判断する。そうである場合には、プロセスは、ステップ６４２８に進むが、このステップについては後で説明する。
【０１０３】
プロセスが、現在のスロットがリーフ・レベルのスロットでないと判断した場合には、プロセスは、子スロット内のワイヤ長さコストを計上する。プロセスは、子スロットへの選択した経路の伝搬の要因を考慮するために、貪欲な技術を使用する。より詳細に説明すると、プロセスは、（ステップ６４１６において）そのパスのアンカーの数により、選択した各ツリーのパス順序を決める。いくつかの実施形態は、アンカーをパスが入るどちらかの子スロットとして定義する。これらの実施形態の場合には、パスは、最高２つのアンカーを持つ。他の実施形態は、アンカーを子スロットのスロット内のピンの数として定義することができる。このようなアプローチの場合、１つのパスが、各子スロットの１６のスロット内に１６のピンを持っている場合には、１つのパスは、最高３２のアンカーを持つことができる。いくつかの実施形態の場合には、プロセスは、アンカーの降順にパスをソートする（すなわち、最初に、そのソートしたリスト上に最大の数のアンカーを持つパスを置く）。
次に、６４１８において、プロセスは、ソートした順序で１つのパスを選択する（すなわち、下から上にソートしたリスト上でパスを選択する）。選択したパスに対して、プロセスは、（ステップ６４２０において）伝搬の可能性の１つを選択する。すなわち、この段階で、プロセスは、選択したパスが、それが入る２つのスロット間を伝搬することができるいくつかの方法の中の１つを選択する。
図６１を参照しながらすでに説明したように、いくつかの実施形態は、現在のスロットの子スロット間の水平パスまたは垂直パスに対して、１０の潜在的な伝搬を供給する伝搬モデルを使用する。また、いくつかの実施形態は、図６２に示すように、４５度のパスに対して７つの潜在的な伝搬を供給する伝搬モデルを使用する。一方、他の実施形態は、図６３に示すように、４５度のパスに対して１９の潜在的な伝搬を供給するモデルを使用する。
【０１０４】
いくつかの実施形態の場合には、プロセスは、（ステップ６４２０において）選択したパスに対する最適な伝搬を選択する。最適な伝搬を選択するために、プロセスは、各伝搬の可能性をチェックし、必要な場合には、仮想ピンを追加し、各伝搬の可能性のコストを計算し、最もコストが安い伝搬および経路となる伝搬の可能性を選択する。図６５を参照しながらすでに説明したように、各伝搬の可能性は、２つまたは３つの子スロットに入る１つまたは２つのの伝搬パスを指定することができる。それ故、各伝搬の可能性のコストは、伝搬パスのコストに、伝搬の可能性が通る２つまたは３つの子スロット内の、ピン構成のルーティング・コストを加えたものを含む。
図６５は、１つのパスの伝搬の可能性の一例である。この図は、スロット０および９に実際のピン６５２５を持つ１つのネットを示す。このネットに対して選択した経路は、子スロット０および９を接続するために、子スロット５を通るパスＰ１７およびＰ２４を使用する。図６５は、パスＰ２４が、パス６５１０および６５１５に沿って３つの子スロット（すなわち、子スロット０、１および５）内に伝搬する様子、一方、パスＰ１７が、パス６５２０に沿って２つの子スロット５および９内に伝搬する様子を示す。伝搬パス６５１０は、現在のスロットの子スロット０の子スロット７と、現在のスロットの子スロット１の子スロット８との間に位置する。伝搬パス６５１５は、現在のスロットの子スロット１の子スロット１３と、現在のスロットの子スロット５の子スロット２との間に位置する。伝搬パス６５２０は、現在のスロットの子スロット５の子スロット１４と、現在のスロットの子スロット９の子スロット２との間に位置する。図６５は、子スロット１、５および９のスロットに追加した５つの仮想ピン６５０５である。
【０１０５】
ステップ６４２０において、プロセスは、また、（１）ステップ６４２０において識別した伝搬の可能性のパスのコストと、ステップ６４１８において選択したパスのコストとの間のデルタ・コストを計算し、次に、（２）全コストをこのデルタ・コストだけ増大する。例えば、いくつかの実施形態の場合には、選択したパスが７というコストを持つマンハッタン・パスであり、識別した伝搬が７というコストの対角線パスである場合には、デルタ・コストは２である。また、いくつかの実施形態の場合には、選択したパスが５というコストを持つ対角線パスであり、識別した伝搬が、それぞれが７というコストを持つ２つの対角線パスである場合には、デルタ・コストは７である。いくつかの実施形態の場合には、選択したパスおよびその識別した伝搬の両方がマンハッタン・パスである場合には、デルタ・コストは０である。
ステップ６４２０において選択した伝搬に対して、プロセスは、（ステップ６４２２において）必要な場合には、入る子スロット（すなわち、その上にステップ６４３０において識別した伝搬が入る子スロット）のピン構成記録内に仮想ピンを一時的に記憶する。プロセスは、（もしある場合）選択した経路の他のパスの伝搬コストを計算する際に、これらの一時的に記憶した仮想ピンを使用する。
次に、プロセスは、（ステップ６４２４において）選択した経路の最後のパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ６４１８に戻り、ソートしたパス・リスト上の次のパスを選択する。次に、プロセスは、（ステップ６４２０において）新しく選択したパスに対する最適な伝搬を識別し、（ステップ６４２２において）任意の必要な仮想ピンを一時的に設定する。
プロセスが、（ステップ６４２４において）選択した経路のすべてのパスをチェックしたと判断した場合には、プロセスは、（ステップ６４２６において）選択したツリーの全コストを、そのネットに対して設定された１つのピンを持つ各子スロット内の経路のコストだけ増大する。ステップ６４２６において、プロセスは、また、選択した経路の全コストを記憶する。解プロセス５３００は、そのＬＰ問題を定式化するために、各ツリーの全コストを使用する。
【０１０６】
ステップ６４２８において、プロセスは、ステップ６４０２において選択したネットに対するすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、このネットに対する次の経路のコストを計算するために、ステップ６４０４に進む。プロセスが、（ステップ６４２８において）ステップ６４０２において選択したネットに対するすべての経路をチェックしたと判断した場合には、プロセスは、（ステップ６４３０において）現在のスロット内のすべてのネットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ６４０２に戻り、現在のスロット内の他のネットを選択し、このネットの経路のコスト計算をするために以降の動作を実行する。プロセスが、（ステップ６４３０において）現在のスロット内のすべてのネットをチェックしたと判断した場合には、コスト計算プロセス６４００は終了する。
通常の当業者であれば、他の実施形態も、プロセス６４００とは異なる方法で、ある経路のワイヤ長さコストを計算することを理解することができるだろう。例えば、プロセス６４００は、現在の再帰レベルまたはその１つ下の再帰レベルで、ワイヤ長さコストを計算することにより、このコストを計算する。一方、他の実施形態は、現在の再帰レベルからリーフ・レベルのスロットまで下に向かってワイヤ長さコストを計算することによりこのコストを計算することができる。そうするために、いくつかの実施形態は、現在の再帰レベルでパス・コストを計算する再帰プロセスを使用し、その後で、Ｇｃｅｌｌでない各子スロットに対する（すなわち、リーフレベルのスロットの子ではない各子スロットに対する）ワイヤ長さコストを計算するために、コスト計算プロセスを呼び出す。
【０１０７】
４．ＬＰ問題の定式化およびソルバー
ソルバーが、現在のスロット内のネットの経路にワイヤ長さコストを割り当てた後で、ソルバーは、（ステップ５３２０において）ＬＰソルバー３９４５に対するＬＰ問題を定式化する。次に、ＬＰソルバーは、（ステップ５３２５において）このＬＰ問題を解く。ＬＰ問題定式化の際の基本的な変数は、現在のスロット内のネットに対する経路である。各ツリーは、下式、すなわち、「ｘＮ＿Ｃ」により表される。ここで、「ｘ」は、文字定数であり、「Ｎ」は、ネット数であり、「＿」は、文字定数であり、「Ｃ」は、そのネットに対するツリーのリスト内のそのツリーを識別する数字である。例えば、Ｘ２６＿１４は、ネット２６の１４番目のツリーを表す。
いくつかの実施形態の場合には、ＬＰソルバーがチェックした各ＬＰ解は、各ツリー変数ｘＮ＿Ｃに対する実数の値を含む。ＬＰソルバーのタスクは、多数の制約を満足させる一方で、１つまたはそれ以上の目的関数を最小にするＬＰ解を識別することである。より詳細に説明すると、それが指定のＬＰ問題の１つまたは複数の制約を満足させる場合には、１つの解は、１つの変数ＬＰ解だけである。ＬＰソルバーのタスクは、目的関数を最小にする変数ＬＰ解（すなわち、指定の制約を満足させる解）を識別することである。すなわち、一組の解から、ＬＰソルバーは、最善の目的関数値を与える変数ＬＰ解を識別することである。
いくつかの実施形態は、ＬＰソルバー３９４５として、（ドイツ語で）「Ｐａｒａｌｌｅｌｅｒ  ｕｎｄ  Ｏｂｊｅｋｔｏｒｉｅｎｔｉｅｒｔｅｒ  Ｓｉｍｐｌｅｘ−Ａｌｇｏｒｉｔｈｍｕｓ」という名称の、ＰｈＤ．論文の一部として、Ｒｏｌａｎｄ  Ｗｕｎｄｅｒｌｉｎｇ（非特許文献２）が実行した、「ＳｏＰｌｅｘ」ソルバーを使用する。このソルバーに関する情報は、下記のウェブサイト、すなわち、
ｈｔｔｐ：／／ｗｗｗ．ｚｉｂ．ｄｅ／Ｏｐｔｉｍｉｚａｔｉｏｎ／Ｓｏｆｔｗａｒｅ／Ｓｏｐｌｅｘで入手することができる。
【０１０８】
ａ．目的関数
異なる実施形態は、異なる目的関数を使用している。例えば、いくつかの実施形態は、（１）全長を最も短くするための、（２）４２すべてのパスを横切る最短の余裕を最大にするための、（３）全体の余裕を最大にするための、（４）任意の個々のパスの最大使用を最小にするための目的関数を使用することができる。しかし、以下に説明する実施形態は、下記の目的関数を最も小さくするＬＰ解を発見しようとする。
【０１０９】
【数１】
2005506588.tif 000004
【０１１０】
最小余裕の表記は、ＬＰ定式化の際に２つの例内で使用される。第１の例の場合には、変数Ｍｉｎ＿Ｓｌａｃｋは、集中を定量化するための目的関数の１つの構成要素として使用される（すなわち、目的関数内の集中の表示としての働きをする）。第２の例の場合、定数ｍｉｎＳｌａｃｋは、４２すべてのパスを横切って許容される最小の余裕を指定するために使用される。
パスの余裕は、特定の解に対するすべての集中（すなわち、閉鎖および、ワイヤの流れ）を計上した後のあるパスの残りの容量である。負の余裕は、あるパスが過度に集中していることを意味する。目的関数を最も小さくすると、負の最小の余裕が最も小さくなり、それにより、最小の余裕が最大になる。通常の当業者であれば、他の実施形態は、目的関数内で他の集中表示を使用することができることを理解することができるだろう。
【０１１１】
いくつかの実施形態の場合には、全ワイヤ長さおよび全バイア数に対する加重係数ＡおよびＢは、相互に等しく設定され、これら両方の係数は、最小の余裕に対する加重係数Ｃよりも大きい。すなわち、これらの実施形態は、ワイヤ長さおよび、バイア数の方向に目的関数を加重し、その結果、Ｍｉｎ＿Ｓｌａｃｋ構成要素は、ワイヤ長さおよびバイア数が２つのＬＰ解を区別できない場合だけ異なるものになる。これらの実施形態は、もっと短い全ワイヤ長さおよびもっと小さなバイア数になる解を選択するために、目的関数内のワイヤ長さおよびバイア数を使用する。
他の実施形態は、異なる方法で、目的関数を加重する。例えば、ＶＩ．Ｅ．４ｃ節に記載するＬＰ定式化は、定式化したＬＰ問題を解くためのＬＰソルバーの最初の試みに対してだけ、ワイヤ長さパラメータおよびバイア数パラメータの方向に目的関数を加重する。ＬＰソルバーが、その最初の反復で定式化した問題を解くことができない場合（すなわち、ＬＰソルバーが制約に適合する解を発見できなかった場合）、Ｍｉｎ＿Ｓｌａｃｋ構成要素が、目的関数で主要な構成要素になるように、ＬＰ問題は再度定式化される。より詳細に説明すると、ＬＰソルバーの最初の反復に対して、下記の定式化は、全ワイヤ長さおよび全バイア数に対する加重係数ＡおよびＢを相互に等しく設定し、これらの両方の係数は、Ｍｉｎ＿Ｓｌａｃｋに対する加重係数Ｃより大きい。ＬＰソルバーがその最初の反復でＬＰ問題を解かなかった場合には、目的関数の主要なパラメータがＭｉｎ＿Ｓｌａｃｋになるように、加重係数Ａ、Ｂおよび／またはＣが変更される。
上式（Ｇ）が示すように、全ワイヤ長さは、ステップ５３１５において計算した各ツリーのコストにより計算される。また、上式（Ｈ）に示すように、全バイア数は、各ツリーに対するバイアの数により計算される。バイアは、２つの隣接金属層上に位置する経路の２つの部分を接続するために必要な接続部である。
【０１１２】
図３の八角配線モデルの場合には、層とルーティング方向との間に１：１のマッピングが存在する。このマッピングは、各経路に対するバイアの数を容易に計算するために使用される。それ故、バイアの数は、経路を通り、（１）経路の方向の変更、および、（２）もしある場合は、子スロット内のピンの層とパスとの間の違いを収容するために必要なバイアの数を識別することによりカウントすることができる。
子スロット内の１つのピンと子スロットに入るパスとの間の層の差を考慮に入れるために、ピンの層を識別しなければならない。異なる実施形態は、異なる方法で、実際のピン（すなわち、仮想でないピン）の層を識別する。例えば、いくつかの実施形態は、すべての実際のピンは層２上に位置すると仮定する。他のいくつかの実施形態は、１つのピンの実際の層を識別する。すでに説明したように、いくつかの実施形態は、ピンの層を、ピン・データ構造体４３００内に記憶しているピン位置の一部として記憶する。一方、他のいくつかの実施形態は、ピンの層をスロット−データ構造体が参照する回路マクロと一緒に記憶しているピン・マクロの一部として記憶する。いくつかの実施形態は、それに対して仮想ピンが設定された伝搬パスの層と一致させるために、仮想ピン（すなわち、下位のレベルの子スロットへの経路の伝搬に対応するように設定されているピン）の層を定義する。
【０１１３】
図６６および図６７は、バイアの数をカウントするための１つの方法を概念的に示す２つの例である。これらの例の場合、配線モデルは下記の通りである。層２は垂直方向、層３は水平方向、層４は＋４５度方向、および層５は−４５度方向である。図６６および図６７は、子スロット０および９を接続するための２つの経路を示す。これら両方の図においては、子スロット０は、スロット６６００への＋４５度のパスの伝搬に対応するように設定された仮想ピン６６０５を含む。それ故、仮想ピン６６０５は、第４の金属層（すなわち、＋４５度配線に対する金属層）上に位置するといわれる。また、子スロット９は層２上に位置する実際のピンを含む。
図６６の経路６６１０は、２つのバイアを必要とする。この数は、子スロット０からカウントすることができる。このスロットは、第４の層内に１つの仮想ピンを持つ。パスＰ２４は、このスロット上に入り、第４の層を通る。それ故、ピン６６０５の層およびパスＰ２４間の違いに対応するためにバイアは必要ではない。パスＰ２４も子スロット５に入る。子スロット５は、ピンは持っていないが、それに入るパスＰ１７を持つ。パスＰ２４は、第４の層上に位置し、パスＰ１７は第２の層上に位置しているので、子スロット５内のパス方向の変化に対応するために２つのバイアが必要である。パスＰ１７も、子スロット９に入る。スロット９は、それに入る他のパスを持たないが、層２の上に実際のピン６６１５を持つ。パスＰ１７とピン６６１５が両方とも層２上に位置する場合には、ピン６６１５およびパスＰ１７を接続するのにバイアは必要としない。
【０１１４】
図６７の経路６７０５は、６つのバイアを必要とする。この数は、子スロット０からカウントすることができる。このスロットは、第４の層内に１つの仮想ピンを持つ。パスＰ１２は、このスロットに接続し、第２の層を通る。それ故、ピン６６０５およびパスＰ１２間の違いに対応するために２つのバイアが必要である。パスＰ１２も、子スロット４に入る。子スロット４は、ピンを持っていないが、それに入るパスＰ３０を持つ。パスＰ３０は、第４の層上に位置し、パスＰ１２は第２の層上に位置しているので、子スロット４内のパス方向の変化に対応するために２つのバイアが必要である。パスＰ３０も、子スロット９に入る。スロット９は、それに入る他のパスを持たないが、層２の上に実際のピン６６１５を持つ。それ故、ピン６６１５の層およびパスＰ３０の層の間の違いに対応するために２つのバイアが必要である。要するに、経路６７０５に対しては、６つのバイアが必要である。図６６および図６７の例を見れば分かるとおり、バイアの数は、同じ長さを持つ２つの経路を識別するための有用な表示である。
また、いくつかの実施形態は、ＬＰ定式化５３２０中に、各経路に対するバイアの数を計算する。ＶＩ．Ｅ．４．ｃ節内のＬＰ定式化は、そのような一実施形態である。しかし、他の実施形態は、ステップ５３１５においてステップ５３２０の前に経路のワイヤ長さコストを計算したように、ステップ５３２０の前に各経路に対するバイアの数をカウントする。別な方法としては、いくつかの実施形態は、ＬＰ定式化５３２０中に各経路のワイヤ長さコストを計算することができる。
【０１１５】
図６８〜図７０は、ある経路内のバイアの数を計算するために、一緒に作業する３つのプロセスである。図６８のプロセス６８００は、あるツリーに対するバイア数を計算するために呼び出される度にスタートする。このプロセスは、最初に、（ステップ６８０５において）（現在解かれているスロットの）すべてのスロットをチェックしなかったスロットとして初期化する。
ステップ６８１０において、プロセス６８００は、それに入る経路のただ１つのパスを持つスロットを選択し、このスロットを現在のスロットとして定義する。このプロセスは、（ステップ６８１５において）図６９のプロセス６９００を呼び出し、このプロセスに現在のスロットを供給する。プロセス６９００が返送する値は、バイアの全数である。呼出しプロセス６９００の後で、プロセス６８００は終了する。
プロセス６９００は、再帰的プロセスである。このプロセスは、最初に、（ステップ６９０５において）現在のスロットのバイアの数を計算する。いくつかの実施形態の場合には、プロセス６９００は、図７０のプロセス７０００を呼び出すことによりこの数を計算する。プロセス７０００は、現在のスロットに入るすべての経路のパスを、（ステップ７００５において）識別することによりスタートする。次に、プロセス７０００は、（ステップ７０１０において）現在のスロット内のすべての実際のピンおよび仮想ピンを識別する。
次に、プロセス７０００は、（ステップ７０１５において）ステップ７００５において識別した各経路のパス、およびステップ７０１０において識別した各ピンの層を識別する。各パスの層は、図３の八角配線モデルを使用した場合には、パスの方向のタイプとその層との間に１：１のマッピングが存在するので、容易に識別することができる。例えば、いくつかの実施形態は、層２に対して垂直パスをマッピングし、層３に対して水平パスをマッピングし、層４に対して＋４５度のパスをマッピングし、層５に対して−４５度のパスをマッピングする。また、すでに説明したように、いくつかの実施形態は、すべての実際のピンは層２上に位置するものと仮定し、一方、他のいくつかの実施形態は、記憶している１つのピンの実際の層を識別する。さらに、いくつかの実施形態は、仮想ピンが設定された伝搬パスの層と一致させるために、仮想ピン（すなわち、下位のレベルの子スロットへの経路の伝搬に対応するように設定されるピン）の層を定義する。
【０１１６】
ピンおよびパスの層を識別した後で、プロセス７０００は、（ステップ７０２０において）ステップ７０１５において識別した最大層と最小層との間の違いを決定する。この違いは、その経路が現在のスロット内で必要とするバイアの最小数の推定値を表す。現在のスロットが、もっと小さなスロットに分割されている場合には、もっと小さいスロット内および／または間の現在の経路に対する最も低いレベルの経路を定義するために、追加のバイアが必要になる場合がある。いくつかの実施形態は、（１）ある数のピンおよびパスを有するスロット内の経路を定義するために必要なバイアの数を推定するために、統計的な調査を行うことができ、次に、（２）現在のスロット内で必要なバイアの数のもっと精度の高い推定値を入手するために、この統計的な調査の結果を使用することができる。ステップ７０２５において、プロセス７０００は、スロット内のバイアの数を返送し、終了する。
プロセス７０００が、スロット内のバイアの数を返送すると、プロセス６９００は、（ステップ６９１０において）現在のスロットにチェック済みというマークを付ける。次に、プロセス６９００は、（ステップ６９１５において）現在のスロットに入る現在の経路のパスの中の１つを選択する。次に、ステップ６９２０において、このプロセスは、ステップ６９１５において選択したパスが接続している他のスロットを識別する。ステップ６９２５において、プロセスは、ステップ６９２０において識別したスロットを、チェックしたかどうかを判断する（すなわち、このスロットにチェック済みのマークが付いているかどうかをチェックする）。チェックしていなかった場合には、プロセス６９００は、ステップ６９３０において、再帰的に自分自身を呼び出す。この再帰的呼出しは、ステップ６９２０において識別したスロットを、ステップ６９３０において、再帰的にスタートするプロセスに対する現在のスロットとして指定する。ステップ６９３０において、プロセス６９００は、バイアの数を、再帰的に呼び出したプロセスが返送する値だけ増大する。
【０１１７】
ステップ６９３０から、プロセス６９００はステップ６９３５に進む。このプロセスは、また、（ステップ６９２５において）ステップ６９２０において識別した他のスロットを前にチェックしたと判断した場合には、ステップ６９３５に進む。ステップ６９３５において、プロセス６９００は、現在のスロットに入る他の経路が存在するかどうかを判断する。存在する場合には、プロセス６９００はステップ６９１５に戻り、他の入るパスを選択する。存在しない場合には、プロセス６９００は、バイアの計算した数を返送する。
上式（Ｈ）に示すように、目的関数の全バイア数は、各ツリーに対するバイアの数に依存するばかりでなく、ワイヤ長さに対するその重要性を反映するために、バイアの数を調整する変換係数にも依存する。この変換係数は、下式（Ｉ）に示すように、ワイヤ長さコストおよびバイア・コストをトラックの数に正規化することにより入手することができる。
Ｘ＝５０＊５／Ｎ                        （Ｉ）
この式中、Ｘは変換係数であり、５はマンハッタン・パスのコストであり、Ｎは現在の再帰レベルにおけるマンハッタン・パス当りのトラックの数であり、５０はバイアの使用に関連するペナルティ・コストである。このペナルティは、ルータがバイアを使用しないで、迂回路を使用するトラックの数により測定される。いくつかの実施形態の場合には、設計者は、このペナルティ・コストを修正することができる。また、いくつかの実施形態の場合には、各マンハッタン・パスは、Ｇｃｅｌｌレベルでの８トラックを表す（すなわち、Ｇｃｅｌｌレベルにおいては、Ｎ＝８である）。また、各階層のルーティング・レベルの変換係数Ｘは異なる。何故なら、Ｎは各レベルに対して異なるからである。
【０１１８】
ｂ．制約
異なる実施形態は、異なる制約を定義する。下記のＬＰ定式化を使用する実施形態は、３つの制約を定義する。第１の制約は、各ネットＮに対するものであり、ＬＰソルバーは、ネットＮに対する選択の組から１つのツリーだけを選択する。これは、下式に示すように、そのネットに対するツリー変数の値の合計に対する制約として表される（すなわち、これらの値の合計は１でなければならない）。
ｎｅｔＮ：ｘＮ＿Ａ＋ｘＮ＿Ｂ＋．．．ｘＮ＿Ｑ＝１
ＬＰソルバーは、各経路変数に対して０と１の間の値を割り当てる。「１」は、そのツリーの明確な選択を表し、「０」は、そのツリーの明確な拒否を表す。０と１の間の値は、ソルバーが、ランダム化四捨五入により決定する必要がある一組の選択を指定したことを意味する。いくつかの実施形態は、制約として、しかし、むしろ各ネットに対するＬＰ解の候補を生成するための関係として、各ネットに対して１つのツリーだけを選択する必要性を表明しないこともできる。
第２の制約は、現在のスロット内のパスの集中に関する。いくつかの実施形態の場合には、ｍｉｎＳｌａｃｋは、指定の量よりも大きくなければならない。すでに説明したように、ｍｉｎＳｌａｃｋは、すべてのパスを横切る許容できる最小の余裕である。各パス内の余裕は、そのパスの容量から、そのパスを横切るワイヤの流れおよび閉鎖を引いたものである。ＬＰソルバーの最初の反復に対して、いくつかの実施形態は、ｍｉｎＳｌａｃｋはゼロまたはゼロより大きくなければならないと指定する。ＬＰソルバーが、その最初の反復で定式化した問題を解くことができない場合、いくつかの実施形態は、制約としての最小の余裕を除去するために、ｍｉｎＳｌａｃｋが大きな負の数になるようにＬＰ問題を再度定式化する。しかし、すでに説明したように、いくつかの実施形態の場合には、この再定式化により、目的関数のＭｉｎ＿Ｓｌａｃｋ構成要素は、この関数の主要な構成要素になる。
第３の制約は、ある領域の容量を、これらの領域を通ることができるパスの間で正しく共有しなければならないことである。例えば、図６１、図６２および図６３のモデルの場合には、対角線パスおよびマンハッタン・パスは、重なり合っている対角線領域の容量を正しく共有しなければならない。何故なら、ソルバーが、グローバル・ルーティング結果を生じるグローバル・ルータの一部である場合には、そのグローバル・ルーティング出力を、詳細なルータが使用することができる境界ピン割当てに変換しなければならないからである。
【０１１９】
図７１および図７２は、Ｇｃｅｌｌレベルで制約をこのように共有する必要性を示す。Ｇｃｅｌｌレベルにおいては、いくつかの実施形態は、８トラック幅になるＧｃｅｌｌ間を横切るマンハッタン・パスの容量を定義する。図７１は、縁部Ｅ１１を横切る８つのこのようなトラックを示す。また、いくつかの実施形態は、対角線層上のピッチは、マンハッタン層上のピッチと同じであると仮定し、それ故、対角線パスの容量は、マンハッタン・パスの容量の２倍の単なる平方根であると仮定する。このような仮定の下で、上記Ｇｃｅｌｌを横切る対角線パスの容量は１１トラックである。図７１は、パスＰ３２の１１トラック幅の容量を示す。
垂直方向または水平方向に隣接する対角線パスは、重なり合っているルーティング領域を持つ。例えば、図７２は、共有対角線領域７２０５の容量（すなわち、５つの対角線トラック）を共有する２本の垂直方向に隣接する対角線パスＰ３２およびＰ２６を示す。対角線領域７２０５の５つの対角線トラックも、この領域を横切るマンハッタン・パスＰ４と一緒に共有されている。何故なら、図６１のモデルの場合には、マンハッタン・パスは、マンハッタン方向ばかりではなく、対角線方向にも２つのスロット間を通ることができるからである。
対角線領域の共有容量に対応するために、下記のＬＰ定式化は、３組の制約を定義する。この場合、各組は、２つの制約、すなわち、＋４５度のパスに対する制約、および−４５度のパスに対する制約を持つ。これら３組の制約は、（１）対角線方向のペアの制約、（２）混合した３組の制約、（３）対角線方向の３組の制約である。以下の説明において、＋４５度のパスは東のパスと呼ばれ、一方、−４５度のパスは西のパスと呼ばれる。
【０１２０】
図７３は、第１のタイプの制約、すなわち、対角線方向のペアの制約を示す。この図は、パスＰ２７およびＰ３６について定義した８つの制約された対角線のペアを示す。これらの中の２つは、水平方向に隣接する東のパスＰ３６およびＰ３８を含む７３０５、および垂直方向に隣接する西のパスＰ２７およびＰ３３を含む７３１０である。
対角線のペアの制約は、そのペアの対角線パスの一方が、現在のスロットの周辺上に位置しているかいないかにより、内部制約または周辺制約として分類することができる。より詳細に説明すると、両方のペア７３０５および７３１０は、内部の対角線ペアである。内部の対角線ペアは、水平方向または垂直方向に隣接していて、一組の東のパスＰ２４、Ｐ２６、Ｐ２８、Ｐ３０、Ｐ３２、Ｐ３４、Ｐ３６、Ｐ３８およびＰ４０、または一組の西のパスＰ２５、Ｐ２７、Ｐ２９、Ｐ３１、Ｐ３３、Ｐ３５、Ｐ５３、Ｐ３９およびＰ４１からの２本の対角線パスを含む。図７３の３つの他の内部の制約された対角線ペアは、（１）パス３６およびＰ３０を含むペア７３１５、（２）パスＰ２７およびＰ２５を含むペア７３２０、（３）パスＰ２７およびＰ２９を含むペア７３２５である。
図７３は、また、３つの制約された周辺の対角線ペアを含む。周辺対角線ペアは、２つの水平方向または垂直方向に隣接する対角線ペアを含む。この場合、（１）両方の対角線ペアは、東のパスまたは西のパスであり、（２）これらのパスの一方は、内部パスＰ２４〜Ｐ４１の中の１つであり、他のパスはスロットの周縁部上に位置する。図７３の３つの制約された周辺対角線ペアは、（１）パスＰ３６および７３３５を含むペア７３３０、（２）パスＰ３６および７３４５を含むペア７３４０、（３）パスＰ２７および７３５５を含むペア７３５０である。
制約された各対角線ペアの２つのパスは、いくつかのトラックを共有する（すなわち、１つのパスで表すいくつかのトラックは、他のパスが表すいくつかのトラックと同じものである）。それ故、いくつかの実施形態は、この共有に対応するために制約された各対角線ペアのところの集中を制約する。
【０１２１】
例えば、いくつかの実施形態は、そのペアの２本のパスがそのトラックの約半分を共有している場合には、そのペアの各パスの容量の１．５倍である内部対角線ペアのところの集中を制約する。例を挙げて説明すると、２つの内部対角線ペアＰ３６およびＰ３８が、それぞれ、１１トラック幅であり、相互に５トラックを共有している場合には、いくつかの実施形態は、これらのパスのところの集中が、最大１６トラックを占める制約を指定する（すなわち、Ｐ３６を横切るワイヤの流れにＰ３８を横切るワイヤの流れを加え、さらに最大で１６トラックを占める任意の閉鎖を加えたものを指定する）。
いくつかの実施形態は、また、そのペアの２つのパスがトラックの約半分を共有している場合には、内部対角線ペアの容量の１．５倍である周辺対角線ペアのところで集中（すなわち、全ワイヤの流れおよび閉鎖）している。例えば、いくつかの実施形態の場合には、周辺対角線ペア７３３０内のパスは、Ｇｃｅｌｌレベルで、それぞれ１１トラック幅を持つ。このレベルにおいて、これらのパスは、相互に５トラックを共有する。それ故、Ｇｃｅｌｌレベルに対して、いくつかの実施形態は、これらのパスのところの集中は、１６トラックまたはそれ以下に違いないことを指定する（すなわち、Ｐ３６を横切るワイヤの流れに７３３５を横切るワイヤの流れを加え、さらに最大で１６トラックを占める任意の閉鎖を加えたものを指定する）。
そのペアの両方の対角線パスのところの集中を計算するのにＬＰソルバーを必要とする内部対角線ペア制約とは異なり、周辺対角線ペア制約は、ＬＰ解に対する周辺ペアの内部対角線パスのところの集中を計算するのに、ＬＰソルバーを必要とするだけである。何故なら、周辺対角線ペアの周辺パスのところの集中は、現在の解動作の前の伝搬動作中に計算されるからである。
例えば、周辺対角線ペア７３３０に対する周辺パス７３３５のところの集中は、スロット７３６０に入るマンハッタン・パスまたは対角線パス、またはスロット７３６０に隣接しているスロットに入る対角線パスが、スロット７３６０の子スロット７３６５内にまで伝搬する場合にはすでに計算済みである。いくつかの実施形態は、第１の親スロットの子スロットと第１の親スロットに隣接している第２の親スロットの子スロットとの間の伝搬したパスの容量の記録を維持する。いくつかの実施形態は、（１）隣接する親スロットの隣接する子スロットに対するスロット・ペア記録を生成することにより、（２）スロット・ペア記録内に２つの隣接する子スロットの識別を記憶することにより、（３）２つの子スロット間の伝搬した周辺パスの容量を表す容量フィールドを初期化することにより、（４）この容量を使用および閉鎖に対して増大することにより上記記録を維持する。次に、これらの実施形態は、この容量を記憶しているスロット・ペア記録を検索することにより各周辺パスの容量を識別する。いくつかの実施形態は、周辺パスが入る２つの子スロット（すなわち、現在のスロットの子スロット、および隣接するスロットの子スロット）を識別することによりスロット・ペア記録を検索する。
【０１２２】
図７４は、第２のタイプの制約、すなわち、混合した３組の制約を示す。この制約は、混合した３組の制約が，隣接する同じ線上にある対角線パスのペアのところの集中に、対角線ペア間のマンハッタン・パスを加えたものを制約するという点を除けば、第１のタイプの制約に類似している。
図７４は、８つの制約された混合の３個一組、すなわち、パスＰ３６を含む４つの３個一組およびパスＰ２７を含む４つの３個一組を示す。対角線ペア制約のように、混合した３個一組制約は、３個一組の対角線パスの中の１つが、現在のスロットの周辺上に位置するかしないかにより、内部制約または周辺制約として分類することができる。
図７４のパスＰ３６のところの４つの制約された混合３個一組は、（１）パスＰ２１、Ｐ３６およびＰ３８を含む内部混合３個一組７４０５、（２）パスＰ９、Ｐ３６および７４４５を含む周辺３個一組７４１０、（３）パスＰ２０、Ｐ３６および７４５５を含む周辺３個一組７４１５、（４）パスＰ６、Ｐ３６およびＰ３０を含む内部混合３個一組７４２０である。
図７４のパスＰ２７のところの４つの制約された混合３個一組は、（１）パスＰ１４、Ｐ２７およびＰ２９を含む内部混合３個一組７４２５、（２）パスＰ４、Ｐ２７および７４３３を含む内部３個一組７４３０、（３）パスＰ１３、Ｐ２７およびＰ２５を含む内部３個一組７４３５、（４）パスＰ１、Ｐ２７および７４５０を含む内部混合３個一組７４４０である。
制約された各混合３個一組内の３つのパスは、いくつかのトラックを共有する。例えば、図６２および図６３の対角線ワイヤ・モデル表現の場合には、対角線パスの中の１つが表すいくつかのトラックは、他の対角線パスが表すいくつかのトラックと同じものである。また、図６１のマンハッタン・ワイヤ・モデル表現の場合には、マンハッタン・パスを、マンハッタン・パスに隣接する対角線パスと同じトラックに対して競合するいくつかの対角線パスを通して下位のレベルの子スロットに伝搬させることができる。それ故、いくつかの実施形態は、この共有に対応するために、制約された各混合３個一組のところの集中を制約する。
【０１２３】
例えば、ペアの２本の対角線パスがトラックの約半分を共有する場合には、いくつかの実施形態は、内部混合３個一組のところの集中を、３個一組の対角線パスのうちの１つの容量にマンハッタン方向だけのマンハッタン・パスの容量を加えたものの１．５倍になるように制約する。例えば、Ｇｃｅｌｌレベルにおいては、２本の内部対角線パスＰ３６およびＰ３８は、それぞれ、１１トラック幅であり、相互に５トラックを共有する。一方、マンハッタン・パスＰ２１は、マンハッタン方向では８トラック幅であり、東の方向では５トラック幅である（すなわち、パスＰ２１は、配線の垂直層上の８トラックを使用することができ、東の層の配線内では５トラックを使用することができる）。それ故、Ｇｃｅｌｌレベルにおいては、これらの実施形態の中のあるものは、パスＰ２１、Ｐ３６およびＰ３８のところの集中（すなわち、ワイヤの流れに閉鎖を加えたもの）は、最大で２４トラック（すなわち、１６の使用できる東のトラックに８つの使用できる垂直トラックを加えたもの）を占めるに違いないという３個一組制約を指定する。
他の実施形態は、そのペアの２本の対角線パスがトラックの約半分を共有する場合には、内部混合３個一組の集中を、３個一組内の対角線パスの中の１つの容量にマンハッタン方向および対向対角線方向のマンハッタン・パスの容量を加えたものの１．５倍になるように制約する。それ故、（リーフ・スロット・レベルにおいて、２本の内部対角線パスＰ３６およびＰ３８が、それぞれ、１１トラック幅であり、相互に５トラックを共有し、一方、マンハッタン・パスＰ２１が、マンハッタン方向で８トラック幅であり、東の方向で５トラック幅であり、西の方向で５トラック幅である）上記例に対して、これらの実施形態のうちのあるものは、パスＰ２１、Ｐ３６およびＰ３８のところの集中が、最大で２９トラック（すなわち、１６の使用できる東のトラックに８つの使用できる垂直トラックを加え、さらに５つの使用できる西のトラックを加えたもの）を占めるに違いないという３個一組制約を指定する。
さらに、前の伝搬動作中の３個一組の周辺パスのところの集中の計算を除けば、周辺対角線ペア制約のように、周辺混合３個一組制約は、いくつかの実施形態の内部制約のように分析される。すなわち、内部混合３個一組制約は、３個一組対角線パスおよびＬＰ解に対するマンハッタン・パスのところの集中を計算するために、ＬＰソルバーを必要とする。周辺混合３個一組制約は、３個一組の内部対角線パスおよびＬＰ解に対するマンハッタン・パスのところの集中を計算するためだけにＬＰソルバーを必要とする。ＬＰソルバーは、周辺パスが通る２つの子スロットに対するスロット・ペア記録から周辺パスのところの集中を検索することができる。
【０１２４】
図７５は、第３のタイプの制約、すなわち、対角線３個一組制約を示す。この制約は、対角線３個一組制約が、２本ではなく、３本の同じ直線上の対角線パスのところの集中を制約する点を除けば、第１のタイプの制約、すなわち、対角線ペア制約に類似している。図７５は、４つの制約された対角線３個一組、すなわち、パスＰ３６を含む２つの対角線３個一組、およびパスＰ２７を含む２つの対角線３個一組を示す。
対角線ペア制約のように、対角線３個一組制約は、３個一組の対角線パスの中の１つが、現在のスロットの周辺上に位置しているかいないかにより、内部制約または周辺制約として分類することができる。図７５の４つの制約された対角線３個一組は、（１）パスＰ３６、Ｐ３８および７５３０を含む周辺対角線３個一組７５０５、（２）パスＰ３０、Ｐ３６および７５２５を含む周辺対角線３個一組７５１０、（３）パスＰ２５、Ｐ２７およびＰ２９を含む内部対角線３個一組７５１５、（４）パスＰ２７、Ｐ３３および７５３５を含む周辺対角線３個一組７５２０である。
図６２および図６３の対角線ワイヤ・モデル表現の場合には、３個一組の中央のパスが、他の２つの対角線パスといくつかのトラックを共有する。それ故、いくつかの実施形態は、この共有に対応するために、制約された各対角線３個一組のところの集中を制約する。
３個一組内の中央の対角線パスが、他の対角線パスの中の１つとそのトラックの約半分を共有し、他の対角線パスの他の半分を共有している場合には、いくつかの実施形態は、対角線３個一組のところの集中を、３個一組内の対角線パスの中の１つの容量の２．０倍になるように制約する。例えば、Ｇｃｅｌｌレベルのある実施形態の場合には、各対角線パスは、１１トラック幅で、隣接する同一直線上に位置する各対角線パスと５トラックを共有する。それ故、Ｇｃｅｌｌレベルに対して、いくつかの実施形態は、３個一組内の３つの対角線パス（例えば、パスＰ２５、Ｐ２７およびＰ２９）のところの集中（すなわち、ワイヤの流れに閉鎖を加えたもの）が、最大で２２トラックを占めることになる３個一組制約を指定する。
【０１２５】
さらに、周辺対角線ペア制約および混合３個一組制約のように、前の伝搬動作中の３個一組の周辺パスのところの集中の計算を除けば、周辺対角線３個一組制約は、いくつかの実施形態の内部制約のように分析される。より詳細に説明すると、内部対角線３個一組制約は、３個一組のすべての対角線パスのところの集中を計算するためにＬＰソルバーを必要とする。一方、周辺対角線３個一組制約は、３個一組の内部対角線パスのところの集中を計算するためだけにＬＰソルバーを必要とする。ＬＰソルバーは、周辺パスが通る２つの子スロットに対するスロット・ペア記録から周辺対角線パスのところの集中を検索することができる。
当業者であれば、他の実施形態も、他の制約を定義することができることを理解することができるだろう。例えば、いくつかの実施形態は、マンハッタン・パスおよび２つの組の隣接する同一直線上に位置する対角線パスのところの集中を制約する混合５個一組制約を定義することができる。このような１つの５個一組は、垂直パスＰ１３、−４５度対角線パスＰ２５およびＰ２７、および＋４５度対角線パスＰ２４およびＰ２６を含む。
各５個一組のマンハッタン・パスは、５個一組の対角線パスといくつかのトラックを共有する。さらに、平行な各対角線ペアのパスは、いくつかのトラックを共有する。それ故、各ペアの２つの対角線パスが、トラックの約半分を共有している場合には、いくつかの実施形態は、混合５個一組のところの集中を、５個一組の対角線パスのうちの１つの容量にマンハッタン方向だけのマンハッタン・パスの容量を加えたものの約３．０倍になるように制約する。例えば、リーフ・スロット・レベルのいくつかの実施形態の場合には、各対角線パスは、１１トラック幅で、その隣接する同一直線上に位置する対角線パスと５トラックを共有し、一方、各マンハッタン・パスは、８トラック幅でマンハッタン方向を向いている。それ故、Ｇｃｅｌｌレベルにおいて、これらの実施形態のうちのあるものは、５個一組のところの集中が、最大で４０トラックまたは４１トラックを占めることになり、平行な各対角線ペアのところの容量が頭を切られているかいないかにより異なる５個一組制約を指定する。
【０１２６】
ｃ．定式化
いくつかの実施形態の場合には、ソルバー３９３０は、上記目的関数および制約に基づいてＬＰ問題を定式化する。これらの実施形態のうちのあるものにおいては、ＬＰ問題の定式化は下記の通りである。
［ｐｒｅｐＳｏｌｖｅｒＩＬＰ（スロット）］
−  変数ｍｉｎＳｌａｃｋを０に初期化する／／パスを過度に制約してはならない
−  変数ｌｅｎＡｎｄＶｉａＷｅｉｇｈｔを１００に初期化する／／最初、長さおよびバイア・カウントの優先権の方が余裕の最小化の優先権より高い
−  変数ｍｉｎＳｌａｃｋＷｅｉｇｈｔを−１に初期化する
−  一方（！ｄｏｎｅ）
−  ＬＰソルバーを宣言し、初期化する
−  目的行を宣言し、それを「ｏｂｊｅｃｔｉｖｅ」と命名する
−  現在のスロット内のすべてのネットに対する識別したツリーのすべての組を記憶する変数内のネットに対するツリーの識別した各組に対して
−  組が空でない（すなわち、その組がこのスロット内のネットに対するツリーの選択組を含んでいる）場合
−  組内の最初のツリー記録からネット索引Ｎを検索する
−  このネットに対するツリーを１つだけ選択するようにソルバーを制約するために、定数「ｒＮ」を宣言する
−  スロット内の各パスＮに対して
−  このパスの全使用を合計する変数を定義するために、制約「ｕｓａｇｅＮ」を宣言する
−  すべてのパス上に最大余裕値を定義するために、制約「ｅＳｌａｃｋＮ」を宣言する
−  すべてのパス上に最大使用値を定義するために、制約「ｍｘｕｓｅＮ」を宣言する
【０１２７】
−  パスＮがマンハッタン・パスである場合
−  マンハッタン・パスＮおよび隣接するペアの「東」パスの使用の合計を制約するために、制約ｅＭｔｐｌＮを宣言する／／この制約は、パスＮおよびそれに隣接する２つの対角線東パスを含む混合３個一組に対するものである
−  マンハッタン・パスＮおよび隣接する「西」パスの使用の合計を制約するために、制約ｗＭｔｐｌＮを宣言する／／この制約は、パスＮおよびそれに隣接する２つの対角線西パスを含む混合３個一組に対するものである
−  パスＮに隣接する２つの「東」パスの使用の合計を制約するために、制約ｅｐａｉｒＮを宣言する／／この制約は、パスＮに隣接する２つの対角線東パスを含む対角線ペアに対するものである
−パスＮに隣接する２つの「西」パスの使用の合計を制約するために、制約ｗｐａｉｒＮを宣言する／／この制約は、パスＮに隣接する２つの対角線西パスを含む対角線ペアに対するものである
−  パスＮに隣接する２つの「東」パスに、一番下／一番左の隣接する東パスの下または左の３番目の東パスを加えたものの使用の合計を制約するために、制約ｅＤｔｐｌＮを宣言する／／この制約は、パスＮに隣接する２つの対角線東パスに、一番下／一番左の隣接する東パスの下または左の３番目の東パスを加えたものを含む対角線３個一組に対するものである
−  パスＮに隣接する２つの「西」パスに、一番下／一番左の隣接する西パスの下または左の３番目の西パスを加えたものの使用の合計を制約するために、制約ｗＤｔｐｌＮを宣言する／／この制約は、パスＮに隣接する２つの対角線東パスに、一番下／一番左の隣接する西パスの下または左の３番目の西パスを加えたものを含む対角線３個一組制約に対するものである
−  すべてのパスを横切る最小の余裕の値を制限するために、制約「Ｍｉｎ＿Ｓｌａｃｋ」を定義する
−  すべての選択したツリーの長さコストを合計する変数を定義するために、制約「ｔＬｅｎ」を定義する
−  すべてのパスのバイア・コストを合計する変数を定義するために、制約「ｔＶｉａｓ」を定義する
／／この時点で、ＬＰのすべての「行」が宣言される。列に引き続き記入する（すなわち、変数を宣言する）
【０１２８】
−  ツリーの各組に対して、現在のスロット内のすべてのネットに対する複数の組のツリーを記憶する変数ｍ＿ｓｏｌｓ内のネットに対して
−  この組のツリーが属するネットを識別する
−  ツリーの組内の各ツリーに対して
−  変数「ｘＮ＿Ｔ」を生成する。ここで、Ｎはネット索引であり、Ｔはこのツリーを表すためのツリーの序数である
−  制約「ｒｏｗＮ」内の係数１．０と一緒に表示するｘＮ＿Ｔを宣言する
−  ツリーｘＮ＿Ｔのワイヤ長さコストを識別する／／上記プロセス６４００により計算された
−  このツリーを埋設するのに必要なバイアの数「ｎＶｉａｓ」を計算する／／上記のプロセス６８００〜７０００を使用する
−  制約「ｔＬｅｎ」内の係数ｅｓｔＬｅｎと一緒に表示するｘＮ＿Ｔを宣言する
−  制約「ｔＶｉａｓ」内の係数ｎＶｉａｓにＸを掛けたものと一緒に表示するｘＮ＿Ｔを宣言する／／ここで、Ｘは、式（Ｉ）への参照による上記の変換係数である
−  スロット内の各パスＥに対して
−  このツリーがパスＥを使用する場合
−  制約ｕｓａｇｅＥ内に係数−１．０と一緒に表示するｘＮ＿Ｔを宣言する
−  このスロット内の各パスＥに対して
−  変数「ｕＥ」を生成する。ここで、Ｅはパスの整数の識別子である
−  制約「ｕｓａｇｅＥ」内に係数１．０と一緒に表示するｕＥを宣言する
−  制約「ｍｘｕｓｅＥ」内に係数−１．０と一緒に表示するｕＥを宣言する
−  制約「ｅｓｌａｃｋＥ」内に係数１．０と一緒に表示するｕＥを宣言する
−  パスＥがマンハッタン・パスである場合
−  制約「ｅＭｔｐｌＥ」内に係数１．０と一緒に表示するｕＥを宣言する
−  制約「ｗＭｔｐｌＥ」内に係数１．０と一緒に表示するｕＥを宣言する
−  パスＥに隣接する対角線パスの２つのペアを検索する
【０１２９】
−  これらペアの各パスＥに対して
−  パスＡの方向が「東」である場合
−  制約ｅＭｔｐｌＥ内に係数１．０と一緒に表示するｕＡを宣言する
−  制約ｅｐａｉｒＥ内に係数１．０と一緒に表示するｕＡを宣言する
−  パスＡの方向が「西」である場合
−  制約ｗＭｔｐｌＥ内に係数１．０と一緒に表示するｕＡを宣言する
−  制約ｗｐａｉｒＥ内に係数１．０と一緒に表示するｕＡを宣言する
−  パスＥに隣接する対角線パスの３個一組を検索する
−  この３個一組内の各パスＢに対して
−  パスＢの方向が「東」である場合
−  制約ｅＤｔｐｌＥ内に係数１．０と一緒に表示するｕＢを宣言する
−  パスＢの方向が「西」である場合
−  制約ｗＤｔｐｌＥ内に係数１．０と一緒に表示するｕＢを宣言する
−  変数「ｓｌａｃｋ」を生成する
−  制約「Ｍｉｎ＿Ｓｌａｃｋ」内に係数１．０と一緒に表示する余裕を宣言する
−  目的関数内に係数「ｍｉｎＳｌａｃｋＷｅｉｇｈｔ」と一緒に表示する余裕を宣言する
−  このスロット・内の各パスＥに対して
−  制約「ｅｓｌａｃｋＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  パスＥがマンハッタン・パスである場合
−  制約「ｅｐａｉｒＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  制約「ｗｐａｉｒＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  制約「ｅＭｔｐｌＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  制約「ｗＭｔｐｌＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  制約「ｅＤｔｐｌＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  制約「ｗＤｔｐｌＥ」内に係数１．０と一緒に表示する余裕を宣言する
−  変数「ｔＶ」を生成する
−  制約「ｔＶｉａｓ」内に係数１．０と一緒に表示するｔＶを宣言する
−  目的関数内に係数「ｌｅｎＡｎｄＶｉａＷｅｉｇｈｔ」と一緒に表示するｔｃを宣言する
／／ここまで、制約を宣言し、これらの式の左辺に記入してきた。ここからは右辺に記入する
−  変数「ｔＬ」を生成する
−  制約「ｔＬｅｎ」内に係数１．０と一緒に表示するｔｌを宣言する
−  目的関数内に係数「ｌｅｎＡｎｄＶｉａＷｅｉｇｈｔ」と一緒に表示するｔｌを宣言する
／／ここまで、制約を宣言し、これらの式の左辺に記入してきた。ここからは右辺に記入する
【０１３０】
−  現在のスロット内のすべてのネットに対する複数の組のツリーを記憶する変数ｍ＿ｓｏｌｓ内のネットに対するツリーの各組、すなわち、ツリーの組に対して
−  組が空でない（組が、このスロット内のネットに対するツリーの選択組を含んでいる）場合
−  組内の最初のツリー記録からネット索引Ｎを検索する
−  １．０になるように、制約「ｒＮ」のＲＨＳを設定する
−  このスロット内の各パスＥに対して
−  ０．０になるように、制約「ｕｓａｇｅＥ」のｒｈｓを設定する
−  ０．０になるように、制約「ｍｘｕｓｅＥ」のｒｈｓを設定する
−（プロセス５４００が計算した）非閉鎖の推定値から（プロセス５５００が計算した）パス使用の推定値を引くことにより得られる容量の推定値ｃａｐ（Ｅ）を検索する
−  制約「ｅｓｌａｃｋＥ」のｒｈｓをｃａｐ（Ｅ）に設定する
−  パスＥがマンハッタン・パスである場合
−  制約ｅＭｔｐｌＥ、ｃａｐｅＭｔｐｌＥを共有するための容量推定値を計算し、制約ｅＭｔｐｌＥのｒｈｓをこの容量に設定する
−  制約ｗＭｔｐｌＥ、ｃａｐｅＭｔｐｌＥを共有するための容量推定値を計算し、制約ｗＭｔｐｌＥのｒｈｓをこの容量に設定する
−  制約ｅｐａｉｒＥ、ｃａｐｅｐａｉｒＥを共有するための容量推定値を計算し、制約ｅｐａｉｒＥのｒｈｓをこの容量に設定する
−  制約ｗｐａｉｒＥ、ｃａｐｅｐａｉｒＥを共有するための容量推定値を計算し、制約ｗｐａｉｒＥのｒｈｓをこの容量に設定する
−  制約ｅＤｔｐｌＥ、ｃａｐｅＤｔｐｌＥを共有するための容量推定値を計算し、制約ｅＤｔｐｌＥのｒｈｓをこの容量に設定する
−  制約ｗＤｔｐｌＥ、ｃａｐｗＤｔｐｌＥを共有するための容量推定値を計算し、制約ｗＤｔｐｌＥのｒｈｓをこの容量に設定する
−  ０．０になるように、制約「ｔＶｉａｓ」のｒｈｓを設定する
−  ０．０になるように、制約「ｔＬｅｎ」のｒｈｓを設定する
−  変数ｍｉｎＳｌａｃｋになるように、制約「Ｍｉｎ＿Ｓｌａｃｋ」のｒｈｓを設定する
−  ＬＰを解く
−  解がない場合／／最小の余裕に対するハードな制約を除去し、余裕の優先権が長さおよびバイア数の優先権より高くなるように加重を再設定する
−  変数ｍｉｎＳｌａｃｋＷｅｉｇｈｔ＝−５００に設定する
−  変数ｍｉｎＳｌａｃｋ＝−１０００に設定する
−  変数ｌｅｎＡｎｄＶｉａＷｅｉｇｈｔ＝１に設定する
−  解を発見した場合
−  ループから抜け出す
【０１３１】
すでに説明したように、定式化の第３から最後の命令文は、（ステップ５３２５において）ＬＰソルバーに問題を解くように命令している。次に、ＬＰソルバーは、この問題を解こうとする。ＬＰソルバーは、上記ループの最初の反復で、この問題を解くのに失敗した場合には、上記定式化は、最小の余裕がもはや制約の大きな部分ではなくなり、目的関数の主要な構成要素としての働きをするように、いくつかの定数の値を変更する。より詳細に説明すると、定数ｍｉｎＳｌａｃｋＷｅｉｇｈｔ、ｍｉｎＳｌａｃｋ、およびｌｅｎＡｎｄＶｉａＷｅｉｇｈｔを変更すると、（最初の試みの失敗の原因である唯一の制約である）容量制約を効果的に効果のないものにする。次に、ＬＰソルバーは、再度問題を解こうとする。定数ｍｉｎＳｌａｃｋＷｅｉｇｈｔ、ｍｉｎＳｌａｃｋ、およびｌｅｎＡｎｄＶｉａＷｅｉｇｈｔを変更すると、必ず、２回目の試みは成功する。通常の当業者であれば、異なる特性を持つ解を発見するために、他の実施形態も、これらの変数をもっと大きく変更することができることを理解することができるだろう。しかし、そのように増大変更すると、ソルバーの速度が低下する。
ＬＰソルバーが返送する解は、すべての制約に適合するものであり、目的関数の出力は最も小さくする。この返送された解は、各ツリー変数ｘＮ＿Ｃに対する実数を含むことができる。例えば、ソルバーが、ＬＰソルバーに３つの経路を示した場合には、ＬＰソルバーは、第１の経路に対して０．８のスコアを、第２の経路に対して０．１のスコアを、最後の経路に対して０．１のスコアを返送することができる。
すでに説明したように、プロセス５３００は、（ステップ５３３０において）このＬＰの解を、ＩＬＰの解、すなわち、０または１を各ツリー変数ｘＮ＿Ｃの値として指定する解に変換する。また、すでに説明したように、いくつかの実施形態は、この変換を行うためにランダム化四捨五入を使用する。ステップ５３３０において選択したこの一組の経路に基づいて、ソルバー３９３０は、（ステップ５３３５において）現在のスロットの各スロット−ネット・データ構造体内に４２ビットの選択した経路ストリングを記憶する。この４２ビット・ストリングは、ネットの選択した経路がとる現在のスロット内のパスを指定する。
通常の当業者であれば、ソルバーの上記説明にもかかわらず、他の実施形態は、ルーティング階層の任意の特定のレベルにおいて、ルーティング問題を解くために異なるアプローチを使用することができることを理解することができるだろう。例えば、いくつかの実施形態は、上記とは異なる方法で、目的関数および制約を定義することができる。例えば、いくつかの実施形態は、経路のコストを１つの制約として使用することもできるし、目的関数に集中を簡単に最小限度にまで低減させることもできる。また、ＬＰ解を得るためにＬＰソルバーを使用し、ＬＰ解をＩＬＰ解に変換する代わりに、他の実施形態は、ＩＬＰ解を得るためにＩＬＰソルバーを使用する。さらに他の実施形態は、現在のスロット内に各ネットに対する経路を埋設するために、シーケンシャルなアプローチを使用する。
【０１３２】
Ｆ．プロパゲータ
ソルバーが現在のスロットの各スロット−ネットに対する経路を指定した後で、現在のスロットがリーフ・スロットでない場合、スロット・マネージャ３９２５は、プロパゲータ３９３５を呼び出す。次に、プロパゲータは、現在のルーティング・レベルに対してソルバーが指定したルーティング経路がどのようにして現在のスロットの子スロットまで伝搬するのかを判断する。トップ・レベルより下ではあるが、リーフ・レベルのスロットより高いスロットに対して、プロパゲータは、また、さらに１つレベルが低い前のルーティング・レベルのところで、プロパゲータが指定した経路を伝搬する後続の伝搬動作を行う。現在のスロット内の各ネットに対して、プロパゲータは、自分が識別する伝搬に対応するように、各子スロット内のネットのピンの配列を修正しなければならない場合がある。
２つの異なるプロパゲータについて以下に説明する。第１のプロパゲータは、各ネットの経路に対するいくつかの伝搬の解を列挙し、次に、各ネットに対する伝搬の解を選択するために、ＬＰソルバー３９４５およびＩＬＰ変換器３９５０を使用する。一方、第２のプロパゲータは、現在のスロット内の各ネットの経路に対する伝搬を選択し、埋設するために、貪欲なアプローチを使用するシーケンシャル・プロパゲータである。以下に説明するいくつかの実施形態の場合には、これらプロパゲータの両方とも適用できる場合には、後続の伝搬を実行するためにシーケンシャル・プロパゲータを使用する。
いくつかの実施形態は、対角線パスのために図６２の７の順列伝搬モデルを使用する場合には、第１のプロパゲータを使用し、対角線パスのために図６３の１９の順列伝搬モデルを使用する場合には、第２のプロパゲータを使用する。これらの実施形態の中のあるものは、これらのモデルのどちらかと一緒に、マンハッタン・パスに対する図６１の１０の順列伝搬モデルを使用する。
【０１３３】
１．ＩＬＰプロパゲータ
ソルバーのように、ＩＬＰプロパゲータは、影響を受けた子スロット内への各ネットの経路に対するいくつかの伝搬の解を列挙し、コスト計算する。次に、プロパゲータは、ＬＰ問題を定式化し、これらの解をＬＰソルバー３９４５に送り、このＬＰソルバーは、多数の実数の解を返送する。次に、これらの実数の解は、ＩＬＰソルバー３９５０により整数の解に変換される。これらの整数の解は、影響を受けた各子スロット内の各ネットに対する特定の構成を指定し、プロパゲータは、影響を受けた子スロットに対するネットのスロット−ネット・データ構造体内に各ネットの構成を記憶する。
図７６は、ＩＬＰプロパゲータが、いくつかの実施形態で実行するプロセス７６００である。いくつかの実施形態の場合には、このプロセスは、スロット・マネージャが、プロパゲータを呼び出し、このプロパゲータに現在のスロットを供給した場合にスタートする。プロセス７６００は、最初に、（ステップ７６０５において）各パスの各伝搬の可能性の利用度を推定する。伝搬の利用度を推定する１つの方法については、図７７および図７８を参照しながら以下に説明する。
各パスの各伝搬の可能性の利用度を推定した後で、プロセス７６００は、（ステップ７６１０において）現在のスロット内の各スロット−ネットに対するすべての伝搬順列を列挙し、コスト計算する。伝搬を列挙し、コスト計算する１つの方法については、図７９および図８０を参照しながら以下に説明する。
潜在的な伝搬順列を列挙し、コスト計算した後で、ＬＰプロパゲータは、ＬＰソルバー３９４５に対するＬＰ問題を定式化する。ＬＰ伝搬問題を定式化する１つの方法については、ＶＩ．Ｆ．１．ｄ節で以下に説明する。次に、プロセス７６００は、（ステップ７６２５において）ＬＰソルバーが返送したＬＰ解をＩＬＰ解に変換する。いくつかの実施形態の場合には、プロセスは、この変換を行うためにランダム化四捨五入を行う。ランダム化四捨五入を実行する１つの方法については、ＶＩ．Ｅ節ですでに説明した。
【０１３４】
ステップ７６２５において指定した伝搬に基づいて、プロセスは、必要な場合には、（ステップに７６３０おいて）現在のスロットの子スロット内のスロット−ネットの１６ビットのピン配列を修正する。この段階で、特定のネットに対する修正すべきスロット−ネット・データ構造体が存在しない場合には、プロパゲータは、１つを例として示し、その中に１６ビットのピン配列を記録する。
現在のスロットのレベルがリーフ・レベルより少なくとも２つ高い場合には、プロセス７６００は、（ステップ７６３５において）次の下位の再帰レベルに対する後続伝搬リストに、ステップ７６２５において識別した伝搬経路を追加する。現在のスロットのレベルが、トップ・レベルより下で、リーフ・レベルより上の場合には、プロパゲータは、（ステップ７６４０において）後続の伝搬動作を実行する。この動作は、１つレベル下の前のルーティング・レベルにおいてプロパゲータが指定したルーティング・パスを伝搬する。後続の伝搬を実行する１つの方法については、図６５および図８１を参照しながら以下に説明する。
現在のスロットのレベルがリーフ・レベル直前のレベルである場合には（すなわち、現在のスロットが、Ｇｃｅｌｌのグランドペアレントである場合には）、次に、プロセス７６００は、（ステップ７６４５において）ｄＢＮｅｔ４１１０に、ステップ７６２５において指定した伝搬パスのパス・データ構造体をリンクするためにセーバを呼び出し、適用できる場合には、ステップ７６４０において指定した伝搬パスに対してセーバを呼び出す。その後、プロセスは終了する。
【０１３５】
ａ．伝搬の集中の推定
すでに説明したように、プロセス７６００は、（ステップ７６０５において）現在のスロット内の各パスに対する各伝搬の可能性の残りの利用度を推定する。いくつかの実施形態の場合には、プロセス７６００は、（１）各パスの各伝搬の閉鎖された容量を推定することにより、（２）各パスの各伝搬の使用を推定することにより、（３）各伝搬の閉鎖された容量および使用を合計することにより、この推定値を計算する。各伝搬の閉鎖された容量の推定については、図７７を参照しながら以下に説明する。一方、各伝搬の使用の推定については、図７８を参照しながら以下に説明する。
（１）各パスの推定閉鎖容量
図７７は、現在のスロット内の各パスの各伝搬の閉鎖された容量を推定するためのプロセス７７００である。伝搬プロセス７６００は、ステップ７６０５においてプロセス７７００を実行する。最初に、このプロセスは、（ステップに７７０２において）現在のスロット内の各パスの各伝搬の閉鎖された容量を記憶するための少なくとも１つのフィールドを有するデータ構造体（例えば、マトリックス）を割り当てる。ステップ７７０２において、プロセスは、また、データ構造体内の各フィールドを０に初期化する。
ステップ７７０４において、プロセスは、回路モジュールの現在のスロットのリスト内の１つの回路モジュールを選択する。次に、プロセスは、（ステップ７７０６において）選択した回路モジュールに対する回路マクロを検索する。次に、プロセスは、（ステップ７７０８において）回路マクロ上の１つの障害物を選択し、（ステップ７７１０において）選択した障害物の囲みボックスを計算する。
次に、プロセスは、（ステップ７７１２において）現在のスロットの４２のパスの中の１つを選択する。次に、プロセスは、（ステップ７７１４において）ステップ７７１２において選択したパスの伝搬の中の１つを選択する。次に、プロセスは、（ステップ７７１６において）ステップ７７１２において選択したパスが、ステップ７７０８において選択した障害物と同じ層上に位置するかどうかを判断する。
【０１３６】
選択したパスの層が選択した障害物の層と一致した場合には、プロセスは、（ステップ７７２６において）選択した伝搬の囲みボックスを計算する。ステップ７７２６において、プロセスは、また、伝搬の囲みボックスの面積を計算する。次に、プロセスは、（ステップ７７２８において）選択した伝搬の囲みボックスと選択した回路モジュールの囲みボックスの交差を識別し、（ステップ７７３０において）この交差の面積を計算する。プロセスは、（ステップ７７３２において）計算した交差面積を計算した伝搬面積で割ることにより妨害係数を計算する。次に、プロセスは、（ステップ７７３４において）妨害係数にデフォールト伝搬容量を掛け、次に、（ステップ７７３６において）ステップ７７０２において割り当てられたデータ構造体内に記憶している伝搬の閉鎖された容量にこの乗算の結果を加算する。次に、プロセスは、ステップ７７１８に進むが、このステップについては後で説明する。
プロセスが、ステップ７７１６において、選択したパスの層が選択した障害物の層と同じでないと判断した場合には、プロセスは、ステップ７７１８に進む。ステップ７７１８において、プロセスは、ステップ７７１２において選択したパスに対するすべての伝搬をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７７１４に戻り、選択したパスに対する他の伝搬を選択する。一方、プロセスが、（ステップ７７１８において）ステップに７７１２おいて選択したパスに対するすべての伝搬をチェックしたと判断した場合には、プロセスは、（ステップ７７２０において）現在のスロットのすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７７１２に戻り、現在のスロットの他のパスを選択する。
別な方法としては、選択したパスが現在のスロットの最後のパスである場合には、プロセスは、（ステップ７７２２において）ステップ７７０４において選択した回路モジュールのすべての障害物をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７７０８に進み、選択した回路モジュールの他の障害物を選択する。チェックしていた場合には、プロセスは、（ステップ７７２４において）現在のスロット内のすべての回路モジュールをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ７７０４に進み、現在のスロット内の他の回路モジュールを選択する。しかし、プロセスが、現在のスロット内のすべての回路モジュールをチェックしていた場合には、プロセスは終了する。
【０１３７】
ｂ．各パス伝搬の推定使用
図７８は、現在のスロット内の各パスの各伝搬の使用を推定するためのプロセス７８００である。このプロセスは、プロパゲータが、ステップ７６０５においてこのプロセスを呼び出す度にスタートする。いくつかの実施形態の場合には、プロセス７８００は、プロパゲータから、各伝搬の推定使用を記憶するための浮動小数点変数のデータ構造体（例えば、マトリックス）を受け取る。他の実施形態の場合には、プロセス７８００は、このようなデータ構造体を受け取らないで、スタートした場合に、この構造体を生成する。いくつかの実施形態の場合には、受け取ったまたは生成したデータ構造体は、各伝搬の可能性に対する少なくとも１つのエントリを持つ。
図７８に示すように、プロセス７８００は、最初に、（ステップ７８０５において）現在のスロットの子スロットの中の１つを選択する。次に、このプロセスは、（ステップ７８１０において）選択した子スロットに対する図５５のパス使用推定プロセス５５００を呼び出す。パス使用推定プロセス５５００は、選択した子スロットの各パスに対する推定使用値を計算し、返送する。
推定プロセス５５００についてはすでに説明したので、不必要な詳細な説明により、本発明の説明が分かりにくくなるのを避けるためにここでは説明しない。ステップ７８１０の後で、プロセス７８００は、（ステップ７８１５において）現在のスロットのすべての子スロットに対するパス使用値を計算したかどうかを判断する。計算していなかった場合には、プロセスは７８０５に戻り、他の子スロットを選択し、（ステップ７８１０において）新しく選択した子スロットに対するパス使用値を計算する。プロセスが、現在のスロットのすべての子スロットをチェックしたと判断した場合には、プロセスは、（ステップ７８２０において）現在のスロット内の４２のパスの中の１つを選択する。
【０１３８】
ステップ７８２５において、プロセスは、選択したパスに対する伝搬の中の１つを選択する。次に、プロセスは、（ステップ７８３０において）隣接する子スロットのパスのパス使用値に基づいて、選択したパス伝搬の使用の推定値を計算する。例えば、本発明のいくつかの実施形態の場合には、プロセスは、パス１の伝搬０の使用を計算するために、下式を使用する。
伝搬０−パス１の使用＝（１／２）＊（１／２＊パス［１］［２］
＋  １／３＊パス［１］［１］  ＋  １／６＊パス［１］［０］
＋  １／２＊パス［２］［０］  ＋  １／３＊パス［２］［１］
＋  １／６＊パス［２］［２］）
ここで、パス［ｉ］［ｊ］は、子スロットｉのパスｊの使用である。他の伝搬の可能性に対する伝搬使用値を類似の方法で定義するために、類似の式を使用することができる。
この式は、子スロット１および２内の集中により、子スロット１および２の間のパス１の伝搬０に対する伝搬使用値を定義する。この式は、パス１の伝搬０と同一直線上に位置する子スロット内の水平パスをチェックするだけである。より詳細に説明すると、この式は、子スロット１および２の水平パス０、１および２によりパス１の伝搬０の構成要素使用値をチェックする。現在のスロット内のパス１の伝搬０の容量が、子スロット１および２の子パスの容量により、同じように影響を受けることを反映するために、両方の子スロット１および２内の使用値の合計には、１／２が掛けられる。
【０１３９】
乗数１／２、１／３および１／６は、下記の理由で子スロット１および２の両方に対する合計で使用される。目的は、１つの伝搬パスを通して何本のワイヤを通すことができるかを推定することである。これらのワイヤの中のあるものは、伝搬パスを通過した直後で終わっているが、一方、あるものは、そのパスに入るスロットの幅全体を横切っている。パス１の伝搬０に対して、１／４は、子スロット２のスロット０内で終わり、１／４は、スロット２のスロット１内で終わり、１／４は、子スロット２のスロット２内で終わり、１／４は子スロット２のスロット３内または超えて終わるように、このパスを使用するワイヤの「終点」が均等に分布しているものと仮定する。このことは、パス１を使用するワイヤの中の３／４は、子スロット２のパス０も使用し、２／４は、子スロット２内のパス１を使用し、１／４は、子スロット２内のパス３を使用することを意味していて、伝搬したパスの推定使用上のこれら３つのパスの相対的なインパクトは、３：２：１（または、３／６、２／６、１／６）になることを意味する。
ステップ７８３５において、プロセスは、ステップ７８２０で選択したすべての潜在的な伝搬をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７８２５に戻り、選択したパスに対する他の伝搬を選択し、（ステップ７８３０において）新しく選択した伝搬使用の推定値を計算する。
プロセスが、（ステップ７８３５において）ステップ７８２０において選択したパスに対するすべての伝搬をチェックしたと判断した場合には、プロセスは、（ステップ７８４０において）現在のスロットのすべてのパスをチェックしたかどうかを判断する。すべてのパスをチェックしていなかった場合には、プロセスはステップ７８２０に戻り、現在のスロットの他のパスを選択し、次に、新しく選択したパスの伝搬の可能性の使用を計算するために、動作７８２５〜７８３５を実行する。プロセスが、（ステップ７８４０において）現在のスロット内のすべてのパスをチェックしたと判断した場合には、プロセスは終了する。
【０１４０】
ｃ．各伝搬に対するコストの列挙と割当て
各パスの各伝搬の可能性の利用度を推定した後で、プロセス７６００は、（ステップ７６１０において）現在のスロット内の各スロット−ネットに対するすべての伝搬順列を列挙し、コスト計算する。図７９は、伝搬を列挙し、コスト計算するための１つの方法を示す。
図７９に示すように、プロセス７９００は、（ステップ７９０５において）現在のスロットのスロット−ネットを選択することによりスタートする。次に、プロセスは、（ステップ７９１０において）それぞれが、特定の子スロットに入るパスを記憶するための１６の空のリストを初期化する。次に、プロセスは、（ステップ７１５において）ステップ７９０５において選択したスロット−ネットに対する経路を検索する。
ステップ７９２０において、プロセスは、検索した経路のパスの中の１つを選択する。次に、プロセスは、選択したパスの終点に対応する２つの子スロットを識別する。プロセスは、ステップ７９２５において識別した各子スロットのパス・リストに選択したパスを追加する。ステップ７９３５において、プロセスは、ステップ７９１５において検索した経路のすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７９２０に戻り、経路の他のパスを選択する。
プロセスが、その対応する子スロットのリストへ経路のすべてのパスを追加したと判断した場合には、プロセスは、（ステップ７９４０において）現在のスロットの子スロットの中の１つを選択し、選択した子スロットのパスのリストを検索する。プロセスは、選択した子スロット内の選択したスロット−ネットのすべての可能な伝搬順列を列挙し、コスト計算するために、ステップ７９４０において、子スロットを選択する。ステップ７９４５において、プロセスは、選択した子スロット内の選択したスロット−ネットのピン配列を検索する。
【０１４１】
ステップ７９５０において、プロセスは、ステップ７９４０において選択した子スロット内にすべての可能なパス伝搬構成を記憶するために、空のリストを初期化する。ステップ７９５５において、プロセスは、選択した子スロットのパス・リストが空であるかどうか（すなわち、スロット−ネットの経路が、子スロットを通る何らかのパスを持っているかどうか）を判断する。スロット−ネットの経路が、選択した子スロットを通らない場合には、プロセスは、選択した子スロットを通るスロット−ネット経路に対する伝搬構成を識別する必要はない。それ故、プロセスは、ステップ７９８５に進み、現在のスロットのすべての子スロットをチェックしたかどうかを判断する。プロセス７９００からプロセス７９８５への流れについては後で説明する。
プロセスが、（ステップ７９５５において）スロット−ネットの経路が選択した子スロットを通ると判断し、そのため、選択した子スロット内のスロット−ネットの経路に対する伝搬構成を識別する必要がない場合には、プロセス７９００は、選択した子スロット内の選択したスロット−ネットのすべての可能な伝搬順列を列挙し、コスト計算し、記憶するために、ステップ７９６０〜７９８０を実行する。
いくつかの実施形態の場合には、プロセス７９００は、ステップ７９５５〜７９８０を実行するために、再帰関数を使用する。この関数は、（１）選択した子スロットのパス・リスト上のパスに対する１つの可能な伝搬を選択することにより、（２）選択した伝搬に対応するように仮想ピンを設定することにより、（３）そのようなパスが存在する場合には、パス・リスト上の以降の各パスに対して第１の２つの動作を再帰的に反復することにより、各パス−伝搬順列を識別する。識別した各伝搬順列に対して、次に、プロセス７９００は、各順列をコスト計算し、セーブし、伝搬構成のリストに各順列を追加するために、ステップ７９７０〜７９７５を実行する。
【０１４２】
より詳細に説明すると、ステップ７９６０において、プロセス７９００は、選択した子スロット内のパス伝搬の１つの順列を識別する。スロット−ネットの経路が、選択した子スロットに入るパスを１本しか持っていない場合には、識別した伝搬順列は、選択した子スロットに入るパスに対する伝搬の可能性の中の１つである。一方、スロット−ネットの経路が、選択した子スロットに入るパスを１本以上持っている場合には、識別した各順列は、選択した子スロットに入る各経路に対する伝搬の一意の組合わせである。
図６１に示すように、水平垂直パスは、本発明のいくつかの実施形態の場合には、１０の伝搬の可能性を持つ。一方、対角線パスは、図６２に示すように、いくつかの実施形態の場合には、７つの伝搬の可能性を持つ。一方、図６３に示すように、対角線パスは、他の実施形態の場合には、１９の伝搬の可能性を持つ。通常の当業者であれば、他のいくつかの実施形態は、水平パス、垂直パス、または対角線パスに対する他の伝搬モデル化を使用することを理解することができるだろう。
選択した子スロット内でパス伝搬の順列を識別した後で、プロセスは、（ステップ７９６５において）ステップ７９６０において識別した順列のパス伝搬に対応するピン構成を識別する。このようなピン構成は、識別した順列のパス伝搬に対応するために、１つまたはそれ以上の仮想ピンを含むことができるという点を除けば、選択した子スロット内のスロット−ネットのピン構成と同じである。
次に、プロセスは、（ステップ７９７０において）ステップ７９６５において識別したピン構成のコストを計算する。いくつかの実施形態の場合には、このコストは、識別したピン構成により指定される選択した子スロットのピンを接続するのに必要な経路のワイヤ長さコストである。すでに説明したように、いくつかの実施形態は、各ピン構成に対する最適なシュタイナー経路のコストを指定する予め表の形にした表からこのコストを検索する。一方、他のいくつかの実施形態は、経路パスのコストに基づいて、リアルタイムでこのコストを計算する。
【０１４３】
ステップ７９７０において、プロセスは、識別した伝搬の順列（すなわち、識別したパス伝搬）および構成記録内にそのコストを記憶する。図８０は、このような記録に対するデータ構造体を示す。プロパゲータは、このデータ構造体のリストを生成し、プロパゲータが生成したすべての構成を追跡するためにこのリストを使用する。このデータ構造体は、ネットのｄｂＮｅｔデータ構造体への参照を含む。このデータ構造体は、また、プロパゲータに対して、その構成に対する子スロットの識別を識別する子スロット識別子を含む。この構造体は、また、パス伝搬を入手できる名前も含む。この構造体は、さらに、ワイヤ長さコストおよびパスのリストも記憶する。
ステップ７９７０の後で、プロセスは、（ステップ７９７５において）ステップ７９７０において生成した構成記録を、選択した子スロットに対する構成のリストに追加する。次に、プロセスは、（ステップ７９８０において）選択した子スロット内のすべてのパス伝搬順列をチェックしたかどうかを判断する。すでに説明したように、いくつかの実施形態は、すべてのパス伝搬順列を識別する再帰関数の一部としてこの判断を行う。
プロセスが、（ステップ７９８０において）すべてのパス伝搬順列をチェックしたと判断した場合には、プロセスは、（ステップ７９６０において）他の順列を識別し、次に、（ステップ７９６５〜７９７５において）この順列のコスト計算を行い、記憶する。プロセスが、すべてのパス伝搬順列をチェックした場合には、プロセスは、（ステップ７９８５において）すべての子スロットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ７９４０に戻り、他の子スロットを選択する。
プロセスが、（ステップ７９８５において）すべての子スロットをチェックしたと判断した場合には、プロセスは、（ステップ７９９０において）現在のスロット内のすべてのスロット−ネットに対する伝搬順列を生成したかどうかを判断する。生成していなかった場合には、プロセスは７９０５に戻り、他のスロット−ネットを選択し、次に、新しく選択したスロット−ネットに対する伝搬順列を列挙し、コスト計算するために以降の動作を実行する。プロセスが、現在のスロット内のすべてのスロット−ネットをチェックしていた場合には、プロセスは終了する。
【０１４４】
ｄ．ＬＰ問題の定式化と解
ＩＬＰプロパゲータは、ＬＰソルバー３９４５に、１つまたはそれ以上の目的関数、多数の解、およびいくつかの制約を供給することによりＬＰ問題を定式化する。次に、ＬＰソルバーは、制約の見地からみて最適な解を選択するために、目的関数を使用しなければならない。
ＬＰ伝搬定式化内の基本変数は、構成記録ｎＸｔＹｅＡｐＢ．．．である。ここで、小文字はキーワード（ｎ＝ネット；ｔ＝子スロット；ｅ＝パス；ｐ＝伝搬）であり、大文字は、数字（０から「ｎ」に対する設計内のネットの数；「ｔ」に対する０〜１５；「ｅ」に対する０〜４１；「ｐ」に対する０〜９）を表す。
ＬＰソルバーは、各構成変数に対する１つの実数値を含むＬＰ解を返送する。すでに説明したように、次に、プロセス７６００は、このＬＰ解をＩＬＰ解、すなわち、各構成変数の値として０または１を指定する解に変換する。ＬＰ解を生成するために、また、ＬＰ解をＩＬＰ解に変換するために、ＬＰソルバーを使用する代わりに、他のいくつかの実施形態は、ＩＬＰ解を生成するためにＩＬＰソルバーを使用する。
すでに説明したように、いくつかの実施形態は、ＬＰソルバーとして、（ドイツ語で）「Ｐａｒａｌｌｅｌｅｒ  ｕｎｄ  Ｏｂｊｅｋｔｏｒｉｅｎｔｉｅｒｔｅｒ  Ｓｉｍｐｌｘ−Ａｌｇｏｒｉｔｈｍｕｓ」（非特許文献２）という名称の、Ｐｈ．Ｄ．論文の一部として、Ｒｏｌａｎｄ  Ｗｕｎｄｅｒｌｉｎｇが実施した、「ＳｏＰｌｅｘ」ソルバーを使用する。このソルバーに関する情報は、下記のウェブサイト：
ｈｔｔｐ：／／ｗｗｗ．ｚｉｂ．ｄｅ／Ｏｐｔｉｍｉｚａｔｉｏｎ／Ｓｏｆｔｗａｒｅ／Ｓｏｐｌｅｘ／
で入手することができる。
また、すでに説明したように、ＬＰソルバーのタスクは、多数の制約を満足させる一方で、１つまたはそれ以上の目的関数を最小にするＬＰ解を識別することである。以下に説明するいくつかの実施形態は、ＬＰ伝搬に対して下記の目的関数を指定する。
最小化：Ｌ１ｎＸｔＹｅＡｐＢ  ＋．．．＋  ＬＬｎＱｔＷｅＤｐＣｅＡｐＤ  ＋  ．．．
この目的関数は、全長を最短にする。より詳細に説明すると、この関数の各項は、構成（すなわち、ある子スロット内のあるネットに対するパスの伝搬の完全な選択）を表し、これに対してその構成（Ｌ１、ＬＬ）の推定した長さが掛けられる。
【０１４５】
また、以下に説明するいくつかの実施形態は３つの制約を指定する。第１の制約は、以下に示すように、各スロット−ネットに対する構成を１つだけ選択するためにＬＰソルバーを必要とする。
ｎＸｔＹ：ｎＸｔＹｅＡｐＢ．．ｅＱｐＺ＋ｎｘｔＹｅＡｐＣ．．ｅＱｐＲ＋．．．＝１
このような制約の１つは、最近解いたスロットの１６の子スロットを横切る各スロット−ネットに対して定義される。この制約は、選択した構成をスロット−ネット当り１つに制限する働きをする。
第２の制約は、伝搬一貫性制約である。この制約は、（例えば、子スロットＹ内のパスＡに対して伝搬Ｂを選択した場合には、パスＡに接続している他の子スロット内でも、同じ選択を行わなければならないというような）子スロット間で確実に統一を行う働きをする。この制約は、下記のように指定することができる。
ｎＸｅＹｐＺ：ｎＸｔ０ｅＹｐＺｅＱｐ１  ＋  ｎＸｔ０ｅＹｐＺｅＱｐ２  ＋  ｎＸｔ０ｅＹｐＺｅＱｐ７．．．ｎＸｔｌｅＹｐＺｅＳｐ１  −  ｎＸｔｌｅＹｐＺｅＳｐ２  −  ｎＸｔｌｅＹｐＺｅＳｐ３＝０
ネットＸに対する子スロットＹ内のパスＡに対して、伝搬Ｂを指定している構成と同じ数の正の項があり、また、ネットＸに対する子スロットＷ内のパスＡに対して、伝搬Ｂを指定している構成と同じ数の負の項があることに留意されたい。
第３の制約は、容量制約である。いくつかの実施形態は、子スロット内のスロット−ネット構成を孫スロット間のパスの使用にマッピングする（すなわち、子スロット内の各伝搬を孫スロット間のパスの使用にマッピングする）。次に、これらの実施形態は、確実に、孫スロット間のパスの容量が尊重されるようにする。
【０１４６】
これらの実施形態のうちのいくつかの場合には、ＬＰ伝搬問題の定式化は下記の通りである。
［ｐｒｅｐＰｒｏｐａｇａｔｉｏｎＩＬＰ（スロット）］
−  余裕＝０に初期化する
−  解が得られない場合
−  新しいＬＰソルバーを初期化する
−  目的関数「ｏｂｊｅｃｔｉｖｅ」を宣言する
−  そのスロットの各パスに対して
−  そのパスの各伝搬に対して
−  その伝搬を含むすべてのパスを検索する
−  その伝搬の各パスに対して
−  そのパスの終点としての働きをする（子スロット、孫スロット）のペアを検索する（子スロット、孫スロットのペアは、２つ以上の伝搬内で発生する場合がある）
−  この（子スロット、孫スロット）のペアがまだ処理されていない場合
−制約「ｔＡｓＢｔＣｓＤ」を生成する。ここで、Ａは子スロット、Ｂは子スロットＡの孫スロット、Ｃは子スロット、Ｄは子スロットＣの孫スロット。この制約は、孫スロット間のパスの使用を制限する。
−  全長変数を定義するために、制約「ｔｏｔｌｅｎ」を宣言する
−  各スロット−ネットＸに対して
−  そのスロット−ネットに対する経路内の各パスＹに対して
−  そのパスの各伝搬Ｚに対して
−  ＬＰソルバーに、その接続している子スロットの両方の同じパスに対して、同じ伝搬を強制的に選択させるために、制約「ｎＸｅＹｐＺ」を宣言する
−  現在のスロット−ネットの経路が入る各子スロットに対して
−  制約「ｎＸｔＹ」を宣言する。ここで、Ｙは子スロットの数である。これは、各子スロット内のスロット−ネット当り１つの構成を選択するためのものである
【０１４７】
／／制約の宣言終了、次は変数の宣言
−  各スロット−ネットに対して
−  現在のスロット−ネットの経路が入る各子スロットに対して
−  子スロット内のスロット−ネットのすべての構成を識別する。／／プロセス７９００により行う
−  生成した各構成に対して
−  変数「ｎＡｔＢｅＣｐＤ」を生成する。ここで、Ａ、Ｂ、Ｃ、Ｄは、構成のネット、スロット、パスおよび伝搬をそれぞれ識別する整数である
−  この構成内の各パスに対して
−  そのパスに対する伝搬が「使用不能」である場合には、構成コストにペナルティを追加する／／使用不能は、プロセス７７００および７８００により得た推定値から入手した集中の推定値に基づいて決定される
−  Ｂが、このパスに入る２つの子スロットの小さい方の索引である場合には、係数１．０を含み、その他の場合には−１．０を含む制約「ｎＡｅＣｐＤ」内に入れるｎＡｔＢｅＣｐＤを宣言する
−  そのパスの伝搬内の各サブパスに対して
−  サブパスの終点としての働きをする２つ（子スロット、孫スロット）のペアを検索する
−  係数０．５を含む（子スロット、孫スロット）のこのペアに対応する制約内に入れるｎＡｔＢｅＣｐＤを宣言する
−  係数１．０を含む制約「ｎＡｔＢ」内に入れるｎＡｔＢｅＣｐＤを宣言する
−  構成のデータ構造体内に記憶している構成コストに等しい係数に任意のペナルティを加えたものを含む制約「ｔｏｔＬｅｎ」内に入れるｎＡｔＢｅＣｐＤを宣言する
【０１４８】
−  選択した構成の全長を表すために、変数「ｔｌ」を生成する
−  係数−１．０を含む制約「ｔｏｔＬｅｎ」内に入れるｔｌを宣言する
−  係数１．０を含む目的関数内に入れるｔｌを宣言する
−  制約「ｔｏｔＬｅｎ」のｒｈｓ＝０．０に設定する
−  そのスロットの各パスに対して
−  そのパスの各伝搬に対して
−  その伝搬を含むすべてのパスを検索する
−  その伝搬の各パスに対して
−  そのパスの終点としての働きをする（子スロット、孫スロット）のペアを検索する（子スロット、孫スロットのペアは、２つ以上の伝搬内で発生する場合がある）
−  この（子スロット、孫スロット）のペアがまだ処理されていない場合
−  制約「ｔＡｓＢｔＣｓＤ」を生成する。ここで、Ａは子スロット、Ｂは子スロットＡの孫スロット、Ｃは子スロット、Ｄは子スロットＣの孫スロットである。この制約は、孫スロット間のパスの使用を制限する。
−  制約「ｔＡｓＢｔＣｓＤ」のｒｈｓを、伝搬パスのデフォールト容量に、ローカル変数「ｓｌａｃｋ」値を加算し、伝搬の推定パス使用と伝搬パスの閉鎖された容量との合計を引いたものに設定する／／この場合、推定パス使用は、プロセス７８００により計算し、閉鎖された容量は、プロセス７７００により計算した
【０１４９】
−  各スロット−ネットＡに対して
−  そのスロット−ネットの経路内の各パスＢに対して
−  そのパスの各伝搬Ｃに対して
−  制約「ｎＡｅＢｐＣ」のｒｈｓを０．０に設定する
−  このスロット−ネットの経路が接続している各子スロットＢに対して
−  制約「ｎＡｔＢ」のｒｈｓを１．０に設定する
−  ＬＰを解く
−  解がない場合には、ループから抜け出る；そうでない場合には、ｓｌａｃｋ＝ｓｌａｃｋ＋１に設定して、再度スタートする
すでに説明したように、定式化の第２のラインから最後のラインは、（ステップ７６２０において）ＬＰソルバーに問題を解くように命令する。次に、ＬＰソルバーは、この問題を解こうとする。ＬＰソルバーがこの問題を解くのに失敗する度に、上記定式化は、ＬＰソルバーがこの問題を解くことができるまで、余裕の値を増大する。
ＬＰソルバーは、実数の最適な解を返送する。次に、プロセス７６００は、この解を整数ＬＰ（「ＩＬＰ」）解に変換する。いくつかの実施形態は、すでに説明したように、この変換を行うためにランダム化四捨五入を使用する。通常の当業者であれば、ＬＰ解を得るためにＬＰソルバーを使用し、ＬＰ解をＩＬＰ解に変換する代わりに、他の実施形態は、ＩＬＰ解を得るためにプロパゲータに対するＩＬＰソルバーを使用することを理解することができるだろう。
【０１５０】
ｅ．後続の伝搬
現在のスロットのレベルが、リーフ・レベルより少なくとも２つ高い場合には、プロセス７６００は、次の下位の再帰レベルに対する後続伝搬リストに、ステップ７６２５において識別した伝搬経路を追加する。図６５は、後続の伝搬リストに追加することができる伝搬パスの一例である。すでに説明したように、この図は、スロット０および９に実際のピン６５２５を持つ１つのネットを示す。このネットに対して選択した経路は、子スロット０および９を接続するために、子スロット５を通るパスＰ１７およびＰ２４を使用する。
図６５は、パスＰ２４が、パス６５１０および６５１５により子スロット０および５内に伝搬する様子、一方、パスＰ１７が、パス６５２０により子スロット５および９内に伝搬する様子を示す。伝搬パス６５１０は、現在のスロットの子スロット０の子スロット７と現在のスロットの子スロット１の子スロット８との間に位置する。伝搬パス６５１５は、現在のスロットの子スロット１の子スロット１３と現在のスロットの子スロット５の子スロット２との間に位置する。伝搬パス６５２０は、現在のスロットの子スロット５の子スロット１４と現在のスロットの子スロット９の子スロット２との間に位置する。図６５は、子スロット１、５および９のスロットに追加した５つの仮想ピンである。
現在のスロットのレベルがリーフ・レベルより少なくとも２つ高い場合には、プロセス７６００は、次の下位の再帰レベルに対する後続伝搬リストに、伝搬パス６５１０、６５１５および６５２０を追加する。次に、プロパゲータは、現在のスロットの子スロットに対して、後続の伝搬を実行する際にこのリストを使用する。この伝搬動作は、１つレベル下の後続の伝搬リスト上のパスを伝搬する。
図８１は、現在のスロットが、トップ・レベルよりは下であるが、リーフ・レベルのスロットよりは上である場合の、現在のスロットに対する後続伝搬を実行するためのプロセス８１００である。定義により、このような現在のスロットは、前の親スロットの子スロットである。図８１に示すように、プロセス８１００は、最初に、（ステップ８１０５において）（１）後続伝搬のリストが、少なくとも１つのアンカーを持つ任意のパスを含んでいるかどうか、または、（２）現在のスロットが、現在のレベルの最後のスロットであるかどうか、また、後続伝搬のリストが、依然として１つまたはそれ以上のパスを含んでいるかどうかを判断する。
【０１５１】
プロセスが、ステップ８１０５においてパスを識別しなかった場合には、プロセスは終了する。パスを識別した場合には、プロセス８１００は、（ステップ８１１０において）識別したパスの中の１つを選択し、後続伝搬のリストからこのパスを除去する。次に、プロセスは、（ステップ８１１５において）選択したパスの各伝搬順列のコストを計算する。各伝搬順列のコストは、その伝搬パスのコストに、伝搬順列が通る２つまたは３つの子スロット内のピン構成のコストを加えたものを含む。
次に、プロセスは、（ステップ８１２０において）コストが最も安い伝搬順列を選択する。選択した伝搬順列は、１つのパス、場合によっては２つの伝搬パスを含む。例えば、図６５の例の場合には、パスＰ２４の伝搬は、２つの伝搬パス６５１０および６５１５になっているし、一方、パス１７の伝搬は、１つの伝搬パス６５２０になっている。
各伝搬パスに対して、いくつかの実施形態は、パスが結合する子スロットの識別およびパスの残りの容量を記憶しているスロット・ペア記録を維持する。それ故、ステップ８１２５において、ステップ８１２０において選択した伝搬順列を形成する各伝搬パスに対して、スロット・ペア・データ構造体が存在するかどうかを判断する。選択した伝搬順列の伝搬パスに対して、そのような構造体が存在しない場合には、プロセスは、（ステップ８１２５において）そのパスに対するスロット・ペア構造体を生成し、この構造体内にそのパスが通る子スロットの識別を記憶し、その構造体の容量フィールドを初期化する。伝搬パスに対して初期化した容量は、パスのデフォールト容量からそのパス上のすべての閉鎖を引いたものである。スロット・ペア構造体が、選択した伝搬順列の伝搬パスに対してすでに存在する場合には、プロセスは、（ステップ８１２５において）この構造体からのパスの残りの容量を識別する。
ステップ８１３０において、プロセスは、選択した伝搬順列を現在のスロットの子スロット内に埋設することができるかどうかを判断する。すなわち、プロセスは、選択した伝搬順列を形成する１つまたは複数のパスがしきい値より高い残りの容量を持っているかどうかを判断する。いくつかの実施形態の場合には、しきい値はゼロである。これらの実施形態の場合には、それを形成するすべてのパスが、ゼロより大きい残りの容量を持っている場合に、選択した伝搬順列を埋設することができる。
【０１５２】
プロセスが、選択した伝搬順列を埋設できないと判断した場合には、プロセスは、（ステップ８１３５において）ステップに８１２０おいて選択したパスに対する追加の伝搬順列が存在するかどうかを判断する。存在する場合には、プロセスは、（ステップ８１４０において）次の最も安い伝搬順列を選択し、ステップ８１２５に進む。
プロセスが、（ステップ８１３５において）チェックする追加の伝搬順列が存在しないと判断した場合には、プロセスは、（ステップ８１６０において）ステップ８１３０においてチェックした最善の伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される（すなわち、選択した伝搬順列の１つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される）。図８２は、このような仮想ピンの設定の一例を示す。この図は、（１）パス８２０５により、子スロット７のスロット１１内に伝搬している後続パス・リストからのパス６５１０、（２）この伝搬に対応するように、スロット１１内で設定された仮想ピン８２１０を示す。この図は、また、パス６５１０が、子スロット４のスロット１１、および現在のスロット８２２０に隣接しているスロットの子スロット８のスロット１内に、パス８２１５に沿って伝搬している様子を示す。この図は、また、隣接スロットの子スロット４および８のスロット１２および１内で設定された２つの仮想ピンも示す。
ステップ８１６０において、プロセスは、また、埋設した伝搬順列が使用する１つまたは複数の伝搬パスの使用できる容量を更新する。すでに説明したように、伝搬パスの使用できる容量は、パスのデフォールト容量から、その閉鎖された容量およびそのパス使用推定値の合計を引いたものとして計算することができる。この場合、閉鎖された値および使用値は、プロセス７７００および７８００により計算される。いくつかの実施形態は、各伝搬パスの使用できる容量で、プロセス７８００により計算したパス使用推定値の要因を考慮しない。
【０１５３】
現在のスロットのレベルが、リーフ・レベルより少なくとも２つ高い場合には、プロセスは、（ステップ８１６０において）次の下位の再帰レベルに対する後続伝搬リストに埋設した伝搬パスを追加する。ステップ８１６０から、プロセスはステップ８１５０に進むが、このステップについては後で説明する。
プロセスが、（ステップ８１３０において）選択した伝搬順列を埋設できると判断した場合には、プロセスは、（ステップ８１４５において）ステップ８１２０または８１４０において選択した伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される（すなわち、選択した伝搬順列の１つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される）。ステップ８１４５において、プロセスは、また、埋設した伝搬順列が使用する１つまたは複数の伝搬パスの使用できる容量を更新する。現在のスロットのレベルがリーフ・レベルより少なくとも２つ高い場合には、プロセスは、（ステップ８１４５において）次の下位の再帰レベルに対する後続伝搬リストに埋設した伝搬パスを追加する。ステップ８１４５から、プロセスはステップ８１５０に進む。
ステップ８１５０において、プロセスは、ステップ８１０５において識別したすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ８１１０に戻り、ステップ８１０５において識別した他のチェックしていないパスを選択する。チェックしていた場合には、プロセスは終了する。
【０１５４】
２．シーケンシャル・プロパゲータ
本発明のいくつかの実施形態は、ソルバーが指定した経路が現在のスロットの子スロット内にどのように伝搬するかを識別する。これらの実施形態の中のあるものは、図６３の対角線伝搬モデルを使用する場合には、このようなアプローチを使用する。
図８３は、いくつかの実施形態で使用されるシーケンシャルな伝搬プロセスの中の１つを示す。この図に示すように、このプロセスは、（ステップ８３０５において）現在のスロットの子スロットの子スロット間の各伝搬の使用できる容量を計算することによりスタートする。各伝搬パスの使用できる容量は、そのパスのデフォールト容量からその閉鎖された容量を引き、そのパス使用推定値を加えたものに等しい。すでに説明したように、プロセス７７００および７８００は、閉鎖された値およびパス使用値を計算するために使用することができる。いくつかの実施形態は、各伝搬パスの使用できる容量で、プロセス７８００により計算したパス使用推定値の要因を考慮に入れない。
使用できる伝搬容量を計算した後で、プロセスは、（ステップ８３１０において）現在のスロット内のスロット−ネットを選択する。次に、プロセスは、（ステップ８３１５において）選択したスロット−ネットに対する経路を検索する。ステップ８３２５において、次に、プロセスは、最大数のアンカーを含む１つのパスを選択する。すでに説明したように、いくつかの実施形態は、アンカーを、それにパスが入るどちらかの子スロット内のピンとして定義する。これらの実施形態の場合には、１つのパスは、最大２つのアンカーを持つ。他のいくつかの実施形態は、アンカーを子スロットのスロット内のピンの数として定義することができる。このようなアプローチの下では、各子スロットの１６のスロット内に１６のピンを持っている場合には、最大３２のアンカーを持つことができる。
【０１５５】
次に、プロセスは、（ステップ８３３０において）選択したパスの各伝搬順列のコストを計算する。各伝搬順列のコストは、順列の伝搬パスのコストに、伝搬順列が通る２つまたは３つの子スロット内のピン構成のルーティング・コストを加えたものを含む。
次に、プロセスは、（ステップ８３３５において）コストが最も安い伝搬順列を選択する。選択した伝搬順列は、１つの伝搬パス、場合によっては２つの伝搬パスを含む。例えば、図６５の例の場合には、パスＰ２４の伝搬は、２つの伝搬パス６５１０および６５１５になっているし、一方、パス１７の伝搬は、１つの伝搬パス６５２０になっている。
ステップ８３４０において、プロセスは、選択した伝搬順列を現在のスロットの子スロット内に埋設できるかどうかを判断する。すなわち、プロセスは、選択した伝搬順列の埋設により、この順列に対する任意の伝搬パスが過度に集中するかどうかを判断する。
プロセスが、選択した伝搬順列を埋設できないと判断した場合には、プロセスは、（ステップ８３４５において）ステップに８３２５おいて選択したパスに対する追加の伝搬順列が存在するかどうかを判断する。存在する場合には、プロセスは、（ステップ８３５０において）次の最も安い伝搬順列を選択し、ステップ８３４０に戻り、新しく選択した順列が埋設できるかどうかを判断する。
プロセスが、（ステップ８３４５において）チェックする追加の伝搬順列が存在しないと判断した場合には、プロセスは、（ステップ８３６５において）ステップ８３４０において遭遇した最善の伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される（すなわち、選択した伝搬順列の１つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される）。現在のスロットのレベルが、リーフ・レベルより少なくとも２つ高い場合には、この埋設をすると、次の下位の再帰レベルに対する後続伝搬リストに、選択した伝搬順列が使用する伝搬パスが追加される。ステップ８３６５において、プロセスは、また、埋設した伝搬順列の伝搬パスの使用できる容量を更新する。ステップ８３６５から、プロセスは、ステップ８３６０に進むが、このステップについては後で説明する。
【０１５６】
プロセスが、（ステップ８３４０において）選択した伝搬順列を埋設できると判断した場合には、プロセスは、（ステップ８３５５において）選択した伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される（すなわち、選択した伝搬順列の１つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される）。現在のスロットのレベルがリーフ・レベルより少なくとも２つ高い場合には、この埋設をすると、次の下位の再帰レベルに対する後続伝搬リストに、選択した伝搬順列が使用する伝搬パスが追加される。ステップ８３５５において、プロセスは、また、埋設した伝搬順列の伝搬パスの使用できる容量を更新する。ステップ８３５５から、プロセスはステップ８３６０に進む。
ステップ８３６０において、プロセスは、選択したスロット−ネットのすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ８３２５に戻り、この経路の他のパスを選択する。チェックしていた場合には、プロセスは、（ステップ８３７０において）現在のスロット内のすべてのスロット−ネットをチェックしたかどうかを判断する。
プロセスが、現在のスロット内のすべてのスロット−ネットをチェックしていなかった場合には、プロセスはステップ８３１０に戻り、他のスロット−ネットを選択する。チェックしていた場合には、プロセスはステップ８３７５に進む。現在のスロット・レベルが、トップ・レベルより下であるが、リーフ・レベルより高い場合には、シーケンシャル・プロパゲータが、（ステップ８３７５において）後続伝搬動作を行う。この動作は、さらに１レベル低い前のルーティング・レベルのところで、プロパゲータが指定したルーティング・パスを伝搬する。現在のスロット・レベルが、リーフ・レベル直前のレベルである場合には（すなわち、現在のレベルが、Ｇｃｅｌｌのグランドペアレントである場合には）、シーケンシャル・プロパゲータは、（ステップ８３８０において）ｄＢＮｅｔに、ステップ８３５５、８３６５および８３７５において埋設した任意の伝搬パスのパス・データ構造体をリンクするためにサーバを呼び出す。その後、プロセスは終了する。
【０１５７】
ＶＩＩ．コンピュータ・システム
図８４は、本発明の一実施形態を実施するコンピュータ・システムである。コンピュータ・システム８４００は、バス８４０５、プロセッサ８４１０、システム・メモリ８４１５、読出し専用メモリ８４２０、永久記憶装置８４２５、入力装置８４３０、および出力装置８４３５を含む。
バス８４０５は、すべてのシステム、周辺機器、およびコンピュータ・システムの多数の内部デバイスを通信できるように接続しているチップセット・バスを表す。例えば、バス８４０５は、通信できるように、プロセッサ８４１０を読出し専用メモリ８４２０、システム・メモリ８４１５、および永久記憶装置８４２５に接続する。
これらの種々の記憶装置から、プロセッサ８４１０は、本発明のプロセスを実行するために、実行対象の命令および処理対象のデータを検索する。読出し専用メモリ（ＲＯＭ）８４２０は、プロセッサ８４１０およびコンピュータ・システムの他のモジュールが必要とする静的データおよび命令を記憶する。一方、永久記憶装置８４２５は、読出しおよび書込みメモリ素子である。この素子は、コンピュータ・システム８４００の電源がオフになった場合でも、命令およびデータを記憶している不揮発性記憶装置である。本発明のいくつかの実施形態は、永久記憶装置８４２５として、（磁気ディスクまたは光ディスクおよびその対応するディスク・ドライブのような）大量記憶装置を使用する。他のいくつかの実施形態は、永久記憶装置として、（フロッピー（登録商標）・ディスクまたはｚｉｐ（登録商標）ディスク、およびその対応するディスク・ドライブのような）取外し可能な記憶装置を使用する。
永久記憶装置８４２５のように、システム・メモリ８４１５は、読出しおよび書込みメモリ素子である。しかし、記憶装置８４２５とは異なり、システム・メモリは、ランダム・アクセス・メモリのような揮発性読出しおよび書込みメモリである。システム・メモリは、プロセッサが実行時に必要とする命令およびデータの中のあるものを記憶する。いくつかの実施形態の場合には、本発明のプロセスは、システム・メモリ８４１５、永久記憶装置８４２５および／または読出し専用メモリ８４２０内に記憶される。
【０１５８】
バス１０５は、また、入力装置８４３０および出力装置８４３５にも接続している。入力装置により、ユーザは、コンピュータ・システムへ情報を通信し、コンピュータ・システムへのコマンドを選択することができる。入力装置８４３０は、英数字キーボードおよびカーソル・コントローラを含む。
出力装置８４３５は、コンピュータ・システムが生成した画像を表示する。例えば、これらのデバイスは、ＩＣ設計レイアウトを表示する。出力装置は、プリンタおよび陰極線管（ＣＲＴ）または液晶ディスプレイ（ＬＣＤ）のような表示デバイスを含む。
最後に、図８４に示すように、バス８４０５も、コンピュータ８４００を、ネットワーク・アダプタ（図示せず）を通してネットワーク８４６５に接続する。このようにして、コンピュータは、（ローカル・エリア・ネットワーク（「ＬＡＮ」、ワイド・エリア・ネットワーク（「ＷＡＮ」）またはイントラネットのような）複数のコンピュータのネットワーク、または（インターネットのような）複数のネットワークのネットワークの一部になることができる。
【０１５９】
コンピュータ・システム８４００の任意のまたはすべての構成要素は、本発明と一緒に使用することができる。しかし、通常の当業者であれば、任意の他のシステム構成も、本発明と一緒に使用することができることを理解することができるだろう。
多数の特定の詳細な部分を参照しながら本発明を説明してきたが、通常の当業者であれば、本発明を、本発明の精神から逸脱することなしに他の特定の形で実行することができることを理解することができるだろう。例えば、階層ルータを参照しながらいくつかの実施形態について今迄説明してきたが、通常の当業者であれば、本発明の他の実施形態を、迷路ルータのような他のタイプのルータにより実施することができることを理解することができるだろう。
また、ＬＰ問題定式化を参照しながら、いくつかの実施形態について説明してきたが、通常の当業者であれば、これらの実施形態を、ＬＰソルバーを使用しないアプリケーションにより実行することができることを理解することができるだろう。上記トラック共有制約は、その１つの例である。ルータを埋設するかしないかの判断を行う際に、任意のタイプのルータをこれらの共有制約に対応させることができる。
さらに、他の実施形態は、回路レイアウトを分割するのに、他の一組の分割ラインを使用することができる。例えば、いくつかの実施形態は、図５の４×４グリッドが形成するサブ領域以外の異なる形および／または異なるサイズのサブ領域を形成する分割グリッドを使用することができる。それ故、通常の当業者であれば、本発明が上記の例示としての詳細な説明により制限されないで、添付の特許請求の範囲により定義されることを理解することができるだろう。
【図面の簡単な説明】
【０１６０】
【図１】ＩＣレイアウトの一例である。
【図２】水平相互接続ライン、垂直相互接続ライン、および４５度の対角線相互接続ラインを使用するＩＣレイアウトである。
【図３】八角形の配線モデルを実施するための１つの方法である。
【図４】本発明のある実施形態により実行した再帰的ルーティング・プロセスの概念図である。
【図５】１６のサブ領域に分割されたＩＣレイアウトの設計領域である。
【図６】図５のネットに対する３つのシュタイナー・ツリーである。
【図７】図５のネットに対する３つのシュタイナー・ツリーである。
【図８】図５のネットに対する３つのシュタイナー・ツリーである。
【図９】２つの集中グリッドである。
【図１０】図９の集中グリッドにより形成された縁部である。
【図１１】若干小さい図１０の対角線縁部である。
【図１２】図１０の縁部を横切る配線パスである。
【図１３】いくつかの実施形態が使用する分割グリッドである。
【図１４】図１３のグリッドにより生成された縁部を横切って形成されたマンハッタン・パスおよび対角線パスである。
【図１５】図１３のグリッドの各集中グリッドの子スロットを４つのスロットに分解する長さグリッドである。
【図１６】図１３のグリッドの各集中グリッドの各子スロットを１６のスロットに分解する長さグリッドである。
【図１７】図１５の分割により、各集中グラフの子スロット内の結果として得られる４つのスロット間をルーティングするための６つのパスの生成を示す。
【図１８】図１６の分割により、各集中グラフの子スロット内の結果として得られる１６スロット間をルーティングするための４２のパスの生成を示す。
【図１９】配線モデルおよび集中グリッドおよび／または分割グリッドを適応できるように選択するためのプロセスである。
【図２０】いくつかの実施形態が、ツリーの２つのノードを接続している相互接続ラインの長さをどのように計算するのを示す。
【図２１】いくつかの実施形態が、ツリーの２つのノードを接続している相互接続ラインの長さをどのように計算するのを示す。
【図２２】分割グリッドに対して可能な各ネット構成に対する１つまたはそれ以上の最適なシュタイナー・ツリーを形成し、ツリーおよびその属性を記憶するプロセスを示す。
【図２３】４×４分割グリッドにより形成された１６のスロットに対する１６のツリー・ノードを示す。
【図２４】潜在的なシュタイナー・ノードを識別するためのプロセスである。
【図２５】図２５Ａおよび図２５Ｂは、１つまたはそれ以上の最小間隔のツリー（ＭＳＴ）を形成し、２つまたはそれ以上のノードを有するノード構成に対するＭＳＴの長さを計算するためのプロセスである。
【図２６】ルーティング・パス情報およびパス使用の確率を計算するプロセスである。
【図２７】それぞれ、図６〜図８のシュタイナー・ツリーに対するパス使用回数およびパス使用の確率の例である。
【図２８】それぞれ、図６〜図８のシュタイナー・ツリーに対するパス使用回数およびパス使用の確率の例である。
【図２９】複数の組のネット構成に対するシュタイナー・ツリー経路を記憶するための圧縮技術である。
【図３０】ノード構成をグループ分けするための１つの技術である。
【図３１】ノード構成をグループ分けするための１つの技術である。
【図３２】記憶したツリーをソートするために使用する２進探索ツリー（「ＢＳＴ」）である。
【図３３】記憶構造体内にあるツリーを前に記憶したかどうかを判断するために、ＢＳＴをたどる際に使用するプロセスである。
【図３４】複数の配線モデルに対する経路および経路属性を予め表の形に作成するプロセスである。
【図３５】図３５Ａおよび図３５Ｂは、閉ノード構成および開ノード構成の例である。
【図３６】最小の閉ツリーを予め表に作成するプロセスである。
【図３７】アンテナ・ノードを持たない関連閉ノード構成を予め表の形にする、開ノード構成に対するプロセスである。
【図３８】経路および閉ノード構成が、図３６および図３７のプロセスにより予め表の形にされる場合の、あるネットに対して１つまたはそれ以上のシュタイナー・ツリー経路を識別するプロセスである。
【図３９】本発明のいくつかの実施形態のルータのソフトウェア・アーキテクチャである。
【図４０】１６のサブ領域の複数の組に再帰的に分割されている設計領域である。
【図４１】ネットリストに対するデータ構造体である。
【図４２】ｄｂＮｅｔデータ構造体である。
【図４３】簡単なピン・データ構造体である。
【図４４】パス・データ構造体である。
【図４５】スロット−ネット・データ構造体である。
【図４６】ルータにより形成されたスロットの階層を概念的に示すグラフである。
【図４７】スロット・データ構造体である。
【図４８】回路モジュール・データ構造体である。
【図４９】図３９のルータのイニシャライザにより実行されるプロセスである。
【図５０】図３９のルータのイニシャライザにより実行されるプロセスである。
【図５１】図３９のルータのイニシャライザにより実行されるプロセスである。
【図５２】図３９のルータのスロット・マネージャにより実行されるプロセス、である。
【図５３】図３９のルータのソルバーにより実行されるプロセスである。
【図５４】パスの集中を予測するための１つの方法である。
【図５５】パスの集中を予測するための１つの方法である。
【図５６】ネット構成に擬似ピンを追加することによる、各ネット構成に対する経路を識別し、迂回路の可能性を生成するプロセスである。
【図５７】１つまたは２つの擬似ピン構成を追加することによる、次善の迂回経路の発生方法のいくつかの例である。
【図５８】１つまたは２つの擬似ピン構成を追加することによる、次善の迂回経路の発生方法のいくつかの例である。
【図５９】ネット構成に対する追加の経路を識別するためのもう１つの技術である。
【図６０】ネット構成に対する追加経路を識別するプロセスである。
【図６１】現在のスロットの子スロット間の水平パスまたは垂直パス内の、子スロットのスロット内への伝搬の１つの方法である。
【図６２】もっと下のレベルの子スロット内への４５度の対角線パス内の伝搬をモデル化するための２つの異なる方法である。
【図６３】もっと下のレベルの子スロット内への４５度の対角線パス内の伝搬をモデル化するための２つの異なる方法である。
【図６４】３つの構成要素コストによる各経路のコストを計算するためのプロセスである。
【図６５】パスの伝搬の可能性の一例である。
【図６６】バイアの数をカウントする１つの方法を概念的に示す２つの例である。
【図６７】バイアの数をカウントする１つの方法を概念的に示す２つの例である。
【図６８】経路内のバイアの数を計算するために、協力して動作する３つのプロセスである。
【図６９】経路内のバイアの数を計算するために、協力して動作する３つのプロセスである。
【図７０】経路内のバイアの数を計算するために、協力して動作する３つのプロセスである。
【図７１】Ｇｃｅｌｌレベルでの制約を共有するためのニーズである。
【図７２】Ｇｃｅｌｌレベルでの制約を共有するためのニーズである。
【図７３】対角線のペアの制約である。
【図７４】混合した３組の制約である。
【図７５】対角線３組の制約である。
【図７６】ＩＬＰプロパゲータが、いくつかの実施形態で行うプロセスである。
【図７７】伝搬の利用度を推定するための１つの方法である。
【図７８】伝搬の利用度を推定するための１つの方法である。
【図７９】伝搬の回数およびコストを計算するための１つの方法である。
【図８０】伝搬の回数およびコストを計算するための１つの方法である。
【図８１】現在のスロットがトップ・レベルのスロットより低く、リーフ・レベルのスロットよりは高い場合の、現在のスロットに対する後続の伝搬を実行するためのプロセスである。
【図８２】伝搬する後続パス・リストからのパスである。
【図８３】いくつかの実施形態で使用されるシーケンシャルな伝搬プロセスである。
【図８４】本発明のいくつかの実施形態を実施する際に使用するコンピュータ・システムである。
【符号の説明】
【０１６１】
０〜１５  子スロット    ５３，５９，６１  パス
１０５，１１０，１１５  回路モジュール    １３０，１３５，１４０  ピン
２２５，２３０  一組の対角線    ３０５，３１０，３１５  マンハッタン層
３２０，３２５  対角線層      ５０５  ネット      ６０５  シュタイナーツリー
６１０，６１５，６２０，６２５，６３０  シュタイナーノード  
９０５，９１０  グリッド