(57)【要約】【課題】論理エミュレーション装置の可変論理素子の使用効率を向上できる論理回路最適化方法を提供する。【解決手段】クラスタ長が予め定められたクラスタ長を超えるクラスタＣに、分割フリップフロップＦＦ２を挿入する。フリップフロップを挿入したクラスタＣに対して、再クラスタリングを行い、細分化したクラスタＣ１，Ｃ２を得る。論理エミュレーション装置の可変論理素子（例えば、ＦＰＧＡ）にクラスタを割り付ける際の自由度を向上できる。【選択図】  図４
2004246402.tif 000002
【特許請求の範囲】
【請求項１】
入力された論理回路情報に対してクラスタリングを行うクラスタリングステップと、
前記クラスタリングにより得られたクラスタのうち、クラスタ長が予め定められたクラスタ長を超えるクラスタに、フリップフロップを挿入する挿入ステップと、
前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行う再クラスタリングステップと、を含む、論理回路最適化方法。
【請求項２】
前記挿入ステップは、
前記クラスタリングにより得られた前記クラスタのクラスタ長を測定するクラスタ長測定ステップと、
前記クラスタリングにより得られた前記クラスタの中から、クラスタ長が前記予め定められたクラスタ長を超えるクラスタを選択するクラスタ選択ステップと、
クラスタ長が前記予め定められたクラスタ長を超える前記クラスタに、フリップフロップを挿入するフリップフロップ挿入ステップと、を含み、
前記再クラスタリングにより得られたクラスタに、クラスタ長が前記予め定められたクラスタ長を超えるクラスタが存在する場合、前記フリップフロップ挿入ステップ、及び、前記再クラスタリングステップ、による処理を行う、請求項１記載の論理回路最適化方法。
【請求項３】
前記クラスタリングおよび前記再クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、前記可変論理素子に収まらないクラスタに、フリップフロップを挿入するステップと、
前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行うステップと、をさらに含む、請求項１又は２記載の論理回路最適化方法。
【請求項４】
論理エミュレーション対象のメモリデバイスを実現するメモリデバイスを回路長で表すことにより、論理エミュレーション対象の前記メモリデバイスを論理回路に置き換えるステップ、をさらに含む、請求項１から３記載の論理回路最適化方法。
【請求項５】
前記回路長は、回路段数で表される、請求項４記載の論理回路最適化方法。
【請求項６】
前記回路長は、信号の伝搬時間で表される、請求項４記載の論理回路最適化方法。
【請求項７】
前記クラスタ長は、回路段数で表される、請求項１から６記載の論理回路最適化方法。
【請求項８】
前記クラスタ長は、信号の伝搬時間で表される、請求項１から６記載の論理回路最適化方法。
【請求項９】
クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、前記可変論理素子に収まらないクラスタに、フリップフロップを挿入するステップと、
前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行うステップと、を含む、論理回路最適化方法。
【請求項１０】
挿入する前記フリップフロップの動作クロックの周波数は、前記フリップフロップの挿入の対象になった前記クラスタに含まれるフリップフロップの動作クロックの周波数より高い、請求項１から９記載の論理回路最適化方法。
【請求項１１】
ハードウェア記述言語におけるモジュールに含まれる演算素子の数を算出するステップと、
予め定められた値より演算素子の数が多いモジュールに、フリップフロップを表すハードウェア記述言語を挿入するステップと、を含む、論理回路最適化方法。
【請求項１２】
入力された論理回路情報に対してクラスタリングを行うクラスタリング手段と、
前記クラスタリングにより得られたクラスタのうち、クラスタ長が予め定められたクラスタ長を超えるクラスタに、フリップフロップを挿入する回路分割手段と、を備え、
前記クラスタリング手段は、前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行う、論理回路最適化装置。
【請求項１３】
前記クラスタリングにより得られた前記クラスタのクラスタ長を測定するクラスタ長測定手段と、
前記クラスタリングにより得られた前記クラスタの中から、前記予め定められたクラスタ長を超えるクラスタを選択するクラスタ選択手段と、をさらに備え、前記再クラスタリングにより得られたクラスタに、前記予め定められたクラスタ長を超えるクラスタが存在する場合、前記回路分割手段は、当該クラスタに、フリップフロップを挿入する、請求項１２記載の論理回路最適化装置。
【請求項１４】
前記回路分割手段は、前記クラスタリングおよび前記再クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、前記可変論理素子に収まらないクラスタに、フリップフロップを挿入し、
前記クラスタリング手段は、前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行う、請求項１２又は１３記載の論理回路最適化装置。
【請求項１５】
論理エミュレーション対象のメモリデバイスを実現するメモリデバイスを回路長で表すことにより、論理エミュレーション対象の前記メモリデバイスを論理回路に置き換える置換手段、をさらに備える、請求項１２から１４記載の論理回路最適化装置。
【請求項１６】
前記回路長は、回路段数で表される、請求項１５記載の論理回路最適化装置。
【請求項１７】
前記回路長は、信号の伝搬時間で表される、請求項１５記載の論理回路最適化装置。
【請求項１８】
前記クラスタ長は、回路段数で表される、請求項１２から１７記載の論理回路最適化装置。
【請求項１９】
前記クラスタ長は、信号の伝搬時間で表される、請求項１２から１７記載の論理回路最適化装置。
【請求項２０】
クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、前記可変論理素子に収まらないクラスタに、フリップフロップを挿入する回路分割手段と、
前記フリップフロップを挿入した前記クラスタに対して、再クラスタリングを行うクラスタリング手段と、を備える、論理回路最適化装置。
【請求項２１】
挿入する前記フリップフロップの動作クロックの周波数は、前記フリップフロップの挿入の対象になった前記クラスタに含まれるフリップフロップの動作クロックの周波数より高い、請求項１２から２０記載の論理回路最適化装置。
【請求項２２】
ハードウェア記述言語におけるモジュールに含まれる演算素子の数を算出する演算素子数算出手段と、
予め定められた値より演算素子の数が多いモジュールに、フリップフロップを表すハードウェア記述言語を挿入するモジュール分割手段と、を備える、論理回路合成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、半導体集積回路の論理検証を行う論理エミュレーション装置に与える回路情報を生成するための論理回路最適化方法およびその関連技術に関する。
【０００２】
【従来の技術】
近年のＬＳＩ（ｌａｒｇｅ  ｓｃａｌｅ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）の大規模化によって、ソフトウェア・シミュレーションによる論理回路の検証が不可能になってきている。
【０００３】
そこで、ハードウェアによる回路動作を再現（エミュレーション）する論理エミュレーション装置が実用化されている。
【０００４】
論理エミュレーション装置には、大きく分けて２つのタイプがある。
１つは、多数のプロセッサを搭載して、強力な計算能力でエミュレーションするプロセッサ型論理エミュレーション装置である。
【０００５】
もう１つは、ＦＰＧＡ型論理エミュレーション装置であり、ユーザが自在に回路動作を変えることができるＦＰＧＡ（Ｆｉｌｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のようなプログラマブル・デバイス（可変論理素子）を多数搭載して、論理動作をエミュレーションする。
【０００６】
従来のＦＰＧＡ型エミュレーション装置の一例として、特許文献１に開示されているものがある。
【０００７】
図１９に示すように、この従来の論理エミュレーション装置１００は、ロジックチップ１０１〜１０３、メモリモジュール１０４、ユーザ指定チップ１０５、及び、相互接続チップ１０６、からなる。
【０００８】
ロジックチップ１０１〜１０３の各々がＦＰＧＡである。メモリモジュール１０４は、メモリデバイスをエミュレーションする。ユーザ指定チップ１０５は、ユーザが任意に使用するＬＳＩなどのハードウェアＩＰ（ｉｎｔｅｌｌｅｃｔｕａｌ  ｐｒｏｐｅｒｔｙ）である。
【０００９】
相互接続チップ１０６は、ロジックチップ１０１〜１０３、メモリモジュール１０４、及び、ユーザ指定チップ１０５、を相互に接続する。この相互接続チップ１０６は、各チップ間をクロスバースィッチ構成で接続する。
【００１０】
ここで、特許文献１に開示されている、ＦＰＧＡに回路を割り付ける際に行われる基本的手法について説明する。
【００１１】
論理回路は、基本的に、フリップフロップと、これらフリップフロップ間を接続する組み合わせ回路と、からなっている。
【００１２】
このため、ＦＰＧＡへの論理回路の割り付けは、クラスタ単位で行われる。ここで、クラスタとは、フリップフロップの入力端子から前段のフリップフロップ（単数の場合もあるし、複数の場合もある。）の出力端子に向かって存在する組み合わせ回路と、当該フリップフロップと、から構成される回路群である。そして、クラスタを抽出する行為を、クラスタリングと呼ぶ。
【００１３】
クラスタリングについて、図面を用いて説明する。
図２０は、クラスタリングの説明図である。図２０（ａ）は、クラスタリング前の論理回路の概念図、図２０（ｂ）は、クラスタリング後の論理回路の概念図、である。
【００１４】
図２０（ａ）では、フリップフロップＦＦ０からフリップフロップＦＦ１，ＦＦ２へ接続する回路構成例を示している。フリップフロップＦＦ０とフリップフロップＦＦ１，ＦＦ２とは、組み合わせ回路により接続される。
【００１５】
この図２０（ａ）の回路構成例において、クラスタリングを行うと、図２０（ｂ）に示すように、クラスタ１０７とクラスタ１０８とが作成される。
【００１６】
クラスタ１０７は、組み合わせ回路１０９及びフリップフロップＦＦ１からなる。クラスタ１０８は、組み合わせ回路１１０及びフリップフロップＦＦ２からなる。
【００１７】
このようなクラスタリングを、与えられた回路中に存在する全フリップフロップに対して実施する。このようにして作成されたクラスタをＦＰＧＡに割り付けていく。
【００１８】
図２１は、ＦＰＧＡに割り付けられたクラスタの例示図である。図２１に示すように、クラスタリング後に、クラスタ１１１がＦＰＧＡ１１２に割り付けられる。
【００１９】
さて、クラスタ単位でＦＰＧＡに論理回路を割り付けていく手法は、レンツ・ルールで示される、ＦＰＧＡのＩ／Ｏ（ｉｎｐｕｔ／ｏｕｔｐｕｔ）数の不足問題を回避する目的がある。
【００２０】
レンツ・ルールとは、１９６０年にＩＢＭのＥ．Ｆ．Ｒｅｎｔ氏によって提唱された、論理設計におけるＩ／Ｏピン（ブロックのピンを含む）と回路規模との関係を示した法則である（ｈｔｔｐ：／／ｗｗｗ．ｃｅｄｃｃ．ｐｓｕ．ｅｄｕ／ｅｅ４９７ｉ／ｒｅｎｔｓ＿ｒｕｌｅ．ＰＤＦ）。
【００２１】
次式が、レンツ・ルールの関係式である。
【数１】
2004246402.tif 000003
（数１）において、「Ｎｐ」は、Ｉ／Ｏピン数、「Ｎｇ」は、回路規模（回路（ゲート）数）、を示す。「Ｘ」は、Ｒｅｎｔ定数、「Ｋｐ」は、比例定数、である。
【００２２】
つまり、レンツ・ルールによれば、Ｉ／Ｏピン数は、回路規模の指数倍の関係で増える。
【００２３】
【特許文献１】
特開２０００−３６７３７号公報（第１図）
【００２４】
【発明が解決しようとする課題】
今日の半導体プロセスの微細化に伴い、ＬＳＩがますます大規模化しており、ＦＰＧＡへの論理回路の割り付けが難しくなってきている。
【００２５】
一方、ＬＳＩの高速動作も求められており、フリップフロップ間の回路段数はそのまま、または削減される傾向にあるが、組み合わせ回路の並列度は広がっている。
【００２６】
このため、クラスタリングを行っても、論理回路がＦＰＧＡに適切に割り付けられないことが発生している。
【００２７】
例えば、ＦＰＧＡに配置しようとするクラスタが、当該ＦＰＧＡに配置可能な残りの回路規模より大きい場合、そのクラスタは、当該ＦＰＧＡに配置されず、他のＦＰＧＡに配置されることになる。
【００２８】
この場合、ＦＰＧＡの使用効率が低下することになり、論理エミュレーション装置で取り扱える回路規模が小さくなるとう問題が生じる。
【００２９】
また、ＦＰＧＡの使用効率が低いと、割り付けられる回路密度が小さくなるため、各回路間の信号遅延が大きくなる。
【００３０】
このため、信号遅延が付加され、動作速度つまりエミュレーション速度が低下するという問題が生じる。
【００３１】
そこで、本発明は、論理エミュレーション装置の可変論理素子の使用効率を向上できる論理回路最適化方法及びその関連技術を提供することを目的とする。
【００３２】
【課題を解決するための手段】
請求項１記載の論理回路最適化方法では、入力された論理回路情報に対してクラスタリングを行うクラスタリングステップと、クラスタリングにより得られたクラスタのうち、クラスタ長が予め定められたクラスタ長を超えるクラスタに、フリップフロップを挿入する挿入ステップと、フリップフロップを挿入したクラスタに対して、再クラスタリングを行う再クラスタリングステップと、を含む。
【００３３】
この構成によれば、クラスタ長の長いクラスタにフリップフロップが挿入されるため、クラスタ長の長いクラスタが、クラスタ長の短い複数のクラスタに分割される。
【００３４】
このため、論理エミュレーション装置の可変論理素子（例えば、ＦＰＧＡ）にクラスタを割り付ける際の自由度が高くなる。
【００３５】
また、レンツ・ルールが示すような可変論理素子のＩ／Ｏピン数によるゲート搭載の非効率化が発生しないため、可変論理素子の使用効率を向上できる。
【００３６】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【００３７】
請求項２記載の論理回路最適化方法では、挿入ステップは、クラスタリングにより得られたクラスタのクラスタ長を測定するクラスタ長測定ステップと、クラスタリングにより得られたクラスタの中から、クラスタ長が予め定められたクラスタ長を超えるクラスタを選択するクラスタ選択ステップと、クラスタ長が予め定められたクラスタ長を超えるクラスタに、フリップフロップを挿入するフリップフロップ挿入ステップと、を含み、再クラスタリングにより得られたクラスタに、クラスタ長が予め定められたクラスタ長を超えるクラスタが存在する場合、フリップフロップ挿入ステップ、及び、再クラスタリングステップ、による処理を行う。
【００３８】
この構成によれば、予め定められたクラスタ長を超えるクラスタについては、漏れなくフリップフロップが挿入されるため、最適化をより一層図ることができる。
【００３９】
請求項３記載の論理回路最適化方法では、クラスタリングおよび再クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、可変論理素子に収まらないクラスタに、フリップフロップを挿入するステップと、フリップフロップを挿入したクラスタに対して、再クラスタリングを行うステップと、をさらに含む。
【００４０】
この構成によれば、論理エミュレーション装置に割り付ける論理回路のより一層の最適化を図ることができる。
【００４１】
請求項４記載の論理回路最適化方法では、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスを回路長で表すことにより、論理エミュレーション対象のメモリデバイスを論理回路に置き換えるステップ、をさらに含む。
【００４２】
この構成によれば、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【００４３】
請求項５記載の論理回路最適化方法では、回路長は、回路段数で表される。
【００４４】
この構成によれば、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスが回路段数で表されるため、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【００４５】
請求項６記載の論理回路最適化方法では、回路長は、信号の伝搬時間で表される。
【００４６】
この構成によれば、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスが信号の伝搬時間で表されるため、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【００４７】
請求項７記載の論理回路最適化方法では、クラスタ長は、回路段数で表される。
【００４８】
この構成によれば、回路段数の多いクラスタにフリップフロップが挿入されるため、回路段数の多いクラスタが、回路段数の少ない複数のクラスタに分割される。
【００４９】
このため、可変論理素子にクラスタを割り付ける際の自由度が高くなり、可変論理素子の仕様効率の向上を図ることができる。
【００５０】
請求項８記載の論理回路最適化方法では、クラスタ長は、信号の伝搬時間で表される。
【００５１】
この構成によれば、信号の伝搬時間が長いクラスタにフリップフロップが挿入されるため、信号の伝搬時間が長いクラスタが、信号の伝搬時間が短い複数のクラスタに分割される。
【００５２】
このため、可変論理素子にクラスタを割り付ける際の自由度が高くなり、可変論理素子の仕様効率の向上を図ることができる。
【００５３】
請求項９記載の論理回路最適化方法では、クラスタリングを行った後の論理回路情報に含まれるクラスタを、論理エミュレーション装置の可変論理素子に割り付ける際に、可変論理素子に収まらないクラスタに、フリップフロップを挿入するステップと、フリップフロップを挿入したクラスタに対して、再クラスタリングを行うステップと、を含む。
【００５４】
この構成によれば、可変論理素子（例えば、ＦＰＧＡ）に収まらないクラスタにフリップフロップが挿入されるため、可変論理素子に収まらないクラスタが、クラスタ長の短い複数のクラスタに分割される。
【００５５】
このため、クラスタ長の短いクラスタを、可変論理素子に割り付けることができ、可変論理素子の使用効率を向上できる。
【００５６】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【００５７】
請求項１０記載の論理回路最適化方法では、挿入するフリップフロップの動作クロックの周波数は、フリップフロップの挿入の対象になったクラスタに含まれるフリップフロップの動作クロックの周波数より高い。
【００５８】
この構成によれば、フリップフロップを挿入後でも、挿入前と同様の動作速度を維持できる。
【００５９】
請求項１１記載の論理回路最適化方法では、ハードウェア記述言語におけるモジュールに含まれる演算素子の数を算出するステップと、予め定められた値より演算素子の数が多いモジュールに、フリップフロップを表すハードウェア記述言語を挿入するステップと、を含む。
【００６０】
この構成によれば、論理合成後のクラスタのクラスタ長が短くなるため、論理エミュレーション装置の可変論理素子（例えば、ＦＰＧＡ）にクラスタを割り付ける際の自由度が高くなる。
【００６１】
また、レンツ・ルールが示すような可変論理素子のＩ／Ｏピン数によるゲート搭載の非効率化が発生しないため、可変論理素子の使用効率を向上できる。
【００６２】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【００６３】
さらに、ハードウェア記述言語段階でフリップフロップを挿入するため、論理合成後にフリップフロップを挿入する場合より、高速に処理することができる。
【００６４】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
（実施の形態１）
【００６５】
図１は、本発明の実施の形態１における論理エミュレーションシステムのブロック図である。
【００６６】
図１に示すように、この論理エミュレーションシステムは、回路割付装置１、及び、論理エミュレーション装置２、を具備する。
【００６７】
論理エミュレーション装置２には、図示していないが、ＦＰＧＡ及びメモリデバイス等が搭載されている。また、ＦＰＧＡには、図示していないが、メモリデバイスが搭載されている。
【００６８】
ここで、ＦＰＧＡは、ユーザが自在に回路動作を変えることができる可変論理素子（プログラマブル・デバイス）の一例である。
【００６９】
論理エミュレーション装置２として、例えば、図１９の論理エミュレーション装置を使用できる。
【００７０】
図２は、図１の回路割付装置１のブロック図である。なお、図２において、図１と同様の部分については、同一の符号を付している。
【００７１】
図２に示すように、図１の回路割付装置１は、論理回路合成装置９、論理回路最適化装置８、及び、ＦＰＧＡ割付装置１０、を含む。
【００７２】
論理回路合成装置９は、論理合成を行い、ハードウェア記述言語（ＨＤＬ：ｈａｒｄｗａｒｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｌａｎｇｕａｇｅ）３から論理回路情報４を生成する。
【００７３】
ハードウェア記述言語３は、機能レベルで論理回路を記述するための言語であり、例えば、Ｖｅｒｉｌｏｇ−ＨＤＬ、あるいはＶＨＤＬなど、である。
【００７４】
論理回路情報４は、ゲート・レベルで論理回路を記述した情報であり、例えば、ネットリストである。
【００７５】
図３は、図２の論理回路最適化装置８のブロック図である。図３に示すように、論理回路最適化装置８は、クラスタリング手段８０、クラスタリング論理回路情報記憶手段８１、クラスタ長測定手段８２、クラスタ長記憶手段８３、クラスタ選択手段８４、回路分割手段８５、回路分割論理回路情報記憶手段８６、クラスタ長判定手段８７、最適化論理回路情報生成手段８８、及び、最適化論理回路情報記憶手段８９、を含む。
【００７６】
クラスタリング手段８０は、論理回路合成装置９が生成した論理回路情報４の中からフリップフロップを検索し、全てのフリップフロップに対して、クラスタリング処理を行う。
【００７７】
より具体的には、クラスタリング手段８０は、現在選択しているフリップフロップの入力端子から前段のフリップフロップ（単数の場合もあるし、複数の場合もある。）の出力端子に向かって組み合わせ回路を探索して、現在選択しているフリップフロップ及び探索した組み合わせ回路で構成されるクラスタを抽出する。
【００７８】
さて、クラスタリング論理回路情報記憶手段８１は、クラスタリング後の論理回路情報４（以下、「クラスタリング論理回路情報」と呼ぶ。）を記憶する。
【００７９】
クラスタ長測定手段８２は、クラスタリング論理回路情報記憶手段８１に記憶された全てのクラスタのクラスタ長を測定する。
【００８０】
ここで、クラスタ長は、例えば、回路段数で表すことができる。
また、クラスタ長は、例えば、クラスタを信号が伝搬する際の伝搬時間で表すことができる。
【００８１】
クラスタ長記憶手段８３は、クラスタ長測定手段８２が測定したクラスタ長を、各クラスタと関連づけて記憶する。
【００８２】
クラスタ選択手段８４は、クラスタ長記憶手段８３を参照して、クラスタ長が規定値を超えているクラスタを選択する。
【００８３】
ここで、上記の規定値は、全クラスタ長の平均値としたり、あるいは、論理エミュレーション装置２に最適な値としたり、などユーザが任意に指定できる。
【００８４】
回路分割手段８５は、クラスタ長が規定値を超えるクラスタの組み合わせ回路を分割するフリップフロップ（以下、「分割フリップフロップ」と呼ぶ。）を挿入する。
【００８５】
なお、クラスタ長が規定値を超えるクラスタが複数存在する場合もあるが、この場合でも、クラスタ長が規定値を超える全てのクラスタに分割フリップフロップを挿入する。
【００８６】
回路分割手段８５による処理を具体例を挙げながら説明する。
図４は、回路分割手段８５による処理の例示図である。図４（ａ）は、回路分割前のクラスタを示し、図４（ｂ）は、回路分割後のクラスタを示している。
【００８７】
図４（ａ）に示すように、組み合わせ回路ＣＣ及びフリップフロップＦＦ１からなるクラスタＣのクラスタ長は、規定値を超えているとする。
【００８８】
回路分割手段８５が、クラスタＣに分割フリップフロップＦＦ２を挿入し、クラスタリング手段８０が、分割フリップフロップＦＦ２を挿入したクラスタＣに対して、再クラスタリングを行う。
【００８９】
その結果、図４（ｂ）に示すように、クラスタＣは、組み合わせ回路ＣＣ１及びフリップフロップＦＦ２からなるクラスタＣ１と、組み合わせ回路ＣＣ２及びフリップフロップＦＦ１からなるクラスタＣ２と、に分割される。
【００９０】
ここで、分割フリップフロップＦＦ２は、他のフリップフロップＦＦ０，ＦＦ１の動作クロックＣＬＫとは異なる動作クロックＦＣＬＫで動作する。この点を詳しく説明する。
【００９１】
図４（ａ）に示すように、フリップフロップＦＦ０−ＦＦ１間の組み合わせ回路ＣＣは、動作クロックＣＬＫの１クロックで動作する。
【００９２】
従って、図４（ｂ）に示すように、分割フリップフロップＦＦ２を挿入後でも、フリップフロップＦＦ０−ＦＦ１間では、動作クロックＣＬＫの１クロックで動作しなければならない。
【００９３】
そこで、分割フリップフロップＦＦ２の動作クロックＦＣＬＫを、動作クロックＣＬＫの立ち下がりエッジに同期したクロックとする。なお、フリップフロップＦＦ０，ＦＦ１および分割フリップフロップＦＦ２は、立ち上がりエッジ動作を行うとする。
【００９４】
例えば、動作クロックＦＣＬＫを、動作クロックＣＬＫの反転クロックとすることができる。
【００９５】
また、例えば、動作クロックＦＣＬＫを、動作クロックＣＬＫの立ち下がりエッジに同期したパルス波形のクロックとすることができる。
【００９６】
このように、動作クロックＦＣＬＫを動作クロックＣＬＫの立ち下がりエッジに同期したクロックとすると、フリップフロップＦＦ０−分割フリップフロップＦＦ２間の組み合わせ回路ＣＣ１、及び、分割フリップフロップＦＦ２−フリップフロップＦＦ１間の組み合わせ回路ＣＣ２、の各々は、動作クロックＣＬＫの半周期以内で動作する必要がある。
【００９７】
従って、組み合わせ回路ＣＣ１及び組み合わせ回路ＣＣ２の各々が、動作クロックＣＬＫの半周期以内で動作する回路段数のポイントに、分割フリップフロップＦＦ２を挿入する必要がある。
【００９８】
さて、分割フリップフロップＦＦ２に対しては、フリップフロップ機能の許可（イネーブル）制御が可能である。
【００９９】
つまり、分割フリップフロップＦＦ２は、フリップフロップ機能のイネーブル信号ＥＮＢによって、ラッチ動作又はスルー動作を切り替えることができる。従って、ディスイネーブル時は、分割フリップフロップＦＦ２の挿入前の回路（図４（ａ））と同等の回路構成に戻して動作せることができる。
【０１００】
このため、分割フリップフロップＦＦ２を挿入する場合と挿入しない場合との論理等価性を確認することができる。
【０１０１】
さて、上記のように、クラスタリング手段８０は、分割フリップフロップＦＦ２を挿入したクラスタＣに対して、再クラスタリングを行って、クラスタＣ１，Ｃ２を作成した。
【０１０２】
この際、クラスタリング手段８０は、クラスタリング論理回路情報記憶手段８１に記憶されたクラスタリング論理回路情報において、クラスタＣの情報をクラスタＣ１，Ｃ２の情報に置き換えて、クラスタリング論理回路情報を更新する。
【０１０３】
さて、図３のクラスタ長判定手段８７は、フリップフロップＦＦ０−分割フリップフロップＦＦ２間、及び、分割フリップフロップＦＦ２−フリップフロップＦＦ１間、の各々のクラスタ長と、規定値と、を比較する。
【０１０４】
そして、クラスタ長判定手段８７は、フリップフロップＦＦ０−分割フリップフロップＦＦ２間、あるいは、分割フリップフロップＦＦ２−フリップフロップＦＦ１間、のいずれか一方のクラスタ長が、規定値を超えている場合は、回路分割手段８５、及び、クラスタリング手段８０、に対して、それぞれ、回路分割処理、及び、再クラスタリング処理、を実行させる。
【０１０５】
回路分割処理、及び、再クラスタリング処理は、フリップフロップＦＦ０−分割フリップフロップＦＦ２間、及び、分割フリップフロップＦＦ２−フリップフロップＦＦ１間、の各々のクラスタ長が、規定値以下になるまで繰り返される。こうすることで、全てのクラスタのクラスタ長が規定値以下となる。
【０１０６】
ここで、クラスタ長判定手段８７における規定値と、クラスタ選択手段８４における規定値と、は同一の値とする。
【０１０７】
一方、フリップフロップＦＦ０−分割フリップフロップＦＦ２間、及び、分割フリップフロップＦＦ２−フリップフロップＦＦ１間、の各々のクラスタ長が、規定値以下の場合は、クラスタ長判定手段８７は、図３の最適化論理回路情報生成手段８８に、処理を実行させる。
【０１０８】
さて、再び、図３に戻って説明する。
回路分割論理回路情報記憶手段８６は、最新の更新されたクラスタリング回路情報（以下、「回路分割論理回路情報」と呼ぶ。）を記憶する。
【０１０９】
最適化論理回路情報生成手段８８は、回路分割論理回路情報および論理エミュレーション装置構成情報６を基に、論理エミュレーション装置２に搭載された各ＦＰＧＡに、回路分割論理回路情報に含まれるクラスタを割り付けていく。
【０１１０】
そして、最適化論理回路情報生成手段８８は、クラスタの割り付け情報と回路分割論理回路情報とからなる最適化論理回路情報１１を生成する。
【０１１１】
ここで、論理エミュレーション装置構成情報６は、論理エミュレーション装置２に搭載されている素子に関する情報である。
【０１１２】
例えば、論理エミュレーション装置構成情報６は、論理エミュレーション装置２
に搭載されているＦＰＧＡの個数、種類（例えば、搭載可能な回路（ゲート）数（搭載可能な回路規模）など）、及び、接続関係、を示した情報である。
【０１１３】
最適化論理回路情報記憶手段８９は、最適化論理回路情報１１を記憶する。
さて、再び、図２に戻って説明する。
【０１１４】
ＦＰＧＡ割付装置１０は、最適化論理回路情報１１を元に、論理エミュレーション装置用回路情報５を生成する。
【０１１５】
論理エミュレーション装置用回路情報５は、最適化論理回路情報１１が最終的な回路割付状態になった回路情報である。
【０１１６】
図１の論理エミュレーション装置２は、この論理エミュレーション装置用回路情報５を基に、各ＦＰＧＡにクラスタを配置して、エミュレーションを実行する。
【０１１７】
さて、次に、分割フリップフロップの挿入方法を、具体例を挙げながら詳細に説明する。この例では、クラスタ長を回路段数で表す。
【０１１８】
図５は、分割フリップフロップの挿入方法を説明するためのクラスタの例示図である。なお、図５のフリップフロップＦＦ０〜ＦＦ４は、立ち上がりエッジ動作を行うとする。
【０１１９】
図５には、フリップフロップＦＦ４と、フリップフロップＦＦ４−ＦＦ０，ＦＦ１，ＦＦ２，ＦＦ３間の組み合わせ回路と、からなる１つのクラスタを示している。
【０１２０】
このように、基点となるフリップフロップＦＦ４に対して、その前段のフリップフロップＦＦ０〜ＦＦ３が複数存在する場合もある。
【０１２１】
なお、図４では、基点となるフリップフロップＦＦ１に対して、その前段のフリップフロップＦＦ０が１つ存在する例を挙げている。
【０１２２】
図６は、図５のクラスタのタイミング図である。図６には、フリップフロップＦＦ０〜ＦＦ４の動作クロックＣＬＫ，分割フリップフロップの動作クロックＦＣＬＫ、フリップフロップＦＦ０〜ＦＦ３への入力信号ＩＮ０〜ＩＮ３、図５のクラスタの各ノードＮ２，Ｎ４，Ｎ６，Ｎ６＃，Ｎ７での信号波形、及び、フリップフロップＦＦ４の出力信号ＯＵＴ、が示されている。
【０１２３】
図６では、図５のクラスタに挿入する分割フリップフロップの動作クロックＦＣＬＫが、フリップフロップＦＦ０〜ＦＦ４の動作クロックＣＬＫの立ち下がりエッジに同期したパルス波形のクロックである例を挙げている。
【０１２４】
従って、分割フリップフロップを挿入した場合に、その前後の組み合わせ回路の各々が、動作クロックＣＬＫの半周期で動作するような位置に、分割フリップフロップを挿入する必要がある。
【０１２５】
そこで、図５のクラスタの最大の回路段数が４段であるため、その中間位置である２段目の位置に、分割フリップフロップを挿入する。
【０１２６】
ここで、フリップフロップＦＦ０〜ＦＦ３からフリップフロップＦＦ４に向かって、素子を１つ越える度に、回路段数が１段上がっていく。
【０１２７】
さて、２段目の位置に分割フリップフロップを挿入したが、３段目の位置に分割フリップフロップを挿入しても、動作速度上問題がない場合は、３段目の位置に分割フリップフロップを挿入する。
【０１２８】
図５の入力信号ＩＮ２から出力信号ＯＵＴまでの信号遷移に注目して、動作速度を検討してみる。
【０１２９】
図６に示すように、入力信号ＩＮ０，ＩＮ１，ＩＮ２，ＩＮ３が、それぞれ、ハイ（ｈｉｇｈ）固定、ロー（ｌｏｗ）固定、ローからハイへの遷移、ロー固定、とする。
【０１３０】
ノードＮ２は、フリップフロップＦＦ２の出力だから、動作クロックＣＬＫの立ち上がりエッジで入力信号ＩＮ２をラッチする。
【０１３１】
そして、インバータ素子ＩＮＶ１、ＮＡＮＤ素子ＮＡＮＤ０、及び、ＡＮＤ素子ＡＮＤ１、を経由して、信号が伝搬する。
【０１３２】
ノードＮ６での信号遷移が、動作クロックＣＬＫの半周期以内で終わっているため、動作クロックＦＣＬＫの立ち上がりエッジで動作する３段目の位置に挿入した分割フリップフロップでノードＮ６の信号をラッチしても信号遅延による問題は生じない。
【０１３３】
よって、ノードＮ６＃，Ｎ７では、図６のような波形を得ることができ、動作クロックＣＬＫの１周期に対する回路動作の透過性を保ったままでクラスタを分割できる。
【０１３４】
以上のことをまとめる。ノードＮ２，Ｎ４，Ｎ６では、時刻ｔ１の動作クロックＣＬＫの立ち上がりエッジに応答して、時刻ｔ２より以前に信号波形が遷移している。
【０１３５】
つまり、分割フリップフロップの前段の組み合わせ回路は、動作クロックＣＬＫの半周期以内で動作している。
【０１３６】
一方、ノードＮ６＃，Ｎ７では、時刻ｔ２の動作クロックＦＣＬＫの立ち上がりエッジに応答して、時刻ｔ３より以前に信号波形が遷移している。
【０１３７】
つまり、分割フリップフロップの後段の組み合わせ回路は、動作クロックＣＬＫの半周期以内で動作している。
【０１３８】
よって、３段目の位置に分割フリップフロップを挿入しても、動作速度上問題がないことが分かる。
【０１３９】
なお、時刻ｔ３の動作クロックＣＬＫの立ち上がりエッジに応答して、出力信号ＯＵＴが出力される。
【０１４０】
ここで、セレクタＭＵＸ０の出力選択信号は、前段のフリップフロップＦＦ３から直接与えられており、途中に素子が存在しない。
【０１４１】
従って、セレクタＭＵＸ０−フリップフロップＦＦ３間には、分割フリップフロップを挿入する必要がない。
【０１４２】
よって、最終的には、セレクタＭＵＸ０−ＥＸＯＲ素子ＸＯＲ０間、及び、セレクタＭＵＸ０−ＡＮＤ素子ＡＮＤ１間、に分割フリップフロップを挿入する。
【０１４３】
クラスタの２段目に分割フリップフロップを挿入する場合は、計３個の分割フリップフロップが必要であるが、クラスタの３段目に分割フリップフロップを挿入する場合は、計２個の分割フリップフロップを挿入するだけでよい。
【０１４４】
さて、次に、図３及びフローチャートを用いて、論理回路最適化装置８による処理の流れを説明する。
【０１４５】
図７は、図３の論理回路最適化装置８のフローチャートである。
図７に示すように、ステップＳ１にて、クラスタリング手段８０は、エミュレーション対象の論理回路情報４に対して、クラスタリングを実行する。
【０１４６】
ステップＳ２にて、クラスタ長測定手段８２は、クラスタリングで得られた全クラスタのクラスタ長を測定する。
【０１４７】
ステップＳ３にて、クラスタ選択手段８４は、クラスタ長が規定値を超えるクラスタを選択する。
【０１４８】
ステップＳ４にて、回路分割手段８５は、クラスタ長が規定値を超えるクラスタに、分割フリップフロップを挿入して、回路分割を行う。
【０１４９】
ステップＳ５にて、クラスタリング手段８０は、分割フリップフロップが挿入されたクラスタに対して、再クラスタリングを行う。
【０１５０】
ステップＳ６にて、クラスタリング手段８０は、再クラスタリングの結果に基づき、クラスタリング論理回路情報を更新する。
【０１５１】
ステップＳ７にて、クラスタ長判定手段８７は、再クラスタリングにより得られたクラスタのクラスタ長が規定値以下かどうかを判定する。
【０１５２】
そして、再クラスタリングにより得られたクラスタのクラスタ長が規定値以下の場合は、ステップＳ８へ進む（ステップＳ７）。
【０１５３】
ステップＳ８では、最適化論理回路情報生成手段８８は、回路分割論理回路情報および論理エミュレーション装置構成情報６を基に、最適化論理回路情報１１を生成する。
【０１５４】
一方、再クラスタリングにより得られたクラスタのクラスタ長が規定値を超えている場合は、ステップＳ４へ進み（ステップＳ７）、再びステップＳ４からステップＳ７の処理を行い、クラスタリング論理回路情報を更新する。そして、最後に更新されたクラスタリング論理回路情報が、回路分割論理回路情報である。
【０１５５】
さて、以上のように、本実施の形態では、クラスタ長の長いクラスタに分割フリップフロップが挿入されるため、クラスタ長の長いクラスタが、クラスタ長の短い複数のクラスタに分割される。
【０１５６】
このため、論理エミュレーション装置のＦＰＧＡにクラスタを割り付ける際の自由度が高くなって、ＦＰＧＡの使用効率を向上できる。
【０１５７】
これにより、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【０１５８】
また、ＦＰＧＡの使用効率の向上により、回路密集度が高くなって、各回路素子の信号遅延が少なくなる。その結果、エミュレーション速度が向上する。
【０１５９】
なお、図１の回路割付装置１は、コンピュータシステムで稼働するプログラムで実現することができる。ただし、プログラムで実現する場合に限られない。
【０１６０】
また、ＦＰＧＡ割付装置１０は、ＦＰＧＡコンパイラと呼ばれるプログラムで実現できる。ただし、プログラムで実現する場合に限られない。
【０１６１】
（実施の形態２）
本発明の実施の形態２における論理エミュレーションシステムの全体構成は、図１と同様である。従って、図１の論理エミュレーションシステムを、実施の形態２による論理エミュレーションシステムとして説明する。
【０１６２】
また、実施の形態２による回路割付装置１の構成は、図２と同様である。従って、図２の回路割付装置１を、実施の形態２による回路割付装置１として説明する。
【０１６３】
また、実施の形態２による論理回路最適化装置８は、図３と同様である。従って、図３の論理回路最適化装置８を、実施の形態２による論理回路最適化装置８として説明する。
【０１６４】
図８は、実施の形態２による論理回路最適化装置８の説明図である。図８（ａ）は、ＦＰＧＡ２０にクラスタ２２が収まらない状態を示し、図８（ｂ）は、ＦＰＧＡ２０にクラスタ群２３が収まった状態を示している。
【０１６５】
図３の最適化論理回路情報生成手段８８は、論理エミュレーション装置構成情報６を基に、回路分割論理回路情報に含まれる各クラスタを、最終的にどのＦＰＧＡに割り付けるかを決定して、最適化論理回路情報１１を生成する。
【０１６６】
しかしながら、図８（ａ）に示すように、ＦＰＧＡ２０の境界部分にクラスタ２２が割り付けられたりする等、ＦＰＧＡ２０に割り付けようとするクラスタ２２が、ＦＰＧＡ２０に配置可能な残りの回路規模より大きい場合もある。
【０１６７】
この場合に、実施の形態２では、図８（ａ）のクラスタ２２に分割フリップフロップを挿入して、クラスタ２２を細分化した複数のクラスタを生成し、図８（ｂ）に示すように、ＦＰＧＡ２０に配置可能な数のクラスタからなるクラスタ群２３を、ＦＰＧＡ２０に割り付ける。
【０１６８】
具体的には、ＦＰＧＡ２０に割り付けようとするクラスタ２２が、ＦＰＧＡ２０に配置可能な残りの回路規模より大きい場合は、回路分割手段８５が、クラスタ２２に、分割フリップフロップを挿入する。
【０１６９】
そして、クラスタリング手段８０は、分割フリップフロップを挿入したクラスタ２２に対して、再クラスタリングを行い、回路分割論理回路情報を更新する。
【０１７０】
そして、最適化論理回路情報生成手段８８は、ＦＰＧＡ２０の空き領域に配置可能な回路規模（回路（ゲート）数）およびＦＰＧＡ２０のＩ／Ｏ数を決定条件として、クラスタ２２を分割して得られた複数のクラスタに対して、再び割り付け処理を実行し、最適化論理回路情報１１を更新する。
【０１７１】
その結果、ＦＰＧＡ２０に配置可能な残りの回路規模に収まるクラスタ群２３が得られ、ＦＰＧＡ２０に配置される。
【０１７２】
実施の形態２の以上の点以外については、実施の形態１と同様であり、説明を省略する。
【０１７３】
従来は、ＦＰＧＡに配置しようとするクラスタが、当該ＦＰＧＡに配置可能な残りの回路規模より大きい場合は、他のＦＰＧＡに配置されていたが、本実施の形態では、クラスタがＦＰＧＡの空き領域に収まらない場合は、上記のように、そのクラスタを細分化することにより、ＦＰＧＡの使用効率を向上できる。
【０１７４】
さて、本実施の形態による論理回路最適化装置８による処理の流れをフローチャートを用いて説明する。
【０１７５】
本実施の形態による論理回路最適化装置８による処理の流れは、図７に示したフローチャートと同様である。
【０１７６】
ただし、本実施の形態では、図７のフローチャートのステップＳ８での最適化論理回路情報生成処理が異なっており、図９のフローチャートに示す最適化論理回路情報生成処理が行われる。
【０１７７】
図９は、本実施の形態の論理回路最適化装置８による最適化論理回路情報生成処理のフローチャートである。
【０１７８】
前提として、図７に示したステップＳ１からステップＳ７までの処理が終了しているとする。
【０１７９】
さて、図９に示すように、ステップＳ８１にて、最適化論理回路情報生成手段８８は、回路分割論理回路情報に含まれる１つのクラスタを選択する。
【０１８０】
ステップＳ８２にて、最適化論理回路情報生成手段８８は、選択したクラスタをＦＰＧＡに割り付ける。
【０１８１】
ステップＳ８３にて、最適化論理回路情報生成手段８８は、割り付けたクラスタが、ＦＰＧＡに収まっているかどうかを判定する。
【０１８２】
割り付けたクラスタが、ＦＰＧＡに収まっている場合は（ステップＳ８３）、ステップＳ８４にて、最適化論理回路情報生成手段８８は、そのクラスタの割り付け情報を確定する。
【０１８３】
一方、割り付けたクラスタが、ＦＰＧＡに収まらない場合は（ステップＳ８３）、ステップＳ８６に進む。
【０１８４】
ステップＳ８６にて、最適化論理回路情報生成手段８８は、収まらないクラスタに、分割フリップフロップが挿入されているかどうかを判断する。
【０１８５】
収まらないクラスタに分割フリップフロップが挿入されている場合は（ステップＳ８６）、最適化論理回路情報生成手段８８は、ステップＳ８７に進む。
【０１８６】
ステップＳ８７にて、最適化論理回路情報生成手段８８は、その収まらないクラスタを別のＦＰＧＡに割り付け、ステップＳ８４に進み、そのクラスタの割り付け情報を確定する。
【０１８７】
一方、収まらないクラスタに分割フリップフロップが挿入されていない場合は（ステップＳ８６）、最適化論理回路情報生成手段８８は、ステップＳ８８に進む。
【０１８８】
ステップＳ８８にて、最適化論理回路情報生成手段８８は、回路分割手段８５に対して、その収まらないクラスタに、分割フリップフロップを挿入するように指示する。
【０１８９】
この指示を受けて、回路分割手段８５は、その収まらないクラスタに分割フリップフロップを挿入する。
【０１９０】
この場合の分割フリップフロップの挿入方法は、図７のステップＳ４の回路分割処理と同様であり、動作速度上問題のない位置に分割フリップフロップを挿入して、クラスタを細分化する。細分化の数（分割数）は、任意に設定できる。
【０１９１】
ステップＳ８９にて、クラスタリング手段８０は、分割フリップフロップが挿入されたクラスタに対して、再クラスタリングを行い、回路分割論理回路情報を更新する。
【０１９２】
ステップＳ９０にて、最適化論理回路情報生成手段８８は、細分化して得られたクラスタをＦＰＧＡの空き領域に割り付け、ステップＳ８４に進み、細分化して得られたクラスタの割り付け情報を確定する。
【０１９３】
さて、ステップＳ８５にて、次のクラスタが存在する場合は、ステップＳ８１に進み、上記の処理が実行される。
【０１９４】
このように、順次クラスタを更新しながら、上記の処理を実行して、全てのクラスタの割り付け情報を確定していき、最新の回路分割論理回路情報および確定した割り付け情報からなる最適化論理回路情報１１を生成する。
【０１９５】
なお、図９では、分割フリップフロップの動作クロックＦＣＬＫが、通常のフリップフロップの動作クロックＣＬＫの立ち下がりエッジに同期したパルス波形のクロックである例を挙げている。
【０１９６】
従って、ＦＰＧＡに収まらないクラスタに既に分割フリップフロップが挿入されている場合は（ステップＳ８６）、このクラスタに対しては、さらに、分割フリップフロップを挿入することができないため、ステップＳ８７の処理が実行される。
【０１９７】
さて、以上のように、本実施の形態では、実施の形態１と同様の構成を具備しているため、実施の形態１と同様に、クラスタ長の長いクラスタが、クラスタ長の短い複数のクラスタに分割される。
【０１９８】
加えて、本実施の形態では、ＦＰＧＡに収まらないクラスタにフリップフロップが挿入されるため、ＦＰＧＡに収まらないクラスタが、クラスタ長の短い複数のクラスタに分割される。
よって、ＦＰＧＡの使用効率をより一層向上できる。
【０１９９】
（実施の形態３）
実施の形態１、及び、実施の形態２では、論理回路合成装置９が生成した論理回路情報４に対して、最適化処理を実行した。
【０２００】
実施の形態３では、論理合成前、即ち、ハードウェア記述言語に対して、最適化処理を実行する。
【０２０１】
さて、本発明の実施の形態３における論理エミュレーションシステムの全体構成は、図１と同様である。従って、図１の論理エミュレーションシステムを、実施の形態３による論理エミュレーションシステムとして説明する。
【０２０２】
また、実施の形態３による回路割付装置１の構成は、図２と同様である。従って、図２の回路割付装置１を、実施の形態３による回路割付装置１として説明する。
【０２０３】
ただし、実施の形態３では、論理回路合成装置９および論理回路最適化装置８の構成は、実施の形態１と異なる。その他の点は、実施の形態１と同様である。
【０２０４】
図１０は、本発明の実施の形態３における論理回路合成装置９のブロック図である。
【０２０５】
図１０に示すように、この論理回路合成装置９は、演算素子数算出手段９３、モジュール分割手段９０、ＨＤＬ記憶手段９１、及び、合成手段９２、を含む。
【０２０６】
演算素子数算出手段９３は、ハードウェア記述言語を取り込んで、各モジュールの機能集合（演算素子の塊）を解析して、モジュール毎に入力端子から出力端子までの演算素子の数を算出する。
【０２０７】
この場合の、入力端子、出力端子、及び演算素子は、ハードウェア記述言語で表されている。
【０２０８】
そして、モジュール分割手段９０は、処理が長い経路、即ち、入力端子から出力端子までの演算素子の数が多い経路、を有するモジュール選択する。
【０２０９】
この場合、入力端子から出力端子までの演算素子の数が多いかどうかは、規定値と比較して判定される。この規定値は、ユーザが任意に設定できる。
【０２１０】
そして、モジュール分割手段９０は、入力端子から出力端子までの演算素子の数が多い経路を有するモジュールに、分割フリップフロップを表すハードウェア記述言語を挿入する。
【０２１１】
この場合の分割フリップフロップは、実施の形態１の分割フリップフロップと同様のものである。
【０２１２】
このように、分割フリップフロップを表すハードウェア記述言語を「機能分割フリップフロップ」と呼ぶ。
【０２１３】
以上のようにして、モジュール分割手段９０は、最初に入力されたハードウェア記述言語に対して、機能分割フリップフロップを挿入していき、ハードウェア記述言語を更新する。
【０２１４】
ＨＤＬ記憶手段９１は、更新後のハードウェア記述言語を記憶する。
合成手段９２は、論理合成を行って、更新後のハードウェア記述言語から論理回路情報４を生成する。
【０２１５】
実施の形態３の論理回路最適化装置８は、論理回路情報４に対して、クラスタリングを行い、クラスタリング論理回路情報を生成する。
【０２１６】
そして、論理回路最適化装置８は、クラスタリング論理回路情報に含まれる各クラスタを、論理エミュレーション装置構成情報６を参照しながら、ＦＰＧＡに割り付けていく。
【０２１７】
このようにして、論理回路最適化装置８は、クラスタリング論理回路情報及びクラスタの割り付け情報からなる最適化論理回路情報１１を生成する。その後の処理は、実施の形態１と同様である。
【０２１８】
さて、図１０の論理回路合成装置９の動作を具体例を挙げながら説明する。
図１１は、機能分割フリップフロップ挿入前のハードウェア記述言語におけるモジュールの例示図である。
図１２は、図１１のモジュールのツリー図である。
図１３は、機能分割フリップフロップ挿入後のハードウェア記述言語におけるモジュールの例示図である。
【０２１９】
演算素子数算出手段９３に入力されたハードウェア記述言語が、図１１に示すモジュールを含むとする。
【０２２０】
このモジュールは、機能集合４０，４１を含む。機能集合４０から明らかなように、入力Ａは、３つの演算処理をまたがって、出力ＯＵＴに接続される。
【０２２１】
演算素子数算出手段９３は、このような解析を、他の入力Ｂ，Ｃに対しても実行する。
【０２２２】
そうすると、図１２に示すツリー図が得られる。なお、このツリー図は説明の便宜のためのものであり、実際に作成されるわけではない。
【０２２３】
モジュール分割手段９０は、演算素子数算出手段９３による解析の結果得られた入力Ａ，Ｂ，Ｃから出力ＯＵＴまでの演算素子の数と、規定値と、を比較して、入力Ａ，Ｂ，Ｃから出力ＯＵＴまでの演算素子の数が多いと判断した場合は、図１３に示すように、このモジュールに、機能分割フリップフロップ４２を挿入する。
【０２２４】
なお、図１２のツリー図では、矢印＄で示した位置に機能分割フリップフロップが挿入される。
【０２２５】
さて、次に、図１０の論理回路合成装置９による処理の流れをフローチャートを用いて説明する。
【０２２６】
図１４は、図１０の論理回路合成装置９のフローチャートである。
図１４に示すように、ステップＳ２１にて、演算素子数算出手段９３は、ハードウェア記述言語に含まれる１つのモジュールを選択する。
【０２２７】
ステップＳ２２にて、演算素子数算出手段９３は、入力から出力までの演算素子数を算出する。
【０２２８】
ステップＳ２３にて、モジュール分割手段９０は、演算素子数算出手段９３が算出した演算素子数を規定値と比較して、演算素子数が規定値以下であれば、ステップＳ２５に進む。
【０２２９】
一方、ステップＳ２３にて、モジュール分割手段９０は、演算素子数算出手段９３が算出した演算素子数を規定値と比較して、演算素子数が規定値を超えていれば、ステップＳ２４に進む。
【０２３０】
ステップＳ２４にて、モジュール分割手段９０は、演算素子数が規定値を超えるモジュールに、機能分割フリップフロップを挿入する。
【０２３１】
ステップＳ２５にて、次のモジュールがある場合は、ステップＳ２１に進み、ステップＳ２１からステップＳ２５の処理を行う。
【０２３２】
以上のような処理を繰り返して、機能分割フリップフロップを挿入していき、ハードウェア記述言語を更新する。
【０２３３】
一方、ステップＳ２５にて、次のモジュールがない場合は、ステップＳ２６に進み、合成手段９２が、更新後のハードウェア記述言語から論理回路情報４を生成する。
【０２３４】
さて、以上のように、本実施の形態では、規定値より演算素子の数が多いモジュールに、分割フリップフロップを表すハードウェア記述言語を挿入する。
【０２３５】
このため、論理合成後のクラスタのクラスタ長が短くなり、論理エミュレーション装置のＦＰＧＡにクラスタを割り付ける際の自由度が高くなる。よって、可変論理素子の使用効率を向上できる。
【０２３６】
これにより、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【０２３７】
さらに、ハードウェア記述言語段階で分割フリップフロップを挿入するため、論理合成後に分割フリップフロップを挿入する場合より、高速に処理することができる。
【０２３８】
（実施の形態４）
本発明の実施の形態４における論理エミュレーションシステムの全体構成は、図１と同様である。従って、図１の論理エミュレーションシステムを、実施の形態４による論理エミュレーションシステムとして説明する。
【０２３９】
また、実施の形態４による回路割付装置１の構成は、図２と同様である。従って、図２の回路割付装置１を、実施の形態４による回路割付装置１として説明する。ただし、実施の形態４の論理回路最適化装置８の構成は、実施の形態１の論理回路最適化装置８の構成と異なる。
【０２４０】
図１５は、本発明の実施の形態４における論理回路最適化装置８のブロック図である。なお、図１５において、図３と同様の部分については、同一の符号を付して、説明を適宜省略する。
【０２４１】
図１５に示すように、この論理回路最適化装置８は、図３の論理回路最適化装置８の構成に、置換手段９５、を追加したものである。
【０２４２】
さて、設計する回路には、様々なメモリデバイスが含まれる。例えば、ＳＲＡＭ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）やＳＤＲＡＭ（ｓｙｎｃｈｒｏｎｏｕｓ  ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）などがあり、当然ながらそれぞれの動作仕様は異なる。
【０２４３】
そして、論理エミュレーション装置２及びＦＰＧＡは、ＳＲＡＭ等の固定のメモリデバイスを搭載している。
【０２４４】
そこで、実現したいメモリデバイスの動作仕様に合わせるため、論理エミュレーション装置２あるいはＦＰＧＡに搭載された固定のメモリデバイスに、周辺のモデル回路（ラッパー回路）を付加して、メモリデバイスを実現する。
【０２４５】
そして、置換手段９５は、メモリ置換テーブル情報を参照して、論理エミュレーション装置２あるいはＦＰＧＡに搭載された固定のメモリデバイスを回路長（例えば、回路段数あるいは信号の伝搬時間）で表すことにより、上記のようにして実現したメモリデバイスを論理回路に置き換える。
【０２４６】
以上の点を具体例を挙げながら説明する。
図１６は、図１５の置換手段９５の動作の説明図である。
図１７は、メモリ置換テーブル情報の例示図である。
【０２４７】
図１６に示すように、実現したいメモリデバイスであるＳＤＲＡＭ３４の動作仕様に合わせるため、論理エミュレーション装置２あるいはＦＰＧＡに搭載された固定のメモリデバイスであるＳＲＡＭ３６に、組み合わせ回路３１，３２からなるラッパー回路３５を付加して、ＳＤＲＡＭ３４を実現する。なお、ＳＤＲＡＭ３４は、組み合わせ回路３０，３３に接続される。
【０２４８】
このようにして実現されたＳＤＲＡＭ３４の情報が、論理回路情報４に含まれている。
【０２４９】
そして、置換手段９５は、図１７に示すようなメモリ置換テーブル情報を参照して、論理回路情報４に含まれるＳＲＡＭ３６を回路長で表すことにより、ＳＤＲＡＭ３４を論理回路に置き換える。
【０２５０】
例えば、ＳＲＡＭ３６が、４ＭｂｉｔのＳＲＡＭならば、図１７のメモリ置換テーブル情報によれば、このＳＲＡＭ３６は、回路段数が「１０」の論理回路とみなせる。
【０２５１】
そうすると、ＳＲＡＭ３６にラッパー回路３５を付加して作成したＳＤＲＡＭ３４は、通常の組み合わせ回路とみなすことができる。
【０２５２】
従って、その後は、図１５の論理回路最適化装置８により、実施の形態１と同様の処理を行って、最適化を実行する。
【０２５３】
なお、図１７のメモリ置換テーブル情報では、換算値として、回路段数を採用しているが、信号の伝搬時間を採用することもできる。
【０２５４】
さて、次に、図１５の論理回路最適化装置８による処理の流れをフローチャートを用いて説明する。
【０２５５】
図１８は、図１５の論理回路最適化装置８のフローチャートである。
図１８に示すように、このフローチャートは、図７のフローチャートのステップＳ１の前にステップＳ０を付加したものである。
【０２５６】
従って、ステップＳ０にて、置換手段９５は、メモリ置換テーブル情報を参照して、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスを、回路長で表すことにより、論理エミュレーション対象のメモリデバイスを論理回路に置き換える。
【０２５７】
こうすることで、論理エミュレーション対象のメモリデバイスを組み合わせ回路とみなすことができる。
【０２５８】
その後は、論理回路最適化装置８は、実施の形態１と同様のステップＳ１からステップＳ８を行う。
【０２５９】
なお、図１８のステップＳ８の代わりに、図９のステップＳ８１からステップＳ９０の処理を実行することもできる。
【０２６０】
さて、以上のように、本実施の形態では、実施の形態１または実施の形態２と同様の構成を具備しているため、これらと同様の効果を奏する。
【０２６１】
さらに、本実施の形態では、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスを回路長で表すことにより、論理エミュレーション対象のメモリデバイスを論理回路に置き換えるている。
【０２６２】
このため、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、回路分割手段８５により、分割フリップフロップを挿入して、細分化できる。よって、より一層のＦＰＧＡの使用効率の向上を図ることができる。
【０２６３】
【発明の効果】
請求項１又は１２記載の発明では、クラスタ長の長いクラスタにフリップフロップが挿入されるため、クラスタ長の長いクラスタが、クラスタ長の短い複数のクラスタに分割される。
【０２６４】
このため、論理エミュレーション装置の可変論理素子（例えば、ＦＰＧＡ）にクラスタを割り付ける際の自由度が高くなる。
【０２６５】
また、レンツ・ルールが示すような可変論理素子のＩ／Ｏピン数によるゲート搭載の非効率化が発生しないため、可変論理素子の使用効率を向上できる。
【０２６６】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【０２６７】
請求項２又は１３記載の発明では、予め定められたクラスタ長を超えるクラスタについては、漏れなくフリップフロップが挿入されるため、最適化をより一層図ることができる。
【０２６８】
請求項３又は１４記載の発明では、論理エミュレーション装置に割り付ける論理回路のより一層の最適化を図ることができる。
【０２６９】
請求項４又は１５記載の発明では、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【０２７０】
請求項５又は１６記載の発明では、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスが回路段数で表されるため、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【０２７１】
請求項６又は１７記載の発明では、論理エミュレーション対象のメモリデバイスを実現するメモリデバイスが信号の伝搬時間で表されるため、論理エミュレーション対象のメモリデバイスについても、通常の回路と同様に、最適化処理を行うことができる。
【０２７２】
請求項７又は１８記載の発明では、回路段数の多いクラスタにフリップフロップが挿入されるため、回路段数の多いクラスタが、回路段数の少ない複数のクラスタに分割される。
【０２７３】
このため、可変論理素子にクラスタを割り付ける際の自由度が高くなり、可変論理素子の仕様効率の向上を図ることができる。
【０２７４】
請求項８又は１９記載の発明では、信号の伝搬時間が長いクラスタにフリップフロップが挿入されるため、信号の伝搬時間が長いクラスタが、信号の伝搬時間が短い複数のクラスタに分割される。
【０２７５】
このため、可変論理素子にクラスタを割り付ける際の自由度が高くなり、可変論理素子の仕様効率の向上を図ることができる。
【０２７６】
請求項９又は２０記載の発明では、可変論理素子（例えば、ＦＰＧＡ）に収まらないクラスタにフリップフロップが挿入されるため、可変論理素子に収まらないクラスタが、クラスタ長の短い複数のクラスタに分割される。
【０２７７】
このため、クラスタ長の短いクラスタを、可変論理素子に割り付けることができ、可変論理素子の使用効率を向上できる。
【０２７８】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【０２７９】
請求項１０又は２１記載の発明では、フリップフロップを挿入後でも、挿入前と同様の動作速度を維持できる。
【０２８０】
請求項１１又は２２記載の発明では、論理合成後のクラスタのクラスタ長が短くなるため、論理エミュレーション装置の可変論理素子（例えば、ＦＰＧＡ）にクラスタを割り付ける際の自由度が高くなる。
【０２８１】
また、レンツ・ルールが示すような可変論理素子のＩ／Ｏピン数によるゲート搭載の非効率化が発生しないため、可変論理素子の使用効率を向上できる。
【０２８２】
以上により、論理エミュレーション装置に割り付ける論理回路の最適化が図られる。
【０２８３】
さらに、ハードウェア記述言語段階でフリップフロップを挿入するため、論理合成後にフリップフロップを挿入する場合より、高速に処理することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態１における論理エミュレーションシステムのブロック図
【図２】同回路割付装置のブロック図
【図３】同論理回路最適化装置のブロック図
【図４】（ａ）同回路分割前のクラスタの例示図
（ｂ）同回路分割後のクラスタの例示図
【図５】同分割フリップフロップの挿入方法を説明するためのクラスタの例示図
【図６】同分割フリップフロップの挿入方法を説明するためのクラスタのタイミング図
【図７】同論理回路最適化装置のフローチャート
【図８】（ａ）本発明の実施の形態２における論理回路最適化装置の説明図
（ｂ）同論理回路最適化装置の説明図
【図９】同論理回路最適化装置による最適化論理回路情報生成処理のフローチャート
【図１０】本発明の実施の形態３における論理合成装置のブロック図
【図１１】同機能分割フリップフロップ挿入前のＨＤＬにおけるモジュールの例示図
【図１２】同機能分割フリップフロップ挿入前のモジュールのツリー図
【図１３】同機能分割フリップフロップ挿入後のＨＤＬにおけるモジュールの例示図
【図１４】同論理合成装置のフローチャート
【図１５】本発明の実施の形態４における論理回路最適化装置のブロック図
【図１６】同論理回路最適化装置の動作の説明図
【図１７】同メモリ置換テーブル情報の例示図
【図１８】同論理回路最適化装置のフローチャート
【図１９】従来の論理エミュレーション装置のブロック図
【図２０】（ａ）従来のクラスタリング前の論理回路の概念図
（ｂ）従来のクラスタリング後の論理回路の概念図
【図２１】従来の論理エミュレーション装置のＦＰＧＡに割り付けられたクラスタの例示図
【符号の説明】
１  回路割付装置
２，１００  論理エミュレーション装置
３  ハードウェア記述言語
４  論理回路情報
５  論理エミュレーション装置用回路情報
６  論理エミュレーション装置構成情報
８  論理回路最適化装置
９  論理合成装置
１０  ＦＰＧＡ割付装置
１１  最適化論理回路情報
８０  クラスタリング手段
８１  クラスタリング論理回路情報記憶手段
８２  クラスタ長測定手段
８３  クラスタ長記憶手段
８４  クラスタ選択手段
８５  回路分割手段
８６  回路分割論理回路情報記憶手段
８７  クラスタ長判定手段
８８  最適化論理回路情報生成手段
８９  最適化論理回路情報記憶手段
９０  モジュール分割手段
９１  ＨＤＬ記憶手段
９２  合成手段
９３  演算素子数算出手段
９５  置換手段
１０１〜１０３  ロジックチップ
１０４  メモリモジュール
１０５  ユーザ指定チップ
１０６  相互接続チップ
【図１】
2004246402.tif 000004
【図２】
2004246402.tif 000005
【図３】
2004246402.tif 000006
【図４】
2004246402.tif 000007
【図５】
2004246402.tif 000008
【図６】
2004246402.tif 000009
【図７】
2004246402.tif 000010
【図８】
2004246402.tif 000011
【図９】
2004246402.tif 000012
【図１０】
2004246402.tif 000013
【図１１】
2004246402.tif 000014
【図１２】
2004246402.tif 000015
【図１３】
2004246402.tif 000016
【図１４】
2004246402.tif 000017
【図１５】
2004246402.tif 000018
【図１６】
2004246402.tif 000019
【図１７】
2004246402.tif 000020
【図１８】
2004246402.tif 000021
【図１９】
2004246402.tif 000022
【図２０】
2004246402.tif 000023
【図２１】
2004246402.tif 000024