半導体装置
【課題】演算の高速化を図り、また、小型化を図ることで並列度を高めることが可能な半導体装置を提供する。
【解決手段】半導体装置201は、乗数を示す3ビットの第1の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力するデコーダDEC1,DEC2と、被乗数を示す2ビットの第1の被乗数データと、シフトフラグ、反転フラグおよび演算フラグとを受けて、シフトフラグに基づいて第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、選択したビットを反転フラグに基づいて反転または非反転し、反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを演算フラグに基づいて選択し、第1の乗数データおよび第1の被乗数データの部分積を示す部分積データとして出力する第1の部分積算出部31〜38とを備える。
【解決手段】半導体装置201は、乗数を示す3ビットの第1の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力するデコーダDEC1,DEC2と、被乗数を示す2ビットの第1の被乗数データと、シフトフラグ、反転フラグおよび演算フラグとを受けて、シフトフラグに基づいて第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、選択したビットを反転フラグに基づいて反転または非反転し、反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを演算フラグに基づいて選択し、第1の乗数データおよび第1の被乗数データの部分積を示す部分積データとして出力する第1の部分積算出部31〜38とを備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置に関し、特に、演算処理を行なう半導体装置に関する。
【背景技術】
【0002】
近年、デジタルカメラ、デジタルビデオ、ビデオ会議及び携帯電話等の普及に伴い、音声、静止画像及び動画等のマルチメディアアプリケーションのデータ量が増大している。そして、この増大したデータをリアルタイムに処理する必要が生じている。さらに、モバイル機器においては、高速処理のみならず、その携帯性から長時間駆動が可能であり、かつ小型であることが求められるようになってきた。
【0003】
さらに、WCDMA、JPEG(Joint Photographic Expert Group)2000およびMPEGなど新たな規格が次々と出現している。このような背景から、マルチメディアアプリケーションを処理するLSIは、高速処理、低消費電力及び小面積であることが必須条件とされるため、従来はデジタルシグナルプロセッサ(DSP)をはじめとして、固有の処理のみに特化したASIC(Application Specific Integrated Circuit)が利用されてきた。
【0004】
一般にマルチメディアアプリケーションは、被処理データ間の相互依存が少ないという特徴を持つことから、並列処理によって処理効率を上げることが可能である。例として、画像圧縮形式の1つであるJPEGにおいては、圧縮対象画像の全ピクセルを8×8のブロックに区切り、これらのブロックをすべて並列に処理することが可能となっている。この並列化可能処理には、離散コサイン変換(DCT)、量子化、ジグザグスキャンおよびランレングス処理等の並列可能アルゴリズムが含まれる。
【0005】
DSPおよびASIC等の従来のLSIは、これらのブロックを並列に処理するために、SIMD(Single Instruction Multiple Data)というアーキテクチャを採用することが多い。SIMDとは、複数の演算器(Processing Element:PE)を内部に持ち、各PEに対し同一の命令を送り、複数の異なるデータを同タイミングで並列に処理するアーキテクチャであり、マルチメディアデータ処理に適しているといえる。
【0006】
SIMDアーキテクチャのように並列処理を行なうアーキテクチャでは、演算器(PE)のビット長を小さくし、小面積で実装し、その並列度を高めることで、処理能力の向上を図ることができる。しかしながら、PEのビット幅を小さく設計すると並列度を高めやすい一方で、乗算等の処理に多くのクロックサイクルがかかってしまうという問題がある。乗算処理はマルチメディア処理で多く用いられる処理の一つであり、乗算器を少ないビット数かつ小面積で実現しながら、高速演算を実現することで、静止画像、動画像および音声などの処理の効率化を図ることができ、ユーザのニーズを満たすことができる。
【0007】
図20は、ビットパラレル方式を示す図である。図21は、ビットシリアル方式を示す図である。
【0008】
一般にDSPおよび各種SIMDアーキテクチャを利用したデータの処理方法は、図20に示すように各ワードをいくつかのブロックに分けて並列に処理する方法(以下、ビットパラレル方式と呼ぶ)、および図21に示すように、すべてのワードを逐次処理する方式(以下、ビットシリアル方式と呼ぶ)の2通りが挙げられる。以下に各々の特徴を述べる。
【0009】
[ビットパラレル方式]
1)1ワードのビット長にあわせた複数のPEを設けるため、1ワードを1クロックサイクル程度で処理することが可能。
2)ブロック個数b分、1度に複数のワードを処理可能。
3)処理ビット幅は一定であるため、アプリケーションによっては演算に使用しないPEが生ずる。
4)1ワードのビット長dが大きいほど、1ブロックを処理するために必要なPEの個数が増加し、並列度を上げるためにはより多くのハードウェアリソースを必要とする。
5)1ワードを1クロックサイクルで処理する場合には、すべてのワードを処理するためにaクロックサイクルが必要となる。
6)必要なPEの個数は、(d×b)個となる。
【0010】
[ビットシリアル方式]
1)1ワードに対し、1〜2ビット長のPEを用意するため、1ワードをほぼビット長dと同程度のクロックサイクルで処理することが可能。
2)1回の処理でワード個数(a×b)分、並列に処理が可能。
3)処理ビット幅が可変であるため、アプリケーションにあわせてPEを有効に利用可能。
4)1ワードに必要なPEの個数が少ないため、並列度を上げた場合にもハードウェアリソースをそれほど消費しない。
5)データの処理方向を変える必要がある。
6)すべてのワードを処理するためにはdクロックサイクルが必要となる。
7)必要なPEの個数は、(a×b)個となる。
【0011】
マルチメディアアプリケーション処理は、主に処理ビット幅が可変であり、処理ワード数が非常に多いという特徴があり、高速にマルチメディアアプリケーション処理を行なうためには、極力bを大きくし、aを小さくすることが理想である。すなわち、d≪bの関係が成り立てばよく、これまでビットシリアル方式はマルチメディアアプリケーションを効率よく処理するアーキテクチャとして考えられてきた。
【0012】
ビットシリアル演算を行なう構成として、たとえば、特許文献1には、以下のような半導体装置が開示されている。すなわち、行列状に配列されかつ複数のエントリに分割される複数のメモリセルを有するメモリセルアレイ、各上記エントリに対応して配置され、各々が指定された演算を対応のエントリのデータに対して行なう複数の第1の演算回路、各上記エントリと対応の第1の演算回路との間でデータを転送する複数のデータ転送線、および上記複数のデータ転送線それぞれに対応して配置され、対応のデータ転送線と対応の第1の演算回路との間でビット単位でかつエントリパラレル態様でデータを転送する複数のデータ転送回路を備え、各上記エントリには多ビットデータが格納され、各上記第1の演算回路は対応のエントリの多ビットデータに対してビットシリアルな態様で演算を実行する。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開2006−127460号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
しかしながら、1ビットシリアル演算では加算および減算等の処理はビット長と同程度のクロックサイクルで処理可能である一方で、乗算処理および除算処理はビット長の2乗以上のクロックサイクルがかかってしまう。ここで、クロックサイクルを短くするために、演算器のビット長を多くすることが考えられる。しかしながら、ビット長を多くすると、クロックサイクル数は減少するものの、回路面積が大きくなり並列度が高められないという問題が発生する。
【0015】
それゆえに、本発明の目的は、演算の高速化を図り、また、小型化を図ることで並列度を高めることが可能な半導体装置を提供することである。
【課題を解決するための手段】
【0016】
本発明の一実施例の形態の半導体装置は、要約すれば、デコーダが、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力する。そして、部分積算出部が、デコーダから受けた各フラグに基づいて、乗数データおよび被乗数データの部分積を示す部分積データを出力する。
【発明の効果】
【0017】
本発明の一実施例の形態によれば、演算の高速化を図り、また、小型化を図ることで並列度を高めることができる。
【図面の簡単な説明】
【0018】
【図1】本発明の第1の実施の形態に係る半導体装置の構成を示す図である。
【図2】本発明の第1の実施の形態に係る半導体装置におけるブースデコーダの構成を示す回路図である。
【図3】ブースデコーダの真理値表を示す図である。
【図4】本発明の第1の実施の形態に係る半導体装置におけるセレクタセルの構成を示す回路図である。
【図5】セレクタセルの真理値表を示す図である。
【図6】本発明の第1の実施の形態に係る半導体装置におけるシフト加算回路の構成を示す回路図である。
【図7】本発明の第1の実施の形態に係る半導体装置の変形例の構成を示す図である。
【図8】本発明の第1の実施の形態に係る半導体装置が行なう乗算処理のフローを示す図である。
【図9】本発明の第1の実施の形態に係る半導体装置が行なう乗算処理以外の演算の基本概念を示す図である。
【図10】本発明の第1の実施の形態に係る半導体装置が行なう加算処理のフローを示す図である。
【図11】本発明の第1の実施の形態に係る半導体装置が行なう減算処理のフローを示す図である。
【図12】本発明の第1の実施の形態に係る半導体装置が行なう補数処理のフローを示す図である。
【図13】本発明の第1の実施の形態に係る半導体装置が行なう反転処理のフローを示す図である。
【図14】本発明の第1の実施の形態に係る半導体装置が行なう1ビットシフト処理のフローを示す図である。
【図15】本発明の第1の実施の形態に係る半導体装置が行なう2ビットシフト処理のフローを示す図である。
【図16】本発明の第1の実施の形態に係る半導体装置が行なう3ビットシフト処理のフローを示す図である。
【図17】本発明の第2の実施の形態に係る半導体装置の構成を示す図である。
【図18】本発明の第2の実施の形態に係る半導体装置における加減算部の構成を示す図である。
【図19】本発明の第2の実施の形態に係る半導体装置における出力演算部95の構成を示す図である。
【図20】ビットパラレル方式を示す図である。
【図21】ビットシリアル方式を示す図である。
【発明を実施するための形態】
【0019】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【0020】
<第1の実施の形態>
図1は、本発明の第1の実施の形態に係る半導体装置の構成を示す図である。
【0021】
図1を参照して、半導体装置201は、ブースデコーダDEC1,DEC2と、レジスタ11〜21と、セレクタセル(部分積算出回路)31〜38と、シフト加算回路(部分積加算回路)40とを備える。図1において、乗数を示すデータY0〜Y3および被乗数を示すデータX0〜X3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータY0およびデータX0であり、MSBはデータY3およびデータX3である。
【0022】
以下、ブースデコーダDEC1,DEC2の各々をブースデコーダDECと称する場合がある。セレクタセル31〜38の各々をセレクタセルSELと称する場合がある。
【0023】
半導体装置201は、たとえば4ビットシリアル乗算器であり、4ビット×4ビットごとにシーケンシャルに乗算を行なう。
【0024】
ブースデコーダDEC1は、乗数を示すデータY0,Y1、およびレジスタ21からのデータを受けて、ブースのアルゴリズムに従い、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグC1をレジスタ16〜18およびシフト加算回路40へそれぞれ出力する。
【0025】
レジスタ16は、ブースデコーダDEC1から受けたシフトフラグDを保持するとともにセレクタセル31〜34へ出力し、かつ保持したシフトフラグDの論理レベルを反転したデータをセレクタセル31〜34へ出力する。
【0026】
レジスタ17は、ブースデコーダDEC1から受けた演算フラグNを保持するとともにセレクタセル31〜34へ出力し、かつ保持した演算フラグNの論理レベルを反転したデータをセレクタセル31〜34へ出力する。
【0027】
レジスタ18は、ブースデコーダDEC1から受けた反転フラグFを保持するとともにセレクタセル31〜34へ出力する。
【0028】
ブースデコーダDEC2は、乗数を示すデータY1,Y2,Y3を受けて、ブースのアルゴリズムに従い、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグC2をレジスタ19〜21およびシフト加算回路40へそれぞれ出力する。
【0029】
レジスタ19は、ブースデコーダDEC2から受けたシフトフラグDを保持するとともにセレクタセル35〜38へ出力し、かつ保持したシフトフラグDの論理レベルを反転したデータをセレクタセル35〜38へ出力する。
【0030】
レジスタ20は、ブースデコーダDEC2から受けた演算フラグNを保持するとともにセレクタセル35〜38へ出力し、かつ保持した演算フラグNの論理レベルを反転したデータをセレクタセル35〜38へ出力する。
【0031】
レジスタ21は、ブースデコーダDEC2から受けた反転フラグFを保持するとともにデータF2としてセレクタセル35〜38へ出力し、かつブースデコーダDEC1へ出力する。
【0032】
レジスタ12は、SRAMから受けた被乗数を示すデータX0を保持するとともにセレクタセル31、32、35および36へ出力する。
【0033】
レジスタ13は、SRAMから受けた被乗数を示すデータX1を保持するとともにセレクタセル32、33、36および37へ出力する。
【0034】
レジスタ14は、SRAMから受けた被乗数を示すデータX2を保持するとともにセレクタセル33、34、37および38へ出力する。
【0035】
レジスタ15は、SRAMから受けた被乗数を示すデータX3を保持するとともにセレクタセル34および38ならびにレジスタ11へ出力する。
【0036】
レジスタ11は、レジスタ15から受けたデータX3を保持するとともにセレクタセル31および35へ出力する。また、レジスタ11は、外部から受けたリセット信号RSTによってリセットされる。
【0037】
セレクタセル31は、レジスタ11から受けたデータ、レジスタ12から受けたデータX0、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、レジスタ11から受けたデータが下位ビットであり、データX0が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S10としてシフト加算回路40へ出力する。
【0038】
セレクタセル32は、レジスタ12から受けたデータX0、レジスタ13から受けたデータX1、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX0が下位ビットであり、データX1が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S11としてシフト加算回路40へ出力する。
【0039】
セレクタセル33は、レジスタ13から受けたデータX1、レジスタ14から受けたデータX2、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX1が下位ビットであり、データX2が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S12としてシフト加算回路40へ出力する。
【0040】
セレクタセル34は、レジスタ14から受けたデータX2、レジスタ15から受けたデータX3、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX2が下位ビットであり、データX3が上位ビットである2ビットの被乗数データと、データF2が下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S13としてシフト加算回路40へ出力する。
【0041】
セレクタセル35は、レジスタ11から受けたデータ、レジスタ12から受けたデータX0、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、レジスタ11から受けたデータが下位ビットであり、データX0が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S20としてシフト加算回路40へ出力する。
【0042】
セレクタセル36は、レジスタ12から受けたデータX0、レジスタ13から受けたデータX1、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX0が下位ビットであり、データX1が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S21としてシフト加算回路40へ出力する。
【0043】
セレクタセル37は、レジスタ13から受けたデータX1、レジスタ14から受けたデータX2、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX1が下位ビットであり、データX2が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S22としてシフト加算回路40へ出力する。
【0044】
セレクタセル38は、レジスタ14から受けたデータX2、レジスタ15から受けたデータX3、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX2が下位ビットであり、データX3が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S23としてシフト加算回路40へ出力する。
【0045】
シフト加算回路40は、セレクタセル31〜38からそれぞれ受けた部分積S10,S11,S12,S13,S20,S21,S22,S23と、ブースデコーダDEC1およびDEC2から受けた補数フラグC1,C2とに基づいて、部分積S10,S11,S12,S13,S20,S21,S22,S23を加算することにより、データX0〜X3とデータY0〜Y3との乗算結果を算出する。
【0046】
データI0〜I3は、シリアル乗算における前段の乗算結果までの累積値を示している。シフト加算回路40は、算出した乗算結果と、SRAMから受けたデータI0〜I3とを加算し、加算結果を示す4ビットのデータR0〜R3をデータSOUTとしてSRAMへ出力する。なお、半導体装置201は、SRAMを備える構成であってもよい。
【0047】
また、レジスタ11は、ブースのアルゴリズムに従う乗数のデコード(以下、ブースデコードとも称する。)結果に基づいて被乗数データのシフトが行なわれる場合、シフト結果すなわちレジスタ15の出力データを補完する。シフト動作が行なわれる場合には、レジスタ11〜14の出力データが演算の対象となる。
【0048】
以下、データX0〜X3の各々をデータXと称する場合がある。データY0〜Y3の各々をデータYと称する場合がある。部分積S10,S11,S12,S13,S20,S21,S22,S23の各々を部分積Sと称する場合がある。
【0049】
図2は、本発明の第1の実施の形態に係る半導体装置におけるブースデコーダの構成を示す回路図である。図2において、データYL,YM,YHは、ブースデコーダDEC1においてはそれぞれデータF2,Y0,Y1を示し、ブースデコーダDEC2においてはそれぞれデータY1,Y2,Y3を示す。また、データ/YL,/YM,/YHは、YL,YM,YHの論理レベルを反転したデータを示す。また、D,N,F,Cは、それぞれシフトフラグ、演算フラグ、反転フラグおよび補数フラグを示す。
【0050】
図2を参照して、ブースデコーダDECは、NチャネルMOSトランジスタM1〜M6と、PチャネルMOSトランジスタMp1〜Mp5と、NANDゲートG1,G2と、NOTゲートG3とを含む。
【0051】
PチャネルMOSトランジスタMp1は、データYMを受けるゲートと、データ/YHを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM1は、データ/YMを受けるゲートと、データ/YHを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp2は、データ/YMを受けるゲートと、データYHを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM2は、データ/YHを受けるゲートと、データYHを受けるドレインと、ソースとを有する。
【0052】
PチャネルMOSトランジスタMp3は、データ/YHを受けるゲートと、データ/YLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM3は、データ/YMを受けるゲートと、データ/YLを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp4は、データ/YMを受けるゲートと、データYLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM4は、データ/YHを受けるゲートと、データYLを受けるドレインと、ソースとを有する。
【0053】
NANDゲートG1は、PチャネルMOSトランジスタMp1およびMp2のドレインと、NチャネルMOSトランジスタM1およびM2のソースとに接続された第1入力端子と、PチャネルMOSトランジスタMp3およびMp4のドレインと、NチャネルMOSトランジスタM3およびM4のソースとに接続された第2入力端子とを有する。
【0054】
NANDゲートG2は、NANDゲートG1の出力端子に接続された第1入力端子と、PチャネルMOSトランジスタMp3およびMp4のドレインと、NチャネルMOSトランジスタM3およびM4のソースとに接続された第2入力端子とを有する。
【0055】
PチャネルMOSトランジスタMp5は、データ/YHを受けるゲートと、NANDゲートG1の出力端子に接続されたソースと、ドレインとを有する。NチャネルMOSトランジスタM5は、データYHを受けるゲートと、NANDゲートG1の出力端子に接続されたドレインと、ソースとを有する。NチャネルMOSトランジスタM6は、データ/YHを受けるゲートと、論理ローレベルの信号すなわち”0”を示す信号を受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp5のドレイン、およびNチャネルMOSトランジスタM5,M6のソースが互いに接続され、この接続ノードの電圧が補数フラグCとして出力される。
【0056】
NANDゲートG1は、第1入力端子において受けたデータおよび第2入力端子において受けたデータの論理積を反転したデータを演算フラグNとして出力する。また、データYHが反転フラグFとして出力される。NANDゲートG2は、第1入力端子において受けたデータおよび第2入力端子において受けたデータの論理積を反転したデータをNOTゲートG3へ出力する。NOTゲートG3は、NANDゲートG2から受けたデータの論理レベルを反転し、反転したデータをシフトフラグDとして出力する。
【0057】
図3は、ブースデコーダの真理値表を示す図である。
図3を参照して、入力データYH,YM,YLがすべて”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”0”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として0が加算される。
【0058】
また、入力データYH,YM,YLがそれぞれ”0”,”0”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXがそのまま加算される。
【0059】
また、入力データYH,YM,YLがそれぞれ”0”,”1”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXがそのまま加算される。
【0060】
また、入力データYH,YM,YLがそれぞれ”0”,”1”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”1”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXが1ビットシフトアップされたデータが加算される。
【0061】
また、入力データYH,YM,YLがそれぞれ”1”,”0”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”1”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXが1ビットシフトアップされたデータの補数データが加算される。
【0062】
また、入力データYH,YM,YLがそれぞれ”1”,”0”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXの補数データが加算される。
【0063】
また、入力データYH,YM,YLがそれぞれ”1”,”1”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXの補数データが加算される。
【0064】
また、入力データYH,YM,YLがそれぞれ”1”,”1”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”0”,”1”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として0が加算される。
【0065】
ブースデコーダDECは、いわゆるブースのアルゴリズムに従い乗数をデコードする回路である。
【0066】
しかしながら、ブースのアルゴリズムに従う通常のブースデコーダでは、乗数を3桁の符号付2進数へデコードするのに対し、本発明の第1の実施の形態に係る半導体装置におけるブースデコーダDECは、乗数をシフトフラグD、反転フラグF、演算フラグNおよび補数フラグCへデコードする。
【0067】
そして、シフトフラグD、反転フラグF、演算フラグNを後述するセレクタセルSELへ入力することで、部分積を生成し、また、補数フラグCをシフト加算回路40へ入力して補数処理を実行する。
【0068】
ブースデコーダDECは、乗数ビットを2ビット増加する毎に、1つ追加するだけで、汎用的にmビット×nビットの回路構成に対応することができる。
【0069】
図4は、本発明の第1の実施の形態に係る半導体装置におけるセレクタセルの構成を示す回路図である。図4において、/D,/N,/Fは、それぞれシフトフラグ、演算フラグおよび反転フラグの論理レベルを反転したデータを示す。また、XLは被乗数の下位ビットを示し、XHは被乗数の上位ビットを示す。
【0070】
図4を参照して、セレクタセルSELは、NチャネルMOSトランジスタM11〜M16と、PチャネルMOSトランジスタMp11〜Mp15とを含む。
【0071】
NチャネルMOSトランジスタM11は、シフトフラグ/Dを受けるゲートと、データXLを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp11は、シフトフラグDを受けるゲートと、データXLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM12は、シフトフラグDを受けるゲートと、データXHを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp12は、シフトフラグ/Dを受けるゲートと、データXHを受けるソースと、ドレインとを有する。PチャネルMOSトランジスタMp13は、反転フラグFを受けるゲートと、ソースと、ドレインとを有する。NチャネルMOSトランジスタM13は、反転フラグ/Fを受けるゲートと、ドレインと、ソースとを有する。NチャネルMOSトランジスタM14は、ゲートと、反転フラグFを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp14は、NチャネルMOSトランジスタM11およびM12のソース、PチャネルMOSトランジスタMp11およびMp12のドレイン、PチャネルMOSトランジスタMp13のソース、NチャネルMOSトランジスタM13のドレインならびにNチャネルMOSトランジスタM14のゲートに接続されたゲートと、反転フラグ/Fを受けるドレインと、ソースとを有する。NチャネルMOSトランジスタM15は、演算フラグNを受けるゲートと、ドレインと、ソースとを有する。PチャネルMOSトランジスタMp15は、演算フラグ/Nを受けるゲートと、PチャネルMOSトランジスタMp13のドレイン、PチャネルMOSトランジスタMp14のソース、NチャネルMOSトランジスタM13,M14のソース、およびNチャネルMOSトランジスタM15のドレインに接続されたソースと、ドレインとを有する。NチャネルMOSトランジスタM16は、演算フラグ/Nを受けるゲートと、論理ローレベルの信号を受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp15のドレインと、NチャネルMOSトランジスタM15,M16のソースとが互いに接続され、この接続ノードの電圧が部分積Sとして出力される。
【0072】
図5は、セレクタセルの真理値表を示す図である。
図5を参照して、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”0”,”0”,”0”である場合には、セレクタセルSELは、部分積Sとして”0”を出力する。
【0073】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”0”,”0”,”1”である場合、”0”,”1”,”0”である場合、および”0”,”1”,”1”である場合には、セレクタセルSELは、部分積Sとして”0”を出力する。
【0074】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”0”,”0”である場合には、セレクタセルSELは、部分積SとしてデータXHを出力する。
【0075】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”0”,”1”である場合には、セレクタセルSELは、部分積SとしてデータXLを出力する。
【0076】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”1”,”0”である場合には、セレクタセルSELは、部分積SとしてデータXHの論理レベルを反転したデータ/XHを出力する。
【0077】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”1”,”1”である場合には、セレクタセルSELは、部分積SとしてデータXLの論理レベルを反転したデータ/XLを出力する。
【0078】
このように、セレクタセルSELは、ブースのアルゴリズムに従ってデコードされた演算フラグN、反転フラグFおよびシフトフラグDに基づいて部分積を算出する。
【0079】
より詳細には、再び図4を参照して、PチャネルMOSトランジスタMp11,Mp12およびNチャネルMOSトランジスタM11,M12で構成される選択回路は、シフトフラグDに基づいて、セレクタセルSELへ入力された被乗数データをシフトするか否かを選択する。すなわち、この選択回路は、シフトフラグDが”0”の場合にはデータXHをそのまま出力し、シフトフラグDが”1”の場合にはデータXHの1ビット下位のデータXLを出力する。
【0080】
PチャネルMOSトランジスタMp13,Mp14およびNチャネルMOSトランジスタM13,M14によって構成される排他的論理和回路は、反転フラグFが”1”の場合には、上記選択回路によって選択されたデータXLまたはデータXHを反転させて出力する。また、この排他的論理和回路は、反転フラグFが”0”の場合には、上記選択回路によって選択されたデータXLまたはデータXHをそのままNチャネルMOSトランジスタM15およびPチャネルMOSトランジスタMp15へ出力する。
【0081】
PチャネルMOSトランジスタMp15およびNチャネルMOSトランジスタM15,M16によって構成される回路は、演算フラグNが”1”の場合には、上記排他的論理和回路から受けたデータを部分積Sとして出力し、演算フラグNが”0”の場合には、”0”を示すデータを部分積Sとして出力する。
【0082】
図4に示すセレクタセルSELの回路構成を1単位とすることで、乗数ビットおよび被乗数ビットを増加させた乗算回路を簡単に構成することが可能となる。
【0083】
図6は、本発明の第1の実施の形態に係る半導体装置におけるシフト加算回路の構成を示す回路図である。
【0084】
図6を参照して、シフト加算回路40は、たとえば4ビット×4ビット用の回路であり、ハーフアダー(HA)51〜54と、フルアダー(FA)61〜68と、マルチプレクサ(MUX)71〜73と、レジスタ81〜83とを含む。
【0085】
ハーフアダー51は、部分積S13およびS21を加算し、加算結果の下位ビットをデータSumとしてフルアダー61へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてハーフアダー53へ出力する。
【0086】
ハーフアダー52は、部分積S12およびS20を加算し、加算結果の下位ビットをデータSumとしてフルアダー62へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー61へ出力する。
【0087】
ハーフアダー53は、部分積S22およびハーフアダー51から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー64へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー63へ出力する。
【0088】
フルアダー61は、ハーフアダー52から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー51から受けたデータSumおよびSRAMから受けたデータI3を加算し、加算結果の下位ビットをデータSumとしてフルアダー65へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー64へ出力する。
【0089】
フルアダー62は、レジスタ81から受けたデータをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー52から受けたデータSumおよびSRAMから受けたデータI2を加算し、加算結果の下位ビットをデータSumとしてフルアダー66へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー65へ出力する。
【0090】
ハーフアダー54は、部分積S11およびレジスタ82から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー67へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー66へ出力する。
【0091】
フルアダー63は、フルアダー64から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、部分積S23およびハーフアダー53から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてマルチプレクサ72へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてマルチプレクサ71へ出力する。
【0092】
フルアダー64は、フルアダー65から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー53から受けたデータSumおよびフルアダー61から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてマルチプレクサ73へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー63へ出力する。
【0093】
フルアダー65は、フルアダー66から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー61から受けたデータSumおよびフルアダー62から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR3として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー64へ出力する。
【0094】
フルアダー66は、フルアダー67から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー62から受けたデータSumおよびハーフアダー54から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR2として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー65へ出力する。
【0095】
フルアダー67は、フルアダー68から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー54から受けたデータSumおよびSRAMから受けたデータI1を加算し、加算結果の下位ビットをデータR1として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー66へ出力する。
【0096】
フルアダー68は、レジスタ83から受けたデータをキャリー入力Cinすなわち桁上げ値として受けて、部分積S10およびSRAMから受けたデータI0を加算し、加算結果の下位ビットをデータR0として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー67へ出力する。
【0097】
マルチプレクサ71は、制御信号BDCに基づいて、ブースデコーダDEC2から受けた補数フラグC2およびフルアダー63から受けたキャリー出力Coutのいずれかを選択してレジスタ81へ出力する。マルチプレクサ72は、制御信号BDCに基づいて、フルアダー63から受けたデータSumおよび”0”を示すデータのいずれかを選択してレジスタ82へ出力する。マルチプレクサ73は、制御信号BDCに基づいて、ブースデコーダDEC1から受けた補数フラグC1およびフルアダー64から受けたデータSumのいずれかを選択してレジスタ83へ出力する。
【0098】
レジスタ81は、マルチプレクサ71から受けたデータを保持するとともにフルアダー62へ出力する。レジスタ82は、マルチプレクサ72から受けたデータを保持するとともにハーフアダー54へ出力する。レジスタ83は、マルチプレクサ73から受けたデータを保持するとともにフルアダー68へ出力する。
【0099】
このように、シフト加算回路40は、セレクタセルSELから出力される部分積、及び補数フラグCの値等を加算する。より詳細には、シフト加算回路40は、セレクタセルSELから出力される部分積S10〜S13およびS20〜S23と、シリアル乗算における前段の乗算結果までの累積値I0〜I3と、このシフト加算回路40における加算結果の1クロック前の上位ビットまたは補数フラグCとを加算する。
【0100】
シフト加算回路40において加算結果の下位ビットであるデータR0〜R3が出力され、上位ビットは次のクロックタイミングで加算するためにフィードバック用のレジスタ81〜83に格納される。
【0101】
シフト加算回路40は、最も効率よく加算器を構成できるWallaceの木を用いた回路構成を有している。シフト加算回路40は、ビットシリアル演算において、被乗数であるデータXのうち最下位ビットのデータを扱う場合には、上位ビットのフィードバックが存在しないという特徴がある。また、被乗数であるデータXのうち最下位ビット以外のデータを扱う場合には、補数フラグCは必要がないという特徴がある。このため、シフト加算回路40では、マルチプレクサ71〜73によって上位ビットのデータおよび補数フラグCのいずれかを選択する。より詳細には、制御信号BDCは、被乗数であるデータXのうち最下位ビットのデータを扱う場合に活性化され、これにより、マルチプレクサ71〜73は、それぞれ補数フラグC2,”0”を示すデータ,補数フラグC1を選択する。このような構成により、回路規模を削減することができる。
【0102】
図7は、本発明の第1の実施の形態に係る半導体装置の変形例の構成を示す図である。
図7を参照して、半導体装置202は、被乗数が4ビット、乗数が4ビットの4ビット×4ビットシリアル乗算器である半導体装置201を、被乗数がmビット、乗数がnビットのmビット×nビットシリアル乗算器に拡張した構成を有している。
【0103】
半導体装置202は、n/2個のブースデコーダDECと、(m×n/2)個のセレクタセルSELと、mビット×nビット用のシフト加算回路とを備える。
【0104】
以上のように、本発明の第1の実施の形態に係る半導体装置では、回路面積を小さくして高並列化を図ることが可能であるとともに、符号付乗算を高速に行なうことが可能である。また、シリアル処理を順次行なっていくことによって、可変長の演算が可能であり、また、マルチメディア処理において頻出する加算処理および減算処理が実行可能である。したがって、マルチメディアデータを効果的に処理することができる。
【0105】
図8は、本発明の第1の実施の形態に係る半導体装置が行なう乗算処理のフローを示す図である。図8は、8ビット×8ビットの乗算処理フローを示している。
【0106】
図8を参照して、Xは被乗数であり、Yはブースデコードに使用する乗数であり、Zは演算結果である。また、BabはXaおよびYbの部分積であり、MabはXaおよびYbの部分積の下4桁と前段の部分積の上3桁との和である。
【0107】
演算結果Zは、以下の式のように各部分積Mabを足し合わせることにより得られる。
Z0=M00
Z1=M10+M01
Z2=M20+M11
Z3=M30+M21
次に、演算処理の流れを説明する。
1)Y0を入力し、ブースのアルゴリズムに従いデコードし、D/N/F/Cフラグをセットする。
2)X0を入力し、X0×Y0の部分積B00を算出する。B00の下位4bitをM00とする。M00がそのままZ0となる。
3)X1を入力し、X1×Y0の部分積B10を算出する。B10の下位4bitおよびB00の上位3bitの和をM10として出力する。
4)X2を入力し、X2×Y0の部分積B20を算出する。B20の下位4bitおよびB10の上位3bitの和をM20として出力する。
5)X3を入力し、X3×Y0の部分積B30を算出する。B30の下位4bitおよびB20の上位3bitの和をM30として出力する。
6)Y1を入力し、ブースのアルゴリズムに従いデコードし、D/N/F/Cフラグをセットする。
7)X0を入力し、X0×Y1の部分積B01を算出する。B01の下位4bitをM01とする。M01およびM10の和をとりZ1とする。
8)X1を入力し、X1×Y1の部分積B11を算出する。B11の下位4bitおよびB01の上位3bitの和をM11とし、M20との和をとりZ2とする。
9)X2を入力し、X2×Y1の部分積B21を算出する。B21の下位4bitおよびB11の上位3bitの和をM21とし、M30との和をとりZ3とする。
【0108】
ここで、半導体装置201は、前述のようにブースデコードおよび部分積加算を行ない、上記Z*(*は0〜3)をそれぞれ算出する。たとえば、Z0を求める演算では、レジスタ12〜15に4ビットの上記X0が格納され、4ビットの上記Y0がブースデコードされる。
【0109】
シフト加算回路40は、ブースデコード結果に基づいてシフトおよび反転されたデータを加算して上記部分積B**(**は00,10,20,30,01,11,21)を算出する。そして、シフト加算回路40は、各部分積を加算し、加算結果をZ*としてSRAMに保存する。
【0110】
図9は、本発明の第1の実施の形態に係る半導体装置が行なう乗算処理以外の演算の基本概念を示す図である。図9は、8ビット×8ビットの演算処理フローを示している。
【0111】
ブースのアルゴリズムを用いたビットシリアル乗算器では、乗算以外にも演算が可能である。ビットシリアル乗算器において、2つのブースデコード結果に基づく値、SRAMからの入力、および上位ビットのフィードバックを利用することで、加算、減算、補数、反転およびシフト処理を行なうことが可能である。
【0112】
図9を参照して、Xは演算対象数であり、Yはシフトおよび補数処理に利用する数であり、YaはYの下位2ビット+F2レジスタの値すなわちレジスタ21の保持値であり、YbはYの上位3ビットの値であり、Zは演算結果であり、ZREGはキャリー用レジスタの値すなわちレジスタ81〜83の保持値であり、SRAMINはSRAMからの入力値である。
【0113】
ブースデコーダDECによってX×Ya(1段目)およびX×Yb(2段目)を計算し、それらとZREGおよびSRAMINの値とを加算する。この加算結果の下位4ビットをZとして出力し、上位3ビットをZREGとして次のクロックタイミングにおいてフィードバックする。すなわち、X×Y+SRAMIN+ZREGの演算を行なうことにより、加算、減算、補数、反転およびシフトといった処理を行なうことが可能となる。
【0114】
図10は、本発明の第1の実施の形態に係る半導体装置が行なう加算処理のフローを示す図である。図10は、8ビット×8ビットの加算処理フローを示している。
【0115】
加算処理では、X=A、Y=0001、F2=0、SRAMIN=Bを入力することにより、演算を行なう。
【0116】
図10を参照して、Aは被加数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、Bは加数であり、B0はBの下位4ビットであり、B1はBの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0117】
次に、演算処理の流れを説明する。
1)Ya=010、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=A0、SRAMIN=B0を入力する。A0×Yaの演算結果としてそのままA0が出力され、A0×Ybの演算結果として”0000”が出力される。
3)ZREGにはキャリー”0”が入力される。Z0としてA0+B0が出力される。
4)X=A1を入力し、SRAMIN=B1を入力する。A1×Yaの演算結果としてそのままA1が出力され、A1×Ybの演算結果として”0000”が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1としてA1+B1+キャリーが出力される。
【0118】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の加算を行なうことが可能である。
【0119】
図11は、本発明の第1の実施の形態に係る半導体装置が行なう減算処理のフローを示す図である。図11は、8ビット×8ビットの減算処理フローを示している。
【0120】
減算処理では、X=B、Y=1111、F2=0、SRAMIN=Aを入力することにより、演算を行なう。
【0121】
図11を参照して、Aは被減数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、Bは減数であり、B0はBの下位4ビットであり、B1はBの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0122】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=B0、SRAMIN=A0を入力する。B0×Yaの演算結果としてB0の補数が出力され、B0×Ybの演算結果として”0000”が出力される。
3)ZREGにはキャリー”001”が入力され、Z0としてA0+(−B0)が出力される。
4)X=B1、SRAMIN=A1を入力する。B1×Yaの演算結果としてB1の補数が出力され、B1×Ybの演算結果として”0000”が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1としてA1+(−B1)+キャリーが出力される。
【0123】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の減算を行なうことが可能である。
【0124】
図12は、本発明の第1の実施の形態に係る半導体装置が行なう補数処理のフローを示す図である。図12は、8ビット×8ビットの補数処理フローを示している。
【0125】
補数処理では、X=A、Y=1111、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0126】
図12を参照して、Aは被減数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0127】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0の補数が出力される。
3)ZREGにはキャリー”001”が入力され、Z0として−A0が出力される。
4)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1の補数が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1として−A1+キャリーが出力される。
【0128】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の補数処理を行なうことが可能である。
【0129】
図13は、本発明の第1の実施の形態に係る半導体装置が行なう反転処理のフローを示す図である。図13は、8ビット×8ビットの反転処理フローを示している。
【0130】
反転処理では、X=A、Y=1111、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0131】
図13を参照して、Aは反転処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは反転処理結果である。
【0132】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=0、SRAMIN=0を入力し、演算結果の上位ビット”000”をキャリーレジスタに保存する。
3)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。ただし、キャリーフラグは保存せず前のクロックまでのデータを保持する。
4)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0の反転データが出力される。
5)Z0として−A0が出力される。
6)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1の反転データが出力される。
7)Z1としてA1の反転データが出力される。
【0133】
以上(1)〜(7)の処理を繰り返し行なうことで、8ビット以上の反転処理を行なうことが可能である。
【0134】
次に、本発明の第1の実施の形態に係る半導体装置が行なう算術シフト処理を説明する。4ビット回路においては、1ビットシフト〜4ビットシフトの組み合わせによって、mビットシフトを実現可能である。たとえば7ビットシフトは、3ビットシフトおよび4ビットシフトの組み合わせによって実現可能である。また、4ビットシフトはデータのコピーによって実現可能であるため、以下では、1ビットシフト、2ビットシフトおよび3ビットシフトについて述べる。
【0135】
図14は、本発明の第1の実施の形態に係る半導体装置が行なう1ビットシフト処理のフローを示す図である。図14は、8ビットであるAの1ビットシフト処理フローを示している。
【0136】
1ビットシフト処理では、X=A、Y=0001、F2=1、SRAMIN=0を入力することにより、演算を行なう。
【0137】
図14を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0138】
次に、演算処理の流れを説明する。
1)Ya=011、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを1にセットする。
2)Ya=011、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0を1ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の最上位ビットが保存され、Z0としてA0の下位3ビットおよび”0”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1を1ビットシフトしたデータが出力される。
6)Z1としてA1の下位3ビットおよびA0の最上位ビットが出力される。
【0139】
以上(1)〜(6)の処理を繰り返し行なうことで、1ビットシフト処理を逐次的に行なうことが可能である。
【0140】
図15は、本発明の第1の実施の形態に係る半導体装置が行なう2ビットシフト処理のフローを示す図である。図15は、8ビットであるAの2ビットシフト処理フローを示している。
【0141】
2ビットシフト処理では、X=A、Y=0100、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0142】
図15を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0143】
次に、演算処理の流れを説明する。
1)Ya=000、Yb=010を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを0にセットする。
2)Ya=000、Yb=010を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0を2ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の上位2ビットが保存され、Z0としてA0の下位2ビットおよび”0”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1を2ビットシフトしたデータが出力される。
6)Z1としてA1の下位2ビットおよびA0の上位2ビットが出力される。
【0144】
以上(1)〜(6)の処理を繰り返し行なうことで、2ビットシフト処理を逐次的に行なうことが可能である。
【0145】
図16は、本発明の第1の実施の形態に係る半導体装置が行なう3ビットシフト処理のフローを示す図である。図16は、8ビットであるAの3ビットシフト処理フローを示している。
【0146】
3ビットシフト処理では、X=A、Y=0111、F2=1、SRAMIN=0を入力することにより、演算を行なう。
【0147】
図16を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0148】
次に、演算処理の流れを説明する。
1)Ya=111、Yb=011を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを1にセットする。
2)Ya=111、Yb=011を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果として”0000”、A0×Ybの演算結果としてA0を3ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の上位3ビットが保存され、Z0としてA0の下位1ビットおよび”000”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果として”0000”が出力され、A1×Ybの演算結果としてA1を3ビットシフトしたデータが出力される。
6)Z1としてA1の下位1ビットおよびA0の上位3ビットが出力される。
【0149】
以上(1)〜(6)の処理を繰り返し行なうことで、3ビットシフト処理を逐次的に行なうことが可能である。
【0150】
以上のように、本発明の第1の実施の形態に係る半導体装置は、乗算以外にも加算、減算、補数、反転およびシフト処理を行なうことが可能であり、かつこれらの演算を高速に行なうことが可能である。
【0151】
次に、本発明の他の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【0152】
<第2の実施の形態>
本実施の形態は、第1の実施の形態に係る半導体装置と比べて演算方法を変更した半導体装置に関する。以下で説明する内容以外は第1の実施の形態に係る半導体装置と同様である。
【0153】
図17は、本発明の第2の実施の形態に係る半導体装置の構成を示す図である。
図17を参照して、半導体装置203は、加減算部96と、テーブル部93,94と、出力演算部95とを備える。加減算部96は、加算部91と、減算部92とを含む。
【0154】
半導体装置203は、データXおよびデータYの積を算出する。半導体装置203では、ビットシリアル乗算器を構成する方法として、乗算の式変形と、テーブルルックアップとを用いる。
【0155】
まず、半導体装置203のテーブル参照を用いた乗算アルゴリズムについて説明する。
nビット×nビットの乗算を行なう際に、乗算結果をすべて事前に計算し、テーブルに格納しておけば、乗算は1回のテーブル参照によって行なうことができる。
【0156】
しかしながら、このような方法では、テーブルの大きさが22n×2×nビットと大きくなってしまう。
【0157】
そこで、半導体装置203では、以下の式(1)あるいは式(2)が成り立つことを利用する。
【0158】
X×Y=((X+Y)2−X2−Y2)/2 ・・・(1)
X×Y=((X+Y)2−(X−Y)2)/4 ・・・(2)
(n+1)ビットのデータの平方を事前に計算しておき、計算結果をテーブルに格納しておくことにより、XおよびYの乗算を、式(1)では2回のテーブル参照と3回の加減算とにより実現することができる。また、式(2)では3回のテーブル参照と3回の加減算とにより実現することができる。また、テーブルの大きさを2n+1×(2×n+2)ビット程度と小さくすることができる。
【0159】
さらに、半導体装置203では、X≧Yの条件下で、以下の式(3)および(4)に従ってXおよびYの乗算を行なう。
【0160】
X+Yが偶数のとき、X×Y=((X+Y)/2)2−((X−Y)/2)2 ・・・(3)
X+Yが奇数のとき、X×Y=((X+Y−1)/2)2−((X−Y−1)/2)2+Y ・・・(4)
X+Yが偶数のときは、X−Yも必ず偶数になる。また、(X+Y)および(X−Y)は、2進数で表記した場合には、必ず最下位ビットが”0”となる。すなわち、((X+Y)/2)の演算、および((X−Y)/2)の演算では、余りが発生せず、演算結果は必ずnビット以下になる。したがって、式(3)を実行する際に、n2すなわちnビット×nビットの演算を行なうためのテーブルを設ければよく、テーブルの大きさを、2n+1×(2×n+2)ビットからさらに2n×2×nビットと小さくすることができる。
【0161】
X+Yが奇数のときは、X−Yも必ず奇数になる。また、(X+Y)および(X−Y)は、2進数で表記した場合には、必ず最下位ビットが”1”となる。すなわち、X+Yが奇数のとき、(X+Y)および(X−Y)にそれぞれ1を減ずれば必ず最下位ビットが”0”となる。そうすると、((X+Y−1)/2)の演算、および((X−Y−1)/2)の演算では、余りが発生せず、演算結果は必ずnビット以下になる。したがって、式(4)を実行する際に、n2すなわちnビット×nビットの演算を行なうためのテーブルを設ければよく、テーブルの大きさを、2n+1×(2×n+2)ビットからさらに2n×2×nビットと小さくすることができる。
【0162】
次に、上記アルゴリズムを実現する半導体装置203における各機能ブロックの動作を説明する。まず、X+Yが偶数の場合における半導体装置203の動作について説明する。
【0163】
加算部91は、データXおよびデータYを加算し、加算した和データをテーブル部93へ出力する。
【0164】
減算部92は、データXおよびデータYを減算し、減算した差データをテーブル部94へ出力する。
【0165】
テーブル部93は、加算部91から受けた和データを、この和データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0166】
テーブル部94は、減算部92から受けた差データを、この差データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0167】
出力演算部95における減算部は、テーブル部93から受けたデータとテーブル部94から受けたデータとを減算し、減算結果をデータXおよびデータYの乗算結果として出力する。
【0168】
そして、出力演算部95は、減算部において算出した乗算結果と、SRAMから受けたシリアル乗算における前段の乗算結果までの累積値とを加算し、加算結果を示すデータをSRAMに保存する。なお、半導体装置203は、SRAMを備える構成であってもよい。
【0169】
次に、X+Yが奇数の場合における半導体装置203の動作について説明する。
加算部91は、データXおよびデータYを加算し、加算結果から1を減算した和データをテーブル部93へ出力する。
【0170】
減算部92は、データXおよびデータYを減算し、減算結果から1を減算した差データをテーブル部94へ出力する。
【0171】
テーブル部93は、加算部91から受けた和データを、この和データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0172】
テーブル部94は、減算部92から受けた差データを、この差データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0173】
出力演算部95における減算部は、テーブル部93から受けたデータとテーブル部94から受けたデータとを減算し、減算結果をデータXおよびデータYの乗算結果として出力する。
【0174】
そして、出力演算部95は、減算部において算出した乗算結果と、SRAMから受けたシリアル乗算における前段の乗算結果までの累積値とを加算し、加算結果を示すデータをSRAMに保存する。
【0175】
以下では、データXおよびデータYがそれぞれ4ビットのデータであると仮定して説明する。すなわち、データY0〜Y3およびデータX0〜X3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータY0およびデータX0であり、MSBはデータY3およびデータX3である。また、データX0〜X3の各々をデータXと称する場合がある。データY0〜Y3の各々をデータYと称する場合がある。
【0176】
図18は、本発明の第2の実施の形態に係る半導体装置における加減算部の構成を示す図である。図18は、X+Yが偶数の場合における構成を示している。
【0177】
図18を参照して、加算部91は、レジスタ101〜104と、フルアダー110〜112と、ハーフアダー113とを含む。減算部92は、レジスタ105〜108と、フルアダー114〜117と、NOTゲートG15と、EXORゲートG16〜G19とを含む。
【0178】
レジスタ101は、SRAMから受けたデータX3を保持するとともにフルアダー110および114へ出力する。レジスタ102は、SRAMから受けたデータX2を保持するとともにフルアダー111および115へ出力する。レジスタ103は、SRAMから受けたデータX1を保持するとともにフルアダー112および116へ出力する。レジスタ104は、SRAMから受けたデータX0を保持するとともにハーフアダー113およびフルアダー117へ出力する。
【0179】
レジスタ105は、SRAMから受けたデータY3を保持するとともにフルアダー110およびNOT回路G11へ出力する。レジスタ106は、SRAMから受けたデータY2を保持するとともにフルアダー111およびNOT回路G12へ出力する。レジスタ107は、SRAMから受けたデータY1を保持するとともにフルアダー112およびNOT回路G13へ出力する。レジスタ108は、SRAMから受けたデータY0を保持するとともにハーフアダー113およびNOT回路G14へ出力する。NOTゲートG11〜G14は、それぞれレジスタ105〜108から受けたデータの論理レベルを反転してフルアダー114〜117へ出力する。
【0180】
フルアダー110は、フルアダー111から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ101から受けたデータX3およびレジスタ105から受けたデータY3を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてテーブル部93へ出力する。
【0181】
フルアダー111は、フルアダー112から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ102から受けたデータX2およびレジスタ106から受けたデータY2を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー110へ出力する。
【0182】
フルアダー112は、ハーフアダー113から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ103から受けたデータX1およびレジスタ107から受けたデータY1を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー111へ出力する。
【0183】
ハーフアダー113は、レジスタ104から受けたデータX0およびレジスタ108から受けたデータY0を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー112へ出力する。
【0184】
フルアダー114は、フルアダー115から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ101から受けたデータX3およびNOTゲートG11から受けたデータY3の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG16へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力CoutとしてNOTゲートG15へ出力する。NOTゲートG15は、フルアダー114から受けたキャリー出力Coutの論理レベルを反転してEXORゲートG16〜G19へ出力する。
【0185】
フルアダー115は、フルアダー116から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ102から受けたデータX2およびNOTゲートG12から受けたデータY2の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG17へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー114へ出力する。
【0186】
フルアダー116は、フルアダー117から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ103から受けたデータX1およびNOTゲートG13から受けたデータY1の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG18へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー115へ出力する。
【0187】
フルアダー117は、”1”を示すデータをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ104から受けたデータX0およびNOTゲートG14から受けたデータY0の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG19へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー116へ出力する。
【0188】
EXORゲートG16〜G19は、それぞれフルアダー114〜117から受けたデータSumおよびNOTゲートG15から受けたデータの排他的論理和をテーブル部94へ出力する。
【0189】
加算部91は、4つの加算器によって構成されている。また、減算部92では、XにYの補数を加算する、すなわちYの反転と、”1”及びXとを加算することにより、X−Yの演算を行なっている。
【0190】
ここで、加算部91は、X≧Yの場合には正の値を出力し、また、加算部91においてオーバーフローが発生する。また、加算部91は、X<Yの場合には、補数の値を出力する。
【0191】
X−Yの演算結果をそのまま2乗する場合には符号は問題にならないが、半導体装置203では、テーブル部94がテーブル参照を行なうため、X<Yである場合には、出力結果の補数をとる。すなわち、オーバーフローが発生しなければ、X<Yであると判断できるので、フルアダー114のキャリー出力Coutが”0”の場合には、NOT回路G15から論理ハイレベルのデータがEXORゲートG16〜G19へ出力される。これにより、EXORゲートG16〜G19は、フルアダー114〜117から受けたデータSumを反転して出力する。
【0192】
次に、テーブル部の動作について説明する。半導体装置203では、nビットのデータXとnビットのデータYとを加算した値を2乗したデータに変換し、かつnビットのデータXとnビットのデータYとを減算した値を2乗したデータに変換するテーブルを利用する。この場合、X+Yの2乗データは最大n+1ビットとなり、X−Yの2乗データは最大nビットになるが、これらの2乗データは後に1/4倍されるので、テーブル参照が必要なデータは、X+Yに対してnビット、X−Yに対してn−1ビットとなる。
【0193】
テーブル部93では、((X+Y)/2)2の計算結果が保存されており、テーブル部94では、((X−Y)/2)2の計算結果が保存されている。
【0194】
テーブル部は、加算結果用・減算結果用を共通にしたものを用意する方法と、加算および減算を同時に実行したい場合にはテーブルを別々に用意する方法が考えられる。
【0195】
図19は、本発明の第2の実施の形態に係る半導体装置における出力演算部95の構成を示す図である。図19は、テーブルを加算結果用、減算結果用と別々に用意する場合における構成を示している。図19において、テーブル部93の出力データを示すデータA0〜A7、テーブル部94の出力データを示すデータB0〜B7および累積部分積K0〜K3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータA0、データB0および累積部分積K0であり、MSBはデータA7、データB7および累積部分積K3である。また、データA0〜A7の各々をデータAと称する場合がある。データB0〜B7の各々をデータBと称する場合がある。累積部分積K0〜K3の各々を累積部分積Kと称する場合がある。ここで、累積部分積K0〜K3は、SRAMに保存されているシリアル乗算における前段の乗算結果までの累積値である。
【0196】
テーブルを加算結果用、減算結果用と別々に用意する場合には、減算結果用のテーブルの大きさは2n-1×(2×n−2)ビットとなる。また、この場合、減算結果用のテーブルの値をあらかじめ(X−Y)2の補数をとった値にしておくことにより、出力演算部95における演算を加算のみにすることができる。
【0197】
図19を参照して、出力演算部95は、ハーフアダー121〜125と、フルアダー126〜143と、マルチプレクサ151〜158と、レジスタ161〜166とを含む。
【0198】
テーブル部93,94の変換処理では、(X+Y)/2という数字を扱っている。X+Yが奇数の場合には、(X+Y)/2は整数ではなくなることから、データAおよびデータBの減算結果にさらにXまたはYのいずれかを加算する必要がある。このため、出力演算部95では、マルチプレクサ151〜158を用いて、X+Yの最下位ビットQ2すなわち図18に示す加算部91のハーフアダー113から出力されるデータSumに基づいてXまたはYを加算するか否かを決定し、XおよびYの大小関係に基づいてXおよびYのいずれを加算するかを決定する。
【0199】
より詳細には、データQ1は、X>Yの場合には”1”となり、X≦Yの場合には”0”となる。データQ1は、たとえば図18に示す減算部92のフルアダー114から出力されるキャリー出力Coutである。
【0200】
マルチプレクサ151は、データQ1が”1”の場合にはデータY3を選択し、データQ1が”0”の場合にはデータX3を選択してマルチプレクサ155へ出力する。マルチプレクサ152は、データQ1が”1”の場合にはデータY2を選択し、データQ1が”0”の場合にはデータX2を選択してマルチプレクサ156へ出力する。マルチプレクサ151は、データQ1が”1”の場合にはデータY1を選択し、データQ1が”0”の場合にはデータX1を選択してマルチプレクサ157へ出力する。マルチプレクサ151は、データQ1が”1”の場合にはデータY0を選択し、データQ1が”0”の場合にはデータX0を選択してマルチプレクサ158へ出力する。
【0201】
マルチプレクサ155は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ151から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー126へ出力する。
【0202】
マルチプレクサ156は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ152から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー127へ出力する。
【0203】
マルチプレクサ157は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ153から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー128へ出力する。
【0204】
マルチプレクサ158は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ154から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー135へ出力する。
【0205】
ハーフアダー121は、データA7およびデータB7を加算し、加算結果の下位ビットをデータSumとしてフルアダー129へ出力する。
【0206】
ハーフアダー122は、データA6およびデータB6を加算し、加算結果の下位ビットをデータSumとしてフルアダー130へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー129へ出力する。
【0207】
ハーフアダー123は、データA5およびデータB5を加算し、加算結果の下位ビットをデータSumとしてフルアダー131へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー130へ出力する。
【0208】
ハーフアダー124は、データA4およびデータB4を加算し、加算結果の下位ビットをデータSumとしてフルアダー132へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー131へ出力する。
【0209】
フルアダー126は、データB3をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ155から受けたデータおよびデータA3を加算し、加算結果の下位ビットをデータSumとしてフルアダー133へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー132へ出力する。
【0210】
フルアダー127は、データB2をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ156から受けたデータおよびデータA2を加算し、加算結果の下位ビットをデータSumとしてフルアダー134へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー133へ出力する。
【0211】
フルアダー128は、データB1をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ157から受けたデータおよびデータA1を加算し、加算結果の下位ビットをデータSumとしてハーフアダー125へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー134へ出力する。
【0212】
フルアダー129は、フルアダー130から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー121から受けたデータSumおよびハーフアダー122から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ161へ出力する。
【0213】
フルアダー130は、フルアダー131から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー122から受けたデータSumおよびハーフアダー123から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ162へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー129へ出力する。
【0214】
フルアダー131は、フルアダー132から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー123から受けたデータSumおよびハーフアダー124から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ163へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー130へ出力する。
【0215】
フルアダー132は、フルアダー133から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー124から受けたデータSumおよびフルアダー126から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ164へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー131へ出力する。
【0216】
フルアダー133は、フルアダー134から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー126から受けたデータSumおよびフルアダー127から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー136へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー132へ出力する。
【0217】
フルアダー134は、ハーフアダー125から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー127から受けたデータSumおよびフルアダー128から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー137へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー133へ出力する。
【0218】
ハーフアダー125は、フルアダー128から受けたデータSumおよびフルアダー135から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー138へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー134へ出力する。
【0219】
フルアダー135は、データB0をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ158から受けたデータおよびデータA0を加算し、加算結果の下位ビットをデータSumとしてフルアダー139へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてハーフアダー125へ出力する。
【0220】
レジスタ161〜164は、それぞれフルアダー129〜132から受けたデータSumを保持するとともにフルアダー136〜139へ出力する。ここで、出力演算部95の演算ビット幅は4ビットしかないのに対し、データAおよびデータBのデータ長はそれぞれ8ビットである。レジスタ161〜164を設けることにより、上位側のデータを一時保存して演算を2回に分けて実行することができる。
【0221】
フルアダー136は、SRAMから受けた累積部分積K3をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー133から受けたデータSumおよびレジスタ161から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー140へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてレジスタ165へ出力する。
【0222】
フルアダー137は、SRAMから受けた累積部分積K2をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー134から受けたデータSumおよびレジスタ162から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー141へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー140へ出力する。
【0223】
フルアダー138は、SRAMから受けた累積部分積K1をキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー125から受けたデータSumおよびレジスタ163から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー142へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー141へ出力する。
【0224】
フルアダー139は、SRAMから受けた累積部分積K0をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー135から受けたデータSumおよびレジスタ164から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー143へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー142へ出力する。
【0225】
フルアダー140は、フルアダー141から受けたデータSumをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー136から受けたデータSumおよびフルアダー137から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR3として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてレジスタ166へ出力する。
【0226】
フルアダー141は、フルアダー142から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー137から受けたデータSumおよびフルアダー138から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR2として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー140へ出力する。
【0227】
フルアダー142は、フルアダー143から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー138から受けたデータSumおよびフルアダー139から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR1として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー141へ出力する。
【0228】
レジスタ165は、フルアダー136から受けたキャリー出力Coutを保持するとともにデータL1としてフルアダー143へ出力する。レジスタ166は、フルアダー140から受けたキャリー出力Coutを保持するとともにデータL0としてフルアダー143へ出力する。
【0229】
フルアダー143は、レジスタ166から受けたデータL0をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー139から受けたデータSumおよびレジスタ165から受けたデータL1を加算し、加算結果の下位ビットをデータR0として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー142へ出力する。
【0230】
以上のように、本発明の第2の実施の形態に係る半導体装置では、本発明の第1の実施の形態に係る半導体装置と同様に、回路面積を小さくして高並列化を図ることが可能であるとともに、符号付乗算を高速に行なうことが可能である。また、シリアル処理を順次行なっていくことによって、可変長の演算が可能であり、また、マルチメディア処理において頻出する加算処理および減算処理が実行可能である。したがって、マルチメディアデータを効果的に処理することができる。
【0231】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0232】
11〜21 レジスタ、31〜38,SEL セレクタセル(部分積算出回路)、40 シフト加算回路(部分積加算回路)、51〜54,113,121〜125 ハーフアダー、61〜68,110〜112,114〜117,126〜143 フルアダー、71〜73,151〜158 マルチプレクサ、81〜83,101〜108,161〜166 レジスタ、91 加算部、92 減算部、93,94 テーブル部、95 出力演算部、96 加減算部、201〜203 半導体装置、DEC1,DEC2 ブースデコーダ、M1〜M6,M11〜M16 NチャネルMOSトランジスタ、Mp1〜Mp5,Mp11〜Mp15 PチャネルMOSトランジスタ、G1,G2 NANDゲート、G3 NOTゲート、G15 NOTゲート、G16〜G19 EXORゲート。
【技術分野】
【0001】
本発明は、半導体装置に関し、特に、演算処理を行なう半導体装置に関する。
【背景技術】
【0002】
近年、デジタルカメラ、デジタルビデオ、ビデオ会議及び携帯電話等の普及に伴い、音声、静止画像及び動画等のマルチメディアアプリケーションのデータ量が増大している。そして、この増大したデータをリアルタイムに処理する必要が生じている。さらに、モバイル機器においては、高速処理のみならず、その携帯性から長時間駆動が可能であり、かつ小型であることが求められるようになってきた。
【0003】
さらに、WCDMA、JPEG(Joint Photographic Expert Group)2000およびMPEGなど新たな規格が次々と出現している。このような背景から、マルチメディアアプリケーションを処理するLSIは、高速処理、低消費電力及び小面積であることが必須条件とされるため、従来はデジタルシグナルプロセッサ(DSP)をはじめとして、固有の処理のみに特化したASIC(Application Specific Integrated Circuit)が利用されてきた。
【0004】
一般にマルチメディアアプリケーションは、被処理データ間の相互依存が少ないという特徴を持つことから、並列処理によって処理効率を上げることが可能である。例として、画像圧縮形式の1つであるJPEGにおいては、圧縮対象画像の全ピクセルを8×8のブロックに区切り、これらのブロックをすべて並列に処理することが可能となっている。この並列化可能処理には、離散コサイン変換(DCT)、量子化、ジグザグスキャンおよびランレングス処理等の並列可能アルゴリズムが含まれる。
【0005】
DSPおよびASIC等の従来のLSIは、これらのブロックを並列に処理するために、SIMD(Single Instruction Multiple Data)というアーキテクチャを採用することが多い。SIMDとは、複数の演算器(Processing Element:PE)を内部に持ち、各PEに対し同一の命令を送り、複数の異なるデータを同タイミングで並列に処理するアーキテクチャであり、マルチメディアデータ処理に適しているといえる。
【0006】
SIMDアーキテクチャのように並列処理を行なうアーキテクチャでは、演算器(PE)のビット長を小さくし、小面積で実装し、その並列度を高めることで、処理能力の向上を図ることができる。しかしながら、PEのビット幅を小さく設計すると並列度を高めやすい一方で、乗算等の処理に多くのクロックサイクルがかかってしまうという問題がある。乗算処理はマルチメディア処理で多く用いられる処理の一つであり、乗算器を少ないビット数かつ小面積で実現しながら、高速演算を実現することで、静止画像、動画像および音声などの処理の効率化を図ることができ、ユーザのニーズを満たすことができる。
【0007】
図20は、ビットパラレル方式を示す図である。図21は、ビットシリアル方式を示す図である。
【0008】
一般にDSPおよび各種SIMDアーキテクチャを利用したデータの処理方法は、図20に示すように各ワードをいくつかのブロックに分けて並列に処理する方法(以下、ビットパラレル方式と呼ぶ)、および図21に示すように、すべてのワードを逐次処理する方式(以下、ビットシリアル方式と呼ぶ)の2通りが挙げられる。以下に各々の特徴を述べる。
【0009】
[ビットパラレル方式]
1)1ワードのビット長にあわせた複数のPEを設けるため、1ワードを1クロックサイクル程度で処理することが可能。
2)ブロック個数b分、1度に複数のワードを処理可能。
3)処理ビット幅は一定であるため、アプリケーションによっては演算に使用しないPEが生ずる。
4)1ワードのビット長dが大きいほど、1ブロックを処理するために必要なPEの個数が増加し、並列度を上げるためにはより多くのハードウェアリソースを必要とする。
5)1ワードを1クロックサイクルで処理する場合には、すべてのワードを処理するためにaクロックサイクルが必要となる。
6)必要なPEの個数は、(d×b)個となる。
【0010】
[ビットシリアル方式]
1)1ワードに対し、1〜2ビット長のPEを用意するため、1ワードをほぼビット長dと同程度のクロックサイクルで処理することが可能。
2)1回の処理でワード個数(a×b)分、並列に処理が可能。
3)処理ビット幅が可変であるため、アプリケーションにあわせてPEを有効に利用可能。
4)1ワードに必要なPEの個数が少ないため、並列度を上げた場合にもハードウェアリソースをそれほど消費しない。
5)データの処理方向を変える必要がある。
6)すべてのワードを処理するためにはdクロックサイクルが必要となる。
7)必要なPEの個数は、(a×b)個となる。
【0011】
マルチメディアアプリケーション処理は、主に処理ビット幅が可変であり、処理ワード数が非常に多いという特徴があり、高速にマルチメディアアプリケーション処理を行なうためには、極力bを大きくし、aを小さくすることが理想である。すなわち、d≪bの関係が成り立てばよく、これまでビットシリアル方式はマルチメディアアプリケーションを効率よく処理するアーキテクチャとして考えられてきた。
【0012】
ビットシリアル演算を行なう構成として、たとえば、特許文献1には、以下のような半導体装置が開示されている。すなわち、行列状に配列されかつ複数のエントリに分割される複数のメモリセルを有するメモリセルアレイ、各上記エントリに対応して配置され、各々が指定された演算を対応のエントリのデータに対して行なう複数の第1の演算回路、各上記エントリと対応の第1の演算回路との間でデータを転送する複数のデータ転送線、および上記複数のデータ転送線それぞれに対応して配置され、対応のデータ転送線と対応の第1の演算回路との間でビット単位でかつエントリパラレル態様でデータを転送する複数のデータ転送回路を備え、各上記エントリには多ビットデータが格納され、各上記第1の演算回路は対応のエントリの多ビットデータに対してビットシリアルな態様で演算を実行する。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開2006−127460号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
しかしながら、1ビットシリアル演算では加算および減算等の処理はビット長と同程度のクロックサイクルで処理可能である一方で、乗算処理および除算処理はビット長の2乗以上のクロックサイクルがかかってしまう。ここで、クロックサイクルを短くするために、演算器のビット長を多くすることが考えられる。しかしながら、ビット長を多くすると、クロックサイクル数は減少するものの、回路面積が大きくなり並列度が高められないという問題が発生する。
【0015】
それゆえに、本発明の目的は、演算の高速化を図り、また、小型化を図ることで並列度を高めることが可能な半導体装置を提供することである。
【課題を解決するための手段】
【0016】
本発明の一実施例の形態の半導体装置は、要約すれば、デコーダが、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力する。そして、部分積算出部が、デコーダから受けた各フラグに基づいて、乗数データおよび被乗数データの部分積を示す部分積データを出力する。
【発明の効果】
【0017】
本発明の一実施例の形態によれば、演算の高速化を図り、また、小型化を図ることで並列度を高めることができる。
【図面の簡単な説明】
【0018】
【図1】本発明の第1の実施の形態に係る半導体装置の構成を示す図である。
【図2】本発明の第1の実施の形態に係る半導体装置におけるブースデコーダの構成を示す回路図である。
【図3】ブースデコーダの真理値表を示す図である。
【図4】本発明の第1の実施の形態に係る半導体装置におけるセレクタセルの構成を示す回路図である。
【図5】セレクタセルの真理値表を示す図である。
【図6】本発明の第1の実施の形態に係る半導体装置におけるシフト加算回路の構成を示す回路図である。
【図7】本発明の第1の実施の形態に係る半導体装置の変形例の構成を示す図である。
【図8】本発明の第1の実施の形態に係る半導体装置が行なう乗算処理のフローを示す図である。
【図9】本発明の第1の実施の形態に係る半導体装置が行なう乗算処理以外の演算の基本概念を示す図である。
【図10】本発明の第1の実施の形態に係る半導体装置が行なう加算処理のフローを示す図である。
【図11】本発明の第1の実施の形態に係る半導体装置が行なう減算処理のフローを示す図である。
【図12】本発明の第1の実施の形態に係る半導体装置が行なう補数処理のフローを示す図である。
【図13】本発明の第1の実施の形態に係る半導体装置が行なう反転処理のフローを示す図である。
【図14】本発明の第1の実施の形態に係る半導体装置が行なう1ビットシフト処理のフローを示す図である。
【図15】本発明の第1の実施の形態に係る半導体装置が行なう2ビットシフト処理のフローを示す図である。
【図16】本発明の第1の実施の形態に係る半導体装置が行なう3ビットシフト処理のフローを示す図である。
【図17】本発明の第2の実施の形態に係る半導体装置の構成を示す図である。
【図18】本発明の第2の実施の形態に係る半導体装置における加減算部の構成を示す図である。
【図19】本発明の第2の実施の形態に係る半導体装置における出力演算部95の構成を示す図である。
【図20】ビットパラレル方式を示す図である。
【図21】ビットシリアル方式を示す図である。
【発明を実施するための形態】
【0019】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【0020】
<第1の実施の形態>
図1は、本発明の第1の実施の形態に係る半導体装置の構成を示す図である。
【0021】
図1を参照して、半導体装置201は、ブースデコーダDEC1,DEC2と、レジスタ11〜21と、セレクタセル(部分積算出回路)31〜38と、シフト加算回路(部分積加算回路)40とを備える。図1において、乗数を示すデータY0〜Y3および被乗数を示すデータX0〜X3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータY0およびデータX0であり、MSBはデータY3およびデータX3である。
【0022】
以下、ブースデコーダDEC1,DEC2の各々をブースデコーダDECと称する場合がある。セレクタセル31〜38の各々をセレクタセルSELと称する場合がある。
【0023】
半導体装置201は、たとえば4ビットシリアル乗算器であり、4ビット×4ビットごとにシーケンシャルに乗算を行なう。
【0024】
ブースデコーダDEC1は、乗数を示すデータY0,Y1、およびレジスタ21からのデータを受けて、ブースのアルゴリズムに従い、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグC1をレジスタ16〜18およびシフト加算回路40へそれぞれ出力する。
【0025】
レジスタ16は、ブースデコーダDEC1から受けたシフトフラグDを保持するとともにセレクタセル31〜34へ出力し、かつ保持したシフトフラグDの論理レベルを反転したデータをセレクタセル31〜34へ出力する。
【0026】
レジスタ17は、ブースデコーダDEC1から受けた演算フラグNを保持するとともにセレクタセル31〜34へ出力し、かつ保持した演算フラグNの論理レベルを反転したデータをセレクタセル31〜34へ出力する。
【0027】
レジスタ18は、ブースデコーダDEC1から受けた反転フラグFを保持するとともにセレクタセル31〜34へ出力する。
【0028】
ブースデコーダDEC2は、乗数を示すデータY1,Y2,Y3を受けて、ブースのアルゴリズムに従い、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグC2をレジスタ19〜21およびシフト加算回路40へそれぞれ出力する。
【0029】
レジスタ19は、ブースデコーダDEC2から受けたシフトフラグDを保持するとともにセレクタセル35〜38へ出力し、かつ保持したシフトフラグDの論理レベルを反転したデータをセレクタセル35〜38へ出力する。
【0030】
レジスタ20は、ブースデコーダDEC2から受けた演算フラグNを保持するとともにセレクタセル35〜38へ出力し、かつ保持した演算フラグNの論理レベルを反転したデータをセレクタセル35〜38へ出力する。
【0031】
レジスタ21は、ブースデコーダDEC2から受けた反転フラグFを保持するとともにデータF2としてセレクタセル35〜38へ出力し、かつブースデコーダDEC1へ出力する。
【0032】
レジスタ12は、SRAMから受けた被乗数を示すデータX0を保持するとともにセレクタセル31、32、35および36へ出力する。
【0033】
レジスタ13は、SRAMから受けた被乗数を示すデータX1を保持するとともにセレクタセル32、33、36および37へ出力する。
【0034】
レジスタ14は、SRAMから受けた被乗数を示すデータX2を保持するとともにセレクタセル33、34、37および38へ出力する。
【0035】
レジスタ15は、SRAMから受けた被乗数を示すデータX3を保持するとともにセレクタセル34および38ならびにレジスタ11へ出力する。
【0036】
レジスタ11は、レジスタ15から受けたデータX3を保持するとともにセレクタセル31および35へ出力する。また、レジスタ11は、外部から受けたリセット信号RSTによってリセットされる。
【0037】
セレクタセル31は、レジスタ11から受けたデータ、レジスタ12から受けたデータX0、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、レジスタ11から受けたデータが下位ビットであり、データX0が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S10としてシフト加算回路40へ出力する。
【0038】
セレクタセル32は、レジスタ12から受けたデータX0、レジスタ13から受けたデータX1、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX0が下位ビットであり、データX1が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S11としてシフト加算回路40へ出力する。
【0039】
セレクタセル33は、レジスタ13から受けたデータX1、レジスタ14から受けたデータX2、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX1が下位ビットであり、データX2が上位ビットである2ビットの被乗数データと、データF2が最下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S12としてシフト加算回路40へ出力する。
【0040】
セレクタセル34は、レジスタ14から受けたデータX2、レジスタ15から受けたデータX3、レジスタ16から受けたシフトフラグDおよびその反転データ、レジスタ17から受けた演算フラグNおよびその反転データ、ならびにレジスタ18から受けた反転フラグFに基づいて、データX2が下位ビットであり、データX3が上位ビットである2ビットの被乗数データと、データF2が下位ビットであり、データY0が2ビット目であり、データY1が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S13としてシフト加算回路40へ出力する。
【0041】
セレクタセル35は、レジスタ11から受けたデータ、レジスタ12から受けたデータX0、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、レジスタ11から受けたデータが下位ビットであり、データX0が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S20としてシフト加算回路40へ出力する。
【0042】
セレクタセル36は、レジスタ12から受けたデータX0、レジスタ13から受けたデータX1、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX0が下位ビットであり、データX1が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S21としてシフト加算回路40へ出力する。
【0043】
セレクタセル37は、レジスタ13から受けたデータX1、レジスタ14から受けたデータX2、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX1が下位ビットであり、データX2が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S22としてシフト加算回路40へ出力する。
【0044】
セレクタセル38は、レジスタ14から受けたデータX2、レジスタ15から受けたデータX3、レジスタ19から受けたシフトフラグDおよびその反転データ、レジスタ20から受けた演算フラグNおよびその反転データ、ならびにレジスタ21から受けた反転フラグFに基づいて、データX2が下位ビットであり、データX3が上位ビットである2ビットの被乗数データと、データY1が最下位ビットであり、データY2が2ビット目であり、データY3が最上位ビットである3ビットの乗数データとの部分積を算出し、部分積S23としてシフト加算回路40へ出力する。
【0045】
シフト加算回路40は、セレクタセル31〜38からそれぞれ受けた部分積S10,S11,S12,S13,S20,S21,S22,S23と、ブースデコーダDEC1およびDEC2から受けた補数フラグC1,C2とに基づいて、部分積S10,S11,S12,S13,S20,S21,S22,S23を加算することにより、データX0〜X3とデータY0〜Y3との乗算結果を算出する。
【0046】
データI0〜I3は、シリアル乗算における前段の乗算結果までの累積値を示している。シフト加算回路40は、算出した乗算結果と、SRAMから受けたデータI0〜I3とを加算し、加算結果を示す4ビットのデータR0〜R3をデータSOUTとしてSRAMへ出力する。なお、半導体装置201は、SRAMを備える構成であってもよい。
【0047】
また、レジスタ11は、ブースのアルゴリズムに従う乗数のデコード(以下、ブースデコードとも称する。)結果に基づいて被乗数データのシフトが行なわれる場合、シフト結果すなわちレジスタ15の出力データを補完する。シフト動作が行なわれる場合には、レジスタ11〜14の出力データが演算の対象となる。
【0048】
以下、データX0〜X3の各々をデータXと称する場合がある。データY0〜Y3の各々をデータYと称する場合がある。部分積S10,S11,S12,S13,S20,S21,S22,S23の各々を部分積Sと称する場合がある。
【0049】
図2は、本発明の第1の実施の形態に係る半導体装置におけるブースデコーダの構成を示す回路図である。図2において、データYL,YM,YHは、ブースデコーダDEC1においてはそれぞれデータF2,Y0,Y1を示し、ブースデコーダDEC2においてはそれぞれデータY1,Y2,Y3を示す。また、データ/YL,/YM,/YHは、YL,YM,YHの論理レベルを反転したデータを示す。また、D,N,F,Cは、それぞれシフトフラグ、演算フラグ、反転フラグおよび補数フラグを示す。
【0050】
図2を参照して、ブースデコーダDECは、NチャネルMOSトランジスタM1〜M6と、PチャネルMOSトランジスタMp1〜Mp5と、NANDゲートG1,G2と、NOTゲートG3とを含む。
【0051】
PチャネルMOSトランジスタMp1は、データYMを受けるゲートと、データ/YHを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM1は、データ/YMを受けるゲートと、データ/YHを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp2は、データ/YMを受けるゲートと、データYHを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM2は、データ/YHを受けるゲートと、データYHを受けるドレインと、ソースとを有する。
【0052】
PチャネルMOSトランジスタMp3は、データ/YHを受けるゲートと、データ/YLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM3は、データ/YMを受けるゲートと、データ/YLを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp4は、データ/YMを受けるゲートと、データYLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM4は、データ/YHを受けるゲートと、データYLを受けるドレインと、ソースとを有する。
【0053】
NANDゲートG1は、PチャネルMOSトランジスタMp1およびMp2のドレインと、NチャネルMOSトランジスタM1およびM2のソースとに接続された第1入力端子と、PチャネルMOSトランジスタMp3およびMp4のドレインと、NチャネルMOSトランジスタM3およびM4のソースとに接続された第2入力端子とを有する。
【0054】
NANDゲートG2は、NANDゲートG1の出力端子に接続された第1入力端子と、PチャネルMOSトランジスタMp3およびMp4のドレインと、NチャネルMOSトランジスタM3およびM4のソースとに接続された第2入力端子とを有する。
【0055】
PチャネルMOSトランジスタMp5は、データ/YHを受けるゲートと、NANDゲートG1の出力端子に接続されたソースと、ドレインとを有する。NチャネルMOSトランジスタM5は、データYHを受けるゲートと、NANDゲートG1の出力端子に接続されたドレインと、ソースとを有する。NチャネルMOSトランジスタM6は、データ/YHを受けるゲートと、論理ローレベルの信号すなわち”0”を示す信号を受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp5のドレイン、およびNチャネルMOSトランジスタM5,M6のソースが互いに接続され、この接続ノードの電圧が補数フラグCとして出力される。
【0056】
NANDゲートG1は、第1入力端子において受けたデータおよび第2入力端子において受けたデータの論理積を反転したデータを演算フラグNとして出力する。また、データYHが反転フラグFとして出力される。NANDゲートG2は、第1入力端子において受けたデータおよび第2入力端子において受けたデータの論理積を反転したデータをNOTゲートG3へ出力する。NOTゲートG3は、NANDゲートG2から受けたデータの論理レベルを反転し、反転したデータをシフトフラグDとして出力する。
【0057】
図3は、ブースデコーダの真理値表を示す図である。
図3を参照して、入力データYH,YM,YLがすべて”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”0”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として0が加算される。
【0058】
また、入力データYH,YM,YLがそれぞれ”0”,”0”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXがそのまま加算される。
【0059】
また、入力データYH,YM,YLがそれぞれ”0”,”1”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXがそのまま加算される。
【0060】
また、入力データYH,YM,YLがそれぞれ”0”,”1”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”1”,”1”,”0”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXが1ビットシフトアップされたデータが加算される。
【0061】
また、入力データYH,YM,YLがそれぞれ”1”,”0”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”1”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXが1ビットシフトアップされたデータの補数データが加算される。
【0062】
また、入力データYH,YM,YLがそれぞれ”1”,”0”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXの補数データが加算される。
【0063】
また、入力データYH,YM,YLがそれぞれ”1”,”1”,”0”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”1”,”1”,”1”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として対応のデータXの補数データが加算される。
【0064】
また、入力データYH,YM,YLがそれぞれ”1”,”1”,”1”である場合には、ブースデコーダDECは、シフトフラグD、演算フラグN、反転フラグFおよび補数フラグCとしてそれぞれ”0”,”0”,”1”,”0”を出力する。この場合、セレクタセルSELおよびシフト加算回路40では、データX0〜X3とデータY0〜Y3との乗算において、部分積として0が加算される。
【0065】
ブースデコーダDECは、いわゆるブースのアルゴリズムに従い乗数をデコードする回路である。
【0066】
しかしながら、ブースのアルゴリズムに従う通常のブースデコーダでは、乗数を3桁の符号付2進数へデコードするのに対し、本発明の第1の実施の形態に係る半導体装置におけるブースデコーダDECは、乗数をシフトフラグD、反転フラグF、演算フラグNおよび補数フラグCへデコードする。
【0067】
そして、シフトフラグD、反転フラグF、演算フラグNを後述するセレクタセルSELへ入力することで、部分積を生成し、また、補数フラグCをシフト加算回路40へ入力して補数処理を実行する。
【0068】
ブースデコーダDECは、乗数ビットを2ビット増加する毎に、1つ追加するだけで、汎用的にmビット×nビットの回路構成に対応することができる。
【0069】
図4は、本発明の第1の実施の形態に係る半導体装置におけるセレクタセルの構成を示す回路図である。図4において、/D,/N,/Fは、それぞれシフトフラグ、演算フラグおよび反転フラグの論理レベルを反転したデータを示す。また、XLは被乗数の下位ビットを示し、XHは被乗数の上位ビットを示す。
【0070】
図4を参照して、セレクタセルSELは、NチャネルMOSトランジスタM11〜M16と、PチャネルMOSトランジスタMp11〜Mp15とを含む。
【0071】
NチャネルMOSトランジスタM11は、シフトフラグ/Dを受けるゲートと、データXLを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp11は、シフトフラグDを受けるゲートと、データXLを受けるソースと、ドレインとを有する。NチャネルMOSトランジスタM12は、シフトフラグDを受けるゲートと、データXHを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp12は、シフトフラグ/Dを受けるゲートと、データXHを受けるソースと、ドレインとを有する。PチャネルMOSトランジスタMp13は、反転フラグFを受けるゲートと、ソースと、ドレインとを有する。NチャネルMOSトランジスタM13は、反転フラグ/Fを受けるゲートと、ドレインと、ソースとを有する。NチャネルMOSトランジスタM14は、ゲートと、反転フラグFを受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp14は、NチャネルMOSトランジスタM11およびM12のソース、PチャネルMOSトランジスタMp11およびMp12のドレイン、PチャネルMOSトランジスタMp13のソース、NチャネルMOSトランジスタM13のドレインならびにNチャネルMOSトランジスタM14のゲートに接続されたゲートと、反転フラグ/Fを受けるドレインと、ソースとを有する。NチャネルMOSトランジスタM15は、演算フラグNを受けるゲートと、ドレインと、ソースとを有する。PチャネルMOSトランジスタMp15は、演算フラグ/Nを受けるゲートと、PチャネルMOSトランジスタMp13のドレイン、PチャネルMOSトランジスタMp14のソース、NチャネルMOSトランジスタM13,M14のソース、およびNチャネルMOSトランジスタM15のドレインに接続されたソースと、ドレインとを有する。NチャネルMOSトランジスタM16は、演算フラグ/Nを受けるゲートと、論理ローレベルの信号を受けるドレインと、ソースとを有する。PチャネルMOSトランジスタMp15のドレインと、NチャネルMOSトランジスタM15,M16のソースとが互いに接続され、この接続ノードの電圧が部分積Sとして出力される。
【0072】
図5は、セレクタセルの真理値表を示す図である。
図5を参照して、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”0”,”0”,”0”である場合には、セレクタセルSELは、部分積Sとして”0”を出力する。
【0073】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”0”,”0”,”1”である場合、”0”,”1”,”0”である場合、および”0”,”1”,”1”である場合には、セレクタセルSELは、部分積Sとして”0”を出力する。
【0074】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”0”,”0”である場合には、セレクタセルSELは、部分積SとしてデータXHを出力する。
【0075】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”0”,”1”である場合には、セレクタセルSELは、部分積SとしてデータXLを出力する。
【0076】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”1”,”0”である場合には、セレクタセルSELは、部分積SとしてデータXHの論理レベルを反転したデータ/XHを出力する。
【0077】
また、演算フラグN、反転フラグFおよびシフトフラグDがそれぞれ”1”,”1”,”1”である場合には、セレクタセルSELは、部分積SとしてデータXLの論理レベルを反転したデータ/XLを出力する。
【0078】
このように、セレクタセルSELは、ブースのアルゴリズムに従ってデコードされた演算フラグN、反転フラグFおよびシフトフラグDに基づいて部分積を算出する。
【0079】
より詳細には、再び図4を参照して、PチャネルMOSトランジスタMp11,Mp12およびNチャネルMOSトランジスタM11,M12で構成される選択回路は、シフトフラグDに基づいて、セレクタセルSELへ入力された被乗数データをシフトするか否かを選択する。すなわち、この選択回路は、シフトフラグDが”0”の場合にはデータXHをそのまま出力し、シフトフラグDが”1”の場合にはデータXHの1ビット下位のデータXLを出力する。
【0080】
PチャネルMOSトランジスタMp13,Mp14およびNチャネルMOSトランジスタM13,M14によって構成される排他的論理和回路は、反転フラグFが”1”の場合には、上記選択回路によって選択されたデータXLまたはデータXHを反転させて出力する。また、この排他的論理和回路は、反転フラグFが”0”の場合には、上記選択回路によって選択されたデータXLまたはデータXHをそのままNチャネルMOSトランジスタM15およびPチャネルMOSトランジスタMp15へ出力する。
【0081】
PチャネルMOSトランジスタMp15およびNチャネルMOSトランジスタM15,M16によって構成される回路は、演算フラグNが”1”の場合には、上記排他的論理和回路から受けたデータを部分積Sとして出力し、演算フラグNが”0”の場合には、”0”を示すデータを部分積Sとして出力する。
【0082】
図4に示すセレクタセルSELの回路構成を1単位とすることで、乗数ビットおよび被乗数ビットを増加させた乗算回路を簡単に構成することが可能となる。
【0083】
図6は、本発明の第1の実施の形態に係る半導体装置におけるシフト加算回路の構成を示す回路図である。
【0084】
図6を参照して、シフト加算回路40は、たとえば4ビット×4ビット用の回路であり、ハーフアダー(HA)51〜54と、フルアダー(FA)61〜68と、マルチプレクサ(MUX)71〜73と、レジスタ81〜83とを含む。
【0085】
ハーフアダー51は、部分積S13およびS21を加算し、加算結果の下位ビットをデータSumとしてフルアダー61へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてハーフアダー53へ出力する。
【0086】
ハーフアダー52は、部分積S12およびS20を加算し、加算結果の下位ビットをデータSumとしてフルアダー62へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー61へ出力する。
【0087】
ハーフアダー53は、部分積S22およびハーフアダー51から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー64へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー63へ出力する。
【0088】
フルアダー61は、ハーフアダー52から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー51から受けたデータSumおよびSRAMから受けたデータI3を加算し、加算結果の下位ビットをデータSumとしてフルアダー65へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー64へ出力する。
【0089】
フルアダー62は、レジスタ81から受けたデータをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー52から受けたデータSumおよびSRAMから受けたデータI2を加算し、加算結果の下位ビットをデータSumとしてフルアダー66へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー65へ出力する。
【0090】
ハーフアダー54は、部分積S11およびレジスタ82から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー67へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー66へ出力する。
【0091】
フルアダー63は、フルアダー64から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、部分積S23およびハーフアダー53から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてマルチプレクサ72へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてマルチプレクサ71へ出力する。
【0092】
フルアダー64は、フルアダー65から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー53から受けたデータSumおよびフルアダー61から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてマルチプレクサ73へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー63へ出力する。
【0093】
フルアダー65は、フルアダー66から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー61から受けたデータSumおよびフルアダー62から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR3として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー64へ出力する。
【0094】
フルアダー66は、フルアダー67から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー62から受けたデータSumおよびハーフアダー54から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR2として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー65へ出力する。
【0095】
フルアダー67は、フルアダー68から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー54から受けたデータSumおよびSRAMから受けたデータI1を加算し、加算結果の下位ビットをデータR1として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー66へ出力する。
【0096】
フルアダー68は、レジスタ83から受けたデータをキャリー入力Cinすなわち桁上げ値として受けて、部分積S10およびSRAMから受けたデータI0を加算し、加算結果の下位ビットをデータR0として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー67へ出力する。
【0097】
マルチプレクサ71は、制御信号BDCに基づいて、ブースデコーダDEC2から受けた補数フラグC2およびフルアダー63から受けたキャリー出力Coutのいずれかを選択してレジスタ81へ出力する。マルチプレクサ72は、制御信号BDCに基づいて、フルアダー63から受けたデータSumおよび”0”を示すデータのいずれかを選択してレジスタ82へ出力する。マルチプレクサ73は、制御信号BDCに基づいて、ブースデコーダDEC1から受けた補数フラグC1およびフルアダー64から受けたデータSumのいずれかを選択してレジスタ83へ出力する。
【0098】
レジスタ81は、マルチプレクサ71から受けたデータを保持するとともにフルアダー62へ出力する。レジスタ82は、マルチプレクサ72から受けたデータを保持するとともにハーフアダー54へ出力する。レジスタ83は、マルチプレクサ73から受けたデータを保持するとともにフルアダー68へ出力する。
【0099】
このように、シフト加算回路40は、セレクタセルSELから出力される部分積、及び補数フラグCの値等を加算する。より詳細には、シフト加算回路40は、セレクタセルSELから出力される部分積S10〜S13およびS20〜S23と、シリアル乗算における前段の乗算結果までの累積値I0〜I3と、このシフト加算回路40における加算結果の1クロック前の上位ビットまたは補数フラグCとを加算する。
【0100】
シフト加算回路40において加算結果の下位ビットであるデータR0〜R3が出力され、上位ビットは次のクロックタイミングで加算するためにフィードバック用のレジスタ81〜83に格納される。
【0101】
シフト加算回路40は、最も効率よく加算器を構成できるWallaceの木を用いた回路構成を有している。シフト加算回路40は、ビットシリアル演算において、被乗数であるデータXのうち最下位ビットのデータを扱う場合には、上位ビットのフィードバックが存在しないという特徴がある。また、被乗数であるデータXのうち最下位ビット以外のデータを扱う場合には、補数フラグCは必要がないという特徴がある。このため、シフト加算回路40では、マルチプレクサ71〜73によって上位ビットのデータおよび補数フラグCのいずれかを選択する。より詳細には、制御信号BDCは、被乗数であるデータXのうち最下位ビットのデータを扱う場合に活性化され、これにより、マルチプレクサ71〜73は、それぞれ補数フラグC2,”0”を示すデータ,補数フラグC1を選択する。このような構成により、回路規模を削減することができる。
【0102】
図7は、本発明の第1の実施の形態に係る半導体装置の変形例の構成を示す図である。
図7を参照して、半導体装置202は、被乗数が4ビット、乗数が4ビットの4ビット×4ビットシリアル乗算器である半導体装置201を、被乗数がmビット、乗数がnビットのmビット×nビットシリアル乗算器に拡張した構成を有している。
【0103】
半導体装置202は、n/2個のブースデコーダDECと、(m×n/2)個のセレクタセルSELと、mビット×nビット用のシフト加算回路とを備える。
【0104】
以上のように、本発明の第1の実施の形態に係る半導体装置では、回路面積を小さくして高並列化を図ることが可能であるとともに、符号付乗算を高速に行なうことが可能である。また、シリアル処理を順次行なっていくことによって、可変長の演算が可能であり、また、マルチメディア処理において頻出する加算処理および減算処理が実行可能である。したがって、マルチメディアデータを効果的に処理することができる。
【0105】
図8は、本発明の第1の実施の形態に係る半導体装置が行なう乗算処理のフローを示す図である。図8は、8ビット×8ビットの乗算処理フローを示している。
【0106】
図8を参照して、Xは被乗数であり、Yはブースデコードに使用する乗数であり、Zは演算結果である。また、BabはXaおよびYbの部分積であり、MabはXaおよびYbの部分積の下4桁と前段の部分積の上3桁との和である。
【0107】
演算結果Zは、以下の式のように各部分積Mabを足し合わせることにより得られる。
Z0=M00
Z1=M10+M01
Z2=M20+M11
Z3=M30+M21
次に、演算処理の流れを説明する。
1)Y0を入力し、ブースのアルゴリズムに従いデコードし、D/N/F/Cフラグをセットする。
2)X0を入力し、X0×Y0の部分積B00を算出する。B00の下位4bitをM00とする。M00がそのままZ0となる。
3)X1を入力し、X1×Y0の部分積B10を算出する。B10の下位4bitおよびB00の上位3bitの和をM10として出力する。
4)X2を入力し、X2×Y0の部分積B20を算出する。B20の下位4bitおよびB10の上位3bitの和をM20として出力する。
5)X3を入力し、X3×Y0の部分積B30を算出する。B30の下位4bitおよびB20の上位3bitの和をM30として出力する。
6)Y1を入力し、ブースのアルゴリズムに従いデコードし、D/N/F/Cフラグをセットする。
7)X0を入力し、X0×Y1の部分積B01を算出する。B01の下位4bitをM01とする。M01およびM10の和をとりZ1とする。
8)X1を入力し、X1×Y1の部分積B11を算出する。B11の下位4bitおよびB01の上位3bitの和をM11とし、M20との和をとりZ2とする。
9)X2を入力し、X2×Y1の部分積B21を算出する。B21の下位4bitおよびB11の上位3bitの和をM21とし、M30との和をとりZ3とする。
【0108】
ここで、半導体装置201は、前述のようにブースデコードおよび部分積加算を行ない、上記Z*(*は0〜3)をそれぞれ算出する。たとえば、Z0を求める演算では、レジスタ12〜15に4ビットの上記X0が格納され、4ビットの上記Y0がブースデコードされる。
【0109】
シフト加算回路40は、ブースデコード結果に基づいてシフトおよび反転されたデータを加算して上記部分積B**(**は00,10,20,30,01,11,21)を算出する。そして、シフト加算回路40は、各部分積を加算し、加算結果をZ*としてSRAMに保存する。
【0110】
図9は、本発明の第1の実施の形態に係る半導体装置が行なう乗算処理以外の演算の基本概念を示す図である。図9は、8ビット×8ビットの演算処理フローを示している。
【0111】
ブースのアルゴリズムを用いたビットシリアル乗算器では、乗算以外にも演算が可能である。ビットシリアル乗算器において、2つのブースデコード結果に基づく値、SRAMからの入力、および上位ビットのフィードバックを利用することで、加算、減算、補数、反転およびシフト処理を行なうことが可能である。
【0112】
図9を参照して、Xは演算対象数であり、Yはシフトおよび補数処理に利用する数であり、YaはYの下位2ビット+F2レジスタの値すなわちレジスタ21の保持値であり、YbはYの上位3ビットの値であり、Zは演算結果であり、ZREGはキャリー用レジスタの値すなわちレジスタ81〜83の保持値であり、SRAMINはSRAMからの入力値である。
【0113】
ブースデコーダDECによってX×Ya(1段目)およびX×Yb(2段目)を計算し、それらとZREGおよびSRAMINの値とを加算する。この加算結果の下位4ビットをZとして出力し、上位3ビットをZREGとして次のクロックタイミングにおいてフィードバックする。すなわち、X×Y+SRAMIN+ZREGの演算を行なうことにより、加算、減算、補数、反転およびシフトといった処理を行なうことが可能となる。
【0114】
図10は、本発明の第1の実施の形態に係る半導体装置が行なう加算処理のフローを示す図である。図10は、8ビット×8ビットの加算処理フローを示している。
【0115】
加算処理では、X=A、Y=0001、F2=0、SRAMIN=Bを入力することにより、演算を行なう。
【0116】
図10を参照して、Aは被加数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、Bは加数であり、B0はBの下位4ビットであり、B1はBの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0117】
次に、演算処理の流れを説明する。
1)Ya=010、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=A0、SRAMIN=B0を入力する。A0×Yaの演算結果としてそのままA0が出力され、A0×Ybの演算結果として”0000”が出力される。
3)ZREGにはキャリー”0”が入力される。Z0としてA0+B0が出力される。
4)X=A1を入力し、SRAMIN=B1を入力する。A1×Yaの演算結果としてそのままA1が出力され、A1×Ybの演算結果として”0000”が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1としてA1+B1+キャリーが出力される。
【0118】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の加算を行なうことが可能である。
【0119】
図11は、本発明の第1の実施の形態に係る半導体装置が行なう減算処理のフローを示す図である。図11は、8ビット×8ビットの減算処理フローを示している。
【0120】
減算処理では、X=B、Y=1111、F2=0、SRAMIN=Aを入力することにより、演算を行なう。
【0121】
図11を参照して、Aは被減数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、Bは減数であり、B0はBの下位4ビットであり、B1はBの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0122】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=B0、SRAMIN=A0を入力する。B0×Yaの演算結果としてB0の補数が出力され、B0×Ybの演算結果として”0000”が出力される。
3)ZREGにはキャリー”001”が入力され、Z0としてA0+(−B0)が出力される。
4)X=B1、SRAMIN=A1を入力する。B1×Yaの演算結果としてB1の補数が出力され、B1×Ybの演算結果として”0000”が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1としてA1+(−B1)+キャリーが出力される。
【0123】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の減算を行なうことが可能である。
【0124】
図12は、本発明の第1の実施の形態に係る半導体装置が行なう補数処理のフローを示す図である。図12は、8ビット×8ビットの補数処理フローを示している。
【0125】
補数処理では、X=A、Y=1111、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0126】
図12を参照して、Aは被減数であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは演算結果である。
【0127】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0の補数が出力される。
3)ZREGにはキャリー”001”が入力され、Z0として−A0が出力される。
4)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1の補数が出力される。また、ZREGとして1クロック前のクロックタイミングにおいて生成されたキャリーが出力される。
5)ZREGにはキャリーが入力され、Z1として−A1+キャリーが出力される。
【0128】
以上(1)〜(5)の処理を繰り返し行なうことで、8ビット以上の補数処理を行なうことが可能である。
【0129】
図13は、本発明の第1の実施の形態に係る半導体装置が行なう反転処理のフローを示す図である。図13は、8ビット×8ビットの反転処理フローを示している。
【0130】
反転処理では、X=A、Y=1111、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0131】
図13を参照して、Aは反転処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zは反転処理結果である。
【0132】
次に、演算処理の流れを説明する。
1)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
2)X=0、SRAMIN=0を入力し、演算結果の上位ビット”000”をキャリーレジスタに保存する。
3)Ya=110、Yb=111を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。ただし、キャリーフラグは保存せず前のクロックまでのデータを保持する。
4)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0の反転データが出力される。
5)Z0として−A0が出力される。
6)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1の反転データが出力される。
7)Z1としてA1の反転データが出力される。
【0133】
以上(1)〜(7)の処理を繰り返し行なうことで、8ビット以上の反転処理を行なうことが可能である。
【0134】
次に、本発明の第1の実施の形態に係る半導体装置が行なう算術シフト処理を説明する。4ビット回路においては、1ビットシフト〜4ビットシフトの組み合わせによって、mビットシフトを実現可能である。たとえば7ビットシフトは、3ビットシフトおよび4ビットシフトの組み合わせによって実現可能である。また、4ビットシフトはデータのコピーによって実現可能であるため、以下では、1ビットシフト、2ビットシフトおよび3ビットシフトについて述べる。
【0135】
図14は、本発明の第1の実施の形態に係る半導体装置が行なう1ビットシフト処理のフローを示す図である。図14は、8ビットであるAの1ビットシフト処理フローを示している。
【0136】
1ビットシフト処理では、X=A、Y=0001、F2=1、SRAMIN=0を入力することにより、演算を行なう。
【0137】
図14を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0138】
次に、演算処理の流れを説明する。
1)Ya=011、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを1にセットする。
2)Ya=011、Yb=000を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0を1ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の最上位ビットが保存され、Z0としてA0の下位3ビットおよび”0”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1を1ビットシフトしたデータが出力される。
6)Z1としてA1の下位3ビットおよびA0の最上位ビットが出力される。
【0139】
以上(1)〜(6)の処理を繰り返し行なうことで、1ビットシフト処理を逐次的に行なうことが可能である。
【0140】
図15は、本発明の第1の実施の形態に係る半導体装置が行なう2ビットシフト処理のフローを示す図である。図15は、8ビットであるAの2ビットシフト処理フローを示している。
【0141】
2ビットシフト処理では、X=A、Y=0100、F2=0、SRAMIN=0を入力することにより、演算を行なう。
【0142】
図15を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0143】
次に、演算処理の流れを説明する。
1)Ya=000、Yb=010を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを0にセットする。
2)Ya=000、Yb=010を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果としてA0を2ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の上位2ビットが保存され、Z0としてA0の下位2ビットおよび”0”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果としてA1を2ビットシフトしたデータが出力される。
6)Z1としてA1の下位2ビットおよびA0の上位2ビットが出力される。
【0144】
以上(1)〜(6)の処理を繰り返し行なうことで、2ビットシフト処理を逐次的に行なうことが可能である。
【0145】
図16は、本発明の第1の実施の形態に係る半導体装置が行なう3ビットシフト処理のフローを示す図である。図16は、8ビットであるAの3ビットシフト処理フローを示している。
【0146】
3ビットシフト処理では、X=A、Y=0111、F2=1、SRAMIN=0を入力することにより、演算を行なう。
【0147】
図16を参照して、Aはシフト処理前の値であり、A0はAの下位4ビットであり、A1はAの上位4ビットであり、YaはYの下位2ビット+F2レジスタの値であり、YbはYの上位3ビットの値であり、Zはシフト処理結果である。
【0148】
次に、演算処理の流れを説明する。
1)Ya=111、Yb=011を入力し、ブースのアルゴリズムに従いデコードし、F2フラグを1にセットする。
2)Ya=111、Yb=011を入力し、ブースのアルゴリズムに従いデコードし、フラグをセットする。
3)X=A0、SRAMIN=0を入力する。A0×Yaの演算結果として”0000”、A0×Ybの演算結果としてA0を3ビットシフトしたデータが出力される。
4)キャリーレジスタにはA0の上位3ビットが保存され、Z0としてA0の下位1ビットおよび”000”が出力される。
5)X=A1、SRAMIN=0を入力する。A1×Yaの演算結果として”0000”が出力され、A1×Ybの演算結果としてA1を3ビットシフトしたデータが出力される。
6)Z1としてA1の下位1ビットおよびA0の上位3ビットが出力される。
【0149】
以上(1)〜(6)の処理を繰り返し行なうことで、3ビットシフト処理を逐次的に行なうことが可能である。
【0150】
以上のように、本発明の第1の実施の形態に係る半導体装置は、乗算以外にも加算、減算、補数、反転およびシフト処理を行なうことが可能であり、かつこれらの演算を高速に行なうことが可能である。
【0151】
次に、本発明の他の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【0152】
<第2の実施の形態>
本実施の形態は、第1の実施の形態に係る半導体装置と比べて演算方法を変更した半導体装置に関する。以下で説明する内容以外は第1の実施の形態に係る半導体装置と同様である。
【0153】
図17は、本発明の第2の実施の形態に係る半導体装置の構成を示す図である。
図17を参照して、半導体装置203は、加減算部96と、テーブル部93,94と、出力演算部95とを備える。加減算部96は、加算部91と、減算部92とを含む。
【0154】
半導体装置203は、データXおよびデータYの積を算出する。半導体装置203では、ビットシリアル乗算器を構成する方法として、乗算の式変形と、テーブルルックアップとを用いる。
【0155】
まず、半導体装置203のテーブル参照を用いた乗算アルゴリズムについて説明する。
nビット×nビットの乗算を行なう際に、乗算結果をすべて事前に計算し、テーブルに格納しておけば、乗算は1回のテーブル参照によって行なうことができる。
【0156】
しかしながら、このような方法では、テーブルの大きさが22n×2×nビットと大きくなってしまう。
【0157】
そこで、半導体装置203では、以下の式(1)あるいは式(2)が成り立つことを利用する。
【0158】
X×Y=((X+Y)2−X2−Y2)/2 ・・・(1)
X×Y=((X+Y)2−(X−Y)2)/4 ・・・(2)
(n+1)ビットのデータの平方を事前に計算しておき、計算結果をテーブルに格納しておくことにより、XおよびYの乗算を、式(1)では2回のテーブル参照と3回の加減算とにより実現することができる。また、式(2)では3回のテーブル参照と3回の加減算とにより実現することができる。また、テーブルの大きさを2n+1×(2×n+2)ビット程度と小さくすることができる。
【0159】
さらに、半導体装置203では、X≧Yの条件下で、以下の式(3)および(4)に従ってXおよびYの乗算を行なう。
【0160】
X+Yが偶数のとき、X×Y=((X+Y)/2)2−((X−Y)/2)2 ・・・(3)
X+Yが奇数のとき、X×Y=((X+Y−1)/2)2−((X−Y−1)/2)2+Y ・・・(4)
X+Yが偶数のときは、X−Yも必ず偶数になる。また、(X+Y)および(X−Y)は、2進数で表記した場合には、必ず最下位ビットが”0”となる。すなわち、((X+Y)/2)の演算、および((X−Y)/2)の演算では、余りが発生せず、演算結果は必ずnビット以下になる。したがって、式(3)を実行する際に、n2すなわちnビット×nビットの演算を行なうためのテーブルを設ければよく、テーブルの大きさを、2n+1×(2×n+2)ビットからさらに2n×2×nビットと小さくすることができる。
【0161】
X+Yが奇数のときは、X−Yも必ず奇数になる。また、(X+Y)および(X−Y)は、2進数で表記した場合には、必ず最下位ビットが”1”となる。すなわち、X+Yが奇数のとき、(X+Y)および(X−Y)にそれぞれ1を減ずれば必ず最下位ビットが”0”となる。そうすると、((X+Y−1)/2)の演算、および((X−Y−1)/2)の演算では、余りが発生せず、演算結果は必ずnビット以下になる。したがって、式(4)を実行する際に、n2すなわちnビット×nビットの演算を行なうためのテーブルを設ければよく、テーブルの大きさを、2n+1×(2×n+2)ビットからさらに2n×2×nビットと小さくすることができる。
【0162】
次に、上記アルゴリズムを実現する半導体装置203における各機能ブロックの動作を説明する。まず、X+Yが偶数の場合における半導体装置203の動作について説明する。
【0163】
加算部91は、データXおよびデータYを加算し、加算した和データをテーブル部93へ出力する。
【0164】
減算部92は、データXおよびデータYを減算し、減算した差データをテーブル部94へ出力する。
【0165】
テーブル部93は、加算部91から受けた和データを、この和データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0166】
テーブル部94は、減算部92から受けた差データを、この差データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0167】
出力演算部95における減算部は、テーブル部93から受けたデータとテーブル部94から受けたデータとを減算し、減算結果をデータXおよびデータYの乗算結果として出力する。
【0168】
そして、出力演算部95は、減算部において算出した乗算結果と、SRAMから受けたシリアル乗算における前段の乗算結果までの累積値とを加算し、加算結果を示すデータをSRAMに保存する。なお、半導体装置203は、SRAMを備える構成であってもよい。
【0169】
次に、X+Yが奇数の場合における半導体装置203の動作について説明する。
加算部91は、データXおよびデータYを加算し、加算結果から1を減算した和データをテーブル部93へ出力する。
【0170】
減算部92は、データXおよびデータYを減算し、減算結果から1を減算した差データをテーブル部94へ出力する。
【0171】
テーブル部93は、加算部91から受けた和データを、この和データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0172】
テーブル部94は、減算部92から受けた差データを、この差データを2で除算し、除算結果を2乗したデータに変換して出力する。
【0173】
出力演算部95における減算部は、テーブル部93から受けたデータとテーブル部94から受けたデータとを減算し、減算結果をデータXおよびデータYの乗算結果として出力する。
【0174】
そして、出力演算部95は、減算部において算出した乗算結果と、SRAMから受けたシリアル乗算における前段の乗算結果までの累積値とを加算し、加算結果を示すデータをSRAMに保存する。
【0175】
以下では、データXおよびデータYがそれぞれ4ビットのデータであると仮定して説明する。すなわち、データY0〜Y3およびデータX0〜X3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータY0およびデータX0であり、MSBはデータY3およびデータX3である。また、データX0〜X3の各々をデータXと称する場合がある。データY0〜Y3の各々をデータYと称する場合がある。
【0176】
図18は、本発明の第2の実施の形態に係る半導体装置における加減算部の構成を示す図である。図18は、X+Yが偶数の場合における構成を示している。
【0177】
図18を参照して、加算部91は、レジスタ101〜104と、フルアダー110〜112と、ハーフアダー113とを含む。減算部92は、レジスタ105〜108と、フルアダー114〜117と、NOTゲートG15と、EXORゲートG16〜G19とを含む。
【0178】
レジスタ101は、SRAMから受けたデータX3を保持するとともにフルアダー110および114へ出力する。レジスタ102は、SRAMから受けたデータX2を保持するとともにフルアダー111および115へ出力する。レジスタ103は、SRAMから受けたデータX1を保持するとともにフルアダー112および116へ出力する。レジスタ104は、SRAMから受けたデータX0を保持するとともにハーフアダー113およびフルアダー117へ出力する。
【0179】
レジスタ105は、SRAMから受けたデータY3を保持するとともにフルアダー110およびNOT回路G11へ出力する。レジスタ106は、SRAMから受けたデータY2を保持するとともにフルアダー111およびNOT回路G12へ出力する。レジスタ107は、SRAMから受けたデータY1を保持するとともにフルアダー112およびNOT回路G13へ出力する。レジスタ108は、SRAMから受けたデータY0を保持するとともにハーフアダー113およびNOT回路G14へ出力する。NOTゲートG11〜G14は、それぞれレジスタ105〜108から受けたデータの論理レベルを反転してフルアダー114〜117へ出力する。
【0180】
フルアダー110は、フルアダー111から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ101から受けたデータX3およびレジスタ105から受けたデータY3を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてテーブル部93へ出力する。
【0181】
フルアダー111は、フルアダー112から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ102から受けたデータX2およびレジスタ106から受けたデータY2を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー110へ出力する。
【0182】
フルアダー112は、ハーフアダー113から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ103から受けたデータX1およびレジスタ107から受けたデータY1を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー111へ出力する。
【0183】
ハーフアダー113は、レジスタ104から受けたデータX0およびレジスタ108から受けたデータY0を加算し、加算結果の下位ビットをデータSumとしてテーブル部93へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー112へ出力する。
【0184】
フルアダー114は、フルアダー115から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ101から受けたデータX3およびNOTゲートG11から受けたデータY3の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG16へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力CoutとしてNOTゲートG15へ出力する。NOTゲートG15は、フルアダー114から受けたキャリー出力Coutの論理レベルを反転してEXORゲートG16〜G19へ出力する。
【0185】
フルアダー115は、フルアダー116から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ102から受けたデータX2およびNOTゲートG12から受けたデータY2の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG17へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー114へ出力する。
【0186】
フルアダー116は、フルアダー117から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ103から受けたデータX1およびNOTゲートG13から受けたデータY1の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG18へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー115へ出力する。
【0187】
フルアダー117は、”1”を示すデータをキャリー入力Cinすなわち桁上げ値として受けて、レジスタ104から受けたデータX0およびNOTゲートG14から受けたデータY0の反転データを加算し、加算結果の下位ビットをデータSumとしてEXORゲートG19へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー116へ出力する。
【0188】
EXORゲートG16〜G19は、それぞれフルアダー114〜117から受けたデータSumおよびNOTゲートG15から受けたデータの排他的論理和をテーブル部94へ出力する。
【0189】
加算部91は、4つの加算器によって構成されている。また、減算部92では、XにYの補数を加算する、すなわちYの反転と、”1”及びXとを加算することにより、X−Yの演算を行なっている。
【0190】
ここで、加算部91は、X≧Yの場合には正の値を出力し、また、加算部91においてオーバーフローが発生する。また、加算部91は、X<Yの場合には、補数の値を出力する。
【0191】
X−Yの演算結果をそのまま2乗する場合には符号は問題にならないが、半導体装置203では、テーブル部94がテーブル参照を行なうため、X<Yである場合には、出力結果の補数をとる。すなわち、オーバーフローが発生しなければ、X<Yであると判断できるので、フルアダー114のキャリー出力Coutが”0”の場合には、NOT回路G15から論理ハイレベルのデータがEXORゲートG16〜G19へ出力される。これにより、EXORゲートG16〜G19は、フルアダー114〜117から受けたデータSumを反転して出力する。
【0192】
次に、テーブル部の動作について説明する。半導体装置203では、nビットのデータXとnビットのデータYとを加算した値を2乗したデータに変換し、かつnビットのデータXとnビットのデータYとを減算した値を2乗したデータに変換するテーブルを利用する。この場合、X+Yの2乗データは最大n+1ビットとなり、X−Yの2乗データは最大nビットになるが、これらの2乗データは後に1/4倍されるので、テーブル参照が必要なデータは、X+Yに対してnビット、X−Yに対してn−1ビットとなる。
【0193】
テーブル部93では、((X+Y)/2)2の計算結果が保存されており、テーブル部94では、((X−Y)/2)2の計算結果が保存されている。
【0194】
テーブル部は、加算結果用・減算結果用を共通にしたものを用意する方法と、加算および減算を同時に実行したい場合にはテーブルを別々に用意する方法が考えられる。
【0195】
図19は、本発明の第2の実施の形態に係る半導体装置における出力演算部95の構成を示す図である。図19は、テーブルを加算結果用、減算結果用と別々に用意する場合における構成を示している。図19において、テーブル部93の出力データを示すデータA0〜A7、テーブル部94の出力データを示すデータB0〜B7および累積部分積K0〜K3は、いずれも番号の小さい方が下位ビットを示し、LSBはデータA0、データB0および累積部分積K0であり、MSBはデータA7、データB7および累積部分積K3である。また、データA0〜A7の各々をデータAと称する場合がある。データB0〜B7の各々をデータBと称する場合がある。累積部分積K0〜K3の各々を累積部分積Kと称する場合がある。ここで、累積部分積K0〜K3は、SRAMに保存されているシリアル乗算における前段の乗算結果までの累積値である。
【0196】
テーブルを加算結果用、減算結果用と別々に用意する場合には、減算結果用のテーブルの大きさは2n-1×(2×n−2)ビットとなる。また、この場合、減算結果用のテーブルの値をあらかじめ(X−Y)2の補数をとった値にしておくことにより、出力演算部95における演算を加算のみにすることができる。
【0197】
図19を参照して、出力演算部95は、ハーフアダー121〜125と、フルアダー126〜143と、マルチプレクサ151〜158と、レジスタ161〜166とを含む。
【0198】
テーブル部93,94の変換処理では、(X+Y)/2という数字を扱っている。X+Yが奇数の場合には、(X+Y)/2は整数ではなくなることから、データAおよびデータBの減算結果にさらにXまたはYのいずれかを加算する必要がある。このため、出力演算部95では、マルチプレクサ151〜158を用いて、X+Yの最下位ビットQ2すなわち図18に示す加算部91のハーフアダー113から出力されるデータSumに基づいてXまたはYを加算するか否かを決定し、XおよびYの大小関係に基づいてXおよびYのいずれを加算するかを決定する。
【0199】
より詳細には、データQ1は、X>Yの場合には”1”となり、X≦Yの場合には”0”となる。データQ1は、たとえば図18に示す減算部92のフルアダー114から出力されるキャリー出力Coutである。
【0200】
マルチプレクサ151は、データQ1が”1”の場合にはデータY3を選択し、データQ1が”0”の場合にはデータX3を選択してマルチプレクサ155へ出力する。マルチプレクサ152は、データQ1が”1”の場合にはデータY2を選択し、データQ1が”0”の場合にはデータX2を選択してマルチプレクサ156へ出力する。マルチプレクサ151は、データQ1が”1”の場合にはデータY1を選択し、データQ1が”0”の場合にはデータX1を選択してマルチプレクサ157へ出力する。マルチプレクサ151は、データQ1が”1”の場合にはデータY0を選択し、データQ1が”0”の場合にはデータX0を選択してマルチプレクサ158へ出力する。
【0201】
マルチプレクサ155は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ151から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー126へ出力する。
【0202】
マルチプレクサ156は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ152から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー127へ出力する。
【0203】
マルチプレクサ157は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ153から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー128へ出力する。
【0204】
マルチプレクサ158は、(X+Y)の演算結果を示すデータの最下位ビットQ2が”1”の場合にはマルチプレクサ154から受けたデータを選択し、最下位ビットQ2が”0”の場合には”0”を選択してフルアダー135へ出力する。
【0205】
ハーフアダー121は、データA7およびデータB7を加算し、加算結果の下位ビットをデータSumとしてフルアダー129へ出力する。
【0206】
ハーフアダー122は、データA6およびデータB6を加算し、加算結果の下位ビットをデータSumとしてフルアダー130へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー129へ出力する。
【0207】
ハーフアダー123は、データA5およびデータB5を加算し、加算結果の下位ビットをデータSumとしてフルアダー131へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー130へ出力する。
【0208】
ハーフアダー124は、データA4およびデータB4を加算し、加算結果の下位ビットをデータSumとしてフルアダー132へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー131へ出力する。
【0209】
フルアダー126は、データB3をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ155から受けたデータおよびデータA3を加算し、加算結果の下位ビットをデータSumとしてフルアダー133へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー132へ出力する。
【0210】
フルアダー127は、データB2をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ156から受けたデータおよびデータA2を加算し、加算結果の下位ビットをデータSumとしてフルアダー134へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー133へ出力する。
【0211】
フルアダー128は、データB1をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ157から受けたデータおよびデータA1を加算し、加算結果の下位ビットをデータSumとしてハーフアダー125へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー134へ出力する。
【0212】
フルアダー129は、フルアダー130から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー121から受けたデータSumおよびハーフアダー122から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ161へ出力する。
【0213】
フルアダー130は、フルアダー131から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー122から受けたデータSumおよびハーフアダー123から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ162へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー129へ出力する。
【0214】
フルアダー131は、フルアダー132から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー123から受けたデータSumおよびハーフアダー124から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ163へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー130へ出力する。
【0215】
フルアダー132は、フルアダー133から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー124から受けたデータSumおよびフルアダー126から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてレジスタ164へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー131へ出力する。
【0216】
フルアダー133は、フルアダー134から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー126から受けたデータSumおよびフルアダー127から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー136へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー132へ出力する。
【0217】
フルアダー134は、ハーフアダー125から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー127から受けたデータSumおよびフルアダー128から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー137へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー133へ出力する。
【0218】
ハーフアダー125は、フルアダー128から受けたデータSumおよびフルアダー135から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータSumとしてフルアダー138へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー134へ出力する。
【0219】
フルアダー135は、データB0をキャリー入力Cinすなわち桁上げ値として受けて、マルチプレクサ158から受けたデータおよびデータA0を加算し、加算結果の下位ビットをデータSumとしてフルアダー139へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてハーフアダー125へ出力する。
【0220】
レジスタ161〜164は、それぞれフルアダー129〜132から受けたデータSumを保持するとともにフルアダー136〜139へ出力する。ここで、出力演算部95の演算ビット幅は4ビットしかないのに対し、データAおよびデータBのデータ長はそれぞれ8ビットである。レジスタ161〜164を設けることにより、上位側のデータを一時保存して演算を2回に分けて実行することができる。
【0221】
フルアダー136は、SRAMから受けた累積部分積K3をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー133から受けたデータSumおよびレジスタ161から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー140へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてレジスタ165へ出力する。
【0222】
フルアダー137は、SRAMから受けた累積部分積K2をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー134から受けたデータSumおよびレジスタ162から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー141へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー140へ出力する。
【0223】
フルアダー138は、SRAMから受けた累積部分積K1をキャリー入力Cinすなわち桁上げ値として受けて、ハーフアダー125から受けたデータSumおよびレジスタ163から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー142へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー141へ出力する。
【0224】
フルアダー139は、SRAMから受けた累積部分積K0をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー135から受けたデータSumおよびレジスタ164から受けたデータを加算し、加算結果の下位ビットをデータSumとしてフルアダー143へ出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー142へ出力する。
【0225】
フルアダー140は、フルアダー141から受けたデータSumをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー136から受けたデータSumおよびフルアダー137から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR3として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてレジスタ166へ出力する。
【0226】
フルアダー141は、フルアダー142から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー137から受けたデータSumおよびフルアダー138から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR2として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー140へ出力する。
【0227】
フルアダー142は、フルアダー143から受けたキャリー出力Coutをキャリー入力Cinすなわち桁上げ値として受けて、フルアダー138から受けたデータSumおよびフルアダー139から受けたキャリー出力Coutを加算し、加算結果の下位ビットをデータR1として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー141へ出力する。
【0228】
レジスタ165は、フルアダー136から受けたキャリー出力Coutを保持するとともにデータL1としてフルアダー143へ出力する。レジスタ166は、フルアダー140から受けたキャリー出力Coutを保持するとともにデータL0としてフルアダー143へ出力する。
【0229】
フルアダー143は、レジスタ166から受けたデータL0をキャリー入力Cinすなわち桁上げ値として受けて、フルアダー139から受けたデータSumおよびレジスタ165から受けたデータL1を加算し、加算結果の下位ビットをデータR0として出力し、加算結果の上位ビットすなわち桁上げ値をキャリー出力Coutとしてフルアダー142へ出力する。
【0230】
以上のように、本発明の第2の実施の形態に係る半導体装置では、本発明の第1の実施の形態に係る半導体装置と同様に、回路面積を小さくして高並列化を図ることが可能であるとともに、符号付乗算を高速に行なうことが可能である。また、シリアル処理を順次行なっていくことによって、可変長の演算が可能であり、また、マルチメディア処理において頻出する加算処理および減算処理が実行可能である。したがって、マルチメディアデータを効果的に処理することができる。
【0231】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0232】
11〜21 レジスタ、31〜38,SEL セレクタセル(部分積算出回路)、40 シフト加算回路(部分積加算回路)、51〜54,113,121〜125 ハーフアダー、61〜68,110〜112,114〜117,126〜143 フルアダー、71〜73,151〜158 マルチプレクサ、81〜83,101〜108,161〜166 レジスタ、91 加算部、92 減算部、93,94 テーブル部、95 出力演算部、96 加減算部、201〜203 半導体装置、DEC1,DEC2 ブースデコーダ、M1〜M6,M11〜M16 NチャネルMOSトランジスタ、Mp1〜Mp5,Mp11〜Mp15 PチャネルMOSトランジスタ、G1,G2 NANDゲート、G3 NOTゲート、G15 NOTゲート、G16〜G19 EXORゲート。
【特許請求の範囲】
【請求項1】
乗数を示す3ビットの第1の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力する第1のデコーダと、
被乗数を示す2ビットの第1の被乗数データと、前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第1の乗数データおよび前記第1の被乗数データの部分積を示す部分積データとして出力する第1の部分積算出部とを備える半導体装置。
【請求項2】
前記第1の被乗数データは、下位ビットである第1の被乗数ビットと、上位ビットである第2の被乗数ビットとを有し、
前記第1のデコーダは、前記第1の乗数データを受けて、ブースのアルゴリズムに従い、補数フラグをさらに出力し、
前記半導体装置は、さらに、
前記第2の被乗数ビットが下位ビットであり、第3の被乗数ビットが上位ビットである第2の被乗数データと、前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第2の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第1の乗数データおよび前記第2の被乗数データの部分積を示す部分積データとして出力する第2の部分積算出部と、
前記第1の部分積算出部から受けた前記部分積データおよび前記第2の部分積算出部から受けた前記部分積データに対して前記補数フラグに基づいて補数処理を実行し、各前記部分積データを加算する部分積加算部を備える請求項1に記載の半導体装置。
【請求項3】
前記第1の乗数データは、最下位ビットである第1の乗数ビットと、2ビット目である第2の乗数ビットと、最上位ビットである第3の乗数ビットとを有し、
前記半導体装置は、さらに、
前記第3の乗数ビットが最下位ビットである3ビットの第2の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグ、演算フラグおよび補数フラグを出力する第2のデコーダと、
前記第1の被乗数データと、前記第2のデコーダからの前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第2の乗数データおよび前記第1の被乗数データの部分積を示す部分積データとして出力する第3の部分積算出部と、
前記第2の被乗数データと、前記第2のデコーダからの前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第2の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第2の乗数データおよび前記第2の被乗数データの部分積を示す部分積データとして出力する第4の部分積算出部とを備え、
前記部分積加算部は、前記第1の部分積算出部から受けた前記部分積データおよび前記第2の部分積算出部から受けた前記部分積データに対して前記第1のデコーダから受けた前記補数フラグに基づいて補数処理を実行し、前記第3の部分積算出部から受けた前記部分積データおよび前記第4の部分積算出部から受けた前記部分積データに対して前記第2のデコーダから受けた前記補数フラグに基づいて補数処理を実行し、各前記部分積データを加算する請求項2に記載の半導体装置。
【請求項4】
第1のデータおよび第2のデータの積を算出する半導体装置であって、
前記第1のデータおよび前記第2のデータを加算し、前記加算した和データを出力する加算部と、
前記第1のデータおよび前記第2のデータを減算し、前記減算した差データを出力する減算部と、
前記加算部から受けた前記和データを、前記和データを2乗した2乗データに変換して出力する第1のテーブル部と、
前記減算部から受けた前記差データを、前記差データを2乗した2乗データに変換して出力する第2のテーブル部と、
前記第1のテーブル部から受けた前記2乗データと前記第2のテーブル部から受けた前記2乗データとを減算し、前記第1のデータおよび前記第2のデータの積として出力する出力演算部とを備える半導体装置。
【請求項5】
前記第1のテーブル部は、前記加算部から受けた前記和データを、前記和データを2で除算した結果を2乗した2乗データに変換して出力し、
前記第2のテーブル部は、前記減算部から受けた前記差データを、前記差データを2で除算した結果を2乗した2乗データに変換して出力する請求項4に記載の半導体装置。
【請求項6】
前記加算部は、前記第1のデータおよび前記第2のデータを加算し、前記加算結果から1を減算した和データを出力し、
前記減算部は、前記第2のデータから前記第1のデータを減算し、前記減算結果から1を減算した差データを出力し、
前記第1のテーブル部は、前記加算部から受けた前記和データを、前記和データを2で除算した結果を2乗した2乗データに変換して出力し、
前記第2のテーブル部は、前記減算部から受けた前記差データを、前記差データを2で除算した結果を2乗した2乗データに変換して出力し、
前記出力演算部は、前記第1のテーブル部から受けた前記2乗データと前記第2のテーブル部から受けた前記2乗データとを減算し、前記減算結果および前記第1のデータを加算したデータを前記第1のデータおよび前記第2のデータの積として出力する請求項4に記載の半導体装置。
【請求項1】
乗数を示す3ビットの第1の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグおよび演算フラグを出力する第1のデコーダと、
被乗数を示す2ビットの第1の被乗数データと、前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第1の乗数データおよび前記第1の被乗数データの部分積を示す部分積データとして出力する第1の部分積算出部とを備える半導体装置。
【請求項2】
前記第1の被乗数データは、下位ビットである第1の被乗数ビットと、上位ビットである第2の被乗数ビットとを有し、
前記第1のデコーダは、前記第1の乗数データを受けて、ブースのアルゴリズムに従い、補数フラグをさらに出力し、
前記半導体装置は、さらに、
前記第2の被乗数ビットが下位ビットであり、第3の被乗数ビットが上位ビットである第2の被乗数データと、前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第2の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第1の乗数データおよび前記第2の被乗数データの部分積を示す部分積データとして出力する第2の部分積算出部と、
前記第1の部分積算出部から受けた前記部分積データおよび前記第2の部分積算出部から受けた前記部分積データに対して前記補数フラグに基づいて補数処理を実行し、各前記部分積データを加算する部分積加算部を備える請求項1に記載の半導体装置。
【請求項3】
前記第1の乗数データは、最下位ビットである第1の乗数ビットと、2ビット目である第2の乗数ビットと、最上位ビットである第3の乗数ビットとを有し、
前記半導体装置は、さらに、
前記第3の乗数ビットが最下位ビットである3ビットの第2の乗数データを受けて、ブースのアルゴリズムに従い、シフトフラグ、反転フラグ、演算フラグおよび補数フラグを出力する第2のデコーダと、
前記第1の被乗数データと、前記第2のデコーダからの前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第1の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第2の乗数データおよび前記第1の被乗数データの部分積を示す部分積データとして出力する第3の部分積算出部と、
前記第2の被乗数データと、前記第2のデコーダからの前記シフトフラグ、前記反転フラグおよび前記演算フラグとを受けて、前記シフトフラグに基づいて前記第2の被乗数データの上位ビットおよび下位ビットのいずれかを選択し、前記選択したビットを前記反転フラグに基づいて反転または非反転し、前記反転または非反転されたデータおよび所定の論理レベルのデータのいずれかを前記演算フラグに基づいて選択し、前記第2の乗数データおよび前記第2の被乗数データの部分積を示す部分積データとして出力する第4の部分積算出部とを備え、
前記部分積加算部は、前記第1の部分積算出部から受けた前記部分積データおよび前記第2の部分積算出部から受けた前記部分積データに対して前記第1のデコーダから受けた前記補数フラグに基づいて補数処理を実行し、前記第3の部分積算出部から受けた前記部分積データおよび前記第4の部分積算出部から受けた前記部分積データに対して前記第2のデコーダから受けた前記補数フラグに基づいて補数処理を実行し、各前記部分積データを加算する請求項2に記載の半導体装置。
【請求項4】
第1のデータおよび第2のデータの積を算出する半導体装置であって、
前記第1のデータおよび前記第2のデータを加算し、前記加算した和データを出力する加算部と、
前記第1のデータおよび前記第2のデータを減算し、前記減算した差データを出力する減算部と、
前記加算部から受けた前記和データを、前記和データを2乗した2乗データに変換して出力する第1のテーブル部と、
前記減算部から受けた前記差データを、前記差データを2乗した2乗データに変換して出力する第2のテーブル部と、
前記第1のテーブル部から受けた前記2乗データと前記第2のテーブル部から受けた前記2乗データとを減算し、前記第1のデータおよび前記第2のデータの積として出力する出力演算部とを備える半導体装置。
【請求項5】
前記第1のテーブル部は、前記加算部から受けた前記和データを、前記和データを2で除算した結果を2乗した2乗データに変換して出力し、
前記第2のテーブル部は、前記減算部から受けた前記差データを、前記差データを2で除算した結果を2乗した2乗データに変換して出力する請求項4に記載の半導体装置。
【請求項6】
前記加算部は、前記第1のデータおよび前記第2のデータを加算し、前記加算結果から1を減算した和データを出力し、
前記減算部は、前記第2のデータから前記第1のデータを減算し、前記減算結果から1を減算した差データを出力し、
前記第1のテーブル部は、前記加算部から受けた前記和データを、前記和データを2で除算した結果を2乗した2乗データに変換して出力し、
前記第2のテーブル部は、前記減算部から受けた前記差データを、前記差データを2で除算した結果を2乗した2乗データに変換して出力し、
前記出力演算部は、前記第1のテーブル部から受けた前記2乗データと前記第2のテーブル部から受けた前記2乗データとを減算し、前記減算結果および前記第1のデータを加算したデータを前記第1のデータおよび前記第2のデータの積として出力する請求項4に記載の半導体装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2010−165179(P2010−165179A)
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願番号】特願2009−6947(P2009−6947)
【出願日】平成21年1月15日(2009.1.15)
【出願人】(504136568)国立大学法人広島大学 (924)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願日】平成21年1月15日(2009.1.15)
【出願人】(504136568)国立大学法人広島大学 (924)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】
[ Back to top ]