JPH0863353A - 掛け算累算命令を使用したデータ処理 - Google Patents

掛け算累算命令を使用したデータ処理

Info

Publication number
JPH0863353A
JPH0863353A JP7149230A JP14923095A JPH0863353A JP H0863353 A JPH0863353 A JP H0863353A JP 7149230 A JP7149230 A JP 7149230A JP 14923095 A JP14923095 A JP 14923095A JP H0863353 A JPH0863353 A JP H0863353A
Authority
JP
Japan
Prior art keywords
data processing
bit
register
multiply
class
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
JP7149230A
Other languages
English (en)
Other versions
JP3605181B2 (ja
Inventor
David J Seal
ジェームズ シール デビッド
Guy Larri
ラーリ ガイ
David V Jaggar
ビビアン ジャガー デビッド
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.)
ARM Ltd
Original Assignee
Advanced Risc Machines 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 Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of JPH0863353A publication Critical patent/JPH0863353A/ja
Application granted granted Critical
Publication of JP3605181B2 publication Critical patent/JP3605181B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision

Landscapes

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

Abstract

(57)【要約】 【目的】 高い算術演算精度と通常の算術演算精度の掛
け算累算演算を、単一命令でかつ命令セット空間を浪費
することなく実現することを目的とする。 【構成】第1データ処理レジスタ内に保持されているN
ビット被演算子と第2データ処理レジスタ内に保持され
ているNビット被演算子とを掛け算し、そして第3デー
タ処理レジスタ内に保持されているNビット(または2
Nビット)被演算子を加算して、第4データ処理レジス
タの中に格納されるNビット(または2Nビット)の結
果を算出する。その際命令内のメモリ空間を節約するた
めに、2Nビットの精度で演算する際には、2Nビット
の累算値が取り出された同じレジスタに演算結果を書き
込んでいる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はデータ処理の分野に関す
る。更に詳細には、本発明は掛け算累算命令が第1被演
算子が第2被演算子と掛け算されそして第3被演算子が
加算されることで結果を算出するように指定するように
使用されている種類のデータ処理に関する。被演算子は
システム内のデータ処理レジスタのバンクからデータ処
理レジスタの中に格納される。
【0002】
【従来の技術】その命令セットの中に掛け算累算命令を
有するデータ処理システムを用意することは知られてい
る。その様なシステムの1つの例は、アドバンストRI
SCマシン有限会社で製造されるARM6集積回路マイ
クロプロセッサである。ARM6マイクロプロセッサ
は、第1の32ビット被演算子を第2の32ビット被演
算子に掛け算し、次に第3の32ビット被演算子を加算
するための掛け算累算命令を組み込んでいる。この命令
に対する3つの入力被演算子を含むレジスタは、この結
果がその中に書き込まれるべきレジスタと共に掛け算累
算命令の中のフィールドで指定されている。例としてあ
げれば、互いに掛け算される2つの32ビット被演算子
はレジスタ5並びにレジスタ6であり、累算値はレジス
タ10の中にあってその結果がレジスタ2に書き込まれ
るといった具合である。
【0003】データ処理システムは使用者から要求され
るデータ処理演算を最少数の命令で指定できることが望
ましい。これは結果としてプログラムサイズがより少な
くなり、一般的により早くそして更に効率的な演算が得
られる。しかしながら、この様に更に複雑で高度なデー
タ処理演算を単一命令の中に用意する際の問題は、この
命令で指定される必要のある情報の量である。更に詳細
には、もしも命令が多数のデータ処理レジスタをその命
令を実行するための資源として使用する場合は、これら
のレジスタの同一性識別がその命令の中で指定されなけ
ればならない。これは命令の中で許容できないほどのビ
ット空間量を使用する可能性がある。比較的大きな数の
データ処理レジスタをシステムの中で使用する、この様
に高度で複雑な命令に関連する更に別の問題は、プログ
ラムの効率的なコンパイルが更に難しくなることであ
り、それは使用される多くの異なる被演算子の間で、有
限のレジスタ資源を共有しなければならないためであ
る。
【0004】
【発明の目的と要約】上述の問題を解決することが本発
明の目的である。
【0005】ひとつの特徴から見ると、本発明はデータ
処理用の装置を提供し、前記装置は: (i) Nビットデータ処理レジスタのレジスタバン
ク;そして(ii)前記レジスタバンクに結合され、前
記Nビットデータ処理レジスタ内に保持されている被演
算子に対して掛け算累算演算処理を実行するための掛け
算累算器とを含み;ここに於いて(iii)前記掛け算
累算器は掛け算累算命令の第1クラスに応答して、第1
データ処理レジスタ内に保持されているNビット被演算
子と第2データ処理レジスタ内に保持されているNビッ
ト被演算子とを掛け算し、そして第3データ処理レジス
タ内に保持されているNビット被演算子を加算して、第
4データ処理レジスタの中に格納されるNビットの結果
を算出し、前記第1、第2、第3および第4データ処理
レジスタは掛け算累算命令の前記第1クラスの中のフィ
ールドとして独立に指定され;そして(iv)前記掛け
算累算は掛け算累算命令の第2クラスに応答して、第1
データ処理レジスタ内に保持されているNビット被演算
子と第2データ処理レジスタ内に保持されているNビッ
ト被演算子とを掛け算し、そして第3データ処理レジス
タ内に保持されている2Nビット被演算子を加算して、
第4データ処理レジスタの中に格納される2Nビットの
結果を算出し、前記第1、第2、第3および第4データ
処理レジスタは掛け算累算命令の前記第1クラスの中の
フィールドとして独立に指定されている。
【0006】本発明は、利用可能なレジスタ資源に対し
て高い要求を課す掛け算累算命令の場合には、異なる精
度並びにシステム資源に対する要求とを有する複数のク
ラスの掛け算累算命令を用意することが非常に都合が良
いことを認識している。(N*N)+N演算を実行する
掛け算累算命令の第1クラスは、Nビットの結果を算出
しこれは、2Nビットの結果を算出する(N*N)+2
N演算を実行する掛け算累算命令の第2クラスよりも比
較的精度が低い。掛け算累算命令り第2クラスは、結果
を入力変数を保持していた2つのレジスタの中に書き込
むように要求することで、命令の中のビット空間を過度
に圧迫することを回避している。これらの掛け算累算命
令を具備した装置を使用するプログラマは、関係してい
る個別の環境に最も適した命令を選択することが可能で
ある;自由に入力および出力レジスタの両方を指定した
いという要求は、一命令で2Nビットの結果を得たいと
いう要求との対比の上に立っていると言える。2つの命
令を用意することによって、関連するプログラムがより
小さくなりそして更に高速に実行されるという波及効果
を生む。
【0007】掛け算累算器は多くの異なる手法で構成で
きるであろう。ひとつの可能性としては、掛け算累算器
が最初に掛け算演算を完了し、そして次に加算演算を別
の後処理として実行する方法である。しかしながら本発
明は、前記掛け算累算器が掛け算と加算とを単一の組み
合わされた演算として実行するアプリケーションに特に
適している。
【0008】単一に組み合わされた演算としての掛け算
及び加算は、速度が速くなりデータ経路幅が小さくなる
という特長を有するが、全ての入力被演算子が同時に利
用可能であることという要求を課する。
【0009】掛け算累算器はその機能ユニットのいくつ
かをバイパスする事により、別の算術演算を実行させる
ように作ることも可能である。この方法により、本発明
の提出された実施例では前記掛け算累算器は掛け算命令
の第1クラスに応答して、第1データ処理レジスタ内に
保持されているNビット被演算子と第2データ処理レジ
スタ内に保持されているNビット被演算子とを掛け算し
てNビットの結果を算出し、これは第3データ処理レジ
スタ内に格納され、前記第1、第2、および第3データ
処理レジスタは前記掛け算命令の第1クラスの中のフィ
ールドとして独立に指定されており;そして前記掛け算
累算器は掛け算命令の第2クラスに応答して、第1デー
タ処理レジスタ内に保持されているNビット被演算子と
第2データ処理レジスタ内に保持されているNビット被
演算子とを掛け算して2Nビットの結果を算出し、これ
は第3並びに第4データ処理レジスタ内に格納され、前
記第1、第2、第3及び第4データ処理レジスタは前記
掛け算命令の第2クラスの中のフィールドとして独立に
指定されている。
【0010】異なる精度を有する掛け算命令の第1およ
び第2クラスを用意することは、異なる精度を有する掛
け算累算命令を補足することである。
【0011】この様に比較的高度で複雑な掛け算累算命
令を用意することにより、命令セットの密度が過度に薄
くならないようにするために、前記データ処理レジスタ
を指定する前記フィールドが、掛け算累算命令の前記第
1クラス内の命令ビット、および掛け算累算命令の前記
第2クラス内の命令の半分以上を占めないようにするこ
とが望ましい。
【0012】データ処理レジスタを指定するフィールド
用の空間が削減されると、指定できる異なるレジスタの
最大数もまた削減される。この文脈に於いて、本発明は
前記データ処理レジスタのバンクが、16個以下の同時
に使用されるデータ処理レジスタ、すなわち命令内でレ
ジスタを指定するために唯4ビットのみを必要とする、
を含む実施例に特に適している。
【0013】本発明を個別の回路素子で構成することも
可能であるが、本発明は集積回路マイクロプロセッサの
一部として実施することが特に適していることを理解さ
れよう。
【0014】システムのコーディング効率は、掛け算累
算命令の前記第1クラス内の命令および掛け算累算命令
の前記第2クラス内の命令が、条件付き実行コードを含
み、そして前記条件付き実行コードに応答して命令が実
行せずにスキップされるか否かを制御するための手段と
で構成されたフィールドを含む時に改善される。
【0015】条件付き実行コードを用意することはコー
ディング効率を増加させる一方で、命令内で利用可能な
ビット空間、結果としてはその命令でどのレジスタが使
用されるべきかを指定するために利用可能な空間を多く
必要とする。この理由から、本発明はこの様な関係に於
いては特に助けとなる。
【0016】掛け算累算器を更に汎用なマイクロプロセ
ッサ内のマイクロコードとして実現することも可能であ
ろうが、本発明で得られる性能上の利益は前記掛け算累
算器が専用のハードウェア掛け算累算器であるシステム
に於いて特に有用である。
【0017】本発明は多くの異なるビット長のアーキテ
クチャに基づくシステムの中で使用できるであろうが、
本発明はNが32に等しいシステムに特に適している。
この様なシステムでは命令内のビット空間は非常に貴重
であり、64ビットの結果が得られる追加的な精度はま
れに必要となるだけである。この様にして、本発明は特
に有効である。
【0018】本発明の別の特徴から見ると、本発明はN
ビットデータ処理レジスタのレジスタバンクと、前記レ
ジスタバンクに結合され、前記Nビットデータ処理レジ
スタ内に保持されている被演算子に対して掛け算累算演
算処理を実行するための掛け算累算器とを有する装置を
使用したデータ処理の方法を提供しており、前記方法は
以下の手順を含む: (i)掛け算累算命令の第1クラスに応答して、第1デ
ータ処理レジスタ内に保持されているNビット被演算子
と第2データ処理レジスタ内に保持されているNビット
被演算子とを掛け算し、そして第3データ処理レジスタ
内に保持されているNビット被演算子を加算して、第4
データ処理レジスタの中に格納されるNビットの結果を
算出し、前記第1、第2、第3および第4データ処理レ
ジスタは掛け算累算命令の前記第1クラスの中のフィー
ルドとして独立に指定され;そして(ii)掛け算累算
命令の第2クラスに応答して、第1データ処理レジスタ
内に保持されているNビット被演算子と第2データ処理
レジスタ内に保持されているNビット被演算子とを掛け
算し、そして第3データ処理レジスタ内に保持されてい
る2Nビット被演算子を加算して、第4データ処理レジ
スタの中に格納される2Nビットの結果を算出し、前記
第1、第2、第3および第4データ処理レジスタは掛け
算累算命令の前記第1クラスの中のフィールドとして独
立に指定される。
【0019】本発明の上記、およびその他の目的、特徴
並びに特長は添付図と関連して読まれる図示された実施
例の以下の詳細な説明から明らかとなろう。
【0020】
【実施例】図1はデータ処理システム(集積回路の一部
として形成されている)を図示し、メモリシステム10
4に結合されている処理装置コア102を含む。
【0021】処理装置コア102はレジスタバンク10
6、掛け算累算器108並びに書き込みデータレジスタ
114とを含む。処理装置コア102はまた、命令パイ
プライン116、命令デコーダ118並びに処理装置コ
ア102の残りの素子をメモリシステム104にリンク
する読み込みデータレジスタ120をも含む。処理装置
コア102の一部であるプログラム計数レジスタ122
はメモリシステム104のアドレス指定をするように図
示されている。プログラム計数器更新器124はプログ
ラム計数レジスタ122内のプログラム計数値を、各々
の命令が実行され新たな命令が命令パイプライン116
に対してフェッチされなければならない時に更新するよ
うに動作する。
【0022】処理装置コア102はNビットデータ通路
(この場合は32ビットデータ通路)を種々の機能ユニ
ットの間に組み込んでいる。動作に際して、命令パイプ
ライン116内の命令は命令デコーダ118でデコード
され、これは種々のコア制御信号を生成し、これらは処
理装置コア102内の異なる機能素子に送られる。これ
らのコア制御信号に応答して、処理装置コア102の異
なる部分は32ビット処理演算、例えば32ビット掛け
算、32ビット加算、異なる精度の掛け算累算演
算、...を実施する。
【0023】レジスタバンク106は現行プログラム状
態レジスタ126と保存プログラム状態レジスタ128
とを含む。現行プログラム状態レジスタ126は処理装
置コア102用の種々の条件および状態フラグとを保持
する。これらのフラグは算術演算でのゼロ結果の発生を
示すフラグ、桁上がり等と同様に、処理モードフラグ
(例えば、システムモード、使用者モード、メモリアボ
ートモード等)を含む。これらのフラグはプログラム命
令の条件付き実行を、各命令の最初の4ビットの条件コ
ードで指定されたパラメータに従って制御する。保存プ
ログラム状態レジスタ128(これは格納されている複
数のこの様なセーブされたプログラム状態レジスタの中
の1つであろうが)は、処理モードの切り替えのきっか
けとなる例外が発生したときに現行プログラム状態レジ
スタ126の内容を一時的に格納するために使用され
る。この様にして、例外処理がより高速にかつ、更に効
率的に実行できる。
【0024】要求されるプログラム命令ワードがメモリ
システム104から復元されると、これらは命令デコー
ダ118でデコードされ32ビット処理を処理装置コア
102の中で開始する。
【0025】図2は、32*32+32−>32掛け算
累算演算に応答する資源の使用を図式的に図示する。プ
ログラム命令ワード32は、条件コードフィールド34
を含み、これは命令が命令デコーダ118で実行される
のかスキップされるのかを示す条件を指定するパラメー
タを格納している。ビットフィールド36は、命令ワー
ド32をこれが32ビットの結果を算出する低精度掛け
算累算演算であることを識別する。累算フラグ38は1
の値を有し、この命令ワード32に対して累算演算が形
成されることを示す。もしもこの累算フラグ38が0の
場合は、従って累算演算は実行されない。セット条件コ
ードフラグ40は現在のプログラム状態レジスタフラグ
が命令ワード32を実行した際に更新されるべきか否か
を指定する。
【0026】命令ワード32はそれぞれフィールド4
2、44、46および48を指定する4つのレジスタを
含む。もしも実行される演算が(A*B)+C=D、の
様に表現される場合はレジスタフィールド42は変数A
を含むレジスタ(この場合R0)を指定し、レジスタフ
ィールド44は変数Bを含むレジスタ(この場合R2)
を指定し、レジスタフィールド46は変数Cを含むレジ
スタ(この場合R5)を指定しそしてレジスタフィール
ド48はその中に結果Dが書き込まれるべきレジスタ
(この場合R10)を指定する。レジスタフィールド4
2、44、46および48の中に格納される値は、レジ
スタバンク106内のレジスタの読み込み並びに書き込
みを制御するように作用する。この32*32+32−
>32命令の場合、全ての3つの入力変数レジスタおよ
び出力変数レジスタは独立に指定されるはずである。
【0027】図2に図示されている命令ワード32はN
ビット入力変数に演算を行い、Nビット出力を生成する
掛け算累算命令の第1クラスに属すると考えることが出
来る。この命令は4つの独立に指定されるレジスタを使
用する。命令内のレジスタフィールドは16ビットを占
める(各々のレジスタフィールドはレジスタバンク10
6内の16個のレジスタの内の1つを指定するように4
ビット長である。)
【0028】図3は掛け算累算命令の第2クラスの命令
ワード32を図示し、この中で64ビットの結果が掛け
算累算演算(すなわち32x32+64−>64)によ
って生成される。この場合、累算値はCDでありこれは
それぞれレジスタフィールド48および46で指定され
たレジスタの中に格納されている。累算値CDの最上位
32ビットCはレジスタR7の中に格納され、累算値C
Dの最下位32ビットDはレジスタR117の中に格納
されている。
【0029】命令ワード32内の十分な空間は4つのレ
ジスタを指定するだけなので、演算結果EFはそこから
累算値が取り出されたのと同一のレジスタ(R7,R1
1)の中に書き込まれる。これは命令セット空間を節約
し、かつ単一命令ワード32で実行される精度を上げた
64ビット算術演算を可能とする。
【0030】処理装置コア102は2サイクルの初期化
を実行し、各サイクル毎に2つのレジスタの読み込みを
行う。これはレジスタバンク106に対して2つの読み
込みポートしか持たない結果である。
【0031】図3の命令ワード32は追加フラグ50を
含み、これはその算術が符号付きであるか符号無しであ
るかを指示する。
【0032】図4は掛け算累算器108で実行される掛
け算命令の第1クラスを図示する。これらの命令は32
ビットの結果(すなわち32x32−>32)を算出す
る。この場合、レジスタフィールド46は使用されず任
意の値を含むことが出来る。
【0033】図5は64ビットの結果(すなわち32x
32−>64)が生成される掛け算命令の第2クラスを
図示する。この場合、4つの全てのレジスタフィールド
42、44、46および48はそこから入力変数が取り
込まれるレジスタ並びにそこに64ビットの結果である
CDのそれぞれ高位および低位部が書き込まれるレジス
タを指定するために使用される。
【0034】図6および図7は掛け算累算演算実行用回
路の異なる部分を図示する。
【0035】説明された回路は掛け算累算器を実現しこ
れが処理できるのは: (1)Nビットの積を生成するためのNビットとNビッ
トの数の掛け算; (2)2Nビットの結果を生成するためのNビットとN
ビットの数の掛け算; (3)Nビットの結果を得るように、NビットとNビッ
トの数を互いに掛け合わせ、そしてNビットの累算値を
加算する掛け算累算演算;そして (4)2Nビットの結果を得るように、NビットとNビ
ットの数を互いに掛け合わせ、そして2Nビットの累算
値を加算する掛け算累算演算である。
【0036】この回路はこれらの全てを、符号付きおよ
び符号無しの異なる方式で提供可能である。記述されて
いる回路は例として特定のN=32のケースを使用して
いる。(すなわち32x32−32および32x32−
>64掛け算、そして32x32+32−>32並びに
32x32+64−>64掛け算累算である。)
【0037】用語”マルチプライア”は以下では掛け算
回路並びに、掛け算をされるふたつの被演算子の一方の
いずれにも使用される。そのどちらを意図しているか
は、”回路”または”被演算子”の使用法または文脈か
ら明らかとなろう。
【0038】Nビット被乗数DとNビット乗数Rとの掛
け算は通常はハードウェアでふたつの主手順として実行
される: (1) 被乗数Dの倍数 X0*D,X1*D,...,X
k*Dの集合を(a)各々の倍数が容易に生成出来るよ
うに;(b)X0+X1+...+Xk=Rとなり、こ
れが X0*D,X1*D,...,そしてXk*Dの
合計が、希望する生成物R*Dに等しくなることを保証
するように形成する。 (2) 手順(1)で生成された被乗数倍数を互いに加算す
る。
【0039】段階(1):被乗数倍数の形成 段階(1)は種々の方法で実行できる。最も単純なのは
k=N−1とし(従って全体でN個の被乗数倍数が存在
する)、続いてRのビットi(これはR[i]またはR
iと記述される)が0の場合はXi=0、そしてもしも
R[i]が1の場合はXi=2i とする。全てのXiが
ゼロまたは2の累乗であるので、被乗数倍数Xi*D
は、ゼロを用いるかまたはDを左にiビットシフトする
ことで簡単に形成できる。
【0040】掛け算の結果はいずれの被演算子よりも長
いので、Xi*D被乗数倍数は積の全てのビットを決定
するのに十分なビットで生成されるべきである:これは
被乗数のビットをその左側に拡張することを必要とす
る。符号付きおよび符号無し被乗数の違いを取り扱うの
はこの点である:符号付き被乗数はその符号ビットをコ
ピーして拡張され、一方符号無し被乗数はゼロを付けて
拡張される。この被乗数の拡張はしばしばゼロをひとつ
または符号ビットのコピーを付けるだけで物理的に実行
され、この単独の追加ビットが残りのビット全てに対す
る(共通)値を表現するという理解のもとになされる。
【0041】この技法の元でなされる符号無しおよび符
号付き乗数Rの間の違いの取り扱いは幾分手の込んだも
のである。最初に、Xiの合計がRの符号無し値になる
場合を注目する:この技法は”当然”符号無し掛け算ア
ルゴリズムとなる。従って必要なのは符号付き乗数の取
り扱い方法である。この取り扱い方には多数の方法が存
在し、その主なものは(a)Rが負の場合は特別の2N
* Dを引き算することで最終結果を調整する;または
(b)もしもR[k]=1、すなわちRが負の場合はX
kを+2k ではなく−2k とする。
【0042】もっと複雑で手の込んだ技術は修正ブース
符号化法である。これはNが偶数か奇数かによってふた
つの少し異なる形式となる。もしもNが偶数の場合は、
k=N/2−1(従ってN/2個の被乗数倍数を形成す
ることになる)とし、次のように定義する: X0=−2*R[1]+R[0] そして: i=1,2,...,kに対して Xi=(−2*R[2*i+1]+R[2*i]+R
[2*i−1])*2(2*i )
【0043】これを考察する別の方法は、乗数を二進小
数点の後ろに一ビットR[−1]を拡張し、R[−1]
をゼロに設定する(これは乗数の値を変更せずにそのま
ま残す)。従って上記の2番目の式は同様にi=0の場
合にも適用可能であり、この様な場合の上記第1番目の
式を簡略化する、すなわちこの定義またはR[−1]を
0とする事でX0の明らかに特別な場合が取り除かれ
る。
【0044】従ってXiの合計はRの符号付きの値と等
しくなる: Xk+X[k−1]+..+X2+X1+X0 =−2(2*K+1) * R[2*K+1] +2(2*K) * R[2*K] +2
(2*K) * R[2*K-1]−2(2*K-1) * R[2*K-1] +2
(2*K-2) * R[2*K-2] +2(2*K-2) * R[2*K-3]
−.... −32*R[5]+16*R[4]+16*R[3] −8*R[3]+4*R[2]+4*R[1] −2*R[1]+R[0] =−2(2*K+1) * R[2*K+1] +2(2*K) * R[2*K] +2(2K-1) *R[2*K-1] +2(2*K-2) * R[2*K-2] +... +32*R[5]+16*R[4] +8*R[3]+4*R[2] +2*R[1]+R[0] =−2(N-1) * R[N−1]+2(N-2) * R[N−2] +2(N-3) * R[N−3]+2(N-4) * R[N−4] +... +32*R[5]+16*R[4] +8*R[3]+4*R[2] +2*R[1]+R[0] =Rの符号付きの値
【0045】さらに、各Xiは2の累乗に群{−2,−
1,0,1,2}の内のひとつの数を掛けたものである
から、値としてはゼロ、2の累乗または2の累乗のマイ
ナスを取らなければならない。これは被乗数倍数Xi*
Dの形成を容易にする。これらは、正と同様に2の負の
累乗をも取り扱わなければならないので先の方法と全く
同じように容易と言うわけではないが、第2段階でN個
ではなくN/2個の被乗数倍数を加算するだけで良いと
いう大きな利点が得られる。負の被乗数倍数の形成は被
乗数をシフトして対応する正の倍数を作り、次に”1の
補数を取って1を加える”方法で負とすることにより実
現できる、この段階では1の加算は実行しないで第2段
階に回している。この様にして第2段階で加算され、N
/2個の被乗数倍数および、N/2個の単一ビット(こ
れらは対応する被乗数倍数が正の場合はゼロ、そしてそ
れが負の場合は1)が完了する;これもN個の全被乗数
倍数に比較して改善である。
【0046】もしもNが奇数の場合は、非常に似たこと
を行うが、K=(N−1)/2としXiに対する式は: X0=−R[0] そして: i=1,2,..,kに対して Xi=(−2*R[2*i ]+R[2*i-1 ]+R[2*i-2
])*2(2*i-1) (ここでも、X0に対する式は特別な場合ではない:R
[-1]=R[-2]=0と定義することにより、第2番目
の式が正しい値を生成するように出来る。)
【0047】修正ブース符号化法は互いに加算する被乗
数倍数の数を半分にするという事実と同様に別の特長も
有する:これは当然のように乗数を符号無し数ではなく
符号付き数として取り扱う。先の技法では符号付き乗数
を特別な場合として取り扱わなければならなかった、そ
の理由は符号無し数をいかに長くしたとしてもこれは負
の符号が着いた値を保持することが出来ないためであっ
た。その逆はより簡単である:N+1ビット長またはそ
れを越える符号付き数はNビット長の符号無し数(また
は実際Nビット長の符号付き数)を保持する事が出来
る。従ってもしも我々が、32ビットの符号付きおよび
符号無し乗数を取り扱える掛け算回路を望むのであれ
ば、例えば33ビットまたはそれより長い修正ブース符
号化器がこの作業を実行できるであろう:我々がしなけ
ればならないことはひとつまたは複数の追加ビットをそ
の左端に付けて乗数を拡張し、この乗数が符号無しとし
て取り扱われる場合はこれらのビットをゼロとし、この
乗数が符号付きとして取り扱われる場合は既存の符号を
コピーする事である。
【0048】符号付きおよび符号無し被乗数の間の違い
の処理は先と同様の技法で実施できる。
【0049】別の、さらに複雑で込み入った被乗数倍数
を作り出す方法も存在し、複雑さが増すことと引き替え
にそれらの個数を更に削減する。
【0050】段階(2):被乗数倍数の加算 段階(1)の後、我々は互いに加算すべきかなり多数の
被乗数倍数を持つことになる、例えば符号付きおよび符
号無し32x32ビット掛け算の両方を実行できる回路
用の33ビットまたは34ビット修正ブース符号化器を
使用する場合は17個である。
【0051】最も簡単なやり方はこれらの内の2つを互
いに足し算し、第3番目を最初のふたつの和に加え、第
4番目を加算結果に加える、等々と最終合計値を得るま
で続ける方法である。(ついでながら、各々の足し算は
修正ブース符号化法で生成される付加ビットのひとつを
も取り扱うことが可能であり、これを加算器の桁上げ入
力として使用する。従って我々はこれらのビットを取り
扱うのに特別な加算は必要ない。)これはアドバンスト
RISCマシン有限会社のARM6マイクロプロセッサ
で使用している技法に類似している。
【0052】ひとつの違いは、全ての被乗数倍数を一度
に生成しないということである:代わりにここではそれ
らを必要に応じて生成する。その他の主な違いはこの技
法の内での不規則性の処理である:最初の足し算を行う
前に2つの被乗数倍数を生成しなければならないが、そ
れ以外の足し算ではその各々を行う前に唯ひとつだけを
生成すればよい。これは累算値として”小計”を初期化
し、次にひとつの被乗数倍数を生成しそれを小計の中に
加算することにより、この不規則を伴うことなく掛け算
累算機能を提供するために利用可能であり(かつ利用し
ている)。(単純な掛け算を実行する際に、我々は同様
のことをその小計を累算値ではなくゼロに初期化する点
は異なるが、行っている。)
【0053】これはまた先の段落の中で示唆されていた
こともうまく行っている:実際修正ブース符号化器から
の全ての追加ビットをひとつの足し算で取り扱うのは少
なすぎるが、ここでは適当な数となっている。
【0054】この技術の主な問題は、それが含む桁上が
りチェインが長いために、各々の足し算がかなりな時間
を取ることである。これに対する良好な解決策は”桁上
がり保存”足し算であり、これはふたつの数とひとつの
桁上げビットを足し算してひとつの数を得る場合は長い
桁上がりチェインを含むが、3つの数とひとつの桁上げ
ビットとを足し算して2つの数を得る場合は必要は無い
という観察から考え出された。特に、仮に今3つの数X
[N:0],Y[N:0]と桁上がりビットWがあると
すると、これらを2つの数S[N:0]およびC[N+
1:0]に減らすことが出来て、これは単純に3つの単
独ビットを各ビット列毎に個別に足し算することにより
同じ値の足し算となる:
【表1】 X[N] X[N-1] X[N-2]....X[3] X[2] X[1] X[0] Y[N] Y[N-1] Y[N-2]....Y[3] Y[2] Y[1] Y[0] Z[N] Z[N-1] Z[N-2]....Z[3] Z[2] Z[1] Z[0] --------------------------------------------------は下記と同じ和となる。 S[N] S[N-1] S[N-2]....S[3] S[2] S[1] S[0] C[N+1] C[N] C[N-1] C[N-2]....C[3] C[2] C[1] C[0]
【0055】ここで: C[0]=W そして i=0,1,...,N:に対して (C[i+1],S[i])はX[i],Y[i]およ
びZ[i]の2ビット和である。
【0056】計算は各列毎に個別に、桁上がりチェイン
無しに行われるので、これは通常の足し算よりもかなり
早い。(例えば、ARM6マイクロプロセッサ上の掛け
算では通常の足し算を使用しこれらの1つをクロックサ
イクル毎に実行する。桁上がり保存足し算を使用してい
る集積回路ではクロックサイクル毎に4からそれ以上の
足し算を実行する。) ここにJ個の足し算されるべき被乗数倍数があるとする
と、この技術をJ−2回使用して最終結果を得るために
足し算しなければならない数として、これらを2つの数
に削減する事ができる。この最終の足し算は通常の足し
算を必要とするが、全体としてJ−2回の桁上がり保存
足し算とひとつの通常の足し算は、元のJ−1回の足し
算に比較してかなりの改善である。
【0057】通常の対処法は通常の加算器用のそれと類
似している:最初に”桁上がり”と”保存”値とをそれ
らの合計値がゼロとなるように初期化する(例えば、こ
れらを共にゼロに初期化する事により)、次に桁上がり
保存足し算を使用して被乗数倍数への加算を1つずつ実
行する。最後に、通常の足し算を用いて”桁上がり”
と”保存”値の最終合計値を求める。先と同様に掛け算
累算演算を自由に行うことが出来て、これは”桁上が
り”と”保存”値とをそれらの和が累算値となるよう
に、例えばそれらの1つをゼロにもう一方を累算値とす
るように初期化する事によって行える。実際、初期化す
る値が2つあるので、ふたつの累算値に足し算すること
が出来るが、これは非常に有用というわけでは無い:こ
の第2累算値スロットの有効な使用方法は後で説明す
る。
【0058】上記の全ては我々が2Nビットの足し算を
実行していることを仮定している、例えば32x32の
掛け算を実行する場合は、64ビットの足し算を行うこ
とになる。これはやっかいである、何故ならば典型的に
は結果としてデータ経路部分に他の残りのデータ経路の
2倍の長さを必要とするためである。
【0059】しかしながら、足し算する値を調べてみる
と”関心のある”値はNビットよりも僅かに多い部分に
しか含まれていないことが分かる。例えば、Nが奇数の
修正ブース符号化器でのXi*Dを考えてみる。Xiは
−2(2*i) , −2(2*i-1) ,0,2(2*i-1) および2
(2*i) , の内の一つであり、これは下記のいずれか一つ
のXi*Dに対応する:
【表2】
【0060】先頭N−2*iビットも後尾2*i−1ビ
ットも非常に関心があるわけでは無い。特に桁上げビッ
トを全てがゼロとなるように後尾2*i−1ビットに加
えて、同じ桁上げを各々の場合に中間N+1ビットに加
えることが出来る、すなわち上記を次のように置き換え
ることが出来る
【表3】
【0061】次に後尾2*i−1ビットに対しては桁上
げ保存足し算をする必要が無いことが分かる:2つの値
とゼロとの桁上げ保存足し算を行うよりもむしろ、ふた
つの値を変更せずにそのまま残すことが出来る。更に、
もしも”保存”および”桁上げ”の先頭N−2*iビッ
トが全て同一である場合は、先頭N−2*i列足し算の
全ては同一となり、従って我々はそれら全ての評価を行
うのにひとつの回路のみを必要とする。その結果とし
て、我々は丁度N+2列の加算器(中間N+1ビット用
のN+1と先頭N−2*iビット用のひとつ)が用意さ
れれば全てを実行できる: (a)その先頭Nビットが同一の”保存”値から始め
る; (b)その先頭Nビットが同一の”桁上げ”値から始め
る; (c)被乗数倍数をX0*D,X1*D,X2*
D,...,xk*Dの順番に、各々の足し算がその先
頭に前回のものより少ない数の同一ビットを必要とする
ように足し算する;そして (d)我々が”関心を有する領域”を各繰り返し毎に左
に2ビットシフトし、後尾の端から脱落するビットを格
納する。計算の最後に、これらのビットが最終”桁上
げ”および”保存”値の低端を形成し、一方最終の”関
心を有する領域”がそれらの高端を形成するはずであ
る。
【0062】これは我々が掛け算器の主要部をそのデー
タ経路の幅が、その幅の2倍ではなく、少し”出っ張っ
た”もので実現することを可能としている。最終の足し
算だけは未だ2倍幅で無ければならないが、単一幅の加
算器を2つ使用し、第1足し算からの桁上げビットを第
2足し算の繰り入れビットとして使用することで実施で
きる。
【0063】制約条件の中でも、最後の2つは回路を正
しく実現する事に関するものである。しかしながら、最
初の2つはいずれの累算値もそれが符号付きの場合は最
大Nビット幅であり、約2Nビット幅では無いことを意
味している。累算値に対するこの制約を回避し、例えば
32x32+32の代わりに32x32+64掛け算累
算命令を実行するための技法が以下に説明されている。
【0064】任意の個別の掛け算器はハードウェアで構
成された倍数の段階を含む事に注意されたい、これは被
乗数倍数を生成し現状の”桁上げ”および”保存”形式
の中への桁上げ保存足し算を実行する(このハードウェ
アを以降”掛け算器列”と呼ぶ)。極端な例では、各々
の繰り返し用の個別の掛け算器列を具備した全掛け算器
配列が存在する。
【0065】一方では、全ての繰り返しを取り扱う唯ひ
とつの掛け算器列を具備した、完全に繰り替えし実行掛
け算器も存在する。この中間として、ひとつより多い複
数列を具備した繰り返し方式のものも存在する。
【0066】桁上げ保存形式の初期化 上記のように、我々は桁上げ保存形式の”桁上げ”と”
保存”の両方を初期化することが可能である。これらの
内の1つは累算値用に必要である。もう一方は被乗数倍
数の内のひとつとして使用できるであろう。これに関す
る主な問題は、桁上げ保存形式初期化装置が被乗数倍数
生成器を含まなければならないことを意味している。こ
れはスペースを消費する:更に重要なことは、これが余
分の初期化遅れを引き起こすことである。
【0067】この余分の遅れの大きさは、関係する被乗
数倍数の生成の複雑さに依存する。先に示されている修
正ブース符号化で生成されるXiに関する式を見ると、
ひとつは特に単純である、すなわちNが奇数の場合、X
0=−R[0]である。勿論通常我々はNが偶数の場合
にも関心がある;しかしながら、先に見たように符号付
きおよび符号無しNビット数値の掛け算の要求を処理す
る良い方法は、実際(N+1)ビット数値を掛け算する
ことである。
【0068】これらの考察から以下の符号付きおよび符
号無し変数の両方を取り扱い、修正ブース符号化および
桁上げ保存足し算を使用し、Nが偶数の場合のNビット
とNビットとの掛け算累算に対する初期化方法が導かれ
る:内部掛け算被演算子R[N:0]を次のように初期
化する: R[N−1:0]=供給された掛け算器被演算子: R[N]=0 符号無し変数が必要な場合; =R[N−1] 符号付き変数が必要な場合。 ”桁上げ”および”保存”値の内の1つを供給されるN
ビットまたは2Nビット累算値(それが符号無しかまた
は符号付きかに基づいてゼロまたは符号ビットのコピー
で拡張されている。)に初期化する
【0069】”桁上げ”および”保存”値の内の残りの
もう一方をR[0]=0の場合はゼロに、そしてR
[0]=1の場合は供給された被乗数にマイナスを付け
たもの(状況に応じて符号付きまたは符号無しとして取
り扱われる)に初期化される。
【0070】この最後のものは供給された被乗数のマイ
ナス、すなわち2の補数を生成しなければならないので
少し複雑に見える。その代わりに1の補数を形成し1を
加えるという便法を使用する方が都合が良いであろう。
問題は:いつこの1を加算するかである。
【0071】良い答えは掛け算の最後に於いてである。
その理由は、桁上げ保存形式への最後の足し算は現在の
所、その”桁上げ”および”保存”部を互いに足し算す
るだけで良いからである。ほとんどの加算器ではふたつ
の数と桁上げビットとを足し算するので、従って桁上げ
ビットは使用されていない。桁上げビットをR[0]と
等しく設定する事により、R[0]=1の際の初期化中
に被乗数の2の補数と1の補数を使用することの間の違
いを補償することが出来る。従って我々は下記の初期化
法を得る:内部乗数被演算子R[N:0]を下記のよう
に初期化する: R[N−1:0]=供給された掛け算器被演算子; R[N] =0 符号無し変数が必要な場合; R[N−1] 符号付き変数が必要な場合。 ”桁上げ”および”保存”値の1つを供給されたNビッ
トまたは2Nビット累算値(適当に符号付きまたは符号
無しとして取り扱われる)で初期化する。”桁上げ”お
よび”保存”値の残りの1つを、R[0]=0の場合は
ゼロに、R[0]=1の場合は供給された被乗数(適当
に符号付きまたは符号無しとして取り扱われる)のビッ
ト毎に反転したもの(すなわち1の補数)に初期化す
る。最終足し算用の繰り越しビットをR[0]に設定す
る。
【0072】長い累算値の取り扱い 先に述べたように、掛け算の第i段階における全ての先
頭N−2*iビットを単一ビットで表現できる場合は、
累算値の長さはNビットにしかならない。もしも累算値
がもっと長い場合は、これにまともに対処するためにデ
ータ経路の幅を増やす必要がある。
【0073】先頭N−2*iビットの中で、我々が最初
に必要とするのは同一ではないビットを含むことの出来
る”桁上げ”および”保存”値の1つであることに注意
されたい:その他のものは、被乗数倍数の先頭N−2*
iビットと同様に、全て同一ビットを含むことが出来
る。不幸にして、先頭桁上げ保存足し算を行った後で
は、”桁上げ”および”保存”の両方ともそれらの先頭
ビットの中に同一ではないビット列を含む可能性があ
る。もしもこれが発生しない場合で、我々が足し算によ
って累算値の先頭ビットが変更されずに残り、そして全
てのその他の値が同一ビット列として残るように構成で
きれば、我々は再び主作業をほぼNビット幅のデータ経
路で繰り返し行うことが出来る:先の事象の状態からの
唯一の違いは、繰り返し演算毎に主計算に対して累算値
の2ビットを供給しなければならない点である。
【0074】これに対処する方法は、単純な桁上げ保
存”各々の列に3ビットを加算”技術を修正することで
ある。上記と同様の方法で、我々は”桁上げ”および”
保存”値を3つの領域に分割する: (a)”低”領域、ここでは”桁上げ”および”保存”
値に対して変更は加えられない。Xi*Dをこれらに加
算した後、この領域はLiビットを含み、ここでNが奇
数の場合はLi=2*i+1(先に図示した通り)、そ
してNが偶数の場合はLi=2*i+2である。Nが偶
数の場合は、これはXi*Dが加算される前はLi=2
*iと言って表現するとも出来る;Nが奇数の場合もま
たXi*Dが加算される前はLi=2*i−1と言って
表現出来る、もしもi=0に対して特別ケースが定めら
れていればの話である(例えば、X0*Dの加算を、先
に述べたのと同様初期化に組み込む等);SL[Li−
1:0]およびCL[Li−1:0]はそれぞれ低”桁
上げ”および”保存”ビットを表す。 (b)”中間”または”活性”領域、ここでは主たる桁
上げ保存足し算が実行される。この領域はN+1ビット
を含み、それぞれ”桁上げ”および”保存”値としてS
[N:0]およびC[N:0]と表される。 (c)”高”領域、ここでは”保存”値は累算値のここ
までは未使用のビットを含み、”桁上げ”値は単にC
[N]のコピー列である。桁上げ保存形式の中にXi*
Dを加算する前、この領域は2*(k−1)+2ビット
長、すなわち我々が活性領域の中に加算毎に2ビットで
持ち込みたい累算ビットの数である。(kは最後のXi
のインデックスであることを想起されたい。)
【0075】確認すると、”桁上げ”および”保存”値
の全長は次のようになる: Nが偶数の場合: Li+(N+1)+(2*(k−
i)+2)=2*i+N+1+2*k−2*i+2 =N+1+2*(N/2−1)+2=N+N+1 Nが奇数の場合: Li+(N+1)+(2*(k−
i)+2)=2*i+N+1+2*k−2*i+2 =−1+N+2*((N−1)/2)+2=N+N+1 従って我々は当然、長さ2N+1ビットの累算値A[2
N:0]を取り扱うことになる。(勿論我々はもっと短
い累算値(例えばNビット)を、必要に応じてそれらに
ゼロ拡張または符号拡張を施すだけで取り扱うことが可
能である;また我々はより長い累算値を取り扱うことも
可能であるが、余分なビットは主演算で全く変更される
ことなく、最終足し算の間に単に対応する”桁上げ”値
ビット(すなわちC[N]のコピー)に加算される必要
があるだけである。)
【0076】従って、我々がXi*Dを桁上げ保存形式
の中に加算する前の、”桁上げ”および”保存”値は次
のようになる:
【表4】
【0077】次に、被乗数倍数がどの様になっているか
を調べる必要がある。最初にNビットの符号付きまたは
符号無し倍数D[N−1:0]から始める、これに符号
拡張またはゼロ拡張をそれぞれ施して、(N+1)ビッ
ト符号付き倍数D[N:0]を形成する。上記の様に被
乗数倍数を形成すると、下記の形式の被乗数倍数を、”
ブース桁”−2*R[2*i+1]+R[2*i]+R
[2*i−1](Nが偶数の場合)または−2*R[2
*i]+R[2*i−1]+R[2*i−2](Nが奇
数の場合)に応じて得る:
【表5】 ここで、I[N:0]はD[N:0]をビット毎に反転
したもの(または1の補数)である。
【0078】これらすべてはX[N+1:0]およびX
Cという値に対して次の形式となる:
【表6】 従って我々が実行したいと望む加算の形式は:
【表7】
【0079】我々は同じ形式で”桁上げ”および”保
存”値を纏めたいのであるが、iでひとつ大きく、また
従ってLiで2つ大きくなる。処理過程で我々はS
[N:0]およびC[N:0]の新たな値を生成しよう
としており、これはそれぞれS’[N:0]およびC’
[N:0]と呼ばれる。我々はまたSL[Li+1:L
i]も生成し、これはSL[]の新たな2ビットである
が、これは既存のSL[Li−1:0]の外乱とはなら
ない。同様にわれわれは新たな2ビットCL[Li+
1:Li]を生成するが、これは既存のCL[Li−
1:0]の外乱とはならない。最後にA[2N:Li+
N+1]の最下位2ビットが消費される、従って我々は
修正桁上げ保存足し算が下記の形式を生成する事を欲す
る:
【表8】
【0080】我々が実行させたい足し算をこれに整合さ
せるために、我々は我々の修正桁上げ保存加算が下記の
形式であれば良いことが分かる:
【表9】 ”高”領域 遷移ビット ”活性”領域 遷移ビット ”低”領域 A[2N:Li+N+3] A[Li+ A[Li+N S[N:2] S[1] S[0] SL[Li-1:0] N+2] +1] C[N],..,C[N] C[N] C[N] C[N:2] C[1] C[0] CL[Li-1:0] X[N+1],.X[N+ X[N+ X[N+1] X[N:2] X[1] X[0] 0,0,...,0 1] 1] 0,0,...,0 0 0 0,0,...,0 0 XC 0,0,...,0 ======================================================================+ A[2N:Li+N+3] S'[N] S'[N-1] S'[N-2:0] SL[Li SL[Li] SL[Li-1:0] +1] C'[N],.., C'[N] C'[N-1] C'[N-2:0] CL[Li CL[Li] CL[Li-1:0] C'[N] +1]
【0081】我々は直ちに”低”領域を除去できる、何
故ならばこの領域が最終合計値には何の変化も与えない
ためである。同様に、線の上下の同じ位置に現れるビッ
ト、A[2N:Li+N+3]を除去する事も可能であ
る:これらが最終の形に変更を与えないことも明白だか
らである。この後我々の修正桁上げ保存加算が下記の形
式を取らなければならないことが分かる:
【表10】 ”高”領域 遷移ビット ”活性”領域 遷移ビット 0,....,0 A[Li+N+2] A[Li+N+1] S[N:2] S[1] S[0] C[N],..,C[N] C[N] C[N] C[N:2] C[1] C[0] X[N+1],.X[N+1] X[N+1] X[N+1] X[N:2] X[1] X[0] 0,....,0 0 0 0,...,0 0 XC ====================================================================+ 0,....,0 S'[N] S'[N-1] S'[N-2:0] SL[Li+1] SL[Li] C'[N],..,C'[N] C'[N] C'[N-1] C'[N-2:0] CL[Li+1] CL[Li]
【0082】次に、通常の桁上げ保存加算を”活性”領
域ならびにその下の二つの遷移ビットに対して行う。次
の操作を行うことにより: CL[Li] = XC; (CL[Li+1],SL[Li]) = S[0],C[0]およびX[0]の2ビット和; (C'[0],SL[Li+1]) = S[1],C[1]およびX[1]の2ビット和; i=2,3,....N に対して: (C'[i-1],S'[i-2] = S[i],C[i]およびX[i]の2ビット和; 線の下側のS'[N-2:0],SL[Li+1],SL[Li],C'[N-1:0],CL[L
i+1]およびCL[Li]とが、最終合計値に対して線の上側の
S[N:0],C[N-1:0],X[N:0],XC およびC[N]の”活性”領域
コピーと同じ寄与をする事を保証出来る。従ってここで
これら全てを、XCを含む線上の全てのゼロといっしょ
に除去することが可能であり、残った修正桁上げ保存加
算は次の形式を取らねばならない:
【表11】 ”高”領域 遷移ビット 0,....,0 A[Li+N+2] A[Li+N+1] C[N],....,C[N] C[N] C[N] X[N+1],...X[N+1] X[N+1] X[N+1] ====================================================================+ 0,....,0 S'[N] S'[N-1] C'[N],..,C'[N] C'[N] 0
【0083】この時点で我々は、この残りの合計に対し
ていくつかの数学的変更を加える。最初に、その第2行
を下記の2行の合計で置き換えることが出来る: 1,...,1 1 1 0,...,0 0 NOT(C[N])
【0084】証明:もしもC[N]が1であれば、これ
は全てが1の行または全てが0の行の合計であり、これ
は全てが1の行となる。逆に、もしもC[N]が0の場
合は、これは全てが1の行とその右端のひとつが1の合
計となる。これは全てが0の行プラスその左端の桁上げ
を作り出す。桁上げは無視される、何故ならばそれは我
々が加算を行っている領域の外側だからである。従って
いずれの場合も、合計はC[N]のコピーの行となる。
【0085】同様に、第3行は下記2行の合計で置き換
えることが出来る: 1,...,1 1 1 0,...,0 0 NOT(X[N+1])
【0086】これは要求される桁上げ保存加算を次の形
式に変更する:
【表12】 ”高”領域 遷移ビット 0,....,0 A[Li+N+2] A[Li+N+1] 1,....,1 1 1 0,....,0 0 NOT(C[N]) 1,....,1 1 1 0,....,0 0 NOT(X[N+1]) ====================================================================+ 0,....,0 S'[N] S'[N-1] C'[N],..C'[N] C'[N] 0
【0087】次に我々は1で構成された2つの行を加算
する、ここでも桁上げは無視する、何故ならばそれは我
々が加算を行っている領域の外側だからである。これは
要求される桁上げ保存加算を次の形式に変更する:
【表13】 ”高”領域 遷移ビット 0,....,0 A[Li+N+2] A[Li+N+1] 1,....,1 1 0 0,....,0 0 NOT(C[N]) 0,....,0 0 NOT(X[N+1]) ====================================================================+ 0,....,0 S'[N] S'[N-1] C'[N],..,C'[N] C'[N] 0
【0088】この時点で、次の操作を行うとすると: (S'[N],S'[N-1]) = A[Li+N+1],NOT(C[N])およびNO
T(X[N+1]) の2ビット和
【0089】我々はこれら全てのビットを要求される加
算から、いくつかのゼロと共に除去することが分かり、
以下が残る:
【表14】 ”高”領域 遷移ビット 0,....,0 A[Li+N+2] 1,....,1 1 ====================================================================+ C'[N],..,C'[N] C'[N]
【0090】最後に、次の操作を行うとすると: C'[N] = NOT(A[Li+N+2]) この加算合計の残りの部分を、引数の逆で解き、これは
我々が全てがC[N]の行を全てが1の行並びにその右
端にNOT(C[N])のみを含む行で置き換えられる
ことを示している。
【0091】最終的な結論:下記の一連の操作を実行す
る:i=2,3,....,N に対して CL[Li] =XC; (CL[Li+1],SL[Li]) =S[0],C[0] 及び X[0]の2ビット和 (C'[0],SL[Li+1]) =S[1],C[1] 及び X[1]の2ビット和 (C'[i-1],S'[i-2]) =S[i],C[i] 及び X[i]の2ビット和 (S'[N],S'[N-1]) =A[Li+N+1],NOT(C[N])及び NOT(X[N+1]) の2ビット和 C'[N] =NOT(A[Li+N+2]) 我々は変更された桁上げ保存加算を我々が要求する演算
に対して実施できる:
【表15】 ”高”領域 遷移ビット ”活性”領域 遷移ビット ”低”領域 A[2N:Li+N+3] A[Li+ A[Li+N S[N:2] S[1] S[0] SL[Li-1:0] N+2] +1] C[N],..,C[N] C[N] C[N] C[N:2] C[1] C[0] CL[Li-1:0] X[N+1],.X[N+ X[N+ X[M+1] X[M:2] X[1] X[0] 0,0,...,0 1] 1] 0,0,...,0 0 0 0,0,...,0 0 XC 0,0,...,0 ======================================================================+ A[2N:Li+M+3] S'[M] S'[M-1] S'[N-2:0] SL[Li SL[Li] SL[Li-1:0] +1] C'[N],.. C'[N] C'[N-1] C'[N-2:0] CL[Li CL[Li] CL[Li-1:0] C'[N] +1]
【0092】従って、もしも我々が”桁上げ”および”
保存”値を正しく初期化出来れば、我々は2Nビット累
算値を備えたNビットとNビットの掛け算累算演算を、
初期化し、被乗数倍数への加算を上記の修正された桁上
げ保存加算を用いて行い、そして最終足し算を桁上げ保
存値に対して実行することにより実施することが可能で
ある。
【0093】次に掛け算器の例を説明する、これは上記
を使用して32x32−>64掛け算と、32x32+
64−>64掛け算累算演算を、符号付きおよび符号無
しの両方で算出するものである。32x32−>32
と、32x32+32−>32演算は、下位32ビット
が決定された時点で掛け算を早めに終了するか、累算値
の初期化を下位のみに行うことで生成できる。
【0094】この例では図示されていない更に別の可能
な改善は: * 早めの終了、これは基本的に残りの全ての被乗数倍
数がゼロになった時点の検出(従って更なる加算は実際
上必要とされない)を含み、続いて”低”、”活性”お
よび”高”領域内のビットの無駄な再構成の代わりに、
正しい最終加算を生成するための何か別のことを実行す
る。 * この回路内に最終加算器を用意する必要を、データ
経路上に存在する別の加算器、例えばALUを使用する
ことにより無くする。 * ”保存低ラッチ”は最後尾から2ビット/乗数行ま
でを満たし、一方”累算値高ラッチ”は最後尾からその
同じ所まで空であるという事実をうまく利用し、同一の
物理的レジスタを用いて、2つの値を保持することが可
能である。最初にこれは累算値の高位部分を含む;最終
的にこれは”保存”値の低位部分を含む;その間は、未
消費の高累算値ビットと生成途中の”保存”ビットとを
含む。これは回路にとって有益な改善である。掛け算器
は下記の入力を使用する: MPLIER[31:0] − 乗数被演算子 MCAND [31:0] − 被乗数被演算子 ACCVAL[63:0] − 累算値 SIGNED − 単一ビットで、符号付き演算が行われるとき は1、符号無し演算が行われるときは0であ る。 ACCUM − 単一ビットで、掛け算累算演算が行われると きは1、掛け算のみが実行されるときは0で ある。 これに加えて、事象を正しい順番で発生させ るための制御入力。
【0095】回路はRESULT[63:0]をその結
果として生成する。
【0096】この掛け算器の基本ブロック図が図6並び
に図7に示されている(分かり易くするために制御信号
は図示されていない):
【0097】この掛け算器は、MPLIER[31:
0]*MCAND [31:0]+ACCVAL[6
3:0]を5サイクルの間に計算し、種々のブロックは
各サイクル毎に下記の機能を実行する:乗数ラッチ サイクル1: R[31:0] =MPLIER[3
1:0] R[32] =SIGNEDおよびMPLIER
[31] サイクル2−5 : 変化無し被乗数ラッチ サイクル1: R[31:0] =MCAND R[32] =SIGNEDおよびMCAND
[31] サイクル2−5 : 変化無し桁上げ保存初期化器 サイクル1:i=0,1,...,32に対して: SI[i]=ACCUMおよびACCVAL[i] CI[i]=R[0]およびNOT(D[i]) サイクル2−5 : 変化無し桁上げ保存ラッチA サイクル1−3:フェーズ2で、S0[32:0]およ
びC0[32:0]がそれぞれS6[32:0]並びに
C6[32:0]からロードされる。 サイクル4−5:変化無し。桁上げ保存ラッチB サイクル1−4:フェーズ1で、S4[32:0]およ
びC4[32:0]がそれぞれS3[32:0]並びに
C3[32:0]からロードされる。 サイクル5 :変化無し。マルチプレクサA サイクル1: S1[32:0]=SI[32:
0] C1[32:0]=CI[32:0] サイクル2−5: S1[32:0]=S0[32:
0] C1[32:0]=C0[32:0]ブースエンコーダ サイクル1: B1[4:0]=BoothEnc
(R[2:0]) B2[4:0]=BoothEnc(R[4:2]) B4[4:0]=BoothEnc(R[6:4]) B5[4:0]=BoothEnc(R[8:6]) サイクル2: B1[4:0]=BoothEnc
(R[10:8]) B2[4:0]=BoothEnc(R[12:1
0]) B4[4:0]=BoothEnc(R[14:1
2]) B5[4:0]=BoothEnc(R[16:1
4]) サイクル3: B1[4:0]=BoothEnc
(R[18:16]) B2[4:0]=BoothEnc(R[20:1
8]) B4[4:0]=BoothEnc(R[22:2
0]) B5[4:0]=BoothEnc(R[24:2
2]) サイクル4: B1[4:0]=BoothEnc
(R[26:24]) B2[4:0]=BoothEnc(R[28:2
6]) B4[4:0]=BoothEnc(R[30:2
8]) B5[4:0]=BoothEnc(R[32:3
0]) サイクル5:変化無し ここでBoothEnc機能は下記の表で指定される:
【表16】
【0098】掛け算器行1,2,4および5 全てのサイクルに於いて、掛け算器行kは入力D[3
2:0],Bk[4:0],AHk[1:0],Sk
[32:0]およびCk[32:0]をとり、下記の式
に従って出力S(k+1)[32:0],C(k+1)
[32:0],SLk[1:0]およびCLk[1:
0]を生成する:
【0099】最初にマルチプレクサを用い、下記の表に
従ってX[33:0]並びにXCを生成する:
【表17】 次に CLk[0] =XC; (CLk[1],SLk[0]) =Sk[0],Ck[0]およびX[0]の2ビット和; (C(k+1)[0],SLk[1]) =Sk[1],Ck[1]およびX[1]の2ビット和; i=2,3,...,32に対して: (C(k+1)[i-1],S(k+1)[i-2]) =Sk[i],Ck[i]およびX[i]の2ビット和; (S(k+1)[32],S(k+1)[31]) =AHk[0],NOT(Ck[32]),NOT(Ck[32]) および NOT(X[33]) の2ビット和; C(k+1)[32] =NOT(AHk[1])
【0100】これらは内部信号ACCHI[31:0]
を含むサイクル1:i=0,1,..,30に対して : ACCHI[i]=ACCUM およびACCVAL[i+33] ACCHI[31]=SIGNED およびACCUM およびACCVAL[63] AH1[1:0]=ACCHI[1:0] AH2[1:0]=ACCHI[3:2] AH4[1:0]=ACCHI[5:4] AH5[1:0]=ACCHI[7:6] サイクル2: AH1[1:0]=ACCHI[9:8] AH2[1:0]=ACCHI[11:10] AH4[1:0]=ACCHI[13:12] AH5[1:0]=ACCHI[15:14] サイクル3: AH1[1:0]=ACCHI[17:16] AH2[1:0]=ACCHI[19:18] AH4[1:0]=ACCHI[21:20] AH5[1:0]=ACCHI[23:22] サイクル4: AH1[1:0]=ACCHI[25:24] AH2[1:0]=ACCHI[27:26] AH4[1:0]=ACCHI[29:28] AH5[1:0]=ACCHI[31:30] サイクル5:変化無し桁上げ保存低ラッチ サイクル1: SL[7:0] =(SL5[1:0],SL4[1:0],SL2
[1:0],SL1[1:0]) CL[7:0] =(CL5[1:0],CL4[1:0],CL2[1:0],CL1[1:0]) サイクル2: SL[15:8] =(SL5[1:0],SL4[1:0],SL2
[1:0],SL1[1:0]) CL[15:8] =(CL5[1:0],CL4[1:0],CL2[1:0],CL1[1:0]) サイクル3: SL[23:16] =(SL5[1:0],SL4[1:0],SL2
[1:0],SL1[1:0]) CL[23:16] =(CL5[1:0],CL4[1:0],CL2[1:0],CL1[1:0]) サイクル4: SL[31:24] =(SL5[1:0],SL4[1:0],SL2
[1:0],SL1[1:0]) CL[31:24] =(CL5[1:0],CL4[1:0],CL2[1:0],CL1[1:0]) サイクル5:変化無しマルチプレクサB サイクル1−4: SF[31:0] = SL[31:0] CF[31:0] = CL[31:0] サイクル5 : SF[31:0] = S6[31:0] CF[31:0] = C6[31:0]マルチプレクサC サイクル1−4: CIN=R[0] サイクル5 : CIN=NEWC桁上げラッチ サイクル1−3:変化無し サイクル4 :NEWC=COUT サイクル5 :変化無し最終加算器 全てのサイクルに於いて:(COUT,SUM[31:0])=SF[31:0],
CF[31:0]およびCIN の33ビット和。結果ラッチ サイクル1−3:変化無し サイクル4 :RESULT[31:0] =SUM[31:0] サイクル5 :RESULT[63:32] =SUM[31:0]
【0101】図6並びに図7は共に、Nビット被乗数
(MCAND[])とNビット乗数(MPLIE
R[])とを掛け算し、続いて2Nビットの累算値(A
CCVAL[])を加算するための、掛け算累算回路を
図示しており、この例ではN=32である。Nビット乗
数は乗数ラッチ2の中に取り込まれ、Mビット被乗数が
被乗数ラッチ4の中に取り込まれる。2Nビット累算値
の下位部分が、桁上げ保存初期化器6に送られ、2Nビ
ット累算値の上位部分は累算値上位ラッチ8に送られ
る。桁上げ保存初期化器6はNビット被乗数(D[])
を受け取り、これのビットのビット毎反転またはゼロ
を、それぞれ乗数ラッチ2の最下位ビットの値が1であ
るかまたはゼロであるかに応じて、生成する。この結果
はマルチプレクサA10に送られ、桁上げ値または保存
値のいずれかひとつとなる。桁上げ値または保存値のも
う一方は累算値の最下位ビットを構成する。
【0102】Nビット乗数はまた、一連のブースエンコ
ーダ12にも送られ、これは修正されたブース被加数を
生成し、これは後続の掛け算器行のそれぞれひとつに送
られる。
【0103】図7に示されるように、掛け算器行14,
16,18,20の順番は各々先に説明した掛け算器ア
ルゴリズムを実行するものと仮定している。この掛け算
器アルゴリズムは各々の繰り返し演算に於いて、累算値
の2ビットを組み入れている。各サイクルでの各々の掛
け算器行14,16,18,20への入力は、ブース桁
(B1[],B2[],B4[],B5[])、累算値
高ラッチ8の中に格納されている累算値からのビット、
被乗数ラッチ4からのNビット被乗数のビット並びに直
接または間接的に先に実行された掛け算器行からの保存
値および桁上げ値である。
【0104】各々の掛け算器行からの出力は、以降の繰
り返し演算ではもはや変化しない最下位ビット(SL,
CL)と、現行の保存値および桁上げ値である。これら
の最下位ビットは桁上げ低ラッチ24の中に累算され
る。保存値並びに桁上げ値(S6[],C6[])は桁
上げ保存ラッチA22とマルチプレクサA10を経由し
て、最初の掛け算器行14に送り返される。最後の掛け
算繰り返し演算が完了すると、最後の掛け算器行20お
よび桁上げ保存低ラッチ24からの桁上げ値並びに保存
値はそれぞれ最終加算器26に送られ、ここでそれらは
2サイクルにわたって加算され(桁上げ保存低ラッチ2
4からの値は最終加算器26に第1サイクルで送られ、
最終掛け算器行20からの値は第2サイクルで送られ
る)、その結果は結果ラッチ28の中に格納される。マ
ルチプレクサC30は1の補数を取る初期化の時に出た
桁上げビットR[0]を最終加算器26の第1加算サイ
クル中に供給し、最終加算器の第1と第2サイクルとの
間では必要に応じて任意の桁上げビットを供給するよう
に作用する。
【0105】本発明の例示を目的とした実施例を添付図
を参照してここに詳細に説明してきたが、本発明はこれ
らの詳細な実施例に制限されるものではなく、当業者に
よって種々の変更並びに修正を添付の特許請求の項に定
義されている本発明の範囲並びに精神から逸脱すること
なく行えることは理解されよう。
【図面の簡単な説明】
【図1】集積回路マイクロプロセッサ内の機能ユニット
を図示する。
【図2】レジスタ資源の使用と、種々のプログラム命令
ワードに応答して実行される算術演算とを図式的に図示
し、32*32+32−>32掛け算累算演算に応答す
る資源の使用を図示する。
【図3】レジスタ資源の使用と、種々のプログラム命令
ワードに応答して実行される算術演算とを図式的に図示
し、32*32+64−>64掛け算累算演算に応答す
る資源の使用を図示する。
【図4】レジスタ資源の使用と、種々のプログラム命令
ワードに応答して実行される算術演算とを図式的に図示
し、32*32−>32掛け算演算に応答する資源の使
用を図示する。
【図5】レジスタ資源の使用と、種々のプログラム命令
ワードに応答して実行される算術演算とを図式的に図示
し、32*32−>64掛け算演算に応答する資源の使
用を図示する。
【図6】掛け算累算器ユニットの部分を図示し、データ
取り込み部分を主として図示する。
【図7】掛け算累算器ユニットの部分を図示し、演算処
理部分を主として図示する。
【符号の説明】
2 乗数ラッチ 4 被乗数ラッチ 6 桁上げ保存初期化器 10 マルチプレクサ 12 ブースエンコーダ 14,16,18,20 掛け算器行 26 最終加算器 28 結果ラッチ 32 命令ワード 102 処理装置コア 104 メモリシステム 106 レジスタバンク 108 掛け算累算器 114 書き込みデータレジスタ 116 命令パイプライン 118 命令デコーダ 120 読み込みデータレジスタ 122 プログラム計数レジスタ 124 プログラム計数器更新器 126 現行プログラム状態レジスタ 128 保存プログラム状態レジスタ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 デビッド ビビアン ジャガー イギリス国ケンブリッジ,チェリー ヒン トン,マンドリル クロース 48

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 データ処理装置であって: (i) Nビットデータ処理レジスタのレジスタバン
    ク;そして(ii)前記レジスタバンクに結合され、前
    記Nビットデータ処理レジスタ内に保持されている被演
    算子に対して掛け算累算演算処理を実行するための掛け
    算累算器とを含み;ここに於いて(iii)前記掛け算
    累算器は掛け算累算命令の第1クラスに応答して、第1
    データ処理レジスタ内に保持されているNビット被演算
    子と第2データ処理レジスタ内に保持されているNビッ
    ト被演算子とを掛け算し、そして第3データ処理レジス
    タ内に保持されているNビット被演算子を加算して、第
    4データ処理レジスタの中に格納されるNビットの結果
    を算出し、前記第1、第2、第3および第4データ処理
    レジスタは掛け算累算命令の前記第1クラスの中のフィ
    ールドとして独立に指定され;そして(iv)前記掛け
    算累算は掛け算累算命令の第2クラスに応答して、第1
    データ処理レジスタ内に保持されているNビット被演算
    子と第2データ処理レジスタ内に保持されているNビッ
    ト被演算子とを掛け算し、そして第3データ処理レジス
    タ内に保持されている2Nビット被演算子を加算して、
    第4データ処理レジスタの中に格納される2Nビットの
    結果を算出し、前記第1、第2、第3および第4データ
    処理レジスタは掛け算累算命令の前記第1クラスの中の
    フィールドとして独立に指定されている、前記装置。
  2. 【請求項2】 請求項第1項記載の装置に於いて、前記
    掛け算累算器は掛け算と、累算とを単一組み合わせ演算
    として実行する、前記装置。
  3. 【請求項3】 請求項第1項記載の装置に於いて、 前記掛け算累算器は掛け算命令の第一クラスに応答し
    て、第1データ処理レジスタ内に保持されているNビッ
    ト被演算子と第2データ処理レジスタ内に保持されてい
    るNビット被演算子とを掛け算してNビットの結果を算
    出し、これは第3データ処理レジスタ内に格納され、前
    記第1、第2、および第3データ処理レジスタは前記掛
    け算命令の第1クラスの中のフィールドとして独立に指
    定されており;そして前記掛け算累算器は掛け算命令の
    第2クラスに応答して、第1データ処理レジスタ内に保
    持されているNビット被演算子と第2データ処理レジス
    タ内に保持されているNビット被演算子とを掛け算して
    2Nビットの結果を算出し、これは第3並びに第4デー
    タ処理レジスタ内に格納され、前記第1、第2、第3及
    び第4データ処理レジスタは前記掛け算命令の第2クラ
    スの中のフィールドとして独立に指定されている、前記
    装置。
  4. 【請求項4】 請求項第1項記載の装置に於いて、前記
    データ処理レジスタを指定する前記フィールドが、前記
    第1クラスの掛け算累算命令に含まれるの命令ビットお
    よび前記第2クラスの掛け算累算命令に含まれる命令の
    半分以上を占めないことを特徴とする、前記装置。
  5. 【請求項5】 請求項第1項記載の装置に於いて、前記
    データ処理レジスタの前記バンクが16個以下のデータ
    処理レジスタを含む、前記装置。
  6. 【請求項6】 請求項第1項記載の装置に於いて、前記
    装置が集積回路マイクロプロセッサを含む、前記装置。
  7. 【請求項7】 請求項第1項記載の装置に於いて、前記
    第1クラスの掛け算累算命令に含まれる命令および前記
    第2クラスの掛け算累算命令に含まれる命令が、条件付
    き実行コードを含み、そして前記条件付き実行コードに
    応答して命令がスキップされるべきかまたは実行される
    べきかの制御を行うための装置を含む、前記装置。
  8. 【請求項8】 請求項第1項記載の装置に於いて、前記
    掛け算累算器が専用のハードウェア掛け算累算器であ
    る、前記装置。
  9. 【請求項9】 請求項第1項記載の装置に於いて、Nが
    32に等しい前記装置。
  10. 【請求項10】 Nビットデータ処理レジスタのレジス
    タバンクと、前記レジスタバンクに結合され、前記Nビ
    ットデータ処理レジスタ内に保持されている被演算子に
    対して掛け算累算演算処理を実行するための掛け算累算
    器とを有する装置を使用したデータ処理の方法であっ
    て、該方法が: (i)掛け算累算命令の第1クラスに応答して、第1デ
    ータ処理レジスタ内に保持されているNビット被演算子
    と第2データ処理レジスタ内に保持されているNビット
    被演算子とを掛け算し、そして第3データ処理レジスタ
    内に保持されているNビット被演算子を加算して、第4
    データ処理レジスタの中に格納されるNビットの結果を
    算出し、前記第1、第2、第3および第4データ処理レ
    ジスタは掛け算累算命令の前記第1クラスの中のフィー
    ルドとして独立に指定され;そして(ii)掛け算累算
    命令の第2クラスに応答して、第1データ処理レジスタ
    内に保持されているNビット被演算子と第2データ処理
    レジスタ内に保持されているNビット被演算子とを掛け
    算し、そして第3データ処理レジスタ内に保持されてい
    る2Nビット被演算子を加算して、第4データ処理レジ
    スタの中に格納される2Nビットの結果を算出し、前記
    第1、第2、第3および第4データ処理レジスタは掛け
    算累算命令の前記第1クラスの中のフィールドとして独
    立に指定される、以上の手順を含む、前記方法。
