エラー処理方法及び情報処理装置
【課題】本発明は、エラー処理方法及び情報処理装置に関し、ハーバードアーキテキチャを有するCPUの命令バス又はデータバスで発生したバスエラーを適切に処理可能とすることを目的とする。
【解決手段】CPUのバスで発生したエラーを処理するエラー処理方法において、CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段によりCPUに入力し、バスエラーをCPU内のバスエラーカウンタでカウントし、バスエラーカウンタの値に基づいてCPUに接続されたメモリ部の領域を指定するように構成する。
【解決手段】CPUのバスで発生したエラーを処理するエラー処理方法において、CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段によりCPUに入力し、バスエラーをCPU内のバスエラーカウンタでカウントし、バスエラーカウンタの値に基づいてCPUに接続されたメモリ部の領域を指定するように構成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、エラー処理方法及び情報処理装置に係り、特に命令バス又はデータバスで発生したバスエラーを処理するエラー処理方法、及びハーバードアーキテキチャを有するCPU等の情報処理装置に関する。
【背景技術】
【0002】
車載用途等で、メモリ部のパリティチェックやECCチェック機能をマイクロプロセッサのCPUに搭載する要求がある。従来のCPUでは、バスアクセス時にエラーが発生した場合、正しい命令コードをCPUに供給することができず、CPUを停止(HALT)させるしかない。このようなCPUの停止を回避する1つの方法として、バスアクセス時にエラーが発生した場合には外部割込みをCPUに入力する方法があるが、割込みルーチンにジャンプする前にバスエラーが発生した命令コードを実行してしまう可能性がある。又、CPUは、ジャンプ命令の場合のように、バスアクセスした命令コードを必ず実行するわけではないので、無意味な割込みを発生させる可能性もある。
【0003】
更に、CPUが命令バスとデータバスとが分かれたハーバードアーキテキチャを有する場合、命令バスでバスエラーが発生した後、その命令の前に実行した命令にてデータバスエラーが発生する可能性があるため、命令バスエラーよりもデータバスエラーを優先処理することを考慮する必要がある。ハーバードアーキテキチャを有するCPUを備えたマイクロプロセッサとしては、例えば富士通株式会社製のFRシリーズのRISC(Reduced Instruction Set Computer)型マイクロコントローラがある。このようなCPUでは、未定義命令が発生した場合には、命令デコード部にある命令シーケンサ中の例外ハンドラが起動され、未定義割込みルーチンの先頭アドレスのフェッチ、CPUの状態(ステータス)を示すプロセッサステータス(PS:Processor Status)レジスタとプログラムカウンタ(PC:Program Counter)レジスタの内容退避のための命令を例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理により発生させて、割込みルーチンへジャンプする。
【0004】
図1は、従来のCPUの要部の構成を示すブロック図である。従来のCPUは、大きく分けてフェッチ(F:Fetch)部101、デコード(D:Decode)部102、実行(E:Execute)部103、メモリアクセス(M:Memory access)部104及び汎用レジスタ部105から構成される。
【0005】
F部101は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。F部101には、Ibusアクセス制御部111が設けられている。
【0006】
D部102は、フェッチされた命令コードを解析して、E部103で実行すべき演算モード(足し算、引き算等)、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからE部103内の演算器(ALU)132の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa,Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ121中の例外ハンドラ122により割込みルーチンにジャンプするため、D部102は割込みベクタテーブルのリードや汎用レジスタ部105のPSレジスタ及びPCレジスタの退避を行う命令を自動的に供給する。命令シーケンサ121内には、デコーダ123及びマルチプレクサ124が設けられている。又、D部102は、命令シーケンサ121でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス(又は、セレクタ)125及びマルチプレクサ126を有する。
【0007】
図2は、従来のCPUのD部102内の命令シーケンサ121の動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをD部102に入力し(ステップS1)、命令コードをデコードする(ステップS2)。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部105の内容を中間レジスタTdec,Ta,Tb,Tddにセットし、E部103に渡す(ステップS3)。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【0008】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、その例外割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS4)。例外処理へ移る方法として、ベクタテーブルを用いる手法がよく使われており、このベクタテーブル中の各アドレスのデータは、夫々の例外処理の開始番地を指し示しているので、ベクタアドレスと呼ばれる。次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS5)。その後、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS6)。ステップS4〜S6は、EIT処理を構成する。その後、他の割込み又はエラーがあるか否かをチェックし(ステップS7)、割込み又はエラーがない場合は(ステップS7でNO)次の命令をデコードし、割込み又はエラーがある場合は(ステップS7でYES)EIT処理によるベクタアドレスの取得を繰り返す。
【0009】
E部103は、D部102より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器132にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、E部103はレジスタバイパスルート131により演算器132の出力から直接E部103への入力用の中間レジスタTa又はTb,Tddに伝える。E部103は、D部102内の中間レジスタTddの出力がセットされる中間レジスタTedを有する。
【0010】
M部104は、E部103よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部105(PC、R0〜R15)等へのライト又はリードを行う。M部104は、中間レジスタTia_m及びDbusアクセス制御部141を有する。
【0011】
汎用レジスタ部105は、CPUの内部レジスタであり、PCレジスタ、PSレジスタ、演算用レジスタR0〜R15及びマルチプレクサ151を有する。
【0012】
図1中、IDは命令コード、IAは命令コードのアドレス、iaccess,irdy, IRDY, ISIZEは夫々、命令コードのアクセス要求、命令コードのレディ出力、命令コードのレディ入力、命令コードのサイズを示す。又、DA,DDout,DDinは夫々データのアドレス、出力データ及び入力データを示す。更に、daccess,drdy,DRDY,DSIZEは夫々データのアクセス要求、データのレディ出力、データのレディ入力及びデータのサイズを示す。
【0013】
各部101〜104の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi(i=0〜15)に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、D部102に間に合わないため、演算器132の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス131を設ける。
【0014】
命令は、CPUがフェッチした順番に処理を行う。1つの命令は、1クロック入力する毎にF部101、D部102、E部103、M部104へと進んでいき、CPUはその命令に従って動作する。命令I1がフェッチされ、次のクロックで命令I2がD部102に進んだ時に、平行してF部101にて命令I2のフェッチを行う。これを繰り返し、命令I1〜I5がパイプライン処理されて行く。この時の様子を図3〜図8に示す。図3は、従来のCPUの動作を説明するタイミングチャートである。又、図4は状態(1)を説明する図、図5は状態(2)を説明する図、図6は状態(3)を説明する図、図7は状態(4)を説明する図、図8は状態(5)を説明する図である。図4〜図8中、nopはノーオペレーション(no operation)を示す。
【0015】
従来のCPUにはバスエラー入力手段が設けられておらず、メモリ部にてパリティエラー等のエラーが発生した場合、CPUが実行できる命令を外部にて用意することができず、CPUの実行が止まってしまう。又、CPUが命令をフェッチしてパリティエラーを検出し、それを外部割込みにした場合、バスエラーが発生した命令を実行してしまう可能性がある。更に、CPUが命令をフェッチしてパリティエラーを検出しても、ジャンプ命令実行等によりフェッチした命令が実行されなかった場合、無意味な割込みを上げてしまうことになる。命令バスでのバスエラー発生時には、直前の命令でのデータバスエラーが後で発生するので、処理の優先順位を考慮する必要がある。
【0016】
尚、アドレス又はデータのパリティエラーを検出する構成の1チップマイクロプロセッサは、例えば特許文献1にて提案されている。
【特許文献1】特開平6−242977号公報
【発明の開示】
【発明が解決しようとする課題】
【0017】
従来のハーバードアーキテキチャを有するCPUの場合、命令バス又はデータバスで発生したバスエラーを適切に処理することは難しいという問題があった。
【0018】
そこで、本発明は、ハーバードアーキテキチャを有するCPUの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0019】
上記の課題は、CPUのバスで発生したエラーを処理するエラー処理方法であって、該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法によって達成できる。
【0020】
上記の課題は、CPUを備えた情報処理装置であって、該CPUに接続されたメモリ部と、該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置によって達成できる。
【発明の効果】
【0021】
本発明によれば、ハーバードアーキテキチャを有するCPUの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を実現することができる。
【発明を実施するための最良の形態】
【0022】
本発明では、CPUの命令バス及びデータバスにバスエラー入力手段を設ける。又、CPUにバスエラーカウンタ手段を設け、このバスエラーカウンタ手段の内容を出力することでメモリ部のページを指定する。バスエラーカウンタ手段の更新は、命令バスでバスエラーが発生した場合は例えば未定義命令の例外ベクタにジャンプすると判断した時、又、データバスでバスエラーが発生した場合は例えばバスエラー発生時に行う。命令バスでバスエラーが発生した場合は、直前の命令にてデータバスでバスエラーが発生していないことを確認後、未定義命令処理を行っても良く、データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行っても良い。
【0023】
命令をフェッチしたときに命令バスでパリティエラーが発生した場合、命令バスエラー信号を命令バスエラー入力手段に入力する。これにより、CPUはエラーとなった命令を実行すると判断した時点でEIT処理を行い、エラー処理ルーチンへジャンプすることができる。又、データバスでパリティエラーが発生した場合、データエラー信号をデータバスエラー入力手段に入力すると、以降の命令の処理をキャンセルすることができるので、命令バスでのエラー処理との優先順位をハード的に処理でき、ソフト的な処理を考慮する必要がなくなる。
【0024】
以下に、本発明のエラー処理方法及び情報処理装置の各実施例を、図9以降と共に説明する。
【実施例1】
【0025】
図9は、本発明が適用されるマイクロプロセッサの要部を示すブロック図である。図9に示すマイクロプロセッサ1は、CPU2及びメモリ部3,4を有する。例えば、メモリ部3はフラッシュメモリ(flash memory)で構成され、メモリ部4はRAMで構成されている。CPU2とメモリ部3は命令バス5により接続され、CPU2とメモリ部4はデータバス6により接続されている。命令バス5は、命令アクセスサイズ信号線ISIZE、命令アドレス線IA、命令データ線ID、レディ信号線IRDY、命令バスエラー信号線IBERR及び命令バスエラーカウンタ信号線IBER_CNTRを有する。データバス6は、データアクセスサイズ信号線DSIZE、データアドレス線DA、データ線DD、レディ信号線DRDY、データバスエラー信号線DBERR及びデータバスエラーカウンタ信号線DBER_CNTRを有する。命令バスエラー信号線IBERR及びデータバスエラー信号線DBERRは、バスエラー入力手段を構成する。
【0026】
図10は、メモリ部3の構成を示すブロック図である。メモリ部4の構成は、メモリ部3と同じで良い。メモリ部3(又は、メモリ部4)は、論理回路31、例えばページメモリ0〜4からなるページメモリ部32、及びパリティチェッカ33を有する。図10中、ADは命令又はデータのアドレス、ER_CNTRは対応するエラーカウンタからのエラーカウンタ信号、R/WXはリード信号又はライト信号、CS0X〜CS3Xは論理回路31が出力するチップセレクト信号、IBERR/DBERRはパリティチェッカ33から出力される命令バスエラー信号又はデータバスエラー信号、IDout/DDoutはページメモリ部32から出力される命令出力又はデータ出力を示す。論理回路31は、エラーカウンタ信号ER_CNTR、命令又はデータのアドレスAD、及びリード又はライト信号R/WXに基づいてチップセレクト信号CS0X〜CS3Xを生成する。ページメモリ部32を構成するページメモリの数は言うまでもなく4個に限定されるものではない。
【0027】
図11は、メモリ部3(又は、メモリ部4)のライト/リードとチップセレクト信号CS0X〜CS3Xとの関係を示す図である。図11中、○印は制御信号のアクティブ(活性化)論理レベルを示し、×印は制御信号のインアクティブ(非活性化)論理レベルを示す。図11に示すように、ライト時にはページメモリ部32の全てのページメモリ0〜3に対して命令又はデータがライトされる。他方、リード時にはエラーカウンタ信号ER_CNTRで示される1つのページメモリから命令又はデータがリードされる。
【0028】
図12は、本発明の第1実施例の要部を示すブロック図である。CPU2は、大きく分けてフェッチ(F:Fetch)部51、デコード(D:Decode)部52、実行(E:Execute)部53、メモリアクセス(M:Memory access)部54及び汎用レジスタ部55から構成される。
【0029】
F部51は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。F部51には、Ibusアクセス制御部511が設けられている。
【0030】
D部52は、フェッチされた命令コードを解析して、E部53で実行すべき演算モード(足し算、引き算等)、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからE部53内の演算器(ALU)532の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa,Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ521中の例外ハンドラ522により割込みルーチンにジャンプするため、D部52は割込みベクタテーブルのリードや汎用レジスタ部55のPSレジスタ及びPCレジスタの退避を行う命令を自動的に供給する。命令シーケンサ521内には、デコーダ523及びマルチプレクサ524が設けられている。又、D部52は、命令シーケンサ521でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス(又は、セレクタ)525及びマルチプレクサ526を有する。
【0031】
E部53は、D部52より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器532にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、E部53はレジスタバイパスルート531により演算器532の出力から直接E部53への入力用の中間レジスタTa又はTb,Tddに伝える。E部53は、F部51内の中間レジスタTia_fの出力及びD部52内の中間レジスタTia_eの出力が供給される中間レジスタEPCを有する。中間レジスタEPCは、エラーが発生したPCレジスタの値を退避するために設けられている。
【0032】
M部54は、E部53よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部55(PC、R0〜R15)等へのライト又はリードを行う。M部54は、中間レジスタTia_m及びDbusアクセス制御部541を有する。
【0033】
汎用レジスタ部55は、CPUの内部レジスタであり、PCレジスタ、PSレジスタ、BEARレジスタ、BEDRレジスタ、バスエラーカウンタDBER_CNTR、命令バスエラーカウンタIBER_CNTR、演算用レジスタR0〜R15及びマルチプレクサ551を有する。本実施例では、PSレジスタは、命令バスエラーIBER及びデータバスエラーDBERを格納し、バスエラーBERRの発生を示す。BEARレジスタは、バスエラーBERRが発生した時のアドレスを格納する。BEDRレジスタは、バスエラーBERRが発生した時のデータを格納する。データバスエラーカウンタDBER_CNTRはデータバスエラーDBERRをカウントし、命令バスエラーカウンタIBER_CNTRは命令バスエラーIBERRをカウントする。命令バスエラーカウンタIBER_CNTR及びデータバスエラーカウンタDBER_CNTRは、バスエラーカウンタ手段を構成する。
【0034】
図12中、IDは命令コード、IAは命令コードのアドレス、iberrは内部命令バスエラー出力、IBERRは図10に示すパリティチェッカ33からの命令バスエラー信号入力、iaccess,irdy, IRDY, ISIZEは夫々、命令コードの内部アクセス要求、命令コードの内部レディ信号出力、メモリ部3からの命令コードのレディ信号入力、メモリ部3に出力される命令コードのサイズを示す。又、DA,DDout,DDinは夫々データのアドレス、出力データ及び入力データを示し、dberrは内部データバスエラー信号出力、DBERRは図10に示すパリティチェッカ33からのデータバスエラー信号入力を示す。更に、daccess,drdy,DRDY,DSIZEは夫々データの内部アクセス要求、データの内部レディ信号出力、メモリ部4からのデータのレディ信号入力及びメモリ部4に出力されるデータのサイズを示す。
【0035】
各部51〜54の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi(i=0〜15)に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、D部52に間に合わないため、演算器532の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス531を設ける。
【0036】
命令は、CPUがフェッチした順番に処理を行う。1つの命令は、1クロック入力する毎にF部51、D部52、E部53、M部54へと進んでいき、CPUはその命令に従って動作する。命令I1がフェッチされ、次のクロックで命令I2がD部52に進んだ時に、平行してF部51にて命令I2のフェッチを行う。これを繰り返し、命令I1〜I5がパイプライン処理されて行く。
【0037】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行わないで(EIT処理時は除く)バスエラー処理を行う。
【0038】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、命令の前後性を維持するため、直前の命令でデータバスエラーDBERRが発生していないことを確認できるまで、D部52で待つ(waitする)。データバスエラーDBERRが発生していなかったら、本実施例では次のサイクルで、未定義例外へジャンプする命令を例外ハンドラ522が供給する。そして、命令バスエラーカウンタIBER_CNTRの値をカウントアップする。
【0039】
データバスエラーDBERRが発生した場合について説明すると、M部54にてデータバスエラーDBERRが発生した場合、M部54のMステージで汎用レジスタ部55内の演算用レジスタR0〜R15に値がセットされるのを抑止する。このような演算用レジスタR0〜R15への値のセットは、データバスエラーDBERRが発生した命令後、割込みベクタをリードできるまでにフェッチした命令のM部54での処理が終了するまで禁止される。データバスエラーDBERR発生後、次のサイクルで例外ハンドラ522がEIT処理の命令を供給する。
【0040】
図13は、第1実施例の命令シーケンサの動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをD部52に入力し(ステップS11)、命令コードをデコードする(ステップS12)。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部55の内容を中間レジスタTdec,Ta,Tb,Tddにセットし、E部53に渡す(ステップS13)。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【0041】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。命令バスエラーIBERR発生時には、処理はステップS14へ進む。データバスエラーDBERR発生時には、処理はステップS23又はステップS26へ進む。ベクタアクセス時にデータバスエラーDBERRが発生した場合、或いは、PSレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS23へ進む。他方、PCレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS26へ進む。その他の割込みが発生した場合には、処理はステップS29へ進む。
【0042】
ステップS14はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS15はNOP(No OPeration)を挿入する。ステップS16はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS17はNOP(No OPeration)を挿入する。ステップS14又はステップS16の判定結果がYESであると、処理はステップS14へ戻る。ステップS18は、例外割込みのルーチン、即ち、命令バスエラーIBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS19は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS20は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS18〜S20は、EIT処理を構成する。その後、ステップS21はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS22は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がNOであると、処理はステップS11へ戻り次の命令をデコードする。ステップS21又はステップS22の判定結果がYESであると、処理はステップS14へ戻る。
【0043】
ステップS23は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS24は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS25は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS23〜S25は、EIT処理を構成する。
【0044】
ステップS26は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS27は、次のサイクルで、NOP(No OPeration)を挿入する。ステップS28は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS26〜S28は、EIT処理を構成する。
【0045】
ステップS29は、その他の割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS30は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS31は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS29〜S31は、EIT処理を構成する。
【0046】
従って、命令シーケンサ521に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、直前の命令にてデータバスDbusのエラーが発生しないことを確認できるまで、NOP(No OPeration)を挿入する。この間最長2サイクルかかる。その後、命令バスエラーIBERRに対応するEIT処理の命令を投入する。又、デコード時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのEIT処理の命令を投入する。EIT処理中にデータバスエラーDBERRが発生した場合、ベクタアクセスでデータバスエラーDBERR又はPSレジスタの内容退避時にデータバスエラーDBERRが発生した場合も同様である。レジスタPCの内容退避時にDBERRが発生した場合は、ベクタアクセスとレジスタPCの内容退避のリトライを行うシーケンスルートを通る。
【0047】
図14は、命令バスIbusでエラーが発生した場合の動作を説明するタイミングチャートである。図14及び後述する図15、図16、図19及び図20において、F,D,E,Mは夫々F部51、D部52、E部53及びM部54の処理(即ち、F,D,E,Mステージの処理)を示し、EDはDステージにおけるEIT処理、EEはEステージにおけるEIT処理、EMはMステージにおけるEIT処理を示す。縦長の四辺形はレジスタの処理、4つの四辺形で構成された正方形はデコーダの処理、+印が付された○印はALUの処理、nopはNo OPeration(NOP)、LDはロード(LoaD)命令、STはストア(STore)命令を示す。又、図14〜図16中、図12と同一部分には同一符号を付す。
【0048】
図14に示すように、各サイクルcycle1〜cycle9では、以下の処理が行われる。
【0049】
サイクルcycle1は、命令I1のフェッチサイクルである。この命令I1は、命令バスエラーIBERRが発生する命令の直前の命令である。
【0050】
サイクルcycle2は、命令I1のデコードサイクルであり、又、命令I2のフェッチサイクルである。このサイクルcycle2で命令バスエラーIBERRがCPU2に入力される。
【0051】
サイクルcycle3では、外部信号である命令バスエラーIBERRをラッチした内部信号である命令バスエラーiberrが命令シーケンサ521に入力されることにより、命令シーケンサ521は中間レジスタTfにセットされた命令ではなく、直前の命令I1のデータバスエラーDBERRがないことが確認されるまでNOP命令相当の演算モード信号をE部53に渡す。
【0052】
サイクルcycle4では、D部52は引続きNOP命令相当の演算モード信号をE部53に渡す。この時、M部54では命令I1のデータバスDbusのアクセスが発生し、データバスエラーDBERRは発生しない。これにより、サイクルcycle5の先頭にて命令バスエラーカウンタIBER_CNTRがカウントアップされ、メモリ部3(又は、4)が切り替わる。尚、サイクルcycle4にてデータバスエラーDBERRが発生した場合は、図15と共に後述するデータバスエラー発生時の動作が行われる。
【0053】
サイクルcycle5では、命令I1のデータバスDbusのアクセスサイクルでエラーが発生しなかったことを受け、D部52は命令バスIbusのエラー処理ルーチンへジャンプするため、ベクタアドレスを計算するための演算モードと汎用レジスタ部55の内容(TBR:ベクタテーブルの先頭アドレス、VectNo.:割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す)を中間レジスタTa,Tbにセットし、E部53に渡す。
【0054】
サイクルcycle6では、E部53にて命令バスIbusのエラー処理ルーチンのベクタアドレスがあるアドレスの計算を行う。これと同時に、D部52は命令シーケンサ521がPSレジスタの内容を退避するための演算モードと汎用レジスタ部55の内容を中間レジスタTa,Tbにセットし、E部53に渡す。
【0055】
サイクルcycle7では、データバスDbusにてベクタアドレスがフェッチされ、サイクルcycle7の後にPCレジスタにロードされる。E部53はPSレジスタをライトすべきアドレスの計算が実行され、中間レジスタTeにセットする。D部52は、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスを計算するための演算モードと汎用レジスタ部55の内容をE部53に渡す。
【0056】
サイクルcycle8では、命令バスIbusにベクタテーブルからロードされたPCレジスタの値が命令バスIbusのアドレスIAとして出力され、命令バスIbusのエラー処理ルーチンのアドレスから命令をフェッチする。データバスDbusでは、PSレジスタの値をメモリ部3(又は、4)へライトし、演算用レジスタR15の値を更新する。E部53では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスの計算を行う。D部52では、次に受け付けるべき割込み等があるか否かをチェックし、なければNOPとする。他方。次に受け付けるべき割込み等がある場合は、その割込みのベクタアドレスをフェッチするための演算モードと汎用レジスタ部55の内容を準備する。図14では、受け付けるべき割込みがない状態を示している。
【0057】
サイクルcycle9では、データバスDbusからエラーのあったPCレジスタの値(EPCレジスタの内容)をメモリ部3(又は、4)へ退避し、演算用レジスタR15の内容を更新する。E部53では、NOP操作を行う。D部52では、命令バスIbusのエラー処理ルーチンの命令のデコードが行われる。サイクルCycle9以降は、通常の命令の処理が行われる。
【0058】
このように、命令バスエラーカウンタIBER_CNTRのカウントアップは、命令バスエラーIBERRが発生し、直前の命令にてデータバスエラーDBERRが発生しなかった場合に行う。全てのビットが「1」(all "1")の時に命令バスエラーIBERRが発生した時は、全てのビットが「0」(all "0")とならず、CPU2はHALT信号を出力して、HALT状態となる。命令バスエラーカウンタIBER_CNTRは、CPU2がリセットされたときにのみリセットされる。
【0059】
図15は、データバスDbusでエラーが発生した場合の動作を説明するタイミングチャートである。図15に示すように、各サイクルcycle1〜cycle9では以下の処理が行われる。
【0060】
サイクルcycle1は、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する命令I1のフェッチサイクルである。この命令I1は、データバスDbusによりメモリ部3(又は、4)からデータをリードする命令である。
【0061】
サイクルcycle2では、命令I2(命令I1)のフェッチを行う。D部52は、命令I1のデコードを行う。
【0062】
サイクルcycle3では、E部53は命令I1のアドレスの計算を行う。D部52は、命令I2のデコードを行う。F部51は、命令I3のフェッチを行う。
【0063】
サイクルcycle4では、データバスDbusにて命令I1のリードアクセスが行われるが、エラーが発生し、データバスエラーDBERRがCPU2に入力される。これにより、リードされたデータを汎用レジスタRiにセットしない。又、サイクルcycle6までの期間は、データバスDbusのアクセスによる内部汎用レジスタ部55への値のセットを禁止する。E部53では命令I2の実行が行われ、D部52では命令I3のデコードが行われる。
【0064】
サイクルcycle5では、データバスDbusにて命令I2のアクセスが行われるが、その時に得たデータは、汎用レジスタ部55にロードされない。つまり、命令I2はキャンセルされたことになる。データバスエラーカウンタDBER_CNTRは、データバスエラーDBERRによりカウントアップし、メモリ部3(又は、4)が切り替わる。E部53では命令I3の実行が行われ、D部52ではデータバスエラーDBERRをラッチした内部信号であるデータバスエラーdberrにより、ベクタアドレスをフェッチするための演算モードと必要な汎用レジスタ部55の値がE部53に渡される。この時、サイクルcycle4でフェッチされた命令は破棄される。
【0065】
サイクルcycle6では、データバスDbusにて命令I3のサイクルが行われるが、汎用レジスタ部55にはその結果は反映されない。E部53ではベクタのあるアドレスの計算が行われる。D部52では、PSレジスタの内容退避のための演算モードと必要な汎用レジスタ部55の内容が中間レジスタにセットされる。
【0066】
サイクルcycle7では、データバスDbusにてベクタがあるアドレスよりベクタをリードし、PCレジスタにセットする。E部53では、PSレジスタの内容退避のためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値を退避するためのアドレスの計算のための演算モード、汎用レジスタ部55の内容を中間レジスタにセットする。
【0067】
サイクルcycle8では、命令バスIbusにてPCレジスタにセットされたアドレスより命令コードをフェッチし、これがエラー処理ルーチンの先頭アドレスとなる。データバスDbusでは、PSレジスタの内容がメモリ部3(又は、4)へライトされる。E部53では、エラーのあったPCレジスタの値を退避するためのアドレスの計算が行われる。D部52では、命令シーケンサ521は他の例外割込みがあればそのEIT処理を投入するが、他の例外割込みがない場合にはNOPを投入する。図15は、NOPが投入された場合を示している。
【0068】
サイクルcycle9では、データバスDbusでは、エラーのあったPCレジスタの値がメモリ部3(又は、4)へライトされ、E部53ではNOPとなる。D部53ではS108のデコードが行われ、サイクルcycle9以降は、通常の命令の処理が行われる。
【0069】
このように、データバスエラーカウンタDBER_CNTRは、データバスDbusにてデータバスエラーDBERRが発生した時にカウントアップされ、全てのビットが「1」(all "1")の時にデータバスエラーDBERRが発生した時は全てのビットが「0」(all "0")とならず、CPU2はHALT信号を出力し、HALT状態となる。データバスエラーカウンタDBER_CNTRは、CPU2がリセットされたときにのみリセットされる。
【0070】
図16は、EIT処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップS101はLD @Rj, Riを実行し、ステップS102は命令I1をキャンセルし、ステップS103は命令I2をキャンセルする。ステップS104はLD @(TBR, VectNo), PCを実行し、ステップS105はST PS, @-R15を実行し、ステップS106はST EPC, @-R15を実行する。ステップS107はNOP1を実行して次のEIT処理があればステップS104〜S106を繰り返し、ステップS108は例外プログラムの命令を実行する。尚、TBRはベクタテーブルの先頭アドレスを示し、VectNo.は割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す。図16に示すように、各サイクルcycle1〜cycle13では以下の処理が行われる。
【0071】
サイクルcycle1〜サイクルcycle8までは、通常の命令のデータバスDbusのアクセスサイクルでデータバスエラーDBERRが発生したことによるベクタフェッチ、PSレジスタの内容退避、PCレジスタの内容退避を行うシーケンスである。
【0072】
サイクルcycle9では、PCレジスタの内容を退避するシーケンスにて、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する。このため、演算用レジスタR15に対するレジスタ値の更新は禁止される。
【0073】
サイクルcycle10では、データバスエラーカウンタDBER_CNTRの値がカウントアップされ、メモリ部3(又は、4)が切り替わる。データバスDbusでは、他の割込みがないので何もしない(NOP操作)。E部53では、既に読み込まれているジャンプ(JMP)先命令の演算が行われる。D部52ではJMP先命令I2のデコードを行わず、ベクタフェッチを再度リトライするための演算モードとレジスタの値を中間レジスタにセットする。
【0074】
サイクルcycle11では、データバスDbusにてJMP先命令I1によるサイクルが行われるが、その結果は汎用レジスタ部55にはセットしない。E部53では、リトライされたベクタフェッチのアドレスの計算が行われる。D部52では、他に割込みがないかをチェックし、無ければNOPを挿入する。
【0075】
サイクルcycle12では、データバスDbusにてベクタフェッチのアクセスが行われ、PCレジスタにセットされる。E部53では、他の割込みがなかったのでNOP操作となる。D部52では、エラーのあったPCレジスタの値を退避するための演算モードと汎用レジスタ部55の内容が中間レジスタにセットされる。
【0076】
サイクルcycle13以降では、ベクタフェッチにてリードしたPCレジスタの値がロードされ、エラーのあったPCレジスタの値がデータバスDbusにてメモリ部3(又は、4)にライトされ、順次命令が実行される。
【実施例2】
【0077】
図17は、本発明の第2実施例の要部を示すブロック図である。図17中、図12と同一部分には同一符号を付し、その説明は省略する。CPU2AのF部51Aには、未定義コード差し替え部512が設けられている。この未定義コード差し替え部512は、セレクタで構成可能である。
【0078】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う。
【0079】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、全パイプラインのステージを再実行し、F部51のFステージをリトライし、命令バスエラーカウンタIBER_CNTRの値を更新する。指定回数リトライしても命令バスエラーIBERRが発生する場合、例外ハンドラ522は未定義例外のEIT処理を行う。尚、命令バスエラーIBERRが発生した命令の前の命令でデータバスエラーDBERRが発生した場合は、未定義例外の処理はキャンセルする。
【0080】
又、データバスエラーDBERRが発生した場合について説明すると、M部54にてデータバスエラーDBERRが発生した場合、M部54のMステージで汎用レジスタ部55内の演算用レジスタR0〜R15に値がセットされるのを抑止する。又、全パイプラインのステージを再実行し、M部54のMステージをリトライし、データバスエラーカウンタDBER_CNTRの値を更新する。指定回数リトライしてもデータバスエラーDBERRが発生する場合、例外ハンドラ522は未定義例外のEIT処理を行う。本実施例では、データバスエラーDBERRの発生時に、そのサイクルで例外ハンドラ522がEIT処理の命令を供給している。
【0081】
EIT処理中にデータバスエラーDBERRが発生した場合には、EIT処理をリトライする。リトライの発生パターンは上記第1実施例の場合と同じである。
【0082】
図18は、第2実施例の命令シーケンサの動作を説明するフローチャートである。図18中、図13と同一ステップには同一符号を付し、その説明は省略する。図18において、デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。データバスエラーDBERR発生時には、処理はステップS23又はステップS26へ進む。ベクタアクセス時にデータバスエラーDBERRが発生した場合、或いは、PSレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS23へ進む。他方、PCレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS26へ進む。その他の割込みが発生した場合には、処理はステップS29へ進む。
【0083】
ステップS25又はステップS28又はステップS31の後、ステップS41は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がNOであると、処理はステップS11へ戻り次の命令をデコードする。ステップS41の判定結果がYESであると、処理はステップS12の判定結果がNOの場合の処理へ戻る。
【0084】
従って、命令シーケンサ521に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、命令シーケンサ521で対応をとるのではなく、未定義コード差し替え部512によりF部51とD部52との間にて未定義命令に置き換えられるので、特に命令シーケンサ521では扱わない。データバスエラーDBERRが発生した場合の処理は、上記第1実施例の場合の処理と同様である。
【0085】
図19は、命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。図19に示すように、各サイクルcycle1〜cycle7では、以下の処理が行われる。
【0086】
サイクルcycle1では、命令I1のフェッチサイクルが始まる。
【0087】
サイクルcycle2で命令I2のフェッチサイクルが始まったものの、命令バスエラーIBERRが発生し、それを受けてサイクルcycle3で命令バスエラーカウンタIBER_CNTRの値が更新されると、メモリ部3(又は、4)の同じアドレスから再度命令I2をフェッチする。この時、D部52では命令I1のデコード情報が中間レジスタTdec,Ta,Tb,Tddに保持されたままとなる。
【0088】
サイクルcycle4では、サイクルcycle3にて命令バスエラーカウンタIBER_CNTRの全てのビットが「1」(All "1")の時に命令バスエラーIBERRが発生するため、D部52(デコーダ部523に入る命令コードが未定義命令コードに置き換えられる。このため、E部53に渡される演算情報としては、未定義命令割込みのベクタフェッチを行う演算情報が中間レジスタにセットされる。
【0089】
サイクルcycle5では、データバスDbusにて命令I1のサイクルが行われ、データバスエラーDBERRが発生せず、次の命令がキャンセルされない。E部53では、ベクタをフェッチのためのアドレスの計算が行わる。D部52では、PSレジスタの内容退避のための演算情報が中間レジスタにセットされる。
【0090】
サイクルcycle6では、データバスDbusにてベクタフェッチが行われ、メモリ部3(又は、4)よりリードしたデータがレジスタPCにセットされる。E部53では、レジスタPSの内容を退避するためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスの計算を行う演算情報を中間レジスタにセットする。
【0091】
サイクルcycle7以降では、命令バスIbusではPCレジスタにセットされた値がアドレス値として出力され、処理ルーチンの先頭命令をフェッチする。データバスDbusではPSレジスタの内容がメモリ部3(又は、4)に退避され、演算用レジスタR15の値が更新される。E部53では、EPCレジスタの内容を退避するためのアドレスが計算される。D部52では、他に割込みがある場合はその割込みのベクタフェッチの演算情報が中間レジスタにセットされる。図19の場合には割込みがないため、NOPが投入される。以降のサイクルは、通常のCPUの命令のパイプライン処理と同様である。
【0092】
図20は、データバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップS201はLD @Rj, Riを実行し、ステップS202は命令I1をキャンセルし、ステップS203は命令I2をキャンセルしてLD @(TBR, VectNo), PCを実行する。ステップS204はST PS, @-R15を実行し、ステップS205はST EPC, @-R15を実行する。ステップS206はNOP1を実行して次のEIT処理があればステップS203〜S205を繰り返し、ステップS207は例外プログラムの命令を実行する。図20に示すように、各サイクルcycle1〜cycle8では、以下の処理が行われる。
【0093】
サイクルcycle1~cycle4では、データバスDbusにてエラーの発生するロード(LD:LoaD)命令、その次の命令I1、命令I2の処理がパイプライン処理にて順次行われる。サイクルcycle4の時にLD命令にてデータバスDbusでデータバスエラーDBERRが発生するものとする。
【0094】
サイクルcycle5では、サイクルcycle4でデータバスエラーDBERRが発生したことにより、データバスエラーカウンタDBER_CNTRがカウントアップし、サイクルcycle5でデータバスDbusのサイクルのリトライを行う。この時、命令バスIbus、D部52及びE部53での結果を中間レジスタにロードせず、値はそのまま保持する。データバスエラーカウンタDBER_CNTRの全てのビットが「1」(All "1")の時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのEIT処理を行う。データバスエラーDBERRが発生した命令の次の命令(命令I1)は、M部54のMステージでの結果を汎用レジスタ部55内の演算用レジスタR0〜R15に反映させないことにより、命令はキャンセルされる。又、その次の命令である命令I2は、命令シーケンサ521によりD部52にてベクタをフェッチする命令に置き換えられ、ベクタアドレスがあるアドレスの計算を行う情報をE部53に渡す。
【0095】
サイクルcycle6では、E部53にて、ベクタアドレスがあるアドレスの計算を行う。又、PSレジスタの内容退避の演算情報が中間レジスタにセットされる。
【0096】
サイクルcycle7では、データバスDbusではベクタアドレスのリードを行って、データバスエラーDBERRの処理ルーチンの先頭アドレスをリードし、それをPCレジスタにセットする。E部53では、PSレジスタの内容退避のためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するための演算情報をE部53に渡す。
【0097】
サイクルcycle8以降では、命令バスIbusでは、PCレジスタの新しい値のアドレスより命令をリードする。データバスDbusではPSレジスタの内容がメモリ部3(又は、4)に退避される。E部53では、EPCレジスタの内容を退避するためのアドレスの計算が行われる。それ以降は、通常のCPUのアクセスと同様の動作となる。
【0098】
このように、上記各実施例によれば、CPUにバスエラー入力手段であるバスエラー信号線が存在しているので、メモリ部にてパリティエラー等のエラーが発生した場合でも、エラー処理を行い、CPUの実行が続行できる。又、CPUが命令をフェッチしてパリティエラーを検出した場合、バスエラーが発生した命令を実行してしまうことはない。CPUが命令をフェッチしてパリティエラーを検出し、その命令が実行されなくても、無意味な例外は発生しない。更に、命令バスでのバスエラー発生時、直前の命令でのデータバスエラーが後で発生しても、ソフトにより処理の優先順位を考慮する必要がない。バスエラー発生後バスエラーカウンタ手段により直ちにメモリ部の交替を行うことが可能となる。
【0099】
尚、本発明は、以下に付記する発明をも包含するものである。
(付記1) CPUのバスで発生したエラーを処理するエラー処理方法であって、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、
該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
(付記2) 該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記3) 該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記4) 該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする付記1又は2記載のエラー処理方法。
(付記5) 該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする付記1又は2記載のエラー処理方法。
(付記6) 命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記1記載のエラー処理方法。
(付記7) 該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記8) 該指定するステップは、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該CPUに接続されたメモリ部のページを指定することを特徴とする付記1記載のエラー処理方法。
(付記9) 該CPUの状態を示すプロセッサステータスレジスタに、命令バスエラー及びデータバスエラーを格納してバスエラーの発生を示すステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記10) 命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記11) CPUを備えた情報処理装置であって、
該CPUに接続されたメモリ部と、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、
該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
(付記12) 該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記11記載の情報処理装置。
(付記13) 該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記11記載の情報処理装置。
(付記14) 該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行う手段を備えたことを特徴とする付記11又は12記載の情報処理装置。
(付記15) 該パスエラーカウンタ手段を含む汎用レジスタ部を備え、
該データバスでバスエラーが発生した場合は、その命令以降の命令による該汎用レジスタ部へのセットは禁止し、未定義命令処理を行う手段を備えたことを特徴とする付記11又は12記載の情報処理装置。
(付記16) 命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力する手段を備え、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記11記載の情報処理装置。
(付記17) 該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルする手段を含むことを特徴とする付記11記載の情報処理装置。
(付記18) 該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする付記11記載の情報処理装置。
(付記19) 該CPUの状態を示すプロセッサステータスレジスタを備え、
命令バスエラー及びデータバスエラーを該プロセッサステータスレジスタに格納してバスエラーの発生を示すことを特徴とする付記11記載の情報処理装置。
(付記20) 命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う手段を備えたことを特徴とする付記11記載の情報処理装置。
【0100】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【0101】
【図1】従来のCPUの要部の構成を示すブロック図である。
【図2】従来のCPUのD部内の命令シーケンサの動作を説明するフローチャートである。
【図3】従来のCPUの動作を説明するタイミングチャートである。
【図4】状態(1)を説明する図である。
【図5】状態(2)を説明する図である。
【図6】状態(3)を説明する図である。
【図7】状態(4)を説明する図である。
【図8】状態(5)を説明する図である。
【図9】本発明が適用されるマイクロプロセッサの要部を示すブロック図である。
【図10】メモリ部の構成を示すブロック図である。
【図11】メモリ部のライト/リードと制御信号との関係を示す図である。
【図12】本発明の第1実施例の要部を示すブロック図である。
【図13】第1実施例の命令シーケンサの動作を説明するフローチャートである。
【図14】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図15】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図16】EIT処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図17】本発明の第2実施例の要部を示すブロック図である。
【図18】第2実施例の命令シーケンサの動作を説明するフローチャートである。
【図19】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図20】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【符号の説明】
【0102】
1 マイクロプロセッサ
2 CPU
3,4 メモリ部
5 命令バス
6 データバス
31 論理回路
32 ページメモリ部
33 パリティチェッカ
51 F部
52 D部
53 E部
54 M部
55 汎用レジスタ部
【技術分野】
【0001】
本発明は、エラー処理方法及び情報処理装置に係り、特に命令バス又はデータバスで発生したバスエラーを処理するエラー処理方法、及びハーバードアーキテキチャを有するCPU等の情報処理装置に関する。
【背景技術】
【0002】
車載用途等で、メモリ部のパリティチェックやECCチェック機能をマイクロプロセッサのCPUに搭載する要求がある。従来のCPUでは、バスアクセス時にエラーが発生した場合、正しい命令コードをCPUに供給することができず、CPUを停止(HALT)させるしかない。このようなCPUの停止を回避する1つの方法として、バスアクセス時にエラーが発生した場合には外部割込みをCPUに入力する方法があるが、割込みルーチンにジャンプする前にバスエラーが発生した命令コードを実行してしまう可能性がある。又、CPUは、ジャンプ命令の場合のように、バスアクセスした命令コードを必ず実行するわけではないので、無意味な割込みを発生させる可能性もある。
【0003】
更に、CPUが命令バスとデータバスとが分かれたハーバードアーキテキチャを有する場合、命令バスでバスエラーが発生した後、その命令の前に実行した命令にてデータバスエラーが発生する可能性があるため、命令バスエラーよりもデータバスエラーを優先処理することを考慮する必要がある。ハーバードアーキテキチャを有するCPUを備えたマイクロプロセッサとしては、例えば富士通株式会社製のFRシリーズのRISC(Reduced Instruction Set Computer)型マイクロコントローラがある。このようなCPUでは、未定義命令が発生した場合には、命令デコード部にある命令シーケンサ中の例外ハンドラが起動され、未定義割込みルーチンの先頭アドレスのフェッチ、CPUの状態(ステータス)を示すプロセッサステータス(PS:Processor Status)レジスタとプログラムカウンタ(PC:Program Counter)レジスタの内容退避のための命令を例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理により発生させて、割込みルーチンへジャンプする。
【0004】
図1は、従来のCPUの要部の構成を示すブロック図である。従来のCPUは、大きく分けてフェッチ(F:Fetch)部101、デコード(D:Decode)部102、実行(E:Execute)部103、メモリアクセス(M:Memory access)部104及び汎用レジスタ部105から構成される。
【0005】
F部101は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。F部101には、Ibusアクセス制御部111が設けられている。
【0006】
D部102は、フェッチされた命令コードを解析して、E部103で実行すべき演算モード(足し算、引き算等)、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからE部103内の演算器(ALU)132の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa,Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ121中の例外ハンドラ122により割込みルーチンにジャンプするため、D部102は割込みベクタテーブルのリードや汎用レジスタ部105のPSレジスタ及びPCレジスタの退避を行う命令を自動的に供給する。命令シーケンサ121内には、デコーダ123及びマルチプレクサ124が設けられている。又、D部102は、命令シーケンサ121でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス(又は、セレクタ)125及びマルチプレクサ126を有する。
【0007】
図2は、従来のCPUのD部102内の命令シーケンサ121の動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをD部102に入力し(ステップS1)、命令コードをデコードする(ステップS2)。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部105の内容を中間レジスタTdec,Ta,Tb,Tddにセットし、E部103に渡す(ステップS3)。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【0008】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、その例外割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS4)。例外処理へ移る方法として、ベクタテーブルを用いる手法がよく使われており、このベクタテーブル中の各アドレスのデータは、夫々の例外処理の開始番地を指し示しているので、ベクタアドレスと呼ばれる。次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS5)。その後、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部105の内容をE部103に渡す(ステップS6)。ステップS4〜S6は、EIT処理を構成する。その後、他の割込み又はエラーがあるか否かをチェックし(ステップS7)、割込み又はエラーがない場合は(ステップS7でNO)次の命令をデコードし、割込み又はエラーがある場合は(ステップS7でYES)EIT処理によるベクタアドレスの取得を繰り返す。
【0009】
E部103は、D部102より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器132にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、E部103はレジスタバイパスルート131により演算器132の出力から直接E部103への入力用の中間レジスタTa又はTb,Tddに伝える。E部103は、D部102内の中間レジスタTddの出力がセットされる中間レジスタTedを有する。
【0010】
M部104は、E部103よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部105(PC、R0〜R15)等へのライト又はリードを行う。M部104は、中間レジスタTia_m及びDbusアクセス制御部141を有する。
【0011】
汎用レジスタ部105は、CPUの内部レジスタであり、PCレジスタ、PSレジスタ、演算用レジスタR0〜R15及びマルチプレクサ151を有する。
【0012】
図1中、IDは命令コード、IAは命令コードのアドレス、iaccess,irdy, IRDY, ISIZEは夫々、命令コードのアクセス要求、命令コードのレディ出力、命令コードのレディ入力、命令コードのサイズを示す。又、DA,DDout,DDinは夫々データのアドレス、出力データ及び入力データを示す。更に、daccess,drdy,DRDY,DSIZEは夫々データのアクセス要求、データのレディ出力、データのレディ入力及びデータのサイズを示す。
【0013】
各部101〜104の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi(i=0〜15)に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、D部102に間に合わないため、演算器132の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス131を設ける。
【0014】
命令は、CPUがフェッチした順番に処理を行う。1つの命令は、1クロック入力する毎にF部101、D部102、E部103、M部104へと進んでいき、CPUはその命令に従って動作する。命令I1がフェッチされ、次のクロックで命令I2がD部102に進んだ時に、平行してF部101にて命令I2のフェッチを行う。これを繰り返し、命令I1〜I5がパイプライン処理されて行く。この時の様子を図3〜図8に示す。図3は、従来のCPUの動作を説明するタイミングチャートである。又、図4は状態(1)を説明する図、図5は状態(2)を説明する図、図6は状態(3)を説明する図、図7は状態(4)を説明する図、図8は状態(5)を説明する図である。図4〜図8中、nopはノーオペレーション(no operation)を示す。
【0015】
従来のCPUにはバスエラー入力手段が設けられておらず、メモリ部にてパリティエラー等のエラーが発生した場合、CPUが実行できる命令を外部にて用意することができず、CPUの実行が止まってしまう。又、CPUが命令をフェッチしてパリティエラーを検出し、それを外部割込みにした場合、バスエラーが発生した命令を実行してしまう可能性がある。更に、CPUが命令をフェッチしてパリティエラーを検出しても、ジャンプ命令実行等によりフェッチした命令が実行されなかった場合、無意味な割込みを上げてしまうことになる。命令バスでのバスエラー発生時には、直前の命令でのデータバスエラーが後で発生するので、処理の優先順位を考慮する必要がある。
【0016】
尚、アドレス又はデータのパリティエラーを検出する構成の1チップマイクロプロセッサは、例えば特許文献1にて提案されている。
【特許文献1】特開平6−242977号公報
【発明の開示】
【発明が解決しようとする課題】
【0017】
従来のハーバードアーキテキチャを有するCPUの場合、命令バス又はデータバスで発生したバスエラーを適切に処理することは難しいという問題があった。
【0018】
そこで、本発明は、ハーバードアーキテキチャを有するCPUの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0019】
上記の課題は、CPUのバスで発生したエラーを処理するエラー処理方法であって、該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法によって達成できる。
【0020】
上記の課題は、CPUを備えた情報処理装置であって、該CPUに接続されたメモリ部と、該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置によって達成できる。
【発明の効果】
【0021】
本発明によれば、ハーバードアーキテキチャを有するCPUの命令バス又はデータバスで発生したバスエラーを適切に処理可能なエラー処理方法及び情報処理装置を実現することができる。
【発明を実施するための最良の形態】
【0022】
本発明では、CPUの命令バス及びデータバスにバスエラー入力手段を設ける。又、CPUにバスエラーカウンタ手段を設け、このバスエラーカウンタ手段の内容を出力することでメモリ部のページを指定する。バスエラーカウンタ手段の更新は、命令バスでバスエラーが発生した場合は例えば未定義命令の例外ベクタにジャンプすると判断した時、又、データバスでバスエラーが発生した場合は例えばバスエラー発生時に行う。命令バスでバスエラーが発生した場合は、直前の命令にてデータバスでバスエラーが発生していないことを確認後、未定義命令処理を行っても良く、データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行っても良い。
【0023】
命令をフェッチしたときに命令バスでパリティエラーが発生した場合、命令バスエラー信号を命令バスエラー入力手段に入力する。これにより、CPUはエラーとなった命令を実行すると判断した時点でEIT処理を行い、エラー処理ルーチンへジャンプすることができる。又、データバスでパリティエラーが発生した場合、データエラー信号をデータバスエラー入力手段に入力すると、以降の命令の処理をキャンセルすることができるので、命令バスでのエラー処理との優先順位をハード的に処理でき、ソフト的な処理を考慮する必要がなくなる。
【0024】
以下に、本発明のエラー処理方法及び情報処理装置の各実施例を、図9以降と共に説明する。
【実施例1】
【0025】
図9は、本発明が適用されるマイクロプロセッサの要部を示すブロック図である。図9に示すマイクロプロセッサ1は、CPU2及びメモリ部3,4を有する。例えば、メモリ部3はフラッシュメモリ(flash memory)で構成され、メモリ部4はRAMで構成されている。CPU2とメモリ部3は命令バス5により接続され、CPU2とメモリ部4はデータバス6により接続されている。命令バス5は、命令アクセスサイズ信号線ISIZE、命令アドレス線IA、命令データ線ID、レディ信号線IRDY、命令バスエラー信号線IBERR及び命令バスエラーカウンタ信号線IBER_CNTRを有する。データバス6は、データアクセスサイズ信号線DSIZE、データアドレス線DA、データ線DD、レディ信号線DRDY、データバスエラー信号線DBERR及びデータバスエラーカウンタ信号線DBER_CNTRを有する。命令バスエラー信号線IBERR及びデータバスエラー信号線DBERRは、バスエラー入力手段を構成する。
【0026】
図10は、メモリ部3の構成を示すブロック図である。メモリ部4の構成は、メモリ部3と同じで良い。メモリ部3(又は、メモリ部4)は、論理回路31、例えばページメモリ0〜4からなるページメモリ部32、及びパリティチェッカ33を有する。図10中、ADは命令又はデータのアドレス、ER_CNTRは対応するエラーカウンタからのエラーカウンタ信号、R/WXはリード信号又はライト信号、CS0X〜CS3Xは論理回路31が出力するチップセレクト信号、IBERR/DBERRはパリティチェッカ33から出力される命令バスエラー信号又はデータバスエラー信号、IDout/DDoutはページメモリ部32から出力される命令出力又はデータ出力を示す。論理回路31は、エラーカウンタ信号ER_CNTR、命令又はデータのアドレスAD、及びリード又はライト信号R/WXに基づいてチップセレクト信号CS0X〜CS3Xを生成する。ページメモリ部32を構成するページメモリの数は言うまでもなく4個に限定されるものではない。
【0027】
図11は、メモリ部3(又は、メモリ部4)のライト/リードとチップセレクト信号CS0X〜CS3Xとの関係を示す図である。図11中、○印は制御信号のアクティブ(活性化)論理レベルを示し、×印は制御信号のインアクティブ(非活性化)論理レベルを示す。図11に示すように、ライト時にはページメモリ部32の全てのページメモリ0〜3に対して命令又はデータがライトされる。他方、リード時にはエラーカウンタ信号ER_CNTRで示される1つのページメモリから命令又はデータがリードされる。
【0028】
図12は、本発明の第1実施例の要部を示すブロック図である。CPU2は、大きく分けてフェッチ(F:Fetch)部51、デコード(D:Decode)部52、実行(E:Execute)部53、メモリアクセス(M:Memory access)部54及び汎用レジスタ部55から構成される。
【0029】
F部51は、内部の命令バスIbusを用いて命令コードを取得する命令フェッチを行う。フェッチした命令コードは中間レジスタTfにセットする。又、その時のアドレスを中間レジスタTia_fにセットする。F部51には、Ibusアクセス制御部511が設けられている。
【0030】
D部52は、フェッチされた命令コードを解析して、E部53で実行すべき演算モード(足し算、引き算等)、演算に必要なデータの準備等を行う。具体的には、フェッチした命令コードからE部53内の演算器(ALU)532の演算モードをデコードし、演算に使用するレジスタ値を中間レジスタTa,Tbにセットする。又、内部のデータバスDbusにライトする場合は、中間レジスタTddにライトすべき値をセットする。外部割込みや、未定義命令等による内部エラーが発生した場合は、命令シーケンサ521中の例外ハンドラ522により割込みルーチンにジャンプするため、D部52は割込みベクタテーブルのリードや汎用レジスタ部55のPSレジスタ及びPCレジスタの退避を行う命令を自動的に供給する。命令シーケンサ521内には、デコーダ523及びマルチプレクサ524が設けられている。又、D部52は、命令シーケンサ521でデコードされた演算モードをラッチする中間レジスタTdec、マトリクス(又は、セレクタ)525及びマルチプレクサ526を有する。
【0031】
E部53は、D部52より演算モード信号や演算用データを受け取り、演算を行う。具体的には、命令の演算を行い、演算器532にて得られた結果を中間レジスタTeにセットする。命令の組合せによってレジスタハザードが発生した場合は、E部53はレジスタバイパスルート531により演算器532の出力から直接E部53への入力用の中間レジスタTa又はTb,Tddに伝える。E部53は、F部51内の中間レジスタTia_fの出力及びD部52内の中間レジスタTia_eの出力が供給される中間レジスタEPCを有する。中間レジスタEPCは、エラーが発生したPCレジスタの値を退避するために設けられている。
【0032】
M部54は、E部53よりデータを受け取り、内部のデータバスDbusを用いてメモリ部へのライト又はリードを行う。具体的には、命令の演算結果のメモリ部又は汎用レジスタ部55(PC、R0〜R15)等へのライト又はリードを行う。M部54は、中間レジスタTia_m及びDbusアクセス制御部541を有する。
【0033】
汎用レジスタ部55は、CPUの内部レジスタであり、PCレジスタ、PSレジスタ、BEARレジスタ、BEDRレジスタ、バスエラーカウンタDBER_CNTR、命令バスエラーカウンタIBER_CNTR、演算用レジスタR0〜R15及びマルチプレクサ551を有する。本実施例では、PSレジスタは、命令バスエラーIBER及びデータバスエラーDBERを格納し、バスエラーBERRの発生を示す。BEARレジスタは、バスエラーBERRが発生した時のアドレスを格納する。BEDRレジスタは、バスエラーBERRが発生した時のデータを格納する。データバスエラーカウンタDBER_CNTRはデータバスエラーDBERRをカウントし、命令バスエラーカウンタIBER_CNTRは命令バスエラーIBERRをカウントする。命令バスエラーカウンタIBER_CNTR及びデータバスエラーカウンタDBER_CNTRは、バスエラーカウンタ手段を構成する。
【0034】
図12中、IDは命令コード、IAは命令コードのアドレス、iberrは内部命令バスエラー出力、IBERRは図10に示すパリティチェッカ33からの命令バスエラー信号入力、iaccess,irdy, IRDY, ISIZEは夫々、命令コードの内部アクセス要求、命令コードの内部レディ信号出力、メモリ部3からの命令コードのレディ信号入力、メモリ部3に出力される命令コードのサイズを示す。又、DA,DDout,DDinは夫々データのアドレス、出力データ及び入力データを示し、dberrは内部データバスエラー信号出力、DBERRは図10に示すパリティチェッカ33からのデータバスエラー信号入力を示す。更に、daccess,drdy,DRDY,DSIZEは夫々データの内部アクセス要求、データの内部レディ信号出力、メモリ部4からのデータのレディ信号入力及びメモリ部4に出力されるデータのサイズを示す。
【0035】
各部51〜54の命令のアドレスは、中間レジスタTia_f→Tia_dec→Tia_e→Tia_mに保持される。ある命令で演算用レジスタRi(i=0〜15)に演算結果を代入後、次の命令でその演算用レジスタRiを使用する場合、D部52に間に合わないため、演算器532の出力を中間レジスタTa又はTbにセットできるルート、即ち、レジスタバイパス531を設ける。
【0036】
命令は、CPUがフェッチした順番に処理を行う。1つの命令は、1クロック入力する毎にF部51、D部52、E部53、M部54へと進んでいき、CPUはその命令に従って動作する。命令I1がフェッチされ、次のクロックで命令I2がD部52に進んだ時に、平行してF部51にて命令I2のフェッチを行う。これを繰り返し、命令I1〜I5がパイプライン処理されて行く。
【0037】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行わないで(EIT処理時は除く)バスエラー処理を行う。
【0038】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、命令の前後性を維持するため、直前の命令でデータバスエラーDBERRが発生していないことを確認できるまで、D部52で待つ(waitする)。データバスエラーDBERRが発生していなかったら、本実施例では次のサイクルで、未定義例外へジャンプする命令を例外ハンドラ522が供給する。そして、命令バスエラーカウンタIBER_CNTRの値をカウントアップする。
【0039】
データバスエラーDBERRが発生した場合について説明すると、M部54にてデータバスエラーDBERRが発生した場合、M部54のMステージで汎用レジスタ部55内の演算用レジスタR0〜R15に値がセットされるのを抑止する。このような演算用レジスタR0〜R15への値のセットは、データバスエラーDBERRが発生した命令後、割込みベクタをリードできるまでにフェッチした命令のM部54での処理が終了するまで禁止される。データバスエラーDBERR発生後、次のサイクルで例外ハンドラ522がEIT処理の命令を供給する。
【0040】
図13は、第1実施例の命令シーケンサの動作を説明するフローチャートである。新たに命令をフェッチ後、命令コードをD部52に入力し(ステップS11)、命令コードをデコードする(ステップS12)。デコードの結果、命令コードが正常であれば、その命令の演算モードと、演算に必要な汎用レジスタ部55の内容を中間レジスタTdec,Ta,Tb,Tddにセットし、E部53に渡す(ステップS13)。その後、次のサイクルで、次の命令を取り込み、デコードを開始する。
【0041】
デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。命令バスエラーIBERR発生時には、処理はステップS14へ進む。データバスエラーDBERR発生時には、処理はステップS23又はステップS26へ進む。ベクタアクセス時にデータバスエラーDBERRが発生した場合、或いは、PSレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS23へ進む。他方、PCレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS26へ進む。その他の割込みが発生した場合には、処理はステップS29へ進む。
【0042】
ステップS14はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS15はNOP(No OPeration)を挿入する。ステップS16はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS17はNOP(No OPeration)を挿入する。ステップS14又はステップS16の判定結果がYESであると、処理はステップS14へ戻る。ステップS18は、例外割込みのルーチン、即ち、命令バスエラーIBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS19は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS20は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS18〜S20は、EIT処理を構成する。その後、ステップS21はデータバスエラー出力dberrが入力されたか否かを判定し、判定結果がNOであると、ステップS22は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がNOであると、処理はステップS11へ戻り次の命令をデコードする。ステップS21又はステップS22の判定結果がYESであると、処理はステップS14へ戻る。
【0043】
ステップS23は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS24は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS25は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS23〜S25は、EIT処理を構成する。
【0044】
ステップS26は、例外割込みのルーチン、即ち、データバスエラーDBERR割込のルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS27は、次のサイクルで、NOP(No OPeration)を挿入する。ステップS28は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS26〜S28は、EIT処理を構成する。
【0045】
ステップS29は、その他の割込みのルーチンにジャンプするため、ベクタテーブルからベクタアドレスを取得し、そのアドレスを計算するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS30は、次のサイクルで、PSレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡す。ステップS31は、PCレジスタの内容を退避するための演算モードと、演算に必要な汎用レジスタ部55の内容をE部53に渡し、処理はステップS21へ進む。ステップS29〜S31は、EIT処理を構成する。
【0046】
従って、命令シーケンサ521に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、直前の命令にてデータバスDbusのエラーが発生しないことを確認できるまで、NOP(No OPeration)を挿入する。この間最長2サイクルかかる。その後、命令バスエラーIBERRに対応するEIT処理の命令を投入する。又、デコード時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのEIT処理の命令を投入する。EIT処理中にデータバスエラーDBERRが発生した場合、ベクタアクセスでデータバスエラーDBERR又はPSレジスタの内容退避時にデータバスエラーDBERRが発生した場合も同様である。レジスタPCの内容退避時にDBERRが発生した場合は、ベクタアクセスとレジスタPCの内容退避のリトライを行うシーケンスルートを通る。
【0047】
図14は、命令バスIbusでエラーが発生した場合の動作を説明するタイミングチャートである。図14及び後述する図15、図16、図19及び図20において、F,D,E,Mは夫々F部51、D部52、E部53及びM部54の処理(即ち、F,D,E,Mステージの処理)を示し、EDはDステージにおけるEIT処理、EEはEステージにおけるEIT処理、EMはMステージにおけるEIT処理を示す。縦長の四辺形はレジスタの処理、4つの四辺形で構成された正方形はデコーダの処理、+印が付された○印はALUの処理、nopはNo OPeration(NOP)、LDはロード(LoaD)命令、STはストア(STore)命令を示す。又、図14〜図16中、図12と同一部分には同一符号を付す。
【0048】
図14に示すように、各サイクルcycle1〜cycle9では、以下の処理が行われる。
【0049】
サイクルcycle1は、命令I1のフェッチサイクルである。この命令I1は、命令バスエラーIBERRが発生する命令の直前の命令である。
【0050】
サイクルcycle2は、命令I1のデコードサイクルであり、又、命令I2のフェッチサイクルである。このサイクルcycle2で命令バスエラーIBERRがCPU2に入力される。
【0051】
サイクルcycle3では、外部信号である命令バスエラーIBERRをラッチした内部信号である命令バスエラーiberrが命令シーケンサ521に入力されることにより、命令シーケンサ521は中間レジスタTfにセットされた命令ではなく、直前の命令I1のデータバスエラーDBERRがないことが確認されるまでNOP命令相当の演算モード信号をE部53に渡す。
【0052】
サイクルcycle4では、D部52は引続きNOP命令相当の演算モード信号をE部53に渡す。この時、M部54では命令I1のデータバスDbusのアクセスが発生し、データバスエラーDBERRは発生しない。これにより、サイクルcycle5の先頭にて命令バスエラーカウンタIBER_CNTRがカウントアップされ、メモリ部3(又は、4)が切り替わる。尚、サイクルcycle4にてデータバスエラーDBERRが発生した場合は、図15と共に後述するデータバスエラー発生時の動作が行われる。
【0053】
サイクルcycle5では、命令I1のデータバスDbusのアクセスサイクルでエラーが発生しなかったことを受け、D部52は命令バスIbusのエラー処理ルーチンへジャンプするため、ベクタアドレスを計算するための演算モードと汎用レジスタ部55の内容(TBR:ベクタテーブルの先頭アドレス、VectNo.:割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す)を中間レジスタTa,Tbにセットし、E部53に渡す。
【0054】
サイクルcycle6では、E部53にて命令バスIbusのエラー処理ルーチンのベクタアドレスがあるアドレスの計算を行う。これと同時に、D部52は命令シーケンサ521がPSレジスタの内容を退避するための演算モードと汎用レジスタ部55の内容を中間レジスタTa,Tbにセットし、E部53に渡す。
【0055】
サイクルcycle7では、データバスDbusにてベクタアドレスがフェッチされ、サイクルcycle7の後にPCレジスタにロードされる。E部53はPSレジスタをライトすべきアドレスの計算が実行され、中間レジスタTeにセットする。D部52は、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスを計算するための演算モードと汎用レジスタ部55の内容をE部53に渡す。
【0056】
サイクルcycle8では、命令バスIbusにベクタテーブルからロードされたPCレジスタの値が命令バスIbusのアドレスIAとして出力され、命令バスIbusのエラー処理ルーチンのアドレスから命令をフェッチする。データバスDbusでは、PSレジスタの値をメモリ部3(又は、4)へライトし、演算用レジスタR15の値を更新する。E部53では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスの計算を行う。D部52では、次に受け付けるべき割込み等があるか否かをチェックし、なければNOPとする。他方。次に受け付けるべき割込み等がある場合は、その割込みのベクタアドレスをフェッチするための演算モードと汎用レジスタ部55の内容を準備する。図14では、受け付けるべき割込みがない状態を示している。
【0057】
サイクルcycle9では、データバスDbusからエラーのあったPCレジスタの値(EPCレジスタの内容)をメモリ部3(又は、4)へ退避し、演算用レジスタR15の内容を更新する。E部53では、NOP操作を行う。D部52では、命令バスIbusのエラー処理ルーチンの命令のデコードが行われる。サイクルCycle9以降は、通常の命令の処理が行われる。
【0058】
このように、命令バスエラーカウンタIBER_CNTRのカウントアップは、命令バスエラーIBERRが発生し、直前の命令にてデータバスエラーDBERRが発生しなかった場合に行う。全てのビットが「1」(all "1")の時に命令バスエラーIBERRが発生した時は、全てのビットが「0」(all "0")とならず、CPU2はHALT信号を出力して、HALT状態となる。命令バスエラーカウンタIBER_CNTRは、CPU2がリセットされたときにのみリセットされる。
【0059】
図15は、データバスDbusでエラーが発生した場合の動作を説明するタイミングチャートである。図15に示すように、各サイクルcycle1〜cycle9では以下の処理が行われる。
【0060】
サイクルcycle1は、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する命令I1のフェッチサイクルである。この命令I1は、データバスDbusによりメモリ部3(又は、4)からデータをリードする命令である。
【0061】
サイクルcycle2では、命令I2(命令I1)のフェッチを行う。D部52は、命令I1のデコードを行う。
【0062】
サイクルcycle3では、E部53は命令I1のアドレスの計算を行う。D部52は、命令I2のデコードを行う。F部51は、命令I3のフェッチを行う。
【0063】
サイクルcycle4では、データバスDbusにて命令I1のリードアクセスが行われるが、エラーが発生し、データバスエラーDBERRがCPU2に入力される。これにより、リードされたデータを汎用レジスタRiにセットしない。又、サイクルcycle6までの期間は、データバスDbusのアクセスによる内部汎用レジスタ部55への値のセットを禁止する。E部53では命令I2の実行が行われ、D部52では命令I3のデコードが行われる。
【0064】
サイクルcycle5では、データバスDbusにて命令I2のアクセスが行われるが、その時に得たデータは、汎用レジスタ部55にロードされない。つまり、命令I2はキャンセルされたことになる。データバスエラーカウンタDBER_CNTRは、データバスエラーDBERRによりカウントアップし、メモリ部3(又は、4)が切り替わる。E部53では命令I3の実行が行われ、D部52ではデータバスエラーDBERRをラッチした内部信号であるデータバスエラーdberrにより、ベクタアドレスをフェッチするための演算モードと必要な汎用レジスタ部55の値がE部53に渡される。この時、サイクルcycle4でフェッチされた命令は破棄される。
【0065】
サイクルcycle6では、データバスDbusにて命令I3のサイクルが行われるが、汎用レジスタ部55にはその結果は反映されない。E部53ではベクタのあるアドレスの計算が行われる。D部52では、PSレジスタの内容退避のための演算モードと必要な汎用レジスタ部55の内容が中間レジスタにセットされる。
【0066】
サイクルcycle7では、データバスDbusにてベクタがあるアドレスよりベクタをリードし、PCレジスタにセットする。E部53では、PSレジスタの内容退避のためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値を退避するためのアドレスの計算のための演算モード、汎用レジスタ部55の内容を中間レジスタにセットする。
【0067】
サイクルcycle8では、命令バスIbusにてPCレジスタにセットされたアドレスより命令コードをフェッチし、これがエラー処理ルーチンの先頭アドレスとなる。データバスDbusでは、PSレジスタの内容がメモリ部3(又は、4)へライトされる。E部53では、エラーのあったPCレジスタの値を退避するためのアドレスの計算が行われる。D部52では、命令シーケンサ521は他の例外割込みがあればそのEIT処理を投入するが、他の例外割込みがない場合にはNOPを投入する。図15は、NOPが投入された場合を示している。
【0068】
サイクルcycle9では、データバスDbusでは、エラーのあったPCレジスタの値がメモリ部3(又は、4)へライトされ、E部53ではNOPとなる。D部53ではS108のデコードが行われ、サイクルcycle9以降は、通常の命令の処理が行われる。
【0069】
このように、データバスエラーカウンタDBER_CNTRは、データバスDbusにてデータバスエラーDBERRが発生した時にカウントアップされ、全てのビットが「1」(all "1")の時にデータバスエラーDBERRが発生した時は全てのビットが「0」(all "0")とならず、CPU2はHALT信号を出力し、HALT状態となる。データバスエラーカウンタDBER_CNTRは、CPU2がリセットされたときにのみリセットされる。
【0070】
図16は、EIT処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップS101はLD @Rj, Riを実行し、ステップS102は命令I1をキャンセルし、ステップS103は命令I2をキャンセルする。ステップS104はLD @(TBR, VectNo), PCを実行し、ステップS105はST PS, @-R15を実行し、ステップS106はST EPC, @-R15を実行する。ステップS107はNOP1を実行して次のEIT処理があればステップS104〜S106を繰り返し、ステップS108は例外プログラムの命令を実行する。尚、TBRはベクタテーブルの先頭アドレスを示し、VectNo.は割込みの番号を表し、ベクタテーブルの先頭から何番目にアドレスがあるかを示す。図16に示すように、各サイクルcycle1〜cycle13では以下の処理が行われる。
【0071】
サイクルcycle1〜サイクルcycle8までは、通常の命令のデータバスDbusのアクセスサイクルでデータバスエラーDBERRが発生したことによるベクタフェッチ、PSレジスタの内容退避、PCレジスタの内容退避を行うシーケンスである。
【0072】
サイクルcycle9では、PCレジスタの内容を退避するシーケンスにて、データバスDbusのアクセスサイクルでデータバスエラーDBERRが発生する。このため、演算用レジスタR15に対するレジスタ値の更新は禁止される。
【0073】
サイクルcycle10では、データバスエラーカウンタDBER_CNTRの値がカウントアップされ、メモリ部3(又は、4)が切り替わる。データバスDbusでは、他の割込みがないので何もしない(NOP操作)。E部53では、既に読み込まれているジャンプ(JMP)先命令の演算が行われる。D部52ではJMP先命令I2のデコードを行わず、ベクタフェッチを再度リトライするための演算モードとレジスタの値を中間レジスタにセットする。
【0074】
サイクルcycle11では、データバスDbusにてJMP先命令I1によるサイクルが行われるが、その結果は汎用レジスタ部55にはセットしない。E部53では、リトライされたベクタフェッチのアドレスの計算が行われる。D部52では、他に割込みがないかをチェックし、無ければNOPを挿入する。
【0075】
サイクルcycle12では、データバスDbusにてベクタフェッチのアクセスが行われ、PCレジスタにセットされる。E部53では、他の割込みがなかったのでNOP操作となる。D部52では、エラーのあったPCレジスタの値を退避するための演算モードと汎用レジスタ部55の内容が中間レジスタにセットされる。
【0076】
サイクルcycle13以降では、ベクタフェッチにてリードしたPCレジスタの値がロードされ、エラーのあったPCレジスタの値がデータバスDbusにてメモリ部3(又は、4)にライトされ、順次命令が実行される。
【実施例2】
【0077】
図17は、本発明の第2実施例の要部を示すブロック図である。図17中、図12と同一部分には同一符号を付し、その説明は省略する。CPU2AのF部51Aには、未定義コード差し替え部512が設けられている。この未定義コード差し替え部512は、セレクタで構成可能である。
【0078】
本実施例では、命令バスエラーIBERR又はデータバスエラーDBERRが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う。
【0079】
命令バスエラーIBERRが発生した場合について説明すると、命令フェッチにて命令バスエラーIBERRが発生した場合、全パイプラインのステージを再実行し、F部51のFステージをリトライし、命令バスエラーカウンタIBER_CNTRの値を更新する。指定回数リトライしても命令バスエラーIBERRが発生する場合、例外ハンドラ522は未定義例外のEIT処理を行う。尚、命令バスエラーIBERRが発生した命令の前の命令でデータバスエラーDBERRが発生した場合は、未定義例外の処理はキャンセルする。
【0080】
又、データバスエラーDBERRが発生した場合について説明すると、M部54にてデータバスエラーDBERRが発生した場合、M部54のMステージで汎用レジスタ部55内の演算用レジスタR0〜R15に値がセットされるのを抑止する。又、全パイプラインのステージを再実行し、M部54のMステージをリトライし、データバスエラーカウンタDBER_CNTRの値を更新する。指定回数リトライしてもデータバスエラーDBERRが発生する場合、例外ハンドラ522は未定義例外のEIT処理を行う。本実施例では、データバスエラーDBERRの発生時に、そのサイクルで例外ハンドラ522がEIT処理の命令を供給している。
【0081】
EIT処理中にデータバスエラーDBERRが発生した場合には、EIT処理をリトライする。リトライの発生パターンは上記第1実施例の場合と同じである。
【0082】
図18は、第2実施例の命令シーケンサの動作を説明するフローチャートである。図18中、図13と同一ステップには同一符号を付し、その説明は省略する。図18において、デコードした結果が未定義命令、又は、外部からの割込みを受け付けた場合は、バスエラーに応じた処理、或いは、その他の割込みに応じた処理が行われる。データバスエラーDBERR発生時には、処理はステップS23又はステップS26へ進む。ベクタアクセス時にデータバスエラーDBERRが発生した場合、或いは、PSレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS23へ進む。他方、PCレジスタの内容退避時にデータバスエラーDBERRが発生した場合には、処理はステップS26へ進む。その他の割込みが発生した場合には、処理はステップS29へ進む。
【0083】
ステップS25又はステップS28又はステップS31の後、ステップS41は他の割込み又はエラーがあるか否かをチェックし、割込み又はエラーがなくて判定結果がNOであると、処理はステップS11へ戻り次の命令をデコードする。ステップS41の判定結果がYESであると、処理はステップS12の判定結果がNOの場合の処理へ戻る。
【0084】
従って、命令シーケンサ521に投入される命令コードが正常な場合は、従来と同様の処理が行われる。しかし、デコード時に命令バスエラーIBERRが発生した場合、命令シーケンサ521で対応をとるのではなく、未定義コード差し替え部512によりF部51とD部52との間にて未定義命令に置き換えられるので、特に命令シーケンサ521では扱わない。データバスエラーDBERRが発生した場合の処理は、上記第1実施例の場合の処理と同様である。
【0085】
図19は、命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。図19に示すように、各サイクルcycle1〜cycle7では、以下の処理が行われる。
【0086】
サイクルcycle1では、命令I1のフェッチサイクルが始まる。
【0087】
サイクルcycle2で命令I2のフェッチサイクルが始まったものの、命令バスエラーIBERRが発生し、それを受けてサイクルcycle3で命令バスエラーカウンタIBER_CNTRの値が更新されると、メモリ部3(又は、4)の同じアドレスから再度命令I2をフェッチする。この時、D部52では命令I1のデコード情報が中間レジスタTdec,Ta,Tb,Tddに保持されたままとなる。
【0088】
サイクルcycle4では、サイクルcycle3にて命令バスエラーカウンタIBER_CNTRの全てのビットが「1」(All "1")の時に命令バスエラーIBERRが発生するため、D部52(デコーダ部523に入る命令コードが未定義命令コードに置き換えられる。このため、E部53に渡される演算情報としては、未定義命令割込みのベクタフェッチを行う演算情報が中間レジスタにセットされる。
【0089】
サイクルcycle5では、データバスDbusにて命令I1のサイクルが行われ、データバスエラーDBERRが発生せず、次の命令がキャンセルされない。E部53では、ベクタをフェッチのためのアドレスの計算が行わる。D部52では、PSレジスタの内容退避のための演算情報が中間レジスタにセットされる。
【0090】
サイクルcycle6では、データバスDbusにてベクタフェッチが行われ、メモリ部3(又は、4)よりリードしたデータがレジスタPCにセットされる。E部53では、レジスタPSの内容を退避するためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するためのアドレスの計算を行う演算情報を中間レジスタにセットする。
【0091】
サイクルcycle7以降では、命令バスIbusではPCレジスタにセットされた値がアドレス値として出力され、処理ルーチンの先頭命令をフェッチする。データバスDbusではPSレジスタの内容がメモリ部3(又は、4)に退避され、演算用レジスタR15の値が更新される。E部53では、EPCレジスタの内容を退避するためのアドレスが計算される。D部52では、他に割込みがある場合はその割込みのベクタフェッチの演算情報が中間レジスタにセットされる。図19の場合には割込みがないため、NOPが投入される。以降のサイクルは、通常のCPUの命令のパイプライン処理と同様である。
【0092】
図20は、データバスでエラーが発生した場合の動作を説明するタイミングチャートである。ステップS201はLD @Rj, Riを実行し、ステップS202は命令I1をキャンセルし、ステップS203は命令I2をキャンセルしてLD @(TBR, VectNo), PCを実行する。ステップS204はST PS, @-R15を実行し、ステップS205はST EPC, @-R15を実行する。ステップS206はNOP1を実行して次のEIT処理があればステップS203〜S205を繰り返し、ステップS207は例外プログラムの命令を実行する。図20に示すように、各サイクルcycle1〜cycle8では、以下の処理が行われる。
【0093】
サイクルcycle1~cycle4では、データバスDbusにてエラーの発生するロード(LD:LoaD)命令、その次の命令I1、命令I2の処理がパイプライン処理にて順次行われる。サイクルcycle4の時にLD命令にてデータバスDbusでデータバスエラーDBERRが発生するものとする。
【0094】
サイクルcycle5では、サイクルcycle4でデータバスエラーDBERRが発生したことにより、データバスエラーカウンタDBER_CNTRがカウントアップし、サイクルcycle5でデータバスDbusのサイクルのリトライを行う。この時、命令バスIbus、D部52及びE部53での結果を中間レジスタにロードせず、値はそのまま保持する。データバスエラーカウンタDBER_CNTRの全てのビットが「1」(All "1")の時にデータバスエラーDBERRが発生した場合は、データバスエラーDBERRのEIT処理を行う。データバスエラーDBERRが発生した命令の次の命令(命令I1)は、M部54のMステージでの結果を汎用レジスタ部55内の演算用レジスタR0〜R15に反映させないことにより、命令はキャンセルされる。又、その次の命令である命令I2は、命令シーケンサ521によりD部52にてベクタをフェッチする命令に置き換えられ、ベクタアドレスがあるアドレスの計算を行う情報をE部53に渡す。
【0095】
サイクルcycle6では、E部53にて、ベクタアドレスがあるアドレスの計算を行う。又、PSレジスタの内容退避の演算情報が中間レジスタにセットされる。
【0096】
サイクルcycle7では、データバスDbusではベクタアドレスのリードを行って、データバスエラーDBERRの処理ルーチンの先頭アドレスをリードし、それをPCレジスタにセットする。E部53では、PSレジスタの内容退避のためのアドレスの計算が行われる。D部52では、エラーのあったPCレジスタの値(EPCレジスタの内容)を退避するための演算情報をE部53に渡す。
【0097】
サイクルcycle8以降では、命令バスIbusでは、PCレジスタの新しい値のアドレスより命令をリードする。データバスDbusではPSレジスタの内容がメモリ部3(又は、4)に退避される。E部53では、EPCレジスタの内容を退避するためのアドレスの計算が行われる。それ以降は、通常のCPUのアクセスと同様の動作となる。
【0098】
このように、上記各実施例によれば、CPUにバスエラー入力手段であるバスエラー信号線が存在しているので、メモリ部にてパリティエラー等のエラーが発生した場合でも、エラー処理を行い、CPUの実行が続行できる。又、CPUが命令をフェッチしてパリティエラーを検出した場合、バスエラーが発生した命令を実行してしまうことはない。CPUが命令をフェッチしてパリティエラーを検出し、その命令が実行されなくても、無意味な例外は発生しない。更に、命令バスでのバスエラー発生時、直前の命令でのデータバスエラーが後で発生しても、ソフトにより処理の優先順位を考慮する必要がない。バスエラー発生後バスエラーカウンタ手段により直ちにメモリ部の交替を行うことが可能となる。
【0099】
尚、本発明は、以下に付記する発明をも包含するものである。
(付記1) CPUのバスで発生したエラーを処理するエラー処理方法であって、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、
該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
(付記2) 該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記3) 該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記4) 該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする付記1又は2記載のエラー処理方法。
(付記5) 該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする付記1又は2記載のエラー処理方法。
(付記6) 命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記1記載のエラー処理方法。
(付記7) 該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記8) 該指定するステップは、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該CPUに接続されたメモリ部のページを指定することを特徴とする付記1記載のエラー処理方法。
(付記9) 該CPUの状態を示すプロセッサステータスレジスタに、命令バスエラー及びデータバスエラーを格納してバスエラーの発生を示すステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記10) 命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする付記1記載のエラー処理方法。
(付記11) CPUを備えた情報処理装置であって、
該CPUに接続されたメモリ部と、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、
該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
(付記12) 該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記11記載の情報処理装置。
(付記13) 該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新する更新手段を備えたことを特徴とする付記11記載の情報処理装置。
(付記14) 該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行う手段を備えたことを特徴とする付記11又は12記載の情報処理装置。
(付記15) 該パスエラーカウンタ手段を含む汎用レジスタ部を備え、
該データバスでバスエラーが発生した場合は、その命令以降の命令による該汎用レジスタ部へのセットは禁止し、未定義命令処理を行う手段を備えたことを特徴とする付記11又は12記載の情報処理装置。
(付記16) 命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力する手段を備え、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする付記11記載の情報処理装置。
(付記17) 該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルする手段を含むことを特徴とする付記11記載の情報処理装置。
(付記18) 該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする付記11記載の情報処理装置。
(付記19) 該CPUの状態を示すプロセッサステータスレジスタを備え、
命令バスエラー及びデータバスエラーを該プロセッサステータスレジスタに格納してバスエラーの発生を示すことを特徴とする付記11記載の情報処理装置。
(付記20) 命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行う手段を備えたことを特徴とする付記11記載の情報処理装置。
【0100】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【0101】
【図1】従来のCPUの要部の構成を示すブロック図である。
【図2】従来のCPUのD部内の命令シーケンサの動作を説明するフローチャートである。
【図3】従来のCPUの動作を説明するタイミングチャートである。
【図4】状態(1)を説明する図である。
【図5】状態(2)を説明する図である。
【図6】状態(3)を説明する図である。
【図7】状態(4)を説明する図である。
【図8】状態(5)を説明する図である。
【図9】本発明が適用されるマイクロプロセッサの要部を示すブロック図である。
【図10】メモリ部の構成を示すブロック図である。
【図11】メモリ部のライト/リードと制御信号との関係を示す図である。
【図12】本発明の第1実施例の要部を示すブロック図である。
【図13】第1実施例の命令シーケンサの動作を説明するフローチャートである。
【図14】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図15】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図16】EIT処理時のデータバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図17】本発明の第2実施例の要部を示すブロック図である。
【図18】第2実施例の命令シーケンサの動作を説明するフローチャートである。
【図19】命令バスでエラーが発生した場合の動作を説明するタイミングチャートである。
【図20】データバスでエラーが発生した場合の動作を説明するタイミングチャートである。
【符号の説明】
【0102】
1 マイクロプロセッサ
2 CPU
3,4 メモリ部
5 命令バス
6 データバス
31 論理回路
32 ページメモリ部
33 パリティチェッカ
51 F部
52 D部
53 E部
54 M部
55 汎用レジスタ部
【特許請求の範囲】
【請求項1】
CPUのバスで発生したエラーを処理するエラー処理方法であって、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、
該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
【請求項2】
該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項3】
該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項4】
該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする請求項1又は2記載のエラー処理方法。
【請求項5】
該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする請求項1又は2記載のエラー処理方法。
【請求項6】
命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする請求項1記載のエラー処理方法。
【請求項7】
該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項8】
命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項9】
CPUを備えた情報処理装置であって、
該CPUに接続されたメモリ部と、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、
該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
【請求項10】
該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする請求項9記載の情報処理装置。
【請求項1】
CPUのバスで発生したエラーを処理するエラー処理方法であって、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーをバスエラー入力手段により該CPUに入力するステップと、
該バスエラーを該CPU内のバスエラーカウンタ手段でカウントするステップと、
該バスエラーカウンタ手段の値に基づいて該CPUに接続されたメモリ部の領域を指定するステップとを含むことを特徴とするエラー処理方法。
【請求項2】
該命令バスでバスエラーが発生し未定義命令の例外ベクタにジャンプすると判断した場合及び該データバスでバスエラーが発生した場合は前記バスエラー発生時に、該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項3】
該データバスでバスエラーが発生した場合は前記バスエラー発生時に該バスエラーカウンタ手段の値を更新するステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項4】
該命令バスでバスエラーが発生した場合は直前の命令にて該データバスでバスエラーが発生していないことを確認後、未定義命令処理を行うステップを含むことを特徴とする請求項1又は2記載のエラー処理方法。
【請求項5】
該データバスでバスエラーが発生した場合は、その命令以降の命令による汎用レジスタ部へのセットは禁止し、未定義命令処理を行うステップを含むことを特徴とする請求項1又は2記載のエラー処理方法。
【請求項6】
命令をフェッチしたときに該メモリ部にてパリティエラーが発生した場合、エラー信号を該バスエラー入力手段に入力するステップを含み、
該CPUはエラーとなった命令を実行すると判断した時点で例外・割込み・トラップ(EIT:Exception, Interrupt, Trap)処理を行い、エラー処理ルーチンへジャンプすることを特徴とする請求項1記載のエラー処理方法。
【請求項7】
該データバスでパリティエラーが発生した場合、エラー信号を該バスエラー入力手段により該CPUに入力すると、以降の命令の処理をキャンセルするステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項8】
命令バスエラー又はデータバスエラーが発生した場合、リトライを行い、それでもバスエラーが発生する場合にはバスエラー処理を行うステップを含むことを特徴とする請求項1記載のエラー処理方法。
【請求項9】
CPUを備えた情報処理装置であって、
該CPUに接続されたメモリ部と、
該CPUの命令バス及びデータバスのうち少なくとも一方のバスで発生したバスエラーを該CPUに入力するバスエラー入力手段と、
該CPU内で該バスエラーをカウントするバスエラーカウンタ手段と、
該バスエラーカウンタ手段の値に基づいて該メモリ部の領域を指定する手段とを備えたことを特徴とする情報処理装置。
【請求項10】
該指定する手段は、バスエラーカウンタ手段の値、命令又はデータのアドレス、及びリード又はライト信号に基づいて該メモリ部のページを指定する論理回路からなることを特徴とする請求項9記載の情報処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2008−90542(P2008−90542A)
【公開日】平成20年4月17日(2008.4.17)
【国際特許分類】
【出願番号】特願2006−269635(P2006−269635)
【出願日】平成18年9月29日(2006.9.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成20年4月17日(2008.4.17)
【国際特許分類】
【出願日】平成18年9月29日(2006.9.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]