(57)【特許請求の範囲】
【請求項１】
複数フェーズ論理回路設計用のシミュレーション／エミュレーション・プログラムを実行するために用意されたコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法において、複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、
複数フェーズ論理回路設計内の元の各論理ブロックを識別し、複数フェーズ論理設計内の各論理ブロックの出力をサンプリングする元の各フリップフロップ（ＦＦ）を識別し、複数のクロック・フェーズで出力をサンプリングする複数のＦＦを有する元の各論理ブロックを識別するステップと、
元の各ＦＦを、複数フェーズのうちでそのＦＦの入力をトリガする１つのフェーズに関連付けるステップと、
複数の元のＦＦによってサンプリングされたものとして識別された各論理ブロックを１回または複数回複製するステップであって、複製の回数が複数の関連ＦＦより１つ少ない数に等しいステップと、
元の各論理ブロックを複製論理ブロック（複数も可）および関連の元のＦＦに接続して、関連ＦＦの数に等しい複数のブロック出力を有する論理ブロック構成にし、関連ＦＦの複数フェーズ・クロック・トリガを論理ブロック構成用の単一フェーズ・クロック・トリガに変更し、複数フェーズ論理設計内のすべての動作フェーズの出力と同等の出力を単一の動作フェーズで供給するような単一フェーズ論理設計を得るステップとを含むことを特徴とする、論理変換方法。
【請求項２】
複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記接続ステップが、
各論理ブロック構成内の論理ブロックの出力を格納するために関連ＦＦの１つに各複製論理ブロックの出力を接続するステップをさらに含むことを特徴とする、請求項１に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項３】
複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記複製ステップが、
１〜Ｎの範囲内の値を有する数値ｍを得るために元の論理ブロックの出力を受け取るすべてのＦＦ（複数も可）に接続されたすべてのクロック・フェーズをカウントし、Ｎが複数フェーズ論理設計内のクロック・フェーズの総数であり、数値ｍが元の各論理ブロックに関連付けられ、元の各論理ブロックがｍ＝１またはｍ＞１の値ｍを有するステップと、
ｍ＞１という値を有する元の各論理ブロックと同一の複製論理ブロックを供給するために元の各論理ブロックをｍ−１回複製するのであって、１と等しい数値ｍ（ｍ＝１）を有する元の論理ブロックを複製するわけではないステップとをさらに含むことを特徴とする、請求項２に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項４】
複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記複製ステップが、
元の各論理ブロックと任意の複製ブロック（複数も可）とからなるｍ個のブロックごとに昇順でフェーズ番号を割り当て、そのフェーズ番号が元の論理ブロックの出力を受け取るＦＦ（複数も可）に接続されたそれぞれのクロック・フェーズであり、そのＦＦ（複数も可）がそれぞれのクロック・フェーズによって最初に番号が付けられるステップと、
ｍ＝１タイプのブロック／ＦＦの順序とｍ＞１タイプのブロック／ＦＦの順序とを提供するために前記割当てステップによって割り当てられたフェーズ番号をそれぞれ置き換えるように、１〜ｍの連続接続番号を順番に再割当てするステップと、
各順序が、各順序内の最低番号として番号１が割り当てられた元の論理ブロック／ＦＦを含むステップとをさらに含むことを特徴とする、請求項３に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項５】
前記再接続ステップが、
１〜ｍの各ブロック／ＦＦ順序内で各論理ブロックの出力を同じ割当て番号を有するＦＦの入力に接続し、そのＦＦの出力をその論理ブロックの入力に接続するステップと、
各論理ブロックＩの出力を、ｍ＞１の各順序内で１より大きい同じ割当て番号を有するＦＦの入力に接続するステップと、
論理ブロックＩの出力を論理ブロック１の入力に接続し、さらにｍ＞１の各順序内でＩより大きい各論理ブロックＪ（すなわち、Ｉ＜Ｊ≦Ｎ）の入力に接続するステップと、
ＦＦＩの出力を、ｍ＞１の各順序内で２≦Ｊ≦Ｉである各論理ブロックＪに入力として接続するステップとをさらに含むことを特徴とする、請求項４に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項６】
前記再接続ステップが、
同じクロック・フェーズを、論理設計内の各順序の各ＦＦのクロック入力に接続するステップをさらに含むことを特徴とする、請求項５に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項７】
前記再接続ステップが、
論理設計内で動作するすべてのＦＦに接続されたクロック・フェーズとしてクロック・フェーズ１を選択するステップをさらに含むことを特徴とする、請求項６に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項８】
前記再接続ステップが、
シミュレータ／エミュレータへの入力用として論理設計内の論理ブロックおよびＦＦのコンピュータ化表現を生成するステップをさらに含むことを特徴とする、請求項６に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
【請求項９】
論理回路設計のシミュレーション／エミュレーションを実行するコンピュータ化システム用の論理変換方法において、
複数フェーズ・クロック・サイクル中にブロック出力がフリップフロップ（ＦＦ）に格納される複数フェーズ・クロック式論理設計の論理ブロック（元のブロック）を識別し、元の各ブロックからの出力を受け取るＦＦに印加されるクロック・フェーズ（複数も可）を元の各ブロックに関連付け、数値ｍが元の各ブロック用のクロック・フェーズの数のカウントであり、元の各ブロックのＦＦ（複数も可）に印加されるフェーズ（複数も可）用のフェーズ番号（複数も可）が元の各ブロックに関連する一連のｍ個のフェーズ番号であるステップと、
複数のフェーズ番号（ｍ＞１）からなる関連の順序を有する各論理ブロックごとにｍ−１個の論理ブロック（複数も可）を複製するが、ｍ＝１を有する元のブロックを複製するわけではなく、複数フェーズ論理設計内の元のブロックからの出力を受け取るＦＦ（複数も可）のうちの１つに出力を供給するために元の各ブロックと各複製ブロックが割り当てられるステップと、
ＦＦの出力（複数も可）を元の各ブロックとその複製論理ブロック（複数も可）の入力に接続し、そのブロックの出力をＦＦおよびその他のブロックに接続し、各クロック・サイクルの複数フェーズ中に複数フェーズ論理設計で設定されると思われるものと同じ値に同じクロック・サイクル内のＦＦを設定するステップとを含むことを特徴とする、論理変換方法。
【請求項１０】
前記接続ステップが、
元の論理ブロックに関連する論理ブロック構成内のＦＦの入力に元の各ブロックとその複製ブロック（複数も可）を並行してそれぞれ接続し、論理ブロック構成内の各ＦＦのクロック・フェーズを単一フェーズ・クロックに変更し、同一論理格納環境をシミュレートまたはエミュレートするための複数フェーズ論理設計の複数フェーズ・サイクル中に設定されたＦＦの状態と同等の状態に元の各ブロックに関連するすべてのＦＦを同じサイクル中に設定する単一フェーズ論理設計を得るステップをさらに含むことを特徴とする、請求項９に記載の論理回路設計のシミュレーション／エミュレーションを実行するコンピュータ化システム用の論理変換方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、論理回路設計をシミュレート／エミュレートするプログラムのためのコンピュータの実行効率を大幅に増加する方法を開示するものである。「シミュレーション」および「エミュレーション」という用語は、当技術分野では交換して使用される傾向があり、その区別は不明確である。したがって、本明細書では、どちらの用語も同じことを意味するものとして使用する。
【０００２】
【従来の技術】
ＶＬＳＩの論理設計は、シリコン・チップに製造した後では変更することができない。多くの現行ＶＬＳＩ設計は、単一のハードウェア・チップにパッケージ化された数百万個の論理ゲート回路を含んでいる。このような製造の前に回路設計に含まれるすべてのエラーを除去する高速かつ絶対確実な方法を見つけることは、現在の業界の能力にとって過大な負担であった。最終パッケージ後は変更不能なので、パッケージ化した論理回路設計には「バグ」がまったくないことが不可欠である。数百万個の論理回路を含む現行シリコン・チップ論理設計の例としては、ＩＢＭのＰｏｗｅｒＰＣチップや、ＩｎｔｅｌのＰｅｎｔｉｕｍチップがある。
【０００３】
複雑な論理設計のエラー（「バグ」）を見つける現在の方法は、コンピュータ・システム上または特殊な論理システム内でその設計をシミュレートまたはエミュレートし、既知の結果を有するシミュレート済み／エミュレート済みの設計と照らし合わせて処理する方法である。うまくいけば、製造前にすべてのバグが見つかるが、最新の履歴によれば、必ずそうなるわけではない。
【０００４】
シミュレータ／エミュレータは、シミュレータ／エミュレータ動作用に設計された特殊なコンピュータ・システムと、汎用コンピュータ・システムで実行されるソフトウェアとを含む。
【０００５】
一般に複雑な論理設計は多くのレベル（または層）の論理回路を含み、各レベルは次の論理レベルへの入力になる出力を供給する。一般に各論理レベルは次のレベルが使用するためにその出力を生成するが、どのレベルも外部データを受け取ることができる。設計内の論理ゲートの出力は、他の上位または下位の論理レベルにあるゲートに入力される前に１つまたは複数の論理レベルをスキップすることができる。論理ゲートによっては、外部データ入力しか受け取らないものもあれば、設計内の１つまたは複数の他のレベルにある１つまたは複数の他のゲートからの出力である入力を受け取るものもある。このため、論理ゲートは、それが入力を受け取るレベルの数によって分類することができる。
【０００６】
従来の論理設計は、一般に、多くの様々なレベルの論理ゲートで機能する。論理レベルは論理設計内のゲート間の入出力依存関係を制御するので、設計内の各種レベルは複数フェーズ・クロックの各種フェーズによってクロックする必要がない。
【０００７】
一般に、各種ゲート回路レベルからの出力を格納するためにラッチ回路を使用する。というのは、ラッチは、製造したハードウェア、たとえば、シリコン・チップで最も経済的な格納を行えるからである。フリップフロップは、ハードウェアとして製造するには高価なものであるが、コンピュータ・システム上でシミュレート／エミュレートするにはラッチほど高価ではない。フリップフロップは、クロック・サイクルの立上りまたは立下りエッジで設定され、その設定状態をその出力にただちに転送し、その後のクロック・サイクルの立上りまたは立下りエッジで変更されるまで、この出力状態を保持する。これに対して、ラッチは、各クロック・パルスが終了したときにどのような入力状態を受け取ってもそれを保持し、しかも次のクロック・パルスの終了までその状態を変更することができない。
【０００８】
したがって、シミュレート済み／エミュレート済み論理設計では、それぞれの論理レベルでその内部ゲートの出力を格納するためにフリップフロップを使用する。各種論理レベル用のフリップフロップは、論理設計内のレベル間で信号を伝播するための時間を見込んだ複数フェーズ動作で１つのクロックの各種フェーズによって制御される。
【０００９】
シミュレータ／エミュレータは、論理設計内の論理ゲートおよびフリップフロップの表現を使用する。しかし、シミュレータ／エミュレータは、想定入力データを使用する論理設計表現について一度に１つのフェーズしか実行しない。各論理レベルの実行によって結果が生成されるが、これは論理回路設計のそのレベル用のフリップフロップ表現に一時的に格納される。すべてのフリップフロップ出力表現の現行状態は、複数フェーズ動作のあらゆるフェーズによる使用のために使用可能になっている。
【００１０】
図３は、割り当てられたフェーズ・サイクルの開始時にそれぞれ設定（セット）されるフリップフロップからなるそれぞれのグループについて複数フェーズ・クロックを使用する従来の組合せ論理設計を非常に単純化して表している。図３は、１つの論理設計で使用するＮフェーズ・クロックのそれぞれのフェーズによって設定されるフリップフロップからなる個別のグループを示しているが、実際には、１つの論理設計内に任意のフェーズ・グループのフリップフロップを分散することができる。従来の論理設計用の複数フェーズ・クロックは図４に示す。各フェーズは同じサイクル期間を備えているが、各種フェーズの期間は互いにずらした時点から始まる。
【００１１】
一般に、シミュレータ／エミュレータは、論理回路設計内の各フェーズに割り当てられたフリップフロップの設定を計算するために個別のコンピュータ実行パスを作成するが、一般にこれはシミュレーション／エミュレーションを実行するための最も効率のよいやり方であることが判明している。すなわち、１つのフェーズ用の各コンピュータ・パスは、そのフェーズ用の次のサイクルの開始時にそのフェーズのフリップフロップ表現を設定することにより、関連の論理回路用の出力データを生成する。
【００１２】
ゲート回路レベルの数は、論理回路設計ごとに異なるので、クロック・フェーズの数も異なる。しかし、所与の論理回路設計内では、クロック・フェーズの数とレベルの数は一定である。
【００１３】
従来のシミュレータ／エミュレータは、論理回路設計内のクロック・フェーズと同じ数だけ、その論理回路設計を通過するコンピュータ実行パスを作成する。このような従来のコンピュータ・シミュレーション／エミュレーション動作は、図１に示す棒グラフで表される。この棒グラフのＹ軸はコンピュータ資源の使用の割合（％）を表す。Ｘ軸は時間を表す。Ｘ軸に沿ったそれぞれの棒は、コンピュータ資源が１つの動作を実行するための時間を表している。棒のＹ軸方向の高さが「全容量」に達する場合、その棒によって表されるコンピュータ動作は、その論理設計のシミュレーション／エミュレーションに使用可能なコンピュータ・システムのすべての資源を使用している。
【００１４】
また、図１のＸ軸は、論理回路設計用のそれぞれの動作フェーズ１、２、・・・Ｎに分割されている。図１の各フェーズの動作は、設計内のフリップフロップおよび論理回路用の入出力状態を表すためのコンピュータの計算を必要とする。各フェーズの計算は、その設計内の論理全体のうち、割り当てられたフェーズの開始時に設定されるフリップフロップだけに入力されるサブセット用の計算のみを含むことができる。しかし、１つのフェーズ用のこのような論理回路計算（その１つのフェーズに割り当てられたフリップフロップのみに入力を供給する）は、（すべてのフェーズについて）いずれかのフリップフロップの出力を表すデータ入力状態を受け取ることができる。
【００１５】
また、どの動作フェーズでも、同じ論理回路の一部または全部に外部データを入力することができる。
【００１６】
実際のハードウェア（その内部に論理設計が製造される）はクロック・フェーズ・サイクル１、２、・・・Ｎ（図４ではずらした状態で示す）で順次動作するが、コンピュータ・シミュレータ／エミュレータ資源はこのような時差方式では動作しない。論理設計のシミュレーション／エミュレーションの場合、コンピュータは、その設計用の次の動作フェーズのためのコンピュータの実行を開始する前に、各フェーズごとに別々に動作を計算する。
【００１７】
図１では、コンピュータによる単一処理動作用のフリップフロップが多すぎる論理設計を想定している。すなわち、多数のフリップフロップを論理回路への入力として使用することができ、その論理回路がフェーズ１の計算用の出力を生成する。この場合、その設計用に実行されるシミュレーション／エミュレーションに使用可能なコンピュータ資源による１つのコンピュータ動作でアクセスし処理すべきフリップフロップ状態が多すぎる可能性があるが、これはシミュレータ／エミュレータに関する一般的な問題である。たとえば、従来の論理設計のフェーズ１が１２０個のフリップフロップに格納された入力データを必要とし、それがコンピュータ・システムの主記憶装置に格納された２進データによって表されるものと想定する。論理ゲートの動作を処理するためにこのフェーズ１のデータを使用するには、コンピュータ・システムの主記憶装置から１２０通りのフリップフロップ表現データ状態を取り出す必要があり、この場合、単一コンピュータ実行動作で使用可能なコンピュータ資源によって実行されるアクセスが多すぎる可能性がある。たとえば、単一コンピュータ動作では、４０通りのフリップフロップ表現からなるサブセット用のデータしか得られないものと想定する。その場合、図１の３つのフリップフロップ棒のそれぞれは１つの想定コンピュータ内部動作を表し、４０通りのフリップフロップ表現用のそれぞれを総計すると、フェーズ１の実行動作で使用する１２０通りのフリップフロップ表現になるはずである。
【００１８】
フェーズ１の動作用に入力されるフリップフロップ表現データは、記憶域から取り出され、関連のフリップフロップに関連してタグが付けられる。次に、フェーズ１の動作用に表現された論理がこのデータを使って実行され、シミュレータ／エミュレータによるこのような論理演算は図１に一連の９個の「論理」棒によって表される（フェーズ１用の３つのフリップフロップ棒に続く）。各論理棒の高さは、設計内の１つの論理レベルを表すそれぞれのサブグループの論理回路によってそのデータに関する論理演算をシミュレートするためにコンピュータ動作中に使用するコンピュータ資源の割合を表す。
【００１９】
フェーズ１中に各論理演算（それぞれの論理棒によって表される）を実行すると、コンピュータは、フェーズ１のそれぞれのフリップフロップ用の新しい状態を表すために、論理演算の結果を格納する。このようなフェーズ１のフリップフロップ用に格納されたデータは、Ｎ個のフェーズのうちの他のフェーズ中に動作する論理回路用の入力として（他のフリップフロップ用に格納された状態とともに）使用可能になる。
【００２０】
図１の残りのフェーズのそれぞれをシミュレート／エミュレートするためのコンピュータ動作は、１つまたは複数のフリップフロップ棒から始まり、フリップフロップ・データを選択的に受け取るそれぞれのサブグループの論理回路による実行も表す９個の論理棒が続く。したがって、図１の各フェーズごとに、図示の各論理棒用のコンピュータ動作は、設計内の各種レベルのゲート回路用のものである。各フェーズの開始時にアクセスされるフリップフロップ・データ状態はそれぞれのフェーズ中に必要なデータであり、表されるフリップフロップは各種フェーズごとに同じである場合もあれば、異なる場合もある。
【００２１】
図１では、論理棒のＹ軸方向のサイズが変化し、コンピュータ動作の各フェーズ内で左から右に減少する。この変化は、一般にゲート論理のレベルの上昇につれて（それぞれの動作フェーズ用のフリップフロップ・データを生成する）論理ゲートの数が減少することによるが、これに対応して、それぞれの論理演算を実行するために使用するコンピュータ資源が減少する。
【００２２】
未使用のコンピュータ資源（各種レベルのコンピュータ論理回路動作中に使用しないもの）は、論理設計のシミュレーション／エミュレーション動作に予約されている場合、他のどのコンピュータ動作にも使用不能である。未使用のコンピュータ資源は、図１のＮ個のフェーズのそれぞれについて示した論理棒の上の空間によって図１に表され、使用可能資源のうちの未使用資源を表している。
【００２３】
したがって、図１は、Ｎ個のフェーズのそれぞれについて１回のコンピュータ実行を必要とする従来のコンピュータ動作を表しているが、各コンピュータ実行では、１つのシミュレート済みクロック・サイクル分の動作の結果を計算するためにシミュレート済み／エミュレート済み設計内のすべての論理を使用する。すなわち、各動作フェーズの結果を計算するためにＮ個のフェーズのそれぞれについて個別のコンピュータ実行が行われる。本発明では、各シミュレートされるクロック・サイクルの動作ごとにＮ個のフェーズのすべてのシミュレーション／エミュレーション動作を単一コンピュータ実行に圧縮する方法を発見した。
【００２４】
フェーズ２・・・Ｎのそれぞれには、フェーズ１の動作に必要なものと同じコンピュータ資源が割り当てられる。各フェーズは、そのデータを格納するためにそれ専用のフリップフロップを使用する。すなわち、各フェーズ用のフリップフロップは他のフェーズ用のフリップフロップとは異なる。各フェーズのフリップフロップの数は、他のフェーズのフリップフロップの数と同じである場合もあれば、異なる場合もある（図１では数が異なると想定している）。
【００２５】
図１では、各フェーズはそのフリップフロップによって格納されたデータを取り出すことによって始まるものと想定されている。したがって、フェーズ２は、フェーズ２のフリップフロップによって格納されたデータを取り出すことによって始まり、以下同様である。
【００２６】
いずれかのフェーズ用のフリップフロップ・データを受け取る論理回路は、他のフェーズ用のフリップフロップ・データを受け取る論理回路と同じである場合もあれば、異なる場合もある。任意のフェーズが使用する論理回路の数も、他のフェーズに使用する数と同じ場合もあれば、異なる場合もある（各フェーズごとに９個の論理棒の場合）。
【００２７】
コンピュータ・シミュレーション／エミュレーションにおけるフェーズ動作の数は、シミュレート／エミュレート中の論理設計内のハードウェア・クロック用のフェーズと同数になる。
【００２８】
一部のシミュレータ／エミュレータでは、フリップフロップ棒の間に論理棒を散在させることができるので、必要なフリップフロップ状態（フリップフロップ棒によって表される）は論理演算（論理棒によって表される）中に後でアクセスすることができ、フリップフリップ状態は、論理回路の計算動作によって使用される時点により接近した時点で取り出すことができる。
【００２９】
したがって、完了したシミュレーション／エミュレーション動作によって使用されるコンピュータ時間は、ハードウェア設計で提供されるクロック・フェーズの数に依存する。しかし、シミュレーション／エミュレーションの実行に必要な全時間は、シミュレーション／エミュレーションを実行するコンピュータ・システムの速度や資源などの多くの変数によって決まる。従来のシステムでは、複雑なプロセッサ用の完全なシミュレーション／エミュレーション動作は、数カ月分のコンピュータ時間を要することが分かっている。
【００３０】
不十分な資源（たとえば、各コンピュータ動作において所与の設計用の論理表現全体を処理するには不十分なメモリと入出力空間）しか備えていないコンピュータでは、複数のコンピュータ動作で処理すべき設計内の初期論理レベルが少なくとも必要である可能性がある。従来のシミュレータ／エミュレータ動作は、コンピュータの効率に限界があるために、論理ゲート回路が１００万個よりかなり少ない設計の処理に制限されていた。ハードウェア設計内の論理ゲート回路の数がシミュレータ／エミュレータの容量を上回る場合、そのハードウェア設計を別々にシミュレート／エミュレートされたセクションに分割することが必要であり、各セクションの個別のシミュレーションまたはエミュレーションの結果を統合して、ハードウェア設計全体の正確さを判定しようと試みると、問題が検出されていた。この統合動作の結果、特定の設計については間違った結論になっていた。したがって、数百万個の論理回路を含む論理回路設計全体について単一のシミュレーション／エミュレーションを実行できる場合は相当な利点が得られるので、従来のセクションごとのシミュレーション／エミュレーションでは監視不能な動作障害も監視できることに留意されたい。
【００３１】
従来のシミュレーション／エミュレーション・システムの実行は比較的低速であった。すなわち、そのシステムは、シミュレート／エミュレートしている最終的にパッケージ化したハードウェアより６〜８桁分遅い速度で動作する。これは、実世界の時間的制約内で数百万個の回路を有する設計について実行可能なシミュレーションの量を大幅に低減した特性の１つである。したがって、本発明は、既存のシミュレータ／エミュレータの変更を必要とせずに、既存のシミュレータ／エミュレータの使用速度を大幅に上げるという利点をもたらすものである。
【００３２】
本発明は、先に出願された米国特許出願第０８／２５３８８１号（ＰＯ９−９３−０４６）により構築されたエミュレータ・システムに非常に有利に適用され、その従来のシミュレータ／エミュレータより２〜３桁分速い速度で動作し、１０００万個以上の２入力論理ゲートを含む設計など、かなり大きい論理設計を処理することができる。
【００３３】
図１により、論理設計のシミュレーション／エミュレーション中に各動作フェーズを処理するには、特定の量のコンピュータ処理時間Ｐが必要であることが分かる。その場合、従来の論理設計用のシミュレーション／エミュレーション動作のＮ個のフェーズすべてからなる１つのサイクルを処理するための全時間Ｔは、Ｔ＝Ｎ＊Ｐになる。
【００３４】
【発明が解決しようとする課題および課題を解決するための手段】
図２は、本発明を使用する論理設計用のシミュレーション／エミュレーション動作の一例を表す棒グラフを示している。図２に使用するシミュレータ／エミュレータは、図１のものと同じであってもよい。
【００３５】
本発明の新規性は、シミュレータ／エミュレータにあるのではなく、シミュレーション／エミュレーションのためにコンピュータにそれを提示する前に論理設計を変更するための方法である。本発明による変更済みの論理設計は、元の複数フェーズ論理設計の代わりに、変更済みの論理設計のシミュレーション／エミュレーションのためにコンピュータに提示される。
【００３６】
本発明により論理設計に加えられた変更は、シミュレータ／エミュレータを変更せずにシミュレーション／エミュレーション動作の大幅な速度上昇を可能にし、コンピュータ化したシミュレータ／エミュレータが、論理設計が変更されていない場合に得られたはずのものと同じシミュレーション／エミュレーション結果を出力できるようにする。
【００３７】
本発明は、シミュレーションまたはエミュレーションの速度を最高Ｎ倍まで上げることができる。ただし、Ｎは、複数フェーズ・クロック式の所与の論理回路設計内のフェースの数である。たとえば、５フェーズ論理設計の従来のシミュレーション／エミュレーションが５週間分のコンピュータ動作を要していた場合、本発明を使用すると、１週間分のコンピュータ動作で済む可能性がある。すなわち、同一シミュレータ／エミュレータで本発明を使用することにより、最高４週間分のコンピュータ時間の節約になる。
【００３８】
したがって、本発明は、Ｎフェーズ・クロック式論理設計を同等の単一フェーズ・クロック式論理設計に変更する方法を提供するものであり、後者は以下の利点を得るためにコンピュータ化したシミュレーション／エミュレーション動作に提示される。すなわち、Ａ．コンピュータ動作コストの大幅な節約と、Ｂ．米国特許出願第０８／２５３８８１号（ＰＯ９−９３−０４６）に記載されたタイプの高速大容量エミュレータにおいてもシミュレーション／エミュレーション動作の速度上昇が可能である。
【００３９】
このため、本発明の一目的は、複数フェーズ・クロック式論理ゲートを使用する同等のハードウェア設計について得られるパフォーマンスに比べ、ハードウェア論理ゲート設計をモデル化する際のシミュレーション／エミュレーション動作のパフォーマンスを大幅に増加することにある。
【００４０】
本発明の特徴の１つは、複数フェーズ・ゲート論理設計を、その複数フェーズ論理設計と論理的に同一の単一フェーズ論理設計に変換し、シミュレータ／エミュレータ・パフォーマンスの改善を可能にする方法を提供することにある。変換した論理設計は、元の複数フェーズ設計をシミュレート／エミュレートするのに必要と思われる時間の何分の１かの間にシミュレート／エミュレートすることができる。
【００４１】
本発明の他の特徴は、複数フェーズ・ゲート論理設計を単一フェーズ・ゲート論理設計に変換する方法を提供することにある。この方法は、複数フェーズと単一フェーズ両方の同等の設計において同じ記憶回路（たとえば、フリップフロップ）を有効に使用し、両方の設計の同じ状態を格納する。複数フェーズ設計内の各論理ブロックでは、クロック・サイクル中にその論理ブロックに関連する１つまたは複数の記憶回路にその出力状態が捕捉されている。複数フェーズ設計を単一フェーズ設計に変換するには、回路変更が必要である。このような回路変更は、複数の関連記憶回路を有する論理ブロックの複製を必要とする。論理ブロックの複製は、元の複数フェーズ設計内の各論理ブロックに対応する論理ブロック構成内の異なるが同一の論理ブロック（元の論理ブロックまたは複製した論理ブロック）と各記憶回路との１対１の関係をもたらすために単一フェーズ・バージョンで必要な場合に行われる。この１対１の関係により、すべての同一論理ブロックは、複数フェーズ論理設計内の複数フェーズ・クロックの各サイクルの順次フェーズで行われるように順次ではなく、単一フェーズ・クロックの同一サイクル中に並行して、それぞれの出力を記憶回路に格納することができる。
【００４２】
変換した論理設計は、元の複数フェーズ設計をシミュレート／エミュレートするのに必要と思われる時間の何分の１かの間にシミュレート／エミュレートすることができる。
【００４３】
本発明の他の目的は、複数フェーズ論理設計を、論理的に同等で、かなり少ないコンピュータ時間を使用する複数フェーズ設計と同じシミュレーション／エミュレーション結果を生成するために同じ外部印加データを使用できる単一フェーズ論理設計に変換することにある。
【００４４】
本発明のプロセスは、受渡しされた論理設計をその入力として受け取る。一般にこの設計は、ＡＮＤゲート、ＯＲゲート、排他ＯＲゲート、反転ゲートなどの論理ゲート回路の形式になる。
【００４５】
本発明のプロセスは、従来の論理設計中で接続済みゲート回路のグループ（本明細書では「論理ブロック」と呼ぶ）を識別することによって始まる。論理ブロックは、本明細書では、複数のフェーズ・クロック時間の１つでその入力がトリガされるフリップフロップに単一信号出力を供給するようにまとまって動作する１つまたは複数のゲート回路を含むものとして定義する。論理設計によっては、このような論理ブロックとそれに対応するフリップフロップを数十万個含むものもある。別々のフェーズで動作するクロック・サイクルの開始時に関連論理ブロックの出力を格納するために、別々のフリップフロップがトリガされる。入力信号の２進状態はフリップフロップの出力に現れ、トリガ後のサイクルの何分の１かのわずかな時間にフリップフロップの状態を表す。次に、フリップフロップの新しい出力状態は、フリップフロップの出力に接続されたすべての回路の入力にただちに提示される。
【００４６】
論理設計内の論理ブロックの識別後、本発明の次のステップは、それぞれのクロック・フェーズ（複数も可）の開始時にブロックの出力をサンプリングする１つまたは複数のフリップフロップ（ＦＦ）を識別することである。ｍは、それぞれの論理ブロックに接続されたＦＦに関連するサンプリング・クロック・フェーズ（複数も可）の数である。一部のＦＦはＮ個のすべてのクロック・フェーズでサンプリングし、他のＦＦは全フェーズ（Ｎ個のフェーズのうちの一部であってもよい）のうちの１つだけでサンプリングし、他のＦＦはｍ個のフェーズでサンプリングする（ｍは１〜Ｎの数である）。１つのブロックに接続されたｍ個のＦＦのフェーズは、１〜Ｎの数値のうちの１つまたは複数をスキップすることができる。このため、このようなｍ個のＦＦは、そのフェーズ番号の順序で連続して番号が付けられていない可能性がある。番号付け順序は数値１から始まらない場合があり、ｍで終わらない場合もある。ブロックによっては単一フリップフロップのみでサンプリングされるものもあれば、複数のフリップフロップによってサンプリングされるものもある。
【００４７】
本発明では、ｍ＞１個のサンプリングＦＦを有する元の各論理ブロックを複製する（すなわち、ブロック出力は、複数のフェーズで動作する複数のＦＦによってサンプリングされる）。ｍ＝１個の元のブロックはそれぞれ、任意のフェーズにすることができる１つのフェーズのみでサンプリングされ、複製されない。したがって、ｍは、元の各ブロックとその複製ブロック（複数も可）を含むブロックの総数である。
【００４８】
ｍ＝１の場合はブロック複製が一切行われず（１つのサンプリングしたフェーズのみ）、ｍ＞１の場合はブロック複製が行われる。ｍの最大値はＮであり、これはその論理設計で使用するフェーズの総数である。
【００４９】
論理ブロックの複製は、同一ブロック表現を供給することにより、元の論理ブロックをｍ−１回複写することを含む。すなわち、元の各ブロックがｍ＞１である場合、そのブロックはｍ−１個の複製を有することになる。
【００５０】
元の各ブロックには最初にその最低フェーズのサンプリングＦＦのフェーズ番号が割り当てられる。この最初に割り当てられる番号は１〜Ｎの数値になる。元の論理設計内の元の各論理ブロックとその最低フェーズＦＦはブロック／ＦＦ対と見なすことができ、そのブロックとＦＦにはそれぞれそのＦＦのサンプリング・フェーズで番号が付けられる。番号が大きいフェーズを使用する他のサンプリングＦＦは、それぞれの複製論理ブロック（複数も可）の１つにそれぞれ関連付けられ、このブロックには最初に関連ＦＦの番号が与えられる。各複製ブロックとその関連ＦＦは、元の各ブロック用に用意されたｍ−１対の複製対のそれぞれに関する複製ブロック／ＦＦ対と見なすことができる。
【００５１】
それぞれの複製対のフリップフロップ表現は、新しいＦＦと見なすか、または変換した論理設計用に別のやり方で接続されている古いサンプリングＦＦと見なすことができる。
【００５２】
ｍ＞１の元の各ブロック用のすべての対は、最低番号の対（元の対）からその複製対（より大きい番号を有する）までそれぞれの関連フェーズに応じて順序付けられる。というのは、これらの対は、その関連サンプリング・フェーズの順に番号が付けられているからである。ｍ＞１の元の各ブロック用の一連の対に割り当てられた初期フェーズ番号は連続番号を有する必要はなく、この番号付けは１から始まる必要もない。ｍ＝１の元の各ブロックには１つの対しかないので、最初に番号１が付いている必要がない。
【００５３】
次にすべての順序について番号の付け直しが行われ、必ず１から始まり、必ず連続番号を使用し、ｍが最高番号になるような新しい番号になる。したがって、ｍ＝１の各対はブロック１として番号が付け直され、そのサンプリングＦＦはＦＦ１として番号が付け直される（これらはその後、フェーズ１でのみ動作することになる）。ｍ＞１の元の各対用の順序では、元のブロックはブロック１として番号が付け直され、そのＦＦはＦＦ１として番号が付け直される。また、その複製対（複数も可）は連続して番号が付け直され、２から始まり、ｍで終わる。このため、最低フェーズの元の対はブロック１／ＦＦ１として番号が付け直され、その順序の次の対はブロック２／ＦＦ２として番号が付け直され、Ｎを超えない番号ｍが付く、その順序の最後の対まで以下同様となる。
【００５４】
たとえば、元のブロックのその出力がフェーズ２、４、７で動作する３つのＦＦによってサンプリングされている場合、その元のブロックはｍ＝３になる。そのブロックの２つの複製ブロックはｍ−１＝２によって決定される。元のブロックと２つの複製ブロックは、最初に２、４、７という番号が付けられた３つの対からなる順序を形成する。その後、これらの対２、４、７は、連続番号１、２、３（必ず番号１から始まる）をそれぞれ割り当てることにより、番号が付け直される。このため、これらの対は、ブロック１／ＦＦ１、ブロック２／ＦＦ２、ブロック３／ＦＦ３として番号が付け直される。番号が付け直されたＦＦは新しいＦＦと見なすことができる（または変換した論理設計内で再接続されている古いＦＦと見なすことができる）。
【００５５】
この最終的な連続番号の付け直しにより、ブロック複製について前述したそれぞれの初期番号順序に見られる低から高への順序付けが維持される。最終的な番号の付け直しは、それぞれの「元のブロック／元のＦＦ」（元の設計で最低番号のフェーズでサンプリングされた対である）に１を割り当てる。各順序の対は、従来のフェーズ番号順序を維持しながら、１・・・ｍの連続番号が付け直される。その順序では、ＦＦ１でサンプリングされるブロック１は、元のブロックとその関連ＦＦである。また、その順序の各複製ブロックＩは２からｍの番号が付け直されるが、これは２≦Ｉ≦Ｎという式によって表される値の範囲内にある。
【００５６】
次にブロック接続が次のように再接続される。すなわち、論理ブロック１の出力はフェーズ１でＦＦ１の入力にサンプリングされ、ＦＦ１の出力はブロック１の入力に接続され、各複製ブロックＩに接続される（すなわち、２≦Ｉ≦Ｎ）。各複製ブロックＩの出力はＦＦＩの入力に接続される。また、複製ブロックＩの出力は論理ブロック１の入力に接続され、Ｉより大きい番号を有する各論理ブロックＪの入力に接続される（すなわち、Ｉ＜Ｊ≦Ｎ）。ＦＦＩの出力は、Ｉ以下の番号を有する各複製論理ブロックＪへの入力に接続される（すなわち、２≦Ｊ≦Ｉ）。最後に、すべてのＦＦ用のトリガ・クロック・フェーズはクロック・フェーズ１になる。
【００５７】
元の論理設計内のすべての論理ブロックにこの方法を適用すると、シミュレータ／エミュレータのパフォーマンスを増加するような変換済み論理設計が得られる。
【００５８】
【発明の実施の形態】
本発明は、電気論理回路用の変態プロセス（metamorphosis process）を提供するものであるが、このプロセスは、このような回路からなる論理設計のシミュレータ／エミュレータに入力を供給する際に有用であることが判明している。この変態は、ハードウェアにパッケージ化すべき論理設計の複数フェーズ形式と同一論理設計の単一フェーズ形式との間の論理設計の同等性を保持する。この単一フェーズ形式は、論理設計を完璧にするために必要な資源と時間を大幅に低減するために論理設計のシミュレータおよびエミュレータのパフォーマンスを大幅に増加することができると本発明により判明しているものである。
【００５９】
本発明の変態プロセスは元の複数フェーズ論理設計を含む電気回路を大幅に変更するが、論理設計の変換済み単一フェーズ・バージョンは、論理設計の評価をシミュレーションまたはエミュレーション資源をより効率よく使用して実行できるようにするために、元の設計と同じ論理演算を実行する。
【００６０】
図２は、シミュレータ／エミュレータ動作の各サイクル中に変換済み単一フェーズ論理設計によるコンピュータ資源の使い方を示している。それぞれの１フェーズ・サイクル（図２で期間１として示されている）中では、それぞれのＮフェーズ・サイクル（図１でも期間１として示されている）中に実行されるのと同じ論理関数が実行される。
【００６１】
図２の各単一フェーズ・サイクルは、図１のＮフェーズ・サイクル内の各フェーズ・サブサイクルよりいくらか長くなっている。しかし、各単一フェーズ・サイクルは、図１のＮフェーズ・サイクル１つ分の動作を含むＮ個のすべてのサブサイクルよりかなり短い。これは、図２では各単一フェーズ・サイクル中に変換済み論理設計内のすべてのフリップフロップ（ＦＦ）の状態がアクセスされるが、これに対して図１では、図１のＮフェーズ・サイクルのそれぞれのサブサイクル中に元の論理設計内のすべてのＦＦからなる１つのサブセットのみの状態にアクセスする必要があるからである。したがって、シミュレータ／エミュレータのそれぞれのフェーズの動作のために、それぞれのフェーズ中に使用するＦＦの状態だけにアクセスすればよいことになる。
【００６２】
また、図２では、シミュレートまたはエミュレート中のすべての論理レベルの論理回路およびＦＦについて、各単一フェーズ・サイクル中の実行が示されている。この実行は複製ブロック回路を含む。変換済み論理設計内の全体的な回路の数は複製ブロックの追加によって増加しているが、図１および図２の両方により、９通りのレベルの論理ブロック実行に関する９個の棒は１００％未満のコンピュータ資源が使用されることを表し、それは、複製によってコンピュータの動作速度が低下していないことを示していることに留意されたい。
【００６３】
図２では、８つのフリップフロップ棒のうちの７つが１００％のコンピュータ資源レベルで動作しているが、図１では、それより少ない数のフリップフロップ棒が各動作フェーズに示されている。これは、複数フェーズ動作ではそれぞれのフェーズ中に使用するＦＦのみが示されており、各フェーズの動作のサブサイクルはそれぞれのサブサイクル・フェーズ動作中にブロック出力によってトリガされるＦＦとブロックに入力されるＦＦを含むからである。複数フェーズ・サイクル当たりのすべてのフェーズについてグラフで示したすべてのＦＦ棒の合計は、使用したすべてのＦＦを表す単一フェーズ・サイクル内のＦＦ棒の総数と等しいかまたはそれを上回ることになる。この結果、シミュレーション／エミュレーションの各単一フェーズ・サイクル用の処理時間は、複数フェーズ動作のＮ個のサブサイクルのうちのいずれか１つよりわずかに長くなる可能性がある。しかし、各複数フェーズ・サイクル内のＮ個の複数フェーズ・サブサイクルのすべてのための全体的な処理時間は単一フェーズ・サイクルよりかなり長くなるが、必ずしもＮ倍（上限近似値である）も長くする必要はない。たとえば、５フェーズ論理設計の単一フェーズ変換は、元の５フェーズ論理設計に基づいて、複数フェーズ・シミュレーション／エミュレーションより３〜４倍（５倍ではない）高速でシミュレータ／エミュレータを動作させることができる。
【００６４】
図５、図６、図７、図８、および図９は、複数フェーズ論理設計（図５に示す）を同一論理設計の単一フェーズ形式（図９に示す）に変換するために本発明のプロセスで行われる回路変更の単純例を示している。この単純例は、本発明の動作を理解しやすくするためのものである。本発明の一般的な方法については図１０に表すが、それは好ましい実施例である。
【００６５】
本発明は、論理設計の複数フェーズ・バージョン（図５に表す）から同一論理設計の単一フェーズ・バージョン（図９に表す）への変態を行うものである。複数フェーズ・バージョンがハードウェアにパッケージ化された形式（たとえば、シリコン・チップ内に形成される回路）で使用するバージョンの論理設計になるとしても、本発明では、その動作速度が大幅に上昇するようにコンピュータ操作のシミュレータ／エミュレータに対して論理設計を表すために単一フェーズ形式（図９に示す）を使用する。しかし、単一フェーズ・バージョンによって行われたシミュレーションまたはエミュレーションで得られる結果が論理設計内の問題を示す場合、このような結果により、複数フェーズ・バージョンに加えた変更を示すことができる。
【００６６】
図５は、論理設計の複数フェーズ・バージョンを表すことによって、回路変態を開始する。これは、２つのクロック・フェーズ１および２によってフリップフロップ１２および１４に出力がクロックされる論理ブロック１１を有する。すなわち、論理ブロック１１の出力はクロック・フェーズ１でサンプリングされ、その時点でその出力Ｃがクロック・フェーズ１のフリップフロップ１２に格納される。フェーズ２では、ブロック１１からの別の出力Ｃ２がクロック・フェーズ２のフリップフロップ１４に格納される。
【００６７】
図６は、図５の複数フェーズ回路から図６に示す変更済み複数フェーズ回路への初期変換である第１の変態を示している。図７は、フェーズ１のＦＦ１４ａを挿入する、次の複数フェーズ回路変換を示している。図８は、単一フェーズ・バージョンを得るためのフェーズ２のＦＦの削除を示している。さらに図９は、フェーズ１のＦＦのみを含む、図８の単一フェーズ・バージョンを示している。本明細書で前述したように、複数フェーズ・バージョンから単一フェーズ・バージョンへのこの回路変換の効果により、本発明で変換した単一フェーズ・モデルは、同じ入出力データを使用する場合にシミュレーション／エミュレーション・コンピュータ内で、受け取った複数フェーズ・モデルより高速で動作できるようになる。回路変更プロセスが図５から図９までの順序で進行するにつれて、この回路変態は、複製論理ブロックを追加することと、非フェーズ１のＦＦにフェーズ１を再割当てすることと、それらの接続とを含む。図１０は、この変態中に行われる再接続を示している。
【００６８】
本発明の変換プロセス中に発生する各種回路バージョンの論理回路の同等性を理解しやすくするため、図５から図９までに発生する各種回路バージョンについて、その同等性の例を示す。ここでは単純にするため、図５の論理ブロック１１はＡＮＤゲートであると想定するが、実際の論理設計の論理ブロック１１は、かなり複雑で、多くのタイプの組合せ論理ゲートの接続を表す場合もある。同等性分析は以下の通りである。
【００６９】
図５のＡＮＤ論理ブロック１１は、入力Ａ、Ｂ、Ｅを有する。Ｅは外部入力である。ＡとＢは、それぞれクロック・フェーズ１のＦＦ１２とクロック・フェーズ２のフリップフロップ１４の初期出力状態である。クロック・フェーズ１では、以下のように、ＦＦ１２がブロック１１から出力される出力Ｃを格納する。
Ｃ＝Ａ＆Ｂ＆Ｅ
ＦＦ１２がクロック・フェーズ１で値Ｃをトリガ・インした後、その直後に値Ｃがフリップフロップ１２に格納され、そこから出力される。ただし、フェーズ１によるＦＦ１２のトリガはフェーズ２のＦＦ１４の出力Ｂに影響しないことに留意されたい。その後、次のクロック・フェーズ２が起こる前に、以下のように、ゲート１１の出力がＣ２になる。
Ｃ２＝Ｃ＆Ｂ＆Ｅ
次のフェーズ２では、ＦＦ１４がブロック１１から出力Ｃ２をトリガ・インし、その直後にＦＦ１４の出力がＣ２に変わる。ただし、フェーズ２のトリガ中、ＦＦ１２内の出力Ｃは影響を受けないことに留意されたい。
【００７０】
図６に示す次の変換済み回路では、複製ゲート１３が設けられ、図示のように接続されている。フェーズ１後、図５に示すように、ゲート１１の出力ＣがＦＦ１２にトリガ・インされる。
Ｃ＝Ａ＆Ｂ＆Ｅ
しかし、図６では、次のクロック・フェーズ２の前に、ゲート１３の出力がＣ２になる。
Ｃ２＝Ｃ＆Ｂ＆Ｅ
次のフェーズ２サイクルでは、ゲート１３の出力Ｃ２がＦＦ１４にトリガ・インされ、ＦＦ１４の出力をＢからＣ２に変更する。ただし、フェーズ２中、フリップフロップ１２の出力Ｃは影響を受けないことに留意されたい。
【００７１】
図７に示す次の回路変換では、フェーズ１のＦＦ１４ａがフェーズ２のＦＦ１４の出力とブロック１３の入力との間に置かれている。図６に示すように、ブロック１１の出力ＣはＦＦ１２内に設定される。
Ｃ＝Ａ＆Ｂ＆Ｅ
第１のフェーズ１サイクルも、ＦＦ１４からの信号ＢをＦＦ１４ａ内に設定する。その直後に出力Ｂはブロック１３への入力としてＦＦ１４ａによって供給され、ＣもＦＦ１２からブロック１３に入力される。次にブロック１３はＣ２を出力する。
Ｃ２＝Ｃ＆Ｂ＆Ｅ
次のフェーズ２サイクルでは、ブロック１３の出力Ｃ２がＦＦ１４内に設定される。
【００７２】
図８は、先行値ＢがＦＦ１４ではなくＦＦ１４ａに格納されるように、フェーズ２のＦＦ１４の除去を示している。値Ｂはゲート１３から図７のＦＦ１４にトリガ・インされる先行出力だったので、図８では次のフェーズ１サイクルでブロック１３からＦＦ１４ａにトリガ・インされる。
【００７３】
図９は、図８に示すものと同じ論理を備えているが、除去されたＦＦ１４を含まずに示されている。ブロック１３からの初期出力Ｂがブロック１１への直接入力なので、ＦＦ１２がブロック１１からの出力Ａを格納すると、その直後にブロック１１がＣを出力することを理解しておくことは重要である。
Ｃ＝Ａ＆Ｂ＆Ｅ
ブロック１３からの出力Ｂは、ＣがＦＦ１２に格納されるのと同時にＦＦ１４ａに格納されるので、その直後にＦＦ１４ａは、同一フェーズ１サイクルの後半でＣ２を出力する。
Ｃ２＝Ｃ＆Ｂ＆Ｅ
次のフェーズ１サイクルでは、ＦＦ１４ａがブロック１３からのＣ２を格納し、Ｃ２は、そのフェーズ１サイクルの残りの期間中、ブロック１３の出力にとどまっている。
【００７４】
複数フェーズ・バージョンのＮ個のフェーズ内の状態と論理設計の変換済み単一フェーズ・バージョン内の状態との同等性を認識することは、本発明の不明確な属性の１つである。
【００７５】
図１０は、本発明の一般的な方法の流れ図を示している。そのステップ１０１は、設計を検証してその回路の論理構造内の問題を検出するためにシミュレート／エミュレートすべき複数フェーズ論理設計を用意することを含む。このような論理設計は、ＦＦにトリガ・インされる出力を有する論理ブロックを形成する、ＡＮＤ、ＯＲ、排他ＯＲ、反転などの論理ゲート回路を含む。
【００７６】
ステップ１０２は、すべての論理回路と、論理設計内でのそれらの相互接続およびそれぞれの複数フェーズ・クロック・フェーズへの接続とを示すコンピュータ表現を生成することを含む。
【００７７】
ステップ１０３は、論理設計全体にわたって本明細書で「論理ブロック」と呼ばれるゲート回路のグループを識別する。「論理ブロック」は、本明細書では、接続され、事前定義クロック・フェーズで単一フリップフロップにその状態が格納される単一出力信号を供給するようにまとまって動作する１つまたは複数のゲート回路を含むものとして定義する。論理設計によっては、このような論理ブロックとそれに対応するフリップフロップを数十万個含むものもある。別々のフェーズで動作するクロック・サイクル中の様々な時点で関連論理ブロックの出力を格納するために、別々のクロック・フェーズによって別々のフリップフロップをトリガすることができる。各ＦＦは１つのクロック・フェーズの立上り（または立下り）で２進信号状態を格納し、その直後にその信号をＦＦ出力に渡し、その出力からその状態を一部の論理ブロックへの入力として提示することができる。このＦＦ出力状態は、少なくとも同一フェーズの次のサイクルの開始後までにその接続論理ブロックの入力に提示される。また、フェーズの数Ｎが識別される。
【００７８】
ステップ１０４は、まず、どのブロックを複製する必要があるかを判定するが、その複製は、１つのブロックのコンピュータ表現のコピーを作成することによって行われる。どのブロックの複製が必要か、ならびにいずれかのブロックの複製がいくつ必要かを判定するために、論理設計内の各ブロックの出力をサンプリングするためにＦＦが使用するフェーズの数をカウントすることにより、各ブロックごとに数値「ｍ」が決定される。どのブロックも、任意の数Ｎのフェーズによってサンプリングすることができる。たとえば、８つのクロック・フェーズを使用する論理設計内のクロック・フェーズ２、４、７で動作するＦＦによって、ブロック出力をサンプリングすることができる。したがって、ブロックによってはＮ個のクロック・フェーズすべてでサンプリングできるものもあれば、全フェーズ（Ｎ個のフェーズのうちの一部であってもよい）のうちの１つだけでサンプリングできるものもあるが、すべてのブロックはｍ個のフェーズでサンプリングされる（ｍは１〜Ｎの数である）。それにより、各ブロックには、１〜Ｎの範囲内の１つまたは複数の番号からなる順序が割り当てられる。
【００７９】
さらにステップ１０４は、受け取った複数フェーズ論理設計内の各ブロックごとに、値ｍが１と等しい（ｍ＝１）か、またはｍが１より大きい（ｍ＞１）かを判定する。受け取った複数フェーズ論理設計内のブロックは、論理設計の単一フェーズ・バージョン内にのみ含まれる「複製ブロック」と区別するために、本明細書では「元のブロック」と呼ぶ。元のブロックだけがｍ個の値を有する。ｍ＝１の場合、その元のブロックについて複製は一切行われない。ｍ＞１の場合、その元のブロックについてｍ−１回の複製が行われる。元のブロックとその複製ブロックのそれぞれにはフェーズ番号が割り当てられるが、そのうち、元の各ブロックにはその最低番号のサンプリング・フェーズ（その出力を受け取るＦＦが使用するもの）の番号が割り当てられる。ｍ＝１の場合、元のブロックには（その唯一の接続ＦＦの）その唯一のサンプリング・フェーズの番号が割り当てられる。ｍ＞１の場合、そのｍ個のサンプリングＦＦすべてのフェーズ番号が使用されるが、最低サンプリング・フェーズ番号は元のブロックに割り当てられ、残りのｍ−１個のサンプリング・フェーズ番号はそのｍ−１個の複製ブロックに割り当てられる。このような割当て済み番号は、ｍ＞１の元の各ブロックをサンプリングするすべてのフェーズを含む順序を形成する。（すべてのＦＦが最終的にそのフェーズがフェーズ１に変更されるとしても、元のブロックおよびその複製ブロックと関連ＦＦとの間の相互接続を制御するために次のステップでこの順序を使用する。最終的に、順序内のｍ個のブロックは、番号１から始まり、ｍで終わるそれぞれの関連フェーズ番号からなる順序に連続して番号が付け直される。）
【００８０】
元の各ブロックとその最低フェーズＦＦは、そのブロックの最低番号サンプリングＦＦのサンプリング・フェーズで番号が付けられたブロック／ＦＦ対と見なすことができる。他の各サンプリングＦＦは（ｍ＞１の元の各ブロックごとに）、それぞれの複製論理ブロックに関連付けられ、この複製ブロックと同様に番号が付けられたＦＦは、元の各ブロック用に表されたｍ−１対の複製対のうちの複製ブロック／ＦＦ対と見なすことができる。（この最低番号対は、後でブロック１およびＦＦ１として番号が付け直される。）
【００８１】
各複製対の関連ＦＦは、受け取った論理設計内のＦＦの１つであると見なすことができる。しかし、このようなＦＦは、フェーズ１でのみ動作する新しいサンプリングＦＦであると見なすことができ、これは、論理設計の単一フェーズ・バージョンで古いサンプリングＦＦに置き換わるものである。
【００８２】
ステップ１０５では、複数対からなる各順序の番号が付け直され、新しい番号付けは番号１から各順序を開始する。ｍ＝１の各順序は単一対を有し、そのうちのブロックはブロック１として番号が付け直され、ＦＦはＦＦ１として番号が付け直される。ｍ＞１の各順序は１として番号が付け直された元の対を有し、各複製対は、既存の対の順序を維持しながら、連続して番号が付け直される。次の対は最低番号複製対として番号２から始まり、事前に決定したフェーズ順序で以下同様に番号が付けられる。したがって、最低フェーズの元の対はブロック１／ＦＦ１として番号が付け直され、順序内の最低複製対はブロック２／ＦＦ２として番号が付け直され、Ｎを超えない番号を有することになる順序内のｍ番目の対まで同様に番号が付け直される。
【００８３】
たとえば、元のブロックのその出力がフェーズ２、４、７で動作する３つのＦＦによってサンプリングされる場合、その元のブロックは、３というｍ値を有することになる。そのブロックは、ｍ−１＝２によって決定された２つのブロック複製を有する。元のブロックと２つの複製ブロックは、それぞれ元のＦＦ２、４、７を有する３つの対からなる順序を形成し、その３つの対は最初に２、４、７という番号が付けられる。次にこの３つの対は、連続番号１、２、３によってそれぞれ番号が付け直され、ブロック１／ＦＦ１、ブロック２／ＦＦ２、ブロック３／ＦＦ３という対を提供する。番号が付け直されたＦＦは新しいＦＦと見なすことができるか、または、本発明用の次の動作の定義を可能にするために単に１〜ｍに番号が付け直されただけの古いＦＦと見なすことができる。順序内の各複製ブロックＩは２〜ｍの番号が付け直された値を有するが、これは２≦Ｉ≦Ｎという式によって表される値の範囲内にある。その順序では、ＦＦ１によってサンプリングされたブロック１は元のブロックとその関連ＦＦである。
【００８４】
次にステップ１０５では、番号が付け直されたブロックと関連ＦＦが本発明の論理設計の単一フェーズ・バージョンになるように再位置決めされ再接続される。この番号付け直しにより、最後に説明した１〜ｍの連続番号付けが得られるが、これは次に、元の論理回路設計と論理的に同じである変換済み論理構成内でブロックと関連ＦＦを固有に再接続するために使用される。ブロック接続は以下の通りである。すなわち、論理ブロック１の出力はＦＦＩのフェーズトリガ入力に接続される。ＦＦ１の出力はブロック１の入力に接続され、さらに各複製ブロックの入力に接続される。ブロックＩの出力はＦＦＩのフェーズトリガ入力に接続される。また、論理ブロックＩの出力は論理ブロック１の入力に接続され、さらにＩより大きい各複製論理ブロックＪの入力に接続される（すなわち、Ｉ＜Ｊ≦Ｎ）。ＦＦＩの出力は各論理ブロックＪへの入力になる（すなわち、２≦Ｊ≦Ｉ）。
【００８５】
各ＦＦ用のトリガ・クロック・フェーズを同じクロック・フェーズ（好ましい実施例のフェーズ１である）に変更するような最終的なクロック・フェーズ再接続が行われる。論理設計内の任意のＦＦのトリガ・フェーズがフェーズ１に変更されていない場合、そのＦＦは除去されるかまたは迂回される。論理設計の変換済み単一フェーズ・バージョンは持続し、シミュレータ／エミュレータに入力すべき論理表現を生成するための基礎として使用される。
【００８６】
その所与の実施例に応じて本発明について詳細に説明してきたが、当業者であれば、本発明について多くの修正および変更を実施することができる。したがって、特許請求の範囲は、本発明の真の精神および範囲に該当するようなすべての修正および変更を含むものとする。
【００８７】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００８８】
（１）複数フェーズ論理回路設計用のシミュレーション／エミュレーション・プログラムを実行するために用意されたコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法において、複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、
複数フェーズ論理回路設計内の元の各論理ブロックを識別し、複数フェーズ論理設計内の各論理ブロックの出力をサンプリングする元の各フリップフロップ（ＦＦ）を識別し、複数のクロック・フェーズで出力をサンプリングする複数のＦＦを有する元の各論理ブロックを識別するステップと、
元の各ＦＦを、複数フェーズのうちでそのＦＦの入力をトリガする１つのフェーズに関連付けるステップと、
複数の元のＦＦによってサンプリングされたものとして識別された各論理ブロックを１回または複数回複製するステップであって、複製の回数が複数の関連ＦＦより１つ少ない数に等しいステップと、
元の各論理ブロックを複製論理ブロック（複数も可）および関連の元のＦＦに接続して、関連ＦＦの数に等しい複数のブロック出力を有する論理ブロック構成にし、関連ＦＦの複数フェーズ・クロック・トリガを論理ブロック構成用の単一フェーズ・クロック・トリガに変更し、複数フェーズ論理設計内のすべての動作フェーズの出力と同等の出力を単一の動作フェーズで供給するような単一フェーズ論理設計を得るステップとを含むことを特徴とする、論理変換方法。
（２）複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記接続ステップが、
各論理ブロック構成内の論理ブロックの出力を格納するために関連ＦＦの１つに各複製論理ブロックの出力を接続するステップをさらに含むことを特徴とする、上記（１）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（３）複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記複製ステップが、
１〜Ｎの範囲内の値を有する数値ｍを得るために元の論理ブロックの出力を受け取るすべてのＦＦ（複数も可）に接続されたすべてのクロック・フェーズをカウントし、Ｎが複数フェーズ論理設計内のクロック・フェーズの総数であり、数値ｍが元の各論理ブロックに関連付けられ、元の各論理ブロックがｍ＝１またはｍ＞１の値ｍを有するステップと、
ｍ＞１という値を有する元の各論理ブロックと同一の複製論理ブロックを供給するために元の各論理ブロックをｍ−１回複製するのであって、１と等しい数値ｍ（ｍ＝１）を有する元の論理ブロックを複製するわけではないステップとをさらに含むことを特徴とする、上記（２）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（４）複数フェーズ論理設計が元の論理ブロックと元のＦＦとを含み、前記複製ステップが、
元の各論理ブロックと任意の複製ブロック（複数も可）とからなるｍ個のブロックごとに昇順でフェーズ番号を割り当て、そのフェーズ番号が元の論理ブロックの出力を受け取るＦＦ（複数も可）に接続されたそれぞれのクロック・フェーズであり、そのＦＦ（複数も可）がそれぞれのクロック・フェーズによって最初に番号が付けられるステップと、
ｍ＝１タイプのブロック／ＦＦの順序とｍ＞１タイプのブロック／ＦＦの順序とを提供するために前記割当てステップによって割り当てられたフェーズ番号をそれぞれ置き換えるように、１〜ｍの連続接続番号を順番に再割当てするステップと、
各順序が、各順序内の最低番号として番号１が割り当てられた元の論理ブロック／ＦＦを含むステップとをさらに含むことを特徴とする、上記（３）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（５）前記再接続ステップが、
１〜ｍの各ブロック／ＦＦ順序内で各論理ブロックの出力を同じ割当て番号を有するＦＦの入力に接続し、そのＦＦの出力をその論理ブロックの入力に接続するステップと、
各論理ブロックＩの出力を、ｍ＞１の各順序内で１より大きい同じ割当て番号を有するＦＦの入力に接続するステップと、
論理ブロックＩの出力を論理ブロック１の入力に接続し、さらにｍ＞１の各順序内でＩより大きい各論理ブロックＪ（すなわち、Ｉ＜Ｊ≦Ｎ）の入力に接続するステップと、
ＦＦＩの出力を、ｍ＞１の各順序内で２≦Ｊ≦Ｉである各論理ブロックＪに入力として接続するステップとをさらに含むことを特徴とする、上記（４）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（６）前記再接続ステップが、
同じクロック・フェーズを、論理設計内の各順序の各ＦＦのクロック入力に接続するステップをさらに含むことを特徴とする、上記（５）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（７）前記再接続ステップが、
論理設計内で動作するすべてのＦＦに接続されたクロック・フェーズとしてクロック・フェーズ１を選択するステップをさらに含むことを特徴とする、上記（６）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（８）前記再接続ステップが、
シミュレータ／エミュレータへの入力用として論理設計内の論理ブロックおよびＦＦのコンピュータ化表現を生成するステップをさらに含むことを特徴とする、上記（６）に記載のコンピュータ化システム内のシミュレーション／エミュレーションの効率を高めるための論理変換方法。
（９）論理回路設計のシミュレーション／エミュレーションを実行するコンピュータ化システム用の論理変換方法において、
複数フェーズ・クロック・サイクル中にブロック出力がフリップフロップ（ＦＦ）に格納される複数フェーズ・クロック式論理設計の論理ブロック（元のブロック）を識別し、元の各ブロックからの出力を受け取るＦＦに印加されるクロック・フェーズ（複数も可）を元の各ブロックに関連付け、数値ｍが元の各ブロック用のクロック・フェーズの数のカウントであり、元の各ブロックのＦＦ（複数も可）に印加されるフェーズ（複数も可）用のフェーズ番号（複数も可）が元の各ブロックに関連する一連のｍ個のフェーズ番号であるステップと、
複数のフェーズ番号（ｍ＞１）からなる関連の順序を有する各論理ブロックごとにｍ−１個の論理ブロック（複数も可）を複製するが、ｍ＝１を有する元のブロックを複製するわけではなく、複数フェーズ論理設計内の元のブロックからの出力を受け取るＦＦ（複数も可）のうちの１つに出力を供給するために元の各ブロックと各複製ブロックが割り当てられるステップと、
ＦＦの出力（複数も可）を元の各ブロックとその複製論理ブロック（複数も可）の入力に接続し、そのブロックの出力をＦＦおよびその他のブロックに接続し、各クロック・サイクルの複数フェーズ中に複数フェーズ論理設計で設定されると思われるものと同じ値に同じクロック・サイクル内のＦＦを設定するステップとを含むことを特徴とする、論理変換方法。
（１０）前記接続ステップが、
元の論理ブロックに関連する論理ブロック構成内のＦＦの入力に元の各ブロックとその複製ブロック（複数も可）を並行してそれぞれ接続し、論理ブロック構成内の各ＦＦのクロック・フェーズを単一フェーズ・クロックに変更し、同一論理格納環境をシミュレートまたはエミュレートするための複数フェーズ論理設計の複数フェーズ・サイクル中に設定されたＦＦの状態と同等の状態に元の各ブロックに関連するすべてのＦＦを同じサイクル中に設定する単一フェーズ論理設計を得るステップをさらに含むことを特徴とする、上記（９）に記載の論理回路設計のシミュレーション／エミュレーションを実行するコンピュータ化システム用の論理変換方法。
【図面の簡単な説明】
【図１】先行技術の複数フェーズ方法を使用するコンピュータ・シミュレータ／エミュレータの動作を表す先行技術の棒グラフを示す図である。図１は、コンピュータによる複数動作フェーズのそれぞれについて、シミュレータ／エミュレータによるコンピュータ資源の使い方を時間の関数として示している。
【図２】本発明を使用する場合のコンピュータ・シミュレータ／エミュレータの動作を表す新規の棒グラフを示す図である。割り当てられたコンピュータ資源は、時間の関数として示された単一の動作フェーズ内でスケジューリングされる。
【図３】先行技術に見られる複数フェーズ・クロック式ハードウェア論理設計を示す単純表現である。これは、本発明を適用するための開始点として使用することができる。
【図４】Ｎフェーズ・クロック用の波形を示す図である。
【図５】本発明によって提供される変態プロセス内の開始点として本明細書で使用する従来の２フェーズ論理設計の単純な例を示す図であって、シミュレート／エミュレート・プロセスのパフォーマンスを大幅に増加するようにシミュレータ／エミュレータに入力を供給するための同等の単一フェーズ論理設計に従来の論理設計を変換するためのものである。
【図６】本発明の変態プロセスにおける図５の回路設計の初期変更形式を示す図であって、図５の論理設計を本発明によって提供される同等の単一フェーズ論理設計に変換するためのものである。
【図７】変態プロセスにおける次の変換ステップの結果を示す図であって、図６の論理設計を中間回路形式に変換するためのものである。
【図８】変態プロセスにおける他の変換ステップの結果を示す図であって、図７の論理設計をその論理設計の拡張形式に変換するためのものである。
【図９】本発明によって提供される変態プロセスにおける図５の複数フェーズ回路設計の最終的な単一フェーズ形式を示す図であって、その複数フェーズ論理設計を、その論理設計のシミュレータ／エミュレータ用の単一フェーズタイプの動作を可能にする形式に変換するためのものである。
【図１０】本発明の変態プロセスの一般的な流れ図である。
【符号の説明】
１１  論理ブロック
１２  クロック・フェーズ１のフリップフロップ
１３  論理ブロック２
１４  クロック・フェーズ２のフリップフロップ
Ａ  入力
Ｂ  入力
Ｃ  出力
Ｃ２  出力
【図１】
0003905951.tif 000002
【図２】
0003905951.tif 000003
【図３】
0003905951.tif 000004
【図４】
0003905951.tif 000005
【図５】
0003905951.tif 000006
【図６】
0003905951.tif 000007
【図７】
0003905951.tif 000008
【図８】
0003905951.tif 000009
【図９】
0003905951.tif 000010
【図１０】
0003905951.tif 000011