JP14923095A 1994-07-14 1995-06-15 掛け算累算命令を使用したデータ処理 Expired - Lifetime JP3605181B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9414272A GB2291515B (en) 1994-07-14 1994-07-14 Data processing using multiply-accumulate instructions
GB94142726 1994-07-14

Publications (2)

Publication Number Publication Date
JPH0863353A true JPH0863353A (ja) 1996-03-08
JP3605181B2 JP3605181B2 (ja) 2004-12-22

Family

ID=10758362

Family Applications (1)

Application Number Title Priority Date Filing Date
JP14923095A Expired - Lifetime JP3605181B2 (ja) 1994-07-14 1995-06-15 掛け算累算命令を使用したデータ処理

Country Status (3)

Country Link
US (1) US5583804A (ja)
JP (1) JP3605181B2 (ja)
GB (1) GB2291515B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7668897B2 (en) 2003-06-16 2010-02-23 Arm Limited Result partitioning within SIMD data processing systems
KR100986375B1 (ko) * 2006-01-20 2010-10-08 콸콤 인코포레이티드 피연산자의 빠른 조건부 선택
JP2012506588A (ja) * 2008-10-22 2012-03-15 エスティー‐エリクソン、ソシエテ、アノニム デジタル・シグナル・プロセッサの演算論理装置

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2307072B (en) 1994-06-10 1998-05-13 Advanced Risc Mach Ltd Interoperability with multiple instruction sets
US5784305A (en) * 1995-05-01 1998-07-21 Nec Corporation Multiply-adder unit
JPH1049368A (ja) * 1996-07-30 1998-02-20 Mitsubishi Electric Corp 条件実行命令を有するマイクロプロセッサ
KR100451712B1 (ko) * 1997-03-12 2004-11-16 엘지전자 주식회사 멀티플리케이션장치및방법
US6446193B1 (en) 1997-09-08 2002-09-03 Agere Systems Guardian Corp. Method and apparatus for single cycle processing of data associated with separate accumulators in a dual multiply-accumulate architecture
FR2775368B1 (fr) * 1998-02-26 2000-04-14 Sgs Thomson Microelectronics Coprocesseur d'arithmetique modulaire permettant de realiser des operations non modulaires rapidement
GB2339936B (en) * 1998-05-27 2002-09-25 Advanced Risc Mach Ltd Data processing apparatus and method for performing multiply-accumulate operations
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6571268B1 (en) 1998-10-06 2003-05-27 Texas Instruments Incorporated Multiplier accumulator circuits
US6862678B1 (en) 2000-06-21 2005-03-01 Faraday Technology Corp. Apparatus and method for data processing using multiply-accumalate instructions
JP4278317B2 (ja) * 2001-07-05 2009-06-10 富士通マイクロエレクトロニクス株式会社 演算装置および受信装置
US7437532B1 (en) 2003-05-07 2008-10-14 Marvell International Ltd. Memory mapped register file
US7096345B1 (en) 2003-09-26 2006-08-22 Marvell International Ltd. Data processing system with bypass reorder buffer having non-bypassable locations and combined load/store arithmetic logic unit and processing method thereof
USH2212H1 (en) * 2003-09-26 2008-04-01 The United States Of America As Represented By The Secretary Of The Navy Method and apparatus for producing an ion-ion plasma continuous in time
JP4408712B2 (ja) * 2004-01-26 2010-02-03 富士通マイクロエレクトロニクス株式会社 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
US7627743B2 (en) * 2007-01-12 2009-12-01 Andes Technology Corporation Method and circuit implementation for multiple-word transfer into/from memory subsystems
GB2474901B (en) 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US9292297B2 (en) * 2012-09-14 2016-03-22 Intel Corporation Method and apparatus to process 4-operand SIMD integer multiply-accumulate instruction
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10802826B2 (en) * 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10664270B2 (en) * 2017-12-21 2020-05-26 Intel Corporation Apparatus and method for vector multiply and accumulate of unsigned doublewords
US10514923B2 (en) * 2017-12-21 2019-12-24 Intel Corporation Apparatus and method for vector multiply and accumulate of signed doublewords
US10846088B2 (en) * 2018-08-21 2020-11-24 Arm Limited Control of instruction execution in a data processor
US11941407B2 (en) 2019-05-20 2024-03-26 Gsi Technology Inc. Pipeline architecture for bitwise multiplier-accumulator (MAC)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1986002181A1 (en) * 1984-09-28 1986-04-10 Motorola, Inc. A digital signal processor for single cycle multiply/accumulation
US5204828A (en) * 1989-02-10 1993-04-20 Intel Corporation Bus apparatus having hold registers for parallel processing in a microprocessor
US5241492A (en) * 1991-05-06 1993-08-31 Motorola, Inc. Apparatus for performing multiply and accumulate instructions with reduced power and a method therefor

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7668897B2 (en) 2003-06-16 2010-02-23 Arm Limited Result partitioning within SIMD data processing systems
KR100986375B1 (ko) * 2006-01-20 2010-10-08 콸콤 인코포레이티드 피연산자의 빠른 조건부 선택
US9710269B2 (en) 2006-01-20 2017-07-18 Qualcomm Incorporated Early conditional selection of an operand
JP2012506588A (ja) * 2008-10-22 2012-03-15 エスティー‐エリクソン、ソシエテ、アノニム デジタル・シグナル・プロセッサの演算論理装置

