JP3672076B2 - 演算器および演算方法およびプロセッサ - Google Patents
演算器および演算方法およびプロセッサ Download PDFInfo
- Publication number
- JP3672076B2 JP3672076B2 JP26956699A JP26956699A JP3672076B2 JP 3672076 B2 JP3672076 B2 JP 3672076B2 JP 26956699 A JP26956699 A JP 26956699A JP 26956699 A JP26956699 A JP 26956699A JP 3672076 B2 JP3672076 B2 JP 3672076B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- absolute value
- input
- complement
- sign
- 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 - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/02—Comparing digital values
- G06F7/026—Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、複数のデータ(値)のなかから最大の絶対値をもつデータを求めるために、2つのデータのうち絶対値が大きいものを求める処理を実行する演算器および演算方法およびプロセッサに関する。特に、絶対値の比較演算が大きな負担となるデジタル化された音楽データなどのAVデータの圧縮に使用する演算器および演算方法およびプロセッサに関する。
【0002】
【従来の技術】
現在のAVシステムでは信号をデジタル信号として取り扱うことが多い。デジタル信号は、アナログ信号に比べ周囲の雑音に強く、記憶媒体に記憶させたり、信号を伝送させた場合でも、コンパクトディスク(CD:Compact Disc)のように極めて良好に信号を再生することができる。この様に優れた特質を持つデジタルデータを記憶媒体に記憶させる場合や信号伝送する場合には、より多くのデータを記憶したり伝送するためにデジタルデータの圧縮がなくてはならない技術となっている。この圧縮技術を標準化するために設立された団体としてMPEG(Moving Picture Experts Group)がある。MPEGにより規格化された圧縮方式には、動画像の圧縮方式としてMPEG−1、MPEG−2などがあり、音声の圧縮方式としてMPEG−Audioがある。
【0003】
MPEG−Audioでは次のような技術を用いて音声の圧縮を行っている。まず、時間領域にあるオーディオデータを周波数領域の32個の均等な帯域に変換する。つぎに、各帯域内のデータを、波形と倍率とに分離する。波形は、最大振幅を1.0に近づくように正規化し、サンプルとして符号化される。つまり、波形の正規化とは、波形の相似性を損なうことなく波形信号を表現する個々の値Aが、−1≦A<1の範囲に収まるようにする処理である。また、正規化時の倍率もスケール・ファクタとして符号化される。その後、ヒトの聴覚特性を考慮して、ヒトが聴き取ることができる限界の量子化精度で好適なビットを割り当てることにより圧縮が行われる。
【0004】
また、周波数帯域毎に波形信号の大きさを一定のビット幅を用いて表現する必要があるが、最小のビット幅で無駄なく波形信号の大きさをすべて表現するためにも、波形信号の個々の値の中から絶対値が最大の値を求める必要がある。
【0005】
今日では、これらの処理はプログラマブルなプロセッサで行われることが多い。絶対値が最大の値を求めるために用いられる従来の一般的なプロセッサの構成を図7のブロック図に示す。このプロセッサは、プロセッサの制御を行う制御部1と、ALU6などを有し演算を行うデータバス部2とを備えるものである。
【0006】
制御部1は、プログラムカウンタ3、実行命令メモリ4、デコーダ5から構成される。実行命令メモリ4には、実行命令がプログラムとして格納されている。プログラムカウンタ3は、次に実行するべき実行命令が記憶されている実行命令メモリ4上のアドレスを示しており、通常はデコードからの制御信号12によってインクリメントされ、分岐命令等が実行される場合は分岐先のアドレスをセットする。デコーダ5は、実行命令メモリから出力された実行命令とフラグ設定部9の値に基づいて、データバス部2に制御信号10を出力し、プログラムカウンタ3に制御信号12を出力する。
【0007】
データバス部2は、ALU6、レジスタファイル7、データメモリ8、フラグ設定部9から構成される。ALU6は、制御信号10に基づいた演算をレジスタファイル7から出力された値に対して行い、その結果をレジスタファイル7に格納する。レジスタファイル7は、複数のレジスタが集まったものであり、制御信号10によりALU6やデータメモリ8に内容を出力するレジスタが指定される。同じく制御信号10により、ALU6、データメモリ8からの出力を書き込むレジスタが指定される。また、レジスタファイル7からアドレス信号11がデータメモリ8に出力されるが、制御信号10により指定されたレジスタファイル7内のレジスタの内容がアドレス信号11として出力する。
【0008】
レジスタファイル7には、A,B,C,D,Pの5つのレジスタがある。データメモリ8は、演算に使用されるデータを保持するためのメモリである。データメモリ8内のアドレスがアドレス信号11により指定されて、レジスタファイル7からの出力が書き込まれる。また、アドレス信号11により指定されたデータメモリ8内のアドレスの内容が読み出されてレジスタファイル7に書き込まれる。フラグ設定部9には、NフラグレジスタとZフラグレジスタからそれぞれ構成されるNフラグとZフラグがある。Nフラグには,ALU6から出力された演算結果が負の場合に1がセットされ、それ以外の場合には0をセットする。ZフラグにはALU6から出力された演算結果がゼロの場合に1がセットされ、それ以外の場合には0をセットする。
【0009】
なお、A,B,C,D,Pの5つのレジスタのビット幅、データメモリ8のビット幅、ALU6の入出力、演算精度のビット幅はすべて4ビットとする。
【0010】
このプロセッサは、次のような実行命令を備えている。
【0011】
「move a,b :レジスタbからレジスタaへのデータ転送」、「movei a,imm :即値immをレジスタaにセット」、「cmp a,b: レジスタaとレジスタbとのデータ比較。ALU6において減算が実行されるが、結果はレジスタに書き込まれない(a−b)」、「cmpi a,imm: レジスタiと即値immの比較。ALU6において減算が実行されるが、結果はレジスタに書き込まれない(a−imm)」、「addi a,imm: レジスタaの値に即値immを足してレジスタaにセット」、「abs a,b:レジスタbの2の補数の絶対値の値をレジスタaにセット」、「jmp label :無条件にlabelにジャンプ」、「jmp(b) label :NフラグとZフラグが共に0の場合にlabelにジャンプ」、「jmp(e) label :Zフラグが1の場合にlabelにジャンプ」。
【0012】
絶対値が最も大きい値を求める処理を、従来の一般的なプロセッサで行う場合のプログラムを図13に示す。
【0013】
この例において、絶対値が最も大きい値を求める対象となるデータは、データメモリ8内の0番地から3番地までのメモリ領域上のアドレスに保持されている。
【0014】
ステップ(1)において、レジスタPに0(0番地)をセットする。ステップ(2)において、レジスタCに絶対値が最小である0をダミーデータとしてセットする。ステップ(3)では、レジスタPが示すメモリのアドレスの値をレジスタAにセットする。ステップ(4)では、レジスタAの値の絶対値演算の結果をレジスタBにセットする。ステップ(5)では、レジスタCの値の絶対値演算の結果をレジスタDにセットする。ステップ(6)では、レジスタD,Bの値を比較する。ステップ(7)では、ステップ(6)での比較結果が正の場合(フラグN=0,フラグZ=0)は、ステップ(9)に進む。それ以外の場合はステップ(8)に進む。ステップ(8)では、レジスタAの値をレジスタCにデータ転送する。ステップ(9)ではレジスタPの値が示すアドレスがデータ群の最終データのアドレスであるか、つまり3番地に等しいか比較する。ステップ(10)では、ステップ(9)での比較結果が等しい場合(フラグZ=1)に、ステップ(13)に進む。ステップ(11)はレジスタPの値を1増加させて次のデータをポイントする。ステップ(12)では、ステップ(3)に戻る。ステップ(13)では、処理を終了する。これらの処理によりデータメモリ8内の0番地から3番地に格納されているデータの内で、絶対値が最大であるデータをレジスタCに求めることができる。
【0015】
この中で、ステップ(4)〜ステップ(6)が、2つの値の絶対値の差を求める絶対値比較演算であり、ステップ(7)〜ステップ(8)で2つの値のうちでより大きい絶対値を持つ方を求めている。
【0016】
ここで図16に示す4つの具体的データから図13に示すプログラムによって絶対値が最大のデータが求まる様子を示す。
【0017】
ステップ(1)では、レジスタPに0をセットする。ステップ(2)では、レジスタCに0をセットする。
【0018】
繰返し1回目のステップ(3)では、レジスタAにアドレス{0}内に保持されているデータの値「3」をセットする。ステップ(4)では、レジスタAの値「3」の絶対値演算の結果「3」がレジスタBにセットされる。ステップ(5)では、レジスタCの値「0」の絶対値演算の結果「0」がレジスタDにセットされる。ステップ(6)では、レジスタDの値「0」とレジスタBの値「3」を比較する。比較(減算)結果が「0−3=−3」で、負なのでフラグN=1、フラグZ=0をセットする。ステップ(7)では、フラグN=1,フラグZ=0なので、ステップ(8)に進む。ステップ(8)では、レジスタAの値「3」をレジスタCにセットする。ステップ(9)ではレジスタPの値「0」と最終データのアドレス{3}を比較する。比較(減算)結果が「0−3=−3」で、負なので、フラグN=1、フラグZ=0をセットする。ステップ(10)では、フラグZ=0なのでステップ(11)に進む。ステップ(11)では、レジスタPの値を1増加した値「1」とする。ステップ(12)ではステップ(3)に戻る。
【0019】
繰返し2回目のステップ(3)では、レジスタAにアドレス{1}内に保持されているデータの値「−5」をセットする。ステップ(4)では、レジスタAの値「−5」の絶対値演算の結果「5」がレジスタBにセットされる。ステップ(5)では、レジスタCの値「3」の絶対値演算の結果「3」がレジスタDにセットされる。ステップ(6)では、レジスタDの値「3」とレジスタBの値「5」を比較する。比較(減算)結果が「3−5=−2」で、負なのでフラグN=1、フラグZ=0をセットする。ステップ(7)では、フラグN=1,フラグZ=0なので、ステップ(8)に進む。ステップ(8)では、レジスタAの値「−5」をレジスタCにセットする。ステップ(9)ではレジスタPの値「1」と最終データのアドレス{3}を比較する。比較(減算)結果が「1−3=−2」で、負なので、フラグN=1、フラグZ=0をセットする。ステップ(10)では、フラグZ=0なのでステップ(11)に進む。ステップ(11)では、レジスタPの値を1増加した値「2」とする。ステップ(12)ではステップ(3)に戻る。
【0020】
繰返し3回目のステップ(3)では、レジスタAにアドレス{2}内に保持されているデータの値、「−2」をセットする。ステップ(4)では、レジスタAの値「−2」の絶対値演算の結果「2」がレジスタBにセットされる。ステップ(5)では、レジスタCの値「−5」の絶対値演算の結果「5」がレジスタDにセットされる。ステップ(6)では、レジスタDの値「5」とレジスタBの値「2」を比較する。比較(減算)結果が「5−2=3」で、正なのでフラグN=0、フラグZ=0をセットする。ステップ(7)では、フラグN=0,フラグZ=0なので、ステップ(9)に進む。ステップ(9)ではレジスタPの値「2」と最終データのアドレス{3}を比較する。比較(減算)結果が「2−3=−1」で、負なので、フラグN=1、フラグZ=0をセットする。ステップ(10)では、フラグZ=0なのでステップ(11)に進む。ステップ(11)では、レジスタPの値を1増加した値「3」とする。ステップ(12)ではステップ(3)に戻る。
【0021】
繰返し4回目のステップ(3)では、レジスタAにアドレス{3}内に保持されているデータの値「6」をセットする。ステップ(4)では、レジスタAの値「6」の絶対値演算の結果「6」がレジスタBにセットされる。ステップ(5)では、レジスタCの値「−5」の絶対値演算の結果「5」がレジスタDにセットされる。ステップ6では、レジスタDの値「5」とレジスタBの値「6」を比較する。比較(減算)結果が「5−6=−1」で、負なのでフラグN=1、フラグZ=0をセットする。ステップ(7)では、フラグN=1,フラグZ=0なので、ステップ(8)に進む。ステップ(8)では、レジスタAの値「6」をレジスタCにセットする。ステップ(9)ではレジスタPの値「4」と最終データのアドレス{3}を比較する。比較(減算)結果が「3−3=0」なので、フラグN=0、フラグZ=1をセットする。ステップ(10)では、フラグZ=1なのでステップ(13)に進む。ステップ(13)で処理を終了する。
【0022】
以上の処理を行うことにより、レジスタCに絶対値が最大である値「6」を求めることができる。
【0023】
しかし、このように多くの計算を必要とする処理のために、従来のプロセッサにおいても専用の演算器を用いて高速化を図ってきた。
【0024】
図8は、専用の演算器を備えた従来のプロセッサである。図8の従来のプロセッサも図7のプロセッサと同じく制御部1とデータバス部2とを備えている。制御部1は図7のプロセッサのものと同じ働きをする。データバス部2では、図7のプロセッサのデータバス部2に加えて専用の演算器である2の補数絶対値減算器14を備えている。2の補数絶対値減算器14は、制御信号10により2の補数絶対値減算処理を、レジスタファイル7から出力された値に対して行う。
【0025】
ALU6,レジスタファイル7、データメモリ8も図7のプロセッサと同じ働きをする。フラグ設定部9は図7のプロセッサと同じ働きに加え、2の補数絶対値減算器14の出力の結果をも反映させたフラグ設定を行う。
【0026】
2の補数絶対値減算器14を図9に示す。2の補数絶対値減算器14は、第1の2の補数絶対値演算器50と第2の2の補数絶対値演算器51と減算器22を備える。第1の2補数絶対値演算器50は、反転器52と+1加算器53とセレクタ54とを備える。反転器52は入力されたデータ(入力A(69))のビットを全て反転する。+1加算器53は反転器52から出力された値に1を加算し、入力A(69)に2の補数化を行う手順操作を施し、つまり、ビットを反転して1を加算することにより符号を反転させた符号反転後の値60を出力する。セレクタ54は、入力A(69)の符号が負の場合は符号反転後の値60を選択し、それ以外の場合は入力A(69)を選択して出力する。これにより、入力A(69)が負の値の場合は、絶対値の等しい正の値が、入力A(69)が正の場合は入力A(69)がそのまま第1の2補数絶対値演算器50(セレクタ54)から出力(62)される。以上の処理を絶対値演算処理と呼ぶ。
【0027】
第2の2の補数絶対値演算器51も、第1の2の補数絶対値演算器50と同じく反転器55と+1加算器56とセレクタ57を備える。反転器55は入力されたデータ(入力B(70))のビットを全て反転する。+1加算器56は反転器55から出力された値に1を加算し、入力B(70)に2の補数化を行う操作を施した符号反転後の値61を出力する。セレクタ57では、入力B(70)の符号が負の場合は符号反転後の値61を選択し、それ以外の場合は入力B(70)を選択して出力される。これにより、入力B(70)の符号が負の値の場合は、絶対値の等しい正の値が、入力B(70)の符号が正の場合は入力B(70)がそのまま第2の2補数絶対値演算器51(セレクタ57)から出力(63)される。
【0028】
減算器22では、絶対値演算処理後の値62から、絶対値演算処理後の値63を減じて絶対値比較演算の結果65が出力される。
【0029】
図8のプロセッサも図7のプロセッサと同じく、A,B,C,D,Pの5つのレジスタのビット幅、データメモリ8のビット幅、ALU6の入出力のビット幅はすべて4ビットである。また、2の補数絶対値減算器14の入出力、演算精度のビット幅も4ビットである。
【0030】
図8のプロセッサは、図7のプロセッサと同じ実行命令に加え、2の補数絶対値減算器14で実行される以下の実行命令を備える。
【0031】
「abcmp a,b :レジスタaとレジスタbとの絶対値の比較。結果はレジスタに書き込まれない。(|a|−|b|)」
従来の一般的なプロセッサでの例と同じく、2の補数絶対値減算器14を備えたプロセッサで、図16に示す4つのデータから絶対値が最大のデータを求める手順を、2の補数絶対値減算器14を用いる「abcmp」命令を中心に説明する。
【0032】
2の補数絶対値減算器14を備えた従来のプロセッサでの絶対値が最大の値を求める処理のプログラムを図14に示す。ステップ(1)からステップ(3)、ステップ(7)からステップ(13)までは従来の一般的なプロセッサの場合と同じである。ステップ(14)は、「abcmp」命令を使ってレジスタCの値とレジスタAの値の絶対値を比較するステップである。ステップ(14)では、従来の一般的なプロセッサで行う場合のステップ(4)からステップ(7)までの処理と同じ処理を行う。2の補数絶対値減算器14の入力A(69)にはレジスタCの値、入力B(70)にはレジスタAの値が入力される。
【0033】
なお、データメモリ8に格納されているデータはMSB(4ビットのうちの最上位のビット位置)に符号ビットがある2の補数表現によるものとする。数値の符号はMSBの値が1の場合は負、0の場合は正である。また、数表記として2進数で表す場合はビット列の前に「0b」を付けるものとする。
【0034】
入力A,Bは4ビットなので表現が可能な値の範囲は−8〜7(0b1000〜0b0111)である。
【0035】
ステップ(1)、(2)での動作は、従来の一般的なプロセッサの場合と同じである。
【0036】
繰返し1回目のステップ(3)での動作は、従来の一般的なプロセッサの場合と同じである。
【0037】
ステップ(14)では、2の補数絶対値減算器14を使った演算が行われる。この時の各数値の状態を図17を用いて説明する。
【0038】
レジスタCの値「0(0b0000)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0039】
第1の2の補数絶対値演算器50には、入力A(69)の値「0(0b0000)」が入力される。反転器52でビット反転されて、+1加算器53で1加算されるので、符号反転後の値60は「0(0b0000)」となる。セレクタ54では、入力A(69)の値「0(0b0000)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「0(0b0000)」を出力する。
【0040】
第2の2の補数絶対値演算器51には、入力B(70)の値「3(0b0011)」が入力される。反転器55でビット反転されて、+1加算器56で1加算されるので、符号反転後の値61は「−3(0b1101)」となる。セレクタ57では、入力B(70)の値「3(0b0011)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「3(0b0011)」を出力する。
【0041】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「−3(0b1101)」を出力する。
【0042】
フラグ設定部9では入力された値「−3(0b1101)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0043】
ステップ(9)〜(11)での動作は、従来の一般的なプロセッサの場合と同じである。
【0044】
繰返し2回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0045】
ステップ(14)では、2の補数絶対値減算器14を使った演算が行われる。この時の各数値の状態を図18を用いて説明する。
【0046】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−5(0b1011)」は入力B(70)にそれぞれ入力される。
【0047】
第1の2の補数絶対値演算器50には、入力A(69)の値「3(0b0011)」が入力される。反転器52でビット反転されて、+1加算器53で1加算されるので、符号反転後の値60は「−3(0b1101)」となる。セレクタ54では、入力A(69)の値「3(0b0011)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「3(0b0011)」を出力する。
【0048】
第2の2の補数絶対値演算器51には、入力B(70)の値「−5(0b1011)」が入力される。反転器55でビット反転されて、+1加算器56で1加算されるので、符号反転後の値61は「5(0b0101)」となる。セレクタ57では、入力B(70)の値「−5(0b1011)」の符号を判断して、符号反転後の値61を選択されて絶対値演算処理後の値63として「5(0b0101)」を出力する。
【0049】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「−2(0b1110)」を出力する。
【0050】
フラグ設定部9では入力された値「−2(0b1110)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0051】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0052】
繰返し3回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0053】
ステップ(14)では、2の補数絶対値減算器14を使った演算が行われる。この時の各数値の状態を図19を用いて説明する。
【0054】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「−2(0b1110)」は入力B(70)にそれぞれ入力される。
【0055】
第1の2の補数絶対値演算器50には、入力A(69)の値「−5(0b1011)」が入力される。反転器52でビット反転されて、+1加算器53で1加算されるので、符号反転後の値60は「5(0b0101)」となる。セレクタ54では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「5(0b0101)」を出力する。
【0056】
第2の2の補数絶対値演算器51には、入力B(70)の値「−2(0b1110)」が入力される。反転器55でビット反転されて、+1加算器56で1加算されるので、符号反転後の値61は「2(0b0010)」となる。セレクタ57では、入力B(70)の値「−2(0b1110)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「2(0b0010)」を出力する。
【0057】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「3(0b0011)」を出力する。
【0058】
フラグ設定部9では入力された値「3(0b0011)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=0をセットする。
【0059】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0060】
繰返し4回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0061】
ステップ(14)では、2の補数絶対値減算器14を使った演算が行われる。この時の各数値の状態を図20を用いて説明する。
【0062】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「6(0b0110)」は入力B(70)にそれぞれ入力される。
【0063】
第1の2の補数絶対値演算器50には、入力A(69)の値「−5(0b1011)」が入力される。反転器52でビット反転されて、+1加算器53で1加算されるので、符号反転後の値60は「5(0b0101)」となる。セレクタ54では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「5(0b0101)」を出力する。
【0064】
第2の2の補数絶対値演算器51には、入力B(70)の値「6(0b0110)」が入力される。反転器55でビット反転されて、+1加算器56で1加算されるので、符号反転後の値61は「−6(0b1010)」となる。セレクタ57では、入力B(70)の値「6(0b0110)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「6(0b0110)」を出力する。
【0065】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「−1(0b1111)」を出力する。
【0066】
フラグ設定部9では入力された値「−1(0b1111)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0067】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0068】
以上の処理を行うことにより、レジスタCに絶対値が最大である値「6」を求めることができる。
【0069】
従来のプロセッサでは、このように、2の補数絶対値減算器を用いて、演算処理の高速化を行っている。
【0070】
【発明が解決しようとする課題】
しかし、従来のプロセッサで使用されている2の補数絶対値減算器では、所定のビット幅で表現が可能な最も絶対値が大きい負の値(−8から7までの値が表現が可能な4ビットでは「−8」)が入力されると、不具合を生じる場合がある。この例として、レジスタAに「0(0b0000)」、レジスタCに「−8(0b1000)」がそれぞれセットされている場合に、「abcmp C,A」ステップ(14)が実行される動作を図21を用いて説明する。
【0071】
レジスタCの値「−8(0b1000)」は入力A(69)に、レジスタAの値「0(0b0000)」は入力B(70)にそれぞれ入力される。
【0072】
入力A(69)に「−8(0b1000)」が入力されると、反転器52により全てのビットが反転され「(0b0111)」が反転器52から出力される。この値に+1加算器53で1が加算されると、オーバーフローを起こす。このために、+1加算器53からは、符号反転後の値60として「−8(0b1000)」を出力する。つまり、「−8(0b1000)」の符号を反転させて正の値(絶対値)が求まるべきであるが、オーバーフローのために負の符号のままとなっている。セレクタ54では、入力A(69)の値「−8(0b1000)」の符号を判断して、符号反転後の(符号が正であるべき)値60を選択するが、「−8(0b1000)」が絶対値演算の結果62として出力する。
【0073】
入力B(70)に「0(0b0000)」が入力される。反転器55でビット反転されて、+1加算器56で1加算されるので、符号反転後の値61は「0(0b0000)」となる。セレクタ57では、入力B(70)の値「0(0b0000)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「0(0b0000)」を出力する。
【0074】
2の補数絶対値減算器14では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「−8(0b1000)」を出力する。つまり、|−8|−|0|の結果が負となる。
【0075】
フラグ設定部9では入力された値「−8(0b1000)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0076】
ステップ(7)では、Nフラグレジスタ=1,Zフラグレジスタ=0なので、ステップ(8)に進み、ステップ(8)では、レジスタAの値「0(0b0000)」がレジスタCにセットされる。
【0077】
「−8(0b1000)」と「0(0b0000)」では、「−8(0b1000)」の方が絶対値がはるかに大きく、本来ならばレジスタCに「−8(0b1000)」がセットされなければならないが、従来のプロセッサではオーバーフローの発生のために間違った値が求まってしまう。
【0078】
このため、2の補数絶対値減算器14の入力に、ビット表現が可能な範囲で絶対値が最大である負の値が入力されないようにする必要がある。この制限をハードウェアで行う場合は、新たな回路を追加しなければならないので回路の増加、引いては回路基板の面積の拡大を招く。また、上記の制限をソフトウェアで行う場合は、ステップ数が増加するため演算処理が遅くなる。
【0079】
さらに、2の補数絶対値減算器14を備えた従来のプロセッサでは、絶対値が同じ値があった場合、符号の正負に関わらず先に出現した値が、絶対値が最大の値としてレジスタCに残る。このため、データ群から絶対値が最大の数値を求める処理を行った結果、符号が負の値(例えば−4)が求まった場合に、求まった値と絶対値が同じで符号が正の値(例えば4)がデータ群のなかに存在したか否かは不明である。
【0080】
ここで、2の補数で表現された複数のデータ(数値)を、一定のビット幅で表現される値に対応させる場合を考える。このとき、複数のデータを最小のビット幅で無駄なく表現したい。そのためには、絶対値が最大となるデータAをデータ群から求め、−A〜Aの範囲にある0を含む2A+1個の値を表現するために最低限必要なビット幅を用意すればよい。
【0081】
従来のプロセッサで、絶対値が最大であるデータを求める処理を行った結果、レジスタCに「−4(0b1100)」が絶対値が最大のデータとして求まったとする。しかし、従来のプロセッサでは、調べたデータ群の中に「4(0b0100)」が存在したか否かは不明である。このため、表現する必要があるデータ範囲を、「−4」から「4」の範囲と考えなければならない。この場合「−4」から「4」を表現するためには0を含む9個の値が必要であり、必要なビット幅は4ビット(0000〜1000)となる。しかし、ここで仮に、絶対値が最大の値は「−4」であるが、データ群のなかに絶対値が同じ「4」は存在しないことが明確であれば、表現する必要があるデータ範囲を、「−4」から「3」とすることができる。この場合には、「−4」から「3」を表現するためには8個の値が必要であり、必要なビット幅は3ビット(000〜111)となる。このように、従来のプロセッサでは上記の処理を行った場合は、必要以上に無駄なビットを割り当ててしまう場合があった。
【0082】
また、従来の2の補数絶対値減算器14では、+1加算器が2つあるので+1加算に要する演算時間のために2の補数絶対値減算器14全体としての演算時間が長くなっている。さらに、+1加算器の2つ分のスペースのために、2の補数絶対値減算器14の大きさも大きくなっている。
【0083】
本発明は、このような実情に鑑みてなされたものであり、従来の技術では正しく扱うことができなかった所定のビット幅で表現が可能な範囲において絶対値が最大の負の値を正しく扱うことができ、複数のデータを一定のビット幅で表す値に対応させる場合に、より無駄のないビット幅を決定することができる演算方法および演算器およびプロセッサを提供することを目的とする。
【0084】
【課題を解決するための手段】
本発明の演算器は、2の補数表現による第1の値と2の補数表現による第2の値とを受け取り、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す情報を出力する演算器であって、前記第1の値の符号が負である場合には前記第1の値を1の補数表現に変換して出力し、符号が正である場合には前記第1の値をそのまま出力する第1の1の補数絶対値演算手段と、前記第2の値の符号が負である場合には前記第2の値を1の補数表現に変換して出力し、符号が正である場合には前記第2の値をそのまま出力する第2の1の補数絶対値演算手段と、前記第1の1の補数絶対値演算手段および前記第2の1の補数絶対値演算手段から出力された前記第1の値と前記第2の値とに基づいて、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す指示情報を出力する指示情報出力手段とを備ており、このことにより上述の目的が達成される。
【0085】
前記指示情報に基づいて前記第1の値の絶対値と前記第2の値の絶対値とのうちの絶対値が大きい方の値を出力する選択手段を備えてもよい。
【0086】
前記選択手段は、前記第1の値の絶対値と前記第2の値の絶対値とが等しく、前記第1の値の符号と前記第2の値の符号とが異なる場合には、前記第1の値と前記第2の値のうちの符号が正である方の値を選択して出力してもよい。
【0087】
前記指示情報出力手段は、前記第1の1の補数絶対値演算手段より出力された前記第1の値から前記第2の1の補数絶対値演算手段より出力された前記第2の値を減じて出力してもよい。
【0088】
前記第2の1の補数絶対値演算手段が、前記第2の値の符号が負である場合には前記第2の値が1の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第2の値そのままの値の各ビットを反転させて出力する反転手段を備え、前記指示情報出力手段は、前記第1の1の補数絶対値演算手段から出力された前記第1の値と前記第2の1の補数絶対値演算手段から出力された前記第2の値との和を求め、この和に更に1を加えて出力してもよい。
【0089】
前記指示情報出力手段からの出力が0であるか否かを判断するゼロ値判断手段を備え、前記選択手段は、前記指示情報出力手段からの出力が負であるか、または、前記指示情報出力手段からの出力が0でありかつ前記第2の値の符号が負である場合に前記第2の値を選択して出力し、それ以外の場合に前記第1の値を選択して出力してもよい。
【0090】
本発明の演算方法は、2の補数表現による第1の値の絶対値と2の補数表現による第2の値の絶対値とのどちらが大きいかを表す情報を求める演算方法であって、前記第1の値の符号が負である場合には前記第1の値を1の補数表現に変換し、符号が正である場合には前記第1の値をそのままにしておく第1の1の補数絶対値演算処理工程と、前記第2の値の符号が負である場合には前記第2の値を1の補数表現に変換し、符号が正である場合には前記第2の値をそのままにしておく第2の1の補数絶対値演算処理工程と、前記第1の1の補数絶対値演算処理工程および前記第2の1の補数絶対値演算処理工程において処理された前記第1の値と前記第2の値とに基づいて、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す指示情報を求める指示情報処理工程とを包含しており、これにより上述の目的が達成される。
【0091】
前記指示情報に基づいて、前記第1の値と前記第2の値のうちの絶対値が大きい方の値を選択する選択処理工程を包含してもよい。
【0092】
前記選択処理工程において、前記第1の値の絶対値と前記第2の値の絶対値とが等しく、前記第1の値の符号と前記第2の値の符号とが異なる場合には、前記第1の値と前記第2の値のうちの符号が正である方の値を絶対値が大きい値として選択してもよい。
【0093】
前記指示情報処理工程において、前記第1の1の補数絶対値演算処理工程で処理された前記第1の値から前記第2の1の補数絶対値演算処理工程で処理された前記第2の値を減じてもよい。
【0094】
前記の2の補数絶対値演算処理工程において、前記第2の値の符号が負である場合には前記第2の値が1の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第2の値そのままの値の各ビットを反転させ、前記指示情報処理工程において、前記第1の1の補数絶対値演算処理工程で処理された前記第1の値と前記第2の1の補数絶対値演算処理工程で処理された前記第2の値との和を求め、この和に更に1を加えてもよい。
【0095】
前記指示情報処理工程による処理結果が0であるか否かを判断するゼロ値判断処理工程を含み、前記選択処理工程において、前記指示情報処理工程の処理結果が負であるか、または、前記指示情報処理工程の処理結果が0でありかつ前記第2の値の符号が負である場合に前記第2の値を絶対値が大きい値として選択し、それ以外の場合に前記第1の値を絶対値が大きい値として選択してもよい。
【0096】
本発明のプロセッサは、実行命令を記憶する実行命令記憶手段と、実行命令記憶手段から読み出した前記実行命令をデコードした制御信号を出力するデコード手段と、前記制御信号に基づいて演算を行う演算器と、を備えるプロセッサであって、前記演算装器は、入力された2の補数表現による第1の値と、入力された2の補数表現による第2の値と、を前記制御信号に基づいて、前記第1の値の符号もしくは前記第2の値の符号が負である場合には符号が負である値を1の補数表現に変換し、前記第2の値の符号もしくは前記第2の値の符号が正である場合には符号が正である値をそのままにする変換処理を行い、前記変換処理後の第1の値と前記変換処理後の第2の値との大小を比較して、大小の違いがある場合には大きい方の前記変換処理を行う前の前記第1の値もしくは前記第2の値を出力し、大小の違いがなく前記変換処理を行う前の前記第1の値と前記第2の値の符号が異なる場合には、前記変換処理を行う前の前記第1の値もしくは前記第2の値のうち符号が正の方の値を出力し、これにより上述の目的が達成される。
【0097】
【発明の実施の形態】
以下、本発明の好ましい実施形態を図面を用いて説明する。なお、実施の形態の説明における数表記として、2進数で表す場合はビット列の前に「0b」を付けるものとし、そのビット列が値を示す場合には、「0b]の前にその値を示すものとする。また、値の符号はMSBの値(最上位のビット)が1の場合は負であり、0の場合は正である。例えば、10進数での「5」を4ビットの2の補数の2進数表記で表すと「5(0b0101)」であり、1の補数の2進数表記で表しても「5(0b0101)」である。また、10進数での「−5」を4ビットの2の補数の2進数表記で表すと「−5(0b1011)」であり、1の補数の2進数表記で表すと「−5(0b1010)」である。
【0098】
(第1の実施の形態)
第1の実施の形態は、本発明に関わる演算器および演算方法およびプロセッサにおける技術をプロセッサに適用したものである。図1に示すように、プロセッサは、プロセッサの制御を行う制御部1と演算を行うデータバス部2とを備えるものである。
【0099】
制御部1は、プログラムカウンタ3、実行命令メモリ4、デコーダ5により構成される。プログラムカウンタ3、実行命令メモリ4、デコーダ5は、図8に示す従来のプロセッサと同じ構成なので説明を省略する。
【0100】
データバス部2は、ALU6、演算器としての1の補数絶対値減算器13、レジスタファイル7、データメモリ8、フラグ設定部9により、構成される。ALU6、レジスタファイル7、データメモリ8は、図8に示した従来のプロセッサと同じ構成なので、説明を省略する。フラグ設定部9は、図8に示した従来のプロセッサと同じくNフラグレジスタとZフラグレジスタを備え、フラグ設定の条件にはALU6の演算結果と共に1の補数絶対値減算器13からの出力の結果も反映される。
【0101】
1の補数絶対値減算器13は、制御信号10により指定されるレジスタファイル7内の2つのレジスタのそれぞれが保持する2つの値について1の補数表現を用いた絶対値の比較演算を行い、その比較結果を2つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【0102】
図2に示す1の補数絶対値減算器13は、本発明に係る演算器である。図2に示すように、1の補数絶対値減算器13は、第1の1の補数絶対値演算手段としての第1の1の補数絶対値演算器20と、第2の1の補数絶対値演算手段としての第2の1の補数絶対値演算器21と、指示情報出力手段としての減算器22を備える。
【0103】
第1の1の補数絶対値演算器20は、入力A(69)に対して1の補数表現化の手順操作を用いた絶対値演算処理を行い絶対値演算処理後の値62を出力する。第2の1の補数絶対値演算器21は、入力B(70)に対して1の補数表現化の手順操作を用いた絶対値演算処理を行い絶対値演算処理後の値63を出力する。つまり、第1の1の補数絶対値演算器20および第2の1の補数絶対値演算器21は、入力された値の符号が負の場合に、従来の2の補数表現化の手順操作に換えて1の補数表現化の手順操作により、入力された値の符号を反転させて出力する。減算器22は、絶対値演算処理後の値62から絶対値演算処理後の値63を減算し、絶対値比較演算の結果(指示情報)65を出力する。
【0104】
第1の1の補数絶対値演算器20は、反転器23とセレクタ24を備える。反転器23は、入力されたビットを全て反転(1の補数表現化手順操作)して符号反転後の値60を出力する。セレクタ24は、入力A(69)の符号が負の場合は符号反転後の値60を選択し、それ以外の場合は入力A(69)を選択して、絶対値演算処理後の値62として出力する。
【0105】
第2の1の補数絶対値演算器21は、反転器25とセレクタ26を備える。反転器25は、入力されたビットを全て反転(1の補数表現化手順操作)して符号反転後の値60を出力する。セレクタ26では、入力B(70)の符号が負の場合は符号反転後の値61を選択し、それ以外の場合は入力B(70)を選択して、絶対値演算処理後の値63として出力する。
【0106】
図1のプロセッサも図8のプロセッサと同じく、A,B,C,D,Pの5つのレジスタのビット幅、データメモリ8のビット幅、ALU6の入出力のビット幅はすべて4ビットとする。また、1の補数絶対値減算器13の入出力、演算精度のビット幅も4ビットとする。
【0107】
第1の実施の形態のプロセッサは、図8の従来のプロセッサと同じ実行命令を備える。ただし、「abcmp」命令による処理を実行する演算器は図2に示す1の補数絶対値減算器13である。よって、「abcmp」命令では、1の補数表現化された数値による絶対値の比較が行われる。図14に示す、第1の実施の形態のプロセッサで行われる演算処理を「abcmp」命令を使用せず、「abcmp」命令を複数のステップを用いて詳細に表現すると、図51に示すプログラムのようになる。このプログラムにおいて、「abs1 a,b」命令は、レジスタbの値を1の補数表現化による絶対値にしてレジスタaにセットする命令であり、「jmp(be) label」命令は、Nフラグが0の場合にlabelにジャンプする命令である。また、ステップ(16)、ステップ(17)、ステップ(6)の3ステップが「abcmp」命令に相当する。
【0108】
次に、第1の実施の形態によるプロセッサの動作を説明する。
【0109】
(動作例1)
第1の実施の形態のプロセッサで、図16に示す4つのデータの中から絶対値が最大であるデータを求める動作を、1の補数絶対値減算器13を使用する「abcmp」命令を中心に説明する。
【0110】
第1の実施の形態のプロセッサで絶対値が最大であるデータを求める処理のプログラムは、図8に示した従来のプロセッサと同じ図14のプログラムである。
【0111】
ステップ(1)、(2)での動作は、従来の一般的なプロセッサの場合と同じである。
【0112】
繰返し1回目のステップ(3)での動作は、従来の一般的なプロセッサの場合と同じである。
【0113】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図22を用いて説明する。
【0114】
レジスタCの値「0(0b0000)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0115】
第1の1の補数絶対値演算器20には、入力A(69)の値「0(0b0000)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1111)」となる。セレクタ24では、入力A(69)の値「0(0b0000)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0000)」を出力する。
【0116】
第2の1の補数絶対値演算器21には、入力B(70)の値「3(0b0011)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b1100)」となる。セレクタ26では、入力B(70)の値「3(0b0011)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0011)」を出力する。
【0117】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果(指示情報)65として「(0b1101)」を出力する。
【0118】
フラグ設定部9では入力された値「(0b1101)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0119】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0120】
繰返し2回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0121】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図23を用いて説明する。
【0122】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−5(0b1011)」は入力B(70)にそれぞれ入力される。
【0123】
第1の1の補数絶対値演算器20には、入力A(69)の値「3(0b0011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1100)」となる。セレクタ24では、入力A(69)の値「3(0b0011)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0011)」を出力する。
【0124】
第2の1の補数絶対値演算器21には、入力B(70)の値「−5(0b1011)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0100)」となる。セレクタ26では、入力B(70)の値「−5(0b1011)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0100)」を出力する。
【0125】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「(0b1111)」を出力する。
【0126】
フラグ設定部9では入力された値「(0b1111)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0127】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し3回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0128】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図24を用いて説明する。
【0129】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「−2(0b1110)」は入力B(70)にそれぞれ入力される。
【0130】
第1の1の補数絶対値演算器20には、入力A(69)の値「−5(0b1011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0100)」となる。セレクタ24では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「(0b0100)」を出力する。
【0131】
第2の1の補数絶対値演算器21には、入力B(70)の値「−2(0b1110)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0001)」となる。セレクタ26では、入力B(70)の値「−2(0b1110)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0001)」を出力する。
【0132】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「(0b0011)」を出力する。
【0133】
フラグ設定部9では入力された値「(0b0011)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=0をセットする。
【0134】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し4回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0135】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図25を用いて説明する。
【0136】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「6(0b0110)」は入力B(70)にそれぞれ入力される。
【0137】
第1の1の補数絶対値演算器20には、入力A(69)の値「−5(0b1011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0100)」となる。セレクタ24では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「(0b0100)」を出力する。
【0138】
第2の1の補数絶対値演算器21には、入力B(70)の値「6(0b0110)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b1001)」となる。セレクタ26では、入力B(70)の値「6(0b0110)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0110)」を出力する。
【0139】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「(0b1110)」を出力する。
【0140】
フラグ設定部9では入力された値「(0b1110)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0141】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0142】
以上の処理を行うことにより、レジスタCに絶対値が最大である値「6」を求めることができる。このように、従来技術において符号の反転処理に用いていた2の補数表現化手順操作に換えて1の補数表現化手順操作を用いることによっても絶対値が最大の値を求めることができる。
【0143】
(動作例2)
第1の施例の形態のプロセッサで、レジスタAに「0(0b0000)」、レジスタCに4ビットの2の補数表現で表現が可能な負の値で絶対値が最大である「−8(0b1000)」がセットされている場合に、「abcmp C,A」ステップ(14)が実行される場合を図26を用いて説明する。レジスタAに「0(0b0000)」、レジスタCに「−8(0b1000)」というデータの設定は、前述の従来のプロセッサではオーバーフローが発生して正しい演算を行うことが不可能なデータケースである。
【0144】
レジスタCの値「−8(0b1000)」は入力A(69)に、レジスタAの値「0(0b0000)」は入力B(70)にそれぞれ入力される。
【0145】
第1の1の補数絶対値演算器20には、入力A(69)の値「−8(0b1000)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0111)」となる。セレクタ24では、入力A(69)の値「−8(0b1000)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62して「(0b0111)」を出力する。このように、従来のプロセッサと異なりオーバーフローが発生せず、正常に符号が反転される。
【0146】
第2の1の補数絶対値演算器21には、入力B(70)の値「0(0b0000)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b1111)」となる。セレクタ26では、入力B(70)の値「0(0b0000)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0000)」を出力する。
【0147】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「(0b0111)」を出力する。すなわち、|−8|−|0|の減算結果が正となり、|−8|と|0|との大小比較が正しく行われる。
【0148】
フラグ設定部9では入力された値「(0b0111)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=0をセットする。
【0149】
ステップ(7)では、Nフラグレジスタ=0,Zフラグレジスタ=0なので、ステップ(9)に進み、レジスタAの値はレジスタCにセットされない。
【0150】
このように第1の実施の形態のプロセッサにおいては「−8(0b1000)」と「0(0b0000)」との絶対値の大小比較において、絶対値が大きい「−8(0b1000)」を正しく出力することができる。
【0151】
(動作例3)
第1の実施の形態のプロセッサで、レジスタAに「−4(0b1100)」、レジスタCに「3(0b0011)」がセットされている場合に、ステップ(14)「abcmp C,A」が実行される場合を説明する。
【0152】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−4(0b1100)」は入力B(70)にそれぞれ入力される。
【0153】
第1の1の補数絶対値演算器20には、入力A(69)の値「3(0b0011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1100)」となる。セレクタ24では、入力A(69)の値「3(0b0011)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0011)」を出力する。
【0154】
第2の1の補数絶対値演算器21には、入力B(70)の値「−4(0b1100)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0011)」となる。セレクタ26では、入力B(70)の値「−4(0b1100)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0011)」を出力する。
【0155】
減算器22では、絶対値演算処理後の値62から絶対値演算処理後の値63を減算するので、絶対値比較演算の結果65として「(0b0000)」を出力する。
【0156】
フラグ設定部9では入力された値「(0b0000)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=1をセットする。
【0157】
ステップ(7)では、Nフラグレジスタ=0,Zフラグレジスタ=1なので、ステップ(9)に進み、レジスタAの値「−4(0b1100)」はレジスタCにセットされず、レジスタCの値は絶対値が小さい「3(0b0011)」のままとなる。
【0158】
このように第1の実施の形態のプロセッサでは、ステップ(14)「abcmp C,A」が実行される場合に、レジスタAの値が負の値(例えば−4)で、レジスタBの値がレジスタAの値の絶対値の1小さい数の正の値(例えば3)の場合、減算結果が0となり正しく絶対値の大小判定が行われない。そのため、本来求めるべき絶対値が最大の値と比べ1小さい値が、最大値として求められる場合があり得る。しかし、音声データは通常16ビット幅で扱われ、16ビットで表現しうる値の範囲は−32768〜32767である。そのため、たとえ求まる絶対値が最大の値が1違う場合にも、16ビットのフルレンジから見ると誤差は0.003%程度であり、無視することができる誤差である。
【0159】
以上の動作例に示したように第1の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、2の補数表現で表現が可能な負の値で絶対値が最大である値が入力されても正しく演算することができる。また、1の補数絶対値減算器13には、+1加算器が使用されていないので、1の補数絶対値減算器13の小型化、引いてはプロセッサの小型化を図ることができる。さらに、従来は1度の絶対値比較演算処理において2度行われていた+1加算の処理を行わないので、複数のデータから絶対値が最大となる値を求めるための時間を短縮することができる。
【0160】
(第2の実施の形態)
第2の実施の形態のプロセッサは、第1の実施の形態のプロセッサに用いた1の補数絶対値減算器13の構成を、図2に示すものに変えて、図3に示すような構成としたものである。プロセッサの他の部分の構成については図1に示す第1の実施の形態の構成と同じである。
【0161】
図3に示す1の補数絶対値減算器13は、本発明に係る演算器である。図3に示す1の補数絶対値減算器13は、1の補数絶対値演算手段としての第1の1の補数絶対値演算器20と、第2の1の補数絶対値演算手段および反転手段としての1の補数絶対値反転演算器27と、指示情報出力手段としての加算器28を備える。
【0162】
1の補数絶対値減算器13は、制御信号10により指定されるレジスタファイル7内の2つのレジスタのそれぞれが保持する2つの値について1の補数表現を用いた絶対値の比較演算を行い、その比較結果を2つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【0163】
第1の1の補数絶対値演算器20は、第1の実施の形態の第1の1の補数絶対値演算器20と同じ構成である。1の補数絶対値反転演算器27は、入力B(70)の符号が負の場合には入力B(70)に対して1の補数表現化の手順操作を施す。さらに、入力B(70)もしくは入力B(70)を1の補数表現化したものの全てのビットを反転して絶対値反転処理後の値64として出力する。
【0164】
1の補数絶対値反転演算器27は、反転器29、反転器31とセレクタ30を備える。反転器29は、入力された全てのビットを反転して、符号反転後の値61を出力する。セレクタ30は、入力B(70)の符号が負の場合は、符号反転後の値61を選択し、それ以外の場合は入力B(70)を選択して、絶対値演算処理後の値63を出力する。反転器31は、絶対値演算処理後の値63の全てのビットを反転して、絶対値反転処理後の値64を出力する。
【0165】
加算器28は、絶対値演算処理後の値62から絶対値反転処理後の値64に「1」を加算して、絶対値比較演算の結果(指示情報)65を出力する。
【0166】
つまり、第2の実施の形態のプロセッサでは、第1の実施の形態のプロセッサのように2つの値の絶対値の減算処理により絶対値の大小比較を行うのではなく、減算値の全てのビットを反転したものを被減算値に加え、これにさらに「1」を加えるという加算処理によって絶対値の大小比較を実現している。
【0167】
第2の実施の形態のプロセッサは、図1に示す第1の実施の形態のプロセッサと同じ実行命令を備える。ただし、「abcmp」命令による処理を実行する演算器は図3に示す1の補数絶対値減算器13である
次に、第2の実施の形態によるプロセッサの動作を説明する。
【0168】
(動作例1)
第2の実施の形態のプロセッサで、図16に示す4つのデータから絶対値が最大であるデータを求める動作を、図3に示す1の補数絶対値減算器13で実行される「abcmp」命令を中心に説明する。
【0169】
第2の実施の形態のプロセッサでの絶対値が最大のデータを求める処理のプログラムは、第1の実施の形態に示したプロセッサと同じく図8に示すプログラムである。
【0170】
ステップ(1)、(2)での動作は、従来の一般的なプロセッサの場合と同じである。
【0171】
繰返し1回目のステップ(3)での動作は、従来の一般的なプロセッサの場合と同じである。
【0172】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図28を用いて説明する。
【0173】
レジスタCの値「0(0b0000)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0174】
第1の1の補数絶対値演算器20には、入力A(69)の値「0(0b0000)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1111)」となる。セレクタ24では、入力A(69)の値「0(0b0000)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0000)」を出力する。
【0175】
1の補数絶対値反転演算器27には、入力B(70)の値「3(0b0011)」が入力される。反転器29で全てのビットが反転されるので、符号反転後の値61は「(0b1100)」となる。セレクタ26では、入力B(70)の値「3(0b0011)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0011)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1100)」を出力する。
【0176】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b1101)」を出力する。
【0177】
フラグ設定部9では入力された値「(0b1101)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0178】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0179】
繰返し2回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0180】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図29を用いて説明する。
【0181】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−5(0b1011)」は入力B(70)にそれぞれ入力される。
【0182】
第1の1の補数絶対値演算器20には、入力A(69)の値「3(0b0011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1100)」となる。セレクタ24では、入力A(69)の値「3(0b0011)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0011)」を出力する。
【0183】
1の補数絶対値反転演算器27には、入力B(70)の値「−5(0b1011)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0100)」となる。セレクタ26では、入力B(70)の値「−5(0b1011)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0100)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1011)」を出力する。
【0184】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b1111)」を出力する。
【0185】
フラグ設定部9では入力された値「(0b1110)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0186】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し3回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0187】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図30を用いて説明する。
【0188】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「−2(0b1110)」は入力B(70)にそれぞれ入力される。
【0189】
第1の1の補数絶対値演算器20には、入力A(69)の値「−5(0b1011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0100)」となる。セレクタ24では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「(0b0100)」を出力する。
【0190】
1の補数絶対値反転演算器27には、入力B(70)の値「−2(0b1110)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0001)」となる。セレクタ26では、入力B(70)の値「−2(0b1110)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0001)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1110)」を出力する。
【0191】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b0011)」を出力する。
【0192】
フラグ設定部9では入力された値「(0b0011)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=0をセットする。
【0193】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し4回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0194】
ステップ(14)では、1の補数絶対値減算器13を使った演算が行われる。この時の動作を図31を用いて説明する。
【0195】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「6(0b0110)」は入力B(70)にそれぞれ入力される。
【0196】
第1の1の補数絶対値演算器20には、入力A(69)の値「−5(0b1011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0100)」となる。セレクタ24では、入力A(69)の値「−5(0b1011)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62として「(0b0100)」を出力する。
【0197】
1の補数絶対値反転演算器27には、入力B(70)の値「6(0b0110)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b1001)」となる。セレクタ26では、入力B(70)の値「6(0b0110)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0110)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1001)」を出力する。
【0198】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b1110)」を出力する。
【0199】
フラグ設定部9では入力された値「(0b1110)」を判断して、Nフラグレジスタ=1、Zフラグレジスタ=0をセットする。
【0200】
ステップ(7)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0201】
以上の処理を行うことにより、減算処理に換えて加算処理によってレジスタCに絶対値が最大である値「6」を求めることができる。
【0202】
(動作例2)
第2の実施の形態のプロセッサで、レジスタAに「0(0b0000)」、レジスタCに4ビットの2の補数表現で表現が可能な範囲で絶対値が最大の負の値「−8(0b1000)」がセットされている場合に、「abcmp C,A」ステップ(14)が実行される場合を図32を用いて説明する。レジスタAに「0(0b0000)」、レジスタCに「−8(0b1000)」というデータの設定は、前述の従来のプロセッサではオーバーフローを起こして正しい演算を行うことが不可能なデータケースである。
【0203】
レジスタCの値「−8(0b1000)」は入力A(69)に、レジスタAの値「0(0b0000)」は入力B(70)にそれぞれ入力される。
【0204】
第1の1の補数絶対値演算器20には、入力A(69)の値「−8(0b1000)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b0111)」となる。セレクタ24では、入力A(69)の値「−8(0b1000)」の符号を判断して、符号反転後の値60を選択して絶対値演算処理後の値62して「(0b0111)」を出力する。オーバーフロを起こさず正常に符号が反転されている。
【0205】
1の補数絶対値反転演算器27には、入力B(70)の値「0(0b0000)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b1111)」となる。セレクタ26では、入力B(70)の値「0(0b0000)」の符号を判断して、入力B(70)を選択して絶対値演算処理後の値63として「(0b0000)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1111)」を出力する。
【0206】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b0111)」を出力する。つまり、|−8|−|0|の演算結果が正となり、絶対値の比較が正常に行われる。
【0207】
フラグ設定部9では入力された値「(0b0111)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=0をセットする。
【0208】
ステップ(7)では、Nフラグレジスタ=0,Zフラグレジスタ=0なので、ステップ(9)に進み、レジスタAの値はレジスタCにセットされない。
【0209】
このように第2の実施の形態のプロセッサにおいては「−8(0b1000)」と「0(0b0000)」では、絶対値が大きい「−8(0b1000)」を絶対値の最大値として出力することができる。
【0210】
(動作例3)
第2の実施の形態のプロセッサで、レジスタAに「−4(0b1100)」、レジスタCに「3(0b0011)」がセットされている場合に、ステップ(14)「abcmp C,A」が実行される場合を図33を用いて説明する。
【0211】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−4(0b1100)」は入力B(70)にそれぞれ入力される。
【0212】
第1の1の補数絶対値演算器20には、入力A(69)の値「3(0b0011)」が入力される。反転器23で全てのビットが反転されるので、符号反転後の値60は「(0b1100)」となる。セレクタ24では、入力A(69)の値「3(0b0011)」の符号を判断して、入力A(69)を選択して絶対値演算処理後の値62として「(0b0011)」を出力する。
【0213】
1の補数絶対値反転演算器27には、入力B(70)の値「−4(0b1100)」が入力される。反転器25で全てのビットが反転されるので、符号反転後の値61は「(0b0011)」となる。セレクタ26では、入力B(70)の値「−4(0b1100)」の符号を判断して、符号反転後の値61を選択して絶対値演算処理後の値63として「(0b0011)」を出力する。反転器31では、絶対値演算処理後の値63をビット反転し、絶対値反転処理後の値64として「(0b1100)」を出力する。
【0214】
加算器28では、絶対値演算処理後の値62と絶対値反転処理後の値64と「1」を加算するので、絶対値比較演算の結果65として「(0b0000)」を出力する。
【0215】
フラグ設定部9では入力された値「(0b0000)」を判断して、Nフラグレジスタ=0、Zフラグレジスタ=1をセットする。
【0216】
ステップ(7)では、Nフラグレジスタ=0,Zフラグレジスタ=1なので、ステップ(9)に進み、レジスタAの値「−4(0b1100)」はレジスタCにセットされず、レジスタCの値は絶対値が小さい「3(0b0011)」のままとなる。
【0217】
このように第2の実施の形態のプロセッサでは、ステップ(14)「abcmp C,A」が実行される場合に、レジスタAの値が負(例えば−4)で、レジスタBの値がレジスタAの値の絶対値より1小さい数の正の値(例えば3)の場合に、正しく絶対値の大小比較が行われない。そのため、本来選ばれるべき絶対値が最大の値に比べ1小さい値が最大の絶対値をもつ値として求められる場合がある。しかし、音声データは通常16ビットで扱われ、2の補数表現で表現できる範囲は−32768〜32767である。そのため、たとえ絶対値が1違っていたとしても16ビットのフルレンジから見ると誤差は0.003%程度であり、無視することができる誤差である。
【0218】
以上の動作例に示したように第2の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、所定のビットの2の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、1の補数絶対値減算器13には、使用されている+1加算機は1つなので、1の補数絶対値減算器13の小型化、引いてはプロセッサの小型化を図ることができる。さらに、従来は1組の絶対値比較演算処理において2度行われていた+1加算の処理が1度で済むので、複数のデータから絶対値が最大となる値を求めるための時間を短縮することができる。
【0219】
(第3の実施の形態)
第3の実施の形態は、本発明に関わる演算器および演算方法およびプロセッサにおける技術をプロセッサに適用したものであり、絶対値の大小比較および大小比較に基づく入力値の2者択一までの処理をハード化すると共に、これを実行する実行命令を備えている。
【0220】
図4は、第3の実施の形態のプロセッサを示す。図4に示すプロセッサは、プロセッサの制御を行う制御部1と演算を行うデータバス部2とを備えるものである。
【0221】
制御部1は、プログラムカウンタ3、実行命令メモリ4、デコーダ5により構成される。プログラムカウンタ3、実行命令メモリ4、デコーダ5は、図7に示した従来のプロセッサと同じ構成なので、説明を省略する。
【0222】
データバス部2は、ALU6、絶対値最大値演算器15、レジスタファイル7、データメモリ8、フラグ設定部9により構成される。ALU6、レジスタファイル7、データメモリ8、フラグ設定部9は、図7に示した従来の一般的なプロセッサと同じ構成なので、説明を省略する。
【0223】
本発明に係る演算器である絶対値最大値演算器15は、制御信号10により指定されたレジスタファイル7内の2つのレジスタに格納された値を入力とする。この2つの値について1の補数表現を用いて絶対値の比較演算を行うことにより、2つの値の絶対値のうちのどちらが大きいかを表す指示情報を求める。さらに、この指示情報に基づいて、2の値のうちの絶対値が大きい方の値を出力する。出力された値は、制御信号10により指定されたレジスタファイル7内のレジスタに書き込まれる。
【0224】
図5は、上記の絶対値最大値演算器15の構成を示した図である。図5に示すように、絶対値最大値演算器15は、第1の入力もしくは第1の入力を1の補数表現化した絶対値から第2の入力もしくは第2の入力を1の補数表現化した絶対値を減算する、第1の1の補数絶対値演算手段、第2の1の補数絶対値演算手段および指示情報出力手段としての1の補数絶対値減算器32と、選択手段としてのセレクタ33を備える。1の補数絶対値減算器32は、入力A(69)の値もしくは入力A(69)を1の補数表現化した絶対値から、入力B(70)の値もしくは入力B(70)を1の補数表現化した絶対値を減算し、その減算結果を絶対値比較演算の結果(指示情報)65として出力する。1の補数絶対値減算器32の構成は、第1の実施の形態または第2の実施の形態における1の補数絶対値減算器13と同じ構成なので説明を省略する。セレクタ33では、絶対値比較演算の結果65の符号が負の場合は、入力B(70)を選択し、負以外の場合は入力A(69)を選択して、選択した値を最大絶対値選択演算の結果68として出力する。
【0225】
図4のプロセッサも図7の従来の一般的なプロセッサと同じく、A,B,C,D,Pの5つのレジスタのビット幅、データメモリ8のビット幅、ALU6の入出力のビット幅はすべて4ビットとする。また、絶対値最大値演算器15の入出力、演算精度のビット幅も4ビットとする。
【0226】
第3の実施の形態のプロセッサは、図7のプロセッサと同じ実行命令に加え、絶対値最大値演算器15で実行される以下の実行命令を備える。
【0227】
「abmax a,b :レジスタaとレジスタbとのそれぞれに保持されている値の絶対値を比較し、絶対値が大きい方の値をレジスタaにセット」
次に、第3の実施の形態によるプロセッサの動作を説明する。
【0228】
(動作例1)
第3の実施の形態のプロセッサで、図16に示す4つのデータの中から絶対値が最大であるデータを求める動作を、絶対値最大値演算器15で処理が実行される「abmax」命令を中心に説明する。
【0229】
絶対値最大値演算器15を備えたプロセッサで絶対値が最大の値を求めるためのプログラムを図15に示す。ステップ(1)からステップ(3)、ステップ(9)からステップ(13)までは従来の一般的なプロセッサの場合と同じである。ステップ(15)は、「abmax」命令を使ってレジスタCの値とレジスタAの値の絶対値を比較し、絶対値が大きい方の値をレジスタCにセットするステップである。ステップ(15)では、従来の一般的なプロセッサで行う場合のステップ(4)からステップ(8)までの処理と同等の処理を行う。絶対値最大値演算器15の入力A(69)にはレジスタCの値、入力B(70)にはレジスタAの値が入力される。
【0230】
ステップ(1)、(2)での動作は、従来の一般的なプロセッサの場合と同じである。
【0231】
繰返し1回目のステップ(3)での動作は、従来の一般的なプロセッサの場合と同じである。
【0232】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図34を用いて説明する。
【0233】
レジスタCの値「0(0b0000)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0234】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1101)」となる。絶対値比較演算の結果65の符号は負なので、セレクタ33では入力B(70)を選択し、最大絶対値選択演算の結果68として「3(0b0011)」を出力する。そして、レジスタCには「3(0b011)」をセットする。
【0235】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0236】
繰返し2回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0237】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図35を用いて説明する。
【0238】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−5(0b1011)」は入力B(70)にそれぞれ入力される。
【0239】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1111)」となる。絶対値比較演算の結果65の符号は負なので、セレクタ33では入力B(70)を選択し、最大絶対値選択演算の結果68として「−5(0b1011)」を出力する。そして、レジスタCには「−5(0b1011)」をセットする。
【0240】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し3回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0241】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図36を用いて説明する。
【0242】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「−2(0b1110)」は入力B(70)にそれぞれ入力される。
【0243】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0011)」となる。絶対値比較演算の結果65の符号は負ではないので、セレクタ33では入力A(69)を選択し、最大絶対値選択演算の結果68として「−5(0b1011)」を出力する。そして、レジスタCには「−5(0b1011)」をセットする。
【0244】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し4回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0245】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図37を用いて説明する。
【0246】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「6(0b0110)」は入力B(70)にそれぞれ入力される。
【0247】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1110)」となる。絶対値比較演算の結果65の符号は負なので、セレクタ33では入力B(70)を選択し、最大絶対値選択演算の結果68として「6(0b0110)」を出力する。そして、レジスタCには「6(0b0110)」をセットする。
【0248】
ステップ(7)〜(11)での動作は、従来の一般的なプロセッサの場合と同じである。
【0249】
以上の処理を行うことにより、レジスタCに絶対値が最大である値「6」を求めることができる。
【0250】
(動作例2)
本実施例の形態3のプロセッサで、レジスタAに「0(0b0000)」、レジスタCに4ビットの2の補数表現で表現が可能な負の値で絶対値が最大である「−8(0b1000)」がセットされている場合に、「abmax C,A」ステップ(15)が実行される場合を図38を用いて説明する。これは、従来のプロセッサでは正しく絶対値の比較演算を行うことができない場合である。
【0251】
レジスタCの値「−8(0b1000)」は入力A(69)に、レジスタAの値「0(0b0000)」は入力B(70)にそれぞれ入力される。
【0252】
第1の実施の形態の動作例2より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0111)」となる。絶対値比較演算の結果65の符号は負でないので、セレクタ33では入力A(69)を選択し、最大絶対値選択演算の結果68として「−8(0b1000)」を出力する。そして、レジスタCには「−8(0b1000)」をセットする。
【0253】
このように第3の実施の形態のプロセッサにおいては「−8(0b1000)」と「0(0b0000)」との絶対値比較において、「−8(0b1000)」を絶対値が大きい値として正しく出力することができる。
【0254】
(動作例3)
第3の実施の形態のプロセッサで、レジスタAに「−4(0b1100)」、レジスタCに「3(0b0011)」がセットされている場合に、「abmaxC,A」ステップ(15)が実行される場合を図39を用いて説明する。
【0255】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−4(0b1100)」は入力B(70)にそれぞれ入力される。
【0256】
第1の実施の形態の動作例3より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0000)」となる。絶対値比較演算の結果65の符号は負でないので、セレクタ33では入力A(69)を選択し、最大絶対値選択演算の結果68として「3(0b0011)」を出力する。そして、レジスタCには「3(0b0011)」をセットする。
【0257】
このように第3の実施の形態のプロセッサでは、「abcmp C,A」ステップ(15)が実行される場合に、レジスタAの値が負(例えば−4)で、レジスタBの値がレジスタAの値の絶対値の1小さい数の正の値(例えば3)の場合、正しいく絶対値の大小比較が行われない。そのため、本来求められるべき絶対値が最大の値に比べ1小さい値が絶対値が最大の値として求められる場合がある。しかし、音声データは通常16ビットで扱われ、16ビットで表現しうる2の補数表現の値の範囲は−32768〜32767である。そのため、たとえ絶対値が1違っていたとしても16ビットのフルレンジから見ると誤差は0.003%程度であり、無視することができる誤差である。
【0258】
以上の動作例に示したように第3の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、4ビットの2の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、図8に示した従来のプロセッサのプログラムにおけるステップ(7)〜ステップ(9)をハードで実現しているので、さらに高速に絶対値が最大の値を求めることができる。
【0259】
(第4の実施の形態)
第4の実施の形態のプロセッサは、図5に示した第3の実施の形態での絶対値最大値演算器15に変えて、図6に示すような構成の絶対値最大値演算器15を備えたものである。なお、他部分の構成は図4に示す第3の実施の形態の構成と同じである。
【0260】
図6に示す絶対値最大値演算器15は、本発明に係る演算器である。図6に示すように絶対値最大値演算器15は、第1の入力もしくは第1の入力を1の補数表現化した絶対値から第2の入力もしくは第2の入力を1の補数表現化した絶対値を減算する、第1の1の補数絶対値演算手段、第2の1の補数絶対値演算手段および指示情報出力手段としての1の補数絶対値減算器32と、ゼロ値判断手段としてのゼロ検出器34と、第1の入力または第2の入力のどちらかを選択して出力する選択手段35とを備える。
【0261】
絶対値最大値演算器15は、制御信号10により指定されたレジスタファイル7内の2つのレジスタに格納された値を入力とする。この2つの値について1の補数表現を用いて絶対値の比較演算を行うことにより、2つの値の絶対値のうちのどちらが大きいかを表す指示情報を求める。さらに、この指示情報に基づいて、2の値のうちの絶対値が大きい方の値を出力する。出力された値は、制御信号10により指定されたレジスタファイル7内のレジスタに書き込まれる。
【0262】
1の補数絶対値減算器32は、入力A(69)の値もしくは入力A(69)を1の補数表現化した絶対値から、入力B(70)の値もしくは入力B(70)を1の補数表現化した絶対値を減算し、その結果を絶対値比較演算の結果(指示情報)65として出力するものである。1の補数絶対値減算器32の構成は、第1の実施の形態および第2の実施の形態における1の補数絶対値減算器13と同じ構成なので説明を省略する。
【0263】
ゼロ検出器34では、絶対値比較演算の結果65の値がゼロ(4ビットの全てのビットがゼロ)「0b0000」の場合に、ゼロ値判断結果66として「1」が出力され、それ以外の場合は「0」を出力する。
【0264】
出力値選択手段35では、選択信号生成手段36とセレクタ37を備える。選択信号生成手段36は、絶対値比較演算の結果65の符号が負であるか、または、ゼロ値判断結果66が「1」かつ入力B(70)の符号が負である場合に、選択信号67として「1」が出力され、それ以外の場合は「0」を出力する。セレクタ37では、選択信号67が「0」の場合に入力A(69)を選択し、選択信号67が「1」の場合に入力B(70)を選択し、最大絶対値選択演算の結果68として出力する。
【0265】
第4の実施の形態のプロセッサは、第3の実施の形態のプロセッサと同じ実行命令を備える。ただし、「abmax」命令による処理を行うのは演算器は図6に示す絶対値最大値演算器15である。
【0266】
次に、第4の実施の形態によるプロセッサの動作を説明する。
【0267】
(動作例1)
第4の実施の形態のプロセッサで、図16に示す4つのデータの中から絶対値が最大の値を求める動作を、絶対値最大値演算器15を使う「abmax」命令を中心に説明する。
【0268】
第4の実施の形態で使用するプログラムは第3の実施の形態に示した、図15と同じものである。
【0269】
繰返し1回目のステップ(3)での動作は、従来の一般的なプロセッサの場合と同じである。
【0270】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図40を用いて説明する。
【0271】
レジスタCの値「0(0b0000)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0272】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1101)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65が負なので、選択信号67として「1」を出力する。セレクタ37では、選択信号67が「1」なので、入力B(70)を選択し、最大絶対値選択演算の結果68として、「3(0b0011)」を出力する。そして、レジスタCには「3(0b011)」をセットする。
【0273】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0274】
繰返し2回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0275】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図41を用いて説明する。
【0276】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−5(0b1011)」は入力B(70)にそれぞれ入力される。
【0277】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1111)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65が負なので、選択信号67として「1」を出力する。セレクタ37では、選択信号67が「1」なので、入力B(70)を選択し、最大絶対値選択演算の結果68として、「−5(0b1011)」を出力する。そして、レジスタCには「−5(0b1011)」をセットする。
【0278】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0279】
繰返し3回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0280】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図42を用いて説明する。
【0281】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「−2(0b1110)」は入力B(70)にそれぞれ入力される。
【0282】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0011)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65が負でなく、ゼロ値判断結果66は「0」なので、選択信号67として「0」を出力する。セレクタ37では、選択信号67が「0」なので、入力A(69)を選択し、最大絶対値選択演算の結果68として、「−5(0b1011)」を出力する。そして、レジスタCには「−5(0b1011)」をセットする。
【0283】
繰返し4回目のステップ(3)は、従来の一般的なプロセッサの場合と同じである。
【0284】
ステップ(15)では、絶対値最大値演算器15を使った演算が行われる。この時の動作を図43を用いて説明する。
【0285】
レジスタCの値「−5(0b1011)」は入力A(69)に、レジスタAの値「6(0b0110)」は入力B(70)にそれぞれ入力される。
【0286】
第1の実施の形態の動作例1より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b1110)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65が負なので、選択信号67として「1」を出力する。セレクタ37では、選択信号67が「1」なので、入力B(70)を選択し、最大絶対値選択演算の結果68として、「6(0b0110)」を出力する。そして、レジスタCには「6(0b0110)」をセットする。
【0287】
ステップ(9)〜(12)での動作は、従来の一般的なプロセッサの場合と同じである。
【0288】
以上の処理を行うことにより、レジスタCに絶対値の最大値である「6」を求めることができる。
【0289】
(動作例2)
第4の実施の形態のプロセッサで、レジスタAに「0(0b0000)」、レジスタCに4ビットの2の補数表現で表現が可能範囲で絶対値が最大の負の値「−8(0b1000)」がセットされている場合に、「abmax C,A」命令のステップ(15)が実行される場合を、図44を用いて説明する。これは、前記に示した従来のプロセッサではオーバーフローのために正しく絶対値の大小比較を行うことができない場合である。
【0290】
レジスタCの値「−8(0b1000)」は入力A(69)に、レジスタAの値「0(0b0000)」は入力B(70)にそれぞれ入力される。
【0291】
第1の実施の形態の動作例2より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0111)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65は負でなく、ゼロ値判断結果66も「0」なので、選択信号67として「0」を出力する。セレクタ37では、選択信号67が「0」なので、入力A(69)を選択し、最大絶対値選択演算の結果68として、「−8(0b1000)」を出力する。そして、レジスタCには「−8(0b1000)」をセットする。
【0292】
このように第4の実施の形態のプロセッサにおいては「−8(0b1000)」と「0(0b0000)」では、「−8(0b1000)」をより絶対値の大きい値として出力することができる。
【0293】
(動作例3)
第4の実施の形態のプロセッサで、レジスタAに「−4(0b1100)」、レジスタCに「3(0b0011)」がセットされている場合に、「abmaxC,A」ステップ(15)が実行される場合を図45を用いて説明する。これは、前述した第1の実施の形態から第3の実施の形態のプロセッサでは正しく絶対値の大小比較を行うことができない場合である。
【0294】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−4(0b1100)」は入力B(70)にそれぞれ入力される。
【0295】
第1の実施の形態の動作例3より、1の補数絶対値減算器32の出力である絶対値比較演算の結果65は「(0b0000)」となる。絶対値比較演算の結果65は「(0b0000)」なので、ゼロ値判断結果66は「1」である。選択信号生成手段36では、絶対値比較演算の結果65は負でないが、ゼロ値判断結果66が「1」で、入力B(70)の値も負なので、選択信号67として「1」を出力する。セレクタ37では、選択信号67が「1」なので、入力B(70)を選択し、最大絶対値選択演算の結果68として、「−4(0b1100)」を出力する。そして、レジスタCには「−4(0b1100)」をセットする。
【0296】
このように第4の実施の形態のプロセッサによれば、レジスタAの値が負(例えば−4)で、レジスタBの値がレジスタAの値の絶対値の1小さい数の正の値(例えば3)の場合でも、正しく絶対値の大小比較を行うことができる。
【0297】
(動作例4)
第4の第4の実施の形態のプロセッサで、絶対値が等しく正負が逆である2つの入力値に対して絶対値の大小比較を行う場合の動作例を示す。
【0298】
レジスタAに「−3(0b0011)」、レジスタCに「3(0b1101)」がセットされている場合に、「abmax C,A」ステップ(15)が実行される場合を図46を用いて説明する。
【0299】
レジスタCの値「3(0b0011)」は入力A(69)に、レジスタAの値「−3(0b1101)」は入力B(70)にそれぞれ入力される。
【0300】
入力A(69)の値「(0b0011)」から、入力B(70)を1の補数表現化した絶対値「(0b0010)」を減算するので、絶対値比較演算の結果65は「(0b0001)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65は負でなく、ゼロ値判断結果66も「0」あるので、選択信号67として「0」を出力する。セレクタ37では、選択信号67が「0」なので、入力A(69)を選択し、最大絶対値選択演算の結果68として、「3(0b0011)」を出力する。そして、レジスタCには「3(0b0011)」をセットする。
【0301】
レジスタAに「3(0b1101)」、レジスタCに「−3(0b0011)」がセットされている場合に、「abmax C,A」ステップ(15)が実行される場合を図47を用いて説明する。
【0302】
レジスタCの値「−3(0b1101)」は入力A(69)に、レジスタAの値「3(0b0011)」は入力B(70)にそれぞれ入力される。
【0303】
入力A(69)を1の補数表現化した絶対値「(0b0010)」から、入力B(70)の値「(0b0011)」を減算するので、絶対値比較演算の結果65は「(0b1111)」となる。絶対値比較演算の結果65は「(0b0000)」ではないので、ゼロ値判断結果66は「0」である。選択信号生成手段36では、絶対値比較演算の結果65は負なので、選択信号67として「1」を出力する。セレクタ37では、選択信号67が「1」なので、入力B(70)を選択し、最大絶対値選択演算の結果68として、「3(0b0011)」を出力する。そして、レジスタCには「3(0b0011)」をセットする。
【0304】
動作例4から分かるように、第4の実施の形態のプロセッサにおける絶対値最大値演算器では、絶対値が等しく、正負が逆の2つの値が入力された場合には必ず正の値の方を出力する。
【0305】
以上の動作例に示したように第4の実施の形態のプロセッサでは、誤差なしで絶対値が最大の値を求めることができ、4ビットの2の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、図8に示した従来のプロセッサのプログラムにおけるステップ(7)〜ステップ(9)をハードで実行するので、より高速に絶対値が最大の値を求めることができる。
【0306】
さらに、絶対値が等しく正負が逆の2つの値を比較した場合には、正の値の方を必ず出力する。このため、図6に示す絶対値最大値演算器15を使って複数のデータの中の絶対値が最大の値を求めた結果、負の値(例えば−4)が求まった場合には、その求まった負の値と絶対値が等しい正の値(例えば4)は、絶対値が最大の値を求める対象となったデータ群の中には存在しないことが保証される。このことは次のような場合に有効である。
【0307】
例えば、第4の実施の形態のプロセッサで、複数のデータの中から絶対値が最大である値を求めた結果、「−4(0b1100)」が求まったとする。すると、その複数のデータの中に「4(0b0100)」は存在しないことが保証される。絶対値が最大である値を求める対象となった複数のデータの個々の値を、最小のビット幅で無駄なく表現する場合には、−4〜3の8つの値を表すことができる3ビットのビット幅を与えれば良いことになる。仮に、データ群の中に「4(0b0100)」が存在しないことが保証されなければ、−4〜4の9つの値を表すことが可能な4ビットのビット幅が必要となる。このように、第4の実施の形態のプロセッサは従来のプロセッサに比べてデータ群を無駄なく表現できるビット幅を高速に正しく求めることができる。
【0308】
第4の実施の形態のプロセッサを用いて絶対値最大値演算器15を使わずに絶対値が最大の値を求めるプログラムを図52に示す。ただし、「abmax」命令は複数のステップに分けて詳細にしている。図52のプログラムにおいて、「abs1 a,b」命令は、レジスタbの値を1の補数表現化による絶対値にしてレジスタaにセットする命令であり、「jmp(be) label」命令は、Nフラグが0の場合にlabelにジャンプする命令であり、「jmp(ne) label」命令は、Zフラグが0の場合にlabelにジャンプする命令である。また、ステップ(20)において「jmp(be)」命令が条件判断に用いる演算結果は、ステップ(6)の演算結果が0の場合はステップ(19)の演算結果であり、ステップ(20)の演算結果が0でない場合はステップ(6)の演算結果である。ステップ(16)、ステップ(17)、ステップ(6)の3ステップが「abmax」命令に対応している。
【0309】
なお、第1の実施の形態および第2の実施の形態では1の補数絶対値演算器の構成として図2および図3の第1の1の補数絶対値演算器20や第2の1の補数絶対値演算器21のような構成を示したが、同じ機能が実現できるものであれば他の構成によって本発明の演算器またはプロセッサを実現してもよい。
【0310】
図2、図3に示したもの以外の1の補数絶対値演算器の構成例を図10に示す。図10に示す1の補数絶対値演算器は、入力の符号ビットと、入力の各ビットの排他論理和演算を行う排他論理和演算手段94で構成される。排他論理和演算手段94の制御信号としては入力データの符号ビットが入力される。
排他論理和演算手段94の構成の例としては図50に示すものが適用できる。図50に示す排他論理和演算手段94の入力は4ビット幅である。図50に示す排他論理和演算手段94は、入力の各ビットと制御信号との排他論理和演算を行う複数の排他論理和演算素子38からなる。
【0311】
次に図10に示す1の補数絶対値演算器の動作例を示す。例えば、「3(0b0011)」が入力されたとすると、符号ビットの値「0b0」と入力「3(0b0011)」のそれぞれのビットに対し排他論理和演算が行われて「(0b0011)」を出力する。この場合、排他論理和演算の前後で入力のビットは変化しない。また、「−5(0b1011)」が入力されたとすると、符号ビットの値「0b1」と入力「−5(0b1011)」のそれぞれのビットに対し排他論理和演算が行われて「(0b0100)」を出力する。この場合、排他論理和演算の前後で入力のビットが反転する。この例に示した通り、図10に示すような構成であっても、1の補数の絶対値演算器を構成することができる。
【0312】
なお、第2の実施の形態では1の補数絶対値反転演算器の構成として図3の1の補数絶対値反転演算器27のような構成を示したが、他の構成により本発明の演算器を実現してもよい。
【0313】
図3に示したもの以外の1の補数絶対値反転演算器の構成例を図11に示す。図11に示す1の補数の絶対値反転演算器は、入力の符号ビットと、入力の各ビットの排他論理和演算を行い、その結果をビット反転して出力する複数の排他論理和否定演算素子39で構成される。例えば、「3(0b0011)」が入力されたとすると、符号ビットの値「0b0」と入力「3(0b0011)」のそれぞれのビットに対し非排他論理和演算が行われて「(0b1100)」を出力する。また、「−5(0b1011)」が入力されたとすると、符号ビットの値「0b1」と入力「−5(0b1011)」のそれぞれのビットに対し非排他論理和演算が行われて「(0b1011)」を出力する。例に示した通り、図11のような構成であっても、1の補数絶対値反転演算器を構成できる。
【0314】
もう一つの1の補数絶対値反転演算器の構成例を図12に示す。図12に示す1の補数の絶対値反転演算器は、符号ビットを反転させる反転器40と、入力の符号ビットを反転した値と、入力の各ビットの排他論理和演算を行う排他論理和演算手段94で構成される。排他論理和演算手段94の制御信号としては、反転器40の出力が入力される。排他論理和演算手段94の構成は図50に示したものと同じなので説明を省略する。
【0315】
次に図12に示す1の補数絶対値反転演算器の動作の例を説明する。例えば、「3(0b0011)」が入力されたとすると、符号ビットの値「0b0」をビット反転した値「0b1」と、入力「3(0b0011)」のそれぞれのビットに対し排他論理和演算が行われて「(0b1100)」を出力する。また、「−5(0b1011)」が入力されたとすると、符号ビットの値「0b1」をビット反転した値「0b0」と、入力「−5(0b1011)」のそれぞれのビットに対し排他論理和演算が行われて「(0b1011)」を出力する。例に示した通り、図12のような構成であっても、1の補数絶対値反転演算器を構成できる。
【0316】
これまでに説明した第1の実施の形態から第4の実施の形態のプロセッサおよび従来のプロセッサを用いて図53に示すデータから絶対値が最大のデータを求めた場合に、プロセッサが絶対値が最大のデータを最終的に決定するまでに選択するデータの変遷、および、求まる絶対値が最大のデータを図54に示す。この図に示すように、従来のプロセッサでは本来求まるべき値が「−8」であるのに対し、求まった値は「2」であり、真の値との差が非常に大きくなっている。これは、データの中に含まれている4ビット幅の2の補数で表現できる範囲で絶対値が最大である負の値「−8」を正しく演算できないためである。また、第1の実施の形態から第3の実施の形態のプロセッサでは、絶対値が最大の値として「7」が求まり、従来のプロセッサと比較して求まるべき値との誤差が遥かに小さくなっている。これらに対し、第4の実施の形態のプロセッサでは、絶対値が最大の値として本来求まるべき「−8」が正しく求まっている。このように、本発明の第1の実施の形態から第4の実施の形態のプロセッサによると、従来のプロセッサに比べ絶対値が最大の値を求める精度が格段に向上していることがわかる。
【0317】
(第5の実施の形態)
第5の実施の形態のプロセッサは、図7に示した従来の一般的なプロセッサでの通常のALUに変えて、図48に示すようなALUを備えるものである。なお、他の構成は図7に示す従来の一般的なプロセッサと同じである。これは即ち、従来のプロセッサが備えるALUに変更を加えて本発明の1の補数絶対値減算器の機能を持たせたプロセッサである。
【0318】
図48に示すようにALUは、排他論理和演算手段71と反転器72とセレクタ73と、排他論理和演算手段74と反転器75とセレクタ76と、加算器78と、セレクタ77を備えている。このALUは、通常の加算演算、減算演算に加え、制御信号10により指定されるレジスタファイル7内の2つのレジスタのそれぞれが保持する2つの値について1の補数表現を用いた絶対値の比較演算を行い、その比較結果を2つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【0319】
排他論理和演算手段71は、図50に示すように複数の排他論理和演算子38を組み合わせて構成されている。排他論理和演算手段71は、入力として受け取った入力A(69)と、セレクタ73から受け取った1ビットの制御信号との排他論理和演算を行う。反転器72は、入力A(69)の符号のビットを反転したものを符号の反転信号84として出力する。セレクタ73は、制御信号A(79)に基づいて、入力A(69)の符号信号83、符号の反転信号84、固定値0信号85、固定値1信号86、からいずれかを選択して1ビットを出力する。 これにより、排他論理和演算手段71は、セレクタ73から制御信号として入力A(69)の符号信号83を受け取った場合は、入力A(69)の絶対値を出力することになる。つまり、符号ビットが「1」で、負の場合は入力A(69)と「1111」との排他論理和演算が行われるため入力A(69)の各ビットが反転されて1の補数表現化による絶対値が排他論理和演算手段17から出力され、符号ビットが「0」で、正の場合は入力A(69)と「0000」との排他論理和演算が行われて入力A(69)はそのままの値で排他論理和演算手段17から出力される。また、排他論理和演算手段17が、セレクタ73から制御信号として入力A(69)の符号の反転信号84を受け取った場合は、入力A(69)の1の補数表現化による絶対値のビット反転を出力する。
【0320】
排他論理和演算手段74は、図50に示すように複数の排他論理和演算子38を組み合わせて構成されている。排他論理和演算手段74は、入力として受け取った入力B(70)の各ビットと、セレクタ76から受け取った1ビットの制御信号との排他論理和演算を行う。反転器75は、入力B(70)の符号のビットを反転したものを符号の反転信号88として出力する。セレクタ76は、制御信号B(80)に基づいて、入力B(70)の符号信号87、符号の反転信号88、固定値0信号89、固定値1信号90、からいずれかを選択して1ビットを出力する。
【0321】
セレクタ77は、制御信号C(81)に基づいて、固定値0信号(91)か固定値1信号(92)かを選択して1ビットを出力する。
【0322】
加算器78は、排他論理和演算手段71からの出力と排他論理和演算手段74からの出力とセレクタ77からの出力を加算して、出力82を出力する。
【0323】
なお、制御信号A(79)、制御信号B(80)、制御信号C(81)のそれぞれは、制御信号10として、デコーダ5(図7参照)からまとめて送信される。
【0324】
次に、第5の実施の形態におけるプロセッサのALUの動作を説明する。
【0325】
(動作例1)
制御信号A(79)に基づいてセレクタ73から「符号信号83」が出力され、制御信号B(80)に基づいてセレクタ76から「符号の反転信号88」が出力され、制御信号C(81)に基づいて「固定値1(92)」を出力する場合を説明する。この場合、プロセッサのALUは、入力A(69)から入力B(70)を減じる減算を行う。
【0326】
制御信号A(79)に基づいてセレクタ73から「符号の信号83」が排他論理和演算手段71に入力されると、排他論理和演算手段71では入力A(69)の各ビットと入力A(69)の符号との排他論理和演算が行われる。そのため、排他論理和演算手段71の出力は入力A(69)の1の補数の絶対値となる。
【0327】
制御信号B(80)に基づいてセレクタ76から「符号の反転信号88」が排他論理和演算手段74に入力されると、排他論理和演算手段74では入力B(70)と入力B(70)の符号との排他論理和演算の結果のビット反転が行われる。そのため、排他論理和演算手段74の出力は入力B(70)の1の補数化表現による絶対値のビット反転となる。
【0328】
加算器78では、入力A(69)の1の補数表現化による絶対値と、入力B(70)の1の補数表現化による絶対値のビット反転と、セレクタ77からの出力「1」を加算することになる。これにより、加算器78は、入力A(69)から入力B(70)を減算した結果を出力82として出力する。よって、第5の実施の形態におけるプロセッサのALUは、第2の実施の形態に示した動作と同じく、入力A(69)と入力B(70)との1の補数絶対値減算を行うことができる。
【0329】
(動作例2)
制御信号A(79)に基づいてセレクタ73から「固定値0(85)」が出力され、制御信号B(80)に基づいてセレクタ76から「固定値0(89)」が出力され、制御信号C(81)に基づいて「固定値0(91)」を出力する場合を説明する。この場合、プロセッサのALUは、入力A(69)に入力B(70)を加える加算を行う。
【0330】
制御信号A(79)に基づいて「固定値0(85)」が排他論理和演算手段71に入力されると、排他論理和演算手段71では入力A(69)の各ビットと「0」との排他論理和演算が行われる。そのため、排他論理和演算手段71は、入力A(69)をそのまま出力する。
【0331】
制御信号B(80)に基づいて「固定値0(89)」が排他論理和演算手段74に入力されると、排他論理和演算手段74では入力B(70)の各ビットと「0」との排他論理和演算が行われる。そのため、排他論理和演算手段74は、入力B(70)をそのまま出力する。
【0332】
加算器78では、排他論理和演算手段74からの出力である入力A(69)の値と、排他論理和演算手段76からの出力である入力B(70)の値と、セレクタ77からの出力である「0」とを加算する。よって、この場合、プロセッサのALUは入力A(69)と入力B(70)との加算を行う。
【0333】
(動作例3)
制御信号A(79)に基づいてセレクタ73から「固定値0(85)」が出力され、制御信号B(80)に基づいてセレクタ76から「固定値1(90)」が出力され、制御信号C(81)に基づいてセレクタ77から「固定値1(92)」を出力する場合を説明する。
【0334】
制御信号A(79)に基づいて「固定値0(85)」が排他論理和演算手段71に入力されると、排他論理和演算手段71では、入力A(69)の各ビットと「0」との排他論理和演算が行われる。そのため、排他論理和演算手段71は、入力A(69)をそのまま出力する。
【0335】
制御信号B(80)に基づいて「固定値1(90)」が排他論理和演算手段76に入力されると、排他論理和演算手段74では、入力B(70)と「1」との排他論理和演算が行われる。そのため、排他論理和演算手段74は、入力B(70)のビット反転を出力する。
【0336】
加算器78では、排他論理和演算手段71からの出力である入力A(69)の値と、排他論理和演算手段76からの出力である入力B(70)のビット反転の値と、セレクタ77からの出力である「1」とを加算する。よって、この場合は、プロセッサのALUは入力A(69)から入力B(70)を減じる減算を行う。
【0337】
以上の動作例に示したように、第5の実施の形態のプロセッサのALUは、制御信号A(79)、制御信号B(80)、制御信号C(81)の組み合わせにより、入力A(69)と入力B(70)とを用いた異なる種類の演算を行うことが可能である。制御信号A(79)、制御信号B(80)、制御信号C(81)の組み合わせと、それによって得られる演算結果を動作例1〜3に示した以外のものも含めて図49に示す。
【0338】
このように第5の実施の形態のプロセッサのように構成すれば、本発明に係る演算器を用いてプロセッサが本来備えているALUの機能をも実現することが可能である。
【0339】
なお、第5の実施の形態に示した構成以外の構成により本発明に係る演算器を実現し、プロセッサが本来備えているALUの機能をも実現してもよい。
【0340】
なお、第1の実施の形態〜第4の実施の形態では、演算器のビット幅が4ビットの場合を示したがそれ以外のビット幅を用いて同じ構成を実現してもよい。
【0341】
なお、第3の実施の形態および第4の実施の形態では、複数のデータの中から絶対値が最大となる値を求める場合の動作を示したが、セレクタ33、セレクタ37の選択条件を逆にすることにより、絶対値が最小となる値も求めることも可能である。
【0342】
さらに、本発明の演算方法をコンピュータプログラムで表し、これをコンピュータで読み取り可能な記録媒体に記録し、この記録媒体をコンピュータに読み込ませて本発明の演算方法を実現することも可能である。
【0343】
さらに、本発明の演算方法をプロセッサのマイクロコードで表し、これをプロセッサの実行命令として、本発明の演算方法を実現することも可能である。
【0344】
【発明の効果】
本発明の請求項1から請求項6のいずれかに記載の演算器は、絶対値の比較に1の補数表現化による絶対値を用いるので、所定のビット幅で2の補数を表現しうる範囲で最大の絶対値をもつ負の値を含む値についても正しく絶対値の大小比較を行うことができる。
【0345】
本発明の請求項3または請求項6に記載の演算器によれば、絶対値が同じで符号が異なる2つの値の場合には符号が正の値を絶対値が大きい値として出力する。よって、この演算器を用いて複数のデータの中から絶対値が最大の値を求めた結果として、負の値Aが求まった場合は、データ群の中には値Aと絶対値が同じで符号が逆、つまり正の値が含まれないことを保証することができる。正の値が含まれないことが保証されるので、データ群のそれぞれの値を一定のビット幅で表現するために必要なビット幅を無駄なく設定することができる。
【0346】
本発明の請求項6の演算器によれば、絶対値を比較する2数のうちの被減算値が負の値で、減算値が被減算値の絶対値より1小さい正の値である場合には、被減算値を絶対値が大きい値として出力する。よって1の補数表現化による絶対値の比較を用いて、誤差なく絶対値が最大の値を求めることができる。
【0347】
本発明の請求項7に記載の演算方法によれば、本発明の請求項1に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0348】
本発明の請求項8に記載の演算方法によれば、本発明の請求項2に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0349】
本発明の請求項9に記載の演算方法によれば、本発明の請求項3に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0350】
本発明の請求項10に記載の演算方法によれば、本発明の請求項4に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0351】
本発明の請求項11に記載の演算方法によれば、本発明の請求項5に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0352】
本発明の請求項12に記載の演算方法によれば、本発明の請求項6に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【0353】
本発明の請求項13に記載のプロセッサによれば、プロセッサが備える実行命令により本発明の請求項1から請求項5のいずれかに記載の演算器を用いて2つの値の絶対値の大小比較や、複数のデータのなかから絶対値が最も大きな値を求めることができる。
【図面の簡単な説明】
【図1】 本発明を適用した第1の実施の形態および第2の実施の形態のプロセッサの構成を示す図。
【図2】 図1に示した1の補数絶対値減算器13の第1の実施の形態での構成を示す図。
【図3】 図1に示した1の補数絶対値減算器13の第2の実施の形態での構成を示す図。
【図4】 本発明を適用した第3の実施の形態および第4の実施の形態のプロセッサの構成を示す図。
【図5】 図4に示した絶対値最大値演算器15の第3の実施の形態での構成を示す図。
【図6】 図4に示した絶対値最大値演算器15の第4の実施の形態での構成を示す図。
【図7】 従来の一般的なプロセッサの構成を示す図。
【図8】 従来の2の補数の絶対値減算器を備えたプロセッサの構成を示す図。
【図9】 図8に示した2の補数絶対値減算器14の構成を示す図。
【図10】 1の補数の絶対値演算器の構成の例を示す図。
【図11】 1の補数の絶対値反転演算器の構成の例を示す図。
【図12】 1の補数の絶対値反転演算器の構成の例を示す図。
【図13】 図7に示した従来の一般的なプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図14】 図8に示した従来のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図15】 図4に示した第3の実施の形態および第4の実施の形態のプロセッサで絶対値の最大値を求めるプログラムを示す図。
【図16】 絶対値が最大である値を求める対象となるデータが格納されているメモリを示す図。
【図17】 従来のプロセッサで処理を行った場合の繰返し1回目の動作における各数値を示す図。
【図18】 従来のプロセッサで処理を行った場合の繰返し2回目の動作における各数値を示す図。
【図19】 従来のプロセッサで処理を行った場合の繰返し3回目の動作における各数値を示す図。
【図20】 従来のプロセッサで処理を行った場合の繰返し4回目の動作における各数値を示す図。
【図21】 従来のプロセッサで絶対値が最大の負の値を処理した場合における各数値を示す図。
【図22】 第1の実施の形態の動作例1での繰返し1回目の動作における各数値を図。
【図23】 第1の実施の形態の動作例1での繰返し2回目の動作における各数値を示す図。
【図24】 第1の実施の形態の動作例1での繰返し3回目の動作における各数値を示す図。
【図25】 第1の実施の形態の動作例1での繰返し4回目の動作における各数値を示す図。
【図26】 第1の実施の形態の動作例2での動作における各数値を示す図。
【図27】 第1の実施の形態の動作例3での動作における各数値を示す図。
【図28】 第2の実施の形態の動作例1での繰返し1回目の動作における各数値を示す図。
【図29】 第2の実施の形態の動作例1での繰返し2回目の動作における各数値を示す図。
【図30】 第2の実施の形態の動作例1での繰返し3回目の動作における各数値を示す図。
【図31】 第2の実施の形態の動作例1での繰返し4回目の動作における各数値を示す図。
【図32】 第2の実施の形態の動作例2での動作における各数値を示す図。
【図33】 第2の実施の形態の動作例3での動作における各数値を示す図。
【図34】 第3の実施の形態の動作例1での繰返し1回目の動作における各数値を示す図。
【図35】 第3の実施の形態の動作例1での繰返し2回目の動作における各数値を示す図。
【図36】 第3の実施の形態の動作例1での繰返し3回目の動作における各数値を示す図。
【図37】 第3の実施の形態の動作例1での繰返し4回目の動作における各数値を示す図。
【図38】 第3の実施の形態の動作例2での動作における各数値を示す図。
【図39】 第3の実施の形態の動作例3での動作における各数値を示す図。
【図40】 第4の実施の形態の動作例1での繰返し1回目の動作における各数値を示す図。
【図41】 第4の実施の形態の動作例1での繰返し2回目の動作における各数値を示す図。
【図42】 第4の実施の形態の動作例1での繰返し3回目の動作における各数値を示す図。
【図43】 第4の実施の形態の動作例1での繰返し4回目の動作における各数値を示す図。
【図44】 第4の実施の形態の動作例2での動作における各数値を示す図。
【図45】 第4の実施の形態の動作例3での動作における各数値を示す図。
【図46】 第4の実施の形態の動作例4での動作における各数値を示す図。
【図47】 第4の実施の形態の動作例4での動作における各数値を示す図。
【図48】 第5の実施の形態のプロセッサのALUの構成を示す図。
【図49】 第5の実施の形態のプロセッサのALUの制御信号と機能の組み合わせを示す図。
【図50】 排他論理和演算手段94の構成を示す図。
【図51】 第1の実施の形態のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図52】 第4の実施の形態のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図53】 絶対値が最大であるデータを求める対象となるデータを示す図。
【図54】 第1の実施の形態から第4の実施の形態のプロセッサおよび従来のそれぞれのプロセッサを用いて、図53に示すデータから絶対値が最大であるデータを求めた場合のデータの選択過程および最終的に求まるデータの違いを示す図。
【符号の説明】
1 制御部
2 データバス部
3 プログラムカウンタ
4 実行命令メモリ
5 デコーダ
6 ALU
7 レジスタファイル
8 データメモリ
9 フラグ設定部
10 制御信号
11 アドレス信号
12 制御信号
13 1の補数絶対値減算器
14 2の補数絶対値減算器
15 絶対値最大値演算器
20 第1の1の補数絶対値演算器
21 第2の1の補数絶対値演算器
22 減算器(指示情報出力手段)
23 反転器
24 セレクタ
25 反転器
26 セレクタ
27 1の補数絶対値反転演算器
28 加算器(指示情報出力手段)
29 反転器
30 セレクタ
31 反転器
32 1の補数絶対値減算器
33 セレクタ
34 ゼロ検出器
35 選択手段
36 選択信号生成手段
37 セレクタ
38 排他論理和演算素子
39 排他論理和否定演算素子
40 反転器
50 第1の2の補数絶対値演算器
51 第2の2の補数絶対値演算器
52 反転器
53 +1加算器
54 セレクタ
55 反転器
56 +1加算器
57 セレクタ
60 符号反転後の値
61 符号反転後の値
62 絶対値演算処理後の値
63 絶対値演算処理後の値
64 絶対値反転処理後の値
65 絶対値比較演算の結果(指示情報)
66 ゼロ値判断結果
67 選択信号
68 絶対値最大値演算の結果
69 入力A
70 入力B
71 排他論理和演算手段
72 反転器
73 セレクタ
74 排他論理和演算手段
75 反転器
76 セレクタ
77 セレクタ
78 加算器
79 制御信号A
80 制御信号B
81 制御信号C
83 符号
84 符号の反転
85 固定値0
86 固定値1
87 符号
88 符号の反転
89 固定値0
90 固定値1
91 固定値0
92 固定値1
94 排他論理和演算手段
Claims (13)
- 2の補数表現による第1の値と2の補数表現による第2の値とを受け取り、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す情報を出力する演算器であって、
前記第1の値の符号が負である場合には前記第1の値を1の補数表現に変換して出力し、符号が正である場合には前記第1の値をそのまま出力する第1の1の補数絶対値演算手段と、
前記第2の値の符号が負である場合には前記第2の値を1の補数表現に変換して出力し、符号が正である場合には前記第2の値をそのまま出力する第2の1の補数絶対値演算手段と、
前記第1の1の補数絶対値演算手段および前記第2の1の補数絶対値演算手段から出力された前記第1の値と前記第2の値とに基づいて、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す指示情報を出力する指示情報出力手段と、
を備える演算器。 - 前記指示情報に基づいて前記第1の値の絶対値と前記第2の値の絶対値とのうちの絶対値が大きい方の値を出力する選択手段を備える請求項1に記載の演算器。
- 前記選択手段は、前記第1の値の絶対値と前記第2の値の絶対値とが等しく、前記第1の値の符号と前記第2の値の符号とが異なる場合には、前記第1の値と前記第2の値のうちの符号が正である方の値を選択して出力する請求項2に記載の演算器。
- 前記指示情報出力手段は、前記第1の1の補数絶対値演算手段より出力された前記第1の値から前記第2の1の補数絶対値演算手段より出力された前記第2の値を減じて出力する請求項1に記載の演算器。
- 前記第2の1の補数絶対値演算手段が、前記第2の値の符号が負である場合には前記第2の値が1の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第2の値そのままの値の各ビットを反転させて出力する反転手段を備え、
前記指示情報出力手段は、前記第1の1の補数絶対値演算手段から出力された前記第1の値と前記第2の1の補数絶対値演算手段から出力された前記第2の値との和を求め、この和に更に1を加えて出力する請求項1に記載の演算器。 - 前記指示情報出力手段からの出力が0であるか否かを判断するゼロ値判断手段を備え、
前記選択手段は、前記指示情報出力手段からの出力が負であるか、または、前記指示情報出力手段からの出力が0でありかつ前記第2の値の符号が負である場合に前記第2の値を選択して出力し、それ以外の場合に前記第1の値を選択して出力する請求項2または請求項3に記載の演算器。 - 2の補数表現による第1の値の絶対値と2の補数表現による第2の値の絶対値とのどちらが大きいかを表す情報を求める演算方法であって、前記第1の値の符号が負である場合には前記第1の値を1の補数表現に変換し、符号が正である場合には前記第1の値をそのままにしておく第1の1の補数絶対値演算処理工程と、
前記第2の値の符号が負である場合には前記第2の値を1の補数表現に変換し、符号が正である場合には前記第2の値をそのままにしておく第2の1の補数絶対値演算処理工程と、
前記第1の1の補数絶対値演算処理工程および前記第2の1の補数絶対値演算処理工程において処理された前記第1の値と前記第2の値とに基づいて、前記第1の値の絶対値と前記第2の値の絶対値とのどちらが大きいかを表す指示情報を求める指示情報処理工程と、
を包含する演算方法。 - 前記指示情報に基づいて、前記第1の値と前記第2の値のうちの絶対値が大きい方の値を選択する選択処理工程を包含する請求項7に記載の演算方法。
- 前記選択処理工程において、前記第1の値の絶対値と前記第2の値の絶対値とが等しく、前記第1の値の符号と前記第2の値の符号とが異なる場合には、前記第1の値と前記第2の値のうちの符号が正である方の値を絶対値が大きい値として選択する請求項8に記載の演算方法。
- 前記指示情報処理工程において、前記第1の1の補数絶対値演算処理工程で処理された前記第1の値から前記第2の1の補数絶対値演算処理工程で処理された前記第2の値を減じる請求項7に記載の演算方法。
- 前記の2の補数絶対値演算処理工程において、前記第2の値の符号が負である場合には前記第2の値が1の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第2の値そのままの値の各ビットを反転させ、
前記指示情報処理工程において、前記第1の1の補数絶対値演算処理工程で処理された前記第1の値と前記第2の1の補数絶対値演算処理工程で処理された前記第2の値との和を求め、この和に更に1を加える請求項7に記載の演算方法。 - 前記指示情報処理工程による処理結果が0であるか否かを判断するゼロ値判断処理工程を含み、
前記選択処理工程において、前記指示情報処理工程の処理結果が負であるか、または、前記指示情報処理工程の処理結果が0でありかつ前記第2の値の符号が負である場合に前記第2の値を絶対値が大きい値として選択し、それ以外の場合に前記第1の値を絶対値が大きい値として選択する請求項8または請求項9に記載の演算方法。 - 実行命令を記憶する実行命令記憶手段と、
実行命令記憶手段から読み出した前記実行命令をデコードした制御信号を出力するデコード手段と、
前記制御信号に基づいて演算を行う演算器と、
を備えたプロセッサであって、
前記演算器は、入力された2の補数表現による第1の値と、入力された2の補数表現による第2の値と、を前記制御信号に基づいて、
前記第1の値の符号もしくは前記第2の値の符号が負である場合には符号が負である値を1の補数表現に変換し、前記第2の値の符号もしくは前記第2の値の符号が正である場合には符号が正である値をそのままにする変換処理を行い、
前記変換処理後の第1の値と前記変換処理後の第2の値との大小を比較して、大小の違いがある場合には大きい方の前記変換処理を行う前の前記第1の値もしくは前記第2の値を出力し、大小の違いがなく前記変換処理を行う前の前記第1の値の符号と前記第2の値の符号とが異なる場合には、前記変換処理を行う前の前記第1の値もしくは前記第2の値のうち符号が正の方の値を出力するプロセッサ。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP26956699A JP3672076B2 (ja) | 1999-09-22 | 1999-09-22 | 演算器および演算方法およびプロセッサ |
DE2000606336 DE60006336T2 (de) | 1999-09-22 | 2000-09-21 | Absolutwertvergleicher |
EP20000120154 EP1087290B1 (en) | 1999-09-22 | 2000-09-21 | Absolute value comparator |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP26956699A JP3672076B2 (ja) | 1999-09-22 | 1999-09-22 | 演算器および演算方法およびプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001092634A JP2001092634A (ja) | 2001-04-06 |
JP3672076B2 true JP3672076B2 (ja) | 2005-07-13 |
Family
ID=17474158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP26956699A Expired - Fee Related JP3672076B2 (ja) | 1999-09-22 | 1999-09-22 | 演算器および演算方法およびプロセッサ |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP1087290B1 (ja) |
JP (1) | JP3672076B2 (ja) |
DE (1) | DE60006336T2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005135090A (ja) | 2003-10-29 | 2005-05-26 | Seiko Epson Corp | 演算処理装置 |
EP3686735B1 (en) * | 2015-12-28 | 2022-05-04 | Coherent Logix, Inc. | Processor instructions to accelerate fec encoding and decoding |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3829671A (en) * | 1973-04-25 | 1974-08-13 | Westinghouse Electric Corp | Method and circuit for calculating the square root of the sum of two squares |
JP3735425B2 (ja) * | 1996-11-29 | 2006-01-18 | 株式会社東芝 | 絶対値比較回路 |
-
1999
- 1999-09-22 JP JP26956699A patent/JP3672076B2/ja not_active Expired - Fee Related
-
2000
- 2000-09-21 DE DE2000606336 patent/DE60006336T2/de not_active Expired - Lifetime
- 2000-09-21 EP EP20000120154 patent/EP1087290B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2001092634A (ja) | 2001-04-06 |
EP1087290B1 (en) | 2003-11-05 |
DE60006336T2 (de) | 2004-09-09 |
DE60006336D1 (de) | 2003-12-11 |
EP1087290A1 (en) | 2001-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5930158A (en) | Processor with instruction set for audio effects | |
CN110036368B (zh) | 用于执行算术运算以累加浮点数的装置及方法 | |
JP6333439B2 (ja) | 命令に応じた丸め処理の実行 | |
US7949696B2 (en) | Floating-point number arithmetic circuit for handling immediate values | |
JP4064989B2 (ja) | パック・データの乗加算演算を実行する装置 | |
KR100329339B1 (ko) | 압축데이터에의한승산-가산연산수행장치 | |
JP3549549B2 (ja) | 算術論理ユニット | |
US7188133B2 (en) | Floating point number storage method and floating point arithmetic device | |
JP2009093662A (ja) | 固定小数点表示と浮動小数点表示との間で数を変換するデータ処理装置および方法 | |
JP2014179065A (ja) | データ処理装置、データ処理方法およびデータ処理プログラム | |
CN108139912B (zh) | 在浮点运算期间计算和保留误差边界的装置和方法 | |
TW421971B (en) | Method and apparatus for decoding an audio signal | |
US8209366B2 (en) | Method, apparatus and program storage device that provides a shift process with saturation for digital signal processor operations | |
JP3672076B2 (ja) | 演算器および演算方法およびプロセッサ | |
GB2410097A (en) | Constant generation in floating point processing | |
KR20210124347A (ko) | 앵커 데이터 요소 변환 | |
JP4243277B2 (ja) | データ処理装置 | |
JPH01207823A (ja) | 浮動小数点数一固定小数点数変換装置 | |
JP4163967B2 (ja) | 浮動小数点演算装置 | |
Mohan et al. | Scaling, base extension, sign detection and comparison in RNS | |
EP1237070A2 (en) | Denormalization circuit | |
JP2002175179A (ja) | 整数除算方法および整数除算装置 | |
JP2591250B2 (ja) | データ処理装置 | |
JPH0749767A (ja) | 飽和処理機能を備えた演算処理装置 | |
JP2752698B2 (ja) | 浮動小数点加減算回路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041101 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041105 |
|
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: 20050413 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050413 |
|
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: 20080428 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090428 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120428 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130428 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |