(57)【特許請求の範囲】
【請求項１】
命令列中の命令を逐次解読し実行するプロセッサであって、  命令列における命令を解読するデコーダと、
前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、
前記デコーダは、
前記補正命令のオペコードを解読することによりビット長sを認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付きmビット整数値を、sビット長の符号無し整数の範囲(s＜m)に飽和させるよう、正値化飽和演算手段を制御する
ことを特徴とするプロセッサ。
【請求項２】
前記正値化飽和演算手段は、
前記オペランドで指定された格納先に存在する符号付きmビット整数が、負数であるか否かを判定する第１判定回路と、
前記符号付きmビット整数が、符号無しsビット整数の最大値を越えているか否かを判定する第２判定回路とを備え、
前記第１判定回路による判定、及び、第２判定回路による判定は、前記デコーダが補正命令を解読したことによりなされる
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記符号付きmビット整数値の格納先を示すオペランドは第１オペランドであり、補正命令は、この第１オペランドの他に、正値化飽和演算手段による飽和結果の転送先を示す第２オペランドを有し、
第１判定回路が負数であると判定した場合、sビット整数で表現されたゼロを第２オペランドに示される転送先に転送し、
第２判定回路が最大値を越えていると判定した場合、sビット整数の正の最大値を第２オペランドに示される転送先に転送し、
第１判定回路が正数であると判定し、尚且つ第２判定回路が最大値を越えていないと判定した場合、第１オペランドで指定された格納先に格納されている数値を、第２オペランドに示される転送先に転送する転送手段
を備えることを特徴とする請求項２記載のプロセッサ。
【請求項４】
前記第１判定回路は
格納先に格納された符号付きmビット整数における符号ビットのオン／オフを検知する検知部を備え、
前記第２判定回路は、
格納先に格納された符号付きmビット整数からsビット整数の正の最大値を減じる減算を実施できる演算器を備える
ことを特徴とする請求項３記載のプロセッサ。
【請求項５】
前記mビット整数は32ビットであり、
前記補正命令のオペコードによって定まるビット長sは、8ビット、16ビット、24ビットの何れかであり、
前記第１判定回路における検知部は、
前記ｍビット整数の最上位ビットを符号ビットとして決定し、
前記第２判定回路の演算器は、
符号無し8ビット整数の最大値、符号無し16ビット整数の最大値、符号無し24ビット整数の最大値の何れかを発生する発生部を備える
ことを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記プロセッサは、
専用レジスタと、
命令列に含まれている演算命令に従って演算を行い、演算結果を専用レジスタに保持されている演算結果に加算する演算手段とを備え、
補正命令における第１オペランドは、前記専用レジスタを指定している
ことを特徴とする請求項３記載のプロセッサ。
【請求項７】
前記プロセッサは、複数の汎用レジスタからなるレジスタファイルを備え、
補正命令の第２オペランドは、レジスタファイル内の何れかの汎用レジスタを飽和結果の転送先に指定している
ことを特徴とする請求項３記載のプロセッサ。
【請求項８】
命令列中の命令を逐次解読し実行するプロセッサであって、
命令列における命令を解読するデコーダと、
デコーダにより解読された命令が演算命令であるなら、mビット整数値を用いた演算を行う演算手段と、
前記演算命令の演算結果である符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、
前記デコーダは、
前記演算命令のオペコードを解読することにより、ビット長sを認識するとともに、演算手段の演算結果である符号付きmビット整数値を、sビット長の符号無し整数の範囲(s＜m)に飽和させるよう、正値化飽和演算手段を制御する
ことを特徴とするプロセッサ。
【請求項９】
前記正値化飽和演算手段は、
前記演算手段による演算結果が、負数であるか否かを判定する第１判定回路と、
前記演算手段による演算結果が、符号無しsビット整数の最大値を越えているか否かを判定する第２判定回路とを備え、
前記第１判定回路による判定、及び、第２判定回路による判定は、前記デコーダが演算命令を解読したことによりなされる
ことを特徴とする請求項８記載のプロセッサ。
【請求項１０】
前記プロセッサは、
第１判定回路が負数であると判定した場合、sビット整数で表現されたゼロを演算命令のオペランドに示される転送先に転送し、
第２判定回路が最大値を越えていると判定した場合、sビット整数の正の最大値を演算命令のオペランドに示される転送先に転送し、
第１判定回路が正数であると判定し、尚且つ第２判定回路が最大値を越えていないと判定した場合、演算手段の演算結果を演算命令のオペランドに示される転送先に転送する転送手段
を備えることを特徴とする請求項９記載のプロセッサ。
【請求項１１】
前記第１判定回路は
演算手段の符号ビットのオン／オフを検知する検知部を備え、
前記第２判定回路は、
演算手段の演算結果から、符号無しsビット整数の正の最大値を減じる減算を実施できる演算器を備える
ことを特徴とする請求項１０記載のプロセッサ。
【請求項１２】
演算手段による演算結果は32ビットであり、
前記演算命令のオペコードによって定まるビット長sは、8ビット、16ビット、24ビットの何れかであり、
前記第１判定回路における検知部は、
演算結果の最上位ビットを符号ビットとして決定し、
前記演算器は、
演算命令のオペコードに従って、符号無し8ビット整数の最大値、符号無し16ビット整数の最大値、符号無し24ビット整数の最大値の何れかを発生する発生部
を備えることを特徴とする請求項１１記載のプロセッサ。
【請求項１３】
前記プロセッサは、
複数の汎用レジスタからなるレジスタファイルを備え、
演算命令は、飽和結果の転送先をレジスタファイル内の何れかの汎用レジスタに指定するオペランドを有する
ことを特徴とする請求項１０記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＲＯＭ等に記憶された命令列に従った処理を行うプロセッサに関する。
【０００２】
【従来の技術】
近年、フレーム内符号化、フィールド内符号化、動き補償予測等で圧縮された動画データや、静止画データ、音声データ等様々な種別のデータを対話的に再生することができるアプリケ−ションソフトウェアが普及の兆しを見せている。そしてこのようなソフトウェアの開発をより効率良く行うことができるマルチメディア指向のプロセッサについての需要がにわかに高まりつつある。マルチメディア指向プロセッサとは、画像・音声データ等の圧縮／伸張処理のプログラミングをより容易に行えるようアーキテクチャが特化されたプロセッサである。画像データを処理する際に特に高速化処理が求められるのは、Ｎ×Ｎ個の行列状成分を有する圧縮データと、Ｎ×Ｎ個の行列状成分を有する係数データとの行列積演算である。Ｎ×Ｎ個の行列状成分を有する圧縮データの代表的なものとしては、MPEGに規定された横16×縦16の輝度成分からなる輝度ブロック、横8×縦8の青色差成分からなる青色差ブロック（Cbブロック）、横8×縦8の赤色差成分からなる赤色差ブロック（Crブロック）が筆頭に挙げられる。そしてこのような圧縮データに対しての行列積演算は、MPEG,JPEGの画像圧縮方式において、逆DCTの近似計算を行う際に特に高頻度に行われる。
【０００３】
行列積演算の高速化を図った従来のマルチメディア指向プロセッサについて説明する。従来のマルチメディア指向プロセッサの基本的なアーキテクチャとしては、ハードウェア構成に積和結果専用レジスタ（以下MCRと略記する場合がある）が設けられており、命令体系に積和値を転送する転送命令『MOV MCR,**』が設けられている。
【０００４】
このマルチメディア指向プロセッサのハードウェア構成図の一例を図１６に示す。図１６において算術演算回路６１は、圧縮データを構成する成分Ｆijと、係数行列を構成する成分Ｇjiとの乗算を乗算命令に従い行う。それと共に積和結果専用レジスタ６２が保持している積和値を取り出して、乗算結果Ｇji*Ｆijと取り出された積和値とを加算し、加算後、加算結果を積和結果専用レジスタ６２に保持させる。算術演算回路６１が上記動作を繰り返すことにより、積和結果専用レジスタ６２にはこれまでの積和値が蓄積される。乗算が所定回数行われると、プログラマは積和値転送命令を発行する。転送命令の発行により積和結果専用レジスタ６２の蓄積値を汎用レジスタに転送して、これを一行一列の行列積結果として利用する。同様の処理をＮ×Ｎ回繰り返せば、Ｎ×Ｎ圧縮データとＮ×Ｎ係数行列との行列積演算が終了する。
【０００５】
ところで現状のマルチメディア指向プロセッサを利用する際、プログラマの頭を悩ませるのは、積和値の補正のための正値化処理及び飽和演算処理である。
正値化処理とは、積和値が負数である際、これをゼロ値或は正値に丸める処理をいう。一般に圧縮データは前後のデータとの相対値を示す符号付きデータとして表現されている。そのため、圧縮データの各成分と所定係数との積和値は負数として表れる場合がある。一方ディスプレィ、スピーカ等の再生系ハードウェアは、符号無しデータしか処理できないので、積和値を利用する際には、適宜、正値化処理を行う必要がある。
【０００６】
飽和演算処理とは、積和値が所定範囲を越えている場合（飽和している場合）にこれを所定値に丸める処理をいう。即ち圧縮データの積和の繰り返しにおいて、伝送時に発生したビット誤りを含んだ成分を積和した場合、積和値が理論値を遙かに越えている可能性が高くなる。一方再生系ハードウェアは、符号無しデータとして表現可能な有効ビット数例えば8ビットというように物理的に制約されているので、積和値を有効ビットに丸めるのに飽和演算処理が必要となる。
【０００７】
このような正値化処理及び飽和演算処理を実現するため、積和値補正用のサブルーチンを用いて積和値を補正することが従来から行われてきた。積和値補正ルーチンの一例を以下説明する。この一例においてレジスタ幅、演算器の演算幅は32ビットである。MCRも32ビット幅を有するが、その積和値は符号付16ビット整数で表現されている。再生系ハードウェアが利用できるデータは、符号無し8ビット整数で表現されていなければならない。尚、本ルーチン使用時の取り決めとしては、演算結果の格納用にデータレジスタD0を用いるものとする。各命令は２オペランド表記であり、左辺、右辺のオペランドをそれぞれ第１オペランド、第２オペランドと称呼する。第２オペランドは転送命令の転送先の指定と、演算結果の格納先の指定を兼ねている。
【０００８】
命令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進数の数値であることを示す）。ここでの比較は、第２オペランドで指示されているレジスタD0の保持値から、第１オペランドにおいて即値として記述されている『0xFFFF_8000』を減じることにより行われる。
【０００９】
命令2の即値『0xFFFF_8000』の第16ビットは、符号付き16ビット整数における符号ビットであり、D0レジスタの保持値が『0xFFFF_8000』より大きいことは、MCRに蓄積されている積和値が負数で表現されていることを示している。
逆にD0レジスタの保持値が『0xFFFF_8000』より小さいことは、MCRに蓄積されている積和値が正数で表現されていることを示している。このように積和値が正数であると、桁下りが起こり、フラグレジスタにおけるキャリーフラグがセットされる。
【００１０】
命令3における『BCC』の『B』は分岐命令『Branch』の意味であり、『CC』は『Carry Clear』の意味である。
比較の結果、D0レジスタの値が『0xFFFF_8000』より小さい場合、ラベル『CARRY』が付与された命令6に分岐する。
比較の結果、D0レジスタの値が『0xFFFF_8000』より大きい場合、命令４『mov 0x0000_0000,D0』においてレジスタD0にゼロを転送することにより、積和値をゼロに補正する。補正後、命令５の無条件分岐命令『BRA END』において、正値化処理の終了を示すENDラベルに分岐することにより正値化処理を終える。
【００１１】
以上はレジスタD0の保持値が負数である場合の動作である。続いてレジスタD0の保持値が『0x0000_00FF』を越えていた場合の動作について説明する。0x0000_00FFを下回っている場合は、命令6『CMP 0x0000_00FF,D0』において、D0レジスタの値を0x0000_00FFとを比較する。ここでの比較は、第２オペランドで指示されているレジスタD0の保持値から、第１オペランドにおいて即値として記述されている0x0000_00FFを減じることにより行われる。D0レジスタの保持値が0x0000_00FFより小さい場合は桁下りが起こり、フラグレジスタにおけるキャリーフラグがセットされる。
【００１２】
命令７『BCS END』における『CS』は『Carry Set』の意味である。キャリーフラグがセットされていると、命令７からラベル『END』への分岐を行う。
キャリーフラグがセットされていなければ、命令７での分岐は行われず命令８に分岐し、命令８の転送命令『mov 0x0000_00FF,D0』においてレジスタD0に0x0000_00FFを転送することにより演算結果を0x0000_00FFに補正し、飽和演算を終える。
【００１３】
【発明が解決しようとする課題】
ところで上記の積和値の補正において問題なのは、一回の積和値の補正につき八つもの命令が挿入されコード量が飛躍的に増大している点である。ソフトウェアを情報機器に組み込むためプログラムを予めＲＯＭに記憶させておく場合は、コード量が増大するにつれＲＯＭの実装量も増し、製造コストが跳ね上がってしまう。デジタルビデオプレーヤ,電子手帳,ワープロを開発している多くの家電電気メーカは独自の伸長処理プログラムの実装により、他社との差別化を図りたいところであるが、現状のところ伸長処理プログラムの実装は、ＲＯＭの実装量増大に伴う製造コスト向上という弊害に阻まれ、浸透度は芳しくない。
【００１４】
また一回の積和補正で八つもの命令を実行するのは、実行時間の面で多大な問題である。例えば図１７に示すように、逆DCTの近似計算を行うため8×8成分からなる圧縮データＦij(i,j=1,2,3,4,5・・・8)と、8×8の係数行列Ｇji(i,j=1,2,3,4,5・・・8)との行列積Ｈij(i,j=1,2,3,4,5・・・8)を算出する場合、行列積成分Ｈ21の算出のために算術演算回路は圧縮データの一列目成分Ｆ11,Ｆ21,Ｆ31,Ｆ41,Ｆ51,Ｆ61,Ｆ71,Ｆ81と係数行列の一行目成分Ｇ11,Ｇ12,Ｇ13,Ｇ14,Ｇ15,Ｇ16,Ｇ17,Ｇ18と乗算結果の積和処理を行い、積和値に対して正値化飽和演算処理を施す。続いて行列積成分Ｈ12の算出のために、算術演算回路は圧縮データの二列目成分Ｆ12,Ｆ22,Ｆ32,Ｆ42,Ｆ52,Ｆ62,Ｆ72,Ｆ82と係数行列の一行目成分Ｇ11,Ｇ12,Ｇ13,Ｇ14,Ｇ15,Ｇ16,Ｇ17,Ｇ18との乗算結果の積和処理を行い、積和値に対して正値化飽和演算処理を施す。
【００１５】
同様の積和及び正値化飽和演算処理を行って他の成分Ｈ31,Ｈ41,Ｈ51,Ｈ61,Ｈ71,Ｈ81・・・・を得る必要があるが、行列積Ｈij(i,j=1,2,3,4,5・・・8)の成分数は６４個なので、上記正値化飽和演算処理のための積和値補正ルーチンの実行は、合計６４回も行われることになる。積和値補正ルーチンの中には分岐命令（命令３、命令５、命令７）が存在し、本積和値補正ルーチンの実行時には、負数発生、飽和の有無に拘らず必ず分岐が発生するため、上記６４回もの積和値補正ルーチンの繰り返しは、決してスムーズなものではない。プロセッサがパイプライン処理の導入により積和の高速化を行おうとしている場合には、上記の３つ分岐命令の実行のため処理効率が著しく低下してしまう。
【００１６】
行列積演算を高速化するには、行列積演算を実現する専用回路を内蔵させれば良いように思える。しかし行列積演算全体を専用回路にて実現してしまうと、ハードウェア規模が著しく増大すると共にプログラマが記述したプログラム通りに様々な処理を行わせるというプロセッサ特有の汎用性が損なわれることになる。プロセッサ特有の汎用性が損なわれてしまうと、たとえ独自の伸長処理プログラムにてプロセッサを制御させたいという願望があっても、このような需要にこたえられない結果を招くことになる。
【００１７】
【課題を解決するための手段】
上記目的は、命令列中の命令を逐次解読し実行するプロセッサであって、命令列における命令を解読するデコーダと、前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記補正命令のオペコードを解読することによりビット長sを認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付きmビット整数値を、sビット長の符号無し整数の範囲(s＜m)に飽和させるよう、正値化飽和演算手段を制御することを特徴とするプロセッサにて達成される。
【００１８】
【発明の実施の形態】
（第１実施形態）
以下本発明の第１実施形態について図面を参照しながら説明する。図１は、第１実施形態におけるプロセッサの内部構成を示す図であり、同図に示すように本プロセッサは、ＲＯＭ１１、命令読出し回路１２、デコーダ１３、演算実行装置１４、アドレスバス１７、及びデータバス１８から構成され、アドレスバス１７、データバス１８を介してＲＡＭ１０と接続している。
【００１９】
ＲＡＭ１０は、8×8の行列状成分からなる圧縮データＦij(i,j=1,2,3,4,5・・・8)と、8×8の行列状成分からなる係数データＧji(i,j=1,2,3,4,5・・・8)とを予め記憶する。もし読出先のi行j列のアドレスがアドレスバス１７に出力されると、記憶しているデータのうち、そのアドレスで指示されるデータをデータバス１８に出力する。また演算実行装置１４が8×8の行列状成分からなる圧縮データＦijと、8×8の係数データＧjiとの行列積Ｈij(i,j=1,2,3,4,5・・・8)のi行j列成分を算出し、書込先のi行j列アドレスがアドレスバス１７に出力されると、データバス１８に転送されているi行j列成分をそのアドレスで指示される記憶領域に書き込む。このようにして書き込まれた行列積Ｈijは、逆DCTの近似計算より用いられ、所定処理が施された後に図示しない再生系ハードウェアが用いる。尚Ｆij及びＧjiは、下位から8ビット目を符号ビットに割り当てた符号付き8ビット整数として表現されている。
【００２０】
ＲＯＭ１１は、ＲＡＭ１０が記憶している圧縮データの伸長処理プログラムを記憶しており、読出先アドレスが命令読出し回路１２から出力されると、記憶されている伸長処理プログラムのうちそのアドレスで指示される命令をデータバス１８に出力する。ＲＯＭ１１に記憶されている伸長処理プログラムは、転送命令、演算命令、分岐命令等複数種別の命令が混在してなる。演算命令は、算術演算命令、積和機能付き乗算命令、論理演算命令という種別に大きく分類される。加算命令、減算命令、乗算命令を始めとする算術演算命令はそれぞれ第１オペランド、第２オペランドを有する。第１オペランドは即値指定及びレジスタ直接指定という２種類のアドレッシングモードを有している。これに対して第２オペランドのアドレッシングモードはレジスタ直接指定のみである。これは第２オペランドが演算結果の格納先の指定を兼ねるためである。加算命令『ADD imm、D1』の一例でいうと、第１オペランドは即値immとなり、第２オペランドはレジスタ名D1となる。第２オペランドは、演算結果の格納先として指定されるから、『ADD D0、D1』の場合は、レジスタD0とレジスタD1との加算結果がレジスタD1に格納されることになる。
【００２１】
本実施形態において伸長処理プログラムは、8×8の行列成分からなる圧縮データＦijと、8×8の行列成分からなる係数データＧjiとから8×8成分を有する行列積Ｈijを生成する行列積サブルーチンを含んでおり、この行列積サブルーチンは、主として積和機能付き乗算命令『MACCB Dm,Dn』及び正値化飽和演算命令『MCSST Dm』から構成されることは特筆すべきである。
【００２２】
8×8成分からなる圧縮データＦij(i,j=1,2,3,4,5・・・8)と、8×8の係数行列Ｇji(i,j=1,2,3,4,5・・・8)との行列積Ｈijを算出する場合を考える。この場合、当該行列積の1行1列成分Ｈ11を算出するためには、以下の計算を行う必要がある。
｛数式１｝
Ｈ11＝Ｇ11*Ｆ11+Ｇ12*Ｆ21+Ｇ13*Ｆ31+Ｇ14*Ｆ41+Ｇ15*Ｆ51+Ｇ16*Ｆ61+Ｇ17*Ｆ71+Ｇ18*Ｆ81
この｛数式１｝は『Ｇji*Ｆij(i,j=1,2,3,4,5・・・8)』を単項式とし、これら単項式の代数和をとる多項式であるが、この単項式の演算と、代数和とが本行列積サブルーチンでは、積和機能付き乗算命令『MACCB Dm,Dn』を繰り返し起動するループ文（このループ文を積和ループという）で表現されている。
【００２３】
図３は、行列積サブルーチンの一例を示す図である。尚、図３における各命令の概略は、その右隣のコメント文（先頭に#記号が配された文）に記してある。
F_ENTRYはＲＡＭ１０において圧縮データが格納されている領域の先頭に付されたラベルであり、G_ENTRYはＲＡＭ１０において係数データが格納されている領域の先頭に付されたラベルである。H_ENTRYはＲＡＭ１０において行列積が格納されている領域の先頭に付されたラベルである。命令1:『MOV F_ENTRY,A0』、命令2:『MOV G_ENTRY,A1』、命令3:『MOV H_ENTRY,A2』はアドレスF_ENTRY、アドレスG_ENTRY、アドレスH_ENTRYをそれぞれ、アドレスレジスタA0、アドレスレジスタA1、アドレスレジスタA2に転送する転送命令である。
【００２４】
以上の転送命令によりアドレスレジスタA0,A1,A2は8×8個の成分を有する圧縮データ、係数データ、行列積データの読出先アドレスを指示するのに用いられる。
命令4:『MOV INIT,D2』は、データレジスタD2に繰り返し回数の初期値INITを設定するものであり、命令5:『MOV (A0),D0』は、アドレスレジスタA0により指示されたアドレスから圧縮データＦijをデータレジスタD0へと読み出すものである。命令6:『MOV (A1),D1』は、アドレスレジスタA1により指示されたアドレスから係数データＧjiをデータレジスタD1へと読み出すものである。命令7:『MACCB D0,D1』は、データレジスタD0、データレジスタD1、及び積和結果専用レジスタ６を利用しての積和機能付きの乗算命令であり、命令8:『CMP NUMBER,D2』は、データレジスタD2に格納された繰返回数から繰返総数NUMBERを減じる演算を行うことにより繰返回数の上限チェックを行う命令である。
【００２５】
命令9:『BCS LP1_NEXT』は命令8:『CMP NUMBER,D2』における減算の結果キャリーフラグがＯＮになればラベルLP1_NEXTが付された命令13:『ADD 1,D2』に分岐する条件付き分岐命令である。
命令10:『MCSST D1』は、キャリーフラグがＯＦＦの場合のみ正値化処理及び飽和演算処理（以下これらをまとめて正値化飽和演算処理という）を行う命令である。
【００２６】
命令13:『INC D2』はデータレジスタD2に格納された繰り返し回数を1増加させる加算命令であり、命令14:『INC A0』はアドレスレジスタA0に格納された係数データの読出先アドレスを1増加させる加算命令である。命令15:『ADD ROW1,A1』はアドレスレジスタA1に格納された係数データの読出先アドレスに一行数ROW1を加算する加算である。命令16:『BRA LP1_START』はラベルLP1_STARTに分岐する無条件分岐命令である。
【００２７】
ラベルLP1_STARTが付された命令5:『MOV (A0),D0』〜命令12:『BRA LP1_END』からなる命令列により単項式の演算がなされ、演算結果の代数和がとられる。
ラベルLP1_NEXTが付された命令13:『ADD 1,D2』〜命令16:『BRA LP1_START』からなる命令列により一行成分×一列成分の行列積が一旦済むと圧縮データの読出先を次行に移し、係数データの読出先を次列に移す。それと共にデータレジスタD2に格納された繰り返し数を加算する。
【００２８】
図４は、積和機能付き乗算命令『MACCB Dm,Dn』のフォーマットを示す図であり、図４に示すように、積和機能付き乗算命令『MACCB Dm,Dn』は１ビット長の積和値の格納先の指定フィールドと、１ビット長の代数和の演算内容の指定フィールドと、１ビット長の単項式の演算内容指定フィールドと、２ビット長の乗数読出先指定フィールドと、２ビット長の被乗数読出先指定フィールドとを含む。
【００２９】
乗数読出先指定フィールド及び被乗数読出先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2、及び積和結果専用レジスタ６の何れかから、乗数Ｆij、被乗数Ｇjiの読み出し先レジスタを指定する。
１ビット長の単項式演算内容指定フィールドは乗数Ｆij、被乗数Ｇjiの単項式演算の内容を指定する。即ち、本フィールドに『1』が書き込まれると、乗数Ｆij、被乗数Ｇjiの単項式演算の内容とした乗数Ｆij、被乗数Ｇjiの乗算『Ｇji*Ｆij』が指定される。
【００３０】
積和値の格納先の指定フィールドは『1』が設定され、これにより積和値の格納先としてMCR（後述する積和結果専用レジスタ６のことである。）が指定される。１ビット長の代数和の演算内容の指定フィールドは『1』が書き込まれることにより、乗算結果『Ｇji*Ｆij』と積和結果専用レジスタ６に格納されている積和値との加算演算である代数和を指定する。
【００３１】
『Ｇ11*Ｆ11+Ｇ12*Ｆ21+Ｇ13*Ｆ31・・・・』の積和を行う際、留意すべきは圧縮データの成分Ｆijの伝送時にビット誤りが生じると、『Ｇ11*Ｆ11+Ｇ12*Ｆ21+Ｇ13*Ｆ31・・・・』の積和値が再生系で再生できないような理論値からかけ離れた数値になっていることである。この恐れがあるため、行列積サブルーチンは、積和機能付き乗算命令『MACCB D0,D1』の起動を繰り返すループ処理の終了後に正値化飽和演算命令『MCSST Dm』を配し、積和値に対しての正値化飽和演算処理を行うようにしている。
【００３２】
正値化飽和演算処理命令『MCSST Dm』のオペコードのフォーマットを図５に示す。図５に示すように、正値化飽和演算処理命令『MCSST Dm』は、正値化−飽和幅（丸め幅）指定フィールドと、正値化飽和演算結果の格納先指定フィールドとを含む。
丸め幅フィールドは、『01』『10』『11』が書き込まれることにより、正値化飽和演算処理の丸め幅を24ビット正値、16ビット正値、8ビット正値の何れかに指定する。
【００３３】
格納先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2、データレジスタD3の何れかから、正値化飽和演算処理の格納先レジスタを指定する。
このようにＲＯＭ１１に記憶されている伸長処理用プログラムは、行列積サブルーチンに必要な多項式の単項式演算及び代数和演算が積和機能付き乗算命令『MACCB Dm,Dn』により記述され、多項式の積和の正値化飽和演算処理が正値化飽和演算命令『MCSST Dm』を用いて記述されているため、アルゴリズムが非常にコンパクトである。これらの命令はプロセッサのみで表現されるため、ＲＯＭ１１において、伸長処理用プログラムが占めているメモリサイズは非常に少ない。
【００３４】
以上でＲＯＭ１１に記憶された命令列についての説明を終える。引き続き図１に示したプロセッサの構成要素についての説明を再開する。
図１の構成図における命令読出し回路１２は、読み出し先アドレスを順々に生成してアドレスバスに出力するプログラムカウンタを備え、ＲＯＭ１１からデータバス１８に出力される命令をデコーダ１３に読み出す。
【００３５】
デコーダ１３は、データバス１８から読み出された命令が複数個蓄えられる命令バッファと、命令バッファに蓄えられている命令のうち、解読対象となるものを保持する命令レジスタとを備え、命令レジスタに格納されている命令の内容を解読して、その命令を実現する制御を演算実行装置１４に対して行う。ここでいう制御のうち特に説明が必要なものは、以下に示すレジスタ出力制御(1)、演算実行制御(2)、定数発生制御(3)である。
【００３６】
レジスタ出力制御(1)とは、命令読出し回路１２によって読み出された算術演算命令、論理演算命令、積和機能付き乗算命令の第１、第２オペランドによって指示されたレジスタの保持値を出力するよう演算実行装置１４を制御することである。演算実行制御(2)とは、算術演算命令、論理演算命令、積和機能付き乗算命令により指示される演算内容を実行するよう、演算実行装置１４を制御することであり、定数発生制御(3)とは、正値化飽和演算命令を行うための最大値・ゼロ値を発生するよう演算実行装置１４を制御することである。レジスタ出力制御(1)及び演算実行制御(2)は、デコーダ１３が算術演算命令、論理演算命令、積和機能付き乗算命令を解読した時に行われ、レジスタ出力制御(1)及び定数発生制御(3)は、デコーダ１３が正値化飽和演算命令を解読した時に行われる。演算実行制御(2)が発生するのは、積和機能付き乗算命令の解読時であり、定数発生制御(3)が発生するのは、正値化飽和演算命令の解読時であるので、演算実行制御(2)と定数発生制御(3)とは互いに排他的な関係にある。
【００３７】
アドレスバス１７は32ビット幅を有し、命令読出し回路１２が出力する読み出し先アドレスを転送する。
データバス１８は32ビット幅を有し、ＲＡＭ１０がデータを出力すると、ＲＡＭ１０から出力されると圧縮データＦij、係数データＧji、行列積データＨijを転送する。
【００３８】
演算実行装置１４はレジスタファイル、算術論理演算回路を備えデコーダ１３による制御に従った演算処理を行う。
ここで注意すべきは、命令読出し回路１２は命令読出ステージ、デコーダ１３は命令解読ステージを行い、演算実行装置１４は、演算実行ステージ、メモリ書込ステージ、レジスタ書込ステージを行うよう構成される。そしてこれらの５つのステージは五段のパイプラインを実現する。命令読出し回路１２は、その前の命令の実行完了を待たずに、次の命令がデコーダ１３による解読ステージに入った段階で次の命令の読み出しを開始する。デコーダ１３も同様であり、その前の命令の実行完了を待たずに、次の命令が演算実行装置１４による演算実行ステージに入った段階で次の命令の解読を開始する。これらの処理により、プロセッサは図１０に示すような命令読出ステージ、命令解読ステージ、実行ステージ、メモリアクセスステージ、レジスタ書込ステージという五段ステージからなるパイプラインによりＲＯＭ１１に格納された命令列を処理する。
【００３９】
プロセッサの構成要素の説明は以上で終了する。続いて演算実行装置１４の内部構成に焦点を絞った説明を行う。演算実行装置１４の内部構成を図２に示す。図２に示すように演算実行装置１４はレジスタファイル１、算術論理演算回路２、正値化飽和演算回路３、符号拡張回路４、符号拡張回路５、積和結果専用レジスタ６、第１内部バス１５、及び第２内部バス１６から構成される。これらの構成要素とデコーダ１３との間には上述の制御(1)(2)(3)のための制御信号線がはりめぐらされているが、簡略を期するためその図示は省略している。
【００４０】
レジスタファイル１は、４本の32ビット幅のデータレジスタD0〜D3、３本の32ビット幅のアドレスレジスタA0〜A2を備える。レジスタ出力制御(1)において、一個或は二個のレジスタ名がデコーダ１３により指示されると、レジスタファイル１は与えられたレジスタ名のレジスタの保持値をパスC2,C3を介して第１内部バス１５及び第２内部バス１６上に出力する。またレジスタファイル１は、データバス１８上に転送される値をパスC1を介して保持する。
【００４１】
第１内部バス１５は32ビット幅を有し、レジスタファイル１が出力した32ビット長の保持値を算術論理演算回路２に転送する。
第２内部バス１６は32ビット幅を有し、レジスタファイル１が出力した32ビット長の保持値を算術論理演算回路２に転送する。
符号拡張回路４は、第１内部バス１５を介してレジスタファイル１から転送されてくるデータレジスタの保持値が負数である場合、符号拡張を行う。本実施形態において乗数,被乗数は符号付き8ビット数値に規定されているので、符号拡張回路４は、8ビット長の負数の符号拡張を行う。例えば第１内部バス１５から伝送されてくる保持値が8ビット負数『0x0000_0080』であれば、8ビット目の符号を9ビット〜32ビットに拡張して『0xFFFF_FF80』として算術論理演算回路２に出力する。
【００４２】
符号拡張回路５は、第２内部バス１６を介してレジスタファイル１から転送されてくるデータレジスタの保持値が負数である場合、符号拡張を行う。本実施形態において乗数,被乗数は符号付き32ビット数値に規定されているので、符号拡張回路５は、8ビット長の負数の符号拡張を行う。符号拡張の手法は符号拡張回路４と同様である。
【００４３】
算術論理演算回路２は、32ビット幅の全加算器、乗算器、バレルシフタ等から構成され、デコーダ１３による演算実行制御(2)に基づき演算を行う。ここで算術論理演算回路２の入力段は符号拡張回路４、積和結果専用レジスタ６の出力段と接続されているため、演算実行制御(2)に基づく演算は、符号拡張回路４に出力されているレジスタの32ビット長の保持値と、積和結果専用レジスタ６に出力されているレジスタの32ビット長の保持値とを対象にして行われる。
【００４４】
積和機能付き乗算命令『MACCB Dm,Dn』の解読時には、算術論理演算回路２は、符号拡張回路４から出力される32ビット長の値と符号拡張回路５から出力される32ビット長の値との乗算を行い、64ビット長の乗算結果を出力する。またパスP1上に転送される32ビット長の値と、64ビット乗算結果の下位32ビットとの加算を行い、加算後、32ビット長の加算結果をパスP2上に出力する。
【００４５】
尚積和機能付き乗算命令『MACCB D0,D1』の解読時において第１内部バス１５及び第２内部バス１６には積和機能付き乗算命令『MACCB D0,D1』の第１オペランド及び第２オペランドにて指定された読出先レジスタの保持値が転送されているので、算術論理演算回路２により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われる。また積和機能付き乗算命令『MACCB D0,D1』の解読時において、パスP１には積和結果専用レジスタ６の保持値が転送されるので、データレジスタD0−データレジスタD1の乗算結果は、パスP1上の積和結果専用レジスタ６の保持値と加算されことになる。このように算出された加算結果は、パスP２上に出力される。
【００４６】
積和結果専用レジスタ６は、これまでの積和における積和値を保持しており、積和機能付き乗算命令が解読されるとその保持値をパスP1上に出力する。パスP1上の保持値と乗算結果との加算が算術論理演算回路２により行われると、パスP2上に加算結果が新たに出力されるが、積和結果専用レジスタ６は出力された加算結果をラッチして、これを新たな積和値として保持する。尚積和結果専用レジスタ６は、算術論理演算回路２により算出された乗数Ｆij、被乗数Ｇjiの乗算結果を符号付き16ビット数値として保持する。
【００４７】
正値化飽和演算命令『MCSST』が解読された場合は、積和結果専用レジスタ６は保持値をパスP2上に出力する。
正値化飽和演算回路３は、符号付16ビット数値で表現される積和結果専用レジスタ６の保持値を、正の8ビット整数に丸める実装回路である。図６（ａ）及び図６（ｂ）は正値化飽和演算回路３による丸め処理を説明するための説明図である。図６（ａ）において上段は、32ビット幅における乗数、被乗数の表現を示している。即ち黒く塗り潰した第8ビットを符号ビットに割り当てることにより、ハッチングを付した7ビットを用いて、-127〜+127の乗数Ｆij、被乗数Ｇjiが表現されている。
【００４８】
中段は、32ビット幅における積和結果の表現を示している。即ち黒く塗り潰した第16ビットを符号ビットに割り当てることにより、ハッチングを付した15ビットを用いて-32767〜+32767の範囲において積和値が表現されている。
下段は、プロセッサの32ビット幅における行列積成分の表現を示している。即ちハッチングを付した第1ビット〜第8ビットを符号ビット無しで用いることにより、0〜+255の範囲で行列積成分Ｈijが表現されている。
【００４９】
図６（ｂ）において、左端のグラフはレジスタが保持する乗数,被乗数がとり得る範囲を示し、正負毎に8ビットの範囲を有する。中央のグラフは、積和結果専用レジスタ６が保持する積和値がとり得る範囲を示し、正負毎に16ビットの範囲を有する。左端のグラフは、行列積Ｈijがとり得る範囲、即ち再生系ハードウェアが再生可能な8ビット正数の範囲である。
【００５０】
尚積和値がとり得る範囲を正負毎に16ビットとしているのは丸め誤差の累積を避けるためである。即ち符号有り8ビットの値をとる乗数Ｆij、被乗数Ｇjiの乗算結果を積和してゆく際、行列積Ｈijの範囲が8ビットであるからといって、乗算が行われる度に乗算結果を8ビットに丸めれば、丸め誤差が乗算回数だけ倍増してしまう。丸め誤差の倍増を避ける意味で積和結果専用レジスタ６は積和結果を16bitにし、一行×一列分の乗算が済んだ段階で正値化補正処理を行っている。
【００５１】
中央に示す積和結果専用レジスタ６の保持値を、右端に示す8ビット正値に丸めるため、正値化飽和演算回路３は、参照符号y1で指示する範囲（正数であって上限0x000000FFを越えている範囲）を0x000000FFへと丸める。
また正値化飽和演算回路３は、参照符号y2で指示する範囲（負数の範囲）を0x00000000へと丸める。
【００５２】
正値化飽和演算回路３の内部構成を図２の破線y8内に示す。図２の破線y8に示すように、正値化飽和演算回路３は定数発生回路２１、比較回路２２、正負判別回路２３、マルチプレクサ２４、及びゼロ値発生回路２５からなる。これらの構成要素には、デコーダ１３からの制御線が接続されているが、その図示は煩雑となるため省略している。
【００５３】
定数発生回路２１は、命令読出し回路１２により読み出された命令が正値化飽和演算命令『MCSST』であるとデコーダ１３が解読した場合、当該命令の正値化幅−飽和幅指定フィールドの内容に従って8ビット符号無し数値、16ビット符号無し数値、24ビット符号無し数値の正の最大値を発生する。正値化幅−飽和幅指定フィールドの指定内容が8bitである場合、8ビット符号無し数値の最大値である32ビット符号付き整数0x000000FFをマルチプレクサ２４に出力する。正値化幅−飽和幅指定フィールドの指定内容が16ビットである場合、16ビット符号無し数値の最大値である32ビット符号付き整数0x0000FFFFをマルチプレクサ２４に出力し、正値化幅−飽和幅指定フィールドの指定内容が24ビットである場合、24ビット符号無し数値の最大値である32ビット符号付き整数0x00FFFFFFをマルチプレクサ２４に出力する。
【００５４】
比較回路２２は、積和結果専用レジスタ６によって保持されている値と、定数発生回路２１により出力された最大値との大小を比較する。この比較は定数発生回路２１により出力された最大値から積和結果専用レジスタ６に保持されている値を減じ、減じた結果、桁借りが発生したか否かを検知することにより行われる。ここで正値化幅−飽和幅指定フィールドの指定内容が8bitである場合、積和結果専用レジスタ６の保持値から8ビット符号無し数値の最大値である32ビット符号付き整数0x000000FFを減じる。また正値化幅−飽和幅指定フィールドの指定内容が16ビットである場合、積和結果専用レジスタ６の保持値から16ビット符号無し数値の最大値である32ビット符号付き整数0x0000FFFFを減じる。正値化幅−飽和幅指定フィールドの指定内容が24ビットである場合、積和結果専用レジスタ６の保持値から24ビット符号無し数値の最大値である32ビット符号付き整数0x00FFFFFFを減じる。
【００５５】
このような減算の結果桁借りが検知され、積和結果専用レジスタ６が保持している値が最大値を上回っていると判定された場合は論理値『１』をマルチプレクサ２４に出力する。積和結果専用レジスタ６が保持している値が最大値と等しいか或はこれを下回っていると判定された場合は、論理値『０』をマルチプレクサ２４に出力する。
【００５６】
正負判別回路２３は、積和結果専用レジスタ６によって保持されている値の符号ビットがＯＮであるかを判定する。ここで正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定には、24ビット符号無し数値、16ビット符号無し数値、8ビット符号無し数値の三通りがあり、フィールド指定の如何によって符号ビットの位置が変わる。そこで正負判別回路２３は、正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定に従ってＯＮを判定すべきビットを変更する。
【００５７】
ここで正負判別回路２３は正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が24ビット符号無し数値なら下位から第24ビット目がオンであるかを判定し、正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が16ビット符号無し数値なら下位から第16ビット目がオンであるかを判定する。正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定が8ビット符号無し数値なら下位から第8ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ６に蓄積されている積和値を正値化飽和演算命令『MCSST』の正値化幅−飽和幅指定フィールドの指定に従った値にて表現した場合、負数として表現されるかの判定を意味する。負数である場合は論理値『１』をマルチプレクサ２４に出力する。保持されている値がゼロ或は正数である場合は論理値『０』をマルチプレクサ２４に出力する。
【００５８】
ゼロ値発生回路２５は、解読結果が正値化飽和演算処理命令『MCSST』であれば、整数『0x0000 0000』を発生する。
マルチプレクサ２４は、比較回路２２及び正負判別回路２３から出力された論理値の組み合わせに応じて、定数発生回路２１が発生した最大値、ゼロ値発生回路２５が発生したゼロ値『0x0000 0000』、積和結果専用レジスタ６によって保持されているレジスタファイル１の保持値のうち何れかを選択的に出力する。
【００５９】
ここで比較回路２２から出力される論理値を論理値x、正負判別回路２３から出力される論理値を論理値yとすると、これらの論理値の組み合わせと、マルチプレクサ２４からの出力値との対応関係は図７の真理値表のように表現される（尚図７の真理値表においては定数発生回路２１が発生した最大値を『0x0000_00FF』としている。）。
【００６０】
図７の真理値表によれば、比較回路２２の出力が『０』であり、正負判別回路２３の出力が『０』である場合、マルチプレクサ２４は積和結果専用レジスタ６の保持値を出力する。
比較回路２２の出力が『１』であり、正負判別回路２３の出力が『０』である場合、マルチプレクサ２４は定数発生回路２１が発生した最大値『0x0000_00FF』を出力する。
【００６１】
比較回路２２の出力が『０』であり、正負判別回路２３の出力が『１』である場合、マルチプレクサ２４はゼロ値発生回路２５が発生したゼロ値『0x0000_0000』を出力する。比較回路２２の出力が『１』であり、正負判別回路２３の出力が『１』である場合、マルチプレクサ２４はゼロ値発生回路２５が発生したゼロ値『0x0000_0000』を出力する。
【００６２】
図８及び図９は、演算実行装置１４におけるデータの流れを示した説明図である。図８においてデータレジスタD0及びデータレジスタD1を乗数、被乗数の読み出し先に指定した積和機能付き乗算命令『MACCB D0,D1』をデコーダ１３が解読したとする。この場合、レジスタファイル１に格納されているデータレジスタD0の保持値『0x0000007F』及びデータレジスタD1の保持値『0x00000070』が第１内部バス１５及び第２内部バス１６を転送して、符号拡張回路４及び符号拡張回路５に与えられる。符号拡張回路４及び符号拡張回路５から出力された32ビット数値同士の乗算を算術論理演算回路２（ここでの算術論理演算回路２の動作は乗算であるので、図中では算術論理演算回路２を『乗算器』と記述している。）は行い、その乗算結果である64ビット数値『0x0000_0000_0000_3790』の下位32ビット『0x0000_3790』を積和結果専用レジスタ６に出力する。正値化飽和演算命令『MCSST D1』の解読により、積和結果専用レジスタ６がその保持値を正値化飽和演算回路３に出力すると、正値化飽和演算回路３はその32ビット『0x0000_3790』が、符号無し8ビット数値の最大値『0x000000FF』より大きいことを判定し、符号無し8ビット数値の最大値『0x000000FF』をデータバス１８を介してレジスタファイル１内のデータレジスタD1に保持させる。
【００６３】
図９においてデータレジスタD0及びデータレジスタD1を乗数、被乗数の読み出し先に指定した積和機能付き乗算命令『MACCB D0,D1』をデコーダ１３が解読したとする。この場合、レジスタファイル１に格納されているデータレジスタD0の保持値『0x0000007F』及びデータレジスタD1の保持値『0x00000080』が第１内部バス１５及び第２内部バス１６を転送して、符号拡張回路４及び符号拡張回路５に与えられる。データレジスタD1の保持値『0x00000080』は、8ビット数値の負数であるから、符号拡張回路５はデータレジスタD1の保持値『0x00000080』の8ビット目の符号ビットを9ビット〜32ビットに拡張して『0xFFFF_FF80』として算術論理演算回路２に出力する。
【００６４】
符号拡張回路４から出力されたデータレジスタD0の32ビット長の保持値『0x0000007F』と、符号拡張回路５により拡張された32ビット数値『0xFFFF_FF80』との乗算を算術論理演算回路２は行い、その乗算結果である64ビット数値『0xFFFF_FFFF_FFFF_C080』の下位32ビット『FFFF_C080』を積和結果専用レジスタ６に出力する。正値化飽和演算命令『MCSST D1』の解読により、積和結果専用レジスタ６がその保持値を正値化飽和演算回路３に出力すると、正値化飽和演算回路３はその32ビット『FFFF_C080』が、符号付き16ビット数値の負数であることを判定し、8ビット数値のゼロ値『0x00000000』をデータバス１８を介してレジスタファイル１内のデータレジスタD1に保持させる。
【００６５】
以上のように構成されたプロセッサが、行列積サブルーチンに基づいて動作する様子を以下に説明する。命令読出し回路１２により行列積サブルーチンに含まれる転送命令がデコーダ１３内の命令バッファ内へと読み出され、デコーダ１３が読み出された命令5:『MOV (A0),D0』を解読する。この命令5:『MOV (A0),D0』は、アドレスレジスタA0を用いて読出先を指定したレジスタ間接参照を用いて、ＲＡＭ１０からのデータ読み出しを指示する転送命令であり、これに基づいて、ＲＡＭ１０に記憶されている8×8の行列状成分からなる圧縮データＦijの1行1列成分（Ｆ11）がデータレジスタD0上に読み出される。命令5:『MOV (A0),D0』の後に配置されている命令6:『MOV (A1),D1』の実行により8×8の係数データＧjiの1行1列成分（Ｇ11）がデータバス１８を介してレジスタファイル１内のデータレジスタD1上に読み出される。
【００６６】
行列積サブルーチンには、命令5:『MOV (A0),D0』及び命令6:『MOV (A1),D1』に続いて命令7として積和機能付き乗算命令『MACCB D0,D1』が並んでおり、これが命令読出し回路１２により、デコーダ１３内の命令バッファ内へと読み出され、デコーダ１３が読み出された積和機能付き乗算命令『MACCB D0,D1』を解読する。解読結果に基づき、データレジスタD0及びデータレジスタD1に保持されているＦ11,Ｇ11が第１内部バス１５及び第２内部バス１６上に転送される。
【００６７】
積和機能付き乗算命令『MACCB D0,D1』の解読時において第１内部バス１５及び第２内部バス１６には、積和機能付き乗算命令『MACCB D0,D1』の第１オペランド及び第２オペランドにて指定された読出先レジスタの保持値Ｆ11,Ｇ11が転送されている。これらは、符号拡張回路４及び符号拡張回路５により出力され、算術論理演算回路２により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われる。乗算結果『Ｇ11*Ｆ11』は積和結果専用レジスタ６に転送され、積和結果専用レジスタ６により保持される。
【００６８】
積和結果専用レジスタ６に乗算結果『Ｇ11*Ｆ11』が格納されると、命令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』はＲＯＭ１１における読み出し先アドレスを次列及び次行に移行させる目的で配置されている。これらの命令のインクリメントにより圧縮データＦijの読み出し先アドレスは2行1列となり、係数データＧjiの読み出し先アドレスは、1行2列となる。
【００６９】
読み出し先アドレスのインクリメント後、命令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』が再度読み出される。
【００７０】
読み出された転送命令により、ＲＡＭ１０に記憶されている8×8の行列状成分からなる圧縮データの2行1列成分（Ｆ21）がデータレジスタD0上に読み出され、8×8の係数データの1行2列成分（Ｇ12）がデータバス１８を介してレジスタファイル１内のデータレジスタD1上に読み出される。
行列積サブルーチンには、転送命令に続いて積和機能付き乗算命令『MACCB D0,D1』が並んでおり、これが命令読出し回路１２により、デコーダ１３内の命令バッファ内へと読み出され、デコーダ１３により読み出された積和機能付き乗算命令『MACCB D0,D1』が解読される。解読結果に基づき、データレジスタD0及びデータレジスタD1の保持値が第１内部バス１５及び第２内部バス１６上に転送される。
【００７１】
積和機能付き乗算命令『MACCB D0,D1』の解読時において第１内部バス１５及び第２内部バス１６には、積和機能付き乗算命令『MACCB D0,D1』の第１オペランド及び第２オペランドにて指定された読出先レジスタの保持値が転送されている。これらは行列成分Ｇ12,Ｆ21であり、算術論理演算回路２によりデータレジスタD0の保持値Ｇ12と、データレジスタD1の保持値Ｆ21との乗算が行われる。一方積和結果専用レジスタ６には、これまでの積和における単項式の演算結果『Ｇ11*Ｆ11』が格納されている。積和結果専用レジスタ６は、積和機能付き乗算命令『MACCB D0,D1』の解読により、その保持値をパスP1上に出力する。
【００７２】
パスP１には積和結果専用レジスタ６の保持値が転送されるので、データレジスタD0−データレジスタD1の乗算結果『Ｇ12*Ｆ21』は、パスP1上の積和結果専用レジスタ６の保持値と加算されることになる。加算結果は、パスP２上に出力される。
パスP1上の保持値『Ｇ11*Ｆ11』と乗算結果『Ｇ12*Ｆ21』との加算が算術論理演算回路２により行われると、パスP2上に加算結果『Ｇ11*Ｆ11+Ｇ12*Ｆ21』が新たに出力されるが、積和結果専用レジスタ６は出力された加算結果を出力して、積和値『Ｇ11*Ｆ11+Ｇ12*Ｆ21』として保持する。
【００７３】
以上の処理が8×8の行列状成分からなる圧縮データＦijの第1列の全ての成分、8×8の係数データＧjiの第1行の全ての成分について繰り返される。この繰り返しにより、『Ｇ11*Ｆ11+Ｇ12*Ｆ21+Ｇ13*Ｆ31+Ｇ14*Ｆ41+Ｇ15*Ｆ51+Ｇ16*Ｆ61+Ｇ17*Ｆ71+Ｇ18*Ｆ81』という積和演算が完了し、積和値が積和結果専用レジスタ６に得られる。ここで留意しておきたいのは、ＲＡＭ１０に記憶されているＦ31は、実は伝送時にビット誤りを起こしたため、積和結果専用レジスタ６に保持されている積和値は再生系ハードウェアが再生可能な範囲を遙かに越えた数値（『0x000078FF』）で表現されている点である。
【００７４】
しかしながら、ＲＯＭ１１内の行列積サブルーチンはこのようなビット誤りを念頭においており、積和機能付き乗算命令『MACCB D0,D1』の繰り返しを行うループ文の後に正値化飽和演算命令『MCSST D1』を配している。
ＲＯＭ１１においてループ文の後に配されている正値化飽和演算命令『MCSST D1』がデコーダ１３内の命令バッファへと読み出されると、正値化飽和演算命令『MCSST D1』がデコーダ１３により解読される。
【００７５】
正値化飽和演算命令『MCSST D1』が解読された場合は、積和結果専用レジスタ６は保持値（0x000078FF）をパスP1上に出力する。
パスP1への出力が行われると、デコーダ１３により比較回路２２が起動される。比較回路２２は積和結果専用レジスタ６の保持値と、32ビット符号付き整数0x000000FFとの大小を比較する。この場合、積和結果専用レジスタ６の保持値が最大値0x000000FFを上回っているので、論理値『１』をマルチプレクサ２４に出力する。
【００７６】
正負判別回路２３は、積和結果専用レジスタ６によって保持されている値の下位から16ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ６に蓄積されている積和値が負数であるかの判定を意味する。保持値（0x000078FF）の２進数表現は、（0000_0000 0000_0000 0111_1000 1111_1111）であり、下位から16ビット目は『０』なので論理値『０』をマルチプレクサ２４に出力する。
【００７７】
この際、定数発生回路２１及びゼロ値発生回路２５により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ２４は、上限値、ゼロ値、積和結果専用レジスタ６の保持値の何れか一つを比較回路２２及び正負判別回路２３から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路２２の出力が『１』であり、正負判別回路２３の出力が『０』であるので、マルチプレクサ２４は定数発生回路２１が発生した最大値『0x0000_00FF』をデータバス１８上に出力する。
【００７８】
デコーダ１３の制御により、データバス１８上に出力された保持値は、正値化飽和演算命令『MCSST D1』のオペランドで指定されているデータレジスタD1へと転送され、データレジスタD1により保持される。保持された保持値は、行列積Ｈijの1行1列目の成分（Ｈ11）としてＲＡＭ１０内に書き込まれる。
圧縮データＦijの第1列の全成分と、Ｇjiの第1行の全成分との積和演算が終了する。続いて圧縮データＦijの第2列の全成分と、Ｇjiの第1行の全成分についての積和演算が行われ、『Ｇ11*Ｆ12+Ｇ12*Ｆ22+Ｇ13*Ｆ32+Ｇ14*Ｆ42+Ｇ15*Ｆ52+Ｇ16*Ｆ62+Ｇ17*Ｆ72+Ｇ18*Ｆ82』という積和演算が完了し、積和値が積和結果専用レジスタ６に得られたものとする。
【００７９】
ここで留意しておきたいのは、ＲＡＭ１０に記憶されているＦ32は、実は伝送時にビット誤りを起こしており、積和結果専用レジスタ６に記憶されている積和値は再生系ハードウェアが再生不可能な負数（『0x000086FF』）で表現されている点である。
ＲＯＭ１１は、ループ文の後に配されている正値化飽和演算命令『MCSST D1』をＲＯＭ１１からデコーダ１３内の命令バッファに読み出すと、正値化飽和演算命令『MCSST D1』のオペランドがデコーダ１３により解読される。
【００８０】
正値化飽和演算命令『MCSST D1』が解読された場合は、積和結果専用レジスタ６は保持値（0x000086FF）をパスP1上に出力する。
パスP1への出力が行われると、デコーダ１３により比較回路２２が起動される。比較回路２２は積和結果専用レジスタ６の保持値と、32ビット符号付き整数0x000000FFとの大小を比較する。この場合、積和結果専用レジスタ６の保持値が最大値0x000000FFを上回っているので、論理値『１』をマルチプレクサ２４に出力する。
【００８１】
正負判別回路２３は、積和結果専用レジスタ６によって保持されている値の第16ビット目がオンであるかを判定する。この判定は、積和結果専用レジスタ６に蓄積されている積和値が負数であるかの判定を意味する。保持値（0x000086FF）の２進数表現は、（0000_0000 0000_0000 1000_0110 1111_1111）であり、16ビット目は『１』なので論理値『１』をマルチプレクサ２４に出力する。
【００８２】
この際、定数発生回路２１及びゼロ値発生回路２５により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ２４は、これらか或は積和結果専用レジスタ６の保持値を比較回路２２、正負判別回路２３から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路２２の出力が『１』であり、正負判別回路２３の出力が『１』であるので、マルチプレクサ２４は定数発生回路２１が発生した最大値『0x0000_0000』をデータバス１８上に出力する。
【００８３】
デコーダ１３の制御により、データバス１８上に出力された保持値は、正値化飽和演算命令『MCSST D1』のオペランドで指定されているデータレジスタD1へと転送され、データレジスタD1により保持される。保持された値は、行列積Ｈijの1行2列目の成分（Ｈ12）としてＲＯＭ１１内に書き込まれる。
同様の行列積の成分の書き込みが繰り返されて、行列積結果がＲＡＭ１０内に得られ、この行列積結果を逆DCTの近似計算結果として利用することにより、圧縮データの伸長処理がなされる。
【００８４】
図１１はプロセッサが機械語命令を命令読出ステージ、命令解読ステージ、実行ステージ、メモリアクセスステージ、レジスタ書込ステージという五段ステージからなるパイプラインにより行列積ルーチンを実行している様子を示す。デコーダ１３による命令10:『MCSST D1』のフェッチステージは、その前の機械語命令命令9:『BCS LP1_NEXT』のデコードステージと同時に行われている。命令8:『CMP NUMBER,D2』においてはデータレジスタD2に格納された繰返回数から総回数NUMBERを減じる演算が行われているので、減算の結果キャリーフラグがＯＮになれば命令13:『ADD 1,D2』に分岐するため命令10:『MCSST D1』の実行ステージへの移行を中断する。
【００８５】
これに対してキャリーフラグがＯＦＦであれば命令9:『BCS LP1_NEXT』の実行ステージと同時に、命令10:『MCSST D1』の解読ステージが行われる。続いて命令9:『BCS LP1_NEXT』のメモリ書込ステージと同時に、命令10:『MCSST D1』の実行ステージが行われる。一行成分×一列成分の行列積結果についての正値化飽和演算処理は、その前に位置する命令のメモリ書込ステージにおいて実行されるのでパイプラインを乱さずに行われていることがわかる。
【００８６】
このように正値化飽和演算回路３を内蔵したプロセッサは、一行成分×一列成分の行列積結果について成分を高頻度に行う必要があっても、機械語プログラムにおいて正値化飽和演算補正処理が一命令として表現されているのでパイプラインが乱れることはない。従ってプロセッサ全体の処理を高速化することができる。
【００８７】
以上のように本実施形態によれば、積和値の正値化飽和演算処理のための専用命令により、積和結果専用レジスタ６内に得られた積和値に正値化飽和演算処理を施すので、画像データ、音声データの伸長処理に必要となる行列積近似計算のアプリケ−ションプログラムがより簡易にコーディングでき、そのコード量も非常に少なくなる。このコード量が軽減されるため、プログラムをＲＯＭに実装する場合はその実装量を軽減することができる。
【００８８】
また積和値の正値化飽和演算処理は、積和結果専用レジスタ６に格納されている積和値に対しての正値化処理と飽和演算処理とを同時に行うため、高速である。正値化飽和演算処理は、行列積演算における1行成分×1列成分の計算の際に必要であり、8×8行列同士の行列積においては、６４回もの正値化飽和演算処理の実行が必要となるが、上記のように正値化処理及び飽和演算処理は非常にスムーズに行われるので、一回当たりの正値化飽和演算処理が短時間で完了する。このように正値化飽和演算処理が短時間で完了するので、膨大な数の行列積の繰り返しが必要となる画像データ、音声データの伸長処理をより高速化することができる。
【００８９】
更に正値化飽和演算回路３を実装することにより分岐命令を用いずに正値化処理−飽和演算処理を記述することができるので、プロセッサの内部がパイプラインによる高速化を実行している場合にパイプラインを乱すことはなく命令列の高速化を図ることができる。ハイパフォーマンスなパイプラインの実行による命令列実行の高速化を図ることができる。
【００９０】
加えて、行列積演算を実現する専用回路を内蔵することなく正値化飽和演算処理が行われので、プロセッサ特有の汎用性は残っている。そのため独自の伸長処理プログラムにてプロセッサを制御させたいという願望にこたえることができる。
（第１実施形態の応用例）
本応用例は、正値化飽和演算命令『MCSST』による正値化飽和演算処理の読出先にデータレジスタD0〜データレジスタD2を指定し、演算結果の格納先に積和結果専用レジスタ６を指定するものである。本応用例における正値化飽和演算命令『MCSST』の命令フォーマットを図１２に示す。図１２における正値化飽和演算命令MCSSTは読出先指定フィールドを有し、『11』『00』『10』『01』の値を書き込むことにより、積和値の読出先を積和結果専用レジスタ６、データレジスタD0、データレジスタD1、データレジスタD2の何れかに変更することができる。
【００９１】
格納先指定フィールドは、『11』『00』『01』『10』が書き込まれることにより、積和結果専用レジスタ６、データレジスタD0、データレジスタD1、データレジスタD2の何れかを格納先に指定する。
正値化飽和演算命令『MCSST』の命令フォーマットを改変したので、図２に示した演算実行装置１４の内部は、図１３に示すように変更される。図１３において演算実行装置１４に加えられた変更点は、パスC6、パスC7、パスC8及びセレクタ３０が追加されている点である。
【００９２】
パスC6は第２内部バス１６にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値を正値化飽和演算回路３へと転送するためのパスである。
パスC7もパスC6同様、第１内部バス１５にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値を正値化飽和演算回路３へと転送するためのパスである。
【００９３】
セレクタ３０は、パスC6及びパスC7にて転送されるデータレジスタD0、データレジスタD1、データレジスタD2の保持値、積和結果専用レジスタ６の保持値の何れか一つを正値化飽和演算命令『MCSST』における格納先フィールドの指定に基づいて選択的に正値化飽和演算回路３内の比較回路２２へと出力する。
パスC8はパスC4を介して正値化飽和演算回路３からデータバス１８に出力される正値化飽和演算回路３の処理結果を積和結果専用レジスタ６に転送するためのパスである。
【００９４】
以上の簡易な追加により、本応用例では正値化飽和演算命令『MCSST』の機能拡張を実現することができる。
（第２実施形態）
第２実施形態は、算術論理演算回路２による乗算時において、乗算結果に対する正値化飽和演算処理を行う実施形態である。乗算結果の正値化飽和演算処理を行うため、第２実施形態では、図１４の内部構成図に示すように、算術論理演算回路２が出力した乗算結果に対して正値化飽和演算を行うよう、正値化飽和演算回路３が算術論理演算回路２の出力段とパスP3を介して接続されている。このように接続された正値化飽和演算回路３を起動するため、本実施形態ではＲＯＭ１１に記憶されている圧縮データ伸長プログラムは、以下の『MULBSST  Dm,Dn』を含んでいる。
【００９５】
『MULBSST  Dm,Dn』とは、乗算結果に対する正値化飽和演算処理を拡張機能として指定した乗算命令である。即ちDmレジスタとDnレジスタの下位８ビットを用いて乗算を行い、乗算結果である符号付16ビット数値に対して,８ビットの正値化飽和演算処理を正値化飽和演算回路３に命じる。
図１５は、正値化飽和演算付き乗算命令『MULBSST  Dm,Dn』のフォーマットを示す図であり、『MULBSST  Dm,Dn』は図１５に示すように、２ビット長の単項式の演算内容指定フィールドと、２ビット長の乗数読出先指定フィールドと、２ビット長の被乗数読出先指定フィールドと、正値化飽和演算結果の格納先指定フィールドとを含む。
【００９６】
正値化飽和演算処理フィールドは、『01』『10』『11』が書き込まれることにより、正値化飽和演算処理の丸め幅を24ビット正値、16ビット正値、8ビット正値の何れかに指定する。乗数読出先指定フィールド及び被乗数読出先指定フィールドは、『00』『01』『10』『11』が書き込まれることにより、データレジスタD0、データレジスタD1、データレジスタD2の何れかから、乗数Ｆij、被乗数Ｇjiの読み出し先レジスタを指定する。
【００９７】
正値化飽和演算付き乗算命令『MULBSST  Dm,Dn』が実行されると、レジスタファイル１は、第１オペランド及び第２オペランドで指示されているレジスタ名の保持値を出力する。次に演算回路２はレジスタDmとDnの値を乗算し、その乗算結果を出力する。この乗算結果に対する正値化飽和演算処理が第１実施形態同様正値化飽和演算回路３により行われ、正値化飽和演算処理の結果が正値化飽和乗算命令の第２オペランドに指定されているレジスタに転送される。
【００９８】
以上のように構成されたプロセッサが、行列積サブルーチンに基づいて動作する様子を説明する。命令読出し回路１２により行列積サブルーチンに含まれる転送命令がデコーダ１３内の命令バッファ内へと読み出され、デコーダ１３が読み出された転送命令を解読する。これに基づいて、ＲＡＭ１０に記憶されている8×8の行列状成分からなる圧縮データＦijの1行1列成分（Ｆ11）がデータレジスタD0上に読み出され、8×8の係数データＧjiの1行1列成分（Ｇ11）がデータバス１８を介してレジスタファイル１内のデータレジスタD1上に読み出される。
【００９９】
行列積サブルーチンには、転送命令に続いて正値化飽和演算付き乗算命令『MULBSST D0,D1』が並んでおり、これが命令読出し回路１２により、デコーダ１３内の命令バッファ内へと読み出され、デコーダ１３が読み出された正値化飽和演算付き乗算命令『MULBSST D0,D1』を解読する。解読結果に基づき、データレジスタD0及びデータレジスタD1に保持されているＦ11,Ｇ11が第１内部バス１５及び第２内部バス１６上に転送される。
【０１００】
正値化飽和演算付き乗算命令『MULBSST D0,D1』の解読時において第１内部バス１５及び第２内部バス１６には正値化飽和演算付き乗算命令『MULBSST D0,D1』の第１オペランド及び第２オペランドにて指定された読出先レジスタの保持値Ｆ11,Ｇ11が転送されているので、算術論理演算回路２により、データレジスタD0の保持値と、データレジスタD1の保持値との乗算が行われて、その乗算結果がパスP3上に出力される（尚、上記Ｆ11は、ビット誤りを起こしており、Ｇ11*Ｆ11の乗算結果は、『0x000078FF』という、１バイトで表現できない数値になっているものとする。）
一方、デコーダ１３は正値化飽和演算付き乗算命令『MULBSST D0,D1』を解読すると、デコーダ１３は正値化飽和演算回路３を起動する。この起動によって、第１実施形態同様、比較回路２２により乗算結果の値と、32ビット符号付き整数0x000000FFとの大小比較が行われる。この場合、乗算結果の値が最大値0x000000FFを上回っているので、比較回路２２は論理値『１』をマルチプレクサ２４に出力する。
【０１０１】
正負判別回路２３は、乗算結果の値の第16ビット目がオンであるかを判定する。この判定は、乗算結果の値が負数であるかの判定を意味する。保持値（0x000078FF）の２進数表現は、（0000_0000 0000_0000 0111_1000 1111_1111）であり、16ビット目は『０』なので論理値『０』をマルチプレクサ２４に出力する。
【０１０２】
この際、定数発生回路２１及びゼロ値発生回路２５により、上限値『0x0000_00FF』及びゼロ値『0x0000_0000』が発生されているが、マルチプレクサ２４は、上限値、ゼロ値、乗算結果の値の何れか一つを比較回路２２、正負判別回路２３から出力された論理値の組み合わせにより選択的に出力する。この場合は比較回路２２の出力が『１』であり、正負判別回路２３の出力が『０』であるので、マルチプレクサ２４は定数発生回路２１が発生した最大値『0x0000_00FF』をデータバス１８上に出力する。
【０１０３】
デコーダ１３の制御により、データバス１８上に出力された保持値は、正値化飽和演算命令『MULBSST D0』のオペランドで指定されているデータレジスタD0へと転送され、データレジスタD0により保持される。
以上のように第２実施形態によれば、符号付き演算結果に対する飽和演算処理と正値化処理とを共に行う演算命令を用意することにより、演算処理と、正値化処理と、飽和演算処理との３つの処理を１ステップで処理することができ、これにより正値化飽和演算処理が演算処理と同じステップで実行する。このため、正値化飽和演算処理の実行ステップ数は実質０となる。
【０１０４】
なお、本発明の第二の実施の形態では符号なし８ビット幅での丸めを行っているが、上限値は任意の正の整数値を設定してもよい。
【０１０５】
【発明の効果】
本発明におけるプロセッサは、命令列における命令を解読するデコーダと、前記デコーダが補正命令を解読した際、当該補正命令のオペランドに指定された格納先に存在する符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記補正命令のオペコードを解読することによりビット長sを認識するとともに、補正命令のオペランドに指定された格納先に存在する符号付きmビット整数値を、sビット長の符号無し整数の範囲(s＜m)に飽和させるよう、正値化飽和演算手段を制御することを特徴としており、このように構成されたプロセッサによれば、値の丸め処理が、命令列に含まれている補正命令の検出時に一度に行われるので、丸め処理のためにプログラマが記述する命令量は一命令で済む。
【０１０６】
丸め処理が一つの補正命令に基づいて一度に行われるので、一回当たりの実行時間が極めて短く、たとえ演算値の丸め処理が、データの伸長処理において頻繁に必要となっても、これらの処理が原因でデータの伸長時間が長引くことはない。
丸め処理の実行には、補正命令を実行すればよいので、プロセッサがパイプライン処理の導入により積和の高速化を行おうとしている場合に、パイプラインをみだりに乱すことはない。従って、少ないハードウェアの追加にて命令列のコードサイズの縮小と、命令列実行の高速化を図ることができる。
【０１０７】
ここでプロセッサは、命令列における命令を解読するデコーダと、デコーダにより解読された命令が演算命令であるなら、mビット整数値を用いた演算を行う演算手段と、前記演算命令の演算結果である符号付き整数を、予め定められたビット長の符号無し整数に変換する正値化飽和演算手段とを備え、前記デコーダは、前記演算命令のオペコードを解読することにより、ビット長sを認識するとともに、演算手段の演算結果である符号付きmビット整数値を、sビット長の符号無し整数の範囲(s＜m)に飽和させるよう、正値化飽和演算手段を制御してもよい。
【０１０８】
本プロセッサによれば、符号付き演算結果に対する丸め処理を行う補正命令を用意することにより、演算処理と、丸め処理との２つの処理を１ステップで処理することができ、これにより正値化飽和演算処理が演算処理と同じステップで実行する。このため、正値化飽和演算処理の実行ステップ数を実質０とすることができる。
【図面の簡単な説明】
【図１】本発明の第１実施形態におけるプロセッサの構成図である。
【図２】第１実施形態における演算実行装置１４の構成図である。
【図３】第１実施形態における行列積サブルーチンを構成する命令列を示す図である。
【図４】積和機能付き乗算命令『MACCB D0,D1』の命令フォーマットを示す図である。
【図５】正値化飽和演算命令『MCSST』の命令フォーマットを示す図である。
【図６】（ａ）32ビット幅における乗数、被乗数、積和値、行列積成分の表現を示す図である。
（ｂ）正値化飽和演算回路３がどのように積和値を丸めるかを示す説明図である。
【図７】定数発生回路２１、ゼロ値発生回路２５の出力値の組み合わせと、マルチプレクサ２４の出力との関係を示す真理値表を示す図である。
【図８】32×32bitの乗算−積和器で8×8bitの乗算を行う場合のデータの流れを説明するための説明図である。
【図９】32×32bitの乗算−積和器で8×8bitの乗算を行う場合のデータの流れを説明するための説明図である。
【図１０】図１に示すプロセッサの内部により行われるパイプライン処理の一例を示す図である。
【図１１】図１に示すプロセッサの内部により行列積サブルーチンがパイプライン処理により実行される様子を示す図である。
【図１２】第１実施形態の応用例における正値化飽和演算命令『MCSST』の命令フォーマットを示す図である。
【図１３】第１実施形態の応用例における演算実行装置１４の内部を示す図である。
【図１４】第２実施形態における演算実行装置１４の構成図である。
【図１５】正値化飽和演算付き乗算命令『MULBSST  Dm,Dn』の命令フォーマットを示す図である。
【図１６】従来技術において、積和結果専用レジスタ６２が設けられている算術演算回路６１を示す図である。
【図１７】  8×8成分からなる行列の行列積をとる様子を説明するための説明図である。
【符号の説明】
１    レジスタファイル
２    算術論理演算回路
３    正値化飽和演算回路
４    符号拡張回路
５    符号拡張回路
６    積和結果専用レジスタ
１０    ＲＡＭ
１１    ＲＯＭ
１２    命令読み出し回路
１３    デコーダ
１４    演算実行装置
１５    内部バス
１６    内部バス
１７    アドレスバス
１８    データバス
２１    定数発生回路
２２    比較回路
２３    正負判別回路
２４    マルチプレクサ
２５    ゼロ値発生回路
３０    セレクタ
【図１】
0003790619.tif 000002
【図２】
0003790619.tif 000003
【図３】
0003790619.tif 000004
【図４】
0003790619.tif 000005
【図５】
0003790619.tif 000006
【図６】
0003790619.tif 000007
【図７】
0003790619.tif 000008
【図８】
0003790619.tif 000009
【図９】
0003790619.tif 000010
【図１０】
0003790619.tif 000011
【図１１】
0003790619.tif 000012
【図１２】
0003790619.tif 000013
【図１３】
0003790619.tif 000014
【図１４】
0003790619.tif 000015
【図１５】
0003790619.tif 000016
【図１６】
0003790619.tif 000017
【図１７】
0003790619.tif 000018