(57)【特許請求の範囲】
【請求項１】
ＣＰＵとこのＣＰＵが実行する命令を先読みして蓄える命令先読みバッファとを含み、
前記ＣＰＵは、分岐命令から分岐先命令までの変位量が所定の変位量であるか否かを当該分岐命令の保有する情報に基づいて検出する検出手段を含み、
前記命令先読みバッファは、前記所定の変位量でないことが前記検出手段によって検出されたときは既に先読みされている命令をクリアして新たに取り込んだ分岐先命令をＣＰＵに出力し、前記所定の変位量であることが前記検出手段によって検出されたときは既に先読みされている分岐先命令をＣＰＵに出力するものであることを特徴とするデータプロセッサ。
【請求項２】
ＣＰＵとこのＣＰＵが実行する命令を先読みして蓄える命令先読みバッファとを含み、
前記ＣＰＵは、分岐先までのアドレス変位量を決定するための分岐変位情報を含む分岐命令の当該分岐変位情報が所定の値であるかを検出する検出手段を含み、
前記命令先読みバッファは、前記分岐変位情報が所定の値ではないことが前記検出手段によって検出されたときは既に先読みされている命令をクリアして新たに取り込んだ分岐先命令をＣＰＵに出力し、前記分岐変位情報が所定の値であることが前記検出手段によって検出されたときは既に先読みされている分岐先命令をＣＰＵに出力するものであることを特徴とするデータプロセッサ。
【請求項３】
ＣＰＵと、このＣＰＵが実行する命令の先読みを制御する先読み制御手段と、先読みされた命令を蓄えるバッファメモリとを含み、
前記ＣＰＵは、分岐先までのアドレス変位量を決定するために分岐命令が保有している分岐変位情報が所定の値であるかを検出する検出手段を含み、
前記先読み制御手段は、分岐変位情報が前記所定の値でないことが前記検出手段によって検出されたときはバッファメモリに既に先読みされている命令をクリアし前記バッファメモリに分岐先命令を新たに取り込んでＣＰＵに出力し、前記分岐変位情報が所定の値であることが前記検出手段によって検出されたときは既にバッファメモリに先読みされている分岐先命令をＣＰＵに出力するものであることを特徴とするデータプロセッサ。
【請求項４】
ＣＰＵと、このＣＰＵが実行する命令の先読みを制御する先読み制御手段と、先読みされた命令を蓄えるバッファメモリとを含み、
前記ＣＰＵは、プログラムカウンタと、プログラムカウンタの値に基づいて前記命令先読みバッファから読み込んだ命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果がプログラムカウンタ相対分岐命令であるか否かそして分岐命令に含まれる分岐変位情報の示す値が所定の値であるか否かを判定する検出手段と、前記分岐変位情報に基づいて分岐先アドレスを演算するアドレス演算手段とを含み、
前記先読み制御手段は、プログラムカウンタ相対分岐命令以外の命令又は分岐変位情報が前記所定の値でないことが前記検出手段によって検出されたときはバッファメモリに既に先読みされている命令をクリアし前記アドレス演算手段で演算された命令アドレスに基づいて分岐先命令を新たに取り込んでＣＰＵに出力し、プログラムカウンタ相対分岐命令であって前記分岐変位情報が所定の値であることが前記検出手段によって検出されたときはバッファメモリに既に先読みされている命令の中から前記アドレス演算手段で演算された命令アドレスに応ずる分岐先命令を選択してＣＰＵに出力するものであることを特徴とするデータプロセッサ。
【請求項５】
前記検出手段が検出する分岐変位情報の所定の値は、当該分岐命令の次の１命令をスキップさせる値であることを特徴とする請求項２乃至４の何れか１項記載のデータプロセッサ。
【請求項６】
前記ＣＰＵが実行する命令セットは１６ビット固定長であることを特徴とする請求項１乃至５の何れか１項記載のデータプロセッサ。
【請求項７】
命令キャッシュメモリを更に備え、前記ＦＩＦＯバッファはその命令キャッシュメモリから命令を入力するものであることを特徴とする請求項６記載のデータプロセッサ。
【請求項８】
バスコントローラを更に備えて１個の半導体基板に形成され、前記バスコントローラは前記命令キャッシュメモリが半導体基板の外部からキャッシュエントリを取り込むための外部バスサイクルを起動制御するものであることを特徴とする請求項７記載のデータプロセッサ。
【請求項９】
請求項８記載のデータプロセッサと、このデータプロセッサが前記バスコントローラを介してアクセスする外部メモリと、前記データプロセッサが前記バスコントローラを介してアクセスする外部入出力回路とを含んで成るものであることを特徴とするデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令を先読み可能なデータプロセッサにおけ分岐先命令の取得技術に関し、例えば条件付き命令実行（所定の条件が成立するときだけ実行される命令の実行）の高速化に適用して有効な技術に関するものである。
【０００２】
【従来の技術】
命令プリフェッチバッファ等を用いた命令先読み技術を採用することによって命令レジスタへの命令フェッチを高速化することができる。このとき、プログラムの実行順序が変わると、折角先読みした命令は実行の機会を失うことになる。特開平７―２３９７８１号には、分岐先命令が命令先読みバッファに格納されているかを判定し、格納されている場合には、命令先読みバッファの内容を利用する技術が記載されている。これは、分岐命令によってＣＰＵによる命令実行順序が変化される場合にも、一旦先読みされた命令を有効利用しようとするものである。この他に、同様の技術が特開平１−２３９６３９号、特開平２−２７５５３２号、特開平７−３０６７８５号、特開昭６２−６３２８号公報に記載されている。
【０００３】
【発明が解決しようとする課題】
本発明者は、データプロセッサによる条件付き命令実行機能を強化することについて検討した。例えば、比較命令で２個のレジスタ値の大小関係が真の関係であるかを判定し、それに続く条件分岐命令では前記判定結果が真ならば、次の加算命令をスキップしてその次の命令に分岐し、偽ならば上記加算命令を行うとういような手順で実現される、条件付き１命令実行の高速化を検討した。その場合、１命令スキップのような分岐命令の場合にも、命令先読みバッファをクリアして分岐先命令をフェッチするならば、分岐先の命令を実行するまでに時間がかかってしまう。このとき、上記のように、分岐先命令が命令先読みバッファに格納されている場合にはそれを利用することが得策である。しかしながら、分岐先命令が命令先読みバッファに格納されているかを判定するのに時間がかかるようでは、高速化には全く効果のないことが明らかにされた。前記条件付き１命令実行のような処理は頻発するからである。
【０００４】
また、前記条件付き１命令実行のような処理を考慮した命令がある。即ち、PA-RISC  1.1 Architecture and Instruction Set Reference Manual (１９９０年１０月) 2.8〜2.9，A9，C.1〜C.5頁には、算術命令や分岐命令が命令語中の１ビットにナリファイ（Nullify）ビットを有し、ナリファイビットがセット状態にされた命令に次の命令を無効化するという技術が記載されている。このナリファイビットの値に応じて後続の１命令を選択的にスキップでき、２命令先の分岐と同等の効果を得られる。しかしながら、ナリファイビットのために命令コードの中の１ビットが消費され、命令長が３２ビット未満（１６、２４ビット等）のように短い命令では、１ビットのナリファイビットを採用するとそれによって本来の命令の機能（命令コードのビット数若しくは命令コードの種類）が制限されて、現実的では無いことが明らかにされた。
【０００５】
本発明の目的は、ナリファイビットのような特別なビットを命令コードに追加することなく、分岐命令による一定範囲若しくは所定変位量の分岐先命令を命令先読みバッファから高速にＣＰＵに供給できるデータプロセッサを提供することにある。
【０００６】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【０００７】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【０００８】
すなわち、データプロセッサは、命令実行順序が変更されるとき、分岐命令それ自体が保有する分岐変位情報を参照して、分岐先が分岐命令から一定範囲内（所定の分岐変位量）であるかを検出し、一定範囲内であるときには、命令先読みバッファをクリアせずに、その命令先読みバッファに既に先読みされている分岐先命令を用いるようにするものである。これによれば、分岐変位情報は当該分岐命令に実行段階で分岐先アドレスの演算に利用されるものであるから、分岐先が分岐命令から一定範囲内であるか否かの検出は、分岐先アドレスの演算完了前に得ることができる。その検出結果が一定範囲内であるとき命令先読みバッファにはクリアの指示が与えられず、また、その検出結果が一定範囲外であるとき命令先読みバッファにはクリアの指示が与えられる。したがって、命令先読みバッファは分岐先アドレスが生成される前に、若しくは分岐先メモリアドレスが供給される前に、クリアすべきか否かの指示を得ることができる。これにより、前記検出結果が一定範囲内であるとき命令先読みバッファは、既に先読みされている命令の中から分岐先命令を即座に出力することができる。そして、前記検出結果が一定範囲外であるとき命令先読みバッファは、分岐先命令アドレスを受け取ると、即座にその命令を外部から読み込んで出力することができる。
【０００９】
更に詳しい態様によれば、データプロセッサは、ＣＰＵとこのＣＰＵが実行する命令を先読みして蓄える命令先読みバッファとを含む。前記ＣＰＵは、分岐命令から分岐先命令までの変位量が所定の値であるか否かを当該分岐命令の保有する情報（分岐変位情報）に基づいて検出する検出手段を含む。前記命令先読みバッファは、所定の変位量でないことが前記検出手段によって検出されたときは既に先読みされている命令をクリアして新たに取り込んだ分岐先命令をＣＰＵに出力し、所定の変位量であることが前記検出手段によって検出されたときは既に先読みされている分岐先命令をＣＰＵに出力するものである。
【００１０】
ここで着目している分岐命令はプログラムカウンタ相対分岐命令と称されることがある。これに即した態様によれば、データプロセッサは、ＣＰＵと、このＣＰＵが実行する命令の先読みを制御する先読み制御手段と、先読みされた命令を蓄えるバッファメモリとを含む。前記ＣＰＵは、プログラムカウンタと、プログラムカウンタの値に基づいて前記命令先読みバッファから読み込んだ命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果がプログラムカウンタ相対分岐命令であるか否かそして分岐命令に含まれる分岐変位情報の示す値が所定の値であるか否かを判定する検出手段と、前記分岐変位情報に基づいて分岐先アドレスを演算するアドレス演算手段とを含む。前記先読み制御手段は、プログラムカウンタ相対分岐命令以外の命令又は前記分岐変位情報が所定の値でないことが前記検出手段によって検出されたときはバッファメモリに既に先読みされている命令をクリアし前記アドレス演算手段で演算された命令アドレスに基づいて分岐先命令を新たに取り込んでＣＰＵに出力し、プログラムカウンタ相対分岐命令であって分岐変位情報が前記所定の値であることが前記検出手段によって検出されたときはバッファメモリに既に先読みされている命令の中から前記アドレス演算手段で演算された命令アドレスに応ずる分岐先命令を選択してＣＰＵに出力する。
【００１１】
上記手段によれば、条件分岐を用いた1命令スキップを命令先読みバッファのクリア無しで実現出来る。これは、機能的に、命令コード中のナリファイビットを用いた1命令スキップと同様であるが、ナリファイビットのような特定ビットによる命令ビット数の圧迫はない。したがって、１６ビット固定長のような命令ビット数の少ないアーキテクチャーのデータプロセッサにおいて、命令機能若しくは命令の種類を制約することなく、分岐命令を用いた条件付き命令実行を高速化することができる。
【００１２】
スルー経路を選択可能なＦＩＦＯバッファによって前記命令先読みバッファを構成すれば、クリア後、最初に読み込んだ分岐先命令の出力が高速化される。
【００１３】
データプロセッサは命令フェッチの高速化の観点から命令キャッシュメモリを更に備えることができ、前記ＦＩＦＯバッファはその命令キャッシュメモリから命令を読み込む。このデータプロセッサが1個の半導体基板に形成される場合、バスコントローラを更に備え、バスコントローラは前記命令キャッシュメモリが半導体基板の外部からキャッシュエントリを取り込むための外部バスサイクルを起動制御する。このデータプロセッサを適用したデータ処理システムは、当該データプロセッサが前記バスコントローラを介してアクセスする外部メモリと、前記データプロセッサが前記バスコントローラを介してアクセスする外部入出力回路とを含み、外部メモリ等に格納されている命令を高速に実行することができる。
【００１４】
【発明の実施の形態】
図１には本発明に係るデータプロセッサの一例ブロック図が示される。同図に示されるデータプロセッサ１は、３２ビットＲＩＳＣ(Reduced Instruction Set Computer)アーキテクチャを有し、その命令セットは１６ビット固定長とされる。
【００１５】
このデータプロセッサ１は、浮動小数点ユニット２を有する。さらに、データプロセッサ１は整数ユニット３を有る。前記整数ユニット３は３２ビットデータバス４を介して前記浮動小数点ユニット２に結合されている。整数ユニット３及び浮動小数点ユニット２は命令バス５を介して命令キャッシュユニット６から命令を取り込む。命令アドレスは整数ユニット３から命令キャッシュユニット６に与えられる。データキャッシュユニット７は、前記データバス４に接続され、データアドレスバス８を介して整数ユニット３からデータアドレスが供給される。前記データキャッシュユニット７及び命令キャッシュユニット６は、夫々図示を省略するキャッシュコントローラ及びキャッシュメモリを備えている。前記命令キャッシュユニット６及びデータキャッシュユニット７はデータ信号やコントロール信号を含むキャッシュバス１２を介してバスコントローラ９に接続される。命令キャッシュユニット６におけるキャッシュミス等に起因する外部アクセスのための命令アドレスは前記バスコントローラ９に与えられる。また、データキャッシュユニット７におけるキャッシュミス等に起因する外部アクセスのためのデータアドレスは前記バスコントローラ９に与えられる。バスコントローラ９はそれら命令アドレス又はデータアドレスに従って、代表的に図示されたアドレスピン及びデータピン等に結合される外部メモリなどをアクセスするための外部バスサイクルを起動する。また、バスコントローラ９にはタイマやシリアルコミュニケーションインタフェースコントローラ等の周辺回路１０が周辺バス１１を介して接続されている。図１に示されるデータプロセッサは、単結晶シリコンのような１個の半導体基板に形成されている。
【００１６】
前記浮動小数点ユニット（以下単にＦＰＵとも称する）２は浮動小数点処理のためにメモリからデータ又は命令を要求することになる。この実施の態様において、前記ＦＰＵ２は、データキャッシュユニット７のキャッシュメモリにデータをストアし又は当該キャッシュメモリからデータを獲得するためのメモリアドレシング能力を持っていない。これは、ＦＰＵ２のメモリ・アドレシング回路の必要性を取り除くことによってチップ面積を節約するためである。それに代えて、整数ユニット３はＦＰＵ２に代わってキャッシュメモリなどをアドレシングする機能を有する。したがって、ＦＰＵ２若しくは浮動小数点命令は、整数ユニット３と同様の強力なアドレシングモードをサポートする必要はなく、その機能を全て整数ユニット３が負担する。整数ユニット３はＦＰＵ２のためにメモリからデータのフェッチを行うだけでなく、整数ユニット３はまた、ＦＰＵ２のために浮動小数点命令を含む全ての命令をメモリからフェッチする。命令は整数ユニット３とＦＰＵ２の双方に取り込まれてデコードされる。整数ユニット３は、デコードした命令がＣＰＵ命令である場合にはそれによって指示される整数処理を実行する。また、整数ユニット３は、デコードした命令がＦＰＵ命令である場合には、ＦＰＵ２に代わって実行すべきアドレシング処理などを行う。ＦＰＵ２は、デコードした命令がＦＰＵ命令である場合にはそれによって指示される浮動小数点処理を実行する。また、ＦＰＵ２は、デコードした命令がＣＰＵ命令である場合にはその命令を無視する。
【００１７】
図２には前記整数ユニット３の一例が示される。整数ユニット３は中央処理装置（ＣＰＵ）３０と命令先読みバッファ３１を有する。図２には本発明との関連で命令フェッチのための制御系の詳細が示されている。命令先読みバッファ３１から命令レジスタ１０６にフェッチされた命令は命令デコーダ１０８で解読される。演算ユニット１１３は、命令デコーダ１０８で解読された結果に従った演算を行うための、夫々図示を省略する汎用レジスタ、算術論理演算回路などを有し、データの整数演算やデータのアドレス演算等を行う。
【００１８】
図２において１０５で示されるものはプログラムカウンタである。特に制限されないが、ＣＰＵ３０が扱うアドレス信号はバイトアドレスとされ、1命令は１６ビット（2バイト）である。特に制限されないが、データプロセッサはスーパスカラＲＩＳＣアーキテクチャを有するものであるが、ここでは理解を容易化するために、命令レジスタ１０６は1命令づつ命令をフェッチするものとして説明する。プログラムカウンタ１０５は次に実行すべき命令アドレスを保持することになる。プログラムカウンタ制御論理１０４はプログラムカウンタ１０５の出力又は詳細を後述する分岐アドレス１３８をセレクタ１０４Ａで選択し、選択されたものは命令アドレス１２０として出力される。また、＋２の加算器１０４Ｂによって次の命令実行アドレス（次に実行すべき命令アドレス）を生成して前記プログラムカウンタ１０５に供給する。分岐命令の実行に代表されるように、命令実行順序が変化されるとき、前記セレクタ１０４Ａは分岐アドレス１３８を選択する。
【００１９】
セレクタ１０４Ａで選択された命令アドレスは命令先読みバッファ３１に供給され、命令先読みバッファはその命令アドレスに基づいて命令の先読みを行う。先読みされた命令は命令フェッチのタイミングに同期して命令レジスタ１０６に供給される。
【００２０】
前記命令デコーダ１０８は命令レジスタ１０６から供給された命令をデコードして整数ユニット３の内部を制御する。図２では命令デコーダ１０８が出力するデコード結果信号のうち、プログラムカウンタ相対分岐を示す信号１３０とその他の分岐命令のデコード結果信号１４０だけが代表的に示されている。
【００２１】
プログラムカウンタ相対分岐命令は、プログラムカウンタ相対アドレシングモードを持つ分岐命令であり、ディスプレースメントのフィールドを持つ。このディスプレースメントをｄｉｓｐ、プログラムカウンタ１０５の値をＰＣとすると、分岐先アドレスは、特に制限されないが、ＰＣ＋２×ｄｉｓｐとされる。このときのディスプレースメントは分岐先までのアドレス変位量を決定するための分岐変位情報とされる。ディスプレースメントを分岐変位情報として用いるアドレシングモードにはその他に、レジスタ間接やベースレジスタ間接などのアドレシングモードがある。図２の構成では、分岐変位デコーダ１０７で命令を解読して各種アドレシングモードにおける前記ディスプレースメントを切り出して分岐変位信号１２９を生成する。
【００２２】
前記分岐変位信号１２９はラッチ１２９Ｌを介して加算器１１２で分岐ベース信号１３７に加算され、加算結果が前記分岐アドレス１３８とされる。分岐ベース信号１３７は、分岐命令のアドレシングモードによって相違され、前記プログラムカウンタ相対の場合には実行命令番地１２８がラッチ１２８Ｌを介してセレクタ１１０で選択されて分岐ベース信号１３７とされる。レジスタ間接の場合には、演算ユニット１１３に含まれる図示しない所定のレジスタの値１３６がセレクタ１１０で選択されて分岐ベース信号１３７とされる。セレクタ１１０の制御は命令デコーダ１０８によるオペレーションコードのデコード結果に従って行なわれる。
【００２３】
前記プログラムカウンタ相対分岐を示す信号１３５とその他の分岐命令のデコード結果信号１４７（ラッチ１４０Ｌを経由した信号１４０）は論理和ゲート１４５に供給され、その出力信号１４６は命令先読みバッファ３１のクリア指示信号とされる。
【００２４】
ここで、前記分岐変位信号１３４（ラッチ１２９Ｌを経由した分岐変位信号１２９）とプログラムカウンタ相対分岐を示す信号１３５（ラッチ１３０Ｌを経由したプログラムカウンタ相対分岐を示す信号１３０）は、命令先読みバッファの無効化阻止判定論理回路（以下単に判定論理回路とも称する）１１１に供給される。この判定論理回路１１１はそれら入力信号に基づいて命令先読みバッファの無効化阻止信号（クリア阻止信号）１３２を形成する。この例に従えば、クリア阻止信号１３２が無効化阻止を指示するのは、プログラムカウンタ相対分岐を示す信号１３０が活性化（イネーブル）状態の場合であって、分岐変位信号１２９が示す変位量が２（バイトアドレスとしての分岐アドレスの変位量は４）のときである。すなわち、プログラムカウンタ相対分岐命令による分岐が1命令スキップである場合にはクリア阻止信号１３２が無効化阻止を指示する（イネーブル）状態にされる。
【００２５】
前記判定論理回路１１１の一例は図３に示される。前記分岐変位信号１３４はdisp(31)〜disp(0)として図示されている。インバータ回路７０１及びアンドゲート７０２は、disp(31)〜disp(0)＝00…00010、即ちプログラムカウンタ相対分岐命令における変位量＝２を検出して、論理値“１”の信号を出力する。図３において前記アンドゲート７０２の出力は前記プログラムカウンタ相対分岐を示す信号１３５とアンドゲート７０３で論理積が採られ、その論理積信号がクリア阻止信号１３２とされる。この例に従えば、クリア阻止信号１３２は論理値“１”によって命令先読みバッファ３１の無効化を阻止する。
【００２６】
前記命令先読みバッファ３１は命令を先読みして蓄えるための回路であり、ＣＰＵ３０が実行する命令の先読みを制御する先読み制御回路１０２と、先読みされた命令を蓄えるバッファメモリ１０１によって構成される。
【００２７】
命令先読みバッファ３１の制御について理解を容易化するために、ここで先ず、データプロセッサ１のパイプライン制御を説明する。ＣＰＵのパイプラインは、特に制限されないが、命令フェッチステージ、デコードステージ、実行ステージ、メモリアクセスステージ及びライトバックステージとされる。ライトバックステージでは、演算結果のレジスタへの書き戻しなどが行なわれる。パイプラインにおける各実行ステージのフロー制御は、代表的に示されたタイミングコントローラ１４１が行う。タイミングコントローラ１４１はデコードステージにおけるデコード信号の一部などを受け取って、命令相互間にけるフロー制御などを行う。フロー制御には、データコンフリクトに対処したり判定条件を取得するためのパイプラインストールやバイパス等の制御も含まれている。命令レジスタ１０６への命令フェッチの指示信号１４２は、特に制限されないが、タイミングコントローラ１４１がフロー制御の一環として命令先読みバッファ３１に与える。タイミングコントローラ１４１は、命令フェッチステージから命令デコードステージへの信号の受け渡しを、代表的に示された前記プログラムカウンタ１０５及び命令レジスタ１０６のラッチ動作で制御し、命令デコードステージから命令実行ステージへの信号の受け渡しを代表的に示されたラッチ回路１２８Ｌ，１２９Ｌ，１３０Ｌ，１４０Ｌのラッチ動作で制御する。
【００２８】
図４には前記命令先読みバッファ３１の一例が示されている。前記バッファメモリ１０１は例えば４段の記憶領域を有するＦＩＦＯ（First In -First Out）バッファとされる。図４に従えば、夫々１６ビットの直列４段のラッチ回路５０１〜５０５４を備える。前記キャッシュバス１２は３２ビットであり、キャッシュメモリユニット６からは２命令（３２ビット）が同時に供給される。前記ラッチ回路５０１〜５０４のデータ入力端子に、前段のラッチ回路の出力、キャッシュバス１２の下位１６ビットバス１２２Ｌ、上位１６ビットバス１２２Ｍの中から選択された一つを接続するためのセレクタ５０５〜５０８が各ラッチ回路の次段に配置されている。初段のラッチ回路５０４の入力は上位１６ビットバス１２２Ｍに接続されている。前記キャッシュバス１２の下位１６ビットバス１２２Ｌ及び上位１６ビットバス１２２Ｍは最終段のセレクタ５０５の入力にも接続されており、それらによってスルー経路を構成し、キャッシュメモリユニット６が出力する命令を直接出力することも可能である。
【００２９】
先読み制御回路１０２はＦＩＦＯバッファ１０１に対する２ビットのリードポインタ（ＲＰ）５１０と２ビットのライトポインタ（ＷＰ）５１１を有し、ＦＩＦＯバッファ１０１が空の状態で双方のポインタは５１０，５１１は初期値を指し、ライトされる度にライトポインタ５１１がインクリメントされ、リードされる度にリードポインタ５１０がインクリメントされ、リードポインタ５１０がライトポインタ５１１を追いかけるように動作される。リードポインタ５１０がライトポインタ５１１に追いついた状態ではＦＩＦＯバッファ１０１は空の状態（エンプティー状態）になっている。空の状態からライトポインタがリードポインタに追いついた状態ではＦＩＦＯバッファ１０１は満杯状態（フル状態）になっている。前記ラッチ回路５０１〜５０４及びセレクタ５０５〜５０８は、前記リードポインタ５１０及びライトポインタ５１１の計数出力を受けるデコードロジック（ＤＬＯＧ）５１３によって、データの先入れ・先出し制御される。特に、ＦＩＦＯバッファ１０１が初期化若しくはクリアされた直後は、前記スルー経路を介して命令を出力する。
【００３０】
また、先読み制御回路１０２は次にＦＩＦＯバッファ１０１にプリフェッチすべき命令番地を格納しているプリフェッチポインタ（ＩＰ）５１２を有している。キャッシュメモリユニット６に与えられるアクセスアドレス１４３は前記プリフェッチポインタ５１２が保有している命令番地とされる。１２１で示される信号はキャッシュメモリユニット６に対する命令取得要求信号である。１２３で示されるものは命令取得要求に対する応答信号である。キャッシュミスにより命令キャッシュユニット６がキャッシュフィルを行う場合には、新たなキャッシュエントリが外部メモリから取り込まれるまで前記応答信号１２３は活性化されない。
【００３１】
前記ポインタ５１０〜５１２に対する初期化信号５１６は前記クリア指示信号１４６とクリア阻止信号１３２の反転信号との論理積を採るアンドゲート５１５から出力される。初期化信号５１６はリードポインタ５１０及びライトポインタ５１１にとっては計数値のリセット信号とされ、プリフェッチポインタ５１２にとってはプリセット信号とされる。プリセットデータはその時の命令番地１２０とされる。前述の説明から明らかなように、初期化信号５１６は、分岐命令等によって命令実行順序が変化されるとき、プログラムカウンタ相対分岐命令による分岐が1命令スキップである場合を除いて、活性状態にされる。
【００３２】
前記ポインタ５１０〜５１２の制御及びキャッシュメモリユニット６に対する命令アクセスの指示は制御ロジック（ＣＬＯＧ）５１８が行う。制御ロジック５１８には前記初期化信号５１６、クリア阻止信号１３２、タイミングコントローラ１４１からの命令フェッチの要求信号１４２及びキャッシュメモリユニット６からの応答信号、そしてリードポインタ５１０及びライトポインタ５１１の計数値を入力する。制御ロジック５１８は、リードポインタ５１０及びライトポインタ５１１の計数値を入力して、ＦＩＦＯバッファ１０１のフル状態とエンプティー状態を検出し、ＦＩＦＯバッファ１０１に常に命令が存在するようにキャッシュメモリユニット６から命令のプリフェッチを行う。制御ロジック５１８は、プリフェッチのための命令番地１４３をプリフェッチポインタ５１２から出力させ、これに同期してキャッシュメモリユニット６に命令アクセスの要求１２１を与える。制御ロジック５１８は、命令キャッシュメモリユニット６からの応答を待って、ライトポインタ５１１の値に基づいて命令をＦＩＦＯバッファ１０１に格納させ、その都度、ライトクロック５１７によりプリフェッチポインタ５１２とライトポインタ５１１をインクリメントして更新する。
【００３３】
制御ロジック５１８は、タイミングコントローラ１４１から信号１４２によって命令フェッチの指示を受けると、リードポインタ５１０の値に基づいてＦＩＦＩバッファ１０１から命令を出力させ、その都度、リードクロック５１４によってリードポインタ５１０をインクリメントして更新する。
【００３４】
制御ロジック５１８は、クリア阻止信号１３２が非活性状態のとき、前記初期化信号５１６が活性化されると（分岐命令等によって命令実行順序が変化される場合であって、プログラムカウンタ相対分岐命令による分岐が1命令スキップではない場合）、リードポインタ５１０及びライトポインタ５１１をリセットすると共に、プリフェッチポインタＩＰにその時の命令番地１２０をプリセットし、要求信号１２１を活性化して、キャッシュメモリユニット６からその命令番地１２０の命令をＦＩＦＯバッファ１０１に読み込み制御する。リードポインタ５１０及びライトポインタ５１１のリセットによって、ＦＩＦＯバッファはクリアされており、タイミングコントローラ１４１からの命令フェッチの要求１４２に従って、デコードロジック５１３は読み込まれた命令をスルー経路を介して命令レジスタ１０６に供給する。プリフェッチ動作は、その後も前述のようにして適宜繰り返される。
【００３５】
前記クリア阻止信号１３２が活性状態にされたとき、即ち、プログラムカウンタ相対分岐命令による分岐が1命令スキップである場合、アンドゲート５１５の作用によってリードポインタ５１０及びライトポインタ５１１のリセット、並びにプリフェッチポインタＩＰのプリセットは行われない。即ち、ＦＩＦＯバッファ１０１のクリアが阻止される。このとき、コントロールロジック５１８は、クリア阻止信号１３２を受けて、リードポインタＲＰをインクリメントした後、命令フェッチの要求１４２に従って、ＦＩＦＯバッファ１０１からの命令読み出しを指示する。その後、通常の読み出しと同様に次の読み出しのためにリードポインタ５１０をインクリメントして更新する。これにより、１命令スキップさせて、その次の命令（分岐先命令）を命令レジスタ１０６に与えることができる。
【００３６】
図５にはプログラムカウンタ相対分岐命令による分岐が1命令スキップである場合の動作タイミングが示される。図５の動作タイミングは、（Ａ）に示されるように、例えば１０２番地にプログラムカウンタ相対分岐命令があり、そのプログラムカウンタ相対分岐命令による分岐先が１０６番地とされる1命令スキップの場合とされる。図５において１０２番地のプログラムカウンタ相対分岐命令を実行しているとき、命令先読みバッファ３１には次の１０４番地以降の命令が既にプリフェッチされている。このとき、１命令スキップのプログラムカウンタ相対分岐命令であることが検出されることにより、１０４番地の命令実行がスキップされ、１０２番地の命令で指定される分岐先の１０６番地の命令が次に実行される。尚、図５の表現はパイプライン処理とは部分的に整合しない表現になっているが、理解を容易にするためのそうなっているものと理解されたい。
【００３７】
図５の（Ａ）の命令としては、例えば図６に示される条件分岐の命令を一例として挙げることができる。図６において「ｃｍｐ／ｇｔ  ｒ１  ｒ２」は、ｒ１（レジスタ値）＞ｒ２（レジスタ値）ならばＴビットをセット状態にする比較命令である。これは図５の１００番地の命令に相当される。「ｂｔ  ｌａｂｅｌ」は、Ｔビットが真（セット状態）ならばｌａｂｅｌに分岐する分岐命令である。この分岐命令は、図５の１０２番地の命令に対応され、相対アドレシングモードを有し、分岐変位量は１命令スキップとされる。従って、ｌａｂｅｌの記述は前記１０６番地の命令に相当される。「ａｄｄ  ＃４  ｒ３」はｒ３（レジスタ値）のリテラル値４を加算してレジスタｒ３に書き戻す加算命令である。この命令は図５の１０４番地の命令の一例である。
【００３８】
図６の命令処理をパイプライン処理に従って説明すると、図７に示されるように、条件分岐命令ｂｔのデコードステージＤでは比較命令ｃｏｍの実行ステージＥで得られた実行結果がバイパスされて参照され、ここで、Ｔビットが判定される。Ｔビットの判定結果に従って加算命令ａｄｄを実行すべきか否かが決定される。この例では、説明を解りやすくするために、条件分岐命令ｂｔの次のパイプラインはノンオペレーションＮＯＰ（若しくはストール）とされ、その次で、上記条件の判定結果に従って分岐先の命令がフェッチされる。このとき、図５で説明したように、命令先読みバッファ３１はクリアされず、命令先読みバッファ３１から分岐先命令が命令レジスタ１０６にフェッチされるため、キャッシュメモリユニット６のアクセス又はキャッシュミスによる外部メモリアクセスによるパイプラインの乱れを生ずることなく、高速に、分岐先命令（ｎｅｘｔ  ｉｎｓｔ）を実行することができる。
【００３９】
図８には図５の比較例とし、１命令スキップのプログラムカウンタ相対分岐命令の場合もその他の分岐命令と同様にＦＩＦＯバッファをクリアする場合のタイミング例が示される。図５の（Ａ）と同じ命令を実行する場合を想定する。この場合には、１命令スキップのプログラムカウンタ相対分岐命令であっても、ＦＩＦＯバッファ１０１がクリアされる結果、１０６番地の命令をキャッシュメモリユニット６から取り込まなければならず、それによって分岐先命令の実行が図５の場合よりも遅れる結果になる。
【００４０】
図９は１命令スキップ以外の分岐命令による動作タイミング例が示される。図９の動作タイミングは、（Ａ）に示されるように、例えば１０２番地に分岐命令があり、その分岐命令による分岐先が２００番地とされる場合である。図９において１０２番地の分岐命令を実行しているとき、命令先読みバッファ３１には次の１０４番地以降の命令が既にプリフェッチされている。このとき、１０２番地の命令が１命令スキップのプログラムカウンタ相対分岐命令で無いことが検出されることにより、分岐先アドレスが演算されると共に、ＦＩＦＯバッファ１０１がクリアされ、この２００番地の分岐先命令がキャッシュメモリユニット６から読み込まれて初めて、当該２００番地の命令が実行可能にされる。
【００４１】
図１０には上記データプロセッサを適用したデータ処理システムのブロックダイヤグラムが示される。
【００４２】
同図において１は上記データプロセッサ、４０１はダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、４０２はＤＲＡＭ４０１に対するアドレスマルチプレクス制御やリフレッシュ制御を行うＤＲＡＭ制御部、４０３はＳＲＡＭである。ＳＲＡＭ４０３はデータプロセッサ１の作業領域やデータの一時記憶領域などに利用される。４０４はデータプロセッサ１のＯＳ（Operating System）などを保有するＲＯＭである。４０５は周辺装置制御部であり、代表的に示された外部記憶装置４０６及びキーボード４０７が接続されている。４０８はフレームバッファ４０９や図示しない描画及び表示制御論理回路を備えた表示コントローラであり、ディスプレイ４１０に対する描画制御と表示制御を行う。４１１は電源回路、４１２は代表的に示されたバスである。
【００４３】
前記ＳＲＡＭ４０３やＤＲＡＭ４０１などの外部メモリ、そして外部入出力回路としての周辺装置制御部４０５に接続された外部記憶装置４０６等は前記データキャッシュユニット７によりキャッシュの対象とされる。外部メモリとしてのＲＯＭ４０４は命令キャッシュユニット６によりキャッシュの対象とされる。データプロセッサ１は前記ＳＲＡＭ４０３，ＤＲＡＭ４０１，周辺装置制御部４０５を介する外部記憶装置４０６，ＲＯＭ４０４をバスコントローラ９が起動するバスサイクルによってアクセスする。
【００４４】
以上説明したデータプロセッサ１において、ディスプレースメント（ｄｉｓｐ）によって与えられる分岐変位情報は分岐変位デコーダ１０７で切り出されて、分岐先アドレスの演算に利用される。分岐先がプログラムカウンタ相対分岐命令から所定範囲内であるか否かの検出は、アドレス演算器１１２による分岐先アドレスの演算完了前に、無効化阻止判定論理回路１１１で得ることができる。その検出結果が、所定値、例えば１命令スキップに応ずる値であるときは命令先読みバッファ３１にはクリアの指示が与えられず、また、その検出結果が前記所定の値でないときは命令先読みバッファ３１にはクリアの指示が与えられる。したがって、命令先読みバッファ３１は分岐先アドレスが生成される前に、若しくは分岐先メモリアドレスが供給される前に、クリアすべきか否かの指示を得ることができる。これにより、前記無効化阻止判定論理回路１１１による検出結果が所定値であるとき、命令先読みバッファ３１は、既に先読みされている命令の中から分岐先命令を即座に出力することができる。また、前記検出結果が所定値でないときでも、命令先読みバッファ３１は、分岐先命令アドレス１２０を受け取ると、即座にその命令をキャッシュメモリから読み込んで出力することができる。このとき、命令先読みバッファ３１がスルー経路を利用すれば、それは更に速くなる。
【００４５】
したがって、上記データプロセッサ１によれば、プログラムカウンタ相対による条件分岐を用いた1命令スキップを命令先読みバッファのクリア無しに実現出来ることになる。これは、機能的に、命令コード中のナリファイビットを用いた1命令スキップと同様であるが、ナリファイビットのような特定ビットによる命令ビット数の圧迫はない。これにより、１６ビット固定長のような命令ビット数の少ないアーキテクチャーのデータプロセッサにおいて、命令機能若しくは命令の種類を制約することなく、分岐命令を用いた条件付き命令実行を高速化することができる。
【００４６】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００４７】
例えば、本発明は１命令スキップに限定されず、複数命令スキップの場合にも適用することができる。また、スキップ数は１種類に限定されず、分岐変位情報を用いてスキップ数を決定するように先読みバッファメモリを制御してもよい。上記の例では、プログラムカウンタ相対分岐命令において変位量＝１（次の命令を意味する）は実質的に無意味である（そのような利用形態は通常ありえない若しくは使用禁止される）から無視したが、例えばプログラムカウンタ相対分岐の際に、プログラムカウンタの値にディスプレースメントと共に定数（例えば＋２）も加算する必要のあるアーキテクチャの場合に、命令スキップの種類を合計２種類とするときは、特に図示はしないが、図３においてdisp(0)の反転信号とdisp(1)の非反転信号との論理積信号をdisp(0)に代え、disp(0)の非反転信号とdisp(1)の反転信号との論理積信号をdisp(1)に代えて前記アンドゲート７０２に供給する様にすれば、ディスプレースメントの値が０と１の双方の場合に対して無効化阻止信号を活性化できる。この時には、前記分岐変位信号１３４も制御ロジック５１８に与えることが必要であり、それに応じて制御ロジック５１８はＦＩＦＯバッファに対する読み出しスキップ数を制御しなければならない。
【００４８】
また、本発明に適用されて有効な分岐命令の称呼はプログラムカウンタ相対分岐命令に限定されない。要は、当該分岐命令からの変位量と一定に関係を持つ分岐変位情報のような情報を当該分岐命令それ事態が保有していればよい。
【００４９】
本発明に係るデータプロセッサは、所謂機器組み込み制御だけの用途に限定されるものではなく、汎用コンピュータ用のデータプロセッサにも当然適用可能である。また、データプロセッサのアーキテクチャーもＲＩＳＣやスーパースカラーに一切限定されない。
【００５０】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００５１】
すなわち、ナリファイビットのような特別なビットを命令コードに追加することなく、分岐命令によるいて違反い若しくは所定変位量の分岐先命令を命令先読みバッファから高速にＣＰＵに供給することができる。更に、条件分岐を用いた1命令スキップを命令先読みバッファのクリア無しに実現出来る。これは、機能的に、命令コード中のナリファイビットを用いた1命令スキップと同様であるが、ナリファイビットのような特定ビットによる命令ビット数の圧迫がない。したがって、１６ビット固定長のような命令ビット数の少ないアーキテクチャーのデータプロセッサにおいて、命令機能若しくは命令の種類を制約することなく、分岐命令を用いた条件付き命令実行を高速化することができる。
【図面の簡単な説明】
【図１】本発明に係るデータプロセッサの一例ブロック図である。
【図２】図１のデータプロセッサにおける命令フェッチ及び命令プリフェッチのための構成を主体として整数ユニットの一例を示したブロック図である。
【図３】命令先読みバッファのクリア阻止判定論理回路の一例ブロック図である。
【図４】命令先読みバッファの一例ブロック図である。
【図５】プログラムカウンタ相対分岐命令による分岐が1命令スキップである場合の一例動作タイミング図である。
【図６】条件付き１命令実行を行うときの命令記述の一例を示す説明図である。
【図７】図６の命令処理をパイプライン処理に従って概略的に示した説明図である。
【図８】図５の比較例として１命令スキップのプログラムカウンタ相対分岐命令の場合もＦＩＦＯバッファをクリアしたときのタイミングチャートである。
【図９】１命令スキップ以外の分岐命令による動作タイミングチャートである。
【図１０】データプロセッサを適用したデータ処理システムの一例ブロック図である。
【符号の説明】
１  データプロセッサ
２  浮動小数点ユニット
３  整数ユニット
６  命令キャッシュユニット
８  キャッシュバス
９  バスコンロローラ
３０  ＣＰＵ
３１  命令先読みバッファ
１０１  ＦＩＦＯバッファ
１０２  バッファ制御回路
１０４  プログラムカウンタ制御論理
１０４Ａ  セレクタ
１０４Ｂ  加算器
１０５  プログラムカウンタ
１０６  命令レジスタ
１０７  分岐変位デコーダ
１０８  命令デコーダ
１１１  無効化抑止判定回路
１１２  アドレス加算器
１２０  命令アドレス
１２１  命令取得要求信号
１２３  応答信号
１２７  次の命令番地
１２８  実行命令番地
１２９，１３４  分岐経に信号
１３０，１３５  プログラムカウンタ相対分岐を示す信号
１３２  命令バッファの無効化阻止信号
１３６  レジスタ値
１３７  分岐ベース信号
１３８  分岐アドレス
１４１  タイミングコントローラ
１４２  命令フェッチの指示信号
【図１】
0003641327.tif 000002
【図２】
0003641327.tif 000003
【図３】
0003641327.tif 000004
【図４】
0003641327.tif 000005
【図５】
0003641327.tif 000006
【図６】
0003641327.tif 000007
【図７】
0003641327.tif 000008
【図８】
0003641327.tif 000009
【図９】
0003641327.tif 000010
【図１０】
0003641327.tif 000011