JP2005506588A - ルーティングのための方法および装置 - Google Patents
ルーティングのための方法および装置 Download PDFInfo
- Publication number
- JP2005506588A JP2005506588A JP2002548628A JP2002548628A JP2005506588A JP 2005506588 A JP2005506588 A JP 2005506588A JP 2002548628 A JP2002548628 A JP 2002548628A JP 2002548628 A JP2002548628 A JP 2002548628A JP 2005506588 A JP2005506588 A JP 2005506588A
- Authority
- JP
- Japan
- Prior art keywords
- path
- diagonal
- paths
- net
- slot
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/39—Circuit design at the physical level
- G06F30/394—Routing
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B7/00—Recording or reproducing by optical means, e.g. recording using a thermal beam of optical radiation by modifying optical properties or the physical structure, reproducing using an optical beam at lower power by sensing optical properties; Record carriers therefor
- G11B7/08—Disposition or mounting of heads or light sources relatively to record carriers
- G11B7/085—Disposition or mounting of heads or light sources relatively to record carriers with provision for moving the light beam into, or out of, its operative position or across tracks, otherwise than during the transducing operation, e.g. for adjustment or preliminary positioning or track change or selection
- G11B7/0857—Arrangements for mechanically moving the whole head
- G11B7/08582—Sled-type positioners
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
Description
【0001】
本発明は、ルーティングのための方法および装置に関する。
【発明の背景】
【0002】
集積回路(「IC」)は、多くの電子構成要素(例えば、トランジスタ、抵抗、ダイオード等)を含むデバイスである。これらの電子構成要素は、多くの場合、IC上で相互に接続して、複数の回路構成要素(例えば、ゲート、セル、記憶装置、演算装置、コントローラ、デコーダ等)を形成する。以下の説明においては、ICの電子および回路構成要素全体を「構成要素」と呼ぶ。
ICは、また、電子および回路構成要素を相互に接続している複数の配線の層(「配線層」)を含む。例えば、多くのICは、現在、その電子および回路構成要素を相互に接続している金属またはポリシリコンの配線層(以下の説明においては、総括的に「金属層」と呼ぶ)により製造されている。1つの通常の製造モデルは5つの金属層を使用する。理論的には、金属層上の配線を全角度配線にすることができる(すなわち、任意の方向に配線することができる)。このような全角度配線は、通常、ユークリッド配線と呼ばれる。しかし、実際には、各金属層は、通常、好適な配線方向を持ち、その好適な方向は、連続している金属層間で異なる。多くのICは、好適な方向の交互の層の向きを水平および垂直方向に指定するマンハッタン配線モデルを使用している。この配線モデルの場合には、大多数のワイヤは、90度曲がることができるだけである。しかし、場合によっては、好適な水平および垂直層上で、対角線方向に急激に曲げることもできる。
設計エンジニアは、ICの回路説明を、レイアウトと呼ぶ幾何学的な表示に変換することによりICを設計する。レイアウトを作成するために、設計エンジニアは、通常、電子設計オートメーション(「EDA」)アプリケーションを使用する。これらのアプリケーションは、IC設計レイアウトを生成し、編集し、分析するための複数の組のコンピュータをベースとするツールを提供する。
【0003】
EDAアプリケーションは、IC上の異なる材料およびデバイスを表す幾何学的形状によりレイアウトを生成する。例えば、EDAツールは、通常、IC構成要素を相互に接続するワイヤのセグメントを表すために、長方形のラインを使用する。これらのツールは、また、さまざまな形および大きさの幾何学的対象物として電子および回路IC構成要素を表す。本明細書においては、説明を分かりやすくするために、これらの幾何学的対象物を長方形のブロックで示す。
また、本明細書においては、「回路モジュール」という用語は、EDAアプリケーションによる電子または回路IC構成要素を意味する。EDAアプリケーションは、通常、その側面上にピンを備える回路モジュールを示す。これらのピンは、相互接続ラインに接続する。
ネットは、通常、電気的に接続しなければならないピンの集合体を形成する。レイアウト内のネットのすべてまたはその一部のリストは、ネット・リストと呼ばれる。すなわち、ネット・リストは、ネットのグループを指定し、ネットのグループは、一組のピン間の相互接続を指定する。
図1は、ICレイアウト100の一例である。このレイアウトは、ピン130〜160を有する5つの回路モジュール105、110、115、120および125を含む。4つの相互接続ライン165〜180は、そのピンを通してこれらのモジュールを接続する。さらに、3つのネットは、ピン間の相互接続を指定する。より詳細に説明すると、ピン135、145および160は、3つのピン・ネットを形成し、一方、ピン130および155、およびピン140および150は、それぞれ2つの2ピン・ネットを形成する。図1に示すように、(105のような)回路モジュールは、複数のネット上に複数のピンを持つことができる。
【0004】
IC設計プロセスは、種々の動作を必要とする。ICレイアウトを入手するために、EDAアプリケーションが通常行う物理的設計動作としては下記のようなものがある。(1)単一のチップ上に形成するには、回路が大きすぎる場合に、回路を分割する回路分割;(2)回路モジュールの整合および相対的な向きをチェックするフロア・プラニング;(3)回路モジュールの位置をもっと正確に決定するための設置;(4)回路モジュール間の相互接続を完成するためのルーティング;(5)ICの全面積を小さくするためにレイアウトを圧縮する圧縮;(6)設計および機能要件に適合しているかどうかを確認するために、レイアウトをチェックする確認。
ルーティングは、物理的設計段階での最も重要な動作である。ルーティングは、通常2つの段階、すなわち、グローバル・ルーティングと詳細ルーティングに分けられる。各ネットの場合、グローバル・ルーティングは、ネットのピンを接続するための相互接続ラインに対する「ルーズな」経路(パスまたはルーティング・エリアとも呼ばれる)を生成する。グローバル・ルーティングの「ルーズさ」は、使用する特定のグローバル・ルータにより異なる。グローバル経路が生成された後で、詳細ルーティングは、各ネットに対する特定の個々のルーティング・パスを生成する。
今日、ある種の商用グローバル・ルータを使用すれば、場合によっては、対角線方向に急角度に曲げることができるが、これらのルータは、通常、相互接続ラインのルーティング幾何学的形状を指定している場合には、首尾一貫して対角線ルーティング・パスを探査しない。これにより、レイアウト内のネットを接続するのに必要な全ワイヤ長さ(すなわち、相互接続ラインの全長)が長くなる。それ故、対角線ルーティング・パスを考慮に入れるルーティング方法および装置の開発が待望されている。
【発明の概要】
【0005】
本発明は、ルーティングのための方法および装置に関する。いくつかの実施形態は、対角線経路を使用するルーティングを提供する。この方法は、回路レイアウトのある領域内のいくつかのネットを通る。各ネットは、上記領域内に一組のピンを含む。この方法は、最初に、上記領域をいくつかのサブ領域に分割する。上記領域内の各特定のネットの場合、この方法は、特定のネットのピンの組からのピンを含むサブ領域を接続している経路を識別する。識別した経路の中のいくつかは、少なくともその一部が対角線である縁部を有する。
本発明の新規な機能は、添付の特許請求の範囲に記載されている。しかし、説明のために、下記の図面の中に本発明のいくつかの実施形態を示す。
【0006】
本発明は、ルーティング方法および装置に関する。以下の説明においては、説明のために多くの詳細な点について説明するが、通常の当業者であれば、これらの特定の詳細な記述を使用しなくても、本発明を実施することができることを理解することができるだろう。他の例の場合には、不必要な詳細な説明により、本発明の説明がわかりにくくなるのを避けるために、周知の構造体およびデバイスをブロック図の形で図示してある。
本発明のルーティングのための方法および装置のいくつかの実施形態について以下に説明する。しかし、これらの実施形態について説明する前に、第I節で、これらの実施形態と一緒に使用することができるいくつかの対角線配線アーキテクチャについて説明する。
【0007】
I.対角線配線アーキテクチャ
本発明のいくつかの実施形態は、いくつかの配線モデルと一緒に使用することができる。例えば、いくつかの実施形態は、対角線相互接続ワイヤ、水平相互接続ワイヤ、および垂直相互接続ワイヤを含む配線モデルと一緒に使用することができる。以下の説明においては、相互接続ワイヤを、相互接続または相互接続ラインと呼ぶこともある。また、本明細書で使用するように、レイアウトの境界に対して、0または90度以外の角度を形成する場合には、相互接続ラインは、「対角線」である。一方、レイアウトの辺の1つに対して0度または90度を形成する(例えば、レイアウトの幅に対して、0度または90度を形成する)場合には、相互接続ラインは、「水平」または「垂直」である。
図2は、水平相互接続ライン、垂直相互接続ライン、および45度の対角線相互接続ラインを使用するICレイアウト200である。この図の場合、水平ライン205は、レイアウトの幅210に対して平行なx軸に対して平行な(すなわち、0度である)ラインである。垂直ライン215は、レイアウトの高さ220に対して平行なy軸に対して平行なラインである。すなわち、垂直相互接続ライン215は、ICレイアウトの幅に対して垂直(すなわち、90度)である。さらに、一組の対角線225は、ICレイアウトの幅に対して+45度であり、一方、対角線の他の一組230は、ICレイアウトの幅に対して−45度である。本明細書においては、「八角配線モデル」という用語は、水平相互接続ライン、垂直相互接続ライン、および45度の対角線相互接続ラインを含む配線モデルを意味する。
【0008】
図3は、八角配線モデルを実施するための1つの方法を示す。この図の配線モデルは、各層毎に1つの好適な配線方向を持つという考え方を使用する。より詳細に説明すると、図3は、各層がそれ自身の好適な方向を持つ5つの層を示す。最初の3つの層305〜315は、マンハッタン層である。すなわち、これらの層内の相互接続ラインに対する好適な方向は、水平方向か、垂直方向である。これら3つの層内の好適な配線方向は、通常、2つの連続している層が、同じ好適な配線方向を持たないように交互になっている。しかし、ある場合には、連続している層内の配線は、同じ方向を向いている。
次の2つの層320および325は、対角線層である。対角線層内の相互接続ラインの好適な方向は±45度である。また、最初の3つの層内のように、第4および第5の層内の配線方向は、通常、直交している(すなわち、一方の層は+45度の方向を向いていて、他方の層は−45度の方向を向いている)。しかし、必ずしもそうする必要はない。
図3の直交配線モデルを参照しながら、いくつかの実施形態について以下に説明する。しかし、通常の当業者であれば、任意の配線モデルと一緒に、本発明を使用することができることを理解することができるだろう。例えば、本発明は、厳密に対角線である配線アーキテクチャ(すなわち、水平および垂直方向の配線を持たない配線アーキテクチャ)と一緒に使用することができる。
また、いくつかの実施形態は、−45度でない対角線配線と一緒に使用される。例えば、いくつかの実施形態は、水平相互接続ライン、垂直相互接続ライン、および±120度対角線相互接続ラインを使用する配線モデルと一緒に使用される。さらに、いくつかの実施形態は、いくつかのまたはすべてのワイヤ層に対して好適な方向を指定しないワイヤ・モデルと一緒に使用される。例えば、いくつかの実施形態は、すべてのワイヤ層上に水平ライン、垂直ラインおよび、45度のラインを設置することができる八角配線モデルを使用する。
【0009】
II.概念の流れ
図4は、本発明のいくつかの実施形態により実行した再帰的ルーティング・プロセスの概念図である。このルーティング・プロセスは、ICレイアウトの設計領域(スロットととも呼ぶ)内のネットに対する経路を階層的に定義する。この領域は、ICレイアウト全体であってもよいし、または、このレイアウトの一部であってもよい。同様に、ICレイアウトは、1つまたは複数の集積回路全体であってもよいし、集積回路チップの一ブロック(すなわち、一部)のためのレイアウトであってもよい。
プロセスは、最初に、(ステップ405において)IC領域をいくつかのサブ領域に分割する分割グリッドを定義する。以下の説明においては、分割領域は、現在のスロットとも呼ぶし、分割によりできたサブ領域は、現在のスロットの子スロットとも呼ぶ。
いくつかの実施形態の場合には、分割グリッドは、カット・ラインを交差させることにより形成される。これらの実施形態の中のあるものの場合、交差する分割ラインは、IC領域を(N+1)(M+1)のサブ領域に分割するN本の水平ラインおよびM本の垂直ラインである。この場合、NおよびMは、等しい任意の整数であってもよい。例えば、これらの水平ラインおよび垂直ラインは、受け取ったIC領域を、(1)NおよびMが1である場合には、4つの子スロットに、(2)NおよびMが2である場合には、9つの子スロットに、(3)NおよびMが3である場合には、16の子スロットに、(4)NおよびMの一方が4であり、他方が5である場合には、20の子スロットに分割する。
【0010】
図5は、3つの水平分割ラインおよび3つの垂直分割ラインにより、16のサブ領域(すなわち、子スロット0〜15)に分割された設計領域500である。この図は、また、16のサブ領域の中の4つに入る5つの回路モジュール510、515、520、525および530を含むネット505である。これら4つのサブ領域は、スロット0、1、7および8である。
分割領域内の(すなわち、現在のスロット内の)各ネットは、分割グリッドにより形成されたサブ領域内に1つまたはそれ以上の実際のまたは仮想のピンを有する。ネットの実際のピンは、設計領域内の回路モジュールのピンであり、一方、ネットの仮想のピンは、以下にさらに詳細に説明するように、もっと高いレベルの経路の伝搬をもっと低い子スロットに設定する人工的なピンである。各ネットの場合、そのネットの実際のまたは仮想のピンを含む一組のサブ領域は、分割グリッドに関するネットの構成を表す。
分割領域内の特定の各ネットに対して、プロセス400は、(ステップ410において)ネットに対する1つまたはそれ以上の経路(ルーティング・グラフまたは接続グラフとも呼ばれる)を識別するために、ネットの構成を使用する。ネットの各経路は、ネットのピンを含む子スロット(すなわち、サブ領域)を接続する一組の相互接続ラインを提供する。
グリッドに対して各ネット構成をモデル化するために、1つまたはそれ以上のネットのピンを含む各子スロットは、ルーティング・グラフのノード(また、頂点または点と呼ばれる)として処理される。次に、グラフのノードは、縁部(ラインとも呼ばれる)により接続される。ある実施形態の場合には、ルーティング・グラフは、完全にまたは部分的対角線である縁部を持つことができる。
【0011】
異なる実施形態は、相互接続経路を形成するために、異なるタイプのグラフを使用する。下記の実施形態の場合には、ツリー(例えば、シュタイナー・ツリー)が、関連ネット・ピンを含む子スロットを接続するルーティング・グラフとして使用される。図6〜図8は、図5のネット505に対する3つの最適なシュタイナー・ツリー605、705、および805である。これらのシュタイナー・ツリーは、すべて、同じ長さを持つ。これらのツリーの中の1つ(605)は、シュタイナー・ノード(620)を持つ。さらに、これらの各ツリーは、少なくともその一部が対角線である少なくとも1つの縁部を持つ。これらの例の場合には、ルータは、八角配線モデルを使用し、そのため、対角線縁部は、レイアウトの境界に対して45度の角度を持つ。
プロセス400がスタートする前に、ある実施形態は、データ記憶装置の子スロットの異なる構成に対する経路を予め計算し、記憶する。実行時、これらの実施形態のルータは、(ステップ410において)(1)分割グリッドに対する各ネットの構成を識別することにより、(2)識別した構成に対する経路をデータ記憶装置から検索することにより、ネットに対する経路の一部または全部を識別する。このようなアプローチにより、ルータは、各ネット構成に対してリアルタイム経路の構築から解放される。このようなアプローチの中の1つについては、第V節で説明する。
【0012】
一方、他の実施形態は、実行時に経路を生成するためにネット構成を使用する。さらに他の実施形態は、経路を検索し、生成するためにネット構成を使用する。例えば、ある実施形態は、他のネットに対する経路を生成しながら、あるネットに対する予め表の形にした経路を検索するためにネット構成を使用する。このようなアプローチの中の1つについては、第V節で説明する。
ある実施形態の場合には、予め表の形にした、または生成した経路が最適の経路である。これらの実施形態の中のあるものも、各ネットに対する可能な解決方法の数を増やすために、レイアウト内の各ネット構成に対する次善の経路を識別するためのルータを含む。このようなアプローチの中の1つについては、第VI節で説明する。
各ネットに対して、プロセス400は、(ステップ415において)そのネットに対して現在の再帰レベルでのネットの経路として識別した経路の中の1つを選択する。このプロセスは、ワイヤの長さの短縮および混雑の低減のようないくつかの目的を最適化する経路を選択する。もっと小さい子スロットを形成するために、現在のスロットの子スロットを分割しなければならない場合には、プロセス400は、(ステップ420において)もっと小さい子スロット内への選択した経路の伝搬を決定する。この段階で、プロセスは、そのような伝搬に見合うように、いくつかのネットに仮想ピンを追加することができる。
【0013】
最後に、ステップ405のところで形成された子スロットが、最後の再帰動作によるスロットでない場合には、プロセス400は、ステップ405のところで形成した各子スロットに対して再帰的に反復する。形成した各子スロットに対して再帰的に反復することにより、プロセス400は、現在の領域内でそのネットに対するもっと多くの詳細な経路を形成する。すなわち、この再帰的プロセス400は、階層的に経路を形成する。この場合、このプロセスは、再帰階層のレベルが高くなるので、より詳細な経路を形成する。
ある実施形態は、再帰的プロセス内の異なるレベルに対する異なる形の分割グリッドを使用する。しかし、下記の実施形態は、すべての再帰レベルに対して同じ形の分割グリッドを使用する。各再帰レベルにおいて、これらの実施形態は、その再帰レベルでのIC領域の座標と一致させるために、分割グリッドの座標を調整する。すべての再帰レベルに対して同じ形の分割グリッドを使用すると、いくつかの利点が得られる。例えば、このプロセスは、再帰的プロセスのすべてのレベルに対して、同じ一組の予め表の形にした情報を再使用することができる。
【0014】
III.多重グリッド
ある実施形態は、分割グリッドの他に1つまたはそれ以上のグリッドを使用する。
A.多重混雑グリッド
ある実施形態は、分割グリッドにより形成されるサブ領域間のルーティング経路の容量を量子化し、混雑を測定するための概念上のモデルとして多重混雑グリッドを使用する。図9は、2つのこのような混雑グリッドである。下記のある実施形態は、図3の八角配線モデルと一緒にこれら2つのグリッドを使用する。
図9においては、2つのグリッドは、(1)3本の水平ラインおよび3本の垂直ラインにより形成されるグリッド905と、(2)7本の+45度の対角線および7本の−45度の対角線により形成されるグリッド910である。グリッド905は、容量を指定し、水平ルーティング経路および垂直ルーティング経路の混雑を測定するために使用され、一方、グリッド910は、容量を指定し、対角線ルーティング経路の混雑を測定するために使用される。
より詳細に説明すると、図10に示すように、グリッド905は、12の垂直縁部(E0〜E11)および12の水平縁部(E12〜E23)を形成し、一方、グリッド910は、9つの−45度縁部(E24、E26、E28、E30、E32、E34、E36、E38、E40)、および9つの+45度縁部(E25、E27、E29、E31、E33、E35、E37、E39、E41)を形成する。図10においては、対角線縁部は、端接する場合に、これら縁部を容易に識別できるように終点を持つ。
図10に示すように、各対角線縁部は、第1のグリッドで形成され、相互に対角線方向に隣接している2つのサブ領域の中心間の距離を走る。すなわち、各対角線縁部は、それらのコーナーの中の1つのところだけで端接するように、対角線方向に整合している2つのサブ領域の中心を接続する。図11は、これらの縁部を見やすくするために、若干小さい対角線縁部を示す。
【0015】
いくつかの実施形態の場合には、グリッド905および910は、また、分割領域の子スロット間のルーティング・パスを形成するために使用する。より詳細に説明すると、グリッド905および910により形成された各縁部に直角に、端接スロット(すなわち、端接サブ領域)を接続するために、ルーティング・ツリーが使用することができるルーティング・パスが存在する。例えば、図12は、図10の42の縁部を横切る配線パスを示す。水平パスP0〜P11は、垂直縁部E0〜E11を横切って形成され、垂直パスP12〜P23は、垂直ルーティング・パスが交差する水平縁部E12〜E23を横切って形成され、+45度パスP24、P26、P28、P30、P32、P34、P36、P38、P40は、−45度縁部E24、E26、E28、E30、E32、E34、E36、E38、E40を横切って形成され、−45度パスP25、P27、P29、P31、P33、P35、P37、P39、P41は、+45度縁部E25、E27、E29、E31、E33、E35、E37、E39、E41を横切って形成される。
混雑の問題は、縁部の容量または、パスの容量により表現および分析することができる。何故なら、これら二組の容量は相互に関連しているからである。下記のプロセスは、パスの容量により容量の問題を分析する。しかし、通常の当業者であれば、縁部の容量により容量の問題を分析するために、類似のプロセスを使用することができることを理解することができるだろう。
以下にさらに説明するように、ある実施形態は、各パスの容量を、パスが交差する縁部の大きさから入手する。例えば、ある実施形態は、対応する直交縁部の大きさ(すなわち、特定のパスに直交する縁部の大きさ)を、特定のパスに対応する金属層のピッチで割ることにより、特定の各パスの容量を計算する。ある実施形態は、金属層のピッチを、ライン−バイア間のピッチとして定義する。ある実施形態は、ライン−バイア間のピッチを、その金属層上の相互接続ライン間の必要最短距離にライン幅の1/2を加え、さらに金属のオーバラップを含むバイアの幅の1/2を加えたものと定義する。
【0016】
ある実施形態の場合には、対角線パスの容量は、マンハッタン・パスの容量とは異なる。このような違いは、対角線パスおよびマンハッタン・パスに直交する縁部の大きさの違いによるものと思われる。また、このような違いは、マンハッタン・ラインのピッチとは異なる対角線のピッチによるものと思われる。さらにまた、このような違いは、もう1つの層のピッチとは異なるある層のピッチによるものと思われる。例えば、いくつかの実施形態の場合には、−45度対金属層のピッチが+45度金属層のピッチと異なる場合には、−45度の対角線パスの容量は、+45度対角線パスの容量とは異なる。
図9の場合には、グリッド905は、図5の分割グリッドと同じものである。しかし、通常の当業者であれば、両方の混雑グリッドは、分割グリッドから異なる場合があることを理解することができるだろう。さらに、図9は、いくつかの実施形態のための2つの混雑グリッド905および910を示す。通常の当業者であれば、他の実施形態も、他の多重グリッド配置構成を使用できることを理解することができるだろう。
ある実施形態は、通常、必要な設計レイアウトおよび/またはICを設計するために使用する配線モデルの配線方向および配線レベルの数に基づいて、混雑グリッドの数および構造を定義する。例えば、ある実施形態は、水平方向、垂直方向、+120度対角線方向、および−120度対角線方向にルーティングすることができる配線モデルを使用する。このような配線モデルの場合には、2つの混雑グリッドを使用することができる。グリッド905のように、第1のグリッドは、容量を定義し、垂直ルーティング・パスおよび水平ルーティング・パスの混雑を測定するために、交差している水平ラインおよび、垂直ラインにより形成することができる。第2のグリッドは、容量を定義し、±120度の対角線ルーティング・パスの混雑を測定するために使用することができる。この第2のグリッドは、第1のグリッドの軸に対して第2のグリッドの軸が120度回転していることを除けば、第1のグリッドに類似しているものであってもよい。すなわち、この第2のグリッドは、多数の交差している±30度のラインにより形成することができる。
【0017】
B.混雑グリッドおよび長さグリッド
ある実施形態は、(1)IC領域を分割し、この領域内の混雑を測定するための第1のグリッド、および(2)この領域内のワイヤの長さのコストを測定するための第2のグリッドを使用する。図13〜図18は、いくつかのこのような実施形態を示す。これらの実施形態は、水平ライン、垂直ライン、および、±45度相互接続ラインを含む配線モデルを使用する。通常の当業者であれば、他の実施形態は、(±120度ラインを使用すう配線モデルのような)他の配線モデルを使用する。
図13は、ある実施形態が、IC領域を16のサブ領域に分割するために使用する第1のグリッド1305を示す。このグリッドは、また、この領域内のマンハッタン相互接続ラインおよび非マンハッタン相互接続ラインの混雑を測定するために使用される24の縁部E0〜E23を定義する。図14に示すように、24のマンハッタン・パスP0〜P23および48の対角線パスP24〜P71は、これら24の縁部E0〜E23を横切って形成される。各パスは、縁部に対応するパスを横切るパスの方向の配線の1つまたはそれ以上のトラックを表す。
垂直縁部E0〜E11は、水平パスP0〜P11の方向、および±45度対角線パスP24〜P29、P38〜P43、P52〜P57およびP66〜P71の方向に、これらの垂直縁部を横切るワイヤの(すなわち、相互接続ラインの)混雑を測定するために使用される。同様に、水平縁部E12〜E23は、垂直パスP12〜P23、および±45度対角線パスP30〜P37、P44〜P51および、P58〜P65の方向に、これら水平縁部を横切るワイヤの混雑を測定するために使用される。
【0018】
ある実施形態は、パスP0〜P71により各経路を定義する。パスP0〜P71は、また、IC領域内の混雑を測定するために使用される。ある実施形態の場合には、対角線パスP24〜P71沿いの容量は、マンハッタン・パスP0〜P23沿いの容量より小さい。例えば、ある実施形態は、(1)各マンハッタン・パスは、最も低いレベルの(すなわち、Gcellレベルの)子スロットのところのワイヤの8トラックを表し、(2)各対角線パスが、対角線層およびマンハッタン層が同じピッチを持っている場合、Gcellレベルのところのワイヤの5トラックを表すように指定する。ある実施形態は、対角線パスの層のピッチが、マンハッタン・パス層のピッチより広い場合、Gcellレベルのところで、対角線パスに対して4トラック以下を指定する。
すでに説明したように、ある実施形態は、この領域内の経路のワイヤの長さのコストを測定するために第2のグリッドを使用する。この長さグリッドは、各混雑グリッドの子スロットをもっと小さなスロットに分割する。例えば、図15は、グリッド1305の16の各混雑グリッドの子スロットを、4つのスロットに分割する長さグリッドを示し、一方、図16は、グリッド1305の16の各混雑グリッドの子スロットを16のスロットに分割する長さグリッドを示す。他の実施形態は、混雑グリッドの子スロットを分割するために、他のタイプのグリッド(例えば、3×5グリッド)を使用する。
【0019】
図17は、図15の2×2の分割が、各混雑グリッドの子スロット内の、結果として得られる4つのスロット間のルーティング用の6つのパスを定義し、一方、図18は、図16の4×4の分割が、各混雑グリッドの子スロットの、結果として得られる16のスロット間をルーティングするための42のパスを定義する様子を示す。さらに、各タイプの分割は、隣接する混雑グリッドの子スロットの長さグリッド・スロット間の数本のパスを定義する。これらのパスについては、以下にさらに詳細に説明する。
長さグリッドは、すべてのネット・ピンを接続するために、長さグリッド・パスを横切る1つまたはそれ以上のセグメントを識別することにより、各ネットの経路のワイヤ長さのコストを推定するために使用される。すなわち、ネット経路の場合、推定したワイヤ長さのコストは、(1)ネット・ピンを含む長さグリッド・スロットを接続していて、(2)ネット経路が使用する混雑グラフ・パスと同じ方向の混雑グラフ・パスを横切る一組の長さグリッド・パスの長さである。一組の長さグリッド・パスのワイヤ長さコストは、ネット・ピンを含む長さグリッド・スロットを接続している内部パス(すなわち、混雑グリッド・スロット内の長さグリッド・パス)のコストに入射混雑グラフ縁部を横切る周辺長さグリッド・パスのコストを加えたものを含む。
ある実施形態の場合には、周辺長さグリッド・パス(すなわち、混雑グリッド・スロット間の長さグリッド・パス)への混雑グリッド・パスの伝搬は、長さグリッドに対するネット・ピン構成の仮想ピンの設定を必要とする場合がある。さらに、内部長さグリッド・パスは、ネットの実際のまたは仮想のピンを含む長さグリッド・スロットを接続する。また、すでに説明したように、周辺長さグリッド・パス(すなわち、混雑グラフ縁部を横切るパス長さグリッド・パス)は、ネット経路が使用する混雑グラフ・パスと同じ方向を向いている混雑グラフ縁部を横切る。
【0020】
図17および図18は、対角線方向に隣接する混雑グリッドの子スロット間の対角線方向の長さグリッド・パスを示す。これらの図面においては、このような対角線方向の長さグリッド・パスは、点線の○で囲んである。ある実施形態は、このような対角線方向の長さグリッド・パスを定義し、他の実施形態はこのような定義を行わない。
また、対角線方向に隣接する混雑グリッドの子スロット間の対角線方向の長さグリッド・パスを持ついくつかの実施形態は、これらの対角線方向の長さグリッド・パスを、対角線方向の混雑グラフ・パスと相互に関連付けるために、特定の申し合わせを使用する。ある実施形態の場合には、このような−45度の長さグリッド・パスは、その対応する底部および左の混雑グラフ・パス、またはその対応する頂部および右の混雑グラフ・パスに接続している。例えば、−45度の長さグリッド・パスが、混雑グラフ子スロット9および12間に使用されている場合には、ある実施形態は、パス53および59のパスの使用を1だけ増加し、一方、他の実施形態は、パス61および67のパスの使用を1だけ増加する。(図14は、パス53、59、61および67を示す。)
同様に、いくつかの実施形態は、+45度の長さグリッド・パスは、その対応する底部および右の混雑グラフ・パス、またはその対応する頂部および左の混雑グラフ・パスに接続している。例えば、+45度の長さグリッド・パスが、混雑グラフ子スロット8および13間に使用されている場合には、いくつかの実施形態は、パス58および66のパスの使用を1だけ増加し、一方、他の実施形態は、パス52および60のパスの使用を1だけ増加する。(図14は、パス52、58、60および66を示す。)
【0021】
別の方法としては、いくつかの実施形態は、対角線方向に隣接する混雑グリッドの子スロット間の対角線方向の長さグリッド・パスを周囲の4つの混雑グラフ・パスの中の1本だけに接続し、1つの追加のトラックをこの混雑グラフ・パスの容量に割り当てる。いくつかの実施形態は、−45度の長さグリッド・パスを、その対応する左の混雑グラフ・パスに接続し、+45度の長さグリッド・パスをその対応する右の混雑グラフ・パスに接続する。このアプローチを使用する場合には、いくつかの実施形態は、混雑グラフ子スロット9および12間の−45度の長さグリッド・パスを、パス59に関連付け、パス53に5の容量を割り当てる一方で、Gcellレベルで、パス59に6の容量を割り当てる。
さらに他のいくつかの実施形態は、混雑グラフの子スロット間の対角線方向の長さグリッド・パスを対角線方向の混雑グラフ・パスP0〜P71と相互に関連付けない。代わりに、これらの実施形態は、18組の対角線方向に隣接する混雑グラフ・パス間の18の追加の対角線方向の混雑グラフ・パスを定義する。これら18の追加の各混雑パスは、特定の長さグリッド・パスに対応する。また、Gcellレベルのところで、いくつかの実施形態は、これら18の各追加パスが、1トラック幅になるように定義する。
他の実施形態は、別の方法で混雑グリッドおよび長さグリッドを使用する。例えば、いくつかの実施形態は、混雑グリッド1305に対するネット構成に基づいて経路を識別し、次に、識別した経路のワイヤ長さコストおよび混雑コストを計算するために、長さグリッドおよび混雑グリッドを使用する。他の実施形態は、長さグリッドを通してネットに対する経路を継続的に拡張する。各拡張および、潜在的な拡張の場合、これらの実施形態は、拡張または潜在的な拡張をコストを見積もるために、長さグリッドを使用する。拡張または潜在的な拡張が、混雑グリッド縁部の中の1つを横切る場合には、これら実施形態は、それに対する混雑コストを要因として考慮する。また、すでに説明したように、いくつかの実施形態は、最終的に、混雑グリッドを横切って形成されたパスP0〜P71により、各経路だけを定義するが、他の実施形態は、そのような定義は行わない。
【0022】
IV.配線モデルの適応選択
いくつかの実施形態は、設計領域(すなわち、設計中の領域)のアスペクト比(高さ対幅の比)に基づいてその配線モデルを適応できるように選択する。図19は、適応できるような選択を行うためのプロセス1900である。このプロセスは、通常、プロセス400の405のところでの分割グリッドの定義の前に実行される。いくつかの実施形態の場合には、設計者は、手動でこのプロセスのいくつかの動作またはすべての動作を行い、一方、他のいくつかの実施形態の場合には、ルータが、自動的にこのプロセスのいくつかの動作またはすべての動作を行う。
このプロセスは、(ステップ1905において)最初に、設計領域のアスペクト比を識別する。アスペクト比を識別するために、プロセスは、設計領域の大きさに基づいてこのアスペクト比を計算することができるし、または、設計ブロックに対する予め表の形にしたアスペクト比を検索することができる。このプロセスは、次に、(ステップ1910において)識別したアスペクト比に基づいて配線モデルを選択する。あるいくつかの実施形態の場合には、次に、プロセス1900は、(ステップ1915において)分割グリッドおよび/または混雑グリッドを適応できるように選択する。あるいくつかの実施形態の場合には、このプロセスは、配線モデルに基づいて、分割グリッドおよび/または混雑グリッドを適応できるように選択する。
【0023】
配線モデルを適応できるように選択することにより、いくつかの設計目標(例えば、ワイヤの長さの最短距離への短縮および混雑のを最小限度への低減)を達成するために、設計領域をルーティングすることができる。例えば、比較的大きなアスペクト比を持つ回路ブロック(すなわち、高さが高くまた細長い回路ブロック)を設計している場合には、いくつかの実施形態は、水平方向、垂直方向、±120度の対角線方向でルーティングすることができる配線モデルを、適応できるように選択することができる。何故なら、このような配線モデルは、回路ブロックのようなルーティングの場合、ワイヤの長さを短くし、混雑を低減するからである。このような配線モデルの場合、いくつかの実施形態は、交差している水平ラインおよび垂直ラインにより形成されている、(図9のグリッド905のような)第1の混雑グリッド、およびすでに説明したように、交差している±30度ラインにより形成されている第2の混雑グリッドを使用する。
また、このような配線モデルおよびIC領域の場合には、いくつかの実施形態は、IC領域を大きなアスペクト比を持つもっと小さい領域に分割する分割グリッドを使用する。このようないくつかの実施形態の場合には、対角線方向に隣接する分割領域は、相互に120度ずれているその中心を持っているので、その中心は、120度の対角線で接続することができる。
大きなアスペクト比を持つ設計ブロックに対しては、多数の他の配線モデルを使用することができる。例えば、他の配線モデルとしては、水平方向、垂直方向、±45度対角線方向、および±120度対角線方向にルーティングすることができる配線モデルがある。このような配線モデルの場合には、いくつかの実施形態は、下記の3つの混雑グリッド、すなわち、(1)水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、(図9のグリッド905のように)形成されている第1のグリッド、(2)±120度のパス用のものであって、交差している±30度のラインにより形成されている第2のグリッド、(3)±45度のパス用のものであって、交差している±45度の対角線により形成されている第3のグリッドを使用することができる。
【0024】
同様に、小さなアスペクト比を持つ設計ブロック(すなわち、高さが低く幅の広いブロック)に対しては、多数の配線モデルを使用することができる。例えば、いくつかの実施形態は、このようなブロックに対して、水平方向、垂直方向、±30にルーティングすることができる配線モデルを選択することができる。このような配線モデルの場合には、いくつかの実施形態は、下記の2つの混雑グリッド、すなわち、(1)水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、(図9のグリッド905のように)形成されている第1のグリッド、(2)±30度の対角線パス用のものであって、交差している±120度のラインにより形成されている第2のグリッドを使用することができる。
このような配線モデルおよびICグリッドの場合には、いくつかの実施形態は、IC領域を小さなアスペクト比を持つもっと小さい領域に分割する分割グリッドを使用する。このようないくつかの実施形態の場合には、対角線方向に隣接する分割領域は、相互に30度ずれているその中心を持っているので、その中心は、30度の対角線で接続することができる。
このようなブロック用のもう1つの配線モデルとしては、水平方向、垂直方向、±45度の対角線方向、および、±30度の対角線方向にルーティングすることができる配線モデルがある。このような配線モデルの場合には、いくつかの実施形態は、下記の3つの混雑グリッド、すなわち、(1)水平パスおよび垂直パス用のものであって、交差している水平ラインおよび垂直ラインにより、(図9のグリッド905のように)形成されている第1のグリッド、(2)±30度の対角線パス用のものであって、交差している±120度のラインにより形成されている第2のグリッド、(3)±45度の対角線パス用のものであって、交差している±45度の対角線により(図9のグリッド910のように)形成されている第3のグリッドを使用することができる。
【0025】
設計ブロックが正方形である場合には、いくつかの実施形態は、好適には、図3のところで説明した5層の八角配線モデルのような対称形の配線モデルを選択することが好ましい。しかし、この場合には、他のいくつかの実施形態は、もっと複雑な配線モデルを使用することができる。例えば、いくつかの実施形態は、図3の第1の5層の他に、図3の層2〜5に類似している他の4つの層を含むことができる。このような配線モデル用の一組の混雑グリッドは、層2〜5に対して上記グリッド905および910、および層6〜9に対して他の2つのグリッド905および910を含むことができる。
いくつかの実施形態が使用することができるもう1つの複雑な対称形の配線モデルは、最後の4つの層(すなわち、層6〜9)内の好適な方向が、同じ方向に22.5度だけずれている点を除けば、上記9層モデルに類似している。このように類似しているので、各ルーティング・パスの方向が、その隣接するルーティング・パスの方向から22.5度である、任意の所与の点から16のルーティングを供給する。このような配線モデルに対する一組の混雑グリッドは、層1〜5に対して上記のグリッド905および910、および層6〜9に対して22.5度ずれているグリッド905および910というもう1つの2つのグリッドを含むことができる。
【0026】
V.予め表の形にするルーティング情報
すでに説明したように、いくつかの実施形態は、記憶装置内に、子スロットの異なる構成に対する経路を予め計算し、記憶する。実行時に、これらの実施形態のルータは、(1)分割グリッドに対する各ネットの構成を識別することにより、(2)記憶構造体から、識別した構成に対する経路検索することにより、ネットに対する経路の一部または全部を識別する。シュタイナー・ツリー経路を予め表の形にする1つの方法については、図20〜図34を参照しながら以下に説明する。
一方、他のいくつかの実施形態は、リアルタイムで経路を生成するために、ネット構成を使用する。さらに他のいくつかの実施形態は、経路を生成し、検索するためにネット構成を使用する。例えば、いくつかの実施形態は、いくつかのネットに対する経路を予め表の形にした経路を検索し、他のネットに対する経路を生成するために、ネット構成を使用する。図35〜図38を参照しながら、このようなアプローチの1つについて以下に説明する。
【0027】
A.シュタイナー・ツリー経路を予め表の形にする方法
図20〜図34は、分割グリッドに対する可能なネット構成をモデル化する、シュタイナー・ツリーを予め表の形にする1つの方法を示す。これらのツリーの属性を予め表の形にする方法についても以下に説明する。すでに説明したように、ルータは、ルーティング・プロセス中に、このように予め表の形にされた経路および/または属性を使用することができる。他のEDAアプリケーションも、これらの経路および/または属性を使用することができる。例えば、2000年12月6日付けの、「再帰的分割設置方法および装置」という名称の米国特許出願番号09/732,181が開示しているように、プレーサは、設置コストを知るために、予め表の形にしたワイヤの長さ、パス・カウント値、および/またはパス確率値を使用することができる。
【0028】
1.ツリーの2つのノードを接続している相互接続ラインの長さの計算
図20および図21は、いくつかの実施形態が、どのようにして、ツリーの2つのノードを接続している相互接続ラインの長さを測定するかを示す。これらの実施形態は、2つのノードを、長い辺(L)と短い辺(S)とを持つ囲みボックスの対向する隅として処理することによりこれらの動作を実行する。
図20は、2つのノード2035および2040に対する囲みボックス2005の一例である。この図に示すように、ライン2010は、水平相互接続ライン、垂直相互接続ライン、および対角線相互接続ラインを使用するレイアウトに対してノード2035および2040間の短い距離を通る。このラインの一部は対角線である。より詳細に説明すると、この例の場合には、このラインの1つにセグメント2020は対角線であり、一方他のセグメント2015は水平ラインである。
下式(A)は、ライン2010が通る距離、(すなわち、ノード2035と2040間の最短距離)を供給する。
距離=[L−{S(cosA/sinA)}]+S/sinA (A)
ここで、「L」は、この例においてはx軸沿いのボックスの幅2025である長い辺であり、一方、Sは、この例においてはy軸沿いのボックスの高さ2030である、ボックスの短い辺である。また、ここで、「A」は、対角線セグメント2020と囲いボックスの長い方の辺との間の角度である。いくつかの実施形態の場合には、この角度Aは、レイアウト内の対角線方向の相互接続ラインに対応する。例えば、いくつかの実施形態の場合には、レイアウトが図3の八角配線モデルを使用している場合には、角度Aは45度である。
式(B)〜(D)は、式(A)を導き出す方法を示す。ライン2010の長さは、2つのセグメント2015および2020の長さの和に等しい。式(B)により水平セグメント2015の長さを求めることができ、式(C)により対角線セグメント2020の長さを求めることができる。
2015の長さ=L−(2020の長さ)*(cosA) (B)
2020の長さ=S/sinA (C)
簡単にした場合上式(A)になる下式(D)を求めるために、式(B)および(C)を一緒にすることができる。
距離=2015の長さ+2020の長さ
=L−S/sinA*(cosA)+S/sinA (D)
角度Aが45度である場合には、式(A)を簡単にして、下式(E)にすることができる。
距離=L+S*(sqrt(2)−1) (E)
囲みボックスの幅および高さがゼロである場合には、囲みボックスは1本のラインになり、このラインの両端間の距離は、水平ラインの場合もあるし、垂直ラインの場合もある、ボックスの長い(そして唯一の)辺となる。囲みボックスの高さおよび幅が等しい場合、(すなわち、正方形である場合)であり、角度Aが45度である場合には、完全な対角線であるラインは、囲みボックスの2つの対向する隅間の最短距離を示す。
【0029】
図21は、ツリーの2つのノードに対する囲みボックスを識別し、囲みボックスの大きさおよび式(A)に基づく2つのノードを接続している相互接続ラインの長さを計算するプロセス2100を示す。このプロセスは、(ステップ2105において)最初に、第1のノードのx座標(X1)が、第2のノードのx座標(X2)より長いかどうかを判断する。そうである場合には、プロセスは、(ステップ2110において)第1のノードのx座標(X1)を最大x座標(XMAX)として定義し、第2のノードのx座標(X2)を最小x座標(XMIN)として定義する。そうでない場合には、プロセスは、(ステップ2115において)第2のノードのx座標(X2)を最大x座標(XMAX)として定義し、第1のノードのx座標(X1)を最小x座標(XMIN)として定義する。
次に、このプロセスは、(ステップ2120において)第1のノードのy座標(Y1)が第2のノードのy座標(Y2)より長いかどうかを判断する。そうである場合には、プロセスは、(ステップ2125において)第1のノードのy座標(Y1)を最大y座標(YMAX)として定義し、第2のノードのy座標(Y2)を最小y座標(YMIN)として定義する。そうでない場合には、プロセスは、(ステップ2130において)第2のノードのy座標(Y2)を最大y座標(YMAX)として定義し、第1のノードのy座標(Y1)を最小y座標(YMIN)として定義する。
次に、プロセスは、(ステップ2135において)囲みボックスの4つの座標を、(XMIN,YMIN)、(XMIN,YMAX)、(XMAX,YMIN)および(XMAX,YMAX)として定義する。次に、プロセスは、(ステップ2140において)囲みボックスの幅および高さを測定する。次に、プロセスは、(1)ボックスの最大x座標および最小x座標間の距離を測定することにより幅を、(2)ボックスの最大y座標および最小y座標を測定することにより高さを測定する。次に、プロセスは、(ステップ2145において)計算した幅が計算した高さより長いかどうかを判断する。そうである場合には、プロセスは、(ステップ2150において)幅を長い辺と定義し、高さを短い辺と定義する。そうでない場合には、プロセスは、(ステップ2155において)幅を短い辺と定義し、高さを長い辺と定義する。
ステップ2150および2155の後で、プロセスは、(ステップ2160において)2つのノードを接続している最短の相互接続ラインの長さを計算するために式(A)を使用する。これでプロセスは終了する。
【0030】
2.すべての可能なネット構成に対するシュタイナー・ツリーの形成と、各ツリーに対する長さおよび配線パス情報の予め表の形による表示
図22は、(1)分割グリッドに対する可能な各ネット構成に対する1つまたはそれ以上の最適なシュタイナー・ツリーを形成し、(2)参照テーブル(「LUT」)のような記憶構造体内へ各シュタイナー・ツリーの長さを記憶し、(3)グリッド内の各ワイヤ・パスを使用するツリーの確率を計算し、記憶し、(4)記憶構造体内に各ツリーに対するワイヤ・パスを記憶することにより、各ツリーの同一性を記憶するプロセス2200を示す。
このプロセス2200は、ルータがその動作をスタートする前に行われるので、ルータは、各ネット構成に対してシュタイナー・ツリーをリアルタイムで形成する必要はない。代わりに、プロセス2200のおかげで、ルータは(1)特定のグリッドに対する各ネットの構成を識別し、(2)識別した構成に対して記憶している属性を検索するだけでいい。
図22に示すように、プロセス2200は、最初に、(ステップ2205において)特定の分割グリッドにより定義された(スロットとも呼ぶ)各サブ領域に対してツリー・ノードの定義することによりスタートする。図23は、4×4分割グリッドにより生成された16のスロットに対する16のツリー・ノード2305を示す。これらのノードは、すべてのネット構成の相互接続ライン・トポロジーをモデル化するツリーの潜在的なノードを示す。図23の場合には、識別されたノードは、各スロットの中心に位置する。他の実施形態の場合には、ノードは、スロット内の他の位置に均等に定義することができる(例えば、スロットの隅の中の1つに均等に位置させることができる)。
【0031】
次に、プロセス2200は、(ステップ2210において)一組のN個の可能なノード構成を定義する。分割グリッドが、Y個(例えば、4、9、16、20等)のサブ領域を定義した場合には、一組のNは、2Yのノード構成を含む。可能なノード構成の一組のNを定義した後で、プロセス2200は、(ステップ2215において)この一組から可能なノード構成NTの中の1つを選択する。
次に、プロセスは、(ステップ2220において)ステップ2215で選択したノード構成に対する1つまたはそれ以上の最短距離接続ツリー(「MST」)を形成し、形成された各ツリーの長さ(MSTコスト)を計算する。以下にさらに説明するように、形成された各MSTは、全体がまたはその一部が対角線である縁部を持つことができる。1つ以下のノードを持つノード構成は、MSTを持たないので、そのMSTコストはゼロである。さらに、図25Aは、1つまたはそれ以上のMSTを形成し、2つまたはそれ以上のノードを含むノード構成に対する各MSTの長さを計算するプロセス2500を示す。このプロセス2500については以下に説明する。
ステップ2220の後で、プロセス2200は、(ステップ2225において)潜在的なシュタイナー・ノードを識別し、次に、(ステップ2230において)シュタイナー・ノードのすべての可能な組合わせを定義する。図24を参照しながら、潜在的なシュタイナー・ノードを識別する1つの方法について以下に説明する。ステップ2230で定義されたシュタイナー・ノードの各組は、ステップ2225で識別された1つまたはそれ以上のシュタイナー・ノードを含む。また、シュタイナー・ノードの定義された各組は、選択したノード構成のノードの数より少ない2つのノードである最大の大きさを持つ。
【0032】
次に、ステップ2230で識別されたシュタイナー・ノードの各組に対して、プロセスは、(ステップ2240において)(1)選択したノード構成および選択したシュタイナー・ノードの組内のノードの1つまたはそれ以上のMSTを形成し、(2)各MSTの長さ(MSTコスト)を計算し、記憶する。形成された各MSTは、全体がまたはその一部が対角線である縁部を使用することができる。すでに説明したように、1つ以下のノードを持つノード構成は、MSTを持たないので、そのMSTコストはゼロである。さらに、図25Aは、1つまたはそれ以上のMSTを形成し、2つまたはそれ以上のノードを含むノード構成に対する各MSTの長さを計算するプロセス2500を示す。このプロセス2500については、以下にさらに詳細に説明する。
次に、プロセス2200は、(ステップ2240において)ステップ2220または2235のところで生成したMSTの最短の組を、現在のノード構成に対する最適なシュタイナー・ツリーとして選択する。他の実施形態の場合には、このプロセスは、その一組のシュタイナー・ツリーを選択するのに他の基準を使用する。ステップ2240において、プロセスは、また、(LUTのような)記憶構造体内に、ステップ2240のところで識別した1つまたは複数のシュタイナー・ツリーの長さ(MSTコスト)を記憶する。
ステップ2240において現在のノード構成に対する1つまたはそれ以上のシュタイナー・ツリーを選択した後で、プロセス2200は、(ステップ2245において)選択したシュタイナー・ツリーから得られるルーティング・パス情報およびパス使用の確率を計算するために、プロセス2600を呼び出す。このプロセスについては、図26を参照しながら以下に説明する。
次に、プロセス2200は、(ステップ2250において)自分がステップ2210のところで定義した一組のN内のすべてのノード構成をチェックしたかどうかを判断する。チェックが終わっていない場合には、プロセスは、この一組からチェックしていないノード構成を選択し、新しく選択したノード構成に対してステップ2220〜45を反復して行うためにステップ2215に戻る。そうでない場合には、プロセスは終了する。
【0033】
図24は、潜在的なシュタイナー・ノードを識別するためのプロセス2400である。図24のプロセス2400は、3つまたはそれ以上のノードを含むノード構成に対してだけ行えばよい。何故なら、ステップ2220のところで定義したシュタイナー・ノードの各組は、選択したノード構成のノードの数より少ない2つのノードの最大の大きさを持つからである(すなわち、何故なら、シュタイナー・ノードの組は、2つまたはそれ以下のノードを含むノード構成に対して、ステップ2220において定義されていないからである)。
プロセス2400は、(ステップ2405において)ステップ2215において選択したノード構成の一部ではないステップ2205において定義したすべてのノードに等しい潜在的なシュタイナー・ノードのP組を初期化することによりスタートする。次に、このプロセスは、(ステップ2410において)潜在的なシュタイナー・ノードの中の1つを選択する。次に、プロセス2400は、(ステップ2415において)ステップ2410において選択したノード(Q)が、選択したノード構成の任意の2つのノード間の最短パス上に位置するかどうかを判断する。この判断を行うために、プロセスは、2つのノード(BおよびC)間の距離が、第1のノード(B)と選択したノード(Q)間の距離(1)と、第2のノード(C)と選択したノード(Q)間の距離(2)との和に等しくなるように、ノード構成で任意の2つのノード(BおよびC)が抜け出すかどうかを判断する。いくつかの実施形態の場合には、プロセスは、任意の一組のノード間の距離を計算するために、上記プロセス2100および式(A)を使用する。
【0034】
プロセスが、ステップ2410において選択したノードQが、ノード構成の任意の2つのノード間の最短パス上に位置すると判断した場合には、プロセスは、(ステップ2420において)選択したノードを潜在的なシュタイナー・ノードのP組内に維持し、このノードをチェック済みのノードとしてフラグを立て、以下に説明するステップ2430に進む。一方、選択したノード(Q)が、選択したノード構成の任意の2つのノード間の最短パス上に位置していない場合には、プロセスは、(ステップ2425において)潜在的なシュタイナー・ノードのP組から選択したノードを除去し、ステップ2430に進む。
ステップ2430において、プロセスは、自分が潜在的なシュタイナー・ノード内のすべてのノードをチェックしたかどうかを判断する。チェックが終わっていない場合には、プロセスは、この組内のもう1つのノードを選択するためにステップ2410に戻り、それにより、プロセスは、ステップ2415において、このノードが選択したノード構成の任意の2つのノード間の最短パス上に位置しているかどうかを判断する。プロセスが(ステップ2430において)潜在的なシュタイナー・ノードの組内のすべてのノードのチェックは終了したと判断した場合には、プロセスは終了する。
図25Aは、図22のプロセス2200が、最短距離接続ツリーを形成するために、ステップ2220および2235において使用するプロセス2500である。あるノード構成に対する最短距離接続ツリーは、ノードのところでだけ分岐する(すなわち、スタートまたは終了する)最短経路を通して、構成のN個のノードを接続する(すなわち、スパンする)N−1の縁部を持つツリーである。
【0035】
本発明のいくつかの実施形態の場合には、MSTの縁部は、水平ラインであっても、垂直ラインであっても、対角線であってもよい。対角線縁部は、全部またはその一部が対角線であるものであってもよい。また、レイアウトが、対角線相互接続ライン(例えば、±45度の相互接続ライン)を使用している場合には、MSTの対角線縁部は、レイアウト内の対角線相互接続ラインの一部のように、同じ方向(例えば、±45度方向)を向いていてもよい。例えば、レイアウトが八角配線モデルを使用している場合には、(すなわち、水平ライン、垂直ラインおよび45度の対角線を使用している場合には)いくつかの実施形態は、水平縁部、垂直縁部および45度対角線縁部を持つMSTを形成する。
MSTの各縁部の2つのノードを囲みボックスの2つの対向コーナーとして処理することにより、上記プロセス2100および式(A)を使用して、各縁部の長さを入手することができる。
距離=[L−{S(cosA/sinA}]+S/sinA (A)
すでに説明したように、この式においては、「L」は、ボックスの長い辺であり、「S」は、ボックスの短い辺であり、「A」は、縁部の対角線セグメントと囲みボックスの長い辺とが形成する角度である。
【0036】
プロセス2500は、プロセス2200が、(ステップ2220または2235において)(1)M組のノードに対して1つまたはそれ以上のMSTを形成するために、(2)形成された各MSTの長さを計算するために、プロセス2500を呼び出した場合何時でもスタートする。このプロセスは、最初に、(ステップ2505において)MSTの長さ(MSTコスト)をゼロに設定する。次に、プロセスは、(ステップ2510において)(1)接続ツリーの第1のノードとして、受け取ったM組のノードから1つのノードを選択し、(2)このノードをこのM組から除去する。
次に、プロセス2500は、(ステップ2515において)1つまたはそれ以上の完全なMSTを表す1つまたはそれ以上のノードのリンクした組を識別するために、図25Bのプロセス2550を呼び出す。このプロセス2550は、呼び出された場合、(1)不完全なMSTを表す一組のノード、および(2)受け取った不完全なMSTにまだ追加していなかったノード構成のノードである一組のノードMを受け取る再帰的プロセスである。プロセス2500が、プロセス2550を呼び出すと、このプロセスは、プロセス2550に、ステップ2510において選択した第1のノード、および残りのノードMの修正した一組を供給する。これに応じて、再帰的プロセス2550は、以下にさらに詳細に説明するように、1つまたはそれ以上のMSTを表すノードの1つまたはそれ以上のリンクした組を返送する。プロセス2550は、同じリンクしたノードの組の1つまたはそれ以上のコピーを返送することができる。それ故、プロセス2500が、プロセス2550から1つまたはそれ以上のリンクしたノードの組を受け取った後で、プロセス2500は、(ステップ2520において)同じ受信したリンクしたノードの組のすべての複写コピーを除去し、その結果、受け取った各ノードの組のコピーは1つだけになる。ステップ2520の後で、プロセス2500は、形成したMSTおよびその長さを返送し、終了する。
【0037】
図25Bに示すように、プロセス2550は、(ステップ2525において)呼び出された場合に受信するM組のノードに等しい残りのR組のノードを定義する。ステップ2530において、プロセス2550は、残りのノードの組Rから1つのノードを選択し、残りのノードの組から選択したノードを除去する。次に、プロセスは、(ステップ2535において)ステップ2530において選択したノードと、受信した不完全なMSTの現在の各ノード間の距離を計算し、記憶する。選択したノードと各ノード間の距離は、対角線全体またはその一部である縁部により横切ることができる。それ故、いくつかの実施形態の場合には、プロセス2550は、選択したノードと各ノード間の最短距離を計算するために、上記プロセス2100および式(A)を使用する。
次に、プロセスは、(ステップ2540において)R組内に残っているノードがあるかどうかを判断する。残っている場合には、プロセスは、この組からもう1つのノードを選択するためにステップ2530に戻り、その結果、プロセスは、(ステップ2535において)このノードと接続ツリーの現在のノード間の距離を計算することができる。そうでない場合には、プロセスは、(ステップ2545において)ステップ2535において記録した最短距離を識別し、この距離から得られる1つまたは複数のノード・ペアを識別する(この場合、各ペア内においては、1つのノードは、受け取った組Mからのものであり、1つのノードは、受け取ったMSTからのものである)。
【0038】
次に、プロセス2550は、(ステップ2555において)MSTの長さ(MSTコスト)への識別した最短距離を加える。次に、プロセスは、(ステップ2560において)最も近いノードの1つ以上のペアを識別したかどうかを判断する。識別してない場合には、(すなわち、識別した最短距離が、組M内のただ1つのノードおよびMST内のただ1つのノード間のものである場合には)、プロセスは、(ステップ2565において)(1)ステップ2545において識別したM組のノードに対応するツリー・ノードを定義し、(2)識別したノードを組Mから除去し、(3)識別したツリー・ノードをステップ2545において識別したMSTノードにリンクする。ステップ2565において、プロセス2550は、また、識別したノードを除去した後、組Mが空である場合には、再帰的に自分自身を呼び出し、修正したMSTおよび修正した組Mを供給する。一方、修正した組Mが空の場合には、プロセス2550は、ステップ2565からステップ2575へ進み、そこでこのプロセスは、ステップ2565において完全になった1つの完全なMSTを表す一組のノードを返送する。ステップ2575の後で、プロセス2550は終了する。
プロセス2550が、(ステップ2560において)1つ以上の「最も近い」ノード・ペアを(ステップ2545において)識別したと判断した場合には、このプロセスは、識別した最も近い各ノード・ペアに基づいて、完全なMSTを順次、再帰的に入手しようとする。すなわち、このプロセスは、最初、識別したノード・ペアの中の1つを選択し、次に、(1)組Mから選択したペアの組Mのノードを除去し、(2)除去したノードをペアのMSTノードにリンクし、(3)修正したMSTおよび修正した組Mに対して再帰的に反復する。プロセス2550がこの再帰の結果を受け取ると、(すなわち、このプロセスが選択したノード・ペアに対する完全なMSTを受け取ると)プロセス2550は、このノード・ペアに基づいて、完全なMSTを入手するために、同じ3つの動作を実行する。このプロセスは、このプロセスが、識別した「最も近い」各ノード・ペアに基づいてMSTを生成するまで、この方法で引き続き行われる。識別した各ノード・ペアを順次処理した後で、プロセスは、(ステップ2575において)MSTを返送し、終了する。
【0039】
図26は、ステップ2250において選択したシュタイナー・ツリーからのルーティング・パス情報およびパス使用確率を計算するプロセス2600を示す。このプロセス2600は、プロセス2200が、ステップ2245においてプロセス2600を呼び出し、それに一組のシュタイナー・ツリーを供給する度にスタートする。
プロセス2600は、(ステップ2605において)各パスに対するカウント値を記憶するグローバル・カウント変数を初期化することによりスタートする。受け取った各ツリーに対して、プロセスは、(ステップ2610において)そのツリーのルーティング・パス情報を記憶するためのビット・ストリングを初期化する。次に、プロセスは、(ステップ2615において)受け取ったシュタイナー・ツリーを選択し、(ステップ2620において)ツリー内の縁部の中の1つを選択する(すなわち、ツリー内のリンクしているノードの1つのペアを選択する。この場合、これらのノードは、プロセス2550のステップ2565または2570においてリンクされる)。次に、プロセスは、(ステップ2625において)パスの1つ以上のペアが、選択したツリー縁部をルーティングするために(すなわち、ノードの選択したペアを接続するために)存在するかどうかを判断する。いくつかの実施形態の場合には、プロセスは、ツリー・スロット・ノードの任意の組合わせに対するパス使用値を記憶している記憶構造体(例えば、LUT)から、選択したツリー縁部に対するパス値を検索する。すなわち、この記憶構造体は、パス使用値を設定するために、グリッド内の可能な各ツリー縁部の終点をマッピングする。
ツリー縁部の終点が隣接していない場合には(すなわち、ステップ2620において選択したノードのペアが隣接していない場合には)、終点間に(すなわち、ノード・ペア間に)2つ以上の最適な経路が存在する。それ故、LUT内のパス使用値は、複数の最適経路に対して値を指定することができる。
【0040】
図6〜図8の3つのシュタイナー・ツリーを表すことができる、二組のノード接続は、(1)図6のシュタイナー・ツリー605に対する、ノード610−ノード615−シュタイナー・ノード620−ノード625−ノード630により形成されたノード・セットであり、(2)図7または図8のシュタイナー・ツリーに対する、ノード625−ノード610−ノード615−ノード635により形成されたノード・セットである。
図6のシュタイナー・ツリー605を表すノードの第1のセット内においては、ノードの任意の接続しているペア間には、1つの経路が存在するだけである。それ故、このセットからの任意のペアの場合には、LUTのマッピングは、選択したノード・ペア間の経路に対する値を除いて、0に等しいすべての値と一緒に、42の値が返送される。このゼロでない値は、選択したノード・ペア間に1つの経路しか存在しないことを示す1である。
一方、シュタイナー・ツリー705または805を表すノードの第2の組の場合には、ノード615とノード630との間に2つの経路が存在する。このシュタイナー・ツリー705は、これらの経路の中の1つの経路を使用し、一方、シュタイナー・ツリー805は他の経路を使用する。このノード・セット内のこのノード・ペア(すなわち、ノード615および630)に対して、LUTマッピングは、2つの42ビットのストリングを返送する。すなわち、一方のストリングをシュタイナー・ツリー705に、他方のストリングをシュタイナー・ツリー805に返送する。ツリー805に対するビット・ストリングは、1に設定されたパス1および28、および0に設定された残りの値に対して値を持ち、一方、ツリー705に対するビット・ストリングは、1に設定されたパス5および26、および0に設定された残りの値に対して値を持つ。
【0041】
プロセスが、ステップ2625において2つ以上のビット・ストリングを検索しなかった場合には、プロセスはステップ2635に進む。これについては以下に説明する。そうでない場合で、プロセスが、選択したツリー縁部をルーティングするために(すなわち、ノードの選択したペアを接続するために)、N個の経路に対してN個のビット・ストリングを検索した場合には(この場合、Nは2と等しいか2より大きい整数である)、プロセスは、現在のツリーの1つまたは複数の現在のビット・ストリングのN−1の複写コピーを作り、ツリーのコピー間に異なる経路を埋設する。
すなわち、プロセスは、(ステップ2630において)現在のツリーの1つまたは複数のビット・ストリングのN−1の複写コピーを作る。現在のツリーに対するビット・ストリングは、ステップ2610において初期化され、そのビット・ストリングが、ステップ2630においてすでに複写されていた場合には、現在ツリーは、複数のビット・ストリングを持つ。ステップ2630から、プロセスはステップ2635に進む。
ステップ2635において、プロセスは、現在のツリーに対する1つまたは複数のビット・ストリングを、選択したツリー縁部に対する(ステップ2625において検索した)1つまたは複数のストリングで修正する。次に、プロセスは、(ステップ2640において)現在のツリーの最後の縁部をチェックしたかどうか(すなわち、現在のツリーの最後のリンクしたノード・ペアをチェックしたかどうか)を判断する。チェックしなかった場合には、プロセスは、ステップ2620に戻り、次のツリー縁部(すなわち、次のリンクしているノード・ペア)を選択する。
【0042】
プロセスが、(ステップ2640において)最後のツリー縁部をチェックしたと判断した場合には、(ステップ2645において)プロセス2200により供給された最後のツリーをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ2615に戻り、もう1つのツリーを選択し、このツリーに対するパス使用を判断する。そうでない場合には、プロセスは、ステップ2650に進む。
プロセス2600がステップ2650に到着するまで、プロセスは、1つまたはそれ以上のツリーのビット・ストリング表現を生成する。各ツリーのビット・ストリング表現は、42ビットのストリングである。すでに説明したように、ツリーのノード・セットが、隣接していないリンクしたノードの1つまたはそれ以上のペア、および隣接していないリンクしたペア間に1つまたはそれ以上のパスが存在する場合には、ツリーの1つのノード表現は複数のビット・ストリング表現にある。
さらに、ステップ2215において選択したノード構成は、同じMSTビット表現を形成する(すなわち、同じビット表現MSTを形成する)異なるMSTノード表現(すなわち、異なるノード表現MST)になる。従って、ステップ2650において、プロセスは、すべてのビット・ストリング表現ツリーをチェックし、すべての同じビット・ストリング表現ツリーの複写コピーを除去する。
ステップ2215において選択したノード構成が、多数のビット・ストリング表現ツリーになる場合には、プロセス2600は、ツリーを迅速にソートし、探索するし、それにより同じツリーの複写コピーを迅速に識別し、除去するために、2進探索ツリー(「BST」)を使用することができる。図32および図33を参照しながら、このようなBSTの1つについて以下に説明する。
【0043】
ステップ2650の後で残るすべてのビット表現ツリーは一意のものである。それ故、同じツリーの複写コピーを除去した後で、プロセス2600は、(ステップ2655において)(LUTのような)記憶構造体内に残っているすべてのビット・ストリング表現ツリーを記憶する。以下の例のところで説明するように、各ビット・ストリングは、現在のノード構成に対するルーティング・ツリーが通る経路を指定する。より詳細に説明すると、以下の例のところで説明するように、記憶された各ビット・ストリングが、現在のノード構成に対するルーティング・ツリーが通るルーティング経路を指定する。ステップ2655において、プロセスは、グローバル・カウント変数の各パス値を、各パスに対する全カウント値を生成するために、各ビット・ストリング表現ツリーの対応するパス値だけ増大する。次に、プロセスは、各パスに対するこの使用カウントを記録する。また、特定の各パスに対して、プロセスは、(ステップ2650において)(1)特定のパスの使用確率値を入手するために、ステップ2650の後で残るツリーの数により使用カウントを割り、次に(2)この結果として得られる確率値を記憶する。
図6〜図8に示すシュタイナー・ツリーの場合には、プロセス2600は、3つのツリー605、705、805に対するルーティング・パス情報を指定する42ビットの3つのストリングを識別する。ツリー605、705および805に対するこれら3つのビット・ストリングは、それぞれ下記のようなものである。
(本明細書においては、ビット・ストリングの最下位ビット(「LSB」)は、一番右のビットであり、ビット・ストリングの最上位ビット(「MSB」)は、一番左のビットである。)図27および図28は、それぞれ、図6〜図8のシュタイナー・ツリー605、705および805に対するパス使用カウントおよびパス使用確率を示す。以下の説明においては、パス使用確率値は、「確率的シュタイナー・ツリー値と呼ぶ。
【0044】
3.シュタイナー・ツリーの検索
シュタイナー・ツリー経路が、プロセス2200により予め表の形に表示される場合には、ルータは、実行時に、下記の方法によりあるネットに対する1つまたはそれ以上のシュタイナー・ツリーの属性(例えば、経路)を識別する。ルータは、最初に、分割グリッドに関するネット構成を識別する。次に、ルータは、記憶構造体内に、識別した構成に対する記憶している1つまたはそれ以上の属性(例えば、経路)を検索するために、識別した構成を使用する。
いくつかの実施形態の場合には、記憶構造体は、浮動小数点数の参照テーブル(「LUT」)である。これらのいくつかの実施形態の場合には、LUTは、構成コードにより索引を付けられる。すなわち、特定のネット構成に対する特定の属性を検索するために、ネット構成に対する構成コードが識別され、この構成コードが、必要な属性を記憶しているLUT内のエントリを識別するために使用される。
いくつかの実施形態は、図3の八角配線モデルを使用し、図12の42の対角線ルーティング・パスおよびマンハッタン・ルーティング・パスにより、各ネットのルーティング・パスを指定する。いくつかの実施形態の場合には、LUTは、各経路に対して42ビットを記憶する。この場合、各ビットは、42のパスの中の1つを表す。また、ネットの各構成コードは、16ビット数である。この場合、各ビットは、4×4分割グリッドにより形成されているサブ領域を表す。関連ネットが、構成コード・ビットが表すサブ領域内にピンを持っている場合には、各構成コード・ビットは設定され(例えば、1)、関連ネットが、このサブ領域内にピンを持っていない場合には設定されない(例えば、0)。また、これらの実施形態の場合には、216の可能なネット構成を表す216の構成コードが存在する。
【0045】
例えば、ネットが、スロット0および9内にピンを持っている場合には、ネット構成コードは、000001000000001である。このような構成の場合には、いくつかの実施形態は、2つのツリー、すなわち、パスP17およびパスP24を使用するツリー、およびパスP12およびP30を使用するツリーを予め表の形にする。これら各ツリーは、42ビットのストリングにより指定することができる。第1のツリーに対するビット・ストリングは、下記のようなものである。
一方、第2のツリーに対するビット・ストリングは、下記のようなものである。
いくつかの実施形態は、LUT内にこれら2つのビット・ストリングを記憶し、ネット構成0000001000000001の16ビットの構成コードにより、これら2つのビット・ストリングを検索する。
【0046】
4.圧縮した形でのシュタイナー・ツリーの記憶
複数の組のネット構成に対するシュタイナー・ツリー経路を記憶し、使用するために、種々の圧縮技術を使用することができる。図29は、そのような方法の1つを示す。この図のプロセス2900は、プロセス2900が、2つの追加の動作2905および2910を持ち、若干異なる動作2215および2250を持っていることを除けば、上記プロセス2200に類似している。プロセス2900の動作2205、2210および、2220〜2245は、プロセス2200の類似の番号がついている動作2205、2210および、2220〜2245と同じものである。それ故、不必要な詳細な説明により本発明がわかりにくくなるのを避けるために、これらの動作2205、2210および2220〜2245についてはこれ以上説明しない。
プロセス2900は、予め表の形になっている情報の量を少なくするために、追加の動作2905および2910を実行する。第1の動作2905は、プロセス2900が経路を予め表の形にする潜在的ネット構成の数を減らし、一方、第2の動作2910は、プロセス2900が各シュタイナー・ツリー経路が1回だけ記憶されるのを確実にする。
両方の動作については、以下にさらに詳細に説明する。しかし、通常の当業者であれば、いくつかの実施形態は、これら両方の動作を使用しないことを理解することができるだろう。例えば、いくつかの実施形態は、各シュタイナー・ツリー経路が、確実に1回だけ記憶されるように、動作2910を実行する。
【0047】
a.対称ネット構成
動作2905は、ステップ2210において識別した潜在的ネット構成を、複数の組の対称ネット構成にグループ分けする。ステップ2215〜2250から、プロセス2900は、対称構成の各グループの1つの指定されたネット構成に対して、一組のシュタイナー・ツリーを生成し、記憶する。この流れは、ステップ2215および2250により導かれる。ステップ2215、プロセス2900は、前にチェックしなかった指定のノード構成を選択する。ステップ2250において、プロセスは、対称ノード構成の各グループに対する指定のノード構成をチェックしたかどうかを判断する。動作時、各グループの指定の構成は、直接そのグループに対して予め表の形になっている経路を使用し、一方、各グループの指定されていない構成は、このグループに対して予め表の形になっている経路からその経路を生成する。
図30および図31は、このグループ分けを行うための1つの技術である。この技術は、図5の4×4分割グリッドに対して実行される。このグリッド内においては、各ネット構成は、他の7のネット構成に対して対称である。これら7の対称構成は、(1)90度だけネット構成を回転し、(2)180度だけネット構成を回転し、(3)270度だけネット構成を回転し、(4)X軸を中心にしてネット構成をフリップし、(5)90度だけネット構成を回転し、X軸を中心にして結果をフリップし、(6)180度だけネット構成を回転し、X軸を中心にして結果をフリップし、(7)270度だけネット構成を回転し、X軸を中心にして結果をフリップすることにより識別することができる。
【0048】
以下に説明するいくつかの実施形態の場合には、回転動作およびフリップ動作は、(1)4×4分割グリッドの幅(すなわち、レイアウトの幅)に平行なX軸、(2)上記グリッドの高さに平行なY軸、(3)図5に示すグリッドのスロット5、6、9および10の交点に位置する原点を持つデカルト座標システムに対して定義される。より詳細に説明すると、回転は、原点を中心とする時計方向の回転により定義される。構成のフリップは、各構成スロットのy座標の符号の変更を含む。下記の表1は、上記対称関係に基づいて関連している8のネット構成の一例である。
【0049】
【表1】
【0050】
図31は、上記対称によりネット構成をグループ分けするためのプロセス3100である。図30は、プロセス3100が、各構成に対して記憶する4のデータ・フィールドを示す。第1のフィールド3000は、構成の16ビットのピン配列(すなわち、そのネット/ノード構成)を記憶する。第2のフィールド3005は、プロセス3100が、他の構成によりこの構成をすでにグループ分け済みであるかどうかを指定する。
第3のフィールド3010は、構成グループに対する1つまたはそれ以上のシュタイナー・ツリー経路3025への1つまたはそれ以上の参照を含むツリー・リスト3020への参照(例えば、ポインタ)である。グループ内の各構成は、同じツリー・リスト3020を参照する。例えば、図30は、同じツリー・リストを参照する3つのグループ分けした構成3030、3035および3040を示す。第4のフィールド3015は、対称関係識別子を記憶する。この識別子は、グループに対して記憶したツリーからどのようにネット構成に対するツリーを入手するかを指定する。すなわち、各構成の識別子は、構成グループに対して予め表の形になっている1つまたはそれ以上のツリーの構成に対する1つまたはそれ以上のツリーへの変換方法を指定する。
プロセス2900は、プロセス2900が、(ステップ2210において)潜在的ノード構成のすべての組を定義した後で、ステップ2905においてプロセス3100を実行する。図31に示すように、プロセス3100は、最初に、(ステップ3105において)ステップ2210において定義したノード構成の中の1つを選択する。次に、プロセス3100は、(ステップ3110において)この構成に、その構成フィールド3005にグループ分けしたものというマークを付ける。
【0051】
次に、プロセスは、(ステップ3115において)この構成関連識別子フィールド3015内に「なし」を記録する。このマークは、この構成に対して指定された予め表の形になっているツリー(すなわち、この構成のツリー・リスト3020により参照されるツリー)は、いかなる方法によっても、選択したノード構成に変換する必要がないことを示す。構成の各グループにおいて、その関連識別子フィールド内に「なし」と記録されている構成が、そのグループに対する指定された構成である(すなわち、上記構成が、そのグループに対して生成されるシュタイナー・ツリーを直接使用することができる構成である)。
次に、ステップ3120において、プロセスは、この構成グループに対してツリー・リスト3020を生成し、この構成参照フィールド3010をこのツリー・リストにリンクする。このツリー・リストに対して、プロセス2900は、(ステップ2910において)この構成グループに対するツリーを参照する参照を追加する。
次に、プロセス3100は、(ステップ3125において)上記の7の対称関係の中の1つを選択する。次に、プロセス3100は、(ステップ3130において)ステップ3105において選択した構成に対称の形で関連する7の構成の中の1つを識別するために、選択した対称関係を使用する。いくつかの実施形態は、それぞれが対称変換関係に対するものである7のLUTを持つ。各LUTは、指定のノード構成の各潜在的ノードに対して対称ノードを指定する、1:1マッピングを供給する。例えば、下記の表2は、指定のノード構成を90度回転することにより入手することができる対称構成に対する対応するノードを識別する。
【0052】
【表2】
【0053】
次に、ステップ3135において、プロセスは、ステップ3130において識別した構成に、構成フィールド3005内にグループ分けしたものであるというマークを付ける。次に、プロセスは、(ステップ3140において)構成関連識別子フィールド3015内で、ステップ3125(例えば、90度回転)において選択した関係の識別を記録する。この動作は、実行時に、構成グループに対して予め表の形になっている1つまたはそれ以上のツリーを、ステップ3130において識別した構成に対する1つまたはそれ以上のツリーに変換するために使用される。
次に、プロセスは、(ステップ3145において)識別した構成の参照フィールド3010をこの構成グループに対するツリー・リスト3020にリンクする。次に、ステップ3150において、プロセスは、ステップ3105において選択したものに対称的に関連している7つのすべての構成を生成したかどうかを判断する。生成していなかった場合には、プロセスは、(ステップ3125において)もう1つの対称関係を選択し、次に、関連構成を識別し、そのグループ・フィールドをポピュレートするために、ステップ3130〜3145を実行する。
プロセスが、(ステップ3150において)ステップ3105において選択した構成に関連する7つすべての構成を生成したと判断した場合には、このプロセスは、(ステップ3155において)ステップ2210においてプロセス2900が生成したすべてのノード構成をチェックしたかどうか、(すなわち、すべての生成したノード構成に「グループ分けした」とマークしたかどうか)を判断する。チェックしていなかった場合には、プロセスはステップ3105に進み、「グループ分けされた」というマークがまだ付いていないノード構成を選択し、新しく選択した構成およびその対称関係にある構成に対して上記動作を反復して実行する。プロセスが、(ステップ3155において)すべてのノード構成をチェックしたと判断した場合には、プロセスは終了する。
【0054】
b.各ツリーの1回だけの記憶
ステップ2910において、プロセスは、プロセス2900が、そのような経路を使用するかも知れない任意のノードに対して、各シュタイナー・ツリー経路を1回だけ記憶するのを確認する。図22のプロセス2200のように、プロセス2900は、(ステップ2245において)このプロセスが、ノード構成に対して識別した1つまたは複数のシュタイナー・ツリーに対するルーティング・パス情報を計算するために、プロセス2600を呼び出す。プロセス2600は、プロセス2900が識別した各シュタイナー・ツリーを表示するために、1つまたはそれ以上のビット・ストリングを識別する。プロセス2600は、また、(1)(ステップ2650において)同じノード構成に対して生成する各ビット表現ツリーのすべての複写コピーを除去し、(2)(ステップ26555において)残りの各ビット表現ツリーを記憶する。
しかし、プロセス2600が、プロセス2900と一緒に動作する場合には、このプロセスは、(ステップ2655において)生成した各ビット・ストリングを永久に記憶しない。代わりに、プロセス2600は、生成したビット・ストリングをプロセス2900に返送する。次に、プロセス2900は、(ステップ2910において)前のノード構成に対して(すなわち、ステップ2215において前に選択したノード構成に対して)、記憶構造体内に返送した各ビット・ストリング(すなわち、返送した各シュタイナー・ツリー)を前に記憶したかどうかをチェックする。前に記憶した場合には、プロセスは、このビット・ストリングを再度記憶しないで、ノード構成のツリー・リスト3020内の参照の中の1つを前に記憶したビット・ストリングにリンクする。前に記憶しなかった場合には、プロセスは、図30の記憶構造体3050内にこのビット・ストリングを記憶し、ノード構成ツリー・リスト3020内の参照の中の1つを新しく記憶したビット・ストリングにリンクする。
プロセス2900が、記憶構造体3050内にビット・ストリングを記憶したかどうかを(ステップ2910において)チェックするために、種々の異なる技術を使用することができる。以下の実施形態は、このチェック動作を実行するために2進探索ツリーを使用する。
【0055】
図32は、そのような2進探索ツリー(「BST」)の1つを示す。このツリー3200は、それぞれがゼロまたは2つの子ノードを持つ多数のノード3220を持つ。ツリー内の各ノードは、ノードの左右の子ノードを参照するための2つの参照3205および3210を含む。各ノードは、また、そのノードに対応する42ビットのシュタイナー・ツリーを参照するための1つの参照3215を持つ。
BSTは、42のレベルを持ち、各レベルは、シュタイナー・ツリーを表す42ビットのストリング内のビットの中の1つに対応する。BSTレベルは、ビット・ストリング内のビットと同じオーダである。それ故、BSTのゼロ番目のレベルは、ストリングのゼロ番目のビット(すなわち、パス0に対応するビット)に対応し、BSTの1番目のレベルは、ストリングの1番目のビット(すなわち、パス1に対応するビット)に対応し、BSTの2番目のレベルは、ストリングの2番目のビット(すなわち、パス2に対応するビット)に対応する。以下同じ。各レベルにおいて、そのレベルに対応するストリング・ビットの値が分岐を決定する。
図33は、プロセス2900が、(ステップ2910において)シュタイナー・ツリーが、記憶構造体内に前に記憶されたかどうかを判断するために、BST3200を通るために使用するプロセス3300を示す。図33に示すように、プロセス3300は、最初に、(ステップ3305において)変数Lを0に設定する。この変数は、プロセス3300が現在チェックしているBSTのレベルを指定する。ステップ3310において、プロセスは、ビット・ストリング内のL番目のビットが0であるかどうかを判断する。0でない場合には、プロセスは、(ステップ3315において)変数Lを1だけ増大し、現在のノードの左の子ノードを現在のノードとして定義する。0である場合には、プロセスは、(ステップ3320において)変数Lを1だけ増大し、現在のノードの右の子ノードを現在のノードとして定義する。
【0056】
ステップ3315または3320から、プロセスはステップ3325に進む。ここで、プロセスは、ビット・ストリング内のすべてのビットをチェックしたかどうかを判断し、チェックしなかった場合には、残りのチェックしなかったすべてのビット(すなわち、ビット・ストリングのL番目のビットから41番目のビット)がゼロであるかどうかをチェックする。すべてのビットをチェックしなかった場合で、チェックしなかったビットの中の1つまたはそれ以上のビットが1の値を持っている場合には、プロセスは、ステップ3310に戻り、現在のノードをチェックする。
一方、すべてのビットをチェックした場合、またはチェックしなかったすべてのビットが0である場合には、プロセスは、ビット・ストリングを記憶しなければならないノードを発見する。それ故、プロセスは、(ステップ3330において)現在のノードのノードツリー参照3215が、記憶しているツリー(すなわち、記憶しているビット・ストリング)を参照するかどうかを判断する。参照しない場合には、プロセスは、(ステップ3335において)記憶構造体3050内にビット・ストリングを記憶し、現在のノードのツリー参照3215をこの記憶構造体にリンクする。プロセスは、また、ノード構成のツリー・リスト3020内の参照の中の1つを新しく記憶したビット・ストリングにリンクする。プロセスが、(ステップ3330において)現在のノードのツリー参照3215が、前に記憶したビット・ストリングを参照すると判断した場合には、プロセスは、(ステップ3340において)単に、ノード構成のツリー・リスト3020内の参照の中の1つを前に記憶したビット・ストリングにリンクする。ステップ3335または3340の後で、プロセスは終了する。
【0057】
c.圧縮した予め表の形にされた表からの経路の識別
シュタイナー・ツリー経路が、プロセス2900により予め表の形になっている場合には、ルータは、実行時に、下記の方法でネットに対する1つまたはそれ以上のシュタイナー・ツリー経路を識別する。ルータは、最初に、分割グリッドに関するネットの構成を識別する。記憶構造体3050から、ルータは、識別した構成のツリー・リスト3020により指定された1つまたはそれ以上の経路3025を検索する。
次に、プロセスは、識別したネット構成とそのグループに対して指定された構成の間の対称的な関係を識別する。次に、プロセスは、検索した経路から、識別したネット構成に対する1つまたはそれ以上の経路を識別するためにこの関係を使用する。そうするために、いくつかの実施形態は、それぞれが、各対称的な変換関係に対するものである7つのLUTを使用する。各LUTは、指定されたノード構成の経路が使用することができる潜在的な各パスに対して対称的なパスを指定する。
【0058】
例えば、ネット構成は、スロット10および12内にピンを持つネットを示す0001010000000000であるかもしれない。この構成は、スロット0および9内にピンを持つネットを示すネット構成0000001000000001に対称的に関連する。より詳細に説明すると、構成0001010000000000が90度回転した場合に、構成0000001000000001が得られる。
ネット構成0000001000000001が、指定された構成である場合は、いくつかの実施形態は、一方がパスP17およびP24を使用し、他方がパスP12およびP30を使用する2つのツリーを予め表の形にする。これらのツリーを90度回転することにより、ルータは、構成0001010000000000に対する2つの経路を識別することができる。各ツリーを90度回転するには、ルータは、(1)ツリーが使用する各パスを識別し(すなわち、そのツリーを指定している42ビット・ストリング内の各セット・ビットを識別し)、(2)90度回転したLUTから、分割グリッドの90度の回転に対して識別したパスに対称的に関連するパスを識別する。
それ故、90度回転したLUTから、ルータは、パス37を、90度の回転によりパス24に関連したパスとして識別し、パス7を、90度の回転によりパス17に関連したパスであると識別する。90度回転したLUTから、ルータは、パス9を、90度の回転によりパス12に関連したパスであると識別し、パス39を、90度の回転によりパス30に関連したパスであると識別する。この方法により、ルータは、構成0001010000000000に対する2つのツリーを識別する。一方のツリーはパス7および37を使用し、他方のツリーはパス9および39を使用する。
通常の当業者であれば、他のいくつかの実施形態は、LUTを使用することにより、対称的なノード構成に対するツリーを識別しないことを理解することができるだろう。例えば、いくつかの実施形態は、対称的なノード構成に対するツリーを数学的に識別することができる。対称的な各関係の場合、これらの実施形態は、対称的な関係のツリーのパスに対して、予め表の形にしたツリーのパスをマッピングするために、他の数式を使用することができる。
【0059】
5.異なる配線モデルに対するシュタイナー・ツリーの予め表の形での表示
本発明のいくつかの実施形態は、いくつかの異なる配線モデルに対する数組のシュタイナー・ツリーを予め表の形にする。例えば、図34は、(1)(ステップ3405において)水平ライン、垂直ラインおよび、±45度のラインを持つ配線モデルに対して1回、(2)(ステップ3410において)水平ライン、垂直ラインおよび、±120度のラインを持つ配線モデルに対して1回、(3)(ステップ3415において)水平ラインおよび垂直ラインを持つ配線モデルに対して1回、プロセス2200またはプロセス2900を実行するプロセス3400を示す。
水平ライン、垂直ラインおよび、±45度のラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、(ステップ3405において)潜在的な45度の対角線縁部を持つシュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ3405において、プロセス3400は、45度を、プロセス2200または2900のプロセス2400および2500が使用する式(A)の角度Aとして使用する。
水平ライン、垂直ラインおよび、±120度のラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、(ステップ3410において)潜在的な120度の対角線縁部を持つシュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ3410において、プロセス3400は、120度を、プロセス2200または2900のプロセス2400および2500が使用する式(A)の角度Aとして使用する。
水平ラインおよび垂直ラインを使用する配線モデルに対するすべての可能なネット構成をモデル化するために、このプロセスは、(ステップ3415において)マンハッタン・シュタイナー・ツリーの長さの値、ルーティング・パスの値、およびパス使用の値を計算する。すなわち、ステップ3415において、プロセス3400は、90度を、プロセス2200または2900のプロセス2400および2500が使用する式(A)の角度Aとして使用する。
【0060】
B.ツリーを予め表の形にする方法および生成
いくつかの実施形態は、経路を検索し、生成するためにネット構成を使用する。例えば、いくつかの実施形態は、あるネットに対して予め表の形にした経路を検索するためにネット構成を使用し、一方で、他のネットに対する経路を生成する。図35〜図38を参照しながら、このようないくつかの実施形態について説明する。
これらの実施形態は、閉ノード構成に対して、以下の説明において、「最小閉ツリー」またはMCTと呼ぶ経路を予め表の形にする。1つのMCTは、1つの閉ノード構成に対するものである。すなわち、MCTは、いくつかのノードのところだけで分岐する(すなわち、スタートまたは終了する)最短経路を通って構成のN個のノードを接続しているN−1の縁部を持つ最小のツリーである。開ノード構成の場合には、これらの実施形態は、いくつかの関連する閉ノード構成を予め表の形にする。閉ノード構成および開ノード構成という用語については、図35Aおよび図35Bのところで後で説明する。
図35Aは、(ノード3515、3520、3530、3535および3540を含む)閉ノード構成3505の一例であり、一方、図35Bは、(ノード3515、3530、3535および3540を含む)開ノード構成3510の一例である。ノード構成3505は、閉ノード構成である。何故なら、この構成のすべてのノードは、この構成の少なくとも1つの他のノードに隣接しているからである。ノード構成3510は、開ノード構成である。何故なら、ノード3515は、この構成の他のノードに隣接していないからである。この構成の場合、ノード3515は、自分自身と最も近い隣のノード3530の間にノード3545を持っているからである。
【0061】
ノード構成3510は、いくつかの関連する閉ノード構成を含む。「アンテナ」ノードを含むMCTにならないこのような2つの構成は、(1)3515、3545、3530、3535および3540を含む第1の構成であり、(2)3515、3550、3530、3535および3540を含む第2の構成である。第1の構成は、構成は、構成3510にノード3545を追加することにより形成することができ、一方、第2の構成は、構成3510にノード3550を追加することにより形成することができる。
構成3510に、ノード3555およびノード3545またはノード3550を追加することにより形成する構成は、何時でも、アンテナ・ノードとしてのノード3555を含むMCTになる関連閉構成である。開ノード構成に一組のノードを追加することにより形成される閉ノード構成のMCT内のアンテナ・ノードは、追加した組の一部であり、それに入るMCT縁部を1つだけ持つノードである。以下にさらに詳細に説明するように、第1の2つのノード構成(構成3515、3545、3530、3535および3540、および構成3515、3550、3530、3535および3540)は、開ノード構成3515、3530、3535および3540に対して、予め表の形にすることができる閉ノード構成に関連する。一方、第3の構成(3515、3530、3535、3540および3555)は、この開ノード構成に対して予め表の形にすべきではない。何故なら、この第3の構成は、アンテナ・ノードになるからである。
【0062】
1.MCTの予め表の形での表示
図36は、図5の4×4分割グリッドのような特定の分割グリッド内で、すべてのノード構成に対してMCTを予め表の形にするプロセス3600である。図36に示すように、プロセス3600は、最初に、すべての潜在的なノード構成を(3605)と識別する。
次に、プロセス3600は、(ステップ3610において)1つの構成を選択する。選択した構成が、閉ノード構成である場合には、次に、プロセスは、(ステップ3615において)選択した構成に対するすべてのMCTを識別する。すでに説明したように、その構成の各ノードが、その構成の少なくとも1つの他のノードに隣接している場合には、あるノード構成は、閉ノード構成である。通常の当業者であれば、プロセス3600は、選択した閉ノード構成のノード間に存在する、複数の組のパス(例えば、図12に示す42のパス)に基づいて直接選択した構成に対する各MCTを識別することができることを理解することができるだろう。各MCTは、最短経路により、閉ノード構成のN個すべてのノードを接続するパスのN−1の一意の組合わせである。このようなMCTは、閉ノード構成のノード間のすべての最短パスを探索する再帰的動作により識別することができる。いくつかの実施形態の場合には、このような再帰的動作は、相互接続パスに基づいて直接各MCTを指定するという点を除けば、図25Aおよび図25Bを参照しながらすでに説明した再帰的動作に類似している。
ステップ3615において、プロセスは、また、ステップ3615において識別した各MCTのコストを計算する。いくつかの実施形態の場合には、プロセスは、(1)分割グリッドの隣接スロットを接続しているマンハッタン・パスおよび対角線パスにコストを割り当てることにより、(2)MCTが使用するパスを識別することにより、(3)パス・コストを合計することにより各MCTのコストを計算する。1つ以下のノードを含むノード構成は、MCTを含んでいないので、そのMCTコストはゼロである。
ステップ3615の後で、プロセスは、(ステップ3620において)すべての構成をチェックしたかどうかを判断する。チェックしなかった場合には、プロセスはステップ3610に戻り、他の構成を選択する。チェックした場合には、プロセスは終了する。
【0063】
2.関連閉ノード構成の予め表の形での表示
図37は、開ノード構成に対して、いくつかの関連閉ノード構成を予め表の形にするプロセス3700を示す。このプロセスは、最初に、(ステップ3705において)接続ノードの候補の組を識別する。候補の各組は、開ノード構成のノードは全然含んでいない。また、候補の組は、開ノード構成のノードを含んでいない入手することができるすべての可能なノード構成を含む。
次に、プロセスは、(ステップ3710において)接続ノードの候補の組を選択する。次に、プロセスは、(ステップ3715において)選択した候補の組および開ノード構成を追加することによりできた組合わせ構成が、1つまたはそれ以上の予め表の形にしたMCTを含んでいるかどうかを判断する。含んでいない場合には、プロセスはステップ3745に進むが、このステップについては、以下に説明する。
組合わせ構成が、1つまたはそれ以上の予め表の形にしたMCTを持っている場合には、プロセスは、ステップ3720〜3740において、組合わせノード構成が、アンテナ・ノードを含んでいない少なくとも1つのMCTになるかどうかを判断する。すべてのMCTが、アンテナ・ノードを含んでいる場合には、ステップ3710において選択した候補の接続ノードに対して入手した組合わせ構成は、開ノード構成に対する関連閉構成として記憶されない。
【0064】
より詳細に説明すると、ステップ3720において、プロセスは、組合わせ構成のMCTの中の1つを選択する。次に、プロセスは、(ステップ3725において)度合い1を持つこのMCTのすべてのノード(すなわち、それに入るMCT経路を1本だけ含むすべてのノード)を識別する。次に、プロセスは、(ステップ3730において)識別したすべてのノードが、開ノード構成の一部であるかどうかを判断する。一部である場合には、プロセスは、(ステップ3740において)ステップ3710において選択した候補の組を含む入手した組合わせ構成を受け入れて、(ステップ3710において選択した候補の組を開ノード構成と結合することにより入手した)組合わせ構成を、開ノード構成に対する関連閉ノード構成として記憶する。ステップ3740から、プロセスはステップ3745に進むが、このステップについては、以下に説明する。
一方、プロセスが、(ステップ3730において)ステップ3725において識別したノードの中の少なくとも1つが、開ノード構成の一部ではないと判断した場合には、プロセスは、組合わせノード構成に対するすべてのMCTをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ3720に戻り、他のMCTを選択する。チェックしていた場合には、プロセスは、ステップ3745に進む。ステップ3745において、プロセスは、接続ノードのすべての候補の組をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ3710に戻り、他の候補の組を選択し、チェックする。チェックしていた場合には、プロセスは終了する。
【0065】
3.実行時間中のMCTの生成
経路および閉ノード構成が、プロセス3600および3700により予め表の形になっている場合には、ルータは、実行時間に、図38のプロセス3800により、あるネットに対する1つまたはそれ以上の経路を識別する。この図に示すように、プロセスは、最初に、(ステップ3805において)分割グリッドに対するネットの構成を識別する。
次に、ルータは、(ステップ3810において)記憶構造体が、識別した構成に対して1つまたはそれ以上のMCTを記憶しているかどうかを判断する。記憶している場合には、プロセスは、(ステップ3815において)その構成に対して記憶しているMCTを検索し、それらをそのネットに対する経路のリスト内に記憶する。ステップ3815の後で、プロセスは終了する。
一方、プロセスが、(ステップ3810において)記憶構造体が、識別した構成に対するMCTを全然含んでいないと判断した場合には、プロセスは、(ステップ3820において)識別した構成に対する関連閉ノード構成を検索する。次に、プロセスは、(ステップ3825において)検索した閉構成の中の1つを選択する。
【0066】
次に、プロセスは、(ステップ3830において)選択した閉構成に対するMCTを検索する。次に、プロセスは、(ステップ3835において)識別したノード構成に対して検索したMCTを記憶しているかどうかを判断する。いくつかの実施形態の場合には、プロセスは、MCTのワイヤ長さコストだけに基づいてこの判断を行う。すなわち、これらの実施形態の場合には、プロセスは、MCTが、プロセスが今迄識別したノード構成に対して、チェックしてきた最短MCTである場合だけ、MCTを記憶する。しかし、他の実施形態の場合には、プロセスは、ルーティング・パスの推定混雑、バイアの推定数、今迄選択したMCTの数等のような他の要因に基づいて、MCTを記憶するかどうかを決める。またいくつかの実施形態の場合には、プロセス3700は、開ノード構成の閉ノード構成を特定の順序でソートする。例えば、プロセス3700は、もっと短いMCTの最初のものを生成する閉構成をソートすることができる。これらの実施形態の場合には、プロセス3800は、記憶した順序で閉ノード構成をチェックし、経路のR番号を識別した場合、プロセス3800は終了する。
プロセスが検索したMCTを記憶しないと決定した場合には、プロセスはステップ3845に進むが、このステップにつては以下に説明する。しかし、プロセスが、(ステップ3730において)検索したMCTを記憶すると決定した場合には、プロセスは、そのネット構成に対する経路のリスト内にこれらのMCTを記憶する。次に、プロセスは、(ステップ3840において)識別したネット構成に対するすべての関連閉ノード構成をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ3820に戻り、他の閉構成を選択する。いくつかの実施形態の場合には、プロセスがすでにいくつかのMCTを識別していた場合には、プロセスは他の閉構成を選択するためにステップ3820に戻ることができない。プロセスが、すべての関連閉ノード構成をチェックしたと判断した場合には、プロセスは終了する。
【0067】
IV.再帰的4×4分割ルータ
A.ソフトウェア・アーキテクチャ
図39は、本発明のいくつかの実施形態のルータ3900のソフトウェア・アーキテクチャである。このルータは、種々の異なる配線アーキテクチャと一緒に動作することができる。このルータは、また、異なる分割グリッド、混雑グリッド、およびパス定義グリッドと一緒に動作することもできる。しかし、以下に説明するいくつかの実施形態の場合には、ルータを、(1)図3の八角配線モデル、(2)図5の分割グリッド、(3)図9〜図12の混雑グリッドおよびその関連する42本のパスと一緒に動作する場合について主として説明する。
図39のソフトウェア・アーキテクチャは、いくつかのソフトウェア・モジュール3905およびいくつかのデータ構造体3910を含む。ソフトウェア・モジュールは、イニシャライザ3915、スロット・マネージャ3925、ソルバー3930、プロパゲータ3935、セーバ3940、リニア・プログラミング(「LP」)ソルバー3945、整数リニア・プログラミング(「ILP」)コンバータ3950を含む、一方、データ構造体3910は、LUT3965、回路モジュール3970、ネットリスト3972、ネット3974、スロット3976、スロット−ネット3978、パス3980、およびピン3982を含む。
ルータ3900は、設計領域(すなわち、ICレイアウト・マネージャ、ICレイアウトの1つの領域)をもっと小さなサブ領域に再帰的に分割する分割グリッドを定義する。以下に説明するいくつかの実施形態の場合には、ルータは、設計領域を16の同じ大きさのサブ領域(すなわち、16の同じ大きさのスロット)に再帰的に分割するために、3本の等間隔の水平ラインおよび、3本の等間隔の垂直ラインを使用する。図40は、複数の組の16のサブ領域に再帰的に分割される設計領域4005を示す。より詳細に説明すると、設計領域は、最初、16のもっと小さいサブ領域に分割され、これらの各サブ領域は、さらに、もっと小さい16のサブ領域に分割され、もっと小さいサブ領域の中の1つ4010は、さらに、16のサブ領域に再分割される。各再帰レベルにおいて、ルータは、その再帰的レベルにおけるIC領域の座標を整合するために、分割グリッドの座標を単に調整するだけである。他のいくつかの実施形態の場合には、ルータは、すべてのまたはいくつかの再帰的レベルにおいて、異なる形の分割グリッドを使用することができる。
【0068】
ルータ3900は、階層的トップダウン方法で、設計領域内の各ネットに対する配線パス値を定義する。ルータのイニシャライザ3915は、最初に、再帰的レベルの数を決定し、この再帰的レベルの数に由来するスロットの数を決定する。イニシャライザは、また、これらスロットに対するデータ構造体を生成する。さらに、各スロットに対して、イニシャライザは、そのスロット内の各ネットに対するスロット−ネット・データ構造体を生成し、このスロット−ネット・データ構造体は、上記スロット内にネット構成を記憶する。各スロットに対して、イニシャライザは、また、このスロットと交差するすべての回路モジュールを識別する。
いくつかの実施形態の場合には、イニシャライザは、また、各スロット内のルーティング・パスの容量を定義し、これらの容量をスロットのデータ構造体内に記憶する。しかし、以下に説明するいくつかの実施形態の場合には、スロット・マネージャが、各スロットのルーティングを管理するので、これらの容量を定義する。
もっと小さい子スロットに分割される各スロットの場合には、スロット・マネージャが、スロット内の実際のピンまたは仮想のピンを持つ各ネットに対する経路を選択するために、ソルバー3930を管理する。ソルバーは、(1)各ネットに対する1つまたはそれ以上の最適な経路を識別するために、また場合によっては、(2)各ネットに対する1つまたはそれ以上の最適より下の経路を識別する目的で偽の構成を生成するために、各ネットの構成を使用する。ソルバーは、第V節のところで説明したアプローチの中の任意の1つに基づいて、特定の構成に対する1つまたはそれ以上の経路を識別する。
【0069】
次に、ソルバーは、LP問題を公式化し、これらの解をLPソルバー3945に送り、LPソルバーは、多数の実数の解を返送する。次に、これらの実数の解は、ILPソルバー3950により整数の解に変換される。これらの整数の解は、各ネットに対する特定の経路を指定し、ソルバーは、現在のスロットに対するスロット−ネット・データ構造体内に各ネットの経路情報を記憶する。
ソルバーが、現在のスロット内に実際のピンまたは仮想のピンを持つ各ネットに対する経路を指定した後で、現在のスロットがリーフ・スロットではない場合、スロット・マネージャ3925はプロパゲータ3935を呼び出す。リーフ・スロットが子スロットを有しているスロットであるが、その子スロットは、任意の子スロットを有していない、(すなわち、その子スロットは分割されていない)。リーフ・レベルの子スロットは、Gcellと呼ばれる。
スロット・マネージャにより呼び出された場合、プロパゲータは、現在のルーティング・レベルのために、ソルバーにより指定されたルーティング・パスを、現在のスロットの子スロットまで、下方に伝搬する方法を決定する。トップ・レベルのスロットの後ろであって、リーフ・レベルのスロットの前に位置するスロットの場合には、プロパゲータは、また、1レベル下の前のルーティング・レベルのところで、プロパゲータにより指定されたルーティング・パスを伝搬する後続伝搬動作を実行する。
現在のスロット内の各ネットの場合には、プロパゲータは、ネットのルーティング・パスにより影響を受けたすべての子スロット内のネットのピンの配列を決定しなければならない。伝搬プロセスは、多くの場合、現在のスロットの孫スロット(すなわち、現在のスロットの子スロットの子スロット)内に仮想のピンを追加しなければならない。すなわち、プロパゲータは、現在のスロットの子スロット内のネット構成を修正することができる。
【0070】
本発明の別のいくつかの実施形態は、異なるプロパゲータを使用する。2つの異なるプロパゲータについて以下に説明する。第1のプロパゲータは、各ネット経路に対するいくつかの伝搬解を列挙し、次に、各ネットに対する伝搬解を選択するために、LPソルバー3945およびILPコンバータ3950を使用する。一方、第2のプロパゲータは、現在のスロット内の各ネットの経路に対する伝搬を選択し、埋設するための貪欲なアプローチを使用するシーケンシャル・プロパゲータである。以下に説明するいくつかの実施形態の場合には、これら両方のプロパゲータは、使用できる場合には、後続の伝搬を実行するためにシーケンシャル・プロパゲータを使用する。
各ネットの経路に対して識別した伝搬は、影響を受けた各子スロット内のネットに対する特定の構成を指定し、プロパゲータは、影響を受けた子スロットに対するネットのスロット−ネット・データ構造体内にネット構成を記憶する。以下に説明するいくつかの実施形態は、16ビットのストリングにより各ネット構成を指定する。この場合、各ビットは、1つのスロットの1つの子スロットに対応する。
ソルバーが、リーフ・スロット内で各ネットに対する経路を指定した後で、スロット・マネージャは、各ネット経路のパス構造体を、その各ネットの主なデータ構造体にリンクするために、セーバ3940を呼び出す。セーバは、また、主ネット・データ構造体に、リーフ・レベルのスロットの親スロットに対して(すなわち、Gcellのグランドペアレント・スロットに対して)プロパゲータが指定する伝搬パスのパス・データ構造体をリンクする。これらの伝搬パスは、プロパゲータが、(1)ソルバーが指定したルーティング・パスに対して、(2)前のルーティング・レベルでプロパゲータが指定したルーティング・パスに対して識別したパスを含む。
このようにして、ネットの主なデータ構造体にリンクしているパス・データ構造体は、ルータが指定するネットに対する最終経路を集合的に表す。いくつかの実施形態の場合には、このような経路は、あるネットに対するグローバル経路である。図49〜図83は、さらに、ソフトウェア・モジュール3905を示す。しかし、これらのソフトウェア・モジュールを説明する前に、図41〜図48を参照しながら、データ構造体3910について以下に説明する。
【0071】
B.データ構造体
1.LUT
LUT3965は、ネットの回路モジュールを含むサブ領域を接続している経路に関する(ルーティング・パス、長さ、パス使用等のような)情報を記憶する。これらの経路の中のあるものは、全部または一部が対角線である縁部を含む。以下に説明するいくつかの実施形態の場合には、LUTは、すべての可能なネット構成に対する経路の長さの値、ルーティング・パスの値、およびパス使用確率の値を記憶する。経路を選択し、その長さ、ルーティング・パス、およびパス使用確率を予め表の形にするためのいくつかのプロセスについては、第V節のところですでに説明した。通常の当業者であれば、他の実施形態もツリーの他の属性を記憶することを理解することができるだろう。図38の経路生成プロセス3800を使用する実施形態の場合には、LUTは、各開ノード構成に対して1つまたはそれ以上の関連閉ノード構成を記憶する。
いくつかの実施形態の場合には、ルータ3900は、いくつかの配線アーキテクチャと一緒に動作することができる。これらのいくつかの実施形態の場合には、いくつかのLUTを、いくつかの配線モデルに対する経路属性を記憶するために使用することができる。例えば、LUTは、(1)マンハッタン・ラインおよび±45度対角線を使用する第1の配線モデル、(2)マンハッタン・ラインおよび±120度の対角線を使用する第2の配線モデル、(3)マンハッタン・ラインだけを使用する第3の配線モデル等に関するルーティング情報を記憶することができる。配線モデルを選択すると、各ネット構成に対するルーティング情報を、選択した配線モデルに適しているLUTから検索することができる。
【0072】
ルータが、いくつかの配線モデルと一緒に動作することができるいくつかの実施形態の場合には、ルータは、通常、設計プロセスの始めに配線モデルを選択する。例えば、いくつかの実施形態の場合には、プロセス400は、分割グリッドを選択する前に、ステップ405において配線モデルを選択する。また、いくつかの実施形態は、設計プロセスのいくつかの部分または設計階層のもっと低いレベルに対して、ある配線モデルから別の配線モデルへと切り替えることができる。
以下に説明するいくつかの実施形態の場合には、ルータは、ルーティング・プロセス全体を通して、図3の八角配線モデルを使用する。ルータは、混雑グリッドに対するルーティング情報(例えば、経路、長さ、パス使用の値、スロットの閉鎖した組に対するツリー、ノードの組等)を記憶しているLUT、および図9〜図12に示すその関連する42のパスを使用する。
【0073】
2.ネットリスト構造体、dbNet構造体、スロット−ネット構造体、ピン構造体、およびパス構造体
図41は、ネットリスト4100のデータ構造体である。このリストは、それぞれが、dbNetデータ構造体4110を参照する(例えば、ポイントする)1つまたはそれ以上のフィールド4105を含む。各ネットは、ネットに対して主データ構造体としての働きをするdbNetデータ構造体を有する。このデータ構造体は、ソフトウェア・モジュール(例えば、プロパゲータ)のあるものが、ネットを識別するために使用する1つの値を含む索引フィールド4205を含む。このデータ構造体は、また、ピン・データ構造体を参照する(例えば、ポイントする)多数のフィールド4210を含む。
図43は、ピン位置を指定する位置フィールドを含む簡単なピン・データ構造体4300である。いくつかの実施形態の場合には、ピン位置は、x位置およびy位置ばかりではなく、その層も指定する三次元の位置として供給される。しかし、他の実施形態は、ピンの層の位置をピン・マクロの一部として記憶する。このピン・マクロは、以下に説明するように、スロット−データ構造体により参照される回路マクロの一部として記憶することもできる。
dbNetデータ構造体も、それぞれが、図44に示すようなパス・データ構造体4400を参照する(例えば、ポイントする)1つまたはそれ以上のフィールド4220を含む。いくつかの実施形態の場合には、セーバは、各ネットに対する最後の最も低いレベルの経路パスを指定するパス・データ構造体を、参照フィールド4220を通してその各ネットのdbNetにリンクする。
【0074】
パス・データ構造体は、パス・タイプを、水平方向(H)、垂直方向(V)、第1の対角線方向(E)または、第2の対角線方向(W)として指定するフィールド4405を含む。この構造体は、また、データ構造体のパスを、2つのグリッド内に定義された42のパスの中の1つとして識別する0〜41の数字であるパスIDを記憶するためのフィールド4410を含む。さらに、このデータ構造体は、パスに関連するdbNetを参照する(例えば、ポイントする)フィールド4415を含む。最後に、このデータ構造体は、パスが入る2つのスロットのデータ構造体を参照する2つのフィールド4420を含む。これら2つのフィールドは、確認プロセス中に、ルータ3900により指定された経路が連続しているのを確認するために使用することができる。
各スロットの場合、ルータ3900は、そのスロット内に実際のピンまたは仮想のピンを含む各ネットに対してスロット−ネット・データ構造体を定義し、このスロット−ネット・データ構造体は、そのスロット内にネット構成を記憶する。図45は、このスロット−ネット・データ構造体を示す。この構造体は、そのネットのdbNetを参照する(例えば、ポイントする)フィールド4505を含む。この構造体は、また、スロット内のネット・ピンの配列を指定するビット・ストリングを記憶するフィールド4510を含む。以下にさらに詳細に説明するように、イニシャライザは、最初に、スロット内のネットのすべての実際のピンに基づいてこのフィールドを設定する。再帰的プロセス中、プロパゲータは、仮想ピンに合わせてこのフィールド4510内のビット・ストリングを修正することができる。このスロット−ネット・データ構造体は、また、42ビットの選択した経路ストリングを記憶するフィールド4515を含む。ソルバーは、スロット内のネットに対する経路を選択した後で、このビット・ストリングを設定する。
【0075】
3.スロット
ルータ3900は、設計領域を複数の組の16のサブ領域またはスロットに再帰的に分割する。図46は、ルータが定義したスロット(すなわち、サブ領域)の階層を概念的に示すグラフである。このグラフ4600は、再帰的プロセスの2つのレベル4610および4615を示す。このグラフにおいては、各ノードは、再帰的プロセス中の特定の段階におけるIC領域を示す。また、このグラフ内においては、ルート・ノードは、全設計領域を表し、一方、ルート・ノードでない各ノードは、設計領域の一部を表す。
スロット階層においては、各ノードは、子ノードを持たないか、16の子ノードを持つ。ルータがそのノード領域を16のサブ領域に分割する場合には、1つのノードは、16の子ノードを有する。逆に、その対応する領域が分割されない場合には、1つのノードは、子ノードを持たない。
いくつかの実施形態の場合には、ルータ3900は、スロット階層内の各ノードを表すために、スロット・データ構造体を定義する。図47は、あるスロットに対するそのようなデータ構造体4700を示す。このデータ構造体は、スロットの座標4710を指定する。このデータ構造体は、また、スロット内の回路モジュールのリスト4740への参照(例えば、ポインタ)4720を含む。このリスト4740は、スロット内の回路モジュール4800への1つまたはそれ以上の参照(例えば、1つまたはそれ以上のポインタ)4745を含む。
スロット−データ構造体4700は、また、スロットのスロット−ネットのリスト4730を含む。リストは、スロット−ネット・データ構造体4500への参照4735を含む。以下に説明するいくつかの実施形態の場合には、スロット−データ構造体は、その子スロットに対する参照を持たない。これらの実施形態の中のあるものは、リスト上でスロットを予め定めた順序に配列し、この順序に基づいて、これらの実施形態は、対応する子スロットおよび親スロットを識別する。スロット−データ構造体4700は、また、スロットの一意の識別子を指定するフィールド4725を含む。
【0076】
4.回路モジュール
図48は、回路モジュールのデータ構造体4800である。このデータ構造体は、回路モジュールの向き(4805)および位置(4810)を記憶する。このデータ構造体は、また、回路モジュールの記述を含む回路マクロ4820への参照4815も含む。例えば、回路マクロは、回路マクロ内の障害物を知るために、データ構造体4825を参照する。障害データ構造体は、障害物の層(4830)および形(4835)のような障害物に関する情報を指定する。
C.イニシャライザ
図49は、ルーティング動作のスタート時にイニシャライザが実行するプロセス4900である。このプロセスをスタートする前に、ルータは、通常、設置されたネットリスト、技術定義(層の数、各層の好適な配線方向、各層に対するルーティング・ピッチを含む)、および最も低いレベルのスロットに対する(すなわち、Gcellに対する)トラックの数を受け取っている。
プロセスは、最初に、(ステップ4905において)最も低いレベルのスロットからの再帰の回数、トラック当りのピッチ、設計の大きさを計算する。そうするために、プロセスは、最初に、最も低いレベルのスロットの大きさを入手するために、トラック・データにトラック当りのピッチを掛ける。次に、プロセスは、結果として得られる値が計算した大きさよりも大きい間は、設計サイズを反復して4で割る。1回の割り算毎に、レベル・カウントは1だけ増大する。結果として得られる値が計算した大きさより小さくなると、プロセスは、計算およびカウントを終了する。
レベルの数に基づいて、プロセスは、(ステップ4910において)スロットの数を計算する。各レベル毎に、16の子が存在する。それ故、スロットの全数は、16**nの合計である。この場合、nは0からレベルに変化する。この段階で、プロセスは、また、すべてのスロットのリストを生成する。
次に、プロセスは、(ステップ4915において)すべての再帰レベルにおけるスロットに対するスロット−データ構造体を列挙する。次に、プロセスは、(ステップ4920において)(1)各ネットに対して、ネットが通るすべてのスロットを識別し、(2)識別した各スロットに対して、そのスロット内のネット構成を記憶するためのスロット−ネット・データ構造体を列挙する。
図50は、いくつかの実施形態がステップ4920を実行するために使用するプロセス5000である。より詳細に説明すると、このプロセスは、トップ・レベルのスロットのところでスタートする再帰的プロセスであり、このプロセスは、各ネットに対して実行される。このプロセスが呼び出される度に、このプロセスは、1つのスロットおよび1つのネットを受け取る。図50に示すように、このプロセス5000は、最初に、(ステップ5005において)受信したスロットの囲みボックスを計算する。
【0077】
次に、このプロセスは、(ステップ5010において)受け取った任意のピンが、受け取ったスロットの囲みボックス内に含まれているかどうかを判断する。含まれていない場合には、プロセスは終了する。含まれている場合には、プロセスは、(ステップ5015において)現在のスロットに対するネットのピン配列を含むスロット−ネット記録を生成する。さらに、プロセスは、(ステップ5020において)受け取ったネットおよび現在のスロットの各子スロットに対して自分自身を呼び出す。その後、プロセス5000は終了する。
プロセス4900が、スロット内にネット構成を記憶するためのスロット−ネット・データ構造体を列挙した後で、プロセス4900は、(ステップ4925において)交差するスロットに対するモジュールの表に各回路モジュールを追加し、その後終了する。図51は、いくつかの実施形態が、ステップ4925を実行する際に使用するプロセス5100である。より詳細に説明すると、このプロセスは、トップ・レベルのスロットからスタートする再帰的プロセスであって、各回路モジュールに対して実行される。このプロセスが呼び出される度に、プロセスは、1つのスロットと1つの回路モジュールを受け取る。図51に示すように、プロセス5100は、最初に、(ステップ5105において)受け取ったスロットの囲みボックスを計算する。
次に、プロセス5100は、(ステップ5110において)受信した回路モジュールの囲みボックスを計算する。次に、プロセスは、(ステップ5115において)2つの囲みボックスが交差するかどうかを判断する。交差しない場合には、プロセスは終了する。交差する場合には、プロセスは、(ステップ5120において)現在のスロットに入射する回路モジュールのリストにモジュールを追加する。さらに、プロセスは、(ステップ5125において)受信したモジュールおよび、現在のスロットの各子スロットに対して自分自身を呼び出す。その後、プロセス5100は終了する。
【0078】
D.スロット・マネージャ
図52は、イニシャライザ3915がその動作を終了した後で、スロット・マネージャ3925が実行するプロセス5200である。最初に、プロセス5200は、(ステップ5205において)現在のレベルをトップ・レベルのスロットとして設定する。次に、プロセスは、現在のレベルのスロット内のルーティング・パスの容量を定義する。いくつかの実施形態の場合には、プロセスは、記憶構造体から第1のレベルに対するルーティング・パス容量を受け取るか、検索することができ、その後で、子スロットと親スロット間の既知の幾何学的関係に基づいてルーティング・パス容量を数学的に計算する。他のいくつかの実施形態の場合には、プロセスは、リアルタイムで、すべてのレベルに対するルーティング・パスの容量を計算する。しかし、これらの実施形態の中のあるものは、依然として、他のレベルのルーティング・パスの容量からいくつかの再帰レベルのルーティング・パスの容量を計算する。
すでに説明したように、いくつかの実施形態は、パスに直交する縁部のサイズから特定の再帰的レベルの各パスの容量を計算する。例えば、いくつかの実施形態は、特定のパスに対応する金属層のピッチで、対応する直交縁部のサイズ(すなわち、特定のパスに直交する縁部のサイズ)を割ることにより特定の各パスの容量を計算する。いくつかの実施形態は、金属層のピッチをライン−バイア・ピッチとして定義する。いくつかの実施形態は、ライン−バイア・ピッチを、その金属層上の交差ライン間の必要な最短距離にそのラインの幅の1/2を加え、さらに、金属オーバラップを含むバイアの幅の1/2を加えたものとして定義する。
すでに説明したように、いくつかの実施形態の場合には、直交パスの容量は、マンハッタン・パスの容量とは異なる。この違いは、対角線パスおよびマンハッタン・パスに直交する縁部のサイズの違いによりモデル化することができる。この違いは、また、相互接続ライン(例えば、マンハッタン・ラインに対するピッチとは異なる対角線に対するピッチを持つ)のタイプに依存しないピッチを持つことによりモデル化することができる。さらに、この違いは、層に依存するピッチを持つことによりモデル化することができる。例えば、いくつかの実施形態の場合には、−45度の金属層のピッチは、+45度の金属層のピッチとは異なる。
【0079】
ステップ5215において、プロセスは、現在のスロットを、現在のレベルにおける第1のスロットとして設定する。以下にさらに詳細に説明するように、プロセス5200は、現在のレベルのスロットを順次チェックする。しかし、通常の当業者であれば、他の実施形態も、他の順序でスロットをチェックすることができることを理解することができるだろう。例えば、いくつかの実施形態は、最初に、最も混雑しているスロットをチェックすることができる。
次に、プロセスは、(ステップ5220において)ソルバーに、現在のレベルにおける現在のスロット内のすべてのネットに対する経路を選択するように命令する。ソルバーがルーティング・パスを選択し、スロット−ネット・データ構造体フィールド4515内にこれらのパスを記憶すると、スロット・マネージャは、現在のレベルが最後の再帰レベルであるかどうかを判断する。
そうでない場合には、プロセスは、(ステップ5230において)プロパゲータに、次の下位の再帰レベルの子スロットへの(すなわち、現在のスロットの子スロットの子スロットへの)選択した経路の伝搬を定義するように命令する。トップ・レベルのスロットより下位のスロットに対しては、プロパゲータは、また、1レベルさらに低い前のルーティング・レベルのところで、プロパゲータが指定したパスを伝搬する後続伝搬動作を実行する。次の下位の再帰レベルへの伝搬を定義する際に、プロパゲータは、現在の子スロットの子スロット内の仮想ピンを追加することにより現在の子スロット内のネットの構成を修正することができる。
【0080】
プロセスが、現在のスロットは、最後の再帰レベル上に位置すると(すなわち、現在のスロットはリーフ・スロットであると)判断した場合には、プロセスは、(ステップ5235において)セーバに、現在のリーフ・スロット内の各ネットの経路のパス構造体をその各ネットの主データ構造体にリンクするように命令する。すでに説明したように、セーバは、また、プロパゲータが、リーフ・レベルのスロットの親スロット(すなわち、Gcellのグランドペアレント・スロット)に対して指定する伝搬パスの主ネット・データ構造体、パス・データ構造体にリンクしている。これらの伝搬パスは、(1)ソルバーが指定したルーティング・パスに対して、(2)前のルーティング・レベルのところでプロパゲータが指定したルーティング・パスに対して、プロパゲータが識別したパスを含む。このようにして、ネットの主データ構造体にリンクしているパス・データ構造体は、全体で、ルータが指定するネットに対する最後の経路を表す。いくつかの実施形態の場合には、このような経路は、あるネットに対するグローバル経路である。
ステップ5230および5235から、プロセスは、ステップ5240に進み、そこでプロセスは、現在のレベルにおいて、最後のスロットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、(ステップ5245において)現在のレベルの他のスロットを選択し、ステップ5220に戻って、このスロットに対するソルバーを呼び出す。チェックしていた場合には、プロセスは、(ステップ5250において)最後の再帰レベル上に位置しているかどうかを判断する。位置していない場合には、プロセスは、次の再帰レベルを選択し、ステップ5210に戻り、次の下位の再帰レベルのネットに対してより詳細な経路を指定する。プロセスが、(ステップ5250において)それが最後の再帰レベル上に位置すると判断した場合には、プロセスは終了する。
【0081】
E.ソルバー
すでに説明したように、ソルバー3930は、(1)各ネットに対する1つまたはそれ以上の経路の列挙、(2)LP/ILPソルバーに対する、各ネットに対する経路の選択命令、(3)現在のスロットのスロット−ネット・データ構造体内への選択した結果のセーブを行う。図53は、ソルバーが行うプロセス5300である。いくつかの実施形態の場合には、このプロセスは、スロット・マネージャが、ソルバーを呼び出し、ソルバーに経路へのスロットを供給した時にスタートする。
プロセス5300は、最初に、(ステップ5305において)スロット内の各パスに対するリソースの混雑を予測する。図54および図55を参照しながら、パスの混雑を予測するための1つの方法について以下に説明する。次に、プロセスは、(ステップ5310において)供給されたスロット内の各ネットに対する1つまたはそれ以上の経路を識別する。図57〜図60を参照しながら、現在のスロット内のネットに対する経路を識別するための1つの方法について、以下に説明する
現在のスロット内の各ネットに対する(すなわち、現在のスロットのデータ構造体にリンクしている、スロット−ネット構造体を持つ各ネットに対する)、1つまたはそれ以上の経路を識別した後で、プロセス5300は、(ステップ5315において)次の下位の再帰レベルへの伝搬を要因として考慮することにより、検索した各ツリーに、ワイヤ長さコストを割り当る。いくつかの実施形態の場合には、プロセスは、この伝搬を説明するために貪欲な技術を使用する。図64を参照しながら、検索した各ツリーに対してコストを割り当てるための1つの方法について以下に説明する。
ソルバーが列挙した潜在的経路にワイヤ長さコストを割り当てると、ソルバーは、(ステップ5320において)LPソルバー3945に対する問題を定式化し、LPソルバーは、(ステップ5325において)LP問題を解く。LP問題を定式化し、解くための1つの方法については、VI.E.4節で以下に説明する。
【0082】
ステップ5325の後で、プロセス5300は、(ステップ5330において)LP解を、整数LP(「ILP」)解に変換する。いくつかの実施形態は、この変換を行うために、ランダム化四捨五入を使用する。ランダム化四捨五入は、既知の技術であり、多数の文献がこの技術の多数の例を記載している。例えば、ケンブリッジ大学出版部のRajeev MotwaniおよびPrabhakar 「Raghavanのランダム化アルゴリズム」(1995年、1997年)がこの技術を説明している。
ランダム化四捨五入プロセスの一例について以下に説明する。最初に、このプロセスは、LPソルバーが返送したスコアを、0と1の間の確率にマッピングする。例えば、LPソルバーが、0と1の間の真の解を返送した場合には、返送された解と0と1の間の確率の間には、1:1のマッピングが存在する。第二に、四捨五入プロセスは、各ネットに対して0と1の間の乱数を生成する。第三に、四捨五入プロセスは、そのネットに対して生成された乱数に対してマッピングされる、ネットの解を選択する。第四に、四捨五入プロセスは、(LPソルバーが使用するもののような)いくつかの目的関数または関数に基づいて、ネットに対する一組の選択した経路の品質を測定する。第五に、四捨五入プロセスは、解のスペースが十分探索されるまで、第2〜第4の動作を逐次反復する。第六に、プロセスは、最善の品質のスコアになる一組の経路を選択する。
ステップ5330で選択した一組の経路に基づいて、プロセスは、(ステップ5335において)現在のスロットの各スロット−ネット・データ構造体内に、42ビットの選択した経路ストリングを記憶する。この42ビットのストリングは、ネットの選択した経路が取る現在のスロット内のパスを指定する。その後、プロセスは終了する。
【0083】
1.残りのパス容量の予測
すでに説明したように、プロセス5300は、(ステップ5305において)現在のスロット内のパス・リソースの混雑を予測する。いくつかの実施形態の場合には、プロセスは、スロット内の各パスの残りの容量を推定することにより、パス混雑を指定する。例えば、いくつかの実施形態の場合には、プロセスは、最初に、(1)各パスのブロックされていない容量を推定することにより、(2)各パスの使用を推定することにより、(3)そのブロックされていない容量の推定値から、各パスの使用推定値を引くことによりパスの容量を計算する。図54を参照しながら、ブロックされていないパスの容量を推定するための1つの方法について以下に説明する。一方、図55を参照しながら、パス使用を推定するための1つの方法について以下に説明する。
a.各パスのブロックされていない容量の推定
図54は、現在のスロット内の各パスのブロックされていない容量を推定するためのプロセス5400である。最初に、このプロセスは、(ステップ5402において)浮動小数点数の42フィールドで、データ構造体を割り当てる。各フィールドは、42のパスの中の1つのブロックされていない容量を記憶するためのものである。ステップ5402において、プロセスは、また、データ構造体内の経路の各フィールドを、そのパスに対するデフォールト容量値に初期化する。
ステップ5404において、プロセスは、回路モジュールの現在のスロットのリスト内の1つの回路モジュールを選択する。次に、プロセスは、(ステップ5406において)選択した回路モジュールに対する回路マクロを検索する。次に、プロセスは、(ステップ5408において)回路マクロ上の障害物を選択し、(ステップ5410において)回路モジュールの位置により、選択した障害物の囲みボックスを計算する。
次に、プロセスは、(ステップ5412において)現在のスロットの42のパスの中の1つを選択する。次に、プロセスは、(ステップ5414において)ステップ5412において選択したパスが、ステップ5408において選択した障害物の層と同じ層上に位置するかどうかを判断する。選択したパスの層が、選択した障害物の層と一致する場合には、プロセスは、(ステップ5422において)選択したパスの囲みボックスを計算する。別のいくつかの実施形態は、パスに対する囲みボックスを別の方法で定義する。例えば、いくつかの実施形態は、パスの長方形の囲みとして、マンハッタン・パスおよび非マンハッタン・パスの両方に対して囲みボックスを定義する。このようなアプローチの場合、対角線パスの周囲の長方形の丸い光は、x−y座標軸に対して対角線方向に位置する。他のいくつかの実施形態は、対角線パスの囲みボックスを別の方法で定義することができる。例えば、いくつかの実施形態は、対角線パスの周囲の4のマンハッタン縁部を含む、4の長方形の円光(4の囲みボックス)により、このような囲みボックスを定義することができる(例えば、対角線パス26の囲みボックスは、縁部・E1、E4、E13、およびE14を含む4のボックスを含む)。
【0084】
次に、プロセスは、(ステップ5424において)そのパスの囲みボックスの面積を計算する。次に、プロセスは、(ステップ5426において)選択したパスの囲みボックスと選択した回路モジュールの囲みボックスの交差を識別し、(ステップ5428において)この交差の面積を計算する。
次に、プロセスは、(ステップ5430において)計算したパス面積で、計算した交差面積を割ることにより、妨害係数を計算する。次に、プロセスは、(ステップ5432において)障害物により妨害されたパスのトラックの数を推定するために、妨害係数にデフォールトパス容量を掛ける。次に、プロセスは、(ステップ5434において)42のフィールドのデータ構造体内にパスに対して記憶されているパスの現在のブロックされていない容量からこの乗算の結果を引く。次に、プロセスは、ステップ5416に進むが、このステップについては以下に説明する。
選択したパスの層が選択した障害物の層と同じでない場合には、プロセスは、また、ステップ5414からステップ5416に進む。ステップ5416において、プロセスは、現在のスロット内のすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ5412に戻り、現在のスロットの他のパスを選択する。
しかし、選択したパスが現在のスロットの最後のパスである場合には、プロセスは、(ステップ5418において)ステップ5404において選択した回路モジュールのすべての障害物をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ5408に戻り、選択した回路モジュールの他の障害物を選択する。チェックしていた場合には、プロセスは、(ステップ5420において)現在のスロット内のすべての回路モジュールをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ5404に進み、現在のスロット内の他の回路モジュールを選択する。
現在のスロット内のすべての回路モジュールをチェックした場合、プロセス5400は終了する。この段階で、42のフィールドのデータ構造体は、現在のスロット内の42のパスのブロックされていない容量を指定する。より詳細に説明すると、この段階で、42の各フィールドは、42のパスの中の1つのブロックされていない容量を指定する。
【0085】
b.パス使用の推定
図55は、1つのスロット内の各パスの使用を推定するためのプロセス5500である。このプロセスは、3つの使用構成要素により、現在のスロット内の各パスの使用を計算する再帰的プロセスである。第1のパス使用構成要素は、現在のスロットの子スロット間の経路によるパス使用を表す。第2の構成要素は、現在のスロットの子スロット内の経路によるパスの混雑を表す。第3の構成要素は、パス混雑に対するバイアの影響を表す。通常の当業者であれば、他の実施形態は、別の方法でパスの使用を計算することを理解することができるだろう。例えば、リーフ・スロットの唯一の子スロット内に位置する各ネットの場合には、いくつかの実施形態は、また、そのネットを含む子スロットに入射する各パスに対する、トークン・パス使用値を含む。
プロセス5500は、自分が現在のスロットを受け取る度にスタートする。図55に示すように、プロセス5500は、最初に、(ステップ5502において)現在のスロットがリーフ・スロットであるかどうかを判断する。そうである場合には、プロセスは、ステップ5512に進むが、このステップについては以下に説明する。そうでない場合には、プロセスは、現在のスロットの子スロット内の経路による使用値を計算するために、ステップ5504および5510を実行する。より詳細に説明すると、ステップ5504において、プロセスは、現在のスロットの子スロットの中の1つを選択する。次に、プロセスは、(ステップ5506において)現在のスロットの子スロットの各パスの使用を推定する。いくつかの実施形態の場合には、プロセスは、各子スロットに対して自身を再帰的に呼び出すことにより、上記推定を行う。
次に、プロセスは、(ステップ5508において)ステップ5504において選択した子スロットが、最後の子スロットであるかどうかを判断する。そうでない場合には、プロセスは、(ステップ5504において)他の子スロットを選択し、(ステップ5506において)新しく選択した子スロット内のパス使用を推定する。そうである場合には、プロセスは、ステップ5510に進み、現在のスロットの子スロット内の混雑によるパス使用構成要素を計算する。
【0086】
いくつかの実施形態の場合には、プロセスは、現在のスロット内の42のパスの使用値を記憶するための、42のフィールドを含む(例えば、アレーのような)データ構造体内に、ステップ5510において計算したパス使用値を記憶する。プロセスは、いくつかの実施形態の場合現在のスロットでこのデータ構造体を受け取り、一方、他の実施形態の場合には、プロセス5500は、このようなデータ構造体を受け取らないが、スタートする時に、データ構造体を初期化する。
ステップ5510において、プロセスは、子スロット内の混雑によるパス使用構成要素を計算する。例えば、プロセスは、下式により子スロット1および2内の混雑により、子スロット1および2間のパス1の構成要素使用値を定義することができる。
パス1の使用=[(0.75)+(0.25)*(1/(1/再帰レベルの数−現在のレベル))]
ここで、パス・[i][j]は、子スロットiのパスjの使用である。現在のスロット内の他の41のパスに対する構成要素使用値を類似の方法で定義するために、類似の式を使用することができる。
上式は、パス1と一直線になっている水平パス・ラインを子スロット内でチェックする場合にだけ使用される。より詳細に説明すると、プロセスは、子スロット1および2のすべての水平パス(すなわち、パス0〜11)により、パス1の構成要素使用値をチェックする。現在のスロット内のパス1の容量が、子スロット1および2内のパスの容量により、等しく影響を受けることを反映するために、子スロット1および2両方の使用値の合計には、1/2が掛けられる。
乗数1/2、1/3および、1/6は、下記の理由で子スロット1および2に対する合計で使用される。目的は、1つのパスを通して何本のワイヤを通すことができるかを推定することである。これらのワイヤの中のあるものは、パスを通過した直後で終わっているが、一方、あるものは、そのパスに入射するスロットの幅全体を横切っている。パス1の伝搬0に対して、1/4は、子スロット2のスロット0内で終わり、1/4は子スロット2のスロット1内で終わり、1/4は、子スロット2のスロット2内で終わり、1/4は子スロット2のスロット3内または、超えて終わるように、パスを使用するワイヤの「終点」が均等に分布しているものと仮定する。このことは、パス1を使用するワイヤの中の3/4は、子スロット2のパス0も使用し、2/4は、子スロット2のパス1を使用し、1/4は、子スロット2内のパス3を使用することを意味していて、伝搬したパスの推定使用上のこれら3つのパスの使用の相対的なインパクトは、3:2:1(または、3/6、2/6、1/6)になる。
【0087】
また、子スロット1および2内の使用値の合計には、[(0.75)+(0.25)*(1/(再帰的レベルの数−現在のレベル)]が掛けられる。この乗算は、大部分のネット経路は、2つの真のピンを接続している1本のパスを含むという仮定に基づいている。孫スロット内にピンが均等に分布していると仮定した場合、所与のパスを使用する経路の3/4番目は、各子スロット内に全部が含まれているネットからの混雑に遭遇することになる。ルータが階層内を下に向かって移動すると、経路のもっと多くの割合が、全孫スロットを通り、そのため、もっと多くのネットが、窓のスロット内の全混雑に遭遇することになり、それにより、当然乗数は1へ増大する。
ステップ5502または5510からプロセスはステップ5512に進む。プロセスは、現在のスロットの子スロット間の経路による構成要素使用値を計算するために、動作5512〜5528を実行する。プロセスは、上記確率的シュタイナー・ツリー貢献によりこれら構成要素値を計算する。
ステップ5512において、プロセスは、1つのネットを選択する。次に、プロセスは、(ステップ5514において)現在のスロット内の選択したネットのピン構成を検索する。次に、プロセスは、(ステップ5516において)検索したピン構成に対する確率的シュタイナー・ツリー値を識別する。すでに説明したように、図28は、図5に示すネット505のピン構成に対する確率的シュタイナー・ツリー値である。いくつかの実施形態は、図26のところですでに説明したように、確率的シュタイナー・ツリー値を再度計算する。しかし、他の実施形態は、パス使用推定プロセス5500中にこれらの値を生成する。
【0088】
次に、プロセスは、(ステップ5520において)42フィールド・データ構造体内のパス使用値に、各パス使用確率値を加算する。次に、プロセスは、パス混雑上のネットに対するバイアの影響を説明するために、トークン使用値を計算するために、ステップ5522〜5530を実行する。ネットが現在のスロットの子スロット内に1つまたはそれ以上のピンを持っている場合には、これらのピンは、通常、下の金属層上に位置する。それ故、そのネットに対して指定されたパスへ、これらのピンの中のあるものを接続するために追加しなければならない。各バイアの追加は、パス混雑を増大する。
ステップ5522において、プロセスは、ステップ5512において選択した、ネットのピンの中の1つを含む子スロットを選択する。このネットは、1つまたはそれ以上の経路を持ち、各経路は、1つまたはそれ以上のパスを使用する。それ故、ステップ5524において、プロセスは、ステップ5522において選択した子スロット上に入射する経路パスの中の1つを選択する。次に、プロセスは、(ステップ5526において)トークン量だけ、選択したパス使用値を増大する。いくつかの実施形態の場合には、トークン量は、0.5/(再帰レベルの数 − 現在の再帰レベル)である。
次に、プロセスは、(ステップ5528において)選択した子スロット上に入射する(選択したネットのすべてのツリーの)すべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、(ステップ5524において)選択した子スロット上に入射する他のパスを選択し、その後で、(ステップ5526において)トークン量だけ、選択したパス使用値を増大する。
一方、プロセスが、(ステップ5528において)選択した子スロット上に入射する最後のパスを、チェックしたと判断した場合には、プロセスは、(ステップ5530において)選択したネットに対する1つのピンを含む最後の子スロットをチェックしたと判断する。チェックしていなかった場合には、プロセスはステップ5522に戻り、選択したネットに対する1つのピンを持つ他の子スロットを選択する。チェックした場合には、プロセスは、(ステップ5532において)現在のスロット内の最後のネットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ5512に戻り、他のネットを選択し、このネットに対して以降の動作を実行する。プロセスが、ステップ5532において、最後のネットをチェックしたと判断した場合に、プロセスは終了する。
【0089】
2.現在のスロット内の各ネットに対する経路の識別
(ステップ5305において)現在のスロット内の各パスの残りの容量をチェックした後で、プロセスは、(ステップ5310において)現在のスロット内の各ネットに対する1つまたはそれ以上の経路を識別する。下記のいくつかの実施形態は、最初に、各ネットに対する1つまたはそれ以上の経路を識別するために、現在のスロットに関する各ネットの構成を使用する。
次に、これらの実施形態は、いくつかのネットまたはすべてのネットに対して、偽の構成を生成し、生成した偽の構成に基づいて、ネットに対する追加の経路を識別する。いくつかの実施形態は、ネットに対する偽の構成を生成するために、2つの異なるアプローチを使用する。第1のアプローチは、ネット構成に偽のピンを追加する。このアプローチについては、図56〜図58を参照しながら以下に説明する。第2のアプローチは、ネット構成を、2つまたはそれ以上の構成に分割し、新しい構成に偽のピンを追加する。このアプローチについては、図60および図59を参照しながら以下に説明する。
【0090】
a.各ネット構成に対する経路の識別、およびネット構成に偽のピンを追加することによる迂回路の可能性の生成
図56は、プロセス5600が、各ネット構成に対する経路の識別、およびネット構成に偽のピンを追加することによる迂回路の可能性の生成を示す。この図に示すように、プロセス5600は、最初に、(ステップ5602において)現在のスロット内の1つのネット構成を選択する。ステップ5604において、プロセスは、(1)選択したネットに対する経路を識別するために、現在のスロット内のネット構成を使用し、(2)ソルバー内の変数内の選択したネットに対する識別した経路を記憶する。プロセス5600は、第V節ですでに説明したアプローチの中の1つに基づいて、特定のネット構成に対するツリーを識別する。
選択したネット構成に基づいて経路を識別し、記憶した後で、プロセスは、選択したネットに対して迂回路を生成する必要があるかどうかを判断し、必要がある場合には、1つまたは2つの偽のピンを追加することによりこれらの迂回路を生成するために、動作5606〜5668の中のいくつかまたは全部を実行する。
プロセス5600は、ステップ5604において識別したすべての最適な経路、が、「危険な状態にある」1つまたはそれ以上のパスを使用する選択したネットに対して迂回路を生成する。推定した混雑(パス使用+閉鎖)が、パスの容量に近かったり、超えている場合には、パスは「危険な状態」にある。いくつかの実施形態は、(ステップ5305において計算した)パスの残りの容量が、しきい値より少ないかどうかを判断することにより、あるパスが「危険な状態にある」かどうかを判断する。あるパスが「危険な状態にある」と定義されるしきい値を変化させることにより、変化するネットの数に対して、次善の経路を生成することができる。
【0091】
図57および図58は、1つまたは2つの偽のピン構成を追加することにより、次善の迂回路を生成する方法の例を示す。より詳細に説明すると、図57は、子スロット8および11内に2つのピン5710および5715を含む、あるネットに対する次善の経路5725を示す。この次善の経路は、偽のピン5705を追加することにより生成される。この次善の経路5725は、障害物5720により混雑している(子スロット9および10間の)水平パスP7を避ける。ネットのピン配列に仮想ピン5705を追加すると、新しいピン構成になる。この新しいピン構成に対する最適な経路は、ピン5710および5715を持つもとのネットに対して次善の経路を提供する。この次善の経路は、「危険な状態にある」パス7を使用しない。
図58は、2つの偽のピン5805および5810が、ピン5815および5820を持つネットに追加された例を示す。これら2つの偽ピンは、障害物5825により閉鎖され、混雑しているパス7および33を避ける次善の経路5830を生成する。
図56のプロセス5600は、(1)ネット構成に1つその後で2つの偽のピンを追加することにより、また(2)結果としてのピン構成に対する最善の最適経路を識別することにより、迂回路を生成する。このプロセスは、最大、ネット構成に2つの偽のピンを追加するに過ぎないが、通常の当業者であれば、他の実施形態も、いくつかのネットまたはすべてのネットに対する有用な迂回路を識別するために、ネット構成にもっと多くのピンを追加することを理解することができるだろう。
ステップ5606において、プロセスは、ステップ5604において識別した経路の中の1つを選択する。次に、プロセスは、(ステップ5608において)ステップ5606において選択した経路のパスのうちの1つを識別する。ステップ5610において、プロセスは、ステップ5608において選択したパスの残りの容量が、しきい値容量値以下であるかどうかを判断する。ステップ5305において、パスの残りの容量が計算される。
プロセスが、(ステップ5610において)パスの残りの容量がそのしきい値容量値以下であると判断した場合には、プロセスは、(ステップ5612において)ステップ5606において選択した経路に使用不能のフラグを付け、ステップ5616に進むが、このステップについては後で説明する。そうでない場合には、プロセスは、(ステップ5614において)選択した経路のすべてのパスをチェックしたかどうかを判断する。すべてのパスをチェックしていなかった場合には、プロセスは、5608に戻り、選択した経路の他のパスを選択する。チェックしていた場合には、プロセスは、ステップ5616に進む。
【0092】
ステップ5616において、プロセスは、ステップ5604において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ5606に進み、選択したネットに対して識別した経路を選択する。チェックしていた場合には、プロセスは、(ステップ5618において)選択したネットに対するすべての識別した経路に使用不能というマークを付けたかどうかを判断する。付けていなかった場合には、ネットは、任意の「危険な状態にある」パスを使用しない1つまたはそれ以上の経路を持つ。それ故、プロセスは、このネットに対しては偽の構成を生成しない。次に、プロセスは、(ステップ5620において)現在のスロット内のすべてのネットをチェックしたかどうかを判断する。すべてのネットをチェックしていた場合には、プロセスは終了する。チェックしてなかった場合には、プロセスはステップ5620からステップ5602に進み、現在のスロット内の他のネットを選択する。
プロセスが、(ステップ5618において)選択したネットに対するすべての識別した経路が使用不能と判断した場合には、プロセスは、(ステップ5622において)現在のスロットの子スロットを選択する。次に、選択したネットに対して、プロセスは、(ステップ5624において)そのネットがステップ5622において選択した子スロット内にピンを持つことを示す偽のピン構成を生成する。いくつかの実施形態の場合には、プロセスは、現在のスロット内の選択したネットの実際のピン構成を複写し、複写したピン構成が、ステップ5622において選択した子スロットに対する1つのピンを示すことを確認することにより、この偽のピン構成を生成する。図57の例の場合には、プロセスは、もとの構成0000100100000000に、6番目の子スロットに対する「1」を追加することにより、偽の構成0000100101000000を生成する。
【0093】
次に、プロセスは、(ステップ5626において)ステップ5624において生成した偽のピン構成に対する経路を識別する。プロセスは、第V節ですでに説明した方法の中の1つにより、このピン構成に対するこれら経路を識別することができる。次に、プロセスは、(ステップ5628において)ステップ5626において識別した経路の中の1つを選択する。次に、プロセスは、(ステップ5630において)選択した経路が使用できるかどうかを判断する。プロセスは、この判断を、すでに説明したステップ5608〜5616類似の使用度チェック動作により行う。プロセスが、(ステップ5630において)ステップ5628において選択した経路が使用できないと判断した場合には、プロセスはステップ5634に進むが、このステップについては、後で説明する。選択した経路が使用できない場合には、プロセスは、(ステップ5632において)生成した偽の構成に対して選択した経路のコストを記録し、次にステップ5634に進む。
ステップ5634において、プロセスは、生成した偽の構成に対してステップ5626において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ5628に戻り、他の識別した経路を選択する。チェックしていた場合には、プロセスは、(ステップ5636において)現在のスロットのすべての子スロットに対して偽のピン構成を生成したかどうかを判断する。生成していなかった場合には、プロセスはステップ5622に戻り、他の子スロットを選択する。
生成していた場合には、プロセスは、(ステップ5638において)もしあるばあいには、ステップ5632において記録した最善のコストの使用することができる経路になる偽のピン構成を識別する。ある構成がステップ5638において識別された場合には、プロセスは、(ステップ5640において)ステップ5638において識別したピン構成に対するすべての使用することができる経路を識別し、現在のネットに対する一組の可能なルーティング解にこれら経路を追加する。
【0094】
次に、プロセスは、最大2までの偽のピンを含む偽の構成に対する経路を生成するために、ステップ5642〜5668を実行する。より詳細に説明すると、ステップ5642において、プロセスは、現在のスロットの子スロットを選択する。プロセスは、(ステップ5644において)現在のスロット内の選択したネットの実際のピン構成を複写する。次に、プロセスは、(ステップ5646において)複写したピン構成が、ステップ5642において選択した子スロットに対するピンを示すことを確認する。図58の例の場合には、プロセスは、もとの構成0000100100000000に6番目の子スロットに対する「1」を追加することにより、最初の偽の構成0000100101000000を生成する。
ステップ5648において、プロセスは、ステップ5642において選択した子スロット以外の子スロットを選択する。次に、プロセスは、(ステップ5650において)そのネットがステップ5648において選択した子スロット内の1つのピンを持つことを示す偽のピン構成を生成する。いくつかの実施形態の場合には、プロセスは、ステップ5646において識別したピン構成を複写し、複写したピン構成が、ステップ5648において選択した子スロットに対する、1つのピンを示すことを確認することによりこの偽のピン構成を生成する。図58の例の場合には、プロセスは、最初の偽の構成0000100101000000に5番目の子スロットに対する「1」を追加することにより、最後の偽の構成0000100101100000を生成する。
次に、プロセスは、(ステップ5652において)ステップ5650において生成した偽のピン構成に対する経路を識別する。ステップ5604および5626のところでのように、プロセスは、第V節のところですでに説明した方法の中の任意の方法により、生成したピン構成に対するこれら経路を識別することができる。
次に、プロセスは、(ステップ5654において)ステップ5652において識別した経路の中の1つを選択する。次に、プロセスは、(ステップ5656において)選択した経路が使用することができるかどうかを判断する。プロセスは、この判断を、すでに説明したステップ5608〜5616類似の使用度チェック動作により行う。ステップ5654において選択した経路が使用できない場合には、プロセスはステップ5660に進むが、このステップについては後で説明する。選択した経路が使用できる場合には、プロセスは、(ステップ5658において)生成した偽の構成に対して選択した経路のコストを記録し、その後で、ステップ5660に進む。
【0095】
ステップ5660において、プロセスは、ステップ5650において生成した偽のピン構成に対して、ステップ5652において識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ5654に戻り、他の識別した経路を選択する。チェックしていた場合には、プロセスは、(ステップ5662において)ステップ5642において選択した子スロット以外のすべての子スロットに対して、偽のピン構成を生成したかどうかを判断する。生成していなかった場合には、プロセスはステップ5648に戻り、ステップ5642において選択した子スロット以外の他の子スロットを選択する。
生成していた場合には、プロセスは、(ステップ5664において)すべての子スロットを潜在的な第1の偽のピンとしてチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ5642に戻り、他の子スロットを選択する。すべての子スロットを潜在的な第1の偽のピンとしてチェックした場合には、プロセスは、(ステップ5666において)もしある場合は、ステップ5658において記録した最善のコストの使用することができる経路になる偽のピン構成を識別する。ある構成がステップ5666において識別された場合には、プロセスは、(ステップ5668において)ステップ5666において識別したピン構成に対するすべての使用することができる経路を識別し、現在のネットに対する一組の可能なルーティング解にこれらの経路を追加する。
ステップ5668から、プロセスは、ステップ5620に進む。ステップ5620において、プロセスは、現在のスロット内のすべてのネットをチェックしたかどうかを判断する。すべてのネットをチェックした場合には、プロセスは終了する。チェックしていなかった場合には、プロセスは、現在のスロット内の他のネットを選択するために、ステップ5620からステップ5602に進む。
【0096】
b.ネット構成のもっと小さいピン構成への分割、およびもっと小さい方ピン構成への偽のピンの追加
ある場合には、ネット構成に偽のピンを追加しただけでは、最もよい次善の経路にはならない。場合によっては、このような経路を、(1)1つのネットのピン構成から2つまたはそれ以上のピン構成を生成することにより、(2)生成したピン構成に対する偽の構成を識別することにより、(3)この構成に対する経路を識別することにより、(4)1つまたはそれ以上の次善の経路を発見するために、結果として得られる経路を結合することにより生成することができる。このようなアプローチは、混雑したパスが、2つの隣接している「実際」のピンの間に位置しているような状況において特に有用である。
図59は、このようなアプローチの一例である。この例の場合には、1つのネットは、2つのピン5905および5910を含む。偽のピン5915をもとのネット構成に追加した場合には、結果として得られるネット構成に対する経路は、パスP6およびP21を使用する。しかし、このような経路は使用できない。何故なら、障害物5920がパスP6を完全に閉鎖しているからである。パス21および36を使用するもっと理想的な経路は、(1)ピン構成を、一方はピン5905を含むピン構成、他方はピン5910を含むピン構成の2つのピン構成に分割することにより、(2)偽のピン5915を、結果として得られる両方のピン構成に追加することにより入手することができる。
図60は、あるネット構成に対する追加の経路を識別するプロセス6000である。このプロセスは、ネットのピン構成から2つのピン構成を生成し、生成した両方のピン構成に対する偽の構成を識別し、偽の構成に対する経路を識別し、結果として得られる経路を結合する。いくつかの実施形態は、現在のスロット内の各ネットに対してこのプロセスを実行し、一方、他の実施形態は、プロセス5600が使用できる経路を発見できなかったネットのようないくつかのネットに対してだけこのプロセスを実行する。
図60に示すように、プロセス6000は、(ステップ6002において)現在のスロット内のあるネットに対する1つまたはそれ以上の経路を識別することによりスタートする。プロセスは、第V節のところですでに説明した方法の中の任意の方法により、ネットのピン構成に基づいてこれらの経路を識別することができる。次に、プロセスは、(ステップ6004において)それに入る識別した経路の大部分のパスを持つ子スロットを識別する。次に、プロセスは、(ステップ6006において)2つのビットの組bset1およびbset2を定義する。いくつかの実施形態の場合には、各ビットの組は、16のビットを持ち、これらすべてのビットは最初にゼロとして定義される。
【0097】
次に、ステップ6008において、プロセスは、ステップ6004において識別した子スロットに対応する第1のビットの組のビットを1に設定する。ステップ6008において、プロセスは、現在のネットの複数のピンを含む残りの子スロットに対応する第2のビットの組の1つまたは複数のビットを1に設定する。ステップ6010において、プロセスは、一方は、多数の解の最善の長さを測定するために使用する最善の長さ変数であり、他方は、最善の長さになる解を識別するために使用する最善の迂回路変数である2つの変数を初期化する。最善の長さ変数は、ある大きな値に初期化され、一方、最善の迂回路変数はゼロに初期化される。
ステップ6012において、プロセスは、現在のスロットの子スロットの中の1つを選択する。次に、プロセスは、(ステップ6014において)現在のネットのピン構成が、1に設定された選択した子スロットの対応するビットを持っているかどうか(すなわち、現在のネットが、選択した子スロット内に1つのピンを持っているかどうか)を判断する。持っている場合には、プロセスは、(ステップ6016において)現在のスロットの各子スロットに対して、偽の構成を生成しようとしたかどうかを判断する。現在のスロットのすべての子スロットをチェックしていなかった場合には、プロセスは、ステップ6012に戻り、他の子スロットを選択する。チェックしていた場合には、プロセスはステップ6040に進むが、このステップについては後で説明する。
プロセスが、(ステップ6014において)現在のネットのピン構成内で、選択した子スロットに対応するビットが1に設定されていないと判断した場合には、プロセスは、(ステップ6018において)2つのビットの組bitset1およびbitset2から2つの複写したビットの組bitset1cおよびbitset2cを生成する。複写した各ビットの組において、次に、プロセスは、(ステップ6020において)選択した子スロットに対応するビットを1に設定する。
【0098】
次に、プロセスは、(ステップ6022において)複写し、修正した各ビットの組に対する1つまたはそれ以上の経路を識別する。プロセスは、第V節ですでに説明した方法の中の任意の方法により、複写し、修正したビットの組を識別することができる。次に、プロセスは、(ステップ6024において)第1の複写し、修正したビットの組(すなわち、bitset1c)に対する経路の中の1つを選択し、(ステップ6026において)第2の複写し、修正したビットの組(すなわち、bitset2c)に対する経路の中の1つを選択する。次に、ステップ6028において、プロセスは、2つの選択した経路が重なり合っているかどうか(すなわち、2つの解が、子スロット間の1つまたはそれ以上の経路を共有しているかどうか)を判断する。重なり合っている場合には、プロセスはステップ6036に進むが、このステップについては後で説明する。
重なっていない場合には、プロセスは、(ステップ6030において)ステップ6024および6026において選択した2つの経路を結合することによりできる1つの経路の長さを計算する。いくつかの実施形態の場合には、プロセスは、ステップ6024および6026において選択した2つの経路の長さを合計することによりこの長さを計算する。ステップ6032において、プロセスは、ステップ6030において計算した長さが、現在の最善の長さより短いかどうかを判断する。短くなかった場合には、プロセスは、ステップ6036に進むが,このステップについては後で説明する。
ステップ6030において計算した長さが、現在の最善の長さより短かかった場合には、ステップ6024および6026において選択した2つの経路は、プロセス6000が今迄見た最善の解を表す。それ故、ステップ6034において、プロセスは、ステップ6030において計算した長さに等しい最善の長さを定義する。ステップ6034において、プロセスは、また、ステップ6024および6026において選択した2つの経路の組合わせとして、新しい経路を生成し、最善の迂回路を生成した新しい経路として定義する。ステップ6034から、プロセスはステップ6036に進む。
【0099】
ステップ6036において、プロセスは、第1の複写し、修正したビットの組(bset1c)に対して、ステップ6024において選択した経路で、第2の複写し、修正したビットの組(bitset2c)に対して(ステップ6022において)識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ6026に戻り、第2のbitset2cに対する別の経路を選択する。チェックしていた場合には、ステップ6038において、プロセスは、第1の複写し、修正したビットの組(bitset1c)に対して、(ステップ6022において)識別したすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ6024に戻り、チェックするために、第1のbitset1cに対する別の経路を選択する。
プロセスが、(ステップ6038において)第1の複写し、修正したビットの組(bitset1c)に対して、すべての識別した経路をチェックしたと判断した場合には、プロセスは、(ステップ6016において)現在のスロットの各子スロットに対して偽の構成を生成しようとしたかどうかを判断する。生成しようとした場合には、プロセスは、(ステップ6040において)(もしある場合には)、プロセスが最善の迂回路として識別した解を現在のネットの解のプールに追加し、終了する。一方、プロセスが、各子スロットに対して偽の構成を生成しようとしなかった場合には,プロセスはステップ6012に戻り、他の子スロットを選択する。
【0100】
3.潜在的な経路に対するコストの割当て
(ステップ5310において)現在のスロット内の各ネットに対する1つまたはそれ以上の経路を識別した後で、プロセス5300は、(ステップ5315において)次の下位の再帰レベルへの伝搬の要因を考慮して、検索した各ツリーに対してワイヤ長さコストを割り当てる。いくつかの実施形態の場合には、各経路のコストは、下記の3つの構成要素コスト、すなわち、(1)現在のスロットの子スロットを接続している経路の、1つまたは複数のパスのワイヤ長さコスト、(2)子スロットへの経路の1つまたは複数のパスのパス伝搬コスト、(3)パス伝搬を選択した後の各子スロット内のコストを含む。
図64は、これら3つの構成要素コストにより各経路のコストを計算するためのプロセスである。このプロセスを説明する前に、図61〜図63を参照しながら、このプロセスが使用する概念上の枠組みについて説明する。これらの図は、いくつかの実施形態が、下位のレベルの子スロットへのより高いレベルの経路の伝搬をモデル化する方法を示す。より詳細に説明すると、図61は、現在のスロットの子スロット間の任意の水平パスまたは垂直パスが、10の伝搬パスの中の1つに沿って子スロットのスロット内に伝搬できることを示す。
【0101】
図62および図63は、下位のレベルの子スロット内への45度の対角線パスの伝搬をモデル化するための2つの異なる方法を示す。図62のモデルは、45度の対角線パスに対する7つの伝搬の可能性を供給する。一方、図63のモデルは、2つの対角線方向に位置する子スロット6305および6310間の45度の対角線パスに対して19の伝搬を供給する。何故なら、図63のモデルは、子スロット6305および6310の縁部に沿って伝搬するパスだけを指定し、それにより、他の子スロットの対応する縁部に沿った3つのパス伝搬に中の任意のものとペアになるために、子スロットの1つの縁部に沿ってパス伝搬できるからである。例えば、図63に示すように、縁部6320に沿った伝搬6315は、縁部6340に沿った伝搬6325、6330および6335のどれかとペアになることができる。このアプローチの場合には、スロット6305および6310間の対角線パスは、19の伝搬を持つことができる。この場合、(1)伝搬の中の9つは、縁部6340沿いの3つのパス伝搬と、縁部6320沿いの3つのパス伝搬をペアにすることにより形成され、(2)伝搬の中の9つは、縁部6350沿いの3つのパス伝搬と、縁部6345沿いの3つのパス伝搬をペアにすることにより形成され、(3)伝搬6355の中の1つは、スロット6310の頂部の左の隅とスロット6305の底部の右隅との間に形成される。
図64に示すように、プロセス6400は、最初に、(ステップ6402において)1つのネットを選択する。次に、プロセスは、(ステップ6404において)選択したネットに対して(ステップ5310において)識別した経路に中の1つを(ステップ6404において)選択する。次に、プロセスは、(ステップ6406において)選択した解の全コストを0に初期化する。次に、プロセスは、ステップ6404において選択した経路のパス・コストを識別しなければならない。いくつかの実施形態の場合には、LUT3965の中の1つが、各ネット構成に対する予め表の形にしたワイヤ長さコストを記憶する。これらの実施形態の場合には、ツリーがそのネットの解の組に追加された時に、選択したツリーの予め表の形にしたワイヤ長さコストをLUTから検索することができる。別な方法としては、プロセス6400は、LUTからのツリーの予め表の形にしたワイヤ長さコストを検索するために、現在のネットに対する選択したツリーの識別になったピン構成を使用することができる。
【0102】
しかし、以下に説明するいくつかの実施形態の場合には、プロセス6400は、ステップ6408〜6412を実行することにより、選択した経路のパス・コストを計算する。より詳細に説明すると、ステップ6408において、プロセスは選択した経路の1つのパスを選択する。次に、プロセスは、(ステップ6410において)選択した解の全コストを、ステップ6408において選択したパスのコストだけ増大する。いくつかの実施形態は、単に他のパスと比較したパスの相対的な長さに基づいてパスのコストを定義する。例えば、いくつかの実施形態は、スロット間(例えば、図12の各パスP0−P23)の各水平パスまたは垂直パスに対して1というパス・コストを割り当て、スロット間(例えば、各パスP024−P041)の各対角線パスに対して1.4というパス・コストを割り当てる。他の実施形態は、スロット間(例えば、図12の各パスP0−P23)の各水平パスまたは垂直パスに対して5というパス・コストを割り当て、スロット間(例えば、各パスP024−P041)の各対角線パスに対して7というパス・コストを割り当てる。
いくつかの実施形態は、相対的なパスの長さだけに基づかないで、パス・コストを定義することができる。ある目的(例えば、下位の層配線の使用を促進するため、またはバイアの使用を少なくするため)を達成するために、いくつかの実施形態は、下位の層の配線と比較した場合、より高いレベルを通るパスを、その相対的な長さのコストよりも高いコストにすることができる。例えば、いくつかの実施形態は、スロット間の各水平パスまたは垂直パスに対して1というパス・コストを割り当て、スロット間の各対角線パスに対して1.4よりも大きいパス・コストを割り当てる。
ステップ6412において、プロセスは、すべての選択した経路のパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ6408に戻り、コスト計算するために他のパスを選択する。プロセスが、(ステップ6412において)すべての選択した経路のパスをチェックしたと判断した場合には、プロセスは、(ステップ6414において)現在のスロットがリーフ・レベルのスロットであるかどうかを判断する。そうである場合には、プロセスは、ステップ6428に進むが、このステップについては後で説明する。
【0103】
プロセスが、現在のスロットがリーフ・レベルのスロットでないと判断した場合には、プロセスは、子スロット内のワイヤ長さコストを計上する。プロセスは、子スロットへの選択した経路の伝搬の要因を考慮するために、貪欲な技術を使用する。より詳細に説明すると、プロセスは、(ステップ6416において)そのパスのアンカーの数により、選択した各ツリーのパス順序を決める。いくつかの実施形態は、アンカーをパスが入るどちらかの子スロットとして定義する。これらの実施形態の場合には、パスは、最高2つのアンカーを持つ。他の実施形態は、アンカーを子スロットのスロット内のピンの数として定義することができる。このようなアプローチの場合、1つのパスが、各子スロットの16のスロット内に16のピンを持っている場合には、1つのパスは、最高32のアンカーを持つことができる。いくつかの実施形態の場合には、プロセスは、アンカーの降順にパスをソートする(すなわち、最初に、そのソートしたリスト上に最大の数のアンカーを持つパスを置く)。
次に、6418において、プロセスは、ソートした順序で1つのパスを選択する(すなわち、下から上にソートしたリスト上でパスを選択する)。選択したパスに対して、プロセスは、(ステップ6420において)伝搬の可能性の1つを選択する。すなわち、この段階で、プロセスは、選択したパスが、それが入る2つのスロット間を伝搬することができるいくつかの方法の中の1つを選択する。
図61を参照しながらすでに説明したように、いくつかの実施形態は、現在のスロットの子スロット間の水平パスまたは垂直パスに対して、10の潜在的な伝搬を供給する伝搬モデルを使用する。また、いくつかの実施形態は、図62に示すように、45度のパスに対して7つの潜在的な伝搬を供給する伝搬モデルを使用する。一方、他の実施形態は、図63に示すように、45度のパスに対して19の潜在的な伝搬を供給するモデルを使用する。
【0104】
いくつかの実施形態の場合には、プロセスは、(ステップ6420において)選択したパスに対する最適な伝搬を選択する。最適な伝搬を選択するために、プロセスは、各伝搬の可能性をチェックし、必要な場合には、仮想ピンを追加し、各伝搬の可能性のコストを計算し、最もコストが安い伝搬および経路となる伝搬の可能性を選択する。図65を参照しながらすでに説明したように、各伝搬の可能性は、2つまたは3つの子スロットに入る1つまたは2つのの伝搬パスを指定することができる。それ故、各伝搬の可能性のコストは、伝搬パスのコストに、伝搬の可能性が通る2つまたは3つの子スロット内の、ピン構成のルーティング・コストを加えたものを含む。
図65は、1つのパスの伝搬の可能性の一例である。この図は、スロット0および9に実際のピン6525を持つ1つのネットを示す。このネットに対して選択した経路は、子スロット0および9を接続するために、子スロット5を通るパスP17およびP24を使用する。図65は、パスP24が、パス6510および6515に沿って3つの子スロット(すなわち、子スロット0、1および5)内に伝搬する様子、一方、パスP17が、パス6520に沿って2つの子スロット5および9内に伝搬する様子を示す。伝搬パス6510は、現在のスロットの子スロット0の子スロット7と、現在のスロットの子スロット1の子スロット8との間に位置する。伝搬パス6515は、現在のスロットの子スロット1の子スロット13と、現在のスロットの子スロット5の子スロット2との間に位置する。伝搬パス6520は、現在のスロットの子スロット5の子スロット14と、現在のスロットの子スロット9の子スロット2との間に位置する。図65は、子スロット1、5および9のスロットに追加した5つの仮想ピン6505である。
【0105】
ステップ6420において、プロセスは、また、(1)ステップ6420において識別した伝搬の可能性のパスのコストと、ステップ6418において選択したパスのコストとの間のデルタ・コストを計算し、次に、(2)全コストをこのデルタ・コストだけ増大する。例えば、いくつかの実施形態の場合には、選択したパスが7というコストを持つマンハッタン・パスであり、識別した伝搬が7というコストの対角線パスである場合には、デルタ・コストは2である。また、いくつかの実施形態の場合には、選択したパスが5というコストを持つ対角線パスであり、識別した伝搬が、それぞれが7というコストを持つ2つの対角線パスである場合には、デルタ・コストは7である。いくつかの実施形態の場合には、選択したパスおよびその識別した伝搬の両方がマンハッタン・パスである場合には、デルタ・コストは0である。
ステップ6420において選択した伝搬に対して、プロセスは、(ステップ6422において)必要な場合には、入る子スロット(すなわち、その上にステップ6430において識別した伝搬が入る子スロット)のピン構成記録内に仮想ピンを一時的に記憶する。プロセスは、(もしある場合)選択した経路の他のパスの伝搬コストを計算する際に、これらの一時的に記憶した仮想ピンを使用する。
次に、プロセスは、(ステップ6424において)選択した経路の最後のパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ6418に戻り、ソートしたパス・リスト上の次のパスを選択する。次に、プロセスは、(ステップ6420において)新しく選択したパスに対する最適な伝搬を識別し、(ステップ6422において)任意の必要な仮想ピンを一時的に設定する。
プロセスが、(ステップ6424において)選択した経路のすべてのパスをチェックしたと判断した場合には、プロセスは、(ステップ6426において)選択したツリーの全コストを、そのネットに対して設定された1つのピンを持つ各子スロット内の経路のコストだけ増大する。ステップ6426において、プロセスは、また、選択した経路の全コストを記憶する。解プロセス5300は、そのLP問題を定式化するために、各ツリーの全コストを使用する。
【0106】
ステップ6428において、プロセスは、ステップ6402において選択したネットに対するすべての経路をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、このネットに対する次の経路のコストを計算するために、ステップ6404に進む。プロセスが、(ステップ6428において)ステップ6402において選択したネットに対するすべての経路をチェックしたと判断した場合には、プロセスは、(ステップ6430において)現在のスロット内のすべてのネットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ6402に戻り、現在のスロット内の他のネットを選択し、このネットの経路のコスト計算をするために以降の動作を実行する。プロセスが、(ステップ6430において)現在のスロット内のすべてのネットをチェックしたと判断した場合には、コスト計算プロセス6400は終了する。
通常の当業者であれば、他の実施形態も、プロセス6400とは異なる方法で、ある経路のワイヤ長さコストを計算することを理解することができるだろう。例えば、プロセス6400は、現在の再帰レベルまたはその1つ下の再帰レベルで、ワイヤ長さコストを計算することにより、このコストを計算する。一方、他の実施形態は、現在の再帰レベルからリーフ・レベルのスロットまで下に向かってワイヤ長さコストを計算することによりこのコストを計算することができる。そうするために、いくつかの実施形態は、現在の再帰レベルでパス・コストを計算する再帰プロセスを使用し、その後で、Gcellでない各子スロットに対する(すなわち、リーフレベルのスロットの子ではない各子スロットに対する)ワイヤ長さコストを計算するために、コスト計算プロセスを呼び出す。
【0107】
4.LP問題の定式化およびソルバー
ソルバーが、現在のスロット内のネットの経路にワイヤ長さコストを割り当てた後で、ソルバーは、(ステップ5320において)LPソルバー3945に対するLP問題を定式化する。次に、LPソルバーは、(ステップ5325において)このLP問題を解く。LP問題定式化の際の基本的な変数は、現在のスロット内のネットに対する経路である。各ツリーは、下式、すなわち、「xN_C」により表される。ここで、「x」は、文字定数であり、「N」は、ネット数であり、「_」は、文字定数であり、「C」は、そのネットに対するツリーのリスト内のそのツリーを識別する数字である。例えば、X26_14は、ネット26の14番目のツリーを表す。
いくつかの実施形態の場合には、LPソルバーがチェックした各LP解は、各ツリー変数xN_Cに対する実数の値を含む。LPソルバーのタスクは、多数の制約を満足させる一方で、1つまたはそれ以上の目的関数を最小にするLP解を識別することである。より詳細に説明すると、それが指定のLP問題の1つまたは複数の制約を満足させる場合には、1つの解は、1つの変数LP解だけである。LPソルバーのタスクは、目的関数を最小にする変数LP解(すなわち、指定の制約を満足させる解)を識別することである。すなわち、一組の解から、LPソルバーは、最善の目的関数値を与える変数LP解を識別することである。
いくつかの実施形態は、LPソルバー3945として、(ドイツ語で)「Paralleler und Objektorientierter Simplex−Algorithmus」という名称の、PhD.論文の一部として、Roland Wunderlingが実行した、「SoPlex」ソルバーを使用する。このソルバーに関する情報は、下記のウェブサイト、すなわち、
http://www.zib.de/Optimization/Software/Soplexで入手することができる。
【0108】
a.目的関数
異なる実施形態は、異なる目的関数を使用している。例えば、いくつかの実施形態は、(1)全長を最も短くするための、(2)42すべてのパスを横切る最短の余裕を最大にするための、(3)全体の余裕を最大にするための、(4)任意の個々のパスの最大使用を最小にするための目的関数を使用することができる。しかし、以下に説明する実施形態は、下記の目的関数を最も小さくするLP解を発見しようとする。
【0109】
【数1】
【0110】
最小余裕の表記は、LP定式化の際に2つの例内で使用される。第1の例の場合には、変数Min_Slackは、混雑を定量化するための目的関数の1つの構成要素として使用される(すなわち、目的関数内の混雑の表示としての働きをする)。第2の例の場合、定数minSlackは、42すべてのパスを横切って許容される最小の余裕を指定するために使用される。
パスの余裕は、特定の解に対するすべての混雑(すなわち、閉鎖および、ワイヤの流れ)を計上した後のあるパスの残りの容量である。負の余裕は、あるパスが過度に混雑していることを意味する。目的関数を最も小さくすると、負の最小の余裕が最も小さくなり、それにより、最小の余裕が最大になる。通常の当業者であれば、他の実施形態は、目的関数内で他の混雑表示を使用することができることを理解することができるだろう。
【0111】
いくつかの実施形態の場合には、全ワイヤ長さおよび全バイア数に対する加重係数AおよびBは、相互に等しく設定され、これら両方の係数は、最小の余裕に対する加重係数Cよりも大きい。すなわち、これらの実施形態は、ワイヤ長さおよび、バイア数の方向に目的関数を加重し、その結果、Min_Slack構成要素は、ワイヤ長さおよびバイア数が2つのLP解を区別できない場合だけ異なるものになる。これらの実施形態は、もっと短い全ワイヤ長さおよびもっと小さなバイア数になる解を選択するために、目的関数内のワイヤ長さおよびバイア数を使用する。
他の実施形態は、異なる方法で、目的関数を加重する。例えば、VI.E.4c節に記載するLP定式化は、定式化したLP問題を解くためのLPソルバーの最初の試みに対してだけ、ワイヤ長さパラメータおよびバイア数パラメータの方向に目的関数を加重する。LPソルバーが、その最初の反復で定式化した問題を解くことができない場合(すなわち、LPソルバーが制約に適合する解を発見できなかった場合)、Min_Slack構成要素が、目的関数で主要な構成要素になるように、LP問題は再度定式化される。より詳細に説明すると、LPソルバーの最初の反復に対して、下記の定式化は、全ワイヤ長さおよび全バイア数に対する加重係数AおよびBを相互に等しく設定し、これらの両方の係数は、Min_Slackに対する加重係数Cより大きい。LPソルバーがその最初の反復でLP問題を解かなかった場合には、目的関数の主要なパラメータがMin_Slackになるように、加重係数A、Bおよび/またはCが変更される。
上式(G)が示すように、全ワイヤ長さは、ステップ5315において計算した各ツリーのコストにより計算される。また、上式(H)に示すように、全バイア数は、各ツリーに対するバイアの数により計算される。バイアは、2つの隣接金属層上に位置する経路の2つの部分を接続するために必要な接続部である。
【0112】
図3の八角配線モデルの場合には、層とルーティング方向との間に1:1のマッピングが存在する。このマッピングは、各経路に対するバイアの数を容易に計算するために使用される。それ故、バイアの数は、経路を通り、(1)経路の方向の変更、および、(2)もしある場合は、子スロット内のピンの層とパスとの間の違いを収容するために必要なバイアの数を識別することによりカウントすることができる。
子スロット内の1つのピンと子スロットに入るパスとの間の層の差を考慮に入れるために、ピンの層を識別しなければならない。異なる実施形態は、異なる方法で、実際のピン(すなわち、仮想でないピン)の層を識別する。例えば、いくつかの実施形態は、すべての実際のピンは層2上に位置すると仮定する。他のいくつかの実施形態は、1つのピンの実際の層を識別する。すでに説明したように、いくつかの実施形態は、ピンの層を、ピン・データ構造体4300内に記憶しているピン位置の一部として記憶する。一方、他のいくつかの実施形態は、ピンの層をスロット−データ構造体が参照する回路マクロと一緒に記憶しているピン・マクロの一部として記憶する。いくつかの実施形態は、それに対して仮想ピンが設定された伝搬パスの層と一致させるために、仮想ピン(すなわち、下位のレベルの子スロットへの経路の伝搬に対応するように設定されているピン)の層を定義する。
【0113】
図66および図67は、バイアの数をカウントするための1つの方法を概念的に示す2つの例である。これらの例の場合、配線モデルは下記の通りである。層2は垂直方向、層3は水平方向、層4は+45度方向、および層5は−45度方向である。図66および図67は、子スロット0および9を接続するための2つの経路を示す。これら両方の図においては、子スロット0は、スロット6600への+45度のパスの伝搬に対応するように設定された仮想ピン6605を含む。それ故、仮想ピン6605は、第4の金属層(すなわち、+45度配線に対する金属層)上に位置するといわれる。また、子スロット9は層2上に位置する実際のピンを含む。
図66の経路6610は、2つのバイアを必要とする。この数は、子スロット0からカウントすることができる。このスロットは、第4の層内に1つの仮想ピンを持つ。パスP24は、このスロット上に入り、第4の層を通る。それ故、ピン6605の層およびパスP24間の違いに対応するためにバイアは必要ではない。パスP24も子スロット5に入る。子スロット5は、ピンは持っていないが、それに入るパスP17を持つ。パスP24は、第4の層上に位置し、パスP17は第2の層上に位置しているので、子スロット5内のパス方向の変化に対応するために2つのバイアが必要である。パスP17も、子スロット9に入る。スロット9は、それに入る他のパスを持たないが、層2の上に実際のピン6615を持つ。パスP17とピン6615が両方とも層2上に位置する場合には、ピン6615およびパスP17を接続するのにバイアは必要としない。
【0114】
図67の経路6705は、6つのバイアを必要とする。この数は、子スロット0からカウントすることができる。このスロットは、第4の層内に1つの仮想ピンを持つ。パスP12は、このスロットに接続し、第2の層を通る。それ故、ピン6605およびパスP12間の違いに対応するために2つのバイアが必要である。パスP12も、子スロット4に入る。子スロット4は、ピンを持っていないが、それに入るパスP30を持つ。パスP30は、第4の層上に位置し、パスP12は第2の層上に位置しているので、子スロット4内のパス方向の変化に対応するために2つのバイアが必要である。パスP30も、子スロット9に入る。スロット9は、それに入る他のパスを持たないが、層2の上に実際のピン6615を持つ。それ故、ピン6615の層およびパスP30の層の間の違いに対応するために2つのバイアが必要である。要するに、経路6705に対しては、6つのバイアが必要である。図66および図67の例を見れば分かるとおり、バイアの数は、同じ長さを持つ2つの経路を識別するための有用な表示である。
また、いくつかの実施形態は、LP定式化5320中に、各経路に対するバイアの数を計算する。VI.E.4.c節内のLP定式化は、そのような一実施形態である。しかし、他の実施形態は、ステップ5315においてステップ5320の前に経路のワイヤ長さコストを計算したように、ステップ5320の前に各経路に対するバイアの数をカウントする。別な方法としては、いくつかの実施形態は、LP定式化5320中に各経路のワイヤ長さコストを計算することができる。
【0115】
図68〜図70は、ある経路内のバイアの数を計算するために、一緒に作業する3つのプロセスである。図68のプロセス6800は、あるツリーに対するバイア数を計算するために呼び出される度にスタートする。このプロセスは、最初に、(ステップ6805において)(現在解かれているスロットの)すべてのスロットをチェックしなかったスロットとして初期化する。
ステップ6810において、プロセス6800は、それに入る経路のただ1つのパスを持つスロットを選択し、このスロットを現在のスロットとして定義する。このプロセスは、(ステップ6815において)図69のプロセス6900を呼び出し、このプロセスに現在のスロットを供給する。プロセス6900が返送する値は、バイアの全数である。呼出しプロセス6900の後で、プロセス6800は終了する。
プロセス6900は、再帰的プロセスである。このプロセスは、最初に、(ステップ6905において)現在のスロットのバイアの数を計算する。いくつかの実施形態の場合には、プロセス6900は、図70のプロセス7000を呼び出すことによりこの数を計算する。プロセス7000は、現在のスロットに入るすべての経路のパスを、(ステップ7005において)識別することによりスタートする。次に、プロセス7000は、(ステップ7010において)現在のスロット内のすべての実際のピンおよび仮想ピンを識別する。
次に、プロセス7000は、(ステップ7015において)ステップ7005において識別した各経路のパス、およびステップ7010において識別した各ピンの層を識別する。各パスの層は、図3の八角配線モデルを使用した場合には、パスの方向のタイプとその層との間に1:1のマッピングが存在するので、容易に識別することができる。例えば、いくつかの実施形態は、層2に対して垂直パスをマッピングし、層3に対して水平パスをマッピングし、層4に対して+45度のパスをマッピングし、層5に対して−45度のパスをマッピングする。また、すでに説明したように、いくつかの実施形態は、すべての実際のピンは層2上に位置するものと仮定し、一方、他のいくつかの実施形態は、記憶している1つのピンの実際の層を識別する。さらに、いくつかの実施形態は、仮想ピンが設定された伝搬パスの層と一致させるために、仮想ピン(すなわち、下位のレベルの子スロットへの経路の伝搬に対応するように設定されるピン)の層を定義する。
【0116】
ピンおよびパスの層を識別した後で、プロセス7000は、(ステップ7020において)ステップ7015において識別した最大層と最小層との間の違いを決定する。この違いは、その経路が現在のスロット内で必要とするバイアの最小数の推定値を表す。現在のスロットが、もっと小さなスロットに分割されている場合には、もっと小さいスロット内および/または間の現在の経路に対する最も低いレベルの経路を定義するために、追加のバイアが必要になる場合がある。いくつかの実施形態は、(1)ある数のピンおよびパスを有するスロット内の経路を定義するために必要なバイアの数を推定するために、統計的な調査を行うことができ、次に、(2)現在のスロット内で必要なバイアの数のもっと精度の高い推定値を入手するために、この統計的な調査の結果を使用することができる。ステップ7025において、プロセス7000は、スロット内のバイアの数を返送し、終了する。
プロセス7000が、スロット内のバイアの数を返送すると、プロセス6900は、(ステップ6910において)現在のスロットにチェック済みというマークを付ける。次に、プロセス6900は、(ステップ6915において)現在のスロットに入る現在の経路のパスの中の1つを選択する。次に、ステップ6920において、このプロセスは、ステップ6915において選択したパスが接続している他のスロットを識別する。ステップ6925において、プロセスは、ステップ6920において識別したスロットを、チェックしたかどうかを判断する(すなわち、このスロットにチェック済みのマークが付いているかどうかをチェックする)。チェックしていなかった場合には、プロセス6900は、ステップ6930において、再帰的に自分自身を呼び出す。この再帰的呼出しは、ステップ6920において識別したスロットを、ステップ6930において、再帰的にスタートするプロセスに対する現在のスロットとして指定する。ステップ6930において、プロセス6900は、バイアの数を、再帰的に呼び出したプロセスが返送する値だけ増大する。
【0117】
ステップ6930から、プロセス6900はステップ6935に進む。このプロセスは、また、(ステップ6925において)ステップ6920において識別した他のスロットを前にチェックしたと判断した場合には、ステップ6935に進む。ステップ6935において、プロセス6900は、現在のスロットに入る他の経路が存在するかどうかを判断する。存在する場合には、プロセス6900はステップ6915に戻り、他の入るパスを選択する。存在しない場合には、プロセス6900は、バイアの計算した数を返送する。
上式(H)に示すように、目的関数の全バイア数は、各ツリーに対するバイアの数に依存するばかりでなく、ワイヤ長さに対するその重要性を反映するために、バイアの数を調整する変換係数にも依存する。この変換係数は、下式(I)に示すように、ワイヤ長さコストおよびバイア・コストをトラックの数に正規化することにより入手することができる。
X=50*5/N (I)
この式中、Xは変換係数であり、5はマンハッタン・パスのコストであり、Nは現在の再帰レベルにおけるマンハッタン・パス当りのトラックの数であり、50はバイアの使用に関連するペナルティ・コストである。このペナルティは、ルータがバイアを使用しないで、迂回路を使用するトラックの数により測定される。いくつかの実施形態の場合には、設計者は、このペナルティ・コストを修正することができる。また、いくつかの実施形態の場合には、各マンハッタン・パスは、Gcellレベルでの8トラックを表す(すなわち、Gcellレベルにおいては、N=8である)。また、各階層のルーティング・レベルの変換係数Xは異なる。何故なら、Nは各レベルに対して異なるからである。
【0118】
b.制約
異なる実施形態は、異なる制約を定義する。下記のLP定式化を使用する実施形態は、3つの制約を定義する。第1の制約は、各ネットNに対するものであり、LPソルバーは、ネットNに対する選択の組から1つのツリーだけを選択する。これは、下式に示すように、そのネットに対するツリー変数の値の合計に対する制約として表される(すなわち、これらの値の合計は1でなければならない)。
netN:xN_A+xN_B+...xN_Q=1
LPソルバーは、各経路変数に対して0と1の間の値を割り当てる。「1」は、そのツリーの明確な選択を表し、「0」は、そのツリーの明確な拒否を表す。0と1の間の値は、ソルバーが、ランダム化四捨五入により決定する必要がある一組の選択を指定したことを意味する。いくつかの実施形態は、制約として、しかし、むしろ各ネットに対するLP解の候補を生成するための関係として、各ネットに対して1つのツリーだけを選択する必要性を表明しないこともできる。
第2の制約は、現在のスロット内のパスの混雑に関する。いくつかの実施形態の場合には、minSlackは、指定の量よりも大きくなければならない。すでに説明したように、minSlackは、すべてのパスを横切る許容できる最小の余裕である。各パス内の余裕は、そのパスの容量から、そのパスを横切るワイヤの流れおよび閉鎖を引いたものである。LPソルバーの最初の反復に対して、いくつかの実施形態は、minSlackはゼロまたはゼロより大きくなければならないと指定する。LPソルバーが、その最初の反復で定式化した問題を解くことができない場合、いくつかの実施形態は、制約としての最小の余裕を除去するために、minSlackが大きな負の数になるようにLP問題を再度定式化する。しかし、すでに説明したように、いくつかの実施形態の場合には、この再定式化により、目的関数のMin_Slack構成要素は、この関数の主要な構成要素になる。
第3の制約は、ある領域の容量を、これらの領域を通ることができるパスの間で正しく共有しなければならないことである。例えば、図61、図62および図63のモデルの場合には、対角線パスおよびマンハッタン・パスは、重なり合っている対角線領域の容量を正しく共有しなければならない。何故なら、ソルバーが、グローバル・ルーティング結果を生じるグローバル・ルータの一部である場合には、そのグローバル・ルーティング出力を、詳細なルータが使用することができる境界ピン割当てに変換しなければならないからである。
【0119】
図71および図72は、Gcellレベルで制約をこのように共有する必要性を示す。Gcellレベルにおいては、いくつかの実施形態は、8トラック幅になるGcell間を横切るマンハッタン・パスの容量を定義する。図71は、縁部E11を横切る8つのこのようなトラックを示す。また、いくつかの実施形態は、対角線層上のピッチは、マンハッタン層上のピッチと同じであると仮定し、それ故、対角線パスの容量は、マンハッタン・パスの容量の2倍の単なる平方根であると仮定する。このような仮定の下で、上記Gcellを横切る対角線パスの容量は11トラックである。図71は、パスP32の11トラック幅の容量を示す。
垂直方向または水平方向に隣接する対角線パスは、重なり合っているルーティング領域を持つ。例えば、図72は、共有対角線領域7205の容量(すなわち、5つの対角線トラック)を共有する2本の垂直方向に隣接する対角線パスP32およびP26を示す。対角線領域7205の5つの対角線トラックも、この領域を横切るマンハッタン・パスP4と一緒に共有されている。何故なら、図61のモデルの場合には、マンハッタン・パスは、マンハッタン方向ばかりではなく、対角線方向にも2つのスロット間を通ることができるからである。
対角線領域の共有容量に対応するために、下記のLP定式化は、3組の制約を定義する。この場合、各組は、2つの制約、すなわち、+45度のパスに対する制約、および−45度のパスに対する制約を持つ。これら3組の制約は、(1)対角線方向のペアの制約、(2)混合した3組の制約、(3)対角線方向の3組の制約である。以下の説明において、+45度のパスは東のパスと呼ばれ、一方、−45度のパスは西のパスと呼ばれる。
【0120】
図73は、第1のタイプの制約、すなわち、対角線方向のペアの制約を示す。この図は、パスP27およびP36について定義した8つの制約された対角線のペアを示す。これらの中の2つは、水平方向に隣接する東のパスP36およびP38を含む7305、および垂直方向に隣接する西のパスP27およびP33を含む7310である。
対角線のペアの制約は、そのペアの対角線パスの一方が、現在のスロットの周辺上に位置しているかいないかにより、内部制約または周辺制約として分類することができる。より詳細に説明すると、両方のペア7305および7310は、内部の対角線ペアである。内部の対角線ペアは、水平方向または垂直方向に隣接していて、一組の東のパスP24、P26、P28、P30、P32、P34、P36、P38およびP40、または一組の西のパスP25、P27、P29、P31、P33、P35、P53、P39およびP41からの2本の対角線パスを含む。図73の3つの他の内部の制約された対角線ペアは、(1)パス36およびP30を含むペア7315、(2)パスP27およびP25を含むペア7320、(3)パスP27およびP29を含むペア7325である。
図73は、また、3つの制約された周辺の対角線ペアを含む。周辺対角線ペアは、2つの水平方向または垂直方向に隣接する対角線ペアを含む。この場合、(1)両方の対角線ペアは、東のパスまたは西のパスであり、(2)これらのパスの一方は、内部パスP24〜P41の中の1つであり、他のパスはスロットの周縁部上に位置する。図73の3つの制約された周辺対角線ペアは、(1)パスP36および7335を含むペア7330、(2)パスP36および7345を含むペア7340、(3)パスP27および7355を含むペア7350である。
制約された各対角線ペアの2つのパスは、いくつかのトラックを共有する(すなわち、1つのパスで表すいくつかのトラックは、他のパスが表すいくつかのトラックと同じものである)。それ故、いくつかの実施形態は、この共有に対応するために制約された各対角線ペアのところの混雑を制約する。
【0121】
例えば、いくつかの実施形態は、そのペアの2本のパスがそのトラックの約半分を共有している場合には、そのペアの各パスの容量の1.5倍である内部対角線ペアのところの混雑を制約する。例を挙げて説明すると、2つの内部対角線ペアP36およびP38が、それぞれ、11トラック幅であり、相互に5トラックを共有している場合には、いくつかの実施形態は、これらのパスのところの混雑が、最大16トラックを占める制約を指定する(すなわち、P36を横切るワイヤの流れにP38を横切るワイヤの流れを加え、さらに最大で16トラックを占める任意の閉鎖を加えたものを指定する)。
いくつかの実施形態は、また、そのペアの2つのパスがトラックの約半分を共有している場合には、内部対角線ペアの容量の1.5倍である周辺対角線ペアのところで混雑(すなわち、全ワイヤの流れおよび閉鎖)している。例えば、いくつかの実施形態の場合には、周辺対角線ペア7330内のパスは、Gcellレベルで、それぞれ11トラック幅を持つ。このレベルにおいて、これらのパスは、相互に5トラックを共有する。それ故、Gcellレベルに対して、いくつかの実施形態は、これらのパスのところの混雑は、16トラックまたはそれ以下に違いないことを指定する(すなわち、P36を横切るワイヤの流れに7335を横切るワイヤの流れを加え、さらに最大で16トラックを占める任意の閉鎖を加えたものを指定する)。
そのペアの両方の対角線パスのところの混雑を計算するのにLPソルバーを必要とする内部対角線ペア制約とは異なり、周辺対角線ペア制約は、LP解に対する周辺ペアの内部対角線パスのところの混雑を計算するのに、LPソルバーを必要とするだけである。何故なら、周辺対角線ペアの周辺パスのところの混雑は、現在の解動作の前の伝搬動作中に計算されるからである。
例えば、周辺対角線ペア7330に対する周辺パス7335のところの混雑は、スロット7360に入るマンハッタン・パスまたは対角線パス、またはスロット7360に隣接しているスロットに入る対角線パスが、スロット7360の子スロット7365内にまで伝搬する場合にはすでに計算済みである。いくつかの実施形態は、第1の親スロットの子スロットと第1の親スロットに隣接している第2の親スロットの子スロットとの間の伝搬したパスの容量の記録を維持する。いくつかの実施形態は、(1)隣接する親スロットの隣接する子スロットに対するスロット・ペア記録を生成することにより、(2)スロット・ペア記録内に2つの隣接する子スロットの識別を記憶することにより、(3)2つの子スロット間の伝搬した周辺パスの容量を表す容量フィールドを初期化することにより、(4)この容量を使用および閉鎖に対して増大することにより上記記録を維持する。次に、これらの実施形態は、この容量を記憶しているスロット・ペア記録を検索することにより各周辺パスの容量を識別する。いくつかの実施形態は、周辺パスが入る2つの子スロット(すなわち、現在のスロットの子スロット、および隣接するスロットの子スロット)を識別することによりスロット・ペア記録を検索する。
【0122】
図74は、第2のタイプの制約、すなわち、混合した3組の制約を示す。この制約は、混合した3組の制約が,隣接する同じ線上にある対角線パスのペアのところの混雑に、対角線ペア間のマンハッタン・パスを加えたものを制約するという点を除けば、第1のタイプの制約に類似している。
図74は、8つの制約された混合の3個一組、すなわち、パスP36を含む4つの3個一組およびパスP27を含む4つの3個一組を示す。対角線ペア制約のように、混合した3個一組制約は、3個一組の対角線パスの中の1つが、現在のスロットの周辺上に位置するかしないかにより、内部制約または周辺制約として分類することができる。
図74のパスP36のところの4つの制約された混合3個一組は、(1)パスP21、P36およびP38を含む内部混合3個一組7405、(2)パスP9、P36および7445を含む周辺3個一組7410、(3)パスP20、P36および7455を含む周辺3個一組7415、(4)パスP6、P36およびP30を含む内部混合3個一組7420である。
図74のパスP27のところの4つの制約された混合3個一組は、(1)パスP14、P27およびP29を含む内部混合3個一組7425、(2)パスP4、P27および7433を含む内部3個一組7430、(3)パスP13、P27およびP25を含む内部3個一組7435、(4)パスP1、P27および7450を含む内部混合3個一組7440である。
制約された各混合3個一組内の3つのパスは、いくつかのトラックを共有する。例えば、図62および図63の対角線ワイヤ・モデル表現の場合には、対角線パスの中の1つが表すいくつかのトラックは、他の対角線パスが表すいくつかのトラックと同じものである。また、図61のマンハッタン・ワイヤ・モデル表現の場合には、マンハッタン・パスを、マンハッタン・パスに隣接する対角線パスと同じトラックに対して競合するいくつかの対角線パスを通して下位のレベルの子スロットに伝搬させることができる。それ故、いくつかの実施形態は、この共有に対応するために、制約された各混合3個一組のところの混雑を制約する。
【0123】
例えば、ペアの2本の対角線パスがトラックの約半分を共有する場合には、いくつかの実施形態は、内部混合3個一組のところの混雑を、3個一組の対角線パスのうちの1つの容量にマンハッタン方向だけのマンハッタン・パスの容量を加えたものの1.5倍になるように制約する。例えば、Gcellレベルにおいては、2本の内部対角線パスP36およびP38は、それぞれ、11トラック幅であり、相互に5トラックを共有する。一方、マンハッタン・パスP21は、マンハッタン方向では8トラック幅であり、東の方向では5トラック幅である(すなわち、パスP21は、配線の垂直層上の8トラックを使用することができ、東の層の配線内では5トラックを使用することができる)。それ故、Gcellレベルにおいては、これらの実施形態の中のあるものは、パスP21、P36およびP38のところの混雑(すなわち、ワイヤの流れに閉鎖を加えたもの)は、最大で24トラック(すなわち、16の使用できる東のトラックに8つの使用できる垂直トラックを加えたもの)を占めるに違いないという3個一組制約を指定する。
他の実施形態は、そのペアの2本の対角線パスがトラックの約半分を共有する場合には、内部混合3個一組の混雑を、3個一組内の対角線パスの中の1つの容量にマンハッタン方向および対向対角線方向のマンハッタン・パスの容量を加えたものの1.5倍になるように制約する。それ故、(リーフ・スロット・レベルにおいて、2本の内部対角線パスP36およびP38が、それぞれ、11トラック幅であり、相互に5トラックを共有し、一方、マンハッタン・パスP21が、マンハッタン方向で8トラック幅であり、東の方向で5トラック幅であり、西の方向で5トラック幅である)上記例に対して、これらの実施形態のうちのあるものは、パスP21、P36およびP38のところの混雑が、最大で29トラック(すなわち、16の使用できる東のトラックに8つの使用できる垂直トラックを加え、さらに5つの使用できる西のトラックを加えたもの)を占めるに違いないという3個一組制約を指定する。
さらに、前の伝搬動作中の3個一組の周辺パスのところの混雑の計算を除けば、周辺対角線ペア制約のように、周辺混合3個一組制約は、いくつかの実施形態の内部制約のように分析される。すなわち、内部混合3個一組制約は、3個一組対角線パスおよびLP解に対するマンハッタン・パスのところの混雑を計算するために、LPソルバーを必要とする。周辺混合3個一組制約は、3個一組の内部対角線パスおよびLP解に対するマンハッタン・パスのところの混雑を計算するためだけにLPソルバーを必要とする。LPソルバーは、周辺パスが通る2つの子スロットに対するスロット・ペア記録から周辺パスのところの混雑を検索することができる。
【0124】
図75は、第3のタイプの制約、すなわち、対角線3個一組制約を示す。この制約は、対角線3個一組制約が、2本ではなく、3本の同じ直線上の対角線パスのところの混雑を制約する点を除けば、第1のタイプの制約、すなわち、対角線ペア制約に類似している。図75は、4つの制約された対角線3個一組、すなわち、パスP36を含む2つの対角線3個一組、およびパスP27を含む2つの対角線3個一組を示す。
対角線ペア制約のように、対角線3個一組制約は、3個一組の対角線パスの中の1つが、現在のスロットの周辺上に位置しているかいないかにより、内部制約または周辺制約として分類することができる。図75の4つの制約された対角線3個一組は、(1)パスP36、P38および7530を含む周辺対角線3個一組7505、(2)パスP30、P36および7525を含む周辺対角線3個一組7510、(3)パスP25、P27およびP29を含む内部対角線3個一組7515、(4)パスP27、P33および7535を含む周辺対角線3個一組7520である。
図62および図63の対角線ワイヤ・モデル表現の場合には、3個一組の中央のパスが、他の2つの対角線パスといくつかのトラックを共有する。それ故、いくつかの実施形態は、この共有に対応するために、制約された各対角線3個一組のところの混雑を制約する。
3個一組内の中央の対角線パスが、他の対角線パスの中の1つとそのトラックの約半分を共有し、他の対角線パスの他の半分を共有している場合には、いくつかの実施形態は、対角線3個一組のところの混雑を、3個一組内の対角線パスの中の1つの容量の2.0倍になるように制約する。例えば、Gcellレベルのある実施形態の場合には、各対角線パスは、11トラック幅で、隣接する同一直線上に位置する各対角線パスと5トラックを共有する。それ故、Gcellレベルに対して、いくつかの実施形態は、3個一組内の3つの対角線パス(例えば、パスP25、P27およびP29)のところの混雑(すなわち、ワイヤの流れに閉鎖を加えたもの)が、最大で22トラックを占めることになる3個一組制約を指定する。
【0125】
さらに、周辺対角線ペア制約および混合3個一組制約のように、前の伝搬動作中の3個一組の周辺パスのところの混雑の計算を除けば、周辺対角線3個一組制約は、いくつかの実施形態の内部制約のように分析される。より詳細に説明すると、内部対角線3個一組制約は、3個一組のすべての対角線パスのところの混雑を計算するためにLPソルバーを必要とする。一方、周辺対角線3個一組制約は、3個一組の内部対角線パスのところの混雑を計算するためだけにLPソルバーを必要とする。LPソルバーは、周辺パスが通る2つの子スロットに対するスロット・ペア記録から周辺対角線パスのところの混雑を検索することができる。
当業者であれば、他の実施形態も、他の制約を定義することができることを理解することができるだろう。例えば、いくつかの実施形態は、マンハッタン・パスおよび2つの組の隣接する同一直線上に位置する対角線パスのところの混雑を制約する混合5個一組制約を定義することができる。このような1つの5個一組は、垂直パスP13、−45度対角線パスP25およびP27、および+45度対角線パスP24およびP26を含む。
各5個一組のマンハッタン・パスは、5個一組の対角線パスといくつかのトラックを共有する。さらに、平行な各対角線ペアのパスは、いくつかのトラックを共有する。それ故、各ペアの2つの対角線パスが、トラックの約半分を共有している場合には、いくつかの実施形態は、混合5個一組のところの混雑を、5個一組の対角線パスのうちの1つの容量にマンハッタン方向だけのマンハッタン・パスの容量を加えたものの約3.0倍になるように制約する。例えば、リーフ・スロット・レベルのいくつかの実施形態の場合には、各対角線パスは、11トラック幅で、その隣接する同一直線上に位置する対角線パスと5トラックを共有し、一方、各マンハッタン・パスは、8トラック幅でマンハッタン方向を向いている。それ故、Gcellレベルにおいて、これらの実施形態のうちのあるものは、5個一組のところの混雑が、最大で40トラックまたは41トラックを占めることになり、平行な各対角線ペアのところの容量が頭を切られているかいないかにより異なる5個一組制約を指定する。
【0126】
c.定式化
いくつかの実施形態の場合には、ソルバー3930は、上記目的関数および制約に基づいてLP問題を定式化する。これらの実施形態のうちのあるものにおいては、LP問題の定式化は下記の通りである。
[prepSolverILP(スロット)]
− 変数minSlackを0に初期化する//パスを過度に制約してはならない
− 変数lenAndViaWeightを100に初期化する//最初、長さおよびバイア・カウントの優先権の方が余裕の最小化の優先権より高い
− 変数minSlackWeightを−1に初期化する
− 一方(!done)
− LPソルバーを宣言し、初期化する
− 目的行を宣言し、それを「objective」と命名する
− 現在のスロット内のすべてのネットに対する識別したツリーのすべての組を記憶する変数内のネットに対するツリーの識別した各組に対して
− 組が空でない(すなわち、その組がこのスロット内のネットに対するツリーの選択組を含んでいる)場合
− 組内の最初のツリー記録からネット索引Nを検索する
− このネットに対するツリーを1つだけ選択するようにソルバーを制約するために、定数「rN」を宣言する
− スロット内の各パスNに対して
− このパスの全使用を合計する変数を定義するために、制約「usageN」を宣言する
− すべてのパス上に最大余裕値を定義するために、制約「eSlackN」を宣言する
− すべてのパス上に最大使用値を定義するために、制約「mxuseN」を宣言する
【0127】
− パスNがマンハッタン・パスである場合
− マンハッタン・パスNおよび隣接するペアの「東」パスの使用の合計を制約するために、制約eMtplNを宣言する//この制約は、パスNおよびそれに隣接する2つの対角線東パスを含む混合3個一組に対するものである
− マンハッタン・パスNおよび隣接する「西」パスの使用の合計を制約するために、制約wMtplNを宣言する//この制約は、パスNおよびそれに隣接する2つの対角線西パスを含む混合3個一組に対するものである
− パスNに隣接する2つの「東」パスの使用の合計を制約するために、制約epairNを宣言する//この制約は、パスNに隣接する2つの対角線東パスを含む対角線ペアに対するものである
−パスNに隣接する2つの「西」パスの使用の合計を制約するために、制約wpairNを宣言する//この制約は、パスNに隣接する2つの対角線西パスを含む対角線ペアに対するものである
− パスNに隣接する2つの「東」パスに、一番下/一番左の隣接する東パスの下または左の3番目の東パスを加えたものの使用の合計を制約するために、制約eDtplNを宣言する//この制約は、パスNに隣接する2つの対角線東パスに、一番下/一番左の隣接する東パスの下または左の3番目の東パスを加えたものを含む対角線3個一組に対するものである
− パスNに隣接する2つの「西」パスに、一番下/一番左の隣接する西パスの下または左の3番目の西パスを加えたものの使用の合計を制約するために、制約wDtplNを宣言する//この制約は、パスNに隣接する2つの対角線東パスに、一番下/一番左の隣接する西パスの下または左の3番目の西パスを加えたものを含む対角線3個一組制約に対するものである
− すべてのパスを横切る最小の余裕の値を制限するために、制約「Min_Slack」を定義する
− すべての選択したツリーの長さコストを合計する変数を定義するために、制約「tLen」を定義する
− すべてのパスのバイア・コストを合計する変数を定義するために、制約「tVias」を定義する
//この時点で、LPのすべての「行」が宣言される。列に引き続き記入する(すなわち、変数を宣言する)
【0128】
− ツリーの各組に対して、現在のスロット内のすべてのネットに対する複数の組のツリーを記憶する変数m_sols内のネットに対して
− この組のツリーが属するネットを識別する
− ツリーの組内の各ツリーに対して
− 変数「xN_T」を生成する。ここで、Nはネット索引であり、Tはこのツリーを表すためのツリーの序数である
− 制約「rowN」内の係数1.0と一緒に表示するxN_Tを宣言する
− ツリーxN_Tのワイヤ長さコストを識別する//上記プロセス6400により計算された
− このツリーを埋設するのに必要なバイアの数「nVias」を計算する//上記のプロセス6800〜7000を使用する
− 制約「tLen」内の係数estLenと一緒に表示するxN_Tを宣言する
− 制約「tVias」内の係数nViasにXを掛けたものと一緒に表示するxN_Tを宣言する//ここで、Xは、式(I)への参照による上記の変換係数である
− スロット内の各パスEに対して
− このツリーがパスEを使用する場合
− 制約usageE内に係数−1.0と一緒に表示するxN_Tを宣言する
− このスロット内の各パスEに対して
− 変数「uE」を生成する。ここで、Eはパスの整数の識別子である
− 制約「usageE」内に係数1.0と一緒に表示するuEを宣言する
− 制約「mxuseE」内に係数−1.0と一緒に表示するuEを宣言する
− 制約「eslackE」内に係数1.0と一緒に表示するuEを宣言する
− パスEがマンハッタン・パスである場合
− 制約「eMtplE」内に係数1.0と一緒に表示するuEを宣言する
− 制約「wMtplE」内に係数1.0と一緒に表示するuEを宣言する
− パスEに隣接する対角線パスの2つのペアを検索する
【0129】
− これらペアの各パスEに対して
− パスAの方向が「東」である場合
− 制約eMtplE内に係数1.0と一緒に表示するuAを宣言する
− 制約epairE内に係数1.0と一緒に表示するuAを宣言する
− パスAの方向が「西」である場合
− 制約wMtplE内に係数1.0と一緒に表示するuAを宣言する
− 制約wpairE内に係数1.0と一緒に表示するuAを宣言する
− パスEに隣接する対角線パスの3個一組を検索する
− この3個一組内の各パスBに対して
− パスBの方向が「東」である場合
− 制約eDtplE内に係数1.0と一緒に表示するuBを宣言する
− パスBの方向が「西」である場合
− 制約wDtplE内に係数1.0と一緒に表示するuBを宣言する
− 変数「slack」を生成する
− 制約「Min_Slack」内に係数1.0と一緒に表示する余裕を宣言する
− 目的関数内に係数「minSlackWeight」と一緒に表示する余裕を宣言する
− このスロット・内の各パスEに対して
− 制約「eslackE」内に係数1.0と一緒に表示する余裕を宣言する
− パスEがマンハッタン・パスである場合
− 制約「epairE」内に係数1.0と一緒に表示する余裕を宣言する
− 制約「wpairE」内に係数1.0と一緒に表示する余裕を宣言する
− 制約「eMtplE」内に係数1.0と一緒に表示する余裕を宣言する
− 制約「wMtplE」内に係数1.0と一緒に表示する余裕を宣言する
− 制約「eDtplE」内に係数1.0と一緒に表示する余裕を宣言する
− 制約「wDtplE」内に係数1.0と一緒に表示する余裕を宣言する
− 変数「tV」を生成する
− 制約「tVias」内に係数1.0と一緒に表示するtVを宣言する
− 目的関数内に係数「lenAndViaWeight」と一緒に表示するtcを宣言する
//ここまで、制約を宣言し、これらの式の左辺に記入してきた。ここからは右辺に記入する
− 変数「tL」を生成する
− 制約「tLen」内に係数1.0と一緒に表示するtlを宣言する
− 目的関数内に係数「lenAndViaWeight」と一緒に表示するtlを宣言する
//ここまで、制約を宣言し、これらの式の左辺に記入してきた。ここからは右辺に記入する
【0130】
− 現在のスロット内のすべてのネットに対する複数の組のツリーを記憶する変数m_sols内のネットに対するツリーの各組、すなわち、ツリーの組に対して
− 組が空でない(組が、このスロット内のネットに対するツリーの選択組を含んでいる)場合
− 組内の最初のツリー記録からネット索引Nを検索する
− 1.0になるように、制約「rN」のRHSを設定する
− このスロット内の各パスEに対して
− 0.0になるように、制約「usageE」のrhsを設定する
− 0.0になるように、制約「mxuseE」のrhsを設定する
−(プロセス5400が計算した)非閉鎖の推定値から(プロセス5500が計算した)パス使用の推定値を引くことにより得られる容量の推定値cap(E)を検索する
− 制約「eslackE」のrhsをcap(E)に設定する
− パスEがマンハッタン・パスである場合
− 制約eMtplE、capeMtplEを共有するための容量推定値を計算し、制約eMtplEのrhsをこの容量に設定する
− 制約wMtplE、capeMtplEを共有するための容量推定値を計算し、制約wMtplEのrhsをこの容量に設定する
− 制約epairE、capepairEを共有するための容量推定値を計算し、制約epairEのrhsをこの容量に設定する
− 制約wpairE、capepairEを共有するための容量推定値を計算し、制約wpairEのrhsをこの容量に設定する
− 制約eDtplE、capeDtplEを共有するための容量推定値を計算し、制約eDtplEのrhsをこの容量に設定する
− 制約wDtplE、capwDtplEを共有するための容量推定値を計算し、制約wDtplEのrhsをこの容量に設定する
− 0.0になるように、制約「tVias」のrhsを設定する
− 0.0になるように、制約「tLen」のrhsを設定する
− 変数minSlackになるように、制約「Min_Slack」のrhsを設定する
− LPを解く
− 解がない場合//最小の余裕に対するハードな制約を除去し、余裕の優先権が長さおよびバイア数の優先権より高くなるように加重を再設定する
− 変数minSlackWeight=−500に設定する
− 変数minSlack=−1000に設定する
− 変数lenAndViaWeight=1に設定する
− 解を発見した場合
− ループから抜け出す
【0131】
すでに説明したように、定式化の第3から最後の命令文は、(ステップ5325において)LPソルバーに問題を解くように命令している。次に、LPソルバーは、この問題を解こうとする。LPソルバーは、上記ループの最初の反復で、この問題を解くのに失敗した場合には、上記定式化は、最小の余裕がもはや制約の大きな部分ではなくなり、目的関数の主要な構成要素としての働きをするように、いくつかの定数の値を変更する。より詳細に説明すると、定数minSlackWeight、minSlack、およびlenAndViaWeightを変更すると、(最初の試みの失敗の原因である唯一の制約である)容量制約を効果的に効果のないものにする。次に、LPソルバーは、再度問題を解こうとする。定数minSlackWeight、minSlack、およびlenAndViaWeightを変更すると、必ず、2回目の試みは成功する。通常の当業者であれば、異なる特性を持つ解を発見するために、他の実施形態も、これらの変数をもっと大きく変更することができることを理解することができるだろう。しかし、そのように増大変更すると、ソルバーの速度が低下する。
LPソルバーが返送する解は、すべての制約に適合するものであり、目的関数の出力は最も小さくする。この返送された解は、各ツリー変数xN_Cに対する実数を含むことができる。例えば、ソルバーが、LPソルバーに3つの経路を示した場合には、LPソルバーは、第1の経路に対して0.8のスコアを、第2の経路に対して0.1のスコアを、最後の経路に対して0.1のスコアを返送することができる。
すでに説明したように、プロセス5300は、(ステップ5330において)このLPの解を、ILPの解、すなわち、0または1を各ツリー変数xN_Cの値として指定する解に変換する。また、すでに説明したように、いくつかの実施形態は、この変換を行うためにランダム化四捨五入を使用する。ステップ5330において選択したこの一組の経路に基づいて、ソルバー3930は、(ステップ5335において)現在のスロットの各スロット−ネット・データ構造体内に42ビットの選択した経路ストリングを記憶する。この42ビット・ストリングは、ネットの選択した経路がとる現在のスロット内のパスを指定する。
通常の当業者であれば、ソルバーの上記説明にもかかわらず、他の実施形態は、ルーティング階層の任意の特定のレベルにおいて、ルーティング問題を解くために異なるアプローチを使用することができることを理解することができるだろう。例えば、いくつかの実施形態は、上記とは異なる方法で、目的関数および制約を定義することができる。例えば、いくつかの実施形態は、経路のコストを1つの制約として使用することもできるし、目的関数に混雑を簡単に最小限度にまで低減させることもできる。また、LP解を得るためにLPソルバーを使用し、LP解をILP解に変換する代わりに、他の実施形態は、ILP解を得るためにILPソルバーを使用する。さらに他の実施形態は、現在のスロット内に各ネットに対する経路を埋設するために、シーケンシャルなアプローチを使用する。
【0132】
F.プロパゲータ
ソルバーが現在のスロットの各スロット−ネットに対する経路を指定した後で、現在のスロットがリーフ・スロットでない場合、スロット・マネージャ3925は、プロパゲータ3935を呼び出す。次に、プロパゲータは、現在のルーティング・レベルに対してソルバーが指定したルーティング経路がどのようにして現在のスロットの子スロットまで伝搬するのかを判断する。トップ・レベルより下ではあるが、リーフ・レベルのスロットより高いスロットに対して、プロパゲータは、また、さらに1つレベルが低い前のルーティング・レベルのところで、プロパゲータが指定した経路を伝搬する後続の伝搬動作を行う。現在のスロット内の各ネットに対して、プロパゲータは、自分が識別する伝搬に対応するように、各子スロット内のネットのピンの配列を修正しなければならない場合がある。
2つの異なるプロパゲータについて以下に説明する。第1のプロパゲータは、各ネットの経路に対するいくつかの伝搬の解を列挙し、次に、各ネットに対する伝搬の解を選択するために、LPソルバー3945およびILP変換器3950を使用する。一方、第2のプロパゲータは、現在のスロット内の各ネットの経路に対する伝搬を選択し、埋設するために、貪欲なアプローチを使用するシーケンシャル・プロパゲータである。以下に説明するいくつかの実施形態の場合には、これらプロパゲータの両方とも適用できる場合には、後続の伝搬を実行するためにシーケンシャル・プロパゲータを使用する。
いくつかの実施形態は、対角線パスのために図62の7の順列伝搬モデルを使用する場合には、第1のプロパゲータを使用し、対角線パスのために図63の19の順列伝搬モデルを使用する場合には、第2のプロパゲータを使用する。これらの実施形態の中のあるものは、これらのモデルのどちらかと一緒に、マンハッタン・パスに対する図61の10の順列伝搬モデルを使用する。
【0133】
1.ILPプロパゲータ
ソルバーのように、ILPプロパゲータは、影響を受けた子スロット内への各ネットの経路に対するいくつかの伝搬の解を列挙し、コスト計算する。次に、プロパゲータは、LP問題を定式化し、これらの解をLPソルバー3945に送り、このLPソルバーは、多数の実数の解を返送する。次に、これらの実数の解は、ILPソルバー3950により整数の解に変換される。これらの整数の解は、影響を受けた各子スロット内の各ネットに対する特定の構成を指定し、プロパゲータは、影響を受けた子スロットに対するネットのスロット−ネット・データ構造体内に各ネットの構成を記憶する。
図76は、ILPプロパゲータが、いくつかの実施形態で実行するプロセス7600である。いくつかの実施形態の場合には、このプロセスは、スロット・マネージャが、プロパゲータを呼び出し、このプロパゲータに現在のスロットを供給した場合にスタートする。プロセス7600は、最初に、(ステップ7605において)各パスの各伝搬の可能性の利用度を推定する。伝搬の利用度を推定する1つの方法については、図77および図78を参照しながら以下に説明する。
各パスの各伝搬の可能性の利用度を推定した後で、プロセス7600は、(ステップ7610において)現在のスロット内の各スロット−ネットに対するすべての伝搬順列を列挙し、コスト計算する。伝搬を列挙し、コスト計算する1つの方法については、図79および図80を参照しながら以下に説明する。
潜在的な伝搬順列を列挙し、コスト計算した後で、LPプロパゲータは、LPソルバー3945に対するLP問題を定式化する。LP伝搬問題を定式化する1つの方法については、VI.F.1.d節で以下に説明する。次に、プロセス7600は、(ステップ7625において)LPソルバーが返送したLP解をILP解に変換する。いくつかの実施形態の場合には、プロセスは、この変換を行うためにランダム化四捨五入を行う。ランダム化四捨五入を実行する1つの方法については、VI.E節ですでに説明した。
【0134】
ステップ7625において指定した伝搬に基づいて、プロセスは、必要な場合には、(ステップに7630おいて)現在のスロットの子スロット内のスロット−ネットの16ビットのピン配列を修正する。この段階で、特定のネットに対する修正すべきスロット−ネット・データ構造体が存在しない場合には、プロパゲータは、1つを例として示し、その中に16ビットのピン配列を記録する。
現在のスロットのレベルがリーフ・レベルより少なくとも2つ高い場合には、プロセス7600は、(ステップ7635において)次の下位の再帰レベルに対する後続伝搬リストに、ステップ7625において識別した伝搬経路を追加する。現在のスロットのレベルが、トップ・レベルより下で、リーフ・レベルより上の場合には、プロパゲータは、(ステップ7640において)後続の伝搬動作を実行する。この動作は、1つレベル下の前のルーティング・レベルにおいてプロパゲータが指定したルーティング・パスを伝搬する。後続の伝搬を実行する1つの方法については、図65および図81を参照しながら以下に説明する。
現在のスロットのレベルがリーフ・レベル直前のレベルである場合には(すなわち、現在のスロットが、Gcellのグランドペアレントである場合には)、次に、プロセス7600は、(ステップ7645において)dBNet4110に、ステップ7625において指定した伝搬パスのパス・データ構造体をリンクするためにセーバを呼び出し、適用できる場合には、ステップ7640において指定した伝搬パスに対してセーバを呼び出す。その後、プロセスは終了する。
【0135】
a.伝搬の混雑の推定
すでに説明したように、プロセス7600は、(ステップ7605において)現在のスロット内の各パスに対する各伝搬の可能性の残りの利用度を推定する。いくつかの実施形態の場合には、プロセス7600は、(1)各パスの各伝搬の閉鎖された容量を推定することにより、(2)各パスの各伝搬の使用を推定することにより、(3)各伝搬の閉鎖された容量および使用を合計することにより、この推定値を計算する。各伝搬の閉鎖された容量の推定については、図77を参照しながら以下に説明する。一方、各伝搬の使用の推定については、図78を参照しながら以下に説明する。
(1)各パスの推定閉鎖容量
図77は、現在のスロット内の各パスの各伝搬の閉鎖された容量を推定するためのプロセス7700である。伝搬プロセス7600は、ステップ7605においてプロセス7700を実行する。最初に、このプロセスは、(ステップに7702において)現在のスロット内の各パスの各伝搬の閉鎖された容量を記憶するための少なくとも1つのフィールドを有するデータ構造体(例えば、マトリックス)を割り当てる。ステップ7702において、プロセスは、また、データ構造体内の各フィールドを0に初期化する。
ステップ7704において、プロセスは、回路モジュールの現在のスロットのリスト内の1つの回路モジュールを選択する。次に、プロセスは、(ステップ7706において)選択した回路モジュールに対する回路マクロを検索する。次に、プロセスは、(ステップ7708において)回路マクロ上の1つの障害物を選択し、(ステップ7710において)選択した障害物の囲みボックスを計算する。
次に、プロセスは、(ステップ7712において)現在のスロットの42のパスの中の1つを選択する。次に、プロセスは、(ステップ7714において)ステップ7712において選択したパスの伝搬の中の1つを選択する。次に、プロセスは、(ステップ7716において)ステップ7712において選択したパスが、ステップ7708において選択した障害物と同じ層上に位置するかどうかを判断する。
【0136】
選択したパスの層が選択した障害物の層と一致した場合には、プロセスは、(ステップ7726において)選択した伝搬の囲みボックスを計算する。ステップ7726において、プロセスは、また、伝搬の囲みボックスの面積を計算する。次に、プロセスは、(ステップ7728において)選択した伝搬の囲みボックスと選択した回路モジュールの囲みボックスの交差を識別し、(ステップ7730において)この交差の面積を計算する。プロセスは、(ステップ7732において)計算した交差面積を計算した伝搬面積で割ることにより妨害係数を計算する。次に、プロセスは、(ステップ7734において)妨害係数にデフォールト伝搬容量を掛け、次に、(ステップ7736において)ステップ7702において割り当てられたデータ構造体内に記憶している伝搬の閉鎖された容量にこの乗算の結果を加算する。次に、プロセスは、ステップ7718に進むが、このステップについては後で説明する。
プロセスが、ステップ7716において、選択したパスの層が選択した障害物の層と同じでないと判断した場合には、プロセスは、ステップ7718に進む。ステップ7718において、プロセスは、ステップ7712において選択したパスに対するすべての伝搬をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7714に戻り、選択したパスに対する他の伝搬を選択する。一方、プロセスが、(ステップ7718において)ステップに7712おいて選択したパスに対するすべての伝搬をチェックしたと判断した場合には、プロセスは、(ステップ7720において)現在のスロットのすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7712に戻り、現在のスロットの他のパスを選択する。
別な方法としては、選択したパスが現在のスロットの最後のパスである場合には、プロセスは、(ステップ7722において)ステップ7704において選択した回路モジュールのすべての障害物をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7708に進み、選択した回路モジュールの他の障害物を選択する。チェックしていた場合には、プロセスは、(ステップ7724において)現在のスロット内のすべての回路モジュールをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスは、ステップ7704に進み、現在のスロット内の他の回路モジュールを選択する。しかし、プロセスが、現在のスロット内のすべての回路モジュールをチェックしていた場合には、プロセスは終了する。
【0137】
b.各パス伝搬の推定使用
図78は、現在のスロット内の各パスの各伝搬の使用を推定するためのプロセス7800である。このプロセスは、プロパゲータが、ステップ7605においてこのプロセスを呼び出す度にスタートする。いくつかの実施形態の場合には、プロセス7800は、プロパゲータから、各伝搬の推定使用を記憶するための浮動小数点変数のデータ構造体(例えば、マトリックス)を受け取る。他の実施形態の場合には、プロセス7800は、このようなデータ構造体を受け取らないで、スタートした場合に、この構造体を生成する。いくつかの実施形態の場合には、受け取ったまたは生成したデータ構造体は、各伝搬の可能性に対する少なくとも1つのエントリを持つ。
図78に示すように、プロセス7800は、最初に、(ステップ7805において)現在のスロットの子スロットの中の1つを選択する。次に、このプロセスは、(ステップ7810において)選択した子スロットに対する図55のパス使用推定プロセス5500を呼び出す。パス使用推定プロセス5500は、選択した子スロットの各パスに対する推定使用値を計算し、返送する。
推定プロセス5500についてはすでに説明したので、不必要な詳細な説明により、本発明の説明が分かりにくくなるのを避けるためにここでは説明しない。ステップ7810の後で、プロセス7800は、(ステップ7815において)現在のスロットのすべての子スロットに対するパス使用値を計算したかどうかを判断する。計算していなかった場合には、プロセスは7805に戻り、他の子スロットを選択し、(ステップ7810において)新しく選択した子スロットに対するパス使用値を計算する。プロセスが、現在のスロットのすべての子スロットをチェックしたと判断した場合には、プロセスは、(ステップ7820において)現在のスロット内の42のパスの中の1つを選択する。
【0138】
ステップ7825において、プロセスは、選択したパスに対する伝搬の中の1つを選択する。次に、プロセスは、(ステップ7830において)隣接する子スロットのパスのパス使用値に基づいて、選択したパス伝搬の使用の推定値を計算する。例えば、本発明のいくつかの実施形態の場合には、プロセスは、パス1の伝搬0の使用を計算するために、下式を使用する。
伝搬0−パス1の使用=(1/2)*(1/2*パス[1][2]
+ 1/3*パス[1][1] + 1/6*パス[1][0]
+ 1/2*パス[2][0] + 1/3*パス[2][1]
+ 1/6*パス[2][2])
ここで、パス[i][j]は、子スロットiのパスjの使用である。他の伝搬の可能性に対する伝搬使用値を類似の方法で定義するために、類似の式を使用することができる。
この式は、子スロット1および2内の混雑により、子スロット1および2の間のパス1の伝搬0に対する伝搬使用値を定義する。この式は、パス1の伝搬0と同一直線上に位置する子スロット内の水平パスをチェックするだけである。より詳細に説明すると、この式は、子スロット1および2の水平パス0、1および2によりパス1の伝搬0の構成要素使用値をチェックする。現在のスロット内のパス1の伝搬0の容量が、子スロット1および2の子パスの容量により、同じように影響を受けることを反映するために、両方の子スロット1および2内の使用値の合計には、1/2が掛けられる。
【0139】
乗数1/2、1/3および1/6は、下記の理由で子スロット1および2の両方に対する合計で使用される。目的は、1つの伝搬パスを通して何本のワイヤを通すことができるかを推定することである。これらのワイヤの中のあるものは、伝搬パスを通過した直後で終わっているが、一方、あるものは、そのパスに入るスロットの幅全体を横切っている。パス1の伝搬0に対して、1/4は、子スロット2のスロット0内で終わり、1/4は、スロット2のスロット1内で終わり、1/4は、子スロット2のスロット2内で終わり、1/4は子スロット2のスロット3内または超えて終わるように、このパスを使用するワイヤの「終点」が均等に分布しているものと仮定する。このことは、パス1を使用するワイヤの中の3/4は、子スロット2のパス0も使用し、2/4は、子スロット2内のパス1を使用し、1/4は、子スロット2内のパス3を使用することを意味していて、伝搬したパスの推定使用上のこれら3つのパスの相対的なインパクトは、3:2:1(または、3/6、2/6、1/6)になることを意味する。
ステップ7835において、プロセスは、ステップ7820で選択したすべての潜在的な伝搬をチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7825に戻り、選択したパスに対する他の伝搬を選択し、(ステップ7830において)新しく選択した伝搬使用の推定値を計算する。
プロセスが、(ステップ7835において)ステップ7820において選択したパスに対するすべての伝搬をチェックしたと判断した場合には、プロセスは、(ステップ7840において)現在のスロットのすべてのパスをチェックしたかどうかを判断する。すべてのパスをチェックしていなかった場合には、プロセスはステップ7820に戻り、現在のスロットの他のパスを選択し、次に、新しく選択したパスの伝搬の可能性の使用を計算するために、動作7825〜7835を実行する。プロセスが、(ステップ7840において)現在のスロット内のすべてのパスをチェックしたと判断した場合には、プロセスは終了する。
【0140】
c.各伝搬に対するコストの列挙と割当て
各パスの各伝搬の可能性の利用度を推定した後で、プロセス7600は、(ステップ7610において)現在のスロット内の各スロット−ネットに対するすべての伝搬順列を列挙し、コスト計算する。図79は、伝搬を列挙し、コスト計算するための1つの方法を示す。
図79に示すように、プロセス7900は、(ステップ7905において)現在のスロットのスロット−ネットを選択することによりスタートする。次に、プロセスは、(ステップ7910において)それぞれが、特定の子スロットに入るパスを記憶するための16の空のリストを初期化する。次に、プロセスは、(ステップ715において)ステップ7905において選択したスロット−ネットに対する経路を検索する。
ステップ7920において、プロセスは、検索した経路のパスの中の1つを選択する。次に、プロセスは、選択したパスの終点に対応する2つの子スロットを識別する。プロセスは、ステップ7925において識別した各子スロットのパス・リストに選択したパスを追加する。ステップ7935において、プロセスは、ステップ7915において検索した経路のすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7920に戻り、経路の他のパスを選択する。
プロセスが、その対応する子スロットのリストへ経路のすべてのパスを追加したと判断した場合には、プロセスは、(ステップ7940において)現在のスロットの子スロットの中の1つを選択し、選択した子スロットのパスのリストを検索する。プロセスは、選択した子スロット内の選択したスロット−ネットのすべての可能な伝搬順列を列挙し、コスト計算するために、ステップ7940において、子スロットを選択する。ステップ7945において、プロセスは、選択した子スロット内の選択したスロット−ネットのピン配列を検索する。
【0141】
ステップ7950において、プロセスは、ステップ7940において選択した子スロット内にすべての可能なパス伝搬構成を記憶するために、空のリストを初期化する。ステップ7955において、プロセスは、選択した子スロットのパス・リストが空であるかどうか(すなわち、スロット−ネットの経路が、子スロットを通る何らかのパスを持っているかどうか)を判断する。スロット−ネットの経路が、選択した子スロットを通らない場合には、プロセスは、選択した子スロットを通るスロット−ネット経路に対する伝搬構成を識別する必要はない。それ故、プロセスは、ステップ7985に進み、現在のスロットのすべての子スロットをチェックしたかどうかを判断する。プロセス7900からプロセス7985への流れについては後で説明する。
プロセスが、(ステップ7955において)スロット−ネットの経路が選択した子スロットを通ると判断し、そのため、選択した子スロット内のスロット−ネットの経路に対する伝搬構成を識別する必要がない場合には、プロセス7900は、選択した子スロット内の選択したスロット−ネットのすべての可能な伝搬順列を列挙し、コスト計算し、記憶するために、ステップ7960〜7980を実行する。
いくつかの実施形態の場合には、プロセス7900は、ステップ7955〜7980を実行するために、再帰関数を使用する。この関数は、(1)選択した子スロットのパス・リスト上のパスに対する1つの可能な伝搬を選択することにより、(2)選択した伝搬に対応するように仮想ピンを設定することにより、(3)そのようなパスが存在する場合には、パス・リスト上の以降の各パスに対して第1の2つの動作を再帰的に反復することにより、各パス−伝搬順列を識別する。識別した各伝搬順列に対して、次に、プロセス7900は、各順列をコスト計算し、セーブし、伝搬構成のリストに各順列を追加するために、ステップ7970〜7975を実行する。
【0142】
より詳細に説明すると、ステップ7960において、プロセス7900は、選択した子スロット内のパス伝搬の1つの順列を識別する。スロット−ネットの経路が、選択した子スロットに入るパスを1本しか持っていない場合には、識別した伝搬順列は、選択した子スロットに入るパスに対する伝搬の可能性の中の1つである。一方、スロット−ネットの経路が、選択した子スロットに入るパスを1本以上持っている場合には、識別した各順列は、選択した子スロットに入る各経路に対する伝搬の一意の組合わせである。
図61に示すように、水平垂直パスは、本発明のいくつかの実施形態の場合には、10の伝搬の可能性を持つ。一方、対角線パスは、図62に示すように、いくつかの実施形態の場合には、7つの伝搬の可能性を持つ。一方、図63に示すように、対角線パスは、他の実施形態の場合には、19の伝搬の可能性を持つ。通常の当業者であれば、他のいくつかの実施形態は、水平パス、垂直パス、または対角線パスに対する他の伝搬モデル化を使用することを理解することができるだろう。
選択した子スロット内でパス伝搬の順列を識別した後で、プロセスは、(ステップ7965において)ステップ7960において識別した順列のパス伝搬に対応するピン構成を識別する。このようなピン構成は、識別した順列のパス伝搬に対応するために、1つまたはそれ以上の仮想ピンを含むことができるという点を除けば、選択した子スロット内のスロット−ネットのピン構成と同じである。
次に、プロセスは、(ステップ7970において)ステップ7965において識別したピン構成のコストを計算する。いくつかの実施形態の場合には、このコストは、識別したピン構成により指定される選択した子スロットのピンを接続するのに必要な経路のワイヤ長さコストである。すでに説明したように、いくつかの実施形態は、各ピン構成に対する最適なシュタイナー経路のコストを指定する予め表の形にした表からこのコストを検索する。一方、他のいくつかの実施形態は、経路パスのコストに基づいて、リアルタイムでこのコストを計算する。
【0143】
ステップ7970において、プロセスは、識別した伝搬の順列(すなわち、識別したパス伝搬)および構成記録内にそのコストを記憶する。図80は、このような記録に対するデータ構造体を示す。プロパゲータは、このデータ構造体のリストを生成し、プロパゲータが生成したすべての構成を追跡するためにこのリストを使用する。このデータ構造体は、ネットのdbNetデータ構造体への参照を含む。このデータ構造体は、また、プロパゲータに対して、その構成に対する子スロットの識別を識別する子スロット識別子を含む。この構造体は、また、パス伝搬を入手できる名前も含む。この構造体は、さらに、ワイヤ長さコストおよびパスのリストも記憶する。
ステップ7970の後で、プロセスは、(ステップ7975において)ステップ7970において生成した構成記録を、選択した子スロットに対する構成のリストに追加する。次に、プロセスは、(ステップ7980において)選択した子スロット内のすべてのパス伝搬順列をチェックしたかどうかを判断する。すでに説明したように、いくつかの実施形態は、すべてのパス伝搬順列を識別する再帰関数の一部としてこの判断を行う。
プロセスが、(ステップ7980において)すべてのパス伝搬順列をチェックしたと判断した場合には、プロセスは、(ステップ7960において)他の順列を識別し、次に、(ステップ7965〜7975において)この順列のコスト計算を行い、記憶する。プロセスが、すべてのパス伝搬順列をチェックした場合には、プロセスは、(ステップ7985において)すべての子スロットをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ7940に戻り、他の子スロットを選択する。
プロセスが、(ステップ7985において)すべての子スロットをチェックしたと判断した場合には、プロセスは、(ステップ7990において)現在のスロット内のすべてのスロット−ネットに対する伝搬順列を生成したかどうかを判断する。生成していなかった場合には、プロセスは7905に戻り、他のスロット−ネットを選択し、次に、新しく選択したスロット−ネットに対する伝搬順列を列挙し、コスト計算するために以降の動作を実行する。プロセスが、現在のスロット内のすべてのスロット−ネットをチェックしていた場合には、プロセスは終了する。
【0144】
d.LP問題の定式化と解
ILPプロパゲータは、LPソルバー3945に、1つまたはそれ以上の目的関数、多数の解、およびいくつかの制約を供給することによりLP問題を定式化する。次に、LPソルバーは、制約の見地からみて最適な解を選択するために、目的関数を使用しなければならない。
LP伝搬定式化内の基本変数は、構成記録nXtYeApB...である。ここで、小文字はキーワード(n=ネット;t=子スロット;e=パス;p=伝搬)であり、大文字は、数字(0から「n」に対する設計内のネットの数;「t」に対する0〜15;「e」に対する0〜41;「p」に対する0〜9)を表す。
LPソルバーは、各構成変数に対する1つの実数値を含むLP解を返送する。すでに説明したように、次に、プロセス7600は、このLP解をILP解、すなわち、各構成変数の値として0または1を指定する解に変換する。LP解を生成するために、また、LP解をILP解に変換するために、LPソルバーを使用する代わりに、他のいくつかの実施形態は、ILP解を生成するためにILPソルバーを使用する。
すでに説明したように、いくつかの実施形態は、LPソルバーとして、(ドイツ語で)「Paralleler und Objektorientierter Simplx−Algorithmus」という名称の、Ph.D.論文の一部として、Roland Wunderlingが実施した、「SoPlex」ソルバーを使用する。このソルバーに関する情報は、下記のウェブサイト:
http://www.zib.de/Optimization/Software/Soplex/
で入手することができる。
また、すでに説明したように、LPソルバーのタスクは、多数の制約を満足させる一方で、1つまたはそれ以上の目的関数を最小にするLP解を識別することである。以下に説明するいくつかの実施形態は、LP伝搬に対して下記の目的関数を指定する。
最小化:L1nXtYeApB +...+ LLnQtWeDpCeApD + ...
この目的関数は、全長を最短にする。より詳細に説明すると、この関数の各項は、構成(すなわち、ある子スロット内のあるネットに対するパスの伝搬の完全な選択)を表し、これに対してその構成(L1、LL)の推定した長さが掛けられる。
【0145】
また、以下に説明するいくつかの実施形態は3つの制約を指定する。第1の制約は、以下に示すように、各スロット−ネットに対する構成を1つだけ選択するためにLPソルバーを必要とする。
nXtY:nXtYeApB..eQpZ+nxtYeApC..eQpR+...=1
このような制約の1つは、最近解いたスロットの16の子スロットを横切る各スロット−ネットに対して定義される。この制約は、選択した構成をスロット−ネット当り1つに制限する働きをする。
第2の制約は、伝搬一貫性制約である。この制約は、(例えば、子スロットY内のパスAに対して伝搬Bを選択した場合には、パスAに接続している他の子スロット内でも、同じ選択を行わなければならないというような)子スロット間で確実に統一を行う働きをする。この制約は、下記のように指定することができる。
nXeYpZ:nXt0eYpZeQp1 + nXt0eYpZeQp2 + nXt0eYpZeQp7...nXtleYpZeSp1 − nXtleYpZeSp2 − nXtleYpZeSp3=0
ネットXに対する子スロットY内のパスAに対して、伝搬Bを指定している構成と同じ数の正の項があり、また、ネットXに対する子スロットW内のパスAに対して、伝搬Bを指定している構成と同じ数の負の項があることに留意されたい。
第3の制約は、容量制約である。いくつかの実施形態は、子スロット内のスロット−ネット構成を孫スロット間のパスの使用にマッピングする(すなわち、子スロット内の各伝搬を孫スロット間のパスの使用にマッピングする)。次に、これらの実施形態は、確実に、孫スロット間のパスの容量が尊重されるようにする。
【0146】
これらの実施形態のうちのいくつかの場合には、LP伝搬問題の定式化は下記の通りである。
[prepPropagationILP(スロット)]
− 余裕=0に初期化する
− 解が得られない場合
− 新しいLPソルバーを初期化する
− 目的関数「objective」を宣言する
− そのスロットの各パスに対して
− そのパスの各伝搬に対して
− その伝搬を含むすべてのパスを検索する
− その伝搬の各パスに対して
− そのパスの終点としての働きをする(子スロット、孫スロット)のペアを検索する(子スロット、孫スロットのペアは、2つ以上の伝搬内で発生する場合がある)
− この(子スロット、孫スロット)のペアがまだ処理されていない場合
−制約「tAsBtCsD」を生成する。ここで、Aは子スロット、Bは子スロットAの孫スロット、Cは子スロット、Dは子スロットCの孫スロット。この制約は、孫スロット間のパスの使用を制限する。
− 全長変数を定義するために、制約「totlen」を宣言する
− 各スロット−ネットXに対して
− そのスロット−ネットに対する経路内の各パスYに対して
− そのパスの各伝搬Zに対して
− LPソルバーに、その接続している子スロットの両方の同じパスに対して、同じ伝搬を強制的に選択させるために、制約「nXeYpZ」を宣言する
− 現在のスロット−ネットの経路が入る各子スロットに対して
− 制約「nXtY」を宣言する。ここで、Yは子スロットの数である。これは、各子スロット内のスロット−ネット当り1つの構成を選択するためのものである
【0147】
//制約の宣言終了、次は変数の宣言
− 各スロット−ネットに対して
− 現在のスロット−ネットの経路が入る各子スロットに対して
− 子スロット内のスロット−ネットのすべての構成を識別する。//プロセス7900により行う
− 生成した各構成に対して
− 変数「nAtBeCpD」を生成する。ここで、A、B、C、Dは、構成のネット、スロット、パスおよび伝搬をそれぞれ識別する整数である
− この構成内の各パスに対して
− そのパスに対する伝搬が「使用不能」である場合には、構成コストにペナルティを追加する//使用不能は、プロセス7700および7800により得た推定値から入手した混雑の推定値に基づいて決定される
− Bが、このパスに入る2つの子スロットの小さい方の索引である場合には、係数1.0を含み、その他の場合には−1.0を含む制約「nAeCpD」内に入れるnAtBeCpDを宣言する
− そのパスの伝搬内の各サブパスに対して
− サブパスの終点としての働きをする2つ(子スロット、孫スロット)のペアを検索する
− 係数0.5を含む(子スロット、孫スロット)のこのペアに対応する制約内に入れるnAtBeCpDを宣言する
− 係数1.0を含む制約「nAtB」内に入れるnAtBeCpDを宣言する
− 構成のデータ構造体内に記憶している構成コストに等しい係数に任意のペナルティを加えたものを含む制約「totLen」内に入れるnAtBeCpDを宣言する
【0148】
− 選択した構成の全長を表すために、変数「tl」を生成する
− 係数−1.0を含む制約「totLen」内に入れるtlを宣言する
− 係数1.0を含む目的関数内に入れるtlを宣言する
− 制約「totLen」のrhs=0.0に設定する
− そのスロットの各パスに対して
− そのパスの各伝搬に対して
− その伝搬を含むすべてのパスを検索する
− その伝搬の各パスに対して
− そのパスの終点としての働きをする(子スロット、孫スロット)のペアを検索する(子スロット、孫スロットのペアは、2つ以上の伝搬内で発生する場合がある)
− この(子スロット、孫スロット)のペアがまだ処理されていない場合
− 制約「tAsBtCsD」を生成する。ここで、Aは子スロット、Bは子スロットAの孫スロット、Cは子スロット、Dは子スロットCの孫スロットである。この制約は、孫スロット間のパスの使用を制限する。
− 制約「tAsBtCsD」のrhsを、伝搬パスのデフォールト容量に、ローカル変数「slack」値を加算し、伝搬の推定パス使用と伝搬パスの閉鎖された容量との合計を引いたものに設定する//この場合、推定パス使用は、プロセス7800により計算し、閉鎖された容量は、プロセス7700により計算した
【0149】
− 各スロット−ネットAに対して
− そのスロット−ネットの経路内の各パスBに対して
− そのパスの各伝搬Cに対して
− 制約「nAeBpC」のrhsを0.0に設定する
− このスロット−ネットの経路が接続している各子スロットBに対して
− 制約「nAtB」のrhsを1.0に設定する
− LPを解く
− 解がない場合には、ループから抜け出る;そうでない場合には、slack=slack+1に設定して、再度スタートする
すでに説明したように、定式化の第2のラインから最後のラインは、(ステップ7620において)LPソルバーに問題を解くように命令する。次に、LPソルバーは、この問題を解こうとする。LPソルバーがこの問題を解くのに失敗する度に、上記定式化は、LPソルバーがこの問題を解くことができるまで、余裕の値を増大する。
LPソルバーは、実数の最適な解を返送する。次に、プロセス7600は、この解を整数LP(「ILP」)解に変換する。いくつかの実施形態は、すでに説明したように、この変換を行うためにランダム化四捨五入を使用する。通常の当業者であれば、LP解を得るためにLPソルバーを使用し、LP解をILP解に変換する代わりに、他の実施形態は、ILP解を得るためにプロパゲータに対するILPソルバーを使用することを理解することができるだろう。
【0150】
e.後続の伝搬
現在のスロットのレベルが、リーフ・レベルより少なくとも2つ高い場合には、プロセス7600は、次の下位の再帰レベルに対する後続伝搬リストに、ステップ7625において識別した伝搬経路を追加する。図65は、後続の伝搬リストに追加することができる伝搬パスの一例である。すでに説明したように、この図は、スロット0および9に実際のピン6525を持つ1つのネットを示す。このネットに対して選択した経路は、子スロット0および9を接続するために、子スロット5を通るパスP17およびP24を使用する。
図65は、パスP24が、パス6510および6515により子スロット0および5内に伝搬する様子、一方、パスP17が、パス6520により子スロット5および9内に伝搬する様子を示す。伝搬パス6510は、現在のスロットの子スロット0の子スロット7と現在のスロットの子スロット1の子スロット8との間に位置する。伝搬パス6515は、現在のスロットの子スロット1の子スロット13と現在のスロットの子スロット5の子スロット2との間に位置する。伝搬パス6520は、現在のスロットの子スロット5の子スロット14と現在のスロットの子スロット9の子スロット2との間に位置する。図65は、子スロット1、5および9のスロットに追加した5つの仮想ピンである。
現在のスロットのレベルがリーフ・レベルより少なくとも2つ高い場合には、プロセス7600は、次の下位の再帰レベルに対する後続伝搬リストに、伝搬パス6510、6515および6520を追加する。次に、プロパゲータは、現在のスロットの子スロットに対して、後続の伝搬を実行する際にこのリストを使用する。この伝搬動作は、1つレベル下の後続の伝搬リスト上のパスを伝搬する。
図81は、現在のスロットが、トップ・レベルよりは下であるが、リーフ・レベルのスロットよりは上である場合の、現在のスロットに対する後続伝搬を実行するためのプロセス8100である。定義により、このような現在のスロットは、前の親スロットの子スロットである。図81に示すように、プロセス8100は、最初に、(ステップ8105において)(1)後続伝搬のリストが、少なくとも1つのアンカーを持つ任意のパスを含んでいるかどうか、または、(2)現在のスロットが、現在のレベルの最後のスロットであるかどうか、また、後続伝搬のリストが、依然として1つまたはそれ以上のパスを含んでいるかどうかを判断する。
【0151】
プロセスが、ステップ8105においてパスを識別しなかった場合には、プロセスは終了する。パスを識別した場合には、プロセス8100は、(ステップ8110において)識別したパスの中の1つを選択し、後続伝搬のリストからこのパスを除去する。次に、プロセスは、(ステップ8115において)選択したパスの各伝搬順列のコストを計算する。各伝搬順列のコストは、その伝搬パスのコストに、伝搬順列が通る2つまたは3つの子スロット内のピン構成のコストを加えたものを含む。
次に、プロセスは、(ステップ8120において)コストが最も安い伝搬順列を選択する。選択した伝搬順列は、1つのパス、場合によっては2つの伝搬パスを含む。例えば、図65の例の場合には、パスP24の伝搬は、2つの伝搬パス6510および6515になっているし、一方、パス17の伝搬は、1つの伝搬パス6520になっている。
各伝搬パスに対して、いくつかの実施形態は、パスが結合する子スロットの識別およびパスの残りの容量を記憶しているスロット・ペア記録を維持する。それ故、ステップ8125において、ステップ8120において選択した伝搬順列を形成する各伝搬パスに対して、スロット・ペア・データ構造体が存在するかどうかを判断する。選択した伝搬順列の伝搬パスに対して、そのような構造体が存在しない場合には、プロセスは、(ステップ8125において)そのパスに対するスロット・ペア構造体を生成し、この構造体内にそのパスが通る子スロットの識別を記憶し、その構造体の容量フィールドを初期化する。伝搬パスに対して初期化した容量は、パスのデフォールト容量からそのパス上のすべての閉鎖を引いたものである。スロット・ペア構造体が、選択した伝搬順列の伝搬パスに対してすでに存在する場合には、プロセスは、(ステップ8125において)この構造体からのパスの残りの容量を識別する。
ステップ8130において、プロセスは、選択した伝搬順列を現在のスロットの子スロット内に埋設することができるかどうかを判断する。すなわち、プロセスは、選択した伝搬順列を形成する1つまたは複数のパスがしきい値より高い残りの容量を持っているかどうかを判断する。いくつかの実施形態の場合には、しきい値はゼロである。これらの実施形態の場合には、それを形成するすべてのパスが、ゼロより大きい残りの容量を持っている場合に、選択した伝搬順列を埋設することができる。
【0152】
プロセスが、選択した伝搬順列を埋設できないと判断した場合には、プロセスは、(ステップ8135において)ステップに8120おいて選択したパスに対する追加の伝搬順列が存在するかどうかを判断する。存在する場合には、プロセスは、(ステップ8140において)次の最も安い伝搬順列を選択し、ステップ8125に進む。
プロセスが、(ステップ8135において)チェックする追加の伝搬順列が存在しないと判断した場合には、プロセスは、(ステップ8160において)ステップ8130においてチェックした最善の伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される(すなわち、選択した伝搬順列の1つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される)。図82は、このような仮想ピンの設定の一例を示す。この図は、(1)パス8205により、子スロット7のスロット11内に伝搬している後続パス・リストからのパス6510、(2)この伝搬に対応するように、スロット11内で設定された仮想ピン8210を示す。この図は、また、パス6510が、子スロット4のスロット11、および現在のスロット8220に隣接しているスロットの子スロット8のスロット1内に、パス8215に沿って伝搬している様子を示す。この図は、また、隣接スロットの子スロット4および8のスロット12および1内で設定された2つの仮想ピンも示す。
ステップ8160において、プロセスは、また、埋設した伝搬順列が使用する1つまたは複数の伝搬パスの使用できる容量を更新する。すでに説明したように、伝搬パスの使用できる容量は、パスのデフォールト容量から、その閉鎖された容量およびそのパス使用推定値の合計を引いたものとして計算することができる。この場合、閉鎖された値および使用値は、プロセス7700および7800により計算される。いくつかの実施形態は、各伝搬パスの使用できる容量で、プロセス7800により計算したパス使用推定値の要因を考慮しない。
【0153】
現在のスロットのレベルが、リーフ・レベルより少なくとも2つ高い場合には、プロセスは、(ステップ8160において)次の下位の再帰レベルに対する後続伝搬リストに埋設した伝搬パスを追加する。ステップ8160から、プロセスはステップ8150に進むが、このステップについては後で説明する。
プロセスが、(ステップ8130において)選択した伝搬順列を埋設できると判断した場合には、プロセスは、(ステップ8145において)ステップ8120または8140において選択した伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される(すなわち、選択した伝搬順列の1つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される)。ステップ8145において、プロセスは、また、埋設した伝搬順列が使用する1つまたは複数の伝搬パスの使用できる容量を更新する。現在のスロットのレベルがリーフ・レベルより少なくとも2つ高い場合には、プロセスは、(ステップ8145において)次の下位の再帰レベルに対する後続伝搬リストに埋設した伝搬パスを追加する。ステップ8145から、プロセスはステップ8150に進む。
ステップ8150において、プロセスは、ステップ8105において識別したすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ8110に戻り、ステップ8105において識別した他のチェックしていないパスを選択する。チェックしていた場合には、プロセスは終了する。
【0154】
2.シーケンシャル・プロパゲータ
本発明のいくつかの実施形態は、ソルバーが指定した経路が現在のスロットの子スロット内にどのように伝搬するかを識別する。これらの実施形態の中のあるものは、図63の対角線伝搬モデルを使用する場合には、このようなアプローチを使用する。
図83は、いくつかの実施形態で使用されるシーケンシャルな伝搬プロセスの中の1つを示す。この図に示すように、このプロセスは、(ステップ8305において)現在のスロットの子スロットの子スロット間の各伝搬の使用できる容量を計算することによりスタートする。各伝搬パスの使用できる容量は、そのパスのデフォールト容量からその閉鎖された容量を引き、そのパス使用推定値を加えたものに等しい。すでに説明したように、プロセス7700および7800は、閉鎖された値およびパス使用値を計算するために使用することができる。いくつかの実施形態は、各伝搬パスの使用できる容量で、プロセス7800により計算したパス使用推定値の要因を考慮に入れない。
使用できる伝搬容量を計算した後で、プロセスは、(ステップ8310において)現在のスロット内のスロット−ネットを選択する。次に、プロセスは、(ステップ8315において)選択したスロット−ネットに対する経路を検索する。ステップ8325において、次に、プロセスは、最大数のアンカーを含む1つのパスを選択する。すでに説明したように、いくつかの実施形態は、アンカーを、それにパスが入るどちらかの子スロット内のピンとして定義する。これらの実施形態の場合には、1つのパスは、最大2つのアンカーを持つ。他のいくつかの実施形態は、アンカーを子スロットのスロット内のピンの数として定義することができる。このようなアプローチの下では、各子スロットの16のスロット内に16のピンを持っている場合には、最大32のアンカーを持つことができる。
【0155】
次に、プロセスは、(ステップ8330において)選択したパスの各伝搬順列のコストを計算する。各伝搬順列のコストは、順列の伝搬パスのコストに、伝搬順列が通る2つまたは3つの子スロット内のピン構成のルーティング・コストを加えたものを含む。
次に、プロセスは、(ステップ8335において)コストが最も安い伝搬順列を選択する。選択した伝搬順列は、1つの伝搬パス、場合によっては2つの伝搬パスを含む。例えば、図65の例の場合には、パスP24の伝搬は、2つの伝搬パス6510および6515になっているし、一方、パス17の伝搬は、1つの伝搬パス6520になっている。
ステップ8340において、プロセスは、選択した伝搬順列を現在のスロットの子スロット内に埋設できるかどうかを判断する。すなわち、プロセスは、選択した伝搬順列の埋設により、この順列に対する任意の伝搬パスが過度に混雑するかどうかを判断する。
プロセスが、選択した伝搬順列を埋設できないと判断した場合には、プロセスは、(ステップ8345において)ステップに8325おいて選択したパスに対する追加の伝搬順列が存在するかどうかを判断する。存在する場合には、プロセスは、(ステップ8350において)次の最も安い伝搬順列を選択し、ステップ8340に戻り、新しく選択した順列が埋設できるかどうかを判断する。
プロセスが、(ステップ8345において)チェックする追加の伝搬順列が存在しないと判断した場合には、プロセスは、(ステップ8365において)ステップ8340において遭遇した最善の伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される(すなわち、選択した伝搬順列の1つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される)。現在のスロットのレベルが、リーフ・レベルより少なくとも2つ高い場合には、この埋設をすると、次の下位の再帰レベルに対する後続伝搬リストに、選択した伝搬順列が使用する伝搬パスが追加される。ステップ8365において、プロセスは、また、埋設した伝搬順列の伝搬パスの使用できる容量を更新する。ステップ8365から、プロセスは、ステップ8360に進むが、このステップについては後で説明する。
【0156】
プロセスが、(ステップ8340において)選択した伝搬順列を埋設できると判断した場合には、プロセスは、(ステップ8355において)選択した伝搬順列を埋設する。この埋設を行うと、影響を受けた子スロットのピン配列内の仮想ピンが設定される(すなわち、選択した伝搬順列の1つまたは複数のパスが通る現在のスロットの孫スロット内の仮想ピンが設定される)。現在のスロットのレベルがリーフ・レベルより少なくとも2つ高い場合には、この埋設をすると、次の下位の再帰レベルに対する後続伝搬リストに、選択した伝搬順列が使用する伝搬パスが追加される。ステップ8355において、プロセスは、また、埋設した伝搬順列の伝搬パスの使用できる容量を更新する。ステップ8355から、プロセスはステップ8360に進む。
ステップ8360において、プロセスは、選択したスロット−ネットのすべてのパスをチェックしたかどうかを判断する。チェックしていなかった場合には、プロセスはステップ8325に戻り、この経路の他のパスを選択する。チェックしていた場合には、プロセスは、(ステップ8370において)現在のスロット内のすべてのスロット−ネットをチェックしたかどうかを判断する。
プロセスが、現在のスロット内のすべてのスロット−ネットをチェックしていなかった場合には、プロセスはステップ8310に戻り、他のスロット−ネットを選択する。チェックしていた場合には、プロセスはステップ8375に進む。現在のスロット・レベルが、トップ・レベルより下であるが、リーフ・レベルより高い場合には、シーケンシャル・プロパゲータが、(ステップ8375において)後続伝搬動作を行う。この動作は、さらに1レベル低い前のルーティング・レベルのところで、プロパゲータが指定したルーティング・パスを伝搬する。現在のスロット・レベルが、リーフ・レベル直前のレベルである場合には(すなわち、現在のレベルが、Gcellのグランドペアレントである場合には)、シーケンシャル・プロパゲータは、(ステップ8380において)dBNetに、ステップ8355、8365および8375において埋設した任意の伝搬パスのパス・データ構造体をリンクするためにサーバを呼び出す。その後、プロセスは終了する。
【0157】
VII.コンピュータ・システム
図84は、本発明の一実施形態を実施するコンピュータ・システムである。コンピュータ・システム8400は、バス8405、プロセッサ8410、システム・メモリ8415、読出し専用メモリ8420、永久記憶装置8425、入力装置8430、および出力装置8435を含む。
バス8405は、すべてのシステム、周辺機器、およびコンピュータ・システムの多数の内部デバイスを通信できるように接続しているチップセット・バスを表す。例えば、バス8405は、通信できるように、プロセッサ8410を読出し専用メモリ8420、システム・メモリ8415、および永久記憶装置8425に接続する。
これらの種々の記憶装置から、プロセッサ8410は、本発明のプロセスを実行するために、実行対象の命令および処理対象のデータを検索する。読出し専用メモリ(ROM)8420は、プロセッサ8410およびコンピュータ・システムの他のモジュールが必要とする静的データおよび命令を記憶する。一方、永久記憶装置8425は、読出しおよび書込みメモリ素子である。この素子は、コンピュータ・システム8400の電源がオフになった場合でも、命令およびデータを記憶している不揮発性記憶装置である。本発明のいくつかの実施形態は、永久記憶装置8425として、(磁気ディスクまたは光ディスクおよびその対応するディスク・ドライブのような)大量記憶装置を使用する。他のいくつかの実施形態は、永久記憶装置として、(フロッピー・ディスクまたはzip(登録商標)ディスク、およびその対応するディスク・ドライブのような)取外し可能な記憶装置を使用する。
永久記憶装置8425のように、システム・メモリ8415は、読出しおよび書込みメモリ素子である。しかし、記憶装置8425とは異なり、システム・メモリは、ランダム・アクセス・メモリのような揮発性読出しおよび書込みメモリである。システム・メモリは、プロセッサが実行時に必要とする命令およびデータの中のあるものを記憶する。いくつかの実施形態の場合には、本発明のプロセスは、システム・メモリ8415、永久記憶装置8425および/または読出し専用メモリ8420内に記憶される。
【0158】
バス105は、また、入力装置8430および出力装置8435にも接続している。入力装置により、ユーザは、コンピュータ・システムへ情報を通信し、コンピュータ・システムへのコマンドを選択することができる。入力装置8430は、英数字キーボードおよびカーソル・コントローラを含む。
出力装置8435は、コンピュータ・システムが生成した画像を表示する。例えば、これらのデバイスは、IC設計レイアウトを表示する。出力装置は、プリンタおよび陰極線管(CRT)または液晶ディスプレイ(LCD)のような表示デバイスを含む。
最後に、図84に示すように、バス8405も、コンピュータ8400を、ネットワーク・アダプタ(図示せず)を通してネットワーク8465に接続する。このようにして、コンピュータは、(ローカル・エリア・ネットワーク(「LAN」、ワイド・エリア・ネットワーク(「WAN」)またはイントラネットのような)複数のコンピュータのネットワーク、または(インターネットのような)複数のネットワークのネットワークの一部になることができる。
【0159】
コンピュータ・システム8400の任意のまたはすべての構成要素は、本発明と一緒に使用することができる。しかし、通常の当業者であれば、任意の他のシステム構成も、本発明と一緒に使用することができることを理解することができるだろう。
多数の特定の詳細な部分を参照しながら本発明を説明してきたが、通常の当業者であれば、本発明を、本発明の精神から逸脱することなしに他の特定の形で実行することができることを理解することができるだろう。例えば、階層ルータを参照しながらいくつかの実施形態について今迄説明してきたが、通常の当業者であれば、本発明の他の実施形態を、迷路ルータのような他のタイプのルータにより実施することができることを理解することができるだろう。
また、LP問題定式化を参照しながら、いくつかの実施形態について説明してきたが、通常の当業者であれば、これらの実施形態を、LPソルバーを使用しないアプリケーションにより実行することができることを理解することができるだろう。上記トラック共有制約は、その1つの例である。ルータを埋設するかしないかの判断を行う際に、任意のタイプのルータをこれらの共有制約に対応させることができる。
さらに、他の実施形態は、回路レイアウトを分割するのに、他の一組の分割ラインを使用することができる。例えば、いくつかの実施形態は、図5の4×4グリッドが形成するサブ領域以外の異なる形および/または異なるサイズのサブ領域を形成する分割グリッドを使用することができる。それ故、通常の当業者であれば、本発明が上記の例示としての詳細な説明により制限されないで、添付の特許請求の範囲により定義されることを理解することができるだろう。
【図面の簡単な説明】
【0160】
【図1】ICレイアウトの一例である。
【図2】水平相互接続ライン、垂直相互接続ライン、および45度の対角線相互接続ラインを使用するICレイアウトである。
【図3】八角形の配線モデルを実施するための1つの方法である。
【図4】本発明のある実施形態により実行した再帰的ルーティング・プロセスの概念図である。
【図5】16のサブ領域に分割されたICレイアウトの設計領域である。
【図6】図5のネットに対する3つのシュタイナー・ツリーである。
【図7】図5のネットに対する3つのシュタイナー・ツリーである。
【図8】図5のネットに対する3つのシュタイナー・ツリーである。
【図9】2つの混雑グリッドである。
【図10】図9の混雑グリッドにより形成された縁部である。
【図11】若干小さい図10の対角線縁部である。
【図12】図10の縁部を横切る配線パスである。
【図13】いくつかの実施形態が使用する分割グリッドである。
【図14】図13のグリッドにより生成された縁部を横切って形成されたマンハッタン・パスおよび対角線パスである。
【図15】図13のグリッドの各混雑グリッドの子スロットを4つのスロットに分解する長さグリッドである。
【図16】図13のグリッドの各混雑グリッドの各子スロットを16のスロットに分解する長さグリッドである。
【図17】図15の分割により、各混雑グラフの子スロット内の結果として得られる4つのスロット間をルーティングするための6つのパスの生成を示す。
【図18】図16の分割により、各混雑グラフの子スロット内の結果として得られる16スロット間をルーティングするための42のパスの生成を示す。
【図19】配線モデルおよび混雑グリッドおよび/または分割グリッドを適応できるように選択するためのプロセスである。
【図20】いくつかの実施形態が、ツリーの2つのノードを接続している相互接続ラインの長さをどのように計算するのを示す。
【図21】いくつかの実施形態が、ツリーの2つのノードを接続している相互接続ラインの長さをどのように計算するのを示す。
【図22】分割グリッドに対して可能な各ネット構成に対する1つまたはそれ以上の最適なシュタイナー・ツリーを形成し、ツリーおよびその属性を記憶するプロセスを示す。
【図23】4×4分割グリッドにより形成された16のスロットに対する16のツリー・ノードを示す。
【図24】潜在的なシュタイナー・ノードを識別するためのプロセスである。
【図25】図25Aおよび図25Bは、1つまたはそれ以上の最小間隔のツリー(MST)を形成し、2つまたはそれ以上のノードを有するノード構成に対するMSTの長さを計算するためのプロセスである。
【図26】ルーティング・パス情報およびパス使用の確率を計算するプロセスである。
【図27】それぞれ、図6〜図8のシュタイナー・ツリーに対するパス使用回数およびパス使用の確率の例である。
【図28】それぞれ、図6〜図8のシュタイナー・ツリーに対するパス使用回数およびパス使用の確率の例である。
【図29】複数の組のネット構成に対するシュタイナー・ツリー経路を記憶するための圧縮技術である。
【図30】ノード構成をグループ分けするための1つの技術である。
【図31】ノード構成をグループ分けするための1つの技術である。
【図32】記憶したツリーをソートするために使用する2進探索ツリー(「BST」)である。
【図33】記憶構造体内にあるツリーを前に記憶したかどうかを判断するために、BSTをたどる際に使用するプロセスである。
【図34】複数の配線モデルに対する経路および経路属性を予め表の形に作成するプロセスである。
【図35】図35Aおよび図35Bは、閉ノード構成および開ノード構成の例である。
【図36】最小の閉ツリーを予め表に作成するプロセスである。
【図37】アンテナ・ノードを持たない関連閉ノード構成を予め表の形にする、開ノード構成に対するプロセスである。
【図38】経路および閉ノード構成が、図36および図37のプロセスにより予め表の形にされる場合の、あるネットに対して1つまたはそれ以上のシュタイナー・ツリー経路を識別するプロセスである。
【図39】本発明のいくつかの実施形態のルータのソフトウェア・アーキテクチャである。
【図40】16のサブ領域の複数の組に再帰的に分割されている設計領域である。
【図41】ネットリストに対するデータ構造体である。
【図42】dbNetデータ構造体である。
【図43】簡単なピン・データ構造体である。
【図44】パス・データ構造体である。
【図45】スロット−ネット・データ構造体である。
【図46】ルータにより形成されたスロットの階層を概念的に示すグラフである。
【図47】スロット・データ構造体である。
【図48】回路モジュール・データ構造体である。
【図49】図39のルータのイニシャライザにより実行されるプロセスである。
【図50】図39のルータのイニシャライザにより実行されるプロセスである。
【図51】図39のルータのイニシャライザにより実行されるプロセスである。
【図52】図39のルータのスロット・マネージャにより実行されるプロセス、である。
【図53】図39のルータのソルバーにより実行されるプロセスである。
【図54】パスの混雑を予測するための1つの方法である。
【図55】パスの混雑を予測するための1つの方法である。
【図56】ネット構成に擬似ピンを追加することによる、各ネット構成に対する経路を識別し、迂回路の可能性を生成するプロセスである。
【図57】1つまたは2つの擬似ピン構成を追加することによる、次善の迂回経路の発生方法のいくつかの例である。
【図58】1つまたは2つの擬似ピン構成を追加することによる、次善の迂回経路の発生方法のいくつかの例である。
【図59】ネット構成に対する追加の経路を識別するためのもう1つの技術である。
【図60】ネット構成に対する追加経路を識別するプロセスである。
【図61】現在のスロットの子スロット間の水平パスまたは垂直パス内の、子スロットのスロット内への伝搬の1つの方法である。
【図62】もっと下のレベルの子スロット内への45度の対角線パス内の伝搬をモデル化するための2つの異なる方法である。
【図63】もっと下のレベルの子スロット内への45度の対角線パス内の伝搬をモデル化するための2つの異なる方法である。
【図64】3つの構成要素コストによる各経路のコストを計算するためのプロセスである。
【図65】パスの伝搬の可能性の一例である。
【図66】バイアの数をカウントする1つの方法を概念的に示す2つの例である。
【図67】バイアの数をカウントする1つの方法を概念的に示す2つの例である。
【図68】経路内のバイアの数を計算するために、協力して動作する3つのプロセスである。
【図69】経路内のバイアの数を計算するために、協力して動作する3つのプロセスである。
【図70】経路内のバイアの数を計算するために、協力して動作する3つのプロセスである。
【図71】Gcellレベルでの制約を共有するためのニーズである。
【図72】Gcellレベルでの制約を共有するためのニーズである。
【図73】対角線のペアの制約である。
【図74】混合した3組の制約である。
【図75】対角線3組の制約である。
【図76】ILPプロパゲータが、いくつかの実施形態で行うプロセスである。
【図77】伝搬の利用度を推定するための1つの方法である。
【図78】伝搬の利用度を推定するための1つの方法である。
【図79】伝搬の回数およびコストを計算するための1つの方法である。
【図80】伝搬の回数およびコストを計算するための1つの方法である。
【図81】現在のスロットがトップ・レベルのスロットより低く、リーフ・レベルのスロットよりは高い場合の、現在のスロットに対する後続の伝搬を実行するためのプロセスである。
【図82】伝搬する後続パス・リストからのパスである。
【図83】いくつかの実施形態で使用されるシーケンシャルな伝搬プロセスである。
【図84】本発明のいくつかの実施形態を実施する際に使用するコンピュータ・システムである。
【符号の説明】
【0161】
0〜15 子スロット 53,59,61 パス
105,110,115 回路モジュール 130,135,140 ピン
225,230 一組の対角線 305,310,315 マンハッタン層
320,325 対角線層 505 ネット 605 シュタイナーツリー
610,615,620,625,630 シュタイナーノード
905,910 グリッド
Claims (77)
- 集積回路(「IC」)レイアウトの特定の領域内の、一組のピンを有するネットをルーティングするための方法であって、
(a)前記特定のIC領域を、同じ形の複数のサブ領域に分割するステップと、
(b)前記ネットのピンを含む一組のサブ領域を接続している、少なくともその一部が対角線である経路縁部を有する経路を識別するステップとを含む方法。 - 前記経路を識別するステップが、前記ネットのピンを含む前記一組のサブ領域を識別するステップを含む、請求項1記載の方法。
- 前記経路を識別するステップが、さらに、記憶構造体から前記経路を検索するために、前記識別した一組のサブ領域の使用を含む、請求項2記載の方法。
- すべてのサブ領域が同じサイズを有する、請求項1記載の方法。
- 各サブ領域が、4つの辺を有するサブ領域である、請求項1記載の方法。
- 前記IC領域が全ICのレイアウトである、請求項1記載の方法。
- 前記IC領域が全ICのレイアウトの一部である、請求項1記載の方法。
- 前記方法が、前記IC領域内に追加のネットをルーティングし、追加の各ネットが、前記領域内に一組のピンを含み、
前記領域内の追加の各ネットに対して、前記ネットの前記一組のピンを含む一組のサブ領域を接続している経路を識別するステップを含み、
前記識別した経路の中のあるものが、少なくともその一部が対角線である経路縁部を有する、請求項1記載の方法。 - 複数のパスが前記サブ領域間に存在し、複数のパスが対角線パスであり、
各経路が一組のパスを通り、
前記経路の中の少なくとも1つが、前記対角線パスの中の少なくとも1つを通る、請求項8記載の方法。 - 各経路を識別するステップが、前記経路が通る前記一組のパスを識別するステップを含む、請求項9記載の方法。
- 複数のパスがマンハッタン・パスであり、前記経路の中の少なくとも1つが、前記マンハッタン・パスの中の少なくとも1つを通る、請求項9記載の方法。
- 複数の領域間縁部が、前記サブ領域間に存在し、複数の領域間縁部が対角線であり、
各経路が一組の領域間縁部と交差し、
少なくとも1つの経路が、前記対角線領域間縁部の中の少なくとも1つと交差する、請求項8記載の方法。 - 各経路を識別するステップが、前記経路が交差する前記一組の領域間縁部を識別するステップを含む、請求項12記載の方法。
- 前記サブ領域間の複数の領域間縁部がマンハッタン縁部であり、少なくとも1つの経路が少なくとも1つのマンハッタン縁部と交差する、請求項12記載の方法。
- 前記領域内の各ネットに対して、前記ネットのピンを含む前記一組のサブ領域を接続している一組の経路を識別するステップと、
前記識別した経路に対するコストを計算するステップと、
前記計算したコストに基づいて、各ネットに対して1つの識別した経路を選択するステップと、
前記領域内に各ネットに対して選択した経路を埋設するステップとをさらに含む、請求項8記載の方法。 - 各ネットに対して識別した1つの経路を選択するステップが、前記識別した経路を含む線形プログラミング問題をこの問題の変数として定式化するステップを含む、請求項15記載の方法。
- 前記IC領域を分割するステップが、前記IC領域を前記複数のサブ領域に分割するために第1の組のラインを使用するステップを含み、前記方法が、前記ネットに対する経路の混雑を測定するために、第2の組のラインを使用するステップをさらに含み、前記第2の組内の前記ラインの中の少なくともあるものが、前記第1の組内の前記ラインとは異なる、請求項8記載の方法。
- 前記第1の組のラインが第1のグリッドを形成し、前記第2の組のラインが第2のグリッドを形成する、請求項17記載の方法。
- 前記第2の組のラインが、対角線グリッドを形成する交差している対角線を含む、請求項17記載の方法。
- 前記第1の組のラインが、第1の直線グリッドを形成する交差している水平ラインおよび垂直ラインを含む、請求項19記載の方法。
- 前記第2の組のラインが、さらに、第2の直線グリッドを形成する交差している水平ラインおよび垂直ラインを含む、請求項20記載の方法。
- マンハッタン方向の経路の混雑を測定するために、前記第2の直線グリッドを使用するステップと、
前記対角線方向の経路の混雑を測定するために、前記対角線グリッドを使用するステップとをさらに含む、請求項21記載の方法。 - 前記第2の直線グリッドが、前記第1の直線グリッドと同じものである、請求項21記載の方法。
- 前記対角線が、前記第1の組のラインが生成する前記サブ領域の中心で交差する、請求項20記載の方法。
- 前記IC領域を分割するステップが、前記IC領域を前記複数のサブ領域に分割するために、第1の組のラインを使用するステップを含み、複数の対角線ルーティング・パスが、前記サブ領域間に存在し、前記方法が、
第2の組のラインに基づいて、対角線ルーティング・パスの容量を識別するステップをさらに含み、前記第2の組内のラインの中の少なくともあるものが、前記第1の組内のラインとは異なる、請求項8記載の方法。 - 前記第2の組のラインが複数の対角線を含む、請求項25記載の方法。
- 前記対角線が、前記IC領域の複数の軸の中の1つに対して+A度または−A度の角度を有し、Aは0度または90度ではなく、前記方法が、前記サブ領域間の±A度方向のルーティング・パスの容量を識別するために対角線を使用する、請求項26記載の方法。
- Aが45度である、請求項27記載の方法。
- 前記対角線が、複数の対角線縁部を形成し、
特定の各ルーティング・パスが、特定の対角線縁部と交差し、
前記対角線ルーティング・パスの容量を識別するステップが、特定の対角線ルーティング・パスと交差する前記特定の対角線縁部の大きさから特定の各対角線ルーティング・パスの容量を入手するステップを含む、請求項25記載の方法。 - 各ルーティング・パスが、特定の配線層に対して形成され、各層が特定のピッチを有し、前記対角線ルーティング・パスの容量を識別するステップが、前記特定のルーティング・パスの容量を入手するために、特定の各ルーティング・パスの層のピッチを使用するステップを含む、請求項29記載の方法。
- 前記領域をもっと小さいサブ領域に階層的に分割するステップと、
前記階層の各レベルにおいて各ネットに対して経路を指定するステップとを含み、
前記階層の最も低いレベルのところの前記サブ領域がGcellであり、
Gcellレベルでないレベルで前記対角線ルーティング・パスの容量を識別するステップが、前記特定のルーティング・パスの方向のGcellレベルのところの配線のトラックの数からGcellレベルでないレベルの特定の各対角線ルーティング・パスの容量を入手するステップをさらに含む、請求項30記載の方法。 - 前記サブ領域が、第1の組のサブ領域であり、前記方法が、
a)前記第1の組のサブ領域を第2の組のサブ領域に分割するステップと、
b)前記経路を前記第2の組のサブ領域内に伝搬するステップとをさらに含む、請求項1記載の方法。 - 第1の組のパスが前記第1の組のサブ領域間に存在し、第2の組のパスが前記第2の組のサブ領域間に存在し、前記第1の経路が、前記第1の組のパスのサブセットである第3の組のパスに対して形成される、請求項32記載の方法。
- 前記第2の組のサブ領域内への特定の第3の組のパスの伝搬を表す第1の第2の組のパスを識別するステップをさらに含む、請求項33記載の方法。
- 前記特定の第3の組のパスおよび前記第1の第2の組のパスが対角線である、請求項34記載の方法。
- 前記特定の第3の組のパスがマンハッタン・パスであり、前記第1の第2の組のパスが対角線パスである、請求項34記載の方法。
- 前記特定の第3の組のパスが対角線パスである、請求項34記載の方法。
- 前記第1の第2の組のパスと一緒に、前記第2の組のサブ領域内への前記特定の第3の組のパスの伝搬を表す、第2の第2の組のパスを識別するステップをさらに含む、請求項34記載の方法。
- 前記特定の第3の組のパスが対角線であり、前記第1および第2の第2の組のパスが対角線である、請求項38記載の方法。
- 第1の組の領域間縁部が前記第1の組のサブ領域間に存在し、第2の組の領域間縁部が前記第2の組のサブ領域間に存在し、前記第1の経路が、前記第1の組の領域間縁部のサブセットである第3の組の領域間縁部に対して形成される、請求項32記載の方法。
- 前記第2の組のサブ領域内への特定の第3の組の領域間縁部の伝搬を表す第1の第2の組の領域間縁部を識別するステップをさらに含む、請求項40に記載の方法。
- 前記特定の第3の組の領域間縁部および前記第1の第2の組の領域間縁部が対角線である、請求項41記載の方法。
- 前記特定の第3の組の領域間縁部がマンハッタン領域間縁部であり、前記第1の第2の組の領域間縁部が対角線領域間縁部である、請求項41記載の方法。
- 前記特定の第3の組の領域間縁部が対角線領域間縁部であり、前記第1の第2の組の領域間縁部がマンハッタン領域間縁部である、請求項41記載の方法。
- 前記第1の第2の組の領域間縁部と一緒に、前記第2の組のサブ領域内への前記特定の第3の組の領域間縁部の伝搬を表す第2の第2の組の領域間縁部を識別するステップをさらに含む、請求項41記載の方法。
- 前記特定の第3の組の領域間縁部が対角線であり、前記第1および第2の第2の組の領域間縁部が対角線である、請求項45記載の方法。
- a)前記識別したサブ領域を複数のもっと小さいサブ領域に分割するステップと、
b) 前記経路を前記もっと小さいサブ領域内に伝搬するステップとをさらに含む、請求項1記載の方法。 - 前記経路を伝搬するステップが、前記経路が前記もっと小さいサブ領域へ伝搬する少なくとも1つの対角線伝搬パスを識別するステップを含む、請求項47記載の方法。
- 前記伝搬パスが対角線伝搬パスである、請求項48記載の方法。
- 前記伝搬パスが水平伝搬パスまたは垂直伝搬パスである、請求項49記載の方法。
- a)前記識別したサブ領域を複数のもっと小さいサブ領域に分割するステップと、
b)前記対角線縁部が前記もっと小さいサブ領域内に伝搬する伝搬パスを識別するステップとをさらに含む、請求項1記載の方法。 - 前記伝搬パスが対角線パスである、請求項51に記載の方法。
- a)各サブ領域を複数のもっと小さいサブ領域に分割するステップと、
b)前記ネットに対して、前記特定のサブ領域内の前記ネットのピンを含む一組の前記もっと小さいサブ領域を接続している第2の経路を識別するステップとをさらに含み、前記第2の経路が、少なくともその一部が対角線である経路縁部を有する、請求項1記載の方法。 - 前記IC領域が、他のIC領域を含むもっと大きいIC領域の一部である第1のIC領域である、請求項53記載のルーティング方法。
- 前記ネットが、前記もっと大きなIC領域の他のIC領域内に他のピンを含み、もっと高いレベルの経路が、前記ネットのピンを含む前記もっと大きなIC領域のIC領域を接続している、請求項54に記載のルーティング方法。
- 前記一組のピンが、前記第1のIC領域内への前記もっと高いレベルの経路の伝搬に対応する仮想ピンを含む、請求項55記載のルーティング方法。
- ルーティングを実行するための方法であって、
a)集積回路(「IC」)レイアウトの特定の領域を受け取るステップと、
b)前記領域を複数のサブ領域に分割するステップとを含み、複数の対角線および非対角線ルーティング・パスが前記サブ領域間に存在し、前記対角線ルーティング・パスが、第1の組のラインに対して形成され、前記非対角線ルーティング・パスが、第2の組のラインに対して形成される方法。 - 各ルーティング・パスが特定の容量を有し、前記方法が、
a)特定の各対角線ルーティング・パスの容量を計算するステップと、
b)特定の各非対角線ルーティング・パスの容量を計算するステップとをさらに含み、
前記対角線ルーティング・パスの容量が、前記非対角線ルーティング・パスの容量とは異なる、請求項57記載の方法。 - 前記第1のグリッドが複数の対角線縁部を含み、前記第2のグリッドが複数の非対角線縁部を含み、
特定の各対角線ルーティング・パスが特定の対角線縁部と交差し、特定の各非対角線ルーティング・パスが特定の非対角線縁部と交差し、
特定の各対角線ルーティング・パスの容量を計算するステップが、前記パスの対応する対角線縁部のサイズから前記特定の対角線ルーティング・パスの容量を入手するステップを含み、
特定の各非対角線ルーティング・パスの容量を計算するステップが、前記パスtの対応する非対角線縁部のサイズから前記特定の非対角線ルーティング・パスの容量を入手するステップを含む、請求項58記載の方法。 - 前記対角線縁部のサイズが、前記非対角線縁部のサイズとは異なる、請求項59記載の方法。
- 特定の各対角線縁部が、相互に対角線方向に整合している隣接サブ領域の特定のペアの中心を結んでいる、請求項59記載の方法。
- 前記ICレイアウトが、それぞれが特定のピッチの値を有する複数の相互接続ライン層を含み、
特定の各ルーティング・パスが、前記層の中の特定の1つの層上に位置していて、
特定の各対角線ルーティング・パスの容量を計算するステップが、前記特定の対角線ルーティング・パスにより相互に接続している前記対角線縁部のサイズを前記パスの層のピッチの値で割るステップを含み、
特定の各非対角線ルーティング・パスの容量を計算するステップが、前記特定の非対角線ルーティング・パスにより相互に接続している前記非対角線縁部のサイズを前記パスの層のピッチの値で割るステップを含む、請求項59記載の方法。 - 前記サブ領域が4つの辺を有するサブ領域であり、前記ルーティング・パスが、±45度のパスおよびマンハッタン・パスを含み、前記マンハッタン・ルーティング・パスが、第1の直線グリッドを形成する前記第1の組のラインに対して形成され、前記±45度の対角線ルーティング・パスが、前記第1のグリッドに対して45度の角度を有する第2の直線グリッドを形成する前記第2の組のラインに対して形成される、請求項57記載の方法。
- 回路レイアウトのある領域内のネットに対する経路を形成するための方法であって、該方法が、
a)経路の長さを測定するために第1の組のラインを使用するステップと、
b)経路の混雑を測定するために第2の組のラインを使用するステップとを含み、前記第1の組内の前記ラインの中の少なくともあるものが、前記第2の組内に位置しない方法。 - 前記第2の組のラインが、複数の混雑縁部を形成し、前記第2の組のラインを使用するステップが、前記混雑縁部を横切る経路の混雑を測定するステップを含む、請求項64記載の方法。
- 前記経路が、前記混雑縁部と交差する対角線縁部を有し、前記混雑縁部を横切る経路の混雑を測定するステップが、前記混雑縁部を横切る対角線経路縁部の混雑を測定するステップを含む、請求項65記載の方法。
- 前記経路が、さらに、前記混雑縁部と交差する水平縁部または垂直縁部を有し、前記混雑縁部を横切る経路の混雑を測定するステップが、前記混雑縁部を横切る水平経路または垂直経路の混雑を測定するステップを含む、請求項66記載の方法。
- 各ネットが一組のピンを有し、前記方法が、
a)前記領域を第1の組のサブ領域に分割するために第3の組のラインを使用するステップと、
b)各ネットに対して、前記ネットの一組のピンを含む第1の組のサブ領域のグループを通る経路を識別するステップとをさらに含む、請求項64記載の方法。 - 前記第2の組のラインおよび前記第3の組のラインが、同じものである、請求項68記載の方法。
- 各ネットが一組のピンを有し、前記第1の組のラインが第1の組のサブ領域を形成し、前記方法が、
各ネットに対して、前記ネットの一組のピンを含む第1の組のサブ領域のグループを通る経路を識別するステップをさらに含み、各経路が、一組の経路セグメントを有し、各経路セグメントが、前記第1の組のサブ領域内の2つのサブ領域を通る、請求項64記載の方法。 - 前記経路の一組の経路セグメント内の各経路セグメントの長さを合計することにより各経路の長さを測定するステップをさらに含む、請求項70記載の方法。
- 前記第2の組のラインを使用するステップが、前記第2の組のラインを横切る経路の混雑を測定するステップを含む、請求項71記載の方法。
- 前記第2の組のラインが複数の混雑縁部を形成し、前記経路の混雑を測定するステップが、前記混雑縁部を横切る経路の混雑を測定するステップを含む、請求項72記載の方法。
- 経路が完成した場合、前記混雑縁部を横切る前記経路のセグメントに対して各経路を指定するステップを含む、請求項73記載の方法。
- 各ネットに対する前記経路を識別するステップが、
前記ネットのピンを含む第1の組のサブ領域をスタートするステップと、経路が、前記ネットのピンを含むサブ領域のすべてのグループを横切るまで、新しい第1の組のサブ領域内に前記経路を延ばす経路セグメントを連続的に指定するステップとを含む、請求項70記載の方法。 - 経路セグメントの各延長に対して、長さコストを計算するステップと、
第2の組のラインを横切る経路セグメントの各延長に対して、前記第2の組のラインの混雑に基づいて混雑コストを計算するステップとをさらに含む、請求項75記載の方法。 - 第1の経路セグメントを指定するステップが、複数の潜在的な経路セグメントの延長をチェックするステップを含み、
潜在的な各経路セグメントの延長に対して、長さコストを計算し、
前記潜在的な経路セグメントの延長が第2の組のラインと交差する場合には、前記第2の組のラインの混雑に基づいて混雑コストを計算する、請求項75記載の方法。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US32756700P | 2000-12-07 | 2000-12-07 | |
US32574801P | 2001-01-19 | 2001-01-19 | |
US31458001P | 2001-08-23 | 2001-08-23 | |
PCT/US2001/047016 WO2002046975A2 (en) | 2000-12-07 | 2001-12-06 | Routing method and apparatus |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005506588A true JP2005506588A (ja) | 2005-03-03 |
JP2005506588A5 JP2005506588A5 (ja) | 2005-12-22 |
Family
ID=27405732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002548628A Pending JP2005506588A (ja) | 2000-12-07 | 2001-12-06 | ルーティングのための方法および装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6957410B2 (ja) |
EP (1) | EP1415253A2 (ja) |
JP (1) | JP2005506588A (ja) |
CN (1) | CN1520565A (ja) |
AU (1) | AU2002236574A1 (ja) |
TW (1) | TW564359B (ja) |
WO (1) | WO2002046975A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021532605A (ja) * | 2019-05-08 | 2021-11-25 | 深▲セン▼▲職▼▲業▼技▲術▼学院 | 二進コードによるデジタル集積回路の配線方法および端末装置 |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6898773B1 (en) * | 2002-01-22 | 2005-05-24 | Cadence Design Systems, Inc. | Method and apparatus for producing multi-layer topological routes |
US7080336B2 (en) * | 2000-12-06 | 2006-07-18 | Cadence Design Systems, Inc. | Method and apparatus for computing placement costs |
US7024650B2 (en) * | 2000-12-06 | 2006-04-04 | Cadence Design Systems, Inc. | Method and apparatus for considering diagonal wiring in placement |
AU2002233977A1 (en) * | 2000-12-06 | 2002-06-18 | Simplex Solutions, Inc. | Method and apparatus for considering diagonal wiring in placement |
US7003754B2 (en) * | 2000-12-07 | 2006-02-21 | Cadence Design Systems, Inc. | Routing method and apparatus that use of diagonal routes |
US7055120B2 (en) * | 2000-12-06 | 2006-05-30 | Cadence Design Systems, Inc. | Method and apparatus for placing circuit modules |
US6826737B2 (en) | 2000-12-06 | 2004-11-30 | Cadence Design Systems, Inc. | Recursive partitioning placement method and apparatus |
US7073150B2 (en) | 2000-12-07 | 2006-07-04 | Cadence Design Systems, Inc. | Hierarchical routing method and apparatus that use diagonal routes |
US6738960B2 (en) * | 2001-01-19 | 2004-05-18 | Cadence Design Systems, Inc. | Method and apparatus for producing sub-optimal routes for a net by generating fake configurations |
US6915501B2 (en) * | 2001-01-19 | 2005-07-05 | Cadence Design Systems, Inc. | LP method and apparatus for identifying routes |
US7398498B2 (en) | 2001-08-23 | 2008-07-08 | Cadence Design Systems, Inc. | Method and apparatus for storing routes for groups of related net configurations |
US6795958B2 (en) | 2001-08-23 | 2004-09-21 | Cadence Design Systems, Inc. | Method and apparatus for generating routes for groups of related node configurations |
US6745379B2 (en) | 2001-08-23 | 2004-06-01 | Cadence Design Systems, Inc. | Method and apparatus for identifying propagation for routes with diagonal edges |
US6931616B2 (en) * | 2001-08-23 | 2005-08-16 | Cadence Design Systems, Inc. | Routing method and apparatus |
US7058913B1 (en) | 2001-09-06 | 2006-06-06 | Cadence Design Systems, Inc. | Analytical placement method and apparatus |
US7624367B2 (en) | 2002-11-18 | 2009-11-24 | Cadence Design Systems, Inc. | Method and system for routing |
US7047513B2 (en) | 2002-11-18 | 2006-05-16 | Cadence Design Systems, Inc. | Method and apparatus for searching for a three-dimensional global path |
US7480885B2 (en) | 2002-11-18 | 2009-01-20 | Cadence Design Systems, Inc. | Method and apparatus for routing with independent goals on different layers |
US6988257B2 (en) * | 2002-11-18 | 2006-01-17 | Cadence Design Systems, Inc. | Method and apparatus for routing |
US7013445B1 (en) | 2002-12-31 | 2006-03-14 | Cadence Design Systems, Inc. | Post processor for optimizing manhattan integrated circuits placements into non manhattan placements |
US6912704B1 (en) * | 2002-12-31 | 2005-06-28 | Adence Design Systems, Inc. | Method and system for floor planning non Manhattan semiconductor integrated circuits |
US7096445B1 (en) * | 2003-01-14 | 2006-08-22 | Cadence Design Systems, Inc. | Non-orthogonal structures and space tiles for layout, placement, and routing of an integrated circuit |
US7676781B1 (en) * | 2003-01-14 | 2010-03-09 | Cadence Design Systems, Inc. | Method and mechanism for implementing a minimum spanning tree |
JP4245418B2 (ja) * | 2003-06-25 | 2009-03-25 | 富士通マイクロエレクトロニクス株式会社 | 斜め方向配線を有する半導体集積回路装置及びそのレイアウト方法 |
US7243313B1 (en) * | 2003-11-24 | 2007-07-10 | Cadence Design Systems, Inc. | System and method for reducing the size of RC circuits |
US7448012B1 (en) * | 2004-04-21 | 2008-11-04 | Qi-De Qian | Methods and system for improving integrated circuit layout |
US7707537B2 (en) * | 2004-06-04 | 2010-04-27 | Cadence Design Systems, Inc. | Method and apparatus for generating layout regions with local preferred directions |
JP2006227762A (ja) * | 2005-02-15 | 2006-08-31 | Nec Electronics Corp | 半導体集積回路の設計方法、および半導体集積回路の設計装置 |
US8250514B1 (en) * | 2006-07-13 | 2012-08-21 | Cadence Design Systems, Inc. | Localized routing direction |
CN100428253C (zh) * | 2006-12-08 | 2008-10-22 | 清华大学 | 基于多步长迷宫算法的模拟集成电路自动布线方法 |
US8732625B2 (en) | 2007-06-04 | 2014-05-20 | Asml Netherlands B.V. | Methods for performing model-based lithography guided layout design |
JP2010003712A (ja) * | 2007-08-09 | 2010-01-07 | Renesas Technology Corp | 半導体装置、半導体装置の配置配線方法、及びデータ処理システム |
US9779186B2 (en) | 2007-08-28 | 2017-10-03 | Asml Netherlands B.V. | Methods for performing model-based lithography guided layout design |
CN101320707B (zh) * | 2008-05-19 | 2010-06-09 | 深圳市国微电子股份有限公司 | 结构化专用集成电路设置和生产方法 |
TWI399659B (zh) * | 2009-06-25 | 2013-06-21 | Univ Nat Chiao Tung | Designed for Chip Design and Chip Products Designed for Chip Packaging and Board Design |
CN102054068B (zh) * | 2009-10-30 | 2014-06-18 | 新思科技(上海)有限公司 | 芯片设计中的线网分配方法与装置 |
TWI456422B (zh) * | 2009-12-30 | 2014-10-11 | Synopsys Inc | 後繞線佈局之微影熱點之更正方法及系統 |
TWI455047B (zh) * | 2010-04-01 | 2014-10-01 | Hon Hai Prec Ind Co Ltd | 產品輪廓制程能力驗證系統及方法 |
TWI468966B (zh) * | 2012-09-28 | 2015-01-11 | Cte Tech Corp | 電線束的製品工程設計系統及其方法 |
JP6107412B2 (ja) * | 2013-05-22 | 2017-04-05 | 富士通株式会社 | シミュレーション方法、シミュレーション装置及びシミュレーションプログラム |
TWI492082B (zh) * | 2013-09-27 | 2015-07-11 | 英業達股份有限公司 | 佈線方法 |
US9337146B1 (en) * | 2015-01-30 | 2016-05-10 | Qualcomm Incorporated | Three-dimensional integrated circuit stack |
CN106934083B (zh) * | 2015-12-30 | 2020-07-21 | 小米科技有限责任公司 | 电路设计方法和装置 |
US9953234B2 (en) * | 2016-09-16 | 2018-04-24 | Ingersoll-Rand Company | Compressor conduit layout system |
CN109726841B (zh) * | 2017-10-27 | 2022-02-01 | 北京京东乾石科技有限公司 | 基于无人仓的agv路径计算方法及agv行驶路径控制方法 |
CN108846174B (zh) * | 2018-05-29 | 2021-03-02 | 珠海格力电器股份有限公司 | 布线方法、装置、计算机设备和存储介质 |
CN110941940B (zh) * | 2019-12-04 | 2023-06-13 | 杭州广立微电子股份有限公司 | 一种基于碰撞检测的3d绕线方法、存储设备和系统 |
CN111291525B (zh) * | 2020-02-17 | 2022-04-08 | 福州大学 | 考虑总线和非总线线网的层分配方法 |
TWI729920B (zh) * | 2020-08-21 | 2021-06-01 | 伊斯酷軟體科技股份有限公司 | 為一印刷電路板產生一成型路徑之裝置、方法及其電腦程式產品 |
CN112487626B (zh) * | 2020-11-23 | 2024-02-27 | 阳光新能源开发股份有限公司 | 光伏电站布线方法和装置 |
CN112632899B (zh) * | 2020-12-30 | 2022-05-24 | 上海华大九天信息科技有限公司 | 一种均衡电阻的布线方法 |
US11901286B2 (en) * | 2021-01-28 | 2024-02-13 | Taiwan Semiconductor Manufacturing Company, Ltd. | Diagonal via pattern and method |
US11501052B1 (en) * | 2021-05-27 | 2022-11-15 | Taiwan Semiconductor Manufacturing Company, Ltd | Conductor scheme selection and track planning for mixed-diagonal-Manhattan routing |
CN113486624B (zh) * | 2021-07-01 | 2024-01-12 | 研祥智慧物联科技有限公司 | 实现pcb走线自动等间距的方法、装置及电子设备 |
CN115310399B (zh) * | 2022-08-28 | 2024-06-21 | 上海华大九天信息科技有限公司 | 集成电路版图中基于总线拓扑模式进行布线的方法 |
CN116050342B (zh) * | 2022-11-08 | 2024-08-13 | 深圳量旋科技有限公司 | 量子电路的布线方法、布线装置、存储介质和计算机设备 |
Family Cites Families (117)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1001915A (en) * | 1910-03-15 | 1911-08-29 | Stora Kopparbergs Bergslags Ab | Electric furnace. |
JPS59198733A (ja) * | 1983-04-26 | 1984-11-10 | Mitsubishi Electric Corp | 半導体集積回路装置 |
US4593363A (en) * | 1983-08-12 | 1986-06-03 | International Business Machines Corporation | Simultaneous placement and wiring for VLSI chips |
US4615011A (en) * | 1983-12-19 | 1986-09-30 | Ibm | Iterative method for establishing connections and resulting product |
US4777606A (en) * | 1986-06-05 | 1988-10-11 | Northern Telecom Limited | Method for deriving an interconnection route between elements in an interconnection medium |
JPS63225869A (ja) * | 1986-10-09 | 1988-09-20 | Nec Corp | 配線経路探索方式 |
US5097422A (en) * | 1986-10-10 | 1992-03-17 | Cascade Design Automation Corporation | Method and apparatus for designing integrated circuits |
US4782193A (en) | 1987-09-25 | 1988-11-01 | Ibm Corp. | Polygonal wiring for improved package performance |
JPH04501475A (ja) | 1988-11-02 | 1992-03-12 | シーメンス アクチエンゲゼルシヤフト | 保持体上にモジュールを配置するための方法 |
US5224057A (en) * | 1989-02-28 | 1993-06-29 | Kabushiki Kaisha Toshiba | Arrangement method for logic cells in semiconductor IC device |
US5251147A (en) | 1989-06-20 | 1993-10-05 | Digital Equipment Corporation | Minimizing the interconnection cost of electronically linked objects |
JPH03188650A (ja) | 1989-12-18 | 1991-08-16 | Hitachi Ltd | 配線経路処理方法、配線経路処理システム、及び半導体集積回路 |
US5598344A (en) * | 1990-04-06 | 1997-01-28 | Lsi Logic Corporation | Method and system for creating, validating, and scaling structural description of electronic device |
US5634093A (en) * | 1991-01-30 | 1997-05-27 | Kabushiki Kaisha Toshiba | Method and CAD system for designing wiring patterns using predetermined rules |
JP2966972B2 (ja) * | 1991-07-05 | 1999-10-25 | 株式会社日立製作所 | 半導体チップキャリアとそれを実装したモジュール及びそれを組み込んだ電子機器 |
JP2759573B2 (ja) * | 1992-01-23 | 1998-05-28 | 株式会社日立製作所 | 回路基板の配線パターン決定方法 |
US5532934A (en) * | 1992-07-17 | 1996-07-02 | Lsi Logic Corporation | Floorplanning technique using multi-partitioning based on a partition cost factor for non-square shaped partitions |
US5360948A (en) | 1992-08-14 | 1994-11-01 | Ncr Corporation | Via programming for multichip modules |
US5618744A (en) * | 1992-09-22 | 1997-04-08 | Fujitsu Ltd. | Manufacturing method and apparatus of a semiconductor integrated circuit device |
FR2702595B1 (fr) * | 1993-03-11 | 1996-05-24 | Toshiba Kk | Structure de câblage multicouche. |
JP2815281B2 (ja) * | 1993-04-19 | 1998-10-27 | 株式会社ピーエフユー | デジタル回路設計支援システムおよびその方法 |
US5566078A (en) | 1993-05-26 | 1996-10-15 | Lsi Logic Corporation | Integrated circuit cell placement using optimization-driven clustering |
WO1995020197A1 (en) * | 1994-01-25 | 1995-07-27 | Advantage Logic, Inc. | Apparatus and method for partitioning resources for interconnections |
US6155725A (en) | 1994-04-19 | 2000-12-05 | Lsi Logic Corporation | Cell placement representation and transposition for integrated circuit physical design automation system |
US5914887A (en) * | 1994-04-19 | 1999-06-22 | Lsi Logic Corporation | Congestion based cost factor computing apparatus for integrated circuit physical design automation system |
US5495419A (en) * | 1994-04-19 | 1996-02-27 | Lsi Logic Corporation | Integrated circuit physical design automation system utilizing optimization process decomposition and parallel processing |
JP2687879B2 (ja) * | 1994-05-26 | 1997-12-08 | 日本電気株式会社 | 自動配線方法 |
JP3113153B2 (ja) * | 1994-07-26 | 2000-11-27 | 株式会社東芝 | 多層配線構造の半導体装置 |
JPH0851159A (ja) * | 1994-08-05 | 1996-02-20 | Mitsubishi Electric Corp | 半導体集積回路 |
US5587923A (en) | 1994-09-07 | 1996-12-24 | Lsi Logic Corporation | Method for estimating routability and congestion in a cell placement for integrated circuit chip |
JP3410829B2 (ja) * | 1994-09-16 | 2003-05-26 | 株式会社東芝 | Mosゲート型半導体装置 |
US5777360A (en) * | 1994-11-02 | 1998-07-07 | Lsi Logic Corporation | Hexagonal field programmable gate array architecture |
US5742086A (en) | 1994-11-02 | 1998-04-21 | Lsi Logic Corporation | Hexagonal DRAM array |
US5811863A (en) * | 1994-11-02 | 1998-09-22 | Lsi Logic Corporation | Transistors having dynamically adjustable characteristics |
US5973376A (en) | 1994-11-02 | 1999-10-26 | Lsi Logic Corporation | Architecture having diamond shaped or parallelogram shaped cells |
US5578840A (en) | 1994-11-02 | 1996-11-26 | Lis Logic Corporation | Microelectronic integrated circuit structure and method using three directional interconnect routing based on hexagonal geometry |
US6407434B1 (en) * | 1994-11-02 | 2002-06-18 | Lsi Logic Corporation | Hexagonal architecture |
US5889329A (en) * | 1994-11-02 | 1999-03-30 | Lsi Logic Corporation | Tri-directional interconnect architecture for SRAM |
US5822214A (en) | 1994-11-02 | 1998-10-13 | Lsi Logic Corporation | CAD for hexagonal architecture |
US6251758B1 (en) * | 1994-11-14 | 2001-06-26 | Applied Materials, Inc. | Construction of a film on a semiconductor wafer |
JP3351651B2 (ja) * | 1995-04-07 | 2002-12-03 | 富士通株式会社 | 会話型回路設計装置 |
US5650653A (en) * | 1995-05-10 | 1997-07-22 | Lsi Logic Corporation | Microelectronic integrated circuit including triangular CMOS "nand" gate device |
US5981384A (en) * | 1995-08-14 | 1999-11-09 | Micron Technology, Inc. | Method of intermetal dielectric planarization by metal features layout modification |
US5637920A (en) * | 1995-10-04 | 1997-06-10 | Lsi Logic Corporation | High contact density ball grid array package for flip-chips |
US5757656A (en) * | 1995-12-20 | 1998-05-26 | Mentor Graphics | Method for routing breakouts |
US5742066A (en) * | 1996-02-08 | 1998-04-21 | Bright Solutions, Inc. | Light source for use in leak detection in heating, ventilating, and air conditioning systems that utilize environmentally-safe materials |
US6226560B1 (en) * | 1996-03-04 | 2001-05-01 | International Business Machines Corporation | Method and apparatus for optimizing the path of a physical wire |
US5663891A (en) * | 1996-04-03 | 1997-09-02 | Cadence Design Systems, Inc. | Optimization of multiple performance criteria of integrated circuits by expanding a constraint graph with subgraphs derived from multiple PWL convex cost functions |
US5838583A (en) | 1996-04-12 | 1998-11-17 | Cadence Design Systems, Inc. | Optimized placement and routing of datapaths |
US5798936A (en) * | 1996-06-21 | 1998-08-25 | Avant| Corporation | Congestion-driven placement method and computer-implemented integrated-circuit design tool |
US6067409A (en) * | 1996-06-28 | 2000-05-23 | Lsi Logic Corporation | Advanced modular cell placement system |
US5838978A (en) * | 1996-10-09 | 1998-11-17 | Hewlett-Packard Company | System and method of using annotations to optimize dynamically translated code in the presence of signals |
US6035108A (en) | 1996-10-17 | 2000-03-07 | Nec Corporation | Figure layout compaction method and compaction device |
US6150193A (en) | 1996-10-31 | 2000-11-21 | Amkor Technology, Inc. | RF shielded device |
US6209123B1 (en) * | 1996-11-01 | 2001-03-27 | Motorola, Inc. | Methods of placing transistors in a circuit layout and semiconductor device with automatically placed transistors |
US5980093A (en) | 1996-12-04 | 1999-11-09 | Lsi Logic Corporation | Integrated circuit layout routing using multiprocessing |
US5898597A (en) * | 1997-02-11 | 1999-04-27 | Lsi Logic Corporation | Integrated circuit floor plan optimization system |
JP3063828B2 (ja) * | 1997-03-27 | 2000-07-12 | 日本電気株式会社 | 集積回路の自動概略配線方法 |
US6096092A (en) * | 1997-04-07 | 2000-08-01 | Matsushita Electric Industrial Co., Ltd. | Automatic synthesizing method for logic circuits |
US6068662A (en) * | 1997-08-06 | 2000-05-30 | Lsi Logig Corporation | Method and apparatus for congestion removal |
US6070108A (en) * | 1997-08-06 | 2000-05-30 | Lsi Logic Corporation | Method and apparatus for congestion driven placement |
US6123736A (en) * | 1997-08-06 | 2000-09-26 | Lsi Logic Corporation | Method and apparatus for horizontal congestion removal |
US6058254A (en) * | 1997-08-06 | 2000-05-02 | Lsi Logic Corporation | Method and apparatus for vertical congestion removal |
US6330707B1 (en) | 1997-09-29 | 2001-12-11 | Matsushita Electric Industrial Co., Ltd. | Automatic routing method |
JP4128251B2 (ja) * | 1997-10-23 | 2008-07-30 | 富士通株式会社 | 配線密度予測方法およびセル配置装置 |
US6128767A (en) | 1997-10-30 | 2000-10-03 | Chapman; David C. | Polygon representation in an integrated circuit layout |
US6134702A (en) | 1997-12-16 | 2000-10-17 | Lsi Logic Corporation | Physical design automation system and process for designing integrated circuit chips using multiway partitioning with constraints |
US6249902B1 (en) * | 1998-01-09 | 2001-06-19 | Silicon Perspective Corporation | Design hierarchy-based placement |
US6286128B1 (en) * | 1998-02-11 | 2001-09-04 | Monterey Design Systems, Inc. | Method for design optimization using logical and physical information |
JP3120838B2 (ja) | 1998-03-24 | 2000-12-25 | 日本電気株式会社 | 図形レイアウト圧縮システム及び図形レイアウト圧縮方法 |
JP3070679B2 (ja) * | 1998-03-24 | 2000-07-31 | 日本電気株式会社 | 図形レイアウト圧縮システム及び図形レイアウト圧縮方法 |
US6324674B2 (en) | 1998-04-17 | 2001-11-27 | Lsi Logic Corporation | Method and apparatus for parallel simultaneous global and detail routing |
US6175950B1 (en) * | 1998-04-17 | 2001-01-16 | Lsi Logic Corporation | Method and apparatus for hierarchical global routing descend |
US6289495B1 (en) * | 1998-04-17 | 2001-09-11 | Lsi Logic Corporation | Method and apparatus for local optimization of the global routing |
US6230306B1 (en) * | 1998-04-17 | 2001-05-08 | Lsi Logic Corporation | Method and apparatus for minimization of process defects while routing |
US6247167B1 (en) * | 1998-04-17 | 2001-06-12 | Lsi Logic Corporation | Method and apparatus for parallel Steiner tree routing |
US6253363B1 (en) * | 1998-04-17 | 2001-06-26 | Lsi Logic Corporation | Net routing using basis element decomposition |
US6175947B1 (en) * | 1998-04-20 | 2001-01-16 | International Business Machines Corporation | Method of extracting 3-D capacitance and inductance parasitics in sub-micron VLSI chip designs using pattern recognition and parameterization |
JP3564295B2 (ja) | 1998-05-22 | 2004-09-08 | 富士通株式会社 | セル配置装置及び方法並びにセル配置プログラムを記録したコンピュータ読取り可能な記録媒体 |
US6442743B1 (en) * | 1998-06-12 | 2002-08-27 | Monterey Design Systems | Placement method for integrated circuit design using topo-clustering |
US6262487B1 (en) * | 1998-06-23 | 2001-07-17 | Kabushiki Kaisha Toshiba | Semiconductor integrated circuit device, semiconductor integrated circuit wiring method, and cell arranging method |
US6412102B1 (en) * | 1998-07-22 | 2002-06-25 | Lsi Logic Corporation | Wire routing optimization |
US6036108A (en) * | 1998-07-23 | 2000-03-14 | Bobson Hygiene International Inc. | Automatic liquid spraying device |
US6307256B1 (en) | 1998-10-26 | 2001-10-23 | Apack Technologies Inc. | Semiconductor package with a stacked chip on a leadframe |
US6324675B1 (en) | 1998-12-18 | 2001-11-27 | Synopsys, Inc. | Efficient iterative, gridless, cost-based fine router for computer controlled integrated circuit design |
JP4227304B2 (ja) * | 1998-12-22 | 2009-02-18 | 富士通株式会社 | 概略配線方法及び装置並びに概略配線プログラムを格納した記録媒体 |
JP3077757B2 (ja) * | 1999-02-02 | 2000-08-14 | 日本電気株式会社 | レイアウトコンパクション方法及びレイアウトコンパクション装置 |
US6295634B1 (en) * | 1999-04-02 | 2001-09-25 | International Business Machines Corporation | Wiring design apparatus, wiring determination apparatus and methods thereof |
US6327693B1 (en) | 1999-04-08 | 2001-12-04 | Chung-Kuan Cheng | Interconnect delay driven placement and routing of an integrated circuit design |
JP2001024153A (ja) | 1999-07-06 | 2001-01-26 | Mitsubishi Electric Corp | 集積回路装置におけるセルの配置方法 |
US6415422B1 (en) * | 1999-09-17 | 2002-07-02 | International Business Machines Corporation | Method and system for performing capacitance estimations on an integrated circuit design routed by a global routing tool |
US6405358B1 (en) * | 1999-10-08 | 2002-06-11 | Agilent Technologies, Inc. | Method for estimating and displaying wiring congestion |
JP2001127246A (ja) | 1999-10-29 | 2001-05-11 | Fujitsu Ltd | 半導体装置 |
JP3822009B2 (ja) * | 1999-11-17 | 2006-09-13 | 株式会社東芝 | 自動設計方法、露光用マスクセット、半導体集積回路装置、半導体集積回路装置の製造方法、および自動設計プログラムを記録した記録媒体 |
US6280179B1 (en) * | 1999-11-29 | 2001-08-28 | Honeywell International Inc. | Over temperature limiting scheme by reducing gas pressure |
US6401234B1 (en) * | 1999-12-17 | 2002-06-04 | International Business Machines Corporation | Method and system for re-routing interconnects within an integrated circuit design having blockages and bays |
US6446245B1 (en) * | 2000-01-05 | 2002-09-03 | Sun Microsystems, Inc. | Method and apparatus for performing power routing in ASIC design |
JP3548070B2 (ja) | 2000-01-26 | 2004-07-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 多端子ネットを自動的に発生する方法及び装置並びに多端子ネット自動発生方法を実行するためのプログラムを記憶したプログラム記憶媒体 |
US6519751B2 (en) * | 2000-03-31 | 2003-02-11 | Intel Corporation | Method and apparatus for accurate crosspoint allocation in VLSI area routing |
US6473891B1 (en) | 2000-05-03 | 2002-10-29 | Lsi Logic Corporation | Wire routing to control skew |
US6543043B1 (en) * | 2000-06-01 | 2003-04-01 | Cadence Design Systems, Inc. | Inter-region constraint-based router for use in electronic design automation |
US6567967B2 (en) * | 2000-09-06 | 2003-05-20 | Monterey Design Systems, Inc. | Method for designing large standard-cell base integrated circuits |
US6826737B2 (en) * | 2000-12-06 | 2004-11-30 | Cadence Design Systems, Inc. | Recursive partitioning placement method and apparatus |
US7003754B2 (en) * | 2000-12-07 | 2006-02-21 | Cadence Design Systems, Inc. | Routing method and apparatus that use of diagonal routes |
US7024650B2 (en) * | 2000-12-06 | 2006-04-04 | Cadence Design Systems, Inc. | Method and apparatus for considering diagonal wiring in placement |
US7055120B2 (en) * | 2000-12-06 | 2006-05-30 | Cadence Design Systems, Inc. | Method and apparatus for placing circuit modules |
US6516455B1 (en) * | 2000-12-06 | 2003-02-04 | Cadence Design Systems, Inc. | Partitioning placement method using diagonal cutlines |
US7073150B2 (en) * | 2000-12-07 | 2006-07-04 | Cadence Design Systems, Inc. | Hierarchical routing method and apparatus that use diagonal routes |
US6738960B2 (en) * | 2001-01-19 | 2004-05-18 | Cadence Design Systems, Inc. | Method and apparatus for producing sub-optimal routes for a net by generating fake configurations |
TW509879B (en) | 2001-01-29 | 2002-11-11 | Silicon Integrated Sys Corp | Method and apparatus for minimizing the idle time of a graphics engine by using rendering control before flipping frame buffer |
US6480991B1 (en) | 2001-04-11 | 2002-11-12 | International Business Machines Corporation | Timing-driven global placement based on geometry-aware timing budgets |
JP2002312414A (ja) * | 2001-04-13 | 2002-10-25 | Toshiba Corp | 半導体集積回路装置のレイアウト設計システム、配線設計方法、配線設計プログラム及び半導体集積回路装置の製造方法 |
US7398498B2 (en) * | 2001-08-23 | 2008-07-08 | Cadence Design Systems, Inc. | Method and apparatus for storing routes for groups of related net configurations |
US7143382B2 (en) * | 2001-08-23 | 2006-11-28 | Cadence Design Systems, Inc. | Method and apparatus for storing routes |
US6795958B2 (en) * | 2001-08-23 | 2004-09-21 | Cadence Design Systems, Inc. | Method and apparatus for generating routes for groups of related node configurations |
US6745379B2 (en) * | 2001-08-23 | 2004-06-01 | Cadence Design Systems, Inc. | Method and apparatus for identifying propagation for routes with diagonal edges |
US6618849B2 (en) * | 2001-08-23 | 2003-09-09 | Cadence Design Systems, Inc. | Method and apparatus for identifying routes for nets |
-
2001
- 2001-10-19 US US10/013,816 patent/US6957410B2/en not_active Expired - Fee Related
- 2001-12-06 CN CNA01822234XA patent/CN1520565A/zh active Pending
- 2001-12-06 WO PCT/US2001/047016 patent/WO2002046975A2/en active Application Filing
- 2001-12-06 EP EP01986109A patent/EP1415253A2/en not_active Withdrawn
- 2001-12-06 AU AU2002236574A patent/AU2002236574A1/en not_active Abandoned
- 2001-12-06 JP JP2002548628A patent/JP2005506588A/ja active Pending
- 2001-12-07 TW TW090130440A patent/TW564359B/zh not_active IP Right Cessation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021532605A (ja) * | 2019-05-08 | 2021-11-25 | 深▲セン▼▲職▼▲業▼技▲術▼学院 | 二進コードによるデジタル集積回路の配線方法および端末装置 |
JP7122785B2 (ja) | 2019-05-08 | 2022-08-22 | 深▲セン▼▲職▼▲業▼技▲術▼学院 | 二進コードによるデジタル集積回路の配線方法および端末装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1415253A2 (en) | 2004-05-06 |
US20020147958A1 (en) | 2002-10-10 |
WO2002046975A2 (en) | 2002-06-13 |
WO2002046975A9 (en) | 2004-05-27 |
CN1520565A (zh) | 2004-08-11 |
US6957410B2 (en) | 2005-10-18 |
WO2002046975A3 (en) | 2004-02-19 |
TW564359B (en) | 2003-12-01 |
AU2002236574A1 (en) | 2002-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005506588A (ja) | ルーティングのための方法および装置 | |
JP2005506588A5 (ja) | ||
US7013450B2 (en) | Method and apparatus for routing | |
US7155697B2 (en) | Routing method and apparatus | |
US6687893B2 (en) | Method and apparatus for pre-computing routes for multiple wiring models | |
US6618849B2 (en) | Method and apparatus for identifying routes for nets | |
US6931616B2 (en) | Routing method and apparatus | |
US7398498B2 (en) | Method and apparatus for storing routes for groups of related net configurations | |
US7073150B2 (en) | Hierarchical routing method and apparatus that use diagonal routes | |
US7003754B2 (en) | Routing method and apparatus that use of diagonal routes | |
US7143382B2 (en) | Method and apparatus for storing routes | |
US6795958B2 (en) | Method and apparatus for generating routes for groups of related node configurations | |
US20090077522A1 (en) | Method and apparatus for routing with independent goals on different layers | |
US7171635B2 (en) | Method and apparatus for routing | |
US7003752B2 (en) | Method and apparatus for routing | |
US7047513B2 (en) | Method and apparatus for searching for a three-dimensional global path | |
US6988257B2 (en) | Method and apparatus for routing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041130 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041130 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070822 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20071118 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20071127 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20071219 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20071227 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080120 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080128 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080222 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080313 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080416 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080814 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20081206 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081211 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090119 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090220 |
|
A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20090327 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100125 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100129 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100222 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100225 |