(57)【特許請求の範囲】
【請求項１】
設計対象回路のソースコードの記述から、クロックが用いられる記述を含むコード部を抽出する抽出部と、
抽出された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出する算出部と、
算出された前記クロック数を出力する出力部と、
を有することを特徴とする設計データ生成装置。
【請求項２】
前記抽出部は、前記ソースコードにおいてレジスタとなる記述がある箇所を前記クロックが用いられる前記コード部として抽出することを特徴とする請求項１記載の設計データ生成装置。
【請求項３】
前記抽出部は、前記ソースコードにおいてループ記述がある箇所を前記クロックが用いられる前記コード部として抽出することを特徴とする請求項１または２に記載の設計データ生成装置。
【請求項４】
前記抽出部は、前記ソースコードにおいて、演算量により、用いられるクロック数が推定できる箇所を前記クロックが用いられる前記コード部として抽出することを特徴とする請求項１乃至３の何れか一項に記載の設計データ生成装置。
【請求項５】
前記抽出部は、前記ソースコードにおいてデータに依存関係がある箇所を前記クロックが用いられる前記コード部として抽出することを特徴とする請求項１乃至４の何れか一項に記載の設計データ生成装置。
【請求項６】
コンピュータが実行する設計データ生成方法であって、
設計対象回路のソースコードの記述から、クロックが用いられる記述を含むコード部を抽出し、
抽出された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出し、
算出された前記クロック数を出力することを特徴とする設計データ生成方法。
【請求項７】
コンピュータに、
設計対象回路のソースコードの記述から、クロックが用いられる記述を含むコード部を抽出し、
抽出された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出し、
算出された前記クロック数を出力する処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計データ生成装置、設計データ生成方法及びプログラムに関する。
【背景技術】
【０００２】
近年、例えば、ＳＯＣ（System On a Chip）など、複数の回路モジュールを含むシステムを設計する際に、ＣやＣ＋＋などの抽象度の高い言語を用いた高位設計技術が用いられている。
【０００３】
高位設計技術において、設計者はＣやＣ＋＋などの言語を用いてソースコードを作成し、高位合成ツールに入力する。設計者は、さらに、例えば、設計対象の動作周波数の設定や入力ファイルのループ（Ｆｏｒ−ｌｏｏｐやＷｈｉｌｅ−ｌｏｏｐ）などの展開（アンロール）、及びパイプラインの指定などの制約（コンストレイント）を高位合成ツールに入力する。高位合成ツールは、入力されたソースコードやコンストレイントなどをもとに、ＲＴＬ（Register Transfer Level）記述の設計データを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１６００８０号公報
【特許文献２】特開平１１−０２５１３４号公報
【特許文献３】特開２００２−４１５９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、高位設計に用いるＣ言語やＣ＋＋言語などの抽象度の高い言語は、ＨＤＬ（Hardware Description Language）とは異なり時間概念のない言語であるため、回路で用いられるクロックを意識した設計は困難であるという問題があった。
【課題を解決するための手段】
【０００６】
発明の一観点によれば、設計対象回路のソースコードにおいてクロックが用いられるコード部を推定する推定部と、推定された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出する算出部と、算出された前記クロック数を出力する出力部と、を備えた設計データ生成装置が提供される。
【発明の効果】
【０００７】
開示の設計データ生成装置、設計データ生成方法及びプログラムによれば、時間概念のない高抽象度の言語でもクロックを意識した設計が容易になり、設計期間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施の形態の設計データ生成装置の一例を示す図である。
【図２】設計データ生成装置の一例の動作を示すフローチャートである。
【図３】高位合成設計の一例の流れを説明する図である。
【図４】２つの高位合成用ソースコードを合わせた関数モジュールの一例を示す模式図である。
【図５】第２の実施の形態の設計データ生成装置の一例を示す図である。
【図６】第２の実施の形態の設計データ生成装置による設計データ生成処理の一例を示すフローチャートである。
【図７】モデルのカテゴリと、基本機能のカテゴリの一例を示す図である。
【図８】基本機能選択処理におけるルールチェックの一例を示す図である。
【図９】基本機能に実装可能な論理のカテゴリとタイミングルールの一例を示す図である。
【図１０】タイミング選択処理におけるルールチェックの一例を示す図である。
【図１１】基本機能のカテゴリと論理のカテゴリとその論理記述の一例を示す図である。
【図１２】アルゴリズム選択処理におけるルールチェックの一例を示す図である。
【図１３】タイミング抽出処理及びタイミングチェックの一例の処理の流れを示す図である。
【図１４】高位合成用ソースコードの一例を示す図である。
【図１５】クロック数を算出する一例の処理の流れを示す図である。
【図１６】各コード部の依存関係の一例を示す図である。
【図１７】算出された全体のクロック数と各パラメータの値の一例を示す図である。
【図１８】推定された各コード部の処理の一例を示す図である。
【図１９】クロック数の計算結果の表示例を示す図である。
【図２０】本実施の形態に用いるコンピュータのハードウェアの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態を、図面を参照しつつ説明する。
（第１の実施の形態）
図１は、第１の実施の形態の設計データ生成装置の一例を示す図である。
【００１０】
設計データ生成装置１は、生成部２、推定部３、算出部４、出力部５を有している。
生成部２は、設計対象回路のソースコード６を生成する。例えば、生成部２は、ソースコードライブラリとして蓄積された回路の基本機能、タイミングルール、アルゴリズムなどのテンプレートを、設計対象回路の仕様に応じて選択し、ソースコードを生成する。ソースコードは、例えば、ＣやＣ＋＋などの抽象度の高い言語で記述される。
【００１１】
推定部３は、ソースコード６において、クロックが用いられるコード部を推定する。例えば、推定部３は、ソースコード６の記述から、クロックが用いられると予想されるコード部６ａ，６ｂ，６ｃ，６ｄを抽出する。コード部６ａ，６ｂ，６ｃ，６ｄとして例えば、レジスタとなる記述がある箇所、Ｆｏｒ−ｌｏｏｐ文やＷｈｉｌｅ−ｌｏｏｐ文などのループ記述がある箇所、演算量により、用いられるクロック数が推定できる箇所、データに依存関係がある箇所などがある。詳細については後述する。
【００１２】
算出部４は、クロックが用いられると推定された箇所（例えば、コード部６ａ，６ｂ，６ｃ，６ｄ）を分析して、ソースコード６において用いられるクロック数を算出する。
出力部５は、算出されたクロック数を出力する。
【００１３】
図２は、設計データ生成装置の一例の動作を示すフローチャートである。
設計データ生成装置１は、例えば、コンピュータであって以下の処理を実行する。
ステップＳ１：例えば、ユーザ（以下では設計者として説明する）によって設計対象回路の仕様に関する情報が入力されると、生成部２は、その情報をもとに、設計対象回路のソースコードを生成する。
【００１４】
ステップＳ２：推定部３は、生成されたソースコードを分析して、クロックが用いられるコード部を推定する。例えば、レジスタとなる記述がある箇所、ループ記述がある箇所、演算量により用いられるクロック数が推定できる箇所、データに依存関係がある箇所が、クロックが用いられるコード部として推定される。
【００１５】
ステップＳ３：クロックが用いられるコード部が推定されると、算出部４は、推定されたコード部を分析して、ソースコードにおいて生じるクロック数を算出する。詳細は後述するが、例えば、算出部４は、ループ記述のある箇所ではそのループ回数に応じてクロック数を推定し、演算量によって推定可能な箇所では演算に要するクロック数を推定する。そして、算出部４は、生成されたソースコード全体におけるクロック数を算出する。
【００１６】
ステップＳ４：クロック数が算出されると、出力部５はそのクロック数を、例えば、図示しない表示装置に出力する。このとき、出力部５は、ソースコードにおいてクロックが用いられると推定されたコード部を出力するようにしてもよいし、コード部のどの部分でクロックが多く用いられるのかを出力するようにしてもよい。また、出力部５は、算出されたクロック数が、設計者が要求する所定値（例えば、設計対象回路の仕様に応じた所定値）以上の場合には、エラーである旨を出力するようにしてもよい。
【００１７】
設計者は、例えば、出力部５によって出力されたクロック数などの情報を参照して、ソースコードを修正すべきか否かを判断する。例えば、算出されたクロック数が、要求する所定値以上の場合、設計者は、クロック数が減少するようにソースコードを修正する。例えば、設計者は、ループ記述があるコード部のループ回数を変更するなどの修正を行う。
【００１８】
以上のような設計データ生成装置１によれば、ＣやＣ＋＋などの時間概念のない高抽象度の言語でもクロックを意識した設計が容易になる。これにより、設計期間を短縮することができる。
【００１９】
（第２の実施の形態）
次に、第２の実施の形態を説明する。
まず、高位合成設計の一例の流れを説明する。
【００２０】
図３は、高位合成設計の一例の流れを説明する図である。
まず、設計者によって、例えば、設計データ生成装置上で、仕様書１０をもとにしたソフトウェア開発が行われ、アプリケーション（ソフトウェア）１１が作成される（ステップＳ１０）。ここでは、設計対象の機能やアルゴリズムを表すコードが、高抽象度の言語を用いて作成される。以下では、高抽象度の言語としてＣまたはＣ＋＋（Ｃ／Ｃ＋＋と表記する）が用いられた場合を例にして説明する。
【００２１】
ステップＳ１０の処理の後、設計者によって、例えば、設計データ生成装置上で、アーキテクチャ設計が行われる（ステップＳ１１）。ここでは、ステップＳ１１の処理で作成されたソフトウェアのＣ／Ｃ＋＋コードにおいて、設計対象をソフトウェアで実現する部分とハードウェアで実現する部分の分割などが行われる。そして、例えば、Ｉ／Ｆ（インターフェース）など、新規に開発する部分ではないハードウェアの設計データを生成する際には、ステップＳ１２からの処理が行われ、新規に開発する部分の設計データを生成する際には、ステップＳ１５からの処理が行われる。
【００２２】
ステップＳ１２の処理では、設計データ生成装置は、ソースコードライブラリ１２に格納された、基本機能、タイミングルール、アルゴリズムなどが記述されたソースコードのテンプレートの中から、設計者からの指示のもと、仕様に合致したものを選択する。
【００２３】
次に、設計データ生成装置は、選択されたテンプレートを組み合わせ、設計者によって入力されたパラメータによってテンプレートを実行するなどしてソースコードを生成する（ステップＳ１３）。
【００２４】
以上のステップＳ１２，Ｓ１３の処理は、図２に示したステップＳ１のソースコード生成処理に対応している。
その後、設計データ生成装置は、タイミングチェックを行う（ステップＳ１４）。ここでは、設計データ生成装置は、ステップＳ１３の処理で生成されたコードをもとに回路を設計した場合に用いられるクロック数を推定し、そのクロック数が、例えば、仕様に応じて設計者が入力した要求値を超えないかチェックする。ステップＳ１４の処理は、図２で示したステップＳ２〜Ｓ４の処理を含む。
【００２５】
例えば、タイミングチェックでエラーがあった場合には、設計者による入力のもと、設計データ生成装置はコードを修正し、高位合成用ソースコード１３ａを生成する。
一方、新規に開発する部分の設計データを生成する際には、設計者は、例えば、設計データ生成装置上で、新規に開発する部分の機能やアルゴリズムを示すＣ／Ｃ＋＋コードを、高位合成用に書き換える（ステップＳ１５）。ここでは、Ｃ／Ｃ＋＋コードにおいて、例えば、設計対象のハードウェア部の入出力ポートや、信号のビット幅などが定義される。
【００２６】
その後、設計データ生成装置は、例えば、ステップＳ１４の処理と同様のタイミングチェックを行う（ステップＳ１６）。タイミングチェックでエラーがあった場合には、設計者による入力のもと、設計データ生成装置はコードを修正し、高位合成用ソースコード１３ｂを生成する。
【００２７】
なお、新規に開発する部分の設計データを生成する際にも、テンプレートを使用できる部分には、ソースコードライブラリ１２に格納されたコードを適用してもよい。
ステップＳ１４，Ｓ１６の後、設計データ生成装置は、高位合成用ソースコード１３ａ，１３ｂを合わせた全体のタイミングチェックを行い（ステップＳ１７）、適宜設計者による入力のもとコードの修正を行う。
【００２８】
図４は、２つの高位合成用ソースコードを合わせた関数モジュールの一例を示す模式図である。
図４では、バス２０に関連づけられた関数モジュール２１が模式的に示されている。関数モジュール２１は、例えば、ユーザ論理部２１ａ、シーケンス部２１ｂ、プロトコル部２１ｃを有している。例えば、ユーザ論理部２１ａが、ステップＳ１５，Ｓ１６の処理で生成される高位合成用ソースコード１３ｂに対応し、シーケンス部２１ｂがステップＳ１２〜Ｓ１４の処理で生成される高位合成用ソースコード１３ａに対応する。
【００２９】
ユーザ論理部２１ａは、例えば、画像処理機能を実現するコード部であり、シーケンス部２１ｂは、例えば、バス２０のデータをＦＩＦＯ（First-In First-Out）するなどの機能を実現するコード部である。
【００３０】
なお、プロトコル部２１ｃは、バス２０の仕様によって決まるコード部であり、例えば、図示しないライブラリから仕様に応じて抽出され、関数モジュール２１に組み込まれる。
【００３１】
設計データ生成装置は、以上の処理により得られた高位合成用ソースコード（例えば、図４に示したような関数モジュール２１）を高位合成ツールに入力することで高位合成を行い、ＲＴＬで記述された設計データ１４を生成する（ステップＳ１８）。
【００３２】
その後、例えば、以下のような回路設計処理が実行されていく。
ＲＴＬの設計データ１４は、論理合成ツールに入力されることによって論理合成が行われ、例えば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field Programmable Gate Array）のゲートレベル・ネットリストが生成される。その後各種検証や修正を行いながら、例えば半導体基板上に回路パターンを転写するためのマスクのレイアウトの設計、マスクの作成などが行われる。
【００３３】
なお、生成された高位合成用ソースコード１３ａ，１３ｂを用いて適切に設計対象回路の設計が可能であった場合、設計データ生成装置は、これらのコードから、シーケンス（処理フロー）、パラメータ、制御構文などを抽出する。そして設計データ生成装置は、抽出したものをもとに、ソースコードライブラリ１２に格納されているテンプレートを更新する。これにより、実績のあるソースコードライブラリ１２が蓄積されていく。
【００３４】
以下、図３の点線部で示した、ステップＳ１２〜Ｓ１４の処理について、さらに詳細に説明する。なお、以下の処理は、新規に開発する部分の設計データを生成する際にも適用可能である。
【００３５】
ステップＳ１２〜Ｓ１４の処理は、例えば、以下のような機能を有する設計データ生成装置により実行される。
図５は、第２の実施の形態の設計データ生成装置の一例を示す図である。
【００３６】
設計データ生成装置３０は、記憶部３１、仕様選択部３２、コード生成部３３、タイミングチェック部３４、入力部３５、出力部３６を有している。
記憶部３１は、図３に示したようなソースコードライブラリ１２を記憶している。ソースコードライブラリ１２には、例えば、過去の設計対象回路の高位合成用のソースコードから抽出された、過去の設計対象回路の基本機能、タイミングルール、アルゴリズムなどが、コード化されてテンプレートとして格納されている。
【００３７】
仕様選択部３２は、ソースコードライブラリ１２に格納された、基本機能、タイミングルール、アルゴリズムなどが記述されたソースコードのテンプレートの中から、設計者からの指示のもと、仕様に合致したものを選択する。
【００３８】
コード生成部３３は、仕様選択部３２で選択されたテンプレートを組み合わせ、例えば、設計者によって入力されたパラメータによってテンプレートを修正するなどして、高位合成用のソースコードを生成する。
【００３９】
仕様選択部３２とコード生成部３３は、図１に示した生成部２の機能を有している。
タイミングチェック部３４は、コード生成部３３で生成されたコードをもとに回路を設計した場合に用いられるクロック数を推定し、そのクロック数が、例えば、設計者が要求する値以上にならないかチェックする。タイミングチェック部３４は、図１に示した推定部３と算出部４の機能を有している。
【００４０】
入力部３５は、設計者から、設計対象の仕様に関する情報や、パラメータなどを入力する。
出力部３６は、例えば、タイミングチェック部３４で推定されたクロック数を設計者に提示したり、仕様選択部３２またはタイミングチェック部３４の処理にて、エラーが発生した場合に、アラームを出力したりする。また、出力部３６は、タイミングチェック部３４にて推定されたクロック数をもとに、高位合成用のソースコードのどこで処理時間がかかるか、または、どこがボトルネックとなるか、などを図示しない表示装置に表示させてもよい。出力部３６は、図１に示した出力部５の機能を有している。
【００４１】
以下、設計データ生成装置３０の動作を説明するとともに、図３に示したステップＳ１２〜Ｓ１４の処理の詳細を説明する。
図６は、第２の実施の形態の設計データ生成装置による設計データ生成処理の一例を示すフローチャートである。
【００４２】
まず、仕様選択部３２は、入力部３５に入力された設計対象回路の仕様に関する情報をもとに、基本機能選択処理を行う（ステップＳ２０）。基本機能選択処理において、仕様選択部３２は、データパスなどのモデルと、その基本機能の選択を行う。そして、仕様選択部３２は、選択された基本機能のコードを記憶部３１のソースコードライブラリ１２から選択する（ステップＳ２１）。
【００４３】
なお、基本機能選択処理において、例えば、ソースコードライブラリ１２にない機能や、競合する機能が指定された場合などは“エラー”となり、ステップＳ２９のエラー処理が行われ、設計データ生成処理が終了される。
【００４４】
ステップＳ２１の処理の後、仕様選択部３２は、入力部３５に入力された設計対象回路の仕様に関する情報をもとに、タイミングルールを選択するタイミング選択処理を行う（ステップＳ２２）。そして、仕様選択部３２は、選択されたタイミングルールのコードを記憶部３１のソースコードライブラリ１２から選択する（ステップＳ２３）。
【００４５】
なお、タイミング選択処理において、ステップＳ２０の処理で選択された各基本機能において、使えないタイミングルールが選択された場合などには、“エラー”となり、ステップＳ２９のエラー処理が行われ、設計データ生成処理が終了される。
【００４６】
ステップＳ２３の処理の後、仕様選択部３２は、入力部３５に入力された設計対象回路の仕様に関する情報をもとに、アルゴリズムを選択するアルゴリズム選択処理を行う（ステップＳ２４）。アルゴリズム選択処理において、仕様選択部３２は、ステップＳ２０の処理で選択された各基本機能において、実装可能なアルゴリズム（論理記述で示される）を選択する。そして、仕様選択部３２は、選択されたアルゴリズムのコードを記憶部３１のソースコードライブラリ１２から選択する（ステップＳ２５）。
【００４７】
次に、コード生成部３３は、ステップＳ２１，Ｓ２３，Ｓ２５の処理で選択されたコードのテンプレートを合成し、高位合成用のソースコードを生成する（ステップＳ２６）。例えば、このとき入力部３５に入力されたパラメータを用いてテンプレートの値を更新するようにしてもよい。
【００４８】
その後、タイミングチェック部３４は、コード生成部３３が生成した高位合成用のソースコードに対して、タイミング抽出処理を行う（ステップＳ２７）。タイミング抽出処理において、タイミングチェック部３４は、高位合成用のソースコードにおいて、クロックが用いられるコード部を推定し、そのコード部を抽出する。
【００４９】
次に、タイミングチェック部３４は、抽出したコード部から、高位合成用のソースコードにおけるクロック数を算出し、そのクロック数が、例えば、設計者が要求する値以上にならないか判定する（タイミングチェック）（ステップＳ２８）。このとき出力部３６は、算出されたクロック数を図示しない表示装置に表示させる。また、出力部３６は、高位合成用のソースコードにおいて、クロックが用いられると推定されたコード部を、表示装置に表示させるようにしてもよい。
【００５０】
タイミングチェックにおいて、クロック数が、例えば、設計者が要求する値（例えば仕様で求められているクロック数（またはサイクル数））以上の場合には、“エラー”となり、ステップＳ２９のエラー処理が行われ、設計データ生成処理が終了される。
【００５１】
エラー処理の際には、出力部３６はエラーが発生した旨を示すアラームを出力する。例えば、出力部３６は、図示しない表示装置に、エラーが発生した旨を示すアラーム表示を行わせる。
【００５２】
なお、タイミングチェック後、出力部３６は、例えば、高位合成用のソースコードのどこに処理時間がかかるか、または、どこがボトルネックとなるか、などを図示しない表示装置に表示させてもよい。
【００５３】
以下では、図６に示した各処理について、具体例を挙げてより詳細に説明する。
（基本機能選択処理の詳細）
図７は、モデルのカテゴリと、基本機能のカテゴリの一例を示す図である。
【００５４】
例えば、モデルのカテゴリとしては、インターフェースブロック、ＭＰＥＧ（Moving Picture Experts Group）演算ブロック、ＪＰＥＧ（Joint Photographic Experts Group）演算ブロックなどがある。例えば、インターフェースブロックの基本機能のカテゴリとしては、プロトコル機能、ＦＩＦＯ機能、プライオリティ機能、チャネル機能などがある。
【００５５】
基本機能選択処理において、仕様選択部３２は、例えば、設計者より入力された設計対象の仕様に関する情報をもとに、上記のようなモデルとその基本機能の選択を行う。
このとき、仕様選択部３２は、例えば、以下のようなルールチェックを行う。
【００５６】
図８は、基本機能選択処理におけるルールチェックの一例を示す図である。
入力部３５に入力された設計対象の仕様に関する情報から、設計対象の基本機能が指定されると（ステップＳ３０）、仕様選択部３２は、ソースコードライブラリ１２に含まれる基本機能が示された機能リスト４０を参照する（ステップＳ３１）。図８では、基本機能である機能Ａ、機能Ｂ、機能Ｃが含まれる機能リスト４０の例を示している。このような機能リスト４０は、例えば、記憶部３１に記憶される。
【００５７】
仕様選択部３２は、ステップＳ３０の処理で指定された基本機能が、機能リスト４０にあるか否かを判定する（ステップＳ３２）。指定された基本機能が、機能リスト４０にない場合には、図６に示したエラー処理が行われる。
【００５８】
指定された基本機能が機能リスト４０にある場合、仕様選択部３２は、機能間での競合に関する情報が管理された機能競合管理テーブル４１を参照する（ステップＳ３３）。図８では、基本機能である機能Ａ、機能Ｂ、機能Ｃ間の競合の有無が○、×で示された機能競合管理テーブル４１の例を示している。例えば、○が競合なし、×が競合ありを示している。このような機能競合管理テーブル４１は、例えば、記憶部３１に記憶される。
【００５９】
仕様選択部３２は、ステップＳ３２の処理で機能リスト４０にあると判定された基本機能と、既にステップＳ３４の判定を行って競合なしと判定された基本機能との間で、競合があるか否かを判定する（ステップＳ３４）。基本機能間で競合がある場合には、図６に示したエラー処理が行われる。
【００６０】
競合がない場合、仕様選択部３２は、ステップＳ３０の処理で指定された全ての基本機能のチェックが完了したか否かを判定する（ステップＳ３５）。全ての基本機能のチェックが完了していなければ、仕様選択部３２は、指定された次の基本機能に対して、ステップＳ３１からの処理を繰り返す。
【００６１】
全ての基本機能のチェックが完了した場合には、図６に示したコード選択（ステップＳ２１）が行われる。
（タイミング選択処理の詳細）
タイミング選択処理では、仕様選択部３２は、基本機能選択処理で選択された基本機能に適用できるタイミングルール（タイミング記述）を選択する。
【００６２】
図９は、基本機能に実装可能な論理のカテゴリとタイミングルールの一例を示す図である。
基本機能には、実装できる論理（アルゴリズム）とタイミングルールがあり、例えば、図９に示す例の場合、ＦＩＦＯ機能には、同期ＦＩＦＯ、非同期ＦＩＦＯ、ＬＩＦＯ（Last-In First-Out）などの論理が実装できることが示されている。また、図９には、タイミングルールとして、同期ＦＩＦＯにはタイミングＡ、タイミングＢ、タイミングＣが実装できることが示されている。
【００６３】
仕様選択部３２は、設計者によって指定されたタイミングルールが実装可能か、例えば、以下のようなルールに従ってチェックする。
図１０は、タイミング選択処理におけるルールチェックの一例を示す図である。
【００６４】
入力部３５に入力された設計対象の仕様に関する情報から、設計対象のタイミングルールが指定されると（ステップＳ４０）、仕様選択部３２は、基本機能選択処理における基本機能の選択結果を参照する（ステップＳ４１）。また、仕様選択部３２は、各基本機能が使えるタイミングに関する情報が管理されたタイミングルール選択テーブル４２を参照する（ステップＳ４２）。図１０では、基本機能である機能Ａ、機能Ｂ、機能Ｃにおいて使えるタイミングルール（タイミングＡ、タイミングＢ、タイミングＣ）の例が示されている。例えば、○が仕様可能なタイミングルールであることを示している。このようなタイミングルール選択テーブル４２は、例えば、記憶部３１に記憶される。
【００６５】
そして仕様選択部３２は、タイミングルール選択テーブル４２をもとに、指定されたタイミングルールが、基本機能選択処理で選択された基本機能で使用可能か否かを判定する（ステップＳ４３）。使用可能であれば、図６に示したコード選択（ステップＳ２３）が行われ、使用不可能であれば、図６に示したエラー処理が行われる。
【００６６】
（アルゴリズム選択処理の詳細）
仕様選択部３２は、入力部３５に入力された仕様に関する情報をもとにアルゴリズム選択処理を行う。
【００６７】
図１１は、基本機能のカテゴリと論理のカテゴリとその論理記述の一例を示す図である。
図１１の例では、インタフェースの基本機能が示されている。インタフェースの基本機能のうち、プロトコル機能には、論理のカテゴリとして、ＡＰＢ（Advanced Peripheral Bus）、ＡＨＢ（Advanced High-performance Bus）、ＡＸＩ（Advanced eXtensible Interface）などが実装可能である。また、ＦＩＦＯ機能には、論理のカテゴリとして、同期ＦＩＦＯ、非同期ＦＩＦＯ、ＬＩＦＯなどが実装可能である。各論理は、例えば、論理式Ａ、論理式Ｂ、論理式Ｃなどの論理記述で表現される。
【００６８】
仕様選択部３２は、設計者によって指定された論理が実装可能か、例えば、以下のようなルールに従ってチェックする。
図１２は、アルゴリズム選択処理におけるルールチェックの一例を示す図である。
【００６９】
入力部３５に入力された設計対象の仕様に関する情報から、設計対象のアルゴリズム（論理）が指定されると（ステップＳ５０）、仕様選択部３２は、ソースコードライブラリ１２に含まれる論理が示された論理リスト４３を参照する（ステップＳ５１）。図１２では、論理Ｘ、論理Ｙ、論理Ｚが含まれる論理リスト４３の例が示されている。このような論理リスト４３は、例えば、記憶部３１に記憶される。
【００７０】
仕様選択部３２は、ステップＳ５０の処理で指定された論理が、論理リスト４３にあるか否かを判定する（ステップＳ５２）。指定された論理が、論理リスト４３にない場合には、図６に示したエラー処理が行われる。
【００７１】
指定された論理が論理リスト４３にある場合、仕様選択部３２は、次に、同一機能の論理間の組み合わせが可能か否かを管理する論理組み合わせ管理テーブル４４を参照する（ステップＳ５３）。図１２では、論理Ｘ、論理Ｙ、論理Ｚの組み合わせが可能か否か、○、×で示された論理組み合わせ管理テーブル４４の例が示されている。例えば、○が組み合わせ可能、×が組み合わせ不可を示している。このような論理組み合わせ管理テーブル４４は、例えば、記憶部３１に記憶される。
【００７２】
仕様選択部３２は、ステップＳ５０の処理で指定された論理間の組み合わせが可能か否かを判定する（ステップＳ５４）。例えば、図１１に示したプロトコル機能において、ＡＨＢとＡＸＩの論理は組み合わせることができない。組み合わせができない論理がある場合には、図６に示したエラー処理が行われる。
【００７３】
選択された機能の論理間の組み合わせが可能であると判定された場合、仕様選択部３２は、他の機能の論理を指定し（ステップＳ５５）、異なる機能間の論理組み合わせ管理テーブル４５を参照する（ステップＳ５６）。図１２では、機能Ａ、機能Ｂの論理Ｘ、論理Ｙ、論理Ｚの組み合わせが可能か否か、○、×で示された論理組み合わせ管理テーブル４５の例が示されている。例えば、○が組み合わせ可能、×が組み合わせ不可を示している。このような論理組み合わせ管理テーブル４５は、例えば、記憶部３１に記憶される。
【００７４】
仕様選択部３２は、論理組み合わせ管理テーブル４５をもとに、ステップＳ５５の処理で指定された他の機能の論理との組み合わせが可能か否かを判定する（ステップＳ５７）。ここでは、仕様選択部３２は、例えば、図１１に示したプライオリティ機能とチャネル機能の各論理は組み合わせが可能であるが、チャネル機能の論理とＡＨＢ機能の論理は組み合わせが不可能、などと組み合わせの可否を判定する。
【００７５】
次に、仕様選択部３２は、他の機能の全ての論理の組み合わせの可否のチェックが完了したか否かを判定する（ステップＳ５８）。他の機能の全ての論理の組み合わせの可否のチェックが完了していなければ、仕様選択部３２は、ステップＳ５５からの処理を繰り返す。
【００７６】
他の機能の全ての論理の組み合わせの可否のチェックが完了した場合には、図６に示したコード選択（ステップＳ２５）が行われる。
（タイミング抽出処理及びタイミングチェックの詳細）
タイミング抽出処理では、タイミングチェック部３４は、コード生成部３３が生成した高位合成用のソースコードに対して、タイミング抽出処理を行う。
【００７７】
本実施の形態において、タイミングチェック部３４は、高位合成用のソースコード上で、以下の４種類のコード部を、クロックが用いられる箇所として判定する。
１つめは、レジスタとなる記述を含むコード部である。レジスタはデータをラッチする際にクロックを使うからである。レジスタとなる記述として、例えば、ｓｔａｔｉｃ宣言でパラメータが記述されたコード部が挙げられる。
【００７８】
２つめは、Ｆｏｒ−ｌｏｏｐ文やＷｈｉｌｅ−ｌｏｏｐ文などのループ記述があるコード部である。なお、高位合成の際に、ループ記述をパイプライン化あるいはアンロールするか否かで、用いられるクロック数が変わってくる。例えば、１０回ループするＦｏｒ−ｌｏｏｐ文をアンロールすると、消費クロック数は、最小で１クロックとなる。詳細は後述する。
【００７９】
３つめは、演算量により用いられるクロック数が推定できるコード部である。タイミングチェック部３４は、シリアルに実行される演算の回数や演算の種類（加算、減算、乗算、除算など）に応じて、クロック数を推定する。
【００８０】
４つめは、データに依存関係があるコード部である。例えば、ある演算式の左辺の値を、他の演算式の右辺で用いているコード部などが挙げられる。このような場合、２つの演算式はシリアルに実行されるのでクロックが入ると推定される。データに依存関係が発生するケースには、例えば、以下の３つがある。
【００８１】
１つめは、同一式において同一パラメータを含む場合である。例えば、ａ＝ａ＋１、のような式が挙げられる。このように同一パラメータａが左辺と右辺に用いられる式を演算する場合、１クロック要する。
【００８２】
２つめは、２式間で同一パラメータが使われている場合であり、ライト→リードの処理が発生する場合である。例えば、ａ＝ｂ＋ｃ、ｄ＝ａ＋ｅ、のように同一パラメータａが用いられる式が挙げられる。このような場合も演算に１クロック要する。
【００８３】
３つめは、２式間で同一パラメータが使われている場合であり、リード→ライドの処理が発生する場合である。例えば、ｄ＝ａ＋ｃ、ａ＝ｂ＋ｃ、のように同一パラメータａが用いられる式が挙げられる。このような場合も演算に１クロック要する。
【００８４】
図１３は、タイミング抽出処理及びタイミングチェックの一例の処理の流れを示す図である。
タイミングチェック部３４は、高位合成用ソースコード４６から、レジスタとなる記述があるコード部４６ａ，４６ｂ，４６ｃを検出する（ステップＳ６０）。さらに、タイミングチェック部３４は、ループ記述のコード部４６ｄ，４６ｅを検出し（ステップＳ６１）、演算量により用いられるクロック数が推定できるコード部４６ｆを検出する（ステップＳ６２）。また、タイミングチェック部３４は、データの依存関係があるコード部４６ｄ，４６ｅ，４６ｆを検出する（ステップＳ６３）。
【００８５】
その後、タイミングチェック部３４は、上記ステップＳ６０〜Ｓ６３の検出結果をもとに、高位合成用ソースコード４６を適用した場合に用いられる可能性のあるクロックの数を算出する（ステップＳ６４）。そして、タイミングチェック部３４は、算出したクロック数が、設計者が要求する値（例えば、入力された仕様に定められた値）以上にならないか否かを判定する（ステップＳ６５）。
【００８６】
算出したクロック数が、設計者が要求する値以上とはならない場合には、処理を終了し、設計者が要求する値以上となる場合には、図６に示したステップＳ２９のエラー処理が行われる。
【００８７】
なお、上記の各検出処理は、順番を入れ替えてもよいし、並列に行ってもよい。
以下、ステップＳ６０〜Ｓ６３の検出処理で、検出される高位合成用ソースコードの具体例を説明する。
【００８８】
図１４は、高位合成用ソースコードの一例を示す図である。
高位合成用ソースコード５０は、Ｃ／Ｃ＋＋で記述されている。図１４に示す例では、コード部５１は、ｓｔａｔｉｃ宣言がなされている“ｓｔａｔｅ”、“ｔｅｍｐ”というパラメータが含んでいる。このようなパラメータは、レジスタとなる記述として以下のコード部５２，５３，５４から検出される。コード部５２〜５４は、Ｆｏｒ−ｌｏｏｐ文を含んでいる。このようなコード部５２〜５４はループ記述を含むものとして検出される。また、コード部５２ａ，５３ａ，５４ａは、シリアルに演算が行われ、演算量により、用いられるクロック数が推定できる箇所として検出される。さらに、図１４中において矢印で示したような、２式間で同じパラメータを左辺と右辺で使用している箇所は、データの依存関係があるコード部として検出される。
【００８９】
以下、クロック数の算出処理の詳細を説明する。
図１５は、クロック数を算出する一例の処理の流れを示す図である。
タイミングチェック部３４は、検出したレジスタとなる記述であるＳｔａｔｉｃパラメータのうち入力（ライト）が行われる数Ｓを各コード部から抽出する（ステップＳ７０）。例えば、図１４で示した高位合成用ソースコード５０の場合、コード部５２ａでは、レジスタとなる記述としてｓｔａｔｉｃ宣言された“ｓｔａｔｅ［ｉ］”に対する入力が行われるので、Ｓ＝１が抽出される。コード部５４ａでは、レジスタとなる記述としてｓｔａｔｉｃ宣言された“ｔｅｍｐ［ｋ］”に対する入力が行われるので、Ｓ＝１が抽出される。
【００９０】
また、タイミングチェック部３４は、検出されたループ記述を含むコード部から、ループ回数Ｌを抽出する（ステップＳ７１）。例えば、図１４で示した高位合成用ソースコード５０の場合、コード部５２〜５４からループ回数Ｌ＝９が抽出される。
【００９１】
また、例えば、設計者によりシリアル演算箇所の演算量の計算手法が選択されると（ステップＳ７２）、タイミングチェック部３４は、選択された計算手法で、シリアル演算箇所の演算量Ｅを計算する（ステップＳ７３）。
【００９２】
シリアル演算箇所の演算量を計算する際、論理演算及び加減算の演算量は１／ｎ、乗算の演算量は１／ｘｎ、除算は１ｙとする。なお、ｎは１クロックに対しての演算の割合である。また、ｘは０＜ｘ≦１、ｙは１＜ｙとする。ｎ，ｘ，ｙは、例えば、設計対象回路の動作周波数などのテクノロジに応じて設計者によって設定される。
【００９３】
例えばｎ＝１０、ｘ＝０．５、ｙ＝１２とした場合、図１４で示した高位合成用ソースコード５０のコード部５２ａの式（ａ）は、論理演算“＾（ＥｘＯＲ）”を１つ含むので、演算量Ｅ＝１／１０となる。また、コード部５３ａの式（ｂ１）は、加算を１つ含むので、演算量Ｅ＝１／１０、式（ｂ２）は、論理演算“＞＞（シフト演算）”を１つ含むので、演算量Ｅ＝１／１０となる。また、コード部５４ａの式（ｃ１）は、論理演算を１つ、乗算を２つ、加減算を２つ含むので、演算量Ｅ＝（１／１０）＋２×（１／５）＋２×（１／１０）＝７／１０となる。式（ｃ２）は、論理演算を２つ、乗算を２つ、加減算を３つ含むので、演算量Ｅ＝２×（１／１０）＋２×（１／５）＋３×（１／１０）＝９／１０となる。
【００９４】
以下では上記の計算手法を手法１と呼ぶ。
演算量の別の計算手法（手法２）は、各式において他との依存関係がない項で、且つ加減算の前後の項の演算量を、上記の演算量の合計値から引くものである。通常のソフトウェアプログラムと同じ演算の優先ルールに従うと、加減算は並列部となるので、加減算の前後の項は並列化して演算できる。
【００９５】
例えば、式（ｃ１）では、“ｄａｔａ１＿ｉｎ［ｋ］＞＞６”の項の演算量を式（ｃ１）の合計の演算量から差し引くことが可能で、上記の例の場合、式（ｃ１）の演算量Ｅ＝（７／１０）−（１／１０）＝６／１０となる。また、式（ｃ２）では、“ｄａｔａ１＿ｉｎ［ｋ］＆ｄａｔａ２＿ｉｎ［ｋ］”の項の演算量を式（ｃ２）の合計の演算量から差し引くことが可能で、上記の例の場合、式（ｃ２）の演算量Ｅ＝（９／１０）−（１／１０）＝８／１０となる。
【００９６】
次に、タイミングチェック部３４は、計算した演算量Ｅからシリアル演算箇所で用いられるクロック数を計算する（ステップＳ７４）。
例えば、上記のようにｎ＝１０、ｘ＝０．５、ｙ＝１２とした場合、コード部５２〜５４のシリアル演算箇所で用いられるクロック数は以下のようになる。
【００９７】
図１４のコード部５２では、式（ａ）の演算量は１／１０、つまり０．１クロックで実行できる演算量である。そのため、コード部５２のシリアル演算箇所で用いられるクロック数は１となる。また、式（ｂ１），（ｂ２）の演算量は共に１／１０であるので、コード部５３の演算量は２／１０、つまり０．２クロックで実行できる演算量である。そのため、コード部５３のシリアル演算箇所で用いられるクロック数は１となる。また、手法１を適用する場合、式（ｃ１）の演算量は７／１０、（ｃ２）の演算量は９／１０であるので、コード部５４の演算量は１６／１０、つまり１．６クロックで実行できる演算量である。そのため、コード部５４のシリアル演算箇所で用いられるクロック数は２（小数点以下は切り上げ）となる。手法２を適用する場合、式（ｃ１）の演算量は６／１０、（ｃ２）の演算量は８／１０であるので、コード部５４の演算量は１４／１０、つまり１．４クロックで実行できる演算量である。そのため、コード部５４のシリアル演算箇所で用いられるクロック数は手法１と同様に、２となる。
【００９８】
タイミングチェック部３４は、さらに、高位合成用ソースコードのループ記述のある箇所において、データ依存のある各パラメータ（ループ内外に依存関係があるものも含む）の数のうち最大数Ｄ１を計算し、これをクロック数として保持する（ステップＳ７５）。
【００９９】
例えば、図１４に示した高位合成用ソースコード５０のコード部５２では、コード部５４ａの式（ｃ１），（ｃ２）と依存関係がある１つのパラメータ“ｓｔａｔｅ”を含むのでＤ１＝１となる。
【０１００】
コード部５３は、ループ内の式（ｂ１）とループ外のコード部５４ａの式（ｃ１）と依存関係があるパラメータ“ｔｅｍｐ＿ｂ”を含む。コード部５３では、式（ｂ１）の右辺と、式（ｂ２）の左辺にパラメータ“ｔｅｍｐ＿ｂ”があるが、これらはリード→ライトの依存関係にあるので、データ依存のあるパラメータ“ｔｅｍｐ＿ｂ”としては１つとカウントされ、Ｄ＝１となる。
【０１０１】
コード部５４は、ループ内の式ｃ（ｃ）と依存関係のあるパラメータ“ｔｍｐ＿ｃ”と、ループ外の式と依存関係のあるパラメータ“ｔｅｍｐ”を含む。コード部５４では、式（ｃ１）の左辺と、式（ｃ２）の右辺にパラメータ“ｔｅｍｐ＿ｃ”があるが、これらはライト→リードの依存関係にあるので、データ依存のあるパラメータ“ｔｅｍｐ＿ｃ”としては１つとカウントされる。“ｔｅｍｐ”も１つであるので、Ｄ＝１となる。
【０１０２】
図１４に示した高位合成用ソースコード５０のコード部５２の例では、データ依存のある各パラメータの数のうちの最大数Ｄ１は全て１である。例えば、コード部５４ａにおいて、式（ｃ１）、（ｃ２）がそれぞれもう一段あった場合、他と依存関係のあるパラメータ“ｔｍｐ＿ｃ”と“ｔｅｍｐ”が２つずつになるので、Ｄ１は２となる。
【０１０３】
タイミングチェック部３４は、ステップＳ７１の処理で抽出したループ回数Ｌを用いて、Ｄ１＋Ｌ、Ｄ１×Ｌを計算する（ステップＳ７６）。ループ記述のある箇所に関してパイプライン化する場合には、Ｄ１＋Ｌがクロック数の計算に用いられ、パイプライン化しない場合には、Ｄ１×Ｌがクロック数の計算に用いられる。パイプライン化されるか否かは、高位合成ツール上で設計制約を与えることで決定されるが、ステップＳ７６の処理の段階では、どちらになるかは決定できない。そのため、タイミングチェック部３４は、クロック数の計算を行う際には、例えば、Ｄ１＋Ｌ、Ｄ１×Ｌのうち、大きい値を選択する。また、タイミングチェック部３４は、Ｄ１＋Ｌ、Ｄ１×Ｌの両方で計算して、設計者に提示するようにしてもよい。
【０１０４】
なお、ループ回数Ｌは、ループ内の式が他の部分と依存関係がない場合には、アンロールできるため、Ｌ＝０として計算が行われる。
さらに、タイミングチェック部３４は、各ループと、その他のループあるいは他の式（ループ記述となっていない部分にある式）との間におけるデータ依存数Ｄ２を計算し、Ｄ２の最大値をクロック数として保持する（ステップＳ７７）。
【０１０５】
例えば、あるループ内のパラメータが、他の３つのループと依存関係がある場合（そのパラメータが利用されている場合）、最大値は３となる。
他のループ内で複数のパラメータがあっても、その数はＤ１で計算されているので、Ｄ２の計算においては、あるループにおけるパラメータと同一のパラメータが、他のループ内にあるか否かでカウントが行われる。
【０１０６】
あるループ内の式において、他のループあるいは他の式と同じパラメータを使用していない場合、または、そのループのコードを最初に実行しなければならない（実行が優先される）場合、そのループ内のクロックは単独で計算できるのでＤ２は０となる。
【０１０７】
あるループ内の式において、他のループあるいは他の式と同じパラメータを使用している場合で、左辺と右辺にそのパラメータがある場合、その依存するパラメータ数をカウントした数をＤ２とする。
【０１０８】
図１４に示した高位合成用ソースコード５０を用いた場合、以下のようにＤ２が計算される。
図１６は、各コード部の依存関係の一例を示す図である。図１４に示した高位合成用ソースコード５０のコード部５２〜５４間に依存関係があるものが、○、依存関係のないものが、×で示されている。
【０１０９】
例えば、コード部５２とコード部５３の間では依存関係がないのでＤ２＝０、コード部５２とコード部５４の間では、同一パラメータ“ｓｔａｔｅ”が利用されているので、Ｄ２＝１となる。また、コード部５３とコード部５４の間では、同一パラメータ“ｔｍｐ＿ｂ”が利用されているので、Ｄ２＝１となる。
【０１１０】
その後、タイミングチェック部３４は、Ｄ２が０であるか否かを判定する（ステップＳ７８）。Ｄ２が０の場合には、ステップＳ８１の処理が行われる。Ｄ２が０ではない場合には、タイミングチェック部３４は、実行順序により、依存関係が無視できるコード部があるか否か判定する（ステップＳ７９）。
【０１１１】
例えば、図１４に示した高位合成用ソースコード５０では、実行順序がコード部５２→コード部５３→コード部５４となる。ここで、コード部５２は、前述のようにループ内の式が他の部分と依存関係がないのでアンロールできるため、Ｌ＝０と判定されている。また、コード部５２自身は実行順序が最初である。そのため、コード部５２の処理時間は、コード部５３の処理時間に隠れる（隠蔽される）。そのため、コード部５２とコード部５４の間の依存関係は無視でき、コード部５２とコード部５４との間のＤ２は０と再決定される（ステップＳ８０）。依存関係が無視できない場合には、ステップＳ８１の処理が行われる。
【０１１２】
ステップＳ８１の処理では、タイミングチェック部３４は、上記の処理で求めたＳ、Ｌ、Ｄ１、Ｄ１＋Ｌ、Ｄ１×Ｌ、Ｄ２、Ｅをもとに、全体のクロック数を計算する。
ループ内にクロックが入る回数Ｌｅは、パイプライン化を行う場合、Ｌｅ＝（Ｄ１＋Ｌ）×Ｓ、パイプライン化を行わない場合、Ｌｅ＝（Ｄ１×Ｌ）×Ｓ、の式で求められる。ただし、Ｓ＝０の場合は、Ｌｅ＝（Ｄ１＋Ｌ）、あるいは、Ｌｅ＝（Ｄ１×Ｌ）、の式で求められる。
【０１１３】
各ループのクロック数Ｌｃｋは、パイプライン化を行う場合、Ｌｃｋ＝Ｌｅ×（Ｅ−１）×Ｄ２、パイプライン化を行わない場合、Ｌｃｋ＝Ｌｅ×Ｅ×Ｄ２、の式で求められる。
【０１１４】
その後、タイミングチェック部３４は、各ループのクロック数の合計を計算する。例えば、高位合成用ソースコード５０のコード部５２のクロック数をＬｃｋＡ、コード部５３のクロック数をＬｃｋＢ、コード部５４のクロック数をＬｃｋＣとすると、合計のクロック数Ｔｃｋ＝ＬｃｋＡ＋ＬｃｋＢ＋ＬｃｋＣと求められる。
【０１１５】
図１７は、算出された全体のクロック数と各パラメータの値の一例を示す図である。図１７では、図１４に示した高位合成用ソースコード５０を用いた場合のクロック数の計算結果が示されている。
【０１１６】
具体的には、コード部５２〜５４ごとのＳ、Ｌ、Ｄ１、Ｄ１＋Ｌ、Ｄ１×Ｌ、Ｄ２、Ｅと合計クロック数（括弧はシリアル実行時）と、Ｓ、Ｌ、Ｄ１、Ｄ１＋Ｌ、Ｄ１×Ｌ、Ｄ２、Ｅの合計及び、全体のクロック数の合計が示されている。なお、Ｄ２は各コード部５２〜５４とも２つの値を持つが、図１７に示す計算例では、最大の値の方が合計クロック数の計算に用いられている。また、Ｄ１＋ＬとＤ１×Ｌのうち大きい方の値が合計クロック数の計算に用いられている。
【０１１７】
図１７に示すように、図１４に示した高位合成用ソースコード５０を用いた場合に用いられるクロック数の合計は、２０（シリアル実行時は２１）と推定される。
以上より、コード部５２〜５４の処理は、以下のようなサイクルで行われると推定できる。
【０１１８】
図１８は、推定された各コード部の処理の一例を示す図である。横軸はクロックサイクル数を示している。
式（ａ）を含むコード部５２の処理は、アンロールにより１クロックサイクルで行われる。前述のようにコード部５２と依存関係のないコード部５３は、コード部５２と並列に実行される。依存関係のある式（ｂ１），（ｂ２）を含むコード部５３の処理は、図１７に示したように、１０クロックサイクルかかる。依存関係のある式（ｃ１），（ｃ２）を含むコード部５４の処理は、図１７に示したように、１０クロックサイクルかかる。
【０１１９】
タイミングチェック部３４は、合計のクロック数Ｔｃｋを計算すると、それが、設計者が要求するクロック数（あるいはサイクル数）Ｕ以上にならないか判定する（ステップＳ８２）。Ｕは、例えば、設計対象回路の仕様（例えば、動作周波数など）に応じた所定値である。Ｕ＞Ｔｃｋであれば、出力部３６は、クロック数の計算結果や、どこに処理時間がかかるか、ボトルネックはどこかなどを、例えば、図示しない表示装置に出力する（ステップＳ８３）。
【０１２０】
図１９は、クロック数の計算結果の表示例を示す図である。
ここでは、出力部３６が、図１６に示した各コード部の依存関係を示す表と、図１７に示した全体のクロック数と各パラメータの値の一例を示した表を、表示画面６０に表示させた例を示している。なお、図中で、Ａはコード部５２、Ｂはコード部５３、Ｃはコード部５４を示している。このような表において、出力部３６は、数値が大きい箇所を強調表示するようにしてもよい。
【０１２１】
また、出力部３６は、コード部５２〜５４や、図１８で示した推定される各コード部の処理の様子もあわせて表示画面６０に表示させるようにしてもよい。
設計者はこのような表示画面６０を参照することで、ＡＣ間、ＢＣ間で依存関係があるが、ＡＣ間はＤ２＝０なので無視でき、ボトルネックがＢＣ間の依存関係であることなどが容易に理解できる。また、Ｄ２及びＥから、Ｂ、Ｃのループにおける演算量が多く、また依存関係があるパラメータが存在することなどが容易に理解できる。
【０１２２】
設計者は、複数のプロジェクトに対して、本実施の形態の設計データ生成装置３０を適用して図１９に示したような表を作成して比較することで、どのようなコードが設計対象に適しているか容易に判定することが可能になる。
【０１２３】
ステップＳ８２の判定の結果、Ｕ≦Ｔｃｋであれば、出力部３６は、図６で示したステップＳ２９のエラー処理を行う。
なお、上記の図１５の各処理のうち、ステップＳ７０〜８０は、適宜順番を入れ替えてもよく、並列に行ってもよい。
【０１２４】
（エラー処理の詳細）
図６で示したステップＳ２９のエラー処理では、出力部３６は、設計者に対してどこでエラーが発生したのかを示す。例えば、出力部３６は、基本機能選択処理（ステップＳ２０）、タイミング選択処理（ステップＳ２２）、アルゴリズム選択処理（ステップＳ２４）でエラーが発生した場合には、サポートされない機能、タイミング、論理が選択された旨を出力する。このとき出力部３６は、図示しない表示装置に、同時に実装できない（競合する）機能、タイミング、論理などを表示するようにしてもよい。
【０１２５】
また、タイミングチェックでエラーが発生した場合、出力部３６は、表示装置にエラーが発生した旨を表示し、例えば、図１９に示したような表示画面６０を合わせて表示するようにしてもよい。
【０１２６】
以上のような、設計データ生成装置３０によれば、装置側が高位合成用のソースコード上でクロックが用いられる箇所を抽出し、クロック数を計算するので、ＣやＣ＋＋などの時間概念のない高抽象度の言語でもクロックを意識した設計が容易になる。これにより、設計者の労力が削減されるとともに、設計期間を短縮することができる。また、熟練者でなくても高品質な回路設計を行うことができる。
【０１２７】
（ハードウェア例）
以上説明した設計データ生成装置３０及び処理内容は、以下のようなハードウェアにて実現可能である。
【０１２８】
図２０は、本実施の形態に用いるコンピュータのハードウェアの一例を示す図である。コンピュータ１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０８を介してＲＡＭ（Random Access Memory）１０２と複数の周辺機器が接続されている。
【０１２９】
ＣＰＵ１０１は、図５に示した仕様選択部３２、コード生成部３３、タイミングチェック部３４などの機能を有する。
ＲＡＭ１０２は、コンピュータ１００の主記憶装置として使用される。ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。例えば、生成した高位合成用ソースコードを一時記憶する。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に用いる各種データが格納される。
【０１３０】
バス１０８に接続されている周辺機器としては、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、及び通信インタフェース１０７がある。
【０１３１】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込み及び読み出しを行う。ＨＤＤ１０３は、コンピュータ１００の二次記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、及び各種データが格納される。例えば、前述したソースコードライブラリ１２などもＨＤＤ１０３に記憶するようにしてもよい。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【０１３２】
グラフィック処理装置１０４は、例えば、図５の出力部３６の機能を有する。グラフィック処理装置１０４にはモニタ１０４ａが接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１０４ａの画面に表示させる。モニタ１０４ａとしては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【０１３３】
入力インタフェース１０５は、図５に示した入力部３５の機能を有している。入力インタフェース１０５には、キーボード１０５ａとマウス１０５ｂとが接続されている。入力インタフェース１０５は、キーボード１０５ａやマウス１０５ｂから送られてくる信号をＣＰＵ１０１に送信する。なお、マウス１０５ｂは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【０１３４】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク１０６ａに記録されたデータの読み取りを行う。光ディスク１０６ａは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク１０６ａには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【０１３５】
通信インタフェース１０７は、ネットワーク１０７ａに接続されている。通信インタフェース１０７は、ネットワーク１０７ａを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【０１３６】
以上のようなハードウェアによって、本実施の形態の処理機能を実現することができる。
また、本実施の形態の処理機能は、上記のようにコンピュータによって実現することができる。その場合、設計データ生成装置３０が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１３７】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１３９】
また、上記の処理機能の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することもできる。
【０１４０】
以上、実施の形態に基づき、本発明の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
以上説明した複数の実施の形態に関し、さらに以下の付記を開示する。
【０１４１】
（付記１）  設計対象回路のソースコードにおいてクロックが用いられるコード部を推定する推定部と、
推定された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出する算出部と、
算出された前記クロック数を出力する出力部と、
を有することを特徴とする設計データ生成装置。
【０１４２】
（付記２）  前記推定部は、前記ソースコードにおいてレジスタとなる記述がある箇所を前記クロックが用いられる前記コード部として推定することを特徴とする付記１記載の設計データ生成装置。
【０１４３】
（付記３）  前記レジスタとなる記述は、ｓｔａｔｉｃ宣言がなされたパラメータがある箇所であることを特徴とする付記２記載の設計データ生成装置。
（付記４）  前記推定部は、前記ソースコードにおいてループ記述がある箇所を前記クロックが用いられる前記コード部として推定することを特徴とする付記１乃至３の何れか一項に記載の設計データ生成装置。
【０１４４】
（付記５）  前記推定部は、前記ソースコードにおいて、演算量により、用いられるクロック数が推定できる箇所を前記クロックが用いられる前記コード部として推定することを特徴とする付記１乃至４の何れか一項に記載の設計データ生成装置。
【０１４５】
（付記６）  前記クロック数が推定できる前記箇所は、シリアルに加減算、乗算、除算または論理演算が行われる箇所であることを特徴とする付記５記載の設計データ生成装置。
【０１４６】
（付記７）  前記推定部は、前記ソースコードにおいてデータに依存関係がある箇所を前記クロックが用いられる前記コード部として推定することを特徴とする付記１乃至６の何れか一項に記載の設計データ生成装置。
【０１４７】
（付記８）  前記データに依存関係がある前記箇所は、１または複数の演算式において、左辺と右辺に同一のパラメータがある箇所であることを特徴とする付記７記載の設計データ生成装置。
【０１４８】
（付記９）  過去の前記設計対象回路の基本機能、タイミングルールまたはアルゴリズムがコード化されたテンプレートを、今回の前記設計対象回路の仕様に応じて選択して前記ソースコードを生成する生成部を有することを特徴とする付記１乃至８の何れか一項に記載の設計データ生成装置。
【０１４９】
（付記１０）  前記出力部は、前記クロック数を算出するためのパラメータのうち、処理時間が大きくなることを示すもの、または、ボトルネックとなるものを表示装置に強調表示させることを特徴とする付記１乃至９の何れか一項に記載の設計データ生成装置。
【０１５０】
（付記１１）  前記出力部は、算出された前記クロック数が、前記設計対象回路の仕様に応じた所定値以上となる場合、エラーが生じた旨を出力することを特徴とする付記１乃至１０の何れか一項に記載の設計データ生成装置。
【０１５１】
（付記１２）  前記ソースコードは時間概念のないＣ言語をもとにした言語で記述されていることを特徴とする付記１乃至１１の何れか一項に記載の設計データ生成装置。
（付記１３）  コンピュータが実行する設計データ生成方法であって、
設計対象回路のソースコードにおいてクロックが用いられるコード部を推定し、
推定された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出し、
算出された前記クロック数を出力することを特徴とする設計データ生成方法。
【０１５２】
（付記１４）  コンピュータに、
設計対象回路のソースコードにおいてクロックが用いられるコード部を推定し、
推定された前記コード部を分析して、前記ソースコードにおいて用いられるクロック数を算出し、
算出された前記クロック数を出力する処理を実行させるプログラム。
【符号の説明】
【０１５３】
１  設計データ生成装置
２  生成部
３  推定部
４  算出部
５  出力部
６  ソースコード
６ａ，６ｂ，６ｃ，６ｄ  コード部
【図１】
0005644344.tif 000002
【図２】
0005644344.tif 000003
【図３】
0005644344.tif 000004
【図４】
0005644344.tif 000005
【図５】
0005644344.tif 000006
【図６】
0005644344.tif 000007
【図７】
0005644344.tif 000008
【図８】
0005644344.tif 000009
【図９】
0005644344.tif 000010
【図１０】
0005644344.tif 000011
【図１１】
0005644344.tif 000012
【図１２】
0005644344.tif 000013
【図１３】
0005644344.tif 000014
【図１４】
0005644344.tif 000015
【図１５】
0005644344.tif 000016
【図１６】
0005644344.tif 000017
【図１７】
0005644344.tif 000018
【図１８】
0005644344.tif 000019
【図１９】
0005644344.tif 000020
【図２０】
0005644344.tif 000021