(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
データ処理命令語に応答して、処理制御信号を発生する命令解読器（４）と、
前記処理制御信号によって制御され、データ・オペランド語についてデータ処理演算を実行する処理論理（６）と、
を含むデータ処理装置において、
前記命令解読器（４）は、第１の命令語（QDADD）に応答して、前記処理論理を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)+Q)
によって与えられるNビットの結果データ語Rを発生し、ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、
ことを特徴とする前記データ処理装置。
【請求項２】
データ処理装置であって、
データ処理命令語に応答して、処理制御信号を発生する命令解読器（４）と、
前記処理制御信号によって制御され、データ・オペランド語についてデータ処理演算を実行する処理論理（６）と、
を含むデータ処理装置において、
前記命令解読器（４）は、第１の命令語（QDSUB）に応答して、前記処理論理を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)−Q)
によって与えられるNビットの結果データ語Rを発生し、ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、ことを特徴とする前記データ処理装置。
【請求項３】
データ処理装置であって、
データ処理命令語に応答して、処理制御信号を発生する命令解読器（４）と、
前記処理制御信号によって制御され、データ・オペランド語についてデータ処理演算を実行する処理論理（６）と、
を含むデータ処理装置において、
前記命令解読器（４）は、第１の命令語（QDRSB）に応答して、前記処理論理を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Q−Fun(P))
によって与えられるNビットの結果データ語Rを発生し、ここで
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、ことを特徴とする前記データ処理装置。
【請求項４】
請求項１、２および３のいずれか１項に記載のデータ処理装置において、前記シフト量は、前記シフトされた語が前記第１のNビット・データ・オペランド語Pの２倍の値になるようなシフト量である前記データ処理装置。
【請求項５】
請求項１から４のいずれか１項に記載のデータ処理装置において、前記シフトされた語を飽和させることは、前記第１のNビット・データ・オペランド語Pの所定の特徴を検出し、検出した場合、前記シフトされた値と、許容値範囲のそれぞれの端点を示す値を交換する前記データ処理装置。
【請求項６】
請求項５に記載のデータ処理装置において、前記第１のNビット・データ・オペランド語は符号付き値であり、前記所定の特徴は、前記第１のNビット・データ・オペランド語Pの最上位２ビットが等しくないことである前記データ処理装置。
【請求項７】
請求項１から６のいずれか１項に記載のデータ処理装置において、Sat(X)は、Xが許容値範囲の外側にあるか検出して、検出した場合は、Xと、前記許容値範囲のそれぞれの端点を示す値を交換して、前記Nビット結果データ語Rを発生する前記データ処理装置。
【請求項８】
請求項１から７のいずれか１項に記載のデータ処理装置において、前記処理論理は乗算器（MUL）を含み、前記第１のNビット・オペランド・データ語Pは、第２の命令語に応答して、第３のN/2ビット・データ・オペランド語Aと第４のN/2ビット・データ・オペランド語Bの符号付き乗算によって発生する乗算結果である前記データ処理装置。
【請求項９】
請求項１から８のいずれか１項に記載のデータ処理装置において、前記第１のNビット・オペランド・データ語P、前記第２のNビット・オペランド・データ語Qおよび前記Nビット結果データ語Rは、−1≦P＜+1、−1≦Q＜+1、−1≦R＜+1で、Sat(X)が範囲−1≦X＜+1に対して存在するように、最上位ビット位置とその右のビット位置の間に小数点があるとする、符号付き固定小数点データ語である前記データ処理装置。
【請求項１０】
請求項１から９のいずれか１項に記載のデータ処理装置において、Fun(X)は、XのＮビットの値のすべてに対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトしてシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である前記データ処理装置。
【請求項１１】
請求項１から１０のいずれか１項に記載のデータ処理装置において、N = 32である前記データ処理装置。
【請求項１２】
請求項１から１１のいずれか１項に記載のデータ処理装置において、集積回路を含む前記データ処理装置。
【請求項１３】
データ処理装置においてデータを処理する方法であって、
データ処理命令語に応答して、処理制御信号を発生するステップと、
前記処理制御信号の制御のもとにデータ・オペランド語についてデータ処理演算を実行するステップと、
を含む方法において、
第１の命令語（QDADD）に応答して、前記処理論理（６）を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)+Q)
によって与えられるNビットの結果データ語Rを発生し、ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、ことを特徴とする前記方法。
【請求項１４】
データ処理装置においてデータを処理する方法であって、
データ処理命令語に応答して、処理制御信号を発生するステップと、
前記処理制御信号の制御のもとにデータ・オペランド語についてデータ処理演算を実行するステップと、
を含む方法において、
第１の命令語（QDSUB）に応答して、処理論理（６）を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)−Q)
によって与えられるNビットの結果データ語Rを発生し、ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、ことを特徴とする前記方法。
【請求項１５】
データ処理装置においてデータを処理する方法であって、
データ処理命令語に応答して、処理制御信号を発生するステップと、
前記処理制御信号の制御のもとにデータ・オペランド語についてデータ処理演算を実行するステップと、
を含む方法において、
第１の命令語（QDRSB）に応答して、処理論理（６）を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)−Q)
によって与えられるNビットの結果データ語Rを発生し、ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である、ことを特徴とする前記方法。
【発明の詳細な説明】
【０００１】
本発明はデータ処理システムに関する。より詳細には、本発明は、飽和数値演算（saturated arithmetic operation）を実行するのに適した数値演算を実行するためのデータ処理システムに関する。
【０００２】
多くのDSPアルゴリズムは、Q15演算とQ31演算として知られているアルゴリズムを使用している。Q15数は、普通の１６ビットの２の補数の整数であるが、215で除算されたその整数を表すものと認められている。１６ビットの２の補数の整数は、−215から＋215− 1までの数を表すことができるので、Q15は、−１から＋(1−2-15)までの数を表すことができる。
【０００３】
同様に、Q31数は、普通の３２ビットの２の補数の整数であり、231で除算される整数だと認められているから、−1から−(1−2-31)までの数を表すことができる。これから類推して、いかなるＮの値に対しても(N+1)ビットのQN数を定義することができる。
【０００４】
Q15およびQ31数値演算の重要な特徴は、これらの演算が「飽和する（saturating）」ことである。演算の数学的演算結果が正の最大値(＋1−2-N)を超える場合、飽和した結果は正の最大値であり、同様に数学的演算結果が−１より小さい場合、飽和した結果は−１である。例えば、Q15数値演算で、A=0x8000（−1を表す）でB=0xC000（−0.5を表す）の場合、AとBを加算した結果は、通常の１６ビットの２の補数の結果0x4000ではなく、0x8000（−1を表す）である。
【０００５】
DSPアルゴリズムで最も要求され、かつ共通して発生する演算は、「乗算・累積（multiply-accumulate）」演算、つまり、あとに第３のオペランドが付加される２つのオペランドの乗算、
結果 =（A*B）+C
で表される演算である。
【０００６】
（時にはクリッピングとして知られている）飽和数値演算に、このような乗算・累積命令を使いたい場合、重大な問題が発生する。この問題は、QN数に対して数値演算を実行する場合に特に該当する。
【０００７】
飽和形式と不飽和形式（non-saturated form）の両者に、各種の異なるタイプの命令を適応させるためには、命令コードのビットスペースにかなりの量が必要になる。その上、単一サイクル乗算の性能向上を追求すると、飽和とそれに関連する調整に対する要求に対処しなくてはならないという負担が追加される。すなわち、必要としないのに最悪の場合の飽和乗算命令によってクロック速度が制限されることになる。
英国公開特許出願GB-A-2,317,465には、完全なQ15乗算・累積演算を実行する乗算・２倍化命令（Multiply Double instructions）が、例えば、任意に大きさが変えられるdest = SAT(acc + SAT(2*src1*src2))と、任意に大きさが変えられるdest = (acc−SAT(2*src1*src2))などの、１つの命令で用意されていることが開示されている。
【０００８】
一態様から見ると、本発明は、
データ処理命令語に応答して、処理制御信号を発生する命令解読器と、
前記処理制御信号によって制御され、データ・オペランド語についてデータ処理演算を実行する処理論理と、
を含む処理装置であって、
前記命令解読器は、第１の命令語に応答して、前記処理論理を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)+Q)
で与えられるNビットの結果データ語Rを発生することを特徴とするデータ処理装置を提供する。
ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生すし、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である。
【０００９】
本発明は、飽和乗算・累積演算の要求に対処するために適した特殊目的の命令を設けることが非常に利点があると認めている。より詳細に述べると、標準的な所望の単一サイクル乗算に対するタイミング条件は、累積演算を実行する後続命令で使用されるサイクルに容易に適応する数値演算の飽和特性に対処するために必要となる調整によって緩和する。この新しい命令は、いくつかの乗算命令の飽和形（saturated version）を定義する必要をなくして、命令コードのビットスペースと、飽和数値演算をサポートするために必要なその他のオーバーヘッドを低減する。最後に、この新しい命令は、既にシステムに設けられているハードウエアにほとんどハードウエアを追加しないで実施され、不飽和数値演算と飽和数値演算に関する他の態様に対処することができる。
【００１０】
この新しい命令を実行するために使用されるハードウエアが多数の異なる形式を取ることができるとは理解できるであろう。Ｎビットの最終結果データ語を発生するために必要な各種の演算は、各種の異なる方法でグループ化され、各種の回路ブロックで実行される。単一命令を使用して上で与えらた値と同じ最終値のＮビット最終結果データ語を発生するこれら各種の異なる代替方法は、すべて本発明の実施例である。
【００１１】
飽和乗算・累積演算で使用される上記命令と同様に、飽和乗算・減算をサポートするために同じような命令を設けることができる。
【００１２】
本発明の命令で使用されるシフト量は、各種の異なる値を取ることができる。しかし、シフトされた語が第１のNビット・データ・オペランド語Pの２倍となるようなシフト量は特に有用である。
【００１３】
２つのQ15数について整数乗算が実行されると、通常発生する結果は、３２ビットのQ30に似た（Q30-like）数であり、この数に対して、普通の３２ビットの符号付き2の補数の値は230で除算されると認められているので、−2から+(2−2-30)までの数を表す。Q30に似た数は、２進数の位置が３０個ある符号付き３２ビット固定小数点の数であると考えてもよい。しかし、このような状況で、このあとの処理に要求されることは、Q31数である。この課題に対処するためには、標準的整数乗算の後に本発明の命令を実行し、整数乗算の結果が飽和して累積または減分される前に、前記結果を２倍にしてQ30に似た形式からQ31形式に変更するためにシフト量を使用してもよい。したがって、飽和数値演算をサポートするために必要な問題となる調整（problematic adjustments）の１つは、乗算サイクルの終わりで与えられなければならない命令ではなく、後続の命令の中に適応されている整数乗算の結果に対する調整が与えられている。
【００１４】
飽和を実行する論理回路は多数の異なる形式を取ることができる。しかし、本発明の好適実施例では、前記シフトされた語を飽和させることは、前記第１のNビット・データ・オペランド語Pの所定の特徴を検出し、検出した場合、前記シフトされた値と、許容値範囲の端点の値を交換する。
【００１５】
この特徴は、何らかの状況で第１のNビット・データ・オペランド語Pの特徴を検出することによって、飽和させることができると認めている。何故ならば、その特徴について実行される操作は比較的限定された形式であって、飽和を必要とするオーバーフローまたはアンダーフローを起こすことができる状況を明確に検出することができるので、結果としてハードウエアの要求条件が総合的に緩和するからである。
【００１６】
特に使用するシフト量が、第１のNビット・データ・オペランド語Pを２倍にする場合、飽和させる必要は、第１のNビット・データ・オペランド語Pの最上位２ビットを比較することによって非常に簡単に検出される。
【００１７】
Fun(X)命令のオーバーフローまたはアンダーフローを起こすことができる状況の比較的限定された範囲を比較すると、Sat(X)関数のオーバーフローまたはアンダーフローはもっと普通に起こるので、本発明の好適実施例は、Sat(X)がXが許容値範囲外にあるか検出して、検出した場合は、Xと前記許容値範囲のそれぞれの端点を交換して前記Nビット結果データ語Rを発生する。
【００１８】
本発明の新しい命令はそれ自体に利点があるが、上記のとおり、これらの命令は、第３のN/2ビット・データ・オペランド語Aと第４のN/2ビット・データ・オペランド語Bを乗算することにより、第１のNビット・データ・オペランド語を発生する第２の命令語を実行するようになっている実施例に特によく適している。
【００１９】
いかなる種類のオペランドに対しても、本発明の命令を使用することが可能である。しかし、この命令が実施例の中で特に便利なのは、前記第１のNビット・オペランド・データ語P、前記第２のNビット・オペランド・データ語Qおよび前記Nビット結果データ語Rが、−1≦P＜+1、−1≦Q＜+1、−1≦R＜+1で、Sat(X)が範囲−1≦X＜+1に対して存在するように、最上位ビット位置のすぐ右側に小数点がある、符号付き固定小数点データ語である実施例の場合である。
【００２０】
前に考察したように、かかるQN形オペランドは、データ処理システムの残り部分に不適切な影響を及ぼすことなく、本発明の命令によって効果的に与えられる調整と飽和を必要とする。
【００２１】
第１のNビット・データ・オペランド語Pの最も有用な値は、N/2ビットとN/2ビットの符号付き乗算によって発生することができる値である。しかし、本発明の好適実施例は、起こりうるXのＮビットの値すべてをシフトして飽和させることができるように、Fun(X)の機能を拡張することができる。
【００２２】
本発明は、Nが各種の異なる値をもつシステムで使用できる。しかし、本発明が特に有用なDSP動作のタイプは、普通、N = 32のようなNの値を必要とする。
【００２３】
本発明が個別部品を含むシステムとして実施できることは理解できるであろうが、このデータ処理装置が集積回路として実現されることは非常に好ましい。
【００２４】
別の態様から見ると、本発明は、
データ処理命令語に応答して、処理制御信号を発生するステップと、
前記処理制御信号の制御のもとにデータ・オペランド語についてデータ処理演算を実行するステップと、
を含む方法であって、
第１の命令語に応答して、前記処理論理を制御する制御信号を発生し、第１のNビット・データ・オペランド語Pと、第２のNビット・データ・オペランド語Qについてデータ処理演算を実行して、
R = Sat(Fun(P)+Q)
で与えられるNビットの結果データ語Rを発生することを特徴とするデータ処理装置におけるデータ処理方法を提供する。
ここで、
Sat(X)は、値Ｘの飽和した値を返す関数であり、
Fun(X)は、少なくとも、N/2ビットとN/2ビットの符号付き乗算によって発生することができるXの値に対して動作し、シフトによりアンダーフロー又はオーバーフローが発生しない場合にシフト量でXをシフトすることによってシフトされた語を発生し、シフトによりアンダーフロー又はオーバーフローが発生する場合に前記シフトされた語を飽和させることによって得られた値を返す関数である。
【００２５】
本発明の相補的方法（complementary method）の態様も用意されており、この方法では、命令は加算演算ではなく減算を実行する。
【００２６】
以下、添付の図面を参照し、例示のみによって、本発明の実施例を説明する。
【００２７】
図１は、（英国、ケンブリッジのＡＲＭ社で製造されたARM9TDMIマイクロプロセッサの一部と同様な）命令解読器４と処理論理６を含む集積回路２の一部分を示す。処理論理６は、多数の異なる個別機能要素からなる。レジスタバンク８は、操作すべきデータ・オペランド語（P、Q）を格納する。これらの語は、レジスタバンク８から読み出され、マルチプレクサー１０、１２、１４を介して、処理論理６の中の他の各種処理ユニットに提供される。整数乗算器１６は、機能のうち特に符号付き整数乗算を実行するために設けられている。加算器１８は、不飽和乗算・累積演算を実行するためと、桁上げ保存（carry-save）からの乗算器の結果を、２の補数形式に変換するために設けられている。シフター２０と算術論理演算ユニット２２も設けられている。処理論理６の上記基本部品は一般に知られている。命令解読器４からの制御信号２４は、処理論理６の中の各種要素に印加され、それらの動作を制御するとともに協調させる。より詳細に説明すると、命令解読器で命令が解読されると制御信号２４が出力され、処理論理６の中の各種マルチプレクサーを切り替えて所望のデータ経路を選択し、処理論理６の中の各種論理ユニットを起動して構成し、解読された命令によって指定された演算を実行する。明瞭にするため、個々の部品を命令解読器に接続する信号線は、この図から省略されている。
【００２８】
飽和数値演算（QDADD、DQDSUBおよびQDRSB）の追加命令をサポートするため、算術論理演算ユニット２２の上流にシフト・飽和ユニット（shifting and saturating unit）２６が設けられ、算術論理演算ユニット２２が演算するパイプライン・ステージの後の次のパイプライン・ステージのレジスタバンク８に至るフィードバック経路に、全飽和ユニット（full saturating unit）２８が設けられている。動作の場合、シフト・飽和ユニット２６は、まず入力された３２ビット・データ語の最上位２ビットが等しくないことを決定するためにチェックする。この条件が検出された場合に１ビット左へシフトすると、その入力データ語が、この左シフトによってQ31語に変換されるQ30に似た語を表す場合、オーバーフローまたはアンダーフローになる。最上位２ビットが「01」の場合、シフト・飽和ユニット２６は、許容値範囲の最大端点を表す0x7FFFFFFFを出力する。同様に、最上位２ビットが「10」の場合、シフト・飽和ユニット２６は、許容値範囲の最小端点を表す0x80000000を出力する。これらの条件がいずれも検出されない場合、シフト・飽和ユニット２６は、この入力２進データ値を２倍にすることに対応して、このデータ値を１ビット位置だけ左へシフトするので、Q15数とQ15数の整数乗算によって得られたQ30に似た表現を、この後の処理（例えば累積）と飽和のために要求されるQ31の表現に変換する。
【００２９】
解読中の特定の命令がこの演算を必要としない場合、命令解読器４からの適切な制御信号２４に応答して、シフト・飽和ユニット２６を演算から切り離すことができる。シフト・飽和ユニット２６はAバスに配置されているので、通常、このバスのタイミングの制約は、シフター２０を含むBバスよりも緩和されている。したがって、シフト・飽和ユニット２６に重要なタイミングの問題が追加されることはまったくない。
【００３０】
全飽和ユニット２８は、算術論理演算ユニット２２が要求された加算または減算を実行した後に使用する戻り経路に設けられている。全飽和ユニット２８は、既知の原理で動作し、算術論理演算ユニット２２で発生した符号付き結果のオーバーフローまたはアンダーフローを検出し、その結果を許容値範囲の最大端点または最小端点の値に訂正することができる。シフト・飽和ユニット２６と同様、全飽和ユニット２８は、この飽和が要求されない場合、適切な制御信号２４に応答して、全飽和ユニット２８を演算からは切り離すことができる。全飽和ユニット２８は、通常は、加算命令と減算命令に対しては何もしないパイプライン・ステージにあるので、タイミングの問題が起こることはまったくない。しかし、全飽和ユニット２８は、すぐ後に続く命令によって飽和命令が使用される場合は、１サイクルの間、プロセッサが連動（interlock）すべきことを要求する。この連動は、ロード命令によってロードされた値が、すぐ後に続く命令によって使用される場合に、多くのマイクロプロセッサで発生する連動と同じように処理される。
【００３１】
総合動作の場合、Q15とQ15の乗算をQ31の累積演算と一緒に実行するために、以下の通り処理が進行する。最初に、レジスタバンク８からQ15の値がバスAとバスBに読み出され、入力として、単一サイクル整数乗算器１６に送られる。Q30に似た形式をしている結果は、レジスタバンク８にフィードバックされる。後続処理サイクルで、新しい命令の１つ（例えば、QDADD命令）が実行され、Q30に似た乗算の結果がAバスに読み出され、Q31累積値がBバスに読み出される。Q30に似た値は、シフト・飽和ユニット２６で１ビット左シフトされるか飽和して、１つの入力として算術論理演算ユニット２２に供給される。BバスのQ31の値は、シフター２０がその入力値をシフトしないようにする適切な制御信号２４を使用することによって、別の入力として算術論理演算ユニット２２に供給される。シフト・飽和ユニット２６が、Q30に似た値を、要求される飽和したQ31の値に訂正すると、算術論理演算ユニット２２によって、BバスのQ31の値にこの値が加算される。算術論理演算ユニット２２からの出力が全飽和ユニット２８に供給されると、ここで、オーバーフロー・フラグおよびアンダーフロー・フラグと算術論理演算ユニット２２からの他の標準条件を検出することにより、この値は、レジスタバンク８に格納される前に、Q31の飽和になる。加算を実行する算術論理演算ユニット２２の代わりに、QDRSB命令でBバスの値からAバスの値を減算すること、またはQDSUB命令でAバスの値からBバスの値を減算することを適切な制御信号２４によって制御してもよい。命令解読器からの適切な制御信号２４に応答して減算を実行する算術論理演算ユニットの構成は、各種の標準的方法で実現できる。
【００３２】
上記から判ることは、QDADD命令、QDSUB命令およびQDRSB命令によって実行される演算は、処理論理の中の各種の機能ユニットの間で各種方法で分割されていることである。これらの演算が各種ユニット間で分割されていることにより、同じ最終結果を発生すると同時に多数の異なる方法で実行できることは、当業者には判ることである。
【００３３】
図２は、QDADD命令で実行される処理ステップを示す流れ図である。ステップ４０で、第１の３２ビット・データ・オペランド語の最上位２ビットが「01」に等しいか否かについてテストが実行される。この場合、１ビットだけ左にシフトするとオーバーフローになるので、ステップ４２を使用して、この値を正の最大許容値（+1−231）に設定する。同様に、ステップ４４は、最上位２ビットが、左シフトするとアンダーフローになることを示す「10」かどうかを見るためにチェックする。この場合に検出されると、ステップ４６は、この値を最小許容値−1に設定する。
【００３４】
オーバーフローもアンダーフローも検出されない場合、ステップ４８は、第１の３２ビット・オペランド・データ語を１ビット位置だけ左シフトし、この左シフトが、その数字が示しているシフトであれば、このデータ語をQ30に似た形式からQ31形式に変換する。ステップ４０からステップ４８の演算は、シフト・飽和ユニット２６と、前に説明したFun(x)関数によって与えられる機能に対応する。
【００３５】
ステップ５０で加算が実行される。この加算は、図１の算術論理演算ユニット２２によって実行される加算に対応する。
【００３６】
ステップ５２とステップ５４は、ステップ５０から生じた飽和値のオーバーフローを検出して対処する。同様に、ステップ５６とステップ５８はアンダーフローに対処する。オーバーフローもアンダーフローも検出されなければ、訂正は行われない。QDADD命令の結果Rは、ステップ６０でレジスタバンク８の中のレジスタに格納される。
【００３７】
ステップ５２からステップ５８で実行される演算は、図１の全飽和ユニット２８と、前に考察したSat(X)関数によって与えられる演算に対応する。
【００３８】
図３は、同様な流れ図であるが、この場合はQDSUB命令のための流れ図である。この命令では、図２のステップ５０が、シフトされ飽和した第１のオペランド・データ語Pから第２の３２ビット・オペランド・データ語Qが減算されるステップ６２と交換されている。
【００３９】
図４は、図３と同様であるが、この場合、図３のステップ６２で実行される減算は、図４のステップ６４では被減数と減数が逆になっている。
【図面の簡単な説明】
【図１】  集積回路内の命令解読器と処理論理を示す図。
【図２】  飽和数値演算をサポートするために用意された命令の演算の流れ図を示す図。
【図３】  飽和数値演算をサポートするために用意された命令の演算の流れ図を示す図。
【図４】  飽和数値演算をサポートするために用意された命令の演算の流れ図を示す図。
【図１】
0004177962.tif 000002
【図２】
0004177962.tif 000003
【図３】
0004177962.tif 000004
【図４】
0004177962.tif 000005