JP3790619B2 - 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ - Google Patents

正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ Download PDF

Info

Publication number
JP3790619B2
JP3790619B2 JP32786697A JP32786697A JP3790619B2 JP 3790619 B2 JP3790619 B2 JP 3790619B2 JP 32786697 A JP32786697 A JP 32786697A JP 32786697 A JP32786697 A JP 32786697A JP 3790619 B2 JP3790619 B2 JP 3790619B2
Authority
JP
Japan
Prior art keywords
instruction
value
bit
positive
register
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
JP32786697A
Other languages
English (en)
Other versions
JPH10214186A (ja
Inventor
徹 森河
信生 桧垣
圭三 隅田
明 三好
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=18121299&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP3790619(B2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP32786697A priority Critical patent/JP3790619B2/ja
Publication of JPH10214186A publication Critical patent/JPH10214186A/ja
Application granted granted Critical
Publication of JP3790619B2 publication Critical patent/JP3790619B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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
    • 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
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value

Description

【0001】
【発明の属する技術分野】
本発明はROM等に記憶された命令列に従った処理を行うプロセッサに関する。
【0002】
【従来の技術】
近年、フレーム内符号化、フィールド内符号化、動き補償予測等で圧縮された動画データや、静止画データ、音声データ等様々な種別のデータを対話的に再生することができるアプリケ−ションソフトウェアが普及の兆しを見せている。そしてこのようなソフトウェアの開発をより効率良く行うことができるマルチメディア指向のプロセッサについての需要がにわかに高まりつつある。マルチメディア指向プロセッサとは、画像・音声データ等の圧縮/伸張処理のプログラミングをより容易に行えるようアーキテクチャが特化されたプロセッサである。画像データを処理する際に特に高速化処理が求められるのは、N×N個の行列状成分を有する圧縮データと、N×N個の行列状成分を有する係数データとの行列積演算である。N×N個の行列状成分を有する圧縮データの代表的なものとしては、MPEGに規定された横16×縦16の輝度成分からなる輝度ブロック、横8×縦8の青色差成分からなる青色差ブロック(Cbブロック)、横8×縦8の赤色差成分からなる赤色差ブロック(Crブロック)が筆頭に挙げられる。そしてこのような圧縮データに対しての行列積演算は、MPEG,JPEGの画像圧縮方式において、逆DCTの近似計算を行う際に特に高頻度に行われる。
【0003】
行列積演算の高速化を図った従来のマルチメディア指向プロセッサについて説明する。従来のマルチメディア指向プロセッサの基本的なアーキテクチャとしては、ハードウェア構成に積和結果専用レジスタ(以下MCRと略記する場合がある)が設けられており、命令体系に積和値を転送する転送命令『MOV MCR,**』が設けられている。
【0004】
このマルチメディア指向プロセッサのハードウェア構成図の一例を図16に示す。図16において算術演算回路61は、圧縮データを構成する成分Fijと、係数行列を構成する成分Gjiとの乗算を乗算命令に従い行う。それと共に積和結果専用レジスタ62が保持している積和値を取り出して、乗算結果Gji*Fijと取り出された積和値とを加算し、加算後、加算結果を積和結果専用レジスタ62に保持させる。算術演算回路61が上記動作を繰り返すことにより、積和結果専用レジスタ62にはこれまでの積和値が蓄積される。乗算が所定回数行われると、プログラマは積和値転送命令を発行する。転送命令の発行により積和結果専用レジスタ62の蓄積値を汎用レジスタに転送して、これを一行一列の行列積結果として利用する。同様の処理をN×N回繰り返せば、N×N圧縮データとN×N係数行列との行列積演算が終了する。
【0005】
ところで現状のマルチメディア指向プロセッサを利用する際、プログラマの頭を悩ませるのは、積和値の補正のための正値化処理及び飽和演算処理である。
正値化処理とは、積和値が負数である際、これをゼロ値或は正値に丸める処理をいう。一般に圧縮データは前後のデータとの相対値を示す符号付きデータとして表現されている。そのため、圧縮データの各成分と所定係数との積和値は負数として表れる場合がある。一方ディスプレィ、スピーカ等の再生系ハードウェアは、符号無しデータしか処理できないので、積和値を利用する際には、適宜、正値化処理を行う必要がある。
【0006】
飽和演算処理とは、積和値が所定範囲を越えている場合(飽和している場合)にこれを所定値に丸める処理をいう。即ち圧縮データの積和の繰り返しにおいて、伝送時に発生したビット誤りを含んだ成分を積和した場合、積和値が理論値を遙かに越えている可能性が高くなる。一方再生系ハードウェアは、符号無しデータとして表現可能な有効ビット数例えば8ビットというように物理的に制約されているので、積和値を有効ビットに丸めるのに飽和演算処理が必要となる。
【0007】
このような正値化処理及び飽和演算処理を実現するため、積和値補正用のサブルーチンを用いて積和値を補正することが従来から行われてきた。積和値補正ルーチンの一例を以下説明する。この一例においてレジスタ幅、演算器の演算幅は32ビットである。MCRも32ビット幅を有するが、その積和値は符号付16ビット整数で表現されている。再生系ハードウェアが利用できるデータは、符号無し8ビット整数で表現されていなければならない。尚、本ルーチン使用時の取り決めとしては、演算結果の格納用にデータレジスタD0を用いるものとする。各命令は2オペランド表記であり、左辺、右辺のオペランドをそれぞれ第1オペランド、第2オペランドと称呼する。第2オペランドは転送命令の転送先の指定と、演算結果の格納先の指定を兼ねている。
【0008】
命令1:MOV MCR,D0
命令2:CMP 0xFFFF_8000,D0
命令3:BCC CARRY
命令4:MOV 0x0000_0000,D0
命令5:BRA END
CARRY:
命令6:CMP 0x0000_00FF,D0
命令7:BCS END
命令8:MOV 0x0000_00FF,D0
END:(正値化飽和演算処理の終了)
このルーチンの各命令を順を追って説明すると先ず命令1『MOV MCR,D0』において、積和結果専用レジスタMCRの保持値をデータレジスタD0に転送する。命令2『CMP 0xFFFF_8000,D0』はデータレジスタD0と、『0xFFFF_8000』とを比較する(『0x』は、16進数の数値であることを示す)。ここでの比較は、第2オペランドで指示されているレジスタD0の保持値から、第1オペランドにおいて即値として記述されている『0xFFFF_8000』を減じることにより行われる。
【0009】
命令2の即値『0xFFFF_8000』の第16ビットは、符号付き16ビット整数における符号ビットであり、D0レジスタの保持値が『0xFFFF_8000』より大きいことは、MCRに蓄積されている積和値が負数で表現されていることを示している。
逆にD0レジスタの保持値が『0xFFFF_8000』より小さいことは、MCRに蓄積されている積和値が正数で表現されていることを示している。このように積和値が正数であると、桁下りが起こり、フラグレジスタにおけるキャリーフラグがセットされる。
【0010】
命令3における『BCC』の『B』は分岐命令『Branch』の意味であり、『CC』は『Carry Clear』の意味である。
比較の結果、D0レジスタの値が『0xFFFF_8000』より小さい場合、ラベル『CARRY』が付与された命令6に分岐する。
比較の結果、D0レジスタの値が『0xFFFF_8000』より大きい場合、命令4『mov 0x0000_0000,D0』においてレジスタD0にゼロを転送することにより、積和値をゼロに補正する。補正後、命令5の無条件分岐命令『BRA END』において、正値化処理の終了を示すENDラベルに分岐することにより正値化処理を終える。
【0011】
以上はレジスタD0の保持値が負数である場合の動作である。続いてレジスタD0の保持値が『0x0000_00FF』を越えていた場合の動作について説明する。0x0000_00FFを下回っている場合は、命令6『CMP 0x0000_00FF,D0』において、D0レジスタの値を0x0000_00FFとを比較する。ここでの比較は、第2オペランドで指示されているレジスタD0の保持値から、第1オペランドにおいて即値として記述されている0x0000_00FFを減じることにより行われる。D0レジスタの保持値が0x0000_00FFより小さい場合は桁下りが起こり、フラグレジスタにおけるキャリーフラグがセットされる。
【0012】
命令7『BCS END』における『CS』は『Carry Set』の意味である。キャリーフラグがセットされていると、命令7からラベル『END』への分岐を行う。
キャリーフラグがセットされていなければ、命令7での分岐は行われず命令8に分岐し、命令8の転送命令『mov 0x0000_00FF,D0』においてレジスタD0に0x0000_00FFを転送することにより演算結果を0x0000_00FFに補正し、飽和演算を終える。
【0013】
【発明が解決しようとする課題】
ところで上記の積和値の補正において問題なのは、一回の積和値の補正につき八つもの命令が挿入されコード量が飛躍的に増大している点である。ソフトウェアを情報機器に組み込むためプログラムを予めROMに記憶させておく場合は、コード量が増大するにつれROMの実装量も増し、製造コストが跳ね上がってしまう。デジタルビデオプレーヤ,電子手帳,ワープロを開発している多くの家電電気メーカは独自の伸長処理プログラムの実装により、他社との差別化を図りたいところであるが、現状のところ伸長処理プログラムの実装は、ROMの実装量増大に伴う製造コスト向上という弊害に阻まれ、浸透度は芳しくない。
【0014】
また一回の積和補正で八つもの命令を実行するのは、実行時間の面で多大な問題である。例えば図17に示すように、逆DCTの近似計算を行うため8×8成分からなる圧縮データFij(i,j=1,2,3,4,5・・・8)と、8×8の係数行列Gji(i,j=1,2,3,4,5・・・8)との行列積Hij(i,j=1,2,3,4,5・・・8)を算出する場合、行列積成分H21の算出のために算術演算回路は圧縮データの一列目成分F11,F21,F31,F41,F51,F61,F71,F81と係数行列の一行目成分G11,G12,G13,G14,G15,G16,G17,G18と乗算結果の積和処理を行い、積和値に対して正値化飽和演算処理を施す。続いて行列積成分H12の算出のために、算術演算回路は圧縮データの二列目成分F12,F22,F32,F42,F52,F62,F72,F82と係数行列の一行目成分G11,G12,G13,G14,G15,G16,G17,G18との乗算結果の積和処理を行い、積和値に対して正値化飽和演算処理を施す。
【0015】
同様の積和及び正値化飽和演算処理を行って他の成分H31,H41,H51,H61,H71,H81・・・・を得る必要があるが、行列積Hij(i,j=1,2,3,4,5・・・8)の成分数は64個なので、上記正値化飽和演算処理のための積和値補正ルーチンの実行は、合計64回も行われることになる。積和値補正ルーチンの中には分岐命令(命令3、命令5、命令7)が存在し、本積和値補正ルーチンの実行時には、負数発生、飽和の有無に拘らず必ず分岐が発生するため、上記64回もの積和値補正ルーチンの繰り返しは、決してスムーズなものではない。プロセッサがパイプライン処理の導入により積和の高速化を行おうとしている場合には、上記の3つ分岐命令の実行のため処理効率が著しく低下してしまう。
【0016】
行列積演算を高速化するには、行列積演算を実現する専用回路を内蔵させれば良いように思える。しかし行列積演算全体を専用回路にて実現してしまうと、ハードウェア規模が著しく増大すると共にプログラマが記述したプログラム通りに様々な処理を行わせるというプロセッサ特有の汎用性が損なわれることになる。プロセッサ特有の汎用性が損なわれてしまうと、たとえ独自の伸長処理プログラムにてプロセッサを制御させたいという願望があっても、このような需要にこたえられない結果を招くことになる。
【0017】
【課題を解決するための手段】
上記目的は、命令列中の命令を逐次解読し実行するプロセッサであって、命令列における命令を解読するデコーダと、前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記補正命令のオペコードを解読することによりビット長 s を認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付き m ビット整数値を、 s ビット長の符号無し整数の範囲 (s m) に飽和させるよう、正値化飽和演算手段を制御することを特徴とするプロセッサにて達成される。
【0018】
【発明の実施の形態】
(第1実施形態)
以下本発明の第1実施形態について図面を参照しながら説明する。図1は、第1実施形態におけるプロセッサの内部構成を示す図であり、同図に示すように本プロセッサは、ROM11、命令読出し回路12、デコーダ13、演算実行装置14、アドレスバス17、及びデータバス18から構成され、アドレスバス17、データバス18を介してRAM10と接続している。
【0019】
RAM10は、8×8の行列状成分からなる圧縮データFij(i,j=1,2,3,4,5・・・8)と、8×8の行列状成分からなる係数データGji(i,j=1,2,3,4,5・・・8)とを予め記憶する。もし読出先のi行j列のアドレスがアドレスバス17に出力されると、記憶しているデータのうち、そのアドレスで指示されるデータをデータバス18に出力する。また演算実行装置14が8×8の行列状成分からなる圧縮データFijと、8×8の係数データGjiとの行列積Hij(i,j=1,2,3,4,5・・・8)のi行j列成分を算出し、書込先のi行j列アドレスがアドレスバス17に出力されると、データバス18に転送されているi行j列成分をそのアドレスで指示される記憶領域に書き込む。このようにして書き込まれた行列積Hijは、逆DCTの近似計算より用いられ、所定処理が施された後に図示しない再生系ハードウェアが用いる。尚Fij及びGjiは、下位から8ビット目を符号ビットに割り当てた符号付き8ビット整数として表現されている。
【0020】
ROM11は、RAM10が記憶している圧縮データの伸長処理プログラムを記憶しており、読出先アドレスが命令読出し回路12から出力されると、記憶されている伸長処理プログラムのうちそのアドレスで指示される命令をデータバス18に出力する。ROM11に記憶されている伸長処理プログラムは、転送命令、演算命令、分岐命令等複数種別の命令が混在してなる。演算命令は、算術演算命令、積和機能付き乗算命令、論理演算命令という種別に大きく分類される。加算命令、減算命令、乗算命令を始めとする算術演算命令はそれぞれ第1オペランド、第2オペランドを有する。第1オペランドは即値指定及びレジスタ直接指定という2種類のアドレッシングモードを有している。これに対して第2オペランドのアドレッシングモードはレジスタ直接指定のみである。これは第2オペランドが演算結果の格納先の指定を兼ねるためである。加算命令『ADD imm、D1』の一例でいうと、第1オペランドは即値immとなり、第2オペランドはレジスタ名D1となる。第2オペランドは、演算結果の格納先として指定されるから、『ADD D0、D1』の場合は、レジスタD0とレジスタD1との加算結果がレジスタD1に格納されることになる。
【0021】
本実施形態において伸長処理プログラムは、8×8の行列成分からなる圧縮データFijと、8×8の行列成分からなる係数データGjiとから8×8成分を有する行列積Hijを生成する行列積サブルーチンを含んでおり、この行列積サブルーチンは、主として積和機能付き乗算命令『MACCB Dm,Dn』及び正値化飽和演算命令『MCSST Dm』から構成されることは特筆すべきである。
【0022】
8×8成分からなる圧縮データFij(i,j=1,2,3,4,5・・・8)と、8×8の係数行列Gji(i,j=1,2,3,4,5・・・8)との行列積Hijを算出する場合を考える。この場合、当該行列積の1行1列成分H11を算出するためには、以下の計算を行う必要がある。
{数式1}
H11=G11*F11+G12*F21+G13*F31+G14*F41+G15*F51+G16*F61+G17*F71+G18*F81
この{数式1}は『Gji*Fij(i,j=1,2,3,4,5・・・8)』を単項式とし、これら単項式の代数和をとる多項式であるが、この単項式の演算と、代数和とが本行列積サブルーチンでは、積和機能付き乗算命令『MACCB Dm,Dn』を繰り返し起動するループ文(このループ文を積和ループという)で表現されている。
【0023】
図3は、行列積サブルーチンの一例を示す図である。尚、図3における各命令の概略は、その右隣のコメント文(先頭に#記号が配された文)に記してある。
F_ENTRYはRAM10において圧縮データが格納されている領域の先頭に付されたラベルであり、G_ENTRYはRAM10において係数データが格納されている領域の先頭に付されたラベルである。H_ENTRYはRAM10において行列積が格納されている領域の先頭に付されたラベルである。命令1:『MOV F_ENTRY,A0』、命令2:『MOV G_ENTRY,A1』、命令3:『MOV H_ENTRY,A2』はアドレスF_ENTRY、アドレスG_ENTRY、アドレスH_ENTRYをそれぞれ、アドレスレジスタA0、アドレスレジスタA1、アドレスレジスタA2に転送する転送命令である。
【0024】
以上の転送命令によりアドレスレジスタA0,A1,A2は8×8個の成分を有する圧縮データ、係数データ、行列積データの読出先アドレスを指示するのに用いられる。
命令4:『MOV INIT,D2』は、データレジスタD2に繰り返し回数の初期値INITを設定するものであり、命令5:『MOV (A0),D0』は、アドレスレジスタA0により指示されたアドレスから圧縮データFijをデータレジスタD0へと読み出すものである。命令6:『MOV (A1),D1』は、アドレスレジスタA1により指示されたアドレスから係数データGjiをデータレジスタD1へと読み出すものである。命令7:『MACCB D0,D1』は、データレジスタD0、データレジスタD1、及び積和結果専用レジスタ6を利用しての積和機能付きの乗算命令であり、命令8:『CMP NUMBER,D2』は、データレジスタD2に格納された繰返回数から繰返総数NUMBERを減じる演算を行うことにより繰返回数の上限チェックを行う命令である。
【0025】
命令9:『BCS LP1_NEXT』は命令8:『CMP NUMBER,D2』における減算の結果キャリーフラグがONになればラベルLP1_NEXTが付された命令13:『ADD 1,D2』に分岐する条件付き分岐命令である。
命令10:『MCSST D1』は、キャリーフラグがOFFの場合のみ正値化処理及び飽和演算処理(以下これらをまとめて正値化飽和演算処理という)を行う命令である。
【0026】
命令13:『INC D2』はデータレジスタD2に格納された繰り返し回数を1増加させる加算命令であり、命令14:『INC A0』はアドレスレジスタA0に格納された係数データの読出先アドレスを1増加させる加算命令である。命令15:『ADD ROW1,A1』はアドレスレジスタA1に格納された係数データの読出先アドレスに一行数ROW1を加算する加算である。命令16:『BRA LP1_START』はラベルLP1_STARTに分岐する無条件分岐命令である。
【0027】
ラベルLP1_STARTが付された命令5:『MOV (A0),D0』〜命令12:『BRA LP1_END』からなる命令列により単項式の演算がなされ、演算結果の代数和がとられる。
ラベルLP1_NEXTが付された命令13:『ADD 1,D2』〜命令16:『BRA LP1_START』からなる命令列により一行成分×一列成分の行列積が一旦済むと圧縮データの読出先を次行に移し、係数データの読出先を次列に移す。それと共にデータレジスタD2に格納された繰り返し数を加算する。
【0028】
図4は、積和機能付き乗算命令『MACCB Dm,Dn』のフォーマットを示す図であり、図4に示すように、積和機能付き乗算命令『MACCB Dm,Dn』は1ビット長の積和値の格納先の指定フィールドと、1ビット長の代数和の演算内容の指定フィールドと、1ビット長の単項式の演算内容指定フィールドと、2ビット長の乗数読出先指定フィールドと、2ビット長の被乗数読出先指定フィールドとを含む。
【0029】
乗数読出先指定フィールド及び被乗数読出先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2、及び積和結果専用レジスタ6の何れかから、乗数Fij、被乗数Gjiの読み出し先レジスタを指定する。
1ビット長の単項式演算内容指定フィールドは乗数Fij、被乗数Gjiの単項式演算の内容を指定する。即ち、本フィールドに『1』が書き込まれると、乗数Fij、被乗数Gjiの単項式演算の内容とした乗数Fij、被乗数Gjiの乗算『Gji*Fij』が指定される。
【0030】
積和値の格納先の指定フィールドは『1』が設定され、これにより積和値の格納先としてMCR(後述する積和結果専用レジスタ6のことである。)が指定される。1ビット長の代数和の演算内容の指定フィールドは『1』が書き込まれることにより、乗算結果『Gji*Fij』と積和結果専用レジスタ6に格納されている積和値との加算演算である代数和を指定する。
【0031】
『G11*F11+G12*F21+G13*F31・・・・』の積和を行う際、留意すべきは圧縮データの成分Fijの伝送時にビット誤りが生じると、『G11*F11+G12*F21+G13*F31・・・・』の積和値が再生系で再生できないような理論値からかけ離れた数値になっていることである。この恐れがあるため、行列積サブルーチンは、積和機能付き乗算命令『MACCB D0,D1』の起動を繰り返すループ処理の終了後に正値化飽和演算命令『MCSST Dm』を配し、積和値に対しての正値化飽和演算処理を行うようにしている。
【0032】
正値化飽和演算処理命令『MCSST Dm』のオペコードのフォーマットを図5に示す。図5に示すように、正値化飽和演算処理命令『MCSST Dm』は、正値化−飽和幅(丸め幅)指定フィールドと、正値化飽和演算結果の格納先指定フィールドとを含む。
丸め幅フィールドは、『01』『10』『11』が書き込まれることにより、正値化飽和演算処理の丸め幅を24ビット正値、16ビット正値、8ビット正値の何れかに指定する。
【0033】
格納先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2、データレジスタD3の何れかから、正値化飽和演算処理の格納先レジスタを指定する。
このようにROM11に記憶されている伸長処理用プログラムは、行列積サブルーチンに必要な多項式の単項式演算及び代数和演算が積和機能付き乗算命令『MACCB Dm,Dn』により記述され、多項式の積和の正値化飽和演算処理が正値化飽和演算命令『MCSST Dm』を用いて記述されているため、アルゴリズムが非常にコンパクトである。これらの命令はプロセッサのみで表現されるため、ROM11において、伸長処理用プログラムが占めているメモリサイズは非常に少ない。
【0034】
以上でROM11に記憶された命令列についての説明を終える。引き続き図1に示したプロセッサの構成要素についての説明を再開する。
図1の構成図における命令読出し回路12は、読み出し先アドレスを順々に生成してアドレスバスに出力するプログラムカウンタを備え、ROM11からデータバス18に出力される命令をデコーダ13に読み出す。
【0035】
デコーダ13は、データバス18から読み出された命令が複数個蓄えられる命令バッファと、命令バッファに蓄えられている命令のうち、解読対象となるものを保持する命令レジスタとを備え、命令レジスタに格納されている命令の内容を解読して、その命令を実現する制御を演算実行装置14に対して行う。ここでいう制御のうち特に説明が必要なものは、以下に示すレジスタ出力制御(1)、演算実行制御(2)、定数発生制御(3)である。
【0036】
レジスタ出力制御(1)とは、命令読出し回路12によって読み出された算術演算命令、論理演算命令、積和機能付き乗算命令の第1、第2オペランドによって指示されたレジスタの保持値を出力するよう演算実行装置14を制御することである。演算実行制御(2)とは、算術演算命令、論理演算命令、積和機能付き乗算命令により指示される演算内容を実行するよう、演算実行装置14を制御することであり、定数発生制御(3)とは、正値化飽和演算命令を行うための最大値・ゼロ値を発生するよう演算実行装置14を制御することである。レジスタ出力制御(1)及び演算実行制御(2)は、デコーダ13が算術演算命令、論理演算命令、積和機能付き乗算命令を解読した時に行われ、レジスタ出力制御(1)及び定数発生制御(3)は、デコーダ13が正値化飽和演算命令を解読した時に行われる。演算実行制御(2)が発生するのは、積和機能付き乗算命令の解読時であり、定数発生制御(3)が発生するのは、正値化飽和演算命令の解読時であるので、演算実行制御(2)と定数発生制御(3)とは互いに排他的な関係にある。
【0037】
アドレスバス17は32ビット幅を有し、命令読出し回路12が出力する読み出し先アドレスを転送する。
データバス18は32ビット幅を有し、RAM10がデータを出力すると、RAM10から出力されると圧縮データFij、係数データGji、行列積データHijを転送する。
【0038】
演算実行装置14はレジスタファイル、算術論理演算回路を備えデコーダ13による制御に従った演算処理を行う。
ここで注意すべきは、命令読出し回路12は命令読出ステージ、デコーダ13は命令解読ステージを行い、演算実行装置14は、演算実行ステージ、メモリ書込ステージ、レジスタ書込ステージを行うよう構成される。そしてこれらの5つのステージは五段のパイプラインを実現する。命令読出し回路12は、その前の命令の実行完了を待たずに、次の命令がデコーダ13による解読ステージに入った段階で次の命令の読み出しを開始する。デコーダ13も同様であり、その前の命令の実行完了を待たずに、次の命令が演算実行装置14による演算実行ステージに入った段階で次の命令の解読を開始する。これらの処理により、プロセッサは図10に示すような命令読出ステージ、命令解読ステージ、実行ステージ、メモリアクセスステージ、レジスタ書込ステージという五段ステージからなるパイプラインによりROM11に格納された命令列を処理する。
【0039】
プロセッサの構成要素の説明は以上で終了する。続いて演算実行装置14の内部構成に焦点を絞った説明を行う。演算実行装置14の内部構成を図2に示す。図2に示すように演算実行装置14はレジスタファイル1、算術論理演算回路2、正値化飽和演算回路3、符号拡張回路4、符号拡張回路5、積和結果専用レジスタ6、第1内部バス15、及び第2内部バス16から構成される。これらの構成要素とデコーダ13との間には上述の制御(1)(2)(3)のための制御信号線がはりめぐらされているが、簡略を期するためその図示は省略している。
【0040】
レジスタファイル1は、4本の32ビット幅のデータレジスタD0〜D3、3本の32ビット幅のアドレスレジスタA0〜A2を備える。レジスタ出力制御(1)において、一個或は二個のレジスタ名がデコーダ13により指示されると、レジスタファイル1は与えられたレジスタ名のレジスタの保持値をパスC2,C3を介して第1内部バス15及び第2内部バス16上に出力する。またレジスタファイル1は、データバス18上に転送される値をパスC1を介して保持する。
【0041】
第1内部バス15は32ビット幅を有し、レジスタファイル1が出力した32ビット長の保持値を算術論理演算回路2に転送する。
第2内部バス16は32ビット幅を有し、レジスタファイル1が出力した32ビット長の保持値を算術論理演算回路2に転送する。
符号拡張回路4は、第1内部バス15を介してレジスタファイル1から転送されてくるデータレジスタの保持値が負数である場合、符号拡張を行う。本実施形態において乗数,被乗数は符号付き8ビット数値に規定されているので、符号拡張回路4は、8ビット長の負数の符号拡張を行う。例えば第1内部バス15から伝送されてくる保持値が8ビット負数『0x0000_0080』であれば、8ビット目の符号を9ビット〜32ビットに拡張して『0xFFFF_FF80』として算術論理演算回路2に出力する。
【0042】
符号拡張回路5は、第2内部バス16を介してレジスタファイル1から転送されてくるデータレジスタの保持値が負数である場合、符号拡張を行う。本実施形態において乗数,被乗数は符号付き32ビット数値に規定されているので、符号拡張回路5は、8ビット長の負数の符号拡張を行う。符号拡張の手法は符号拡張回路4と同様である。
【0043】
算術論理演算回路2は、32ビット幅の全加算器、乗算器、バレルシフタ等から構成され、デコーダ13による演算実行制御(2)に基づき演算を行う。ここで算術論理演算回路2の入力段は符号拡張回路4、積和結果専用レジスタ6の出力段と接続されているため、演算実行制御(2)に基づく演算は、符号拡張回路4に出力されているレジスタの32ビット長の保持値と、積和結果専用レジスタ6に出力されているレジスタの32ビット長の保持値とを対象にして行われる。
【0044】
積和機能付き乗算命令『MACCB Dm,Dn』の解読時には、算術論理演算回路2は、符号拡張回路4から出力される32ビット長の値と符号拡張回路5から出力される32ビット長の値との乗算を行い、64ビット長の乗算結果を出力する。またパスP1上に転送される32ビット長の値と、64ビット乗算結果の下位32ビットとの加算を行い、加算後、32ビット長の加算結果をパスP2上に出力する。
【0045】
尚積和機能付き乗算命令『MACCB D0,D1』の解読時において第1内部バス15及び第2内部バス16には積和機能付き乗算命令『MACCB D0,D1』の第1オペランド及び第2オペランドにて指定された読出先レジスタの保持値が転送されているので、算術論理演算回路2により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われる。また積和機能付き乗算命令『MACCB D0,D1』の解読時において、パスP1には積和結果専用レジスタ6の保持値が転送されるので、データレジスタD0−データレジスタD1の乗算結果は、パスP1上の積和結果専用レジスタ6の保持値と加算されことになる。このように算出された加算結果は、パスP2上に出力される。
【0046】
積和結果専用レジスタ6は、これまでの積和における積和値を保持しており、積和機能付き乗算命令が解読されるとその保持値をパスP1上に出力する。パスP1上の保持値と乗算結果との加算が算術論理演算回路2により行われると、パスP2上に加算結果が新たに出力されるが、積和結果専用レジスタ6は出力された加算結果をラッチして、これを新たな積和値として保持する。尚積和結果専用レジスタ6は、算術論理演算回路2により算出された乗数Fij、被乗数Gjiの乗算結果を符号付き16ビット数値として保持する。
【0047】
正値化飽和演算命令『MCSST』が解読された場合は、積和結果専用レジスタ6は保持値をパスP2上に出力する。
正値化飽和演算回路3は、符号付16ビット数値で表現される積和結果専用レジスタ6の保持値を、正の8ビット整数に丸める実装回路である。図6(a)及び図6(b)は正値化飽和演算回路3による丸め処理を説明するための説明図である。図6(a)において上段は、32ビット幅における乗数、被乗数の表現を示している。即ち黒く塗り潰した第8ビットを符号ビットに割り当てることにより、ハッチングを付した7ビットを用いて、-127〜+127の乗数Fij、被乗数Gjiが表現されている。
【0048】
中段は、32ビット幅における積和結果の表現を示している。即ち黒く塗り潰した第16ビットを符号ビットに割り当てることにより、ハッチングを付した15ビットを用いて-32767〜+32767の範囲において積和値が表現されている。
下段は、プロセッサの32ビット幅における行列積成分の表現を示している。即ちハッチングを付した第1ビット〜第8ビットを符号ビット無しで用いることにより、0〜+255の範囲で行列積成分Hijが表現されている。
【0049】
図6(b)において、左端のグラフはレジスタが保持する乗数,被乗数がとり得る範囲を示し、正負毎に8ビットの範囲を有する。中央のグラフは、積和結果専用レジスタ6が保持する積和値がとり得る範囲を示し、正負毎に16ビットの範囲を有する。左端のグラフは、行列積Hijがとり得る範囲、即ち再生系ハードウェアが再生可能な8ビット正数の範囲である。
【0050】
尚積和値がとり得る範囲を正負毎に16ビットとしているのは丸め誤差の累積を避けるためである。即ち符号有り8ビットの値をとる乗数Fij、被乗数Gjiの乗算結果を積和してゆく際、行列積Hijの範囲が8ビットであるからといって、乗算が行われる度に乗算結果を8ビットに丸めれば、丸め誤差が乗算回数だけ倍増してしまう。丸め誤差の倍増を避ける意味で積和結果専用レジスタ6は積和結果を16bitにし、一行×一列分の乗算が済んだ段階で正値化補正処理を行っている。
【0051】
中央に示す積和結果専用レジスタ6の保持値を、右端に示す8ビット正値に丸めるため、正値化飽和演算回路3は、参照符号y1で指示する範囲(正数であって上限0x000000FFを越えている範囲)を0x000000FFへと丸める。
また正値化飽和演算回路3は、参照符号y2で指示する範囲(負数の範囲)を0x00000000へと丸める。
【0052】
正値化飽和演算回路3の内部構成を図2の破線y8内に示す。図2の破線y8に示すように、正値化飽和演算回路3は定数発生回路21、比較回路22、正負判別回路23、マルチプレクサ24、及びゼロ値発生回路25からなる。これらの構成要素には、デコーダ13からの制御線が接続されているが、その図示は煩雑となるため省略している。
【0053】
定数発生回路21は、命令読出し回路12により読み出された命令が正値化飽和演算命令『MCSST』であるとデコーダ13が解読した場合、当該命令の正値化幅−飽和幅指定フィールドの内容に従って8ビット符号無し数値、16ビット符号無し数値、24ビット符号無し数値の正の最大値を発生する。正値化幅−飽和幅指定フィールドの指定内容が8bitである場合、8ビット符号無し数値の最大値である32ビット符号付き整数0x000000FFをマルチプレクサ24に出力する。正値化幅−飽和幅指定フィールドの指定内容が16ビットである場合、16ビット符号無し数値の最大値である32ビット符号付き整数0x0000FFFFをマルチプレクサ24に出力し、正値化幅−飽和幅指定フィールドの指定内容が24ビットである場合、24ビット符号無し数値の最大値である32ビット符号付き整数0x00FFFFFFをマルチプレクサ24に出力する。
【0054】
比較回路22は、積和結果専用レジスタ6によって保持されている値と、定数発生回路21により出力された最大値との大小を比較する。この比較は定数発生回路21により出力された最大値から積和結果専用レジスタ6に保持されている値を減じ、減じた結果、桁借りが発生したか否かを検知することにより行われる。ここで正値化幅−飽和幅指定フィールドの指定内容が8bitである場合、積和結果専用レジスタ6の保持値から8ビット符号無し数値の最大値である32ビット符号付き整数0x000000FFを減じる。また正値化幅−飽和幅指定フィールドの指定内容が16ビットである場合、積和結果専用レジスタ6の保持値から16ビット符号無し数値の最大値である32ビット符号付き整数0x0000FFFFを減じる。正値化幅−飽和幅指定フィールドの指定内容が24ビットである場合、積和結果専用レジスタ6の保持値から24ビット符号無し数値の最大値である32ビット符号付き整数0x00FFFFFFを減じる。
【0055】
このような減算の結果桁借りが検知され、積和結果専用レジスタ6が保持している値が最大値を上回っていると判定された場合は論理値『1』をマルチプレクサ24に出力する。積和結果専用レジスタ6が保持している値が最大値と等しいか或はこれを下回っていると判定された場合は、論理値『0』をマルチプレクサ24に出力する。
【0056】
正負判別回路23は、積和結果専用レジスタ6によって保持されている値の符号ビットがONであるかを判定する。ここで正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定には、24ビット符号無し数値、16ビット符号無し数値、8ビット符号無し数値の三通りがあり、フィールド指定の如何によって符号ビットの位置が変わる。そこで正負判別回路23は、正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定に従ってONを判定すべきビットを変更する。
【0057】
ここで正負判別回路23は正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が24ビット符号無し数値なら下位から第24ビット目がオンであるかを判定し、正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が16ビット符号無し数値なら下位から第16ビット目がオンであるかを判定する。正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が8ビット符号無し数値なら下位から第8ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ6に蓄積されている積和値を正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定に従った値にて表現した場合、負数として表現されるかの判定を意味する。負数である場合は論理値『1』をマルチプレクサ24に出力する。保持されている値がゼロ或は正数である場合は論理値『0』をマルチプレクサ24に出力する。
【0058】
ゼロ値発生回路25は、解読結果が正値化飽和演算処理命令『MCSST』であれば、整数『0x0000 0000』を発生する。
マルチプレクサ24は、比較回路22及び正負判別回路23から出力された論理値の組み合わせに応じて、定数発生回路21が発生した最大値、ゼロ値発生回路25が発生したゼロ値『0x0000 0000』、積和結果専用レジスタ6によって保持されているレジスタファイル1の保持値のうち何れかを選択的に出力する。
【0059】
ここで比較回路22から出力される論理値を論理値x、正負判別回路23から出力される論理値を論理値yとすると、これらの論理値の組み合わせと、マルチプレクサ24からの出力値との対応関係は図7の真理値表のように表現される(尚図7の真理値表においては定数発生回路21が発生した最大値を『0x0000_00FF』としている。)。
【0060】
図7の真理値表によれば、比較回路22の出力が『0』であり、正負判別回路23の出力が『0』である場合、マルチプレクサ24は積和結果専用レジスタ6の保持値を出力する。
比較回路22の出力が『1』であり、正負判別回路23の出力が『0』である場合、マルチプレクサ24は定数発生回路21が発生した最大値『0x0000_00FF』を出力する。
【0061】
比較回路22の出力が『0』であり、正負判別回路23の出力が『1』である場合、マルチプレクサ24はゼロ値発生回路25が発生したゼロ値『0x0000_0000』を出力する。比較回路22の出力が『1』であり、正負判別回路23の出力が『1』である場合、マルチプレクサ24はゼロ値発生回路25が発生したゼロ値『0x0000_0000』を出力する。
【0062】
図8及び図9は、演算実行装置14におけるデータの流れを示した説明図である。図8においてデータレジスタD0及びデータレジスタD1を乗数、被乗数の読み出し先に指定した積和機能付き乗算命令『MACCB D0,D1』をデコーダ13が解読したとする。この場合、レジスタファイル1に格納されているデータレジスタD0の保持値『0x0000007F』及びデータレジスタD1の保持値『0x00000070』が第1内部バス15及び第2内部バス16を転送して、符号拡張回路4及び符号拡張回路5に与えられる。符号拡張回路4及び符号拡張回路5から出力された32ビット数値同士の乗算を算術論理演算回路2(ここでの算術論理演算回路2の動作は乗算であるので、図中では算術論理演算回路2を『乗算器』と記述している。)は行い、その乗算結果である64ビット数値『0x0000_0000_0000_3790』の下位32ビット『0x0000_3790』を積和結果専用レジスタ6に出力する。正値化飽和演算命令『MCSST D1』の解読により、積和結果専用レジスタ6がその保持値を正値化飽和演算回路3に出力すると、正値化飽和演算回路3はその32ビット『0x0000_3790』が、符号無し8ビット数値の最大値『0x000000FF』より大きいことを判定し、符号無し8ビット数値の最大値『0x000000FF』をデータバス18を介してレジスタファイル1内のデータレジスタD1に保持させる。
【0063】
図9においてデータレジスタD0及びデータレジスタD1を乗数、被乗数の読み出し先に指定した積和機能付き乗算命令『MACCB D0,D1』をデコーダ13が解読したとする。この場合、レジスタファイル1に格納されているデータレジスタD0の保持値『0x0000007F』及びデータレジスタD1の保持値『0x00000080』が第1内部バス15及び第2内部バス16を転送して、符号拡張回路4及び符号拡張回路5に与えられる。データレジスタD1の保持値『0x00000080』は、8ビット数値の負数であるから、符号拡張回路5はデータレジスタD1の保持値『0x00000080』の8ビット目の符号ビットを9ビット〜32ビットに拡張して『0xFFFF_FF80』として算術論理演算回路2に出力する。
【0064】
符号拡張回路4から出力されたデータレジスタD0の32ビット長の保持値『0x0000007F』と、符号拡張回路5により拡張された32ビット数値『0xFFFF_FF80』との乗算を算術論理演算回路2は行い、その乗算結果である64ビット数値『0xFFFF_FFFF_FFFF_C080』の下位32ビット『FFFF_C080』を積和結果専用レジスタ6に出力する。正値化飽和演算命令『MCSST D1』の解読により、積和結果専用レジスタ6がその保持値を正値化飽和演算回路3に出力すると、正値化飽和演算回路3はその32ビット『FFFF_C080』が、符号付き16ビット数値の負数であることを判定し、8ビット数値のゼロ値『0x00000000』をデータバス18を介してレジスタファイル1内のデータレジスタD1に保持させる。
【0065】
以上のように構成されたプロセッサが、行列積サブルーチンに基づいて動作する様子を以下に説明する。命令読出し回路12により行列積サブルーチンに含まれる転送命令がデコーダ13内の命令バッファ内へと読み出され、デコーダ13が読み出された命令5:『MOV (A0),D0』を解読する。この命令5:『MOV (A0),D0』は、アドレスレジスタA0を用いて読出先を指定したレジスタ間接参照を用いて、RAM10からのデータ読み出しを指示する転送命令であり、これに基づいて、RAM10に記憶されている8×8の行列状成分からなる圧縮データFijの1行1列成分(F11)がデータレジスタD0上に読み出される。命令5:『MOV (A0),D0』の後に配置されている命令6:『MOV (A1),D1』の実行により8×8の係数データGjiの1行1列成分(G11)がデータバス18を介してレジスタファイル1内のデータレジスタD1上に読み出される。
【0066】
行列積サブルーチンには、命令5:『MOV (A0),D0』及び命令6:『MOV (A1),D1』に続いて命令7として積和機能付き乗算命令『MACCB D0,D1』が並んでおり、これが命令読出し回路12により、デコーダ13内の命令バッファ内へと読み出され、デコーダ13が読み出された積和機能付き乗算命令『MACCB D0,D1』を解読する。解読結果に基づき、データレジスタD0及びデータレジスタD1に保持されているF11,G11が第1内部バス15及び第2内部バス16上に転送される。
【0067】
積和機能付き乗算命令『MACCB D0,D1』の解読時において第1内部バス15及び第2内部バス16には、積和機能付き乗算命令『MACCB D0,D1』の第1オペランド及び第2オペランドにて指定された読出先レジスタの保持値F11,G11が転送されている。これらは、符号拡張回路4及び符号拡張回路5により出力され、算術論理演算回路2により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われる。乗算結果『G11*F11』は積和結果専用レジスタ6に転送され、積和結果専用レジスタ6により保持される。
【0068】
積和結果専用レジスタ6に乗算結果『G11*F11』が格納されると、命令8:『CMP NUMBER,D2』及び命令9:『BCS LP1_NEXT』の実行によりラベルLP1_NEXTに分岐し、命令13:『ADD 1,D2』を解読する。この命令13:『ADD 1,D2』は繰り返し回数をインクリメントするものである。命令13:『ADD 1,D2』の実行後、命令14:『ADD 1,A0』及び命令15:『ADD ROW1,A1』を実行する。命令14:『ADD 1,A0』及び命令15:『ADD ROW1,A1』はROM11における読み出し先アドレスを次列及び次行に移行させる目的で配置されている。これらの命令のインクリメントにより圧縮データFijの読み出し先アドレスは2行1列となり、係数データGjiの読み出し先アドレスは、1行2列となる。
【0069】
読み出し先アドレスのインクリメント後、命令14:『ADD 1,A0』及び命令15:『ADD ROW1,A1』の直後に配されている命令16:『BRA LP1_START』を解読する。
この命令16:『BRA LP1_START』の分岐先アドレスは、ラベルLP1_STARTが付された命令5:『MOV (A0),D0』であり、命令16:『BRA LP1_START』による分岐により命令5:『MOV (A0),D0』、命令6:『MOV (A1),D1』が再度読み出される。
【0070】
読み出された転送命令により、RAM10に記憶されている8×8の行列状成分からなる圧縮データの2行1列成分(F21)がデータレジスタD0上に読み出され、8×8の係数データの1行2列成分(G12)がデータバス18を介してレジスタファイル1内のデータレジスタD1上に読み出される。
行列積サブルーチンには、転送命令に続いて積和機能付き乗算命令『MACCB D0,D1』が並んでおり、これが命令読出し回路12により、デコーダ13内の命令バッファ内へと読み出され、デコーダ13により読み出された積和機能付き乗算命令『MACCB D0,D1』が解読される。解読結果に基づき、データレジスタD0及びデータレジスタD1の保持値が第1内部バス15及び第2内部バス16上に転送される。
【0071】
積和機能付き乗算命令『MACCB D0,D1』の解読時において第1内部バス15及び第2内部バス16には、積和機能付き乗算命令『MACCB D0,D1』の第1オペランド及び第2オペランドにて指定された読出先レジスタの保持値が転送されている。これらは行列成分G12,F21であり、算術論理演算回路2によりデータレジスタD0の保持値G12と、データレジスタD1の保持値F21との乗算が行われる。一方積和結果専用レジスタ6には、これまでの積和における単項式の演算結果『G11*F11』が格納されている。積和結果専用レジスタ6は、積和機能付き乗算命令『MACCB D0,D1』の解読により、その保持値をパスP1上に出力する。
【0072】
パスP1には積和結果専用レジスタ6の保持値が転送されるので、データレジスタD0−データレジスタD1の乗算結果『G12*F21』は、パスP1上の積和結果専用レジスタ6の保持値と加算されることになる。加算結果は、パスP2上に出力される。
パスP1上の保持値『G11*F11』と乗算結果『G12*F21』との加算が算術論理演算回路2により行われると、パスP2上に加算結果『G11*F11+G12*F21』が新たに出力されるが、積和結果専用レジスタ6は出力された加算結果を出力して、積和値『G11*F11+G12*F21』として保持する。
【0073】
以上の処理が8×8の行列状成分からなる圧縮データFijの第1列の全ての成分、8×8の係数データGjiの第1行の全ての成分について繰り返される。この繰り返しにより、『G11*F11+G12*F21+G13*F31+G14*F41+G15*F51+G16*F61+G17*F71+G18*F81』という積和演算が完了し、積和値が積和結果専用レジスタ6に得られる。ここで留意しておきたいのは、RAM10に記憶されているF31は、実は伝送時にビット誤りを起こしたため、積和結果専用レジスタ6に保持されている積和値は再生系ハードウェアが再生可能な範囲を遙かに越えた数値(『0x000078FF』)で表現されている点である。
【0074】
しかしながら、ROM11内の行列積サブルーチンはこのようなビット誤りを念頭においており、積和機能付き乗算命令『MACCB D0,D1』の繰り返しを行うループ文の後に正値化飽和演算命令『MCSST D1』を配している。
ROM11においてループ文の後に配されている正値化飽和演算命令『MCSST D1』がデコーダ13内の命令バッファへと読み出されると、正値化飽和演算命令『MCSST D1』がデコーダ13により解読される。
【0075】
正値化飽和演算命令『MCSST D1』が解読された場合は、積和結果専用レジスタ6は保持値(0x000078FF)をパスP1上に出力する。
パスP1への出力が行われると、デコーダ13により比較回路22が起動される。比較回路22は積和結果専用レジスタ6の保持値と、32ビット符号付き整数0x000000FFとの大小を比較する。この場合、積和結果専用レジスタ6の保持値が最大値0x000000FFを上回っているので、論理値『1』をマルチプレクサ24に出力する。
【0076】
正負判別回路23は、積和結果専用レジスタ6によって保持されている値の下位から16ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ6に蓄積されている積和値が負数であるかの判定を意味する。保持値(0x000078FF)の2進数表現は、(0000_0000 0000_0000 0111_1000 1111_1111)であり、下位から16ビット目は『0』なので論理値『0』をマルチプレクサ24に出力する。
【0077】
この際、定数発生回路21及びゼロ値発生回路25により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ24は、上限値、ゼロ値、積和結果専用レジスタ6の保持値の何れか一つを比較回路22及び正負判別回路23から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路22の出力が『1』であり、正負判別回路23の出力が『0』であるので、マルチプレクサ24は定数発生回路21が発生した最大値『0x0000_00FF』をデータバス18上に出力する。
【0078】
デコーダ13の制御により、データバス18上に出力された保持値は、正値化飽和演算命令『MCSST D1』のオペランドで指定されているデータレジスタD1へと転送され、データレジスタD1により保持される。保持された保持値は、行列積Hijの1行1列目の成分(H11)としてRAM10内に書き込まれる。
圧縮データFijの第1列の全成分と、Gjiの第1行の全成分との積和演算が終了する。続いて圧縮データFijの第2列の全成分と、Gjiの第1行の全成分についての積和演算が行われ、『G11*F12+G12*F22+G13*F32+G14*F42+G15*F52+G16*F62+G17*F72+G18*F82』という積和演算が完了し、積和値が積和結果専用レジスタ6に得られたものとする。
【0079】
ここで留意しておきたいのは、RAM10に記憶されているF32は、実は伝送時にビット誤りを起こしており、積和結果専用レジスタ6に記憶されている積和値は再生系ハードウェアが再生不可能な負数(『0x000086FF』)で表現されている点である。
ROM11は、ループ文の後に配されている正値化飽和演算命令『MCSST D1』をROM11からデコーダ13内の命令バッファに読み出すと、正値化飽和演算命令『MCSST D1』のオペランドがデコーダ13により解読される。
【0080】
正値化飽和演算命令『MCSST D1』が解読された場合は、積和結果専用レジスタ6は保持値(0x000086FF)をパスP1上に出力する。
パスP1への出力が行われると、デコーダ13により比較回路22が起動される。比較回路22は積和結果専用レジスタ6の保持値と、32ビット符号付き整数0x000000FFとの大小を比較する。この場合、積和結果専用レジスタ6の保持値が最大値0x000000FFを上回っているので、論理値『1』をマルチプレクサ24に出力する。
【0081】
正負判別回路23は、積和結果専用レジスタ6によって保持されている値の第16ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ6に蓄積されている積和値が負数であるかの判定を意味する。保持値(0x000086FF)の2進数表現は、(0000_0000 0000_0000 1000_0110 1111_1111)であり、16ビット目は『1』なので論理値『1』をマルチプレクサ24に出力する。
【0082】
この際、定数発生回路21及びゼロ値発生回路25により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ24は、これらか或は積和結果専用レジスタ6の保持値を比較回路22、正負判別回路23から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路22の出力が『1』であり、正負判別回路23の出力が『1』であるので、マルチプレクサ24は定数発生回路21が発生した最大値『0x0000_0000』をデータバス18上に出力する。
【0083】
デコーダ13の制御により、データバス18上に出力された保持値は、正値化飽和演算命令『MCSST D1』のオペランドで指定されているデータレジスタD1へと転送され、データレジスタD1により保持される。保持された値は、行列積Hijの1行2列目の成分(H12)としてROM11内に書き込まれる。
同様の行列積の成分の書き込みが繰り返されて、行列積結果がRAM10内に得られ、この行列積結果を逆DCTの近似計算結果として利用することにより、圧縮データの伸長処理がなされる。
【0084】
図11はプロセッサが機械語命令を命令読出ステージ、命令解読ステージ、実行ステージ、メモリアクセスステージ、レジスタ書込ステージという五段ステージからなるパイプラインにより行列積ルーチンを実行している様子を示す。デコーダ13による命令10:『MCSST D1』のフェッチステージは、その前の機械語命令命令9:『BCS LP1_NEXT』のデコードステージと同時に行われている。命令8:『CMP NUMBER,D2』においてはデータレジスタD2に格納された繰返回数から総回数NUMBERを減じる演算が行われているので、減算の結果キャリーフラグがONになれば命令13:『ADD 1,D2』に分岐するため命令10:『MCSST D1』の実行ステージへの移行を中断する。
【0085】
これに対してキャリーフラグがOFFであれば命令9:『BCS LP1_NEXT』の実行ステージと同時に、命令10:『MCSST D1』の解読ステージが行われる。続いて命令9:『BCS LP1_NEXT』のメモリ書込ステージと同時に、命令10:『MCSST D1』の実行ステージが行われる。一行成分×一列成分の行列積結果についての正値化飽和演算処理は、その前に位置する命令のメモリ書込ステージにおいて実行されるのでパイプラインを乱さずに行われていることがわかる。
【0086】
このように正値化飽和演算回路3を内蔵したプロセッサは、一行成分×一列成分の行列積結果について成分を高頻度に行う必要があっても、機械語プログラムにおいて正値化飽和演算補正処理が一命令として表現されているのでパイプラインが乱れることはない。従ってプロセッサ全体の処理を高速化することができる。
【0087】
以上のように本実施形態によれば、積和値の正値化飽和演算処理のための専用命令により、積和結果専用レジスタ6内に得られた積和値に正値化飽和演算処理を施すので、画像データ、音声データの伸長処理に必要となる行列積近似計算のアプリケ−ションプログラムがより簡易にコーディングでき、そのコード量も非常に少なくなる。このコード量が軽減されるため、プログラムをROMに実装する場合はその実装量を軽減することができる。
【0088】
また積和値の正値化飽和演算処理は、積和結果専用レジスタ6に格納されている積和値に対しての正値化処理と飽和演算処理とを同時に行うため、高速である。正値化飽和演算処理は、行列積演算における1行成分×1列成分の計算の際に必要であり、8×8行列同士の行列積においては、64回もの正値化飽和演算処理の実行が必要となるが、上記のように正値化処理及び飽和演算処理は非常にスムーズに行われるので、一回当たりの正値化飽和演算処理が短時間で完了する。このように正値化飽和演算処理が短時間で完了するので、膨大な数の行列積の繰り返しが必要となる画像データ、音声データの伸長処理をより高速化することができる。
【0089】
更に正値化飽和演算回路3を実装することにより分岐命令を用いずに正値化処理−飽和演算処理を記述することができるので、プロセッサの内部がパイプラインによる高速化を実行している場合にパイプラインを乱すことはなく命令列の高速化を図ることができる。ハイパフォーマンスなパイプラインの実行による命令列実行の高速化を図ることができる。
【0090】
加えて、行列積演算を実現する専用回路を内蔵することなく正値化飽和演算処理が行われので、プロセッサ特有の汎用性は残っている。そのため独自の伸長処理プログラムにてプロセッサを制御させたいという願望にこたえることができる。
(第1実施形態の応用例)
本応用例は、正値化飽和演算命令『MCSST』による正値化飽和演算処理の読出先にデータレジスタD0〜データレジスタD2を指定し、演算結果の格納先に積和結果専用レジスタ6を指定するものである。本応用例における正値化飽和演算命令『MCSST』の命令フォーマットを図12に示す。図12における正値化飽和演算命令MCSSTは読出先指定フィールドを有し、『11』『00』『10』『01』の値を書き込むことにより、積和値の読出先を積和結果専用レジスタ6、データレジスタD0、データレジスタD1、データレジスタD2の何れかに変更することができる。
【0091】
格納先指定フィールドは、『11』『00』『01』『10』が書き込まれることにより、積和結果専用レジスタ6、データレジスタD0、データレジスタD1、データレジスタD2の何れかを格納先に指定する。
正値化飽和演算命令『MCSST』の命令フォーマットを改変したので、図2に示した演算実行装置14の内部は、図13に示すように変更される。図13において演算実行装置14に加えられた変更点は、パスC6、パスC7、パスC8及びセレクタ30が追加されている点である。
【0092】
パスC6は第2内部バス16にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値を正値化飽和演算回路3へと転送するためのパスである。
パスC7もパスC6同様、第1内部バス15にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値を正値化飽和演算回路3へと転送するためのパスである。
【0093】
セレクタ30は、パスC6及びパスC7にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値、積和結果専用レジスタ6の保持値の何れか一つを正値化飽和演算命令『MCSST』における格納先フィールドの指定に基づいて選択的に正値化飽和演算回路3内の比較回路22へと出力する。
パスC8はパスC4を介して正値化飽和演算回路3からデータバス18に出力される正値化飽和演算回路3の処理結果を積和結果専用レジスタ6に転送するためのパスである。
【0094】
以上の簡易な追加により、本応用例では正値化飽和演算命令『MCSST』の機能拡張を実現することができる。
(第2実施形態)
第2実施形態は、算術論理演算回路2による乗算時において、乗算結果に対する正値化飽和演算処理を行う実施形態である。乗算結果の正値化飽和演算処理を行うため、第2実施形態では、図14の内部構成図に示すように、算術論理演算回路2が出力した乗算結果に対して正値化飽和演算を行うよう、正値化飽和演算回路3が算術論理演算回路2の出力段とパスP3を介して接続されている。このように接続された正値化飽和演算回路3を起動するため、本実施形態ではROM11に記憶されている圧縮データ伸長プログラムは、以下の『MULBSST Dm,Dn』を含んでいる。
【0095】
『MULBSST Dm,Dn』とは、乗算結果に対する正値化飽和演算処理を拡張機能として指定した乗算命令である。即ちDmレジスタとDnレジスタの下位8ビットを用いて乗算を行い、乗算結果である符号付16ビット数値に対して,8ビットの正値化飽和演算処理を正値化飽和演算回路3に命じる。
図15は、正値化飽和演算付き乗算命令『MULBSST Dm,Dn』のフォーマットを示す図であり、『MULBSST Dm,Dn』は図15に示すように、2ビット長の単項式の演算内容指定フィールドと、2ビット長の乗数読出先指定フィールドと、2ビット長の被乗数読出先指定フィールドと、正値化飽和演算結果の格納先指定フィールドとを含む。
【0096】
正値化飽和演算処理フィールドは、『01』『10』『11』が書き込まれることにより、正値化飽和演算処理の丸め幅を24ビット正値、16ビット正値、8ビット正値の何れかに指定する。乗数読出先指定フィールド及び被乗数読出先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2の何れかから、乗数Fij、被乗数Gjiの読み出し先レジスタを指定する。
【0097】
正値化飽和演算付き乗算命令『MULBSST Dm,Dn』が実行されると、レジスタファイル1は、第1オペランド及び第2オペランドで指示されているレジスタ名の保持値を出力する。次に演算回路2はレジスタDmとDnの値を乗算し、その乗算結果を出力する。この乗算結果に対する正値化飽和演算処理が第1実施形態同様正値化飽和演算回路3により行われ、正値化飽和演算処理の結果が正値化飽和乗算命令の第2オペランドに指定されているレジスタに転送される。
【0098】
以上のように構成されたプロセッサが、行列積サブルーチンに基づいて動作する様子を説明する。命令読出し回路12により行列積サブルーチンに含まれる転送命令がデコーダ13内の命令バッファ内へと読み出され、デコーダ13が読み出された転送命令を解読する。これに基づいて、RAM10に記憶されている8×8の行列状成分からなる圧縮データFijの1行1列成分(F11)がデータレジスタD0上に読み出され、8×8の係数データGjiの1行1列成分(G11)がデータバス18を介してレジスタファイル1内のデータレジスタD1上に読み出される。
【0099】
行列積サブルーチンには、転送命令に続いて正値化飽和演算付き乗算命令『MULBSST D0,D1』が並んでおり、これが命令読出し回路12により、デコーダ13内の命令バッファ内へと読み出され、デコーダ13が読み出された正値化飽和演算付き乗算命令『MULBSST D0,D1』を解読する。解読結果に基づき、データレジスタD0及びデータレジスタD1に保持されているF11,G11が第1内部バス15及び第2内部バス16上に転送される。
【0100】
正値化飽和演算付き乗算命令『MULBSST D0,D1』の解読時において第1内部バス15及び第2内部バス16には正値化飽和演算付き乗算命令『MULBSST D0,D1』の第1オペランド及び第2オペランドにて指定された読出先レジスタの保持値F11,G11が転送されているので、算術論理演算回路2により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われて、その乗算結果がパスP3上に出力される(尚、上記F11は、ビット誤りを起こしており、G11*F11の乗算結果は、『0x000078FF』という、1バイトで表現できない数値になっているものとする。)
一方、デコーダ13は正値化飽和演算付き乗算命令『MULBSST D0,D1』を解読すると、デコーダ13は正値化飽和演算回路3を起動する。この起動によって、第1実施形態同様、比較回路22により乗算結果の値と、32ビット符号付き整数0x000000FFとの大小比較が行われる。この場合、乗算結果の値が最大値0x000000FFを上回っているので、比較回路22は論理値『1』をマルチプレクサ24に出力する。
【0101】
正負判別回路23は、乗算結果の値の第16ビット目がオンであるかを判定する。この判定は、乗算結果の値が負数であるかの判定を意味する。保持値(0x000078FF)の2進数表現は、(0000_0000 0000_0000 0111_1000 1111_1111)であり、16ビット目は『0』なので論理値『0』をマルチプレクサ24に出力する。
【0102】
この際、定数発生回路21及びゼロ値発生回路25により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ24は、上限値、ゼロ値、乗算結果の値の何れか一つを比較回路22、正負判別回路23から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路22の出力が『1』であり、正負判別回路23の出力が『0』であるので、マルチプレクサ24は定数発生回路21が発生した最大値『0x0000_00FF』をデータバス18上に出力する。
【0103】
デコーダ13の制御により、データバス18上に出力された保持値は、正値化飽和演算命令『MULBSST D0』のオペランドで指定されているデータレジスタD0へと転送され、データレジスタD0により保持される。
以上のように第2実施形態によれば、符号付き演算結果に対する飽和演算処理と正値化処理とを共に行う演算命令を用意することにより、演算処理と、正値化処理と、飽和演算処理との3つの処理を1ステップで処理することができ、これにより正値化飽和演算処理が演算処理と同じステップで実行する。このため、正値化飽和演算処理の実行ステップ数は実質0となる。
【0104】
なお、本発明の第二の実施の形態では符号なし8ビット幅での丸めを行っているが、上限値は任意の正の整数値を設定してもよい。
【0105】
【発明の効果】
本発明におけるプロセッサは、命令列における命令を解読するデコーダと、前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記補正命令のオペコードを解読することによりビット長 s を認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付き m ビット整数値を、 s ビット長の符号無し整数の範囲 (s m) に飽和させるよう、正値化飽和演算手段を制御することを特徴としており、このように構成されたプロセッサによれば、値の丸め処理が、命令列に含まれている補正命令の検出時に一度に行われるので、丸め処理のためにプログラマが記述する命令量は一命令で済む。
【0106】
丸め処理が一つの補正命令に基づいて一度に行われるので、一回当たりの実行時間が極めて短く、たとえ演算値の丸め処理が、データの伸長処理において頻繁に必要となっても、これらの処理が原因でデータの伸長時間が長引くことはない。
丸め処理の実行には、補正命令を実行すればよいので、プロセッサがパイプライン処理の導入により積和の高速化を行おうとしている場合に、パイプラインをみだりに乱すことはない。従って、少ないハードウェアの追加にて命令列のコードサイズの縮小と、命令列実行の高速化を図ることができる。
【0107】
ここでプロセッサは、命令列における命令を解読するデコーダと、デコーダにより解読された命令が演算命令であるなら、mビット整数値を用いた演算を行う演算手段と、前記演算命令の演算結果である符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記演算命令のオペコードを解読することにより、ビット長sを認識するとともに、演算手段の演算結果である符号付きmビット整数値を、sビット長の符号無し整数の範囲(s<m)に飽和させるよう、正値化飽和演算手段を制御してもよい。
【0108】
本プロセッサによれば、符号付き演算結果に対する丸め処理を行う補正命令を用意することにより、演算処理と、丸め処理との2つの処理を1ステップで処理することができ、これにより正値化飽和演算処理が演算処理と同じステップで実行する。このため、正値化飽和演算処理の実行ステップ数を実質0とすることができる。
【図面の簡単な説明】
【図1】本発明の第1実施形態におけるプロセッサの構成図である。
【図2】第1実施形態における演算実行装置14の構成図である。
【図3】第1実施形態における行列積サブルーチンを構成する命令列を示す図である。
【図4】積和機能付き乗算命令『MACCB D0,D1』の命令フォーマットを示す図である。
【図5】正値化飽和演算命令『MCSST』の命令フォーマットを示す図である。
【図6】(a)32ビット幅における乗数、被乗数、積和値、行列積成分の表現を示す図である。
(b)正値化飽和演算回路3がどのように積和値を丸めるかを示す説明図である。
【図7】定数発生回路21、ゼロ値発生回路25の出力値の組み合わせと、マルチプレクサ24の出力との関係を示す真理値表を示す図である。
【図8】32×32bitの乗算−積和器で8×8bitの乗算を行う場合のデータの流れを説明するための説明図である。
【図9】32×32bitの乗算−積和器で8×8bitの乗算を行う場合のデータの流れを説明するための説明図である。
【図10】図1に示すプロセッサの内部により行われるパイプライン処理の一例を示す図である。
【図11】図1に示すプロセッサの内部により行列積サブルーチンがパイプライン処理により実行される様子を示す図である。
【図12】第1実施形態の応用例における正値化飽和演算命令『MCSST』の命令フォーマットを示す図である。
【図13】第1実施形態の応用例における演算実行装置14の内部を示す図である。
【図14】第2実施形態における演算実行装置14の構成図である。
【図15】正値化飽和演算付き乗算命令『MULBSST Dm,Dn』の命令フォーマットを示す図である。
【図16】従来技術において、積和結果専用レジスタ62が設けられている算術演算回路61を示す図である。
【図17】 8×8成分からなる行列の行列積をとる様子を説明するための説明図である。
【符号の説明】
1 レジスタファイル
2 算術論理演算回路
3 正値化飽和演算回路
4 符号拡張回路
5 符号拡張回路
6 積和結果専用レジスタ
10 RAM
11 ROM
12 命令読み出し回路
13 デコーダ
14 演算実行装置
15 内部バス
16 内部バス
17 アドレスバス
18 データバス
21 定数発生回路
22 比較回路
23 正負判別回路
24 マルチプレクサ
25 ゼロ値発生回路
30 セレクタ

Claims (13)

  1. 命令列中の命令を逐次解読し実行するプロセッサであって、 命令列における命令を解読するデコーダと、
    前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、
    前記デコーダは、
    前記補正命令のオペコードを解読することによりビット長sを認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付きmビット整数値を、sビット長の符号無し整数の範囲(s<m)に飽和させるよう、正値化飽和演算手段を制御する
    ことを特徴とするプロセッサ。
  2. 前記正値化飽和演算手段は、
    前記オペランドで指定された格納先に存在する符号付きmビット整数が、負数であるか否かを判定する第1判定回路と、
    前記符号付きmビット整数が、符号無しsビット整数の最大値を越えているか否かを判定する第2判定回路とを備え、
    前記第1判定回路による判定、及び、第2判定回路による判定は、前記デコーダが補正命令を解読したことによりなされる
    ことを特徴とする請求項1記載のプロセッサ。
  3. 前記符号付きmビット整数値の格納先を示すオペランドは第1オペランドであり、補正命令は、この第1オペランドの他に、正値化飽和演算手段による飽和結果の転送先を示す第2オペランドを有し、
    第1判定回路が負数であると判定した場合、sビット整数で表現されたゼロを第2オペランドに示される転送先に転送し、
    第2判定回路が最大値を越えていると判定した場合、sビット整数の正の最大値を第2オペランドに示される転送先に転送し、
    第1判定回路が正数であると判定し、尚且つ第2判定回路が最大値を越えていないと判定した場合、第1オペランドで指定された格納先に格納されている数値を、第2オペランドに示される転送先に転送する転送手段
    を備えることを特徴とする請求項2記載のプロセッサ。
  4. 前記第1判定回路は
    格納先に格納された符号付きmビット整数における符号ビットのオン/オフを検知する検知部を備え、
    前記第2判定回路は、
    格納先に格納された符号付きmビット整数からsビット整数の正の最大値を減じる減算を実施できる演算器を備える
    ことを特徴とする請求項3記載のプロセッサ。
  5. 前記mビット整数は32ビットであり、
    前記補正命令のオペコードによって定まるビット長sは、8ビット、16ビット、24ビットの何れかであり、
    前記第1判定回路における検知部は、
    前記mビット整数の最上位ビットを符号ビットとして決定し、
    前記第2判定回路の演算器は、
    符号無し8ビット整数の最大値、符号無し16ビット整数の最大値、符号無し24ビット整数の最大値の何れかを発生する発生部を備える
    ことを特徴とする請求項4記載のプロセッサ。
  6. 前記プロセッサは、
    専用レジスタと、
    命令列に含まれている演算命令に従って演算を行い、演算結果を専用レジスタに保持されている演算結果に加算する演算手段とを備え、
    補正命令における第1オペランドは、前記専用レジスタを指定している
    ことを特徴とする請求項3記載のプロセッサ。
  7. 前記プロセッサは、複数の汎用レジスタからなるレジスタファイルを備え、
    補正命令の第2オペランドは、レジスタファイル内の何れかの汎用レジスタを飽和結果の転送先に指定している
    ことを特徴とする請求項3記載のプロセッサ。
  8. 命令列中の命令を逐次解読し実行するプロセッサであって、
    命令列における命令を解読するデコーダと、
    デコーダにより解読された命令が演算命令であるなら、mビット整数値を用いた演算を行う演算手段と、
    前記演算命令の演算結果である符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、
    前記デコーダは、
    前記演算命令のオペコードを解読することにより、ビット長sを認識するとともに、演算手段の演算結果である符号付きmビット整数値を、sビット長の符号無し整数の範囲(s<m)に飽和させるよう、正値化飽和演算手段を制御する
    ことを特徴とするプロセッサ。
  9. 前記正値化飽和演算手段は、
    前記演算手段による演算結果が、負数であるか否かを判定する第1判定回路と、
    前記演算手段による演算結果が、符号無しsビット整数の最大値を越えているか否かを判定する第2判定回路とを備え、
    前記第1判定回路による判定、及び、第2判定回路による判定は、前記デコーダが演算命令を解読したことによりなされる
    ことを特徴とする請求項8記載のプロセッサ。
  10. 前記プロセッサは、
    第1判定回路が負数であると判定した場合、sビット整数で表現されたゼロを演算命令のオペランドに示される転送先に転送し、
    第2判定回路が最大値を越えていると判定した場合、sビット整数の正の最大値を演算命令のオペランドに示される転送先に転送し、
    第1判定回路が正数であると判定し、尚且つ第2判定回路が最大値を越えていないと判定した場合、演算手段の演算結果を演算命令のオペランドに示される転送先に転送する転送手段
    を備えることを特徴とする請求項9記載のプロセッサ。
  11. 前記第1判定回路は
    演算手段の符号ビットのオン/オフを検知する検知部を備え、
    前記第2判定回路は、
    演算手段の演算結果から、符号無しsビット整数の正の最大値を減じる減算を実施できる演算器を備える
    ことを特徴とする請求項10記載のプロセッサ。
  12. 演算手段による演算結果は32ビットであり、
    前記演算命令のオペコードによって定まるビット長sは、8ビット、16ビット、24ビットの何れかであり、
    前記第1判定回路における検知部は、
    演算結果の最上位ビットを符号ビットとして決定し、
    前記演算器は、
    演算命令のオペコードに従って、符号無し8ビット整数の最大値、符号無し16ビット整数の最大値、符号無し24ビット整数の最大値の何れかを発生する発生部
    を備えることを特徴とする請求項11記載のプロセッサ。
  13. 前記プロセッサは、
    複数の汎用レジスタからなるレジスタファイルを備え、
    演算命令は、飽和結果の転送先をレジスタファイル内の何れかの汎用レジスタに指定するオペランドを有する
    ことを特徴とする請求項10記載のプロセッサ。
JP32786697A 1996-11-29 1997-11-28 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ Expired - Lifetime JP3790619B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP32786697A JP3790619B2 (ja) 1996-11-29 1997-11-28 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP32042396 1996-11-29
JP8-320423 1996-11-29
JP32786697A JP3790619B2 (ja) 1996-11-29 1997-11-28 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ

Publications (2)

Publication Number Publication Date
JPH10214186A JPH10214186A (ja) 1998-08-11
JP3790619B2 true JP3790619B2 (ja) 2006-06-28

Family

ID=18121299

Family Applications (1)

Application Number Title Priority Date Filing Date
JP32786697A Expired - Lifetime JP3790619B2 (ja) 1996-11-29 1997-11-28 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ

Country Status (7)

Country Link
US (5) US5974540A (ja)
EP (2) EP0845741B1 (ja)
JP (1) JP3790619B2 (ja)
KR (1) KR100455011B1 (ja)
CN (2) CN1210647C (ja)
DE (1) DE69720922T2 (ja)
TW (1) TW448400B (ja)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1210647C (zh) * 1996-11-29 2005-07-13 松下电器产业株式会社 适于作由正值处理及饱和运算处理组成的修整处理的处理器
JP3412462B2 (ja) * 1997-07-30 2003-06-03 松下電器産業株式会社 プロセッサ
US6209017B1 (en) * 1997-08-30 2001-03-27 Lg Electronics Inc. High speed digital signal processor
US6182105B1 (en) * 1998-08-27 2001-01-30 Lucent Technologies Inc. Multiple-operand addition with intermediate saturation
US6535900B1 (en) * 1998-09-07 2003-03-18 Dsp Group Ltd. Accumulation saturation by means of feedback
US6529930B1 (en) * 1998-11-16 2003-03-04 Hitachi America, Ltd. Methods and apparatus for performing a signed saturation operation
US6314443B1 (en) 1998-11-20 2001-11-06 Arm Limited Double/saturate/add/saturate and double/saturate/subtract/saturate operations in a data processing system
US6532486B1 (en) * 1998-12-16 2003-03-11 Texas Instruments Incorporated Apparatus and method for saturating data in register
WO2001042907A2 (en) * 1999-12-10 2001-06-14 Broadcom Corporation Apparatus and method for reducing precision of data
US6748521B1 (en) * 2000-02-18 2004-06-08 Texas Instruments Incorporated Microprocessor with instruction for saturating and packing data
US6704820B1 (en) * 2000-02-18 2004-03-09 Hewlett-Packard Development Company, L.P. Unified cache port consolidation
US6888897B1 (en) 2000-04-27 2005-05-03 Marvell International Ltd. Multi-mode iterative detector
US7184486B1 (en) 2000-04-27 2007-02-27 Marvell International Ltd. LDPC encoder and decoder and method thereof
US7000177B1 (en) 2000-06-28 2006-02-14 Marvell International Ltd. Parity check matrix and method of forming thereof
US7072417B1 (en) 2000-06-28 2006-07-04 Marvell International Ltd. LDPC encoder and method thereof
US6965652B1 (en) 2000-06-28 2005-11-15 Marvell International Ltd. Address generator for LDPC encoder and decoder and method thereof
US7099411B1 (en) 2000-10-12 2006-08-29 Marvell International Ltd. Soft-output decoding method and apparatus for controlled intersymbol interference channels
JP2003186567A (ja) * 2001-12-19 2003-07-04 Matsushita Electric Ind Co Ltd マイクロプロセッサ
KR100517971B1 (ko) * 2002-09-07 2005-09-30 엘지전자 주식회사 이동통신 시스템의 고정점 결정장치 및 방법
US7149766B1 (en) * 2002-11-12 2006-12-12 Unisys Corporation Methods for detecting overflow and/or underflow in a fixed length binary field
US7577892B1 (en) 2005-08-25 2009-08-18 Marvell International Ltd High speed iterative decoder
US7861131B1 (en) 2005-09-01 2010-12-28 Marvell International Ltd. Tensor product codes containing an iterative code
KR101179738B1 (ko) * 2007-11-07 2012-09-04 미쓰비시덴키 가부시키가이샤 안전 제어 장치
JP2010020625A (ja) * 2008-07-11 2010-01-28 Seiko Epson Corp 信号処理プロセッサ及び半導体装置
US8321769B1 (en) 2008-11-06 2012-11-27 Marvell International Ltd. Multi-parity tensor-product code for data channel
WO2013095529A1 (en) 2011-12-22 2013-06-27 Intel Corporation Addition instructions with independent carry chains
CN104081340B (zh) * 2011-12-23 2020-11-10 英特尔公司 用于数据类型的下转换的装置和方法
CN104133806A (zh) * 2014-07-31 2014-11-05 杭州康芯电子有限公司 一种十六位嵌入式芯片软核
CN111090467A (zh) * 2016-04-26 2020-05-01 中科寒武纪科技股份有限公司 一种用于执行矩阵乘运算的装置和方法
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5856032A (ja) * 1981-09-29 1983-04-02 Toshiba Corp パイプライン演算装置
JPH0774989B2 (ja) * 1988-01-18 1995-08-09 株式会社東芝 符号変換回路
JP2600293B2 (ja) * 1988-06-10 1997-04-16 日本電気株式会社 オーバーフロー補正回路
JPH04309123A (ja) * 1991-04-08 1992-10-30 Nec Corp 冗長2進演算回路
US5235533A (en) * 1992-05-11 1993-08-10 Intel Corporation Store rounding in a floating point unit
JPH06175821A (ja) * 1992-12-10 1994-06-24 Fujitsu Ltd 演算装置
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
KR0179969B1 (ko) 1993-09-01 1999-05-01 김광호 안테나 입력신호의 게인 조정방법
JP3487903B2 (ja) * 1993-11-12 2004-01-19 松下電器産業株式会社 演算装置及び演算方法
US5448509A (en) * 1993-12-08 1995-09-05 Hewlett-Packard Company Efficient hardware handling of positive and negative overflow resulting from arithmetic operations
JP2591463B2 (ja) * 1993-12-27 1997-03-19 日本電気株式会社 リミッタ装置
US5642301A (en) * 1994-01-25 1997-06-24 Rosemount Inc. Transmitter with improved compensation
JP3105738B2 (ja) 1994-06-10 2000-11-06 日本電気株式会社 情報処理装置
JP3651698B2 (ja) 1995-04-28 2005-05-25 株式会社アサヒオプティカル プラスチックレンズの製造方法
IL116210A0 (en) * 1994-12-02 1996-01-31 Intel Corp Microprocessor having a compare operation and a method of comparing packed data in a processor
US5801977A (en) * 1995-01-17 1998-09-01 Hewlett-Packard Company System and method for clipping integers
GB2300054A (en) 1995-01-17 1996-10-23 Hewlett Packard Co Clipping integers
US5687359A (en) * 1995-03-31 1997-11-11 International Business Machines Corporation Floating point processor supporting hexadecimal and binary modes using common instructions with memory storing a pair of representations for each value
US5696709A (en) * 1995-03-31 1997-12-09 International Business Machines Corporation Program controlled rounding modes
JPH0997178A (ja) 1995-09-29 1997-04-08 Matsushita Electric Ind Co Ltd 飽和演算処理装置および方法
US5812439A (en) * 1995-10-10 1998-09-22 Microunity Systems Engineering, Inc. Technique of incorporating floating point information into processor instructions
JP3701401B2 (ja) 1996-08-12 2005-09-28 株式会社ルネサステクノロジ 飽和演算命令を有するマイクロプロセッサ
CN1210647C (zh) * 1996-11-29 2005-07-13 松下电器产业株式会社 适于作由正值处理及饱和运算处理组成的修整处理的处理器
US6058410A (en) * 1996-12-02 2000-05-02 Intel Corporation Method and apparatus for selecting a rounding mode for a numeric operation
US6029184A (en) * 1997-06-17 2000-02-22 Sun Microsystems, Inc. Method of performing unsigned operations with signed instructions in a microprocessor
US5870320A (en) * 1997-06-23 1999-02-09 Sun Microsystems, Inc. Method for reducing a computational result to the range boundaries of a signed 16-bit integer in case of overflow

Also Published As

Publication number Publication date
EP0845741A3 (en) 2000-11-29
DE69720922D1 (de) 2003-05-22
EP1306752A1 (en) 2003-05-02
DE69720922T2 (de) 2003-11-13
US5974540A (en) 1999-10-26
EP0845741B1 (en) 2003-04-16
KR100455011B1 (ko) 2004-12-17
CN1512317A (zh) 2004-07-14
USRE43145E1 (en) 2012-01-24
EP0845741A2 (en) 1998-06-03
JPH10214186A (ja) 1998-08-11
CN1193771A (zh) 1998-09-23
TW448400B (en) 2001-08-01
KR19980042913A (ko) 1998-08-17
CN1210647C (zh) 2005-07-13
US6237084B1 (en) 2001-05-22
USRE39121E1 (en) 2006-06-06
USRE43729E1 (en) 2012-10-09
CN100356316C (zh) 2007-12-19

Similar Documents

Publication Publication Date Title
JP3790619B2 (ja) 正値化処理及び飽和演算処理からなる丸め処理を好適に行うことができるプロセッサ
US5859997A (en) Method for performing multiply-substrate operations on packed data
JP4064989B2 (ja) パック・データの乗加算演算を実行する装置
KR100329339B1 (ko) 압축데이터에의한승산-가산연산수행장치
JP3739403B2 (ja) プロセッサのカスタム動作のための方法及び装置
JP3958662B2 (ja) プロセッサ
US7159100B2 (en) Method for providing extended precision in SIMD vector arithmetic operations
US5442577A (en) Sign-extension of immediate constants in an alu
US6128726A (en) Accurate high speed digital signal processor
US20090063606A1 (en) Methods and Apparatus for Single Stage Galois Field Operations
US5958000A (en) Two-bit booth multiplier with reduced data path width
JP3779602B2 (ja) Simd演算方法およびsimd演算装置
US6338135B1 (en) Data processing system and method for performing an arithmetic operation on a plurality of signed data values
US7647368B2 (en) Data processing apparatus and method for performing data processing operations on floating point data elements
JPH10126790A (ja) 動き補償加算装置
JP2001257884A (ja) 多項式を基礎とした多レベルスクリーニング
KR20020021078A (ko) 데이터 처리 시스템 및 복수의 부호 데이터 값의 산술연산 수행방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060301

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060403

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110407

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120407

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140407

Year of fee payment: 8

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S131 Request for trust registration of transfer of right

Free format text: JAPANESE INTERMEDIATE CODE: R313135

SZ02 Written request for trust registration

Free format text: JAPANESE INTERMEDIATE CODE: R313Z02

S131 Request for trust registration of transfer of right

Free format text: JAPANESE INTERMEDIATE CODE: R313135

SZ02 Written request for trust registration

Free format text: JAPANESE INTERMEDIATE CODE: R313Z02

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term