(57)【特許請求の範囲】
【請求項１】
被乗数を保持する被乗数保持手段と、
乗数を保持する乗数保持手段と、
演算のサイクル数を示す演算サイクル信号の変化に同期して、前記乗数保持手段に保持されている乗数を構成するビットの一部を、下位のものから順番に選択すると共に、その選択した一部のビットと前記被乗数保持手段に保持されている被乗数とから部分積を生成する第１の部分積発生回路と、
加算手段及び該加算手段の加算結果を保持する加算結果保持手段を有し、前記加算手段が前記加算結果保持手段に保持されている値に前記第１の部分積発生回路によって生成された部分積を加算すると共に、前記加算結果保持手段が前記演算サイクル信号の変化に同期して前記加算手段の加算結果を更新して保持することにより、前記第１の部分積発生回路によって生成される部分積を累積加算する部分積累積加算回路と、
を備えた乗算器において、
前記第１の部分積発生回路は、前記乗数保持手段に保持されている乗数を構成するビットのうちの最下位側の一部のビットを除く他の一部のビットを、下位のものから順番に選択して部分積を生成するように構成されており、
更に、前記演算サイクル信号が最初の演算サイクルを示す場合に、前記乗数保持手段に保持されている乗数を構成するビットのうちの最下位側の一部のビットと前記被乗数保持手段に保持されている被乗数とから部分積を生成する第２の部分積発生回路と、
前記演算サイクル信号が最初の演算サイクルを示す場合に、前記第２の部分発生回路によって生成された部分積を、前記加算結果保持手段に保持されている値に代えて、前記加算手段に被加数として供給する被加数選択回路と、
を備えていることを特徴とする乗算器。
【請求項２】
請求項１に記載の乗算器において、
前記第１の部分積発生回路及び第２の部分積発生回路は、２次のブースのアルゴリズムに基づいて部分積を生成すること、
を特徴とする乗算器。
【請求項３】
請求項２に記載の乗算器において、
前記被乗数保持手段は、
当該乗算器が行う乗算の種類を符号付き乗算と符号無し乗算との何れかに設定するための切替信号が符号付き乗算の実行を示す場合には、外部から入力される被乗数を、その最上位ビットで２ビット符号拡張して保持し、前記切替信号が符号無し乗算の実行を示す場合には、外部から入力される被乗数を、その最上位ビット側を２ビット０拡張して保持するように構成されており、
前記乗数保持手段は、
前記切替信号が符号付き乗算の実行を示す場合には、外部から入力される乗数を、その最上位ビットで２ビット符号拡張して保持し、前記切替信号が符号無し乗算の実行を示す場合には、外部から入力される乗数を、その最上位ビット側を２ビット０拡張して保持するように構成されていること、
を特徴とする乗算器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、乗算を複数の演算サイクルに分割し、各々の演算サイクルで部分積を生成すると共に、その部分積を累積加算していくことにより、全ての部分積の和である乗算結果を求める、繰り返し型の乗算器（反復乗算器）に関する。
【０００２】
【従来の技術】
従来より、ディジタル信号処理装置に用いられる乗算器の構成として、例えば電子情報通信学会編の「ディジタル信号処理ハンドブック：第２４３頁〜第２４４頁」等に記載されているように、キャリーセーブアダー方式並列乗算器や、部分積の生成に２次のブースのアルゴリズムを用いた並列乗算器、或いは、部分積の加算にワレーストリー（Wallace Tree）の方法を用いた並列乗算器などがある。
【０００３】
しかし、これらの並列乗算器では、多くの部分積発生回路と多くの加算回路が必要になるため、ハードウエアをＩＣチップ上に実現した場合（即ち、ＩＣ化した場合）に占有面積が大きくなってしまう。
このため、ＩＣチップ上での占有面積を小さくしたい場合には、乗算を複数の演算サイクルに分割して実行する繰り返し乗算器（反復乗算器）が用いられる。
【０００４】
ここで、従来の繰り返し乗算器のうち、部分積の生成に２次のブースのアルゴリズムを用いたものについて説明する。尚、本明細書において、「符号拡張」とは、データの最上位ビット側にその最上位ビットと同じビットを追加することを意味し、「０拡張」とは、データの最上位ビット側に“０”のビットを追加することを意味している。そして、「符号拡張」と「０拡張」との両方を総称して、「拡張」という。
【０００５】
まず、ブースのアルゴリズムには、２の補数表示形式の乗算（即ち、２の補数表示の２進数の乗算であって、符号付き乗算）を補正無しで実行できるという特徴があり、その中でも特に２次のブースのアルゴリズムは、部分積の数を半減させることができるため、この種の乗算器において頻繁に利用されている。
【０００６】
尚、２次のブースのアルゴリズムは、被乗数をＸとし乗数をＹとすると、図７の真理値表に示す法則を用いて部分積を生成するものである。つまり、乗数Ｙを構成するビットを、Ｙ[i+1] ，Ｙ[i] ，Ｙ[i-1] （ｉ＝０，２，４，…）というように前後１ビットが重複した連続する３ビットずつのグループに分け（図９参照）、その各グループのビットの並びに応じて、「０」，「＋Ｘ」，「−Ｘ」，「＋２Ｘ」，「−２Ｘ」のうちの何れかを表すデータを部分積とする。但し、[]内の値は、データにおける最下位ビットを０ビット目とした場合のビット位置を示している。よって、例えばＹ[7] は、乗数Ｙを構成するビットのうち、最下位ビットＹ[0] から数えて（換言すれば、最下位ビットＹ[0] を１ビット目とした場合の）８ビット目を表すこととなる。また、Ｙ[-1]は、実際には存在しないダミービットであり、“０”と見なされる。
【０００７】
そして、このような２次のブースのアルゴリズムを用いた乗算では、図７の真理値表に従って生成される部分積の各々を２ビットずつシフトして累積加算することにより、被乗数と乗数との積を得る。例として、図８に、２の補数表示形式の８ビット×８ビットの乗算例を示す。この例の場合、乗数Ｙを構成するビットが、図９に示す如く４つのグループＧ0 〜Ｇ3 に分けられ、その各グループＧ0 〜Ｇ3 に対応して４つの部分積Ｂ0 〜Ｂ3 が生成される。そして、その４つの各部分積Ｂ0 〜Ｂ3 が、図８に示す如く２ビットずつシフトして累積加算されることにより、被乗数Ｘと乗数Ｙとの積を表す２の補数表示の１５ビットのデータが得られる。
【０００８】
尚、図８では、部分積Ｂ0 〜Ｂ3 の各ビットを「○」印と「●」印で示している。また、図８における「□」印は、加算時の桁合わせに必要となる符号拡張ビットを示している。つまり、２次のブースのアルゴリズムでは、図７の如く部分積が「−２Ｘ」或いは「２Ｘ」となる場合があるため、最低限生成すべき必須の部分積としては、図８にて「●」印で示したビットから右側の９（＝８＋１）ビットであるが、加算時において全ての部分積Ｂ0 〜Ｂ3 の最上位ビットのビット位置を一致させるために、上記「□」印で示す符号拡張ビットが付加される。
【０００９】
次に、図１０は、２次のブースのアルゴリズムを用いて２の補数表示形式の８ビット×８ビットの乗算を行う従来の繰り返し乗算器Ｊ１の構成を表すブロック図であり、図１１は、その繰り返し乗算器Ｊ１の乗算動作を表す模式図である。図１０に示すように、繰り返し乗算器Ｊ１には、８ビットの被乗数Ｘと乗数Ｙが入力されると共に、演算の１サイクル目（第１演算サイクル），２サイクル目（第２演算サイクル），３サイクル目（第３演算サイクル），４サイクル目（第４演算サイクル）といった具合に演算のサイクル数を示す演算サイクル信号が制御線Ｌを介して入力される。
【００１０】
そして、この繰り返し乗算器Ｊ１は、外部から入力される８ビットの被乗数Ｘを、制御線Ｌからの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する被乗数保持回路１００と、外部から入力される８ビットの乗数Ｙを、制御線Ｌからの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する乗数保持回路１０２と、制御線Ｌからの演算サイクル信号の変化に同期して、乗数保持回路１０２に保持されている乗数Ｙを構成するビットのうちで図９に示す各グループＧ0 〜Ｇ3 の何れかの３ビットを下位のものから順番に選択して出力する乗数ビット選択回路１０４とを備えている。
【００１１】
尚、乗数ビット選択回路１０４は、演算サイクル信号が１サイクル目を示す値になると、図９に示す最下位側の第１グループＧ0 の３ビット（Ｙ[1] ，Ｙ[0] ，Ｙ[-1]：但しＹ[-1]はダミービットで“０”）を出力し、演算サイクル信号が２サイクル目を示す値になると、図９に示す第２グループＧ1 の３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）を出力し、演算サイクル信号が３サイクル目を示す値になると、図９に示す第３グループＧ2 の３ビット（Ｙ[5] ，Ｙ[4] ，Ｙ[3] ）を出力し、演算サイクル信号が４サイクル目を示す値になると、図９に示す第４グループＧ3 の３ビット（Ｙ[7] ，Ｙ[6] ，Ｙ[5] ）を出力する。
【００１２】
そして更に、この繰り返し乗算器Ｊ１は、乗数ビット選択回路１０４からの３ビットの出力と被乗数保持回路１００に保持されている８ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき９ビットの部分積を生成して出力する部分積発生回路１０６と、入力される７ビットデータを２ビット符号拡張して（つまり、データの最上位ビット側にその最上位ビットと同じビットを２ビット追加して）出力する符号拡張器１０８と、符号拡張器１０８からの９ビットデータと部分積発生回路１０６からの９ビットの部分積とを加算する加算器１１０と、加算器１１０から出力される９ビットデータの上位７ビットを演算サイクル信号の変化に同期して保持すると共に、自己が保持している７ビットデータを符号拡張器１０８に供給する中間和保持回路１１２と、加算器１１０から出力される９ビットデータの下位２ビットを演算サイクル信号の変化に同期して保持するシフトレジスタ１１４とを備えている。
【００１３】
尚、例えば、演算サイクル信号は所定のクロックの立ち上がりタイミングで値が順次変化し、中間和保持回路１１２とシフトレジスタ１１４は、演算サイクル信号の値が変化してからクロックが立ち下がったタイミング（つまり、演算サイクル信号の変化に対してクロックの半周期分ずれたタイミング）でデータの保持動作を行う。また、中間和保持回路１１２とシフトレジスタ１１４は、演算サイクル信号が１サイクル目を示す値になる直前に初期化されて、その保持内容（即ち、保持するデータのビット）が全て“０”になる。
【００１４】
このように構成された繰り返し乗算器Ｊ１は、以下のように動作する。
まず、演算の１サイクル目（即ち、演算サイクル信号が１サイクル目を示す値になった場合）には、乗数ビット選択回路１０４から、乗数保持回路１０２に保持されている乗数Ｙを構成するビットの一部として、図９に示す第１グループＧ0 の３ビット（Ｙ[1] ，Ｙ[0] ，Ｙ[-1]）が出力され、更に、部分積発生回路１０６により、図１０の▲１▼に示す如く、上記第１グループＧ0 の３ビットと被乗数保持回路１００に保持されいてる被乗数Ｘとから９ビットの第１部分積Ｂ0 が生成されて出力される。そして、図１１の上から３段目〜５段目に示すように、中間和保持回路１１２の初期値（即ち、全ビットが“０”の７ビットデータ）を符号拡張器１０８にて２ビット符号拡張した全ビットが“０”の９ビットデータと、部分積発生回路１０６からの９ビットの第１部分積Ｂ0 とが、加算器１１０によって加算され、更に、その加算器１１０の加算結果である９ビットデータのうちの上位７ビットが中間和保持回路１１２に保持される。また、加算器１１０の加算結果である９ビットデータのうちの下位２ビット（図１１における「中間和１」の段の「◎」印の２ビット）が、シフトレジスタ１１４の上位２ビット位置に保持される。
【００１５】
次に、演算の２サイクル目（即ち、演算サイクル信号が２サイクル目を示す値になった場合）には、乗数ビット選択回路１０４から、乗数保持回路１０２に保持されている乗数Ｙを構成するビットの一部として、図９に示す第２グループＧ1 の３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）が出力され、更に、部分積発生回路１０６により、図１０の▲２▼に示す如く、上記第２グループＧ1 の３ビットと被乗数保持回路１００に保持されいてる被乗数Ｘとから９ビットの第２部分積Ｂ1 が生成されて出力される。そして、図１１の上から５段目〜７段目に示すように、中間和保持回路１１２に保持されている７ビットデータを符号拡張器１０８にて２ビット（図１１における「中間和１」の段の「□」印の２ビット）符号拡張した９ビットデータと、部分積発生回路１０６からの９ビットの第２部分積Ｂ1 とが、加算器１１０によって加算され、更に、その加算器１１０の加算結果である９ビットデータのうちの上位７ビットが中間和保持回路１１２に更新して保持される。また、シフトレジスタ１１４が２ビット下位ビット側へシフト（右シフト）され、加算器１１０の加算結果である９ビットデータのうちの下位２ビット（図１１における「中間和２」の段の「◎」印の４ビットのうちの上位２ビット）が、シフトレジスタ１１４の上位２ビット位置に保持される。この結果、図１１における「中間和２」の段の「◎」印の４ビットが、シフトレジスタ１１４に保持されることとなる。
【００１６】
そして、図１１の上から７段目〜９段目及び９段目〜１１段目に示すように、演算の３サイクル目と４サイクル目も同様に実行され、その結果、被乗数Ｘと乗数Ｙとの積を表す１５ビットデータのうち、上位７ビットが中間和保持回路１１２に保持され、下位８ビット（図１１における「積」の段の「◎」印の８ビット）がシフトレジスタ１１４に保持されて、乗算が終了する。
【００１７】
一方、ブースのアルゴリズムを用いた乗算は、符号付きの２の補数表示形式の乗算（符号付き乗算）を前提とするものであるため、そのままでは符号無し乗算（即ち、絶対値表示の２進数の乗算）を行うことができない。
このため、２次のブースのアルゴリズムを用いて、符号付き乗算と符号無し乗算とを共通のハードウエアで択一的に行うためには、入力される被乗数Ｘと乗数Ｙを、以下に説明するように少なくとも１ビット拡張して取り扱う。尚、ここでは、８ビット×８ビットの乗算を行う場合を例に挙げて説明する。
【００１８】
まず、符号無し乗算を行う場合には、８ビットの被乗数Ｘと乗数Ｙの最上位ビットＸ[7] ，Ｙ[7] が符号ビットではないため、その被乗数Ｘと乗数Ｙの各々の最上位ビットＸ[7] ，Ｙ[7] よりも上位側に、正を示す“０”のビットを少なくとも１ビット追加して（即ち、被乗数Ｘと乗数Ｙの各々を少なくとも１ビット０拡張して）、被乗数Ｘと乗数Ｙを符号付き数として取り扱う。また、符号付き乗算を行う場合には、元々、被乗数Ｘと乗数Ｙの最上位ビットＸ[7] ，Ｙ[7] は符号ビットであるが、その最上位ビットＸ[7] ，Ｙ[7] よりも上位側に、更にその最上位ビットＸ[7] ，Ｙ[7] と同じ値のビットを少なくとも１ビット追加する（即ち、被乗数Ｘと乗数Ｙの各々を最上位ビットで少なくとも１ビット符号拡張する）。これは、共通のハードウェアで符号付き乗算と符号無し乗算を行うためである。
【００１９】
そして、上記のように少なくとも１ビット拡張した被乗数Ｘと乗数Ｙについて、図８と同様の手順で乗算を行えば良い。
例として、図１２に、８ビット×８ビットの符号付き乗算と符号無し乗算とを切り替えて行う場合の実行例を示す。この例の場合、「△」印で示すように、符号付き乗算を行う場合には、被乗数Ｘと乗数Ｙの各々が最上位ビットで１ビット符号拡張され、符号無し乗算を行う場合には、被乗数Ｘと乗数Ｙの各々が１ビット０拡張される。そして、１ビット拡張された９ビットの乗数Ｙを構成するビットが、図９に示した状態と同様に５つのグループに分けられ、その各グループに対応して５つの部分積Ｂ0 〜Ｂ4 が生成される。そして更に、その５つの各部分積Ｂ0 〜Ｂ4 が、２ビットずつシフトして累積加算されることにより、被乗数Ｘと乗数Ｙとの積を表す１６ビットのデータが得られる。
【００２０】
但し、この場合、１ビット拡張された乗数Ｙを構成するビットのうちの最上位側のビットのグループ（第５グループ）に対応する第５部分積Ｂ4 は、符号無し乗算の場合で且つ元の乗数Ｙの最上位ビットＹ[7] が“１”である場合にのみ「＋Ｘ」となり、それ以外の場合には、「０」となる。
【００２１】
即ち、まず、符号無し乗算の場合には、１ビット拡張した乗数Ｙの最上位ビット（Ｙ[8] ）が“０”となるが、それより上位のビット（Ｙ[9]）も“０”と見なすことができるため、１ビット拡張した乗数Ｙの３ビットずつのグループのうちで、図９における第４グループＧ3 よりも１つ上位の第５グループＧ4 （Ｙ[9] ，Ｙ[8] ，Ｙ[7] ）のビットの並びは、「０，０，０」か「０，０，１」になる。このため、第５部分積Ｂ4 は、元の乗数Ｙの最上位ビットＹ[7] が“１”である場合に「＋Ｘ」となり、上記最上位ビットＹ[7] が“０”である場合に「０」となる（図７参照）。また、符号付き乗算の場合には、１ビット拡張した乗数Ｙの上位２ビット（Ｙ[8] ，Ｙ[7] ）が、元の乗数Ｙの最上位ビットＹ[7] と同じ値になるが、それより上位のビット（Ｙ[9] ）も元の乗数Ｙの最上位ビットＹ[7] と同じ値と見なすことができる。このため、１ビット拡張した乗数Ｙの上記第５グループＧ4 （Ｙ[9] ，Ｙ[8] ，Ｙ[7] ）のビットの並びは、「０，０，０」か「１，１，１」になり、第５部分積Ｂ4 は常に「０」となる（図７参照）。よって、第５部分積Ｂ4 は、符号無し乗算の場合で且つ元の乗数Ｙの最上位ビットＹ[7] が“１”である場合にのみ「＋Ｘ」となり、それ以外の場合には「０」となるのである。
【００２２】
尚、図１２においても図８と同様に、部分積Ｂ0 〜Ｂ4 の各ビットを「○」印と「●」印で示し、また、「□」印は、加算時の桁合わせに必要となる符号拡張ビットを示している。つまり、第１部分積Ｂ0 〜第４部分積Ｂ3 については、図１２にて「●」印と「○」印で示した１０ビット（＝９＋１）が必須となり、加算時において各部分積Ｂ0 〜Ｂ3 の最上位ビットのビット位置を一致させるために、上記「□」印で示す符号拡張ビットが付加される。また、この例の場合、第５部分積Ｂ4 については、「○」印のみで示した８ビットが必須となる。
【００２３】
以上の内容を踏まえると、例えば、２次のブースのアルゴリズムを用いて８ビット×８ビットの符号付き乗算と符号無し乗算とを択一的に実行する繰り返し乗算器（以下、「符号付き／無し繰り返し乗算器」という）は、図１３のように構成され、その乗算動作は図１４のようになる。
【００２４】
即ち、まず図１３に示すように、この符号付き／無し繰り返し乗算器Ｊ２には、８ビットの被乗数Ｘと乗数Ｙが入力されると共に、演算の１サイクル目，２サイクル目，…といった具合に演算のサイクル数を示す演算サイクル信号が第１制御線Ｌ1 を介して入力される。また更に、当該乗算器Ｊ２が行う乗算の種類を符号付き乗算と符号無し乗算との何れかに設定するための切替信号が第２制御線Ｌ2 を介して入力される。
【００２５】
そして、この符号付き／無し繰り返し乗算器Ｊ２は、外部から入力される８ビットの被乗数Ｘを、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する被乗数保持回路２００と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、被乗数保持回路２００に保持されている被乗数Ｘを１ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、被乗数保持回路２００に保持されている被乗数Ｘを１ビット０拡張して出力するビット拡張器２０２と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、外部から入力される８ビットの乗数Ｙを１ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、外部から入力される８ビットの乗数Ｙを１ビット０拡張して出力するビット拡張器２０４と、そのビット拡張器２０４から出力される９ビットの乗数Ｙ（１ビット拡張後の乗数Ｙ）を、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する乗数保持回路２０６と、第１制御線Ｌ1 からの演算サイクル信号の変化に同期して、乗数保持回路２０６に保持されている９ビットの乗数Ｙを構成するビットのうちで図９に示す各グループＧ0 〜Ｇ3 の何れかの３ビットを下位のものから順番に選択して出力する乗数ビット選択回路２０８とを備えている。尚、乗数ビット選択回路２０８は、図１０の乗数ビット選択回路１０４と同様に動作する。
【００２６】
また更に、この符号付き／無し繰り返し乗算器Ｊ２は、乗数ビット選択回路２０８からの３ビットの出力とビット拡張器２０２から出力される９ビットの被乗数Ｘ（１ビット拡張後の被乗数Ｘ）とから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する部分積発生回路２１０と、第２制御線Ｌ2 からの切替信号が符号無し乗算の実行を示し且つ乗数保持回路２０６に保持されている９ビットの乗数Ｙにて最下位ビットから数えて８ビット目（即ち、外部から入力される元の乗数Ｙの最上位ビット）Ｙ[7] が“１”である場合に、第１制御線Ｌ1 からの演算サイクル信号が４サイクル目を示す値になったタイミングにて、被乗数保持回路２００に保持されている８ビットの被乗数Ｘを第５部分積Ｂ4 として出力し、それ以外の場合には、全ビットが“０”の８ビットデータを第５部分積Ｂ4 として出力する最終部分積発生回路２１２とを備えている。
【００２７】
そして更に、この符号付き／無し繰り返し乗算器Ｊ２は、入力される８ビットデータを２ビット符号拡張して出力する符号拡張器２１４と、符号拡張器２１４からの１０ビットデータと部分積発生回路２１０からの１０ビットの部分積とを加算する加算器２１６と、加算器２１６から出力される１０ビットデータの上位８ビットを演算サイクル信号の変化に同期して保持すると共に、自己が保持している８ビットデータを符号拡張器２１４に供給する中間和保持回路２１８と、加算器２１６から出力される１０ビットデータの下位２ビットを演算サイクル信号の変化に同期して保持するシフトレジスタ２２０と、加算器２１６から出力される１０ビットデータの上位８ビットと最終部分積発生回路２１２の出力とを加算する加算器２２２と、その加算器２２２から出力される８ビットデータを演算サイクル信号の変化に同期して保持する積上位ビットレジスタ２２４とを備えている。
【００２８】
尚、この符号付き／無し繰り返し乗算器Ｊ２においても、例えば、演算サイクル信号は所定のクロックの立ち上がりタイミングで値が順次変化し、中間和保持回路２１８とシフトレジスタ２２０及び積上位ビットレジスタ２２４は、演算サイクル信号の値が変化してからクロックが立ち下がったタイミングでデータの保持動作を行う。また、中間和保持回路２１８，シフトレジスタ２２０，及び積上位ビットレジスタ２２４は、演算サイクル信号が１サイクル目を示す値になる直前に初期化されて、保持するデータのビットが全て“０”になる。一方、積上位ビットレジスタ２２４は、演算サイクル信号が４サイクル目を示す値になった場合にのみデータの保持動作を行うようにしても良い。
【００２９】
このように構成された符号付き／無し繰り返し乗算器Ｊ２は、以下のように動作する。
まず、符号付き演算の場合（即ち、切替信号が符号付き乗算の実行を示す場合）には、８ビットの被乗数Ｘを１ビット符号拡張した９ビットの被乗数Ｘがビット拡張器２０２から出力されると共に、８ビットの乗数Ｙを１ビット符号拡張した９ビットの乗数Ｙが乗数保持回路２０６から出力される。また逆に、符号無し演算の場合（即ち、切替信号が符号無し乗算の実行を示す場合）には、８ビットの被乗数Ｘを１ビット０拡張した９ビットの被乗数Ｘがビット拡張器２０２から出力されると共に、８ビットの乗数Ｙを１ビット０拡張した９ビットの乗数Ｙが乗数保持回路２０６から出力される。
【００３０】
そして、演算の１サイクル目（即ち、演算サイクル信号が１サイクル目を示す値になった場合）には、乗数ビット選択回路２０８から、乗数保持回路２０６に保持されている９ビットの乗数Ｙを構成するビットの一部として、図９に示す第１グループＧ0 の３ビット（Ｙ[1] ，Ｙ[0] ，Ｙ[-1]）が出力され、更に、部分積発生回路２１０により、図１３の▲１▼に示す如く、上記第１グループＧ0 の３ビットとビット拡張器２０２から出力される９ビットの被乗数Ｘとから、１０ビットの第１部分積Ｂ0 が生成されて出力される。そして更に、図１４の上から３段目〜５段目に示すように、中間和保持回路２１８の初期値（即ち、全ビットが“０”の８ビットデータ）を符号拡張器２１４にて２ビット符号拡張した全ビットが“０”の１０ビットデータと、部分積発生回路２１０からの１０ビットの第１部分積Ｂ0 とが、加算器２１６によって加算され、更に、その加算器２１６の加算結果である１０ビットデータのうちの上位８ビットが中間和保持回路２１８に保持される。また、加算器２１６の加算結果である１０ビットデータのうちの下位２ビット（図１４における「中間和１」の段の「◎」印の２ビット）が、シフトレジスタ２２０の上位２ビット位置に保持される。
【００３１】
次に、演算の２サイクル目（即ち、演算サイクル信号が２サイクル目を示す値になった場合）には、乗数ビット選択回路２０８から、乗数保持回路２０６に保持されている９ビットの乗数Ｙを構成するビットの一部として、図９に示す第２グループＧ1 の３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）が出力され、更に、部分積発生回路２１０により、図１３の▲２▼に示す如く、上記第２グループＧ1 の３ビットとビット拡張器２０２から出力される９ビットの被乗数Ｘとから、１０ビットの第２部分積Ｂ1 が生成されて出力される。そして、図１４の上から５段目〜７段目に示すように、中間和保持回路２１８に保持されている８ビットデータを符号拡張器２１４にて２ビット（図１４における「中間和１」の段の「□」印の２ビット）符号拡張した１０ビットデータと、部分積発生回路２１０からの１０ビットの第２部分積Ｂ1 とが、加算器２１６によって加算され、更に、その加算器２１６の加算結果である１０ビットデータのうちの上位８ビットが中間和保持回路２１８に更新して保持される。また、シフトレジスタ２２０が２ビット下位ビット側へシフト（右シフト）され、加算器２１６の加算結果である１０ビットデータのうちの下位２ビット（図１４における「中間和２」の段の「◎」印の４ビットのうちの上位２ビット）が、シフトレジスタ２２０の上位２ビット位置に保持される。この結果、図１４における「中間和２」の段の「◎」印の４ビットが、シフトレジスタ２２０に保持されることとなる。
【００３２】
そして、図１４の上から７段目〜９段目及び９段目〜１１段目に示すように、演算の３サイクル目と４サイクル目も同様に実行され、その結果、図１４における「中間和４」の段の「◎」印の８ビットが、シフトレジスタ２２０に保持されることとなるが、特に演算の４サイクル目では、図１４の上から１１段目〜１３段目に示すように、加算器２１６の加算結果である１０ビットデータのうちの上位８ビット（図１４における「中間和４」の段の「○」印の８ビット）と最終部分積発生回路２１２から出力される８ビットの第５部分積Ｂ4 とが、加算器２２２によって加算され、その加算器２２２の加算結果である８ビットデータ（図１４における「積」の段の「○」印の８ビット）が積上位ビットレジスタ２２４に保持される。
【００３３】
よって、演算の４サイクル目が終了した時点においては、被乗数Ｘと乗数Ｙとの積を表す１６ビットデータのうち、上位８ビットが積上位ビットレジスタ２２４に保持され、下位８ビットがシフトレジスタ２２０に保持されることとなり、これにより乗算が終了する。
【００３４】
一方、図１５は、２次のブースのアルゴリズムを用いた８ビット×８ビットの符号付き／無し繰り返し乗算器の他の従来構成を表すブロック図であり、図１６は、図１５の符号付き／無し繰り返し乗算器Ｊ３の乗算動作を表す模式図である。
【００３５】
図１５に示すように、この符号付き／無し繰り返し乗算器Ｊ３は、外部から入力される８ビットの被乗数Ｘを、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する被乗数保持回路３００と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、被乗数保持回路３００に保持されている被乗数Ｘを２ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、被乗数保持回路３００に保持されている被乗数Ｘを２ビット０拡張して出力するビット拡張器３０２と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、外部から入力される８ビットの乗数Ｙを２ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、外部から入力される８ビットの乗数Ｙを２ビット０拡張して出力するビット拡張器３０４と、そのビット拡張器３０４から出力される１０ビットの乗数Ｙ（２ビット拡張後の乗数Ｙ）を、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する乗数保持回路３０６とを備えている。
【００３６】
そして更に、この符号付き／無し繰り返し乗算器Ｊ３は、第１制御線Ｌ1 からの演算サイクル信号の変化に同期して、乗数保持回路３０６に保持されている１０ビットの乗数Ｙを構成するビットのうちで図１７に示す各グループＧ0 〜Ｇ4 の何れかの３ビットを下位のものから順番に選択して出力する乗数ビット選択回路３０８と、その乗数ビット選択回路３０８からの３ビットの出力とビット拡張器３０２から出力される１０ビットの被乗数Ｘ（２ビット拡張後の被乗数Ｘ）とから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する部分積発生回路３１０と、図１３の符号付き／無し繰り返し乗算器Ｊ２に設けられた符号拡張器２１４，加算器２１６，中間和保持回路２１８，及びシフトレジスタ２２０と同様の、符号拡張器３１４，加算器３１６，中間和保持回路３１８，及びシフトレジスタ３２０とを備えている。尚、シフトレジスタ３２０は、１０ビットデータを格納可能なものである。
【００３７】
ここで、図１７における「△」印の２ビットは、ビット拡張器３０４によって拡張された分の乗数Ｙの上位２ビット（Ｙ[9] ，Ｙ[8] ）である。そして、乗数ビット選択回路３０８は、演算サイクル信号が１サイクル目を示す値になると、図１７に示す最下位側の第１グループＧ0 の３ビット（Ｙ[1] ，Ｙ[0] ，Ｙ[-1]：但しＹ[-1]はダミービットで“０”）を出力し、演算サイクル信号が２サイクル目を示す値になると、図１７に示す第２グループＧ1 の３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）を出力し、演算サイクル信号が３サイクル目を示す値になると、図１７に示す第３グループＧ2 の３ビット（Ｙ[5] ，Ｙ[4] ，Ｙ[3] ）を出力し、演算サイクル信号が４サイクル目を示す値になると、図１７に示す第４グループＧ3 の３ビット（Ｙ[7] ，Ｙ[6] ，Ｙ[5] ）を出力し、演算サイクル信号が５サイクル目を示す値になると、図１７に示す第５グループＧ4 の３ビット（Ｙ[9] ，Ｙ[8] ，Ｙ[7] ）を出力する。
【００３８】
このように構成された符号付き／無し繰り返し乗算器Ｊ３は、以下のように動作する。
まず、符号付き演算の場合（即ち、切替信号が符号付き乗算の実行を示す場合）には、８ビットの被乗数Ｘを２ビット符号拡張した１０ビットの被乗数Ｘがビット拡張器３０２から出力されると共に、８ビットの乗数Ｙを２ビット符号拡張した１０ビットの乗数Ｙが乗数保持回路３０６から出力される。また逆に、符号無し演算の場合（即ち、切替信号が符号無し乗算の実行を示す場合）には、８ビットの被乗数Ｘを２ビット０拡張した１０ビットの被乗数Ｘがビット拡張器３０２から出力されると共に、８ビットの乗数Ｙを２ビット０拡張した１０ビットの乗数Ｙが乗数保持回路３０６から出力される。
【００３９】
そして、演算の１サイクル目（即ち、演算サイクル信号が１サイクル目を示す値になった場合）には、乗数ビット選択回路３０８から、乗数保持回路３０６に保持されている１０ビットの乗数Ｙを構成するビットの一部として、図１７に示す第１グループＧ0 の３ビット（Ｙ[1] ，Ｙ[0] ，Ｙ[-1]）が出力され、更に、部分積発生回路３１０により、図１５の▲１▼に示す如く、上記第１グループＧ0 の３ビットとビット拡張器３０２から出力される１０ビットの被乗数Ｘとから、１０ビットの第１部分積Ｂ0 が生成されて出力される。そして更に、図１６の上から３段目〜５段目に示すように、中間和保持回路３１８の初期値（即ち、全ビットが“０”の８ビットデータ）を符号拡張器３１４にて２ビット符号拡張した全ビットが“０”の１０ビットデータと、部分積発生回路３１０からの１０ビットの第１部分積Ｂ0 とが、加算器３１６によって加算され、更に、その加算器３１６の加算結果である１０ビットデータのうちの上位８ビットが中間和保持回路３１８に保持される。また、加算器３１６の加算結果である１０ビットデータのうちの下位２ビット（図１６における「中間和１」の段の「◎」印の２ビット）が、シフトレジスタ３２０の上位２ビット位置に保持される。
【００４０】
次に、演算の２サイクル目（即ち、演算サイクル信号が２サイクル目を示す値になった場合）には、乗数ビット選択回路３０８から、乗数保持回路３０６に保持されている１０ビットの乗数Ｙを構成するビットの一部として、図１７に示す第２グループＧ1 の３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）が出力され、更に、部分積発生回路３１０により、図１５の▲２▼に示す如く、上記第２グループＧ1 の３ビットとビット拡張器３０２から出力される１０ビットの被乗数Ｘとから、１０ビットの第２部分積Ｂ1 が生成されて出力される。そして、図１６の上から５段目〜７段目に示すように、中間和保持回路３１８に保持されている８ビットデータを符号拡張器３１４にて２ビット（図１６における「中間和１」の段の「□」印の２ビット）符号拡張した１０ビットデータと、部分積発生回路３１０からの１０ビットの第２部分積Ｂ1 とが、加算器３１６によって加算され、更に、その加算器３１６の加算結果である１０ビットデータのうちの上位８ビットが中間和保持回路３１８に更新して保持される。また、シフトレジスタ３２０が２ビット下位ビット側へシフト（右シフト）され、加算器３１６の加算結果である１０ビットデータのうちの下位２ビット（図１６における「中間和２」の段の「◎」印の４ビットのうちの上位２ビット）が、シフトレジスタ３２０の上位２ビット位置に保持される。この結果、図１６における「中間和２」の段の「◎」印の４ビットが、シフトレジスタ３２０に保持されることとなる。
【００４１】
そして、図１６の上から７段目〜９段目，９段目〜１１段目，及び１１段目〜１３段目に示すように、演算の３サイクル目，４サイクル目，及び５サイクル目も同様に実行され、その結果、被乗数Ｘと乗数Ｙとの積を表す１６ビットデータのうち、上位６ビット（図１６における「積」の段の「○」印の６ビット）が中間和保持回路３１８の下位６ビット位置に保持され、下位１０ビット（図１６における「積」の段の「◎」印の１０ビット）がシフトレジスタ３２０に保持されて、乗算が終了する。
【００４２】
【発明が解決しようとする課題】
ところで、図１０，図１３，及び図１５の各々に示した従来の繰り返し乗算器Ｊ１，Ｊ２，Ｊ３では、図１１，図１４，及び図１６の上から３段目〜５段目に示したように、演算の１サイクル目において、加算器１１０，２１６，３１６は、中間和保持回路１１２，２１８，３１８の初期値（全ビットが“０”のデータ）に第１部分積Ｂ0 を加算することとなる。このため、演算の１サイクル目では、部分積の累積加算が実質的には行われず、無駄が生じている。
【００４３】
特に、符号付き乗算と符号無し乗算とを共通のハードウエアで択一的に行う構成の場合には、前述したように、入力される被乗数Ｘと乗数Ｙを少なくとも１ビット拡張（符号拡張又は０拡張）して処理することとなり、それに伴い、符号付き乗算だけを行う構成の場合と比較して部分積が１つ余分に生成される。よって、図１１と図１６との対比からも分かるように、１つ余分に生成される部分積（第５部分積Ｂ4 ）を加算するための演算サイクル（図１６の５サイクル目▲５▼）が１サイクル余分に必要となり、積を得るまでの演算速度が低下するという点で非常に不利である。
【００４４】
また、図１３に示した符号付き／無し繰り返し乗算器Ｊ２のように、１つ余分に生じる部分積（第５部分積Ｂ4 ）だけを加算するための加算器２２２を追加して設ければ、演算サイクルを１サイクル減らすことができ、延いては、符号付き乗算だけを行う構成の場合と同等の演算速度を達成することができるが、加算器は回路規模が比較的大きいため、ＩＣ化した場合のチップサイズの面において不利である。
【００４５】
本発明は、こうした問題に鑑みなされたものであり、比較的小規模な回路構成で演算速度を向上させることのできる繰り返し型の乗算器（反復乗算器）を提供することを目的としている。
【００４６】
【課題を解決するための手段、及び発明の効果】
上記目的を達成するためになされた本発明の乗算器においては、被乗数保持手段が被乗数を保持し、乗数保持手段が乗数を保持する。
【００４７】
そして、第１の部分積発生回路が、演算のサイクル数を示す演算サイクル信号の変化に同期して、乗数保持手段に保持されている乗数を構成するビットのうちの最下位側の一部のビットを除く他の一部のビットを、下位のものから順番に選択すると共に、その選択した一部のビットと被乗数保持手段に保持されている被乗数とから部分積を生成する。
【００４８】
また、第２の部分積発生回路は、演算サイクル信号が最初の演算サイクルを示す場合に、乗数保持手段に保持されている乗数を構成するビットのうちの最下位側の一部のビットと被乗数保持手段に保持されている被乗数とから、部分積を生成する。
【００４９】
そして、加算手段とその加算手段の加算結果を保持する加算結果保持手段とを有する部分積累積加算回路では、加算手段が加算結果保持手段に保持されている値に第１の部分積発生回路によって生成された部分積を加算すると共に、加算結果保持手段が演算サイクル信号の変化に同期して加算手段の加算結果を更新して保持することにより、第１の部分積発生回路によって生成される部分積を累積加算するが、特に本発明において、演算サイクル信号が最初の演算サイクルを示す場合には、被加数選択回路が、第２の部分発生回路によって生成された部分積を、加算結果保持手段に保持されている値に代えて、加算手段に被加数（即ち、第１の部分積発生回路によって生成された部分積と加算される数）として供給する。
【００５０】
このような本発明の乗算器において、演算サイクル信号が最初の演算サイクルを示す１サイクル目では、部分積累積加算回路の加算手段が、その時点での加算結果保持手段の初期値ではなく、第２の部分積発生回路によって生成された部分積（即ち、乗数の最下位側の一部のビットに対応した第１部分積）に、第１の部分積発生回路によって生成された部分積（即ち、乗数の最下位側の一部のビットより上位の一部のビットに対応した部分積）を加算することとなる。
【００５１】
そして、演算サイクル信号が２番目以降の演算サイクルを示す２サイクル目以降では、従来の乗算器と同様に、部分積累積加算回路の加算手段は、前回の演算サイクルで加算結果保持手段に保持された値に第１の部分積発生回路によって今回生成された部分積を加算することとなる。
【００５２】
よって、本発明の繰り返し型の乗算器によれば、演算の１サイクル目から、乗数の最下位側の一部のビットに対応した第１部分積とそれより上位の部分積とを加算して、従来の乗算器のような１サイクル目の無駄を無くすことができ、その結果、回路規模が比較的大きい加算器を追加することなく、積を得るまでの演算速度を向上させることができる。
【００５３】
ところで、請求項２に記載のように、第１の部分積発生回路と第２の部分積発生回路とが、２次のブースのアルゴリズムに基づいて部分積を生成するように構成すれば、乗数の１ビットずつに対応して部分積を生成する場合と比較して、乗算に必要な部分積の数を半減させることができ、積を得るまでの演算速度を向上させるのに非常に有利である。
【００５４】
一方、請求項３に記載の乗算器では、２次のブースのアルゴリズムを用いた請求項２に記載の乗算器において、被乗数保持手段は、当該乗算器が行う乗算の種類を符号付き乗算と符号無し乗算との何れかに設定するための切替信号が符号付き乗算の実行を示す場合には、外部から入力される被乗数を、その最上位ビットで２ビット符号拡張して保持し、前記切替信号が符号無し乗算の実行を示す場合には、外部から入力される被乗数を、その最上位ビット側を２ビット０拡張して保持する。そして同様に、乗数保持手段も、前記切替信号が符号付き乗算の実行を示す場合には、外部から入力される乗数を、その最上位ビットで２ビット符号拡張して保持し、前記切替信号が符号無し乗算の実行を示す場合には、外部から入力される乗数を、その最上位ビット側を２ビット０拡張して保持する。
【００５５】
そして、このような請求項３に記載の乗算器によれば、２次のブースのアルゴリズムを用いて、符号付き乗算と符号無し乗算とを共通のハードウエアで択一的に行うことができるようになる。
そして、この乗算器の場合には、入力される被乗数と乗数を２ビット拡張（符号拡張又は０拡張）して処理することとなるため、符号付き乗算だけを行う構成の場合と比較して部分積が１つ余分に生成されるが、前述したように演算の１サイクル目から部分積の累積加算を行うことができるため、加算器を特別に追加することなく、従来の符号付き乗算だけを行う乗算器の場合と同等の演算速度を達成することができる。つまり、請求項３に記載の乗算器によれば、演算速度を低下させることなく且つ比較的小規模な回路構成で、符号付き乗算と符号無し乗算とを切り替えて実行することができる。
【００５６】
【発明の実施の形態】
以下、本発明の一実施形態について、図面を用いて説明する。
まず図１は、８ビットの被乗数Ｘと乗数Ｙを入力して符号付き乗算と符号無し乗算とを択一的に行う第１実施形態の繰り返し乗算器（符号付き／無し繰り返し乗算器）Ｍ１の構成を表すブロック図であり、図２は、その繰り返し乗算器Ｍ１の乗算動作を表す模式図である。尚、本第１実施形態の繰り返し乗算器Ｍ１においても、演算の１サイクル目，２サイクル目，…といった具合に演算のサイクル数を示す演算サイクル信号が第１制御線Ｌ1 を介して入力され、また、当該乗算器Ｍ１が行う乗算の種類を符号付き乗算と符号無し乗算との何れかに設定するための切替信号が第２制御線Ｌ2 を介して入力される。
【００５７】
図１に示す如く、本第１実施形態の繰り返し乗算器Ｍ１は、図１５に示した乗算器Ｊ３と同様に、外部から入力される８ビットの被乗数Ｘを、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する被乗数保持回路１０と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、被乗数保持回路１０に保持されている被乗数Ｘを２ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、被乗数保持回路１０に保持されている被乗数Ｘを２ビット０拡張して出力するビット拡張器１２と、第２制御線Ｌ2 からの切替信号が符号付き乗算の実行を示す場合に、外部から入力される８ビットの乗数Ｙを２ビット符号拡張して出力し、逆に上記切替信号が符号無し乗算の実行を示す場合には、外部から入力される８ビットの乗数Ｙを２ビット０拡張して出力するビット拡張器１４と、そのビット拡張器１４から出力される１０ビットの乗数Ｙ（２ビット拡張後の乗数Ｙ）を、第１制御線Ｌ1 からの演算サイクル信号が１サイクル目を示す値になったタイミング（或いは、その直前のタイミング）で保持する乗数保持回路１６とを備えている。
【００５８】
また、本第１実施形態の繰り返し乗算器Ｍ１は、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちで、図３に示す如く最下位ビットＹ[0] から４ビット目Ｙ[3] までの４ビットＹ[3:0] からなる第１出力と、３ビット目Ｙ[2] から６ビット目Ｙ[5] までの４ビットＹ[5:2] からなる第２出力と、５ビット目Ｙ[4] から８ビット目Ｙ[7] までの４ビットＹ[7:4] からなる第３出力と、７ビット目Ｙ[6] から１０ビット目Ｙ[9] までの４ビットＹ[9:6] からなる第４出力とを、第１制御線Ｌ1 からの演算サイクル信号の変化に同期して、下位のものから順番に出力する乗数ビット選択回路１８を備えている。
【００５９】
尚、図３における「△」印の２ビットは、ビット拡張器１４によって拡張された分の乗数Ｙの上位２ビット（Ｙ[9] ，Ｙ[8] ）である。そして、乗数ビット選択回路１８は、演算サイクル信号が１サイクル目を示す値になると、図３に示す第１出力（Ｙ[3:0] ）を出力し、演算サイクル信号が２サイクル目を示す値になると、図３に示す第２出力（Ｙ[5:2] ）を出力し、演算サイクル信号が３サイクル目を示す値になると、図３に示す第３出力（Ｙ[7:4] ）を出力し、演算サイクル信号が４サイクル目を示す値になると、図３に示す第４出力（Ｙ[9:6] ）を出力する。
【００６０】
そして、本第１実施形態の繰り返し乗算器Ｍ１は、乗数ビット選択回路１８から出力される４ビットのうちの上位３ビットとビット拡張器１２から出力される１０ビットの被乗数Ｘ（２ビット拡張後の被乗数Ｘ）とから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する部分積発生回路２０と、乗数ビット選択回路１８から出力される４ビットのうちの下位２ビットを入力し、その下位２ビットの下位側に“０”のダミービットを付けた３ビットとビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する部分積発生回路２２とを備えている。
【００６１】
そして更に、本第１実施形態の繰り返し乗算器Ｍ１は、入力される１０ビットデータを２ビット符号拡張して出力する符号拡張器２４と、符号拡張器２４から出力される１２ビットデータのうちの上位１０ビットと部分積発生回路２０からの１０ビットの部分積とを加算する加算器２６と、加算器２６から出力される１０ビットデータを演算サイクル信号の変化に同期して保持し出力する中間和保持回路２８と、符号拡張器２４から出力される１２ビットデータのうちの下位２ビットを演算サイクル信号の変化に同期して保持するシフトレジスタ３０と、演算サイクル信号が１サイクル目を示す値の場合に、部分積発生回路２２からの１０ビットの部分積を選択して符号拡張器２４へ入力させ、それ以外の場合には、中間和保持回路２８からの１０ビットデータを選択して符号拡張器２４へ入力させる被加数選択回路３２とを備えている。
【００６２】
尚、シフトレジスタ３０は、８ビットデータを格納可能なものである。また、本第１実施形態の繰り返し乗算器Ｍ１においても、例えば、演算サイクル信号は所定のクロックの立ち上がりタイミングで値が順次変化し、中間和保持回路２８とシフトレジスタ３０は、演算サイクル信号の値が変化してからクロックが立ち下がったタイミング（つまり、演算サイクル信号の変化に対してクロックの半周期分ずれたタイミング）でデータの保持動作を行う。
【００６３】
このように構成された本第１実施形態の繰り返し乗算器Ｍ１は、以下のように動作する。
まず、符号付き演算を行う場合（即ち、切替信号が符号付き乗算の実行を示す場合）には、少なくとも演算サイクル信号が１サイクル目〜４サイクル目を示す値になっている演算実行中の間、８ビットの被乗数Ｘを２ビット符号拡張した１０ビットの被乗数Ｘがビット拡張器１２から継続して出力されると共に、８ビットの乗数Ｙを２ビット符号拡張した１０ビットの乗数Ｙが乗数保持回路１６から継続して出力される。また逆に、符号無し演算を行う場合（即ち、切替信号が符号無し乗算の実行を示す場合）には、少なくとも演算サイクル信号が１サイクル目〜４サイクル目を示す値になっている演算実行中の間、８ビットの被乗数Ｘを２ビット０拡張した１０ビットの被乗数Ｘがビット拡張器１２から継続して出力されると共に、８ビットの乗数Ｙを２ビット０拡張した１０ビットの乗数Ｙが乗数保持回路１６から継続して出力される。
【００６４】
そして、演算の１サイクル目（即ち、演算サイクル信号が最初の１サイクル目を示す値になった場合）には、乗数ビット選択回路１８から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図３に示す第１出力の４ビットＹ[3:0] （Ｙ[3] ，Ｙ[2] ，Ｙ[1] ，Ｙ[0] ）が出力され、部分積発生回路２２が、乗数ビット選択回路１８からの４ビットＹ[3:0] のうちの下位２ビット（Ｙ[1] ，Ｙ[0] ）の下位側に“０”のダミービットＹ[-0]を付けた３ビットと、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第１部分積Ｂ0 を生成して出力する。また、部分積発生回路２０が、乗数ビット選択回路１８からの４ビットＹ[3:0] のうちの上位３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第２部分積Ｂ1 を生成して出力する。
【００６５】
そして更に、演算の１サイクル目では、被加数選択回路３２により、部分積発生回路２２からの第１部分積Ｂ0 が選択されて符号拡張器２４へ入力される。
このため、図２の上から３段目〜５段目に示すように、部分積発生回路２２からの１０ビットの第１部分積Ｂ0 が符号拡張器２４によって２ビット（図２における「Ｂ0 」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路２０からの１０ビットの第２部分積Ｂ1 とが、加算器２６によって加算され、更に、その加算器２６の加算結果である１０ビットデータが中間和保持回路２８に保持される。また、符号拡張器２４の出力のうちの下位２ビットである第１部分積Ｂ0 の下位２ビット（図２における「Ｂ0 」の段の「☆」印の２ビットであって、「中間和１」の段の「◎」印の２ビット）が、シフトレジスタ３０の上位２ビット位置に保持される。
【００６６】
次に、演算の２サイクル目（即ち、演算サイクル信号が２サイクル目を示す値になった場合）では、被加数選択回路３２により、中間和保持回路２８からの１０ビットデータ（つまり、１サイクル目で加算器２６から出力された１０ビットデータ）が選択されて符号拡張器２４へ入力される。
【００６７】
また、乗数ビット選択回路１８から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図３に示す第２出力の４ビットＹ[5:2] （Ｙ[5] ，Ｙ[4] ，Ｙ[3] ，Ｙ[2] ）が出力され、部分積発生回路２０が、乗数ビット選択回路１８からの４ビットＹ[5:2] のうちの上位３ビット（Ｙ[5] ，Ｙ[4] ，Ｙ[3] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第３部分積Ｂ2 を生成して出力する。
【００６８】
このため、演算の２サイクル目では、図２の上から５段目〜７段目に示すように、中間和保持回路２８に保持されている１０ビットデータが符号拡張器２４によって２ビット（図２における「中間和１」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路２０からの１０ビットの第３部分積Ｂ2 とが、加算器２６によって加算され、更に、その加算器２６の加算結果である１０ビットデータが中間和保持回路２８に更新して保持される。また、シフトレジスタ３０が２ビット下位ビット側へシフト（右シフト）され、符号拡張器２４の出力の下位２ビットであって、１サイクル目で加算器２６から出力された１０ビットデータの下位２ビット（図２における「中間和１」の段の「☆」印の２ビットであって、「中間和２」の段の「◎」印の４ビットのうちの上位２ビット）が、シフトレジスタ３０の上位２ビット位置に保持される。この結果、図２における「中間和２」の段の「◎」印の４ビットが、シフトレジスタ３０の上位４ビット位置に保持されることとなる。
【００６９】
次に、演算の３サイクル目（即ち、演算サイクル信号が３サイクル目を示す値になった場合）においても、被加数選択回路３２により、中間和保持回路２８からの１０ビットデータ（つまり、２サイクル目で加算器２６から出力された１０ビットデータ）が選択されて符号拡張器２４へ入力される。
【００７０】
また、演算の３サイクル目では、乗数ビット選択回路１８から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図３に示す第３出力の４ビットＹ[7:4] （Ｙ[7] ，Ｙ[6] ，Ｙ[5] ，Ｙ[4] ）が出力され、部分積発生回路２０が、乗数ビット選択回路１８からの４ビットＹ[7:4] のうちの上位３ビット（Ｙ[7] ，Ｙ[6] ，Ｙ[5] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第４部分積Ｂ3 を生成して出力する。
【００７１】
このため、演算の３サイクル目では、図２の上から７段目〜９段目に示すように、中間和保持回路２８に保持されている１０ビットデータが符号拡張器２４によって２ビット（図２における「中間和２」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路２０からの１０ビットの第４部分積Ｂ3 とが、加算器２６によって加算され、更に、その加算器２６の加算結果である１０ビットデータが中間和保持回路２８に更新して保持される。また、シフトレジスタ３０が２ビット下位ビット側へシフト（右シフト）され、符号拡張器２４の出力の下位２ビットであって、２サイクル目で加算器２６から出力された１０ビットデータの下位２ビット（図２における「中間和２」の段の「☆」印の２ビットであって、「中間和３」の段の「◎」印の６ビットのうちの上位２ビット）が、シフトレジスタ３０の上位２ビット位置に保持される。この結果、図２における「中間和３」の段の「◎」印の６ビットが、シフトレジスタ３０の上位６ビット位置に保持されることとなる。
【００７２】
次に、演算の４サイクル目（即ち、演算サイクル信号が４サイクル目を示す値になった場合）においても、被加数選択回路３２により、中間和保持回路２８からの１０ビットデータ（つまり、３サイクル目で加算器２６から出力された１０ビットデータ）が選択されて符号拡張器２４へ入力される。
【００７３】
また、演算の４サイクル目では、乗数ビット選択回路１８から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図３に示す第４出力の４ビットＹ[9:6] （Ｙ[9] ，Ｙ[8] ，Ｙ[7] ，Ｙ[6] ）が出力され、部分積発生回路２０が、乗数ビット選択回路１８からの４ビットＹ[9:6] のうちの上位３ビット（Ｙ[9] ，Ｙ[8] ，Ｙ[7] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第５部分積Ｂ4 を生成して出力する。尚、前述したように、Ｙ[9] とＹ[8] は、ビット拡張器１４によって拡張された分の乗数Ｙの上位２ビットであり、図３においては「△」印で示されている。
【００７４】
このため、演算の４サイクル目では、図２の上から９段目〜１１段目に示すように、中間和保持回路２８に保持されている１０ビットデータが符号拡張器２４によって２ビット（図２における「中間和３」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路２０からの１０ビットの第５部分積Ｂ4 とが、加算器２６によって加算され、更に、その加算器２６の加算結果である１０ビットデータが中間和保持回路２８に更新して保持される。また、シフトレジスタ３０が２ビット下位ビット側へシフト（右シフト）され、符号拡張器２４の出力の下位２ビットであって、３サイクル目で加算器２６から出力された１０ビットデータの下位２ビット（図２における「中間和３」の段の「☆」印の２ビットであって、「積」の段の「◎」印の８ビットのうちの上位２ビット）が、シフトレジスタ３０の上位２ビット位置に保持される。
【００７５】
この結果、演算の４サイクル目が終了した時点においては、被乗数Ｘと乗数Ｙとの積を表す１６ビットデータのうちの下位８ビット（図２における「積」の段の「◎」印の８ビット）が、シフトレジスタ３０に保持され、上記積を表す１６ビットデータのうちの上位８ビット（図２における「積」の段の「○」印の８ビット）が、中間和保持回路２８の下位８ビット位置に保持されることとなる。そして、この時点で乗算が終了する。
【００７６】
尚、本第１実施形態では、被乗数保持回路１０とビット拡張器１２が、被乗数保持手段に相当し、ビット拡張器１４と乗数保持回路１６が、乗数保持手段に相当している。また、乗数ビット選択回路１８と部分積発生回路２０が、第１の部分積発生回路に相当し、乗数ビット選択回路１８と部分積発生回路２２が、第２の部分積発生回路に相当している。そして、符号拡張器２４，加算器２６，中間和保持回路２８，及びシフトレジスタ３０が、部分積累積加算回路に相当しており、その中で、符号拡張器２４と加算器２６が、加算手段に相当し、中間和保持回路２８とシフトレジスタ３０が、加算結果保持手段に相当している。
【００７７】
以上のような本第１実施形態の繰り返し乗算器Ｍ１では、各演算サイクル毎に、乗数ビット選択回路１８及び部分積発生回路２０の動作によって、部分積が乗数Ｙの下位ビットに対応するものの順に生成されると共に、その時点で中間和保持回路２８及びシフトレジスタ３０に保持されている値（中間和）に上記部分積発生回路２０で生成された部分積が、符号拡張器２４及び加算器２６の動作によって加算され、その加算結果が中間和保持回路２８及びシフトレジスタ３０に更新して保持されることにより、部分積の累積加算が行われる。
【００７８】
ここで特に、本第１実施形態の繰り返し乗算器Ｍ１においては、乗数ビット選択回路１８及び部分積発生回路２０によって、第１部分積Ｂ0 以外の他の部分積Ｂ1 〜Ｂ4 を下位のものから順に生成するようにし、１サイクル目では、乗数ビット選択回路１８及び部分積発生回路２２によって、第１部分積Ｂ0 を生成するようにしている。そして、被加数選択回路３２により、１サイクル目のみ、符号拡張器２４へ中間和保持回路２８の出力ではなく、部分積発生回路２２からの第１部分積Ｂ0 を供給するようにしている。
【００７９】
このため、演算の１サイクル目では、符号拡張器２４及び加算器２６により、部分積発生回路２２からの第１部分積Ｂ0 に部分積発生回路２０からの第２部分積Ｂ1 が加算され、２サイクル以降では、従来の乗算器と同様に、符号拡張器２４，加算器２６，中間和保持回路２８，及びシフトレジスタ３０の動作により、部分積発生回路２０によって順次生成される部分積の累積加算が行われることとなる。
【００８０】
よって、本第１実施形態の繰り返し乗算器Ｍ１によれば、図２と前述した図１６との対比からも明らかなように、演算の１サイクル目から、第１部分積Ｂ0 と第２部分積Ｂ1 とを加算して、従来の乗算器のような１サイクル目の無駄を無くすことができ、その結果、回路規模が比較的大きい加算器を追加することなく、積を得るまでの演算速度を向上させることができる。
【００８１】
特に、本第１実施形態の繰り返し乗算器Ｍ１では、符号付き乗算と符号無し乗算とを択一的に実行するために、入力される被乗数Ｘと乗数Ｙを２ビット拡張（符号拡張又は０拡張）して処理するため、符号付き乗算だけを行う構成の場合と比較して第５部分積Ｂ4 が１つ余分に生成されるが、演算の１サイクル目から部分積の累積加算を行うことができるため、図１３に示した従来の乗算器Ｊ２のように加算器を特別に追加することなく、従来の符号付き乗算だけを行う乗算器の場合と同等の演算速度を達成することができる。具体的に説明すると、図１５に示した従来の符号付き／無し繰り返し乗算器Ｊ３では、積を得るまでに５サイクルを要するが、本第１実施形態の繰り返し乗算器Ｍ１では、４サイクルで積を得ることができ、これは、符号付き乗算だけを行う図１０に示した従来の繰り返し乗算器Ｊ１と同じ演算速度となる。
【００８２】
このように、本第１実施形態の繰り返し乗算器Ｍ１によれば、演算速度を低下させることなく且つ比較的小規模な回路構成で、符号付き乗算と符号無し乗算とを切り替えて実行することができる。
次に、第２実施形態について、図４〜図６を用いて説明する。
【００８３】
まず図４は、８ビットの被乗数Ｘと乗数Ｙを入力して符号付き乗算と符号無し乗算とを択一的に行う第２実施形態の繰り返し乗算器（符号付き／無し繰り返し乗算器）Ｍ２の構成を表すブロック図であり、図５は、その繰り返し乗算器Ｍ２の乗算動作を表す模式図である。尚、図４において、第１実施形態の繰り返し乗算器Ｍ１と同様の構成要素については、同一の符号を付しているため、詳細な説明は省略する。
【００８４】
図４に示すように、本第２実施形態の繰り返し乗算器Ｍ２は、第１実施形態の乗算器Ｍ１と比較して、下記の（１）〜（４）の点で異なっている。
（１）乗数ビット選択回路１８に代えて設けられた乗数ビット選択回路３４は、乗数保持回路１６に保持されている２ビット拡張後の１０ビットの乗数Ｙを構成するビットのうちで、図６に示す如く最下位ビットＹ[0] から６ビット目Ｙ[5] までの６ビットＹ[5:0] からなる第１出力と、５ビット目Ｙ[4] から１０ビット目Ｙ[9] までの６ビットＹ[9:4] からなる第２出力とを、第１制御線Ｌ1 からの演算サイクル信号の変化に同期して、下位のものから順番に出力する。
【００８５】
つまり、本第２実施形態の乗数ビット選択回路３４は、演算サイクル信号が１サイクル目を示す値になると、図６に示す第１出力（Ｙ[5:0] ）を出力し、演算サイクル信号が２サイクル目を示す値になると、図６に示す第２出力（Ｙ[9:4] ）を出力する。尚、図６における「△」印の２ビットは、図３の場合と同様に、ビット拡張器１４によって拡張された分の乗数Ｙの上位２ビット（Ｙ[9] ，Ｙ[8] ）である。
【００８６】
（２）部分積発生回路２０に代えて、２つの部分積発生回路３６，３８が設けられている。
そして、一方の部分積発生回路３６は、乗数ビット選択回路３４から出力される６ビットのうちの下位２ビット目から４ビット目までの３ビットと、ビット拡張器１２から出力される１０ビットの被乗数Ｘ（２ビット拡張後の被乗数Ｘ）とから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する。
【００８７】
また、他方の部分積発生回路３８は、第１実施形態の部分積発生回路２０と同様に、乗数ビット選択回路３４から出力される６ビットのうちの上位３ビットと、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する。
【００８８】
尚、本第２実施形態においても、部分積発生回路２２は、乗数ビット選択回路３４から出力される６ビットのうちの下位２ビットを入力し、その下位２ビットの下位側に“０”のダミービットを付けた３ビットとビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの部分積を生成して出力する。
【００８９】
（３）加算器２６と中間和保持回路２８との間に、符号拡張器４０と加算器４２が追加して設けられている。
そして、１段目の加算器２６が、符号拡張器２４から出力される１２ビットデータのうちの上位１０ビットと部分積発生回路３６からの１０ビットの部分積とを加算し、符号拡張器４０が、加算器２６から出力される１０ビットデータを２ビット符号拡張して出力する。そして更に、２段目の加算器４２が、符号拡張器４０から出力される１２ビットデータのうちの上位１０ビットと部分積発生回路３８からの１０ビットの部分積とを加算し、その加算器４２から出力される１０ビットデータが中間和保持回路２８に入力される。
【００９０】
（４）シフトレジスタ３０に代えて設けられたシフトレジスタ４４は、符号拡張器２４から出力される１２ビットデータのうちの下位２ビットと、符号拡張器４０から出力される１２ビットデータのうちの下位２ビットとを、演算サイクル信号の変化に同期して保持する。
【００９１】
このように構成された本第２実施形態の繰り返し乗算器Ｍ２は、以下のように動作する。
まず、符号付き演算を行う場合（即ち、切替信号が符号付き乗算の実行を示す場合）には、少なくとも演算サイクル信号が１サイクル目〜２サイクル目を示す値になっている演算実行中の間、８ビットの被乗数Ｘを２ビット符号拡張した１０ビットの被乗数Ｘがビット拡張器１２から継続して出力されると共に、８ビットの乗数Ｙを２ビット符号拡張した１０ビットの乗数Ｙが乗数保持回路１６から継続して出力される。また逆に、符号無し演算を行う場合（即ち、切替信号が符号無し乗算の実行を示す場合）には、少なくとも演算サイクル信号が１サイクル目〜２サイクル目を示す値になっている演算実行中の間、８ビットの被乗数Ｘを２ビット０拡張した１０ビットの被乗数Ｘがビット拡張器１２から継続して出力されると共に、８ビットの乗数Ｙを２ビット０拡張した１０ビットの乗数Ｙが乗数保持回路１６から継続して出力される。
【００９２】
そして、演算の１サイクル目（即ち、演算サイクル信号が最初の１サイクル目を示す値になった場合）には、乗数ビット選択回路３４から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図６に示す第１出力の６ビットＹ[5:0] （Ｙ[5] ，Ｙ[4] ，Ｙ[3] ，Ｙ[2] ，Ｙ[1] ，Ｙ[0] ）が出力され、部分積発生回路２２が、乗数ビット選択回路３４からの６ビットＹ[5:0] のうちの下位２ビット（Ｙ[1] ，Ｙ[0] ）の下位側に“０”のダミービットＹ[-0]を付けた３ビットと、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第１部分積Ｂ0 を生成して出力する。また、部分積発生回路３６が、乗数ビット選択回路３４からの６ビットＹ[5:0] のうちの下位２ビット目から４ビット目までの３ビット（Ｙ[3] ，Ｙ[2] ，Ｙ[1] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第２部分積Ｂ1 を生成して出力する。また更に、部分積発生回路３８が、乗数ビット選択回路３４からの６ビットＹ[5:0] のうちの上位３ビット（Ｙ[5] ，Ｙ[4] ，Ｙ[3] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第３部分積Ｂ2 を生成して出力する。
【００９３】
そして更に、演算の１サイクル目では、被加数選択回路３２により、部分積発生回路２２からの第１部分積Ｂ0 が選択されて符号拡張器２４へ入力される。
このため、演算の１サイクル目では、まず図５の上から３段目〜５段目に示すように、部分積発生回路２２からの１０ビットの第１部分積Ｂ0 が符号拡張器２４によって２ビット（図５における「Ｂ0 」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路３６からの１０ビットの第２部分積Ｂ1 とが、加算器２６によって加算される。また、符号拡張器２４の出力の下位２ビットである第１部分積Ｂ0 の下位２ビット（図５における「Ｂ0 」の段の「☆」印の２ビットであって、「中間和１」の段の「◎」印の４ビットのうちの下位２ビット）が、シフトレジスタ４４の上位から３，４ビット目の位置に保持される。
【００９４】
そして更に、演算の１サイクル目では、図５の上から５段目〜７段目に示すように、加算器２６の加算結果である１０ビットデータが符号拡張器４０によって２ビット（図５における「１段目出力１」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路３８からの１０ビットの第３部分積Ｂ2 とが、加算器４２によって加算され、更に、その加算器４２の加算結果である１０ビットデータが中間和保持回路２８に保持される。また、符号拡張器４０の出力の下位２ビット（図５における「１段目出力１」の段の「☆」印の２ビットであって、「中間和１」の段の「◎」印の４ビットのうちの上位２ビット）が、シフトレジスタ４４の上位２ビット位置に保持される。よって、図５における「中間和１」の段の「◎」印の４ビットが、シフトレジスタ４４の上位４ビット位置に保持されることとなる。
【００９５】
次に、演算の２サイクル目（即ち、演算サイクル信号が２サイクル目を示す値になった場合）では、被加数選択回路３２により、中間和保持回路２８からの１０ビットデータ（つまり、１サイクル目で加算器４２から出力された１０ビットデータ）が選択されて符号拡張器２４へ入力される。
【００９６】
また、乗数ビット選択回路３４から、乗数保持回路１６に保持されている１０ビットの乗数Ｙを構成するビットのうちの、図６に示す第２出力の６ビットＹ[9:4] （Ｙ[9] ，Ｙ[8] ，Ｙ[7] ，Ｙ[6] ，Ｙ[5] ，Ｙ[4] ）が出力され、部分積発生回路３６が、乗数ビット選択回路３４からの６ビットＹ[9:4] のうちの下位２ビット目から４ビット目までの３ビット（Ｙ[7] ，Ｙ[6] ，Ｙ[5] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第４部分積Ｂ3 を生成して出力する。そして更に、部分積発生回路３８が、乗数ビット選択回路３４からの６ビットＹ[9:4] のうちの上位３ビット（Ｙ[9] ，Ｙ[8] ，Ｙ[7] ）と、ビット拡張器１２から出力される１０ビットの被乗数Ｘとから、２次のブースのアルゴリズムに基づき１０ビットの第５部分積Ｂ4 を生成して出力する。尚、Ｙ[9] とＹ[8] は、図６において「△」印で示されている。
【００９７】
このため、演算の２サイクル目では、まず図５の上から７段目〜９段目に示すように、中間和保持回路２８に保持されている１０ビットデータが符号拡張器２４によって２ビット（図５における「中間和１」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路３６からの１０ビットの第４部分積Ｂ3 とが、加算器２６によって加算される。また、シフトレジスタ４４が４ビット下位ビット側へシフト（右シフト）され、符号拡張器２４の出力の下位２ビットであって、１サイクル目で加算器４２から出力された１０ビットデータの下位２ビット（図５における「中間和１」の段の「☆」印の２ビットであって、「積」の段の「◎」印の８ビットのうちの上位から３，４ビット）が、シフトレジスタ４４の上位から３，４ビット目の位置に保持される。
【００９８】
そして更に、演算の２サイクル目では、図５の上から９段目〜１１段目に示すように、加算器２６の加算結果である１０ビットデータが符号拡張器４０によって２ビット（図５における「１段目出力２」の段の「□」印の２ビット）符号拡張されると共に、その符号拡張後の上位１０ビットと部分積発生回路３８からの１０ビットの第５部分積Ｂ4 とが、加算器４２によって加算され、更に、その加算器４２の加算結果である１０ビットデータが中間和保持回路２８に保持される。また、符号拡張器４０の出力の下位２ビット（図５における「１段目出力２」の段の「☆」印の２ビットであって、「積」の段の「◎」印の８ビットのうちの上位２ビット）が、シフトレジスタ４４の上位２ビット位置に保持される。
【００９９】
この結果、演算の２サイクル目が終了した時点においては、被乗数Ｘと乗数Ｙとの積を表す１６ビットデータのうちの下位８ビット（図５における「積」の段の「◎」印の８ビット）が、シフトレジスタ４４に保持され、上記積を表す１６ビットデータのうちの上位８ビット（図５における「積」の段の「○」印の８ビット）が、中間和保持回路２８の下位８ビット位置に保持されることとなる。そして、この時点で乗算が終了する。
【０１００】
尚、本第２実施形態においても、被乗数保持回路１０とビット拡張器１２が、被乗数保持手段に相当し、ビット拡張器１４と乗数保持回路１６が、乗数保持手段に相当している。また、乗数ビット選択回路３４と２つの部分積発生回路３６，３８が、第１の部分積発生回路に相当し、乗数ビット選択回路３４と部分積発生回路２２が、第２の部分積発生回路に相当している。そして、符号拡張器２４，加算器２６，符号拡張器４０，加算器４２，中間和保持回路２８，及びシフトレジスタ４４が、部分積累積加算回路に相当しており、その中で、符号拡張器２４，４０と加算器２６，４２が、加算手段に相当し、中間和保持回路２８とシフトレジスタ４４が、加算結果保持手段に相当している。
【０１０１】
以上詳述したように、本第２実施形態の繰り返し乗算器Ｍ２では、２つの部分積発生回路３６，３８によって各演算サイクル毎に部分積を２つずつ生成し、その２つの部分積を１段目の符号拡張器２４及び加算器２６と２段目の符号拡張器４０及び加算器４２とによって一度に（１サイクル中に）加算するようにしている。このため、第１実施形態の繰り返し乗算器Ｍ１と比較して、２つの加算器２６，４２が必要となるものの、２サイクルで乗算を終了することができ、演算速度が２倍になる。
【０１０２】
そして特に、本第２実施形態の繰り返し乗算器Ｍ２においても、演算の１サイクル目では、被加数選択回路３２により、１段目の符号拡張器２４へは、中間和保持回路２８の出力に代えて、部分積発生回路２２からの第１部分積Ｂ0 を供給するようにしている。このため、本第２実施形態の繰り返し乗算器Ｍ２によっても、演算の１サイクル目から、第１部分積Ｂ0 とそれより上位の第２部分積Ｂ1 及び第３部分積Ｂ2 とを加算することができ、その結果、積を得るまでの演算速度を向上させることができる。
【０１０３】
つまり、例えば図１５に示した従来の繰り返し乗算器Ｊ３において、本第２実施形態の様に、各演算サイクル毎に部分積を２つずつ生成して加算するように構成しても、部分積の総数（＝５）が、１サイクル毎に加算していく部分積の数（＝２）で割り切れず１余るため、積を得るまでに３サイクル必要となり、符号拡張器及び加算器が１段増加される割には十分な効果を得ることができない。これに対して、本第２実施形態の繰り返し乗算器Ｍ２によれば、積を得るのに必要な演算サイクル数を非常に効率良く減少させることができるのである。
【０１０４】
以上、本発明の一実施形態について説明したが、本発明は、前述した各実施形態に限定されるものではなく、種々の形態を採り得ることは言うまでもない。
例えば、第１実施形態の繰り返し乗算器Ｍ１において、被乗数保持回路１０とビット拡張器１２との接続順序、或いは、ビット拡張器１４と乗数保持回路１６との接続順序は、入れ替えても良い。つまり、それらの接続順序を入れ替えたとしても、被乗数保持回路１０及びビット拡張器１２により、８ビットの被乗数Ｘが切替信号に従い２ビット符号拡張又は０拡張されて保持されることとなり、また、ビット拡張器１４及び乗数保持回路１６により、８ビットの乗数Ｙが切替信号に従い２ビット符号拡張又は０拡張されて保持されることとなるからである。そして、このことは、第２実施形態の繰り返し乗算器Ｍ２についても同様である。
【０１０５】
また、上記各実施形態の繰り返し乗算器Ｍ１，Ｍ２では、演算サイクル信号として、各サイクル毎に値が変化する信号を用いたが、これに限るものではない。
例えば、各サイクル毎に立ち上がる（或いは立ち下がる）クロック信号と初期化信号とを演算サイクル信号として用い、被乗数保持回路１０、乗数保持回路１６、乗数ビット選択回路１８，３４、及び被加数選択回路３２の各々は、初期化信号を受けてから上記クロック信号が立ち上がった（或いは立ち下がった）回数により、演算のサイクル数を把握するように構成することができる。
【０１０６】
一方、上記各実施形態の繰り返し乗算器Ｍ１，Ｍ２では、２次のブースのアルゴリズムを用いているため、生成すべき部分積の数を減らすことができるが、部分積は、例えば乗数Ｙの１ビットずつに対応して生成する等、２次のブースのアルゴリズム以外によって生成するように構成しても良い。
【０１０７】
また、上記各実施形態の繰り返し乗算器Ｍ１，Ｍ２は、符号付き乗算と符号無し乗算とを共通のハードウエアで択一的に実行するものであったが、本発明は、符号付き乗算のみを行う乗算器、或いは、符号無し乗算のみを行う乗算器についても、全く同様に適用することができる。
【０１０８】
例えば、第１実施形態の繰り返し乗算器Ｍ１において、２つのビット拡張器１２，１４を削除すれば、符号付き乗算のみを行う繰り返し乗算器が得られる。そして、このように構成した場合には、図１０に示した従来の繰り返し乗算器Ｊ１と比較して、積を得るのに必要なサイクル数を４サイクルから３サイクルへと１つ減らすことができる。
【０１０９】
また更に、上記各実施形態の繰り返し乗算器Ｍ１，Ｍ２は、８ビットの被乗数Ｘと乗数Ｙを入力して８ビット×８ビットの乗算を行うものであったが、本発明は、他のビット長の乗算を行う繰り返し乗算器に対しても、全く同様に適用することができる。
【図面の簡単な説明】
【図１】  第１実施形態の繰り返し乗算器の構成を表すブロック図である。
【図２】  図１の繰り返し乗算器の乗算動作を表す模式図である。
【図３】  図１の繰り返し乗算器における乗数ビット選択回路の作用を説明する説明図である。
【図４】  第２実施形態の繰り返し乗算器の構成を表すブロック図である。
【図５】  図４の繰り返し乗算器の乗算動作を表す模式図である。
【図６】  図４の繰り返し乗算器における乗数ビット選択回路の作用を説明する説明図である。
【図７】  ２次のブースのアルゴリズムを説明する真理値表である。
【図８】  ２次のブースのアルゴリズムを用いた２の補数表示形式の８ビット×８ビットの乗算を説明する説明図である。
【図９】  ２次のブースのアルゴリズムにおける乗数のビットのグループ分けを説明する説明図である。
【図１０】  ２次のブースのアルゴリズムを用いて２の補数表示形式の８ビット×８ビットの乗算を行う従来の繰り返し乗算器の構成を表すブロック図である。
【図１１】  図１０の繰り返し乗算器の乗算動作を表す模式図である。
【図１２】  ２次のブースのアルゴリズムを用いて８ビット×８ビットの符号付き乗算と符号無し乗算とを切り替えて行う場合の実行例を説明する説明図である。
【図１３】  ２次のブースのアルゴリズムを用いて８ビット×８ビットの符号付き乗算と符号無し乗算とを実行する従来の繰り返し乗算器を表すブロック図である。
【図１４】  図１３の繰り返し乗算器の乗算動作を表す模式図である。
【図１５】  ２次のブースのアルゴリズムを用いて８ビット×８ビットの符号付き乗算と符号無し乗算とを実行する従来の他の繰り返し乗算器を表すブロック図である。
【図１６】  図１５の繰り返し乗算器の乗算動作を表す模式図である。
【図１７】  図１５の繰り返し乗算器における乗数ビット選択回路の作用を説明する説明図である。
【符号の説明】
Ｍ１，Ｍ２…繰り返し乗算器    Ｌ1 …第１制御線    Ｌ2 …第２制御線
１０…被乗数保持回路    １２，１４…ビット拡張器    １６…乗数保持回路
１８，３４…乗数ビット選択回路
２０，２２，３６，３８…部分積発生回路    ２４，４０…符号拡張器
２６，４２…加算器    ２８…中間和保持回路
３０，４４…シフトレジスタ    ３２…被加数選択回路
【図１】
0003855491.tif 000002
【図２】
0003855491.tif 000003
【図３】
0003855491.tif 000004
【図４】
0003855491.tif 000005
【図５】
0003855491.tif 000006
【図６】
0003855491.tif 000007
【図７】
0003855491.tif 000008
【図８】
0003855491.tif 000009
【図９】
0003855491.tif 000010
【図１０】
0003855491.tif 000011
【図１１】
0003855491.tif 000012
【図１２】
0003855491.tif 000013
【図１３】
0003855491.tif 000014
【図１４】
0003855491.tif 000015
【図１５】
0003855491.tif 000016
【図１６】
0003855491.tif 000017
【図１７】
0003855491.tif 000018