(57)【要約】【課題】プロセッサ上のレジスタのダイナミックレンジを拡大する演算方法および演算回路を提供する。【解決手段】演算方法において、演算器４とアキュムレータ１とによりプロセッサの演算を実行する手順と、制御回路により演算器４のキャリー信号と演算器４へのデータバス２からの入力データの符号信号に規則的に応じてアップダウンカウンタ５の内容をアキュムレータ１の内容と組み合わせて正しい値になるように制御する制御信号をアップダウンカウンタ５に出力する手順と、アキュムレータ１によりアキュムレータ１の値をデータバス２と演算器４に出力する手順と、アップダウンカウンタ５によりアキュムレータ１の許容範囲を超えた正しい値の上位部分の値を有するアップダウンカウンタ５の値をデータバス２に出力する手順と、からなる。【選択図】　図１
2004013519.tif 000002
【特許請求の範囲】
【請求項１】
演算方法において、演算器とアキュムレータとによりプロセッサの演算を実行する手順と、制御回路により前記演算器のキヤリー信号と前記演算器へのデータバスからの入力データの符号信号とに規則的に応じてアップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する手順と、前記アキュムレータにより前記アキュムレータの値を前記データバスと前記演算器に出力する手順と、前記アップダウンカウンタにより前記アキュムレータの内容と組み合わせて正しい値となるように制御信号に基づいて制御する前記アップダウンカウンタの値を前記データバスに出力する手順と、からなることを特徴とする演算方法。
【請求項２】
演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のキャリー信号と前記演算器への前記データバスからの前記データの符号信号とに規則的に応じてアップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する制御回路と、前記制御回路から出力される制御信号によって自らの内容を正しい値の上位部分の値にさせ、その内容を前記アキュムレータの許容範囲の値と組み合わせて正しい値となる値として前記データバスに出力するアップダウンカウンタと、からなることを特徴とする演算回路。
【請求項３】
演算器とアキュムレータとによりプロセッサの演算を実行する手順と、制御回路により前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じて、アップダウンカウンタの内容をオーバーフロー回数値とする手順と、前記アキュムレータにより前記アキュムレータの値をデータバスと前記演算器に出力する手順と、補正回路により前記アップダウンカウンタの値を補正時の前記アキュムレータの値の前記符号信号に規則的に応じてその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する手順と、前記アップダウンカウンタにより制御回路から出力される制御信号によって自らの内容をオーバーフローの回数にさせ、その内容を前記アキュムレータの許容範囲を超えたオーバーフローの回数値として前記データバスまたは前記補正回路に出力する手順と、からなることを特徴とする演算方法。
【請求項４】
演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じてアップダウンカウンタの内容をオーバーフローの回数になるように制御信号を前記アップダウンカウンタに出力する制御回路と、前記制御回路から出力される制御信号によって自らの内容を前記オーバーフローの回数値にさせ、その内容を前記データバスまたは補正回路に出力する前記アップダウンカウンタと、前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号に従って、内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する前記補正回路と、からなることを特徴とする演算回路。
【請求項５】
プロセッサにより複数のアップダウンカウンタ及び複数のアキュムレータを重複しないで組として選択する手順と、演算器と前記アキュムレータとにより前記プロセッサの演算を実行する手順と、制御回路により前記演算器のキヤリー信号と前記演算器へのデータバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する手順と、前記アキュムレータにより前記アキュムレータの値を前記データバスと前記演算器に出力する手順と、前記アップダウンカウンタにより前記アキュムレータの内容と組み合わせて正しい値となるように制御信号に基づいて制御する前記アップダウンカウンタの値を前記データバスに出力する手順と、からなることを特徴とする演算方法。
【請求項６】
重複しないで複数の内の１つのアップダウンカウンタと組となり、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に選択的に出力する複数のアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のキヤリー信号と前記演算器の前記データバスからの前記データの符号信号に規則的に応じて前記アップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する制御回路と、前記アキュムレータと組となり、前記制御回路から出力される制御信号によって自らの内容を前記正しい値の上位部分の値にさせ、その内容を前記アキュムレータの許容範囲の値と組み合わせて正しい値となる値として前記データバスに選択的に出力する複数の前記アップダウンカウンタと、からなることを特激とする演算回路。
【請求項７】
プロセッサにより複数のアップダウンカウンタ及び複数のアキュムレータを重複しないで組として選択する手順と、演算器と前記アキュムレータとにより　前記プロセッサの演算を実行する手順と、制御回路により前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号とに規則的に応じて、前記アップダウンカウンタの内容をオーバーフロー回数値とする手順と、前記アキュムレータにより　複数のアキュムレータの値をデータバスおよび前記演算器に出力する手順と、前記アップダウンカウンタにより制御回路から出力される制御信号で自らの内容をオーバーフローの回数にさせ、その内容を前記アキュムレータの許容範囲を超えたオーバーフローの回数値として前記データバスまたは補正回路に出力する手順と、前記補正回路により前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号に規則的に応じてその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、その補正した内容を前記データバスに出力する手順と、からなることを特徴とする演算方法。
【請求項８】
重複しないで複数の内の１つのアップダウンカウンタと組となり、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じて前記アップダウンカウンタの内容をオーバーフローの画数値になるように制御信号を前記アップダウンカウンタに出力する制御回路と、前記アキュムレータと組となり、前記制御回路から出力される制御信号によって自らの内容を前記オーバーフローの回数値にさせ、その内容を補正回路または前記データバスに出力する複数の前記アップダウンカウンタと、前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号にしたがってその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する補正回路と、からなることを特徴とする演算回路。
【請求項９】
請求項１、３、５および７のいずれか１項記載の演算方法において、前記制御信号を、前記演算器のキヤリー信号と前記演算器への前記データバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を＋１、無変化および−１のいずれか１つにする前記制御信号としたことを特徴とする演算方法。
【請求項１０】
請求項２、４、６および８のいずれか１項記載の演算回路において、前記制御信号を、前記演算器のキャリー信号と前記演算器への前記データバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を＋１、無変化および−１のいずれか１つにする制御信号としたことを特徴とする演算回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサの演算回路に関し、特にハードウエアの増加を最小に抑え、コストを増加させることなくプロセッサの演算のダイナミックレンジを増大させる演算回路および演算方法に関する。
【０００２】
【従来の技術】
プロセッサ上のデータ演算は、レジスタ、データバス及びメモリアレイを使用して実行される。大部分のプロセッサはアキュムレータと呼ばれる１個以上のレジスタを有する。アキュムレータ・レジスタ（以下、「アキュムレータ」という。）は、プロセッサの算術及び論理演算を実行する装置である。
【０００３】
演算時、データはプロセッサのメモリから読み出され、アキュムレータに記憶される。それから、加算（ＡＤＤ）や減算（ＳＵＢＴＲＡＣＴ）指令に基づく演算がアキュムレータを用いて実行される。これらの演算後に、結果がアキュムレータに記憶される。このとき、メモリの内容は変化しないままである。
【０００４】
【発明が解決しようとする課題】
ＤＳＰ（ＤＳＰ：Ｄｉｇｉｔａ１　Ｓｉｇｎａｌ　Ｐｒｏｃｅｓｓｏｒ）など多くのプロセッサでは、信号処理計算などで累積演算（以下、「累算」という。）を行う場合、レジスタでのオーバーフローの問題がある。
【０００５】
状態評価器やカルマン・フィルタに用いられているような多くの被制御アルゴリズムで、アキュムレータの累算された結果がレジスタの範囲を超えて、レジスタ・オーバーフローを発生する場合がある。例えば、３２ビット・アキュムレータは３２ビット・レジスタの最大正値又は最大負値を超える結果を有する場合がある。このオーバーフローを収容するため、現在のビット・サイズを越えてレジスタを拡張し、そのダイナミックレンジを拡大することも可能である。
【０００６】
しかしながら、アキュムレータの元のビット・サイズに対して書かれた命令とコードは、この新たなダイナミックレンジにしたアキュムレータのビット・サイズとは適合しない。従って、両者で同じ数値演算は保持されず、レジスタのキヤリとオーバーフロー・フラッグに対する効果はダイナミックレンジを拡張した場合としなかった場合で異なる。
【０００７】
レジスタの範囲を物理的に拡張する代わりに浮動小数点演算を実装してもよいが、これらの演算は更なる命令とソフトウェア・コードを必要とする。さらに、以上の解決方法は全て、より多くのシリコン、即ちハードウエアを必要とし、プロセッサ上に実装するために費用がかかる。
【０００８】
以上のことから、より多くのシリコンを必要とせず、又はコストを増大せずに、プロセッサ上のレジスタのダイナミックレンジを拡大する方法の必要性が認められる。
【０００９】
関連技術を示す特開２０００−３５８７５号公報では、以上の問題を解決する方法として、アキュムレータにアップダウンカウンタ（特開２０００−３５８７５号公報では「オーバーフロー・カウンタ」）を設ける方法を開示している。「オーバ−フロー・カウンタ」はアキュムレータのオーバーフロー信号をカウントするレジスタであり、累算の途中の結果がアキュムレータの使用ビット数内の正しい値を表す許容範囲内に収まっていないときに前記許容範囲内の所定値以外の値を有するように機能する。特開２０００−３５８７５号公報は、この「オーバーフロー・カウンタ」を設けることで、従来大量に必要であった半導体集積回路のゲート量すなわちシリコン量を増加させることなく、アキュムレータのダイナミックレンジの拡大を実現している。
【００１０】
しかしながら、特開２０００−３５８７５号公報による方法では以下の問題がある。
【００１１】
▲１▼累計演算が終了した時点での最終演算結果の正当性の問題：
累計演算が終了した時の結果が、アキュムレータの使用ビット数の許容範囲に収まっている場合は正しい値を得られるが、アキュムレータの前記許容範囲に収まっていない場合、即ち、正のオーバーフローまたは負のオーバーフローが発生した場合、アキュムレータの演算範囲を前記許容範囲内の正の最大値または負の最大値に蝕和させる処理をするため、正しい値が得られない。
【００１２】
具体的にはアキュムレータが１６ビットの場合、累算の結果が−２１５より小さいときは−２１５に、累算の結果が２１５−１より大きいときは２１５−１として演算結果を飽和させる。このため、真の（１６ビット以上の）データを得ることができない。
【００１３】
図９を用いて詳細に説明する。
【００１４】
図９に示すように、累算スタートからの実際の累積演算の経過が実線のとおりの場合、アキュムレータの内容はアキュムレータの許容範囲を推移し、一旦オーバーフローを経由してアキュムレータの許容範囲に戻ってくる。その後、再度オーバーフローに進み累算を終了する。
【００１５】
従来の演算回路の動作は、図９において、累算値が２１５−１より大きいときは２１５−１として演算結果を飽和させる。その後、累算値が減少を始めると、アキュムレータの内容がＰ点から減少を始め、実線に倣って鎖線のように減少する。その後、実線の演算経過に倣って同様に動作する。この結果、この従来の演算回路はオーバーフローが発生すると、最終累算値が実際の累算値と違ったものになる欠点があった。
【００１６】
上記特開２０００−３５８７５号公報の例の場合はアキュムレータの累算値が２１５−１より小さいときは従来の演算回路と同じであるが、アキュムレータの累算値が２１５−１以上となった場合も正しい値を保持し続ける点が異なっている。しかし、累算終了時に累算結果がアキュムレータの許容範囲を超えていた場合（図９のＡ点）、演算結果は飽和されて出力する（図９のＣ点）。この結果、正しい値と出力値にはＡ−Ｃの差が発生し、正しい値が得られない欠点が存在した。
【００１７】
▲２▼複数の変数を同時に演算する場合の問題：
独立した複数の変数に対して交互に演算を行う必要がある場合、特開２０００−３５８７５号公報による方法では毎回、アキュムレータの拡張部分が入っているカウンタの値（「オーバーフロー・カウンタ」の値）を待避する必要がある。この待避のための操作がオーバヘッドとなり高速に演算ができない問題がある。
【００１８】
このような問題の発生する累算には、複素数の累算がある。複素数の累算では実数側の変数と虚数側の２つの変数を独立に交互に行う必要がある。例えば、実数側の変数の演算から虚数側の変数の演算に切り替えるとき、実数側の値を保持していたカウンタの内容を退避する処理が必要となり、この処理のためにオーバーヘッドが生じる。
【００１９】
本発明の目的は、従来のレジスタ演算に付随する上記欠点と問題を実質的に除去又は減少させるために、プロセッサ上のレジスタのダイナミックレンジを拡大する演算方法およびそのための演算回路を提供することである。
【００２０】
【課題を解決するための手段】
本発明は、上記目的を達成するために、
（１）　演算方法において、演算器とアキュムレータとにより　プロセッサの演算を実行する手順と、制御回路により　前記演算器のキヤリー信号と前記演算器へのデータバスからの入力データの符　号信号とに規則的に応じてアップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する手順と、前記アキュムレータにより　前記アキュムレータの値を前記データバスと前記演算器に出力する手順と、前記アップダウンカウンタにより　前記アキュムレータの内容と組み合わせて正しい値となるように制御信号に基づいて制御する　前記アップダウンカウンタの値を前記データバスに出力する手順と、からなることを特徴とする。
（２）　演算回路において、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のキャリー信号と前記演算器への前記データバスからの前記データの符号信号とに規則的に応じてアップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する制御回路と、前記制御回路から出力される制御信号によって自らの内容を正しい値の上位部分の値にさせ、その内容を前記アキュムレータの許容範囲の値と組み合わせて正しい値となる値として前記データバスに出力するアップダウンカウンタと、からなることを特徴とする。
（３）　演算方法において、演算器とアキュムレータとにより　プロセッサの演算を実行する手順と、制御回路により　前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じて　、アップダウンカウンタの内容をオーバーフロー回数値とする手順と、前記アキュムレータにより　前記アキュムレータの値をデータバスと前記演算器に出力する手順と、補正回路により　前記アップダウンカウンタの値を補正時の前記アキュムレータの値の前記符号信号に規則的に応じてその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する手順と、
前記アップダウンカウンタにより制御回路から出力される制御信号によって自らの内容をオーバーフローの回数にさせ、その内容を前記アキュムレ一夕の許容範囲を超えたオーバーフローの回数値として前記データバスまたは前記補正回路に出力する手順と、からなることを特徴とする。
【００２１】
（４）　演算回路において、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じてアップダウンカウンタの内容をオーバーフローの回数になるように制御信号を前記アップダウンカウンタに出力する制御回路と、前記制御回路から出力される制御信号によって自らの内容を前記オーバーフローの回数値にさせ、その内容を前記データバスまたは補正回路に出力する前記アップダウンカウンタと、前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号に従って、内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する前記補正回路と、からなることを特徴とする。
【００２２】
（５）　演算方法において、プロセッサにより複数のアップダウンカウンタ及び複数のアキュムレータを重複しないで組として選択する手順と、演算器と前記アキュムレータとにより前記プロセッサの演算を実行する手順と、制御回路により前記演算器のキヤリー信号と前記演算器へのデータバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する手順と、前記アキュムレータにより前記アキュムレータの値を前記データバスと前記演算器に出力する手順と、前記アップダウンカウンタにより前記アキュムレータの内容と組み合わせて正しい値となるように制御信号に基づいて制御する前記アップダウンカウンタの値を前記データバスに出力する手順と、からなることを特徴とする。
【００２３】
（６）　演算回路において、重複しないで複数の内の１つのアップダウンカウンタと組となり、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に選択的に出力する複数のアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のキヤリー信号と前記演算器の前記データバスからの前記データの符号信号に規則的に応じて前記アップダウンカウンタの内容を前記アキュムレータの内容と組み合わせて正しい値になるように制御する制御信号を前記アップダウンカウンタに出力する制御回路と、前記アキュムレータと組となり、前記制御回路から出力される制御信号によって自らの内容を前記正しい値の上位部分の値にさせ、その内容を前記アキュムレータの許容範囲の値と組み合わせて正しい値となる値として前記データバスに選択的に出力する複数の前記アップダウンカウンタと、からなることを特激とする演算回路。
【００２４】
（７）　演算方法において、プロセッサにより　複数のアップダウンカウンタ及び複数のアキュムレータを重複しないで組として選択する手順と、演算器と前記アキュムレータとにより　前記プロセッサの演算を実行する手順と、制御回路により前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号とに規則的に応じて、前記アップダウンカウンタの内容をオーバーフロー回数値とする手順と、前記アキュムレータにより複数のアキュムレ一夕の値をデータバスおよび前記演算器に出力する手順と、前記アップダウンカウンタにより制御回路から出力される制御信号で自らの内容をオーバーフローの回数にさせ、その内容を前記アキュムレータの許容範囲を超えたオーバーフローの回数値として前記データバスまたは補正回路に出力する手順と、前記補正回路により前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号に規則的に応じてその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、その補正した内容を前記データバスに出力する手順と、からなることを特徴とする。
【００２５】
（８）　演算回路において、重複しないで複数の内の１つのアップダウンカウンタと組となり、演算器の演算結果を記憶し、記憶した内容をデータバスと前記演算器に出力するアキュムレータと、前記アキュムレータの内容と前記データバスからのデータの内容を演算する前記演算器と、前記演算器のオーバーフロー信号と前記演算器の演算結果の符号信号に規則的に応じて前記アップダウンカウンタの内容をオーバーフローの画数値になるように制御信号を前記アップダウンカウンタに出力する制御回路と、前記アキュムレータと組となり、前記制御回路から出力される制御信号によって自らの内容を前記オーバーフローの回数値にさせ、その内容を補正回路または前記データバスに出力する複数の前記アップダウンカウンタと、前記アップダウンカウンタの値を補正時の前記アキュムレータの値の符号信号にしたがってその内容を前記アキュムレータの内容と組み合わせて正しい値になるように補正し、補正した内容を前記データバスに出力する補正回路と、からなることを特徴とする。
（９）　上記（１）、（３）、（５）および（７）のいずれか１項記載の演算方法において、前記制御信号を、前記演算器のキヤリー信号と前記演算器への前記データバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を＋１、無変化および−１のいずれか１つにする前記制御信号としたことを特徴とする。
（１０）　上記（２）、（４）、（６）および（８）のいずれか１項記載の演算回路において、前記制御信号を、前記演算器のキャリー信号と前記演算器への前記データバスからの入力データの符号信号に規則的に応じて前記アップダウンカウンタの内容を＋１、無変化および−１のいずれか１つにする制御信号としたことを特徴とする。
【００２６】
【発明の実施の形態】
以下、本発明の実施の形態を図を参照して詳細に説明する。
【００２７】
まず、本発明のダイナミックレンジを拡大する手法について説明する。
【００２８】
累算がアキュムレータの使用ビット数により決まる許容範囲を超えてオーバーフローが発生したとき、アップダウンカウンタには、アキュムレータの許容範囲を越えた累算値の上位部分に相当する正しい値が入っている。また、アキュムレータにはこのアキュムレータの使用ビット数により決まる値、即ち、許容範囲内の累算値の下位部分に相当する値が入っている。したがって累算結果がアキュムレータの許容範囲を越えた場合でも、これら２つのレジスタの値から、最終的な累算値の正しい値を得ることができるようになっている。
【００２９】
また、累算の結果、一旦オーバーフローになっても、そのオーバーフローの間中正しい値を持っている。そのため、オーバーフローの状態で演算が終了しても、正しい値を出力することができるので、先の特開２０００−３５８７５号公報に示された方法のような誤った値を出す不都合が生じない。
【００３０】
（第１実施例）
図１は本発明の第１実施例を示す図である。
【００３１】
この説明ではアキュムレータ、データバス、メモリ、演算器のビット幅を１６ビットとして説明する。また、アップダウンカウンタのビット幅を８ビットとする。即ち、この例では本来１６ビット幅のアキュムレータに対して８ビット分ダイナミックレンジを拡大している。
【００３２】
接続及び各構成部品を説明する。
【００３３】
以下の説明では、図中の同じ機能を持つ部品に対しては全て同じ番号を用いている。例えば、第１実施例の説明での演算器４と第２実施例の説明での演算器４は同一の機能を持つ。
【００３４】
データバス２はアキュムレータ１、メモリ３、演算器４、アップダウンカウンタ５、制御回路６に接続されている。アキュムレータの「内容」、データバスからのデータの「内容」、アップダウンカウンタの「内容」と用いられている「内容」は、各ビットが値を有する一連のビットからなるデータをいう。
【００３５】
演算器４はメモリ３からデータバス２を介して転送されたデータとアキュムレータ１の値を入力して、１６ビットの演算を行い、演算結果をアキュムレータ１に出力する。また演算器４は、演算のキャリー信号９を制御回路６に出力する。演算器４は一般的なＡＬＵである。この演算器４の機能は必ずしも以下に限定されないが、加算、減算などの演算が可能である。この実施例では加算演算を例として説明する。
【００３６】
アキュムレータ１はデータバス２以外に演算器４に直接接続され、演算器４からの１６ビットの演算結果を格納し、アキュムレータ１の値を演算器４に入力する。またアキュムレータ１の値は、データバス２を介してメモリ３に転送することも可能である。
【００３７】
制御回路６はアップダウンカウンタ５を制御する。制御回路６の入力は２つある。１つは、演算器４のデータバス２から接続されている側のデータ入力７の最上位ビット即ち符号ビット８で、もう１つは演算器４のキャリー信号９である。制御回路６はこれら２つの入力からアップダウンカウンタ５の値の変動を制御する。具体的には、アップダウンカウンタ５の値を無変化もしくは＋１（１加算する。以下、同じ）、−１（１減算する。以下、同じ）させる。
【００３８】
アップダウンカウンタ５は制御回路６からの制御信号により値を無変化、＋１、−１にする。
【００３９】
次に、第１実施例の動作を説明する。
【００４０】
図５は第１実施例の動作フロー図である。
【００４１】
メモリ３に累算すべき複数のデータが入っている状態から、第１実施例の動作は以下のように行われる。
【００４２】
（１）初期化：ステップＳ５００において、アップダウンカウンタ５の内容、アキュムレータ１の内容を初期値に初期化する。この説明ではこの初期値を０とする。
【００４３】
（２）演算：ステップＳ５０１において、累算の演算を行う。このステップＳ５０１は累算すべきデータがなくなるまで行われる。なお、ステップＳ５０１では以下のステップＳ５０３〜Ｓ５０６の４つのステップを実行する。
【００４４】
（２．１）ステップＳ５０３において、メモリ３から累算すべきデータをデータバス２に転送する。
【００４５】
（２．２）ステップＳ５０４において、アキュムレータ１の値とステップＳ５０３において、メモリ３から転送したデータを演算器４で加算する。この加算の結果、アキュムレータ１の値は以下のように更新される。
【００４６】
アキュムレータ１の値＋メモリ３の値→アキュムレータ１の値（更新後）
このとき演算器４では加算演算のキャリーが発生する場合がある。その値は、キャリー信号９として制御回路６に出力される。
【００４７】
（２．３）ステップＳ５０５では、制御回路６によってアップダウンカウンタ５を制御する。制御回路６は、ステップＳ５０４で演算器４から出力されたキャリー信号９と、ステップＳ５０３においてメモリ３から転送したデータの符号ビットの値すなわち演算器４のデータ入力７の符号ビット８から表１の制御論理で動作する。
【００４８】
アップダウンカウンタ５はこの制御論理で動作し、値を更新する。アップダウンカウンタ５の値は累算値の上位部分に相当する値である。即ち、　累算値がアキュムレータ１の前記許容範囲（例では１６進数の７ＦＦＦ〜８０００）を正の方向に超えている場合は超えた分の正の値を示し、逆に許容範囲を負の方向に超えている場合は、負の値を示している。アップダウンカウンタ５の値が０と等しい場合は累算値はアキュムレータ１の許容範囲にある。
【００４９】
【表１】
2004013519.tif 000003
【００５０】
オーバーフロー時のアップダウンカウンタの設定は、例えば、カウンタを２ビット、アキュムレータを４ビットで例示すると、以下のようになる。
アキュムレータの内容が最大値の状態　　→オーバーフロー発生時
負のオーバーフロー　００　１０００　　→　　１１　１０００
正のオーバーフロー　００　０１１１　　→　　０１　０１１１
（２．４）ステップＳ５０６では、累算の演算を終了するかどうかを判断する。累算すべきデータがまだある場合（ＮＯ）は、ステップＳ５０３に再び戻って累算の演算を続行する。累算すべきデータがもうない場合（ＹＥＳ）は、累算の演算を終了する。
【００５１】
（３）結果出力：ステップＳ５０２において、累積演算の結果をデータバス２に出力する。累積演算の結果、アキュムレータ１にはアキュムレータの使用ビットの値、即ち、許容範囲内の累算値の下位部分（累算値の全ビットの内の下位ビット部分）に相当する値が入っている。一方、アップダウンカウンタ５には、アキュムレータ１の前記許容範囲を超えた、累算値の上位部分（前記下位ビット部分とで前記累算値の全ビットを構成する部分）に相当する値が入っている。この累算値は前記上位部分と前記下位部分で全ビットが構成される。アキュムレータ１とアップダウンカウンタ５の値をデータバス２に出力する。
【００５２】
以上のように第１実施例によれば、ステップＳ５０５での操作によって、アップダウンカウンタ５には、アキュムレータ１の前記許容範囲を越えた累算値の前記上位部分に相当する正しい値が入っている。また、アキュムレータ１にはこのアキュムレータ１の前記許容範囲内の累算値の前記下位部分に相当する値が入っている。したがって累算結果がアキュムレータ１の許容範囲を越えた場合でも、これら２つのレジスタの値から、最終的な累算値の範囲全体での正しい値を得ることができる。
【００５３】
また、このアキュムレータ１とアップダウンカウンタ５はデータバス２に接続されているので、データバス２に接続されているレジスタやメモリなどの他の部分に転送したり、他の部分から参照することができる。例えば、アキュムレータ１とアップダウンカウンタ５の値をデータバス２を介してメモリ３に転送することも可能である。
【００５４】
第１実施例では、アキュムレータ１が１６ビットでアップダウンカウンタ５は８ビットであるので、最高で２４ビットの累積演算結果を正しい値で得ることができる。つまり、８ビットのアップダウンカウンタ５が本来１６ビット幅のアキュムレータ１に対して２４ビットのダイナミックレンジを提供していることと等価である。
【００５５】
このように、累加算演算などで演算器４の演算結果がアキュムレータ１の許容範囲を超える場合は、アップダウンカウンタ５は自分のビット範囲においてアキュムレータ１に対して必要なだけのダイナミックレンジの拡大を可能とする。一方、累加算演算以外の一般的な演算で、演算器４の演算結果がアキュムレータ１の許容観囲を超えない場合においては、アキュムレータ１は本来の１６ビットのレジスタとして問題なく動作する。
【００５６】
すなわち、アップダウンカウンタ５または制御回路６は、アキュムレータ１に何の影響も与えないからである。この場合、プロセッサはアップダウンカウンタ５または制御回路６などの第１実施例による拡張部分を一切使用することなく、１６ビットのアキュムレータ１を必要とする一般的な命令を実行することが可能である。
【００５７】
（第２実施例）
【００５８】
図２は本発明の第２実施例を示す図である。
【００５９】
この実施例では、第１実施例と同じように、アキュムレータ、データバス、メモリ、演算器のビット幅を１６ビットとして説明する。また、アップダウンカウンタのビット幅を８ビットとする。即ち、この例では本来１６ビット幅のアキュムレータに対して８ビットダイナミックレンジを拡大している。
【００６０】
次に、接続及び各構成部品の動作を説明する。
【００６１】
データバス２は、演算器４，メモリ３、アキュムレータ１、アップダウンカウンタ５、補正回路１０に接続されている。
【００６２】
演算器４はメモリ３からデータバス２を介して転送されたデータとアキュムレータ１の値を入力して、１６ビットの演算を行い、演算結果をアキュムレータ１に出力する。また演算器４は、演算結果のオーバーフロー信号１１と演算結果の符号信号１２を制御回路１６に出力する。演算器４は一般的なＡＬＵである。この演算器４の機能は必ずしも以下に限定されないが、加算、減算などの演算が可能である。この実施例では加算演算を行う。
【００６３】
アキュムレータ１はデータバス２以外に演算器４に直接接続されている。このアキュムレータ１は演算器４からの１６ビットの演算結果を格納する。また、前述の通り、このアキュムレータ１の値は演算器４の入力として用いられる。更に、アキュムレータ１の値は、データバス２を介してメモリ３に転送することも可能である。
【００６４】
制御回路１６はアップダウンカウンタ５を制御する。制御回路１６の入力は２つある。１つは演算器４のオーバーフロー信号１１で、もう１つは演算結果の符号信号１２である。制御回路１６はこれら２つの入力からアップダウンカウンタ５の値の変更を制御する。具体的には、アップダウンカウンタ５の値を無変化もしくは＋１、−１させる。
【００６５】
アップダウンカウンタ５は制御回路１６からの信号により値を＋１、−１、無変化に変更する。
【００６６】
補正回路１０はアキュムレータ１の出力信号の符号ビット１３によってアップダウンカウンタ値を補正する。
【００６７】
即ち、アップダウンカウンタ５には、累算結果がアキュムレータ１の許容範囲を越えた場台発生したオーバーフローの回数が入っている。このカウンタ値は累算値の上記上位部分とは異なるため、累算値の上位部分の本当の値を得るためには補正が必要となる。カウンタ値を補正し、累算値の上位部分の本当の値を得るための操作を補正回路１０で実現する。
【００６８】
次に、第２実施例の動作を説明する。
【００６９】
図６は第２実施例の動作フロー図である。
【００７０】
メモリ３に累算すべき複数のデータが入っている。
【００７１】
第２実施例の動作は以下のように行われる。
【００７２】
（１）初期化：ステップＳ６００において、アップダウンカウンタ５、アキュムレータ１を初期値に初期化する。第２実施例ではこの初期値を０とする。
【００７３】
（２）演算：ステップＳ６０１において、累算の演算を行う。このステップＳ６０１は累算すべきデータがなくなるまで行われる。なお、ステップＳ６０１では以下のステップＳ６０３〜Ｓ６０６の４つのステップを実行する。
【００７４】
（２．１）ステップＳ６０３において、メモリ３から累算すべきデータをデータバス２に転送する。
【００７５】
（２．２）ステップＳ６０４において、アキュムレータ１の値とステップＳ６０３においてメモリ３から転送したデータを演算器４で加算演算する。演算の結果、アキュムレータ１の値は以下のように更新される。
【００７６】
アキュムレータ１の値＋メモリ３の値→アキュムレータ１の値（更新後）
この時、演算器４では加算演算のオーバーフローが発生する場合がある。その値は、オーバーフロー信号１１として制御回路１６に出力される。また、演算器４の演算結果の符号信号１２も制御回路１６に出力される。
【００７７】
（２．３）ステップＳ６０５では、制御回路１６によってアップダウンカウンタ５を制御する。制御回路１６は、ステップＳ６０２で演算器４から出力されたオーバーフロー信号１１と演算結果の符号信号１２から表２の制御論理で動作する。
【００７８】
【表２】
2004013519.tif 000004
【００７９】
アップダウンカウンタ５はこの制御論理で動作し、値を更新する。アップダウンカウンタ５に入っている値は正のオーバーフローが発生したとき＋１し、負のオーバーフローが発生したとき一１した値である。この値は累算値がアキュムレータ１の許容範囲（例では１６進数の７ＦＦＦ〜８０００）を正の方向に越えている場合は正の値を示し、逆に許容範囲を負の方向に超えている場合は、負の値を示している。アップダウンカウンタ５の値が０と等しい場合は累算値はアキュムレータ１の許容範囲にある。
（２．４）ステップＳ６０６では、累算の演算を終了するかどうかを判断する。累算すべきデータがまだある場合（ＮＯ）は、ステップＳ６０３に再び戻って累算の演算を続行する。累算すべきデータがもうない場合（ＹＥＳ）は、累算の演算を終了する。
（３）結果出力：ステップＳ６０２において、補正回路１０によってアップダウンカウンタ５の値の補正を行い、累積演算の結果をデータバス２に出力する。
【００８０】
ステップＳ６０２はステップＳ６０７とステップＳ６０８を含む。ステップＳ６０７とステップＳ６０８は並列に行う。
【００８１】
（３．１）ステップＳ６０７において、補正回路１０によってアップダウンカウンタ５の値を補正しデータバス２に出力する。累算結果がアキュムレータ１の許容範囲を越えた場合、アップダウンカウンタ５には、発生したオーバーフローの回数が入っている。このカウンタ値はアキュムレータ１の許容範囲を超えた累算値の上位部分とは異なるため、累算値の上位部分の正しい値を得るためには補正が必要となる。カウンタ値を補正し、累算値の上位部分の正しい値を得るための操作を補正回路１０で実現する。補正回路１０は表３の論理で動作する。
【００８２】
【表３】
2004013519.tif 000005
【００８３】
補正したアップダウンカウンタ５の値はデータバス２に出力する。
【００８４】
（３．２）ステップＳ６０８では、アキュムレータ１の値をデータバス２に出力する。
【００８５】
以上のように第２実施例によれば、ステップＳ６０７において補正回路１０で補正されたアップダウンカウンタ５の値は、アキュムレータ１の許容範囲を越えた累算値の上位部分に相当する正しい値になっている。また、アキュムレータ１にはこのアキュムレータ１の使用ビットの許容範囲内の値、即ち、累算値の下位部分に相当する値が入っている。累算値の全ビットは、前記上位部分と前記下位部分のビットからなる。したがって累算結果がアキュムレータ１の許容範囲を越えた場合でも、これら２つのレジスタの値から、最終的な累算値の正しい値を得ることができる。
【００８６】
また、このアキュムレータ１とアップダウンカウンタ５はデータバス２に接続されているので、データバス２に接続されているレジスタやメモリなどの他の部分に転送したり、他の部分から参照することができる。例えば、アキュムレータ１とアップダウンカウンタ５の値をデータバス２を介してメモリ３に転送することも可能である。
【００８７】
アップダウンカウンタ５には発生したオーバーフローの回数が入っているので、本当の値が必要のとき、アップダウンカウンタ５の値を補正回路１０で変換してデータバス２へ送り出す。割り込み処理に対処して退避するときなど、本当の値に戻さなくてよいときはアップダウンカウンタ５の内容をデータバス２を介してそのままメモリ３へ転送し、またそこからアップダウンカウンタ５へ戻す。
【００８８】
第２実施例では、アキュムレータ１が１６ビットでアップダウンカウンタ５は８ビットであるので、最高で２４ビットの累積結果を正しい値で得ることができる。つまり、８ビットのアップダウンカウンタ５が本来１６ビット幅のアキュムレータ１に対して２４ビットのダイナミックレンジを提供していることと等価である。
【００８９】
このように、累加算演算などで演算器４の演算結果がアキュムレータ１の許容範囲を超える場合は、アップダウンカウンタ５は自分のビット範囲においてアキュムレータ１に対して必要なだけのダイナミックレンジを拡大する。
【００９０】
一方、累加算演算以外の一般的な演算で、演算器４の演算結果がアキュムレータ１の許容範囲を超えない場合においては、アキュムレータ１は本来の１６ビットのレジスタとして問題なく動作する。なぜならば、アップダウンカウンタ５または制御回路１６または補正回路１０は、アキュムレータ１に何の影響も与えないからである。この場合、プロセッサはアップダウンカウンタ５、制御回路１６、補正回路１０などの第２実施例による拡張部分を一切使用せず、１６ビットのアキュムレータ１を必要とする一般的な演算を実行可能である。
【００９１】
（第３実施例）
図３は、本発明の第３実施例を示す図である。これは第１実施例で示されるダイナミックレンジを拡大する装置を複数の変数に対応できるようにしたものである。
【００９２】
第３実施例では、複素数の累算を念頭において、２変数の累算を例として説明する。なお、アキュムレータ数、アップダウンカウンタ数を増やすことで、これより多数の複数の変数に対応させることも当然可能である。
【００９３】
この説明では、第１実施例と同じように、アキュムレータ、データバス、メモリ、演算器のビット幅を１６ビットとして説明する。また、アップダウンカウンタのビット幅を８ビットとする。即ち、この例では本来１６ビット幅のアキュムレータに対して８ビットのダイナミックレンジを拡大している。
【００９４】
接続及び各構成部品の動作を説明する。
【００９５】
データバス２は、メモリ３、セレクタを介したアキュムレータ１Ａおよびアキュムレータ１Ｂ、直接およびセレクタを介したアップダウンカウンタ５Ａおよびアップダウンカウンタ５Ｂ、演算器４、制御回路６に接続されている。
【００９６】
演算器４はメモリ３からデータバス２を介して転送されたデータとアキュムレータ１Ａ又はアキュムレータ１Ｂの値を入力として、１６ビットの演算を行い、演算結果を演算器４の入力の値として用いたアキュムレータに出力する。また演算器４は、演算のキャリー信号９を制御回路６に出力する。演算器４は一般的なＡＬＵである。この演算器４の機能は必ずしも以下に限定されないが、加算、減算などの演算が可能である。この実施例では加算演算を行う。
【００９７】
アキュムレータ１Ａ、アキュムレータ１Ｂ及びアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂは、アキュムレータ及びアップダウンカウンタの組で１組として選択制御される（この例ではアキュムレータ１Ａ及びアップダウンカウンタ５Ａで１つの組、アキュムレータ１Ｂ及びアップダウンカウンタ５Ｂで別の組を構成する。）。アキュムレータ及びアップダウンカウンタの組は、ソフトに基づくプロセッサの設定によりどちらかが選択されようになっている。
【００９８】
アキュムレータ１Ａ、アキュムレータ１Ｂはデータバス２以外に演算器４にも直接接続されている。これらのアキュムレータのうち、演算を行う変数の組のアキュムレータは演算器４からの１６ビットの演算結果を格納する。アキュムレータの値は演算器４の入力として用いられる。また、この値をデータバス２を介してメモリ３に転送することも可能である。
【００９９】
制御回路６はアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂを制御する。制御回路６の入力は２つある。１つは、演算器４のデータバス２から接続されている側の入力７の最上位ビット即ち符号ビット８で、もう１つは演算器４のキャリー信号９である。制御回路６はこれら２つの入力からアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂの値の変更を制御する。具体的には、これらのアップダウンカウンタの値を無変化もしくは＋１、−１させる。
【０１００】
アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂは制御回路６からの信号により値を＋１、一１、無変化に変更する。
【０１０１】
次に、第３実施例の動作を説明する。２変数の累算の典型的な例として複素数の累算を考える。図７に第３実施例の動作フローを図示する。
【０１０２】
メモリ３には累算すべき複数の複素数データが入っている。その複素数データを実数、虚数に分けて累算する。
【０１０３】
第３の実施例の動作は以下のように行われる。
【０１０４】
（１）初期化：ステップＳ７００において、２つのアップダウンカウンタ５Ａおよび５Ｂ、２つのアキュムレータ１Ａおよび１Ｂを初期値に初期化する。この説明ではこの初期値を０とする。
【０１０５】
（２）演算：ステップＳ７０１において累算の演算を行う。このステップＳ７０１は累算すべきデータがなくなるまで行われる。なお、ステップＳ７０１では以下のステップＳ７０３〜Ｓ７０７の５つのステップを実行する。
【０１０６】
（２．１）ステップＳ７０３において、演算を行う変数のアキュムレータとアップダウンカウンタの組を選択する。
【０１０７】
（２．２）ステップＳ７０４において、メモリ３から選択された変数の累算すべきデータをデータバス２に転送する。
【０１０８】
（２．３）ステップＳ７０５において、選択されたアキュムレータの値とステップＳ７０４においてメモリ３から転送したデータを演算器４で加算する。
【０１０９】
（２．３．１）実数側が選択されているとき、アップダウンカウンタ５Ａ及びアキュムレータ１Ａの組み合わせが選択される。アキュムレータ１Ａの値は以下のように更新される。
【０１１０】
アキュムレータ１Ａの値＋メモリ３の値→アキュムレータ１Ａの値（更新後）
このとき演算器４では加算演算のキャリーが発生する場合がある。その値は、キャリー信号９として制御回路６に出力される。
【０１１１】
（２．３．２）虚数側が選択されているとき、アップダウンカウンタ５Ｂ及びアキュムレータ１Ｂの組み合わせが選択される。アキュムレータ１Ｂの値は以下のように更新される。
【０１１２】
アキュムレータ１Ｂの値＋メモリ３の値→アキュムレータ１Ｂの値（更新後）
このとき演算器４では加算演算のキャリーが発生する場合がある。その値は、キャリー信号９として制御回路６に出力される。
【０１１３】
（２．４）ステップＳ７０６では、制御回路６によってアップダウンカウンタを制御する。制御するアップダウンカウンタは、実数側が選択されていればアップダウンカウンタ５Ａ、虚数側が選択されていればアップダウンカウンタ５Ｂである。制御回路６は、ステップＳ７０２で演算器４から出力されたキャリー信号９と、ステップＳ７０４においてメモリ３から転送されたデータの符号ビットの値すなわち演算器４のデータ入力７の符号ビット８から表４の制御論理で動作する。
【０１１４】
【表４】
2004013519.tif 000006
【０１１５】
アップダウンカウンタはこの制御論理で動作し、値を更新する。アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂの値はそれぞれ対応する変数の累算値の上位部分に相当する値である。
【０１１６】
累算値がアキュムレータの許容範囲（例では１６進数の７ＦＦＦ〜８０００）を正の方向に超えている場合は正の値を示し、逆に許容範囲を負の方向に超えている場合は、負の値を示している。アップダウンカウンタの値が０と等しい場合は累算値はアキュムレータの許容範囲にある。
【０１１７】
（２．５）ステップＳ７０７では、累算の演算を終了するかどうかを判断する。累算すべきデータがまだある場合（ＮＯ）は、ステップＳ７０３に再び戻って累算の演算を続行する。累算すべきデータがもうない場合（ＹＥＳ）、累算の演算を終了する。
【０１１８】
（３）結果出力：ステップＳ７０２において累積演算の結果をデータバス２に出力する。
【０１１９】
累積演算の結果、それぞれのアキュムレータには許容範囲内の累算値の下位部分に相当する値が入っている。一方、それぞれのアップダウンカウンタにはアキュムレータの許容範囲を超えた累算値の上位部分の正しい値が入っている。データは、アップダウンカウンタ５Ａ及びアキュムレータ１Ａに実数データが、アップダウンカウンタ５Ｂ及びアキュムレータ１Ｂに虚数データが入っている。２つのアキュムレータの値と２つのアップダウンカウンタの値をデータバス２に出力する。
【０１２０】
以上のように第３実施例によれば、ステップＳ７０６の操作により、アップダウンカウンタ（アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂ）にはアキュムレータ（アキュムレータ１Ａ、アキュムレータ１Ｂ）の許容範囲を越えた累算値の上位部分に相当する値が入っている。したがって実数、虚数の累算結果がこれらのアキュムレータの許容範囲を越えた場合でも、これらのレジスタの値から、最終的な累算値の範囲全体での正しい値を得ることができる。
【０１２１】
また、これらのアキュムレータとアップダウンカウンタはデータバス２に接続されているので、データバス２に接続されているレジスタやメモリ、などの他の部分に転送したり、他の部分から参照することができる。例えば、アキュムレータ１Ａとアップダウンカウンタ５Ａの値をデータバス２を介してメモリ３に転送することも可能である。
【０１２２】
第３実施例では、第１実施例と同じように、２つのアキュムレータが１６ビットで、対応するそれぞれのアップダウンカウンタは８ビットであるので、最高で２４ビットの累積結果を正しい値で得ることができ、これは２４ビットのダイナミックレンジを提供していることと等価である。
【０１２３】
このように、累加算演算などで演算器４の演算結果がアキュムレータ１Ａ、アキュムレータ１Ｂの許容観囲を超える場合は、対応するアップダウンカウンタが自分のビット範囲においてアキュムレータに対して必要なだけのダイナミックレンジを拡大する。一方、累加算演算以外の一般的な演算で、演算器４の演算結果がこれらのアキュムレータの許容範囲を超えない場合においては、これらのアキュムレータは本来の１６ビットのレジスタとして問題なく動作する。
【０１２４】
すなわち、これらのアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂおよび又制御回路６は、これらのアキュムレータ１Ａ、アキュムレータ１Ｂに何の影響も与えないからである。この場合、プロセッサはアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂまたは制御回路６などの第３の実施例による拡張部分を一切使用せず、１６ビットのアキュムレータを必要とする一般的な演算を実行可能である。
【０１２５】
アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂの内容は、第１実施例の場合と同様に正しい値が入っている。
【０１２６】
以上のように、第３実施例では第１実施例と同じ効果を得ることができる。
【０１２７】
また第３実施例では、２つのアキュムレータとそれに対応するアップダウンカウンタの組を選択することによって、演算対象の変数（実数、虚数）を切り替えることができる。このアキュムレータとそれに対応したアップダウンカウンタの組は、演算の対象となる変数の数（複素数の累算の場合は２）だけあるので、演算を行う対象の変数を変更する際に、レジスタ値を退避する必要がない。このため、レジスタ値の退避を行う方法に比べて、退避の際に生じるオーバーヘッドが全くない。複素数の累算のように、複数の変数を交互に演算する必要のある場合、演算を行う対象の変数を切り替える機会が多い。例えば、複素数の累算の場合は、少なくとも累算する複素数の数だけある。したがって、このレジスタ値の退避のためのオーバーヘッドをなくすことにより演算が高速化される。また、この変数の切り替えのための操作は短時間で行うことができる。
【０１２８】
セレクタはアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂのいづれか一方の出力だけを取り出せるように切り換える機能を有する。
【０１２９】
（第４実施例）
【０１３０】
図４は本発明の第４実施例を示す図である。
【０１３１】
これは第２実施例で示されるダイナミックレンジを拡大する装置を複数の変数に対応できるようにしたものである。
【０１３２】
第４実施例では、複素数の累算を念頭においた例として２変数の累算を説明する。なお、アキュムレータ数、アップダウンカウンタ数を増やすことで、これより多数の複数の変数に対応させることも簡単に可能である。
【０１３３】
この説明では、第１実施例と同じように、アキュムレータ、データバス、メモリ、演算器のビット幅を１６ビットとして説明する。また、アップダウンカウンタのビット幅を８ビットとする。即ち、この例では本来１６ビット幅のアキュムレータに対して８ビットのダイナミックレンジを拡大している。
【０１３４】
接続及び各構成部品の動作を説明する。
【０１３５】
データバス２は、メモリ３、セレクタを介したアキュムレータ１Ａ又はアキュムレータ１Ｂ、直接又はセレクタを介したアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂ、演算器４、補正回路１０、に接続されている。
【０１３６】
演算器４は１６ビットの演算を行い演算結果とオーバーフロー信号１１、演算結果の符号信号１２を出力する。演算器４は一般的なＡＬＵである。この実施例では加算演算を行う。
【０１３７】
アキュムレータ１Ａ、アキュムレータ１Ｂ及びアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂは、アキュムレータ及びアップダウンカウンタの組で１組として選択制御される（この例ではアキュムレータ１Ａ及びアップダウンカウンタ５Ａで１つの組、アキュムレータ１Ｂ及びアップダウンカウンタ５Ｂで別の組を構成する。）。アキュムレータ及びアップダウンカウンタの組はどちらかが選択されようになっている。
【０１３８】
アキュムレータ１Ａ、アキュムレータ１Ｂはデータバス２以外に演算器４にもセレクタを介して接続されている。これらのアキュムレータのうち、演算を行う変数の組のアキュムレータは演算器４からの１６ビットの演算結果を格納する。アキュムレータの値は演算器４の入力として用いられる。また、この値をデータバス２を介してメモリ３に転送することも可能である。
【０１３９】
制御回路１６はアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂを制御する。制御回路１６の入力は２つある。１つは演算器４のオーバーフロー信号１１で、もう１つは演算結果の符号信号１２である。制御回路１６はこれら２つの入力によりこれらのアップダウンカウンタの値の変動を制御する。具体的には、これらのアップダウンカウンタの値を無変化もしくは＋１、−１させる。
【０１４０】
アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂは制御回路１６からの信号により値を＋１、−１、無変化にする。
補正回路１０はアキュムレータ１Ａ、アキュムレータ１Ｂのうち選択されたアキュムレータの符号ビット１３によってアップダウンカウンタ値を修正する。
【０１４１】
第４実施例の動作を説明する。２変数の累算の典型的な例として複素数の累算を考える。
【０１４２】
図８は第４実施例の動作フロー図である。
【０１４３】
メモリ３に累算すべき複数の複素数データが入っている。その複素数データを実数、虚数に分けて累算する。
【０１４４】
第４実施例の動作は以下のように行われる。
【０１４５】
（１）初期化：ステップＳ８００において、２つのアップダウンカウンタ、２つのアキュムレータを初期値に初期化する。この説明ではこの初期値を０とする。
【０１４６】
（２）演算：ステップＳ８０１において、累算の演算を行う。このステップＳ８０１は累算すべきデータがなくなるまで行われる。なお、ステップＳ８０１では以下のステップＳ８０３〜Ｓ８０７の５つのステップを実行する。
【０１４７】
（２．１）ステップＳ８０３において演算を行う変数の組のアキュムレータとアップダウンカウンタを選択する。
【０１４８】
（２．２）ステップＳ８０４において、メモリ３から選択された変数の累算すべきデータをデータバス２に転送する。
【０１４９】
（２．３）ステップＳ８０５において、選択されたアキュムレータの値とステップＳ７０４においてメモリ３から転送したデータを演算器４で加算する。
【０１５０】
（２．３．１）実数側を選択されているとき、アップダウンカウンタ５Ａ及びアキュムレータ１Ａの組み合わせが選択される。アキュムレータ１Ａの値は以下のように更新される。
【０１５１】
アキュムレータ１Ａの値＋メモリ３の値→アキュムレータ１Ａの値（更新後）
この時、演算器４では加算演算のオーバーフローが発生する場合がある。その値は、オーバーフロー信号１１として制御回路１６に出力される。また、演算器４の演算結果の符号信号１２も制御回路１６に出力される。
【０１５２】
（２．３．２）虚数側を選択されているとき、アップダウンカウンタ５Ｂ及びアキュムレータ１Ｂの組み合わせが選択される。アキュムレータ１Ｂの値は以下のように更新される。
【０１５３】
アキュムレータ１Ｂの値＋メモリ３の値→アキュムレータ１Ｂの値（更新後）
この時、演算器４では加算演算のオーバーフローが発生する場合がある。その値は、オーバーフロー信号１１として制御回路１６に出力される。また、演算器４の演算結果の符号信号１２も制御回路１６に出力される。
【０１５４】
（２．４）ステップＳ８０６では、制御回路１６によってアップダウンカウンタを制御する。制御するアップダウンカウンタは、実数側が選択されていればアップダウンカウンタ５Ａ、虚数側が選択されていればアップダウンカウンタ５Ｂである。制御回路１６は、ステップＳ８０２で演算器４から出力されたオーバーフロー信号１１と演算結果の符号信号１２から表５の制御論理で動作する。
【０１５５】
【表５】
2004013519.tif 000007
【０１５６】
２つのアップダウンカウンタはこの制御論理で動作し、値を更新する。
【０１５７】
これらのアップダウンカウンタに入っている値は対応するアキュムレータが正のオーバーフローが発生したとき＋１し、負のオーバーフローが発生したとき−１した値である。これらの値は、累算値がアキュムレータの許容範囲（例では１６進数の７ＦＦＦ〜８０００）を正の方向に超えている場合は正の値を示し、逆に許容観囲を負の方向に超えている場合は、負の値を示している。アップダウンカウンタの値が０と等しい場合は累算値はアキュムレータの許容範囲にある。
【０１５８】
（２．６）ステップＳ８０７では、累算の演算を終了するかどうかを判断する。累算すべきデータがまだある場合（ＮＯ）は、ステップＳ８０３に再び戻って累算の演算を続行する。累算すべきデータがもうない場合（ＹＥＳ）、累算の演算を終了する。
【０１５９】
（３）結果出力：ステップＳ８０２において累積演算の結果をデータバス２に出力する。
【０１６０】
ステップＳ８０２はステップＳ８０８とステップＳ８０９を含む。ステップＳ８０８とステップＳ８０９は並列に行う。
【０１６１】
（３．１）ステップＳ８０８においてアップダウンカウンタの値を補正回路１０により補正しデータバス２に出力する。
【０１６２】
（３．１．１）実数側が選択されているとき、アップダウンカウンタ５Ａ及びアキュムレータ１Ａの組み合わせが選択される。アップダウンカウンタ５Ａには、累算結果がアキュムレータ１Ａの許容範囲を越えた場合発生したオーバーフローの回数が入っている。このカウンタ値は累算値の上位部分とは異なるため累算値の上位部分の本当の値を得るためには補正が必要となる。カウンタ値を補正し、累算値の上位部分の本当の値を得るための操作を補正回路１０で実現する。このときに使用されるアキュムレータ符号はアキュムレータ１Ａの符号を使用する。
【０１６３】
（３．１．２）虚数側が選択されているとき、する。アップダウンカウンタ５Ｂ及びアキュムレータ１Ｂの組み合わせが選択される。アップダウンカウンタ５Ｂには、累算結果がアキュムレータ１Ｂの許容範囲を越えた場合発生したオーバーフローの回数が入っている。このカウンタ値は累算値の上位部分とは異なるため累算値の上位部分の正しい値を得るためには補正が必要となる。カウンタ値を補正し、累算値の上位部分の正しい値を得るための操作を補正回路１０で実現する。このときに使用されるアキュムレータ符号はアキュムレータ１Ｂの符号を使用する。
【０１６４】
補正回路１０は表６の論理で動作する。
【０１６５】
【表６】
2004013519.tif 000008
【０１６６】
補正した２つのアップダウンカウンタの値をデータバス２に出力する。
【０１６７】
（３．２）ステップＳ８０９において２つのアキュムレータの値をデータバス２に出力する。
【０１６８】
データは、アキュムレータ１に実数データが、アキュムレータ１Ｂに虚数データが入っている。２つのアキュムレータの値をデータバス２に出力する。
【０１６９】
以上のように第４実施例によれば、ステップＳ８０６の操作により、アップダウンカウンタ（アップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂ）にはアキュムレータ（アキュムレータ１Ａ、アキュムレータ１Ｂ）の許容範囲を越えたオーバーフローの回数、即ち、累算値の上位部分に対応する回数の値が入っている。したがって実数、虚数の累算結果がこれらのアキュムレータ１の許容範囲を越えた場合でも、これらのレジスタの値から、最終的な累算値の範囲全体での正しい値を得ることができる。
【０１７０】
また、これらのアキュムレータとアップダウンカウンタはデータバス２に接続されているので、データバス２に接続されているレジスタやメモリなどの他の部分に転送したり、他の部分から参照することができる。例えば、アキュムレータ１Ａとアップダウンカウンタ５Ａの値をデータバス２を介してメモリ３に転送することも可能である。
【０１７１】
第４実施例では、第１実施例と同じように、２つのアキュムレータが１６ビットで、対応するそれぞれのアップダウンカウンタは８ビットであるので、最高で２４ビットの累積結果を正しい値で得ることができ、これは２４ビットのダイナミックレンジを提供していることと等価である。
【０１７２】
このように、累加算演算などで演算器４の演算結果がアキュムレータ１Ａ、アキュムレータ１Ｂの許容範囲を超える場合は、対応するアップダウンカウンタはアキュムレータに対して必要なだけのダイナミックレンジを拡大する。一方、累加算演算以外の一般的な演算で、演算器４の演算結果がこれらのアキュムレータの許容範囲を超えない場合においては、これらのアキュムレータは本来の１６ビットのレジスタとして問題なく動作する。
【０１７３】
すなわち、これらのアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂ、制御回路１６、補正回路１０は、これらのアキュムレータに何の影響も与えないからである。この場合、プロセッサはアップダウンカウンタ５Ａ、アップダウンカウンタ５Ｂ又は制御回路１６、補正回路１０などの第４の実施例による拡張部分を一切使用せず、１６ビットのアキュムレータのみを用いる一般的な演算を行う。
【０１７４】
以上のように、第４実施例では第２実施例と同じ効果を得ることができる。
【０１７５】
また第４実施例では、２つのアキュムレータとそれに対応するアップダウンカウンタの組を選択することによって、演算対象の変数（実数、虚数）を切り替えることができる。このアキュムレータとそれに対応したアップダウンカウンタの組は、演算の対象となる変数の数（複素数の累算の場合は２）だけあるので、演算を行う対象の変数を変更する際に、レジスタ値を退避する必要がない。このため、レジスタ値の退避を行う方法に比べて、退避の際に生じるオーバーヘッドが全くない。
【０１７６】
すなわち、複素数の累算のように、複数の変数を交互に演算する必要のある場合、演算を行う対象の変数を切り替える機会が多い。例えば、複素数の累算の場合は、少なくとも累算する複素数の数だけある。したがって、このレジスタ値の退避のためのオーバーヘッドをなくすことにより演算が高速化される。また、この変数の切り替えのための操作は短時間で行うことができる。
【０１７７】
これは第３実施例と同じ効果である。
【０１７８】
（利用形態）
第１実施例、第２実施例、第３実施例、第４実施例では、アップダウンカウンタの値とアキュムレータの符号ビットの値を調べることで特開２０００−３５８７５号公報による方法に示されるアキュムレータの飽和動作と同じ動作を実現することも可能である。
【０１７９】
【発明の効果】
以上、詳細に説明したように、本発明によれば次のような効果を奏する。
【０１８０】
累加算演算などで演算器の演算結果がアキュムレータの許容範囲を超える場合は、アップダウンカウンタはアキュムレータに対して必要なだけのダイナミックレンジを拡大する。一方、累加算演算以外の一般的な演算で、演算器の演算結果がアキュムレータの許容観囲を超えない場合においては、アキュムレータは本来の１６ビットのレジスタとして問題なく動作する。
【０１８１】
２つのアキュムレータとそれに対応するアップダウンカウンタの組を選択することによって、演算対象の変数（実数、虚数）を切り替えることができる。このアキュムレータとそれに対応したアップダウンカウンタの組は、演算の対象となる変数の数（複素数の累算の場合は２）だけあるので、演算を行う対象の変数を変更する際に、レジスタ値を退避する必要がない。このため、レジスタ値の退避を行う方法に比べて、退避の際に生じるオーバーヘッドが全くない。
【０１８２】
すなわち、複素数の累算のように、複数の変数を交互に演算する必要のある場合、演算を行う対象の変数を切り替える機会が多い。例えば、複素数の累算の場合は、少なくとも累算する複素数の数だけある。したがって、このレジスタ値の退避のためのオーバーヘッドをなくすことにより演算が高速化される。また、この変数の切り替えのための操作は短時間で行うことができる。
【０１８３】
アップダウンカウンタの値を補正回路を介すれば正しい値に変換でき、補正回路を介さなければ処理速度が速くできる。
【図面の簡単な説明】
【図１】本発明の第１実施例を示す図である。
【図２】本発明の第２実施例を示す図である。
【図３】本発明の第３実施例を示す図である。
【図４】本発明の第４実施例を示す図である。
【図５】本発明の第１実施例の動作フローを示す図である。
【図６】本発明の第２実施例の動作フローを示す図である。
【図７】本発明の第３実施例の動作フローを示す図である。
【図８】本発明の第４実施例の動作フローを示す図である。
【図９】本発明の解決原理を示す図である。
【符号の説明】
１、１Ａ、１Ｂ　　アキュムレータ
２　　データバス
３　　メモリ
４　　演算器
５、５Ａ、５Ｂ　　アップダウンカウンタ
６、１６　　制御回路
７　　データ入力
８、１３　　符号ビット
９　　キャリー信号
１０　　補正回路
１１　　オーバーフロー信号
１２　　符号信号
【図１】
2004013519.tif 000009
【図２】
2004013519.tif 000010
【図３】
2004013519.tif 000011
【図４】
2004013519.tif 000012
【図５】
2004013519.tif 000013
【図６】
2004013519.tif 000014
【図７】
2004013519.tif 000015
【図８】
2004013519.tif 000016
【図９】
2004013519.tif 000017