(57)【要約】【課題】純粋なＣ言語で書かれたアルゴリズム記述から、品質の良いハードウェアを短期間に効率よく設計可能にする。【解決手段】論理回路の演算または制御アルゴリズムをＣ言語によって記述したアルゴリズムＣ記述１を、機能Ｃ変換システム２０において、処理単位で複数の状態に分割し、分割した処理の実行順序を状態の遷移として記述して、制御記述が埋め込まれた機能Ｃ記述２を生成する。この機能Ｃ記述２に、ＲＴレベルＣ変換システム４０において、時間の概念であるクロック記述を挿入して、ＲＴレベルＣ記述３に変換する。ＲＴレベルＣ記述３は、既存の変換ツール６０によって、ＨＤＬによるＲＴレベル記述５に変換される。【選択図】図１
2006185461.tif 000002
【特許請求の範囲】
【請求項１】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記機能Ｃ変換ステップは、
前記アルゴリズムＣ記述を、少なくとも１つのアイドル状態または初期化状態を含む複数の状態の記述に、分割するものである
ことを特徴とする論理回路設計方法。
【請求項２】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記機能Ｃ変換ステップは、
前記アルゴリズムＣ記述を、少なくとも、データ入力処理に対応するデータ入力状態の記述、演算処理に対応する演算状態の記述、およびデータ出力処理に対応する結果出力状態の記述に、分割するものである
ことを特徴とする論理回路設計方法。
【請求項３】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、かつ、
前記機能Ｃ記述を用いて、ハードウェアの機能について、クロックを除き、そのデータパスと制御のみを検証する機能検証ステップを備え、
前記機能検証ステップにおいて、前記ハードウェア機能が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップに移行する
ことを特徴とする論理回路設計方法。
【請求項４】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、かつ、
前記クロック挿入手段が、前記ＲＴレベルＣ記述を用いて、ハードウェアのクロックサイクルタイミング動作を検証する動作検証ステップを備え、
前記動作検証ステップにおいて、クロックサイクルタイミング動作が正しいと確認されたとき、前記ＨＤＬ変換ステップに移行する
ことを特徴とする論理回路設計方法。
【請求項５】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記機能Ｃ変換ステップは、
状態遷移表現を、switch文で記述するものであり、
処理単位を、多分岐表現によって、それぞれ記述し、
実行順序を、case内に遷移先を明記することによって表現し、かつ
１個のステートマシーンを、ループ表現を用いて閉じるように、記述するものである
ことを特徴とする論理回路設計方法。
【請求項６】
請求項５記載の論理回路設計方法において、
前記機能Ｃ変換ステップは、
１個の状態内で複数の処理を並列に実行させるとき、その複数のステートマシーンを、ループ表現を用いてそれぞれ閉じるように、記述するものである
ことを特徴とする論理回路設計方法。
【請求項７】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記機能Ｃ変換ステップの前処理として、前記状態分割手段が、前記アルゴリズムＣ記述を、ハードウェア機能に着目してモジュール毎に記述し直し、モジュール毎のアルゴリズムＣ記述を生成するモジュール分割ステップを備えた
ことを特徴とする論理回路設計方法。
【請求項８】
請求項７記載の論理回路設計方法において、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述を、少なくとも、メモリ部と、演算処理部とに、分割する
ことを特徴とする論理回路設計方法。
【請求項９】
請求項７記載の論理回路設計方法において、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述について、ハードウェアのソフトマクロまたはハードマクロに対応した演算器を別モジュールとして分割する
ことを特徴とする論理回路設計方法。
【請求項１０】
請求項７記載の論理回路設計方法において、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述について、演算処理のためのパラメータ設定レジスタ部を別モジュールとして分割する
ことを特徴とする論理回路設計方法。
【請求項１１】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記ＲＴレベルＣ変換ステップは、
前記機能Ｃ記述から、制御を表す状態遷移記述と、データパスを表す演算処理記述とを、抜き出し、
抜き出した前記状態遷移記述および演算処理記述のそれぞれに、時間の概念であるクロック記述を挿入するものである
ことを特徴とする論理回路設計方法。
【請求項１２】
状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法であって、
前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、
前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備え、
前記ＲＴレベルＣ変換ステップは、
ＳｙｓｔｅｍＣまたはＳｐｅｃＣの文法を適用して、ＲＴレベルＣ記述を生成するものである
ことを特徴とする論理回路設計方法。
【請求項１３】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、
前記機能Ｃ変換ステップは、
前記アルゴリズムＣ記述を、少なくとも１つのアイドル状態または初期化状態を含む複数の状態の記述に、分割するものである
ことを特徴とするプログラム。
【請求項１４】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、
前記機能Ｃ変換ステップは、
前記アルゴリズムＣ記述を、少なくとも、データ入力処理に対応するデータ入力状態の記述、演算処理に対応する演算状態の記述、およびデータ出力処理に対応する結果出力状態の記述に、分割するものである
ことを特徴とするプログラム。
【請求項１５】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、かつ、
前記機能Ｃ記述を用いて、ハードウェアの機能について、クロックを除き、そのデータパスと制御のみを検証する機能検証ステップを実行させるものであり、
前記機能検証ステップにおいて、前記ハードウェア機能が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップに移行する
ことを特徴とするプログラム。
【請求項１６】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、かつ、
前記ＲＴレベルＣ記述を用いて、ハードウェアのクロックサイクルタイミング動作を検証する動作検証ステップを実行させるものであり、
前記動作検証ステップにおいて、クロックサイクルタイミング動作が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップに移行する
ことを特徴とするプログラム。
【請求項１７】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、
前記機能Ｃ変換ステップは、
状態遷移表現を、switch文で記述するものであり、
処理単位を、多分岐表現によって、それぞれ記述し、
実行順序を、case内に遷移先を明記することによって表現し、かつ
１個のステートマシーンを、ループ表現を用いて閉じるように、記述するものである
ことを特徴とするプログラム。
【請求項１８】
請求項１７記載のプログラムにおいて、
前記機能Ｃ変換ステップは、
１個の状態内で複数の処理を並列に実行させるとき、その複数のステートマシーンを、ループ表現を用いてそれぞれ閉じるように、記述するものである
ことを特徴とするプログラム。
【請求項１９】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、かつ、
前記機能Ｃ変換ステップの前処理として、前記アルゴリズムＣ記述を、ハードウェア機能に着目してモジュール毎に記述し直し、モジュール毎のアルゴリズムＣ記述を生成するモジュール分割ステップを実行させる
ことを特徴とするプログラム。
【請求項２０】
請求項１９記載のプログラムにおいて、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述を、少なくとも、メモリ部と、演算処理部とに、分割する
ことを特徴とするプログラム。
【請求項２１】
請求項１９記載のプログラムにおいて、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述について、ハードウェアのソフトマクロまたはハードマクロに対応した演算器を別モジュールとして分割する
ことを特徴とするプログラム。
【請求項２２】
請求項１９記載のプログラムにおいて、
前記モジュール分割ステップは、
前記アルゴリズムＣ記述について、演算処理のためのパラメータ設定レジスタ部を別モジュールとして分割する
ことを特徴とするプログラム。
【請求項２３】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、
前記ＲＴレベルＣ変換ステップは、
前記機能Ｃ記述から、制御を表す状態遷移記述と、データパスを表す演算処理記述とを、抜き出し、
抜き出した前記状態遷移記述および演算処理記述のそれぞれに、時間の概念であるクロック記述を挿入するものである
ことを特徴とするプログラム。
【請求項２４】
コンピュータに、
論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、
前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるものであり、
前記ＲＴレベルＣ変換ステップは、
ＳｙｓｔｅｍＣまたはＳｐｅｃＣの文法を適用して、ＲＴレベルＣ記述を生成するものである
ことを特徴とするプログラム。
【請求項２５】
請求項１３〜２４のうちいずれか１項に記載のプログラムを記録した
コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路の設計に関するものであり、特に、Ｃ言語記述からのトップダウン設計に関する技術に属する。
【背景技術】
【０００２】
従来、論理回路のハードウェアは、Ｖerilog−ＨＤＬやＶＨＤＬといったＨＤＬ言語によって設計を行っていた。しかし、近年、ＳｐｅｃＣやＳｙｓｔｅｍＣと呼ばれるシステムレベル記述言語が登場してきており、Ｃ言語を利用したハードウェア設計が注目されるようになってきた。
【０００３】
従来の技術として、アルゴリズム記述とＲＴレベル記述の中間レベルでのシミュレーションを可能にする言語を提供するものがある（特開２００１−１０９７８８号公報に開示）。図１６は従来の論理シミュレーションシステムであって、アルゴリズム記述１０３をクロックレベル記述に低位化し、アルゴリズム記述１０３の複数機能を１クロック中で動作可能な部分機能に分解し、その複数機能を動作させるために、その部分機能を組み立てる。複数機能は、クロックレベル記述であるクロックレベルシミュレータ１０８として、レジスタを変数とする言語によって表現されている。
【０００４】
図１６に示すように、アルゴリズムレベル検証部１０２とＲＴレベル検証部１１５との間に、新たにクロックレベル検証部１０６が設けられている。クロックレベル検証部１０６はクロックレベルシステム１０７を備え、クロックレベルシステム１０７は、クロックレベル記述であるクロックレベルシミュレーションモデル１０８とクロックレベルＣＰＵモデル１０９とを備えている。クロックレベルシステム１０７は、組込用Ｃコンパイラ１１１により自動生成されて記述変換され、その記述変換には、慣用の機能合成ツール１１２が持つツールであるレジスタが用語（単語または一次変数）として用いられる。アルゴリズム記述１０３は、機能合成ツール１１２で記述されるツールを持つモデル変換ツール１１３によってクロックレベルシミュレーションモデル１０８に記述変換される。クロックレベルＣＰＵモデル１０９は、組込用Ｃコンパイラ１１１によりＣ−プログラム１０４から自動生成される。クロックベースシミュレータ１１４は、クロックレベルシミュレーションモデル１０８とクロックレベルＣＰＵモデル１０９とから形成されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
近年は、動作合成ツールなどの中で、直接ＨＤＬのＲＴレベル記述に変換できるものが提供され始めている。ところが、このようなツールで設計された回路は、ＲＴレベル記述で直接設計されたものと比べて、回路規模が格段に大きくなるだけでなく、回路の品質も低くなる。また、回路構成を自由に制御できないので、設計者が意図する回路を得ることが非常に困難であり、設計された回路を読み取ることも非常に困難である。
【０００６】
また、上述した従来の技術では、ハードウェアの３大構成要素である、データパス、制御およびクロックの全てを考慮したモデルを生成するため、クロックレベルシミュレータを用いた論理検証は、ＲＴレベルでの検証よりも高速になるだけであって、検証の複雑度は変わらない。また、クロック単位で処理可能な機能に分解するので、抽象度を落とした記述となり、結局はＲＴレベルと同等の記述になってしまう。これでは、これまでのＲＴレベルでの設計における、仕様変更への対応の困難さや、ハードウェアアーキテクチャ検討の複雑さなどは解消されず、ＲＴレベル設計と同等の詳細な設計・検証が必要となる。
【０００７】
さらに具体的には、クロック単位の動作を行わせるので、ハードウェアを意識した記述になっている。例えば、クロックのみならず、リセットまでも含めたレベルでのクロックレベル検証となっている。リセットは、ハードウェアの初期状態を決定するためには必要であるが、ハードウェアアーキテクチャの検討や機能検証の段階では必要ない。むしろ、基本となるハードウェアの処理単位や機能ブロック、および制御単位などを明確にすることが重要である。
【０００８】
また、クロック動作を考慮したハードウェアアーキテクチャ検討およびハードウェア機能設計・検証は、演算機能、制御機能およびタイミング機能の３つを同時に検討することに他ならず、考え方が複雑になってしまう。つまり、ハードウェアアーキテクチャ検討および機能設計時には、クロックおよびリセットは不要であり、むしろ検討を複雑にする原因になる。これでは、Ｃ言語という抽象度が高いレベルでの設計の利点を生かすことができない。
【０００９】
また、上述した従来技術のクロックレベルシミュレーションモデル１０８は、ＣＤＦＧ（コントロール・データ・フロー・グラフ）等を用いて、クロック単位で処理を分解して細かな制御記述を書く必要がある。このため、サイクル動作のハードウェアが想像できないと設計が極めて困難である。
【００１０】
また、このクロックレベルシミュレーションモデル１０８の記述では、１つのcase文が１クロックに相当し、クロックを模擬するように、case毎にその関数をbreak するので、その関数の処理を終了するためには、サイクル単位で何度も関数を呼び出す必要がある。これは、シミュレーション速度を低下させる大きな要因となる。さらに、１状態遷移は１関数とする必要もある。
【００１１】
前記の問題に鑑み、本発明は、論理回路設計において、純粋なＣ言語で書かれたアルゴリズム記述から、品質の良いハードウェアを、短期間に効率よく設計可能にすることを課題とする。
【課題を解決するための手段】
【００１２】
前記の課題を解決するために、請求項１〜１２の発明が講じた解決手段は、状態分割手段と、クロック挿入手段と、変換ツールとを有する論理回路設計システムを用いた論理回路設計方法として、前記状態分割手段が、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、前記クロック挿入手段が、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップと、前記変換ツールが、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップとを備えたものである。
【００１３】
これによると、ＡＮＳＩ−ＣやＣ＋＋に代表される既存の純粋なＣ言語によって書かれたアルゴリズムＣ記述を基にして、論理回路のハードウェアを容易に設計することができる。また、機能Ｃ記述は、アルゴリズムＣ記述を、クロックサイクルにとらわれない処理単位で複数の状態に分割することによって生成されるので、１つの状態が複数サイクルで実行されるように表現することが可能である。このため、より抽象度が高いレベルでハードウェアアーキテクチャを検討するための記述スタイルとして適している。したがって、従来よりも抽象度が高いレベルで、ハードウェアアーキテクチャを検討することができる。
【００１４】
そして、請求項１の発明では、前記論理回路設計方法における機能Ｃ変換ステップは、前記アルゴリズムＣ記述を、少なくとも１つのアイドル状態または初期化状態を含む複数の状態に、分割するものとする。
【００１５】
請求項１によると、ＲＴＬＣ変換ステップにおいてクロック記述を挿入したときでも、動作しない場合は常にアイドル状態になる。このため、ステートマシーンに時間概念を加える際にサイクル調整の必要がなく、まさにクロック記述を挿入するのみですむ。
【００１６】
また、請求項２の発明では、前記論理回路設計方法における機能Ｃ変換ステップは、前記アルゴリズムＣ記述を、少なくとも、データ入力処理に対応するデータ入力状態、演算処理に対応する演算状態、およびデータ出力処理に対応する結果出力状態に、分割するものとする。
【００１７】
請求項２によると、機能Ｃ記述への変換スタイルを統一することが可能になる。また、データ入力状態および結果出力状態がステートマシーン外部またはモジュール外部とのデータの入出力を行う状態として表現できるので、ＲＴＬＣ変換ステップにおいてクロック記述を挿入する際に、機能間データの受け渡し時におけるクロックサイクルのタイミング調整が容易になる。
【００１８】
また、請求項３の発明では、前記論理回路設計方法は、前記機能Ｃ記述を用いて、ハードウェアの機能について、クロックを除き、そのデータパスと制御のみを検証する機能検証ステップを備え、前記機能検証ステップにおいて前記ハードウェア機能が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップに移行するものとする。
【００１９】
請求項３によると、設計の早い段階で、ハードウェアの構成要素であるデータパスと制御を確定できる。また、機能Ｃ記述にはクロックの概念が存在しないため、高速な機能検証が可能であり、かつ、検証が容易となる。また、設計変更時の修正も容易である。このため、設計期間を大幅に短縮できるという効果が得られる。さらには、状態毎にクロック計測関数を挿入することによって、各状態の実行サイクルを細かく見積もることが可能であるので、処理性能を高い精度で見積もることができる。すなわち、通常ハードウェアと並行して作成しているＣ言語による機能モデル（シミュレーションモデル）をこの機能Ｃ記述で代用することが可能となるため、２重開発をも防ぐことができる。
【００２０】
また、請求項４の発明では、前記論理回路設計方法は、前記クロック挿入手段が、前記ＲＴレベルＣ記述を用いて、ハードウェアのクロックサイクルタイミング動作を検証する動作検証ステップを備え、前記動作検証ステップにおいてクロックサイクルタイミング動作が正しいと確認されたとき、前記ＨＤＬ変換ステップに移行するものとする。
【００２１】
請求項４によると、ＲＴＬＣ記述が生成された段階において、クロックサイクルタイミングに関する問題に着目して、動作を検証することができる。これにより、検証が容易となり、検証効率が向上し、デバッグ効率が向上する。この結果、設計期間を短縮することができる。
【００２２】
また、請求項５の発明では、前記論理回路設計方法における機能Ｃ変換ステップは、状態遷移表現をswitch文で記述するものとし、分割した処理単位を多分岐表現によってそれぞれ記述し、実行順序をcase内に遷移先を明記することによって表現し、かつ、１個のステートマシーンをループ表現を用いて閉じるように記述するものとする。
【００２３】
請求項５によると、既存のＣ言語のままで、アルゴリズム動作を変えることなく、ステートマシーンを記述できる。すなわち、特別な専用言語を用いることなく、状態遷移表現を挿入して、ステートマシーン内の演算処理動作を正しく実行することができる。さらに、サイクル毎に状態遷移を抜けることがないため、一の状態遷移を１個の関数に割り当てる必要がなく、また、サイクル毎に関数を呼び出す必要がないため、シミュレーションを高速に実行することができる。これは言い換えると、Ｃ言語において、ハードウェアの構成要素である「制御」を演算処理内に明示的に埋め込むことが可能であるということであり、機能Ｃ記述において、ハードウェアの演算部と制御部を記述することができる。これにより、早期にハードウェアアーキテクチャを検討できるだけでなく、機能検証を高速に実施することが可能となる。
【００２４】
そして、請求項６の発明では、前記請求項５の論理回路設計方法における機能Ｃ変換ステップは、１個の状態内で複数の処理を並列に実行させるとき、その複数のステートマシーンをループ表現を用いてそれぞれ閉じるように記述するものとする。
【００２５】
請求項６によると、Ｃ言語によるアルゴリズムＣ記述において、Ｃ言語の高速シミュレーションの特徴を保ったまま、かつ動作も変更することなく並列動作を容易に記述できる。これは、ハードウェアアーキテクチャ検討時に並列動作まで考慮して記述できることであり、早期段階におけるハードウェア検討の自由度が高まり、かつ高度な制御方法を記述することができる。これにより、さらに、ＲＴＬＣ記述に変換する際も、簡単に並列動作記述に変更可能となる。
【００２６】
また、請求項７の発明では、前記論理回路設計方法は、前記機能Ｃ変換ステップの前処理として、前記状態分割手段が、前記アルゴリズムＣ記述をハードウェア機能に着目してモジュール毎に記述し直し、モジュール毎のアルゴリズムＣ記述を生成するモジュール分割ステップを備えたものとする。
【００２７】
請求項７によると、抽象度の高い段階で、ハードウェアアーキテクチャを検討することが可能となり、ハードウェア特有の機能を意図的に分離することが可能となる。これにより、演算処理機能と蓄積機能などを容易に分離することが可能となり、次段の機能Ｃ変換ステップの設計が容易となるほか、ＲＴレベルＣ記述の設計も容易となる。また、部分的に変更がなされた場合でも、各機能単位に対応することが容易となる。
【００２８】
そして、請求項８の発明では、前記請求項７の論理回路設計方法におけるモジュール分割ステップは、前記アルゴリズムＣ記述を、少なくともメモリ部と演算処理部とに分割するものとする。
【００２９】
請求項８によると、ＨＤＬのＲＴＬコードを生成する際に、メモリライブラリとの置き換えを容易に行うことができ、早い段階からハードウェアアーキテクチャを考慮した設計を行うことができる。このため、回路規模が大きくなることを未然に防ぎ、ＨＤＬによって設計したときと同様に、メモリを考慮した設計が行える他、使用するメモリの変更などが容易となる。また、演算処理部のみを機能Ｃ記述またはＲＴレベルＣ記述に変更して設計およびシミュレーションすることが可能となるので、設計容易性およびシミュレーション速度が向上する。
【００３０】
そして、請求項９の発明では、前記請求項７の論理回路設計方法におけるモジュール分割ステップは、前記アルゴリズムＣ記述について、ハードウェアのソフトマクロまたはハードマクロに対応した演算器を別モジュールとして分割するものとする。
【００３１】
請求項９によると、ＨＤＬのＲＴＬコードを生成する際に、乗算器マクロのようなマクロライブラリと容易に置き換えることが可能になり、早い段階からハードウェアアーキテクチャを考慮した設計を行うことができる。そして、自動合成などを使用した際の回路規模増大を未然にかつ明示的に防止することができる。また、乗算器マクロやメモリ部を除いた演算処理部のみを機能Ｃ記述またはＲＴレベルＣ記述に変更して設計およびシミュレーションすることが可能となるので、設計容易性およびシミュレーション速度が向上する。
【００３２】
そして、請求項１０の発明では、前記請求項７の論理回路設計方法におけるモジュール分割ステップは、前記アルゴリズムＣ記述について、演算処理のためのパラメータ設定レジスタ部を別モジュールとして分割するものとする。
【００３３】
請求項１０によると、レジスタ数変更の場合など、演算処理部などのコードに変更を加えることなく、部分的に変更することができる。また、機能検証時の不具合解析時に所望の変数名を大きなコードから探し出す必要がなくなるので、デバッグが容易となる。さらに、ハードウェアにしたときに、レジスタ部をメモリに置き換えることも容易に可能である。
【００３４】
また、請求項１１の発明は、前記論理回路設計方法におけるＲＴレベルＣ変換ステップは、前記機能Ｃ記述から、制御を表す状態遷移記述と、データパスを表す演算処理記述とを、抜き出し、抜き出した前記状態遷移記述および演算処理記述のそれぞれに、時間の概念であるクロック記述を挿入するものとする。
【００３５】
請求項１１によると、ＨＤＬのＲＴレベルを記述するのと同様に、コードの可読性が向上し、検証時の不具合解析時のデバッグ性が向上する。
【００３６】
また、請求項１２の発明では、前記論理回路設計方法におけるＲＴレベルＣ変換ステップは、ＳｙｓｔｅｍＣまたはＳｐｅｃＣの文法を適用してＲＴレベルＣ記述を生成するものとする。
【００３７】
請求項１２によると、設計言語に依存せずに、ハードウェア機能を検証した後で、設計言語を決定できる。これにより、設計言語やシミュレーションツール、および動作合成ツールなどが開発当初に決定しなくとも、設計を開始することが可能になる。したがって、開発効率を大幅に向上させ、開発期間を短縮することができる。
【００３８】
請求項１３〜２４の発明が講じた解決手段は、コンピュータに、論理回路の演算または制御のアルゴリズムをＣ言語によって記述したアルゴリズムＣ記述を、機能を基準とした処理単位毎の状態に記述し直し、処理の実行順序を状態の遷移として記述することによって、ハードウェアの制御を記述した機能Ｃ記述に変換する機能Ｃ変換ステップと、前記機能Ｃ変換ステップによって生成された機能Ｃ記述に、時間の概念であるクロック記述を挿入して、レジスタ・トランスファ（ＲＴ）レベルＣ記述に変換するＲＴレベルＣ変換ステップとを実行させるプログラムである。
【００３９】
そして、請求項１３の発明は、前記プログラムにおける機能Ｃ変換ステップは、前記アルゴリズムＣ記述を、少なくとも１つのアイドル状態または初期化状態を含む複数の状態の記述に、分割するものとする。
【００４０】
また、請求項１４の発明は、前記プログラムにおける機能Ｃ変換ステップは、前記アルゴリズムＣ記述を、少なくとも、データ入力処理に対応するデータ入力状態の記述、演算処理に対応する演算状態の記述、およびデータ出力処理に対応する結果出力状態の記述に、分割するものとする。
【００４１】
また、請求項１５の発明は、前記プログラムにおいて、前記機能Ｃ記述を用いて、ハードウェアの機能について、クロックを除き、そのデータパスと制御のみを検証する機能検証ステップを実行させるものとし、前記機能検証ステップにおいて、前記ハードウェア機能が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップに移行するものとする。
【００４２】
また、請求項１６の発明は、前記プログラムにおいて、前記ＲＴレベルＣ記述を用いて、ハードウェアのクロックサイクルタイミング動作を検証する動作検証ステップを実行させるものとし、前記動作検証ステップにおいて、クロックサイクルタイミング動作が正しいと確認されたとき、前記ＲＴレベルＣ変換ステップによって生成されたＲＴレベルＣ記述を、ＨＤＬによるＲＴレベル記述に変換するＨＤＬ変換ステップに移行するものとする。
【００４３】
また、請求項１７の発明は、前記プログラムにおける機能Ｃ変換ステップは、状態遷移表現をswitch文で記述するものであり、処理単位を多分岐表現によってそれぞれ記述し、実行順序をcase内に遷移先を明記することによって表現し、かつ１個のステートマシーンをループ表現を用いて閉じるように記述するものとする。
【００４４】
そして、請求項１８の発明は、前記請求項１７のプログラムにおける機能Ｃ変換ステップは、１個の状態内で複数の処理を並列に実行させるとき、その複数のステートマシーンを、ループ表現を用いてそれぞれ閉じるように、記述するものとする。
【００４５】
また、請求項１９の発明は、前記プログラムにおいて、前記機能Ｃ変換ステップの前処理として、前記アルゴリズムＣ記述を、ハードウェア機能に着目してモジュール毎に記述し直し、モジュール毎のアルゴリズムＣ記述を生成するモジュール分割ステップを実行させるものとする。
【００４６】
そして、請求項２０の発明は、前記請求項１９のプログラムにおけるモジュール分割ステップは、前記アルゴリズムＣ記述を少なくともメモリ部と演算処理部とに分割するものとする。
【００４７】
また、請求項２１の発明は、前記請求項１９のプログラムにおけるモジュール分割ステップは、前記アルゴリズムＣ記述について、ハードウェアのソフトマクロまたはハードマクロに対応した演算器を別モジュールとして分割するものとする。
【００４８】
また、請求項２２の発明は、前記請求項１９のプログラムにおけるモジュール分割ステップは、前記アルゴリズムＣ記述について、演算処理のためのパラメータ設定レジスタ部を別モジュールとして分割するものとする。
【００４９】
また、請求項２３の発明は、前記プログラムにおけるＲＴレベルＣ変換ステップは、前記機能Ｃ記述から、制御を表す状態遷移記述と、データパスを表す演算処理記述とを、抜き出し、抜き出した前記状態遷移記述および演算処理記述のそれぞれに、時間の概念であるクロック記述を挿入するものとする。
【００５０】
また、請求項２４の発明は、前記プログラムにおけるＲＴレベルＣ変換ステップは、ＳｙｓｔｅｍＣまたはＳｐｅｃＣの文法を適用して、ＲＴレベルＣ記述を生成するものとする。
【００５１】
また、請求項２５の発明は、前記請求項１３〜２４のうちいずれか１項のプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【発明の効果】
【００５２】
以上のように本発明によると、既存の純粋なＣ言語によって書かれたアルゴリズムＣ記述を基にして、論理回路のハードウェアを容易に設計することができる。また、機能Ｃ記述は、１つの状態が複数サイクルで実行されるように表現することが可能なので、より抽象度が高いレベルでハードウェアアーキテクチャを検討するための記述スタイルとして適している。したがって、従来よりも抽象度が高いレベルで、ハードウェアアーキテクチャを検討することができる。
【００５３】
また本発明は、ＤＡ（Design Automation ）ツールとしての実現が容易である。これにより、設計期間の更なる短縮を実現することができる。
【発明を実施するための最良の形態】
【００５４】
以下、本発明の実施の形態について、図面を参照して説明する。
【００５５】
（第１の実施形態）
図１は本発明の第１の実施形態に係る論理回路設計システムであって、Ｃ言語記述からのハードウェアトップダウン設計システムの構成を示す図である。図１において、１は設計対象システムとなる論理回路の演算または制御のアルゴリズムがＣ言語によって記述されたアルゴリズムＣ記述、２はハードウェアの制御を記述した機能Ｃ記述、３はレジスタ・トランスファ（ＲＴ）レベルのＣ言語記述であるＲＴレベルＣ記述である。アルゴリズムＣ記述１は、ＡＮＳＩ−ＣやＣ＋＋に代表される既存のＣ言語によって記述されている。
【００５６】
１０はアルゴリズム検証システムであり、アルゴリズムＣ記述１をＣコンパイラ１１によってコンパイルすることによって、アルゴリズムＣシミュレータ１２を生成する。２０はアルゴリズムＣ記述１を機能Ｃ記述２に変換する機能Ｃ変換システムであり、状態分割手段２１を備えている。３０は機能検証システムであり、機能Ｃ記述２をＣコンパイラ３１によってコンパイルすることによって、機能Ｃシミュレータ３２を生成する。４０は機能Ｃ記述２をＲＴレベルＣ記述３に変換するＲＴレベルＣ変換システムであり、クロック挿入手段４１を備えている。５０はタイミング検証システムであり、ＲＴレベルＣ記述３を、クロック記述を許容するライブラリ４とともにＣコンパイラ５１によってコンパイルすることによって、サイクルベースＣシミュレータ５２を生成する。
【００５７】
６０はＣ言語の文法をＨＤＬ記述に変換する既存の変換ツールであって、ＲＴレベルＣ記述３をＨＤＬによるＲＴレベル記述としてのＶerilog−ＨＤＬ５に変換する。
【００５８】
図２は本実施形態に係る論理回路設計方法を示す処理フローである。図２において、Ｓ１はアルゴリズム検証システム１０において、アルゴリズムＣシミュレータ１２を用いてアルゴリズムを検証するアルゴリズム検証ステップ、Ｓ２はアルゴリズム検証ステップＳ１においてアルゴリズムが確定した後、機能Ｃ変換システム２０において、アルゴリズムＣ記述１のモジュール内の記述を機能処理単位で状態分割し、機能Ｃ記述２に変換する機能Ｃ変換ステップである。Ｓ３は機能Ｃ変換ステップＳ２において変換した機能Ｃ記述３について、機能Ｃシミュレータ３２を用いて、ハードウェアの機能を検証する機能検証ステップ、Ｓ４は機能検証ステップＳ３において機能が確定した後、機能Ｃ記述３に対してクロック記述を挿入し、ＲＴレベルＣ記述３に変換するＲＴレベルＣ変換ステップである。Ｓ５はサイクルベースＣシミュレータ５２を用いてＲＴレベルＣ記述３の動作をクロックサイクルのタイミングに着目して検証する動作検証ステップ、Ｓ６は動作検証ステップＳ５においてクロックタイミングでの動作が確認された後、変換ツール６０を用いてＲＴレベルＣ記述３をＶerilog−ＨＤＬ５に変換するＨＤＬ変換ステップである。
【００５９】
以下、本実施形態に係る論理回路設計方法について、図１〜図５を参照して説明する。
【００６０】
まずアルゴリズム検証ステップＳ１では、アルゴリズム検証システム１０において、アルゴリズムＣ記述１は、ｃｃやｇｃｃといったＣコンパイラ１１によってコンパイルされ、アルゴリズムを検証するためのアルゴリズムＣシミュレータ１２になる。そして、このアルゴリズムＣシミュレータ１２を用いて、演算処理（データパス）のみを検証する。またこれとともに、アルゴリズムが確定したか否かを判断する。そして、アルゴリズムが確定するまで、アルゴリズムＣ記述１の修正とその検証が繰り返される。
【００６１】
アルゴリズム検証ステップＳ１でアルゴリズムが確定した後、次に、機能Ｃ変換ステップＳ２において、アルゴリズムＣ記述１を、処理単位毎の状態に記述し直すことによって、機能Ｃ記述２に変換する。例えば、アルゴリズムＣ記述１の各モジュール内の記述を、データ入力処理に対応する初期化状態、演算処理に対応する演算実行状態、およびデータ出力処理に対応する結果出力状態といった処理単位で、状態分割する。また、分割した状態の遷移先や遷移条件、遷移順序を記述する。これにより、ハードウェアの「制御」にあたる記述が、機能Ｃ記述２に埋め込まれることになる。
【００６２】
ここでの変換処理は、例えば、分割したい行にコメント文等によってキーワードを埋め込み、そのキーワードに従ってプログラム変換を行うことによって、実現することができる。
【００６３】
ここでは、ＧＵＩによって状態分割を行う方法を図３を参照して説明する。図３に示すように、ＧＵＩ画面７０上に、変換前のアルゴリズムＣ記述７１を表示させる。利用者は、画面表示上で一塊の処理として認識する部分７２を選択し、選択した部分７２について、「State Name」７３に状態名を指定し、「Order 」７４にその処理の実行順序を指定する。さらに「End Condition 」７５には、その状態を抜ける条件を入力する。このように指定すると、状態分割手段２１によるプログラム変換によって、変換後の機能Ｃ記述７６が作成される。
【００６４】
図４は状態分割の一例を示す図であり、同図中、（ａ）は状態分割前のアルゴリズムＣ記述の例、（ｂ）は（ａ）のアルゴリズムＣ記述に対して状態分割を実行した後の機能Ｃ記述である。図４（ａ）に示すアルゴリズムＣ記述では、テキストＡは初期化およびアイドル状態、テキストＢは演算実行状態、そしてテキストＣは結果出力状態であると判断できる。また、実行順序は次のようになる。すなわち、テキストＡで初期化を行った後、テキストＢに移行し、演算処理を実行する。そしてテキストＢにおいて演算終了条件が整ったとき、テキストＣに移行し、演算結果を出力する。演算結果を出力すると、アイドル状態であるテキストＡに戻る。
【００６５】
このような状態分割と実行順序に従って変換した結果、図４（ｂ）に示すような機能Ｃ記述が得られる。分割した処理単位Ａ，Ｂ，Ｃは、多分岐表現としてのswitch文のcaseによって、それぞれ記述されている。また、その実行順序は、case内において遷移先をstateに代入することによって表現されている。なおここでは多分岐表現として、switch-case文を用いたが、多分岐表現を記述できるものであればこの限りでない。
【００６６】
さらに、この機能Ｃ記述はアルゴリズムＣ記述と同様にＣ言語で記述されているため、このswitch文をループ表現としての“do”“while”文を用いて閉じておく。そして“while”文を抜ける条件としてアイドル状態であるＡを指定する。このように記述することによって、処理の実行時には、処理単位Ａ，Ｂ，Ｃ全ての処理が終わってから再び処理単位Ａに戻った段階で、switch文から抜けることになる。このため、次にこの処理が実行される際も、処理単位Ａの状態から始まる。なおここでは、ループ表現として“do”“while”文を用いてステートマシーンを閉じるものとしたが、while文や、for文など他のループ文を用いても同様に実現できる。“while(1)”を用いて記述する場合は、アイドル状態に戻る前の状態Ｃにおいて“break”文を挿入しておけばよい。
【００６７】
すなわち、処理が終了した時点でこの状態遷移から抜ける、というアルゴリズムと等価な動作が表現でき、かつ、ハードウェアの「制御」を明示する記述が埋め込まれた機能Ｃ記述が完成する。
【００６８】
ここで、アイドル状態を備えることによる作用効果について、説明する。
【００６９】
クロックを挿入した際、回路は常に動作することになるが、ステートマシーンが常にアイドル状態に戻るようにしておけば、状態遷移の条件が整わない限り、アイドル状態を維持する。アイドル状態がない場合、クロックを挿入すると、それぞれの機能が動作しない場合の制御を新たに加える等の処理が必要になり、ＲＴレベルＣ変換ステップＳ４においてのタイミング設計を複雑にしてしまう。
【００７０】
したがって、クロックが存在しない機能Ｃ記述の作成時においてアイドル状態を明示することによって、クロックを挿入しても機能が正しく動作しないような事態を防ぐことができる。また、アイドル状態を備えたとしても、機能Ｃ記述の段階での動作に影響はない。すなわち、このアイドル状態、もしくは初期化状態を持つことによって、クロックを挿入するだけでＲＴレベルＣ記述へ容易に変換することができる。
【００７１】
機能Ｃ変換ステップＳ２において機能Ｃ記述２が生成されると、次に、機能検証ステップＳ３に移行し、機能Ｃ検証システム３０において、Ｃコンパイラ３１によってコンパイルされた機能Ｃシミュレータ３２を用いて、ハードウェアの機能について検証を行う。ここでは、演算機能が、ハードウェアに最適な制御に従って実現できているか否かを検証する。もし不具合や仕様変更がある場合は、機能Ｃ変換ステップＳ２における状態分割を修正する。
【００７２】
このとき、機能Ｃ記述２には、時間の概念であるクロックは反映されていない。このため、ハードウェアの三大構成要素のうち、クロックを除き、データパスと制御のみを考慮して機能検証を行う。ここで、ハードウェアの「データパス」とは、演算処理に相当し、「制御」とは、switch文で記述されたステートマシーンに相当する。時間の概念であるクロックを考慮しないことによって、検証の複雑化を防止することができる。
【００７３】
機能検証ステップＳ３においてハードウェアの機能が確定したと判断されると、ＲＴレベルＣ変換ステップＳ４に移行し、ＲＴレベルＣ変換システム４０が有するクロック挿入手段４１によって、機能Ｃ記述２に対して、時間の概念であるクロック記述を挿入し、ＲＴレベルＣ記述３を生成する。このクロック記述挿入は例えば、変換プログラムによって実行される。
【００７４】
図５はＲＴレベルＣ記述３の一例であり、ハード・ソフト協調設計ツールＮ２Ｃ用のCoWareＣに適用した場合の記述例である。図５では、ステートマシーン全体がクロックで動作するように“thread rise(clk)”文を挿入している。また、機能Ｃ記述２において見積もった実行時間を参考にして、状態を細かく分割するなどの処理を行う。例えば図４（ｂ）では、ＥＸＥＣ状態に、「２サイクル必要」という意味のコメント“//2Cycle”が挿入されている。このコメントを受けて、ＥＸＥＣ状態を例えばＥＸＥＣとＥＸＥＣ１とに分割する。このとき、switch文を利用する代わりに、“if”文で記述してもよい。さらに、ポートは、ポートプロトコルに従って、データやイネーブルなどの複数信号に変換する。これらの変換は、プログラムにより自動化可能である。
【００７５】
ＲＴレベルＣ変換ステップＳ４においてＲＴレベルＣ記述３が作成されると、動作検証ステップＳ５において、クロックサイクル精度でハードウェアの動作タイミングの検証を行う。データパスおよび制御に関しては、上述の機能検証ステップＳ３においてすでに検証済みであるので、ここでは、タイミング動作のみを検証する。
【００７６】
動作検証ステップＳ５において、タイミング動作が確認されると、ＨＤＬ変換ステップＳ６において、変換ツール６０を用いて、ＲＴレベルＣ記述３をＶerilog−ＨＤＬ５に変換する。
【００７７】
以上のように本実施形態によると、アルゴリズムＣ記述１と同一レベルで記述を変更することによって、機能Ｃ記述２を作成できるので、ＡＮＳＩ−ＣやＣ＋＋に代表される既存の純粋なＣ言語によって書かれた記述を基にして、論理回路のハードウェアを容易に設計することができる。
【００７８】
また、機能Ｃ記述２は、クロックサイクルにとらわれない処理単位に着目して状態が分割されているので、１つの状態が複数サイクルで実行されるように表現することができる。このため、従来よりも抽象度がより高いレベルで、ハードウェアアーキテクチャおよびハードウェア制御方法を検討することができる。
【００７９】
さらに、機能Ｃ記述２について、初期化状態、演算状態および結果出力状態を基本として状態分割したので、変換スタイルを統一することが可能である。またこれにより、初期化部および結果出力部がステートマシーン外部またはモジュール外部とのデータの入出力を行う状態として表現できるので、ＲＴレベルＣ変換ステップＳ４においてクロック記述を挿入する際にも、機能間データの受け渡し時におけるクロックサイクルのタイミング調整が容易になる。
【００８０】
加えて、機能検証ステップＳ３により、ハードウェアのデータパスと制御のみを検証し、クロックタイミングを除いた機能を早期に確定させるようにしたので、設計の早い段階で、ハードウェアの構成要素であるデータパスと制御を確定できる。さらに、クロックの概念が存在しないため、高速な機能検証が可能であり、かつ、検証および設計変更時の修正も容易である。これにより、設計期間を大幅に短縮できるという効果が得られる。
【００８１】
さらに、状態毎にクロック計測関数を挿入することによって、各状態の実行サイクルを細かく見積もることが可能であるので、処理性能を高い精度で見積もることができる。すなわち、通常ハードウェアと並行して作成しているＣ言語による機能モデル（シミュレーションモデル）を、この機能Ｃ記述２によって代用することが可能となるため、２重開発をも防ぐことができる。
【００８２】
また、クロックサイクルタイミング検証を最後に行うので、この段階で、サイクルタイミングに関する問題に着目して検証を行うことができ、検証が容易となる。このことは、検証効率を向上させ、デバッグ効率が向上させる。この結果、設計期間を短縮することができる。
【００８３】
さらに、１つの状態遷移は１つの“do”“while”文で完結するようにしたので、ＡＮＳＩ−ＣまたはＣ＋＋等の言語そのままで、アルゴリズム動作を変えることなく、ステートマシーンを記述できる。これにより、特別な専用言語を用いることなく、状態遷移表現を挿入しても、ステートマシーン内の演算処理動作を正しく実行することができる。
【００８４】
さらには、サイクル毎に状態遷移を抜ける（breakする）ことがないため、１状態遷移を１関数に割り当てる必要もなく、また、サイクル毎に関数を呼び出す必要がないため、高速にシミュレーションを実行することができる。これは、Ｃ言語において、ハードウェアの構成要素である「制御」を演算処理内に明示的に埋め込むことが可能ということであり、機能Ｃ記述２において、特別な言語を用いることなく、ハードウェアの演算部と制御部を記述できるということである。これにより、早期にハードウェアアーキテクチャを検討できるほか、高速に機能検証を実施することが可能となる。
【００８５】
加えて、機能Ｃ変換ステップＳ２において、並列動作を表現する場合について説明する。
【００８６】
図６は並列動作を表現する場合の記述例である。例えば１つの状態内で複数の処理を並列に実行させたいと考えたとする。この場合、図６（ａ−１）に示す機能Ｃ記述２のように、各処理に対応するコメント（例えば“//parallel”）によって、並列処理を明示する方法が考えられる（破線囲み部分）。図６（ａ−２）は図６（ａ−１）の機能Ｃ記述２をＲＴレベルＣに変換した際の記述例である。図６（ａ−２）に示すように、機能Ｃ記述２のとおり、同一状態“S0==2”において２つの処理が動作するように変換すればよい。
【００８７】
しかし、各処理単位が、状態遷移を持つ必要がある場合が考えられる。この場合は図６（ｂ−１）に示すように、それぞれのステートマシーンを“do”“while ”文を用いてそれぞれ閉じるように、記述する（破線囲み部分）。図６（ｂ−２）は図６（ｂ−１）の機能Ｃ記述２をＲＴレベルＣに変換した際の記述例である。図６（ｂ−２）に示すように、２個のステートマシーンは、機能Ｃ記述２のとおり、同一状態“S0==2”で動作するように条件文を挿入して変換すればよい。
【００８８】
このように、機能Ｃ変換ステップＳ２において、処理の並列性を明示できるので、機能Ｃ記述２において、特別なシミュレータを必要とせずに並列動作を記述でき、かつ高速にシミュレーション可能である。また、ハードウェアの制御にあたる部分と並列性の両方を明示することができるので、ＲＴレベルＣ記述に変換する際も、並列記述への変換が容易となる。
【００８９】
（第２の実施形態）
図７は本発明の第２の実施形態に係る論理回路設計システムであって、Ｃ言語記述からのハードウェアトップダウン設計システムの構成を示す図である。図７では、図１と共通の構成要素には図１と同一の符号を付している。図７において、２２は機能Ｃ変換システム２０Ａが有するモジュール分割手段であり、アルゴリズムＣ記述１に対し、ハードウェア機能に着目してモジュール毎に記述し直し、モジュール分割を行う。４２はＲＴレベルＣ変換システム４０Ａが有する制御・データパス分離手段であり、機能Ｃ記述２から、「制御」を表す状態遷移記述と「データパス」を表す演算記述とを分離する。
【００９０】
図８は本実施形態に係る論理回路設計方法を示す処理フローである。図８では、図２と共通の処理ステップには図２と同一の符号を付している。図８において、Ｓ７はアルゴリズムＣ記述１がハードウェア機能に着目してモジュール分割できるか否かを判断するモジュール分割判断ステップであり、Ｓ８はアルゴリズムＣ記述１について、ハードウェア特有の機能であるメモリやハードマクロなどを別モジュールとして分割するモジュール分割ステップである。Ｓ９は制御・データパス分離ステップであり、機能Ｃ記述２から、制御を表しているステートマシーンの“switch”文記述と、“switch”文の“case”文内の演算処理記述とを分離する。
【００９１】
以下、本実施形態に係る論理回路設計方法について、図７〜図１１を参照して説明する。
【００９２】
まずアルゴリズム検証ステップＳ１では、第１の実施形態と同様に、アルゴリズム検証システム１０において、アルゴリズムＣ記述１がＣコンパイラ１１によってコンパイルされ、アルゴリズムを検証するためのアルゴリズムＣシミュレータ１２になる。そして、このアルゴリズムＣシミュレータ１２を用いて、演算処理（データパス）のみを検証する。またこれとともに、アルゴリズムが確定したか否かを判断する。そして、アルゴリズムが確定するまで、アルゴリズムＣ記述１の修正とその検証が繰り返される。
【００９３】
アルゴリズム検証ステップＳ１でアルゴリズムが確定した後、次に、モジュール分割判断ステップＳ７において、モジュール分割手段２２によって、アルゴリズムＣ記述１について、そのハードウェア機能に着目して、モジュールに分割できるか否かを判断する。アルゴリズムＣ記述１に、例えば、配列のようなメモリに相当する記述があるとき、または、乗算器のハードウェアマクロの使用を想定している場合は乗算部分の記述があるとき、これらの記述を別モジュールとして分割する。この処理は、変換プログラム等を用いて、配列およびハードマクロを認識することによって実現することができる。あるいは、例えばコードをＧＵＩ等で表示しておき、演算処理単位で切り貼りすることによって、記述の分割を行うことも可能である。
【００９４】
ここでは、ＧＵＩによってモジュール分割を行う方法を図９を参照して説明する。図９に示すように、ＧＵＩ画面８０上にファイルをオープンし、変換前のアルゴリズムＣ記述８１を表示させる。利用者は、画面表示上で、メモリに相当する配列への代入文や乗算部分、または複数のパラメータ設定レジスタ部をモジュール分割部分８２として選択していき、それぞれについて「Module Name 」８３にモジュール名を指定する。このように指定すると、モジュール分割手段２２によるプログラム変換によって、変換後の分割Ｃ記述が作成され、分割Ｃ記述表示欄８４に分割後の個別モジュールがそれぞれ表示される。
【００９５】
図１０はモジュール分割の一例を示す図である。同図中、（ａ）は元のアルゴリズムＣ記述、（ｂ）はモジュール分割後のアルゴリズムＣ記述である。図１０（ａ）において、配列にデータを入力している部分Ａがハードウェアのメモリ部となり、パラメータに代入している部分Ｂ１，Ｂ２がレジスタ部となる。また、関数を呼び出している部分Ｃが演算実行部となる。部分Ａ、部分Ｂ１，Ｂ２および部分Ｃはそれぞれ、図１０（ｂ）のようにモジュール分割される。分割したモジュール内にハードウェア機能特有の記述が存在しなくなると、機能Ｃ変換ステップＳ２に移行する。
【００９６】
機能Ｃ変換ステップＳ２では、ハードウェア特有の機能を持ったモジュールは、基本的には、機能Ｃ記述への変換を行わない。信号線の制御を含む場合等は、ＲＴレベルＣ記述に変換する際に、論理回路にあたる部分のみを具体化する。これ以外の部分については、第１の実施形態と同様にして、モジュール内の状態分割および状態遷移の明示を行い、機能Ｃ記述２に変換する。ここでは、演算実行部にあたるモジュールを状態分割し、機能Ｃ記述２とする。
【００９７】
図１１は機能Ｃ記述２への変換の一例を示す図である。同図中、（ａ）はアルゴリズムＣ記述、（ｂ）は機能Ｃ記述である。Ａは初期化状態、Ｂは演算実行状態、Ｃは結果出力状態である。演算実行状態Ｂはさらに２つの状態に分割してもよく、図１１（ｂ）ではさらに分割した記述例を示している。すなわち図１１（ｂ）では、状態Ｂはさらに、メモリなどからのデータ入力状態と、演算状態とに分割されている。この場合、状態遷移は、Ａ初期化状態（アイドル状態）→Ｂ１データ入力状態→Ｂ２演算実行状態→Ｃ結果出力状態→初期化状態（アイドル状態）となる。
【００９８】
次に機能検証ステップＳ３において、第１の実施形態と同様にハードウェアの制御とデータパスを検証し、ハードウェアの機能を確定する。
【００９９】
次に、制御・データパス分離ステップＳ９において、ＲＴレベルＣ変換システム４０Ａ内の制御・データパス分離手段４２によって、機能Ｃ記述２から、「制御」に相当する状態遷移記述の“switch”文と、“switch”文の“case”文内に書かれた「データパス」にあたる演算処理記述とを分離する。このとき、“For ”文等はカウンタ記述に展開する。その後、ＲＴレベルＣ変換ステップＳ４において、クロック記述を挿入して、ＲＴレベルＣ記述３を生成する。
【０１００】
図１２はハード・ソフト協調設計ツールＮ２Ｃ用のCoWareＣに沿ったＲＴレベルＣ記述の変換例を示す図である。同図中、（ａ）は元のアルゴリズムＣ記述、（ｂ）はＲＴレベルＣ記述である。図１２（ａ）に示すアルゴリズムＣ記述から、制御部分を抽出し、ステートマシーンを形成し、クロック記述を挿入する。また、図１２（ａ）の各状態内の演算処理を、同一パラメータに着目して個別に抜き出し、抜き出した演算処理について、それぞれが存在していた状態のみ動作するように制御信号を加え、それぞれにクロック記述を挿入する。また“For ”文はカウンタ記述として別途展開する。このようにして作成したＲＴレベルＣ記述は、図１２（ｂ）のようになる。図１２（ｂ）の記述は、ＨＤＬのＲＴＬ記述とほぼ同様の構成をしており、ハードウェア設計者にとって可読性が高い。
【０１０１】
次に、動作検証ステップＳ５において、ＲＴレベルＣ変換ステップＳ４において生成したＲＴレベルＣ記述３を用いて、タイミング検証システム５０において、タイミング検証を実施する。そして、タイミング動作に問題がない場合は、ＨＤＬ変換ステップＳ６において、ＲＴレベルＣ記述３をＶerilog−ＨＤＬ５に変換する。
【０１０２】
以上のように本実施形態によると、機能Ｃ変換ステップＳ２の前処理として、アルゴリズムＣ記述１をハードウェア機能に着目して、複数のモジュールに分割するので、抽象度が高い段階でハードウェアアーキテクチャを検討することが可能となり、ハードウェア特有の機能を意図的に分離することが可能となる。これにより、演算処理機能と蓄積機能などを容易に分離することが可能となり、次段の機能Ｃ変換ステップＳ２での分割設計が容易になるとともに、後にハードマクロに置き換えるような，アルゴリズムＣ記述１のままで検証すればよい記述を分離できるので、ＲＴレベルの設計も容易となる。
【０１０３】
また、データ入力状態、演算状態、および結果出力状態を基本として状態分割したので、機能Ｃ記述２への変換スタイルを統一することが可能になる。また、データ入力状態および結果出力状態がステートマシーン外部またはモジュール外部とのデータの入出力を行う状態として表現できるので、ＲＴレベルＣ変換ステップＳ４においてクロック記述を挿入する際に、機能間データの受け渡し時におけるクロックサイクルのタイミング調整が容易になる。
【０１０４】
また、設計の後半で、機能Ｃ記述２から、「制御」を表す状態遷移記述を抜き出し、さらに各状態内に記述されている「データパス」を表す演算処理記述を各変数単位で個別に抜き出し分離して、ＲＴレベルＣを生成するので、ＨＤＬによるＲＴレベル記述と同様に、コードの可読性が向上し、検証時における不具合解析のデバッグ性が向上する。
【０１０５】
さらに、メモリ部と演算処理部とに分割するようにしたので、ＨＤＬのＲＴＬコードを生成する際に、メモリライブラリとの置き換えを容易に行うことができ、早い段階からハードウェアアーキテクチャを考慮した、設計を行うことができる。このため、回路規模が大きくなることを未然に防ぎ、ＨＤＬによって設計したときと同様に、メモリを考慮した設計が行えるだけでなく、使用するメモリの変更等が容易になる。また、演算処理部のみを機能Ｃ記述またはＲＴレベルＣ記述に変更して設計およびシミュレーションすることが可能となるので、設計容易性およびシミュレーション速度が向上する。
【０１０６】
加えて、演算処理のためのパラメータ設定レジスタ部を別モジュールとして分割するようにしたので、レジスタ数変更等の場合において、演算処理部などのコードに変更を加えることなく、部分的に変更することができる。また、機能検証時の不具合解析時に、所望の変数名を大きなコードから探し出す必要がないため、デバッグが容易となる。さらに、ハードウェアにしたときに、レジスタ部をメモリに置き換えることも容易に可能である。
【０１０７】
なおここでは、メモリ部の分割を例にあげたが、例えば、乗算器などの演算器が、ハードウェアにおいてソフトマクロまたはハードウェアマクロとして定義されている場合は、同様に、その演算処理部を別モジュールとして分割しておけばよい。
【０１０８】
（第３の実施形態）
図１３は本発明の第３の実施形態に係る論理回路設計システムであって、Ｃ言語記述からのハードウェアトップダウン設計システムの構成を示す図である。図１３では、図７と共通の構成要素には図７と同一の符号を付している。図１３において、図７におけるＲＴレベルＣ変換システム４０Ａ、タイミング検証システム５０および変換ツール６０に代えて、ＳｙｓｔｅｍＣ変換システム４０Ｂ、ＳｙｓｔｅｍＣ検証システム５０ＡおよびＳｙｓｔｅｍＣ合成ツール７０が、それぞれ設けられている。ＳｙｓｔｅｍＣ変換システム４０Ｂは、制御・データパス分離手段４２およびセンシティブ指定のためのセンシティブ記述挿入手段４３を備えており、機能Ｃ記述２をＳｙｓｔｅｍＣ記述６に変換する。ＳｙｓｔｅｍＣ検証システム５０Ａは、ＳｙｓｔｅｍＣ記述６をＳｙｓｔｅｍＣのライブラリ７を用いてＣコンパイラ５３によってコンパイルし、ＳｙｓｔｅｍＣシミュレータ５４を生成する。ＳｙｓｔｅｍＣ合成ツール７０は例えばＳｙｎｏｐｓｙのＳｙｓｔｅｍＣコンパイラからなり、ＳｙｓｔｅｍＣ記述６をＶerilog−ＨＤＬ５に変換する。
【０１０９】
図１４は本実施形態に係る論理回路設計方法を示す処理フローである。図１４では、図８と共通の処理ステップには図８と同一の符号を付している。図１４において、Ｓ１０はＳｙｓｔｅｍＣ変換システム４０Ｂにおいて、機能Ｃ記述２にセンシティブ記述を挿入してＳｙｓｔｅｍＣ記述６に変換するＳｙｓｔｅｍＣ変換ステップであり、Ｓ１１はＳｙｓｔｅｍＣシミュレータ５４を用いてクロックサイクルのシミュレーションを行うＳｙｓｔｅｍＣ検証ステップである。またＳ１２は既存の合成ツールを用いてＳｙｓｔｅｍＣ記述６をＶerilog−ＨＤＬ５に合成するＨＤＬ変換ステップである。ＳｙｓｔｅｍＣ変換ステップＳ１０は本発明のＲＴレベルＣ変換ステップに相当する。
【０１１０】
以下、本実施形態に係る論理回路設計方法について、図１３〜図１５を参照して説明する。
【０１１１】
第２の実施形態と同様にして、機能Ｃ変換ステップＳ２において機能Ｃ記述２を生成し、機能検証ステップＳ３においてハードウェアの機能を確定させる。そして、制御・データパス分離ステップＳ９において、ＳｙｓｔｅｍＣ変換システム４０Ｂ内の制御・データパス分離手段４２によって、ハードウェアの「制御」に相当する状態遷移を記述した制御記述と、「データパス」に相当する各状態内の演算処理を記述したデータパス記述とを分離する。データパス記述は、各パラメータ毎に個別に記述する。
【０１１２】
次に、ＳｙｓｔｅｍＣ変換ステップＳ１０において、ステップＳ９で分離した制御記述およびデータパス記述に対して、センシティブ記述を付加する。またこれとともに、ＳｙｓｔｅｍＣ文法への変換を行う。この変換は例えば、変換プログラムを用いて行われる。
【０１１３】
図１５はＳｙｓｔｅｍＣ記述６への変換の一例を示す図であり、同図中、（ａ）は元の機能Ｃ記述、（ｂ）はＳｙｓｔｅｍＣに変換した記述である。最後に付加されたセンシティブ記述９１によって、クロック同期で動作する部分か、センシティブリストで組み合わせ回路となるべき記述かが指定される。
【０１１４】
ステップＳ１０においてＳｙｓｔｅｍＣ記述６に変換されると、ＳｙｓｔｅｍＣ検証ステップＳ１１において、ＳｙｓｔｅｍＣ検証システム５０Ａが有するＳｙｓｔｅｍＣシミュレータ５４を用いて、クロックサイクルベースの検証を行う。クロックサイクルベースの検証において正しい動作が確認されると、ＨＤＬ変換ステップＳ１２において、ＳｙｓｔｅｍＣコンパイラ等の既存のＳｙｓｔｅｍＣ合成ツール７０を用いて、ＳｙｓｔｅｍＣ記述６をＨＤＬのＲＴレベル記述５に変換する。
【０１１５】
以上のように本実施形態によると、機能Ｃ記述から例えばＳｙｓｔｅｍＣに変換することによって、所望の設計言語へスムーズに変換できる。このように、設計言語に依存せずに、ハードウェア機能を検証した後で、設計言語を決定できる。これにより、設計言語やシミュレーションツール、および動作合成ツールなどが開発当初に決定しなくとも、設計を開始することが可能であるので、開発効率を大幅に向上させ、開発期間を短縮することができる。また、機能Ｃ記述完成の段階で、最適なツールを選択することもできる。
【０１１６】
なお、ここではＳｙｓｔｅｍＣの記述例を示したが、同様の手順により、ＳｐｅｃＣの文法を適用すれば、機能Ｃ記述からＳｐｅｃＣに変換可能で、同様の効果が得られることは言うまでもない。
【０１１７】
なお各実施形態においては、ＲＴＬＣの段階で、ＣｏＷａｒｅＣ，ＳｙｓｔｅｍＣまたはＳｐｅｃＣなどに変換するとしたが、例えば、アルゴリズムの段階からこれらの記述で設計されたモジュールと接続されており、接続はこれらの文法に従って記述しておいて、モジュールまたはブロック内の記述は純粋なＣ言語で書かれているようなものであっても、本段階的設計方法は、まったく同様に実施できる。そして、各実施形態と同様に、設計効率向上の効果が十分効得られることは、ハードウェアの３大構成要素であるデータパス、制御およびクロックが言語とは無関係であることから明らかである。
【０１１８】
なお、本発明の各実施形態に係る論理回路設計方法は、当該方法を実現するためのプログラムを実行するコンピュータによって実現することができる。また、当該方法を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録したプログラムをコンピュータに実行させることによって実現することができる。特に、機能Ｃ変換システム２０，２０Ａ、ＲＴレベルＣ変換システム４０，４０ＡおよびＳｙｓｔｅｍＣ変換システム４０Ｂの機能を、プログラムによって実現することが可能であることはいうまでもない。
【図面の簡単な説明】
【０１１９】
【図１】本発明の第１の実施形態に係るＣ言語記述からのトップダウン設計システムの構成を示す図である。
【図２】本発明の第１の実施形態に係る論理回路設計方法を示す処理フロー図である。
【図３】本発明の第１の実施形態において、アルゴリズムＣ記述をＧＵＩを用いて分割する例を示す図である。
【図４】本発明の第１の実施形態における状態分割の一例を示す図である。
【図５】クロック記述が挿入されたＲＴレベル記述の例を示す図である。
【図６】並列動作を表現した記述例とその状態分割の一例を示す図である。
【図７】本発明の第２の実施形態に係るＣ言語記述からのトップダウン設計システム構成図である。
【図８】本発明の第２の実施形態に係る論理回路設計方法を示す処理フロー図である。
【図９】本発明の第２の実施形態において、アルゴリズムＣ記述をＧＵＩを用いて分割する例を示す図である。
【図１０】本発明の第２の実施形態における状態分割の一例を示す図である。
【図１１】本発明の第２の実施形態における状態分割記述変換例を示す図である。
【図１２】本発明の第２の実施形態におけるＲＴレベルＣ記述への変換例を示す図である。
【図１３】本発明の第３の実施形態に係るＣ言語記述からのトップダウン設計システム構成図である。
【図１４】本発明の第３の実施形態に係る論理回路設計方法を示す処理フロー図である。
【図１５】本発明の第３の実施形態における変換した記述例を示す図である。
【図１６】従来の論理シミュレーションシステムの構成を示す図である。
【符号の説明】
【０１２０】
１  アルゴリズムＣ記述
２  機能Ｃ記述
３  ＲＴレベルＣ記述
５  Ｖerilog−ＨＤＬ（ＨＤＬによるＲＴレベル記述）
２０，２０Ａ  機能Ｃ変換システム
２１  状態分割手段
３０  機能検証システム
４０，４０Ａ  ＲＴレベルＣ変換システム
４１  クロック挿入手段
５０  タイミング検証システム
６０  ＨＤＬ変換ツール
Ｓ２  機能Ｃ変換ステップ
Ｓ３  機能検証ステップ
Ｓ４  ＲＴレベルＣ変換ステップ
Ｓ５  動作検証ステップ
Ｓ６  ＨＤＬ変換ステップ
Ｓ８  モジュール分割ステップ
Ｓ１０  ＳｙｓｔｅｍＣ変換ステップ（ＲＴレベルＣ変換ステップ）
【図１】
2006185461.tif 000003
【図２】
2006185461.tif 000004
【図３】
2006185461.tif 000005
【図４】
2006185461.tif 000006
【図５】
2006185461.tif 000007
【図６】
2006185461.tif 000008
【図７】
2006185461.tif 000009
【図８】
2006185461.tif 000010
【図９】
2006185461.tif 000011
【図１０】
2006185461.tif 000012
【図１１】
2006185461.tif 000013
【図１２】
2006185461.tif 000014
【図１３】
2006185461.tif 000015
【図１４】
2006185461.tif 000016
【図１５】
2006185461.tif 000017
【図１６】
2006185461.tif 000018