トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 演算回路
【発明者】 【氏名】矢野 直佳

【要約】 【課題】連続した命令を実行する際に、前回の演算結果の確定を待たずに次の演算を行い、パイプライン処理の冗長性を排除して、回路面積を増大させることなく演算時間を短縮し、演算性能を向上させることにある。

【解決手段】第1の加算回路3と、第1の加算回路3の2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段4、5と、第2の加算回路6と、結果データ保持手段2とを少なくとも具備し、前回の演算の結果を用いた連続した演算を行う場合には、第1の加算回路3は、中間データ保持手段4、5にそれぞれ保持される第1および第2の中間データをそれぞれ入力データの一部として次の加算を行うものである。
【特許請求の範囲】
【請求項1】 複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、該中間データ保持手段に保持された前記第1及び第2の中間データに従った加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データに基づくデータを保持する結果データ保持手段とを少なくとも具備し、前回の演算の結果を用いて連続して演算を行う場合には、前記第1の加算回路は、初回の演算の際には、予め設定された初期値に基づく初期データおよび0データをそれぞれ前記入力データの一部として加算を行い、2回目以降の演算の際には、前記中間データ保持手段にそれぞれ保持される前記第1および第2の中間データをそれぞれ前記入力データの一部として次の加算を行うことを特徴とする演算回路。
【請求項2】 被乗数と乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、該中間データ保持手段に保持された前記第1及び第2の中間データに基づき加算を行い、1つの結果データを出力する第2の加算回路と、前記第2の加算回路の出力データに基づくデータを保持する結果データ保持手段とを少なくとも具備し、前回の演算の結果を用いて連続して演算を行う場合には、前記第1の加算回路は、初回の演算の際には、予め設定された初期値に基づく初期データまたは0データを前記入力データの一部として、前記乗算回路からの入力データとの加算を行い、2回目以降の演算の際には、前記中間データ保持手段にそれぞれ保持される第1および第2の中間データに基づくデータをそれぞれ前記入力データの一部として、前記乗算回路からの次の入力データとの加算を行うことを特徴とする演算回路。
【請求項3】 複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値および前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに従って加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記加算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値を、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は第2の中間データをそれぞれ選択することを特徴とする演算回路。
【請求項4】 減算を行う演算回路であって、複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとして保持する中間データ保持手段と、予め設定された初期値の反転データおよび前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1および第2の中間データに従った加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記減算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択することを特徴とする演算回路。
【請求項5】 積和演算を行う演算回路であって、被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとして保持する中間データ保持手段と、予め設定された初期値および前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記積和演算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値を、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択することを特徴とする演算回路。
【請求項6】 被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値の反転データ、前記第1の中間データ、0データ、および該第1の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データ、前記第2の中間データ、および該第2の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合であって、さらに前記初期値を初回の減算の被減数とする場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択し、前記乗算回路からの入力データを初回の減算の被減数とする場合には、初回の演算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に前記桁上げ信号を用いて1を加算することを特徴とする演算回路。
【請求項7】 被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、0データ、前記第1の中間データ、および該第1の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データ、前記第2の中間データ、および該第2の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合には、初回の減算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に前記桁上げ信号を用いて1を加算することを特徴とする演算回路。
【請求項8】 外部から入力される乗算結果データを含む複数の入力データに従った加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値の反転データ、前記第1の中間データ、該第1の中間データの反転データ、および0データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、前記第2の中間データ、該第2の中間データの反転データ、および0データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1および第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合であって、さらに前記初期値を初回の減算の被減数とする場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択し、乗算回路からの入力データを初回の減算の被減数とする場合には、初回の演算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に前記桁上げ信号を用いて1を加算することを特徴とする演算回路。
【請求項9】 上記演算回路はさらに、前記第2の加算回路の出力データおよび該出力データの反転データのいずれかを選択して前記結果データ保持手段への1つの入力とする第3の選択手段を具備し、乗算演算を行う際には、前記第1および第2の選択手段はともに0データを、前記第3の選択手段は前記第2の加算回路の出力データをそれぞれ選択することを特徴とする請求項5乃至8のいずれか記載の演算回路。
【請求項10】 前記第1の加算回路が出力する前記2つの出力データの一方はCarryデータであり、他方はSumデータであることを特徴とする請求項1乃至9のいずれか記載の演算回路。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、データ処理プロセッサやマイクロプロセッサ等に使用される演算回路に関し、特に、連続した命令を実行する際に、演算中の途中結果データを用いて前回の演算結果に基づく演算を実行することによって、前回の演算結果の確定を待たずに次の演算を行い、パイプライン処理の冗長性を排除して、回路面積を増大させることなく演算時間を短縮し、演算性能を向上させるための技術に関する。
【0002】
【従来の技術】連続する命令に従った演算で、前回命令の演算の結果を用いて次の命令の演算を行う累積演算においては、桁上げ信号の伝播の処理速度が、全体の演算速度に大きな影響を及ぼす。このため、従来より、前回命令の演算結果がキャリーセーブ形式などの場合には、桁上げ伝播加算を複数回行うかわりに、桁上げ伝播加算器(CPA:Carry Propagation Adder)の前に、桁上げ保存加算器(CSA:Carry Save Adder)などの高速な加算器を置くことによって、かかる桁上げ処理の高速化が図られてきた。ここで、CSAとは、3個のオペランドの高速加算のための装置であり、一連のFA(Full Adder)から構成される。そして、オペランドの1つは桁上げ入力に入り、桁上げ出力は、隣の桁の桁上げ入力に与えられるかわりに、第2の出力語とみなされる。そして、CSAの出力を、2オペランド加算器で加算して最終結果を得るものである。
【0003】また、こうしたCPAとCSAなど2つの加算器の間には、レジスタなどの何らかのデータ保持回路を設け、2つの加算器の間のタイミング調整を図ること場合がある。かかるデータ保持回路は、特に、CPAの演算時間がサイクルタイムに比べて比較的長くかかる場合や、プリチャージ型などタイミングに制約のあるCPAを用いる場合などで必要となる場合が多い。
【0004】以下、かかるデータ保持回路を設けた場合の、従来の演算回路について、累積加算と累積減算の場合を説明する。
【0005】まず、従来における累積加算のための演算回路について、図8を用いて説明する。図8に示すように、かかる累積加算回路は、2入力データ(A、B)と、出力レジスタに保持されているデータとの加算を行い、その結果を出力レジスタに書くという動作を行う回路であり、この演算を繰り返すことにより、A+Bの加算結果が累積されていくことになる。即ち、式で表すと、初期値+(入力A+入力B)+(入力A’+入力B’)…という演算を実行する回路である。かかる2入力データは、どのような形式で与えられてもよいが、一例としては、累積加算すべきデータがキャリーセーブ形式となっていて、データAがCarry,データBがSumとなっている場合などが考えられる。
【0006】かかる累積加算回路は、図8に示すように、レジスタにロードするデータ(初期値)と加算器からの出力のいずれかを選択するセレクタ31、セレクタ31の出力を保持する出力レジスタ32、出力レジスタ32の出力と入力データA,Bを入力とする桁上げ保存加算器(CSA)33、CSA33の2出力をそれぞれ保存する中間結果保持レジスタ34、35、レジスタ34、35の出力を入力とする桁あげ伝播加算器(CPA)36とから構成される。
【0007】次に、かかる累積加算回路の演算動作につき、以下に説明する。
【0008】(サイクルタイム1)まず、セレクタ31により、初期値を選択し、その結果をレジスタ32に書き込むことにより、加算の初期値のロードを行う。
【0009】(サイクルタイム2)次のサイクルで、入力データA,Bと、レジスタ32の出力とを入力として、CSA33が加算を行う。加算結果は、Carry信号S1、Sum信号S2として出力され、中間結果保持レジスタ34、35にそれぞれ保存される。
【0010】(サイクルタイム3)次に、レジスタ34、レジスタ35に保存されたデータを入力として、CPA36が加算を行う。そして、セレクタ31により、CPA36の加算結果が選択され、加算結果データとして出力レジスタ32に書き込まれる。
【0011】2回目以降の加算動作は、上述のサイクルタイム2および3の処理を繰り返し行うことによって、実現される。
【0012】次に、従来における累積減算のための演算回路について、図9を用いて説明する。かかる減算回路は、式で表すと、初期値−(入力A+入力B)−(入力A’+入力B’)…という演算を実行するための回路である。
【0013】上述した加算回路の場合と同様に、入力がキャリーセーブ形式になっており、2入力データA、Bがそれぞれ、CarryとSumとに対応する場合などが考えられる。
【0014】上述の減算式において、この累積減算は、初期値または数回減算を繰り返した結果である被減数をP1、減数側の入力をA,Bとすると、【数1】

