(57)【要約】【課題】異なるクロック領域間の信号伝播を保証し、正しく動作する回路を生成する。【解決手段】動作周波数や位相が異なる複数種類のクロックにより駆動される回路を合成する際に、要求される回路面積や処理速度に応じてクロック領域間の信号伝播を保証するための信号伝播保証回路を生成するデータパス・コントローラ生成手段４５と、その信号伝播保証回路における遅延サイクルを考慮してスケジューリングを行うスケジューリング手段４３とを有している。【選択図】図１
2008242527.tif 000002
【特許請求の範囲】
【請求項１】
回路の動作記述およびクロック情報から回路構成を示すレジスタトランスファレベル記述を自動生成する動作合成装置において、
異なる複数種類のクロックにより駆動される処理回路を合成する際に、該クロック情報から得られる信号伝播保証回路の遅延サイクルを考慮して、各処理がどの実行サイクルで実行するかを決定するスケジューリング手段と、該スケジューリング手段のスケジューリング結果に基づいて、該異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する信号伝播保証回路生成手段とを有する動作合成装置。
【請求項２】
前記スケジューリング手段は、前記クロックの周波数および位相の少なくとも一方が異なるクロック領域間で信号伝播が行われる場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項１に記載の動作合成装置。
【請求項３】
前記スケジューリング手段は、前記異なるクロック領域間の両クロック間の立ち上がり時間または立ち下がり時間の間隔が一定でない場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項２に記載の動作合成装置。
【請求項４】
前記スケジューリング手段は、回路中のあるブロックと、該ブロックと異なるクロック領域に存在する他のブロックとの間で通信を行う際に、通信が確立されてから次の通信を行うまでに、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項１に記載の動作合成装置。
【請求項５】
前記スケジューリング手段は、複数のクロック領域から読み書きされるメモリがある場合に、回路中のブロックによって該メモリからデータを読み出す際に、該ブロックから制御信号およびアドレス情報が出力されてからそれらのクロック領域間の信号伝播保証回路の遅延サイクル後にデータが読み出されようにスケジューリングを行う請求項１に記載の動作合成装置。
【請求項６】
前記スケジューリング手段は、前記異なるクロック領域間で同期通信を行う「ｓｅｎｄ」演算処理および「ｒｅｃｅｉｖｅ」演算処理に対して、１つの同期チャネルに連続したステップを割り当てず、両クロックの周波数の比率に応じたステップ数分の時間間隔を開けて実行ステップを割り当てる請求項１または４に記載の動作合成装置。
【請求項７】
前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｓｅｎｄ」演算処理の１回目が終了してからその２回目を実行開始するまでのステップ数Ｓ１が、Ｓ１＝Ｓ／Ｆのステップ数である請求項６に記載の動作合成装置。
【請求項８】
前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｒｅｃｅｉｖｅ」演算処理の１回目が終了してその２回目を実行開始するまでのステップ数Ｓ２が、Ｓ２＝３×Ｆ／Ｓ＋１のステップ数である請求項６に記載の動作合成装置。
【請求項９】
前記スケジューリング手段は、前記異なるクロック領域から書き込みが行われる非同期チャネルに書き込みを行う「Ｗａｃｈａｎ」演算処理および読み出しを行う「Ｒａｃｈａｎ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる請求項１に記載の動作合成装置。
【請求項１０】
前記スケジューリング手段は、前記異なるクロック領域から書き込みが行われる配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および「Ｒａｒｒａｙ＿ｄａｔａ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる請求項１または５に記載の動作合成装置。
【請求項１１】
前記信号伝播保証回路生成手段は、前記信号伝播保証回路として、フリップフロップがＮ（Ｎは２以上の整数）段直列に接続された回路を生成する請求項１に記載の動作合成装置。
【請求項１２】
前記信号伝播保証回路生成手段は、前記信号伝播保証回路として、フリップフロップが２段直列に接続されるかまたは、フリップフロップが３段直列に接続された回路を生成する請求項１または１１に記載の動作合成装置。
【請求項１３】
前記信号伝播保証回路生成手段は、前記信号伝播保証回路として、要求される回路面積および処理速度の少なくとも一方に応じて前記信号伝播保証回路を生成する請求項１に記載の動作合成装置。
【請求項１４】
前記クロック情報を解析するクロック情報解析手段と、
前記動作記述からコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、
該コントロールデータフローグラフに対する前記スケジューリング手段によるスケジューリング後に、該コントロールデータフローグラフの各処理を演算器または通信器にそれぞれ割り当てるアロケーション手段と、
前記信号伝播保証回路生成手段を含み、スケジューリング結果およびアロケーション結果を元にデータパスと前記信号伝播保証回路とそれらを制御するコントローラを生成するデータパス・コントローラ生成手段とを更に有する請求項１に記載の動作合成装置。
【請求項１５】
前記信号伝播保証回路は、前記クロックと、前記異なるクロック領域間での伝播信号とを同期化させるための同期化回路である請求項１〜５および９〜１４のいずれかに記載の動作合成装置。
【請求項１６】
回路の動作記述およびクロック情報から回路構成を示すレジスタトランスファレベル記述を自動生成する動作合成方法において、
異なる複数種類のクロックにより駆動される処理回路を合成する際に、スケジューリング手段が、該クロック情報から得られる信号伝播保証回路の遅延サイクルを考慮して、各処理がどの実行サイクルで実行するかを決定するスケジューリング工程と、信号伝播保証回路生成手段が、該スケジューリング結果に基づいて、異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する信号伝播保証回路生成工程とを有する動作合成方法。
【請求項１７】
前記スケジューリング工程は、前記クロックの周波数および位相の少なくとも一方が異なるクロック領域間で信号伝播が行われる場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項１６に記載の動作合成方法。
【請求項１８】
前記スケジューリング工程は、前記異なるクロック領域間の両クロック間の立ち上がり時間または立ち下がり時間の間隔が一定でない場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項１７に記載の動作合成方法。
【請求項１９】
前記スケジューリング工程は、回路中のあるブロックと、該ブロックと異なるクロック領域に存在する他のブロックとの間で通信を行う際に、通信が確立されてから次の通信を行うまでに、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う請求項１６に記載の動作合成方法。
【請求項２０】
前記スケジューリング工程は、複数のクロック領域から読み書きされるメモリがある場合に、回路中のブロックによって該メモリからデータを読み出す際に、該ブロックから制御信号およびアドレス情報が出力されてからそれらのクロック領域間の信号伝播保証回路の遅延サイクル後にデータが読み出されようにスケジューリングを行う請求項１６に記載の動作合成方法。
【請求項２１】
前記スケジューリング工程は、前記異なるクロック領域間で同期通信を行う「ｓｅｎｄ」演算処理および「ｒｅｃｅｉｖｅ」演算処理に対して、１つの同期チャネルに連続したステップを割り当てず、両クロックの周波数の比率に応じたステップ数分の時間間隔を開けて実行ステップを割り当てる請求項１６または１９に記載の動作合成方法。
【請求項２２】
前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｓｅｎｄ」演算処理の１回目が終了してからその２回目を実行開始するまでのステップ数Ｓ１が、Ｓ１＝Ｓ／Ｆのステップ数である請求項２１に記載の動作合成方法。
【請求項２３】
前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｒｅｃｅｉｖｅ」演算処理の１回目が終了してその２回目を実行開始するまでのステップ数Ｓ２が、Ｓ２＝３×Ｆ／Ｓ＋１のステップ数である請求項２１に記載の動作合成方法。
【請求項２４】
前記スケジューリング工程は、前記異なるクロック領域から書き込みが行われる非同期チャネルに書き込みを行う「Ｗａｃｈａｎ」演算処理および読み出しを行う「Ｒａｃｈａｎ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる請求項１６に記載の動作合成方法。
【請求項２５】
前記スケジューリング工程は、前記異なるクロック領域から書き込みが行われる配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および「Ｒａｒｒａｙ＿ｄａｔａ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる請求項１６または２０に記載の動作合成方法。
【請求項２６】
前記信号伝播保証回路生成工程は、前記信号伝播保証回路として、フリップフロップがＮ（Ｎは２以上の整数）段直列に接続された回路を生成する請求項１６に記載の動作合成方法。
【請求項２７】
前記信号伝播保証回路生成工程は、前記信号伝播保証回路として、フリップフロップが２段直列に接続されるかまたは、フリップフロップが３段直列に接続された回路を生成する請求項１または２６に記載の動作合成方法。
【請求項２８】
前記信号伝播保証回路生成工程は、前記信号伝播保証回路として、要求される回路面積および処理速度の少なくとも一方に応じて前記信号伝播保証回路を生成する請求項１６に記載の動作合成方法。
【請求項２９】
クロック情報解析手段が前記クロック情報を解析するクロック情報解析工程と、
コントロールデータフローグラフ生成手段が前記動作記述からコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、
該コントロールデータフローグラフに対する前記スケジューリング工程によるスケジューリング後に、アロケーション手段が該コントロールデータフローグラフの各処理を演算器または通信器にそれぞれ割り当てるアロケーション工程と、
前記信号伝播保証回路生成工程を含み、データパス・コントローラ生成手段が、スケジューリング結果およびアロケーション結果を元にデータパスと前記信号伝播保証回路とそれらを制御するコントローラを生成するデータパス・コントローラ生成工程とを更に有する請求項１６に記載の動作合成方法。
【請求項３０】
請求項１〜１５のいずれかに記載の動作合成装置を用いて動作合成した回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路を製造する半導体集積回路の製造方法。
【請求項３１】
請求項１６〜２９のいずれかに記載の動作合成方法の各工程をコンピュータに実行させるための処理手順が記述された動作合成プログラム。
【請求項３２】
請求項３１に記載の動作合成プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディジタル回路の設計において、動作記述から回路をコンピュータ自動合成する動作合成装置および、この動作合成装置を用いた動作合成方法、この動作合成装置または動作合成方法を用いた半導体集積回路の製造方法、この動作合成方法の各ステップをコンピュータに実行させるための動作合成プログラムおよびこの動作合成プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体に関する。
【背景技術】
【０００２】
従来より、システムＬＳＩなどの大規模回路を設計する際には、論理回路などのディジタル回路の設計において、回路の動作記述からハードウェア（回路構成）をコンピュータ自動合成する動作合成が行なわれている。この動作合成は高位合成とも呼ばれている。
【０００３】
この動作合成の処理手順を大まかに分類すると、データフローグラフ生成処理と、スケジューリング処理と、アロケーション処理とに分けることができる。
【０００４】
まず、データフローグラフ生成処理では、回路の動作記述からデータフローグラフが生成される。データフローグラフは、ＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）とも呼ばれ、データの流れを枝、演算や通信を節点として、グラフにより表したものである。
【０００５】
次に、スケジューリング処理では、データフローグラフ中の演算や通信をどの実行サイクルで実行するかが決定される。
【０００６】
さらに、アロケーション処理では、演算や通信が演算器や通信器などの回路素子にそれぞれ割り付けられ、また、処理途中のデータを記憶させるためにそのデータがレジスタに割り付けられる。
【０００７】
これらのスケジューリング処理とアロケーション処理との結果に従って、データパスとコントローラを生成することにより、動作記述と同一の動作を行なうハードウェア（回路構成）が自動合成されて動作合成装置（または高位合成装置）の表示画面上に得られる。このハードウェア（回路構成）は、一般に、回路構成を示すレジスタトランスファレベル（ＲＴＬ；Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）記述として外部に出力される。
【０００８】
回路の動作記述からハードウェアを合成する従来技術の一例が特許文献１に開示されている。この特許文献１に開示されている従来技術は、ハードウェア中で並列動作する複数のスレッド間においてハンドシェイクを行うことなく同期通信可能な回路を、スレッド毎に動作合成することによって生成する方法である。
【０００９】
また、従来技術の他の一例が特許文献２に開示されている。この特許文献２に開示されている従来技術は、スケジューリング処理において、高速でかつ有効な面積の見積もりを行い、レジスタの面積を考慮したスケジューリングを高速に行うことが可能な高位合成方法である。
【特許文献１】特開２０００−５７１８０号公報
【特許文献２】特開２０００−３４８０６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
一つの回路中に複数種類のクロックが用いられる場合がある。例えば、回路外部とのデータ入出力部と、演算部とにおいて、要求される処理速度が異なる場合などが挙げられる。低い周波数で動作させればよいデータ入出力部を高い周波数で駆動させると、無駄に消費電力が大きくなってしまうからである。
【００１１】
しかしながら、上記従来の動作合成技術によって、周波数や位相が異なる複数のクロックにより駆動される回路を生成した場合には、正しく回路動作させることができないという問題がある。
【００１２】
例えば送信側の記憶素子（例えばフリップフロップ）から出力された信号が、演算器などの回路を経由して受信側の記憶素子（例えばフリップフロップ）に到達する時刻と、その受信側の記憶素子（例えばフリップフロップ）を駆動させるクロックの動作時刻がほぼ同時刻になった場合には、その受信側記憶素子に保持されている値が、”０”とも”１”とも判断できない電位になる。この状態は、一般に、メタステーブルと呼ばれている。このメタステーブル状態になると、受信側の記憶素子内で大電流が流れて回路が破損したり、受信側の記憶素子の後段に設けられた回路によって正しい値を参照することができずに誤動作することがある。このため、論理回路の設計においては、記憶素子のセットアップ時間（記憶素子にデータが到達してからクロックが到達するまでの時間）やホールド時間（クロックが到達してから次のデータが到達するまでの時間）が制約として与えられ、この制約を満たすように設計することによって、メタステーブルが発生しない。
【００１３】
一方、１種類のクロックにより駆動される回路では、送信側記憶素子と受信側記憶素子との間の信号伝播における遅延を固定化することにより、メタステーブルを防ぐことができる。
【００１４】
しかしながら、周波数や位相が異なる複数のクロックにより駆動される回路では、異なるクロックにより駆動される記憶素子間で信号を伝播させる際に、回路の誤動作を防止するための回路が必要になる。これは、送信側記憶素子を駆動するクロックと受信側記憶素子を駆動するクロックの周期が異なると、受信側記憶素子に信号が到着する時間が変化し、セットアップ時間やホールド時間の制約を満たすことができなくなって、メタステーブル状態が生じてしまうからである。
【００１５】
上記従来の動作合成技術では、並列に動作する部分ブロック（スレッド）に回路が分割されて、部分ブロック毎に動作合成が行われる。この場合、全ての部分ブロックにおいて同一のクロックにより回路中の記憶素子が駆動されることが想定されており、複数種類のクロックによる駆動では、異なるクロック領域間での信号伝播を保証したり、信号伝播保証回路における遅延を考慮することができないため、正しくデータを受信することができないという問題を有している。
【００１６】
以下に、同一クロックにより並列動作する従来の動作合成技術について図７〜図１２を参照して説明した後に、この問題について図１３〜図１５を参照して詳細に説明する。
【００１７】
図７（ａ）および図７（ｂ）は、従来の動作合成技術において、同一クロックにより並列動作を行う回路のコントロールデータフローグラフ（ＣＤＧＦ）の一例を示す図である。
【００１８】
図７（ａ）および図７（ｂ）において、節点１０１および節点１１４は共に加算処理、節点１０２は配列ａｒｙにデータを書く「Ｗａｒｒａｙ」演算処理、節点１０３および節点１１５は非同期チャネルにデータを送信する「Ｗａｃｈａｎ」演算処理、節点１０４および１０５と節点１１６は同期チャネルにデータを送信する「ｓｅｎｄ」演算処理、節点１０６と節点１０９および１１０は同期チャネルからデータを受信する「ｒｅｃｅｉｖｅ」演算処理、節点１０７と節点１１１は配列からデータを読むためにアドレスを出力する「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理、節点１０８と節点１１２は配列からデータを読む「Ｒａｒｒａｙ＿ｄａｔａ」演算処理、節点１１３は非同期チャネルからデータを受信する「Ｒａｃｈａｎ」演算処理を表している。
【００１９】
図７（ａ）のコントロールデータフローグラフは、その回路の動作記述として、
｛     ／／  ｂｌｏｃｋ  １
ａｒｙ［ａ］  ＝  ｂ＋ｃ；
ａｃｈ＝ｂ＋ｃ；
ｓｅｎｄ（ｃｈ１，ｄ）；
ｓｅｎｄ（ｃｈ１，ｅ）；
ｆ＝ｒｅｃｅｉｖｅ（ｃｈ２）；
ｘ＝ａｒｙ［ｇ］；
｝
という処理を表している。
【００２０】
上記配列ａｒｙは、並列に動作する複数のブロックからアクセスされる共有メモリの一つである。
【００２１】
関数ｓｅｎｄ（）は、第１引数で指定された同期チャネルに対して第２引数で指定されたデータを送信する処理を表している。
【００２２】
変数ａｃｈは非同期チャネル通信を行うための通信路である。非同期チャネル通信は、通信路として非同期チャネルを用いた並列動作間の通信であり、任意のタイミングでデータを読み書き（送信・受信）を行うことができる。
【００２３】
変数ｃｈ１とｃｈ２は同期チャネル通信を行うための通信路である。同期チャネル通信は、通信路として同期チャネルを用いた並列動作間の通信であり、データの送信側と受信側が共に通信可能な状態になるまで、お互いを待つという処理を含む。
【００２４】
関数ｒｅｃｅｉｖｅ（）は、引数で指定された同期チャネルから受信したデータを返えす処理を表している。
【００２５】
上記動作記述例および図７（ａ）のコントロールデータフローグラフでは、ｂｌｏｃｋ１において、
変数ｂとｃの加算結果を、配列ａｒｙのａ番目の要素に書き込む、
変数ｄの値を同期チャネルｃｈ１に送信し、相手が受信するまで待つ、
変数ｅの値を同期チャネルｃｈ１に送信し、相手が受信するまで待つ、
同期チャネルｃｈ２から受信したデータを変数ｆに代入する、
変数ｘに配列ａｒｙのｇ番目のデータを代入する、
という処理が表されている。
【００２６】
一方、図７（ｂ）のコントロールデータフローグラフは、その回路の動作記述として、
｛     ／／  ｂｌｏｃｋ  ２
ｉ＝ｒｅｃｅｉｖｅ（ｃｈ１）；
ｊ＝ｒｅｃｅｉｖｅ（ｃｈ１）；
ａｃｈ  ＝  ａｒｙ［ｋ］＋ａｃｈ；
ｓｅｎｄ（ｃｈ２，ｍ）；
｝
という処理を表している。
【００２７】
上記動作記述例および図７（ｂ）のコントロールデータフローグラフでは、ｂｌｏｃｋ２において、
同期チャネルからｃｈ１にデータが送信されるのを待ち、受信したデータを変数ｉに代入する、
同期チャネルからｃｈ１にデータが送信されるのを待ち、受信したデータを変数ｊに代入する、
非同期チャネルａｃｈに、ａｃｈの値と配列ａｒｙのｋ番目のデータの加算結果を代入する、
同期チャネルｃｈ２に変数ｍの値を送信し、相手が受信するまで待つ、
という処理が表されている。
【００２８】
回路内では、図７（ａ）に示す処理と、図７（ｂ）に示す処理とが並列に実行されている。
【００２９】
図８（ａ）および図８（ｂ）はそれぞれ、図７（ａ）および図７（ｂ）にそれぞれ示すコンロールデータフローグラフにスケジューリング処理を施した結果例を示す図である。
【００３０】
図８（ａ）では、各演算処理の節点１０１〜１０３がステップ１で実行され、節点１０４がステップ２で実行され、節点１０５がステップ３で実行され、節点１０６がステップ４で実行され、節点１０７がステップ５で実行され、節点１０８がステップ６で実行されている。
【００３１】
一方、図８（ｂ）では、節点１０９がステップ１で実行され、節点１１０がステップ２で実行され、節点１１１がステップ３で実行され、節点１１２〜１１４がステップ４で実行され、節点１１５がステップ５で実行され、節点１１６がステップ６で実行されている。
【００３２】
１ステップは、１クロックサイクル以上で実行される。例えば、同期チャネル通信において相手が通信可能な状態になるまで待つときには、次のステップに進まず、２サイクル以上消費される。
【００３３】
配列は、アドレスが出力された次のクロックサイクルにおいてデータが出力されるメモリデバイス（レジスタファイルやＲＡＭまたはＲＯＭ）を対象として、「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理や「Ｒａｒｒａｙ＿ｄａｔａ」演算処理がスケジューリングされた例を示しているが、異なるタイミングで動作するメモリデバイスについても、そのタイミングに応じて「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理や「Ｒａｒｒａｙ＿ｄａｔａ」演算処理をスケジューリングすれば対応可能である。
【００３４】
図９は、図８（ａ）および図８（ｂ）のスケジューリング結果を実行する回路例を模式的に示すブロック図である。
【００３５】
図９において、この回路は、ブロックｐｅ１（３０１）とブロックｐｅ２（３０２）とブロックｍｅｍｏｒｙ３０３とを有している。
【００３６】
ブロックｐｅ１（３０１）は図８（ａ）のスケジューリング結果を実行する回路である。また、ブロックｐｅ２（３０２）は図８（ｂ）のスケジューリング結果を実行する回路である。さらに、ブロックｍｅｍｏｒｙ３０３は、ブロックｐｅ１（３０１）およびブロックｐｅ２（３０２）から読み書きされる配列ａｒｙや非同期チャネルａｃｈのデータを記憶する記憶素子を含む回路である。ｃｌｋ３０４は、回路中の全ての記憶素子を駆動するクロックである。回路構成によっては、ブロックｍｅｍｏｒｙ（メモリ）の一つとして同期チャネルでデータを送受信するための回路も含めることがある。
【００３７】
図１０（ａ）は、同期チャネル通信を行う回路について、図８（ａ）の節点１０４および１０５の「ｓｅｎｄ」演算処理と、図８（ｂ）の節点１０９および１１０の「ｒｅｃｅｉｖｅ」演算処理とを行う回路例を示すブロック図であって、図９のブロックｐｅ１（３０１）とブロックｐｅ２（３０２）の関連する部分を詳細に示したブロック図である。また、図１０（ｂ）は、図１０（ａ）の信号遷移例を示すタイミングチャートである。
【００３８】
図１０（ａ）において、ブロックｐｅ１（３０１）はコントローラＣＴＲＬ１（４０１）を有し、ブロックｐｅ２（３０２）はコントローラＣＴＲＬ２（４０２）を有している。
【００３９】
コントローラＣＴＲＬ１（４０１）は、ブロックｐｅ１（３０１）の処理ステップがステップ２の「ｓｅｎｄ」演算処理のときにポートｃｈ１＿ｗｔｘ４０３に送信要求を表す値’１’を信号出力し、ポートｃｈ１＿ｗｄａｔａ４０５に値ｄを出力し、ポートｃｈ１＿ｗｒｘ４０４が受信要求を表す値’１’になるまで、その状態を保持する機能と、ブロックｐｅ１（３０１）の処理ステップがステップ３の「ｓｅｎｄ」演算処理のときに、ポートｃｈ１＿ｗｔｘ４０３に送信要求を表す値’１’を出力し、ポートｃｈ１＿ｗｄａｔａ４０５に値ｅを出力し、ポートｃｈ１＿ｗｒｘ４０４が受信要求を表す値’１’になるまで、その状態を保持する機能と持つ状態マシンである。
【００４０】
一方、コントローラＣＴＲＬ２（４０２）は、ブロックｐｅ２（３０２）の処理ステップがステップ１の「ｒｅｃｅｉｖｅ」演算処理のときにポートｃｈ１＿ｒｒｘ４０７に受信要求を表す値’１’を出力し、ポートｃｈ１＿ｒｔｘ４０６が送信要求を表す値’１’になるまでその状態を保持する機能と、ブロックｐｅ２（３０２）の処理ステップがステップ２の「ｒｅｃｅｉｖｅ」演算処理のときにポートｃｈ１＿ｒｒｘ４０７に受信要求を表す値’１’を出力し、ポートｃｈ１＿ｒｔｘ４０６が送信要求を表す値’１’になるまでその状態を保持する機能を持つ状態マシンである。
【００４１】
上記構成により、図１０（ｂ）に示すように、まず、クロックサイクルｔ１において、コントローラＣＴＲＬ２が「ｒｅｃｉｅｖｅ」演算処理の節点１０９を実行するため、ポートｃｈ１＿ｒｒｘに’１’が出力される。
【００４２】
次に、クロックサイクルｔ２において、コントローラＣＴＲ１が「ｓｅｎｄ」演算処理の節点１０４を実行するため、ポートｃｈ１＿ｗｔｘ４０３に’１’が出力され、ポートｃｈ１＿ｗｄａｔａ４０５に値ｄが出力されるが、このとき、ｃｈ１＿ｗｔｘ４０３とｃｈ１＿ｗｒｘ４０４が共に’１’なので、このサイクルで「ｓｅｎｄ」演算処理の節点１０４の実行は終了する。ここで、ｃｈ１＿ｒｒｘ４０７とｃｈ１＿ｒｔｘ４０６が共に’１’になったので、コントローラＣＴＲＬ２は「ｒｅｃｅｉｖｅ」演算処理の節点１０９の実行を終了し、ｃｈ１＿ｒｄａｔａ４０８の値ｄを参照する。
【００４３】
その後、クロックステップｔ３では、コントローラＣＴＲＬ１（４０１）が「ｓｅｎｄ」演算処理の節点１０５を実行するため、ｃｈ１＿ｗｔｘ４０３に’１’が出力され、ｃｈ１＿ｗｄａｔａ４０５に値ｅが出力される。また、コントローラＣＴＲＬ２（４０２）は「ｒｅｃｅｉｖｅ」演算処理の節点１１０を実行するため、ｃｈ１＿ｒｒｘ４０７に’１’が出力される。ここで、ｃｈ１＿ｗｔｘ４０３とｃｈ１＿ｗｒｘ４０４が共に’１’になったので、コントローラＣＴＲＬ１（４０１）は「ｓｅｎｄ」演算処理の節点１０５の実行を終了する。このとき、ｃｈ１＿ｒｒｘ４０７とｃｈ１＿ｒｔｘ４０６が共に’１’になったので、コントローラＣＴＲＬ２（４０２）は「ｒｅｃｅｉｖｅ」演算処理の節点１１０の実行を終了し、ｃｈ１＿ｒｄａｔａ４０８の値ｅを参照する。このように、連続したクロックサイクルにおいて値ｄと値ｅをブロックｐｅ１（３０１）からブロックｐｅ２（３０２）に転送させることができる。
【００４４】
なお、図８（ａ）の節点１０６の「ｒｅｃｉｅｖｅ」演算処理と、図８（ｂ）の節点１１６の「ｓｅｎｄ」演算処理とについても、同様の構成により実現可能である。
【００４５】
図１１（ａ）は、非同期チャネル通信を行う回路について、図８（ａ）の節点１０１の加算処理および節点１０３の「Ｗａｃｈａｎ」演算処理（非同期チャネルにデータ送信）と、図８（ｂ）の節点１１３〜１１５の各演算処理（「Ｒａｃｈａｎ」演算処理（非同期チャネルからデータ受信）、加算処理、非同期チャネルにデータ送信）を行う回路例を示すブロック図であり、図９のブロックｐｅ１（３０１）とブロックｐｅ２（３０２）とブロックｍｅｍｏｒｙ（３０３）との関連する部分を詳細に示している。また、図１１（ｂ）は、図１１（ａ）の信号遷移例を示すタイミングチャートである。
【００４６】
図１１（ａ）において、ブロックｐｅ１（３０１）はコントローラＣＴＲＬ１（４０１）と加算器５０１を有し、ブロックｐｅ２（３０２）はコントローラＣＴＲＬ２（４０２）と加算器５０２を有している。
【００４７】
この加算器５０１は、図８（ａ）の節点１０１の加算処理を行い、加算器５０２は、図８（ｂ）の節点１１４の加算処理を行うものである。
【００４８】
一方、ブロックｍｅｍｏｒｙ３０３ａは、図９のブロックｍｅｍｏｒｙ３０３に相当するもので、非同期チャネルａｃｈを用いた通信によりデータの送受信を行う回路であり、セレクタ５０３と記憶素子（フリップフロップ５０４）とを有している。ブロックｍｅｍｏｒｙ３０３ａは、ブロックｐｅ１（３０１）またはブロックｐｅ２（３０２）からの送信を検出して、送信されたデータ（値）を記憶素子５０４に格納する。
【００４９】
コントローラＣＴＲＬ１（４０１）は、図８（ａ）のサイクル１でａｃｈ＿ｗｅｎ１に’１’を出力し、ａｃｈ＿ｗｄａｔａ１に図８（ａ）の節点１０１の加算結果を出力する機能を持つ状態マシンである。
【００５０】
また、コントローラＣＴＲＬ２（４０２）は、図８（ｂ）のサイクル４でａｃｈ＿ｒｄａｔａを演算器へ入力するための制御信号を生成する機能と、図８（ｂ）のサイクル５でａｃｈ＿ｗｅｎ２を’１’に出力し、ａｃｈ＿ｗｄａｔａ２に節点１１４の加算処理結果を出力する機能を持つ状態マシンである。
【００５１】
上記構成により、例えば、図１１（ｂ）に示すように、クロックサイクルｔ１においてブロックｐｅ１（３０１）が非同期チャネルａｃｈに「ｂ＋ｃ」の演算結果を書き込み、クロックサイクルｔ５においてブロックｐｅ２（３０２）がａｃｈにａｃｈの値「ｂ＋ｃ」と配列ａｒｙから読み出した値の加算結果である「ｓ」を書き込む。
【００５２】
図１２（ａ）は、共通メモリへのアクセスを行う回路について、図８の節点１０２の「Ｗａｒｒａｙ」演算処理（配列にデータを書く）、節点１０７の「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理（配列からデータを読むためにアドレスを出力）および節点１０８の「Ｒａｒｒａｙ＿ｄａｔａ」演算処理（配列からデータを読出）と、節点１１１の「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および節点１１２の「Ｒａｒｒａｙ＿ｄａｔａ」演算処理を行う回路例を示すブロック図であり、図９のブロックｐｅ１（３０１）とブロックｐｅ２（３０２）とブロックｍｅｍｏｒｙ３０３の関連する部分を詳細に示している。また、図１２（ｂ）は、図１２（ａ）の信号遷移例を示すタイミングチャートである。
【００５３】
図１２（ａ）において、ブロックｐｅ１（３０１）は、コントローラＣＴＲＬ１（４０１）と加算器５０１とセレクタ６０１とを有している。このセレクタ６０１は、ａｒｙ＿ａｄｄｒ１に出力するアドレスを選択するものである。
【００５４】
ブロックｐｅ２（３０２）は、コントローラＣＴＲＬ２（４０２）と加算器５０２とを有している。
【００５５】
ブロックｍｅｍｏｒｙ３０３ｂは、図９のブロックｍｅｍｏｒｙ３０３に相当するものであり、ブロックｐｅ１（３０１）とブロックｐｅ２（３０２）とで共有される配列ａｒｙのデータにアクセスする回路であって、回路６０２とセレクタ６０３とセレクタ６０４とセレクタ６０５と複数の記憶素子６０６を有している。
【００５６】
また、ブロックｍｅｍｏｒｙ３０３ｂは、ブロックｐｅ１（３０１）およびブロックｐｅ２（３０２）からのアクセス要求に応じて制御信号を生成する。セレクタ６０３は、配列ａｒｙに書き込むデータを選択し、セレクタ６０４は、配列ａｒｙのアドレス情報から記憶素子６０６の一つを特定する。セレクタ６０５は、回路６０２とセレクタ６０３とセレクタ６０４とにより生成された制御信号、アドレス情報およびデータを元に記憶素子６０６へアクセスするための回路である。図１２（ａ）の記憶素子６０６は、複数のフリップフロップを配置したレジスタ・ファイルを用いて構成された回路例であるが、記憶素子としてＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）により構成することも可能である。
【００５７】
コントローラＣＴＲＬ１（４０１）は、図８（ａ）のサイクル１でａｒｙ＿ｗｅｎ１に’１’を出力し、ａｒｙ＿ａｄｄｒ１にアドレスａを出力し、ａｒｙ＿ｗｄａｔａ１に図８（ａ）の節点１０１の加算結果を出力する機能と、図８（ａ）のサイクル５でａｒｙ＿ｒｅｎ１に’１’を出力し、ａｒｙ＿ａｄｄｒ１にアドレスｇを出力する機能と、図８（ａ）のサイクル６でａｒｙ＿ｒｄａｔａの値を演算器に入力させる制御信号を生成する機能を持つ状態マシンである。
【００５８】
コントローラＣＴＲＬ２（４０２）は、図８（ｂ）のサイクル３でａｒｙ＿ｒｅｎ２に’１’を出力し、ａｃｈ＿ａｄｄｒ２にアドレスｋを出力する機能と、図８（ｂ）のサイクル４でａｒｙ＿ｒｄａｔａの値を演算器に入力させる制御信号を生成する機能を持つ状態マシンである。
【００５９】
上記構成により、例えば、図１２（ｂ）に示すように、クロックサイクルｔ１においてブロックｐｅ１（３０１）が配列ａｒｙのアドレスａをａｒｙ＿ａｄｄｒ１に出力し、配列ａｒｙへの書き込み信号ａｒｙ＿ｗｅｎ１を出力し、「ｂ＋ｃ」の演算結果をａｒｙ＿ｗｄａｔａ１に出力して、配列ａｒｙへの書き込み処理を行う。
【００６０】
次に、クロックサイクルｔ３では、ブロックｐｅ２（３０２）が配列ａｒｙのアドレスｋをａｒｙ＿ａｄｄｒ２に出力し、配列ａｒｙへの読出し信号ａｒｙ＿ｒｅｎ２を出力し、さらに、クロックサイクルｔ４において、ブロックｐｅ２（３０２）が配列ａｒｙのｋ番目の要素の値を参照して演算処理を行う。
【００６１】
さらに、クロックサイクルｔ５では、ブロックｐｅ１（３０１）が配列ａｒｙのアドレスｇをａｒｙ＿ａｄｄｒ１に出力し、配列ａｒｙへの読出し信号ａｒｙ＿ｒｅｎ１を出力し、クロックサイクルｔ６においてブロックｐｅ１（３０１）が配列ａｒｙのｇ番目の要素の値を参照する。
【００６２】
以上のように、上記従来の動作合成技術では、図９〜図１２に示すように、全ての記憶素子が一つのクロックｃｌｋ３０４により駆動される回路しか生成することができない。したがって、一つの回路中に複数種類のクロックを用いた回路に、上記従来の動作合成技術を単に適用したとしても、メタステーブルを防ぐための信号伝播保証回路を生成したり、信号伝播保証回路における遅延サイクルに関して考慮したりすることができない。このことを、以下の課題１〜３により詳細に説明する。
（課題１）
図１３には、周波数が高いクロックｃｌｋ＿ｆａｓｔと周波数が低いｃｌｋ＿ｓｌｏｗとがあり、ブロックｐｅ１（３０１）がｃｌｋ＿ｆａｓｔにより駆動され、ブロックｐｅ２（３０２）がｃｌｋ＿ｓｌｏｗにより駆動される場合に同期チャネル通信を実現するための回路例を示すブロック図である。なお、ここでは、図１０（ａ）に示した回路に、メタステーブルを防ぐための信号伝播保証回路ＭＳ−ＦＦ２（７０１）〜（７０３）を追加したことを想定した構成である。
【００６３】
図１３において、信号伝播保証回路７０１および７０２はそれぞれ、ｃｌｋ＿ｓｌｏｗにより駆動されるフリップフロップが２つ直列に接続されて構成されている。この回路例では、２種類のクロックを用いた場合を示しているが、クロックが３種類以上ある場合には、信号伝播保証回路７０１および７０２は、最も周波数が低い（最も遅い）クロックにより駆動される。
【００６４】
一方、信号伝播保証回路７０３は、読み出しスレッドのクロックにより駆動されるフリップフロップが２つ直列に接続されて構成されている。この回路例では、信号伝播保証回路７０３に接続されたブロックｐｅ１（３０１）のクロックｃｌｋ＿ｆａｓｔにより駆動されるフリップフロップが２つ直列に接続されている。
【００６５】
図１４は、図１３に示す回路によって、図８（ａ）の節点１０４および１０５と、図８（ｂ）の節点１０９および１１０との演算処理を行う場合の信号遷移例を示すタイミングチャートである。
【００６６】
図１３および図１４に示すように、まず、ブロックｐｅ２（３０２）は、クロックサイクルｓ１において図８（ｂ）のステップ１の処理（１回目の「ｒｅｃｅｉｖｅ」（節点１０９））を行うため、ｃｈ１＿ｒｒｘを’１’にする。このとき、送信側のブロックｐｅ１（３０１）は、まだ「ｓｅｎｄ」演算処理を実行していないためにｃｈ１＿ｗｔｘは’０’であり、信号ｈｓの値は’０’である。
【００６７】
次に、ブロックｐｅ１（３０１）は、クロックサイクルｔ１において、図８（ａ）のステップ２の処理（１回目の「ｓｅｎｄ」（節点１０４））を行うため、ｃｈ１＿ｗｔｘを’１’にする。この信号変化は、信号伝播保証回路７０２を経由して伝播するために図１４の矢印Ａに示すように遅延し、クロックサイクルｓ３において信号ｔｘ、ｈｓおよびｃｈ１＿ｒｔｘの値が’１’となる。
【００６８】
その後、図１０（ａ）のコントローラＣＴＲＬ２（４０２）は、ｃｈ１＿ｒｒｘとｃｈ１＿ｒｔｘが共に’１’になったので、クロックサイクルｓ３において，図８（ｂ）のステップ１の処理を終了し、ｃｈ１＿ｒｄａｔａの値ｄを参照する。クロックサイクルｔ１で値ｄでとなったｃｈ１＿ｗｄａｔａの値は、信号伝播保証回路７０１を経由して伝播するために、図１４の矢印Ｂに示すように遅延し、クロックサイクルｓ３においてｃｈ１＿ｒｄａｔａの値が値ｄとなる。ブロックｐｅ２（３０２）は、クロックサイクルｓ４において図８（ｂ）のステップ２の演算処理（２回目の「ｒｅｃｅｉｖｅ」（節点１１０））を実行する。
【００６９】
さらに、クロックサイクルｓ３において、’１’になった信号ｈｓの値は、信号伝播保証回路７０３を経由して伝播するために、図１４の矢印Ｃで示すように遅延し、ブロックｐｅ１（３０１）のクロックサイクルｔ４においてｃｈ１＿ｗｒｘが’１’になる。ｃｈ１＿ｗｔｘとｃｈ１＿ｗｒｘが共に’１’になったので、図１０（ａ）のコントローラＣＴＲＬ１（４０１）は、図８（ａ）のステップ２の演算処理（１回目の［ｓｅｎｄ］（節点１０４））の演算処理を終了する。ブロックｐｅ１（３０１）は、クロックサイクルｔ５において図８（ａ）のステップ３の演算処理（２回目の「ｓｅｎｄ」（節点１０５））を実行する。
【００７０】
ブロックｐｅ２は、クロックサイクルｓ４において、図８（ｂ）のステップ２の演算処理（２回目の「ｒｅｃｅｉｖｅ」（節点１１０））を実行するため、ｃｈ１＿ｒｒｘを’１’にする。このとき、ｃｈ１＿ｒｔｘの値が’１’なので、コントローラＣＴＲＬ２（４０２）は、図８（ｂ）のステップ２の演算処理（２回目の「ｒｅｃｅｉｖｅ」（節点１１０））を終了し、ｃｈ１＿ｒｄａｔａの値を参照する。このとき、ｃｈ１＿ｒｄａｔａの値は値ｄであるが、正しくは、２回目の「ｒｅｃｅｉｖｅ」（節点１１０）が終了したときには値ｅを参照する必要がある。
【００７１】
このように、従来の動作合成技術におけるスケジューリング処理では、一つのクロック領域間の同期チャネル通信と、異なるクロック領域間の同期チャネル通信とが混在していたり、異なる周波数のクロック領域間で連続して同期チャネル通信を実行すると、正しくデータが転送されないという問題が生じる。
（課題２）
図１５は、クロックｃｌｋ１により駆動されるブロックｐｅ１と、クロックｃｌｋ２により駆動されるブロックｐｅ２との間で非同期チャネルａｃｈを介したデータ転送を行う回路例を示す回路図である。
【００７２】
図１５において、非同期チャネルａｃｈは、クロックｃｌｋ１とｃｌｋ２の周波数が異なる場合にクロックを切り替えるためのクロック切替回路として、回路８０１、ＡＮＤ回路８０２、ＯＲ回路８０３、回路８０４およびＡＮＤ回路８０５を有しており、記憶素子ｓｔｏｒｅ８０６にデータを格納する構造である。
【００７３】
また、非同期チャネルａｃｈの出力側には、クロックｃｌｋ１とクロックｃｌｋ２の周波数が異なる場合に、信号伝播を保証するための信号伝播保証回路８０７および８０８が設けられている。この信号伝播保証回路８０７は、クロックｃｌｋ１により駆動されるフリップフロップが２つ直列に接続されて構成されている。また、信号伝播保証回路８０８は、クロックｃｌｋ２により駆動されるフリップフロップが２つ直列に接続されて構成されている。
【００７４】
図１１（ｂ）のタイミングチャートに示すように、従来の動作合成技術におけるスケジューリング処理では、クロックサイクルｔ１においてブロックｐｅ１（３０１）またはブロックｐｅ２（３０２）が非同期チャネルａｃｈに書き込んだ値「ｂ＋ｃ」は、次のクロックサイクルｔ２以降でブロックｐｅ１（３０１）のａｃｈ＿ｒｄａｔａポートやブロックｐｅ２（３０２）のａｃｈ＿ｒｄａｔａポートに伝播し、参照することが可能である。しかしながら、複数のクロックにより駆動される回路では、信号伝播保証回路によって信号伝播が２サイクルだけ遅延することになる。したがって、ブロックｐｅ１（３０１）が値ｖを書き込んだ次のクロックサイクルにおいてブロックｐｅ１（３０１）が値を参照した場合、ｐｅ１／ａｃｈ＿ｒｄａｔａの値はｖではなく、更新される前の値となっているため、従来の動作合成技術におけるスケジューリング処理では正しく動作することができない。
（課題３）
クロックｃｌｋ１により駆動されるブロックｐｅ１（３０１）と、クロックｃｌｋ２により駆動されるブロックｐｅ２（３０１）とによりアクセスされる配列からデータを読み出す場合に、メモリデバイスが従来と同じタイミングで動作するものであっても、メモリデバイスの出力からブロックのポートまでに遅延サイクルが生じる。よって、「Ｒａｒｒａｙ＿ａｄｄｒ」の演算処理と「Ｒａｒｒａｙ＿ｄａｔａ」の演算処理との間に、遅延サイクル分の間隔を開けなければ、正しく回路動作させることができない。
【００７５】
以上のように、従来の動作合成技術に対して、周波数や位相が異なる複数のクロックにより駆動される回路を生成したとしても、正しく回路動作させることができないという問題がある。
【００７６】
本発明は、上記従来の問題を解決するもので、周波数や位相が異なる複数種類のクロックで駆動される回路において、異なるクロック領域間の信号伝播を保証し、正しく動作する回路を生成することができる動作合成装置およびこれを用いた動作合成方法、この動作合成装置または動作合成方法を用いた半導体集積回路の製造方法、この動作合成方法の各ステップをコンピュータに実行させるための動作合成プログラム、この動作合成プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００７７】
本発明の動作合成装置は、回路の動作記述およびクロック情報から回路構成を示すレジスタトランスファレベル記述を自動生成する動作合成装置において、異なる複数種類のクロックにより駆動される処理回路を合成する際に、該クロック情報から得られる信号伝播保証回路の遅延サイクルを考慮して、各処理がどの実行サイクルで実行するかを決定するスケジューリング手段と、該スケジューリング手段のスケジューリング結果に基づいて、該異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する信号伝播保証回路生成手段とを有するものであり、そのことにより上記目的が達成される。
【００７８】
また、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、前記クロックの周波数および位相の少なくとも一方が異なるクロック領域間で信号伝播が行われる場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００７９】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、前記異なるクロック領域間の両クロック間の立ち上がり時間または立ち下がり時間の間隔が一定でない場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００８０】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、回路中のあるブロックと、該ブロックと異なるクロック領域に存在する他のブロックとの間で通信を行う際に、通信が確立されてから次の通信を行うまでに、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００８１】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、複数のクロック領域から読み書きされるメモリがある場合に、回路中のブロックによって該メモリからデータを読み出す際に、該ブロックから制御信号およびアドレス情報が出力されてからそれらのクロック領域間の信号伝播保証回路の遅延サイクル後にデータが読み出されようにスケジューリングを行う。
【００８２】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、前記異なるクロック領域間で同期通信を行う「ｓｅｎｄ」演算処理および「ｒｅｃｅｉｖｅ」演算処理に対して、１つの同期チャネルに連続したステップを割り当てず、両クロックの周波数の比率に応じたステップ数分の時間間隔を開けて実行ステップを割り当てる。
【００８３】
さらに、好ましくは、本発明の動作合成装置において、前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｓｅｎｄ」演算処理の１回目が終了してからその２回目を実行開始するまでのステップ数Ｓ１が、Ｓ１＝Ｓ／Ｆのステップ数である。
【００８４】
さらに、好ましくは、本発明の動作合成装置において、前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｒｅｃｅｉｖｅ」演算処理の１回目が終了してその２回目を実行開始するまでのステップ数Ｓ２が、Ｓ２＝３×Ｆ／Ｓ＋１のステップ数である。
【００８５】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、前記異なるクロック領域から書き込みが行われる非同期チャネルに書き込みを行う「Ｗａｃｈａｎ」演算処理および読み出しを行う「Ｒａｃｈａｎ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【００８６】
さらに、好ましくは、本発明の動作合成装置におけるスケジューリング手段は、前記異なるクロック領域から書き込みが行われる配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および「Ｒａｒｒａｙ＿ｄａｔａ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【００８７】
さらに、好ましくは、本発明の動作合成装置における信号伝播保証回路生成手段は、前記信号伝播保証回路として、フリップフロップがＮ（Ｎは２以上の整数）段直列に接続された回路を生成する。
【００８８】
さらに、好ましくは、本発明の動作合成装置における信号伝播保証回路生成手段は、前記信号伝播保証回路として、フリップフロップが２段直列に接続されるかまたは、フリップフロップが３段直列に接続された回路を生成する。
【００８９】
さらに、好ましくは、本発明の動作合成装置における信号伝播保証回路生成手段は、前記信号伝播保証回路として、要求される回路面積および処理速度の少なくとも一方に応じて前記信号伝播保証回路を生成する。
【００９０】
さらに、好ましくは、本発明の動作合成装置において、前記クロック情報を解析するクロック情報解析手段と、前記動作記述からコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、該コントロールデータフローグラフに対する前記スケジューリング手段によるスケジューリング後に、該コントロールデータフローグラフの各処理を演算器または通信器にそれぞれ割り当てるアロケーション手段と、前記信号伝播保証回路生成手段を含み、スケジューリング結果およびアロケーション結果を元にデータパスと前記信号伝播保証回路とそれらを制御するコントローラを生成するデータパス・コントローラ生成手段とを更に有する。
【００９１】
さらに、好ましくは、本発明の動作合成装置における信号伝播保証回路は、前記クロックと、前記異なるクロック領域間での伝播信号とを同期化させるための同期化回路である。
【００９２】
本発明の動作合成方法は、回路の動作記述およびクロック情報から回路構成を示すレジスタトランスファレベル記述を自動生成する動作合成方法において、異なる複数種類のクロックにより駆動される処理回路を合成する際に、スケジューリング手段が、該クロック情報から得られる信号伝播保証回路の遅延サイクルを考慮して、各処理がどの実行サイクルで実行するかを決定するスケジューリング工程と、信号伝播保証回路生成手段が、該スケジューリング結果に基づいて、異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する信号伝播保証回路生成工程とを有するものであり、そのことにより上記目的が達成される。
【００９３】
また、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、前記クロックの周波数および位相の少なくとも一方が異なるクロック領域間で信号伝播が行われる場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００９４】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、前記異なるクロック領域間の両クロック間の立ち上がり時間または立ち下がり時間の間隔が一定でない場合に、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００９５】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、回路中のあるブロックと、該ブロックと異なるクロック領域に存在する他のブロックとの間で通信を行う際に、通信が確立されてから次の通信を行うまでに、前記信号伝播保証回路の遅延サイクルに応じた時間間隔を開けてスケジューリングを行う。
【００９６】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、複数のクロック領域から読み書きされるメモリがある場合に、回路中のブロックによって該メモリからデータを読み出す際に、該ブロックから制御信号およびアドレス情報が出力されてからそれらのクロック領域間の信号伝播保証回路の遅延サイクル後にデータが読み出されようにスケジューリングを行う。
【００９７】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、前記異なるクロック領域間で同期通信を行う「ｓｅｎｄ」演算処理および「ｒｅｃｅｉｖｅ」演算処理に対して、１つの同期チャネルに連続したステップを割り当てず、両クロックの周波数の比率に応じたステップ数分の時間間隔を開けて実行ステップを割り当てる。
【００９８】
さらに、好ましくは、本発明の動作合成方法において、前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｓｅｎｄ」演算処理の１回目が終了してからその２回目を実行開始するまでのステップ数Ｓ１が、Ｓ１＝Ｓ／Ｆのステップ数である。
【００９９】
さらに、好ましくは、本発明の動作合成方法において、前記異なる複数種類のクロックの一つの周期がＳｎｓｅｃで、該クロックの他の一つの周期がＦｎｓｅｃの場合（Ｆ＜Ｓ）に、前記時間間隔として、前記「ｒｅｃｅｉｖｅ」演算処理の１回目が終了してその２回目を実行開始するまでのステップ数Ｓ２が、Ｓ２＝３×Ｆ／Ｓ＋１のステップ数である。
【０１００】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、前記異なるクロック領域から書き込みが行われる非同期チャネルに書き込みを行う「Ｗａｃｈａｎ」演算処理および読み出しを行う「Ｒａｃｈａｎ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【０１０１】
さらに、好ましくは、本発明の動作合成方法におけるスケジューリング工程は、前記異なるクロック領域から書き込みが行われる配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および「Ｒａｒｒａｙ＿ｄａｔａ」演算処理に対して、前記信号伝播保証回路の遅延サイクルに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【０１０２】
さらに、好ましくは、本発明の動作合成方法における信号伝播保証回路生成工程は、前記信号伝播保証回路として、フリップフロップがＮ（Ｎは２以上の整数）段直列に接続された回路を生成する。
【０１０３】
さらに、好ましくは、本発明の動作合成方法における信号伝播保証回路生成工程は、前記信号伝播保証回路として、フリップフロップが２段直列に接続されるかまたは、フリップフロップが３段直列に接続された回路を生成する。
【０１０４】
さらに、好ましくは、本発明の動作合成方法における信号伝播保証回路生成工程は、前記信号伝播保証回路として、要求される回路面積および処理速度の少なくとも一方に応じて前記信号伝播保証回路を生成する。
【０１０５】
さらに、好ましくは、本発明の動作合成方法において、クロック情報解析手段が前記クロック情報を解析するクロック情報解析工程と、コントロールデータフローグラフ生成手段が前記動作記述からコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、該コントロールデータフローグラフに対する前記スケジューリング工程によるスケジューリング後に、アロケーション手段が該コントロールデータフローグラフの各処理を演算器または通信器にそれぞれ割り当てるアロケーション工程と、前記信号伝播保証回路生成工程を含み、データパス・コントローラ生成手段が、スケジューリング結果およびアロケーション結果を元にデータパスと前記信号伝播保証回路とそれらを制御するコントローラを生成するデータパス・コントローラ生成工程とを更に有する。
【０１０６】
本発明の半導体集積回路の製造方法は、本発明の上記動作合成装置を用いて動作合成した回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路を製造するものであり、そのことにより上記目的が達成される。
【０１０７】
本発明の動作合成プログラムは、本発明の上記動作合成方法の各工程をコンピュータに実行させるための処理手順が記述されたものであり、そのことにより上記目的が達成される。
【０１０８】
本発明の可読記憶媒体は、本発明の上記動作合成プログラムが格納されたコンピュータ読み取り可能なものであり、そのことにより上記目的が達成される。
【０１０９】
上記構成により、以下に、本発明の作用について説明する。
【０１１０】
本発明にあっては、回路の動作記述から複数のクロックにより駆動される回路のレジスタトランスファレベル記述を自動生成する動作合成装置および動作合成方法において、異なるクロック領域間で信号伝播がある場合に、メタステーブルを防ぐために、クロック領域間の信号伝播を保証する信号伝播保証回路を生成する。これにより、信号伝播が行われるクロック領域間において、両クロック間の立上がり時間、または両クロック間の立ち下がり時間の間隔が一定でない場合に、クロック領域間の信号伝播を保証することができる。また、設計者の要求に応じて、処理速度を向上させることよりも回路占有面積や消費電力を小さくすることを優先した回路や、これとは逆に、回路占有面積や消費電力を小さくすることより処理速度を向上させることを優先した回路などを生成することが可能となる。
【０１１１】
信号伝播保証回路には様々な回路構成があるが、例えば受信側回路のクロックにより駆動されるフリップフロップが直列に２つ配置された構成のものを用いることが可能となる。また、３つのフリップフロップが直列に配置された構成のものも用いることが可能となる。このような信号伝播保証回路を追加することにより、信号が送信側記憶素子から受信側記憶素子に到達するまでの遅延が増加し、例えば２つのフリップフロップを挿入する場合には２クロックサイクルの遅延が増え、３つのフリップフロップを挿入する場合には３クロックサイクルの遅延が増える。
【０１１２】
そこで、本発明にあっては、信号伝播保証回路における遅延サイクルを考慮してスケジューリングを行う。例えば、信号伝播保証回路として信号を受信する側のクロックにより駆動されるフリップフロップが２つ直列に接続された回路を生成して、遅延サイクルが２クロックサイクルであることを前提としてスケジューリング処理を行うことができる。また、信号伝播保証回路として信号を受信する側のクロックにより駆動されるフリップフロップが３つ直列に接続された回路を生成して、遅延サイクルが３クロックサイクルであることを前提としてスケジューリング処理を行ってもよい。
【発明の効果】
【０１１３】
以上により、本発明によれば、複数のクロックにより動作する回路を合成する動作合成装置および動作合成方法において、複数のクロック領域間の信号伝播を保証し、さらに、クロックと伝播信号とを同期化させるべく、その信号伝播保証回路による遅延を生じせしめて、回路が正しく動作するようにスケジューリングを行うことができる。
【発明を実施するための最良の形態】
【０１１４】
以下に、本発明の動作合成装置および動作合成方法の実施形態について、図面を参照しながら詳細に説明する。
【０１１５】
図１は、本発明の実施形態に係る動作合成装置の概略構成例を示すブロック図である。
【０１１６】
図１において、本実施形態の動作合成装置１は、コンピュータシステムで構成されており、各種入力指令を可能とするキーボードやマウス、画面入力装置などの操作入力部２と、各種入力指令に応じて表示画面上に、初期画面、選択誘導画面および処理結果画面などの各種画像を表示可能とする表示部３と、全体的な制御を行う制御手段としてのＣＰＵ４（中央演算処理装置）と、ＣＰＵ４の起動時にワークメモリとして働く一時記憶手段としてのＲＡＭ５と、ＣＰＵ４を動作させるための動作合成プログラムおよびこれに用いる各種データなどが記録されたコンピュータ読み取り可能な可読記録媒体（記憶手段）としてのＲＯＭ６と、動作合成処理における各種データを記憶すると共にこれを参照可能とするためのデータベース７とを有している。
【０１１７】
ＣＰＵ４は、操作入力部２からの入力指令の他、ＲＯＭ６内からＲＡＭ５内に読み出された動作合成プログラムおよびこれに用いる各種データに基づいて、異なる複数種類のクロックにより駆動される回路を合成する際に、クロック周期および位相、異なる種類（周期および／または位相）のクロックで動作するクロック領域などのクロック情報を解析するクロック情報解析手段４１と、図示しないデータ格納部または外部から、ハードウェアの構造に関する情報は含まず、回路動作のみを記述した回路の動作記述１１から、データの流れを枝とし、演算処理または通信処理を各節点としてグラフで表したコントロールデータフローグラフ（ＣＤＦＧ）を生成するＣＤＦＧ生成手段４２と、上記クロック情報を考慮して、ＣＤＦＧ中の各節点の処理をどの実行サイクルで実行するかを決定するスケジューリング手段４３と、各処理を回路素子に割り付けると共に処理途中のデータを記憶するためにレジスタに割り付けるアロケーション手段４４と、スケジューリング手段４３およびアロケーション手段４４による各処理結果にしたがって、データパスとそれを制御するコントローラを生成し、演算器およびレジスタの接続を表すネットリストを作成すると共に、上記クロック情報に基づいて信号伝播保証回路（または同期化回路）を追加生成するデータパス・コントローラ生成手段４５とを有し、そのデータパス・コントローラ生成結果をＲＴＬ記述１３として出力可能とされる。なお、この図示しないデータ格納部は、ＲＡＭ５内にあってもよいし、データベース７内にあってもよいし、これらとは別に設けられていてもよい。
【０１１８】
ＲＯＭ６は、ハードディスク、光ディスク、磁気ディスクおよびＩＣメモリなどの可読記録媒体（記憶手段）で構成されている。この動作合成プログラムおよびこれに用いる各種データは、携帯自在な光ディスク、磁気ディスクおよびＩＣメモリなどからＲＯＭ６にダウンロードされてもよいし、コンピュータのハードディスクからＲＯＭ６にダウンロードされてもよいし、無線または有線、インターネットなどを介してＲＯＭ６にダウンロードされてもよい。後述する図２の動作合成方法をコンピュータに実行させるための処理手順が記述された動作合成プログラムをコンピュータ読み取り可能な可読記憶媒体に格納して、コンピュータ（ＣＰＵ４）により動作合成するものである。
【０１１９】
データベース７は、ＣＰＵ４による動作合成中に中間データとして生成されるクロック情報、ＣＤＦＧ、スケジューリング結果、アロケーション結果およびデータパス・コントローラ構成情報などの各種データを、その都度格納すると共に、必要に応じてこれらを参照可能としている。なお、データベース７はＲＡＭ５と一体で同じ記憶手段として構成されていてもよい。
【０１２０】
図２は、図１の動作合成装置の各手段が実行する処理手順を説明するためのフローチャートである。
【０１２１】
図２に示すように、クロック情報解析手段４１によるクロック情報解析工程（ステップＳＴ１）では、まず、クロック情報解析処理として、例えば外部から動作合成装置１に入力されたクロック情報１２から、クロックの周波数と、クロックの位相と、複数種類の回路ブロックうちのどの回路ブロックがどのクロック領域に属するかが解析される。クロック周期と位相とクロック領域に属する回路ブロックの情報は、データベース７にリストとして、参照可能に登録される。
【０１２２】
次に、ＣＤＦＧ生成手段４２によるＣＤＦＧ生成工程（ステップＳＴ２）では、動作合成装置１に入力された動作記述１１からＣＤＦＧが生成される。生成されたＣＤＦＧは、データベース７に節点情報の集合体として、参照可能に登録される。
【０１２３】
このＣＤＧＦは、節点情報として、節点の番号、演算または通信の種類および枝の接続先の節点番号などを有しており、ＣＤＦＧ中の１節点が１つの節点情報として表され、ＣＤＦＧ全体は節点情報の配列またはリストとして表されている。実際の設計では、大規模な回路の場合、ＣＤＦＧの節点数は１万個を超えることもあるため、ＣＤＦＧ生成の処理は計算機上で行われる。スケジューリング以降の処理についても同様である。なお、ＣＤＦＧはデータベース上の数値データであるが、説明を簡便にするため、以降では図７のようなグラフとして表すことにする。
【０１２４】
その後、スケジューリング手段４３によるスケジューリング工程（ステップＳＴ３）では、この信号伝播保証回路における遅延サイクルを考慮して、ＣＤＦＧの各節点を実行する実行ステップが決定される。また、スケジューリングの制約としては、ＣＤＦＧの節点の順序関係を保つことや、ＣＤＦＧの節点間の間隔ステップ数を与えることなどが挙げられる。実行ステップやスケジューリングの制約は、データベース７上の各節点の節点情報に付加されている。
【０１２５】
この実行ステップの決定方法は、全てのスケジューリング制約を満たすものであれば、どのようなものでもよいが、異なるクロック領域間の同期チャネル通信を行う「ｓｅｎｄ」演算処理や「ｒｅｃｅｉｖｅ」演算処理は、一つの同期チャネルに対して連続したステップに割り当てられず、クロックの周波数の比率に応じたステップ数分の間隔を開けた実行ステップに割り当てられる。また、異なるクロック領域から書き込みがある非同期チャネルに対して書き込みを行う「Ｗａｃｈａｎ」演算処理と読み出しを行う「Ｒａｃｈａｎ」演算処理は、信号伝播保証回路の遅延サイクルに応じたステップ数以上の間隔を開けて実行ステップが割り当てられる。さらに、異なるクロック領域から書き込みがある配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理と「Ｒａｒｒａｙ＿ｄａｔａ」演算処理は、信号伝播保証回路の遅延サイクルに応じたステップ数以上の間隔を開けて実行ステップが割り当てられる。
【０１２６】
さらに、アロケーション手段４４によるアロケーション工程（ステップＳＴ４）では、ＣＤＦＧの各節点の処理が演算器に割り当てられる。その演算器情報は、データベース７上の各節点の節点情報に付加されている。
【０１２７】
この演算器の割当方法は、どのようなものでもよい。ここでは、異なる複数のサイクルで実行される同一の演算処理については、一つの演算器に割り付けられる可能性がある。なお、動作合成方法によっては、アロケーション工程がスケジューリング工程の前に行なわれることもあり得る。
【０１２８】
続いて、データパス・コントローラ生成手段４５によるデータパス・コントローラ生成工程（ステップＳＴ５）では、スケジューリング結果およびアロケーション結果を元に、図１３および図１５の他、後述する図６のようなデータパスと、信号伝播保証回路と、それを制御するコントローラが生成される。生成されたデータパスと信号伝播保証回路とコントローラの各情報は、演算器、通信器やレジスタの接続を表すネットリストとしてデータベース７に登録される。
【０１２９】
即ち、このデータパス・コントローラ生成手段４５には、上記クロック情報に基づいて、異なるクロック領域間に、この異なるクロック領域間の信号伝播を保証するための信号伝播保証回路（または同期化回路）を追加生成する信号伝播保証回路生成手段を有している。
【０１３０】
信号伝播保証回路生成処理として、異なる複数種類のクロックにより駆動される回路を合成する際に、異なるクロック領域間に、信号伝播保証回路生成手段が、異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する。例えば、信号伝播保証回路生成手段は、クロックの周波数および位相の少なくとも一方が異なり、信号伝播が行われるクロック領域間の両クロックの立ち上がり時間または立ち下がり時間の間隔が一定でない場合（例えば両クロックが同時に立ち上がった場合に次の立ち上がりは、一方のクロックがＦｎｓで他方のクロックがＳｎｓの場合、Ｓ−Ｆｎｓｅｃのズレが生じる）に、これを検出してクロック領域間の信号伝播を保証する信号伝播保証回路を生成することができる。また、信号伝播保証回路生成手段は、要求される占有回路面積および処理速度の少なくとも一方に応じてクロック領域間の信号伝播を保証する信号伝播保証回路を生成することもできる。
【０１３１】
このように、本実施形態では、一つの回路中に複数種類のクロックが用いられる場合、例えば回路外部とのデータ入出力部と、演算部とにおいて、要求される処理速度が異なる場合（クロック周波数が異なっている場合）などに、メタステーブルを防ぐために、信号伝播路に、異なるクロック領域間の信号伝播を保証するための信号伝播保証回路（または同期化回路）を追加する方法を用いる。
【０１３２】
つまり、本実施形態では、クロック情報および動作記述から、複数種類のクロックにより駆動される回路のレジスタトランスファレベル記述を生成する動作合成装置１により、動作周波数や位相が異なる複数クロックにより駆動される回路について、メタステーブルを防いで正しく動作する回路を生成するように、異なるクロック領域間に、異なるクロック領域間の信号伝播を保証する信号伝播保証回路（または同期化回路）を生成して回路の動作合成を行う。この信号伝播保証回路には様々な回路構成があるが、ここでは、例えば受信側回路のクロックにより駆動されるフリップフロップが直列に２つ配置された構成のものを用いることができる。なお、３つのフリップフロップが直列に配置された構成のものも用いることができる。このような信号伝播保証回路を追加することにより、信号が送信側記憶素子から受信側記憶素子に到達するまでの遅延が増加し、例えば２つのフリップフロップを挿入する場合には２クロックサイクルの遅延が増える。また、例えば３つのフリップフロップを挿入する場合には３クロックサイクルの遅延が増える。要するに、信号伝播保証回路生成手段としては、信号伝播保証回路として、フリップフロップがＮ（Ｎは２以上の整数）段直列に接続された回路を生成する。この場合にＮ個のフリップフロップを直列挿入する場合にはＮクロックサイクル分の遅延が増えることになる。
【０１３３】
例えば、本実施形態では、信号伝播保証回路における遅延サイクルを考慮してスケジューリング工程（ステップＳＴ３）を行う場合に、信号伝播保証回路として信号を受信する側のクロックにより駆動されるフリップフロップが２つ直列に接続された回路を生成して、その遅延サイクルが２クロックサイクルであることを前提としてスケジューリング処理を行っている。なお、信号伝播保証回路として信号を受信する側のクロックにより駆動されるフリップフロップが３つ直列に接続された回路を生成して、その遅延サイクルが３クロックサイクルであることを前提としてスケジューリング処理を行うこともできる。さらに、信号伝播保証回路として信号を受信する側のクロックにより駆動されるフリップフロップがＮ個直列に接続された回路を生成して、その遅延サイクルがＮクロックサイクルであることを前提としてスケジューリング処理を行うこともできる。
【０１３４】
以下に、本実施形態の動作合成装置１によって、前述した（課題１）、（課題２）および（課題３）を解決する動作合成方法についてそれぞれ、（解決方法１）、（解決方法２）および（解決方法３）として説明する。
（解決方法１）
図３は、図１のクロック情報例を示す波形図である。また、図４（ａ）および図４（ｂ）は、コントロールデータフローグラフ例を示す図であり、図４（ｃ）および図４（ｄ）は、図４（ａ）および図４（ｂ）のスケジューリング例を示す図である。
【０１３５】
異なる複数種類（ここでは２種類）のクロックとして、例えば図３に示すような周波数が高いクロックｃｌｋ＿ｆａｓｔ（周期Ｆナノ秒；Ｆｎｓ）と、周波数が低いｃｌｋ＿ｓｌｏｗ（周期Ｓナノ秒；Ｓｎｓ）とがある。また、異なるクロック領域（回路ブロック）として、図４（ａ）に示すようなブロックｐｅ１のＣＤＦＧと、図４（ｂ）に示すようなブロックｐｅ２のＣＤＦＧとがあって、異なるブロックｐｅ１が周波数の高いクロックｃｌｋ＿ｆａｓｔにより駆動され、異なるブロックｐｅ２が周波数の低いクロックｃｌｋ＿ｓｌｏｗにより駆動される場合について考える。
【０１３６】
図４（ａ）に示すＣＤＦＧでは、節点１０４においてデータを同期チャネルｃｈ１を介して送るための１回目の「ｓｅｎｄ」演算処理が行われ、次の節点１０５においてデータを同期チャネルｃｈ１を介して送るための２回目の「ｓｅｎｄ」演算処理が行われる。また、図４（ｂ）に示すＣＤＦＧでは、節点１０９においてデータを、同期チャネルｃｈ１を介して受け取るための１回目の「ｒｅｃｅｉｖｅ」演算処理が行われ、次の節点１１０においてデータを、同期チャネルｃｈ１を介して受け取るための２回目の「ｒｅｃｅｉｖｅ」演算処理が行われる。
【０１３７】
ブロックｐｅ１の２回目の同期チャネル通信により正しくデータを送信（ｓｅｎｄ）するためには、図１３および図５に示すようにｃｈ１＿ｗｒｘが’０’になった以降のサイクルでｃｈ１＿ｗｔｘを’１’にすればよい。１回目の「ｓｅｎｄ」演算処理が終了してから２回目の「ｓｅｎｄ」演算処理を実行開始するまでのステップ数Ｓ１は、例えば以下ようにして求めることができる。
【０１３８】
図５は、図４（ｃ）および図４（ｄ）に示すスケジューリング結果を、図１３に示す回路により実行したときの信号遷移例を示すタイミングチャートである。
【０１３９】
クロックが立ち上がってからフリップフロップの出力信号の変化が他の回路素子に伝播するまでの時間が十分短い場合として、１回目の「ｓｅｎｄ」演算処理が終了してから２回目の「ｓｅｎｄ」演算処理を実行開始するまでのステップ数Ｓ１は、
Ｓ１＝Ｓ／Ｆステップとなる。
【０１４０】
よって、スケジューリング手段４３によるスケジューリング工程（ステップＳＴ３）において、図４（ａ）の節点１０４を割り当てる実行ステップをｓｔｅｐ＿１０４とし、節点１０５を割り当てる実行ステップをｓｔｅｐ＿１０５とすると、
ｓｔｅｐ＿１０４＋Ｓ／Ｆ≦ｓｔｅｐ＿１０５
というスケジューリング制約が与えられてスケジューリングが行われる。この結果、図４（ｃ）に示すような２ステップ空いたスケジューリング結果が得られる。
【０１４１】
次に、ブロックｐｅ２の２回目の同期チャネル通信によるデータ受信（ｒｅｃｅｉｖｅ）は、信号ｔｘの値が’０’になった以降のクロックサイクルで実行すればよい。１回目の「ｒｅｃｅｉｖｅ」演算処理が終了してから信号ｔｘが’０’になるまでのステップ数Ｓ２は、例えば以下のようにして求めることができる。
【０１４２】
クロックが立ち上がってからフリップフロップの出力信号の変化が他の回路素子に伝播するまでの時間が十分短い場合として、１回目の「ｒｅｃｅｉｖｅ」演算処理が終了してから信号ｔｘが’０’になるまでのステップ数Ｓ２は、
Ｓ２＝３×Ｆ／Ｓ＋１ステップとなる。
【０１４３】
よって、スケジューリング手段４３によるスケジューリング工程において、図４（ｂ）の節点１０９を割り当てる実行ステップをｓｔｅｐ＿１０９とし、節点１１０を割り当てる実行ステップをｓｔｅｐ＿１１０とすると、
ｓｔｅｐ＿１０９＋３×Ｆ／Ｓ＋１≦ｓｔｅｐ＿１１０
というスケジューリング制約が与えられてスケジューリングが行われる。この結果、図４（ｄ）に示すような３ステップ空いたスケジューリング結果が得られる。
【０１４４】
図４（ｃ）および図４（ｄ）に示すスケジューリング結果を実行するために、アロケーション工程およびデータパス・コントローラ生成工程により生成される回路例は、例えば図１３に示すようなものとなる。
【０１４５】
したがって、図５に示すように、ｃｌｋ＿ｓｌｏｗの立上がりエッジでｃｈ１＿ｒｔｘとｃｈ１＿ｒｒｘが共に’１’のとき、即ちクロックサイクルｓ４ではｃｈ１＿ｒｄａｔａが値ｄ、クロックサイクルｓ８ではｃｈ１＿ｒｄａｔａが値ｅとなっており、ブロックｐｅ１からブロックｐｅ２に正しく値が送信されていることが分かる。
（解決方法２）
スケジューリング手段４３によるスケジューリング工程（ステップＳＴ３）において、異なるクロック領域として、図３に示すクロックｃｌｋ＿ｆａｓｔにより駆動される回路ブロックと、図３に示すクロックｃｌｋ＿ｓｌｏｗにより駆動される回路ブロックとからアクセスされる非同期チャネルａｃｈがあった場合に、各回路ブロックのＣＤＦＧに対してスケジューリング処理が行われる。
【０１４６】
ここで、その非同期チャネルａｃｈにデータを送信する「Ｗａｃｈａｎ」演算処理の実行ステップをｓｔｅｐ＿Ｗａｃｈａｎとし、その非同期チャネルａｃｈからデータを受信する「Ｒａｃｈａｎ」演算処理の実行ステップをｓｔｅｐ＿Ｒａｃｈａｎとし、信号伝播保証回路の遅延サイクルをＳｄとすると、
ｓｔｅｐ＿Ｗａｃｈａｎ＋Ｓｄ≦Ｓｔｅｐ＿Ｒａｃｈａｎ
というスケジューリング制約が与えられてスケジューリングが行われる。
【０１４７】
即ち、スケジューリング手段４３は、異なるクロック領域から書き込みが行われる非同期チャネルに書き込みを行う「Ｗａｃｈａｎ」演算処理および読み出しを行う「Ｒａｃｈａｎ」演算処理に対して、信号伝播保証回路の遅延サイクルＳｄに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【０１４８】
この結果、例えば、信号伝播保証回路としてフリップフロップが２段接続された回路を用いる場合、「Ｗａｃｈａｎ」演算処理と「Ｒａｃｈａｎ」演算処理の間隔は２ステップとなる。
【０１４９】
このスケジューリング結果を実行するために、データパス・コントローラ生成工程（ステップＳＴ５）により生成されるデータパスの構造例は、図１５に示すようなものとなる。
（解決方法３）
スケジューリング手段４３によるスケジューリング工程（ステップＳＴ３）において、異なるクロック領域として、図３に示すクロックｃｌｋ＿ｆａｓｔにより駆動される回路ブロックと、図３に示すｃｌｋ＿ｓｌｏｗにより駆動される回路ブロックとからアクセスされる配列ａｒｙがあった場合、各回路ブロックのＣＤＦＧに対してスケジューリング処理が行われる。
【０１５０】
ここで、その配列ａｒｙに対して読み出しアドレスを出力する「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理の実行ステップをｓｔｅｐ＿Ｒａｒｒａｙ＿ａｄｄｒとし、配列ａｒｙからデータを読み出す「Ｒａｒｒａｙ＿ｄａｔａ」演算処理の実行ステップをｓｔｅｐ＿Ｒａｒｒａｙ＿ｄａｔａとし、信号伝播保証回路の遅延サイクルをＳｄとすると、
ｓｔｅｐ＿Ｒａｒｒａｙ＿ａｄｄｒ＋Ｓｄ≦Ｓｔｅｐ＿Ｒａｒｒａｙ＿ｄａｔａ
というスケジューリング制約が与えられてスケジューリングが行われる。
【０１５１】
即ち、スケジューリング手段４３は、異なるクロック領域から書き込みが行われる配列からデータを読み出すための「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理および「Ｒａｒｒａｙ＿ｄａｔａ」演算処理に対して、信号伝播保証回路の遅延サイクルＳｄに応じたステップ数以上の時間間隔を開けて実行ステップを割り当てる。
【０１５２】
この結果、例えば、信号伝播保証回路としてフリップフロップが２段接続された回路を用いる場合、「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理と「Ｒａｒｒａｙ＿ｄａｔａ」演算処理の間隔は２ステップとなる。
【０１５３】
このスケジューリング結果を実行するために、データパス・コントローラ生成工程（図２のステップＳＴ５）により生成されるデータパスの構造例は、図１５に示す回路にアドレスデコーダやデータを選択するための回路が付加されたものとなる。
【０１５４】
図６は、図３に示すクロックｃｌｋ＿ｆａｓｔにより駆動されるブロックｐｅ１によって配列ａｒｙにデータを書き込み、図３に示すクロックｃｌｋ＿ｓｌｏｗにより駆動されるブロックｐｅ２によって配列ａｒｙからデータを読み出すための回路である。
【０１５５】
記憶領域ｓｔｏｒｅ９０１は、［配列のデータ幅×要素数］個の記憶素子により構成されており、例えばフリップフロップが用いられる。
【０１５６】
図６（ａ）に示す回路においては、読み出しアドレスａｒｙ＿ａｄｄｒ２をデコードして指定されたデータを選択するセレクタ９０２が記憶素子９０１と信号伝播保証回路９０３との間に配置されている。
【０１５７】
この回路構成では、ブロックｐｅ２のスケジューリングにおいて、異なるクロック領域としての「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理と「Ｒａｒｒａｙ＿ｄａｔａ」演算処理との間に２ステップ以上の間隔を開けて割り当てる必要があるが、［配列のデータ幅］個分の信号伝播保証回路９０３があればよい。例えば、データ幅８ｂｉｔ×１６要素の配列の場合、８個の信号伝播保証回路が設けられる。
【０１５８】
図６（ｂ）に示す回路では、読み出しアドレスａｒｙ＿ａｄｄｒ２をデコードして指定されたデータを選択するセレクタ９０２が信号伝播保証回路９０３の後段に配置されている。
【０１５９】
この回路構成では、［配列のデータ幅×要素数］個分の信号伝播保証回路９０３が必要となるが、ブロックｐｅ２のスケジューリングにおいて、異なるクロック領域としての「Ｒａｒｒａｙ＿ａｄｄｒ」演算処理の次のステップに「Ｒａｒｒａｙ＿ｄａｔａ」演算処理を割り当てることが可能となる。例えば、データ幅８ｂｉｔ×１６要素の配列の場合、１２８個の信号伝播保証回路が設けられる。
【０１６０】
スケジューリング工程（図２のステップＳＴ３）とデータパス・コントローラ生成工程（図２のステップＳＴ５）において、設計者によって処理速度を速くすることよりも、面積や消費電力を小さくすることが優先される場合には、図６（ａ）に示す回路が生成され、設計者によって面積や消費電力を小さくすることよりも、処理速度を速くすることが優先される場合には、図６（ｂ）に示す回路が生成されるため、スケジューリング工程では、回路構成に応じたスケジューリングが行われる。
【０１６１】
以上により、本実施形態の動作合成装置１によれば、動作周波数や位相が異なる複数種類のクロックにより駆動される回路を合成する際に、要求される回路面積や処理速度に応じてクロック領域間の信号伝播を保証するための信号伝播保証回路を生成するデータパス・コントローラ生成手段４５と、その信号伝播保証回路における遅延サイクルを考慮してスケジューリングを行うスケジューリング手段４３とを有している。これによって、多相クロック回路において、異なるクロック領域間の信号伝播を保証し、正しく動作する回路を生成することができる。
【０１６２】
なお、上記実施形態では、特に説明しなかったが、異なる複数種類のクロックにより駆動される処理回路を合成する際に、クロック情報１２から得られる信号伝播保証回路の遅延サイクルを考慮して、各処理がどの実行サイクルで実行するかを決定するスケジューリング手段４３と、このスケジューリング手段４３のスケジューリング結果に基づいて、異なるクロック領域間に、異なるクロック領域間の信号伝播を保証する信号伝播保証回路を生成する信号伝播保証回路生成手段とを有することにより、異なるクロック領域間の信号伝播を保証し、正しく動作する回路を生成することができる本発明の目的を達成するこができる。
【０１６３】
また、上記実施形態では、特に説明しなかったが、本発明の半導体集積回路の製造方法として、本発明の上記動作合成装置１を用いて動作合成した回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路を製造することができる。これによって、異なる複数種類のクロックにより正しく動作する処理回路を得ることができる。
【０１６４】
以上のように、本発明の好ましい実施形態を用いて本発明を例示してきたが、本発明は、この実施形態に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
【産業上の利用可能性】
【０１６５】
本発明は、ディジタル回路の設計において、動作記述から回路をコンピュータ自動合成する動作合成装置および、この動作合成装置を用いた動作合成方法、この動作合成方法の各ステップをコンピュータに実行させるための動作合成プログラムおよびこの動作合成プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体の分野において、複数種類のクロックにより動作する回路を合成する動作合成装置であって、複数のクロック領域間の信号伝播を保証し、さらに、クロックと伝播信号とを同期化させるべく、その信号伝播保証回路によって遅延を生じせしめて、回路が正しく動作するようにスケジューリングを行うことができる。
【図面の簡単な説明】
【０１６６】
【図１】本発明の実施形態に係る動作合成装置の概略構成例を示すブロック図である。
【図２】図１の動作合成装置における各処理手順を説明するためのフローチャートである。
【図３】図１のクロック情報の一例を示す波形図である。
【図４】（ａ）および（ｂ）は、コントロールデータフローグラフ例を示す図であり、（ｃ）および（ｄ）は、（ａ）および（ｂ）のスケジューリング例を示す図である。
【図５】図４（ｃ）および図４（ｄ）に示すスケジューリング結果を、図１３に示す回路により実行したときの信号遷移例を示すタイミングチャートである。
【図６】（ａ）および（ｂ）は、異なるクロック領域間の共通メモリへのアクセスを行う回路について、データパスの構成例を示す回路図である。
【図７】（ａ）および（ｂ）は、並列動作する回路のコントロールデータフローグラフ（ＣＤＧＦ）の一例を示す図である。
【図８】（ａ）および（ｂ）は、図７（ａ）と図７（ｂ）に示すコントロールデータフローグラフについてスケジューリング処理を施した結果を示す図である。
【図９】図８（ａ）と図８（ｂ）のスケジューリング結果を実行する回路例を示すブロック図である。
【図１０】（ａ）は、同期チャネル通信を行う回路についてデータパスの構成例を示すブロック図であり、（ｂ）は、その信号遷移例を示すタイミングチャートである。
【図１１】（ａ）は、非同期チャネル通信を行う回路についてデータパスの構成例を示すブロック図であり、（ｂ）は、その信号遷移例を示すタイミングチャートである。
【図１２】（ａ）は、共通メモリへのアクセスを行う回路についてデータパスの構成例を示すブロック図であり、（ｂ）は、その信号遷移例を示すタイミングチャートである。
【図１３】異なるクロック領域間で同期チャネル通信を行う回路についてデータパスの構成例を示すブロック図である。
【図１４】図１３の同期チャネル通信を行う回路について信号遷移例を示すタイミングチャートである。
【図１５】異なるクロック領域間で非同期チャネル通信を行う回路についてデータパスの構成例を示すブロック図である。
【符号の説明】
【０１６７】
１  動作合成装置
２  操作入力部
３  表示部
４  ＣＰＵ（中央演算処理装置；制御手段）
４１  クロック情報解析手段
４２  ＣＤＦＧ生成手段
４３  スケジューリング手段
４４  アロケーション手段
４５  データパス・コントローラ生成手段
５  ＲＡＭ
６  ＲＯＭ
７  データベース
１１  動作記述
１２  クロック情報
１３  ＲＴＬ記述
１０１〜１１６  節点
３０１、３０２  ブロック（回路ブロック）
３０３、３０３ａ、３０３ｂ  ブロックｍｅｍｏｒｙ
４０１、４０２  コントローラ  
４０３〜４０８  ポート
５０１、５０２  加算器
６０１、６０３〜６０５、９０２  セレクタ
６０２  制御信号を生成する回路    
６０６  記憶素子
７０１〜７０３、８０７、８０８、９０３  信号伝播保証回路
８０１〜８０５  クロックを切り替える回路  
８０６、９０１  記憶素子（記憶領域）
【図１】
2008242527.tif 000003
【図２】
2008242527.tif 000004
【図３】
2008242527.tif 000005
【図４】
2008242527.tif 000006
【図５】
2008242527.tif 000007
【図６】
2008242527.tif 000008
【図７】
2008242527.tif 000009
【図８】
2008242527.tif 000010
【図９】
2008242527.tif 000011
【図１０】
2008242527.tif 000012
【図１１】
2008242527.tif 000013
【図１２】
2008242527.tif 000014
【図１３】
2008242527.tif 000015
【図１４】
2008242527.tif 000016
【図１５】
2008242527.tif 000017