(57)【要約】    【課題】  記憶手段に対するアクセス回数を最小限にし且つシステムの初期化時間を短縮化して記憶手段の共有化を可能とする。    【解決手段】  マルチプロセッサシステムは、マスタ・プロセッサ100、複数のスレーブ・プロセッサ200〜400、各スレーブ・プロセッサにより共有される共有ＲＯＭ961、各スレーブ・プロセッサから共有ＲＯＭ961へのアクセスに対し調停を行う共有ＲＯＭアクセス調停装置960を備える。共有ＲＯＭアクセス調停装置960は、パワーアップ・リセット後は、発行されたＲＯＭアドレスが最小値であるスレーブ・プロセッサを優先して共有ＲＯＭ961へのアクセス権を与える調停を行い、ブートシーケンス終了信号発行後は発行されたＲＯＭアドレスに関わらず共有ＲＯＭ961へのアクセス権を与える調停を行う。【選択図】      図６
2005346670.tif 000002
【特許請求の範囲】
【請求項１】
マスタ・プロセッサと複数のスレーブ・プロセッサを備えたマルチプロセッサシステムであって、
前記各スレーブ・プロセッサにより共有され、プログラムのデータを格納可能な記憶手段と、前記各スレーブ・プロセッサから前記記憶手段へのアクセスに対し、アクセス権の管理を含む調停を行う調停手段とを備えることを特徴とするマルチプロセッサシステム。
【請求項２】
前記調停手段は、発行された前記記憶手段のアドレスが最小値であるスレーブ・プロセッサを優先して前記記憶手段へのアクセス権を与える第一の調停方式と、発行された前記記憶手段のアドレスに関わらず前記記憶手段へのアクセス権を与える第二の調停方式とを有し、
初期化後は前記第一の調停方式で調停を行い、初期化終了信号発行後は前記第二の調停方式で調停を行うことを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記調停手段は、前記マスタ・プロセッサの通信相手となるスレーブ・プロセッサを指定するための識別情報を、前記各スレーブ・プロセッサが前記記憶手段のアドレス空間内の所定のアドレスにアクセスすることで取得させ、前記各スレーブ・プロセッサが前記識別情報を取得した後に前記初期化終了信号を発行することを特徴とする請求項１又は２記載のマルチプロセッサシステム。
【請求項４】
前記調停手段は、当該スレーブ・プロセッサが初めてアクセスする前記記憶手段のアドレスのデータを保存するキャッシュ手段を備え、
前記記憶手段の当該アドレスに対するアクセスが２回目以降のアクセスである場合は、前記キャッシュ手段のデータを当該スレーブ・プロセッサに出力し、前記記憶手段の当該アドレスに対するアクセスが初めてのアクセスである場合は、前記記憶手段へのアクセスを行い前記記憶手段のデータを当該スレーブ・プロセッサに出力することを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項５】
前記調停手段は、前記各スレーブ・プロセッサに対するストローブ信号を生成する信号生成手段を備え、
前記記憶手段の当該アドレスに対するアクセスが２回目以降のアクセスである場合は、前記キャッシュ手段からのデータ出力に合わせて前記ストローブ信号を当該スレーブ・プロセッサに発行して直ちにリードサイクルを終了させ、前記記憶手段の当該アドレスに対するアクセスが初めてのアクセスである場合は、所定のサイクル数を待機し前記記憶手段からのデータ出力完了後に前記ストローブ信号を当該スレーブ・プロセッサに発行してリードサイクルを終了させることを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項６】
マスタ・プロセッサと複数のスレーブ・プロセッサを備えたマルチプロセッサシステムのアクセス調停方法であって、
前記各スレーブ・プロセッサから、前記各スレーブ・プロセッサにより共有されると共にプログラムを格納可能な記憶手段へのアクセスに対し、アクセス権の管理を含む調停を行うことを特徴とするアクセス調停方法。
【請求項７】
マスタ・プロセッサと複数のスレーブ・プロセッサを備えたマルチプロセッサシステムのアクセス調停方法をコンピュータに実行させるプログラムであって、
前記各スレーブ・プロセッサから、前記各スレーブ・プロセッサにより共有されると共にプログラムを格納可能な記憶手段へのアクセスに対し、アクセス権の管理を含む調停を行うモジュールを備えることを特徴とするプログラム。
【請求項８】
マスタ・プロセッサとスレーブ・プロセッサをローカルバスを介して接続したマルチプロセッサシステムであって、
前記スレーブ・プロセッサにおける前記マスタ・プロセッサとの前記ローカルバスを介した通信の受け口となる受信手段がビジー状態である期間をカウントする計測手段と、前記計測手段のカウント値と所定のタイムアウト値を比較し、タイムアウトを検出する検出手段と、前記検出手段によるタイムアウト検出に基づきタイムアウト後の処理を制御する制御手段とを備えることを特徴とするマルチプロセッサシステム。
【請求項９】
前記計測手段のカウント値を読み出し可能としたことを特徴とする請求項８記載のマルチプロセッサシステム。
【請求項１０】
前記ローカルバスのトランザクション終了後、所定のサイクル数経過後も前記受信手段が前記ローカルバスを開放しない場合に前記ローカルバスを直ちに開放すると共に、タイムアウトを検出する監視手段を備え、
前記制御手段は、前記監視手段によるタイムアウト検出に基づきタイムアウト後の処理を制御することを特徴とする請求項８記載のマルチプロセッサシステム。
【請求項１１】
前記制御手段は、前記計測手段又は前記監視手段によりタイムアウトが検出され、前記スレーブ・プロセッサ内部のＣＰＵバス獲得信号がアサート中の場合、前記ＣＰＵバス獲得信号をネゲートすることを特徴とする請求項８記載のマルチプロセッサシステム。
【請求項１２】
前記マスタ・プロセッサの通信相手のスレーブ・プロセッサがハングアップを引き起こした場合、該スレーブ・プロセッサからリカバリ通知が来るまでの期間、該スレーブ・プロセッサを除外して他のスレーブ・プロセッサと通信を続行する通信続行手段を備えることを特徴とする請求項８記載のマルチプロセッサシステム。
【請求項１３】
マスタ・プロセッサとスレーブ・プロセッサをローカルバスを介して接続したマルチプロセッサシステムのタイムアウト制御方法であって、
前記スレーブ・プロセッサにおける前記マスタ・プロセッサとの前記ローカルバスを介した通信の受け口となる受信手段がビジー状態である期間をカウントし、前記ビジー状態である期間のカウント値と所定のタイムアウト値を比較し、タイムアウトを検出し、タイムアウト検出に基づきタイムアウト後の処理を制御することを特徴とするタイムアウト制御方法。
【請求項１４】
マスタ・プロセッサとスレーブ・プロセッサをローカルバスを介して接続したマルチプロセッサシステムのタイムアウト制御方法をコンピュータに実行させるプログラムであって、
前記スレーブ・プロセッサにおける前記マスタ・プロセッサとの前記ローカルバスを介した通信の受け口となる受信手段がビジー状態である期間をカウントするモジュールと、前記ビジー状態である期間のカウント値と所定のタイムアウト値を比較し、タイムアウトを検出するモジュールと、タイムアウト検出に基づきタイムアウト後の処理を制御するモジュールとを備えることを特徴とするプログラム。
【請求項１５】
前記請求項１乃至５、前記請求項８乃至１２の何れかに記載のマルチプロセッサシステムを備えたことを特徴とする画像処理装置。
【請求項１６】
前記請求項１５記載の画像処理装置を備えたことを特徴とする撮像装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マスタ・プロセッサ及びスレーブ・プロセッサから構成されるマルチプロセッサシステム、アクセス調停方法、タイムアウト制御方法、プログラム、画像処理装置、及び撮像装置に関する。
【背景技術】
【０００２】
従来、複数のＣＰＵを搭載し、各々のＣＰＵに処理を分散させることで処理速度の向上等を図ることが可能なマルチプロセッサシステムが各種分野で利用されている（例えば特許文献１参照）。
【０００３】
図２０は、従来例に係るマスタ・プロセッサ及びスレーブ・プロセッサの構成を示すブロック図である。
【０００４】
図２０において、マスタ・プロセッサ１１００は、ＣＰＵバス１１０１、通信インタフェース（Ｉ／Ｆ）１１１０、割込みコントローラ１１０３、ＣＰＵ１１０２、ＣＰＵバス・アービタ１１０４、ＤＭＡ（Direct Memory Access）コントローラ１・１１４０、ＲＯＭコントローラ１１４１、ＣＰＵバス・マスタ・デバイス１１０６、ＣＰＵバス・スレーブ・デバイス１１０７、ＲＯＭ１１６１を備えている。スレーブ・プロセッサ０・１２００〜３・１４００の構成もマスタ・プロセッサ１１００と同様である。
【０００５】
マスタ・プロセッサ１１００、スレーブ・プロセッサ０・１２００、スレーブ・プロセッサ１・１３００、スレーブ・プロセッサ２・１４００は、各々機能的に全く等価なものであり、システムの初期化時に役割が決定される。ただし、各プロセッサは常に同じ役割を担うものであり、例えばマスタ・プロセッサ１１００が、システムの初期化条件によってスレーブ・プロセッサになるようなことはない。
【０００６】
また、マスタ・プロセッサ１１００はローカルバス１０５０上では常にイニシエータ（命令送出側）となり、３つのスレーブ・プロセッサ０・１２００〜３・１４００はローカルバス１０５０上では常にターゲット（命令受取側）となる。なお、図２０では煩瑣を避けるため、スレーブ・プロセッサ１・１３００及びスレーブ・プロセッサ２・１４００の内部の図示を省略している。
【０００７】
図２０のシステムでは、マスタ・プロセッサ１１００とスレーブ・プロセッサ０・１２００〜２・１４００との間でデータ通信やレジスタ間通信などを行う。図中の点線を付した経路（１−１）、（１−２）、（１−３）は、データ通信の際の経路例である。その一方で、図２０のシステムでは、レジスタ間通信によってマスタ・プロセッサ１１００からスレーブ・プロセッサ０・１２００〜２・１４００に対して所定のコマンドを送信、或いはスレーブ・プロセッサ０・１２００〜２・１４００からマスタ・プロセッサ１１００に対して所定のステータスを送信することにより、プロセッサ間の制御を行う。
【０００８】
図２１は、他の従来例に係るマスタ・プロセッサ及びスレーブ・プロセッサの構成を示すブロック図である。
【０００９】
図２１において、上記図２０の説明と重複する部分は説明を省略する。マスタ・プロセッサ１１００のＣＰＵ１１０２は、スレーブ・プロセッサ０・１２００〜２・１４００の何れかからステータス送信が途絶えると、ハングアップが起きたとみなし、通信Ｉ／Ｆ１１１０に対してソフトウエア・リセットをかけた後、再設定を行い、ハングアップを引き起こしたスレーブ・プロセッサからリカバリを知らせるステータス送信を待つ。
【００１０】
一方、ハングアップを引き起こしたスレーブ・プロセッサでは、マスタ・プロセッサ１１００からコマンド送信が途絶えたことを検知して、同様に通信Ｉ／Ｆ１２１０に対してソフトウエア・リセットをかけた後、再設定を行い、マスタ・プロセッサ１１００に対してリカバリを知らせるステータス送信を行う。
【特許文献１】特開平５−３４６９０８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、上記図２０に示した従来技術では、各プロセッサ毎にプログラムＲＯＭを備えていたため、コストの点からもプリント基板の実装面積の点からも好ましいものではなかった。特にスレーブ・プロセッサが多量のプログラムを必要としない場合（即ちプログラムＲＯＭの容量を多量に必要としない場合）は、このことが顕著であった。
【００１２】
また、各プロセッサが備えるプログラムＲＯＭを単純に共有化し共有ＲＯＭを設置した場合、共有ＲＯＭに対するアクセス回数がスレーブ・プロセッサの数に比例して増えるため、短い初期化時間を要求されるシステムにおいてはプログラムＲＯＭの共有化は問題があった。
【００１３】
更に、共有ＲＯＭのプログラム容量を増加させないために、ブート・プログラムを全てのスレーブ・プロセッサで共通化して共有ＲＯＭに格納する場合、マスタ・プロセッサが通信相手のスレーブ・プロセッサを指定するためのスレーブ・プロセッサ識別コード（以下ｉｄｎｕｍと表記）を、各スレーブ・プロセッサ毎に個別にブート・プログラムの中に埋め込むことができなくなるため、ブート・プログラムの共通化は問題があった。
【００１４】
また、上記図２１に示した従来技術では、マスタ・プロセッサが周期的なレジスタ間通信並びにＣＰＵに対する割込み要求（例外処理要求）を用いて、スレーブ・プロセッサのハングアップのチェックを常に行っていたため、ソフトウエア処理の中断が周期的に起こり、ソフトウエア処理の効率を落とす要因となっていた。
【００１５】
また、通信効率の点においても、マスタ・プロセッサがスレーブ・プロセッサのハングアップを検知し、ハングアップからリカバーした後、ハングアップを引き起こしたスレーブ・プロセッサからリカバリを知らせるステータスが送信されてくるまでの期間、他のスレーブ・プロセッサとの通信を行うことができないため、プロセッサ間通信は効率が悪いものとなっていた。
【００１６】
本発明の第１の目的は、記憶手段に対するアクセス回数を最小限にし且つシステムの初期化時間を短縮化して記憶手段の共有化を可能とすることにある。
【００１７】
本発明の第２の目的は、従来のコマンド通信並びにステータス通信を行わずに、スレーブ・プロセッサが独自にハングアップ検出することを可能とすることにある。
【課題を解決するための手段】
【００１８】
上述の目的を達成するために、本発明は、１つのマスタ・プロセッサと少なくとも２つ以上のスレーブ・プロセッサを備えたマルチプロセッサシステムであって、前記各スレーブ・プロセッサにより共有され、プログラムのデータを格納可能な記憶手段と、前記各スレーブ・プロセッサから前記記憶手段へのアクセスに対し、アクセス権の管理を含む調停を行う調停手段とを備えることを特徴とする。
【００１９】
上述の目的を達成するために、本発明は、マスタ・プロセッサとスレーブ・プロセッサをローカルバスを介して接続したマルチプロセッサシステムであって、前記スレーブ・プロセッサにおける前記マスタ・プロセッサとの前記ローカルバスを介した通信の受け口となる受信手段がビジー状態である期間をカウントする計測手段と、前記計測手段のカウント値と所定のタイムアウト値を比較し、タイムアウトを検出する検出手段と、前記検出手段によるタイムアウト検出に基づきタイムアウト後の処理を制御する制御手段とを備えることを特徴とする。
【発明の効果】
【００２０】
本発明によれば、各スレーブ・プロセッサから記憶手段へのアクセスに対し、アクセス権の管理を含む調停を行うため、即ち、初期化後はアドレスが最小値であるスレーブ・プロセッサを優先して記憶手段へのアクセス権を与える調停を行い、初期化終了信号発行後はアドレスに関わらず記憶手段へのアクセス権を与える調停を行うため、スレーブ・プロセッサの数に関わらず記憶手段に対するアクセス回数を最小限にでき且つシステムの初期化時間を短縮化できる記憶手段共有化を実現することが可能となる。
【００２１】
また、本発明によれば、マスタ・プロセッサの通信相手となるスレーブ・プロセッサを指定するための識別情報を、各スレーブ・プロセッサが記憶手段のアドレス空間内の所定のアドレスにアクセスすることで取得させ、各スレーブ・プロセッサが識別情報を取得した後に初期化終了信号を発行するため、全てのスレーブ・プロセッサのブート・プログラムを共通化することができ、記憶手段のプログラム容量を最小限にすることができると共に、キャッシュ手段を用いた初期化時間の短縮化を図ることができる。
【００２２】
また、本発明によれば、記憶手段の当該アドレスに対するアクセスが２回目以降のアクセス（キャッシュ手段においてヒット）の場合は、キャッシュ手段のデータを当該スレーブ・プロセッサに出力し、記憶手段の当該アドレスに対するアクセスが初めてのアクセス（キャッシュ手段においてヒットしなかった）の場合は、記憶手段へのアクセスを行い記憶手段のデータを当該スレーブ・プロセッサに出力するため、スレーブ・プロセッサの数に関わらず記憶手段に対するアクセス回数を最小限にでき且つシステムの初期化時間を短縮化できる。
【００２３】
また、本発明によれば、記憶手段の当該アドレスに対するアクセスが２回目以降のアクセス（キャッシュ手段においてヒット）の場合は、キャッシュ手段からのデータ出力に合わせてストローブ信号を当該スレーブ・プロセッサに発行して直ちにリードサイクルを終了させ、記憶手段の当該アドレスに対するアクセスが初めてのアクセス（キャッシュ手段においてヒットしなかった）の場合は、所定のサイクル数を待機し記憶手段からのデータ出力完了後にストローブ信号を当該スレーブ・プロセッサに発行してリードサイクルを終了させるため、スレーブ・プロセッサの数に関わらず記憶手段に対するアクセス回数を最小限にでき且つシステムの初期化時間を短縮化できる。
【００２４】
また、本発明によれば、本発明のマルチプロセッサシステムを撮像装置に適用することにより、撮像装置は、製品の性質上、小型化や低消費電力化が求められると共に、電源投入から撮影が開始できるまでの時間も短いことが要求されるため、スレーブ・プロセッサ用の記憶手段の共有化は大きな効果を発揮することができる。
【００２５】
また、本発明によれば、スレーブ・プロセッサにおけるマスタ・プロセッサとのローカルバスを介した通信の受け口となる受信手段がビジー状態である期間のカウント値と所定のタイムアウト値を比較し、タイムアウトを検出し、タイムアウト検出に基づきタイムアウト後の処理を制御するため、従来のコマンド通信並びにステータス通信を行わずに、スレーブ・プロセッサが独自にハングアップ検出することが可能となる。
【００２６】
また、本発明によれば、受信手段がビジー状態である期間のカウント値を読み出し可能としているため、ハングアップしていることの確認を容易に行うことができる。
【００２７】
また、本発明によれば、タイムアウトが検出され、スレーブ・プロセッサ内部のＣＰＵバス獲得信号がアサート中の場合、ＣＰＵバス獲得信号をネゲートするため、無駄なトランザクションがＣＰＵバス上に発生することを抑制することができる。
【００２８】
また、本発明によれば、マスタ・プロセッサの通信相手のスレーブ・プロセッサがハングアップを引き起こした場合、該スレーブ・プロセッサからリカバリ通知が来るまでの期間、該スレーブ・プロセッサを除外して他のスレーブ・プロセッサと通信を続行するため、従来よりも効率のよいプロセッサ間通信が可能となる。
【００２９】
また、本発明によれば、本発明のマルチプロセッサシステムを撮像装置に適用することにより、撮像装置の連写性能を高める上で効果を発揮することができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明の実施の形態を図面に基づき説明する。
【００３１】
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係るマルチプロセッサシステムを構成するプロセッサの主要部の構成を示すブロック図である。
【００３２】
図１において、プロセッサ１０００は、ＣＰＵバス１を介して、通信Ｉ／Ｆ１０、割込みコントローラ３、ＣＰＵ２、ＣＰＵバス・アービタ４、ＤＭＡコントローラ１・４０、ＲＯＭコントローラ４１、メモリ・コントローラ５、ＣＰＵバス・マスタ・デバイス６、ＣＰＵバス・スレーブ・デバイス７を接続した構成となっている。また、ＲＯＭコントローラ４１は、ＲＯＭ６１と接続され、メモリ・コントローラ５は、外部のメインメモリ６０と接続され、通信Ｉ／Ｆ１０は、他のプロセッサとの通信を行うローカルバス５０と接続されている。
【００３３】
なお、上記ＣＰＵバス・マスタ・デバイス６及びＣＰＵバス・スレーブ・デバイス７は、ＣＰＵバス１上の様々なデバイスを代表して記してある。実際には、ＣＰＵバス１上には、タイマ、ＲＯＭコントローラ、シリアル通信Ｉ／Ｆ、カードＩ／Ｆ、パルス・ジェネレータ、ＤＭＡコントローラ、画像の形成処理や圧縮・伸張処理を行う画像処理部などのデバイスが存在している。
【００３４】
通信Ｉ／Ｆ１０の主要構成要素は、ＣＰＵバス・マスタ部１１、ＣＰＵバス・スレーブ部１２、ＦＩＦＯ（First In First Out）メモリ（以下ＦＩＦＯ）１３、ローカルバス・マスタ部１４、ローカルバス・スレーブ部１５、ローカルバスＩ／Ｆ部１６、レジスタ部１７である。ＣＰＵバス１とローカルバス５０は異なるクロック周波数で動作していることを前提としているため、ＦＩＦＯ１３は２ポートのメモリ素子（具体的にはフリップフロップであるが、容量によってはＳＲＡＭで構成することもあり得る）で構成されている。通信Ｉ／Ｆ１０は、２つの周波数ドメイン間の同期化を行う同期化部１８も備えている。
【００３５】
本プロセッサがマスタ・モードの時（即ち、マスタ・プロセッサとして動作する時）、通信Ｉ／Ｆ１０はＣＰＵバス１のスレーブ・デバイスとして振る舞い、同時にローカルバス５０のマスタ・デバイスとして振る舞う。例えば、マスタ・プロセッサのＣＰＵバス・マスタ・デバイス６から通信Ｉ／Ｆ１０を介してスレーブ・プロセッサへデータ転送を行う場合、ＣＰＵバス１、ＣＰＵバス・スレーブ部１２、ＦＩＦＯ１３、ローカルバス・マスタ部１５、ローカルバスＩ／Ｆ部１６、ローカルバス５０という経路を経て、スレーブ・プロセッサへとデータ転送が行われる。
【００３６】
一方、本プロセッサがスレーブ・モードの時（即ち、スレーブ・プロセッサとして動作する時）、通信Ｉ／Ｆ１０はＣＰＵバス１のマスタ・デバイスとして振る舞い、同時にローカルバス５０のスレーブ・デバイスとして振る舞う。例えば、マスタ・プロセッサから通信Ｉ／Ｆ１０を介してスレーブ・プロセッサのＣＰＵバス・スレーブ・デバイス７へデータ転送を行う場合、ローカルバス５０、ローカルバスＩ／Ｆ部１６、ローカルバス・スレーブ部１４、ＦＩＦＯ１３、ＣＰＵバス・マスタ部１１、ＣＰＵバス１という経路を経て、ＣＰＵバス・スレーブ・デバイス７へとデータ転送が行われる。
【００３７】
レジスタ部１７は、通信Ｉ／Ｆ１０の動作設定を行うためのレジスタを備えている。また、レジスタ部１７には２つの割込み要求（例外処理要求）ポートがある。ｃｏｍ＿ｉｎｔ１９は、プロセッサ内部の割込みコントローラ３を介してＣＰＵ２へ割込み要求を出力する。一方、ｌｏｃ＿ｓｔａｔ＿ｉｎｔ２０は、スレーブ・モードの時、マスタ・プロセッサに対して割込み要求を出力する。
【００３８】
図２は、プロセッサ間通信の動作の概略を示すブロック図である。
【００３９】
図２において、マスタ・プロセッサ１００とスレーブ・プロセッサ０・２００〜２・４００がローカルバス５０を介して接続されている。マスタ・プロセッサ１００は、通信Ｉ／Ｆ１１０、割込みコントローラ１０３、ＣＰＵ１０２を備えている。スレーブ・プロセッサ０・２００〜２・４００は、通信Ｉ／Ｆ２１０、割込みコントローラ２０３、ＣＰＵ２０２、ＣＰＵバス・スレーブ・デバイス２０７を備えている。
【００４０】
マスタ・プロセッサ１００、スレーブ・プロセッサ０・２００、スレーブ・プロセッサ１・３００、スレーブ・プロセッサ２・４００は、各々図１に示したプロセッサ１０００を用いており（即ち、各々機能的に全く等価なものであり）、システムの初期化時に役割が決定される。ただし、各プロセッサは常に同じ役割を担うものであり、例えばマスタ・プロセッサ１００が、システムの初期化条件によってスレーブ・プロセッサになるようなことはない。また、マスタ・プロセッサ１００はローカルバス５０上では常にイニシエータとなり、３つのスレーブ・プロセッサ０・２００〜２・４００はローカルバス５０上では常にターゲットとなる。
【００４１】
なお、図２では煩瑣を避けるため、スレーブ・プロセッサ１・３００及びスレーブ・プロセッサ２・４００の内部の図示を省略している。同様に、マスタ・プロセッサ１００、スレーブ・プロセッサ０・２００についても、説明に不要な個所は省略して図示している。また、マスタ・プロセッサ内部の各部の符号は図１のプロセッサ１０００内部の各部の符号に１００を加えたものであり、スレーブ・プロセッサ０・２００内部の各部の符号は図１のプロセッサ１０００内部の各部の符号に２００を加えたものである。
【００４２】
プロセッサ間のデータ通信はメモリ間転送の形で行われる。例えばマスタ・プロセッサ  １００のＣＰＵ１０２が通信のマスタとなり、マスタ・プロセッサ１００の通信Ｉ／Ｆ１１０、ローカルバス５０、スレーブ・プロセッサ０・２００の通信Ｉ／Ｆ２１０を介してスレーブ・プロセッサ０・２００のＣＰＵバス・スレーブ・デバイス２０７に対して書き込みや読み出しが行われる。このデータ通信の経路は、図２の点線を付した経路、即ち、マスタ・プロセッサ１００のＣＰＵ１０２を起点に（１−１）、（１−２）、（１−３）を経て、スレーブ・プロセッサ０・２００のＣＰＵバス・スレーブ・デバイス２０７を終点とする経路である。
【００４３】
他も同様にして、例えばマスタ・プロセッサ０・１００のＤＭＡコントローラ（不図示）が通信のマスタとなり、スレーブ・プロセッサ０・２００のメインメモリ（不図示）のデータをマスタ・プロセッサ１００のメインメモリ（不図示）にＤＭＡ転送するようなことも行うことができる。
【００４４】
プロセッサ間でデータ通信を行う際のターゲットの指定は、通信Ｉ／Ｆ内部のｉｄｎｕｍレジスタによって行う。本実施の形態では、ターゲット指定用として各プロセッサにＩＤナンバー（識別情報）が設定されている。本実施の形態における具体的なＩＤナンバーの例としては、マスタ・プロセッサ１００を「７」、スレーブ・プロセッサ０・２００を「０」、スレーブ・プロセッサ１・３００を「１」、スレーブ・プロセッサ２・４００を「２」と設定している。
【００４５】
本実施の形態では、上記設定により、スレーブ・プロセッサがとりうるＩＤナンバーの最大値は６で、最大７個のスレーブ・プロセッサがローカルバス５０に接続できる。そして、マスタ・プロセッサ１００のｉｄｎｕｍレジスタ１１７ａにターゲットのＩＤナンバーを書き込むことでターゲットを指定することができる。例えばｉｄｎｕｍレジスタ１１７ａの値が０の時は、スレーブ・プロセッサ０・２００がマスタ・プロセッサの通信ターゲットとなる。
【００４６】
また、プロセッサ間でデータ通信を行う際のアドレス指定は、通信Ｉ／Ｆ内部のマスタ・ベースアドレスレジスタとスレーブ・ベースアドレスレジスタによって行う。
【００４７】
図３は、プロセッサ間通信のメモリマップ・イメージを示す図である。
【００４８】
図３において、マスタ・プロセッサ１００から見たスレーブ・プロセッサのターゲット・メモリ領域は、０ｘ４０００＿００００番地から０ｘ４０ｆｆ＿ｆｆｆｆに割り当てられている。このため、マスタ・プロセッサ１００のマスタ・ベースアドレスレジスタ１１７ｂには０ｘ４０００＿００００を指定する。
【００４９】
一方、スレーブ・プロセッサ内部のターゲット・メモリ領域は、スレーブ・プロセッサのスレーブ・ベースアドレスレジスタに指定する。例えば、スレーブ・プロセッサ０・２００のスレーブ・ベースアドレスレジスタ２１７ｃの値が０ｘｅ０００＿００００で、マスタ・プロセッサ１００のＣＰＵ１０２がスレーブ・プロセッサ０・２００のメモリ領域を読み出すために、アドレス０ｘ４０８０＿００００を発行した場合、実際にはスレーブ・プロセッサ０・２００の０ｘｅ０８０＿００００番地が読み出されることとなる。
【００５０】
本マルチプロセッサシステムには、データ通信の他にレジスタ間通信の機能がある。レジスタ間通信は、通信Ｉ／Ｆ内部のコマンドレジスタとステータスレジスタによって行う。マスタ・プロセッサ１００のｉｄｎｕｍレジスタ１１７ａに０を書き込んで通信ターゲットとしてスレーブ・プロセッサ０・２００を指定し、マスタ・プロセッサ１００のＣＰＵ１０２がマスタ・プロセッサ１００のコマンドレジスタ１１７ｄに対して書き込みを行うと、ローカルバス５０を介して、スレーブ・プロセッサ０・２００の通信Ｉ／Ｆ２１０のコマンドレジスタ２１７ｄにデータが書き込まれる。
【００５１】
図４は、レジスタ間通信の通信経路を示すブロック図である。
【００５２】
図４において、図２と同様に説明に不要な個所は省略して図示している。また、符号のつけ方も図２と同様である。上記のコマンドレジスタの通信経路は、図４の点線を付した経路でいうと、マスタ・プロセッサ１００のＣＰＵ１０１を起点に（１−１）、（１−２）、（１−３）を経て、スレーブ・プロセッサ０・２００のレジスタ部２１７を終点とする経路である。これを受けてスレーブ・プロセッサ０・２００の内部では、通信Ｉ／Ｆ２１０から割込みコントローラ２０３を介して、ＣＰＵ２０２に対して割込み要求が伝えられる。
【００５３】
そして、ＣＰＵ２０２は、通信Ｉ／Ｆ２１０のレジスタ部２１７のコマンドレジスタ２１７ｄを読み出し、コマンドに応じた処理を行う。図４の点線を付した経路でいうと、スレーブ・プロセッサ０・２００のレジスタ部２１７を起点に（２）を経てＣＰＵ２０２へ至る経路と、ＣＰＵ２０２を起点に（３）を経てレジスタ部２１７を終点とする経路である。
【００５４】
一方、スレーブ・プロセッサ０・２００において、ＣＰＵ２０２が通信Ｉ／Ｆ２１０のステータスレジスタ２１７ｅに書き込みを行うと、スレーブ・プロセッサ０・２００の通信Ｉ／Ｆ２１０からマスタ・プロセッサ１００の割込みコントローラ１０３に対して、割込み要求信号ｌｏｃ＿ｓｔａｔ＿ｉｎｔ２１８がアサートされる。マスタ・プロセッサ１００では、この割込み要求がＣＰＵ１０２に伝えられる。図４の点線を付した経路でいうと、スレーブ・プロセッサ０・２００のＣＰＵ２０２を起点に（３）を経てレジスタ部２１７へ至る経路と、レジスタ部２１７を起点に（４）を経てマスタ・プロセッサ１００のＣＰＵ１０２を終点とする経路である。
【００５５】
これを受けてＣＰＵ１０２は、ｉｄｎｕｍレジスタ１１７ａに０を書き込んで通信ターゲットとしてスレーブ・プロセッサ０・２００を指定し、通信Ｉ／Ｆ１１７のステータスレジスタ１１７ｅを読み出す。通信Ｉ／Ｆ１１０は、ステータスレジスタ１１７ｅのリード・アクセスを検知すると、ローカルバス５０を介してスレーブ・プロセッサ０・２００のステータスレジスタ２１７ｅの値を読み出し、それをマスタ・プロセッサ１００のＣＰＵ１０２に出力する。そして、ＣＰＵ１０２は、読み出したステータスに応じた処理を行う。この読み出しの経路は、スレーブ・プロセッサ０・２００のレジスタ部２１７を起点に（１−３）、（１−２）、（１−１）を経て、マスタ・プロセッサ１００のＣＰＵ１０２を終点とする経路である。
【００５６】
なお、上記のコマンドやステータスは自由に定義することが可能であり、従来技術の説明で述べたような、通信の上位プロトコルの役割を形成することができる。
【００５７】
図５は、ローカルバス５０のプロトコルを示すタイミング・ダイアグラムである。
【００５８】
図５において、通信の開始時にはマスタ・プロセッサ１００からｌｏｃ＿ｆｒａｍｅ＿ｌがアサートされる。最初の２サイクルはアドレス・フェーズであり、ターゲットのスレーブ・プロセッサのＩＤナンバーや通信のデスティネーション・アドレスなどが発行される。これを受けて、ターゲットのスレーブ・プロセッサはｌｏｃ＿ｄｅｖｓｅｌ＿ｌをアサートし、マスタ・プロセッサ１００に応答する。
【００５９】
次いで、データの授受の準備が完了すると、ターゲットのスレーブ・プロセッサはｌｏｃ＿ｔｒｄｙ＿ｌをアサートし、データの送受信が開始する。そして、通信終了の１サイクル前になると、マスタ・プロセッサがｌｏｃ＿ｆｒａｍｅ＿ｌをネゲートし、次のサイクルで通信が終了する。
【００６０】
図６は、複数のスレーブ・プロセッサでＲＯＭを共有する構成を示すブロック図である。
【００６１】
図６において、上記従来例の図２０でスレーブ・プロセッサ０・１２００〜２・１４００に各々接続していた３つのＲＯＭ１２６１〜１４６１を１つの共有ＲＯＭ９６１として設置すると共に、共有ＲＯＭ９６１を共有ＲＯＭアクセス調停装置９００を介してスレーブ・プロセッサ０・２００〜２・４００に接続している。共有ＲＯＭ９６１は、従来のＲＯＭ１２６１〜１４６１と同等のものであり、共有化されてもＲＯＭ容量は従来の１つ分と等しい。なお、図６では、マスタ・プロセッサ１００、スレーブ・プロセッサ０・２００〜２・４００の内部については、煩瑣を避けるため省略している。
【００６２】
図７は、共有ＲＯＭアクセス調停装置９００の構成を示すブロック図である。
【００６３】
図７において、共有ＲＯＭアクセス調停装置９００は、キャッシュ回路９１０、調停部９２０、タイミング制御回路９３０、ｉｄｎｕｍ生成回路９４０、マルチプレクサ９５３〜９５８、Ｄフリップフロップ群９５０〜９５２、若干の論理素子などを備えている。なお、図７ではマルチプレクサをＭと略記する。また、共有ＲＯＭアクセス調停装置９００は、内部に３チャンネルの入出力を備えており、チャンネル０がスレーブ・プロセッサ０・２００と、チャンネル１がスレーブ・プロセッサ１・３００と、チャンネル２がスレーブ・プロセッサ２・４００と各々接続される。
【００６４】
まず初めに、共有ＲＯＭアクセス調停装置９００の動作の概略を説明する。本実施の形態のマルチプロセッサシステムでは、スレーブ・プロセッサ０・２００〜２・４００のＲＯＭデータ（即ちプログラムデータ）は共通で、同一のものが用いられる。即ち、共有ＲＯＭ９６１の同一アドレスに対して各々合計３回のアクセスが行われる。
【００６５】
また、１つのスレーブ・プロセッサに着目した場合、プログラム・フェッチはシリアルに（即ちアドレスがジャンプすることがなく連続に）行われる。パワーオン・リセット後のスレーブ・プロセッサの動作は（即ちブート・プログラムの内容は）、スレーブ・プロセッサ内部のクロックの設定やメモリ・コントローラの設定が行われた後、共有ＲＯＭ９６１からメインメモリに対してプログラム（即ちＲＯＭデータ）のＤＭＡ転送が行われる。この間、ＲＯＭアドレスは連続してアクセスされ、ＤＭＡ転送の終了後にメインメモリのプログラムエリアにジャンプするようなブート・プログラムになっている。
【００６６】
キャッシュ回路９１０は、スレーブ・プロセッサが初めてアクセスする共有ＲＯＭ９６１のＲＯＭアドレスのデータを蓄えておくためのものである。例えばスレーブ・プロセッサ０・２００が初めて或るＲＯＭアドレスにアクセスした場合、共有ＲＯＭ９６１へのアクセスが行われるが、その後、スレーブ・プロセッサ１・３００、スレーブ・プロセッサ２・４００が該ＲＯＭアドレスにアクセス（２回目以降のアクセス）した際には、キャッシュ回路９１０からデータが読み出される。
【００６７】
調停部９２０は、共有ＲＯＭ９６１に対する複数の（各スレーブ・プロセッサの）ＲＯＭアクセスを調停するためのものであり、ブートモードとノーマルモードの２種類の調停モードを備えている。タイミング制御回路９３０は、後述するスレーブ・プロセッサ０・２００〜２・４００に対するリード・ストローブ信号ｒｄ＿ｓｔｒｂ０〜２の生成や、キャッシュ回路９１０への書き込み制御などを行う。
【００６８】
スレーブ・プロセッサ０・２００〜２・４００のｉｄｎｕｍ（上述のとおりマスタ・プロセッサ１００がプロセッサ間通信のターゲットを指定する際のＩＤナンバー）は、パワーオン・リセット後は全て０となっている。この状態では正常なプロセッサ間通信が行えないため、 本実施の形態のマルチプロセッサシステムでは、各スレーブ・プロセッサは、見かけ上、共有ＲＯＭ９６１のアドレス空間にある所定のアドレスへアクセスしてｉｄｎｕｍを取得する。
【００６９】
ｉｄｎｕｍ生成回路９４０は、このｉｄｎｕｍの取得処理を行うためのものであり、上記所定のアドレス（全スレーブ・プロセッサに共通の１つのアドレス）が入力されたことを検知すると、各スレーブ・プロセッサに応じたｉｄｎｕｍを生成する。本実施の形態では、各チャンネルのｉｄｎｕｍは、チャンネル番号と等しい値が生成されるようになっている。即ち、ｉｄｎｕｍ生成回路９４０の出力信号ｉｄｎｕｍ０、ｉｄｎｕｍ１、ｉｄｎｕｍ２の値は、各々０、１、２となっている。このように、所定のアドレスに対するリード・アクセス（見かけ上の）により、各スレーブ・プロセッサのｉｄｎｕｍを取得させることによって、全スレーブ・プロセッサのブート・プログラムを共通化することができる。
【００７０】
同時に、ｉｄｎｕｍ生成回路９４０は、マルチプレクサ９５６〜９５８の切り換え制御も行う。例えばａ０［１５：０］が上記所定のアドレスになると、ｉｄｎｕｍ＿ｓｅｌ０がＨｉとなる。マルチプレクサ９５６は、ｉｄｎｕｍ＿ｓｅｌ０がＨｉとなるとｉｄｎｕｍ０を出力し、ｉｄｎｕｍ＿ｓｅｌ０がＬｏｗの時はキャッシュ回路９１０の出力データであるｈｉｔ０の値に応じて決まるデータを出力し、ｈｉｔ０がＨｉの時はキャッシュ回路９１０の出力データであるｄｏ０［１５：０］を出力し、ｈｉｔ０がＬｏｗの時は共有ＲＯＭ９６１の出力データであるｒｏｍ＿ｒｄ＿ｄａｔａ［１５：０］を出力する。マルチプレクサ９５７及び９５８の切り換え動作についても同様である。
【００７１】
更に、ｉｄｎｕｍ生成回路９４０は、スレーブ・プロセッサ０・２００〜２・４００の全てがｉｄｎｕｍを取得し終わったことを検知すると、調停部９２０に対してブート・シーケンス終了信号ｂｏｏｔ＿ｅｎｄをアサートする。これを受けて調停部９２０は、ブートモードを終了し、ノーマルモードへ移行する。
【００７２】
なお、マスタ・プロセッサ１００では、従来の固定サイクルによるＲＯＭアクセスが行われている。
【００７３】
次に、共有ＲＯＭアクセス調停装置９００の各部の構成及び動作の詳細を説明する。
【００７４】
図８は、キャッシュ回路９１０の詳細構成を示すブロック図である。
【００７５】
図８において、キャッシュ回路９１０は、３Ｒ−１Ｗバッファ９１１、アドレス比較器０・９１２〜２・９１４を備えている。３Ｒ−１Ｗバッファ９１１のポート０〜２は読み出し専用で、ポート３は書き込み専用である。３Ｒ−１Ｗバッファ９１１はデータ幅２９ｂｉｔ、ワード数８ワードで、アクセスは１６ｂｉｔのアドレスのうち下位３ｂｉｔによって行われる。例えばポート０ならばａ０［２：０］がアドレスとなる。
【００７６】
図９は、３Ｒ−１Ｗバッファ９１１のメモリマップ・イメージを示す図である。
【００７７】
図９において、２９ｂｉｔのデータは、１６ｂｉｔのＲＯＭデータ部と１３ｂｉｔのアドレス部から構成される。ＲＯＭデータ部には、共有ＲＯＭ９６１から出力されるＲＯＭデータｄｉ３［１５：０］が格納され、アドレス部には、共有ＲＯＭ９６１の読み出しアドレスの上位１３ｂｉｔであるａ３［１５：３］が格納される。
【００７８】
キャッシュ回路９１０に対する読み出しの際には、上記２９ｂｉｔのデータのうちアドレス部ａｏ０［１５：３］〜ａｏ２［１５：３］が各々アドレス比較器０・９１２〜２・９１４へ出力され、該出力データが各々読み出しアドレスと等しい場合にはヒット信号ｈｉｔ０〜２がＨｉとなる。一方、ＲＯＭデータ部ｄｏ０［１５：０］〜ｄｏ２［１５：０］は、出力データとして共有ＲＯＭアクセス調停装置９００のマルチプレクサ９５６〜９５８へ出力される。なお、ヒット信号は、キャッシュ回路９１０においてヒットした（当該ＲＯＭアドレスに対する２回目以降のアクセス）状態（Ｈｉ）、ヒットしなかった（当該ＲＯＭアドレスに対する初めてのアクセス）状態（Ｌｏ）を示す信号である。
【００７９】
上記図７に戻り、共有ＲＯＭアクセス調停装置９００のＤフリップフロップ群９５０は、サイクル調整用の素子であり、キャッシュ回路９１０へのアクセスに１サイクルかかるため、スレーブ・プロセッサからの入力信号を各々ディレイさせるためのものである。
【００８０】
調停部９２０へのリクエスト信号ｒｏｍ＿ｒｅｑ０〜２は、スレーブ・プロセッサ０・２００〜２・４００からアクセスがあり、且つキャッシュ回路９１０でヒットしなかった場合（以降「ミスした場合」と表記）にアサートされる。例えばチャンネル０の場合、ｃｓ０＿１ｄ＿ｎとｈｉｔ０が共にＬｏｗの時にアサートされる。このようにして、初めてアクセスするアドレスに対してのみ共有ＲＯＭ９６１をアクセスする。
【００８１】
調停部９２０は、リクエスト信号ｒｏｍ＿ｒｅｑ０〜２のアサートを受けて、共有ＲＯＭ９６１へのアクセスの調停を行う。調停部９２０の調停モード（調停方式）には、ブートモード（発行されたＲＯＭアドレスが最小値であるスレーブ・プロセッサを優先して共有ＲＯＭ９６１へのアクセス権を与える第一の調停方式）と、ノーマルモード（発行されたＲＯＭアドレスに関わらず共有ＲＯＭ９６１へのアクセス権を与える第二の調停方式）の２種類がある。パワーオン・リセット（初期化）後はブートモードによる調停を行い、ブートシーケンス終了信号（初期化終了信号）が発行された後はノーマルモードによる調停を行う。
【００８２】
図１０は、調停部９２０の構成を示すブロック図である。
【００８３】
図１０において、調停部９２０は、調停回路９２１、マスク信号生成回路９２２、論理素子９６１〜９６３を備えている。
【００８４】
調停回路９２１は、ローテーション・アルゴリズムによる調停を行う回路である。マスク信号生成回路９２２は、調停回路９２１の前段に論理素子９６１〜９６３を介して配置されており、マスク信号ｒｅｑ＿ｍａｓｋ０＿ｎ〜ｒｅｑ＿ｍａｓｋ２＿ｎを生成する回路である。
【００８５】
まず、ブートモードの時は、マスク信号生成回路９２２は、共有ＲＯＭ９６１へのアドレス値に応じて、リクエスト信号ｒｏｍ＿ｒｅｑ０〜２をマスクして調停回路９２１へ出力する。即ち、マスク信号生成回路９２２は、アドレス入力ａ０［１５：０］〜ａ２［１５：０］のうち、アドレス値が最小値であるチャンネルのマスク信号をＨｉにし、それ以外のチャンネルのマスク信号をＬｏｗにする。これにより、マスク信号がＬｏｗになったチャンネルのリクエスト信号はマスクされる。なお、アドレス値の最小値が複数ある場合は、該当する全てのチャンネルのマスク信号をＨｉにし、調停の対象とする。
【００８６】
この結果、共有ＲＯＭ９６１へのアドレス発行がシリアル（連続的）になると共にキャッシュ回路９１０に一度キャッシュされたデータが、まだ読み出しを行っていないチャンネルがあるにも関わらず上書きされてしまうことを防いでいる。
【００８７】
一方、ノーマルモードの時は、マスク信号生成回路９２２は、マスク信号ｒｅｑ＿ｍａｓｋ０＿ｎ〜ｒｅｑ＿ｍａｓｋ２＿ｎを常にＨｉにする。この結果、調停部９２０の調停アルゴリズムは、単純なローテーションとなる。
【００８８】
ブートモードからノーマルモードの切り換えは、上記のとおりｉｄｍｕｎ生成回路９４０からブート・シーケンス終了信号ｂｏｏｔ＿ｅｎｄをアサートすることによって行われる。このようにして、同一期間に同一アドレス空間に対するシーケンシャル・リード・アクセスが集中するブート時と、それ以降の時とで調停方式を切り換えるようになっている。
【００８９】
上記図７に戻り、調停部９２０の調停結果信号ａｒｂ＿ｏｕｔ［１：０］は、マルチプレクサ９５３〜９５５へ出力される。これによって調停部９２０の調停結果に応じたアドレス値が選択され、共有ＲＯＭ９６１へ出力される。なお、Ｄフリップフロップ群９５１は、サイクル調整用の素子であり、調停部９２０における調停動作に１サイクルかかるため、Ｄフリップフロップ群９５０からの出力を各々ディレイさせるためのものである。
【００９０】
図１１は、共有ＲＯＭアクセス調停装置９００内部のタイミング・ダイアグラムである。
【００９１】
図１１において、煩瑣を避けるため、チャンネル２の信号を省略している。なお、ａｏ０［１５：３］、ａｏ１［１５：３］は、図８で示したキャッシュ回路９１０の内部信号であり、３Ｒ−１Ｗバッファ９１１から読み出されたデータのアドレス部である。
【００９２】
図１１のタイミング・ダイアグラムについて図１２のフローチャートを参照しながら説明する。
【００９３】
まず、ＲＯＭアドレスａｄｄｒ１、ａｄｄｒ２に対するアクセスは、キャッシュ回路９１０においてヒットしたため（当該ＲＯＭアドレスに対する２回目以降のアクセスであるため）、チャンネル０、チャンネル１ともに共有ＲＯＭ９６１からではなくキャッシュ回路９１０からデータを読み出し、データを当該スレーブ・プロセッサに出力し、短いサイクル数でアクセスを終了している（ステップＳ１）。
【００９４】
即ち、キャッシュ回路９１０においてヒットした場合、キャッシュ回路９１０からのデータ出力に合わせてリード・ストローブ信号を当該スレーブ・プロセッサに発行して直ちにリードサイクルを終了させる。
【００９５】
リード・ストローブ信号ｒｄ＿ｓｔｒｂ０〜２は、各々スレーブ・プロセッサ０・２００〜２・４００に対するストローブ信号であり、タイミング制御回路９３０において生成される。その生成条件は２つある。１つは、ｈｉｔ０〜２がアサートされた次のサイクルである。もう１つは、ｒｏｍ＿ｒｅｑ０〜２がアサートされ、且つ調停部９２０の調停結果ａｒｂ＿ｏｕｔ［１：０］によって共有ＲＯＭ９６１へのアクセス権を与えられてから固定サイクルＴａｃ後（図１１ではＴａｃ＝５サイクル）である。
【００９６】
即ち、前者がキャッシュ回路９１０においてヒットしたときの生成条件であり、後者がキャッシュ回路９１０においてミスしたときの生成条件である。スレーブ・プロセッサ０・２００〜２・４００は、リード・ストローブ信号ｒｄ＿ｓｔｒｂ０〜２のアサートによってデータを取り込み、且つ現在のリードサイクルを終了させる。
【００９７】
次に、ＲＯＭアドレスａｄｄｒ３に対するアクセスは、まずチャンネル０によって行われるが、キャッシュ回路９１０においてミスしたため（当該ＲＯＭアドレスに対する初めてのアクセスであるため）、共有ＲＯＭ９６１へのリード・アクセスを行い、共有ＲＯＭ９６１から読み出したデータを当該スレーブ・プロセッサに出力する。そして、タイミング制御回路９３０は、上記固定サイクルＴａｃ後にリード・ストローブ信号ｒｄ＿ｓｔｒｂ０をアサートすると共にキャッシュ回路９１０へのライト・イネーブル信号ｗｅ３＿ｎもアサートする。これによってキャッシュ回路９１０の内容が更新される。この間、チャンネル１からもＲＯＭアドレスａｄｄｒ３に対するアクセスが発生するが、キャッシュ回路９１０の内容の更新を受けて、チャンネル１はキャッシュ回路９１０からデータが読み出される（ステップＳ１１）。
【００９８】
即ち、キャッシュ回路９１０においてミスした場合、固定サイクルＴａｃ（所定のサイクル数）を待機し、共有ＲＯＭ９６１からのデータ出力が完了してからリード・ストローブ信号を当該スレーブ・プロセッサに発行してリードサイクルを終了させる。
【００９９】
次に、ＲＯＭアドレスａｄｄｒ４に対するアクセスは、チャンネル０、チャンネル１同時に発生するが、調停部９２０によってチャンネル１に共有ＲＯＭ９６１へのアクセス権が与えられる。以降は、ＲＯＭアドレスａｄｄｒ３に対するアクセスと同様のメカニズムでデータアクセスが行われる（ステップＳ２１）。
【０１００】
なお、上記固定サイクルＴａｃは、外部ピンｔａｃ＿ｐｉｎ［１：０］によって３〜６サイクルの４段階に変化可能となっている。
【０１０１】
ｉｄｎｕｍの生成は上述した通りであるが、ｉｄｎｕｍの取得が完了したスレーブ・プロセッサは、上述のレジスタ間通信のステータス送信機能を用いて、マスタ・プロセッサ１００に対してブート・シーケンスの完了を通知する。マスタ・プロセッサ１００は、全てのスレーブ・プロセッサからブート・シーケンスの完了が通知されると、プロセッサ間通信を開始する。
【０１０２】
以上説明したように、本実施の形態によれば、スレーブ・プロセッサの数に関わらず共有ＲＯＭ９６１に対するアクセス回数を最小限にでき且つシステムの初期化時間を短縮化できるＲＯＭ共有化を実現することが可能となる。また、共有ＲＯＭ９６１のアドレス空間にある所定のアドレスに対するリード・アクセス（見かけ上の）により、各スレーブ・プロセッサのｉｄｎｕｍを取得させることによって、全てのスレーブ・プロセッサのブート・プログラムを共通化することができる。これにより、共有ＲＯＭ９６１のプログラム容量を最小限にすることができると共に、キャッシュ回路９１０を用いた初期化時間の短縮化を図ることができる。
【０１０３】
［第２の実施の形態］
図１３は、本発明の第２の実施の形態に係る撮像装置の構成を示すブロック図である。
【０１０４】
図１３において、撮像装置５００は、上述した第１の実施の形態を適用した画像処理部５０３を備えたものであり、高画素の固体撮像素子（例えば１０００万画素のＣＣＤ）を用いて秒間８フレームといった高速連写を実現するデジタルカメラとして構成されている。
【０１０５】
スイッチ群５１１は、ＡＥ（Auto Exposure）のモード、露出設定、連写モードをはじめとする、撮影に関わる様々な設定情報等をカメラＣＰＵ５０１へ出力する。特にレリーズスイッチが出力する信号は、ＡＥやＡＦ（Auto Focus）の開始トリガや、撮影の開始トリガとなる。撮像部５１０は、Ａ／Ｄコンバータ５２０へ画像データを出力するだけでなく、ＡＥやＡＦの情報をカメラＣＰＵ５０１へ出力する。これらの各種信号を基に、カメラＣＰＵ５０１は、撮像部５１０、メカ群５１２、表示部５１３並びに画像処理部５０３の各部を制御する。また、メインメモリ５０２には、カメラＣＰＵ５０１により実行されるプログラムやデータが格納されている。
【０１０６】
画像処理部５０３は、４チャンネルのＡ／Ｄコンバータ５２０、データ分配部５２１、４つのプロセッサ１００、２００、３００、４００、共有ＲＯＭアクセス調停装置９００、共有ＲＯＭ９６１が主要構成要素である。これら４つのプロセッサは、各々、第１の実施の形態で述べたマスタ・プロセッサ１００、スレーブ・プロセッサ０・２００、スレーブ・プロセッサ１・３００、スレーブ・プロセッサ２・４００に相当するもので、各々機能的に全く等価なものである。そして、プロセッサ間通信のためのローカルバス５０で接続されていることも第１の実施の形態と同様で、且つ通信方法やハングアップ・リカバリの方法も第１の実施の形態と同様である。
【０１０７】
撮像部５１０内部にある固体撮像素子は、４チャンネル（ライン）読み出しが可能なもので、Ａ／Ｄコンバータ５２０も４チャンネル分を具備し、データ分配部５２１に対しても４チャンネル分のデジタル画像データが出力される。
【０１０８】
プロセッサ１００〜４００による画像処理は、フレーム単位で処理を行い、並列化している。即ち、連写時の１フレーム目をマスタ・プロセッサ１００が、２フレーム目をスレーブ・プロセッサ０・２００が、３フレーム目をスレーブ・プロセッサ１・３００が、４フレーム目をスレーブ・プロセッサ２・４００が各々処理する。以降のフレームについても同様に処理を行い、プロセッサ１００〜４００はフレーム単位にパイプライン的な動作を行う。データ分配部５２１は、Ａ／Ｄコンバータ５２０の出力データを一旦蓄え、フレーム単位に各プロセッサへ分配する機能を担う。
【０１０９】
なお、本実施の形態では、フレーム単位で並列化を行っているが、他の単位で並列化する方法もある。例えば、１フレームの画像を８ラインのストライプ単位に分割し、このストライプ単位にプロセッサ１００〜４００に画像を分配し並列化を行う方法や、１本のストライプを更に細かく分割した横３２画素×縦８画素のタイルの単位で並列化する方法である。この方法を採れば、データ分配部５２１に内蔵しているデータバッファの容量を削減することが可能な場合もある。
【０１１０】
図１４は、プロセッサ１０００（図１３のプロセッサ１００〜４００）の主要部の構成を示すブロック図である。
【０１１１】
図１４において、プロセッサ１０００は、ＣＰＵバス１を介して、通信Ｉ／Ｆ１０、割込みコントローラ３、ＣＰＵ２、ＣＰＵバス・アービタ４、メモリ・コントローラ５、ＤＭＡコントローラ１・４０、ＤＭＡコントローラ２・４５、タイマ４７を接続した構成となっている。また、メモリ・コントローラ５には、メインメモリ６０が接続され、ＤＭＡコントローラ１・４０には、ＲＯＭコントローラ４１、カードＩ／Ｆ４２、シリアル通信Ｉ／Ｆ４３、外部デバイスＩ／Ｆ４４が接続され、ＤＭＡコントローラ２・４５には、画像処理部４６が接続されている。
【０１１２】
図１４は、上記図１に対して、ＣＰＵバス・マスタ・デバイス６、ＣＰＵバス・スレーブ・デバイス７を削除し、ＤＭＡコントローラ２・４５、タイマ４７等を追加した点において相違する。その他の要素は、上記図１の対応するものと同一なので、説明を省略する。図１４における図１との共通個所については図１と同じ符号を用いている。なお、メインメモリ６０及びＲＯＭ６１は、図１３では図１４の符号に各プロセッサの符号の数字を足した形で表している（例えば、マスタ・プロセッサ１００に接続されるメインメモリの符号は１６０、スレーブ・プロセッサ０・２００に接続されるメインメモリの符号は２６０、など）。
【０１１３】
ＲＯＭコントローラ４１、カードＩ／Ｆ４２、シリアル通信Ｉ／Ｆ４３、外部デバイスＩ／Ｆ４４は、ＤＭＡコントローラ１・４０を介してＣＰＵバス１と接続され、画像処理部４６はＤＭＡコントローラ２・４５を介してＣＰＵバス１と接続されている。また、タイマ４７もＣＰＵバス１と接続されている。このうちＲＯＭコントローラ４１とタイマ４７は、プロセッサ１００〜４００の全てで使用されるが、他のモジュールについてはマスタ・プロセッサ１００のみで使用され、スレーブ・プロセッサ０・２００〜２・４００では休止しており、外部との接続もなされていない。
【０１１４】
各プロセッサの画像処理部４６の内部では、図１３のデータ分配部５２１より入力された画像データに対して、ホワイトバランスや色変換等の様々な画像形成処理と、形成後の画像を圧縮する画像圧縮処理とが行われる。処理後のデータはメモリ・コントローラ５を介して一旦メインメモリ６０へ蓄えられる。
【０１１５】
図１３のマスタ・プロセッサ１００は、同じく図１３のスレーブ・プロセッサの各々のメインメモリ２６０、３６０、４６０に蓄えられた画像データを、ローカルバス５０を介してメインメモリ６０（図１３では１６０）に転送する。そして、メインメモリ６０へ蓄えられた画像データは、ファイルとして形成された後、カードＩ／Ｆ４２を介して外部の記録媒体６２へ記録される。もしくは、画像データは、外部の記録媒体６２には記録せず、外部デバイスＩ／Ｆ４４を介して外部のパーソナルコンピュータ６４等に直接送信される。また、シリアル通信Ｉ／Ｆ４３は、カメラＣＰＵ５０１との通信に用いられる。
【０１１６】
以上説明したように、本実施の形態によれば、撮像装置５００の画像処理部５０３に第１の実施の形態の各プロセッサを搭載することで、第１の実施の形態と同様の効果を得ることができる。特に、撮像装置は、製品の性質上、小型化や低消費電力化が求められると共に、電源投入から撮影が開始できるまでの時間も短いことが要求されるため、スレーブ・プロセッサ用ＲＯＭの共有化は大きな効果を発揮することができる。
【０１１７】
［第３の実施の形態］
図１５は、本発明の第３の実施の形態に係るプロセッサの主要部の構成を示すブロック図である。
【０１１８】
図１５において、プロセッサ１０００は、ＣＰＵバス１を介して、通信Ｉ／Ｆ１０、割込みコントローラ３、ＣＰＵ２、ＣＰＵバス・アービタ４、メモリ・コントローラ５、ＣＰＵバス・マスタ・デバイス６、ＣＰＵバス・スレーブ・デバイス７を接続した構成となっている。
【０１１９】
図１５は、上記図１に対して、ＤＭＡコントローラ１・４０、ＲＯＭコントローラ４１、ＲＯＭ６１を削除した点において相違する。その他の要素は、上記図１の対応するものと同一なので、説明を省略する。
【０１２０】
図１６は、プロセッサ１０００の通信Ｉ／Ｆ１０の構成を示すブロック図である。
【０１２１】
図１６において、通信Ｉ／Ｆ１０は、ＣＰＵバス・マスタ部１１、ＣＰＵバス・スレーブ部１２、ＦＩＦＯ１３、ローカルバス・スレーブ部１４、ローカルバス・マスタ部１５、ローカルバス・Ｉ／Ｆ部１６、レジスタ部１７、同期化部１８、タイムアウト・カウンタ２１、タイムアウト検出部２２、タイムアウト制御部２３、ローカルバス・モニタ２４、論理素子２５を備えている。図１６における図１５との共通個所については図１５と同じ符号を用いている。
【０１２２】
本実施の形態のその他の要素は、上述した第１の実施の形態（図２、図３、図４、図５）の対応するものと同一なので、説明を省略する。
【０１２３】
次に、本実施の形態の特徴であるハングアップ・リカバリ動作について図１７及び図１８のフローチャートを参照しながら説明する。
【０１２４】
なお、以下では、本プロセッサが「マスタ・モード」で動作している時は、上記図２のマスタ・プロセッサ１００であるものとし、図１６の符号に１００を加えて説明する。また、本プロセッサが「スレーブ・モード」で動作している時は、上記図２のスレーブ・プロセッサ０・２００であるものとし、図１６の符号に符号に２００を加えて説明する。そして、上記図２における通信Ｉ／Ｆ１１０及び２１０を図１６の詳細ブロック図に置き換えた形で詳細動作を説明する。
【０１２５】
まず、「スレーブ・モード」のハングアップ・リカバリ動作について説明する。スレーブ・プロセッサのローカルバス・スレーブ部２１４からタイムアウト・カウンタ２２１には、同期化部２１８を介してビジー信号ｌｓｌｖ＿ｂｕｓｙ２２６が出力される。ローカルバス・スレーブ部２１４は、スレーブ・プロセッサにおけるマスタ・プロセッサとのローカルバス５０を介した通信の受け口となるものである。
【０１２６】
ビジー信号ｌｓｌｖ＿ｂｕｓｙ２２６は、ローカルバス・スレーブ部２１４が非アイドル状態の時、常にアサートされる。タイムアウト・カウンタ２２１は、同期化後のビジー信号ｌｓｌｖ＿ｂｕｓｙ２２７がアサートされている期間、カウントアップされる。一方、同期化後のビジー信号ｌｓｌｖ＿ｂｕｓｙ２２７がネゲートされている期間（即ちローカルバス・スレーブ部２１４がアイドル状態である期間）は、タイムアウト・カウンタ２２１の値は常に０となる。
【０１２７】
タイムアウト検出部２２２は、タイムアウト・カウンタ２２１のカウンタ値ｃｏｕｎｔ＿ｖａｌｕｅ２２８（即ちローカルバス・スレーブ部２１４がビジー状態である期間）が所定の値に達すると（ステップＳ３１でＹＥＳ）、ローカルバス・スレーブ部２１４がビジー状態である期間が長い状況（即ち異常に長い通信）は適正でないと判断し、タイムアウト信号ｃｎｔ＿ｔｏｕｔ２２９をタイムアウト制御部２２３へアサートする（ステップＳ３２）。
【０１２８】
タイムアウト検出部２２２は、タイムアウト信号ｃｎｔ＿ｔｏｕｔ２２９をタイムアウト・カウンタ２２１にも同時にアサートする。これを受けてタイムアウト・カウンタ２２１は、カウントアップを停止する。なお、タイムアウトを検出する際にカウンタ値と比較される上記所定の値（所定のタイムアウト値）は、レジスタ部２１７内部のｔｏｕｔ＿ｉｎｔｅｒｖａｌレジスタ２１７ｆの設定によって指定することができるようになっている。
【０１２９】
また、タイムアウト・カウンタ２２１のカウンタ値ｃｏｕｎｔ＿ｖａｌｕｅ２２８は、レジスタ部２１７へも出力される。このカウンタ値ｃｏｕｎｔ＿ｖａｌｕｅ２２８は、スレーブ・プロセッサのＣＰＵ２０２からはレジスタ部２１７の値と等価に見え、レジスタ部２１７から読み出すことができる。
【０１３０】
ローカルバス・モニタ２２４は、ローカルバス５０の状態を監視する。トランザクションが正常に終了した場合、上記図５のタイミング・ダイアグラムのように、ローカルバス・スレーブ部２１４は、ｌｏｃ＿ｆｒａｍｅ＿ｌ信号２３１がネゲートされた２サイクル後に、ローカルバス・ドライブ信号ｌｏｃ＿ｂｕｓ＿ｏｅ２３２をネゲートし、ローカルバスを開放する。しかし、通信途中でマスタ・プロセッサ１００でＣＰＵバス・タイムアウトが発生すると（ステップＳ３３でＹＥＳ）、マスタ・プロセッサ１００の通信Ｉ／Ｆ１１０は、ＣＰＵ１０２によってソフトウエア・リセットされる（ステップＳ３４）。これにより、通信Ｉ／Ｆ１１０のハングアップは解消され、ｌｏｃ＿ｆｒａｍｅ＿ｌ信号２３１がネゲートされる。
【０１３１】
ローカルバス・モニタ２２４は、この状態を検知し、ｌｏｃ＿ｆｒａｍｅ＿ｌ信号２３１のネゲート後、２サイクル経過してもローカルバス・スレーブ部２１４がローカルバス・ドライブ信号ｌｏｃ＿ｂｕｓ＿ｏｅ２３２をネゲートしないと、タイムアウトとみなして、ローカルバス・強制リリース信号ｆｏｒｃｅ＿ｒｅｌｅａｓｅ２３３をローカルバスＩ／Ｆ部２１６に対してアサートする。これにより、ローカルバス５０が直ちに開放される（ステップＳ３５）。同時に、ローカルバス・モニタ２２４は、ローカルバス・タイムアウト信号ｌｏｃ＿ｂｕｓ＿ｔｏｕｔ２３４を同期化部２１８を介してタイムアウト制御部２２３へアサートする。
【０１３２】
更に、ローカルバス・タイムアウト信号ｌｏｃ＿ｂｕｓ＿ｔｏｕｔ２３４は、同期化部２１８を介してタイムアウト・カウンタ２２１へも出力される。タイムアウト・カウンタ２２１は、同期化後のローカルバス・タイムアウト信号ｌｏｃ＿ｂｕｓ＿ｔｏｕｔ２３５がアサートされるとカウントアップを停止する。
【０１３３】
タイムアウト制御部２２３は、スレーブ・プロセッサ０  ２００の通信Ｉ／Ｆ２１０のタイムアウト制御を行う。まず、タイムアウト制御部２２３は、ｃｎｔ＿ｔｏｕｔ信号２２９または同期化後のｌｏｃ＿ｂｕｓ＿ｔｏｕｔ信号２３５のアサートを受けて、内部割込み要求信号ｔｏｕｔ＿ｉｎｔ２３６をレジスタ部２１７へアサートする。レジスタ部２１７は、通信Ｉ／Ｆ２１０の各種割込みを統括しており、内部割込み要求信号ｔｏｕｔ＿ｉｎｔ２３６がアサートされると、ＣＰＵ２０２に対して割込み要求信号ｃｏｍ＿ｉｎｔ２１９をアサートすると共に、レジスタ部２１７内部にある割込み要因レジスタ２１７ｆの当該要因ビットを立てる。
【０１３４】
同時にタイムアウト制御部２２３は、ＣＰＵバス・マスタ部２１１が、バス・グラント信号ｂｇｎｔ２３８を待っている状態で、ＣＰＵバス・アービタ（上記図２では不図示）に対してバス・リクエスト信号ｂｒｅｑ２３７（ＣＰＵバス獲得信号）をアサートしている場合、ＣＰＵバス・マスタ部２１１に対してバス・リクエスト・キャンセル信号ｂｒｅｑ＿ｃａｎｃｅｌ２３９をアサートする。これを受けてＣＰＵバス・マスタ部２１１は、タイムアウト検出に伴い、バス・リクエスト信号ｂｒｅｑ２３７を直ちにネゲートし、ＣＰＵバス・アービタに対するバス・リクエストを取り下げる（ステップＳ３６）。これにより、ハングアップによって無効となった無駄なトランザクションが、ＣＰＵバス上に発生することを抑制する。
【０１３５】
一方、既にＣＰＵバス・マスタ部２１１がＣＰＵバス・アービタからバス・グラント信号ｂｇｎｔ２３８をアサートした後であった場合、通信Ｉ／Ｆ２１０は便宜上、現在のＣＰＵバス上のトランザクションの終了（ＣＰＵバス・タイムアウトした場合も含む）を待つ。
【０１３６】
スレーブ・プロセッサ０・２００のＣＰＵ２０２は、上記の割込み要求信号ｃｏｍ＿ｉｎｔ２１９のアサートを受けて、まず通信Ｉ／Ｆ２１０の割込み要因レジスタ２１７ｆを読み、通信Ｉ／Ｆ２１０がハングアップしていることを知る（ステップＳ３７）。次に、通信Ｉ／Ｆ２１０のタイムアウト・カウンタ２２１のカウンタ値を読み出し、カウンタ値が０でないことを確認した後、通信Ｉ／Ｆ２１０をソフトウエア・リセットする。そして、通信Ｉ／Ｆ２１０を再設定した後、マスタ・プロセッサ１００に対してステータス送信を行い、スレーブ・プロセッサ０  ２００のリカバリを通知する（ステップＳ３８）。
【０１３７】
次に、「マスタ・モード」のハングアップ・リカバリ動作について説明する。レジスタ部１１７には、読み出し専用のｉｄｎｕｍ＿ｐｒｅｓｅｒｖｅレジスタ１１７ｇが設けられている。ｉｄｎｕｍ＿ｐｒｅｓｅｒｖｅレジスタ１１７ｇは、ハードウエア・リセット時に０となり、ソフトウエア・リセット時にｉｄｎｕｍレジスタ１１７ａの値を取り込むようになっている。即ち、ｉｄｎｕｍ＿ｐｒｅｓｅｒｖｅを読み出すことにより、ソフトウエア・リセット前のｉｄｎｕｍを読み出すことができる。
【０１３８】
本実施の形態では、マスタ・プロセッサ１００のハングアップ検出は、ＣＰＵバスのタイムアウトを検出することによって行う。ＣＰＵバス・アービタ（上記図２では不図示）内部にあるバスモニタが、ＣＰＵバスのタイムアウトを検出する。マスタ・プロセッサ１００がスレーブ・プロセッサとの通信中にＣＰＵバス・タイムアウトが発生すると（ステップＳ４１でＹＥＳ）、マスタ・プロセッサ１００のＣＰＵ１０２は、ハングアップが起きたとみなし、通信Ｉ／Ｆ１１０に対してソフトウエア・リセットを行う（ステップＳ４２）。次に、ＣＰＵ１０２は、通信Ｉ／Ｆ１１０を再設定した後、ｉｄｎｕｍ＿ｐｒｅｓｅｒｖｅレジスタ１１７ａを読み出す。これにより、ＣＰＵ１０２は、ハングアップを引き起こしたスレーブ・プロセッサを知ることが可能となる（ステップＳ４３）。
【０１３９】
そして、ＣＰＵ１０２は、ハングアップを引き起こしたスレーブ・プロセッサからリカバリの通知が来るまでの期間、このスレーブ・プロセッサを除外して他のスレーブ・プロセッサとのみ通信を続行する（ステップＳ４４）。しかる後、ＣＰＵ１０２は、ハングアップを引き起こしたスレーブ・プロセッサからリカバリの通知を受けると（ステップＳ４５でＹＥＳ）、該スレーブ・プロセッサとの通信を再開する（ステップＳ４６）。
【０１４０】
以上説明したように、本実施の形態によれば、スレーブ・モード時に上記のような処理を行うことにより、従来のコマンド通信並びにステータス通信を行わずに、スレーブ・プロセッサが独自にハングアップ検出することが可能となる。また、マスタ・プロセッサ１００が先にハングアップからリカバーした場合にも、スレーブ・プロセッサは直ちにローカルバスを開放するため、マスタ・プロセッサ１００は直ちに次のプロセッサ間通信を行うことができる。
【０１４１】
また、タイムアウト・カウンタの値をＣＰＵ２０２から読み出すことができるため、ハングアップしていることの確認を容易に行うことができると共に、デバッグの助けにもなる。加えて、スレーブ・プロセッサがタイムアウトを検出した際に、ＣＰＵバス・アービタに対するバス・リクエストを取り下げる機構を設けることにより、無駄なトランザクションがＣＰＵバス上に発生することを抑制することができる。
【０１４２】
また、マスタ・モード時に上記のような処理を行うことにより、マスタ・プロセッサ１００においても、従来のコマンド通信並びにステータス通信を行わずに、ハングアップ検出することが可能となる。これにより、従来のような周期的なコマンド通信並びにステータス通信を不要にすることができる結果、周期的な割込み要求を削減でき、ソフトウエア処理の効率を向上させることができる。
【０１４３】
また、上記のスレーブ・プロセッサのハングアップ・リカバリ方式と併せて、マルチプロセッサシステム全体において、ハングアップ時のリカバリ動作を効率化することができる。更に、マスタ・プロセッサ１００がハングアップをリカバーした後、ハングアップを引き起こしたスレーブ・プロセッサを除外して他のプロセッサとの通信を行うことができるため、従来よりも効率のよいプロセッサ間通信が可能となる。
【０１４４】
［第４の実施の形態］
図１９は、本発明の第４の実施の形態に係る撮像装置の構成を示すブロック図である。
【０１４５】
図１９において、撮像装置５００は、上述した第３の実施の形態を適用した画像処理部５０３を備えたものであり、高画素の固体撮像素子（例えば６００〜１０００万画素のＣＣＤ）を用いて秒間８フレームといった高速連写を実現するデジタルカメラとして構成されている。
【０１４６】
図１９は、上記図１３に対して、各スレーブ・プロセッサが各々メインメモリ２６０、３６０、４６０の他にＲＯＭ２６１、３６１、４６１を備えると共に、共有ＲＯＭアクセス調停装置９００及び共有ＲＯＭ９６１を削除した点において相違する。その他の要素は、上記図１３の対応するものと同一なので、説明を省略する。
【０１４７】
以上説明したように、本実施の形態によれば、撮像装置５００の画像処理部５０３に第３の実施の形態の各プロセッサを搭載することで、第３の実施の形態と同様の効果を得ることができる。各プロセッサの各々のＣＰＵでは、固体撮像素子の欠陥補正等をソフトウエアで処理する場合があるが、欠陥補正処理はハードウエアによる画像処理と同期して行う必要があるため、本発明によって割込み処理によるオーバーヘッドを削減することにより、単位時間あたりの欠陥補正処理の効率を高めることが可能となる。
【０１４８】
また、ローカルバス５０を介した、スレーブ・プロセッサからマスタ・プロセッサに対する画像転送効率を高めることが可能となる。これらは、撮像装置の連写性能を高める上で効果を発揮することができる。
【０１４９】
［他の実施の形態］
上記第１及び第２の実施の形態では、マルチプロセッサシステムを構成するスレーブ・プロセッサの個数を３つとした場合を例に挙げたが、スレーブ・プロセッサの個数は特定の個数に限定されるものではない。スレーブ・プロセッサの個数が増えるに従い、本発明の効果は更に高まる。
【０１５０】
上記第３及び第４の実施の形態では、マルチプロセッサシステムを構成するスレーブ・プロセッサの個数を３つとした場合を例に挙げたが、スレーブ・プロセッサの個数は少なくとも１つ以上であればよい。
【０１５１】
上記第２及び第４の実施の形態では、マルチプロセッサシステムを撮像装置に適用した場合を例に挙げたが、撮像装置以外の電子機器に適用することも可能である。
【０１５２】
本発明は、上述した実施の形態の機能を実現するソフトウエアのプログラム（図１２、図１７、図１８のフローチャート）をコンピュータ又はＣＰＵに供給し、そのコンピュータ又はＣＰＵが該供給されたプログラムを読出して実行することによって、達成することができる。
【０１５３】
この場合、上記プログラムは、該プログラムを記録した記憶媒体から直接供給されるか、又はインターネット、商用ネットワーク、若しくはローカルエリアネットワーク等に接続される不図示の他のコンピュータやデータベース等からダウンロードすることにより供給される。
【０１５４】
上記プログラムの形態は、オブジェクトコード、インタプリタにより実行されるプログラムコード、ＯＳ（オペレーティングシステム）に供給されるスクリプトデータ等の形態から成ってもよい。
【０１５５】
また、本発明は、上述した実施の形態の機能を実現するソフトウエアのプログラムを記憶した記憶媒体をコンピュータ又はＣＰＵに供給し、そのコンピュータ又はＣＰＵが記憶媒体に記憶されたプログラムを読出して実行することによっても、達成することができる。
【０１５６】
この場合、格納媒体から読出されたプログラムコード自体が上述した各実施の形態の機能を実現すると共に、そのプログラムコードを記憶した記憶媒体は本発明を構成する。
【０１５７】
プログラムコードを記憶する記憶媒体としては、例えば、ＲＯＭ、ＲＡＭ、ＮＶ−ＲＡＭ、フロッピー（登録商標）ディスク、ハードディスク、光ディスク（登録商標）、光磁気ディスク、ＣＤ−ＲＯＭ、ＭＯ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、磁気テープ、不揮発性のメモリカード等がある。
【０１５８】
上述した実施の形態の機能は、コンピュータから読出されたプログラムコードを実行することによるばかりでなく、コンピュータ上で稼動するＯＳ等がプログラムコードの指示に基づいて実際の処理の一部又は全部を行うことによっても実現することができる。
【０１５９】
更に、本発明は、上述した実施の形態を実現するソフトウエアのプログラムがネットワーク上のデータベース又はホームページから通信プログラムによりダウンロードされ、このプログラムを読出して実行することによって達成することができる。
【０１６０】
上記プログラムは、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページからコンピュータプログラム自体、又は自動インストール機能を含む圧縮ファイルをハードディスク等の記憶媒体にダウンロードすることによっても供給することができる。
【０１６１】
また、上記プログラムは、プログラムコードを暗号化した上で格納したＣＤ−ＲＯＭ等の記憶媒体をユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムコードを実行してコンピュータにインストールさせることによっても供給することができる。
【０１６２】
上述した実施の形態の機能は、プログラムコードを複数のファイルに分割し、夫々のファイルを異なるホームページからダウンロードすることによっても実現することができる。即ち、本発明の機能処理をコンピュータで実現させるためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明を構成する。
【０１６３】
また、上述した実施の形態の機能は、記憶媒体から読出されたプログラムが、コンピュータに挿入された機能拡張ボード又はコンピュータに接続された機能拡張ユニットに備えられたメモリに書込まれた後、そのプログラムの指示に基づき、その機能拡張ボード又は機能拡張ユニットに備えられたＣＰＵ又はＭＰＵ等が実際の処理の一部又は全部を実行することによっても実現することができる。
【図面の簡単な説明】
【０１６４】
【図１】本発明の第１の実施の形態に係るマルチプロセッサシステムを構成するプロセッサの主要部の構成を示すブロック図である。
【図２】プロセッサ間通信の動作の概略を示すブロック図である。
【図３】プロセッサ間通信のメモリマップ・イメージを示す図である。
【図４】レジスタ間通信の通信経路を示すブロック図である。
【図５】ローカルバスのプロトコルを示すタイミング・ダイアグラムである。
【図６】複数のスレーブ・プロセッサでＲＯＭを共有する構成を示すブロック図である。
【図７】共有ＲＯＭアクセス調停装置の構成を示すブロック図である。
【図８】キャッシュ回路の構成を示すブロック図である。
【図９】３Ｒ−１Ｗバッファのメモリマップ・イメージを示す図である。
【図１０】調停部の構成を示すブロック図である。
【図１１】共有ＲＯＭアクセス調停装置内部のタイミング・ダイアグラムである。
【図１２】ＲＯＭアドレスに対するアクセスを示すフローチャートであり、（ａ）はＲＯＭアドレスａｄｄｒ１、２に対するアクセス、（ｂ）はＲＯＭアドレスａｄｄｒ３に対するアクセス、（ｃ）はＲＯＭアドレスａｄｄｒ４に対するアクセスである。
【図１３】本発明の第２の実施の形態に係る撮像装置の構成を示すブロック図である。
【図１４】プロセッサの主要部の構成を示すブロック図である。
【図１５】本発明の第３の実施の形態に係るプロセッサの主要部の構成を示すブロック図である。
【図１６】プロセッサの通信Ｉ／Ｆの構成を示すブロック図である。
【図１７】スレーブ・モードのハングアップ・リカバリ動作を示すフローチャートである。
【図１８】マスタ・モードのハングアップ・リカバリ動作を示すフローチャートを示す図である。
【図１９】本発明の第４の実施の形態に係る撮像装置の構成を示すブロック図である。
【図２０】従来例に係るマスタ・プロセッサ及びスレーブ・プロセッサの構成を示すブロック図である。
【図２１】他の従来例に係るマスタ・プロセッサ及びスレーブ・プロセッサの構成を示すブロック図である。
【符号の説明】
【０１６５】
１４  ローカルバス・スレーブ部（受信手段に対応）
２１  タイムアウト・カウンタ（計測手段に対応）
２２  タイムアウト検出部（検出手段に対応）
２３  タイムアウト制御部（制御手段に対応）
２４  ローカルバス・モニタ（監視手段に対応）
１００  マスタ・プロセッサ
１０２  ＣＰＵ（通信続行手段に対応）
２００〜４００  スレーブ・プロセッサ
５００  撮像装置
５０３  画像処理部（画像処理装置に対応）
９００  共有ＲＯＭアクセス調停装置（調停手段に対応）
９１０  キャッシュ回路（キャッシュ手段に対応）
９３０  タイミング制御回路（信号生成手段に対応）
９６１  共有ＲＯＭ（記憶手段に対応）
【図１】
2005346670.tif 000003
【図２】
2005346670.tif 000004
【図３】
2005346670.tif 000005
【図４】
2005346670.tif 000006
【図５】
2005346670.tif 000007
【図６】
2005346670.tif 000008
【図７】
2005346670.tif 000009
【図８】
2005346670.tif 000010
【図９】
2005346670.tif 000011
【図１０】
2005346670.tif 000012
【図１１】
2005346670.tif 000013
【図１２】
2005346670.tif 000014
【図１３】
2005346670.tif 000015
【図１４】
2005346670.tif 000016
【図１５】
2005346670.tif 000017
【図１６】
2005346670.tif 000018
【図１７】
2005346670.tif 000019
【図１８】
2005346670.tif 000020
【図１９】
2005346670.tif 000021
【図２０】
2005346670.tif 000022
【図２１】
2005346670.tif 000023