説明

演算処理装置および情報処理装置

【課題】倍精度演算に比べて、演算回数が少なく、タスクの切替え時間を増加させずに、かつ演算精度が向上した演算処理装置を提供する。
【解決手段】演算処理装置は、演算処理に関するデータを保持する汎用レジスタと、演算処理装置の状態に関する情報を保持するプログラムステータスレジスタ10とを含み、割込み処理やタスクを切り換える際に、データおよび情報は退避される。プログラムステータスレジスタ10は領域C1〜Cnに、演算処理の結果得られたデータの一部を保持する。保持されるデータは、演算処理の結果得られたデータのうち、汎用レジスタに保持されない下位桁のデータの上位nビットである。このデータを、演算に利用する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、内部レジスタとしてプログラムステータスレジスタ(PSR: Program Status Register。プログラムステータスワード(PSW: Program Status Word)、プロセッサ状態語、フラグレジスタ、または制御レジスタとも呼ばれる)を有する演算処理装置および情報処理装置に関するものであり、とくに、演算処理装置および情報処理装置の演算精度の向上に関するものである。
【背景技術】
【0002】
情報処理装置の一種であるマイクロコンピュータや、マイクロコンピュータの一種で制御用であるマイクロコントローラ等は、マイクロプロセッサ(LSI化されたCPU)等の演算処理装置を含む。演算処理装置は、マルチタスキング(multitasking)をサポートするオペレーションシステムが通常、実行可能である。このようなオペレーションシステムとして、たとえばリアルタイム処理が可能なリアルタイムオペレーションシステム(RTOS:real time operating system)がある。
【0003】
このようなオペレーションシステムにおいては、スケジューラ(scheduler)がタスクの実行順序を決め、所定時間が経過すると、その順序に従ってディスパッチャ(dispatcher)がタスクを切り替える。スケジューラやディスパッチャはソフトウェアであり、ディスパッチャは、次にどのタスクを実行させるかを決める。
【0004】
演算処理の途中でタスクを切り替えるときは、演算の途中結果等を保持している演算処理装置の内部レジスタの記憶内容を一時、退避させる必要がある。そのような内部レジスタとしては、汎用レジスタ、プログラムカウンタ、命令レジスタ、パイプライン処理に係るレジスタ、プログラムステータスレジスタ(以下では「ステータスレジスタ」と呼ぶ。)等がある。
【0005】
ステータスレジスタには、たとえばフラグ(flag)が保持される。フラグとは、マイクロプロセッサに含まれる算術論理演算装置(ALU:Arithmetic and Logical Unit)等が実行した演算の結果得られるものであり、キャリフラグ(C)、サインフラグ(S)、ゼロフラグ(Z)、および割込み制御フラグ(E)等がある。キャリフラグは桁上がりの有無を示し、サインフラグは、データの正負を示し、ゼロフラグは、データが「0」であるかどうかを示す。ステータスレジスタでは、これらのフラグがそれぞれ独立して設置されることもあるが、ステータスレジスタは、通常これらのフラグの集合体として構成される。
【0006】
算術論理演算装置等が入出力するデータのビット数は、システムバス(CPUバスとも呼ばれる)のビット数に合わせてあり、同じビット数である。演算の結果得られるデータおよびフラグは、所定のレジスタおよびステータスレジスタに格納されて、次の段階の演算等に用いられる。
【0007】
演算処理装置における演算方法については、たとえば特許文献1に記載のものがある。この文献には、倍精度でデータAとデータBの積を求める場合に、それぞれのデータを上位データA、下位データA、上位データB、下位データBに分けて乗算を行うとき、演算回数を減らす方法が開示されている。
【0008】
【特許文献1】特開平11−259273号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
上記に述べたフラグは、いずれも演算処理装置による演算の結果得られたものを格納するが、当該演算が、連続した演算の一部であり、当該演算が頻繁に行われる場合には、フラグを参照するだけでは、十分な演算精度が得られない場合がある。たとえば多数回の演算(たとえば、A×B×C)を行うとき、レジスタの大きさがたとえば16ビットと決まっているため、演算を繰り返すにつれて、演算精度が悪くなる。
【0010】
これについて、さらに説明する。CPUバスが16ビツトである場合に、データ長が32ビットであるデータが演算結果として得られるケースを考察する。データ長が16ビットのデータ同士を掛け合わせる演算を行った場合、その演算結果は、データ長が32ビットであるデータとなるが、CPUバスが16ビットである場合には上位16ビットの演算結果しか得ることができない。ここでさらに、この演算結果に16ビットのデータを掛けた場合、下位16ビットのデータは演算に用いられないために演算の精度が悪くなってしまうという問題がある。
【0011】
特許文献1に記載の技術では、演算の精度をあげるために、倍精度演算を用いている。倍精度演算を用いると、演算の精度は単精度演算に比べてよくなる。しかし、倍精度演算は、単精度演算に比べて演算回数が増えるため、演算速度が低下する。
【0012】
演算の精度が悪くなってしまうという問題は、固定小数点表現において、CPUバスが16ビツトである場合に、16ビット未満の桁数が指定される場合にも生じる。たとえば、桁数が15ビットのデータ(以下ではこのデータを「Q15のデータ」と呼ぶ)同士の掛け算を行った場合、上位2ビットが「00」である32ビットのデータが演算結果として得られる。32ビットのデータの上位16ビットが演算処理の途中結果として出力される。この16ビットのデータの上位2ビットは「00」である。
【0013】
しかし、上位16ビットの最上位ビットは不必要なため、演算結果を1ビット左にシフトする。このとき左シフトにより上位16ビットの最下位ビットに、下位16ビットの最上位ビットが入るべきであるが、計算の過程で下位16ビットは廃棄しているため、左シフトによって下位16ビットの最上位ビットが入ることはない。
【0014】
同様に、Q14のデータ(桁数が14ビットのデータ)同士、Q13のデータ(桁数が13ビットのデータ)同士の掛け算を行った時にも、計算の過程で左シフトを2ビット、3ビットと行う。この時にも同様に下位16ビットから、2ビット、3ビットのシフトは行われない。よってこのシフトされる分だけ精度が悪くなってしまうという問題点がある。
【0015】
また、CPUバスが16ビツトである16ビットマイコンの中には従来、16ビットであるデータ同士の掛け算を行った場合に、演算の結果である32ビットのデータを上位16ビット、下位16ビットをそれぞれ別々のレジスタに格納するものもある。すなわち下位16ビットを廃棄しないものもある。この場合は、演算の精度は保つことができる。しかし、この場合にはタスクが切り替わる際に、上位16ビットと下位16ビットを両方とも、それぞれレジスタからメモリに格納することが必要になるため、タスクの切替えに時間がかかるという問題がある。
【0016】
本発明はこのような課題に鑑み、倍精度演算に比べて、演算回数が少なく、タスクの切替え時間を増加させずに、かつ演算精度が向上した演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【0017】
本発明は上述の課題を解決するために、演算処理に関するデータを保持するデータ保持手段と、演算処理装置の状態に関する情報を保持する状態情報保持手段とを含み、少なくともタスクを切り換える際に、データおよび情報は、データ保持手段および状態情報保持手段から外部の記憶手段に退避される演算処理装置において、状態情報保持手段は、演算処理の結果得られたデータの一部を保持し、保持されるデータは、演算処理の結果得られたデータのうち、データ保持手段に保持されない下位桁のデータの少なくとも一部であり、装置は、状態情報保持手段に一部のデータを保持させる手段と、状態情報保持手段から一部のデータを出力させる手段とを含むことを特徴とする。
【0018】
本発明によれば、状態情報保持手段は、演算処理の結果得られたデータのうち、データ保持手段に保持されない下位桁のデータの少なくとも一部を廃棄することなく、保持するため、このデータを用いて演算精度を上げることができる。さらに、状態情報保持手段が下位桁のデータを保持するため、下位桁のデータ保持用に新たにデータ保持手段を追加する必要がない。
【0019】
さらに、従来からデータ退避の対象である状態情報保持手段を用いるため、タスクの切替え時に、退避させなければならないデータ量が実質的に増加することがなく、タスクの切替え時間が増加しない。また、従来のような倍精度演算を行っているわけではないため、使用するレジスタの数が少なく、演算回数が倍精度演算よりも少なくなる。
【0020】
本発明においては、演算処理の結果得られたデータは、データ保持手段が保持可能なデータ長を超えるデータ長を有し、データ保持手段は、このデータのうち、データ保持手段が保持可能なデータ長分の上位桁のデータを保持し、状態情報保持手段には、データ保持手段に保持されない下位桁のデータの最上位ビットからnビット分のデータが保持されるようにすることができる。
【0021】
また、固定小数点演算等において、CPUバスのビット数より少ない桁数が指定された場合、データ保持手段は、演算処理の結果得られたデータのうち、データ保持手段が保持可能なデータ長より少ないデータ長の上位桁のデータを保持し、状態情報保持手段には、データ保持手段に保持されない下位桁のデータの最上位ビットからnビット分のデータが保持されるようにする。
【0022】
なお、状態情報保持手段がプログラムステータスレジスタである場合は、nビット分のデータを、プログラムステータスレジスタの空き領域である予約領域に保持することが好ましい。
【発明の効果】
【0023】
本発明によれば、倍精度演算に比べて、演算回数が少なくなり、割込み発生時やタスクスイッチング時のレジスタ退避の処理負担を軽減し、また演算の精度を向上させることができる。
【発明を実施するための最良の形態】
【0024】
次に添付図面を参照して本発明による演算処理装置の実施例を詳細に説明する。本発明による演算処理装置の実施例は、情報処理装置であるマイクロコントローラに含まれるものであり、CPUバスは16ビットである。なお、本発明は、16ビットに限られるものではなく、CPUバスは32ビット、64ビット等が可能である。
【0025】
演算処理装置は、演算処理に関するデータを保持する16ビットの複数の汎用レジスタと、演算処理装置の状態に関する情報を保持するステータスレジスタとを含み、割込処理およびタスクを切り換える際に、データおよび情報を、情報処理装置内のハードディスクに退避させる。
【0026】
ステータスレジスタは、演算処理の結果得られたデータの一部を保持し、保持されるデータは、演算処理の結果得られたデータのうち、汎用レジスタに保持されない下位桁のデータの少なくとも一部である。演算処理装置は、図示しない制御部を含み、制御部は、ステータスレジスタに当該一部のデータを保持させるとともに、ステータスレジスタから当該一部のデータを出力させる。制御部は、マイクロコントローラの図示しないメモリに格納されたプログラムを解釈して(デコードして)、汎用レジスタ、ステータスレジスタ、演算器、メモリ間のデータの入出力を制御し、演算器に所定の演算を指示する。演算器としては、後述する乗算器、ALU等がある。
【0027】
本実施例では、16ビットのデータ同士の乗算を行う。乗算の結果得られたデータは、32ビットであり、汎用レジスタが保持可能なデータ長である16ビットを超える。汎用レジスタは、32ビットのデータのうち、汎用レジスタが保持可能な16ビット分の上位桁のデータを保持する。ステータスレジスタには、汎用レジスタに保持されない下位桁の16ビットのデータのうち、最上位ビットからnビット分のデータが保持される。
【0028】
nの値は、本実施例では、1〜16の間の値を取る。たとえば、5である。nの値は、製品出荷時に固定することができ、また、固定せずに、ユーザが任意の値に指定することができるようにしてもよい。
【0029】
図1(a)に、本発明のステータスレジスタ10の構成を示す。ステータスレジスタ10に、領域C1〜Cnを、従来は予約ビットであった領域に設ける。領域C1〜Cnには、16ビットのデータ同士の演算によって得られた32ビットの演算結果の下位16ビットの最上位からnビットの値を格納する。予約ビットは従来、使用されていなかった部分である。図1において左端のビットが、最上位ビット(MSB: Most Significant Bit)であり、右端のビットが、最下位ビット(LSB: Least Significant Bit)である。図1(a)では、最上位ビットから数えて所定のビット数分の予約ビット12があり、下位4ビットは、それぞれキャリフラグC、サインフラグS、ゼロフラグZ、および割込み制御フラグEである。予約ビット12の各ビットは、値「0」で固定されている。
【0030】
図1(b)に、比較例として、領域C1〜Cnを設けていないステータスレジスタ14の構成を示す。最上位ビットから数えて所定のビット数分の予約ビット16があり、下位4ビットは、それぞれキャリフラグC、サインフラグS、ゼロフラグZ、および割込み制御フラグEである。
【0031】
図2は、本実施例の演算処理の概要を示す説明図である。本実施例では、3個のデータA, B, Fの積A×B×Fを求める。データA, B, Fは、いずれも16ビットとする。本実施例では、最初に積A×B(=D)を求める。次に、32ビットである積A×Bの上位16ビット(D2)とデータFとの積G、および積A×Bの下位16ビットのうちのnビット(D1)とデータFとの積19をそれぞれ求める。そして、これらの積G, 19の和を、積A×B×Fとして出力する。これらの演算を行うために、本実施例の演算処理装置は、レジスタX, Y, ZA, ZB, T、乗算器、算術論理演算装置等を有する。レジスタX, Y, ZA, ZB, T、乗算器、算術論理演算装置の詳細については、後述する。
【0032】
さらに演算処理の概要を説明する。最初に、レジスタX, Yにそれぞれ保持した16ビットのデータAと、16ビットのデータBを掛け合わせて、32ビットのデータDを得る。このときCPUバス幅が16ビットであるため、実際にはデータDの上位16ビットD2を計算結果としてレジスタXに保持する。またデータDの下位16ビットの最上位ビットからnビット分D1だけをステータスレジスタ10の領域Cl〜Cnに保持する。
【0033】
次のステップでは、データDの上位16ビットD2に、レジスタYに保持した16ビットのデータFを掛けて、32ビットのデータG(=F×D2)を得る。データGの上位16ビットG2は、レジスタZAに保持し、データGの下位16ビットG1は、レジスタTに保持する。
【0034】
一方、データD1と、レジスタYに保持した16ビットのデータFを掛けて、32ビット以下のデータ(=F×D1)を得る。すなわちF/2×Cn+〜+F/2n×C1 という演算を行う。得られたデータのうち、上位16ビットのデータG3のみをレジスタZBに保持する。その後、レジスタTのデータG1と、レジスタZBのデータG3を加算し、得られた和G4に、レジスタZAのデータG2をさらに加算して、和G5を求める。和G5が積A×B×Fである。
【0035】
レジスタX, Y, T, ZA, ZBはいずれも汎用レジスタである。動作中に、割込みが発生したり、タスクが切り替わった際には、従来と同様に、汎用レジスタおよびステータスレジスタの値を保存する。
【0036】
このように、本実施例では、積A×Bの上位16ビットとデータFとの積を求め、積A×Bの下位16ビットのうちのnビットとデータFとの積を求め、これらの積を加算することとしているため、積A×Bの下位16ビットを考慮しない方式に比べて計算精度が向上する。
【0037】
ここで、比較例として、積A×Bの下位16ビットを考慮しない方式を図3により説明する。図3は、比較例の演算処理の概要を示す説明図である。比較例でも、3個のデータA, B, Fの積A×B×Fを求める。データA, B, Fは、いずれも16ビットである。比較例では、32ビットである積D(=A×B)の上位16ビットD2とデータFとの積は求めるが、積A×Bの下位16ビットD3は、いずれのレジスタにも保持されず、失われる。そのため、積A×Bの下位16ビットD3とデータFとの積が無視され、計算精度が、本実施例より低下する。すなわち、演算するときに、積Dの下位16ビットが反映されないために誤差が生じてしまう。最終結果の最下位ビットに、積Dの下位16ビットがまったく反映されておらず、比較例の処理は、下位16ビットの四捨五入等ではなく、下位16ビットの切り捨てである。
【0038】
次に、本実施例を、図4, 5により詳細に説明する。図4は、演算処理装置18の構成を示すブロック図であり、図5は、そのタイミングチャートである。演算処理装置18は、図示しないシステムクロック信号に同期した演算周期(サイクル)で演算処理を行う。最初に、図示しないCPUバスにそれぞれ接続された信号線20, 22を介してレジスタX 21, レジスタY, 23に、それぞれ16ビットのデータAと16ビットのデータBが、データA、データBの順に、図示しない外部のメモリから転送される。データAはサイクル1、データBはサイクル2で転送される。レジスタX 21, レジスタY, 23は、転送されたデータA, Bを保持する。
【0039】
図4において、信号線を示す参照符号の後に記載された括弧内の符号は、当該信号線を介して転送されるデータを示す。括弧内の符号が複数ある場合は、複数のデータが、順次、当該信号線を介して転送されることを示す。たとえば、信号線22の(B, F)は、データBが転送された後に、データFが転送されることを示す。ただし、データBとデータFが連続したサイクルで転送されるとは限らない。転送のタイミングについては、図5による。
【0040】
レジスタX, Yにそれぞれ保持した16ビットのデータA, Bは、信号線24, 26を介して乗算器A 28に送られる。乗算器A 28では、サイクル3において、データAとデータBを掛け合わせて、32ビットのデータD(=A×B)を得る。このときCPUバス幅が16ビットであるため、実際にはデータDの上位16ビットD2を計算結果として、信号線30を介してサイクル4でレジスタX 21に送り、レジスタX 21は、データD2を保持する。
【0041】
このサイクル4では、データDの下位16ビットの最上位ビットからnビット分のデータD1だけを、信号線32を介してステータスレジスタ10に送る。データD1はステータスレジスタ10の予約ビットCl〜Cnに保持される。また、レジスタY 23に、CPUバスおよび信号線22を介してデータFが転送される。
【0042】
サイクル5では、データDの上位16ビットのデータD2、および、レジスタY 23に保持した16ビットのデータFが、信号線24, 26を介して乗算器A 28に送られて、乗算器A 28では、データD2とデータFを掛けて32ビットのデータG(=F×D2)を得る。サイクル6において、データGの上位16ビットのデータG2は、信号線34を介してレジスタZA 35に転送され、レジスタZA 35はデータG2を保持する。データGの下位16ビットG1は、信号線36を介してレジスタT 37に転送され、レジスタT 37はデータG1を保持する。
【0043】
一方、サイクル5では、データD1と、レジスタY 23に保持した16ビットのデータFが、信号線38, 40を介して乗算器B 42に送られて、乗算器B 42では、データD1とデータFを掛けて、32ビット以下のデータ(=F×D1)を得る。すなわちF/2×Cn+〜+F/2n×C1 という演算を行う。サイクル6において、得られたデータのうち、上位16ビットのデータG3のみを、信号線44を介してレジスタZB 46に転送し、レジスタZB 46はデータG3を保持する。
【0044】
サイクル7において、レジスタT 37のデータG1と、レジスタZB 46のデータG3は、信号線48, 50を介してALU 52に送られ、ALU 52は、これらを加算し、データG4を得る。サイクル8においてデータG4は、信号線54を介してレジスタZB 46に送られる。レジスタZB 46はデータG4を保持する。
【0045】
サイクル9において、レジスタ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を介して、外部に出力される。
【0046】
以上のように本実施例によれば、ステータスレジスタに設けた領域Cl〜Cnを用いて、従来は削除されてしまう情報を確保することにより、精度のよい結果が得られる。
【0047】
また、本実施例によれば、次のような効果もある。領域Cl〜Cnを用いずに、16ビット同士の掛け算での演算結果である32ビットのデータを、上位16ビット、下位16ビットに分けて別々の汎用レジスタに格納する方式を採用した場合、割込み発生時やタスク切替え時に、汎用レジスタに保持された下位16ビットをメモリ上に別に格納する必要がある。したがって、格納するための時間が別に必要である。一方、本発明による実施例では領域Cl〜Cnが、従来から保存しなければならないステータスレジスタにある。そのため、別途下位16ビットを格納する必要がない。このため下位16ビットを保存するために要する時間を削減することができ、タスクの切替え等に要する時間を短縮することができる。
【0048】
次に、本発明の別の実施例について説明する。本実施例は、固定小数点表現において、たとえばCPUバスが16ビツトである場合に、16ビット未満の桁数が指定される場合に、演算の精度を改善するものである。本発明の実施例の説明を行う前に、比較例として、本実施例と比較として、演算の精度が悪い方式の説明を図6により行う。
【0049】
レジスタX, Yに保持された桁数が15ビットのデータ(Q15)同士の掛け算を行う場合を考える。このとき、レジスタX, Yの最上位ビットの値は、「0」である。レジスタX, Yに保持されたデータ同士の掛け算を行うと、上位2ビットが「00」である32ビットのデータ64が演算結果として得られる。32ビットのデータ64の上位16ビットのデータ66が、演算処理の途中結果としてレジスタZAに出力される。この16ビットのデータの上位2ビットは「00」である。下位16ビットのデータ68は、このときに廃棄される。
【0050】
上位16ビットのデータ66の最上位ビットは不必要なため、演算結果を1ビット左にシフトする。最下位ビットには「0」が入る。こうして最終結果がレジスタZBに求まる。このとき左シフトにより上位16ビットの最下位ビットに、下位16ビットのデータ68の最上位ビットが入るべきである。しかし、計算の過程で下位16ビットは廃棄しているため、左シフトによって下位16ビットの最上位ビットが入ることはない。Q14×Q14、Q13×Q13、〜の場合にはシフトされる桁数が増えるため、それに対応して誤差が増える。
【0051】
データ68は、固定少数点演算において失われてしまう情報であり、計算結果を求める課程で行われるシフトにおいて、データ68の最上位ビットの値が反映されない。本発明では、データ68の最上位ビットをステータスレジスタに保持し、計算に用いる。この分だけ計算の精度が上がる。なお、本発明では、Q14×Q14、Q13×Q13、〜の場合にはシフトされる桁数を、2桁、3桁、〜と増やす。
【0052】
図7は、本発明の実施例の演算処理の概要を示す説明図である。レジスタXに保持されたQ15のデータと、レジスタYに保持されたQ15のデータの掛け算を行うと、乗算器により32ビットのデータ70が得られる。CPUバスの幅が16ビットであるために、上位16ビットのデータ72のみがレジスタZAに保持される。このときに下位ビットのデータ74のうち、最上位ビットからnビット分D1を、ステータスレジスタ10の領域C1〜Cnに保持する。
【0053】
乗算器により得られたデータ70の上位16ビットの最上位ビット76は不必要なため、レジスタZAの値を1ビット左にシフトする。このときにステータスレジスタ10に確保された領域Cnの値を下位からシフトする。実際には本実施例では、レジスタZAの値を1ビット左にシフトした後、ステータスレジスタ10に確保された領域Cn〜C1の値を、数の大きさを考慮して加算する。データ74は、従来は失われていた情報であるが、領域Cnの分だけ計算結果の精度が上がる。
【0054】
同様にQ14、Q13、〜の演算を行った時にも、計算の過程で下位からシフトする量を変える。Q14×Q14、Q13×Q13、の場合には、シブトされる桁数が増えるため、それに対応した桁数だけステータスレジスタから値を取る。なお本実施例でも、動作中にタスクが切り替わった際には、従来と同様にステータスレジスタの値を保存する。
【0055】
次に、本実施例を、図8, 9により詳細に説明する。図8は、演算処理装置78の構成を示すブロック図であり、図9は、そのタイミングチャートである。図4, 5と同様の装置については同一の符号を付す。演算処理装置78は、図示しないシステムクロック信号に同期した演算周期(サイクル)で演算処理を行う。
【0056】
最初に、図示しないCPUバスにぞれぞれ接続された信号線20, 22を介してレジスタX 21, レジスタY 23に、それぞれ16ビットのデータAとデータBが、データA、データBの順に、図示しない外部のメモリから転送される。データAはサイクル1、データBはサイクル2で転送される。レジスタX 21, レジスタY 23は、転送されたデータA, Bを保持する。図8において、信号線を示す参照符号の後に記載された括弧内の符号は、図4と同じ意味を持つ。
【0057】
レジスタX 21, レジスタY 23にそれぞれ保持した16ビットのデータAとデータBは、信号線24, 26を介して乗算器80に送られる。乗算器80では、サイクル3において、データAとデータBを掛け合わせて、32ビットのデータD(=A×B)を得る。このときCPUバス幅が16ビットであるため、実際にはデータDの上位16ビットD2を計算結果として、信号線34を介してサイクル4でレジスタZA 35に送り、レジスタZA 35は、データD2を保持する。
【0058】
このサイクル4では、データDの下位16ビットの最上位ビットからnビット分のデータD1だけを、信号線32を介してステータスレジスタ10に送る。データD1はステータスレジスタ10の領域Cl〜Cnに保持される。
【0059】
サイクル5では、データDの上位16ビットのデータD2が、信号線56を介して算術論理演算装置82に送られて、1ビット左にシフトする。得られたデータD3は、信号線84を介してサイクル6でレジスタZA 35に送られる。レジスタZA 35は、データD3を保持する。
【0060】
レジスタZA 35に保持されたデータD3と、ステータスレジスタ10に保持されたデータD1は、信号線56, 86を介して算術論理演算装置82に送られる。算術論理演算装置82では、サイクル7において、データD3とデータD1を加算して、16ビットのデータIを得る。サイクル8においてデータIは、信号線88を介してレジスタZB 46に送られる。レジスタZB 46はデータIを保持する。データIは、その後、CPUバスに接続された信号線90を介して、外部に出力される。
【0061】
以上のように、本実施例によれば、ステータスレジスタに設けた領域Cl〜Cnを用いて、本来であれば削除されてしまう情報を確保することにより、正しい演算結果を得ることができる。また、最初の実施例と同様に、次の効果もある。16ビット同士の掛け算の演算結果である32ビットのデータを、上位16ビット、下位16ビットに分けて、別々のレジスタに格納する方式では、タスク切替え時等に下位16ビットを、メモリ上に別途、格納する必要が生じる。そのため、格納するための時間が、別途、必要となる。一方、本発明による実施例では、領域Cl〜Cnが、従来から保存しなければならないステータスレジスタにあるため、別途下位16ビットをメモリに格納する必要がない。このため、この保存に要する時間を削除することができ、タスクの切替え等に要する時間を短縮することができる。
【0062】
以上の実施例では、乗算、シフト演算を例として、演算により得られた32ビットの演算結果の下位16ビットの最上位からnビットの値を演算に用いて、演算の精度を上げるマイクロコントローラなどの情報処理装置を開示したが、本発明はこれらの演算に限られるものではない。汎用レジスタのレジスタ長を超える有効データ長を有する演算結果が得られる演算の下位データを考慮すると、演算の精度が上がるすべての演算に適用可能である。そして、そのような演算を行うすべての演算処理装置および情報処理装置に適用可能である。
【図面の簡単な説明】
【0063】
【図1】図1は、ステータスレジスタの構成を示す説明図である。
【図2】図2は、本発明の実施例の演算処理の概要を示す説明図である。
【図3】図3は、比較例の演算処理の概要を示す説明図である。
【図4】図4は、本発明の演算処理装置の構成を示すブロック図である。
【図5】図5は、図4の演算処理装置のタイミングチャートを示す。
【図6】図6は、別の比較例の演算処理の概要を示す説明図である。
【図7】図7は、本発明の別の実施例の演算処理の概要を示す説明図である。
【図8】図8は、本発明の別の実施例の演算処理装置の構成を示すブロック図である。
【図9】図9は、図8の演算処理装置のタイミングチャートを示す。
【符号の説明】
【0064】
10, 14 ステータスレジスタ(PSR)
21 レジスタX
23 レジスタY
28 乗算器A
42 乗算器B
52, 82 算術論理演算装置(ALU)
80 乗算器
C1〜Cn 領域
C キャリフラグ
S サインフラグ
Z ゼロフラグ
E 割込み制御フラグ

