(57)【要約】【課題】ソースプログラム毎にＦＰＧＡの回路を設計する必要がなく、ソースプログラムを高速に演算可能で、ＦＰＧＡの回路規模を最小に抑えるコンパイラ装置および半導体集積回路装置を提供する。【解決手段】ソースプログラムのコンパイル時に、処理内容毎に設計した回路情報を複数格納した回路情報ライブラリ６を参照し、構成サイクル数および実行サイクル数が最小となるようＦＰＧＡ１４とプロセッサ１２で実行する処理内容に切り分け、ＦＰＧＡ実行命令とＦＰＧＡ構成命令をプログラムに組み込んで実行プログラムを生成し、ＦＰＧＡ実行命令が必要とする回路情報を回路情報ライブラリ６より抽出して回路情報保持構成制御手段１３に格納し、プロセッサ１２がＦＰＧＡ構成命令を実行すると動的に回路情報を回路情報保持構成制御手段１３によりＦＰＧＡ１４に組み込み構成させ、ＦＰＧＡ実行命令を実行すると処理内容をＦＰＧＡ１４で実行する。【選択図】図１
2008059066.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサが実行するもので実行命令および構成命令を含む実行プログラムを保持する実行プログラム保持手段と、
回路を再構成可能なプログラマブルデバイスで構成され、前記プロセッサが前記実行命令を実行して指示する処理内容を実行する再構成可能処理装置と、
前記再構成可能処理装置に組み込んで回路構成するための回路情報を保持し、前記プロセッサが前記構成命令の実行時に指定する前記回路情報を前記再構成可能処理装置に組み込んで回路構成する回路情報保持構成制御手段とを備えた半導体集積回路装置。
【請求項２】
前記回路情報保持構成制御手段は、
前記再構成可能処理装置に組み込んで回路構成するための回路情報を保持する回路情報リスト保持手段と、
前記回路情報リスト保持手段に保持されている各回路情報のアドレス情報を保持するアドレスリスト保持手段と、
前記プロセッサが指定する前記回路情報の前記アドレス情報を前記アドレスリスト保持手段から読み出し、前記アドレス情報を用いて前記回路情報リスト保持手段から前記回路情報を読み出し、前記回路情報を前記再構成可能処理装置に組み込んで回路構成する組み込み構成手段とを備えている請求項１に記載の半導体集積回路装置。
【請求項３】
前記回路情報保持構成制御手段は、前記再構成可能処理装置にすでに組み込まれて回路構成されている回路情報を識別する回路識別情報を保持する回路識別情報レジスタを備え、
前記組み込み構成手段は、前記プロセッサが回路識別情報に対応する回路情報を前記再構成可能処理装置に組み込んで回路構成するように命令した場合には、その命令にかかわる前記回路識別情報と前記回路識別情報レジスタに保持されている前記回路識別情報とを比較し、一致しない場合のみ前記回路情報を前記再構成可能処理装置へ組み込んで回路構成する請求項２に記載の半導体集積回路装置。
【請求項４】
前記プロセッサは、前記実行命令を実行する場合に、前記実行命令が示す回路識別情報と前記回路識別情報レジスタに保持されている前記回路識別情報とを比較し、一致する場合は前記実行命令が示す処理内容の実行を前記再構成可能処理装置へ指示し、一致しない場合は前記実行命令が示す前記回路識別情報に対応する前記回路情報を前記再構成可能処理装置へ組み込んで回路構成するように指示し、前記再構成可能処理装置への組み込み構成後、前記実行命令が示す処理内容の実行を前記再構成可能処理装置に指示する請求項２に記載の半導体集積回路装置。
【請求項５】
前記回路情報保持構成制御手段は、前記回路識別情報レジスタに保持されている前記回路識別情報に対応する回路情報の前記再構成可能処理装置に対する組み込み構成が終了しているかを示すステータスレジスタを備え、
前記プロセッサは、前記実行命令を実行する場合に、前記ステータスレジスタの値を読み出し、前記回路識別情報レジスタの回路識別情報に対応する回路情報の前記再構成可能処理装置に対する組み込み構成が終了しているか否かを判断し、組み込み構成が終了していない場合は前記再構成可能処理装置への処理内容の実行の指示を待たせ、組み込み構成が終了している場合は前記再構成可能処理装置への処理内容の実行の指示を出す請求項４に記載の半導体集積回路装置。
【請求項６】
再構成可能処理装置に組み込み構成する処理内容毎の回路情報を複数格納した回路情報ライブラリと、ソースプログラムを実行プログラムに変換するコンパイラとを備えたコンパイラ装置。
【請求項７】
前記コンパイラは、プログラム中の各処理内容について、実行サイクル数と前記再構成可能処理装置に各回路情報を構成するのに必要となる構成サイクル数とを考慮し、プログラム全体の処理サイクル数が小さくなるようにプロセッサと前記再構成可能処理装置で実行する処理内容を切り分ける機能を備えている請求項６に記載のコンパイラ装置。
【請求項８】
前記コンパイラは、前記再構成可能処理装置で実行するために切り分けた処理内容について、その処理内容を実行命令に置き換える機能と、置き換えた前記実行命令が示す回路識別情報を示す構成命令をプログラムに組み込む機能とを備えている請求項７に記載のコンパイラ装置。
【請求項９】
前記コンパイラは、前記実行命令を前記再構成可能処理装置で実行するのに必要となる前記回路情報を前記回路情報ライブラリから抽出して回路情報リストを作成する機能と、前記回路情報リストに格納した各回路情報を格納しているアドレスを記載したアドレスリストを作成する機能とを備えている請求項８に記載のコンパイラ装置。
【請求項１０】
前記回路情報リスト保持手段は、複数の処理内容を実行可能な回路情報を備えている請求項２に記載の半導体集積回路装置。
【請求項１１】
前記実行プログラム保持手段において、前記回路情報で構成される前記再構成可能処理装置は複数の処理内容を実行することができ、前記実行命令は前記回路情報の複数の処理内容のいずれかを指定する回路選択情報を含み、前記プロセッサは前記回路選択情報で示される処理内容の実行を前記再構成可能処理装置に指示する請求項１０に記載の半導体集積回路装置。
【請求項１２】
前記回路情報ライブラリは、複数の処理内容を実行することができる複数の回路情報を備えている請求項９に記載のコンパイラ装置。
【請求項１３】
前記コンパイラは、プログラム中の各処理内容について、前記実行サイクル数と、前記
再構成可能処理装置に各回路情報を構成するのに必要となる構成サイクル数と、回路情報
で実行することができる処理内容を考慮し、プログラム全体の処理サイクル数が小さくな
るように前記プロセッサと前記再構成可能処理装置で実行する処理内容を切り分ける機能
を備えている請求項１２に記載のコンパイラ装置。
【請求項１４】
さらに、データを格納するデータメモリを備え、
前記プロセッサは、実行プログラム実行中に割り込みが発生した場合に、前記回路識別情報レジスタに格納されている回路識別情報を前記データメモリに格納し、割り込み処理復帰後に前記データメモリから読み出した前記回路識別情報に対応する回路情報を前記再構成可能処理装置に組み込んで回路構成するように前記回路情報保持構成制御手段に命令する機能を備えている請求項２に記載の半導体集積回路装置。
【請求項１５】
前記コンパイラは、
ソースプログラムコンパイル時に、プログラム中に分岐処理が含まれているかを判断する第１の判別手段と、
前記第１の判別手段の結果を受け、分岐処理の分岐先が確定しているか否かを判断する第２の判別手段と、
前記第２の判別手段の結果を受け、分岐先を基点として配置アドレスの昇順に実行命令があるか否かを判断する第３の判別手段と、
前記第３の判別手段の結果を受け、前記実行命令が示す回路情報を構成する構成命令を分岐先に組み込む機能を備えた請求項１１に記載のコンパイラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサとプログラマブルデバイスとを混載したコンパイラ装置および半導体集積回路装置にかかわり、特には、半導体集積回路装置の処理性能を向上するための技術に関する。
【背景技術】
【０００２】
現在、ＰＬＤ（Programmable Logic Device）もしくはＦＰＧＡ（FieldProgrammable Gate Array）と呼ばれるプログラマブルデバイス（以下、ＦＰＧＡで代表させる）は広く知られている。ＦＰＧＡはユーザーがその回路を設計することを可能とするデバイスであり、ユーザーが設計した回路を即座に構成し、その動作を実現することができるというメリットがある。また、ＦＰＧＡは回路を繰り返し構成することができるので、その時々に必要な回路に柔軟に変更することができ、ＦＰＧＡに構成した回路に不具合がある場合には即座に不具合を修正し、修正した回路をＦＰＧＡに再構成できるというメリットがある。また、要求している処理性能を満たさない場合には、回路を修正し、もう一度ＦＰＧＡに回路を構成することによって処理性能を上げることができるというメリットがある。
【０００３】
さらに、近年、このＦＰＧＡとプロセッサとを１つの半導体集積回路装置上に混載したものが提案されている。このような半導体集積回路装置においては、従来のプロセッサのプログラムの変更に加えて、ＦＰＧＡで構成された部分の回路構成が変更可能となったため、システムの変更に柔軟に対応することができることになる。
【０００４】
従来のプロセッサとＦＰＧＡを混載した半導体集積回路装置の例として、次のようなデータ処理装置がある。それは、プロセッサに汎用性を持たせるために、プロセッサにＦＰＧＡを接続したシステム構成を有している。プログラムをコンパイルする際に、プロセッサで実行した場合に、実行速度を低下させるプログラム中の特定部分を検証する。そして、その特定部分を高速に実行することができるＦＰＧＡ用の回路情報を生成する。さらに、当該のプログラムの起動時に、上記回路情報をＦＰＧＡに構成して、プログラムを高速に実行可能なシステム構成を実現する。
【特許文献１】特開平８−６９４４７号公報（第３−４頁、第１−３図）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来のプロセッサとＦＰＧＡを混載した半導体集積回路装置においては、実行するソースプログラム毎にＦＰＧＡに構成する専用の回路を開発しなければならないという課題がある。また、上記従来装置では、プログラムの実行中にＦＰＧＡの回路を構成し直すことは想定していない。その結果として、事前に必要となるすべての回路をＦＰＧＡに構成しなければならず、ＦＰＧＡの回路規模が大きなものになってしまうという課題がある。
【０００６】
本発明は上記従来の課題を解決するもので、ソースプログラム毎にＦＰＧＡの回路を設計する必要がなく、ＦＰＧＡの回路規模を小さく抑えるコンパイラ装置および半導体集積回路装置を提供することを目的としている。
【課題を解決するための手段】
【０００７】
第１の発明における半導体集積回路装置は、
プロセッサと、
前記プロセッサが実行するもので実行命令および構成命令を含む実行プログラムを保持する実行プログラム保持手段と、
回路を再構成可能なプログラマブルデバイスで構成され、前記プロセッサが前記実行命令を実行して指示する処理内容を実行する再構成可能処理装置（ＦＰＧＡ等）と、
前記再構成可能処理装置に組み込んで回路構成（コンフィギュレーション）するための回路情報を保持し、前記プロセッサが前記構成命令の実行時に指定する前記回路情報を前記再構成可能処理装置に組み込んで回路構成する回路情報保持構成制御手段とを備えたものである。
【０００８】
また、第１の発明におけるコンパイラ装置は、再構成可能処理装置（ＦＰＧＡ等）に組み込み構成する処理内容毎の回路情報を複数格納した回路情報ライブラリと、ソースプログラムを実行プログラムに変換するコンパイラとを備えたものである。
【０００９】
ここで、前記コンパイラは、プログラム中の各処理内容について、実行サイクル数と前記再構成可能処理装置に各回路情報を組み込み構成するのに必要となる構成サイクル数とを考慮し、プログラム全体の処理サイクル数が小さくなるようにプロセッサと前記再構成可能処理装置で実行する処理内容を切り分ける機能を備えているものとする。
【００１０】
なお、処理内容とは、例えば、除算「div」、乗算「mulu」，「mul」などの命令のことである。
【００１１】
上記の構成において、コンパイラはソースプログラムのコンパイル時に、処理内容毎の回路情報を複数格納した回路情報ライブラリを参照し、プログラム全体の処理サイクル数が小さくなるように再構成可能処理装置（ＦＰＧＡ等）で実行する処理内容とプロセッサで実行する処理内容とに切り分け、再構成可能処理装置の実行命令と構成命令をプログラムに組み込んで実行プログラムを生成し、実行命令が必要とする回路情報を回路情報ライブラリより抽出して回路情報保持構成制御手段に格納し、プロセッサが構成命令を実行すると、回路情報を回路情報保持構成制御手段によって再構成可能処理装置に前もって組み込み構成させ、実行命令を実行すると処理内容を再構成可能処理装置で実行するという態様がある。
【００１２】
なお、同じ回路情報を組み込み構成する構成命令が連続で実行された場合には、２回目以降の構成命令は無効化するものとする。
【００１３】
また、実行命令を実行したとき、実行に必要となる回路情報が組み込み構成されていない場合にはプロセッサの動作を止め、再構成可能処理装置に必要となる回路情報を組み込み構成する。
【００１４】
以上のように、第１の発明によれば、コンパイラは回路情報ライブラリに格納された回路情報を有効利用してソースプログラムをコンパイルするので、従来技術のようにソースプログラム毎に再構成可能処理装置（ＦＰＧＡ等）に組み込み構成する回路を開発する必要がない。すなわち、あらかじめ用意されている回路情報ライブラリを有効活用するので、ソースプログラム毎に専用回路を設計する必要がなく、開発期間の短縮、開発コストを削減することができる。
【００１５】
また、実行命令の実行に必要となる回路情報の再構成可能処理装置への組み込み構成を動的に行うので、その処理内容の実行に必要となる回路情報だけを再構成可能処理装置に組み込み構成すればよく、再構成可能処理装置は小規模のものを用意すればよい。
【００１６】
また、コンパイラがプロセッサで実行する処理内容と再構成可能処理装置で実行する処理内容とを切り分けるときの条件が、構成サイクル数と実行サイクル数を考慮し、プログラム全体の処理サイクル数が小さくなるようにすることであるので、プログラムを高速に実行することができる。
【００１７】
上記構成の半導体集積回路装置における前記回路情報保持構成制御手段は、
前記再構成可能処理装置（ＦＰＧＡ等）に組み込んで回路構成するための回路情報を保持する回路情報リスト保持手段と、
前記回路情報リスト保持手段に保持されている各回路情報のアドレス情報を保持するアドレスリスト保持手段と、
前記プロセッサが指定する前記回路情報の前記アドレス情報を前記アドレスリスト保持手段から読み出し、前記アドレス情報を用いて前記回路情報リスト保持手段から前記回路情報を読み出し、前記回路情報を前記再構成可能処理装置に組み込んで回路構成する組み込み構成手段とを備えているという態様がある。
【００１８】
また、上記構成の半導体集積回路装置における前記回路情報保持構成制御手段は、前記再構成可能処理装置（ＦＰＧＡ等）にすでに組み込まれて回路構成されている回路情報を識別するシリアルナンバーなどの回路識別情報を保持する回路識別情報レジスタを備え、
前記組み込み構成手段は、前記プロセッサが回路識別情報に対応する回路情報を前記再構成可能処理装置に組み込んで回路構成するように命令した場合には、その命令にかかわる前記回路識別情報と前記回路識別情報レジスタに保持されている前記回路識別情報とを比較し、一致しない場合のみ前記回路情報を前記再構成可能処理装置へ組み込んで回路構成するという態様がある。
【００１９】
また、上記構成の半導体集積回路装置における前記プロセッサは、前記実行命令を実行する場合に、前記実行命令が示すシリアルナンバーなどの回路識別情報と前記回路識別情報レジスタに保持されている前記回路識別情報とを比較し、一致する場合は前記実行命令が示す処理内容の実行を前記再構成可能処理装置（ＦＰＧＡ等）へ指示し、一致しない場合は前記実行命令が示す前記回路識別情報に対応する前記回路情報を前記再構成可能処理装置へ組み込んで回路構成するように指示し、前記再構成可能処理装置への組み込み構成後、前記実行命令が示す処理内容の実行を前記再構成可能処理装置に指示するという態様がある。
【００２０】
また、上記構成の半導体集積回路装置における前記回路情報保持構成制御手段は、前記回路識別情報レジスタに保持されている前記回路識別情報に対応する回路情報の前記再構成可能処理装置（ＦＰＧＡ等）に対する組み込み構成が終了しているかを示すステータスレジスタを備え、
前記プロセッサは、前記実行命令を実行する場合に、前記ステータスレジスタの値を読み出し、前記回路識別情報レジスタの回路識別情報に対応する回路情報の前記再構成可能処理装置に対する組み込み構成が終了しているか否かを判断し、組み込み構成が終了していない場合は前記再構成可能処理装置への処理内容の実行の指示を待たせ、組み込み構成が終了している場合は前記再構成可能処理装置への処理内容の実行の指示を出すという態様がある。
【００２１】
また、上記構成のコンパイラ装置における前記コンパイラは、前記再構成可能処理装置（ＦＰＧＡ等）で実行するために切り分けた処理内容について、その処理内容を実行命令に置き換える機能と、置き換えた前記実行命令が示す回路識別情報を示す構成命令をプログラムに組み込む機能とを備えているという態様がある。
【００２２】
また、上記構成のコンパイラ装置における前記コンパイラは、前記実行命令を前記再構成可能処理装置（ＦＰＧＡ等）で実行するのに必要となる前記回路情報を前記回路情報ライブラリから抽出して回路情報リストを作成する機能と、前記回路情報リストに格納した各回路情報を格納しているアドレスを記載したアドレスリストを作成する機能とを備えているという態様がある。
【００２３】
また、分岐や割り込みが発生し、実行命令が必要とする回路情報とは異なる回路情報が再構成可能処理装置（ＦＰＧＡ等）に組み込み構成された状態で実行命令が実行された場合でも、前もって実行命令が必要とする回路情報を組み込み構成し、処理内容を実行することができる。
【００２４】
また、分岐や割り込みが発生し、任意の回路情報を組み込み構成している間に同じ回路情報を再構成可能処理装置（ＦＰＧＡ等）に組み込み構成する構成命令を実行した場合、２回目以降の構成命令を無視することによって構成サイクル数を考慮することなく実行命令を実行することができる。
【００２５】
ところで、上記の第１の発明においては、再構成可能処理装置（ＦＰＧＡ等）で実行することができる処理内容の配置アドレスが連続していたり接近していたりすると、構成サイクル数の観点からは再構成可能処理装置で実行できる処理内容であるにもかかわらずプロセッサで実行すべきと判断してしまう可能性がある。このような場合には、プロセッサで実行すべきと判断された処理内容については、再構成可能処理装置で実行することによる処理能力の向上を図ることができない。これに対応するのが、次に説明する第２の発明である。
【００２６】
第２の発明の半導体集積回路装置においては、前記回路情報リスト保持手段は、複数の処理内容を実行可能な回路情報を備えているものとする。再構成可能処理装置（ＦＰＧＡ等）に組み込んで回路構成するための回路情報について、少なくともその一部は実行可能な処理内容として複数の処理内容を備えているものとする。
【００２７】
また、前記実行プログラム保持手段において、前記回路情報で構成される前記再構成可能処理装置（ＦＰＧＡ等）は複数の処理内容を実行することができ、前記実行命令は前記回路情報の複数の処理内容のいずれかを指定する回路選択情報を含み、前記プロセッサは前記回路選択情報で示される処理内容の実行を前記再構成可能処理装置に指示するものとする。
【００２８】
これに対応するコンパイラ装置としては、前記回路情報ライブラリは、複数の処理内容を実行することができる複数の回路情報を備えているものとする。
【００２９】
また、前記コンパイラは、プログラム中の各処理内容について、前記実行サイクル数と、前記再構成可能処理装置（ＦＰＧＡ等）に各回路情報を組み込み構成するのに必要となる構成サイクル数と、回路情報で実行することができる処理内容を考慮し、プログラム全体の処理サイクル数が小さくなるように前記プロセッサと前記再構成可能処理装置で実行する処理内容を切り分ける機能を備えているものとする。
【００３０】
第２の発明におけるコンパイラ装置および半導体集積回路装置は、ソースプログラムのコンパイル時に、複数の処理内容を実行することができる回路情報を格納した回路情報ライブラリを参照し、構成サイクル数と実行サイクル数と回路情報で実行することができる処理内容を考慮し、プログラム全体の処理サイクル数が小さくなるように再構成可能処理装置（ＦＰＧＡ等）とプロセッサで実行する処理内容に切り分け、実行命令と構成命令をプログラムに組み込んで実行プログラムを生成し、実行命令が必要とする回路情報を回路情報ライブラリより抽出して回路情報保持構成制御手段に格納し、プロセッサが構成命令を実行すると、回路情報を回路情報保持構成制御手段によって再構成可能処理装置に前もって組み込み構成させ、実行命令を実行すると回路選択情報が示す処理内容を再構成可能処理装置で実行する。
【００３１】
これによれば、構成サイクル数を確保できない処理内容についても再構成可能処理装置（ＦＰＧＡ等）で実行することができ、システム全体のパフォーマンスを向上することが可能となる。
【００３２】
ところで、上記第１および第２の発明において、プログラム実行中に割り込みが発生し、割り込み処理で異なる回路情報を再構成可能処理装置（ＦＰＧＡ等）に組み込み構成した場合に、割り込み処理からの復帰後に実行命令を実行すると、再構成可能処理装置に必要となる回路情報を組み込み構成し終えるまでプロセッサを止めることになるという課題がある。これに対応するのが、次に説明する第３の発明である。
【００３３】
第３の発明においては、さらに、データを格納するデータメモリを備え、前記プロセッサは、実行プログラム実行中に割り込みが発生した場合に、前記回路識別情報レジスタに格納されている回路識別情報（シリアルナンバー）を前記データメモリに格納し、割り込み処理復帰後に前記データメモリから読み出した前記回路識別情報に対応する回路情報を前記再構成可能処理装置（ＦＰＧＡ等）に組み込んで回路構成するように前記回路情報保持構成制御手段に命令する機能を備えているというものがある。上記のデータメモリとして、プロセッサにおけるスタック領域を利用してもよい。
【００３４】
第３の発明におけるコンパイラおよび半導体集積回路装置は、上記第１および第２の発明において、プログラム実行中に割り込みが発生した場合、再構成可能処理装置（ＦＰＧＡ等）に組み込み構成している回路情報の回路識別情報（シリアルナンバー）をプロセッサのスタック等のデータメモリに格納し、割り込み処理からの復帰後にデータメモリに格納した回路識別情報に対応する回路情報を再構成可能処理装置に組み込み構成するものである。
【００３５】
これによれば、割り込み処理からの復帰後に、割り込みが発生する前に組み込み構成していた回路情報を実行命令が必要とする回路情報として直ちに再構成可能処理装置（ＦＰＧＡ等）に組み込み構成し始めることができ、プロセッサを待たせる分のサイクル数のロスを小さくすることができる。
【００３６】
ところで、上記第１および第２の発明において分岐が発生し、実行プログラム実行中に任意の構成命令と実行命令との間に分岐してきた場合、再構成可能処理装置（ＦＰＧＡ等）には実行命令が必要とする回路情報とは異なる回路情報が組み込み構成された状態で実行命令を実行してしまう可能性がある。これに対応するのが、次に説明する第４の発明である。
【００３７】
第４の発明では、上記第１および第２の発明において、前記コンパイラは、ソースプログラムコンパイル時に、プログラム中に分岐処理が含まれているかを判断する第１の判別手段と、前記第１の判別手段の結果を受け、分岐処理の分岐先が確定しているか否かを判断する第２の判別手段と、前記第２の判別手段の結果を受け、分岐先を基点として配置アドレスの昇順に実行命令があるか否かを判断する第３の判別手段と、前記第３の判別手段の結果を受け、前記実行命令が示す回路情報を組み込み構成する構成命令を分岐先に組み込む機能を備えたものである。
【００３８】
ソースプログラムコンパイル時にコンパイラが中間コードから分岐条件を検索し、分岐先が確定している場合に、分岐先に再構成可能処理装置（ＦＰＧＡ等）に組み込み構成する命令を組み込む。これによれば、実行プログラム実行中に分岐が発生しても、分岐先には分岐後に最初に実行する実行命令が必要とする回路情報を再構成可能処理装置に組み込み構成する構成命令が組み込まれているので、実行命令を実行する前に実行命令が必要とする回路情報を再構成可能処理装置が組み込み構成し始めることができ、プロセッサを待たせる分のサイクル数のロスを小さくすることができる。
【発明の効果】
【００３９】
第１の発明によれば、コンパイラは回路情報ライブラリに格納された回路情報を用いてソースプログラムを実行するので、ソースプログラム毎に再構成可能処理装置に組み込み構成（コンフィギュレーション）する回路を開発する必要がない。また、実行命令の実行に必要となる回路情報を動的に再構成可能処理装置に組み込み構成するので、その処理内容の実行に必要となる回路のみを再構成可能処理装置に組み込み構成することになり、再構成可能処理装置としては小規模のものを用意すればよい。また、コンパイラはプログラム全体の処理サイクル数が小さくなるようにプロセッサと再構成可能処理装置で実行する処理内容を切り分けるので、高速にソースプログラムを実行することができる。
【００４０】
また、分岐や割り込みが発生し、実行命令が必要とする回路情報とは異なる回路情報が再構成可能処理装置に組み込み構成された状態で実行命令が実行された場合でも前もってそこから実行命令が必要とする回路情報を組み込み構成し、処理内容を実行することができる。
【００４１】
また、分岐や割り込みが発生し、任意の回路情報を組み込み構成している間に同じ回路情報を再構成可能処理装置に組み込み構成する構成命令を実行した場合、２回目以降の構成命令を無視することによって構成サイクル数を考慮することなく実行命令を実行することができる。
【００４２】
第２の発明によれば、第１の発明において、構成サイクル数を確保できない処理内容についても再構成可能処理装置（ＦＰＧＡ等）で実行することができ、システム全体のパフォーマンスを向上させることが可能となる。
【００４３】
第３の発明によれば、割り込み処理からの復帰後に、割り込みが発生する前に組み込み構成していた回路情報を実行命令が必要とする回路情報として直ちに再構成可能処理装置（ＦＰＧＡ等）に組み込み構成し始めることができ、プロセッサを待たせる分のサイクル数のロスを小さくすることができる。
【００４４】
第４の発明によれば、実行プログラム実行中に分岐が発生しても、分岐先には分岐後に最初に実行する実行命令が必要とする回路情報を再構成可能処理装置（ＦＰＧＡ等）に組み込み構成するための構成命令が組み込まれているので、実行命令を実行する前に実行命令が必要とする回路情報を構成命令が組み込み構成し始めることができ、プロセッサを待たせる分のサイクル数のロスを小さくすることができる。
【発明を実施するための最良の形態】
【００４５】
以下、本発明にかかわるシステムオンチップの実施の形態について図面に基づいて詳細に説明する。
【００４６】
（第１の実施形態）
―システム構成―
図１は、本発明の第１の実施形態におけるコンパイラおよび半導体集積回路装置のシステム構成図である。同図に示すように、本実施形態のシステムは、コンパイラ装置Ａと半導体集積回路装置Ｂとから構成されている。コンパイラ装置Ａは、コンパイラ５および回路情報ライブラリ６からなる。回路情報ライブラリ６は、半導体集積回路装置Ｂ中の後述する再構成可能処理装置としてのＦＰＧＡ１４をコンフィギュレーションするための回路情報を格納している。ここで、回路情報とはＦＰＧＡ１４をコンフィギュレーションするためのデータであり、各回路情報によりそれぞれ特定の処理内容を実行する。コンフィギュレーションとは、回路情報をＦＰＧＡ１４に組み込んで回路構成することである。コンパイラ５は、各処理内容を後述のプロセッサ１２で実行する場合に必要となるクロックサイクル数を記載したプロセッサ実行サイクルリスト５ａを保有している。コンパイラ５は、回路情報ライブラリ６およびプロセッサ実行サイクルリスト５ａを参照してソースプログラムＦ０をコンパイルし、実行プログラムＦ１、回路情報リストＦ２およびアドレスリストＦ３を作成するように構成されている。ソースプログラムＦ０は高級言語などで記述されたプログラムである。
【００４７】
半導体集積回路装置Ｂは、実行プログラム保持手段１１、プロセッサ１２、回路情報保持構成制御手段１３および再構成可能処理装置としてのＦＰＧＡ１４からなる。実行プログラム保持手段１１は、コンパイラ５が作成した実行プログラムＦ１の内容を保持する。プロセッサ１２は、実行プログラム保持手段１１から読み出した実行プログラムに応じて動作する。回路情報保持構成制御手段１３は、コンパイラ５が作成した回路情報リストＦ２およびアドレスリストＦ３の内容を保持する。回路情報保持構成制御手段１３は、プロセッサ１２が指定する回路情報をＦＰＧＡ１４にコンフィギュレーションする機能を有している。ＦＰＧＡ１４は、プロセッサ１２の指示により、回路情報保持構成制御手段１３が転送する回路情報によってコンフィギュレーションされる。
【００４８】
なお、同図には示していないが、プロセッサ１２やＦＰＧＡ１４以外に論理回路やアナログ回路があってもよく、それらの処理については、従来の半導体集積回路装置と同様の制御で行うことができる。また、本実施形態では半導体集積回路装置Ｂは１つのチップではないが、１つのチップで構成してもよい。
【００４９】
―回路情報ライブラリのデータ構造―
図１の回路情報ライブラリ６はあらかじめ用意されたものであり、ＦＰＧＡ１４をコンフィギュレーションするための回路情報を格納している。図２は回路情報ライブラリ６のデータ構造を示す。回路情報ライブラリ６は、回路情報の他に、回路情報の管理番号、回路情報で実行可能な処理内容、回路情報をコンフィギュレーションするのに必要となる構成サイクル数、回路情報で処理内容を実行するのに必要となる実行サイクル数からなる。
【００５０】
図３に回路情報ライブラリ６の一例を示す。処理内容の「div」、「mulu」、「mul」は、ＦＰＧＡ１４で実行することができる命令を示しており、それぞれ除算、符号なし乗算、符号付き乗算を実行する命令である。また、処理内容の「A,B」の「A」、「B」はそれぞれレジスタや即値、メモリアドレスを示しており、それらを用いて命令を実行することを示す。図３の例では、管理番号１の回路情報１は処理内容「divA,B（Ａ割るＢ）」を５サイクルで実行することができ、回路情報１をＦＰＧＡ１４にコンフィギュレーションするのに１００サイクル必要となることを示している。
【００５１】
―プロセッサ実行サイクルリストのデータ構造―
図４はコンパイラ５が備えるプロセッサ実行サイクルリスト５ａのデータ構造を示す。プロセッサ実行サイクルリスト５ａは、プロセッサ１２で実行することができる処理内容、および各処理内容をプロセッサ１２で実行するのに必要となる実行サイクル数で構成される。
【００５２】
図５にプロセッサ実行サイクルリスト５ａの一例を示す。処理内容の「cmp」、「mov」、「add」は、プロセッサ１２で実行することができる命令を示しており、それぞれ比較、転送、加算を実行する命令である。「mulu」、「div」、「mul」については、図３の説明と同様の処理内容である。また、処理内容の「A,B」の「A」、「B」はそれぞれレジスタや即値、メモリアドレスを示しており、それらを用いて命令を実行することを示している。図５の１行目の例では、「cmpA,B（Ａ，Ｂの比較）」をプロセッサ１２で実行するのに２サイクル必要であることを示している。
【００５３】
―コンパイラの処理―
図１のコンパイラ５は、ソースプログラムＦ０を読み込んで中間コードを生成し、中間コードの各処理内容について回路情報ライブラリ６およびプロセッサ実行サイクルリスト５ａを参照し、ＦＰＧＡ１４で実行するとすれば実行プログラムＦ１の実行速度が向上することになる処理内容を切り分ける。コンパイラ５は、ＦＰＧＡ１４で実行すべきと判断した各処理内容を実行するのに必要となる回路情報を回路情報ライブラリ６より抽出し、回路情報リストＦ２を作成するとともに、回路情報リストＦ２の各回路情報が格納されるアドレスを示すアドレスリストＦ３も同時に作成する。コンパイラ５は、ＦＰＧＡ１４で実行すべきと決定した各処理内容をＦＰＧＡ実行命令に置き換える。さらに、コンパイラ５は、各ＦＰＧＡ実行命令を実行するのに必要となる回路情報のコンフィギュレーションを開始すべき中間コードの配置アドレスを算出し、ＦＰＧＡ構成命令を組み込む。コンパイラ５は、コード生成を経て実行プログラムＦ１を作成する。
【００５４】
ＦＰＧＡ構成命令はプロセッサ１２で実行されて、ＦＰＧＡ構成命令中に示された回路情報をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に指示を出す。一方、ＦＰＧＡ実行命令はプロセッサ１２で実行されて、処理内容の実行に必要となるデータやアドレスをＦＰＧＡ１４に転送するが、処理内容の実行はＦＰＧＡ１４で行うものである。ＦＰＧＡ１４は、処理内容の実行を終えると、実行結果をプロセッサ１２へ転送する。プロセッサ１２がＦＰＧＡ構成命令およびＦＰＧＡ実行命令を実行するときの処理の詳細については、後述する。
【００５５】
図６は、コンパイラ５がソースプログラムＦ０をコンパイルする過程を示したフローチャートである。また、図７は図６におけるＳＴ４０の詳細なフローチャートを示す。以下に、図６および図７を用いてコンパイラ５の処理を説明する。
【００５６】
コンパイラ５は、以下ＳＴ１０〜ＳＴ８０の手順に従ってソースプログラムＦ０をコンパイルする。なお、より具体的には、後述の「―コンパイラの処理例―」でステップ毎に説明する。
【００５７】
ＳＴ１０：ソースプログラムＦ０を読み込む。
【００５８】
ＳＴ２０：字句解析ルーチン、構文解析ルーチン、意味解析ルーチン、中間コード生成ルーチン、コード最適化ルーチンを経て、ＳＴ１０で読み込んだソースプログラムＦ０から中間コードを生成する（例えば図８参照）。中間コードはアセンブリ言語であってもよい。
【００５９】
ＳＴ３０：ＳＴ２０で生成した中間コードの各処理内容について、回路情報ライブラリ６を参照し、ＦＰＧＡ１４で実行することができる処理内容を検索する（図８の３行目の「mulu d2,d0」、６行目の「div d1,d0」、９行目の「mul d0,d2」を参照）。回路情報ライブラリ６に記載されていない処理内容についてはプロセッサ１２で実行するものとする。
【００６０】
ＳＴ４０：ＳＴ３０においてＦＰＧＡ１４で実行できると判断した処理内容を、中間コードの配置アドレスの昇順に、処理内容毎にＦＰＧＡ１４で実行すべきかプロセッサ１２で実行すべきかを判断し、判断対象となるすべての処理内容について判断を完了するとＳＴ５０へ進む。なお、「実行できる」とは、実行可能性をいい、必ずしも実行するとは限らない。
【００６１】
ＳＴ４０の詳細な処理については、図７のＳＴ４１〜ＳＴ４５で示す。ＳＴ４１〜ＳＴ４５の説明で使用する語句について、ＦＰＧＡ１４で実行すべきかプロセッサ１２で実行すべきかの判断対象となる処理内容を処理内容Ａと定義する。また、処理内容Ａの配置アドレスに対し、降順でアドレスが最短、かつ、前の判断でのＳＴ４５においてＦＰＧＡ１４で実行すべきと決定した処理内容を処理内容Ｂと定義する。すなわち、処理内容ＢはＦＰＧＡ１４にかかわるものとなる。
【００６２】
ＳＴ４１：処理内容Ａは処理内容Ｂの回路情報で実行可能か（すなわち今回の判断対象の処理内容Ａと先行して決定された処理内容Ｂの回路情報が同一か）を判断する。つまり、回路情報のナンバー（図３の回路情報の１や２や３）が同じか否かの判定を行う。実行可能ならＳＴ４５へ、実行可能でないならＳＴ４２へそれぞれ処理を進める。また、処理内容Ｂに該当する処理内容がない場合には、無条件でＳＴ４２へそれぞれ処理を進める。
【００６３】
ＳＴ４２：処理内容Ａの実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションするのに十分な構成サイクル数を確保することができるか判断する。処理内容Ｂと処理内容Ａの間の処理内容をプロセッサ１２で実行するのに必要となるサイクル数ＣＣと回路情報ライブラリ６の構成サイクル数ＦＣの数値の大小を比較し、ＦＣ≦ＣＣの条件式が成り立たない（構成サイクル数を十分に確保できない）ならばＳＴ４３へ処理を進め、条件式が成り立つ（構成サイクル数を十分に確保できる）ならばＳＴ４５へ処理を進める。処理内容Ｂに該当する処理内容がない場合（処理内容Ａの配置アドレスに降順でＦＰＧＡ１４で実行する処理内容がない場合）は、実行プログラムの先頭の配置アドレスからの処理内容から処理内容Ａの前の配置アドレスの処理内容までをプロセッサ１２で実行するのに必要となるサイクル数をＣＣとする。
【００６４】
ＳＴ４３：処理内容Ａについて、第１モード処理＃１の方が高速か、第２モード処理＃２の方が高速かを判断する。第１モード処理＃１というのは、処理内容Ａをプロセッサ１２で実行する処理である。また、第２モード処理＃２というのは、ＦＰＧＡ１４に対する回路情報のコンフィギュレーションが完了するまでプロセッサ１２の動作を停止し、コンフィギュレーションが完了してから処理内容ＡをＦＰＧＡ１４で実行する処理である。この判断は、ＦＣ＋ＦＤ＜ＣＣ＋ＣＤの条件式にて行う。
【００６５】
ここで、処理内容Ａをプロセッサ１２で実行する場合の実行サイクル数をＣＤと、ＦＰＧＡ１４で実行する場合の実行サイクル数をＦＤとする。条件式が成り立つ（第２モード処理＃２の方が高速）ならばＳＴ４５へ、条件式が成り立たない（第１モード処理＃１の方が高速）ならばＳＴ４４へ処理を進める。
【００６６】
ＳＴ４４：処理内容Ａをプロセッサ１２で実行することを決定する。
【００６７】
ＳＴ４５：処理内容ＡをＦＰＧＡ１４で実行することを決定する。
【００６８】
ＳＴ５０：ＳＴ４０においてＦＰＧＡ１４で実行すると決定した各処理内容を実行するのに必要となる回路情報を回路情報ライブラリ６より管理番号順に抽出し、回路情報リストＦ２およびアドレスリストＦ３を作成する。
【００６９】
図９は回路情報リストＦ２のデータ構造を示す図である。回路情報ライブラリ６より抽出する回路情報に、管理番号順にシリアルナンバーを割り振る。シリアルナンバーは、回路情報ライブラリ６より抽出した各回路情報をコンパイラ５が識別するためのものである。回路情報リストＦ２は、ＳＴ４０においてＦＰＧＡ１４で実行すると決定した各処理内容を実行するのに必要となる回路情報からなる。
【００７０】
図１０はアドレスリストＦ３のデータ構造を示す図である。アドレスリストＦ３は、ＳＴ４０においてＦＰＧＡ１４で実行すると決定した各処理内容を実行するのに必要となる回路情報を格納するスタートアドレス、エンドアドレスからなる。スタートアドレスおよびエンドアドレスは、回路情報リストＦ２に格納された各回路情報の開始アドレスおよび終了アドレスに対応する。
【００７１】
ＳＴ６０：ＳＴ４０においてＦＰＧＡ１４で実行すると決定した各処理内容をＦＰＧＡ実行命令（図１３の「fpgad 2,d2,d0」、「fpgad 1,d1,d0」参照）に置き換える。
【００７２】
ＳＴ７０：中間コードの各ＦＰＧＡ実行命令で使用する回路情報をＦＰＧＡ１４にコンフィギュレーションし始める配置アドレスを判断し、判断した配置アドレスにＦＰＧＡ構成命令（図１４の「fpgac 1」、「fpgac 2」参照）を組み込む。本ステップでは配置アドレスの先頭アドレスから昇順にＦＰＧＡ実行命令を検索し、見つけたＦＰＧＡ実行命令が使用する回路情報をコンフィギュレーションするＦＰＧＡ構成命令を組み込む。判断対象となるＦＰＧＡ実行命令をＦＰＧＡ実行命令Ａと定義し、ＦＰＧＡ実行命令Ａの配置アドレスに対し、降順でアドレスが最短なＦＰＧＡ実行命令をＦＰＧＡ実行命令Ｂと定義する。
【００７３】
コンパイラ５はＦＰＧＡ実行命令Ａが示すシリアルナンバー（図１３では「fpgad 2」の「2」や「fpgad1」の「1」がシリアルナンバー）を示すＦＰＧＡ構成命令（図１４の「fpgac 1」、「fpgac 2」参照）を降順で最短とするＦＰＧＡ実行命令Ｂの配置アドレスの後に組み込む。
【００７４】
ＳＴ８０：コード生成ルーチンを経て、実行プログラムＦ１を作成する。
【００７５】
―コンパイラの処理例―
以下に、コンパイラ５がソースプログラムＦ０から図８の中間コードを生成し、図３の回路情報ライブラリおよび図５のプロセッサ実行サイクルリストを参照し、実行プログラムＦ１、回路情報リストＦ２、アドレスリストＦ３を作成するフローを例にて説明する。図８の「d0」、「d1」、「d2」はデータレジスタを、「0x11112222」、「0x04」、「0x33334444」は即値を示している。図８の各命令については図３および図５の説明した内容と同様である。
【００７６】
ＳＴ１０：ソースプログラムＦ０を読み込む。
【００７７】
ＳＴ２０：図８に示す中間コード例を生成する。
【００７８】
ＳＴ３０：図３の回路情報ライブラリおよび図５のプロセッサ実行サイクルリストを参照し、図８の中間コード例においてＦＰＧＡ１４で実行できる処理内容を検索する。この例では、図８の３行目の「mulu d2,d0」、６行目の「div d1,d0」、９行目の「mul d0,d2」をＦＰＧＡ１４で実行することができると判断する（処理内容「mulu」、「div」、「mul」は図３の回路情報ライブラリに存在する。）。また、その他の処理内容についてはプロセッサ１２で実行することを決定する。
【００７９】
ＳＴ４０：図８の３行目の「mulu d2,d0」、６行目の「div d1,d0」、９行目の「muld0,d2」の各処理内容について、ＦＰＧＡ１４で実行するかプロセッサ１２で実行するかを中間コードの配置アドレスで昇順（下向き）に判断する。処理内容毎にＳＴ４１〜ＳＴ４５の処理を行う。
【００８０】
まず、最初に３行目の「mulu d2,d0」についてＳＴ４０の処理を行う。
【００８１】
ＳＴ４１：３行目の「mulu d2,d0」の配置アドレスに対し、降順（上向き）にＦＰＧＡ１４で実行すると決定した処理内容がないのでステップ４２へ進む。
【００８２】
ＳＴ４２：３行目の「mulu d2,d0」について、コンパイラ５は１行目の「cmp d0,d1」から２行目の「mov0x11112222,d2」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。ＣＣが１５０サイクルである場合、ＦＣは１２０サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立つ（構成サイクル数を十分に確保できる）と判断し、ステップＳＴ４５へ進む。
【００８３】
ＳＴ４５：３行目の「mulu d2,d0」をＦＰＧＡ１４で実行することを決定する。
【００８４】
次に、６行目の「div d1,d0」についてＳＴ４０の処理を行う。
【００８５】
ＳＴ４１：図３を参照すると、３行目の「mulu d2,d0」は回路情報２を用いて実行される。しかし、「divd1,d0」は回路情報２では実行することができないと判断し、ＳＴ４２へ進む。
【００８６】
ＳＴ４２：６行目の「div d1,d0」について、４行目の「add d0,d1」から５行目の「mov0x04,d0」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。サイクル数ＣＣが８０サイクルである場合、ＦＣは１００サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立たない（構成サイクル数を十分に確保できない）と判断し、ＳＴ４３へ進む。
【００８７】
ＳＴ４３：６行目の「div d1,d0」について、第１モード処理＃１の方が方が高速か、第２モード処理＃２の方が高速かを判断する。第１モード処理＃１というのは、プロセッサ１２で実行する処理である。また、第２モード処理＃２というのは、ＦＰＧＡ１４に対する回路情報のコンフィギュレーションが完了するまでプロセッサ１２の動作を停止し、コンフィギュレーションが完了してからＦＰＧＡ１４で実行する処理である。
【００８８】
６行目の「div d1,d0」については、ＦＣが１００サイクル、ＦＤが５サイクル、ＣＣが８０サイクル、ＣＤが４０サイクルであり、ＦＣ＋ＦＤ＜ＣＣ＋ＣＤの条件を満たす（第２モード処理＃２の方が高速である）のでＳＴ４５へ進む。
【００８９】
ＳＴ４５：６行目の「div d1,d0」をＦＰＧＡ１４で実行することを決定する。
【００９０】
最後に、９行目の「mul d0,d2」についてＳＴ４０の処理を行う。
【００９１】
ＳＴ４１：図３を参照すると、６行目の「div d1,d0」は回路情報１を用いて実行される。しかし、「muld0,d2」は回路情報１では実行することができない判断し、ＳＴ４２へ進む。
【００９２】
ＳＴ４２：９行目の「mul d0,d2」について、７行目の「add 0x100,d0」から８行目の「mov0x33334444,d0」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。サイクル数ＣＣが３０サイクルである場合、ＦＣは１０５サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立たない（構成サイクルを十分に確保できない）と判断し、ＳＴ４３へ進む。
【００９３】
ＳＴ４３：９行目の「mul d0,d2」について、プロセッサ１２での実行を伴う第１モード処理＃１の方が高速か、プロセッサ１２の動作停止・ＦＰＧＡ１４へのコンフィギュレーション・ＦＰＧＡ１４での実行を伴う第２モード処理＃２の方が高速かを判断する。９行目の「muld0,d2」について、ＦＣが１０５サイクル、ＦＤが６サイクル、ＣＣが３０サイクル、ＣＤが４０サイクルであり、ＦＣ＋ＦＤ＜ＣＣ＋ＣＤの条件を満たさない（第１モード処理＃１の方が高速である）のでＳＴ４４へ進む。
【００９４】
ＳＴ４４：９行目の「mul d0,d2」をプロセッサ１２で実行することを決定する。
【００９５】
ＳＴ５０：ＳＴ４０においてＦＰＧＡ１４で実行すると決定した３行目の「mulu d2,d0」、６行目の「divd1,d0」の実行に必要となる回路情報１，２を抽出した回路情報リストＦ２を作成する。
【００９６】
図１１は回路情報１，２を回路情報ライブラリ６より抽出した回路情報リストＦ２の例を示す。図１１の左端の数値は各回路情報が格納されるアドレスを示す。
【００９７】
本ステップにおいて抽出する回路情報１，２が格納されるアドレスを示すアドレスリストＦ３を作成する。図１２は回路情報１，２を格納するスタートアドレスおよびエンドアドレスを示すアドレスリストＦ３の例である。図１２の左端の数値はスタートアドレスおよびエンドアドレスが格納されるアドレスを示す。
【００９８】
なお、回路情報リストＦ２およびアドレスリストＦ３は、回路情報保持構成制御手段１３の仕様に合わせてコンパイラ５が作成すればよい。回路情報を抽出する際に回路情報１，２にシリアルナンバー１，２を割り振る。
【００９９】
ＳＴ６０：ＳＴ４０で、ＦＰＧＡ１４で実行すると決定した３行目の「mulu d2,d0」、６行目の「divd1,d0」をＦＰＧＡ実行命令に置き換える。
【０１００】
図１３は上記ＳＴ６０までを実行したときの中間コード例である。「fpgad」はＦＰＧＡ実行命令の一例を示したものである。３行目の「fpgad」が示す数字の「2」は回路情報２に対応するシリアルナンバーを示し、「d2,d0」は処理内容の実行に必要となるデータレジスタを示している。６行目の「fpgad」についてはシリアルナンバー「1」に対応した回路情報１のＦＰＧＡ実行命令となる。
【０１０１】
ＳＴ７０：各ＦＰＧＡ実行命令の実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションを行うに際して、コンフィギュレーションを開始する配置アドレスをどこに設定するかについては、次のように行う。「fpgad 2,d2,d0」の場合には、「fpgad 2,d2,d0」の配置アドレスより降順にＦＰＧＡ１４で実行すべき処理内容が存在しないため、１行目の「cmpd0,d1」の前にコンフィギュレーションの開始アドレスを設定する。また、「fpgad 1,d1,d0」の場合には、「fpgad 1,d1,d0」の配置アドレスより降順にＦＰＧＡ１４で実行すべき処理内容として最短に３行目の「fpgad2,d2,d0」が存在するので、その次の配置アドレスであると判断する。判断された配置アドレスには、各ＦＰＧＡ実行命令が示すシリアルナンバーを示すＦＰＧＡ構成命令を組み込む。
【０１０２】
図１４は上記ＳＴ７０までを実行したときの中間コード例である。「fpgac」はＦＰＧＡ構成命令の一例を示すものである。１行目の「fpgac」が示す数字の「2」は回路情報２に対応するシリアルナンバーである。同様に５行目の「fpgac」はシリアルナンバー「1」に対応した回路情報１のＦＰＧＡ構成命令となる。
【０１０３】
ＳＴ８０：ＳＴ７０で変換した中間コードから実行プログラムＦ１を生成する。
【０１０４】
―実行プログラム保持手段―
図１の実行プログラム保持手段１１は、ＦＰＧＡ構成命令（「fpgac …」）およびＦＰＧＡ実行命令（「fpgad…」）を含む実行プログラムＦ１を格納する。ＦＰＧＡ構成命令およびＦＰＧＡ実行命令をプロセッサ１２が実行したときの詳細な処理は後述のＦＰＧＡ構成命令およびＦＰＧＡ実行命令で説明する。
【０１０５】
―回路情報保持構成制御手段―
図１５は、図１の半導体集積回路装置Ｂの詳細なブロック回路図を示す。回路情報保持構成制御手段１３は、組み込み構成手段２０、ＦＰＧＡステータスレジスタ３１、シリアルナンバーレジスタ３２、アドレスリスト保持手段３３および回路情報リスト保持手段３４からなる。組み込み構成手段２０は、読み出しアドレスレジスタ２１、エンドアドレスレジスタ２２、構成制御部２３、デコーダ２４およびデータ制御部２５からなる。構成制御部２３は、プロセッサ１２からの指示を受け、ＦＰＧＡ１４へのコンフィギュレーションを制御する。シリアルナンバーレジスタ３２は、プロセッサ１２から転送されるシリアルナンバーを格納する。ＦＰＧＡステータスレジスタ３１は、ＦＰＧＡ１４のコンフィギュレーションが完了しているかを示す。アドレスリスト保持手段３３は、コンパイラ５が作成したアドレスリストＦ３を格納する。回路情報リスト保持手段３４は、コンパイラ５が作成した回路情報リストＦ２を格納する。デコーダ２４は、シリアルナンバーレジスタ３２が格納しているシリアルナンバーをデコードする。デコーダ２４はシリアルナンバーをデコードすると、シリアルナンバーに対応するアドレスリスト保持手段３３のアドレスを示す。読み出しアドレスレジスタ２１は、回路情報リスト保持手段３４のアドレスを示す。エンドアドレスレジスタ２２は、アドレスリスト保持手段３３から読み出したエンドアドレスを格納する。データ制御部２５は、回路情報リスト保持手段３４より読み出した回路情報をＦＰＧＡ１４へ転送する。回路情報保持構成制御手段１３の詳細な処理の流れは後述のＦＰＧＡ構成命令、ＦＰＧＡ実行命令にて説明する。
【０１０６】
―ＦＰＧＡ構成命令―
プロセッサ１２は、ＦＰＧＡ構成命令を実行すると、ＦＰＧＡ構成命令が示すシリアルナンバーを回路情報保持構成制御手段１３の構成制御部２３に転送する。
【０１０７】
例として、ＦＰＧＡステータスレジスタ３１に「０」が書き込まれている場合、ＦＰＧＡ１４はコンフィギュレーション中であることを示し、ＦＰＧＡステータスレジスタ３１に「１」が書き込まれている場合、ＦＰＧＡ１４はコンフィギュレーションが完了していることを示す。以下では上記の例を使って説明する。
【０１０８】
アドレスリスト保持手段３３は、コンパイラ５が作成したアドレスリストＦ３を格納する。
【０１０９】
回路情報リスト保持手段３４は、コンパイラ５が作成した回路情報リストＦ２を格納する。
【０１１０】
構成制御部２３は、プロセッサ１２より転送されてきたシリアルナンバーとシリアルナンバーレジスタ３２に格納されている値を比較する。構成制御部２３は、比較した値が同じ場合、以降の処理をせず、ＦＰＧＡ実行命令に処理を進める。構成制御部２３は、比較した値が異なる場合、転送されてきたシリアルナンバーをシリアルナンバーレジスタ３２に格納し、ＦＰＧＡ１４にはコンフィギュレーション開始要求を通知し、ＦＰＧＡステータスレジスタ３１には「０」を書き込む。構成制御部２３は、シリアルナンバーレジスタ３２に格納したシリアルナンバーを読み出してデコーダ２４へ転送する。構成制御部２３は、データ制御部２５に読み出しアドレスレジスタおよびエンドアドレスレジスタを更新するよう命令する。
【０１１１】
ＦＰＧＡ１４は、構成制御部２３からコンフィギュレーション開始要求を受信すると、データ制御部２５より転送されてくる回路情報でコンフィギュレーションを開始する。
【０１１２】
デコーダ２４は、構成制御部２３より入力されるシリアルナンバーをデコードし、デコード結果をデータ制御部２５へ出力する。デコーダ２４がデコードした結果は、シリアルナンバーに対応したアドレスリスト保持手段３３のアドレスを示す。
【０１１３】
データ制御部２５は、構成制御部２３から読み出したアドレスレジスタ２１およびエンドアドレスレジスタ２２を更新するよう命令を受けると、デコーダ２４から入力されるアドレスをアドレスリスト保持手段３３に出力し、読み出したスタートアドレスおよびエンドアドレスをそれぞれ読み出しアドレスレジスタ２１、エンドアドレスレジスタ２２に格納する。データ制御部２５は、スタートアドレスおよびエンドアドレスを読み出しアドレスレジスタ２１およびエンドアドレスレジスタ２２に格納すると、読み出しアドレスレジスタ２１に格納したアドレスを回路情報リスト保持手段３４へ出力し、回路情報リスト保持手段３４より読み出した回路情報をＦＰＧＡ１４へ転送する。読み出した回路情報のＦＰＧＡ１４への転送を完了すると、データ制御部２５は読み出しアドレスレジスタ２１とエンドアドレスレジスタ２２の値を比較し、読み出しアドレスレジスタ２１の値がエンドアドレスレジスタ２２の値以下である場合、読み出しアドレスレジスタ２１の値をインクリメントして読み出しアドレスレジスタ２１に格納する。データ制御部２５は、読み出しアドレスレジスタ２１に格納したアドレスを再び回路情報リスト保持手段３４に出力し、読み出した回路情報をＦＰＧＡ１４へ転送する。読み出しアドレスレジスタ２１の値がエンドアドレスレジスタ２２の値よりも大きい場合、データ制御部２５はＦＰＧＡ１４への回路情報の転送を完了する。
【０１１４】
ＦＰＧＡ１４はコンフィギュレーションを完了すると、構成制御部２３に対しコンフィギュレーションが完了したことを通知する。
【０１１５】
構成制御部２３はＦＰＧＡ１４のコンフィギュレーションが完了したことを知ると、ＦＰＧＡステータスレジスタ３１に「１」を書き込む。
【０１１６】
―ＦＰＧＡ実行命令―
プロセッサ１２はＦＰＧＡ実行命令を実行すると、データ制御部２５を通してシリアルナンバーレジスタ３２およびＦＰＧＡステータスレジスタ３１を読み出す。プロセッサ１２は、ＦＰＧＡ実行命令が示すシリアルナンバーとシリアルナンバーレジスタ３２の値が同じであるか、ＦＰＧＡステータスレジスタ３１の値が「１」であるかを確認する。ＦＰＧＡ実行命令が示すシリアルナンバーとシリアルナンバーレジスタ３２の値が異なる場合、ＦＰＧＡ実行命令が示すシリアルナンバーに対応する回路情報をＦＰＧＡ１４にコンフィギュレーションするよう、プロセッサ１２は回路情報保持構成制御手段１３に指示を出し、ＦＰＧＡ１４のコンフィギュレーションが完了し、ＦＰＧＡステータスレジスタ３１の値が「１」になるまでプロセッサ１２の動作を止める。
【０１１７】
一方、シリアルナンバーとシリアルナンバーレジスタ３２の値が一致し、ＦＰＧＡステータスレジスタ３１の値が「１」でない場合、プロセッサ１２は、ＦＰＧＡ１４のコンフィギュレーションが完了し、ＦＰＧＡステータスレジスタ３１の値が「１」になるまで動作を停止する。
【０１１８】
また、シリアルナンバーとシリアルナンバーレジスタ３２の値が一致し、ＦＰＧＡステータスレジスタ３１の値が「１」である場合、プロセッサ１２は処理内容の実行に必要となるレジスタに格納されている値や即値をＦＰＧＡ１４へ転送する。プロセッサ１２は、レジスタの値や即値のＦＰＧＡ１４への転送を完了すると、動作を停止する。処理内容はＦＰＧＡ１４で実行される。ＦＰＧＡ１４は、処理内容の実行を完了すると、プロセッサ１２に対し実行が完了したことを知らせるとともに、ＦＰＧＡ１４での実行結果をプロセッサ１２に転送する。プロセッサ１２は、ＦＰＧＡ１４での実行が完了したことを受信すると、再び動作を開始する。
【０１１９】
以上のように本実施の形態によれば、コンパイラ５は回路情報ライブラリ６に格納された回路情報を有効利用してソースプログラムＦ０をコンパイルするので、従来技術のようにソースプログラム毎にＦＰＧＡ１４にコンフィギュレーションする回路を開発する必要がない。すなわち、あらかじめ用意されている回路情報ライブラリ６を有効活用するので、ソースプログラム毎に専用回路を設計する必要がなく、開発期間の短縮、開発コストを削減することができる。
【０１２０】
また、実行命令の実行に必要となる回路情報のＦＰＧＡ１４へのコンフィギュレーションを動的に行うので、その処理内容の実行に必要となる回路だけをＦＰＧＡ１４にコンフィギュレーションすればよく、ＦＰＧＡ１４は小規模のものを用意すればよい。
【０１２１】
また、コンパイラ５がプロセッサ１２で実行する処理内容とＦＰＧＡ１４で実行する処理内容とを切り分けるときの条件が、構成サイクル数と実行サイクル数が最小となるようにすることであるので、プログラムを高速に実行することができる。
【０１２２】
（第２の実施形態）
上記第１の実施形態では、図１のコンパイラ５が生成する中間コードにおいて、ＦＰＧＡ１４で実行することができる処理内容の配置アドレスが連続している、もしくは配置アドレスの差が小さい処理内容列がある場合に課題がある。以下に、課題を説明する。
【０１２３】
第１の実施形態では、コンパイラ５が図６のＳＴ３０でＦＰＧＡ１４で実行することができると判断した任意の処理内容Ａ，Ｂ（処理内容Ｂの方が配置アドレスは大きい）の配置アドレスが連続している場合、もしくは配置アドレスの差が小さい場合、処理内容ＢはＦＰＧＡ１４で実行した方が高速に実行できるにもかかわらず、ＦＰＧＡ１４で実行するのに必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションする構成サイクル数が確保することができず、コンパイラ５によってプロセッサ１２で実行すべきと決定される場合がある。この場合、処理内容Ｂについては、ＦＰＧＡ１４で実行することによる処理能力向上を図ることができない。
【０１２４】
そこで、本発明の第２の実施形態は、処理内容Ａ，Ｂの配置アドレスが連続している、もしくは配置アドレスの差が小さい場合でも、処理内容ＢをＦＰＧＡ１４で実行できるように考慮したものである。本実施形態のシステム構成を以下に説明する。
【０１２５】
以下では、２つの処理内容を実行できる回路情報を含んだシステムについて説明する。
【０１２６】
図１６は、本実施形態における回路情報ライブラリ６のデータ構造を示す図である。第１の実施形態の回路情報ライブラリ６のデータ構造と異なり、各回路情報で実行できる処理内容（処理内容１と処理内容２）、各処理内容を実行するときに必要となる実行サイクル数（実行サイクル数１と実行サイクル数２）、各処理内容をＦＰＧＡ１４で実行するときにＦＰＧＡ実行命令に付加する回路選択情報（回路選択情報１と回路選択情報２）をそれぞれ２つずつ持つ。処理内容１は実行サイクル数１、回路選択情報１と対応しており、処理内容２は実行サイクル数２、回路選択情報２と対応している。
【０１２７】
回路選択情報は、回路情報で実行することができる処理内容のうち、どの処理内容をＦＰＧＡ１４で実行するかを決定する情報であり、実行したい処理内容に対応した回路選択情報がＦＰＧＡ実行命令に付加される。プロセッサ１２はＦＰＧＡ実行命令を実行すると、ＦＰＧＡ実行命令が示すデータ、アドレス、回路選択情報をＦＰＧＡ１４に転送し、回路選択情報に対応する処理内容をＦＰＧＡ１４に実行させる。ＦＰＧＡ１４は実行結果をプロセッサ１２に転送する。ＦＰＧＡ１４には、プロセッサ１２より転送される回路選択情報に従って、どの処理内容を実行するかを選択する機構が含まれる。
【０１２８】
図１７は本実施形態における回路情報ライブラリ６の一例を示す図である。各処理内容についての説明は図３と同様である。図１７の例では、管理番号４の回路情報４は処理内容「mul A,B（Ａ掛けるＢ）」および「div A,B（Ａ割るＢ）」をそれぞれ６サイクル、５サイクルで実行することができ、各処理内容を回路情報４を使って実行する場合、ＦＰＧＡ実行命令には回路選択情報「１」および「２」を付加する必要があり、回路情報４をＦＰＧＡ１４にコンフィギュレーションするのに１３０サイクル必要であることを示している。また、管理番号１の処理内容２および実行サイクル数２の項目には「−」とあるが、これは回路情報１が１つの処理内容しか実行できないことを示している。管理番号２および３についても同様である。
【０１２９】
本実施形態において、コンパイラ５がソースプログラムＦ０をコンパイルする過程を示したフローチャートは、第１の実施形態と同様に図６で示すが、ＳＴ４０の詳細なフローチャートについては図１８で示す。
【０１３０】
本実施形態におけるコンパイラ５は、図６のＳＴ１０〜ＳＴ８０の手順に従いソースプログラムＦ０をコンパイルする。ＳＴ１０およびＳＴ２０は第１の実施形態と同じ説明であるので説明を省略する。
【０１３１】
ＳＴ３０：ＳＴ２０で生成した中間コードの各処理内容について、回路情報ライブラリ６を参照し、ＦＰＧＡ１４で実行することができる処理内容を回路情報ライブラリ６の処理内容１と処理内容２から検索する。回路情報ライブラリ６を検索した結果、中間コードの各処理内容と回路情報ライブラリ６の処理内容１または処理内容２が一致した回路情報がある場合は、その処理内容はＦＰＧＡ１４で実行することができると判断し、処理内容が一致したすべての回路情報の管理番号を処理内容の中間コードに情報として付加する。回路情報ライブラリ６に記載されていない処理内容についてはプロセッサ１２で実行する。
【０１３２】
ＳＴ４０：ＳＴ４０に関しては、ＳＴ３０においてＦＰＧＡ１４で実行できると判断した処理内容を、中間コードの配置アドレスの昇順に処理内容毎にＦＰＧＡ１４で実行するかプロセッサ１２で実行するか判断し、判断対象となるすべての処理内容について判断を完了するとＳＴ５０へ進む。ＳＴ４０の詳細な処理については図１８のＳＴ４０１〜ＳＴ４１０で示す。ＳＴ４０の説明で使用する語句で、ＦＰＧＡ１４で実行するかプロセッサ１２で実行するかの判断対象となる処理内容を処理内容Ａと、処理内容Ａの配置アドレスに対し、降順でアドレスが最短、かつ、ＳＴ４０８およびＳＴ４１０においてＦＰＧＡ１４で実行すると決定した処理内容を処理内容Ｂと定義する。
【０１３３】
ＳＴ４０１：処理内容Ａは処理内容Ｂの回路情報で実行可能か（回路情報ライブラリ６を参照し、先行して決定された処理内容Ｂを実行するのに用いる回路情報の処理内容１もしくは処理内容２の処理内容と処理内容Ａが一致するか）を判断する。実行可能ならＳＴ４０６へ、実行可能でないならＳＴ４０２へ進む。処理内容Ｂに該当する処理内容がない場合はＳＴ４０２へ進む。
【０１３４】
ＳＴ４０２：処理内容Ａの実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションするのに十分な構成サイクル数を確保することができるか判断する。判断対象となる回路情報は、処理内容Ａに情報として付加されている管理番号のうち、構成サイクル数が最小の回路情報である。処理内容Ｂと処理内容Ａの間の処理内容をプロセッサ１２で実行するのに必要となるサイクル数ＣＣと回路情報ライブラリ６の構成サイクル数ＦＣの数値の大小を比較し、ＦＣ≦ＣＣの条件式が成り立たない（構成サイクル数を十分に確保できない）ならばＳＴ４０３へ、条件式が成り立つ（構成サイクル数を十分に確保できる）ならばＳＴ４０８へ処理を進める。処理内容Ｂに該当する処理内容がない場合（処理内容Ａの配置アドレスに降順でＦＰＧＡ１４で実行する処理内容がない場合）は、実行プログラムの先頭の配置アドレスからの処理内容から処理内容Ａの前の配置アドレスの処理内容までをプロセッサ１２で実行するのに必要となるサイクル数をＣＣとする。
【０１３５】
ＳＴ４０３：処理内容Ｂにロックフラグが付加されているかを判断する。ロックフラグは、各処理内容について処理内容の実行に使用する回路情報を変更することを拒絶するか否かを示す情報であり、ＳＴ４０９およびＳＴ４１０においてＦＰＧＡ１４で実行すると決定した処理内容の中間コードに付加される。処理内容Ｂにロックフラグが付加されているならＳＴ４０５へ進み、ロックフラグが付加されていないならばＳＴ４０４へ進む。
【０１３６】
ＳＴ４０４：処理内容Ａおよび処理内容Ｂを実行することができる回路情報があるか（処理内容Ａおよび処理内容Ｂに共通に付加されている管理番号があるか）を判断する。処理内容Ａおよび処理内容Ｂを実行することができる回路情報があるならばＳＴ４１０へ進み、該当する回路情報がなければＳＴ４０５へ進む。
【０１３７】
ＳＴ４０５：処理内容Ａについて、第１モード処理＃１の方が高速か、第２モード処理＃２の方が高速かを判断する。第１モード処理＃１というのは、処理内容Ａをプロセッサ１２で実行する処理である。また、第２モード処理＃２というのは、ＦＰＧＡ１４に対する回路情報のコンフィギュレーションが完了するまでプロセッサ１２の動作を停止し、コンフィギュレーションが完了してから処理内容ＡをＦＰＧＡ１４で実行する処理である。この判断は、ＦＣ＋ＦＤ＜ＣＣ＋ＣＤの条件式にて行う。判断対象となる回路情報はＳＴ４０２で判断対象となった回路情報である。条件式が成り立つ（第２モード処理＃２の方が高速）ならばＳＴ４０８へ、条件式が成り立たない（第１モード処理＃１の方が高速）ならばＳＴ４０７へ処理を進める。
【０１３８】
ＳＴ４０６：処理内容Ｂにロックフラグが付加されているかを判断し、付加されているならＳＴ４０９へ、付加されていないならＳＴ４０８へ進む。
【０１３９】
ＳＴ４０７：処理内容Ａをプロセッサ１２で実行することを決定する。
【０１４０】
ＳＴ４０８：処理内容ＡをＳＴ４０２、ＳＴ４０５、ＳＴ４０６で判断対象となった回路情報を使用してＦＰＧＡ１４で実行することを決定する。処理内容Ａの中間コードに、判断対象となった回路情報の管理番号と、判断対象となった回路情報で処理内容Ａを実行するために必要となる回路選択情報を情報として新たに付加する。
【０１４１】
ＳＴ４０９：ＳＴ４０６で判断対象となった回路情報を使用して処理内容ＡをＦＰＧＡ１４で実行することを決定する。処理内容Ａの中間コードに、判断対象となった回路情報の管理番号と、判断対象となった回路情報で処理内容Ａを実行するために必要となる回路選択情報を情報として新たに付加する。また、処理内容Ａにロックフラグを付加する。
【０１４２】
ＳＴ４１０：ＳＴ４０４で判断した回路情報を使って処理内容Ａおよび処理内容ＢをＦＰＧＡ１４で実行することを決定する。処理内容Ａの中間コードに、判断対象となった回路情報の管理番号と、判断対象となった回路情報で処理内容Ａを実行するために必要となる回路選択情報を情報として付加する。また、処理内容Ａに対してロックフラグを付加する。処理内容Ｂに付加されている管理番号を処理内容Ａと同じ管理番号に置き換え、付加されている回路選択情報を置き換えた管理番号の回路情報で処理内容Ｂを実行するために必要となる回路選択情報に置き換える。
【０１４３】
ＳＴ５０：ＳＴ４０８、ＳＴ４０９、ＳＴ４１０においてＦＰＧＡ１４で実行すると決定した各処理内容に付加した管理番号を検索し、検索して見つけた管理番号の回路情報を回路情報ライブラリ６より管理番号順に抽出し、回路情報リストＦ２およびアドレスリストＦ３を作成する。このとき、抽出する回路情報の管理番号にシリアルナンバーを割り振り、コンパイラはシリアルナンバーと管理番号との対応を記憶する。
【０１４４】
ＳＴ６０：ＳＴ４０８、ＳＴ４０９、ＳＴ４１０においてＦＰＧＡ１４で実行すると決定した各処理内容を、ＦＰＧＡ実行命令に置き換える。ＳＴ４０８、ＳＴ４０９、ＳＴ４１０で各処理に付加した管理番号に対応するシリアルナンバー、およびＳＴ４０８、ＳＴ４０９、ＳＴ４１０で付加した回路選択情報を示すＦＰＧＡ実行命令で各処理内容を置き換える。置き換えが完了すると、ＳＴ４０で付加してきた管理番号、回路選択情報、ロックフラグの情報を消す。
【０１４５】
ＳＴ７０：各ＦＰＧＡ実行命令で使用する回路情報のＦＰＧＡ１４へのコンフィギュレーションを開始する中間コードの配置アドレスを判断し、判断した配置アドレスにＦＰＧＡ構成命令を組み込む。本ステップでは配置アドレスの先頭アドレスから昇順にＦＰＧＡ実行命令を検索し、見つけたＦＰＧＡ実行命令が使用する回路情報をコンフィギュレーションするＦＰＧＡ構成命令を組み込む。
【０１４６】
ＦＰＧＡ構成命令を組み込む配置アドレスを判断する方法を以下に示す。以下説明で使用する語句の説明をする。判断対象となるＦＰＧＡ実行命令をＦＰＧＡ実行命令Ａと、ＦＰＧＡ実行命令Ａの配置アドレスに対し、降順でアドレスが最短なＦＰＧＡ実行命令をＦＰＧＡ実行命令Ｂと定義する。
【０１４７】
ＦＰＧＡ実行命令Ａが示すシリアルナンバーとＦＰＧＡ実行命令Ｂが示すシリアルナンバーが一致しているか（ＦＰＧＡ実行命令ＡとＦＰＧＡ実行命令Ｂは同じ回路情報を使用して実行するか）を判断する。ＦＰＧＡ実行命令ＡとＦＰＧＡ実行命令Ｂのシリアルナンバーが一致している（ＦＰＧＡ実行命令ＡとＦＰＧＡ実行命令Ｂは同じ回路情報を使用して実行する）場合、ＦＰＧＡ構成命令（「fpgac …」）を中間コードに組み込まない。ＦＰＧＡ実行命令とＦＰＧＡ実行命令Ｂのシリアルナンバーが異なっている（ＦＰＧＡ実行命令ＡとＦＰＧＡ実行命令Ｂは異なる回路情報を使用して実行する）場合、ＦＰＧＡ実行命令Ａが示すシリアルナンバーを示すＦＰＧＡ構成命令をＦＰＧＡ実行命令Ｂの後の配置アドレスに組み込む。ＦＰＧＡ実行命令Ａに対し、ＦＰＧＡ実行命令Ｂに該当するＦＰＧＡ実行命令がない場合、ＦＰＧＡ実行命令Ａが示すシリアルナンバーを示すＦＰＧＡ構成命令を中間コードの先頭アドレスに組み込む。
【０１４８】
上記のような判断をすることにより、同じ回路情報を使用するＦＰＧＡ実行命令が連続する場合、同じシリアルナンバーを示すＦＰＧＡ構成命令を中間コードに組み込まずに済み、実行プログラムＦ１のサイズを小さくすることができる。
【０１４９】
ＳＴ８０：コード生成ルーチンを経て、実行プログラムＦ１を作成する。
【０１５０】
以下に、コンパイラ５がソースプログラムＦ０から図１９の中間コード例を生成し、図１７の回路情報ライブラリおよび図５のプロセッサ実行サイクルリストを参照し、実行プログラムＦ１、回路情報リストＦ２、アドレスリストＦ３を作成するフローを例にて説明する。図１９の「d0」、「d1」、「d2」、「d3」はデータレジスタを、「0x00」、「0x10」、「0x100」、「0x33333333」は即値を示している。図１９の各命令については図３および図５で説明した内容と同様である。
【０１５１】
ＳＴ１０：ソースプログラムＦ０を読み込む。
【０１５２】
ＳＴ２０：図１９に示す中間コード例を生成する。
【０１５３】
ＳＴ３０：図１７の回路情報ライブラリおよび図５のプロセッサ実行サイクルリストを参照し、図１９の中間コード例においてＦＰＧＡ１４で実行できる処理内容を検索する。この例では、図１９の３行目の「mulu d1,d3」、６行目の「div d1,d2」、９行目の「mul d2,d3」、１１行目の「mulu d0,d1」をＦＰＧＡ１４で実行することができると判断する。３行目の「mulud1,d3」を実行できるのは回路情報２、６行目の「div d1,d2」を実行できるのは回路情報１および４、９行目の「mul d2,d3」を実行できるのは回路情報３および４、１１行目の「muld0,d1」を実行できるのは回路情報３および４である。
【０１５４】
図２０は、上記処理内容を実行することができる回路情報の管理番号を各処理内容の中間コードに情報として付加する例であり、「＊」と「＊」で囲まれた数値が管理番号を示す。上記の処理内容以外についてはプロセッサ１２で実行することを決定する。
【０１５５】
ＳＴ４０：図１９の３行目の「mulu d1,d3」、６行目の「div d1,d2」、９行目の「muld2,d3」、１１行目の「mul d0,d1」の順で、各処理内容をＦＰＧＡ１４で実行するかプロセッサ１２で実行するかを判断する。処理内容毎にＳＴ４０１〜ＳＴ４１０の処理を行う。
【０１５６】
まず、最初に３行目の「mulu d1,d3」についてＳＴ４０の処理を行う。
【０１５７】
ＳＴ４０１：３行目の「mulu d1,d3」については処理内容Ｂに該当する処理内容がないのでＳＴ４０２へ進む。
【０１５８】
ＳＴ４０２：３行目の「mulu d1,d3」の実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションするのに十分な構成サイクル数を確保することができるか判断する。判断対象となる回路情報は回路情報２である。３行目の「mulud1,d3」について、コンパイラ５は１行目の「mov 0x00,d1」から２行目の「mov d2,d3」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。ＣＣが１５０サイクルである場合、ＦＣは１２０サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立つ（構成サイクル数を十分に確保できる）と判断し、ＳＴ４０８へ進む。
【０１５９】
ＳＴ４０８：３行目の「mulu d1,d3」は、回路情報２を使ってＦＰＧＡ１４で実行することを決定する。３行目の「mulud1,d3」に、新たに管理番号の「２」と、回路情報２で「mulu d1,d3」を実行するために必要となる回路選択情報の「１」を情報として付加する。
【０１６０】
図２１は、上記ＳＴ４０８を実行し終えた時点での中間コード例である。Ｆで囲まれた「２」、「１」がそれぞれＳＴ４０８で付加した管理番号と回路選択情報である。
【０１６１】
次に、６行目の「div d1,d2」についてＳＴ４０の処理を行う。
【０１６２】
ＳＴ４０１：３行目の「mulu d1,d3」は回路情報２を用いて実行され、回路情報２では「divd1,d2」を実行することができないとコンパイラ５は判断し、ＳＴ４０２へ進む。
【０１６３】
ＳＴ４０２：６行目の「div d1,d2」の実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションするのに十分な構成サイクル数を確保することができるか判断する。判断対象となる回路情報は構成サイクル数が最小の回路情報１である。６行目の「divd1,d2」について、４行目の「mov 0x33333333,d2」から５行目の「add 0x10,d2」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。サイクル数ＣＣが８０サイクルである場合、ＦＣは１００サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立たない（構成サイクル数を十分に確保できない）と判断し、ＳＴ４０３へ進む。
【０１６４】
ＳＴ４０３：３行目の「mulu d1,d3」にはロックフラグ（処理内容の実行に使用する回路情報を変更することを拒絶するか否かを示す情報）が付加されていないのでＳＴ４０４へ進む。
【０１６５】
ＳＴ４０４：６行目の「div d1,d2」について、３行目の「mulu d1,d3」も実行できる回路情報があるかを判断する。６行目の「divd1,d2」の「＊」で囲まれた数値（「１」と「４」）と、３行目の「mulu d1,d3」の「＊」で囲まれた数値（「２」）を検索し、一致する管理番号がないと判断し、ＳＴ４０５へ進む。
【０１６６】
ＳＴ４０５：６行目の「div d1,d2」について、プロセッサ１２での実行を伴う第１モード処理＃１の方が高速か、プロセッサ１２の動作停止・ＦＰＧＡ１４へのコンフィギュレーション・ＦＰＧＡ１４での実行を伴う第２モード処理＃２の方が高速かを判断する。判断対象となる回路情報はＳＴ４０２と同様に回路情報１である。６行目の「divd1,d2」について、ＦＣが１００サイクル、ＦＤが５サイクル、ＣＣが８０サイクル、ＣＤが４０サイクルであり、ＦＣ＋ＦＤ＜ＣＣ＋ＣＤの条件を満たす（第２モード処理＃２の方が高速である）のでＳＴ４０８へ進む。
【０１６７】
ＳＴ４０８：６行目の「div d1,d2」は回路情報１を使ってＦＰＧＡ１４で実行することを決定する。６行目の「divd1,d2」に、新たに管理番号の「１」と、回路情報１で「div d1,d2」を実行するために必要となる回路選択情報の「１」を情報として付加する。
【０１６８】
図２２は、上記ＳＴ４０８を実行し終えた時点での中間コード例である。「Ｆ」で囲まれた「１」、「１」がそれぞれ上記ＳＴ４０８で付加した管理番号と回路選択情報である。
【０１６９】
次に、９行目の「mul d2,d3」についてＳＴ４０の処理を行う。
【０１７０】
ＳＴ４０１：６行目の「div d1,d2」は回路情報１を用いて実行され、回路情報１では「muld2,d3」を実行することができないとコンパイラ５は判断し、ＳＴ４０２へ進む。
【０１７１】
ＳＴ４０２：９行目の「mul d2,d3」の実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションするのに十分な構成サイクル数を確保することができるか判断する。判断対象となる回路情報は構成サイクルが最小の回路情報３である。９行目の「muld2,d3」について、７行目の「mov d2,d3」から８行目の「add 0x10,d2」までをプロセッサ１２で実行するときに必要となるサイクル数ＣＣを算出する。サイクル数ＣＣが３０サイクルである場合、ＦＣは１０５サイクルであるので、コンパイラ５はＦＣ≦ＣＣが成り立たない（構成サイクルを十分に確保できない）と判断し、ＳＴ４０３へ進む。
【０１７２】
ＳＴ４０３：６行目の「div d1,d2」にはロックフラグが付加されていないのでＳＴ４０４へ進む。
【０１７３】
ＳＴ４０４：６行目の「div d1,d2」および９行目の「mul d2,d3」を実行することができる回路情報があるかを判断する。６行目の「divd1,d2」の「＊」で囲まれた数値と、９行目の「mul d2,d3」の「＊」で囲まれた数値を検索し、管理番号４が一致すると判断し、ＳＴ４１０へ進む。
【０１７４】
ＳＴ４１０：６行目の「div d1,d2」および９行目の「mul d2,d3」を回路情報４で実行することを決定する。９行目の「muld2,d3」に、新たに管理番号の「４」と、回路情報４で「mul d2,d3」を実行するために必要となる回路選択情報の「１」を情報として付加する（図１７の４行目で「mulA,B」に対応する回路選択情報は「１」）。また、９行目の「mul d2,d3」にはロックフラグ（処理内容の実行に使用する回路情報を変更することを拒絶することを示す情報）を付加する。６行目の「divd1,d2」については、「Ｆ」で囲まれた管理番号「１」を管理番号「４」に置き換え、回路選択情報「１」を回路情報４で「div d1,d2」を実行するために必要となる回路選択情報「２」に置き換える。
【０１７５】
図２３は、上記ＳＴ４１０を実行し終えた時点での中間コード例である。「Ｌ」はロックフラグを示す。
【０１７６】
最後に、１１行目の「mul d0,d1」についてＳＴ４０の処理を行う。
【０１７７】
ＳＴ４０１：９行目の「mul d2,d3」は回路情報４を使用して実行され、回路情報４で「muld0,d1」を実行することができるとコンパイラ５は判断し、ＳＴ４０６へ進む。
【０１７８】
ＳＴ４０６：９行目の「mul d2,d3」の中間コードにはロックフラグが付加されているので、ＳＴ４０９へ進む。
【０１７９】
ＳＴ４０９：１１行目の「mul d0,d1」は回路情報４を使用してＦＰＧＡ１４で実行することを決定する。１１行目の「muld0,d1」に、新たに管理番号の「４」と、回路情報４で「mul d0,d1」を実行するために必要となる回路選択情報の「１」を情報として付加する。また、１１行目の「muld0,d1」にロックフラグを付加する。
【０１８０】
図２４は、上記ＳＴ４０９を終えた時点での中間コード例である。
【０１８１】
ＳＴ５０：ＳＴ４０においてＦＰＧＡ１４で実行すると判断した「mulu d1,d3」、「divd1,d2」、「mul d2,d3」、「mul d0,d1」の実行に必要となる回路情報２，４を抽出した回路情報リストＦ２およびアドレスリストＦ３を作成する。
【０１８２】
図２５は回路情報２，４を回路情報ライブラリ６より抽出した回路情報リストＦ２の例を示す。図２５の左端の数値は各回路情報が格納されるアドレスを示す。
【０１８３】
本ステップにおいて抽出する回路情報２，４が格納されるアドレスを示すアドレスリストＦ３を作成する。図２６は回路情報２、４を格納するスタートアドレスおよびエンドアドレスを示すアドレスリストＦ３の例である。図２６の左端の数値はスタートアドレスおよびエンドアドレスが格納されるアドレスを示す。
【０１８４】
なお、回路情報リストＦ２およびアドレスリストＦ３は、回路情報保持構成制御手段１３の仕様に合わせてコンパイラ５は回路情報リストＦ２およびアドレスリストＦ３を作成すればよい。コンパイラ５は回路情報を抽出する際に回路情報２，４の管理番号２，４にシリアルナンバー１，２を割り振り、管理番号２とシリアルナンバー１が、管理番号４とシリアルナンバー２が対応することを記憶する。
【０１８５】
ＳＴ６０：ＳＴ４０８、ＳＴ４０９、ＳＴ４１０においてＦＰＧＡ１４で実行すると決定した３行目の「mulud1,d3」、６行目の「div d1,d2」、９行目の「mul d2,d3」、１１行目の「mul d0,d1」を、ＦＰＧＡ実行命令に置き換える。各処理内容について「Ｆ」で囲まれている管理番号に対応するシリアルナンバーおよび、「Ｆ」に囲まれた回路選択情報を示すＦＰＧＡ実行命令で各処理内容を置き換える。置き換えが完了すると、ＳＴ４０で付加した管理番号、回路選択情報、ロックフラグを消す。
【０１８６】
図２７は、上記ＳＴ６０までを実行したときの中間コード例である。「fpgad」はＦＰＧＡ実行命令の一例を示したものである。３行目の「fpgad」が示す数字の「１」は回路情報２に対応するシリアルナンバーを示し、シリアルナンバーが示す「１」は「muluA,B」をシリアルナンバー１対応の回路情報で実行するための回路選択情報を示し、「d1,d3」は処理内容の実行に必要となるデータレジスタを示している。同様に６行目の「fpgad」、９行目の「fpgad」，１１行目の「fpgad」についてもシリアルナンバー「２」に対応した回路情報４のＦＰＧＡ構成命令、ＦＰＧＡ実行命令となり、６行目のＦＰＧＡ実行命令は「divA,B」を実行するための回路選択情報「２」を、９行目および１１行目のＦＰＧＡ実行命令は「mul A,B」を実行するための回路選択情報「１」を示している。
【０１８７】
ＳＴ７０：中間コードの３行目の「fpgad 1,1,d1,d3」、６行目の「fpgad2,2,d1,d2」、９行目の「fpgad 2,1,d2,d3」、１１行目の「fpgad 2,1,d0,d1」について、各処理内容の実行に必要となる回路情報をＦＰＧＡ１４にコンフィギュレーションを開始する配置アドレスを判断する。「fpgad」の次の数値はシリアルナンバーを示し、その次の数値は回路選択情報を示す。
【０１８８】
３行目の「fpgad 2,1d1,d3」の場合、３行目の「fpgad 2,1,d1,d3」の配置アドレスより降順にＦＰＧＡ実行命令が存在しないため、１行目の「mov0x00,d1」の前にシリアルナンバー１を示すＦＰＧＡ構成命令（「fpgac 1」）を組み込む。
【０１８９】
６行目の「fpgad 2,2,d1,d2」の場合、３行目の「fpgad 1,1,d1,d3」とは異なるシリアルナンバーが後に続いているので、３行目の「fpgad1,1,d1,d3」の次の配置アドレスにシリアルナンバー２が続くＦＰＧＡ構成命令（「fpgac 2」）を組み込む。
【０１９０】
９行目の「fpgad 2,1,d2,d3」および１１行目の「fpgad 2,1,d0,d1」は６行目の「fpgad2,2,d1,d2」と同じシリアルナンバーであるので、ＦＰＧＡ構成命令を組み込まない。
【０１９１】
図２８は、上記ＳＴ７０までを実行したときの中間コードである。「fpgac」はＦＰＧＡ構成命令の一例であり、「fpgac」が示す数値はシリアルナンバーである。１行目の「fpgac1」はシリアルナンバー１対応の回路情報２をＦＰＧＡ１４にコンフィギュレーションする処理内容で、５行目の「fpgac 2」はシリアルナンバー２対応の回路情報４をＦＰＧＡ１４にコンフィギュレーションする処理内容である。
【０１９２】
ＳＴ８０：ＳＴ７０で変換した中間コードから実行プログラムＦ１を生成する。
【０１９３】
以上の例のように、９行目の「mul d2,d3」について、回路情報３はＦＰＧＡ１４にコンフィギュレーションする構成サイクル数を確保できないが、処理内容「mulA,B」および「div A,B」を実行することができる回路情報４をあらかじめＦＰＧＡ１４にコンフィギュレーションしておくことにより、９行目の「muld2,d3」もＦＰＧＡ１４で実行することができ、実行プログラムＦ１の処理速度を向上させることが可能となる。
【０１９４】
本実施形態によれば、コンパイラ５が生成する中間コードにおいてＦＰＧＡ１４で実行できる処理内容が近接していた場合、複数の処理内容を実行することができる回路情報をあらかじめＦＰＧＡ１４にコンフィギュレーションするように実行プログラムＦ１を生成することにより、回路情報をコンフィギュレーションするサイクル数が確保できない処理内容に関してもＦＰＧＡ１４で実行することができ、システム全体のパフォーマンスを向上させることが可能となる。
【０１９５】
なお、本実施形態のＳＴ４０２およびＳＴ４０５で判断対象となった回路情報は構成サイクル数が最小の回路情報としたが、構成サイクル数が多少大きくても実行サイクル数が最小の回路情報を判断対象としてもよい。実行サイクル数が最小の回路情報を判断対象とする場合、同じＦＰＧＡ実行命令を繰り返し実行することが多い実行プログラムＦ１において処理能力向上を図ることができる。また、本実施形態では２つの処理内容を実行することができる回路情報を含んだシステムについて説明したが、３つ以上の処理内容を実行することができる回路情報を含んだシステムを構築しても良い。
【０１９６】
（第３の実施形態）
上記第１および第２の実施形態では、実行プログラムＦ１の実行中に割り込みやサブルーチン分岐が発生した場合に課題がある。以下の説明において、その課題を説明する。
【０１９７】
第１および第２の実施形態において、シリアルナンバー１対応の回路情報１をＦＰＧＡ１４にコンフィギュレーションしている間に割り込みやサブルーチン分岐が発生し、割り込み処理やサブルーチン処理の中でシリアルナンバー２対応の回路情報２をＦＰＧＡ１４にコンフィギュレーションした場合、プロセッサ１２が割り込み処理やサブルーチン処理より復帰し、シリアルナンバー１対応の回路情報１を用いるＦＰＧＡ実行命令を実行すると、ＦＰＧＡ１４には回路情報２がコンフィギュレーションされているので、プロセッサ１２は再度、回路情報１をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。その結果として、プロセッサ１２は、ＦＰＧＡ１４のコンフィギュレーションが完了するまでプロセッサ１２の動作を止め、ＦＰＧＡ１４のコンフィギュレーションが完了すると、プロセッサ１２は処理内容をＦＰＧＡ１４に実行させる。このように、ＦＰＧＡ実行命令を実行してからＦＰＧＡ１４をコンフィギュレーションしなければならないため、サイクル数のロスが大きくなり、ＦＰＧＡ１４による処理能力の向上を図ることができなくなることがある。
【０１９８】
そこで、本発明の第３の実施形態は上記課題を解決するものである。本発明の第３の実施形態が第１および第２の実施形態と異なるのは、プロセッサ１２が実行プログラムＦ１を実行している間に割り込みやサブルーチン分岐が発生した場合、ＰＣ（Program Counter）とともに、図１５に示す回路情報保持構成制御手段１３のシリアルナンバーレジスタ３２から読み出したシリアルナンバーを格納するためのデータメモリとして、プロセッサ１２のスタック領域を設け、このスタック領域にＰＣとシリアルナンバーを格納し、割り込み処理やサブルーチン処理から復帰すると、スタック領域に格納したシリアルナンバーに対応する回路情報でＦＰＧＡ１４をコンフィギュレーションするように回路情報保持構成制御手段１３に命令する機構をプロセッサ１２に設けたことである。
【０１９９】
なお、スタック領域は図１および図１５には示していないが、プロセッサ外部に設けたメモリに配置してもよい。
【０２００】
図２９の中間コード例を用いて、第３の実施形態において実行プログラムＦ１を実行している間に割り込みが発生した場合の処理を説明する。
【０２０１】
図２９は中間コードの例を示しており、２４行目の「rti」は割り込み処理からの復帰を行う処理内容で、他の各処理内容については図３、図５、図１３の説明と同様の処理内容を示す。また、各行の左端に行数を示す。２０〜２４行目の処理内容は、割り込みが発生したときにプロセッサ１２が実行する割り込み処理であり、プロセッサ１２は割り込み処理を実行し終えると復帰する。
【０２０２】
プロセッサ１２は、図２９の中間コードをコンパイルして作成した実行プログラムＦ１を読み出すと、図２９の中間コード例の１行目の「fpgac 2」から順に実行する。プロセッサ１２は５行目の「fpgac 1」を実行すると、回路情報保持構成制御手段１３にシリアルナンバー１対応の回路情報でＦＰＧＡ１４をコンフィギュレーションするように命令する。
【０２０３】
プロセッサ１２が６行目の「add d0,d1」を実行しているときに割り込みが発生した場合、プロセッサ１２は６行目の「addd0,d1」の実行を終えてから、プロセッサ１２のスタック領域にＰＣおよびシリアルナンバーレジスタ３２から読み出したシリアルナンバー（この例ではシリアルナンバー０）を格納する。プロセッサ１２はスタック領域への格納を終えると、２０行目に分岐して割り込み処理を実行し始める。プロセッサ１２は、２０行目の「fpgac3」を実行して回路情報保持構成制御手段１３にシリアルナンバー３に対応する回路情報をＦＰＧＡ１４にコンフィギュレーションするように命令を出す。プロセッサ１２は、２３行目の「fpgad3,d2,d0」をＦＰＧＡ１４で実行させ、実行結果をＦＰＧＡ１４から受け取ると、２４行目の「rti」を実行して７行目の「mov 0x10,d2」の実行に復帰する。プロセッサ１２は、７行目の「mov0x10,d2」を実行する前に、スタック領域に格納したシリアルナンバー１対応の回路情報でＦＰＧＡ１４をコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。このときの回路情報保持構成制御手段１３の処理は、プロセッサ１２がＦＰＧＡ構成命令を実行した場合と同様である。プロセッサ１２は、回路情報保持構成制御手段１３にＦＰＧＡ１４のコンフィギュレーションをするように命令を出すと、７行目の「mov0x10,d2」以降の処理内容を実行する。
【０２０４】
ここで、図２９の割り込み処理でシリアルナンバー３を示したＦＰＧＡ構成命令とＦＰＧＡ実行命令ではなく、シリアルナンバー２を示したＦＰＧＡ構成命令とＦＰＧＡ実行命令があった場合や、ＦＰＧＡ構成命令およびＦＰＧＡ実行命令がなかった場合は、割り込み処理復帰後にシリアルナンバー２対応の回路情報をＦＰＧＡ１４にコンフィギュレーションしようとするが、シリアルナンバーレジスタ２３にはシリアルナンバー２が格納されており、回路情報保持構成制御手段１３はすでにシリアルナンバーに対応する回路情報がＦＰＧＡ１４に構成されていると判断するので、割り込み処理復帰後にコンフィギュレーションは発生しない。
【０２０５】
以上のように、本実施形態によれば、割り込み処理やサブルーチン処理からの復帰後に、プロセッサ１２のスタック領域に格納したシリアルナンバーに対応する回路情報をＦＰＧＡ１４にコンフィギュレーションするように命令を出すことよって、ＦＰＧＡ実行命令を実行する前に、そのＦＰＧＡ実行命令を実行するのに必要となる回路情報のコンフィギュレーションを開始することができ、サイクル数のロスを小さくすることができる。
【０２０６】
（第４の実施形態）
上記第１および第２の実施形態では、図１の実行プログラムＦ１の実行中に分岐が発生した場合に課題がある。その課題を以下に詳しく説明する。
【０２０７】
ある任意の回路情報ＡのＦＰＧＡ構成命令ＡからＦＰＧＡ実行命令Ａの間にプログラムが分岐してきた場合、ＦＰＧＡ構成命令Ａを実行せずにＦＰＧＡ実行命令Ａを実行する場合がある。第１の実施の形態においては、ＦＰＧＡ実行命令Ａを実行するときにＦＰＧＡステータスレジスタ３１とシリアルナンバーレジスタ３２を読み出し、回路情報ＡがＦＰＧＡ１４にコンフィギュレーションされているか確認した後、ＦＰＧＡ実行命令Ａを実行することになる。しかし、この場合では回路情報Ａがコンフィギュレーションされていない場合が考えられ、ＦＰＧＡ１４に回路情報Ａをコンフィギュレーションする工程が発生する。コンフィギュレーション中はプロセッサ１２が待たされた状態となり、その間のサイクル数が無駄となり、システム全体のパフォーマンスが低下する原因となる。そこで本実施の形態では、分岐も考慮したシステム構成を以下に説明する。
【０２０８】
本発明の第４の実施形態が第１および第２の実施形態と異なるのは、図１のコンパイラ５が中間コードから分岐命令を検索し、分岐命令があるようなら、その分岐命令のオペランドがラベルまたは即値であるかを判断し、オペランドがラベルか即値を示すならそのオペランドが示す分岐先の配置アドレスの昇順の処理内容においてＦＰＧＡ実行命令を配置アドレスの昇順に検索し、最初に見つけたＦＰＧＡ実行命令が示すシリアルナンバーを調べ、そのシリアルナンバーを示すＦＰＧＡ構成命令を分岐先の中間コードの配置アドレスに組み込むステップを設けたことである。
【０２０９】
図３０は、本実施形態におけるコンパイラの処理を示すものである。図３０のＳＴ７５は前述した分岐先の配置アドレスにＦＰＧＡ構成命令を組み込むステップである。ＳＴ７５以外はすべて図６のコンパイラの処理と同様である。
【０２１０】
図３１は、図３０のＳＴ７０までを実行して得た中間コードの例である。１２行目の「beq」は、１１行目の「cmpd1,d2」の演算結果を反映し、「d1」と「d2」が等しくなければ次の命令を実行し、「d1」、「d2」が等しければ「beq」のオペランドが示すアドレスへ分岐する命令である。この例では、「beq」のオペランドは３行目の「label1」を示しているので、「d1」、「d2」が等しければプロセッサ１２は３行目に分岐する。
【０２１１】
本実施形態において、図１のコンパイラ５が図３１の中間コード例をＳＴ７５で処理した場合、コンパイラ５は、図３１の中間コード例から分岐命令を検索する。この例では、１２行目の「beq」が分岐命令であるので、コンパイラ５はその命令のオペランドがラベルまたは即値であるかを判断する。１２行目の「beq」のオペランドが「label1」でラベルであると判断すると、コンパイラ５は３行目の「label1」を基点として配置アドレスの昇順にＦＰＧＡ実行命令を検索する。コンパイラ５は、最初に見つけた６行目の「fpgad2,d2,d0」のシリアルナンバーを調べ、そのシリアルナンバーが示すＦＰＧＡ構成命令を３行目に組み込む。６行目の「fpgad 2,d2,d0」は、シリアルナンバー２対応の回路情報を用いて実行されるので、３行目に組み込むＦＰＧＡ構成命令は「fpgac2」となる。ここでＦＰＧＡ実行命令に対応したＦＰＧＡ構成命令がある場合やＦＰＧＡ実行命令がない場合は、ＦＰＧＡ構成命令の組み込みは行わない。
【０２１２】
図３２は、図３１の中間コード例にＦＰＧＡ構成命令を組み込んだ後の中間コード例である。図３１と異なる点は３行目に「fpgac 2」を組み込んだことである。この中間コードをコンパイルして実行プログラムを作成し、プロセッサ１２がその実行プログラムを読み込むと、プロセッサ１２は１行目の「fpgac2」から配置アドレスの昇順に実行する。プロセッサ１２はシリアルナンバー２対応の回路情報をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。回路情報保持構成制御手段１３は、プロセッサ１２が指示するシリアルナンバー２とシリアルナンバーレジスタ３２の値を比較し、値が異なるため、シリアルナンバー２対応の回路情報をＦＰＧＡ１４にコンフィギュレーションする。プロセッサ１２は順次命令を実行していき、３行目の「fpgac2」を実行する。プロセッサ１２はシリアルナンバー２対応の回路情報をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。回路情報保持手段１３は、命令に従いＦＰＧＡ１４をコンフィギュレーションしようとするが、シリアルナンバーレジスタ３２の値がシリアルナンバー２と同値であるため、コンフィギュレーションは行わない。
【０２１３】
次にプロセッサ１２は７行目の「fpgac 1」を実行するときは、シリアルナンバー１対応の回路情報をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。回路情報保持構成制御手段１３は、命令に従いＦＰＧＡ１４をコンフィギュレーションする。１０行目の「fpgad1,d1,d0」を実行し、１２行目の「beq label1」において、分岐が発生した場合は３行目に分岐する。分岐しない場合は、次の命令を実行する。３行目に分岐するとプロセッサ１２は「fpgac2」を実行してシリアルナンバー２対応の回路情報をＦＰＧＡ１４にコンフィギュレーションするように回路情報保持構成制御手段１３に命令を出す。回路情報保持構成制御手段１３は、命令に従いＦＰＧＡ１４をコンフィギュレーションする。こうすることにより、ＦＰＧＡ実行命令を実行する前にあらかじめＦＰＧＡ１４をコンフィギュレーションすることが可能となる。
【０２１４】
以上のように、本実施形態によれば、実行プログラムＦ１において分岐命令で分岐が発生しても、分岐先にＦＰＧＡ構成命令を組み込んでおくことにより、プロセッサ１２がＦＰＧＡ実行命令を実行する前にＦＰＧＡ実行命令の実行に必要となる回路情報でＦＰＧＡ１４のコンフィギュレーションを開始することができ、プロセッサ１２を待たせるサイクル数を小さくすることができ、システム全体のパフォーマンスを向上させることが可能となる。
【産業上の利用可能性】
【０２１５】
以上のように、本発明によれば、従来、回路規模が大きいＦＰＧＡとプロセッサを用いて実行されていた処理を、回路規模が小さいＦＰＧＡとプロセッサで実行することができるようになるため、ＦＰＧＡの導入コストを抑えることができ、より安価な半導体集積回路装置を提供することができる。また、ＦＰＧＡでの処理内容の実行には回路情報ライブラリに格納された回路情報を用いるので、ソースプログラム毎に専用回路を設計する必要がないため、開発期間の短縮、開発コストを削減することができる。また、ソースプログラムを専用回路ではなく、汎用性のある回路情報ライブラリの回路情報を用いて実行するため、様々なソースプログラムを実行することが可能なコンパイラ装置および半導体集積回路装置を提供することができる。
【図面の簡単な説明】
【０２１６】
【図１】本発明の第１の実施形態におけるコンパイラ装置および半導体集積回路装置のシステム構成図
【図２】本発明の第１の実施形態における回路情報ライブラリのデータ構造を示す図
【図３】本発明の第１の実施形態における回路情報ライブラリの一例を示す図
【図４】本発明の第１の実施形態におけるプロセッサ実行サイクルリストのデータ構造を示す図
【図５】本発明の第１の実施形態におけるプロセッサ実行サイクルリストの一例を示す図
【図６】本発明の第１の実施形態におけるコンパイラのソースプログラムのコンパイル過程を示すフローチャート
【図７】本発明の第１の実施形態におけるコンパイラのソースプログラムのコンパイル過程のＳＴ４０の詳細なフローチャート
【図８】本発明の第１の実施形態における中間コードの一例を示す図
【図９】本発明の第１の実施形態における回路情報リストのデータ構造を示す図
【図１０】本発明の第１の実施形態におけるアドレスリストのデータ構造を示す図
【図１１】本発明の第１の実施形態における回路情報リストの一例を示す図
【図１２】本発明の第１の実施形態におけるアドレスリストの一例を示す図
【図１３】本発明の第１の実施形態におけるコンパイラのＳＴ６０までを実行したときの中間コード例を示す図
【図１４】本発明の第１の実施形態におけるコンパイラのＳＴ７０までを実行したときの中間コード例を示す図
【図１５】本発明の第１の実施形態における半導体集積回路装置の詳細なブロック回路図
【図１６】本発明の第２の実施形態における回路情報ライブラリのデータ構造を示す図
【図１７】本発明の第２の実施形態における回路情報ライブラリの一例を示す図
【図１８】本発明の第２の実施形態におけるコンパイラのソースプログラムのコンパイル過程のＳＴ４０の詳細なフローチャート
【図１９】本発明の第２の実施形態における中間コードの一例を示す図
【図２０】本発明の第２の実施形態におけるコンパイラのＳＴ３０までを実行したときの中間コード例を示す図
【図２１】本発明の第２の実施形態において「mulu d1,d3」についてコンパイラのＳＴ４０８までを実行したときの中間コード例を示す図
【図２２】本発明の第２の実施形態において「div d1,d2」についてコンパイラのＳＴ４０８までを実行したときの中間コード例を示す図
【図２３】本発明の第２の実施形態において「mul d2,d3」についてコンパイラのＳＴ４１０までを実行したときの中間コード例を示す図
【図２４】本発明の第２の実施形態において「mul d0,d1」についてコンパイラのＳＴ４０９までを実行したときの中間コード例を示す図
【図２５】本発明の第２の実施形態における回路情報リストの一例を示す図
【図２６】本発明の第２の実施形態におけるアドレスリストの一例を示す図
【図２７】本発明の第２の実施形態におけるコンパイラのＳＴ６０までを実行したときの中間コード例を示す図
【図２８】本発明の第２の実施形態におけるコンパイラのＳＴ７０までを実行したときの中間コード例を示す図
【図２９】本発明の第３の実施形態における中間コードの一例を示す図
【図３０】本発明の第４の実施形態におけるコンパイラのソースプログラムのコンパイル過程を示すフローチャート
【図３１】本発明の第４の実施形態におけるコンパイラのＳＴ７０までを実行したときの中間コード例を示す図
【図３２】本発明の第４の実施形態におけるコンパイラのＳＴ７５までを実行したときの中間コード例を示す図
【符号の説明】
【０２１７】
Ａ  コンパイラ装置
Ｂ  半導体集積回路装置
５  コンパイラ
５ａ  プロセッサ実行サイクルリスト
６  回路情報ライブラリ
１１  実行プログラム保持手段
１２  プロセッサ
１３  回路情報保持構成制御手段
１４  ＦＰＧＡ（再構成可能処理装置）
２０  ＦＰＧＡ組み込み構成手段
２１  読み出しアドレスレジスタ
２２  エンドアドレスレジスタ
２３  構成制御部
２４  デコーダ
２５  データ制御部
３１  ＦＰＧＡステータスレジスタ
３２  シリアルナンバーレジスタ
３３  アドレスリスト保持手段
３４  回路情報リスト保持手段
Ｆ０  ソースプログラム
Ｆ１  実行プログラム
Ｆ２  回路情報リスト
Ｆ３  アドレスリスト
【図１】
2008059066.tif 000003
【図２】
2008059066.tif 000004
【図３】
2008059066.tif 000005
【図４】
2008059066.tif 000006
【図５】
2008059066.tif 000007
【図６】
2008059066.tif 000008
【図７】
2008059066.tif 000009
【図８】
2008059066.tif 000010
【図９】
2008059066.tif 000011
【図１０】
2008059066.tif 000012
【図１１】
2008059066.tif 000013
【図１２】
2008059066.tif 000014
【図１３】
2008059066.tif 000015
【図１４】
2008059066.tif 000016
【図１５】
2008059066.tif 000017
【図１６】
2008059066.tif 000018
【図１７】
2008059066.tif 000019
【図１８】
2008059066.tif 000020
【図１９】
2008059066.tif 000021
【図２０】
2008059066.tif 000022
【図２１】
2008059066.tif 000023
【図２２】
2008059066.tif 000024
【図２３】
2008059066.tif 000025
【図２４】
2008059066.tif 000026
【図２５】
2008059066.tif 000027
【図２６】
2008059066.tif 000028
【図２７】
2008059066.tif 000029
【図２８】
2008059066.tif 000030
【図２９】
2008059066.tif 000031
【図３０】
2008059066.tif 000032
【図３１】
2008059066.tif 000033
【図３２】
2008059066.tif 000034