JPH0822451A - 演算器およびマイクロプロセッサ - Google Patents

演算器およびマイクロプロセッサ

Info

Publication number
JPH0822451A
JPH0822451A JP6157566A JP15756694A JPH0822451A JP H0822451 A JPH0822451 A JP H0822451A JP 6157566 A JP6157566 A JP 6157566A JP 15756694 A JP15756694 A JP 15756694A JP H0822451 A JPH0822451 A JP H0822451A
Authority
JP
Japan
Prior art keywords
register
multiplier
bit
partial product
multiplicand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP6157566A
Other languages
English (en)
Other versions
JP3579087B2 (ja
Inventor
Hidehito Takewa
秀仁 武和
Shigeru Matsuo
松尾  茂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP15756694A priority Critical patent/JP3579087B2/ja
Publication of JPH0822451A publication Critical patent/JPH0822451A/ja
Application granted granted Critical
Publication of JP3579087B2 publication Critical patent/JP3579087B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443—Sum of products
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804—Details
    • G06F2207/3808—Details concerning the type of numbers or the way they are handled
    • G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

(57)【要約】 【目的】複数の積和演算を同時に実行できる高速の積和
演算器を提供すること。 【構成】100のようにパックされた2つの被乗数a
1、a2と、101のようにパックされた2つの乗数b
1、b2とを、それぞれ入力し、乗算「a1×b1」と乗
算「a2×b2」を分離して演算する部分積加算器104
と、105のようにパックされた2つの加数c1、c2
を入力し、この入力を、桁合わせする「シフト アンド
セレクタ」107と、部分積加算器104の2出力と
107の出力を加算し、演算「a1×b1+c1」と演算
「a2×b2+c2」とを分離して演算する3入力全加算
器列108と64ビット加算器109と、を有して構成
される。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、画像処理等において用
いられる積和演算等の演算処理を高速に行う手段に関す
る。
【0002】
【従来の技術】従来、イメージ処理(画像処理)の分野
においては、演算処理を行なう際に、高速、高精度等
の、高度の演算性能が要求されるため、演算処理を行な
うためには、処理内容に応じて、演算処理のための専用
演算器を製作し、イメージ処理に応用してきた。
【0003】このような専用演算器を、イメージ処理の
内容に応じて製作し、イメージ処理を行なうシステムを
設計製造するのでは、システムのコストの上昇を招いて
しまう。
【0004】一方、比較的低コストでシステム構築を行
なえ、イメージ処理に応用可能な、汎用プロセッサの性
能は向上してきたが、イメージ処理のすべてを、汎用プ
ロセッサ内に内蔵された演算器で行なうほど、汎用プロ
セッサ内に内蔵された演算器の処理速度や処理内容は優
れたものではない。
【0005】ところで、イメージ処理で頻繁に行なわれ
る演算処理である、いわゆる積和演算は、乗算器と加算
器とを、適宜組み合わせて構成した演算器で実行可能で
ある。
【0006】このような従来の演算器において、与えら
れた2つの数の乗算を行なう乗算器は、部分積の生成機
能と部分積の加算機能とを有する。
【0007】ここで、図19を参照して、部分積の生成
と部分積加算を具体例に説明する。
【0008】ここで、乗算に用いるデータのビット数
は、5ビットとする。
【0009】「部分積」は、乗数1901のビットを1
ビットずつ調べ、ビットの内容が「1」であれば、被乗
数1900の値、そのものであり、ビットの内容が
「0」であれば、部分積を「0」とする。
【0010】ただし、乗数1901の符号ビットで生成
される部分積は、符号ビットの内容が「1」ならば、被
乗数1901のビット反転の値と加算1とし、符号ビッ
トが「0」ならば「0」とする。
【0011】図19において、部分積は、矩形で囲んで
表現しており、その内容を矩形内に示している。
【0012】5ビットの乗算においては、乗数のビット
数は5(ビット)あるので、図19に示すように、5個
の部分積が生成される。図に示した演算例では、部分積
1(1902)と、部分積2(1903)とは、その生
成の際に、調べる対象となるビットの内容が「1」であ
るので、被乗数1900そのものとなる。
【0013】また、部分積3(1904)と、部分積4
(1905)とは、生成の際に、調べる対象となるビッ
トの内容が「0」であるため「0」となり、部分積5
(1906)は、乗数の符号ビットで生成され、かつ、
生成の際に調べる対象となる符号ビットが「1」である
ため、被乗数の負数となる。
【0014】また、各部分積の加算は、乗数の下位ビッ
トからの生成順に、部分積を1ビットずつ上位(左)に
シフトしていき加算する。また、乗数、被乗数が、負数
でも表現されている、いわゆる、2の補数表現のとき、
部分積加算を正しく実行するには、符号を拡張(以下
「符号拡張」と称する)して加算しなければならない。
【0015】図19に示す例では、部分積1では、4ビ
ット拡張(1907)し、部分積2では、3ビット拡張
(1908)し、部分積3では、2ビット拡張(190
9)し、部分積4では、1ビット拡張している(191
0)。このような符号拡張により、正確な部分積加算を
実行できる。
【0016】通常、この部分積加算は、図20に示すよ
うな、桁上げ保存加算器と、桁上げ伝播加算器を使用し
て行なわれる。図20に示す部分積加算器は、3入力全
加算器を配列して構成される桁上げ保存加算器である。
【0017】ここで部分積加算器の基本構成要素とな
る、3入力全加算器の動作を図21に示す。
【0018】3入力全加算器は、入力の3ビット(21
00、2101、2102)を加算して、桁上げ210
4と和2103を出力する。
【0019】図21に示すように、3つの値を入力し、
所定の場合には、桁上げ出力(2104)を行なって、
加算(2103)を行なっている。
【0020】図20に示す、桁上げ保存機能を有する加
算器である全加算器(2000、2001、2002、
2003、2004)では、図19に示す部分積1〜3
を入力して、入力された部分積の加算を実行する。各全
加算器によって行なわれる加算の結果の「桁上げ」は、
次段の一桁上位の全加算器に、「和」は、次段の同じ桁
の全加算器(2010、2011等)に入力し、図19
に示す部分積4との加算を行なう。さらに、その結果
は、部分積5の加算に使用する全加算器(2012等)
に入力され、加算される。
【0021】部分積5は、被乗数の値を反転させて、
「1」を加算する必要があるので、全加算器2012の
入力2013は、1を加算するための入力として使用す
る。
【0022】一例として、1段目の全加算器2000
は、部分積1の拡張符号2005(値は「1」)と、部
分積2の拡張符号2006(値は「1」)と、部分積3
の符号2007(値は「0」)を入力し、加算を行な
う。
【0023】そして、加算結果の桁上げ2008を、次
段の一桁上位の全加算器2010に入力し、和2009
を次段の同じ桁の全加算器2011に入力する。
【0024】全加算器2010は、部分積1〜部分積3
の拡張符号の加算結果の桁上げと和とを入力し、加算を
行なう。その入力信号を生成する全加算器2014は、
全加算器2000と同一の計算を行うので、全加算器2
000の加算結果2009を、全加算器2010の入力
とする構成とし、その結果、全加算器2000より、上
位の桁の加算を行なう、即ち、左に存在する全加算器2
014は、省略されうる。
【0025】このように、桁上げ保存機能を有する加算
器は、「桁上げ」を次段に送って、加算を繰り返すた
め、全部分積の加算が終了しても、2024から203
8の2出力が残る。そのため、最終結果を得るために
は、さらに、その2出力を加算するために、図20に示
すような、いわゆる桁上げ伝播加算器が必要である。
【0026】図20に示す構成では、桁上げ伝播加算器
は、全加算器2015〜2022を有して構成される。
これらの全加算器間の接続は、一例として、全加算器2
016の桁上げ2023が、全加算器2015の入力と
なるような接続関係を有しており、文字通り桁上げ伝播
加算器を構成している。
【0027】
【発明が解決しようとしている課題】前述のように、例
えば図20に示す積和演算器においては、桁上げ保存機
能を有する加算器はもちろんのこと、桁上げ伝播加算器
をも設けて、積和演算器を実現しなければならなかっ
た。
【0028】このように、従来の専用演算器を使用して
演算を行なう場合においては、処理性能は満たされるも
のの、システムのコストの上昇を招くことがほとんどで
ある。一方、汎用演算器を使用したのでは、コストの上
昇は抑えられるものの、その処理性能は満足のいくもの
ではないという問題が依然として存在する。
【0029】しかしながら、汎用演算器の使用は、コス
トの低減のためには必要不可欠であるので、該汎用演算
器の処理性能の向上を図る必要がある。
【0030】そこで、本発明の目的は、汎用プロセッセ
が備える汎用演算器のうち、イメージ処理等で頻繁に使
用される積和演算器の一部を独立に動作させる手段を設
けることで、複数の積和演算を同時に行い、コストを抑
えた、演算速度の速い、高性能のイメージ処理等に使用
可能な演算手段を提供することにある。
【0031】
【課題を解決するための手段】上記課題を解決し、本発
明の目的を達成するために、以下の手段が考えられる。
【0032】複数の被乗数を有するNビットの数と、前
記各被乗数に対応する乗数を複数有するMビットの数と
の積を求めることによって、被乗数と乗数の組に対する
乗算結果を求める演算器であって、以下の手段を備える
演算器である。
【0033】すなわち、被乗数を複数個保持し、各被乗
数のビット長の総和がNを越えないことを条件として配
置され、各被乗数の間に0を埋め込んだ状態で、Nビッ
トの数を保持する第1レジスタと、前記各被乗数に対応
する乗数を保持し、各乗数のビット長の総和がMを越え
ないことを条件として配置され、各乗数の間に0を埋め
込んだ状態で、Mビットの数を保持する第2レジスタ
と、第1レジスタに保持された値と第2レジスタに保持
された値との部分積を求めていく処理を行う部分積処理
部と、前記部分積において、1組の被乗数と乗数の、乗
算結果の符号を補償するため、乗算結果を2の補数表現
したビットを埋込む符号拡張部と、各部分積の和を順次
求めていく手段であって、ある組の被乗数と乗数に対す
る全ての部分積の総和が所定値を越えた場合、該越えた
値を、次の他の組の被乗数と乗数に対する部分積の総和
を求めていく際に廃棄する、各部分積の総和値を求める
総和手段と、該手段によって求めた、総和値(「N+
M」(ビット))のデータから、第1レジスタにおける
各被乗数と、これに対応する第2レジスタにおける乗数
との乗算結果である値を切り出し、被乗数と乗数との組
に対応する乗算結果を、各組について求める処理手段と
を備える。
【0034】
【作用】本発明は、汎用の積和演算器であって、入力レ
ジスタ等に格納された各データに対する乗算を分離して
同時に行うための機能を有する部分積加算器と、各乗算
結果に対して、加算を分離して同時に行うための機能を
有する加算器を備えて、演算を行なう。
【0035】まず、第1レジスタに、被乗数を複数個保
持し、各被乗数のビット長の総和がNを越えないことを
条件として配置し、各被乗数の間に0を埋め込んだ状態
で、Nビットの数を保持しておく。そして、第2レジス
タには、前記被乗数に対応する乗数を複数個保持し、各
乗数のビット長の総和がMを越えないことを条件として
配置し、各乗数の間に0を埋め込んだ状態で、Mビット
の数を保持しておく。
【0036】次に、部分積処理部は、第1レジスタに保
持された値と第2レジスタに保持された値との部分積を
求めていく処理を行い、符号拡張部は、前記部分積にお
いて、1組の被乗数と乗数の、乗算結果の符号を補償す
るため、乗算結果を2の補数表現したビットを埋込む処
理を行なう。
【0037】そして、総和手段は、各部分積の和を順次
求めていき、ある組の被乗数と乗数に対する全ての部分
積の総和が所定値を越えた場合、該越えた値を、次の他
の組の被乗数と乗数に対する部分積の総和を求めていく
際に廃棄する、各部分積の総和値を求める。
【0038】最後に、処理手段が、総和手段によって求
めた、総和値(「N+M」(ビット))のデータから、
第1レジスタにおける各被乗数と、これに対応する第2
レジスタにおける乗数との乗算結果である値を切り出
し、被乗数と乗数との組に対応する乗算結果を、各組に
ついて求め、並列演算を実現する。
【0039】
【実施例】以下、本発明の実施例について図面を参照し
て説明する。
【0040】図1に、本発明にかかる実施例の構成図を
示す。
【0041】本実施例は、「a1×b1+c1」、「a
2×b2+c2」なる演算を同時に実行するための演算
器である。
【0042】演算器全体は、レジスタ100にパック
(データが詰めこまれた状態を、以下このように表現す
る)された、2つの被乗数a1、a2と、レジスタ10
1にパックされた、2つの乗数、b1、b2とを、それ
ぞれ入力102、103とし、これら入力に基づいて生
成した部分積を加算する機能を有する部分積加算器10
4を備える。
【0043】また、レジスタ105にパックされた、2
つの加数c1、c2を入力106とし、この入力データ
と、部分積加算器104の2出力である「a1×b
1」、「a2×b2」との加算を、正確な位取りで実行
するために、入力106の内容をシフトして、部分積加
算器104の前記2出力に桁合わせする機能を有する
「シフト アンド セレクタ」107と、部分積加算器
104の2出力と、「シフトアンド セレクタ」107
の出力を加算する機能を有する3入力全加算器列108
と、3入力全加算器列の2出力を加算する機能を有する
64ビット加算器109と、64ビット加算器109の
出力を、指定されたフォーマットに変換するアライナ1
10と、加算結果がオーバーフローであるか、または、
アンダーフローであるかを判定するオーバーフロー/ア
ンダーフロー判定部111と、その判定結果がオーバー
フローであれば、アライナ110の出力を最大値に、ま
た判定結果がアンダーフローであれば、アライナ110
の出力を最小値に置き換える最大値/最小値置換部11
2とを有して構成される。そして、最終的な演算結果
は、レジスタ150にパックされた状態で出力される。
【0044】図1の実施例において、「a1×b1+c
1」、「a2×b2+c2」なる積和演算を行なう際の
各構成要素の動作を、データ長32ビットのレジスタ
の、上位8ビットおよび下位8ビットに、2つのデータ
をパックした場合を例にとり説明する。
【0045】積和演算を行うデータは、図2に示すデー
タフォーマット200の様に、32ビットの上位8ビッ
トおよび下位8ビットに、2つのデータa1、a2をパ
ックし、その間に「0」値を埋め込んで、32ビットの
データとしている。
【0046】データb1、b2、c1、c2(図示せ
ず)も同様に、32ビットの上位8ビットおよび下位8
ビットに、2つのデータをパックし、その間に「0」値
を埋め込んで、32ビットのデータとしている。
【0047】データa1、a2をパックした32ビット
のデータと、データb1、b2をパックした32ビット
のデータとを、32ビットのデータ同士で乗算すること
によって、パックされた8ビットのデータ同士の乗算、
即ち、「a1×b1」と「a2×b2」を同時に実行す
るものである。
【0048】その際、32ビット乗算結果において、ど
の部分が乗算「a1×b1」と「a2×b2」に相当し
ているのかを図2に示している。なお、図2において、
各部分積は、横長の矩形で表現している。
【0049】さて、乗算「a1×b1」は、部分積25
(203)から部分積32(204)までの、各々の上
位15桁、また、乗算「a2×b2」は、部分積1(2
01)から部分積8(202)までの、各々の下位15
桁を使用して計算される。そのため、図面中黒く塗られ
た部分は、乗算「a1×b1」と「a2×b2」の符号
を拡張された部分となる。なお、符号拡張の概念につい
ては、前述の図19で示した通りである。
【0050】また、乗数データb1とb2と間に「0」
値が埋め込まれているため、それらのビット(値が
「0」)から生成される部分積9〜24は、必ず「0」
となる。そのため、全ての部分積を加算した時に、a2
×b2による部分積加算の結果による桁上げが伝播する
ことに起因する、乗算「a1×b1」への影響をなくす
ことができる。
【0051】また、部分積25の加算で使用される、部
分積25の32ビット用の符号拡張の加算分を「0」と
することで、32ビット乗算のための、符号拡張分の加
算(部分積1から8までに対応する加算)結果が、「a
1×b1」の演算結果への影響をなくすことができる。
【0052】これら2点の工夫により、「a1×b1」
と「a2×b2」を、分離した状態で演算することがで
きる。
【0053】次に、以上で説明した機能を有する部分積
加算器104の動作について、詳細に説明する。
【0054】図3は、乗算a2×b2の拡張符号の機能
を、汎用の部分積加算器によって実現した構成例であ
る。
【0055】図2に示すように、この乗算の拡張符号が
必要な範囲は、「部分積1」では、9桁目〜15桁目ま
で、「部分積2」では、10桁目〜15桁目まで、「部
分積3」では、11桁目〜15桁目まで、「部分積4」
では、12桁目〜15桁目まで、「部分積5」では13
桁目〜15桁目まで、「部分積6」では14桁目〜15
桁目まで、「部分積7」では15桁目である。
【0056】図3では、一例として、部分積3〜5に相
当する部分について図示した。
【0057】なお、各全加算器の動作は、図21に示す
通りである。
【0058】全加算器300から305は、部分積3の
15桁目から10桁目の加算に、全加算器306から3
11は、部分積4の15桁目から10桁目の加算に、全
加算器312から317は、部分積5の15桁目から1
0桁目の加算にそれぞれ使用される。
【0059】セレクタ318は、信号330が「1」な
らば、2入力331、332のうち、332の方を選択
する。他のセレクタ319〜321も、同様な動作をす
る。332は、乗算「a2×b2」の部分積3の符号で
あることから、信号330を「1」とすることで、符号
を表現するための信号332によって、符号拡張して、
全加算器によって部分積3を加算することができる。
【0060】セレクタ323〜326、セレクタ327
〜329も、信号330を「1」にすることによって、
それぞれ、部分積4と部分積5の符号333、334を
選択する。これにより、部分積4、部分積5について
も、符号拡張を行なった加算が実現できる。
【0061】そのほか、図3には示していないが、部分
積1、2、6、7に対しても、信号330によって、符
号拡張のための信号を選択するセレクタを、全加算器の
入力側に設けた構成にすることによって、乗算「a2×
b2」の部分積加算で、符号拡張した加算が実現できる
ことになる。
【0062】図22は、乗数b2の符号ビット(下位か
ら8つ目のビット)から、部分積8を生成するための、
汎用の部分積加算器の実現例である。全加算器2200
〜2207は、部分積8の下位8ビットの加算を行な
う。符号ビットから、部分積を生成するため、図19に
示したように、データを反転させて、「1」を加える処
理を実現するための構成である。
【0063】論理ゲート2208は、信号2225が
「1」のときに、入力2227を反転し、「0」のとき
には、入力2227の値に関係なく「1」を出力する機
能を有する。また、セレクタ2216は、信号2226
が「1」のとき論理ゲート2208の出力を選択し、信
号2226が「0」のとき、部分積8の下位から8ビッ
ト目のデータ2227を選択する機能を有する。
【0064】なお、「論理ゲート2208、セレクタ2
216」と、「論理ゲート2209〜2215と、セレ
クタ2217〜2223」とは、同じ動作をする。ま
た、セレクタ2224は、信号2226が「1」のとき
「1」を出力する。
【0065】論理ゲート2208〜2215と、セレク
タ2216から2224を用い、信号2226を「1」
にすることで、乗算「a2×b2」の部分積8の生成と
加算が実現できることになる。他の部分積も同様に生成
加算できる。このように、図3、図22に示す構成によ
り、乗算「a2×b2」の部分積加算の演算が実行でき
ることになる。
【0066】次に、図4に示す構成を有する手段によ
り、32ビット乗算を行なうための符号拡張分の加算
(部分積1から8までの加算)結果による、乗算「a1
×b1」への影響をなくすための機能を実現するが、こ
の動作について説明する。
【0067】まず、全加算器400〜407によって、
部分積25の32桁目〜25桁目(乗算「a1×b1」
の部分積1(図2中の部分積25))の値を加算する処
理を行なう。また、全加算器408〜414は、部分積
24までの加算結果を出力している。
【0068】論理ゲート415は、信号431が「0」
のとき、全加算器408の和433を「0」にする機能
を有する。同様に、論理ゲート416〜422も、信号
431が「0」のとき、全加算器409から414の和
を「0」にする機能を有する。また、論理ゲート423
は、信号431が「0」のとき、全加算器408の桁上
げ432を、「0」にする機能を有する。
【0069】同様に、論理ゲート424〜430も、信
号431が「0」のとき、全加算器409から414の
桁上げを「0」にする機能を有する。信号431が
「1」のときは、論理素子415〜430は、全加算器
408〜414からの、桁上げと和の値を、そのまま通
過させる機能を有する。
【0070】つまり、信号431を「0」にするこによ
って、部分積24までの加算結果と、部分積25との加
算処理を制御することができる。これにより、32ビッ
ト乗算のための符号拡張分の加算(部分積1から8まで
の加算)結果による、乗算「a1×b1」への影響をな
くすことが可能となる。
【0071】以上説明してきた、図3、図22、図4に
示す構成を有する手段を備えることにより、部分積加算
器104は、通常の32ビット乗算と同一の処理で、
「a1×b1」と「a2×b2」の2つの乗算の部分積
加算を、並列に実行することができる。
【0072】次に、「シフト アンド セレクタ」10
7は、「a1×b1+c1」、「a×b2+c2」の並
列実行を行なうことを指示するコントロール信号113
を受けとり、部分積加算器104の演算結果の、上位1
6桁と下位16桁に、それぞれc1とc2の位取りが正
しく合うように、図5の500に示すようにパックされ
たc1、c2を、501に示すようにシフト処理し、c
1とc2間に「0」を埋め込む。
【0073】「a1×b1+c1」、「a2×b2+c
2」の演算を、並列実行しないときには、シフトしない
状態の、500を選択する。
【0074】3入力全加算器列108は、図5に示すよ
うな、上位16桁と下位16桁に「a1×b1」と「a
2×b2」の部分積加算の、桁上げ保存加算器の出力5
03と、「シフト アンド セレクタ」107で選択さ
れた、入力501とを、桁上げ保存加算し、加算結果5
06を得る。「a1×b1+c1」、「a2×b2+c
2」の並列実行の場合、501において、c1とc2と
の間は、値「0」が埋っているため、a1×b1+c
1、a2×b2+c2の間の桁では桁上げが起きない。
その結果、c1、c2の加算は互いに影響しない。
【0075】図6に、並列に実行した演算結果が、オー
バーフローまたはアンダーフローであるかの判定を並列
に実行する、オーバーフロー/アンダーフロー判定部1
11の構成例を示す。
【0076】上位用判定部600、下位用判定部601
は、それぞれ、図5に示す506の上位16ビットと下
位16ビットを、予め定めている値である、8ビット用
上限値603、8ビット用下限値604と比較する処理
を行なう。
【0077】上位用判定部600は、図5に示す506
の上位16ビットの内容が、8ビット用上限値603よ
り大きな場合は、オーバーフローが発生したと判断し、
また、8ビット用下限値604より小さい場合は、アン
ダーフローが発生したと判断する。また、下位用判定部
601は、図5に示す506の下位16ビットの内容に
対し、上位用判定部600と同様の判断を行なう。
【0078】32ビット用判定部602は、506の下
位32ビットを、予め定めている値である、32ビット
用上限値605と32ビット用下限値606とを、それ
ぞれ用いて、32ビット乗算の場合のオーバーフロー、
アンダーフローが発生したか否かを判定する。なお、上
位用判定部600と、下位用判定部601とは、別々に
動作するので、上位と下位の16ビットの、オーバーフ
ロー、アンダーフローの判定は、並列に実行できる。
【0079】なお、上位用判定部600が出力する判定
信号607、608は、それぞれ、506の上位16ビ
ットがオーバーフロー、アンダーフローの時「1」とな
り、下位用判定部601が出力する判定信号609、6
10は、それぞれ、506の下位16ビットがオーバー
フロー、アンダーフローの時「1」となり、32ビット
用判定部602が出力する判定信号611、612は、
それぞれ、506の下位32ビットがオーバーフロー、
アンダーフローの時「1」となる。
【0080】これらの判定信号607から612は、判
定結果を最大値/最小値置換部112に送られる。
【0081】図7に、通常の積和演算の場合と、今まで
述べてきた、「a1×b1+c1」、「a2×b2+c
2」を求める並列演算を実行する場合の、2つの場合に
対応できるように、64ビット加算器109の出力状態
(701からのデータの取り出し方)を制御する機能を
有するアライナ110の構成図を示す。
【0082】セレクタ702は、データ719(701
の上位9ビット目から上位16ビット目までのデータ)
とデータ720(701の上位33ビット目から上位4
0ビット目までのデータ)との選択を、「a1×b1+
c1」および「a2×b2+c2」の並列演算実行時で
「0」となり、通常の積和演算時に「1」となる制御信
号723で行なう。
【0083】論理ゲート703〜718(計16個ある
が、複雑になるため図面では2個を記載し、あとは省略
してある)は、制御信号723で、データ721(70
1の下位24ビット目から下位9ビット目まで)を
「0」とする(図中、724で0値と記載している部
分)。
【0084】すなわち、「a1×b1+c1」、「a2
×b2+c2」の並列演算実行時は、制御信号723が
「0」となり、第1に、セレクタ702は、データ71
9を選択し、図中d1部は、データ719で満たされ、
第2に、論理ゲート713〜718は、アンドゲートで
あるので、データ721は「0」となる。また、データ
722は変化しないので、アライナの出力は、724の
ようになる。
【0085】一方、通常の積和演算時で、制御信号72
3が「1」となると、セレクタ702は、データ720
を選択し、さらに、データ721は、論理ゲート713
〜718を、そのまま通過する。また、データ722は
変化しないのでアライナの出力は725のようになる。
【0086】この結果、「a1×b1+c1」および
「a2×b2+c2」の並列演算実行時では、演算結果
d1、d2が、32ビットのレジスタに、724のよう
にパックされることになる。
【0087】次に、図8に、演算条件およびオーバーフ
ロー/アンダーフロー判定部111の判定結果と、最大
値/最小値置換部112の出力との関係を示す。
【0088】以下に、出力の態様を示す。
【0089】まず、図8中(1)に示す例では、「a1
×b1+c1」および「a2×b2+c2」の演算が同
時実行された場合で、上位側の結果が、オーバーフロー
と判定された時、出力の上位8ビットに、予め定めてお
いた値である最大値(max)を出力し、出力の下位8ビ
ットは、演算結果をそのまま出力する。
【0090】また、図8中(2)に示す例では、上位側
の結果がアンダーフローと判定された時、出力の上位8
ビットに、予め定めておいた値である最小値(min)を
出力し、出力の下位8ビットは、、演算結果をそのまま
出力する。
【0091】また、図8中(3)に示す例では、下位側
の結果が、オーバーフローと判定された時、出力の下位
8ビットに、予め定めておいた値である最大値(max)
を出力し、出力の上位8ビットは、演算結果をそのまま
出力する。
【0092】また、図8中(4)に示す例では、下位側
の結果がアンダーフローと判定された時、出力の下位8
ビットに、予め定めておいた値である最小値(min)を
出力し、出力の上位8ビットは、演算結果をそのまま出
力する。
【0093】さらに、通常積和実行時で、オーバーフロ
ーと判定された場合、32ビット全体に、予め定めてお
いた値である最大値を出力し(図8(5)の示す例)、
アンダーフローと判定された場合、32ビット全体に、
予め定めておいた値である最小値を出力することも考え
られる(図8(6))。
【0094】その他、「a1×b1+c1」および「a
2×b2+c2」の並列演算が実行された場合でも、通
常積和実行時でも、オーバーフローまたはアンダーフロ
ーとも判定されなかった場合には、入力値をそのまま出
力することも考えられる(図8(7)の例)。
【0095】次に、32ビットのすべてのビットにデー
タをパックした例、例えば、8ビットの画素データを4
個詰めて行う、並列積和演算器の実施例を図9を参照し
て説明する。
【0096】本実施例の構成は、パックされた4つの被
乗数a1、a2、a3、a4と、パックされた4つの乗
数b1、b2、b3、b4とから部分積を求め、加算す
る部分積加算器900と、パックされた4つの加数c
1、c2、c3、c4を、部分積加算器900の出力と
桁合わせする「シフト アンド セレクタ」901と、
部分積加算器900の2出力と「シフト アンド セレ
クタ」901の出力とを加算する機能を有する3入力全
加算器列902と、3入力全加算器列の2出力を加算す
る機能を有する64ビット加算器903と、該加算器の
出力を指定されたフォーマットに変換するアライナ90
4と、加算結果がオーバーフロー、アンダーフローであ
るか否かを判定するオーバーフロー/アンダーフロー判
定部905と、その結果に基づいて、予め定めた規則に
従って、前記アライナ904の出力を所定の値に置き換
える機能を有する最大値/最小値置換部906とを有し
て構成されている。
【0097】図9に示す実施例において、「a1×b1
+c1」、「a2×b2+c2」、「a3×b3+c
3」、「a4×b4+c4」の複数の積和演算を行なう
際の動作を、データ長32ビットに、8ビットデータを
4個を詰めた場合を例にとり説明する。
【0098】積和演算を行うデータは、図10に示す、
データフォーマット1000に示すように、4データ
「a1、a2、a3、a4」で32ビットのデータを構
成する。
【0099】a1、a2、a3、a4、また、c1、c
2、c3、c4についても、同様に、32ビットのデー
タとする。
【0100】「a1、a2、a3、a4」をパックした
32ビットデータと、「a1、a2、a3、a4」をパ
ックした32ビットデータにおいて、32ビットデータ
同士を乗算することで、8ビット同士の乗算「a1×b
1」、「a2×b2」、「a3×b3」、「a4×b
4」を同時に実行するものである。
【0101】その際、32ビットデータの乗算結果のど
の部分が、それぞれ乗算「a1×b1」、「a2×b
2」、「a3×b3」、「a4×b4」に相当するかに
ついて、図10を参照して説明する。
【0102】なお、図10において、各部分積は、矩形
で表現している。
【0103】乗算「a1×b1」、「a2×b2」、
「a3×b3」および「a4×b4」の各々の値は、そ
れぞれ、部分積25から32、部分積17から24、部
分積9から16、部分積1から8の加算によって求めら
れる。そのため、図中黒く塗られた部分は、乗算「a1
×b1」、「a2×b2」、「a3×b3」および「a
4×b4」の拡張符号となる部分である。
【0104】例えば、乗算「a4×b4」では、部分積
1では9桁目〜15桁目まで、部分積2では10桁目〜
15桁目まで、部分積3では11桁目〜15桁目まで、
部分積4では12桁目〜15桁目まで、部分積5では1
3桁目〜15桁目まで、部分積6では14桁目〜15桁
目まで、部分積7では15桁目が拡張符号となる部分で
ある。
【0105】また、前述した2乗算の並列演算と同様
に、部分積8、16、24、32は、符号ビットに相当
するため負数を作る必要がある。
【0106】1つの部分積の加算に使用される32個の
全加算器のうちの8個に、図22に示される示される論
理ゲート2208〜2215とセレクタ2216〜22
24と同じものを、全加算器2200〜2207と同じ
接続関係で、追加することによって、負数の部分積の生
成と加算が実現できる。論理ゲートとセレクタが追加さ
れる全加算器は、部分積8については、下位1ビット目
〜8ビット目、部分積16については、9ビット目〜1
6ビット目、部分積24については、17ビット目〜2
4ビット目に、部分積32については、25ビット目〜
35ビット目に対応する全加算器である。
【0107】32ビット乗算の部分積加算で、部分積8
と9、部分積16と17、部分積24と25の間で、加
算結果の伝播をさせないようにする必要がある。また、
部分積9〜16においては、下位8ビット(図中の斜線
部分)を「0」とし、部分積17〜24においては、下
位16ビット(図中の斜線部分)を「0」とし、部分積
25〜32においては、下位24ビット(図中の斜線部
分)を「0」とする。こらの機能により、4つの乗算の
部分積加算の結果は、他と影響しあわず、そのため、4
つの乗算の部分積加算が、並列に実行することができ
る。
【0108】次に、図11に、4つの乗算の部分積加算
の結果が、他と影響しあわない、部分積加算器の一部を
例示する。
【0109】図11に、部分積8の加算結果を、部分積
9の加算へ伝播させない機能と、部分積9の下位8ビッ
トを「0」にして、部分積1〜8までの加算結果を壊さ
ない機能を実現する回路構成例を示す。
【0110】全加算器1100〜1107によって、部
分積8の13ビット目から6ビット目までに対する加算
処理を行なう。
【0111】また、全加算器1108〜1115によっ
て、部分積9の13ビット目から6ビット目までに対す
る加算処理を行なう。論理ゲート1116、1120
は、信号1133を「0」にすることによって、部分積
8の加算結果1128、1129を全加算器1108に
入力するのを阻止する機能を有する。論理ゲート111
7〜1119、1120〜1123も、同様な動作を行
ない、対応する全加算器への加算結果の入力を阻止する
機能を有する。
【0112】なお、信号1133は、4乗算を並列に実
行するとき「0」となる。
【0113】そのため、全加算器1108には、「0」
が入力され、部分積9と加算される。これにより、部分
積8の加算結果は、部分積9の10ビット目からの加算
に使用ができなくなることになる。
【0114】論理ゲート1124は、信号1142によ
り部分積9の8ビット目に対して加算処理を行なう全加
算器1112への入力を阻止する機能を有する。同様
に、論理ゲート1125〜1127も、信号1133の
入力により、同様の阻止動作をする。
【0115】信号1142は、4乗算の並列演算のとき
「0」となる。そのため、部分積9の8ビットより下位
は、「0」となる。
【0116】これらの構成により、信号1133、11
42と、論理ゲート1016〜1127を用いて、部分
積8までの加算と、部分積9の加算とを分離することが
できる。同様に、部分積16と部分積17、部分積24
と部分積25の分離も実現できる。したがって、この部
分積加算器では、4つの乗算の部分積加算の並列演算が
実行できる。
【0117】また、「シフト アンド セレクタ」90
1は、「a1×b1+c1」、「a2×b2+c2」、
「a3×b3+c3」、および「a4×b4+c4」を
並列実行する旨の制御信号を受けとって、部分積加算器
の結果の上位から16桁ごとに出力される「a1×b
1」、「a2×b2」、「a3×b3」、および「a4
×b4」のそれぞれに対し、加算値、c1、c2、c
3、c4との位取りが正しく合わさるようにする。
【0118】そのため、図12の1200に示すように
パックされた、c1、c2、c3、c4を、1201に
示すように、c1の1ビット目が49桁目に、c2の1
ビット目が33桁目に、c3の1ビット目が17桁目
に、c4の1ビット目が1桁目にくるように、c1、c
2、c3をシフトする。また、1201において、c
1、c2、c3、c4のデータの存在しない部分には、
値「0」を埋めておく。なお、「a1×b1+c1」、
「a2×b2+c2」を並列演算実行しないときには、
1200に示すようにパックされたデータをシフトしな
い。
【0119】図13に、上位から16ビット単位に「a
1×b1」、「b2×b2」、「a3×b3」、「a4×
b4」の4つの並列乗算の結果(和と桁あげ)と、「シ
フトアンド セレクタ」で選択された入力の3入力を加
算し、和と桁上げの2出力の加算結果を得る3入力全加
算器列902の構成の一部を示す。
【0120】全加算器1300と全加算器1301は、
「a3×b3+c3」の演算結果を求める際、下位2ビ
ットの演算に使用される。全加算器1302と全加算器
1303は、「a4×b4+c4」の演算結果を求める
際、上位2ビットの演算に使用される。
【0121】論理素子1304は、「a1×b1+c
1」、「a2×b2+c2」、「a3×b3+c3」、
「a4×b4+c4」の並列演算を実行する時に「0」
となる信号1305によって、全加算器1302の桁上
げ1306を阻止する。
【0122】図では、「a3×b3+c3」と「a4×
b4+c4」を演算する手段の中間部の構成を示した
が、「a1×b1+c1」と「a2×b2+c2」を演
算する手段の中間部、「a2×b2+c2」と「a3×
b3+c3」を演算する手段の中間部にも、同様の構成
の論理回路を設け、桁上げを阻止する。
【0123】これにより、「a1×b1+c1」、「a
2×b2+c2」、「a3×b3+c3」、「a4×b
4+c4」の並列演算を実行しても、4演算間での桁上
げによる影響をなくすことができる。また、各乗算の境
界において生じた桁上げは、オーバーフロー/アンダー
フローの判定に使用するため、オーバーフロー/アンダ
ーフロー判定部に送る。
【0124】図14に、「a1×b1+c1」、「a2
×b2+c2」、「a3×b3+c3」、「a4×b4
+c4」の積和演算の、各乗算値の境界での桁上げの阻
止機能を有する64ビット加算器の構成の一部を示す。
全加算器1400と1401は、「a3×b3+c3」
の演算結果を求める際、下位2ビットの演算に使用され
る。
【0125】全加算器1402と全加算器1403は、
「a4×b4+c4」の演算結果を求める際、上位2ビ
ットの演算に使用される。論理ゲート1404は、「a
1×b1+c1」、「a2×b2+c2」、「a3×b
3+c3」、および「a4×b4+c4」の並列演算を
実行する時に「0」となる信号1405によって、全加
算器1402の桁上げ1406を阻止する。
【0126】図14では、「a3×b3+c3」、「a
4×b4+c4」を演算する手段の中間部の構成を示し
たが、「a1×b1+c1」と「a2×b2+c2」を
演算する手段の中間部、「a2×b2+c2」と「a3
×b3+c3」を演算する手段の中間部にも、同様の構
成の論理回路を設け、桁上げを阻止する。
【0127】これにより、「a1×b1+c1」、「a
2×b2+c2」、「a3×b3+c3」、「a4×b
4+c4」の並列演算を実行しても、4演算間で、桁上
げによる他の演算結果への影響をなくすことができる。
また、各演算の境界に生じた桁上げは、オーバーフロー
/アンダーフローの判定に使用するために、オーバーフ
ロー/アンダーフロー判定部に送る。
【0128】次に、図15に、オーバーフロー/アンダ
ーフロー判定部の構成を示す。
【0129】1500、1501、1502、1503
は、それぞれ「a1×b1+c1用判定部」、「a2×
b2+c2用判定部」、「a3×b3+c3用判定
部」、「a4×b4+c4用判定部」である。
【0130】1307〜1310は、「a1×b1+c
1」、「a2×b2+c2」、「a3×b3+c3」、
「a4×b4+c4」の演算を並列実行した3入力全加
算器列902によって求められる、各演算結果間におけ
る桁上げデータである。
【0131】1407〜1410は、「a1×b1+c
1」、「a2×b2+c2」、「a3×b3+c3」、
「a4×b4+c4」の演算を並列実行した64ビット
加算器903によって求められる、各演算結果間におけ
る桁上げデータである。
【0132】各判定部は、対応する演算の桁上げデータ
2つと、64ビット加算器903の出力の対応する演算
結果とから、8ビットに演算精度を制限していない演算
結果を生成し、予め定めてある、8ビット用上限値およ
び8ビット用下限値とを比較して、演算結果がオーバー
フローとなるか、あるいは、アンダーフローとなるかを
判定し、判定結果を出力する。
【0133】例えば、「a1×b1+c1用判定部」1
500は、桁上げ1307と、1407を加算する。
【0134】その加算結果1504と、64ビット加算
器の出力の下位16ビット1505とを、1504が上
位にくるように連結し、18ビットの演算結果を生成す
る。
【0135】新しくできた演算結果1506と、予め定
めてある、8ビット用上限値および8ビット用下限値と
を比較してオーバーフローとアンダーフローを判定し、
判定結果1507を出力する。同様に、判定部150
1、1502、1503も、オーバーフロー、アンダー
フローの判定を行ない、判定結果をそれぞれ、150
8、1509、1510として出力する。
【0136】また、32ビット用判定部は、64ビット
加算器の出力の下位32ビットを、予め定めた32ビッ
ト用上限値および32ビット用下限値と比較し、演算結
果のオーバーフロー、アンダーフローを判定し、判定結
果1511を出力する。
【0137】次に、図16に、通常の積和演算の場合
と、今まで述べてきた「a1×b1+c1」、「a2×
b2+c2」、「a3×b3+c3」、および「a4×
b4+c4」の並列演算実行の場合の、2つ場合に対応
できるように、64ビット加算器903の出力状態(1
601からのデータの取り出し方)を制御する機能を有
するアライナ904の構成図を示す。 信号1600
は、「a1×b1+c1」、「a2×b2+c2」、
「a3×b3+c3」、および「a4×b4+c4」の
並列演算実行時で「0」となり、通常の積和演算時に
「1」となる信号である。
【0138】セレクタ1608は、データ1602(1
601の下位56ビット目から下位49ビット目)とデ
ータ1603(1601の下位32ビット目から下位2
5ビット目)のうち、信号1600が「1」のときデー
タ1603選択し、また、信号1600が「0」のとき
データ1602を選択する。また、セレクタ1609
は、データ1604(1601の下位40ビット目から
下位33ビット目)とデータ1605(1601の下位
24ビット目から下位17ビット目)のうち、信号16
00が「1」のときデータ1605を選択し、また、信
号1600が「0」のときデータ1604を選択する。
【0139】さらに、セレクタ1610は、データ16
05(1601の下位24ビット目から下位17ビット
目)とデータ1606(1601の下位16ビット目か
ら下位9ビット目)のうち、信号1600が「1」のと
きデータ1606を選択し、また、信号1600が
「0」のときデータ1605を選択する。
【0140】なお、データ1607(1601の下位8
ビットのデータ)は、信号1600による選択制御を行
なわない。この結果、「a1×b1+c1」、「a2×
b2+c2」、「a3×b3+c3」、および「a4×
b4+c4」の並列演算実行時では、信号1600が
「0」となるので、レジスタの領域d1、d2、d3、
d4のそれぞれに、データ1602、1604、160
5、1607が格納され、32ビットデータが、161
1に示すようにパックされる。また、通常の積和演算で
は、データ1603、1605、1606、1607が
格納され、1612に示すような32ビットデータが格
納される。
【0141】64ビット加算器の出力は、図16に示す
アライナで、信号1600が、並列積和演算示す場合、
即ち信号1600が「0」のときは1611、通常の3
2ビット積和演算の場合、即ち信号1600が「1」の
ときは1612のように、32ビットのデータに変換さ
れる。
【0142】次に、最大値/最小値置換部906は、オ
ーバーフロー/アンダーフロー判定部905からの判定
信号を受けて、「a1×b1+c1」、「a2×b2+
c2」、「a3×b3+c3」、「a4×b4+c4」
の並列演算実行時では、各演算結果に対して、所定の処
理を行なう。
【0143】所定の処理としては、例えば、判定結果が
オーバーフローであれば、演算結果を、予め定めた、8
ビットで表わされる最大値に置き換え、判定結果がアン
ダーフローであれば、演算結果を、予め定めた、8ビッ
トで表わされる最小値に置き換え、また、いずれでもな
ければ、演算結果を置き換えずにそのまま出力する処理
が考えられる。
【0144】また、通常の積和演算時には、判定結果が
オーバーフローであれば、演算結果を、予め定めた、3
2ビットで表わされる最大値に置き換え、判定結果がア
ンダーフローであれば、演算結果を、予め定めた、32
ビットで表わされる最小値に置き換え、いずれでもなけ
れば、演算結果を置き換えずにそのまま出力する処理を
すればよい。
【0145】上述のような構成により、「a1×b1+
c1」、「a2×b2+c2」、「a3×b3+c
3」、および「a4×b4+c4」の各演算が分離して
行なえ、32ビットの汎用の積和演算器を使用して、
「a1×b1+c1」、「a2×b2+c2」、「a3
×b3+c3」、および「a4×b4+c4」の各演算
の並列実行が可能となる。
【0146】もちろん、演算ビット数を考慮して本発明
の技術的思想を適用することにより、本実施例により示
した「32ビット×32ビット」の部分積和演算のみな
らず、他のビット数での部分積和演算を実行することが
できる。
【0147】図17は、本発明にかかる積和演算器、ま
たは、乗算器を備えるマイクロプロセッサに対する命令
コードの態様である。オペコード1700〜1703
は、演算の種類によって定義される。また、オペランド
1704〜1707は、演算に使われるデータのソース
レジスタとターゲットレジスタを指定する。
【0148】オペコード1700と1702は、それぞ
れ並列演算を行ない、同時に、複数の乗算または積和演
算を行なうときに使用する。また、オペコード1701
と1703は、それぞれ、通常の乗算または積和演算を
行なうときに使用する。
【0149】2データの並列演算を例にとり説明する
と、オペコード1700「SplitMPY」は、a
1、a2がパックされているソースレジスタr1と、b
1、b2がパックされているソースレジスタr2に格納
されている、データa1、a2、b1、b2を使用し
て、乗算「a1×b1」および「a2×b2」を並列に
行ない、結果を、ターゲットレジスタr3に格納する命
令である。
【0150】また、オペコード1702「SplitM
PYADD」は、a1、a2がパックされているソース
レジスタr1と、b1、b2がパックされているソース
レジスタr2と、c1、c2がパックされているソース
レジスタr3(r3は、ターゲットレジスタを兼ねる)
に格納されている、データa1、a2、b1、b2、c
1、c2を使用して、積和演算「a1×b1+c1」お
よび「a2×b2+c2」を並列に行ない、結果を、タ
ーゲットレジスタを兼ねるレジスタr3に格納する命令
である。
【0151】なお、4データの並列演算も、データ数と
並列演算の実行数が異なるだけであり、同様に、命令コ
ードを設定することができる。
【0152】一方、オペコード1701「Connec
tMPY」は、1705に示されるレジスタr1とr2
の値(値を、それぞれR1、R2とする)を用いて、乗
算「R1×R2」を行ない、結果をレジスタr2に格納
する命令である。また、1703「ConnectMP
YADD」は、1707に示されるレジスタr1、r
2、r3の値(値を、それぞれR1、R2、R3とす
る)を用いて、積和演算「R1×R2+R3」を行な
い、結果を、ターゲットレジスタを兼ねるレジスタr3
に格納する命令である。
【0153】オペコード1703のみを有するアーキテ
クチャでは、「a1×b1+c1」および「a2×b2
+c2」の演算を実行する場合、2度命令する必要があ
るが、前述のように、オペコード1702を定義して、
並列演算させることにより、並列の積和演算「a1×b
1+c1」および「a2×b2+c2」を、1度の命令
で実行させることが可能となる。
【0154】また、乗算についても、同様に、オペコー
ド1700を定義することで、オペコード1701を使
用する場合に比べて、必要な命令数が少なくなる。
【0155】これによりプログラムが短くなり、プログ
ラムはメモリに記憶されるため、これらの命令を使用す
ればメモリの容量を少なくすることが可能となり、本発
明にかかる積和演算器等がマイクロプロセッサの構成要
素となるときに、有効である。
【0156】次に、図18に、本発明にかかる他の実施
例を示す。
【0157】図18は、本発明にかかる、乗算器(例え
ば、「a1×b1」なる演算を行なう手段)および積和演
算器(例えば、「a1×b1+c1」なる演算を行なう手
段)のうち少なくとも一方を備えたマイクロプロセッサ
1800を有したシステムの構成図である。
【0158】記憶装置には、マイクロプロセッサ180
0が実行する処理を定めるプログラムや、必要なデータ
等が記憶されている。本システムにおいて、マイクロプ
ロセッサ1800が、前記プログラムにしたがって、あ
る画像処理を行なっているものとする。また、画像処理
された画像は、CRT等によって実現される表示装置1
802に表示される。このような表示処理は、マイクロ
プロセッサ1800が、予め定められているプログラム
にしたがって行なわれる。
【0159】さて、画像処理においては、積和演算を頻
繁に実行する必要があり、積和演算に必要なデータは、
記憶装置1801に記憶されているものとする。
【0160】積和演算器1803は、本発明にかかる積
和演算器であり、複数個の積和演算を並列に実行する。
【0161】マイクロプロセッサ内のレジスタ1804
が、記憶装置1801に記憶されているデータを使用し
て積和演算を行なうことを想定する。
【0162】プログラムにより積和演算の実行が指示さ
れた場合、マイクロプロセッサ1800は、記憶装置1
801にアクセスし、バス1805を介して、積和演算
に必要なデータを、自己が備えるレジスタ1804に保
持する。1回の、積和演算に必要なデータのみをアクセ
スしてもよいが、通常、一度に複数個の積和演算が行な
われるので、該当するデータを、すべてレジスタ180
4に保持しておく。なお、レジスタ1804に保持され
る、被乗数データ(a1、a2、a3、a4)、乗数デ
ータ(b1、b2、b3、b4)、加算データ(c1、
c2、c3、c4)の例を図18の左側に示す。図で
は、1回の積和演算を行なうための1組のデータを示し
たが、通常、複数組のデータを保持しておく。
【0163】そして、次に、積和演算器が起動する。ま
ず、レジスタ1804内の、積和演算に必要な全てのデ
ータをソースバスを介して、取り込む。
【0164】積和演算器は、取り込んだデータに基づい
て、前述した積和演算を行ない、演算結果を順次、ター
ゲットバスを介して、レジスタ1804の空きエリアに
送り、保持させる。もちろん、演算結果を後に使用する
ような画像処理を行なう場合、記憶装置1801に記憶
することも考えられる。
【0165】本発明にかかる積和演算器は、同時に複数
種類の積和演算を行なうことができるため、画像処理の
処理速度は、著しく向上する。
【0166】複数の積和演算を並列に繰り返して実行で
きるため、例えば、積和演算を繰り返して行い、画像処
理において頻繁に行なわれる処理である、離散コサイン
変換等の処理に対しても高速な処理が行なえる。
【0167】以上のように、本発明にかかる積和演算器
(乗算器)を組み込んだマイクロプロセッサを実現し、
該マイクロプロセッサ使用することにより、例えば、高
速に画像処理を行なうことが可能なシステムを構築でき
る。もちろん、システムが対象とする処理内容は、画像
処理に限られず、多量の積和演算を行なう処理であれ
ば、いかなるものでもよい。
【0168】
【発明の効果】以上述べたように、本発明によれば、複
数の積和演算を並列に実行できるため、複数の積和演算
を極めて高速に行なえる。
【図面の簡単な説明】
【図1】本発明にかかる実施例の構成図である。
【図2】乗算の符号拡張と分離機能の説明図である。
【図3】部分積加算器の符号拡張機能を実現するための
手段の構成図である。
【図4】部分積加算器の分離機能を実現するための手段
の構成図である。
【図5】「シフト アンド セレクタ」の動作の説明図
である。
【図6】オーバーフロー/アンダーフロー判定部の構成
図である。
【図7】アライナの構成図である。
【図8】最大値/最小値の置き換え処理の説明図であ
る。
【図9】本発明にかかる他の実施例の構成図である。
【図10】乗算の符号拡張と分離機能の説明図である。
【図11】部分積加算器の構成図である。
【図12】「シフト アンド セレクタ」の動作の説明
図である。
【図13】3入力全加算器列の構成図である。
【図14】64ビット加算器の構成図である。
【図15】オーバーフロー/アンダーフロー判定部の構
成図である。
【図16】アライナの構成図である。
【図17】積和演算用の命令の説明図である。
【図18】本発明にかかる他の実施例の構成図である。
【図19】従来の乗算処理の説明図である。
【図20】従来の部分積加算器の説明図である。
【図21】全加算器の入出力関係の説明図である。
【図22】負数部分積加算機能を実現する手段の構成図
である。

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】複数の被乗数を有するNビットの数と、前
    記各被乗数に対応する乗数を有するMビットの数との積
    を求めることによって、被乗数と乗数の組に対する乗算
    結果を求める演算器であって、 被乗数を複数個保持し、各被乗数のビット長の総和がN
    を越えないことを条件として配置され、各被乗数の間に
    0を埋め込んだ状態で、Nビットの数を保持する第1レ
    ジスタと、前記各被乗数に対応する乗数を保持し、各乗
    数のビット長の総和がMを越えないことを条件として配
    置され、各乗数の間に0を埋め込んだ状態で、Mビット
    の数を保持する第2レジスタと、 第1レジスタに保持された値と第2レジスタに保持され
    た値との部分積を求めていく処理を行う部分積処理部
    と、前記部分積において、1組の被乗数と乗数の、乗算
    結果の符号を補償するため、乗算結果を2の補数表現し
    たビットを埋込む符号拡張部と、各部分積の和を順次求
    めていく手段であって、ある組の被乗数と乗数に対する
    全ての部分積の総和が所定値を越えた場合、該越えた値
    を、次の他の組の被乗数と乗数に対する部分積の総和を
    求めていく際に廃棄する、各部分積の総和値を求める総
    和手段と、該手段によって求めた、総和値(「N+M」
    (ビット))のデータから、第1レジスタにおける各被
    乗数と、これに対応する第2レジスタにおける乗数との
    乗算結果である値を切り出し、被乗数と乗数との組に対
    応する乗算結果を、各組について求める処理手段とを有
    する演算器。
  2. 【請求項2】請求項1において、さらに、前記第1レジ
    スタにおける各被乗数と、これに対応する第2レジスタ
    における乗数との乗算結果に、値を加えるための加算数
    を複数個保持し、各加算数のビット長の総和が、予め定
    めた長さを越えないことを条件として配置され、各加算
    数の間に0を埋込み、加算数を保持する第3レジスタ
    と、前記第1レジスタにおける各被乗数と、これに対応
    する第2レジスタにおける乗数との乗算結果に対応す
    る、第3レジスタにおける加算数を加算する加算手段を
    備えることを特徴とする演算器。
  3. 【請求項3】請求項1および2のいずれかにおいて、 前記第1レジスタにおける各被乗数と、これに対応する
    第2レジスタにおける乗数との乗算結果が、オーバーフ
    ロー、あるいは、アンダーフローである場合には、乗算
    結果を予め定めた値とする乗算値置換部を備えることを
    特徴とする演算器。
  4. 【請求項4】複数の被乗数を有するNビットの数と、前
    記各被乗数に対応する乗数を有するMビットの数との積
    を求めることによって、被乗数と乗数の組に対する乗算
    結果を求める演算器であって、 被乗数を複数個保持し、各被乗数のビット長の総和がN
    を越えないことを条件として配置する、Nビットの数を
    保持する第1レジスタと、前記各被乗数に対応する乗数
    を保持し、各乗数のビット長の総和がMを越えないこと
    を条件として配置する、Mビットの数を保持する第2レ
    ジスタと、 第1レジスタに保持された値と第2レジスタに保持され
    た値との部分積を求めていく処理を行う部分積処理部
    と、前記部分積において、1組の被乗数と乗数の、乗算
    結果の符号を補償するため、乗算結果を2の補数表現し
    たビットを埋込む符号拡張を行なう符号拡張部と、 ある組の被乗数(aビット)と乗数(bビット)に対す
    る全ての部分積を求めた後、次の他の組の被乗数と乗数
    に対する部分積を求める際に、当該組に対する部分積に
    おいて、下位「a+b」ビットに、0を埋め込む部分積
    編成手段と、各部分積の和を順次求めていく手段であっ
    て、ある組の被乗数と乗数に対する全ての部分積の総和
    が所定値を越えた場合、該越えた値を、次の他の組の被
    乗数と乗数に対する部分積の総和を求めていく際に廃棄
    する、各部分積の総和値を求める総和手段と、該手段に
    よって求めた、総和値(「N+M」(ビット))のデー
    タから、第1レジスタにおける各被乗数と、これに対応
    する第2レジスタにおける乗数との乗算結果である値を
    切り出し、被乗数と乗数との組に対応する乗算結果を、
    各組について求める処理手段とを有する演算器。
  5. 【請求項5】請求項4において、さらに、前記第1レジ
    スタにおける各被乗数と、これに対応する第2レジスタ
    における乗数との乗算結果に、値を加えるための加算数
    を複数個保持し、各加算数のビット長の総和が、予め定
    めた長さを越えないことを条件として配置する、加算数
    を保持する第3レジスタと、前記第1レジスタにおける
    各被乗数と、これに対応する第2レジスタにおける乗数
    との乗算結果に対応する、第3レジスタにおける加算数
    を加算する加算手段を備えることを特徴とする演算器。
  6. 【請求項6】請求項1、2、4および5いずれか記載の
    演算器と、予め定められた命令コードが与えらた場合に
    は、前記演算器にデータを与えるデータ入力部と、前記
    演算器を起動する起動手段と、前記演算器の演算結果を
    得て出力するデータ出力部とを備えることを特徴とする
    マイクロプロセッサ。
JP15756694A 1994-07-08 1994-07-08 演算器およびマイクロプロセッサ Expired - Fee Related JP3579087B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP15756694A JP3579087B2 (ja) 1994-07-08 1994-07-08 演算器およびマイクロプロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP15756694A JP3579087B2 (ja) 1994-07-08 1994-07-08 演算器およびマイクロプロセッサ

Publications (2)

Publication Number Publication Date
JPH0822451A true JPH0822451A (ja) 1996-01-23
JP3579087B2 JP3579087B2 (ja) 2004-10-20

Family

ID=15652490

Family Applications (1)

Application Number Title Priority Date Filing Date
JP15756694A Expired - Fee Related JP3579087B2 (ja) 1994-07-08 1994-07-08 演算器およびマイクロプロセッサ

Country Status (1)

Country Link
JP (1) JP3579087B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999038088A1 (en) * 1998-01-21 1999-07-29 Matsushita Electric Industrial Co., Ltd. Method and apparatus for arithmetic operation
WO2002015000A3 (en) * 2000-08-16 2003-08-07 Sun Microsystems Inc General purpose processor with graphics/media support
US7587582B1 (en) 1998-12-03 2009-09-08 Sun Microsystems, Inc. Method and apparatus for parallel arithmetic operations
EP1693742A3 (en) * 1995-08-31 2010-01-06 Intel Corporation Method and apparatus for performing multiply-accumulate operations on packed data
JP2020077076A (ja) * 2018-11-06 2020-05-21 株式会社デンソー 畳込み演算方法
JP2021033813A (ja) * 2019-08-28 2021-03-01 株式会社デンソー 畳込み演算方法及び演算処理装置
CN119806471A (zh) * 2024-12-16 2025-04-11 海光信息技术股份有限公司 加法模块及操作方法、乘法器及操作方法、处理器和设备

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1693742A3 (en) * 1995-08-31 2010-01-06 Intel Corporation Method and apparatus for performing multiply-accumulate operations on packed data
WO1999038088A1 (en) * 1998-01-21 1999-07-29 Matsushita Electric Industrial Co., Ltd. Method and apparatus for arithmetic operation
US6609143B1 (en) 1998-01-21 2003-08-19 Matsushita Electric Industrial Co., Ltd Method and apparatus for arithmetic operation
US7587582B1 (en) 1998-12-03 2009-09-08 Sun Microsystems, Inc. Method and apparatus for parallel arithmetic operations
WO2002015000A3 (en) * 2000-08-16 2003-08-07 Sun Microsystems Inc General purpose processor with graphics/media support
JP2020077076A (ja) * 2018-11-06 2020-05-21 株式会社デンソー 畳込み演算方法
JP2021033813A (ja) * 2019-08-28 2021-03-01 株式会社デンソー 畳込み演算方法及び演算処理装置
CN119806471A (zh) * 2024-12-16 2025-04-11 海光信息技术股份有限公司 加法模块及操作方法、乘法器及操作方法、处理器和设备

Also Published As

Publication number Publication date
JP3579087B2 (ja) 2004-10-20

Similar Documents

Publication Publication Date Title
US7716269B2 (en) Method and system for performing parallel integer multiply accumulate operations on packed data
US5448509A (en) Efficient hardware handling of positive and negative overflow resulting from arithmetic operations
JP2662196B2 (ja) 演算結果正規化方法及び装置
US6099158A (en) Apparatus and methods for execution of computer instructions
US7236995B2 (en) Data processing apparatus and method for converting a number between fixed-point and floating-point representations
US9916130B2 (en) Apparatus and method for vector processing
EP0656582B1 (en) Parallel adding and averaging circuit and method
US20170139677A1 (en) Multiplication of first and second operands using redundant representation
EP0755015B1 (en) Combining data values
JPH0934693A (ja) 指数対数変換回路
JP3418460B2 (ja) 倍精度除算回路および方法
EP3516500B1 (en) DOUBLE-PRECISION DISTRIBUTED FLOATING DECIMAL POUND
JP3476960B2 (ja) 算術論理演算装置及び制御方法
JP3579087B2 (ja) 演算器およびマイクロプロセッサ
JP3803438B2 (ja) 浮動小数点乗算累算装置
US5867413A (en) Fast method of floating-point multiplication and accumulation
US4823300A (en) Performing binary multiplication using minimal path algorithm
US5825681A (en) Divider/multiplier circuit having high precision mode
US5576982A (en) Fast significant bit calculator and its application to integer multiplication and division
JPH04172526A (ja) 浮動小数点除算器
EP1936492A1 (en) SIMD processor with reduction unit
EP1197874B1 (en) Signal processor and product-sum operating device for use therein with rounding function
EP0780759A1 (en) Elimination of math overflow flag generation delay in an alu
US20030037088A1 (en) Speed of execution of a conditional subtract instruction and increasing the range of operands over which the instruction would be performed correctly
EP0992883B1 (en) Rounding mechanism

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040706

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040715

LAPS Cancellation because of no payment of annual fees