(57)【要約】【課題】  下位階層の関数とその関数を呼び出す側の上位階層の処理とが並列動作するような最適なスケジューリングを実現する。【解決手段】  設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループに振り分けるスケジューラであって、動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とをスケジュール情報として取得し、当該関数を呼び出す上位階層の動作記述のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が関数と並列に動作するように、上位階層のスケジューリングを行う。【選択図】      図１
2005189939.tif 000002
【特許請求の範囲】
【請求項１】
設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループに振り分けるスケジューラであって、
前記動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するスケジュール情報取得部と、
取得された前記スケジュール情報に基づいて、前記関数を呼び出す上位階層の動作記述のうち、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が前記関数と並列に動作するように、上位階層のスケジューリングを行うスケジューリング処理部と
を備えることを特徴とするスケジューラ。
【請求項２】
前記スケジューリング処理部は、前記下位階層の関数における入力演算を、当該関数において入力データを用いる演算の直前に配置し、当該関数における出力演算を、当該関数において出力データを算出する演算の直前に配置するように、前記下位階層の関数をスケジューリングすること
を特徴とする請求項１に記載のスケジューラ。
【請求項３】
設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループに振り分けるスケジューラによるスケジューリング方法であって、
スケジュール情報取得部が、前記動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得する段階と、
スケジューリング処理部が、取得された前記スケジュール情報に基づいて、前記関数を呼び出す上位階層の動作記述のうち、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算とを求める段階と、
前記スケジューリング処理部が、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算が前記関数と並列に動作するように、上位階層のスケジューリングを行う段階と
を含むことを特徴とするスケジューリング方法。
【請求項４】
設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループにコンピュータにより振り分けるためのスケジューリング・プログラムであって、
スケジュール情報取得部が、前記動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するステップと、
スケジューリング処理部が、取得された前記スケジュール情報に基づいて、前記関数を呼び出す上位階層の動作記述のうち、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算とを求めるステップと、
前記スケジューリング処理部が、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算が前記関数と並列に動作するように、上位階層のスケジューリングを行うステップとを含み、
前記各ステップの処理を前記コンピュータに実行させることを特徴とするスケジューリング・プログラム。
【請求項５】
設計対象である論理回路の動作が記述された動作記述を解析して、データ・フロー・グラフを生成する動作記述解析部と、前記データ・フロー・グラフ内の各動作をクロック・サイクル毎に動作するグループに振り分けるスケジューラと、スケジューリング済みのデータ・フロー・グラフ内の各演算を論理回路の回路部品に割り付ける回路部品割付部と、スケジューリング結果と前記回路部品割り付け結果に基づいて、レジスタ・トランスファ・レベル記述を生成するＲＴＬ記述生成部とを備える高位合成装置であって、
前記スケジューラは、
前記データ・フロー・グラフ内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するスケジュール情報取得部と、
取得された前記スケジュール情報に基づいて、前記関数を呼び出す上位階層の演算のうち、前記第１のクロック・サイクルにおいて動作可能な演算と前記第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が前記関数と並列に動作するように、上位階層のスケジューリングを行うスケジューリング処理部と
を備えることを特徴とする高位合成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作記述から論理回路を自動合成する高位合成で用いられるスケジューラ、スケジューリング方法、スケジューリング・プログラム、及び高位合成装置に関する。
【背景技術】
【０００２】
半導体技術の発展に伴って、１チップ上に実装可能なシステムの規模が増大してきている。巨大なシステムを短期間に設計するための１つの手段として、システムの動作のみを記述（以下、動作記述という）し、この動作記述から、クロック・サイクル、レジスタ、演算器等のハードウェア情報を含んだＲＴＬ（Register Transfer Level）記述に合成する高位合成がある（例えば、特許文献１，非特許文献１参照）。
【特許文献１】特開平５−１０１１４１号公報
【非特許文献１】Daniel D. Gajski, 他著，“HIGH-LEVEL SYN THESIS Introduction to Chip and System Design”，Kluwer Academic Publishers，1992年
【発明の開示】
【発明が解決しようとする課題】
【０００３】
高位合成において、解析した動作記述をクロック・サイクル（動作周期）毎に実行するグループに振り分ける処理をスケジューリングといい、各クロック・サイクルをコントロール・ステップという。
【０００４】
動作記述は、設計対象の回路システムによっては、階層構造を持つ。例えば、Ｃ言語により記述された動作記述は、関数呼び出しを含む場合があり、この場合、関数呼び出し側が上位階層となり、呼び出される関数が下位階層となる。
【０００５】
従来のスケジューリング方式では、演算の実行に必要なディレイ値およびコントロール・ステップ数のみを使用して、動作記述内の各演算をコントロール・ステップにスケジューリングする。従って、スケジューリング対象となっている演算は、その演算の入力データを計算する演算がスケジューリングされたコントロール・ステップより後のコントロール・ステップにスケジューリングされることになる。また、スケジューリング対象の演算の出力データを使用する演算は、スケジューリング対象の演算がスケジューリングされるコントロール・ステップより後のコントロール・ステップにスケジューリングされることになる。下位階層の関数についても同様に、関数の実行に要するディレイ情報およびコントロール・ステップ数のみに基づいてスケジューリングされるため、下位階層の関数へ渡す入力データが揃ってから下位階層の関数の処理が開始され、下位階層の関数の実行が終了してから上位階層において出力データの利用が可能になるようにスケジューリングされる。
【０００６】
このようなスケジューリング方式では、上位階層と下位階層で本来ならば並列実行可能な動作を十分考慮できず、最適なスケジューリングができないといった問題があった。また、複数の下位階層の関数が上位階層から呼ばれている場合も同様に、従来のスケジューリング方式では、本来ならば複数の下位階層の関数が並列実行可能であるにもかかわらず、この並列実行可能な動作を考慮できず、１番目に呼ばれた関数の処理が終了してから２番目に呼ばれた関数の処理が開始されるような直列的なスケジューリングしかできないといった問題があった。
【０００７】
また、下位階層の動作記述を上位階層の動作記述内に展開した上でスケジューリングを行う従来の方法では、下位階層の動作記述が予め用意されていなければならないといった制限があり、設計資産の再利用が十分にできないといった問題もあった。
【０００８】
本発明は、このような問題に鑑みてなされたものであって、設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に実行するグループに振り分けるスケジューリングにおいて、下位階層の関数とその関数を呼び出す側の上位階層の処理とが並列動作するような最適なスケジューリングを実現するスケジューラ、スケジューリング方法、スケジューリング・プログラム、及び高位合成装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、本発明に係るスケジューラの特徴は、設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループに振り分けるスケジューラであって、（ａ）動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するスケジュール情報取得部と、（ｂ）取得されたスケジュール情報に基づいて、関数を呼び出す上位階層の動作記述のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が関数と並列に動作するように、上位階層のスケジューリングを行うスケジューリング処理部とを備えることにある。
【００１０】
また、本発明に係るスケジューリング方法の特徴は、設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループに振り分けるスケジューラによるスケジューリング方法であって、（ａ）スケジュール情報取得部が、動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得する段階と、（ｂ）スケジューリング処理部が、取得されたスケジュール情報に基づいて、関数を呼び出す上位階層の動作記述のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求める段階と、（ｃ）スケジューリング処理部が、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算が関数と並列に動作するように、上位階層のスケジューリングを行う段階とを含むことにある。
【００１１】
また、本発明に係るスケジューリング・プログラムの特徴は、設計対象である論理回路の動作が階層構造をもって記述された動作記述内の各動作を、クロック・サイクル毎に動作するグループにコンピュータにより振り分けるためのスケジューリング・プログラムであって、（ａ）スケジュール情報取得部が、動作記述内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するステップと、（ｂ）スケジューリング処理部が、取得されたスケジュール情報に基づいて、関数を呼び出す上位階層の動作記述のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求めるステップと、（ｃ）スケジューリング処理部が、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算が関数と並列に動作するように、上位階層のスケジューリングを行うステップとを含み、各ステップの処理をコンピュータに実行させることにある。
【００１２】
更にまた、本発明に係る高位合成装置の特徴は、設計対象である論理回路の動作が記述された動作記述を解析して、データ・フロー・グラフを生成する動作記述解析部と、データ・フロー・グラフ内の各動作をクロック・サイクル毎に動作するグループに振り分けるスケジューラと、スケジューリング済みのデータ・フロー・グラフ内の各演算を論理回路の回路部品に割り付ける回路部品割付部と、スケジューリング結果と回路部品割り付け結果に基づいて、レジスタ・トランスファ・レベル記述を生成するＲＴＬ記述生成部とを備え、上記スケジューラは、（ａ）データ・フロー・グラフ内の下位階層の関数の処理が開始されてから当該関数の入力データが用いられるまでの第１のクロック・サイクル数と、当該関数の出力データが出力されてから当該関数の処理が終了するまでの第２のクロック・サイクル数とを、当該関数のスケジュール情報として取得するスケジュール情報取得部と、（ｂ）取得されたスケジュール情報に基づいて、関数を呼び出す上位階層の演算のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が関数と並列に動作するように、上位階層のスケジューリングを行うスケジューリング処理部とを備えることにある。
【発明の効果】
【００１３】
本発明によれば、階層構造を持つ動作記述の階層構造を保ったまま、下位階層の関数とその関数を呼び出す側の上位階層の処理とが並列動作するように最適なスケジューリングを実現するスケジューラ、スケジューリング方法、スケジューリング・プログラム、及び高位合成装置を提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態を図面に基づいて説明する。尚、各図面を通じて同一もしくは同等の部位や構成要素には、同一もしくは同等の参照符号を付し、その説明を省略もしくは簡略化する。
【００１５】
［高位合成装置およびスケジューラの構成］
本実施形態における高位合成装置は、回路システムの動作のみを記述した動作記述から、クロック・サイクル、レジスタ、演算器等のハードウェア情報を含んだＲＴＬ（Register Transfer Level）記述に合成するための設計装置であり、例えば、中央処理装置、記憶装置、入力装置、出力装置などを備えたコンピュータシステムにより実現される。
【００１６】
図１に示すように、高位合成装置は、動作記述解析部２０、スケジューラ４０、回路部品割付部５０、ＲＴＬ記述生成部６０、入出力部８０などを備えている。
【００１７】
動作記述解析部２０は、設計対象である論理回路の動作のみが記述された動作記述１０を解析して、データ・フロー・グラフ（ＤＦＧ）３０を生成する。動作記述１０は、例えばＣ言語やＣ＋＋言語等のプログラミング言語によって記述され、動作記述解析部２０は、動作記述１０を翻訳して解析し、解析結果に基づいて、動作記述１０内のデータの依存関係を表現したＤＦＧ３０を生成する。
【００１８】
スケジューラ４０は、スケジューリング処理部４１、スケジュール情報取得部４２、スケジュール情報抽出部４３、スケジュール情報登録部４４などを備え、ＤＦＧ３０内の各処理をクロック・サイクル毎に動作するグループに振り分けるスケジューリング処理を実行する。
【００１９】
スケジュール情報取得部４２は、下位階層の関数の処理が開始されてからその関数の入力データが用いられるまでのクロック・サイクル数（第１のクロック・サイクル数）と、その関数の出力データが出力されてから関数の処理が終了するまでのクロック・サイクル数（第２のクロック・サイクル数）とを、その関数のスケジュール情報として下位階層スケジューリング・ライブラリ４５から取得する。
【００２０】
スケジューリング処理部４１は、スケジュール情報取得部４２によって取得された下位階層の関数のスケジュール情報に基づいて、その関数を呼び出す上位階層の演算のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が関数と並列に動作するように、上位階層のスケジューリングを最適化する。また、スケジューリング処理部４１は、下位階層の関数をスケジューリングする際に、スケジューリング対象の関数に入力データを入力するための演算を、当該関数の中でその入力データを用いる演算の直前に配置し、当該関数から出力データを出力する演算を、当該関数の中でその出力データを算出する演算の直後に配置するように、スケジューリング対象の関数のスケジューリングを最適化する。
【００２１】
また、下位階層の関数のスケジューリング情報が下位階層スケジューリング・ライブラリ４５に複数登録されている場合、スケジューリング処理部４１は、スケジュール情報取得部４２が取得した複数のスケジューリング情報を、設計対象の論理回路に応じて利用しスケジューリング処理を実行する。
【００２２】
また、上位階層の動作記述から複数の関数が連続して呼び出されるような場合、スケジューリング処理部４１は、複数の関数のうち、先行して呼び出される関数の第２のクロック・サイクルにおいて動作可能な演算を、後続する関数の演算の中から求め、求めた後続の関数の演算が先行して呼び出される関数と並列に動作するように、後続の関数のスケジューリングを最適化する。
【００２３】
スケジュール情報抽出部４３は、スケジューリング処理部４１による下位階層の関数のスケジューリング結果から、スケジューリング対象の関数の第１のクロック・サイクル数と第２のクロック・サイクル数とをスケジュール情報として抽出する。スケジュール情報登録部４４は、抽出された第１のクロック・サイクル数と第２のクロック・サイクル数とをスケジュール情報として下位階層スケジューリング・ライブラリ４５に登録する。
【００２４】
回路部品割付部５０は、スケジューリング済みのＤＦＧ３０内の各動作を論理回路の回路部品に割り付ける。
【００２５】
ＲＴＬ記述生成部６０は、スケジューリング結果と回路部品割り付け結果に基づいて、レジスタ・トランスファ・レベル（ＲＴＬ）記述７０を生成する。
【００２６】
入出力部８０は、スケジューリング処理が施されたＤＦＧ３０や下位階層スケジューリング・ライブラリ４５に登録されたスケジュール情報などを表示装置８１に表示し、入力装置８２からの入力・指示等を受け付ける。
【００２７】
［高位合成処理］
図２は、図１に示した高位合成装置による処理手順の一例を示している。尚、図２に例示する処理手順をコンピュータプログラムにして、コンピュータ読み取り可能な記憶媒体に格納し、コンピュータシステムにより実現される高位合成装置に読み取らせ、読み取らせたコンピュータプログラムに記述されている各処理を高位合成装置に実行させることができる。
【００２８】
ステップS001において、動作記述解析部２０は、動作記述１０を入力し、ステップS002において、入力した動作記述１０を解析して、ＤＦＧ３０を生成する。
【００２９】
ステップS003において、スケジューリング処理部４１は、ＤＦＧ３０内の下位階層の関数について、スケジューリング対象の関数に入力データを入力するための演算を、当該関数の中でその入力データを用いる演算の直前に配置し、当該関数から出力データを出力する演算を、当該関数の中でその出力データを算出する演算の直後に配置するように、スケジューリングする。
【００３０】
ステップS004において、スケジュール情報抽出部４３は、スケジューリング処理部４１による下位階層の関数のスケジューリング結果から、スケジューリング対象の関数の第１のクロック・サイクル数と第２のクロック・サイクル数とをスケジュール情報として抽出する。更に、スケジュール情報登録部４４は、抽出された第１のクロック・サイクル数と第２のクロック・サイクル数とをスケジュール情報として下位階層スケジューリング・ライブラリ４５に登録する。
【００３１】
ステップS005において、スケジューラ４０は、ＤＦＧ３０内の下位階層の関数についてスケジューリング処理が完了したか否かを判定し、完了していなければ処理をステップS003に戻して、次の関数のスケジューリング処理を行い、完了していれば処理をステップS006に進める。
【００３２】
ステップS006において、スケジュール情報取得部４２は、下位階層の関数のスケジュール情報を下位階層スケジューリング・ライブラリ４５から取得する。
【００３３】
ステップS007において、スケジューリング処理部４１は、スケジュール情報取得部４２によって取得された下位階層の関数のスケジュール情報に基づいて、その関数を呼び出す上位階層の演算のうち、第１のクロック・サイクルにおいて動作可能な演算と第２のクロック・サイクルにおいて動作可能な演算とを求め、求めた演算が関数と並列に動作するように、上位階層のスケジューリングを最適化する。
【００３４】
ステップS008において、スケジューラ４０は、ＤＦＧ３０内の上位階層の処理についてスケジューリング処理が完了したか否かを判定し、完了していなければ処理をステップS006に戻し、完了していればスケジューリング処理を終了する。
【００３５】
ステップS009において、回路部品割付部５０は、スケジューリング済みのＤＦＧ３０内の各動作を論理回路の回路部品に割り付ける。
【００３６】
ステップS010において、ＲＴＬ記述生成部６０は、スケジューリング結果と回路部品割り付け結果に基づいて、ＲＴＬ記述７０を生成する。
【００３７】
尚、ステップS007において、スケジューリング処理部４１が用いる下位階層のスケジュール情報は、スケジュール情報抽出部４３によって下位階層のスケジューリング結果から抽出されたスケジュール情報に必ずしも限らない。例えば、下位階層の関数のＲＴＬ記述が既に用意されているのであれば、スケジュール情報抽出部４３によってＲＴＬ記述からスケジューリング情報を抽出し、スケジュール情報登録部４４により下位階層スケジューリング・ライブラリ４５に登録しておいても良い。あるいは、入力装置８２から入力された下位階層の関数のスケジュール情報を、入出力部８０が下位階層スケジューリング・ライブラリ４５に登録しても良い。
【００３８】
［スケジューリング処理（実施例１）］
次に、スケジューラ４０で実行されるスケジューリング処理を詳細に説明する。
【００３９】
図３は、スケジューリング対象の動作記述を、データ・フロー・グラフ（ＤＦＧ）によりグラフィカルに表現した例を示している。図３において、円形図形は演算を表す、演算２０１，２０２，２０３，２０５，２０６は、加算演算などの通常の演算を表し、演算２０４は、下位階層である関数「g」を呼び出す演算である。演算を表している各円形図形を接続する実線は、演算間のデータ依存性を表している。例えば、演算２０２と演算２０３とを接続する実線は、演算２０２の演算結果を演算２０３が使用することを表している。従って、下位階層の関数「g」は、演算２０１の演算結果と演算２０３の演算結果とを入力し、演算２０５と演算２０６が使用するデータを演算結果として出力する。
【００４０】
図４は、図３に示した動作記述を一般的なスケジューリング方式である「ＡＳＡＰ（As Soon As Possible）アルゴリズム」（非特許文献１参照）を用いてスケジューリングした結果を例示している。図４における水平方向の平行線は、クロック・サイクルの境界を表している。これらの平行線に挟まれた１区間が、１コントロール・ステップであり、１コントロール・ステップ内の演算は１クロック・サイクル内で実行される。但し、演算３０４で表された関数「g」の呼び出し処理は、一般に、複数のクロック・サイクルに跨って実行される。また、図４における点線の平行線は、下位階層において関数「g」が実行される際のクロック・サイクルの境界を表している。
【００４１】
それに対して、図５は、本実施形態におけるスケジューラ４０によりスケジューリングした結果を例示しており、下位階層である関数「g」の実行と演算４０３及び演算４０５とが並列に実行されるようにスケジューリングされている。
【００４２】
図６及び図７は、図５に示したスケジューリング結果を得るために、スケジューラ４０にて用いられるスケジュール情報を例示している。関数が実行される際には、関数は、関数外部からデータを入力し、処理結果を関数外部へ出力する。入力されたデータを使用する前に、関数内部で何らかの初期化処理が必要とされる場合、例えば、ＢＵＳを介してデータを取得する場合はＢＵＳ調停の処理が必要であり、関数内部で実際に入力データが使用されるのは、関数の処理が開始されてから、数クロック・サイクル後となる。スケジューラ４０は、入力データ毎のこのサイクル数（関数の処理が開始されてから入力データが用いられるまでのクロック・サイクル数）をスケジューリングに必要なスケジュール情報（第１のクロック・サイクル数）として用いる。図６に示した例では、「入力１」については「M1」、「入力２」については「M2」がスケジュール情報（第１のクロック・サイクル数）である。
【００４３】
また、関数内で処理された結果を関数外部に出力する場合は、一つの処理結果を関数外部へ出力した後も関数内部で処理が続く場合がある。スケジューラ４０は、関数の出力データが出力されてから関数の処理が終了するまでのクロック・サイクル数（第２のクロック・サイクル数）についてもスケジューリングに必要なスケジュール情報として用いる。図６に示した例では、「出力１」については「N1」、「出力２」については「N2」がスケジュール情報（第２のクロック・サイクル数）である。
【００４４】
図８は、スケジューリング処理部４１が実行するスケジューリング・アルゴリズムの一例を示すフローチャートであり、図９は、そのスケジューリング・アルゴリズムをＣ言語によるプログラムのように示した例である。以下、スケジューリング処理部４１が、このスケジューリング・アルゴリズムを用いて、図３に示した動作記述を図５に示すスケジューリング結果にスケジューリングする処理手順を説明する。
【００４５】
先ず、ステップS601において、スケジューリング処理部４１は、集合Vにすべての演算vi（図３における演算２０１〜演算２０６）を登録する。
【００４６】
次に、ステップS602からステップS609のループ処理１において、スケジューリング処理部４１は、親演算を持たない演算、つまり、他の演算の演算結果を使用しない演算をスケジューリングする。図３に示した例では、演算２０１と演算２０２が親演算を持たない演算である。ステップS603において、スケジューリング処理部４１は、ＤＦＧ３０で表される演算間のデータ依存性に基づいて、演算viが親演算を持たないか否かを判定し、ステップS604において、親演算を持たないと判定した演算viを、１ステップ目のコントロール・ステップにスケジューリングする（コントロール・ステップSiに「1」をセットする）。更に、スケジューリング処理部４１は、ステップS605において、この演算viを集合Vから削除する。
【００４７】
一方、ステップS603の判定の結果、親演算を持つ演算vi、すなわち他の演算の演算結果を使用する演算viについては、スケジューリング処理部４１は、ステップS607において、コントロール・ステップSiに「0」をセットする。
【００４８】
ステップS602からステップS609のループ処理１が終了した後、スケジューリング処理部４１は、ステップS610からステップS627のループ処理２において、集合Vに残ったスケジューリングされていない演算vi（演算２０３〜演算２０６）に対してスケジューリング処理を施す。
【００４９】
ステップS610におけるループ処理２（while文）の１回目のループでは、集合Vは、
V = {OP3, g, OP4, OP5}                                    (1) 
となっている。
【００５０】
ステップS611のループ処理３（for文）の１回目のループにおいて、演算viは演算「OP3」であるとする（i=3）と、演算v3すなわち演算「OP3」の親演算vjは演算「OP2」のみである。この演算「OP2」は、既に１ステップ目のコントロール・ステップ（Si=1）にスケジューリングされている。従って、ステップS612において、スケジューリング処理部４１は、演算v3のすべての親演算vjがスケジューリング済みであると判定する。
【００５１】
そして、スケジューリング処理部４１は、ステップS613のループ処理４（for文）に入り、ステップS614において、演算v3の親演算vjは関数呼び出しであるか否かを判定する。ここでは、親演算vj（演算「OP2」）は関数呼び出しではないので、スケジューリング処理部４１は、ステップS617において、集合Tjに「1」をセットする。スケジューリング処理部４１は、ステップS613からステップS619において、演算v3のすべての親演算vjについて、Tjの値をで集め、ステップS618において集合Tに登録する。演算「OP3」の場合は、親演算vjは「OP2」のみであるため、ステップS613からステップS619のループ処理４の結果、集合Tは、
T = {1}                                                      (2) 
となる。
【００５２】
次に、スケジューリング処理部４１は、ステップS620からステップS623の処理において、演算v3すなわち演算「OP3」がスケジューリングされるコントロール・ステップを決定する。具体的には、スケジューリング処理部４１は、ステップS620において、演算v3が関数呼び出しであるか否かを判定し、演算v3は関数呼び出しではないので、ステップS623において、集合Tのなかの最大値に「1」を加算した値をコントロール・ステップSiにセットする。その結果、演算v3（演算「OP3」）のコントロール・ステップS3は、
S3 = 2                                                        (3) 
となり、演算「OP3」は、２ステップ目のコントロール・ステップにスケジューリングされる。
【００５３】
再び、ステップS611のループ処理３（for文）に戻って、２回目のループ処理３で、演算viは演算「g」である（i=g）とすると、演算vgすなわち関数呼び出し演算「g」の親演算vjは、演算「OP1」と演算「OP3」である。演算「OP1」は１番目のコントロール・ステップ、演算「OP3」は２番目のコントロール・ステップに既にスケジューリングされている。従って、ステップS612において、スケジューリング処理部４１は、演算vgのすべての親演算vjがスケジューリング済みであると判定する。
【００５４】
また、演算vg（演算「g」）のすべての親演算vjは、関数呼び出しではないので、ステップS613からステップS619のループ処理４の結果、集合Tは、
T = {1, 2}                                                   (4) 
となる。
【００５５】
そして、スケジューリング処理部４１は、ステップS620からステップS623の処理において、演算vgすなわち関数呼び出し演算「g」がスケジューリングされるコントロール・ステップを決定する。演算vg（演算「g」）は関数呼び出しであるため、スケジューリング処理部４１は、ステップS621において、集合Tの中で、（Tj - Mj）が最大となる値に「1」を足したコントロール・ステップを計算する。ここで、関数「g」に関するスケジュール情報は、図１０に示すように、下位階層スケジューリング・ライブラリ４５に登録されているものとする。すなわち、関数「g」のスケジュール情報Mi，Niは、
M入力1 = 0, M入力2 = 1, N出力1 = 1, N出力2 = 0                    (5) 
である。
【００５６】
演算「OP1」の出力は関数「g」の入力1に接続され、演算「OP3」の出力は関数「g」の入力2に接続されているものとすると、集合Tの（Tj - Mj）は、
T1 − M入力1 = 1 − 0 = 1                                       (6) 
T3 − M入力2 = 1 − 1 = 1                                       (7) 
となる。ステップS621の処理の結果、コントロール・ステップSgは、
Sg = 2                                                         (8) 
と算出され、演算vg（関数呼び出し演算「g」）は、２番目のコントロール・ステップから、演算「OP3」と並行してスケジューリングされる。但し、図１０に示すように、関数「g」の実行には、Lサイクル要するため、関数呼び出し演算「g」は、２番目から（L+1）番目までの複数のコントロール・ステップに跨ってスケジューリングされる。
【００５７】
再度、ステップS611のループ処理３（for文）に戻って、３回目のループ処理３において、演算viは演算「OP4」であるとする。演算v4すなわち演算「OP4」の親演算vjは演算「g」のみである。演算「g」は、既に２番目のステップから（L+1）番目のステップまでのコントロール・ステップにスケジューリングされている。ここで、関数「g」の出力1が演算「OP4」に接続されているとすると、演算v4「OP4」の親演算vj「g」は関数呼び出しであるため（ステップS614）、ステップS615において、スケジューリング処理部４１はTjを、
Tj = (L+1)-1                                                  (9) 
を算出する。そして、演算v4（演算「OP4」）の親演算は演算「g」のみであるため、ステップS613からステップS619においてスケジューリング処理部４１により収集される集合Tは、
T = {L}                                                      (10) 
となる。ステップS620の判定の結果、演算vi「OP4」は関数呼び出しではないので、ステップS623の処理の結果、コントロール・ステップS4は、
S4 = L+1                                                     (11) 
となり、演算「OP4」は、（L+1）番目のコントロール・ステップに、演算vi「g」の一部と並行してスケジューリングされる。
【００５８】
再び、再び、ステップS611のループ処理３（for文）に戻って、４回目のループ処理３で、演算viは演算「OP5」となる。演算v5すなわち演算「OP5」の親演算vjは、演算「g」と演算「OP4」である。既に、演算「g」は２番目のステップから（L+1）番目のステップまでのコントロール・ステップにスケジューリングされており、演算「OP4」は（L+1）番目のコントロール・ステップにスケジューリングされている。ここで、関数「g」の出力2が演算「OP5」に接続されているとすると、ステップS614からステップS617の処理の結果、スケジューリング処理部４１はTjを、
T4 = L+1                                                    (12) 
Tg = L+1-0 = L+1                                          (13) 
と算出し、その結果、ステップS613からステップS619のループ処理４で収集される集合Tは、
T = {L+1}                                                   (14) 
となる。ステップS620の判定の結果、演算v5（演算「OP5」）は関数呼び出しではないので、ステップS623の処理の結果、コントロール・ステップS5は、
S5 = L+2                                                    (15) 
となる。その結果、演算「OP5」は（L+2）番目のコントロール・ステップにスケジューリングされる。
【００５９】
以上のループ処理３（ステップS611からステップS626）の過程の中で、スケジューリング処理部４１は、スケジューリング処理済みの演算viを集合Vから削除する処理（ステップS624）を行う。従って、ステップS611からステップS626のループ処理３が終了するときには、集合Vは空集合となり、ステップS610からステップS627のループ処理２も終了し、図８及び図９に示した一連のスケジューリング・アルゴリズムによる処理は終了する。
【００６０】
以上のように処理することにより、図１１に示すように、上位階層の演算「OP3」及び演算「OP4]の処理と下位階層の関数「g」の処理とが並列動作するようにスケジューリングされ、余分なサイクル・ステップがない最適なスケジューリング結果が得られる。
【００６１】
また、スケジューラ４０は、下位階層のスケジュール情報のみを使用するため、下位階層が動作記述で用意されている場合だけでなく、レジスタ転送レベルの記述で用意されている場合にも適用可能であり、設計資産を有効利用できる。
【００６２】
［スケジューリング処理（実施例２）］
次に、下位階層の関数をスケジューリングする際のスケジューリング処理部４１の処理手順例について説明する。尚、図１２は、下位階層の関数をスケジューリングする際のスケジューリング処理部４１が実行するスケジューリング・アルゴリズムの一例を示すフローチャートであり、図１３は、そのスケジューリング・アルゴリズムをＣ言語によるプログラムのように示した例である。以下、図１４に示す下位階層の関数「g」の動作記述の例を用いて説明する。
【００６３】
先ず、ステップS901において、スケジューリング処理部４１は、集合Vにすべての演算vi（図１４における演算「入力1」「入力2」「入力3」「OP1」「OP2」「OP3」「出力1」「出力2」）を登録する。
【００６４】
次に、ステップS902からステップS909のループ処理１において、スケジューリング処理部４１は、親演算を持たないすべての演算についてスケジューリングを行う。具体的には、スケジューリング処理部４１は、ステップS903において、親演算を持たないと判定した演算viを、ステップS904において、１ステップ目のコントロール・ステップにスケジューリングする（コントロール・ステップSiに「1」をセットする）。ここで、親演算を持たない演算viは、演算「入力1」「入力2」「入力3」である。従って、コントロール・ステップSiは、
S入力1 = 1, S入力2 = 1, S入力3 = 1                              (16) 
となり、演算vi（演算「入力1」「入力2」「入力3」）は、それぞれ１番目のコントロール・ステップにスケジューリングされる。更に、スケジューリング処理部４１は、ステップS905において、これらスケジューリング済みの演算vi（演算「入力1」「入力2」「入力3」）を集合Vから削除する。
【００６５】
一方、スケジューリング処理部４１は、ステップS907において、親演算を持つ演算viについて、コントロール・ステップSiに「0」をセットする。
【００６６】
ステップS902からステップS909のループ処理１が終了した後、ステップS910からステップS917までのループ処理２に進む。ステップS910からステップS917までのループ処理２における処理対象の集合Vには、未だスケジューリングされていない演算が格納されており、集合Vは、
V = {OP1, OP2, OP3, 出力1, 出力2}                        (17) 
である。
【００６７】
ステップS911からステップS916までのループ処理３（for文）における１回目のループ処理で、演算viとして演算「OP1」が選択された（i=op1）とすると、演算vOP1（演算「OP1」）の親演算は、演算「入力1」と演算「入力2」である。従って、スケジューリング処理部４１は、ステップS912において、双方の演算とも既にスケジューリング済みであると判定する。つまり、演算「入力1」と演算「入力2」は、ともに１番目のコントロール・ステップにスケジューリングされているため、そのコントロール・ステップSiは、
S入力1 = 1, S入力2 = 1                                         (18) 
である。従って、スケジューリング処理部４１は、ステップS913において、演算vOP1（演算「OP1」）のスケジューリング先のコントロール・ステップSOP1を、
SOP1 = 1 + 1 = 2                                            (19)
と算出する。その結果、演算vOP1（演算「OP1」）は、２番目のコントロール・ステップにスケジューリングされる。更に、スケジューリング処理部４１は、ステップS914において、スケジューリング済みの演算vOP1を集合Vから削除する。
【００６８】
このステップS911からステップS916までのループ処理３において、スケジューリング処理部４１が同様な処理を演算vi（演算「OP2」「OP3」「出力1」「出力2」）に対して施すと、各演算viのスケジューリング先のコントロール・ステップSiは、
SOP2 = 3, SOP3 = 4, S出力1 = 4, S出力2 = 5                    (20) 
と算出され、演算vOP2（演算「OP2」）は３番目のコントロール・ステップに、演算vOP3（演算「OP3」）と演算v出力1（演算「出力1」）は４番目のコントロール・ステップに、演算v出力2（演算「出力2」）は５番目のコントロール・ステップにスケジューリングされ、スケジューリング済みの演算viは集合Ｖから削除される。従って、ステップS911からステップS916までのループ処理３が終了するときには、集合Vは空集合となり、ステップS910からステップS917までのループ処理２も終了する。
【００６９】
次に、スケジューリング処理部４１は、ステップS918において、すべての入力演算viを集合Vに登録する。つまり、集合Vには、
V = {入力1, 入力2, 入力3}                                    (21)
と登録される。
【００７０】
集合Vに登録されたこれらの演算vi（演算「入力1」「入力2」「入力3」）が、次のステップS919からステップS925までのループ処理４の対象となる。ステップS919からステップS925までのループ処理４における１回目のループ処理で、演算viとして演算「入力1」が選ばれたとする。演算v入力1（演算「入力1」）の子演算vjは、演算「OP1」のみであるため、ステップS920からステップS923のループ処理５において、スケジューリング処理部４１は、子演算vOP1がスケジューリングされたコントロール・ステップSOP1を集合Tに収集し（ステップS921〜S922）、その結果、集合Tは、
T = {SOP1=2}                                                  (22)
となる。従って、ステップS924において、スケジューリング処理部４１は、演算v入力1のコントロール・ステップS入力1を、
S入力1 = 1                                                      (23)
と算出する。その結果、演算v入力1（演算「入力1」）は、最終的に１番目のコントロール・ステップにスケジューリングされる。
【００７１】
次に、ステップS919からステップS925までのループ処理４の２回目のループで演算viとして演算「入力2」が選ばれたとすると、演算入力1の場合と同様に、演算入力2（演算「入力2」）の子演算vOP1は、演算「OP1」のみであるため、演算v入力2（演算「入力2」）の最終的なスケジューリング先のコントロール・ステップS入力2は、
S入力2 = 1                                                     (24)
と算出される。その結果、演算「入力2」は、１番目のコントロール・ステップにスケジューリングされる。
【００７２】
更にまた、ステップS919からステップS925までのループ処理４の３回目のループで演算viとして演算「入力3」が選ばれたとすると、演算v入力3（演算「入力3」）の子演算vjは演算「OP2」しかない。ステップS920からステップS923のループ処理５において、スケジューリング処理部４１は、子演算vOP2がスケジューリングされたコントロール・ステップSOP2を集合Tに収集し、その結果、集合Tは、
T = {SOP2=3}                                                 (25)
となる。従って、ステップS924において、スケジューリング処理部４１は、演算v入力3（演算「入力3」）の最終的なスケジューリング先のコントロール・ステップSを、
S入力3 = 2                                                     (26) 
と算出する。その結果、最終的に演算「入力3」は、２番目のコントロール・ステップにスケジューリングされる。
【００７３】
このように、スケジューリング処理部４１は、下位階層の関数をスケジューリングする際に、スケジューリング対象の関数に入力データを入力するための演算vi（演算「入力1」「入力2」「入力3」）を、当該関数の中でその入力データを用いる演算「OP1」「OP2」の直前に配置し、当該関数から出力データを出力する演算「出力1」「出力2」を、当該関数の中でその出力データを算出する演算「OP1」「OP2」の直後に配置するように、スケジューリング対象の関数のスケジューリングを最適化する。
【００７４】
以上の処理によって、スケジューリング処理部４１により最終的に得られたスケジューリング結果を図１５に示す。この結果から、スケジュール情報抽出部４３は、スケジューリング対象の関数の第１のクロック・サイクル数（関数の処理が開始されてから入力データが用いられるまでのクロック・サイクル数）と第２のクロック・サイクル数（関数の出力データが出力されてから関数の処理が終了するまでのクロック・サイクル数）とをスケジュール情報として抽出する。スケジュール情報抽出部４３により抽出されるスケジュール情報（第１のクロック・サイクル数Miと第２のクロック・サイクル数Ni）は、
M入力1 = 0, M入力2 = 0, M入力3 = 1,
N出力1 = 1, N出力2 = 0                                         (27)
となる。
【００７５】
そして、スケジュール情報登録部４４は、抽出された第１のクロック・サイクル数と第２のクロック・サイクル数とをスケジュール情報として下位階層スケジューリング・ライブラリ４５に登録する。
【００７６】
［スケジューリング処理（実施例３）］
次に、下位階層の１つの関数について複数個のスケジューリング情報が下位階層スケジューリング・ライブラリ４５に登録されている場合の、スケジューラ４０のスケジューリング処理について説明する。
【００７７】
図１６は、下位階層の関数である関数「g」の動作記述の一例を示している。演算「OP1」及び演算「OP2」は、同一の演算器で実行可能な演算であると仮定する。また、この関数「g」の動作記述をスケジューリング処理部４１がスケジューリングした結果が複数種類あるものとする。
【００７８】
第１のスケジューリング結果として、３つあるすべての入力（入力1，入力2，入力3）を同一の入力端子から入力し、演算「OP1」と演算「OP2」を同一の演算器で実行し、３つある出力（出力1，出力2）を同一の出力端子へ出力するように、スケジューリング処理部４１がスケジューリングした結果（スケジューリング１）を、図1７に例示する。第１のスケジューリング結果におけるスケジュール情報は、Lを関数全体の実行に要するサイクル数、Miを第１のクロック・サイクル数、Niを第２のクロック・サイクル数とすると、
L = 5, M入力1 = 0, M入力2 = 1, M入力3 = 2, 
N出力1 = 1, N出力2 = 0                                           (28) 
となる。
【００７９】
また、第２のスケジューリング結果として、３つあるすべての入力（入力1，入力2，入力3）を異なる入力端子から入力し、演算「OP1」と演算「OP2」とを別々の演算器で実行し、２つある出力（出力1，出力2）を異なる出力端子から出力するように、スケジューリング処理部４１がスケジューリングしたスケジューリング結果（スケジューリング２）を、図１８に示す。第２のスケジューリング結果におけるスケジュール情報は、
L = 3, M入力1 = 0, M入力2 = 0, M入力3 = 0, 
N出力1 = 0, N出力2 = 0                                           (29)
となる。
【００８０】
これら２種類のスケジューリング結果から、スケジュール情報抽出部４３は、各スケジューリング結果に対応する第１のクロック・サイクル数と第２のクロック・サイクル数とを関数「g」のスケジュール情報としてそれぞれ抽出し、スケジュール情報登録部４４は、下位階層スケジューリング・ライブラリ４５に各スケジューリング結果に対応づけてそれぞれ登録する。図１９に下位階層スケジューリング・ライブラリ４５に登録される、関数「g」の各スケジューリング結果に対応するスケジュール情報を示す。
【００８１】
スケジュール情報取得部４２は、これらの情報を下位階層スケジューリング・ライブラリ４５から取得し、スケジューリング処理部４１は、スケジュール情報取得部４２が取得した複数のスケジューリング情報を、設計対象の論理回路に応じて利用しスケジューリング処理を実行することにより、様々なスケジューリング結果を生成することができる。
【００８２】
一例として、図２０に示す動作記述をスケジューリングする場合を考える。図２０に示す動作記述では、演算「OP1」の演算結果は関数「g」の入力演算「入力1」に、演算「OP4」の演算結果は関数「g」の入力演算「入力2」に、演算「OP9」の演算結果は関数「g」の入力演算「入力3」に接続されるものとする。また、関数「g」の出力演算「出力1」は演算「OP10」の入力に、関数「g」の出力演算「出力2」は演算「OP11」の入力に接続されるものとする。尚、下位階層スケジューリング・ライブラリ４５に登録されている関数「g」のスケジュール情報は、図１９に例示したものとする。
【００８３】
図８及び図９に示したスケジューリング・アルゴリズムに基づいて、スケジューリング処理部４１がスケジューリング処理を行う際に、図１９に示した第１のスケジューリング結果（スケジューリング１）によるスケジュール情報を使用してスケジューリングを行った場合のスケジューリング結果を図２１に示す。また、図８及び図９に示したスケジューリング・アルゴリズムに基づいて、スケジューリング処理部４１がスケジューリング処理を行う際に、図１９に示した第２のスケジューリング結果（スケジューリング２）によるスケジュール情報を使用してスケジューリングを行った場合のスケジューリング結果を図２２に示す。
【００８４】
図２１に示したスケジューリング結果及び図２２に示したスケジューリング結果から分かるように、下位階層のスケジューリング結果に応じた多様なスケジューリング結果を生成することができる。
【００８５】
［スケジューリング処理（実施例４）］
次に、上位階層の動作記述から複数の関数が連続して呼び出される場合の、スケジューラ４０によるスケジューリング処理について説明する。
【００８６】
図２３は、下位階層である関数「f」と関数「g」とが連続して呼び出される動作定義の一例を示している。関数「f」の入力演算「入力１」には演算「OP1」が、関数「f」の入力演算「入力２」には演算「OP4」が、関数「f」の出力演算「出力1」には関数「g」の入力演算「入力１」が、関数「f」の出力演算「出力2」には演算「OP5」が接続されている。また、関数「g」の出力演算「出力1」は演算「OP6」に接続されている。
【００８７】
図８及び図９に示したスケジューリング・アルゴリズムに基づいて、スケジューリング処理部４１がスケジューリング処理を行う際に、関数呼び出し演算「g」がスケジューリング対象となるときには、演算「OP1」「OP2」「OP3」「OP4」及び関数呼び出し演算「f」は、既にスケジューリング処理済みであり、それぞれの演算がスケジューリングされるコントロール・ステップSiは、
S1 = 1, S2 = 1, S3 = 1, S4 = 2, Sf = 5                  (30) 
である。
【００８８】
ここで、図８及び図９に示したスケジューリング・アルゴリズム中のステップS611のループ処理３（for文）の１回目のループにおいて、演算viは演算「g」であるとすると、ステップS613からステップS619の処理で収集される集合Tは、図２４に示す下位階層スケジューリング・ライブラリ４５に登録されているスケジュール情報を利用して、
T = {T1=1, T2=1, T3=1, T4=2, Tf=5-1=4} = {1, 2, 4}      (31) 
となる。
【００８９】
従って、スケジューリング処理部４１は、ステップS621において、関数呼び出し演算「g」がスケジューリングされるコントロール・ステップSgを、
Sg = Tf − M入力1 + 1 = 4− 0 + 1 = 5                       (32) 
と算出する。すなわち、関数呼び出し演算「g」は５番目のコントロール・ステップにスケジューリングされる。
【００９０】
残りの演算についても、スケジューリング処理部４１は、図８及び図９に示したスケジューリング・アルゴリズムに従ってスケジューリングを行い、その結果、図２５に示すスケジューリング結果が得られる。つまり、上位階層の動作記述から複数の関数（「f」「g」）が連続して呼び出されるような場合、スケジューリング処理部４１は、複数の関数のうち、先行して呼び出される関数「f」の第２のクロック・サイクルにおいて動作可能な演算（入力演算「入力１」）を、後続する関数「g」の演算の中から求め、求めた後続の関数「g」の演算（入力演算「入力１」）が先行して呼び出される関数「f」と並列に動作するように、後続の関数「g」のスケジューリングを最適化する。
【００９１】
このようにして関数が連続して呼び出されている動作記述に対しても関数の実行が可能な限り並列処理可能なスケジューリング結果を得ることができる。
【００９２】
それに対して、従来のスケジューリング方式では、図２６に示すように関数「f」の実行がすべて終了してから、関数「g」の実行が開始されるようにスケジューリングされる。
【００９３】
以上、本発明の実施の形態について詳細に説明したが、本発明は、その精神または主要な特徴から逸脱することなく、他の色々な形で実施することができる。
【００９４】
従って、前述の各実施例はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明の範囲は、特許請求の範囲によって示すものであって、明細書本文には何ら拘束されない。更に、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。
【００９５】
例えば、本発明に係るスケジューラは、更に、
前記下位階層の関数のスケジューリング処理結果から、前記第１のクロック・サイクル数と前記第２のクロック・サイクル数とを抽出するスケジュール情報抽出部と、
抽出された前記第１のクロック・サイクル数と前記第２のクロック・サイクル数とを前記スケジュール情報として下位階層スケジューリング・ライブラリに登録するスケジュール登録部とを備え、
前記スケジュール情報取得部は、前記下位階層スケジューリング・ライブラリに登録されている前記スケジュール情報を取得するように構成することもできる。
【００９６】
また、本発明に係るスケジューラは、前記関数のスケジューリング情報が前記下位階層スケジューリング・ライブラリに複数登録されている場合、前記スケジューリング処理部は、前記スケジュール情報取得部が取得した複数のスケジューリング情報を、設計対象の論理回路に応じて利用しスケジューリング処理を実行するように構成することもできる。
【００９７】
また、スケジューラは、上位階層の動作記述から複数の関数が連続して呼び出される場合、前記スケジューリング処理部は、前記複数の関数のうち、先行して呼び出される関数の第２のクロック・サイクルにおいて動作可能な演算を、後続する関数の演算の中から求め、求めた後続の関数の演算が前記先行して呼び出される関数と並列に動作するように、前記後続の関数のスケジューリングを行うように構成することもできる。
【図面の簡単な説明】
【００９８】
【図１】本発明の一実施形態による高位合成装置の構成例を示す概略ブロック図である。
【図２】図１に示した高位合成装置による高位合成処理手順を例示するフローチャートである。
【図３】実施例１におけるスケジューリング対象の動作記述をＤＦＧにより表した例を示す図である。
【図４】図３に示した動作記述をＡＳＡＰアルゴリズムによってスケジューリングした結果を例示した図である。
【図５】図３に示した動作記述を実施例１におけるスケジューラによってスケジューリングした結果を例示した図である。
【図６】図５に示したスケジューリング結果を得るために、スケジューラにて用いられるスケジュール情報を説明するための図である。
【図７】図６に示したスケジュール情報が、下位階層スケジューリング・ライブラリに登録される際のデータ形式の一例である。
【図８】実施例１においてスケジューリング処理部が実行するスケジューリング・アルゴリズムの一例を示すフローチャートである。
【図９】図８に示したスケジューリング・アルゴリズムスケジューリング・アルゴリズムをＣ言語によるプログラムのように示した例。
【図１０】実施例１においてスケジューラが用いるスケジュール情報の一例を示す図である。
【図１１】実施例１におけるスケジューリング処理部によるスケジューリング結果を例示する図である。
【図１２】実施例２においてスケジューリング処理部が実行するスケジューリング・アルゴリズムの一例を示すフローチャートである。
【図１３】図１２に示したスケジューリング・アルゴリズムスケジューリング・アルゴリズムをＣ言語によるプログラムのように示した例。
【図１４】実施例２におけるスケジューリング対象の下位下層の動作記述をＤＦＧにより表した例を示す図である。
【図１５】実施例２におけるスケジューリング処理部によるスケジューリング結果を例示する図である。
【図１６】実施例３における下位下層の動作記述をＤＦＧにより表した例を示す図である。
【図１７】実施例３における複数種類のスケジューリング結果のうち、第１のスケジューリング処理結果（スケジューリング１）を例示する図である。
【図１８】実施例３における複数種類のスケジューリング結果のうち、第２のスケジューリング処理結果（スケジューリング２）を例示する図である。
【図１９】図１７及び図１８に示したスケジューリング結果から抽出されるスケジュール情報の一例である。
【図２０】実施例３におけるスケジューリング対象の動作記述をＤＦＧにより表した例を示す図である。
【図２１】実施例３におけるスケジューラが、図１７に示したスケジューリング処理結果から抽出されるスケジュール情報を用いて、図２０に示す動作記述をスケジューリングしたスケジューリング結果を例示する図である。
【図２２】実施例３におけるスケジューラが、図１８に示したスケジューリング処理結果から抽出されるスケジュール情報を用いて、図２０に示す動作記述をスケジューリングしたスケジューリング結果を例示する図である。
【図２３】実施例４において、複数の関数が連続して呼び出される場合の動作記述をＤＦＧにより表した例を示す図である。
【図２４】図２３に示す動作記述をスケジューリングする際に、実施例４におけるスケジューラが用いるスケジュール情報の例を示す図である。
【図２５】実施例４におけるスケジューラが、図２４に示したスケジュール情報を用いて、図２０に示す動作記述をスケジューリングしたスケジューリング結果を例示する図である。
【図２６】ＡＳＡＰアルゴリズムによって、図２４に示したスケジュール情報を用いて、図２０に示す動作記述をスケジューリングしたスケジューリング結果を例示する図である。
【符号の説明】
【００９９】
１０…動作記述
２０…動作記述解析部
３０…ＤＦＧ
４０…スケジューラ
４１…スケジューリング処理部
４２…スケジュール情報取得部
４３…スケジュール情報抽出部
４４…スケジュール情報登録部
４５…下位階層スケジューリング・ライブラリ
５０…回路部品割付部
６０…ＲＴＬ記述生成部
７０…ＲＴＬ記述
８０…入出力部
８１…表示装置
８２…入力装置
２０１，２０２，２０３，２０４，２０５，２０６…演算
３０１，３０２，３０３，３０４，３０５，３０６…演算
４０１，４０２，４０３，４０４，４０５，４０６…演算
【図１】
2005189939.tif 000003
【図２】
2005189939.tif 000004
【図３】
2005189939.tif 000005
【図４】
2005189939.tif 000006
【図５】
2005189939.tif 000007
【図６】
2005189939.tif 000008
【図７】
2005189939.tif 000009
【図８】
2005189939.tif 000010
【図９】
2005189939.tif 000011
【図１０】
2005189939.tif 000012
【図１１】
2005189939.tif 000013
【図１２】
2005189939.tif 000014
【図１３】
2005189939.tif 000015
【図１４】
2005189939.tif 000016
【図１５】
2005189939.tif 000017
【図１６】
2005189939.tif 000018
【図１７】
2005189939.tif 000019
【図１８】
2005189939.tif 000020
【図１９】
2005189939.tif 000021
【図２０】
2005189939.tif 000022
【図２１】
2005189939.tif 000023
【図２２】
2005189939.tif 000024
【図２３】
2005189939.tif 000025
【図２４】
2005189939.tif 000026
【図２５】
2005189939.tif 000027
【図２６】
2005189939.tif 000028