JP2007234065A - データ処理装置 - Google Patents

データ処理装置 Download PDF

Info

Publication number
JP2007234065A
JP2007234065A JP2007159650A JP2007159650A JP2007234065A JP 2007234065 A JP2007234065 A JP 2007234065A JP 2007159650 A JP2007159650 A JP 2007159650A JP 2007159650 A JP2007159650 A JP 2007159650A JP 2007234065 A JP2007234065 A JP 2007234065A
Authority
JP
Japan
Prior art keywords
instruction
register
address
general
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007159650A
Other languages
English (en)
Other versions
JP4545777B2 (ja
Inventor
Naomiki Mitsuishi
直幹 三ッ石
Shinichi Shibahara
真一 芝原
Takahiro Okubo
貴裕 大久保
Hiromi Nagayama
ひろみ 永山
Takeshi Kataoka
健 片岡
Masahiro Uminaga
正博 海永
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP2007159650A priority Critical patent/JP4545777B2/ja
Publication of JP2007234065A publication Critical patent/JP2007234065A/ja
Application granted granted Critical
Publication of JP4545777B2 publication Critical patent/JP4545777B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Abstract

【課題】論理的・物理的規模の増大を最小限とし、データ処理速度を向上する。
【解決手段】命令中のディスプレースメント(基準アドレス)と、汎用レジスタ(ER0〜ER7)に割当てられるインデックスレジスタが保有する情報とから実効アドレスを計算するアドレッシングモードを設ける。メモリをアクセスするサイズに応じて、バイトであればインデックスレジスタの値を×1とし、ワードであれば×2というようにシフトする。実効アドレスの計算に、前記拡張およびシフトを含むことにより、命令数を削減し、実行ステート数も短縮できる。配列の大きさは、アドレス空間の大きさより小さいから、汎用レジスタの上位を、別のデータレジスタとして使用し、汎用レジスタに配置できるデータの量を増加でき、メモリとのリードライトの回数を削減することによって、命令数を更に削減し、プログラム容量を削減することができる。
【選択図】図1

Description

本発明は、マイクロコンピュータ、データプロセッサ又はマイクロプロセッサ等のように称されるデータ処理装置に関し、例えば中央処理装置(CPU)に利用してそのプログラム効率もしくはコード効率の向上に有効な技術に関するものである。
半導体集積回路化されたマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化などが図られてきた。オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セット拡大を実現した例として、例えば、特許文献1並びに特許文献2等がある。それによれば、32ビットの汎用レジスタは、アドレスレジスタとしては、32ビットレジスタとして使用可能である。データレジスタは、32ビットレジスタとして使用するか、分割して16ビットレジスタとして使用するか、下位側の16ビットレジスタを更に分割して、8ビットレジスタとして使用するかを選択できる。また、特許文献3にはアドレス空間の大きさを示すレジスタを設け、その値によってアドレスデータを格納する汎用レジスタの大きさを可変にするプロセッサについて記載が有る。プログラム用のメモリであるROMを内蔵した、シングルチップ型のものにあっては、内蔵ROMの容量が、外部に接続可能なメモリに比較して、少ないから、プログラム容量を削減することが望ましい。
また、近年、シングルチップ型のマイクロコンピュータのROMとして、電気的に書込み消去が可能なフラッシュメモリ、EEPROM(電気的に書込み消去可能なROM)が用いられることが多い。これらの電気的に書込み消去が可能なメモリは、記憶素子が大きく、また、書込み消去用の高電圧発生回路などが必要であって、その物理的規模が大きくなってしまうため、より一層、プログラム容量の削減が望ましい。内蔵RAMについても同様であり、使用するデータの容量を小さくできる方が望ましい。
一方、マイクロコンピュータのプログラムを、C言語などの高級言語で記述することが増えてきている。高級言語で記述する場合、アセンブリ言語で記述する場合に比較して、プログラム容量および使用するデータの容量が大きくなりやすい。
レジスタ間接などのアドレシングモードについて記載された文献の例として特許文献4及び特許文献5がある。特許文献4にはディスプレースメント付きレジスタ間接アドレシングモードを持つデータ処理装置につての記載が有る。特許文献5にはディスプレースメント付きレジスタ間接アドレス指定モードを持つデータ処理装置につての記載が有る。
特開平5−241826号公報 特開平6−51981号公報 特開平6−103063号公報 特開平4−333153号公報 特開平10−49369号公報
本発明者らは、プログラム容量および使用するデータの容量の削減について以下の観点で検討を行った。
第1の観点は配列などの実効アドレス計算の観点である。ディスプレースメント付きレジスタ間接と称し、汎用レジスタに保持されたアドレスに、命令コード中に含まれるディスプレースメントを加算して実効アドレスを生成し、この実効アドレスのリード/ライトを行うアドレッシングモードがある。これを用いて、所定のアドレス(TOP)から始まる領域に配置されたワードサイズデータの配列に対し、汎用レジスタ(R0L)に格納された番号のデータ(例えばn番目を意味するデータ)をリードする場合、配列の番号をアドレスレジスタとして使用するため、その番号データを32ビットにゼロ拡張(命令EXTU.Wにより8ビットから16ビット、EXTU.Lにより16ビットから32ビットの2回に分けて実行)し、さらに、ワードサイズデータに対応して×2(命令SHLLによる左1ビットシフト)した後、命令MOV.Wによりメモリアクセスを行う必要がある。これは例えば、
EXTU.W R0
EXTU.L ER0
SHLL.L ER0
MOV.W @(TOP:16,ER0),E0
のように記述される。
同様に、汎用レジスタに保持されたアドレスに、インデックスを付加することも考えられる。
第2の観点は実効アドレス計算の繰返しに関する。配列アクセスにおいて同じアドレスを複数回使用する場合があり、このとき同じ実効アドレス計算を何回も繰返していては非能率的である。
第3の観点はプログラムカウンタ相対のような分岐命令に関する。この分岐命令はプログラムカウンタ相対と称し、プログラムカウンタの内容に、命令コード中に含まれるディスプレースメントを加算して実効アドレスを生成し、この実効アドレスに分岐するアドレッシングモードを有する。このとき、複数の分岐先があるような場合には、分岐先毎に別々にプログラムカウンタ相対の分岐命令の記述が必要になる。
第4の観点はメモリ間接のような分岐命令に関する。同一のアドレスに複数箇所から分岐される場合がある。この場合、分岐先アドレスをテーブルとして格納し、分岐命令自体の命令コードを短縮することが考えられる。メモリ間接と称し、16ビット(2バイト)の命令コード中に、8ビットのアドレス情報を持ち、このアドレス情報で分岐先アドレスのテーブルを参照し、この分岐テーブルをリードし、リードした内容に基づいて、分岐を行うアドレッシングモードがある。一方、分岐先アドレス(例えば24ビット)を、命令コード中に持つ分岐命令は32ビット長(4バイト)などとなってしまうから、分岐テーブルを32ビット単位とすれば、同一のアドレスに分岐する分岐命令があれば、前記メモリ間接を使用した方が効率的である。しかしながら、その方式は、用意できる分岐テーブルの数や容量に制限を受け、また、分岐テーブルは例外処理のベクタと共通になることが考えられ、使い勝手が悪くなることも想定される。
第5の観点はRAMの効率的な使用の観点である。3ビットで表現されるなど、8ビットに満たないデータがある場合、1つのアドレス(バイト単位)に、複数のデータを格納できれば、RAMエリアの使用効率が上がる。例えば、1つのアドレスに下位から、3ビット、3ビット、2ビットのデータを格納することができる。これらの3ビット、3ビット、2ビットのデータを、C言語でソースプログラムを記述する場合、ビットフィールドで宣言する。例えば、上記の例では、
struct {
unsigend char cc:2;
unsigend char bb:3;
unsigend char aa:3;
} abc;
などと定義される。
このビットフィールドデータbbを操作する場合、通常汎用レジスタに取り出す。このプログラム例は、
MOV.B @abc,R0L
AND.B #8’b00111000,R0L
SHLR.B #3,R0L
などとされる。つまり、一旦、メモリから、バイト単位で、汎用レジスタにリードし、所望のビットフィールド以外を0にクリアし、所望のビットフィールドが下位詰めになるように3ビットシフトを行う。1ビットシフトしかサポートされていない命令セットでは、SHLR命令は3個必要である。
操作後、メモリに格納する場合は、
MOV.B @abc,R1L
AND.B #8’b11000111,R1L
SHLL.B #3,R0L
OR.B R1L,R0L
MOV.B R0L,@abc
などの命令実行が必要とされる。つまり、一旦、格納すべきメモリのデータを汎用レジスタにリードし、所望のビットフィールドを0にクリアする。一方、格納すべきデータを、所望のビットフィールド位置になるようにシフトを行う。両者の論理和をとり、結果をメモリに格納する。
ビットフィールドによって、メモリ(RAM)の使用量は節約できるものの、プログラム容量が増加してしまう。8ビットに満たないデータもバイト単位(例えば、下位詰めで、上位は0とする)で扱えば、操作は容易になり、プログラム容量は増えないが、メモリ(RAM)の使用量が増えてしまう。
本発明は上記検討内容に鑑みてなされたものである。本発明の目的は、プログラム容量(使用するROM容量)を削減可能にすることである。
本発明の別の目的は、使用するデータ容量(使用するRAM容量)を削減可能にすることである。
本発明の更に別の目的は、論理的・物理的規模の増大を最小限とし、処理速度を向上することである。
本発明の前記ならびにそのほかの目的と新規な特長は、本発明書の記述および添付図面か明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
〔1〕[配列などの実効アドレス計算]
本発明に係るデータ処理装置は、命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、前記命令実行手段は、情報保持にその記憶領域の全体又は一部の利用が可能にされる汎用レジスタを有し、前記汎用レジスタの記憶領域の一部を利用する第1の命令を読み込んだとき、情報のアクセスサイズに応じて、前記第1の命令で指定された汎用レジスタの保持情報をシフトし、シフト結果をその他の情報と加算して実効アドレスの演算を行なう。
詳しくは、例えば、命令中に記述されている基準となるアドレス情報即ち基準アドレス(例えば命令中のディスプレースメントにより与えられる)と、汎用レジスタに割当てられるインデックスレジスタの情報(例えば配列上で第何番目かを示す情報)とから実効アドレスを計算して、メモリをアクセスするアドレッシングモード(ディスプレースメント付きインデックスレジスタ間接アドレシングモード)を設ける。メモリをアクセスするサイズに応じて、バイトであればインデックスレジスタ(アドレスに加算される値を保有するレジスタ)の値を×1とし、ワードであれば×2とし、ロングワードであれば×4というようにシフトする。また、独立に、インデックスレジスタのサイズを、32ビット、16ビット、8ビットから選択可能にしてよい。例えば、配列の大きさが256以下であれば、インデックスレジスタは8ビットあればよく、同一の汎用レジスタの上位は、別のデータレジスタとして使用可能になる。要するに、汎用レジスタに格納されたデータのうち、アクセスサイズによって指定されたデータのみを演算対象とし、汎用レジスタの上位側は元の情報を保持(若しくは維持)することが可能である。
ディスプレースメント付きインデックスレジスタ間接アドレシングモードを採用する第1の命令は、例えば
MOV.W E0,@(d:16,R0L)
と表記される転送である。CPUは、このアドレシングモードに対して、汎用レジスタをゼロ拡張し、シフトし、ディスプレースメントなどと、加算し、この結果をアドレスとして利用可能にする機能を持つ。
実効アドレスの計算に、前記ゼロ拡張およびシフトを含むことによって、命令数を削減し、実行ステート数も短縮できる。配列の大きさは、アドレス空間の大きさより小さいから、汎用レジスタの上位を、別のデータレジスタとして使用し、汎用レジスタに配置できるデータの量を増加でき、メモリとのリードライトの回数を削減することによって、命令数を更に削減し、プログラム容量を削減することができる。従来、複数の命令を組合せて、配列のアクセスをしている場合に比較して、処理速度を向上させることができる。
〔2〕[配列などの実効アドレス計算用MOVA命令]
また、本発明の望ましい一つの態様として、前記命令実行手段は、前記汎用レジスタの記憶領域の一部を利用する第3の命令を読み込んだとき、情報のアクセスサイズに応じて、その情報をシフトし、シフト結果をその他の情報と加算して演算した実効アドレスを、別の汎用レジスタに格納する処理を実行する。即ち、上記実効アドレスの計算を行って、メモリをアクセスせずに、その実効アドレスを汎用レジスタに格納する実効アドレス転送命令(MOVA)を設ける。実効アドレスの計算時点では、データのサイズが分からないため、データのサイズに対応する命令を複数用意する。例えば、前記同様の実効アドレス計算を行って、汎用レジスタ(ER1)に格納する命令は、
MOVA/W @(d:16,R0L),ER1
のように記述する。上記記述において、/Wが、実効アドレスを使用してメモリをアクセスするときの、即ち、配列の、データサイズである。
同じアドレスを複数回使用する場合もあるので、汎用レジスタに格納しておけば、2回目以降はディスプレースメントを必要としないので、プログラム容量を削減でき、また、実行ステート数も短縮できる。
CPUの演算機能としては、前記ディスプレースメント付きインデックスレジスタ間接アドレシングモードと同様であり、汎用レジスタを拡張し、シフトし、加算し、この結果を汎用レジスタに格納する機能を持つようにする。本命令は、実質的には、演算命令であって、直接的にメモリをアクセスしない。このため、インデックスとして使用するデータを、メモリ上からリードしてもさほど、命令実行シーケンスは複雑にならない。上記ディスプレースメント付きインデックスレジスタ間接アドレシングモードの実効アドレス計算と共通の演算とすることができ、配列などの実効アドレス計算用MOVA命令を追加しても其れによる論理的規模の増加はない。
〔3〕[PC相対分岐命令]
前記ディスプレースメント付きインデックスレジスタ間接のようなアドレシングモードを採用する第1の命令はPC相対分岐命令としても適用可能である。即ち、インデックスレジスタを、8ビット、16ビット、32ビットとし、所定の定数倍(命令が16ビット単位の場合は×2)をした後、プログラムカウンタ(PC)と加算して、分岐アドレスを得るようにする、プログラムカウンタインデックスレジスタ相対分岐の実効アドレス生成をサポートする。複数の分岐先がある場合、分岐条件を評価した後、その評価結果に従って、インデックスレジスタに値を設定することにより、分岐命令自体は1個で共通化できる。
CPUの命令実行機能として、汎用レジスタを拡張し、シフトし、加算し、この結果をアドレスとして利用可能にする機能は、前記と共通化できる。加算対象の他方の値は、PC値の代わりにディスプレースメントであってもよい。
例えば、Cソースプログラム上のケース文(case)などを評価し、評価結果に基づき、分岐先アドレスを計算するためのインデックスを汎用レジスタに格納することによって、プログラム容量を削減することができる。
〔4〕[メモリ間接アドレシングモードによる分岐命令]
第2の観点による本発明は、命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、前記命令実行手段は、命令の所定フィールドの値(vec)にオフセット(H’80)を組合わせ、これに情報のアクセスサイズに応じたビット数のシフトを行い、シフトされた値にその他の情報(VBRの値)を加算して実効アドレスを演算し、演算された実効アドレスでメモリをリードし、リードした内容を分岐先アドレスとする分岐命令を実行可能である。前記シフト動作は、例えば、プログラムカウンタ等による命令フェッチサイズに対応して、×2または×4などとされる。
ベクタベースレジスタを基準に、例外処理ベクタテーブルの範囲を超えるように前記オフセットの値を決めれば、その超えた範囲にマッピングされたサブルーチンベクタテーブルを参照して、サブルーチンに分岐することができる。 上記メモリ間接アドレシングモードによる分岐命令を採用すれば、それを短い命令コードとし、同一のアドレスに分岐する分岐命令が多数ある場合に、分岐テーブルと合わせても、プログラム容量を削減することができる。また、プログラムカウンタ若しくはアドレス空間の大きさに対応して、前記命令コード中のデータ(vec)にオフセットを加えて×2又は×4などとすることにより、命令コードのベクタ番号フィールド等の情報を有効に利用でき、多数の分岐アドレスを指定することができる。また、前記命令コード中のデータ(vec)を例外処理ベクタ領域(例外処理ベクタテーブル)の番号と共通化されないように、その使用時に、前記命令コード中のデータ(vec)の前に、所定のオフセット(例えば固定値H’80)を設け、更に、その上位側を例えばベクタベースレジスタ(VBR)の保持値で埋めることにより、命令コード中のデータ(vec)で指定可能にされる領域を例外処理ベクタ領域と重ならないようにすることができる。ベクタベースレジスタを更に加えることにより、ブートメモリからプログラムメモリへの再配置(所要のプログラムを、高速なメモリ上で使用するために最初に実行すべき処理)などを容易に行うことができる。
ベクタベースレジスタに代えてサブルーチンコールに専用化されたサブルーチンベクタテーブルレジスタのような第1レジスタを採用してサブルーチンコールを可能にする構成を採用することも可能である。即ち、命令実行手段は、例外処理ベクタテーブルの参照に利用可能なベクタベースレジスタ(VBR)と、サブルーチンベクタテーブルの参照に利用可能な第1レジスタ(TBR)を有し、前記命令実行手段は、命令の所定フィールドの値(disp)を、情報のアクセスサイズに応じたビット数でシフトし、シフトされた値に前記第1レジスタ(TBR)の値を加算してアドレスを演算し、演算されたアドレスで前記サブルーチンベクタテーブルをリードし、リードした内容を分岐先サブルーチンアドレスとする、サブルーチンコール命令を実行可能である。
ソースプログラムからオブジェクトプログラムを生成するときのリンク時最適化などにおいて、最も使用頻度の高い分岐先の分岐命令を、本命令の分岐命令に置き換えればよい。
上述したように、サブルーチンコールの先頭アドレステーブルをポイントする第1レジスタを、例外処理用のベクタベースレジスタとは別に導入する事により、命令コード内のdisp(ディスプレースメント)のような所定フィールドの値に基づいてサブルーチンコールでき、更に、サブルーチンベースレジスタのような第2レジスタを導入し、第2レジスタで指定される先頭アドレスから64KBのような範囲内をサブルーチンベクタテーブルの16ビットのようなエントリアドレスで分岐できるようにすれば、サブルーチンベクタテーブルのサイズを小さくすることができる。要するに、命令実行手段は、例外処理ベクタテーブルの参照に利用可能なベクタベースレジスタと、サブルーチンへの分岐に利用可能な第1レジスタ及び第2レジスタを有し、命令の所定フィールドの値を、情報のアクセスサイズに応じたビット数でシフトし、シフトされた値に前記第1レジスタの値を加算してアドレスを演算し、演算されたアドレスでサブルーチンベクタテーブルをリードし、リードした内容に前記第2レジスタの値を加算して分岐先サブルーチンアドレスとする、サブルーチンコール命令を実行可能にする。
〔5〕[ビットフィールド命令]
第3の観点による本発明では、イミディエイトデータで、メモリ上のビットフィールドの位置を指定(イミディエイトデータの論理値“1”のビットの存在するフィールドをビットフィールドとする)し、当該ビットフィールドと汎用レジスタ(下位詰め)との間のデータ転送を可能にする。すなわち、メモリから汎用レジスタへ転送するロード命令(BFLD)の場合は、メモリ上のデータと、イミディエイトデータの論理積をとり、イミディエイトデータの最下位の1がビット0となるように、右シフトを行った後に、汎用レジスタに格納する。汎用レジスタからメモリへ転送するストア命令の場合(BFST)は、イミディエイトデータの最下位の1のビットまで、汎用レジスタの内容を左シフトした後に、イミディエイトデータが1のビット位置のデータは前記シフトした汎用レジスタ上のデータとし、それ以外の論理値“0”のビット位置のデータはメモリ上のデータとして組合せて、メモリにライトする。
これにより、RAMの1個のアドレス(1バイト)の記憶エリアに、複数のビットフィールドを格納できるので、プログラム容量を増やすことなく、内蔵RAMの容量を節約でき、かつ、この処理を行うプログラム容量を小さくでき、シングルチップマイクロコンピュータに好適である。従来、複数の命令を組合せて、ビットフィールドを使用している場合に比較して、処理速度を向上することができる。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、従来複数の命令を使用して実現していた処理に対応する命令を実行する機能を有することにより、使い勝手を向上するとともに、プログラム容量を縮小し、処理速度を向上することができる。プログラム容量を縮小することによって、ひいては、プログラム格納用のROMなどのメモリ容量を縮小し、費用を節約することができる。
図2に、本発明の適用されたシングルチップマイクロコンピュータのブロック図を示す。
同図に示されるシングルチップマイクロコンピュータ1は、全体の制御を司るCPU2、割込コントローラ(INT)3、主に、CPU2の処理プログラムなどを格納するメモリであるROM4、主に、CPU2の作業領域並びにデータの一時記憶用のメモリであるRAM5、タイマ6、シリアルコミュニケーションインタフェース(SCI)7、A/D変換器8、第1乃至第9入出力ポート(IOP1〜IOP9)9A〜9I、クロック発振器(CPG)10の機能ブロック乃至はモジュールから構成され、公知の半導体製造技術により1つの半導体基板上に形成される。ROM4は、フラッシュメモリ、EEPROM(電気的に書込み消去可能なROM)、或いはマスクROMなどである。
前記シングルチップマイクロコンピュータ1は、電源端子として、グランドレベル(Vss)、電源電圧レベル(Vcc)、アナロググランドレベル(AVss)、アナログ電源電圧レベル(AVcc)、の電源端子、その他の専用制御端子として、リセット(RES)、スタンバイ(STBY)、モード制御(MD0、MD1)、クロック入力(EXTAL、XTAL)端子を有する。
CPG10の端子EXTAL、XTALに接続される水晶発振子またはEXTAL端子に入力される外部クロックに基づいて生成される基準クロック(システムクロック)に同期して、シングルチップマイクロコンピュータ1は動作を行う。この基準クロック1周期をステートと呼ぶ。
シングルチップマイクロコンピュータ1の機能ブロックは、内部バス11によって相互に接続される。バスの制御を行う、図示はされないバスコントローラを内蔵している。内部バス11はアドレスバス・データバスの他、リード信号・ライト信号・バスサイズ信号をエンコードしたバスコマンドが伝達されるコントロールバスを含む。
前記機能ブロックやモジュールは内部バス11を介して、CPU2によってリード/ライトさる。内部バス11のデータバス幅は32ビットとする。内蔵ROM4やRAM5のリード/ライトは1ステートで可能にされる。
なお、前記タイマ6、SCI7、A/D変換器8、入出力ポート(IOP1〜IOP9)9A〜9I、CPG11が有する制御レジスタを総称して、内部I/Oレジスタと呼ぶ。各入出力ポート9A〜9Iは、アドレスバス、データバス、バス制御信号あるいはタイマ6、SCI7、A/D変換器8の入出力端子と兼用されている。
上記シングルチップマイクロコンピュータ1にリセット信号RESが与えられると、CPU2を始めとし、シングルチップマイクロコンピュータ1はリセット状態になる。このリセットが解除されると、CPU2は所定のアドレスからスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、CPUは逐次、ROM4などから命令をリードし、解読して、その解読内容に基づいてデータの処理やRAM5のアクセスを行う。
前記タイマ6、SCI7、外部信号などの状態を割込み信号12として、CPU2に伝達することができる。割込信号12は、A/D変換器8、タイマ6、SCI7、入出力ポート9A〜9Iが出力し、割込コントローラ3はこれを入力して、所定のレジスタなどの指定に基づいて、CPU2に割込要求信号intfと受付けた割込みに対応したベクタVECを与える。割込要因が発生すると、CPU2に割込要求が発生され、CPU2は実行中の処理を中断して、例外処理状態を経て、前記ベクタVECに対応したアドレスから、分岐先アドレスをリードして、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令が置かれ、この命令を実行することによって前記中断した処理を再開する。
図3に、CPU2に内蔵されている汎用レジスタ及び制御レジスタの構成例(プログラミングモデル)を示す。
CPU2は、夫々32ビット長の8本の汎用レジスタER0〜ER7を持っている。汎用レジスタER0〜ER7は、すべて同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。使用方法については、後述する。汎用レジスタER7には、汎用レジスタとしての機能に加えて、スタックポインタ(SP)としての機能が割当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み処理を含む。
プログラムカウンタPCは32ビットのカウンタで、CPU2が次に実行する命令のアドレスを示す。特に制限されないもののCPU2の命令は、すべて2バイト(ワード)を単位としているため、最下位ビットは無効であり、命令リード時には最下位ビットは0とみなされる。
コンディションコードレジスタCCRは8ビットのレジスタで、CPU2の内部状態を示している。割込みマスクビット(I)とハーフキャリ(H)、ネガティブ(N)、ゼロ(Z)、オーバフロー(V)、キャリ(C)の各フラグを含む8ビットで構成されている。
ベクタベースレジスタVBRは、32ビットのレジスタで、下位12ビットは0とされ、上位20ビットが例外処理ベクタテーブルおよび拡張メモリ間接の分岐先テーブル(サブルーチンベクタテーブル)のリード時に、アドレスの上位として利用される。サブルーチンベクタテーブルレジスタ(第1レジスタ)TBRは、サブルーチンのエントリアドレスが格納されたサブルーチンベクタテーブルの所在を指し示す。
図4には汎用レジスタの使用形態が例示される。アドレスレジスタ及び32ビットレジスタの場合、一括して汎用レジスタER(ER0〜ER7)として使用される。インデックスレジスタとしては、汎用レジスタER(ER0〜ER7)、汎用レジスタR(R0〜R7)、汎用レジスタRL(R0L〜R7L)を使用する。何れを使用するかはアドレッシングモード中のインデックスレジスタのサイズで指定される。
16ビットレジスタの場合は、汎用レジスタERを分割して汎用レジスタE(E0〜E7)、汎用レジスタR(R0〜R7)として使用する。これらは同等の機能を持っており、16ビットレジスタを最大16本まで使用することができる。
8ビットレジスタの場合は、汎用レジスタRを分割して汎用レジスタRH(R0H〜R7H)、汎用レジスタRL(R0L〜R7L)として使用する。これらは同等の機能を持っており、8ビットレジスタを最大16本まで使用することができる。汎用レジスタの使用形態は、各レジスタ独立に選択することができる。
メモリ上のアドレスを指定する場合は、アドレスレジスタとして、32ビット長で、シフトせずに使用するか、インデックスレジスタとして、32ビットまたは16ビットまたは8ビット長で、データのサイズに応じて、シフトなし/1ビットシフト/2ビットシフトして使用するか、がある。
図5にはCPUのアドレス空間が例示される。アドレス空間64キロバイト(kバイト)のミニマムモードと、アドレス空間4ギガバイト(Gバイト)のマキシマムモードを持つ。
ミニマムモードの場合は、16ビットのアドレスで全空間を指定できる。例外処理ベクタテーブルや分岐テーブル(サブルーチンベクタテーブル)は16ビットでよい。
マキシマムモードの場合は、32ビットのアドレスで全空間を指定する。ベクタや分岐テーブルは32ビットでよい。ディスプレースメントや絶対アドレス16ビットで指定できるのは、H’00000000〜H’00007FFFとH’FFFF8000〜H’FFFFFFFFである。特に制限はされないものの、内蔵RAM5はこの領域に配置することにより、比較的短いディスプレースメントや絶対アドレス16ビットを使用できるので、プログラム容量の削減が可能になる。
図6及び図7には転送/演算命令の実効アドレスの計算方法が例示される。図8、図9及び図25には分岐命令の実効アドレスの計算方法が例示される。
(1)レジスタ直接〔Rn〕
これは、命令コードのレジスタフィールドで指定されるレジスタ(8ビット、16ビットまたは32ビット)がオペランドとなる。8ビットレジスタとしてはR0H〜R7H、R0L〜R7Lを指定可能である。16ビットレジスタとしてはR0〜R7、E0〜E7を指定可能である。32ビットレジスタとしてはER0〜ER7を指定可能である。
(2)レジスタ間接〔@ERn〕
これは、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容をアドレスとしてメモリ上のオペランドを指定する。アドバンストモードのとき、分岐命令では、下位24ビットが有効になり、上位8ビットはすべて0(H’00)とみなされる。
(3)ディスプレースメント付レジスタ間接〔@(d:2,ERn)/@(d:16,ERn)/@(d:32,ERn)〕
これは、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容に命令コード中に含まれる16ビットディスプレースメントまたは32ビットディスプレースメントを加算した内容をアドレスとしてメモリ上のオペランドを指定する。加算に際して、16ビットディスプレースメントは符号拡張される。また、データのサイズがバイトの場合は、ディスプレースメントが1、2、3のとき、短縮形@(d:2,ERn)が用意されている。同様に、ワードの場合は、2、4、6のとき、ロングワードの場合は、4、8、12のとき、それぞれ短縮形@(d:2,ERn)が用意されている。
(4)ディスプレースメント付インデックスレジスタ間接〔@(d:16/32,ERn.B/W/L)〕
これは、命令コードのレジスタフィールドで指定されるアドレスレジスタの指定されたビット数(RnL、Rn、ERn)の内容を、32ビットにゼロ拡張し、1、2または4を乗算し(実際にはシフトを行う)、乗算結果と命令コード中に含まれる16ビットディスプレースメントまたは32ビットディスプレースメントを加算した内容をアドレスとしてメモリ上のオペランドを指定する。データのサイズに応じて、バイトサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ乗算される。加算に際して、16ビットディスプレースメントは符号拡張される。要するに、情報保持に前記汎用レジスタの一部を利用するとき、アクセスする情報のサイズに応じて、前記汎用レジスタの一部を利用する情報をシフトし、シフト結果をその他の情報と加算して実効アドレスの演算を行なう。
(5)プリ/ポストインクリメント/デクリメントレジスタ間接〔@ERn+/@−ERn/@+ERn/@ERn−〕
(a)ポストインクリメントレジスタ間接〔@ERn+〕は、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容をアドレスとしてメモリ上のオペランドを指定する。その後、アドレスレジスタの内容に1、2または4が加算され、加算結果がアドレスレジスタに格納される。バイトサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ加算される。
(b)プリデクリメントレジスタ間接〔@−ERn〕は、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容から1、2または4を減算した内容をアドレスとしてメモリ上のオペランドを指定する。その後、減算結果がアドレスレジスタに格納される。バイトサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ減算される。
(c)プリインクリメントレジスタ間接〔@+ERn〕は、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容から1、2または4を加算した内容をアドレスとしてメモリ上のオペランドを指定する。その後、加算結果がアドレスレジスタに格納される。バイトサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ加算される。
(d)ポストデクリメントレジスタ間接〔@ERn−〕は、命令コードのレジスタフィールドで指定されるアドレスレジスタ(ERn)の内容をアドレスとしてメモリ上のオペランドを指定する。その後、アドレスレジスタの内容に1、2または4が減算され、減算結果がアドレスレジスタに格納される。バイトサイズでは1、ワードサイズでは2、ロングワードサイズでは4がそれぞれ減算される。
(6)絶対アドレス〔@aa:8/@aa:16/@aa:24/@aa:32〕
これは、命令コード中に含まれる絶対アドレスで、メモリ上のオペランドを指定する。絶対アドレスは8ビット(@aa:8)、16ビット(@aa:16)、24ビット(@aa:24)、または32ビット(@aa:32)である。データ領域としては、8ビット(@aa:8)、16ビット(@aa:16)、または32ビット(@aa:32)を使用する。8ビット絶対アドレスの場合、上位24ビットはすべて1(H’FFFF)となる。16ビット絶対アドレスの場合、上位16ビットは符号拡張される。32ビット絶対アドレスの場合、全アドレス空間をアクセスできる。プログラム領域としては24ビット(@aa:24)、または32ビット(@aa:32)を使用する。24ビット(@aa:24)のとき上位8ビットはすべて0(H’00)となる。
(7)イミディエイト〔#xx:8/#xx:16/#xx:32〕
これは、命令コード中に含まれる8ビット(#xx:8)、16ビット(#xx:16)、または32ビット(#xx:32)のデータを直接オペランドとして使用する。
(8)プログラムカウンタ相対〔@(d:8, PC)/@(d:16, PC)〕
これは、Bcc(条件分岐命令)、BSR(サブルーチン分岐命令)等の命令で使用される。PCの内容で指定される32ビットのアドレスに、命令コード中に含まれる8ビット、または16ビットディスプレースメントを加算して32ビットの分岐アドレスを生成する。加算に際して、ディスプレースメントは32ビットに符号拡張される。
(9)プログラムカウンタインデックスレジスタ相対〔@(ERn.B, PC)/@(ERn.W, PC)/@(ERn.L, PC)〕
これは、Bcc、BSR命令で使用される。命令コードのレジスタフィールドで指定されるアドレスレジスタの指定されたビット数(RnL、Rn、ERn)の内容を、32ビットにゼロ拡張し、2を乗算し(実際にはシフトを行う)、乗算結果と、PCの内容で指定される32ビットのアドレスを加算して32ビットの分岐アドレスを生成する。要するに、情報保持に前記汎用レジスタの一部を利用するとき、アクセスする情報のサイズに応じて、前記汎用レジスタの一部を利用する情報をシフトし、シフト結果をその他の情報であるプログラムカウント手段が保有する命令アドレス情報と加算して実効アドレスの演算を行ない、演算された実効アドレスを分岐先アドレスとする。
(10)メモリ間接〔@@aa:8〕
これはJMP(指定アドレスへの無条件分岐命令)、JSR(指定アドレスへのサブルーチン分岐命令)等の命令で使用される。命令コード中に含まれる8ビット絶対アドレスでメモリ上のオペランドを指定し、この内容を分岐アドレスとして分岐する。8ビット絶対アドレスの上位のビットは、ベクタベースレジスタVBRで指定される。ミニマムモードの場合は、メモリ上のオペランドはワードサイズで指定し、16ビットの分岐アドレスを生成する。マキシマムモードの場合は、メモリ上のオペランドはロングワードサイズで指定する。
(11)拡張メモリ間接〔@@vec:7〕
これは、命令コード中に含まれる7ビットなどのデータ(vec)にオフセット例えば固定値H’80を組合わせた値に、プログラムカウンタないしアドレス空間の大きさに対応して、×2(2倍)または×4(4倍)などのシフトを行い、シフトされた値に例えばベクタベースレジスタVBRなどのレジスタで指定されるような分岐テーブルの先頭アドレスを加算し、この加算結果をアドレスとして、分岐テーブルをリードし、リードした内容を分岐先アドレスとして分岐するようにする。従って、ベクタベースレジスタVBRを基準に、例外処理ベクタテーブルの範囲を超えるように前記オフセットの値が決められている(要するに、vecの上位に固定値H’80が付加されている)ので、その超えた範囲にマッピングされたサブルーチンベクタテーブルを参照して、サブルーチンに分岐することができる。
図9にはベクタベースレジスタVBRの値を加算する処理について図示はない。この点を更に明確に表現した図面として図25の(6a)がある。
図25の(6b)には、ベクタベースレジスタVBRに代えてサブルーチンコールに専用化されたサブルーチンベクタテーブルレジスタTBRを採用してサブルーチンコールを可能にする拡張メモリ間接アドレシングモードが例示される。即ち、命令の所定フィールドの値dispを、情報のアクセスサイズに応じたビット数例えば2ビット又は4ビットでシフトし、シフトされた値にサブルーチンベクタテーブルレジスタTBRの値を加算してアドレスを演算し、演算されたアドレスで前記サブルーチンベクタテーブルをリードし、リードした内容を分岐先サブルーチンアドレスとする。特に図示はしないが、図25の(6a)においてVBRの代わりTBRの値を用いるアドレシングモードを追加して採用することも可能である。
図25の(6b)に例示される命令フォーマットの命令は例えばサブルーチンコール命令であり、16ビット命令とされ、dispは8ビットとされる。 図10にはCPUの機械語の命令フォーマットが例示される。CPUの命令は、2バイト(ワード)を単位にしている。各命令はオペレーションフィード(op)、レジスタフィールド(r)、EA拡張部(EA)、およびコンディションフィールド(cc)を含む。
前記オペレーションフィールド(op)は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。命令の先頭4ビットを必ず含む。2つのオペレーションフィールドを持つ場合もある。
前記レジスタフィールド(r)は汎用レジスタを指定する。レジスタフィールド(r)はアドレスレジスタのとき3ビット、データレジスタのとき3ビット(32ビットレジスタ)又は4ビット(8または16ビットレジスタ)である。2つのレジスタフィールドを持つ場合、またはレジスタフィールドを持たない場合もある。
前記EA拡張部(EA)は、イミディエイトデータ、絶対アドレスまたはディスプレースメンを指定する。8ビット、16ビット、または32ビットのフィールドである。コンディションフィールド(cc)は条件分岐命令(Bcc命令)の分岐条件を指定する。
図11には本発明に関する命令フォーマットが例示される。
[配列などの実効アドレス計算]
MOV.L @(d:16,rs),rdは、2ワードの命令で、第1ワードのビット6〜4でインデックスレジスタ(rs)を、ビット3〜0でデータレジスタ(rd)を指定し、第2ワードがディスプレースメント(d)である。この命令は図6の(5)(a)に示される16ビットディスプレースメント付きインデックスレジスタ間接のアドレシングモードを用いる。この命令は第1の命令の一つである。図6の(4)に示されるディスプレースメント付きレジスタ間接のアドレシングモードを用いる転送命令等は第2の命令に分類される。
[配列などの実効アドレス計算用MOVA命令]
MOVA/L @(d:16,rd),rdは、2ワードの命令で、第1ワードのビット2〜0でインデックスレジスタとデータレジスタ共通の汎用レジスタ(rd)を指定し、第2ワードがディスプレースメント(d)である。この命令も図6の(5)(a)に示される16ビットディスプレースメント付きインデックスレジスタ間接のアドレシングモードを用いる。この命令は第3の命令の一つである。
[分岐命令1]
BRA rsは、1ワードの命令で、ビット6〜4でインデックスレジスタ(rs)を指定する。この命令は図8の(3)に示されるプログラムカウンタインデックスレジスタ相対のアドレシングモードを用いる。この分岐命令は第1の命令の別の例となる。
[分岐命令2]
JMP @@aa:7は、1ワードの命令で、ビット7〜0に分岐テーブルを指定するアドレス情報(aa)を含む。この命令は図9の(6)及び図25の(6a)に示される拡張メモリ間接のアドレシングモードを用いる。
[分岐命令3]
図26には図25の(6b)に示されるアドレシングモードによるサブルーチン命令による動作が示される。ここで説明するサブルーチンコール命令(16ビット命令)の書式は、“JSR/N @@(disp8,TBR)”とされる。disp8は8ビットのdisp(ディスプレースメント)を意味する。命令コードは“10000011dddddddd”となり、ddddddddは8ビットのdisp(ディスプレースメント)である。動作の概略は以下の通りである。〔1〕復帰のためにプログラムカウンタPCをPR(プロシジャレジスタ)に退避する。〔2〕TBR(サブルーチンベクタテーブルレジスタ)の値とdisp8×4(2ビット左シフト)の値とを加算して、32ビットのテーブルエントリアドレスを生成する。〔3〕前記〔2〕で生成されたアドレスのテーブルエントリから32ビットのアドレスをプログラムカウンタPCにロードする。〔4〕前記〔3〕でロードしたアドレス(全空間をカバー)へジャンプする。
[分岐命令4]
図27にはサブルーチンコール群の先頭アドレスを示す専用サブルーチンベースレジスタSBRをさらに導入し、そこから64KB以内は16ビットのテーブルアドレスで分岐できるような命令を混在させることで、テーブルサイズの最適化を図る例について説明する。動作の概略を説明する。〔1〕プログラムカウンタPCの値を復帰アドレスとしてPR(プロシジャレジスタ)に退避する。〔2〕TBR(サブルーチンベクタテーブルレジスタ)の値とdisp8×2の値とを加算して、32ビットのテーブルエントリアドレスを生成する。〔3〕前記〔2〕で生成されたアドレスのテーブルエントリから16ビットのアドレスをロードしゼロ拡張し、SBR(サブルーチンベースアドレスレジスタ)を加算してアドレスを生成する。〔4〕前記〔3〕で生成したアドレス(64KBをカバー)へジャンプする。
上述したように、サブルーチンコールの先頭アドレステーブルをポイントする専用サブルーチンベクタテーブルレジスタTBRを、例外処理用のベクタベースレジスタVBRとは別に導入し、上記分岐命令3の場合には、命令コード内のdisp(ディスプレースメント)により、32ビットアドレステーブルを16ビット命令1つで参照して、サブルーチンコールでき、また、上記分岐命令4の場合のようにサブルーチンベースレジスタSBRをさらに導入し、そこから64KB以内は16ビットのテーブルアドレスで分岐できるようにすれば、サブルーチンベクタテーブルのサイズを小さくすることができる。
上記分岐命令3、4によれば、命令はコードサイズが16ビットであり、自由に配置できる専用アドレステーブルエリアを持ち、且つジャンプ先のアドレスの範囲に制限はない。上記により、サブルーチンの配置アドレスおよびアドレステーブルエリアに制限を与えること無く、コード効率を向上させることができる。要するに、1)コード効率(サイズ)、2)ジャンプ可能な範囲の全アドレス空間対応、3)自由に配置できる専用サブルーチンベクタテーブルエリアによるプログラミングの容易化、を全て満たすことができる。
[ビットフィールド命令]
BFLD #xx,@aa:16,rdは、3ワードの命令で、第2ワードが絶対アドレス(aa)であり、第3ワードのビット7〜0にイミディエイト(xx)を含み、第3ワードのビット11〜8でデスティネーションレジスタ(rd)を指定する。
BFST rd,#xx,@rsは、2ワードの命令で、第2ワードのビット7〜0にイミディエイト(xx)を含み、第1ワードのビット6〜4でアドレスレジスタ(rd)を、第2ワードのビット11〜8でソースレジスタ(rs)を指定する。
図12にはビットフィールド命令によるデータ処理機能が例示される。
BFLD(ビットフィールドロード)命令は、ソースオペランドにおいて指定されたフィールド(ハッチングされたフィールド)を、下位詰めで、8ビットレジスタRdに転送する(上位ビットは0になる)命令である。ビットフィールドは、8ビットのイミディエイトデータ(マスクデータ)の1がセットされているビットで指定される。要するに、BFLD命令は、メモリ上のデータをリードし、命令コード中に含まれるイミディエイトデータとの論理積をとり、その論理積の結果に対し、前記イミディエイトデータの下位ビット側の論理値“1”のビットが、最下位ビットになるように右シフトし、右シフトの結果を汎用レジスタに格納する処理を規定する。
BFST(ビットフィールドストア)命令は、デスティネーションオペランドにおいてイミディエイトデータで指定されたフィールド(ハッチングされたフィールド)へ、8ビットレジスタRsの内容(下位詰め)を転送する。ビットフィールドは、8ビットのイミディエイトデータの1がセットされているビットで指定される。要するに、BFST命令は、汎用レジスタの内容を、命令コード中に含まれるイミディエイトデータの下位ビット側の論理値“1”のビットまで左シフトし、前記イミディエイトデータの論理値“1”のビットは、前記シフトした内容を選択し、論理値“0”のビットは前記リードしたメモリの内容を選択し、その結果を前記メモリに格納する処理を規定する。
図1には前記CPUの詳細が例示される。命令実行手段としてのCPU2は、制御部2Aと実行部2Bから構成される。
制御部2Aは、命令レジスタIR、命令変更部CHG、命令デコーダDEC、レジスタセレクタRESL、割込み制御部INTCを含む。
命令デコーダDECは、例えば、マイクロROM或はPLA(Programmable Logic Array)または布線論理で構成される。命令デコーダDECの出力の一部が命令デコーダDECにフィードバックされている。これは各命令コード内の遷移に用いるステージコード(TMG)を含む。
命令デコーダDECは、実行部2Bの制御を行う。詳細を後述する制御信号gbbyte、gbword、gbsft1、gbsft2、bfld、bfst、aluabは算術論理演算器ALUの制御用に出力される。また、別の制御信号aa,aa7rd,vecrdはメモリアドレスバッファABの制御用に出力される。
レジスタセレクタRESLは、命令デコーダDECの指示と、命令コード中に含まれるレジスタフィールドの情報に基づいて、レジスタ選択信号rsgb[n]、wbrd[n]などを出力し、汎用レジスタの入出力を制御する。[n]は汎用レジスタに対応した0〜7の番号を意味する。
命令レジスタIRは、リードした命令を一旦格納する。実行すべき命令は、命令デコーダDECに出力される。命令変更部CHGは、リードした命令以外の命令コードを、命令デコーダDECに与える場合に動作し、そのほかの場合は、命令レジスタIRの内容を命令デコーダDECに与える。リードした命令以外の命令コードは、割込み制御部INTCの指示によって、割込みなどの例外処理を実行するとき、などに用いる。割込み制御部INTCは、図2の割込みコントローラ3の出力する割込み要求信号intfを受付け、また、命令デコーダDECの出力する割込みマスク信号21を参照し、割込みがマスクされていなければ、命令変更部CHGに信号20にて割込みを指示する。
前記実行部(EXEC)2Bには、汎用レジスタER0〜ER7、プログラムカウンタPC、コンディションコードレジスタCCR、テンポラリレジスタTR、算術論理演算器ALU、インクリメンタINC、リードデータバッファDBR、ライトデータバッファDBW、アドレスバッファAB、ベクタベースレジスタVBR、TBRを含む。これらの回路ブロックは内部バスab、gb、db、wb1、wb2によって相互に接続されている。
算術論理演算器ALUは、命令によって指定される各種の演算や実効アドレスの計算などに用いる。インクリメンタINCは、主にプログラムカウンタPCの加算に用いられる。
図3に示される汎用レジスタER0〜ER7、プログラムカウンタPC、コンディションコードレジスタCCR以外は、プログラミング上は参照できず、マイクロコンピュータ1内部の動作にのみ用いられる。即ち、リードデータバッファDBR、ライトデータバッファDBW、アドレスバッファABなどは、内部バスIAB、IDBとのインタフェースをとるために、一時的なデータのラッチやバッファリングに使用する。テンポラリレジスタTRは、マイクロコンピュータ1内部の動作に適宜用いられる。内部バスIAB、IDBは前記内部バス11に含まれる内部アドレスバス、内部データバスを意味する。
リードデータバッファDBRは、前記ROM4、RAM5、内部I/Oレジスタ、或は図示はされない外部メモリから、リードした命令コード(EA拡張部)やデータを一時的に格納する。ライトデータバッファDBWはROM4、RAM5、内部I/Oレジスタ、或は外部メモリへのライトデータを一時的に格納する。アドレスバッファABは、CPU2がリード/ライトするアドレスをバッファリングするほか、例外処理ベクタテーブル(ベクタテーブル)やサブルーチンベクタテーブル(分岐テーブル)のリードアドレスを生成するのに利用される。アドレスバッファABは、割込みコントローラから入力されたベクタ、命令コードに含まれる値vec、および内部バスab上の値等を入力とし、アドレス出力を行う。前記の通り、ベクタベースレジスタVBRの値は、例外処理のベクタVECを用いるテーブル参照、拡張メモリ間接におけるベクタフィールドの値vecを用いるテーブル参照の上位アドレスとして使用される。
アドレスバッファABの機能を表す論理記述は図13に示されるように表現することができる。同図の論理記述は、RTL(Register Transfer Level)若しくはHDL(Hardware Description Language)記述と呼ばれ、公知の論理合成ツールによって、論理回路に論理展開できる。HDLはIEEE1364として標準化されている。これに示される論理記述の構文は、ケース(case)文に準拠しており、always@の次の()内で定義された値若しくは信号に変化が有ったとき、それ以下の記述行の処理を行う、という記述内容になっている。尚、記号「|」は論理和を示し、「&」は論理積を示す。「2’b01」は2ビット長のバイナリコード01を意味する。図13の論理記述において、mode=0のときマキシマムモード、mode=1のときミニマムモードとし、拡張メモリ間接の分岐テーブルリードのとき制御信号aa7rd、例外処理のベクタリードのとき制御信号VECrdを活性状態とする。即ち、図13の論理記述は、mode信号と、制御信号aa7rd、VECrdに応じて、選択が行われる。前記制御信号がいずれも非活性状態のときは、内部バスabの内容が選択される。
図14には算術論理演算器ALUの主要部の構成が例示される。算術論理演算器ALUは、入力セレクタ25、算術論理演算部26、ビットフィールド演算部27、及び出力セレクタ28を含む。このほかに、図示はされない、内部バスdb側のALU入力セレクタや、ビット操作命令用などの付加的な機能も含むが、ここでは詳細な説明は省略する。
入力セレクタ25は、ゼロ拡張機能と1ビットシフト又は2ビットシフト機能を持つ。図15にはその機能が論理記述で例示される。即ち、出力する汎用レジスタなどの資源が選択され,内部バスgbを経由して算術論理演算器ALUに入力した後、信号gbbyte、gbwordで、使用する汎用レジスタ(インデックスレジスタ)のサイズを指定し、上位はゼロ拡張される。その後、信号gbsft1、gbsft2でシフトビット数を指定し、×1/×2/×4を選択する。例えば、後述のMOV.L @(d:16,R1L),ER0のアドレス計算では、gbbyte=1、gbword=0、gbsft1=0、gbsft2=1とされる。0拡張とシフト演算されたデータは、リードデータバッファDBRから出力されて内部バスdbを経由して算術論理演算部26に入力されたディスプレースメントと加算される。その加算結果は、出力セレクタ28と内部バスabを経由してアドレスとして出力され、また内部バスwb2を経由して汎用レジスタにも格納される。演算結果はバスabにもバスwb2にも出力される。前記入力セレクタ25は、内部バスgbの内容を減算するために、反転する論理を含めることもできる。インデックスレジスタとしては、負の数を使用しないようにして、入力セレクタ25の論理を並列化して、遅延時間を短縮できる。
ビットフィールドロード演算部27は、内部バスgb、dbと、イミディエイトデータ(imm)を入力し、結果を内部バスwb2に出力する。イミディエイトデータ(imm)は、前記の通り、命令コードのビット7〜0(図8のBFLD命令のxx)などとされる。内部バスwb2に出力された演算結果は、汎用レジスタまたはライトデータバッファDBWに格納される。BFLD演算を行う論理記述は図16に例示される。すなわち、イミディエイトデータ(imm)と内部バスgbとの論理積をとり、イミディエイトデータ(imm)で指定したビット数だけ(最も下位の”1”のビットがビット0になるまで)、右シフトを行うものである。
BFST演算を行う論理記述は図17に例示される。すなわち、内部バスdbを、イミディエイトデータ(imm)で指定したビット数だけ(最も下位の”1”のビット位置まで)、左シフトを行い、bf_inを生成し、イミディエイトデータ(imm)が1のビットはbf_inを、そのほかのビットは内部バスgb(メモリからリードしたデータ)の内容を生成するものである。
次に、本発明に関する命令の実行タイミングを説明する。前記の通り、内部バスは32ビットであるが、簡単のために、命令リードは16ビットずつ行うものとする。また、内蔵ROM4、RAM5のリード/ライトを1ステートでリード/ライト可能とする。
図18にはMOV.L@(d:16,R1L),ER0の実行タイミングが例示される。これは図11で説明した[配列などの実効アドレス計算]の命令フォーマットに応ずる命令の実行タイミングを示す。
T0で、CPU2のアドレスバッファABからアドレスがアドレスバスIABに出力される。また、命令デコーダDECから、命令フェッチ(if)を示す、バスコマンドBCMDが出力される。
T1では、T0の内部アドレスバスIAB上のアドレスとバスコマンドBCMDに従ったリードデータが内部データバスIDBに得られる。このリードデータは、T2で命令レジスタIRに取り込まれる。以上の動作は以前の命令の実行の制御によって行われる。
特に制限はされないものの、引続き、T1、T2、T4、T5でも内部アドレスバスIABにアドレスが出力され、バスコマンドBCMDが出力され、命令リード(先読み)が行われる。本命令のディスプレースメントは、T2で内部データバスIDBに得られ、T3でリードデータバッファDBRに取り込まれる。
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、T2で、リードデータが、命令コードが命令デコーダDECに入力されて、命令の内容が解読される。
命令コードの一部(レジスタ指定フィード)がレジスタセレクタRESLに与えられ、解読される。解読結果に従って、T3で制御信号・レジスタ選択信号が出力される。信号rsgb1が活性状態になって、汎用レジスタER1の内容が内部バスgbに出力される。また、図示を省略する制御信号dbrdb(リードデータバッファDBRからバスdbへの出力制御信号)、図示を省略する制御信号dbrext(リードデータバッファのデータに対する符号拡張指示信号)が活性状態になって、リードデータバッファDBRに取り込まれた16ビットディスプレースメントが符号拡張されて、内部バスdbに出力される。これらが算術論理演算器ALUに入力される。信号gbbyte(内部バスgbからのバイト入力指示信号)、gbsft2(内部バスgbからの入力に対する2ビットシフト指示信号)が活性状態になり、内部バスgbから入力されたデータの下位8ビットをゼロ拡張し、2ビットシフトされて、内部バスdbから入力された内容と加算される。信号aluab(ALUの演算結果をバスabに出力する指示信号)が活性状態になり、加算結果(ea)が内部バスabに出力され、更に、アドレスバッファABを経由して、内部アドレスバスIABに出力される。同時に、ロングワードのリードを示すバスコマンドBCMDが出力される。同時に、レジスタ選択信号を含むデータリード制御信号が生成され、順次、T4、T5の制御を行う。具体的には、T4で信号ldd(IDBからDBRへのロード指示信号)が活性状態になり、リードデータバッファDBR取り込み制御が指示される。T5では、信号dbrrd0(DBRのリード指示信号)が活性状態になり、リードデータバッファDBRの内容がデスティネーションレジスタである汎用レジスタER0への転送が指示される。
リードデータは、T4で内部データバスIDBに得られ、前記の通り、T5でリードデータバッファDBRに取り込まれ、T6で、汎用レジスタER0へ転送される。同時に、転送データの内容に従って、コンディションコードレジスタCCRの所定のフラグが更新される。
図19にはMOVA/L @(d:16,R1L),ER1の実行タイミングが例示される。これは図11で説明した[配列などの実効アドレス計算用MOVA命令]の命令フォーマットに応ずる命令の実行タイミングを示す。
前記同様に、T2で、命令コードが命令デコーダDECに入力されて、命令の内容が解読される。ディスプレースメントは、T3でリードデータバッファDBRに取り込まれる。命令コードの一部(レジスタ指定フィード)がレジスタセレクタRESLに与えられ、解読される。解読結果に従って、T3で制御信号・レジスタ選択信号が出力される。信号rsgb1(ER1からバスgbへの出力指示信号)が活性状態になって、汎用レジスタER1の内容が内部バスgbに出力される。また、信号dbrdb(DBRからバスdbへの出力指示信号)が活性状態になって、DBRに取り込まれたディスプレースメントが内部バスdbに出力される。これらが算術論理演算器ALUに入力される。信号gbbyte、gbsft2信号が活性状態になり、内部バスgbから入力されたデータの下位8ビットをゼロ拡張し、2ビットシフトされて、内部バスdbから入力された内容と加算され、加算結果が内部バスwb2に出力される。同時に、信号wbrd1(バスwb2からレジスタER1へのライト指示信号)が活性状態になって、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER1に格納される。特に制限はされないものの、実効アドレスの転送命令であるMOVAの場合は、コンディションコードレジスタCCRは保持される。
図20にはBRA R2の実行タイミングが例示される。これは図11で説明した[分岐命令1]の命令フォーマットに応ずる命令の実行タイミングを示す。
前記同様に、T2で、命令コードが命令デコーダDECに入力されて、命令の内容が解読される。命令コードの一部(レジスタ指定フィード)がレジスタセレクタRESLに与えられ、解読される。解読結果に従って、T2では、命令リードが抑止される。T3で制御信号・レジスタ選択信号が出力される。信号rsgb2が活性状態になって、汎用レジスタER2の内容が内部バスgbに出力される。また、図示を省略する信号pcdb(PCの値のバスdbへの出力指示信号)が活性状態になって、プログラムカウンタPCの値が内部バスdbに出力される。これらが算術論理演算器ALUに入力される。信号gbword、gbsft1が活性状態になり、内部バスgbから入力されたデータの下位16ビットをゼロ拡張し、1ビットシフトされて、内部バスdbから入力された内容と加算され、加算結果が内部バスabに出力される。内部バスabに出力されたアドレス(target)は、アドレスバッファABを経由して、内部アドレスバスIABに出力される。同時に、命令リードを示すバスコマンドBCMDが出力される。また、内部バスabに出力された内容は、インクリメンタで+2され、プログラムカウンタPCに格納される。
T4では、更新されたプログラムカウンタPCの値に従って、命令リードとプログラムカウンタPCのインクリメントが行われる。T5では、T3でリードした分岐先の命令コードが命令デコーダDECに入力されて、分岐先の命令の内容が解読される。
図21にはJMP @@aa:7の実行タイミングが例示される。これは図11で説明した[分岐命令2]の命令フォーマットに応ずる命令の実行タイミングを示す。
前記同様に、T2で、命令コードが命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、制御信号aa7rdが活性状態になり、T2では、アドレスバッファABに、命令コードの一部(ビット6〜0)と、上位ビットに固定値(H’80)及びベクタベースレジスタVBRの内容が与えられる。更に、CPU動作モード(mode)に応じて、ミニマムモードの場合は1ビット、マキシマムモードの場合は2ビットシフトが行われ、内部アドレスバスIABに出力される。同時に、ミニマムモードの場合はワード、マキシマムモードの場合はロングワードのリードを示すバスコマンドBCMDが出力される。T3では、待機状態とされる。サブルーチン分岐命令の場合は、このステートでスタック操作を行うとよい。
T4で、リードしたデータがリードデータバッファDBRに格納され、この内容が、内部バスabと、アドレスバッファABを経由して、内部アドレスバスIABに出力される。同時に、命令リードを示すバスコマンドBCMDが出力される。また、内部バスabに出力された内容は、インクリメンタINCで+2され、プログラムカウンタPCに格納される。
T5では、更新されたプログラムカウンタPCの値に従って、命令リードとプログラムカウンタPCのインクリメントが行われる。T6では、T3でリードした分岐先の命令コードが命令デコーダDECに入力されて、分岐先の命令の内容が解読される。
絶対アドレス32ビットの分岐命令を、命令コードを16ビット単位でリードする場合に比較して、実行ステート数を同等にできる。命令コードを32ビット単位でリードしたりして、絶対アドレス32ビットの分岐命令の実行開始前に、絶対アドレス32ビットをリード済みであれば、拡張メモリ間接のアドレシングモードより、高速に実行できるので、高速な分岐が必要な処理は絶対アドレス32ビット分岐命令を使用すればよい。また、分岐先が共通な分岐命令が多数あって、さほど高速な分岐が必要でない分岐命令では、拡張メモリ間接アドレシングモードの分岐命令を使用すればよい。この指定は、Cコンパイラのオプションや、ソースプログラムの制御命令として、指定可能にするとよい。
図22にはBFLD #xx,@aa:16,R3Hの実行タイミングが例示される。これは図11で説明した[ビットフィールド命令]の命令フォーマットに応ずる命令の実行タイミングを示す。
前記同様に、T2で、命令コード第1ワード(bfld−1)が命令デコーダDECに入力されて、命令の内容が解読される。第2ワードの絶対アドレス(bfld−2)は、T3でリードデータバッファDBRに取り込まれる。T4で第3ワード(bfld−3)が命令デコーダDECに入力されて、命令の内容が解読される。
解読結果に従って、T3で、夫々図示を省略する信号dbrab(バッファDBRからバスabへの出力指示信号)、dbrext(バッファDBRの保持情報に対する符号拡張の指示信号)が活性状態になって、下位16ビットを符号拡張し、内部バスab、アドレスバッファABを経由して、内部アドレスバスIABに出力される。同時に、バイトのリードを示すバスコマンドBCMDが出力される。リードしたデータは、T5でリードデータバッファDBRに取り込まれる。
T5で制御信号・レジスタ選択信号が出力される。信号dbrgbが活性状態になって、リードデータが内部バスgbに出力され、また、命令コードの一部のイミディエイトデータが、算術論理演算器ALUに入力される。信号bfldが活性状態になって、算術論理演算器ALUがビットフィールドロード演算を行い、演算結果が内部バスwb2に出力される。同時に、信号wbrd3h(バスwb2から汎用レジスタR3Hへのロード指示信号)が活性状態になって、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタR3Hに格納される。特に制限はされないものの、BFLD命令の場合は、コンディションコードレジスタCCRは保持される。
図23にはBFST R4L,#xx,@ER3の実行タイミングが示される。これは図11で説明した[ビットフィールド命令]の命令フォーマットに応ずる図22とは別の命令の実行タイミングを示す。
前記同様に、T2で、命令コード第1ワード(bfst−1)が命令デコーダDECに入力されて、命令の内容が解読される。T3で第2ワード(bfst−2)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、T2で、図示を省略する信号yrsab3が活性状態になって、汎用レジスタER3の内容が、内部バスab、アドレスバッファABを経由して、内部アドレスバスIABに出力される。同時に、バイトのリードを示すバスコマンドBCMDが出力される。リードしたデータは、T4でリードデータバッファDBRに取り込まれる。
T4で制御信号・レジスタ選択信号が出力される。信号dbrgbが活性状態になって、リードデータが内部バスgbに出力され、信号rddb4lが活性状態になって、汎用レジスタR4Lの内容が内部バスdbに出力され、また、命令コードの一部のイミディエイトデータが、算術論理演算器ALUに入力される。信号bfstが活性状態になって、算術論理演算器ALUがビットフィールドストア演算を行い、演算結果が内部バスwb2に出力される。同時に、信号wbdbwが活性状態になって、内部バスwb2の内容が、T5で、ライトデータバッファDBWに格納される。T4で同時に、T2と同じ内容が、内部アドレスバスIABに出力される。これは、T2で、テンポラリレジスタTRに保持するようにし、T4で内部バスabに出力するとよい。これについては、特願2000−161137号で別に提案した。或いは、アドレスバッファABに保持してもよい。T4で更に、バイトのライトを示すバスコマンドBCMDが出力される。T5で、ライトデータバッファDBWの内容が内部データバスIDBに出力される。特に制限はされないものの、BFST命令の場合は、コンディションコードレジスタCCRの値は保持される。
図24には前記CPU2の開発環境の概略が示される。開発者は、各種エディタなどを用いて、C言語乃至アセンブリ言語でプログラムを作成する。これは通常、複数のモジュールに分割して作成される。
Cコンパイラ30は、開発者の作成したそれぞれのC言語ソースプログラム31を入力し、アセンブリ言語ソースプログラム乃至オブジェクトモジュールを出力する。コンパイル時のオプションなどとして、拡張メモリ間接として使用すべき、関数などを指定可能にすることもできる。
アセンブラ32は、アセンブリ言語ソースプログラム33を入力し、オブジェクトモジュールを出力する。
リンケージエディタ34は、上記Cコンパイラやアセンブラの生成した、複数のオブジェクトモジュール35を入力して、各モジュールの外部参照や相対アドレスなどの解決を行い、1つのプログラムに結合して、ロードモジュール36を出力する。このとき、プログラムを解析して、ディスプレースメントや絶対アドレスのビット長を決める。また、分岐命令の分岐先の頻度の高いものを、拡張メモリ間接などの短い命令コードの命令を割当てるようにする。要するに、リンク時に最適化を行なう。
ロードモジュール36は、シミュレータ/デバッガ37に入力して、パーソナルコンピュータなどのシステム開発装置上で、CPU2の動作をシミュレーションし、実行結果を表示し、プログラムの解析や評価を行うことができる。また、エミュレータ38に入力して、実際の応用システム上などで動作する、いわゆるインサーキットエミュレーションを行い、マイクロコンピュータ全体としての、実動作の解析や評価を行うことができる。さらに、ロードモジュールをPROMライタ39に入力して、マイクロコンピュータの内蔵ROMがフラッシュメモリなどの場合や、外部のフラッシュメモリなどに、作成したプログラムをロードすることができる。必要に応じて、オブジェクトコンバータなどによって、所望のフォーマットに変換する。このほかに、ライブラリアンとして、汎用的なサブルーチンなどを提供することもできる。
以上説明したマイクロコンピュータによれば、以下の作用効果を得ることができる。
(1)従来複数の命令を使用して実現していた処理に対応する命令を実行する機能を有することにより、使い勝手を向上するとともに、プログラム容量を縮小し、処理速度を向上することができる。プログラム容量を縮小することによって、ひいては、プログラム格納用のROMなどのメモリ容量を縮小し、費用を節約することができる。
(2)インデックスレジスタの使用と、データレジスタの使用を同じ単位で行うことによって、プログラミングを容易にし、上位の汎用レジスタを別のデータレジスタとして使用することを容易にできる。
(3)汎用レジスタ内容をインデックスレジスタとする実効アドレス計算を行い、結果を同一の汎用レジスタに格納する命令は、使用するレジスタフィールドを少なくし、一旦使用した汎用レジスタは、通常複数回使用することは少ないから、使い勝手を損なわず、命令コード長を短縮し、或いは、他の命令コードの追加を可能にすることができる。
(4)インデックスレジスタは、下位詰めで使用することで、アドレスレジスタの本数と同一にでき、命令フォーマットを共通にしやすい。既存のCPUに追加する場合も追加しやすい。
(5)拡張メモリ間接は、例外処理ベクタと連続した領域にサブルーチンベクタテーブルのマッピングを可能にし、プログラミングの容易化に寄与することができる。例外処理ベクタテーブルとサブルーチンベクタテーブルが重ならないようにして、有効活用ができる。ベクタベースレジスタVBRを例外処理と共にサブルーチンコールにも共用すれば、資源の有効活用と、使い勝手の向上を図ることができる。
(6)Cコンパイラで、拡張メモリ間接の使用を選択することにより、効率的に、プログラム容量の削減を行うことができる。
(7)ビットフィールドをイミディエイトで指定することにより、論理構成を容易にできる。ビットフィールド演算部を、算術演算器は桁上がりを有する算術論理演算と並列とし、遅延時間を均等にして、遅延時間の増加を抑止できる。
(8)サブルーチンコールの先頭アドレステーブルをポイントする専用サブルーチンベクタベースレジスタTBRを、例外処理用のベクタベースレジスタVBRとは別に導入することにより、コード効率、ジャンプ可能な範囲の全アドレス空間対応、自由に配置できる専用サブルーチンベクタテーブルエリアによるプログラミングの容易化、を満たすことができる。 以上本発明者等によってなされた発明を実施例に限定されるものではなく、その要旨を逸しない範囲において種々変更可能である。
例えば、汎用レジスタは、アドレス及びデータに共通に利用可能なものである必要はなく、一部または全部がアドレス専用またはデータ専用のものであってもよい。汎用レジスタのデータサイズについても任意とすることができる。また、インデックスレジスタは、下位詰めで使用するものとしているが、汎用レジスタRHや、汎用レジスタEを使用可能にしてもよい。
CPUの命令体系や命令フォーマットは任意に変形できる。例えば、MOVA命令は同一の汎用レジスタを指定するものとしたが、他の汎用レジスタや、メモリ上のデータをソース(インデックスレジスタ)とすることもできる。ディスプレースメント付インデックスレジスタ間接は、転送命令のほか、メモリを指定する他の演算命令などに適用することもできる。ディスプレースメント付インデックスレジスタ間接における、ゼロ拡張とシフトは、ALUの機能とするほか、内部バスgbの機能としてもよい。
ベクタベースレジスタVBRはなくてもよい。動作モードなどに従って、切替えるようなものでもよい。ビットフィールド転送のための詳細な論理や実行シーケンスは変形が可能である。図25の(6a)と(6b)の双方のアドレシングモードを共に持つことは必須ではなく、何れか一方だけであってもよい。
また、命令コードの基本単位16ビットに限定する必要はなく、8ビット或いは32ビットなど任意のビット幅とできる。拡張メモリ間接による分岐命令は、絶対アドレスによる分岐命令より命令コード長が短ければよい。簡単のために、バス幅を32ビットとし、命令リードを16ビット単位としたが、命令リードを32ビット単位にして高速化することができる。これについては、特願平11−167812号で提案した。また、バス幅を16ビットとして、ロングワードのリード/ライトを、ワード単位の2回のリード/ライトで実行するようにしてもよい。
プログラムカウンタのビット数や、そのほかの制御レジスタの構成なども任意にできる。VBRは、CPU内部のレジスタとして持つほか、内部I/Oレジスタとしてもよい。ビット数も任意にできる。或いは、動作モードなどや内部I/Oレジスタの設定などで、固定値を切替えるようにしてもよい。
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、それに限定されるものではなく、その他のシステムオンチップのマイクロコンピュータ、データプロセッサ、汎用マイクロプロセッサ等のデータ処理装置に広く適用することが可能である。本発明は少なくとも、命令を解読して処理し、演算処理を行う条件のものに適用することができる。
本発明が適用されたCPUの詳細を例示するブロック図である。 本発明の適用されたシングルチップマイクロコンピュータのブロック図である。 CPUに内蔵された汎用レジスタ及び制御レジスタの構成を例示する説明図である。 汎用レジスタの使用形態を例示する説明図である。 CPUのアドレス空間を例示する説明図である。 転送/演算命令の実効アドレスの計算方法を例示する説明図である。 転送/演算命令の実効アドレスの更に別の計算方法を例示する説明図である。 分岐命令の実効アドレスの計算方法を例示する説明図である。 分岐命令の実効アドレスの更に別の計算方法を例示する説明図である。 CPUの機械語の命令フォーマットを例示するフォーマット図である。 本発明に関する命令フォーマットを例示する説明図である。 ビットフィールド命令によるデータ処理機能を例示する説明図である。 アドレスバッファの機能を論理記述で例示する説明図である。 算術論理演算器の主要部の構成を例示するブロック図である。 入力セレクタのゼロ拡張機能と1ビットシフト又は2ビットシフト機能を論理記述で例示する説明図である。 BFLD演算機能を論理記述で例示する説明図である。 BFST演算機能を論理記述で例示する説明図である。 MOV.L@(d:16,R1L),ER0の命令実行タイミングを例示するタイミングチャートである。 MOVA/L @(d:16,R1L),ER1の命令実行タイミングを例示するタイミングチャートである。 BRA R2の命令実行タイミングを例示するタイミングチャートである。 JMP @@aa:7の命令実行タイミングを例示するタイミングチャートである。 BFLD #xx,@aa:16,R3Hの命令実行タイミングを例示するタイミングチャートである。 BFST R4L,#xx,@ER3の命令実行タイミングを例示するタイミングチャートである。 CPUの開発環境の概略を例示する説明図である。 拡張メモリ間接アドレシングモードのアドレス演算手法の詳細を例示する説明図である。 図25の(6b)に示されるアドレシングモードによるサブルーチン命令による動作を示す説明図である。 サブルーチンコール群の先頭アドレスを示す専用サブルーチンベースレジスタをさらに導入した場合におけるサブルーチン命令による動作を示す説明図である。
符号の説明
1 マイクロコンピュータ
2 CPU
2A 制御部
2B 実行部
IR 命令レジスタ
DEC 命令デコーダ
ER0〜ER7 汎用レジスタ
VBR ベクタベースレジスタ
ALU 算術論理演算器
INC インクリメンタ
IDB 内部データバス
IAB 内部アドレスバス
TBR サブルーチンベクタテーブルレジスタ
SBR サブルーチンベースレジスタ