Also Published As

Publication number Publication date
JP3605181B2 (ja) 2004-12-22
GB2291515B (en) 1998-11-18
GB2291515A (en) 1996-01-24
GB9414272D0 (en) 1994-08-31
US5583804A (en) 1996-12-10

Similar Documents

Publication Publication Date Title
JP3605181B2 (ja) 掛け算累算命令を使用したデータ処理
JP6744916B2 (ja) 冗長表現を用いた、第1および第2のオペランドの積算
US6742012B2 (en) Apparatus and method for performing multiplication operations
JP6694880B2 (ja) 有効度整合
US5991785A (en) Determining an extremum value and its index in an array using a dual-accumulation processor
US6115729A (en) Floating point multiply-accumulate unit
JP6882281B2 (ja) ベクトルの処理のためのレーン位置情報
JP6803381B2 (ja) 重複ビットを使用する数値の冗長表現
JP7096828B2 (ja) 入力オペランド値を処理するための装置及び方法
US11068238B2 (en) Multiplier circuit
US6295597B1 (en) Apparatus and method for improved vector processing to support extended-length integer arithmetic
US5528529A (en) Electronic multiplying and adding apparatus and method
JP6877812B2 (ja) 重複伝搬演算
CN113626759A (zh) 使用低位宽点积引擎对高位宽数求和
JP4601544B2 (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
US20240111489A1 (en) Bignum addition and/or subtraction with carry propagation
EP1936492A1 (en) SIMD processor with reduction unit

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040520

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040604

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040824

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: 20040924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041001

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081008

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081008

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091008

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101008

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111008

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121008

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131008

Year of fee payment: 9

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term