(57)【特許請求の範囲】
【請求項１】
プログラム記述言語を用いて所定の記述制約の下でハードウェアのアルゴリズムを記述したアルゴリズム記述のデータをコンピュータ装置が入力する第１処理と、
前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータを指示するハードウェア要素指示データを前記コンピュータ装置が入力する第２処理と、
前記コンピュータ装置が前記アルゴリズム記述のデータを、システムレベル記述言語によるハードウェアモデルのデータに変換する第３処理とを含み、
前記第３処理において、前記コンピュータ装置は前記ハードウェア要素指示データで指示されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を前記ハードウェアモデル上において維持するデータ依存関係維持記述を生成し、
前記記述制約は、システムレベル記述言語によるプロセスがクロック同期プロセスであるとき、プログラム記述の関数による操作は一定のクロックサイクル内で完了される、という制約を含む、言語変換処理方法。
【請求項２】
前記データ依存関係維持記述は、パラメータに対する代入と参照の順序を維持し、且つ、代入された値をその代入操作から前記一定のクロックサイクル内で参照することを保証する記述である、請求項１記載の言語変換処理方法。
【請求項３】
前記データ依存関係維持記述は、アルゴリズム記述において代入されてから参照されるパラメータについて中間パラメータを定義し、前記パラメータに代入される値を前記中間パラメータに代入してから当該中間パラメータの値を当該パラメータに書き込む記述と、その値の参照先を前記中間パラメータとする記述とを含む、請求項２記載の言語変換処理方法。
【請求項４】
プログラム記述言語を用いて所定の記述制約の下でハードウェアのアルゴリズムを記述したアルゴリズム記述のデータをコンピュータ装置が入力する第１処理と、
前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータを指示するハードウェア要素指示データを前記コンピュータ装置が入力する第２処理と、
前記コンピュータ装置が前記アルゴリズム記述のデータを、システムレベル記述言語によるハードウェアモデルのデータに変換する第３処理とを含み、
前記第３処理において、前記コンピュータ装置は前記ハードウェア要素指示データで指示されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を前記ハードウェアモデル上において維持するデータ依存関係維持記述を生成し、
前記第３処理は、前記アルゴリズム記述上における記述行の順番によって参照が先か代入が先かを示すデータ依存関係テーブルを生成し、当該テーブルを用いて前記データ依存関係維持記述を生成する、言語変換処理方法。
【請求項５】
ハードウェア要素指示データは、入力ポートになるパラメータを指示する情報と、出力ポートになるパラメータを指示する情報と、レジスタになるパラメータを指示する情報とを含む、請求項１または４記載の言語変換処理方法。
【請求項６】
前記ハードウェア要素指示データは更に並行処理を行うプロセスを指示する請求項１または４記載の言語変換処理方法。
【請求項７】
前記アルゴリズム記述は、前記プログラム記述言語ではサポートしない記述を//タイプのコメントとして有し、
前記第３処理は前記//タイプの記述をシステムレベル記述に反映する、請求項１または４記載の言語変換処理方法。
【請求項８】
前記第３処理は、前記アルゴリズム記述に含まれる”{ } { }”の記述をクロック境界の記述に変換する、請求項１または４記載の言語変換処理方法。
【請求項９】
前記第３処理は、変換したハードウェアモデルのデータによる機能及び動作タイミングを検証するためのテストベンチを前記コンピュータ装置が生成するテストベンチ生成処理を更に含む、請求項１または４記載の言語変換処理方法。
【請求項１０】
前記プログラム記述言語は並行処理及び時間の概念を持たないＣ言語であり、
前記システムレベル記述言語は並行処理及び時間の概念を持つSystemＣ言語である、請求項１または４記載の言語変換処理方法。
【請求項１１】
プログラム記述言語を用いて所定の記述制約の下でハードウェアのアルゴリズムを記述したアルゴリズム記述のデータをコンピュータ装置が入力する第１処理と、
前記コンピュータ装置が前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータをパラメータの命名規則に従って判別して、前記コンピュータ装置が前記アルゴリズム記述のデータをシステムレベル記述言語によるハードウェアモデルのデータに変換する第２処理とを含み、
前記第２処理において、前記コンピュータ装置は、判別したパラメータに関するアルゴリズム記述上でのデータ依存関係を前記ハードウェアモデル上において維持する、データ依存関係維持記述を生成する、言語変換処理方法。
【請求項１２】
前記所定の記述制約は、システムレベル記述言語によるプロセスがクロック同期プロセスであるとき、プログラム記述の関数による操作は一定のクロックサイクル内で完了される、という制約を含む、請求項１１記載の言語変換処理方法。
【請求項１３】
前記データ依存関係維持記述は、パラメータに対する代入と参照の順序を維持し、且つ、代入された値をその代入操作から前記一定のクロックサイクル内で参照することを保証する記述である、請求項１２記載の言語変換処理方法。
【請求項１４】
前記データ依存関係維持記述は、アルゴリズム記述のデータにおいて代入されてから参照されるパラメータについて中間パラメータを定義し、前記パラメータに代入される値を前記中間パラメータに代入してから当該中間パラメータの値を当該パラメータに書き込む記述と、その値の参照先を前記中間パラメータとする記述とを含む、請求項１３記載の言語変換処理方法。
【請求項１５】
前記第２処理は、前記アルゴリズム記述上における記述行の順番によって参照が先か代入が先かを示すデータ依存関係テーブルを生成し、当該テーブルを用いて前記データ依存関係維持記述を生成する、請求項１１記載の言語変換処理方法。
【請求項１６】
前記ハードウェア要素としての前記命名規則に従ったパラメータは、入力ポートになる第１のパラメータ、出力ポートになる第２のパラメータ、及びレジスタになる第３のパラメータを含む、請求項１１記載の言語変換処理方法。
【請求項１７】
前記第２処理は更に前記アルゴリズム記述データに含まれる並行処理を行うプロセスをプロセスの命名規則によって判別する処理を含む、請求項１１記載の言語変換処理方法。
【請求項１８】
前記アルゴリズム記述データは、前記プログラム記述言語ではサポートしない記述を//タイプのコメントとして有し、
前記第２処理は前記//タイプの記述をシステムレベル記述に反映する、請求項１１記載の言語変換処理方法。
【請求項１９】
前記第２処理は、前記アルゴリズム記述データに含まれる”{ } { }”の記述をクロック境界の記述に変換する、請求項１１記載の言語変換処理方法。
【請求項２０】
前記第２処理は変換したハードウェアモデルデータによる機能及び動作タイミングを検証するためのテストベンチを前記コンピュータ装置が生成するテストベンチ生成処理を更に含む、請求項１１記載の言語変換処理方法。
【請求項２１】
前記プログラム記述言語は並行処理及び時間の概念を持たないＣ言語であり、
前記システムレベル記述言語は並行処理及び時間の概念を持つSystemＣ言語である、請求項１１記載の言語変換処理方法。
【請求項２２】
コンピュータ装置が実行することにより、
プログラム記述言語を用いて所定の記述制約の下でハードウェアのアルゴリズムを記述したアルゴリズム記述のデータを入力する第１処理と、
前記アルゴリズム記述に含まれるハードウェア要素としてのパラメータをパラメータの命名規則に従って判別する第２処理と、
前記第２処理で判別されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を特定するためのデータ依存関係維持記述を生成する第３処理と、
前記アルゴリズム記述のデータをシステムレベル記述言語によるハードウェアモデルのデータに変換すると共に、前記データ依存関係維持記述で特定されたデータ依存関係を前記ハードウェアモデルに反映する第４処理と、を制御する言語変換処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語などの抽象度の高いプログラム記述言語を用いてハードウェアのアルゴリズムを記述したデータを、時間概念や並行処理などのハードウェア特有の機能を記述できるSystemＣなどのシステムレベル記述言語に変換する高位合成への橋渡し技術に関し、例えば高位合成への橋渡しを行うコンパイル方法更にはコンパイラに適用して有効な技術に関する。
【背景技術】
【０００２】
システムオンチップの半導体集積回路(単にＳｏＣとも称する）の大規模化及び複雑化に伴い、レジスタトランスファレベル（ＲＴＬ）による設計の限界が叫ばれている中で、ハードウェア記述言語（ＨＤＬ）よりも抽象度の高いＣ言語又はＣ＋＋言語をベースとして記述したハードウェアモデル（以下単にＨＷモデルとも称する）を用いて、ハードウェア設計を効率的に実施する手法が普及しつつある。代表技術としては、ハードウェアモデルからＲＴＬを生成する高位合成技術や、仮想プラットフォームを用いたハードウェア・ソフトウェア協調検証技術などがある。
【０００３】
純粋なＣ言語又はＣ＋＋言語では時間の概念や並行処理などの表現ができないため、ハードウェア特有の機能を記述することが困難である。そのため、Ｃ言語やＣ＋＋言語にハードウェアの表現能力を追加したシステムレベル記述言語（例えばSystemC等）が、ＨＷモデルの開発向けに用いられている。
【０００４】
高位合成技術とは前記システムレベル記述言語を入力として、ＲＴＬを自動生成する技術であり各種製品開発のＴＡＴ（ターンアラウンドタイム）短縮を目的としたものである。現時点で広く普及している高位合成ツールとしては、Forte社製のCynthesizer等がある。
【０００５】
仮想プラットフォームを用いたハードウェア・ソフトウェア協調検証技術とは、ハードウェアとソフトウェアからなるシステムを共通のシステムレベル記述言語を用いて設計することで、ハードウェアが完成するよりも早期の段階で、高速に協調検証シミュレーションを可能とする技術である。仮想プラットフォームとしては、Synopsys社製のPlatform Architect等がある。
【０００６】
これらの技術を活用するには、ハードウェアとなる部分のＣ言語記述を基にシステムレベル記述言語を用いてＨＷモデルを作成する必要がある。しかしながら、高位合成への橋渡しを行う有意の技術は提供されておらず、従来は人手で行っていた。例えばモデル外部との入出力に関わる部分、すなわち、バスやメモリ等との外部アクセスとなる部分の変数を抽出し、抽出した入出力ポートに対して対象アルゴリズムをラッピングして、外部アクセスに相当する変数とポート間の受け渡しを規定する。
【０００７】
一方、そのような高位合成への橋渡しを行うことについて考慮しない技術として例えば特許文献１に記載のものがある。特許文献１では、並列処理及び同期通信をサポートするプログラミング言語でその機能を定義することによって、集積回路の設計を行うものであり、得られたソースコードが、コンパイラに与えられ、コンパイラは、集積回路の外部通信の順番を変えずに同期通信のタイミングを変える最適化器モジュールを介して、集積回路の回路構成を表すＨＤＬによる出力コードを生成する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−２１６６６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明者の検討によれば以下の点が明らかになった。第１に、高位合成への橋渡しのための変換を人手で行う場合には、その結果得られたシステムレベル記述に対してベースのアルゴリズム記述との等価性について解析及び検証を行うことが必要になる。しかし、システムレベル記述言語を対象としたコード解析ツールは未成熟であり、メモリリークやメモリ破壊、未初期化変数、配列外アクセスなどの解析やデバッグを行う事が容易ではないため、開発工数が著しく増大する虞がある。要するに、オリジナルのＣ言語によるアルゴリズム記述と、人手による書き換え後のシステムレベル記述のハードウェアモデルの両方を対象に、未初期化変数チェックなどのコード解析検証やデバッグが必要となり、そもそも、人手による書き換えを行うため、ミスも混入し易くなる。
【００１０】
第２に、特許文献１のように、高位合成ツールへ橋渡しする技術ではなく、合成技術そのものである場合には、並列構文や通信構文などの拡張Ｃ言語を用いて、最初からハードウェアを意識した記述を行う必要があり、設計対象の大規模化及び複雑化するに従って現実的には不可能に近い。
【００１１】
本発明の目的は、プログラム記述言語によるハードウェアのアルゴリズム記述をベースに高位合成のためのハードウェアモデルの設計工数の短縮、さらには大規模化及び複雑化に対して半導体集積回路の開発効率の向上に資することができる言語変換処理方法を提供することにある。
【００１２】
本発明の別の目的は、プログラム記述言語によるハードウェアのアルゴリズム記述をベースに高位合成のためのハードウェアモデルの設計工数の短縮、さらには大規模化及び複雑化に対して半導体集積回路の開発効率の向上に資することができる言語変換処理方向を容易に実現することができる言語変換処理プログラムを提供することにある。
【００１３】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１５】
すなわち、プログラム記述言語を用いてハードウェアのアルゴリズムを記述したアルゴリズム記述のデータをシステムレベル記述によるハードウェアモデルのデータに変換するとき、前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータについての前記アルゴリズム記述上でのデータの依存関係を前記システムレベル記述において維持するデータ依存関係維持記述を生成する。
【００１６】
これによれば、ハードウェア特有の時間や並列処理の概念を表現するシステムレベル記述にアルゴリズム記述を変換したとき、アルゴリズム記述で想定されているデータ依存関係はデータ依存関係維持記述によって維持されるから、アルゴリズム記述からシステムレベル記述に変換されたハードウェアモデルには、アルゴリズム記述に対して既に評価及び検証された結果が反映されることになり、変換されたハードウェアモデルに対して、使用言語が相違されていても、重ねて評価及び検証を行うことを要しない。
【発明の効果】
【００１７】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１８】
すなわち、プログラム記述言語によるハードウェアのアルゴリズム記述をベースに高位合成のためのハードウェアモデルの設計工数の短縮、さらには大規模化及び複雑化に対して半導体集積回路の開発効率の向上に資することができる。
【図面の簡単な説明】
【００１９】
【図１】図１はＣ言語を用いて所用のハードウェアアルゴリズムを記述したＣアルゴリズム記述をシステムレベル記述言語によるハードウェアモデルに変換する処理（言語変換処理）について全体的に示したフローチャートである。
【図２】図２はシステムレベル記述への変換を人手で行うようにした比較例に係る処理を全体的に示したフローチャートである。
【図３】図３はＣアルゴリズム記述データに対してステップＳ３によりハードウェアモデルデータへ自動変換された結果の一例を示す説明図である。
【図４】図４はＣアルゴリズム記述データに対して人手によりハードウェアモデルデータへ変換された結果を比較例として示す説明図である。
【図５】図５は順データ依存関係及び逆データ依存関係の例を示す説明図である。
【図６】図６は図１の自動変換処理Ｓ３の具体例を示す説明図である。
【図７】図７は図１に示される言語変換処理を行うコンピュータ装置の一例を示すブロック図である。
【図８】図８は順データ依存関係を持つＣアルゴリズム記述に対するハードウェアモデル記述の例を示す説明図である。
【図９】図９は逆データ依存関係を持つＣアルゴリズム記述に対するハードウェアモデル記述の例を示す説明図である。
【図１０】図１０はデータ依存解析処理のデータ処理フローを例示するフローチャートである。
【図１１】図１１はデータ依存関係テーブルを例示する説明図である。
【図１２】図１２はデータ依存関係維持変換処理Ｓ３３の詳細なデータ処理を例示するフローチャートである。
【図１３】図１３は図８の順データ依存関係の記述に対して生成されるデータ依存関係保存済コードを例示する説明図である。
【図１４】図１４は図９の逆データ依存関係の記述に対して生成されるデータ依存関係保存済コードを例示する説明図である。
【図１５】図１５はシステムレベル変換処理Ｓ３４の具体例を示すフローチャートである。
【図１６】図１６は図６の自動変換処理Ｓ３の入力データとしてＣアルゴリズム記述データ１０及びハードウェア要素指示データ２０の具体例を示す説明図である。
【図１７】図１７は自動変換処理Ｓ３におけるデータ依存関係維持変換処理Ｓ３３において図１２の処理フローによって生成されるデータ依存関係保存済コードの具体例を示す説明図である。
【図１８】図１８はシステムレベル記述変換処理によって生成されるハードウェアモデルのクラス定義部の記述を例示する説明図である。
【図１９】図１９はシステムレベル記述変換処理によって生成されるユーザ定義型クラスの記述を例示する説明図である。
【図２０】図２０はシステムレベル記述変換処理によって生成される並行プロセスの記述を例示する説明図である。
【図２１】図２１はシステムレベル記述変換処理によって生成されるテストベンチモジュールの記述を例示する説明図である。
【図２２】図２２はシステムレベル記述変換処理によって生成されるテストベンチモジュールの接続とシミュレーションの記述を例示する説明図である。
【図２３】図２３はシステムレベル記述変換処理によって生成されるＣアルゴリズム用テストベンチの記述を例示する説明図である。
【図２４】図２４はパラメータに対する命名規則を採用することによってハードウェア要素指示データを不要とする場合のＣアルゴリズム記述を例示する説明図である。
【発明を実施するための形態】
【００２０】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２１】
〔１〕＜ハードウェア要素の指示を受け、データ依存関係を維持し、アルゴリズム記述をシステムレベル記述に変換＞
本発明の代表的な実施の形態に係る言語変換処理方法は、所定の記述制約の下でプログラム記述言語を用いてハードウェアのアルゴリズムを記述したアルゴリズム記述のデータ（１０）をコンピュータ装置（１）が入力する第１処理と、前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータを指示するハードウェア要素指示データ（２０）を前記コンピュータ装置が入力する第２処理と、前記コンピュータ装置が前記アルゴリズム記述のデータをシステムレベル記述によるハードウェアモデルのデータに変換する第３処理（Ｓ３）とを含む。前記第３処理において、前記コンピュータ装置は前記ハードウェア要素指示データで指示されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を前記ハードウェアモデル上において維持する、データ依存関係維持記述（４２）を生成する（図１、図６、図７参照、が必要？）。
【００２２】
これによれば、アルゴリズム記述を、ハードウェア特有の時間や並列処理の概念を表現するシステムレベル記述に変換したとき、前記記述制約によってアルゴリズム記述で想定されているデータ依存関係はデータ依存関係維持記述によって維持されるから、アルゴリズム記述からシステムレベル記述に変換されたハードウェアモデルには、アルゴリズム記述に対して既に評価及び検証された結果が反映されることになり、変換されたハードウェアモデルに対して、使用言語が相違されていても、重ねてコード解析やデバッグなどの評価及び検証を行うことを要しない。更にハードウェア要素としてのパラメータについてはハードウェア要素指示データによって後から指定することができるから、アルゴリズム記述を生成するときポートや信号（レジスタ）になるパラメータなどを予め把握する手間を要しない。
【００２３】
〔２〕＜関数操作のクロックサイクル数に関する記述制約＞
項１の言語変換処理方法において、前記記述制約は、システムレベル記述言語によるプロセスがクロック同期プロセスであるとき、プログラム記述の関数による操作は一定のクロックサイクル内で完了される、という制約を含む。
【００２４】
これによれば、時間の概念を持たないプログラム記述言語による記述に対して暗黙的な時間概念を持たせることが可能になる。
【００２５】
〔３〕<順序関係の維持>
項１又は２の言語変換処理方法において、前記データ依存関係維持記述は、パラメータに対する代入と参照の順序を維持し、且つ、代入された値をその代入操作から前記一定のクロックサイクル内で参照することを保証する記述である（図８、図９参照）。
【００２６】
これによれば、アルゴリズム記述で想定されているデータ依存関係を簡単な記述によって前記システムレベル記述に反映することができる。
【００２７】
〔４〕＜中間パラメータの採用＞
項１乃至３の何れかの言語変換処理方法において、前記データ依存関係維持記述は、アルゴリズム記述のデータにおいて代入されてから参照されるパラメータについて中間パラメータ（＿out1）を定義し、前記パラメータに代入される値を前記中間パラメータに代入してから当該中間パラメータの値を当該パラメータに書き込む記述と、その値の参照先を前記中間パラメータとする記述とを含む。
【００２８】
これによれば、ポートや信号（レジスタ）としてのパラメータに書き込み結果が反映されるまでの遅延を考慮すると、その書き込みデータを一定のクロックサイクル内で参照する操作が想定されている場合に、上記中間パラメータを定義して利用することにより、上記データ依存関係の維持を簡単に実現することが可能になる。
【００２９】
〔５〕＜データ依存関係テーブルの生成＞
項１乃至４の何れかの言語変換処理方法において、前記第３処理は、前記アルゴリズム記述上における記述行の順番によって参照が先か代入が先かを示すデータ依存関係テーブル（４１）を生成し、当該テーブルを用いて前記データ依存関係維持記述を生成する。
【００３０】
これによれば、コントロールデータフローグラフを生成することなく容易にデータ依存関係を判別することができる。
【００３１】
〔６〕＜ハードウェア要素指示情報＞
項１乃至５の何れかの言語変換処理方法において、ハードウェア要素指示データは、入力ポートになるパラメータ（in1）を指示する情報と、出力ポートになるパラメータ（out1）を指示する情報と、信号（レジスタ）になるパラメータ（sig1,sig2）を指示する情報とを含む。
【００３２】
これによれば、入力ポート、出力ポート及び信号（レジスタ）になるパラメータを簡単に指示することができる。
【００３３】
〔７〕＜並行プロセスの指示＞
項１乃至６の何れかの言語変換処理方法において、前記ハードウェア要素指示データは更に並行処理を行うプロセス（th_1,th_2）を指示する。
【００３４】
これによれば、並行処理を行うプロセスを簡単に指示することができる。
【００３５】
〔８〕＜//タイプのコメント＞
項１乃至７の何れかの言語変換処理方法において、前記アルゴリズム記述のデータは、前記プログラム記述言語ではサポートしない記述を//タイプのコメントとして有し、前記第３処理は前記//タイプの記述をシステムレベル記述に反映する。
【００３６】
これによれば、自動変換では容易に対応し難いハードウェアモデル特有の記述を予めアルゴリズム記述に埋め込んでおくことにより、これを第３処理による変換の補助とすることができ、第３処理による変換精度の向上に資することができる。
【００３７】
〔９〕＜”{ } { }”の記述をクロック境界の記述に変換＞
項１乃至８の何れかの言語変換処理方法において、前記第３処理は、前記アルゴリズム記述のデータに含まれる”{ } { }”の記述をクロック境界の記述に変換する。
【００３８】
これによれば、予めアルゴリズム記述データに暗黙的にクロック境界を意味する記述を埋め込む方が、意味付けの明確化と可読性の向上に寄与する。
【００３９】
〔１０〕＜ハードウェアモデルのテストベンチの生成＞
項１乃至９の何れかの言語変換処理方法において、前記第３処理は、変換したハードウェアモデルの機能及び動作タイミングを検証するためのテストベンチを前記コンピュータ装置が生成するテストベンチ生成処理（Ｓ１２４）を含む。
【００４０】
これによれば、生成されたテストベンチを用いることによってハードウェアモデルに対する評価及び検証についても容易に対応することができる。
【００４１】
〔１１〕＜並行処理及び時間の概念＞
項１乃至１０の何れかの言語変換処理方法において、前記プログラム記述言語は並行処理及び時間の概念を持たないＣ言語であり、前記システムレベル記述言語は並行処理及び時間の概念を持つSystemＣ言語などである。
【００４２】
これによれば、Ｃ言語を用いて記述されたアルゴリズム記述データをSystemＣ言語などによるハードウェアモデルデータに自動的に書き換え可能になる。
【００４３】
〔１２〕＜ハードウェア要素を自動判別し、データ依存関係を維持し、アルゴリズム記述をシステムレベル記述に変換＞
本発明の別の実施の形態に係る言語変換処理方法は、所定の記述制約の下でプログラム記述言語を用いてハードウェアのアルゴリズムを記述したアルゴリズム記述のデータ（１０）をコンピュータ装置（１）が入力する第１処理と、前記コンピュータ装置が前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータをパラメータの命名規則（inで始まる変数は入力ポート、outで始まる変数は出力ポート、sigで始まる変数は信号、thで始まる関数は並行処理プロセス）に従って判別して、前記コンピュータ装置が前記アルゴリズム記述のデータをシステムレベル記述によるハードウェアモデルのデータに変換する第２処理とを含む。前記第２処理において、前記コンピュータ装置は、判別したパラメータに関するアルゴリズム記述上でのデータ依存関係を前記ハードウェアモデル上において維持する、データ依存関係維持記述（４２）を生成する。
【００４４】
これによれば、アルゴリズム記述を、ハードウェア特有の時間や並列処理の概念を表現するシステムレベル記述に変換したとき、前記記述制約を満足するアルゴリズム記述で想定されているデータ依存関係はデータ依存関係維持記述によって維持されるから、アルゴリズム記述からシステムレベル記述に変換されたハードウェアモデルには、アルゴリズム記述に対して既に評価及び検証された結果が反映されることになり、変換されたハードウェアモデルに対して、使用言語が相違されていても、重ねてコード解析やデバッグなどの評価及び検証を行うことを要しない。更にハードウェア要素としてのパラメータについてはその命名規則に基づいて自動的に判別されるから、項１のハードウェア要素指示データのようなデータは必要ではない。ただし、ハードウェア要素とすべきパラメータについてはその命名規則に従ったパラメータ名を付与しておかなければならない。
【００４５】
〔１３〕＜関数操作のクロックサイクル数に関する記述制約＞
項１２の言語変換処理方法において、前記所定の記述制約は、システムレベル記述言語によるプロセスがクロック同期プロセスであるとき、プログラム記述の関数による操作は一定のクロックサイクル内で完了される、という制約を含む。
【００４６】
これによれば、時間の概念を持たないプログラム記述言語による記述に対して暗黙的な時間概念を持たせることが可能になる。
【００４７】
〔１４〕<順序関係の維持>
項１２の言語変換処理方法において、前記データ依存関係維持記述は、パラメータに対する代入と参照の順序を維持し、且つ、代入された値をその代入操作から前記一定のクロックサイクル内で参照することを保証する記述である。
【００４８】
これによれば、アルゴリズム記述で想定されているデータ依存関係を簡単な記述によって前記システムレベル記述に反映することができる。
【００４９】
〔１５〕＜中間パラメータの採用＞
項１２乃至１４の何れかの言語変換処理方法において、前記データ依存関係維持記述は、アルゴリズム記述のデータにおいて代入されてから参照されるパラメータについて中間パラメータ（_out1）を定義し、前記パラメータに代入される値を前記中間パラメータに代入してから当該中間パラメータの値を当該パラメータに書き込む記述と、その値の参照先を前記中間パラメータとする記述とを含む。
【００５０】
これによれば、ポートや信号（レジスタ）としてのパラメータに書き込み結果が反映されまでの遅延を考慮すると、その書き込みデータを一定のクロックサイクル内で参照する操作が想定されている場合に、上記中間パラメータを定義して利用することにより、上記データ依存関係の維持を簡単に実現することが可能になる。
【００５１】
〔１６〕＜データ依存関係テーブルの生成＞
項１２乃至１５の何れかの言語変換処理方法において、前記第２処理は、前記アルゴリズム記述上における記述行の順番によって参照が先か代入が先かを示すデータ依存関係テーブル（４１）を生成し、当該テーブルを用いて前記データ依存関係維持記述を生成する。
【００５２】
これによれば、コントロールデータフローグラフを生成することなく容易にデータ依存関係を判別することができる。
【００５３】
〔１７〕＜命名規則が指示するハードウェア要素＞
項１２乃至１６の何れかの言語変換処理方法において、前記ハードウェア要素としての前記命名規則に従ったパラメータは、入力ポートになる第１のパラメータ（in1）、出力ポートになる第２のパラメータ（our1）、及び信号（レジスタ）になる第３のパラメータ（sig1,sig2）を含む。
【００５４】
これによれば、入力ポート、出力ポート及び信号（レジスタ）になるパラメータを簡単に識別することができる。
【００５５】
〔１８〕＜命名規則が指示する並行プロセス＞
項１２乃至１７の何れかの言語変換処理方法において、前記第２処理は更に前記アルゴリズム記述データに含まれる並行処理を行うプロセス（th_1,th_2）をプロセスの命名規則によって判別する処理を含む。
【００５６】
これによれば、並行処理を行うプロセスを簡単に識別することができる。
【００５７】
〔１９〕＜//タイプのコメント＞
項１２乃至１８の何れかの言語変換処理方法において、前記アルゴリズム記述データは、前記プログラム記述言語ではサポートしない記述を//タイプのコメントとして有し、前記第２処理は前記//タイプの記述をシステムレベル記述に反映する。
【００５８】
これによれば、自動変換では容易に対応し難いハードウェアモデル特有の記述を予めアルゴリズム記述に埋め込んでおくことにより、これを第３処理による変換の補助とすることができ、第２処理による変換精度の向上に資することができる。
【００５９】
〔２０〕＜”{ } { }”の記述をクロック境界の記述に変換＞
項１２乃至１９の何れかの言語変換処理方法において、前記第２処理は、前記アルゴリズム記述に含まれる”{ } { }”の記述をクロック境界の記述に変換する。
【００６０】
これによれば、予めアルゴリズム記述データに暗黙的にクロック境界を意味する記述を埋め込む方が、意味付けの明確化と可読性の向上に寄与する。
【００６１】
〔２１〕＜ハードウェアモデルのテストベンチの生成＞
項１２乃至２０の何れかの言語変換処理方法において、前記第２処理は変換したハードウェアモデルの機能及び動作タイミングを検証するためのテストベンチを前記コンピュータ装置が生成するテストベンチ生成処理（Ｓ１２４）を更に含む。
【００６２】
これによれば、生成されたテストベンチを用いることによってハードウェアモデルに対する評価及び検証についても容易に対応することができる。
【００６３】
〔２２〕＜並行処理及び時間の概念＞
請求項１２乃至２１の何れかの言語変換処理方法において、前記プログラム記述言語は並行処理及び時間の概念を持たないＣ言語であり、前記システムレベル記述言語は並行処理及び時間の概念を持つSystemＣ言語などである。
【００６４】
これによれば、Ｃ言語を用いて記述されたアルゴリズム記述データをSystemＣ言語などによるハードウェアモデルデータに自動的に書き換え可能になる。
【００６５】
〔２３〕＜ハードウェア要素の指示を受け、データ依存関係を維持し、アルゴリズム記述をシステムレベル記述に変換＞
本発明の更に別の実施の形態に係る言語変換処理プログラム（ＰＧＭ）は、コンピュータ装置（１）が実行することにより、所定の記述制約の下でプログラム記述言語を用いてハードウェアのアルゴリズムを記述したアルゴリズム記述のデータ（１０）を入力する第１処理と、前記アルゴリズム記述のデータに含まれるハードウェア要素としてのパラメータを指示するハードウェア要素指示データを入力する第２処理と、前記第２処理で入力したハードウェア要素指示データで指示されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を特定するためのデータ依存関係維持記述を生成する第３処理（Ｓ３２，Ｓ３３）と、前記アルゴリズム記述のデータをシステムレベル記述によるハードウェアモデルのデータに変換すると共に、前記データ依存関係維持記述で特定されたデータ依存関係を前記ハードウェアモデルに反映する第４処理（Ｓ３４）と、を制御する。
【００６６】
これによれば、項１で説明したようにプログラム記述言語によるハードウェアのアルゴリズム記述をベースに高位合成のためのハードウェアモデルの設計工数の短縮などに寄与する言語変換処理方向を容易に実現することができる。
【００６７】
〔２４〕＜ハードウェア要素を自動判別し、データ依存関係を維持し、アルゴリズム記述をシステムレベル記述に変換＞
本発明の更に別の実施の形態に係る言語変換処理プログラム（ＰＧＭ）は、コンピュータ装置（１）が実行することにより、所定の記述制約の下でプログラム記述言語を用いてハードウェアのアルゴリズムを記述したアルゴリズム記述のデータ（１０）を入力する第１処理と、前記アルゴリズム記述に含まれるハードウェア要素としてのパラメータをパラメータの命名規則（inで始まる変数は入力ポート、outで始まる変数は出力ポート、sigで始まる変数は信号、thで始まる関数は並行処理プロセス）に従って判別する第２処理（Ｓ３１）と、前記第２処理で判別されたパラメータに関する前記アルゴリズム記述上でのデータ依存関係を特定するためのデータ依存関係維持記述を生成する第３処理（Ｓ３２，Ｓ３３）と、前記アルゴリズム記述のデータをシステムレベル記述によるハードウェアモデルのデータに変換すると共に、前記データ依存関係維持記述で特定されたデータ依存関係を前記ハードウェアモデルに反映する第４処理（Ｓ３４）と、を制御する。
【００６８】
これによれば、項１２で説明したようにプログラム記述言語によるハードウェアのアルゴリズム記述をベースに高位合成のためのハードウェアモデルの設計工数の短縮などに寄与する言語変換処理方向を容易に実現することができる。
【００６９】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００７０】
〔実施の形態１〕
《Ｃアルゴリズムからハードウェアモデルへの自動変換》
ソフトウェアプログラミング言語として例えばＣ言語を用いて所用のハードウェアアルゴリズムを記述したＣアルゴリズム記述をシステムレベル記述言語によるハードウェアモデルに変換する処理（言語変換処理）について図１を参照しながら全体的に説明する。ソフトウェアプログラミング言語は並行処理及び時間の概念がない。これに対してシステムレベル記述言語は並行処理及び時間の概念を持つ。
【００７１】
図１に示される処理フローは例えばエンジニアリングワークステーションなどのコンピュータ装置が言語変換処理プログラムなどのプログラムを実行することによって実現される処理である。ワークステーション１は例えば図７に例示されるように、プログラムを実行する中央処理装置（ＣＰＵ）２にワークメモリ３及び補助記憶装置４が接続されると共に、外部インタフェース５を介してディスプレイ６、キーボード７、マウス８、及びＤＶＤドライブ９などに接続される。ＣＰＵ２はＤＶＤドライブ９から言語処理変換プログラムを補助記憶装置にダウンロードし、ダウンロードした言語処理変換プログラムを必要に応じてワークメモリ３に転送し、ワークメモリ３からプログラムをフェッチして言語変換処理を実行する。
【００７２】
開発しようとする回路モジュールに要求される機能はＣ言語の文法に従い、所定の記述制約の下でハードウェアアルゴリズムを記述するためのＣアルゴリズム仕様として入力される（Ｓ１）。入力された仕様はＣ言語によるＣアルゴリズム記述にコード化され、コード化されたコード（以下単にＣアルゴリズム記述データとも称する）１０が解析されて検証され、デバッグに供される（Ｓ２）。例えばＣ言語を用いたときは、 [1]のPurifyに代表される商用動的コード解析ツールや、[2]、[3]などの学術検証ツールなどを用いて、検証及びデバッグを容易に行うことができる。
[1]．IBM Rational Purify http://www-01.ibm.com/software/awdtools/purify/
[2]．CBMC http://www.cprover.org/cbmc/
[3]．Edmund Clarke, Daniel Kroening, and Flavio Lerda, "A Tool for Checking ANSI-C Programs," TACAS2004, LNCS Vol.2988, pp.168-176, 2004.
【００７３】
これによって、Ｃ言語を用いて所用のハードウェアアルゴリズムを記述したＣアルゴリズム記述データ１０が生成される。このＣアルゴリズム記述データ１０に対して並行処理及び時間の概念を表現するために、Ｃアルゴリズム記述データ１０に含まれるハードウェア要素としてのパラメータを指示するハードウェア指示データ２０を入力して、Ｃアルゴリズム記述データ１０をSystemＣのようなシステムレベル記述に自動変換して、ハードウェアモデルデータ３０を生成する（Ｓ３）。このハードウェアモデルデータ３０は、レジスタトランスファレベル（ＲＴＬ）への高位合成、さらにはハードウェアモデルのタイミング検証などのためのテストベンチの生成に利用される。高位合成を行う高位合成ツールとして例えばForte社製のCynthesizer等を用いればよい。
【００７４】
自動変換Ｓ３においては、システムレベル記述のハードウェアモデルデータ３０は、Ｃアルゴリズム記述データ１０に対して機能的な等価性を保証するように変換処理が行われることになる。図２の比較例のようにシステムレベル記述への変換を人手で行うとすれば、その変換結果には上記等価性を保証することができないので、システムレベル記述に対するコード解析や検証及びデバッグを改めて行うことが必要になる。しかも、システムレベル記述言語を対象とするコード解析ツールは未成熟であり、メモリリークやメモリ破壊、未初期化変数、配列外アクセスなどの解析及びデバッグを行う事は容易ではなく、ハードウェアモデルの開発工数を増大させる原因にもなる。
【００７５】
図３にはＣアルゴリズム記述データ１０に対してステップＳ３によりハードウェアモデルデータ３０へ自動変換された結果の一例が示される。これに対して図４にはＣアルゴリズム記述データに対して人手によりハードウェアモデルデータへ変換された結果が比較例として示される。
【００７６】
図４の人手変換による場合と図３の本発明を用いた自動変換による場合では、ハードウェアモデルの記述形式に明確な違いが現れる。図３と図４のどちらの変換方式を用いる場合でも、アルゴリズム記述データ中の関数の入出力となる変数を切り出す作業が必要な点は同じである。
【００７７】
図４の人手変換の場合は、入出力となる変数が関数の引数や戻り値となるようアルゴリズム記述の書き換えを行う。これは、人間がモデル記述を理解し易いように、インタフェースを明確化する必要があるためである。
【００７８】
一方、図３の本発明を用いた自動変換の場合は、入出力となる変数がどれかを外部から指示することにより、データ依存関係を考慮した変換手法によって、アルゴリズム処理をダイレクトにハードウェア記述化するものである。
【００７９】
ここでデータ依存関係とは、ソフトウェア実行における制限の１つであり、命令Ａの実行結果を命令Ｂが利用する場合、命令Ａと命令Ｂで受け渡しする変数についてデータ依存関係があると言う。ここで命令Ａの方が命令Ｂよりもソフトウェアコード内で実行順が先である場合は順データ依存関係にあると言い、逆に命令Ｂの方の実行順が先である場合は逆データ依存関係にあると言う。順データ依存関係、逆データ依存関係の例を図５に示す。左右どちらの記述例も、命令Ａでbufにinを代入、命令Ｂでoutにbuf(命令Ａの実行結果)を代入しているが、左側は命令Ａが命令Ｂに先行しており、右側は命令Ｂが命令Ａに先行している。
【００８０】
データ依存関係にある変数が存在する場合、自動変換においては機能の等価性を維持するためにその依存関係を維持するための考慮が必要となる。その詳細については後述する。
【００８１】
図１に基づいてその概略を説明したように、Ｃ言語で記述したアルゴリズムを入力として、機能的に等価なハードウェアモデルを自動生成できるので、Ｃ記述に対してコード解析及びデバッグを行えば充分となる。図２の人手を介する比較例の設計フローでは、Ｃアルゴリズム記述とハードウェアモデルの両方に対してコード解析検証及びデバッグが必要となる。従って、本発明による言語変換処理の方法によれば、ハードウェアモデルの設計工数および検査工数を低減でき、半導体集積回路などの開発効率を大幅に向上することが可能となることが理解されるであろう。
【００８２】
《自動変換処理》
以下、等価性を保証する自動変換の処理について詳述する。
【００８３】
図６には図１の自動変換処理Ｓ３の具体例が示される。自動変換処理Ｓ３において、Ｃアルゴリズム記述データ１０とハードウェア要素指示データ２０を入力し、入力データに基づいて、例えば、入出力アクセス解析処理Ｓ３１、データ依存解析処理Ｓ３２，データ依存関係維持変換処理Ｓ３３、及びシステムレベル記述変換処理Ｓ３４を行う。
【００８４】
入出力アクセス解析処理Ｓ３１では、Ｃアルゴリズム記述データをパースして入出力アクセスの解析を行い、その記述における入力変数と出力変数の解析結果（入出力変数解析結果）をデータベース４０に保存する。
【００８５】
データ依存解析処理Ｓ３２では、入出力変数解析結果のデータベース４０を参照して、データ依存関係のあるコード箇所を抽出し、データ依存関係テーブル４１を作成する。
【００８６】
データ依存関係維持変換処理Ｓ３３では、データ依存関係テーブル４１を参照して、データ依存関係を保持したコードを書き換えて、データ依存関係保存済コードとしてデータベース４２に保存する。データ依存関係保存済コードは、特に制限されないが、中間コードとして位置付けられる。
【００８７】
システムレベル記述変換処理Ｓ３４では、データベース４２が保持するデータ依存関係保存済コードを用いて、システムレベル記述によるハードウェアモデルデータ３０を生成する。
【００８８】
自動変換処理を行うための言語変換処理プログラムは図７のワークメモリ３にダウンロードされて、ＣＰＵ２によって実行される。ＣＰＵ２による自動変換処理に用いるＣアルゴリズム記述データ１０、ハードウェア要素指示データ２０は外部インタフェース５を介して補助記憶装置４に格納される。ＣＰＵ２が自動変換処理を行うことによって生成される入出力変数解析結果のデータベース４０、及びデータ依存関係テーブル４１は、ワークメモリ３に保持され、変換処理の途中で生成される中間コード（データ依存関係保存済コード４２など）、及び変換結果としてハードウェアモデルデータ３０は補助記憶装置４に得られる。
【００８９】
《データ依存関係維持変換処理》
次にデータ依存関係維持変換処理について具体的に説明する。
【００９０】
図８には順データ依存関係を持つ場合の処理記述例が示される。データ依存関係維持変換処理Ｓ３３では、データ依存関係に基づいて、入力、あるいは出力にマッピングされる変数を、例えばポートアクセスとなる処理に置換する。この時、単純な置換処理では、データ依存関係が損なわれてしまう場合がある。これはＣアルゴリズム記述では時間の概念が反映されず、SystemＣ記述は時間の概念を持ち、変数の値は、時間の概念で把握されるクロックを刻んだとき（クロックサイクルが変わったとき）更新される場合があるからである。例えば、図８のＣアルゴリズム記述には変数out1に関して順データ依存関係が存在し、このとき、図８の非等価の矢印方向に示されるように、単純な置換を行う場合には、意図しない処理結果になる場合がある。SystemＣを用いたハードウェアモデル記述では、出力ポートや信号に対する代入処理がノンブロッキング代入となり、次のクロックを刻んだタイミング（例えばwaitのコール）で実際に値が更新される場合がある。すなわち、out1に代入した値を、次のif文での評価に用いているが、HWモデルでは、out1の値が即座に反映されないので、両者の処理結果が一致しない。
【００９１】
この問題を解決するために中間変数を導入する。図８の等価の矢印方向に示されたコードでは、中間変数_out1に更新後の値を代入し、その_中間変数out1の値を変数out1に代入している。値の参照には中間変数_out1を用いるよう処理を書き換えることで、Ｃアルゴリズム記述とハードウェアモデル記述との機能的な等価性が保障されることになる。尚、in1.read()は入力ポートin1からデータを読み込むリードメソッドであり、out1.write()は出力ポートout1にデータを書き込むメソッドである。
【００９２】
比較例のような人手によるハードウェアモデル化手法と大きく異なる点は、別途ポートを定義することを要せず、アルゴリズム記述内の変数を直接ポートとして利用する部分である。本手法を人手で行うとした場合に、データ依存関係を考慮に入れた上でアルゴリズムを書き換えるには、変数の使われ方を実行順に目視で追いながら依存関係を探る必要があるため通常は極めて困難であり、作業が収束しない可能性が高い。
【００９３】
図９には逆データ依存関係を持つ場合の処理記述例が示される。この場合、Ｃアルゴリズム記述は、変数out1に関して逆データ依存関係が存在し、非等価の矢印方向に示されるように単純な処理置換を行うと、変数out1がノンブロッキング代入となるため意図しない処理結果になる場合がある。等価の矢印方向に示されるように、順データ依存関係の場合と同様の中間変数を導入することで、上記同様にその不都合は解消される。
【００９４】
図１０にはデータ依存解析処理のデータ処理フローが例示される。図１１にはデータ依存関係テーブルが例示され、図１２にはデータ依存関係維持変換処理Ｓ３３の詳細なデータ処理フローが例示される。
【００９５】
図１０に例示したデータ依存解析の処理フローは、前記アルゴリズム記述上における記述行の順番によって参照が先か代入が先かを判別して、図１１のデータ依存関係テーブル４１を生成する。
【００９６】
図１０に例示したデータ依存解析処理は、ソースコード文字で書かれたＣアルゴリズム記述の意味を解釈（パース）して対象変数をリストアップする（Ｓ１０１）。対象変数は、（出力ポートあるいは信号になる変数＆＆（代入文右辺で使用｜｜条件判定式・配列インデックス・単項/短縮演算で使用）の関係を満足する変数とされる。即ち、代入文右辺で使用され、条件判定式で使用され、配列インデックスで使用され、又は単項／短縮演算で使用される変数であって、且つ、出力ポートあるいは信号になる変数が対象変数とされる。
【００９７】
次に、全対象変数毎に、代入文左辺で使用されている変数があるか否かを判別する（Ｓ１０２）。そのような変数がある場合には当該解析対象変数を含む文毎に、ステップＳ１０３の処理を繰り返す。ステップＳ１０３では、当該変数を代入文左辺で使用している他の文が、現解析文の上側にあるかの判別が行われ、ステップＳ１０３の条件を満足する変数に対してはデータ依存関係テーブルに順データ依存として情報追加を行い（Ｓ１０４）、そうでなければその変数に対してはデータ依存関係テーブルに逆データ依存として情報追加を行う（Ｓ１０５）。
【００９８】
データ依存関係テーブル４１の情報を入力として図１２のデータ依存関係維持変換処理により、データ依存関係保存済コード４２が作成される。このデータ依存関係保存済コード４２は、後段のシステムレベル記述変換処理Ｓ３４の入力となる。
【００９９】
図１２のデータ依存関係維持変換処理は、中間変数の導入（Ｓ１１１)、初期化記述の生成（Ｓ１１２）、依存元代入文の変換（Ｓ１１３）、及び依存先代入文の変換（Ｓ１１４）の各処理によって実現される。中間変数の導入処理Ｓ１１１は、データ依存関係を持つ対象変数に対して中間変数を導入する処理である。初期化記述の生成処理Ｓ１１２は、逆データ依存関係を持つ対象変数に対して、導入した中間変数の初期化記述を生成する処理である。依存元代入文の変換処理Ｓ１１３は、「左辺＝右辺；」の処理を、「導入変数＝右辺；左辺＝導入変数；」へ変換する処理である。依存先代入文の変換処理Ｓ１１４は、文内の依存関係を持つ変数を導入変数に置換する処理である。
【０１００】
例えば図８の順データ依存関係の記述例を用いて図１０の処理フローを説明する。図１０の処理フローによると、ステップＳ１０１にて変数out1は”if (out1 < max) {”の処理行があることから対象変数に該当(出力ポートあるいは信号になる変数＆＆条件判定式で使用)する条件を満足し、ステップＳ１０２にて”out1 = in1 + buf;”の代入文左辺で使用されている処理行があることから条件を満足する。さらにステップＳ１０３にて、out1変数の代入文よりも下側にout1変数を使用した条件判定式があることから、順データ依存関係があると判定され、図１１のデータ依存関係テーブル４１に、out1の代入行の情報（行番号が＊＊、変数がout1、種別が代入）と、out1の順データ依存による参照の情報（行番号が＊＊、変数がout1、種別が参照、依存関係が順データ依存）が追加される。その後、図１２の処理フローによると、生成されたデータ依存関係テーブル４１を参照して、Ｓ１１１にて_out1などの中間変数が導入され、ステップＳ１１３にて依存元の代入文の変換が行われ、ステップＳ１１４にて依存先の代入文の変換が行われる。その結果として、図１３に示すデータ依存関係保存済コード４２が作成される。
【０１０１】
同様に、図９の逆データ依存関係の記述例を用いて図１０の処理フローを説明する。図１０の処理フローによると、ステップ１０１にて変数out1は”if (out1 < max) {”の処理行があることから対象変数に該当(出力ポートあるいは信号になる変数＆＆条件判定式で使用)する条件を満足し、ステップ１０２にて”out1 = in1 + buf;”の代入文左辺で使用されている処理行があることから条件を満足する。さらにステップ１０３にて、変数out1の代入文よりも上側に変数out1を使用した条件判定式があることから、逆データ依存関係があると判定され、図１１のデータ依存関係テーブルに、out1の代入行の情報（行番号が＊＊、変数がout1、種別が代入）と、out1の逆データ依存による参照の情報（行番号が＊＊、変数がout1、種別が参照、依存関係が逆データ依存）が追加される。その後、図１２の処理フローによると、生成されたデータ依存関係テーブル４１を参照して、ステップＳ１１１にて_out1などの中間変数が導入され、ステップＳ１０２にて中間変数の初期化記述を生成し、ステップＳ１０３にて依存元の代入文の変換が行われ、ステップＳ１０４にて依存先の代入文の変換が行われる。その結果として、図１４に示すデータ依存関係保存済コード４２が作成される。
【０１０２】
上述のように、データ依存関係を生成するためにCDFG（コントロールデータフローグラフ）を生成する必要がないため、本発明に係る言語変換処理方法の開発コスト低減、変換処理の高速化に資することができる。尚、CDFGとは、プログラムを実行したときに通る可能性のある全経路のグラフであり、動作記述に現れたデータの流れ(データフロー)と各演算の実行順序の制御の流れ(コントロールフロー)を表す。コンパイラ最適化や静的コード解析ツール等でよく用いられるものである。
【０１０３】
《Ｃアルゴリズムの記述制約》
上記SystemＣ言語によって記述されるハードウェアモデルにおいて、そのプロセスがメソッドプロセスSC_METHODか、同期スレッドプロセスSC_CTHREADか、等に応じて、上述のデータ依存関係維持変換処理の前後で機能の等価性を保障するために、入力となるＣアルゴリズム記述に対して所定の記述制約を設けることが得策となる。
【０１０４】
例えば、変換後のシステムレベル記述がSystemＣ言語であり、かつ並行プロセスをメソッドプロセスSC_METHODに変換する場合には、以下に示す制約１、制約２、制約３、制約４を設けるとよい。この制約の下であれば、同一入力シーケンスに対して全出力系列が変換前後で一致する。一方、並行プロセスをクロック同期スレッドプロセスSC_CTHREADに変換する場合には、以下に示す制約２、制約３、制約５を設けるのが良い。この制約の下であれば、出力サイクルが１サイクルだけ異なる、すなわち１サイクルのずれを無視すれば、全出力系列が変換前後で一致する。
【０１０５】
制約１：組合せゲートループとなる記述が存在しないこと、
制約２：読み出し・書き込み両方の操作が行われることになる内部信号となる変数が存在していないこと、
制約３：出力ポートとなる変数への読み出し操作が全くないか、読み出し操作を行う場合は、他の並行プロセスとなる関数から当該変数への書き込みが一切ないこと。すなわち出力ポートとなる変数を入出力変数として用いていないこと、
制約４：入力ベクタがサイクル同期していること、
制約５：1クロックで動作を終了する記述となっていること、である。
【０１０６】
《システムレベル記述変換》
次にシステムレベル変換処理Ｓ３４について詳述する。
【０１０７】
図１５にはシステムレベル変換処理Ｓ３４の処理フローの具体例が示される。システムレベル変換処理Ｓ３４は、モジュールクラス生成処理Ｓ１２１、ユーザ定義型生成処理Ｓ１２２、並行プロセス変換処理Ｓ１２３，及びテストベンチ生成処理Ｓ１２４によって実現される。システムレベル変換処理Ｓ３４は、データ依存関係維持変換処理Ｓ３３で生成したデータ依存関係保存済コード（中間コード）４２、及びハードウェア要素指示データ２０を用いて、４つのステップＳ１２１乃至Ｓ１２４によりシステムレベル記述を用いたハードウェアモデルデータ３０を生成する。
【０１０８】
モジュールクラス生成処理Ｓ１２１では、ハードウェアモデルのクラスの宣言として、ポート及び信号宣言、並行プロセスの登録などの記述を生成する。この時にハードウェア要素指示データ２０を見て、データ型変換が指示されている場合には、元の型を指示された型に変換する。例えば、Ｃ整数型のint型に対して、SystemＣデータ型であるsc_int<24>への変換指示がある場合、int型で定義されている変数は、sc_int<24>型に変換する。尚、モジュールはSystemＣ言語における設計の基本要素となるクラスとされ、プロセス、ポート、チャネル、他のモジュールなどをメンバとして持つ。
【０１０９】
ユーザ定義型生成処理Ｓ１２２では、構造体ポート、構造体信号が生成されることになる場合に、演算子をオーバーロードしたユーザ定義型クラスを生成する。これは、構造体ポートや構造体信号を用いた処理記述で、通常の演算子を使用できるように(コンパイルエラーにならないように)するために必要となる。オーバーロードする演算子としては、”==”、”!=”、 ”=”、 ”^=”、 ”|=”、 ”&=”、 ”<<=”、 ”>>=”、 ”%=”、 ”/=”、 ” *=”、 ”+=”、 ”-=”、 ”+”、 ”-”、 ”++”、 ”--”、 ”<<”、 ”<<”等であり、演算子の内部実装は、構造体の各データメンバに対して、該当演算子の処理を個別に実施する処理となる。
【０１１０】
並行プロセス変換処理Ｓ１２３では、Ｃアルゴリズムからハードウェアモデルの並行プロセス記述を生成する。リセット処理や無限ループ処理を用いて、入出力信号に関わる変数のデータ依存関係を維持しつつハードウェアモデル記述を生成する。この時にハードウェア要素指示データ２０を参照して、データ型変換が指示されている場合には、元の型を指示された型に変換する。データ依存関係はデータ依存関係維持変換処理で生成されたデータ依存関係保存済コード４５２を参照して得ることができる。
【０１１１】
更に、並行プロセス変換処理Ｓ１２３では、記述変換規則としてＣアルゴリズム内に記述された”{}{}”を、クロック境界の記述(SystemＣの場合はwait()コール)に変換する。本情報については、ソースコードの何行目にクロック境界を挿入するかをハードウェア要素指示データ２０から与えることも可能である。Ｃアルゴリズム記述内に、クロック境界を意味するこの記述を埋め込む方が、意味付けの明確化と可読性の向上を見込むことができる。またＣアルゴリズムとして動作させる場合に意味のない処理記述なので、機能動作として弊害が生じることもない。
【０１１２】
記述変換規則として、Ｃアルゴリズム内に記述された//タイプのコメントは、ハードウェアモデルではコメントを無効化して、有効な記述となる。これは、自動変換では対応しきれないハードウェアモデル特有の記述を、Ｃアルゴリズム内にあらかじめ埋め込んでおくことにより、変換を補助する目的で用意したものである。
【０１１３】
テストベンチ生成処理Ｓ１２４では、Ｃアルゴリズム、および生成したシステムレベル記述(ハードウェアモデルデータ)の動作を確認できるテストベンチをそれぞれ生成する。Ｃアルゴリズムとハードウェアモデルデータに対して、同一のランダムテストベクタを入力し、出力結果のログをそれぞれ取得可能である。この出力結果を比較することにより、変換によって生成したハードウェアモデルが、オリジナルのＣアルゴリズム記述と機能的に等価であるかを確認することが可能となる。ハードウェアモデル用のテストベンチは、ハードウェアモデルにポートを介して接続可能なモデルであり、自律動作プロセスを所持する。このプロセスでは、ランダムテストベクタを一定時間間隔で入力ポートに与え、出力ポートから得られる信号値をログファイルに記録する動作を一定回数繰り返す。ハードウェアモデルとテストベンチモデルのインスタンスを作成してポート間接続を行い、シミュレーションを実行する記述も合わせて生成する。一方、Ｃアルゴリズム用のテストベンチは、ランダムテストベクタを生成してアルゴリズム関数を呼び出し、処理結果をログファイルに記録する動作を一定回数繰り返す。
【０１１４】
尚、テストベンチの生成は必須ではない。所定の記述制約を満足し、デバッグにて不都合が解消されたＣアルゴリズム記述に対して自動変換処理Ｓ３が行われれば、テストベンチを用いた評価及び返照を行わなくても、バグのないシステムレベル記述を得ることができる。テストベンチはそのような記述制約が遵守されていなかったりした場合に、全く評価環境が提供さていないことによる不都合に対する予備的なものとされる。
【０１１５】
以上説明した自動変換処理Ｓ３を言語変換処理方法に採用することにより、以下の作用効果を得ることができる。即ち、人手によって開発していたハードウェアモデルの作成工数を大幅に削減できると共に、アルゴリズム記述に対して機能的に等価なバグのないハードウェアモデルを得ることが可能となる。これにより、ハードウェアモデルへの書き換え工数低減のみならず、従来行ってきた、ハードウェアモデルを対象としたコード解析検証やデバッグの工数の削減が可能となり、人手によるバグ混入による信頼性低下も回避可能になる。更に、データ依存関係の生成にCDFG（コントロールデータフローグラフ）を生成する必要がないため、言語変換処理方法の開発コスト低減、変換処理の高速化に資することができる。
【０１１６】
《言語変換処理方法の具体例》
図１６乃至図２３に基づいて上述の言語変換処理方法による処理の更なる具体例について説明する。
【０１１７】
図１６には図６の自動変換処理Ｓ３の入力データとしてＣアルゴリズム記述データ１０、ハードウェア要素指示データ２０を用意する。入力となるＣアルゴリズム記述データは、すでにコード解析検証およびデバッグが完了されているものとする。図１６においてＣアルゴリズム記述データ１０として、ソード部１０ｓとヘッダ部１０ｈが例示される。
【０１１８】
自動変換処理Ｓ３における入出力アクセス解析処理Ｓ３１では、Ｃアルゴリズム記述データ１０におけるグローバル変数in1は入力ポート、グローバル変数out1は出力ポート、グローバル変数sig1およびsig2は信号として認識される。
【０１１９】
自動変換処理Ｓ３におけるデータ依存解析処理Ｓ３２では、図１０の処理フローによって、Ｃアルゴリズム記述データ(ソース部)で使われている変数out1に順データ依存関係があると認識され、図１１に例示されるようなデータ依存関係テーブル４１が生成される。
【０１２０】
自動変換処理Ｓ３におけるデータ依存関係維持変換処理Ｓ３３では図１２の処理フローによって、図１７に例示されるデータ依存関係保存済みコード４２が生成される。
【０１２１】
自動変換処理Ｓ３におけるシステムレベル記述変換処理Ｓ３４では、図１５の処理フローによって、図１８に例示されるハードウェアモデルのクラス定義部、図１９に例示されるユーザ定義型クラス、図２０に例示される並行プロセス、図２１乃至図２３に例示されるテストベンチのコードがそれぞれ生成される。
【０１２２】
図１８においてＤＳ１はポート宣言の記述、ＤＳ２は信号宣言の記述、ＤＳ３は並行プロセスの登録の記述である。並行プロセスの登録では同期スレッドプロセスSC_CTHREADの登録が行われる。図１９においてＤＳ４は演算子のオーバーロードの記述である。図２０においてＤＳ５はリセット処理の記述、ＤＳ６は無限ループの記述である。図２１においてＤＳ７はランダムテストベクタ生成の記述、ＤＳ８は出力結果のログ取得の記述である。図２２においてＤＳ９はハードウェアモデル作成のモジュール記述、ＤＳ１０はテストベンチモデル作成のモジュール記述、ＤＳ１１はハードウェアモデルとテストベンチモデルの接続の記述である。図２３においてＤＳ１２はランダムテストベクタ生成の記述、ＤＳ１３はアルゴリズム関数の呼び出しと出力結果のログ取得の記述である。
【０１２３】
生成されたハードウェアモデルデータ３０は、公知の高位合成手法などによってＲＴＬデータに変換される。
【０１２４】
〔実施の形態２〕
実施の形態２ではハードウェア要素指示データ２０を不要とする言語処理変換方法について説明する。ハードウェア要素指示データ２０を不要とする場合には、Ｃアルゴリズムで用いる変数名、構造体名、関数名への命名規則によって、入出力属性や並行プロセスに関するハードウェア要素の意味付けを行う。例えば以下の命名規則を採用する。
（１）in/out/sigで始まる整数型のグローバル変数は、それぞれ入力ポート・出力ポート・信号とする。
（２）thで始まるグローバル関数は、並行プロセスとする。
【０１２５】
この命名規則を採用するとき図６の自動変換処理Ｓ３は、Ｃアルゴリズム記述１０のみを入力として受け取る。入出力アクセス解析処理Ｓ３１では、Ｃアルゴリズム記述をパースして本命名規則に基づき入出力アクセスの解析を行い、それによる入出力変数解析結果をデータベース４０に保存する。
【０１２６】
図２４に例示されるＣアルゴリズムでは、上記命名規則によって、変数in1は入力ポート、変数out1は出力ポート、変数sig1とsig2は信号となり、関数th_1とth_2は並行プロセスとなる。これ以降の処理は実施の形態１と同様であるからその詳細な説明は省略する。尚、図２４では上記命名規則がコメントとして付記され、記述に対する可読性が考慮されている。
【０１２７】
実施の形態２によれば、実施の形態１と同様に、アルゴリズム記述を、ハードウェア特有の時間や並列処理の概念を表現するシステムレベル記述に変換したとき、前記記述制約を満足するアルゴリズム記述で想定されているデータ依存関係はデータ依存関係維持記述によって維持されるから、アルゴリズム記述からシステムレベル記述に変換されたハードウェアモデルには、アルゴリズム記述に対して既に評価及び検証された結果が反映されることになり、変換されたハードウェアモデルに対して、使用言語が相違されていても、重ねてコード解析やデバッグなどの評価及び検証を行うことを要しない。更にハードウェア要素としてのパラメータについてはその命名規則に基づいて自動的に判別されるから、ハードウェア要素指示データのようなデータは必要ではない。
【０１２８】
〔実施の形態３〕
上述した自動変換処理Ｓ３を制御する言語変換処理プログラムは、特に制限されないが、図７のＤＶＤ９ｄに格納されて提供される。ＤＶＤ９ｄはＤＶＤドライブ９装置を介してワークステーション１によって読み取り可能な情報記録媒体である。特に図示はしないが、言語変換処理プログラムは通信ネットワークを介してワークステーションン１がダウンロードしてもよい。言語変換処理プログラムはワークステーション１の機械語に対応したオブジェクトプログラムとして提供される。言語変換処理プログラムによる制御機能については図１乃至図２４に基づいて説明した上述の自動変換処理Ｓ３を実現すればよい。例えば図６の入出力アクセス解析処理Ｓ３１、データ依存解析処理Ｓ３２、データ依存関係維持変換処理Ｓ３３、及びシステムレベル記述変換処理Ｓ３４を制御する機能を備えればよく、その詳細な説明を重ねて行うことは省略する。
【０１２９】
このような言語変換処理プログラムが提供されることにより、上述の言語変換処理のための自動変換処理Ｓ３を容易に実現可能にすることができる。
【０１３０】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１３１】
例えば、プログラム記述言語はＣ言語に限定されず、ＪＡＶＡ（登録商標）やその他の言語であってよい。それに従って、システム記述言語もSystemＣ言語に限定されず適宜変更可能である。図１６乃至図２４などに例示された記述例は一例であり、プロセスの内容、パラメータの種類、及びパラメータの命名規則などは適宜変更可能である。
【０１３２】
本発明はＳｏＣ開発向けハードウェアモデル（高位合成向け・性能評価向け問わず）全般等に適用可能であり、例えば、携帯電話のアプリケーションチップ、携帯オーディオ、携帯ビデオ、車載オーディオ、車載ビデオ、車載ナビゲーションシステム、暗号システム等を個別に又は複合的に実現する回路モジュール、更にはＬＳＩの開発に広く適用することができる。
【符号の説明】
【０１３３】
１  ワークステーション
ＰＧＭ  言語変換処理プログラム
２  中央処理装置（ＣＰＵ）
３  ワークメモリ
４  補助記憶装置
９  ＤＶＤドライブ
９ｄ  ＤＶＤディスク
１０  Ｃアルゴリズム記述データ
２０  ハードウェア指示データ
３０  ハードウェアモデルデータ
Ｓ３  自動変換処理
Ｓ３１  入出力アクセス解析処理
Ｓ３２  データ依存解析処理
Ｓ３３  データ依存関係維持変換処理
Ｓ３４  システムレベル記述変換処理
４０  入出力変数解析結果のデータベース
４１  データ依存関係テーブル
４２  データ依存関係保存済コードのデータベース
【図１】
0005751669.tif 000002
【図２】
0005751669.tif 000003
【図３】
0005751669.tif 000004
【図４】
0005751669.tif 000005
【図５】
0005751669.tif 000006
【図６】
0005751669.tif 000007
【図７】
0005751669.tif 000008
【図８】
0005751669.tif 000009
【図９】
0005751669.tif 000010
【図１０】
0005751669.tif 000011
【図１１】
0005751669.tif 000012
【図１２】
0005751669.tif 000013
【図１３】
0005751669.tif 000014
【図１４】
0005751669.tif 000015
【図１５】
0005751669.tif 000016
【図１６】
0005751669.tif 000017
【図１７】
0005751669.tif 000018
【図１８】
0005751669.tif 000019
【図１９】
0005751669.tif 000020
【図２０】
0005751669.tif 000021
【図２１】
0005751669.tif 000022
【図２２】
0005751669.tif 000023
【図２３】
0005751669.tif 000024
【図２４】
0005751669.tif 000025