Claims (11)

  1. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、情報保持にその記憶領域の全体又は一部の利用が可能にされる汎用レジスタを有し、前記汎用レジスタの記憶領域の一部を利用する第1の命令を読み込んだとき、情報のアクセスサイズに応じて、前記第1の命令で指定された汎用レジスタの保持情報をシフトし、シフト結果をその他の情報と加算して実効アドレスの演算を行なうことを特徴とするデータ処理装置。
  2. 前記命令実行手段は、前記汎用レジスタの記憶領域の全体を利用する第2の命令を読み込んだとき、前記第2の命令で指定された汎用レジスタの保持情報を、シフトを行わずにその他の情報と加算して実効アドレスの演算を行なうことを特徴とする請求項1記載のデータ処理装置。
  3. 前記その他の情報は、前記第1の命令に含まれる情報であり、前記第1の命令は転送命令であることを特徴とする請求項1記載のデータ処理装置。
  4. 前記第1の命令に含まれる情報は、基準となるアドレス情報であることを特徴とする請求項3記載のデータ処理装置。
  5. 前記その他の情報はプログラムカウント手段が保有する命令アドレス情報であり、前記第1の命令は分岐命令であることを特徴とする請求項1記載のデータ処理装置。
  6. 前記命令実行手段は、前記汎用レジスタの記憶領域の一部を利用する第3の命令を読み込んだとき、情報のアクセスサイズに応じて、その情報をシフトし、シフト結果をその他の情報と加算して演算した実効アドレスを、別の汎用レジスタに格納する処理を実行することを特徴とする請求項1又は2記載のデータ処理装置。
  7. 命令をデコードするデコード手段と、デコード手段のデコード結果に基づいて演算を行なう演算手段とを有し、
    前記デコード手段は、所定の命令を解読して、汎用レジスタの選択、情報のアクセスサイズ、及びシフトビット数の各制御情報を出力し、
    前記演算手段は、汎用レジスタと前記汎用レジスタに接続される演算器を有し、前記制御信号により選択された汎用レジスタの上位側ビットに対する論理値“0”の0拡張、0拡張されたデータに対する前記アクセスサイズに応ずるビット数のシフト処理、及びシフト処理結果とその他の情報との加算演算を行なうことを特徴とするデータ処理装置。
  8. 前記その他の情報とは命令中に含まれる基準となるアドレス情報であることを特徴とする請求項7記載のデータ処理装置。
  9. 前記演算手段は前記汎用レジスタに格納されたデータのうち、前記情報のアクセスサイズによって指定されたデータのみを演算対象とすることを特徴とする請求項7記載のデータ処理装置。
  10. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、命令の所定フィールドの値にオフセットを組合わせ、これに、情報のアクセスサイズに応じたビット数のシフトを行い、シフトされた値にその他の情報を加算してアドレスを演算し、演算されたアドレスでメモリをリードし、リードした内容を分岐先アドレスとする、分岐命令を実行可能であることを特徴とするデータ処理装置。
  11. 前記命令実行手段は中央処理装置であり、1個の半導体基板に形成されて成ることを特徴とする請求項1又は10に記載のデータ処理装置。
