JPH0749767A - 飽和処理機能を備えた演算処理装置 - Google Patents

飽和処理機能を備えた演算処理装置

Info

Publication number
JPH0749767A
JPH0749767A JP5194554A JP19455493A JPH0749767A JP H0749767 A JPH0749767 A JP H0749767A JP 5194554 A JP5194554 A JP 5194554A JP 19455493 A JP19455493 A JP 19455493A JP H0749767 A JPH0749767 A JP H0749767A
Authority
JP
Japan
Prior art keywords
upper limit
limit value
positive
negative
information
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.)
Pending
Application number
JP5194554A
Other languages
English (en)
Inventor
Toshika Minami
利香 南
Mitsuru Watabe
満 渡部
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.)
Hitachi Ltd
Original Assignee
Hitachi 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
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP5194554A priority Critical patent/JPH0749767A/ja
Publication of JPH0749767A publication Critical patent/JPH0749767A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 飽和処理に係るプログラムステップ数を低減
する。 【構成】 演算器(104)から演算実行によりオーバ
フローしたか否かの情報又は任意の正・負の上限値を越
えたか否か等の演算結果情報(107)を出力するよう
にし、その演算結果情報を用いて選択回路(206)に
より演算結果と定数記憶手段(205)に格納されてい
る正の上限値と負の上限値のいずれか1つを最終演算結
果として選択し、1命令で飽和処理を実行する。 【効果】 プログラムステップ数の増加を抑えて、パイ
プライン処理を乱さずに飽和処理を行え、処理速度を高
めることができる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、マイクロプロセッサや
マイクロコンピュータ等の演算処理装置に係り、特に演
算においてオーバーフローが発生した場合や、演算結果
の値をリミッタ処理する場合等のように、演算結果が予
め定めた値を越えた場合の最終演算結果を設定値に置き
換える飽和処理機能を備えた演算処理装置に関する。
【0002】
【従来の技術】従来の飽和処理方式の一例として、文献
1「H8/532 HD6475328 HD6435
328 ハードウェアマニュアル(昭和63年12月株
式会社日立製作所発行)」の第341頁から第368頁
において論じられているものが知られている。これによ
れば、演算器により演算を実行した後、その演算結果が
飽和(オーバフロー)したか否かを判定し、飽和してい
た場合には演算結果が正であるか否かを判定し、その結
果により演算器のレンジにおける正の最大値(以下、M
AX値と称す。)又は負の最大値(以下、MIN値と称
す。)を最終演算結果とする。例えば、32ビット符号
付き整数の演算ではMAX値は「0x7FFFFFF
F」、MIN値は「0x80000000」である。
【0003】また、ディジタル・シグナル・プロセッサ
(以下、DSPと称す。)による飽和処理方式として、
従来、文献2「TMS32010ディジタル・シグナル
・プロセッサ ユーザーズ・マニュアル(昭和62年7
月日本テキサス・インスツメンツ株式会社発行)の第3
頁から第57頁において論じられている。これによれ
ば、オーバフローを起こす可能性のある演算を実行する
前に飽和処理モードを設定し、その後に実行した演算結
果に対して飽和処理を実行するものであり、飽和処理モ
ードを設定するとそれ以降の全ての演算について飽和処
理を実行する。したがって、飽和処理モードを設定した
後に、飽和処理が必要でない演算を実行する場合は、飽
和処理モードの設定を解除する命令を付加している。
【0004】また、最近では、アナログオペアンプのデ
ィジタル化による実現に伴い任意の値を上限値とするリ
ミッタ処理が必要となっている。上記従来技術によりリ
ミッタ処理を行おうとすると、演算実行後に演算結果と
リミッタ設定値を比較し、その大小関係によって演算結
果、正のリミッタ値又は負のリミッタ値を選択して最終
演算結果とすることになる。
【0005】
【発明が解決しようとする課題】上記文献1の従来技術
においては、飽和処理についての十分な配慮がなされて
おらず、演算実行後に飽和処理が必要か否かの判定を行
わせる判定命令と、演算した結果が正か否かを判定する
判定命令が必要となる。そのため、プログラムステップ
数が増大し、さらにプログラム実行時にパイプラインが
乱れるという問題がある。
【0006】また、上記文献2の従来技術は、飽和処理
を必要とする演算の直後に飽和処理が必要でない演算を
実行する場合についての十分な配慮がなされておらず、
飽和処理が必要でない演算の直前に飽和処理モードを解
除する命令を付加する必要がある。そのため、プログラ
ムステップ数が増大し、さらにプログラム実行時にパイ
プラインが乱れるという問題がある。さらに、飽和処理
モードの設定命令と解除命令の間に多くの命令が存在す
る場合、プログラムを一目見ただけでは飽和処理がなさ
れるか否かが不明であるという問題がある。また、リミ
ッタ処理についての十分な配慮がなされておらず、演算
実行後に正のリミッタ値より大きいか否かの判定と負の
リミッタ値より小さいか否かの判定が必要となる。その
ため、プログラムステップ数が増大し、さらにプログラ
ム実行時にパイプラインが乱れるという問題がある。
【0007】本発明の目的は、オーバーフロー処理やリ
ミッタ処理等のための飽和処理に係るプログラムステッ
プ数を低減できる飽和処理機能を備えた演算処理装置を
提供することにある。
【0008】
【課題を解決するための手段】本発明の演算処理装置
は、上記目的を達成するため、以下の手段を備えること
を特徴とする。
【0009】基本的手段としては、制御信号に従って2
つの入力値を加減算して演算結果とその演算結果が予め
定めた値を越えたか否かの信号を含む演算結果情報を生
成する演算器と、少なくとも1つの設定値が格納された
定数記憶手段と、前記演算結果情報に基づいて前記演算
結果と前記定数記憶手段の設定値の1つを最終演算結果
として選択する選択回路とを備えたものとする。
【0010】本発明は、加減算にかかる入力値が符号付
きの場合又は符号なしの場合、またオーバーフロー処理
又はリミッタ処理に合わせて、以下のような具体的な変
形が可能である。
【0011】符号付き入力値を加減算する演算器のオー
バーフロー処理を行う場合は、演算結果情報は加減算に
てオーバーフローが発生したか否かを表すオーバーフロ
ー情報及び入力値と演算結果との正負を表す正負情報と
する。そして、定数記憶手段に設定値として正の上限値
と負の上限値を格納する。選択回路としてマルチプレク
サを用い、このマルチプレクサに演算結果と正の上限値
と負の上限値とをそれぞれ入力する。そして、そのマル
チプレクサをオーバーフローが発生しなかったときは演
算結果を選択し、オーバーフローが発生したときは正負
情報に従って正の上限値と負の上限値の一方を選択して
出力するように形成することができる。これに対し、符
号なし入力値を加減算する演算器のオーバーフロー処理
を行う場合は、演算結果情報はキャリー又はボローが発
生したか否かを表すキャリー情報とし、マルチプレクサ
はキャリー情報に基づきキャリー又はボローが発生しな
かったときは演算結果を選択し、キャリー又はボローが
発生したときはキャリー又はボローに従って正の上限値
と負の上限値の一方を選択して出力するように形成す
る。
【0012】符号付き入力値を加減算する演算器のオー
バーフロー処理を行う場合の他の手段として、演算結果
情報をオーバーフロー情報と演算結果の正負を表す正負
情報として情報記憶回路に格納するようにし、定数記憶
手段に正の上限値のみを格納し、負の上限値に代えて正
の上限値の1の補数、すなわち正の上限値の反転値を演
算器で演算により求めるようにすることができる。これ
により、マルチプレクサは情報記憶回路の演算結果情報
に基づきオーバーフローが発生しなかったときは演算結
果を選択し、オーバーフローが発生したときは正負情報
の内容に従って正の上限値と正の上限値の1の補数の一
方を選択して出力するように形成する。同様に、符号な
し入力値を加減算する演算器のオーバーフロー処理を行
う場合の他の手段として、演算結果情報をキャリー・ボ
ローが発生したか否かを表すキャリー情報と加算と減算
の種別を表す演算種類情報とし、これらを情報記憶回路
に格納し、負の上限値に代えて正の上限値の1の補数、
すなわち正の上限値の反転値を演算器で演算により求め
るようにすることができる。これにより、マルチプレク
サは情報記憶回路の演算結果情報に基づき、キャリー又
はボローが発生しなかったときは演算結果を選択し、キ
ャリー又はボローが発生したときは演算種類に従って正
の上限値と正の上限値の1の補数の一方を選択して出力
するように形成する。
【0013】選択回路としては、マルチプレクサに代え
て情報記憶回路の演算結果情報に基づき、演算結果、正
の上限値又は負の上限値のいずれか1つを選択し、記最
終演算結果として所定のレジスタ等の記憶エリアに格納
する機能を備えた回路により実現できる。
【0014】任意の上限値(正の上限値、負の上限値)
によるリミッタ処理を行う場合は、定数記憶手段を演算
器の2つの入力にそれぞれ接続された任意の正の上限値
を格納する読み書き可能なMAXレジスタと任意の負の
上限値を格納する読み書き可能なMINレジスタにより
形成する。そして、演算器は正の上限値又は負の上限値
と演算結果との大小関係を判定して演算結果情報とす
る。また、選択回路は演算器の出力とMAXレジスタと
MINレジスタとに接続されたマルチプレクサとする。
そして、マルチプレクサは演算結果情報に基づき演算結
果と正の上限値と負の上限値の1つを選択することによ
り、演算結果のリミット処理を行う。
【0015】この場合において、演算器として第1と第
2の演算器を設け、一方の演算器により加減算を実行し
た後、制御信号に応答して両方の演算器により分担して
演算結果と正の上限値及び負の上限値との比較判定を実
行するようにすることができる。
【0016】
【作用】本発明によれば、次の作用により上記の目的が
達成される。
【0017】演算器から演算実行によりオーバフローし
たか否かの情報又は任意の正・負の上限値を越えたか否
か等の演算結果情報を出力するようにし、その演算結果
情報を用いて選択回路により演算結果と正の上限値と負
の上限値のいずれかを最終演算結果として選択するよう
にしたから、1命令で飽和処理を実行することができ
る。その結果、プログラムステップ数の増加を抑えて、
パイプライン処理を乱さずに飽和処理を行えるととも
に、処理速度を高めることができる。
【0018】
【実施例】以下、本発明を図示実施例に基づいて説明す
る。 (第1実施例)図1に、本発明を16ビット固定長のR
ISCプロセッサに適用した実施例を示す。図示のよう
に、本実施例のマイクロコンピュータ115は中央演算
処理装置(CPU)111、入出力装置(I/O)11
3、不揮発性RAM 114、これらを結ぶ外部バス1
12、情報処理プログラムの命令群が格納される図示し
ていないROM、等を含んで形成されている。ここで、
本発明の特徴を有するCPU111の構成を説明する。
レジスタファイル100はバスa101を介して情報が
書き込まれ、書き込まれた情報はバスb102とバスc
103を介して読み出される。演算器104はバスb1
02とバスc103を介してレジスタファイル100に
接続されている。定数発生器105は予め設定されてい
る正の上限値と負の上限値を発生する。マルチプレクサ
106は演算器104から出力される演算結果情報10
7に基づいて、演算器104から出力される演算結果と
定数発生器105から出力される正の上限値又は負の上
限値のいずれか1つを選択出力する。演算結果情報10
7は、オーバーフロー情報OVと、正負情報Nを含んで
いる。オーバーフロー情報OVは、演算結果にオーバー
フローが発生したときを、例えば”1”に設定し、オー
バーフローが発生しないときを”0”に設定する。ま
た、正負情報Nは、例えば演算結果が正のとき”0”を
設定し、演算結果が負のときは”1”を設定する。ま
た、オーバーフロー情報OVはOVフラグ110として
制御回路108に入力され、正負情報NはNフラグ11
6として制御回路108に入力される。リードライト回
路109はバスa101、バスb102、バスc103
および外部バス112に接続されている。制御回路10
8は図示していないROMから命令を読み出し、その命
令に従ってレジスタファイル100のデータの読み出し
及び書き込み、演算器104の動作の制御、マルチプレ
クサ106の動作の制御等、CPU111の構成要素を
制御して所定の演算処理プログラムを実行する。
【0019】マルチプレクサ106の具体的な実施例を
図2又は図3に示す。図2に示すように、マルチプレク
サ106は正の上限値、負の上限値及び演算結果Sをそ
れぞれ入力とするアンドゲート106a、b、cを備え
る。これらのアンドゲート106a、b、cの出力は、
反転出力のオアゲート106dを介してインバータ10
6eに入力され、このインバータ106eの出力をマル
チプレクサ106の出力としている。アンドゲート10
6cはオーバーフロー情報OVが”0”のとき、すなわ
ちオーバーフローが発生しないときに開かれ、演算結果
Sがそのままマルチプレクサ106の出力になる。アン
ドゲート106aはオーバーフロー情報OVが”1”
で、かつ正負情報Nが”1”のとき開かれ、正の上限値
がマルチプレクサ106の出力になる。アンドゲート1
06bはオーバーフロー情報OVが”1”で、かつ正負
情報Nが”0”のとき開かれ、負の上限値がマルチプレ
クサ106の出力になる。このような機能のマルチプレ
クサ106は図3に示す構成によっても実現できる。
【0020】図3は、CMOSインバータトランスミッ
ションゲートを用いて構成したマルチプレクサである。
本構成のマルチプレクサは、正の上限値を入力とするト
ランスミッションゲート106i、負の上限値を入力と
するトランスミッションゲート106g、演算結果Sを
入力とするトランスミッションゲート106f、hと正
の上限値あるいは演算結果Sを入力とするトランスミッ
ションゲート106kと負の上限値あるいは演算結果S
を入力とするトランスミッションゲート106j、正負
情報Nと演算情報Eをそれぞれ入力とするトランスミッ
ションゲート106l、mとを備える。トランスミッシ
ョンゲート106g、iのセレクタは、オーバフロー情
報OVであり、トランスミッションゲート106f、h
のセレクタは、オーバフロー情報OVの反転信号であ
る。トランスミッションゲート106l、mのセレクタ
は制御回路からの演算の符号の有無情報U、トランスミ
ッションゲート106kのセレクタは、トランスミッシ
ョンゲート106l、mの出力信号、トランスミッショ
ンゲート106jのセレクタは、トランスミッションゲ
ート106l、mの出力信号の反転信号となる。オーバ
フロー情報OVが”1”のとき、トランスミッションゲ
−トg、iがon、トランスミッションゲート106
f、hがoffとなり、正の上限値がトランスミッショ
ンゲート106kの入力となり負の上限値がトランスミ
ッションゲート106jの入力となる。次に、正負情報
Nが”1”のとき、トランスミッションゲート106k
がon、正の上限値がマルチプレクサの出力となる。オ
ーバフロー情報Nが”1”でかつ正負情報Nが”0”の
とき、トランスミッションゲ−トjがonし、負の上限
値がマルチプレクサの出力になる。これら以外の場合
は、演算結果Sがマルチプレクサの出力になる。
【0021】オーバフロー情報OVは例えば図4に示す
手段により演算器104から出力される。同図(A)
は、演算器104で取り扱うディジタルデータのビット
フォーマットの例を示している。これは、最上位ビット
(MSB)がデータの正負を表す符号部になっており、
それ以下(MSB−1〜LSB)がデータの絶対量を示
す数値部になっている。オーバフロー情報OVは、同図
(B)に示すように、演算の際のMSBすなわち符号部
での桁上がり信号WsとMSBの1つ下位のビット(M
SB−1)すなわち数値部の桁上がり信号Woとを入力
とする排他的オアゲート104aの出力である。また、
正負情報Nは、演算結果SのMSBすなわち演算結果S
の符号部である。
【0022】ここで、本実施例のオーバーフロー処理
(飽和処理)を説明する前に、その前提となる加算(以
下、ADDと呼ぶ。)命令、減算(以下、SUBと呼
ぶ。)命令、転送(以下、MOVと呼ぶ。)命令につい
て説明する。ADD命令が発行されると、制御回路10
8が命令を取り込んだ後デコードし、制御信号を発生す
る。制御信号により、レジスタファイル100に格納さ
れている足す数(以下、加数と呼ぶ。)と足される数
(以下、被加数と呼ぶ。)を読み出し、演算器104に
入力する。演算器104は読み出された被加数に加数を
加算する。加数と被加数が共に正で、演算結果が負。あ
るいは加数と被加数が共に負で、演算結果が正。すなわ
ち演算結果にオーバフローが発生していた場合にはOV
フラグを”1”にセットする。また、加数と被加数が共
に正で、演算結果が正。あるいは加数と被加数が共に負
で、演算結果が正。あるいは加数が正で、被加数が負。
あるいは加数が負で、被加数が正。すなわち演算結果に
オーバフローが発生していなかった場合にはOVフラグ
を”0”にクリアする。そして、演算結果を加数が格納
されていたレジスタに格納する。上述した加算処理のA
DD命令の動作をC言語で下記に記述する。ここで、レ
ジスタファイル100を配列R[16]、被加数のレジ
スタの配列番号をm、加数のレジスタの配列番号をn、
OVフラグをOVと定義する。
【0023】 ADD (long m,long n) { long dest,src ; if ((long )R[n] >=0) dest=0 ; else dest=1 ; if ((long )R[m] >=0) src=0 ; else src=1 ; src+=dest ; R[n]+=R[m] ; if ((long)R[n]>=0) N=0 ; else N=1 ; dest+=N ; if ((src==0 | | src==2 ) { if (dest==1) OV=1 ; else OV=0 ; } else OV=0 ; なお、上記記述の中で、src、dest、ansは演
算器104の動作を示すために導入した仮のフラグであ
り、演算器104では等価な演算を実行しているもので
あり、以下の記述においても同様の意味を持つ。
【0024】次にSUB命令を説明する。SUB命令が
発行されると、制御回路108が命令を取り込んだ後デ
コードし、制御信号を発生する。制御信号により、レジ
スタファイルに格納されている引く数(以下、減数と呼
ぶ。)と引かれる数(以下、被減数と呼ぶ。)を演算器
104に読み出す。次に、演算器104は読み出された
被減数から減数を減算する。減数が正で被減数が負で演
算結果が正、あるいは減数が負で被減数が正で演算結果
が負、すなわち演算結果にオーバフローが発生していた
場合にはOVフラグに”1”をセットする。また、減数
が正で被減数が負で演算結果が負、減数が負で被減数が
正で演算結果が正、減数と被減数が共に正、減数と被減
数が共に負、すなわち演算結果にオーバフローが発生し
ていない場合はOVフラグを”0”にクリアする。そし
て、演算結果を減数が格納されていたレジスタに格納す
る。上述の減算処理のSUB命令の動作をC言語で下記
に記述する。ここで、レジスタファイル100を配列R
[16]、被減数のレジスタの配列番号をn、減数のレ
ジスタの配列番号をmと定義する。
【0025】 SUB (long m,long n) { long dest,src ; if ((long )R[n] >=0) dest=0 ; else dest=1 ; if ((long )R[m] >=0) src=0 ; else src=1 ; src+=dest ; R[n]−=R[m] ; if ((long)R[n]>=0) N=0 ; else N=1 ; dest+=N ; if ((src==1) { if (dest==1) OV=1 ; else OV=0 ; } else OV=0 ; } 次に、MOV命令を説明する。MOV命令が発行される
と、制御回路108が命令を取り込んだ後デコードし、
制御信号を発生する。制御信号により、転送元のレジス
タからその内容を読み出す。次に、転送先のレジスタに
その内容を格納するものである。MOV命令の詳細な動
作をC言語で下記に記述する。ここで、記憶回路である
レジスタファイル100を配列R[16]、転送元のレ
ジスタの配列番号をm、転送先のレジスタの配列番号を
nと定義する。
【0026】 ADD、SUB、MOV命令の実行時のパイプライン動
作の一例を図5に示す。命令が発行されると最初の段
(IF:Instruction Fetch)で命令を取り込み、次の
段(ID:Instruction Decode)で命令をデコードし、
次の段(EX)で演算を実行する。次の命令については
一段づつずらして命令の取り込み、デコード、演算の実
行をする。以下、本発明の特徴である飽和処理につい
て、正負の符号付きデータの加算/減算の場合と、符号
なしデータの加算/減算の場合の4つに分けて説明す
る。
【0027】(1)符号付きデータの加算における飽和
処理 この場合の飽和処理は、図6に示すように飽和処理付き
加算(以下、ADDSSと示す。)命令により行う。A
DDSS命令が発行されると、制御回路108が命令を
取り込んだ後デコードし、制御信号を発生する(ステッ
プ1600、1601)。これにより、レジスタファイ
ルに格納されている加数と被加数が演算器104に読み
出される(ステップ1602)。次に、演算器104が
読み出された被加数に加数を加算する(ステップ160
3)。加数と被加数が共に正で、演算結果が負の場合、
あるいは加数と被加数が共に負で、演算結果が正の場
合、すなわち演算結果にオーバフローが発生していた場
合にはOVフラグを”1”にセットする。また、加数と
被加数が共に正で、演算結果が正の場合、あるいは加数
と被加数が共に負で、演算結果が正の場合、あるいは加
数が正で、被加数が負の場合、あるいは加数が負で、被
加数が正の場合、すなわち演算結果にオーバフローが発
生していなかった場合にはOVフラグを”0”にクリア
される(ステップ1604)。このOVフラグはマルチ
プレクサ106に送られる。また、演算結果Sが負であ
った場合にはNフラグが”1”にセットされ、演算結果
Sが正であった場合にはNフラグが”0”にクリアされ
る(ステップ1605)。このNフラグはマルチプレク
サ106に送られる。マルチプレクサ106は、図2に
示したように、OV=1かつN=1のときは定数発生器
105から出力される正の上限値を選択し、バスa10
1を介して加数が格納されていたレジスタに格納する
(ステップ1608)。同様に、OV=1かつN=0の
ときは定数発生器105から出力される負の上限値を選
択して、バスa101を介して加数が格納されていたレ
ジスタに格納する(ステップ1609)。上記のいずれ
でもなかった場合には、マルチプレクサ106は演算結
果Sをバスa101を介して加数が格納されていたレジ
スタに格納する(ステップ1610)。図6のステップ
1602からステップ1610までの処理は、図8のE
X段で並列に実行される。上記のADDSS命令の動作
をC言語で下記に記述する。ここで、レジスタファイル
100を配列R[16]、被加数のレジスタの配列番号
をm、加数のレジスタの配列番号をn、定数発生器を配
列C[2]とし、正の上限値が格納されている配列をC
[0]、負の上限値が格納されている配列をC[1]と
定義する。
【0028】 ADSS ( long m,long n ) { long dest,src ; if ( (long) R[n]>=0 ) dest=0 ; else dest=1; if ( (long) R[m]>=0 ) src=0 ; else src=1; src+=dest ; R[n]+=R[m] ; if ((long) R[n]>=0 ) N=0 ; else N=1 ; dest+=N ; if ((src==0 | | src==2 ) { if (dest==1) OV=1 ; { if (N=0 ) R[n]=C[1] ; else R[n]=C[0] ; } else OV=0 ; } else OV=0 ; } (2)符号付きデータの減算における飽和処理 この場合の飽和処理は、図7に示すように、飽和処理付
き減算(以下、SUBSSと示す。)命令により行う。
SUBSS命令が発行されると、制御回路108が命令
を取り込んだ後デコードし制御信号を発生する(ステッ
プ1700、1701)。これによりレジスタファイル
100に格納されている減数と被減数が演算器104に
読み出される(ステップ1702)。次に、演算器10
4は読み出された被減数から減数を減算する(ステップ
1703)。減数が正で被減数が負で、演算結果が正の
場合、あるいは減数が負で被減数が正で、演算結果が負
の場合、すなわち演算結果にオーバフローが発生してい
た場合にはOVフラグに”1”をセットし、マルチプレ
クサ106にその情報を送る。また、減数が正で被減数
が負で、演算結果が負の場合、減数が負で被減数が正
で、演算結果が正の場合、減数と被減数が共に正の場
合、減数と被減数が共に負の場合、すなわち演算結果に
オーバフローが発生していない場合はOVフラグを”
0”にクリアし、マルチプレクサ106にその情報を送
る(ステップ1704)。また、演算結果Sが負であっ
た場合にはNフラグが”1”にセットされ、正であった
場合にはNフラグを”0”にクリアし、マルチプレクサ
106にその情報を送る(ステップ1705)。図7の
ステップ1702からステップ1710までの処理は、
図8のEX段で並列に実行される。SUBSS命令の詳
細な動作をC言語で下記に記述する。ここで、記憶回路
であるレジスタファイル100を配列R[16]、被減
数のレジスタの配列番号をn、減数のレジスタの配列番
号をm、定数発生器を配列C[2]とし、正の上限値が
格納されている配列をC[0]、負の上限値が格納され
ている配列をC[0]とする。
【0029】 SUBSS ( long m,long n ) { long dest,src ; if ( (long) R[n]>=0 ) dest=0 ; else dest=1; if ( (long) R[m]>=0 ) src=1 ; else src=0; src+=dest ; R[n]−=R[m] ; if ((long) R[n]>=0 ) N=0 ; else N=1 ; dest+=N ; if ((src==1 ) { if (dest==1) OV=1 ; { if (N=0 ) R[n]=C[1] ; else R[n]=C[0] ; } else OV=0 ; } else OV=0 ; } 上述したADDSS命令とSUBSS命令のパイプライ
ン処理動作を図8で説明する。図8において、IF段と
ID段の処理は図5の場合と同じである。EX段で演算
器104による加算又は減算とマルチプレクサ106に
よる判定及びレジスタへの格納を実行する。
【0030】(3)符号なしデータの加算における飽和
処理 この場合の飽和処理は、飽和処理付き加算(以下、AD
DSUと呼ぶ。)命令により行う。無符号のデータのビ
ットフォーマットを図9(A)に示す。この場合の演算
結果情報107は図9(B)に示すように、MBSの桁
上がり信号Wsがオーバフロー情報OVとして出力され
る。このADDSU命令の実行は図10に示すように、
制御回路108が命令を取り込んだ後デコードして制御
信号を発生する(ステップ3000、3001)。これ
により、制御回路108は、演算情報Eをマルチプレク
サ106のN信号の替わりに入力する。この演算情報E
は、例えば符号なし加算の場合は”0”をセットし、符
号なし減算の場合は”1”をセットする。すなわち、A
DDSU命令の場合は”0”がセットされる(ステップ
3002)。さらに、レジスタファイル100に格納さ
れている加数と被加数が演算器104に読みだされ、加
算処理が実行される(ステップ3003、3004)。
この演算においてMSBの桁上がり信号Wsが”1”す
なわちキャリーが発生した場合にはOVフラグを”1”
にセットし、キャリーが発生しなかった場合にはOVフ
ラグを”0”にクリアする。この情報はマルチプレクサ
106に送られる(ステップ3005)。マルチプレク
サ106はOVフラグが”1”のときは正の上限値をバ
スa101を介して加数が格納されていたレジスタに格
納し、OVフラグが”0”のときは演算結果Sをバスa
を介して加数が格納されていたレジスタに格納する(ス
テップ3007〜3009)。ADDSU命令の動作を
C言語で下記に記述する。ここで、レジスタファイル1
00を配列R[16]、被加数のレジスタの配列番号を
m、加数のレジスタの配列番号をn、定数発生器を配列
C[2]とし、正の上限値が格納されている配列をC
[0]と定義する。
【0031】 (4)符号なしデータの減算における飽和処理 この場合の飽和処理は、図11に示すように、飽和処理
付き減算(以下、SUBSUと呼ぶ。)命令により行
う。SUBSU命令が発行されると、制御回路108が
命令を取り込んだ後デコードして制御信号を発生する
(ステップ3100、3101)。これにより、制御回
路108は、演算情報Eをマルチプレクサ106のN信
号の替わりに入力する。この演算情報Eは、例えば符号
なし加算の場合は”0”をセットし、符号なし減算の場
合は”1”をセットする。すなわち、SUBSU命令の
場合は”1”がセットされる(ステップ3102)。さ
らに、レジスタファイル100に格納されている減数と
被減数が演算器104に読みだされ、減算処理が実行さ
れる(ステップ3103、3104)。そしてさらに演
算器104の演算においてボローが発生した場合はOV
フラグを”1”にセットし、ボローが発生しなかった場
合はOVフラグを”0”にクリアし、マルチプレクサ1
06にこの情報を送る(ステップ3105)。マルチプ
レクサ106はOVフラグが”1”のときは負の上限値
を減数が格納されていたレジスタにバスa101を介し
て格納し、OVフラグが”0”のときは演算結果Sを減
数が格納されていたレジスタにバスa101を介して格
納する(ステップ3107〜3109)。SUBSU命
令の動作をC言語で下記に記述する。ここで、タファイ
ル100を配列R[16]、被減数のレジスタの配列番
号をm、減数のレジスタの配列番号をn、定数発生器を
配列C[2]とし、負の上限値が格納されている配列を
C[1]と定義する。
【0032】 上述したADDSU命令とSUBSU命令のパイプライ
ン処理動作のタイムチャートを図12に示す。前述のパ
イプライン処理と同様、EX段で加算/減算とマルチプ
レクサ106による判定及びレジスタ100への格納を
実行する。
【0033】上述したように、第1実施例は、正負の符
号付きと符号なしのデータ、及び加算と減算に対応させ
て、4種類の飽和処理付き命令を設ける。また、マイク
ロコンピュータ115内に、正/負の上限値を発生する
定数発生器105と、演算結果Sと正/負の上限値のい
ずれか1つを選択して最終演算結果とするマルチプレク
サ106とを設ける。そして、演算器104から演算結
果Sに基づいてオーバーフローとその状況を示す演算結
果情報107を出力するようにし、その演算結果情報1
07に従ってマルチプレクサ106を動作させるように
したことを特徴とする。したがって、本実施例によれ
ば、演算の実行後に飽和処理の要否を判定する命令、演
算結果等の正負を判定する命令、あるいは飽和処理の解
除命令が不要になる。その結果、飽和処理に伴うプログ
ラムステップ数の増加を抑えることができるから、処理
速度を向上できると共に、パイプライン処理が乱される
ことがない。
【0034】なお、上記実施例のマルチプレクサ106
に代えて、演算器104に定数発生器105から正/負
の上限値を入力し、演算器104において最終演算結果
を選択する方法も考えられる。しかし、演算器104が
複雑になり、処理時間も増大するという問題がある。こ
の点、本実施例では、マルチプレクサ106を設けるこ
とにより演算器104の負担を軽減し、従来の演算器1
04とほぼ同等の演算器104により飽和処理付き演算
の実行時間を短縮することができる。
【0035】ここで、上述した第1実施例におけるAD
DSS命令、SUBSS命令、ADDSU命令、SUB
SU命令の割り付けについて図13を参照して説明す
る。ここでは、ADDSS命令を例にとって説明する。
16ビット固定長のRISCプロセッサにおいては、2
の16乗個の空間に命令を割り付けなければならない。
ADDSS命令では命令弁別のための「命令の指定領
域」3300と、加数のレジスタを弁別するための「加
数の指定領域」3301と、被加数のレジスタを弁別す
るための「被加数の指定領域」3302が必要になる。
いま、加数と被加数を格納するレジスタファイル100
の要素が16個の場合、「加数の指定領域」3301と
して4ビット、「被加数の指定領域」3302として4
ビット必要になる。そのため、残りの8ビットすなわち
2の8乗個の空間にマイコンとして機能するに必要な命
令を全て割り付けなければならない。ADDSS命令で
は256個の空間が必要となる。SUBSS命令、AD
DSU命令、SUBSU命令も同様の空間を必要とす
る。そのため、2の16乗個の空間のうち飽和処理の命
令のみで1024個を占めることになる。RISCプロ
セッサにおいての命令の割付は非常にタイトであり、R
ISCプロセッサでは、命令セットを縮小することが必
須となる。
【0036】(第2実施例)図14に、飽和演算処理に
かかる命令セットの増加を抑えた本発明の第2実施例を
示す。図14において、図1に示した第1実施例と同一
機能構成を有するブロックには同一符号を付して説明を
省略する。本実施例が第1実施例と異なるのは、CPU
203の内部構成にある。すなわち、演算器104はオ
ーバフロー情報OVと演算結果の正負情報Nからなる演
算結果情報202を出力するように形成され、その演算
結果情報202を情報記憶回路200に格納するように
している。また、定数設定器105に代えて、オーバー
フローの設定値である正の上限値のみがレジスタファイ
ル100に格納されている。そして、演算器104は所
定の演算結果Sの他に、レジスタファイル100から読
み出した正の上限値と、この正の上限値の1の補数を演
算して出力可能に形成されている。マルチプレクサ10
6は情報記憶回路200から出力される指示信号201
に基づいて、演算器104から出力される演算結果S、
正の上限値、この正の上限値の1の補数の中の1つを選
択して出力するようになっている。以下、本実施例によ
る飽和処理について、正負の符号付きデータの加算/減
算と、正負の符号なしデータの加算/減算の4つに分け
て説明する。なお、正の上限値の1の補数は「負の上限
値」と同じ意味である。
【0037】(1)符号付きのデータの加算における飽
和処理 この場合の飽和処理は、ADD命令と飽和処理付き転送
(以下、MOVSSと示す。)命令を実行することによ
り実現できる。この場合の処理手順を図15に示す。A
DD命令が発行されると、制御回路108が命令を取り
込んだ後デコードして制御信号を発生する(ステップ1
800,1801)。これにより、レジスタファイル1
00に格納されている加数と被加数が演算器104に読
み出され、演算が実行され、演算結果Sが、オーバフロ
ーした場合には情報記憶回路のOVフラグを”1”にセ
ットし、オーバフローしなかった場合には”0”にクリ
アする(ステップ1804)。また、演算結果Sが負の
場合には情報記憶回路のNフラグを”1”にセットし、
正の場合は”0”にクリアする(ステップ1805)。
次に、MOVSS命令が発行されると、制御回路108
が命令を取り込んだ後デコードして制御信号を発生する
(ステップ1810,1811)。これにより、レジス
タファイル100に格納されている演算結果Sと正の上
限値が演算器104に読み出される(ステップ181
2)。次いで、演算器104にて正の上限値の1の補数
をとる(ステップ1813)。正の上限値の1の補数を
とる処理は正の上限値を反転することと等価である。最
後に、マルチプレクサ106は、情報記憶回路のOVフ
ラグが”1”でかつNフラグが”1”であった場合は、
正の上限値をバスa101を介して加数が格納されてい
たレジスタに格納する(ステップ1815)。同様にO
Vフラグが”1”でかつNフラグが”0”であった場合
は、正の上限値の反転値をバスa101を介して加数が
格納されていたレジスタに格納する(ステップ181
6)。
【0038】(2)符号付きのデータの減算における飽
和処理 この処理は、SUB命令と飽和処理付き転送(以下、M
OVSSと示す。)命令を実行することにより実現でき
る。その場合の処理手順を図16に示す。SUB命令が
発行されると、制御回路108は命令を取り込んだ後デ
コードして制御信号を発生する(ステップ1900,1
901)。これにより、レジスタファイル100に格納
されている減数と被減数を演算器104に読み出し、演
算を実行し演算結果Sを減数が格納されていたレジスタ
に格納する(ステップ1902,1903)。演算結果
Sが、オーバフローした場合には情報記憶回路のOVフ
ラグを”1”にセットし、オーバフローしなかった場合
には”0”にクリアする(ステップ1904)。また、
演算結果Sが負の場合には情報記憶回路のNフラグを”
1”にセットし、正の場合は”0”にクリアする(ステ
ップ1905)。次に、MOVSS命令が発行される
と、制御回路108は命令を取り込んだ後デコードして
制御信号を発生する(ステップ1910,1911)。
これにより、レジスタファイル100に格納されている
演算結果Sと正の上限値が演算器104に読み出される
(ステップ1912)。次に、演算器104で正の上限
値の1の補数が演算される(ステップ1913)。最後
に、マルチプレクサ106は、情報記憶回路のOVフラ
グが”1”でかつNフラグが”1”であった場合は、正
の上限値をバスa101を介して加数が格納されていた
レジスタに格納する(ステップ1915)。同様にOV
フラグが”1”でかつNフラグが”0”であった場合
は、正の上限値の反転値をバスa101を介して加数が
格納されていたレジスタに格納する(ステップ191
6)。飽和処理付き転送の動作をC言語で下記に記述す
る。ここで、レジスタファイル100を配列R[1
6]、正の上限値のレジスタの配列番号をm、演算結果
のレジスタの配列番号をn、OVフラグをOV、Nフラ
グをNと定義する。
【0039】 MOVSS (long m, long n ) { if ( OV=1 &&N=0 ) R[n] =R[m] ; if ( OV=1 &&N=1 ) R[n]=〜R[m] ; } 上述した飽和処理付き転送(MOVSS)を用いた飽和
処理付き加算と飽和処理付き減算のパイプライン処理の
手順を図17に示す。ここで、加算を例にとって説明す
る。ADD命令が発行されると、IF段で命令を読み込
み、ID段で命令をデコードし、EX段で加数及び被加
数の判定と演算を実行し、演算結果Sと演算結果情報の
オーバフロー情報と正負情報を算出する。このオーバフ
ロー情報は情報記憶回路200のOVフラグ、正負情報
は情報記憶回路200のNフラグに記憶される。一方、
MOVSS命令を発行すると、IF段で命令を読み込
み、ID段で命令をデコードする。前の命令であるAD
DのEX段でOVフラグとNGフラグが確定しているた
め、MOVSS命令のEX段でフラグの状況により最終
演算結果を確定することができる。
【0040】(3)符号なしデータの加算における飽和
処理 この処理は、符号なし加算(以下、ADDU命令と呼
ぶ。)と無符号飽和処理付き転送(MOVSU)を実行
することにより実現できる。この場合の処理手順を図1
8に示す。ADD命令が発行されると、前述と同様にス
テップ2000〜2003において、レジスタファイル
100に格納されている加数と被加数を読み出され、演
算器104で加算が実行され、その演算結果Sは加数が
格納されていたレジスタに格納される。次いで、加算を
実行しているときには情報記憶回路200のEフラグ
を”1”にセットし、減算を実行しているときには情報
記憶回路200のEフラグを”0”にクリアする(ステ
ップ2004)。演算においてキャリーが発生した場合
には情報記憶回路200のOVフラグを”1”にセット
し、キャリーが発生しなかった場合には情報記憶回路2
00のOVフラグを”0”にクリアする(ステップ20
05)。次に、MOVSU命令が発行されると、制御回
路108の動作によりレジスタファイル100に格納さ
れている演算結果Sと正の上限値が演算器104に読み
出される(ステップ2008〜2010)。演算器10
4は、正の上限値の1の補数をとる(ステップ201
1)。さらに制御回路108は符号付き演算の場合はU
を”1”にセットし、符号付き演算の場合はUを”0”
にクリアする。最後にマルチプレクサ106は、情報記
憶回路200のOVフラグが”1”でかつEフラグが”
0”の場合は正の上限値を選択し、先の演算結果が格納
されていたレジスタに最終演算結果として格納する(ス
テップ2013)。また、情報記憶回路200のOVフ
ラグが”1”でかつEフラグが”1”の場合は正の上限
値を反転した値を選択し、先の演算結果が格納されてい
たレジスタに最終演算結果として格納する(ステップ2
014)。この場合は、先に符号なし加算が実行されて
いることから、ステップ2014が実行されることはな
い。
【0041】(4)符号なしデータの減算における飽和
処理 無符号値での減算における飽和処理は、符号なし減算
(以下、SUBU命令と呼ぶ。)とMOVSU命令を実
行することにより実現できる。この処理の手順を図19
を用いて説明する。始めにSUB命令が発行されると、
制御回路108の動作により、ステップ2100〜21
02において、レジスタファイル100に格納されてい
る減数と被減数が演算器104に読み出される。次い
で、演算器104は被減数から減数を減算し、演算結果
Sを減数が格納されていたレジスタに格納する。そし
て、ステップ2104でEフラグを”1”にセットす
る。また、演算においてボローが発生した場合はCフラ
グを”1”にセットし、ボローが発生しなかった場合
は”0”にクリアする(ステップ2105〜210
7)。このCフラグ及びEフラグの情報は情報記憶回路
200に記憶される。そして、MOVSU命令が発行さ
れ、最終演算結果が確定する。この場合は、先に減算が
実行されていることから、ステップ2013が実行され
ることはない。
【0042】ここで、符号なし飽和処理付き転送の動作
をC言語で下記に記述する。ここで、レジスタファイル
100を配列R[16]、正の上限値のレジスタの配列
番号をm、演算結果のレジスタの配列番号をn、Cフラ
グをC、EフラグをEと定義する。
【0043】 MOVSU(long m, long n ) { if ( OV=1 &&E=0 ) R[n] =R[m] ; if ( OV=1 &&E=1 ) R[n]=〜R[m] ; } 上述した第2実施例のMOVSS命令、MOVSU命令
の割り付けを図20に示す。例えば、MOVSS命令を
例にとって説明すると、命令の弁別のための「命令の指
定領域」3400と、正の上限値のレジスタを弁別する
ための「上限値の指定領域」3401と、演算結果のレ
ジスタを弁別するための「演算結果の指定領域」340
2が必要である。いま、加数及び被加数を格納するレジ
スタファイル100の要素が16個の場合、「上限値の
指定領域」3401に4ビット、「演算結果の指定領
域」3402に4ビット必要になる。すなわち、MOV
SS命令で256個の空間が必要となる。MOVSU命
令も同様の空間を必要とするため、2の16乗個の空間
のうち飽和処理を実行するために、512個の空間が増
加する。しかし、第1の実施例においては飽和処理のた
めに1024個の空間を必要としたが、第2の実施例に
おいては飽和処理のために占める空間は512個に減少
することができる。
【0044】(第3実施例)上記第2実施例のMOVS
S命令とMOVSU命令は、正の上限値のレジスタと演
算結果のレジスタを指定する必要があるために、16ビ
ットの命令コードのうち8ビットが占有されている。そ
こで、命令コードをさらに縮小できる本発明の第3実施
例を図21を用いて説明する。
【0045】図1又は図14に示した第1又は第2実施
例と同一機能構成を有するブロックには同一符号を付し
て説明を省略する。本実施例が第1又は第2実施例と異
なるのは、CPU306の内部構成にある。すなわち、
演算器104の演算結果はバスa101を介してレジス
タファイル100に直接書き込み可能になっている。ま
た、演算器104はオーバフロー情報OVと演算結果が
正であるか否かの情報NGからなる演算結果情報304
を生成して情報記憶回路300に格納する。定数発生器
305は図1実施例と同様に、予め定められた正の上限
値と負の上限値とを発生する。定数発生器305は情報
記憶回路300から出力される選択信号303により正
の上限値あるいは負の上限値のいずれか1個を発生し、
バスa101を介してレジスタファイル100に書き込
む。この書き込み動作は、情報記憶回路300から出力
される制御信号302により制御される。図39に定数
発生器305と情報記憶回路300の具体的な実施例を
示す。図39に示すように定数発生器305は正の上限
値と負の上限値の記憶回路と負の上限値及び正の上限値
をそれぞれ入力とするトランスミッションゲート305
aと305bを備える。また、情報記憶回路300は、
オーバフロー情報と正負情報の記憶回路と定数発生器3
05からの出力を入力とし、OVフラグをセレクタとす
るトランスミッションゲート300aを備える。トラン
スミッションゲート305aのセレクタはNフラグの反
転信号、トランスミッションゲート305bのセレクタ
はNフラグである。トランスミッションゲート305a
はNフラグが”0”のとき開かれ、負の上限値が定数発
生器305の出力となり、トランスミッションゲート3
00aの入力となる。また、トランスミッションゲート
305bはNフラグが”1”のとき開かれ、正の上限値
が定数発生器305の出力となり、トランスミッション
ゲート300aの入力となる。そして、OVフラグが”
1”のときトランスミッションゲート300aが開か
れ、定数発生器305の出力がバスa101に出力され
る。以下、本実施例による飽和処理について、正負の符
号付きデータの加算/減算と、正負の符号なしデータの
加算/減算の4つに分けて説明する。
【0046】(1)符号付きデータの加算における飽和
処理 この場合の飽和処理は、図22に示すように、ADD命
令と飽和処理付き転送(以下、SETLSと示す。)命
令を実行することにより実現できる。ADD命令が発行
されると、前述の場合と同様に、制御回路108の動作
により命令の取り込み、デコードが実行され、レジスタ
ファイル100に格納されている加数と被加数が演算器
104に読み出される(ステップ2200〜220
2)。演算器104は読み出された被加数に加数を加算
し、演算結果Sを加数が格納されていたレジスタに格納
する(ステップ2203)。この加算の結果、オーバフ
ローした場合はOVフラグを”1”にセットし、オーバ
フローしなかった場合は”0”にクリアする(ステップ
2204)。また、演算結果Sが負であった場合はNフ
ラグを”1”にセットし、正であった場合は”0”にク
リアする(ステップ2205)。これらのOVフラグと
Nフラグは情報記憶回路300に記憶される。次に、S
ETLS命令を説明する。SETLS命令が発行される
と命令の取り込み、デコードを経てNフラグが定数発生
器305に送られ、(ステップ2210〜2212)。
Nフラグが”1”のときは正の上限値、Nフラグが”
0”のときは負の上限値が出力される。情報記憶回路3
00は、OVフラグが”1”のときは定数発生器305
の出力をADD命令の演算結果Sが格納されていたレジ
スタにバスa101を介して格納し、OVフラグが”
0”のときは処理を終了する(ステップ2216〜22
17)。
【0047】(2)符号付きデータの減算における飽和
処理 この場合の飽和処理は、図23に示すように、SUB命
令とSETLS命令を実行することにより実現できる。
始めにSUB命令が発行されると、制御回路108の動
作により、命令の取り込み、デコードが実行され、レジ
スタファイル100に格納されている減数と被減数が演
算器104に読み出される(ステップ2300〜230
2)。ついで、演算器104に減算を実行させ、その減
算結果Sを減数が格納されていたレジスタに格納する
(ステップ2303)。演算結果がオーバフローした場
合はOVフラグを”1”にセットし、オーバフローしな
かった場合は”0”にクリアする(ステップ230
4)。また、演算結果Sが負であった場合はNフラグ
を”1”にセットし、正であった場合は”0”にクリア
する(ステップ2205)。これらのOVフラグとNフ
ラグは情報記憶回路300に記憶される。次に、SET
LS命令を説明する。SETLS命令が発行されると命
令の取り込み、デコードを経てNフラグが定数発生器3
05に送られる(ステップ2310〜2212)。Nフ
ラグが”1”のときは正の上限値、Nフラグが”0”の
ときは負の上限値が出力される。情報記憶回路300
は、OVフラグが”1”のときは定数発生器305の出
力をADD命令の演算結果Sが格納されていたレジスタ
にバスa101を介して格納し、OVフラグが”0”の
ときは処理を終了する(ステップ2316〜231
7)。このような飽和処理付き格納の動作をC言語で下
記に記述する。ここで、記憶回路であるレジスタファイ
ル100を配列R[16]、演算結果のレジスタの配列
番号をn、定数発生器の定数格納部分をCONST
[2]、OVフラグをOV、NフラグをNと定義し、C
ONST[0]には正の上限値が格納してあり、CON
ST[1]には負の上限値が格納してあるものとする。
【0048】 SETLS (long n) { if (OV=1 ) R[n] =CONST[N] ; } 上述したSETLS命令を用いた加算における飽和処理
と減算における飽和処理のパイプライン動作を図24で
説明する。加算命令を例にとって説明すると、DD命令
が発行されると、IF段で命令を読み込み、ID段で命
令をデコードし、EX段で加算結果による情報を算出す
る。ここで、OVフラグとNGフラグは情報記憶回路3
00に記憶される。次に、SETLS命令を発行する
と、ADD命令から一段遅れてIF段で命令を読み込
み、ID段で命令がデコードされる。この段階でADD
命令のEX段による各フラグが確定しているため、SE
TLS命令のEX段でフラグの状況により最終演算結果
を確定することが可能となる。
【0049】(3)符号なしデータの加算における飽和
処理 無符号値での加算における飽和処理は、図25に示すよ
うに、ADDU命令と無符号飽和処理付き格納(以下、
SETLUと呼ぶ。)命令を実行することにより実現で
きる。始めにADD命令を発行すると、制御回路108
が命令を取り込んだ後デコードし、制御信号を発生する
(ステップ2400,2401)。制御信号により、レ
ジスタファイル100に格納されている加数と被加数を
演算器104に読み出す(ステップ2402)。次に、
演算器104において読み出された被加数に加数を加算
し、演算結果Sを加数が格納されていたレジスタに格納
する(ステップ2403)。そして,制御回路が加算を
実行しているときには情報記憶回路300のEフラグ
を”1”にセットし,減算を実行しているときには情報
記憶回路300のEフラグを”0”にクリアする(ステ
ップ2404)。演算においてキャリーが発生した場合
には情報記憶回路300のOVフラグを”1”にセット
し,キャリーが発生しなかった場合には情報記憶回路3
00のOVフラグを”0”にクリアする(ステップ24
05)。OVフラグ及びEフラグの情報は情報記憶回路
300に記憶される。次に、SETLU命令を説明す
る。SETLU命令が発行されると命令の取り込み、デ
コードを経てUフラグが情報記憶回路300に送られる
(ステップ2408〜2410)。Uフラグは符号なし
のときは”1”にセットされ、符号ありのときは”0”
にクリアされる。この場合、符号なし転送であるから、
Uフラグは”1”にセットされ、トランスミッションゲ
ート300cが開かれ、Eフラグが定数発生器のセレク
タとなる。この場合、先の演算で加算が実行されている
ことからEフラグが”0”となり、トランスミッション
ゲート305bが開かれ、正の上限値が定数発生器の出
力となる。情報記憶回路300は、OVフラグが”1”
のときは定数発生器305の出力をADDU命令の演算
結果Sが格納されていたレジスタにバスa101を介し
て格納し、OVフラグが”0”のときは処理を終了する
(ステップ2414〜2415)。
【0050】(4)符号なしデータの減算における飽和
処理 無符号値での減算における飽和処理は、図26に示すよ
うに、SUBU命令とSETLU命令を実行することに
より実現できる。始めにSUB命令を発行すると、制御
回路108が命令を取り込んだ後デコードし、制御信号
を発生する(ステップ2500,2501)。制御信号
により、レジスタファイル100に格納されている減数
と被減数を演算器104に読み出す(ステップ250
2)。次に、演算器104において読み出された被減数
に減数を減算し、演算結果Sを減数が格納されていたレ
ジスタに格納する(ステップ2503)。そして、制御
回路が加算を実行しているときには情報記憶回路300
のEフラグを”1”にセットし、減算を実行していると
きには情報記憶回路300のEフラグを”0”にクリア
する(ステップ2504)。演算においてボローが発生
した場合には情報記憶回路300のOVフラグを”1”
にセットし,ボローが発生しなかった場合には情報記憶
回路300のOVフラグを”0”にクリアする(ステッ
プ2505)。OVフラグ及びEフラグの情報は情報記
憶回路300に記憶される。次に、SETLU命令を説
明する。SETLU命令が発行されると命令の取り込
み、デコードを経てUフラグが情報記憶回路300に送
られる(ステップ2508〜2510)。Uフラグは符
号なしのときは”1”にセットされ、符号ありのとき
は”0”にクリアされる。この場合、符号なし転送であ
るから、Uフラグは”1”にセットされ、トランスミッ
ションゲート300cが開かれ、Eフラグが定数発生器
のセレクタとなる。この場合、先の演算で減算が実行さ
れていることからEフラグが”1”となり、トランスミ
ッションゲート305bが開かれ、負の上限値が定数発
生器の出力となる。情報記憶回路300は、OVフラグ
が”1”のときは定数発生器305の出力をSUBU命
令の演算結果Sが格納されていたレジスタにバスa10
1を介して格納し、OVフラグが”0”のときは処理を
終了する(ステップ2514〜2515)。SETLU
命令の動作をC言語で下記に記述する。ここで、記憶回
路であるレジスタファイル100を配列R[16]、演
算結果のレジスタの配列番号をn、定数発生器の定数格
納部分を配列CONST[2]、OVフラグをOVと定
義し、CONST[1]には正の上限値が格納してあ
り、CONST[0]には負の上限値が格納してあるも
のとする。
【0051】 SETLS (long n) { if (OV=1 ) R[n] =CONST[E] ; } ここで、SETLS命令とSETLU命令の割り付けを
図27に示す。例えば、SETLS命令の場合、「命令
の指定領域」3500とレジスタの弁別のための「演算
結果の指定領域」3501のみが必要である。いま、演
算結果Sを格納するレジスタファイル100の要素が1
6個の場合、「演算結果の指定領域」3501に4ビッ
ト割り付ければよい。すなわち、SETLS命令で16
個の空間が必要となる。SETLU命令も同様の空間を
必要とするため、2の16乗個の空間のうち飽和処理を
実行するための命令の空間は32個となる。以上のよう
に、第2実施例においては飽和処理のために512個の
空間を必要としたが、第3実施例においては飽和処理の
ために占める空間は32個に減少することができる。以
上のように、本実施例では、第1実施例の効果に加え
て、ADD命令あるいはSUB命令の演算結果が格納さ
れているレジスタ番号を指定するのみで飽和演算処理が
実現可能であるため、正の上限値のレジスタと演算結果
のレジスタを指定する必要のあるMOVSS命令及びM
OVSU命令からさらにコード量を縮小することができ
る。
【0052】(第4実施例)図28に、本発明を16ビ
ット固定長のRISCプロセッサに適用してなる第4実
施例示す。図において、第1実施例と同一機能構成を有
するブロックは同一符号を付して説明を省略する。本実
施例は、任意の上・下限値で飽和処理を行うことを特徴
とし、図1の定数発生器105に代えて、バスa101
を介して読み書き可能で演算器104とマルチプレクサ
106に接続されているMAXレジスタ400、と、バ
スa101を介して読み書き可能で演算器104とマル
チプレクサ106に接続されているMINレジスタ40
1とを設けたことにある。マルチプレクサ402の具体
的な実施例を図40に示す。CMOSインバータトラン
スミッションゲートを用いて構成したマルチプレクサで
ある。本構成のマルチプレクサは、任意の正の上限値を
入力とするトランスミッションゲートi、任意の負の上
限値を入力とするトランスミッションゲートg、演算結
果Sを入力とするトランスミッションゲートf、hと任
意の正の上限値あるいは演算結果Sを入力とするトラン
スミッションゲートkと任意の負の上限値あるいは演算
結果Sを入力とするトランスミッションゲートj、正負
情報Nと選択情報CSをそれぞれ入力とするトランスミ
ッションゲートl、mとを備える。選択情報CSは演算
器104により任意の正の上限値と比較して比較信号C
が”1”になった場合は”1”にセットされ、任意の負
の上限値と比較して比較信号Cが”1”になった場合
は”0”にクリアされる。トランスミッションゲートg
とiのセレクタは、オーバフロー情報OVと比較情報C
のオアゲートの出力信号である。比較情報Cは、演算器
104により任意の正の上限値と演算結果を比較して演
算結果が大きかった場合、あるいは任意の負の上限値と
演算結果を比較して演算結果が小さかった場合は”1”
にセットされ、正の上限値と演算結果を比較して演算結
果が小さかった場合、あるいは任意の負の上限値と演算
結果を比較して演算結果が大きかった場合は”0”にク
リアされる。トランスミッションゲートfとhのセレク
タは、オーバフロー情報OVの反転信号あるいは比較情
報Cの反転信号である。トランスミッションゲートl、
mのセレクタはオーバフロー情報OV、トランスミッシ
ョンゲートkのセレクタは、トランスミッションゲート
l、mの出力信号、トランスミッションゲートjのセレ
クタは、トランスミッションゲートl、mの出力信号の
反転信号となる。オーバフロー情報OVが”1”のと
き、トランスミッションゲ−トg、iがon、トランス
ミッションゲートf、hがoffとなり、任意の正の上
限値がトランスミッションゲートkの入力となり任意の
負の上限値がトランスミッションゲートjの入力とな
る。次に、正負情報Nが”1”のとき、トランスミッシ
ョンゲートkがon、任意の正の上限値がマルチプレク
サの出力となる。オーバフロー情報Nが”1”でかつ正
負情報Nが”0”のとき、トランスミッションゲ−トj
がonし、任意の負の上限値がマルチプレクサの出力に
なる。これら以外の場合は、演算結果Sがマルチプレク
サの出力になる。
【0053】(1)加算における任意上・下限値の飽和
処理 加算において任意の上・下限値で飽和処理を実行するに
は、任意上・下限値の飽和処理付き加算(ADDL)命
令を実行することにより実現できる。この処理の手順を
図29に示す。まず、ADDL命令が発行されると、制
御回路108が命令を取り込んだ後デコードし、制御信
号を発生する(ステップ2600,2601)。制御信
号により、レジスタファイル100から加数と被加数を
演算器104に読み出す(ステップ2602)。次に、
演算器104で被加数に加数を加算する(ステップ26
03)。そしてオーバフロー情報をOVフラグに、正負
情報をEフラグにセットする(ステップ2604〜26
05)。ここで、オーバフローが発生しなかった場合に
は、演算器104は演算結果Sと任意の正の上限値を比
較する(ステップ2606)。次に、演算器104は演
算結果Sと任意の負の上限値を比較する(ステップ26
07)。これにより、演算器104から比較情報Cと選
択信号CSがマルチプレクサ402に出力される(ステ
ップ2608)。これらの情報により、マルチプレクサ
402はオーバフローが発生しかつ演算結果が負の場合
あるいは比較結果が任意の正の上限値より大きかった場
合は任意の正の上限値を加数が格納されていたレジスタ
にバスa101を介して格納する(ステップ261
0)。また、オーバフローが発生しかつ演算結果が正の
場合あるいは比較結果が任意の負の上限値より大きかっ
た場合は任意の負の上限値を加数が格納されていたレジ
スタにバスa101を介して格納する(ステップ261
1)。そして、それ以外の場合は、演算結果Sを加数が
格納されていたレジスタに格納する(ステップ261
2)。
【0054】ADDL命令の動作をC言語で下記に記述
する。ここで、記憶回路であるレジスタファイル100
を配列R[16]、被加数のレジスタの配列番号をm、
加数のレジスタの配列番号をn、MAXレジスタの内容
をMAX、MINレジスタの内容をMIN、オーバフロ
ー情報ををOV、正負情報をNと定義する。
【0055】 ADDL ( long m,long n ) { long dest,src ; if ( (long) R[n]>=0 ) dest=0 ; else dest=1; if ( (long) R[m]>=0 ) src=0 ; else src=1; src+=dest ; R[n]+=R[m] ; if ((long) R[n]>=0 ) N=0 ; else N=1 ; dest+=N ; if ((src==0 | | src==2 ) { if (dest==1) OV=1 ; { if (N=0 ) R[n]=(long )MIN ; else R[n]=(long ) MAX ; } else OV=0 ; } else OV=0 ; if ((long) R[n] > (long) MAX) R[n] = (long) MAX ; if ((long) R[n] < (long) MIN) R[n]=( long ) MIN ; } (2)減算における任意の上・下限値による飽和処理 減算において任意の上・下限値で飽和処理を実行するに
は、任意上・下限値飽和処理付き減算(SUBL)命令
により実現できる。この処理の手順を図30に示す。ま
ず、SUBL命令が発行されると、制御回路108が命
令を取り込んだ後デコードし、制御信号を発生する(ス
テップ2700,2701)。制御信号により、レジス
タファイル100から減数と被減数を演算器104に読
み出す(ステップ2702)。次に、演算器104で被
減数から減数を減算する(ステップ2703)。そして
オーバフロー情報をOVフラグに、正負情報をEフラグ
にセットする(ステップ2704〜2705)。ここ
で、オーバフローが発生しなかった場合には、演算器1
04は演算結果Sと任意の正の上限値を比較する(ステ
ップ2706)。次に、演算器104は演算結果Sと任
意の負の上限値を比較する(ステップ2707)。これ
により、演算器104から比較情報Cと選択信号CSが
マルチプレクサ402に出力される(ステップ270
8)。これにより、マルチプレクサ402はオーバフロ
ーが発生しかつ演算結果が負の場合あるいは比較結果が
任意の正の上限値より大きかった場合は任意の正の上限
値を加数が格納されていたレジスタにバスa101を介
して格納する(ステップ2710)。また、オーバフロ
ーが発生しかつ演算結果が正の場合あるいは比較結果が
任意の負の上限値より大きかった場合は任意の負の上限
値を加数が格納されていたレジスタにバスa101を介
して格納する(ステップ2711)。そして、それ以外
の場合は、演算結果Sを加数が格納されていたレジスタ
に格納する(ステップ2712)。
【0056】ADDL命令の動作をC言語で下記に記述
する。ここで、記憶回路であるレジスタファイル100
を配列R[16]、被加数のレジスタの配列番号をm、
加数のレジスタの配列番号をn、MAXレジスタの内容
をMAX、MINレジスタの内容をMIN、オーバフロ
ー情報ををOV、正負情報をNと定義し、以下に示す。
【0057】 SUBSS ( long m,long n ) { long dest,src ; if ( (long) R[n]>=0 ) dest=0 ; else dest=1; if ( (long) R[m]>=0 ) src=1 ; else src=0; src+=dest ; R[n]−=R[m] ; if ((long) R[n]>=0 ) N=0 ; else N=1 ; dest+=N ; if ((src==1 ) { if (dest==1) OV=1 ; { if (N=0 ) R[n]=(long )MIN ; else R[n]=(long) MAX ; } else OV=0 ; } else OV=0 ; if ((long ) R[n]> (long) MAX ) R[n]= (long) MAX ; if((long ) R[n]< (long) MIN ) R[n]=( long) MIN ; } 上記のADDL命令とSUBL命令のパイプライン動作
を図31に示す。ADDLを例にとって説明すると、I
F段で命令を読み込み、ID段で命令をデコードし、第
1のEX段で加算を実行し、第2のEX段で演算結果と
MAXレジスタの内容を比較し、第3のEX段で演算結
果とMINレジスタの内容を比較し、これに基づいて最
終的な演算結果をレジスタファイル100へ格納する。
【0058】このように、第4実施例によれば、任意の
上・下限値における飽和処理を1命令(ADDL命令又
はSUBL命令)で実行することができる。
【0059】(第5実施例)図32に、本発明の第5実
施例を示す。本実施例は、前記各実施例と同様に、16
ビット固定長のRISCプロセッサに本発明を適用した
ものである。本実施例が図28に示した第4実施例と相
違する点は、演算器500を追加したことにある。すな
わち、演算器500の一方の入力はバスc103を介し
てレジスタファイル100に接続されている。この演算
器500の他方の入力にMAXレジスタ400が接続さ
れている。マルチプレクサ504には演算結果とMAX
レジスタ400から任意の正の上限値、MINレジスタ
401から任意の負の上限値が入力される。情報記憶回
路503には一次演算情報505が格納される。一次演
算情報505にはオーバフロー情報OVと正負情報Nを
含んでいる。また、演算結果SとMAXレジスタの比較
情報CS1、演算結果SとMINレジスタの比較情報C
S2はマルチプレクサ504に入力される。比較情報C
S1は演算結果SとMAXレジスタを比較し、演算結果
Sが大きかった場合に”1”にセットされ、演算結果S
が小さかった場合に”0”にクリアされる。比較情報C
S2は演算結果SとMINレジスタを比較し、演算結果
Sが小さかった場合に”1”にセットされ、演算結果S
が大きかった場合に”0”にクリアされる。マルチプレ
クサ504の具体的な実施例を図41に示す。図41に
示すようにマルチプレクサ504は任意の正の上限値、
任意の負の上限値、演算結果Sをそれぞれ入力とするア
ンドゲート504a、b、cを備える。これらのアンド
ゲート504a、b、cの出力は反転出力のオアゲート
504dを介してインバータ504eに入力され、この
インバータ504dの出力をマルチプレクサ504の出
力としている。アンドゲート504aはOV=1かつN
=0あるいはCS2=1のとき開かれ、任意の正の上限
値がマルチプレクサ504の出力となる。アンドゲート
504bはOV=1かつN=0あるいはCS2=1のと
き開かれ、任意の負の上限値がマルチプレクサ504の
出力となる。アンドゲート504cはOV=0かつCS
1=0あるいはOV=0かつCS2=0のとき開かれ、
任意の負の上限値がマルチプレクサ504の出力とな
る。以下、本実施例のマイクロコンピュータを用いた場
合の任意の上・下限値による飽和処理について説明す
る。
【0060】(1)加算における任意の上・下限値飽和
処理 この処理はADD命令と任意上・下限値転送(LMT)
命令を実行することにより実現できる。この処理手順を
図33に示す。まず、ADD命令が発行されると、制御
回路108が命令を取り込んだ後デコードし、制御信号
を発生する(ステップ2800、2801)。制御信号
により、レジスタファイル100から加数と被加数を演
算器104に読み出す(ステップ2802)。次に、演
算器104において被加数に加数を加算し、演算結果S
を加数が格納されていたレジスタに格納する(ステップ
2803)。次に、演算においてオーバフローが発生し
ていた場合にはオーバフロー情報OVに”1”をセット
し,オーバフローが発生していなかった場合にはオーバ
フロー情報OVに”0”をクリアする(ステップ280
4)。また、演算結果Sが負であった場合は正負情報N
を”1”にセットし、正であった場合は”0”にクリア
する(ステップ2805)。これらのOVフラグとNフ
ラグは情報記憶回路503に記憶される。LMT命令が
発行されると、制御回路108が命令を取り込んだ後デ
コードし、制御信号を発生する(ステップ2804,2
805)。制御信号により、先の演算結果Sを演算器1
04と500の両方に読み出す。演算器104では任意
の正の上限値と演算結果Sを比較し,比較情報CS1を
マルチプレクサに送る(ステップ2809)。一方,演
算器500では任意の負の上限値と演算結果Sを比較
し,比較情報CS2をマルチプレクサに送る(ステップ
2810)。マルチプレクサでは,情報記憶回路503
からのOVフラグとNフラグとCS1とCS2により任
意の正の上限値あるいは負の上限値あるいは演算結果S
を選択し,演算結果Sが格納されていたレジスタにバス
a101を介して格納する(ステップ2811〜281
4)。
【0061】(2)減算における任意の上・下限値飽和
処理 この処理は、SUB命令と任意上・下限値転送(LM
T)命令を実行することにより実現できる。この処理手
順を図34に示す。まず、SUB命令が発行されると、
制御回路108が命令を取り込んだ後デコードし、制御
信号を発生する(ステップ2900,2901)。制御
信号により、レジスタファイルから減数と被減数を演算
器104に読み出す(ステップ2902)。次に、演算
器104において読み出された被減数から減数を減算
し、演算結果Sを減数が格納されていたレジスタに格納
する(ステップ2903)。次に、演算においてオーバ
フローが発生していた場合にはオーバフロー情報OV
に”1”をセットし,オーバフローが発生していなかっ
た場合にはオーバフロー情報OVに”0”をクリアする
(ステップ2904)。また、演算結果Sが負であった
場合は正負情報Nを”1”にセットし、正であった場合
は”0”にクリアする(ステップ2905)。これらの
OVフラグとNフラグは情報記憶回路503に記憶され
る。LMT命令が発行されると、制御回路108が命令
を取り込んだ後デコードし、制御信号を発生する(ステ
ップ2904,2905)。制御信号により、先の減算
結果Sを演算器104と500にそれぞれ読み出す(ス
テップ2906)。演算器104では任意の正の上限値
と演算結果Sを比較し、比較情報CS1をマルチプレク
サに送る(ステップ2909)。一方、演算器500で
は任意の負の上限値と演算結果Sを比較し、比較情報C
S2をマルチプレクサに送る(ステップ2910)。マ
ルチプレクサでは、情報記憶回路503からのOVフラ
グとNフラグとCS1とCS2により任意の正の上限値
あるいは負の上限値あるいは演算結果Sを選択し、演算
結果Sが格納されていたレジスタにバスa101を介し
て格納する(ステップ2911〜2914)。
【0062】LMT命令の動作をC言語で下記に記述す
る。ここで、記憶回路であるレジスタファイル100を
配列R[16]、演算結果のレジスタの配列番号をn、
MAXレジスタの内容をMAX、MINレジスタの内容
をMIN、オーバフロー情報ををOV、正負情報をN、
比較情報CS1をCS1、比較情報CS2をCS2と定
義する。
【0063】 LMT (long n) { if ( OV=1 ) ; { if (N=0 ) R[n]=(long )MIN ; else R[n]=(long) MAX ; } else if (CS1=1 ) R[n]=(long)MAX ; else if (CS2=1 ) R[n]=(long)MIN ; } 上述したLMT命令を用いて任意上・下限値飽和処理付
き加算と、任意上・下限値飽和処理付き減算のパイプラ
イン処理を図35に示す。例えば、ADD命令が発行さ
れると、IF段で命令を読み込み、ID段で命令をデコ
ードし、EX段で演算を実行する。次いで、LMT命令
が発行されると、ADD命令から一段づつ遅れたIF段
で命令を読み込み、ID段で命令がデコードされる。そ
して、LMT命令のEX段において演算器104と演算
器500による大小比較と、マルチプレクサ106にお
ける選択が実行されるものである。これにより、1ステ
ップで任意上・下限値飽和転送を実行することができ
る。
【0064】(第6実施例)図36に、本発明の飽和演
算処理付きのマイクロコンピュータを適用してなるサー
ボアンプ装置の実施例を示す。図示のように、本実施例
のサーボアンプ装置は、指令装置601、本発明を適用
したマイクロコンピュータ602、アンプ603、モー
タ604、速度検出装置605により構成される。本装
置は、速度検出回路605により検出されたモータ60
4の速度Z608と、指令装置601により与えられる
速度指令X606を用い、マイクロコンピュータ602
において以下の制御演算を実行し、電圧指令Y607を
算出する。そして、その電圧指令Yをアンプ603で増
幅して、モータ604の速度を制御するものである。
【0065】E=X−Z I←I+E Y←A*E+B*I (A、Bは制御係数) ここで、精度の高い制御をするためには、X、Y、Zを
32ビットで演算する必要がある。従来技術を用いて、
上記制御演算を実行する場合の処理フローを図37に示
す。同図に示すように、ステップ702又はステップ7
10においてオーバフローを発生する可能性のある命令
を実行した後、ステップ703〜706及びステップ7
11〜714に示す飽和演算処理を実行する必要があ
る。このようにサーボアンプ装置における制御演算で飽
和演算を実行するには飽和演算のため6ステップの命令
を実行する必要がある。図36に示したサーボアンプ装
置の場合、制御演算をサンプリングタイム毎に実行する
ことになる。したがって、数ステップの命令数の増加は
制御性能を低下させる大きな原因となる。
【0066】本発明はその命令数の増加を抑えるもので
あり、図38に本発明の第2実施例の飽和処理を適用し
てモータ速度の制御演算を実行する場合の処理フローを
示す。図示のように、ステップ802において32ビッ
トの加算が終了した後、ステップ803に示すMOVS
S命令を発行するようにする。これにより、例えばステ
ップ802の加算においてオーバフローが発生し、かつ
演算結果Sが正の場合には最終演算結果を正の上限値
(H’7FFFFFFF)とする。また、オーバフロー
が発生し、かつ演算結果Sが負の場合には最終演算結果
を正の上限値の反転値(H’80000000)とす
る。そのいずれでもなかった場合には、先の演算結果S
をそのまま最終演算結果とする。これにより、ステップ
703〜ステップ706及びステップ711〜ステップ
714の命令を実行することなく飽和演算を実行するこ
とができる。
【0067】
【発明の効果】以上説明したように、本発明によれば、
演算器の演算実行によりオーバフローしたか否かの情報
又は任意の正・負の上限値を越えたか否か等の演算結果
情報を出力するようにし、その演算結果情報を用いて選
択回路により自動的に演算結果と定数記憶手段に格納さ
れている設定値(正の上限値、負の上限値)のいずれか
1つを最終演算結果として選択するようにしているか
ら、1命令で飽和処理付き演算を実行することができ
る。その結果、プログラムステップ数の増加を抑えて、
パイプライン処理を乱さずに飽和処理を行え、処理速度
を高めることができる。
【0068】また、演算結果の状態すなわちオーバフロ
ーしたか否か及び正か否かの情報を記憶する情報記憶回
路を設けたものによれば、オーバフローを発生する可能
性のある演算命令の実行後に、演算結果情報により正の
上限値、負の上限値又は演算結果のいずれか1つを自動
的にレジスタ等の記憶エリアに転送するようにできるた
め、命令セットのコード量の増加を防止する効果があ
る。
【図面の簡単な説明】
【図1】本発明の飽和処理機能を備えたマイクロコンピ
ュータの第1実施例の構成図である。
【図2】第1実施例のマルチプレクサの一例の構成図で
ある。
【図3】第1実施例のマルチプレクサの他の例の構成図
である。
【図4】第1実施例の演算器から出力されるオーバーフ
ロー情報の説明図であり、(A)は演算器の入力と出力
のビットフォーマット、(B)は演算器のオーバーフロ
ー情報出力部を示す図である。
【図5】ADD命令等の命令のパイプライン処理動作を
説明するタイムチャートである。
【図6】符号付きデータの飽和処理付き加算(ADDS
S)命令の処理フロー図である。
【図7】符号付きデータの飽和処理付き減算(SUBS
S)命令の処理フロー図である。
【図8】ADDSS命令とSUBSS命令のパイプライ
ン処理動作を説明するタイムチャートである。
【図9】第1実施例の演算器から出力されるキャリー情
報の説明図であり、(A)は演算器の入力と出力のビッ
トフォーマット、(B)は演算器のキャリー情報出力部
を示す図である。
【図10】符号無しデータの飽和処理付き加算(ADD
SU)命令の処理フロー図である。
【図11】符号無しデータの飽和処理付き減算(SUB
SU)命令の処理フロー図である。
【図12】ADDSU命令とSUBSU命令のパイプラ
イン処理動作を説明するタイムチャートである。
【図13】飽和処理付き命令のアドレス空間の割付けを
説明する図である。
【図14】本発明の飽和処理機能を備えたマイクロコン
ピュータの第2実施例の構成図である。
【図15】ADD命令と飽和処理付き転送(MOVS
S)命令により符号付きデータの加算における飽和処理
を行う処理フローである。
【図16】SUB命令と飽和処理付き転送(MOVS
S)命令により符号付きデータの減算における飽和処理
を行う処理フローである。
【図17】ADD命令とMOVSS命令のパイプライン
処理動作を説明するタイムチャートである。
【図18】ADD命令と飽和処理付き転送(MOVS
U)命令により符号無しデータの加算における飽和処理
を行う処理フローである。
【図19】SUB命令と飽和処理付き転送(MOVS
U)命令により符号無しデータの減算における飽和処理
を行う処理フローである。
【図20】飽和処理付き転送(MOVSU/MOVS
U)命令のアドレス空間の割付けを説明する図である。
【図21】本発明の飽和処理機能を備えたマイクロコン
ピュータの第3実施例の構成図である。
【図22】ADD命令と飽和処理付き転送(SETL
S)命令により符号付きデータの加算における飽和処理
を行う処理フローである。
【図23】SUB命令と飽和処理付き転送(SETL
S)命令により符号付きデータの減算における飽和処理
を行う処理フローである。
【図24】ADD命令とSETLS命令のパイプライン
処理動作を説明するタイムチャートである。
【図25】ADD命令と飽和処理付き転送(SETL
U)命令により符号無しデータの加算における飽和処理
を行う処理フローである。
【図26】SUB命令と飽和処理付き転送(SETL
U)命令により符号無しデータの減算における飽和処理
を行う処理フローである。
【図27】飽和処理付き転送(SETLS/SETL
U)命令のアドレス空間の割付けを説明する図である。
【図28】本発明の飽和処理機能を備えたマイクロコン
ピュータの第4実施例の構成図である。
【図29】加算結果を任意の上・下限値に制限する飽和
処理付き加算(ADDL)命令の処理フローである。
【図30】減算結果を任意の上・下限値に制限する飽和
処理付き減算(SUBL)命令の処理フローである。
【図31】ADDL/SUBL命令のパイプライン処理
動作を説明する図である。
【図32】本発明の飽和処理機能を備えたマイクロコン
ピュータの第5実施例の構成図である。
【図33】ADD命令と任意上限値転送(LMT)命令
により加算結果を任意の上・下限値に制限する処理フロ
ーである。
【図34】SUB命令と任意上限値転送(LMT)命令
により減算結果を任意の上・下限値に制限する処理フロ
ーである。
【図35】ADD命令とLMT命令のパイプライン処理
動作を説明する図である。
【図36】本発明の飽和処理機能を備えたマイクロプロ
セッサを適用してなるサーボアンプ装置の一実施例の構
成図である。
【図37】サーボアンプ装置に従来技術の飽和処理を適
用した場合の飽和処理フローである。
【図38】サーボアンプ装置に本発明の第2実施例のマ
イクロコンピュータを適用した場合の飽和処理フローで
ある。
【図39】図21に示した実施例の定数発生器305と
情報記憶回路300の具体的な実施例の構成図を示す。
【図40】図28に示した実施例のマルチプレクサの具
体的な実施例の構成図を示す。
【図41】図32に示した実施例のマルチプレクサの具
体的な実施例の構成図を示す。
【符号の説明】
100…レジスタファイル 101…バスa 102…バスb 103…バスc 104…演算器 105…定数発生器 106…マルチプレクサ 107…演算結果情報 108…制御回路 109…リードライト回路 110…OVフラグ 111…CPU 112…外部バス 113…I/O 114…不揮発性RAM 115…マイクロコンピュータ 200…情報記憶回路 201…指示信号 202…演算結果情報 203…CPU 300…情報記憶回路 301…選択信号 302…制御信号 303…制御信号 304…演算結果情報 305…定数発生器 306…CPU 400…MAXレジスタ 401…MINレジスタ 403…CPU 500…演算器 501…CPU 600…指令装置 601…マイクロコンピュータ 602…アンプ 603…モータ 604…速度検出回路 605…速度指令X 606…電圧指令Y 607…速度情報Z

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】制御信号に従って2つの入力値を加減算し
    て演算結果とその演算結果が予め定めた値を越えたか否
    かの信号を含む演算結果情報を生成する演算器と、少な
    くとも1つの設定値が格納された定数記憶手段と、前記
    演算結果情報に基づいて前記演算結果と前記定数記憶手
    段の設定値の1つを最終演算結果として選択する選択回
    路とを含んでなる演算処理装置。
  2. 【請求項2】 請求項1において、 前記演算結果情報は前記加減算にてオーバーフローが発
    生したか否かを表すオーバーフロー情報と前記入力値と
    前記演算結果との正負を表す正負情報とを含み、前記定
    数記憶手段に格納された設定値は正の上限値と負の上限
    値を含み、前記選択回路は前記演算結果と前記正の上限
    値と前記負の上限値とをそれぞれ入力とするマルチプレ
    クサを含み、該マルチプレクサは前記演算結果情報に基
    づき、オーバーフローが発生しなかったときは前記演算
    結果を選択し、オーバーフローが発生したときは前記正
    負情報の内容に従って前記正の上限値と前記負の上限値
    の一方を選択して出力することを特徴とする演算処理装
    置。
  3. 【請求項3】 請求項1において、 前記演算結果情報はキャリー又はボローが発生したか否
    かを表すキャリー情報を含み、前記定数記憶手段に格納
    された設定値は正の上限値と負の上限値を含み、前記選
    択回路は前記演算結果と正の上限値と負の上限値とがそ
    れぞれ入力されるマルチプレクサを含み、該マルチプレ
    クサは前記キャリー情報に基づきキャリー又はボローが
    発生しなかったときは前記演算結果を選択し、キャリー
    又はボローが発生したときはキャリー又はボローに従っ
    て前記正の上限値と前記負の上限値の一方を選択して出
    力することを特徴とする演算処理装置。
  4. 【請求項4】 請求項1において、 前記演算結果情報は前記加減算にてオーバーフローが発
    生したか否かを表すオーバーフロー情報と前記演算結果
    の正負を表す正負情報とを含み、該演算結果情報を格納
    する情報記憶回路を有し、前記定数記憶手段に格納され
    た設定値は正の上限値であり、前記演算器は前記制御信
    号に応答して前記正の上限値の1の補数を演算して出力
    するものとされ、前記選択回路は前記演算結果と前記正
    の上限値と前記正の上限値の1の補数とをそれぞれ入力
    とするマルチプレクサを含み、該マルチプレクサは前記
    演算結果情報に基づき、オーバーフローが発生しなかっ
    たときは前記演算結果を選択し、オーバーフローが発生
    したときは前記正負情報の内容に従って前記正の上限値
    と前記正の上限値の1の補数の一方を選択して出力する
    ことを特徴とする演算処理装置。
  5. 【請求項5】 請求項1において、 前記演算結果情報は前記加減算にてキャリー・ボローが
    発生したか否かを表すキャリー情報と加算と減算の種別
    を表す演算種類情報とを含み、該演算結果情報を格納す
    る情報記憶回路を有し、前記定数記憶手段に格納された
    設定値は正の上限値であり、前記演算器は前記制御信号
    に応答して前記正の上限値の1の補数を演算して出力す
    るものとされ、前記選択回路は前記演算結果と前記正の
    上限値と前記正の上限値の1の補数とをそれぞれ入力と
    するマルチプレクサを含み、該マルチプレクサは前記演
    算結果情報に基づき、キャリー又はボローが発生しなか
    ったときは前記演算結果を選択し、キャリー又はボロー
    が発生したときは前記演算種類情報に従って前記正の上
    限値と前記正の上限値の1の補数の一方を選択して出力
    することを特徴とする演算処理装置。
  6. 【請求項6】 請求項1において、 前記演算結果情報は前記加減算にてオーバーフローが発
    生したか否かを表すオーバーフロー情報と前記演算結果
    の正負を表す正負情報とを含み、該演算結果情報を格納
    する情報記憶回路を有し、前記定数記憶手段に格納され
    た設定値は正の上限値と負の上限値であり、前記選択回
    路は前記情報記憶回路の前記演算結果情報に基づき、オ
    ーバーフローが発生しなかったときは前記演算結果を選
    択し、オーバーフローが発生したときは前記正負情報の
    内容に従って前記正の上限値と前記負の上限値の一方を
    選択して前記最終演算結果とすることを特徴とする演算
    処理装置。
  7. 【請求項7】 請求項1において、 前記定数記憶手段は前記演算器の2つの入力にそれぞれ
    接続された任意の正の上限値を格納する読み書き可能な
    MAXレジスタと任意の負の上限値を格納する読み書き
    可能なMINレジスタとを含んでなり、前記演算器は前
    記予め定められた値として前記MAXレジスタと前記M
    INレジスタに格納された前記正の上限値と前記負の上
    限値を用い、該正の上限値又は該負の上限値と前記演算
    結果との大小関係を前記演算結果情報とするものであ
    り、前記選択回路は前記演算器の出力と前記MAXレジ
    スタと前記MINレジスタとに接続されたマルチプレク
    サを含み、該マルチプレクサは前記演算結果情報に基づ
    き前記演算結果と前記正の上限値と前記負の上限値の1
    つを選択することを特徴とする演算処理装置。
  8. 【請求項8】 請求項1において、 前記定数記憶手段は前記演算器の2つの入力にそれぞれ
    接続された任意の正の上限値を格納する読み書き可能な
    MAXレジスタと任意の負の上限値を格納する読み書き
    可能なMINレジスタとを含み、前記演算器は第1と第
    2の演算器を有し、該第1の演算器は前記加減算を実行
    した後、制御信号に応答して前記予め定められた値とし
    て前記正の上限値を用いて前記演算結果が該正の上限値
    を越えたか否かを判定し、前記第2の演算器は前記制御
    信号に応答して前記予め定められた値として前記負の上
    限値を用い、前記演算結果が該負の上限値を越えたか否
    か判定し、該判定結果を前記演算結果情報とするもので
    あり、前記選択回路は前記第1の演算器の出力と前記M
    AXレジスタと前記MINレジスタとに接続されたマル
    チプレクサを含んでなり、前記マルチプレクサは前記演
    算結果情報に基づき前記演算結果が前記正の上限値及び
    前記負の上限値を越えていなければ該演算結果を選択
    し、前記演算結果が前記正の上限値を越えていれば該正
    の上限値を選択し、前記演算結果が前記負の上限値を越
    えていれば該負の上限値を選択することを特徴とする演
    算処理装置。
JP5194554A 1993-08-05 1993-08-05 飽和処理機能を備えた演算処理装置 Pending JPH0749767A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5194554A JPH0749767A (ja) 1993-08-05 1993-08-05 飽和処理機能を備えた演算処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5194554A JPH0749767A (ja) 1993-08-05 1993-08-05 飽和処理機能を備えた演算処理装置

Publications (1)

Publication Number Publication Date
JPH0749767A true JPH0749767A (ja) 1995-02-21

Family

ID=16326465

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5194554A Pending JPH0749767A (ja) 1993-08-05 1993-08-05 飽和処理機能を備えた演算処理装置

Country Status (1)

Country Link
JP (1) JPH0749767A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970016944A (ko) * 1995-09-29 1997-04-28 모리시다 요이치 포화연산을 적절하게 행하는 프로세서 및 그 제어방법
US5915109A (en) * 1996-08-12 1999-06-22 Mitsubishi Denki Kabushiki Kaisha Microprocessor for processing a saturation instruction of an optional-bit length value

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970016944A (ko) * 1995-09-29 1997-04-28 모리시다 요이치 포화연산을 적절하게 행하는 프로세서 및 그 제어방법
US5915109A (en) * 1996-08-12 1999-06-22 Mitsubishi Denki Kabushiki Kaisha Microprocessor for processing a saturation instruction of an optional-bit length value

Similar Documents

Publication Publication Date Title
US4172287A (en) General purpose data processing apparatus for processing vector instructions
US7945607B2 (en) Data processing apparatus and method for converting a number between fixed-point and floating-point representations
KR940009094B1 (ko) 데이타처리 시스템
JPH0895804A (ja) 中央処理装置
JPH0546383A (ja) データ処理装置
JPH1049369A (ja) データ処理装置
JPH0228830A (ja) 整数除算回路
US6078940A (en) Microprocessor with an instruction for multiply and left shift with saturate
JPH0749767A (ja) 飽和処理機能を備えた演算処理装置
JPH07239780A (ja) 1クロック可変長命令実行処理型命令読み込み電子計 算機
US6112291A (en) Method and apparatus for performing a shift instruction with saturate by examination of an operand prior to shifting
JP3579087B2 (ja) 演算器およびマイクロプロセッサ
JPH10124312A (ja) 中央処理装置
JPH1153189A (ja) 演算装置、演算方法及びコンピュータ読み取り可能な記録媒体
JPS6057435A (ja) マイクロプロセツサ
JPH05108345A (ja) 分岐命令処理装置
JPH07110769A (ja) Vliw型計算機
JP3672076B2 (ja) 演算器および演算方法およびプロセッサ
JPS6244657B2 (ja)
JPH07262010A (ja) 演算処理装置および演算処理方法
JP3658879B2 (ja) パイプライン計算機
JP2615746B2 (ja) ビット操作回路
JP2000250895A (ja) データ処理装置
JPH0721018A (ja) マイクロプログラム制御方式の中央処理装置
JP3523407B2 (ja) 情報処理装置