【特許請求の範囲】
【請求項1】
演算処理に関するデータを保持するデータ保持手段と、演算処理装置の状態に関する情報を保持する状態情報保持手段とを含み、少なくともタスクを切り換える際に、前記データおよび前記情報は、前記データ保持手段および前記状態情報保持手段から外部の記憶手段に退避される演算処理装置において、
前記状態情報保持手段は、演算処理の結果得られたデータの一部を保持し、該保持されるデータは、該演算処理の結果得られたデータのうち、前記データ保持手段に保持されない下位桁のデータの少なくとも一部であり、
該装置は、前記状態情報保持手段に該一部のデータを保持させる手段と、該状態情報保持手段から該一部のデータを出力させる手段とを含むことを特徴とする演算処理装置。
【請求項2】
請求項1に記載の演算処理装置において、
前記演算処理の結果得られたデータは、前記データ保持手段が保持可能なデータ長を超えるデータ長を有し、
該データ保持手段は、該データのうち、該データ保持手段が保持可能なデータ長分の上位桁のデータを保持し、
前記状態情報保持手段には、該データ保持手段に保持されない下位桁のデータの最上位ビットからnビット分のデータが保持されることを特徴とする演算処理装置。
【請求項3】
請求項1に記載の演算処理装置において、
前記データ保持手段は、前記演算処理の結果得られたデータのうち、該データ保持手段が保持可能なデータ長より少ないデータ長の上位桁のデータを保持し、
前記状態情報保持手段には、該データ保持手段に保持されない下位桁のデータの最上位ビットからnビット分のデータが保持されることを特徴とする演算処理装置。
【請求項4】
請求項1から3までのいずれかに記載の演算処理装置において、前記データ保持手段は汎用レジスタであり、前記状態情報保持手段はプログラムステータスレジスタであることを特徴とする演算処理装置。
【請求項5】
請求項4に記載の演算処理装置において、前記プログラムステータスレジスタは、前記nビット分のデータを、該プログラムステータスレジスタの空き領域である予約領域に保持することを特徴とする演算処理装置。
【請求項6】
演算処理の中間結果または最終結果であるデータを保持する複数のレジスタを含み、該レジスタが保持するデータは、少なくともタスクを切り替える際に、メモリに一時的に保存され、該レジスタの1つは、前記演算処理結果により決まるフラグを少なくとも格納するプログラムステータスレジスタである情報処理装置において、
該プログラムステータスレジスタは、前記他のレジスタのうちの少なくとも1つのレジスタのレジスタ長を超えるデータ長を有する前記データのうち、該他のレジスタに保持されない下位桁のデータの最上位ビットからnビット分のデータを保持するための保持領域を有し、
該情報処理装置は、該保持領域に前記nビット分のデータを保持させる手段と、該保持領域から該保持されたデータを出力させる手段とを含むことを特徴とする情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2007−72857(P2007−72857A)
【公開日】平成19年3月22日(2007.3.22)
【国際特許分類】
【出願番号】特願2005−260581(P2005−260581)
【出願日】平成17年9月8日(2005.9.8)
【出願人】(000000295)沖電気工業株式会社 (6,645)
【Fターム(参考)】