[第1の実施の形態]
以下、図面を参照して本発明を実施するための第1の実施の形態を説明する。
図1は、本第1の実施の形態における演算装置の基本構造を示す概略図である。同図によれば、本実施の形態において、演算装置は、主に、演算プログラムを格納するプログラムROM、演算プログラムを読み出して実行する演算制御回路、演算データを一時的に格納するためのレジスタ部から構成される。
そして、レジスタ部の演算桁数(有効桁数)は可変に構成されており、加減乗除の四則演算や平方根等の基本演算、対数関数や三角関数等の初等関数演算での演算桁数の可変を実現し、また、特殊関数や統計分布関数等の高等関数演算、漸化式等の演算での収束条件の可変を実現している。更に、演算制御回路では、10進演算を行うことで、2進10進変換による誤差の発生を防止している。
続いて、このような演算装置を備えた演算システムの具体例を説明する。
図2(a)は、本実施の形態における演算システムSの概略構成図である。同図によれば、本実施の形態において、演算システムS1は、PC(Personal Computer)100と、演算装置200とを備えている。PC100と演算装置200とはUSB(Universal Serial Bus)ケーブル等の通信ケーブルKで接続され、相互にデータ転送可能になっている。
PC100は、CPU(Central Processing Unit)やROM(Read Only Memory)、RAM(Random Access memory)、キーボードやマウス等の入力装置、ディスプレイ等の表示装置、通信ケーブルKを接続可能な接続端子を有する通信装置を備えて構成される公知の汎用コンピュータで実現され、本演算システムSとユーザとの間のマンマシンインターフェースとして機能する。
即ち、PC100は、ユーザによって任意に指定される演算桁数と、演算の種類(四則演算、初等関数、高等関数等)と、演算対象の初期データ値とに基づいて機械語プログラムを生成し、演算装置200に転送する装置であり、演算自体は演算装置200において実行される。また、演算装置200による演算結果を表示装置に表示する。
演算装置200は、PC100から転送されてきた機械語プログラムに従った数値演算を実行する装置であり、特に、機械語プログラムを構成する各命令それぞれを、当該命令において指定された演算桁数で演算する。そして、演算結果をPC100に転送する。
ところで、演算装置200で実行される数値演算は、演算桁数の指定の仕方によって、(1)直接アドレス方式と、(2)間接アドレス方式と、の2つの方式に分類される。
図2(b)に示すように、直接アドレス方式は、演算桁数をオペランド部にて直接的に指定する命令方式のことである。演算装置200は、命令のオペランド部で指定された演算桁数で該命令の数値演算を実行する。
一方、間接アドレス方式は、演算桁数を格納している格納先を指定(即ち、演算桁数を間接的に指定)する命令方式のことである。演算装置200は、命令によって指定された格納先から演算桁数とする値を読み出し、読み出した演算桁数で該命令の数値演算を実行する。
図3は、演算装置200の回路構成を示すブロック図であり、数値演算の実行に係る要部構成を示している。同図によれば、演算装置200は、プログラムROM210と、プログラムカウンタ212と、ラッチ部214と、命令デコーダ216と、可変パラメータ記憶部220と、セレクタ231、232、233、234と、アドレスカウンタ240と、レジスタ部260と、演算器270と、終了判定回路250とを備えて構成される。
プログラムROM210は、例えば電気的に書き換え可能なメモリであるEEPROM(Electrical Erasable Programmable ROM)で構成され、PC100から転送されてきた機械語プログラムをプログラム命令211として格納する。このプログラム命令211は、計算の種類と計算桁数とを設定している計算命令からなり、1以上の任意の計算命令を組み合わせて構成される。プログラムROM210に格納されたプログラム命令211は、アドレスカウンタ240が示すアドレスの命令が1つづつ読み出されてラッチ部214にラッチされる。尚、プログラムROM210は、電気的に書き換え可能な不揮発性のRAM等により構成されてもよい。ラッチ部214は、RAM等の書き込み自在なメモリで構成され、プログラムROMから読み出された1つの命令を保持する。
ここで、1つの命令は、命令部10及びオペランド部20から構成される。命令部10は、命令コードOP及び3ビット(bit)の拡張命令コードEXTを有する。また、オペランド部20は、それぞれ6ビットの第1オペランド21及び第2オペランド22を有しており、第1オペランド21は、2ビットのデータFu及び4ビットのデータFlから成り、第2オペランド22は、2ビットのデータSu及び4ビットのデータSlから成る。尚、これらの各データの詳細については後述する。
命令デコーダ216は、ラッチ部214にラッチされた命令コードOPを解読(デコード)し、解読した命令を演算器270に実行させるための演算制御信号を演算器270に出力するといった、演算装置200内の各種制御回路を実行させるための各種制御信号を出力する。
可変パラメータ記憶部220は、RAM等で構成され、それぞれ4ビットデータを格納可能なレジスタW、Vを備えている。このレジスタW、Vは、間接アドレス方式の場合に演算桁数の格納先となるものであり、演算桁数となる値を変更可能に格納する。
セレクタ231には、ラッチ部214にラッチされたデータFl及びレジスタWに格納されているデータ(以下、「データw」と称する。)が入力されるとともに、拡張命令コードEXTの3ビット目のデータ(以下、「データEXT[3]」と称する。)が選択制御信号として入力される。そして、セレクタ231は、選択制御信号即ちデータEXT[3]の値に従って、2つの入力データの何れか一方を選択して出力する。具体的には、データEXT[3]の値が「1」の場合にはデータwを選択して出力し、「0」の場合にはデータFlを選択して出力する。
セレクタ232には、ラッチ部214にラッチされたデータSl及びレジスタVに格納されているデータ(以下、「データv」と称する。)が入力されるとともに、拡張命令コードEXTの2ビット目のデータ(以下、「データEXT[2]」と称する。)が選択制御信号として入力される。そして、セレクタ232は、選択制御信号即ちデータEXT[2]の値に従って、2つの入力データの何れか一方を選択して出力する。具体的には、データEXT[2]の値が「1」の場合にはデータvを選択して出力し、「0」の場合にはデータSlを選択して出力する。
アドレスカウンタ240は、4ビットのアップカウンタであり、セレクタ232の出力データが初期値としてセットされる。そして、内部クロックに同期してカウントアップし、現在のカウント値を出力する。
セレクタ233には、セレクタ231の出力データ及びアドレスカウンタ240の出力データ(カウント値)が入力されるとともに、拡張命令コードEXTの1ビット目のデータ(以下、「データEXT[1]と称する。」が選択制御信号として入力される。そして、セレクタ233は、データEXT[1]の値に従って、2つの入力データの何れか一方を選択して出力する。具体的には、データEXT[1]の値が「1」の場合にはセレクタ231の出力データを選択して出力し、「0」の場合にはアドレスカウンタ240の出力データを選択して出力する。
セレクタ234には、セレクタ232の出力データ及びアドレスカウンタ240の出力データが入力されるとともに、データEXT[1]が選択制御信号として入力される。そして、セレクタ234は、データEXT[1]の値に従って、2つの入力データの何れか一方を選択して出力する。具体的には、データEXT[1]の値が「1」の場合にはセレクタ232の出力データを選択して出力し、「0」の場合にはアドレスカウンタ240の出力データを選択して出力する。
終了判定回路250は、一致回路252及びORゲート254を有する。
一致回路252は、セレクタ231の出力データ及びアドレスカウンタ240の出力データが入力され、2つの入力データが一致する場合に一致信号「1」を出力し、一致しない場合には不一致信号「0」を出力する。ORゲート254は、一致回路252の出力信号及びデータEXT[1]が入力され、2つの入力信号の論理和の信号を出力する。
従って、終了判定回路250は、アドレスカウンタ240の出力データとセレクタ231の出力データとが一致した場合、或いは、データEXT[1]の値が「1」である場合に命令終了信号「1」を出力し、これ以外の場合には命令継続信号「0」を出力する。
レジスタ部260は、RAM等で構成され、BCDコード化された演算データの各桁の値を所定桁数毎にアドレス順に格納するデータ用レジスタである。また、レジスタ部260は、アドレス指定及びデータ出力をそれぞれ2ポート有する2ポート(Dual Port)方式のレジスタである。
第1ポート(Firstポート)では、アドレス端子Fuadから入力される2ビットデータを上位アドレスとし、アドレス端子Fladから入力される4ビットデータを下位アドレスとする6ビットのアドレスFadに格納されている16ビットデータを、出力端子Foutから出力する。アドレス端子Fuadには、ラッチ部214にラッチされたデータFuが入力され、アドレス端子Fladには、セレクタ233の出力データが入力される。
第2ポート(Secondポート)では、アドレス端子Suadから入力される2ビットデータを上位アドレスとし、アドレス端子Sladから入力される4ビットデータを下位アドレスとする6ビットのアドレスSadに格納されている16ビットデータを、出力端子Soutから出力する。アドレス端子Suadには、ラッチ部214にラッチされたデータSuが入力され、アドレス端子Sladには、セレクタ234の出力データが入力される。
また、レジスタ部260には、入力端子Finから16ビットデータが入力され、入力データは、アドレスFadに書き込まれる。
演算器270は、16ビット演算が可能であり、終了判定回路250から命令終了信号「1」が出力されていない間(即ち、命令継続信号「0」が出力されている間)、命令デコーダ216から入力される演算制御信号に従った演算を行う。即ち、演算器270は、レジスタ部260の出力端子Fout、Soutそれぞれから出力される16ビットデータが入力され、2つの入力データに対する演算を行い、演算結果を16ビットデータで出力する。演算器270の出力データ(演算結果)はレジスタ部260の入力端子Finに入力され、レジスタ部260に書き込まれる。
図4は、レジスタ部260の詳細構成を示す図である。同図によれば、レジスタ部260は、4本のレジスタX、Y、Z、Aを備えており、各レジスタは、それぞれ16ワード(Word)で構成されている。ここで、1ワードは16ビットであり、演算データはBCDコード化されて格納されているので、1ワードは10進表示で4桁に相当する。また、各レジスタは浮動小数点型のデータを格納し、そのフォーマットは、上位14ワード(第2〜第15ワード)が仮数部、下位2ワード(第0〜第1ワード)が指数部(符号を含む)となっている。
レジスタ部260のアドレス指定は、2ビットの上位アドレスでレジスタを指定し、4ビットの下位アドレスでレジスタ内のワードを指定することでなされる。即ち、レジスタ部260のアドレス指定はワード単位で行われ、1ワード分のデータ即ち16ビットデータが出力される。尚、上位アドレスFuad、Suadの値とレジスタとは、図5のデータテーブルに示すように対応付けられている。また、下位アドレスFlad、Sladは、それぞれ、その値がワードを示す。
具体的には、第1ポートでは、2ビットの上位アドレスFuad[1:0]でレジスタを指定し、4ビットの下位アドレスFlad[3:0]でレジスタ内のワードを指定して、1ワード即ち16ビットのデータFout[15:0]を出力する。また、第2ポートでは、2ビットの上位アドレスSuad[1:0]でレジスタを指定し、4ビットの下位アドレスSlad[15:0]でレジスタ内のワードを指定して、1ワード即ち16ビットのデータSout[15:0]を出力する。
更に、データ入力は、1ワード即ち16ビットのデータFin[15:0]が入力され、これは、アドレスFadで指定されたワードに書き込まれる。
ところで、本演算システムSで実行される命令は、1命令に対する演算器270の演算回数によって、(1)1ワード命令と、(2)連続ワード命令(桁数可変型演算命令)と、の2つの命令に分類される。
1ワード命令では、1命令について各ポートで1つのワードのみを指定し、演算器270は演算を1回のみ行う。従って、1ワード命令では、アドレスFadで指定される1ワードの演算データが被演算数となり、アドレスSadで指定される1ワードの演算データが演算数となる。
一方、連続ワード命令では、1命令について各ポートで連続する複数のワードを順に指定し、演算器270は、各ワードについての演算を順に行う。即ち、演算器270は、順に指定されるワードの演算データそれぞれに対する同一の演算を繰り返し行う。このとき、下位アドレスFlad、Sladは、それぞれ、指定された開始ワードから終了ワードまでを順に指定する。即ち、開始ワードをn、終了ワードをmとすると、上位アドレスFuad、Suadで指定する各レジスタについて第nワードから第mワードまで連続する合計(m−n+1)ワードが順に指定されて演算が行われ、演算結果が上位アドレスFuadで指定するレジスタの第nワードから第mワードに書き込まれる。即ち、10進表現で(4×(m−n+1))桁での数値演算が行われる。
従って、連続ワード命令では、アドレスFuadで指定されるレジスタの第nワードから第mワードまでの連続するワードの演算データが被演算数となり、アドレスSuadで指定されるレジスタの第nワードから第mワードまでの連続するワードの演算データが演算数となる。
開始ワード及び終了ワードは、命令のオペランド部20に含まれるデータ或いは可変パラメータ記憶部220に記憶されているデータによって指定される。具体的には、開始ワードは、間接アドレス方式の場合にはデータvで指定され、直接アドレス方式の場合にはデータSlで指定される。また、終了ワードは、間接アドレス方式の場合にはデータwで指定され、直接アドレス方式の場合にはデータFlで指定される。
図6は、連続ワード命令における開始ワード及び終了ワードの指定例を示す図である。同図では、終了ワードを「15」と固定し、開始ワードを可変した場合を示している。同図に示すように、開始ワードを、仮数部の最下位ワードである第2ワードから最上位ワードである第15ワードまで変化させると、演算桁数は、10進表現で56桁、52桁、48桁、・・・、4桁と、1ワード即ち4桁刻みで可変する。つまり、連続ワード命令では、開始ワード及び終了ワードを適当に設定することで、所望の演算桁数での数値演算を実現することができる。
この連続ワード命令/1ワード命令の別、及び、上述した間接/直接アドレス方式の別は、命令に含まれる拡張命令コードEXTで指定される。
拡張命令コードEXTは、図7に示すように、3ビットで構成され、図中右から順に1ビット目、2ビット目、3ビット目である。そして、1ビット目(EXT[1])は連続/1ワード命令の別を示し、1ワード命令の場合には「1」が設定され、連続ワード命令の場合には「0」が設定される。
2ビット目(EXT[2])は、開始ワードの間接/直接アドレス方式の別を示し、間接アドレス方式の場合には「1」が設定され、直接アドレス方式の場合には「0」が設定される。但し、1ワード命令の場合には、1ワードの演算データについて1回のみの演算がなされるため、開始ワードのデータがそのまま被演算数となる。
また、3ビット目(EXT[2])は、終了ワードの間接/直接アドレス方式の別を示し、間接アドレス方式の場合には「1」が設定され、直接アドレス方式の場合には「0」が設定される。但し、1ワード命令の場合には、終了ワードのデータがそのまま演算数となる。
図8は、拡張命令コードEXTが取り得る値それぞれについての命令の機能例を示す図である。尚、同図中、命令部のオペコード「ADD」は“加算”を表す命令コードであり、「ADD」に続く3ビットのデータは拡張命令コードEXTを表している。また、オペランド部中の「*」は“指定不要(任意のワード)”を表している。また、ニーモニック及び動作中の「w」はレジスタWに格納されているデータwを表し、「v」はレジスタVに格納されているデータvを表している。
拡張命令コードEXTの各ビットの値は、パターン(A)〜(H)の合計8パターンある。このパターン(A)〜(H)毎の演算装置200の具体的な動作例について、以下、順に説明する。
(A)拡張命令コードEXT=「000」
この場合、命令は連続ワード命令であり、直接アドレス方式で実行される。例えば、命令「ADD 000 X15 Y4」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00(X)」、Fl=「1111(15)」、Su=「01(Y)」、Sl=「0100(4)」、OP=「ADD」、EXT=「000」がラッチされる。
そして、セレクタ231では、選択制御信号としてEXT[3]=「0」が入力され、Fl=「1111」が選択・出力される。また、セレクタ232では、選択制御信号としてEXT[2]=「0」が入力され、Sl=「0100」が選択・出力される。次いで、アドレスカウンタ240には、セレクタ232の出力データ即ちSl=「0100」がセットされる。続いて、セレクタ233、234では、ともに選択制御信号としてEXT[1]=「0」が入力され、アドレスカウンタ240の出力データ即ちSl=「0100」が選択・出力される。
従って、レジスタ部260のアドレス端子FuadにはFu=「00」が入力され、アドレス端子Fladにはセレクタ233の出力データ即ち「0100」が入力されて、レジスタXの第4ワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子SuadにはSu=「01」が入力され、アドレス端子Sladにはセレクタ233の出力データ即ち「0100」が入力されて、レジスタYの第4ワードに格納されている演算データが出力端子Soutから出力される。
一方、命令デコーダ216からは加算を指示する演算制御信号が演算器270に対して出力され、演算器270では、レジスタ部260から出力された2つの演算データが加算される。そして、加算結果がレジスタ部260の入力端子Finに入力され、レジスタXの第4ワードに書き込まれる(動作:X4+Y4→X4)。
また、終了判定回路250では、セレクタ231の出力データ(Su=「1111」)とアドレスカウンタ240の出力データ(Sl=「0100」)とが一致しないため、一致回路252から不一致信号「0」が出力されるととともに、EXT[1]=「0」であるため、命令継続信号「0」が出力される。
続いて、アドレスカウンタ240がカウントアップし、セレクタ233、234からは、ともに「0101(5)」が出力される。従って、レジスタ部260のアドレス端子Flad、Sladにはともに「0101」が入力されて、レジスタXの第5ワードに格納されている演算データが出力端子Foutから出力され、レジスタYの第5ワードに格納されている演算データが出力端子Soutから出力される。そして、これらの出力データが演算器270にて加算され、加算結果がレジスタXの第5ワードに書き込まれる(動作:X5+Y5→X5)。一方、終了判定回路250から、命令継続信号「0」が出力される。
その後も、演算器270が加算を行う毎にアドレスカウンタ240がカウントアップし、レジスタ部260のアドレス端子Flad、Sladには、「0110(6)」、「0111(7)」、・・・が順に入力される。つまり、レジスタ部260の出力端子Foutから、レジスタXの第6ワードに格納されている演算データ、第7ワードに格納されている演算データ、・・・が順に出力されるとともに、出力端子Soutから、レジスタYの第6ワードに格納されている演算データ、第7ワードに格納されている演算データ、・・・が順に出力される。そして、これらの演算データが出力順に演算器270にて加算され、加算結果がXレジスタの第6ワード、第7ワード、・・・と順に書き込まれる。
そして、アドレスカウンタ240の出力データ(カウント値)が「1111」になると、一致回路252から一致信号「1」が出力されて、終了判定回路250から命令終了信号「1」が出力される。すると、演算器270は演算を終了し、該命令の実行が終了する。
このように、命令「ADD 000 X15 Y4」では、レジスタX、Yについて、第4ワードから第15ワードまで12ワード連続して加算が実行され、演算結果がレジスタXの第4ワードから第15ワードに順に書き込まれる(動作:X4〜15+Y4〜15→X4〜15)。即ち、有効桁数が10進表現で48(=4×12ワード)桁の数値演算が実行される。
(B)拡張命令コードEXT=「010」
この場合、命令は連続ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 010 X15 Y*」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「1111」、Su=「01」、データSl=「*」、OP=「ADD」、EXT=「010」がラッチされる。
そして、セレクタ231では、選択制御信号として「0」が入力され、Fl=「1111」が選択・出力される。また、セレクタ232では、選択制御信号として「1」が入力され、データvが選択・出力されて、アドレスカウンタ240にはデータvがセットされる。次いで、セレクタ233、234では、ともに選択制御信号として「0」が入力され、データvが選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Fladにはデータvが入力されて、レジスタXの第vワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータvが入力されて、レジスタYの第vワードに格納されている演算データが出力端子Soutから出力される。そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、加算結果がレジスタXの第vワードに書き込まれる(動作:Xv+Yv→Xv)。
その後、終了判定回路250から命令終了信号「1」が出力されない間、アドレスカウンタ240が演算器270による演算毎にカウントアップして、レジスタ部260の出力端子Foutから、レジスタXの第(v+1)ワードに格納されている演算データ、第(v+2)ワードに格納されている演算データ、・・・が順に出力されるとともに、出力端子Soutから、レジスタYの第(v+1)ワードに格納されている演算データ、第(v+2)ワードに格納されている演算データ、・・・が順に出力される。そして、これらの演算データが出力順に演算器270にて加算され、演算結果がレジスタXの第(v+1)ワード、第(v+2)ワード・・・に順に書き込まれる。
そして、アドレスカウンタ240の出力データが「1111」になると、一致回路252から一致信号「1」が出力され、終了判定回路250から命令終了信号「1」が出力されて、該命令の実行が終了する。
このように、命令「ADD 010 X15 Y*」では、レジスタX、Yについて、第vワードから第15ワードまで連続して加算が実行され、演算結果がレジスタXの第vワードから第15ワードまで順に書き込まれる(動作:Xv〜15+Yv〜15→Xv〜15)。
またこの場合、開始ワードはデータvで指定される。データvの値は変更可能であるので、所望の演算桁数に応じた値を格納することで、図6を参照して説明したように、任意の演算桁数での数値演算を演算装置200に行わせることができる。
(C)拡張命令コードEXT=「100」
この場合、命令は連続ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 100 X* Y4」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「0100」、OP「ADD」、EXT=「100」がラッチされる。
そして、セレクタ231では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ232では、選択制御信号として「0」が入力され、Sl=「0100」が選択・出力されて、アドレスカウンタ240にはSl=「0100」がセットされる。次いで、セレクタ233、234では、ともに選択制御信号として「0」が入力され、「0100」が選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Fladには「0100」が入力されて、レジスタXの第4ワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladには「0100」が入力されて、レジスタYの第4ワードに格納されている演算データが出力端子Soutから出力される。そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、加算結果がレジスタXの第4ワードに書き込まれる(動作:X4+Y4→X4)。
その後、終了判定回路250から命令終了信号「1」が出力されない間、演算器270はレジスタ部260から出力される演算データに対する演算(加算)を繰り返し実行し、アドレスカウンタ240は、演算器270による演算毎にカウントアップする。そして、アドレスカウンタ240の出力データがデータwに一致すると、終了判定回路250から命令終了信号「1」が出力されて、該命令の実行が終了する。
このように、命令「ADD 100 X* Y4」では、レジスタX、Yについて、第4ワードから第wワードまで連続して加算が実行され、演算結果がレジスタXの第4ワードから第wワードに順に書き込まれる(動作:X4〜w+Y4〜w→X4〜w)。
またこの場合、終了ワードはデータwで指定される。データwの値は変更可能であるので、所望の演算桁数に応じた値を格納することで、任意の演算桁数での数値演算を演算装置200に行わせることができる。
(D)拡張命令コードEXT=「110」
この場合、命令は連続ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 110 X* Y*」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「110」がラッチされる。
そして、セレクタ231では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ232では、選択制御信号として「1」が入力され、データvが選択・出力されて、アドレスカウンタ240にはデータvがセットされる。次いで、セレクタ233、234では、ともに選択制御信号として「0」が入力され、データvが選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Fladにはデータvが入力されて、レジスタXの第vワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータvが入力されて、レジスタYの第vワードに格納されている演算データが出力端子Soutから出力される。そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、加算結果がレジスタXの第vワードに書き込まれる(動作:Xv+Yv→Xv)。
その後、終了判定回路250から命令終了信号「1」が出力されない間、演算器270はレジスタ部260からの出力データに対する演算(加算)を繰り返し実行し、アドレスカウンタ240は、演算器270による演算毎にカウントアップする。そして、アドレスカウンタ240の出力データがデータwに一致すると、終了判定回路250から命令終了信号「1」が出力されて、該命令の実行が終了する。
このように、命令「ADD 110 X* Y*」では、レジスタX、Yについて、第vワードから第wワードまで連続して加算が実行され、演算結果がレジスタXの第vワードから第wワードに順に書き込まれる(動作:Xv〜w+Yv〜w→Xv〜w)。
またこの場合、開始ワードはデータvで指定されるとともに、終了ワードはデータwで指定される。データv、wの値は変更可能であるので、所望の演算桁数に応じた値を格納することで、任意の演算桁数での数値演算を演算装置200に行わせることができる。
(E)拡張命令コードEXT=「001」
この場合、命令は1ワード命令であり、直接アドレス方式で実行される。例えば、命令「ADD 001 X15 Y4」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「1111」、S=「01」、Sl=「0100」、OP=「ADD」、EXT=「001」がラッチされる。
そして、セレクタ231では、選択制御信号として「0」が入力され、「1111」が選択・出力される。また、セレクタ232では、選択制御信号として「0」が入力され、「0100」が選択・出力されて、アドレスカウンタ240には、Sl=「0100」がセットされる。
次いで、セレクタ233では、選択制御信号として「1」が入力され、セレクタ231の出力データ即ちFl=「1111」が選択・出力される。また、セレクタ234では、選択制御信号として「1」が入力され、セレクタ232の出力データ即ちSl=「0100」が選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Fladには「1111」が入力されて、レジスタXの第15ワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladには「0100」が入力されて、レジスタYの第4ワードに格納されている演算データが出力端子Soutから出力される。
そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、加算結果がレジスタXの第15ワードに書き込まれる(動作:X15+Y4→X15)。
一方、終了判定回路250では、セレクタ231の出力データ(Sl=「1111」)と、アドレスカウンタ240の出力データ(「0100」)とは一致しないため、一致回路252から不一致信号「0」が出力されるが、EXT[1]=「1」であるため、終了判定回路250から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 001 X15 Y4」では、レジスタXの第15ワードの値とレジスタYの第4ワードの値とが加算され、レジスタXの第15ワードに書き込まれる(動作:X15+Y4→X15)。
(F)拡張命令コードEXT=「011」
この場合、命令は1ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 011 X15 Y*」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「1111」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「011」がラッチされる。
そして、セレクタ231では、選択制御信号として「0」が入力され、Fl=「1111」が選択・出力される。また、セレクタ232では、選択制御信号として「1」が入力され、データvが選択・出力されて、アドレスカウンタ240にはデータvがセットされる。
次いで、セレクタ233では、選択制御信号として「1」が入力され、「1111」が選択・出力される。また、セレクタ234では、選択制御信号として「1」が入力され、データvが選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Fladには「1111」が入力されて、レジスタXの第15ワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータvが入力されて、レジスタYの第vワードに格納されている演算データが出力端子Soutから出力される。
そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、レジスタXの第15ワードに書き込まれる(動作:X15+Yv→X15)。また、終了判定回路250から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 011 X15 Y*」では、レジスタXの第15ワードの値とレジスタYの第vワードの値とが加算され、レジスタXの第15ワードに書き込まれる(動作:X15+Yv→X15)。この場合、演算数はデータvで指定される。
(G)拡張命令コードEXT=「101」
この場合、命令は1ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 101 X* Y4」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「0100」、OP=「ADD」、EXT=「101」がラッチされる。
そして、セレクタ231では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ232では、選択制御信号として「0」が入力され、Sl=「0100」が選択・出力されて、アドレスカウンタ240には「0100」がセットされる。
次いで、セレクタ233では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ234では、選択制御信号として「1」が入力され、「0100」が選択・出力される。
従って、レジスタ部260のアドレス端子Fuadには「00」が入力され、アドレス端子Sladにはデータwが入力されて、レジスタXの第wワードに格納されている演算データが出力端子Soutから出力される、また、アドレス端子Suadには「01」が入力され、アドレス端子Sladには「0100」が入力されて、レジスタYの第4ワードに格納さえている演算データが出力端子Soutから出力される。
そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、レジスタXの第wワードに書き込まれる(動作:Xw+Y4→Xw)。また、終了判定回路250から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 101 X* Y4」では、レジスタXの第wワードの値とレジスタYの第4ワードの値とが加算され、レジスタXの第wワードに書き込まれる(動作:Xw+Y4→Xw)。この場合、被演算数はデータwで指定される。
(H)拡張命令コードEXT=「111」
この場合、命令は1ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 111 X* Y*」を実行する場合、演算装置200は次のように動作する。
先ず、ラッチ部214には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「111」がラッチされる。
そして、セレクタ231では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ232では、選択制御信号として「1」が入力され、データvが選択・出力されて、アドレスカウンタ240にはデータvがセットされる。
次いで、セレクタ233では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ234では、選択制御信号として「1」が入力され、データvが選択・出力される。
従って、レジスタ部260のアドレス端子Fusdには「00」が入力され、アドレス端子Fladにはデータwが入力されて、レジスタXの第wワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータvが入力されて、レジスタYの第vワードに格納されている演算データが出力端子Soutから出力される。
そして、レジスタ部260から出力された2つの演算データが演算器270にて加算され、加算結果がレジスタXの第wワードに書き込まれる(動作:Xw+Yv→Xw)。また、終了判定回路250から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 001 Xw Yv」では、レジスタXの第wワードの値とレジスタYの第vワードの値とが加算され、レジスタXの第wワードに書き込まれる(動作:Xw+Yv→Xw)。この場合、被演算数はデータwで指定され、演算数はデータvで指定される。
[第1の実施の形態の効果]
以上のように、本第1の実施の形態における演算装置200によれば、連続ワード命令の場合、1つの命令で開始ワード及び終了ワードを指定すると、指定された開始ワードから終了ワードまでの連続する複数ワードについての演算が演算器270によって行われる。従って、所望の演算桁数での演算を行うことができる。
また、開始ワード及び終了ワードは、それぞれを命令中で直接的に指定することもできるし、可変パラメータ記憶部220のレジスタW、Vに格納されているデータw、vによって間接的に指定することもできる。従って、命令単位で演算桁数(有効桁数)を自在に指定できるため、プログラムの中途で演算桁数を変更したり、或いは指定するといったことが可能となる。また、演算結果をレジスタW、Vに格納するといったプログラムにより、プログラムの実行途中に演算桁数を可変することが可能となる。この結果、演算桁数に対する柔軟なプログラムが可能であり、高精度な演算を簡単に実現することができる。
更に、レジスタ部260には、BCDコード化されたデータ値が格納されるので、従来のような2進10進変換による誤差は発生しない。
[第1の実施の形態の変形例]
尚、本発明の適用は、上述した実施の形態に限定されることなく、本発明の趣旨を逸脱しない範囲で適宜変更可能である。
(1)可変する桁数の単位
上述した実施の形態では、1ワード(16ビット)を単位とし、10進表現で4桁刻みの桁数可変を行うこととしたが、これ以外のビット数、具体的には4×n(nは自然数)ビットを単位にしても良い。例えば演算器270が32ビットで演算するものであった場合には2ワードを単位として良い。尚、nの4倍としたのは、レジスタ部260にはBCDコード化されたデータが格納されており、BCDコードでは、4ビットが10進表現で1桁に相当するためである。この場合、10進表現でn桁刻みの桁数可変が可能な演算装置を実現できる。また、上述した実施の形態において、演算結果のうちの不要な桁の値をマスクすることで、1桁単位の演算桁数の指定を可能としても良い。
(2)指数部の演算桁数を可変
また、上述した実施の形態では、第2ワードから第15ワードの何れかを開始ワード或いは終了ワードとし、仮数部の演算桁数を可変としたが、指数部の演算桁数を可変しても良いのは勿論である。
(3)レジスタのワード数
また、レジスタ部260のワード数を16として説明したが、これに限られないことは勿論である。また、仮数部を14ワード、指数部を2ワードとしたが、この割合は適宜変更して良いのは勿論である。
[第2の実施の形態]
次に、第2の実施の形態について説明する。
本第2の実施の形態における演算システムS2は、PC100と演算装置300とがUSBケーブル等の通信ケーブルK2で接続されることにより、相互にデータ転送可能なように構成されている。尚、演算システムS2の構成は、上述した第1の実施の形態における演算システムS1と略同様であるため、第1の実施の形態と同一部分については、詳細説明を省略し、同一の構成要素は、同一の符号を付して説明する。以下、本第2の実施の形態に特徴的な部分を中心に詳細に説明する。
本第2の実施の形態に特徴的な構成として、演算装置300は、可変パラメータ部320に6ビットデータを収納可能なレジスタIを有し、間接アドレス方式によりレジスタのアドレスを指定する場合に、桁単位でアドレスの指定が可能となっている。これにより、演算に用いる計算桁数(有効桁数)及び計算開始桁を1桁単位で自在に変更可能な演算装置を実現する。
図9は、演算装置300の回路構成を示すブロック図であり、数値演算の実行に係る要部構成を示している。同図によれば、演算装置300は、プログラムROM310と、プログラムカウンタ312と、ラッチ部314と、命令デコーダ316と、可変パラメータ記憶部320と、セレクタ331、332、333、334と、アドレスカウンタ340と、レジスタ部360と、演算器370と、終了判定回路350とを備えて構成される。
プログラムROM310は、プログラムROM210と同様の構成であり、PC100から転送されてきた機械語プログラムであるプログラム命令311を格納し、プログラムカウンタ312が示すアドレスのプログラム命令311を1つずつ読み出して、ラッチ部314に出力する。このプログラム命令311は、計算桁数と計算の種類とを設定している計算命令からなり、1以上の任意の計算命令を組み合わせて構成される。ラッチ部314は、ラッチ部214と同様に命令部40と、オペランド部30とから構成されるが、第2の実施の形態に特徴的な構成として、命令部40は命令コードOP及び4ビットの拡張命令コードEXTを有している。
図10に、拡張命令コードEXTのデータ構成例を示す。同図によれば、拡張命令コードEXTは、4ビットで構成され、図中右から順に、1ビット目,2ビット目,3ビット目,4ビット目に対応するデータが格納される。具体的に、1ビット目のデータ(EXT[1])には、1ワード/連続命令の別を示すデータが格納され、1ワード命令の場合には「1」が設定され、連続ワード命令の場合には「0」が設定される。
2ビット目及び3ビット目のデータ(EXT[2],EXT[3])には、開始ワードの間接アドレス方式(Vレジスタ指定)/間接アドレス方式(Iレジスタ指定)/直接アドレス方式の別を示すデータが格納される。具体的に、Vレジスタにより指定される間接アドレス方式の場合には「01」が設定され、Iレジスタにより指定される間接アドレス方式の場合には「10」が設定され、直接アドレス方式の場合には「00」が設定される。
4ビット目のデータ(EXT[4])は、終了ワードの間接/直接アドレス方式の別を示すデータが格納され、間接アドレス方式の場合には「1」が設定され、直接アドレス方式の場合には「0」が設定される。
可変パラメータ記憶部320は、RAM等で構成され、それぞれ4ビットデータを格納可能なレジスタW,レジスタVと、6ビットデータを格納可能なレジスタIを有している。レジスタWは、間接アドレス方式の場合に計算終了桁をワード単位、すなわち4桁単位で指定するものであり、4ビットでレジスタを構成する15ワード中の任意のワードを指定する。また、レジスタVは、間接アドレス方式の場合に計算開始桁をワード単位、すなわち4桁単位で指定するものであり、4ビットでレジスタを構成する15ワード中の任意のワードを指定する。レジスタIは、間接アドレス方式の場合に計算開始桁を1桁単位で指定するものであり、上位4ビットでレジスタを構成する15ワード中の任意のワードを指定し、下位2ビットでその指定されたワード中の任意の桁を指定する。
セレクタ331には、ラッチ部314にラッチされたデータFl及びレジスタWに格納されているデータwが入力されるとともに、拡張命令コードEXTの4ビット目のデータが選択制御信号として入力される。そして、セレクタ331は、選択制御信号、すなわちEXT[4]の値にしたがって、2つの入力データの何れか一方を選択して出力する。具体的には、データEXT[4]の値が「1」の場合には、データwを選択して出力し、「0」の場合には、データFlを選択して出力する。
セレクタ332には、ラッチ部314にラッチされたデータSl、レジスタVに格納されているデータv及びレジスタIに格納されているデータ(以下、「データi」と称する。)が入力される。また、セレクタ332には、データEXT[2],データEXT[3]が選択制御信号として入力される。
そして、セレクタ332は、データEXT[2],データEXT[3]の値にしたがって、3つの入力データの何れか1つを選択して出力する。具体的には、データEXT[2],データEXT[3]の値が、「01」の場合には、データvを選択して出力し、「10」の場合には、データiを選択して出力し、「00」の場合には、データSlを選択して出力する。
アドレスカウンタ340は、第1の実施の形態のアドレスカウンタ240と同様のアップカウンタであり、演算が行われる毎にカウントアップして、現在のカウント値を出力する。
レジスタ部360は、レジスタ260と同様の構成であり、アドレス指定及びデータ出力をそれぞれ2ポート有する2ポート方式のレジスタである。第1ポート(Firstポート)では、アドレス端子Fuadから入力される2ビットデータを上位アドレスとし、アドレス端子Fladから入力される4ビットデータを下位アドレスとする6ビットのアドレスFadに格納されている16ビットデータを出力端子Foutから出力する。アドレス端子Fuadには、ラッチ部314にラッチされたデータFuが入力され、アドレス端子Fladには、セレクタ333の出力データが入力される。
第2ポート(Secondポート)では、アドレス端子Suadから入力される2ビットデータを上位アドレスとし、アドレス端子Sladから入力される4ビットデータ又は6ビットデータを下位アドレスとする6ビット又は8ビットのアドレスSadに格納されている16ビットデータを、出力端子Soutから出力する。アドレス端子Suadには、ラッチ部314にラッチされたデータSuが入力され、アドレス端子Sladには、セレクタ334の出力データが入力される。
つまり、レジスタ部360のアドレス指定は、2ビットの上位アドレスでレジスタを指定し、4ビットの下位アドレスでレジスタ内のワードを指定するか、6ビットの下位アドレスでレジスタ内のワード及び桁を指定することでなされる。そして、レジスタ部360のアドレス指定が、ワード単位又は桁単位で行われると、指定されたワード又は桁を計算開始ワード又は計算開始桁として1ワード分のデータ、すなわち16ビットデータが出力される。
図11を参照して、レジスタRnのアドレス指定が桁単位で行われた場合のレジスタ部360のデータ出力方法について説明する。ここで、同図に示すように、レジスタRnは、上位56桁(14ワード)の仮数部と、下位8桁(2ワード)の指数部とからなり、終了桁である第15ワードの最上位桁はブランク桁となっている。従って、仮数部の最大計算桁数は55桁となっている。また、計算開始桁の設定は桁単位で行われ、計算終了桁の設定はワード単位(すなわち、桁数単位)で行われるものとする。更に、レジスタRnは、1ワードすなわち4桁を桁数単位として、データの出力を行う。以下、具体的に説明する。
まず、同図2段目に示すように、計算桁数が55桁に指定された場合、計算開始桁は仮数部の最下位である8桁目に設定され、計算終了桁は第15ワードに設定される。そして、レジスタ部360は、計算開始桁に設定された8桁目から、桁数単位を4桁として、4桁分すなわち1ワード分(16ビット)のデータを順次出力し、13ワード分のデータを出力した後、終了ワードにおいては3桁分(12ビット)のデータを演算器370に出力する。これにより、演算器370で処理される計算桁数は55桁となる。
また、同図3段目に示すように、計算桁数が54桁に指定された場合、計算開始桁は9桁目に指定され、計算終了桁は第15ワードに指定される。そして、レジスタ部360は、計算開始桁に設定された9桁目から、桁数単位を4桁として、4桁分すなわち1ワード分(16ビット)のデータを出力し、13ワード分のデータを順次出力した後、終了ワードにおいては2桁分(8ビット)のデータを演算器370に出力する。これにより、演算器370で処理される計算桁数は54桁となる。
更に、同図最下段に示すように、計算桁数が1桁に指定された場合、計算開始桁は62桁目に設定され、計算終了桁は第15ワードに指定される。そして、レジスタ部360は、計算開始桁に設定された62桁目から1桁分のデータ(4ビット)のデータを出力する。この場合、演算器370で処理される計算桁数は1桁となる。
以上のように、計算桁数が桁単位で指定された場合、プログラム命令311に設定された計算開始桁から、予め定められた桁数単位毎に、1ワード分すなわち4桁分のデータを順次出力し、最終ワードにおいて、残りの桁数分のデータを出力することにより、指定された計算桁数で高速に十進計算を行うことができる。
次に、具体的な命令を与えたられた場合の演算装置300の動作例について説明する。図12は、拡張命令コードEXTが取り得る値それぞれについての命令の機能例を示す図である。尚、同図中、命令部のOPコード「ADD」は‘加算’を表す命令コードであり、「ADD」に続く4ビットのデータは拡張命令コードEXTを表している。また、ニーモニック及び動作中の「w」は、レジスタWに格納されているデータwを表し、「v」はレジスタVに格納されているデータvを表し、「i」は、レジスタIに格納されているデータiを表している。
拡張命令コードEXTの各ビットの値から、命令の機能例はパターン(I)〜(T)の合計12パターンある。ここで、本第2の実施の形態における拡張命令コードEXTのEXT[2],[3]と、上述した第1の実施の形態における拡張命令コードEXTのEXT[2]との対応関係から、パターン(I)〜(T)には、上述したパターン(A)〜(H)と重複するパターンが含まれる。そこで、重複するパターンについては対応関係を示し、詳細な動作説明を省略する。すなわち、パターン(A)と(I)、パターン(B)と(J)、パターン(C)と(L)、パターン(D)と(M)、パターン(E)と(O)、パターン(F)と(P)、パターン(G)と(R)、パターン(H)と(S)は同義の機能例である。以下、第2の実施の形態に特徴的なパターン(K),(N),(Q),(T)について説明する。
(K)拡張命令コードEXT=「0100」
この場合、命令は連続ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 0100 X15 Y*」を実行する場合、演算装置300は次のように動作する。
先ず、ラッチ部314には、Fu=「00(X)」、Fl=「1111(15)」、Su=「01(Y)」、Sl=「*」、OP=「ADD」、EXT=「0100」がラッチされる。すなわち、計算命令記憶手段であるプログラムROM310から計算桁数と計算の種類とを設定している計算命令であるプログラム命令311が読み出される。
そして、セレクタ331では、選択制御信号としてEXT[4]=「0」が入力され、Fl=「1111」が選択・出力される。また、セレクタ332では、選択制御信号としてEXT[2]=「0」,EXT[3]=「1」が入力され、データiが選択・出力されて、アドレスカウンタ340にはデータiがセットされる。次いで、セレクタ333、334では、ともに選択制御信号としてEXT[1]=「0」が入力される。
従って、レジスタ部360のアドレス端子FuadにはFu=「00」が入力され、アドレス端子Fladにはデータiが入力され、レジスタXのi〜(i+3)桁目に格納されている1ワード分の演算データが被演算子として出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータiが入力され、レジスタYのi〜(i+3)桁目に格納されている1ワード分の演算データが被演算子として出力端子Soutから出力される。そして、レジスタ部360から出力された2つの演算データが演算器370にて加算され、加算結果がレジスタXのi〜(i+3)桁目に書き込まれる(動作:Xi〜(i+3)+Yi〜(i+3)→Xi〜(i+3))。
その後、終了判定回路350から命令終了信号「1」が出力されない間、アドレスカウンタ340が演算器370による演算毎に1ずつカウントアップして、レジスタ部360の出力端子Foutから、レジスタXのi〜(i+3)桁目に格納されている演算データ、(i+4)〜(i+7)桁目に格納されている演算データ、・・・が順に出力されるとともに、出力端子Soutから、レジスタYのi〜(i+3)桁目に格納されている演算データ、(i+4)〜(i+7)桁目に格納されている演算データ、・・・が順に出力される。そして、これらの演算データが出力順に演算器370にて加算され、演算結果がレジスタXのi〜(i+3)桁目、(i+4)〜(i+7)桁目・・・に順に書き込まれる。
そして、アドレスカウンタ340の出力データが「1111」になると、一致回路352から一致信号「1」が出力され、終了判定回路350から命令終了信号「1」が出力されて、該命令の実行が終了する。
このように、命令「ADD 0100 X15 Y*」では、レジスタX、Yについて、i桁目から第15ワードまで連続して加算が実行され、演算結果がレジスタXのi桁目から第15ワードまで順に書き込まれる(動作:Xi〜15+Yi〜15→Xi〜15)。
この動作によって、計算命令記憶手段であるプログラムROM310に記憶された計算命令であるプログラム命令311で設定されている計算桁数(例えば、「i桁目〜15ワード」)のうち、桁数単位毎(例えば、「4桁単位毎」)に順次、多桁記憶手段であるレジスタX,Yに記憶されたそれぞれに対応する桁数単位分の数値を、プログラム命令311で設定されている計算の種類(例えば、「ADD」)に従った十進計算で計算し、この計算結果を多桁記憶手段であるレジスタX,Yに桁数単位毎に順次書き込む機能が実現される。
またこの場合、計算開始桁はデータiで指定される。データiの値は変更可能であるので、所望の計算桁数に応じた値を格納することで、図11を参照して説明したように、任意の計算桁数での数値演算を演算装置300に行わせることができる。
(N)拡張命令コードEXT=「1100」
この場合、命令は連続ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 1100 X* Y*」を実行する場合、演算装置300は次のように動作する。
先ず、ラッチ部314には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「1100」がラッチされる。すなわち、計算命令記憶手段であるプログラムROM310から計算桁数と計算の種類とを設定している計算命令であるプログラム命令311が読み出される。
そして、セレクタ331では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ332では、選択制御信号として「10」が入力され、データiが選択・出力されて、アドレスカウンタ340にはデータiがセットされる。次いで、セレクタ333、334では、ともに選択制御信号として「0」が入力され、データiが選択・出力される。
従って、レジスタ部360のアドレス端子Fuadには「00」が入力され、アドレス端子Fladにはデータiが入力されて、レジスタXのi〜(i+3)桁目に格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータiが入力されて、レジスタYのi〜(i+3)桁目に格納されている演算データが出力端子Soutから出力される。そして、レジスタ部360から出力された2つの演算データが演算器370にて加算され、加算結果がレジスタXのi〜(i+3)桁目に書き込まれる(動作:Xi〜(i+3)+Yi〜(i+3)→Xi〜(i+3))。
その後、終了判定回路350から命令終了信号「1」が出力されない間、演算器370はレジスタ部360からの出力データに対する演算(加算)を繰り返し実行し、アドレスカウンタ340は、演算器370による演算毎に1ずつカウントアップする。そして、アドレスカウンタ340の出力データの上位4ビットがデータwに一致すると、終了判定回路350から命令終了信号「1」が出力されて、該命令の実行が終了する。
このように、命令「ADD 1100 X* Y*」では、レジスタX、Yについて、i桁目から第wワードまで連続して加算が実行され、演算結果がレジスタXのi桁目から第wワードに順に書き込まれる(動作:Xi〜w+Yi〜w→Xi〜w)。
この動作によって、計算命令記憶手段であるプログラムROM310に記憶された計算命令であるプログラム命令311で設定されている計算桁数(例えば、「i桁目〜wワード」)のうち、桁数単位毎(例えば、「4桁単位毎」)に順次、多桁記憶手段であるレジスタX,Yに記憶されたそれぞれに対応する桁数単位分の数値を、プログラム命令311で設定されている計算の種類(例えば、「ADD」)に従った十進計算で計算し、この計算結果を多桁記憶手段であるレジスタX,Yに桁数単位毎に順次書き込む機能が実現される。
またこの場合、計算開始桁はデータiで指定されるとともに、計算終了桁はデータwで指定される。データi、wの値は変更可能であるので、所望の計算桁数に応じた値を格納することで、任意の計算桁数での数値演算を演算装置300に行わせることができる。
(Q)拡張命令コードEXT=「0101」
この場合、命令は1ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 011 X15 Y*」を実行する場合、演算装置300は次のように動作する。
先ず、ラッチ部314には、Fu=「00」、Fl=「1111」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「0101」がラッチされる。すなわち、計算命令記憶手段であるプログラムROM310から計算桁数と計算の種類とを設定している計算命令であるプログラム命令311が読み出される。
そして、セレクタ331では、選択制御信号として「0」が入力され、Fl=「1111」が選択・出力される。また、セレクタ332では、選択制御信号として「10」が入力され、データiが選択・出力されて、アドレスカウンタ340にはデータiがセットされる。
次いで、セレクタ333では、選択制御信号として「1」が入力され、「1111」が選択・出力される。また、セレクタ334では、選択制御信号として「1」が入力され、データiが選択・出力される。
従って、レジスタ部360のアドレス端子Fuadには「00」が入力され、アドレス端子Fladには「1111」が入力されて、レジスタXの第15ワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータiが入力されて、レジスタYのi〜(i+3)桁目に格納されている演算データが出力端子Soutから出力される。
そして、レジスタ部360から出力された2つの演算データが演算器370にて加算され、レジスタXの第15ワードに書き込まれる(動作:X15+Yi〜(i+3)→X15)。また、終了判定回路350から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 0101 X15 Y*」では、レジスタXの第15ワードの各桁の値とレジスタYのi〜(i+3)桁目の値とが加算され、レジスタXの第15ワードに書き込まれる(動作:X15+Yi〜(i+3)→X15)。
この動作によって、計算命令記憶手段であるプログラムROM310に記憶された計算命令であるプログラム命令311で設定されている計算桁数(例えば、「4桁」)のうち、桁数単位毎(例えば、「4桁単位毎」)に順次、多桁記憶手段であるレジスタX,Yに記憶されたそれぞれに対応する桁数単位分の数値を、プログラム命令311で設定されている計算の種類(例えば、「ADD」)に従った十進計算で計算し、この計算結果を多桁記憶手段であるレジスタX,Yに桁数単位毎に順次書き込む機能が実現される。
また、この場合、計算開始桁はデータiで指定される。データiの値は変更可能であるので、所望の計算開始桁に応じた値を格納することで、任意の数値を演算数として数値演算を演算装置300に行わせることができる。
(T)拡張命令コードEXT=「1101」
この場合、命令は1ワード命令であり、間接アドレス方式で実行される。例えば、命令「ADD 111 X* Y*」を実行する場合、演算装置300は次のように動作する。
先ず、ラッチ部314には、Fu=「00」、Fl=「*」、Su=「01」、Sl=「*」、OP=「ADD」、EXT=「1101」がラッチされる。すなわち、計算命令記憶手段であるプログラムROM310から計算桁数と計算の種類とを設定している計算命令であるプログラム命令311が読み出される。
そして、セレクタ331では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ332では、選択制御信号として「10」が入力され、データiが選択・出力されて、アドレスカウンタ340にはデータiがセットされる。
次いで、セレクタ333では、選択制御信号として「1」が入力され、データwが選択・出力される。また、セレクタ334では、選択制御信号として「1」が入力され、データiが選択・出力される。
従って、レジスタ部360のアドレス端子Fusdには「00」が入力され、アドレス端子Fladにはデータwが入力されて、レジスタXの第wワードに格納されている演算データが出力端子Foutから出力される。また、アドレス端子Suadには「01」が入力され、アドレス端子Sladにはデータiが入力されて、レジスタYのi〜(i+3)桁目に格納されている演算データが出力端子Soutから出力される。
そして、レジスタ部360から出力された2つの演算データを被演算子として演算器370にて加算され、加算結果がレジスタXの第wワードに書き込まれる(動作:Xw+Yi〜(i+3)→Xw)。また、終了判定回路350から命令終了信号「1」が出力され、該命令の実行が終了する。
このように、命令「ADD 1101 Xw Yi」では、レジスタXの第wワードの値とレジスタYのi〜(i+3)桁目の値とが加算され、レジスタXの第wワードに書き込まれる(動作:Xw+Yi〜(i+3)→Xw)。
この動作によって、計算命令記憶手段であるプログラムROM310に記憶された計算命令であるプログラム命令311で設定されている計算桁数(例えば、「4桁」)のうち、桁数単位毎(例えば、「4桁単位毎」)に順次、多桁記憶手段であるレジスタX,Yに記憶されたそれぞれに対応する桁数単位分の数値を、プログラム命令311で設定されている計算の種類(例えば、「ADD」)に従った十進計算で計算し、この計算結果を多桁記憶手段であるレジスタX,Yに桁数単位毎に順次書き込む機能が実現される。
また、この場合、計算終了桁はデータwで指定され、計算開始桁はデータiで指定される。データw、データiの値は変更可能であるので、所望の計算終了桁、計算開始桁に応じた値を格納することで、任意の数値を被演算子とした数値演算を演算装置300に行わせることができる。
次に、上述したパターン(N)を一例として、レジスタI及びレジスタWに数値が設定された場合に行われる動作例についてフローチャートを参照して説明する。図13は、演算装置300により実行される桁指定計算処理を示すフローチャートである。同図によれば、まず、プログラムROM310のプログラムエリアからプログラムカウンタ312により指定された命令が読み出される(ステップST1)。次いで、命令中のIレジスタの値iが読み出され(ステップST2)、レジスタIにデータiがセットされる(ステップST3)。また、命令中のWレジスタの値wが読み出され(ステップST4)、レジスタWにデータwがセットされる(ステップST5)。
次いで、wが最終ワード、すなわちw=15であるか否かが判別される(ステップST6)。ここで、w=15である場合(ステップST6;YES)、w×4+2を計算することにより計算終了桁が算出される(ステップST7)。続いて、Xレジスタのi〜i+3桁目の演算データが読み出されるとともに(ステップST8)、Yレジスタのi〜i+3桁目の演算データが読み出される(ステップST9)。そして、演算器370において、命令に従った計算が行われ、計算結果がXレジスタのi〜i+3桁目に格納される(ステップST10)。
続いて、i+4が計算終了桁より小さいか否かが判別され(ステップST11)、i+4が計算終了桁より小さい場合(ステップST11;YES)、終了判定回路350から命令終了信号「0」が出力されて、レジスタIの値iにi+4がセットされる(ステップST12)。そして、ステップST8に移行して、上述した処理が繰り返して実行される。一方、i+4が計算終了桁より大きい場合(ステップST11;NO)、終了判定回路350から命令終了信号「1」が出力されて、本桁指定計算処理が終了される。
また、ステップST6において、wが最終ワードでない場合、すなわちw=15でない場合(ステップST6;NO)、w×4+3を計算することにより計算終了桁が算出される(ステップST13)。続いて、Xレジスタのi〜i+3桁目の演算データが読み出されるとともに(ステップST14)、Yレジスタのi〜i+3桁目の演算データが読み出される(ステップST15)。そして、演算器370において、命令に従った計算が行われ、計算結果がXレジスタのi〜i+3桁目に格納される(ステップST16)。
続いて、i+4が計算終了桁より小さいか否かが判別され(ステップST17)、i+4が計算終了桁より小さい場合(ステップST17;YES)、終了判定回路350から命令終了信号「0」が出力されて、レジスタIの値iにi+4がセットされる(ステップST18)。そして、ステップST14に移行して、上述した処理が繰り返して実行される。一方、i+4が計算終了桁より大きい場合(ステップST17;NO)、i+3が計算終了桁であるか否かが判別される(ステップST19)。ここで、計算終了桁がi+3である場合(ステップST19;YES)、Xレジスタに格納された計算結果の演算データと計算終了桁が一致するため、終了判定回路350から命令終了信号「1」が出力されて、本桁指定計算処理が終了される。
一方、計算終了桁がi+3でない場合(ステップST19;NO)、Xレジスタに格納された計算結果の演算データと計算終了桁が一致しないため、Xレジスタに格納されたi〜i+3桁目のデータのうち、i+1〜i+3桁目のデータがマスクされる(ステップST20)。つまり、レジスタ部360は、指定されたi桁目から1ワード毎、すなわち4桁毎に演算データを出力するため、計算桁数が4の整数倍とならない場合、終了ワードの演算データに不必要なデータを含むこととなる。そこで、不必要なデータをマスクすることにより、所望する桁数の計算結果を得ることができる。そして、レジスタXの不必要なデータがマスクされると(ステップST20)、終了判定回路350から命令終了信号「1」が出力されて、本桁指定計算処理が終了される。
次に、具体的な計算命令の種類、計算数値、計算桁数が設定された場合に演算装置300に実行される計算方法について説明する。まず、計算命令の種類として「平方根」、計算数値として「3」、計算開始桁として「56桁(i=56)」、計算終了桁として「15ワード(w=15)」が設定された場合について図14〜図17を参照して説明する。
図14〜図17中の左側の算術式は、筆算による平方根の計算方法を説明するための式であり、図14〜図17中の右側の計算手順は、演算装置300により実行される平方根の計算方法を説明するための手順である。ここで、平方根を筆算で求める場合、下記式(1)に基づいて、各位の値を求めるものとする。尚、この方法は、一般的に知られているため、詳細な説明は省略する。
図14左側に示すように、上記式(1)から、数(1)は、「3」を計算数値とした場合、平方して3を超えない値「1」として得る。数(2)は、数(1)と同じ値「1」として得る。また、数(3)は、数(1)の平方値「12」であり、これを計算数値「3」から減算した減算結果「2」を数(4)として得る。更に、数(2)に数(1)を加算した値「2」を数(5)として得て、次の計算に進む。
上述した筆算による計算を演算装置300で行う場合を説明する。図14右側に示すように、演算開始時においては、レジスタX=「3」,レジスタY=「0」,レジスタZ=「0」,レジスタA=「0」が設定されている。次いで、レジスタAには「A+1→1」(数(1)に対応)が設定され、レジスタYには「Y+1→1」(数(2)に対応)が設定され、レジスタZには「Y×1→1」(数(3)に対応)が設定される。続いて、レジスタIにi(計算開始桁)=62,レジスタWにw(計算終了)=15が設定され、演算が開始されると、レジスタXの出力データとレジスタZの出力データとが演算され、演算結果がレジスタXに「3−1→2」(数(4)に対応)として設定される。更に、レジスタYには「Y+1→2」(数(5)に対応)が設定される。
次に、図15左側に示すように、上記式(1)から、(20+x)×xが200以下となる最大のxを求め、x=7から数(6)を「1.7」として得る。数(7)は、(20+x)から「27」として得る。また、「27」と「7」とを乗算した値「189」を数(8)として得て、200から数(8)を減算し、減算結果「11」を数(9)として得る。更に、数(7)に「7」を加算した値「37」を数(10)として得て、次の計算に進む。
上述した筆算による計算を演算装置300で行う場合を説明する。図15右側に示すように、レジスタAには「A+0.7→1.7」(数(6)に対応)が設定され、レジスタYには「Y+0.7→2.7」(数(7)に対応)が設定され、レジスタZには「Y×0.7→1.89」(数(8)に対応)が設定される。続いて、レジスタIにi(計算開始桁)=60,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データとレジスタZの出力データとが演算され、演算結果がレジスタXに「2.00−1.89→0.11」(数(9)に対応)として設定される。更に、レジスタYには「Y+0.7→3.4」(数(10)に対応)が設定される。
次に、図16左側に示すように、上記式(1)から、(340+x)×xが1100以下となる最大のxを求め、x=3から数(11)を「1.73」として得る。数(12)は、(340+x)から「343」として得る。また、「343」と「3」とを乗算した値「1029」を数(13)として得て、1100から数(13)を減算して、減算結果「71」を数(14)として得る。更に、数(12)に「3」を加算した値「346」を数(5)として得て、次の計算に進む。
上述した筆算による計算を演算装置300で行う場合を説明する。図16右側に示すように、レジスタAには「A+0.03→1.73」(数(11)に対応)が設定され、レジスタYには「Y+0.03→3.43」(数(12)に対応)が設定され、レジスタZには「Y×0.03→0.1029」(数(13)に対応)が設定される。続いて、レジスタIにi(計算開始桁)=58,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データとレジスタZの出力データとが演算され、演算結果がレジスタXに「0.11−0.1029→0.0071」(数(14)に対応)として設定される。更に、レジスタYには「Y+0.03→3.46」(数(15)に対応)が設定される。
次に、図17左側に示すように、上記式(1)から、(3460+x)×xが7100以下となる最大のxを求め、x=2から数(16)を「1.732」として得る。数(17)は、(3460+x)から「3462」として得る。また、「3462」と「2」とを乗算した値「6924」を数(18)として得て、7100から数(18)を減算して、減算結果「176」を数(19)として得る。更に、数(17)に「2」を加算した値「3464」を数(20)として得て、計算を終了する。
上述した筆算による計算を演算装置300で行う場合を説明する。図17右側に示すように、レジスタAには「A+0.002→1.732」(数(16)に対応)が設定され、レジスタYには「Y+0.002→3.462」(数(17)に対応)が設定され、レジスタZには「Y×0.002→0.006924」(数(18)に対応)が設定される。続いて、レジスタIにi(計算開始桁)=56,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データと、レジスタZの出力データが演算され、演算結果がレジスタXに「0.007100−0.006924→0.000176」(数(19)に対応)として設定される。更に、レジスタYには「Y+0.002→3.464」(数(20)に対応)が設定される。
以上のように、計算命令の種類「平方根」、計算数値「3」、計算開始桁「56桁」、計算終了桁「15ワード」が命令として与えられた場合、演算結果として「1.732」が得られる。
次に、計算命令の種類として「立方根」、計算数値として「3」、計算開始桁として「56桁(i=56)」、計算終了桁として「15ワード(w=15)」が設定された場合の演算方法について図18〜図20を参照して説明する。尚、以下の説明において、演算装置300のレジスタ部370は、5個のレジスタX,Y,Z,A,Bを有し、各レジスタを適宜切り替えて使用する例として説明する。
図18〜図20中の左側の算術式は、筆算による立方根の演算方法を説明するための式であり、図18〜図20中の右側の計算手順は、演算装置300により実行される立方根の演算方法を説明するための手順である。ここで、立方根を筆算で求める場合、下記式(2)に基づいて、各位の値を求めるものとする。尚、この方法は、一般的に知られているため、詳細な説明は省略する。
図18左側に示すように、上記式(2)から、数(21)は、「3」を計算数値とした場合、3乗して3を超えない値「1」として得る。また、数(21)の立方値「13」を数(22)として得て、これを計算数値「3」からを減算した減算結果「2」を数(23)として得てる。また、数(24)は、数(21)の平方値「12」と「3」とを乗算した値「3」として得る。数(25)は、数(21)と「3」とを乗算した値「3」として得て、次の計算に進む。
上述した筆算による計算を演算装置300で行う場合を説明する。図18右側に示すように、演算開始時においては、レジスタX=「3」,レジスタY=「0」,レジスタZ=「0」,レジスタW=「0」,レジスタA=「0」が設定されている。次いで、レジスタAには「(A+1)→1」(数(21)に対応)が設定され、レジスタZには「13→1」(数(22)に対応)が設定される。続いて、レジスタIにi(計算開始桁)=62,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データとレジスタZの出力データとが演算され、演算結果がレジスタXに「3−1→2」(数(23)に対応)として設定される。更に、レジスタBには「3×1×1→3」(数(24)に対応)が設定され、レジスタYには「3×1→3」(数(25)に対応)が設定される。
次に、図19左側に示すように、上記式(2)から、300×xと30×x2とx3とが2000以下になる最大のxを求め、x=4から数(26)を「14」として得る。数(27)は、300×4から「1200」として得る。また、数(28)は、30×42から「480」として得て、数(29)は、43から「64」として得る。そして、2000から数(27)〜(29)を減算して、減算結果「256」を数(30)として得る。更に、「3」と数(26)の平方値「196」とを乗算した値「588」を数(31)として得て、「3」と数(26)を乗算した値「42」を数(32)として得て、次の計算に進む。
上述した筆算による計算を演算装置300で行う場合を説明する。図19右側に示すように、レジスタAには「A+0.4→1.4」(数(26)に対応)が設定され、レジスタZには「3×0.4→1.2」(数(27)に対応)が設定される。次いで、レジスタIにi(計算開始桁)=59,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「2.000−1.200→0.800」として設定される。続いて、レジスタZには「3×0.42→0.48」(数(28)に対応)が設定され、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「0.800−0.480→0.320」として設定される。
更に、レジスタZには「0.43→0.064」(数(29)に対応)が設定され、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「0.320−0.064→0.256」(数(30)に対応)として設定される。また、レジスタBには「3×1.42→5.88」(数(31)に対応)が設定され、レジスタYには「3×1.4→4.2」(数(32)に対応)が設定される。
次に、図20左側に示すように、上記式(2)から、58800×x3と、420×x2と、43とが256000以下になる最大のxを求め、x=4から数(33)を「144」として得る。数(34)は、58800×4から「235200」として得る。また、数(35)は、420×42から「6720」として得て、数(36)は、43から「64」として得る。そして、256000から数(34)〜(36)を減算して、減算結果「14016」を数(37)として得る。更に、「3」と数(33)の平方値「20736」を乗算した値「62208」を数(38)とし、「3」と数(33)を乗算した値「432」を数(38)として得て、計算を終了する。
上述した筆算による計算を演算装置300で行う場合を説明する。図20右側に示すように、レジスタAには「A+0.04→1.44」(数(33)に対応)が設定され、レジスタZには「5.88×0.04→0.2352」(数(34)に対応)が設定される。次いで、レジスタIにi(計算開始桁)=56,レジスタWにw(計算終了ワード)=15が設定され、演算が開始されると、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「0.25600−0.235200→0.020800」として設定される。続いて、レジスタZには「4.2×0.042→0.00672」(数(35)に対応)が設定され、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「0.020800−0.006720→0.014080」として設定される。
更に、レジスタZには「0.043→0.000064」(数(36)に対応)が設定され、レジスタXの出力データと、レジスタZの出力データとが演算され、演算結果がレジスタXに「0.014080320−0.000064→0.014016」(数(37)に対応)として設定される。また、レジスタBには「3×1.442→6.2208」(数(38)に対応)が設定され、レジスタYには「3×1.44→4.32」(数(39)に対応)が設定される。
以上のように、計算命令の種類「立方根」、計算数値「3」、計算開始桁「56桁」、計算終了桁「15ワード」が命令として与えられた場合、計算結果として「1.44」が得られる。
上述した通り、平方根や立方根の演算のように、多桁の計算を順次繰り返して実行することにより解が求められる演算においては、順次行われる多桁の計算は桁指定されて行われる1命令に対応している場合が多い。従って、このような1命令を演算装置300で桁指定して多桁の計算を行うことができるので、平方根や立方根を演算するプログラムの作成が容易になる。また、上述した平方根や立方根の演算において、順次行われる多桁の計算は、演算装置300における処理単位と一致しているため、プログラムで設定した桁数とぴったり一致させて計算処理を行うことができる。これにより、必要とされる精度で演算結果を得ることができる。
[第2の実施の形態の効果]
本第2の実施の形態によれば、演算装置300の可変パラメータ記憶部320に6ビットのレジスタIを備え、レジスタIに設定されるデータiにより、計算開始桁を1桁単位で設定可能とする。すなわち、計算開始桁を1桁単位で設定可能にし、計算開始桁から計算終了桁まで、桁数単位毎の小規模な十進計算に分けて行うことができ、効率の良い計算を行うことができる。また、ユーザ作成のプログラム等により予め計算命令で計算開始桁及び計算終了桁を設定しておくことで、プログラムROM310のプログラム命令311に設定されている計算桁数ちょうどの十進計算を行うことができ、効率の良い十進計算を容易に行うことができる。
また、6ビットのレジスタIにより計算開始桁の桁単位指定を可能としつつ、演算器370においては4桁毎に演算を行う構成であるため、第1の実施の形態の演算装置200と略同様の回路構成により第2の実施の形態を実現することができる。つまり、計算桁数に応じたプログラムの変更等が殆ど無く、簡単な回路変更で桁単位指定を可能とすることができ、装置の低コスト化、小型化を実現することができる。
[第2の実施の形態の変形例]
(1)計算桁数の単位
上述した第2の実施の形態では、1ワード(16ビット)を単位とし、10進表現4桁毎に演算を行うこととしたが、計算桁数の単位は4桁に限らない。また、指定された計算桁が4の倍数でない場合、計算終了ワードにおける不要データをマスクすることとしたが、計算開始桁を含む所定の第nワードから4桁毎に演算を開始し、その計算開始ワードにおける不要データをマスクする構成としてもよい。
(2)計算終了桁を可変
上述した第2の実施の形態では、計算終了桁はレジスタWにより、ワード単位で指定されることとしたが、可変パラメータ記憶部320に、6ビットのレジスタを更に設け、このレジスタにより計算終了桁を桁単位で指定可能としてもよい。
(3)指数部の計算桁数を可変
また、上述した第2の実施の形態では、第2ワードから第15ワードのいずれかを計算開始桁又は計算開始ワード或いは計算終了桁とし、仮数部の計算桁数を可変としたが、指数部の計算桁数を可変しても良いのは勿論である。
(4)レジスタのワード数
また、レジスタ部360のワード数を16として説明したが、これに限られないことは勿論である。また、仮数部を14ワード、指数部を2ワードとしたが、この割合は適宜変更可能であることも勿論である。
(5)レジスタの数
更に、本第2の実施の形態においては、レジスタ部360が有するレジスタの数を4又は5として説明を行ったが、レジスタの数はこれに限定されないことは勿論である。
[第3の実施の形態]
次に、第3の実施の形態について説明する。
本第3の実施の形態における演算システムは、演算器における演算処理をパイプライン処理することにより、演算速度を向上させるものである。以下では、上述した第1の実施の形態における演算システムS1の演算装置200にパイプライン処理を適用した場合について説明する。尚、第1の実施の形態と同一部分については、同一の符号を付して、図示及び詳細な説明を省略する。以下、本第3の実施の形態に特徴的な部分につき詳細に説明する。
図21は、演算器のパイプライン処理に係る要部の構成要素ブロックを示す図である。同図によれば、パイプライン処理に係る構成要素ブロックとして、演算器270,レジスタ部260,アドレスカウンタ240を備える。ここで、レジスタ部260は、アドレス指定及びデータ出力をそれぞれ2ポート有する2ポート方式のレジスタであるため、便宜的に第1ポートを有するレジスタをFレジスタ270aとし、第2ポートを有するレジスタをSレジスタ270bとして図示するが、実際の回路においては、物理的に1つのメモリにより構成されるものであっても良い。また、アドレスカウンタ240は、レジスタ部260の2つのポートにアドレスを出力するものであり、第1ポートにアドレスを出力するアドレスカウンタ240aと、第2ポートにアドレスを出力するアドレスカウンタ240bとを有して構成される。
Fレジスタ260aは、2ワード(32ビット)によるアクセスが可能であり、アドレスカウンタ240aにより指定されたアドレスから32ビット分のデータを読み出して、演算器270に出力する。また、演算器270から入力される2ワード(32ビット)のデータをアドレスカウンタ240aにより指定されたアドレスに書き込む。つまり、Fレジスタ260aは、32ビットデータの読み出しと、32ビットデータの書き込みを1クロック毎に交互に行う。
Sレジスタ260bは、1ワード(16ビット)のアクセスが可能であり、アドレスカウンタ240bにより指定されたアドレスから16ビット分のデータを読み出して演算器270に出力する。
演算器270は、乗算回路270a、ラッチ回路270b、ReadF/F270c、セレクタ270d、加算回路270e、WriteF/F270fを備えて構成される。乗算回路270aは、Sレジスタ260bから入力される16ビットのデータと、ラッチ回路270bから入力される4ビットのデータとを乗算して、乗算結果を16ビットのデータとして加算回路270eに出力する。ラッチ回路270bは、F/F(Flip Flop)により構成され、4ビットのデータを保持して乗算回路270aに出力する。
ReadF/F270cは、Fレジスタ260aから入力される16ビットのデータを保持して、セレクタ270dに出力する。セレクタ270dは、Fレジスタ260aから入力される16ビットのデータと、ReadF/F270cから入力される16ビットのデータとを1クロック毎に交互に選択して加算回路270eに出力する。
加算回路270eは、乗算回路270aから入力される16ビットのデータと、セレクタ270dから入力される16ビットのデータとを被演算子として加算して、加算結果を16ビットのデータとしてWriteF/F270f及びFレジスタ260aに出力する。また、加算回路270eは、加算結果の一部を4ビットのデータとしてラッチ回路270bに出力する。WriteF/F270fは、加算回路270eから出力される16ビットのデータを保持してFレジスタ260aに出力する。
次に、演算器270の動作について、図22に示すタイミングチャートに基づいて説明する。図22は、計算命令「X0〜5+Y0〜5」に基づいて行われる積和演算のタイミングチャートを示す図である。同図中、Fレジスタ260aに入出力されるデータをX,Sレジスタ260bから出力されるデータをY,ラッチ回路270bから出力されるデータをMとして以下説明する。
まず、1クロック目で、Fレジスタ260aからデータX0,X1が読み出され、データX0はセレクタ270dで選択されて、加算回路270eに出力される。データX1は、ReadF/F270cに保持される。また、Sレジスタ260bからデータY0が読み出され、データY0は乗算回路270aに出力される。
次に、2クロック目で、乗算回路270aと加算回路270eにより積和演算「X0+Y0×M」が行われる。また、ReadF/F270cからデータX1がセレクタ270dに出力され、セレクタ270dでデータX1が選択され、加算回路270eに出力される。更に、Sレジスタ260bからデータY1が読み出され、データY1は乗算回路270aに出力される。
続いて、3クロック目で、乗算回路270aと加算回路270eにより積和演算「X1+Y1×M」が行われる。また、先に演算された「X0+Y0×M」の演算結果は、WriteF/F270fに保持される。また、Fレジスタ260aからデータX2,X3が読み出され、データX2はセレクタ270dで選択されて、加算回路270eに出力される。データX3は、ReadF/F270cに保持される。更に、Sレジスタ260bからデータY2が読み出され、データY2は乗算回路270aに出力される。
そして、4クロック目で、WriteF/F270fで保持されている演算結果「X0+Y0×M」と、加算回路270eから出力される演算結果「X1+Y1×M」とがFレジスタ260aのX0,X1に書き込まれる。また、乗算回路270aと加算回路270eにより積和演算「X2+Y2×M」が行われ、ReadF/F270cからデータX3がセレクタ270dに出力され、セレクタ270dでデータX3が選択されて、加算回路270eに出力される。更に、Sレジスタ260bからデータY3が読み出され、データY3は乗算回路270aに出力される。
このように、計算命令「X0〜5+Y0〜5」に基づく積和演算は、1サイクルを4クロックで実行し、3クロック目以降、2クロックを次サイクルと重複させて順次処理を行うことにより、高速に演算処理を行うことができる。すなわち、上述した積和演算は、1サイクルで2つの演算(例えば、X0+Y0×M,X1+Y1×M)を実行するが、「X0〜5+Y0〜5」には6回分の演算が含まれるため、3サイクルを要し、総クロック数は3×4=12クロックとなる。しかし、パイプライン処理により、3サイクルを8クロックで実行することができ、4クロック分の演算時間を短縮することができる。
[第3の実施の形態の効果]
以上のように、本第3の実施の形態によれば、32ビットデータ(2ワード)のアクセスが可能なFレジスタの入力段と出力段に、一時記憶手段としてWriteF/F270f,ReadF/F270cを設け、一時記憶手段に書込データと読出データを16ビット分ずつそれぞれ一時的に保持させる。そして、演算器270において16ビットデータの計算を1クロック毎に行うと同時に、Fレジスタ260aにおいて32ビットデータの書き込み及び読み出しを1クロック毎に交互に行うことにより、パイプライン処理を実現する。これにより、演算装置の演算速度を高速化することができる。
[第3の実施の形態の変形例]
尚、上述した計算命令「X0〜5+Y0〜5」は一例であり、計算開始ワード及び計算終了ワードは適宜変更可能である。例えば、計算命令「X0〜n+Y0〜n」とした場合、nが奇数値であれば、クロック数=n+3で積和演算処理を行うことができる。また、本第3の実施の形態では、構成要素ブロックに乗算回路270aと、加算回路270eとを備え、積和演算を行う場合を例として説明したが、演算処理は積和演算処理に限るものではなく、その他種々の演算処理に適用可能なことは勿論である。
更に、第3の実施の形態は、上述した第1の実施の形態における演算装置200においてパイプライン処理する場合を例として説明したが、上述した第2の実施の形態における演算装置300においてパイプライン処理する構成であっても良い。この場合、計算開始桁を桁単位で指定して、パイプライン処理による演算を行うことができる。
[第4の実施の形態]
次に、第4の実施の形態について説明する。
図23は、本第4の実施の形態における演算システムS3の概略構成図である。同図によれば、演算システムS3は、PC100と、USB演算装置400とが、それぞれのUSB端子U2,U1を介して接続され、相互にデータ通信可能なように構成されている。
PC100は、キーボード等の入力装置から演算データの入力を行わせ、入力された演算データをUSB端子U2,U1を介して接続されたUSB演算装置400に送信する。尚、第4の実施の形態において、演算データとは、演算の種類(例えば、四則演算、初等関数、高等関数)、演算対象の数値データ(被演算数、演算数)、有効桁数(計算桁数)を含むデータをいう。また、PC100は、USB演算装置400から演算結果を受信すると、モニタ等の表示装置に演算結果を表示させる。
図24は、第4の実施の形態におけるUSB演算装置400の要部構成を示すブロック図である。同図によれば、USB演算装置400は、CPU401、フラッシュメモリ402、SRAM403、ROM404、通信制御部405、共有メモリ406等を備えて構成されている。
CPU401は、FPGA(Field Programmable Gate Array)等により構成され、ROM404に格納されるシステムプログラム、フラッシュメモリ402に格納される各種処理プログラムを読み出して、装置全体の制御や各種演算処理を行う。このCPU401は、上述した第1の実施の形態の図3に示す演算装置200や第2の実施の形態の図9に示す演算装置300に相当するものである。従って、このCPU401で、指定された計算開始桁又は計算開始ワードから計算終了ワードまでの演算処理を行うことにより、所望の計算桁数で各種演算を行うことができる。
フラッシュメモリ402は、電気的に書き換え可能な不揮発性メモリにより構成され、各種演算プログラムを記憶したり、PC100から転送されてきた演算プログラムを書き換え可能に記憶する。このフラッシュメモリ402に記憶されたプログラムは、例えば、上述した第1の実施の形態においてはプログラムROM210上に展開される等して用いられるものである。
SRAM403は、CPU401の作業領域等として用いられる記憶部であり、フラッシュメモリ402やROM404から読み出されたプログラム、CPU401の演算結果等が格納される。このSRAM403は、例えば、上述した第1の実施の形態の演算装置200や第2の実施の形態の演算装置300中のレジスタ部260,360に相当するものである。
ROM404は、装置本体の初期状態を設定するためのシステムプログラムや、USBで接続された他機器との間でデータ通信を行うための通信制御処理プログラム等を記憶する。
通信制御部405は、USB端子U1を備え、USB端子U1を介して接続された他機器との間で、USB規格に基づいたデータの通信を制御する。具体的に、通信制御部405は、PC100からデータを受信すると、シリアル又はパラレル変換して共有メモリ406に書き込み、CPU401により共有メモリ406に演算結果が書き込まれると、演算結果を読み出してPC100にデータを転送する通信制御処理を実行する。
共有メモリ406は、電気的に書き換え可能なメモリにより構成され、PC100から受信した演算データ(例えば、演算の種類、演算対象の数値データ、有効桁数)、CPU401から出力された演算結果等を記憶する。
次に、本第4の実施の形態における演算システムS3の動作について説明する。図25(a)は、PC100により実行される通信処理、図25(b)は、通信制御部405により実行される通信処理、図25(c)は、CPU401により実行される通信処理を示すフローチャートである。
まず、PC100により実行される通信処理について説明する。図25(a)に示すように、ユーザ操作に応じて、演算データが入力されると(ステップST31)、PC100は、USB端子U2を介して接続されたUSB演算装置400に、入力された演算データを送信する(ステップST32)。
続いて、PC100は、USB演算装置400からの演算結果の受信を待機し(ステップST33)、演算結果を受信すると(ステップST34)、受信した演算結果を表示部(図示せず)に表示させて(ステップST35)、本通信処理を終了する。
次に、USB演算装置400の通信制御部405により実行される通信処理について説明する。図25(b)に示すように、通信制御部405は、USB端子U1を介して接続されたPC100から演算データを受信すると(ステップST41)、受信した演算データを共有メモリ406に書き込む(ステップST42)。続いて、CPU401へのリセット信号の出力を解除して、CPU401を動作させる(ステップST43)。
そして、CPU401から入力されるビジー信号を監視し(ステップST44)、ビジー信号がオフになった場合(ステップST44;オフ)、リセット信号を出力してCPU401の動作を停止させる(ステップST45)。更に、共有メモリ406からCPU401により書き込まれた演算結果を読み出して(ステップST46)、演算結果をPC100に送信し(ステップST47)、本通信処理を終了する。
次に、USB演算装置400のCPU401により実行される通信処理について説明する。図25(c)に示すように、CPU401は、通信制御部405からリセット信号の出力が解除されたか否かを判別し(ステップST51)、リセット信号の出力が解除された場合(ステップST51;YES)、ビジー信号をオンにして通信制御部405に出力する(ステップST52)。続いて、共有メモリ406から演算データを読み出して(ステップST53)、演算処理を実行する(ステップST54)。
演算処理について説明する。図26は、CPU401により実行される演算処理を示すフローチャートである。図26に示すように、CPU401は、演算データに含まれる演算の種類に対応する演算プログラムをROMから読み出す(ステップST61)。そして、演算データに含まれる有効桁数に対応して演算プログラム中で計算命令の計算桁数と計算の種類を設定して、各計算命令を実行していき演算プログラムの計算を行う(ステップST62)
演算処理を終了すると、CPU401は、演算結果を共有メモリ406に書き込み(ステップST55)、ビジー信号をオフにして通信制御部405への出力を停止する(ステップST56)。そして、ステップST51に移行して上述した処理を繰り返して実行する。
[第4の実施の形態の効果]
以上のように、第4の実施の形態によれば、USB演算装置400と、PC100とをそれぞれのUSB端子U1,U2を介して接続し、PC100から演算データ(例えば、演算の種類、演算対象の数値データ、有効桁数)の入力を行わせ、USB演算装置400で演算データに基づいて所望の計算桁数にて演算を行い、演算結果をPC100に送信する。そして、演算結果をPC100の表示部に表示することで、任意の計算桁数で十進計算を行う機能を有しないPCにおいても所望の計算桁数で十進数計算を高速に行うことができる。
[第4の実施の形態の変形例]
本第4の実施の形態においては、USB規格によりデータ通信を行う場合を例として説明したが、通信方式はUSBに限らず、SCSI(Small Computer System Interface)や、IrDA(Infrared Data Association)規格に準じた無線通信等であってもよい。また、USB端末装置400と接続される電子機器は、PCに限らず、PDA、ノート型コンピュータ、携帯端末等であっても良い。
また、演算データとして、演算の種類、演算対象の数値データ、有効桁数を含む場合を例として説明したが、演算データはこれに限定されない。例えば、演算データに、計算開始桁又は計算開始ワードと計算終了桁とを含み、これらに基づいて計算桁数を取得する構成であっても良い。
或いは、図27に示す演算システムS4のように構成されるとしてもよい。すなわち、PC200は、演算データが入力されると、入力された演算データに基づいた演算プログラムを作成する。具体的には、プログラム中の各計算桁数が演算データに含まれる有効桁数に対応した桁数に設定する等して入力された演算の種類に応じた演算プログラムを作成する。そして、作成した演算プログラムをUSB演算装置500に送信する。この場合、USB演算装置500は、PC200から受信した演算プログラムに従って、各計算命令を実行することにより十進計算を行う。この構成によれば、メモリ用両党の点で、USB演算装置500より有利なPC200側で各種演算プログラムを作成することができるため、数多くの演算プログラムをUSB演算装置500に実行させることができる。