(57)【特許請求の範囲】
【請求項１】
基本単位ビット数で構成される命令コードを読み込み、基本単位時間に従って動作するデータ処理装置であって、
前記基本単位ビット数より大きいビット数のデータバスと、
前記データバスに接続され、データバスから命令コードを入力し、命令コードを複数個保持可能な命令コード保持手段と、
前記命令コード保持手段に保持されている命令コードの状態を監視する監視手段と、
前記命令コード保持手段から取得した命令コードを解読して命令実行動作を制御する制御手段と、を有し、
前記制御手段は、前記命令コードに基づく命令実行動作の一部又は全部を前記基本単位時間毎の制御動作に分割し、前記分割される制御動作に、命令コードのリードを行なうための第１の動作と、それ以外の動作を行なうための第２の動作とを含むとき、前記監視手段による監視状態に応じて、前記第１の動作の実行を抑止するものであることを特徴とするデータ処理装置。
【請求項２】
前記命令コードの状態は、命令コードの保持量であり、保持量が多いときは第１の動作の実行を抑止し、保持量が少ないときに第１の動作を実行するものであることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
実行可能な命令としてデータ転送命令を持ち、前記データ転送命令の命令コードに対して前記制御手段が制御する前記第２の動作は、転送元アドレスを生成するための転送元アドレス生成動作と、転送されたデータを格納するための転送データ格納動作動作とを含み、
前記制御手段は、前記転送元アドレス生成動作及び転送データ格納動作のための制御情報の生成を同一の基本単位時間で生成し、前記転送元アドレス生成動作及び転送データ格納動作を相異なる基本単位時間に実行されるものであることを特徴とする請求項１記載のデータ処理装置。
【請求項４】
レジスタ手段と、フラグ手段と、リードデータバッファ手段と、前記レジスタ手段及び前記リードデータバッファ手段に接続された内部バスとを有し、
前記リードデータバッファ手段は、前記転送されたデータを一時的に格納し、格納したデータを前記内部バスに出力し、前記レジスタ手段は前記内部バスの内容を格納することが可能であることを特徴とする請求項３記載のデータ処理装置。
【請求項５】
前記リードデータバッファ手段は、前記転送されたデータを一時的に格納し、格納したデータを検査し、検査結果を前記フラグ手段に反映するものであることを特徴とする請求項４記載のデータ処理装置。
【請求項６】
プログラムカウント手段を有し、前記制御手段は、前記第１の動作としての前記プログラムカウント手段の読み出し又は書込みと、前記転送されたデータの前記レジスタ手段への格納又は前記フラグ手段への反映とを並列させるものであることを特徴とする請求項４又は５記載のデータ処理装置。
【請求項７】
プログラムカウント手段と、前記プログラムカウント手段の内容をインクリメント可能な算術演算手段とを有し、
前記算術演算手段がインクリメントする値は、前記データバスの大きさに対応した第１の値と、入力値に応じて前記第１の値よりも小さい第２の値との中から選ばれた値であることを特徴とする請求項１記載のデータ処理装置。
【請求項８】
実行可能な命令として分岐命令を有し、前記分岐命令の実行時に、分岐先の命令コードをリードした後の、前記算術演算手段は、インクリメントする値を、前記入力する値に応じて、前記第１の値又は第２の値に選択するものであることを特徴とする請求項７記載のデータ処理装置。
【請求項９】
実行可能な命令として分岐を行なわない命令を有し、前記分岐を行なわない命令の実行時において、前記算術演算手段は、インクリメントする値を、前記第１の値とするものであることを特徴とする請求項７又は８記載のデータ処理装置。
【請求項１０】
基本単位ビット数で構成される命令コードを読み込み、基本単位時間に従って動作するデータ処理装置であって、
前記基本単位ビット数より大きいビット数のデータバスと、
前記データバスに接続され、データバスから命令コードを入力し、命令コードを複数個保持可能な命令コード保持手段と、
命令コードを解読して命令実行動作を制御する第１の制御手段及び第２の制御手段と、
動作位相が相互にずらされ前記基本単位時間に従って動作する第１の算術論理演算手段及び第２の算術論理演算手段とを有し、
前記第１の制御手段は第１の算術論理演算器の制御を行い、前記第２の制御手段は第２の算術論理演算器の制御を行い、
前記第１の制御手段は、前記第２の制御手段の機能を包含し、
前記第１の制御手段と第２の制御手段は重なった時間に動作可能にされ、
前記第１の制御手段が前記第２の制御手段の制御を行なうものであることを特徴とするデータ処理装置。
【請求項１１】
前記命令コード保持手段に保持されている命令コードの状態を監視し、監視結果に応じた制御信号を発生するする監視手段を更に有し、
前記命令コード保持手段は保持した命令コードの内容を検査し、所定の命令を検出したとき検出信号を発生し、
前記第１の制御手段は、前記検出信号が所定の状態のとき、前記所定の命令コードの全部または一部を、前記第２の制御手段に供給し、前記監視手段の発生する制御信号が所定の状態のとき、前記第２の制御手段による制御を許可するものであることを特徴とする請求項１０記載のデータ処理装置。
【請求項１２】
プログラムカウント手段と、前記プログラムカウント手段の内容をインクリメント可能な算術演算手段とを有し、
前記算術演算手段は、前記第１の算術論理演算器とは異なった位相で前記基本単位時間に同期して動作するものであることを特徴とする請求項１０又は１１記載のデータ処理装置。
【請求項１３】
基本単位ビット数で構成される命令コードを読み込んで動作するデータ処理装置であって、
前記基本単位ビット数より大きいビット数のデータバスと、
前記データバスに接続され、データバスから命令コードを入力し、命令コードを複数個保持可能な命令コード保持手段と、
前記命令コード保持手段に保持されている命令コードの状態を監視する監視手段と、
命令コードを解読して命令実行動作を制御する制御手段と、を有し、
前記制御手段は、後に実行する命令コードのリード動作を制御し、所定の命令コードをデコードしたとき、前記監視手段による監視結果に応じて、命令コードのリード量を変更可能であることを特徴とするデータ処理装置。
【請求項１４】
実行可能な命令として分岐命令を有し、
前記制御手段は、前記分岐命令の命令コードをデコードして実行する際に、分岐先の命令のリードを行い、分岐先の命令リード内容を入力した時点で、前記分岐先の命令リード内容のデコードを行なうものであることを特徴とする請求項１３記載のデータ処理装置。
【請求項１５】
第１の算術論理演算器、第２の算術論理演算器、算術演算手段、レジスタ手段、プログラムカウント手段、インクリメンタ手段、リードデータバッファ手段、及びアドレスバッファ手段を有し、
少なくとも前記アドレスバッファ手段、前記プログラムカウント手段、前記レジスタ手段、第１の算術論理演算器、第２の算術論理演算器、及び前記算術演算手段を結合する第１の内部バスと、
少なくとも前記アドレスバッファ手段、前記プログラムカウント手段、及び前記インクリメンタ手段を結合する第２の内部バスと、
前記プログラムカウント手段及び前記インクリメンタ手段を結合する第３の内部バスと、
少なくとも前記リードデータバッファ手段及び前記レジスタ手段を結合する第４の内部バスと、を備え、
前記第１の内部バスによる前記レジスタ手段から前記第２の算術論理演算器への転送と、前記第２の内部バスによる前記プログラムカウント手段から前記アドレスバッファ手段への転送とを並列に行なうことが可能であり、
更に、前記第４の内部バスによる前記リードデータバッファ手段から前記レジスタ手段への転送と、前記第３の内部バスによる前記インクリメンタ手段から前記プログラムカウント手段への転送とを並列に行なうことが可能であることを特徴とするデータ処理装置。
【請求項１６】
前記レジスタ手段、前記第１算術論理演算器、及び第２の算術論理演算器を結合する第５の内部バスを有し、
前記第１の内部バスによる前記レジスタ手段から前記第１の算術論理演算器への転送と、前記第５の内部バスによる前記レジスタ手段から前記第１の算術論理演算器への別の転送とを並列に行なうことが可能であり、
更に、前記第１の内部バスによる前記レジスタ手段から前記第２の算術論理演算器への転送と、前記第５の内部バスによる前記レジスタ手段から前記第２の算術論理演算器への別の転送とを並列に行なうことが可能であることを特徴とする請求項１５記載のデータ処理装置。
【請求項１７】
前記第１の内部バスは、更に前記リードデータバッファ手段に結合され、
前記第１の内部バスによる前記レジスタ手段から前記第１の算術論理演算器への転送と、前記第４の内部バスによる前記リードデータバッファ手段から前記レジスタ手段への転送と、が指示されたことを検出し、前記レジスタ手段から前記第１の内部バスへの出力を禁止すると共に、前記リードデータバッファから前記第１の内部バスへの出力を指示する制御手段を有するものであることを特徴とする請求項１５又は１６記載のデータ処理装置。
【請求項１８】
前記第２の内部バスは、更に前記ライトデータバッファ手段に結合され、前記第２の内部バスによる前記プログラムカウント手段から前記アドレスバッファへの転送時に、前記ライトデータバッファ手段への転送も行なうことを特徴とする請求項１５乃至１７の何れか１項記載のデータ処理装置。
【請求項１９】
前記ライトデータバッファ手段は下位ビットの補正手段を有し、前記プログラムカウント手段から転送された内容を出力する場合に、前記補正手段によって、下位ビットを補正することが可能なものであることを特徴とする請求項１８記載のデータ処理装置。
【請求項２０】
更に別の算術演算手段を有し、前記別の算術演算手段は、前記第１の内部バスと前記ライトデータバッファ手段に結合されている
ものであることを特徴とする請求項１８又は１９記載のデータ処理装置。
【請求項２１】
レジスタ手段を複数有し、
前記レジスタ手段は、データの保持には全体または２分割された領域を使用可能であり、前記分割された一方のビット数よりも多いビット数をもってアドレスの保持にも使用され、
分割された前記一方のビット数に相当するレジスタを有する別のデータ処理装置と命令コードと同一の命令コードをもって、当該別のデータ処理装置の命令実行機能を包含した上で、レジスタ全体を利用する命令を実行可能であることを特徴とする請求項１、１０、１３、又は１５記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロコンピュータ、マイクロコントローラ、中央処理装置（ＣＰＵ）等のデータ処理装置に関し、例えば、半導体集積回路化された、機器組込み型のマイクロコンピュータに適用して有効な技術に関するものである。
【０００２】
【従来の技術】
半導体集積回路で成るマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化などが図られてきた。マイクロコンピュータのＣＰＵは、ソフトウェアによって、その機能が定義されているから、アドレス空間の拡張や、命令セット拡大、高速化などを図ったマイクロコンピュータにおいても、既存のマイクロコンピュータのソフトウェア資産を有効に利用できることが望ましい。
【０００３】
このため、オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セット拡大を実現した例として、例えば、特開平６−５１９８１号公報、平成５年６月（株）日立製作所発行『Ｈ８／３００Ｈシリーズプログラミングマニュアル』などの記載がある。この中で、いわゆるロードストア型アーキテクチャを採用することが、命令セットの拡張を図る上で有効であることを示されている。かかるロードストア型アーキテクチャは、所謂ＲＩＳＣ（Ｒｅｄｕｃｅｄ Ｉｎｓｔｒｕｃｔｉｏｎ Ｓｅｔ Ｃｏｍｐｕｔｅｒ）型のマイクロコンピュータの普及と共に、採用される場合が多くなっている。
【０００４】
また、上記ＣＰＵのように２ステートで基本命令を実行していたものと互換性を保ちつつ１ステートで基本命令を実行するように高速化し、さらに、ＣＰＵとは独立した乗算器を内蔵して高速化を図った例として、特開平８−２６３２９０号公報、平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』に記載のものがある。このＣＰＵにおいては、命令の基本単位は１６ビット（ワード）とされ、データバス幅も１６ビットである。即ち、１回のバスアクセスで１ワード分の命令リードが可能になる。特に、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』ｐｐ２６８〜２７７には命令実行時のバス状態について記載がある。
【０００５】
上記のＣＰＵにおいて、１ワードの命令コード長を持つレジスタ間演算命令では、１ワードの命令リード（プリフェッチを行なうため、次の命令リード）とＰＣのインクリメント（＋２）を行なうとともに、ＣＰＵ内部で汎用レジスタの内容を読み出して、演算を行い、結果を汎用レジスタに書込む。
【０００６】
一方、１６ビットイミディエイトデータと汎用レジスタとの演算命令では、１６ビットイミディエイトデータを命令中に含むため、命令コード長は２ワードになる。２回の命令リード（自命令の第２ワード及び次の命令リード）と２回のＰＣのインクリメントを行なう。この処理に２ステートを必要とする。一方、ＣＰＵ内部で１６ビットイミディエイトデータと汎用レジスタの内容を読み出して、演算を行い、結果を汎用レジスタに書込む。内部の演算動作については、上記レジスタ間演算命令と同様に１ステートで実行可能である。即ち、１ステートは、命令リードとＰＣインクリメントのみを行い、別の１ステートでは、命令リードとＰＣインクリメントと内部の演算処理を行なっている。
【０００７】
そのほかの、複数ワードの命令コード長を持つ命令の実行も、命令リードとＰＣインクリメントのみを行うステートと、命令リードとＰＣインクリメントと内部の演算処理やデータアクセスを行なうステートから構成される。
【０００８】
上記のような技術によって、単位時間のＣＰＵまたはマイクロコンピュータの処理能力が向上する。これにより、マイクロコンピュータの応用システムの制御処理を高速化でき、マイクロコンピュータによって制御される機器の高速化や高機能化、高精度化、或は、従来複数の半導体集積回路（マイクロコンピュータ）で構成したものを、統合したりすることによる小型化などを図ることができる。また、特に、割込みに対する応答時間を短縮することによって、種々の機器を制御する場合の時間的な精度、いわゆるリアルタイム性を向上することができる。
【０００９】
【発明が解決しようとする課題】
本発明者は、互換性を維持して、ソフトウェア資産を有効利用できるようにしつつ、また、論理的物理的規模の増大を最小限にし、かつ消費電力の増大も最小限にして、機器組み込み型マイクロコンピュータ等のデータ処理装置を更に高速処理可能にすることを検討した。
【００１０】
ＣＰＵの動作を高速化するためには、１命令実行のために必要なステート数を減少させること、半導体集積回路で成るようなシングルチップマイクロコンピュータの動作速度乃至動作周波数を向上させること、に大別することができる。後者の動作速度乃至動作周波数は、半導体集積回路の微細化、トランジスタの高速化などによって実現することができる。しかしながら、動作速度乃至動作周波数は、必然的に消費電流の増加を招く。従って、消費電流の増大を最小限にするには、各命令実行のために必要なステート数を減少させる方がよい。
【００１１】
なお、機器の高速化や高機能化、小型化は、アドレス空間が比較的小さく命令セットが比較的小さいＣＰＵやマイクロコンピュータにおいても要求されるから、前記アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、その双方に対して高速化を図ることが望ましい。
【００１２】
また、互換性を維持することによって、アセンブラ、Ｃコンパイラ、シミュレータ／デバッガなどのクロスソフトウェアツールを共通に利用できるようになる。即ち、これらの開発環境は既存のものが使用できるから、開発環境を逸早く用意することができる。
【００１３】
通常のマイクロコンピュータは、命令を読み込んで動作するから、自ずから命令をリードすることが必要になる。前記の通り、データアクセスも行なうが、データをアクセスするためには、これを指示する命令を読み込む必要がある。また、データアクセスを行なわない命令もあるから、バスサイクルの内、命令のリードの方が、データアクセスよりも多い。例えば、命令リード８０％、データアクセス２０％の場合もある。
【００１４】
命令のリードを高速にするためには、データバス幅を命令の単位語長よりも大きくすればよい。例えば命令の単位語が１６ビットのとき、３２ビットに広げればよい。１回のバスアクセスで２ワード分の命令リードが可能になる。
【００１５】
しかしながら、単純に命令のリードを高速にしても、リードした分の命令を実行（消費）しなければ、意味がない。
【００１６】
１６ビット固定長の命令セットと３２ビットデータバスを採用したマイクロコンピュータとして、５段のパイプラインを構成する場合、命令フェッチは２命令を１バスサイクルで実行できるので、命令フェッチのステージを１回おきに空けることができる。空いたステージにメモリアクセスを行なうことができる。
【００１７】
しかしながら、1回の命令リードのビット数を増やすして高速化する方式には以下のような問題点のあることが本発明者によって明らかにされた。
【００１８】
パイプラインを深くすると、分岐命令や割込み例外処理のように、プログラムの流れが変わると、それ以降のパイプラインを解消し、新たにパイプラインを埋め直さなければならない。機器制御用のマイクロコンピュータにおいては、分岐命令が比較的多いし、割込みも多く発生するため、パイプラインの段数が大きくなって、分岐命令や割込み例外処理の実行時間が向上できないのでは好ましくない。
【００１９】
また、３２ビットデータバスは４の倍数番地から始まる４バイトを１回にリードまたはライト可能にしているが、既存の１６ビット単位で命令リードを行なうＣＰＵと互換性を維持しようとすれば、１６ビット固定長命令は採用できず、１ワード長の命令や、３ワード長の命令などが混在してしまう。換言すれば、３２ビットのデータバスの単位にアライメントできない。例えば、２ワード長の命令は、自命令が４の倍数番地に存在するか、そうでないかで、１回の命令リードを行なうか、２回の命令リードを行なうか、などを判断しなければならないと考えられる。２回の命令リードを行なことになれば、前記既存のＣＰＵの命令実行と同等の実行時間になりかねない。更に、自命令のアドレスを判定したり、１回及び２回の命令リードの両方を行なう制御を行なったりすることは、論理規模の増大を招き易い。
【００２０】
一方、いわゆるマイクロプロセッサとしては、平成７年１月（株）日経ＢＰ社発行『日経エレクトロニクス』ｐｐ６８〜８０「１９９８年に転機、ハードウェアを単純化してＶＬＩＷへ」などに記載されているように、スーパスカラやＶＬＩＷなどのように高速化が図られている。いずれも同時に実行できる処理の数を増やして（例えば４並列）、全体的な処理性能を向上するものである。しかしながら、上記の技術では、複数命令を並列して実行するため、制御回路・演算器などのＣＰＵの資源を複数セット持つことになり、物理的・論理的規模の増大を招く。
【００２１】
また、機器組み込み型のマイクロコンピュータ（またはマイクロコントローラ）においては、各種の機器の状態を参照しつつ、処理の内容を変えていく。機器の状態を参照するために、データアクセスを行なうし、処理の内容を変えるために、分岐命令を実行する。従って、局所的なプログラムを繰り返し実行するようなことは、マイクロプロセッサに比較して、少ない。また、制御対象に応じて、命令の実行順序に制約があったり、局所的な命令実行時間に制約がある場合がある。ソフトウェア的に矛盾がないからといって、必ずしも、命令の順序を変更できるとは限らない。更には、制御するシステムによっては、消費電力を小さく抑える必要がある場合もある。
【００２２】
上記のように、分岐の処理が多いから、スーパスカラなどの手法を用いて、複数命令並列処理可能としても、分岐命令が存在して、一旦処理した結果を放棄せざるを得ない場合も生じる。また、条件分岐命令は、条件分岐命令が参照する分岐条件が確定するまで、分岐の判定ができないから、条件分岐命令が参照する分岐条件を生成する命令と条件分岐命令とは同時には実行できず、その先の処理も実行できない。条件分岐命令が存在する度に、命令の並列処理ができなくなってしまう。分岐予測や投機的実行を行なえば、実際に処理すべき動作と異なる動作を行なってしまう可能性も無視できない。機器制御の場合には、条件分岐命令を組合せて（ツリー状に構成して）、多数の分岐先の中から分岐先を判定することが多いから、分岐予測に適さないし、予測した分岐先に、更に条件分岐が存在することも多いと考えられる。結果的に分岐予測は、ヒット率が非常に低くなってしまい易い。また、分岐予測や投機的実行によって、平均的な処理時間は向上できるかも知れないが、個別の局所的な処理を高速化することは期待できないと考えられる。
【００２３】
すなわち、複数の命令を並列実行可能としても、無駄になり易い。並列実行するための論理が無駄になり、論理的物理的な資源を有効に利用できない。また、無駄な論理や無駄な動作は消費電力を不所望に増大させてしまう。
【００２４】
結局、機器組み込み制御用のマイクロコンピュータについては、スーパスカラやＶＬＩＷなどのような並列処理を行なっても、ソフトウェア資産の有効利用を図り難いし、また、実際には、マイクロプロセッサほどの高速化も困難である。少なくとも、論理的物理的規模の割に高速化が図り難く、消費電力を増大させてしまう。
【００２５】
なお、同じ演算の繰り返し処理と、モータ制御などの機器制御とでは、ＣＰＵ乃至はマイクロコンピュータ毎に処理性能の傾向が異なることが、平成１０年２月（株）ＣＱ出版社発行『インターフェイス』ｐｐ１３４〜１４５「組み込み用ＣＰＵのパフォーマンスの徹底研究」などに記載されている。この観点からも、適当な費用の、機器組み込み制御に適した既存のＣＰＵ乃至マイクロコンピュータの互換性を維持し、既存のアーキテクチャを継承し、費用の増加を適正にし、高速化を図っていく必要のあることが本発明者によって明らかにされた。
【００２６】
本発明の目的は、機器制御に好適なマイクロコンピュータ等のデータ処理装置の高速化を図ることにある。
【００２７】
本発明の別の目的は、既存のＣＰＵとの互換性を維持して、既存のソフトウェアの利用を可能にしつつ、かつ、論理的な規模の増加を最小限にして、製造費用の増加を最小限にして、ＣＰＵの処理性能を向上させることにある。
【００２８】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【００２９】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００３０】
すなわち、既存のデータ処理装置例えばＣＰＵに対して、内部データバス幅を、少なくとも命令の基本単位（例えばワード）よりも大きくし、リードした命令を複数単位保持することができる命令レジスタを持ち、この命令レジスタに存在する命令の量を監視する手段を設ける。（既存の）命令を、実行の基本単位時間（ステートと称する）に従って、命令のリード制御（プログラムカウンタのインクリメントの制御を含む）のみを行なうステート（第1の動作）と、実効アドレスの計算やデータの演算処理の制御を含むステート（第2の動作）に分割し、既にリードした命令の状況に応じて、命令のリードのみの制御を行なうステートを省略可能にする。換言すれば、前記命令レジスタに存在する既に読み込んだ命令の量に応じた前記監視手段の指示に従い、前記命令のリードのみの制御を行なうステートを省略（スキップ）する。
【００３１】
各命令の実行時の命令リードの量を、自命令の命令長に対して、多くしたり、少なくしたりする。これを、リード済み乃至リード実行中の命令の量に従って制御する。
【００３２】
上記によれば、内部データバス幅を命令の基本単位（ワード）よりも大きくすることによって、一度にリードする命令の量を、既存のＣＰＵより、大きくできる。
【００３３】
基本の実行ステートの場合、既存のＣＰＵと同様に、自分の命令コード長に対応した回数の命令リードを行なうことにより、前記ステートの省略（スキップ）を行なわない場合には、実行した自命令の命令コードの量より、リードした命令の量を大きくして、リード済みの命令コードを蓄積できる。
【００３４】
一方、省略（スキップ）を行なって、命令リードを行なわないことにより、実行した自命令の命令コードの量と、リードした命令の量を同等にして、リード済みの命令コードの量を維持したり、実行した自命令の命令コードの量より、リードした命令の量を少なくして、リード済みの命令コードの量を減少できる。
【００３５】
これによって、リード済みの命令の量を所定の範囲内に収めつつ（命令のリードの量と、命令の実行の量のバランスを採りつつ）、命令のリードを高速化して、全体の命令実行時間を短縮することができる。
【００３６】
また、省略（スキップ）するステートを自動的に変えることによって、命令の配置の変更に対応できる。
【００３７】
命令レジスタには、命令コードとともに、その命令コードのアドレス（ＩＡＢ）上のビット１についての情報を格納し、命令デコーダで同時に判定するとよい。そのようなビット１の値は、ワードのような基本単位のアドレスが４の倍数であるか４の倍数でない偶数であるかを示している。これにより、制御を容易にし、命令デコーダの論理的規模の増大を最小限にすることができる。
【００３８】
分岐命令や割込み例外処理の先頭アドレスのリードを除き、命令のリードは３２ビット単位で行い、プログラムカウンタのインクリメントは＋４とする。分岐命令や割込み例外処理の先頭アドレスが４の倍数番地のときは、同様に、命令のリードは３２ビット単位で行い、プログラムカウンタのインクリメントは＋４とする。分岐命令や割込み例外処理の先頭アドレスが４の倍数番地でないときは、先頭の命令のリードは１６ビット単位で行い、プログラムカウンタのインクリメントは＋２とする。プログラムカウンタのインクリメントの＋２又は＋４（＋２／＋４）を自動的に制御するようにインクリメンタを構成するには、例えば、ビット０をバイトアドレスとするとき、インクリメンタのビット１を、その入力と１との論理和によって得られる値にし、ビット１へのキャリーを与えるようにすればよい。
【００３９】
このように、分岐命令や割込み例外処理の先頭アドレスのリードを除き、命令のリードは３２ビット単位で行い、また、プログラムカウンタのインクリメントは＋２／＋４を自動的に行なうことにより、制御を容易にし、論理規模の増加を抑止することができる。
【００４０】
ライトデータバッファにプログラムカウンタの内容を格納するようにし、更に、ライトデータバッファをＦＩＦＯ（First-In First-Out：先入れ先出し）構造とし、また、前記プログラムカウンタのインクリメンタと同様に前記ビット１をセットする回路を持つとよい。これにより、実際にリードした命令のアドレスとプログラムカウンタに保持した内容との食い違いが大きくなり、また、一意に決まらなくても、サブルーチン分岐命令時に、待避すべきプログラムカウンタの値をライトデータバッファから容易に得ることができる。かつ、制御を容易にし、論理規模の増加を抑止することができる。
【００４１】
実効アドレスの計算やデータの転送処理が複数のステートに亘って動作する場合も、制御自体は１度に行い、制御信号に遅延を設けるなどして、実際の動作を複数のステート（例えば、アドレス計算を最初のステート、リードデータの格納を次のステート）で行なうようにする。
【００４２】
分岐命令や割込み例外処理などの場合、最低限１ワード分のプリフェッチが完了した時点で、分岐先の先頭命令のデコードを開始し、実行することにより、分岐命令や割込み例外処理による処理時間の損失を最小限にし、いわゆる応答性、ひいては、リアルタイム性を向上できる。
【００４３】
独立した内部バスを持つなどして、制御信号を遅延させるべき動作（例えば、リードデータの格納）が、次の制御動作（プログラムカウンタ・インクリメント）と重なっても同時に動作可能なように、実行手段を構成する。
【００４４】
基本単位時間で処理可能な命令（省略可能なステートを持たない命令）は、算術論理演算器（ＡＬＵ）等の演算手段を複数設けて、重なった時間を持ちながら動作可能にする。独立した内部バスを持つなどして、一方の演算手段の動作と、命令リードのための動作とが重なっても同時に動作可能なように、実行手段を構成する。それぞれの演算手段を制御するための制御回路を持つ。一方の制御回路は一方の演算手段を制御して全ての命令の制御を行なうようにし、他方の制御回路は他方の演算手段の制御を専ら行なうようにする。
【００４５】
このように、演算手段と制御回路のみを複数設けるとともに、一方の制御回路は全ての命令の制御を行なうようにし、他方の制御回路は演算手段の制御を専ら行なうようにすることにより、論理規模の増加を抑止することができる。
【００４６】
前置コードのように、制御信号のみを発生する命令コードは、命令をリードし、命令レジスタに保持した状態で、前置コードであることを検出し、所望の制御信号を発生する検出回路及び制御信号発生回路を設けることにより、スキップ可能にし、スキップ時には制御信号のみを発生するようにする。これによって、命令の実行時間を短縮できる。また、前置コードであることのみを検出し、検出した結果に基づいて制御信号を発生すればよいから、前記検出回路と制御信号発生回路の論理的規模を最小限にすることができる。
【００４７】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広い（命令セットの大きい）ＣＰＵとアドレス空間の小さい（命令セットの小さい）ＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、上記高速化を実現して、下位互換性をもつ、アドレス空間の小さいＣＰＵにも存在する命令について、同様に上記高速化を可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでも高速化を可能にできる。オブジェクトレベルで互換性を保つことによる利点と高速化を可能にすることの利点の双方を享受することができる。
【００４８】
既存の命令を実行可能にし、内部動作の順序なども同等にしているから、既存のＣＰＵと比較して、将来拡張余裕を大きく損なうことがない。例えば、既存のＣＰＵに対して、新たな命令の追加が可能になった場合には、かかる技術を、本発明を適用したＣＰＵにも用いることができると考えられる。命令セットの互換性を維持していれば、機械語としては、既存のＣＰＵと同じ命令を追加することはできる。また、追加命令も、複数の実行ステート数を持つものであれば、固有の動作を行なう部分と省略可能なステートとに分け、後者を必要に応じて省略することは可能とすることはできる。少なくとも、必要に応じて命令のリードとプログラムカウンタ・インクリメントを禁止することができ、既存ＣＰＵと同等の処理時間では実現可能である。追加命令が１ステートで実行可能であれば、 複数個設けた演算手段（例えばＡＬＵ，ＡＬＵＳ）の交互の動作などによって高速化を実現できる。
【００４９】
既存のＣＰＵと同じ命令セットとすることにより、アセンブラ、Ｃコンパイラ、シミュレータ／デバッガなどの開発ツール、いわゆるクロスソフトウェアを共通にすることができる。クロスソフトウェアを共通化することによって、早く開発環境を整えることができる。
【００５０】
【発明の実施の形態】
図２には本発明が適用されたシングルチップマイクロコンピュータの一例が示される。
【００５１】
シングルチップマイクロコンピュータ１は、全体の制御を司るＣＰＵ２、割込コントローラ（ＩＮＴ）３、ＣＰＵ２の処理プログラムなどを格納するメモリであるＲＯＭ４、ＣＰＵ２の作業領域並びにデータの一時記憶用のメモリであるＲＡＭ５、タイマ６、タイマ７、シリアルコミュニケーションインタフェース（ＳＣＩ）８、Ａ／Ｄ変換器９、システムコントローラ（ＳＹＳＣ）１０、第１入出力ポート（ＩＯＰ[１]）１１乃至第９入出力ポート（ＩＯＰ[９]）１９、クロック発振器（ＣＰＧ）２０の機能ブロック乃至はモジュールから構成され、公知の半導体製造技術により１つの半導体基板（半導体チップ）上に形成される。
【００５２】
かかるシングルチップマイクロコンピュータ１は、電源端子として、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、アナロググランドレベル（ＡＶｓｓ）、アナログ電源電圧レベル（ＡＶｃｃ）、アナログ基準電圧（Ｖｒｅｆ）を有し、更に、専用制御端子として、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０、ＭＤ１）、クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）の各端子を有する。
【００５３】
ＣＰＧ２０の端子ＥＸＴＡＬ、ＸＴＡＬに接続される水晶発振子またはＥＸＴＡＬ端子に入力れる外部クロックに基づいて生成される基準クロック（システムクロック）に同期して、シングルチップマイクロコンピュータ１は動作を行う。この基準クロック１周期をステートと呼ぶ。
【００５４】
シングルチップマイクロコンピュータ１の機能ブロックは、内部バス２１によって相互に接続さる。内部バス２１は、内部アドレスバス、内部データバス、及び内部コントローラバスを含む。内部コントロールバスはリード信号、ライト信号、バスサイズ信号、システムクロックなどを含む。内部データバスの内、ＣＰＵ２のプログラムを格納するＲＯＭ４とＣＰＵ２との間は、３２ビットとされる。特に制限されないが、図２の例では、ＲＡＭ５も同様に３２ビットバスでインタフェースされる。そのほか、外部バスも３２ビットバスとしてもよい。
【００５５】
内部アドレスバスはその位相によって、ＩＡＢ、ＰＡＢの２種類があり、内部データバスもその位相によって、ＩＤＢ、ＰＤＢが存在する。例えば、リードの場合、ＩＡＢの後、ＰＡＢは０．５ステート遅延する。ＰＡＢとＰＤＢは同期している。ＰＤＢの後、ＩＤＢは０．５ステート遅延する。ＩＡＢとＰＡＢ、ＩＤＢとＰＤＢは、図示されないバスコントローラによってバッファリングされている。かかる機能ブロックやモジュールは内部バスを介して、ＣＰＵ２によってリード／ライトさる。内蔵ＲＯＭ４、ＲＡＭ５は、ＩＡＢ及びＩＤＢを介してＣＰＵ２とインタフェースされ、１ステートでリード／ライト可能とする。なお、タイマ６、タイマ７、ＳＣＩ８、Ａ／Ｄ変換器９、ＩＯＰ[１]１１〜ＩＯＰ[９]１９、ＣＰＧ２０が有す制御レジスタを総称して、内部Ｉ／Ｏレジスタと呼ぶ。これらは、ＰＡＢ及びＰＤＢに接続される。ＰＤＢのバス幅は、特に制限はされないものの、１６ビットとする。これは、内部Ｉ／Ｏレジスタは各機能ブロックに分散しているので、これを３２ビットバスで接続しようとすると、バスの総配線長が大きくなってしまい、物理的規模の増大を招き易いし、内部Ｉ／Ｏレジスタ（各機能ブロック）上で有意味のデータは８乃至１６ビットであり、３２ビットでアクセスする必要性が低いためである。
【００５６】
各入出力ポート１１〜１９は、アドレスバス、データバス、バス制御信号あるいはタイマ６，７、ＳＣＩ８、Ａ／Ｄ変換器９の入力端子や入出力端子と兼用されている。すなわち、タイマ６，７、ＳＣＩ８、Ａ／Ｄ変換器９は、それぞれ入出力信号を有し、入出力ポートと兼用にされた端子介して、外部と入力又は入出力されるものである。例えばＩＯＰ[５]１５、ＩＯＰ[６]１６、ＩＯＰ[７]１７は、タイマ６，７の入出力端子と兼用、ＩＯＰ[８]１８はＳＣＩ８の入出力端子と兼用にされている。アナログデータの入力端子は、ＩＯＰ[９]１９と兼用にされている。
【００５７】
上記シングルチップマイクロコンピュータ１にリセット信号ＲＥＳが与えられると、ＣＰＵ２を始めとし、シングルチップマイクロコンピュータ１はリセット状態になる。このリセットが解除されると、ＣＰＵ２は所定のアドレスからスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、ＣＰＵ２は逐次、ＲＯＭ４などから命令をリードし、解読して、その解読内容に基づいてデータの処理或はＲＡＭ５、タイマ６，７、ＳＣＩ８等とのデータ転送を行う。即ち、ＣＰＵ２は、入出力ポートＩＯＰ[１]〜ＩＯＰ[９]、Ａ／Ｄ変換器９などから入力されるデータ、或はＳＣＩ８などから入力される指示を参照しつつ、ＲＯＭ４などに記憶されている命令に基づいて処理を行い、その結果に基づいて、入出力ポートＩＯＰ[１]〜ＩＯＰ[９]、タイマ６，７などを使用して、外部に信号を出力し、各種機器の制御を行うものである。
【００５８】
タイマ６，７、ＳＣＩ８、外部信号などの状態を割込み信号として、ＣＰＵ２に伝達することができる。割込信号は、Ａ／Ｄ変換器９、タイマ６、タイマ７、ＳＣＩ８、ＩＯＰ[１]１１〜ＩＯＰ[９]１９の所定のものが出力し、割込コントローラ３はこれを入力して、所定のレジスタなどの指定に基づて、ＣＰＵ２に割込要求信号２２を与える。割込要因が発生すると、ＣＰＵ割込要求が発生され、ＣＰＵ２は実行中の処理を中断して、例外処理状態を経て、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令がおかれ、この命令を実行することによって前記中断した処理を再開する。
【００５９】
図３にはＣＰＵ２に内蔵されている汎用レジスタ及び制御レジスタの構成例（プログラミングモデル）が示される。
【００６０】
ＣＰＵ２は、３２ビット長の汎用レジスタＥＲ０〜ＥＲ７を持っている。汎用レジスタＥＲ０〜ＥＲ７は、全て同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【００６１】
データレジスタとしてしては３２ビット、１６ビットおよび８ビットレジスタとして使用きる。アドレスレジスタ及び３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０〜ＥＲ７）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ７）、汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。これらは同等の機能を持っており、１６ビットジスタを最大１６本まで使用することができる。なお、汎用レジスタＥ（Ｅ０〜Ｅ７）を、特に拡張レジスタと呼ぶ場合がある。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大１６本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【００６２】
汎用レジスタＥＲ７には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み処理を含む。
【００６３】
ＰＣは２４ビットのカウンタで、ＣＰＵ２が次に実行する命令のアドレスを示す。特に制限されないものの、ＣＰＵ２の命令は、全て２バイト（ワード：１６ビット）を単位としているため、ビット０は無効であり、また、命令のリードは４バイト（ロングワード：３２ビット）としているために、ビット１も使用されない。また、スタックに待避される場合などは、上位８ビットを０としたロングワードサイズとして扱われる。
【００６４】
ＣＣＲは８ビットのコンディションコードレジスタで、ＣＰＵ２の内部状態を示している。割込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグを含む８ビットで構成されている。
【００６５】
ＥＸＲは８ビットのレジスタで、割込みなどの例外処理の制御を行なう制御情報が設定され、割込みマスクビット（Ｉ２〜Ｉ０）とトレース（Ｔ）の各ビットを含んでいる。
【００６６】
汎用レジスタ上のデータ構成例、メモリ空間上のデータ構成、アドレッシングモードと実効アドレスの計算方法などについては、例えば平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同様である。
【００６７】
図４には別のＣＰＵに内蔵されている汎用レジスタ及び制御レジスタの構成例を示す。これは、平成元年７月（株）日立製作所発行『Ｈ８／３００シリーズプログラミングマニュアル』記載のＣＰＵと同様の構成であり、１６ビットの汎用レジスタＲ０〜Ｒ７を有している。本発明を適用した、図３のプログラミングモデルを持つＣＰＵ２は、図４のＣＰＵの汎用レジスタ及び命令セットを包含している。換言すれば、前記ＣＰＵ２は図４のレジスタ及び命令セットを有するＣＰＵに対して上位互換の関係を有する。
【００６８】
図５には前記ＣＰＵ２の機械語の命令フォーマットの一例が示される。ＣＰＵ２の命令は、２バイト（ワード）を単位にしている。各命令はオペレーションフィード（ｏｐ）、レジスタフィールド（ｒ）、ＥＡ拡張部（ＥＡ）、およびコンディションフィールド（ｃｃ）を含む。
【００６９】
特に制限はされないものの、前記ＣＰＵ２は、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズ、Ｈ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同じ命令フォーマットとしている。特に基本的な演算命令、転送命令は１６ビット長（１ワード）である。
【００７０】
オペレーションフィールド（ｏｐ）は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。命令の先頭４ビットを必ず含む。２つのオペレーションフィールドを持つ場合もある。
【００７１】
レジスタフィールド（ｒ）は組合わせて汎用レジスタを指定する。前記レジスタフィールド（ｒ）はアドレスレジスタのとき３ビット、データレジスタのとき３ビット（３２ビットレジスタ）または４ビット（８または１６ビットレジスタ）である。２つのレジスタフィールドを持つ場合、或いは、レジスタフィールドを持たない場合もある。
【００７２】
前記ＥＡ拡張部（ＥＡ）は、イミディエイトデータ、絶対アドレスまたはディスプレースメントを指定する。８ビット、１６ビット、または３２ビットである。コンディションフィールド（ｃｃ）は条件分岐命令（Ｂｃｃ命令）の分岐条件を指定する。
【００７３】
図１には前記ＣＰＵ２のブロック図が例示される。ＣＰＵ２は、制御部ＣＯＮＴと、前記汎用レジスタＥＲ０〜ＥＲ７、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲを含む実行部ＥＸＥＣから構成される。
【００７４】
制御部ＣＯＮＴは、例えば３ワード分のＦＩＦＯから成る命令レジスタ２００、命令レジスタ検出回路（ＭＯＮ）２０１、命令レジスタコントローラ（ＦＩＦＯＣＮＴ）２０２、命令デコーダ（ＤＥＣ）２０３、サブ命令デコーダ（ＤＥＣＳ）２０４、レジスタセレクタ（ＳＥＬ）２０５をむ。命令デコーダ（ＤＥＣ）２０３、サブ命令デコーダ（ＤＥＣＳ）２０４は、例えば、ＰＬＡ（Ｐｒｏｇｒａｍｍａｂｌｅ Ｌｏｇｉｃ Ａｒｒａｙ）または布線論理などで構成される。命令デコーダ（ＤＥＣ）２０３は全ての命令に対応し、ＣＰＵ２の全体の制御を行う。サブ命令デコーダ（ＤＥＣＳ）２０４は、レジスタ間演算命令などの演算動作を命令デコーダ（ＤＥＣ）２０３と重なった時間に実行する制御だけを行なう。命令デコーダ２０３の出力の一部が命令デコーダ２０３にフィードバックされている。これは各命令コード内の遷移に用いるステージコード（ＴＭＧ）と、命令コード間に用いる制御コード（ＭＯＤ）を含む。かかる制御コードは、命令デコーダ（ＤＥＣ）２０３及び命令レジスタ検出回路（ＭＯＮ）２０１で生成され、マルチプレク（ＭＰＸ）２０６サを介して、命令デコーダ２０３に入力される。また、命令レジスタ検出回路（ＭＯＮ）２０１は、レジスタ間演算命令、前置コードを検出する検出回路を持ち、レジスタ間演算命令の検出結果を信号ＮＸＴＭＯＮ１によって、前置コードの検出結果を信号ＮＸＴＭＯＮ２によって命令デコーダ（ＤＥＣ）２０３に指示する。更に、命令レジスタ検出回路２０１は、命令レジスタ２００のリード中であることを信号ＩＦＭＯＮによってデコーダ２０３に指示する。命令レジスタコントローラ（ＦＩＦＯＣＮＴ）２０２は、命令レジスタに保持している有効な命令コードの量を検出し、検出結果を検出信号ＦＩＦＯＣＮＴ１，ＦＩＦＯＣＮＴ２によって命令デコーダ（ＤＥＣ）２０３に指示する。前記信号検出信号ＦＩＦＯＣＮＴ１、ＦＩＦＯＣＮＴ２、ＮＸＴＭＯＮ１、ＮＸＴＭＯＮ２、ＩＦＭＯＮに基づくデコーダ２０３による制御内容は、図１０乃至図１３、図２２及び図２３に基づいて詳述する。
【００７５】
レジスタセレクタ（ＲＳＥＬ）２０５は、デコーダ２０３，２０４の出力に基づいて汎用レジスタなどのレジスタ選択信号を形成すると共に、図示はされないものの、汎用レジスタのリードとライトが競合した場合の検出回路を備えている。
【００７６】
実行部ＥＸＥＣは３２ビット単位でデータ転送可能に構成され、図３の汎用レジスタとコントロールレジスタと、更に、テンポラリレジスタＴＲＡ、ＴＲＤ、算術論理演算器ＡＬＵ、サブ算術論理演算器ＡＬＵＳ、算術演算器ＡＵ、インクリメンタＩＮＣ、リードデータバッファＲＤＢ、ライトデータバッファＷＤＢ、アドレスバッファＡＢを含む。これらの機能ブロックはＧＢ（第１の内部バス）、ＰＣＧＢ（第２の内部バス）、ＤＢ（第５の内部バス）、ＷＢ（第４の内部バス）、ＰＣＷＢ（第３の内部バス）の内部バスによって相互に接続されている。
【００７７】
前記内部バスＧＢは、汎用レジスタＥＲ０〜ＥＲ７の所定のレジスタなどから算術論理演算器ＡＬＵ、ＡＬＵＳなどへのデータ転送、汎用レジスタＥＲ０〜ＥＲ７の中の所定レジスタやリードデータバッファＲＤＢ、算術論理演算器ＡＬＵからアドレスバッファＡＢへのアドレスの転送などに用いられる。
【００７８】
前記内部バスＰＣＧＢは、プログラムカウンタＰＣからアドレスバッファＡＢ、インクリメンタＩＮＣ、ライトデータバッファＷＤＢへの命令のアドレスへの転送などに用いられる。
【００７９】
前記内部バスＤＢは、汎用レジスタＥＲ０〜ＥＲ７の中の所定レジスタから算術論理演算器ＡＬＵやライトデータバッファＷＤＢへのデータ転送などに用いられる。
【００８０】
内部バスＷＢは、算術論理演算器ＡＬＵ、ＡＬＵＳやリードデータバッファＲＤＢから汎用レジスタへのデータ転送などに用いられる。内部バスＰＣＷＢは、インクリメンタＩＮＣからプログラムカウンタＰＣへの命令のアドレスへの転送に用いられる。
【００８１】
リードデータバッファＲＤＢは、ＲＯＭ４、ＲＡＭ５、内部Ｉ／Ｏレジスタ、或は図示はされない外部メモリから、リードした命令コードやデータを一時的に格納する。ライトデータバッファＷＤＢはＲＯＭ４、ＲＡＭ５、内部Ｉ／Ｏレジスタ、或は外部メモリへのライトデータを一時的に格納するとともに、命令リードのアドレスを一時的に格納する。リードデータバッファＲＤＢ、ライトデータバッファＷＤＢによってＣＰＵ２の内部動作と、ＣＰＵ２の外部のリード／ライト動作のタイミングを調整している。
【００８２】
アドレスバッファＡＢは、ＣＰＵ２がリード／ライトするアドレスを一時的に格納する他、格納した内容に対するインクリメント機能を有している。インクリメント機能を有するアドレスバッファは特開平４−３３３１５３号公報などに記載されている。
【００８３】
インクリメンタＩＮＣは、主にＰＣの加算に用いられ、＋２／＋４を行なう。前記算術演算器ＡＵは、プログラムカウンタ相対の分岐命令／サブルーチン分岐命令の分岐アドレスの生成に使用される。算術論理演算器ＡＬＵは、命令によって指定される各種の演算や実効アドレスの計算などに用いられる。サブ算術論理演算器ＡＬＵＳは、専らレジスタ間演算命令の演算に用いられるものである。実行すべき命令がレジスタ間接演算命令であるかは前記信号ＮＸＴＭＯＮ１によって検出される。
【００８４】
前記算術論理演算器ＡＬＵとサブ算術論理演算器ＡＬＵＳの動作は、０．５ステートずらされるようになっている。算術論理演算器ＡＬＵは基本クロック（φ）がハイレベルの期間にデータを入力し、この結果を基本クロック（φ）がロウレベルの期間に出力する。これに対して、算術演算器ＡＬＵＳは、基本クロック（φ）がロウレベルの期間にデータを入力し、この結果を基本クロック（φ）がハイレベルの期間に出力する。ＣＰＵ２は、命令フェッチ、デコード、実行の３段パイプラインで命令を実行する。このとき、例えば、加算命令“ＡＤＤ．Ｌ  ＥＲ０，ＥＲ１”とシフト命令“ＳＨＬＬ  ＥＲ１”が連続する場合、基本クロック（φ）のハイレベルに同期してＥＲ０とＥＲ１の内容がバスＤＢ、ＧＢに読み出され、算術論理演算器ＡＬＵに入力される。算術論理演算器ＡＬＵで加算が行なわれ、加算結果が基本クロック（φ）のローレベルに同期して、バスＷＢに出力される。この基本クロック（φ）のローレベルでＥＲ１のリード／ライトが競合する。バスＷＢの内容がＥＲ１に書込まれる。ＥＲ１の内容は読み出されず、代わりに、算術論理演算器ＡＬＵの内容がバスＧＢに読み出され、サブ算術論理演算器ＡＬＵＳに入力される。即ち、演算器は命令の順序に従って、算術論理演算器ＡＬＵとサブ算術論理演算器ＡＬＵＳが動作し、一方の算術論理演算器ＡＬＵの結果を、他方の算術論理演算器ＡＬＵＳの入力に利用できるから、レジスタの競合を本質的に回避できる。
【００８５】
命令が重なって動作するのは、各々の命令の最初または最後の１ステート（１ステートで実行する命令は全部の期間）とされ、更に、この期間に動作するのは特定種類の動作（演算動作）とされているから、ＣＰＵ２の命令デコード動作の一部を双方の算術論理演算器ＡＬＵ，ＡＬＵＳのために重なった期間で行なえばよく、その他の順序的な動作を制御する、相対的に大きな命令デコーダ（ＤＥＣ）２０３は従来同等にでき、追加するサブ命令デコーダ（ＤＥＣＳ）２０４を相対的に小さいものとすることによって、論理的規模の増加を最小限にすることができる。
【００８６】
特に制限はされないものの、サブ命令デコーダ（ＤＥＣＳ）２０４は、サブ算術論理演算器ＡＬＵＳを用いた演算の種類の指定（演算制御）と、演算に用いる汎用レジスタの入出力制御、サブ算術論理演算器ＡＬＵＳの演算結果に基づくコンディションコードレジスタＣＣＲの設定制御を行なう。
【００８７】
一方、命令デコーダ（ＤＥＣ）２０３は、上記に加えて、命令の動作タイミングの生成、バス制御、ＰＣ制御、実効アドレスの計算、実効アドレスの計算に用いる汎用レジスタの入出力制御、メモリアクセスのデータの入出力制御、命令レジスタの制御、割込み制御などを行なう。
【００８８】
ここで、前記デコーダ２０３とサブデコーダ２０４の機能について補足説明する。サブデコーダ２０４は、信号ＮＸＴＭＯＮ１によってレジスタ間接演算命令であることが検出されたとき、当該レジスタ間接演算命令をデコードし、そのデコード結果によるサブ算術論理演算器ＡＬＵＳの演算制御は０．５ステート遅れて開始する。
【００８９】
図６には前記ＲＯＭ４の構成が例示される。ＲＯＭ４は、並列データ入出力ビット数が最大３２ビットとされ、そのデータ入出力端子は内部データバスＩＤＢに接続されている。４の倍数番地から始まる連続した４バイトの、下位アドレスが“０”のバイトが上位に、下位アドレスが“３”のバイトが下位になるように構成されている。
【００９０】
このＲＯＭ４は、４の倍数番地から始まる３２ビットデータ（ロングワードデータ）を一括して１ステートでリードされる。また、それ以外の偶数番地から始まる３２ビットデータは、１ステートずつ２回に分けてリードされる必要がある。同様に偶数番地から始まる１６ビットデータ（ワードデータ）を一括して、１ステートでリード可能にされる。奇数番地から始まる１６ビットデータのリードは認められていない。これは命令コードが１６ビット単位であることに対応している。また、ＲＯＭ４は、任意の番地の８ビットデータ（バイトデータ）を１ステートでリード可能にされる。
【００９１】
即ち、１６ビット長の命令が連続する場合、１回のＲＯＭ４のリードで２命令を読み出すことができる。ＲＡＭ５のリード／ライトについても同様の構成とされる。
【００９２】
図７にはＣＰＵ２のアドレシングモードが例示される。レジスタ間接（＠ＥＲｎ）は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ＥＲｎ）の内容をアドスとしてメモリ上のオペランドを指定する。
【００９３】
ポストインクリメントレジスタ間接（＠ＥＲｎ＋）は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ＥＲｎ）の内容をアドスとしてメモリ上のオペランドを指定する。その後、アドレスレジスタの内容に1、2または4が加算され、加算結果がアドレスレジスタに格納される。バイサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ加算される。
【００９４】
プリデクリメントレジスタ間接（＠−ＥＲｎ）は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ＥＲｎ）の内容から１，２又は４を減算した内容をアドレスとしてメモリ上のオペランドを指定する。その後、減算結果がアドレスレジスタに格納される。バイトサイズでは１、ワーサイズでは２、ロングワードサイズでは４がそれぞれ減算される。
【００９５】
ディスプレースメント付きレジスタ間接（＠（ｄ：１６，ＥＲｎ））は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ＥＲｎ）の内容に命令コード中に含まれる１６ビットディスプレースメント（ｄ）を加算した内容をアドレスとしてメモリ上のオペランドを指定する。加算に際して、１６ビットディスプレースメントは符号拡張される。
【００９６】
絶対アドレス（＠ａａ：１６）は、命令コード中に含まれる絶対アドレス（ａａ）で、メモリ上のオペランドを指定する。特に制限はされないものの、１６ビット絶対アドレスの場合、上位１６ビットは符号拡張される。
【００９７】
図８には転送命令“ＭＯＶ．Ｗ ＠ａａ：１６，Ｒｄ”の動作タイミングが示される。図８の（１−１）、（１−２）には制御部（特に命令デコーダ２０３）ＣＯＮＴの動作が示され、図８の（２）には実行部ＥＸＥＣの動作が示されている。実際には、制御部ＣＯＮＴの出力する制御信号に基づいて実行部ＥＸＥＣが動作するから、制御部ＣＯＮＴの動作と実行部ＥＸＥＣの動作には時間差が存在するが、図８では便宜的にその時間差を０として表現している。また、制御部ＣＯＮＴの動作において（１−１）は従来技術同等の動作であり、（１−２）は本発明特有の動作の一例に対応されている。
【００９８】
実行部ＥＸＥＣは、第１ステートＳＴ１で、次命令の命令リード（ｉｆ）とＰＣインクリメント（＋４：従来技術では＋２）を行なう。第２ステートＳＴ２で、リードデータバッファから本命令のＥＡ拡張部（ａａ）を内部バス（ＧＢ）経由でアドレスバッファに転送すると共に、データリードのためのバスコマンドを発行する。第３ステートＳＴ３では、次の次の命令の命令リード（ｉｆ）とプログラムカウンタＰＣインクリメント（＋４：従来技術では＋２）を行なうと共に、第２ステートＳＴ２でリードしたデータを、リードデータバッファから内部バス（ＷＢ）経由で汎用レジスタに転送するとともに、データを検査し、結果をコンディションコードレジスタＣＣＲにセットする。
【００９９】
制御部ＣＯＮＴの動作（１−１）は、上記実行部ＥＸＥＣの動作に即した制御内容になっている。即ち、第２ステートＳＴ２で、アドレスの出力とバスコマンドの生成、第３ステートＳＴ３でリードデータの格納の制御信号を発生している。更に、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』では、ＰＣのインクリメントは＋２であり、リードデータは、リードデータバッファから内部バス（ＧＢ）を経由して演算器（ＡＬＵ）に入力し、演算器（ＡＬＵ）はそのままデータを内部バス（ＷＢ）に出力して、汎用レジスタに格納していた。演算器（ＡＬＵ）を介することで、内部バスの増加を抑止し（ＧＢ、ＤＢ、ＷＢの３種類）、演算器（ＡＬＵ）のデータ検査回路とフラグセット回路を共有していた。これらの詳細な相違点は省略する。
【０１００】
制御部ＣＯＮＴの動作（１−２）は、データアクセスのための制御を、第２ステートＳＴ２で行なう。即ち、第２ステートＳＴ２で、アドレスの出力とバスコマンドの生成、及び、リードデータの格納の制御信号を発生する。演算部ＥＸＥＣには、まず、アドレスの出力とバスコマンドの生成のための制御信号が与えられ、次のステートでリードデータの格納（ＲＤＢ−Ｒｄ）の制御信号が与えられるようにされる。
【０１０１】
制御部ＣＯＮＴの第１ステートＳＴ１及び第３ステートＳＴ３は、命令リード（ｉｆ）とＰＣインクリメント（＋４）のみを行なう。これらの第１、第３ステートＳＴ１，ＳＴ３は、命令レジスタ（ＦＩＦＯ）２００にリード済みの命令の量に従って、省略（スキップ）される。リード済みの命令が少なければ、第１ステートＳＴ１及び第３ステートＳＴ３を実行し、本命令の命令長（２ワード）より多い命令をリードする。リード済みの命令の量が適切であれば、第１ステートＳＴ１又は第３ステートＳＴ３の一方を実行し、本命令の命令長（２ワード）と同じ量の命令をリードする。リード済みの命令が多ければ、第１ステートＳＴ１及び第３ステートＳＴ３を実行せず、命令をリードしない。どの動作を行なうかは、前記ＦＩＦＯＣＮＴ１，ＦＩＦＯＣＮＴ，ＩＦＭＯＮなどの信号を用いて命令デコーダ２０３が決定する。
【０１０２】
例えば、本命令が複数命令連続して実行される場合には、第１ステートＳＴ１、第２ステートＳＴ２のみの実行（第３ステートＳＴ３は省略）が行われる。図８の（１−１）に示される従来と同様の制御を受ける前の命令の第３ステートＳＴ３のワードサイズ（１６ビット）命令リードと次の命令の第１ステートＳＴ１のワードサイズ命令リードが、図８の（１−２）に示される制御を受ける本発明に係る第１ステートＳＴ１のロングワードサイズ（３２ビット）命令リードに合体されたと理解することができる。
【０１０３】
なお、第１ステートＳＴ１又は第３ステートＳＴ３の一方を実行する場合、何れを実行して何れを省略（スキップ）するかは、それ以前の命令リードの状態によって決まる。分岐命令の分岐先の先頭におかれ、かつ４の倍数番地でない場合は、プリフェッチされたのは自命令の第1ワードのみであり、自命令の第２ワードを待つため、第１ステートＳＴ１を実行するし、分岐命令の分岐先の先頭におかれても、４の倍数番地の場合は、自命令の第２ワードも同時にリード（プリフェッチ）済みであるから、第１ステートＳＴ１は省略（スキップ）し、第３ステートＳＴ３を実行する。
【０１０４】
図９には分岐命令（ＪＭＰ ＠ａａ：２４）の動作タイミングが示される。図９の（１）には制御部（特に命令デコーダ２０３）ＣＯＮＴの動作が示され、図９の（２）には実行部ＥＸＥＣの動作が示されている。図８と同様に、制御部ＣＯＮＴの動作と実行部ＥＸＥＣの動作との時間差を便宜的に０として表現している。
【０１０５】
図９において、第１ステートＳＴ１は、自命令の第２ワードのリードの完了を待つためであり、第２ワードがリード済みであれば省略（スキップ）可能である。分岐先の命令を２回リードする。１回目は、リードした命令をＣＰＵ２内部に取り込むが、２回目は命令リードの発行のみを行い、リードした命令のＣＰＵ２内部への取り込みは、次の命令の実行と重なる。
【０１０６】
１回目は、４の倍数番地の場合、２ワードをリードし、ＰＣインクリメントは＋４となり、４の倍数番地でない場合、１ワードをリードし、ＰＣインクリメントは＋２となる。
【０１０７】
このため、分岐先に同じ分岐命令（ＪＭＰ ＠ａａ：２４）が存在した場合、分岐先が４の倍数番地であれば、自命令の第２ワードのリード（プリフェッチ）が完了した状態で、実行が開始されるので、第１ステートＳＴ１を省略（スキップ）できる。分岐先が４の倍数番地でなければ、自命令の第２ワードのリードが完了していない状態で、実行が開始されるので、第１ステートＳＴ１を省略（スキップ）できない。
【０１０８】
分岐命令を実行した場合も、従来と同じタイミングで分岐先の命令の実行を開始できる。４の倍数番地に分岐している場合などは、分岐先の命令実行を短縮できる。分岐命令や割込み例外処理などの応答性を維持向上することができる。
【０１０９】
上記の通り、分岐命令は、その配置されるアドレスによらず、実行可能である。実行ステート数が異なるが、最低限、従来同等であり、むしろ、無操作命令を挿入するなどの必要はなく、ソフトウェアに負担をかけなくてよい。
【０１１０】
図１０〜図１３にはプログラムを実行したときのタイミングチャートが例示される。実行プログラムは、
0003740321.tif 000002
である。
【０１１１】
尚、ＭＯＶ．Ｌ ＥＲ１，＠ａａ２は、ＭＯＶ．Ｗ Ｒ１，＠ａａ２の命令コードに、前置コードを付加した命令コードを持っている。かかる前置コードは制御信号を発生し、続く命令コード（ ＭＯＶ．Ｗ Ｒ１，＠ａａ２）の動作を変更するもので、特開平６−５１９８１号公報などに記載されている。
【０１１２】
図１０〜図１３では、命令の配置されるアドレスが相違され、ラベルＬ０，Ｌ１は、図１０では、Ｌ０＝２，Ｌ１＝１４、即ち
Ｌ０  ．ＥＱＵ  ２
Ｌ１  ．ＥＱＵ  １４、
図１１では、Ｌ０＝２，Ｌ１＝１２、即ち
Ｌ０  ．ＥＱＵ  ２
Ｌ１  ．ＥＱＵ  １２、
図１２では、Ｌ０＝０，Ｌ１＝１４、即ち
Ｌ０  ．ＥＱＵ  ０
Ｌ１  ．ＥＱＵ  １４、
図１３では、Ｌ０＝０，Ｌ１＝１２、即ち
Ｌ０  ．ＥＱＵ  ０
Ｌ１  ．ＥＱＵ  １２、
とされる。また、データは共通で、ａａ１＝１０２、１１２＝１０４、即ち
ａａ１  ．ＥＱＵ  １０２
ａａ２  ．ＥＱＵ  １０４
とする。
【０１１３】
分岐命令の第１ステートは、命令レジスタ（ＦＩＦＯ）２００に１ワード分の命令コードが存在する（ＦＩＦＯＣＮＴ１＝１）と、省略可能とされる。
【０１１４】
転送命令（ＭＯＶ．Ｗ）の第１ステートは、命令レジスタ（ＦＩＦＯ）２００に１ワード分の命令コードが存在すると、省略可能とされる。
【０１１５】
転送命令（ＭＯＶ．Ｗ）の第３ステートは、命令レジスタ（ＦＩＦＯ）２００に２ワード分の命令コードが存在する（ＦＩＦＯＣＮＴ１＝ＦＩＦＯＣＮＴ２＝１）場合、または、命令レジスタ（ＦＩＦＯ）２００に１ワード分の命令コードが存在し、かつ、命令リード実行中の場合（ＦＩＦＯＣＮＴ１＝ＩＦＭＯＮ＝１）に、省略可能とされる。
【０１１６】
レジスタ間演算命令は、命令レジスタ（ＦＩＦＯ）２００に２ワード分の命令コードが存在する（ＦＩＦＯＣＮＴ１＝ＦＩＦＯＣＮＴ２＝１）場合、または、命令レジスタ（ＦＩＦＯ）２００に１ワード分の命令コードが存在し、かつ、命令リード実行中の場合（ＦＩＦＯＣＮＴ１＝ＩＦＭＯＮ＝１）に、次の命令がレジスタ間演算命令などのとき（ＮＸＴＭＯＮ１＝１）、サブ命令デコーダ（ＤＥＣＳ）２０４とサブ算術論理演算器ＡＬＵＳの動作を指示する。
【０１１７】
転送命令（ＭＯＶ．Ｌ）の第１ステート（前置コード、ＮＸＴＭＯＮ２＝１）は、命令レジスタ（ＦＩＦＯ）２００に１ワード分の命令コードが存在すると、省略可能とされる。省略されない場合は、前置コードを命令デコーダで解読し、命令リードとＰＣインクリメントを行なうとともに、制御信号を発生する。省略した場合は、命令レジスタから、所望の信号を生成し、命令デコーダに入力する。
【０１１８】
転送命令（ＭＯＶ．Ｌ）の第２ステート、第４ステートは、転送命令（ＭＯＶ．Ｗ）の第１ステート、第３ステートと同様である。
【０１１９】
図１０の場合は以下の通りの動作になる。基準クロックφのサイクルＴ０におけるスロットＣ２（基準クロックφのローレベル期間）で、ＣＰＵ２は、図示されない分岐命令の実行時に、命令フェッチ（ｉｆ）を示す、バスコマンド（ＢＣＭＤ）を出力し、また、アドレスをアドレスバッファＡＢからアドレスバスＩＡＢに出力する。同様に、サイクルＴ１のスロットＣ２でバスコマンドと、次のアドレスを出力する。
【０１２０】
アドレスバスＩＡＢの内容と、バスコマンドに基づき、内蔵ＲＯＭ４の内容が、サイクルＴ１のスロットＣ２で内部データバスＩＤＢに得られ、これをサイクルＴ２のスロットＣ１（基準クロックφのハイレベル期間）で命令レジスタ（ＦＩＦＯ）２００及びリードデータバッファＲＤＢにラッチする。なお、この時の命令アドレスは４の倍数番地ではないので、内部データバスＩＤＢの下位側（ビット１５〜０）のみが使用される。同様にサイクルＴ２のスロットＣ１で、次のアドレスの内容を命令レジスタ（ＦＩＦＯ）２００及びリードデータバッファＲＤＢにラッチする。今回は、４の倍数番地であるので、内部データバスＩＤＢの上位（ビット３１〜１６）及び下位（ビット１５〜０）が使用される。
【０１２１】
サイクルＴ２のスロットＣ１で命令コード（ｊｍｐ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１２２】
自命令の第２ワード（ｊｍｐ−２）のリードが完了していないので、第１ステートＳＴ１を実行する。
【０１２３】
サイクルＴ２のスロットＣ２では、バスコマンドは無操作とされ、リード／ライトは開始されない。
【０１２４】
サイクルＴ３のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス＝１４）を、内部バスＧＢを経由して、アドレスバッファＡＢに格納し、アドレスバスＩＡＢに出力するとともに、バスコマンドを発行して、命令のリードを行なう。同様に、サイクルＴ４のスロットＣ２でバスコマンドと、次のアドレスを出力して、命令のリードを行なう。
【０１２５】
リードした内容を、サイクルＴ５のスロットＣ１、サイクルＴ６のスロットＣ１で、命令レジスタ（ＦＩＦＯ）２００及びリードデータバッファＲＤＢにラッチする。
【０１２６】
また、内部バスＧＢの内容は、ライトデータバッファＷＤＢとインクリメンタＩＮＣにも入力され、インクリメンタＩＮＣではインクリメント（＋２／＋４）が行われる。
【０１２７】
サイクルＴ４のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果（１６）が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。同様に、サイクルＴ５のスロットＣ１で、インクリメント（＋４）された結果（２０）が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０１２８】
サイクルＴ５のスロットＣ１で命令コード（ｍｏｖ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１２９】
自命令の第２ワード（ｍｏｖ−２）のリードが完了していないので、第１ステートＳＴ１を実行する。
【０１３０】
サイクルＴ５のスロットＣ２でバスコマンドと、次のアドレスを出力して、命令のリードを行なう。また、プログラムカウンタＰＣのインクリメントなどを行なう。
【０１３１】
サイクルＴ６のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス＝１０２）を、内部バスＧＢを経由して、アドレスバッファＡＢに格納し、アドレスバスＩＡＢに出力するとともに、バスコマンドを発行して、データのリードを行なう。第３ステートＳＴ３は省略（スキップ）される。
【０１３２】
リードしたデータは、サイクルＴ８のスロットＣ１でリードデータバッファＲＤＢに格納され、内部バスＷＢを経由して、汎用レジスタＥＲ０（実質的にはＲ０）にライトされる。また、リードデータバッファＲＤＢ上のデータを検査して、結果をコンディションコードレジスタＣＣＲの所定のビット（例えば、ネガティブＮ、ゼロＺ、オーバフローＶ）に反映する。この動作は、命令コード（ｍｏｖ−１）を解読した結果に基づき、行われるが、次の命令と重なった時間に実行される。
【０１３３】
サイクルＴ７のスロットＣ１で命令コード（ａｄｄ）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１３４】
サイクルＴ７のスロットＣ２でバスコマンドと、次のアドレスを出力して、命令のリードを行なう。また、プログラムカウンタＰＣのインクリメントなどを行なう。
【０１３５】
サイクルＴ８のスロットＣ１で、汎用レジスタＥＲ１（Ｒ１）の内容を内部バスＧＢに読み出し、算術論理演算器ＡＬＵに入力する。また、汎用レジスタＥＲ０（Ｒ０）の内容を内部バスＤＢに読み出そうとするが、前命令のライトと競合しているために、リードデータバッファＲＤＢから読み出し（遅延時間を最小限にできる）、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵには加算が指示される。
【０１３６】
サイクルＴ８のスロットＣ２で、汎用レジスタＥＲ１（Ｒ１）に演算結果を格納する。また、演算結果を検査して、結果をコンディションコードレジスタＣＣＲの所定のビット（例えば、ネガティブＮ、ゼロＺ、オーバフローＶ、キャリＣ、ハーフキャリＨ）に反映する。
【０１３７】
次の命令コードが、レジスタ間演算命令（ＮＸＴＭＯＮ１＝１）であるために、サイクルＴ７のスロットＣ２で、サブ命令デコーダ（ＤＥＣＳ）２０４に、命令コード（ｅｘｔｓ）を入力する。
【０１３８】
サイクルＴ８のスロットＣ２で、汎用レジスタＥＲ０の内容を内部バスＧＢに読み出そうとするが、前命令のライトと競合しているために、算術論理演算器ＡＬＵから読み出し（遅延時間を最小限にできる）、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵには拡張が指示される。
【０１３９】
サイクルＴ９のスロットＣ１で、汎用レジスタＥＲ０に演算結果を格納する。また、演算結果を検査して、結果をコンディションコードレジスタＣＣＲの所定のビット（例えば、ネガティブＮ、ゼロＺ、オーバフローＶ ）に反映する。
【０１４０】
サイクルＴ８のスロットＣ１で命令コード（ｍｏｖｌ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１４１】
自命令の第２ワード（ｍｏｖｌ−２）のリードが完了していないので、第１ステート（前置コード）ＳＴ１を実行する。
【０１４２】
サイクルＴ８のスロットＣ２でバスコマンドと、次のアドレスを出力して、命令のリードを行なう。また、プログラムカウンタＰＣのインクリメントなどを行なう。また、制御信号を発生して、次の命令コードへ指示（この場合は、ロングワードサイズ指示）を伝達する。
【０１４３】
サイクルＴ９のスロットＣ１で命令コード（ｍｏｖｌ−２）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１４４】
自命令の第３ワード（ｍｏｖｌ−３）のリードが完了しており、第２ステートＳＴ２を省略（スキップ）する。次の命令のリードが発行されていないので、第４ステートを実行する。
【０１４５】
図１１の動作を、専ら図１０との相違点に関し説明すれば、以下の通りである。サイクルＴ５のスロットＣ１で命令コード（ｍｏｖ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。このとき、自命令の第２ワード（ｍｏｖ−２）のリードが完了しており、第１ステートＳＴ１を省略（スキップ）する。また、次の命令のリードが発行されているため、第３ステートＳＴ３が省略（スキップ）される。
【０１４６】
サイクルＴ６のスロットＣ１で命令コード（ａｄｄ）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１４７】
次の命令コードは、レジスタ間演算命令であるが、次の次の命令のリードが完了していないため、サブ命令デコーダ（ＤＥＣＳ）２０４への命令コード（ｅｘｔｓ）の入力は行なわない。
【０１４８】
サイクルＴ７のスロットＣ１で命令コード（ｅｘｔｓ）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１４９】
算術論理演算器ＡＬＵを使用して演算を行なう。レジスタの競合は発生しないので、汎用レジスタＥＲ０を読み出す。
【０１５０】
サイクルＴ８のスロットＣ１で、命令コード（ｍｏｖｌ−１）が前置コードであることを判定（ＮＸＴＭＯＮ２＝１）し、命令コード（ｍｏｖｌ−２）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。自命令の第３ワード（ｍｏｖｌ−３）のリードが完了していないので、第２ステートＳＴ２を実行する。次の命令のリードが完了しており、第４ステートを省略（スキップ）する。
【０１５１】
図１２の動作を、主に図１０との相違点に関し説明すれば、以下の通りである。サイクルＴ２のスロットＣ１で命令コード（ｊｍｐ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。自命令の第２ワード（ｊｍｐ−２）のリードが完了しており、第１ステートＳＴ１を省略（スキップ）する。それ以降の動作は、図１０と同様である。
【０１５２】
図１３の動作を、主に図１０との相違点に関し説明すれば、以下の通りである。  図１２と同様に、サイクルＴ２のスロットＣ１で命令コード（ｊｍｐ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。自命令の第２ワード（ｊｍｐ−２）のリードが完了しており、第１ステートを省略（スキップ）する。それ以降の動作は、図１１と同様である。
【０１５３】
前記５命令を、従来技術では１２ステートで実行可能とされている。これに対して、図１０では９ステート、図１１、図１２では８ステート、図１３では７ステートで実行している。処理に必要なステート数を５８〜７５％に短縮している。分岐先が４の倍数番地かどうかによって、ばらつきがあるが、分岐先が４の倍数番地でない場合に、内部データバスＩＤＢの上位側を使用できず、内部バスのスループットが低下するためである。
【０１５４】
所定のプログラムの処理速度を向上するために、４の倍数番地に所望のプログラムを配置したい場合には、アセンブラに４の倍数番地へアライメントする制御命令を設け、これを利用することができる。かかる制御命令は、例えば、平成４年５月（株）日立製作所発行『Ｈ８Ｓ，Ｈ８／３００シリーズクロスアセンブラ』ｐ６２などに記載されている。アライメントする制御命令は、マイクロコンピュータの命令に変換されなく、変更によるプログラム品質などを大きく損なうことはない。
【０１５５】
また、以上の動作タイミング例においては、短いプログラムで、しかも分岐命令直後で、かつ、更に、分岐命令を実行しているため、本発明の改善の効果は必ずしも、最大限に表現されているとは言えない。
【０１５６】
例えば、レジスタ間演算命令のみを実行し続けるような場合は、ＡＬＵ、ＡＬＵＳを交互に動作させていくことにより、実効的に１ステートに２命令実行し、従来技術に対して５０％に短縮できる。
【０１５７】
また、バス幅を拡張した分を、省略可能なステートを省略（スキップ）して高速化を実現しているから、典型的には、命令リードの時間を半分にできる。命令リードを８０％、データアクセスを２０％とすると、６０％に、命令リードを７０％、データアクセスを３０％とすると、６５％に短縮できることになる。
【０１５８】
プログラムの内容に依存するが、プログラム全体としては、５０〜７５％程度の改善の効果が得られる。
【０１５９】
図１４にはインクリメンタＩＮＣのブロック図が例示されている。インクリメンタＩＮＣはプログラムカウンタＰＣのインクリメント（＋２／＋４）を行なう。
【０１６０】
前述の通り、２組の算術論理演算器ＡＬＵ、ＡＬＵＳがあるのに対して、インクリメンタＩＮＣは２組でなく、１組とされる。分岐命令などを除き、プログラムカウンタＰＣのインクリメントは＋４とされる。従って、通常入力されるプログラムカウンタＰＣの下位２ビットは、２’ｂ００となる。
【０１６１】
インクリメンタＩＮＣは、各ビットハーフアダー３００で構成され、内部バスＧＢを入力とし、内部バスＰＣＷＢへ出力を行なう。ビット１のみ、データ入力を論理和回路（ＯＲ）３０１によって論理値１（＋２）に固定し、更に、キャリ（論理値１）を入力（＋２）する。すなわち、＋２を二重に行なうことによって＋４を実現する。
【０１６２】
分岐命令の場合、分岐先のアドレスが４の倍数番地（ビット１が０）であれば、分岐命令以外と同様に、＋４が行われる。分岐先のアドレスが４の倍数番地でなければ（ビット１が１）、前記論理和回路３０１による＋２の意味がないから、キャリ入力の＋２のみが行われる。
【０１６３】
これによって、分岐先のアドレスによって、自動的に＋２／＋４の選択が行なわれる。換言すれば、入力された内容より大きく、その内最も小さい４の倍数が出力される。
【０１６４】
図１５にはライトデータバッファＷＤＢのブロック図が例示される。ライトデータバッファＷＤＢは３つの部分ＷＤＢ−Ｍ、ＷＤＢ−Ｓ、ＷＤＢ−ＯＵＴから構成され、ＷＤＢ−Ｍには、内部バスＧＢからの入力が可能とされ、ＷＤＢ−ＭからＷＤＢ−Ｓへの転送が可能とされ、更に、ＷＤＢ−Ｍ及びＷＤＢ−ＳからＷＤＢ−ＯＵＴへの転送が可能とされると共に、ＷＤＢ−ＯＵＴには、内部バスＧＢ、ＤＢからの入力が可能とされる。一方、ＷＤＢ−Ｍ、ＷＤＢ−Ｓからは内部バスＧＢへ出力可能とされる。データバスＩＤＢへの出力は、ＷＤＢ−ＯＵＴから行なう。
【０１６５】
待避すべきプログラムカウンタＰＣの値は予めライトデータバッファＷＤＢに格納しておくこととするライトデータバッファＷＤＢに、待避すべきプログラムカウンタＰＣの値を予め格納しておくことは、特開昭６２-２９３６６５号公報に記載されているが、本発明では、自命令の命令コード長、そして命令実行開始時に実行中の命令リードの状態（ＩＦＭＯＮ）によって、待避すべきプログラムカウンタＰＣ値の出力方法を相違させる。
【０１６６】
具体的には、４の倍数番地に存在する１ワード命令で、命令リード中であれば（ＩＦＭＯＮ＝１）、待避すべきプログラムカウンタＰＣの値をＷＤＢ−Ｓから内部データバスＩＤＢに得る。その時、ＰＣ値のビット１を１に固定する。
【０１６７】
４の倍数番地に存在する１ワード命令で、命令リード中でなければ（ＩＦＭＯＮ＝０）、待避すべきプログラムカウンタＰＣの値をＷＤＢ−Ｍから内部データバスＩＤＢに得る。また、その時のＰＣ値のビット１を１に固定する（図２１のＴ８部分参照）。
【０１６８】
４の倍数番地に存在しない１ワード命令で、命令リード中であれば（ＩＦＭＯＮ＝１）、待避すべきＰＣの値をＷＤＢ−Ｓから内部データバスＩＤＢに得る。そのときのＰＣ値のビット１に対する１固定は行なわない。
【０１６９】
４の倍数番地に存在しない１ワード命令で、命令リード中でなければ（ＩＦＭＯＮ＝０）、待避すべきプログラムカウンタＰＣの値をＷＤＢ−Ｍから内部データバスＩＤＢに得る。そのときのＰＣ値のビット１に対する１固定は行なわない（図２０のＴ９部分参照）。
【０１７０】
４の倍数番地に存在する２ワード命令で、命令リード中であれば（ＩＦＭＯＮ＝１）、待避すべきプログラムカウンタＰＣ値をＷＤＢ−Ｍから内部データバスＩＤＢに得る。前記ビット１の固定は行なわない。
【０１７１】
４の倍数番地に存在する２ワード命令で、命令リード中でなければ（ＩＦＭＯＮ＝０）、ＰＣから待避すべきプログラムカウンタＰＣの値を内部データバスＩＤＢに得る。ビット１の固定は行なわない（図１９のＴ８部分参照）。
【０１７２】
４の倍数番地に存在しない２ワード命令で、命令リード中であれば（ＩＦＭＯＮ＝１）、待避すべきプログラムカウンタＰＣの値をＷＤＢ−Ｓから内部データバスＩＤＢに得る。その時、ＰＣ値のビット１を１に固定する。
【０１７３】
４の倍数番地に存在しない２ワード命令で、命令リード中でなければ（ＩＦＭＯＮ＝０）、待避すべきプログラムカウンタＰＣ値をＷＤＢ−Ｍから内部データバスＩＤＢに得る。その時、ＰＣ値のビット１を１に固定する（図１８のＴ１０部分参照）。
【０１７４】
また、プログラム相対のアドレッシングモードは、次の命令のアドレスを基準にディスプレースメント（相対値）が加算されるが、これに用いる次の命令のアドレスは、サブルーチン分岐命令時に待避するプログラムカウンタＰＣの値と同じ値になるから、上記のライトデータバッファＷＤＢの内容を使用することができる。即ち、上記同様に、ＷＤＢ−Ｍ、ＷＤＢ−ＳまたはプログラムカウンタＰＣから、適宜、内部バスＧＢへ次の命令のアドレスを読み出し、算術論理演算器ＡＬＵなどでディスプレースメントと加算を行なえばよい。ビット１を１にセットすることは、算術論理演算器ＡＬＵで行なってもよいし、内部バスＧＢ上、或いは、ライトデータバッファＷＤＢ又はプログラムカウンタＰＣ上で行なってもよい。
【０１７５】
図１６にはプログラム相対分岐アドレス計算用の算術演算器ＡＵの一例が示される。算術演算器ＡＵは、１ワード長のプログラム相対分岐命令の実行開始に先立って、ライトデータバッファＷＤＢに格納されたプログラムカウンタＰＣの値（単にＰＣ値とも称する）をマルチプレクサＭＰＸ経由で入力する。１ワード長のため、プログラムカウンタＰＣは使用しない。更に算術演算器ＡＵは、リードデータバッファＲＤＢまたは命令レジスタ（ＦＩＦＯ）２００に保持された、命令コード中に含まれる８ビットディスプレースメントを、内部バスＤＢを経由して入力する。算術演算器ＡＵは双方の入力を加算する。かかる分岐命令が４の倍数番地に存在するとき、更に、制御信号ｐｌｓ２によって、ＰＣ値のビット１を１に固定して、実効的に＋２を同時に行なうことが可能にされる。
【０１７６】
プログラム相対分岐アドレス計算用の演算器ＡＵを持つことにより、算術論理演算器ＡＬＵの動作状態に拘らず、分岐アドレスの計算ができ、分岐の高速化が実現できる。
【０１７７】
プログラム相対のアドレッシングモードは、分岐命令に限定されず、転送命令などにも使用でき、かかる算術論理演算器ＡＵによって、実効アドレスの計算を高速にし、ひいては命令の処理速度を向上できる。
【０１７８】
図１７にサブルーチン分岐命令（ＪＳＲ ＠ａａ：２４）の動作タイミングが示される。同図の表現形式は図９の場合と同様である。図１７において、第３ステートＳＴ３に、プログラムカウンタＰＣのスタックのためのステートが挿入される他は、図９の分岐命令と同様である。第１ステートＳＴ１は、自命令の第２ワードのリードの完了を待つためであり、第２ワードがリード済みであれば省略（スキップ）する。第２ステートＳＴ２の分岐先アドレスの命令リード、第３ステートＳＴ３のスタック、第４ステートＳＴ４の次の命令のリードは、サブルーチン分岐命令に固有の動作であり、省略（スキップ）されない。
【０１７９】
図１８及び図１９にはサブルーチン分岐命令を含むプログラムの実行タイミング図の一例が示される。各図には、分岐命令で分岐した先で、以下のプログラムＬ０  ＪＭＰ      Ｌ１
Ｌ１  ＭＯＶ．Ｗ  ＠ａａ１，Ｒ０
ＪＳＲ      Ｌ２
を実行した場合のタイミングが示されている。図１８及び図１９では、命令の配置されるアドレスが相違され、ラベルは、図１８では、Ｌ０＝２，Ｌ１＝１４，Ｌ２＝４０，即ち、
Ｌ０  ．ＥＱＵ      ２
Ｌ１  ．ＥＱＵ      １４
Ｌ２  ．ＥＱＵ      ４０、
図１９では、Ｌ０＝２，Ｌ１＝１２，Ｌ２＝４０，即ち、
Ｌ０  ．ＥＱＵ      ２
Ｌ１  ．ＥＱＵ      １２
Ｌ２  ．ＥＱＵ      ４０
とされる。
【０１８０】
サブルーチン分岐命令は２ワード長の命令コードを持ち、図１８では、サブルーチン分岐命令が、アドレス１８（〜２１）に存在するから、待避すべき、ＰＣ値の内容は２２である。また、図１９では、サブルーチン分岐命令が、アドレス１６（〜１９）に存在するから、待避すべきＰＣ値の内容は２０である。尚、図１８、図１９において、サブルーチン分岐命令実行前までの動作タイミングは、図１０、図１１と同じである。
【０１８１】
図１８では、サイクルＴ７のスロットＣ１で命令コード（ｊｓｒ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。この時点で、 ＰＣ値は次に命令リードすべきアドレス（２４）、ライトデータバッファＷＤＢ−Ｍには前回の命令リード時のアドレス（２０）、ＷＤＢ−Ｓには前前回の命令リード時のアドレス（１６）が格納されている。
【０１８２】
サイクルＴ７のスロットＣ２で、ＷＤＢ−Ｍの内容を、ＷＤＢ−ＯＵＴ（２０）に転送する。
【０１８３】
サイクルＴ９のスロットＣ１で、スタックポインタＳＰを内部バスＧＢに読み出し、算術論理演算器ＡＬＵに入力してデクリメント（−４）を行なう。
【０１８４】
サイクルＴ９のスロットＣ２で、デクリメントした結果を、内部バスＷＢに読み出して、スタックポインタＳＰにライトするとともに、内部バスＧＢにも読み出して、アドレスバッファＡＢに格納して、内部アドレスバスＩＡＢに出力する。また、同時にロングワードデータライトのバスコマンドを発行する。
【０１８５】
ライトデータは、サイクルＴ１０のスロットＣ１で、ＷＤＢ−ＯＵＴの内容を、ビット１を１に固定して出力し、この内容（２２）がスタックに格納される。
【０１８６】
図１９では、サイクルＴ６のスロットＣ１で命令コード（ｊｓｒ−１）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１８７】
この時点で、ＰＣ値は次に命令リードすべきアドレス（２０）、ライトデータバッファＷＤＢ−Ｍには前回の命令リード時のアドレス（１６）、ＷＤＢ−Ｓには前前回の命令リード時のアドレス（１２）が格納されている。
【０１８８】
サイクルＴ７のスロットＣ２で、ＰＣ値の内容（２０）を、内部バスＤＢを経由して、ＷＤＢ−ＯＵＴに転送する。
【０１８９】
サイクルＴ７のスロットＣ１で、スタックポインタＳＰを内部バスＧＢに読み出し、算術論理演算器ＡＬＵに入力してデクリメント（−４）を行なう。サイクルＴ７のスロットＣ２で、デクリメントした結果を、内部バスＷＢに読み出して、スタックポインタＳＰにライトするとともに、内部バスＧＢにも読み出して、アドレスバッファＡＢに格納して、内部データバスＩＡＢに出力する。また、同時にロングワードデータライトのバスコマンドを発行する。
【０１９０】
ライトデータは、サイクルＴ８のスロットＣ１で、ＷＤＢ−ＯＵＴの内容を出力し（ビット１の固定は行なわない）、この内容（２２）がスタックに格納される。
【０１９１】
図２０、図２１には別のサブルーチン分岐命令を含むプログラムの実行タイミングの一例が示される。
【０１９２】
図２０では、サブルーチン分岐命令として、アドレッシングモードを絶対アドレスではなく、メモリ間接を使用し、分岐命令で分岐した先で、以下のプログラム
0003740321.tif 000003
を実行した場合のタイミング図が示されている。この場合の、ラベルは、Ｌ０＝２，Ｌ１＝１４，Ｌ２＝４０，Ｌ３＝１６０、即ち、
Ｌ０    ．ＥＱＵ        ２
Ｌ１    ．ＥＱＵ        １４
Ｌ２    ．ＥＱＵ        ４０
Ｌ３    ．ＥＱＵ        １６０
としている。なお、メモリ間接では、命令コード中に含まれるアドレス（Ｌ３）に従って、メモリをリードし、リードした内容（Ｌ２）が分岐アドレスとなる。
【０１９３】
図２０のタイミングはサブルーチン分岐命令実行前までは、図１０と同じとされる。図２０のサイクルＴ７のスロットＣ１で命令コード（ｊｓｒ）がデコーダ（ＤＥＣ）２０３に入力されて、命令の内容が解読される。
【０１９４】
この時点で、 ＰＣ値は次に命令リードすべきアドレス（２４）、ライトデータバッファＷＤＢ−Ｍには前回の命令リード時のアドレス（２０）、ＷＤＢ−Ｓには前前回の命令リード時のアドレス（１６）が格納されている。
【０１９５】
サイクルＴ７のスロットＣ２で、ＷＤＢ−Ｍの内容を、ＷＤＢ−ＯＵＴ（２０）に転送する。サイクルＴ９のスロットＣ１で、スタックポインタＳＰを内部バスＧＢに読み出し、算術論理演算器ＡＬＵに入力してデクリメント（−４）を行なう。サイクルＴ９のスロットＣ２で、デクリメントした結果を、内部バスＷＢに読み出して、スタックポインタＳＰにライトするとともに、内部バスＧＢにも読み出して、アドレスバッファＡＢに格納して、内部データバスＩＡＢに出力する。また、同時にロングワードデータライトのバスコマンドを発行する。
【０１９６】
ライトデータは、サイクルＴ１０のスロットＣ１で、ＷＤＢ−ＯＵＴの内容を、ライトアドレスのビット１を１に固定して、出力し、この内容（２２）がスタックに格納される。
【０１９７】
図２１では、サブルーチン分岐命令として、アドレッシングモードとしてプログラムカウンタ相対を使用し、分岐命令で分岐した先で、以下のプログラム
0003740321.tif 000004
を実行した場合のタイミングを示す。この場合のラベルは、Ｌ０＝２，Ｌ１＝１２，Ｌ２＝４０、即ち、
Ｌ０    ．ＥＱＵ      ２
Ｌ１    ．ＥＱＵ      １２
Ｌ２    ．ＥＱＵ      ４０
とされる。この場合、ＢＳＲのディスプレースメントは、２２（１０進数）とされる。
【０１９８】
図２１において、サブルーチン分岐命令実行前までは、図１１のタイミングと同じとされる。サイクルＴ６のスロットＣ１で、ライトデータバッファＷＤＢに格納されたＰＣ値（１６）と、リードデータバッファＲＤＢに保持した８ビットディスプレースメント（２２）が、算術演算器ＡＵに入力され、更に、ＰＣ値のビット１の１固定が指示されて、加算が行なわれ、加算結果（４０）がサイクルＴ６のスロットＣ２で、内部バスＧＢに出力され、アドレスバッファＡＢに格納され、内部アドレスバスＩＡＢに出力される。
【０１９９】
また、サイクルＴ６のスロットＣ２で、ライトデータバッファＷＤＢ−Ｍの内容（１６）が、ＷＤＢ−ＯＵＴに転送され、サイクルＴ９のスロットＣ１で、１に固定されて、内部データバスＩＤＢに出力される。この内容（１８）がリターンアドレスとしてスタックに書込まれる。尚、ビット１の１固定は、ＢＳＲの存在するアドレスのビット１が０であることに呼応して行われる。
【０２００】
図２２及び図２３にはデコーダ（ＤＥＣ）２０３に含まれる、図８の転送命令に対するデコード論理の一部の論理記述が示される。同図に示された論理記述は、ＲＴＬ（Register Transfer Level）若しくはＨＤＬ（Hardware Description Language）記述と呼ばれ、公知の論理合成ツールを用いることによって論理回路に展開することができる。ＨＤＬはＩＥＥＥ１３６４として標準化されている。これに示される論理記述の構文は、ケース（ｃａｓｅ）文に準拠しており、ａｌｗａｙｓ＠の次の（）内で定義された値若しくは信号に変化が有ったとき、それ以下の記述行の処理を行う、という記述内容になっている。尚、「５’ｂ００００１」は５ビット長のバイナリデータ００００１を意味する。ＩＲ［８］はインストラクションレジスタＩＲ（ＤＥＣの入力値）の最下位から９ビット目の論理値を意味する。記号〜は論理値反転を意味する。
【０２０１】
図２２及び図２３の論理記述は、転送命令“ＭＯＶ．Ｗ ＠ａａ：１６，Ｒｄ”のコードを解読するための論理記述に相当する。図２２及び図２３の論理記述において、ｃａｓｅｘ（ＩＲ）の次行に記述された１６‘ｂ０１１０＿１０１？＿？？００＿？？？？がその転送命令のコードを意味する。ＩＲ［８］＝０のときバイトサイズ、 ＩＲ［８］＝１のときワードサイズ、ＩＲ［７］＝０のときメモリ→汎用レジスタ（リード型）、ＩＲ［７］＝１のとき汎用レジスタ→メモリ（ライト型）、の転送を意味する。その命令において、第１ステートＳＴ１、第３ステートＳＴ３を省略するかは、信号ＦＩＦＯＣＮＴ１，ＦＩＦＯＣＮＴ２，ＩＦＭＯＮの状態に従って決定する。即ち、その論理記述では、ステージコードＴＭＧに従って制御信号を生成するようになっており、現時点でのステージコードＴＭＧの値とその時のＦＩＦＯＣＮＴ１，ＦＩＦＯＣＮＴ２，ＩＦＭＯＮの値等にしたがって、次のステージコードＮＥＸＴＴＭＧの値を決定するようになっており、これによって、第１ステートＳＴ１、第３ステートＳＴ３を省略するかを決定する。図２２を参照するに、第1ステートＳＴ１のステージコードは１、第２ステートＳＴ１のステージコードは１７、第３ステートＳＴ１のステージコードは３である。
【０２０２】
詳しくは、図２２における論理記述の第１の部分（１−１）でステージコードＴＭＧが生成される。ステージコードＴＭＧは１→１７→３と進行するが、ＦＩＦＯＣＮＴ１、ＦＩＦＯＣＮＴ２、ＩＦＭＯＮの状態によって、ステージコード１７、ステージコード３は省略される。ステージコード１で、自命令の第２ワードがリード済み（ＦＩＦＯＣＮＴ１＝１）であれば、データのリード／ライトの制御を行なう。ステージコード１で、自命令の第２ワードがリード済みでなければ（ＦＩＦＯＣＮＴ１＝０）、ステージコード１７に進み、データのリード／ライトの制御を行なう。
【０２０３】
論理記述の第２の部分（１−２）でバス制御を行なう。ｎｏｐ＝０はバスアクセス開始、 ｎｏｐ＝１はバスアクセス禁止を指示する。ｄａｔａ＝０は命令リード、ｄａｔａ＝１はデータアクセスを指示する。 ｂｙｔｅ＝０はワードサイズ、ｂｙｔｅ＝１はバイトサイズを指示する。 ｗｒｉｔｅ＝０はリード、 ｗｒｉｔｅ ＝１はライトを指示する。
【０２０４】
本転送命令の場合、ステージコード１で自命令の第２ワードがリード済みでない場合、及びステージコード３で命令リードを行い、ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、データアクセスを行なう。データアクセスのリード／ライトはＩＲ［７］によって指示される。命令リードの場合は所定のタイミングで内部データバスＩＤＢの内容がＩＲとリードデータバッファＲＤＢに格納される。データリードの場合は所定のタイミングで内部データバスＩＤＢの内容がリードデータバッファＲＤＢに格納される。データライトの場合は所定のタイミングでライトデータバッファＷＤＢの内容が内部データバスＩＤＢに出力される。
【０２０５】
図２３の論理記述の第３の部分（１−３）で実効アドレスを計算する。本転送命令の場合、ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、リードデータバッファＲＤＢに保持している命令コードのＥＡ拡張部１６ビットを、ｒｄｂｅｘｔ信号によって３２ビットに符号拡張した上、内部バスＧＢに出力する。ステージコード１で自命令の第２ワードがリード済みでない場合、及びステージコード３で、 ＰＣ値の内部バスＰＣＧＢへの読み出しと、アドレスバスＡＢ、インクリメンタＩＮＣへの入力、及び、インクリメント結果の内部バスＰＣＷＢからプログラムカウンタＰＣへの格納が指示される。なお、アドレスバッファＡＢへは、内部バスＰＣＧＢからの入力が指示されない場合、内部バスＧＢから入力されるようにされている。尚、ｒｄｂｇｂはリードデータバッファＲＤＢの尚用をバスＧＢに出力する指示信号、ｒｄｂｅｘｔはリードデータバッファＲＤＢを符号拡張する指示信号である。
【０２０６】
図２３における論理記述の第４の部分（１−４）で、転送データ及びレジスタを制御する。リード型（ＩＲ［７］＝０）の場合は、ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、リードデータをリードデータバッファＲＤＢからバスＷＢへ出力し、汎用レジスタへ（Ｒｄ）へ格納する。コンディションコードレジスタＣＣＲの、Ｎ、Ｚ、Ｖフラグの更新を指示する。図８等に示した通り、かかる動作は制御が遅延される。遅延回路自体は図示されない。
【０２０７】
ライト型（ＩＲ［７］＝１）の場合は、ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、汎用レジスタ（Ｒｄ）から内部バスＤＢへデータを出力し、いずれの場合もライトデータバッファＷＤＢに格納する。また、コンディションコードレジスタＣＣＲの、Ｎ、Ｚ、Ｖフラグの更新を指示する。
【０２０８】
図２４乃至図２６にはデコーダ（ＤＥＣ）２０３に含まれる、図９及び図１７の分岐命令／サブルーチン分岐命令に対するデコード論理の一部の論理記述が示される。同図の表現形式は前記図２２及び図２３の場合と同様である。図２４乃至図２６のデコード論理では、ＩＲ［１０］＝０のとき分岐（ＪＭＰ）、ＩＲ［１０］＝１のときサブルーチン分岐（ＪＳＲ）、とされている。
【０２０９】
図２４に示される論理記述の第１の部分（２−１）でステージコードＴＭＧが生成される。ステージコードＴＭＧは１→１７→２→３と進行するが、ＦＩＦＯＣＮＴ１、ＦＩＦＯＣＮＴ２、ＩＦＭＯＮの状態によって、ステージコード１７は省略される。ステージコード１で、自命令の第２ワードがリード済み（ＦＩＦＯＣＮＴ１＝１）であれば、実効アドレス計算と分岐先の命令リードの制御を行なう。ステージコード１で、自命令の第２ワードがリード済みでなければ（ＦＩＦＯＣＮＴ１＝０）、ステージコード１７に進み、実効アドレス計算と分岐先の命令リードの制御を行なう。
【０２１０】
図２４に示される論理記述の第２の部分（２−２）でバス制御を行なう。本転送命令の場合、ステージコード１で自命令の第２ワードがリード済みでない場合、バスアクセスは禁止状態となる。ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、分岐先の命令リードを行なう。サブルーチン分岐の場合は、ステージコード２に進み、ＰＣ値のスタックのためのロングワードサイズのデータライトを行なう。ステージコード２では、リード済みの分岐先命令に続く命令リードを行なう。
【０２１１】
図２５に示された論理記述の第３の部分（２−３）で実効アドレスを計算する。本転送命令の場合、ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、リードデータバッファＲＤＢに保持している命令コードのＥＡ拡張部を内部バスＧＢに出力し、アドレスバッファＡＢに格納する。この内容は自動的にインクリメンタＩＮＣに入力され、インクリメント（＋２／＋４）が行われる。また、インクリメント結果のプログラムカウンタＰＣへの格納が指示される。また、ステージコード３で、ＰＣ値の内部バスＰＣＧＢへの出力と、インクリメント結果の内部バスＰＣＷＢからプログラムカウンタＰＣへの格納が指示される。
【０２１２】
図２６に示された論理記述の第４の部分（２−４）で、転送データ（スタックされるＰＣ）とレジスタを制御する。ステージコード１で自命令の第２ワードがリード済みの場合、またはステージコード１７で、スタックポインタの内容の内部バスＧＢへの読み出しを指示する。算術論理演算器ＡＬＵに入力され、図示されないものの、算術論理演算器ＡＬＵには、デクリメント（−４）が指示される。
【０２１３】
ステージコード２でデクリメント結果を、算術論理演算器ＡＬＵから内部バスＧＢへ出力する指示が与えられる。これによってデクリメント結果はアドレスバッファＡＢに格納される。また、内部バスＷＢからスタックポインタＳＰへの格納が指示される。
【０２１４】
また、前記の通り、サブルーチン分岐命令が存在したアドレスをＡ１として保持し、命令コードと同時にデコードする。かかるアドレス情報と命令リード実効中を示す信号ＩＦＭＯＮを用いて、ライトデータバッファＷＤＢ−ＯＵＴへ転送する値が、ＰＣ、ＷＤＢ−Ｍ、ＷＤＢ−Ｓの何れかから選択される。また、前記アドレス情報に基づいて、出力するデータのビット１を１にセット（＋２）するかが選択される。
【０２１５】
かかる制御によって、命令の配置に依存せず、また、適宜、命令のステートを省略しつつ、実行することが実現される。
【０２１６】
尚、省略可能なステートを持つことができず、また、算術論理演算器ＡＬＵとサブ算術論理演算器ＡＬＵＳの交互の動作を利用して、プログラムカウンタＰＣのインクリメントを行なわずに実行することができない命令が存在する場合には、ＦＩＦＯＣＮＴ２の状態などを参照して、バスコマンドの発行と、ＰＣインクリメントを禁止するようにすればよい。例えば、図２２乃至図２６において、第２の部分（１−２，２−２）でｎｏｐ＝１とし、第３の部分（１−３，２−３）で、ｉｎｃｐｃ＝０とすればよい。これによって、命令の実行（消費）量より、命令リード量が大きくなってしまい、命令レジスタ（ＦＩＦＯ）２００がオーバフローしたり、サブルーチン分岐命令などにおいて待避すべきプログラムカウンタＰＣの内容が失われてしまったりすることを防止できる。
【０２１７】
以上より以下の作用効果を得ることができる。〔１〕既存のＣＰＵに対して、互換性を損なわずに、データバス幅を拡張して、命令リードを高速化するとともに、命令実行の制御を、命令固有の動作を含むステートと、命令のリードのみを行なうステートに分け、後者を省略（スキップ）可能にする。命令のリードを高速化した分を、命令実行の一部のステートを省略（スキップ）して、命令のリードの量と実行の量のバランスを採るとともに、命令の実行時間を短縮して、高速化を実現できる。命令の一部を省略（スキップ）可能とし、リード済みの命令の量に応じて、適宜省略（スキップ）することにより、命令の配置を任意（リロケータブル）にできる。命令の配置を任意（リロケータブル）にして、プログラムの作成を容易にしたり、Ｃコンパイラなどの開発上の制約をなくすることができる。
【０２１８】
〔２〕レジスタ間演算命令のように、１ワード（基本単位長）の命令コードを持ち、１ステート（単位時間）で実行し、省略（スキップ）可能なステートを持たない命令に対して、演算器を複数設け、かかる演算器を、実行のための資源の実行時間よりも短い時間の差で、動作させることにより、複数のレジスタ間演算命令などを、実効的に同時に実行することができる。実効的に同時に動作する一方の命令の命令リードを省略し、命令のリードの量と実行の量のバランスを採るとともに、命令の実行時間を短縮して、高速化を実現できる。命令デコーダを、全ての命令に対応するもの（ＤＥＣ２０３）と、前記実効的に同時に動作する演算器の一方を専ら制御するもの（ＳＤＥＣ２０４）とすることによって、論理規模の増大を最小限にし、ひいては製造費用の増加も最小限にすることができる。演算器を時間差を持って動作させることによって、並列処理を行なわずに済み、汎用レジスタの競合などの対応を容易にし、かつ、論理規模の増大を抑止することができる。全ての命令に対応する命令デコーダ及び実行部ＥＸＥＣの各ブロックは、概略既存のＣＰＵの論理と大部分を共通にできるから、設計資産を有効に利用して、設計品質を向上したり、開発期間を短縮したりできる。
【０２１９】
〔３〕前置コードのように、制御信号のみを発生する命令コードはスキップ可能にし、スキップ時に制御信号のみを、命令デコーダを使用せずに、発生するようにすることにより、命令の実行時間を短縮して、高速化を実現できる。
【０２２０】
〔４〕分岐命令や割込み例外処理時に、分岐先の先頭命令をリードして、直ちに実行開始するようにして、応答性を維持向上できる。
【０２２１】
〔５〕命令レジスタに、命令コードと共に、その命令コードのアドレスバスＩＡＢのビット１の内容を格納し、命令デコーダ２０３で同時に判定することにより、制御を容易にし、デコード回路を簡略化し、論理規模の増大を抑止することができる。
【０２２２】
〔６〕分岐先命令リード後のＰＣインクリメントを、分岐先アドレスの内容に応じて、インクリメンタＩＮＣで自動的に＋２／＋４を切り替えることにより、分岐先が４の倍数番地かどうかに拘らず画一的な処理を行い、論理規模の増加を抑えることができる。
【０２２３】
〔７〕ライトデータバッファＷＤＢに、ＰＣインクリメント時に、インクリメントする前のＰＣの内容を格納し、更に、ライトデータバッファＷＤＢをＦＩＦＯ構造にしておくことにより、また、ライトデータバッファＷＤＢのビット１を論理値１に固定することを可能にして、＋２を容易に実現できる。サブルーチン分岐命令時の待避すべきＰＣ値を容易に得ることができる。また、ライトデータバッファＷＤＢに保持した待避すべきＰＣ値と、ディスプレースメントを加算する算術演算器ＡＵを持ち、ライトデータバッファＷＤＢから直接入力する経路を持つことにより、プログラム相対のアドレッシングモードの準備を高速にし、ひいては命令の処理速度を向上できる。また、プリフェッチカウンタとプログラムカウンタを別に持ち、更にインクリメンタを別に持つ必要がなく、論理規模の増大を抑止できる。
【０２２４】
〔８〕互換性を保った、アドレス空間の広いＣＰＵと狭いＣＰＵがある場合、双方に、互換性を維持しつつ、高速化を実現することができる。適宜必要な命令やアドレッシングモードを持つ様にすればよい。
【０２２５】
〔９〕既存の命令を実行可能にし、内部の動作の順序なども同等にしているから、既存のＣＰＵと比較して、将来拡張余裕を大きく損なうことがない。例えば、既存のＣＰＵに対して、新たな命令の追加が可能になった場合には、かかる技術を、本発明を適用したＣＰＵにも用いることができると考えられる。命令セットの互換性を維持していれば、機械語としては、既存のＣＰＵと同じ命令を追加することはできる。また、追加命令も、複数の実行ステート数をもつものであれば、固有の動作を行なう部分と省略可能なステートとに分け、後者を必要に応じて省略することは可能とすることはできる。少なくとも、必要に応じて命令のリードとＰＣインクリメントを禁止することはでき、既存ＣＰＵと同等の処理時間では実現可能である。追加命令が１ステートで実行可能であれば、 ＡＬＵとＡＬＵＳの交互の動作などによって高速化を実現できる。
【０２２６】
〔１０〕既存のＣＰＵと同じ命令セットとすることにより、アセンブラ、Ｃコンパイラ、シミュレータ／デバッガなどの開発ツール、いわゆるクロスソフトウェアを共通にすることができる。クロスソフトウェアを共通化することによって、逸早く開発環境を整えることができる。また、開発環境の開発に必要な資源を抑制でき、また、利用者にとっても、既存の開発環境を利用することによって、不所望の費用を回避することができる。
【０２２７】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０２２８】
例えば、本発明は、互換性を維持することとは別に、全く新規のマイクロコンピュータにも適用できる。命令セット即ち、命令の種類やアドレッシングモードの種類及びこれらの組合せなども任意にできる。汎用レジスタは、アドレス及びデータに共通に利用可能なものである必要はなく、一部または全部がアドレス専用またはデータ専用のものであってもよい。汎用レジスタのデータサイズについても任意とすることができる。
【０２２９】
前置コードの種類は特に限定はされない。また、前置コードは、ロングワードを指示する情報のほか、そのほかの制御情報を含んでもよい。また、命令コードの基本単位１６ビットに限定する必要はなく、８ビット或いは３２ビットなど任意のビット幅とできる。データバスの幅も３２ビットに限定されず、６４ビットなどでもよい。命令の基本単位の２倍でなく、４倍などでもよい。
【０２３０】
命令レジスタ（ＦＩＦＯ）の容量も３ワード分に限定されない。最小限２ワード以上あればよい。容量が大きければ、省略可能なステートを持たない命令が存在した場合にも、蓄積された命令を、続く命令実行で省略するステートを大きくして、命令の量のバランスを採ることができる。ただし、容量を大きくしても、分岐命令実行時にはリードした命令が無駄になってしまうから、通常、乃至は定常的な状態で、命令レジスタに存在する命令の量はあまり大きくしない方がよい。
【０２３１】
本発明では、並列処理を行なわないようにしているが、並列処理と組合せて構成することもできる。一部の命令を並列処理させてもよい。演算器や命令デコーダの数なども任意にできる。シングルチップマイクロコンピュータのその他の機能ブロックについても何等制約されない。
【０２３２】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であシングルチップマイクロコンピュータに適用した場合について説明したが、それに限定されるものではなく、その他のマイクロコンピュータまたはデータ処理装置も適用可能であり、本発明は少なくとも、命令を解読して処理し、演算処理を行なうデータ処理装置に適用することができる。
【０２３３】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【０２３４】
すなわち、（既存のＣＰＵに対して、）内部データバス幅を、少なくとも命令の基本単位（ワード）よりも大きくし、リードした命令を（複数単位）保持する命令レジスタを持ち、この命令レジスタに存在する命令の量を監視する手段を設け、（既存の）命令を、実行の基本単位時間（ステート）にしたがって、命令のリード（とＰＣインクリメント）のみの制御を行なうステートと、実効アドレスの計算やデータの演算処理の制御を含むステートに分割する。例えば、実効アドレスの計算やデータの転送処理が複数のステートに亘って動作する場合も、制御自体は１度に行い、制御信号に遅延を設けるなどして、実際の動作を複数のステート（例えば、アドレス計算を最初のステート、リードデータの格納を次のステート）に行なうようにし、制御信号を遅延させるべき動作（例えば、リードデータの格納）は、次の制御動作（ＰＣインクリメント）と重なっても同時に動作可能なように、実行手段を構成する。前記命令のリードのみの制御を行なうステートを省略可能にすると共に、前記命令レジスタに存在する量に従って（前記監視手段の指示に従い）、前記命令のリードのみの制御を行なうステートを省略を行なう（スキップする）。
【０２３５】
これにより、内部データバス幅を命令の基本単位（ワード）よりも大きくすることによって、一度にリードする命令の量を（既存のＣＰＵより）大きくでき、基本の実行ステートの場合、（既存のＣＰＵと同様に）自分の命令コード長に対応した回数の命令リードを行なうことにより、省略（スキップ）を行なわない場合には、実行した自命令の命令コードの量より、リードした命令の量を大きくして、リード済みの命令コードの量を蓄積でき、一方、省略（スキップ）を行なって、命令リードを行なわないことにより、実行した自命令の命令コードの量と、リードした命令の量を同等にして、リード済みの命令コードの量を維持したり、実行した自命令の命令コードの量より、リードした命令の量を少なくして、リード済みの命令コードの量を減少できるから、リード済みの命令の量を所定の範囲内に収めつつ（命令のリードの量と、命令の実行の量のバランスを取りつつ）、命令のリードを高速化して、全体の実行時間を短縮することができる。また、省略（スキップ）するステートを自動的に変えることによって、命令の配置の変更に対応できる。
【０２３６】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広い（命令セットの大きい）ＣＰＵとアドレス空間の小さい（命令セットの小さい）ＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、上記高速化を実現して、下位互換性をもつ、アドレス空間の小さいＣＰＵにも存在する命令について、同様に上記高速化を可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでも高速化を可能にできる。オブジェクトレベルで互換性を保つことによる利点と高速化を可能にすることの利点の双方を享受することができる。
【０２３７】
既存のＣＰＵと同じ命令セットとすることにより、アセンブラ、Ｃコンパイラ、シミュレータ／デバッガなどの開発ツール、いわゆるクロスソフトウェアを共通にすることができる。クロスソフトウェアを共通化することによって、逸早く開発環境を整えることができる。
【図面の簡単な説明】
【図１】本発明に係るデータ処理装置を適用したＣＰＵのブロック図である。
【図２】本発明に係るデータ処理装置を適用したシングルチップマイクロコンピュータのブロック図である。
【図３】図１のＣＰＵに内蔵されている汎用レジスタ及び制御レジスタに関するプログラミングモデルの説明図である。
【図４】別のＣＰＵに内蔵されている汎用レジスタ及び制御レジスタに関するプログラミングモデルの説明図である。
【図５】図１のＣＰＵ２における機械語の命令フォーマットの一例説明図である。
【図６】ＲＯＭの一例を示す説明図である。
【図７】ＣＰＵのアドレシングモードの説明図である。
【図８】転送命令“ＭＯＶ．Ｗ ＠ａａ：１６，Ｒｄ”の動作タイミングチャートである。
【図９】分岐命令“ＪＭＰ ＠ａａ：２４”の動作タイミングチャートである。
【図１０】ＣＰＵによるプログラムの実行タイミングの一例を示すタイミングチャートである。
【図１１】図１０とは命令配置アドレスの異なるプログラムの実行タイミングを例示するタイミングチャートである。
【図１２】図１０及び図１１とは命令配置アドレスの異なるプログラムの実行タイミングを例示するタイミングチャートである。
【図１３】図１０乃至図１２とは命令配置アドレスの異なるプログラムの実行タイミングを例示するタイミングチャートである。
【図１４】インクリメンタの一例を示すブロック図である。
【図１５】ライトデータバッファの一例を示すブロック図である。
【図１６】プログラム相対分岐アドレス計算用の算術演算器の一例を示すブロック図である。
【図１７】ＣＰＵによるサブルーチン分岐命令“ＪＳＲ ＠ａａ：２４”の動作タイミングを例示するタイミングチャートである。
【図１８】サブルーチン分岐命令を含むプログラムの実行タイミングを例示するタイミングチャートである。
【図１９】サブルーチン分岐命令を含むプログラムの実行タイミングを例示するタイミングチャートである。
【図２０】別のサブルーチン分岐命令を含むプログラムの実行タイミングを例示するタイミングチャートである。
【図２１】別のサブルーチン分岐命令を含むプログラムの実行タイミングを例示するタイミングチャートである。
【図２２】図８の転送命令に対するデコーダによるデコード論理の一部の論理記述を図２３と共に例示する説明図である。
【図２３】図８の転送命令に対するデコーダによるデコード論理の一部の論理記述を図２２と共に例示する説明図である。
【図２４】図９及び図１７の分岐命令／サブルーチン分岐命令に対するデコーダによるデコード論理の一部の論理記述を図２５及び図２６と共に例示する説明図である。
【図２５】図９及び図１７の分岐命令／サブルーチン分岐命令に対するデコーダによるデコード論理の一部の論理記述を図２４及び図２６と共に例示する説明図である。
【図２６】図９及び図１７の分岐命令／サブルーチン分岐命令に対するデコーダによるデコード論理の一部の論理記述を図２４及び図２５と共に例示する説明図である。
【符号の説明】
１  シングルチップマイクロコンピュータ
２  ＣＰＵ
４  ＲＯＭ
２００  命令レジスタ
２０２  命令レジスタコントローラ
２０３  命令デコーダ
２０４  サブ命令デコーダ
２０５  レジスタセレクタ
ＦＩＦＯＣＮＴ１，ＦＩＦＯＣＮＴ２  命令コード量検出信号
ＥＲ０〜ＥＲ７  汎用レジスタ
ＰＣ  プログラムカウンタ
ＡＬＵ  算術論理演算器
ＡＬＵＳ  サブ算術論理演算器
ＡＵ  算術演算器
ＩＮＣ  インクリメンタ
ＷＤＢ  ライトデータバッファ
ＲＤＢ  リードデータバッファ
ＡＢ  アドレスバッファ
【図１】
0003740321.tif 000005
【図２】
0003740321.tif 000006
【図３】
0003740321.tif 000007
【図４】
0003740321.tif 000008
【図５】
0003740321.tif 000009
【図６】
0003740321.tif 000010
【図７】
0003740321.tif 000011
【図８】
0003740321.tif 000012
【図９】
0003740321.tif 000013
【図１０】
0003740321.tif 000014
【図１１】
0003740321.tif 000015
【図１２】
0003740321.tif 000016
【図１３】
0003740321.tif 000017
【図１４】
0003740321.tif 000018
【図１５】
0003740321.tif 000019
【図１６】
0003740321.tif 000020
【図１７】
0003740321.tif 000021
【図１８】
0003740321.tif 000022
【図１９】
0003740321.tif 000023
【図２０】
0003740321.tif 000024
【図２１】
0003740321.tif 000025
【図２２】
0003740321.tif 000026
【図２３】
0003740321.tif 000027
【図２４】
0003740321.tif 000028
【図２５】
0003740321.tif 000029
【図２６】
0003740321.tif 000030