(57)【要約】      （修正有）【課題】構造が簡単で設計や検証にかかる期間が短く、複数のタスクを実行するときにバスエラーの原因ではないタスクの保護を実現する。【解決手段】命令フェッチに起因するバス要求をバスインタフェースユニット４に要求し，バスインタフェースユニット４に出力した命令フェッチ要求の内，処理が終わっていない要求を記憶する第１の要求キュー装置８を備える命令フェッチユニット１６と、ロード命令又はストア命令に起因するバス要求をバスインタフェースユニットに要求するロード・ストアユニット３と、命令フェッチユニット１６からの命令をデコードするデコードユニット１と、デコードユニット１からの命令を実行する実行ユニット２と、デコードユニット１，実行ユニット２，ロード・ストアユニット３からの入力信号のいずれか１つでもアクティブになると、出力信号をアクティブにして、命令フェッチユニット１６に入力するオア・ユニット１０とを備える。【選択図】図１
2007018454.tif 000002
【特許請求の範囲】
【請求項１】
バスインタフェースユニット，バス装置を含む外部バスに接続可能なマイクロプロセッサであって、
命令フェッチに起因するバス要求を前記バスインタフェースユニットに要求し、前記バスインタフェースユニットに出力した命令フェッチ要求のうち、処理が終わっていない要求を記憶する第１の要求キュー装置を備える命令フェッチユニットと、
ロード命令またはストア命令に起因するバス要求を前記バスインタフェースユニットに要求するロード・ストアユニットと、
前記命令フェッチユニットからの命令をデコードするデコードユニットと、
前記デコードユニットからの命令を実行する実行ユニットと、
前記デコードユニット，前記実行ユニット，前記ロード・ストアユニットからの入力信号のいずれか１つでもアクティブになると、出力信号をアクティブにして、前記命令フェッチユニットに入力するオア・ユニット
とを備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記命令フェッチユニットは、前記第１の要求キュー装置に存在する要求を再度、前記バスインタフェースユニットに出力し、かつ命令フェッチの再要求を行ったことを記憶する第１のステートリトライ装置を更に備えることを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記デコードユニットは、前記第１のステートリトライ装置のステートリトライの値が“１”の場合、バスエラーが発生すると、前記命令フェッチユニットから出力される命令コードをＮＯＰ命令に変換することを特徴とする請求項２記載のマイクロプロセッサ。
【請求項４】
バスインタフェースユニット，バス装置を含む外部バスに接続可能なマイクロプロセッサであって、
命令フェッチに起因するバス要求を前記バスインタフェースユニットに要求し、バス要求が実行されているタスクを識別するタスク番号を記憶する第２の要求キュー装置を備える命令フェッチユニットと、
ロード命令またはストア命令に起因するバス要求を前記バスインタフェースユニットに要求し、バス要求が実行されているタスクを識別するタスク番号を記憶するメモリを備えるロード・ストアユニットと、
前記命令フェッチユニットからの命令をデコードするデコードユニットと、
前記デコードユニットからの命令を実行する実行ユニットと、
前記バス装置から受信するバスエラー信号がアクティブになると、再処理モードに移行する第２のステートリトライ装置を備え、前記再処理モードにおいて、前記バスインタフェースユニットからのバスインタフェース信号がアクティブの場合、前記命令フェッチユニット，前記ロード・ストアユニットにアクティブ信号を出力するシリアライゼーションコントロールユニット
とを備えることを特徴とするマイクロプロセッサ。
【請求項５】
前記ロード・ストアユニットは、前記メモリに存在する要求を再度、前記バスインタフェースユニットに出力し、かつ前記メモリに存在する要求を再度行ったことを記憶する第３のステートリトライ装置を更に備えることを特徴とする請求項４記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特に、回路規模の小さいバスを使用し、複数のタスクを実行しているときにバスエラーの原因ではないタスクの保護を実現できるマイクロプロセッサに関する。
【背景技術】
【０００２】
近年、マイクロプロセッサの命令は、小規模で単純な回路で実現できるものに限定して実装され、処理の進行を互いに依存のないステージに分割し、処理をステージごとに並列に行うことでプログラムの処理時間の短縮化を図ってきた。 演算命令やロード・ストア命令等はこの様な実装が比較的簡単に行うことができる。一方で、マイクロプロセッサの制御命令の内、幾つかはマイクロプロセッサ全体をロックして行うことが必要であり、処理が複雑となり、処理のステージ分割，パイプラインのステージへの割り当てが困難なものとなる。 
従来はこのような命令を実装するために、敢えて大規模な回路と複雑な制御により、機能を分割してパイプラインのステージに割り当てるか、パイプラインから分離する等の方法を採用してきた。機能を分割してパイプラインのステージに割り当てる場合、回路の複雑さから消費電力の増大や不良回路の混入が問題となる。又、機能を分割してパイプラインから分離する場合、マイクロプロセッサの命令間の連係不十分により、マイクロプロセッサの性能劣化が起こっていた。
【０００３】
また、従来のマイクロプロセッサでは、パイプラインに投入した命令が、その時のパイプラインの状況やマイクロプロセッサ全体の状態で実行できるか否かの判断をする際、その結果を得るためには、そのステージの動作を、判断を開始したステージと同一にする必要があった。これは、仮に実行が不可能であると判別された際に、そのステージの動作をその命令が実行可能になるまで凍結し、その後に実行を再開するからである。
【０００４】
このような実装方法では、実行可能か否かを判断するステージの開始から判断結果が出るまでの時間が、他のステージの実行時間より長くなると、その実行可否判断回路の処理時間がマイクロプロセッサ全体の動作周波数を規定してしまっていた。
【０００５】
近年、複数のマイクロプロセッサをワンチップに集積する要求が高まっており、その場合、実行可否判断回路はより複雑化、低速化する傾向にあり、問題となっている。
【０００６】
マイクロプロセッサに接続されるバスにおいて、バスエラーの扱いには様々な実装が存在する。簡単な実装方法として、バスエラーを意味する，バスエラー信号（ＢＥＣ:BUS_ERROR_CAUSED）だけを設ける方法がある。ここで、バスエラー信号ＢＥＣがアサートされるサイクルには、同期式と非同期式の２つの方式がある。
【０００７】
同期式とは、バスエラー信号ＢＥＣがアサートされる位置がプロトコルで規定されているためにバスエラーの要因がどのバス要求に起因するのかを特定することが可能な方式である。同期式では、バスエラー要因の特定のためのプロトコル規定を守るための回路が増大する。この理由は、一般的にバスエラーは様々な原因やタイミングで発生するために、バスエラーの要因と、その原因となったバス要求の対応関係を記憶する記憶回路が必要となるためである。この記憶回路の増大を避けるために、バスエラーが発生する可能性があるサイクル期間では他のバス要求を受け付けない実装方法がある。しかし、バスの転送能力が低下するので一般的には採用されていない。
【０００８】
一方、非同期式とは、バスエラー信号ＢＥＣに関するプロトコルの規定を緩やかなものとして、バスエラーが発生した場合には、速やかにバスエラー信号ＢＥＣをアサートする方式である。従って、バスエラーを引き起こした要因との関連を処理する等の処理回路が不要となり、実装も簡単である。ただし欠点として、複数の要求を処理可能なバスにおいて、どのバス要求が原因でバスエラーが発生したのかが特定できないという問題点がある。
【０００９】
ここで、転送効率を上げるために複数のバス要求を処理することが可能なバスについて説明する。このような複数の要求を処理可能なバスにおいて非同期式のバスエラーを採用した場合には、バスエラーの要因を特定できないために、バスに投入されている要求をすべて破棄しなければならない。このとき、バスエラーの要因ではなかったバス要求も巻き添え（犠牲）となって破棄される。そこで従来は、犠牲となったバス要求を再処理するために、破棄された要求を再処理する再処理回路をバスに付加する必要があった。
【００１０】
マイクロプロセッサのバス要求は、命令フェッチ系とロード・ストア系の２種類に大別できる。バスエラーなどの要因が発生した場合でも、マイクロプロセッサは可能な限り復帰動作を行う必要がある。従って、命令フェッチ系のバス要求は犠牲となって破棄された場合に再処理される必要がある。
【００１１】
しかし、ロード・ストア系のバス要求に関しては、一つでもバスエラーになった場合には、そのプログラムの実行は保証できなくなる。そこで、そのプログラムの処理をマイクロプロセッサのタスクとして破棄する。従って、ロード・ストア系のバス要因はすべて破棄し、再処理を行う必要がない。
【００１２】
バスに実装されている再転送機構が、命令フェッチ系のバス要求なのか、ロード・ストア系のバス要求なのかを区別することが出来ない場合には、マイクロプロセッサとしては再処理を行う必要がないバス要求も再処理されてしまう。
【００１３】
マイクロプロセッサとしては、こうした無駄な再処理が行われることに起因する処理性能の低下は問題とはならない。しかし、こうした無駄な処理が行われていると、マイクロプロセッサ開発やプログラムの開発時において、原因解析に時間がかかるという問題がある。
【００１４】
同様に、フェッチ要求も破棄してかまわないマイクロプロセッサも可能である。しかしこれはマイクロプロセッサの構造に依存する。一般的には、バスエラーが発生すると「例外処理」を行うが、このとき、「実在する命令」に対してのみ、例外処理を行うマイクロプロセッサも存在する。この場合には、「フェッチ要求」が犠牲となって停止したままになっていると、そもそも、例外処理に入ることができない。従って、フェッチ要求だけは、可能な限り再処理する必要がある。
【００１５】
次に、マイクロプロセッサの命令フェッチ動作でバスエラーが発生した場合、取得したデータは不正な値となる。マイクロプロセッサがこのデータを正常な命令とみなして実行を行うと、データが不正なので、実装されていない命令を実行する可能性がある。このとき、不正な実行を行ってもマイクロプロセッサが停止しない場合には問題にはならない。しかし、不正な命令を実行してもマイクロプロセッサは絶対に停止しない、ということをマイクロプロセッサの設計において検証しなければならない。
【００１６】
こうした検証は普通、非常にコストが高い検証となる。何故ならば、定義されていない命令や禁止されている命令列の組み合わせの実行がすべて問題を起こさないことを検証する必要があるためである。
【００１７】
この問題の対策としては、不正な命令は可能な限り実行しないことであり、従来は、バスエラーが発生した場合に、マイクロプロセッサに到達するデータを０(ゼロ)にするなどの対策が行われている。一般的に命令コード０(ゼロ)は、何もしない命令(ＮＯＰ)として定義された命令であることが多いため、このような対策が行われてきている。この対策の場合、バス又はマイクロプロセッサに接続される途中のどこかでデータの値を０(ゼロ)にする回路を入れる必要がある。
【００１８】
他の対策としては、バスエラーが発生した場合に割込みを発生させる方法がある。不正なデータをコアが実行する前に割込みを発生させれば、マイクロプロセッサは命令を破棄する。例えば、バスエラーが発生した場合に、拒絶できない割込みの１つであるＮＭＩ(Non-Maskable Interrupt)を発生させる方法がある。
【００１９】
しかしこの方法の場合には、マイクロプロセッサにすべての割込みを受け付けない状態を設けることや、割込みが発生しない命令を実装することが出来なくなるという問題点がある。
【００２０】
バスエラー信号受信時、ＣＰＵがバスエラー発生を対応するフラグに表示することによって、ユーザプログラム側でバスアクセスエラー発生時の回避処理を実行可能にするバスアクセスエラー処理方式については、既に開示されている（例えば、特許文献１参照。）。
【００２１】
複数の要求を処理するバスにおいて、１つの要求がバスエラーを発生した場合に、投入されている要求すべてが破棄されて再要求処理も行われないバスがある。こうしたバスにマイクロプロセッサを接続し、命令フェッチに起因するバス要求とロード・ストア命令に起因するバス要求が同時期にバス要求として投入される場合、ロード・ストア命令に起因するバス要求がバスエラーを発生すると命令フェッチに起因するバス要求も破棄されてしまう。また、命令フェッチ要求がバスエラーの原因でもないのに、命令フェッチ要求の再要求処理が行われることはない。
【特許文献１】特許第３１７７７９４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
本発明の目的は、回路規模の小さいバスを使用し、構造が簡単で設計や検証にかかる期間が短くて済み、動作速度の低下を防ぐことができ、複数のタスクを実行しているときにバスエラーの原因ではないタスクの保護を実現できるマイクロプロセッサを提供することにある。
【課題を解決するための手段】
【００２３】
本発明の一態様によれば、（イ）バスインタフェースユニット，バス装置を含む外部バスに接続可能なマイクロプロセッサであって、（ロ）命令フェッチに起因するバス要求をバスインタフェースユニットに要求し、バスインタフェースユニットに出力した命令フェッチ要求のうち、処理が終わっていない要求を記憶する第１の要求キュー装置を備える命令フェッチユニットと、（ハ）ロード命令またはストア命令に起因するバス要求をバスインタフェースユニットに要求するロード・ストアユニットと、（ニ）命令フェッチユニットからの命令をデコードするデコードユニットと、（ホ）デコードユニットからの命令を実行する実行ユニットと、（へ）デコードユニット，実行ユニット，ロード・ストアユニットからの入力信号のいずれか１つでもアクティブになると、出力信号をアクティブにして、命令フェッチユニットに入力するオア・ユニットとを備えるマイクロプロセッサが提供される。
【００２４】
本発明の他の態様によれば、（イ）バスインタフェースユニット，バス装置を含む外部バスに接続可能なマイクロプロセッサであって、（ロ）命令フェッチに起因するバス要求をバスインタフェースユニットに要求し、バス要求が実行されているタスクを識別するタスク番号を記憶する第２の要求キュー装置を備える命令フェッチユニットと、（ハ）ロード命令またはストア命令に起因するバス要求をバスインタフェースユニットに要求し、バス要求が実行されているタスクを識別するタスク番号を記憶するメモリを備えるロード・ストアユニットと、（ニ）命令フェッチユニットからの命令をデコードするデコードユニットと、（ホ）デコードユニットからの命令を実行する実行ユニットと、（へ）バス装置から受信するバスエラー信号がアクティブになると、再処理モードに移行する第２のステートリトライ装置を備え、再処理モードにおいて、バスインタフェースユニットからのバスインタフェース信号がアクティブの場合、命令フェッチユニット，ロード・ストアユニットにアクティブ信号を出力するシリアライゼーションコントロールユニットとを備えるマイクロプロセッサが提供される。
【発明の効果】
【００２５】
本発明のマイクロプロセッサによれば、回路規模の小さいバスを使用し、構造が簡単で設計や検証にかかる期間が短くて済み、動作速度の低下を防ぐことができ、複数のタスクを実行しているときにバスエラーの原因ではないタスクの保護を実現することができる。
【発明を実施するための最良の形態】
【００２６】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであり、各ブロックの平面寸法、各タイミングチャートのタイミング幅、各タスク，命令フォーマット等の平面寸法幅は、現実のものとは異なることに留意すべきである。又、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることはもちろんである。
【００２７】
また、以下に示す実施の形態は、この発明の技術的思想を具体化するための装置や方法を例示するものであって、この発明の技術的思想は、各ブロックの構成部品の配置等を下記のものに特定するものでない。この発明の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００２８】
[第１の実施の形態]
本発明の第１の実施の形態に係るマイクロプロセッサは、図１に示すように、バスインタフェースユニット（ＢＩＵ：Bus Interface Unit）４，バス（ＢＵＳ）装置５を含む外部バス２００に接続可能なマイクロプロセッサ１００であって、命令フェッチに起因するバス要求をバスインタフェースユニット４に要求し、バスインタフェースユニット４に出力した命令フェッチ要求のうち、処理が終わっていない要求を記憶する第１の要求キュー装置８を備える命令フェッチユニット（ＩＦＵ：Instruction Fetch Unit）１６と、ロード命令またはストア命令に起因するバス要求をバスインタフェースユニット４に要求するロード・ストアユニット（ＬＳＵ:Load Store Unit）３と、命令フェッチユニット１６からの命令をデコードするデコードユニット（ＤＣＵ：Decode Unit）１と、デコードユニット１からの命令を実行する実行ユニット（ＥＸＵ：Execution Unit）２と、入力信号の内、デコードユニット１からの信号ＤＣ，実行ユニット２からの信号ＥＸ，ロード・ストアユニット３からの信号ＬＳのいずれか１つでもアクティブになると、出力信号ＳＯをアクティブにして、命令フェッチユニット１６に入力するオア・ユニット（ＯＲＵ:OR Unit）１０とを備える。
【００２９】
或いは又、本発明の第１の実施の形態に係るマイクロプロセッサにおいて、命令フェッチユニット１６は、図１に示すように、第１の要求キュー装置８に存在する要求を再度、バスインタフェースユニット４に出力し、かつ命令フェッチの再要求を行ったことを記憶する第１のステートリトライ装置９を更に備えていても良い。
【００３０】
或いは又、本発明の第１の実施の形態に係るマイクロプロセッサにおいて、デコードユニット１は、図１に示すように、第１のステートリトライ装置９のステートリトライの値が“１”の場合、バスエラーが発生すると、命令フェッチユニット１６から出力される命令コードをＮＯＰ命令に変換する構成を備えていても良い。
【００３１】
本発明の第１の実施の形態において、バス装置５及びバスインタフェースユニット４で構成される部分を外部バス２００と定義する。命令フェッチユニット１６、デコードユニット１、実行ユニット２、ロード・ストアユニット３、オア・ユニット１０で構成される部分をマイクロプロセッサ１００と定義する。
【００３２】
バスエラー信号ＢＥＣは非同期バスエラーとして実装されている。ＢＵＳ装置５はデータ転送を行う装置である。バスエラーが発生するとバスエラー信号ＢＥＣをアクティブにする。
【００３３】
命令フェッチユニット１６は、マイクロプロセッサ１００の命令フェッチに起因するバス要求をバス要求信号ＩＦＳを通じて、バスインタフェースユニット４に要求する。
【００３４】
ロード・ストアユニット３は、マイクロプロセッサ１００のロード命令またはストア命令に起因するバス要求をバス要求信号ＬＳＳを通じて、バスインタフェースユニット４に要求する。
【００３５】
バスインタフェースユニット４は、マイクロプロセッサ１００からのバス要求をバス要求信号ＢＲＳを通じて、ＢＵＳ装置５と送受信するための装置である。バスインタフェースユニット４はマイクロプロセッサ１００からの要求を記憶する処理キュー装置７を備える。バスインタフェースユニット４はバスエラー信号ＢＥＣがアクティブにされると、処理キュー装置７のバス要求を、不定値のデータが読み出されたものとして、終了(terminate)させる。終了とは、バス要求元とのプロトコルを閉じることを意味する。バス要求が読み出し(read)要求であった場合には、不定値のデータを要求元に返してプロトコルを閉じる。
【００３６】
デコードユニット１は、マイクロプロセッサ１００の命令をデコード(decode)する装置である。デコードユニット１に実行すべき命令が存在する場合には、デコード信号ＤＣはアクティブになる。
【００３７】
実行ユニット２は、マイクロプロセッサ１００の命令を実行(execute)する装置である。実行ユニット２に実行すべき命令が存在する場合には、実行信号ＥＸはアクティブになる。
【００３８】
ロード・ストアユニット３は、ロード命令またはストア命令で必要となるバス要求を、バス要求信号ＬＳＳを通じてバスインタフェースユニット４と送受信するための装置である。ロード・ストアユニット３にバスインタフェースユニット４と送受信すべきバス要求が存在する場合には、ロード・ストア信号ＬＳはアクティブになる。
【００３９】
オア・ユニット１０は、デコード信号ＤＣ，実行信号ＥＸ，ロード・ストア信号ＬＳのいずれか１つでもアクティブになると、出力信号ＳＯをアクティブにするＯＲゲートである。出力信号ＳＯがアクティブとは、マイクロプロセッサ１００に実行すべき命令が存在することを意味する。
【００４０】
命令フェッチユニット１６は、マイクロプロセッサ１００の命令フェッチ要求を管理する装置である。命令フェッチユニット１６はマイクロプロセッサ１００が実行する命令を取得するためにバスインタフェースユニット４に命令フェッチ要求を出力する。また、命令フェッチユニット１６は、バスインタフェースユニット４に出力した命令フェッチ要求のうち、要求結果が帰ってきていない(処理が終わっていない)要求を記憶する第１の要求キュー装置８を有する。
【００４１】
又、命令フェッチユニット１６は、要求キューに存在する要求を再度、バスインタフェースユニット４に出力することができる。この出力行為を「命令フェッチの再要求」と呼ぶ。命令フェッチユニット１６は、命令フェッチの再要求を行ったことを記憶するための第１のステートリトライ(STATE_RETRY)装置９を備える。命令フェッチの再要求が行われると、第１のステートリトライ装置９のステートリトライの値に“１”をセットする。
【００４２】
命令フェッチユニット１６は、バスエラー信号ＢＥＣがアクティブにされ、かつステートリトライの値が“０”の場合、かつ又、出力信号ＳＯが非アクティブの場合に、命令フェッチの再要求を実行する。ここで、出力信号ＳＯがアクティブだった場合には、非アクティブになるまで待ってから、命令フェッチの再要求を行う。
【００４３】
デコードユニット１は、第１のステートリトライ装置９のステートリトライの値が“１”の場合、バスエラーが発生すると、命令フェッチユニット１６から出力される命令コードをＮＯＰ命令（何もしない命令）に変換する。
【００４４】
命令フェッチユニット１６は、命令フェッチの再要求がすべて終了すると、ステートリトライの値に“０”をセットして、通常の動作に戻る。
【００４５】
ここで、各装置は独立に動作する。バスエラーが発生していない場合は、命令フェッチユニット１６は、実行すべき命令を次々にフェッチし、デコードユニット１、実行ユニット２、ロード・ストアユニット３が命令を次々に実行することで、マイクロプロセッサ１００として動作する。バスエラーが発生した場合には、再フェッチ動作が行われる。
【００４６】
出力信号ＳＯが存在する意味を次に説明する。再フェッチ要求を行う場合に、デコードユニット１、実行ユニット２、ロード・ストアユニット３に、まだ処理すべき命令が存在している場合がある。このとき、デコードユニット１、実行ユニット２、ロード・ストアユニット３の命令の実行が終わるのを待たずに、再フェッチ要求を実行してしまうと、バスインタフェースユニット４に再フェッチ要求とロード・ストア命令に起因するバス要求が同時に存在する状態になる可能性がある。これでは、再フェッチしている意味がなくなる。なぜならば、再度、ロード・ストア命令でバスエラーが発生すると、再フェッチまでもが、犠牲となってしまい、無限にフェッチができない状態になる可能性があるからである。出力信号ＳＯ は、このような状態を回避するために必要な信号である。
【００４７】
本発明の第１の実施の形態に係るマイクロプロセッサ１００において、バスエラーが発生していない場合の、バスインタフェースユニット４の動作の様子は、図２の動作タイミングチャート図に示す通りである。
【００４８】
図２において、Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３, ｌｏａｄ１, ｌｏａｄ２及びｓｔｏｒｅ１は、バスインタフェースユニット４が処理しているバス要求信号を意味している。Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３は、フェッチ要求キューのＱ１，Ｑ２，Ｑ３のバス要求信号を意味している。ｌｏａｄ１, ｌｏａｄ２及びｓｔｏｒｅ１は、ロード・ストア命令に起因するバス要求信号を意味している。
【００４９】
バス要求信号ＢＲＳは、Ｒｅｑｕｅｓｔ, Ａｄｄｒｅｓｓ， ＷＲＩＴＥｒｅａｄＥｎ, ＷｒｉｔｅＤａｔａ, Ａｃｋ, ＲｅａｄＤａｔａ そして ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤ で構成される信号群である。
【００５０】
Ｒｅｑｕｅｓｔ信号は、バスインタフェースユニット４がバス装置５に対して出力すべき要求があるときにアクティブになる。Ｒｅｑｕｅｓｔ信号がアクティブ(＝“１”)のときに、Ａｄｄｒｅｓｓ, ＷＲＩＴＥｒｅａｄＥｎ 及び ＷｒｉｔｅＤａｔａ は意味のある信号となる。
【００５１】
Ａｄｄｒｅｓｓ信号は、メモリのアドレス信号を意味する。
【００５２】
ＷＲＩＴＥｒｅａｄＥｎ信号は、アクティブ(＝“１”)のときに、書き込み要求信号を意味し、インアクティブ(＝“０”)の場合に読み出し要求信号を意味する。
【００５３】
ＷｒｉｔｅＤａｔａ信号は、書き込み要求時の書き込みデータ信号である。
【００５４】
尚、信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤは、図１の信号ＢＥＣと同じである。
【００５５】
ＲＥＱ、ＷＡＩＴ及びＦＩＮは バスインタフェースユニット４の内部ステートを意味し、バスインタフェースユニット４が処理しているバス要求が、どの処理状態にあるかを示している。 
ＲＥＱは、バス要求を外部バス２００に出力するステートであり、Ｒｅｑｕｅｓｔ信号  をアクティブ(＝１)にするステートである。
【００５６】
ＷＡＩＴは、Ａｃｋ信号がアクティブになるのを待つステートである。
【００５７】
ＦＩＮは、バス要求の終わりを意味するステートである。Ａｃｋ信号がアクティブになると、このステートになる。
【００５８】
図２では、バスエラーが発生していない。従ってバス要求信号Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３,ｌｏａｄ１,ｌｏａｄ２及びｓｔｏｒｅ１は連続して処理されている。
【００５９】
本発明の第１の実施の形態に係るマイクロプロセッサ１００において、図２のクロックサイクルＣ３でバスエラーが発生した場合の、バスインタフェースユニット４の動作の様子は、図３の動作タイミングチャート図に示す通りである。
【００６０】
図３のクロックサイクルＣ３において、バスインタフェースユニット４は、バス要求信号ｌｏａｄ１，Ｉｎｓｔ_Ｑ２及びｌｏａｄ２の３つの要求を処理している。ここで、バスエラー信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤは、非同期バスエラーとして実装されている。従って、クロックサイクルＣ３において、バスインタフェースユニット４は処理中の３つの要求を破棄する。
【００６１】
その破棄後、クロックサイクルＣ５から、バス要求信号Ｉｎｓｔ_Ｑ２の処理を開始する。
【００６２】
図３のクロックサイクルＣ７において、もしバスエラー信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤがアクティブになっていた場合には、再処理においてバスエラーが発生したことになる。この場合、先に説明したように、デコードユニット１は取得された命令を何もしない命令ＮＯＰに変換する。
【００６３】
デコードユニット１は命令を無効化することで、命令をＮＯＰ命令に変換する。
【００６４】
本発明の第１の実施の形態に係るマイクロプロセッサにおいて、デコードユニット１及び命令フェッチユニット１６の内部の模式的ブロック構成は、図４に示すように表される。
【００６５】
命令フェッチユニット１６内には、バスエラー検出回路２１が配置されている。
【００６６】
バスエラー検出回路２１は、命令フェッチの再要求においてバスエラーが発生したことを検出する回路である。バスエラーを検出すると、信号Ａ０３をアクティブ(＝“１”)にする。
【００６７】
命令フェッチユニット１６から、デコードユニット１に対して、命令コード信号Ａ００，Ａ０１，Ａ０２が出力される。
【００６８】
信号Ａ００は、デコードユニット１内に配置される命令デコーダ２０に入力される。信号Ａ０１及びＡ０２は、デコードユニット１内に配置される片側反転付きＡＮＤゲート２８に入力される。信号Ａ０１は、命令フェッチユニット１６から出力される命令コードが有効か否かを意味する信号であり、有効の場合には、“１”（ｖａｌｉｄ）、無効の場合には、“０”（ｉｎｖａｌｉｄ）となる。
【００６９】
命令デコーダ２０は、命令をデコードする回路の一つである。信号Ａ０２は、命令をデコードした結果、その命令コードが有効か否かを意味する信号であり、有効の場合には、“１”（ｖａｌｉｄ）、無効の場合には、“０”（ｉｎｖａｌｉｄ）となる。信号Ａ０２及び片側反転付きＡＮＤゲート２８の出力信号は、デコードユニット１内に配置される片側反転付きＡＮＤゲート２７に入力される。
【００７０】
信号Ａ０４は、デコードされた命令を実行するかどうかを示す信号である。信号Ａ０４がアクティブ(＝“１”)の場合に、デコードユニット１に接続される実行ユニット２は、命令を実行する。
【００７１】
信号Ａ０３がアクティブになると、信号Ａ０４はインアクティブ(＝“０”)となる。従って、デコードユニット１に接続される実行ユニット２は、命令の実行を行わない。
【００７２】
図４に示すデコードユニット１の構成により、信号Ａ００を“０(ゼロ)”に変換する回路を入れることなく、命令をＮＯＰ命令と等価な動作に置き換えることが可能となる。
【００７３】
本発明の第１の実施の形態に係るマイクロプロセッサによれば、バスエラー発生時に再度バス要求出力を行い、回復できない場合は命令を ＮＯＰ命令に変換して実行する。こうしたバスを使用する場合に、マイクロプロセッサ自身が再フェッチ要求を行うことができる。
【００７４】
又、本発明の第１の実施の形態に係るマイクロプロセッサによれば、バスエラー要因を特定できない回路規模の小さいバスを使用し、複数のタスクを実行中に、バスエラーを発生したタスクで不定な命令を実行して処理が停止し、他のタスク又はＯＳへの実行切替えができなくなり、マイクロプロセッサで実行中のタスク全体が停止することを防ぐために、マイクロプロセッサが再フェッチ要求を行うことができる。
【００７５】
又、本発明の第１の実施の形態に係るマイクロプロセッサにおいては、バスエラー発生時に再度バス要求出力を行い、回復できない場合は命令をＮＯＰ命令に変換して実行することで、再フェッチの失敗に起因してマイクロプロセッサが不定な命令を実行し、タスク全体が停止することを防止することができる。
【００７６】
また、本発明の第１の実施の形態に係るマイクロプロセッサにおいては、再フェッチを行ってもバスエラーが発生する場合には、命令が無効であるものとしてＮＯＰ命令に変換して実行することができる。
【００７７】
バスエラーを検出した場合に、バスに要求中のバス要求のうち、命令フェッチに起因するバス要求のみを再度出力する機能を有するマイクロプロセッサによれば、バスエラーが発生した場合に、処理中のバス要求をすべて破棄し、再要求処理を行わないバスでもマイクロプロセッサのバスとして使用することができる。例えば、非同期式のバスエラーが実装された、再要求処理に必要な回路を有さないバスを使用することができる。こうしたバスは回路規模が小さく、構造が簡単になるために、設計や検証にかかる期間が短くて済む。
【００７８】
又、再度出力した要求がバスエラーになった場合に、取得された命令コードをＮＯＰ命令に変換する機能を有するマイクロプロセッサによれば、バスエラーが発生した場合に、転送データの値が不定値となるバスをマイクロプロセッサのバスとして使用することができる。又、バスエラーが発生した場合に、転送データを固定値、例えば ０(ゼロ)にする必要がない。
【００７９】
又、ＮＯＰ命令に変換する回路として、命令デコード前に、命令コードをＮＯＰ命令の命令コードに変換する回路ではなく、命令デコード結果を無効にすることでＮＯＰ命令の動作と等価な動作に置き換える回路を有するマイクロプロセッサによれば、不正な命令コードをＮＯＰ命令へ変換する方法として、命令のデコード処理前に、命令コードそのものに変換する方式は簡単に実装できる。しかし、一般的にマイクロプロセッサの命令デコード回路は複雑で、特にデコード回路の前に回路を入れることは、マイクロプロセッサの動作速度の低下を招く原因となることが多い。そこで、命令デコード後に、命令をＮＯＰ命令と等価に動作させる回路を入れることでマイクロプロセッサの動作速度の低下を防ぐことができる。
【００８０】
本発明の第１の実施の形態に係るマイクロプロセッサによれば、回路規模の小さいバスを使用し、構造が簡単になり、設計や検証にかかる期間が短くて済み、動作速度の低下を防ぐことができ、又、複数のタスクを実行しているときにバスエラーの原因ではないタスクの保護を実現することができる。
【００８１】
[第２の実施の形態]
本発明の第２の実施の形態に係るマイクロプロセッサは、図５に示すように、バスインタフェースユニット４，バス装置５を含む外部バス２００に接続可能なマイクロプロセッサ１００であって、命令フェッチに起因するバス要求をバスインタフェースユニット４に要求し、バス要求が実行されているタスクを識別するタスク番号を記憶する第２の要求キュー装置５８を備える命令フェッチユニット１６と、ロード命令またはストア命令に起因するバス要求をバスインタフェースユニット４に要求し、バス要求が実行されているタスクを識別するタスク番号を記憶するメモリ６８を備えるロード・ストアユニット３と、命令フェッチユニット１６からの命令をデコードするデコードユニット１と、デコードユニット１からの命令を実行する実行ユニット２と、バス装置５から受信するバスエラー信号ＢＥＣがアクティブになると、再処理モードに移行する第２のステートリトライ装置７４を備え、再処理モードにおいて、バスインタフェースユニット４からのバスインタフェース信号ＢＩＳがアクティブの場合、命令フェッチユニット１６にアクティブなシリアライゼーションフェッチ信号ＳＦＳ，ロード・ストアユニット３にアクティブなシリアライゼーションロード・ストア信号ＳＬＳを出力する，シリアライゼーションコントロールユニット（ＳＣＵ：Serialization Control Unit）７１とを備える。
【００８２】
或いは又、本発明の第２の実施の形態に係るマイクロプロセッサにおいて、ロード・ストアユニットは、図５に示すように、メモリ６８に存在する要求を再度、バスインタフェースユニット４に出力し、かつメモリ６８に存在する要求を再度行ったことを記憶する第３のステートリトライ装置７３を更に備えていても良い。
【００８３】
本発明の第２の実施の形態においては、バス装置５及びバスインタフェースユニット４で構成される部分を外部バス２００と定義し、命令フェッチユニット１６，デコードユニット１，実行ユニット２，ロード・ストアユニット３及びシリアライゼ−ションコントロールユニット７１で構成される部分をマイクロプロセッサ１００と定義する。
【００８４】
バスエラー信号ＢＥＣは非同期バスエラーとして実装されている。ＢＵＳ装置５はデータ転送を行う装置である。バスエラーが発生するとバスエラー信号ＢＥＣをアクティブにする。
【００８５】
命令フェッチユニット１６は、マイクロプロセッサ１００の命令フェッチに起因するバス要求をバス要求信号ＩＦＳを通じて、バスインタフェースユニット４に要求する。
【００８６】
ロード・ストアユニット３は、マイクロプロセッサ１００のロード命令またはストア命令に起因するバス要求をバス要求信号ＬＳＳを通じて、バスインタフェースユニット４に要求する。
【００８７】
バスインタフェースユニット４は、マイクロプロセッサ１００からのバス要求をバス要求信号ＢＲＳを通じて、ＢＵＳ装置５と送受信するための装置である。バスインタフェースユニット４はマイクロプロセッサ１００からの要求を記憶する処理キュー装置５７を備える。バスインタフェースユニット４はバスエラー信号ＢＥＣがアクティブにされると、処理キュー装置５７のバス要求を、不定値のデータが読み出されたものとして、終了させる。バス要求が読み出し要求であった場合には、不定値のデータを要求元に返してプロトコルを閉じる。
【００８８】
デコードユニット１は、マイクロプロセッサ１００の命令をデコードする装置である。
【００８９】
実行ユニット２は、マイクロプロセッサ１００の命令を実行する装置である。
【００９０】
ロード・ストアユニット３は、ロード命令またはストア命令で必要となるバス要求を、バス要求信号ＬＳＳを通じてバスインタフェースユニット４と送受信するための装置である。ロード・ストアユニット３にバスインタフェースユニット４と送受信すべきバス要求が存在する場合には、ロード・ストア信号ＬＳＡはアクティブになる。
【００９１】
命令フェッチユニット１６は、マイクロプロセッサ１００の命令フェッチ要求を管理する装置である。命令フェッチユニット１６はマイクロプロセッサ１００が実行する命令を取得するためにバスインタフェースユニット４に命令フェッチ要求を出力する。また、命令フェッチユニット１６は、バスインタフェースユニット４に出力した命令フェッチ要求のうち、要求結果が帰ってきていない(処理が終わっていない)要求を記憶する第２の要求キュー装置５８を有する。命令フェッチ信号ＩＦＡは、命令フェッチユニット１６の再処理が終了するとアクティブになる信号である。
【００９２】
命令フェッチユニット１６は、要求キューに存在する要求を再度、バスインタフェースユニット４に出力する，命令フェッチの再要求を実行することができる。命令フェッチユニット１６は、命令フェッチの再要求を行ったことを記憶するためのステートリトライ(STATE_RETRY0)装置５９を備える。命令フェッチの再要求が行われると ステートリトライ装置５９のステートリトライ（STATE_RETRY）に“１”をセットする。
【００９３】
命令フェッチユニット１６は、バスエラー信号ＢＥＣがアクティブにされ、かつステートリトライの値が“０”の場合、命令フェッチの再要求を実行する。
【００９４】
デコードユニット１は、ステートリトライ装置５９のステートリトライの値が“１”の場合、バスエラーが発生すると、命令フェッチユニット１６から出力される命令コードをＮＯＰ命令（何もしない命令）に変換する。
【００９５】
命令フェッチユニット１６は、命令フェッチの再要求がすべて終了すると、ステートリトライ(STATE_RETRY)の値に“０”をセットして、通常の動作に戻る。
【００９６】
ここで、各装置は独立に動作する。バスエラーが発生していない場合は、命令フェッチユニット１６は、実行すべき命令を次々にフェッチし、デコードユニット１、実行ユニット２、ロード・ストアユニット３が命令を次々に実行することで、マイクロプロセッサ１００として動作する。バスエラーが発生した場合には、再フェッチ動作が行われる。
【００９７】
命令フェッチユニット１６内の第２の要求キュー装置５８は、バス要求がマイクロプロセッサ１００で実行されているどのタスクのものであるのかを識別するためのタスク番号を、対応するバス要求と同時に記憶できるような装置として拡張されている。
【００９８】
ロード命令・ストア命令に起因するバス要求と、そのバス要求がどのタスクのものであるかを識別するためのタスク番号を、対応するバス要求と同時に記憶できるようなメモリ６８をロード・ストアユニット３に配置する。
【００９９】
本発明の第２の実施の形態に係るマイクロプロセッサ１００において、命令フェッチユニット１６に配置する第２の要求キュー装置５８に記憶されるバス要求の様子は、図６に示す通りである。図６（ａ）は、キュー番号(Ｑｕｅ Ｎｏ.) の降順に行われるバスインタフェースユニットへのバス要求の模式的構成図、図６（ｂ）は、マイクロプロセッサが実行中のタスクＴａｓｋ０，Ｔａｓｋ１, Ｔａｓｋ２と、タスクを識別するための番号と対応して記憶される各タスクの命令フェッチに必要なバス要求ｆｅｔｃｈ０,ｆｅｔｃｈ１,ｆｅｔｃｈ２，・・・の模式的構成図を示す。
【０１００】
マイクロプロセッサ１００が実行中のタスクはＴａｓｋ０，Ｔａｓｋ１, Ｔａｓｋ２の３つが存在するものとする。このとき、図６（ｂ）に示すように、各タスクの命令フェッチに必要なバス要求ｆｅｔｃｈ０,ｆｅｔｃｈ１,ｆｅｔｃｈ２，・・・がタスクを識別するための番号と対応して記憶される。記憶できるバス要求は７個である。バスインタフェースユニット４へのバス要求は、図６（ａ）に示すように、キュー番号の降順に行われる。
【０１０１】
同様に、本発明の第２の実施の形態に係るマイクロプロセッサ１００において、ロード・ストアユニット３に配置するメモリ６８に記憶されるバス要求の様子は、図７に示す通りである。図７（ａ）は、キュー番号の降順に行われるバスインタフェースユニットへのバス要求の模式的構成図、図７（ｂ）は、マイクロプロセッサが実行中のタスクＴａｓｋ０，Ｔａｓｋ１, Ｔａｓｋ２と、タスクを識別する番号と対応して記憶される各タスクで実行されるロード命令、ストア命令に起因するバス要求ｒｅａｄ０,ｒｅａｄ１・・・又はｗｒｉｔｅ０,ｗｒｉｔｅ１,・・・の模式的構成図を示す。
【０１０２】
各タスクで実行されるロード命令、ストア命令に起因するバス要求ｒｅａｄ０,ｒｅａｄ１・・・又はｗｒｉｔｅ０,ｗｒｉｔｅ１,・・・のバス要求がタスクを識別する番号と対応してメモリ６８ に記憶される。記憶できる要求の個数は７個である。バスインタフェースユニット４へのバス要求はキュー番号の降順に行われる。
【０１０３】
本発明の第２の実施の形態に係るマイクロプロセッサ１００においては、図５に示すように、第１の実施の形態に比較して、シリアライゼーションコントロールユニット７１が追加され、シリアライゼーションフェッチ信号ＳＦＳ, シリアライゼーションロード・ストア信号ＳＬＳ及びバスインタフェース信号ＢＩＳが追加されている。又、シリアライゼーションコントロールユニット７１の作用により、「バス要求の単一要求の連続への変換」が実行される。
【０１０４】
バスインタフェースユニット４がバス要求を処理中の場合には、バスインタフェース信号ＢＩＳがアクティブにされる。
【０１０５】
シリアライゼーションコントロールユニット７１は、バスエラー信号ＢＥＣがアクティブになると、第２のステートリトライ（STATE_RETRY2）装置７４に“１”をセットして再処理モードに移行する。再処理モードでは、以下の動作を実行する。
【０１０６】
バスインタフェース信号ＢＩＳがアクティブの場合、シリアライゼーションフェッチ信号ＳＦＳ, シリアライゼーションロード・ストア信号ＳＬＳはアクティブとする。バスインタフェース信号ＢＩＳが非アクティブの場合には、シリアライゼーションフェッチ信号ＳＦＳ又はシリアライゼーションロード・ストア信号ＳＬＳのどちらか片方だけを非アクティブとする。このとき、最後に非アクティブであった方とは別の信号が非アクティブとなる。従って、命令フェッチユニット１６からのバス要求とロード・ストアユニット３からのバス要求は、交互にバスインタフェースユニット４で処理される。
【０１０７】
シリアライゼーションコントロールユニット７１は、再処理モードでない場合には、シリアライゼーションフェッチ信号ＳＦＳ, シリアライゼーションロード・ストア信号ＳＬＳは常に非アクティブである。
【０１０８】
命令フェッチユニット１６は、シリアライゼーションフェッチ信号ＳＦＳがアクティブの場合には、バスインタフェースユニット４にバス要求を出力しない。
【０１０９】
ロード・ストアユニット３は、シリアライゼーションロード・ストア信号ＳＬＳがアクティブの場合は、バスインタフェースユニット４にバス要求を出力しない。
【０１１０】
従って、再処理モードの場合には、バスインタフェースユニット４にはバス要求が１つずつ投入される。この結果、再処理モードにおいてバスエラーが発生しても、バスエラーを発生させたバス要求を特定することができる。要するに、バスエラーが非同期方式の場合に、複数のバス要求が投入されていると、バスエラーの要因となったバス要求を特定できないが、バス要求を１個づつ処理すれば、バスエラーの要因を特定可能となる。
【０１１１】
命令フェッチユニット１６は再処理を開始すると、ステートリトライ(STATE_RETRY0)装置５９に“１”をセットする。再処理がすべて終わると、“０”をセットする。
【０１１２】
ロード・ストアユニット３はバスエラー信号ＢＥＣがアクティブになると、第３のステートリトライ(STATE_RETRY1)装置７３に“１”をセットして再処理を開始する。
【０１１３】
なお、本発明の第２の実施の形態に係るマイクロプロセッサ１００においては、図５に示すように、第１の実施の形態には存在したＯＲユニット１０が存在しない。従って、命令フェッチユニット１６はバスエラー信号ＢＥＣがアクティブになると、直ちに再処理を開始する。
【０１１４】
バスエラーが発生し、再処理モードである場合にバスエラーが発生した場合、そのバスエラーが命令フェッチユニット１６から出力されるバス要求（命令フェッチに起因するバス要求）であった場合には、そのバス要求のタスク番号ｎと同じタスク番号のバス要求をロード・ストアユニット３の内部に配置されたメモリ６８から削除する。削除できる理由は、１つでもバスエラーが発生していたら、そのタスクの実行はもはや、保証できないので削除しても問題がないためである。
【０１１５】
また、再処理モードである場合にバスエラーが発生した場合、そのバスエラーがロード・ストアユニット３から出力されるバス要求 (ロード命令またはストア命令に起因するバス要求)であった場合には、そのバス要求のタスク番号ｎと同じタスク番号のバス要求をロード・ストアユニット３内部に配置されたメモリ６８から削除する。
【０１１６】
再処理すべきバス要求がなくなったら、再処理モードから通常の動作モードに戻る。命令フェッチ信号ＩＦＡは、命令フェッチユニット１６の再処理が終了するとアクティブになる信号である。ロード・ストア信号ＬＳＡ は、ロード・ストアユニット３の再処理が終了するとアクティブになる信号である。
【０１１７】
なお、命令フェッチ信号ＩＦＡ，ロード・ストア信号ＬＳＡが両方アクティブになってから、命令フェッチユニット１６は通常の動作を開始する。尚、シリアライゼーションコントロールユニット７１内に配置される第２のステートリトライ（STATE_RETRY2）装置７４はマイクロプロセッサ１００の一部を構成している。
【０１１８】
同じタスク番号のバス要求を削除された場合について、図６、図７の各バス要求が、どのような順番でバスインタフェースユニットに出力されるかを、図８及び図９に示す。
【０１１９】
命令フェッチユニット内に配置されるの第２の要求キュー装置５８及びロード・ストアユニット３内に配置されるメモリ６８がそれぞれ、図６，図７に示す要求を有している場合について、バスインタフェースユニット５７の処理内容及びバス要求信号ＢＲＳの動作を図８に示す。
【０１２０】
図８において、Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２,… 及び ＬｄＳｔ_Ｑ１,ＬｄＳｔ_Ｑ２,…はバスインタフェースユニッ トが処理しているバス要求を意味している。
【０１２１】
Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２,…はそれぞれ、フェッチ要求キューの Ｑ１,Ｑ２,Ｑ３のバス要求を意味している。
【０１２２】
ＬｄＳｔ_Ｑ１,ＬｄＳｔ_Ｑ２,…はそれぞれ、ロード・ストア要求キューのＱ１,Ｑ２…のバス要求を意味している。
【０１２３】
信号Ｒｅｑｕｅｓｔ, Ａｄｄｒｅｓｓ, ＷＲＩＴＥｒｅａｄＥｎ, ＷｒｉｔｅＤａｔａ, Ａｃｋ, ＲｅａｄＤａｔａ及びＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤ は、バスインタフェースユニット４がバス装置５と要求を送受信する信号である。信号Ｒｅｑｕｅｓｔは、バスインタフェースユニット４がバス装置５に対して出力すべき要求があるときにアクティブになる。信号Ｒｅｑｕｅｓｔ がアクティブ(＝“１”)のときに、Ａｄｄｒｅｓｓ, ＷＲＩＴＥｒｅａｄＥｎ及びＷｒｉｔｅＤａｔａは意味のある信号である。信号Ａｄｄｒｅｓｓはメモリのアドレスを意味する。信号ＷＲＩＴＥｒｅａｄＥｎ はアクティブ(＝“１”)のときに、書き込み要求を意味し、インアクティブ(＝“０”)の場合に読み出し要求を意味する。信号ＷｒｉｔｅＤａｔａは書き込み要求の場合の、書き込みデータを意味する。信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤ は図５の信号ＢＥＣと同じである。
【０１２４】
ＲＥＱ，ＷＡＩＴ及びＦＩＮは、バスインタフェースユニット４が処理しているバス要求が、どの処理ステートにあるかを示す。ＲＥＱは、バス要求を外部バス２００に出力するステートを意味する。信号Ｒｅｑｕｅｓｔをアクティブにすることで、外部バス２００への要求出力を開始する。要求は外部バス２００からの信号Ａｃｋで終わる。
【０１２５】
ＷＡＩＴは、信号Ａｃｋ がアクティブになるまでの状態を意味する。ＦＩＮは、信号Ａｃｋがアクティブになってバス要求が終了したことを意味する。
【０１２６】
本発明の第２の実施の形態に係るマイクロプロセッサ１００において、バスエラーが発生していない場合の、バスインタフェースユニット４の動作の様子は、図８の動作タイミングチャート図に示す通りである。
【０１２７】
図８において、Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３, ＬｄＳｔ_Ｑ１, ＬｄＳｔ_Ｑ２及びＬｄＳｔ_Ｑ３は、バスインタフェースユニット４が処理しているバス要求信号を意味している。Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３は、フェッチ要求キューのＱ１，Ｑ２，Ｑ３のバス要求信号を意味している。ＬｄＳｔ_Ｑ１, ＬｄＳｔ_Ｑ２及びＬｄＳｔ_Ｑ３は、ロード・ストア命令に起因するバス要求信号を意味している。
【０１２８】
バス要求信号ＢＲＳは、Ｒｅｑｕｅｓｔ, Ａｄｄｒｅｓｓ， ＷＲＩＴＥｒｅａｄＥｎ, ＷｒｉｔｅＤａｔａ, Ａｃｋ, ＲｅａｄＤａｔａ そして ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤ で構成される信号群である。
【０１２９】
Ｒｅｑｕｅｓｔ信号は、バスインタフェースユニット４がバス装置５に対して出力すべき要求があるときにアクティブになる。Ｒｅｑｕｅｓｔ信号がアクティブ(＝１)のときに、Ａｄｄｒｅｓｓ, ＷＲＩＴＥｒｅａｄＥｎ 及び ＷｒｉｔｅＤａｔａ は意味のある信号となる。
【０１３０】
Ａｄｄｒｅｓｓ信号は、メモリのアドレス信号を意味する。
【０１３１】
ＷＲＩＴＥｒｅａｄＥｎ信号は、アクティブ(＝“１”)のときに、書き込み要求信号を意味し、インアクティブ(＝“０”)の場合に読み出し要求信号を意味する。
【０１３２】
ＷｒｉｔｅＤａｔａ信号は、書き込み要求時の書き込みデータ信号である。
【０１３３】
信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤは、図５のＢＥＣと同じである。
【０１３４】
ＲＥＱ、ＷＡＩＴ及びＦＩＮは バスインタフェースユニット４の内部ステートを意味し、バスインタフェースユニット４が処理しているバス要求が、どの処理状態にあるかを示している。 
ＲＥＱは、バス要求を外部バス２００に出力するステートであり、Ｒｅｑｕｅｓｔ信号  をアクティブ(＝“１”)にするステートである。
【０１３５】
ＷＡＩＴは、Ａｃｋ信号がアクティブになるのを待つステートである。
【０１３６】
ＦＩＮは、バス要求の終わりを意味するステートである。Ａｃｋ信号がアクティブになると、このステートになる。
【０１３７】
図８では、バスエラーが発生していない。従ってバス要求信号Ｉｎｓｔ_Ｑ１, Ｉｎｓｔ_Ｑ２, Ｉｎｓｔ_Ｑ３, ＬｄＳｔ_Ｑ１, ＬｄＳｔ_Ｑ２及びＬｄＳｔ_Ｑ３は連続して処理されている。
【０１３８】
本発明の第２の実施の形態に係るマイクロプロセッサ１００において、図８のクロックサイクルＣ３でバスエラーが発生した場合の、バスインタフェースユニット４の動作の様子は、図９の動作タイミングチャート図に示す通りである。
【０１３９】
クロックサイクルＣ３において、バスエラー信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤがアサートされ、バスエラーが発生している。クロックサイクルＣ３において、バスインタフェースユニット４は、 ＬｄＳｔ_Ｑ１，Ｉｎｓｔ_Ｑ２，ＬｄＳｔ_Ｑ２の３つの要求を処理している。ここで、バスエラー信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤは非同期バスエラーとして実装されている。従って、クロックサイクルＣ３において、バスインタフェースユニット４は処理中の３つの要求を破棄する。
【０１４０】
この破棄後、バスインタフェースユニット４は先に説明した手順に従って、クロックサイクルＣ７からバス要求を再処理する。再処理が行われている期間では、バスインタフェースユニット４への要求出力は１つずつ行われる。1 つ１つ処理することで、バスエラーの原因を特定することができる。
【０１４１】
まず、クロックサイクルＣ７において、破棄されたバス要求の内、もっとも古い要求である ＬｄＳｔ_Ｑ１が出力される。その後、クロックサイクルＣ９において、バスエラー信号ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤがアサートされる。従って、クロックサイクルＣ３で発生したバスエラーは、バス要求ＬｄＳｔ_Ｑ１が原因であったことがわかる。図７を参照すると、Ｑ１のバス要求は、Ｔａｓｋ  Ｎｏ．２のバス要求である。そこで、ロード・ストアユニット３は、図７に示すキュー番号Ｑ１，Ｑ５，Ｑ６，Ｑ７を要求キューから削除する動作を行う。
【０１４２】
本発明の第２の実施の形態に係るマイクロプロセッサによれば、バスエラー発生時に再度バス要求出力を行い、回復できない場合は命令を ＮＯＰ命令に変換して実行する。こうしたバスを使用する場合に、マイクロプロセッサ自身が再フェッチ要求を行うことができる。
【０１４３】
又、本発明の第２の実施の形態に係るマイクロプロセッサにおいては、回路規模の小さいバスを使用し、複数のタスクを実行中に、バスエラーを発生したタスクの犠牲となって他のタスクの実行が破壊されることを回避するために、バスエラーが発生すると、一時的に非同期バスエラー方式のバスを同期バスエラー方式として使用する動作を行うことができる。
【０１４４】
また、本発明の第２の実施の形態に係るマイクロプロセッサにおいては、再フェッチを行ってもバスエラーが発生する場合には、命令が無効であるものとしてＮＯＰ命令に変換して実行することができる。
【０１４５】
バスエラーを検出した場合に、バスに要求中のバス要求のうち、命令フェッチに起因するバス要求のみを再度出力する機能を有するマイクロプロセッサによれば、バスエラーが発生した場合に、処理中のバス要求をすべて破棄し、再要求処理を行わないバスでもマイクロプロセッサのバスとして使用することができる。例えば、非同期式のバスエラーが実装された、再要求処理に必要な回路を有さないバスを使用することができる。こうしたバスは回路規模が小さく、構造が簡単になるために、設計や検証にかかる期間が短くて済む。
【０１４６】
又、再度出力した要求がバスエラーになった場合に、取得された命令コードをＮＯＰ命令に変換する機能を有するマイクロプロセッサによれば、バスエラーが発生した場合に、転送データの値が不定値となるバスをマイクロプロセッサのバスとして使用することができる。又、バスエラーが発生した場合に、転送データを固定値、例えば ０(ゼロ)にする必要がない。
【０１４７】
又、ＮＯＰ命令に変換する回路として、命令デコード前に、命令コードをＮＯＰ命令の命令コードに変換する回路ではなく、命令デコード結果を無効にすることでＮＯＰ命令の動作と等価な動作に置き換える回路を有するマイクロプロセッサによれば、不正な命令コードをＮＯＰ命令へ変換する方法として、命令のデコード処理前に、命令コードそのものに変換する方式は簡単に実装できる。しかし、一般的にマイクロプロセッサの命令デコード回路は複雑で、特にデコード回路の前に回路を入れることは、マイクロプロセッサの動作速度の低下を招く原因となることが多い。そこで、命令デコード後に、命令をＮＯＰ命令と等価に動作させる回路を入れることでマイクロプロセッサの動作速度の低下を防ぐことができる。
【０１４８】
又、本発明の第２の実施の形態に係るマイクロプロセッサにおいては、バスエラーを検出した場合にバスに要求中のバス要求を再度出力するための機能を有し、再度出力しているときに、前回のバス要求の処理が終わるまで、次のバス要求を出力しない機能を有するため、バスエラーの要因を特定することで、タスク保護を実現することができる。
【０１４９】
又、本発明の第２の実施の形態に係るマイクロプロセッサにおいては、バスに要求中のバス要求と対応するタスク番号を記憶する機能を有し、バス要求を再度出力しているときにバスエラーが発生すると、そのバスエラーの要因となったバス要求のタスク番号と同じタスク番号を有するバス要求のうち、タスクの実行上不要なバス要求を記憶から削除する機能を有する。破棄可能なタスクに関しては保護する必要がないので、そのタスクに起因するバス要求を再処理の記憶から削除することで、バスエラーが発生した場合の処理速度を上げることができる。
【０１５０】
本発明の第２の実施の形態に係るマイクロプロセッサによれば、回路規模の小さいバスを使用し、構造が簡単になり、設計や検証にかかる期間が短くて済み、動作速度の低下を防ぐことができ、又、複数のタスクを実行しているときにバスエラーの原因ではないタスクの保護を実現することができる。
【０１５１】
[その他の実施の形態]
上記のように、本発明は第１乃至第２の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
【０１５２】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。したがって、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【０１５３】
【図１】本発明の第１の実施の形態に係るマイクロプロセッサの模式的ブロック構成図。
【図２】本発明の第１の実施の形態に係るマイクロプロセッサにおいて、バスエラーが発生していない場合の、バスインタフェースユニットの動作タイミングチャート図。
【図３】本発明の第１の実施の形態に係るマイクロプロセッサにおいて、図２のクロックサイクルＣ３でバスエラーが発生した場合の、バスインタフェースユニットの動作タイミングチャート図。
【図４】本発明の第１の実施の形態に係るマイクロプロセッサにおいて、デコードユニット１及び命令フェッチユニット１６の内部の模式的ブロック構成図。
【図５】本発明の第２の実施の形態に係るマイクロプロセッサの模式的ブロック構成図。
【図６】本発明の第２の実施の形態に係るマイクロプロセッサにおいて、命令フェッチユニットの要求キュー装置に記憶されるバス要求の様子を示す図であって、（ａ）キュー番号 の降順に行われるバスインタフェースユニットへのバス要求の模式的構成図、（ｂ）マイクロプロセッサが実行中のタスクＴａｓｋ０，Ｔａｓｋ１, Ｔａｓｋ２と、タスクを識別するための番号と対応して記憶される各タスクの命令フェッチに必要なバス要求ｆｅｔｃｈ０,ｆｅｔｃｈ１,ｆｅｔｃｈ２，・・・の模式的構成図。
【図７】本発明の第２の実施の形態に係るマイクロプロセッサにおいて、ロード・ストアユニットに配置するメモリに記憶されるバス要求の様子を示す図であって、（ａ）は、キュー番号の降順に行われるバスインタフェースユニットへのバス要求の模式的構成図、（ｂ）は、マイクロプロセッサが実行中のタスクＴａｓｋ０，Ｔａｓｋ１, Ｔａｓｋ２と、タスクを識別する番号と対応して記憶される各タスクで実行されるロード命令、ストア命令に起因するバス要求ｒｅａｄ０,ｒｅａｄ１・・・又はｗｒｉｔｅ０,ｗｒｉｔｅ１,・・・の模式的構成図。
【図８】本発明の第２の実施の形態に係るマイクロプロセッサにおいて、バスエラーが発生していない場合の、バスインタフェースユニットの動作タイミングチャート図。
【図９】本発明の第２の実施の形態に係るマイクロプロセッサにおいて、図８のクロックサイクルＣ３でバスエラーが発生した場合の、バスインタフェースユニットの動作タイミングチャート図。
【符号の説明】
【０１５４】
１…デコードユニット（ＤＣＵ）
２…実行ユニット（ＥＸＵ）
３…ロード・ストアユニット（ＬＳＵ）
４…バスインタフェースユニット（ＢＩＵ）
５…ＢＵＳ装置
７，５７…処理キュー装置
８…第１の要求キュー装置
５８…第２の要求キュー装置
９…第１のステートリトライ装置
１０…ＯＲＵ（ＯＲゲート）
１６…命令フェッチユニット（ＩＦＵ）
２０…命令デコーダ
２１…バスエラー検出回路
２７，２８…片側反転付きＡＮＤゲート
５９…ステートリトライ(STATE_RETRY0)装置
６８…メモリ
７１…シリアライゼーションコントロールユニット（ＳＣＵ）
７３…第３のステートリトライ(STATE_RETRY1)装置
７４…第２のステートリトライ(STATE_RETRY2)装置
１００…マイクロプロセッサ
２００…外部バス
ＩＦＳ，ＬＳＳ，ＢＲＳ…バス要求信号
ＤＣ…デコード信号
ＥＸ…実行信号
ＩＦＡ…命令フェッチ信号
ＬＳ，ＬＳＡ…ロード・ストア信号
ＳＯ…出力信号
ＳＦＳ…シリアライゼーションフェッチ信号
ＳＬＳ…シリアライゼーションロード・ストア信号
ＢＩＳ…バスインタフェース信号
ＢＥＣ（ＢＵＳ_ＥＲＲＯＲ_ＣＡＵＳＥＤ）…バスエラー信号
【図１】
2007018454.tif 000003
【図２】
2007018454.tif 000004
【図３】
2007018454.tif 000005
【図４】
2007018454.tif 000006
【図５】
2007018454.tif 000007
【図６】
2007018454.tif 000008
【図７】
2007018454.tif 000009
【図８】
2007018454.tif 000010
【図９】
2007018454.tif 000011