(57)【要約】【課題】  互換性を維持しつつニーズに応じた例外処理性能が得られ、しかも論理規模の縮小を図ることができる技術を提供する。【解決手段】  命令を実行する実行手段を制御する制御手段（ＣＰＵ）に、（汎用レジスタのうち）指定可能な複数のレジスタの組み合わせを固定にし、複数のレジスタの待避／復帰命令（ＳＴＭ命令、ＬＤＭ命令）を有している。【選択図】    図１
2004295914.tif 000002
【特許請求の範囲】
【請求項１】
所定の命令を順次実行するデータ処理装置であって、
前記命令を実行する実行手段を制御する制御手段に、指定可能な複数のレジスタの組み合わせを固定にし、前記複数のレジスタの待避／復帰命令を有することを特徴とするデータ処理装置。
【請求項２】
前記待避／復帰命令は、指定することのできるレジスタの組み合わせの異なる複数種類であることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記待避命令と前記復帰命令は、指定することのできるレジスタの組み合わせが同じであることを特徴とする請求項１または２記載のデータ処理装置。
【請求項４】
前記待避／復帰させる複数のレジスタは、連続するレジスタ番号を有する複数のレジスタであることを特徴とする請求項１乃至３のいずれか１項記載のデータ処理装置。
【請求項５】
前記待避／復帰命令の命令コードのレジスタ指定部は、待避／復帰させる複数のレジスタの組み合わせを、最初に待避されるレジスタ番号で代表させることを特徴とする請求項４記載のデータ処理装置。
【請求項６】
待避／復帰命令で指定できるレジスタの組み合わせを固定にしたことを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、特に、半導体集積回路装置によって構成される高速かつ小型のシングルチップマイクロコンピュータに利用して有効な技術に関するものである。
【背景技術】
【０００２】
半導体集積回路装置の製造技術の高度化に伴って、半導体単結晶からなるシングルチップに、中央演算処理装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；以下、単にＣＰＵと称する）、プログラムを格納するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、書き替え可能に各種データを格納するＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を含む構成素子を集積して製造した、小型のシングルチップマイクロコンピュータ（以下、単にマイクロコンピュータと称する）が広範囲に普及してきており、種々の目的のデータ処理装置として使用されてきている。このマイクロコンピュータは、ＣＰＵが同時に処理し得る情報の量によって性能が異なり、例えば４ビット、８ビット、１６ビット、３２ビット等のマイクロコンピュータとして区分されている。
【０００３】
このようなマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化等が図られてきている。また、ＣＰＵは、ソフトウェアによってその性能が定義されているから、前記のようにアドレス空間の拡張や、命令セットの拡大、高速化等を図ったマイクロコンピュータにおいても、既存のマイクロコンピュータのソフトウェア資産を有効に利用できることが望ましい。
【０００４】
このため、オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セットの拡大、高速化等を実現した例として、例えば本出願人が先に提案した特許文献１、あるいは非特許文献１等がある。
【０００５】
前記ＣＰＵは、システムクロックの２周期である、いわゆる２ステートで基本命令を実行している。これに対して、１ステートで基本命令を実行するようにし、さらに、ＣＰＵとは独立して乗算器を内蔵して高速化を図った例として、例えば非特許文献２、あるいは非特許文献３等がある。このような乗算器は積和演算と乗算に利用する。
【０００６】
このように高速化を図ることによって、マイクロコンピュータによって制御される各種機器の高速化や高性能化、あるいは、従来においては複数の半導体集積回路装置で構成していたものを、結合したりすることにより小型化を図ることができるようになる。
【０００７】
また、前記のような各種機器の高速化や高性能化、あるいは小型化は、アドレス空間が比較的小さく、命令セットが比較的小さいＣＰＵあるいはマイクロコンピュータにおいても要求されるから、前記特許文献１等に記載されるアドレス空間の広いＣＰＵと、アドレス空間の小さいＣＰＵが存在する場合には、その双方の高速化を図ることが望ましい。
【０００８】
このような観点から、上位ＣＰＵを開発し、これをベースにして下位ＣＰＵへ展開できれば都合が良い。これによって、開発効率を向上することができる。さらに、半導体集積回路装置によって構成されるＣＰＵ自体の他に、クロスアセンブラやＣコンパイラ、シミュレータ、リアルタイムＯＳ等の開発ツール等の開発も共通化して、開発効率を向上することが望ましい。
【０００９】
【特許文献１】特開平６−５１９８１号公報
【００１０】
【非特許文献１】平成５年６月（株）日立製作所発行、「Ｈ８／３００Ｈシリーズプログラミングマニュアル」
【非特許文献２】平成４年１１月日経ＢＰ社発行、「日経エレクトロニクスＮＯ．５６８」、ＰＰ９９〜ＰＰ１１２
【非特許文献３】平成５年３月（株）日立製作所発行、「ＳＨ７０３２、ＳＨ７０３４  ハードウエアマニュアル」
【発明の開示】
【発明が解決しようとする課題】
【００１１】
前記のようなマイクロコンピュータにおいて、乗算器は専用の資源を必要とするから、必ずしも積和演算や乗算の高速化を必要としない場合には、費用対効果の点で得策でない。また、例えば前記非特許文献３においては、乗算結果は専用のレジスタ（ＭＡＣ）に得られるから、これを利用する場合には、別の命令によってそれをＣＰＵの汎用レジスタに転送しなければならない。乗算器を内蔵して乗算自体を高速化しても、そのように乗算結果を使用するまでの時間が長くなっては意味がない。
【００１２】
一方、従来のＣＰＵとの互換性を維持するためには、前記のように命令の追加は困難であり、追加する命令は最小限にしなければならない。また、演算結果等のフラグも互換性を保持する必要がある。積和演算についても、演算結果等のフラグを参照できれば使い勝手が良くなる。フラグの状態を判定して分岐する、いわゆる条件分岐命令などで演算結果を容易に判定し、処理の内容を変更することができるからである。かかるフラグには、オーバフロー（Ｖ）、ゼロ（Ｚ）、ネガティブ（Ｎ）などがある。
【００１３】
本発明の目的は、互換性を維持しつつニーズに応じた乗算性能が得られ、しかも処理性能の向上を図ることが可能な技術を提供することにある。
【００１４】
本発明の他の目的は、制御手段に乗算手段を内蔵して互換性を維持しつつ処理の高速化を図ることが可能な技術を提供することにある。
【００１５】
本発明のその他の目的は、乗算手段を制御手段から独立して設け、しかも制御手段に乗算機能を備えさせることにより、製造費用の低減が可能な技術を提供することにある。
【００１６】
本発明の前記ならびにそのほかの目的と新規な特長は、本発明書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１７】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１８】
（１）本発明のデータ処理装置は、命令を実行する実行手段を制御する制御手段と乗算手段を設け、前記制御手段と乗算手段とが並列動作する第１の命令とともに、前記乗算手段が動作する第２の命令を有し、乗算手段は前記制御手段に内蔵されている。また、第１の命令は積和命令であるとともに、第２の命令は乗算命令になっている。積和命令のアドレッシングモードは、いわゆるポストインクリメントレジスタ間接とする。乗算手段には結果を判定するフラグ検出手段を設け、乗算命令時はフラグ検出結果を制御手段に供給して、保持させる手段を設ける。
【００１９】
（２）本発明のデータ処理装置は、命令を実行する実行手段を制御する制御手段と乗算手段を設け、前記制御手段と乗算手段とが並列動作する第１の命令とともに、前記乗算手段が動作する第２の命令を有し、乗算手段は前記制御手段から独立して設けられている。また、制御手段は乗算機能を備えている。
【００２０】
（３）本発明のデータ処理装置は、命令を実行する実行手段を制御する制御手段に指定可能な複数のレジスタの組み合わせを固定にし、複数のレジスタの退避／復帰命令を有している。
【００２１】
（４）本発明のデータ処理装置は、命令を実行する実行手段を制御する制御手段に搭載されるコントロールレジスタの有効／無効を切り換える手段を有し、コントロールレジスタの有効時には、例外処理の遷移時、例外処理からの復帰時に、前記コントロールレジスタの待避／復帰を行い、前記コントロールレジスタの無効時には、例外処理の遷移時、例外処理からの復帰時に、前記コントロールレジスタの待避／復帰を行なわない。
【００２２】
（５）本発明のデータ処理装置は、命令を実行する実行手段を制御する制御手段の搭載される固定的なスタックレジスタを設け、エミュレーションプログラムへの遷移時、エミュレーションプログラムからの復帰時に、前記固定的なスタックレジスタ用いて、ユーザが使用するスタックポインタを無視あるいは保持するかを指定する手段を有している。
【００２３】
上記した（１）の手段によれば、乗算器（乗算手段）を内蔵することによって、アドレッシングモードの増加を最小限にして、かつ処理性能を低下させずに積和演算を実行可能にすることができる。また、ポストインクリメントレジスタ間接により、多数のデータの積和演算を連続して処理することができる。さらに、乗算の結果（積、フラグ）を直ちに利用できるから、実質的な乗算の実行速度を向上することができる。
【００２４】
乗算器とＣＰＵ（制御手段）を一体に構成して、乗算器・ＣＰＵ間の配線を短縮して、物理的規模を縮小する。また、高速化に寄与することができる。
【００２５】
上記した（２）の手段によれば、乗算器を取外し可能に（独立して）設けることによって、乗算器を取外した場合は、積和演算をサポートしないことによって、容易に下位ＣＰＵを実現し、論理的・物理的規模を縮小し、製造費用を低減した別のマイクロコンピュータを容易に開発することができる。また、乗算器を取外したＣＰＵにおいても、汎用的な乗算命令をサポートすることによって、使い勝手の低下を防止できる。さらに、乗算器使用するか使用しないかの制御信号（有効／無効）を与えて制御することによって、テスト性を向上したり、エミュレータを共通化したりすることができる。さらにまた、全体的な開発効率を向上することができる。
【００２６】
乗算器を削除した場合、乗算は除算と同一のシーケンスで実行できる。積和演算はサポートせず、積和演算の特殊なシーケンスをサポートしないことによって論理規模の縮小を更に行なうことができる。テスト命令をサポートすることによって、論理規模の増加を最低限にして、テストの容易性を向上することができる。
【００２７】
上記した（３）の手段によれば、複数レジスタの退避／復帰命令を持ち、この組み合わせを固定的にすることによって、論理規模の縮小を図ることができ、また、高速化を図ることができる。レジスタの本数の異なる命令を複数命令サポートすることによって、使い勝手の低下を防ぐことができる。
【００２８】
さらに、内部動作のパイプラインに対応して、入出力タイミングの異なるレジスタ選択回路を複数持つことにより、レジスタ間演算命令などの基本命令を実質的に１命令／１ステート実行を行なうことができる。
【００２９】
上記した（４）の手段によれば、コントロールレジスタの有効／無効を切り換えることで、スタックの節約と、割込み応答時間の高速化に寄与することができる。また、互換性を維持することができる。
【００３０】
上記した（５）の手段によれば、エミュレータ専用の固定スタックポインタを持つことにより、エミュレータのサポートを容易にすることができる。また、論理規模の増加を最低限にして、エミュレータの設計を容易にすることができる。エミュレータ専用スタックポインタの一部のアドレスを、ＣＰＵ外部から与えるようにして、スタックレジスタをリロケータブルにし、マイクロコンピュータのアドレス配置などに容易に対応することができる。
【発明の効果】
【００３１】
本題において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００３２】
（１）乗算器をＣＰＵに内蔵することによって、アドレッシングモードの増加を最小限にして、かつ処理性能を低下させずに積和演算を実行可能にすることができる。乗算器による乗算の結果を汎用レジスタＣＣＲに反映させ、かかる結果を直ちに利用可能にして、処理速度を高速にすることができる。
【００３３】
（２）乗算器を取外し可能に（独立して）設けることによって、乗算器を取外した場合は、積和演算をサポートしないことによって、容易に下位ＣＰＵを実現し、論理的・物理的規模を縮小し、製造費用の低減に寄与することができる。
【００３４】
（３）複数レジスタの退避／復帰命令を持ち、この組み合わせを固定的にすることによって、論理規模の縮小を図ることができ、また、高速化を図ることができる。
【００３５】
（４）コントロールレジスタの有効／無効を切り換えることで、スタックの節約と、割込み応答時間の高速化に寄与することができるとともに、互換性を維持することができる。
【００３６】
（５）エミュレータ専用の固定スタックポインタを持つことにより、エミュレータをサポートすることができ、また、論理規模の増加を最低限にして、エミュレータの設計を容易にすることができ、さらにエミュレータ専用スタックポインタの一部のアドレスを、ＣＰＵ外部から与えるようにして、スタックレジスタをリロケータブルにし、マイクロコンピュータのアドレス配置などに容易に対応することができる。
【発明を実施するための最良の形態】
【００３７】
以下、本発明について、図面を参照して実施の形態とともに詳細に説明する。
【００３８】
なお、実施の形態を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
【００３９】
図１に、本発明の適用されたデータ処理装置の一例であるシングルチップマイクロコンピュータ（以下、単にマイクロコンピュータと称する）のブロック図を示す。マイクロコンピュータは、ＣＰＵ１、乗算器２、システムコントローラ（ＳＹＳＣ）３、割込コントローラ（ＩＮＴ）４、ＲＯＭ５、ＲＡＭ６、タイマＡ７、タイマＢ８、シリアルコミュニケーションインタフェース（ＳＣＩ）９、Ａ／Ｄ変換器１０、第１乃至第９入出力ポート（ＩＯＰ１〜ＩＯＰ９）１１Ａ〜１１Ｉ、クロック発振器（ＣＰＧ）１２の機能ブロック乃至はモジュールから構成され、公知の半導体製造技術により１つの半導体基板上に半導体集積回路装置として形成される。ＣＰＵ１は、乗算器２を内蔵してなる。システムコントローラ（ＳＹＳＣ）３は、システムコントロールレジスタ（ＳＹＳＣＲ）１３および制御レジスタ（ＣＰＵＣＲ）１４を内蔵している。
【００４０】
かかるマイクロコンピュータは、電源端子として、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、その他専用制御端子として、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０〜２）、クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）端子を有する。クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）端子に接続される、図示はされない水晶振動子に基づいて、クロック発振器が生成するシステムクロック（φ１、φ２）に同期して、マイクロコンピュータは動作する。或は外部クロックをＥＸＴＡＬ端子に入力してもよい。システムクロックの１周期を１ステートと呼ぶ。
【００４１】
これらの機能ブロックは、内部バスによって相互に接続される。内部バスは内部アドレスバス（ＰＡＢ）・内部データバス（ＰＤＢ）の他、リード信号・ライト信号を含み、さらにバスサイズ信号或いはシステムクロック（φ１、φ２）などを含む。
【００４２】
入出力ポートは、外部バス信号、入出力回路の入出力信号と兼用とされている。これらは、動作モードあるいはソフトウェアの設定により、機能を選択されて、使用される。ＩＯＰ１〜３はアドレスバス出力、ＩＯＰ４、５はデータバス入出力、ＩＯＰ６はバス制御信号入出力信号と兼用されている。外部アドレスは、それぞれ、これらの入出力ポートに含まれるバッファ回路を介して内部アドレスバスと接続されている。
【００４３】
内部バスおよび外部バス共に１６ビットバス幅とし、バイトサイズ（８ビット）およびワードサイズ（１６ビット）のリード／ライトを可能にする。なお、内部バスおよび外部バスのいずれも８ビット幅とすることもできる。バス制御信号入出力信号には、アドレスストローブ信号ＡＳ、リード信号ＲＤ、ライト信号ＨＷＲ・ＬＷＲ、ウェイト信号ＷＡＩＴ、エリア０選択信号ＣＳ０などがある。割込信号は、タイマ・ＳＣＩ・ＩＯＰ８から要求され、割込コントローラ（ＩＮＴ）が調停して、ＣＰＵに割込を要求する。このとき、ＣＰＵに対し、割込要求信号とベクタ番号を与える。
【００４４】
ＲＥＳ端子にリセット信号が加えられると、モード端子（ＭＤ０〜２）で与えられる動作モードを取り込み、マイクロコンピュータはリセット状態になる。モード端子で設定する動作モードは、シングルチップ／拡張、アドレス空間、内蔵ＲＯＭの有効／無効、データバス幅の初期値を８ビットまたは１６ビットから選択する。
【００４５】
図２に、システムコントロールレジスタ（ＳＹＳＣＲ）３の構成を示す。各ビットの内容を表１乃至表４に示す。
【００４６】
なお、ビット２、１：リザーブビット
リードすると常に”０”が読み出される。ライトは無効である。
【００４７】
［表１］
2004295914.tif 000003
【００４８】
［表２］
2004295914.tif 000004
【００４９】
［表３］
2004295914.tif 000005
【００５０】
［表４］
2004295914.tif 000006
【００５１】
以下に、表５にＣＰＵ１の命令セットを示す。本実施の形態  に用いられるＣＰＵ１の命令は合計で７１種類ある。表６に命令とアドレッシングモードとの組み合わせを示す。表７に以下の各表に使用される記号（オペレーションの記号）の意味を示す。表８乃至表１５に各命令の機能別一覧表を示す。
【００５２】
［表５］
2004295914.tif 000007
【００５３】
［表６］
2004295914.tif 000008
【００５４】
［表７］
2004295914.tif 000009
【００５５】
［表８］
2004295914.tif 000010
【００５６】
［表９］
2004295914.tif 000011
【００５７】
［表１０］
2004295914.tif 000012
【００５８】
［表１１］
2004295914.tif 000013
【００５９】
［表１２］
2004295914.tif 000014
【００６０】
［表１３］
2004295914.tif 000015
【００６１】
［表１４］
2004295914.tif 000016
【００６２】
［表１５］
2004295914.tif 000017
【００６３】
基本的な命令は平成５年６月（株）日立製作所発行『Ｈ８／３００Ｈシリーズプログラミングマニュアル』などに記載のＣＰＵと同様であり、いわゆる、ロードストアアーキテクチャを採用している。命令とアドレッシングモードの組み合わせを削減し、ＣＰＵの命令制御の論理規模・物理的規模を縮小できる。
【００６４】
本発明のＣＰＵは、上記従来ＣＰＵに対して命令実行時間の高速化を実現している。
【００６５】
ＣＰＵの命令は、２バイト（ワード）を単位にしている。各命令は下記のようなオペレーションフィールド（ｏｐ）、レジスタフィールド（ｒ）、ＥＡ拡張部（ＥＡ）、およびコンディションフィールド（ｃｃ）から構成されている。
【００６６】
（１）オペレーションフィールド
命令の機能を表し、アドレッシングモードの指定、オペランドの処理内容を指定する。命令の先頭４ビットを必ず含んでいる。２つのオペレーションフィールドを持つ場合もある。
【００６７】
（２）レジスタフィールド
汎用レジスタを指定する。アドレスレジスタのとき３ビット、データレジスタのとき３ビットまたは４ビットである。２つのレジスタフィールドを持つ場合、またはレジスタフィールドを持たない場合もある。
【００６８】
（３）ＥＡ拡張部
イミディエイトデータ、絶対アドレスまたはディスプレースメントを指定する。８ビット、１６ビット、または３２ビットである。
【００６９】
（４）コンディションフィールド
Ｂｃｃ命令の分岐条件を示す。
【００７０】
図３に、命令の基本フォーマットの例を示す。
【００７１】
図４に、マイクロコンピュータにおいて、ＣＰＵ１に対し乗算器２を取外し可能に設けた概略ブロック図を示す。命令レジスタ（ＩＲ）２１、命令デコーダ・制御回路（ＣＯＮＴ）２２、レジスタセレクタ（ＲＳＥＬ）２３、ライトデータバッファ（ＤＢＷ）２４、リードデータバッファ（ＤＢＲ）２５、演算器（ＡＬＵ）２６、演算器（ＩＮＣ）２７、汎用レジスタ（ＥＲ０〜ＥＲ７）２８Ａ〜２８Ｈ、エミュレータスタックポインタ（ＥＭＬＳＰ）２９、プログラムカウンタ（ＰＣ）３０、コンディションコードレジスタ（ＣＣＲ）３１、拡張レジスタ（ＥＸＲ）３２、アドレスバッファ（ＭＡＢ）３３からなる。乗算器２なしのＣＰＵ１はこれらによって構成される。各バッファやレジスタ、演算器の各ブロックの機能は、特開平５−２４１８２６号公報に記載のＣＰＵと概略同様である。また、乗算器２を含むＣＰＵ１は、更に、バススイッチ３４、乗算器２がある。
【００７２】
命令デコーダ・制御回路（ＣＯＮＴ）２２には、制御信号ＣＰＵＳ、制御信号ＩＮＴＭ１、そのほかの制御信号（割り込み要求など）が入力されている。ＣＯＮＴ２２は各部を制御するための、出力タイミングの相違する制御信号Ａ、Ｂ、Ｃを出力する。
【００７３】
なお、図中のＣ１およびＣ２は、当該信号の同期タイミングを示す。例えば、ＲＳＥＬ入力１のＣ１はφに同期して入力が行われることを示し、ＲＳＥＬ入力２のＣ２はφ＃（＃は論理反転）に同期して入力が行われることを示す。また、ＡＬＵ入力のＣ１は、φの期間に入力が行われることを示し、ＡＬＵ出力のＣ２は、φ＃の期間に出力が行われることを示す。ＡＬＵ２６とＩＮＣ２７は、それぞれ動作タイミングの異なった演算器であり、それぞれ、オーバラップしつつ演算可能である。
【００７４】
そのほかのレジスタなどは、φ、φ＃の両方でデータを入出力可能である。ＧＢ、ＤＢ、ＷＢの各バスはφ、φ＃の両方で異なったデータを転送可能である。φ、φ＃は互いにノーオーバラップの関係の２相クロックとしてもよい。
【００７５】
レジスタセレクタ（ＲＳＥＬ）２３には、ＩＲ２１乃至ＣＯＮＴ２２から命令コードの一部（レジスタ指定フィールド）が与えられる。この供給タイミングは、レジスタ指定フィールドの位置によって相違される。ＲＳＥＬ２３は出力タイミングの相違するレジスタ選択信号Ａ、Ｂを出力する。
【００７６】
例えば、平成５年６月（株）日立製作所発行『Ｈ８／３００Ｈシリーズプログラミングマニュアル』に記載のＣＰＵにおいては、１６ビット単位の命令コードのビット７−４が、ＣＯＮＴ２２と同時に与えられ（ＲＳＥＬ入力１）、ビット１１−８および３−０（ＲＳＥＬ入力２）が、ＣＯＮＴ２２の内容と０．５ステート遅れて与えられる。ＲＳＥＬ入力２の反転制御信号をＲＳＥＬに与える。
【００７７】
ＣＰＵ１内部のＤＢＷ２４、ＤＢＲ２５、ＡＬＵ２６、ＩＮＣ２７、ＥＲ０〜ＥＲ７（２８Ａ〜２８Ｈ）、ＰＣ３０、ＣＣＲ３１、ＶＡＧ、ＡＢは、ＧＢバス、ＤＢバス、ＷＢバスによって相互に接続されている。
【００７８】
２つの演算器ＡＬＵ２６、ＩＮＣ２７に対し、ＧＢ、ＤＢバスからデータを入力し、ＷＢバスにデータを出力する。それぞれの入出力バスの数に対応した数の内部バスとして、バス即ち配線の増加による物理的規模の増加を抑止している。
【００７９】
また、ライトデータバッファ（ＤＢＷ）２４は内部データバスへの出力、リードデータバッファ（ＤＢＲ）２５は内部データバスからの入力、アドレスバッファ（ＭＡＢ）３３は内部アドレスバスへの出力、命令レジスタは内部データバスからの入力が可能であり、それぞれ内部バスに接続されている。ライトデータバッファ（ＤＢＷ）２４およびリードデータバッファ（ＤＢＲ）２５は３２ビット構成とされる。ライトデータは３２ビット一括してライトデータバッファ（ＤＢＷ）２４に書き込むことができ、所定のタイミングで、１６ビットの内部データバスに出力される。また、内部データバスから読み出したデータを、リードデータバッファ（ＤＢＲ）２５に一旦格納して、３２ビットのリードデータを一括して出力することができる。ＭＡＢは＋２のインクリメント機能を有する。
【００８０】
命令デコーダ・制御回路（ＣＯＮＴ）２２が、ＩＲ２１からの入力、ＣＰＵＳ信号、ＩＮＴＭ１信号やそのほかの入力信号に基づいて、動作制御を行なう。制御回路の出力は所定のバッファを介して出力される。ＣＯＮＴ２２自身にも、ステート番号などがフィードバックされる。
【００８１】
アドレスバッファ（ＭＡＢ）３３はインクリメント機能（＋２）を有する。ＥＲ０〜ＥＲ７（２８Ａ〜２８Ｈは）データレジスタまたはアドレスレジスタとして使用することができる。
【００８２】
ＥＭＬＳＰ２９は、ユーザには公開されていないリソースで、エミュレータに搭載されて動作するとき、ユーザプログラムとエミュレーションプログラムの間の遷移時のスタックポインタとして使用する。その内容を指定するために、一部の内容が、ＣＰＵ外部から与えられる。
【００８３】
ＰＣ３０は３２ビットのカウンタであり、ＣＰＵ１が次に実行する命令のアドレスを示している。コンディションコードレジスタ（ＣＣＲ）３１は割り込みマスクビット（Ｉ）、キャリフラグ（Ｃ）、ゼロフラグ（Ｚ）、ネガティブフラグ（Ｎ）、オーバフローフラグ（Ｖ）を含んでいる。
【００８４】
ＣＰＵ１と乗算器２は、バススイッチ３４を介して接続されている。また、バススイッチ３４は内部データバスとのインタフェースも行なう。また、ＣＰＵ１から乗算器２への制御信号を与える。乗算器２のステータス信号ＢＵＳＹと、フラグ検出信号をＣＰＵ１に与える。ＴＥＳＴＭＯＤＥ信号を、例えば、ＳＹＳＣ３から与える。制御信号ＣＰＵＳは、ＳＹＳＣＲ１４あるいはそのほかのレジスタの制御ビットの出力にしてもよいし、マイクロコンピュータの制御端子のようなもので指定してもよい。
【００８５】
図５に、制御信号ＣＰＵＳを制御レジスタ（ＣＰＵＣＲ）１４の制御ビットで構成した具体的な例を示す。図は１ビットの構成を示している。ＣＰＵＣＲ１４は、フリップフロップで構成される。フリップフロップにはリセット信号が与えられる。フリップフロップのクロックは内部ライト信号と、アドレスをデコードして得られるＣＰＵＣＲ選択信号の論理積信号とされる。データ入力はデータバスのビット８とされる。出力がＣＰＵＳ信号とされる。また、クロックトバッファＣＢＦ６を介して、データバスに出力される。クロックトバッファＣＢＦ６のクロックは内部ライト信号とＣＰＵＣＲ選択信号の論理積信号とされる。
【００８６】
本レジスタのライトは、テストモードや、エミュレータに搭載した場合のブレークモードなどでのみライト可能にするとよい。ブレークモードなどについては、特開平６−１５００２６などに記載されている。同様に、ＴＥＳＴＭＯＤＥ信号を生成することができる。同一のレジスタに配置することができる。
【００８７】
図６に、制御信号ＣＰＵＳの設定方法の一例として、エミュレーション用プロセッサおよびエミュレータをブロック図で示す。エミュレーション用プロセッサ３８は、マイクロコンピュータ部分にエミュレーション用インタフェース３９を加えて構成される。エミュレーション用インタフェース３９には、エミュレーション用プロセッサ専用の制御レジスタ４１を有する。メモリ４２は、ＲＯＭ、ＲＡＭを含み、Ｉ／ＯはＩ／Ｏポート、タイマ、ＳＣＩなどを含む。
【００８８】
コネクタ部がマイクロコンピュータの代わりに応用システム（ユーザシステム）４３に装着される。エミュレーション用プロセッサ３８は上記コネクタ部とインタフェースケーブル４４を介し、ターゲットシステムインタフェースを用いて上記応用システム４３と信号の入出力を行なう。
【００８９】
応用システム（ユーザシステム）４３には、特に制限はされないものの、ユーザバス４５が存在し、ユーザメモリ４６が接続される。エミュレーション用プロセッサ３８が出力し、インタフェースケーブル４４を介して供給されるユーザストローブ信号に従って、ユーザメモリ４６はリード／ライトされる。
【００９０】
一方、エミュレーション用プロセッサ３８は上記エミュレーションインタフェース３９を用いてエミュレーションバス４７に接続される。エミュレーションバス４７には図示はされない状態信号・制御信号などを含む。上記エミュレーションバス４７を用いて、エミュレーション用プロセッサ３８から、応用システム４３とエミュレーション用プロセッサ３８の内部状態に応じた情報などが出力され、また、エミュレーション用プロセッサ３８に対し、エミュレーションのための各種制御信号が入力される。エミュレーション用プロセッサ３８の、図示はされないエミュレートモード端子が電源レベルに固定され、エミュレーション用プロセッサ３８内部ではエミュレートモードが設定される。
【００９１】
さらに、上記エミュレーションバス４７には、特に制限はされないものの、応用システム４３またはターゲットマイクロコンピュータ内蔵のメモリを代行するためのＲＡＭでなるようなエミュレーションメモリ４８がある。また、エミュレーション用プロセッサ３８の制御状態やエミュレーションバス４７の状態を監視して、その状態が予め設定された状態に達した時に、上記エミュレータ専用割込みを入力して、ＣＰＵによるユーザプログラムの実行を停止させ、エミュレーション用プログラム実行状態に遷移させる（ブレーク）ためのブレーク制御回路４９と、上記ＣＰＵのリード動作またはライト動作を示す信号、命令リード動作を示す信号などに基づき、エミュレーションバス４７に与えられるアドレスデータさらには制御情報を逐次蓄えるリアルタイムトレース回路５０などが接続される。
【００９２】
上記エミュレーションバス４７が、エミュレーションメモリ４８、ブレーク制御回路４９、リアルタイムトレース回路５０などに、それぞれ接続される。これらでもってマイクロコンピュータ開発装置５５が構成されている。
【００９３】
上記エミュレーションメモリ４８、ブレーク制御回路４９、リアルタイムトレース回路５０はコントロールバス５１に接続され、コントロールバス５１を介してコントロールプロセッサ５２の制御を受けるようになっている。上記コントロールバス５１は、エミュレーション用プロセッサ制御回路に接続されるとともに、インタフェース回路を介して、特に制限はされないもののパーソナルコンピュータなどのシステム開発装置５４に接続される。例えば、システム開発装置５４から入力されたプログラムをエミュレーションメモリ４８に転送し、内蔵ＲＯＭ上に配置されるべきかかるプログラムをＣＰＵ１がリードすると、エミュレーションメモリ４８上のプログラムがリードされる。また、ブレーク条件や、リアルタイムトレース条件などもシステム開発装置５４から与えることができる。
【００９４】
コントロールプロセッサ５２は、ＣＰＵＳ信号をエミュレーション用プロセッサ３８に供給して、乗算器の使用／不使用の選択を行なうことができる。コントロールプロセッサ５２は、システム開発装置５４から入力された情報などに基づいて、ＣＰＵＳ信号を制御する。あるいは、図５のような制御レジスタを、エミュレーション用インタフェース３９内に制御レジスタに設けて、エミュレータ４０のソフトウェアをＣＰＵが実行して、前記制御レジスタを指定することによって、ＣＰＵＳ信号を生成するようにすることができる。この場合は、エミュレーション用ソフトウェアの実行モード、いわゆるブレークモードでのみライト可能にすると都合がよい。開発途上にあるユーザのソフトウェアの誤動作によって、誤った設定を行なうことがない。
【００９５】
エミュレーション用プロセッサ３８およびエミュレータ４０を複数のＣＰＵをサポート可能にすることによって、実際のマイクロコンピュータのみを開発すればよく、開発効率を向上することができる。なお、ＥＭＬＳＰ２９のアドレス指定情報も、エミュレーション用インタフェース３９内の制御レジスタで指定することができる。
【００９６】
エミュレーション用プロセッサ３８やエミュレータ４０については、特開平３−２７１８３４号公報、あるいは特開平６−１５００２６号公報などに記載されている。
【００９７】
図７に、制御信号ＣＰＵＳ設定方法の一例である、マイクロコンピュータの主要部をブロック図で示す。ＣＰＵＳ信号をレジスタによらず、ＣＭＯＳインバータ回路５８の出力とする。かかるＣＭＯＳインバータ回路５８は、Ｐチャネル型ＭＯＳトランジスタＱ１、Ｎチャネル型ＭＯＳトランジスタＱ２で構成される。このＣＭＯＳインバータ回路５８の入力は、抵抗Ｒを介して電源Ｖｄｄに接続されると共に、保護回路Ｑ３、Ｑ４を介して端子Ｐに結合される。端子Ｐは、ワイヤＷによってグランドレベル電源用リードＬに接続されるか、解放状態とされるかが選択され、ＣＰＵＳの設定を行なう。
【００９８】
端子Ｐが解放状態とされれば、ＣＭＯＳインバータ回路５８の入力はハイレベルとなって、ＣＰＵＳ信号は非活性状態になる。一方、端子Ｐが、ワイヤＷによって、グランドレベル電源用リードＬに接続されれば、ＣＭＯＳインバータ回路５８の入力はロウレベルとなって、ＣＰＵＳ信号は活性状態になる。乗算器を使用可能にする。
【００９９】
端子Ｐは対応するリードを持たず、例えばプラスティックパッケージに封止された場合には、対応する端子を持たない。
【０１００】
これにより、半導体集積回路装置のパッケージの端子を直接利用することなく、乗算器の制御を設定できるため、一定のパッケージを用いた場合に、有効な端子数の減少防ぐことができる。この場合、端子Ｐをグランドレベル電源端子に隣接して配置すると都合がよい。
【０１０１】
あるいは、端子Ｐをグランドレベル電源用リードＬにワイヤＷによって接続するか、しないかの選択を、半導体集積回路装置の配線変更として実現してもよい。ＣＭＯＳインバータ回路５８の入力を、半導体集積回路装置内部の電源電圧またはグランドのいずれに接続するかを選択すればよい。このとき、抵抗Ｒ及び端子Ｐは削除することができる。または、ＣＰＵＳビットをＰＲＯＭ素子などで構成してもよい。この場合、製造者が設定を行なってもよいし、ユーザが設定を行なってもよい。
【０１０２】
図８および図９に、ＣＰＵの内部レジスタ構成を示す。これらのレジスタは、図８の汎用レジスタおよび図９のコントロールレジスタの２つに分割される。以下、各レジスタについて説明する。
【０１０３】
（１）汎用レジスタ
ＣＰＵはこの汎用レジスタを８本有している。この汎用レジスタは３２ビット長からなり、すべて同じ機能を有しており、アドレスレジスタとしてもデータレジスタとしても使用することができる。データレジスタとしては３２ビット、１６ビットおよび８ビットレジスタとして使用できる。
【０１０４】
アドレスレジスタ及び３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０〜ＥＲ７）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ７）、汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。これらは同等の機能を有しており、１６ビットレジスタを最大１６本まで使用することができる。
【０１０５】
８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を有しており、８ビットレジスタを最大１６本まで使用することができる。
【０１０６】
図１０に、汎用レジスタの使用方法を示す。各レジスタは独立して使用方法を選択することができる。
【０１０７】
汎用レジスタＥＲ７には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。図１１にスタックの状態を示す。
【０１０８】
（２）コントロールレジスタ
コントロールレジスタは、２４ビットのプログラムカウンタ（ＰＣ）と８ビットの拡張レジスタ（エクステンドレジスタ）（ＥＸＲ）および８ビットのコンディションコードレジスタ（ＣＣＲ）を含んでいる。
【０１０９】
１．プログラムカウンタ（ＰＣ）
２４ビットのカウンタで、ＣＰＵが次に実行する命令のアドレスを示している。ＣＰＵの命令は、すべて２バイト（ワード）を単位としているため、最下位ビットは無効である。（命令コードのリード時には最下位ビットは”０”とみなされる）。
【０１１０】
分岐命令の実行アドレスの上位８ビットは無視される。プログラム領域として使用できるのは、Ｈ’００００００００〜Ｈ’００ＦＦＦＦＦＦの領域である。
【０１１１】
２．拡張レジスタ（ＥＸＲ）
８ビットのレジスタで、トレースビット（Ｔ）、割込みマスクビット（Ｉ２〜Ｉ０）を含む８ビットで構成されている。
【０１１２】
ビット７：トレースビット（Ｔ）
トレースビットか否かを指定する。本ビットが”０”にクリアされているときは命令を順次実行する。”１”にセットされているときは１命令実行する毎にトレース例外処理を実行する。
【０１１３】
ビット６〜４：リザーブビット
リザーブビットである。
【０１１４】
ビット２〜０：割込みマスクビット（Ｉ２〜Ｉ０）
割込み要求マスクレベル（０〜７）を指定する。
【０１１５】
ＥＸＲは、ＬＤＣ、ＳＴＣ、ＡＮＤＣ、ＯＲＣ、ＸＯＲＣ命令で実行することができる。このうち、ＳＴＣを除く命令を実行した場合、実行終了後３ステートの間は、ＮＭＩを含めてすべての割込みは受け付けられない。
【０１１６】
３．コンディションコードレジスタ（ＣＣＲ）
８ビットのレジスタで、ＣＰＵの内部状態を示す。割込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）を含む８ビットで構成されている。
【０１１７】
ビット７：割込みマスクビット（Ｉ）
本ビットが”１”にセットされると、割込みがマスクされる。ただし、ＮＭＩはＩビットに関係なく受け付けられる。例外処理の実行が開始されたときに”１”にセットされる。
【０１１８】
ビット６：ユーザビット／割込みマスクビット（ＵＩ）
ソフトウェア（ＬＤＣ、ＳＴＣ、ＡＮＤＣ、ＯＲＣ、ＺＯＲＣ命令）でリード／ライトできる。割込みマスクビットとしても使用可能である。
【０１１９】
ビット５：ハーフキャリフラグ（Ｈ）
ＡＤＤ．Ｂ、ＡＤＤＸ．Ｂ、ＳＵＢ．Ｂ、ＳＵＢＸ．Ｂ、ＣＭＰ．Ｂ、ＮＥＧ．Ｂ命令の実行により、ビット３にキャリまたはボローが生じたとき”１”にセットされ、生じなかったとき”０”にクリアされる。また、ＡＤＤ．Ｗ、ＳＵＢ．Ｗ、ＣＭＰ．Ｗ、ＮＥＧ．Ｗ命令の実行により、ビット１１にキャリまたはボローが生じたとき、ＡＤＤ．Ｌ、ＳＵＢ．Ｌ、ＣＭＰ．Ｌ、ＮＥＧ．Ｌ命令の実行により、ビット２７にキャリまたはボローが生じたとき、”１”にセットされ、生じなかったとき”０”にクリアされる。
【０１２０】
ビット４：ユーザビット（Ｕ）
ソフトウェア（ＬＤＣ、ＳＴＣ、ＡＮＤＣ、ＯＲＣ、ＸＯＲＣ命令）でリート／ライトできる。
【０１２１】
ビット３：ネガティブフラグ（Ｎ）
データの最上位ビットを符号ビットとみなし、最上位ビットの値を格納する。
【０１２２】
ビット２：ゼロフラグ（Ｚ）
データがゼロのとき”１”にセットされ、ゼロ以外のとき”０”にクリアされる。
【０１２３】
ビット１：オーバフローフラグ（Ｖ）
算術演算命令により、オーバフローが生じたとき”１”にセットされる。それ以外のとき”０”にクリアされる。
【０１２４】
ビット０：キャリフラグ（Ｃ）
演算の実行により、キャリが生じたとき”１”にセットされ、生じなかったとき”０”にクリアされる。キャリには次の種類がある。
【０１２５】
（ａ）加算結果のキャリ
（ｂ）減算結果のボロー
（ｃ）シフト／ローテートのキャリ
また、キャリフラグには、ビットアキュムレータの機能があり、ビット操作命令で使用される。なお、命令によってはフラグが変化しない場合がある。ＣＣＲは、ＬＤＣ、ＳＴＣ、ＡＮＤＣ、ＯＲＣ、ＸＯＲＣ命令で操作することができる。また、Ｎ、Ｚ、Ｖ、Ｃの各フラグは、条件分岐命令（Ｂｃｃ）で使用される。
【０１２６】
４．積和レジスタ（ＭＡＣ）
６４ビットのレジスタであり、積和演算結果を格納する。３２ビットのＭＡＣＨ、ＭＡＣＬから構成される。ＭＡＣＨは下位１０ビットが有効であり、上位は符号拡張されている。
【０１２７】
図１２に、ＣＰＵの基本動作タイミングを示す。
【０１２８】
ＡＤＤ．Ｗ  Ｒ０、Ｒ１のようなレジスタ間演算のタイミングである。特に制限はされないものの、内部データバスは１６ビットであって、内蔵ＲＯＭ、ＲＡＭのリード／ライトを１ステートでリード／ライト可能とする。
【０１２９】
Ｔ０のＣ２（φ＃同期。＃は反転論理を示す）で、ＣＰＵ１のアドレスバッファ（ＭＡＢ）３３からアドレスがＩＡＢに出力される。
【０１３０】
Ｔ１のＣ１（φ同期）で、ＩＡＢの内容がＰＡＢに出力され、リードサイクルが開始される。Ｃ２でリードデータが内部データバスに得られ、これをＩＲ２１にラッチする。以上の動作は以前の命令の実行の制御によって行われる。
【０１３１】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、Ｔ２のＣ１で命令コードがＣＯＮＴ２２に入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行なう。命令の一部（レジスタ指定フィールド：ＲＳＥＬ入力信号１）がレジスタセレクタ２３に与えられる。
【０１３２】
レジスタ間演算命令では、Ｔ２のＣ２で、ＰＣの内容を内部バスＧＢに読み出して、ＭＡＢ３３とＩＮＣ２７に入力する。ＭＡＢ３３からアドレスＩＡＢが出力される。レジスタセレクタ２３に制御信号を与える。ＲＳＥＬ入力信号１と制御信号Ａ（Ｒｓ−ＤＢ出力、Ｒｄ−ＧＢ出力）とに基づいて、レジスタ選択信号Ｂが生成される。ＲＳＥＬ入力信号２がレジスタセレクタ２３に与えられる。
【０１３３】
Ｔ３から、次の次の命令がリードされる。Ｔ３のＣ１で、ＩＮＣ２７でインクリメント（＋２）された結果が、内部バスＷＢを経由して、ＰＣ３０にライトされる。ＲＳＥＬ入力信号２と制御信号Ｂ（ＷＢ−Ｒｄ入力）とに基づいて、レジスタ選択信号Ｃが生成される。レジスタ選択信号Ｂがレジスタを選択して、ソース側、デスティネーション側のレジスタ（Ｓ、Ｄ）のデータをＡＬＵ２６に入力する。ＡＬＵ２６の演算内容はＣＯＮＴ２２が制御信号Ｃによって指示する。加減算・論理演算・シフトなどは１クロックで演算を行なうことができる。例えば、上記命令では１６ビットの加算を行なう。次の命令のＣＯＮＴ２２へのロードを指示する。ＲＳＥＬ入力信号２と制御信号Ｂ（ＷＢ−Ｒｄ入力）とに基づいて、レジスタ選択信号Ｃが生成される。
【０１３４】
Ｔ３のＣ２で、ＡＬＵ２６の演算結果（Ｒ）が、内部バスＷＢを経由して、レジスタ選択信号Ｃが選択したデスティネーション側のレジスタにライトされる。制御信号Ｃによって、ＣＣＲ３１の更新を行なう。更に次の次の命令をＩＲ２１に取り込む。同時に、次の命令の実行が開始され、例えば、ＰＣ３０の内容を読み出して、ＭＡＢ３３とＩＮＣ２７に入力される。レジスタ間演算を実質的に１ステートで実行できる。２つの演算器２６、２７の入出力バスの数に対応した数の内部バスとして（演算器に対応して、内部バスを増加させることなく）、バス即ち配線の増加による物理的規模の増加を抑止している。
【０１３５】
図１３に、ＣＰＵの基本動作タイミングを示す。
【０１３６】
ＭＯＶ．Ｗ  Ｒ０、＠Ｒ１のような、レジスタ間接によるデータライトのタイミングである。
【０１３７】
Ｔ０のＣ２で、ＣＰＵ１のＭＡＢ３３からアドレスがＩＡＢに出力される。
【０１３８】
Ｔ１のＣ１で、アドレスがＰＡＢに出力され、リードサイクルが開始される。Ｃ２でリードデータが内部データバスに得られ、これをＩＲ２１にラッチする。
【０１３９】
直前の命令の実行が終了すると、Ｔ２のＣ１で命令コードがＣＯＮＴ２２に入力されて、命令の内容が解読され、各部の制御を行なう。命令の一部のレジスタ指定フィールド（ＲＳＥＬ入力信号１）がレジスタセレクタ２３に与えられる。レジスタ間接によるデータライトでは、制御信号ＡとＲＳＥＬ入力信号１とに基づいて、レジスタ選択信号Ａが与えられ、アドレスとして指定されたレジスタが選択される。
【０１４０】
Ｔ２のＣ２で、選択されたレジスタの内容（Ａ）を内部バスＧＢに読み出して、ＭＡＢ３３を経由してアドレスＩＡＢに出力される。ＲＳＥＬ入力信号２がレジスタセレクタ２３に与えられる。ＲＳＥＬ入力信号２と制御信号Ｂ（Ｒｄ−ＤＢ出力）とに基づいて、レジスタ選択信号Ｂが生成される。
【０１４１】
Ｔ３のＣ１で、制御信号Ｃの一部がＣＯＮＴ２２に入力され、状態遷移が行われる（ステートマシンが構成される）。ＩＡＢの内容に基づいて、ライトサイクルが開始される。選択されたレジスタの内容（Ｄ）を内部バスＤＢに読み出して、データバッファ（ＤＢＷ）を経由して内部データバスに出力される。
【０１４２】
Ｔ３のＣ２で、ＰＣ３０の内容を内部バスＧＢに読み出して、ＭＡＢ３３とＩＮＣ２７に入力する。ＭＡＢ３３からアドレスＩＡＢが出力される。ＲＳＥＬ入力信号１と制御信号Ａ（Ｒｄ−ＧＢ出力）とに基づいて、レジスタ選択信号Ｂが生成される。
【０１４３】
Ｔ４から、次の次の命令がリードされる。
【０１４４】
Ｔ４のＣ１で、ＩＮＣ２７でインクリメント（＋２）された結果が、内部バスＷＢを経由して、ＰＣ３０にライトされる。レジスタ選択信号Ｂがレジスタを選択して、データレジスタ（Ｄ）のデータをＡＬＵ２６に入力する。ＡＬＵ２６の演算内容はＣＯＮＴ２２が制御信号Ｃによって指示する。転送の場合はデータのチェックのみを行なう。次の命令のＣＯＮＴ２２へのロードを指示する。
【０１４５】
Ｔ４のＣ２で、制御信号Ｃによって、チェックした結果によって、ＣＣＲ３１の更新を行なう。更に次の次の命令をＩＲ２１に取り込む。同時に、次の命令の実行が開始され、例えば、ＰＣ３０の内容を読み出して、ＭＡＢ３３とＩＮＣ２７に入力される。
【０１４６】
ＲＳＥＬに入力するタイミングを、ＲＳＥＬ入力１（アドレスレジスタ、ソースレジスタ）とＲＳＥＬ入力２（データレジスタ、ディスティネーションレジスタ）のように、レジスタ指定フィールド毎にことなったタイミング（φ同期とφ＃同期）とすることにより、命令実行の高速化を実現することができる。
【０１４７】
表１６乃至表１９に、本発明に関係のある命令の説明を示す。
【０１４８】
表１６は命令コードを示し、表１８は命令の実行状態を示し、表１９はコンディションコードの変化を示している。表１７はレジスタフィールドと汎用レジスタの対応を示している。
【０１４９】
［表１６］
2004295914.tif 000018
【０１５０】
［表１７］
2004295914.tif 000019
【０１５１】
［表１８］
2004295914.tif 000020
【０１５２】
［表１９］
2004295914.tif 000021
【０１５３】
積和演算を行なうＭＡＣ命令、ＭＡＣレジスタをクリアするＣＬＲＭＡＣ命令、汎用レジスタの内容をＭＡＣレジスタに転送するＬＤＭＡＣ命令、ＭＡＣレジスタの内容を汎用レジスタに転送するＳＴＭＡＣ命令がある。
【０１５４】
また、汎用レジスタの待避／復帰命令には、１本のレジスタの待避／復帰命令に、ＰＵＳＨ、ＰＯＰ命令が、複数レジスタの待避／復帰命令にＳＴＭ／ＬＤＭ命令がある。ＳＴＭ／ＬＤＭ命令には、指定するレジスタ本数に対応して３種類がある。
【０１５５】
図１４に、乗算器２の概略ブロック図を示す。
【０１５６】
乗算器２は、入力ラッチ（Ｘ）６１、入力ラッチ（Ｙ）６２、部分積生成回路６３、マツチプレクサ６４、デコーダ６５Ａ、６５Ｂ、６５Ｃ、選択回路６６Ａ、６６Ｂ、６６Ｃ、加算器６７、フィードバック回路６８、乗算結果レジスタ６９などによって構成されている。
【０１５７】
乗算器２は１６×１６ビットの乗算を行なうことを基本動作とし、さらに、これを利用して、１６×１６ビット＋４２ビットの積和演算を可能としている。
【０１５８】
乗算器は乗算動作は、２次のブースのデコードを用いて、１６ビット×６ビットを３回行なうようにされる。
【０１５９】
１６ビットの乗数Ｙは、Ｙ＝−ｙ［１６］・２＾１５＋Σ（ｙ［ｉ］・２＾（ｉ−１））＝Σ（ｙ［２ｊ］＋ｙ［２ｊ＋１］−２・ｙ［２ｊ＋２］）・２＾２ｊと表現される。ｉ＝１〜１５、ｊ＝０〜７、ｙ［０］＝０である。
【０１６０】
被乗数Ｘとの乗算は、Ｘ・Ｙ＝Σ（ｙ［２ｊ］＋ｙ［２ｊ＋１］−２・ｙ［２ｊ＋２］）・Ｘ・２＾２ｊとなる。ｙ［２ｊ］＋ｙ［２ｊ＋１］−２・ｙ［２ｊ＋２］は、ｙ［２ｊ］、ｙ［２ｊ＋１］、ｙ［２ｊ＋２］の値の組み合わせにより、０、±１、±２の５種類があるから、部分積（ｙ［２ｊ］＋ｙ［２ｊ＋１］−２・ｙ［２ｊ＋２］）・Ｘは、０、±Ｘ、±２Ｘの５種類である。この内、０、Ｘは直ちに得られる。２Ｘは、１ビットの左シフト（最下位ビットは０）、−Ｘは２の補数であり、論理反転＋１で得られる。−２Ｘは、論理反転＋１の１ビットの左シフト（最下位ビットは０）で得る。
【０１６１】
Ｘ側は、採りうる０、±Ｘ、±２Ｘの５種類の部分積（１７ビット）を生成しておく。この５種類を部分積選択回路６６Ａ〜６６Ｃに与える。
【０１６２】
一方、Ｙ入力のｙ［２ｊ］、ｙ［２ｊ＋１］、ｙ［２ｊ＋２］をデコードして、０、±１、±２を判定して、この結果によって、部分積選択回路６６Ａ〜６６Ｃを制御して、前記５種類の部分積を選択する。１回に２ビット単位３種類の選択を行なう。これを加算器６７で加算する。加算は、２ビットずつシフトしたそれぞれ１７ビットの部分積を加算して、２２ビット分の結果を得る。不足する上位ビットは符号拡張したデータとする。
【０１６３】
この内、下位６ビットは、乗算結果レジスタ６９のビット０〜５に格納される。上位１６ビットはフィードバック回路６８を介して、２回めの加算に含められる。２回目の処理では、前記同様に得られた部分積選択回路６６Ａ〜６６Ｃの出力である、２ビットずつシフトしたそれぞれ１７ビットの部分積と、１回めの処理の上位１６ビットを加算する。２２ビット分の結果を得る。不足する上位ビットは符号拡張したデータとする。この内、下位６ビットは、乗算結果レジスタ６９のビット１１〜６に格納される。上位１６ビットはフィードバック回路６８を介して、２回めの加算に含められる。
【０１６４】
同様に３回めの処理が行われる。加算結果下位２０ビットが乗算結果レジスタ６９のビット３１〜１２に格納される。加算結果の最上位２ビットは無視する。
【０１６５】
積和演算の場合は、前回の結果が同時に加算されるようにする。
【０１６６】
更に、前回の結果の上位ビットとの４回目の加算を行って、４２ビットの結果を得る。１６ビット×１６ビットの積和の結果を４２ビットで得ることにより、約１０００回の積和演算を繰り返してもオーバフローしないことになる。
【０１６７】
内部論理の構成上は、４０ビットの結果とすれば、加算器が２２ビット長でよく、論理的規模を最適化できる。
【０１６８】
図１５に、上記のワードサイズ乗算（１６ビット×１６ビット）の演算方法を示す。
【０１６９】
８ビット×８ビットのバイトサイズ乗算は、上位を拡張する。符号無しの場合０拡張、符号付きの場合符号拡張を行なう。いずれの場合も、上位は全ビット”０”か全ビット”１”かのいずれかであって、ブースのデコードは０になる。このため、３回目の処理は行なわずに、２回の処理で済む。
【０１７０】
図４において、ＣＰＵ１から乗算器２に、乗算を示す信号として、ＭＵＬ信号（制御信号Ｂ）、符号付き／無しを示す信号としてＵＮＳＩＮＰ信号（制御信号Ｂ）、バイト／ワードサイズを示す信号として、ＢＹＴＥ信号（制御信号Ｂ）、積和演算の起動信号として、ＭＡＣ信号（制御信号Ｂ）、ＭＡＣＨからＣＰＵへのデータ転送要求信号として、ＳＴＭＡＣＨ信号（制御信号Ｃ）、ＭＡＣＬからＣＰＵへのデータ転送要求信号として、ＳＴＭＡＣＬ信号（制御信号Ｃ）、ＣＰＵからＭＡＣＨへのデータ転送要求信号として、ＬＤＭＡＣＨ信号（制御信号Ｂ）、ＣＰＵからＭＡＣＬへのデータ転送要求信号として、ＬＤＭＡＣＬ信号（制御信号Ｂ）、ＭＡＣレジスタのクリア信号として、ＣＬＲＭＡＣ信号（制御信号Ｂ）、乗数の転送信号として、ＳＴＸ信号（制御信号Ｂ）、被乗数の転送信号として、ＳＴＹ信号（制御信号Ｂ）、乗算結果の転送信号として、ＭＵＬＲＤ信号（制御信号Ｃ）を与える。
【０１７１】
また、乗算器２からＣＰＵ１へ、演算実行中を示す信号として、ＢＵＳＹ信号、フラグに反映すべきデータとして、ＶＦＬＡＧ、ＺＦＬＡＧ、ＮＦＬＡＧ信号が与えられる。
【０１７２】
ＣＰＵ−乗算器の相互のデータ転送にＸバス、Ｙバスを使用する。
【０１７３】
また、ＳＹＳＣＲ１３から飽和演算の選択を示す信号として、ＦＩＸＥＤ信号が与えられる。また、テストモード信号として、ＴＥＳＴＭＯＤＥ信号が与えられる。ＴＥＳＴＭＯＤＥ信号が活性状態になって、テストモードが指示されると、乗算器は１回の処理のみで動作を終了するようにする。
【０１７４】
処理を短縮することによって、ＣＰＵの命令実行ステートも短縮できる。入力データの組み合わせを種々変更してテストする場合に、テスト時間を短縮できる。加算を１回しか行なわないので、テスト設計を容易にすることができる。３回の処理を行って、加算結果が蓄積されて、所望の動作のテストの結果を演算結果として得にくくなることがない。
【０１７５】
ＴＥＳＴＭＯＤＥ信号が非活性状態であっても、ＣＰＵ乃至乗算器のテストを行なうことができることは言うまでもない。ＴＥＳＴＭＯＤＥ信号は、前記のＣＰＵＳのようにレジスタの出力として供給することができる。
【０１７６】
表２０に乗算器２の内部のフラグの検出方式およびＣＰＵ１への転送方式を示す。
【０１７７】
［表２０］
2004295914.tif 000022
【０１７８】
乗算器２のフラグ仕様は次のように、１．Ｖフラグおよび２．Ｎフラグ、Ｚフラグから構成されている。
【０１７９】
１．Ｖフラグ
セット条件はＭＡＣ命令実行中にオーバフローまたはアンダフローが発生したときである。
【０１８０】
クリア条件はＬＤＭＡＣまたはＣＬＲＭＡＣ命令を実行したときである。
【０１８１】
乗算器からＣＣＲへの転送は、ＳＴＭＡＣ実行時に行われる。
【０１８２】
従って、一連の連続した積和演算中に１回でもオーバフローまたはアンダフローが発生すると、乗算器のＶフラグはセットされた状態を保持する。ＬＤＭＡＣまたはＣＬＲＭＡＣ命令を実行して、新しい一連の積和演算の開始が判断されると、乗算器のＶフラグはクリアされる。
【０１８３】
２．Ｎフラグ、Ｚフラグ
ＭＵＬ命令用Ｎ、ＺフラグとＭＡＣ命令用Ｎ、Ｚフラグを別々に設けて出力する。
【０１８４】
乗算器からＣＣＲへの転送は、乗算（ＭＵＬ）命令の場合、乗算結果の転送時、ＭＡＣ命令の場合ＳＴＭＡＣ実行時に行われる。
【０１８５】
なお、ＮフラグとＺフラグは、ＬＤＭＡＣ／ＣＬＲＭＡＣによって変化しない。
【０１８６】
図１６にＶフラグ仕様の実現の概念図を示し、図１７にＮフラグ、Ｚフラグ仕様の実現の概念図を示す。
【０１８７】
Ｖフラグはセットリセット型のフリップフロップ（ＲＳ−Ｆ／Ｆ）で構成され、一旦、オーバフローまたはアンダフローが発生すると、ＳＴＭＡＣにより読み出すまで状態を保持する。
【０１８８】
Ｎ、Ｖフラグはラッチ回路（Ｄ−Ｆ／Ｆ）とマルチプレクサ（ＭＰＸ）で構成される。ＭＡＣ命令実行時の演算結果はラッチ回路に保持され、マルチプレクサに与えられる。また、乗算命令実行時の演算結果は、直接マルチプレクサに与えられる。マルチプレクサはＳＴＭＡＣ命令のときラッチ回路の出力を出力し、それ以外のとき演算結果を直接出力する。
【０１８９】
ＭＡＣ命令とその他の命令は並列して動作する。ＭＡＣ命令のフラグを随時ＣＣＲに反映しては、並列実行中の命令のフラグ動作と矛盾してしまう。ＭＡＣ命令のフラグを乗算器内部で保持して、ＳＴＭＡＣ命令実行時にＣＣＲに転送するようにして、上記矛盾を回避することができる。
【０１９０】
図１８に、バススイッチ３４のブロック図を示す。
【０１９１】
バススイッチ３４は、選択回路７１Ａ、７１Ｂ、拡張回路７２Ａ、７２Ｂ、７２Ｃ、出力バッファ７３Ａ、７３Ｂ、７３Ｃ、７３Ｄから構成される。バススイッチは、ＣＰＵ内部バスのＧＢ、ＤＢ、ＷＢと、乗算器のＸバス、Ｙバスと、マイクロコンピュータの内部バスであるＩＤＢのインタフェースを行なう。
【０１９２】
乗算の開始時、及びＬＤＭＡＣ命令の場合は、ＧＢ、ＤＢからＸバス、Ｙバスに入力される。ＧＢ、ＤＢの入力は、選択回路７１Ａ、７１Ｂで選択される。これは汎用レジスタ及び内部バスが３２ビット構成であるために、乗数、被乗数が８ビットまたは１６ビットであるために、ＣＯＮＴ２２の制御信号Ａ及びレジスタ制御信号Ａに基づいて、所定の部分が選択される。
【０１９３】
選択回路７１Ａ、７１Ｂの出力は、拡張回路７２Ａ、７２Ｂに入力される。ＣＯＮＴ２２の制御信号Ａに基づいて、符号無しバイトサイズ乗算（ＭＵＬＸＵ．Ｂ）の場合、上位８ビットを０拡張する。また、符号付きバイトサイズ乗算（ＭＵＬＸＳ．Ｂ）の場合、上位８ビットを符号拡張する。ワードサイズの場合は、選択回路７１Ａ、７１Ｂの出力をそのまま出力する。
【０１９４】
選択回路７１Ａ、７１Ｂの出力は出力バッファ７３Ｂ、７３Ｃに入力される。ＣＯＮＴ２２の制御信号Ａに基づいて、所定のタイミングで、拡張回路７２Ａ、７２Ｂの出力をＸバスまたはＹバスに出力する。
【０１９５】
乗算の終了時、及びＳＴＭＡＣ命令の場合は、Ｘバス、ＹバスからＷＢへの出力が行われる。Ｘバス、Ｙバスの入力は拡張回路７２Ｃに入力される。これは、ＭＡＣＨの上位２２ビットを符号拡張する。拡張回路７２Ｃの出力は出力バッファに入力される。ＣＯＮＴ２２の制御信号Ｃに基づいて、所定のタイミングで、拡張回路７２Ｃの出力をＷＢに出力する。
【０１９６】
ＭＡＣ命令のデータリード時、ＩＤＢからＸバス、Ｙバスへの入力が、それぞれ１回ずつ行われる。ＣＯＮＴ２２の制御信号Ａに基づいて、所定のタイミングで、ＩＤＢの内容をＸバスまたはＹバスに出力する。また、ＩＤＢは、ＤＢＷからの出力を入力可能とされ、ＤＢＲ及びＩＲへデータを入力可能とされる。
【０１９７】
図１９、２０に、ＭＡＣ命令の動作タイミングを示す。
【０１９８】
例えば、ＭＡＣ  ＠ＥＲ１＋，＠ＥＲ２＋命令などの例である。この場合のＥＲ１を第１のアドレスレジスタ、ＥＲ２を第２のアドレスレジスタとする。前記同様に、Ｔ２からＭＡＣ命令の実行が開始される。
【０１９９】
まず、プリフィックスコードの実行を行い、ＰＣ３０の内容をアドレスとした命令のリードを行い、また、ＰＣ３０の内容のインクリメントを行なう。
【０２００】
Ｔ３のφ＃で、レジスタ制御信号Ａに基づいて、第１のアドレスの内容をＧＢに読み出して、ＭＡＢ３３に転送し、ＩＡＢに出力する。
【０２０１】
Ｔ４のφで、第１のアドレスの内容をＧＢに読み出して、ＡＬＵ２６に入力し、インクリメントを行なう。
【０２０２】
Ｔ４のφ＃で、インクリメント結果を、ＷＢ経由で、第１のアドレスレジスタに格納する。バススイッチ３４に入力した、第１のリードデータをＸバスに出力すると共に、制御信号Ｂに含まれるＳＴＸ信号を活性状態にし、乗算器２にこの内容を入力ラッチＸにラッチさせる。同時に、第２のアドレスの内容をＧＢに読み出して、ＭＡＢに転送し、ＩＡＢに出力する。
【０２０３】
Ｔ５のφで、第２のアドレスの内容をＧＢに読み出して、ＡＬＵ２６に入力し、インクリメントを行なう。Ｔ５のφ＃で、インクリメント結果を、ＷＢ経由で、第２のアドレスレジスタに格納する。バススイッチ３４に入力した、第２のリードデータをＹバスに出力すると共に、制御信号Ｂに含まれるＳＴＹ信号を活性状態にし、乗算器２にこの内容を入力ラッチＹにラッチさせる。ＭＡＣ信号を活性状態にして、積和演算動作の開始を指示する。同時に、ＰＣ３０の内容をアドレスとした命令のリードを行い、また、ＰＣ３０の内容のインクリメントを行なう。
【０２０４】
Ｔ６のφで、インクリメント結果をＰＣ３０に格納する。一方、ＢＵＳＹ信号が活性状態になる。ＭＡＣ命令では、ＣＰＵ１は乗算器２とは並列に動作し、ＢＵＳＹ信号を無視して、次の命令の実行を開始する。
【０２０５】
ＭＡＣ命令を連続して実行した場合も、次のＭＡＣ命令がアドレス計算を行っている間に、乗算器の動作が終了するために、ＭＡＣ命令実行にウェイトを挿入することはない。
【０２０６】
プリフィックスコードを付した命令コードとすることにより、特開平−５１９８１号公報に記載されているように、互換性を保持しつつ命令セットを拡張することができる。また、乗算器動作中に、次の積和演算を行った場合、命令フェッチとデータのアクセスを行なうことができるから、命令長が長くなっても実行時間を低下させることがない。積和演算を連続的に高速に実行することができる。
【０２０７】
乗算器２は、演算終了時点で、ＳＹＳＣＲ１３のＭＡＣＳビットを参照して、オーバフローが発生していれば、ＭＡＣレジスタの内容を、上限（Ｈ’７ＦＦＦＦＦＦＦ）または下限（Ｈ’８０００００００）に固定する。
【０２０８】
図２１、２２に、ＳＴＭＡＣ、ＬＤＭＡＣ命令の動作タイミングを示す。
【０２０９】
例えば、ＳＴＭＡＣ  ＭＡＣＨ，ＥＲ２命令などの例である。前記同様に、Ｔ２からＳＴＭＡＣ命令の実行が開始される。
【０２１０】
まず、ＢＵＳＹ信号の状態をサンプリングする。ＢＵＳＹ信号が活性状態であれば、ウェイト状態になる。
【０２１１】
Ｔ２のφ＃でＰＣの内容がＧＢに読み出され、ＭＡＢ３３に入力されて、ＩＡＢに出力される。また、ＩＮＣ２７に入力されて、インクリメント動作が開始される。
【０２１２】
ＣＰＵ内部のクロックがロウレベルで固定され、ＣＰＵの動作を停止する。直前にＭＡＣ命令を実行した場合、ＢＵＳＹ信号は３ステートの期間活性状態であり、ＳＴＭＡＣ命令も３ステートウェイト状態になる。
【０２１３】
Ｔ５でＢＵＳＹ信号が非活性状態になると、Ｔ６からクロックの動作が開始される。
【０２１４】
Ｔ６のφで、インクリメント結果がＷＢに出力され、ＰＣ３０に格納される。ＳＴＭＡＣＨまたはＳＴＭＡＣＬ信号が活性状態になって、ＭＡＣレジスタの読み出しが指示される。ＭＡＣレジスタの内容がＸバス、Ｙバスに出力される。特に制限はされないものの、Ｘバスが上位、Ｙバスが下位の内容とされる。
【０２１５】
Ｔ６のφ＃で、Ｘバス、Ｙバスの内容がＷＢに出力されて、指定されたレジスタ（ＳＴＭＡＣ  ＭＡＣＨ，ＥＲ２の場合は、ＥＲ２）に格納される。同時に、乗算器のフラグの内容がＣＣＲのＮ、Ｚ、Ｖフラグに格納される。
【０２１６】
また、ＬＤＭＡＣ  ＥＲ１，ＭＡＣＬ命令などの例である。
【０２１７】
Ｔ８からＬＤＭＡＣ命令の実行が開始される。
【０２１８】
Ｔ９のφで、指定されたレジスタ（ＬＤＭＡＣ  ＥＲ１，ＭＡＣＬの場合は、ＥＲ１）の内容が読み出される。この内容がＸバス、Ｙバスに出力される。
【０２１９】
Ｔ９のφ＃で、ＬＤＭＡＣＨまたはＬＤＭＡＣＬ信号が活性状態になる。ＰＣ３０の内容がＧＢ経由で、ＭＡＢ３３とＩＮＣ２７に入力される。
【０２２０】
Ｔ１０のφで、インクリメントされた結果がＷＢ経由で、ＰＣ３０に格納される。また、Ｘバス、Ｙバスの内容がＭＡＣレジスタに格納される。
【０２２１】
前記同様に、ＢＵＳＹ信号が活性状態の場合は、ＬＤＭＡＣ命令も活性状態になるようにしてもよい。
【０２２２】
ＣＬＲＭＡＣ命令は、概略ＬＤＭＡＣ命令と同様の動作で、ＬＤＭＡＣ命令のＬＤＭＡＣＨ、Ｌ信号と同じタイミングで、ＣＬＲＭＡＣ信号を活性状態にするようにすればよい。
【０２２３】
図２３、２４に、乗算器を用いた乗算命令のタイミング図を示す。
【０２２４】
なお、ＣＯＮＴ２２の部分に、内部のステートマシンのステップの番号を記載した。これは、基本的には、ＣＯＮＴ２２の出力のフィードバック信号で形成される。また、制御信号ＣＰＵＳを用いて、乗算器を使用するか使用しないかを選択する。例えば、ＭＵＬＸＵ．Ｗ  Ｒ１，ＥＲ０などのバイトサイズ・符号無し乗算の例である。前記同様に、Ｔ２から実行を開始する。
【０２２５】
命令が解読されると、まず、Ｔ２のφ＃で、レジスタ制御信号Ａによって、汎用レジスタの読みだしを指示する。読出された結果は、ＧＢ、ＤＢおよびバススイッチ３４を介して、Ｘバス、Ｙバスに出力される。
【０２２６】
制御信号Ｂに含まれるＳＴＸ、ＳＴＹ信号に基づいて、Ｘバス、Ｙバスの内容は、Ｔ３のφで乗算器の入力ラッチにラッチされる。また、同時に、制御信号Ｂに含まれるＭＵＬ信号によって、乗算器に乗算を指示する。ＣＯＮＴ２２から、バイト／ワードの選択、符号付／符号無の選択、乗算／積和の選択を上記制御信号によって指示する。
【０２２７】
乗算器は、Ｔ３のφ＃で、ＢＵＳＹ信号を与える。また、マルチプレクサやデコーダを動作させる。Ｔ４のφで、１回目の加算を行なう。Ｔ４のφで部分積を乗算結果レジスタとフィードバックラッチに格納する。これを３回繰り返す。ＢＵＳＹ信号が活性状態になったことに呼応して、ＣＰＵはウェイト状態になる。
【０２２８】
Ｔ５のφでＢＵＳＹが非活性状態になって、ＣＰＵは動作を再開し、Ｔ６のφで、制御信号Ｃに含まれる、ＭＵＬＲＤ信号を活性状態にして、乗算結果レジスタのリードを指示する。乗算結果レジスタの内容は、Ｘバス、Ｙバスおよびバススイッチ３４を経由して、Ｔ６のφ＃でＷＢを経由して、レジスタ制御信号Ｃによって指定されるレジスタに格納される。同時に、乗算の結果フラグがＣＣＲ３１に格納される。
【０２２９】
前記の通り、乗算命令はＢＵＳＹ信号によって、クロックが停止し、ウェイト状態となる。バイトサイズ符号無し乗算命令（ＭＵＬＸＵ．Ｂ  Ｒ０Ｌ，Ｒ１など）は１ウェイトが挿入され、３ステートで実行される。ワードサイズ符号無し乗算命令（ＭＵＬＸＵ．Ｗ  Ｒ０，ＥＲ１など）は２ウェイトが挿入され、４ステートで実行される。なお、符号付き乗算の場合は、それぞれ、プリフィックスコードの実行が付加される。
【０２３０】
ＢＵＳＹ信号によって、演算実行の終了を判定することにより、制御回路（ＣＯＮＴ２２）の論理を縮小することができる。
【０２３１】
ＴＥＳＴＭＯＤＥ信号が活性状態になって、テストモードを指示された場合には、乗算器は１ステップの動作のみを行い、ＢＵＳＹ信号は非活性状態を保持する。ＣＰＵは１ステートで処理を終了する。
【０２３２】
図２５、２６に、乗算器を用いない乗算命令のタイミング図を示す。乗算器を用いない乗算は、特に制限はされないものの、除算と類似のシーケンスで行なうようにする。
【０２３３】
命令が解読されると、まず、汎用レジスタの読みだしを指示する。読出された結果は、符号判定を行なう。符号付／符号無の選択に対応して、符号判定を行い、除数は符号反転し、負数にする。そのほかは正数にする。
【０２３４】
被乗数を上位、下位は０にして１ビットずつシフトし、シフトした結果によって、下位側に乗数を加算するかを決める。その結果に対して、さらにシフトを行い、シフトした結果によって、下位側に乗数を加算を行っていく。これを８または１６回繰返して、乗算結果の絶対値を得る。例えば、ＭＵＬＸＵ．Ｂ  Ｒ１Ｌ，Ｒ０などのバイトサイズ・符号無し乗算の例である。前記同様に、Ｔ２から除算命令の実行が開始される。前記のような、所定の処理を行った後、Ｔ５から部分乗算を行なう。
【０２３５】
部分乗算は、左シフト処理と加算で構成される。前回の加算と次回のシフト処理を同一のＡＬＵ処理で行なうようにする。
【０２３６】
Ｔ５のφ１に同期して、指定されたレジスタ（ディスティネーションレジスタＲｄ）から被乗数を読み込み、シフト処理を行なう。シフト処理の結果（部分積）がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。また、シフトアウトされたキャリが内部で保持される。
【０２３７】
Ｔ６のφ１に同期して、Ｒｄから部分積を読み込み、部分乗算処理を行なう。前回のキャリが”１”である場合、部分積の下位８ビットに乗数を加算し、１６ビットでシフト処理を行い、最下位ビットは”０”とする。前記以外の場合、部分積に１６ビットでシフト処理を行い、最下位ビットは”０”とする。かかる結果がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。また、シフトアウトされたキャリが内部で保持される。この動作を７回繰り返す。
【０２３８】
Ｔ１３では、上記同様の判定を行い、前回のキャリが”１”である場合、部分積の下位８ビットに乗数を加算する。前記以外の場合、部分積を保持する。１６ビットの積が得られる。かかる結果がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。符号付きの場合は、Ｔ１４で符号処理を行なう。また、ワードサイズの場合は、部分乗算処理が８回追加される。
【０２３９】
先に保持した符号判定結果に基づいて、積の符号処理を行なう。すなわち、乗数・被乗数の一方が正数、他方が負数のときは、積の符号を反転する（０から積を引く）。
【０２４０】
図２７に、乗算命令の状態遷移図を示す。例えば、ＭＵＬＸＵ．Ｂ  Ｒ１Ｌ，Ｒ０などのバイトサイズ・符号無し乗算の例である。命令の実行が開始されると、ＣＰＵＳ信号の状態によって分岐する。
【０２４１】
ＣＰＵＳ信号が活性状態であって、乗算器の使用が許可されると、図６の動作を行なう。即ち、ステップ１で、指定されたレジスタの内容を、ＧＢ、ＤＢを経由して、Ｘ、Ｙバスに出力して、乗算器に供給する。ＢＵＳＹ信号の状態を判定する。テストモードであれば、ＢＵＳＹ信号は非活性状態であって、直ちにステップ２に遷移する。
【０２４２】
ＢＵＳＹ信号が活性状態であると、ＷＡＩＴ状態に遷移する。ＢＵＳＹ信号は非活性状態になるとステップ２に遷移する。
【０２４３】
ステップ２では、Ｘ、Ｙバスの内容をＷＢを経由して、指定されたレジスタにライトする。例えば、乗算器のフラグの内容をＣＣＲ３１に格納する。次の命令の実行を開始する。
【０２４４】
ＣＰＵＳ信号が非活性状態であって、乗算器の使用が禁止されると、図２５、２６の動作を行なう。即ち、ステップ１、２でデータアライメントなどを行った後、ステップ３から、部分乗算処理を行なう。ステップ３では、ＧＢ上位に被乗数を出力し、これをシフトする。
【０２４５】
ステップ４では、ＧＢに部分積を、ＤＢ下位に乗数を出力し、ＡＬＵ２６で加算を行なう。前のステップでシフトアウトしたビットが”１”であれば、加算した結果が選択され、シフトアウトしたビットが”０”であれば、ＧＢの内容が選択され、シフトを行なう。これをステップ１０まで繰り返す。
【０２４６】
ステップ１１では、ＧＢに部分積を、ＤＢ下位に乗数を出力し、ＡＬＵ２６で加算を行なう。前のステップでシフトアウトしたビットが”１”であれば、加算した結果が選択され、シフトアウトしたビットが”０”であれば、ＧＢの内容が選択される。シフトは行なわない。ステップ１２で、命令のリードを行なう。例えば、積を検査して、ＣＣＲに反映する。次の命令の実行を開始する。
【０２４７】
図２５、２６に、除算命令のタイミング図を示している。例えば、ＤＩＶＸＵ．Ｂ  Ｒ１Ｌ，Ｒ０などのバイトサイズ・符号無し除算の例である。前記同様に、Ｔ２から除算命令の実行が開始される。除数の符号反転などの、所定の処理を行った後、Ｔ５から部分除算を行なう。部分除算は、左シフト処理と減算で構成される。前回の減算と次回のシフト処理を同一のＡＬＵ処理で行なうようにする。
【０２４８】
Ｔ５のφ１に同期して、指定されたレジスタ（ディスティネーションレジスタＲｄ）から被除数を読み込み、シフト処理を行なう。シフト処理の結果（部分剰余）がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。また、シフトアウトされたキャリが内部で保持される。
【０２４９】
Ｔ６のφ１に同期して、Ｒｄから部分剰余を読み込み、部分除算処理を行なう。前回のキャリが”１”である場合、または、部分剰余の上位８ビットが除数以上である場合、部分剰余の上位８ビットから除数を減算（除数の符号反転を行っている場合、除数の反転を加算）し、１６ビットでシフト処理を行い、最下位ビットは”１”とする。前記以外の場合、部分剰余に１６ビットでシフト処理を行い、最下位ビットは”０”とする。かかる結果がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。また、シフトアウトされたキャリが内部で保持される。この動作を７回繰り返す。
【０２５０】
Ｔ１３では、上記同様の判定を行い、前回のキャリが”１”である場合、または、部分剰余の上位８ビットが除数以上である場合、部分剰余の上位８ビットから除数を減算し、下位８ビットでシフト処理を行い、最下位ビットは”１”とする。前記以外の場合、部分剰余に下位８ビットでシフト処理を行い、最下位ビットは”０”とする。いずれの場合も、ビット７の値は失われる。上位８ビットに剰余、下位８ビットに商が得られる。かかる結果がφ＃に同期してＷＢを経由して、Ｒｄにライトされる。
【０２５１】
符号付きの場合は、Ｔ１４で符号処理を行なう。また、ワードサイズの場合は、部分除算処理が８回追加される。
【０２５２】
図２８に、ＡＬＵ２６の概略ブロック図を示す。ＡＬＵ２６は、算術論理演算回路７６と、選択回路７７、シフト回路７８、制御回路７９から構成される。乗除算に直接関係のない部分は省略している。
【０２５３】
算術論理演算回路７６は、ＧＢとＤＢの内容を入力して、加算、減算、論理積、論理和、排他的論理和などの演算を行い、結果を出力する。選択回路７７は、算術論理演算回路の出力と、ＧＢの内容を入力して、いずれかを選択して出力する。シフト回路７８は、選択回路７７の出力を入力して、シフト処理を行なう。
【０２５４】
選択回路７７、シフト回路７８は制御回路７９によって制御される。制御回路７９は、ＣＯＮＴ２２の与える制御信号と算術論理演算回路７６とシフト回路７８の出力によって、選択回路７７の選択とシフト回路７８のシフト入力を制御する。制御回路７９が、前記の部分乗算、部分除算の判定を行なう。条件が成立していれば、算術論理演算回路７６の出力を選択し、除算の場合、１をシフト回路に入力する。条件が不成立であれば、ＧＢの入力を選択し、除算の場合、０をシフト回路に入力する。乗算の場合のシフト回路の入力は、０とされる。
【０２５５】
除算の部分除算と乗算の部分乗算の処理のシーケンス、及びＡＬＵ２６の回路構成を共通化する。除算と乗算を共通化して、ＣＯＮＴ２２の論理規模を縮小できる。
【０２５６】
これにより、乗算器を持たないＣＰＵを容易に提供することができる。乗算器を持つＣＰＵにおいて不必要な乗算器を用いない乗算の論理を除算と共通化して、論理規模の増加を最低限にすることができる。
【０２５７】
また、ＣＰＵＳによって、乗算器を用いない選択を可能にすることによって、テスト性を向上することができる。テスト時に、乗算器を用いるか用いないかを選択することに両方の論理をテストの対象にすることができる。
【０２５８】
複数命令の待避／復帰命令の命令コードは表１６の通りである。
【０２５９】
最初に使用するレジスタ番号が、命令コード中に指定される。例えば、昭和５年３月（株）日立製作所発行『Ｈ８／５００シリーズプログラミングマニュアル』に記載の複数命令の待避／復帰命令のように任意のレジスタの組み合わせを指定するのではなく、連続したレジスタ番号の固定の組み合わせとし、２、３、４本の固定の組み合わせとしている。命令コードも、レジスタ本数に応じて３種類を用意している。
【０２６０】
複数命令の待避命令は、待避するレジスタの本数に対応して、
ＳＴＭ（ＥＲｌ−ＥＲｌ＋１），＠−ＳＰ
ＳＴＭ（ＥＲｍ−ＥＲｍ＋２），＠−ＳＰ
ＳＴＭ（ＥＲｎ−ＥＲｎ＋３），＠−ＳＰ
の３種類を有する。ｌ＝０、２、４、６であり、ｍ、ｎ＝０、４である。指定した汎用レジスタをスタックに待避する。例えば、ＥＲ０とＥＲ１をスタックに待避する場合は、
ＳＴＭ（ＥＲ０−ＥＲ１），＠−ＳＰ
を用いる。ＥＲ０、ＥＲ１の順番でスタックにライトされ、スタックポインタ（ＥＲ７）は＋８される。命令コード中のレジスタ指定部は、最初に待避されるレジスタ番号にしてある。
【０２６１】
図２９、３０に複数レジスタの待避命令の実行シーケンスを示す。例えば、ＳＴＭ．Ｌ  ＥＲ０−ＥＲ１，＠−ＳＰなどの２本の汎用レジスタを待避する例である。レジスタ指定フィールドはＢ’０００である（Ｂ’は２進数を示す）。
【０２６２】
前記同様に、Ｔ２から除算命令の実行が開始される。特に制限はされないものの、命令コードの第１ワードはプリフィックスコードであり、次の命令コードの動作を指定し、ＰＣをインクリメントするほかの動作は行なわない。
【０２６３】
第２ワードの命令コードは、ＰＵＳＨ命令と共通にされる。
【０２６４】
Ｔ４のφで、ＳＰの内容をＧＢに読み出し、ＡＬＵ２６に入力する。ＡＬＵ２６では−４の演算を行なう。なお、前記の通り、実行前のＳＰはスタックの先頭アドレスを示しているとする。
【０２６５】
Ｔ４のφ＃で演算結果がＷＢとＧＢに出力される。ＷＢからＳＰに書き込まれ、ＧＢからＭＡＢ３３に格納される。ＭＡＢ３３の内容がＩＡＢに出力される。また、第１の制御信号ＢとＲＳＥＬ２（＝Ｂ’０００）とによって、待避されるレジスタが選択され、レジスタ制御信号Ｂが生成される。
【０２６６】
Ｔ５のφで、選択されたレジスタ（ＥＲ０）の内容がＤＢ経由で、ＤＢＷ２４に転送される。
【０２６７】
Ｔ５のφ＃で、転送されたデータ（ＥＲ０の内容）の上位１６ビット（Ｅレジスタの内容）が内部データバスに出力される。また、ＭＡＢ３３のインクリメント機能によって、ＩＡＢの出力値を＋２とする。
【０２６８】
Ｔ６のφで、更に、ＳＰの内容をＧＢに読み出し、ＡＬＵ２６に入力する。ＡＬＵ２６では−４の演算を行なう。
【０２６９】
Ｔ６のφ＃で、ＤＢＷ２４に転送されたデータの下位１６ビット（Ｒレジスタの内容）が内部データバスに出力される。ＡＬＵ２６の演算結果がＷＢとＧＢに出力される。ＷＢからＳＰに書き込まれ、ＧＢからＭＡＢに格納される。ＭＡＢ３３の内容がＩＡＢに出力される。また、第２の制御信号ＢによってＲＳＥＬのビット０が反転される。第１の制御信号とＲＳＥＬ２（＝Ｂ’００１）とによって、待避されるレジスタが選択され、レジスタ制御信号Ｂが生成される。
【０２７０】
Ｔ７のφで、選択されたレジスタ（ＥＲ１）の内容がＤＢ経由で、ＤＢＷ２４に転送される。
【０２７１】
Ｔ７のφ＃で、転送されたデータ（ＥＲ１の内容）の上位１６ビット（Ｅレジスタの内容）が内部データバスに出力される。また、ＭＡＢ３３のインクリメント機能によって、ＩＡＢの出力値を＋２とする。
【０２７２】
Ｔ８のφ＃で、ＤＢＷ２４に転送されたデータの下位１６ビット（Ｒレジスタの内容）が内部データバスに出力される。
【０２７３】
Ｔ８のφ＃以降で、前記同様に、次の次の命令の読み出しと、ＰＣ３０のインクリメント（＋２）を行なう。
【０２７４】
レジスタ３本を指定した場合は、実行ステート数が２ステート長くなり、ＳＰのデクリメント（−４）と、ＲＳＥＬのビット１が反転される。ＲＳＥＬは、レジスタ指定フィールドが０００の場合、０１０とされ、汎用レジスタＥＲ２が選択される。ライト動作が２回行われる。
【０２７５】
レジスタ４本を指定した場合は、更に、実行ステート数が２ステート長くなり、ＳＰのデクリメント（−４）と、ＲＳＥＬのビット１とビット０が反転される。ＲＳＥＬは、レジスタ指定フィールドが０００の場合、０１１とされ、汎用レジスタＥＲ２３が選択される。ライト動作が２回行われる。
【０２７６】
レジスタ番号の下位ビットが固定であるので、これを命令処理の実行に従って、変更させることが容易である。例えば、２本のレジスタを待避する場合、命令コード上のレジスタ指定フィールドの下位ビットは０であるので、１回めのレジスタ指定は、レジスタ指定フィールドの値に従い、２回のレジスタ指定は、ＣＯＮＴ２２の制御に従って、レジスタ指定フィールドの下位１ビットを１に変更して、行なうようにする。
【０２７７】
一方、ＰＵＳＨ命令はレジスタ１本の待避であり、前記の２回目の待避動作を行なわないようにされ、実行動作の共通化を図っている。
【０２７８】
図３１、３２に複数レジスタの復帰命令の実行シーケンスを示す。例えば、ＬＤＭ．Ｌ  ＠ＥＲ７＋，ＥＲ０−ＥＲ１などの２本の汎用レジスタを待避する例である。レジスタ指定フィールドは００１である。
【０２７９】
図３３、３４に、ＲＳＥＬ２入力制御回路の具体的な構成、およびその動作説明を示す。この制御回路は、アンド回路７５Ａ、７５Ｂ、オア回路８０Ａ、８０Ｂから構成される。
【０２８０】
ビット２には、オペコードのレジスタ指定フィールドのビット２がそのまま入力される。ビット１、０には、オアゲートとアンドゲートを介して入力される。オアゲートの他方の入力はＳＴＭ制御信号１、０であり、アンドゲートの他方の入力はＬＤＭ制御信号１、０の反転とされる。ＳＴＭ制御信号１、０およびＬＤＭ制御信号１、０は、ＣＯＮＴ２２の出力である制御信号Ｂに含まれる。
【０２８１】
ＳＴＭ制御信号が活性状態になると、当該ＲＳＥＬビットは１になる。また、ＬＤＭ制御信号が活性状態になると、当該ＲＳＥＬビットは０になる。ＳＴＭ、ＬＤＭ命令と指定したレジスタ本数に従って、ＳＴＭ制御信号、ＬＤＭ制御信号が生成される。
【０２８２】
これにより、レジスタ選択回路をそのほかの命令と共通化することができる。共通化によって、物理的規模の増加を抑止できる。
【０２８３】
図３５、３６に、Ｃ言語で書かれた関数と、これをＣＰＵの命令に変換したリストの概略を示す。このリストには、オフセット（相対アドレス）、命令コード、Ｃラベル、Ｃソース及びアセンブラ命令の各項目が示されている。
【０２８４】
Ｃ言語からＣＰＵの命令へのコンパイルについては、例えば、平成４年９月（株）日立製作所発行『Ｈ８／３００シリーズＣコンパイラ』に記載されている。引数を汎用レジスタＥＲ０、ＥＲ１に設定しておくことができる。
【０２８５】
関数Ｐｒｏｃ１では、引数をレジスタ渡しとし、これをＥＲ０に割り当てている。関数内の処理で、ＥＲ２、３、４、６を使用するため、関数処理の先頭で、
ＳＴＭ  （ＥＲ２−ＥＲ３），＠−ＳＰ
ＳＴＭ  （ＥＲ４−ＥＲ６），＠−ＳＰ
を実行して、関数の最後で、
ＬＤＭ  ＠ＳＰ＋，（ＥＲ４−ＥＲ６）
ＬＤＭ  ＠ＳＰ＋，（ＥＲ２−ＥＲ３）
を実行して、サブルーチンからリターン（ＲＴＳ）している。
【０２８６】
ＥＲ０、ＥＲ１は引数領域のため、関数内では使用せず、内容の待避／復帰も行なわない。
【０２８７】
また、この関数内で呼び出される関数Ｐｒｏｃ３は、引数をレジスタ渡しとし、これをＥＲ０に割り当てている。関数内の処理で、ＥＲ５を使用するため、関数処理の先頭で、１レジスタの待避
ＰＵＳＨ．Ｌ  ＥＲ５
を実行して、関数の最後で、
ＰＯＰ．Ｌ  ＥＲ５
を実行して、サブルーチンからリターン（ＲＴＳ）している。
【０２８８】
スタックポインタはＥＲ７と兼用であるから、ＥＲ７を待避／復帰することは意味がない。従って、タスク切替えを行なう場合に使用可能なすべてのレジスタを待避する場合には、
ＳＴＭ  ＠ＳＰ＋，（ＥＲ０−ＥＲ３）
ＳＴＭ  ＠ＳＰ＋，（ＥＲ４−ＥＲ６）
の２命令を用いる。ＥＲ０からＥＲ６の順番でスタックに待避される。同様に、復帰する場合には、
ＬＤＭ  ＠ＳＰ＋，（ＥＲ４−ＥＲ６）
ＬＤＭ  ＠ＳＰ＋，（ＥＲ０−ＥＲ３）
の２命令を用いる。ＥＲ６からＥＲ０の順番でスタックから復帰される。
【０２８９】
前記のように任意の組み合わせを指定できないが、予め、レジスタの割当てを行っておくことにより、実質的な制約にはなりにくい。７本のレジスタを待避／復帰する場合に２命令を用いることになるが、全体的な実行ステート数やプログラム容量に対しては影響が小さい。少なくとも、１本のレジスタずつの待避／復帰命令を用いるより効果がある。後者の場合、４バイト×７、５ステート×７であるのに対して、前者では、４バイト×２、９＋１１ステートで実行できる。少なくとも、命令リードのためのリードサイクルや、アドレス計算のための内部動作の分を短縮して、高速化を図ることができる。
【０２９０】
前記Ｃ言語で書かれたプログラムのように、関数乃至サブルーチンを多く用いるプログラムの高速化を実現することができる。
【０２９１】
また、上記のような関数乃至サブルーチンの場合のほかに、割り込み処理ルーチンにおいても、同様のレジスタの待避／復帰を行なう必要がある。マイクロコンピュータが機器制御などを行なう場合には、割り込み処理については、割り込みのイベントが発生してから、実際の割り込み処理を実行するまでの時間を短縮することによって、リアルタイム制御性を向上することができる。複数レジスタの待避を高速に実行可能にすることにより、かかるリアルタイム制御性の向上に効果がある。
【０２９２】
また、固定の組み合わせにし、各命令の実行ステート数を固定にすることにより、内部の条件分岐を行なうことをなくし、内部論理を簡潔にし、論理規模を縮小できる。マイクロプログラムによらず、ワイアードロジックなどでも容易に実現できる。マイクロプログラムによらず、ワイアードロジックなどとすることにより、論理回路の高速化に寄与することができる。特に、Ｃ言語など関数乃至サブルーチンを多く用いるプログラムを高速に実行することができる。
【０２９３】
図３７、３８に、割込み例外処理のシーケンスを示す。
【０２９４】
図３９に、例外処理の状態遷移図を示す。
【０２９５】
前記同様に、Ｔ２から割り込み例外処理の実行が開始される。プリフェッチした命令はキャンセルされ、図示されない割り込み要求信号に呼応して、ＣＯＮＴ２２の入力が切り換えられる。
【０２９６】
ステップ１の動作として、ＰＣ３０のデクリメントを行なう。Ｔ２のφ＃で、ＰＣ３０の内容を読み出して、ＧＢ経由で、ＩＮＣ２７でデクリメント（−４）を行なう。これはプリフェッチをキャンセルしたことに対応して、待避すべきＰＣ３０の値を算出する。
【０２９７】
Ｔ３のφで、デクリメントした結果を、ＷＢ経由で一旦ＰＣ３０に格納する。
【０２９８】
ステップ２で、ＳＰをデクリメントし、この内容をアドレスとして、ＰＣ３０の内容をデータとして、ライト動作を行なう。即ち、Ｔ３のφで、同時に、ＳＰの内容を読み出して、ＧＢ経由でＡＬＵ２６でデクリメント（−２）を行なう。
【０２９９】
Ｔ３のφ＃で、デクリメントした結果を、ＷＢ経由でＳＰに格納するとともに、ＧＢ経由でＭＡＢ３３に転送し、ＩＡＢに出力させる。
【０３００】
Ｔ４のφで、ＰＣ３０の内容をＤＢ経由でＤＢＷ２４に転送する。ＤＢＷ２４の内容は、Ｔ４のφ＃から、内部データバスに出力される。
【０３０１】
ステップ３で、ＳＰをデクリメントし、この内容をアドレスとして、ＰＣ３０の上位８ビットとＣＣＲ３１の内容をデータとして、ライト動作を行なう。
【０３０２】
Ｔ４のφで、同時に、ＳＰの内容を読み出して、ＧＢ経由でＡＬＵ２６でデクリメント（−２）を行なう。
【０３０３】
Ｔ４のφ＃で、デクリメントした結果を、ＷＢ経由でＳＰに格納するとともに、ＧＢ経由でＭＡＢ３３に転送し、ＩＡＢに出力させる。ＤＢＷ２４に保持したＰＣ３０の内容下位１６ビットを内部データバスに出力する。
【０３０４】
Ｔ５のφで、ＣＣＲ３１の内容をＤＢ経由でＤＢＷ２４に転送する。Ｔ４で格納したＰＣ３０の上位８ビットは保持される。ＤＢＷ２４の内容は、Ｔ５のφ＃から、内部データバスに出力される。
【０３０５】
ＩＮＴＭ１信号が非活性状態であれば、ステップ４に遷移する。ＩＮＴＭ１信号が活性状態であれば、ステップ１２に遷移し、ＳＰをデクリメントし、この内容をアドレスとして、ＥＸＲの内容をデータとして、ライト動作を行なう。
【０３０６】
Ｔ５のφで、ＳＰの内容を読み出して、ＧＢ経由でＡＬＵ２７でデクリメント（−２）を行なう。
【０３０７】
Ｔ５のφ＃で、デクリメントした結果を、ＷＢ経由でＳＰに格納する。
【０３０８】
Ｔ６のφで、ＥＸＲの内容をＤＢ経由でＤＢＷ２４に転送する。Ｔ６のφ＃から、内部データバスに出力される。
【０３０９】
ステップ４で、ベクタアドレスの内容をリードする。
【０３１０】
Ｔ５のφ＃で、同時に、ＶＡＧの内容をＧＢ経由でＭＡＢ３３に転送し、ＩＡＢに出力させる。ＶＡＧには、図示されない、割り込みコントローラから与えられるベクタ番号に基づいて、ベクタアドレスを生成する。
【０３１１】
ステップ５で、ベクタアドレスのリード動作の終了を待つ。
【０３１２】
ステップ６で、ＤＢＲ２５に格納した、ベクタアドレスの内容をアドレスとして、命令のリードを行なう。ＤＢＲ２５の内容をインクリメントし、ＰＣ３０に格納する。
【０３１３】
Ｔ８のφ＃で、ＤＢＲ２５に格納したベクタアドレスのリード内容（分岐先の先頭アドレス）をＧＢ経由で、ＭＡＢ３３に転送し、ＩＡＢに出力させ、ＡＬＵ２６でインクリメント（＋２）する。
【０３１４】
Ｔ９のφで、インクリメントした結果を、ＷＢ経由でＰＣ３０に格納する。
【０３１５】
ステップ７で、ＰＣ３０の内容をアドレスとして、命令のリードを行い、ＰＣ３０のインクリメントを行なう。
【０３１６】
Ｔ９のφ＃で、ＰＣ３０の内容（分岐先の先頭アドレス）をＧＢ経由で、ＭＡＢ３３に転送し、ＩＡＢに出力させ、ＡＬＵ２６でインクリメント（＋２）する。リードした命令をＩＲ２１に格納する。
【０３１７】
Ｔ１０のφで、インクリメントした結果を、ＷＢ経由でＰＣ３０に格納する。
【０３１８】
次の命令の実行を開始させる。
【０３１９】
制御信号ＩＮＴＭ１に従って、ステップ１２を行なうか、行なわないかが選択され、スタックを２回行なうか、３回行なうかが選択される。スタックを２回行なう場合には、ＰＣとＣＣＲ３１のみが待避される。ＳＰは−４となる。上記Ｔ５の動作に相当する部分（ステップ１２）が実行されない。３回行なう場合には、ＰＣ３０とＣＣＲ３１及びＥＸＲが待避される。ＳＰは−６となる。
【０３２０】
なお、ステップ１単位の動作が複数ステートにまたがっているのは、１つのＣＯＮＴ２２の入力に対応して、複数の異なるタイミングの制御信号Ａ、Ｂ、Ｃ及びレジスタ選択信号Ａ、Ｂ、Ｃが生成されるのに対応する。
【０３２１】
図４０、４１に、例外処理後のスタックの状態を示す。図４１はノーマルモードを示し、図４２はアドバンストモードを示している。
【０３２２】
図４２に、ＲＴＥ命令の実行シーケンスを示す。
【０３２３】
図４３に、例外処理の状態遷移図を示す。
【０３２４】
前記同様に、Ｔ２からＲＴＥ命令の実行が開始される。
【０３２５】
ステップ１の動作として、ＳＰの内容をアドレスとして、スタックのリードを行なう。Ｔ２のφ＃で、ＳＰの内容を読み出して、ＧＢ経由で、ＭＡＢ３３に転送し、ＩＡＢに出力させる。
【０３２６】
Ｔ３のφで、ＳＰの内容を読み出して、ＧＢ経由で、ＡＬＵ２７でインクリメント（＋２）する。ＩＡＢのアドレスでスタックをリードする。Ｔ３のφ＃で、リードした内容をＤＢＲ２５に格納する。
【０３２７】
ＩＮＴＭ１信号が非活性状態であれば、ステップ２に遷移する。ＩＮＴＭ１信号が活性状態であれば、ステップ１０に遷移し、リードした結果をＥＸＲに格納する。ＳＰをインクリメントし、この内容でリードを行なう。
【０３２８】
Ｔ３のφ＃で、同時に、インクリメントした結果を、ＷＢ経由でＳＰに格納する。また、ＧＢを経由して、ＭＡＢ３３に転送し、ＩＡＢに出力させる。
【０３２９】
Ｔ４のφで、ＤＢＲ２５の内容をＧＢに読み出し、これをＡＬＵ２７に入力する。Ｔ４のφ＃で、ＡＬＵ２７はＧＢから入力した内容をそのまま、ＷＢに出力し、ＥＸＲに格納する。
【０３３０】
ステップ２で、リードした結果をＣＣＲ３１に格納する。ＭＡＢ３３に格納した内容を、ＭＡＢ３３でインクリメントさせる。この内容でリードを行なう。なお、ＭＡＢ３３のインクリメント機能は、特開平４−３３３１５３号公報などに記載されている。
【０３３１】
Ｔ５のφで、ＤＢＲ２５の内容をＧＢに読み出し、これをＡＬＵ２７に入力する。Ｔ５のφ＃で、ＡＬＵ２７はＧＢから入力した内容をそのまま、ＷＢに出力し、ＣＣＲ３１に格納する。
【０３３２】
ステップ３で、ＳＰの内容をインクリメント（＋４）する。
【０３３３】
Ｔ６のφで、ＳＰの内容を読み出して、ＧＢ経由で、ＡＬＵ２６でインクリメント（＋４）する。
【０３３４】
Ｔ６のφ＃で、インクリメントした結果を、ＷＢ経由でＳＰに格納する。
【０３３５】
ステップ４で、ＤＢＲ２５に格納した、スタックから復帰したＰＣ３０の内容をアドレスとして、命令のリードを行なう。ＤＢＲ２５の内容をインクリメントし、ＰＣ３０に格納する。
【０３３６】
Ｔ６のφ＃で、同時に、ＤＢＲ２５に格納したベクタアドレスのリード内容（分岐先の先頭アドレス）をＧＢ経由で、ＭＡＢに転送し、ＩＡＢに出力させ、ＡＬＵでインクリメント（＋２）する。
【０３３７】
Ｔ７のφで、インクリメントした結果を、ＷＢ経由でＰＣ３０に格納する。
【０３３８】
ステップ５で、ＰＣ３０の内容をアドレスとして、命令のリードを行い、ＰＣ３０のインクリメントを行なう。
【０３３９】
Ｔ７のφ＃で、ＰＣ３０の内容（分岐先の先頭アドレス）をＧＢ経由で、ＭＡＢ３３に転送し、ＩＡＢに出力させ、ＡＬＵ２６でインクリメント（＋２）する。リードした命令をＩＲに格納する。
【０３４０】
Ｔ８のφで、インクリメントした結果を、ＷＢ経由でＰＣ３０に格納する。次の命令の実行を開始させる。
【０３４１】
例えば、ＩＮＴＭ１信号が０レベルの場合には、前記従来ＣＰＵ（例えば、前記平成５年６月（株）日立製作所発行『Ｈ８／３００Ｈシリーズプログラミングマニュアル』に記載のＣＰＵ）と同一のスタックの構造とされる。命令コードが共通であることと相俟って、従来ＣＰＵによって書かれたプログラムをそのまま実行することができる。
【０３４２】
新たな、コンディションコードや割込みマスクビットやトレースビットなどを追加する場合には、これに対応したプログラムを作成することになるから、スタックの構造が異なっても実質的な問題はない。割込みマスクビットを追加するなどして、使い勝手を向上することができる。
【０３４３】
なお、前記の通りＩＮＴＭ１ビットがＳＹＳＣＲに存在し、このビットの状態がＩＮＴＭ１信号に反映されるようになっている。リセット後に、かかるＳＹＳＣＲの設定を行なうことにより、ＥＸＲを使用するかしないかが選択される。
【０３４４】
図４４にＣＯＮＴ２２の一部の論理を示す。このＣＯＮＴ２２は、アンド回路８６Ａ〜８６Ｄによって構成される。
【０３４５】
ＥＸＲを使用しない、すなわち、ＩＮＴＭ１ビットを”０”にクリアすると、ＥＸＲのビットは全て”０”とみなされ、設定値は、無視されるようにされる。
【０３４６】
次に、図４におけるエミュレーション用インタフェース３９に含まれる制御レジスタ４１の構成を示す。この制御レジスタ４１は、以下説明するように、（１）ＡＳＥコントロールレジスタ  Ｄ  （ＡＳＥＣＲＤ）、（２）ブレークコントロールレジスタ  Ａ  Ｂ（ＢＲＣＲＡ、Ｂ）、（３）ブレークアドレスレジスタ  Ａ、Ｂ（ＢＡＲＡ、Ｂ）、（４）ブレークアドレスマスクレジスタ  Ａ、Ｂ（ＢＡＭＲＡ、Ｂ）、および（５）ＡＳＥ専用スタックレジスタ（ＢＲＫＳＴＫＲ）から構成されている。
【０３４７】
図４５に、（１）ＡＳＥコントロールレジスタ  Ｄ  （ＡＳＥＣＲＤ）の構成を示す。このレジスタは８ビットリード／ライト可能なレジスタで、シングルステップの設定、ＲＴＢ命令実行後の割込制御、多重ブレークの許可禁止、ウインドウ機能を指定する。各ビットの内容を表２１乃至表２４に示す。
【０３４８】
［表２１］
2004295914.tif 000023
【０３４９】
［表２２］
2004295914.tif 000024
【０３５０】
［表２３］
2004295914.tif 000025
【０３５１】
［表２４］
2004295914.tif 000026
【０３５２】
図４６に、（２）ブレークコントロールレジスタ  Ａ  Ｂ（ＢＲＣＲＡ、Ｂ）の構成を示す。このレジスタは、（ａ）ＢＲＣＲＡ、（ｂ）ＢＲＣＲＢからなり、各々は８ビットのリード／ライトが可能なレジスタで、それぞれＰＣブレークのチャネルＡ、Ｂの制御を行なう。各ビットの内容を表２５乃至表２８に示す。
【０３５３】
［表２５］
2004295914.tif 000027
【０３５４】
［表２６］
2004295914.tif 000028
【０３５５】
［表２７］
2004295914.tif 000029
【０３５６】
［表２８］
2004295914.tif 000030
【０３５７】
図４７に、（３）ブレークアドレスレジスタ  Ａ、Ｂ（ＢＡＲＡ、Ｂ）の構成を示す。このレジスタは、（ａ）ＢＡＲＡ、（ｂ）ＢＡＲＢからなり、各々は３２ビットのリード／ライトが可能なレジスタで、それぞれＰＣブレークのチャネルＡ、Ｂのアドレスを指定する。３２ビットのレジスタをバイトサイズに分割して、ＢＡＲＲ、Ｅ、Ｈ、Ｌと表記される場合もある。最上位のＢＡＲＲはリザーブされている。リードすると不定値が読み出される。ライトは無効である。
【０３５８】
図４８に、（４）ブレークアドレスマスクレジスタ  Ａ、Ｂ（ＢＡＭＲＡ、Ｂ）の構成を示す。このレジスタは、（ａ）ＢＡＭＲＡ、（ｂ）ＢＡＭＲＢからなり、各々は３２ビットのリード／ライトが可能なレジスタで、それぞれＰＣブレークのチャネルＡ、Ｂのアドレス比較のマスクを行なうビットを指定する。ＢＡＭＲのビットを”１”にセットすると、このビットに対応するアドレスのビットは、アドレス比較対象から除外される。３２ビットのレジスタをバイトサイズに分割して、ＢＡＭＲＲ、Ｅ、Ｈ、Ｌと表記される場合もある。最上位のＢＡＲＲはリザーブされている。リードすると不定値が読み出される。ライトは無効である。
【０３５９】
図４９に、（５）ＡＳＥ専用スタックレジスタ（ＢＲＫＳＴＫＲ）の構成を示す。このレジスタは、６バイト（４８ビット）のリード／ライトが可能なレジスタで、ユーザモード⇔ブレークモードの遷移時に、スタック領域として使用する。ユーザのＳＰは使用せず、保持される。スタックされるリソースおよびスタックの構造は、ＭＣＵ動作モード（ノーマルモード／アドバンストモード）および、制御レジスタの設定（ＳＹＳＣＲのＩＮＴＭ１ビット）によって相違される。表２９にこのレジスタの使用方法を示す。
【０３６０】
［表２９］
2004295914.tif 000031
【０３６１】
エミュレーション用ソフトウェアの実行状態への遷移（ブレーク）時には、固定アドレスのブレークスタックレジスタを使用するようにする。ブレーク例外処理や、ブレークからのリターン命令時には、ユーザのスタックポインタ（ＥＲ７）を使用せず、固定的なスタックアドレスを生成する。かかるスタックアドレスの生成はＥＭＬＳＰ２９による。
【０３６２】
図５０に、ＥＭＬＳＰ２９の構成を示す。このＥＭＬＳＰ２９は、クロックトバッファで構成される。
【０３６３】
かかるクロックトバッファの内、ビット２３〜１０は１固定、ビット５、４、０は０固定、ビット９〜６は、外部からの指定を入力する。また、ビット３、２、１はＣＯＮＴ２２の制御信号を入力する。ＣＭＯＳ回路で構成する場合、必要に応じて論理反転を用いればよい。クロックトバッファの出力はＧＢに接続されている。また制御信号ｍは、ＣＯＮＴの制御信号とクロック（φ＃）の論理積信号である。
【０３６４】
通常のレジスタ回路が、データを保持するためのラッチ回路を持たなければならないが、ＥＭＬＳＰ２９は、これを持たず、小型化を図っている。
【０３６５】
従って、ブレークスタックレジスタの先頭アドレスは、Ｂ’００００００であって、６４ｋバイト単位で１６通りのアドレスを選択可能とされる。マイクロコンピュータの内部Ｉ／Ｏレジスタの配置によって、アドレスを変更できる。
【０３６６】
ブレーク例外処理の実行シーケンスは、図３７、３８と同様であり、そこでのＳＰ（ＥＲ７）の読み出しに代わって、ＥＭＬＳＰ２９を読み出すようにする。
この場合、最初（Ｔ３のφ）は下位アドレスをＢ’０００１１０として、デクリメントした内容のＢ’０００１００がスタックのアドレスとされる。
【０３６７】
２回目（Ｔ４のφ）は下位アドレスをＢ’０００１００として、デクリメントした内容のＢ’００００１０がスタックのアドレスとされる。
【０３６８】
３回目（Ｔ５のφ）は下位アドレスをＢ’００００１０として、デクリメントした内容のＢ’００００００がスタックのアドレスとされる。３回目は、ＩＮＴＭ信号が活性状態のときに有効である。読み出されるビット２、１は、ＣＯＮＴ２２の制御信号によって選択する。
【０３６９】
リターン命令の実行シーケンスは、図４２と同様であり、ＳＰ（ＥＲ７）の読み出しに代わって、ＥＭＬＳＰ２９を読み出すようにする。
【０３７０】
最初（Ｔ２のφ＃）はＩＮＴＭ１信号によって異なり、ＩＮＴＭ１信号が非活性状態であれば、下位アドレスをＢ’００００１０として、ＩＮＴＭ１信号が活性状態であれば、下位アドレスをＢ’００００００として、読み出す。これらがスタックのアドレスとなる。
【０３７１】
２回目（Ｔ３のφ）は、ＩＮＴＭ１信号が活性状態である場合に有効であり、下位アドレスをＢ’００００１０として、デクリメントした結果をアドレスとしてリードを行なう。
【０３７２】
３回目はＭＡＢ３３のインクリメントによってアドレスを生成し、ＥＭＬＳＰ２９は使用しない。
【０３７３】
これにより、固定的な出力回路として論理規模を縮小できる。ユーザに公開されない資源による論理規模の増大を最小限にすることができる。
【０３７４】
図５１に、ブレーク例外処理の実行タイミングを示す。実行シーケンスは図３７、３８の例外処理タイミングと同様である。
【０３７５】
前記同様に、Ｔ２から割り込み例外処理の実行が開始される。プリフェッチした命令はキャンセルされ、図示されないブレーク要求信号に呼応して、ＣＯＮＴ２２の入力が切り換えられる。
【０３７６】
Ｔ３のバス動作が行われない期間に、ブレークモードを示す信号ＢＲＫＡＫ＃が活性状態になる。
【０３７７】
図５２に、ブレーク制御論理の回路構成を示す。この回路は、アンド回路８１Ａ乃至８１Ｇ、オア回路８２Ａ乃至８２Ｄ、フリップフロップ８３から構成されている。
【０３７８】
ＣＰＵに対するブレーク要求は、３要因が存在する。第１はＢＲＫ端子による要求である。第２はアドレス比較Ａによる要求であり、これは、ＢＲＫＣＲのＢＩＥＡビットによって許可される。第３はアドレス比較Ｂによる要求であり、これは、ＢＲＫＣＲのＢＩＥＢビットによって許可される。なお、かかるアドレス比較は、前記の通り、（ＣＡ２３・ＡＲ２３＋¬ＣＡ２３・¬ＡＲ２３＋ＡＭＲ２３）・…・（ＣＡｎ・ＡＲｎ＋¬ＣＡｎ・¬ＡＲｎ＋ＡＭＲｎ）・…・（ＣＡ０・ＡＲ０＋¬ＣＡ０・¬ＡＲ０＋ＡＭＲ０）と表現される。（¬は論理反転を示す）。
【０３７９】
これらの論理和信号が、ブレーク要求として、ＣＰＵに与えられる。ブレークモードでは、ＭＢＩＥビットの状態によってＢＲＫ端子によるブレーク要求の許可禁止が選択される。即ち、ブレークモードでＭＢＩＥビットが”０”にクリアされている場合は、ブレーク要求が抑止される。アドレス比較によるブレーク要求は、ブレークモードで禁止される。
【０３８０】
また、ＭＢＩＥビットは、フリップフロップで構成され、ＢＲＫＡＫ信号の反転信号で”０”にクリアされる。かかるフリップフロップの入力は、所定のデータバスのビットであって、クロックは、ブレークモード信号とアドレスデコード信号とライト信号の論理積信号とされる。かかるアドレスデコード信号は、ＣＰＵの出力するアドレスがＢＲＫＣＲの存在するアドレスになったとき、活性状態とされる。即ち、ブレークモードでのみライト可能とされる。
【０３８１】
即ち、ブレークモードに遷移した直後は、ブレーク要求が禁止状態であって、不所望のブレークの多重例外処理（スタックした内容の破壊）が禁止される。また、ＢＲＫＣＲのＳＳＴＰビットと、ＢＲＫＡＫ信号の反転信号との論理積が、シングルステップブレーク要求として、ＣＰＵに与えられる。
【０３８２】
シングルステップブレーク要求と、ＲＴＢ命令実行信号との論理積信号と、ブレーク要求が、ＣＰＵ内部で、ＣＰＵブレーク例外処理要求として認識される。これらの例外処理の内容は共通とされる。
【０３８３】
ＣＰＵはＲＴＢ命令実行時には、かかるシングルステップブレーク要求を無視する。
【０３８４】
上記実施の形態  によれば、以下の作用効果を得るものである。
【０３８５】
（１）既存の命令セットと互換性を維持しつつ、乗算器を内蔵することに当っては、ポストインクリメントレジスタ間接のアドレッシングモードのみをサポートすることによって、アドレッシングモードの増加を最小限にして、かつ処理性能を低下させずに積和演算を実行可能にすることができる。また、アドレスレジスタの補正をレジスタ間演算命令で行い、これを１ステートで実行することができ、アドレッシングの柔軟性を向上することができる。さらに、積和演算をＣＰＵの内部動作（ポストインクリメントのアドレス計算）と並行に行なうことによって、実行ステート数の短縮を行なうことができる。
【０３８６】
（２）乗算器を利用して乗算命令を実行することにあたっては、乗算の結果（積、フラグ）を直接汎用レジスタ、ＣＣＲに格納するようにして、直ちに結果を利用できるようにし、実質的な乗算の実行速度を向上することができる。また、積和演算の結果（ＭＡＣ）をリード（ＳＴＭＡＣ）すると同時に、乗算器内部で保持したフラグをＣＣＲに格納することによって、積和演算結果の利用や判定を容易に行なうことができ、使い勝手を向上することができる。
【０３８７】
（３）乗算器を取外し可能にすることによって、乗算器を取外した場合は、積和演算をサポートしないことによって、容易に下位ＣＰＵを実現し、論理的・物理的規模を縮小し、製造費用を低減した別のマイクロコンピュータを容易に開発することができる。また、汎用的な乗算命令を、乗算器によらずにサポートすることによって、かかる別のマイクロコンピュータにおける使い勝手の低下を防止できる。さらに、乗算器によらない乗算命令を除算と同一のシーケンスで実行するようにして、乗算器を持つマイクロコンピュータにおいても冗長な論理を最低限にすることができる。
【０３８８】
また、乗算器使用するか使用しないかの制御信号を与えて制御することによって、テスト性を向上したり、エミュレータを共通化したりすることができる。全体的な開発効率を向上することができる。さらにまた、乗算器を削除し、小型化したＣＰＵを用いて、マイクロコンピュータを構成することによって、半導体集積回路の論理規模・物理的規模を縮小して、製造費用の縮小を図ることができる。
【０３８９】
（４）乗算器とＣＰＵを一体に構成して、乗算器・ＣＰＵ間の配線を短縮して、物理的規模を縮小する。また、高速化に寄与することができる。
【０３９０】
（５）乗算器のテストモードを設定して、このときの乗算器の処理を１ステップのみにすることによって、論理規模の増加を最低限にして、テストの容易性を向上することができる。テストステップを短縮することができる。
【０３９１】
（６）内部動作のパイプラインに対応して、入出力タイミングの異なるレジスタ選択回路を複数持つことにより、実質的に１命令／１ステート実行を行なうことができる。
【０３９２】
（７）複数レジスタの退避／復帰命令を持ち、この組み合わせを固定的にすることによって、論理規模の縮小を図ることができる。レジスタの本数の異なる命令を複数命令サポートすることによって、使い勝手の低下を防ぐことができる。また、複数レジスタの退避／復帰命令を関数（サブルーチン）の入り口／出口で実行することによって、Ｃ言語などで記述された場合のように、関数の使用頻度が高い場合に、処理速度を特に向上することができる。さらに、割り込み例外処理ルーチンの先頭で複数レジスタの退避を用いることにより、リアルタイム性の向上を図ることができる。
【０３９３】
（８）ＥＸＲの有効／無効を切り換えることで、互換性を維持することと、機能拡張とを両立することができる。ＥＸＲを無効とし、例外処理において退避／復帰を行なわないようにすることで、スタックの節約と、割込み応答時間の高速化に寄与することができる。また、互換性を維持する。さらに、ＥＸＲを有効とすることで、割り込みマスクレベルを拡張したり、トレース機能を追加したりして、使い勝手を向上することができる。
【０３９４】
（９）エミュレータ用の固定的なスタックポインタを持つことによって、ユーザプログラムとエミュレーションプログラムの遷移時に、ユーザのスタックポインタとは独立して、固定的なアドレスに対して退避および復帰が行われるから、エミュレータのソフトウェア、ハードウェアの開発を容易にすることができる。
【０３９５】
また、エミュレータ用のスタックポインタを固定的にすることによって、ユーザに公開しない資源を最小限の論理的・物理的規模にすることができる。ユーザプログラムからエミュレーションプログラムへの遷移（ブレーク）を多重に行なうことを禁止することを可能にすることによって、不所望のスタックの内容の破壊を防止することができる。
【０３９６】
以上本発明者等によってなされた発明を実施の形態  に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。実施の形態  を相互に組み合せて使用することもできる。
【０３９７】
例えば、ＣＰＵの命令セットやレジスタ構成は変更可能である。内部バス幅なども変更可能である。但し、命令の大部分の命令コード長より、小さいバス幅でないことが望ましい。
【０３９８】
また、乗算器の内部構成なども種々変更可能である。１６ビット×６ビットを３回繰り返すのではなく、１６ビット×４ビットを４下位繰り返すようにしてもよい。命令実行ステートと論理的規模に鑑みて選択すればよい。
【０３９９】
さらに、飽和演算の指定、乗算器あり／なしの指定、テストモードの指定方法が種々変更可能であることは言うまでもない。
【０４００】
さらにまた、乗算器に限らず除算器を内蔵するものであっても良い。
【０４０１】
また、互換性を維持すべき対象は、前記例に限定されない。一般的に、ＣＰＵの例外処理時に、コントロールレジスタの内容を待避することは行われており、そのほかのＣＰＵについても、本発明を適用して、互換性を維持しつつ、コントロールレジスタの機能を拡張することができる。
【０４０２】
さらに、シングルチップマイクロコンピュータのその他の機能ブロックについても何等制約されない。
【０４０３】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、それに限定されるものではなく、その他のデータ処理装置にも適用可能であり、本発明は少なくとも、複数の動作モードを選択して動作するデータ処理装置に適用することができる。
【図面の簡単な説明】
【０４０４】
【図１】本発明の実施の形態によるマイクロコンピュータの構成を示すブロック図である。
【図２】本実施の形態のマイクロコンピュータのシステムコントロールレジスタの構成図である
【図３】本実施の形態のマイクロコンピュータに用いられるＣＰＵの命令フォーマットの構成図である。
【図４】本実施の形態のマイクロコンピュータに用いられるＣＰＵと乗算器を示すブロック図である。
【図５】本実施の形態のマイクロコンピュータにおける制御レジスタの１ビットの構成図である。
【図６】本実施の形態のマイクロコンピュータにおける制御信号の設定方法の一例を示すブロックである。
【図７】本実施の形態のマイクロコンピュータにおける制御信号の設定方法の一例を示す概略図である。
【図８】本実施の形態のマイクロコンピュータに用いられるＣＰＵのレジスタの構成図である。
【図９】本実施の形態のマイクロコンピュータに用いられるＣＰＵのレジスタの構成図である。
【図１０】本実施の形態のマイクロコンピュータに用いられるＣＰＵのレジスタの使用方法を説明するフロック図である。
【図１１】本実施の形態  のマイクロコンピュータに用いられるＣＰＵのレジスタのスタックの状態の説明図である。
【図１２】本実施の形態のマイクロコンピュータに用いられるＣＰＵの基本動作のタイミング図である。
【図１３】本実施の形態のマイクロコンピュータに用いられるＣＰＵの基本動作のタイミング図である。
【図１４】本実施の形態のマイクロコンピュータに用いられる乗算器の構成を示すブロック図である。
【図１５】本実施の形態のマイクロコンピュータに用いられる乗算器による演算方法の説明図である。
【図１６】本実施の形態のマイクロコンピュータに用いられる乗算器のフラグの実現方法の説明図である。
【図１７】本実施の形態のマイクロコンピュータに用いられる乗算器のフラグの実現方法の説明図である。
【図１８】本実施の形態のマイクロコンピュータに用いられるバススイッチの構成を示すブロック図である。
【図１９】本実施の形態のマイクロコンピュータにおけるＭＡＣ命令の動作のタイミング図である。
【図２０】図１９に連続する動作のタイミング図である。
【図２１】本実施の形態のマイクロコンピュータにおけるＳＴＭＡＣ命令およびＬＤＭＡＣ命令の動作のタイミング図である。
【図２２】図２１に連続する動作のタイミング図である。
【図２３】本実施の形態のマイクロコンピュータにおいて乗算器を用いた場合の乗算命令の動作のタイミング図である。
【図２４】図１９に連続する動作のタイミング図である。
【図２５】本実施の形態のマイクロコンピュータにおいて乗算器を用いない場合の乗算命令の動作のタイミング図である。
【図２６】図２５に連続する動作のタイミング図である。
【図２７】本実施の形態のマイクロコンピュータにおける乗算命令の状態遷移図である。
【図２８】本実施の形態のマイクロコンピュータに用いられる演算器の構成を示すブロック図である。
【図２９】本実施の形態のマイクロコンピュータにおける複数レジスタの退避命令の実行シーケンス図である。
【図３０】図２９に連続する動作のタイミング図である。
【図３１】本実施の形態のマイクロコンピュータにおける複数レジスタの復帰命令の実行シーケンス図である。
【図３２】図３１に連続する動作のタイミング図である。
【図３３】本実施の形態のマイクロコンピュータにおけるＲＳＥＬ２入力制御回路の構成を示すブロック図である。
【図３４】図３３の動作の説明図である。
【図３５】本実施の形態のマイクロコンピュータに適用されるＣ言語による変換リストの概略例である。
【図３６】本実施の形態のマイクロコンピュータに適用されるＣ言語による変換リストの概略例である。
【図３７】本実施の形態のマイクロコンピュータにおける割込例外処理の実行シーケンス図である。
【図３８】図３７に連続する動作のタイミング図である。
【図３９】本実施の形態のマイクロコンピュータにおける例外処理の状態遷移図である。
【図４０】本実施の形態のマイクロコンピュータにおける例外処理後のスタックの状態の説明図である。
【図４１】本実施の形態のマイクロコンピュータにおける例外処理後のスタックの状態の説明図である。
【図４２】本実施の形態のマイクロコンピュータにおけるＲＴＥ命令の実行シーケンス図である。
【図４３】本実施の形態のマイクロコンピュータにおける例外処理の状態遷移図である。
【図４４】本実施の形態のマイクロコンピュータにおける制御回路の構成の説明図である。
【図４５】本実施の形態のマイクロコンピュータにおける制御レジスタの構成図である。
【図４６】本実施の形態のマイクロコンピュータにおける制御レジスタの構成図である。
【図４７】本実施の形態のマイクロコンピュータにおける制御レジスタの構成図である。
【図４８】本実施の形態のマイクロコンピュータにおける制御レジスタの構成図である。
【図４９】本実施の形態のマイクロコンピュータにおける制御レジスタの構成図である。
【図５０】本実施の形態のマイクロコンピュータにおけるエミュレーションスタックポインタの構成の説明図である。
【図５１】本実施の形態のマイクロコンピュータにおけるブレーク割込みシーケンスの実行タイミング図である。
【図５２】本実施の形態のマイクロコンピュータにおけるブレーク制御処理の回路構成図である。
【符号の説明】
【０４０５】
１…ＣＰＵ、２…乗算器、３…システムコントローラ（ＳＹＳＣ）、４…割込コントローラ（ＩＮＴ）、５…ＲＯＭ、６…ＲＡＭ、９…シリアルコミュニケーションインターフェース（ＳＣＩ）、１３…システムコントロールレジスタ（ＳＹＳＣＲ）、１４…制御レジスタ（ＣＰＵＣＲ）、２１…命令レジスタ（ＩＲ）、２２…命令デコーダ・制御回路（ＣＯＮＴ）、２３…レジスタセレクタ（ＲＳＥＬ）、２４…ライトデータバッファ（ＤＢＷ）、２５…リードデータバッファ（ＤＢＲ）、２６、２７…演算器、２９…エミュレータスタックポインタ（ＥＭＬＳＰ）、３０…プログラムカウンタ（ＰＣ）、３１…コンディションレジスタ（ＣＣＲ）、３２…拡張レジスタ（ＥＸＲ）、３３…アドレスバッファ（ＭＡＢ）、３４…バススイッチ、３８…エミュレーション用プロセッサ、３９…エミュレーション用インタフェース、４４…インタフェースケーブル、４８…エミュレーションメモリ、４９…ブレーク制御回路、５０…リアルタイムトレース回路、５８…ＣＭＯＳインバータ回路、６５Ａ〜６５Ｃ…デコーダ、６６Ａ〜６６Ｃ、７１Ａ、７１Ｂ、７７…選択回路、６７…加算器、７２Ａ〜７２Ｃ…拡張回路、７６…算術論理演算回路、７８…シフト回路、７９…制御回路、７５Ａ、７５Ｂ、８１Ａ〜８１Ｇ、８６Ａ〜８６Ｄ…アンド回路、８０Ａ、８０Ｂ、８２Ａ〜８２Ｄ…オア回路、８３…フリップフロップ。
【図１】
2004295914.tif 000032
【図２】
2004295914.tif 000033
【図３】
2004295914.tif 000034
【図４】
2004295914.tif 000035
【図５】
2004295914.tif 000036
【図６】
2004295914.tif 000037
【図７】
2004295914.tif 000038
【図８】
2004295914.tif 000039
【図９】
2004295914.tif 000040
【図１０】
2004295914.tif 000041
【図１１】
2004295914.tif 000042
【図１２】
2004295914.tif 000043
【図１３】
2004295914.tif 000044
【図１４】
2004295914.tif 000045
【図１５】
2004295914.tif 000046
【図１６】
2004295914.tif 000047
【図１７】
2004295914.tif 000048
【図１８】
2004295914.tif 000049
【図１９】
2004295914.tif 000050
【図２０】
2004295914.tif 000051
【図２１】
2004295914.tif 000052
【図２２】
2004295914.tif 000053
【図２３】
2004295914.tif 000054
【図２４】
2004295914.tif 000055
【図２５】
2004295914.tif 000056
【図２６】
2004295914.tif 000057
【図２７】
2004295914.tif 000058
【図２８】
2004295914.tif 000059
【図２９】
2004295914.tif 000060
【図３０】
2004295914.tif 000061
【図３１】
2004295914.tif 000062
【図３２】
2004295914.tif 000063
【図３３】
2004295914.tif 000064
【図３４】
2004295914.tif 000065
【図３５】
2004295914.tif 000066
【図３６】
2004295914.tif 000067
【図３７】
2004295914.tif 000068
【図３８】
2004295914.tif 000069
【図３９】
2004295914.tif 000070
【図４０】
2004295914.tif 000071
【図４１】
2004295914.tif 000072
【図４２】
2004295914.tif 000073
【図４３】
2004295914.tif 000074
【図４４】
2004295914.tif 000075
【図４５】
2004295914.tif 000076
【図４６】
2004295914.tif 000077
【図４７】
2004295914.tif 000078
【図４８】
2004295914.tif 000079
【図４９】
2004295914.tif 000080
【図５０】
2004295914.tif 000081
【図５１】
2004295914.tif 000082
【図５２】
2004295914.tif 000083