(57)【特許請求の範囲】
【請求項１】
ビット幅がｍ×ｎ（ｍ≧２，ｎ≧２の整数）ビットであり２の補数形式で表現された符号付き整数からなる被乗数データ及び乗数データの積を求める乗算装置であって、
ビット幅がｎである一対の入力データが、いずれも２の補数形式で表現された符号付き整数である場合、いずれも絶対値表現された符号無し整数である場合、或いは一方が符号付き整数であり他方が符号無し整数である場合のいずれについても、該一対の入力データの積を算出可能な乗算手段と、
前記被乗数データ及び乗数データをそれぞれビット幅がｎであるｍ個のブロックに分割して、前記被乗数データ及び乗数データからそれぞれ一つずつ選択してなるｍ×ｍ組のブロック対を設定し、該ブロック対を前記入力データとして前記乗算手段に順次供給する入力データ供給手段と、
該入力データ供給手段が、前記入力データとして前記被乗数データ又は乗数データの最上位ビットを含むブロックを供給した場合に符号付き整数であることを示し、それ以外のブロックを供給した場合に符号無し整数であることを示す制御データを、前記入力データのそれぞれに対応付けて前記乗算手段に供給する制御データ供給手段と、
前記入力データ供給手段が供給するブロック対毎に前記乗算手段にて算出される積を部分積とし、該部分積を桁合わせして加算する部分積加算手段と、
を備え、該部分積加算手段での算出結果を、前記被乗数データ及び乗数データの積として出力すると共に、
前記乗算手段は、
ビット幅がｎビットの符号無し整数同士の乗算を行う乗算器、
該乗算器に供給される前記一対の入力データのそれぞれに対応して設けられ、前記制御データにより符号付き整数であることが示された入力データを、絶対値表現された符号無し整数に変換する絶対値変換手段、
前記制御データにより前記一対の入力データのいずれも符号無し整数であることが示されている場合には、正符号を示す計算結果を出力し、それ以外の場合には、前記制御データにより符号付き整数からなることが示された入力データに基づき、該入力データの最上位ビットを用いて行った符号計算の計算結果を出力する符号計算手段、
該符号計算手段での計算結果に基づき、前記乗算器での乗算結果を２の補数形式で表現された符号付き整数に変換する補数変換手段、
からなることを特徴とする乗算装置。
【請求項２】
ビット幅がｍ×ｎ（ｍ≧２，ｎ≧２の整数）ビットであり２の補数形式で表現された符号付き整数からなる被乗数データ及び乗数データの積を求める乗算装置であって、
ビット幅がｎである一対の入力データが、いずれも２の補数形式で表現された符号付き整数である場合、いずれも絶対値表現された符号無し整数である場合、或いは一方が符号付き整数であり他方が符号無し整数である場合のいずれについても、該一対の入力データの積を算出可能な乗算手段と、
前記被乗数データ及び乗数データをそれぞれビット幅がｎであるｍ個のブロックに分割して、前記被乗数データ及び乗数データからそれぞれ一つずつ選択してなるｍ×ｍ組のブロック対を設定し、該ブロック対を前記入力データとして前記乗算手段に順次供給する入力データ供給手段と、
該入力データ供給手段が、前記入力データとして前記被乗数データ又は乗数データの最上位ビットを含むブロックを供給した場合に符号付き整数であることを示し、それ以外のブロックを供給した場合に符号無し整数であることを示す制御データを、前記入力データのそれぞれに対応付けて前記乗算手段に供給する制御データ供給手段と、
前記入力データ供給手段が供給するブロック対毎に前記乗算手段にて算出される積を部分積とし、該部分積を桁合わせして加算する部分積加算手段と、
を備え、該部分積加算手段での算出結果を、前記被乗数データ及び乗数データの積として出力すると共に、
前記乗算手段は、
ビット幅がｎ＋２ビットの符号付き整数同士の乗算を行う乗算器、
該乗算器に供給される前記一対の入力データのそれぞれに対応して設けられ、前記入力データが符号付き整数からなることを前記制御データが示していれば、該入力データを２ビット符号拡張し、前記入力データが符号無し整数からなることを前記制御データが示していれば、該入力データを２ビット０拡張することにより符号付き整数に変換するビット拡張手段、
からなることを特徴とする乗算装置。
【請求項３】
請求項１又は請求項２記載の乗算装置において、
前記乗算手段及び前記部分積加算手段を並列動作させることを特徴とする乗算装置。
【請求項４】
請求項１ないし請求項３いずれか記載の乗算装置において、
前記被乗数データ及び乗数データは、共通のデータバスを用いて、外部より前記ブロック単位で前記入力データ供給手段に入力され、
前記データバス上での前記被乗数データ及び乗数データの転送を、上位桁側のブロックから順に転送するか、或いは下位桁側のブロックから順に転送するかを指定する転送方法指定手段を備え、
前記入力データ供給手段及び前記部分積加算手段は、
前記転送方法指定手段での指定に応じて、前記ブロック対の供給順序及び前記部分積を加算する際の桁合わせ位置を変更することを特徴とする乗算装置。
【請求項５】
請求項４記載の乗算装置において、
前記転送方法指定手段は、前記転送方法に対応した指定値を記憶するための記憶手段を備え、該記憶手段への指定値の書込を前記データバスを介して行うことを特徴とする乗算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、２の補数形式で表現された符号付き整数からなる被乗数データ及び乗数データの乗算、特に、被乗数データ及び乗数データのビット幅が、使用する乗算器のビット幅より大きい場合の乗算装置に関する。
【０００２】
【従来の技術】
従来より、デジタル信号処理装置等に用いられる乗算装置は、一般に、符号付き整数同士の乗算、及び符号無し整数同士の乗算のいずれもが可能なように構成されている。
【０００３】
このような乗算装置１０４は、例えば、図１３に示すように、ｎ（図ではｎ＝１６）ビット符号無し整数同士の乗算を行い２ｎビットの乗算結果を出力する乗算器１１０を備え、当該乗算装置１０４に供給される一対の入力データＡ，Ｂが、絶対値変換部１１２，１１４を介して乗算器１１０に供給されるように構成されている。
【０００４】
そして、絶対値変換部１１２，１１４では、入力データＡ，Ｂが「符号付き整数」であるか「符号無し整数」であるかを示す制御データＣに従って、制御データＣが「符号付き整数」を示している時には、一対の入力データＡ，Ｂを絶対値表現された符号無し整数に変換して乗算器１１０に供給し、一方、制御データＣが「符号無し整数」を示している時には、一対の入力データＡ，Ｂを無変換のまま乗算器１１０に供給する。また、絶対値変換部１１２，１１４は、制御データＣが「符号付き整数」の時に入力データの最上位ビットＡ［１５］，Ｂ［１５］に等しく、「符号無し整数」の時に‘０’となる符号データＦａ，Ｆｂをそれぞれ出力するように構成されている。
【０００５】
また、乗算装置１０４は、制御データＣが「符号付き整数」を示している場合、絶対値変換部１１２，１１４から供給される符号データＦａ，Ｆｂの排他的論理和を求める符号計算部１１６と、符号計算部１１６の出力が負符号（‘１’）を示している場合、乗算器１１０での乗算結果の２の補数を求めることにより、乗算結果を符号付き整数に変換する補数変換部１１８とを備えている。
【０００６】
つまり、乗算装置１０４では、制御データＣを切り替えることにより、符号付き整数同士の乗算、及び符号無し整数同士の乗算のいずれでも実行できるようにされている。
ところで、このような乗算装置１０４（特にその主要部である乗算器１１０）は、入力データＡ，Ｂのビット幅が２倍になると、その回路面積がほぼ４倍になることが知られている。
【０００７】
このため、例えば３２ビットや６４ビット等、ビット幅の大きい被乗数データ及び乗数データの乗算を行う装置を構成する場合、これに対応して入力データのビット幅が大きな乗算装置を設けるのではなく、入力データのビット幅が、上記被乗数データ及び乗数データより小さい（ここでは１６ビット）上述の乗算装置１０４を用い、被乗数データ及び乗数データを、乗算装置１０４で処理可能なビット幅の複数ブロックに分割し、乗算装置１０４を繰り返し動作させてブロック毎の部分積データを求め、この部分積データを累積加算することにより、乗算結果データを得る方法が用いられている。
【０００８】
具体的に、３２ビットの符号付き整数からなる被乗数データｓＸ（以下、特にｉビット目からｊビット目のみを指す場合、ｓＸ［ｉ：ｊ］と記す）及び乗数データｓＹ（ｓＸの場合と同様）の積を、上述の１６ビット乗算装置１０４を用いて求める手順を以下に説明する。なお、ｓＸ，ｓＹのｓは、符号付き（ｓｉｇｎｅｄ）整数からなるデータであることを示し、同様に、後述するｕＸ，ｕＹのｕは、符号無し（ｕｎｓｉｇｎｅｄ）整数からなるデータであることを示す。
【０００９】
図１４に示すように、まず、符号付き整数からなる被乗数データｓＸ及び乗数データｓＹを絶対値化して符号無し整数からなる被乗数データｕＸ及び乗数データｕＹに変換する。この時、被乗数データｓＸ及び乗数データｓＹの最上位ビット（符号ビット）ｓＸ［３１］，ｓＹ［３１］に基づいて符号計算も行う。
【００１０】
次に、符号無し整数に変換された被乗数データｕＸ及び乗数データｕＹを、乗算装置１０４が処理可能な大きさである１６ビットずつの上位ブロックと下位ブロック、即ち、被乗数データｕＸであればｕＸＨ（＝ｕＸ［３１：１６］）とｕＸＬ（＝ｕＸ［１５：０］）、乗数データｕＹであればｕＹＨ（＝ｕＹ［３１：１６］とｕＹＬ（＝ｕＹ［１５：０］）に分割し、両データｕＸ，ｕＹからそれぞれ１ブロックずつ選択してなる４組のブロック対（ｕＸＬ×ｕＹＬ，ｕＸＨ×ｕＹＬ，ｕＸＬ×ｕＹＨ，ｕＸＨ×ｕＹＨ）のいずれかを、入力データＡ，Ｂとして乗算装置１０４に順次供給することにより、各ブロック対の積（以下、「部分積」という）をそれぞれ求める。
【００１１】
このように乗算装置１０４を用いて求められた部分積を、ブロック対の中に上位ブロックを一つ含む毎に、ブロックのビット幅分（ここでは１６ビット）だけ上位桁側にシフトさせる桁合わせをして累積加算することにより、６４ビットの符号無し整数からなる乗算結果（即ち、ｕＸ×ｕＹの乗算結果）を求め、更に、この乗算結果を、先に行った符号計算の結果に基づき、符号付き整数からなる乗算結果（即ち、ｓＸ×ｓＹの乗算結果）に変換していた。
【００１２】
【発明が解決しようとする課題】
しかし、乗算装置１０４を用いて、従来通りの１６ビットの符号付き整数同士の乗算、及び符号無し整数同士の乗算に加えて、上述の３２ビット符号付き整数同士の乗算を実現する場合、この乗算装置１０４とは別に、３２ビットの被乗数データｓＸ及び乗数データｓＹを符号無し整数に変換（絶対値化）するための３２ビット幅の補数器、乗算装置１０４が求めた部分積を加算するための加算装置、加算装置による加算処理の結果、符号無し整数として求められる演算結果データを、符号付き整数に変換するための６４ビット幅の補数器等が必要となる。
【００１３】
なお、加算装置は、他の加算処理のために別途設けられているものを利用できるとしても、乗算装置１０４以外に、３２ビット幅や６４ビット幅というビット幅の大きな演算器（補数器）を新たに設ける必要があり、回路面積を小さく抑えるために乗算装置１０４を繰り返し使用する構成を採用しているにも関わらず、回路面積を充分に小さくすることができないという問題があった。
【００１４】
また、上述のように３２ビットにて乗算処理を行う場合、乗算装置１０４は、符号無し整数同士の乗算を行うよう制御データが固定された状態で使用されるが、乗算装置１０４以外に追加される上述の補数器等を動作させるため、演算サイクルが増加し、動作速度が低下してしまうという問題もあった。
【００１５】
本発明は、上記問題点を解決するために、使用する乗算器よりビット幅の大きい被乗数データ及び乗数データの乗算を可能とするために追加される乗算器以外の構成を最小限に抑えることができ、回路規模の小型化と動作速度の高速化が可能な乗算装置を提供することを目的とする。
【００１６】
【課題を解決するための手段】
まず、本発明の前提となる乗算方法について説明する。即ち、２の補数形式で表現された符号付き整数からなる被乗数データ及び乗数データの積を求める乗算方法であって、被乗数データ又は乗数データを、それぞれが桁の連続した複数ビットからなるブロックに分割し、最上位ビットを含むブロックを符号付き整数、それ以外のブロックを符号無し整数として、前記被乗数データ及び乗数データからそれぞれ一つずつ選択してなる全てのブロック対について、該ブロック対の積である部分積を求め、求めた全ての部分積を桁合わせして加算することにより乗算結果データを得ることを特徴とする。
【００１７】
この方法を用いた場合、乗算器を用いる際に行う符号付き整数や符号無し整数への変換は、常に被乗数データ及び乗数データを分割してなるブロック単位で行えばよく、被乗数データ及び乗数データを全体のままで符号無し整数に変換したり、部分積の加算結果を符号有り整数に変換する必要がない。
【００１８】
このため、この乗算方法を実現する装置では、従来装置のようなビット幅の大きな演算器（補数器等）を設ける必要がなく、装置の小型化を図ることができる。
また、被乗数データや乗数データ、及び乗算結果データを全体のまま処理する演算が不要となるため、その分、従来装置と比較して演算サイクルが削減され、動作速度を向上させることができる。
【００１９】
ここで、被乗数データ及び乗数データを複数ブロックに分割した際に、最上位ビットを含むブロックのみを符号付き整数、それ以外のブロックを符号無し整数として扱うことが可能な理由を以下に説明する。
まず、Ａ，Ｂを２の補数形式で表現された符号付き整数からなるデータとし、また、ａ，ｂを正の整数からなるデータとすると、データＡ，Ｂの積は、（１）式にて求めることができる。
【００２０】
0003614065.tif 000002
つまり、データＡを分割データＡ−ａと分割データａとに分割し、データＢを分割データＢ−ｂと分割データｂとに分割できれば、両データＡ，Ｂからそれぞれ一つずつ選択してなる４組の分割データ対の部分積を全て求め、これを加算することによりデータＡ，Ｂの積を求めることができる。
【００２１】
具体的に、２の補数形式で表現された８ビットのデータＡ＝１０１０１０１０Ｂ（＝−８６）を考えた場合、データＡ自体は負数であるが、そのうち下位４ビットを抽出してこれを正数データａ＝００００１０１０Ｂ（＝１０）として扱うと、データＡから下位４ビットをクリアしてなる残されたデータ１０１０００００Ｈ（＝−９６）は、Ａ−ａに等しくなる。
【００２２】
つまり、データＡは、上位４ビットと下位４ビットとに分割した場合、下位４ビットからなるデータａは、データＡの符号を意識することなく、正数（即ち符号無し整数）として扱うことができ、また、上位４ビットは、符号付き整数からなるデータＡ−ａとして取り扱うことができる。そして、このようなデータの分割は、上位と下位とに２分割する場合に限らず、最上位ビット以外の任意のビットからなるデータに対して、同様に適用することが可能なため、結局、被乗数データ及び乗数データを複数ブロックに分割した際に、最上位ビットを含むブロックのみを符号付き整数、それ以外のブロックを符号無し整数として扱うことが可能となるのである。
【００２３】
なお、被乗数データ及び乗数データを分割してなる各ブロックは、いずれも同じビット幅を有することが望ましい。
この場合、各ブロックのビット幅を、部分積を求める際に使用する乗算器のビット幅と同じにすることで、乗算器を効率よく使用することができ、また、部分積を累積加算する際に行う部分積の桁合わせ操作を単純化することができる。
【００２４】
そして、上記目的を達成するためになされた発明である請求項１記載の乗算装置では、乗算手段として、ビット幅がｎである一対の入力データがいずれも２の補数形式で表現された符号付き整数である場合、いずれも絶対値表現された符号無し整数である場合、或いは一方が符号付き整数であり他方が符号無し整数である場合のいずれについても、これに対応して、一対の入力データの積を算出可能なものが用いられている。
具体的には、乗算手段は、ビット幅がｎビットの符号無し整数同士の乗算を行う乗算器を中心に構成され、上述した従来の乗算装置１０４と同様に、絶対値変換手段（絶対値変換部１１２，１１４），符号計算手段（符号計算部１１６），補数変換手段（補数変換部１１８）を備え、特に、絶対値変換手段では、入力データが符号付き整数からなる場合に、これを絶対値表現された符号無し整数に変換する処理を、制御データに従って、各入力データ毎に個別に行うことができるように構成されている。
【００２５】
そして、入力データ供給手段が、ビット幅がｍ×ｎ（ｍ，ｎ≧２の整数）ビットであり２の補数形式で表現された符号付き整数からなる被乗数データ及び乗数データを、それぞれビット幅がｎであるｍ個のブロックに分割して、被乗数データ及び乗数データからそれぞれ一つずつ選択してなるｍ×ｍ組のブロック対を設定し、これらブロック対を一対の入力データとして乗算手段に順次供給する。
【００２６】
この時、制御データ供給手段は、入力データ供給手段が入力データとして被乗数データ又は乗数データの最上位ビットを含むブロックを供給した場合に符号付き整数であることを示し、それ以外のブロックを供給した場合に符号無し整数であることを示す制御データを、一対の入力データのそれぞれに対応付けて乗算手段に供給する。
【００２７】
すると、乗算手段は、入力データ供給手段から供給されるｍ×ｍ組の全てのブロック対について、その積（部分積）を、制御データ供給手段から供給される制御データに従って求め、部分積加算手段が、これら部分積を桁合わせして加算することにより、被乗数データ及び乗数データの積（乗算結果データ）を求める。
【００２８】
このように構成された乗算装置は、上述の方法を実現するものであり、被乗数データや乗数データをブロックに分割する前に符号無し整数に変換（絶対値化）する必要がないだけでなく、部分積を加算した結果が、そのまま符号付き整数で表された乗算結果データとなる。このため、従来装置において必要であった被乗数データや乗数データを処理するためのｍ×ｎビットの補数器や，乗算結果データを処理するための２×ｍ×ｎビットの補数器を設ける必要がなく、装置の小型化と処理の高速化を図ることができる。
【００２９】
そして、請求項３記載のように、乗算手段及び部分積加算手段を並列動作させるように構成すれば、より一層、処理の高速化を図ることができる。
【００３０】
また、乗算手段は、請求項２記載のように、ビット幅がｎ＋２ビットの符号付き整数同士の乗算を行う乗算器を中心に構成する場合には、入力データが符号付き整数からなることを制御データが示していれば、この入力データを２ビット符号拡張し、入力データが符号無し整数であることを制御データが示していれば、対応する入力データを２ビット０拡張することにより符号付き整数に変換するビット拡張手段を設け、このビット拡張手段にてｎ＋２ビットに拡張された入力データを、乗算器に供給するように構成すればよい。
【００３１】
なお、符号拡張とは、データの最上位ビット側にその最上位ビットと同じ値を有するビットを追加することを意味し、０拡張とは、データの最上位ビット側に値が‘０’のビットを追加することを意味する。
この場合、符号付き整数同士の乗算を行う乗算器として、例えば、ブースのアルゴリズムを実現するもの等を好適に用いることができる。
【００３２】
ところで、被乗数データ及び乗数データは、請求項４記載のように、共通のデータバスを用いて外部よりブロック単位で入力データ供給手段に入力されるようにしてもよい。この場合、先行データの全ブロックを入力後、後続データの先頭ブロックが入力された時点で、乗算手段への前記ブロック対の供給を開始するように構成することが望ましい。
【００３３】
つまり、後続データが全部入力されるのを待たなくても、後続データの先頭ブロックが入力された時点では、この後続データの先頭ブロックと先行データの任意ブロックとからなるブロック対であれば、乗算手段に供給することが可能である。このように、後続データの入力と乗算手段での演算処理を並列処理することにより、処理速度を向上させることができる。
【００３４】
但し、ビット幅がｎであるデータバスを用いて、ビット幅がｍ×ｎビットの被乗数データ及び乗数データを転送する場合、ｍ個のブロックからなるデータを、上位桁側のブロックから順に転送する方法（いわゆるビッグエンディアン）と、下位桁側のブロックから順に転送する方法（いわゆるリトルエンディアン）とが考えられる。
【００３５】
そして、上述のように、入力データ供給手段による外部からのデータ入力と、乗算手段での演算処理とを並列に実行可能とするには、いずれの転送方法を用いるかにより、乗算手段へのブロック対の供給順序を変更しなければならない。
例えば、図１５（ａ）に示すように、２ｎビットの被乗数データＸ（上位ブロックＸＨ，下位ブロックＸＬ）及び乗数データＹ（上位ブロックＹＨ，下位ブロックＹＬ）が下位桁側のブロックから、つまりＸＬ→ＸＨ→ＹＬ→ＹＨの順に転送される場合には、入力データ供給手段は、最初に各データの下位ブロック同士からなるブロック対（ＸＬ，ＹＬ）を乗算手段に供給するのであれば、後続データの上位ブロックＹＨの入力と、下位ブロック同士の乗算ＸＬ×ＹＬを同時に行うことができる。しかし、図１５（ｂ）に示すように、２ｎビットの被乗数データＸ及び乗数データＹが上位桁側のブロックから、つまりＸＨ→ＨＬ→ＹＨ→ＹＬの順に転送される場合には、入力データ供給手段が、各データの下位ブロック同士からなるブロック対（ＸＬ，ＹＬ）を最初に乗算手段に供給するのであれば、後続データＹの最終ブロックＹＬの入力が終了するのを待たなければならない。即ち、演算手段へのブロック対の供給順序を固定してしまうと、使用される転送方法によって、処理効率が低下してしまうという問題が生じる。
【００３６】
そこで、請求項４記載の乗算装置では、転送方法指定手段が、データバス上での被乗数データ及び乗数データの転送を、上位桁側のブロックから順に転送するか、或いは下位桁側のブロックから順に転送するかを指定し、この転送方法指定手段での指定に応じて、入力データ供給手段及び部分積加算手段は、ブロック対の供給順序及び部分積を加算する際の桁合わせ位置を変更するようにされている。
【００３７】
このように構成された本発明の乗算装置では、データバスを介して当該乗算装置に入力される被乗数データ及び乗数データの並びが、ビッグエンディアン及びリトルエンディアンのいずれの場合であっても、並列動作が可能となり効率良く処理を実行することができる。
【００３８】
なお、転送方法指定手段は、具体的には、外部から転送方法指定のための専用入力線を設け、この専用入力線の信号レベルにより指定するようにしてもよいし、請求項５記載のように、転送方法に対応した指定値を記憶するための記憶手段を備え、この記憶手段への指定値の書込をデータバスを介して行うように構成してもよい。特に、後者の場合には、当該乗算装置の外部に設定用の特別なハードウェアを設ける必要がないため、当該乗算装置自身の構成、及び当該乗算装置を用いて構成される各種装置の構成を簡易化することができる。
【００３９】
【発明の実施の形態】
以下に本発明の実施形態を図面と共に説明する。
［第１実施形態］
図１は、第１実施形態の乗算装置の全体構成を表すブロック図である。
【００４０】
なお、本実施形態の乗算装置２は、２の補数形式で表現された符号付き整数，或いは絶対値で表現された符号無し整数からなる１６又は３２ビットの被乗数データＸ及び乗数データＹを入力し、同じく符号付き整数，或いは符号無し整数からなる３２又は６４ビットの符号付き整数からなる乗算結果データＺを出力するものである。
【００４１】
図１に示すように、本実施形態の乗算装置２は、１６ビットからなる一対の入力データＤａ，Ｄｂ、及び入力データＤａ，Ｄｂが符号付き整数又は符号無し整数のいずれであるかをそれぞれ表す制御データＳａ，Ｓｂを入力し、制御データＳａ，Ｓｂに従って符号付き整数同士の乗算、符号無し整数同士の乗算、符号付き整数と符号無し整数との乗算のいずれかを実行し、３２ビットの符号付き整数からなる部分積データＤｐを出力する乗算部４と、３２ビットからなる入力データＤｃ，Ｄｄを入力し、入力データＤｃ，Ｄｄの加算を行って３２ビットの加算結果データＤｍ及び１ビットのキャリーＣｏを出力する加算部６と、乗算命令ＭＵＬが入力されると、同時に入力される被乗数データＸ及び乗数データＹに基づき、乗算部４及び加算部６を動作させ乗算結果データＺを求める制御部８とを備えている。
【００４２】
このうち、乗算部４は、図２に示すように、従来の乗算装置１０４と同様に、乗算器１０，絶対値変換部１２，１４、符号計算部１６、補数変換部１８を備えており、絶対値変換部１２以外は、従来の乗算装置１０４と全く同様に構成されているので、ここでは説明を省略する。
【００４３】
そして、入力データＤａ側に設けられた絶対値変換部１２は、制御データＳａに従って、制御データＳａが‘０’である場合には、入力データＤａは符号無し整数であるとして、この入力データＤａをそのまま乗算器１０に供給する。一方、制御データＳｂが‘１’である場合には、入力データＤａは符号付き整数であるとして、最上位ビット（符号ビット）Ｄａ［１５］が‘１’、即ち負数であれば、入力データＤａの２の補数を求め、これを乗算器１０に供給し、最上位ビットＤａ［１５］が‘０’、即ち正数であれば、符号無し整数の場合と同様に、入力データをそのまま乗算器１０に供給するように構成されている。
【００４４】
また、絶対値変換部１２は、制御データＳａと入力データの最上位ビットＤａ［１５］との論理積を、符号データＦａとして符号計算部１６に供給するように構成されている。
なお、入力データＤｂ側に設けられた絶対値変換部１４は、制御データＳａ，入力データＤａ，符号データＦａの代わりに、制御データＳｂ，入力データＤｂ，符号データＦｂとなるだけで、全く同様に構成されている。
【００４５】
このように構成された乗算部４では、制御データ（Ｓａ，Ｓｂ）＝（０，０）の時に符号無し整数同士の乗算、制御データ（Ｓａ，Ｓｂ）＝（１，１）の時に符号付き整数同士の乗算、制御データ（Ｓａ，Ｓｂ）＝（０，１）又は（１，０）の時に符号無し整数と符号付き整数との乗算を実行する。
【００４６】
一方、加算部６は、周知の３２ビット加算器からなり、３２ビットの加算結果データＤｍと、加算結果データＤｍの桁上がり情報であるキャリーＣｏとを出力するように構成されている。
次に、制御部８が乗算部４及び加算部６を用いて実行する各種乗算処理について説明する。なお、当該乗算装置２に入力される乗算命令ＭＵＬにより、被乗数データＸ及び乗数データＹのビット数（１６ビット／３２ビット）及びデータの型（符号付き整数／符号無し整数）が指定されるものとする。
【００４７】
そして、乗算命令ＭＵＬにより「１６ビット」「符号付き整数」が指定された場合に実行する１６ビット符号付き乗算処理では、［表１］に示すように、制御データを（Ｓａ，Ｓｂ）＝（１，１）に設定すると共に、被乗数データの下位１６ビットＸ［１５：０］を入力データＤａとし、乗数データの下位１６ビットＹ［１５：０］を入力データＤｂとして乗算部４に供給し、その結果データＤｐを、そのまま乗算結果データの下位３２ビットＺ［３１：０］に出力する。
【００４８】
【表１】
0003614065.tif 000003
【００４９】
また、乗算命令ＭＵＬにより「１６ビット」「符号無し整数」が指定された場合に実行する１６ビット符号無し乗算処理では、制御データを（Ｓａ，Ｓｂ）＝（０，０）に設定する以外は、上述の「符号付き整数」の場合と全く同様の処理を実行する。
【００５０】
次に、乗算命令ＭＵＬにより「３２ビット」「符号付き整数」が指定された場合に実行する３２ビット符号付き乗算処理について説明する。ここで、図３は、本処理の実行時に、制御部８が乗算部４及び加算部６に供給するデータや、乗算部４及び加算部６の動作タイミングを表す説明図である。
【００５１】
なお、以下では、被乗数データ及び乗数データの下位１６ビットＸ［１５：０］，Ｙ［１５：０］を、それぞれ下位ブロックＸＬ，ＹＬとし、上位１６ビットＸ［３１：１６］，Ｙ［３１：１６］を、それぞれ上位ブロックＸＨ，ＹＨとよぶものとする。
【００５２】
そして本処理では、図３に示すように、まず、制御データを（Ｓａ，Ｓｂ）＝（０，０）に設定すると共に、被乗数データの下位ブロックＸＬを入力データＤａとし、乗数データの下位ブロックＹＬを入力データＤｂとする第１の設定にて乗算部４を動作させる（時刻ｔ１）。
【００５３】
この第１の設定に基づく乗算部４での符号無し整数同士の乗算（ｕＸＬ×ｕＹＬ）が終了し、乗算部４から結果データＤｐ（「第１の部分積データＤｐ１」という）が出力されると（時刻ｔ２）、この第１の部分積データＤｐ１を、予め用意された結果レジスタＲの下位３２ビットＲ［３１：０］に格納する。
【００５４】
これと同時に、制御データを（Ｓａ，Ｓｂ）＝（１，０）に設定すると共に、被乗数データの上位ブロックＸＨを入力データＤａとし、乗数データの下位ブロックＹＬを入力データＤｂとする第２の設定にて乗算部４を動作させる。
この第２の設定に基づく乗算部４での符号付き整数と符号無し整数との乗算（ｓＸＨ×ｕＹＬ）が終了し、乗算部４から結果データＤｐ（「第２の部分積データＤｐ２」という）が出力されると（時刻ｔ３）、この第２の部分積データＤｐ２を入力データＤｃとし、結果レジスタの１６ビット目から４７ビット目までの３２ビット領域Ｒ［４７：１６］を入力データＤｄとして加算部６を動作させる。なお、この加算処理は、結果レジスタＲに格納された部分積データの累積加算値に、上位桁側に１６ビットシフトさせることで桁合わせした第２の部分積データＤｐ２を加算することに相当する。
【００５５】
これと同時に、制御データを（Ｓａ，Ｓｂ）＝（０，１）に設定すると共に、被乗数データの下位ブロックＸＬを入力データＤａとし、乗数データの上位ブロックＹＨを入力データＤｂとする第３の設定にて乗算部４を動作させる。
そして、加算部６での加算処理が終了し、加算部６から加算結果データＤｍが出力されると、その加算結果データＤｍを、先にデータを取り出したのと同じ結果レジスタの３２ビット領域Ｒ［４７：１６］に格納する。この時、キャリーＣｏも出力されていれば、この領域より１桁上位である結果レジスタの４８ビット目Ｒ［４８］を‘１’に設定する。
【００５６】
その後、第３の設定に基づく乗算部４での符号無し整数と符号付き整数との乗算（ｕＸＬ×ｓＹＨ）が終了し、乗算部４から結果データＤｐ（「第３の部分積データＤｐ３」という）が出力されると（時刻ｔ４）、この第３の部分積データＤｐ３を入力データＤｃとし、結果レジスタの１６ビット目から４７ビット目までの３２ビット領域Ｒ［４７：１６］を入力データＤｄとして加算部６を動作させる。なお、この加算処理は、結果レジスタＲに格納された部分積データの累積加算値に、上位桁側に１６ビットシフトさせることで桁合わせした第３の部分積データＤｐ３を加算することに相当する。
【００５７】
これと同時に、制御データを（Ｓａ，Ｓｂ）＝（１，１）に設定すると共に、被乗数データの上位ブロックＸＨを入力データＤａとし、乗数データの上位ブロックＹＨを入力データＤｂとする第４の設定にて乗算部４を動作させる。
そして、加算部６での加算処理が終了し、加算部６から加算結果データＤｍが出力されると、その加算結果データＤｍを、先にデータを取り出したのと同じ結果レジスタの３２ビット領域Ｒ［４７：１６］に格納する。この時、キャリーＣｏも出力されている場合、Ｒ［４８］＝‘０’であればＲ［４８］＝‘１’とし、既にＲ［４８］＝１であれば、Ｒ［４９：４８］＝‘１０’とする。
【００５８】
その後、第４の設定に基づく乗算部４での符号付き整数同士の乗算（ｓＸＨ×ｓＹＨ）が終了し、乗算部４から結果データＤｐ（「第４の部分積データＤｐ４」という）が出力されると（時刻ｔ５）、この第４の部分積データＤｐ４を入力データＤｃとし、結果レジスタの３２ビット目から６３ビット目までの３２ビット領域Ｒ［６３：３２］を入力データＤｄとして加算部６を動作させる。なお、この加算処理は、結果レジスタＲに格納された部分積データの累積加算値に、上位桁側に３２ビットシフトさせることで桁合わせした第４の部分積データＤｐ４を加算することに相当する。
【００５９】
この加算部６での加算処理が終了し、加算部６から加算結果データＤｍが出力されると、その加算結果データＤｍを、先にデータを取り出したのと同じ結果レジスタの３２ビット領域Ｒ［６３：３２］に格納する。
このようにして最終的に結果レジスタＲに格納されている値を、乗算結果データｓＺとして出力し、本処理を終了する。
【００６０】
次に、乗算命令ＭＵＬにより「３２ビット」「符号無し整数」が指定された場合に実行する３２ビット符号無し乗算処理では、入力された符号無し被乗数データｕＸ，及び乗数データｕＹの各上位ブロックｕＸ［３１：１６］，ｕＹ［３１：１６］を、符号付き整数（ｕＸＨ，ｕＹＨ）として扱うこと、即ち、［表２］に示すように、乗算部４を動作させる第１〜第４の設定の全てにて、制御データを（Ｓａ，Ｓｂ）＝（０，０）に設定すること以外は、上述の３２ビット符号付き乗算処理と全く同様に動作する。
【００６１】
【表２】
0003614065.tif 000004
【００６２】
なお、制御部８が行う上述した各種乗算処理は、制御部８をマイクロコンピュータにより構成してソフトウェア的に実現してもよいし、制御部８をシーケンス回路により構成してハードウェア的に実現してもよい。
以上説明したように、本実施形態の乗算装置２では、３２ビットの符号付き整数からなる被乗数データｓＸ及び乗数データｓＹの乗算を行う場合、図４に示すように、入力された符号付き被乗数データｓＸ，及び乗数データｓＹを、それぞれ上位１６ビットからなる上位ブロックを符号付き整数ｓＸＨ，ｓＹＨ、下位１６ビットからなる下位ブロックを符号無し整数ｕＸＬ，ｕＹＬとして扱い、これらの部分積データＤｐ（Ｄｐ１＝ｕＸＬ×ｕＹＬ，Ｄｐ２＝ｓＸＨ×ｕＹＬ，Ｄｐ３＝ｕＸＬ×ｓＹＨ，Ｄｐ４＝ｓＸＨ×ｓＹＨ）を求めると共に、これら部分積データＤｐ１〜Ｄｐ４を桁合わせしながら加算することにより、乗算結果データｓＺを求めている。
【００６３】
このように、本実施形態の乗算装置２によれば、符号付き整数からなる被乗数データｓＸや乗数データｓＹを符号無し整数からなるデータｕＸ，ｕＹに変換する必要がないだけでなく、部分積データＤｐ１〜Ｄｐ４を加算処理した結果が、そのまま符号付き整数で表された乗算結果データｓＺとなるため、従来装置において必要であった被乗数データＸや乗数データＹ，及び乗算結果データＺのデータの型を変換するための補数器を設ける必要がなく、装置の小型化と処理の高速化を図ることができる。
【００６４】
また、本実施形態の乗算装置２では、乗算部４と加算部６とを並列に動作させ効率よく処理を行っているので、処理時間をより短縮することができる。
なお、本実施形態において、乗算部４が乗算手段、制御部８が入力データ供給手段，制御データ供給手段、制御部８及び加算部６が部分積加算手段に相当し、また、乗算器１０が請求項１の乗算器、絶対値変換部１２，１４が絶対値変換手段、符号計算部１６が符号計算手段、補数変換部１８が補数変換手段に相当する。
［第２実施形態］
次に、第２実施形態について説明する。
【００６５】
なお、第１実施形態とは乗算部の構成が異なるだけであるため、この乗算部についてのみ説明する。
即ち、本実施形態において、乗算部４ａは、図５に示すように、１８ビットの符号付き整数同士の乗算を行い、３２ビットの結果データを出力する乗算器２０と、制御部８から供給される１６ビットの入力データＤａ，Ｄｂを、それぞれ１８ビットのデータに拡張する符号拡張部２２，２４とからなる。
【００６６】
このうち、入力データＤａ側に設けられた符号拡張部２２は、制御データＳａが‘０’である場合、入力データＤａは符号無し整数からなるものとして、入力データＤａの上位側に２ビットの０拡張を行い、一方、制御データＳａが‘１’である場合、入力データＤａは符号付き整数からなるものとして、この入力データＤａの上位側に２ビットの符号拡張を行うように構成されている。
【００６７】
また、入力データＤｂ側に設けられた符号拡張部２４は、入力データＤａ，制御データＳａが、入力データＤｂ，制御データＳｂとなるだけで、入力データＤａ側の符号拡張部２２と全く同様に構成されている。
そして、乗算器２０は、ブースのアルゴリズムを実行するものが用いられている。但し、このような乗算器は公知技術であるため、ここでは説明を省略する。
【００６８】
なお、本実施形態において、乗算器２０が請求項２の乗算器、符号拡張部２２，２３が符号拡張手段に相当する。
このように構成された乗算部４ａを持つ乗算装置の制御部８は、乗算部４に対して、第１実施例の制御部８と全く同様に入力データＤａ，Ｄｂ及び制御データＳａ，Ｓｂを供給することで、各種乗算処理を実行することができる。
【００６９】
以上説明したように本実施形態では、第１実施形態と同様の効果を得ることができる。
特に、本実施形態では、ブースのアルゴリズムを実行する乗算器２０を用いて乗算部４ａを構成したことにより、乗算部４ａでの処理をより高速に行うことができ、装置全体としての処理速度を、より一層向上させることができる。
【００７０】
ところで、上記実施形態では、被乗数データＸ及び乗数データＹが同じビット幅（３２ビット）を有し、これを分割してなるブロックＸＨ，ＸＬ，ＹＨ，ＹＬも全て同じビット幅（１６ビット）を有するものとして構成したが、このような場合に限らず、被乗数データＸと乗数データＹとでビット幅が異なっていたり、分割された各ブロックＸＨ，ＸＬ，ＹＨ，ＹＬのビット幅が互いに異なっていてもよい。
【００７１】
この場合、被乗数データＸのビット幅をＭ，その下位ブロックＸＬのビット幅をｍ（従って、上位ブロックＸＨのビット幅はＭ−ｍ）、乗数データＹのビット幅をＮ，その下位ブロックＹＬのビット幅をｎ（従って、上位ブロックＹＨのビット幅はＮ−ｎ）として、乗算部４，４ａは、ｍａｘ（ｍ，ｎ，Ｍ−ｍ，Ｎ−ｎ）ビットの乗算を実行可能なように構成し、図６に示すように、加算部６を用いた加算処理を行う際の桁合わせとして、第２の部分積データＤｐ２はｍビット、第３の部分積データＤｐ３はｎビット、第４の部分積データＤｐ４はｍ＋ｎビットだけ上位桁側にシフトさせるように構成すればよい。
【００７２】
また、上記実施形態では、被乗数データＸ及び乗数データＹをいずれも２個のブロックに分割しているが、ブロックの分割数は３個以上であってもよく、また、被乗数データＸと乗数データＹとで分割数が異なっていてもよい。特に分割数が異なっている場合には、いずれか一方の分割数を１、即ち分割しないように設定してもよい。
［第３実施形態］
次に、第３実施形態について説明する。
【００７３】
上記実施形態では、乗算命令ＭＵＬ，被乗数データＸ，乗数データＹの入力、乗算結果データＺの出力について、特に規定されていないが、本実施形態では、１６ビットのビット幅を有するデータバスを介してこれらの命令やデータが入出力される場合について説明する。本実施形態では、乗算部４及び加算部６の構成は上記実施形態と全く同様であるため、これらについての説明を省略し、ここでは、制御部８ａを中心に説明する。
【００７４】
図７に示すように、本実施形態の乗算装置２ａには、乗算命令ＭＵＬ，被乗数データＸ，乗数データＹの入力、乗算結果データＺの出力を行うための１６ビット幅のデータバスＢ、データバスＢを介した入出力を制御するための各種制御信号線からなる制御バス（図示せず）、及びデータバスＢより大きなビット幅（１６×ｎビット）のデータを伝送する場合、下位桁側のデータから順に転送（以下「リトルエンディアン」という）するか、上位桁側のデータから順に転送（以下「ビッグエンディアン」という）するか、データの取扱方法を指定するために、転送方法指定手段としての指定用信号線Ｅが接続されている。なお、指定用信号線Ｅは、プルアップ或いはプルダウンして信号レベルを固定することにより、いずれかのエンディアンを指定するように構成されている。
【００７５】
そして、制御部８ａは、図８に示すように、データバスＢを介して入力される被乗数データＸ，乗数データＹをそれぞれ記憶するためのデータレジスタ３１と、乗算部４での演算結果を記憶するための部分積レジスタ３２と、加算部６での演算結果を記憶する加算結果レジスタ３３と、データバスを介して出力する乗算結果データＺを格納するための出力レジスタ３４とを備えている。データレジスタ３１は、被乗数データＸ及び乗数データＹが３２ビットである場合に、被乗数データＸの上位ブロックＸＨを格納するＸＨレジスタ，下位ブロックＸＬを格納するＸＬレジスタ、乗数データＹの上位ブロックＹＨを格納するＹＨレジスタ，下位ブロックＹＬを格納するＹＬレジスタからなる。但し、被乗数データＸ及び乗数データＹが１６ビットである場合には、それぞれＸＬレジスタ，ＹＬレジスタが使用される。
【００７６】
また、制御部８ａは、データバスＢを介して入力される乗算命令ＭＵＬの内容を解析する命令解析部３５を備えており、乗算命令ＭＵＬにて指定されている内容、即ち、被乗数データＸ及び乗数データＹのビット幅情報（３２ビット／１６ビット）、データタイプ情報（符号付きデータ／符号なしデータ）を特定する。
【００７７】
更に制御部８ａは、命令解析部３５にて特定されたビット幅情報、及び指定用信号線Ｅの設定値（以下「エンディアン情報」という）に従って、データレジスタ３１への被乗数データＸ及び乗数データＹの格納、及び出力レジスタ３４からの演算結果データＺの読出を制御する入出力制御部３６と、命令解析部３５にて特定された情報（データ幅情報，データタイプ情報）、及び指定用信号線Ｅによるエンディアン情報に基づいて、乗算部４に供給するデータＤａ，Ｄｂの選択，制御信号Ｓａ，Ｓｂの生成を行い、乗算部４に乗算処理を実行させる乗算制御部３７と、エンディアン情報、部分積レジスタ３２及び加算結果レジスタ３３の格納値に基づき、加算部６に供給するデータＤｃ，Ｄｄの選択を行い、加算部６に加算処理を実行させると共に、加算部６が出力する結果データＤｍ及びキャリーＣｏに基づいて、結果データＤｍの格納位置など加算結果レジスタ３３の内容を操作することにより、乗算部４からの結果データＤｍ、即ち部分積データＤｐの桁合わせ加算を実行し、更に、加算結果レジスタ３３の内容を出力レジスタ３４に転送する加算制御部３８とを備えている。
【００７８】
このうち、入出力制御部３６では、データ幅情報が１６ビットである場合には、乗算命令ＭＵＬに続いて入力される各１６ビット幅の２つのデータを、データレジスタ３１の各レジスタにＸＬ→ＹＬ（ＸＨ，ＹＨは不使用）の順で格納する。また、データ幅情報が３２ビットである場合、エンディアン情報がビッグエンディアンに設定されていれば、乗算命令ＭＵＬに続いて入力される各１６ビット幅の４つのデータを、データレジスタ３１の各レジスタにＸＨレジスタ→ＸＬレジスタ→ＹＨレジスタ→ＹＬレジスタの順で格納し、一方、エンディアン情報がリトルエンディアンに設定されていれば、データレジスタ３１の各レジスタにＸＬレジスタ→ＸＨレジスタ→ＹＬレジスタ→ＹＨレジスタの順で格納する。これにより、データレジスタ３１には、エンディアンの相違によらず、常に同じ状態でデータが格納されることになる。
【００７９】
また、入出力制御部３６は、データ幅情報が１６ビットである場合、データレジスタ３１に２番目のデータ（即ち被乗数データＸ及び乗数データＹの全て）が格納された時点で乗算制御部３７を起動し、一方、データ幅情報が３２ビットである場合、データレジスタ３１に３番目のデータが格納された場合、即ち、ビッグエンディアンであればＹＨレジスタ、リトルエンディアンであればＹＬレジスタにデータが格納された時点で乗算制御部３７を起動するようにされている。
【００８０】
次に、入出力制御部３６により起動される乗算制御部３７は、命令解析部３５から供給されるデータ幅情報が１６ビットである場合には、先の［表１］と全く同様の設定に従って動作し、データ幅情報が３２ビット，且つエンディアン情報がリトルエンディアンである場合、先の［表２］と全く同様の設定に従って動作する。
【００８１】
そして、データ幅情報が３２ビット，且つエンディアン情報がビッグエンディアンである場合には、次の［表３］の設定に従って動作する。
【００８２】
【表３】
0003614065.tif 000005
【００８３】
即ち、乗算制御部３７が、第１〜第４の設定に基づく各演算を、乗算部４に順次実行させ、乗算部４からの結果データＤｍが、順次部分積レジスタ３２に格納される。
そして、加算制御部３８は、図９に示す（但し図には被乗数データＸ及び乗数データＹが符号付き整数である場合を示す）ように、乗算部４による第２の設定に基づく演算の実行中（時刻ｔ２〜ｔ３）に、既に部分積レジスタ３２に格納されている結果データである第１の部分積データＤｐ１（＝ＸＬ×ＹＨ）を、加算結果レジスタ３３の３２ビット領域Ｒ［４７：１６］に格納する。
【００８４】
また、加算制御部３８は、乗算部４による第３の設定に基づく演算の実行中（時刻ｔ３〜ｔ４）に、既に部分積レジスタ３２に格納されている第２の部分積データＤｐ２（＝ＸＨ×ＹＬ）と、加算結果レジスタの３２ビット領域Ｒ［４７：１６］とを、加算部６に供給することにより加算演算を行わせ、その加算結果を、結果レジスタ３３の３２ビット領域Ｒ［４７：１６］に格納する。
【００８５】
更に、加算制御部３８は、乗算部４による第４の設定に基づく演算の実行中（時刻ｔ４〜ｔ５）に、乗算結果レジスタに格納されている第３の部分積データＤｐ３（＝ＸＬ×ＹＬ）と、加算結果レジスタの３２ビット領域Ｒ［１５：０］とを、加算部６に供給することにより加算演算を行わせ、その加算結果を、結果レジスタの３２ビット領域Ｒ［１５：０］に格納する。
【００８６】
なお、時刻ｔ３及び時刻ｔ４の処理にて、キャリーＣｏがあった場合、データタイプ情報の設定によって処理が異なるため、以下に、それぞれの場合について説明する。
即ち、データタイプ情報が符号なしデータである場合、時刻ｔ３及び時刻ｔ４のいずれの加算演算でもキャリーＣｏが生じる可能性があるため、これらの加算結果に応じて、加算結果レジスタのビットＲ［４９］，Ｒ［４８］をそれぞれセットする。
【００８７】
また、データタイプ情報が符号付きデータである場合、時刻ｔ３の処理での加算結果がマイナスであれば、続く時刻ｔ４の処理での加算演算により、キャリーＣｏが生じた時には、加算結果レジスタのＲ［４８］以上のビット領域をすべて０クリアし、一方、時刻ｔ４の処理での加算演算により、キャリーＣｏが生じなかった時には、加算結果レジスタのＲ［４８］以上のビット領域をすべて１にセットする。
【００８８】
一方、時刻ｔ３の処理での加算結果がマイナスでなければ、続く時刻ｔ４の処理での加算演算により、キャリーＣｏが生じた時には、加算結果レジスタのＲ［４８］を１にセットし、これより上位のビット領域をすべて０クリアし、一方、時刻ｔ４の処理での加算演算により、キャリーＣｏが生じなかった時には、加算結果レジスタのＲ［４８］以上のビット領域をすべて０クリアする。
【００８９】
その後（時刻ｔ５〜ｔ６）、加算制御部３８は、部分積レジスタ３２に格納されている第４の部分積データＤｐ４（＝ＸＨ×ＹＨ）と、加算結果レジスタ３３の３２ビット領域Ｒ［６３：３２］を、加算部６に供給することにより、加算演算を行わせ、その加算結果を、加算結果レジスタ３３の３２ビット領域Ｒ［６３：３２］に格納する。これと同時に、既に確定している加算結果レジスタ３３の下位３２ビット領域Ｒ［３１：０］を、出力レジスタ３４に転送する。
【００９０】
これに続けて（時刻ｔ６以降）、加算結果レジスタ３３の残る上位３２ビット領域Ｒ［６３：３２］を、出力レジスタ３４に転送する。
なお、第１実施例にて説明されていないが、［表２］の設定に従って動作する場合（データ幅情報が３２ビット，且つエンディアン情報がリトルエンディアン）も、時刻ｔ５〜ｔ６では、加算部６での加算処理と同時に、既に確定している加算結果レジスタ３３の下位ビット領域Ｒ［３１：０］を出力レジスタ３４に転送し、時刻ｔ６以降に、加算結果レジスタ３３の残る上位３２ビット領域Ｒ［６３：３２を出力レジスタ３４に転送する。
【００９１】
また、［表１］の設定に従って動作する場合（データ幅情報が１６ビット）、部分積レジスタ３２の格納値がそのまま出力レジスタ３４に転送されることになる。
そして、入出力制御部３６は、データ幅情報が３２ビットである場合、出力レジスタ３４に格納された６４ビットの乗算結果データＺを、エンディアン情報がビッグエンディアンであれば、Ｚ［６３：４８］，Ｚ［４７：３２］，Ｚ［３１：１６］，Ｚ［１５：０］の順に１６ビットずつデータバスＢに出力し、一方、エンディアン情報がリトルエンディアンであれば、逆に、Ｚ［１５：０］，Ｚ［３１：１６］，Ｚ［４７：３２］，Ｚ［６３：４８］の順に１６ビットずつデータバスＢに出力する。
【００９２】
また、入出力制御部３６は、データ幅情報が１６ビットである場合、出力レジスタ３４に格納された３２ビットの乗算結果データＺを、エンディアン情報がビッグエンディアンであれば、Ｚ［３１：１６］，Ｚ［１５：０］の順に１６ビットずつデータバスＢに出力し、一方、エンディアン情報がリトルエンディアンであれば、逆に、Ｚ［１５：０］，Ｚ［３１：１６］の順に１６ビットずつデータバスＢに出力する。
【００９３】
以上、説明したように、本実施形態の乗算装置２ａでは、データ幅情報の設定が３２ビットである場合、エンディアン情報に従って、乗算部４へのデータ対Ｄａ，Ｄｂの供給順序を変更し、エンディアン情報がリトルエンディアンであれば、図４及び図１１（ａ）に示すように、▲１▼ＸＬ×ＹＬ，▲２▼ＸＨ×ＹＬ，▲３▼ＸＬ×ＹＨ，▲４▼ＸＨ×ＹＨの順に部分積を求め、一方、エンディアン情報がビッグエンディアンであれば、図１０及び図１１（ｂ）に示すように、▲１▼ＸＬ×ＹＨ，▲２▼ＸＨ×ＹＬ，▲３▼ＸＬ×ＹＬ，▲４▼ＸＨ×ＹＨの順に部分積を求めるようにされている。
【００９４】
従って、本実施形態の乗算装置２ａによれば、エンディアン情報の設定がいずれの場合でも、データバスＢを介して被乗数データＸに続けて入力される乗数データＹの先行１６ビットのデータ（リトルエンディアンでは下位ブロックＹＬ，ビッグエンディアンでは上位ブロックＹＨ）が入力されると、４番目のデータ（即ちリトルエンディアンでは上位ブロックＹＨ，ビッグエンディアンではブロックＹＬ）の入力を待たずに乗算部４へのデータ対Ｄａ，Ｄｂの供給を開始することができる。
【００９５】
その結果、本実施形態の乗算装置２ａでは、エンディアン情報の設定によらず、データバスＢを介したデータ入力と乗算部４での演算との同時実行が常に可能であり、被乗数データＸと乗数データＹとの乗算を高速に行うことができる。
なお、本実施形態では、エンディアン情報を、専用の指定用信号線Ｅを用いて設定しているが、図１２に示すように、制御部８ａ内に記憶手段としての情報設定レジスタ３９を設け、データバスＢを介して情報設定レジスタ３９への設定を行い、情報設定レジスタ３９の設定値をエンディアン情報とするように構成してもよい。この場合、指定用信号線Ｅを省略できるため、制御部８ａに接続すべき信号線の数を減少させることができ、制御部８ａ周辺の回路構成を簡易化できる。
【００９６】
また、本実施形態では、乗算命令ＭＵＬを、データバスＢ経由で入力しているが、専用の信号線を用いて、命令解析部３５に直接入力するよう構成してもよい。
更に、上記実施形態では、被乗数データＸ及び乗数データＹのビット幅を、１６ビット／３２ビットのいずれかに切り替えるよう構成したが、これらに限らず、８ビットや６４ビット等、乗算部４への入力データＤａ，Ｄｂのビット幅の２ｎ  倍、１／２ｎ  倍のデータ幅を有するデータについて演算できるように構成してもよい。
【００９７】
また更に、本実施形態では、被乗数データＸ及び乗数データＹを格納するデータレジスタ３１と、乗算結果データＺを格納する出力レジスタ３４とを別々に構成したが、被乗数データＸ及び乗数データＹの格納用、及び乗算結果データＺの格納用のいずれにも使用する単一のレジスタを設けてもよい。即ち、被乗数データＸ及び乗数データＹは、後から読み出すようなことがないため、これらに乗算結果データＺを上書きしてしまっても問題がないためである。
【００９８】
また、本実施形態では、加算結果レジスタＲを６４ビットにて構成しているが、値が確定したビット領域の値を、確定した時点で出力レジスタＺに順次転送することにより、加算結果レジスタＲを３２ビットにて構成してもよい。
このように加算結果レジスタＲを３２ビットにて構成した場合、具体的には、図３及び図９に示した処理の流を、以下のように修正すればよい。即ち、図３に示す流れで処理を行っている場合、時刻ｔ１の乗算部４での乗算結果データＤｂのうち、上位１６ビットを加算結果レジスタＲ［１５：０］に、下位１５ビットを出力レジスタＺ［１５：０］に転送すると共に、時刻ｔ４での加算部６での加算結果データＤｍの上位１５ビットを加算結果レジスタＲ［１５：０］に、下位１５ビットを出力レジスタＺ［３１：１６］に転送するようにすればよい。なお、加算部６からのキャリーＣｏは、専用のレジスタに別途記憶させ、次の加算時に一緒に加算すればよい。一方、図９に示す流れで処理を行っている場合、時刻ｔ４の加算部６での加算結果データＤｍを、そのまま出力レジスタＺ［３１：０］に転送すると共に、加算結果レジスタに残されている上位１６ビットＲ［３１：１６］にキャリーＣｏを加算し、その結果を下位１７ビットＲ［１６：０］（上位１５ビットＲ［３１：１７］は全て０）に置き換えるようにすればよい。
【００９９】
また、本実施形態では、乗算命令ＭＵＬのデータ幅情報が１６ビットである場合、ＸＨレジスタ，ＹＨレジスタを使用しないように構成したが、これを使用するように構成してもよい。
この場合、データ幅情報が１６ビットの時には、入出力制御部３６が、乗算命令ＭＵＬに続いて入力される各１６ビット幅の２つのデータを、データレジスタ３１の各レジスタに、ＸＬレジスタ→ＹＬレジスタの順で格納すると、データレジスタ３１が、データタイプ情報に従って、自動的に符号拡張を行うようにすればよい。即ち、データタイプ情報が符号なしデータの場合には、ＸＨレジスタ，ＹＨレジスタの内容を０クリアし、符号付きデータの場合には、ＸＬレジスタ，ＹＬレジスタの最上位ビットの値に従って、符号拡張した値をＸＨレジスタ，ＹＨレジスタに自動的に設定するようにすればよい。これにより、乗算部４及び加算部６を、データ幅情報によらず、常にデータ幅情報が３２ビットの時と全く同様に動作させることができる。
【０１００】
また、この場合、被乗数データＸ及び乗数データＹが８ビット同士である場合には、同様に乗算を実行することができる。即ち、入出力制御部３６が、乗算命令ＭＵＬに続いて入力される各８ビット幅の２つのデータを、データレジスタ３１の各レジスタにＸＬレジスタ→ＹＬレジスタの順に、しかも下位側８ビットに格納する。すると、データレジスタ３１が、データタイプ情報に従って、符号なしデータであれば、ＸＬレジスタの下位から８ビット目の値に従って符号拡張した値を、ＸＨレジスタ，ＸＬレジスタの上位８ビットに設定すると共に、ＹＬレジスタの下位から８ビット目の値に従って符号拡張した値を、ＹＨレジスタ，ＹＬレジスタの上位８ビットに設定するようにすればよい。また、乗算部４が、入力データＤａ，Ｄｂを符号拡張する機能を有している場合には、上述のようにデータレジスタ３１にて符号拡張を行うのではなく、乗算部４の符号拡張機能を用いるようにすればよい。
【図面の簡単な説明】
【図１】第１実施形態の乗算装置の全体構成を表すブロック図である。
【図２】乗算部の構成を表すブロック図である。
【図３】各部の動作の流れ、及び各部間で入出力されるデータを表す説明図である。
【図４】３２ビット符号付き乗算処理の概要を表す説明図である。
【図５】第２実施形態における乗算部の構成を表すブロック図である。
【図６】変形例における乗算処理の概要を表す説明図である。
【図７】第３実施形態の乗算装置の全体構成を表すブロック図である。
【図８】第３実施形態における制御部の構成を表すブロック図である。
【図９】乗算制御部及び加算制御部での処理の概要を表す説明図である。
【図１０】ビッグエンディアン時の部分積の算出順、及び加算時の桁合わせの様子を表す説明図である。
【図１１】各部の動作タイミングを表す説明図である。
【図１２】変形例の乗算装置の全体構成を表すブロック図である。
【図１３】１６ビット乗算処理を行う従来装置の構成を表すブロック図である
【図１４】従来装置を用いて行う３２ビット乗算処理の概要を表す説明図である。
【図１５】エンディアンの違い基づく動作の相違を表す説明図である。
【符号の説明】
２…乗算装置、４，４ａ…乗算部、６…加算部、８，８ａ…制御部、１０，２０…乗算器、１２，１４…絶対値変換部、１６…符号計算部、１８…補数変換部、２２，２４…符号拡張部、３１…データレジスタ、３２…部分積レジスタ、３３…加算結果レジスタ、３４…出力レジスタ、３５…命令解析部、３６…入出力制御部、３７…乗算制御部、３８…加算制御部、３９…情報設定レジスタ
【図１】
0003614065.tif 000006
【図２】
0003614065.tif 000007
【図３】
0003614065.tif 000008
【図４】
0003614065.tif 000009
【図５】
0003614065.tif 000010
【図６】
0003614065.tif 000011
【図７】
0003614065.tif 000012
【図８】
0003614065.tif 000013
【図９】
0003614065.tif 000014
【図１０】
0003614065.tif 000015
【図１１】
0003614065.tif 000016
【図１２】
0003614065.tif 000017
【図１３】
0003614065.tif 000018
【図１４】
0003614065.tif 000019
【図１５】
0003614065.tif 000020