(57)【要約】【課題】  既存のプログラミング言語を入力とするハードウェア設計において、同言語で記述不可能であった特殊ハードウェアモジュールを記述可能とするコンパイラ装置を提供する。【解決手段】  ヘッダファイル２４には、プログラミング言語で記述不可能な特殊ハードウェアが定義されており、ソースプログラム２２を構文解析するパーサー部３０と、構文解析されたソースプログラム２２を中間コードに変換する中間コード変換部３２と、中間コードをＲＴＬ記述に変換するコード生成部３６とを備え、中間コード変換部３２は、ソースプログラム２２からヘッダファイル２４で定義された特殊ハードウェアを検出する検出部４０と、検出部４０で検出された特殊ハードウェアを特殊ハードウェアに対応する中間コードに置換する置換部４２とを備える。【選択図】  図１
2005284577.tif 000002
【特許請求の範囲】
【請求項１】
プログラミング言語で記述されたソースプログラムと前記ソースプログラムにインクルードされるヘッダファイルとをハードウェア記述言語のＲＴＬ（Register Transfer Level）記述に翻訳するコンパイル方法であって、
前記ヘッダフィルには、前記プログラミング言語で記述不可能な特殊ハードウェアが定義されており、
前記ソースプログラムを構文解析するパーサーステップと、
構文解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記中間コードをＲＴＬ記述に変換するＲＴＬ記述変換ステップとを含み、
前記中間コード変換ステップは、
前記ソースプログラムから、前記ヘッダファイルに定義された前記特殊ハードウェアを検出する検出ステップと、
前記検出ステップで検出された前記特殊ハードウェアを当該特殊ハードウェアに対応する中間コードに置換する置換ステップとを含む
ことを特徴とするコンパイル方法。
【請求項２】
前記ヘッダファイルには、前記特殊ハードウェアである入出力インタフェース型を定義するクラスが定義され、
前記検出ステップでは、前記入出力インタフェース型のデータを検出する
ことを特徴とする請求項１に記載のコンパイル方法。
【請求項３】
前記入出力インタフェース型として、入力インタフェース型および出力インタフェース型を備える
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項４】
前記クラスのメソッドは、前記入出力インタフェース型のデータを被演算対象とする演算子を定義するメソッドであり、
前記検出ステップでは、前記クラスのメソッドの定義と一致する演算子と当該演算子による被演算対象となるデータとを検出し、
前記置換ステップでは、検出された前記演算子と前記データとを、対応する特殊ハードウェアの中間コードに置換する
ことを特徴とする請求項２に記載のコンパイル方法。
【請求項５】
前記ヘッダファイルには、前記特殊ハードウェアを用いて演算を行なう特殊演算命令を定義する特殊演算関数が定義され、
前記検出ステップでは、前記特殊演算関数の定義と一致する関数を検出し、
前記置換ステップでは、検出された前記関数を、対応する特殊ハードウェアの中間コードに置換する
ことを特徴とする請求項１に記載のコンパイル方法。
【請求項６】
さらに、所定の指示情報に基づいて、前記置換ステップで得られる前記特殊ハードウェアの中間コードを、当該特殊ハードウェアをＲＴＬ記述に変換するか否かを判定する判定ステップを含み、
前記ＲＴＬ記述変換ステップは、前記判定ステップでの判定結果に基づいて、前記中間コードを前記ＲＴＬ記述に変換する
ことを特徴とする請求項１〜５のいずれか１項に記載のコンパイル方法。
【請求項７】
前記所定の指示情報には、前記ＲＴＬ記述に対応するハードウェアの回路面積を重視する指示が含まれる
ことを特徴とする請求項６に記載のコンパイル方法。
【請求項８】
前記判定ステップは、前記所定の指示情報が前記回路面積を重視する指示の場合には、前記特殊ハードウェアと、当該特殊ハードウェア以外の他のハードウェアとを重ね合わせたＲＴＬ記述を生成するとの判定を行い、
前記ＲＴＬ記述変換ステップでは、当該判定ステップでの判定結果に従い、前記ＲＴＬ記述を生成する
ことを特徴とする請求項７に記載のコンパイル方法。
【請求項９】
前記所定の指示情報には、前記ＲＴＬ記述に対応するハードウェアの動作速度を重視する指示が含まれ、
前記判定ステップは、前記所定の指示情報が前記動作速度を重視する指示の場合には、前記特殊ハードウェアに対応するＲＴＬ記述を生成するとの判定を行ない、
前記ＲＴＬ記述変換ステップでは、当該判定ステップでの判定結果に従い、前記ＲＴＬ記述を生成する
ことを特徴とする請求項６に記載のコンパイル方法。
【請求項１０】
請求項１〜９のいずれか１項に記載のコンパイル方法に含まれるステップをコンピュータに実行させる
ことを特徴とするコンパイラ。
【請求項１１】
請求項１０に記載のコンパイラを記録した
ことを特徴とするコンピュータ読取可能な記録媒体。
【請求項１２】
プログラミング言語で記述されたソースプログラムと前記ソースプログラムにインクルードされるヘッダファイルとをＲＴＬ（Register Transfer Level）記述に翻訳するコンパイラ装置であって、
前記ヘッダフィルには、前記プログラミング言語で記述不可能な特殊ハードウェアが定義されており、
前記ソースプログラムを構文解析するパーサー手段と、
構文解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
前記中間コードをＲＴＬ記述に変換するＲＴＬ記述生成手段とを含み、
前記中間コード変換手段は、
前記ソースプログラムから、前記ヘッダファイルに定義された前記特殊ハードウェアを検出する検出部と、
前記検出部で検出された前記特殊ハードウェアを当該特殊ハードウェアに対応する中間コードに置換する置換部とを備える
ことを特徴とするコンパイラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラに関し、特に、高級言語で記述されたソースプログラムをハードウェア記述言語のＲＴＬ（Register Transfer Level）記述に変換するコンパイラに関する。
【背景技術】
【０００２】
既存のプログラミング言語で記述されたソースプログラムを入力とするハードウェア設計においては、同言語で直接記述することが不可能な特殊ハードウェアモジュール(特殊演算器や入出力インタフェースを実現するための特殊ハードウェア)が存在する。従来、ソースプログラム中に特殊ハードウェアモジュールが使用されているか否かは、ソースプログラムを変換した中間コードから推定しなければならない。
【０００３】
一方、既存のプログラミング言語を入力とするソフトウェア開発においては、関数を用いて特殊演算命令を生成する方法が知られている（例えば、特許文献１参照。）。しかし、ハードウェア設計においてはそのような方法は知られていない。
【特許文献１】特開２０００−５６９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述のように、既存のプログラミング言語を入力とするハードウェア設計では、同言語で直接記述することが不可能な特殊ハードウェアモジュールを中間コードから推定していた。しかし、特殊ハードウェアモジュールの推定は困難であり、それゆえ回路面積が大きいなどの非効率な回路が生成される恐れがある。また、特許文献１に開示されている方法は、ハードウェア設計を想定したものではない。このため、この方法では、回路面積等を考慮した最適化が施されておらず、この方法を直接ハードウェア設計に用いることはできない。
【０００５】
本発明は上述の課題を解決するためになされたもので、既存のプログラミング言語を入力とするハードウェア設計において、同言語で記述不可能であった特殊ハードウェアモジュールを記述可能とするコンパイラを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明にかかるコンパイル方法は、プログラミング言語で記述されたソースプログラムと前記ソースプログラムにインクルードされるヘッダファイルとをハードウェア記述言語のＲＴＬ（Register Transfer Level）記述に翻訳するコンパイル方法であって、前記ヘッダフィルには、前記プログラミング言語で記述不可能な特殊ハードウェアが定義されており、前記ソースプログラムを構文解析するパーサーステップと、構文解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記中間コードをＲＴＬ記述に変換するＲＴＬ記述変換ステップとを含み、前記中間コード変換ステップは、前記ソースプログラムから、前記ヘッダファイルに定義された前記特殊ハードウェアを検出する検出ステップと、前記検出ステップで検出された前記特殊ハードウェアを当該特殊ハードウェアに対応する中間コードに置換する置換ステップとを含む。
【０００７】
ヘッダファイル内で定義された特殊ハードウェアが中間コードに置換され、ハードウェア記述言語のＲＴＬ記述が生成される。このため、ユーザは、プログラミング言語を用いて、特殊ハードウェアに関する記述をソースプログラム中に記述することができる。
【０００８】
好ましくは、前記ヘッダファイルには、前記特殊ハードウェアである入出力インタフェース型を定義するクラスが定義され、前記検出ステップでは、前記入出力インタフェース型のデータを検出する。前記入出力インタフェース型として、入力インタフェース型および出力インタフェース型を備えていてもよい。また、前記クラスのメソッドは、前記入出力インタフェース型のデータを被演算対象とする演算子を定義するメソッドであり、前記検出ステップでは、前記クラスのメソッドの定義と一致する演算子と当該演算子による被演算対象となるデータとを検出し、前記置換ステップでは、検出された前記演算子と前記データとを、対応する特殊ハードウェアの中間コードに置換するようにしてもよい。
【０００９】
入出力型インタフェース型のクラスを定義されることにより、入出力インタフェース型を汎用の型の演算と同様に扱うことができる。このため、ユーザは、通常のプログラミング言語と同様に、プログラミングを容易に行なうことができ、ＲＴＬ記述の生成効率を向上させることができる。
【００１０】
また、前記ヘッダファイルには、前記特殊ハードウェアを用いて演算を行なう特殊演算命令を定義する特殊演算関数が定義され、前記検出ステップでは、前記特殊演算関数の定義と一致する関数を検出し、前記置換ステップでは、検出された前記関数を、対応する特殊ハードウェアの中間コードに置換するようにしてもよい。
【００１１】
特殊演算命令がヘッダファイルに定義されてため、特殊演算命令に対応するＲＴＬ記述の生成効率を向上させることができる。
さらに好ましくは、上述のコンパイル方法は、さらに、所定の指示情報に基づいて、前記置換ステップで得られる前記特殊ハードウェアの中間コードを、当該特殊ハードウェアをＲＴＬ記述に変換するか否かを判定する判定ステップを含み、前記ＲＴＬ記述変換ステップは、前記判定ステップでの判定結果に基づいて、前記中間コードを前記ＲＴＬ記述に変換する。前記所定の指示情報には、前記ＲＴＬ記述に対応するハードウェアの回路面積を重視する指示が含まれていてもよい。また、前記判定ステップは、前記所定の指示情報が前記回路面積を重視する指示の場合には、前記特殊ハードウェアと、当該特殊ハードウェア以外の他のハードウェアとを重ね合わせたＲＴＬ記述を生成するとの判定を行い、前記ＲＴＬ記述変換ステップでは、当該判定ステップでの判定結果に従い、前記ＲＴＬ記述を生成するようにしてもよい。
【００１２】
回路面積を重視の指示を行なうことにより、特殊ハードウェアとそれ以外のハードウェアとを重ね合わせたＲＴＬ記述が生成される。このため、回路面積を小さくしたＲＴＬ記述が生成される。
【００１３】
さらに好ましくは、前記所定の指示情報には、前記ＲＴＬ記述に対応するハードウェアの動作速度を重視する指示が含まれ、前記判定ステップは、前記所定の指示情報が前記動作速度を重視する指示の場合には、前記特殊ハードウェアに対応するＲＴＬ記述を生成するとの判定を行ない、前記ＲＴＬ記述変換ステップでは、当該判定ステップでの判定結果に従い、前記ＲＴＬ記述を生成する。
【００１４】
ハードウェアの動作速度を重視する際には、特殊ハードウェアのＲＴＬ記述が生成される。これにより、特殊ハードウェアを専用回路とするハードウェアが生成され、動作速度を向上させることができる。
【発明の効果】
【００１５】
本発明によると、既存のプログラミング言語を入力とするハードウェア設計において、同言語で記述不可能であった特殊ハードウェアモジュールを記述可能とするコンパイラを提供することができる。
【００１６】
また、入出力インタフェース型を汎用の型の演算と同様に扱うことができる。
さらに、特殊演算命令に対応するＲＴＬ記述の生成効率を向上させることができる。
さらにまた、ユーザの指示により、回路面積が小さいＲＴＬ記述を生成することができる。これに伴い、消費される電力が削減される。また、ユーザの指示により、動作速度が速いＲＴＬ記述を生成することもできる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態に係るコンパイラ装置について図面を参照しながら説明する。
図１は、本発明の実施の形態に係るコンパイラ装置の構成を示す図である。
［コンパイラ装置の構成］
コンパイラ装置２８は、ハードウェアの動作をプログラミング言語で記述したソースプログラム２２を、ＲＴＬ（Register Transfer Level）記述に変換する装置であり、パーサー部３０と、中間コード変換部３２と、最適化部３４と、コード生成部３６とを備えている。コンパイラ装置２８はコンピュータ上で実行されるＨＬＳ（High-Level Synthesis）コンパイラとして実現され、コンパイラ装置２８の各処理部は、コンパイラに含まれるモジュールまたはステップに対応する。
【００１８】
パーサー部３０は、ヘッダファイル２４をソースプログラム２２にインクルードし、ソースプログラム２２を構文解析する処理部である。
ここで、ヘッダファイル２４には、入出力インタフェース型を定義するクラスが定義され、クラスのメソッドには、入出力インタフェース型のデータを対象とする演算子が定義されているものとする。また、ヘッダファイル２４には、特殊演算器を用いた特殊演算命令を定義する関数（以下、「特殊演算関数」という。）も定義されているものとする。ソースプログラム２２には、これらの入出力インタフェース型、および特殊演算関数を用いたプログラムが記述されているものする。
【００１９】
中間コード変換部３２は、構文解析されたソースプログラム２２を中間コードに変換する処理部である。
最適化部３４は、後述する特殊ハードウェア代用テーブル２６に記述されたテーブルに基づいて、中間コードを最適化する処理部である。特殊ハードウェア代用テーブル２６には、特殊ハードウェア（特殊演算器や入出力インタフェース）と通常のハードウェアとの関係が示されている。図２は、特殊ハードウェア代用テーブル２６の一例を示す図である。図２には、一例として、特殊ハードウェア「積和演算器」は、通常のハードウェア「加算器」と「乗算器」とで代用可能であることが示されている。なお、図２では、「積和演算器」、「加算器」および「乗算器」をそれぞれ「ＯＰＭＡＣ」、「ＯＰＡＤＤ」および「ＯＰＭＵＬ」と表しており、以下に説明する図面中でも適宜これらの記号を用いるものとする。
【００２０】
コード生成部３６は、最適化された中間コードをＲＴＬ記述に変換する処理部３６である。
中間コード変換部３２は、検出部４０と、置換部４２とを備えている。上述のように、ヘッダファイル２４には、入出力インタフェースおよび特殊演算器等の特殊ハードウェアが定義されている。検出部４０は、ソースプログラム２２中において、ヘッダファイル２４で定義された入出力インタフェース型の演算子または特殊演算器を使用する特殊演算関数が参照されているか否かを検出する。すなわち、検出部４０は、演算子と演算の対象となるデータの型との組、または関数と演算の対象となるデータの型との組が、ヘッダファイル２４に記述されたメソッドでの定義と一致するか否かによって、入出力インタフェース型演算を行っているソースコードまたは特殊演算関数を用いたソースコードを検出する。
【００２１】
置換部４２は、検出部４０で当該演算子または当該特殊演算関数を参照していると検出された場合に、入出力インタフェース型演算を行っているソースコードまたは特殊演算関数を用いたソースコードを、対応する特殊ハードウェアを表す中間コード（以下、「特殊ハードウェア中間コード」という。）に置換する。また、それ以外のソースコードも通常の中間コードに変換する。
【００２２】
最適化部３４は、判定部４４と、最適化実施部４６とを備えている。
判定部４４は、置換部４２で置き換えられた特殊ハードウェア中間コードを、そのまま特殊ハードウェアとしてＲＴＬ記述に翻訳するか否かを判定する。また、判定部４４では、動作速度を重視するか、回路面積を重視するかを示すコンパイルオプションまたはプラグマ等に基づいて、置換部４２で得られた特殊ハードウェア中間コードを、他のハードウェアと重ね合わせるか否かも判定する。
【００２３】
最適化実施部４６は、特殊ハードウェア中間コードを含む中間コードを対象として最適化処理を実施する。最適化実施部４６の実施する最適化処理は、ＨＳＬコンパイラにおける一般的な最適化処理である。このため、その詳細な説明はここでは繰返さない。
【００２４】
［コンパイラ装置の処理］
次に、コンパイラ装置２８が実行する処理について説明する。
【００２５】
図３は、コンパイラ装置２８が実行する処理のフローチャートである。パーサー部３０は、ソースプログラム２２およびヘッダファイル２４を読み込み、構文解析処理を行なう（Ｓ２）。検出部４０は、ソースプログラム２２中において、ヘッダファイル２４で定義された入出力インタフェース型の演算子または特殊演算器を使用する特殊演算関数が参照されているか否かを検出する（Ｓ４）。置換部４２は、入出力インタフェース型演算を行っているソースコードまたは特殊演算関数を用いたソースコードを、対応する特殊ハードウェア中間コードに置換する。置換部４２は、また、それ以外のソースコードを中間コードに変換する（Ｓ６）。
【００２６】
ここで、検出処理（Ｓ４）および置換処理（Ｓ６）について具体例を挙げながら説明する。
図４は、検出処理（図３のＳ４）および置換処理（図３のＳ６）について説明するための図であり、（ａ）は、ソースプログラムの一例を示す図であり、（ｂ）は、ヘッダファイルの一例を示す図であり、（ｃ）は、中間コードを木構造で表した図である。
【００２７】
図４（ｂ）に示されるように、入力インタフェース型のクラス「ｉｎｐｕｔ８＿ｔ」が定義されており、クラスのメソッドとして、入力インタフェース型のデータを対象とする演算子「＋＝」が定義されている。
【００２８】
検出部４０は、ヘッダファイル５４で定義されている演算子「＋＝」および当該演算子による演算の対象となるデータの型「ｉｎｐｕｔ８＿ｔ」と一致するソースプログラム５２中の演算子「＋＝」を検出する。
【００２９】
通常、ヘッダファイル５４で定義される演算子は関数呼び出しとなるが、検出部４０で検出された演算子「＋＝」は、置換部４２において演算子「＋＝」を示す特殊ハードウェア中間コード５６に変換される。特殊ハードウェア中間コード５６は、「ａ」と「ｂ」とが入力インタフェース型の変数であり、「＋＝」という演算が行なわれることを示している。
【００３０】
図５は、検出処理（図３のＳ４）および置換処理（図３のＳ６）について説明するための他の図であり、（ａ）は、ソースプログラムの一例を示す図であり、（ｂ）は、ヘッダファイルの一例を示す図であり、（ｃ）は、中間コードを木構造で表した図である。
【００３１】
図５（ｂ）に示されるように、入力インタフェース型のクラス「ｉｎｐｕｔ８＿ｔ」が定義されており、クラスのメソッドとして、入力インタフェース型のデータを対象とする特殊演算関数「ｍａｃ」が定義されている。
【００３２】
検出部４０は、ヘッダファイル６４で定義されている特殊演算関数「ｍａｃ」および当該特殊演算関数「ｍａｃ」の入力データの型「ｉｎｐｕｔ８＿ｔ」と一致するソースプログラム６２中の特殊演算関数「ｍａｃ」を検出する。
【００３３】
通常、ヘッダファイル６４で定義された関数は関数呼び出しとなるが、検出部４０で検出された特殊演算関数「ｍａｃ」は、置換部４２において、積和演算を示す特殊ハードウェア中間コード６６に変換される。特殊ハードウェア中間コード６６は、ａとｂとｃとが入力インタフェース型の変数であり、それらの変数を引数として特殊演算関数「ｍａｃ」が呼び出されることを示している。
【００３４】
次に、判定部４４は、置換部４２で置き換えられた特殊ハードウェア中間コードを、そのまま特殊ハードウェアとしてＲＴＬ記述に翻訳するか否かを判定する。また、判定部４４では、動作速度を重視するか、回路面積を重視するかを示すコンパイルオプションまたはプラグマ等に基づいて、置換部４２で得られた特殊ハードウェア中間コードを、他のハードウェアと重ね合わせるか否かも判定する（図３のＳ８）。判定処理（Ｓ８）の詳細については、後述する。
【００３５】
その後、最適化実施部４６は、ＨＳＬコンパイラにおける一般的な最適化処理を行う（Ｓ１０）。コード生成部３６は、最適化された中間コードをＲＴＬ記述３８に変換する（Ｓ１２）。
【００３６】
次に、判定処理（Ｓ８）の詳細について説明する。図６は、判定処理の詳細を示すフローチャートである。
判定部４４は、置換部４２で置換された中間コードのうち、特殊ハードウェアについて、以下に示す処理を行う。すなわち、判定部４４は、特殊ハードウェアが特殊演算命令であるか否かの判定を行なう（Ｓ２１）。特殊ハードウェアが特殊演算命令でなければ（Ｓ２１でＮＯ）、そのハードウェアは入出力インタフェースに関するものである。このため、当該ハードウェアを通常のハードウェアとしてＲＴＬ記述を生成することを決定する（Ｓ２７）。
【００３７】
特殊ハードウェアが特殊演算命令であれば（Ｓ２１でＹＥＳ）、判定部４４は、コンパイル時に設定されたオプションの判定を行う（Ｓ２２）。オプションには、回路の低面積化を優先する回路面積重視オプションと、動作速度の向上を優先とする動作速度重視オプションとがある。オプションの指定がない場合には動作速度重視オプションが指定された場合と同様の動きをするものとする。
【００３８】
動作速度重視オプションの指定がなされている場合、またはオプションの指定がない場合には（Ｓ２２で動作速度重視／オプション指定なし）、判定部４４は、置換部４２で生成された特殊ハードウェア中間コードを、そのまま特殊ハードウェアとしてＲＴＬ記述を生成することを決定する（Ｓ２３）。
【００３９】
回路面積重視オプションが指定されている場合には（Ｓ２２で回路面積重視）、判定部４４は、特殊ハードウェアと他のハードウェアとを重ねることが可能であるか否かを判定する（Ｓ２４）。ここで、「特殊ハードウェアと他のハードウェアとを重ねる」とは、「特殊ハードウェアを他のハードウェアで代用する」こと、または「他のハードウェアを特殊ハードウェアで代用する」ことを表す。特殊ハードウェアと他のハードウェアとを重ねることが可能であるか否かの判定方法については、図７を参照して後述する。
【００４０】
特殊ハードウェアを他のハードウェアで代用することが可能であると判定された場合には（Ｓ２４で特殊ＨＷを他のＨＷで代用することが可能）、判定部４４は、特殊ハードウェアを他のハードウェアと重ねてＲＴＬ記述を生成することを決定する（Ｓ２５）。
【００４１】
他のハードウェアを特殊ハードウェアで代用することが可能であると判定された場合には（Ｓ２４で他のＨＷを特殊ＨＷで代用することが可能）、判定部４４は、他のハードウェアを特殊ハードウェアと重ねてＲＴＬ記述を生成することを決定する（Ｓ２６）。
【００４２】
特殊ハードウェアと他のハードウェアとを重ね合わせることができないと判定された場合には（Ｓ２４で代用不可能）、判定部４４は、置換部４２で生成された特殊ハードウェア中間コードを、そのまま特殊ハードウェアとしてＲＴＬ記述を生成することを決定する（Ｓ２３）。
【００４３】
次に、重ね合わせ判定処理（Ｓ２４）について説明する。図７は、特殊ハードウェアと他のハードウェアとを重ねることが可能であるかの判定処理（図６のＳ２４）のフローチャートである。
【００４４】
判定部４４は、ソースプログラム２２から、特殊ハードウェアを使用した演算命令を抽出する（Ｓ３１）。このステップでは、判定部４４は、置換部４２で生成された中間コードのうち、特殊ハードウェア中間コードを抽出することにより、特殊ハードウェアを使用した演算命令を抽出する。
【００４５】
判定部４４は、演算命令抽出処理（Ｓ３１）で抽出された演算命令で使用される特殊ハードウェアの代用が可能な代用ハードウェアを検出する（Ｓ３２）。判定部４４は、特殊ハードウェア代用テーブル２６を参照することにより、この処理を行なう。例えば、特殊ハードウェアが中間コード６６に示した「積和演算器」である場合には、図２に示す特殊ハードウェア代用テーブル２６により、特殊ハードウェア「積和演算器」の代用ハードウェアとして、代用ハードウェア「加算器」および「乗算器」が検出される。
【００４６】
判定部４４は、代用ハードウェアの検出処理（Ｓ３２）で検出された代用ハードウェアが、ソースプログラム２２中ですべて使用されているか否かを判定する（Ｓ３３）。すなわち、判定部４４は、置換部４２で生成された中間コードの中に、代用ハードウェアを表す中間コードがすべて存在するか否かを判定することにより、代用ハードウェアが、ソースプログラム２２中ですべて使用されているか否かの判定を行う。
【００４７】
代用ハードウェアがすべて使用されていると判定された場合には（Ｓ３３でＹＥＳ）、判定部４４は、代用ハードウェアを使用している演算命令を抽出する（Ｓ３４）。すなわち、判定部４４は、置換部４２で生成された中間コードのうち、代用ハードウェアを使用する中間コードを抽出することにより、代用ハードウェアを使用している演算命令を抽出する。
【００４８】
判定部４４は、特殊ハードウェア抽出処理（Ｓ３１）で抽出された特殊ハードウェアを使用した演算命令と、代用ハードウェア抽出処理（Ｓ３４）で抽出された代用ハードウェアを使用した演算命令とが同時実行する場合があるか否かを判定する（Ｓ３５）。
【００４９】
両ハードウェアが同時実行される場合がある場合には（Ｓ３５でＹＥＳ）、判定部４４は、演算命令が同時実行されている箇所を抽出し、その箇所の代用ハードウェアを使用している演算を移動させる（Ｓ３６）。これにより、同じ処理を行なうハードウェアを複数持つ必要がないようにする。図８は、演算の移動の一例を説明するための図であり、（ａ）は、特殊ハードウェアと代用ハードウェアとが同時実行される場合のニーモニックコードの一例を示しており、（ｂ）は、両ハードウェアが同時実行されないように演算を移動した後のニーモニックコードを示す図である。図８（ａ）および図８（ｂ）中、「；；」は並列実行の区切りを示すものとする。すなわち、図８（ａ）は、特殊演算関数「ｍａｃ」とその代用命令「ｍｕｌ」とが同時実行されることを示している。このため、図８（ｂ）に示されるように代用命令「ｍｕｌ」を移動させ、特殊演算関数「ｍａｃ」と代用命令「ｍｕｌ」とが同時実行されないようにする。
【００５０】
両ハードウェアが同時実行される場合がない場合（Ｓ３５でＮＯ）、または演算移動処理（Ｓ３６）を行なうことにより両ハードウェアが同時実行されることがなくなった場合には、判定部４４は、「特殊ハードウェアを他のハードウェアで代用することができる」との判定を行なう（Ｓ３７）。その後、ＲＴＬ記述生成処理（図６のＳ２５）が実行される。
【００５１】
代用ハードウェアの検出処理（Ｓ３２）で検出された代用ハードウェアのうち、ソースプログラム２２中で使用されていないものがある場合には（Ｓ３３でＮＯ）、判定部４４は、当該代用ハードウェアの一部がソースプログラム２２で使用されているか否かを判定する（Ｓ３８）。
【００５２】
代用ハードウェアの一部がソースプログラム２２で使用されていると判定された場合には（Ｓ３８でＹＥＳ）、判定部４４は、代用ハードウェアを使用している演算命令を抽出する（Ｓ３９）。すなわち、判定部４４は、置換部４２で生成された中間コードのうち、代用ハードウェアの中間コードを抽出することにより、代用ハードウェアを使用した演算命令を抽出する。
【００５３】
その後、判定部４４は、特殊ハードウェア抽出処理（Ｓ３１）で抽出された特殊ハードウェアを使用した演算命令と、代用ハードウェア抽出処理（Ｓ３９）で抽出された代用ハードウェアを使用した演算命令とが同時実行される場合があるかを判定する（Ｓ４０）。
【００５４】
両ハードウェアが同時実行される場合がある場合には（Ｓ４０でＹＥＳ）、判定部４４は、演算命令が同時実行されている箇所を抽出し、その箇所の代用ハードウェアを使用している演算を移動させる（Ｓ４１）。これにより、同じ処理を行なうハードウェアを複数持つ必要がないようにする。
【００５５】
両ハードウェアが同時実行される場合がない場合（Ｓ４０でＮＯ）、または演算移動処理（Ｓ４１）を行なうことにより両ハードウェアが同時実行されることがなくなった場合には、判定部４４は、「他のハードウェアを特殊ハードウェアで代用することができる」との判定を行なう（Ｓ４２）。その後、ＲＴＬ記述生成処理（図６のＳ２６）が実行される。このようにすることにより、特殊ハードウェアを代用ハードウェアで代用する場合に比べて回路面積を小さくすることができる。
【００５６】
代用ハードウェアの検出処理（Ｓ３２）で検出された代用ハードウェアが、ソースプログラム２２中で全く使用されていない場合には（Ｓ３８でＮＯ）、判定部４４は、「代用不可能」との判定を行なう（Ｓ４３）。その後、特殊ハードウェアのＲＴＬ記述生成処理（図６のＳ２３）が実行される。
【００５７】
次に、上述のコンパイラ装置を用いて生成されたＲＴＬ記述の例について説明する。図９は、ソースプログラムと当該ソースプログラムを変換した後のＲＴＬ記述の一例を示す図である。
【００５８】
図９（ａ）に示すように、ソースプログラム７２が入力として与えられるものとする。ソースプログラム７２は、特殊ハードウェアを用いた演算と、そのすべての代用ハードウェアを使用する演算とが記述されたソースプログラムの一例である。すなわち、ソースプログラム７２中では、入力インタフェースまたは出力インタフェースとして変数ａ，ｂ，ｃ，ｄ，ｅおよびｆが使用されている。また、ソースプログラム７２には、特殊演算関数「ｍａｃ」の他に、加算器を１つ使用する「ｄ＝ａ＋ｂ；」という文と、乗算器を１つ使用する「ｆ＝ｂ＊ｃ；」という文とが定義されている。ここで、図２に示した特殊ハードウェア代用テーブル２６より特殊演算関数「ｍａｃ」を実行するために必要な特殊ハードウェアは、加算器と乗算器とがそれぞれ１つずつであることが示されている。このため、特殊ハードウェアは加算器および乗算器で代用可能である。
【００５９】
図９（ｂ）は、コンパイラ装置２８に対して動作速度重視オプションの指定がなされている場合、またはオプションの指定がない場合に、ソースプログラム７２を入力として生成されるＲＴＬ記述を図示したものである。この場合には、積和演算器「ＭＡＣ」を加算器「ＡＤＤ」および乗算器「ＭＵＬ」で代用可能であるが、積和演算器「ＭＡＣ」が生成されている。このため、回路面積は大きくなるものの、加算、乗算および積和演算を並列に実行することができ、かつ積和演算を専用のハードウェアで実現している。このため、動作速度が向上する。なお、入力インタフェース型のクラスまたは出力インタフェース型のクラスの変数ａ，ｂ，ｃ，ｄ，ｅおよびｆは、入出力バス７８に接続されている。
【００６０】
図９（ｃ）は、コンパイラ装置２８に対して回路面積重視オプションの指定がなされている場合に、ソースプログラム７２を入力として生成されるＲＴＬ記述を図示したものである。この場合には、上述したように積和演算器を加算器「ＡＤＤ」および乗算器「ＭＵＬ」で代用可能である。このため、積和演算器を加算器「ＡＤＤ」および乗算器「ＭＵＬ」で代用することにより回路面積の削減を図っている。なお、積和演算を実現するために中間的に生成される変数ｔｍｐは、入出力インタフェース型ではない。このため、入出力バス８４には接続されない。よって、さらに、回路面積を小さくすることができる。
【００６１】
図１０は、ソースプログラムと当該ソースプログラムを変換した後のＲＴＬ記述の他の一例を示す図である。
図１０（ａ）に示すように、ソースプログラム９２が入力として与えられるものとする。ソースプログラム９２は、特殊ハードウェアを用いた演算と、そのうち部の代用ハードウェアを使用する演算とが記述されたソースプログラムの一例である。すなわち、ソースプログラム９２中では、入力インタフェースまたは出力インタフェースとして変数ａ，ｂ，ｃ，ｄおよびｅが使用されている。また、ソースプログラム９２には、特殊演算関数「ｍａｃ」の他に、乗算器を１つ使用する「ｄ＝ａ＊ｂ；」という文が定義されている。上述のように、特殊演算関数「ｍａｃ」は加算器と乗算器とで代用可能である。このため、特殊演算関数「ｍａｃ」の代用ハードウェアの一部のみが使用されている。
【００６２】
図１０（ｂ）は、コンパイラ装置２８に対して動作速度重視オプションの指定がなされている場合、またはオプションの指定がない場合に、ソースプログラム９２を入力として生成されるＲＴＬ記述を図示したものである。この場合には、特殊ハードウェアのＲＴＬ記述９４が生成される（図６のＳ２３）。このため、積和演算が積和演算器「ＭＡＣ」で実行される。よって、動作速度が向上する。
【００６３】
図１０（ｃ）は、コンパイラ装置２８に対して回路面積重視オプションの指定がなされている場合に、ソースプログラム９２を入力として生成されるＲＴＬ記述を図示したものである。ソースプログラム９２によると、乗算と積和演算とは同時実行されない。このため、乗算器を積和演算器「ＭＡＣ」で代用させるようなＲＴＬ記述１００が生成される。この場合、乗算器が生成されない。このため、回路面積が削減される。
【００６４】
以上説明したように、本発明の実施の形態によれば、既存のプログラミング言語で記述不可能であった特殊ハードウェアモジュールを記述可能としている。また、コンパイラ内部で特殊ハードウェアモジュールを直接解析する仕組みを導入している。このため、特殊ハードウェアモジュールの生成および特殊ハードウェアモジュールを考慮に入れた最適化を行なうことが可能となる。
【産業上の利用可能性】
【００６５】
本発明は、ソースプログラムからＲＴＬ記述を生成するＨＬＳコンパイラに適用でき、特に、特殊なハードウェアを生成するためのＨＬＳコンパイラ等に適用できる。
【図面の簡単な説明】
【００６６】
【図１】本発明の実施の形態に係るコンパイラ装置の構成を示す図である。
【図２】特殊ハードウェア代用テーブルの一例を示す図である。
【図３】コンパイラ装置が実行する処理のフローチャートである。
【図４】検出処理（図３のＳ４）および置換処理（図３のＳ６）について説明するための図である。
【図５】検出処理（図３のＳ４）および置換処理（図３のＳ６）について説明するための他の図である。
【図６】判定処理の詳細を示すフローチャートである。
【図７】特殊ハードウェアと他のハードウェアとを重ねることが可能であるかの判定処理（図６のＳ２４）のフローチャートである。
【図８】演算の移動の一例を説明するための図である。
【図９】ソースプログラムと当該ソースプログラムを変換した後のＲＴＬ記述の一例を示す図である。
【図１０】ソースプログラムと当該ソースプログラムを変換した後のＲＴＬ記述の他の一例を示す図である。
【符号の説明】
【００６７】
２２  ソースプログラム
２４  ヘッダファイル
２６  特殊ハードウェア代用テーブル
２８  コンパイラ装置
３０  パーサー部
３２  中間コード変換部
３４  最適化部
３６  コード生成部
３８  ＲＴＬ記述
４０  検出部
４２  置換部
４４  判定部
４６  最適化実施部
【図１】
2005284577.tif 000003
【図２】
2005284577.tif 000004
【図３】
2005284577.tif 000005
【図４】
2005284577.tif 000006
【図５】
2005284577.tif 000007
【図６】
2005284577.tif 000008
【図７】
2005284577.tif 000009
【図８】
2005284577.tif 000010
【図９】
2005284577.tif 000011
【図１０】
2005284577.tif 000012