(57)【特許請求の範囲】
【請求項１】
リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備え、前記リソース数量データ及び前記リソース遅延データを参照しながら、前記リソース制約及び前記時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングするスケジューリング部と、
動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照すると共に、このモード指定コードによって指定されたスケジューリングモードに従って前記一つのプロセスのスケジューリングが行われるように、前記スケジューリング部を制御するモードコントロール部と
を具備し、
前記モードコントロール部は、
サイクル境界を増やすことを許容するモードか許容しないモードかの指定と、入出力又はリソースがサイクル境界を超えられるモードか超えられないモードかの指定とを備えるモード指定コードを参照し、
前記モードコントロール部は、
ある記述ブロックについて、サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成せず、
前記記述ブロックについて、サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成し、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられるモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成せず、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられないモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成し、
前記スケジューリング部は、
前記サイクル境界線データ及び前記時間制約線データに基づいて、スケジューリングを行う
動作合成システム。
【請求項２】
前記モードコントロール部は、
前記時間制約線データに関連付けて、
サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照していたときには、時間制約を確認するための時間制約データとして、０クロック周期以上を示す（＞０ｔ）を設定し、
サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照していたときには、前記時間制約データとして、０クロック周期を示す（０ｔ）を設定し、
前記スケジューリング部は、
前記時間制約データに基づいて、スケジューリングを行う
請求項１記載の動作合成システム。
【請求項３】
前記スケジューリング部は、
サイクル境界を増やすことを許容するモードであって、入出力又はリソースの全てがサイクル境界を超えられるモードで動作する単一のスケジューリングエンジンを用いてスケジューリングを行う
請求項２記載の動作合成システム。
【請求項４】
前記スケジューリング部は、
前記時間制約線データによってサイクル境界に結合されていない入出力又はリソースを、前記サイクル境界線データによって固定されたサイクル境界間のクロックサイクルにマッピングするときには、
前記リソース数量データを参照して、前記リソース制約が満たされていることを確認し、
前記リソース遅延データと、前記時間制約データとを参照して、前記時間制約が満たされていることを確認する
請求項３記載の動作合成システム。
【請求項５】
前記スケジューリング部は、
前記リソースの一つとして演算器をクロックサイクルにマッピングし、
前記リソース数量データの一部に、一つのクロックサイクル内で使用できる前記演算器の上限個数を示すデータを含み、
前記リソース遅延データの一部に、前記演算器の演算時間を示すデータを含む
請求項４記載の動作合成システム。
【請求項６】
リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備え、前記リソース数量データ及び前記リソース遅延データを参照しながら、前記リソース制約及び前記時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングするスケジューリング部と、
動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照すると共に、このモード指定コードによって指定されたスケジューリングモードに従って前記一つのプロセスのスケジューリングが行われるように、前記スケジューリング部を制御するモードコントロール部と
を具備し、
前記モードコントロール部は、
サイクル境界を増やすことを許容するモードか許容しないモードかの指定と、入出力又はリソースがサイクル境界を超えられるモードか超えられないモードかの指定とを備えるモード指定コードを参照し、
前記モードコントロール部は、
所定のスケジューリングモードで動作する複数のスケジューリングエンジンを備え、
前記記述ブロックごとに前記モード指定コードを参照すると、前記複数のスケジューリングエンジンの中から、前記モード指定コードで指定されたスケジューリングモードで動作するスケジューリングエンジンを選択し、
前記スケジューリング部は、
前記記述ブロックごとに、前記モードコントロール部が選択したスケジューリングエンジンを用いてスケジューリングを行い、
前記モードコントロール部は、
前記複数のスケジューリングエンジンとして、
サイクル境界を増やすことを許容するモード、かつ、入出力はサイクル境界を超えられないがリソースはサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容するモード、かつ、入出力もリソースもサイクル境界を超えられないというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力もリソースもサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力はサイクル境界を超えられないがリソースはサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力もリソースもサイクル境界を超えられないというモードにて動作するスケジューリングエンジンと
を含む
動作合成システム。
【請求項７】
前記スケジューリング部は、
ある記述ブロックについて、一つ目のスケジューリングエンジンを用いてスケジューリングを行った後、次の記述ブロックについて、二つ目のスケジューリングエンジンを用いてスケジューリングを行う場合には、
前記一つ目のスケジューリングエンジンによって、あるクロックサイクルにマッピングされた入出力又はリソースがあったときには、これらを確定されたものとして扱い、前記リソース遅延データを参照して、前記クロックサイクルの開始から前記入出力又はリソースまでの遅延時間を取得し、
新規に入出力又はリソースを前記クロックサイクルにマッピングしようとするときには、１クロック周期から前記遅延時間を差し引いた残余時間に基づく時間制約を満たすように、スケジューリングを行う
請求項６記載の動作合成システム。
【請求項８】
動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照すると共に、このモード指定コードによって指定されたスケジューリングモードに従って前記一つのプロセスのスケジューリングが行われるように制御を行うことと、
前記制御に従うと共に、リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを参照しながら、前記リソース制約及び前記時間制約が満たされるように、入出力及びリソースをクロックサイクルにマッピングして、スケジューリングを行うことと
を具備し、
前記制御を行うことは、
サイクル境界を増やすことを許容するモードか許容しないモードかの指定と、入出力又はリソースがサイクル境界を超えられるモードか超えられないモードかの指定とを備えるモード指定コードを参照することを含み、
前記制御を行うことは、
ある記述ブロックについて、サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成しないことと、
前記記述ブロックについて、サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成することと、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられるモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成しないことと、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられないモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成することとを更に含み、
前記スケジューリングを行うことは、
前記サイクル境界線データ及び前記時間制約線データに基づいて、スケジューリングを行うことを含む
動作合成方法。
【請求項９】
前記制御を行うことは、
前記時間制約線データに関連付けて、
サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照していたときには、時間制約を確認するための時間制約データとして、０クロック周期以上を示す（＞０ｔ）を設定することと、
サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照していたときには、前記時間制約データとして、０クロック周期を示す（０ｔ）を設定することとを更に含み、
前記スケジューリングを行うことは、
前記時間制約データに基づいて、スケジューリングを行うことを更に含む
請求項８記載の動作合成方法。
【請求項１０】
請求項８又は９に記載の動作合成方法によって、ＲＴレベルで記述された回路データを生成することと、
前記ＲＴレベルで記述された回路データを用いてシミュレーションを行うことと
を具備する
集積回路の設計方法。
【請求項１１】
リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備え、前記リソース数量データ及び前記リソース遅延データを参照しながら、前記リソース制約及び前記時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングするスケジューリング部と、
動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照すると共に、このモード指定コードによって指定されたスケジューリングモードに従って前記一つのプロセスのスケジューリングが行われるように、前記スケジューリング部を制御するモードコントロール部とをコンピュータに実現させるための動作合成用プログラムであって、
前記モードコントロール部は、
サイクル境界を増やすことを許容するモードか許容しないモードかの指定と、入出力又はリソースがサイクル境界を超えられるモードか超えられないモードかの指定とを備えるモード指定コードを参照し、
前記モードコントロール部は、
ある記述ブロックについて、サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成せず、
前記記述ブロックについて、サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照したときには、サイクル境界を固定するサイクル境界線データを生成し、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられるモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成せず、
前記記述ブロックについて、入出力又はリソースがサイクル境界を超えられないモードの指定を備えるモード指定コードを参照したときには、前記サイクル境界線データによって固定されるサイクル境界と、入出力又はリソースとを結合する時間制約線データを生成し、
前記スケジューリング部は、
前記サイクル境界線データ及び前記時間制約線データに基づいて、スケジューリングを行う
動作合成用プログラム。
【請求項１２】
前記モードコントロール部は、
前記時間制約線データに関連付けて、
サイクル境界を増やすことを許容するモードの指定を備えるモード指定コードを参照していたときには、時間制約を確認するための時間制約データとして、０クロック周期以上を示す（＞０ｔ）を設定し、
サイクル境界を増やすことを許容しないモードの指定を備えるモード指定コードを参照していたときには、前記時間制約データとして、０クロック周期を示す（０ｔ）を設定し、
前記スケジューリング部は、
前記時間制約データに基づいて、スケジューリングを行う
請求項１１記載の動作合成用プログラム。
【請求項１３】
前記スケジューリング部は、
サイクル境界を増やすことを許容するモードであって、入出力又はリソースの全てがサイクル境界を超えられるモードで動作する単一のスケジューリングエンジンを用いてスケジューリングを行う
請求項１２記載の動作合成用プログラム。
【請求項１４】
リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備え、前記リソース数量データ及び前記リソース遅延データを参照しながら、前記リソース制約及び前記時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングするスケジューリング部と、
動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照すると共に、このモード指定コードによって指定されたスケジューリングモードに従って前記一つのプロセスのスケジューリングが行われるように、前記スケジューリング部を制御するモードコントロール部とをコンピュータに実現させるための動作合成用プログラムであって、
前記モードコントロール部は、
サイクル境界を増やすことを許容するモードか許容しないモードかの指定と、入出力又はリソースがサイクル境界を超えられるモードか超えられないモードかの指定とを備えるモード指定コードを参照し、
前記モードコントロール部は、
所定のスケジューリングモードで動作する複数のスケジューリングエンジンを備え、
前記記述ブロックごとに前記モード指定コードを参照すると、前記複数のスケジューリングエンジンの中から、前記モード指定コードで指定されたスケジューリングモードで動作するスケジューリングエンジンを選択し、
前記スケジューリング部は、
前記記述ブロックごとに、前記モードコントロール部が選択したスケジューリングエンジンを用いてスケジューリングを行い、
前記モードコントロール部は、
前記複数のスケジューリングエンジンとして、
サイクル境界を増やすことを許容するモード、かつ、入出力はサイクル境界を超えられないがリソースはサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容するモード、かつ、入出力もリソースもサイクル境界を超えられないというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力もリソースもサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力はサイクル境界を超えられないがリソースはサイクル境界を超えられるというモードにて動作するスケジューリングエンジンと、
サイクル境界を増やすことを許容しないモード、かつ、入出力もリソースもサイクル境界を超えられないというモードにて動作するスケジューリングエンジンとを含む
動作合成用プログラム。
【請求項１５】
前記スケジューリング部は、
ある記述ブロックについて、一つ目のスケジューリングエンジンを用いてスケジューリングを行った後、次の記述ブロックについて、二つ目のスケジューリングエンジンを用いてスケジューリングを行う場合には、
前記一つ目のスケジューリングエンジンによって、あるクロックサイクルにマッピングされた入出力又はリソースがあったときには、これらを確定されたものとして扱い、前記リソース遅延データを参照して、前記クロックサイクルの開始から前記入出力又はリソースまでの遅延時間を取得し、
新規に入出力又はリソースを前記クロックサイクルにマッピングしようとするときには、１クロック周期から前記遅延時間を差し引いた残余時間に基づく時間制約を満たすように、スケジューリングを行う
請求項１４記載の動作合成用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路設計支援技術に関し、特に、動作合成システム、動作合成方法および動作合成用プログラムに関する。
【背景技術】
【０００２】
近年の集積回路の設計プロセスにおいては、設計者は、生産性向上のため、ソフトウェアを用いて集積回路を記述する。設計フローの上流では、集積回路が抽象度の高い動作レベルにて記述される。この動作レベルで記述された回路データ（動作レベル記述ファイルという。）は、動作合成システムによって自動的に動作合成される。動作合成により、レジスタ転送レベルで記述された回路データ（ＲＴレベル記述ファイルという。）が生成される。ＲＴレベル記述ファイルは、下流にて論理合成される。論理合成により、ゲートレベルで記述された回路データが生成され、論理回路の実装設計が行われる。
【０００３】
動作合成システムによる動作合成処理においては、オペレーションをクロックサイクルにマッピングするスケジューリングや、オペレーションを乗算器や加算器などのファンクションユニットに割り当てるバインディングなどが行われる。ここで、動作合成システムにおけるスケジューリングモードとしては、いくつかのモードが考えられる。Ｄａｖｉｄ  Ｗ．  Ｋｎａｐｐ著「Ｂｅｈａｖｉｏｒａｌ  Ｓｙｎｔｈｅｓｉｓ：  Ｄｉｇｉｔａｌ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ  Ｕｓｉｎｇ  ｔｈｅ  Ｓｙｎｏｐｓｉｓ  Ｂｅｈａｖｉｏｒａｌ  Ｃｏｍｐｉｌｅｒ」Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ，１９９９年６月，ｐｐ．５７−６０（非特許文献１参照）では、サイクル固定モード、スーパーステート入出力モード、フリーフローティングモードの３つを挙げている。動作レベル記述ファイルには、クロックサイクルの情報が含まれており、サイクル境界を指定することが可能であるが、これらのモードは、そのサイクル境界同士の関係、および、サイクル境界と入出力との関係を表している。
【０００４】
動作レベル記述ファイルには、モジュールやそのモジュールに含まれるプロセスなどが記述される。このプロセスを単位として、上記のスケジューリングモードを切り替えて動作合成することはあり得るが、複数のスケジューリングモードを１つのプロセスに適用することは行われていない。その理由の一つは、動作合成システムは、スケジューリングエンジンの切替えに合わせて、サイクルを切ってしまうので、動作合成を行ってもサイクル数が必要以上に増加してしまうためである。すなわち、現在のところ、設計者は、動作レベルで記述された一つのプロセス内において、任意のブロックだけ、全体とは別のスケジューリングモードを指定するといったことができない。
【０００５】
【非特許文献１】Ｄａｖｉｄ  Ｗ．  Ｋｎａｐｐ著「Ｂｅｈａｖｉｏｒａｌ  Ｓｙｎｔｈｅｓｉｓ：  Ｄｉｇｉｔａｌ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ  Ｕｓｉｎｇ  ｔｈｅ  Ｓｙｎｏｐｓｉｓ  Ｂｅｈａｖｉｏｒａｌ  Ｃｏｍｐｉｌｅｒ」Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ，１９９９年６月，ｐｐ．５７−６０
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、動作レベルで記述された一つのプロセスに対して、複数のスケジューリングモードを適用して動作合成を行うことである。
【課題を解決するための手段】
【０００７】
本発明の一つ目のアスペクトによる動作合成システムにおいては、スケジューリング部と、モードコントロール部とを具備する。スケジューリング部は、リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備える。リソース数量データ及びリソース遅延データを参照しながら、リソース制約及び時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングする。モードコントロール部は、動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照する。このモード指定コードによって指定されたスケジューリングモードに従ってスケジューリングが行われるように、スケジューリング部を制御する。
【０００８】
本発明の二つ目のアスペクトによる動作合成方法においては、動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照する。このモード指定コードによって指定されたスケジューリングモードに従ってスケジューリングが行われるように制御を行う。当該制御に従うと共に、リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを参照しながら、リソース制約及び時間制約が満たされるように、入出力及びリソースをクロックサイクルにマッピングして、スケジューリングを行う。
【０００９】
本発明の三つ目のアスペクトによる動作合成用プログラムにおいては、スケジューリング部と、モードコントロール部とをコンピュータに実現させる。スケジューリング部は、リソース制約を満たすことを確認するためのリソース数量データと、時間制約を満たすことを確認するためのリソース遅延データとを備える。リソース数量データ及びリソース遅延データを参照しながら、リソース制約及び時間制約が満たされるように、入出力及びリソースを、クロックサイクルにマッピングする。モードコントロール部は、動作レベルで記述された回路データに含まれる一つのプロセスの記述範囲を、複数に分割した記述ブロックごとに、スケジューリングモードを指定するモード指定コードを参照する。このモード指定コードによって指定されたスケジューリングモードに従ってスケジューリングが行われるように、スケジューリング部を制御する。この動作合成用プログラムは、コンピュータ読み取り可能な記録媒体に記録することができる。
【発明の効果】
【００１０】
本発明によれば、動作レベルで記述された一つのプロセスに対して、複数のスケジューリングモードを適用して動作合成を行うことができる。
【発明を実施するための最良の形態】
【００１１】
本発明を実施するための最良の形態について、図面を参照して詳細に説明する。図１を参照すると、本発明を実施するための最良の形態の一つとして、第１の実施の形態による動作合成システムが示されている。この動作合成システム５０は、プログラム制御により動作するデータ処理装置（コンピュータ、中央処理装置、プロセッサともいう。）２０と、データを記憶する記憶装置３０とを有している。動作合成システム５０には、利用者がテキストを入力し、動作レベル記述ファイルを作成するための入力装置１０と、動作レベル記述ファイルやレジスタ転送レベル記述ファイルの内容を表示等できる出力装置４０とが接続されている。
【００１２】
データ処理装置２０は、言語解析部２１と、内部構造正規化部２２と、ＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）生成部２３と、スケジューラ選択部２４と、スケジューリング部２５と、バインディング部２６と、ＲＴ記述生成部２７とを含む。これらの機能ブロック２１〜２７はそれぞれ、動作合成用プログラムの実行により実現され、つぎのように動作する。言語解析部２１は、動作合成対象の動作レベル記述ファイルを解析し、内部表現データに変換する。内部構造正規化部２２は、言語解析部２１により与えられる内部表現データにおいて、データ構造の関数やループなどに相当する部分を適宜展開するなどして、内部表現データを正規化する。ＣＤＦＧ生成部２３は、正規化された内部表現データを変換し、ＣＤＦＧデータを生成する。
【００１３】
スケジューラ選択部２４は、所定のスケジューリングモードで動作する複数のスケジューリングエンジンを有する。スケジューラ選択部２４は、動作レベル記述ファイルにおいて、一つのプロセスの中で、利用者による記述でそのプロセスをいくつかに分割した記述範囲（記述ブロックという。）ごとに指定されているモード指定コードを参照する。そして、そのモード指定コードで指定されているスケジューリングモードで動作する適切なスケジューリングエンジンを選択する。なお、スケジューラ選択部２４は、テキスト記述や外部ファイル、ＧＵＩなどの形式で与えられたスケジューリングモード指定に従って、スケジューリングエンジンを選択することができる。
【００１４】
スケジューリング部２５は、選択されたスケジューリングエンジンを用いて、ＣＤＦＧ生成部２３により生成されたＣＤＦＧ上で、与えられた記述ブロックごとに、リソースや入出力をクロックサイクルにマッピングする。与えられた一つの記述ブロックについて、スケジューリングが終了したら、残りの記述ブロックに関しても、スケジューラ選択部２４による選択と、スケジューリング部２５によるスケジューリングとが実行される。
【００１５】
バインディング部２６は、スケジューリング部２５が繰り返しスケジューリングを実行することによって得られたスケジューリング結果に基づいて、演算資源やメモリ資源などのリソースをバインドする。このバインド結果に基づき、ＲＴ記述生成部２７は、レジスタ転送レベル記述ファイルを生成する。各々の機能ブロック２１〜２７は、必要に応じて、動作合成システム５０の記憶装置３０に属するシステム内部表現記憶部３１に対して、変換結果の書き出しおよび読み込みを行う。
【００１６】
次に、図２のフローチャートを参照して、動作合成システム５０の動作について詳細に説明する。まず、利用者はＣ言語などで抽象度の高い回路仕様が記述されている動作レベル記述ファイルを用意する。この動作レベル記述ファイルには、ひとつのプロセス内でスケジューリングモードを切り替えることを指示するモード指定コードが含まれているものとする。まず、動作合成システム５０は、この動作レベル記述ファイルを入力する（Ａ１）。次に、言語解析部２１が言語解析処理を行い（Ａ２）、動作レベルで記述された回路データを、動作合成用の内部表現データに変換する。変換された内部表現データはＡＳＴ（Ａｂｓｔｒａｃｔ  Ｓｙｎｔａｘ  Ｔｒｅｅ：抽象構文木）などのデータ構造で表現される。続いて、内部構造正規化部２２が、内部構造正規化処理を行い（Ａ３）、ＣＤＦＧ生成部２３が、ＣＤＦＧ生成処理を行い（Ａ４）、ＣＤＦＧデータに変換する。
【００１７】
次に、生成されたＣＤＦＧデータに対して、スケジューリングを実施する。このとき、スケジューラ選択部２４は、記述ブロックごとに、モード指定コードにより指定されたスケジューリングモードに基づき、スケジューリングエンジンを選択する（Ａ５）。スケジューリング部２５は、選択されたスケジューリングエンジンを用いて、与えられた記述ブロックをスケジューリングする（Ａ６）。動作レベル記述の全範囲をスケジューリングし終えるまで、これらのスケジューラ選択処理およびスケジューリングを繰り返す。
【００１８】
スケジューリング部２５は、ある記述ブロックをスケジューリングするときに、あるクロックサイクルに予め別のスケジューリングエンジンによってマッピングされた入出力やリソース（両者をノードともいう。）がある場合には、これらを確定したものとして取り扱い、これらのノードは、そのクロックサイクルに固定されているものとみなす。また、スケジューリング部２５は、リソースによる遅延時間を示すリソース遅延データを、予め与えられている。スケジューリング部２５は、新たにマッピングするリソースに先行する一つ又は複数のリソースが、既に別エンジンによってマッピング済みの場合、先行するそれぞれのリソースについて、リソース遅延データを参照する。これにより、マッピング済みの一つ又は複数のリソースによる遅延時間を計測することができる。スケジューリング部２５は、この遅延時間を、新規にマッピングするリソースの入力遅延とみなすことができ、１クロック周期からこの遅延時間を差し引いた残余時間の範囲内でのみ、新規のリソースをマッピングするようにする。
【００１９】
動作レベル記述の全範囲についてスケジューリングが終了すると、バインディング部２６が、バインディングを行う（Ａ７）。最後に、ＲＴ記述生成部２７が、ＲＴレベル記述生成処理を行う（Ａ８）。動作合成システム５０はＲＴレベル記述ファイルを出力し（Ａ９）、利用者は、その内容を出力装置４０に表示等することができる。
【００２０】
第１の実施の形態の効果について説明する。第１の実施の形態は、複数のスケジューリングエンジンを切り替えて、記述ブロックごとに異なるスケジューリングモードでスケジューリングを行うことが可能である。スケジューリングエンジンの切り替え時には、スケジューリング部２５が、それまでスケジューリングされたノードの遅延時間を取得し、後段の記述ブロックをスケジュールするときに、その遅延時間を入力遅延制約条件として扱う。このようにすることで、スケジューリングエンジンの切り替え時に、クロックサイクルを分けることなくスケジューリングすることができる。従って、より少ないクロックサイクル数でスケジューリングが為されたスケジューリング結果を得ることができるという利点がある。さらに、スケジューリングエンジン切り替え時に、サイクルを分けなくてもよいことから、データ依存関係による制約が満たされる範囲においては、既にスケジューリングが完了しているクロックサイクルに対しても、ノードを新たに追加し、スケジューリングすることが可能となる効果がある。
【００２１】
次に、第２の実施の形態について図面を参照して詳細に説明する。図３を参照すると、第２の実施の形態による動作合成システムが示されている。この動作合成システム５０ａは、プログラム制御により動作するデータ処理装置２０ａと、データを記憶する記憶装置３０ａとを有している。データ処理装置２０ａは、言語解析部２１と、内部構造正規化部２２と、ＣＤＦＧ生成部２３と、時間制約設定部２４ａ、スケジューリング部２５ａと、バインディング部２６と、ＲＴ記述生成部２７とを含む。これらのうち、言語解析部２１と、内部構造正規化部２２と、ＣＤＦＧ生成部２３と、バインディング部２６と、ＲＴ記述生成部２７とは、第１の実施の形態の場合と同様に動作し、また、動作合成用プログラムの実行によって実現される。
【００２２】
時間制約設定部２４ａは、動作レベル記述において、記述ブロックごとに指定されたモード指定コードを参照し、単一のスケジューリングエンジンで、利用者が意図したスケジューリングモードをエミュレートできるように、適切な時間制約を自動的に設定する。スケジューリング部２５ａは、時間制約設定部２４ａによって設定された時間制約を満たすように、ＣＤＦＧ生成部２３により生成されたＣＤＦＧ上で、リソースや入出力をマッピングする。時間制約設定部２４ａおよびスケジューリング部２５ａは、必要に応じて、記憶装置３０ａに属するシステム内部表現記憶部３１ａに対して、変換結果の書き出しおよび読み込みを行う。時間制約設定部２４ａも、スケジューリング部２５ａも、動作合成用プログラムを実行することによって実現される。
【００２３】
次に、図４のフローチャートを参照して、動作合成システム５０ａの動作について詳細に説明する。図４において、処理Ａ１〜Ａ４及び処理Ａ７〜Ａ９は、図２に示した第１の実施の形態における処理と同様である。ＣＤＦＧ生成処理Ａ４によってＣＤＦＧデータが生成されると、第２の実施の形態における動作合成システム５０ａでは、このＣＤＦＧデータに対して、スケジューリングを実施する。第２の実施の形態におけるスケジューリングについて詳述する。
【００２４】
まず、時間制約設定部２４ａが、時間制約設定処理を行う（Ａ５ａ）。時間制約設定部２４ａは、利用者が記述したモード指定コードに基づき、適切な時間制約を設定する。この時間制約は、単一のスケジューリングエンジンを用いながらも、あたかも複数のスケジューリングエンジンでスケジューリングをしたかのように、スケジューリング部２５ａを振る舞わせるように設定する。すなわち、記述ブロックごとのスケジューリングモードに合わせて、スケジューリングモードごとの意味を満たせるように、モード種別ごとに、時間制約の設定方法を変える。スケジュール部２５ａは、設定される時間制約が満たされるように、時間制約を設定できる単一のスケジューリングエンジンを用いて、スケジューリングを行う（Ａ６ａ）。時間制約により、最も自由度が高いスケジューリングエンジンを採用する要請があるため、サイクル境界間に自由にサイクルを増やすことができ、かつ、入出力もリソースもサイクル境界を越えてもよい、というモードを持ったスケジューリングエンジンを採用するのが望ましい。
【００２５】
第２の実施の形態の効果について説明する。第２の実施の形態では、単一のスケジューリングエンジンを使用しながら、記述ブロックごとに異なるスケジューリングモードでスケジューリングすることが可能であるというものである。スケジューリングエンジンが単一であるために、スケジューリングモード切り替え時に、サイクルを分けることなく、スケジューリングを行うことができる。従って、より少ないクロックサイクル数でスケジューリングが為されたスケジューリング結果を得ることができるという利点がある。また、単一のスケジューリングエンジンを用いるので、エンジンの切り替えに掛かるオーバーヘッドが無く、実行効率が良いという利点もある。加えて、動作合成システムとしても、単一のスケジューリングエンジンで済むことから実現が容易であるという利点もある。
【００２６】
なお、第１又は第２の実施の形態によって、ＲＴレベルで記述された回路データが生成されるが、このＲＴレベルで記述された回路データを用いてシミュレーションを行うことにより、集積回路を設計することができる。また、この設計に従って、集積回路を製造することができる。
【００２７】
第１及び第２の実施の形態の効果を利用者側の立場から説明する。第１の効果は、入出力プロトコルなどタイミング制約が厳密である部分と、アルゴリズム部分などタイミング制約が比較的自由な部分とを、利用者が、同一のプロセス内に混在して記述できるようになるということにある。その理由は、アルゴリズム部分はスーパーステート入出力モードやフリーフローティングモードなどスケジューリング自由度が高いモードを採用し、入出力プロトコル部分にだけサイクル固定モードなどのスケジューリング自由度が低いモードを採用することができるためである。
【００２８】
第２の効果は、利用者がタイミングに対する制約の指定を容易にできるようになることにある。その理由は、従来は、タイミングの概念のないＣ言語のような動作記述では、タイミング制約を指定しようとすると、文や演算ごとに細かくタイミングを指定することが必要であり、記述容易性、可読性に問題があったが、第１及び第２の実施の形態では、記述ブロック単位でサイクル固定スケジューリングなどを指定できるため、利用者が簡単にタイミングに関する制約を記述できるためである。
【００２９】
第３の効果は、利用者がスケジューリング結果を制御できるようになることにある。その理由は、自由度の高いスケジューリングモードを利用していた場合、クロックサイクル数やタイミングが、利用者が考えていた理想的な結果にならない可能性があるが、このとき、特定の部分にだけサイクル固定スケジューリングモードを適用することで、利用者が理想とするスケジューリング結果を、最小限の手間で得ることができるためである。
【実施例１】
【００３０】
具体的な実施例を用いて、第１の実施の形態におけるスケジューラ選択処理Ａ５及びスケジューリングＡ６について詳述する。図５−１は、ＳｙｓｔｅｍＣによる記法に準じた動作レベルの記述例である。．ｒｅａｄ（）メソッドは、入力ポートからの値の読み込みを意味し、．ｗｒｉｔｅ（）メソッドは、出力ポートへの値の書き出しを意味し、ｗａｉｔ（）はサイクル境界を意味している。ＳｙｓｔｅｍＣの仕様は、ｈｔｔｐ：／／ｗｗｗ．ｓｙｓｔｅｍｃ．ｏｒｇ／  に公開されている。
【００３１】
図５−１は、あるプロセスを動作レベルで記述した回路データの一部分を示していて、ここには、二つの記述ブロックが含まれている。図５−１において、＃ｐｒａｇｍａ  ｓｃｈｅｄｕｌｉｎｇ＿ｂｌｏｃｋのラインは、動作合成システム５０に対してスケジューリングモードを指定するモード指定コードであり、このラインの直後から始まる記述ブロックのスケジューリングモードを指定するものである。一般に、サイクル境界については、サイクル境界の指定があったときに、そのサイクル境界でのみサイクルを切ってもよいとするモードと、それ以外にもサイクル境界を増やしてもよいとするモードとの、２つのモードが考えられる。一方、サイクル境界と、入出力やリソース（演算資源やメモリ資源）との関係については、入出力やリソースは指定されたサイクル境界を越えてはならないというモードと、リソースのみサイクル境界を越えてもよいとするモードと、入出力もリソースもサイクル境界を越えてもよいとするモードとの、３つのモードが考えられる。したがって、動作合成におけるスケジューリングの際には、これらを組み合わせた６通りのモードが考えられる。ただし、サイクル境界を増やしてもよく、かつ、入出力もリソースもサイクル境界を越えてもよい、というモードでは、サイクル数の下限を定めているだけになり、ほとんど意味がない。そのため、実用上は、この組み合わせを除いた５通りのスケジューリングモードに対応すればよい。
【００３２】
図５−１において、ｓｃｈｅｄｕｌｉｎｇ＿ｂｌｏｃｋプラグマは、二つの引数を有していて、この二つの引数によって上記５通りのスケジューリングモードのいずれかが指定される。第１引数には、ｆｉｘｅｄまたはｓｕｐｅｒｓｔａｔｅの値を指定することができる。この指定は、サイクル境界間に自動的にサイクル境界を増やせるかどうかを意味する。動作合成システム５０は、第１引数がｆｉｘｅｄの場合にはサイクル境界間にサイクル境界を増やすことを不可としてスケジューリングを行い、ｓｕｐｅｒｓｔａｔｅの場合にはサイクル境界を自由に増やせるものとしてスケジューリングを行う。ｓｃｈｅｄｕｌｉｎｇ＿ｂｌｏｃｋプラグマの第２引数は、ｎｏｎｅ，ｉｏ，ａｌｌの３値のいずれかを指定することができる。この指定は、ｗａｉｔ（）によるサイクル境界を越えられない要素は何かを意味する。第２引数がｎｏｎｅの場合には、動作合成システム５０は、入出力、リソース共にサイクル境界を越えることができるものとしてスケジューリングを行う。第２引数がｉｏの場合には、入出力のみサイクル境界を越えることがでない、ａｌｌの場合には、すべてサイクル境界を越えることができないものとして、動作合成システム５０はスケジューリングを行う。
【００３３】
図５−１を参照すると、全体の記述ブロックについては、二つの引数として（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）が指定されている。これらの引数は、全体の記述ブロックをスケジューリングする動作合成システム５０に対して、入出力以外は自由にサイクル境界を越えることができること、サイクル境界を増やすことも可能であることを指定している。一方、内側の記述ブロックについては、二つの引数として（ｆｉｘｅｄ，ａｌｌ）が指定されている。これらの引数は、内側の記述ブロックをスケジューリングする動作合成システム５０に対して、入出力及びリソースのいずれもサイクル境界を越えられないこと、サイクル境界は固定であることを指定している。
【００３４】
動作合成システム５０のスケジューリング部２５には、予め、リソース数量データとリソース遅延データとが与えられる。ここでは、同一サイクルで、加算器２個、乗算器１個を使用できるというリソース数量データが与えられ、また、クロック周期を１としたとき、加算器は０．４で演算可能、乗算器は０．７で演算可能というリソース遅延データが与えられているものとする。スケジューリング部２５は、これらのリソース数量データとリソース遅延データとを備えている。
【００３５】
このとき、動作合成システム５０は以下のように動作する。まず、全体の記述ブロックをスケジューリングしようとして、スケジューラ選択部２４が、そのモード指定コードを参照する。スケジューラ選択部２４は、実施例１においては、上記５通りのスケジューリングモードで動作する５つのスケジューリングエンジンを有しているとする。スケジューラ選択部２４は、（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）の指定に基づき、（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）のスケジューリングモードで動作するスケジューリングエンジンを選択する。次に、全体の記述ブロックの中に入ると、内側の記述ブロックが現れる。スケジューリング部２５は、全体の記述ブロックをスケジューリングすることを一時中断する。また、並行して、スケジューラ選択部２４が内側の記述ブロックについてスケジューラ選択処理Ａ５を行う。スケジューラ選択部２４は、内側の記述ブロックに含まれるモード指定コードを参照し、（ｆｉｘｅｄ，ａｌｌ）の指定に基づき、（ｆｉｘｅｄ，ａｌｌ）のスケジューリングモードで動作するスケジューリングエンジンを選択する。
【００３６】
スケジューリング部２５は、内側の記述ブロックを、選択された（ｆｉｘｅｄ，ａｌｌ）のスケジューリングエンジンを用いて、スケジューリングする。スケジューリング部２５は、演算＋１が３箇所あること、これらはサイクル境界ｗａｉｔ（）で分離されていることを検出する。また、スケジューリング部２５は、リソース数量データ及びリソース遅延データを参照する。リソース数量データは、同一サイクルで、加算器を２個使用できることを示しているので、リソース制約は満たされる。また、リソース遅延データは、加算器による演算時間が０．４であることを示しているので、時間制約も満たされる。従って、スケジューリング部２５は、これら３つの演算＋１を、連続するサイクル境界の間に順次マッピングする。図５−２は、内側の記述ブロックをスケジューリングした結果を示している。図５−２では、ｓｔｅｐ１〜ｓｔｅｐ５の各ｓｔｅｐがクロックサイクルを意味している。なお、データ構造上は、演算ノードに属するようにｓｔｅｐの情報が記録される。
【００３７】
内側の記述ブロックを抜けると、全体の記述ブロックに戻り、スケジューリング部２５は、中断していた全体の記述ブロックをスケジューリングすることを再開する。スケジューリング部２５は、既に選択済みの（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）のスケジューリングエンジンを用いる。スケジューリング部２５は、まず、ｔ１＝ｄａｔａ１＋ｄａｔａ２をスケジューリング対象とする。演算“＋”は、サイクル境界を越えてスケジューリング可能というモード中にあるため、ｗａｉｔ（）を越えてスケジューリングできる。ただし、ｄａｔａ１とｄａｔａ２の値が確定した後でなければｔ１を算出できないので、ｄａｔａ１とｄａｔａ２の値が確定した後というデータ依存関係がある。このデータ依存関係のため、ｔ１＝ｄａｔａ１＋ｄａｔａ２は、ｓｔｅｐ４でｄａｔａ２を算出した後にスケジューリングすることが可能となる。スケジューリング部２５は、ｓｔｅｐ４に、ｔ１＝ｄａｔａ１＋ｄａｔａ２を追加できるか否かを確認する。リソース数量データを参照すると、加算器を２個使用できるので、リソース制約は満たされている。また、リソース遅延データを参照すると、加算器による演算時間が０．４であり、２回目の加算を実行しても、合計の遅延時間は０．８なので、時間制約も満たされている。従って、スケジューリング部２５は、ｓｔｅｐ４の二つ目の演算として、ｔ１＝ｄａｔａ１＋ｄａｔａ２をマッピングする。
【００３８】
次に、スケジューリング部２５は、ｔ２＝ｄａｔａ２＋ｄａｔａ３をスケジューリング対象とする。この演算は、データ依存関係により、ｓｔｅｐ５でｄａｔａ３を算出した後にスケジューリングすることが可能である。上記ｔ１を求めた演算のスケジューリングと同様に、リソース制約と時間制約とが満たされることが確認されるので、ｔ２＝ｄａｔａ２＋ｄａｔａ３は、ｓｔｅｐ５にマッピングされる。続いて、スケジューリング部２５は、ｔ３＝ｄａｔａ３＋ｄａｔａ１をスケジューリング対象とする。データ依存関係では、ｓｔｅｐ５以降にスケジューリングすることが可能となる。しかし、ｓｔｅｐ５では、既に加算器を２個使用しており、リソース数量データが示すリソース制約の上限に達している。このため、スケジューリング部２５は、新たなｓｔｅｐ６を生成して、ここに、ｔ３＝ｄａｔａ３＋ｄａｔａ１をマッピングする。ここまで、全体の記述ブロックをスケジューリングした途中経過を図５−３に示す。
【００３９】
次に、スケジューリング部２５は、ｔ１＊ｔ２をスケジューリング対象とする。データ依存関係により、ｔ２が算出されるｓｔｅｐ５以降にスケジューリングすることが可能である。まず、スケジューリング部２５は、ｔ１＊ｔ２をｓｔｅｐ５にスケジューリングできるか否かを確認する。リソース遅延データを参照すると、ｓｔｅｐ５では、ｔ２を求めるまでに、２回の加算によって０．８を消費している。また、０．７かかる乗算を、ｓｔｅｐ５に追加すると、遅延時間が１．５になってクロック周期を超えてしまう。よって、スケジューリング部２５は、ｔ１＊ｔ２をｓｔｅｐ５にスケジューリングできないことを確認する。次に、スケジューリング部２５は、ｔ１＊ｔ２をｓｔｅｐ６にスケジューリングできるか否かを確認する。リソース数量データを参照すると、同一サイクルで使用可能な乗算器の数は一つであることが判る。ｓｔｅｐ６では、未だ乗算器を使用していないので、リソース制約は満たされる。また、リソース遅延データを参照すると、乗算による遅延は０．７であることが判る。ただし、ｓｔｅｐ６にスケジューリング済みのｔ３＝ｄａｔａ３＋ｄａｔａ１と、ｔ１＊ｔ２との間にはデータ依存関係が無いので、これらは並列して演算可能である。従って、時間制約は満たされる。そこで、スケジューリング部２５は、ｔ１＊ｔ２をｓｔｅｐ６にマッピングする。
【００４０】
次に、スケジューリング部２５は、ｔ１＊ｔ２の結果に対して、＊ｔ３を行う演算をスケジューリング対象とする。＊ｔ３は、データ依存関係により、ｔ１＊ｔ２を算出するｓｔｅｐ６以降にスケジューリングすることが可能である。まず、スケジューリング部２５は、＊ｔ３をｓｔｅｐ６にスケジューリングできるか否かを確認する。リソース数量データを参照すると、同一サイクルで使用可能な乗算器の数は一つである。ｓｔｅｐ６では、既にｔ１＊ｔ２によって乗算器を一つ使用しているので、二つ目の乗算を追加すると、リソース制約を満たさない。なお、遅延時間も１．４になるので時間制約も満たしていない。そこで、スケジューリング部２５は、新たなｓｔｅｐ７を生成して、ここに、＊ｔ３をスケジューリングする。以上により、全体の記述ブロックのスケジューリングが終了する。図５−４は、最終的なスケジューリング結果を示している。
【００４１】
図５−４のスケジューリング結果は、本発明による第１の実施の形態の利点の一面を表している。図５−１のように、（ｆｉｘｅｄ，ａｌｌ）を指定している内側の記述ブロックにおける入力シーケンス（．ｒｅａｄ（）のシーケンス）が、固定されたプロトコル（制約条件）であるとする。このとき、記述ブロックごとに別個のスケジューリングモードを指定できないとすれば、全てを（ｆｉｘｅｄ，ａｌｌ）としてスケジューリングするか、（ｆｉｘｅｄ，ａｌｌ）の部分とそれ以外の部分とを別々のプロセスに分割して記述するかのいずれかになると考えられる。
【００４２】
まず、全てを（ｆｉｘｅｄ，ａｌｌ）のモードでスケジューリングするとした場合について説明する。図５−１の動作レベル記述では、内側の記述ブロックを抜けた後に、ｔ１，ｔ２，ｔ３を求め、さらに、ｔ１＊ｔ２の乗算と、＊ｔ３の乗算とを行っている。これらの合計演算時間は１クロック周期を越えてしまうため、（ｆｉｘｅｄ，ａｌｌ）のモード下では、利用者はｗａｉｔ（）の数を追記する必要がある。しかし、図５−４のようなステップ数の少ないスケジューリング結果を得ようとした場合には、利用者は、ｄａｔａ１＋ｄａｔａ２などの演算をどのステップで行うかを決めて、その結果が反映されるように手動でｗａｉｔ（）を挿入し、動作レベル記述を作成する必要がある。これでは、大幅な記述の書き換えをしなければならず、動作合成システムによる自動スケジューリングの利点を生かせない。
【００４３】
一方、（ｆｉｘｅｄ，ａｌｌ）のモードでスケジューリングする部分と、（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）のモードでスケジューリングする部分とを、２つの別プロセスに分けて合成しようとした場合には、プロセスを分割するために動作レベルの記述を書き換えた上に、さらに、プロセス間の通信方法などを決める必要も生じる。それから、２つのプロセス間で、リソース（図５−１では、加算器が対象になる。）を共有することが困難になったり、図５−４のｓｔｅｐ４，ｓｔｅｐ５に示されているように、（ｆｉｘｅｄ，ａｌｌ）のモードでマッピングされたリソースと、（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）のモードでマッピングされたリソースとを、同一のクロックサイクルで動作させるようなスケジューリングが困難になったりする。
【００４４】
図５−５は、図５−４との比較対照図であり、スケジューリングエンジンの切替えに同期させてクロックサイクルを切ることによって、図５−１に示す動作レベル記述をスケジューリングした結果を表している。図５−５においては、ｓｔｅｐ５とｓｔｅｐ６との間でクロックサイクルを切っている。図５−５に示すように、スケジューリングエンジンの切替え時にクロックサイクルを切ると合計８クロックサイクルを要してしまう。これに対して、図５−４に示すように、クロックサイクルが分かれないように工夫した第１の実施の形態では合計７クロックサイクルで済んでいる。
【実施例２】
【００４５】
次に、図５−１の記述例を用いて、第２の実施の形態における時間制約設定処理Ａ５ａ及びスケジューリングＡ６ａについて詳述する。第１の実施の形態に係る実施例１はテキストにより説明したが、第２の実施の形態に係る実施例２はＣＤＦＧにより説明する。図６は、図５−１の記述をＣＤＦＧで表現したものである。図６のデータフローは、説明を簡単にするため、図５−１の記述における最初のｄｏ−ｗｈｉｌｅ文に相当する部分は省き、ｄａｔａ＿ｉｎから値を取り込むステップ以降の部分を表現している。図６において、入出力ノードは長方形で表現し、リソースノードは円で表現している。
【００４６】
動作合成システム５０ａにおいて、時間制約設定部２４ａは、データフローに沿って、時間制約設定処理Ａ５ａを行う。まず、時間制約設定部２４ａは、上流側の３つの演算＋１に対するモード指定コードを参照する。このモード指定コードでは、引数として、（ｆｉｘｅｄ，ａｌｌ）が指定されている。３つの演算＋１は、サイクル境界ｗａｉｔ（）で分離されているので、時間制約設定部２４ａは、ＣＤＦＧに、サイクル境界を固定するサイクル境界線データを追加する。さらに、サイクル境界線データで固定されるサイクル境界間およびサイクル境界とノードと間に、時間制約線データを追加する。それから、この時間制約線データに関連付けて、時間制約を確認するための時間制約データを自動設定する。続いて、時間制約設定部２４ａは、下流側の３つの演算＋及び２つの演算＊に対するモード指定コードを参照する。このモード指定コードでは、引数として、（ｓｕｐｅｒｓｔａｔｅ，ｉｏ）が指定されている。時間制約設定部２４ａは、第１引数がｓｕｐｅｒｓｔａｔｅなので、サイクル境界線データの追加は行わない。また、第２引数がｉｏなので、サイクル境界線データで固定されるサイクル境界とｉｏノードとの間に対してのみ時間制約線データを追加し、この時間制約線データに関連付けて、時間制約データを自動設定する。第２引数がｉｏなので、下流側の５つのリソースノードについては、時間制約線データを追加することを行わない。
【００４７】
このようにして、時間制約設定処理Ａ５ａが終了した状態のＣＤＦＧを、図７に示す。図７において、サイクル境界線データを表現したサイクル境界線は横方向の太線を用いて、時間制約線データを表現した時間制約線は矢印付き破線を用いて示されている。時間制約線に付加した時間制約データ［０ｔ］の表記は、その時間制約線の矢印までの遅延時間が確定されていること、及び、その遅延時間が０クロック周期であることを意味している。また、時間制約データ［１ｔ］の表記は、同様に、遅延時間が確定されていること、及び、その遅延時間が１クロック周期であることを意味している。また、時間制約データ［＞０ｔ］の表記は、その時間制約線の矢印までの遅延時間が可変であり、遅延時間を調整することができること、及び、その遅延時間が０サイクル以上（例えば、０サイクルでもよく、１サイクルでもよい。）であればよいことを意味している。なお、データ構造上は、各ノードがデータの塊となって表現されており、それぞれのノードが、接続関係に合わせてポインタなどで接続されているグラフとなる。各ノードは、どのサイクル境界間にあるか、というタイミングデータと、サイクル境界からの遅延時間を示す遅延時間データとを有している。なお、図７に示すように、サイクル境界間の時間制約線にも時間制約データを持たせることができる。
【００４８】
時間制約設定処理Ａ５ａが終了すると、スケジューリング部２５ａが、図７に示すようなＣＤＦＧに基づいて、スケジューリングを行う。動作合成システム５０ａのスケジューリング部２５ａには、予め、実施例１と同様のリソース数量データとリソース遅延データとが与えられている。図７を参照すれば容易に理解されるように、このＣＤＦＧには、スケジューリングモードに関する情報が含まれている。従って、スケジューリング部２５ａは、リソース制約及び時間制約を確認しながら、実施例１の場合と同様に、遅延時間が確定していない５つのリソースノード及び１つのｉｏノードをスケジューリングすることができる。その結果、サイクル境界線が１本追加され、図８のＣＤＦＧを得る。図８のＣＤＦＧは、図５−４のスケジューリング結果と同じ内容を表している。このように、時間制約設定処理Ａ５ａを行うことにより、単一のスケジューリングエンジンを用いて、複数のスケジューリングエンジンを使用した第１の実施の形態の場合と同じ結果が得られている。
【００４９】
なお、時間制約データは、例えば、次のように設定すればよい。まず、第１引数のｆｉｘｅｄ／ｓｕｐｅｒｓｔａｔｅについて説明する。サイクル境界を増やしてはいけないｆｉｘｅｄの場合には、サイクル境界間に［１ｔ］の時間制約データを設定し、ｓｕｐｅｒｓｔａｔｅの場合には、時間制約データの設定をスキップする。次に、第２引数のａｌｌ／ｉｏ／ｎｏｎｅについて説明する。全てサイクル境界を越えてはいけないａｌｌの場合、あるサイクル境界から、その次のサイクル境界に到達するまでの間にあるすべての入出力ノード、リソースノードに対して時間制約データを設定する。このときの時間制約データは、第１引数がｆｉｘｅｄならば［０ｔ］とし、ｓｕｐｅｒｓｔａｔｅならば［＞０ｔ］とする。第２引数が、ｉｏの場合には、入出力ノードに対してのみ時間制約データを設定する。このときの時間制約データも、第１引数がｆｉｘｅｄならば［０ｔ］とし、ｓｕｐｅｒｓｔａｔｅならば［＞０ｔ］とすればよい。第２引数が、ｎｏｎｅの場合には、時間制約データを設定しない。このようにすることで、複雑な記述ブロックを組み合わせることによって、あるプロセスが記述されている場合でも、単一のスケジューリングエンジンでスケジーリングすることが可能となる。
【図面の簡単な説明】
【００５０】
【図１】本発明の第１の発明を実施するための最良の形態の構成を示すブロック図である。
【図２】第１の発明を実施するための最良の形態の動作を示す流れ図である。
【図３】本発明の第２の発明を実施するための最良の形態の構成を示すブロック図である。
【図４】第２の発明を実施するための最良の形態の動作を示す流れ図である。
【図５−１】動作レベル記述の具体例である。
【図５−２】図５−１の動作レベル記述をスケジュ−リングした途中経過を示す第一の図である。
【図５−３】図５−１の動作レベル記述をスケジュ−リングした途中経過を示す第二の図である。
【図５−４】図５−１の動作レベル記述をスケジュ−リングした結果を示す図である。
【図５−５】図５−４との比較対照図である。
【図６】図５−１の動作レベル記述の一部をＣＤＦＧにより示す図である。
【図７】図６のＣＤＦＧについての時間制約設定処理結果を示す図である。
【図８】図７に基づいてスケジューリングを行った結果を示す図である。
【符号の説明】
【００５１】
１０  入力装置
２０、２０ａ  データ処理装置
２１  言語解析部
２２  内部構造正規化部
２３  ＣＤＦＧ生成部
２４  スケジューラ選択部
２４ａ  時間制約設定部
２５、２５ａ  スケジューリング部
２６  バインディング部
２７  ＲＴ記述生成部
３０、３０ａ  記憶装置
３１、３１ａ  システム内部表現記憶部
４０  出力装置
５０、５０ａ  動作合成システム
【図１】
0005229716.tif 000002
【図２】
0005229716.tif 000003
【図３】
0005229716.tif 000004
【図４】
0005229716.tif 000005
【図５−１】
0005229716.tif 000006
【図５−２】
0005229716.tif 000007
【図５−３】
0005229716.tif 000008
【図５−４】
0005229716.tif 000009
【図５−５】
0005229716.tif 000010
【図６】
0005229716.tif 000011
【図７】
0005229716.tif 000012
【図８】
0005229716.tif 000013