(57)【特許請求の範囲】
【請求項１】
入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、
前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するリピータ・セルの配置方法において、
前記リピータ・セルは、前記回路モジュールの内部を除く前記回路パス上に挿入され、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入することを特徴とするリピータ・セルの配置方法。
【請求項２】
前記回路パス上に、前記リピータ・セルを挿入可能な少なくとも一つの回路ネットが存在するか否かを判定する第１ステップと、
前記回路ネットが存在すると判定されると、各回路ネットごとに前記回路パラメータを計算する第２ステップと、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、計算された回路パラメータの中から、前記基準しきい値よりも大きい前記回路パラメータを選択し、選択した回路パラメータに対応する回路ネット上に前記リピータ・セルを挿入する第３ステップと、を備えることを特徴とする請求項１に記載のリピータ・セルの配置方法。
【請求項３】
前記入力端子から前記出力端子までの回路パス上に、前記リピータ・セルの配置を禁止する禁止領域を設定する第４ステップを備え、
前記第３ステップは、前記禁止領域以外の回路パスから、前記基準しきい値よりも大きい前記回路パラメータを有する回路ネットを選択し、選択された回路ネットに前記リピータ・セルを挿入することを特徴とする請求項２に記載のリピータ・セルの配置方法。
【請求項４】
前記第４ステップは、回路パス上から選択されたノードが、そのノードの下流に配置されるすべての回路モジュールについて、各回路モジュール内のすべてのノードを駆動する場合か、あるいは前記選択されたノードが各回路モジュール内のいずれのノードも駆動しない場合のいずれか以外は、前記選択されたノードと前記出力端子との間に前記禁止領域を設定することを特徴とする請求項３に記載のリピータ・セルの配置方法。
【請求項５】
各回路ネットごとにタイミング制約を設定する第５ステップと、
前記第３ステップにより前記リピータ・セルが挿入されると、前記リピータ・セル自身の遅延を考慮に入れて、前記リピータ・セルが挿入された回路ネットのタイミング制約を厳しくする第６ステップと、を備え、
前記第３ステップは、各回路ネットのタイミング制約を遵守しつつ前記リピータ・セルの挿入位置を決定することを特徴とする請求項２〜４のいずれかに記載のリピータ・セルの配置方法。
【請求項６】
前記第３ステップは、前記リピータ・セルを挿入する際には、駆動能力の異なる複数種類の前記リピータ・セルの中からいずれかを選択することを特徴とする請求項２〜５のいずれかに記載のリピータ・セルの配置方法。
【請求項７】
前記第３ステップで前記リピータ・セルを挿入した結果をバック・アノテートして、ネットリストを生成する第７ステップを備えることを特徴とする請求項２〜６のいずれかに記載のリピータ・セルの配置方法。
【請求項８】
前記第３ステップは、複数の回路ネットそれぞれの信号遅延時間に差がある場合には、最もクリティカルな回路ネット以外の回路ネット上に前記リピータ・セルを挿入することを特徴とする請求項２〜７に記載のリピータ・セルの配置方法。
【請求項９】
入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、
前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するリピータ・セルの配置装置において、
前記回路パス上に、前記リピータ・セルを挿入可能な少なくとも一つの回路ネットが存在するか否かを判定する判定手段と、
前記回路ネットが存在すると判定されると、各回路ネットごとに前記回路パラメータを計算する回路パラメータ計算手段と、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入するリピータ挿入手段と、を備えることを特徴とするリピータ・セルの配置装置。
【請求項１０】
入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、
前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するプログラムが記録された記録媒体において、
前記回路パス上に、前記リピータ・セルを挿入可能な少なくとも一つの回路ネットが存在するか否かを判定する第１ステップと、
前記回路ネットが存在すると判定されると、各回路ネットごとに前記回路パラメータを計算する第２ステップと、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入する第３ステップと、を備えるプログラムが記録されたコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、配線遅延を抑制するために、チップ内部の電気配線（回路パス）にリピータ・セルを挿入する方法に関する。
【０００２】
【従来の技術】
VLSI用の高速回路に挿入されるリピータ・セルの個数は、VLSIの動作周波数に大きく影響する。500MHz以上の速度で動作するマイクロプロセッサは、200MHz以下の速度で動作するマイクロプロセッサよりもはるかに多くのリピータ・セルを必要とする。
【０００３】
大規模かつ高性能のVLSIを設計する上で、チップ内の金属配線部分の信号伝搬、すなわち配線遅延がＲＣ遅延の主要因になる。一般に、配線遅延は、配線長の二乗に比例して増加する。配線遅延は、インバータやバッファ（ノン・インバータ）のようなリピータ・セルを挿入することにより減らすことができる。
【０００４】
従来は、回路内のトランジスタの各ゲート入力信号のトランジション・タイムが等しくなるように、リピータ・セルの配置を決定していた。最大許容トランジション・タイムは、セル間の配線遅延(interconnect Elmore Delay)と相関づけられて決定される。このセル間の配線遅延は、Julian Culetu等の「A Practical Repeater Insertion Method in High-Speed VLSI Circuits」(Proc. IEEE Design Automation Conference, pp.392-395, 1998)に記載されている。
【０００５】
セル間の配線遅延は、ＲＣツリーの遅延を近似的に表したものである。ＲＣツリー上の任意のノードｉにおけるＲＣ遅延の第１近似は、（１）式に示すエルモア定数Ｔiにより表される。
【０００６】
【数１】
0003662149.tif 000002
（１）式において、Ｒkiは入力端子とノードｉとの間の経路の抵抗値である。このＲkiは、入力端子とノードｋとの間の経路の抵抗値と同じである。また、Ｃkは、ノードｋにおける容量である。
【０００７】
ノードｉの信号電圧Ｖi（ｔ）は（２）式で表される。
【０００８】
【数２】
0003662149.tif 000003
（２）式において、Ｔiはエルモア遅延定数である。ノードｉの電圧ＶiがＶxになる時間Ｔxは、（３）式で表される。
【０００９】
【数３】
0003662149.tif 000004
従来は、（１）〜（３）式に基づいて、公知のリピータ挿入アルゴリズムによりリピータセルの挿入位置を決定していた。公知のリピータ挿入アルゴリズムでは、個々のノードでの分散化された容量を計算した後、ネット内の各負荷へのエルモア遅延を計算する。リピータ・セルは、エルモア遅延が最大となる負荷容量を有する経路に挿入される。リピータ・セルの挿入位置を検索する手法は、ボトムアップ検索と呼ばれる。
【００１０】
エルモア遅延は、ＲＣネットをセグメント単位で分析しつつ、リピータ・セルをセグメントのドライバとして考えながら計算される。計算を行った結果、セグメントの遅延時間が予め定めた制限時間を超えると、そのセグメント内にリピータ・セルが挿入されて、リピータ・セルの前後に新しいサブネットが生成される。
【００１１】
また、回路に分岐がある場合には、分岐ノードを、リピータ・セルの出力ノードに移動させる。分岐ノードの移動は、セグメントの最大遅延時間が制限時間を超えなくなるまで続けられる。以上の処理が、エルモア遅延の大きい順に繰り返し行われる。
【００１２】
【発明が解決しようとする課題】
リピータ・セルの挿入位置を予測する他の従来技術として、John Lillis等の「"Timing Optimization for Multi-source Nets:Characterization and Optimal Repeater Insertion", proc. 34th DAC, 1997」に記載されている。
【００１３】
この論文に記載された技術は、隣接したノード間の容量を所定の制限値以下にするのには不適当であった。さらに興味深いことに、この論文に記載された技術は、枝分かれ経路が二以上ある場合に、満足な結果が得られない。
【００１４】
さらに、従来は、リピータ・セルの挿入結果を、回路合成ツールやレイアウト・ソフトウェアにバック・アノテートすることができなかった。このため、リピータ・セルの挿入後は、入力端子、出力端子およびbiput端子などを新たに追加して回路モジュールを定義し直さなければならなかった。
【００１５】
以下、リピータ・セル挿入後にバック・アノテーションを行う場合の従来の問題点を詳述する。各回路モジュールは、特定のソフトウェア専用のネットリストで表される。
【００１６】
リピータ・セル挿入時にリピータ・セルを挿入するための理想的な位置がモジュールの内部に設けられることがある。このような位置にリピータ・セルを挿入すると、そのモジュール内に新たな入出力パラメータが必要となる。ところが、新たな入出力パラメータは、ネットリストで正しく表現できないため、リピータ・セルを挿入した回路については、回路モジュールを新たに生成し直さなければならなくなる。
【００１７】
リピータ・セルを挿入する他の手法として、ハードマクロ・ブロックのみからなる回路に挿入する手法が知られている。しかしながら、この手法は、スタンダードセルには使用できない。その理由は、モジュールや領域を考慮せずにモジュール内部にリピータ・セルが挿入された場合、リピータ・セル挿入後のモジュールを定義するためには新規の入出力ピンが必要になるためであり、リピータ・セル挿入後の回路データを回路合成ツールやレイアウト・ソフトウェアのバック・アノテーションは許容できない。
【００１８】
また、従来のリピータ挿入手法は、サイズの異なる２種類以上のリピータ・セルをサポートしておらず、負荷の容量の大きさによっては、著しく信号遅延が生じるおそれがあった。
【００１９】
さらに、リピータ・セルの挿入後に、バック・アノテーションを正しく行えるようにするのが望ましい。
【００２０】
さらにまた、多大な配線遅延や論理遅延を起こすことなく大きな負荷を駆動できるように、サイズの異なる複数種類のリピータ・セルを設けるのが望ましい。また、信号遅延を減らしてタイミング解析を不要とする、タイミング駆動型のリピータ技術が必要である。
【００２１】
本発明は、このような点に鑑みてなされたものであり、その目的は、回路パス上の任意の位置において、隣接する２つのノード間の容量が所定値を越えないように、インバータ等のリピータ・セルを挿入するリピータ・セルの挿入方法を提供することにある。
【００２２】
また、本発明の他の目的は、回路モジュールを定義するために付加的な入出力ピンを必要とせずに、リピータ・セルの挿入結果を合成ツールやレイアウト・ソフトウェアで利用できるようにすることである。
【００２３】
さらに、本発明の他の目的は、サイズの異なる複数種類のリピータ・セルを用いて、リピータの挿入を行うことである。
【００２４】
また、本発明の他の目的は、タイミング的に最もクリティカルな分岐経路の信号遅延を低減し、信号の伝搬速度を高速化しつつタイミング解析を不要とすることである。
【００２５】
【課題を解決するための手段】
上述した課題を解決するために、本発明は、入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するリピータ・セルの配置方法において、前記リピータ・セルは、前記回路モジュールの内部を除く前記回路パス上に挿入され、前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入する。
【００２６】
請求項１の発明では、リピータ・セルを回路モジュールの外部に挿入するため、リピータ・セルを挿入しても、回路モジュールの入出力パラメータが変化しない。
【００２７】
請求項２の発明では、回路パラメータ（例えば、負荷容量）が基準しきい値よりも大きい回路ネットにリピータ・セルを挿入するため、配線遅延による信号遅延を低減できる。
【００２９】
本発明では、リピータ・セルの挿入により入出力パラメータが変化するような場所や、トライステート・バッファと接続しているため、信号の向きが固定していない場合など、リピータ・セルを挿入できない場所を予め禁止領域として設定しておくため、効率よく、かつ誤りなくリピータ・セルを挿入できる。
【００３０】
本発明では、回路モジュールの入出力パラメータが変化しない場合に限り、リピータ・セルの挿入を許可するため、バック・アノテーションが可能になる。
【００３１】
本発明では、リピータ・セル自身の遅延を考慮に入れてリピータ・セルを挿入するため、タイミング制約を遵守することができる。
【００３２】
本発明では、駆動能力の異なる複数種類のリピータ・セルを使用できるようにしたため、負荷容量に応じた最適なリピータ・セルを選択することができる。
【００３３】
本発明では、リピータ・セルを挿入した結果をバック・アノテートしてネットリストを生成するため、回路のレイアウト設計が容易になる。
【００３４】
本発明では、最もクリティカルな回路ネットにはリピータ・セルを挿入しないようにしたため、各回路ネットのタイミング制約を遵守することができる。
【００３５】
また、本発明は、入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、
前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するリピータ・セルの配置装置において、
前記回路パス上に、前記リピータ・セルを挿入可能な少なくとも一つの回路ネットが存在するか否かを判定する判定手段と、
前記回路ネットが存在すると判定されると、各回路ネットごとに前記回路パラメータを計算する回路パラメータ計算手段と、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入する第３ステップと、を備える。
【００３６】
また、本発明は、入力端子および出力端子間に少なくとも一つの回路モジュールが接続されており、
前記入力端子から前記出力端子までの回路パス上にリピータ・セルを挿入するプログラムが記録された記録媒体において、
前記回路パス上に、前記リピータ・セルを挿入可能な少なくとも一つの回路ネットが存在するか否かを判定する第１ステップと、
前記回路ネットが存在すると判定されると、各回路ネットごとに前記回路パラメータを計算する第２ステップと、
前記出力端子に近い側から前記入力端子に向かって、前記リピータ・セルの挿入位置を検索し、前記回路パスを構成するすべての回路ネットの回路パラメータが所定の基準しきい値以下になるように前記リピータ・セルを挿入する第３ステップと、を備える。
【００３７】
【発明の実施の形態】
以下、本発明に係るリピータ・セルの挿入方法について、図面を参照しながら具体的に説明する。以下では、負荷の単位として「ＬＵ」を用いる。この「ＬＵ」の一単位は、例えば、0.01〜0.05pFである。H-bufferと呼ばれるリピータ・セルは、最大で100LUの負荷を駆動する通常のリピータ・セルであり、４ＬＵのゲート容量を有する。H-bufferは、例えば簡易的なインバータ・ゲートで構成される。
【００３８】
一方、U-bufferと呼ばれるリピータ・セルは、100LUを越える負荷の駆動に用いられる大きなリピータ・セルである。U-bufferは、例えば大きなインバータ・ゲートで構成される。
【００３９】
H-bufferやU-bufferは、バッファとして図示されるが、各バッファの特性等は上述したものに限定されない。本発明は、あらゆる種類のリピータ・セルを対象とする。
【００４０】
また、本実施形態では、回路内の各ネットが177LUのしきい値容量を有するものと仮定する。177LU以上の容量を有するネットにはリピータ・セルが挿入される。各リピータ・セルは、最大で100LUの容量を駆動できるものとする。したがって、隣接する２つのリピータ・セル間の容量は100LUを越えてはいけない。
【００４１】
本実施形態のリピータ・セル挿入方法を説明する前に、従来のリピータ・セル挿入について説明する。図１は従来のリピータ・セルの挿入手法を説明する図である。図１のドライバ１１は、170LU＋4LU＝174LUの容量を駆動する。この容量はしきい値容量177LUよりも小さいため、ドライバ１１の出力端子にはリピータ・セルは挿入されない。
【００４２】
一方、図２（ａ）、図２（ｂ）、図２（ｃ）はドライバ１１の負荷容量が224LU(=220LU+4LU)の例を示す図である。この場合の負荷容量もしきい値容量を超えるため、出力端子のノード２２からドライバ１１に向かって、リピータ・セルの挿入位置の検索が行われる。このような検索はボトムアップ検索と呼ばれる。
【００４３】
この結果、ドライバ１１とノード２２との間に、一個目のリピータ・セル１０１を挿入すべき位置１０２が見つかる（図２（ｂ））。この位置１０２にリピータ・セル１０１を挿入すると、リピータ・セル１０１とノード２２との間の容量は100LU(=96LU+4LU)となる。
【００４４】
この状態では、ドライバ１１とリピータ・セル１０１との間の容量は、100LUより大きい128LU(=124LU+4LU)である。このため、二度目のボトムアップ検索が行われ、二個目のリピータ・セル１０３を接続すべき位置１０３が見つかる（図２（ｃ））。
【００４５】
一方、図３（ａ）、図３（ｂ）、図３（ｃ）はドライバ１１が60LUの負荷６６を駆動する例を示しており、ドライバ１１と負荷６６との間の容量は150LUである。図３の場合、図２と同様に、ボトムアップ検索が行われ、一個目のリピータ・セル１０１を挿入すべき位置１０４が見つかる（図３（ｂ））。この位置にリピータ・セル１０１を挿入すると、ノード６６とノード１０４との間の容量は100LU(=40LU+60LU)になる。
【００４６】
また、ドライバ１１とリピータ・セル１０１との間の容量は、100LUより大きい114LU(=110LU+4LU)なので、二度目のボトムアップ検索が行われ、二個目のリピータ・セル１０１を挿入すべき位置１０５が見つかる（図３（ｃ））。この位置にリピータ・セルを挿入することにより、ノード１０４とノード１０５との間の容量は100LU(=96LU+4LU)になる。
【００４７】
図４（ａ）、図４（ｂ）、図４（ｃ）はドライバ１１が非常に大きな負荷６６を駆動する例を示す図である。図４の場合、負荷６６の接続位置に一個目のリピータ・セル１０１が接続される（図４（ｂ））。このリピータ・セルには、非常に大きな負荷６６を駆動可能なH-bufferが用いられる。
【００４８】
ところが、このリピータ・セルだけでは、ドライバ１１とリピータ・セル１０１との間の容量が100LUを越えてしまう。このため、ボトムアップ検索が行われ、二個目のリピータ・セル１０１を挿入すべき位置３０１が見つかる（図４（ｃ））。この位置にリピータ・セル１０１を挿入することにより、ノード３０１とノード３００との間の容量は100LU(=96LU+4LU)になる。
【００４９】
また、二個目のリピータ・セル１０１とドライバ１１との間の容量は100LU以下の58LU(=54LU+4LU)であるため、以後のボトムアップ検索は行われない。
【００５０】
図４では、120LUの負荷をH-Bufferであるリピータ・セル１０１で駆動する例を示しているが、100LUを越えるような非常に大きな負荷を駆動すると、信号遅延が大きくなるという問題がある。
【００５１】
また、従来のリピータ・セル挿入手法は、複数の分岐ネットを有する回路に対しては、適切な位置にリピータ・セルを挿入できないという問題があった。
【００５２】
図５は従来の問題点を解決することを目的とした本発明の第１の実施形態の全体構成を示すブロック図である。図５のリピータ・セル挿入装置は、リピータ・セルの最適な挿入位置を決定するものである。
【００５３】
図５のリピータ・セル挿入装置は、ソフトウェア・プログラムによりリピータ・セルの挿入位置を計算する。その際、例えば、Avant! Corporationの配置配線ツールであるAquariusXO（ＡＸＯ）２０が使用される。このＡＸＯ２０は、UNIX（登録商標）やUNIXと互換性のあるオペレーティング・システムの下で動作する。
【００５４】
ＡＸＯ２０は、スタンダード・セルとゲートアレイの混載チップの設計に用いられる、セルベースの配置配線ツールであり、統合環境の下で、セルベースの複雑なＬＳＩの設計を行う。
【００５５】
ＡＸＯ２０は、Verilog-HDLのネットリスト９と、リピータ・セルの挿入禁止位置を示すモジュール／領域ファイル１２と、DSPF(Detailed Standard Parasitic Format)ファイル１３と、出力ピン容量ファイル１４と、矩形レイアウト領域ファイル１５とを生成する。なお、DSPFファイル１３は、対象回路内の全ネットの容量値と抵抗値とを記述したファイルである。
【００５６】
図５のリピータ位置演算器１０は、ＡＸＯ２０が生成したファイルのうち、Verilog-HDLのネットリスト以外のファイルと、３種類のユーザ定義ファイルと、内部容量値およびしきい値容量値を含むパラメータ・ファイル１６と、リピータ挿入禁止ネット(Don't Touch Net)リストファイル１７と、枝分かれ経路のスラック（タイミング制約と実際の信号遅延の差）ファイル１８とに基づいて、リピータ・セルの挿入位置を決定するための演算を行う。そして、Verilog-HDLのネットリスト変換ファイル１０と、ＡＸＯリピータ配置ファイル２１と、リピータ・ファイル付きのDSPFとを生成する。
【００５７】
ＡＸＯ２０は、リピータの挿入禁止物理領域情報ファイル２３と、仮配置された他のセル情報ファイル２４とを生成する。
【００５８】
リピータ・リロケータ３０は、ＡＸＯ２０が生成したリピータの挿入禁止物理領域情報ファイル２３および仮配置された他のセル情報ファイル２４と、Verilog-HDLのネットリスト変換ファイル１９と、ＡＸＯリピータ・セル変換ファイル２１と、矩形レイアウト領域ファイル１５とに基づいて、リピータ・セル１０１の物理的な重複をなくし、セル・グリッドに沿ってリピータ・セル１０１を再配置する。
【００５９】
また、デザイン・コンパイラ用リピータセル変更禁止コマンド・ファイル生成器５０は、ＡＸＯリピータ配置ファイル２１を用いてデザイン・コンパイラ用リピータセル変更禁止コマンド・ファイル２７を生成し、このファイルはデザイン・コンパイラ６０に入力される。
【００６０】
図６はリピータ・リロケータ３０の処理動作を示すフローチャートである。まず、リピータ・セル１０１の挿入が禁止される物理領域情報ファイル２３と、仮配置された他のセル情報ファイル２４と、矩形レイアウト領域ファイル１５とを読み込む（ステップＳ１）。
【００６１】
リピータ・リロケータ３０は、リピータ・セル１０１が変換ファイル２１内に存在するか否かを判定する（ステップＳ２）。変換ファイル内に存在しなければ図２の処理を終了し、変換ファイル内に存在すれば、リピータ・セル一つ分のデータをＡＸＯリピータ配置ファイル２１から読み込む（ステップＳ３）。
【００６２】
次に、リピータ・セル位置を、他のブロック、境界レイアウト領域、および他のリピータ・セルと比較し、リピータ・セル位置が交差するか否かを判断する（ステップＳ４）。
【００６３】
リピータ・セル位置が交差する場合には、交差しない位置にリピータ・セル１０１を移動させる（ステップＳ５）。この処理は置換処理と呼ばれ、変換ファイル２１内にリピータ・セル１０１が存在しなくなるまで続けられる。この置換処理の結果を示す情報は、更新されたＡＸＯリピータ配置ファイル２５に格納される。
【００６４】
Verilog-HDLネットリスト決定部４０は、元のVerilog-HDLネットリスト９とリピータ位置演算器１０で生成されたVerilog-HDL変換ファイル１９とを読み出し、リピータ付きVerilog-HDLネットリスト２６を生成する。
【００６５】
リピータ付きVerilog-HDLネットリスト２６と更新されたＡＸＯリピータ配置ファイル２５とは、ＡＸＯ２０に読み込まれて適切なソフトウェア・レイアウトが生成される。
【００６６】
さらに、ＡＸＯリピータ配置ファイル２１は、デザイン・コンパイラ用リピータセル変更禁止コマンドファイル生成器(Design Compiler Set_Don't_Touch Command File Generator)５０により読み出され、禁止コマンドファイル(Set_Don't_Touch Command File)２７はデザイン・コンパイラ６０により利用される。この禁止コマンドファイル(Set_Don't_Touch Command File)２７は、例えば、シノプシス社のデザイン・コンパイラ６０に入力される。デザイン・コンパイラ６０は、以後、リピータ・セル１０１の種類や挿入位置を変更しない。
【００６７】
図５に示す構成のうち新規な構成は、図７の左半分に表示され、従来と同じ構成は、図７の右半分に表示されている。
【００６８】
次に、リピータ位置演算器１０の動作を説明する。
【００６９】
図８はリピータ位置演算器１０の処理動作を示すフローチャートである。まず、リピータ位置演算器１０は、DSPFファイル１３を除くすべての入力ファイル、すなわち、パラメータ・ファイル１６、禁止ネットリスト・ファイル１７、各枝分かれの時間差情報ファイル１８、リピータ・セルの禁止モジュール／領域ファイル１２、出力ピン容量ファイル１４、および矩形レイアウト領域ファイル１５を読み出す（ステップＳ１１）。
【００７０】
次に、DSPFファイル１３内にネットが存在するか否かを判定する（ステップＳ１２）。ネットが存在しない場合には、リピータ・セル１０１を挿入する必要がないため、図８の処理を終了する。
【００７１】
一方、ネットが存在する場合には、そのうちの一つのネットをDSPFファイル１３から読み出す（ステップＳ１３）。次に、リピータ・セル１０１を挿入する必要があるか否かを判定する（ステップＳ１４）。
【００７２】
図９は図８のステップＳ１４の詳細内容を示すフローチャートである。まず、禁止ネット(Don't Touch Net)か否かを判定する（ステップＳ３１）。禁止ネットであれば、リピータ・セル１０１は挿入できないため、他のネットに関する情報をDSPFファイル１３から読み出す（図８のステップＳ１５）。
【００７３】
ステップＳ３１で禁止ネットでないと判定されると、トライステート・ネットか否かを判定する（ステップＳ３２）。トライステート・ネットであれば、リピータ・セル１０１は挿入する必要がないため、他のネットに関する情報をDSPFファイル１３から読み出す（図８のステップＳ１５）。
【００７４】
一方、ステップＳ３２でトライステート・ネットでないと判定されると、負荷がしきい値容量を越えるか否かを判定する（ステップＳ３３）。しきい値容量を越えなければ、リピータ・セル１０１は必要ないため、他のネットに関する情報をDSPFファイル１３から読み出す（図８のステップＳ１５）。
【００７５】
一方、ステップＳ３３で負荷がしきい値容量を越えたと判定されると、後述する有向グラフの作成処理（Build Directed Graph operation）を行う（図８のステップＳ１６）。グラフの枝の向きは信号の流れる向きと一致する。
【００７６】
図１０は図８のステップＳ１６の詳細内容を示すフローチャートである。まず、検索の基点となるルート・ドライバのノード１１を決定する（ステップＳ４１）。次に、ドライバ１１から負荷６６まで信号の流れる向きに沿って下位ノードの検索を行って、有向グラフを作成する（ステップＳ４２）。
【００７７】
図１１は図１０のステップＳ４２における下位ノード検索処理の詳細内容を示すフローチャートである。まず、下位のノードが存在するか否かを判定する（ステップＳ５１）。下位のノードが存在しなければ図１１の処理を終了し、下位のノードが存在すれば、下位のノードを決定する（ステップＳ５２）。次に、図１０のステップＳ４２の下位ノード検索処理を再帰的に実行する（ステップＳ５３）。この処理サイクルは、ステップＳ５１の判定処理が否定されるまで、すなわち、下位ノードが存在しなくなるまで繰り返し行われる。
【００７８】
図１２および図１３は、上述した図１０のステップＳ４２における下位ノード検索処理をより詳細に説明する図である。このうち、図１２（ａ）は２つの枝分かれ経路を示す図、図１２（ｂ）は図１２（ａ）における各ネットを矢印で表した図である。
【００７９】
まず、初期状態では、基点となるドライバのノードを決定する（図１０のステップＳ４１）。このドライバのノードは、図１２ではノードＤで表される。次に、下位のノードが存在するか否かを判定し（図１０のステップＳ４２）、下位のノードが存在すれば、下位のノードを決定する。
【００８０】
図１２（ｂ）では、ノードＮ２を下位のノードとして決定する。次に、ノードＮ２を基点として下位のノードが存在するか否かを判定する（図１１のステップＳ５１）。図１２（ｂ）の場合、下位のノードＮ１，Ｎ３が存在するため、再び、図１０のステップＳ４２の処理が再帰的に実行される。
【００８１】
図１２（ｂ）の場合、ノードＮ１に下位のノードＬ１が存在し、ノードＮ３に下位のノードＬ２が存在するため、再び、図１０のステップＳ４２の処理が再帰的に実行される。
【００８２】
ノードＬ１，Ｌ２には下位のノードは存在しないため、今度は図１１のステップＳ５１の判定が否定される。したがって、図１０のステップＳ４２の処理が終了して、次のステップＳ４３の処理が行われる。
【００８３】
図１２（ｃ）は、図８のステップＳ１６の処理を行った後の図１２（ａ）に対応する有向グラフである。図示のように、ノードＮ１，Ｎ３はノードＮ２の下位ノードに割り当てられる。
【００８４】
一方、図１３（ａ）は複雑な回路のネット図であり、図１３（ｂ）は図１３（ａ）の回路内の各ネットを矢印で表した図である。
【００８５】
まず、基点となるドライバ・ノードを決定する（図１０のステップＳ４１）。このドライバ・ノードは、図１３（ａ）の符号Ｄで示す位置である。次に、下位ノードが存在するか否かを判定し（図１１のステップＳ５１）、下位ノードが存在すれば、下位ノードを決定する。図１３（ｂ）の例では、ノードＮ４が下位ノードとして決定される。
【００８６】
次に、ノードＮ４の下位ノードを検索する処理が行われ（図１０のステップＳ４２）、ノードＮ２，Ｎ５が下位ノードとして決定される。次に、ノードＮ２，Ｎ５の下位ノードを検索する処理がさらに行われ（図１０のステップＳ４２）、ノードＮ２についてはノードＮ１，Ｎ３が、ノードＮ５についてはノードＮ６，Ｎ８が検索される。
【００８７】
次に、ノードＮ８の下位ノードを検索する処理がさらに行われ、ノードＮ７が下位ノードとして決定される。
【００８８】
以上により、すべてのノードが決定される。図１３（ｃ）は図８のステップＳ１６の処理が行われた後の図１３（ａ）の有向グラフである。
【００８９】
図８のステップＳ１６の処理が終了すると、次に、ステップＳ１６で検索された各下位ノードに対応するセグメントごとにInsertOKフラグをセットする処理を行う（ステップＳ１７）。
【００９０】
なお、本実施形態では、隣接するノード間を接続する経路をセグメントを呼び、隣接する複数のセグメントからなる経路をネットと呼ぶ。
【００９１】
図１４は図８のステップＳ１７の詳細内容を説明するフローチャートである。まず、各回路モジュール内の駆動点数を計算する（ステップＳ６１）。駆動点とは、有向グラフ内において、各モジュール内のセルの入力端子を表すノードのことである。次に、基点となるルート・ドライバのノードを決定し、注目ノードとする（ステップＳ６２）。次に、図８のステップＳ１６で注目ノードの下位ノードのそれぞれにInsertOKフラグを設定する（ステップＳ６３）。
【００９２】
図１５は図１４のステップＳ６３の詳細内容を説明するフローチャートである。まず、注目ノードの下位のノードが存在するか否かを判定する（ステップＳ７１）。下位のノードが存在する場合には、図１４のステップＳ６３の処理を再帰的に実行した後（ステップＳ７２）、注目ノードより下位のノードに対応する駆動点の数を計測する（ステップＳ７３）。ステップＳ７１〜Ｓ７３の処理は、ステップＳ７１の判定が否定されるまで繰り返し行われる。
【００９３】
ノードの駆動点がモジュール内に一つも存在しないか、あるいはノードがモジュール内のすべての駆動点を駆動するかについての判定を、各モジュールについて行う（ステップＳ７４）。ステップＳ７４の判定が肯定されると、InsertOKフラグを「OK」にセットする（ステップＳ７５）。一方、ステップＳ７４の判定が否定されると、InsertOKフラグを「notOK」にセットする（ステップＳ７６）。
【００９４】
ステップＳ７５またはＳ７６の結果が得られると、図８のステップＳ１６の処理が終了する。
【００９５】
図１６はInsertOKフラグの設定例を示す図である。図示のように、モジュールＢ内の各セグメントのInsertOKフラグはすべてnotOKにセットされる。これに対して、モジュールＡ，Ｂ間とモジュールＢ，Ｃ間の各セグメントのInsertOKフラグはいずれもＯＫにセットされる。
【００９６】
なお、図１６では、ノードＮ１，Ｎ２がモジュールＢの内側にあるように図示されているが、実際には、ノードＮ１，Ｎ２はモジュールＢの境界付近にある。したがって、実質的に、モジュールＢ内のセグメントはすべてInsertOKフラグがnotOKになる。
【００９７】
次に、リピータ位置演算器１０により、ネット内のリピータ・セルの挿入位置を演算する（図８のステップＳ１７）。
【００９８】
図１７は図８のステップＳ１７の詳細内容を示すフローチャートである。まず、基点となるルート・ドライバのノードを決定し、注目ノードＮとする（ステップＳ８１）。次に、下位のノードにリピータ・セルを挿入する処理と、下位のノードの負荷を計算する処理とを行う（ステップＳ８２）。
【００９９】
図１８は図１７のステップＳ８２の詳細内容を示すフローチャートである。まず、下位のノードが一つあるいは複数存在するか否かを判定する（ステップＳ９１）。下位のノードが存在する場合には、いずれかの下位のノードＬを選択する（ステップＳ９２）。
【０１００】
次に、リピータ・セル挿入処理を行う（ステップＳ９３）。図１９は図１８のステップＳ９３のリピータ・セル挿入処理の詳細内容を示すフローチャートである。まず、図１７のステップＳ８２の処理を行う。すなわち、ノードＬの下流側にリピータ・セルを挿入するとともに、ノードＬの下流側の負荷を計算する（ステップＳ１１１）。
【０１０１】
次に、セグメント(N,L)の総容量と下位のノードの負荷容量との和が、基準容量（例えば、100LU）よりも大きいか否かを判定する（ステップＳ１１２）。ステップＳ１１２の判定がYESの場合には、セグメント(N,L)のInsertOKフラグにＯＫがセットされているか否かを判定する（ステップＳ１１３）。
【０１０２】
InsertOKフラグにＯＫがセットされていれば、セグメント(N,L)にリピータ・セル１０１を挿入する（ステップＳ１１４）。また、新規のリピータ・セルの入力端子をノードＬに設定した後（ステップＳ１１６）、ステップＳ１１２の処理を再び行う。
【０１０３】
一方、ステップＳ１１２の判定がNOの場合には、セグメント(N,L)の容量と下位のノードの容量との和を計算して図１９の処理を終了する。
【０１０４】
また、ステップＳ１１３の判定がNOの場合には、ノードＬの下流にリピータ・セルを挿入する処理を行った後（ステップＳ１１６）、ステップＳ１１２の処理を再び行う。
【０１０５】
図２０は図１９のステップＳ１１５の詳細内容を示すフローチャートである。まず、下位のノードが存在するか否かを判定する（ステップＳ１３１）。下位のノードが存在しなければ処理を終了し、下位のノードが存在する場合には下位のノードを選択した後（ステップＳ１３２）、セグメント(N,L)と以下のセグメントにリピータ・セルを挿入した後（ステップＳ１３３）、ステップＳ１３１の処理を再び行う。
【０１０６】
図２１は図２０のステップＳ１３３の詳細内容を示すフローチャートである。まず、セグメント(N,L)のInsertOKフラグにＯＫがセットされているか否かを判定する（ステップＳ１４１）。ＯＫがセットされている場合には、セグメント(N,L)にリピータ・セルを挿入する（ステップＳ１４２）。一方、ＯＫがセットされていない場合には、下位のノードＬに強制的にリピータ・セルを挿入する（ステップＳ１４３）。
【０１０７】
図２０のステップＳ１３１〜Ｓ１３３の処理は、下位のノードすべてについて行われる。下位のノードすべてについてステップＳ１３１〜Ｓ１３３の処理が終わると、再び、図１９のステップＳ１１２の判定処理が行われる。
【０１０８】
図１９のステップＳ１１２の判定が否定された場合、すなわち、セグメント(N,L)の容量と下位のノードＬの負荷容量との和が基準容量以下であれば、その和を図１８のステップＳ９３の処理結果として返す。
【０１０９】
図１８のステップ９３の処理が終了すると、次に、ステップＳ９３の処理結果であるセグメント(N,L)の容量とノードＬ以下の負荷容量との和を積算する（ステップＳ９４）。
【０１１０】
図１８のステップＳ９１〜Ｓ９４の処理は、下位のノードすべてについて行われる。これにより、下位のノードすべてについての容量の積算値が得られる。
【０１１１】
次に、各枝分かれ経路がそれぞれ異なるスラック（タイミング制約と実際の信号遅延の差）を有するか否かを判定する（ステップＳ９５）。ステップ９５の判定がYESの場合には、最もクリティカルな枝分かれ経路以外にリピータ・セルを挿入することで、枝分かれ経路の負荷容量を削減する（ステップＳ９６）。
【０１１２】
ステップＳ９５の判定がNOの場合、あるいは、ステップＳ９６の処理が終了した場合には、ノードＮ以下の負荷が予め定めた基準容量（例えば、100LU）よりも大きいか否かを判定する（ステップＳ９７）。ステップＳ９７の判定がYESの場合には、最も負荷容量の大きい枝分かれ経路にリピータを挿入した後（ステップＳ９８）、ステップＳ９７に戻る。
【０１１３】
一方、ステップＳ９７の判定がNOの場合には、ノードＮ以下の負荷容量を図１７のステップＳ１７の処理結果として返す。以上により、図１７の処理が終了する。
【０１１４】
次に、リピータ位置演算器１０は、リピータ・ファイル付きのDSPFファイル２２と、リピータ・ファイル付きのVerilog-HDLネットリスト変換ファイル１９とを出力する（ステップＳ１８，Ｓ１９）。
【０１１５】
リピータ・リロケータ３０は、リピータ・ファイル付きのVerilog-HDLネットリスト変換ファイル１９，２１に基づいて、更新されたＡＸＯリピータ配置ファイル２５を生成する（ステップＳ２０）。
【０１１６】
以上でリピータ・セルの挿入処理が終了する。以下、上述した図８の処理の具体例を説明する。
【０１１７】
（第１の具体例）
図２２（ａ）は２つの枝分かれ経路を有する回路ネット図、図２２（ｂ）は図２２（ａ）にリピータ・セルを挿入した例を示す図である。
【０１１８】
図２２（ａ）に図示された２つの枝分かれ経路に関する情報は、図５のDSPFファイル１３に記述されている。このDSPFファイル１３には、各ネットの接続情報（物理情報）が含まれている。
【０１１９】
また、図５のＡＸＯ２０のソフトウェアは、上述したように、リピータ・セル禁止モジュール／領域ファイル１２と、DSPFファイル１３と、出力ピン容量ファイル１４と、矩形レイアウト領域ファイル１５とを生成する。これらのファイルは、DSPFファイル１３を除いてリピータ位置演算器１０により読み出される。リピータ位置演算器１０は、パラメータ・ファイル１６の情報と禁止ネットリストファイル１７の情報も併せて読み出して、これらのファイルに基づいて、上述した図８以降の処理を行う。
【０１２０】
図２２（ａ）にリピータ・セルを挿入する処理を図８のフローチャートに沿って説明すると、まず、DSPFファイル１３内にネットが存在するか否かを判定する。図２２（ａ）のネットには、符号３，４で示すネットが存在する。図８のステップＳ１３ではDSPFファイル１３からネットを一つ読み出し（ステップＳ１３）、このネットにリピータ・セル１０１を挿入する必要があるか否かを判定する（ステップＳ１４）。
【０１２１】
図２２（ａ）の例では、負荷がしきい値容量を越えているため、図８のステップＳ１４の判定が肯定され、ネットの有向グラフが決定される（ステップＳ１６）。ここで決定される有向グラフは、ドライバ１１から負荷３，４への経路である。
【０１２２】
図２３は図２２（ａ）に対応する有向グラフの一例を示す図である。有向グラフは、各ネットごとに、信号が伝搬する方向を矢印で表したものである。
【０１２３】
有向グラフが生成されると、次に、ネット内にリピータ・セル１０１を挿入する処理を行う（ステップＳ１７）。図２２（ａ）の例では、ドライバ１１は、188LU(=100LU+40LU+4LU+40LU+4LU)の容量を駆動する。この容量はしきい値容量（例えば、177LU）を超えているので、セグメント内にリピータ・セルを挿入する必要がある。
【０１２４】
また、図２２（ａ）のノード２に対応するInsertOKフラグはＯＫにセットされているので、そのセグメント内（例えば、ドライバ１１とノード２の間）にリピータ・セル１０１が挿入される（図２２（ｂ））。DSPFファイル１３には他にネットが存在しないので、以上で処理が終了する。
【０１２５】
図２４は図２２（ａ）の各セグメントのInsertOKフラグの設定状態を示す図である。図示のように、すべてのフラグにＯＫがセットされている。
【０１２６】
Verilog-HDLネットリスト決定器４０は、リピータ位置演算器１０から出力されるVerilog-HDLネットリスト変換ファイル１９とVerilog-HDLネットリスト・ファイル９とを読み出し、リピータ・ファイル付きのVerilog-HDLネットリストが生成される。
【０１２７】
リピータ位置演算器１０はまた、ＡＸＯリピータ配置ファイル２１を生成する。ＡＸＯリピータ配置ファイル２１は、Verilog-HDLネットリスト変換ファイル１９と、リピータ禁止物理領域情報ファイル２３と、仮配置された他のセル情報ファイル２４と、矩形レイアウト領域ファイル１５とともに、リピータ・リロケータ３０に読み込まれ、重複部分が除去されてリピータ・セルが配置される。
【０１２８】
リピータ・リロケータ３０は、更新されたＡＸＯリピータ配置ファイル２５を生成する。このファイルは、リピータ・ファイル付きVerilog-HDLネットリスト２６とともに、ＡＸＯ２０に入力される。ＡＸＯ２０は、リピータ・セルを挿入した状態で適切なソフトウェア・レイアウトを行う。
【０１２９】
（第２の具体例）
第２の具体例は、２つの枝分かれ経路を有する回路ネットにリピータ・セルを挿入するものである。
【０１３０】
図２５（ａ）は２つの枝分かれ経路がそれぞれ異なる負荷容量を有する例を示す回路ネット図、図２５（ｂ）は図２５（ａ）に２個のリピータ・セルを挿入した例を示す図、図２５（ｃ）は図２５（ｂ）にさらにもう一つリピータ・セルを挿入した例を示す図である。
【０１３１】
図２５（ａ）に図示された２つの枝分かれ経路に関するネット情報は、図５のDSPFファイル１３に記述されている。
【０１３２】
第２の具体例を図８のフローチャートに沿って説明すると、まず、DSPFファイル１３内にネットが存在するか否かを判定する（ステップＳ１１）。図２５（ａ）の場合、符号３，４を負荷に持つネットが存在するため、これらネットのいずれか一つに関する情報をDSPFファイル１３から読み出す（ステップＳ１３）。
【０１３３】
次に、リピータ・セル１０１を挿入する必要があるか否かを判定する（ステップＳ１４）。図２５（ａ）の場合、各ネットの負荷容量がしきい値容量を越えているので、ネットの有向グラフを作成する（ステップＳ１６）。
【０１３４】
図２６は図２５（ａ）に対応する有向グラフである。図示のように、有向グラフは、ドライバ１１から負荷６に向かう４つの矢印付きのネットで表される。
【０１３５】
次に、ネットを構成する各セグメントのInsertOKフラグにＯＫが設定されているか否かを判定する。
【０１３６】
図２７はネットを構成する各セグメントに対応するInsertOKフラグがすべてＯＫである例を示す図である。この場合、リピータ・セル１０１をネット内の任意の場所に挿入することができる。
【０１３７】
図２５（ａ）はノード２の下流側の２つの枝分かれ経路がそれぞれ異なる負荷（一方は144LU、他方は124LU）を有する例を示している。この場合、ドライバ１１は、全部で368LU(=100LU+140LU+4LU+120LU+4LU)の容量を駆動しなければならない。
【０１３８】
また、ノード２，３間の容量は144LU(=140LU+4LU)であり、ノード２，４間の容量は124LU(=120LU+4LU)である。このままでは、各セグメントの容量がしきい値容量を上回ってしまうため、各セグメントにリピータ・セル１０１を挿入する必要がある。
【０１３９】
そこで、図２５（ｂ）に示すように、ノード２，３間と、ノード２，４間にそれぞれ、リピータ・セル１０１が挿入される。
【０１４０】
ところが、これらリピータ・セルを挿入しても、ドライバ１１はまだ、176LU(=100LU+24LU+4LU+44LU+4LU)の容量を駆動しなければならない。この負荷はしきい値容量を上回るので、さらにリピータ・セルを挿入する必要がある。
【０１４１】
そこで、図２５（ｃ）に示すように、ドライバ１１とノード２との間のセグメントにリピータ・セル１０１が挿入される。
【０１４２】
（第３の具体例）
第３の具体例は、第２の具体例よりも負荷容量が大きい例を示している。
【０１４３】
図２８（ａ）は２つの枝分かれ経路がそれぞれ異なる負荷容量を有する例を示す回路ネット図、図２８（ｂ）は図２８（ａ）に２個のリピータ・セルを挿入した例を示す図、図２８（ｃ）は図２８（ｂ）にさらに２個のリピータ・セルを挿入した例を示す図である。
【０１４４】
図２８（ａ）の２つの枝分かれ経路に関するネット情報は、DSPFファイル１３に記述されている。
【０１４５】
第３の具体例を図８のフローチャートに沿って説明すると、図５のDSPFファイル１３内にネットが存在するか否かを判定する（ステップＳ１２）。図２８（ａ）の場合、符号３，４を負荷に持つネットが存在するため、このネットがDSPFファイル１３から読み出される（ステップＳ１３）。
【０１４６】
次に、ネットにリピータ・セルを挿入する必要があるか否かを判定する（ステップＳ１４）。リピータ・セルを挿入する必要がある場合には、そのネットの有向グラフを決定する（ステップＳ１６）。
【０１４７】
この場合の有向グラフは、図２９のように、ドライバ１１からノード３，４に向かう４つの矢印付きのネットで表される。
【０１４８】
次に、InsertOKフラグにＯＫがセットされているか否かを判定する（ステップＳ１７）。この場合、図３０のように、すべてのセグメントについて、InsertOKフラグはＯＫ状態になる。
【０１４９】
ここで、InsertOKフラグは、リピータ・セルの挿入処理を行っている最中は変化しないことに注意されたい。すなわち、いったんInsertOKフラグがＯＫに設定されたセグメントは、notOKには変化しない。
【０１５０】
次に、リピータ・セル１０１をネットに挿入する処理を行う。図２８（ａ）の例では、２つの枝分かれ経路はそれぞれ異なる負荷容量を有する。具体的には、ドライバ１１は、418LU(=100LU+140LU+4LU+170LU+4LU)の容量を有する。
【０１５１】
また、ノード２，３間のセグメントの容量は144LU(=140LU+4LU)であり、ノード２，４間のセグメントの容量は174LU(=170LU+4LU)である。各セグメントの容量は、しきい値容量を上回るので、各セグメント内にリピータ・セル１０１を挿入する必要がある。
【０１５２】
まず、図２８（ｂ）に示すように、ノード２，３間とノード２，４間にそれぞれリピータ・セル１０１が挿入される。この状態では、ドライバ１１の負荷容量は、226LU(=100LU+44LU+4LU+74LU+4LU)である。この値はしきい値容量100LUを上回るので、さらにリピータ・セルを挿入する必要がある。
【０１５３】
この場合、最も容量の大きな場所にリピータ・セルを挿入するのが望ましい。ただし、図２８（ｂ）の点線位置にリピータ・セル１０１を挿入すると、このリピータ・セル１０１の駆動容量が100LUを越えてしまう。
【０１５４】
このため、図２８（ｃ）に示すように、ノード２，１０７間にリピータ・セルが挿入される。このとき、ドライバ１１の負荷容量は、152LU(=100LU+44LU+4LU+4LU)になるため、ドライバ１１とノード２との間にもリピータ・セル１０１が挿入される。以上で処理が終了する。
【０１５５】
（第４の具体例）
第４の具体例は、３つの枝分かれ経路を有する例である。
【０１５６】
図３１（ａ）は３つの枝分かれ経路を有する例を示す回路ネット図、図３１（ｂ）は図３１（ａ）に１個のリピータ・セルを挿入した例を示す図、図３１（ｃ）は図３１（ｂ）にさらに２個のリピータ・セルを挿入した例を示す図である。
【０１５７】
図３１（ａ）のネット情報は、DSPFファイル１３に記述されており、このネット情報を用いて図８の処理が行われる。
【０１５８】
第４の具体例を図８のフローチャートに基づいて説明すると、まず、DSPFファイル１３内にネットが存在するか否かを判定する（ステップＳ１１）。図８（ａ）の場合、符号３〜５を負荷に持つネットが存在するため、このネットが選択されて、DSPFファイル１３から読み出される（ステップＳ１３）。
【０１５９】
次に、選択したネット内にリピータ・セル１０１を挿入するか否かを判定する（ステップＳ１４）。ここでは、ネットの負荷容量がしきい値容量を上回れば、リピータ・セルを挿入する必要があると判定する。
【０１６０】
図３１（ａ）の場合、負荷容量がしきい値容量100LUを上回るため、ステップＳ１４ではYESと判定される。
【０１６１】
次に、ネットの有向グラフを決定する（ステップＳ１６）。図３２は図３１（ａ）に対応する有向グラフである。図示のように、ドライバ１１からノード３〜５に向かう６つの矢印付きのネットで表される。
【０１６２】
次に、各セグメントのInsertOKフラグにＯＫがセットされているか否かを判定する（ステップＳ１７）。この場合、図３３のように、すべてのセグメントについてInsertOKフラグはＯＫであり、リピータ・セルの挿入が許可される。
【０１６３】
図３１（ａ）の例では、各枝分かれ経路はそれぞれ異なる負荷容量を有する。ドライバ１１は、全部で292LU(=100LU+70LU+4LU+60LU+4LU+50LU+4LU)の負荷を駆動する。この容量は、しきい値容量100LUを越えているので、セグメント内にリピータ・セル１０１を挿入する必要がある。
【０１６４】
リピータ・セル１０１は、最も負荷容量の大きいネットに挿入するのが望ましい。図３１（ａ）の例では、ノード２，３の間のネットが最も負荷容量が大きいため、この位置にリピータ・セル１０１が挿入される（図３１（ｂ））。
【０１６５】
この状態でのドライバ１１の負荷容量は、222LU(=100LU+60LU+4LU+50LU+4LU+4LU）であり、まだ、しきい値容量100LUを上回っている。この状態でノード２にリピータ・セル１０１を挿入すると、このリピータ・セル１０１の駆動容量が100LUを上回ってしまうため、ノード２の上位にはリピータ・セル１０１を挿入できない。
【０１６６】
ノード２の次に容量の大きなネットはノード２，４間である。このため、図３１（ｃ）に示すように、ノード２，４間にリピータ・セルが挿入される。
【０１６７】
この状態でのドライバ１１の負荷容量は162LU(=100LU+50LU+4LU+4LU+4LU)である。この値はまだしきい値容量100LUを上回っているため、次に、ドライバ１１とノード２との間にリピータ・セル１０１が挿入される（図３１（ｃ））。これで、すべてのネットがしきい値容量以下になるため、処理が終了する。
【０１６８】
（第５の具体例）
第５の具体例は、合成ツールへのバック・アノテーションを考慮に入れたリピータ・セル挿入手法である。
【０１６９】
ここで、バック・アノテーションとは、リピータ・セルの挿入情報をソフトウェア・レイアウトツール（例えば、ＡＸＯ２０）に入力して、リピータ・セルを挿入した状態でネットリスト等を生成することをいう。
【０１７０】
図３４（ａ）はリピータ挿入前の回路モジュールＡ〜Ｃの接続関係を示す図、図３４（ｂ）はモジュールＢ内にリピータ・セルを挿入した様子を示す図、図３４（ｃ）はモジュールＢ内のリピータ・セルをモジュールＢ，Ｃ間に移動させる様子を示す図、図３４（ｄ）は最終的なリピータ・セルの挿入位置を示す図である。
【０１７１】
また、図３５は図３４に対応するネットリストを示す図であり、配置配線ツールや合成ツールの出力結果である。図１６および図３５には、各モジュールごとの駆動ポイント（駆動点）数と、各ノードの上位側に接続しているセグメントのInsertOKフラグの値が示されている。
【０１７２】
図１６および図３５に示すように、モジュールＡ内には駆動点が１点、モジュールＢ内には駆動点が２点、モジュールＣ内には駆動点が１点存在する。また、モジュールＡ，Ｂ間とモジュールＢ，Ｃ間は、InsertOKフラグがいずれもＯＫの状態である。
【０１７３】
リピータ・セル挿入時に、リピータ・セル１０１の理想的な挿入位置が図３４（ａ）に点線で示すように、モジュール内部となることがある。ところが、このような位置にリピータ・セル１０１を挿入すると、モジュールＢ内での入出力パラメータが増えてネットリストを変更しなければならなくなり、リピータ・セルを他のソフトウェアツールに正しくバック・アノテートできなくなってしまう。
【０１７４】
このため、図３４（ｃ）に示すように、モジュールＢ内のリピータ・セルはモジュールＢ，Ｃ間に移動される。この位置にリピータ・セルを挿入すれば、モジュールＢやＣ内の入出力パラメータ（例えば、入出力端子数）は変化しない。このため、各モジュールをネットリストにより適切に表現でき、リピータ・セル挿入結果を他のソフトウェアに正しくバック・アノテートすることができる。
【０１７５】
また、図１６および図３５に示すようにモジュールＡ，Ｂ間のInsertOKフラグもＯＫであるため、モジュールＡ，Ｂ間にもリピータ・セルを挿入することができる。
【０１７６】
結局、図３４（ｄ）に示すように、モジュールＡ，Ｂ間とモジュールＢ，Ｃ間にそれぞれリピータ・セルが挿入される。
【０１７７】
（第６の具体例）
第６の具体例は、サイズの異なる２種類のリピータ・セルを用いる例である。
【０１７８】
図３６（ａ）はリピータ・セル挿入前の回路図である。図３６（ａ）の場合、負荷が120LUもあるため、駆動能力の高いU-bufferと呼ばれるリピータ・セル２００が負荷位置に挿入される（図３６（ｂ））。このリピータ・セル２００を用いることにより、信号遅延を最小化することができる。
【０１７９】
負荷位置にリピータ・セル２００を挿入しただけでは、ドライバ１１とリピータ・セル２００のノード４５との間の負荷容量がしきい値容量を上回るため、上述した第１の具体例と同様の手法でリピータ・セル挿入が行われる。
【０１８０】
以下、図１４のフローチャートに基づいて、図３６（ａ）のリピータ・セル挿入処理を説明する。まず、DSPFファイル１３にネットが存在するか否かを判定する（ステップＳ１１）。図３６（ａ）の場合、ネット一つが存在するため、このネットに関する情報をDSPFファイル１３から読み出す（ステップＳ１３）。
【０１８１】
次に、ネットにリピータ・セルを挿入する必要があるか否かを判定する（ステップＳ１４）。図３６（ａ）の場合、負荷がきわめて大きいため、ドライバ１１とリピータ・セル２００との間の容量がしきい値容量を上回ってしまう。
【０１８２】
ノード１１，４５間のセグメントに対応するInterOKフラグには、ＯＫがセットされるため、このセグメントにリピータ・セル１０１が挿入される。DSPFファイル１３にはそれ以外のネットは存在しないため、処理動作が終了する。
【０１８３】
このように、駆動能力の異なる複数種類のリピータ・セルを予め用意しておけば、リピータ・セルの挿入位置をより効果的に決定することができる。
【０１８４】
また、リピータ・セルの挿入後にバック・アノテーションを行う場合も、複数種類のリピータ・セルを考慮に入れてバック・アノテーションを行えるようにするのが望ましい。
【０１８５】
例えば、図３７はU-bufferを挿入する例を示す図である。図３７の場合、理想的には、図３７（ａ）のようにモジュールＢ内にリピータ・セルを挿入するのが望ましいが、モジュールＢ内にリピータ・セルを挿入すると、バック・アノテーションを行えなくなるので、モジュールＢ内にはリピータ・セルは挿入できない。
【０１８６】
そこで、モジュールＢより下流側で、リピータ・セルの理想位置に最も近い位置に、リピータ・セル１０１が挿入される（図３７（ｂ））。
【０１８７】
また、この状態では、ドライバ１１の負荷容量は、130LU(=40LU+50LU+40LU)であり、しきい値容量を超えている。このため、モジュールＡ，Ｂ間に、駆動能力の高いリピータ・セル（U-buffer）２００が挿入される。これにより、モジュール内での遅延時間を最小限に抑えることができる。
【０１８８】
（第７の具体例）
第７の具体例は、各枝分かれ経路のスラック（タイミング制約と実際の信号遅延の差）を考慮に入れてリピータ・セルの挿入を行うものである。
【０１８９】
枝分かれ経路がある場合、各経路ごとに信号遅延時間に差があることが多く、いずれかの経路がクリティカル・パスになることがある。そこで、第７の具体例は、各枝分かれ経路のスラックを考慮に入れてリピータ・セルを挿入する。具体的には、タイミング的にクリティカルな枝分かれ経路の信号遅延時間が、リピータ・セルが挿入される経路よりも優先的に短くなるようにする。
【０１９０】
例えば、図３８（ａ）には、各枝分かれ経路の時間差が図示されている。各枝分かれ経路のうち一つが最もクリティカルな経路、すなわち最優先の経路である。クリティカルな枝分かれ経路は、クリティカルでない経路よりも信号遅延が少なくなるようにするのが望ましい。
【０１９１】
そこで、枝分かれ経路の各交点でのスラックを比較し、それほどクリティカルでない経路にリピータ・セル１０１を挿入する。これにより、クリティカルな経路の負荷容量は、クリティカルでない経路の負荷容量から切り離される。
【０１９２】
このような処理を行うのが、図１８のステップＳ９５である。ステップＳ９５では、交点ノード２での各枝分かれ経路のスラックを比較する。その結果、対象となる枝分かれ経路がクリティカルな経路であると決定されると、クリティカルな経路の信号遅延がクリティカルでない経路ほど大きくならないように、クリティカルでない経路にリピータ・セル１０１が挿入される（図３８（ｃ））。
【０１９３】
この場合のリピータ挿入処理は、上述した第１〜第６の具体例の手法が適用可能である。
【０１９４】
具体的には、ドライバ１１の下流側にリピータ・セル１０１が挿入されるとともに（図３８（ｂ）））、上述したように、タイミング的にクリティカルでない経路にリピータ・セル１０１が挿入される（図３８（ｃ））。
【０１９５】
（第２の実施形態）
上述した第１の実施形態では、リピータ・セルを挿入する際、リピータ・セル自身の遅延時間は特に考慮に入れていなかった。このため、タイミングに余裕のない配線経路にリピータ・セルが数多く挿入されて、リピータ・セル自身の遅延時間により、回路のタイミング制約を満足できなくなるおそれがある。
【０１９６】
例えば、図３９は、ドライバ１１の出力端子から負荷Ａまでのタイミング制約が３ns、負荷Ｂまでのタイミング制約が４ns、負荷Ｃまでのタイミング制約が６nsの例を示している。
【０１９７】
上述した第１の実施形態では、リピータ・セル自身の遅延を考慮に入れずに、各枝分かれ経路のタイミング制約を互いに比較して、タイミング制約の値が大きい方にリピータ・セルを挿入していた。
【０１９８】
図３９の場合、ドライバ１１の出力端子から負荷Ｂまでのタイミング制約４nsの方が負荷Ｃまでのタイミング制約６nsよりも厳しいため、負荷Ｃ側に一個目のリピータ・セルが挿入される。
【０１９９】
次に、負荷Ｂ，Ｃへの分岐点とドライバ１１との間の経路の容量がしきい値容量を超えるので、この経路に二個目のリピータ・セルが挿入される。
【０２００】
次に、負荷Ｂ，Ｃのうち、タイミング制約の条件が厳しい負荷Ｂまでのタイミング制約４nsと、負荷Ａまでのタイミング制約３nsとを比較し、制約の厳しくない負荷Ｂ側に三個目のリピータ・セルが挿入される。
【０２０１】
ところが、図３９のように、各経路のタイミング制約のみでリピータ・セルの挿入位置を決めると、リピータ・セル自身の遅延により、負荷ＢやＣに対するタイミング制約を守れなくなるおそれがある。
【０２０２】
そこで、第２の実施形態は、リピータ・セル自身の遅延を考慮に入れて、リピータ・セルの挿入位置を決定するものである。
【０２０３】
図４０（ａ）、図４０（ｂ）は第２の実施形態のリピータ・セル挿入方法を説明する図である。第２の実施形態では、負荷Ｂまでのタイミング制約４nsと負荷Ｃまでのタイミング制約６nsとを比較し、制約が厳しくない負荷Ｃ側に一個目のリピータ・セルを挿入する。次に、負荷Ｂ，Ｃへの分岐点とドライバ１１との間の経路の容量がしきい値容量を超えるので、この経路に二個目のリピータ・セルを挿入する。以上の手順は、図３９と同様である。
【０２０４】
次に、一個目および二個目のリピータ・セル自身の遅れを考慮に入れて、ドライバ１１の出力端子から負荷ＢおよびＣまでのタイミング制約をそれぞれ更新する。すなわち、リピータ・セルを挿入した分だけ、負荷Ｂ，Ｃへのタイミング制約を厳しくする。
【０２０５】
具体的には、リピータ・セル自身の遅延を例えば２nsとすると、負荷Ｂまでのタイミング制約を２ns(=4ns-2ns)に更新し、負荷Ｃまでのタイミング制約を２ns(=6ns-2ns-2ns)に更新する。
【０２０６】
負荷Ｂ，Ｃの分岐点では、負荷Ｂ，Ｃのうち、タイミング制約の厳しい方のタイミング制約と、負荷Ａまでのタイミング制約３nsとを比較する。図４０の場合、負荷Ｂ，Ｃまでのタイミング制約はいずれも２nsなので、この２nsと負荷Ａまでのタイミング制約３nsとを比較する。この場合、前者の方がタイミング制約が厳しいので、負荷Ａ側に三個目のリピータ・セルが挿入される。
【０２０７】
このように、第２の実施形態では、リピータ・セル自身の遅延時間も考慮に入れて、リピータ・セルの挿入位置を決定するため、実際の信号の遅延を見込んで、最適な位置にリピータ・セルを挿入することができる。
【０２０８】
上述した各実施形態のリピータ挿入手法を用いることにより、タイミングを考慮に入れたリピータ挿入が可能になる。これは、完全にタイミングを最適化するリピータ挿入とは異なるが、タイミング・アナライザがなくても、タイミングを考慮したリピータ挿入を行える。すなわち、本実施形態によれば、SDF(Standard Delay Format)のようなタイミング情報が不要であるため、処理速度の向上が図れる。
【０２０９】
上述したように、本発明は、UnixやUnixと互換性のある他のオペレーティング・システムで動作する従来の配置配線ソフトウェア・ツールのソフトウェア・プログラムにより実現することができる。
【０２１０】
これらのソフトウェア・プログラムとオペレーション・プログラムは、図４１に示すコンピュータ・システムにて実行可能である。図４１のコンピュータ・システムは、プロセッサ４１０と、メモリ４２０と、ハードディスク装置やCD-ROM等の固定型記録装置４３０とを有する。プロセッサ４１０による実行結果は、表示装置４４０に表示される。固定型記録装置４３０に収納された本発明に係るソフトウェアは、メモリ４２０により読み出され、プロセッサ４１０により実行され、その結果がモニタ４４０に表示される。
【０２１１】
本明細書では、本発明の一実施形態のみについて説明したが、本発明は、種々の用途で利用でき、また、他のシステム等と組み合わせることも可能であり、本発明の範囲は本明細書に開示されたものに限定されない。
【０２１２】
【発明の効果】
以上詳細に説明したように、本発明によれば、回路パス上の回路パラメータが所定の基準しきい値より小さくなるようにリピータ・セルを挿入するため、負荷容量による信号の遅延を抑えることができる。また、回路モジュールの内部にはリピータ・セルを挿入しないようにしたため、リピータ・セルを挿入しても回路モジュールの入出力パラメータは変化しなくなり、リピータ・セルの挿入結果に基づいてバック・アノテーションを行ってネットリスト等を生成することができる。
【０２１３】
さらに、本発明では、駆動能力の異なる複数のリピータ・セルを設けるため、負荷容量の大きさに応じて最適なリピータ・セルを挿入することができる。
【図面の簡単な説明】
【図１】従来のリピータ・セルの挿入手法を説明する図。
【図２】（ａ），（ｂ），（ｃ）はドライバの負荷容量が224LU(=220LU+4LU)の例を示す図。
【図３】（ａ），（ｂ），（ｃ）はドライバが210LU(=150LU+60LU)の負荷を駆動する例を示す図。
【図４】（ａ），（ｂ），（ｃ）はドライバが非常に大きな負荷を駆動する例を示す図。
【図５】本発明の第１の実施形態の全体構成を示すブロック図。
【図６】リピータ・リロケータの処理動作を示すフローチャート。
【図７】図５の各構成を新規な構成と従来と同様の構成に分類した図。
【図８】リピータ位置演算器の処理動作を示すフローチャート。
【図９】図８のステップＳ１４の詳細内容を示すフローチャート。
【図１０】図８のステップＳ１６の詳細内容を示すフローチャート。
【図１１】図１０のステップＳ４２における下位ノード検索処理の詳細内容を示すフローチャート。
【図１２】（ａ），（ｂ），（ｃ）は２つの枝分かれ経路を有する場合の下位ノード検索処理を説明する図。
【図１３】（ａ），（ｂ），（ｃ）は多数の枝分かれ経路を有する場合の下位ノード検索処理を説明する図。
【図１４】ステップＳ４３の詳細フローチャート。
【図１５】ステップＳ６３の詳細フローチャート。
【図１６】  InsertOKフラグの設定例を示す図。
【図１７】ステップＳ１７の詳細フローチャート。
【図１８】ステップＳ８２の詳細フローチャート。
【図１９】ステップＳ９３の詳細フローチャート。
【図２０】ステップＳ１１５の詳細フローチャート。
【図２１】ステップＳ１３３の詳細フローチャート。
【図２２】（ａ）は２つの枝分かれ経路を有する回路ネット図、（ｂ）は（ａ）にリピータ・セルを挿入した例を示す図。
【図２３】図２２（ａ）に対応する有向グラフの一例を示す図。
【図２４】図２２（ａ）の各セグメントのInsertOKフラグの設定状態を示す図。
【図２５】（ａ）は２つの枝分かれ経路がそれぞれ異なる負荷容量を有する例を示す回路ネット図、（ｂ）は（ａ）に２個のリピータ・セルを挿入した例を示す図、（ｃ）は（ｂ）にさらにもう一つリピータ・セルを挿入した例を示す図。
【図２６】図２５（ａ）に対応する有向グラフを示す図。
【図２７】ネットを構成する各セグメントに対応するInsertOKフラグがすべてＯＫである例を示す図。
【図２８】（ａ）は２つの枝分かれ経路がそれぞれ異なる負荷容量を有する例を示す回路ネット図、（ｂ）は（ａ）に２個のリピータ・セルを挿入した例を示す図、（ｃ）は（ｂ）にさらに２個のリピータ・セルを挿入した例を示す図。
【図２９】図２８（ａ）に対応する有向グラフの一例を示す図。
【図３０】図２８（ａ）の各セグメントのInsertOKフラグの設定状態を示す図。
【図３１】（ａ）は３つの枝分かれ経路を有する例を示す回路ネット図、（ｂ）は（ａ）に１個のリピータ・セルを挿入した例を示す図、（ｃ）は（ｂ）にさらに２個のリピータ・セルを挿入した例を示す図。
【図３２】図３１（ａ）に対応する有向グラフの一例を示す図。
【図３３】図３１（ａ）の各セグメントのInsertOKフラグの設定状態を示す図。
【図３４】（ａ）はリピータ挿入前の回路モジュールＡ〜Ｃの接続関係を示す図、（ｂ）はモジュールＢ内にリピータ・セルを挿入した様子を示す図、（ｃ）はモジュールＢ内のリピータ・セルをモジュールＢ，Ｃ間に移動させる様子を示す図、（ｄ）は最終的なリピータ・セルの挿入位置を示す図。
【図３５】図３４に対応するノード、駆動点、InsertOK フラグを示す図。
【図３６】大きい負荷を駆動する例を示す図。
【図３７】バック・アノテーションを考慮したリピータ挿入手法を説明する図。
【図３８】枝分かれ経路ごとに異なるスラックがある例を示す図。
【図３９】負荷 A、B、C のタイミング制約のみを考慮に入れてリピータ・セルを挿入する例を示す図。
【図４０】（ａ），（ｂ）は負荷Ａ，Ｂ，Ｃ間のタイミング制約及びリピータ・セル自身の遅延時間を考慮に入れてリピータ・セルを挿入する例を示す図。
【図４１】本発明をソフトウェアで構成する場合のコンピュータシステムの全体構成図。
【符号の説明】
９  Verilog-HDLネットリスト・ファイル
１０  リピータ位置演算器
１２  リピータ禁止モジュール／領域ファイル
１３  DSPFファイル
１４  出力ピン容量ファイル
１５  矩形レイアウト領域ファイル
１６  パラメータ・ファイル
１７  禁止ネットリスト
１８  各枝分かれ経路のスラック・ファイル
１９  Verilog-HDLネットリスト変換ファイル
２０  ＡＸＯ
２１  ＡＸＯリピータ配置ファイル
２２  リピータ付きDSPFファイル
２３  リピータ禁止物理領域情報ファイル
２４  仮配置された他のセル情報ファイル
２５  ＡＸＯリピータ配置ファイル
２６  リピータ付きVerilog-HDLネットリスト・ファイル
２７  デザイン・コンパイラ禁止コマンド・ファイル
４０  Verilog-HDLネットリスト決定器
５０  デザイン・コンパイラ用リピータセル変更禁止コマンド・ファイル生成器６０  デザイン・コンパイラ
【図１】
0003662149.tif 000005
【図２】
0003662149.tif 000006
【図３】
0003662149.tif 000007
【図４】
0003662149.tif 000008
【図５】
0003662149.tif 000009
【図６】
0003662149.tif 000010
【図７】
0003662149.tif 000011
【図８】
0003662149.tif 000012
【図９】
0003662149.tif 000013
【図１０】
0003662149.tif 000014
【図１１】
0003662149.tif 000015
【図１２】
0003662149.tif 000016
【図１３】
0003662149.tif 000017
【図１４】
0003662149.tif 000018
【図１５】
0003662149.tif 000019
【図１６】
0003662149.tif 000020
【図１７】
0003662149.tif 000021
【図１８】
0003662149.tif 000022
【図１９】
0003662149.tif 000023
【図２０】
0003662149.tif 000024
【図２１】
0003662149.tif 000025
【図２２】
0003662149.tif 000026
【図２３】
0003662149.tif 000027
【図２４】
0003662149.tif 000028
【図２５】
0003662149.tif 000029
【図２６】
0003662149.tif 000030
【図２７】
0003662149.tif 000031
【図２８】
0003662149.tif 000032
【図２９】
0003662149.tif 000033
【図３０】
0003662149.tif 000034
【図３１】
0003662149.tif 000035
【図３２】
0003662149.tif 000036
【図３３】
0003662149.tif 000037
【図３４】
0003662149.tif 000038
【図３５】
0003662149.tif 000039
【図３６】
0003662149.tif 000040
【図３７】
0003662149.tif 000041
【図３８】
0003662149.tif 000042
【図３９】
0003662149.tif 000043
【図４０】
0003662149.tif 000044
【図４１】
0003662149.tif 000045