以下に本発明の実施例につき詳細に説明する。
最初に絶対値加算器について説明する。2進絶対値加算器とは以下の動作を行う演算器である。すなわち、減算時に減数オペランドに対し2の補数をとって得た結果を非減数オペランドに加算する。そして減算結果が負となる場合には加算結果に対し2の補数をとる(再補数化)ことで減算結果の絶対値を得る。
10進絶対値加算器とは以下の動作を行う演算器である。すなわち、減算時に減数オペランドに対し10の補数をとって得た結果を非減数オペランドに加算する。そして減算結果が負となる場合には加算結果に対し10の補数をとる(再補数化)ことで減算結果の絶対値を得る。
本発明の実施例1は以下の特徴を有する。
(1)BCD(Binary Coded Decimal: 2進化10進数)コードで表現された数値を演算する10進絶対値加算器である。
(2)高速2進加算器を使って10進加算器を実現することにより、高速な10進絶対値加算器を実現することができる。
(3)高速10進絶対値加算器を実現するにあたって、2進加算器のディジット(digit)単位に、A+B、A+B+1、A+B+6、A+B+7、A+B+10、A+B+11に相当する部分和を求める回路を設ける。ここでディジットとは10進数の一桁(すなわちBCDコードにおいて4ビット分)を意味し、A,Bは夫々ディジット単位のオペランドを示す。したがって部分和とはディジット単位の和を意味する。
(4)加算時には、キャリー(すなわち桁上がり、以下同様)条件によって、A+B、A+B+1、A+B+10、A+B+11を用いて演算結果を求める。
(5)減算時に、結果が正になるときは、キャリー条件によって、A+B、A+B+1、A+B+10、A+B+11を用いて結果を求める。他方、結果が負になるときは、キャリー条件によって、A+B、A+B+1、A+B+6、A+B+7の夫々の1の補数をとって絶対値化する。すなわち、負の減算結果の絶対値を得る。
(6)上記A+B+6、A+B+7、A+B+10、A+B+11に相当する部分和を、通常のCLA(Carry Look Ahead)型4ビット加算器と同程度の規模と速度で求めることができる。
参考のために図1にBCDコードの2進数による表現と10進数との対応関係を示す。
本発明の実施例1における、高速2進加算器をつかった10進加算器を実現する方式は以下の通りである。
加算(すなわち同符号の数同士の加算)時には、片方のオペランドの各ディジットに対し、あらかじめ+6を行うことで、高速2進加算器でディジット間でキャリーが伝播できるようにする。すなわち9(2進数による表現で、1001)を15(2進数による表現で、1111)にマッピングしておくことにより、1を加えたときに、2進加算器でディジットのキャリーを1にできる。
この方式では、ディジットから桁上がりがない場合、上記+6の分が除去されないため、演算結果は+6の分が余分となっている。このため、ディジットからの桁上がりがない場合には、演算結果のディジットに対して-6を行なうことでBCDコード化する。
減算(すなわち異符号の数同士の加算)時には、減数オペランドに対し1の補数をとる。この操作は、減数オペランドの各ディジットに対し、9の補数をとった上で+6を行う操作と等価である。そして、高速2進加算器において最下位のCin(キャリーイン;下位からの桁上がりに相当)入力を1にして、被減数オペランドに対し、上記減数オペランドに対し1の補数をとって得た値を加算する。最下位のCin入力を1にするのは上記9の補数を10の補数にするためである。上記した加算時同様、ディジットから桁上がりがない場合には、上記+6の分が余分となっている。このため、ディジットからの桁上がりがない場合には、結果のディジットに対して-6を行なうことでBCDコード化する。つまり、減算時は、減数オペランドの補数(10の補数)をあらかじめ作成した上で、加算時と同様の演算を行う。
図2に、高速2進加算器を使う方式による10進絶対値加算噐の、前処理の補正を行う部分を含めた全体構成の一例を示す。また、上記の如く9の補数をとってから+6を行う代りに1の補数をとる場合の全体構成の一例を図3に示す。
図2に示す10進絶対値加算器は、第1オペランドop1に対しディジット単位で+6を行う加算回路11、第1オペランドop1に対しディジット単位で9の補数をとる9の補数化回路12及び9の補数をとった後に+6を行う加算回路13を有する。更に、加算回路11及び加算回路13のうちのいずれかの出力を選択するセレクタ14及び10進絶対値加算器本体15を有する。加算回路11、9の補数化回路12,加算回路13及びセレクタ14が、上記前処理の補正を行う部分である。セレクタ14は、演算が減算の場合に1の値を有し、加算の場合に0の値を有する信号SUBが0を有する場合に加算回路11の出力を選択して10進絶対値加算器本体15に出力する。又、信号SUBが1を有する場合に加算回路13の出力を選択して10進絶対値加算器本体15に出力する。10進絶対値加算器本体15は、セレクタ14の出力値と第2オペランドop2との10進絶対値加算を行い、10進絶対値加算結果resultを出力する。
図3に示す10進絶対値加算器は図2に示す10進絶対値加算器と同様の構成を有し、同様の構成要素には同一の符号を付し、重複する説明を省略する。図3に示す10進絶対値加算器は、図2に示す構成における9の補数化回路12及び加算回路13の代わりに、第1オペランドop1に対しディジット単位で1の補数をとる1の補数化回路16を有する。
図2或いは図3に示す10進絶対値加算器の全体構成のうち、加算時に+6を行う加算回路11や減算時に9の補数をとって+6操作する9の補数化回路12及び加算回路13(或いは1の補数化回路16)には周知技術を適用することができる。
図4に、図2或いは図3に示す10進絶対値加算器の全体構成のうち、10進絶対値加算器本体15の構成の一例を示す。
図4に示す例による10進絶対値加算器本体は、2進加算器21と、再補数化検出回路22と、BCD補正回路23と、9の補数化回路24と、BCDインクリメント回路25と、セレクタ26とを有する。図4における2つの入力A、Bのうち、入力Aは、例えば以下の値である。すなわち、Aは、例えば図2或いは図3に示す第1オペランドop1に対し、加算回路11或いは9の補数化回路12及び加算回路13による処理を行って得た結果、或いは加算回路11或いは1の補数化回路16による処理を行って得た結果である。他方Bは、図2或いは図3に示す第2オペランドである。尚、AとBとは論理的に交換可能な等価な値であるため、AとBとを相互に交換してもよい。
再補数化検出回路22は、2進加算器21による加算結果に対する再補数化が必要か否かを判定し、再補数化が必要な場合1をセレクタ26に出力し、不要な場合0をセレクタ26に出力する。再補数化検出回路22には2進加算器21からのキャリー出力信号carryと、第1オペランドop1及び第2オペランドop2に対する演算が減算(すなわち異符号の数同士の加算、以下同様)か否かを示す信号SUBとが入力される。再補数化検出回路22は、キャリー出力信号carryの値に関わらず、信号SUBが加算(すなわち同符号の数同士の加算、以下同様)を示す場合0を出力する。他方、信号SUBが減算を示す場合、キャリー出力信号carryが1の場合(減算結果が正で再補数化不要時)0を出力し、キャリー出力信号carryが0の場合(減算結果が負で再補数化必要時)1を出力する。
したがって再補数化検出回路22は、演算が加算の場合0を、演算が減算の場合であって減算結果が正で再補数化が不要の場合0を、演算が減算の場合であって減算結果が負で再補数化が必要な場合1を、夫々出力する。再補数化検出回路22の出力信号に応じ、セレクタ26は、演算が加算の場合BCD補正回路23の出力値を、演算が減算の場合であって減算結果が正で再補数化が不要の場合もBCD補正回路23の出力値を夫々出力する。又、セレクタ26は、演算が減算の場合であって減算結果が負で再補数化が必要な場合BCDインクリメント回路25の出力値を出力する。
図4に示す10進絶対値加算器本体では、第1オペランドop1及び第2オペランドop2に対する演算が加算(すなわち同符号の数同士の加算)の場合には、以下の処理を行う。すなわち、図2或いは図3に示す加算回路11にて第1オペランドop1であるBCDコードの数の各ディジットに+6を行った数Aと、第2オペランドop2であるBCDコードの数Bとを、2進加算器21で2進数として加算する。
ここでセレクタ26は、前述の如く、第1オペランドop1及び第2オペランドop2に対する演算が加算(すなわち同符号の数同士の加算)の場合、BCD補正回路23の出力を選択して出力する。BCD補正回路23では、2進加算器21の出力値に対し、ディジット単位で、上記の如く+6が余分な場合に-6を行う補正を行い、BCD補正回路23の出力値がセレクタ26に入力される。BCD補正回路23からの10進絶対値加算結果resultがセレクタ26から出力される。
他方、演算が減算(すなわち異符号の数同士の加算)の場合、入力データA,Bに対し、以下の処理がなされる。ここで入力データAは、図2或いは図3に示す9の補数化回路12及び加算回路13或いは1の補数化回路16にて第1オペランドop1であるBCDコードの各ディジットに対し9の補数をとった上で+6を行い或いは1の補数をとって得たデータである。又、入力データBは、第2オペランドop2であるBCDコードである。入力データA,Bは、2進加算器21で2進数として加算される。なお、この場合、上記の如く上記9の補数を10の補数にするため、2進加算器21において最下位のCin入力(図4では図示を省略)を1として加算を行う。
ここでセレクタ26は、前述の如く、第1オペランドop1及び第2オペランドop2に対する演算が減算であって、結果が負でない場合、BCD補正回路23の出力を選択して出力する。BCD補正回路23では、2進加算器21の出力値に対し、ディジット単位で、上記の如く+6が余分な場合に-6を行う補正を行い、BCD補正回路23の出力値がセレクタ26に入力される。BCD補正回路23からの10進絶対値加算結果resultがセレクタ26から出力される。
他方、セレクタ26は、前述の如く、第1オペランドop1及び第2オペランドop2に対する演算が減算であって、結果が負である場合(再補数化が必要な場合)、9の補数化回路24に接続されたBCDインクリメント回路25を選択して出力する。この場合、9の補数化回路24はBCD補正回路23の出力値に対しディジット単位で9の補数をとり、更にBCDインクリメント回路25がディジット単位で9の補数化回路24の出力値に1を加えて10の補数を得る。BCDインクリメント回路25からの10進絶対値加算結果resultがセレクタ26から出力される。
図5は上記9の補数化回路12、24の回路構成の一例を示す。図5の9の補数化回路は、否定論理和回路(以下単にNORと称する)回路NOR1,排他的論理和(以下単にEXORと称する)回路EXO1,バッファBUF1,論理積(以下単にANDと称する)回路AND1,インバータINV1及びEXOR回路EXO2を含む。
図5の9の補数化回路には、1ディジット分のBCDコードの第1乃至第4ビットa3, a2, a1, a0及びパリティビットapが入力される。9の補数化回路は、BCDコードに対し9の補数をとって得たBCDコードの第1乃至第4ビットx3, x2, x1, x0及びパリティビットxpを出力する。すなわち、NOR回路NOR1はa3, a2, a1が入力されx3を出力する。EXOR回路EXO1はa2, a1が入力されx2を出力する。バッファBUF1はa1が入力されx1を出力する。インバータINV1はa0が入力されx0を出力する。AND回路AND1はa2と、a1がインバータINV2で反転された値とが入力され、EXO2でAND1の結果とapと排他的論理和をとって、xpを出力する。
図6は、図4と共に上述した10進絶対値加算器本体の他の例を示す。図6の例は、図4の例におけるBCDインクリメント回路25による処理が、10進絶対値加算器が扱う10進数の桁数が多いほど長い時間を要することに鑑み、BCDインクリメント回路を使わないようにした例である。
図6の例では、演算が加算の場合、2進加算器31、BCD補正回路33及び再補数化検出回路22が、図4の例における2進加算器21、BCD補正回路23及び再補数化検出回路22に夫々対応し、夫々同様の機能を奏する。すなわち、図2又は図3における加算器11が第1オペランドop1のBCDコードの各ディジットに+6を行って得た数Aと、第2オペランドop2とを、2進加算器31が2進数として加算する。そしてBCD補正回路33が、上記の如く、ディジット単位で-6を行う必要がある場合には、-6を行う。そしてBCD補正回路33からの10進絶対値加算結果resultがセレクタ26から選択出力される。
ここで図7に、1ディジット分のBCD補正回路23,33,34の回路構成の一例を示す。図7のBCD補正回路は、EXOR回路EXO3,EXO4,減算回路SUB1及びセレクタSEL1を含む。EXOR回路EXO3は、上記入力データA,Bの1ディジットの直上の1ビットをそれぞれA[4]、B[4]とし、それらのEXORをとる。A[4]、B[4]は該当するビットが存在しないときは0であるとする。EXO4は、EXO3の出力と2進加算器の出力Dの当該ディジットの直上の1ビットをD[4]とし、それらに対しEXORをとる。D[4]に該当するビットが存在しないときは、D信号を出力している加算器のキャリー出力を代わりとして使用する。その結果、A+Bの演算結果の桁上がりが無い場合には、EXO4は0を出力し、A+Bの演算結果の桁上がりが有る場合には、EXO4は1の値を出力する。セレクタSEL1は、A+Bの演算結果の桁上がりが無い場合(0)には減算回路SUB1の出力値を選択出力し(-6の補正有り)、A+Bの演算結果の桁上がりが有る場合(1)にはDを選択出力する(-6の補正無し)。
図6の例の説明に戻り、演算が減算時には、入力データA,Bに対し、以下の処理がなされる。ここで入力データAは、図2或いは図3に示す9の補数化回路12及び加算回路13或いは1の補数化回路16にて第1オペランドop1であるBCDコードの数の各ディジットに対し9の補数をとった上で+6を行い或いは1の補数をとって得たデータである。入力データBは、第2オペランドop2であるBCDコードである。入力データA,Bを2進加算器31が2進数として加算する。なおこの場合、上記の如く上記9の補数を10の補数にするため、2進加算器31の最下位においてCin入力(図4では図示を省略)を1として加算を行う。
ここでセレクタ26は、前述の如く、第1オペランドop1及び第2オペランドop2に対する演算が減算であって、結果が負でない場合、BCD補正回路33の出力を選択出力する。BCD補正回路33では、2進加算器31の出力値に対し、ディジット単位で、上記の如く+6が余分な場合に-6を行う補正を行い、BCD補正回路33の出力値がセレクタ26に入力される。BCD補正回路23からの10進絶対値加算結果resultがセレクタ26から出力される。
他方、セレクタ26は、前述の如く、第1オペランドop1及び第2オペランドop2に対する演算が減算であって、結果が負である場合(再補数化が必要な場合)、9の補数化回路24の出力値を選択出力する。ここで9の補数化回路24には図6に示すように、2進加算器32の出力値がBCD補正回路34を経た値が入力される。この場合、2進加算器32では、最下位のCin入力が0とされて2進数の加算が行われ、加算結果がBCD補正回路34に入力される。そして9の補数化回路24はBCD補正回路34の出力値に対し9の補数をとり、このようにして得られた10進絶対値加算結果resultがセレクタ26から出力される。この場合、上記の如く、2進加算器32において最下位のCin入力が0とされて2進数の加算がなされるため、図4の例の場合とは異なり、BCDインクリメント回路による+1の処理は不要となる。その結果、図6の例の場合、BCDインクリメント回路は不要となる。又、図6の例において演算が減算の場合、2進加算器31,32は加算処理を並行して行い、BCD補正回路33,34も補正処理を並行して行う。その結果、処理時間を短縮できる。
ここで、ディジット単位の10進加算器の構成例として、特許文献1に記載された例について説明する。この例では、ディジット自身の桁上がりCoutにのみ依存する信号線2本と、外部からの桁上がりCinと上記Coutとの両方に依存する信号線4本とを並列に設ける。そしてこれら計6本の信号線による条件と、上記Cin又はCoutの条件とのAND論理を夫々とり、夫々のAND論理の結果のOR論理をとることでBCD 補正処理の高速化を図る。特許文献1の構成例では、A+B+Cinの結果と、それを10進補正(-6の処理)した結果とを、外部からの桁上がり信号(Cin)とディジット自身の桁上がり信号(Cout)によって選択する。また、このCin信号とCout信号は公知のキャリールックアヘッド回路により作成する。しかもこのCout信号は、上位ディジットに対するCin信号と等価でなければならない。このため、Cin信号とCout信号とは共に2つのディジットを駆動することになる。又、論理式の変形により、Cin信号及びCout信号とのAND論理を最終段でとるようにしている。そして、ワイヤードOR論理が使用できることを利用して、多数の信号に対し、一度にまとめてOR論理をとることで処理の高速化を図っている。
又、10進減算時に結果を絶対値にする方法として、特許文献2及び特許文献3に開示された技術などがあるが、いずれの技術においても、加算器もしくは減算器を2セット使い、夫々によってA−BとB−Aとの演算を並行して行う。特許文献2の構成では、上記2つの演算結果をレジスタに格納後に選択をする。
ここで図4及び図6とともに上述した夫々の構成によれば、2進加算器で加算した結果に対してBCD化補正を行うため、演算処理に時間を要する点が考えられる。又、減算時には、さらに、9の補数を作成する処理時間が必要とされる。
更に図4の例では、減算時にBCDインクリメント回路25による処理も必要とされ、桁数の多い演算器ほど減算処理に時間を要する。
又、2進加算器による加算処理、BCD補正回路による補正処理及び再補数化処理をシーケンシャルに実行する構成の場合、2進加算器は汎用的な機能回路であるために高速2進加算器を半導体メーカーがIPコア(Intellectual Property Core)として用意している場合があり、それが使用可能となるメリットがある。しかしながら10進補正や、再補数化により処理時間が増加する点が考えられる。
又、特許文献1に開示された方法では、Cin信号とCout信号とを両方とも外部のキャリールックアヘッド回路から得ることにより、本来Cinのみて済むクリティカルパス数がCinとCoutとの2つに増加する。しかもこのCout信号は、上位ディジットに対するCin信号と等価でなければならないため、Cin信号とCout信号とで共に2つのディジットを駆動することになり、負荷が増加する。その結果、生成に時間を要するキャリー伝播信号としてのCin信号及びCout信号の生成に要する時間が更に増加する可能性がある。また、本来4つの演算結果で済むところをあえて6つに増やすことで、各信号の作成に要する段数を減らした上で、ワイヤードOR論理に頼って高速化する。このため、スタティックCMOS等のワイヤードOR論理が使用できないデバイスでは、多数の信号のOR論理を取るのに時間がかかる。その結果、かえって外部からのCin/Cout信号との論理をとる処理に要する時間が増加する可能性がある。また、一旦演算結果を得たあとで10進補正を行うという方法では、10進補正を行うパスの処理の方が時間を要する可能性がある。
又、特許文献2及び特許文献3に示された構成のように、減算のために加算器を2セット使う方法では回路規模が大きくなる可能性がある。又、特許文献2の構成の場合、レジスタの物量も2倍となる。
本発明の実施例1によれば、上述の状況に鑑み、演算処理に要する時間を効果的に短縮し得る10進絶対値加算器を提供することができる。
本発明の実施例1では、2進加算器を使用するディジット単位の加算器内のディジット演算器として以下に述べる構成を設ける。すなわち、後述する図9に示す如く、A+B, A+B+10, A+B+6, A+B+1, A+B+11, A+B+7の夫々の演算を並列に実行する加算器ADD1,ADD2,ADD3,ADD4,ADD5,ADD6を設ける。これらの加算器ADD1,ADD2,ADD3,ADD4,ADD5,ADD6のうち、A+B, A+B+10, A+B+6を夫々行う加算器ADD1,ADD2,ADD3は、下位からの桁上がりがない場合の演算結果を生成する。他方、A+B+1, A+B+11, A+B+7を夫々行う加算器ADD4,ADD5,ADD6は、下位からの桁上がりがある場合の演算結果を生成する。
そして演算結果に対し再補数化の必要がなく下位からの桁上がりがない場合の演算結果は、A+Bの加算器ADD1とA+B+10の加算器ADD2とで計算する。そして、A+Bの加算器ADD1のキャリー出力信号digit carry outに基づいてBCD化補正の要否を判定する。ここでBCD化補正とは、例えば図4、6、7等とともに上述したBCD補正回路23,33,34によって行う、-6を行う補正を意味する。BCD化補正が不要な場合にはA+Bの加算器ADD1の演算結果を使用し(s0)、BCD化補正が必要な場合にはA+B+10の加算器ADD2の演算結果を使用する(s0)。ここで10は6に対する16の補数であることから、4ビットに閉じた計算ではA+B+10はA+B-6と等価である。このため、BCD化補正(-6)が必要な場合、A+B+10の加算器ADD2を使用する。
又、再補数化の必要がなく下位からの桁上がりがある場合の演算結果は、桁上がりの+1を考慮し、A+Bに1を加えるA+B+1の加算器ADD4とA+B+10に1を加えるA+B+11の加算器ADD5とで計算する。この場合も上記下位からの桁上がりがない場合同様、A+B+1の加算器ADD4のキャリー出力信号digit carry outに基づいてBCD化補正の要否を判定する。BCD化補正が不要な場合にはA+B+1の加算器ADD4結果を使用し(s1)、BCD化補正が必要な場合にはA+B+11の加算器ADD5の結果を使用する(s1)。
このように実施例1による方法では、BCD化補正の要否の判定はディジット内で完結し、たかだか4ビット分のキャリールックアヘッドの実行に要される遅延時間で行うことができるため、高速化が可能である。
又、再補数化のための補数化処理は、BCDコードによる10進演算のため9の補数をとる必要がある。9の補数化回路の一例は上述した図5に示すものであるが、図5の例の場合、x3を作成する3入力NOR回路NOR1や、x2を作成するEXOR回路EXO1は、比較的動作時間を要するゲートである。又図5の例では、補数化に伴うディジットのパリティの予測を行う構成として、インバータINV2,AND回路AND1,EXOR回路EXO2を要し、ゲート3段を要する。
これに対し図9に示す実施例1の構成では、図5のような比較的時間を要する回路を使用する代わりに、1の補数化回路として、演算結果rs0やrs1を作成するインバータ1段(INV5,INV6)を使用することにより、高速化を図る。1の補数をとることによってディジットに対するパリティは変化しないので、パリティの変化を求めるために演算結果を加工する必要がなく、演算の高速化が図れる。
ここで、再補数化が必要な場合の再補数化前の演算結果をBCDコードでr(0≦r≦9)とする。尚、上記した前処理において、(例えば図2中、加算回路13により)予め+6がなされている。このため、A+Bの加算器ADD1の演算結果は、ディジットのキャリー出力信号digit carry out(COUT)の値がCOUT=0のときは(r+6)であり(+6が余分)、COUT=1のときはrである。又、ディジットで1の補数をとる演算は、15からその数を引く演算と等価である。したがってA+Bの演算結果に対し1の補数をとると、COUT=0のときには15−(r+6)=(9−r)となる。他方、COUT=1のときは、15−r=(9−r)+6となる。したがってCOUT=0のときは、A+Bの演算結果に対し1の補数をとることにより、9の補数をとった場合と等価の演算結果(9−r)が得られる。他方COUT=1のときは、A+Bの演算結果に対し1の補数をとると、求めたい9の補数(9−r)に対して6が余分な(9−r)+6が得られる。したがってこの場合、15から演算結果を引いた場合に余分な6が含まれないようにすればよい、すなわち15から演算結果を引いた場合に15−(r+6)となるよう、予めA+Bに6を加えるA+B+6の加算器ADD3を使用する。
ここでA+B+6のような3値の足し算を行う場合、加算器を2段直列にして計算するか、CSA(Carry Save Adder: 桁上げ保存加算器)と加算器とを直列にして計算する方法を用いることができる。しかしこのような方法ではA+Bの演算に対して処理時間が余分に掛かる。このため実施例1では、上記の如くの3値の足し算においてオペランドの1つ(A+B+6の場合、"6")が固定の値であることを利用し、A+B+6の加算器ADD3として、図13に具体的な回路を示す如くの4ビットCLA(Carry Look Ahead)加算器の構成を適用する。このようにして実施例1では、A+Bを演算処理に要する時間と同等の処理時間でA+B+6の演算を行うことができる。
又、図9の構成において、外部からのキャリー入力が1となる場合には、A+Bの加算器ADD1の代わりにA+B+1の加算器ADD4を用いる。同様にA+B+6の加算器ADD3の代わりに、A+B+6の加算器ADD3と同様に高速なA+B+7=(A+B+1)+6の加算器(図16参照)を用いる。
このように実施例1によれば、演算処理の高速性を重視し、A+B+7, A+B+10, A+B+11の演算を行う夫々の加算器ADD6,ADD2,ADD5についても、上記したA+B+6の加算器ADD3と同様に、4ビットCLAの演算処理に要する時間と同等の時間で演算処理ができるようにした(図18,図20参照)。
このように図9に示す実施例1の構成では、減算時の再補数化が必要で下位からの桁上がりがない場合の演算結果を、A+Bの加算器ADD1とA+B+6の加算器ADD3とで求める。そして、A+Bの加算器ADD1のキャリー出力信号digit carry outに基づき、BCD化補正の要否を判定する。尚、ここでのBCD化補正は、上記加算の場合のBCD化補正とは異なる。すなわちこの場合、上記の如く、再補数化時に15から演算結果を引いた場合に余分な6が含まれないようにする。すなわち15から演算結果を引いた場合に15−(r+6)となるように、予めA+Bに6を加えるA+B+6の加算器ADD2を使用する。
具体的には、A+Bの加算器ADD1のキャリー出力信号digit carry out COUT=0であって、BCD化補正が不要な場合にはA+Bの加算器ADD1の出力に対しインバータINV5で1の補数をとってrs0を得る。BCD化補正が必要な場合にはA+B+6の加算器ADD3の出力に対しインバータINV5で1の補数をとり、rs0を得る。又、減算時の再補数化の必要で下位からの桁上がりがある場合の演算結果は、A+B+1の加算器ADD4とA+B+7の加算器ADD6とで求める。そしてA+B+1の加算器ADD4のキャリー出力信号digit carry outに基づき、BCD化補正の要否を判定し、BCD化補正が不要な場合(COUT=0)にはインバータINV6でA+B+1の加算器ADD4の演算結果に対し1の補数をとり、rs1を得る。BCD化補正が必要な場合(COUT=1)にはインバータINV6でA+B+7の加算器ADD6の演算結果に対し1の補数をとり、rs1を得る。
このように図9に示す実施例1によれば、A+B, A+B+10, A+B+6, A+B+1, A+B+11, A+B+7のディジット単位の各演算を夫々の加算器によってADD1〜ADD6にて並列に実行する。その結果、図4或いは図6のBCD補正回路23,33或いは34によるBCD化補正処理の如くの処理が不要となる。又、図4或いは図6の9の補数化回路24による9の補数化処理を、1の補数化を行うインバータINV5,INV6によるビット反転で置き換えることができる。更に、A+B, A+B+10, A+B+6, A+B+1, A+B+11, A+B+7の各演算は、図8と共に後述するブロックキャリー伝播回路BCP1による周知の2進加算器におけるキャリー伝播論理の実行と同時並行で実行される。その結果、高速な10進絶対値加算動作を実現できる。
図8に、本発明の実施例1による10進絶対値加算器本体の全体構成を示す。図8中、m+1個のセグメント絶対値加算器DAD0,DAD1,...,DADmの各々、例えばセグメント絶対値加算器DAB1は、実施例1の場合、図9に記載された構成、すなわち10進数一桁の単位毎のディジット絶対値加算器の構成を有する。すなわち実施例1の10進絶対値加算器本体は、m+1桁の10進数を対象とした10進絶対値加算器に適用される。したがって実施例1では、上記m+1個のセグメント絶対値加算器DAD0,DAD1,...,DADmが最大m+1桁の10進絶対値加算結果SUMを出力する。
図8中 ブロックキャリー伝播回路BCP1は、2進加算器におけるキャリー伝播回路を適用可能であり、周知のキャリールックアヘッド方式などを適用した高速なキャリー伝播回路とすることができる。ブロックキャリー伝播回路BCP1は、セグメント絶対値加算器DAD0,DAD1,...,DADmの夫々を夫々のブロックと見なし、ブロック間のキャリー伝播論理を実行する。又、ブロックキャリー伝播回路BCP1は、再補数化(単にrecomp或いはrとも称する)時のキャリー(BCin for recomp)と非再補数化時(単にnon-recomp或いはnrとも称する)のキャリー(BCin for non-recomp)との両方を生成する。ここで再補数化時、すなわち再補数化を行う場合とは、10進演算が減算であり演算結果が負となる場合であり、再補数化が必要な場合を意味する。他方、非再補数化時、すなわち再補数化を行わない場合とは、10進演算が加算の場合、或いは10進演算が減算であり演算結果が負とならない場合であり、再補数化が不要な場合を意味する。尚、図8中、例えばBmCrは、m番目のブロック(セグメント絶対値加算器)DADmに対する再補数化時のキャリーを意味し、BmCnrは、m番目のブロックDADmに対する非再補数化時のキャリーを意味する。
ブロックキャリー伝播回路BCP1は、周知の2進加算器におけるキャリー伝播回路と同様の構成を有することができる。すなわち、減算時の減数オペランドの補数化における+1の演算処理(9の補数を10の補数にする処理)を実現するため、非補数化時のキャリー入力端子nrCinに信号SUBを接続し、信号SUBが1となる減算動作の場合に、非補数化時のキャリーnrCin(最下位のCin)を1にする。
又、図8の例において、減算時の再補数化の要否の判定は、以下の通りになされる。すなわち、減算時(SUB=1)にブロックキャリー伝播回路BCP1のキャリー出力信号COUTが0である場合、後述するアンド回路AND−RECOMPにより、再補数化時を示す信号RECOMPを1とする。信号RECOMPは各セグメント絶対値加算器DAD0,DAD1,...,DADmに入力され、各セグメント絶対値加算器DAD0,DAD1,...,DADmでは再補数化を行う。すなわち図9において、A+B, A+B+6, A+B+1, A+B+7の夫々の加算器ADD1,ADD3,ADD4,ADD6のうちの何れかの出力に対し、インバータINV5又はIVN6で1の補数をとって演算結果を得る。
図10は、図8に記載されたブロックキャリー伝播回路BCP1を2つの2進キャリールックアヘッド回路BCLA1,BCLA2で形成した場合について説明するためのブロック図である。2つの2進キャリールックアヘッド回路BCLA1,BCLA2として、夫々周知の2進キャリールックアヘッド回路(2進演算器におけるキャリールックアヘッド回路)を適用することができる。
2つの2進キャリールックアヘッド回路BCLA1,BCLA2の各々は、入力された2進数のデータA,B(図10では省略)に基づき、当該2進数のデータA,Bの2進絶対値加算を行う際の、上記ブロックごと(実施例1の場合4ビット)のキャリーを生成して出力する。ここで、2進キャリールックアヘッド回路BCLA1は、非再補数化時のキャリーを生成して出力する。すなわち、B0Cnr(Block 0 carry for non-recomp, B1Cnr(Block 1 carry for non-recomp), ..., Bm-1Cr(Block m-1 carry for non-recomp), BmCr(Block m carry for non-recomp)を生成して出力する。他方、2進キャリールックアヘッド回路BCLA2は、再補数化時のキャリーを生成して出力する。すなわち、B0Cr(Block 0 carry for recomp), B1Cr(Block 1 carry for recomp), ..., Bm-1Cr(Block m-1 carry for recomp), BmCr(Block m carry for recomp)を生成して出力する。
又、上記の如く、図8のブロックキャリー伝播回路BCP1では、減算時の減数オペランドの補数化における+1の演算処理(9の補数を10の補数にする処理)を実現するため、非再補数化時のキャリーnrCinとして信号SUBを接続する。その結果、信号SUBが1となる減算動作の場合にキャリーnrCinが1となる。図10の構成例の場合、再補数化時のキャリーを生成する2進キャリールックアヘッド回路BCLA2の(最下位の)キャリーCinとして0が入力される。よって再補数化時には2進キャリールックアヘッド回路BCLA2の(最下位の)キャリーCinが0となる。
他方、非再補数化時のキャリーを生成する2進キャリールックアヘッド回路BCLA1のキャリーCinとして、上記の如く信号SUBが接続された、非再補数化時のキャリーnrCinが接続される。その結果、信号SUBが1となる減算時、非再補数化時のキャリーを生成する2進キャリールックアヘッド回路BCLA1の(最下位の)キャリーCinが1になる。他方、信号SUBが0となる加算時、非再補数化時のキャリーを生成する2進キャリールックアヘッド回路BCLA1の(最下位の)キャリーCinが0になる。
尚、上記の如く、減算時の非再補数化時、減数オペランドの補数化において+1(9の補数を10の補数にする処理)を行う。他方、加算時及び減算時の再補数化時の夫々の場合には、+1(9の補数を10の補数にする処理)は不要である。すなわち、加算時にはそもそもオペランドの補数化を行わないため、+1は不要である。
又、減算時の再補数化時には、上記の如く、図9のインバータINV5,INV6によるビットの反転を行うことにより、9の補数を得る。又、前処理における補数化において、例えば図2の9の補数化回路12により9の補数をとる。そして再補数化時、上記の如く、インバータによるビットの反転を行って9の補数を得る。10の補数をとる方法としては、9の補数化をしてから+1する方法と、−1した上で9の補数化をする方法との2通りがある。本発明においては、前処理における10の補数化では前者の方法を採用し、結果の再補数化のための10の補数化では後者の方法を採用することで2つの10の補数化処理における+1操作と−1操作を相殺させている。このように、再補数化時には、前処理における補数化の際と、再補数化の際との夫々の処理において+1操作と−1操作とを行わないことで、夫々の処理において9の補数を10の補数にする処理である補正値1の処理を相殺し省略することができる。
図8の説明に戻り、図8の10進絶対値加算器本体は更に、上記AND回路AND−RECOMPを有する。アンド回路AND−RECOMPには減算時の1,加算時の0の値を有する信号SUB及びブロックキャリー伝播回路BCP1のキャリー出力信号COUTが入力され、再補数時に1、非再補数時に0後を有する信号RECOMPを出力する。信号RECOMPは各セグメント絶対値加算器DAD0,DAD1,...,DADmに供給される。アンド回路AND−RECOMPは、減算時(SUB=1)で且つ、ブロックキャリー伝播回路BCP1のキャリー出力信号COUTが0の場合(減算結果が負となる場合)、信号RECOMP=1を出力する。すなわち、再補数化を行うものとする。他方、それ以外の場合、すなわち、加算時(SUB=0)は信号RECOMP=0を出力する。すなわち、再補数化を行わないものとする。又、減算時(SUB=1)で且つ、ブロックキャリー伝播回路BCP1のキャリー出力信号COUTが1の場合(減算結果が負でない場合)、信号RECOMP=0を出力する。すなわち、再補数化を行わないものとする。
次に、図9に示すディジット絶対値加算器(セグメント絶対値加算器)について詳細に説明する。図9に示す本発明の実施例1によるディジット絶対値加算器は、上記6個の4ビット加算器ADD1〜ADD6(単に加算器ADD1〜ADD6とも称する)を有する。加算器ADD1は、夫々が10進数の1桁を表す4ビットを有する入力データA,Bに対し、A+Bの加算を行う。加算器ADD2は、入力データA,Bに対しA+B+10の加算を行う。加算器ADD3は、入力データA,Bに対しA+B+6の加算を行う。加算器ADD4は、入力データA,Bに対しA+B+1の加算を行う。加算器ADD5は、入力データA,Bに対しA+B+11の加算を行う。加算器ADD6は、入力データA,Bに対しA+B+7の加算を行う。尚、6個の加算器ADD1〜ADD6は、夫々の加算演算を相互の並列に実行することができる。
図9のディジット絶対値加算器は更に、セレクタSEL11〜SEL17を有する。セレクタSEL11には加算器ADD1,ADD2の出力が夫々入力される。セレクタSEL11は、加算器ADD1のキャリー出力信号digit carry outが1の場合には加算器ADD1の出力を選択出力し、加算器ADD1のキャリー出力信号digit carry outが0の場合には加算器ADD2の出力を選択出力する。
セレクタSEL12には加算器ADD1,ADD3の出力が夫々入力される。セレクタSEL12は、加算器ADD1のキャリー出力信号digit carry outが0の場合には加算器ADD1の出力を選択出力し、加算器ADD1のキャリー出力信号digit carry outが1の場合には加算器ADD3の出力を選択出力する。
セレクタSEL13には加算器ADD4,ADD5の出力が夫々入力される。セレクタSEL13は、加算器ADD4のキャリー出力信号digit carry outが1の場合には加算器ADD4の出力を選択出力し、加算器ADD4のキャリー出力信号digit carry outが0の場合には加算器ADD5の出力を選択出力する。
セレクタSEL14には加算器ADD4,ADD6の出力が夫々入力される。セレクタSEL14は、加算器ADD4のキャリー出力信号digit carry outが0の場合には加算器ADD4の出力を選択出力し、加算器ADD4のキャリー出力信号digit carry outが1の場合には加算器ADD6の出力を選択出力する。
セレクタSEL15にはセレクタSEL11,SEL13の出力が夫々入力される。セレクタSEL15は、上記非再補数化時のキャリーBCin for non-recomp、すなわち図8,図10に記載されたキャリーB0Cnr, B1Cnr, ..., Bm-1Cnr, BmCnrに基づき選択動作を行う。すなわち、非再補数化時のキャリーが0の場合、セレクタSEL15はセレクタSEL11の出力s0を選択出力し、非再補数化時のキャリーが1の場合、セレクタSEL15はセレクタSEL13の出力s1を選択出力する。
又、インバータINV5,INV6は、夫々セレクタSEL12,SEL14の出力をビット単位で反転し、夫々反転結果rs0, rs1を出力する。
セレクタSEL16にはインバータINV5,INV6の出力rs0, rs1が夫々入力される。
セレクタSEL15は、上記再補数化時のキャリーBCin for recomp、すなわち図8,図10に記載されたキャリーB0Cr, B1Cr, ..., Bm-1Cr, BmCrに基づき選択動作を行う。すなわち、再補数化時のキャリーが0の場合、セレクタSEL16はインバータINV5の出力rs0を選択出力し、再補数化時のキャリーが1の場合、セレクタSEL16はインバータINV6の出力rs1を選択出力する。
セレクタSEL17にはセレクタSEL15,SEL16の出力r, rsが夫々入力される。セレクタ17は、図8に示す信号RECOMPの値が0の場合(非再補数化時)、セレクタSEL15の出力sを選択出力(result)し、信号RECOMPの値が1の場合(再補数化時)、セレクタSEL16の出力rsを選択出力(result)する。
尚、図8に示す本発明の実施例1の10進絶対値加算器本体の入力データA,Bは、演算に先立つ上記前処理を受けている。すなわち図2とともに上記した加算回路13により、片方のオペランドop1に対し、ディジット単位で+6を行う。すなわち+6のオフセットが加算される。その結果上記のブロックキャリー伝播回路BCP1が有する周知の2進演算器におけるキャリー伝播論理によって適切に10進演算のキャリー伝播が実施される。
図9の構成では下位からの桁上がりがないときの演算結果をA+B、A+B+10、A+B+6の夫々の加算器ADD1,ADD2,ADD3を使って生成する。尚、下位からの桁上がりがない場合は上記BCin for non-recomp, BCin for recompの夫々の信号が0となる。その結果、セレクタSEL15,SEL16により、上記夫々の加算器ADD1,ADD2,ADD3の演算結果或いは演算結果がビット反転された結果が選択出力される。
ここで上記の如く既に各ディジットに対して +6のオフセットが加算されているため、A+Bの加算器ADD1のdigit carry out信号を用いて上記+6のオフセットの加算がない場合の演算結果が9を超えたか否かを判定できる。加算時或いは再補数化が不要な減算時には、A+Bの加算器ADD1の演算結果が、上記+6のオフセットの加算がない場合のA+Bの演算結果が9を越える場合の演算結果のBCDコードである。又、A+B+10の加算器ADD2の演算結果が、上記+6のオフセットの加算がない場合の演算結果が9を越えない場合の演算結果のBCDコードである。セレクタSEL11により、A+Bの加算器ADD1のdigit carry out信号が1の時には、A+Bの加算器ADD1の演算結果が選択出力される(s0)。又、A+Bの加算器ADD1のdigit carry out信号が0の時には、A+B+10の加算器ADD2の演算結果が選択出力(s0)される。
他方、図9において、下位からの桁上がりがないときの減算時、再補数化が必要な場合、A+B+6の加算器ADD3の演算結果をインバータINV5で反転して得た値が、上記+6のオフセットの加算がない場合の演算結果が9を越える場合の演算結果のBCDコードである。又、A+Bの加算器ADD1の演算結果をインバータINV5で反転して得た値が、上記+6のオフセットの加算がない場合の演算結果が9を越えない場合の演算結果のBCDコードである。セレクタSEL12により、A+Bの加算器ADD1のdigit carry out信号が1の時には、A+B+6の加算器ADD3の演算結果が選択出力され、インバータINV5によってビットが反転される(rs0)。又、A+Bの加算器ADD1のdigit carry out信号が0の時には、A+Bの加算器ADD1の演算結果が選択出力され、インバータINV5によってビットが反転される(rs0)。尚、インバータINV5によるビットの反転は上記の如くBCD化補正(すなわち1の補数をとる)処理(再補数化)である。
他方、図9の構成で下位からの桁上がりが有るときの演算結果をA+B+1、A+B+11、A+B+7の夫々の加算器ADD4,ADD5,ADD6を使って生成する。尚、下位からの桁上がりが有る場合は上記BCin for non-recomp, BCin for recompの夫々の信号が1となる。その結果、セレクタSEL15,SEL16により、上記夫々の加算器ADD4,ADD5,ADD6演算結果或いは演算結果がビット反転された結果が選択出力される。
この場合も上記の如く既に各ディジットに対して +6のオフセットが加算されているため、A+B+1の加算器ADD4のdigit carry out信号を用いて上記+6のオフセットの加算がない場合の演算結果が9を超えたか否かを判定できる。加算時或いは再補数化が不要な減算時には、A+B+1の加算器ADD4の演算結果が、上記+6のオフセットの加算がない場合の演算結果が9を越える場合の演算結果のBCDコードである。又、A+B+11の加算器ADD4の演算結果が、上記+6のオフセットの加算がない場合の演算結果が9を越えない場合の演算結果のBCDコードである。セレクタSEL13により、A+B+1の加算器ADD4のdigit carry out信号が1の時には、A+B+1の加算器ADD4の演算結果が選択出力される(s1)。又、A+B+1の加算器ADD4のdigit carry out信号が0の時には、A+B+11の加算器ADD5の演算結果が選択出力(s1)される。
又、図9において、下位からの桁上がりが有るとき、減算時、再補数化が必要な場合、A+B+7の加算器ADD6の演算結果をインバータINV6で反転して得た値が、上記+6のオフセットの加算がない場合の演算結果が9を越える場合の演算結果のBCDコードである。又、A+B+1の加算器ADD4の演算結果をインバータINV6で反転して得た値が、上記+6のオフセットの加算がない場合の演算結果が9を越えない場合の演算結果のBCDコードである。セレクタSEL14により、A+B+1の加算器ADD4のdigit carry out信号が1の時には、A+B+7の加算器ADD6の演算結果が選択出力され、インバータINV6によってビットが反転される(rs1)。又、A+B+1の加算器ADD4のdigit carry out信号が0の時には、A+B+1の加算器ADD4の演算結果が選択出力され、インバータINV6によってビットが反転される(rs1)。尚、インバータINV6によるビットの反転は上記の如くBCD化補正(すなわち1の補数をとる)処理(再補数化)である。
上記の如く、図8に示すブロックキャリー伝播回路BCP1が有する2進演算器におけるキャリー伝播論理により、非再補数化時のキャリー(BCin for non-recomp)と再補数化時のキャリー(BCin for recomp)とが供給される。非再補数化時のキャリー(BCin for non-recomp)に基づき、キャリーが0の場合にはセレクタSEL15が上記値s0を選択し、1の場合にはs1を選択し、sを出力する。又、再補数化時のキャリー(BCin for recomp)に基づき、セレクタ16が、キャリーが0の場合にはrs0を選択し、1の場合にはrs1を選択し、rsを出力する。
更に、図8に示すアンド回路AND−RECOMPによって供給される再補数化の要否を示す信号RECOMPに基づき、セレクタSEL17は、非再補数化時(RECOMP=0)には、出力sを選択し、再補数化時(RECOMP=1)は、出力rsを選択して結果resultを出力する。
次に、図9に記載された加算器ADD1〜ADD6の夫々の内部回路構成の一例につき、図とともに説明する。
図11はA+Bの加算器ADD1の回路構成の一例を示す回路図である。図11の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図11の例は、A+Bの演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図11の例は、入力ビットa0, b0を入力するNAND回路NAND11,a0, b0を入力してh0を出力するEXOR回路EXO10,NAND11の出力を反転してg0を出力するインバータINV10を有する。図11の例は更に、h0をバッファリングして出力ビットs0を出力するバッファBUF20を有する。
図11の例は更に、入力ビットa1, b1を入力するNAND回路NAND12,a1, b1を入力するNOR回路NOR11,a1, b1を入力してh1を出力するEXOR回路EXO11を有する。図11の例は更に、NAND12及びNOR11の出力を夫々反転してp1, g1を夫々出力するインバータINV11,INV12、並びにh1及びg0を入力して出力ビットs1を出力するEXOR回路EXO21を有する。
図11の例は更に、入力ビットa2, b2を入力するNAND回路NAND13,a2, b2を入力するNOR回路NOR12,a2, b2を入力しh2を出力するEXOR回路EXO12を有する。図11の例は更に、NAND13及びNOR12の出力を夫々反転してp2, g2を夫々出力するインバータINV13,INV14を有する。図11の例は更に、p1及びg0を入力するNAND回路NAND26,g1を反転するインバータINV21,NAND26及びインバータ21の夫々の出力を入力しc2を出力するNAND回路NAND27、h2及びc2を入力し出力ビットs2を出力するEXOR回路EXO22を有する。
図11の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO13,g0, p1, p2を入力するNAND28,g1, p2を入力するNAND回路NAND29、g2を反転するインバータINV22を有する。図11の例は更に、NAND28,NAND29,INV22の夫々の出力を入力し、c3を出力するNAND回路NAND30、h3, c3を入力し出力ビットs3を出力するEXOR回路EXO23を有する。
図11の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO30,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND21,NAND22,NAND23,NAND24を有する。図11の例は更に、NAND21,NAND22,NAND23,NAND24の夫々の出力を入力しpcを出力するNAND回路NAND25、pcとEXO30の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO31を有する。
図11の例では上記した構成により、下位ビットの演算結果から生成されるキャリー(桁上げ)を考慮した上で演算結果の夫々のビットs0, s1, s2, s3を生成する。
図12はA+B+1の加算器ADD4の回路構成の一例を示す回路図である。図12の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図12の例は、A+B+1の演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図12の例は、入力ビットa0, b0を入力するNOR回路NOR110,a0, b0を入力してh0を出力するEXOR回路EXO110,NOR110の出力を反転してp0を出力するインバータINV110を有する。図12の例は更に、h0を反転して出力ビットs0を出力するインバータINV120を有する。
図12の例は更に、入力ビットa1, b1を入力するNAND回路NAND112,a1, b1を入力するNOR回路NOR111,a1, b1を入力してh1を出力するEXOR回路EXO111を有する。図12の例は更に、NAND112及びNOR111の出力を夫々反転してp1, g1を夫々出力するインバータINV111,INV112、並びにh1及びp0を入力して出力ビットs1を出力するEXOR回路EXO121を有する。
図12の例は更に、入力ビットa2, b2を入力するNAND回路NAND113,a2, b2を入力するNOR回路NOR112,a2, b2を入力しh2を出力するEXOR回路EXO112を有する。図12の例は更に、NAND113及びNOR112の出力を夫々反転してp2, g2を夫々出力するインバータINV113,INV114を有する。図12の例は更に、p1及びp0を入力するNAND回路NAND126,g1を反転するインバータINV121,NAND126及びインバータ121の夫々の出力を入力しc2を出力するNAND回路NAND127、h2及びc2を入力し出力ビットs2を出力するEXOR回路EXO122を有する。
図12の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO113,p0, p1, p2を入力するNAND128,g1, p2を入力するNAND回路NAND129、g2を反転するインバータINV122を有する。図12の例は更に、NAND128,NAND129,INV122の夫々の出力を入力し、c3を出力するNAND回路NAND130、h3, c3を入力し出力ビットs3を出力するEXOR回路EXO123を有する。
図12の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO130,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND121,NAND122,NAND123,NAND124を有する。図12の例は更に、NAND121,NAND122,NAND123,NAND124の夫々の出力を入力しpcを出力するNAND回路NAND125、pcとEXO130の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO131を有する。
図12の例では上記した構成により、下位ビットの演算結果から生成されるキャリーを考慮した上で演算結果の夫々のビットs0, s1, s2, s3を生成する。
次に図13,図14,図15とともに、A+B+6の加算器ADD3について説明する。図13の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図13の例は、A+B+6(実際には後述のようにA+B-10)の演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図13の例は、入力ビットa0, b0を入力するNAND回路NAND211,a0, b0を入力してh0を出力するEXOR回路EXO210,NAND211の出力を反転してg0を出力するインバータINV210を有する。図13の例は更に、h0をバッファリングして出力ビットs0を出力するバッファBUF220を有する。
図13の例は更に、入力ビットa1, b1を入力するNAND回路NAND212,a1, b1を入力するNOR回路NOR211,a1, b1を入力してh1を出力するEXOR回路EXO211を有する。図13の例は更に、NAND212及びNOR211の出力を夫々反転してp1, g1を夫々出力するインバータINV211,INV212、並びにh1及びg0を入力して出力ビットs1を出力するEXNOR回路EXNO221を有する。
図13の例は更に、入力ビットa2, b2を入力するNAND回路NAND213,a2, b2を入力するNOR回路NOR212,a2, b2を入力しh2を出力するEXOR回路EXO212を有する。図13の例は更に、NAND213及びNOR212の出力を夫々反転してp2, g2を夫々出力するインバータINV213,INV214を有する。図13の例は更に、h2及びc2を入力し出力ビットs2を出力するEXOR回路EXO222、c2を出力するNAND回路NAND250,NAND250に夫々の出力を入力するNAND回路NAND248,NAND249を有する。
図13の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO213,h3及びc3を入力し出力ビットs3を出力するEXNOR回路EXNO223を有する。図13の例は更に、c3を出力するNAND回路NAND255,NAND255に夫々の出力を入力するNAND回路NAND251,NAND252,NAND253,NAND254を有する。
図13の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO230,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND241,NAND242,NAND243,NAND244、NAND245を有する。図13の例は更に、NAND241,NAND242,NAND243,NAND244、NAND245の夫々の出力を夫々入力するNAND246,NAND247を有する。図13の例は更に、NAND247,NAND248の夫々の出力を入力しpcを出力するOR回路OR211、pcとEXO230の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO231を有する。
図13の例では上記した構成により、下位ビットの演算結果から生成されるキャリー及びボローを考慮した上で演算結果の各ビットs0, s1, s2, s3を生成する。
ここで図13の例に関し、A+B+6をそのまま求めると、キャリーが二重に発生する場合の考慮が複雑になるため、図13の例は、代りにA+B-10を計算する。図13の例ではキャリーとボローの伝播が排他になるように回路を形成することで、伝播経路を1つで済ませる。ここで10は6に対する16の補数になるので、4ビットの演算では、4ビット内の演算結果のビットのパターンは、A+B+6とA+B-10とで同じになる。参考のために図14に、4ビットで表現できる数値Dに対し、D+6、D-10を夫々行った場合の下位4ビットの結果のパターンが同じになることを示す。図14では、4ビットのデータDに対し、演算結果の符号等の判定がつくように、2進数の表現として上位に2ビット追加し、6ビットに拡張している。尚、図14中、括弧()内に、夫々対応する符号付の10進表現を示す。図14から、D+6とD-10とで、下位4ビットの2進数のビットパターンが同じになることが明らかである。
演算結果の出力ビットs3〜s0を求めるには、入力ビットa2〜a0、b2〜b0から生成されるキャリーとボローとが必要である。図15に各ビットから生成されるキャリーとボローの内訳を示す。図15中、bitはビット番号(a2〜a0、b2〜b0の数字部分)を示し、generateは、ビット自体が生成するキャリーを示し、generateの伝播は、下位ビットが生成したキャリーの伝播を示す。又、borrowは、ビット自体が生成するボローを示し、borrowの伝播は、下位ビットが生成したボローの伝播を示す。
以下に、演算結果 s0, s1, s2, s3 、演算結果の偶数パリティ sp とキャリーもしくはボローによるデータの反転条件 c0, c1, c2, c3 および、パリティの反転する条件 pc をまとめた論理式を示す(数4)。尚、数4の論理式において、数1に示す演算子
は、EXOR論理演算を実行する演算子を示し、数2に示す演算子
は、AND論理演算を実行する演算子を示し、数3に示す演算子
次に図16,図17とともに、A+B+7の加算器ADD6について説明する。図16の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図16の例は、A+B+7(実際には後述のようにA+B-9)の演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図16の例は、入力ビットa0, b0を入力するNOR回路NOR310,a0, b0を入力してh0を出力するEXOR回路EXO310,NOR310の出力を反転してp0を出力するインバータINV310を有する。図16の例は更に、h0を反転して出力ビットs0を出力するインバータINV320を有する。
図16の例は更に、入力ビットa1, b1を入力するNAND回路NAND312,a1, b1を入力するNOR回路NOR311,a1, b1を入力してh1を出力するEXOR回路EXO311を有する。図16の例は更に、NAND312及びNOR311の出力を夫々反転してp1, g1を夫々出力するインバータINV311,INV312、並びに出力ビットs1を出力するEXOR回路EXO321を有する。
図16の例は更に、入力ビットa2, b2を入力するNAND回路NAND313,a2, b2を入力するNOR回路NOR312,a2, b2を入力しh2を出力するEXOR回路EXO312を有する。図16の例は更に、NAND313及びNOR312の出力を夫々反転してp2, g2を夫々出力するインバータINV313,INV314を有する。図16の例は更に、h2及びc2を入力し出力ビットs2を出力するEXOR回路EXO322、c2を出力するNAND回路NAND368,NAND368に夫々の出力を入力するNAND回路NAND366,NAND367を有する。
図16の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO313,h3及びc3を入力し出力ビットs3を出力するEXNOR回路EXNO323を有する。図16の例は更に、c3を出力するNAND回路NAND373,NAND373に夫々の出力を入力するNAND回路NAND369,NAND370,NAND371,NAND372を有する。
図16の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO330,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND361,NAND362,NAND363,NAND364を有する。図16の例は更に、NAND361,NAND362,NAND363,NAND364の夫々の出力を夫々入力するNAND365を有する。図16の例は更に、NAND365の出力pcとEXO330の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO331を有する。
図16の例では上記した構成により、下位ビットの演算結果から生成されるキャリー及びボローを考慮した上で演算結果の各ビットs0, s1, s2, s3を生成する。
ここで図16の例に関し、A+B+7をそのまま求めると、キャリーが二重に発生する場合の考慮が複雑になるため、図16の例では、代りにA+B-9を計算する。図16の例ではキャリーとボローの伝播が排他になるように回路を形成することで、伝播経路を1つで済ませる。ここで9は7に対する16の補数になるので、4ビットの演算では、4ビット内の結果のビットのパターンは、A+B+7とA+B-9とで同じになる。又、図17に各ビットから生成されるキャリーとボローの内訳を示す。
以下に、演算結果 s0, s1, s2, s3 、演算結果の偶数パリティ sp とキャリーもしくはボローによるデータの反転条件 c0, c1, c2, c3 および、パリティの反転する条件 pc をまとめた論理式を示す(数5)。
次に図18,図19とともに、A+B+10の加算器ADD2について説明する。図18の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図18の例は、A+B+10(実際には後述のようにA+B-6)の演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図18の例は、入力ビットa0, b0を入力するNAND回路NAND411,a0, b0を入力してh0を出力するEXOR回路EXO410,NAND411の出力を反転してg0を出力するインバータINV410を有する。図18の例は更に、h0をバッファリングして出力ビットs0を出力するバッファBUF420を有する。
図18の例は更に、入力ビットa1, b1を入力するNAND回路NAND412,a1, b1を入力するNOR回路NOR411,a1, b1を入力してh1を出力するEXOR回路EXO411を有する。図18の例は更に、NAND412及びNOR411の出力を夫々反転してp1, g1を夫々出力するインバータINV411,INV412、並びに出力ビットs1を出力するEXNOR回路EXNO421を有する。
図18の例は更に、入力ビットa2, b2を入力するNAND回路NAND413,a2, b2を入力するNOR回路NOR412,a2, b2を入力しh2を出力するEXOR回路EXO412を有する。図18の例は更に、NAND413及びNOR412の出力を夫々反転してp2, g2を夫々出力するインバータINV413,INV414を有する。図18の例は更に、h2及びc2を入力し出力ビットs2を出力するEXNOR回路EXNO422、c2を出力するNAND回路NAND488,NAND488に夫々の出力を入力するNAND回路NAND486,NAND487を有する。
図18の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO413,h3及びc3を入力し出力ビットs3を出力するEXOR回路EXO423を有する。図18の例は更に、c3を出力するNAND回路NAND493,NAND493に夫々の出力を入力するNAND回路NAND489,NAND490,NAND491,NAND422を有する。
図18の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO430,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND481,NAND482,NAND483,NAND484を有する。図18の例は更に、NAND481,NAND482,NAND483,NAND484の夫々の出力を夫々入力するNAND485を有する。図18の例は更に、NAND485の出力pcとEXO430の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO431を有する。
図18の例では上記した構成により、下位ビットの演算結果から生成されるキャリー及びボローを考慮した上で演算結果の各ビットs0, s1, s2, s3を生成する。
ここで図18の例に関し、A+B+10をそのまま求めると、キャリーが二重に発生する場合の考慮が複雑になるため、図18の例では、代りにA+B-6を計算する。図18の例ではキャリーとボローの伝播が排他になるように回路を形成することで、伝播経路を1つで済ませる。ここで6は10に対する16の補数になるので、4ビットの演算では、4ビット内の結果のビットのパターンは、A+B+10とA+B-6とで同じになる。又、図19に各ビットから生成されるキャリーとボローの内訳を示す。
以下に、演算結果 s0, s1, s2, s3 、演算結果の偶数パリティ sp とキャリーもしくはボローによるデータの反転条件 c0, c1, c2, c3 および、パリティの反転する条件 pc をまとめた論理式を示す(数6)。
次に図20,図21とともに、A+B+11の加算器ADD5について説明する。図20の例は、入力データA及びBの夫々の4ビットa0, a1, a2, a3及びb0, b1, b2, b3並びに入力データA及びBの夫々の偶数パリティビットap及びbpが入力される。そして図20の例は、A+B+11(実際には後述のようにA+B-5)の演算結果の4ビットs0, s1, s2, s3並びにそのパリティビットspを出力する。
図20の例は、入力ビットa0, b0を入力するNOR回路NOR510,a0, b0を入力してh0を出力するEXOR回路EXO510,NOR510の出力を反転してp0を出力するインバータINV510を有する。図20の例は更に、h0を反転して出力ビットs0を出力するインバータINV520を有する。
図20の例は更に、入力ビットa1, b1を入力するNAND回路NAND512,a1, b1を入力するNOR回路NOR511,a1, b1を入力してh1を出力するEXOR回路EXO511を有する。図20の例は更に、NAND512及びNOR511の出力を夫々反転してp1, g1を夫々出力するインバータINV511,INV512、並びに出力ビットs1を出力するEXOR回路EXO521を有する。
図20の例は更に、入力ビットa2, b2を入力するNAND回路NAND513,a2, b2を入力するNOR回路NOR512,a2, b2を入力しh2を出力するEXOR回路EXO512を有する。図20の例は更に、NAND513及びNOR512の出力を夫々反転してp2, g2を夫々出力するインバータINV513,INV514を有する。図20の例は更に、h2及びc2を入力し出力ビットs2を出力するEXNOR回路EXNO522、c2を出力するNAND回路NAND5110,NAND5110に夫々の出力を入力するNAND回路NAND5108,NAND5109を有する。
図20の例は更に、入力ビットa3, b3を入力しh3を出力するEXOR回路EXO513,h3及びc3を入力し出力ビットs3を出力するEXOR回路EXO523を有する。図20の例は更に、c3を出力するNAND回路NAND5115,NAND5115に夫々の出力を入力するNAND回路NAND5111,NAND5112,NAND5113,NAND5114を有する。
図20の例は更に、入力パリティビットap, bpを入力するEXOR回路EXO530,上記した出力ビットs0〜s3を生成する際に生成される夫々の値を入力するNAND回路NAND5101,NAND5102,NAND5103,NAND5104、NAND5105を有する。図20の例は更に、NAND5101,NAND5102,NAND5103,NAND5104,NAND5105の夫々の出力を夫々入力するNAND5106,NAND5107を有する。図20の例は更に、NAND5106,NAND5107の夫々の出力を入力し、pcを出力するOR回路OR511、pcとEXO530の出力とを入力し、出力パリティビットspを出力するEXOR回路EXO531を有する。
図20の例では上記した構成により、下位ビットの演算結果から生成されるキャリー及びボローを考慮した上で演算結果の各ビットs0, s1, s2, s3を生成する。
ここで図20の例に関し、A+B+11をそのまま求めると、キャリーが二重に発生する場合の考慮が複雑になるため、図20の例では、代りにA+B-5を計算する。図20の例ではキャリーとボローの伝播が排他になるように回路を形成することで、伝播経路を1つで済ませる。ここで5は11に対する16の補数になるので、4ビットの演算では、4ビット内の結果のビットのパターンは、A+B+11とA+B-5とで同じになる。又、図21に各ビットから生成されるキャリーとボローの内訳を示す。
以下に、演算結果 s0, s1, s2, s3 、演算結果の偶数パリティ sp とキャリーもしくはボローによるデータの反転条件 c0, c1, c2, c3 および、パリティの反転する条件 pc をまとめた論理式を示す(数7)。
以下に本発明の実施例2について説明する。実施例2では、上述した実施例1において、図8に示すセグメント絶対値加算器DAD0,DAD1,...,DADmの各々を、ディジット単位ではなく、複数のディジット単位とする。すなわち実施例2の場合、セグメント絶対値加算器DAD0,DAD1,...,DADmの各々、例えばセグメント絶対値加算器DAD1が、図22で示す如く、複数(図22の例の場合、4個)のディジット加算器ブロックDAB1〜DAB4を有する。
図22に示すセグメント絶対値加算器はこのように4ディジット分の構成を有し、16ビット(4×4=16)分([15:0])の構成を有する。又、図22に示すセグメント絶対値加算器は、ローカルキャリールックアヘッド回路LCLA1を有する。ローカルキャリールックアヘッド回路LCLA1は、4ディジット単位内、すなわち4個のディジット加算器ブロックDAB1〜DAB4、相互間のキャリー伝播論理を実行する。したがって実施例2の場合、図8に示すブロックキャリー伝播回路BCP1は、4ディジット単位のキャリーを生成し、各セグメント絶対値加算器DAD0,DAD1,...,DADmに供給する。このように実施例2の場合、キャリー伝播論理を、4ディジット単位のセグメント絶対値加算器DAD0,DAD1,...,DADmの各々の内部(ローカルキャリールックアヘッド回路LCLA1)と外部(ブロックキャリー伝播回路BCP1)とで階層化する。その結果、セグメント絶対値加算器DAB1〜DAB4の各々の内部(ローカルキャリールックアヘッド回路LCLA1)と外部(ブロックキャリー伝播回路BCP1)とで、キャリー伝播論理を並行して実施(並列処理)することができる。
図23は、図22に示すディジット加算器ブロックDAB1〜DAB4の各々、例えばディジット加算器ブロックDAB3の構成の一例を示す。図23に示す実施例2によるディジット加算器ブロックは、図9に示すディジット単位のセグメント絶対値加算器と同様の構成を有し、対応する構成要素には同一符号を付し、重複する説明を省略する。図23に示すディジット加算器ブロックが図9に示すセグメント絶対値加算器と異なる点は、セレクタSEL21,SEL22,SEL23,SEL24を有する点である。
図23の構成を採用する場合、図22に示すローカルキャリールックアヘッド回路LCLA1は以下の動作を行う。すなわちローカルキャリールックアヘッド回路LCLA1は、4ディジット単位の入力データA,B及びブロックキャリー伝播回路BCP1から供給される4ディジット単位のキャリーBCin(BCin for recomp又はBCin for non-recomp)の値が0と1のいずれであっても対応できるように、以下の動作を行う。ローカルキャリールックアヘッド回路LCLA1が有する周知の2進演算器におけるキャリー伝播論理に従い、ディジット単位のキャリーを生成する。より具体的には、ローカルキャリールックアヘッド回路LCLA1は、ブロックキャリー伝播回路BCP1が供給する4ディジット単位のキャリーBCinが0の場合に対応して、ディジット単位のキャリーlocal digit carry at BCin=0を生成する。更に、ローカルキャリールックアヘッド回路LCLA1は、4ディジット単位のキャリーBCinが1の場合に対応して、ディジット単位のキャリーlocal digit carry at BCin=1を生成する。そして図22に示すローカルキャリールックアヘッド回路LCLA1は、生成したキャリーlocal digit carry at BCin=0及びキャリーlocal digit carry at BCin=1を、ディジット加算器ブロックDAB1〜DAB4の夫々に供給する。すなわち、ローカルキャリールックアヘッド回路LCLA1は、キャリーlocal digit carry at BCin=0及びキャリーlocal digit carry at BCin=1を、図23に示すディジット加算器ブロックに供給する。
図23中、供給されたキャリーlocal digit carry at BCin=0はセレクタSEL21,SEL23に入力される。セレクタSEL21は、キャリーlocal digit carry at BCin=0が0の場合、セレクタSEL11の出力s0をセレクタSEL15に選択出力し、1の場合、セレクタSEL13の出力s1をセレクタSEL15に選択出力する。セレクタSEL23は、キャリーlocal digit carry at BCin=0が0の場合、インバータINV5の出力rs0をセレクタSEL16に選択出力し、1の場合、インバータ6の出力rs1をセレクタSEL16に選択出力する。
他方、供給されたキャリーlocal digit carry at BCin=1はセレクタSEL22,SEL24に入力される。セレクタSEL22は、キャリーlocal digit carry at BCin=1が0の場合、セレクタSEL11の出力s0をセレクタSEL15に選択出力し、1の場合、セレクタSEL13の出力s1をセレクタSEL15に選択出力する。セレクタSEL24は、キャリーlocal digit carry at BCin=1が0の場合、インバータINV5の出力rs0をセレクタSEL16に選択出力し、1の場合、インバータ6の出力rs1をセレクタSEL16に選択出力する。
セレクタSEL15,SEL16は図9の場合と同様に、夫々、ブロックキャリー伝播回路BCP1が供給する上記4ディジット単位の信号BCin for non-recomp又はBCin for recompに従って選択出力動作を行う。又、セレクタSEL17も図9の場合と同様に、図8に示される信号RECOMPに従って選択出力動作を行う。
図23のディジット加算器における他の動作は図9に示すディジット単位のセグメント絶対値加算器における動作と同様である。
次に本発明の実施例3について説明を行う。実施例3によれば、上述した実施例1における図9に示すディジット単位のセグメント絶対値加算器に少数のゲートを追加して、2進の絶対値加算器としても動作するようにする。図24に実施例3によるディジット単位のセグメント絶対値加算器の構成の一例を示す。図9の構成と比較すると、digit carry out信号でセレクタSEL11,SEL12,SEL13,SEL14の動作を制御する部分にBINARY_MODE信号と論理をとるためのゲートを追加する。追加するゲートは、OR回路OR51,AND回路AND51,OR回路OR52,AND回路AND52である。これらOR回路OR51,AND回路AND51、OR回路OR52,AND回路AND52には、digit carry out 信号及びBINARY_MODE信号が入力される。BINARY_MODE信号は、10進演算を選択する場合0となり、2進演算を選択する場合1となる。
s0を出力するセレクタSEL11において、BINARY_MODE信号が0のとき、OR回路OR51は、加算器ADD1からのdigit carry out信号をそのまま通過させる。その結果、図9の場合と同様な構成となり、s0に関し、図9の場合と等価な10進演算動作を実行する。他方、BINARY_MODE信号が1のとき、OR51は常時1を出力し、セレクタSEL11は常時加算器ADD1の演算結果を選択する。
又。インバータINV5を介しrs0を出力するセレクタSEL12の動作を制御するAND51は、BINARY_MODE信号を反転した値とdigit carry out信号とのAND論理を実行する。このため、BINARY_MODE信号が0のとき、セレクタ12はdigit carry out信号で制御され、信号rs0に関し、図9の場合と等価な10進演算動作を実行する。他方、BINARY_MODE信号が1のとき、AND51は常時0を出力し、その結果セレクタ12は常時加算器ADD1の演算結果を選択する。
s1を出力するセレクタSEL13,インバータINV6を介してrs1を出力するセレクタSEL14の夫々の制御についても上記したs0、rs0の場合と同様である。すなわちBINARY_MODE信号が0の場合、図24の回路は図9の回路と等価な10進演算の動作を行う。他方、BINARY_MODE信号が1の場合、s0は常時加算器ADD1の演算結果(A+B)となり、rs0は常時加算器ADD1の演算結果(A+B)の2の補数となる。又、BINARY_MODE信号が1の場合、s1は常時加算器ADD4の演算結果(A+B+1)となり、rs1は常時加算器ADD4の演算結果(A+B+1)の2の補数となる。
したがってBINARY_MODE信号が1の場合、図24の回路は、4ビット幅の2進の絶対値加算器と等価の動作を行う。上記信号BCin for non-recompや信号BCin for recomp信号を生成するブロックキャリー伝播回路BCP1(図8参照)は、上記の如く2進演算器におけるキャリー伝播論理を有している。したがってブロックキャリー伝播回路BCP1による信号RECOMPの作成条件も2進演算器におけるキャリー伝播論理に従っている。よって実施例3では、図8の10進絶対値加算器本体の構成において、実施例1の図9に示すセグメント絶対値加算器の回路構成を、図24の回路構成に置き換える。その結果、このようにセグメント絶対値加算器を図24の回路構成に置き換えた10進絶対値加算器本体を含む、例えば図2に示す10進絶対値加算器は、2進の絶対値加算器としても使用し得るようになる。尚、上記セグメント絶対値加算器を図24の回路構成に置き換えた10進絶対値加算器本体を、絶対値加算器本体15Xと称する。
又、実施例3の場合、10進演算器として動作をさせるように予め外部で+6を行っている部分、すなわち例えば図3における加算回路11は、2進演算時には不要となる。したがって図3に示す10進絶対値加算器の全体構成の例を、実施例3では図25のように変更する。すなわちセレクタ17を挿入し、セレクタ17は、BINARY_MODE信号が1の場合、すなわち2進演算時にはオペランドop1をそのままセレクタ14に供給する。他方BINARY_MODE信号が0の場合、すなわち10進演算時には上記の如く、オペランドop1に対し加算回路11でディジット単位で+6を行った上でセレクタ14に供給する。
したがって図25の構成では、BINARY_MODE信号により、2進動作時(BINARY_MODE=1)には、加算時(SUB=0)、オペランドop1がそのまま絶対値加算器本体15Xに供給される。他方、減算時(SUB=1)、1の補数化回路12によってオペランドop1に対する1の補数がとられて絶対値加算器本体15Xに供給される。他方、10進動作時(BINARY_MODE=0)には、図3の場合と同様に、加算時(SUB=0)、オペランドop1の各ディジットに対し+6が行われた値が絶対値加算器本体15Xに供給される。又、減算時(SUB=1)、1の補数化回路12により、オペランドop1の各ディジットに対し9の補数をとって+6を行った値と等価な値が絶対値加算器本体15Xに供給される。
実施例3では、このように、BINARY_MODE信号により、10進絶対値加算器を、2進絶対値加算器としての動作させることも、10進絶対値加算器としての動作させることも可能となる。