(57)【特許請求の範囲】
【請求項１】  一つの２進数の値を表現する８Ｎビットのデータ（Ｎは４以上の整数）が、その連結するＮ個のバイトが当該データの下位桁の側であるほどバイト毎にアドレス付けされたメモリの大きいアドレスに配置されるビッグエンディアン、及び当該Ｎ個のバイトが当該データの上位桁の側であるほどバイト毎にアドレス付けされたメモリの大きいアドレスに配置されるリトルエンディアンのいずれか一方のバイト極性によって取り扱われるデータ処理装置であって、
各々コード化された複数の命令をそれぞれデコードして、各命令に対応する制御情報を出力する命令デコード機構と、
前記命令デコード機構からの制御情報に従って演算を行い、前記複数の命令の各々により指定された処理を実行する実行機構とを備え、
前記複数の命令は、一つの２進数の値を表現する８Ｎビットのデータを指定するソースオペランド指定部分とバイトの配列順序を逆転する処理を指定する第１のオペコード部分とを有するバイトリバース命令、および二つのレジスタを指定する第一のオペランド指定部分および第二のオペランド指定部分と、加算演算を行う処理を指定する第２のオペコード部分とを有する加算命令を含み、
前記実行機構は、
各々８Ｎビット幅の複数のレジスタを含んだレジスタファイルと、
第１、第２および第３のバスと、
この第１および第２のバスに接続され、前記バイトリバース命令に対応する制御情報に従い、前記バイトリバース命令で指定された８Ｎビットのデータを前記第１のバスを介して入力し、その連結するＮ個のバイトの配列順序を逆転する処理を実行し、その逆転した８Ｎビットのデータが前記第２のバスを介して転送され前記複数のレジスタのうちの一つに格納されるバイト順序逆転回路と、
前記第１ないし第３のバスに接続され、前記第１および第２のバスの間では前記バイト順序逆転回路と並列に接続され、前記加算命令に対応する制御情報に従い、前記加算命令で指定された二つのレジスタからそれぞれ前記第１および第３のバスを介して読み出した二つの８Ｎビットのデータを読み出して加算し、その加算結果を前記第２のバスに出力するＡＬＵとを有し、
前記加算命令により指定される二つのレジスタは前記レジスタファイル内のものであり、前記加算命令はその指定される二つのレジスタの一方として前記逆転したビットのデータが格納されるレジスタを指定することのできる、データ処理装置。
【請求項２】  前記バイトリバース命令は、一つの２進数の値を表現する８Ｎビットのデータとしてレジスタファイル内の一つのレジスタを指定し、バイト順序逆転回路に入力される８Ｎビットのデータは、前記バイトリバース命令により指定されたレジスタに格納されていることを特徴とする特許請求の範囲第１項に記載のデータ処理装置。
【請求項３】  Ｎは４であることを特徴とする特許請求の範囲第１項に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はバイト極性の異なるフォーマットのデータの処理を容易に行えるデータ処理装置に関するものである。
【０００２】
【従来の技術】
バイトごとにアドレスが付けられ、しかもバイト中のビットにも順番を示す番号が付けられたメモリ上にデータを配置するとき、データの上位側をメモリの大きなアドレス側に配置するか小さなアドレス側に配置するかに関しては従来より多くの議論がなされてきた。
データの上位側をメモリの大きなアドレスに配置し、データの下位側をメモリの小さなアドレスに配置する方法はリトルエンディアンと称され、データの上位側をメモリの小さなアドレスに配置し、データの下位側をメモリの大きなアドレスに配置する方法はビッグエンディアンと称される。
【０００３】
近年のデータ処理装置ではメモリのアドレスは８ビットを１バイトとしてバイト毎に付けられているのが一般的である。しかし、ビットマップディスプレイやバイトの整数倍でないビット長のビットフィールドを扱う場合にはバイトアドレス以外にビットの位置も示すビットアドレスも必要となり、ビットアドレスに付いてもリトルエンディアンとビッグエンディアンの概念が存在する。バイトとビットがリトルエンディアンかビッグエンディアンかを示すバイト極性とビット極性とは必ずしも一致している必要はない。リトルエンディアンがよいかビッグエンディアンがよいか、あるいは従来のデータ処理装置がどちらを採用しているかについては D. Cohen, "On Holy Wars and a Plea for Peace," Computer, Vol. 14, NO.10, Oct. 1981, pp. 48-54.で詳しく述べられている。
【０００４】
【発明が解決しようとする課題】
リトルエンディアン、ビッグエンディアンの問題はメモリ上のバイトやビットのアドレスについてだけでなく、レジスタ上のバイトやビットの位置についても存在する。
バイト極性とビット極性がともにビッグエンディアンであるデータ処理装置でレジスタのバイト長より短いバイト長のデータをレジスタに格納する場合、メモリ上に格納する場合と同様に、アドレスの小さい側に寄せて格納する例を第２図に示す。
【０００５】
この場合、レジスタ上のデータサイズには拘らずビット位置を示すビットアドレスが同じになるが、２つのレジスタに格納されたデータサイズが異なる２進数データ間で加算などの算術演算を行う場合には、データの最下位ビットが揃っていないため問題となる。算術演算ではデータの最下位ビットを揃えて演算する必要があり、この場合サイズの短い方のデータを右方向に算術シフトしてサイズの大きいほうのデータと最下位ビット位置を揃えてから演算する必要がある。この算術シフトを行うハードウエアをレジスタ入出力部やALU入出力部にもてばデータ処理装置のハードウエアが増大するという問題点がある。また機械語命令やマイクロプログラムで行えば演算速度が低下するという問題点がある。
【０００６】
米国モトローラ社製のマイクロプロセッサＭＣ68000 シリーズでは第３図に示すようにバイト極性をビッグエンディアンにしてビット極性をリトルエンディアンにすることによりこの問題を避けている。しかしこの場合、ビット極性とバイト極性が異なるため、バイト列とビット列とを扱う場合にデータのアドレス計算順序を逆にする必要があるなどして、ソフトウエア設計の負担が大きいという問題がある。
バイト極性とビット極性とをともにリトルエンディアンにすると異種サイズオペランド間演算に対する問題はなくなるが、BCD 数やストリングスデータを扱うときのリトルエンディアン特有の問題が残る。リトルエンディアン特有の問題については上記のD. Cohenの論文に詳しく述べられている。
【０００７】
また、バイト極性の異なるフォーマットのデータ処理装置を同一システムに組み込む場合にはそれらの装置間の結合バスが複雑になる問題点がある。なお、バイト極性の異なるデータ処理装置を結合する具体例は、H.Kirrmann, "Data Format and Bus Compatibility in Multiprocessors", IEEE Micro August 1983, pp.32-47. で述べられている。
【０００８】
本発明は上記のような問題点を解決するためになされたもので、異なるバイトバイト極性でデータを扱う他のデータ処理装置に対するデータを容易に扱うことができるデータ処理装置を得ることを目的とする。
【０００９】
【課題を解決するための手段】
本発明のデータ処理装置は、一つの２進数の値を表現する８Ｎビットのデータ（Ｎは４以上の整数）が、その連結するＮ個のバイトが当該データの下位桁の側であるほどバイト毎にアドレス付けされたメモリの大きいアドレスに配置されるビッグエンディアン、及び当該Ｎ個のバイトが当該データの上位桁の側であるほどバイト毎にアドレス付けされたメモリの大きいアドレスに配置されるリトルエンディアンのいずれか一方のバイト極性によって取り扱われる。命令デコード機構によりデコードされる複数の命令は、一つの２進数の値を表現する８Ｎビットのデータを指定するソースオペランド指定部分とバイトの配列順序を逆転する処理を指定する第１のオペコード部分とを有するバイトリバース命令、および二つのレジスタを指定する第一のオペランド指定部分および第二のオペランド指定部分と、加算演算を行う処理を指定する第２のオペコード部分とを有する加算命令を含む。実行機構は、各々８Ｎビット幅の複数のレジスタを含んだレジスタファイル、第１、第２および第３のバス、この第１および第２のバスに接続され、バイトリバース命令に対応する制御情報に従い、バイトリバース命令で指定された８Ｎビットのデータを第１のバスを介して入力し、その連結するＮ個のバイトの配列順序を逆転する処理を実行し、その逆転した８Ｎビットのデータが第２のバスを介して転送され複数のレジスタのうちの一つに格納されるバイト順序逆転回路、および、第１ないし第３のバスに接続され、前記第１および第２のバスの間では前記バイト順序逆転回路と並列に接続され、加算命令に対応する制御情報に従い、加算命令で指定された二つのレジスタからそれぞれ第１および第３のバスを介して読み出した二つの８Ｎビットのデータを読み出して加算し、その加算結果を第２のバスに出力するＡＬＵを有する。加算命令により指定される二つのレジスタはレジスタファイル内のものであり、加算命令はその指定される二つのレジスタの一方として逆転した８Ｎビットのデータが格納されるレジスタを指定することができる。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
なお、本発明装置については本願出願人の出願に係る発明の名称「データ処理装置」（特願昭６２−２４７４１８号）に詳細に説明されている。
【００１１】
まず本発明のデータ処理装置では、データのバイト極性、ビット極性ともにビッグエンディアンを採用している。第１図に示すようにレジスタ上にレジスタのバイト長より小さいサイズのバイト長のデータを配置する場合には、そのデータのレジスタ上でのビット番号をずらせて、サイズによらず最下位ビットを揃えてデータを格納する。そしてレジスタ上のデータのビット位置を示す場合には命令により示されたデータサイズとビット番号とをもとにしてレジスタ上のデータに対するビット位置をサイズが８ビットでビット番号８より小さい番号ｎのときと、サイズが１６ビットでビット番号がｎ＋８のときと、サイズが３２ビットでビット番号がｎ＋２４のときに同じレジスタビット位置が決定される。
【００１２】
第４図に本発明のデータ処理装置における全体構成のブロック図を示す。
第４図において、(1)はアドレスバス(8)を通じてアドレスをメモリ(10)に送出して命令をメモリ(10)からデータバス(9)を通してフェッチする命令フェッチ部である。
(2)は命令フェッチ部(1) より命令を受取り、それをデコードしてその命令の実行に必要な情報を出力する命令デコード部である。
【００１３】
(3)は命令デコード部(2) から出力されたマイクロプログラムエントリアドレスあるいは汎用レジスタ番号、オペランド、データサイズなどの情報をもとに、マイクロROM(7)に格納され、その命令を実行するマイクロプログラムの先頭番地を示すマイクロプログラムエントリアドレスをマイクロプログラムカウンタ(6)に出力し、マイクロプログラムカウンタ(6)によって次々に指示されるアドレスによりマイクロROM(7)から出力されたマイクロ命令と命令デコード部(2)から出力された他の情報とにより命令実行部(5)を制御して命令を実行する命令実行制御部である。
(4)は命令実行に際して必要になるオペランドがメモリ(10)にある時に、そのアドレスをアドレスバス(8)に出力してデータバス(9)を通してオペランドをフェッチし、あるいはオペランドをメモリ(10)に格納する必要があるときに、そのアドレスをアドレスバス(8)に出力し、またオペランドをデータバス(9)に出力するオペランドアクセス部である。
【００１４】
第５図は第４図に示した命令実行部(5)の詳細を示すブロック図である。
(11)はオペランドとなるデータを格納するレジスタファイルである。
(12),(13),(14),(15)はそれぞれ演算装置である。なお、(12)は２つの２進数の加算などの算術演算及び２つのビット列の論理積などの論理演算を行うALUである。
(16),(17)はデータサイズがALU(12)のそれより小さいデータをALUに入力するときに、そのサイズをALU(12)が扱うデータサイズにゼロ拡張または符号拡張する拡張回路である。
(13)はデータを１度に複数ビット右あるいは左にシフトするバレルシフタである。
(14)はバイト列のバイトの配列順序を逆転させるバイト順逆転回路、(15)はビット列のビット順を逆転させるビット順逆転回路である。
(18),(19),(20)はレジスタファイル(11)と演算装置(12),(13),(14),(15)とをそれぞれ結合するそれぞれS1バス、S2バス、Ｄバスである。
レジスタファイル(11)はバス(18),(19),(20)を介してALU(12)などの演算器(12),(13),(14),(15)に32ビット並列に結合している。レジスタファイル(11)のビット格納位置とALU(12)の入出力ビット位置とは1対１に対応している。
【００１５】
第６図は第５図に示したレジスタファイル(11)の詳細構造を示すブロック図である。
(21),(22),(23)はそれぞれレジスタのビット位置０から15まで、16から23まで、24から31までのデータを格納する回路である。
(24)はレジスタファイル(11)に入力すべきデータのサイズと入力すべきレジスタのレジスタ番号により必要なデータ格納位置の入力回路を制御してデータ格納するレジスタ入力制御回路である。
(25)はレジスタファイル(11)からバスごとに出力すべきデータを格納しているレジスタのレジスタ番号を入力してレジスタ中のデータをS1バス(18)、S2バス(19)に出力制御するレジスタ出力制御回路である。
【００１６】
なお第６図の破線にて囲まれた部分(26)はレジスタファイル(11)中に32個あり本発明のデータ処理装置のマイクロプログラムではそれぞれをR0からR31として区別できる。
【００１７】
第７図は第５図に示したバイト順逆転回路(14)の詳細構成を示すブロック図である。
この回路ではS2バス(19)から入力された４バイトのデータをBYIレジスタRBYIに入れ、８本づつまとめて交差する配線によりそのバイトの配列順序を逆転したデータをBYOレジスタRBY0に移し、BYOレジスタRBYOの値をＤバス(20)に出力する。
【００１８】
第８図は第５図に示したビット順逆転回路(15)の詳細構成を示すブロック図である。
この回路ではS2バス(19)から入力された４バイトのデータをBIIレジスタRBIIに入れ、交差する配線によりそのビット順を逆転したデータをBIOレジスタRBI0に移し、BIOレジスタRBIOの値をＤバス(20)に出力する。
【００１９】
第９図は第４図の命令実行制御部(3)に含まれる一部の回路の構成を示すブロック図である。
(27)は命令で指定されたオペランドのサイズ情報とビット番号とをもとに、レジスタ上のビット位置を示す番号をS1バス(18)に出力するビット位置番号出力回路である。また(28)は定数１をS2バス(19)に出力する回路であり、S2バス(19)の最下位ビットに'1'を、他のすべてのビットには'0'を出力する。
【００２０】
以下、本発明のデータ処理装置の動作について説明する。
レジスタR0に格納された32ビットの符号付き２進数とレジスタR1の中に格納された８ビットの符号付き２進数を加算して８ビットの符号付き２進数としてレジスタR1に格納する符号付き加算命令(本発明のデータ処理装置では「ADD R0.W R1.B」と表現され、命令コードのビットパタンは第10図に示す通りである)を実行する場合を例にして本発明のデータ処理装置で異種サイズオペランド間の演算を行う動作を説明する。
【００２１】
命令は第４図に示す命令フェッチ部(1)でメモリ(10)よりフェッチされ、デコード部(2) でデコードされ、命令実行制御部(3) にデコード結果が渡される。命令実行制御部(3)はレジスタR0とレジスタR1を示す２つのレジスタ番地とレジスタR0に格納されているオペランドのサイズとレジスタR1に格納されているオペランドのサイズをパラメータとしてマイクロROM (7) 中に格納されている符号付き加算プログラムルーチンのエントリ番地をマイクロプログラムカウンタ(6) にセットして、マイクロ命令を読み出し符号付き加算命令を実行する。
【００２２】
命令実行制御部(3)での符号付き加算命令の実行シーケンスを示すフローチャートを第11図に示す。
２つのレジスタ番号はマイクロプログラムとは独立してレジスタ出力制御回路(25)に入力され、レジスタR0中のデータはS1バス(18)を通してALU (12)に転送され、R1中のデータはS2バス(19)を通してALU(12) に転送される。この際、レジスタR1の内容は32ビット総てがS2バス(19)に出力されるが、拡張回路(17)によりS2バス(19)の下位８ビットが符号拡張されてALU(12)に入力される。また、ALU(12)では32ビットの２つの符号付き２進数の符号付き加算が行われ32ビットの符号付き２進数を出力する。このとき、ALU(12)には符号付き加算結果を格納すべきレジスタサイズが８ビットであることが同時に指示されており、加算結果が８ビット以内の２進数で表現できるかどうか、あるいは加算結果が正か負かゼロかなどに従い各種の制御フラッグがセットされる。
ALU(12)の出力32ビットはDバス(20)を通してレジスタR1に転送される。Ｄバス(20)で転送されてきた32ビットのデータは、レジスタ入力制御回路(24)により選ばれたレジスタR1にその下位側８ビットであるビット位置24から31に下位の８ビットのみが格納される。
【００２３】
次にレジスタR0中のオペランドのビット位置３に相当するビットに'1'をセットするビットセット命令を一例として、実施例の実際の動作を説明する。
本発明のデータ処理装置では、ビットセット命令は命令コードのビットパタンは第12図に示す通りである。また、本発明のデータ処理装置ではレジスタ上のビット位置は第１図に示すようになっているのでオペランドのサイズが１バイトか２バイトか４バイトかによりこのビットセット命令はそれぞれ「BSET #3 R0.B、BSET #11 R0.H、BSET #27R0.W」と表現される。命令実行制御部(3) でのビットセット命令の実行シーケンスを第13図のフローチャートに示す。
【００２４】
ビットセット命令ではレジスタのビット位置を示す番号を求めるのに第14図のビット位置番号出力回路(27)を使用する。命令実行制御部(3)ではオペランドのサイズとビット番号をビット位置番号出力回路(27)に入力してビット位置番号をS2バス(19)に出力する。ビット位置番号出力回路(27)はサイズ情報が１バイトの時は(ビット番号３＋24=27)をS1バス(18)に出力し、サイズ情報が２バイトの時は(ビット番号11＋16=27)をS1バス(18)に出力する。サイズ情報が４バイトの時はビット番号27をそのままS1バス(18)に出力する。
【００２５】
ビット位置番号出力回路(27)から出力されたビット位置番号はS1バス(18)を通してバレルシフタ(13)のシフト数指定データとして入力される。このとき同時にS2バス(19)を通して定数'1'が被シフト数としてバレルシフタ(13)に入力される。その結果バレルシフタ(13)からはビット番号27のみが'1'でその他のビットがすべて'0'の32ビットのビットパタンが出力される。このビットパタンは一度作業用レジスタであるレジスタR16に格納される。次にALU(12)でレジスタR0とレジスタR16の内容の論理和演算が行われる。このときレジスタR0中のオペランドのバイト長により符号付き加算命令実行の場合と同様に拡張回路(17)やレジスタ入力制御回路(24)が動作する。
【００２６】
次にレジスタR0中の32ビットのデータのバイトの配列順序を逆転してレジスタR1に転送するバイトリバース命令の動作を説明する。
バイトリバース命令の命令コードビットパターンを第15図に示す。命令実行制御部(3) でのバイトリバース命令の実行シーケンスを示すフローチャートを第16図に示す。
レジスタR0中の32ビットのデータがS2バス(19)を通してバイト順序逆転回路(14)のBYIレジスタRBYIに送られ、バイトの配列順序が逆転された32ビットのデータがBY0レジスタRBY0からDバス(20)を通してレジスタR1に入力される。
【００２７】
次にレジスタR0中の32ビットのデータのビット順を逆転してレジスタR1に転送するビットリバース命令の動作を説明する。ビットリバース命令の命令コードビットパターンを第17図に示す。命令実行制御部(3) でのビットリバース命令の実行シーケンスのフローチャートを第18図に示す。
レジスタR0中の32ビットのデータがS2バス(19)を通してビット順序逆転回路(15)のBIIレジスタRBIIに送られ、ビット順が逆転された32ビットのデータがBI0レジスタRBI0からDバス(20)を通してレジスタR1に入力される。
【００２８】
上記実施例ではレジスタ中のビット位置番号を求める際にハードウエアを用いて求める例を示したが、オペランドのバイト長ごとにマイクロプログラムを別々に用意し、マイクロプログラムによりビット番号を補正してビット位置を求めてもよい。
【００２９】
また、上記実施例ではレジスタ上のオペランドどうしの符号付き加算命令を例にとり、異種サイズのオペランド間の演算機能を述べたが、その他加減乗除の四則演算のすべてで同様の方法により異種サイズオペランド間の演算ができる。
【００３０】
また、上記実施例ではバイトリバース命令とビットリバース命令とを32ビットのデータについてのみ説明したが、上記実施例のバイト順逆転回路(14)あるいはビット順逆転回路(15)での演算とバレルシフタ(13)の演算とを組み合わせればマイクロプログラムにより他のサイズのデータに対してもバイトリバース命令やビットリバース命令を実行することができる。また、ALU(12)あるいはバレルシフタ(13)と作業用レジスタのみを用いてマイクロプログラムでこの２つの命令を実行しても同様の効果が得られる。
【００３１】
【発明の効果】
以上のように本発明のデータ処理装置では、バイトリバース命令を実行して一つの２進数の値を表現する８Ｎビットのデータの連結するＮ個のバイトの配列順序を逆転することにより、変換前のデータはデータ処理装置自身のバイト極性とは異なるバイト極性により取り扱えるデータに変換される。加算命令により加算が実行されるが、加算命令はオペランドとして指定する二つのレジスタの一方として、バイトリバース命令によって変換されたデータが格納されるレジスタを指定することができるので、データ処理装置自身のバイト極性とは異なるバイト極性で規定されるデータを用いて加算をする場合には、正しい値に変換して加算を実行することができる。特にプログラム設計者は一つの命令で正しい値を表現するデータを変換できるためプログラムの設計に負担をかからないから、ソフトウェア開発のコストを低減できるデータ処理装置を実現することができる。
【図面の簡単な説明】
【図１】  本発明のデータ処理装置の４バイトのバイト長のレジスタ上に１バイト、２バイト、４バイトのデータを格納したときの各データの格納位置とビット番号を示した模式図である。
【図２】  バイト極性とビット極性がともにビッグエンディアンであるデータ処理装置でレジスタのバイト長より短いバイト長のデータをレジスタに格納する場合に、アドレスの小さい側に寄せて格納する例を示す模式図である。
【図３】  バイト極性をビッグエンディアンにしてビット極性をリトルエンディアンにした場合の模式図である。
【図４】  本発明装置の全体構成を示すブロック図である。
【図５】  命令実行部の構成を示すブロック図である。
【図６】  レジスタファイルの構成を示すブロック図である。
【図７】  バイト順逆転回路の構成を示すブロック図である。
【図８】  ビット順逆転回路の構成を示すブロック図である。
【図９】  命令実行制御部の一部の構成を示すブロック図である。
【図１０】  本発明装置の符号付き加算命令のビットパターンを示す模式図である。
【図１１】  符号付き加算命令の実行シーケンスを示すフローチャート図である。
【図１２】  命令コードのビットパターンの模式図である。
【図１３】  ビットセット命令の実行シーケンスを示すフローチャート図である。
【図１４】  ビット位置番号出力回路の構成を示す回路図である。
【図１５】  バイトリバース命令の命令コードビットパタンを示す模式図である。
【図１６】  バイトリバース命令の実行シーケンスを示すフローチャートである。
【図１７】  ビットリバース命令の命令コードビットパタンを示す模式図である。
【図１８】  ビットリバース命令の実行シーケンスを示すフローチャート図である。
【符号の説明】
RBYI・・BYIレジスタ、RBYO・・BYOレジスタ、RBII・・BIIレジスタ、RBIO・・BIOレジスタ、１・・命令フェッチ部、２・・命令アクセス部、３・・命令実行制御部、４・・オペランアクセス部、５・・命令実行部、６・・マイクロプログラムカウンタ、７・・マイクロROM、11・・レジスタファイル、12・・ALU、13・・バレルシフタ、14・・バイト順逆転回路、15・・ビット順逆転回路
なお、図中同一符号は同一または相当部分を示す。
【図１】
0003643270.tif 000002
【図２】
0003643270.tif 000003
【図３】
0003643270.tif 000004
【図４】
0003643270.tif 000005
【図５】
0003643270.tif 000006
【図６】
0003643270.tif 000007
【図７】
0003643270.tif 000008
【図８】
0003643270.tif 000009
【図９】
0003643270.tif 000010
【図１０】
0003643270.tif 000011
【図１１】
0003643270.tif 000012
【図１２】
0003643270.tif 000013
【図１３】
0003643270.tif 000014
【図１４】
0003643270.tif 000015
【図１５】
0003643270.tif 000016
【図１６】
0003643270.tif 000017
【図１７】
0003643270.tif 000018
【図１８】
0003643270.tif 000019