(57)【特許請求の範囲】
【請求項１】
回路データを変更することで異なる論理回路として動作する可変回路部と、
前記可変回路部が生成した結果データを記憶する結果記憶部と、
を有するプログラマブルデバイスと、
アプリケーションソフトウェアと、
前記アプリケーションソフトウェアからの要求に応じて、複数種類の回路データのうち一の回路データを前記可変回路部にロードさせ、前記可変回路部を前記アプリケーションソフトウェアに割り当てるドライバソフトウェアと、
を実行するプロセッサとを有し、
前記プロセッサは、前記ドライバソフトウェアを用いて、前記一の回路データに対応する一の結果データが前記結果記憶部に格納されたことを検知すると、前記可変回路部の前記アプリケーションソフトウェアへの割り当てを解除し、前記可変回路部の処理の完了を前記アプリケーションソフトウェアに通知する、
情報処理装置。
【請求項２】
前記結果記憶部は、前記複数種類の回路データに対応する複数の記憶領域を有し、
前記プログラマブルデバイスは、前記一の結果データを、前記複数の記憶領域のうち前記一の回路データに対応する一の記憶領域に格納し、
前記プロセッサは、前記可変回路部の割り当てを解除した後は、前記一の記憶領域から前記一の結果データが読み出される前であっても、前記複数種類の回路データのうち他の回路データを前記可変回路部にロードさせることを許容する、
請求項１記載の情報処理装置。
【請求項３】
前記結果記憶部は、複数の記憶領域を有し、
前記プログラマブルデバイスは、前記一の結果データを、タグ情報と対応付けて前記複数の記憶領域のうち一の記憶領域に格納し、
前記プロセッサは、前記タグ情報を前記アプリケーションソフトウェアに通知し、
前記プロセッサは、前記可変回路部の割り当てを解除した後は、前記一の記憶領域から前記一の結果データが読み出される前であっても、前記一の回路データを用いた他の処理を前記可変回路部に開始させることを許容する、
請求項１記載の情報処理装置。
【請求項４】
前記プロセッサは、前記可変回路部を前記アプリケーションソフトウェアに割り当てたとき前記タグ情報を生成し、前記タグ情報を前記プログラマブルデバイスに通知し、
前記プロセッサは、前記一の結果データが前記結果記憶部に格納されたことを検知したとき、前記タグ情報を前記プログラマブルデバイスから取得する、
請求項３記載の情報処理装置。
【請求項５】
プログラマブルデバイスとプロセッサとを有する情報処理装置が実行するプログラマブルデバイス処理方法であって、
前記プロセッサが実行するアプリケーションソフトウェアからの要求に応じて、前記プロセッサが実行するドライバソフトウェアを用いて、複数種類の回路データのうち一の回路データを前記プログラマブルデバイスが有する可変回路部にロードさせ、前記可変回路部を前記アプリケーションソフトウェアに割り当て、
前記可変回路部を前記一の回路データに応じた論理回路として動作させ、前記可変回路部が生成した前記一の回路データに対応する一の結果データを、前記プログラマブルデバイスが有する結果記憶部に格納し、
前記ドライバソフトウェアを用いて、前記一の結果データが前記結果記憶部に格納されたことを検知すると、前記可変回路部の前記アプリケーションソフトウェアへの割り当てを解除し、前記可変回路部の処理の完了を前記アプリケーションソフトウェアに通知する、
プログラマブルデバイス処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置およびプログラマブルデバイス処理方法に関する。
【背景技術】
【０００２】
組み込みシステムなどの情報処理の分野では、ＦＰＧＡ（Field Programmable Gate Array）やＣＰＬＤ（Complex Programmable Logic Device）などのプログラマブルデバイスが用いられることがある。プログラマブルデバイスを、プログラマブルロジックデバイス（ＰＬＤ：Programmable Logic Device）と言うこともある。
【０００３】
プログラマブルデバイスは、複数の論理ブロックそれぞれの入力と出力の間の関係や、複数の論理ブロックの間の接続関係などを、製造後にユーザが変更することのできるハードウェアである。論理回路の構造を定義した回路データをプログラマブルデバイスにロードすることで、回路データが示す論理回路をプログラマブルデバイス上に実現することができる。動作中に論理回路を変更できるプログラマブルデバイスを、動的再構成可能（ダイナミックリコンフィギュラブル）デバイスと言うことがある。画像処理や音声信号処理などの特定の処理は、プログラマブルデバイスの方が、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）などのプロセッサよりも高速に実行できる。
【０００４】
情報処理装置の中には、プロセッサとプログラマブルデバイスとを有し、プログラマブルデバイス上に形成する論理回路をプロセッサが動的に変更するものがある。プロセッサは、ある回路データをプログラマブルデバイスにロードさせ、当該回路データに応じた処理をプログラマブルデバイスに実行させる。また、プロセッサは、他の回路データをプログラマブルデバイスにロードさせ、当該他の回路データに応じた他の処理をプログラマブルデバイスに実行させる。プログラマブルデバイス上に形成する論理回路を時分割で変更することで、プログラマブルデバイスのリソースを効率的に使用でき、プログラマブルデバイスの論理ブロックの規模を削減することができる。
【０００５】
例えば、プロセッサとＦＰＧＡとを有する情報処理装置が提案されている。提案の情報処理装置において、プロセッサは、ＦＰＧＡに実行させる複数のタスクを、タスクの実行に要する回路データに応じて複数のグループに分類する。プロセッサは、１つのグループを選択し、選択したグループに対応する回路データをＦＰＧＡにロードさせ、選択したグループに属する２以上のタスクを連続的にＦＰＧＡに実行させる。これにより、ＦＰＧＡに回路データをロードさせる回数を削減することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２００７／０２９４２１号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
プロセッサがアプリケーションソフトウェアを実行し、アプリケーションソフトウェアからの要求に応じて、プログラマブルデバイスに回路データをロードさせて処理を実行させる情報処理装置を考える。この情報処理装置における１回のプログラマブルデバイスの使用方法として、次のような手順が考えられる。
【０００８】
プログラマブルデバイスは、アプリケーションソフトウェアからの要求に応じて回路データがロードされた後、当該回路データによって定義された論理回路に従って処理を開始する。プログラマブルデバイスは、処理が完了すると結果データを内部に保持する。プロセッサは、アプリケーションソフトウェアに対して処理の完了を通知し、アプリケーションソフトウェアにプログラマブルデバイスから結果データを読み出させる。結果データが読み出された後、プロセッサは、上記の回路データによって動的再構成されたプログラマブルデバイスのリソースを解放し、当該リソースを他の用途に使用可能にする。
【０００９】
しかし、上記の使用方法によれば、プログラマブルデバイスが処理を完了しても、アプリケーションソフトウェアがプログラマブルデバイスから結果データを読み出すまでは動的再構成されたリソースが解放されず、待ち時間が発生してしまう。このため、プログラマブルデバイスの使用効率が低下するおそれがあるという問題がある。
【００１０】
１つの側面では、本発明は、プログラマブルデバイスのリソースが解放されるまでの待ち時間を短縮した情報処理装置およびプログラマブルデバイス処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、プログラマブルデバイスとプロセッサとを有する情報処理装置が提供される。プログラマブルデバイスは、可変回路部と結果記憶部とを有する。可変回路部は、回路データを変更することで異なる論理回路として動作する。結果記憶部は、可変回路部が生成した結果データを記憶する。プロセッサは、アプリケーションソフトウェアとドライバソフトウェアとを実行する。ドライバソフトウェアは、アプリケーションソフトウェアからの要求に応じて、複数種類の回路データのうち一の回路データを可変回路部にロードさせ、可変回路部をアプリケーションソフトウェアに割り当てる。プロセッサは、ドライバソフトウェアを用いて、一の回路データに対応する一の結果データが結果記憶部に格納されたことを検知すると、可変回路部のアプリケーションソフトウェアへの割り当てを解除し、可変回路部の処理の完了をアプリケーションソフトウェアに通知する。
【００１２】
また、１つの態様では、プログラマブルデバイスとプロセッサとを有する情報処理装置が実行するプログラマブルデバイス処理方法が提供される。
【発明の効果】
【００１３】
１つの側面では、プログラマブルデバイスのリソースが解放されるまでの待ち時間を短縮できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理装置の例を示す図である。
【図２】情報処理装置のハードウェア例を示すブロック図である。
【図３】ＦＰＧＡのハードウェア例を示すブロック図である。
【図４】結果領域のハードウェア例を示すブロック図である。
【図５】情報処理装置の機能例を示すブロック図である。
【図６】リソース情報テーブルの例を示す図である。
【図７】ＦＰＧＡに関するアドレス空間の例を示す図である。
【図８】ＦＰＧＡ使用の第１のシーケンス例を示す図である。
【図９】回路領域と結果領域の第１の使用例を示す図である。
【図１０】ＦＰＧＡ使用の第２のシーケンス例を示す図である。
【図１１】回路領域と結果領域の第２の使用例を示す図である。
【図１２】ドライバ処理の手順例を示すフローチャートである。
【図１３】ＦＰＧＡの手順例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１６】
図１は、第１の実施の形態の情報処理装置の例を示す図である。
第１の実施の形態の情報処理装置１０は、プログラマブルデバイス１１、プロセッサ１４およびメモリ１７を有する。プログラマブルデバイス１１は、動的再構成可能デバイスであり、例えば、ＦＰＧＡやＣＰＬＤなどである。プロセッサ１４は、プログラムを実行する汎用プロセッサであり、例えば、ＣＰＵやＭＰＵなどである。メモリ１７は、ＲＡＭ（Random Access Memory）などの揮発性メモリでもよいし、フラッシュメモリなどの不揮発性メモリでもよい。なお、情報処理装置１０は、プリンタや通信装置などの組み込み機器に搭載してもよく、様々な情報機器に搭載することができる。
【００１７】
プログラマブルデバイス１１は、可変回路部１２および結果記憶部１３を有する。
可変回路部１２は、ロードする回路データを変更することで異なる論理回路として動作するハードウェアである。可変回路部１２は、ロードした回路データに従って動的再構成を行う。例えば、可変回路部１２は複数の論理ブロックを有し、回路データによって、各論理ブロックの入力信号から出力信号を算出する変換ルールや複数の論理ブロックの間の接続関係などを定義することができる。可変回路部１２は、ルックアップテーブル方式によって、入力信号から出力信号への変換ルールを定義してもよい。また、可変回路部１２は、クロスバースイッチ方式によって接続関係を定義してもよい。
【００１８】
結果記憶部１３は、可変回路部１２が生成した結果データを記憶する。結果記憶部１３は、１または２以上のレジスタを含んでもよい。結果記憶部１３における結果データの保存には、揮発性メモリを用いてもよいし不揮発性メモリを用いてもよい。結果記憶部１３は、可変回路部１２の外部に存在する。よって、可変回路部１２から結果記憶部１３に結果データが出力された後は、可変回路部１２が他の回路データに従って動的再構成を行っても、結果記憶部１３に記憶された結果データは消去されない。また、可変回路部１２が他の処理を開始しても、結果記憶部１３に記憶された結果データは消去されない。
【００１９】
メモリ１７は、回路データ１８ａ，１８ｂ，１８ｃを記憶する。可変回路部１２に回路データ１８ａ，１８ｂ，１８ｃの何れか１つをロードさせることで、ロードさせた回路データに応じた論理回路が可変回路部１２上に形成される。なお、第１の実施の形態では、一例として回路データの種類を３種類としたが、回路データの種類を２種類としてもよいし、回路データの種類を４種類以上としてもよい。
【００２０】
プロセッサ１４は、アプリケーションソフトウェア１５およびドライバソフトウェア１６を実行する。例えば、プロセッサ１４は、アプリケーションソフトウェア１５を定義したアプリケーションプログラムと、ドライバソフトウェア１６を定義したドライバプログラムとを実行する。プロセッサ１４は、アプリケーションソフトウェア１５とドライバソフトウェア１６を、異なるプロセッサコアを用いて並列に実行してもよいし、同一のプロセッサコアを用いて時分割に実行してもよい。
【００２１】
アプリケーションソフトウェア１５は、可変回路部１２に処理を実行させたいとき、ドライバソフトウェア１６に対して可変回路部１２の使用を要求する。アプリケーションソフトウェア１５は、後述するようにドライバソフトウェア１６から処理の完了が通知されると、ドライバソフトウェア１６を介して結果記憶部１３から結果データを読み出す。結果データを読み出すタイミングは、処理の完了が通知された後任意のタイミングでよい。
【００２２】
ドライバソフトウェア１６は、アプリケーションソフトウェア１５からの要求に応じて、メモリ１７に記憶された回路データ１８ａ，１８ｂ，１８ｃのうち一の回路データを可変回路部１２にロードさせる。第１の実施の形態では一例として、ドライバソフトウェア１６は回路データ１８ａを可変回路部１２にロードさせる。ドライバソフトウェア１６は、メモリ１７から回路データ１８ａを読み出して可変回路部１２に転送してもよい。これにより、回路データ１８ａによって定義された論理回路が可変回路部１２上に形成され、当該論理回路に従った処理を開始することが可能となる。
【００２３】
ドライバソフトウェア１６は、可変回路部１２をアプリケーションソフトウェア１５に割り当てる。可変回路部１２の割り当て後は、ドライバソフトウェア１６は、可変回路部１２の処理が完了したと判断するまで可変回路部１２を他の用途に使用することを禁止する。例えば、他のアプリケーションソフトウェアからの要求に応じて、可変回路部１２に他の回路データ（回路データ１８ｂまたは回路データ１８ｃ）をロードさせることが禁止される。また、例えば、他のアプリケーションソフトウェアからの要求に応じて、可変回路部１２に他の処理を開始させることが禁止される。
【００２４】
ドライバソフトウェア１６は、可変回路部１２が回路データ１８ａに応じた処理を開始した後、回路データ１８ａに対応する結果データ１９が結果記憶部１３に格納されたことを検知する。プログラマブルデバイス１１は、結果データ１９が結果記憶部１３に格納されると、プロセッサ１４に対して割り込み信号を送信するようにしてもよい。その場合、ドライバソフトウェア１６は、割り込み信号を受信することによって、結果データ１９が結果記憶部１３に格納されたことを検知することができる。
【００２５】
すると、ドライバソフトウェア１６は、可変回路部１２のアプリケーションソフトウェア１５への割り当てを解除する。また、ドライバソフトウェア１６は、可変回路部１２の処理の完了をアプリケーションソフトウェア１５に通知する。処理の完了の通知は、アプリケーションソフトウェア１５に対する割り込みとして実装してもよい。
【００２６】
ここで、可変回路部１２のアプリケーションソフトウェア１５への割り当てが解除されると、ドライバソフトウェア１６は、可変回路部１２を他の用途に使用することを許容する。例えば、他のアプリケーションソフトウェアからの要求に応じて、可変回路部１２に他の回路データ（回路データ１８ｂまたは回路データ１８ｃ）をロードさせることが許容される。また、例えば、他のアプリケーションソフトウェアからの要求に応じて、可変回路部１２に他の処理を開始させることが許容される。よって、アプリケーションソフトウェア１５が結果データ１９を読み出すとき、可変回路部１２が既に他の用途に使用されている可能性がある。ただし、上記のように、結果記憶部１３に出力された結果データ１９は、可変回路部１２の使用状況の影響を受けずに読み出すことができる。
【００２７】
第１の実施の形態の情報処理装置１０によれば、アプリケーションソフトウェア１５からの要求に応じて、回路データ１８ａが可変回路部１２にロードされ、可変回路部１２がアプリケーションソフトウェア１５に割り当てられる。可変回路部１２が回路データ１８ａに応じた論理回路として動作し、可変回路部１２により生成された結果データ１９が結果記憶部１３に格納される。ドライバソフトウェア１６により、結果データ１９が結果記憶部１３に格納されたことが検知される。すると、ドライバソフトウェア１６により、可変回路部１２のアプリケーションソフトウェア１５への割り当てが解除され、可変回路部１２の処理の完了がアプリケーションソフトウェア１５に通知される。
【００２８】
これにより、可変回路部１２の処理が完了した後、可変回路部１２のアプリケーションソフトウェア１５への割り当てを迅速に解除することができる。可変回路部１２の処理が完了した後、アプリケーションソフトウェア１５が結果データ１９を読み出すのを待たなくてよく、また、アプリケーションソフトウェア１５が可変回路部１２の解放を要求するのを待たなくてよい。よって、プログラマブルデバイス１１のリソースが解放されるまでの待ち時間を短縮することができる。その結果、プログラマブルデバイス１１の使用効率を向上させることができる。また、プログラマブルデバイス１１が少ないリソースによってプロセッサ１４の要求を満たすことができ、回路規模を削減することができる。
【００２９】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、情報処理装置のハードウェア例を示すブロック図である。
【００３０】
第２の実施の形態の情報処理装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、不揮発性メモリ１０３、ディスプレイ１０４、入力デバイス１０５、媒体リーダ１０６、通信インタフェース１０７およびＦＰＧＡ１１０を有する。
【００３１】
ＣＰＵ１０１およびＲＡＭ１０２は、システムバス１０８に接続されている。不揮発性メモリ１０３、ディスプレイ１０４、入力デバイス１０５、媒体リーダ１０６および通信インタフェース１０７は、Ｉ／Ｏ（Input / Output）バス１０９に接続されている。システムバス１０８とＩ／Ｏバス１０９とは、相互に接続されている。
【００３２】
なお、情報処理装置１００は、第１の実施の形態の情報処理装置１０に対応する。ＣＰＵ１０１は、第１の実施の形態のプロセッサ１４に対応する。ＲＡＭ１０２または不揮発性メモリ１０３は、第１の実施の形態のメモリ１７に対応する。ＦＰＧＡ１１０は、第１の実施の形態のプログラマブルデバイス１１に対応する。
【００３３】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、不揮発性メモリ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、情報処理装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と言うこともある。
【００３４】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３５】
不揮発性メモリ１０３は、ＯＳ（Operating System）やドライバソフトウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。不揮発性メモリ１０３として、ＲＯＭ（Read Only Memory）を用いてもよいし、フラッシュメモリなどの書き換え可能メモリを用いてもよい。ただし、情報処理装置１００は、不揮発性メモリ１０３に代えて、ＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）などの他の種類の不揮発性の記憶装置を備えてもよい。また、情報処理装置１００は、複数種類の不揮発性の記憶装置を有してもよい。
【００３６】
ディスプレイ１０４は、ＣＰＵ１０１からの指示に従って画像を表示する。ディスプレイ１０４として、例えば、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）や有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。ただし、ディスプレイ１０４が情報処理装置１００の外部に存在してもよい。
【００３７】
入力デバイス１０５は、ユーザの操作を検出し、検出した操作を示す入力信号をＣＰＵ１０１に出力する。入力デバイス１０５として、例えば、キーパッドやタッチパネルなどを用いることができる。ただし、情報処理装置１００は、複数種類の入力デバイスを有してもよい。また、入力デバイス１０５が情報処理装置１００の外部に存在してもよい。
【００３８】
媒体リーダ１０６は、記録媒体１０６ａに記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１０６ａとして、例えば、半導体メモリを使用できる。ただし、記録媒体１０６ａとして、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）などを使用してもよい。媒体リーダ１０６は、例えば、記録媒体１０６ａから読み取ったプログラムやデータをＲＡＭ１０２または不揮発性メモリ１０３に格納する。
【００３９】
通信インタフェース１０７は、ネットワーク１０７ａに接続され、ネットワーク１０７ａを介して他の装置と通信を行うインタフェースである。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００４０】
ＦＰＧＡ１１０は、回路データを変更することで異なる論理回路として動作するプログラマブルデバイスである。予め用意された複数種類の回路データが不揮発性メモリ１０３に記憶されている。第２の実施の形態では、後述するように、専用回路＃０〜＃７の８種類の専用回路を実現するための回路データ＃０〜＃７が用意されている。ＣＰＵ１０１によって、回路データが不揮発性メモリ１０３からＲＡＭ１０２に読み出され、処理を行うタイミングでＦＰＧＡ１１０にロードされる。ＦＰＧＡ１１０は、動的再構成可能デバイスであり、動作中に動的に論理回路を変更することができる。
【００４１】
図３は、ＦＰＧＡのハードウェア例を示すブロック図である。
ＦＰＧＡ１１０は、回路領域１１１〜１１４、結果領域１１５ａ〜１１５ｈ、マルチプレクサ（ＭＵＸ）１１６ａ〜１１６ｈおよびアドレスデコーダ１１７を有する。なお、回路領域１１１〜１１４は、第１の実施の形態の可変回路部１２に対応する。結果領域１１５ａ〜１１５ｈは、第１の実施の形態の結果記憶部１３に対応する。
【００４２】
回路領域１１１〜１１４は、互いに独立に回路データをロードすることができ、ロードした回路データに応じた論理回路として並列に動作するハードウェアリソースである。回路領域１１１〜１１４は、例えば、入力と出力の関係や相互の接続関係を変更できる複数の論理ブロックを有している。第２の実施の形態では、ＦＰＧＡ１１０は一例として４個の回路領域を有しているが、ＦＰＧＡ１１０が有する回路領域の個数は１〜３個でもよいし５個以上でもよい。回路領域１１１〜１１４は、同一の回路データをロードすることもできるし、互いに異なる回路データをロードすることもできる。
【００４３】
回路領域１１１（回路領域Ａ）は、回路データレジスタ１１１ａと入力データレジスタ１１１ｂを有する。回路領域１１２（回路領域Ｂ）は、回路データレジスタ１１２ａと入力データレジスタ１１２ｂを有する。回路領域１１３（回路領域Ｃ）は、回路データレジスタ１１３ａと入力データレジスタ１１３ｂを有する。回路領域１１４（回路領域Ｄ）は、回路データレジスタ１１４ａと入力データレジスタ１１４ｂを有する。
【００４４】
回路領域１１１は、ＣＰＵ１０１から送り込まれた回路データを回路データレジスタ１１１ａに格納し、回路データに応じた専用回路として動作するように動的再構成を行う。回路データには、例えば、各論理ブロックの入力と出力の関係を定義したルックアップテーブルや、クロスバースイッチの接続情報などが含まれる。動的再構成の後、回路領域１１１は、ＣＰＵ１０１から送り込まれた入力データを入力データレジスタ１１１ｂに格納し、入力データを用いて処理を開始する。例えば、回路領域１１１は、入力データレジスタ１１１ｂ内の所定のフラグがＯＮになったときに処理を開始する。回路領域１１１は、処理が完了すると、生成された結果データを出力する。
【００４５】
回路領域１１２〜１１４も、回路領域１１１と同様の動作を行う。なお、上記では回路領域１１１〜１１４がそれぞれ回路データレジスタを有しているとしたが、回路領域１１１〜１１４の外に回路データレジスタが存在してもよい。また、上記では回路領域１１１〜１１４がそれぞれ入力データレジスタを有しているとしたが、回路領域１１１〜１１４の外に入力データレジスタが存在してもよい。また、上記では回路領域１１１〜１１４それぞれが回路データに基づいて動的再構成を行うこととしたが、動的再構成を制御するための回路が回路領域１１１〜１１４の外に存在してもよい。
【００４６】
結果領域１１５ａ〜１１５ｈは、回路領域１１１〜１１４が出力した結果データを記憶する。結果領域１１５ａ〜１１５ｈに記憶された結果データは、ＣＰＵ１０１によって読み出される。結果領域１１５ａ〜１１５ｈは、回路領域１１１〜１１４の外に存在する。このため、結果領域１１５ａ〜１１５ｈに記憶された結果データは、その後の回路領域１１１〜１１４の動的再構成の状況や使用状況の影響を受けない。
【００４７】
結果領域１１５ａ〜１１５ｈは、予め用意された回路データ＃０〜＃７によって実現される専用回路＃０〜＃７に対応している。すなわち、結果領域１１５ａ（結果領域＃０）は、専用回路＃０に対応する。結果領域１１５ｂ（結果領域＃１）は、専用回路＃１に対応する。結果領域１１５ｃ（結果領域＃２）は、専用回路＃２に対応する。結果領域１１５ｄ（結果領域＃３）は、専用回路＃３に対応する。結果領域１１５ｅ（結果領域＃４）は、専用回路＃４に対応する。結果領域１１５ｆ（結果領域＃５）は、専用回路＃５に対応する。結果領域１１５ｇ（結果領域＃６）は、専用回路＃６に対応する。結果領域１１５ｈ（結果領域＃７）は、専用回路＃７に対応する。
【００４８】
回路領域１１１〜１１４の何れかが一の専用回路に関する結果データを出力すると、その結果データは、結果領域１１５ａ〜１１５ｈのうち当該一の専用回路に対応する結果領域に格納されることになる。例えば、回路領域１１１が専用回路＃０の結果データを出力すると、その結果データは結果領域１１５ａに格納される。ＣＰＵ１０１は、処理を要求した専用回路に対応する結果領域にアクセスして結果データを読み出す。
【００４９】
マルチプレクサ１１６ａ〜１１６ｈは、回路領域１１１〜１１４が出力した結果データを結果領域１１５ａ〜１１５ｈに振り分ける選択回路である。マルチプレクサ１１６ａは、回路領域１１１〜１１４が出力した結果データのうち専用回路＃０の結果データを選択して、結果領域１１５ａに出力する。同様に、マルチプレクサ１１６ｂは、専用回路＃１の結果データを結果領域１１５ｂに出力する。マルチプレクサ１１６ｃは、専用回路＃２の結果データを結果領域１１５ｃに出力する。マルチプレクサ１１６ｄは、専用回路＃３の結果データを結果領域１１５ｄに出力する。マルチプレクサ１１６ｅは、専用回路＃４の結果データを結果領域１１５ｅに出力する。マルチプレクサ１１６ｆは、専用回路＃５の結果データを結果領域１１５ｆに出力する。マルチプレクサ１１６ｇは、専用回路＃６の結果データを結果領域１１５ｇに出力する。マルチプレクサ１１６ｈは、専用回路＃７の結果データを結果領域１１５ｈに出力する。なお、回路領域１１１〜１１４から結果データが出力されるとき、併せて専用回路の識別情報が出力されてもよい。
【００５０】
アドレスデコーダ１１７は、ＣＰＵ１０１からＩ／Ｏバス１０９のアドレスバスによって指定されたアドレスを取得し、アドレスに応じてＦＰＧＡ１１０内の何れかのハードウェアを駆動させる。ＣＰＵ１０１からＦＰＧＡ１１０に対して指定されるアドレスは、後述するように、専用回路＃０〜＃７に対応した論理的なアドレスとなっている。
【００５１】
回路領域１１１〜１１４の動的再構成が行われると、アドレスデコーダ１１７は、専用回路＃０〜＃７と回路領域１１１〜１１４とを対応付ける。アドレスデコーダ１１７の対応関係の更新は、動的再構成が行われたときにＦＰＧＡ１１０自身が行ってもよいし、ＣＰＵ１０１が指示してもよい。例えば、回路領域１１１に回路データ＃０がロードされて専用回路＃０が形成されたとする。専用回路＃０の入力データを設定するためのアドレスがＣＰＵ１０１から指定されると、アドレスデコーダ１１７は、入力データレジスタ１１１ｂに入力データが格納されるように回路領域１１１を駆動させる。
【００５２】
ただし、結果領域１１５ａ〜１１５ｈにアクセスするためのアドレスは固定であり、回路領域１１１〜１１４にどの様な専用回路が形成されているかに依存しない。例えば、専用回路＃０の結果データを読み出すためのアドレスがＣＰＵ１０１から指定されると、アドレスデコーダ１１７は結果領域１１５ａを駆動させる。なお、２以上の回路領域に同じ回路データがロードされた場合のアドレス管理については後述する。
【００５３】
図４は、結果領域のハードウェア例を示すブロック図である。
結果領域１１５ａは、結果レジスタ１２１ａ〜１２１ｃを含む複数の結果レジスタ、マルチプレクサ１２２，１２５、タグ付き割込発行部１２３およびタグ指定レジスタ１２４を有する。結果領域１１５ｂ〜１１５ｈも同様のハードウェアを用いて実現できる。
【００５４】
結果レジスタ１２１ａ〜１２１ｃは、タグと結果データとを対応付けて記憶する揮発性の記憶素子である。タグは、同じ専用回路に関する異なる処理の結果を区別するための識別情報である。例えば、異なる回路領域から出力された同じ専用回路の結果データが、タグによって区別される。また、ＣＰＵ１０１が複数のアプリケーションソフトウェア（以下では単に「アプリケーション」と言うことがある）を実行している場合に、異なるアプリケーションが要求した同じ専用回路の処理の結果が、タグによって区別される。タグは、ＣＰＵ１０１によって生成され、入力データと併せて回路領域１１１〜１１４に送信される。回路領域１１１〜１１４は、結果データにタグを付加して出力する。
【００５５】
マルチプレクサ１２２は、マルチプレクサ１１６ａから、回路領域１１１〜１１４の何れかが出力したタグ付き結果データを取得する。すると、マルチプレクサ１２２は、複数の結果レジスタの中から一の結果レジスタを選択し、選択した結果レジスタにタグと結果データを格納する。マルチプレクサ１２２は、複数の結果レジスタを巡回して選択していく。例えば、マルチプレクサ１２２は、ある結果データを結果レジスタ１２１ａに格納し、次の結果データを結果レジスタ１２１ｂに格納し、更に次の結果データをレジスタ１２１ｃに格納する。結果レジスタの選択が一巡すると、前の結果データが消去されることになる。結果レジスタの数は、例えば、３〜１０個程度とする。
【００５６】
タグ付き割込発行部１２３は、マルチプレクサ１１６ａからタグを取得する。すると、タグ付き割込発行部１２３は、処理が完了したことを示す割り込みをＣＰＵ１０１に対して発行する。このとき、発行される割り込みにはタグが付加される。割り込みは、何れの専用回路に関する割り込みであるかＣＰＵ１０１が認識できるように行われる。例えば、タグ付き割込発行部１２３の割り込みは、専用回路＃０に対応するアドレスを用いて行われてもよい。また、専用回路＃０を示す識別情報が割り込みに付加されてもよい。また、結果データを生成した回路領域をＣＰＵ１０１が区別できるようにしてもよい。
【００５７】
タグ指定レジスタ１２４は、ＣＰＵ１０１が結果データを読み出すときに、ＣＰＵ１０１から指定されたタグを格納する揮発性の記憶素子である。マルチプレクサ１２５は、結果レジスタ１２１ａ〜１２１ｃを含む複数の結果レジスタの中から、タグ指定レジスタ１２４に格納されたタグが記憶されている結果レジスタを選択する。そして、マルチプレクサ１２５は、選択した結果レジスタから結果データを読み出しＣＰＵ１０１に送信する。これにより、ＣＰＵ１０１が要求する結果データのみが出力される。
【００５８】
図５は、情報処理装置の機能例を示すブロック図である。
情報処理装置１００は、アプリケーション１３１ａ〜１３１ｅ、ＯＳ１３２、構成変更ドライバ１３３、リソース情報記憶部１３４、回路データ記憶部１３５および回路ドライバ１３６ａ〜１３６ｈを有する。アプリケーション１３１ａ〜１３１ｅ、ＯＳ１３２、構成変更ドライバ１３３および回路ドライバ１３６ａ〜１３６ｈは、ＣＰＵ１０１が実行するプログラムを用いて実装できる。リソース情報記憶部１３４および回路データ記憶部１３５は、ＲＡＭ１０２に確保した記憶領域を用いて実装できる。
【００５９】
なお、アプリケーション１３１ａ〜１３１ｅは、第１の実施の形態のアプリケーションソフトウェア１５に対応する。構成変更ドライバ１３３および回路ドライバ１３６ａ〜１３６ｈは、第１の実施の形態のドライバソフトウェア１６に対応する。回路データ１３５ａ〜１３５ｈは、第１の実施の形態の回路データ１８ａ〜１８ｃに対応する。
【００６０】
アプリケーション１３１ａ〜１３１ｅ（アプリケーション＃０〜＃４）は、ＦＰＧＡ１１０に処理を依頼することがある。ＦＰＧＡ１１０に処理を依頼する場合、アプリケーション１３１ａ〜１３１ｅは、ＯＳ１３２を介して構成変更ドライバ１３３に使用要求を送信する。使用要求では、処理に用いる専用回路が指定される。構成変更ドライバ１３３から使用許可が得られると、アプリケーション１３１ａ〜１３１ｅは、ＯＳ１３２を介して、指定した専用回路に対応する回路ドライバに、ＦＰＧＡ１１０をアクセスさせる。アプリケーション１３１ａ〜１３１ｅは、当該回路ドライバを介して入力データを送信し、当該回路ドライバを介して結果データを取得する。
【００６１】
ＯＳ１３２は、ＦＰＧＡ１１０にアクセスするためのアドレス空間を管理し、アプリケーション１３１ａ〜１３１ｅに対してアドレス空間を提供する。
構成変更ドライバ１３３は、ＦＰＧＡ１１０の回路領域１１１〜１１４の構成および使用状況を管理する。構成変更ドライバ１３３は、アプリケーション１３１ａ〜１３１ｅからの使用要求に応じて、要求された専用回路に応じた回路データを回路データ記憶部１３５から読み出す。また、構成変更ドライバ１３３は、回路領域１１１〜１１４から、使用中でない空き回路領域を選択する。構成変更ドライバ１３３は、選択した回路領域に回路データを送信し、使用要求を送信したアプリケーションに使用許可を返信する。構成変更ドライバ１３３は、選択した回路領域を、使用要求を送信したアプリケーションに割り当てて処理が完了するまで占有させる。処理が完了したことを検知すると、構成変更ドライバ１３３は、割り当てを解除して当該回路領域を空き回路領域として取り扱う。
【００６２】
リソース情報記憶部１３４は、構成変更ドライバ１３３が回路領域１１１〜１１４を管理するために用いるリソース情報を記憶する。リソース情報の詳細は後述する。
回路データ記憶部１３５は、専用回路＃０〜＃７を実現するための回路データ１３５ａ〜１３５ｈを記憶する。回路データ１３５ａ（回路データ＃０）は専用回路＃０に対応する。回路データ１３５ｂ（回路データ＃１）は専用回路＃１に対応する。回路データ１３５ｃ（回路データ＃２）は専用回路＃２に対応する。回路データ１３５ｄ（回路データ＃３）は専用回路＃３に対応する。回路データ１３５ｅ（回路データ＃４）は専用回路＃４に対応する。回路データ１３５ｆ（回路データ＃５）は専用回路＃５に対応する。回路データ１３５ｇ（回路データ＃６）は専用回路＃６に対応する。回路データ１３５ｈ（回路データ＃７）は専用回路＃７に対応する。
【００６３】
回路ドライバ１３６ａ〜１３６ｈは、それぞれ対応する専用回路を利用するためのドライバソフトウェアである。回路ドライバ１３６ａ〜１３６ｈは、専用回路の構造を考慮して予め作成されている。回路ドライバ１３６ａ（回路ドライバ＃０）は専用回路＃０に対応する。回路ドライバ１３６ｂ（回路ドライバ＃１）は専用回路＃１に対応する。回路ドライバ１３６ｃ（回路ドライバ＃２）は専用回路＃２に対応する。回路ドライバ１３６ｄ（回路ドライバ＃３）は専用回路＃３に対応する。回路ドライバ１３６ｅ（回路ドライバ＃４）は専用回路＃４に対応する。回路ドライバ１３６ｆ（回路ドライバ＃５）は専用回路＃５に対応する。回路ドライバ１３６ｇ（回路ドライバ＃６）は専用回路＃６に対応する。回路ドライバ１３６ｈ（回路ドライバ＃７）は専用回路＃７に対応する。
【００６４】
回路ドライバ１３６ａ〜１３６ｈは、専用回路に対応するアドレスを用いてＦＰＧＡ１１０にアクセスする。回路ドライバ１３６ａ〜１３６ｈは、アプリケーション１３１ａ〜１３１ｅから入力データを受信すると、送信元のアプリケーションに応じたタグを生成し、入力データにタグを付加してＦＰＧＡ１１０に転送する。タグとしては、アプリケーション１３１ａ〜１３１ｅに関する識別情報を用いることができる。例えば、タグとして、アプリケーション１３１ａ〜１３１ｅのプロセスＩＤやスレッドＩＤ、ループ制御に用いられるアクセスカウンタ（例えば、ループ回数を示す値）などを使用できる。
【００６５】
回路ドライバ１３６ａ〜１３６ｈは、それぞれ対応する専用回路に関する結果データが生成されたとき、ＦＰＧＡ１１０からタグ付き割り込みを受信する。すると、回路ドライバ１３６ａ〜１３６ｈは、構成変更ドライバ１３３に処理の完了を示す解放要求を送信する。また、回路ドライバ１３６ａ〜１３６ｈは、処理を依頼したアプリケーションにタグ付き割り込みを転送する。その後、回路ドライバ１３６ａ〜１３６ｈは、アプリケーション１３１ａ〜１３１ｅからタグ付き結果要求を受信する。すると、回路ドライバ１３６ａ〜１３６ｈは、それぞれ対応する結果領域に対してタグを指定し、当該タグに対応付けられた結果データを当該結果領域から読み出す。回路ドライバ１３６ａ〜１３６ｈは、結果要求の送信元のアプリケーションに結果データを転送する。
【００６６】
図６は、リソース情報テーブルの例を示す図である。
リソース情報テーブル１３４ａは、リソース情報記憶部１３４に記憶されている。リソース情報テーブル１３４ａは、回路領域、専用回路および使用フラグの項目を有する。回路領域の項目には、ＦＰＧＡ１１０が有する回路領域１１１〜１１４の識別情報が登録される。専用回路の項目には、各回路領域に現在形成されている専用回路の識別情報、すなわち、最後にロードされた回路データに対応する専用回路の識別情報が登録される。使用フラグは、各回路領域が使用中であるか、すなわち、各回路領域が何れかのアプリケーションに現在割り当てられているかを示すフラグである。
【００６７】
ここで、ある回路領域が処理を完了して空き回路領域になっても、当該回路領域に形成された専用回路が消滅するわけではない。別のアプリケーションが同じ専用回路を要求した場合には、要求された専用回路が既に形成されているため、回路データをロードせずに当該回路領域を使用することができる。そこで、リソース情報テーブル１３４ａには、使用フラグがＯＦＦの回路領域についても専用回路の識別情報が残される。
【００６８】
図７は、ＦＰＧＡに関するアドレス空間の例を示す図である。
アプリケーション１３１ａ〜１３１ｅには、回路領域１１１〜１１４の使用状況に関係なく、図７に示すような固定のアドレス空間１４０がＯＳ１３２から提供される。ＣＰＵ１０１からＦＰＧＡ１１０へのアクセスは、アドレス空間１４０のアドレスに基づいて行われる。このため、アプリケーション１３１ａ〜１３１ｅの作成が容易となる。
【００６９】
アドレス空間１４０は、専用回路＃０〜＃７に対応するアドレス範囲１４１〜１４８を含む。アドレス範囲１４１は専用回路＃０に対応する。アドレス範囲１４２は専用回路＃１に対応する。アドレス範囲１４３は専用回路＃２に対応する。アドレス範囲１４４は専用回路＃３に対応する。アドレス範囲１４５は専用回路＃４に対応する。アドレス範囲１４６は専用回路＃５に対応する。アドレス範囲１４７は専用回路＃６に対応する。アドレス範囲１４８は専用回路＃７に対応する。
【００７０】
アドレス範囲１４１〜１４８はそれぞれ、ＦＰＧＡ１１０に入力データを書き込むためのアドレスや、ＦＰＧＡ１１０から結果データを読み出すためのアドレスなどを含む。
入力データ書き込みのアドレスによってアクセスされるハードウェアは、回路領域１１１〜１１４の動的再構成によって変化する。例えば、回路領域１１１に専用回路＃０が形成され、回路領域１１２に専用回路＃２が形成され、回路領域１１３に専用回路＃３が形成され、回路領域１１４に専用回路＃５が形成されているとする。この場合、アドレス範囲１４１の入力データ書き込みアドレスによって、入力データレジスタ１１１ｂがアクセスされる。アドレス範囲１４３の入力データ書き込みアドレスによって、入力データレジスタ１１２ｂがアクセスされる。アドレス範囲１４４の入力データ書き込みアドレスによって、入力データレジスタ１１３ｂがアクセスされる。アドレス範囲１４６の入力データ書き込みアドレスによって、入力データレジスタ１１４ｂがアクセスされる。
【００７１】
一方、結果データ読み出しのアドレスによってアクセスされるハードウェアは、回路領域１１１〜１１４の動的再構成に関係なく固定である。アドレス範囲１４１の結果データ読み出しアドレスによって、結果領域１１５ａがアクセスされる。アドレス範囲１４２の結果データ読み出しアドレスによって、結果領域１１５ｂがアクセスされる。アドレス範囲１４３の結果データ読み出しアドレスによって、結果領域１１５ｃがアクセスされる。アドレス範囲１４４の結果データ読み出しアドレスによって、結果領域１１５ｄがアクセスされる。アドレス範囲１４５の結果データ読み出しアドレスによって、結果領域１１５ｅがアクセスされる。アドレス範囲１４６の結果データ読み出しアドレスによって、結果領域１１５ｆがアクセスされる。アドレス範囲１４７の結果データ読み出しアドレスによって、結果領域１１５ｇがアクセスされる。アドレス範囲１４８の結果データ読み出しアドレスによって、結果領域１１５ｈがアクセスされる。
【００７２】
なお、同じ種類の専用回路が同時期に２以上の回路領域に形成される可能性がある場合、異なる回路領域上の専用回路を区別できるように、アドレス空間１４０に複数のアドレス範囲が用意される。例えば、専用回路＃０〜＃７それぞれについて、入力データ書き込みアドレスなどを含むアドレス範囲が最大で４つ用意される。
【００７３】
ある専用回路に関する複数のアドレス範囲と回路領域１１１〜１１４との間の対応関係は、動的に決まってもよいし固定的に決まっていてもよい。前者の場合、例えば、専用回路＃０がＦＰＧＡ１１０に１つだけ形成されているときはアドレス範囲１４１が使用され、２つ目の専用回路＃０がＦＰＧＡ１１０に形成されると２つ目の専用回路＃０にアクセスするために他のアドレス範囲が使用される。後者の場合、例えば、回路領域１１１に形成された専用回路＃０にアクセスするためにアドレス範囲１４１が使用され、回路領域１１２に形成された専用回路＃０にアクセスするために他のアドレス範囲が使用される。
【００７４】
同じ種類の専用回路に関する２つ目以降のアドレス範囲は、アプリケーション１３１ａ〜１３１ｅに開示してもよいしアプリケーション１３１ａ〜１３１ｅから隠蔽してもよい。前者の場合、アプリケーション１３１ａ〜１３１ｅは、同じ種類の専用回路に関する２以上のアドレス範囲を区別して使用することになる。構成変更ドライバ１３３がアプリケーション１３１ａ〜１３１ｅに使用許可を送信するとき、使用すべきアドレス範囲を指定してもよい。後者の場合、アプリケーション１３１ａ〜１３１ｅは、ＦＰＧＡ１１０に形成された専用回路の個数に関係なくアドレス範囲１４１〜１４８を使用する。回路ドライバ１３６ａ〜１３６ｈは、同じ種類の２以上の専用回路が形成されている場合には、アドレス変換を行ってＦＰＧＡ１１０にアクセスするようにしてもよい。
【００７５】
次に、ＦＰＧＡ１１０を利用する手順について説明する。
図８は、ＦＰＧＡ使用の第１のシーケンス例を示す図である。
アプリケーション１３１ａは、専用回路＃０を使用したい場合、専用回路＃０の使用要求を構成変更ドライバ１３３に送信する（Ｓ１０）。ここでは、回路領域１１１〜１１４が未使用であるとする。すると、構成変更ドライバ１３３は、回路領域１１１を選択し、専用回路＃０に対応する回路データ１３５ａを回路データ記憶部１３５から読み出し、回路領域１１１に回路データ１３５ａを送信する（Ｓ１１）。構成変更ドライバ１３３は、アプリケーション１３１ａに使用許可を送信する（Ｓ１２）。
【００７６】
アプリケーション１３１ａは、専用回路＃０に関する入力データを回路ドライバ１３６ａに送信する（Ｓ１３）。回路ドライバ１３６ａは、アプリケーション１３１ａに応じたタグ０を生成し、入力データとタグ０をＦＰＧＡ１１０に送信する（Ｓ１４）。これにより、回路領域１１１において処理が開始される。回路領域１１１の処理が完了すると、結果領域１１５ａに結果データとタグ０が格納される。結果領域１１５ａは、タグ０を含む割り込みをＣＰＵ１０１に送信する（Ｓ１５）。
【００７７】
回路ドライバ１３６ａは、割り込みを受けて、解放要求を構成変更ドライバ１３３に送信する（Ｓ１６）。構成変更ドライバ１３３は、回路領域１１１を解放して以降は空き回路領域として取り扱う。また、回路ドライバ１３６ａは、タグ０を含む割り込みをアプリケーション１３１ａに送信する（Ｓ１７）。これ以降、アプリケーション１３１ａは、タグ０を用いてＦＰＧＡ１１０から結果データを読み出すことが可能となる。
【００７８】
アプリケーション１３１ｂは、専用回路＃２を使用したい場合、専用回路＃２の使用要求を構成変更ドライバ１３３に送信する（Ｓ１８）。すると、上記のステップＳ１１〜Ｓ１７と同様の処理が行われる。ここでは、回路領域１１２に回路データ１３５ｃがロードされて専用回路＃２が形成される。また、回路ドライバ１３６ｃによってタグ１が生成され、結果領域１１５ｃに結果データとタグ１が格納される。
【００７９】
アプリケーション１３１ｃは、専用回路＃３を使用したい場合、専用回路＃３の使用要求を構成変更ドライバ１３３に送信する（Ｓ１９）。すると、上記のステップＳ１１〜Ｓ１７と同様の処理が行われる。ここでは、回路領域１１３に回路データ１３５ｄがロードされて専用回路＃３が形成される。また、回路ドライバ１３６ｄによってタグ２が生成され、結果領域１１５ｄに結果データとタグ２が格納される。
【００８０】
アプリケーション１３１ｄは、専用回路＃５を使用したい場合、専用回路＃５の使用要求を構成変更ドライバ１３３に送信する（Ｓ２０）。すると、上記のステップＳ１１〜Ｓ１７と同様の処理が行われる。ここでは、回路領域１１４に回路データ１３５ｆがロードされて専用回路＃５が形成される。また、回路ドライバ１３６ｆによってタグ３が生成され、結果領域１１５ｆに結果データとタグ３が格納される。
【００８１】
アプリケーション１３１ｅは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ２１）。ここでは、回路領域１１１が生成した結果データをアプリケーション１３１ａがまだ読み出していないものの、既に回路領域１１１が解放されている。そこで、構成変更ドライバ１３３は、回路領域１１１を選択し、回路領域１１１に回路データ１３５ｂを送信する（Ｓ２２）。構成変更ドライバ１３３は、アプリケーション１３１ｅに使用許可を送信する（Ｓ２３）。
【００８２】
アプリケーション１３１ｅは、専用回路＃１に関する入力データを回路ドライバ１３６ｂに送信する（Ｓ２４）。回路ドライバ１３６ｂは、アプリケーション１３１ｅに応じたタグ４を生成し、入力データとタグ４をＦＰＧＡ１１０に送信する（Ｓ２５）。回路領域１１１の処理が完了すると、結果領域１１５ｂに結果データとタグ４が格納される。結果領域１１５ｂは、タグ４を含む割り込みをＣＰＵ１０１に送信する（Ｓ２６）。
【００８３】
回路ドライバ１３６ｂは、割り込みを受けて、解放要求を構成変更ドライバ１３３に送信する（Ｓ２７）。構成変更ドライバ１３３は、回路領域１１１を解放して以降は空き回路領域として取り扱う。また、回路ドライバ１３６ｂは、タグ４を含む割り込みをアプリケーション１３１ｅに送信する（Ｓ２８）。
【００８４】
アプリケーション１３１ａは、タグ０を含む結果要求を回路ドライバ１３６ａに送信する（Ｓ２９）。回路ドライバ１３６ａは、タグ０を含む結果要求をＦＰＧＡ１１０に送信する（Ｓ３０）。結果領域１１５ａは、タグ０に対応付けられた結果データを読み出して回路ドライバ１３６ａに送信する（Ｓ３１）。回路ドライバ１３６ａは、結果データをアプリケーション１３１ａに送信する（Ｓ３２）。このように、アプリケーション１３１ａが結果データを読み出す前であっても、回路領域１１１が解放されるため、回路領域１１１を他の用途（上記ではアプリケーション１３１ｅの処理）に使用することができる。
【００８５】
図９は、回路領域と結果領域の第１の使用例を示す図である。
ここでは、要求される専用回路および要求順序は、図８のシーケンス例と同じである。ただし、各専用回路の処理が完了するタイミングは図８と異なっている。
【００８６】
まず、回路領域１１１に回路データ１３５ａがロードされ、回路領域１１１に専用回路＃０が形成される。また、回路領域１１１にタグ０が入力される。回路領域１１１は、専用回路＃０についての処理を開始する。次に、回路領域１１２に回路データ１３５ｃがロードされ、回路領域１１２に専用回路＃２が形成される。また、回路領域１１２にタグ１が入力される。回路領域１１２は、専用回路＃２についての処理を開始する。
【００８７】
次に、回路領域１１３に回路データ１３５ｄがロードされ、回路領域１１３に専用回路＃３が形成される。また、回路領域１１３にタグ２が入力される。回路領域１１３は、専用回路＃３についての処理を開始する。次に、回路領域１１１が処理を完了し、タグ０を付加した結果データを結果領域１１５ａに格納する。これにより、回路領域１１１が解放されて空き回路領域となる。次に、回路領域１１４に回路データ１３５ｆがロードされ、回路領域１１４に専用回路＃５が形成される。また、回路領域１１４にタグ３が入力される。回路領域１１４は、専用回路＃５についての処理を開始する。
【００８８】
次に、回路領域１１１が空き回路領域であるため、回路領域１１１に回路データ１３５ｂがロードされ、回路領域１１１に専用回路＃１が形成される。また、回路領域１１１にタグ４が入力される。回路領域１１１は、専用回路＃１についての処理を開始する。次に、回路領域１１２が処理を完了し、タグ１を付加した結果データを結果領域１１５ｃに格納する。これにより、回路領域１１２が解放されて空き回路領域となる。
【００８９】
次に、結果領域１１５ａからタグ０に対応する結果データが読み出される。タグ０の結果データを読み出すとき、この結果データを生成した回路領域１１１は既に専用回路＃０から専用回路＃１に動的再構成を行っている。しかし、タグ０の結果データを記憶する結果領域１１５ａは回路領域１１１の外にあるため、動的再構成の影響を受けない。
【００９０】
図１０は、ＦＰＧＡ使用の第２のシーケンス例を示す図である。
アプリケーション１３１ａは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ４０）。ここでは、回路領域１１１〜１１４が未使用であるとする。すると、構成変更ドライバ１３３は、回路領域１１１を選択し、専用回路＃１に対応する回路データ１３５ｂを回路データ記憶部１３５から読み出し、回路領域１１１に回路データ１３５ｂを送信する（Ｓ４１）。構成変更ドライバ１３３は、アプリケーション１３１ａに使用許可を送信する（Ｓ４２）。
【００９１】
アプリケーション１３１ａは、専用回路＃１に関する入力データを回路ドライバ１３６ｂに送信する（Ｓ４３）。回路ドライバ１３６ｂは、アプリケーション１３１ａに応じたタグ０を生成し、入力データとタグ０をＦＰＧＡ１１０に送信する（Ｓ４４）。これにより、回路領域１１１において処理が開始される。回路領域１１１の処理が完了すると、結果領域１１５ｂに結果データとタグ０が格納される。結果領域１１５ｂは、タグ０を含む割り込みをＣＰＵ１０１に送信する（Ｓ４５）。
【００９２】
回路ドライバ１３６ｂは、割り込みを受けて、解放要求を構成変更ドライバ１３３に送信する（Ｓ４６）。構成変更ドライバ１３３は、回路領域１１１を解放して以降は空き回路領域として取り扱う。なお、同じ種類の２以上の専用回路がＦＰＧＡ１１０に形成され得る場合、割り込みのアドレスによってそれら２以上の専用回路を区別してもよい。また、それら２以上の専用回路を区別する情報が割り込みに付加されていてもよい。
【００９３】
回路ドライバ１３６ｂは、タグ０を含む割り込みをアプリケーション１３１ａに送信する（Ｓ４７）。これ以降、アプリケーション１３１ａは、タグ０を用いてＦＰＧＡ１１０から結果データを読み出すことが可能となる。
【００９４】
アプリケーション１３１ｂは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ４８）。すると、上記のステップＳ４１〜Ｓ４７と同様の処理が行われる。ここでは、回路領域１１２に回路データ１３５ｂがロードされて専用回路＃１が形成される。また、回路ドライバ１３６ｂによってタグ１が生成され、結果領域１１５ｂに結果データとタグ１が格納される。
【００９５】
アプリケーション１３１ｃは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ４９）。すると、上記のステップＳ４１〜Ｓ４７と同様の処理が行われる。ここでは、回路領域１１３に回路データ１３５ｂがロードされて専用回路＃１が形成される。また、回路ドライバ１３６ｂによってタグ２が生成され、結果領域１１５ｂに結果データとタグ２が格納される。
【００９６】
アプリケーション１３１ｄは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ５０）。すると、上記のステップＳ４１〜Ｓ４７と同様の処理が行われる。ここでは、回路領域１１４に回路データ１３５ｂがロードされて専用回路＃１が形成される。また、回路ドライバ１３６ｂによってタグ３が生成され、結果領域１１５ｂに結果データとタグ３が格納される。
【００９７】
アプリケーション１３１ｅは、専用回路＃１を使用したい場合、専用回路＃１の使用要求を構成変更ドライバ１３３に送信する（Ｓ５１）。ここでは、回路領域１１１が生成した結果データをアプリケーション１３１ａがまだ読み出していないものの、既に回路領域１１１が解放されている。そこで、構成変更ドライバ１３３は、回路領域１１１を選択し、アプリケーション１３１ｅに使用許可を送信する（Ｓ５２）。回路領域１１１には専用回路＃１が既に形成されているため、回路データ１３５ｂの送信は省略できる。
【００９８】
アプリケーション１３１ｅは、専用回路＃１に関する入力データを回路ドライバ１３６ｂに送信する（Ｓ５３）。回路ドライバ１３６ｂは、アプリケーション１３１ｅに応じたタグ４を生成し、入力データとタグ４をＦＰＧＡ１１０に送信する（Ｓ５４）。回路領域１１１の処理が完了すると、結果領域１１５ｂに結果データとタグ４が格納される。結果領域１１５ｂは、タグ４を含む割り込みをＣＰＵ１０１に送信する（Ｓ５５）。
【００９９】
回路ドライバ１３６ｂは、割り込みを受けて、解放要求を構成変更ドライバ１３３に送信する（Ｓ５６）。構成変更ドライバ１３３は、回路領域１１１を解放して以降は空き回路領域として取り扱う。また、回路ドライバ１３６ｂは、タグ４を含む割り込みをアプリケーション１３１ｅに送信する（Ｓ５７）。
【０１００】
アプリケーション１３１ａは、タグ０を含む結果要求を回路ドライバ１３６ｂに送信する（Ｓ５８）。回路ドライバ１３６ｂは、タグ０を含む結果要求をＦＰＧＡ１１０に送信する（Ｓ５９）。結果領域１１５ｂは、タグ０に対応付けられた結果データを読み出して回路ドライバ１３６ｂに送信する（Ｓ６０）。回路ドライバ１３６ｂは、結果データをアプリケーション１３１ａに送信する（Ｓ６１）。このように、アプリケーション１３１ａが結果データを読み出す前であっても、回路領域１１１が解放されるため、回路領域１１１を他の用途（上記ではアプリケーション１３１ｅの処理）に使用することができる。
【０１０１】
図１１は、回路領域と結果領域の第２の使用例を示す図である。
ここでは、要求される専用回路および要求順序は、図１０のシーケンス例と同じである。ただし、各専用回路の処理が完了するタイミングは図１０と異なっている。
【０１０２】
まず、回路領域１１１に回路データ１３５ｂがロードされ、回路領域１１１に専用回路＃１が形成される。また、回路領域１１１にタグ０が入力される。回路領域１１１は、専用回路＃１についての処理を開始する。次に、回路領域１１２に回路データ１３５ｂがロードされ、回路領域１１２に専用回路＃１が形成される。また、回路領域１１２にタグ１が入力される。回路領域１１２は、専用回路＃１についての処理を開始する。
【０１０３】
次に、回路領域１１３に回路データ１３５ｂがロードされ、回路領域１１３に専用回路＃１が形成される。また、回路領域１１３にタグ２が入力される。回路領域１１３は、専用回路＃１についての処理を開始する。次に、回路領域１１１が処理を完了し、タグ０を付加した結果データを結果領域１１５ｂに格納する。これにより、回路領域１１１が解放されて空き回路領域となる。次に、回路領域１１４に回路データ１３５ｂがロードされ、回路領域１１４に専用回路＃１が形成される。また、回路領域１１４にタグ３が入力される。回路領域１１４は、専用回路＃１についての処理を開始する。
【０１０４】
次に、空き回路領域であり、かつ、既に専用回路＃１が形成されている回路領域１１１に、タグ４が入力される。回路領域１１１は、専用回路＃１についての処理を開始する。次に、回路領域１１２が処理を完了し、タグ１を付加した結果データを結果領域１１５ｂに格納する。これにより、回路領域１１２が解放されて空き回路領域となる。
【０１０５】
次に、結果領域１１５ｂからタグ０に対応する結果データが読み出される。タグ０の結果データを読み出すとき、この結果データを生成した回路領域１１１はタグ４についての処理を実行している。しかし、タグ０の結果データを記憶する結果領域１１５ｂは回路領域１１１の外にあるため、回路領域１１１の使用状況の影響を受けない。
【０１０６】
図１２は、ドライバ処理の手順例を示すフローチャートである。
（Ｓ７０）構成変更ドライバ１３３は、一のアプリケーションから使用要求を受信する。使用要求には、使用する専用回路の識別情報が含まれる。
【０１０７】
（Ｓ７１）構成変更ドライバ１３３は、リソース情報テーブル１３４ａを参照して、回路領域１１１〜１１４の中に使用中でない（使用フラグがＯＦＦである）空き回路領域が存在するか判断する。空き回路領域が存在する場合、空き回路領域を１つ選択し、ステップＳ７２に処理が進む。空き回路領域が存在しない場合、構成変更ドライバ１３３は、ステップＳ７１の判断を繰り返して空き回路領域が生じるのを待つ。
【０１０８】
（Ｓ７２）構成変更ドライバ１３３は、リソース情報テーブル１３４ａを参照して、使用要求で指定された専用回路が、選択した回路領域に既に形成されているか判断する。指定された専用回路が形成済みである場合、ステップＳ７４に処理が進む。指定された専用回路がまだ形成されていない場合、ステップＳ７３に処理が進む。
【０１０９】
（Ｓ７３）構成変更ドライバ１３３は、指定された専用回路に対応する回路データを回路データ記憶部１３５から読み出す。構成変更ドライバ１３３は、選択した回路領域の回路データレジスタに回路データを送信し、選択した回路領域に動的再構成を実行させる。構成変更ドライバ１３３は、リソース情報テーブル１３４ａにおいて、選択した回路領域に対応する専用回路の識別情報を書き換える。
【０１１０】
（Ｓ７４）構成変更ドライバ１３３は、リソース情報テーブル１３４ａにおいて、選択した回路領域に対応する使用フラグをＯＦＦからＯＮに書き換える。これにより、当該回路領域が、使用要求を送信したアプリケーションに割り当てられることになる。構成変更ドライバ１３３は、使用要求を送信したアプリケーションに使用許可を返信する。その後、指定された専用回路に対応する回路ドライバは、当該専用回路の処理に用いられる入力データを当該アプリケーションから受信する。入力データの送信には、当該専用回路に対応するアドレス範囲の入力データ書き込みアドレスが用いられる。以下の説明では、回路ドライバ１３６ａが入力データを受信したと仮定する。
【０１１１】
（Ｓ７５）回路ドライバ１３６ａは、入力データを送信したアプリケーションに応じたタグを生成する。例えば、アプリケーションのプロセスＩＤ、スレッドＩＤ、ループ制御のためのアクセスカウンタなどが、タグとして用いられる。
【０１１２】
（Ｓ７６）回路ドライバ１３６ａは、タグを付加した入力データをＦＰＧＡ１１０に送信する。ここでの入力データの送信には、専用回路＃０に対応するアドレス範囲１４１の入力データ書き込みアドレスが用いられる。タグが付加された入力データは、ステップＳ７１で選択した回路領域の入力データレジスタに格納されることになる。
【０１１３】
（Ｓ７７）回路ドライバ１３６ａは、結果領域１１５ａに結果データが格納されると、タグを含む割り込みをＦＰＧＡ１１０から受信する。ここでの割り込みの受信には、専用回路＃０に対応するアドレスや識別情報などが用いられてもよい。
【０１１４】
（Ｓ７８）回路ドライバ１３６ａは、解放要求を構成変更ドライバ１３３に送信する。構成変更ドライバ１３３は、処理が完了した回路領域を判定し、当該回路領域を解放して空き回路領域とする。処理が完了した回路領域は、割り込みに反応した回路ドライバに基づいて判定してもよく、割り込みに用いられたアドレスや識別情報などに基づいて判定してもよい。構成変更ドライバ１３３は、リソース情報テーブル１３４ａにおいて、判定した回路領域に対応する使用フラグをＯＮからＯＦＦに書き換える。これにより、使用要求を送信したアプリケーションへの割り当てが解除されることになる。
【０１１５】
（Ｓ７９）回路ドライバ１３６ａは、入力データを送信したアプリケーションに対して、タグが付加された割り込みを転送する。
（Ｓ８０）回路ドライバ１３６ａは、割り込み先のアプリケーションから、割り込みに付加されていたタグを含む結果要求を受信する。ここでの結果要求の送信には、専用回路＃０に対応するアドレス範囲１４１の結果データ読み出しアドレスが用いられる。
【０１１６】
（Ｓ８１）回路ドライバ１３６ａは、アドレス範囲１４１の結果データ読み出しアドレスを指定して、結果要求に含まれるタグをＦＰＧＡ１１０に送信する。これにより、結果領域１１５ａのタグ指定レジスタ１２４にタグが格納される。回路ドライバ１３６ａは、当該タグに対応する結果データをＦＰＧＡ１１０から読み出す。回路ドライバ１３６ａは、結果要求を送信したアプリケーションに結果データを転送する。
【０１１７】
なお、情報処理装置１００が複数のアプリケーションを並行して実行しているとき、上記のドライバ処理が複数並行して実行される可能性がある。
図１３は、ＦＰＧＡの手順例を示すフローチャートである。
【０１１８】
ここでは、回路領域１１１に専用回路＃０が形成される場合を仮定する。
（Ｓ９０）回路領域１１１は、ＣＰＵ１０１から回路データ１３５ａを受信し、回路データレジスタ１１１ａに回路データ１３５ａを格納する。
【０１１９】
（Ｓ９１）回路領域１１１は、回路データ１３５ａに基づいて動的再構成を行う。
（Ｓ９２）回路領域１１１は、ＣＰＵ１０１からタグが付加された入力データを受信し、入力データレジスタ１１１ｂに入力データとタグを格納する。回路領域１１１は、入力データを用いて専用回路＃０の処理を開始する。
【０１２０】
（Ｓ９３）回路領域１１１は、専用回路＃０の処理が完了すると、タグが付加された結果データを出力する。回路領域１１１は、マルチプレクサ１１６ａを駆動することで、タグが付加された結果データを結果領域１１５ａに送信する。結果領域１１５ａは、結果領域１１５ａに含まれる一の結果レジスタに、タグと結果データとを対応付けて格納する。
【０１２１】
（Ｓ９４）結果領域１１５ａは、タグ付き割り込みをＣＰＵ１０１に送信する。
（Ｓ９５）結果領域１１５ａは、タグ付き結果要求をＣＰＵ１０１から受信する。
（Ｓ９６）結果領域１１５ａは、結果領域１１５ａに含まれる複数の結果レジスタの中から、ＣＰＵ１０１から指定されたタグを含む一の結果レジスタを選択する。結果領域１１５ａは、選択した結果レジスタから結果データを読み出してＣＰＵ１０１に送信する。
【０１２２】
第２の実施の形態の情報処理装置１００によれば、ＦＰＧＡ１１０の回路領域１１１〜１１４の外に結果領域１１５ａ〜１１５ｈが設けられ、回路領域１１１〜１１４によって生成された結果データが結果領域１１５ａ〜１１５ｈに格納される。よって、アプリケーションによって結果データが読み出されるのを待たずに、当該結果データを生成した回路領域を解放することができ、当該回路領域を他の用途に使用することができる。また、アプリケーションが明示的に解放要求を送信しなくてもよく、アプリケーションからの解放要求を待たなくてよい。このため、回路領域１１１〜１１４が解放されるまでの待ち時間を短縮でき、ＦＰＧＡ１１０の使用効率を向上させることができる。また、少ない回路領域を効率的に使い回すことで、ＦＰＧＡ１１０の回路規模を削減できる。
【０１２３】
また、専用回路＃０〜＃７に対応させて結果領域１１５ａ〜１１５ｈが設けられ、使用した専用回路に対応する固定のアドレスによって結果データにアクセスできる。また、アプリケーションに対しては、使用可能な複数の専用回路と複数のアドレス範囲とを対応付けた論理的なアドレス空間１４０が提供される。よって、アプリケーションは動的再構成の状況や結果領域１１５ａ〜１１５ｈの位置を意識しなくてもよく、アプリケーションからＦＰＧＡ１１０へのアクセスの実装が容易となる。
【０１２４】
また、回路ドライバ１３６ａ〜１３６ｈによってアプリケーションに応じたタグが生成され、結果データにタグが付加されると共にアプリケーションにタグが通知される。よって、２以上のアプリケーションが同時期に同じ種類の専用回路を使用する場合であっても、異なるアプリケーションの結果データを区別することができる。また、２以上の回路領域に同じ種類の専用回路を形成することが可能となり、２以上のアプリケーションから要求された２以上の処理を並列に実行できる可能性が高くなる。
【０１２５】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、情報処理装置１００にプログラムを実行させることで実現できる。
【０１２６】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１０６ａ）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体（例えば、不揮発性メモリ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【０１２７】
１０  情報処理装置
１１  プログラマブルデバイス
１２  可変回路部
１３  結果記憶部
１４  プロセッサ
１５  アプリケーションソフトウェア
１６  ドライバソフトウェア
１７  メモリ
１８ａ，１８ｂ，１８ｃ  回路データ
１９  結果データ
【図１】
0006593198.tif 000002
【図２】
0006593198.tif 000003
【図３】
0006593198.tif 000004
【図４】
0006593198.tif 000005
【図５】
0006593198.tif 000006
【図６】
0006593198.tif 000007
【図７】
0006593198.tif 000008
【図８】
0006593198.tif 000009
【図９】
0006593198.tif 000010
【図１０】
0006593198.tif 000011
【図１１】
0006593198.tif 000012
【図１２】
0006593198.tif 000013
【図１３】
0006593198.tif 000014