と置き換えられるため、インバータと加算を行う回路により、累積減算が実現できることとなる。
【0015】かかる累積減算回路は、図9に示すように、レジスタにロードするデータ(初期値)と加算器からの出力の反転のいずれかを選択するセレクタ31、セレクタ31の出力を保持するレジスタ32、レジスタ32の出力の反転をとる反転回路37、反転回路37の出力と入力データA,Bを入力とする桁あげ保存加算器(CSA)33,CSA33の2出力をそれぞれ保存する中間結果保持レジスタ34、35、レジスタ34、35の出力を入力とする桁あげ伝播加算器(CPA)36、CPAの出力を反転する反転回路38から構成される。
【0016】次に、かかる累積減算回路の演算動作につき、以下に説明する。
【0017】(サイクルタイム1)まず、セレクタ31により、初期値を選択し、その結果をレジスタ32に書き込むことにより、初期値のロードを行う。
【0018】(サイクルタイム2)次のサイクルで、入力A,B、レジスタ32の出力の反転結果である反転回路37の出力とを入力として、CSA33が、次式に示す加算を行う。
【数2】

かかる加算結果はそれぞれ、中間結果保持レジスタ34、35に保存される。
【0019】(サイクルタイム3)中間結果保持レジスタ34、中間結果保持レジスタ35に保存されたデータを入力として、CPA36が加算を行う。かかるCPA36の加算結果は、反転回路38により、反転されて出力される。そして、セレクタ31が、反転回路38の出力結果(CPA36の反転)を選択し、次式に示す演算結果がレジスタ32に書き込まれる。
【数3】

