(57)【特許請求の範囲】
【請求項１】
回路構成を部分的に再構成可能な再構成可能回路と、
前記再構成可能回路の回路構成の再構成を制御する再構成制御手段と、
を備え、
前記再構成制御手段は、
１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路を、前記パイプラインの先頭の部分回路から順に前記再構成可能回路上に再構成し、再構成された部分回路から順に起動していくデータ処理装置であって、
前記部分回路を前記再構成可能回路上に再構成する際に、前記パイプラインにおける当該部分回路の直前の部分回路が出力してメモリに記憶されたデータを、当該メモリから当該部分回路へと入力するための第１の入力回路と、当該部分回路から出力されたデータを前記メモリに記憶するための第１の出力回路と、を更に再構成し、
前記部分回路から出力されたデータが前記パイプラインにおける当該部分回路の次の部分回路に出力されるようにするための第２の出力回路と、前記第１の出力回路と前記第２の出力回路を択一的に選択する出力選択回路と、を更に再構成し、
前記データ処理装置は、更に、
前記次の部分回路が前記再構成可能回路上に再構成される前は前記出力選択回路が前記第１の出力回路を選択するように制御し、前記次の部分回路が前記再構成可能回路上に再構成された後は前記出力選択回路が前記第２の出力回路を選択するように制御する選択制御手段、を更に備える、
ことを特徴とするデータ処理装置。
【請求項２】
回路構成を部分的に再構成可能な再構成可能回路と、
前記再構成可能回路の回路構成の再構成を制御する再構成制御手段と、
を備え、
前記再構成制御手段は、
１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路を、前記パイプラインの先頭の部分回路から順に前記再構成可能回路上に再構成し、再構成された部分回路から順に起動していくとともに、
１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路からなる組を表す回路情報を複数組分有しており、
当該複数組のうちの第１の組の回路情報に従って当該第１の組の複数の部分回路をパイプラインにおける順序に従って再構成して起動し、当該第１の組の複数の部分回路によるデータ処理の後、当該複数組のうちの第２の組の回路情報に従って当該第２の組の複数の部分回路をパイプラインにおける順序に従って再構成して起動する組順次再構成制御を実行し、
前記第２の組のパイプラインにおける先頭の部分回路は、前記第１の組のパイプラインにおける先頭の部分回路以外の部分回路と干渉しない領域に再構成されるよう設計されており、
前記組順次再構成制御では、前記第１の組のパイプラインの先頭の部分回路がデータ処理を完了した後、当該パイプラインの他の部分回路がデータ処理を完了する前に、前記第２の組の複数の部分回路のうちのパイプラインの先頭の部分回路の再構成を開始する、
ことを特徴とするデータ処理装置。
【請求項３】
前記各部分回路を再構成するのに要する部分回路再構成時間は互いに同等であり、
前記データ処理装置は、
処理対象のデータを前記複数の部分回路からなるパイプラインで処理するのに要するデータ処理時間の方が、前記部分回路再構成時間より長い場合、前記処理対象のデータを前記複数の部分回路の個数に分割し、分割結果の部分データごとに、前記複数の部分回路の先頭の部分回路に入力する分割入力手段、
を更に備える請求項１に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関する。
【背景技術】
【０００２】
内部の論理回路構成を変更可能なＰＬＤ(Programmable Logic Device)やＦＰＧＡ(Field Programmable Gate Array)などの再構成可能回路（プログラマブル論理回路とも呼ばれる）が普及している。ＰＬＤやＦＰＧＡは、回路起動時に内部の論理回路構成を設定するものが一般的であるが、回路が動作中に論理回路構成を変更可能なものも開発されている。
【０００３】
ただし、動作中に回路構成を変更できるといっても、回路構成を動的に変更することに的を絞って開発されたダイナミック・リコンフィギュラブル・プロセッサ（ＤＲＰ）と比べた場合、回路構成の変更（書き換え）に要する時間がはるかに長い。このため、従来、回路構成の書き換え時間を低減するための技術が提案されている。
【０００４】
特許文献１には、部分的に再構成可能な回路において書き換えを効率化する手法が開示されている。この手法では、機能ごとに配置形状が異なる複数のコンフィギュレーション（回路構成）を用意する。そして、再構成可能回路にある機能のコンフィギュレーションを構成して動作させている間に、次の機能のためのコンフィギュレーションのうち、現在使用していない空き領域の形状に合うものをロードし、書き換えを行っておく。
【０００５】
特許文献２には、部分的に再構成可能なプログラマブル論理回路において、ある領域の回路構成が動作中に、空き領域に次の回路構成を再構成することで、各回路の処理と処理との間の待ち時間を無くす、あるいは短くする技術が開示されている。また、この文献には、次のような技術も開示されている。すなわち、次に回路を再構成しようとする少なくとも一部の領域に、前に再構成されていて、その処理が実行されている前回路が存在するような回路については、前回路の領域と重なる部分と、重ならない部分とに、再構成のためのデータを分割しておく。実際の再構成の際には、重ならない部分を前回路の処理と並行して再構成し、前回路の処理が終了した後に、重なる部分を再構成する。
【０００６】
特許文献１及び２に開示された手法では、いずれも、再構成可能回路上に同時に構成可能な回路（言い換えれば、再構成可能回路の領域内に同時に配置可能な回路）は、同時に再構成（書き換え）し、再構成が完了してからその回路を動作させている。
【０００７】
特許文献３には、プログラマブル論理回路を用いて複数の単位回路を時分割的に動作させるシステムが開示されている。このシステムは、複数の回路の各々に関する回路構成情報を記憶する回路構成情報メモリと、動作中に前記回路構成情報を用いて回路構成を再構成可能なプログラマブル論理回路と、前記各回路の処理に関する入力データ及び出力データを、前記各回路ごとに蓄積する処理データメモリと、前記処理データメモリへの前記入力又は出力データの少なくとも一方の蓄積量を前記各回路毎に監視し、これらの蓄積量がある条件を満たした場合に、前記プログラマブル論理回路の回路構成を変更する制御部とを備える。
【０００８】
特許文献４に開示された装置は、再構成可能ハードウエアのプログラムを書き換えながら大規模な処理を実行する場合のプログラム書換え時間を削減するためのものであり、大規模な処理を小さな処理単位に分割して処理する場合、処理内容が動的に変化しても柔軟にプログラム書き換え、実行をスケジュール管理し効率的な処理を可能とすることを目論んでいる。この装置では、スケジュール部は複数タスク単位で、再構成可能ハードウエア部へのプログラムロードと実行を制御しプログラムロード時間を削減する。ジョブ管理部はジョブ情報格納部に格納された複数のタスクから構成される複数のジョブ情報を参照しジョブの実行状況に応じて、タスクの実行を管理するにより効率的な処理を実現する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−２５２８１４号公報
【特許文献２】特開２００１−３２０２７１号公報
【特許文献３】特開２００５−１２４１３０号公報
【特許文献４】再表２００７−０２９４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明は、再構成可能回路上に同時に再構成可能な回路をまとめて再構成して起動する方式よりも、データ処理を高速化できるようにすることを目的とする。
【課題を解決するための手段】
【００１１】
請求項１に係る発明は、回路構成を部分的に再構成可能な再構成可能回路と、前記再構成可能回路の回路構成の再構成を制御する再構成制御手段と、を備え、前記再構成制御手段は、１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路を、前記パイプラインの先頭の部分回路から順に前記再構成可能回路上に再構成し、再構成された部分回路から順に起動していく。
【００１２】
また、前記再構成制御手段は、前記部分回路を前記再構成可能回路上に再構成する際に、前記パイプラインにおける当該部分回路の直前の部分回路が出力してメモリに記憶されたデータを、当該メモリから当該部分回路へと入力するための第１の入力回路と、当該部分回路から出力されたデータを前記メモリに記憶するための第１の出力回路と、を更に再構成する。
【００１３】
また、前記再構成制御手段は、前記部分回路から出力されたデータが前記パイプラインにおける当該部分回路の次の部分回路に出力されるようにするための第２の出力回路と、前記第１の出力回路と前記第２の出力回路を択一的に選択する出力選択回路と、を更に再構成し、前記データ処理装置は、更に、前記次の部分回路が前記再構成可能回路上に再構成される前は前記出力選択回路が前記第１の出力回路を選択するように制御し、前記次の部分回路が前記再構成可能回路上に再構成された後は前記出力選択回路が前記第２の出力回路を選択するように制御する選択制御手段、を更に備える。
【００１４】
請求項２に係る発明は、回路構成を部分的に再構成可能な再構成可能回路と、前記再構成可能回路の回路構成の再構成を制御する再構成制御手段と、を備え、前記再構成制御手段は、１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路を、前記パイプラインの先頭の部分回路から順に前記再構成可能回路上に再構成し、再構成された部分回路から順に起動していくとともに、１つのパイプラインを構成し且つ前記再構成可能回路上に同時に再構成可能な複数の部分回路からなる組を表す回路情報を複数組分有しており、当該複数組のうちの第１の組の回路情報に従って当該第１の組の複数の部分回路をパイプラインにおける順序に従って再構成して起動し、当該第１の組の複数の部分回路によるデータ処理の後、当該複数組のうちの第２の組の回路情報に従って当該第２の組の複数の部分回路をパイプラインにおける順序に従って再構成して起動する組順次再構成制御を実行し、前記第２の組のパイプラインにおける先頭の部分回路は、前記第１の組のパイプラインにおける先頭の部分回路以外の部分回路と干渉しない領域に再構成されるよう設計されており、前記組順次再構成制御では、前記第１の組のパイプラインの先頭の部分回路がデータ処理を完了した後、当該パイプラインの他の部分回路がデータ処理を完了する前に、前記第２の組の複数の部分回路のうちのパイプラインの先頭の部分回路の再構成を開始する、ことを特徴とするデータ処理装置である。
【００１５】
請求項３に係る発明は、前記各部分回路を再構成するのに要する部分回路再構成時間は互いに同等であり、前記データ処理装置は、処理対象のデータを前記複数の部分回路からなるパイプラインで処理するのに要するデータ処理時間の方が、前記部分回路再構成時間より長い場合、前記処理対象のデータを前記複数の部分回路の個数に分割し、分割結果の部分データごとに、前記複数の部分回路の先頭の部分回路に入力する分割入力手段、を更に備える請求項１に記載のデータ処理装置である。
【発明の効果】
【００１６】
請求項１に係る発明によれば、再構成可能回路上に同時に再構成可能な回路をまとめて再構成して起動する方式よりも、データ処理を高速化できる。
【００１７】
また、部分回路間での処理結果のデータの受け渡しが円滑に実現される。
【００１８】
更に、当該データ処理装置が用いる前記メモリの帯域幅を減らすことができる。
【００１９】
請求項２に係る発明によれば、複数の全体回路が順に動作する場合に、データ処理を高速化することができる。
【００２０】
請求項３に係る発明によれば、部分回路再構成時間よりもデータ処理時間の方が長い場合でも、部分回路に対して入力されるデータがあふれることのないように制御することができる。
【図面の簡単な説明】
【００２１】
【図１】実施形態のデータ処理装置の構成の一例を示す図である。
【図２】１つの回路を、パイプラインを構成する複数のブロック（部分回路）に分割することを説明するための図である。
【図３】実施形態の再構成制御回路が実行する制御手順の一例を示す図である。
【図４】再構成制御におけるＦＰＧＡの状態の変化を示すタイムチャートを、従来及び実施形態のそれぞれについて示す図である。
【図５】画像のバンド分割の例を示す図である。
【図６】実施形態のＦＰＧＡの状態・動作の時間変化を示すタイムチャートである。
【図７】変形例のデータ処理装置の構成の一例を示す図である。
【図８】変形例のＦＰＧＡの状態・動作の時間変化の一例を示すタイムチャートである。
【図９】変形例のＦＰＧＡの状態・動作の時間変化の別の例を示すタイムチャートである。
【図１０】２つの全体回路が順次ＦＰＧＡに書き込まれてパイプライン処理を実行する例を示す図である。
【図１１Ａ】２つの全体回路が従来の再構成制御でＦＰＧＡに書き込まれる場合の流れを説明するタイムチャートである。
【図１１Ｂ】２つの全体回路が実施形態の再構成制御でＦＰＧＡに書き込まれる場合の流れを説明するタイムチャートである。
【図１２】全体回路のブロック分割にあわせて処理対象データのデータをバンド分割する制御の例を示すフローチャートである。
【図１３】ブロック再構成時間が全画像処理時間より短い場合の、再構成と画像処理の時間的な関係の例を示す図である。
【図１４】ブロック再構成時間が全画像処理時間より長い場合の、再構成と画像処理の時間的な関係の例を示す図である。
【発明を実施するための形態】
【００２２】
図１に、実施形態のデータ処理装置の構成の一例を示す。この例では、データ処理装置は、再構成可能回路の一例としてＦＰＧＡ１００を備えると共に、再構成制御回路２００、ＥＥＰＲＯＭ(Electrically Erasable Programmable Read Only Memory)２２０、外部メモリ２４０を備える。
【００２３】
この例では、ＦＰＧＡ１００がＣＰＵ(中央処理ユニット)コア１１０を搭載している。このＣＰＵコア１１０が、ＦＰＧＡ１００や再構成制御回路２００などといった、このデータ処理装置の各ユニットを制御するための制御ソフトウエアを実行する。ＣＰＵコア１１０は、専用のハード回路ブロックとしてＦＰＧＡ１００内に組み込まれていてもよいし、ＦＰＧＡ１００が備える論理ブロックや配線リソースを組み合わせて構成してもよい。なお、ＦＰＧＡ１００がＣＰＵコア１１０を備えていることはあくまで一例に過ぎず、この代わりに、ＦＰＧＡ１００の外部にＣＰＵを設けてももちろんよい。
【００２４】
またＦＰＧＡ１００は、動的書換可能かつ部分書換可能なタイプのものである。すなわち、このＦＰＧＡ１００は、当該ＦＰＧＡ１００上の一部に再構成された回路が動作している間に、その回路が占める部分とは重ならない別の部分に別の回路を再構成することができる。なお、「動的」とはいっても、動的再構成に特化したＤＲＰに比べると、回路構成（コンフィギュレーション）データの読込等のために書換（再構成）にははるかに長い時間を要する。
【００２５】
ＦＰＧＡ１００内のブロックＡ１２２、ブロックＢ１２４及びブロックＣ１２６は、それぞれ、ＦＰＧＡ１００内の論理ブロック群と配線リソースの組み合わせにより構成（コンフィギュレーション）される回路である。ブロックＡ１２２、ブロックＢ１２４及びブロックＣ１２６は、ＦＰＧＡ１００上に同時に配置（存在）可能な回路であるとともに、その順にパイプラインを構成している。すなわち、それらは、ブロックＡ１２２の出力がブロックＢ１２４の入力となり、ブロックＢ１２４の出力がブロックＣ１２６の入力となる関係を持つ。この例では、外部からの入力データがブロックＡに入力されて処理され、更にその処理結果がブロックＢで処理され、最後にブロックＣで処理されて外部に出力されることになる。すなわち、外部の装置から見れば、ブロックＡ，Ｂ，Ｃを合わせた１つの回路が、当該装置の依頼したデータ処理を実行する回路として機能する。
【００２６】
したがって、ブロックＡ１２２、ブロックＢ１２４及びブロックＣ１２６は、図２に示すように、ＦＰＧＡ１００に同時に再構成可能な１つの回路α１２０を、パイプラインを構成する３つの部分回路に分割したものと捉えることもできる。ここで「ＦＰＧＡ１００に同時に再構成可能」な回路（又は複数の回路）とは、ＦＰＧＡ１００の構成を書き換えなくても、そのＦＰＧＡ１００上に一度に収まる（すなわち同時に存在して動作し得る）規模の回路（又は複数の回路）のことをいう。なお、以下では、部分回路であるブロックＡ、Ｂ、Ｃとの区別を明確にするために、分割する前の元の回路αを全体回路αと呼ぶことにする。
【００２７】
図１を初めとするこの明細書の各例では、１つの回路を３つのブロックＡ、Ｂ、Ｃに分割した例を説明するが、これはあくまで一例に過ぎない。１つの回路を２つ、又は４つ以上のブロックに分割する場合にも、この実施形態の方式は適用可能である。
【００２８】
また、このようにパイプラインをなすブロック群へと分割される元の全体回路αは、ＦＰＧＡ１００上に同時に存在して動作する回路全体であってもよいし、そのような回路全体の一部分であってもよい。後者は、例えば、ＦＰＧＡ１００を従来方式で動的かつ部分的に再構成していくなかで、部分再構成される１つの回路を全体回路αと捉え、これをパイプラインをなす複数のブロックに分割するようなケースに該当する。
【００２９】
なお、この後説明するこの実施形態の制御の特徴は、各ブロックＡ、Ｂ、Ｃの具体的な回路構成や処理内容には依存しない。ブロックＡ、Ｂ、Ｃは、ＦＰＧＡ１００上に同時に再構成可能、かつ、パイプラインを構成して外部からのデータに対して処理を行うものであれば、どのようなものでもよい。
【００３０】
図１の例では、ブロックＡ、Ｂ、Ｃは、パイプライン処理を実現するために、外部メモリ２４０を介してデータを順にやりとりする。すなわち、ブロックＡは、外部からの入力データを処理し、その処理結果を外部メモリ２４０内のあらかじめ定めたバッファ領域Ａに書き込む。ブロックＢは、外部メモリ２４０のバッファ領域ＡからブロックＡの処理結果データを読み出し、そのデータに対して処理を実行し、その処理結果を外部メモリ２４０内の、バッファ領域Ａとは異なる領域あらかじめ定めたバッファ領域Ｂに書き込む。ブロックＣは、外部メモリ２４０のバッファ領域ＢからブロックＢの処理結果データを受け取り、そのデータに対して処理を実行し、その処理結果を外部に出力する。なお、バッファ領域Ａをダブルバッファ構成として、ブロックＡからのデータの書き込みと、ブロックＢからのデータの読み出しを並列実行できるようにしてもよい。バッファ領域Ｂについても同様である。
【００３１】
このような各ブロックＡ，Ｂ，Ｃの外部メモリ２４０に対する入出力を制御するために、ＦＰＧＡ１００は、セレクタ１３０及びメモリコントローラ１３５を備える。ブロックＡ１２２の出力、ブロックＢ１２４の入力及び出力、並びにブロックＣ１２６の入力がセレクタ１３０に接続され、セレクタ１３０は、各ブロックＡ，Ｂ，Ｃの外部メモリ２４０に対するアクセス要求の競合を調停する。メモリコントローラ１３５は、セレクタ１３０を介した各ブロックＡ、Ｂ、Ｃからの外部メモリ２４０に対する読み書きを制御する。
【００３２】
セレクタ１３０及びメモリコントローラ１３５は、ハードウエア回路としてＦＰＧＡ１００に組み込んでもよいし、ＦＰＧＡ１００の論理ブロック及び配線リソースを用いて構成してもよい。
【００３３】
外部メモリ２４０は、ＦＰＧＡ１００の外部に設けられたメモリであり、例えばＲＡＭである。外部メモリ２４０は、ＦＰＧＡ１００に直接接続されたものであってもよいし、ＦＰＧＡ１００が接続されたバスに接続されたものであってもよい。後者の場合、外部メモリ２４０は、バス上にあるＦＰＧＡ１００以外の装置からもアクセスされ得る。図１の例では、外部メモリ２４０は、上述のように、ブロックＡ，Ｂ，Ｃの間のデータのやりとりのための一時記憶として用いられる。
【００３４】
なお、ブロックＡ，Ｂ，Ｃの間でやりとりするデータが比較的少ない場合には、外部メモリ２４０を設ける代わりに、それらデータを一時記憶するバッファ回路をＦＰＧＡ１００内に内蔵又は構成してもよい。以下では、繁雑さを避けるため、外部メモリ２４０を利用する場合のみを説明する。
【００３５】
ＥＥＰＲＯＭ２２０には、ＦＰＧＡ１００上に再構成される回路構成（コンフィギュレーション）を表す回路情報（コンフィギュレーションデータ）が保持される。ＦＰＧＡ１００上に複数のコンフィギュレーションを順に構成して動作させる場合、それら各コンフィギュレーションの回路情報（及び各コンフィギュレーションの順序を表す情報）などがＥＥＰＲＯＭ２２０に記憶される。図１の例では、回路情報は、ブロックＡ，Ｂ，Ｃという部分回路の単位でＥＥＰＲＯＭ２２０に記憶しておけばよい。また、ＥＥＰＲＯＭ２２０には、それら各ブロック間でパイプラインを構成するために必要な配線の定義や補助回路の情報を記憶しておいてもよい。
【００３６】
なお、ここでは回路情報を保持する記憶装置としてＥＥＰＲＯＭ２２０を例示したが、これは一例に過ぎない。他の種類の不揮発性メモリ（例えばＲＯＭやハードディスク）を用いてももちろんよい。また、ＦＰＧＡ１００は、回路情報をＳＲＡＭ(Static Random Access Memory)に保持させるタイプのものであってもよい。
【００３７】
再構成制御回路２００は、ＥＥＰＲＯＭ２２０に保持された回路情報に従って、ＦＰＧＡ１００内の論理ブロック群及び配線リソースを組み合わせることで、ＦＰＧＡ１００内にその回路情報に応じた回路を再構成する。
【００３８】
ここで、図１に例示したブロックＡ、Ｂ、ＣはＦＰＧＡ１００上に同時に配置可能なので、従来の再構成制御回路ならば、それらを一度にまとめて再構成する。これに対し、この実施形態の再構成制御回路２００は、各ブロックをパイプラインの順に再構成していく。この再構成の手順の一例を図３に示す。再構成制御回路２００は、例えば、電源投入により起動したときに自動的に、又はＣＰＵコア１１０から再構成開始の指示を受けると、図３の手順を開始する。
【００３９】
図３の手順では、再構成制御回路２００は、まずパイプラインの先頭であるブロックＡの回路情報をＥＥＰＲＯＭ２２０から読み出し、読み出した回路情報をＦＰＧＡ１００に書き込むことで、ブロックＡをＦＰＧＡ１００上に再構成する（Ｓ１０）。このとき、ブロックＡの入力を外部からのデータ入力へ接続する配線、及びブロックＡの出力をセレクタ１３０に接続する配線も同時に再構成する。そして、ブロックＡ及びこれに付随する配線の再構成が完了するのを待つ（Ｓ１２）。この再構成が完了すると、再構成制御回路２００は、ブロックＡを起動して入力データの処理を開始させるとともに、ＥＥＰＲＯＭ２２０の回路情報に従って、ブロックＢとこれに付随する配線（すなわちセレクタ１３０との間のデータの入力及び出力用の各配線）をＦＰＧＡ１００上に再構成する（Ｓ１４）。すなわち、この実施形態では、ブロックＡの動作とブロックＢの再構成とが同時並列的に行われる。起動されたブロックＡは、外部から入力されたデータを受け取り、処理を実行する。ブロックＡの処理結果は、セレクタ１３０及びメモリコントローラ１３５を介して外部メモリ２４０のバッファ領域Ａに書き込まれる。
【００４０】
次に再構成制御回路２００は、ブロックＢ及びこれに付随する配線の再構成の完了を待つ（Ｓ１６）。この再構成が完了したことを検知すると、再構成制御回路２００は、ブロックＢを起動して入力データの処理を開始させるとともに、ＥＥＰＲＯＭ２２０の回路情報に従って、ブロックＣとこれに付随する配線（すなわちセレクタ１３０からデータを入力するための配線）をＦＰＧＡ１００上に再構成する（Ｓ１８）。これにより、ＦＰＧＡ１００上ではブロックＡ及びＢが動作し、これと平行してブロックＣが再構成されることとなる。起動されたブロックＢは、外部メモリ２４０のバッファ領域Ａに格納されているブロックＡの処理結果データを、セレクタ１３０を介して読み出し、読み出したデータに対して処理を行う。そして、処理結果のデータを、セレクタ１３０を介して外部メモリ２４０のバッファ領域Ｂに書き込む。
【００４１】
次に再構成制御回路２００は、ブロックＣ及びこれに付随する配線の再構成の完了を待ち（Ｓ２０）、完了すると、ブロックＣを起動して入力データの処理を開始させる（Ｓ２２）。これにより、ブロックＡ、Ｂ、Ｃの全てが動作することになる。起動されたブロックＣは、外部メモリ２４０のバッファ領域Ｂに格納されているブロックＢの処理結果データを、セレクタ１３０を介して読み出し、読み出したデータに対して処理を行う。そして、処理結果のデータを外部に出力する。
【００４２】
これ以後、次の書換（再構成）が行われるまでは、ブロックＡ、Ｂ、Ｃが、外部メモリ２４０を介してデータを受け渡しながら、パイプライン動作することとなる。これにより、ＦＰＧＡ１００は、外部からは、図２に示した回路α１２０と同様の動作を行っているように見える。
【００４３】
以上のように、パイプラインを構成する各ブロックＡ、Ｂ、Ｃを先頭から順に再構成して起動していくことにより、それらブロックＡ〜Ｃを同時にまとめて再構成して起動する場合よりも、処理を高速化、特に最初の処理結果の出力を早めることができる。このことを、図４を参照して説明する。
【００４４】
図４には、ＦＰＧＡ１００の状態の時間的な遷移を表すタイムチャートが、（ａ）従来の「まとめて再構成」する方式、（ｂ）本実施形態の「順次再構成」する方式、のそれぞれについて示されている。
【００４５】
図４の（ａ）に示すように、従来方式では、ＦＰＧＡ１００にブロックＡ、Ｂ、Ｃからなる全体回路αをまとめて再構成するので、その再構成に要する時間の間は、ＦＰＧＡ１００のうちその全体回路αが占めるべき範囲はインアクティブ（inactive:非動作）状態である。この再構成に要する時間は、全体回路αの回路規模、言い換えれば全体回路αを表す回路情報のデータ量にほぼ比例する。そして、全体回路αすなわちブロックＡ、Ｂ、Ｃ全部の再構成が完了すると、全体回路αがアクティブ（動作）状態となり、外部からの入力データの処理を開始する。ここで、回路の遅延のため、全体回路αが処理を開始してから最初の処理結果が出力されるまでには、遅延時間ＤＡ＋Ｂ＋Ｃを要する。例えば、全体回路αが画像処理を行う回路である場合、全体回路αに含まれるラインメモリのライン遅延がその遅延時間の原因の一つとなる。ブロックＡ、Ｂ、Ｃはパイプラインを構成するため、全体回路αのＤＡ＋Ｂ＋Ｃは、個々のブロックＡ、Ｂ、Ｃの遅延時間ＤＡ、ＤＢ、ＤＣの総和にほぼ等しい。
【００４６】
一方、本実施形態の方式では、図４の（ｂ）に示すように、ＦＰＧＡ１００の全体回路αが占めるべき部分がインアクティブなのは、再構成制御を開始してブロックＡを再構成している間だけである。この再構成の完了と共にブロックＡはアクティブになり、並行してブロックＢの再構成が行われる。ブロックＢの再構成も完了すると、ブロックＡとＢがアクティブとなり、並行してブロックＣの再構成が行われる。そして、ブロックＣの再構成も完了すると、全ブロックがアクティブ状態となる。ＦＰＧＡ１００の再構成に要する時間は回路規模に比例するので、ブロックＡの再構成を開始してから全ブロックＡ、Ｂ、Ｃがアクティブになるまでに要する時間は、従来方式で全体回路αを再構成するのに要する時間とほぼ等しい。
【００４７】
ここで、本実施形態の方式では、全ブロックＡ、Ｂ、Ｃがアクティブとなった時点では、ブロックＡ及びＢでは、最初に入力されたデータの処理を完了しており、ブロックＣはバッファ領域Ｂ上に既に存在するブロックＢの処理結果を受け取って処理を開始すればよい。したがって、全ブロックＡ、Ｂ、Ｃがアクティブとなった時点から最初の処理結果が出力されるまでに要する遅延は、実質的にブロックＣの遅延時間ＤＣのみとなる。すなわち、従来方式と比べて、ブロックＡとＢによる遅延時間の分だけ処理結果の出力開始が早まり、ひいては入力データ全体の処理結果の出力完了までに要する時間も同じだけ早まる。
【００４８】
さて、図１のデータ処理装置に例えばページ印刷のための画像処理を行わせる場合、再構成が完了したブロックＡは、ブロックＢの再構成に要する時間（以下、再構成時間と呼ぶ）中に、ページの先頭から、その再構成時間の間にブロックＡが処理できるある幅の帯状領域の画像データを処理する。この帯状領域のことをバンドと呼ぶ。バンドは、横方向についてはページの主走査方向の全幅を有し、縦方向については再構成時間の間にブロックが処理できるデータ量に応じた幅を持つ。図５の例では、ブロックＡは、ブロックＢの再構成時間中に、バンドＢ１の処理を実行し、完了させる。
【００４９】
ここで、前述の通り、ＦＰＧＡ１００の再構成に要する時間は再構成する回路の規模、言い換えれば再構成のために読み込む回路情報のデータ量にほぼ比例する。したがって、図１の例では、ブロックＡ、Ｂ、Ｃの回路規模をほぼ同等とすれば、各ブロックの再構成時間はほぼ等しくなる。また、あるブロックが一定量のデータを処理するのに要する時間（以下、データ処理時間と呼ぶ）はほぼ回路規模に比例すると考えられるので、各ブロックＡ、Ｂ、Ｃのデータ処理時間もほぼ同等と考えることができる。すると、１ページの画像は、ブロックの再構成時間に対応する幅のバンドごとに、ブロックＡ，Ｂ，Ｃで順に処理されていくことになる。図５では、１ページが４つのバンドＢ１〜Ｂ４に分割される例を示したが、これは一例に過ぎない。
【００５０】
この実施形態のデータ処理装置の各ブロックＡ、Ｂ、Ｃがこのページをバンド毎に処理していく流れは、図６に示すようになる。
【００５１】
すなわち、まず上位装置から再構成及び処理の開始を指示された直後のタイムスロットｔｓ１（このスロットの時間幅はブロックの再構成時間に等しい）の中でブロックＡ１２２が再構成される。次のタイムスロットｔｓ２では、ブロックＢ１２４が再構成されると共に、再構成されたブロックＡがページ先頭のバンドＢ１を処理し、その処理結果が外部メモリ２４０のバッファ領域Ａに格納される。次のタイムスロットｔｓ３では、ブロックＣが再構成される。また、これと並行して、ブロックＡが次のバンドＢ２を処理して処理結果をバッファ領域Ａに格納し（ここでダブルバッファ方式を用いてもよい）、再構成されたブロックＢがバッファ領域ＡからブロックＡによるバンドＢ１の処理結果を読み出して処理し、その処理結果をバッファ領域Ｂに格納する。次のタイムスロットｔｓ４では、ブロックＡは、バンドＢ３を処理して処理結果をバッファ領域Ａに格納する。また、ブロックＢは、バッファ領域ＡからバンドＢ２のブロックＡによる処理結果を受け取って処理し、その処理結果をバッファ領域Ｂに書き込む。また、ブロックＣは、バッファ領域ＢからブロックＢによるバンドＢ１の処理結果を読み出して処理し、その処理結果を外部に出力する。以上のようなパイプライン処理を繰り返すことで、タイムスロットｔｓ７で最後のバンドＢ４の処理結果が外部へ出力される。
【００５２】
以上に説明した実施形態では、ブロックＡからＢ、ＢからＣの処理結果データの受け渡しを、外部メモリ２４０を介して行った。したがって、図６のバッファ領域Ａ及びＢのタイムチャートから分かるように、外部メモリ２４０は、タイムスロットｔｓ３〜ｔｓ５の間は、２バンド分のデータの読み書きを常に行っていることになる。例えば、外部メモリ２４０がこの実施形態のデータ処理装置のみならず他の装置からもアクセスされる場合、少なくともｔｓ３〜ｔｓ５では、データ処理装置の使用するメモリ帯域が大きい分、他の装置の使用できる帯域を圧迫してしまう。
【００５３】
そこで、データ処理装置が使用する外部メモリ２４０の帯域を低減する変形例を以下に示す。図７は、この変形例のデータ処理装置の構成を示す。図７において、図１と同様の構成要素には同一符号を付して説明を省略する。
【００５４】
この変形例では、上記実施形態と同様の外部メモリ２４０を介したデータ経路の他に、ブロック間を直結するデータ経路を設け、両者を選択的に使用する。
【００５５】
このため、図７に例示する構成例では、ＦＰＧＡ１００内のブロックＡとＢの間に出力セレクタ（「出力ＳＥＬ１」）と入力セレクタ（「入力ＳＥＬ１」）を設け、ブロックＢとＣの間に出力セレクタ（「出力ＳＥＬ２」）と入力セレクタ（「入力ＳＥＬ２」）を設けている。
【００５６】
出力ＳＥＬ１は１入力２出力であり、入力はブロックＡの出力と接続されるとともに、出力の一方（図中の「１」系統）は外部メモリ２４０へと繋がるセレクタ１３０に、他方（図中の「０」系統）はブロックＢとの直結接続のために入力ＳＥＬ１の入力の一方（図中の「０」系統）に、それぞれ接続されている。出力ＳＥＬ１は、ＣＰＵコア１１０から供給される制御信号に応じて、２系統の出力のうちの一方を選択する。
【００５７】
入力ＳＥＬ１は２入力１出力であり、出力はブロックＢの入力に接続されるとともに、入力の一方（「１」系統）は外部メモリ２４０へと繋がるセレクタ１３０に、他方（「０」系統）はブロックＡとの直結接続のために出力ＳＥＬ１の出力の一方（「０」系統）に、それぞれ接続されている。入力ＳＥＬ１は、ＣＰＵコア１１０から供給される制御信号に応じて、２系統の入力のうちの一方を選択する。
【００５８】
ブロックＢ、Ｃ間の出力ＳＥＬ２及び入力ＳＥＬ２も、上述の出力ＳＥＬ１及び入力ＳＥＬ１これと同様の接続構成となっており、ＣＰＵコア１１０から同様に制御される。
【００５９】
この変形例では、ＣＰＵコア１１０（が実行する制御ソフトウエア）の制御に応じ、出力ＳＥＬ１及び出力ＳＥＬ２は、パイプラインにおけるそのすぐ下流のブロックＢの再構成が完了するタイミングまでは、出力先として「１」系統すなわちセレクタ１３０側を選択する。また、ブロックＢの再構成が完了したタイミング以降のあらかじめ定めたタイミングで、出力先を「０」系統すなわち入力ＳＥＬ１側に切り換え、これ以降、この選択状態を維持する。
【００６０】
また、ＣＰＵコア１１０からの制御に応じて入力ＳＥＬ１は、外部メモリ２４０のバッファ領域Ａに格納されたブロックＡの処理結果が無くなるまでの期間は、入力元として「１」系統すなわちセレクタ１３０側を選択する。また、バッファ領域Ａ内の処理結果を全て処理し終わったタイミング以降のあらかじめ定めたタイミングで、入力元を「０」系統すなわち出力ＳＥＬ１側に切り換え、これ以降、この選択状態を維持する。
【００６１】
同様に、出力ＳＥＬ２は、ブロックＣの再構成が完了するまでは出力先として「１」系統すなわちセレクタ１３０側を選択し、その再構成の完了以降のタイミングで、出力先を「０」系統すなわち入力ＳＥＬ２側に切り換える。また、入力ＳＥＬ２は、バッファ領域Ｂに格納されたブロックＢの処理結果が無くなるまでの期間は、入力元として「１」系統すなわちセレクタ１３０側を選択し、バッファ領域Ｂ内のデータを全て処理し終わった以降のタイミングで、入力元を「０」系統すなわち出力ＳＥＬ１側に切り換える。
【００６２】
出力ＳＥＬ１及び２、並びに入力ＳＥＬ１及び２は共に、再構成制御部２００の制御下で、ＦＰＧＡ１００の論理ブロック及び配線リソースを用いて再構成される。
【００６３】
ここで、再構成制御部２００は、以下のような条件を満たすように、出力ＳＥＬ１及び２、並びに入力ＳＥＬ１及び２を順次ＦＰＧＡ１００上に再構成していく。すなわち、まず出力ＳＥＬ１は、ブロックＡが起動するまでに（例えばブロックＡと同時に）再構成する。また、入力ＳＥＬ１は、ブロックＢが起動するまでに（例えばブロックＡと同時、或いはブロックＢと同時に）再構成する。また、出力ＳＥＬ２は、ブロックＢが起動するまでに（例えばブロックＢと同時に）再構成する。そして、入力ＳＥＬ２は、ブロックＣが起動するまでに（例えばブロックＢと同時、或いはブロックＣと同時に）再構成する。
【００６４】
次に、この変形例におけるＦＰＧＡ１００内の各セレクタ及び各ブロックの状態・動作の時間的な推移の一例を、図８を参照して説明する。
【００６５】
図８において、信号「入力ＡＣＴ」は、外部からブロックＡへのデータ入力を許可又は禁止する二値の制御信号であり、この信号がハイ（高）レベルの場合は入力が許可され、ロー（低）レベルの場合は入力が禁止される。信号「出力ＳＥＬ１」は、セレクタ「出力ＳＥＬ１」の出力先の選択を制御する信号であり、この信号がハイの場合は出力ＳＥＬ１は「１」系統すなわちセレクタ１３０側を、ローの場合は「０」系統すなわちブロックＢとの直結経路側を、それぞれ選択する。信号「入力ＳＥＬ１」は、セレクタ「入力ＳＥＬ１」の入力元の選択を制御する信号であり、この信号がハイの場合は入力ＳＥＬ１は「１」系統すなわちセレクタ１３０側を、ローの場合は「０」系統すなわちブロックＡとの直結経路側を、それぞれ選択する。信号「出力ＳＥＬ２」及び「入力ＳＥＬ２」もこれと同様である。これら制御信号は、ＣＰＵコア１１０が実行する制御ソフトウエアにより発行される。
【００６６】
図８の例では、入力ＡＣＴ信号は、ブロックＡの再構成を行っている期間ｔｓ１の間はローであり、その再構成完了後、ブロックＢの再構成を行っているｔｓ２の間はハイとなる。そして、その次のブロックＣが再構成されているタイムスロットｔｓ３では、再びローに戻り、更にブロックＣの再構成が完了したｔｓ４以降はハイになる。このような信号によれば、まずブロックＡが再構成された後のタイムスロットｔｓ２でバンドＢ１（図５参照）がブロックＡに入力され、次のタイムスロットｔｓ３ではデータ入力が停止される。そして、更に次のタイムスロットｔｓ４でデータ入力が再開され、ｔｓ４，５，６にてそれぞれバンドＢ２、Ｂ３、Ｂ４のデータがブロックＡに入力されることとなる。
【００６７】
また、出力ＳＥＬ１信号は、タイムスロットｔｓ２の間だけハイとなる。すなわち、出力ＳＥＬ信号１は、ブロックＡの再構成が完了したタイミングでハイとなり、次のブロックＢの再構成が完了したタイミングでローになり、以降ロー状態が維持される。また、入力ＳＥＬ１信号は、タイムスロットｔｓ３の間だけハイとなる。すなわち、入力ＳＥＬ１信号は、ブロックＢの再構成が完了したタイミングでハイとなり、次のブロックＣの再構成が完了したタイミング、すなわちブロックＢがバンドＢ１の処理を完了したタイミングでローになり、以降ロー状態が維持される。このような制御信号によれば、ブロックＡ、Ｂ間では、最初の１バンドＢ１のデータの受け渡しは外部メモリ２４０のバッファ領域Ａを介して行われることとなり、バンドＢ２以降は外部メモリ２４０を介さずブロックＡからＢに直接データが供給されることとなる。
【００６８】
また、図８の例では、出力ＳＥＬ２信号はブロックＢが起動して以降、ブロックＢが全バンドＢ１〜Ｂ４のデータを出力し終わるまでずっとハイである。これに呼応して、入力ＳＥＬ２信号は、ブロックＣが起動して以降ブロックＣが全バンドＢ１〜Ｂ４のデータを処理し終わるまでずっとハイである。このような制御信号によれば、ブロックＢからＣへのデータの受け渡しは、直結ルートはまったく使用せずに、すべて外部メモリ２４０のバッファ領域Ｂを介して行われることとなる。
【００６９】
この制御では、バンドＢ１のデータは、ブロックＡからバッファ領域Ａを介してブロックＢに受け渡され、ブロックＢからバッファ領域Ｂを介してブロックＣに受け渡され、最終的にブロックＣから外部に出力されることとなる。一方、バンドＢ２は、タイムスロットｔｓ４において、外部からブロックＡに入力されて処理されると共に、その処理結果が直接ブロックＢに入力されて処理される。そしてその処理結果はバッファ領域Ｂに格納される。そして、バッファ領域Ｂに保持されたバンドＢ２の処理結果は、次のタイムスロットｔｓ５でブロックＣにより処理され、外部に出力される。バンドＢ３及びＢ４の処理の流れは、Ｂ２と同様である。
【００７０】
図８の制御例では、図６の例と比較した場合、タイムスロットｔｓ３以降はブロックＡの処理結果データをバッファ領域Ａに書き込むためのメモリ帯域が空き、タイムスロットｔｓ４以降はブロックＢがバッファ領域Ａからデータを読み出すための帯域が空くことになる。
【００７１】
なお、図８の例では、ブロックＢ、Ｃ間の出力ＳＥＬ２及び入力ＳＥＬ２は事実上機能していない（常にセレクタ１３０側が選択されている）。したがって、この例では、出力ＳＥＬ２及び入力ＳＥＬ２は設けなくてもよい。同様に、ブロックＢ、Ｃ間の出力ＳＥＬ２及び入力ＳＥＬ２のみを設け、ブロックＡ、Ｂ間の出力ＳＥＬ１及び入力ＳＥＬ１は設けない構成例も考えられる。
【００７２】
次に、図９を参照して、図７の変形例のデータ経路制御の別の例を説明する。この例では、入力ＡＣＴ信号は、ｔｓ２、ｔｓ４、及びｔｓ６以降はハイであり、ｔｓ３、ｔｓ５ではローである。
【００７３】
出力ＳＥＬ１信号及び入力ＳＥＬ１信号は図８の例と同様であるが、出力ＳＥＬ２信号及び入力ＳＥＬ２信号は図８の例（実質的に常時ハイ）とは異なり、最短のタイミングでローに切り替わる。すなわち、出力ＳＥＬ２信号は、ｔｓ４の終端、すなわちバンドＢ２の処理結果のブロックＢからバッファ領域Ｂへの書き込みの終了のタイミングで、ローに切り替わる。また、入力ＳＥＬ２信号は、ｔｓ５の終端、すなわちバッファ領域ＢからブロックＣへのバンドＢ２の処理結果の読み出しのタイミングで、ローに切り替わる。
【００７４】
このような制御により、バンドＢ３及びＢ４のデータは、ｔｓ６及び７において、それぞれ外部メモリ２４０を介さずにブロックＡ、Ｂ、Ｃで順に処理され、外部に出力されることとなる。
【００７５】
図９の制御によれば、バンドＢ３及びＢ４については、バッファ領域Ｂに対する読み書きのためのメモリ帯域も空くことになる。
【００７６】
以上では、ＦＰＧＡ１００上に同時に存在し得る１つの全体回路αの中での各ブロックＡ、Ｂ、Ｃの再構成及び起動の制御の例を説明した。しかしながら、この実施形態の制御は、そのような全体回路が複数存在し、それらが順次ＦＰＧＡ１００に書き込まれてパイプライン処理を実行する場合にも適用可能である。ここで、全体回路同士は、ＦＰＧＡ１００上で互いに干渉する位置を占めるので、同時にはＦＰＧＡ１００上に存在できない。このケースでは、複数の全体回路がＦＰＧＡ１００を時間的に分有（タイムシェア）することにより大きなパイプラインを形成すると共に、個々の全体回路内では複数のブロックがＦＰＧＡ１００上の空間内で同時にパイプラインを形成する。
【００７７】
例えば、図１０に示す例では、まずＦＰＧＡ１００上に全体回路αが再構成され、全体回路αの処理が終わると、その処理の結果に対して更なる処理を行う全体回路βがＦＰＧＡ１００上に再構成される。ここで、全体回路α及びβは、それぞれ上記実施形態と同様、パイプラインを構成する複数のブロックＡ、Ｂ、Ｃに分割される。そして、再構成制御部２００は、全体回路α及びβをそれぞれ再構成して動作させる場合に、上述の実施形態又は変形例の手法に従って、各ブロックを順に１つずつ再構成して起動していく。
【００７８】
ここで、この例では、全体回路αが複数のブロックに分かれ、それらブロックがパイプラインを形成しているので、パイプラインの先頭のブロックＡのデータ処理が終わっても、まだ後ろのブロックがデータ処理を実行している期間が存在する。この期間内に、次の全体回路βのパイプラインの先頭ブロックの再構成を開始することで、全体回路βの再構成が完了するタイミングを従来よりも早めることができる。
【００７９】
すなわち、従来方式では、図１１Ａに示すように、全体回路αの全ブロックＡ、Ｂ、Ｃがタイムスロットｔｓ１〜ｔｓ３の間に再構成され、その後タイムスロットｔｓ４〜ｔｓ６の間にそれらブロックＡ、Ｂ、Ｃがデータ処理（この例では３バンド分のデータの処理）を実行する。そして、その処理が終了すると、全体回路βの全ブロックＡ、Ｂ、Ｃがタイムスロットｔｓ７〜ｔｓ９の間に再構成され、その後タイムスロットｔｓ１０〜ｔｓ１２の間にそれらブロックＡ、Ｂ、Ｃがデータ処理を実行する。図１１Ａの例では、繁雑さを避けるため、全体回路α及びβの再構成に要する時間が同一であるとしたが、再構成時間は各々の回路規模に依存するので同一でない場合もある。
【００８０】
これに対し、実施形態及び変形例の構成では、図１１Ｂに示すように、全体回路αの先頭のブロックＡはタイムスロットｔｓ１の間に再構成されて起動し、ｔｓ４でデータの処理を終える。ｔｓ５以降は、ブロックＡは不要となる。一方、全体回路αの末尾のブロックＣは、ｔｓ５及びｔｓ６でもデータ処理を行っている。この状況で、再構成制御部２００は、ｔｓ５又はｔｓ６に全体回路βの先頭ブロックＡの再構成を開始する（図では、ｔｓ５に再構成する場合を例示）。そして、全体回路αによるページの先頭バンドの処理結果はｔｓ４に得られており、ブロックＡの再構成が完了した時点では既に存在するので、ブロックＡは再構成完了後すぐに起動することができる。また、図１１Ｂの例では、全体回路αのブロックＣの処理が終わる前に、全体回路βのブロックＢの再構成も行っている。このように、前の全体回路の一部がまだデータ処理をしている間に、既にデータ処理を行っている部分を次の全体回路に書き換えることで、全体回路αとβの全体を通した処理に要する時間が短縮される。
【００８１】
以上のような再構成制御を可能にするためには、全体回路βのブロックＡは、全体回路αのブロックＢ及びＣと干渉しない領域を占める回路として設計されている必要がある。また、全体回路βのブロックＢは、全体回路αのブロックＣと干渉せず、かつ全体回路βのブロックＡと干渉しない領域を占める回路として設計されている必要がある。
【００８２】
なお、ＦＰＧＡ１００を全体回路αとβに交互に書き換えながら処理を進める場合、図１１Ｂのｔｓ９にて全体回路αのブロックＡの再構成を行ってもよい。また、ここでは、２つの全体回路がパイプラインを構成する場合を例示したが、この再構成制御が３以上の全体回路がパイプラインを構成する場合にも適用可能であることは理解されよう。
【００８３】
以上に説明した実施形態及び変形例では、再構成可能回路の一例としてＦＰＧＡ１００を例示したが、データ処理装置が備える再構成可能回路は他の種類・方式のもの（例えばＰＬＤやＣＰＬＤ(Complex PLD)）であってもよい。
【００８４】
さて、次に、全体回路のブロック分割に合わせて処理対象のデータをバンド分割して供給する制御の例を説明する。
【００８５】
この例では、図１、図７に例示した装置構成のうちのＣＰＵコア１１０が、図１２の手順に従って処理を実行する。図１２の手順は、印刷のためのページ画像の処理を行う全体回路をＦＰＧＡに再構成する場合の例である。
【００８６】
まず、この手順では、まず、ブロック再構成時間Treconf及び全画像処理時間Tprocの値を、データ処理装置が備える設定値記憶用の記憶装置から取得する。このために、当該データ処理装置に対して書き込む回路を設計した設計者などのユーザが、ブロック再構成時間Treconf及び全画像処理時間Tprocの値（又はその値を求めるための情報を、当該データ処理装置に対してあらかじめ設定しておく。
【００８７】
ここで、ブロック再構成時間Treconfは、１ブロックを再構成するのに要する時間のことであり、例えば、ＦＰＧＡ１００全体の書換時間、すなわち全体回路αを再構成するのに要する時間を、その全体回路αをブロックに分解した場合のブロック数で除した結果の値である。すなわち、この例では、各ブロックの回路規模をほぼ同等にしており、全体回路αをブロック数で割ることで、１ブロックの再構成時間が求められる。また、ここで、例えば、あらかじめ設計者が、全体回路βを、パイプラインをなすほぼ同等の回路規模の複数のブロックに分割する設計を行っているので、この設計の情報からブロック数が求められる。
【００８８】
なお、このブロック分割設計においては、与えられた条件が許す限りで、できるだけ細かいブロックに、すなわちできるだけ多数のブロックに分割した方が、前述のようにデータ処理の終了が早まる。例えば、データ処理装置が外部メモリと通信するのに割り当てられるメモリ帯域幅と、ＦＰＧＡ１００の内部周波数に対応する処理速度との関係から、データ処理装置に入出力可能なデータストリームの最大数が求められる。ブロックには入力と出力とがあるので、その最大数の半分の数が、与えられた条件での最大ブロック数となる。例えば、メモリ帯域幅が４ＧＢ／ｓで、内部周波数が２００ＭＨｚ（すなわち処理速度が２００ＭＢ／ｓ）である場合、最大２０ストリーム、すなわち最大ブロック数は１０となる。設計者は、全体回路αをこの最大ブロック数へと均等に分割する設計を行えばよい。
【００８９】
このようなことから、例えば全体回路αの書換に要する時間とブロック数から、ブロック再構成時間Treconfが求められる。
【００９０】
全画像処理時間Tprocは、全体回路αが、処理対象のデータ全体（この例では、１ページの画像データ全体）を処理するのに要する時間のことである。設計者が全体回路αを設計した時点で、対象となる１ページのデータの量も分かっているので、このTprocの値は、この時点で判明している。
【００９１】
このようにして、Ｓ３０では、設計者等のユーザが、Treconf（又はその元になるＦＰＧＡ全体の書換時間とブロック数）とTprocを、設定するのである。なお、この設定は、データ処理装置に対して一度行っておき、その後そのデータ処理装置が起動されデータ処理を実行するときに、制御ソフトウエアが、設定された値を読み出して以下の処理を実行すればよい。
【００９２】
制御ソフトウエアを実行するデータ処理装置のＣＰＵコア１１０は、この設定値に基づき、処理対象のページ画像データのバンド分割の要否、及びバンド分割する場合のバンドのサイズを判定する。
【００９３】
すなわち、ＣＰＵコア１１０は、TreconfとTprocを比較し（Ｓ３２）、前者の方が短い場合（すなわちＳ３２の判定結果がＹｅｓ）、１ブロックあたりの画像処理時間Tproc’の値を、Treconfにセットする（Ｓ３４）。そして、処理対象のページ画像データをバンド分割するモードへと移行する（Ｓ３６）。このモードでは、Ｓ３０で取得された全画像処理時間Tprocを、ブロックあたりの画像処理時間Tproc’で除した結果の値を、処理対象の画像データ全体をバンド分割する場合のバンド数とする。また、個々のバンドの高さは、ページの高さをバンド数で除した値とする。そして、このバンド数、バンド高さに従い、制御ソフトウエアは、処理対象のページ画像データをバンド単位に分割し、先頭のバンドから順に１バンドずつ、ＦＰＧＡ１００（の先頭のブロック）に入力していく。より詳しくは、ＣＰＵコア１１０は、例えばデータ処理装置が備えるＤＭＡ(Direct Memory Access)コントローラ（図示省略）に対して、バンドの先頭アドレスとバンドサイズとを渡し、ＦＰＧＡ１００の先頭ブロックの入力のアドレスへの転送を依頼し、以降１バンドの転送を終了するごとに、ＤＭＡコントローラに次のバンドについての転送依頼を行う。
【００９４】
またステップＳ３２の判定結果がＮｏ、すなわちTreconf≧Tprocの場合は、ＣＰＵコア１１０は、処理対象のページ画像データをバンド分割せずにそのままＦＰＧＡ１００（の先頭のブロック）に入力する（Ｓ３８）。
【００９５】
このような制御を行うと、ブロック再構成時間Treconfが全画像処理時間Tprocより短い場合は、処理対象のページ画像がバンド単位に分割されて処理されることになる。例えば、図１３に示すように、全体回路αの再構成時間が４０ｍｓ（ミリ秒）、ブロック数が４、全体回路αがページ画像を処理するのに要する全画像処理時間が５０ｍｓであるとすると、従来のように全体回路αをまとめて再構成する方式の場合は、開始時点から４０ｍｓまではＦＰＧＡ１００の書換が行われ、４０ｍｓから９０ｍｓまでの時間でページ画像全体が処理されることになる。図中では、これを細かいドットパターンで示した長方形で示した（但し一部がブロック・バンド分割結果の斜線ハッチング正方形で隠されている）。これに対し、全体回路αをブロック分割、更に図１２の手順によりバンド分割を行った場合の処理の進み方を、図中に斜線ハッチングで示す。この場合、開始時点から１０ｍｓの間に先頭ブロックが再構成され、その後２０ｍｓまでの間にページの先頭の１バンドがその先頭ブロックで処理される。この処理が終わる時点では、２番目のブロックの再構成が完了しているので、先頭ブロックによる先頭バンドの処理結果は２番目のブロックに入力され、３０ｍｓまでの間に処理される。この処理と並行して、先頭ブロックは２０ｍｓから３０ｍｓまでの間に２番目のバンドを処理する。このようにして、１ページを構成する５バンドがブロック群によりパイプライン処理される。図１３の例では、この実施形態の方式の方が、図４に例示したライン遅延の差の分だけ、従来技術よりも処理を速く終えることができる。また、従来方式の場合と、ブロック分割・バンド分割の場合との差の部分３００で表される時間及びＦＰＧＡ１００上の空き領域は、他の回路を再構成したり動作されたりするのに利用可能である。
【００９６】
また、ブロック再構成時間Treconfが全画像処理時間Tproc以上の場合、図１４に示す例では、従来方式では、全体回路αの再構成が完了する４０ｍｓの時刻から全体回路αが動作し、ページ全体を６ｍｓで処理する。これに対し、この実施形態の方式では、先頭ブロックが１０ｍｓで再構成され、その後その先頭ブロックが６ｍｓでページ全体を処理し、２番目のブロックが１０ｍｓから２０ｍｓの間に再構成され、その後先頭ブロックの処理結果を６ｍｓで処理する。以上の繰り返しにより、ページ全体のデータが順番に各ブロックにてパイプライン処理される。この場合も、図４に例示したライン遅延の差の分だけ、従来技術よりも処理を速く終えることができる。また、処理の終わったブロックは、他の回路に書き換えるなどして利用することができる。
【符号の説明】
【００９７】
１００  ＦＰＧＡ、１１０  ＣＰＵコア、１２２  ブロックＡ、１２４  ブロックＢ、１２６  ブロックＣ、１３０  セレクタ、１３５  メモリコントローラ、２００  再構成制御回路、２２０  ＥＥＰＲＯＭ、２４０  外部メモリ。
【図１】
0005504985.tif 000002
【図２】
0005504985.tif 000003
【図３】
0005504985.tif 000004
【図４】
0005504985.tif 000005
【図５】
0005504985.tif 000006
【図６】
0005504985.tif 000007
【図７】
0005504985.tif 000008
【図８】
0005504985.tif 000009
【図９】
0005504985.tif 000010
【図１０】
0005504985.tif 000011
【図１１Ａ】
0005504985.tif 000012
【図１１Ｂ】
0005504985.tif 000013
【図１２】
0005504985.tif 000014
【図１３】
0005504985.tif 000015
【図１４】
0005504985.tif 000016