(57)【要約】【課題】ローカル命令メモリのサイズを実質的に拡大する形態でローカル命令メモリを各プロセッサ間で共有できるマルチプロセッサシステムにおけるプロセッサを提供する。【解決手段】第１ＣＰＵ１００は、メモリ共有モード設定レジスタ１０７に格納された情報を参照することで、第１ＣＰＵ１００が命令フェッチを行うアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とで定義される領域内であるか、または、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とで定義される領域内であるかを判定し、その判定の結果に基づいてセレクタ１０２を制御することで、命令メモリ１０１と命令メモリ２０１とを切り替え、切り替え後の命令メモリから命令をフェッチして実行する。【選択図】図１
2012234417.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムを構成する複数のプロセッサのうちの１個のプロセッサであって、
ＣＰＵと、
前記ＣＰＵが実行する命令および他のプロセッサが備えるＣＰＵが実行する命令を格納しているローカル命令メモリと、
前記ローカル命令メモリおよび前記他のプロセッサが備えるローカル命令メモリのいずれかを選択し、選択したローカル命令メモリを、前記ＣＰＵの命令メモリとして、前記ＣＰＵに接続するセレクタと、
前記セレクタの状態を制御するための情報を格納するメモリ共有モード設定レジスタと、
前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の先頭アドレスを格納するローカル命令メモリ先頭アドレスレジスタと、
前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の終了アドレスを格納するローカル命令メモリ終了アドレスレジスタと、
前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の先頭アドレスを格納する共有命令メモリ先頭アドレスレジスタと、
前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の終了アドレスを格納する共有命令メモリ終了アドレスレジスタとを備え、
前記ＣＰＵは、命令を実行することにより、（１）前記メモリ共有モード設定レジスタに情報を格納すること、（２）前記メモリ共有モード設定レジスタに格納された情報を参照することで、前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内であるか、または、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内であるかを判定すること、および、（３）前記判定の結果に基づいて前記セレクタを制御することで、前記ローカル命令メモリと前記他のプロセッサが備えるローカル命令メモリとを切り替え、切り替え後のローカル命令メモリから命令をフェッチして実行する
プロセッサ。
【請求項２】
前記ＣＰＵは、
前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合には、前記ローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御し、
前記ＣＰＵが命令フェッチを行うアドレスが、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内である場合には、前記他のプロセッサが備えるローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御する
請求項１記載のプロセッサ。
【請求項３】
前記ＣＰＵは、
前記セレクタの状態を示す第１ＣＰＵ命令メモリセレクト信号を前記他のプロセッサが備えるＣＰＵへ出力するための第１出力ポートと、
前記他のプロセッサが備えるセレクタの状態を示す第２ＣＰＵ命令メモリセレクト信号を入力するための第１入力ポートと、
前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへの前記ＣＰＵのアクセス状態を示す第１ＣＰＵ命令メモリビジー信号を出力するための第２出力ポートと、
前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへの、前記他のプロセッサが備えるＣＰＵのアクセス状態を示す第２ＣＰＵ命令メモリビジー信号を入力するための第２入力ポートとを備え、
前記判定の結果に加えて、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて、前記セレクタの制御を行う
請求項１または２記載のプロセッサ。
【請求項４】
前記ＣＰＵは、
前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合に、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて前記他のプロセッサが備えるＣＰＵが前記ローカル命令メモリにアクセスしていないと判定したときに、前記ローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御し、
前記ＣＰＵが命令フェッチを行うアドレスが、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内である場合に、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて前記他のプロセッサが備えるＣＰＵが前記他のプロセッサが備えるローカル命令メモリにアクセスしていないと判定したときに、前記他のプロセッサが備えるローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御する
請求項３記載のプロセッサ。
【請求項５】
前記ＣＰＵは、前記他のプロセッサが備えるＣＰＵが備える命令セットと同じ命令セットを備える
請求項１〜４のいずれか１項に記載のプロセッサ。
【請求項６】
複数のプロセッサから構成されるマルチプロセッサシステムであって、
前記複数のプロセッサのそれぞれは、請求項１〜５のいずれか１項に記載のプロセッサである
マルチプロセッサシステム。
【請求項７】
複数のプロセッサから構成されるマルチプロセッサシステムにおけるメモリ制御方法であって、
前記複数のプロセッサのそれぞれは、
ＣＰＵと、
前記ＣＰＵが実行する命令および他のプロセッサが備えるＣＰＵが実行する命令を格納しているローカル命令メモリと、
前記ローカル命令メモリおよび前記他のプロセッサが備えるローカル命令メモリのいずれかを選択し、選択したローカル命令メモリを、前記ＣＰＵの命令メモリとして、前記ＣＰＵに接続するセレクタと、
前記セレクタの状態を制御するための情報を格納するメモリ共有モード設定レジスタと、
前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の先頭アドレスを格納するローカル命令メモリ先頭アドレスレジスタと、
前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の終了アドレスを格納するローカル命令メモリ終了アドレスレジスタと、
前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の先頭アドレスを格納する共有命令メモリ先頭アドレスレジスタと、
前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の終了アドレスを格納する共有命令メモリ終了アドレスレジスタとを備え、
前記メモリ制御方法は、
前記メモリ共有モード設定レジスタに情報を格納するステップと、
前記メモリ共有モード設定レジスタに格納された情報を参照することで、前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内であるか、または、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内であるかを判定するステップと、
前記判定の結果に基づいて前記セレクタを制御することで、前記ローカル命令メモリと前記他のプロセッサが備えるローカル命令メモリとを切り替え、切り替え後のローカル命令メモリから命令をフェッチするステップとを含む
メモリ制御方法。
【請求項８】
さらに、他のプロセッサが備えるＣＰＵの前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへのアクセス状態を参照し、前記ＣＰＵが命令フェッチを行うローカル命令メモリの切替制御を行うことで、前記ＣＰＵと前記他のプロセッサが備えるＣＰＵによる前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへのアクセスを調停するステップを含む
請求項７記載のメモリ制御方法。
【請求項９】
前記複数のプロセッサが備えるＣＰＵは、同一の命令セットを備える
請求項７または８記載のメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、マルチプロセッサシステムおよびマルチプロセッサシステムのメモリ制御方法にかかわり、特にプロセッサ間でローカル命令メモリを切り替えるメモリ制御を行う技術に関する。
【背景技術】
【０００２】
マイクロプロセッサ（以下、単に「プロセッサ」という。）の中には、ローカル命令メモリを内蔵し、ＤＲＡＭなどで構成されるメインメモリからプログラムをあらかじめローカル命令メモリに展開しておくことで、高速な命令実行を実現しているものがある。
【０００３】
ローカル命令メモリはメインメモリに比べて高速な動作を要求されるため、ＳＲＡＭで構成されることが一般的である。大容量のローカル命令メモリは、プロセッサがシステムＬＳＩに搭載される際のチップ面積増加に影響を与えるため、必要最低限の記憶容量のメモリでプロセッサに搭載される。
【０００４】
しかし、近年、システムＬＳＩに求められる処理能力の向上により、複数のプロセッサを搭載したマルチプロセッサシステムを採用したシステムＬＳＩが多く見られ、各々のプロセッサが搭載するローカル命令メモリのチップ面積への影響はますます顕著になっている。
【０００５】
そこで、従来、マルチプロセッサシステムにおいてメモリを共有化する技術が提案されている（例えば、特許文献１参照）。特許文献１に記載された発明では、各プロセッサのローカルメモリと全体で共有する共有メモリを切り替えることで、各プロセッサのローカルメモリの共有メモリ化および共有メモリの各プロセッサでのローカルメモリ化を実現している。これにより、各プロセッサ間でのローカルメモリの共有を実現している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−２７３１９１号公報（図１、図２）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載された発明では各プロセッサのローカルメモリのアドレス空間は各々同じであり、各プロセッサがアクセスできるアドレス空間はローカルメモリのサイズのままである。そのために、特許文献１の技術では、メモリを切り替える（つまり、アクセスの対象となるメモリを切り替える）だけであり、ローカルメモリのサイズを拡大することは出来ないという問題点がある。
【０００８】
そこで、本発明は、上記の課題を解決するために、ローカル命令メモリを備える複数のプロセッサから構成されるマルチプロセッサシステムにおいて、ローカル命令メモリのサイズを実質的に拡大する形態でローカル命令メモリを各プロセッサ間で共有できるマルチプロセッサシステム、それを構成するプロセッサおよびそのメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するために、本発明に係るプロセッサの一形態は、マルチプロセッサシステムを構成する複数のプロセッサのうちの１個のプロセッサであって、ＣＰＵと、前記ＣＰＵが実行する命令および他のプロセッサが備えるＣＰＵが実行する命令を格納しているローカル命令メモリと、前記ローカル命令メモリおよび前記他のプロセッサが備えるローカル命令メモリのいずれかを選択し、選択したローカル命令メモリを、前記ＣＰＵの命令メモリとして、前記ＣＰＵに接続するセレクタと、前記セレクタの状態を制御するための情報を格納するメモリ共有モード設定レジスタと、前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の先頭アドレスを格納するローカル命令メモリ先頭アドレスレジスタと、前記ＣＰＵが実行する命令が格納されている前記ローカル命令メモリの記憶領域の終了アドレスを格納するローカル命令メモリ終了アドレスレジスタと、前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の先頭アドレスを格納する共有命令メモリ先頭アドレスレジスタと、前記他のプロセッサが備えるローカル命令メモリの記憶領域であって前記ＣＰＵが実行する命令が格納されている記憶領域の終了アドレスを格納する共有命令メモリ終了アドレスレジスタとを備え、前記ＣＰＵは、命令を実行することにより、（１）前記メモリ共有モード設定レジスタに情報を格納すること、（２）前記メモリ共有モード設定レジスタに格納された情報を参照することで、前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内であるか、または、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内であるかを判定すること、および、（３）前記判定の結果に基づいて前記セレクタを制御することで、前記ローカル命令メモリと前記他のプロセッサが備えるローカル命令メモリとを切り替え、切り替え後のローカル命令メモリから命令をフェッチして実行する。
【００１０】
これにより、各プロセッサには、当該プロセッサが備えるローカル命令メモリのアドレス空間を特定するためのレジスタ（ローカル命令メモリ先頭アドレスレジスタ、ローカル命令メモリ終了アドレスレジスタ）と、他のプロセッサが備えるローカル命令メモリのアドレス空間を特定するためのレジスタ（共有命令メモリ先頭アドレスレジスタ、共有ローカル命令メモリ終了アドレスレジスタ）とが設けられ、当該プロセッサが備えるＣＰＵがアクセスするアドレスに応じて、アクセス先として、当該プロセッサが備えるローカル命令メモリと他のプロセッサが備えるローカル命令メモリとが切り替えられる。
【００１１】
つまり、メモリ共有モードを設定することにより、当該プロセッサが備えるローカル命令メモリに加えて、他のプロセッサが備えるローカル命令メモリを、当該プロセッサが備えるＣＰＵの命令メモリ領域として参照することが可能となり、ＣＰＵがアクセスできる命令メモリ空間を拡張できる。よって、ＣＰＵのローカル命令メモリの記憶容量以上のサイズのプログラムを命令メモリから読み出して実行することが出来る。
【００１２】
なお、セレクタの具体的な制御としては、前記ＣＰＵは、前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合には、前記ローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御し、前記ＣＰＵが命令フェッチを行うアドレスが、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内である場合には、前記他のプロセッサが備えるローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御するのが好ましい。これにより、命令をフェッチするアドレスに連動して、当該プロセッサが備えるローカル命令メモリと他のプロセッサが備えるローカル命令メモリとが切り替えられる。
【００１３】
ここで、前記ＣＰＵは、前記セレクタの状態を示す第１ＣＰＵ命令メモリセレクト信号を前記他のプロセッサが備えるＣＰＵへ出力するための第１出力ポートと、前記他のプロセッサが備えるセレクタの状態を示す第２ＣＰＵ命令メモリセレクト信号を入力するための第１入力ポートと、前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへの前記ＣＰＵのアクセス状態を示す第１ＣＰＵ命令メモリビジー信号を出力するための第２出力ポートと、前記ローカル命令メモリまたは前記他のプロセッサが備えるローカル命令メモリへの、前記他のプロセッサが備えるＣＰＵのアクセス状態を示す第２ＣＰＵ命令メモリビジー信号を入力するための第２入力ポートとを備え、前記判定の結果に加えて、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて、前記セレクタの制御を行ってもよい。具体的には、前記ＣＰＵは、前記ＣＰＵが命令フェッチを行うアドレスが、前記ローカル命令メモリ先頭アドレスレジスタと前記ローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合に、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて前記他のプロセッサが備えるＣＰＵが前記ローカル命令メモリにアクセスしていないと判定したときに、前記ローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御し、前記ＣＰＵが命令フェッチを行うアドレスが、前記共有命令メモリ先頭アドレスレジスタと前記共有命令メモリ終了アドレスレジスタとで定義される領域内である場合に、前記第２ＣＰＵ命令メモリセレクト信号と前記第２ＣＰＵ命令メモリビジー信号とに基づいて前記他のプロセッサが備えるＣＰＵが前記他のプロセッサが備えるローカル命令メモリにアクセスしていないと判定したときに、前記他のプロセッサが備えるローカル命令メモリと前記ＣＰＵとを接続するように前記セレクタを制御するのが好ましい。これにより、一つのローカル命令メモリに対する複数のＣＰＵからのアクセスの競合が適切に調停される。
【００１４】
また、前記ＣＰＵは、前記他のプロセッサが備えるＣＰＵが備える命令セットと同じ命令セットを備えてもよい。これにより、ローカル命令メモリは、複数のプロセッサ間において、プログラムの格納場所として共有されるだけでなく、複数のＣＰＵによって実行される共通プログラムの格納場所としても共有され得る。
【００１５】
なお、本発明は、プロセッサとして実現できるだけでなく、複数のプロセッサから構成されるマルチプロセッサシステムとして実現したり、複数のプロセッサから構成されるマルチプロセッサシステムにおけるメモリ制御方法として実現したりすることもできる。
【発明の効果】
【００１６】
本発明によれば、マルチプロセッサシステムを構成する各プロセッサにメモリ共有モードを設定することにより、１つのプロセッサが備えるＣＰＵから、当該プロセッサが備えるローカル命令メモリと他のプロセッサが備えるローカル命令メモリとを異なるアドレス空間のローカル命令メモリとして参照することが可能となり、ＣＰＵがアクセスできる命令メモリの空間を拡張できる。その結果、各プロセッサが備えるＣＰＵは、各プロセッサに備えられたローカル命令メモリの記憶容量以上のサイズのプログラムを命令メモリから読み出して実行することが出来る。
【００１７】
よって、ローカル命令メモリを備える複数のプロセッサから構成されるマルチプロセッサシステムにおいて、ローカル命令メモリのサイズを実質的に拡大する形態でローカル命令メモリが各プロセッサ間で共有され、これにより、ローカル命令メモリのチップ面積への影響が抑制され、マルチプロセッサシステムのシステムＬＳＩ化が促進される。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態におけるメモリ制御方法を実施するマルチプロセッサシステムの構成を示すブロック図
【図２】本発明の実施の形態におけるメモリ制御で使用するレジスタの構成を示すブロック図
【図３】本発明の実施の形態における第１ＣＰＵによるメモリ制御を示すフローチャート
【図４】本発明の実施の形態における第２ＣＰＵによるメモリ制御を示すフローチャート
【図５Ａ】本発明の実施の形態におけるメモリ制御の動作を示すタイミングチャート（時刻１〜時刻８）
【図５Ｂ】本発明の実施の形態におけるメモリ制御の動作を示すタイミングチャート（時刻８〜時刻１７）
【図５Ｃ】本発明の実施の形態におけるメモリ制御の動作を示すタイミングチャート（時刻１７〜時刻２５）
【発明を実施するための形態】
【００１９】
以下、本発明にかかわるメモリ制御方法の実施の形態を図面に基づいて詳細に説明する。
【００２０】
図１は本発明の実施の形態におけるメモリ制御方法を実施するマルチプロセッサシステム１の構成を示すブロック図、図２は本発明の実施の形態におけるメモリ制御で使用するレジスタの構成を示すブロック図、図３は本発明の実施の形態における第１ＣＰＵ１００のメモリ制御の動作（メモリ制御方法）を示すフローチャート、図４は本発明の実施の形態における第２ＣＰＵ２００のメモリ制御の動作（メモリ制御方法）を示すフローチャート、図５は本発明の実施の形態におけるメモリ制御の動作を示すタイミングチャートである。
【００２１】
本実施の形態のマルチプロセッサシステム１は、マルチプロセッサシステム１を構成する複数のプロセッサのそれぞれが備えるローカル命令メモリをプロセッサ間で共有することができる１チップのシステムＬＳＩであり、第１プロセッサ１０、第２プロセッサ２０、外部メモリ３０２、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）コントローラ３００およびＤＲＡＭ３０１を備える。
【００２２】
第１プロセッサ１０は、第１ＣＰＵ１００と、命令メモリ１０１と、セレクタ１０２と、ローカル命令メモリ先頭アドレスレジスタ１０３と、ローカル命令メモリ終了アドレスレジスタ１０４と、共有命令メモリ先頭アドレスレジスタ１０５と、共有命令メモリ終了アドレスレジスタ１０６と、メモリ共有モード設定レジスタ１０７と、第１ＣＰＵ命令メモリバス１１０とを備える。なお、第１ＣＰＵ１００と、５つのレジスタ（ローカル命令メモリ先頭アドレスレジスタ１０３、ローカル命令メモリ終了アドレスレジスタ１０４、共有命令メモリ先頭アドレスレジスタ１０５、共有命令メモリ終了アドレスレジスタ１０６、メモリ共有モード設定レジスタ１０７）とで、第１プロセッサ１０における処理とメモリ制御を行う第１処理部１２０が構成されている。
【００２３】
ここで、第１ＣＰＵ１００は、第２ＣＰＵ２００に第１ＣＰＵ命令メモリＢｕｓｙ（ビジー）信号１０８を出力するための第１出力ポートと、第２ＣＰＵ２００から送られてくる第２ＣＰＵ命令メモリＢｕｓｙ（ビジー）信号２０８を入力するための第１入力ポートと、第２ＣＰＵ２００に第１ＣＰＵ命令メモリセレクト信号１０９を出力するための第２出力ポートと、第２ＣＰＵ２００から送られてくる第２ＣＰＵ命令メモリセレクト信号２０９を入力するための第２入力ポートとを有する。なお、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８は、第１ＣＰＵ１００が命令メモリ（命令メモリ１０１または命令メモリ２０１）へのアクセス中（“１（Ｂｕｓｙ）”）であるか否かを示す信号である。また、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８は、第２ＣＰＵ２００が命令メモリ（命令メモリ１０１または命令メモリ２０１）へのアクセス中（“１（Ｂｕｓｙ）”）であるか否かを示す信号である。また、第１ＣＰＵ命令メモリセレクト信号１０９は、メモリ共有モード設定レジスタ１０７の値、言い換えると、セレクタ１０２の選択状態を示す信号である。また、第２ＣＰＵ命令メモリセレクト信号２０９は、メモリ共有モード設定レジスタ２０７の値、言い換えると、セレクタ２０２の選択状態を示す信号である。なお、これら４つの入出力ポートの全て、あるいは、その一部は、第１処理部１２０に設けられ、第１ＣＰＵ１００と接続されるように構成されていてもよい。
【００２４】
第２プロセッサ２０は、第２ＣＰＵ２００と、命令メモリ２０１とセレクタ２０２と、ローカル命令メモリ先頭アドレスレジスタ２０３と、ローカル命令メモリ終了アドレスレジスタ２０４と、共有命令メモリ先頭アドレスレジスタ２０５と、共有命令メモリ終了アドレスレジスタ２０６と、メモリ共有モード設定レジスタ２０７と、第２ＣＰＵ命令メモリバス２１０とを備える。なお、第２ＣＰＵ２００と、５つのレジスタ（ローカル命令メモリ先頭アドレスレジスタ２０３、ローカル命令メモリ終了アドレスレジスタ２０４、共有命令メモリ先頭アドレスレジスタ２０５、共有命令メモリ終了アドレスレジスタ２０６、メモリ共有モード設定レジスタ２０７）とで、第２プロセッサ２０における処理とメモリ制御を行う第２処理部２２０が構成されている。
【００２５】
ここで、第２ＣＰＵ２００は、第１ＣＰＵ１００に第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を出力するための第１出力ポートと、第１ＣＰＵ１００から送られてくる第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を入力するための第１入力ポートと、第１ＣＰＵ１００に第２ＣＰＵ命令メモリセレクト信号２０９を出力するための第２出力ポートと、第１ＣＰＵ１００から送られてくる第１ＣＰＵ命令メモリセレクト信号１０９を入力するための第２入力ポートとを有する。なお、これら４つの入出力ポートの全て、あるいは、その一部は、第２処理部２２０に設けられ、第２ＣＰＵ２００と接続されるように構成されていてもよい。
【００２６】
第１ＣＰＵ１００と第２ＣＰＵ２００は、同一の命令セットを備え、各々命令を実行し、命令に応じた動作をおこなうＣＰＵであり、命令デコーダ、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）、レジスタ、入出力ポート等を有する。なお、第１ＣＰＵ１００と第２ＣＰＵ２００とは、必ずしも完全に同一の命令セットを備える必要はなく、それぞれが全体と部分の関係を有する命令セットを備え（一方が他方のサブセット命令を備え）てもよいし、全く異なる命令セットを備えてもよい。いずれの形態にするかは、マルチプロセッサシステム１の応用に依存して適宜決定すればよい。
【００２７】
命令メモリ１０１は、第１ＣＰＵ１００にとってのローカル命令メモリであり、本実施の形態では、例えば、６４ｋ番地分の記憶容量を有し、第１ＣＰＵ１００にとって０ｘ５０００００００〜０ｘ５００００ＦＦＦ番地のローカル命令メモリとして機能するとともに、第２ＣＰＵ２００にとって０ｘ５０００００００〜０ｘ５００００ＦＦＦ番地の外部命令メモリとして機能する。つまり、この命令メモリ１０１は、第１プロセッサ１０内に置かれているが、第１ＣＰＵ１００および第２ＣＰＵ２００によって共有される命令メモリの一つである。なお、本実施の形態では、命令メモリ１０１がもつ全記憶領域が第１ＣＰＵ１００および第２ＣＰＵ２００によって共有されているが、命令メモリ１０１の一部の記憶領域だけが共有されていてもよい。
【００２８】
セレクタ１０２は、命令メモリ１０１からの命令と第２ＣＰＵ命令メモリバス２１０からの命令とを入力とし、第１ＣＰＵ命令メモリセレクト信号１０９の値により、どちらかを選択して出力する。具体的には、セレクタ１０２は、第１ＣＰＵ命令メモリセレクト信号１０９が“０”（つまり、メモリ共有モードが無効）である場合、命令メモリ１０１からの命令を選択して出力し、一方、第１ＣＰＵ命令メモリセレクト信号１０９が“１”（つまり、メモリ共有モードが有効）である場合、第２ＣＰＵ命令メモリバス２１０からの命令を選択して出力する。
【００２９】
ローカル命令メモリ先頭アドレスレジスタ１０３は第１ＣＰＵ１００の命令メモリ空間の先頭アドレス、つまり、第１プロセッサ１０が備える命令メモリ１０１が有する記憶領域のうち第１ＣＰＵ１００が実行する命令が格納されている記憶領域の先頭アドレス（「ローカル命令メモリ先頭アドレス」）を保持するレジスタである。
【００３０】
ローカル命令メモリ終了アドレスレジスタ１０４は第１ＣＰＵ１００の命令メモリ空間の終了アドレス、つまり、第１プロセッサ１０が備える命令メモリ１０１が有する記憶領域のうち第１ＣＰＵ１００が実行する命令が格納されている記憶領域の終了アドレス（「ローカル命令メモリ終了アドレス」）を保持するレジスタである。
【００３１】
共有命令メモリ先頭アドレスレジスタ１０５は第１ＣＰＵ１００の共有命令メモリ空間の先頭アドレス、つまり、第２プロセッサ２０が備える命令メモリ２０１が有する記憶領域のうち第１ＣＰＵ１００が実行する命令が格納されている記憶領域の先頭アドレス（「共有命令メモリ先頭アドレス」）を保持するレジスタである。
【００３２】
共有命令メモリ終了アドレスレジスタ１０６は第１ＣＰＵ１００の共有命令メモリ空間の終了アドレス、つまり、第２プロセッサ２０が備える命令メモリ２０１が有する記憶領域のうち第１ＣＰＵ１００が実行する命令が格納されている記憶領域の終了アドレス（「共有命令メモリ終了アドレス」）を保持するレジスタである。
【００３３】
メモリ共有モード設定レジスタ１０７は第１ＣＰＵ１００のメモリ共有モードの有効／無効を保持するレジスタでる。ここに格納された値が“０”である場合はメモリ共有モードが無効であることを示し、“１”である場合はメモリ共有モードが有効であることを示す。なお、「メモリ共有モードが無効である」とは、命令メモリ１０１が第１ＣＰＵ１００によって使用されることを意味し、「メモリ共有モードが有効である」とは、命令メモリ１０１が第２ＣＰＵ２００によって使用されることを意味する。
【００３４】
第１ＣＰＵ１００は、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８として、第１ＣＰＵ１００が命令メモリ（命令メモリ１０１または命令メモリ２０１）へのアクセス中には“１（Ｂｕｓｙ）”を出力し、アクセスを行っていない場合には“０（非Ｂｕｓｙ）”を出力する。
【００３５】
第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９として、メモリ共有モード設定レジスタ１０７に格納された値をセレクタ１０２へ出力する。
【００３６】
第１ＣＰＵ命令メモリバス１１０は命令メモリ１０１をセレクタ１０２とセレクタ２０２とに接続するバスである。
【００３７】
命令メモリ２０１は、第２ＣＰＵ２００にとってのローカル命令メモリであり、本実施の形態では、例えば、６４ｋ番地分の記憶容量を有し、第２ＣＰＵ２００にとって０ｘ５０００１０００〜０ｘ５０００１ＦＦＦ番地のローカル命令メモリとして機能するとともに、第１ＣＰＵ１００にとって０ｘ５０００１０００〜０ｘ５０００１ＦＦＦ番地の外部命令メモリとして機能する。つまり、この命令メモリ２０１は、第２プロセッサ２０内に置かれているが、第１ＣＰＵ１００および第２ＣＰＵ２００によって共有される命令メモリの一つである。なお、本実施の形態では、命令メモリ２０１がもつ全記憶領域が第１ＣＰＵ１００および第２ＣＰＵ２００によって共有されているが、命令メモリ２０１の一部の記憶領域だけが共有されていてもよい。
【００３８】
セレクタ２０２は、命令メモリ２０１からの命令と第１ＣＰＵ命令メモリバス１１０からの命令とを入力とし、第２ＣＰＵ命令メモリセレクト信号２０９の値により、どちらかを選択して出力する。具体的には、セレクタ２０２は、第２ＣＰＵ命令メモリセレクト信号２０９が“０”（つまり、メモリ共有モードが無効）である場合、命令メモリ２０１からの命令を選択して出力し、一方、第２ＣＰＵ命令メモリセレクト信号２０９が“１”（つまり、メモリ共有モードが有効）である場合、第２ＣＰＵ命令メモリバス２１０からの命令を選択して出力する。
【００３９】
ローカル命令メモリ先頭アドレスレジスタ２０３は第２ＣＰＵ２００の命令メモリ空間の先頭アドレス、つまり、第２プロセッサ２０が備える命令メモリ２０１が有する記憶領域のうち第２ＣＰＵ２００が実行する命令が格納されている記憶領域の先頭アドレス（「ローカル命令メモリ先頭アドレス」）を保持するレジスタである。
【００４０】
ローカル命令メモリ終了アドレスレジスタ２０４は第２ＣＰＵ２００の命令メモリ空間の終了アドレス、つまり、第２プロセッサ２０が備える命令メモリ２０１が有する記憶領域のうち第２ＣＰＵ２００が実行する命令が格納されている記憶領域の終了アドレス（「ローカル命令メモリ終了アドレス」）を保持するレジスタである。
【００４１】
共有命令メモリ先頭アドレスレジスタ２０５は第２ＣＰＵ２００の共有命令メモリ空間の先頭アドレス、つまり、第１プロセッサ１０が備える命令メモリ１０１が有する記憶領域のうち第２ＣＰＵ２００が実行する命令が格納されている記憶領域の先頭アドレス（「共有命令メモリ先頭アドレス」）を保持するレジスタである。
【００４２】
共有命令メモリ終了アドレスレジスタ２０６は第２ＣＰＵ２００の共有命令メモリ空間の終了アドレス、つまり、第１プロセッサ１０が備える命令メモリ１０１が有する記憶領域のうち第２ＣＰＵ２００が実行する命令が格納されている記憶領域の終了アドレス（「共有命令メモリ終了アドレス」）を保持するレジスタである。
【００４３】
メモリ共有モード設定レジスタ２０７は第２ＣＰＵ２００のメモリ共有モードの有効／無効を保持するレジスタでる。ここに格納された値が“０”である場合はメモリ共有モードが無効であることを示し、“１”である場合はメモリ共有モードが有効であることを示す。なお、「メモリ共有モードが無効である」とは、命令メモリ２０１が第２ＣＰＵ２００によって使用されることを意味し、「メモリ共有モードが有効である」とは、命令メモリ２０１が第１ＣＰＵ１００によって使用されることを意味する。
【００４４】
第２ＣＰＵ２００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８として、第２ＣＰＵ２００が命令メモリ（命令メモリ２０１または命令メモリ１０１）へのアクセス中には“１（Ｂｕｓｙ）”を出力し、アクセスを行っていない場合には“０（非Ｂｕｓｙ）”を出力する。
【００４５】
第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９として、メモリ共有モード設定レジスタ２０７に格納された値をセレクタ２０２へ出力する。
【００４６】
第２ＣＰＵ命令メモリバス２１０は命令メモリ２０１をセレクタ２０２とセレクタ１０２とに接続するバスである。
【００４７】
ＤＲＡＭコントローラ３００は第１ＣＰＵ１００および第２ＣＰＵ２００とメモリバスを介して接続され、第１ＣＰＵ１００と第２ＣＰＵ２００からのＤＲＡＭ３０１へのアクセスを制御する。
【００４８】
ＤＲＡＭ３０１は、第１プロセッサ１０および第２プロセッサ２０の外部に設けられた外部メモリの一例としてのＤＲＡＭであり、ＤＲＡＭコントローラ３００に制御される。
【００４９】
外部メモリ３０２は、ＤＲＡＭコントローラ３００を介さずに、第１プロセッサ１０および第２プロセッサ２０によってアクセスされる。
【００５０】
なお、メモリ制御のための初期設定として、第１ＣＰＵ１００は、命令メモリ領域を設定するためにローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とを初期設定し、共有命令メモリ領域を設定するために共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とを初期設定し、メモリ共有モードを設定するためにメモリ共有モード設定レジスタ１０７を初期設定する。
【００５１】
同様に、第２ＣＰＵ２００は、命令メモリ領域を設定するためにローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とを初期設定し、共有命令メモリ領域を設定するために共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６とを初期設定し、メモリ共有モードを設定するためにメモリ共有モード設定レジスタ２０７を初期設定する。
【００５２】
本実施の形態では、命令メモリ領域および共有命令メモリ領域の初期設定の一例として、図２のレジスタ構成にあるとおりに各レジスタの値が設定される。
【００５３】
つまり、第１プロセッサ１０において、ローカル命令メモリ先頭アドレスレジスタ１０３にはローカル命令メモリ先頭アドレスとして０ｘ５０００００００が設定され（図２（ａ））、ローカル命令メモリ終了アドレスレジスタ１０４にはローカル命令メモリ終了アドレスとして０ｘ５００００ＦＦＦが設定され（図２（ｂ））、共有命令メモリ先頭アドレスレジスタ１０５には共有命令メモリ先頭アドレスとして０ｘ５０００１０００が設定され（図２（ｃ））、共有命令メモリ終了アドレスレジスタ１０６には共有命令メモリ終了アドレスとして０ｘ５０００１ＦＦＦが設定され（図２（ｄ））、メモリ共有モード設定レジスタ１０７にはメモリ共有モードとして１が設定される（図２（ｅ））。これは、第１ＣＰＵ１００が、命令メモリ１０１を０ｘ５０００００００〜０ｘ５００００ＦＦＦ番地のローカル命令メモリとしてアクセスし、命令メモリ２０１を０ｘ５０００１０００〜０ｘ５０００１ＦＦＦ番地の共有命令メモリとしてアクセスするためである。
【００５４】
また、第２プロセッサ２０において、ローカル命令メモリ先頭アドレスレジスタ２０３にはローカル命令メモリ先頭アドレスとして０ｘ５０００１０００が設定され（図２（ｆ））、ローカル命令メモリ終了アドレスレジスタ２０４にはローカル命令メモリ終了アドレスとして０ｘ５０００１ＦＦＦが設定され（図２（ｇ））、共有命令メモリ先頭アドレスレジスタ２０５には共有命令メモリ先頭アドレスとして０ｘ５０００００００が設定され（図２（ｈ））、共有命令メモリ終了アドレスレジスタ２０６には共有命令メモリ終了アドレスとして０ｘ５００００ＦＦＦが設定され（図２（ｉ））、メモリ共有モード設定レジスタ２０７にはメモリ共有モードとして１が設定される（図２（ｊ））。これは、第２ＣＰＵ２００が、命令メモリ２０１を０ｘ５０００１０００〜０ｘ５０００１ＦＦＦ番地のローカル命令メモリとしてアクセスし、命令メモリ１０１を０ｘ５０００００００〜０ｘ５００００ＦＦＦ番地の共有命令メモリとしてアクセスするためである。
【００５５】
なお、図２に示された初期設定に従って命令メモリ１０１および命令メモリ２０１の共有化を実現するために、その初期設定に対応したアドレスデコーダ等のアドレス回路が、第１プロセッサ１０および第２プロセッサ２０内に設けられている。ただし、図１では、アドレス回路の図示が省略されている。
【００５６】
次に、以上のように構成された本実施の形態におけるマルチプロセッサシステム１における第１ＣＰＵ１００でのメモリ制御の基本動作を、図３の第１ＣＰＵ１００によるメモリ制御を示すフローチャートに基づいて説明する。
【００５７】
ステップＳ１０１において、第１ＣＰＵ１００は、命令フェッチを行うアドレスがローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内かの判定を行い、範囲内である場合にはステップＳ１０２へ分岐し、範囲外である場合にはステップＳ１０６へ分岐する。
【００５８】
ステップＳ１０２においては、第１ＣＰＵ１００は、第２ＣＰＵ２００が命令メモリ１０１へのアクセス中ではないことを確認するために第２ＣＰＵ命令メモリＢｕｓｙ信号２０８の状態と第２ＣＰＵ命令メモリセレクト信号２０９の状態とを確認し、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が第１ＣＰＵ１００を選択した状態である場合にはステップＳ１０４へ分岐し、そうではない場合にはステップＳ１０３へ分岐する。
【００５９】
ステップＳ１０３においては、第１ＣＰＵ１００は、命令メモリ１０１へのアクセスの準備として第１ＣＰＵ命令メモリセレクト信号１０９の状態を確認し、第１ＣＰＵ命令メモリセレクト信号１０９が第１ＣＰＵ１００を選択し命令メモリ１０１が選択されている場合には命令メモリ１０１にアクセスするためにステップＳ１１１へ分岐し、第２ＣＰＵ命令メモリバス２１０を選択している場合には、ステップＳ１０５へ分岐する。
【００６０】
ステップＳ１０４においては、第１ＣＰＵ１００は、一定期間のウェイトサイクルを経てステップＳ１０２へ遷移する。
【００６１】
ステップＳ１０５においては、第１ＣＰＵ１００は、命令メモリ１０１にアクセスするために、第１ＣＰＵ命令メモリセレクト信号１０９を命令メモリ１０１を選択するように切り替え、命令メモリ１０１にアクセスするためにステップＳ１１１へ遷移する。
【００６２】
ステップＳ１０６においては、第１ＣＰＵ１００は、命令フェッチを行うアドレスが共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内かの判定を行い、範囲内である場合にはステップＳ１０７へ分岐し、範囲外である場合には命令メモリおよび共有命令メモリ領域でのアクセスではないとして外部メモリ３０２等にアクセスするためにステップＳ１１１へ分岐する。
【００６３】
ステップＳ１０７においては、第１ＣＰＵ１００は、第２ＣＰＵ２００が命令メモリ２０１へのアクセス中ではないことを確認するために第２ＣＰＵ命令メモリＢｕｓｙ信号２０８の状態と第２ＣＰＵ命令メモリセレクト信号２０９の状態とを確認し、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が第２ＣＰＵ２００を選択した状態である場合にはステップＳ１０９へ分岐し、そうではない場合にはステップＳ１０８へ分岐する。
【００６４】
ステップＳ１０８においては、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９が第２ＣＰＵ命令メモリバス２１０を選択している場合には命令メモリ２０１にアクセスするためにステップＳ１１１へ分岐し、命令メモリ１０１を選択している場合には、ステップＳ１１０へ分岐する。
【００６５】
ステップＳ１０９においては、第１ＣＰＵ１００は、一定期間のウェイトサイクルを経てステップＳ１０８へ遷移する。
【００６６】
ステップＳ１１０においては、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９を第２ＣＰＵ命令メモリバス２１０を選択するように切り替え、命令メモリ２０１にアクセスするためにステップＳ１１１へ遷移する。
【００６７】
ステップＳ１１１では、第１ＣＰＵ１００は、命令フェッチアクセスを実行する。
【００６８】
このように、図３のフローチャートから分かるように、第１ＣＰＵ１００は、命令フェッチを行うアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とで定義される領域内である場合に（Ｓ１０１）、第２ＣＰＵ命令メモリセレクト信号２０９と第２ＣＰＵ命令メモリＢｕｓｙ信号２０８とに基づいて第２ＣＰＵ２００が命令メモリ１０１にアクセスしていないと判定したときに（Ｓ１０２）、命令メモリ１０１と第１ＣＰＵ１００とを接続するようにセレクタ１０２を制御し（Ｓ１０５）、一方、命令フェッチを行うアドレスが、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とで定義される領域内である場合に（Ｓ１０６）、第２ＣＰＵ命令メモリセレクト信号２０９と第２ＣＰＵ命令メモリＢｕｓｙ信号２０８とに基づいて第２ＣＰＵ２００が命令メモリ２０１にアクセスしていないと判定したときに（Ｓ１０７）、命令メモリ２０１と第１ＣＰＵ１００とを接続するようにセレクタ１０２を制御する（Ｓ１１０）。
【００６９】
これにより、命令をフェッチするアドレスに連動して、命令メモリ１０１と命令メモリ２０１とが切り替えられる。そして、第１ＣＰＵ１００は、第２ＣＰＵ２００の命令メモリ１０１または命令メモリ２０１へのアクセス状態を参照し、命令フェッチを行う命令メモリの切替制御を行うことで、第１ＣＰＵ１００と第２ＣＰＵ２００による命令メモリ１０１または命令メモリ２０１へのアクセスが調停される。
【００７０】
次に、本実施の形態におけるマルチプロセッサシステム１における第２ＣＰＵ２００でのメモリ制御の基本動作を、図４の第２ＣＰＵ２００によるメモリ制御を示すフローチャートに基づいて説明する。
【００７１】
ステップＳ２０１において、第２ＣＰＵ２００は、命令フェッチを行うアドレスがローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内かの判定を行い、範囲内である場合にはステップＳ２０２へ分岐し、範囲外である場合にはステップＳ２０６へ分岐する。
【００７２】
ステップＳ２０２においては、第２ＣＰＵ２００は、第１ＣＰＵ１００が命令メモリ２０１へのアクセス中ではないことを確認するために第１ＣＰＵ命令メモリＢｕｓｙ信号１０８の状態と第１ＣＰＵ命令メモリセレクト信号１０９の状態とを確認し、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が第２ＣＰＵ２００を選択した状態である場合にはステップＳ２０４へ分岐し、そうではない場合にはステップＳ２０３へ分岐する。
【００７３】
ステップＳ２０３においては、第２ＣＰＵ２００は、命令メモリ２０１へのアクセスの準備として第２ＣＰＵ命令メモリセレクト信号２０９の状態を確認し、第２ＣＰＵ命令メモリセレクト信号２０９が命令メモリ２０１を選択している場合には命令メモリ２０１にアクセスするためにステップＳ２１１へ分岐し、第１ＣＰＵ命令メモリバス１１０を選択している場合には、ステップＳ２０４へ分岐する。
【００７４】
ステップＳ２０４においては、第２ＣＰＵ２００は、一定期間のウェイトサイクルを経てステップＳ２０２へ遷移する。
【００７５】
ステップＳ２０５においては、第２ＣＰＵ２００は、命令メモリ２０１にアクセスするために、第２ＣＰＵ命令メモリセレクト信号２０９を命令メモリ２０１を選択するように切り替え、命令メモリ２０１にアクセスするためにステップＳ２１１へ遷移する。
【００７６】
ステップＳ２０６においては、第２ＣＰＵ２００は、命令フェッチを行うアドレスが共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内かの判定を行い、範囲内である場合にはステップＳ２０７へ分岐し、範囲外である場合には命令メモリおよび共有命令メモリ領域でのアクセスではないとして外部メモリ３０２等にアクセスするためにステップＳ２１１へ分岐する。
【００７７】
ステップＳ２０７においては、第２ＣＰＵ２００は、第１ＣＰＵ１００が命令メモリ１０１へのアクセス中ではないことを確認するために第１ＣＰＵ命令メモリＢｕｓｙ信号１０８の状態と第１ＣＰＵ命令メモリセレクト信号１０９の状態とを確認し、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が第１ＣＰＵ１００を選択した状態である場合にはステップＳ２０９へ分岐し、そうではない場合にはステップＳ２０８へ分岐する。
【００７８】
ステップＳ２０８においては、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９が第１ＣＰＵ命令メモリバス１１０を選択している場合には命令メモリ１０１にアクセスするためにステップＳ２１１へ分岐し、命令メモリ２０１を選択している場合には、ステップＳ２１０へ分岐する。
【００７９】
ステップＳ２０９においては、第２ＣＰＵ２００は、一定期間のウェイトサイクルを経てステップＳ２０８へ遷移する。
【００８０】
ステップＳ２１０においては、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９を第１ＣＰＵ命令メモリバス１１０を選択するように切り替え、命令メモリ１０１にアクセスするためにステップＳ２１１へ遷移する。
【００８１】
ステップＳ２１１では、第２ＣＰＵ２００は、命令フェッチアクセスを実行する。
【００８２】
このように、図４のフローチャートから分かるように、第２ＣＰＵ２００は、命令フェッチを行うアドレスが、ローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とで定義される領域内である場合に（Ｓ２０１）、第１ＣＰＵ命令メモリセレクト信号１０９と第１ＣＰＵ命令メモリＢｕｓｙ信号１０８とに基づいて第１ＣＰＵ１００が命令メモリ２０１にアクセスしていないと判定したときに（Ｓ２０２）、命令メモリ２０１と第２ＣＰＵ２００とを接続するようにセレクタ２０２を制御し（Ｓ２０５）、一方、命令フェッチを行うアドレスが、共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６とで定義される領域内である場合に（Ｓ２０６）、第１ＣＰＵ命令メモリセレクト信号１０９と第１ＣＰＵ命令メモリＢｕｓｙ信号１０８とに基づいて第１ＣＰＵ１００が命令メモリ１０１にアクセスしていないと判定したときに（Ｓ２０７）、命令メモリ１０１と第２ＣＰＵ２００とを接続するようにセレクタ２０２を制御する（Ｓ２１０）。
【００８３】
これにより、命令をフェッチするアドレスに連動して、命令メモリ１０１と命令メモリ２０１とが切り替えられる。そして、第２ＣＰＵ２００は、第１ＣＰＵ１００の命令メモリ１０１または命令メモリ２０１へのアクセス状態を参照し、命令フェッチを行う命令メモリの切替制御を行うことで、第１ＣＰＵ１００と第２ＣＰＵ２００による命令メモリ１０１または命令メモリ２０１へのアクセスが調停される。
【００８４】
次に、図３の第１ＣＰＵ１００によるメモリ制御を示すフローチャートと図４の第２ＣＰＵ２００によるメモリ制御を示すフローチャート基づくメモリ制御動作を図５のタイミングチャートで説明する。
【００８５】
時刻１では、以下のことが行われる。
【００８６】
第１ＣＰＵ１００は実行した命令により０ｘ５０００００１０番地から命令フェッチを開始する。
【００８７】
ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスがローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０２へ遷移する。
【００８８】
ステップＳ１０２では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”、かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第１ＣＰＵ”ではないこと（つまり、第２ＣＰＵ２００が命令メモリ１０１にアクセス中ではないこと）を判定しステップＳ１０３へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【００８９】
ステップＳ１０３では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９が“第１ＣＰＵ”であることを判定し命令メモリ１０１にアクセスするためにステップＳ１１１へ遷移する。
【００９０】
第２ＣＰＵ２００は実行した命令により０ｘ５０００１０２０番地から命令フェッチを開始する。
【００９１】
ステップＳ２０１では、第２ＣＰＵ２００は、命令フェッチアドレスがローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定しステップＳ２０２へ遷移する。
【００９２】
ステップＳ２０２では、第２ＣＰＵ２００は、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”、かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではないこと（つまり、第１ＣＰＵ１００が命令メモリ２０１にアクセス中ではないこと）を判定しステップＳ２０３へ遷移すると同時に第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“１（Ｂｕｓｙ）”にして第１ＣＰＵ１００へ出力する。
【００９３】
ステップＳ２０３では、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”であることを判定し命令メモリ２０１にアクセスするためにステップＳ２１１へ遷移する。
【００９４】
時刻２では、以下のことが行われる。
【００９５】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ１０１からセレクタ１０２を経て第１ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力され、ステップＳ２１１で、第２ＣＰＵ２００による命令メモリアクセスによって、命令メモリ２０１からセレクタ２０２を経て第２ＣＰＵ命令メモリデータが第２ＣＰＵ２００へ出力される。
【００９６】
時刻３では、以下のことが行われる。
【００９７】
第１ＣＰＵ１００は、時刻２で第１ＣＰＵ１００へ出力された第１ＣＰＵ命令メモリデータを第１ＣＰＵへ入力された命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【００９８】
同時に第２ＣＰＵ２００は、第２ＣＰＵ２００へ出力された第２ＣＰＵ命令メモリデータを第２ＣＰＵ２００へ入力された命令としてフェッチし、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“非Ｂｕｓｙ”へ遷移させて第１ＣＰＵ１００へ出力する。
【００９９】
時刻４では、以下のことが行われる。
【０１００】
第１ＣＰＵ１００は実行した命令により０ｘ５０００１１００番地から命令フェッチを開始する。
【０１０１】
ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４の範囲外であると判定し、ステップＳ１０６へ遷移し、ステップＳ１０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０７へ遷移する。
【０１０２】
ステップＳ１０７では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”ではないこと（つまり、第２ＣＰＵ２００が命令メモリ２０１にアクセス中ではないこと）を判定しステップＳ１０８へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１０３】
ステップＳ１０８では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではないことを判定しステップＳ１１０へ遷移する。
【０１０４】
ステップＳ１１０では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９を“第２ＣＰＵ”に変更し、命令メモリ２０１にアクセスするためにステップＳ１１１へ遷移する。
【０１０５】
第２ＣＰＵ２００は実行した命令による次の命令フェッチが発生していないため、命令メモリへのアクセスは発生しない。
【０１０６】
時刻５では、以下のことが行われる。
【０１０７】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ２０１からセレクタ１０２を経て第２ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力される。
【０１０８】
第２ＣＰＵ２００は実行した命令による次の命令フェッチが発生していないため、命令メモリへのアクセスは発生しない。
【０１０９】
時刻６では、以下のことが行われる。
【０１１０】
第１ＣＰＵ１００は、時刻５で第１ＣＰＵ１００へ出力された第２ＣＰＵ命令メモリデータを命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１１１】
第２ＣＰＵ２００は実行した命令により０ｘ５０００１０２４番地から命令フェッチを開始する。ステップＳ２０１では、第２ＣＰＵ２００は、命令フェッチアドレスがローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定しステップＳ２０２へ遷移し、ステップＳ２０２では第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではないこと（つまり、第１ＣＰＵ１００が命令メモリ２０１にアクセス中ではないこと）を判定し、ステップＳ２０３では第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”であることを判定し命令メモリ２０１にアクセスするためにステップＳ２１１へ遷移する。
【０１１２】
時刻７では、以下のことが行われる。
【０１１３】
第１ＣＰＵ１００は実行した命令により０ｘ５０００１１０４番地から命令フェッチを開始する。ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４の範囲外であると判定し、ステップＳ１０６へ遷移し、ステップＳ１０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０７へ遷移する。
【０１１４】
ステップＳ１０７では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”である（つまり、第２ＣＰＵ２００が命令メモリ２０１にアクセス中である）と判定し、ステップＳ１０９へ遷移する。
【０１１５】
また、ステップＳ２１１で、第２ＣＰＵ２００による命令メモリアクセスによって、命令メモリ２０１からセレクタ２０２を経て第２ＣＰＵ命令メモリデータが第２ＣＰＵ２００へ出力される。
【０１１６】
時刻８では、以下のことが行われる。
【０１１７】
第１ＣＰＵ１００はステップＳ１０９からステップＳ１０７する。
【０１１８】
ステップＳ１０７では、第１ＣＰＵは、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”ではない（つまり、第２ＣＰＵ２００が命令メモリ２０１にアクセス中ではない）ため、ステップＳ１０８へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１１９】
ステップＳ１０８では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９の値が“０”であることを判定し、命令メモリ２０１にアクセスするためにステップＳ１１１へ遷移する。
【０１２０】
同時に第２ＣＰＵ２００は、第２ＣＰＵ２００へ出力された第２ＣＰＵ命令メモリデータを第２ＣＰＵ２００へ入力された命令としてフェッチし、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“非Ｂｕｓｙ”へ遷移させて第１ＣＰＵ１００へ出力する。
【０１２１】
時刻９では、以下のことが行われる。
【０１２２】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ２０１からセレクタ１０２を経て第２ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力される。
【０１２３】
時刻１０では、以下のことが行われる。
【０１２４】
第１ＣＰＵ１００は、時刻９で第１ＣＰＵ１００へ出力された第２ＣＰＵ命令メモリデータを第１ＣＰＵ１００へ入力された命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１２５】
時刻１１では、以下のことが行われる。
【０１２６】
第１ＣＰＵ１００は実行した命令により０ｘ５０００１１０８番地から命令フェッチを開始する。ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４の範囲外であると判定し、ステップＳ１０６へ遷移し、ステップＳ１０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０７へ遷移する。
【０１２７】
ステップＳ１０７では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”ではないこと（つまり、第２ＣＰＵ２００が命令メモリ２０１にアクセス中ではないこと）を判定しステップＳ１０８へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１２８】
同時に第２ＣＰＵ２００は実行した命令により０ｘ５００００１００番地から命令フェッチを開始する。ステップＳ２０１では、第２ＣＰＵ２００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４の範囲外であると判定し、ステップＳ２０６へ遷移し、ステップＳ２０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ２０７へ遷移する。
【０１２９】
ステップＳ２０７では、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第１ＣＰＵ”ではないこと（つまり、第１ＣＰＵ１００が命令メモリ１０１にアクセス中ではないこと）を判定しステップＳ２０８へ遷移すると同時に第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“１（Ｂｕｓｙ）”にして第１ＣＰＵ１００へ出力する。
【０１３０】
ステップＳ２０８では、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９が“第１ＣＰＵ”ではないことを判定しステップＳ２１０へ遷移する。
【０１３１】
ステップＳ２１０では、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９を“第１ＣＰＵ”に変更し、命令メモリ１０１にアクセスするためにステップＳ２１１へ遷移する。
【０１３２】
時刻１２では、以下のことが行われる。
【０１３３】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ２０１からセレクタ１０２を経て第２ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力され、ステップＳ２１１で、第２ＣＰＵ２００による命令メモリアクセスによって、命令メモリ１０１からセレクタ２０２を経て第１ＣＰＵ命令メモリデータが第２ＣＰＵ２００へ出力される。
【０１３４】
時刻１３では、以下のことが行われる。
【０１３５】
第１ＣＰＵ１００は、時刻１２で第１ＣＰＵ１００へ出力された第１ＣＰＵ命令メモリデータを第１ＣＰＵ１００へ入力された命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１３６】
同時に第２ＣＰＵ２００は、第２ＣＰＵ２００へ出力された第２ＣＰＵ命令メモリデータを第２ＣＰＵ２００へ入力された命令としてフェッチし、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“非Ｂｕｓｙ”へ遷移させて第１ＣＰＵ１００へ出力する。
【０１３７】
時刻１４では、以下のことが行われる。
【０１３８】
第１ＣＰＵ１００は実行した命令により０ｘ５０００００１４番地から命令フェッチを開始する。
【０１３９】
ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスがローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０２へ遷移する。
【０１４０】
ステップＳ１０２では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”、かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第１ＣＰＵ”ではないこと（つまり、第２ＣＰＵ２００が命令メモリ１０１にアクセス中ではないこと）を判定しステップＳ１０３へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１４１】
ステップＳ１０３では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”であることを判定しステップＳ１０５へ遷移する。
【０１４２】
ステップＳ１０５では、第１ＣＰＵ１００は、命令メモリ１０１にアクセスするために、第１ＣＰＵ命令メモリセレクト信号１０９を“第１ＣＰＵ”に変更し、命令メモリ１０１にアクセスするためにステップＳ１１１へ遷移する。
【０１４３】
時刻１５では、以下のことが行われる。
【０１４４】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ１０１からセレクタ１０２を経て第１ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力さる。
【０１４５】
同時に第２ＣＰＵ２００は実行した命令により０ｘ５００００１０８番地から命令フェッチを開始する。ステップＳ２０１では、第２ＣＰＵ２００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４の範囲外であると判定し、ステップＳ２０６へ遷移し、ステップＳ２０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ２０７へ遷移する。
【０１４６】
ステップＳ２０７では、第２ＣＰＵ２００は、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第１ＣＰＵ”である（つまり、第１ＣＰＵ１００が命令メモリ１０１にアクセス中である）と判定し、ステップＳ２０９へ遷移する。
【０１４７】
時刻１６では、以下のことが行われる。
【０１４８】
第１ＣＰＵ１００は、時刻１５で第１ＣＰＵ１００へ出力された第１ＣＰＵ命令メモリデータを第１ＣＰＵ１００へ入力された命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１４９】
同時に第２ＣＰＵ２００はステップＳ２０９からステップＳ２０７する。
【０１５０】
ステップＳ２０７では、第２ＣＰＵ２００は、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではない（つまり、第１ＣＰＵ１００が命令メモリ１０１にアクセス中ではない）ため、ステップＳ２０８へ遷移すると同時に第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“１（Ｂｕｓｙ）”にして第１ＣＰＵ１００へ出力する。
【０１５１】
ステップＳ２０８では、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９の値が“第１ＣＰＵ”であることを判定し、命令メモリ１０１にアクセスするためにステップＳ２１１へ遷移する
時刻１７では、以下のことが行われる。
【０１５２】
第１ＣＰＵ１００は実行した命令により０ｘ５０００００１８番地から命令フェッチを開始する。
【０１５３】
ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスがローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０２へ遷移する。
【０１５４】
ステップＳ１０２では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”、かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第１ＣＰＵ”であること（つまり、第２ＣＰＵ２００が命令メモリ１０１にアクセス中であること）を判定しステップＳ１０４へ遷移する。
【０１５５】
同時に、ステップＳ２１１で、第２ＣＰＵ２００による命令メモリアクセスによって、命令メモリ１０１からセレクタ２０２を経て第１ＣＰＵ命令メモリデータが第２ＣＰＵ２００へ出力される。
【０１５６】
時刻１８では、以下のことが行われる。
【０１５７】
第１ＣＰＵ１００はステップＳ１０４からステップＳ１０２する。
【０１５８】
ステップＳ１０２では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第１ＣＰＵ”ではない（つまり、第２ＣＰＵ２００が命令メモリ１０１にアクセス中ではない）ため、ステップＳ１０３へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１５９】
ステップＳ１０３では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９の値が“第１ＣＰＵ”であることを判定し、命令メモリ１０１にアクセスするためにステップＳ１１１へ遷移する。
【０１６０】
同時に第２ＣＰＵ２００は、第２ＣＰＵ２００へ出力された第１ＣＰＵ命令メモリデータを命令としてフェッチし、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“非Ｂｕｓｙ”へ遷移させて第１ＣＰＵ１００へ出力する。
【０１６１】
時刻１９では、以下のことが行われる。
【０１６２】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ１０１からセレクタ１０２を経て第１ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力される。
【０１６３】
時刻２０では、以下のことが行われる。
【０１６４】
第１ＣＰＵ１００は、時刻１９で第１ＣＰＵ１００へ出力された第１ＣＰＵ命令メモリデータを第１ＣＰＵ１００へ入力された命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１６５】
時刻２１では、以下のことが行われる。
【０１６６】
第１ＣＰＵ１００は実行した命令により０ｘ５０００１２００番地から命令フェッチを開始する。
【０１６７】
ステップＳ１０１では、第１ＣＰＵ１００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４の範囲外であると判定し、ステップＳ１０６へ遷移し、ステップＳ１０６では命令フェッチアドレスが、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６とによって決定される記憶領域（共有命令メモリ先頭アドレス〜共有命令メモリ終了アドレス）の範囲内であると判定しステップＳ１０７へ遷移する。
【０１６８】
ステップＳ１０７では、第１ＣＰＵ１００は、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８が“１（Ｂｕｓｙ）”かつ第２ＣＰＵ命令メモリセレクト信号２０９が“第２ＣＰＵ”ではないこと（つまり、第２ＣＰＵ２００が命令メモリ２０１にアクセス中ではないこと）を判定しステップＳ１０８へ遷移すると同時に第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“１（Ｂｕｓｙ）”にして第２ＣＰＵ２００へ出力する。
【０１６９】
ステップＳ１０８では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではないことを判定しステップＳ１１０へ遷移する。
【０１７０】
ステップＳ１１０では、第１ＣＰＵ１００は、第１ＣＰＵ命令メモリセレクト信号１０９を“第２ＣＰＵ”に変更し、命令メモリ２０１にアクセスするためにステップＳ１１１へ遷移する。
【０１７１】
時刻２２では、以下のことが行われる。
【０１７２】
ステップＳ１１１で、第１ＣＰＵ１００による命令メモリアクセスによって、命令メモリ２０１からセレクタ１０２を経て第２ＣＰＵ命令メモリデータが第１ＣＰＵ１００へ出力される。
【０１７３】
同時に第２ＣＰＵ２００は実行した命令により０ｘ５０００１０２８番地から命令フェッチを開始する。ステップＳ２０１では、第２ＣＰＵ２００は、命令フェッチアドレスが、ローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４とによって決定される記憶領域（ローカル命令メモリ先頭アドレス〜ローカル命令メモリ終了アドレス）の範囲内であると判定し、ステップＳ２０２へ遷移し、ステップＳ２０２では第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”である（つまり、第１ＣＰＵ１００が命令メモリ２０１にアクセス中である）と判定し、ステップＳ２０４へ遷移する。
【０１７４】
時刻２３では、以下のことが行われる。
【０１７５】
第１ＣＰＵ１００は、時刻２２で第１ＣＰＵ１００へ出力された第１ＣＰＵ命令メモリデータを命令としてフェッチし、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８を“非Ｂｕｓｙ”へ遷移させて第２ＣＰＵ２００へ出力する。
【０１７６】
第２ＣＰＵ２００はステップＳ２０４からステップＳ２０２へ遷移する。
【０１７７】
ステップＳ２０２では、第２ＣＰＵ２００は、第１ＣＰＵ命令メモリＢｕｓｙ信号１０８が“１（Ｂｕｓｙ）”かつ第１ＣＰＵ命令メモリセレクト信号１０９が“第２ＣＰＵ”ではない（つまり、第１ＣＰＵ１００が命令メモリ２０１にアクセス中ではないこと）ため、ステップＳ２０３へ遷移すると同時に第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“１（Ｂｕｓｙ）”にして第１ＣＰＵ１００へ出力する。
【０１７８】
ステップＳ２０３では、第２ＣＰＵ２００は、第２ＣＰＵ命令メモリセレクト信号２０９の値が“第２ＣＰＵ”であることを判定し、ステップＳ２０５へ遷移する。
【０１７９】
ステップＳ２０５では、第２ＣＰＵ２００は、命令メモリ２０１にアクセスするために、第２ＣＰＵ命令メモリセレクト信号２０９を“第２ＣＰＵ”に変更し、命令メモリ２０１にアクセスするためにステップＳ２１１へ遷移する。
【０１８０】
時刻２４では、以下のことが行われる。
【０１８１】
ステップＳ２１１で、第２ＣＰＵ２００による命令メモリアクセスによって、命令メモリ２０１からセレクタ２０２を経て第２ＣＰＵ命令メモリデータが第２ＣＰＵ２００へ出力される。
【０１８２】
時刻２５では、以下のことが行われる。
【０１８３】
第２ＣＰＵ２００は、第２ＣＰＵ２００へ出力された第２ＣＰＵ命令メモリデータを命令としてフェッチし、第２ＣＰＵ命令メモリＢｕｓｙ信号２０８を“非Ｂｕｓｙ”へ遷移させて第１ＣＰＵ１００へ出力する。
【０１８４】
以上のように、本実施の形態によれば、第１ＣＰＵのローカル命令メモリ先頭アドレスレジスタ１０３とローカル命令メモリ終了アドレスレジスタ１０４、共有命令メモリ先頭アドレスレジスタ１０５と共有命令メモリ終了アドレスレジスタ１０６、および、第２ＣＰＵ２００のローカル命令メモリ先頭アドレスレジスタ２０３とローカル命令メモリ終了アドレスレジスタ２０４、共有命令メモリ先頭アドレスレジスタ２０５と共有命令メモリ終了アドレスレジスタ２０６で、各々のＣＰＵのローカル命令メモリの領域を定義している。そして、その定義をもとに命令フェッチアドレスの範囲を判定し、その判定結果に基づいて第１ＣＰＵ命令メモリセレクト信号１０９と第２ＣＰＵ命令メモリセレクト信号２０９とを制御している。よって、各々のローカル命令メモリを共有することが可能となり、ローカル命令メモリとして使用可能な領域を倍増することが出来る。
【０１８５】
つまり、各ＣＰＵは、当該ＣＰＵが命令フェッチを行うアドレスが、ローカル命令メモリ先頭アドレスレジスタとローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合には、ローカル命令メモリと当該ＣＰＵとを接続するようにセレクタを制御し、一方、ＣＰＵが命令フェッチを行うアドレスが、共有命令メモリ先頭アドレスレジスタと共有命令メモリ終了アドレスレジスタとで定義される領域内である場合には、他のプロセッサが備えるローカル命令メモリと当該ＣＰＵとを接続するようにセレクタを制御する。これにより、ＣＰＵがアクセスするアドレスに応じて、アクセス先として、当該ＣＰＵのローカル命令メモリと他のＣＰＵのローカル命令メモリとが切り替えられ、ＣＰＵは、ローカル命令メモリの記憶容量以上のサイズのプログラムを命令メモリから読み出して実行することが出来る。
【０１８６】
また、ＣＰＵは、命令フェッチを行うアドレスが、ローカル命令メモリ先頭アドレスレジスタとローカル命令メモリ終了アドレスレジスタとで定義される領域内である場合に、第２ＣＰＵ命令メモリセレクト信号と第２ＣＰＵ命令メモリビジー信号とに基づいて他のプロセッサが備えるＣＰＵがローカル命令メモリにアクセスしていないと判定したときに、ローカル命令メモリと当該ＣＰＵとを接続するようにセレクタを制御し、一方、命令フェッチを行うアドレスが、共有命令メモリ先頭アドレスレジスタと共有命令メモリ終了アドレスレジスタとで定義される領域内である場合に、第２ＣＰＵ命令メモリセレクト信号と第２ＣＰＵ命令メモリビジー信号とに基づいて他のプロセッサが備えるＣＰＵが他のプロセッサが備えるローカル命令メモリにアクセスしていないと判定したときに、他のプロセッサが備えるローカル命令メモリと当該ＣＰＵとを接続するようにセレクタを制御する。これにより、一つのローカル命令メモリに対する複数のＣＰＵからのアクセスの競合が適切に調整される。
【０１８７】
以上、本発明に係るプロセッサ、マルチプロセッサシステムおよびメモリ制御方法について、実施の形態に基づいて説明したが、本発明は、この実施の形態に限定されるものではない。本発明の主旨を逸脱しない範囲で当業者が思いつく各種変形を実施の形態に施して得られる形態も本発明に含まれる。
【０１８８】
また、上記実施の形態では、マルチプロセッサシステム１は２つのプロセッサ（第１プロセッサ１０、第２プロセッサ２０）によって構成されたが、３つ以上のプロセッサによって構成されてもよい。そのときに、複数のプロセッサのそれぞれに備えられた命令メモリのうち、全ての命令メモリが他のプロセッサと共有されてもよいし、一部の命令メモリだけが他のプロセッサと共有されてもよい。さらに、一つの命令メモリを共有する複数のプロセッサは、マルチプロセッサシステムを構成する全てのプロセッサであってもよいし、マルチプロセッサシステムを構成する複数のプロセッサの中から選択された特定のプロセッサであってもよい。
【０１８９】
また、上記実施の形態では、マルチプロセッサシステム１は１チップのＬＳＩであったが、本発明はこのようなチップ構成に限定されず、第１プロセッサ１０および第２プロセッサ２０が別のチップで実現されていてもよいし、命令メモリ１０１、第１処理部１２０、命令メモリ２０１および第２処理部２２０が別のチップで実現されていてもよい。いずれのチップ構成であっても、ローカル命令メモリの記憶領域が拡大され得る。
【０１９０】
また、上記実施の形態では、命令メモリ１０１および命令メモリ２０１には、第１ＣＰＵ１００および第２ＣＰＵ２００によって実行される命令が格納されたが、第１ＣＰＵ１００および第２ＣＰＵ２００によって処理されるデータが格納されてもよい。つまり、上記実施の形態において、命令に代えて、データの共有化が行われてもよい。
【０１９１】
また、命令メモリ１０１および命令メモリ２０１は、それぞれ、第１ＣＰＵ１００および第２ＣＰＵ２００のキャッシュメモリであってもよい。
【産業上の利用可能性】
【０１９２】
本発明は、ローカル命令メモリを備える複数のプロセッサから構成されるマルチプロセッサシステム、そのプロセッサ、そのメモリ制御方法として、特に、ローカル命令メモリのサイズを実質的に拡大する形態でローカル命令メモリを各プロセッサ間で共有できるマルチプロセッサシステムとして、例えば、そのようなマルチプロセッサシステムを搭載したシステムＬＳＩとして、利用できる。
【符号の説明】
【０１９３】
１    マルチプロセッサシステム
１０    第１プロセッサ
２０    第２プロセッサ
１００    第１ＣＰＵ
１０１、２０１    命令メモリ
１０２、２０２    セレクタ
１０３、２０３    ローカル命令メモリ先頭アドレスレジスタ
１０４、２０４    ローカル命令メモリ終了アドレスレジスタ
１０５、２０５    共有命令メモリ先頭アドレスレジスタ
１０６、２０６    共有命令メモリ終了アドレスレジスタ
１０７、２０７    メモリ共有モード設定レジスタ
１０８    第１ＣＰＵ命令メモリＢｕｓｙ信号
１０９    第１ＣＰＵ命令メモリセレクト信号
１１０    第１ＣＰＵ命令メモリバス
１２０    第１処理部
２００    第２ＣＰＵ
２０８    第２ＣＰＵ命令メモリＢｕｓｙ信号
２０９    第２ＣＰＵ命令メモリセレクト信号
２１０    第２ＣＰＵ命令メモリバス
２２０    第２処理部
３００    ＤＲＡＭコントローラ
３０１    ＤＲＡＭ
３０２    外部メモリ
【図１】
2012234417.tif 000003
【図２】
2012234417.tif 000004
【図３】
2012234417.tif 000005
【図４】
2012234417.tif 000006
【図５Ａ】
2012234417.tif 000007
【図５Ｂ】
2012234417.tif 000008
【図５Ｃ】
2012234417.tif 000009