2回目以降の加算動作は、上述のサイクルタイム2および3の処理を繰り返し行うことによって、実現され、所望の結果が出力レジスタ32の出力として得られることとなる。
【0020】
【発明が解決しようとする課題】しかしながら、上述した従来の累積演算回路には、以下の問題点があった。図10を用いてかかる問題点を説明する。即ち、演算の実行制御として、演算処理の高速化を図るために、パイプライン制御を行うことが一般的に行われている。パイプライン制御とは一般に、各命令を複数の処理段階に分け、任意の時点において、一群の命令が同時に種々の処理段階にあることができるようにする実行制御の方法である。かかるパイプライン制御により、同一サイクルタイムにおいて、先の命令の終了を待たずに、同時にn命令が並列に実行可能となるのである。
【0021】ところが、従来の累積演算における毎回(2回目以降)の演算は、出力レジスタに出力された前回の演算結果を読み出し、この値を参照することにより行われていた。即ち、図10に示すように、毎回の演算(図10中の命令1、2、3・・・)は、CSAでの加算段階とCPAでの加算段階との2段階により構成されており、2サイクルタイムで処理が完了する。本来、パイプライン制御の下では、命令1の終了を待たずに、命令2の実行が可能なはずである。しかしながら、n回目(n>2)の命令においては、(n−1)回目の演算結果を入力とするために、第2段階であるCPAでの加算段階の出力レジスタへの結果書き込み終了を待って、出力レジスタの内容を、T22、T32に示すタイミングで参照する必要があった。このため、各命令の実行がシリアライズされてしまい、パイプライン動作に、T21、T31に示すような空きが生じてしまっており、この結果、累積演算の処理終了までに長時間を要することとなっていた。
【0022】以上のように、本発明は、従来技術における、累積演算など、連続する命令を実行する際に、パイプライン処理に冗長性(動作に空きが生じた)があったために、演算時間がかかり、演算性能が低下していたという問題点を解決するためになされたものである。
【0023】そして、その目的とするところは、連続した命令を実行する際に、演算中の途中結果データを用いて前回の演算結果に基づく演算を実行することによって、前回の演算結果の確定を待たずに次の演算を行い、パイプライン処理の冗長性を排除して、回路面積を増大させることなく演算時間を短縮し、演算性能を向上させることを可能とする演算回路を提供することにある。
【0024】また、他の目的は、乗算と、データ依存のある積和演算とを、同一の演算サイクルで実行し、パイプライン制御をより容易にすることにある。
【0025】また、他の目的は、積差演算(積を減算データとして用いる演算)において、逐一前回の演算結果の補数を用いることなく演算を行うことによって、積差演算の効率化を図ることにある。
【0026】
【課題を解決するための手段】要するに、本発明(請求項1)は、複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、該中間データ保持手段に保持された前記第1及び第2の中間データに従った加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データに基づくデータを保持する結果データ保持手段と少なくとも具備し、前回の演算の結果を用いて連続して演算を行う場合には、前記第1の加算回路は、初回の演算の際には、予め設定された初期値に基づく初期データおよび0データをそれぞれ前記入力データの一部として加算を行い、2回目以降の演算の際には、前記中間データ保持手段にそれぞれ保持される前記第1および第2の中間データをそれぞれ前記入力データの一部として次の加算を行うことを特徴とするものである。
【0027】上記構成によれば、累積加算、累積演算など、前回の演算の結果を用いて連続して演算を行う場合に、演算の途中結果データを用いて演算を行うことが可能となる。つまり、演算結果のレジスタへの書き込みを待たずに次の命令を実行することにより、パイプライン処理に空きが生じることなく、毎回の命令を並行処理することが可能となるのである。尚、ここで、0データとは、全ビットが0であるall zeroのデータをいう。
【0028】また、請求項2の発明においては、被乗数と乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、前記2つの入力データに対応する2の出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、該中間データ保持手段に保持された前記第1及び第2の中間データに基づき加算を行い、1つの結果データを出力する第2の加算回路と、前記第2の加算回路の出力データに基づくデータを保持する結果データ保持手段とを少なくとも具備し、前回の演算の結果を用いて連続して演算を行う場合には、前記第1の加算回路は、初回の演算の際には、予め設定された初期値に基づく初期データまたは0データを前記入力データの一部として、前記乗算回路からの入力データとの加算を行い、2回目以降の演算の際には、前記中間データ保持手段にそれぞれ保持される第1および第2の中間データに基づくデータをそれぞれ前記入力データの一部として、前記乗算回路からの次の入力データとの加算を行うこととなる。これにより、積和演算、積差演算など、乗算の積を加数または減数として、前回の演算の結果を用いて連続して演算を行う場合にも、請求項1と同様の効果が得られることとなる。また、乗算と、データ依存のある積和演算や積差演算とを同一のサイクルで実行できるので、パイプライン制御をより容易に行うことが可能となる。加えて、積差演算の場合には、逐一前回の結果の補数を用いることなく毎回の演算を行うので、さらに、演算の効率化を図ることが可能となる。
【0029】また、請求項3の発明においては、複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値および前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに従って加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記加算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値を、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は第2の中間データをそれぞれ選択することとなる。これにより、特に累積加算において、請求項1と同様の効果を得ることが可能となる。
【0030】また、請求項4の発明においては、減算を行う演算回路であって、複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとして保持する中間データ保持手段と、予め設定された初期値の反転データおよび前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1および第2の中間データに従った加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記減算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択することとなる。これにより、特に累積減算において、請求項1と同様の効果を得ることが可能となる。
【0031】また、請求項5の発明においては、積和演算を行う演算回路であって、被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとして保持する中間データ保持手段と、予め設定された初期値および前記第1の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データおよび前記第2の中間データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データを結果データとして保持する結果データ保持手段とを少なくとも具備し、連続して前記積和演算を行う場合には、初回の演算の際には、前記第1の選択手段は前記初期値を、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択することとなる。これにより、特に、積和演算において、請求項2と同様の効果を得ることが可能となる。
【0032】また、請求項6の発明においては、被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値の反転データ、前記第1の中間データ、0データ、および該第1の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データ、前記第2の中間データ、および該第2の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合であって、さらに前記初期値を初回の減算の被減数とする場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択し、前記乗算回路からの入力データを初回の減算の被減数とする場合には、初回の演算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、前記桁上げ信号を用いて1を加算することとなる。
【0033】また、請求項7の発明においては、被乗数および乗数の入力に従った乗算を行う乗算回路と、前記乗算回路からの2つの入力データを含む複数の入力データに基づく加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、0データ、前記第1の中間データ、および該第1の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、0データ、前記第2の中間データ、および該第2の中間データの反転データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1及び第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合には、初回の減算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、前記桁上げ信号を用いて1を加算することとなる。
【0034】さらに、請求項8の発明においては、外部から入力される乗算結果データを含む複数の入力データに従った加算を行い、2つの出力データを出力する第1の加算回路と、前記2つの出力データのそれぞれに対応して設けられ、該2つの出力データを第1と第2の中間データとしてそれぞれ保持する中間データ保持手段と、予め設定された初期値の反転データ、前記第1の中間データ、該第1の中間データの反転データ、および0データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第1の選択手段と、前記第2の中間データ、該第2の中間データの反転データ、および0データを含むデータのいずれかを選択し、前記第1の加算回路への1つの入力データとする第2の選択手段と、前記中間データ保持手段に保持された前記第1および第2の中間データに基づき、桁上げ加算を行い、1つの出力データを出力する第2の加算回路と、前記第2の加算回路の出力データの反転データを保持する結果データ保持手段とを少なくとも具備し、乗算の積を減数として被減数からの減算を連続して行う場合であって、さらに前記初期値を初回の減算の被減数とする場合には、初回の演算の際には、前記第1の選択手段は前記初期値の反転データを、前記第2の選択手段は0データをそれぞれ選択し、2回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択し、乗算回路からの入力データを初回の減算の被減数とする場合には、初回の演算の際には、前記第1および第2の選択手段は0データをそれぞれ選択し、2回目の演算の際には、前記第1の選択手段は前記第1の中間データの反転データを、前記第2の選択手段は前記第2の中間データの反転データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に、桁上げ信号(キャリーイン)を用いて1を加算し、3回目以降の演算の際には、前記第1の選択手段は前記第1の中間データを、前記第2の選択手段は前記第2の中間データをそれぞれ選択するとともに、前記第2の加算回路は、さらに、前記桁上げ加算の際に前記桁上げ信号を用いて1を加算することとなる。これら請求項6乃至8の発明によれば、特に積差演算において、請求項2と同様の効果を得ることが可能となる。
【0035】さらに、請求項9の発明においては、上記演算回路はさらに、前記第2の加算回路の出力データおよび該出力データの反転データのいずれかを選択して前記結果データ保持手段への1つの入力とする第3の選択手段を具備し、乗算演算を行う際には、前記第1および第2の選択手段はともに0データを、前記第3の選択手段は前記第2の加算回路の出力データをそれぞれ選択することとなる。これにより、積和演算回路や積差演算回路に乗算回路も併せて搭載できるので、回路規模の増大を抑制することができる。
【0036】さらに、請求項10の発明においては、前記第1の加算回路が出力する前記2つの出力データの一方はCarryデータであり、他方はSumデータであることにより、キャリーセーブ形式の演算において、上述した構成を適用することが可能となる。
【0037】
【発明の実施の形態】第1の実施形態以下、本発明の第1の実施形態について、図面を参照しながら詳細に説明する。本実施形態は、累積加算において、前回の演算の中間データの利用に基づく演算実行の機能を実現するものである。
【0038】図1は、第1の実施形態の回路ブロック図を示すものである。第1の実施形態は、レジスタにロードするデータ(初期値)又は加算器からの出力のいずれかを選択するセレクタ1、セレクタ1の出力を保持するレジスタ2、レジスタ2の出力と後述の中間結果保持レジスタ4の出力のいずれかを選択するセレクタ9、後述のレジスタ5の出力と0データ(all zero)のいずれかを選択するセレクタ10、入力データA,B、セレクタ9の出力、セレクタ10の出力の4つを入力とする4入力2出力加算回路(4-2Compactor)3、4-2Compactor3の2出力をそれぞれ保存する中間結果保持レジスタ4,5、中間結果保持レジスタ4、5の出力を入力とする桁上げ伝播加算器(CPA)6により構成される。
【0039】ここで、4-2Compactor3につき、さらに説明する。図2に、4-2Compactor3の真理値表を示す。図2中において、a,b,c,dは4入力信号のそれぞれを表す。Ciは、入力桁上げ信号を表す。また、Sは、出力和信号を、CおよびCoは、出力桁上げ信号を表す。4-2Compactor3の演算式は、次式で示される通りである。尚、CとCoとは、等価の桁上げ信号であるので、入れ替え可能である。
【0040】
【数4】

