(57)【特許請求の範囲】
【請求項１】
入力端子にシステムクロック信号が供給され、前記システムクロック信号を遅延させた遅延クロック信号を出力する遅延手段と、
クロック端子に前記遅延クロック信号が供給され、制御端子に制御信号が供給され、前記遅延クロック信号に同期してアドレス信号を出力するプログラムカウンタと、
クロック端子に前記遅延クロック信号が供給され、アドレス端子に前記アドレス信号が供給され、演算およびデータ転送の手順を命令として記憶し、前記命令を出力する命令記憶手段と、
演算を実行し、演算結果に応じて状態信号を出力する演算手段と、
クロック端子に前記システムクロック信号が供給され、前記演算手段が出力する状態信号を記憶する状態記憶手段と、
前記状態記憶手段が記憶する状態信号と前記命令記憶手段が出力する命令とが入力され、これらの２つの入力信号に応じて状態判定結果を出力する状態デコード手段と、
前記状態判定結果と前記命令記憶手段が出力する命令とが入力され、前記制御信号を出力する命令デコード手段と
を具備し、
条件分岐命令の直前に記述された命令の実行に基づく前記状態信号に応じて条件分岐動作が行われることを特徴とするプロセッサ。
【請求項２】
前記遅延手段は、前記状態デコード手段と同一の回路構成を具備することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記遅延手段は、前記状態デコード手段の最大遅延経路に含まれる回路と同一の回路構成を具備することを特徴とする請求項１記載のプロセッサ。
【請求項４】
前記遅延手段は、状態デコード手段の最大遅延経路における遅延時間以上の遅延時間を有する回路で構成されていることを特徴とする請求項１記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサや信号処理プロセッサであるプロセッサに関し、特に命令の解読と実行とがパイプライン化されたプロセッサに係わる。
【０００２】
【従来の技術】
図６は、従来のマイクロプロセッサの構成を示す。以下、同一の構成要素には同一の符号を付し、説明を省略する。
図６に示したマイクロプロセッサは、プログラムカウンタ１、命令メモリ２、命令デコーダ３、データメモリ４、レジスタファイル５、演算回路６、アキュムレータ７、フラグレジスタ８より構成される。
【０００３】
プログラムカウンタ１は、アドレス信号Ｐを出力する。
命令メモリ２のアドレス信号入力端子には、プログラムカウンタ１が出力するアドレス信号Ｐが供給される。命令メモリ２は、アドレス信号Ｐに対応したアドレスに格納されている命令Ｑを読み出し、図示せぬ命令レジスタＩＲに書き込む。
【０００４】
命令デコーダ３の命令入力端子には、命令レジスタＩＲが蓄えている命令Ｑが供給される。命令デコーダ３は、命令Ｑの内容を解読し、命令Ｑに応じた制御信号ｇ、制御信号ｈ、制御信号ｉ、制御信号ｊ、及び制御信号ｋをそれぞれデータメモリ４、レジスタファイル５、演算回路６、プログラムカウンタ１、及び命令メモリ２の制御端子に供給する。
【０００５】
データメモリ４、レジスタファイル５、及び演算回路６のデータ入出力端子は、データバスに接続される。データＤは、データバスを介してデータメモリ４、レジスタファイル５、演算回路６の間で相互に送受される。
【０００６】
また、システムクロック信号φが、プログラムカウンタ１、命令メモリ２、データメモリ４、レジスタファイル５、アキュムレータ７及びフラグレジスタ８のクロック入力端子に供給される。プログラムカウンタ１、命令メモリ２、データメモリ４、レジスタファイル５、アキュムレータ７及びフラグレジスタ８は、システムクロック信号φの立ち上がりに同期して動作する。
【０００７】
演算回路６は、アキュムレータ７に蓄えられたデータＡ’とデータバスを介して供給されるデータＤとの間で演算を実行する。その演算結果であるデータＡは、再びアキュムレータ７に蓄えられる。この演算の際に発生する特定の状態、例えば桁溢れ（オーバーフロー）、結果の符号、結果がゼロであること、桁上げ出力などは、それぞれフラグと呼ばれる１ビットの状態信号として表される。演算回路６は、これらのフラグをまとめてフラグ信号Ｆとして出力する。
【０００８】
フラグレジスタ８は、フラグ信号Ｆを蓄える。フラグレジスタ８の出力信号Ｆ’は演算フラグ信号として命令デコーダ３のフラグ入力端子に供給される。
命令デコーダ３は、演算フラグ信号Ｆ’を条件分岐命令の分岐条件として利用する。条件分岐命令は、命令実行手順を制御する際に用いられる。
【０００９】
演算フラグ信号Ｆ’には上述の状態信号が例えば以下のように割り当てられる。
第３ビットＦ３’…桁溢れフラグＶ。桁溢れ時に”１”、それ以外は”０”。
【００１０】
第２ビットＦ２’…符号フラグＳ。結果が負のとき”１”、それ以外は”０”。
第１ビットＦ１’…零フラグＺ。結果が全桁零のとき”１”、それ以外は”０”。
【００１１】
第０ビットＦ０’…桁上げフラグＣ。最上位桁からの桁上がりがあるとき”１”、それ以外は”０”。
プロセッサの命令セットには、それぞれのフラグに応じて命令実行手順を制御できるように、以下のような条件分岐命令が用意されている。
【００１２】
ＪＵＭＰＶ  ＬＡＢＥＬ１；Ｆ３’＝”１”のとき、アドレスＬＡＢＥＬ１に分岐する。
ＪＵＭＰＳ  ＬＡＢＥＬ１；Ｆ２’＝”１”のとき、アドレスＬＡＢＥＬ１に分岐する。
【００１３】
ＪＵＭＰＺ  ＬＡＢＥＬ１；Ｆ１’＝”１”のとき、アドレスＬＡＢＥＬ１に分岐する。
ＪＵＭＰＣ  ＬＡＢＥＬ１；Ｆ０’＝”１”のとき、アドレスＬＡＢＥＬ１に分岐する。
【００１４】
【発明が解決しようとする課題】
プロセッサの処理効率を上げるため、従来から命令デコード処理と命令実行処理とをパイプライン化する技法が用いられている。この技法によると、最初の命令を読み出した場合を除いて、命令読み出しと命令実行とを同時に行うことができる。そのため、パイプライン化されていないプロセッサと比べて２倍近い処理効率が実現されている。
【００１５】
このようなパイプライン化されたプロセッサでは、条件分岐命令の直前に記述された命令が実行される期間は、条件分岐命令が解読されている期間と重なる。そのため、条件分岐命令の直前に記述された命令に基づいて変化したフラグを用いて分岐を行うことができないという欠点があった。
【００１６】
演算命令と条件分岐命令とを組み合わせたプログラムの例を以下に示す。
ＡＤＤ      Ａ，Ｒ０    ；レジスタＲ０の内容をアキュムレータＡに加算する。
【００１７】
ＮＯＰ                  ；何もしない（ノーオペレーション）。
ＪＵＭＰＶ  ＬＡＢＥＬ１；桁溢れフラグＦ３’＝”１”のとき、ＬＡＢＥＬ１に分岐する。
【００１８】
このプログラムでは、第１行で、まず、レジスタファイル５の中の０番目のレジスタＲ０の内容をデータバスを介して演算回路６の入力端子に供給する。演算回路において、レジスタＲ０の内容とアキュムレータ７が保持している内容とを加算し、加算結果を再びアキュムレータ７に記憶させる。
【００１９】
第２行では、何も実行されない。このＮＯＰ（ノーオペレーション）命令は、タイミング合わせなどに用いられる何も実行しない命令であり、大部分のプロセッサの命令セット中に用意されている。
【００２０】
第３行では、桁溢れが起きているか否かを検出し、もし桁溢れしていたらＬＡＢＥＬ１番地に分岐する。
図７は、パイプライン化されたプロセッサにおいて、演算命令と条件分岐命令とを組み合わせた上述のプログラムを実行する場合のタイミングチャートを示す。このタイミングチャートは、プログラムカウンタ１が出力するアドレス信号Ｐ、命令レジスタＩＲが保持する命令Ｑ、データバスにおけるデータＤ、及びフラグレジスタ８が保持するフラグ信号Ｆ’の時間的変化を表す。Ｔはマシンサイクルを表す。
【００２１】
図７に示すように、時刻Ｔで、命令メモリ２のｎ番地に記憶されているＡＤＤ命令が読み出され、命令レジスタＩＲに書き込まれる。
次に、ＡＤＤ命令が解読され、時刻２Ｔで、データバス上にレジスタＲ０の内容（Ｒ０）が読み出される。また、命令メモリ２のｎ＋１番地に記憶されているＮＯＰ命令が読み出され、命令レジスタＩＲに書き込まれる。
【００２２】
続いて、演算回路６においてアキュムレータ７が保持する内容Ａ’とデータバス上のデータ（Ｒ０）とが加算される。時刻３Ｔで、その加算演算の結果がアキュムレータ７に書き込まれ、フラグ信号Ｆがフラグレジスタ８に書き込まれる。
フラグレジスタ８は、そのフラグ信号Ｆを演算フラグ信号Ｆ’として出力する。
また、時刻３Ｔで、命令メモリ２のｎ＋２番地に記憶されているＪＵＭＰＶ命令が読み出され、命令レジスタＩＲに書き込まれる。
【００２３】
続いて、ＪＵＭＰＶ命令が解読される。時刻４Ｔで、命令デコーダ３は、フラグレジスタ８が出力する桁溢れフラグＦ３’を用いて、桁溢れが起きているか否かを判断する。桁溢れが起きていれば、命令デコーダ３は、制御信号ｊを用いてプログラムカウンタ１が出力するアドレス信号を変化させる。
【００２４】
このように、加算命令によって桁溢れフラグＦ３’が変化する時刻３Ｔは、ＡＤＤ命令が命令Ｑとして読み出された時刻Ｔの２マシンサイクル後である。そのため、ＮＯＰ命令を強制的に挿入することにより、ＡＤＤ命令の結果をＪＵＭＰＶ命令の条件として用いることができるようにしている。もし加算命令のすぐ後に条件分岐命令を記述すると、条件分岐命令が命令デコーダ３によって解読された後にフラグレジスタ８の出力信号Ｆ’が変化することになる。その結果、加算命令によるフラグの変化を分岐条件として用いることができなくなる。
【００２５】
従来のプロセッサでは、上述のようにＮＯＰ命令を挿入しなければならず、処理効率が低下していた。特に条件分岐が繰り返しループの中で実行される場合は、その影響は顕著に現れる。その結果、実際のプログラム実効速度が、個々の命令の実行時間の公称値から見積もったプログラム実行速度よりも遅くなり、予期し得ない誤差が発生しまっている。
【００２６】
本発明は、上記課題に鑑みてなされたもので、パイプラインプロセッサにおいて条件分岐命令の直前の命令で発生した演算の状態に応じてプログラムの分岐が実行できるようにして、処理効率を上げることを目的とする。
【００２７】
【課題を解決するための手段】
上記課題を解決するため、本発明のプロセッサは、入力端子にシステムクロック信号が供給され、システムクロック信号を遅延させた遅延クロック信号を出力する遅延手段と、クロック端子に遅延クロック信号が供給され、制御端子に制御信号が供給され、遅延クロック信号に同期してアドレス信号を出力するプログラムカウンタと、クロック端子に遅延クロック信号が供給され、アドレス端子にアドレス信号が供給され、演算およびデータ転送の手順を命令として記憶し、命令を出力する命令記憶手段と、演算を実行し、演算結果に応じて状態信号を出力する演算手段と、クロック端子にシステムクロック信号が供給され、演算手段が出力する状態信号を記憶する状態記憶手段と、状態記憶手段が記憶する状態信号と命令記憶手段が出力する命令とが入力され、これらの２つの入力信号に応じて状態判定結果を出力する状態デコード手段と、状態判定結果と命令記憶手段が出力する命令とが入力され、制御信号を出力する命令デコード手段とを具備し、条件分岐命令の直前に記述された命令の実行に基づく状態信号に応じて条件分岐動作が行われる。
【００２８】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図１は、本発明のマイクロプロセッサの実施例を示す。
このプロセッサは、プログラムカウンタ１、命令メモリ２、命令デコーダ３、データメモリ４、レジスタファイル５、演算回路６、アキュムレータ７、フラグレジスタ８、フラグデコーダ９、及びクロック遅延回路１０より構成される。
【００２９】
プログラムカウンタ１は、アドレス信号Ｐを出力する。
命令メモリ２のアドレス信号入力端子には、プログラムカウンタ１が出力するアドレス信号Ｐが供給される。命令メモリ２は、アドレス信号Ｐに対応したアドレスに格納されている命令Ｑを読み出し、図示せぬ命令レジスタＩＲに書き込む。
【００３０】
命令デコーダ３の命令入力端子には、命令レジスタＩＲが蓄えている命令Ｑが供給される。命令デコーダ３は、命令Ｑの内容を解読し、命令Ｑに応じた制御信号ｇ、制御信号ｈ、制御信号ｉ、制御信号ｊ、及び制御信号ｋをそれぞれデータメモリ４、レジスタファイル５、演算回路６、プログラムカウンタ１、及び命令メモリ２の制御端子に供給する。
【００３１】
データメモリ４、レジスタファイル５、及び演算回路６のデータ入出力端子は、データバスに接続される。データＤは、データバスを介してデータメモリ４、レジスタファイル５、演算回路６の間で相互に送受される。
【００３２】
演算回路６は、アキュムレータ７に蓄えられたデータＡ’とデータバスを介して供給されるデータＤとの間で演算を実行する。その演算結果であるデータＡは、再びアキュムレータ７に蓄えられる。この演算の際に発生する特定の状態、例えば桁溢れ（オーバーフロー）、結果の符号、結果がゼロであること、桁上げ出力などは、それぞれフラグと呼ばれる１ビットの状態信号として表される。演算回路６は、これらのフラグをまとめてフラグ信号Ｆとして出力する。
【００３３】
フラグレジスタ８は、演算回路６が出力するフラグ信号Ｆを蓄える。フラグレジスタ８は、蓄えているフラグ信号を演算フラグ信号Ｆ’として出力する。
フラグデコーダ９のフラグ入力端子には、フラグレジスタ８が出力する演算フラグ信号Ｆ’が供給される。また、フラグデコーダ９の命令入力端子には、命令メモリ２が出力する命令Ｑが供給される。フラグデコーダ９は、命令Ｑと演算フラグ信号Ｆ’に応じて制御信号ｅを生成し、命令デコーダ３の制御端子に制御信号ｅを供給する。
【００３４】
命令デコーダ３は、入力された制御信号ｅに応じて、制御信号ｊ及び制御信号ｋを変化させて、分岐命令あるいは条件分岐命令を実行する。フラグデコーダ９と命令デコーダ３がフラグをデコードして制御信号ｊあるいは制御信号ｋを出力するのに要する時間をフラグデコード時間τと呼ぶことにする。
【００３５】
また、クロック遅延回路１０の入力端子には、システムクロック信号φが供給される。クロック遅延回路１０は、システムクロック信号φを例えばΔｔだけ遅延させた遅延クロック信号φ’を出力する。Δｔは、フラグデコード時間τより大きく設定される。
【００３６】
遅延クロック信号φ’は、プログラムカウンタ１と命令メモリ２のクロック入力端子に供給される。また、システムクロック信号φは、データメモリ４、レジスタファイル５、アキュムレータ７及びフラグレジスタ８のクロック入力端子に供給される。プログラムカウンタ１、命令メモリ２、データメモリ４、レジスタファイル５、アキュムレータ７及びフラグレジスタ８は、クロック入力端子に供給される信号の立ち上がりに同期して動作する。
【００３７】
図１に示した実施例において、プログラムカウンタ１と命令メモリ２には、クロック信号φをクロック遅延回路１０により遅延したクロック信号φ’が供給される。一方、フラグレジスタ８には遅延していないクロック信号φが供給される。したがって、システムクロック信号φが立ち上がってからクロック信号φ’が立ち上がるまでの時間内にフラグデコーダ９でのデコードを終了させることにより、直前の演算によるフラグ変化によって分岐動作を実行することができる。
【００３８】
図２は、図１に示したプロセッサを用いて条件命令を実行した場合のタイミングチャートを示す。このタイミングチャートは、システムクロック信号φ、遅延クロック信号φ’、プログラムカウンタ１が出力するアドレス信号Ｐ、命令レジスタＩＲが保持する命令Ｑ、データバスにおけるデータＤの時間的変化を表す。
Ｔはマシンサイクルを示す。
【００３９】
図２に示したタイミングチャートに対応するプログラムの例を以下に示す。
ＡＤＤ      Ａ，Ｒ０    ；レジスタＲ０の内容をアキュムレータＡに加算する。
【００４０】
ＪＵＭＰＶ  ＬＡＢＥＬ１；桁溢れフラグＦ３’＝”１”のとき、ＬＡＢＥＬ１に分岐する。
このプログラムにおいて、第１行では、レジスタファイル５の中の０番目のレジスタＲ０の内容をデータバスを介して演算回路６に供給し、それとアキュムレータ７の内容とを加算して、加算結果を再びアキュムレータ７に記憶させる。第２行では、桁溢れが起きているか否かを検出し、もし桁溢れしていたらＬＡＢＥＬ１番地に分岐する。
【００４１】
図２に示すように、まず、時刻Ｔ’で、命令メモリ２のｎ番地に記憶されているＡＤＤ命令が読み出され、命令レジスタＩＲに書き込まれる。続いて、命令デコーダ３はＡＤＤ命令を解読し、制御信号ｈなどを出力する。
【００４２】
次に、時刻２Ｔで、制御信号ｈに応じてレジスタファイル５の中のレジスタＲ０の内容（Ｒ０）がデータバス上に出力される。
時刻２Ｔ’で、命令メモリ２のｎ＋１番地に記憶されているＪＵＭＰＶ命令が読み出され、命令レジスタＩＲに書き込まれる。続いて、命令デコーダ３はＪＵＭＰＶ命令を解読する。
【００４３】
さらに、演算回路６においてアキュムレータ７が保持する内容Ａ’とデータバス上のデータ（Ｒ０）とが加算され、時刻３Ｔにその結果がアキュムレータ７に書き込まれる。また、時刻３Ｔにフラグ信号Ｆがフラグレジスタ８に書き込まれる。フラグレジスタ８は、フラグ信号Ｆを演算フラグ信号Ｆ’としてフラグデコーダ９のフラグ入力端子に供給する。フラグデコーダ９は、時刻３Ｔ’までに、ＪＵＭＰＶ命令と演算フラグ信号Ｆ’をデコードして条件が成立しているか否かを表す制御信号ｅを出力する。
【００４４】
その後、時刻３Ｔ’で、命令デコーダ３は、制御信号ｅに応じて条件分岐命令を実行する。
このように、本実施例において、ＮＯＰ命令を設けずに、分岐条件を発生する演算命令と条件分岐命令とを続けて実行できるため、処理を高速に実行することが可能となる。また、ＮＯＰ命令を挿入する必要がなくなるため、プログラムのコーディングが容易になる。
【００４５】
図３は、本発明で用いられるフラグデコーダの回路例を示す。
エクスクルシブノアゲート１１ａ〜１１ｄの第１の入力端子には、命令Ｑの例えば下位４ビットＱ３〜Ｑ０がそれぞれ供給される。エクスクルシブノアゲート１１ａ〜１１ｄの第２の入力端子には、演算フラグ信号Ｆ’の第３ビットＦ３’ないし第０ビットＦ０’がそれぞれ供給される。エクスクルシブノアゲート１１ａ〜１１ｄの出力端子は、それぞれアンドゲート１２の第１ないし第４の入力端子に接続される。アンドゲート１２は、制御信号ｅを出力する。図３において、破線の外側にあるアンドゲート１３は、命令デコーダ３の一部である。アンドゲート１３の第１の入力端子には制御信号ｅが供給され、第２の入力端子には命令デコーダの他の部分で生成された信号ｚが供給される。アンドゲート１３は、プログラムカウンタ１の制御信号ｊを発生する。
【００４６】
図３に示したフラグデコーダを用いる場合、条件分岐命令ＪＵＮＰＶの下位４ビットＱ３〜Ｑ０をそれぞれ”１”、”０”、”０”、”０”に設定する。ＪＵＭＰＶ命令をデコードするときに、Ｆ３’＝”１”であり、Ｆ２’〜Ｆ０’が”０”であれば、制御信号ｅは”１”となり、分岐が実行される。また、Ｆ３’＝”０”であれば、制御信号ｅは”０”となり、分岐は実行されない。
【００４７】
図４は、本発明で用いられるクロック遅延回路の第１の実施例を示す。
この回路は、エクスクルシブノアゲート１４ａ〜１４ｄとアンドゲート１５、１６から構成される。エクスクルシブノアゲート１４ａの第１の入力端子にシステムクロック信号φが供給され、エクスクルシブノアゲート１４ａの第２の入力端子とエクスクルシブノアゲート１４ｂ〜１４ｄの第１及び第２の入力端子は電源電位ＶＤＤに接続される。エクスクルシブノアゲート１４ａ〜１４ｄとアンドゲート１５、１６は、図３に示したエクスクルシブノアゲート１１ａ〜１１ｄとアンドゲート１２、１３と同様にして互いに接続されている。アンドゲート１６の第２の入力端子は電源電位ＶＤＤに接続される。アンドゲート１６は、遅延クロック信号φ’を出力する。
【００４８】
システムクロック信号φの立ち上がりと遅延クロック信号φ’の立ち上がりとの時間差Δｔが、フラグデコーダ９を含む命令デコーダ３の動作時間τよりも大きい場合、Δｔ−τだけ余分な動作時間が増える。その結果、マシンサイクルＴが本来必要な長さよりもΔｔ−τだけ長くなり、動作速度が低下する。したがって、図４に示すように、クロック遅延回路として、フラグデコーダ及び命令デコーダの遅延経路と等しい回路を用いることにより、Δｔをτに近づけ、動作速度を向上させることができる。
【００４９】
図５は、本発明で用いられるクロック遅延回路の第２の実施例を示す。
図５に示した遅延回路は、図４に示した回路の最大遅延経路（クリティカルパス）を取り出したものである。
【００５０】
図５に示すように、エクスクルシブノアゲート１４ａの第１の入力端子には、システムクロック信号φが供給される。エクスクルシブノアゲート１４ａの第２の入力端子は、電源電位ＶＤＤに接続される。エクスクルシブノアゲート１４ａの出力端子は、アンドゲート１５の第１の入力端子に接続され、アンドゲート１５の出力端子はアンドゲート１６の第１の入力端子に接続される。アンドゲート１５の第２ないし第４の入力端子とアンドゲート１６の第２の入力端子は、電源電位に接続される。アンドゲート１６は、遅延クロック信号φ’を出力する。
【００５１】
このように、図４に示した回路のクリティカルパスを構成するゲートを取り出し、それらの入力端子を適切に電源電位ＶＤＤあるいは接地電位に接続することにより、図４に示した実施例と同様の効果を得るとともに、遅延回路の規模を削減することが可能となる。
【００５２】
【発明の効果】
以上説明したように、本発明によれば、条件分岐命令の直前に分岐命令を決定する命令を記述できるため、タイミング合わせのためのＮＯＰ命令の挿入が不要となり、プロセッサの処理効率を向上させることができる。
【図面の簡単な説明】
【図１】本発明の実施例を示す図。
【図２】図１に示した実施例のタイミングチャートを示す図。
【図３】本発明で用いられるフラグデコーダの回路図。
【図４】本発明で用いられるクロック遅延回路の第１の実施例を示す図。
【図５】本発明で用いられるクロック遅延回路の第２の実施例を示す図。
【図６】従来のマイクロプロセッサを示す図。
【図７】図６に示した従来例のタイミングチャートを示す図。
【符号の説明】
１…プログラムカウンタ、
２…命令メモリ、
３…命令デコーダ、
４…データメモリ、
５…レジスタファイル、
６…演算回路、
７…アキュムレータ、
８…フラグレジスタ、
９…フラグデコーダ、
１０…遅延回路。
【図１】
0003699796.tif 000002
【図２】
0003699796.tif 000003
【図３】
0003699796.tif 000004
【図４】
0003699796.tif 000005
【図５】
0003699796.tif 000006
【図６】
0003699796.tif 000007
【図７】
0003699796.tif 000008