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

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

Info

Publication number
JP3605181B2
JP3605181B2 JP14923095A JP14923095A JP3605181B2 JP 3605181 B2 JP3605181 B2 JP 3605181B2 JP 14923095 A JP14923095 A JP 14923095A JP 14923095 A JP14923095 A JP 14923095A JP 3605181 B2 JP3605181 B2 JP 3605181B2
Authority
JP
Japan
Prior art keywords
data processing
multiply
bit
register
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.)
Expired - Lifetime
Application number
JP14923095A
Other languages
English (en)
Other versions
JPH0863353A (ja
Inventor
ジェームズ シール デビッド
ラーリ ガイ
ビビアン ジャガー デビッド
Original Assignee
エイアールエム リミテッド
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 エイアールエム リミテッド filed Critical エイアールエム リミテッド
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

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【産業上の利用分野】
本発明はデータ処理の分野に関する。更に詳細には、本発明は掛け算累算命令が第1被演算子が第2被演算子と掛け算されそして第3被演算子が加算されることで結果を算出するように指定するように使用されている種類のデータ処理に関する。被演算子はシステム内のデータ処理レジスタのバンクからデータ処理レジスタの中に格納される。
【0002】
【従来の技術】
その命令セットの中に掛け算累算命令を有するデータ処理システムを用意することは知られている。その様なシステムの1つの例は、アドバンストRISCマシン有限会社で製造される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および第4データ処理レジスタ内に保持されている2Nビット被演算子を加算して、第3および第4データ処理レジスタの中に格納される2Nビットの結果を算出し、前記第1、第2、第3および第4データ処理レジスタは掛け算累算命令の前記第クラスの中のフィールドとして独立に指定されている。
【0006】
本発明は、利用可能なレジスタ資源に対して高い要求を課す掛け算累算命令の場合には、異なる精度並びにシステム資源に対する要求とを有する複数のクラスの掛け算累算命令を用意することが非常に都合が良いことを認識している。(N*N)+N演算を実行する掛け算累算命令の第1クラスは、Nビットの結果を算出しこれは、2Nビットの結果を算出する(N*N)+2N演算を実行する掛け算累算命令の第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および第4データ処理レジスタ内に保持されている2Nビット被演算子を加算して、第3および第4データ処理レジスタの中に格納される2Nビットの結果を算出し、前記第1、第2、第3および第4データ処理レジスタは掛け算累算命令の前記第クラスの中のフィールドとして独立に指定される。
【0019】
本発明の上記、およびその他の目的、特徴並びに特長は添付図と関連して読まれる図示された実施例の以下の詳細な説明から明らかとなろう。
【0020】
【実施例】
図1はデータ処理システム(集積回路の一部として形成されている)を図示し、メモリシステム104に結合されている処理装置コア102を含む。
【0021】
処理装置コア102はレジスタバンク106、掛け算累算器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はそれぞれフィールド42、44、46および48を指定する4つのレジスタを含む。もしも実行される演算が(A*B)+C=D、の様に表現される場合はレジスタフィールド42は変数Aを含むレジスタ(この場合R0)を指定し、レジスタフィールド44は変数Bを含むレジスタ(この場合R2)を指定し、レジスタフィールド46は変数Cを含むレジスタ(この場合R5)を指定しそしてレジスタフィールド48はその中に結果Dが書き込まれるべきレジスタ(この場合R10)を指定する。レジスタフィールド42、44、46および48の中に格納される値は、レジスタバンク106内のレジスタの読み込み並びに書き込みを制御するように作用する。この32*32+32−>32命令の場合、全ての3つの入力変数レジスタおよび出力変数レジスタは独立に指定されるはずである。
【0027】
図2に図示されている命令ワード32はNビット入力変数に演算を行い、Nビット出力を生成する掛け算累算命令の第1クラスに属すると考えることが出来る。この命令は4つの独立に指定されるレジスタを使用する。命令内のレジスタフィールドは16ビットを占める(各々のレジスタフィールドはレジスタバンク106内の16個のレジスタの内の1つを指定するように4ビット長である。)
【0028】
図3は掛け算累算命令の第2クラスの命令ワード32を図示し、この中で64ビットの結果が掛け算累算演算(すなわち32x32+64−>64)によって生成される。この場合、累算値はCDでありこれはそれぞれレジスタフィールド48および46で指定されたレジスタの中に格納されている。累算値CDの最上位32ビットCはレジスタR7の中に格納され、累算値CDの最下位32ビットDはレジスタR11の中に格納されている。
【0029】
命令ワード32内の十分な空間は4つのレジスタを指定するだけなので、演算結果EFはそこから累算値が取り出されたのと同一のレジスタ(R7,R11)の中に書き込まれる。これは命令セット空間を節約し、かつ単一命令ワード32で実行される精度を上げた64ビット算術演算を可能とする。
【0030】
処理装置コア102は2サイクルの初期化を実行し、各サイクル毎に2つのレジスタの読み込みを行う。これはレジスタバンク106に対して2つの読み込みポートしか持たない結果である。
【0031】
図3の命令ワード32は追加フラグ50を含み、これはその算術が符号付きであるか符号無しであるかを指示する。
【0032】
図4は掛け算累算器108で実行される掛け算命令の第1クラスを図示する。これらの命令は32ビットの結果(すなわち32x32−>32)を算出する。この場合、レジスタフィールド46は使用されず任意の値を含むことが出来る。
【0033】
図5は64ビットの結果(すなわち32x32−>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,...,Xk*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]またはRiと記述される)が0の場合はXi=0、そしてもしもR[i]が1の場合はXi=2とする。全てのXiがゼロまたは2の累乗であるので、被乗数倍数Xi*Dは、ゼロを用いるかまたはDを左にiビットシフトすることで簡単に形成できる。
【0040】
掛け算の結果はいずれの被演算子よりも長いので、Xi*D被乗数倍数は積の全てのビットを決定するのに十分なビットで生成されるべきである:これは被乗数のビットをその左側に拡張することを必要とする。符号付きおよび符号無し被乗数の違いを取り扱うのはこの点である:符号付き被乗数はその符号ビットをコピーして拡張され、一方符号無し被乗数はゼロを付けて拡張される。この被乗数の拡張はしばしばゼロをひとつまたは符号ビットのコピーを付けるだけで物理的に実行され、この単独の追加ビットが残りのビット全てに対する(共通)値を表現するという理解のもとになされる。
【0041】
この技法の元でなされる符号無しおよび符号付き乗数Rの間の違いの取り扱いは幾分手の込んだものである。最初に、Xiの合計がRの符号無し値になる場合を注目する:この技法は”当然”符号無し掛け算アルゴリズムとなる。従って必要なのは符号付き乗数の取り扱い方法である。この取り扱い方には多数の方法が存在し、その主なものは(a)Rが負の場合は特別の2* Dを引き算することで最終結果を調整する;または(b)もしもR[k]=1、すなわちRが負の場合はXkを+2ではなく−2とする。
【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の符号付きの値と等しくなる:
Figure 0003605181
【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】
Figure 0003605181
【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】
Figure 0003605181
【0060】
先頭N−2*iビットも後尾2*i−1ビットも非常に関心があるわけでは無い。特に桁上げビットを全てがゼロとなるように後尾2*i−1ビットに加えて、同じ桁上げを各々の場合に中間N+1ビットに加えることが出来る、すなわち上記を次のように置き換えることが出来る
【表3】
Figure 0003605181
【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が奇数の場合、X0=−R[0]である。勿論通常我々はNが偶数の場合にも関心がある;しかしながら、先に見たように符号付きおよび符号無しNビット数値の掛け算の要求を処理する良い方法は、実際(N+1)ビット数値を掛け算することである。
【0068】
これらの考察から以下の符号付きおよび符号無し変数の両方を取り扱い、修正ブース符号化および桁上げ保存足し算を使用し、Nが偶数の場合のNビットとNビットとの掛け算累算に対する初期化方法が導かれる:
内部掛け算被演算子R[N:0]を次のように初期化する:
Figure 0003605181
”桁上げ”および”保存”値の内の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]を下記のように初期化する:
Figure 0003605181
”桁上げ”および”保存”値の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】
確認すると、”桁上げ”および”保存”値の全長は次のようになる:
Figure 0003605181
従って我々は当然、長さ2N+1ビットの累算値A[2N:0]を取り扱うことになる。(勿論我々はもっと短い累算値(例えばNビット)を、必要に応じてそれらにゼロ拡張または符号拡張を施すだけで取り扱うことが可能である;また我々はより長い累算値を取り扱うことも可能であるが、余分なビットは主演算で全く変更されることなく、最終足し算の間に単に対応する”桁上げ”値ビット(すなわちC[N]のコピー)に加算される必要があるだけである。)
【0076】
従って、我々がXi*Dを桁上げ保存形式の中に加算する前の、”桁上げ”および”保存”値は次のようになる:
【表4】
Figure 0003605181
【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】
Figure 0003605181
ここで、I[N:0]はD[N:0]をビット毎に反転したもの(または1の補数)である。
【0078】
これらすべてはX[N+1:0]およびXCという値に対して次の形式となる:
【表6】
Figure 0003605181
従って我々が実行したいと望む加算の形式は:
【表7】
Figure 0003605181
【0079】
我々は同じ形式で”桁上げ”および”保存”値を纏めたいのであるが、iでひとつ大きく、また従ってLiで2つ大きくなる。処理過程で我々はS[N:0]およびC[N:0]の新たな値を生成しようとしており、これはそれぞれS’[N:0]およびC’[N:0]と呼ばれる。我々はまたSL[Li+1:Li]も生成し、これはSL[]の新たな2ビットであるが、これは既存のSL[Li−1:0]の外乱とはならない。同様にわれわれは新たな2ビットCL[Li+1:Li]を生成するが、これは既存のCL[Li−1:0]の外乱とはならない。最後にA[2N:Li+N+1]の最下位2ビットが消費される、従って我々は修正桁上げ保存足し算が下記の形式を生成する事を欲する:
【表8】
Figure 0003605181
【0080】
我々が実行させたい足し算をこれに整合させるために、我々は我々の修正桁上げ保存加算が下記の形式であれば良いことが分かる:
【表9】
Figure 0003605181
【0081】
我々は直ちに”低”領域を除去できる、何故ならばこの領域が最終合計値には何の変化も与えないためである。同様に、線の上下の同じ位置に現れるビット、A[2N:Li+N+3]を除去する事も可能である:これらが最終の形に変更を与えないことも明白だからである。この後我々の修正桁上げ保存加算が下記の形式を取らなければならないことが分かる:
【表10】
Figure 0003605181
【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[Li+1]およびCL[Li]とが、最終合計値に対して線の上側のS[N:0],C[N−1:0],X[N:0],XC およびC[N]の”活性”領域コピーと同じ寄与をする事を保証出来る。従ってここでこれら全てを、XCを含む線上の全てのゼロといっしょに除去することが可能であり、残った修正桁上げ保存加算は次の形式を取らねばならない:
【表11】
Figure 0003605181
【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】
Figure 0003605181
【0087】
次に我々は1で構成された2つの行を加算する、ここでも桁上げは無視する、何故ならばそれは我々が加算を行っている領域の外側だからである。これは要求される桁上げ保存加算を次の形式に変更する:
【表13】
Figure 0003605181
【0088】
この時点で、次の操作を行うとすると:
(S’[N],S’[N−1]) = A[Li+N+1],NOT(C[N])およびNOT(X[N+1]) の2ビット和
【0089】
我々はこれら全てのビットを要求される加算から、いくつかのゼロと共に除去することが分かり、以下が残る:
【表14】
Figure 0003605181
【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】
Figure 0003605181
【0092】
従って、もしも我々が”桁上げ”および”保存”値を正しく初期化出来れば、我々は2Nビット累算値を備えたNビットとNビットの掛け算累算演算を、初期化し、被乗数倍数への加算を上記の修正された桁上げ保存加算を用いて行い、そして最終足し算を桁上げ保存値に対して実行することにより実施することが可能である。
【0093】
次に掛け算器の例を説明する、これは上記を使用して32x32−>64掛け算と、32x32+64−>64掛け算累算演算を、符号付きおよび符号無しの両方で算出するものである。32x32−>32と、32x32+32−>32演算は、下位32ビットが決定された時点で掛け算を早めに終了するか、累算値の初期化を下位のみに行うことで生成できる。
【0094】
この例では図示されていない更に別の可能な改善は:
* 早めの終了、これは基本的に残りの全ての被乗数倍数がゼロになった時点の検出(従って更なる加算は実際上必要とされない)を含み、続いて”低”、”活性”および”高”領域内のビットの無駄な再構成の代わりに、正しい最終加算を生成するための何か別のことを実行する。
* この回路内に最終加算器を用意する必要を、データ経路上に存在する別の加算器、例えばALUを使用することにより無くする。
* ”保存低ラッチ”は最後尾から2ビット/乗数行までを満たし、一方”累算値高ラッチ”は最後尾からその同じ所まで空であるという事実をうまく利用し、同一の物理的レジスタを用いて、2つの値を保持することが可能である。最初にこれは累算値の高位部分を含む;最終的にこれは”保存”値の低位部分を含む;その間は、未消費の高累算値ビットと生成途中の”保存”ビットとを含む。
これは回路にとって有益な改善である。
掛け算器は下記の入力を使用する:
Figure 0003605181
【0095】
回路はRESULT[63:0]をその結果として生成する。
【0096】
この掛け算器の基本ブロック図が図6並びに図7に示されている(分かり易くするために制御信号は図示されていない):
【0097】
この掛け算器は、MPLIER[31:0]*MCAND [31:0]+ACCVAL[63:0]を5サイクルの間に計算し、種々のブロックは各サイクル毎に下記の機能を実行する:
Figure 0003605181
サイクル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 :変化無し。
Figure 0003605181
サイクル5:変化無し
ここでBoothEnc機能は下記の表で指定される:
【表16】
Figure 0003605181
【0098】
掛け算器行1,2,4および5
全てのサイクルに於いて、掛け算器行kは入力D[32: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】
Figure 0003605181
次に
Figure 0003605181
【0100】
これらは内部信号ACCHI[31:0]を含む
Figure 0003605181
Figure 0003605181
マルチプレクサ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ビット乗数(MPLIER[])とを掛け算し、続いて2Nビットの累算値(ACCVAL[])を加算するための、掛け算累算回路を図示しており、この例では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サイクルにわたって加算され(桁上げ保存低ラッチ24からの値は最終加算器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 保存プログラム状態レジスタ

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および第4データ処理レジスタ内に保持されている2Nビット被演算子を加算して、第3および第4データ処理レジスタの中に格納される2Nビットの結果を算出し、前記第1、第2、第3および第4データ処理レジスタは掛け算累算命令の前記第クラスの中のフィールドとして独立に指定されている、前記装置。
  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および第4データ処理レジスタ内に保持されている2Nビット被演算子を加算して、第3および第4データ処理レジスタの中に格納される2Nビットの結果を算出し、前記第1、第2、第3および第4データ処理レジスタは掛け算累算命令の前記第クラスの中のフィールドとして独立に指定される、以上の手順を含む、前記方法。
JP14923095A 1994-07-14 1995-06-15 掛け算累算命令を使用したデータ処理 Expired - Lifetime JP3605181B2 (ja)

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
JPH0863353A JPH0863353A (ja) 1996-03-08
JP3605181B2 true 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)

Families Citing this family (27)

* 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
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
GB2339936B (en) * 1998-05-27 2002-09-25 Advanced Risc Mach Ltd Data processing apparatus and method for performing multiply-accumulate operations
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
US7668897B2 (en) * 2003-06-16 2010-02-23 Arm Limited Result partitioning within SIMD data processing systems
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 富士通マイクロエレクトロニクス株式会社 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
US9710269B2 (en) * 2006-01-20 2017-07-18 Qualcomm Incorporated Early conditional selection of an operand
US7627743B2 (en) * 2007-01-12 2009-12-01 Andes Technology Corporation Method and circuit implementation for multiple-word transfer into/from memory subsystems
IT1393809B1 (it) * 2008-10-22 2012-05-11 St Wireless Sa Unità aritmetico-logica per processore di segnali digitali
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
US10802826B2 (en) * 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664270B2 (en) * 2017-12-21 2020-05-26 Intel Corporation Apparatus and method for vector multiply and accumulate of unsigned 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
KR860700300A (ko) * 1984-09-28 1986-08-01 빈센트 죠셉로너 입력 기억 회로 수단 및 그 분배 사용방법
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

Also Published As

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

Similar Documents

Publication Publication Date Title
JP3605181B2 (ja) 掛け算累算命令を使用したデータ処理
EP3374853B1 (en) Multiplication of first and second operands using redundant representation
JP6853777B2 (ja) プログラム可能な有効度データを使用するデータ処理装置および方法
US5991785A (en) Determining an extremum value and its index in an array using a dual-accumulation processor
JP6882281B2 (ja) ベクトルの処理のためのレーン位置情報
JP2011134346A (ja) 算術プロセッサ
WO2004042599A1 (en) Method and a system for performing calculation operations and a device
WO2004042600A1 (en) Method and system for performing calculation operations and a device
JP7096828B2 (ja) 入力オペランド値を処理するための装置及び方法
US6295597B1 (en) Apparatus and method for improved vector processing to support extended-length integer arithmetic
JP6803381B2 (ja) 重複ビットを使用する数値の冗長表現
US5528529A (en) Electronic multiplying and adding apparatus and method
US6009450A (en) Finite field inverse circuit
US6728744B2 (en) Wide word multiplier using booth encoding
JP4601544B2 (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
JP6877812B2 (ja) 重複伝搬演算
US6772186B1 (en) Multimedia multiply-adder
US20240111489A1 (en) Bignum addition and/or subtraction with carry propagation
WO2008077803A1 (en) Simd processor with reduction unit
CA2330169A1 (en) Wide word multiplier using booth encoding
JPH0830439A (ja) 倍精度乗算を実行する方法及び演算装置

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