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
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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic 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
け算累算演算を、単一命令でかつ命令セット空間を浪費
することなく実現することを目的とする。 【構成】第1データ処理レジスタ内に保持されているN
ビット被演算子と第2データ処理レジスタ内に保持され
ているNビット被演算子とを掛け算し、そして第3デー
タ処理レジスタ内に保持されているNビット(または2
Nビット)被演算子を加算して、第4データ処理レジス
タの中に格納されるNビット(または2Nビット)の結
果を算出する。その際命令内のメモリ空間を節約するた
めに、2Nビットの精度で演算する際には、2Nビット
の累算値が取り出された同じレジスタに演算結果を書き
込んでいる。
Description
る。更に詳細には、本発明は掛け算累算命令が第1被演
算子が第2被演算子と掛け算されそして第3被演算子が
加算されることで結果を算出するように指定するように
使用されている種類のデータ処理に関する。被演算子は
システム内のデータ処理レジスタのバンクからデータ処
理レジスタの中に格納される。
有するデータ処理システムを用意することは知られてい
る。その様なシステムの1つの例は、アドバンストRI
SCマシン有限会社で製造されるARM6集積回路マイ
クロプロセッサである。ARM6マイクロプロセッサ
は、第1の32ビット被演算子を第2の32ビット被演
算子に掛け算し、次に第3の32ビット被演算子を加算
するための掛け算累算命令を組み込んでいる。この命令
に対する3つの入力被演算子を含むレジスタは、この結
果がその中に書き込まれるべきレジスタと共に掛け算累
算命令の中のフィールドで指定されている。例としてあ
げれば、互いに掛け算される2つの32ビット被演算子
はレジスタ5並びにレジスタ6であり、累算値はレジス
タ10の中にあってその結果がレジスタ2に書き込まれ
るといった具合である。
るデータ処理演算を最少数の命令で指定できることが望
ましい。これは結果としてプログラムサイズがより少な
くなり、一般的により早くそして更に効率的な演算が得
られる。しかしながら、この様に更に複雑で高度なデー
タ処理演算を単一命令の中に用意する際の問題は、この
命令で指定される必要のある情報の量である。更に詳細
には、もしも命令が多数のデータ処理レジスタをその命
令を実行するための資源として使用する場合は、これら
のレジスタの同一性識別がその命令の中で指定されなけ
ればならない。これは命令の中で許容できないほどのビ
ット空間量を使用する可能性がある。比較的大きな数の
データ処理レジスタをシステムの中で使用する、この様
に高度で複雑な命令に関連する更に別の問題は、プログ
ラムの効率的なコンパイルが更に難しくなることであ
り、それは使用される多くの異なる被演算子の間で、有
限のレジスタ資源を共有しなければならないためであ
る。
明の目的である。
処理用の装置を提供し、前記装置は: (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クラスの中の
フィールドとして独立に指定されている。
て高い要求を課す掛け算累算命令の場合には、異なる精
度並びにシステム資源に対する要求とを有する複数のク
ラスの掛け算累算命令を用意することが非常に都合が良
いことを認識している。(N*N)+N演算を実行する
掛け算累算命令の第1クラスは、Nビットの結果を算出
しこれは、2Nビットの結果を算出する(N*N)+2
N演算を実行する掛け算累算命令の第2クラスよりも比
較的精度が低い。掛け算累算命令り第2クラスは、結果
を入力変数を保持していた2つのレジスタの中に書き込
むように要求することで、命令の中のビット空間を過度
に圧迫することを回避している。これらの掛け算累算命
令を具備した装置を使用するプログラマは、関係してい
る個別の環境に最も適した命令を選択することが可能で
ある;自由に入力および出力レジスタの両方を指定した
いという要求は、一命令で2Nビットの結果を得たいと
いう要求との対比の上に立っていると言える。2つの命
令を用意することによって、関連するプログラムがより
小さくなりそして更に高速に実行されるという波及効果
を生む。
きるであろう。ひとつの可能性としては、掛け算累算器
が最初に掛け算演算を完了し、そして次に加算演算を別
の後処理として実行する方法である。しかしながら本発
明は、前記掛け算累算器が掛け算と加算とを単一の組み
合わされた演算として実行するアプリケーションに特に
適している。
及び加算は、速度が速くなりデータ経路幅が小さくなる
という特長を有するが、全ての入力被演算子が同時に利
用可能であることという要求を課する。
かをバイパスする事により、別の算術演算を実行させる
ように作ることも可能である。この方法により、本発明
の提出された実施例では前記掛け算累算器は掛け算命令
の第1クラスに応答して、第1データ処理レジスタ内に
保持されているNビット被演算子と第2データ処理レジ
スタ内に保持されているNビット被演算子とを掛け算し
てNビットの結果を算出し、これは第3データ処理レジ
スタ内に格納され、前記第1、第2、および第3データ
処理レジスタは前記掛け算命令の第1クラスの中のフィ
ールドとして独立に指定されており;そして前記掛け算
累算器は掛け算命令の第2クラスに応答して、第1デー
タ処理レジスタ内に保持されているNビット被演算子と
第2データ処理レジスタ内に保持されているNビット被
演算子とを掛け算して2Nビットの結果を算出し、これ
は第3並びに第4データ処理レジスタ内に格納され、前
記第1、第2、第3及び第4データ処理レジスタは前記
掛け算命令の第2クラスの中のフィールドとして独立に
指定されている。
び第2クラスを用意することは、異なる精度を有する掛
け算累算命令を補足することである。
令を用意することにより、命令セットの密度が過度に薄
くならないようにするために、前記データ処理レジスタ
を指定する前記フィールドが、掛け算累算命令の前記第
1クラス内の命令ビット、および掛け算累算命令の前記
第2クラス内の命令の半分以上を占めないようにするこ
とが望ましい。
用の空間が削減されると、指定できる異なるレジスタの
最大数もまた削減される。この文脈に於いて、本発明は
前記データ処理レジスタのバンクが、16個以下の同時
に使用されるデータ処理レジスタ、すなわち命令内でレ
ジスタを指定するために唯4ビットのみを必要とする、
を含む実施例に特に適している。
可能であるが、本発明は集積回路マイクロプロセッサの
一部として実施することが特に適していることを理解さ
れよう。
算命令の前記第1クラス内の命令および掛け算累算命令
の前記第2クラス内の命令が、条件付き実行コードを含
み、そして前記条件付き実行コードに応答して命令が実
行せずにスキップされるか否かを制御するための手段と
で構成されたフィールドを含む時に改善される。
ディング効率を増加させる一方で、命令内で利用可能な
ビット空間、結果としてはその命令でどのレジスタが使
用されるべきかを指定するために利用可能な空間を多く
必要とする。この理由から、本発明はこの様な関係に於
いては特に助けとなる。
ッサ内のマイクロコードとして実現することも可能であ
ろうが、本発明で得られる性能上の利益は前記掛け算累
算器が専用のハードウェア掛け算累算器であるシステム
に於いて特に有用である。
クチャに基づくシステムの中で使用できるであろうが、
本発明はNが32に等しいシステムに特に適している。
この様なシステムでは命令内のビット空間は非常に貴重
であり、64ビットの結果が得られる追加的な精度はま
れに必要となるだけである。この様にして、本発明は特
に有効である。
ビットデータ処理レジスタのレジスタバンクと、前記レ
ジスタバンクに結合され、前記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クラスの中のフィールドとして独
立に指定される。
並びに特長は添付図と関連して読まれる図示された実施
例の以下の詳細な説明から明らかとなろう。
として形成されている)を図示し、メモリシステム10
4に結合されている処理装置コア102を含む。
6、掛け算累算器108並びに書き込みデータレジスタ
114とを含む。処理装置コア102はまた、命令パイ
プライン116、命令デコーダ118並びに処理装置コ
ア102の残りの素子をメモリシステム104にリンク
する読み込みデータレジスタ120をも含む。処理装置
コア102の一部であるプログラム計数レジスタ122
はメモリシステム104のアドレス指定をするように図
示されている。プログラム計数器更新器124はプログ
ラム計数レジスタ122内のプログラム計数値を、各々
の命令が実行され新たな命令が命令パイプライン116
に対してフェッチされなければならない時に更新するよ
うに動作する。
(この場合は32ビットデータ通路)を種々の機能ユニ
ットの間に組み込んでいる。動作に際して、命令パイプ
ライン116内の命令は命令デコーダ118でデコード
され、これは種々のコア制御信号を生成し、これらは処
理装置コア102内の異なる機能素子に送られる。これ
らのコア制御信号に応答して、処理装置コア102の異
なる部分は32ビット処理演算、例えば32ビット掛け
算、32ビット加算、異なる精度の掛け算累算演
算、...を実施する。
態レジスタ126と保存プログラム状態レジスタ128
とを含む。現行プログラム状態レジスタ126は処理装
置コア102用の種々の条件および状態フラグとを保持
する。これらのフラグは算術演算でのゼロ結果の発生を
示すフラグ、桁上がり等と同様に、処理モードフラグ
(例えば、システムモード、使用者モード、メモリアボ
ートモード等)を含む。これらのフラグはプログラム命
令の条件付き実行を、各命令の最初の4ビットの条件コ
ードで指定されたパラメータに従って制御する。保存プ
ログラム状態レジスタ128(これは格納されている複
数のこの様なセーブされたプログラム状態レジスタの中
の1つであろうが)は、処理モードの切り替えのきっか
けとなる例外が発生したときに現行プログラム状態レジ
スタ126の内容を一時的に格納するために使用され
る。この様にして、例外処理がより高速にかつ、更に効
率的に実行できる。
システム104から復元されると、これらは命令デコー
ダ118でデコードされ32ビット処理を処理装置コア
102の中で開始する。
累算演算に応答する資源の使用を図式的に図示する。プ
ログラム命令ワード32は、条件コードフィールド34
を含み、これは命令が命令デコーダ118で実行される
のかスキップされるのかを示す条件を指定するパラメー
タを格納している。ビットフィールド36は、命令ワー
ド32をこれが32ビットの結果を算出する低精度掛け
算累算演算であることを識別する。累算フラグ38は1
の値を有し、この命令ワード32に対して累算演算が形
成されることを示す。もしもこの累算フラグ38が0の
場合は、従って累算演算は実行されない。セット条件コ
ードフラグ40は現在のプログラム状態レジスタフラグ
が命令ワード32を実行した際に更新されるべきか否か
を指定する。
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つの入力変数レジスタおよ
び出力変数レジスタは独立に指定されるはずである。
ビット入力変数に演算を行い、Nビット出力を生成する
掛け算累算命令の第1クラスに属すると考えることが出
来る。この命令は4つの独立に指定されるレジスタを使
用する。命令内のレジスタフィールドは16ビットを占
める(各々のレジスタフィールドはレジスタバンク10
6内の16個のレジスタの内の1つを指定するように4
ビット長である。)
ワード32を図示し、この中で64ビットの結果が掛け
算累算演算(すなわち32x32+64−>64)によ
って生成される。この場合、累算値はCDでありこれは
それぞれレジスタフィールド48および46で指定され
たレジスタの中に格納されている。累算値CDの最上位
32ビットCはレジスタR7の中に格納され、累算値C
Dの最下位32ビットDはレジスタR117の中に格納
されている。
ジスタを指定するだけなので、演算結果EFはそこから
累算値が取り出されたのと同一のレジスタ(R7,R1
1)の中に書き込まれる。これは命令セット空間を節約
し、かつ単一命令ワード32で実行される精度を上げた
64ビット算術演算を可能とする。
を実行し、各サイクル毎に2つのレジスタの読み込みを
行う。これはレジスタバンク106に対して2つの読み
込みポートしか持たない結果である。
含み、これはその算術が符号付きであるか符号無しであ
るかを指示する。
け算命令の第1クラスを図示する。これらの命令は32
ビットの結果(すなわち32x32−>32)を算出す
る。この場合、レジスタフィールド46は使用されず任
意の値を含むことが出来る。
32−>64)が生成される掛け算命令の第2クラスを
図示する。この場合、4つの全てのレジスタフィールド
42、44、46および48はそこから入力変数が取り
込まれるレジスタ並びにそこに64ビットの結果である
CDのそれぞれ高位および低位部が書き込まれるレジス
タを指定するために使用される。
路の異なる部分を図示する。
れが処理できるのは: (1)Nビットの積を生成するためのNビットとNビッ
トの数の掛け算; (2)2Nビットの結果を生成するためのNビットとN
ビットの数の掛け算; (3)Nビットの結果を得るように、NビットとNビッ
トの数を互いに掛け合わせ、そしてNビットの累算値を
加算する掛け算累算演算;そして (4)2Nビットの結果を得るように、NビットとNビ
ットの数を互いに掛け合わせ、そして2Nビットの累算
値を加算する掛け算累算演算である。
び符号無しの異なる方式で提供可能である。記述されて
いる回路は例として特定のN=32のケースを使用して
いる。(すなわち32x32−32および32x32−
>64掛け算、そして32x32+32−>32並びに
32x32+64−>64掛け算累算である。)
回路並びに、掛け算をされるふたつの被演算子の一方の
いずれにも使用される。そのどちらを意図しているか
は、”回路”または”被演算子”の使用法または文脈か
ら明らかとなろう。
け算は通常はハードウェアでふたつの主手順として実行
される: (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)で生成された被乗数倍数を互いに加算す
る。
k=N−1とし(従って全体でN個の被乗数倍数が存在
する)、続いてRのビットi(これはR[i]またはR
iと記述される)が0の場合はXi=0、そしてもしも
R[i]が1の場合はXi=2i とする。全てのXiが
ゼロまたは2の累乗であるので、被乗数倍数Xi*D
は、ゼロを用いるかまたはDを左にiビットシフトする
ことで簡単に形成できる。
いので、Xi*D被乗数倍数は積の全てのビットを決定
するのに十分なビットで生成されるべきである:これは
被乗数のビットをその左側に拡張することを必要とす
る。符号付きおよび符号無し被乗数の違いを取り扱うの
はこの点である:符号付き被乗数はその符号ビットをコ
ピーして拡張され、一方符号無し被乗数はゼロを付けて
拡張される。この被乗数の拡張はしばしばゼロをひとつ
または符号ビットのコピーを付けるだけで物理的に実行
され、この単独の追加ビットが残りのビット全てに対す
る(共通)値を表現するという理解のもとになされる。
号付き乗数Rの間の違いの取り扱いは幾分手の込んだも
のである。最初に、Xiの合計がRの符号無し値になる
場合を注目する:この技法は”当然”符号無し掛け算ア
ルゴリズムとなる。従って必要なのは符号付き乗数の取
り扱い方法である。この取り扱い方には多数の方法が存
在し、その主なものは(a)Rが負の場合は特別の2N
* Dを引き算することで最終結果を調整する;または
(b)もしもR[k]=1、すなわちRが負の場合はX
kを+2k ではなく−2k とする。
符号化法である。これは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 )
数点の後ろに一ビットR[−1]を拡張し、R[−1]
をゼロに設定する(これは乗数の値を変更せずにそのま
ま残す)。従って上記の2番目の式は同様にi=0の場
合にも適用可能であり、この様な場合の上記第1番目の
式を簡略化する、すなわちこの定義またはR[−1]を
0とする事でX0の明らかに特別な場合が取り除かれ
る。
しくなる: 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の符号付きの値
1,0,1,2}の内のひとつの数を掛けたものである
から、値としてはゼロ、2の累乗または2の累乗のマイ
ナスを取らなければならない。これは被乗数倍数Xi*
Dの形成を容易にする。これらは、正と同様に2の負の
累乗をも取り扱わなければならないので先の方法と全く
同じように容易と言うわけではないが、第2段階でN個
ではなくN/2個の被乗数倍数を加算するだけで良いと
いう大きな利点が得られる。負の被乗数倍数の形成は被
乗数をシフトして対応する正の倍数を作り、次に”1の
補数を取って1を加える”方法で負とすることにより実
現できる、この段階では1の加算は実行しないで第2段
階に回している。この様にして第2段階で加算され、N
/2個の被乗数倍数および、N/2個の単一ビット(こ
れらは対応する被乗数倍数が正の場合はゼロ、そしてそ
れが負の場合は1)が完了する;これも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番目
の式が正しい値を生成するように出来る。)
数倍数の数を半分にするという事実と同様に別の特長も
有する:これは当然のように乗数を符号無し数ではなく
符号付き数として取り扱う。先の技法では符号付き乗数
を特別な場合として取り扱わなければならなかった、そ
の理由は符号無し数をいかに長くしたとしてもこれは負
の符号が着いた値を保持することが出来ないためであっ
た。その逆はより簡単である:N+1ビット長またはそ
れを越える符号付き数はNビット長の符号無し数(また
は実際Nビット長の符号付き数)を保持する事が出来
る。従ってもしも我々が、32ビットの符号付きおよび
符号無し乗数を取り扱える掛け算回路を望むのであれ
ば、例えば33ビットまたはそれより長い修正ブース符
号化器がこの作業を実行できるであろう:我々がしなけ
ればならないことはひとつまたは複数の追加ビットをそ
の左端に付けて乗数を拡張し、この乗数が符号無しとし
て取り扱われる場合はこれらのビットをゼロとし、この
乗数が符号付きとして取り扱われる場合は既存の符号を
コピーする事である。
の処理は先と同様の技法で実施できる。
を作り出す方法も存在し、複雑さが増すことと引き替え
にそれらの個数を更に削減する。
被乗数倍数を持つことになる、例えば符号付きおよび符
号無し32x32ビット掛け算の両方を実行できる回路
用の33ビットまたは34ビット修正ブース符号化器を
使用する場合は17個である。
いに足し算し、第3番目を最初のふたつの和に加え、第
4番目を加算結果に加える、等々と最終合計値を得るま
で続ける方法である。(ついでながら、各々の足し算は
修正ブース符号化法で生成される付加ビットのひとつを
も取り扱うことが可能であり、これを加算器の桁上げ入
力として使用する。従って我々はこれらのビットを取り
扱うのに特別な加算は必要ない。)これはアドバンスト
RISCマシン有限会社のARM6マイクロプロセッサ
で使用している技法に類似している。
に生成しないということである:代わりにここではそれ
らを必要に応じて生成する。その他の主な違いはこの技
法の内での不規則性の処理である:最初の足し算を行う
前に2つの被乗数倍数を生成しなければならないが、そ
れ以外の足し算ではその各々を行う前に唯ひとつだけを
生成すればよい。これは累算値として”小計”を初期化
し、次にひとつの被乗数倍数を生成しそれを小計の中に
加算することにより、この不規則を伴うことなく掛け算
累算機能を提供するために利用可能であり(かつ利用し
ている)。(単純な掛け算を実行する際に、我々は同様
のことをその小計を累算値ではなくゼロに初期化する点
は異なるが、行っている。)
こともうまく行っている:実際修正ブース符号化器から
の全ての追加ビットをひとつの足し算で取り扱うのは少
なすぎるが、ここでは適当な数となっている。
りチェインが長いために、各々の足し算がかなりな時間
を取ることである。これに対する良好な解決策は”桁上
がり保存”足し算であり、これはふたつの数とひとつの
桁上げビットを足し算してひとつの数を得る場合は長い
桁上がりチェインを含むが、3つの数とひとつの桁上げ
ビットとを足し算して2つの数を得る場合は必要は無い
という観察から考え出された。特に、仮に今3つの数X
[N:0],Y[N:0]と桁上がりビットWがあると
すると、これらを2つの数S[N:0]およびC[N+
1:0]に減らすことが出来て、これは単純に3つの単
独ビットを各ビット列毎に個別に足し算することにより
同じ値の足し算となる:
びZ[i]の2ビット和である。
無しに行われるので、これは通常の足し算よりもかなり
早い。(例えば、ARM6マイクロプロセッサ上の掛け
算では通常の足し算を使用しこれらの1つをクロックサ
イクル毎に実行する。桁上がり保存足し算を使用してい
る集積回路ではクロックサイクル毎に4からそれ以上の
足し算を実行する。) ここにJ個の足し算されるべき被乗数倍数があるとする
と、この技術をJ−2回使用して最終結果を得るために
足し算しなければならない数として、これらを2つの数
に削減する事ができる。この最終の足し算は通常の足し
算を必要とするが、全体としてJ−2回の桁上がり保存
足し算とひとつの通常の足し算は、元のJ−1回の足し
算に比較してかなりの改善である。
似している:最初に”桁上がり”と”保存”値とをそれ
らの合計値がゼロとなるように初期化する(例えば、こ
れらを共にゼロに初期化する事により)、次に桁上がり
保存足し算を使用して被乗数倍数への加算を1つずつ実
行する。最後に、通常の足し算を用いて”桁上がり”
と”保存”値の最終合計値を求める。先と同様に掛け算
累算演算を自由に行うことが出来て、これは”桁上が
り”と”保存”値とをそれらの和が累算値となるよう
に、例えばそれらの1つをゼロにもう一方を累算値とす
るように初期化する事によって行える。実際、初期化す
る値が2つあるので、ふたつの累算値に足し算すること
が出来るが、これは非常に有用というわけでは無い:こ
の第2累算値スロットの有効な使用方法は後で説明す
る。
実行していることを仮定している、例えば32x32の
掛け算を実行する場合は、64ビットの足し算を行うこ
とになる。これはやっかいである、何故ならば典型的に
は結果としてデータ経路部分に他の残りのデータ経路の
2倍の長さを必要とするためである。
と”関心のある”値はNビットよりも僅かに多い部分に
しか含まれていないことが分かる。例えば、Nが奇数の
修正ブース符号化器でのXi*Dを考えてみる。Xiは
−2(2*i) , −2(2*i-1) ,0,2(2*i-1) および2
(2*i) , の内の一つであり、これは下記のいずれか一つ
のXi*Dに対応する:
ットも非常に関心があるわけでは無い。特に桁上げビッ
トを全てがゼロとなるように後尾2*i−1ビットに加
えて、同じ桁上げを各々の場合に中間N+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ビットシフトし、後尾の端から脱落するビットを格
納する。計算の最後に、これらのビットが最終”桁上
げ”および”保存”値の低端を形成し、一方最終の”関
心を有する領域”がそれらの高端を形成するはずであ
る。
タ経路の幅が、その幅の2倍ではなく、少し”出っ張っ
た”もので実現することを可能としている。最終の足し
算だけは未だ2倍幅で無ければならないが、単一幅の加
算器を2つ使用し、第1足し算からの桁上げビットを第
2足し算の繰り入れビットとして使用することで実施で
きる。
しく実現する事に関するものである。しかしながら、最
初の2つはいずれの累算値もそれが符号付きの場合は最
大Nビット幅であり、約2Nビット幅では無いことを意
味している。累算値に対するこの制約を回避し、例えば
32x32+32の代わりに32x32+64掛け算累
算命令を実行するための技法が以下に説明されている。
成された倍数の段階を含む事に注意されたい、これは被
乗数倍数を生成し現状の”桁上げ”および”保存”形式
の中への桁上げ保存足し算を実行する(このハードウェ
アを以降”掛け算器列”と呼ぶ)。極端な例では、各々
の繰り返し用の個別の掛け算器列を具備した全掛け算器
配列が存在する。
とつの掛け算器列を具備した、完全に繰り替えし実行掛
け算器も存在する。この中間として、ひとつより多い複
数列を具備した繰り返し方式のものも存在する。
保存”の両方を初期化することが可能である。これらの
内の1つは累算値用に必要である。もう一方は被乗数倍
数の内のひとつとして使用できるであろう。これに関す
る主な問題は、桁上げ保存形式初期化装置が被乗数倍数
生成器を含まなければならないことを意味している。こ
れはスペースを消費する:更に重要なことは、これが余
分の初期化遅れを引き起こすことである。
数倍数の生成の複雑さに依存する。先に示されている修
正ブース符号化で生成されるXiに関する式を見ると、
ひとつは特に単純である、すなわちNが奇数の場合、X
0=−R[0]である。勿論通常我々はNが偶数の場合
にも関心がある;しかしながら、先に見たように符号付
きおよび符号無しNビット数値の掛け算の要求を処理す
る良い方法は、実際(N+1)ビット数値を掛け算する
ことである。
号無し変数の両方を取り扱い、修正ブース符号化および
桁上げ保存足し算を使用し、Nが偶数の場合のNビット
とNビットとの掛け算累算に対する初期化方法が導かれ
る:内部掛け算被演算子R[N:0]を次のように初期
化する: R[N−1:0]=供給された掛け算器被演算子: R[N]=0 符号無し変数が必要な場合; =R[N−1] 符号付き変数が必要な場合。 ”桁上げ”および”保存”値の内の1つを供給されるN
ビットまたは2Nビット累算値(それが符号無しかまた
は符号付きかに基づいてゼロまたは符号ビットのコピー
で拡張されている。)に初期化する
もう一方をR[0]=0の場合はゼロに、そしてR
[0]=1の場合は供給された被乗数にマイナスを付け
たもの(状況に応じて符号付きまたは符号無しとして取
り扱われる)に初期化される。
ナス、すなわち2の補数を生成しなければならないので
少し複雑に見える。その代わりに1の補数を形成し1を
加えるという便法を使用する方が都合が良いであろう。
問題は:いつこの1を加算するかである。
その理由は、桁上げ保存形式への最後の足し算は現在の
所、その”桁上げ”および”保存”部を互いに足し算す
るだけで良いからである。ほとんどの加算器ではふたつ
の数と桁上げビットとを足し算するので、従って桁上げ
ビットは使用されていない。桁上げビットを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]に設定す
る。
頭N−2*iビットを単一ビットで表現できる場合は、
累算値の長さはNビットにしかならない。もしも累算値
がもっと長い場合は、これにまともに対処するためにデ
ータ経路の幅を増やす必要がある。
に必要とするのは同一ではないビットを含むことの出来
る”桁上げ”および”保存”値の1つであることに注意
されたい:その他のものは、被乗数倍数の先頭N−2*
iビットと同様に、全て同一ビットを含むことが出来
る。不幸にして、先頭桁上げ保存足し算を行った後で
は、”桁上げ”および”保存”の両方ともそれらの先頭
ビットの中に同一ではないビット列を含む可能性があ
る。もしもこれが発生しない場合で、我々が足し算によ
って累算値の先頭ビットが変更されずに残り、そして全
てのその他の値が同一ビット列として残るように構成で
きれば、我々は再び主作業をほぼNビット幅のデータ経
路で繰り返し行うことが出来る:先の事象の状態からの
唯一の違いは、繰り返し演算毎に主計算に対して累算値
の2ビットを供給しなければならない点である。
存”各々の列に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
のインデックスであることを想起されたい。)
の全長は次のようになる: 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]のコピー)に加算される必要
があるだけである。)
の中に加算する前の、”桁上げ”および”保存”値は次
のようになる:
を調べる必要がある。最初に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が奇
数の場合)に応じて得る:
したもの(または1の補数)である。
Cという値に対して次の形式となる:
存”値を纏めたいのであるが、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ビットが消費される、従って我々は
修正桁上げ保存足し算が下記の形式を生成する事を欲す
る:
せるために、我々は我々の修正桁上げ保存加算が下記の
形式であれば良いことが分かる:
故ならばこの領域が最終合計値には何の変化も与えない
ためである。同様に、線の上下の同じ位置に現れるビッ
ト、A[2N:Li+N+3]を除去する事も可能であ
る:これらが最終の形に変更を与えないことも明白だか
らである。この後我々の修正桁上げ保存加算が下記の形
式を取らなければならないことが分かる:
域ならびにその下の二つの遷移ビットに対して行う。次
の操作を行うことにより: 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を含む線上の全てのゼロといっしょ
に除去することが可能であり、残った修正桁上げ保存加
算は次の形式を取らねばならない:
ていくつかの数学的変更を加える。最初に、その第2行
を下記の2行の合計で置き換えることが出来る: 1,...,1 1 1 0,...,0 0 NOT(C[N])
は全てが1の行または全てが0の行の合計であり、これ
は全てが1の行となる。逆に、もしもC[N]が0の場
合は、これは全てが1の行とその右端のひとつが1の合
計となる。これは全てが0の行プラスその左端の桁上げ
を作り出す。桁上げは無視される、何故ならばそれは我
々が加算を行っている領域の外側だからである。従って
いずれの場合も、合計はC[N]のコピーの行となる。
えることが出来る: 1,...,1 1 1 0,...,0 0 NOT(X[N+1])
式に変更する:
する、ここでも桁上げは無視する、何故ならばそれは我
々が加算を行っている領域の外側だからである。これは
要求される桁上げ保存加算を次の形式に変更する:
T(X[N+1]) の2ビット和
算から、いくつかのゼロと共に除去することが分かり、
以下が残る:
我々が全てがC[N]の行を全てが1の行並びにその右
端にNOT(C[N])のみを含む行で置き換えられる
ことを示している。
る: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]) 我々は変更された桁上げ保存加算を我々が要求する演算
に対して実施できる:
保存”値を正しく初期化出来れば、我々は2Nビット累
算値を備えたNビットとNビットの掛け算累算演算を、
初期化し、被乗数倍数への加算を上記の修正された桁上
げ保存加算を用いて行い、そして最終足し算を桁上げ保
存値に対して実行することにより実施することが可能で
ある。
を使用して32x32−>64掛け算と、32x32+
64−>64掛け算累算演算を、符号付きおよび符号無
しの両方で算出するものである。32x32−>32
と、32x32+32−>32演算は、下位32ビット
が決定された時点で掛け算を早めに終了するか、累算値
の初期化を下位のみに行うことで生成できる。
な改善は: * 早めの終了、これは基本的に残りの全ての被乗数倍
数がゼロになった時点の検出(従って更なる加算は実際
上必要とされない)を含み、続いて”低”、”活性”お
よび”高”領域内のビットの無駄な再構成の代わりに、
正しい最終加算を生成するための何か別のことを実行す
る。 * この回路内に最終加算器を用意する必要を、データ
経路上に存在する別の加算器、例えばALUを使用する
ことにより無くする。 * ”保存低ラッチ”は最後尾から2ビット/乗数行ま
でを満たし、一方”累算値高ラッチ”は最後尾からその
同じ所まで空であるという事実をうまく利用し、同一の
物理的レジスタを用いて、2つの値を保持することが可
能である。最初にこれは累算値の高位部分を含む;最終
的にこれは”保存”値の低位部分を含む;その間は、未
消費の高累算値ビットと生成途中の”保存”ビットとを
含む。これは回路にとって有益な改善である。掛け算器
は下記の入力を使用する: MPLIER[31:0] − 乗数被演算子 MCAND [31:0] − 被乗数被演算子 ACCVAL[63:0] − 累算値 SIGNED − 単一ビットで、符号付き演算が行われるとき は1、符号無し演算が行われるときは0であ る。 ACCUM − 単一ビットで、掛け算累算演算が行われると きは1、掛け算のみが実行されるときは0で ある。 これに加えて、事象を正しい順番で発生させ るための制御入力。
果として生成する。
に図7に示されている(分かり易くするために制御信号
は図示されていない):
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機能は下記の表で指定される:
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]を生成する:
従ってX[33:0]並びにXCを生成する:
を含むサイクル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]
(MCAND[])とNビット乗数(MPLIE
R[])とを掛け算し、続いて2Nビットの累算値(A
CCVAL[])を加算するための、掛け算累算回路を
図示しており、この例ではN=32である。Nビット乗
数は乗数ラッチ2の中に取り込まれ、Mビット被乗数が
被乗数ラッチ4の中に取り込まれる。2Nビット累算値
の下位部分が、桁上げ保存初期化器6に送られ、2Nビ
ット累算値の上位部分は累算値上位ラッチ8に送られ
る。桁上げ保存初期化器6はNビット被乗数(D[])
を受け取り、これのビットのビット毎反転またはゼロ
を、それぞれ乗数ラッチ2の最下位ビットの値が1であ
るかまたはゼロであるかに応じて、生成する。この結果
はマルチプレクサA10に送られ、桁上げ値または保存
値のいずれかひとつとなる。桁上げ値または保存値のも
う一方は累算値の最下位ビットを構成する。
ーダ12にも送られ、これは修正されたブース被加数を
生成し、これは後続の掛け算器行のそれぞれひとつに送
られる。
16,18,20の順番は各々先に説明した掛け算器ア
ルゴリズムを実行するものと仮定している。この掛け算
器アルゴリズムは各々の繰り返し演算に於いて、累算値
の2ビットを組み入れている。各サイクルでの各々の掛
け算器行14,16,18,20への入力は、ブース桁
(B1[],B2[],B4[],B5[])、累算値
高ラッチ8の中に格納されている累算値からのビット、
被乗数ラッチ4からのNビット被乗数のビット並びに直
接または間接的に先に実行された掛け算器行からの保存
値および桁上げ値である。
り返し演算ではもはや変化しない最下位ビット(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サイクルとの
間では必要に応じて任意の桁上げビットを供給するよう
に作用する。
を参照してここに詳細に説明してきたが、本発明はこれ
らの詳細な実施例に制限されるものではなく、当業者に
よって種々の変更並びに修正を添付の特許請求の項に定
義されている本発明の範囲並びに精神から逸脱すること
なく行えることは理解されよう。
を図示する。
ワードに応答して実行される算術演算とを図式的に図示
し、32*32+32−>32掛け算累算演算に応答す
る資源の使用を図示する。
ワードに応答して実行される算術演算とを図式的に図示
し、32*32+64−>64掛け算累算演算に応答す
る資源の使用を図示する。
ワードに応答して実行される算術演算とを図式的に図示
し、32*32−>32掛け算演算に応答する資源の使
用を図示する。
ワードに応答して実行される算術演算とを図式的に図示
し、32*32−>64掛け算演算に応答する資源の使
用を図示する。
取り込み部分を主として図示する。
理部分を主として図示する。
Claims (10)
- 【請求項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】 請求項第1項記載の装置に於いて、前記
掛け算累算器は掛け算と、累算とを単一組み合わせ演算
として実行する、前記装置。 - 【請求項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】 請求項第1項記載の装置に於いて、前記
データ処理レジスタを指定する前記フィールドが、前記
第1クラスの掛け算累算命令に含まれるの命令ビットお
よび前記第2クラスの掛け算累算命令に含まれる命令の
半分以上を占めないことを特徴とする、前記装置。 - 【請求項5】 請求項第1項記載の装置に於いて、前記
データ処理レジスタの前記バンクが16個以下のデータ
処理レジスタを含む、前記装置。 - 【請求項6】 請求項第1項記載の装置に於いて、前記
装置が集積回路マイクロプロセッサを含む、前記装置。 - 【請求項7】 請求項第1項記載の装置に於いて、前記
第1クラスの掛け算累算命令に含まれる命令および前記
第2クラスの掛け算累算命令に含まれる命令が、条件付
き実行コードを含み、そして前記条件付き実行コードに
応答して命令がスキップされるべきかまたは実行される
べきかの制御を行うための装置を含む、前記装置。 - 【請求項8】 請求項第1項記載の装置に於いて、前記
掛け算累算器が専用のハードウェア掛け算累算器であ
る、前記装置。 - 【請求項9】 請求項第1項記載の装置に於いて、Nが
32に等しい前記装置。 - 【請求項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クラスの中のフィールドとして独
立に指定される、以上の手順を含む、前記方法。
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)
| 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)
| 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)
| 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 |
-
1994
- 1994-07-14 GB GB9414272A patent/GB2291515B/en not_active Expired - Lifetime
-
1995
- 1995-01-27 US US08/379,014 patent/US5583804A/en not_active Expired - Lifetime
- 1995-06-15 JP JP14923095A patent/JP3605181B2/ja not_active Expired - Lifetime
Cited By (4)
| 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 |