(57)【特許請求の範囲】
【請求項１】
第一の処理部と、第二の処理部と、回路情報を書き換えることで再構成が可能なプログラマブル回路部とを備える情報処理装置であって、
処理の種類ごとに、前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の少なくともいずれかを含む組み合わせによる処理を実行可能な処理形態が定義された定義情報を保持する保持手段と、
前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の使用状況を管理する管理手段と、
処理の要求を受信する受信手段と、
前記定義情報と前記管理手段により管理されている各部位の使用状況とに基づいて、前記受信手段にて受信した処理を実行可能な処理形態を選択する選択手段と、
前記選択手段にて選択された処理形態を用いて、前記受信手段にて受信した処理を実行させる制御手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記選択手段は、前記受信手段にて受信した処理を実行可能な処理形態のうち、使用状況が未使用である部位の組み合わせからなる処理形態を選択することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記定義情報は、処理の種類ごとに、処理形態の優先度を設定し、
前記選択手段は、前記受信手段にて受信した処理を実行可能な処理形態のうち、優先度が高い処理形態を選択することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記定義情報にて定義された処理形態は、前記第一の処理部のみ、前記第二の処理部のみ、前記第一の処理部と前記プログラマブル回路部の組み合わせ、および前記第二の処理部と前記プログラマブル回路部の組み合わせのいずれかであることを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記受信手段が受信した処理のうち、処理対象となる処理を決定する決定手段を更に有し、
前記決定手段は、前記受信手段が受信した順に処理を処理対象として決定することを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
複数の処理から構成されるジョブを受信する手段と、
受信したジョブごとに、構成する複数の処理それぞれの処理状態および処理を実行する部位を管理する管理手段と、
処理対象となる処理を決定する決定手段と
を更に有し、
前記受信手段は、ジョブを構成する複数の処理それぞれの要求を受信してキューに登録し、
前記決定手段は、前記キューに複数の処理が登録されている場合、前記管理手段にて管理されている情報に基づいて前記キューに登録されている複数の処理それぞれの後続の処理を実行する部位の情報を取得し、前記キューに登録されている複数の処理のうち、後続の処理を行う部位が他の登録されている処理の後続の処理を行う部位と競合しない処理を優先的に処理対象として決定するように処理の順序を制御することを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項７】
前記情報処理装置は、第一の電力モードと、前記第一の電力モードよりも省電力である第二の電力モードにて動作可能であり、
前記定義情報は更に、電力モードに応じて動作可能な処理形態を定義し、
前記選択手段は、電力モードおよび前記定義情報に応じて、処理形態を選択することを特徴とする請求項１乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
処理を実行する場合において、電力モードもしくは処理性能のいずれを優先するかを設定する設定手段をさらに有し、
前記選択手段は、前記第二の電力モード時において、処理性能を優先すると設定されている場合であって、前記受信手段が受信した処理を実行可能な処理形態が前記第二の電力モードにより動作を制限されている場合、前記第一の電力モードへ前記情報処理装置を復帰させた上で、処理形態を選択することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記制御手段は、前記選択手段にて選択された処理形態が前記プログラマブル回路部を使用する処理形態である場合、前記受信手段にて受信した処理を実行するための機能を前記プログラマブル回路部に再構成した上で、当該処理の実行を要求することを特徴とする請求項１乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記選択手段にて選択された処理形態が前記プログラマブル回路部を使用する処理形態である場合、前記制御手段は、
処理形態が選択された時点で、当該プログラマブル回路部を使用中として前記管理手段にて管理させ、
前記選択手段にて選択された処理形態に含まれる前記第一もしくは第二の処理部による処理が完了したか否かに関わらず、前記プログラマブル回路部に再構成された機能を用いた前記処理の実行が完了した時点で、前記プログラマブル回路部を未使用として前記管理手段にて管理させることを特徴とする請求項１乃至９のいずれか一項に記載の情報処理装置。
【請求項１１】
処理の種類ごとに、前記プログラマブル回路部を使用して処理を実行する際に必要となるメモリの使用量の情報を保持する手段と、
前記メモリの空き容量を管理する手段と
をさらに有し、
前記制御手段は、前記プログラマブル回路部を使用して次に実行しようとする処理のメモリの使用量が、前記メモリの現在の空き容量よりも小さい場合、前記選択手段にて選択された処理形態に含まれる前記第一もしくは第二の処理部による処理が完了する前であって、前記プログラマブル回路部に構成されている機能による処理が完了した時点で、前記プログラマブル回路部の次の機能の再構成を開始するように制御することを特徴とする請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記制御手段は、前記メモリの空き容量に応じて、前記プログラマブル回路部を使用して次に実行しようとする処理にて用いる前記メモリのアドレスを決定することを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
第一の処理部と、
第二の処理部と、
回路情報を書き換えることで再構成が可能なプログラマブル回路部と
処理の種類ごとに、前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の少なくともいずれかを含む組み合わせによる処理を実行可能な処理形態が定義された定義情報を保持する保持手段と
を備える情報処理装置の制御方法であって、
前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の使用状況を管理する管理工程と、
処理の要求を受信する受信工程と、
前記定義情報と前記管理工程により管理されている各部位の使用状況とに基づいて、前記受信工程にて受信した処理を実行可能な処理形態を選択する選択工程と、
前記選択工程にて選択された処理形態を用いて、前記受信工程にて受信した処理を実行させる制御工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項１４】
第一の処理部と、第二の処理部と、回路情報を書き換えることで再構成が可能なプログラマブル回路部とを備えるコンピュータを、
処理の種類ごとに、前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の少なくともいずれかを含む組み合わせによる処理を実行可能な処理形態が定義された定義情報を保持する保持手段、
前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の使用状況を管理する管理手段、
処理の要求を受信する受信手段、
前記定義情報と前記管理手段により管理されている各部位の使用状況とに基づいて、前記受信手段にて受信した処理を実行可能な処理形態を選択する選択手段、
前記選択手段にて選択された処理形態を用いて、前記受信手段にて受信した処理を実行させる制御手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラマブルロジックデバイスを備えた情報処理装置およびその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
特許文献１ではＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のコンフィグレーション方法として、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）からコンフィグレーションデータをロードする方法とは異なる手法が示されている。具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）をマスターデバイスとして、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）からコンフィグレーションデータをＦＰＧＡにロードする手法である。以降、この手法を「ＣＰＵマスター・コンフィグレーション」と呼称する。ＣＰＵマスター・コンフィグレーションを用いることで、ＲＯＭを書き換えることなく、ＨＤＤ内のファイルを置き換えてロードすることで、ＦＰＧＡの処理内容をアップデートすることが可能になる。このようにＣＰＵから任意にＦＰＧＡを書き換えられるので、ＦＰＧＡが実行可能な処理（ジョブ）の種類を従前より簡便に増やすことができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−０９８８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＦＰＧＡには、ＣＰＵが接続可能な高速ポート（例えばＰＣＩ  Ｅｘｐｒｅｓｓ）を複数搭載するものがある。このようなＦＰＧＡを２つ以上のＣＰＵが共有し、各ＣＰＵはＦＰＧＡに構成された論理回路を利用することで処理の高速化を図ることが可能になる。このようなＦＰＧＡ共有構成において、例えば、或るＣＰＵが、ＦＰＧＡを利用することで処理時間の短縮が期待できるジョブを受け付けたとする。このときに、別のＣＰＵが既にＦＰＧＡを利用していると、従来は、その或るＣＰＵは別ＣＰＵによるＦＰＧＡの利用が完了して利用可能となるまで待機していた。しかしながら、その或るＣＰＵが実行すべきそのジョブの内容によってはＦＰＧＡが利用可能となるのを必ずしも待たずに、ＦＰＧＡを利用せずに自身でジョブを実行した方が、処理時間の短縮につながることがある。
【０００５】
本願発明は、複数のＣＰＵで共有されるＦＰＧＡを有するシステムにおいて、処理を複数の処理形態から選択する際に、処理パフォーマンスを低下させない適切な処理形態を選択する手法を提案する。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本願発明は以下の構成を有する。すなわち、第一の処理部と、第二の処理部と、回路情報を書き換えることで再構成が可能なプログラマブル回路部とを備える情報処理装置であって、処理の種類ごとに、前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の少なくともいずれかを含む組み合わせによる処理を実行可能な処理形態が定義された定義情報を保持する保持手段と、前記第一の処理部、前記第二の処理部、および前記プログラマブル回路部の使用状況を管理する管理手段と、処理の要求を受信する受信手段と、前記定義情報と前記管理手段により管理されている各部位の使用状況とに基づいて、前記受信手段にて受信した処理を実行可能な処理形態を選択する選択手段と、前記選択手段にて選択された処理形態を用いて、前記受信手段にて受信した処理を実行させる制御手段とを有する。
【発明の効果】
【０００７】
本願発明により、複数のＣＰＵで共有されるＦＰＧＡを有するシステムにおいて、複数の処理形態の中から処理形態を選択する際に、処理パフォーマンスを低下させない適切な処理形態を選択することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】第一の実施形態に係る画像形成装置の構成例を示す図。
【図２】第一の実施形態に係る拡張処理部の構成例を示す図。
【図３】第一の実施形態に係るＦＰＧＡの構成例を示す図。
【図４】第一の実施形態に係る回路構成情報の例を示す図。
【図５】第一の実施形態に係る拡張処理キューを示す図。
【図６】第一の実施形態に係る処理部空き状況管理テーブルの構成例を示す図。
【図７】第一の実施形態に係る処理形態テーブルの構成例を示す図。
【図８】第一の実施形態に係る処理の処理形態管理テーブルの構成例を示す図。
【図９】第一の実施形態に係る拡張処理制御処理のフローチャート。
【図１０】第一の実施形態に係る拡張処理要求受信処理のフローチャート。
【図１１】第一の実施形態に係る拡張処理要求選択処理のフローチャート。
【図１２】第一の実施形態に係る処理形態選択処理のフローチャート。
【図１３】第一の実施形態に係るＦＰＧＡの再構成処理のフローチャート。
【図１４】第一の実施形態に係る拡張処理制御の終了処理のフローチャート。
【図１５】第一の実施形態に係る画像処理制御処理のフローチャート。
【図１６】第一の実施形態に係る画像処理制御処理のフローチャート。
【図１７】第一の実施形態に係るソフトウェア構成例を示す図。
【図１８】第二の実施形態に係るジョブの処理状態を管理するテーブルの構成例を示す図。
【図１９】第二の実施形態に係る拡張処理要求選択処理のフローチャート。
【図２０】第三の実施形態に係る優先設定情報の例を示す図。
【図２１】第三の実施形態に係る電力状態情報の例を示す図。
【図２２】第三の実施形態に係る処理形態テーブルの構成例を示す図。
【図２３】第三の実施形態に係る処理形態選択処理のフローチャート。
【図２４】第四の実施形態に係るＦＰＧＡメモリ使用量テーブルの構成例を示す図。
【図２５】第四の実施形態に係る処理部空き状況管理テーブルの構成例を示す図。
【図２６】第四の実施形態に係る画像処理のフローチャート。
【図２７】第四の実施形態に係る画像処理のフローチャート。
【図２８】第四の実施形態に係る拡張処理制御処理のフローチャート。
【図２９】第四の実施形態に係る画像処理要求発行処理のフローチャート。
【図３０】第四の実施形態に係る拡張処理制御の終了処理のフローチャート。
【発明を実施するための形態】
【０００９】
＜第一の実施形態＞
以下、図面を参照して本願発明に係る実施形態を詳細に説明する。なお、各図面において同様の機能を有する箇所には同一の符号を付し、説明の重複は適宜省略する。
【００１０】
［装置構成］
図１を用いて、本願発明の第一の実施形態に係る情報処理装置である画像形成装置の全体構成を説明する。本実施形態において画像形成装置１００は、画像の入出力や送受信と、それに関連する各種の画像処理を行う複合機（ＭＦＰ：Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）である。画像形成装置１００は、メインコントローラ１０１、ユーザインタフェースである操作部１０２、画像入力デバイスであるスキャナ１０３、および、画像出力デバイスであるプリンタ１０４を備える。操作部１０２、スキャナ１０３、および、プリンタ１０４は、それぞれメインコントローラ１０１に接続され、メインコントローラ１０１が各部の動作を制御する。また、画像形成装置１００は、メインコントローラ１０１が備える拡張ＩＦ１２９を通じて拡張処理部１０５と接続する。メインコントローラ１０１は、主制御を司るＣＰＵ１０６を備える。ＣＰＵ１０６は、システムバス１３０を介して、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０７、ＲＯＭ１０８、およびＦｌａｓｈ（Ｆｌａｓｈメモリ）１０９と接続する。更に、ＣＰＵ１０６は、画像バスＩＦ１１０、操作部ＩＦ１１１、ＮＷ通信部１１２、モデム部１１３、および、拡張ＩＦ１２９と接続する。
【００１１】
ＲＡＭ１０７は、ＣＰＵ１０６の主記憶部として作業領域を提供するための随時読み書き可能なメモリであり、内部処理する画像データを一時記憶するための画像メモリとしても使用される。ＲＯＭ１０８は、ブートＲＯＭでありシステム起動に必要なブートプログラム、および、動作に必要な各種処理プログラムが格納される。Ｆｌａｓｈ１０９は、不揮発性メモリであり、画像形成装置１００の電源遮断後にも保持が必要なシステムソフトウェアや設定値データ等が格納される。
【００１２】
操作部ＩＦ１１１は、例えば、液晶タッチパネル等で構成される操作部１０２との間で入出力を行うためのインタフェースである。操作部ＩＦ１１１は、操作部１０２に対して表示すべき画像データを出力し、また、ユーザが操作部１０２を介して入力した情報をＣＰＵ１０６に伝送するために使用される。ＮＷ通信部１１２は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続するためのインタフェースであり、ＬＡＮに対して情報の入出力を行う。モデム部１１３は、公衆回線と接続するためのインタフェースであり、公衆回線に対して情報の入出力を行う。画像バスＩＦ１１０は、システムバス１３０と画像データを転送するための画像バス１１４とを接続するインタフェースであり、データ構造を変換するバスブリッジとして動作する。
【００１３】
画像バス１１４には、ＲＩＰ（Ｒａｓｔｅｒ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｏｒ）１１５、デバイスＩＦ１１６、スキャナ画像処理部１１７、プリンタ画像処理部１１８、画像回転部１１９、および、画像圧縮部１２０が接続される。ＲＩＰ１１５は、ＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）データをビットマップイメージに展開する。デバイスＩＦ１１６は、スキャナ１０３、および、プリンタ１０４とメインコントローラ１０１とを接続するインタフェースであり、画像データの同期系／非同期系の変換を行う。スキャナ画像処理部１１７は、スキャナ１０３から読み込んだ入力画像データに対して、補正、加工、編集等の画像処理を行う。プリンタ画像処理部１１８は、プリンタ１０４へ出力するプリント出力画像データに対して、色変換、フィルタ処理、解像度変換等の処理を行う。画像回転部１１９は、画像データの回転処理を行う。画像圧縮部１２０は、多値画像データに対してはＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）圧縮伸長処理を行う。また、画像圧縮部１２０は、２値画像データに対してはＪＢＩＧ（Ｊｏｉｎｔ  Ｂｉ−ｌｅｖｅｌ  Ｉｍａｇｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）、ＭＭＲ（Ｍｏｄｉｆｉｅｄ  Ｍｏｄｉｆｉｅｄ  ＲＥＡＤ）、ＭＨ（Ｍｏｄｉｆｉｅｄ  Ｈｕｆｆｍａｎ）などの符号化方式を用いた圧縮伸長処理を行う。
【００１４】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１２１は、不揮発性のデータ記憶装置であり、画像データ、システムデータ、ユーザデータ等の各種データ、および、ＣＰＵ１０６が実行する動作プログラムなどが保持される。拡張処理部１０５として接続されるＦＰＧＡを備えるオプションボードの制御プログラムや回路情報もこれに含まれる。メインコントローラ１０１がＨＤＤ１２１を接続しない構成をとる場合は、各種データはＦｌａｓｈ１０９に保持されてもよい。
【００１５】
拡張ＩＦ１２９は、例えば、ＰＣＩエクスプレスやＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）で構成される周辺機器接続用のインタフェースであり、接続される周辺機器とのデータ送受信を行う。本実施形態では拡張処理部１０５と接続される。また、拡張処理部１０５への電源供給は、電力供給ライン１２８を通して行われる。拡張処理部１０５の詳細は後述する。
【００１６】
電源制御部１２２は、電力供給手段である電源装置１２３から電力供給ライン１２４を介して受容したＤＣ電源を、電力供給ライン１２５、１２６を介してメインコントローラ１０１の回路要素１４０、１４１に供給する。また、電源制御部１２２は、電力供給ライン１２８を介して拡張処理部１０５に電力の供給を行う。電源制御部１２２は、画像形成装置１００の電力状態に応じて電源供給形態を切り替えて給電制御を行う。また、電源制御部１２２は、操作部ＩＦ１１１、ＮＷ通信部１１２、モデム部１１３、および、ＣＰＵ１０６からの制御信号線１２７を介して制御信号を受信する。そして、電源制御部１２２は、受信した制御信号に基づいて各電力供給ラインの電力供給制御を行う。
【００１７】
電力供給ライン１２５は、ＲＩＰ１１５、デバイスＩＦ１１６、スキャナ画像処理部１１７、プリンタ画像処理部１１８、画像回転部１１９、および、画像圧縮部１２０を含む回路要素１４０に接続される。電力供給ライン１２６は、ＣＰＵ１０６、ＲＯＭ１０８、ＲＡＭ１０７、画像バスＩＦ１１０、操作部ＩＦ１１１、ＮＷ通信部１１２、モデム部１１３、ＨＤＤ１２１、および、拡張ＩＦ１２９を含む回路要素１４１に接続される。電力供給ライン１２８は、拡張ＩＦ１２９に接続される回路要素１４２へ電力供給する。
【００１８】
本実施形態において、画像形成装置１００は、通常状態と省電力状態との２つの動作状態を備えるものとする。通常状態では、電源装置１２３は、電力供給ライン１２４を介して電源制御部１２２に電力供給する。このとき電源装置１２３は、大容量の電源回路と少容量の電源回路を併用し、通常状態で使用する全電力容量（例えば、１４００ワット）を供給できる。また、ＣＰＵ１０６は、電力供給ライン１２５、電力供給ライン１２６、および、電力供給ライン１２８に対する電力供給が有効となるように電源制御部１２２を制御する。
【００１９】
省電力状態では、電源装置１２３は、電力供給ライン１２４を介して電源制御部１２２に電力供給する。このとき電源装置１２３は、少容量の電源回路を使用し、省電力状態で使用する電力容量（例えば、３０ワット）を供給できる。また、ＣＰＵ１０６は、電力供給ライン１２５と電力供給ライン１２８が電力供給無効、かつ、電力供給ライン１２６が電力供給有効となるように電源制御部１２２を制御する。このとき、省電力状態で使用を想定しない機能を備える回路要素１４０や回路要素１４２に対する電力供給は遮断され、その分、通常状態よりもメインコントローラ１０１の消費電力を低減できる。他方、省電力状態においても電力供給ライン１２６は電力供給が有効であり、回路要素１４１を構成する各要素は通常状態と同様に動作できる。
【００２０】
なお、ここでは電力制御に関する２つの動作状態を例に挙げて説明するが、これに限定するものではなく、更に詳細な電力状態を備えていてもよい。本願発明と電力制御に関する具体的な実施形態については、第三の実施形態にて説明する。
【００２１】
次に、図２および図３を用いて、拡張処理部１０５の構成例について説明する。拡張処理部１０５は、ホストＩＦ２０１、ＦＰＧＡ２０２、ＲＡＭ２０３、ＣＰＵ２０４、ＲＡＭ２０５、および、システムバス２０６を含んで構成される。
【００２２】
ＦＰＧＡ２０２は、回路構成情報に応じて論理回路を変更（再構成）できる再構成可能な集積回路（プログラマブル回路部）であり、本実施形態ではＦＰＧＡを例に挙げて説明する。回路構成情報については後述する。ＦＰＧＡ２０２は、内部にホストＩＦ２０１と接続するためのホストＩＦ３０４や、ＲＡＭ２０３と接続するメモリコントローラ３０５、ＣＰＵ２０４と接続するための外部ＩＦ３０６、および再構成できる論理回路領域となる機能部３０２を備える。また、ＦＰＧＡ２０２は、電源起動時に、ＲＯＭ（不図示）からＦＰＧＡ２０２の各ＩＦ（ホストＩＦ３０４、メモリコントローラ３０５、外部ＩＦ３０６）となる固定回路部の設定情報を読み出す。ＦＰＧＡ２０２は、読み出した設定情報に基づいて、各ＩＦの固定回路部の設定が行われることにより、各ＩＦとの通信が可能な状態になる。
【００２３】
ＲＡＭ２０３は、ＦＰＧＡ２０２が動作時に使用される主記憶メモリであり、画像データ等の中間処理データを一時的に保持するために使用される。ＣＰＵ２０４は、ホストＩＦ２０１、ＦＰＧＡ２０２、および、ＲＡＭ２０５と接続され、ＦＰＧＡ２０２の制御やソフトウェアによる画像処理を行う。ＲＡＭ２０５は、ＣＰＵ２０４の主記憶部として作業領域を提供するための随時読み書き可能なメモリであり、内部処理する画像データを一時記憶するための画像メモリとしても使用される。システムバス２０６は、ホストＩＦ２０１、ＦＰＧＡ２０２、および、ＣＰＵ２０４を接続するためのバスである。
【００２４】
拡張処理部１０５をメインコントローラ１０１に接続することにより、画像形成装置１００は、ＦＰＧＡ２０２やＣＰＵ２０４を使用した画像処理機能を拡張処理として実行できる。拡張処理部１０５を用いた拡張処理の制御については後述する。
【００２５】
図３を用いて、回路構成情報に基づきＦＰＧＡ２０２に構成する論理機能を説明する。機能部３０２は、回路構成情報に基づいて、画像処理回路が構成される処理部である。ホストＩＦ３０４は、ホストＩＦ２０１を介して、メインコントローラ１０１の拡張ＩＦ１２９と接続される。例えば、ホストＩＦ３０４は、ＰＣＩエクスプレスで構成されるインタフェースであり、ＣＰＵ１０６とＦＰＧＡ２０２との通信を媒介する。メモリコントローラ３０５は、ＲＡＭ２０３と接続するインタフェースであり機能部３０２やホストＩＦ３０４を介して受信するデータ書き込み要求や、データ読み出し要求に基づくメモリ制御を行う。外部ＩＦ３０６は、ＣＰＵ２０４と接続するインタフェースであり、ＣＰＵ２０４とのデータの送受信を行う。
【００２６】
本実施形態において、ホストＩＦ３０４、メモリコントローラ３０５、および、外部ＩＦ３０６は、ハードマクロで構成される固定的な回路とする。機能部３０２、ホストＩＦ３０４、メモリコントローラ３０５、および、外部ＩＦ３０６は、システムバス３０１を介して接続される。
【００２７】
次に、図４を用いて、回路構成情報の詳細について説明する。回路構成情報は、ＨＤＤ１２１の回路構成情報の格納領域４００に、機能それぞれに対応した複数の回路構成情報が保持されている。これらの回路構成情報は、ＣＰＵ１０６によりＨＤＤ１２１から読みだされ、拡張ＩＦ１２９を介してＦＰＧＡ２０２に転送され、ＦＰＧＡ２０２の再構成が行われるものとする。
【００２８】
回路構成情報とは、システムバス３０１、機能部３０２の回路情報であり、この回路情報に基づいてＦＰＧＡ２０２が再構成される。機能部３０２に構成される回路の機能の種類に応じて、回路構成情報は複数用意される。本実施形態では、回路構成情報Ａ４０１、回路構成情報Ｂ４０２、回路構成情報Ｃ４０３の３つを含んで用意されており、それぞれ異なる画像処理を実行可能となる回路の情報である。例えば、ここでの回路構成情報にてＦＰＧＡ２０２が再構成されることで実行可能となる画像処理は、解像度変換処理、色空間処理、画像加工処理などが挙げられる。本実施形態では、回路構成情報Ａは処理Ａに対応した回路構成情報である。同様に、回路構成情報Ｂは処理Ｂに対応し、回路構成情報Ｃは処理Ｃに対応するものとする。
【００２９】
次に、本実施形態に係る画像形成装置１００において、拡張処理部１０５を使用した典型的な動作を行うコピージョブについて説明する。ＣＰＵ１０６は、操作部１０２を介して、ユーザによってコピージョブの実行指示を検知する。コピージョブは、拡張処理部１０５により提供される拡張処理（典型的には画像処理）を使用する設定がされているものとする。コピージョブの実行を指示された場合、ＣＰＵ１０６は、デバイスＩＦ１１６を介して、スキャナ１０３に原稿の読み取りを指示する。スキャナ１０３は読み取った画像データを、デバイスＩＦ１１６を介して、スキャナ画像処理部１１７へ送信する。スキャナ画像処理部１１７は、受信した画像データに各種スキャン用画像処理を行い、画像処理後の画像データをＲＡＭ１０７へ送信する。次に、ＣＰＵ１０６は、ＲＡＭ１０７に格納された画像データを、後述する処理フローに基づいて決定された処理形態に応じた処理部に送信する。画像データを受信した処理部は、拡張処理を行い、その処理結果をＲＡＭ１０７へ送信する。本実施形態において、処理形態に応じて処理を行う処理部は、拡張処理部１０５（ＦＰＧＡ２０２、ＣＰＵ２０４）、ＣＰＵ１０６のいずれかである。次に、ＣＰＵ１０６は、拡張画像処理後の画像データをＲＡＭ１０７からプリンタ画像処理部１１８へ送信する。プリンタ画像処理部１１８は受信した画像データに各種プリントに関する画像処理を行い、プリンタ１０４へ送信する。プリンタ１０４は受信した画像データを紙等の記憶媒体に印刷する。
【００３０】
次に、上述したコピー等のジョブを例に挙げて、本願発明の特徴となる拡張処理部１０５を使用した画像処理を行う際の拡張処理制御フローについて説明する。拡張処理制御フローを、図９のフローチャートに基づいて説明する。この処理は全てＣＰＵ１０６により実行され、図１７に示される各種ソフトウェアによって実装される。ここでは、１７０１〜１７０３の３つのソフトウェアが該当し、これら３つのソフトウェアは並列的に動作可能である。ソフトウェア１７０１は、拡張処理要求受信処理部として機能し、図９に示すＳ９００の処理を行う。ソフトウェア１７０２は、拡張処理メイン制御部として機能し、図９に示すＳ９０１〜Ｓ９０６の処理を行う。ソフトウェア１７０３は、拡張処理終了処理部として機能し、図９に示すＳ９０７の処理を行う。これらのソフトウェアは、画像形成装置１００の電源起動時に動作を開始する。なお、上述した構成は、本実施形態での一例であって、これに限定するものではない。例えば、各処理部は１つのソフトウェアにより実装されてもよい。
【００３１】
また、本実施形態では、ユーザにより指定されたコピー等の処理において、拡張処理部１０５による処理が必要か否かは、ＣＰＵ１０６で行われる処理（不図示）により判定される。拡張処理部１０５での処理が必要であると判定された場合、拡張処理部１０５への拡張処理要求が、ＣＰＵ１０６で動作する別のソフトウェア（不図示）に対するＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）通信により発行されるものとする。
【００３２】
Ｓ９００にて、ＣＰＵ１０６は、拡張処理要求受信処理を行う。拡張処理要求受信処理について、図１０を用いて説明する。
【００３３】
Ｓ１０００にて、ＣＰＵ１０６は、上述した拡張処理要求を受信したか否かを判定する。上述したように、本実施形態では、拡張処理要求はＨＴＴＰ通信により発行される。したがって、拡張処理要求を受信したか否かの検知を、所定のポートを監視することで実現できる。ただし、拡張処理要求の通信方式に関しては一例であり、これに限定するものではない。また、拡張処理要求を受信したか否かの検知方法についても上記に限定するものではない。拡張処理要求を受信したと判定された場合（Ｓ１０００にてＹＥＳ）、Ｓ１００１の処理へ進み、拡張処理要求を受信していないと判定された場合（Ｓ１０００にてＮＯ）、拡張処理要求が受信されるまで待機する。
【００３４】
Ｓ１００１にて、ＣＰＵ１０６は、受信した拡張処理要求にて要求された処理の情報を拡張処理キュー５００へ登録する。拡張処理キュー５００とは、図５に示すように、要求された処理を管理するためのキューである。要求された処理は、拡張処理要求を受信した時間順に登録される。例えば、図５では、処理Ａ、処理Ｂ、処理Ｃの順に要求を受信した結果、拡張処理キュー５００にその順でエントリーＮｏと共に登録されている。なお、拡張処理キュー５００は、ＣＰＵ１０６によってＲＡＭ１０７に形成されるものとする。
【００３５】
上述したように、拡張処理要求受信処理（Ｓ９００）はＣＰＵ１０６で他のソフトウェア処理と並列で動作可能な形態となるソフトウェア１７０１として実装され、画像形成装置１００の電源起動時に動作開始するものである。ただし、この構成は本実施形態における一例であって、これに限定するものではない。
【００３６】
次に、Ｓ９０１にて、ＣＰＵ１０６は、拡張処理要求選択処理を行う。拡張処理要求選択処理について、図１１を用いて説明する。
【００３７】
Ｓ１１００にて、ＣＰＵ１０６は、拡張処理キュー５００を参照し、拡張処理キュー５００に登録された処理があるか否かを判定する。登録された処理があると判定された場合（Ｓ１１００にてＹＥＳ）、Ｓ１１０１の処理へ進み、登録された処理がないと判定された場合（Ｓ１１００にてＮＯ）、処理が登録されるまで待機する。例えば、拡張処理キュー５００が図５に示した状態である場合には、１以上の処理が登録されているため、ＣＰＵ１０６は登録された処理があると判定する。
【００３８】
Ｓ１１０１にて、ＣＰＵ１０６は、拡張処理キュー５００に登録された処理のうち先頭処理（エントリーＮｏが“１”の処理）を処理対象として決定する。処理対象に決定された処理が、拡張処理部１０５を使用する処理として実行される。例えば、拡張処理キュー５００が図５に示した状態である場合には、処理Ａが処理対象として決定される。以降、本処理により決定された処理対象の情報はソフトウェア（具体的には、拡張処理メイン制御部として機能するソフトウェア１７０２）により管理される。
【００３９】
Ｓ１１０２にて、ＣＰＵ１０６は、Ｓ１１０１にて決定された処理対象を拡張処理キュー５００から削除する。この削除では、拡張処理キュー５００に登録された処理のうち、先頭の処理（エントリーＮｏが“１”の処理）が削除され、先頭の処理の削除に伴ってエントリーＮｏが“２”以降の処理が繰り上がる。例えば、拡張処理キュー５００が図５に示した状態である場合、エントリーＮｏが“１”である処理Ａが削除され、処理ＢのエントリーＮｏが“１”となり、処理ＣのエントリーＮｏが“２”へと繰り上がる。
【００４０】
次に、Ｓ９０２にて、ＣＰＵ１０６は、処理形態選択処理を行う。処理形態選択処理について、図１２を用いて説明する。
【００４１】
Ｓ１２００にて、ＣＰＵ１０６は、処理対象となっている拡張処理の処理内容を取得する。処理対象として決定された処理内容は上述したようにソフトウェアで管理されている。したがって、ＣＰＵ１０６は、ソフトウェアにより管理されている処理対象の情報を取得する。例えば、上記のＳ１１０１の説明に基づくと、処理対象として処理Ａが決定されており、処理内容として処理Ａが取得される。
【００４２】
Ｓ１２０１にて、ＣＰＵ１０６は、処理内容に対応する処理形態管理テーブルを決定する。処理形態管理テーブルとは、図８に示される処理内容毎に定義されるテーブルであって、処理を実行するための処理形態や、各処理形態の優先度といった要素を含んで構成される。ここでの処理形態とは、処理を行うために必要な処理部の構成（組み合わせ）であって、本実施形態では、図７の処理形態テーブル７００に示すように、処理内容に応じて最大４つの処理形態が存在する。この処理形態テーブル７００は、ＨＤＤ１２１に予め記憶されている。図７に示す例の場合、処理形態Ａは、ＦＰＧＡ２０２とＣＰＵ１０６の２つの処理部を用いる処理形態である。処理形態Ｂは、ＦＰＧＡ２０２とＣＰＵ２０４の２つの処理部を用いる処理形態である。処理形態Ｃは、処理部としてＣＰＵ１０６のみを用いる処理形態である。処理形態Ｄは、処理部としてＣＰＵ２０４のみを用いる処理形態である。ただし、どの処理形態で処理が可能かは処理内容によって異なる。また、優先度とは、処理形態を選択する際の優先度であって、高い順に１〜４が指定される。処理形態と優先度については後述するフローの中で参照される。また、処理形態は拡張処理の処理内容に応じて少なくとも１つ以上存在するものとする。なお、ここでは４つの処理形態を例にとって説明するが、拡張処理部１０５の構成に応じてさらに多くの処理形態が実現可能であってもよい。その場合には、拡張処理部１０５内の構成の組み合わせに応じて処理内容を対応付けることが可能である。
【００４３】
図８（ａ）は、処理Ａに対応する処理形態管理テーブル８００である。この処理形態管理テーブル８００は、予めＨＤＤ１２１に記憶されている。処理Ａを実行可能な処理形態として４つの処理形態が存在する。処理形態管理テーブル８００において、優先度１の処理形態として処理形態Ａ、優先度２の処理形態として処理形態Ｂ、優先度３の処理形態として処理形態Ｃ、および優先度４の処理形態として処理形態Ｄが定義されている。図８（ｂ）は、処理Ｂに対応する処理形態管理テーブル８０１である。処理Ｂを実行可能な処理形態として２つの処理形態が存在する。処理形態管理テーブル８０１において、優先度１の処理形態として処理形態Ｂ、優先度２の処理形態として処理形態Ｄが定義されている。図８（ｃ）は、処理Ｃに対応する処理形態管理テーブル８０２である。処理Ｃを実行可能な処理形態として２つの処理形態が存在する。処理形態管理テーブル８０２において、優先度１の処理形態として処理形態Ａ、優先度２の処理形態として処理形態Ｂが定義されている。図７に示す処理形態テーブルと、図８に示す処理形態テーブルにより、処理および画像形成装置の状態に応じて利用可能な処理形態の定義情報が構成される。
【００４４】
例えば、Ｓ１２０１にて、取得された処理内容が処理Ａである場合、処理形態管理テーブルとして、図８（ａ）の処理形態管理テーブル８００が決定され、以降の処理で参照される。
【００４５】
Ｓ１２０２にて、ＣＰＵ１０６は、変数であるパラメータＮを“０”にて初期化する。パラメータＮは、使用可能な処理形態を判定するための一連の処理により使用され、優先度を表す。
【００４６】
Ｓ１２０３にて、ＣＰＵ１０６は、拡張処理で使用可能な処理部の空き状況（使用状況）の情報を取得する。この処理について詳細に説明する。ＣＰＵ１０６は、電源起動時等に、図６に示す処理部空き状況管理テーブル６００をＲＡＭ１０７上に作成しておく。処理部空き状況管理テーブル６００は、拡張処理の処理部として使用可能な処理部と、各処理部の空き状況といった要素により構成される。このテーブル６００は、各処理部リソースの空き状況が変化すると、ＣＰＵ１０６によって逐次、更新される。ＣＰＵ１０６は、処理部空き状況管理テーブル６００を参照することにより、各処理部の空き状況を取得することができる。また、ＣＰＵ１０６は、後述する処理により、各処理部の空き状況を監視し、処理部空き状況管理テーブル６００を更新することでその状況を管理する。本実施形態では、拡張処理の処理部として使用可能な処理部は、ＦＰＧＡ２０２、ＣＰＵ１０６、および、ＣＰＵ２０４である。例えば、図６に示された処理部空き状況管理テーブル６００では、ＦＰＧＡ２０２、ＣＰＵ１０６、およびＣＰＵ２０４は未使用であり、したがって、全ての処理部が空き状態であり使用可能な状態である。なお、拡張処理部１０５を構成する処理部に応じて、処理部空き状況管理テーブル６００が管理する処理部も増減する。
【００４７】
Ｓ１２０４にて、ＣＰＵ１０６は、パラメータＮをインクリメントする。パラメータＮの値が“０”の場合には、インクリメント、つまり「＋１」の演算が行われ、パラメータＮの値は“１”となる。
【００４８】
Ｓ１２０５にて、ＣＰＵ１０６は、Ｓ１２０１にて決定された処理形態管理テーブルに含まれる処理形態のうち、優先度の値がパラメータＮの値と同じ処理形態が存在するか否かを判定する。例えば、処理形態管理テーブルとして処理Ａの処理形態管理テーブル８００（図８（ａ））に決定されている場合、優先度１〜４の処理形態が存在する。そのため、パラメータＮの値が１〜４の範囲であれば、処理形態が存在すると判定される。同様に処理Ｂであれば、処理形態管理テーブル８０１（図８（ｂ））において優先度１〜２の処理形態が存在する。そのため、パラメータＮの値が１〜２の範囲であれば処理形態が存在すると判定される。また、処理Ｃであれば、処理形態管理テーブル８０２（図８（ｃ））において優先度１〜２の処理形態が存在する。そのため、パラメータＮの値が１〜２の範囲であれば処理形態は存在すると判定される。なお、いずれの処理内容であっても、処理形態は必ず１つ以上存在するので、パラメータＮの値が“１”の場合には、必ず処理形態は存在すると判定される。処理形態が存在すると判定された場合（Ｓ１２０５にてＹＥＳ）、Ｓ１２０６の処理へ進み、処理形態が存在しないと判定された場合（Ｓ１２０５にてＮＯ）、Ｓ１２０２の処理へ戻る。
【００４９】
Ｓ１２０６にて、ＣＰＵ１０６は、パラメータＮの値と一致する優先度を有する処理形態に必要な処理部が使用可能であるか否かを判定する。この処理は、処理形態管理テーブルと処理部空き状況管理テーブル６００を参照することにより行われる。例えば、処理Ａの優先度１の処理形態の場合では、処理形態は処理形態Ａとなり、必要な処理部はＦＰＧＡ２０２とＣＰＵ１０６である。この２つの処理部（ＦＰＧＡ２０２とＣＰＵ１０６）が空き状態であるか否かを、Ｓ１２０３にて処理部空き状況管理テーブル６００から取得した空き状況と照らし合わせることにより、ＣＰＵ１０６は判定を行う。このようにして、ＣＰＵ１０６は、処理に必要な処理部が使用可能であるか否かを判定する。パラメータＮの値に一致する優先度を有する処理形態に必要な処理部が使用可能であると判定された場合（Ｓ１２０６にてＹＥＳ）、Ｓ１２０７の処理へ進み、使用可能でないと判定された場合（Ｓ１２０６にてＮＯ）、Ｓ１２０４の処理へ戻る。
【００５０】
Ｓ１２０７にて、ＣＰＵ１０６は、拡張処理を行うための処理形態として、パラメータＮの値と一致する優先度の処理形態を決定する。決定された処理形態に関する情報は、Ｓ１１０１によって作成された処理対象の情報に加えて、更に処理形態も合わせて管理される。例えば、処理内容が「処理Ａ」、パラメータＮが“１”である場合、処理形態として「処理形態Ａ」が決定される。必要な処理部が使用可能であれば、処理対象の情報として「処理Ａ」に加え、「処理形態Ａ」といった情報が管理されることになる。以降の処理において、作成した処理対象の情報が参照されることになる。
【００５１】
Ｓ１２０８にて、ＣＰＵ１０６は、処理部空き状況管理テーブル６００に対して、決定した処理形態に必要な処理部のパラメータを「使用中」に更新する。例えば、処理形態が「処理形態Ａ」に決定された場合、ＦＰＧＡ２０２とＣＰＵ１０６を使用するので、処理部空き状況管理テーブル６００に対して、この２つの処理部のパラメータを「未使用」状態から「使用中」状態へ変更する。この処理によって、後から受信した拡張処理要求との処理部の競合を回避することができる。
【００５２】
次に、Ｓ９０３にて、ＣＰＵ１０６は、対象処理の情報として管理された処理形態の情報を参照して、選択された処理形態がＦＰＧＡ２０２を使用する処理形態であるか否かを判定する。例えば、選択された処理形態が「処理形態Ａ」である場合には、ＦＰＧＡ２０２とＣＰＵ１０６の処理部を使用するので、ＦＰＧＡ２０２を使用する処理形態であると判定される。一方で、選択された処理形態が「処理形態Ｄ」である場合には、ＣＰＵ２０４の処理部のみを使用するので、ＦＰＧＡ２０２を使用する処理形態とはないと判定される。ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ９０３にてＹＥＳ）、Ｓ９０４の処理へ進み、ＦＰＧＡ２０２を使用する処理形態ではないと判定された場合（Ｓ９０３にてＮＯ）、Ｓ９０６の処理へ進む。
【００５３】
Ｓ９０４にて、ＣＰＵ１０６は、ＦＰＧＡ２０２の再構成要求の発行を行う。再構成要求の発行では、ＦＰＧＡ２０２の再構成処理を行う、ＣＰＵ１０６で動作するソフトウェア１７０４に対して、ＨＴＴＰ通信により、再構成要求を表すメッセージと処理対象となっている処理内容の情報が送信される。処理内容の情報は、ＦＰＧＡ２０２に対して再構成すべき回路構成情報の決定のために使用される。
【００５４】
ここで、ＦＰＧＡ２０２の再構成処理について、図１３を用いて説明する。なお、図１３に示されるＦＰＧＡ２０２の再構成処理の処理主体は、ＣＰＵ１０６で動作し、ＨＴＴＰ通信を介して再構成の要求を受信するソフトウェア１７０４である。ソフトウェア１７０４は、メインの制御フロー（図９）から独立したものであり、並列的に動作可能な形態で実装される。また、図１３の処理フローは、画像形成装置１００の電源起動時に動作が開始される。
【００５５】
Ｓ１３００にて、ＣＰＵ１０６は、ＦＰＧＡ２０２の再構成の要求を、ＨＴＴＰ通信により受信したか否かを判定する。再構成の要求の受信時には、再構成要求を表すメッセージと対象処理の処理内容の情報が受信される。受信した処理内容の情報は、Ｓ１３０１にて参照される。再構成の要求を受信したと判定された場合（Ｓ１３００にてＹＥＳ）、Ｓ１３０１の処理へ遷移し、再構成の要求を受信していないと判定された場合（Ｓ１３００）、再構成の要求が受信されるまで待機する。
【００５６】
Ｓ１３０１にて、ＣＰＵ１０６は、ＦＰＧＡ２０２に対して、再構成すべき回路構成情報の決定を行う。本処理は、受信した処理内容の情報に基づいて、対応する回路構成情報を決定する処理である。本実施形態では、上述したように、回路構成情報Ａは処理Ａ、回路構成情報Ｂは処理Ｂ、回路構成情報Ｃは処理Ｃに対応する。従って、受信した処理内容の情報が処理Ａである場合、回路構成情報Ａが、ＦＰＧＡ２０２に対して再構成すべき回路構成情報として決定される。
【００５７】
Ｓ１３０２にて、ＣＰＵ１０６は、Ｓ１３０１で決定した回路構成情報を使用して、ＦＰＧＡ２０２の再構成を実行する。本処理は、ＣＰＵ１０６がＨＤＤ１２１に格納された回路構成情報を、拡張ＩＦ１２９を介して、ＦＰＧＡ２０２内の所定の記憶領域（不図示）へロードすることにより行われる。本処理によって、ＦＰＧＡ２０２は処理内容に対応した所望の回路構成へ再構成される。
【００５８】
Ｓ１３０３にて、ＣＰＵ１０６は、ＦＰＧＡ２０２の再構成の要求元へ、ＦＰＧＡ２０２の再構成の完了を通知する。完了の通知は、ＨＴＴＰ通信にて行われる。この通知では、完了を表すメッセージが送信される。
【００５９】
次に、Ｓ９０５にて、ＣＰＵ１０６は、ＦＰＧＡ２０２の再構成が完了したか否かを判定する。図１３を用いて説明したように、ＦＰＧＡ２０２の再構成処理は、ＨＴＴＰ通信により再構成の要求と完了の通知が行われる。したがって、完了が通知されたか否かは、再構成の要求に対する完了の通知を表すメッセージを受信したか否かにより判定することができる。再構成が完了したと判定された場合（Ｓ９０５にてＹＥＳ）、Ｓ９０６の処理へ進み、再構成が完了していないと判定された場合（Ｓ９０５）、完了の通知を受信するまで待機する。
【００６０】
Ｓ９０６にて、ＣＰＵ１０６は、Ｓ９０２によって選択された処理形態の処理部となるＣＰＵ（ＣＰＵ１０６又はＣＰＵ２０４）に対して、ＨＴＴＰ通信により、画像処理要求の発行を行う。画像処理要求の発行では、画像処理制御を行う、ＣＰＵ１０６またはＣＰＵ２０４で動作するソフトウェア１７０５に対して、画像処理要求を表すメッセージ、処理対象の処理内容と処理形態の情報、および、画像データが送信される。また、選択された処理形態に応じて、画像処理要求の発行先が変わるが、発行先の変更は、例えば、アクセスするＩＰアドレスやポート番号を変更することで実現される。
【００６１】
各ＣＰＵで行われる画像処理制御について、図１５、図１６のフローチャートに基づいて説明する。なお、図１５に示される画像処理制御の処理主体は、ＣＰＵ１０６で動作し、ＨＴＴＰ通信を介して、画像処理要求を受信するソフトウェア１７０５である。また、図１６に示される画像処理制御の処理主体は、ＣＰＵ２０４で動作し、ＨＴＴＰ通信を介して、画像処理要求を受信するソフトウェア１７０６である。これらのソフトウェアはメインの制御フロー（図９）から独立したものであり、並列的に動作可能な形態で実装される。また、図１５、図１６の処理フローは、画像形成装置１００の電源起動時に動作が開始される。
【００６２】
まず、ＣＰＵ１０６で処理が行われる、図１５のフローチャートについて説明する。
【００６３】
Ｓ１５００にて、ＣＰＵ１０６は、画像処理要求を受信したか否かを判定する。本実施形態では、ＨＴＴＰ通信により画像処理要求の受信がされたか否かを判定する。画像処理要求において、画像処理要求を表すメッセージ、対象処理の処理内容と処理形態の情報、および、画像データが同時に受信される。画像処理要求を受信したと判定された場合（Ｓ１５００にてＹＥＳ）、Ｓ１５０１の処理へ進み、画像処理要求を受信していないと判定された場合（Ｓ１５００にてＮＯ）、画像処理要求を受信するまで待機する。
【００６４】
Ｓ１５０１にて、ＣＰＵ１０６は、ＦＰＧＡ２０２を使用して処理を行うか否かを判定する。本処理は、Ｓ１５００にて受信した画像処理要求に含まれる対象処理の処理形態の情報を参照することにより行われる。例えば、処理形態Ａという情報を受信した場合には、ＦＰＧＡ２０２とＣＰＵ１０６が処理部として使用されることがわかり、ＦＰＧＡ２０２は使用されると判定される。ＦＰＧＡ２０２を使用すると判定された場合には（Ｓ１５０１にてＹＥＳ）、Ｓ１５０２の処理へ進み、ＦＰＧＡ２０２を使用しないと判定された場合には（Ｓ１５０１にてＮＯ）、Ｓ１５０３の処理へ進む。
【００６５】
Ｓ１５０２にて、ＣＰＵ１０６は、ＦＰＧＡ２０２を使用して画像処理を実行する。本処理が行われる前に、Ｓ１３０２にてＦＰＧＡ２０２は処理内容に応じた所望の回路構成に再構成されている。したがって、本処理では、まず、ＣＰＵ１０６は、Ｓ１５００で受信した画像データを、拡張ＩＦ１２９を経由して、ＦＰＧＡ２０２に接続されるＲＡＭ２０３に対して転送を行う。次に、ＣＰＵ１０６は、ＦＰＧＡ２０２に構成された回路に対する設定を行うことで、画像処理を行わせる。最後に、ＣＰＵ１０６は、画像処理後の画像データをＲＡＭ２０３から取得する。以上、本処理により、ＣＰＵ１０６は、ＦＰＧＡ２０２を使用した画像処理を実行する。その後、Ｓ１５０４の処理へ進む。
【００６６】
Ｓ１５０３にて、ＣＰＵ１０６は、自身により画像処理を実行する。本処理は、Ｓ１５００で受信した画像データに対して、ＣＰＵ１０６によって行われるソフトウェア画像処理である。その後、Ｓ１５０４の処理へ進む。
【００６７】
Ｓ１５０４にて、ＣＰＵ１０６は、画像処理要求元に対して、ＨＴＴＰ通信により、処理結果を通知する。処理結果の通知では、画像処理要求の結果を表すメッセージ（正常終了、エラー終了など）と画像処理後の画像データとが送信される。その後、本処理フローを終了する。
【００６８】
次に、ＣＰＵ２０４で処理が行われる、図１６のフローチャートについて説明する。なお、本フローチャートは、図１５のフローチャートと基本的に同様の処理である。ただし、処理を行う主体であるＣＰＵは、ＣＰＵ１０６からＣＰＵ２０４へ変更されている。
【００６９】
Ｓ１６００にて、ＣＰＵ２０４は、画像処理要求を受信したか否かを判定する。本実施形態では、ＨＴＴＰ通信により画像処理要求の受信がされたか否かを判定する。画像処理要求において、画像処理要求を表すメッセージ、対象処理の処理内容と処理形態の情報、および、画像データが同時に受信される。画像処理の要求を受信したと判定された場合（Ｓ１６００にてＹＥＳ）、Ｓ１６０１の処理へ進み、画像処理の要求を受信していないと判定された場合（Ｓ１６００にてＮＯ）、画像処理要求を受信するまで待機する。なお、上記のメッセージ、対象処理の処理内容と処理形態の情報、および、画像データを併せてジョブと呼ぶことがある。すなわち、ＣＰＵ２０４は、ジョブを受信したかどうかを判定し、ジョブが受信されたと判定された場合に処理を次のＳ１６０１へ進め、そうでない場合にはジョブを受信するまで待機する。
【００７０】
Ｓ１６０１にて、ＣＰＵ２０４は、ＦＰＧＡ２０２を使用して処理を行うか否かを判定する。本処理は、Ｓ１６００にて受信した画像処理要求に含まれる対象処理の処理形態の情報を参照することにより行われる。例えば、処理形態Ｂという情報を受信した場合には、ＦＰＧＡ２０２とＣＰＵ２０４が処理部として使用されるということがわかり、ＦＰＧＡ２０２は使用されると判定される。ＦＰＧＡ２０２を使用すると判定された場合には（Ｓ１６０１にてＹＥＳ）、Ｓ１６０２の処理へ進み、ＦＰＧＡ２０２を使用しないと判定された場合には（Ｓ１６０１にてＮＯ）、Ｓ１６０３の処理へ進む。
【００７１】
Ｓ１６０２にて、ＣＰＵ２０４は、ＦＰＧＡ２０２を使用して画像処理を実行する。本処理が行われる前に、Ｓ１３０２においてＦＰＧＡ２０２は処理内容に応じた所望の回路構成に再構成されている。したがって、本処理では、まず、ＣＰＵ２０４は、Ｓ１６００で受信した画像データを、外部ＩＦ３０６を経由して、ＦＰＧＡ２０２に接続されるＲＡＭ２０３に対して転送を行う。次に、ＣＰＵ２０４は、ＦＰＧＡ２０２に構成された回路に対する設定を行うことで、画像処理を行わせる。最後に、ＣＰＵ２０４は、画像処理後の画像データをＲＡＭ２０３から取得する。以上、本処理により、ＣＰＵ２０４は、ＦＰＧＡ２０２を使用した画像処理を実行する。その後、Ｓ１６０４の処理へ進む。
【００７２】
Ｓ１６０３にて、ＣＰＵ２０４は、自身により画像処理を実行する。本処理は、Ｓ１６００で受信した画像データに対して、ＣＰＵ２０４によって行われるソフトウェア画像処理である。その後、Ｓ１６０４の処理へ進む。
【００７３】
Ｓ１６０４にて、ＣＰＵ２０４は、画像処理要求元に対して、ＨＴＴＰ通信により、処理結果を通知する。処理結果の通知では、画像処理要求の結果を表すメッセージ（正常終了、エラー終了など）と画像処理後の画像データとが送信される。その後、本処理フローを終了する。
【００７４】
次に、Ｓ９０７にて、ＣＰＵ１０６は、拡張処理の終了処理を行う。終了処理について、図１４を用いて説明する。
【００７５】
Ｓ１４００にて、ＣＰＵ１０６は、選択された処理形態での処理が完了したか否かを判定する。図１５のＳ１５０４、または、図１６のＳ１６０４において、画像処理要求の結果を表すメッセージと画像処理後の画像データとを含む処理結果が、ＨＴＴＰ通信により送信される。本工程では、この処理結果を受信したか否かにより判定を行う。処理結果を受信したと判定された場合（Ｓ１４００にてＹＥＳ）、Ｓ１４０１の処理へ進み、処理結果を受信していないと判定された場合（Ｓ１４００にてＮＯ）、処理結果を受信するまで待機する。
【００７６】
Ｓ１４０１にて、ＣＰＵ１０６は、処理部空き状況管理テーブル６００に対して、処理が完了した処理形態で使用していた処理部のステータスを「未使用」に変更する。例えば、処理形態Ａで行われていた処理が完了した場合には、ＦＰＧＡ２０２とＣＰＵ１０６を使用していたことになるため、処理部空き状況管理テーブル６００のＦＰＧＡ２０２とＣＰＵ１０６の空き状況を「使用中」から「未使用」へ変更する。この処理によって、他の拡張処理でこれら２つの処理部の使用が可能となる。
【００７７】
Ｓ１４０２にて、ＣＰＵ１０６は、完了した拡張処理の処理結果を、ＨＴＴＰ通信により、拡張処理要求元へ通知する。処理結果の通知では、拡張処理の結果を表すメッセージ（正常終了、エラー終了など）と拡張処理後の画像データとが送信される。この送信をもって、要求された拡張処理が完了になる。その後、本処理フローを終了する。
【００７８】
以上、本実施形態では要求された拡張処理を行うために、複数存在する処理形態の中から、その優先度と処理形態に必要な処理部の空き状況を参照するによって処理形態の決定を行う。これによって、適切なパフォーマンスで拡張処理を実施することが可能となる。
【００７９】
＜第二の実施形態＞
第一の実施形態においては、拡張処理キュー５００で同時に複数の処理を受信した場合、受信順に拡張処理部１０５で処理を行っている。ところで、拡張処理部１０５で行う処理は、画像形成装置１００が受信したプリントやスキャン等の処理（以下、「ジョブ」）を実現するために行う複数処理の一部である。例えば、拡張処理部１０５で行う処理を含むプリントジョブでは、拡張処理部１０５で処理を行った後、更にプリンタ画像処理部１１８で処理を行い、その後、プリンタ１０４でプリント出力処理を行う。このとき、プリンタ１０４が備える紙出力部（不図示）は１つであるため、プリンタ画像処理部１１８およびプリンタ１０４が行う後続の処理（以下、「後段処理」）として、１つのプリントジョブだけを一度に実行できる。
【００８０】
このような場合において、各ジョブの進捗状況に応じて複数の処理の要求を受信し、その受信順で順次、拡張処理キュー５００に登録を行ったとする。それら複数の処理の後段処理が異なる場合、先に拡張処理部１０５で行う処理を含むジョブが後段処理で待たされる間に、後に拡張処理部１０５で行う処理を含むジョブが先に終了する場合がある。特に、拡張処理部１０５でＦＰＧＡ２０２のみを使用する処理同士が競合した場合は、後の処理にとって、先の処理によるＦＰＧＡ２０２の使用終了までの待ち時間が無駄となる。
【００８１】
そこで、本実施形態では、拡張処理部１０５で実行する処理を含むジョブが、拡張処理部１０５の後段処理で他のジョブとの競合待ちが発生するか否かを判定し、競合待ちが発生しない処理に対して優先的に拡張処理を行うように制御する。
【００８２】
図１８は、本実施形態に係るジョブの処理状態を管理するジョブ処理状態テーブルの構成例を示す。ジョブ処理状態テーブルは、ホストコンピュータ（不図示）からのプリント指示や、操作部１０２を介して受け付けたコピーや、プッシュスキャンの処理設定に応じてＣＰＵ１０６がジョブ毎に生成する。ジョブ処理状態テーブルは、ジョブを構成する１つ以上の処理と、処理を実行する処理部と、処理を実行する順番を示す処理順と、各処理部の実行が終わったか否かを示す処理状態（処理の進捗状況）とを含む。ＣＰＵ１０６は、生成したジョブ処理状態テーブルに応じて処理順が“１”の処理から順にレジスタ設定等の前処理設定を行った後に処理開始を指示する。これに応じて、ＣＰＵ１０６は、対応する処理の状態を「未」から「処理中」に更新する。また、ＣＰＵ１０６は、各処理部から実行が開始された処理に対する終了割り込み（不図示）を受信することで、対応する処理の状態を「終了」に更新する。ここで示される処理を実行する主体となる部位は、各ＣＰＵや拡張処理部１０５に限定するものではなく、例えばスキャナ１０３やプリンタ１０４など画像形成装置１００を構成する各部位が含まれる。
【００８３】
本実施形態では、画像形成装置１００が「プリント１」、「プリント２」、および「プッシュスキャン１」の各ジョブをこの順で受信し、ＣＰＵ１０６が、それぞれに対応するジョブ処理状態テーブル１８００、１８１０、１８２０を生成する。このとき、ジョブ処理状態テーブル１８００、１８１０、１８２０は、ある時刻における状態を示すものとする。即ち、ある時刻において、プリント１はプリンタ画像処理部１１８により処理順４のプリント画像処理を「処理中」である。また、このとき、プリント２は処理順３のＲＩＰ処理まで終了している。また、このとき、プッシュスキャン１は処理順２のスキャン画像処理まで終了している。プリント２、および、プッシュスキャン１の各ジョブにおける次の処理は拡張処理部１０５を使用する処理であるため、次に、ＣＰＵ１０６は、この２つの拡張処理要求を拡張処理キュー５００に投入する。ここでは、プリント２のジョブに含まれるＲＩＰ処理（プリント２における処理順が３の処理）が、プッシュスキャン１のジョブに含まれるスキャン画像処理（プッシュスキャン１における処理順が２の処理）よりも先に終了したものとする。よって、ＣＰＵ１０６は、プリント２のジョブに含まれる拡張プリント処理の拡張処理要求を発行し、その後、プッシュスキャン１のジョブに含まれる拡張スキャン処理の拡張処理要求を出す。その結果、拡張処理キュー５００は、拡張プリント処理、拡張スキャン処理の順で処理要求を受信するものとする。
【００８４】
本実施形態における拡張処理制御フローは、ジョブ処理状態テーブルに基づき拡張処理キュー５００が受信した複数の処理から後段処理での競合が発生しない処理を選択して処理を実行することを特徴とする。
【００８５】
［処理フロー］
図１９に、本実施形態に係る拡張処理制御フローの拡張処理要求選択処理（図９のＳ９０１）の制御を示す。なお、本実施形態に係る拡張処理制御フローは、拡張処理要求選択処理（Ｓ９０１）以外の処理は、第一の実施形態にて述べた内容と同じである。また、画像形成装置１００が起動後にＣＰＵ１０６が拡張処理制御フローの全ての処理を開始する。
【００８６】
Ｓ１９００にて、ＣＰＵ１０６は、拡張処理キュー５００を参照し、拡張処理キュー５００に登録された処理があるか否かを判定する。登録された処理があると判定された場合（Ｓ１９００にてＹＥＳ）、Ｓ１９０１の処理へ進み、登録された処理がないと判定された場合（Ｓ１９００にてＮＯ）、処理が登録されるまで待機する。
【００８７】
Ｓ１９０１にて、ＣＰＵ１０６は、拡張処理キュー５００に登録された処理数が２以上か否かを判定する。本実施形態の例の場合、プリント２のジョブに含まれる拡張プリント処理と、プッシュスキャン１のジョブに含まれる拡張スキャン処理の２つの拡張処理要求が受信され、拡張処理キュー５００に登録されているものとする。この場合、Ｓ１９０１の判定結果はＹＥＳとなる。２つ以上の処理が登録されている場合（Ｓ１９０１にてＹＥＳ）、Ｓ１９０２の処理へ進み、登録されている処理が１以下である場合は（Ｓ１９０１にてＮＯ）Ｓ１９０７の処理へ進む。
【００８８】
Ｓ１９０２にて、ＣＰＵ１０６は、画像形成装置１００が受信した全ジョブのジョブ処理状態テーブルを取得する。本実施形態の例の場合、プリント１、プリント２、および、プッシュスキャン１それぞれに対応するジョブ処理状態テーブル１８００、１８１０、１８２０が取得される。
【００８９】
Ｓ１９０３にて、ＣＰＵ１０６は、Ｓ１９０２で取得したジョブ処理状態テーブルから拡張処理キュー５００に登録された処理の後段処理の状態を取得する。本実施形態では、まず、ＣＰＵ１０６は、拡張プリント処理を含むジョブ処理状態テーブル１８１０を参照して拡張プリント処理の後段処理が、プリンタ画像処理部１１８を用いた処理であることを特定する。そして、ＣＰＵ１０６は、他のジョブ処理状態テーブル１８００、１８２０を参照してプリンタ画像処理部１１８の状態（処理の実行状況）を取得する。同様に、ＣＰＵ１０６は、拡張スキャン処理を含むジョブ処理状態テーブル１８２０を参照して拡張スキャン処理の後段処理がＣＰＵ１０６を用いた処理であることを特定する。そして、ＣＰＵ１０６は、他のジョブ処理状態テーブル１８００、１８１０を参照してＣＰＵ１０６の状態（処理の実行状況）を取得する。
【００９０】
Ｓ１９０４にて、ＣＰＵ１０６は、拡張処理キュー５００に登録された処理のうち、後段処理が競合する処理があるか否かを、Ｓ１９０３で取得した状態に基づいて判定する。本実施形態の例の場合、拡張プリント処理の後段処理を行うプリンタ画像処理部１１８の状態はプリント１のジョブで「使用中」である。そのため、ジョブ２の後段処理と競合することとなり、Ｓ１９０４における判定結果はＹＥＳとなる。後段処理が競合する処理がある場合には（Ｓ１９０４にてＹＥＳ）、Ｓ１９０５の処理に進み、競合する処理がない場合には（Ｓ１９０４にてＮＯ）、Ｓ１９０７の処理に進む。
【００９１】
Ｓ１９０５にて、ＣＰＵ１０６は、拡張処理キュー５００に登録された処理で後段処理が競合しない処理があるか否かを、Ｓ１９０３で取得した状態に基づいて判定する。本実施形態の例の場合、拡張スキャン処理の後段処理を行うＣＰＵ１０６の状態は「使用中」ではないため、ＣＰＵ１０６を用いた後段処理については競合が生じない。そのため、Ｓ１９０５における判定結果はＮＯとなる。競合しない処理がある場合（Ｓ１９０５にてＹＥＳ）Ｓ１９０６の処理へ進み、競合しない処理がない場合（Ｓ１９０５にてＮＯ）Ｓ１９０７の処理へ進む。Ｓ１９０４、および、Ｓ１９０５の判定が共にＹＥＳの場合、拡張処理キュー５００には後段処理が競合する処理と競合しない処理とが存在することとなる。
【００９２】
Ｓ１９０６にて、ＣＰＵ１０６は、拡張処理キュー５００に登録されていて、後段処理が競合しない処理のうち、エントリーＮｏが最も小さい処理を処理対象として決定する。本実施形態の例の場合、プッシュスキャン１のジョブに含まれる拡張スキャン処理が、処理対象として決定される。その後、Ｓ１９０８の処理へ進む。
【００９３】
Ｓ１９０７にて、ＣＰＵ１０６は、拡張処理キュー５００の先頭に登録されている処理を拡張処理部１０５で実行する処理対象として決定する。このとき、拡張処理キュー５００に登録された処理に後段処理が競合するものと競合しないものが同時に存在しない。その後、Ｓ１９０８の処理へ進む。
【００９４】
Ｓ１９０８にて、ＣＰＵ１０６は、Ｓ１９０６、または、Ｓ１９０７で決定した処理対象を拡張処理キュー５００から削除する。本実施形態の例の場合、拡張スキャン処理が拡張処理キュー５００から削除される。
【００９５】
Ｓ１９０９にて、ＣＰＵ１０６は、拡張処理キュー５００に登録されている残りの処理のエントリーＮｏをそれぞれデクリメント処理する。そして、本処理フローを終了する。デクリメント処理では、登録されている処理のうち、最小のエントリーＮｏが“１”となるようクリップ処理も同時に行う。本実施形態の例の場合、本工程の処理の結果、プリント２のジョブに含まれる拡張プリント処理のエントリーＮｏが“１”となる。
【００９６】
以上、拡張処理部１０５で実行する処理を含むジョブが、拡張処理部１０５の後段処理で他のジョブとの競合待ちが発生するか否かを判定する。更に、拡張処理キュー５００に登録された処理から競合待ちが発生しない処理を決定する。これにより、第一の実施形態の効果に加え、拡張処理部１０５の後段で競合待ちとならにように拡張処理部１０５での処理の順序を制御し、効率的に処理を実行できる。
【００９７】
＜第三の実施形態＞
第一の実施形態では図１２に示す処理形態選択処理フローにおいて、ＣＰＵ１０６、ＣＰＵ２０４、およびＦＰＧＡ２０２の空き状況から処理形態を決定していた。また第一の実施形態で説明したように、画像形成装置１００は通常状態と省電力状態という２種類の電力状態を有する。省電力状態では、画像形成装置１００は、ＣＰＵ２０４およびＦＰＧＡ２０２を有する拡張処理部１０５を含む回路要素１４２および回路要素１４０へ電力供給が行われないように制御する。そこで、このような画像形成装置１００の電力状態に応じた処理形態選択方法を第三の実施形態として説明する。なお、第一の実施形態と重複する個所については説明を省略し、差分のみを説明する。
【００９８】
図２０は、本実施形態に係る優先設定情報２０００の構成例を示す。優先設定情報２０００は、省電力状態時に処理要求を受けた場合に、電力優先として処理するか性能優先として処理するかを示す情報である。優先情報２００１は、優先設定として「電力優先」もしくは「性能優先」のいずれかを示す設定値である。つまり、「電力優先」が設定されている場合には、現在の画像形成装置１００が省電力の電力モード時には、その電力モードでの動作を優先する。一方、「性能優先」が設定されている場合には、処理性能を優先し、選択された処理形態に応じて省電力の電力モードから通常の電力モードへと復帰させることとなる。優先設定情報２０００は、予めＲＯＭ１０８、ＦＬＡＳＨ１０９、もしくはＨＤＤ１２１のいずれかに記憶される。また、優先情報２００１は、ユーザによる操作部１０２への指示を検知したＣＰＵ１０６により変更されるように構成してもよい。
【００９９】
図２１は、本実施形態に係る電力状態情報２１００の構成例を示す。電力状態情報２１００は、画像形成装置１００の電力状態を示し、電源制御部１２２に記憶される。電力状態２１０１は、画像形成装置１００の現時点での電力状態を示す。電力状態２１０１の値は、電源制御部１２２が拡張処理部１０５を有する回路要素１４２および回路要素１４０への電力供給を供給および遮断する際に、電源制御部１２２によって通常電力状態および省電力状態として変更される。
【０１００】
図２２は、本実施形態に係る処理形態テーブル２２００を示す。第一の実施形態と同様、本実施形態でも処理内容に応じて最大４つの処理形態が存在する。処理形態Ａは、ＦＰＧＡ２０２とＣＰＵ１０６の２つの処理部を用いる処理形態である。処理形態Ｂは、ＦＰＧＡ２０２とＣＰＵ２０４の２つの処理部を用いる処理形態である。処理形態Ｃは、処理部としてＣＰＵ１０６のみを用いる処理形態である。処理形態Ｄは、処理部としてＣＰＵ２０４のみを用いる処理形態である。ただし、どの処理形態で処理が可能かは処理内容によって異なる。また、優先度は、処理形態を選択する際の優先度であって、高い順に１〜４が設定される。また、処理形態は処理内容に応じて少なくとも１つ以上存在する。また、省電力時使用可否情報２２０１は、画像形成装置１００が省電力状態時の各処理形態が使用可能か否かを示す情報である。例えば、処理形態Ａは、前述のようにＦＰＧＡ２０２とＣＰＵ１０６を用いる処理形態である。ＦＰＧＡ２０２は、拡張処理部１０５に含まれるため、省電力状態時は電源がオフとなる。そのため、省電力時使用可否情報２２０１は省電力時に使用が不可であることを示す“×”となる。同様に、省電力時使用可否情報２２０１は、処理形態毎に省電力状態時に電源がオフとなるか否かに応じて、不可を示す“×”あるいは可を示す“○”を情報として、ＲＯＭ１０８、ＦＬＡＳＨ１０９、もしくはＨＤＤ１２１などに記憶される。つまり、本実施形態に係る処理形態テーブル２２００により、電力モードに応じて、使用を制限される処理形態が定義される。
【０１０１】
［処理フロー］
本実施形態に係る画像形成装置１００の拡張処理制御フローは、第一の実施形態にて述べた図９に示される処理のうち、処理形態選択処理（Ｓ９０２）のみが異なる。本実施形態に係る処理形態選択処理（Ｓ９０２）の内容を、図２３を用いて説明する。特に説明のない限り、本フローチャートは画像形成装置１００のＲＯＭ１０８、ＦＬＡＳＨ１０９、もしくはＨＤＤ１２１に格納されたプログラムに従って、ＲＡＭ１０７を用いて、ＣＰＵ１０６が行うことで実現される。
【０１０２】
Ｓ２３００にて、ＣＰＵ１０６は、処理対象となっている拡張処理の処理内容を取得する。処理対象として決定された処理内容は、上述したようにソフトウェアで管理されている。したがって、ＣＰＵ１０６は、ソフトウェアにより管理される処理対象の情報を取得する。ここでは、処理内容として「処理Ａ」が取得されるものとする。
【０１０３】
Ｓ２３０１にて、ＣＰＵ１０６は、処理内容に対応する処理形態管理テーブルを決定する。本実施形態の例の場合、図８に示すように、図２２に示される処理内容に応じて、最大４つの処理形態が存在する。ここでは、Ｓ２３０１において「処理Ａ」が処理内容として取得されているため、処理形態管理テーブルとして、図８（ａ）の処理形態管理テーブル８００が決定され、以降の処理で参照される。
【０１０４】
Ｓ２３０２にて、ＣＰＵ１０６は、優先度を表す変数であるパラメータＮを“０”にて初期化する。Ｓ２３０３にて、ＣＰＵ１０６は、拡張処理で使用可能な処理部の空き状況を取得する。なお、ＣＰＵ１０６は、電源起動時等に、図６に示す処理部空き状況管理テーブル６００を作成しておく。処理部空き状況管理テーブル６００については第一の実施形態と同様であるため、ここでの説明は省略する。
【０１０５】
Ｓ２３０４にて、ＣＰＵ１０６は、優先度を表すパラメータＮをインクリメントする。パラメータＮが“０”の場合には、インクリメント、つまり「＋１」の演算が行われ、パラメータＮは“１”となる。
【０１０６】
Ｓ２３０５にて、ＣＰＵ１０６は、Ｓ２３０１にて決定された処理形態管理テーブルに含まれる処理形態のうち、優先度の値がパラメータＮの値と同じ処理形態が存在するか否かを判定する。例えば、処理形態管理テーブルとして処理Ａの処理形態管理テーブル８００（図８（ａ））に決定されている場合、優先度１〜４の処理形態が存在する。そのため、パラメータＮの値が１〜４の範囲であれば、処理形態が存在すると判定される。他の処理でも同様に判定される。処理形態が存在すると判定された場合（Ｓ２３０５にてＹＥＳ）、Ｓ２３０６の処理へ進み、処理形態が存在しないと判定された場合（Ｓ２３０５にてＮＯ）、Ｓ２３０２の処理へ戻る。
【０１０７】
Ｓ２３０６にて、ＣＰＵ１０６は、パラメータＮの値と一致する優先度を有する処理形態に必要な処理部が使用可能であるか否かを判定する。この処理は、第一の実施形態と同様、処理形態管理テーブルと処理部空き状況管理テーブルを参照することにより行われる。パラメータＮの値に一致する優先度を有する処理形態に必要な処理部が使用可能であると判定された場合（Ｓ２３０６にてＹＥＳ）、Ｓ２３０７の処理へ進み、使用可能でないと判定された場合（Ｓ２３０６にてＮＯ）、Ｓ２３０４の処理へ戻る。
【０１０８】
Ｓ２３０７にて、ＣＰＵ１０６は、図２０に示す優先設定情報２０００を参照し、優先情報２００１が「電力優先」として記憶されているか否かを判定する。電力優先である場合（Ｓ２３０７にてＹＥＳ）、Ｓ２３０８の処理へ進み、電力優先でない場合（Ｓ２３０７にてＮＯ）、Ｓ２３１０の処理へ進む。
【０１０９】
Ｓ２３０８にて、ＣＰＵ１０６は、図２１に示す電力状態情報２１００を参照し、電力状態２１０１が「省電力」として記憶されているか否かを判定する。省電力である場合（Ｓ２３０８にてＹＥＳ）、Ｓ２３０９の処理へ進み、通常電力である場合（Ｓ２３０８にてＮＯ）Ｓ２３１３の処理へ進む。
【０１１０】
Ｓ２３０９にて、ＣＰＵ１０６は、パラメータＮの値と一致する優先度を有する処理形態における省電力時使用可否を判定する。この処理は、図２２で示す処理形態テーブル２２００において、対応する処理形態の省電力時使用可否情報２２０１が使用可あるいは不可であるかに基づいて判定する。パラメータＮの値と一致する優先度を有する処理形態における省電力時使用可否が使用可であると判定された場合（Ｓ２３０９にてＹＥＳ）、Ｓ２３１３の処理へ進み、不可であると判定された場合（Ｓ２３０９にてＮＯ）、Ｓ２３０４の処理へ進む。
【０１１１】
Ｓ２３１０にて、ＣＰＵ１０６は、図２１に示す電力状態情報２１００を参照し、電力状態２１０１が「省電力」として記憶されているか否かを判定する。省電力である場合（Ｓ２３１０にてＹＥＳ）、Ｓ２３１１の処理へ進み、通常電力である場合（Ｓ２３１０にてＹＥＳ）Ｓ２３１３の処理へ進む。
【０１１２】
Ｓ２３１１にて、ＣＰＵ１０６は、パラメータＮの値と一致する優先度を有する処理形態における省電力時使用可否を判定する。この処理は、図２２で示す処理形態テーブル２２００において、対応する処理形態の省電力時使用可否情報２２０１が使用可あるいは不可であるかに基づいて判定する。パラメータＮの値と一致する優先度を有する処理形態における省電力時使用可否が使用可であると判定された場合（Ｓ２３１１にてＹＥＳ）、Ｓ２３１２の処理へ進み、不可であると判定された場合（Ｓ２３１１にてＮＯ）、Ｓ２３１３の処理へ進む。
【０１１３】
Ｓ２３１２にて、ＣＰＵ１０６は、省電力状態から通常状態になるように電源制御部１２２に指示する。この処理により、画像形成装置１００は通常電力状態となることで拡張処理部１０５に電力が供給され、拡張処理部１０５におけるＦＰＧＡ２０２やＣＰＵ２０４が使用可能になる。
【０１１４】
Ｓ２３１３にて、ＣＰＵ１０６は、拡張処理を行うための処理形態として、パラメータＮの値と一致する優先度の処理形態を決定する。決定された処理形態に関する情報は、Ｓ１１０１によって作成された処理対象の情報に加えて、更に処理形態も合わせて管理される。本処理は、第一の実施形態にて述べた図１２のＳ１２０７と同様である。
【０１１５】
Ｓ２３１４にて、ＣＰＵ１０６は、処理部空き状況管理テーブル６００に対して、決定した処理形態に必要な処理部のパラメータを「使用中」に更新する。例えば、処理形態が「処理形態Ａ」に決定された場合、ＦＰＧＡ２０２とＣＰＵ１０６を使用するので、処理部空き状況管理テーブル６００に対して、この２つの処理部を「未使用」状態から「使用中」状態へ変更する。
【０１１６】
以上、本実施形態では要求された拡張処理を行うために、複数存在する処理形態の中から、その優先度と処理形態に必要な処理部の空き状況および、電力状態に応じて処理形態の決定を行う。これにより、第一の実施形態の効果に加え、適切な電力とパフォーマンスで拡張処理を実施することが可能となる。なお、電力モードは２種類に限定するものではなく、画像形成装置がさらに多くの電力モードで動作可能である場合には、各電力モードに応じて、優先設定情報２０００、電力状態情報２１００、省電力時使用可否情報２２０１の値を定義してもよい。この場合、遷移する電力モードは、現在の電力モードや選択された処理形態に応じて決定してもよい
＜第四の実施形態＞
第一の実施形態では、ＣＰＵ１０６またはＣＰＵ２０４は選択された処理形態での処理が完了した時点で処理終了の通知を行い、拡張処理制御フローでは終了処理（図９のＳ９０７）にて、この通知を受けて処理部空き状況管理テーブル６００を更新する。つまり、ＣＰＵとＦＰＧＡを利用する処理形態の場合、第一の実施形態では、全ての処理が完了した時点で、ＣＰＵとＦＰＧＡの両方を利用可能となる。そのため、ＣＰＵの処理が完了するまでは、ＦＰＧＡの再構成ができなかった。
【０１１７】
第四の実施形態では、ＦＰＧＡ２０２に構成された機能部（処理回路）３０２が全処理結果をＲＡＭ２０３に出力した時点で、ＦＰＧＡ回路による処理完了を該当ＣＰＵ（ＣＰＵ１０６とＣＰＵ２０４）が通知する手段を設ける。第一の実施形態と同様に、該当ＣＰＵ（ＣＰＵ１０６とＣＰＵ２０４）は、ＲＡＭ２０３に記憶された処理結果を取得した時点で、処理終了を通知する。
【０１１８】
第四の実施形態では、ＦＰＧＡ回路による処理完了の通知を受け、処理部空き状況管理テーブル６００の「ＦＰＧＡ」の欄を「未使用」に更新する。その後、処理終了の通知を受け、処理部空き状況管理テーブル６００の該当する「ＣＰＵ」の欄を「未使用」に更新する。これにより、処理終了通知の前である、ＦＰＧＡ回路による処理完了通知の段階でＦＰＧＡを使用する処理形態の選択が可能となり、ＦＰＧＡを早い段階で再構成できる。その結果、処理時間を短縮できる。
【０１１９】
また、ＦＰＧＡ回路による処理完了通知の段階で、ＦＰＧＡを使用する処理形態が選択可能となり、ＲＡＭ２０３の空き容量が許せば、該当ＣＰＵに処理要求を発行可能となる。以下、本実施形態と第一の実施形態との重複する部分については説明を省略し、差異についてのみ説明を行う。
【０１２０】
［ＦＰＧＡメモリ使用量テーブルの構成例］
図２４は、本実施形態に係るＦＰＧＡメモリ使用量テーブル２４００の構成例を示す図である。図２４に示す例の場合、処理ＡとしてＦＰＧＡ２０２を使用する処理形態が選択された場合、ＦＰＧＡ２０２に構成された機能部（処理回路）３０２は、ＲＡＭ２０３の使用量として７６８ＭＢを必要とする。同様に、処理ＢとしてＦＰＧＡ２０２を使用する処理形態を選択した場合、ＦＰＧＡ２０２に構成された機能部（処理回路）３０２はＲＡＭ２０３の使用量として５１２ＭＢを必要とする。処理Ｃに関しても同様である。
【０１２１】
［処理部空き状況管理テーブルの構成例］
図２５は、本実施形態に係る処理部空き状況管理テーブル２５００の構成例を示す図である。第一の実施形態にて述べた図６の処理部空き状況管理テーブル６００に対し、「ＲＡＭ２０３」の欄が追加されている。この例では、「ＲＡＭ２０３」の欄において、「先頭」の部分はＲＡＭ２０３のうち先頭からどれくらいの容量が使用中であるかを示す。図２５の例の場合、ＲＡＭ２０３の先頭部は未使用であることを示す。また、「ＲＡＭ２０３」の欄において、「後尾」の部分はＲＡＭ２０３のうち後尾からどれくらいの容量が使用中であるかを示す。図２５の例の場合、ＲＡＭ２０３の後尾部は未使用であることを示す。ＲＡＭ２０３の全記憶容量から、この「ＲＡＭ２０３」の欄が示す先頭の部分の値と後尾の部分の値の和を減じることで、ＲＡＭ２０３の空き容量を得ることができる。なお、本実施形態では、「ＦＰＧＡ２０２」の欄の値は、第一の実施形態と異なるタイミングで更新される。詳細は後述する。
【０１２２】
なお、ＲＡＭ２０３の先頭部と後尾部に分けて管理されることはあくまで一例にすぎない。ＲＡＭ２０３の空き領域を知ることができれば、いずれの構成であってもよい。
【０１２３】
本実施形態に係る拡張処理制御フローにおいて、ＦＰＧＡ２０２を使用する処理形態が選択された場合、ＦＰＧＡ２０２に所望の回路を構成した後、ＦＰＧＡメモリ使用量テーブル２４００と処理部空き状況管理テーブル２５００のＲＡＭ２０３の空き容量の欄を参照する。ＦＰＧＡメモリ使用量テーブル２４００が示す使用量が処理部空き状況管理テーブルのＲＡＭ２０３の空き容量以下であれば、該当ＣＰＵに処理要求を行う。空き容量よりも大きい場合は、ＲＡＭ２０３の空き容量が、ＦＰＧＡメモリ使用量テーブル２４００が示す使用量を超えるまで待つ。該当ＣＰＵがＦＰＧＡ回路処理完了を通知した時点では、該当ＣＰＵはＲＡＭ２０３に記憶された処理結果を取得中であるため、処理部空き状況管理テーブル２５００のＲＡＭ２０３の空き容量の欄は更新しない。本実施形態係る拡張処理制御フローにおいて、処理終了の通知を受けた段階で、処理部空き状況管理テーブル２５００のＲＡＭ２０３の空き容量の欄が更新される。
【０１２４】
なお、選択された処理形態がＦＰＧＡ２０２を使用する処理形態の場合、ＦＰＧＡ２０２内に構成される機能部（処理回路）３０２は処理結果をＦＰＧＡ２０２に接続されるＲＡＭ２０３に記憶する。選択された処理形態がＣＰＵ１０６とＦＰＧＡ２０２であれば、ＣＰＵ１０６はＲＡＭ２０３に記憶された処理結果をメモリコントローラ３０５とホストＩＦ３０４を介して取得する。また、選択された処理形態がＣＰＵ２０４とＦＰＧＡ２０２であれば、ＣＰＵ２０４はＲＡＭ２０３に記憶された処理結果をＦＰＧＡ２０２内のメモリコントローラ３０５および外部ＩＦ３０６を介して取得する。この取得が行われた後は、ＲＡＭ２０３に保持された処理結果は不要となるため、この処理結果が保持された領域が解放され、空き容量として利用可能になる。
【０１２５】
［ＣＰＵ１０６による画像処理］
図２６は、本実施形態に係るＣＰＵ１０６での画像処理のフローチャートである。図２６のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ１０６により実行される。本処理フローは、拡張処理制御フローにおいて、ＣＰＵ１０６を使用する処理形態を選択し、ＣＰＵ１０６に処理要求を行った時点で開始される。第一の実施形態にて述べた図１５と異なる点は、選択された処理形態がＦＰＧＡ２０２を使用する場合、処理終了の通知前に、ＦＰＧＡ回路による処理完了を通知する点である（Ｓ２６０４〜Ｓ２６０７）。
【０１２６】
Ｓ２６００にて、ＣＰＵ１０６は、画像処理要求を受信したか否かを判定する。画像処理要求を受信したと判定された場合（Ｓ２６００にてＹＥＳ）、Ｓ２６０１の処理へ進み、画像処理要求を受信していないと判定された場合（Ｓ２６００にてＮＯ）、画像処理要求を受信するまで待機する。
【０１２７】
Ｓ２６０１にて、ＣＰＵ１０６は、画像処理要求の処理形態がＦＰＧＡ２０２を使用して処理を行う処理形態か否かを判定する。画像処理要求の処理形態がＦＰＧＡ２０２を使用しない処理形態であると判定された場合（Ｓ２６０１にてＮＯ）、Ｓ２６０２の処理へ進み、ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ２６０１のＹＥＳ）、Ｓ２６０４の処理へ進む。
【０１２８】
Ｓ２６０２にて、ＣＰＵ１０６は、ＦＰＧＡ２０２を使用しないで画像処理を実行する。その後、Ｓ２６０３の処理へ進む。
【０１２９】
Ｓ２６０３にて、ＣＰＵ１０６は、処理終了の通知を行い、画像処理要求元へ処理結果を通知する。その後、本処理フローを終了する。
【０１３０】
Ｓ２６０４にて、ＣＰＵ１０６は、ＦＰＧＡ２０２の処理回路に対して、画像処理要求とともに送られてくる、ＲＡＭ２０３の使用すべきアドレスで初期化して画像処理を開始する。ここでの初期化はＦＰＧＡ２０２に構成された処理回路のレジスタを適切に設定することで行われる。ＲＡＭ２０３の使用すべきアドレスは、ＲＡＭ２０３の使用状況や新たに使用するデータ量に応じて決定される。ここでのアドレスの決定については、図２９のＳ２９０７もしくはＳ２９０９にて説明する。
【０１３１】
Ｓ２６０５にて、ＣＰＵ１０６は、ＦＰＧＡ２０２に構成された処理回路が処理結果をすべてＲＡＭ２０３に出力されたか否かを判定する。ＦＰＧＡ２０２に構成された処理回路が処理結果をすべてＲＡＭ２０３に出力されたことは、処理回路からの割り込みによりＣＰＵ１０６に通知されることで、ＣＰＵ１０６は検知することができる。もしくは、ＣＰＵ１０６が処理回路上の、処理結果をすべてＲＡＭ２０３に出力された時に変化するレジスタをポーリングすることでも検知することができる。すべての処理結果がＲＡＭ２０３に出力されていないと判定された場合（Ｓ２６０５にてＮＯ）、処理結果がすべてＲＡＭ２０３に出力されるまで待機する。すべての処理結果がＲＡＭ２０３に出力されたと判定された場合（Ｓ２６０５にてＹＥＳ）、Ｓ２６０６の処理へ進む。
【０１３２】
Ｓ２６０６にて、ＣＰＵ１０６は、ＦＰＧＡ回路による処理完了を通知する。
【０１３３】
Ｓ２６０７にて、ＣＰＵ１０６は、ＲＡＭ２０３に記憶された処理結果をすべて取得したか否かを判定する。ＲＡＭ２０３に記憶された処理結果をＣＰＵ１０６がすべて取得していないと判定された場合（Ｓ２６０７にてＮＯ）、すべての処理結果の取得を継続する。このとき、ＣＰＵ１０６は、ＲＡＭ２０３に記憶された処理結果をメモリコントローラ３０５とホストＩＦ３０４を介して取得する。ＲＡＭ２０３に記憶された処理結果をすべてＣＰＵ１０６が取得したと判定された場合（Ｓ２６０７にてＹＥＳ）、Ｓ２６０３の処理へ遷移する。
【０１３４】
［ＣＰＵ２０４による画像処理］
図２７は、本実施形態に係るＣＰＵ２０４での画像処理のフローチャートである。図２７のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ２０４により実行される。本処理フローは、拡張処理制御フローにおいて、ＣＰＵ２０４を使用する処理形態を選択し、ＣＰＵ２０４に処理要求を行った時点で開始される。第一の実施形態にて述べた図１６と異なる点は、選択された処理形態がＦＰＧＡ２０２を使用する場合、処理終了の通知前に、ＦＰＧＡ回路による処理完了を通知する点である（Ｓ２７０４〜Ｓ２７０７）。
【０１３５】
Ｓ２７００にて、ＣＰＵ２０４は、画像処理要求を受信したか否かを判定する。画像処理要求を受信したと判定された場合（Ｓ２７００にてＹＥＳ）、Ｓ２７０１の処理へ進み、画像処理要求を受信していないと判定された場合（Ｓ２７００にてＮＯ）、画像処理要求を受信するまで待機する。
【０１３６】
Ｓ２７０１にて、ＣＰＵ２０４は、画像処理要求の処理形態がＦＰＧＡ２０２を使用して処理を行う処理形態か否かを判定する。画像処理要求の処理形態がＦＰＧＡ２０２を使用しない処理形態であると判定された場合（Ｓ２７０１にてＮＯ）、Ｓ２７０２の処理へ進み、ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ２７０１のＹＥＳ）、Ｓ２７０４の処理へ進む。
【０１３７】
Ｓ２７０２にて、ＣＰＵ２０４は、ＦＰＧＡ２０２を使用しないで画像処理を実行する。その後、Ｓ２７０３の処理へ進む。
【０１３８】
Ｓ２７０３にて、ＣＰＵ２０４は、処理終了の通知を行い、画像処理要求元へ処理結果を通知する。その後、本処理フローを終了する。
【０１３９】
Ｓ２７０４にて、ＣＰＵ２０４は、ＦＰＧＡ２０２の処理回路に対して、拡張処理制御フローからの画像処理要求とともに送られてくる、ＲＡＭ２０３の使用すべきアドレスで初期化して画像処理を開始する。ここでの初期化はＦＰＧＡ２０２に構成された処理回路のレジスタを適切に設定することで行われる。ＲＡＭ２０３の使用すべきアドレスは、ＲＡＭ２０３の使用状況や新たに使用するデータ量に応じて決定される。ここでのアドレスの決定については、図２９のＳ２９０７もしくはＳ２９０９にて説明する。
【０１４０】
Ｓ２７０５にて、ＣＰＵ２０４は、ＦＰＧＡ２０２に構成された処理回路が処理結果をすべてＲＡＭ２０３に出力されたか否かを判定する。ＦＰＧＡ２０２に構成された処理回路が処理結果をすべてＲＡＭ２０３に出力されたことは、処理回路からの割り込みによりＣＰＵ２０４に通知されることで、ＣＰＵ２０４は検知することができる。もしくは、ＣＰＵ１０６が処理回路上の、処理結果をすべてＲＡＭ２０３に出力された時に変化するレジスタをポーリングすることでも検知することができる。すべての処理結果がＲＡＭ２０３に出力されていないと判定された場合（Ｓ２７０５にてＮＯ）、処理結果がすべてＲＡＭ２０３に出力されるまで待機する。すべての処理結果がＲＡＭ２０３に出力されたと判定された場合（Ｓ２７０５にてＹＥＳ）、Ｓ２７０６の処理へ進む。
【０１４１】
Ｓ２７０６にて、ＣＰＵ２０４は、ＦＰＧＡ回路による処理完了を通知する。
【０１４２】
Ｓ２７０７にて、ＣＰＵ２０４は、ＲＡＭ２０３に記憶された処理結果をすべて取得したか否かを判定する。ＲＡＭ２０３に記憶された処理結果をＣＰＵ２０４がすべて取得していないと判定された場合（Ｓ２７０７にてＮＯ）、すべての処理結果の取得を継続する。このとき、ＣＰＵ２０４は、ＲＡＭ２０３に記憶された処理結果をメモリコントローラ３０５と外部ＩＦ３０６を介して取得する。ＲＡＭ２０３に記憶された処理結果をすべてＣＰＵ２０４が取得したと判定された場合（Ｓ２７０７にてＹＥＳ）、Ｓ２７０３の処理へ遷移する。
【０１４３】
［拡張処理制御］
図２８は、本実施形態に係る拡張処理制御の全体処理のフローチャートである。図２８のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ１０６により実行される。第一の実施形態にて述べた図９のフローと異なる点は、拡張処理制御が該当ＣＰＵに画像処理要求を発行する処理（Ｓ２８０６）と、終了処理（Ｓ２８０７）である。なお、後述するように、終了処理（Ｓ２８０７）において、処理終了よりも前に通知されるＦＰＧＡ回路による処理完了通知で処理部空き状況管理テーブル２５００のＦＰＧＡ２０２の欄を「未使用」に更新する。図２８における処理形態選択処理（Ｓ２８０２）は第一の実施形態にて述べた図１２の処理フローと同じではある。しかし、図１２のＳ１２０６において、前の処理が処理終了の通知を行うより前でＲＡＭ２０３を使用中であっても、ＦＰＧＡ２０２を使用する処理形態を選択可能となる。つまり、図２８のＳ２８０４において前の処理が処理終了の通知を行うより前でＲＡＭ２０３を使用中であっても、ＦＰＧＡ２０２の再構成を行うことができる。ここでは、第一の実施形態と異なる部分のみを説明する。
【０１４４】
図２９は、本実施形態に係る画像処理要求を発行するフローチャートである。図２８のＳ２８０６に対応する。図２９のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ１０６により実行される。本処理フローは、処理形態選択処理（図２８のＳ２８０２）で処理形態を決定後、選択された処理形態がＦＰＧＡ２０２を使用するものであれば、ＦＰＧＡ２０２に処理回路が構成された後に開始される。なお、このフローチャートで使用される変数ＭはＲＡＭ２０３の全記憶容量を示す。また、このフローチャートで使用される変数Ｔと変数Ｂはそれぞれ、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄のうち、「先頭」に格納される値と「後尾」に格納されるそれぞれの値を示す。
【０１４５】
Ｓ２９０１にて、ＣＰＵ１０６は、選択された処理形態がＦＰＧＡ２０２を使用する処理形態か否かを判定する。選択された処理形態がＦＰＧＡ２０２を使用しない処理形態であるとされた場合（Ｓ２９０１にて）、Ｓ２９１０の処理へ進み、ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ２９０１にてＮＯ）、Ｓ２９０２の処理へ進む。
【０１４６】
Ｓ２９０２にて、ＣＰＵ１０６は、ＦＰＧＡメモリ使用量テーブル２４００を参照し、選択された処理形態で行うべき処理に基づき、その処理においてＦＰＧＡ２０２に構成された処理回路が必要とするＲＡＭ２０３の容量を取得する。ここでは、得られた使用量を変数Ｕの値とする。
【０１４７】
Ｓ２９０３にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄を参照し、ＲＡＭ２０３の空き容量を取得する。ここでの空き量は、ＲＡＭ２０３の全容量Ｍから、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄のうち、「先頭」に格納される値Ｔと「後尾」に格納される値Ｂの和を減じることで得ることができる。ここで得られた空き量を、変数Ｓの値とする。
【０１４８】
Ｓ２９０４にて、ＣＰＵ１０６は、Ｓ２９０２で得られたＲＡＭ２０３の使用量ＵとＳ２９０３で得られたＲＡＭ２０３の空き量Ｓとを比較する。使用量Ｕが空き量Ｓより大きければ（Ｓ２９０４にてＮＯ）、Ｓ２９０３の処理へ戻り、ＣＰＵ１０６は、再度空き量を確認する。使用量Ｕが空き量Ｓ以下であれば（Ｓ２９０４にてＹＥＳ）、Ｓ２９０５の処理へ進む。
【０１４９】
Ｓ２９０５にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄を参照し、「ＲＡＭ２０３」の欄のうち、「先頭」に格納される値Ｔが“０”か否かを判定する。値Ｔが“０”であれば、ＲＡＭ２０３の先頭部分は使用されていないと判断でき、値Ｔが“０”でなければ、ＲＡＭ２０３の後尾部分は使用されていないと判定できる。値Ｔが“０”である場合（Ｓ２９０５にてＹＥＳ）、Ｓ２９０６の処理へ進み、Ｔが“０”でない場合（Ｓ２９０５にてＮＯ）Ｓ２９０８の処理へ進む。
【０１５０】
Ｓ２９０６にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄において、「先頭」の値を使用量Ｕの値で更新する。さらに、Ｓ２９０７にて、ＣＰＵ１０６は、ＦＰＧＡ２０２に構成された処理回路が使用すべきＲＡＭ２０３の先頭アドレスを“０”に設定する。その後、Ｓ２９１０の処理へ進む。
【０１５１】
Ｓ２９０８にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄において、「後尾」の値を使用量Ｕの値で更新する。さらに、Ｓ２９０９にて、ＣＰＵ１０６は、ＦＰＧＡ２０２に構成された処理回路が使用すべきＲＡＭ２０３の先頭アドレスを（Ｍ−Ｕ）にて得られる値に設定する。その後、Ｓ２９１０の処理へ進む。なお、ＣＰＵ１０６の処理がＳ２９０５に達したということは、少なくともＣＰＵ１０６かＣＰＵ２０４のいずれかが処理部空き状況管理テーブル２５００上で空き（未使用）になっていたことを意味する。したがって、Ｓ２９０５に達した時点では、ＲＡＭ２０３を使用するのは多くてもＣＰＵ１０６かＣＰＵ２０４のいずれか一方である。そのため、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄において、「先頭」に格納される値Ｔが“０”か否かで処理を切り換えるフローは正しく動作することが保証される。
【０１５２】
Ｓ２９１０にて、ＣＰＵ１０６は、選択された処理形態がＣＰＵ１０６を使用するものか否かを判定する。選択された処理形態がＣＰＵ１０６を使用する処理形態であると判定された場合（Ｓ２９１０にてＹＥＳ）、Ｓ２９１１の処理へ進み、ＣＰＵ１０６を使用しない処理形態であると判定された場合（Ｓ２９１０にてＮＯ）、Ｓ２９１２の処理へ進む。
【０１５３】
Ｓ２９１１にて、ＣＰＵ１０６は、ＣＰＵ１０６自身に画像処理要求を発行する。その後、本処理フローを終了する。
【０１５４】
Ｓ２９１２にて、ＣＰＵ１０６は、ＣＰＵ２０４に画像処理要求を発行する。その後、本処理フローを終了する。
【０１５５】
図３０は、本実施形態に係る拡張処理制御の終了処理のフローチャートである。図３０のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ１０６により実行される。本処理フローは、拡張処理制御処理において、画像処理要求が発行（図２８のＳ２８０６）された後に開始される。
【０１５６】
Ｓ３００１にて、ＣＰＵ１０６は、選択された処理形態がＦＰＧＡ２０２を使用する処理形態であるか否かを判定する。選択された処理形態がＦＰＧＡ２０２を使用しない処理形態であると判定された場合（Ｓ３００１にてＮＯ）、Ｓ３００４の処理へ進み、ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ３００１にてＹＥＳ）、Ｓ３００２の処理へ進む。
【０１５７】
Ｓ３００２にて、ＣＰＵ１０６は、ＣＰＵ１０６での画像処理（図２６）あるいはＣＰＵ２０４での画像処理（図２７）で発行されるＦＰＧＡ２０２による処理完了通知（Ｓ２６０７またはＳ２７０７）を受信したか否かを判定する。ＦＰＧＡ２０２による処理完了通知を受信していないと判定された場合（Ｓ３００２にてＮＯ）、ＦＰＧＡ２０２による処理完了通知を受信するまで待機し、受信した場合は（Ｓ３００２にてＹＥＳ）、Ｓ３００３の処理へ進む。
【０１５８】
Ｓ３００３にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＦＰＧＡ２０２」の欄の値を「未使用」に更新する。
【０１５９】
Ｓ３００４にて、ＣＰＵ１０６は、ＣＰＵ１０６での画像処理（図２６）あるいはＣＰＵ２０４での画像処理（図２７）で発行される処理終了通知（Ｓ２６０３またはＳ２７０３）を受信したか否かを判定する。処理終了通知を受信していないと判定された場合（Ｓ３００４にてＮＯ）、処理終了通知を受信するまで待機し、受信した場合は（Ｓ３００４にてＹＥＳ）、Ｓ３００５の処理へ進む。
【０１６０】
Ｓ３００５にて、ＣＰＵ１０６は、選択された処理形態がＦＰＧＡ２０２を使用する処理形態か否かを判定する。選択された処理形態がＦＰＧＡ２０２を使用しない処理形態であると判定された場合（Ｓ３００５にてＮＯ）、Ｓ３００９の処理へ進み、ＦＰＧＡ２０２を使用する処理形態であると判定された場合（Ｓ３００５にてＹＥＳ）、Ｓ３００６の処理へ進む。
【０１６１】
Ｓ３００６にて、ＣＰＵ１０６は、選択された処理形態でＦＰＧＡ２０２が使用すべきＲＡＭ２０３の先頭アドレスが“０”か否かを判定する。先頭アドレスが“０”であれば、ＦＰＧＡ２０２に構成された処理回路がＲＡＭ２０３の先頭部分は使用していたと判定でき、先頭アドレスが“０”でなければ、ＦＰＧＡ２０２に構成された処理回路がＲＡＭ２０３の後尾部分は使用していたと判定できる。先頭アドレスが“０”である場合（Ｓ３００６にてＹＥＳ）、Ｓ３００７の処理へ進み、先頭アドレスが“０”でない場合（Ｓ３００６にてＮＯ）、Ｓ３００８の処理へ進む。
【０１６２】
Ｓ３００７にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄において、「先頭」の値を“０”で更新する。その後、Ｓ３００９の処理へ進む。
【０１６３】
Ｓ３００８にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＲＡＭ２０３」の欄において、「後尾」の値を“０”で更新する。その後、Ｓ３００９の処理へ進む。
【０１６４】
Ｓ３００９にて、ＣＰＵ１０６は、選択された処理形態がＣＰＵ１０６を使用する処理形態か否かを判定する。選択された処理形態がＣＰＵ１０６を使用する処理形態であると判定された場合（Ｓ３００９にてＹＥＳ）、Ｓ３０１０の処理へ進み、ＣＰＵ１０６を使用しない処理形態であると判定された場合（Ｓ３００９にてＮＯ）、Ｓ３０１１の処理へ進む。
【０１６５】
Ｓ３０１０にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＣＰＵ１０６」の値を「未使用」で更新する。その後、本処理フローを終了する。
【０１６６】
Ｓ３０１１にて、ＣＰＵ１０６は、処理部空き状況管理テーブル２５００の「ＣＰＵ２０４」の値を「未使用」で更新する。その後、本処理フローを終了する。
【０１６７】
以上、本実施形態によれば、選択された処理形態がＦＰＧＡ２０２を使用する場合、処理終了通知より前に発行されるＦＰＧＡ回路処理完了通知により、ＦＰＧＡ２０２の再構成が可能となる。さらに、処理部空き状況管理テーブル２５００にＦＰＧＡ２０２に接続されるＲＡＭ２０３の空き状況を追加することで、ＲＡＭ２０３の容量が許せば、ＦＰＧＡ２０２の再構成後、すぐに該当ＣＰＵに画像処理要求を発行可能となる。これにより、画像形成装置の処理速度を向上させることができる。また、本実施形態では、処理部空き状況管理テーブル２５００にＦＰＧＡ２０２に接続されるＲＡＭ２０３の空き状況を追加している。そのため、ＦＰＧＡ２０２を同時に２つ以上のＣＰＵで使用する場合であっても、ＲＡＭ２０３の使用領域の競合を回避でき、動作を保障することが可能である。
【０１６８】
＜その他の実施形態＞
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１６９】
１００…画像処理装置、１０１…メインコントローラ、１０５…拡張処理部、１０６…ＣＰＵ、１２２…電源制御部 
【図１】
0006429650.tif 000002
【図２】
0006429650.tif 000003
【図３】
0006429650.tif 000004
【図４】
0006429650.tif 000005
【図５】
0006429650.tif 000006
【図６】
0006429650.tif 000007
【図７】
0006429650.tif 000008
【図８】
0006429650.tif 000009
【図９】
0006429650.tif 000010
【図１０】
0006429650.tif 000011
【図１１】
0006429650.tif 000012
【図１２】
0006429650.tif 000013
【図１３】
0006429650.tif 000014
【図１４】
0006429650.tif 000015
【図１５】
0006429650.tif 000016
【図１６】
0006429650.tif 000017
【図１７】
0006429650.tif 000018
【図１８】
0006429650.tif 000019
【図１９】
0006429650.tif 000020
【図２０】
0006429650.tif 000021
【図２１】
0006429650.tif 000022
【図２２】
0006429650.tif 000023
【図２３】
0006429650.tif 000024
【図２４】
0006429650.tif 000025
【図２５】
0006429650.tif 000026
【図２６】
0006429650.tif 000027
【図２７】
0006429650.tif 000028
【図２８】
0006429650.tif 000029
【図２９】
0006429650.tif 000030
【図３０】
0006429650.tif 000031