(57)【要約】【課題】倍精度演算に比べて、演算回数が少なく、タスクの切替え時間を増加させずに、かつ演算精度が向上した演算処理装置を提供する。【解決手段】演算処理装置は、演算処理に関するデータを保持する汎用レジスタと、演算処理装置の状態に関する情報を保持するプログラムステータスレジスタ10とを含み、割込み処理やタスクを切り換える際に、データおよび情報は退避される。プログラムステータスレジスタ10は領域C1〜Cnに、演算処理の結果得られたデータの一部を保持する。保持されるデータは、演算処理の結果得られたデータのうち、汎用レジスタに保持されない下位桁のデータの上位ｎビットである。このデータを、演算に利用する。【選択図】図１
2007072857.tif 000002
【特許請求の範囲】
【請求項１】
演算処理に関するデータを保持するデータ保持手段と、演算処理装置の状態に関する情報を保持する状態情報保持手段とを含み、少なくともタスクを切り換える際に、前記データおよび前記情報は、前記データ保持手段および前記状態情報保持手段から外部の記憶手段に退避される演算処理装置において、
前記状態情報保持手段は、演算処理の結果得られたデータの一部を保持し、該保持されるデータは、該演算処理の結果得られたデータのうち、前記データ保持手段に保持されない下位桁のデータの少なくとも一部であり、
該装置は、前記状態情報保持手段に該一部のデータを保持させる手段と、該状態情報保持手段から該一部のデータを出力させる手段とを含むことを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記演算処理の結果得られたデータは、前記データ保持手段が保持可能なデータ長を超えるデータ長を有し、
該データ保持手段は、該データのうち、該データ保持手段が保持可能なデータ長分の上位桁のデータを保持し、
前記状態情報保持手段には、該データ保持手段に保持されない下位桁のデータの最上位ビットからｎビット分のデータが保持されることを特徴とする演算処理装置。
【請求項３】
請求項１に記載の演算処理装置において、
前記データ保持手段は、前記演算処理の結果得られたデータのうち、該データ保持手段が保持可能なデータ長より少ないデータ長の上位桁のデータを保持し、
前記状態情報保持手段には、該データ保持手段に保持されない下位桁のデータの最上位ビットからｎビット分のデータが保持されることを特徴とする演算処理装置。
【請求項４】
請求項１から３までのいずれかに記載の演算処理装置において、前記データ保持手段は汎用レジスタであり、前記状態情報保持手段はプログラムステータスレジスタであることを特徴とする演算処理装置。
【請求項５】
請求項４に記載の演算処理装置において、前記プログラムステータスレジスタは、前記ｎビット分のデータを、該プログラムステータスレジスタの空き領域である予約領域に保持することを特徴とする演算処理装置。
【請求項６】
演算処理の中間結果または最終結果であるデータを保持する複数のレジスタを含み、該レジスタが保持するデータは、少なくともタスクを切り替える際に、メモリに一時的に保存され、該レジスタの１つは、前記演算処理結果により決まるフラグを少なくとも格納するプログラムステータスレジスタである情報処理装置において、
該プログラムステータスレジスタは、前記他のレジスタのうちの少なくとも１つのレジスタのレジスタ長を超えるデータ長を有する前記データのうち、該他のレジスタに保持されない下位桁のデータの最上位ビットからｎビット分のデータを保持するための保持領域を有し、
該情報処理装置は、該保持領域に前記ｎビット分のデータを保持させる手段と、該保持領域から該保持されたデータを出力させる手段とを含むことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内部レジスタとしてプログラムステータスレジスタ(PSR: Program Status Register。プログラムステータスワード(PSW: Program Status Word)、プロセッサ状態語、フラグレジスタ、または制御レジスタとも呼ばれる)を有する演算処理装置および情報処理装置に関するものであり、とくに、演算処理装置および情報処理装置の演算精度の向上に関するものである。
【背景技術】
【０００２】
情報処理装置の一種であるマイクロコンピュータや、マイクロコンピュータの一種で制御用であるマイクロコントローラ等は、マイクロプロセッサ(LSI化されたCPU)等の演算処理装置を含む。演算処理装置は、マルチタスキング(multitasking)をサポートするオペレーションシステムが通常、実行可能である。このようなオペレーションシステムとして、たとえばリアルタイム処理が可能なリアルタイムオペレーションシステム(RTOS:real time operating system)がある。
【０００３】
このようなオペレーションシステムにおいては、スケジューラ(scheduler)がタスクの実行順序を決め、所定時間が経過すると、その順序に従ってディスパッチャ(dispatcher)がタスクを切り替える。スケジューラやディスパッチャはソフトウェアであり、ディスパッチャは、次にどのタスクを実行させるかを決める。
【０００４】
演算処理の途中でタスクを切り替えるときは、演算の途中結果等を保持している演算処理装置の内部レジスタの記憶内容を一時、退避させる必要がある。そのような内部レジスタとしては、汎用レジスタ、プログラムカウンタ、命令レジスタ、パイプライン処理に係るレジスタ、プログラムステータスレジスタ（以下では「ステータスレジスタ」と呼ぶ。）等がある。
【０００５】
ステータスレジスタには、たとえばフラグ(flag)が保持される。フラグとは、マイクロプロセッサに含まれる算術論理演算装置(ALU:Arithmetic and Logical Unit)等が実行した演算の結果得られるものであり、キャリフラグ(C)、サインフラグ(S)、ゼロフラグ(Z)、および割込み制御フラグ(E)等がある。キャリフラグは桁上がりの有無を示し、サインフラグは、データの正負を示し、ゼロフラグは、データが「０」であるかどうかを示す。ステータスレジスタでは、これらのフラグがそれぞれ独立して設置されることもあるが、ステータスレジスタは、通常これらのフラグの集合体として構成される。
【０００６】
算術論理演算装置等が入出力するデータのビット数は、システムバス(CPUバスとも呼ばれる)のビット数に合わせてあり、同じビット数である。演算の結果得られるデータおよびフラグは、所定のレジスタおよびステータスレジスタに格納されて、次の段階の演算等に用いられる。
【０００７】
演算処理装置における演算方法については、たとえば特許文献１に記載のものがある。この文献には、倍精度でデータＡとデータＢの積を求める場合に、それぞれのデータを上位データＡ、下位データＡ、上位データＢ、下位データＢに分けて乗算を行うとき、演算回数を減らす方法が開示されている。
【０００８】
【特許文献１】特開平１１−２５９２７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記に述べたフラグは、いずれも演算処理装置による演算の結果得られたものを格納するが、当該演算が、連続した演算の一部であり、当該演算が頻繁に行われる場合には、フラグを参照するだけでは、十分な演算精度が得られない場合がある。たとえば多数回の演算(たとえば、A×B×C)を行うとき、レジスタの大きさがたとえば16ビットと決まっているため、演算を繰り返すにつれて、演算精度が悪くなる。
【００１０】
これについて、さらに説明する。CPUバスが16ビツトである場合に、データ長が32ビットであるデータが演算結果として得られるケースを考察する。データ長が16ビットのデータ同士を掛け合わせる演算を行った場合、その演算結果は、データ長が32ビットであるデータとなるが、CPUバスが16ビットである場合には上位16ビットの演算結果しか得ることができない。ここでさらに、この演算結果に16ビットのデータを掛けた場合、下位16ビットのデータは演算に用いられないために演算の精度が悪くなってしまうという問題がある。
【００１１】
特許文献１に記載の技術では、演算の精度をあげるために、倍精度演算を用いている。倍精度演算を用いると、演算の精度は単精度演算に比べてよくなる。しかし、倍精度演算は、単精度演算に比べて演算回数が増えるため、演算速度が低下する。
【００１２】
演算の精度が悪くなってしまうという問題は、固定小数点表現において、CPUバスが16ビツトである場合に、16ビット未満の桁数が指定される場合にも生じる。たとえば、桁数が15ビットのデータ(以下ではこのデータを「Q15のデータ」と呼ぶ)同士の掛け算を行った場合、上位２ビットが「00」である32ビットのデータが演算結果として得られる。32ビットのデータの上位16ビットが演算処理の途中結果として出力される。この16ビットのデータの上位２ビットは「00」である。
【００１３】
しかし、上位16ビットの最上位ビットは不必要なため、演算結果を１ビット左にシフトする。このとき左シフトにより上位16ビットの最下位ビットに、下位16ビットの最上位ビットが入るべきであるが、計算の過程で下位16ビットは廃棄しているため、左シフトによって下位16ビットの最上位ビットが入ることはない。
【００１４】
同様に、Q14のデータ(桁数が14ビットのデータ)同士、Q13のデータ(桁数が13ビットのデータ)同士の掛け算を行った時にも、計算の過程で左シフトを２ビット、３ビットと行う。この時にも同様に下位16ビットから、２ビット、３ビットのシフトは行われない。よってこのシフトされる分だけ精度が悪くなってしまうという問題点がある。
【００１５】
また、CPUバスが16ビツトである16ビットマイコンの中には従来、16ビットであるデータ同士の掛け算を行った場合に、演算の結果である32ビットのデータを上位16ビット、下位16ビットをそれぞれ別々のレジスタに格納するものもある。すなわち下位16ビットを廃棄しないものもある。この場合は、演算の精度は保つことができる。しかし、この場合にはタスクが切り替わる際に、上位16ビットと下位16ビットを両方とも、それぞれレジスタからメモリに格納することが必要になるため、タスクの切替えに時間がかかるという問題がある。
【００１６】
本発明はこのような課題に鑑み、倍精度演算に比べて、演算回数が少なく、タスクの切替え時間を増加させずに、かつ演算精度が向上した演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明は上述の課題を解決するために、演算処理に関するデータを保持するデータ保持手段と、演算処理装置の状態に関する情報を保持する状態情報保持手段とを含み、少なくともタスクを切り換える際に、データおよび情報は、データ保持手段および状態情報保持手段から外部の記憶手段に退避される演算処理装置において、状態情報保持手段は、演算処理の結果得られたデータの一部を保持し、保持されるデータは、演算処理の結果得られたデータのうち、データ保持手段に保持されない下位桁のデータの少なくとも一部であり、装置は、状態情報保持手段に一部のデータを保持させる手段と、状態情報保持手段から一部のデータを出力させる手段とを含むことを特徴とする。
【００１８】
本発明によれば、状態情報保持手段は、演算処理の結果得られたデータのうち、データ保持手段に保持されない下位桁のデータの少なくとも一部を廃棄することなく、保持するため、このデータを用いて演算精度を上げることができる。さらに、状態情報保持手段が下位桁のデータを保持するため、下位桁のデータ保持用に新たにデータ保持手段を追加する必要がない。
【００１９】
さらに、従来からデータ退避の対象である状態情報保持手段を用いるため、タスクの切替え時に、退避させなければならないデータ量が実質的に増加することがなく、タスクの切替え時間が増加しない。また、従来のような倍精度演算を行っているわけではないため、使用するレジスタの数が少なく、演算回数が倍精度演算よりも少なくなる。
【００２０】
本発明においては、演算処理の結果得られたデータは、データ保持手段が保持可能なデータ長を超えるデータ長を有し、データ保持手段は、このデータのうち、データ保持手段が保持可能なデータ長分の上位桁のデータを保持し、状態情報保持手段には、データ保持手段に保持されない下位桁のデータの最上位ビットからｎビット分のデータが保持されるようにすることができる。
【００２１】
また、固定小数点演算等において、CPUバスのビット数より少ない桁数が指定された場合、データ保持手段は、演算処理の結果得られたデータのうち、データ保持手段が保持可能なデータ長より少ないデータ長の上位桁のデータを保持し、状態情報保持手段には、データ保持手段に保持されない下位桁のデータの最上位ビットからｎビット分のデータが保持されるようにする。
【００２２】
なお、状態情報保持手段がプログラムステータスレジスタである場合は、ｎビット分のデータを、プログラムステータスレジスタの空き領域である予約領域に保持することが好ましい。
【発明の効果】
【００２３】
本発明によれば、倍精度演算に比べて、演算回数が少なくなり、割込み発生時やタスクスイッチング時のレジスタ退避の処理負担を軽減し、また演算の精度を向上させることができる。
【発明を実施するための最良の形態】
【００２４】
次に添付図面を参照して本発明による演算処理装置の実施例を詳細に説明する。本発明による演算処理装置の実施例は、情報処理装置であるマイクロコントローラに含まれるものであり、CPUバスは16ビットである。なお、本発明は、16ビットに限られるものではなく、CPUバスは32ビット、64ビット等が可能である。
【００２５】
演算処理装置は、演算処理に関するデータを保持する16ビットの複数の汎用レジスタと、演算処理装置の状態に関する情報を保持するステータスレジスタとを含み、割込処理およびタスクを切り換える際に、データおよび情報を、情報処理装置内のハードディスクに退避させる。
【００２６】
ステータスレジスタは、演算処理の結果得られたデータの一部を保持し、保持されるデータは、演算処理の結果得られたデータのうち、汎用レジスタに保持されない下位桁のデータの少なくとも一部である。演算処理装置は、図示しない制御部を含み、制御部は、ステータスレジスタに当該一部のデータを保持させるとともに、ステータスレジスタから当該一部のデータを出力させる。制御部は、マイクロコントローラの図示しないメモリに格納されたプログラムを解釈して(デコードして)、汎用レジスタ、ステータスレジスタ、演算器、メモリ間のデータの入出力を制御し、演算器に所定の演算を指示する。演算器としては、後述する乗算器、ALU等がある。
【００２７】
本実施例では、16ビットのデータ同士の乗算を行う。乗算の結果得られたデータは、32ビットであり、汎用レジスタが保持可能なデータ長である16ビットを超える。汎用レジスタは、32ビットのデータのうち、汎用レジスタが保持可能な16ビット分の上位桁のデータを保持する。ステータスレジスタには、汎用レジスタに保持されない下位桁の16ビットのデータのうち、最上位ビットからｎビット分のデータが保持される。
【００２８】
ｎの値は、本実施例では、１〜16の間の値を取る。たとえば、５である。ｎの値は、製品出荷時に固定することができ、また、固定せずに、ユーザが任意の値に指定することができるようにしてもよい。
【００２９】
図1(a)に、本発明のステータスレジスタ10の構成を示す。ステータスレジスタ10に、領域C1〜Cnを、従来は予約ビットであった領域に設ける。領域C1〜Cnには、16ビットのデータ同士の演算によって得られた32ビットの演算結果の下位16ビットの最上位からnビットの値を格納する。予約ビットは従来、使用されていなかった部分である。図１において左端のビットが、最上位ビット(MSB: Most Significant Bit)であり、右端のビットが、最下位ビット(LSB: Least Significant Bit)である。図1(a)では、最上位ビットから数えて所定のビット数分の予約ビット12があり、下位４ビットは、それぞれキャリフラグＣ、サインフラグＳ、ゼロフラグＺ、および割込み制御フラグＥである。予約ビット12の各ビットは、値「0」で固定されている。
【００３０】
図1(b)に、比較例として、領域C1〜Cnを設けていないステータスレジスタ14の構成を示す。最上位ビットから数えて所定のビット数分の予約ビット16があり、下位４ビットは、それぞれキャリフラグＣ、サインフラグＳ、ゼロフラグＺ、および割込み制御フラグＥである。
【００３１】
図２は、本実施例の演算処理の概要を示す説明図である。本実施例では、３個のデータA, B, Fの積A×B×Fを求める。データA, B, Fは、いずれも16ビットとする。本実施例では、最初に積A×B(=D)を求める。次に、32ビットである積A×Bの上位16ビット(D2)とデータＦとの積Ｇ、および積A×Bの下位16ビットのうちのｎビット(D1)とデータＦとの積19をそれぞれ求める。そして、これらの積Ｇ, 19の和を、積A×B×Fとして出力する。これらの演算を行うために、本実施例の演算処理装置は、レジスタX, Y, ZA, ZB, T、乗算器、算術論理演算装置等を有する。レジスタX, Y, ZA, ZB, T、乗算器、算術論理演算装置の詳細については、後述する。
【００３２】
さらに演算処理の概要を説明する。最初に、レジスタX, Yにそれぞれ保持した16ビットのデータＡと、16ビットのデータＢを掛け合わせて、32ビットのデータＤを得る。このときCPUバス幅が16ビットであるため、実際にはデータＤの上位16ビットD2を計算結果としてレジスタＸに保持する。またデータＤの下位16ビットの最上位ビットからｎビット分D1だけをステータスレジスタ10の領域Cl〜Cnに保持する。
【００３３】
次のステップでは、データＤの上位16ビットD2に、レジスタＹに保持した16ビットのデータＦを掛けて、32ビットのデータＧ(=F×D2)を得る。データＧの上位16ビットG2は、レジスタZAに保持し、データＧの下位16ビットG1は、レジスタＴに保持する。
【００３４】
一方、データD1と、レジスタＹに保持した16ビットのデータＦを掛けて、32ビット以下のデータ(=F×D1)を得る。すなわちF/2×Cn+〜+F/2n×C1 という演算を行う。得られたデータのうち、上位16ビットのデータG3のみをレジスタZBに保持する。その後、レジスタＴのデータG1と、レジスタZBのデータG3を加算し、得られた和G4に、レジスタZAのデータG2をさらに加算して、和G5を求める。和G5が積A×B×Fである。
【００３５】
レジスタX, Y, T, ZA, ZBはいずれも汎用レジスタである。動作中に、割込みが発生したり、タスクが切り替わった際には、従来と同様に、汎用レジスタおよびステータスレジスタの値を保存する。
【００３６】
このように、本実施例では、積A×Bの上位16ビットとデータＦとの積を求め、積A×Bの下位16ビットのうちのｎビットとデータＦとの積を求め、これらの積を加算することとしているため、積A×Bの下位16ビットを考慮しない方式に比べて計算精度が向上する。
【００３７】
ここで、比較例として、積A×Bの下位16ビットを考慮しない方式を図３により説明する。図３は、比較例の演算処理の概要を示す説明図である。比較例でも、３個のデータA, B, Fの積A×B×Fを求める。データA, B, Fは、いずれも16ビットである。比較例では、32ビットである積Ｄ(=A×B)の上位16ビットD2とデータＦとの積は求めるが、積A×Bの下位16ビットD3は、いずれのレジスタにも保持されず、失われる。そのため、積A×Bの下位16ビットD3とデータＦとの積が無視され、計算精度が、本実施例より低下する。すなわち、演算するときに、積Ｄの下位16ビットが反映されないために誤差が生じてしまう。最終結果の最下位ビットに、積Ｄの下位16ビットがまったく反映されておらず、比較例の処理は、下位16ビットの四捨五入等ではなく、下位16ビットの切り捨てである。
【００３８】
次に、本実施例を、図4, 5により詳細に説明する。図４は、演算処理装置18の構成を示すブロック図であり、図５は、そのタイミングチャートである。演算処理装置18は、図示しないシステムクロック信号に同期した演算周期（サイクル）で演算処理を行う。最初に、図示しないCPUバスにそれぞれ接続された信号線20, 22を介してレジスタX 21, レジスタY, 23に、それぞれ16ビットのデータＡと16ビットのデータＢが、データＡ、データＢの順に、図示しない外部のメモリから転送される。データＡはサイクル１、データＢはサイクル２で転送される。レジスタX 21, レジスタY, 23は、転送されたデータA, Bを保持する。
【００３９】
図４において、信号線を示す参照符号の後に記載された括弧内の符号は、当該信号線を介して転送されるデータを示す。括弧内の符号が複数ある場合は、複数のデータが、順次、当該信号線を介して転送されることを示す。たとえば、信号線22の(B, F)は、データＢが転送された後に、データＦが転送されることを示す。ただし、データＢとデータＦが連続したサイクルで転送されるとは限らない。転送のタイミングについては、図５による。
【００４０】
レジスタX, Yにそれぞれ保持した16ビットのデータA, Bは、信号線24, 26を介して乗算器Ａ 28に送られる。乗算器Ａ 28では、サイクル３において、データＡとデータＢを掛け合わせて、32ビットのデータＤ(=A×B)を得る。このときCPUバス幅が16ビットであるため、実際にはデータＤの上位16ビットD2を計算結果として、信号線30を介してサイクル４でレジスタＸ 21に送り、レジスタＸ 21は、データD2を保持する。
【００４１】
このサイクル４では、データＤの下位16ビットの最上位ビットからｎビット分のデータD1だけを、信号線32を介してステータスレジスタ10に送る。データD1はステータスレジスタ10の予約ビットCl〜Cnに保持される。また、レジスタＹ 23に、CPUバスおよび信号線22を介してデータＦが転送される。
【００４２】
サイクル５では、データＤの上位16ビットのデータD2、および、レジスタＹ 23に保持した16ビットのデータＦが、信号線24, 26を介して乗算器Ａ 28に送られて、乗算器Ａ 28では、データD2とデータＦを掛けて32ビットのデータＧ(=F×D2)を得る。サイクル６において、データＧの上位16ビットのデータG2は、信号線34を介してレジスタZA 35に転送され、レジスタZA 35はデータG2を保持する。データＧの下位16ビットG1は、信号線36を介してレジスタＴ 37に転送され、レジスタＴ 37はデータG1を保持する。
【００４３】
一方、サイクル５では、データD1と、レジスタＹ 23に保持した16ビットのデータＦが、信号線38, 40を介して乗算器Ｂ 42に送られて、乗算器Ｂ 42では、データD1とデータＦを掛けて、32ビット以下のデータ(=F×D1)を得る。すなわちF/2×Cn+〜+F/2n×C1 という演算を行う。サイクル６において、得られたデータのうち、上位16ビットのデータG3のみを、信号線44を介してレジスタZB 46に転送し、レジスタZB 46はデータG3を保持する。
【００４４】
サイクル７において、レジスタＴ 37のデータG1と、レジスタZB 46のデータG3は、信号線48, 50を介してALU 52に送られ、ALU 52は、これらを加算し、データG4を得る。サイクル８においてデータG4は、信号線54を介してレジスタZB 46に送られる。レジスタZB 46はデータG4を保持する。
【００４５】
サイクル９において、レジスタZA 35のデータG2と、レジスタZB 46のデータG4は、信号線56, 50を介してALU 52に送られ、ALU 52は、これらを加算し、データG5を得る。データG5が積A×B×Fである。サイクル10においてデータG5は、信号線58を介してレジスタZC 60に送られる。レジスタZC 60はデータG5を保持する。データG5は、その後、CPUバスに接続された信号線62を介して、外部に出力される。
【００４６】
以上のように本実施例によれば、ステータスレジスタに設けた領域Cl〜Cnを用いて、従来は削除されてしまう情報を確保することにより、精度のよい結果が得られる。
【００４７】
また、本実施例によれば、次のような効果もある。領域Cl〜Cnを用いずに、16ビット同士の掛け算での演算結果である32ビットのデータを、上位16ビット、下位16ビットに分けて別々の汎用レジスタに格納する方式を採用した場合、割込み発生時やタスク切替え時に、汎用レジスタに保持された下位16ビットをメモリ上に別に格納する必要がある。したがって、格納するための時間が別に必要である。一方、本発明による実施例では領域Cl〜Cnが、従来から保存しなければならないステータスレジスタにある。そのため、別途下位16ビットを格納する必要がない。このため下位16ビットを保存するために要する時間を削減することができ、タスクの切替え等に要する時間を短縮することができる。
【００４８】
次に、本発明の別の実施例について説明する。本実施例は、固定小数点表現において、たとえばCPUバスが16ビツトである場合に、16ビット未満の桁数が指定される場合に、演算の精度を改善するものである。本発明の実施例の説明を行う前に、比較例として、本実施例と比較として、演算の精度が悪い方式の説明を図６により行う。
【００４９】
レジスタX, Yに保持された桁数が15ビットのデータ(Q15)同士の掛け算を行う場合を考える。このとき、レジスタX, Yの最上位ビットの値は、「0」である。レジスタX, Yに保持されたデータ同士の掛け算を行うと、上位２ビットが「00」である32ビットのデータ64が演算結果として得られる。32ビットのデータ64の上位16ビットのデータ66が、演算処理の途中結果としてレジスタZAに出力される。この16ビットのデータの上位２ビットは「00」である。下位16ビットのデータ68は、このときに廃棄される。
【００５０】
上位16ビットのデータ66の最上位ビットは不必要なため、演算結果を１ビット左にシフトする。最下位ビットには「0」が入る。こうして最終結果がレジスタZBに求まる。このとき左シフトにより上位16ビットの最下位ビットに、下位16ビットのデータ68の最上位ビットが入るべきである。しかし、計算の過程で下位16ビットは廃棄しているため、左シフトによって下位16ビットの最上位ビットが入ることはない。Q14×Q14、Q13×Q13、〜の場合にはシフトされる桁数が増えるため、それに対応して誤差が増える。
【００５１】
データ68は、固定少数点演算において失われてしまう情報であり、計算結果を求める課程で行われるシフトにおいて、データ68の最上位ビットの値が反映されない。本発明では、データ68の最上位ビットをステータスレジスタに保持し、計算に用いる。この分だけ計算の精度が上がる。なお、本発明では、Q14×Q14、Q13×Q13、〜の場合にはシフトされる桁数を、２桁、３桁、〜と増やす。
【００５２】
図７は、本発明の実施例の演算処理の概要を示す説明図である。レジスタＸに保持されたQ15のデータと、レジスタＹに保持されたQ15のデータの掛け算を行うと、乗算器により32ビットのデータ70が得られる。CPUバスの幅が16ビットであるために、上位16ビットのデータ72のみがレジスタZAに保持される。このときに下位ビットのデータ74のうち、最上位ビットからｎビット分D1を、ステータスレジスタ10の領域C1〜Cnに保持する。
【００５３】
乗算器により得られたデータ70の上位16ビットの最上位ビット76は不必要なため、レジスタZAの値を１ビット左にシフトする。このときにステータスレジスタ10に確保された領域Cnの値を下位からシフトする。実際には本実施例では、レジスタZAの値を１ビット左にシフトした後、ステータスレジスタ10に確保された領域Cn〜C1の値を、数の大きさを考慮して加算する。データ74は、従来は失われていた情報であるが、領域Cnの分だけ計算結果の精度が上がる。
【００５４】
同様にQ14、Q13、〜の演算を行った時にも、計算の過程で下位からシフトする量を変える。Q14×Q14、Q13×Q13、の場合には、シブトされる桁数が増えるため、それに対応した桁数だけステータスレジスタから値を取る。なお本実施例でも、動作中にタスクが切り替わった際には、従来と同様にステータスレジスタの値を保存する。
【００５５】
次に、本実施例を、図8, 9により詳細に説明する。図８は、演算処理装置78の構成を示すブロック図であり、図９は、そのタイミングチャートである。図4, 5と同様の装置については同一の符号を付す。演算処理装置78は、図示しないシステムクロック信号に同期した演算周期（サイクル）で演算処理を行う。
【００５６】
最初に、図示しないCPUバスにぞれぞれ接続された信号線20, 22を介してレジスタX 21, レジスタY 23に、それぞれ16ビットのデータＡとデータＢが、データＡ、データＢの順に、図示しない外部のメモリから転送される。データＡはサイクル１、データＢはサイクル２で転送される。レジスタX 21, レジスタY 23は、転送されたデータA, Bを保持する。図８において、信号線を示す参照符号の後に記載された括弧内の符号は、図４と同じ意味を持つ。
【００５７】
レジスタX 21, レジスタY 23にそれぞれ保持した16ビットのデータＡとデータＢは、信号線24, 26を介して乗算器80に送られる。乗算器80では、サイクル３において、データＡとデータＢを掛け合わせて、32ビットのデータＤ(=A×B)を得る。このときCPUバス幅が16ビットであるため、実際にはデータＤの上位16ビットD2を計算結果として、信号線34を介してサイクル４でレジスタZA 35に送り、レジスタZA 35は、データD2を保持する。
【００５８】
このサイクル４では、データＤの下位16ビットの最上位ビットからｎビット分のデータD1だけを、信号線32を介してステータスレジスタ10に送る。データD1はステータスレジスタ10の領域Cl〜Cnに保持される。
【００５９】
サイクル５では、データＤの上位16ビットのデータD2が、信号線56を介して算術論理演算装置82に送られて、１ビット左にシフトする。得られたデータD3は、信号線84を介してサイクル６でレジスタZA 35に送られる。レジスタZA 35は、データD3を保持する。
【００６０】
レジスタZA 35に保持されたデータD3と、ステータスレジスタ10に保持されたデータD1は、信号線56, 86を介して算術論理演算装置82に送られる。算術論理演算装置82では、サイクル７において、データD3とデータD1を加算して、16ビットのデータＩを得る。サイクル８においてデータＩは、信号線88を介してレジスタZB 46に送られる。レジスタZB 46はデータＩを保持する。データＩは、その後、CPUバスに接続された信号線90を介して、外部に出力される。
【００６１】
以上のように、本実施例によれば、ステータスレジスタに設けた領域Cl〜Cnを用いて、本来であれば削除されてしまう情報を確保することにより、正しい演算結果を得ることができる。また、最初の実施例と同様に、次の効果もある。16ビット同士の掛け算の演算結果である32ビットのデータを、上位16ビット、下位16ビットに分けて、別々のレジスタに格納する方式では、タスク切替え時等に下位16ビットを、メモリ上に別途、格納する必要が生じる。そのため、格納するための時間が、別途、必要となる。一方、本発明による実施例では、領域Cl〜Cnが、従来から保存しなければならないステータスレジスタにあるため、別途下位16ビットをメモリに格納する必要がない。このため、この保存に要する時間を削除することができ、タスクの切替え等に要する時間を短縮することができる。
【００６２】
以上の実施例では、乗算、シフト演算を例として、演算により得られた32ビットの演算結果の下位16ビットの最上位からｎビットの値を演算に用いて、演算の精度を上げるマイクロコントローラなどの情報処理装置を開示したが、本発明はこれらの演算に限られるものではない。汎用レジスタのレジスタ長を超える有効データ長を有する演算結果が得られる演算の下位データを考慮すると、演算の精度が上がるすべての演算に適用可能である。そして、そのような演算を行うすべての演算処理装置および情報処理装置に適用可能である。
【図面の簡単な説明】
【００６３】
【図１】図１は、ステータスレジスタの構成を示す説明図である。
【図２】図２は、本発明の実施例の演算処理の概要を示す説明図である。
【図３】図３は、比較例の演算処理の概要を示す説明図である。
【図４】図４は、本発明の演算処理装置の構成を示すブロック図である。
【図５】図５は、図４の演算処理装置のタイミングチャートを示す。
【図６】図６は、別の比較例の演算処理の概要を示す説明図である。
【図７】図７は、本発明の別の実施例の演算処理の概要を示す説明図である。
【図８】図８は、本発明の別の実施例の演算処理装置の構成を示すブロック図である。
【図９】図９は、図８の演算処理装置のタイミングチャートを示す。
【符号の説明】
【００６４】
10, 14  ステータスレジスタ(PSR)
21  レジスタＸ
23  レジスタＹ
28  乗算器Ａ
42  乗算器Ｂ
52, 82  算術論理演算装置(ALU)
80  乗算器
C1〜Cn  領域
Ｃ  キャリフラグ
Ｓ  サインフラグ
Ｚ  ゼロフラグ
Ｅ  割込み制御フラグ
【図１】
2007072857.tif 000003
【図２】
2007072857.tif 000004
【図３】
2007072857.tif 000005
【図４】
2007072857.tif 000006
【図５】
2007072857.tif 000007
【図６】
2007072857.tif 000008
【図７】
2007072857.tif 000009
【図８】
2007072857.tif 000010
【図９】
2007072857.tif 000011