(57)【要約】【課題】本発明は、エラー処理方法及び情報処理装置に関し、ハーバードアーキテキチャを有するＣＰＵの命令バス又はデータバスで発生したバスエラーを適切に処理可能とすることを目的とする。【解決手段】ＣＰＵのバスで発生したエラーを処理するエラー処理方法において、ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段によりＣＰＵに入力し、バスエラーをＣＰＵ内のバスエラーカウンタでカウントし、バスエラーカウンタの値に基づいてＣＰＵに接続されたメモリ部の領域を指定するように構成する。【選択図】図１２
2008090542.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵのバスで発生したエラーを処理するエラー処理方法であって、
該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該ＣＰＵに入力するステップと、
該バスエラーを該ＣＰＵ内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該ＣＰＵに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
【請求項２】
該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項１記載のエラー処理方法。
【請求項３】
該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項１記載のエラー処理方法。
【請求項４】
該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする請求項１又は２記載のエラー処理方法。
【請求項５】
該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする請求項１又は２記載のエラー処理方法。
【請求項６】
命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該ＣＰＵはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ（ＥＩＴ：Exception, Interrupt, Trap）処理を行い、エラー処理ルーチンへジャンプすることを特徴とする請求項１記載のエラー処理方法。
【請求項７】
該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該ＣＰＵに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする請求項１記載のエラー処理方法。
【請求項８】
命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする請求項１記載のエラー処理方法。
【請求項９】
ＣＰＵを備えた情報処理装置であって、
該ＣＰＵに接続されたメモリ部と、
該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該ＣＰＵに入力するバスエラー入力手段と、
該ＣＰＵ内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
【請求項１０】
該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする請求項９記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エラー処理方法及び情報処理装置に係り、特に命令バス又はデータバスで発生したバスエラーを処理するエラー処理方法、及びハーバードアーキテキチャを有するＣＰＵ等の情報処理装置に関する。
【背景技術】
【０００２】
車載用途等で、メモリ部のパリティチェックやECCチェック機能をマイクロプロセッサのＣＰＵに搭載する要求がある。従来のＣＰＵでは、バスアクセス時にエラーが発生した場合、正しい命令コードをＣＰＵに供給することができず、ＣＰＵを停止（HALT）させるしかない。このようなＣＰＵの停止を回避する1つの方法として、バスアクセス時にエラーが発生した場合には外部割込みをＣＰＵに入力する方法があるが、割込みルーチンにジャンプする前にバスエラーが発生した命令コードを実行してしまう可能性がある。又、ＣＰＵは、ジャンプ命令の場合のように、バスアクセスした命令コードを必ず実行するわけではないので、無意味な割込みを発生させる可能性もある。
【０００３】
更に、ＣＰＵが命令バスとデータバスとが分かれたハーバードアーキテキチャを有する場合、命令バスでバスエラーが発生した後、その命令の前に実行した命令にてデータバスエラーが発生する可能性があるため、命令バスエラーよりもデータバスエラーを優先処理することを考慮する必要がある。ハーバードアーキテキチャを有するＣＰＵを備えたマイクロプロセッサとしては、例えば富士通株式会社製のＦＲシリーズのＲＩＳＣ（Reduced Instruction Set Computer)型マイクロコントローラがある。このようなＣＰＵでは、未定義命令が発生した場合には、命令デコード部にある命令シーケンサ中の例外ハンドラが起動され、未定義割込みルーチンの先頭アドレスのフェッチ、ＣＰＵの状態（ステータス）を示すプロセッサステータス（ＰＳ：Processor Status）レジスタとプログラムカウンタ（ＰＣ：Program Counter）レジスタの内容退避のための命令を例外・割込み・トラップ（ＥＩＴ：Exception, Interrupt, Trap）処理により発生させて、割込みルーチンへジャンプする。
【０００４】
図１は、従来のＣＰＵの要部の構成を示すブロック図である。従来のＣＰＵは、大きく分けてフェッチ（Ｆ：Fetch）部１０１、デコード（Ｄ：Decode）部１０２、実行（Ｅ：Execute）部１０３、メモリアクセス（Ｍ：Memory access）部１０４及び汎用レジスタ部１０５から構成される。
【０００５】
Ｆ部１０１は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。Ｆ部１０１には、Ibusアクセス制御部１１１が設けられている。
【０００６】
Ｄ部１０２は、フェッチされた命令コードを解析して、Ｅ部１０３で実行すべき演算モード（足し算、引き算等）、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからＥ部１０３内の演算器（ＡＬＵ）１３２の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa，Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ１２１中の例外ハンドラ１２２により割込みルーチンにジャンプするため、Ｄ部１０２は割込みベクタテーブルのリードや汎用レジスタ部１０５のＰＳレジスタ及びＰＣレジスタの退避を行う命令を自動的に供給する。命令シーケンサ１２１内には、デコーダ１２３及びマルチプレクサ１２４が設けられている。又、Ｄ部１０２は、命令シーケンサ１２１でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス（又は、セレクタ）１２５及びマルチプレクサ１２６を有する。
【０００７】
図２は、従来のＣＰＵのＤ部１０２内の命令シーケンサ１２１の動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをＤ部１０２に入力し（ステップＳ１）、命令コードをデコードする（ステップＳ２）。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部１０５の内容を中間レジスタTdec，Ta，Tb，Tddにセットし、Ｅ部１０３に渡す（ステップＳ３）。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【０００８】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、その例外割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部１０５の内容をＥ部１０３に渡す（ステップＳ４）。例外処理へ移る方法として、ベクタテーブルを用いる手法がよく使われており、このベクタテーブル中の各アドレスのデータは、夫々の例外処理の開始番地を指し示しているので、ベクタアドレスと呼ばれる。次のサイクルで、ＰＳレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部１０５の内容をＥ部１０３に渡す（ステップＳ５）。その後、ＰＣレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部１０５の内容をＥ部１０３に渡す（ステップＳ６）。ステップＳ４〜Ｓ６は、ＥＩＴ処理を構成する。その後、他の割込み又はエラーがあるか否かをチェックし（ステップＳ７）、割込み又はエラーがない場合は（ステップＳ７でＮＯ）次の命令をデコードし、割込み又はエラーがある場合は（ステップＳ７でＹＥＳ）ＥＩＴ処理によるベクタアドレスの取得を繰り返す。
【０００９】
Ｅ部１０３は、Ｄ部１０２より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器１３２にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、Ｅ部１０３はレジスタバイパスルート１３１により演算器１３２の出力から直接Ｅ部１０３への入力用の中間レジスタTa又はTb，Tddに伝える。Ｅ部１０３は、Ｄ部１０２内の中間レジスタTddの出力がセットされる中間レジスタTedを有する。
【００１０】
Ｍ部１０４は、Ｅ部１０３よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部１０５（ＰＣ、R0〜R15）等へのライト又はリードを行う。Ｍ部１０４は、中間レジスタTia_m及びDbusアクセス制御部１４１を有する。
【００１１】
汎用レジスタ部１０５は、ＣＰＵの内部レジスタであり、ＰＣレジスタ、ＰＳレジスタ、演算用レジスタR0〜R15及びマルチプレクサ１５１を有する。
【００１２】
図１中、ＩＤは命令コード、ＩＡは命令コードのアドレス、iaccess，irdy， IRDY， ISIZEは夫々、命令コードのアクセス要求、命令コードのレディ出力、命令コードのレディ入力、命令コードのサイズを示す。又、DA，DDout，DDinは夫々データのアドレス、出力データ及び入力データを示す。更に、daccess，drdy，DRDY，DSIZEは夫々データのアクセス要求、データのレディ出力、データのレディ入力及びデータのサイズを示す。
【００１３】
各部１０１〜１０４の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi（i=0〜15）に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、Ｄ部１０２に間に合わないため、演算器１３２の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス１３１を設ける。
【００１４】
命令は、ＣＰＵがフェッチした順番に処理を行う。１つの命令は、１クロック入力する毎にＦ部１０１、Ｄ部１０２、Ｅ部１０３、Ｍ部１０４へと進んでいき、ＣＰＵはその命令に従って動作する。命令Ｉ１がフェッチされ、次のクロックで命令Ｉ２がＤ部１０２に進んだ時に、平行してＦ部１０１にて命令Ｉ２のフェッチを行う。これを繰り返し、命令Ｉ１〜Ｉ５がパイプライン処理されて行く。この時の様子を図３〜図８に示す。図３は、従来のＣＰＵの動作を説明するタイミングチャートである。又、図４は状態（１）を説明する図、図５は状態（２）を説明する図、図６は状態（３）を説明する図、図７は状態（４）を説明する図、図８は状態（５）を説明する図である。図４〜図８中、nopはノーオペレーション（no operation）を示す。
【００１５】
従来のＣＰＵにはバスエラー入力手段が設けられておらず、メモリ部にてパリティエラー等のエラーが発生した場合、ＣＰＵが実行できる命令を外部にて用意することができず、ＣＰＵの実行が止まってしまう。又、ＣＰＵが命令をフェッチしてパリティエラーを検出し、それを外部割込みにした場合、バスエラーが発生した命令を実行してしまう可能性がある。更に、ＣＰＵが命令をフェッチしてパリティエラーを検出しても、ジャンプ命令実行等によりフェッチした命令が実行されなかった場合、無意味な割込みを上げてしまうことになる。命令バスでのバスエラー発生時には、直前の命令でのデータバスエラーが後で発生するので、処理の優先順位を考慮する必要がある。
【００１６】
尚、アドレス又はデータのパリティエラーを検出する構成の１チップマイクロプロセッサは、例えば特許文献１にて提案されている。
【特許文献１】特開平６−２４２９７７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
従来のハーバードアーキテキチャを有するＣＰＵの場合、命令バス又はデータバスで発生したバスエラーを適切に処理することは難しいという問題があった。
【００１８】
そこで、本発明は、ハーバードアーキテキチャを有するＣＰＵの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１９】
上記の課題は、ＣＰＵのバスで発生したエラーを処理するエラー処理方法であって、該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該ＣＰＵに入力するステップと、該バスエラーを該ＣＰＵ内のバスエラーカウンタ手段でカウントするステップと、該バスエラーカウンタ手段の値に基づいて該ＣＰＵに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法によって達成できる。
【００２０】
上記の課題は、ＣＰＵを備えた情報処理装置であって、該ＣＰＵに接続されたメモリ部と、該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該ＣＰＵに入力するバスエラー入力手段と、該ＣＰＵ内で該バスエラーをカウントするバスエラーカウンタ手段と、該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置によって達成できる。
【発明の効果】
【００２１】
本発明によれば、ハーバードアーキテキチャを有するＣＰＵの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を実現することができる。
【発明を実施するための最良の形態】
【００２２】
本発明では、ＣＰＵの命令バス及びデータバスにバスエラー入力手段を設ける。又、ＣＰＵにバスエラーカウンタ手段を設け、このバスエラーカウンタ手段の内容を出力することでメモリ部のページを指定する。バスエラーカウンタ手段の更新は、命令バスでバスエラーが発生した場合は例えば未定義命令の例外ベクタにジャンプすると判断した時、又、データバスでバスエラーが発生した場合は例えばバスエラー発生時に行う。命令バスでバスエラーが発生した場合は、直前の命令にてデータバスでバスエラーが発生していないことを確認後、未定義命令処理を行っても良く、データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行っても良い。
【００２３】
命令をフェッチしたときに命令バスでパリティエラーが発生した場合、命令バスエラー信号を命令バスエラー入力手段に入力する。これにより、ＣＰＵはエラーとなった命令を実行すると判断した時点でＥＩＴ処理を行い、エラー処理ルーチンへジャンプすることができる。又、データバスでパリティエラーが発生した場合、データエラー信号をデータバスエラー入力手段に入力すると、以降の命令の処理をキャンセルすることができるので、命令バスでのエラー処理との優先順位をハード的に処理でき、ソフト的な処理を考慮する必要がなくなる。
【００２４】
以下に、本発明のエラー処理方法及び情報処理装置の各実施例を、図９以降と共に説明する。
【実施例１】
【００２５】
図９は、本発明が適用されるマイクロプロセッサの要部を示すブロック図である。図９に示すマイクロプロセッサ１は、ＣＰＵ２及びメモリ部３，４を有する。例えば、メモリ部３はフラッシュメモリ（flash memory）で構成され、メモリ部４はＲＡＭで構成されている。ＣＰＵ２とメモリ部３は命令バス５により接続され、ＣＰＵ２とメモリ部４はデータバス６により接続されている。命令バス５は、命令アクセスサイズ信号線ISIZE、命令アドレス線IA、命令データ線ID、レディ信号線IRDY、命令バスエラー信号線IBERR及び命令バスエラーカウンタ信号線IBER_CNTRを有する。データバス６は、データアクセスサイズ信号線DSIZE、データアドレス線DA、データ線DD、レディ信号線DRDY、データバスエラー信号線DBERR及びデータバスエラーカウンタ信号線DBER_CNTRを有する。命令バスエラー信号線IBERR及びデータバスエラー信号線DBERRは、バスエラー入力手段を構成する。
【００２６】
図１０は、メモリ部３の構成を示すブロック図である。メモリ部４の構成は、メモリ部３と同じで良い。メモリ部３（又は、メモリ部４）は、論理回路３１、例えばページメモリ０〜４からなるページメモリ部３２、及びパリティチェッカ３３を有する。図１０中、ADは命令又はデータのアドレス、ER_CNTRは対応するエラーカウンタからのエラーカウンタ信号、R/WXはリード信号又はライト信号、CS0X〜CS3Xは論理回路３１が出力するチップセレクト信号、IBERR/DBERRはパリティチェッカ３３から出力される命令バスエラー信号又はデータバスエラー信号、IDout/DDoutはページメモリ部３２から出力される命令出力又はデータ出力を示す。論理回路３１は、エラーカウンタ信号ER_CNTR、命令又はデータのアドレスAD、及びリード又はライト信号R/WXに基づいてチップセレクト信号CS0X〜CS3Xを生成する。ページメモリ部３２を構成するページメモリの数は言うまでもなく４個に限定されるものではない。
【００２７】
図１１は、メモリ部３（又は、メモリ部４）のライト／リードとチップセレクト信号CS0X〜CS3Xとの関係を示す図である。図１１中、○印は制御信号のアクティブ（活性化）論理レベルを示し、×印は制御信号のインアクティブ（非活性化）論理レベルを示す。図１１に示すように、ライト時にはページメモリ部３２の全てのページメモリ０〜３に対して命令又はデータがライトされる。他方、リード時にはエラーカウンタ信号ER_CNTRで示される１つのページメモリから命令又はデータがリードされる。
【００２８】
図１２は、本発明の第１実施例の要部を示すブロック図である。ＣＰＵ２は、大きく分けてフェッチ（Ｆ：Fetch）部５１、デコード（Ｄ：Decode）部５２、実行（Ｅ：Execute）部５３、メモリアクセス（Ｍ：Memory access）部５４及び汎用レジスタ部５５から構成される。
【００２９】
Ｆ部５１は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。Ｆ部５１には、Ibusアクセス制御部５１１が設けられている。
【００３０】
Ｄ部５２は、フェッチされた命令コードを解析して、Ｅ部５３で実行すべき演算モード（足し算、引き算等）、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからＥ部５３内の演算器（ＡＬＵ）５３２の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa，Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ５２１中の例外ハンドラ５２２により割込みルーチンにジャンプするため、Ｄ部５２は割込みベクタテーブルのリードや汎用レジスタ部５５のＰＳレジスタ及びＰＣレジスタの退避を行う命令を自動的に供給する。命令シーケンサ５２１内には、デコーダ５２３及びマルチプレクサ５２４が設けられている。又、Ｄ部５２は、命令シーケンサ５２１でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス（又は、セレクタ）５２５及びマルチプレクサ５２６を有する。
【００３１】
Ｅ部５３は、Ｄ部５２より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器５３２にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、Ｅ部５３はレジスタバイパスルート５３１により演算器５３２の出力から直接Ｅ部５３への入力用の中間レジスタTa又はTb，Tddに伝える。Ｅ部５３は、Ｆ部５１内の中間レジスタTia_fの出力及びＤ部５２内の中間レジスタTia_eの出力が供給される中間レジスタEPCを有する。中間レジスタEPCは、エラーが発生したＰＣレジスタの値を退避するために設けられている。
【００３２】
Ｍ部５４は、Ｅ部５３よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部５５（ＰＣ、R0〜R15）等へのライト又はリードを行う。Ｍ部５４は、中間レジスタTia_m及びDbusアクセス制御部５４１を有する。
【００３３】
汎用レジスタ部５５は、ＣＰＵの内部レジスタであり、ＰＣレジスタ、ＰＳレジスタ、BEARレジスタ、BEDRレジスタ、バスエラーカウンタDBER_CNTR、命令バスエラーカウンタIBER_CNTR、演算用レジスタR0〜R15及びマルチプレクサ５５１を有する。本実施例では、ＰＳレジスタは、命令バスエラーIBER及びデータバスエラーDBERを格納し、バスエラーBERRの発生を示す。BEARレジスタは、バスエラーBERRが発生した時のアドレスを格納する。BEDRレジスタは、バスエラーBERRが発生した時のデータを格納する。データバスエラーカウンタDBER_CNTRはデータバスエラーDBERRをカウントし、命令バスエラーカウンタIBER_CNTRは命令バスエラーIBERRをカウントする。命令バスエラーカウンタIBER_CNTR及びデータバスエラーカウンタDBER_CNTRは、バスエラーカウンタ手段を構成する。
【００３４】
図１２中、ＩＤは命令コード、ＩＡは命令コードのアドレス、iberrは内部命令バスエラー出力、IBERRは図１０に示すパリティチェッカ３３からの命令バスエラー信号入力、iaccess，irdy， IRDY， ISIZEは夫々、命令コードの内部アクセス要求、命令コードの内部レディ信号出力、メモリ部３からの命令コードのレディ信号入力、メモリ部３に出力される命令コードのサイズを示す。又、DA，DDout，DDinは夫々データのアドレス、出力データ及び入力データを示し、dberrは内部データバスエラー信号出力、DBERRは図１０に示すパリティチェッカ３３からのデータバスエラー信号入力を示す。更に、daccess，drdy，DRDY，DSIZEは夫々データの内部アクセス要求、データの内部レディ信号出力、メモリ部４からのデータのレディ信号入力及びメモリ部４に出力されるデータのサイズを示す。
【００３５】
各部５１〜５４の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi（i=0〜15）に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、Ｄ部５２に間に合わないため、演算器５３２の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス５３１を設ける。
【００３６】
命令は、ＣＰＵがフェッチした順番に処理を行う。１つの命令は、１クロック入力する毎にＦ部５１、Ｄ部５２、Ｅ部５３、Ｍ部５４へと進んでいき、ＣＰＵはその命令に従って動作する。命令Ｉ１がフェッチされ、次のクロックで命令Ｉ２がＤ部５２に進んだ時に、平行してＦ部５１にて命令Ｉ２のフェッチを行う。これを繰り返し、命令Ｉ１〜Ｉ５がパイプライン処理されて行く。
【００３７】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行わないで（ＥＩＴ処理時は除く)バスエラー処理を行う。
【００３８】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、命令の前後性を維持するため、直前の命令でデータバスエラーDBERRが発生していないことを確認できるまで、Ｄ部５２で待つ（waitする）。データバスエラーDBERRが発生していなかったら、本実施例では次のサイクルで、未定義例外へジャンプする命令を例外ハンドラ５２２が供給する。そして、命令バスエラーカウンタIBER_CNTRの値をカウントアップする。
【００３９】
データバスエラーDBERRが発生した場合について説明すると、Ｍ部５４にてデータバスエラーDBERRが発生した場合、Ｍ部５４のＭステージで汎用レジスタ部５５内の演算用レジスタR0〜R15に値がセットされるのを抑止する。このような演算用レジスタR0〜R15への値のセットは、データバスエラーDBERRが発生した命令後、割込みベクタをリードできるまでにフェッチした命令のＭ部５４での処理が終了するまで禁止される。データバスエラーDBERR発生後、次のサイクルで例外ハンドラ５２２がＥＩＴ処理の命令を供給する。
【００４０】
図１３は、第１実施例の命令シーケンサの動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをＤ部５２に入力し（ステップＳ１１）、命令コードをデコードする（ステップＳ１２）。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部５５の内容を中間レジスタTdec，Ta，Tb，Tddにセットし、Ｅ部５３に渡す（ステップＳ１３）。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【００４１】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。命令バスエラーＩＢＥＲＲ発生時には、処理はステップＳ１４へ進む。データバスエラーＤＢＥＲＲ発生時には、処理はステップＳ２３又はステップＳ２６へ進む。ベクタアクセス時にデータバスエラーＤＢＥＲＲが発生した場合、或いは、ＰＳレジスタの内容退避時にデータバスエラーＤＢＥＲＲが発生した場合には、処理はステップＳ２３へ進む。他方、ＰＣレジスタの内容退避時にデータバスエラーＤＢＥＲＲが発生した場合には、処理はステップＳ２６へ進む。その他の割込みが発生した場合には、処理はステップＳ２９へ進む。
【００４２】
ステップＳ１４はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がＮＯであると、ステップＳ１５はNOP（No OPeration）を挿入する。ステップＳ１６はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がＮＯであると、ステップＳ１７はNOP（No OPeration）を挿入する。ステップＳ１４又はステップＳ１６の判定結果がＹＥＳであると、処理はステップＳ１４へ戻る。ステップＳ１８は、例外割込みのルーチン、即ち、命令バスエラーIBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ１９は、次のサイクルで、ＰＳレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ２０は、ＰＣレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ１８〜Ｓ２０は、ＥＩＴ処理を構成する。その後、ステップＳ２１はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がＮＯであると、ステップＳ２２は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がＮＯであると、処理はステップＳ１１へ戻り次の命令をデコードする。ステップＳ２１又はステップＳ２２の判定結果がＹＥＳであると、処理はステップＳ１４へ戻る。
【００４３】
ステップＳ２３は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ２４は、次のサイクルで、ＰＳレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ２５は、ＰＣレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡し、処理はステップＳ２１へ進む。ステップＳ２３〜Ｓ２５は、ＥＩＴ処理を構成する。
【００４４】
ステップＳ２６は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ２７は、次のサイクルで、NOP（No OPeration）を挿入する。ステップＳ２８は、ＰＣレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡し、処理はステップＳ２１へ進む。ステップＳ２６〜Ｓ２８は、ＥＩＴ処理を構成する。
【００４５】
ステップＳ２９は、その他の割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ３０は、次のサイクルで、ＰＳレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡す。ステップＳ３１は、ＰＣレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部５５の内容をＥ部５３に渡し、処理はステップＳ２１へ進む。ステップＳ２９〜Ｓ３１は、ＥＩＴ処理を構成する。
【００４６】
従って、命令シーケンサ５２１に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、直前の命令にてデータバスDbusのエラーが発生しないことを確認できるまで、NOP（No OPeration）を挿入する。この間最長２サイクルかかる。その後、命令バスエラーIBERRに対応するＥＩＴ処理の命令を投入する。又、デコード時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのＥＩＴ処理の命令を投入する。ＥＩＴ処理中にデータバスエラーDBERRが発生した場合、ベクタアクセスでデータバスエラーDBERR又はＰＳレジスタの内容退避時にデータバスエラーDBERRが発生した場合も同様である。レジスタＰＣの内容退避時にDBERRが発生した場合は、ベクタアクセスとレジスタＰＣの内容退避のリトライを行うシーケンスルートを通る。
【００４７】
図１４は、命令バスIbusでエラーが発生した場合の動作を説明するタイミングチャートである。図１４及び後述する図１５、図１６、図１９及び図２０において、Ｆ，Ｄ，Ｅ，Ｍは夫々Ｆ部５１、Ｄ部５２、Ｅ部５３及びＭ部５４の処理（即ち、Ｆ，Ｄ，Ｅ，Ｍステージの処理）を示し、ＥＤはＤステージにおけるＥＩＴ処理、ＥＥはＥステージにおけるＥＩＴ処理、ＥＭはＭステージにおけるＥＩＴ処理を示す。縦長の四辺形はレジスタの処理、４つの四辺形で構成された正方形はデコーダの処理、＋印が付された○印はＡＬＵの処理、nopはNo OPeration（NOP）、LDはロード（LoaD）命令、STはストア（STore）命令を示す。又、図１４〜図１６中、図１２と同一部分には同一符号を付す。
【００４８】
図１４に示すように、各サイクルcycle1〜cycle9では、以下の処理が行われる。
【００４９】
サイクルcycle1は、命令Ｉ１のフェッチサイクルである。この命令Ｉ１は、命令バスエラーIBERRが発生する命令の直前の命令である。
【００５０】
サイクルcycle2は、命令Ｉ１のデコードサイクルであり、又、命令Ｉ２のフェッチサイクルである。このサイクルcycle2で命令バスエラーIBERRがＣＰＵ２に入力される。
【００５１】
サイクルcycle3では、外部信号である命令バスエラーIBERRをラッチした内部信号である命令バスエラーiberrが命令シーケンサ５２１に入力されることにより、命令シーケンサ５２１は中間レジスタTfにセットされた命令ではなく、直前の命令Ｉ１のデータバスエラーDBERRがないことが確認されるまでNOP命令相当の演算モード信号をＥ部５３に渡す。
【００５２】
サイクルcycle4では、Ｄ部５２は引続きNOP命令相当の演算モード信号をＥ部５３に渡す。この時、Ｍ部５４では命令Ｉ１のデータバスDbusのアクセスが発生し、データバスエラーDBERRは発生しない。これにより、サイクルcycle5の先頭にて命令バスエラーカウンタIBER_CNTRがカウントアップされ、メモリ部３（又は、４）が切り替わる。尚、サイクルcycle4にてデータバスエラーDBERRが発生した場合は、図１５と共に後述するデータバスエラー発生時の動作が行われる。
【００５３】
サイクルcycle5では、命令Ｉ１のデータバスDbusのアクセスサイクルでエラーが発生しなかったことを受け、Ｄ部５２は命令バスIbusのエラー処理ルーチンへジャンプするため、ベクタアドレスを計算するための演算モードと汎用レジスタ部５５の内容(TBR：ベクタテーブルの先頭アドレス、VectNo.：割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す)を中間レジスタTa，Tbにセットし、Ｅ部５３に渡す。
【００５４】
サイクルcycle6では、Ｅ部５３にて命令バスIbusのエラー処理ルーチンのベクタアドレスがあるアドレスの計算を行う。これと同時に、Ｄ部５２は命令シーケンサ５２１がＰＳレジスタの内容を退避するための演算モードと汎用レジスタ部５５の内容を中間レジスタTa，Tbにセットし、Ｅ部５３に渡す。
【００５５】
サイクルcycle7では、データバスDbusにてベクタアドレスがフェッチされ、サイクルcycle7の後にＰＣレジスタにロードされる。Ｅ部５３はＰＳレジスタをライトすべきアドレスの計算が実行され、中間レジスタTeにセットする。Ｄ部５２は、エラーのあったＰＣレジスタの値（EPCレジスタの内容）を退避するためのアドレスを計算するための演算モードと汎用レジスタ部５５の内容をＥ部５３に渡す。
【００５６】
サイクルcycle8では、命令バスIbusにベクタテーブルからロードされたＰＣレジスタの値が命令バスIbusのアドレスIAとして出力され、命令バスIbusのエラー処理ルーチンのアドレスから命令をフェッチする。データバスDbusでは、ＰＳレジスタの値をメモリ部３（又は、４）へライトし、演算用レジスタR15の値を更新する。Ｅ部５３では、エラーのあったＰＣレジスタの値（EPCレジスタの内容）を退避するためのアドレスの計算を行う。Ｄ部５２では、次に受け付けるべき割込み等があるか否かをチェックし、なければNOPとする。他方。次に受け付けるべき割込み等がある場合は、その割込みのベクタアドレスをフェッチするための演算モードと汎用レジスタ部５５の内容を準備する。図１４では、受け付けるべき割込みがない状態を示している。
【００５７】
サイクルcycle9では、データバスDbusからエラーのあったＰＣレジスタの値（EPCレジスタの内容）をメモリ部３（又は、４）へ退避し、演算用レジスタR15の内容を更新する。Ｅ部５３では、NOP操作を行う。Ｄ部５２では、命令バスIbusのエラー処理ルーチンの命令のデコードが行われる。サイクルCycle9以降は、通常の命令の処理が行われる。
【００５８】
このように、命令バスエラーカウンタIBER_CNTRのカウントアップは、命令バスエラーIBERRが発生し、直前の命令にてデータバスエラーDBERRが発生しなかった場合に行う。全てのビットが「１」（all "1"）の時に命令バスエラーIBERRが発生した時は、全てのビットが「０」（all "0"）とならず、ＣＰＵ２はHALT信号を出力して、HALT状態となる。命令バスエラーカウンタIBER_CNTRは、ＣＰＵ２がリセットされたときにのみリセットされる。
【００５９】
図１５は、データバスDbusでエラーが発生した場合の動作を説明するタイミングチャートである。図１５に示すように、各サイクルcycle1〜cycle9では以下の処理が行われる。
【００６０】
サイクルcycle1は、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する命令Ｉ１のフェッチサイクルである。この命令Ｉ１は、データバスDbusによりメモリ部３（又は、４）からデータをリードする命令である。
【００６１】
サイクルcycle2では、命令Ｉ２（命令Ｉ１）のフェッチを行う。Ｄ部５２は、命令Ｉ１のデコードを行う。
【００６２】
サイクルcycle3では、Ｅ部５３は命令Ｉ１のアドレスの計算を行う。Ｄ部５２は、命令Ｉ２のデコードを行う。Ｆ部５１は、命令Ｉ３のフェッチを行う。
【００６３】
サイクルcycle4では、データバスDbusにて命令Ｉ１のリードアクセスが行われるが、エラーが発生し、データバスエラーDBERRがＣＰＵ２に入力される。これにより、リードされたデータを汎用レジスタRiにセットしない。又、サイクルcycle6までの期間は、データバスDbusのアクセスによる内部汎用レジスタ部５５への値のセットを禁止する。Ｅ部５３では命令Ｉ２の実行が行われ、Ｄ部５２では命令Ｉ３のデコードが行われる。
【００６４】
サイクルcycle5では、データバスDbusにて命令Ｉ２のアクセスが行われるが、その時に得たデータは、汎用レジスタ部５５にロードされない。つまり、命令Ｉ２はキャンセルされたことになる。データバスエラーカウンタDBER_CNTRは、データバスエラーDBERRによりカウントアップし、メモリ部３（又は、４）が切り替わる。Ｅ部５３では命令Ｉ３の実行が行われ、Ｄ部５２ではデータバスエラーDBERRをラッチした内部信号であるデータバスエラーdberrにより、ベクタアドレスをフェッチするための演算モードと必要な汎用レジスタ部５５の値がＥ部５３に渡される。この時、サイクルcycle4でフェッチされた命令は破棄される。
【００６５】
サイクルcycle6では、データバスDbusにて命令Ｉ３のサイクルが行われるが、汎用レジスタ部５５にはその結果は反映されない。Ｅ部５３ではベクタのあるアドレスの計算が行われる。Ｄ部５２では、ＰＳレジスタの内容退避のための演算モードと必要な汎用レジスタ部５５の内容が中間レジスタにセットされる。
【００６６】
サイクルcycle7では、データバスDbusにてベクタがあるアドレスよりベクタをリードし、ＰＣレジスタにセットする。Ｅ部５３では、ＰＳレジスタの内容退避のためのアドレスの計算が行われる。Ｄ部５２では、エラーのあったＰＣレジスタの値を退避するためのアドレスの計算のための演算モード、汎用レジスタ部５５の内容を中間レジスタにセットする。
【００６７】
サイクルcycle8では、命令バスIbusにてＰＣレジスタにセットされたアドレスより命令コードをフェッチし、これがエラー処理ルーチンの先頭アドレスとなる。データバスDbusでは、ＰＳレジスタの内容がメモリ部３（又は、４）へライトされる。Ｅ部５３では、エラーのあったＰＣレジスタの値を退避するためのアドレスの計算が行われる。Ｄ部５２では、命令シーケンサ５２１は他の例外割込みがあればそのＥＩＴ処理を投入するが、他の例外割込みがない場合にはNOPを投入する。図１５は、NOPが投入された場合を示している。
【００６８】
サイクルcycle9では、データバスDbusでは、エラーのあったＰＣレジスタの値がメモリ部３（又は、４）へライトされ、Ｅ部５３ではNOPとなる。Ｄ部５３ではＳ１０８のデコードが行われ、サイクルcycle9以降は、通常の命令の処理が行われる。
【００６９】
このように、データバスエラーカウンタDBER_CNTRは、データバスDbusにてデータバスエラーDBERRが発生した時にカウントアップされ、全てのビットが「１」（all "1"）の時にデータバスエラーDBERRが発生した時は全てのビットが「０」（all "0"）とならず、ＣＰＵ２はHALT信号を出力し、HALT状態となる。データバスエラーカウンタDBER_CNTRは、ＣＰＵ２がリセットされたときにのみリセットされる。
【００７０】
図１６は、ＥＩＴ処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップＳ１０１はLD @Rj, Riを実行し、ステップＳ１０２は命令Ｉ１をキャンセルし、ステップＳ１０３は命令Ｉ２をキャンセルする。ステップＳ１０４はLD @(TBR, VectNo), PCを実行し、ステップＳ１０５はST PS, @-R15を実行し、ステップＳ１０６はST EPC, @-R15を実行する。ステップＳ１０７はNOP1を実行して次のＥＩＴ処理があればステップＳ１０４〜Ｓ１０６を繰り返し、ステップＳ１０８は例外プログラムの命令を実行する。尚、TBRはベクタテーブルの先頭アドレスを示し、VectNo.は割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す。図１６に示すように、各サイクルcycle1〜cycle13では以下の処理が行われる。
【００７１】
サイクルcycle1〜サイクルcycle8までは、通常の命令のデータバスDbusのアクセスサイクルでデータバスエラーDBERRが発生したことによるベクタフェッチ、ＰＳレジスタの内容退避、ＰＣレジスタの内容退避を行うシーケンスである。
【００７２】
サイクルcycle9では、ＰＣレジスタの内容を退避するシーケンスにて、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する。このため、演算用レジスタR15に対するレジスタ値の更新は禁止される。
【００７３】
サイクルcycle10では、データバスエラーカウンタDBER_CNTRの値がカウントアップされ、メモリ部３（又は、４）が切り替わる。データバスDbusでは、他の割込みがないので何もしない（NOP操作）。Ｅ部５３では、既に読み込まれているジャンプ（JMP）先命令の演算が行われる。Ｄ部５２ではJMP先命令Ｉ２のデコードを行わず、ベクタフェッチを再度リトライするための演算モードとレジスタの値を中間レジスタにセットする。
【００７４】
サイクルcycle11では、データバスDbusにてJMP先命令Ｉ１によるサイクルが行われるが、その結果は汎用レジスタ部５５にはセットしない。Ｅ部５３では、リトライされたベクタフェッチのアドレスの計算が行われる。Ｄ部５２では、他に割込みがないかをチェックし、無ければNOPを挿入する。
【００７５】
サイクルcycle12では、データバスDbusにてベクタフェッチのアクセスが行われ、ＰＣレジスタにセットされる。Ｅ部５３では、他の割込みがなかったのでNOP操作となる。Ｄ部５２では、エラーのあったＰＣレジスタの値を退避するための演算モードと汎用レジスタ部５５の内容が中間レジスタにセットされる。
【００７６】
サイクルcycle13以降では、ベクタフェッチにてリードしたＰＣレジスタの値がロードされ、エラーのあったＰＣレジスタの値がデータバスDbusにてメモリ部３（又は、４）にライトされ、順次命令が実行される。
【実施例２】
【００７７】
図１７は、本発明の第２実施例の要部を示すブロック図である。図１７中、図１２と同一部分には同一符号を付し、その説明は省略する。ＣＰＵ２ＡのＦ部５１Ａには、未定義コード差し替え部５１２が設けられている。この未定義コード差し替え部５１２は、セレクタで構成可能である。
【００７８】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う。
【００７９】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、全パイプラインのステージを再実行し、Ｆ部５１のＦステージをリトライし、命令バスエラーカウンタIBER_CNTRの値を更新する。指定回数リトライしても命令バスエラーIBERRが発生する場合、例外ハンドラ５２２は未定義例外のＥＩＴ処理を行う。尚、命令バスエラーIBERRが発生した命令の前の命令でデータバスエラーDBERRが発生した場合は、未定義例外の処理はキャンセルする。
【００８０】
又、データバスエラーDBERRが発生した場合について説明すると、Ｍ部５４にてデータバスエラーDBERRが発生した場合、Ｍ部５４のＭステージで汎用レジスタ部５５内の演算用レジスタR0〜R15に値がセットされるのを抑止する。又、全パイプラインのステージを再実行し、Ｍ部５４のＭステージをリトライし、データバスエラーカウンタDBER_CNTRの値を更新する。指定回数リトライしてもデータバスエラーDBERRが発生する場合、例外ハンドラ５２２は未定義例外のＥＩＴ処理を行う。本実施例では、データバスエラーDBERRの発生時に、そのサイクルで例外ハンドラ５２２がＥＩＴ処理の命令を供給している。
【００８１】
ＥＩＴ処理中にデータバスエラーDBERRが発生した場合には、ＥＩＴ処理をリトライする。リトライの発生パターンは上記第１実施例の場合と同じである。
【００８２】
図１８は、第２実施例の命令シーケンサの動作を説明するフローチャートである。図１８中、図１３と同一ステップには同一符号を付し、その説明は省略する。図１８において、デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。データバスエラーＤＢＥＲＲ発生時には、処理はステップＳ２３又はステップＳ２６へ進む。ベクタアクセス時にデータバスエラーＤＢＥＲＲが発生した場合、或いは、ＰＳレジスタの内容退避時にデータバスエラーＤＢＥＲＲが発生した場合には、処理はステップＳ２３へ進む。他方、ＰＣレジスタの内容退避時にデータバスエラーＤＢＥＲＲが発生した場合には、処理はステップＳ２６へ進む。その他の割込みが発生した場合には、処理はステップＳ２９へ進む。
【００８３】
ステップＳ２５又はステップＳ２８又はステップＳ３１の後、ステップＳ４１は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がＮＯであると、処理はステップＳ１１へ戻り次の命令をデコードする。ステップＳ４１の判定結果がＹＥＳであると、処理はステップＳ１２の判定結果がＮＯの場合の処理へ戻る。
【００８４】
従って、命令シーケンサ５２１に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、命令シーケンサ５２１で対応をとるのではなく、未定義コード差し替え部５１２によりＦ部５１とＤ部５２との間にて未定義命令に置き換えられるので、特に命令シーケンサ５２１では扱わない。データバスエラーDBERRが発生した場合の処理は、上記第１実施例の場合の処理と同様である。
【００８５】
図１９は、命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。図１９に示すように、各サイクルcycle1〜cycle7では、以下の処理が行われる。
【００８６】
サイクルcycle1では、命令Ｉ１のフェッチサイクルが始まる。
【００８７】
サイクルcycle2で命令Ｉ２のフェッチサイクルが始まったものの、命令バスエラーIBERRが発生し、それを受けてサイクルcycle3で命令バスエラーカウンタIBER_CNTRの値が更新されると、メモリ部３（又は、４）の同じアドレスから再度命令Ｉ２をフェッチする。この時、Ｄ部５２では命令Ｉ１のデコード情報が中間レジスタTdec，Ta，Tb，Tddに保持されたままとなる。
【００８８】
サイクルcycle4では、サイクルcycle3にて命令バスエラーカウンタIBER_CNTRの全てのビットが「１」（All "1"）の時に命令バスエラーIBERRが発生するため、Ｄ部５２（デコーダ部５２３に入る命令コードが未定義命令コードに置き換えられる。このため、Ｅ部５３に渡される演算情報としては、未定義命令割込みのベクタフェッチを行う演算情報が中間レジスタにセットされる。
【００８９】
サイクルcycle5では、データバスDbusにて命令Ｉ１のサイクルが行われ、データバスエラーDBERRが発生せず、次の命令がキャンセルされない。Ｅ部５３では、ベクタをフェッチのためのアドレスの計算が行わる。Ｄ部５２では、ＰＳレジスタの内容退避のための演算情報が中間レジスタにセットされる。
【００９０】
サイクルcycle6では、データバスDbusにてベクタフェッチが行われ、メモリ部３（又は、４）よりリードしたデータがレジスタＰＣにセットされる。Ｅ部５３では、レジスタＰＳの内容を退避するためのアドレスの計算が行われる。Ｄ部５２では、エラーのあったＰＣレジスタの値（EPCレジスタの内容）を退避するためのアドレスの計算を行う演算情報を中間レジスタにセットする。
【００９１】
サイクルcycle7以降では、命令バスIbusではＰＣレジスタにセットされた値がアドレス値として出力され、処理ルーチンの先頭命令をフェッチする。データバスDbusではＰＳレジスタの内容がメモリ部３（又は、４）に退避され、演算用レジスタR15の値が更新される。Ｅ部５３では、EPCレジスタの内容を退避するためのアドレスが計算される。Ｄ部５２では、他に割込みがある場合はその割込みのベクタフェッチの演算情報が中間レジスタにセットされる。図１９の場合には割込みがないため、NOPが投入される。以降のサイクルは、通常のＣＰＵの命令のパイプライン処理と同様である。
【００９２】
図２０は、データバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップＳ２０１はLD @Rj, Riを実行し、ステップＳ２０２は命令Ｉ１をキャンセルし、ステップＳ２０３は命令Ｉ２をキャンセルしてLD @(TBR, VectNo), PCを実行する。ステップＳ２０４はST PS, @-R15を実行し、ステップＳ２０５はST EPC, @-R15を実行する。ステップＳ２０６はＮＯＰ１を実行して次のＥＩＴ処理があればステップＳ２０３〜Ｓ２０５を繰り返し、ステップＳ２０７は例外プログラムの命令を実行する。図２０に示すように、各サイクルcycle1〜cycle8では、以下の処理が行われる。
【００９３】
サイクルcycle1~cycle4では、データバスDbusにてエラーの発生するロード（LD：LoaD)命令、その次の命令Ｉ１、命令Ｉ２の処理がパイプライン処理にて順次行われる。サイクルcycle4の時にLD命令にてデータバスDbusでデータバスエラーDBERRが発生するものとする。
【００９４】
サイクルcycle5では、サイクルcycle4でデータバスエラーDBERRが発生したことにより、データバスエラーカウンタDBER_CNTRがカウントアップし、サイクルcycle5でデータバスDbusのサイクルのリトライを行う。この時、命令バスIbus、Ｄ部５２及びＥ部５３での結果を中間レジスタにロードせず、値はそのまま保持する。データバスエラーカウンタDBER_CNTRの全てのビットが「１」（All "1"）の時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのＥＩＴ処理を行う。データバスエラーDBERRが発生した命令の次の命令(命令Ｉ１)は、Ｍ部５４のＭステージでの結果を汎用レジスタ部５５内の演算用レジスタR0〜R15に反映させないことにより、命令はキャンセルされる。又、その次の命令である命令Ｉ２は、命令シーケンサ５２１によりＤ部５２にてベクタをフェッチする命令に置き換えられ、ベクタアドレスがあるアドレスの計算を行う情報をＥ部５３に渡す。
【００９５】
サイクルcycle6では、Ｅ部５３にて、ベクタアドレスがあるアドレスの計算を行う。又、ＰＳレジスタの内容退避の演算情報が中間レジスタにセットされる。
【００９６】
サイクルcycle7では、データバスDbusではベクタアドレスのリードを行って、データバスエラーDBERRの処理ルーチンの先頭アドレスをリードし、それをＰＣレジスタにセットする。Ｅ部５３では、ＰＳレジスタの内容退避のためのアドレスの計算が行われる。Ｄ部５２では、エラーのあったＰＣレジスタの値（EPCレジスタの内容）を退避するための演算情報をＥ部５３に渡す。
【００９７】
サイクルcycle8以降では、命令バスIbusでは、ＰＣレジスタの新しい値のアドレスより命令をリードする。データバスDbusではＰＳレジスタの内容がメモリ部３（又は、４）に退避される。Ｅ部５３では、EPCレジスタの内容を退避するためのアドレスの計算が行われる。それ以降は、通常のＣＰＵのアクセスと同様の動作となる。
【００９８】
このように、上記各実施例によれば、ＣＰＵにバスエラー入力手段であるバスエラー信号線が存在しているので、メモリ部にてパリティエラー等のエラーが発生した場合でも、エラー処理を行い、ＣＰＵの実行が続行できる。又、ＣＰＵが命令をフェッチしてパリティエラーを検出した場合、バスエラーが発生した命令を実行してしまうことはない。ＣＰＵが命令をフェッチしてパリティエラーを検出し、その命令が実行されなくても、無意味な例外は発生しない。更に、命令バスでのバスエラー発生時、直前の命令でのデータバスエラーが後で発生しても、ソフトにより処理の優先順位を考慮する必要がない。バスエラー発生後バスエラーカウンタ手段により直ちにメモリ部の交替を行うことが可能となる。
【００９９】
尚、本発明は、以下に付記する発明をも包含するものである。
（付記１）  ＣＰＵのバスで発生したエラーを処理するエラー処理方法であって、
該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該ＣＰＵに入力するステップと、
該バスエラーを該ＣＰＵ内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該ＣＰＵに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
（付記２）  該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記１記載のエラー処理方法。
（付記３）  該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記１記載のエラー処理方法。
（付記４）  該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする付記１又は２記載のエラー処理方法。
（付記５）  該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする付記１又は２記載のエラー処理方法。
（付記６）  命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該ＣＰＵはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ（ＥＩＴ：Exception, Interrupt, Trap）処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記１記載のエラー処理方法。
（付記７）  該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該ＣＰＵに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする付記１記載のエラー処理方法。
（付記８）  該指定するステップは、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該ＣＰＵに接続されたメモリ部のページを指定することを特徴とする付記１記載のエラー処理方法。
（付記９）  該ＣＰＵの状態を示すプロセッサステータスレジスタに、命令バスエラー及びデータバスエラーを格納してバスエラーの発生を示すステップを含むことを特徴とする付記１記載のエラー処理方法。
（付記１０）  命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする付記１記載のエラー処理方法。
（付記１１）  ＣＰＵを備えた情報処理装置であって、
該ＣＰＵに接続されたメモリ部と、
該ＣＰＵの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該ＣＰＵに入力するバスエラー入力手段と、
該ＣＰＵ内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
（付記１２）  該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記１１記載の情報処理装置。
（付記１３）  該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記１１記載の情報処理装置。
（付記１４）  該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行う手段を備えたことを特徴とする付記１１又は１２記載の情報処理装置。
（付記１５）  該パスエラーカウンタ手段を含む汎用レジスタ部を備え、
該データバスでバスエラーが発生した場合は、その命令以降の命令による該汎用レジスタ部へのセットは禁止し、未定義命令処理を行う手段を備えたことを特徴とする付記１１又は１２記載の情報処理装置。
（付記１６）  命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力する手段を備え、
該ＣＰＵはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ（ＥＩＴ：Exception, Interrupt, Trap）処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記１１記載の情報処理装置。
（付記１７）  該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該ＣＰＵに入力すると、以降の命令の処理をキャンセルする手段を含むことを特徴とする付記１１記載の情報処理装置。
（付記１８）  該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする付記１１記載の情報処理装置。
（付記１９）  該ＣＰＵの状態を示すプロセッサステータスレジスタを備え、
命令バスエラー及びデータバスエラーを該プロセッサステータスレジスタに格納してバスエラーの発生を示すことを特徴とする付記１１記載の情報処理装置。
（付記２０）  命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う手段を備えたことを特徴とする付記１１記載の情報処理装置。
【０１００】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【０１０１】
【図１】従来のＣＰＵの要部の構成を示すブロック図である。
【図２】従来のＣＰＵのＤ部内の命令シーケンサの動作を説明するフローチャートである。
【図３】従来のＣＰＵの動作を説明するタイミングチャートである。
【図４】状態（１）を説明する図である。
【図５】状態（２）を説明する図である。
【図６】状態（３）を説明する図である。
【図７】状態（４）を説明する図である。
【図８】状態（５）を説明する図である。
【図９】本発明が適用されるマイクロプロセッサの要部を示すブロック図である。
【図１０】メモリ部の構成を示すブロック図である。
【図１１】メモリ部のライト／リードと制御信号との関係を示す図である。
【図１２】本発明の第１実施例の要部を示すブロック図である。
【図１３】第１実施例の命令シーケンサの動作を説明するフローチャートである。
【図１４】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図１５】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図１６】ＥＩＴ処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図１７】本発明の第２実施例の要部を示すブロック図である。
【図１８】第２実施例の命令シーケンサの動作を説明するフローチャートである。
【図１９】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図２０】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【符号の説明】
【０１０２】
１      マイクロプロセッサ
２      ＣＰＵ
３，４      メモリ部
５      命令バス
６      データバス
３１      論理回路
３２      ページメモリ部
３３      パリティチェッカ
５１      Ｆ部
５２      Ｄ部
５３      Ｅ部
５４      Ｍ部
５５      汎用レジスタ部
【図１】
2008090542.tif 000003
【図２】
2008090542.tif 000004
【図３】
2008090542.tif 000005
【図４】
2008090542.tif 000006
【図５】
2008090542.tif 000007
【図６】
2008090542.tif 000008
【図７】
2008090542.tif 000009
【図８】
2008090542.tif 000010
【図９】
2008090542.tif 000011
【図１０】
2008090542.tif 000012
【図１１】
2008090542.tif 000013
【図１２】
2008090542.tif 000014
【図１３】
2008090542.tif 000015
【図１４】
2008090542.tif 000016
【図１５】
2008090542.tif 000017
【図１６】
2008090542.tif 000018
【図１７】
2008090542.tif 000019
【図１８】
2008090542.tif 000020
【図１９】
2008090542.tif 000021
【図２０】
2008090542.tif 000022