JP2007159650A 2002-06-28 2007-06-18 データ処理装置 Expired - Fee Related JP4545777B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007159650A JP4545777B2 (ja) 2002-06-28 2007-06-18 データ処理装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2002191340 2002-06-28
JP2007159650A JP4545777B2 (ja) 2002-06-28 2007-06-18 データ処理装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2002305308A Division JP4004915B2 (ja) 2002-06-28 2002-10-21 データ処理装置

Publications (2)

Publication Number Publication Date
JP2007234065A true JP2007234065A (ja) 2007-09-13
JP4545777B2 JP4545777B2 (ja) 2010-09-15

Family

ID=38554522

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007159650A Expired - Fee Related JP4545777B2 (ja) 2002-06-28 2007-06-18 データ処理装置

Country Status (1)

Country Link
JP (1) JP4545777B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009067598A1 (en) * 2007-11-20 2009-05-28 Qualcomm Incorporated System and method of determining an address of an element within a table

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0651981A (ja) * 1992-08-03 1994-02-25 Hitachi Ltd データ処理装置
JP2001202245A (ja) * 1999-11-15 2001-07-27 Texas Instr Inc <Ti> 改良式命令セットアーキテクチャを有するマイクロプロセッサ
JP2001256105A (ja) * 2000-02-18 2001-09-21 Texas Instr Inc <Ti> 非整列循環アドレス指定を用いるマイクロプロセッサ

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0651981A (ja) * 1992-08-03 1994-02-25 Hitachi Ltd データ処理装置
JP2001202245A (ja) * 1999-11-15 2001-07-27 Texas Instr Inc <Ti> 改良式命令セットアーキテクチャを有するマイクロプロセッサ
JP2001256105A (ja) * 2000-02-18 2001-09-21 Texas Instr Inc <Ti> 非整列循環アドレス指定を用いるマイクロプロセッサ

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009067598A1 (en) * 2007-11-20 2009-05-28 Qualcomm Incorporated System and method of determining an address of an element within a table
US7877571B2 (en) 2007-11-20 2011-01-25 Qualcomm, Incorporated System and method of determining an address of an element within a table
JP2011503758A (ja) * 2007-11-20 2011-01-27 クゥアルコム・インコーポレイテッド テーブル内のエレメントのアドレスを決定するシステムおよび方法