【0041】また、4-2Compactor3を、図3に示すように、nビット接続する構成も可能である。かかる場合、下位側の桁あげ信号Coは、隣あう上位側の桁あげ入力Ciに接続される。尚、最下位ビットの桁あげ入力信号Ciは外から入力することが可能であるが、ここでは、特に記述しない限りは最下位ビットの桁あげ入力信号Ciに対しては0を入力することとする。
【0042】尚、2出力の加算機能を実現する回路は、4-2Compactorには限定されない。かかる加算回路は、中間結果保持レジスタ4、5から入力される2信号をそれぞれ加算し、2出力とすることができればよい。従って、4-2Compactorの代わりに、Carry Save Adder2段を用いても、同様の動作をさせることが可能である。また、入力データ前に論理回路が付加されている場合には、適宜、それらの論理と組合せて演算を行う構成とすることも可能である。
【0043】第1の実施形態に係る演算回路は、上記のように構成されており、以下、その動作につき説明する。
【0044】(サイクルタイム1)セレクタ1が、初期値を選択し、その結果をレジスタ2に書き込む。すなわち、レジスタ2に初期値のロードを行う。以下、初期値をPとして、以下の説明を行う。
【0045】(サイクルタイム2)セレクタ9が、レジスタ2に保存されているデータを選択する。また、セレクタ10が、all zeroデータを選択する。4-2Compactor3が、入力データA,入力データB,及び、セレクタ9,セレクタ10の出力の加算を行い、2つの出力データは中間結果保持レジスタ4,5にそれぞれ保存される。
【0046】(サイクルタイム3)CPA6が、レジスタ4、レジスタ5に保存されたデータの加算を行う。セレクタ1が、CPA6の加算結果を選択し、加算結果データが出力レジスタ2に書き込まれる。ここで、実行される演算は次式で表される。
【0047】(P+A+B)また、セレクタ9が、中間結果保持レジスタ4の出力を選択し、4-2Compactor3に対して出力する。同時に、セレクタ10が、中間結果保持レジスタ5の出力を選択し、4-2Compactor3に対して出力する。
【0048】これと同一サイクルで、次の加算命令の入力データA’,B’も4-2Compactor3に入力され、加算される。加算結果は、レジスタ4,5にそれぞれ保存される。ここで、レジスタ4,5には、累積加算された結果がキャリーセーブ形式で保持されていることになる。ここでの加算結果は、次式で表される。
【0049】(P+(A+B)+(A’+B’))
次のサイクル以降では、サイクルタイム3の動作のみを、累積演算に必要な回数繰り返すことにより、次々に、2つの入力データの加算結果が累積されていくこととなる。
【0050】本実施形態による効果を、図4を用いて説明する。即ち、上述した動作を、時系列に従って説明すると、図4に示すようになる。第1の実施形態によれば、命令1におけるCPA段階の処理終了を待たずに中間結果保持レジスタ4、5の中間データを用いて、次の命令2の、従来技術におけるCSA段階の処理(本実施形態においては4-2Compactor段階の処理)が行える。このため、前回の命令の第2段階と今回の命令の第1段階との処理が並行的に行え、並行処理効率が倍になっている。このように、従来技術におけるパイプライン処理の冗長性を排除して、所望の結果を得るために要する処理時間が大幅に短縮され、演算性能の向上を図ることが可能となった。
【0051】第2の実施形態以下、本発明の第2の実施形態について、第1の実施形態と異なる点のみ、図面を参照しながら詳細に説明する。本実施形態は、累積減算において、前回の演算の中間データの利用に基づく演算実行の機能を実現するものである。
【0052】まず、第2の実施形態の前提とする演算式につき、説明する。
【0053】第2の実施形態では、初期値−(入力A0+入力B0)−(入力A1+入力B1)… −(入力An+入力Bn
という減算を繰り返し行うものである。今、初期値をP、入力を命令の順にそれぞれ(A0,B0)(A1,B1)…(An+Bn)とすると、【数5】

となる。従って、(1)により、初期値の反転に対して入力A0,B0を加算し、その加算結果に、さらに、入力A1,B1を加算、さらにその結果に加算と順次データを加算していけばよい。そして、正しい出力結果を得るためには、その加算結果(SumとCarry)をCPAで加算し、結果の反転をとればよいこととなる。
【0054】図5は、第2の実施形態の回路ブロック図を示すものである。上述した初期値の反転、及びCPAの加算結果の反転用のインバータ等の反転回路7、8がそれぞれ付加された構成となっている。即ち、第2の実施形態は、レジスタにロードするデータ(初期値)又は加算器からの出力の反転のいずれかを選択するセレクタ1、セレクタ1の出力を保持するレジスタ2、レジスタ2の出力の反転をとって出力する反転回路7、反転回路7の出力と中間結果保持レジスタ4の出力のいずれかを選択し出力するセレクタ9、後述のレジスタ5の出力と0データ(allzero)のいずれかを選択するセレクタ10、入力データA,B、セレクタ9の出力、セレクタ10の出力の4つを入力とする4入力2出力加算回路(4-2Compactor)3、4-2Compactor3の2出力をそれぞれ保存する中間結果保持レジスタ4,5、中間結果保持レジスタ4、5の出力を入力とする桁上げ伝播加算器(CPA)6、CPA6の出力の反転を出力する反転回路8により構成される。
【0055】尚、2出力の加算機能を実現する回路が、4-2Compactorには限定されない点は、第1の実施形態と同様である。
【0056】第2の実施形態に係る演算回路は、上記のように構成されており、以下、その動作につき説明する。
【0057】(サイクルタイム1)セレクタ1により、初期値を選択し、その結果をレジスタ2に書き込むことでレジスタ2に初期値Pのロードを行う。
【0058】(サイクルタイム2)反転回路7が、レジスタ2に保存されているデータの反転をとって出力し、セレクタ9がこの反転結果を選択する。また、セレクタ10が、all zeroデータを選択する。4-2Compactor3が、次式で示されるように、入力A0,入力B0、及び、セレクタ9,セレクタ10の出力の加算を行い、2つの出力データは中間結果レジスタ4,5にそれぞれ保存される。
【数6】

【0059】(サイクルタイム3)CPA6が、レジスタ4、レジスタ5に保存されたデータの加算を行う。反転回路8が、加算結果の反転をとってセレクタ1に出力し、セレクタ1は、CPA6の加算結果の反転を選択して、加算結果の反転がレジスタ2に書き込まれる。次式で示される演算結果がこの時点での求める結果である。
【数7】

それと同時に、セレクタ9がレジスタ4の出力を選択し、4-2Compactor3に対する入力とする。セレクタ10がレジスタ5の出力を選択し、やはり、4-2Compactor3に対する入力とする。
【0060】また、これと同一サイクルで、次の命令の入力データA1,B1も4-2Compactor3に入力され、次式に示されるように、セレクタ9,セレクタ10の出力A0,B0とともに加算される。
【数8】

レジスタ4,5は、この加算結果をそれぞれ保存する。
【0061】次のサイクル以降では、サイクルタイム3の動作のみを、累積演算に必要な回数繰り返すことにより、次々に、2つの入力データの加算結果を初期値から減算していくこととなる。そして、最終的に、出力レジスタ2から所望の結果が得られるのである。
【0062】第2の実施形態によれば、以下のような効果を奏する。即ち、累積減算のように、入力されるデータの加算結果を初期値から次々に減算していく場合にも、前回の演算結果データ書き込みを待たずに、中間結果保持レジスタ4、5の中間データを次の命令の入力データとすることができる。このため、第1の実施形態と同様、所望の演算結果を得るために要する処理時間が大幅に短縮され、演算性能の向上を図ることが可能となった。
【0063】第3の実施形態以下、本発明の第3の実施形態について、第1、第2の実施形態と異なる点のみ、図面を参照しながら詳細に説明する。
【0064】第3の実施形態は、積和演算回路において、本発明の前回の演算の中間データの利用に基づく演算実行の機能を実現するものである。
【0065】即ち、第3の実施形態では、次の演算を実行するものである。
【0066】初期値/乗算結果+(被乗数0×乗数0)+(被乗数1×乗数1)+…尚、最初に与えられるのは、予め設定されている初期値、又は乗算回路からの出力結果データのいずれでもよい。
【0067】図6は、第3の実施形態の回路ブロック図を示すものである。第3の実施形態は、レジスタにロードするデータ(初期値)又は加算器からの出力のいずれかを選択するセレクタ1、セレクタ1の出力を保持するレジスタ2、レジスタ2の出力、中間結果保持レジスタ4の出力、又は0データ(all zero)のいずれかを選択するセレクタ9、レジスタ5の出力又は0データ(all zero)のいずれかを選択するセレクタ10、被乗数と乗数入力を受けてキャリーセーブ形式の2出力として演算結果を出力する乗算回路14,乗算回路14からの出力データをSm,Cmとしてセレクタ9の出力、セレクタ10の出力、乗算回路の出力Sm,Cmの4つを入力とする4入力2出力加算回路(4-2Compactor)3、4-2Compactor3の2出力をそれぞれ保存する中間結果保持レジスタ4,5、中間結果保持レジスタ4、5の出力を入力とする桁上げ伝播加算器(CPA)6により構成される。
【0068】尚、2出力の加算機能を実現する回路は、第1の実施形態と同様、4-2Compactorには限定されず、CSAを2段構成とすることや、乗算回路中の加算回路との適宜の組み合わせで適当な入力を得ることにより、加算を代用することができる。
【0069】第3の実施形態に係る演算回路は、上記のように構成されており、以下、その動作につき説明する。
【0070】(サイクルタイム1)セレクタ1が、初期値を選択し、その結果をレジスタ2に書き込むことにより、初期値Pのロードを行う。
【0071】(サイクルタイム2)乗算回路14が、被乗数×乗数の演算を行い、乗算結果としてCm(図6のS3),Sm(S4)を出力し、かかるS3、S4がそれぞれ、4-2Compactor3に入力される。セレクタ9が、出力レジスタ2に保存されているデータを選択する。尚、ここで、Cmとは乗算回路からの出力Carryデータを、Smとは、乗算回路からの出力Sumデータを示す。
【0072】また、セレクタ10が、all zeroデータを選択する。4-2Compactor3が、Cm(S3),Sm(S4)及び、セレクタ9,セレクタ10の出力の加算を行い、2つの出力データは中間結果保持レジスタ4,5にそれぞれ保存される。この段階では、次の演算が実行されたこととなる。(P+Cm+Sm)
【0073】(サイクルタイム3)CPA6が、レジスタ4、レジスタ5に保存されたデータの加算を行う。セレクタ1が、CPA6の加算結果を選択し、結果データがレジスタ2に書き込まれる。
【0074】また、セレクタ9が、中間結果保持レジスタ4の出力を選択し、4-2Compactor3に対して出力する。同時に、セレクタ10が、中間結果保持レジスタ5の出力を選択し、4-2Compactor3に対して出力する。
【0075】これと同一サイクル内で、乗算回路14が次の乗算を行い、出力Cm’(S3),Sm’(S4)を得る。Cm’,Sm’が4-2Compactor3に入力され、加算される。加算結果は、中間結果保持レジスタ4,5にそれぞれ保存される。これで、レジスタ4,5には、次に示す累積加算された結果がキャリーセーブ形式で保持されていることになる。
【0076】(P+Cm+Sm+Cm’+Sm’)
次のサイクル以降では、サイクルタイム3の動作のみを、累積演算に必要な回数繰り返すことにより、次々に、乗算結果が累積演算されていくこととなる。そして、最終的に、出力レジスタ2から所望の結果が得られるのである。
【0077】また、上述の動作説明においては、初期値をロードすることによって処理を開始したが、最初に、乗算回路14により乗算命令を実行し、この乗算結果に基づき、次に積和演算命令を実行することも可能である。
【0078】この場合には、サイクルタイム1において乗算を行い、セレクタ9、10がそれぞれ0データ(all zero)を選択する。そして、4-2Compactor3の出力が、中間結果保持レジスタ4,5に保持される。その後、サイクルタイム3の処理を繰り返すこととなる。
【0079】尚、この演算回路を用いて、単独の乗算演算を行うことも可能である。即ち、積和演算ではなく、乗算演算を行いたい場合には、出力レジスタ2、中間結果レジスタ4、5のどちらからも値をとらず、セレクタ9および、セレクタ10の双方ともが、0データ(all zero)を選択すればよい。従って、かかる乗算演算を行わない場合にはセレクタ9の0入力は不要となる。このように、積和演算と乗算演算の機能を1回路内に搭載することにより、回路規模の増大を抑えることができる。
【0080】第3の実施形態によれば、第1、第2の実施形態でもたらされる効果が積和演算において得られるのに加え、乗算とデータ依存のある積和演算とが同一のサイクルで実行可能となる。このため、パイプライン制御をより容易に行なうことが可能となった。
【0081】第4の実施形態以下、本発明の第4の実施形態について、第3の実施形態と異なる点のみ、図面を参照しながら詳細に説明する。
【0082】第4の実施形態は、積差演算回路において、本発明の前回の演算の中間データの利用に基づく演算実行の機能を実現するものである。尚、ここで積差演算とは、積を減算データとして用いる演算をいう。
【0083】まず、第4の実施形態の前提とする演算式につき、説明する。第4の実施形態では、次の演算を実行するものである。
【0084】初期値/(被乗数0×乗数0)−(被乗数1×乗数1)−(被乗数2×乗数2)…−(被乗数n×乗数n
尚、最初に与えられるのは、予め設定されている初期値、又は乗算回路からの出力結果データのいずれでもよい。
【0085】ここで、初期値から減算していく場合には、第2の実施形態で示した式(1)と同じとなる。
【0086】また、乗算結果から減算している場合には、初回の乗算結果がキャリーセーブ形式で保存されているので、次式で示される演算式を実行することとなる。
【0087】最初の乗算結果をSm0(Sum)、Cm0(Carry)とし、乗算回路からの出力を順に、(Sm1,Cm1)(Sm2,Cm2)…(Smn,Cmn)とすると、【数9】

となる。したがって、式(2)より、最初の乗算結果の出力Sm0,Cm0のそれぞれの反転と、入力Sm1,Cm1を加算し、その加算結果に、さらに、入力Sm2,Cm2を加算、さらにその結果に加算と順次データを加算していけばよい。そして、(2)より、正しい出力結果を得るためには、その加算結果(SumとCarry)に対して、さらに1を加算する必要がある。この場合には、加算を行うCPAの最下位ビットのキャリーインを用いて、1を入力してやればよい。その後、CPAの加算結果の反転をとれば(2)の式を満たすこととなる。
【0088】図7は、第4の実施形態の回路ブロック図を示すものである。第4の実施形態は、セレクタ1、結果出力レジスタ2、反転回路7、反転回路11、反転回路12、セレクタ9、セレクタ10、乗算回路14、4入力2出力加算回路(4-2Compactor)3、中間結果保持レジスタ4、5、桁上げ伝播加算器(CPA)6、セレクタ13、反転回路8により構成される。
【0089】セレクタ1は、レジスタにロードするデータ(初期値)、CPA6からの出力、又はCPA6からの出力の反転のいずれかを選択出力する。
【0090】結果出力レジスタは、セレクタ1の出力結果を保持する。
【0091】反転回路7は、結果出力レジスタ2の出力の反転をとって出力する。反転回路11は、中間結果保持レジスタ4の出力の反転をとって出力する。
【0092】セレクタ9は、中間結果保持レジスタ4の出力、反転回路7の出力、反転回路11の出力、又は0データ(all zero)のいずれかを選択出力する。
【0093】反転回路12は、中間結果保持レジスタ5の出力の反転をとって出力する。
【0094】セレクタ10は、中間結果保持レジスタ5の出力、反転回路12の出力、又は0データ(all zero)のいずれかを選択出力する。
【0095】乗算回路14は、被乗数入力と乗数入力とを受けて、キャリーセーブ形式の2出力として演算結果を出力する。
【0096】4入力2出力加算回路(4-2Compactor)3は、乗算回路14からの出力データをS3(Sm),S4(Cm)、セレクタ9の出力、セレクタ10の出力の4つを入力として、S1、S2の2信号を出力する。
【0097】中間結果保持レジスタ4,5は、4-2Compactor3の2出力をそれぞれ保存する。
【0098】桁上げ伝播加算器(CPA)6は、中間結果保持レジスタ4、5の出力を入力として、加算を行う。
【0099】セレクタ13は、CPA6のキャリーインに接続し、0又は1を選択する。
【0100】反転回路8は、CPA6の出力の反転をとって出力する。
【0101】尚、2出力の加算機能を実現する回路は、第1の実施形態等と同様、4-2Compactorには限定されず、CSAを2段構成とすることや、乗算回路中の加算回路の適宜の組み合わせで適当な入力を得ることにより、加算を代用することができる。
【0102】第4の実施形態に係る演算回路は、上記のように構成されており、以下、その動作につき、初期値から減算を行う場合(1)と、乗算結果から減算を行う場合(2)とに分けて説明する。
【0103】(1)初期値から減算する場合【0104】(サイクルタイム1)セレクタ1が、初期値を選択し、その結果がレジスタ2に書き込まれることで、初期値Pのロードを行う。
【0105】(サイクルタイム2)乗算回路14が、被乗数×乗数の演算を行い、結果Cm1,Sm1を出力して、4-2Compactor3に対する入力とする。また、セレクタ9が出力保持レジスタ4からの反転データを選択し、セレクタ10が、all zeroデータを選択する。4-2Compactor3が、Cm1,Sm1、及びセレクタ9,セレクタ10の出力の加算を行う。4-2Compactor3の2つの出力は、中間結果保持レジスタ4,5にそれぞれ保存される。この時点では、次式の演算が実行されたこととなる。
【数10】

【0106】(サイクルタイム3)CPA6が、中間結果保持レジスタ4、中間結果保持レジスタ5に保存されたデータの加算を行う。この際、セレクタ13で0が選択されて、キャリーインとして、入力される。CPA6での加算結果の反転が反転回路8により出力され、セレクタ1が、かかるCPA6の加算結果の反転を選択する。そして、次式で示す結果データがレジスタ2に書き込まれる。
【0107】
【数11】

これと同時に、セレクタ9が中間結果保持レジスタ4の出力を選択し、4-2Compactor3に対する入力とする。また、セレクタ10が中間結果保持レジスタ5の出力を選択し、4-2Compactor3に対する入力とする。
【0108】さらに同一サイクル内に、乗算回路14が、同時に次の乗算命令を実行して、出力Cm2,Sm2を得、これらを4-2Compactor3に対する入力とする。4-2Compactor3での次式で示される加算結果は、中間結果保持レジスタ4,5にそれぞれ保存される。
【数12】

【0109】次のサイクル以降では、サイクルタイム3の動作のみを、積差演算に必要な回数繰り返すことにより、次々に、初期値から乗算結果が減算されていくこととなる。ここで、出力レジスタ2からは、常に、演算命令の結果が得られることとなる。
【0110】尚、第3の実施形態と同様に、第4の実施形態に係る演算回路においても、単独の乗算演算も実行可能である。この場合には、出力レジスタ2、中間結果レジスタ4、5のどちらからも値をとらず、セレクタ9および、セレクタ10の双方ともが、0データ(all zero)を選択し、また、セレクタ13が、CPA6のキャリーインの入力として0を選択し、さらにセレクタ1によって、CPA6の出力をそのまま出力レジスタ2に保持するようにすればよい。このように、積差演算と乗算演算の機能を1回路内に搭載することにより、回路規模の増大を抑えることができる。
【0111】尚、かかる乗算演算を行わない場合にはセレクタ9からの0入力は不要となる。また、セレクタ13からのキャリーイン入力も不要となり、CPA6からのデータの反転を伴わない直接のセレクタ1への入力も不要となる。
【0112】また、(2)で説明するような乗算結果からの積差演算を行わず、(1)のように、初期値からの積差演算しか行わない場合には、セレクタ9に対する反転回路11を用いた反転入力、セレクタ10に対する反転回路12を用いた反転入力、及びセレクタ13からのキャリーイン入力は不要となる。
【0113】(2)乗算結果から減算する場合次に、最初に式(2)のように乗算命令を実行し、その後、その乗算結果から、次々に乗算結果を減算していく場合について動作を説明する。
【0114】(サイクルタイム1)乗算回路14が、被乗数×乗数の演算を行い、結果Cm0、Sm0 を出力し、4-2Compactor3に対する入力とする。セレクタ9および、セレクタ10が、0データ(all zero)を選択し、その結果を4-2Compactor3に対する入力とする。4-2Compactor3の2つの出力(S1、S2)は、中間結果保持レジスタ4,5にそれぞれ保存される。この時点では、次式の演算が実行されたこととなる。
【0115】(Sm0+Cm0
(サイクルタイム2)CPA6が、中間結果保持レジスタ4、5に保存されたデータの加算を行う。この際、セレクタ13が、キャリーインとして0を選択する。CPA6での加算結果は、そのままセレクタ1によって選択され、出力レジスタ2に書き込まれる。即ち、乗算結果(Cm0+Sm0)が出力レジスタ2に格納される。
【0116】同時に、乗算回路14が、次の乗算命令に対応して、被乗数×乗数の演算を行い、結果Cm1,Sm1を出力して、4-2Compactor3に対する入力とする。
【0117】反転回路11が、中間結果保持レジスタ4に保存されているデータの反転をとって出力し、セレクタ9が反転結果を選択する。また、反転回路12が、中間結果保持レジスタ5に保存されているデータの反転をとって出力し、セレクタ10が、この反転結果を選択する。4-2Compactor3が、次式で示されるように、Cm1,Sm1および、セレクタ9、セレクタ10の出力の加算を行う。4-2Compactor3の2つの出力は中間結果保持レジスタ4,5に保存される。
【数13】

【0118】(サイクルタイム3)CPA6が、中間結果保持レジスタ4、中間結果保持レジスタ5に保存されたデータの加算を行う。この際、セレクタ13が、キャリーインとして1を選択して、CPA6に対する入力とする。ここで、次式で示されるCPA6での加算結果の反転が、反転回路8により出力され、セレクタ1により、このCPA6の加算結果の反転が選択され、レジスタ2に書き込まれる。
【数14】

【0119】これと同時に、セレクタ9が中間結果保持レジスタ4の出力を選択し、4-2Compactor3に対する入力とする。また、セレクタ10が、中間結果保持レジスタ5の出力を選択し、4-2Compactor3に対する入力とする。
【0120】さらに、同一サイクル内で、同時に乗算回路14が、次回の乗算命令の演算を行い、出力Cm2,Sm2を得て、これらを4-2Compactor3に対する入力とする。4-2Compactor3での次式で示される加算結果は、中間結果保持レジスタ4,5によってそれぞれ保存される。
【数15】

【0121】次のサイクル以降では、サイクルタイム3の動作のみを、必要な回数繰り返すことにより、次々に、乗算結果を初回の乗算結果から減算していくこととなる。また、出力レジスタからは常に、演算命令の結果を得ることができる。
【0122】第4の実施形態によれば、第1、第2の実施形態でもたらされる効果が積差演算において得られるのに加え、乗算とデータ依存のある積差演算とが同一のサイクルで実行可能となる。このため、パイプライン制御をより容易に行なうことが可能となった。
【0123】さらに、第4の実施形態に係る演算回路は、第1から第3の実施形態のもたらす機能をすべて包含した構成となっている。即ち、積差演算のみならず、累積加算、累積減算、積和演算の機能のすべてを1つの回路に搭載することとなる。このため、全体の回路規模を大幅に削減し、演算性能を向上することができる。
【0124】また、第4の実施形態が用いる乗算結果から減算を行うための演算式(2)によって、かかる積差演算の著しい効率化が図られている。即ち、従来においては、毎回の演算で最後に補数をとって、その値を用いて次の演算を行っていたため演算自体に冗長性を有していた。しかしながら、第4の実施形態においては、毎回の演算で補数をとってこれによる演算を行う必要はなく、最終結果データを得る際に、結果に対して+1を加算して反転をとれば足りる。このため、演算性能が大幅に向上している。
【0125】尚、第4の実施形態において、(1)に示したような初期値からの積差演算を行わない場合には、出力レジスタ2からセレクタ9への入力は不要となる。
【0126】
【発明の効果】以上説明したように、本発明によれば、以下に記載されたような効果を奏する。即ち、本発明においては、連続した命令を実行する際に、演算の途中結果データを用いることで、演算結果のレジスタへの書き込みを待たずに次の命令を実行する機能を提供するので、パイプライン制御の下、前回の演算の結果を用いる連続する複数命令を並行処理することが可能となる。従って、連続した命令実行の際に演算性能を向上を図ることが可能となるという効果が得られる。
【0127】また、対象となる演算は、累積加算、累積減算の他、積和演算、積差演算など、前回の命令の結果を参照することにより演算を行う演算回路であれば、幅広く適用することができる。
【0128】特に、画像処理を中心とした、マルチメディア関連分野においては、上述した積和演算、積差演算が多用されるため、かかる応用分野において本発明のもたらす有用性は非常に高いものといえる。
【0129】また、乗算と、データ依存のある積和演算や積差演算とを、同一のサイクルで実行できるので、パイプライン制御がより容易になるという効果が得られる。
【0130】さらに、積和演算回路及び積差演算回路において、乗算も併せて実行できるので、両者を共に実行する必要がある場合にも、回路規模を増大することなく、汎用性のある積和演算回路及び積差演算回路を提供することができるという効果が得られる。
【0131】また、積差演算において、逐一前回の演算結果の補数を用いることなく毎回の演算を行うので、積差演算の効率化を図ることが可能になるという効果が得られる。
【0132】このように、本発明を用いれば、連続する演算命令を実行する際に、パイプライン制御の提供する並行処理環境を十分に活用できる演算回路を提供することとなる。従って、回路規模の増大は抑制しつつ、演算性能の向上を図り、製品コストパフォーマンスの向上をもたらすことができるのであり、産業上その効果のきわめて大きい発明である。
【出願人】 【識別番号】000003078
【氏名又は名称】株式会社東芝
【出願日】 平成10年(1998)5月8日
【代理人】 【弁理士】
【氏名又は名称】三好 秀和 (外3名)
【公開番号】 特開平11−327875
【公開日】 平成11年(1999)11月30日
【出願番号】 特願平10−126426