Also Published As

Publication number Publication date
JP4545777B2 (ja) 2010-09-15

Similar Documents

Publication Publication Date Title
TWI476597B (zh) 資料處理裝置及半導體積體電路裝置
JP5199931B2 (ja) Riscアーキテクチャを有する8ビットマイクロコントローラ
JP4004915B2 (ja) データ処理装置
JPS6339931B2 (ja)
JP2002540523A (ja) マイクロコントローラ命令セット
JP2581236B2 (ja) データ処理装置
JP3694531B2 (ja) Riscアーキテクチャを有する8ビットマイクロコントローラ
JP2001202243A (ja) データ処理装置
US6687808B2 (en) Data processor using indirect register addressing
JP2006313561A (ja) データ処理装置
US6986028B2 (en) Repeat block with zero cycle overhead nesting
US6253305B1 (en) Microprocessor for supporting reduction of program codes in size
JP4073721B2 (ja) データ処理装置
JP3786575B2 (ja) データ処理装置
JP2556182B2 (ja) デ−タ処理装置
JP4545777B2 (ja) データ処理装置
JP4498338B2 (ja) データ処理装置
JP3839835B2 (ja) データ処理装置及びマイクロコンピュータ
JP3760093B2 (ja) マイクロコンピュータ
JP3740321B2 (ja) データ処理装置
JP2861560B2 (ja) データ処理装置
JP4382076B2 (ja) データ処理装置
JP2696578B2 (ja) データ処理装置
JP2001337821A (ja) データ処理装置
JP2002132499A (ja) データ処理装置及び記録媒体

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070709

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081209

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090310

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090511

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100413

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100512

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100611

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100629

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100630

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130709

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4545777

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees