(57)【特許請求の範囲】
【請求項１】
メモリとの間でデータの入出力が可能な演算装置であって、
前記メモリから読み出されて転送されてくる変数を格納可能な入力変数格納用レジスタと、
前記入力変数格納用レジスタに格納されている変数を用いて所定の演算処理を実行する演算部と、
前記演算部での演算結果を格納するとともに、格納している内容を前記メモリに転送可能な出力変数格納用レジスタと、
前記出力変数格納用レジスタに格納されている内容を複写可能であるとともに、格納している内容を前記入力変数格納用レジスタに複写可能な変数退避用レジスタと、
を備えた演算装置。
【請求項２】
前記入力変数格納用レジスタは、前記メモリから読み出されて転送されてくる変数または前記変数退避用レジスタに格納されている内容を格納する第１入力変数格納用レジスタと、前記第１入力変数格納用レジスタに格納されている内容を複写可能な第２変数格納用レジスタとを備える、請求項１に記載の演算装置。
【請求項３】
外部に設けられたＣＰＵによって各部が制御され、所定の演算処理を実行するための演算コプロセッサである、請求項１または２に記載の演算装置。
【請求項４】
前記演算部における演算処理に必要な複数のコマンドを同時に設定可能なコマンドレジスタをさらに備え、前記演算部は、前記ＣＰＵによって前記コマンドレジスタに設定された複数のコマンドをその優先順位に基づいて順次処理する、請求項３に記載の演算装置。
【請求項５】
前記演算部は楕円曲線暗号のための演算処理が可能であり、前記コマンドレジスタは前記演算部における演算処理に必要な楕円曲線暗号のための複数のコマンドが同時に設定できるように構成されている、請求項４に記載の演算装置。
【請求項６】
前記コマンドレジスタ内の内容は、前記演算部によって実行されたコマンドの順にクリアされる、請求項４または５に記載の演算装置。
【請求項７】
少なくとも、前記演算部が前記コマンドレジスタに設定された複数のコマンドを全て実行したか否かのステータス情報を格納するステータスレジスタをさらに備える、請求項４〜６のいずれかに記載の演算装置。
【請求項８】
前記メモリとの間でダイレクト・メモリ・アクセス方式（ＤＭＡ）によりデータの転送を行う、請求項１〜７のいずれかに記載の演算装置。
【請求項９】
前記メモリとの間でデータの入出力を行うためにアクセスするメモリアドレスを生成するアドレスカウンタと、前記メモリとの間に設けられたデータバスのビット数毎のデータ転送回数を計数する転送回数カウンタと、前記メモリに対するメモリリード／ライト信号を生成するリード／ライト信号生成回路とを備え、
前記転送回数カウンタの計数するデータ転送回数が、前記メモリとの間で入出力を行うデータのビット数および前記メモリとの間に設けられたデータバスのビット数に基づいて特定される転送回数に達するまで、前記アドレスカウンタの生成するメモリアドレスを前記データバスのビット数毎にシフトさせながら前記メモリに対するアクセスを行い、前記メモリとのデータの転送を実行する、請求項８に記載の演算装置。
【請求項１０】
外部に設けられるＣＰＵによって各部が制御され、前記ＣＰＵがアクセスするタイミングに基づいて、前記メモリとのデータの入出力を行うためのメモリリード／ライト信号を生成する、請求項１〜７のいずれかに記載の演算装置。
【請求項１１】
前記メモリとの間でデータの入出力を行うためにアクセスするメモリアドレスを生成するアドレスカウンタと、前記メモリとの間に設けられたデータバスのビット数毎のデータ転送回数を計数する転送回数カウンタと、前記ＣＰＵがアクセスするタイミングに基づいて、前記メモリに対するメモリリード／ライト信号を生成するリード／ライト信号生成回路とを備え、
前記転送回数カウンタの計数するデータ転送回数が、前記メモリとの間で入出力を行うデータのビット数および前記メモリとの間に設けられたデータバスのビット数に基づいて特定される転送回数に達するまで、前記アドレスカウンタの生成するメモリアドレスを前記データバスのビット数毎にシフトさせながら前記メモリに対するアクセスを行い、前記メモリとのデータの転送を実行する、請求項１０に記載の演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算装置、特に、暗号装置やＩＣカードなどに搭載される演算装置に関する。
【０００２】
【従来の技術】
通常の演算装置は、所定の演算処理を実行する演算部と、演算部における演算に必要な変数が書き込まれる複数の入力変数格納用レジスタと、演算部における演算結果を格納する演算結果格納用レジスタとを備えている。演算処理を行う場合には、演算に必要な変数をメモリから入力変数格納用レジスタに書き込み、この入力変数格納用レジスタの内容を用いて演算部で演算処理を実行し、演算結果格納用レジスタに格納する。演算結果格納用レジスタの内容は適宜メモリに読み出しが行われる。
【０００３】
このとき、各入力変数格納用レジスタおよび演算結果格納用レジスタには、それぞれアドレスが割り当てられており、メモリからのデータの書き込みやメモリへのデータの読み出しを行うことが可能となっている。
たとえば、“Ａｎ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  Ｏｆ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｓｙｓｔｅｍｓ  ｏｖｅｒ  Ｆ２１５５，  ＩＥＥＥ  ＪＯＵＲＮＡＬ  ＳＥＬＥＣＴＥＤ  ＡＲＥＡＳ  ＩＮ  ＣＭＭＵＮＩＣＡＴＩＯＮＳ，  Ｖｏｌ  １１，  Ｎｏ．５，  ＪＵＮＥ  １９９３”に記載されている楕円曲線暗号用ＬＳＩの演算装置では、３つのレジスタＡ，Ｂ，Ｃで、演算およびオペレーションの命令（ＭＵＬＴＩ，  ＩＮＶＥＲＳＥ，  ＲＥＡＤ，  ＷＲＩＴＥ，ＲＯＴＡＴＥ，  ＣＯＰＹ，  ＳＷＡＰ，  ＣＬＥＡＲ，  ＳＥＴ，  ＡＤＤ，  ＡＣＣＵＭＵＬＡＴＥ）を実行している。各レジスタＡ，Ｂ，Ｃには、個々にアドレスが割り当てられており、メモリからの変数の書き込みおよびメモリへの読み出しが可能となっている。また、演算処理の高速化を図るために、レジスタＣの内容をレジスタＡにコピーするためのパス、レジスタＣの内容をレジスタＢにコピーするためのパスおよびレジスタＡとレジスタＢの内容を入れ替えるためのパスが設けられている。
【０００４】
このような演算装置では、２つのレジスタＡ，Ｂを入力変数格納用レジスタとし、レジスタＣを演算結果格納用レジスタとしている。
この場合、メモリと各レジスタＡ，Ｂ，Ｃとの間のデータのリード／ライトは、各レジスタに割り当てられたアドレスを指定して行われるため、アドレスデコード回路の規模が大きくなる。また、各レジスタ間に内容をコピーするためのパスや入れ替えのためのパスを設けているため、演算回路内の結線数が多くなり、回路規模が大きくなってしまう。さらに、各レジスタへのデータのアクセス（リード／ライト）の制御が複雑であり、制御回路の規模が大きくなるという問題を内包している。
【０００５】
このような問題点を解決するために、本願出願人は、特願平１０−２４４８３７号において、メモリから読み出した入力変数を格納する書き込み専用レジスタと、演算結果を格納するための読み出し専用レジスタとを備えた演算装置を提案している。
【０００６】
【発明が解決しようとする課題】
前述したような楕円曲線暗号処理を行う場合には、演算した結果をメモリに転送し、このメモリに転送した演算結果を入力変数としてさらに演算処理を実行することが繰り返し行われる。したがって、メモリと演算装置間における変数の転送が頻繁に行われることとなる。
【０００７】
特願平１０−２４４８３７号の演算装置では、メモリから読み出した変数を書き込むための書き込み用レジスタとメモリに変数を読み出すための読み出し用レジスタが決められているため、メモリとの間でデータを入出力する際の制御が簡単となる。しかしながら、楕円曲線暗号では百数十ビット以上の変数の演算が必要であり、メモリとの間に設けられたデータバスが３２ビットまたは６４ビットなどの太いバス幅である場合には、演算時間よりもデータ転送時間が小さいため充分に効力が発揮されるものの、ＣＰＵとして８ビットマイクロプロセッサなどの能力の小さいものが用いられており、かつこのＣＰＵを用いてデータの転送を行う場合には、演算時間に比してデータ転送時間が支配的になってしまう。したがって、演算の度にその演算結果をメモリに書き込み、次の演算処理に必要な入力変数をメモリから読み出す必要がある上述の装置では、データ転送時間が大きくなる結果、暗号化／復号化のための演算処理に莫大な時間を要することとなる。
【０００８】
また、従来の装置において、ＣＰＵは、入出力インターフェイス（Ｉ／Ｏ）や演算処理を実行する専用のコプロセッサなどに対して、単独のコマンドを発行するようにしか構成されていない。このため、ＣＰＵが複数のコマンドを同時に発行した場合には、エラーとして処理され、コマンドの処理が実行されない。
したがって、演算部における各処理毎にＣＰＵがコマンドを発行する必要があり、上述のような楕円曲線暗号処理に用いる場合には、ソフトウェアあるいはファームウェアが頻繁に介在することとなって、暗号化／復号化のための演算処理が莫大な時間を要することとなる。
【０００９】
本発明の目的は、ソフトウェアあるいはファームウェアの介在を削減し、高速処理を実現する演算装置の提供にある。
【００１０】
【課題を解決するための手段】
本発明に係る演算装置は、メモリとの間でデータの入出力が可能な演算装置であって、入力変数格納用レジスタと、演算部と、出力変数格納用レジスタと、変数退避用レジスタとを備えている。入力変数格納用レジスタは、メモリから読み出されて転送されてくる変数を格納可能となっている。演算部は、入力変数格納用レジスタに格納されている変数を用いて所定の演算処理を実行する。出力変数格納用レジスタは、演算部での演算結果を格納するとともに、格納している内容を前記メモリに転送可能となっている。変数退避用レジスタは、出力変数格納用レジスタに格納されている内容を複写可能であるとともに、格納している内容を入力変数格納用レジスタに複写可能となっている。
【００１１】
ここで、入力変数格納用レジスタが、メモリから読み出されて転送されてくる変数または変数退避用レジスタに格納されている内容を格納する第１入力変数格納用レジスタと、第１入力変数格納用レジスタに格納されている内容を複写可能な第２変数格納用レジスタとを備える構成とすることができる。
さらに、この演算装置は、外部に設けられたＣＰＵによって各部が制御され、所定の演算処理を実行するための演算コプロセッサであってもよい。
【００１２】
また、演算部における演算処理に必要な複数のコマンドを同時に設定可能なコマンドレジスタをさらに備え、演算部は、ＣＰＵによってコマンドレジスタに設定された複数のコマンドをその優先順位に基づいて順次処理するように構成できる。
さらに、演算部は楕円曲線暗号のための演算処理が可能であり、コマンドレジスタは演算部における演算処理に必要な楕円曲線暗号のための複数のコマンドが同時に設定できるように構成される、楕円曲線暗号コプロセッサとすることができる。
【００１３】
また、コマンドレジスタ内の内容が、演算部によって実行されたコマンドの順にクリアされるように構成できる。
さらに、演算部がコマンドレジスタに設定された複数のコマンドを全て実行したか否かのステータス情報を格納するステータスレジスタをさらに備える構成とすることができる。
【００１４】
また、メモリとの間でダイレクト・メモリ・アクセス方式（ＤＭＡ）によりデータの転送を行う構成とすることができる。
この場合、メモリとの間でデータの入出力を行うためにアクセスするメモリアドレスを生成するアドレスカウンタと、メモリとの間に設けられたデータバスのビット数毎のデータ転送回数を計数する転送回数カウンタと、メモリに対するメモリリード／ライト信号を生成するリード／ライト信号生成回路とを備える構成とし、転送回数カウンタの計数するデータ転送回数が、メモリとの間で入出力を行うデータのビット数およびメモリとの間に設けられたデータバスのビット数に基づいて特定される転送回数に達するまで、アドレスカウンタの生成するメモリアドレスをデータバスのビット数毎にシフトさせながらメモリに対するアクセスを行い、メモリとのデータの転送を実行するように構成することが好ましい。
【００１５】
また、外部に設けられるＣＰＵによって各部が制御され、ＣＰＵがアクセスするタイミングに基づいて、メモリとのデータの入出力を行うためのメモリリード／ライト信号を生成するように構成することも可能である。
この場合には、メモリとの間でデータの入出力を行うためにアクセスするメモリアドレスを生成するアドレスカウンタと、メモリとの間に設けられたデータバスのビット数毎のデータ転送回数を計数する転送回数カウンタと、ＣＰＵがアクセスするタイミングに基づいて、メモリに対するメモリリード／ライト信号を生成するリード／ライト信号生成回路とを備える構成とし、転送回数カウンタの計数するデータ転送回数が、メモリとの間で入出力を行うデータのビット数およびメモリとの間に設けられたデータバスのビット数に基づいて特定される転送回数に達するまで、アドレスカウンタの生成するメモリアドレスをデータバスのビット数毎にシフトさせながら前記メモリに対するアクセスを行い、メモリとのデータの転送を実行するように構成することが好ましい。
【００１６】
【発明の実施の形態】
本発明の１実施形態が採用される演算装置について図に基づいて説明する。
〔全体構成〕
図１において、コプロセッサ５は、所定の演算処理を実行するための演算部４を備えている。
【００１７】
コプロセッサ５は、各部の動作を制御しているＣＰＵ６とバスＢＵＳを介して接続されており、メモリ７との間でデータの入出力が可能となっている。
演算部４は、第１入力変数格納用レジスタ（Ｍ１）８，第２入力変数格納用レジスタ（Ｍ２）９を備えている。第１入力変数格納用レジスタ８は、バスＢＵＳと接続されており、メモリ７から読み出された変数の書き込みが行われる。第１入力変数格納用レジスタ８は、第２入力変数格納用レジスタ９と接続されており、内容を第２入力変数格納用レジスタ９にコピーすることが可能となっている。
【００１８】
第１入力変数格納用レジスタ８および第２入力変数格納用レジスタ９は、それぞれ演算回路１０に接続されている。演算回路１０は、論理演算子で構成されており、例えば、複数の排他的論理和ゲート（ＸＯＲ）で構成することができる。
演算回路１０は演算結果を格納するための出力変数格納用レジスタ（ＭＯ）１１に接続されている。出力変数格納用レジスタ１１はバスＢＵＳを介してメモリ７と接続されており、その内容をメモリ７に読み出すことが可能となっている。
【００１９】
出力変数格納レジスタ１１は、変数退避用レジスタ（Ｍ３）１２に接続されており、内容を変数退避用レジスタ１２にコピーすることが可能となっている。
また、出力変数格納用レジスタ１１および変数退避用レジスタ１２は、第１入力変数格納用レジスタ８と接続されており、それぞれその内容を第１入力変数格納用レジスタ８にコピーすることが可能となっている。
【００２０】
コプロセッサ５は、ＣＰＵ６によって設定される複数のコマンドをその優先順位にしたがって演算部４に処理させる制御部３を備えている。この制御部３には、ＣＰＵ６によって複数のコマンドが設定されるコマンドレジスタ１と、コマンドレジスタ１に設定されたコマンドの処理が全て終了したか否かのステータス情報を格納するステータスレジスタ２とを備えている。
【００２１】
〔全体的な動作〕
処理に必要なデータや演算に必要なデータ（変数）がメモリ７に格納されており、このメモリ７に格納されている変数を用いて所定の演算処理を行う。ＣＰＵ６は、まず、必要なデータをメモリ７から読み出して、コプロセッサ５内の第１入力変数格納用レジスタ８に書き込む。次に、ＣＰＵ６は、演算処理に必要な複数のコマンドをコマンドレジスタ１に設定する。
【００２２】
制御部３は、コマンドレジスタ１に設定された複数のコマンドを、予め決められた優先順位にしたがって、演算部４で順次処理を実行するように制御する。コマンドレジスタ１に設定された全てのコマンドに対する処理が終了した場合には、制御部３はステータスレジスタ２の内容を処理終了を示す値とし、ＣＰＵ６がこれを知り得る状態とする。演算処理の結果は、出力変数格納用レジスタ１１に格納されており、ＣＰＵ６はこれを読み出してメモリ７に書き込む。
【００２３】
続いて、ＣＰＵ６は次の演算処理に必要なデータをメモリ７から読み出して、コプロセッサ５の第１入力変数格納用レジスタ８に書き込むとともに、次の処理に必要なコマンドを発行してコマンドレジスタ１に設定し、以下、同様の動作を繰り返す。
このようにした場合、コプロセッサ５とメモリ７との間にデータ転送処理が発生するまでは、コプロセッサ５内での処理を連続して行うこととなり、この間にソフトウェアあるいはファームウェアが介在することがなく、高速処理が実現できる。
【００２４】
〔演算部の動作〕
メモリ７に格納されている変数Ａ，Ｂを用いて演算処理を実行する場合を考える。ＣＰＵ６は、演算に必要な変数Ａをメモリ７から読み出して、第１入力変数格納用レジスタ８に書き込む。書き込みが終了すれば、第１入力変数格納用レジスタ８から第２入力変数格納用レジスタ９に変数Ａをコピーする。
【００２５】
次に、変数Ｂをメモリ７から読み出して、第１入力変数格納用レジスタ８に書き込む。この状態で、第２入力変数格納用レジスタ９に格納された変数Ａと第１入力変数格納用レジスタ８に格納された変数Ｂを用いて演算回路１０における演算処理を実行する。演算回路１０による演算結果Ｃは、出力変数格納用レジスタ１１に格納される。
【００２６】
演算結果Ｃを次の演算処理に使用する場合には、出力変数格納用レジスタ１１の内容を第１入力変数格納用レジスタ８にコピーする。それ以外の場合には、出力変数格納用レジスタ１１に格納されている演算結果Ｃを、メモリ７に転送するか、あるいは変数退避用レジスタ１２にコピーする。変数退避用レジスタ１２に格納されている変数を使用する場合には、この変数退避用レジスタ１２の内容を第１入力変数格納用レジスタ８にコピーする。
【００２７】
２つの変数が同じ値の演算（Ａ＋Ａ，Ａ×Ａ）の場合には、メモリ７から変数Ａを読み出して第１入力変数格納用レジスタ８に書き込み、第１入力変数格納用レジスタ８の内容を第２入力変数格納用レジスタ９にコピーして、演算を開始すればよい。
メモリ７から変数を読み出して第１入力変数格納用レジスタ８に書き込みを行ったり、出力変数格納用レジスタ１１から演算結果を読み出してメモり７に書き込みを行ったり、第１入力変数格納用レジスタ８から第２入力変数格納用レジスタ９へのコピー、出力変数格納用レジスタ１１から第１入力変数格納用レジスタ８へのコピー、出力変数格納用レジスタ１１から変数退避用レジスタ１２へのコピーおよび変数退避用レジスタ１２から第１入力変数格納用レジスタ１１へのコピーは、ＣＰＵ６がコマンドを発行して行うものであり、コマンドの優先順位と処理手順を考慮して、ソフトウェアあるいはファームウェアが最適なプログラムで実現している。
【００２８】
たとえば、１６３ビットの変数データをメモリ７と演算部４との間で転送する場合に、ＣＰＵ６が８ビットマイクロプロセッサであるとき、約２２０サイクル程度（実際にはアドレッシングを行う必要があるため、これ以上となる）要するが、演算部４内において各レジスタ間でデータをコピーする場合には１サイクルで済むこととなり、出力変数格納用レジスタ１１または変数退避用レジスタ１２の内容を第１入力変数格納用レジスタ８にコピーして使用することで、高速演算が可能となる。
【００２９】
〔実施例〕
具体的な実施例として、有限体ＧＦ（２ｍ）上の楕円曲線暗号コプロセッサについて考える。この場合、図１に示すコプロセッサ５の演算部４は、有限体ＧＦ（２ｍ）上の２つの元Ａ，Ｂに対して、ｍ次の既約多項式Ｆによる乗算剰余Ａ×Ｂ  ｍｏｄＦを演算する回路である。この回路では、ｍビットの変数Ａ＝（ａｍ−１，ａｍ−２，・・・ａ０）、変数Ｂ＝（ｂｍ−１，ｂｍ−２，・・・ｂ０）に対してｍサイクルで乗算剰余演算を完了する。
【００３０】
ここで対象とする楕円曲線は、以下の式で表されるｎｏｎ−ｓｕｐｅｒｓｉｎｇｕｌａｒ楕円曲線である。
ｙ２＋ｘｙ＝ｘ３＋ａｘ２＋ｂ      ・・・・（１）
（但し、ａ，ｂ∈ＧＦ（２ｍ）、ｂ≠０）
点の演算処理は、２次元アファイン平面上の点として表される式（１）上の点を３次元射影平面に変換して点の加算および２倍算を行い、最後に逆変換を行って、２次元の座標値を得る。この３次元座標系として、ＩＥＥＥ  Ｐ１３６３／Ｄ８準拠のヤコビヤン座標系を用いる。
【００３１】
点の２倍算および加算における処理手順を表１、表２に示す。また、逆変換処理における処理手順（途中の過程を一部省略している）を表３に示す。表中のオペレーションは、図１の演算部４のオペレーションを示し、ＰＭＵＬは乗算剰余を、ＰＡＤＤは加算（ＸＯＲ）を意味している。また、Ｔはコプロセッサ５とメモリ７間のデータ転送に要するサイクル数を示している。さらに、Ｍ３欄において、左欄はコプロセッサ５外部にＭ３を設けた場合（メモリ７の一部に演算結果を格納する場合）の必要サイクル数を示し、右欄はコプロセッサ５内部にＭ３を設けた場合（変数退避用レジスタ１２に演算結果を退避させる場合）の必要サイクル数を示している。
【００３２】
【表１】
0003553815.tif 000002
【００３３】
【表２】
0003553815.tif 000003
【００３４】
【表３】
0003553815.tif 000004
各表において、変数退避用レジスタ１２が関わるデータ移動の部分については、太枠で示している。この太枠部分においては、コプロセッサ５内部にある変数退避用レジスタ１２を用いた場合に、データの移動に要するサイクル数が（Ｔ−１）だけ減少することがわかる。
【００３５】
演算処理に用いる変数のビット数をｍ＝１６３ビットとし、コプロセッサ５とメモリ７間のデータ転送に要するサイクル数をＴ＝２２０サイクルとすると、楕円曲線暗号のスカラー倍算処理の平均サイクル数は、
コプロセッサ５外部にＭ３を設けた場合には、１８４５３４６サイクル
コプロセッサ５内部にＭ３を設けた場合には、１４８７９３８サイクル
となる。
【００３６】
したがって、このようなコプロセッサ５内部に設けた変数退避用レジスタ１２を用いた場合には、演算処理を約２０％高速化するすることができる。各処理手順において、演算結果であるＸ０，Ｙ０，Ｚ０などに対応する変数退避用レジスタをそれぞれ設ければ、より演算処理の高速化を図ることが可能となる。
〔コマンドレジスタとステータスレジスタ〕
コマンドレジスタ１の１実施例を図２に示す。ここでは、コマンドレジスタ１は８ビットで構成されている。各ビットに対応するコマンドは、最上位ビットから順に、第１入力変数格納用レジスタ８から第２入力変数格納用レジスタ９へのコピー（Ｍ１Ｍ２  ２ｎｄ）、出力変数格納用レジスタ１１から第１入力変数格納用レジスタ８へのコピー（ＭＯＭ１）、第１入力変数格納用レジスタ８から第２入力変数格納用レジスタ９へのコピー（Ｍ１Ｍ２  １ｓｔ）、変数退避用レジスタ１２から第１入力変数格納用レジスタ８へのコピー（Ｍ３Ｍ１）、出力変数格納用レジスタ１１から変数退避用レジスタ１２へのコピー（ＭＯＭ３）であり、下位３ビットはメモリ７との間のデータ入出力、第１入力変数格納用レジスタ８からの既約多項式のコピーおよび乗算、加算の演算コマンド（ＷＲＩＴＥ／ＲＥＡＤ／Ｍ１＃Ｆ／ＰＭＵＬ／ＰＡＤＤ）となっている。
【００３７】
各コマンドの優先順位は、
0003553815.tif 000005
となっている。
【００３８】
各コマンドの対応表を表４に示す。
【００３９】
【表４】
0003553815.tif 000006
必要なコマンドに対応してコード化したデータを、このようなコマンドレジスタに格納することにより、制御部３が各コマンドの優先順位に基づいて演算部４での演算を実行させるように構成できる。このとき、コマンドレジスタ１に同時に設定できるコマンド数は１〜６である。
【００４０】
ステータスレジスタ２の１実施例を図３に示す。ここでは、ステータスレジスタ２は８ビットで構成されており、最下位から４ビット目が入出力可能を示すビット（ＩＯＲＤＹ）に設定されており、最下位ビットがコマンド完了を示すビット（ＣＯＭＰＬＥＴＥ）に設定されている。
ＩＯＲＤＹのビットが１である場合に、第１入力変数格納用レジスタ８への変数の書き込みが可能であり、出力変数格納用レジスタ１１からの変数の読み出しが可能である。ＷＲＩＴＥまたはＲＥＡＤの転送コマンドが実行されたとき、ＩＯＲＤＹビットが１となり、データのビット数とバスＢＵＳのうちデータバスのビット数に応じてその転送回数分のリード／ライトが完了したときに、ＩＯＲＤＹは０となる。
【００４１】
ステータスレジスタ２のＣＯＭＰＬＥＴＥビットは、コマンドレジスタ１にコマンドが書き込まれたときその内容が０となり、コマンドレジスタ１に設定されたコマンドを全て完了した際にその内容が１となるように構成されている。
複数のコマンドが同時に設定されるコマンドレジスタ１を用いて演算処理を行う場合の動作を図４のフローチャートに基づいて説明する。
【００４２】
ステップＳ１では、ＣＰＵ６からのコマンド発行があったか否かを判別する。複数のコマンドに対応してコード化されたデータがコマンドレジスタ１に格納されたとき、コマンド発行があったと判断してステップＳ２に移行する。ステップＳ２では、ステータスレジスタ２のＣＯＭＰＬＥＴＥビットを０に設定する。
ステップＳ３では、コマンドレジスタ１に設定された複数のコマンドのうち、最も優先度の高いコマンドを演算部４に実行させる。ステップＳ４では、コマンドの処理が終了したか否かを判別する。演算部４におけるコマンドの処理が終了したと判断した場合には、ステップＳ５に移行する。ステップＳ５では、終了したコマンドに対応するコマンドレジスタ１のビットをクリアする。
【００４３】
ステップＳ６では、コマンドレジスタ１の各ビットが全て０であるか否かを判別する。コマンドレジスタ１の各ビットが全て０であると判断した場合には、ステップＳ７に移行し、１つでも１であるビットが残っている場合にはステップＳ３に移行する。
ステップＳ７では、ステータスレジスタ２のＣＯＭＰＬＥＴＥビットを１に設定する。この後ステップＳ１に移行する。
【００４４】
ＣＰＵ６がコプロセッサ５にコマンドの発行を行う際には、ステータスレジスタ２の内容をモニタし、ＣＯＭＰＬＥＴＥビットが１である場合のみコマンドレジスタ１へのコマンドの書き込みを行う。ＣＯＭＰＬＥＴＥビットが０である場合には、ＣＰＵ６はコマンド発行を行わない。このことにより、コプロセッサ５の演算部４での処理が完了するまで、コマンドレジスタ１の内容がＣＰＵ６によって書き替わることがなく、誤動作を防止することができる。
【００４５】
ＣＰＵ６が発行するコマンドに優先順位を付けていない場合には、ＣＰＵ６は各コマンド毎に毎回コプロセッサ５のコマンドレジスタ１にアクセスを行ってコマンドの設定を行う必要がある。上述のように優先順位を設定した場合と、優先順位を設定せずに毎回アクセスを行う場合とを比較すると、ＣＰＵ６からコマンドレジスタ１へのアクセス回数は表５に示すようになる。
【００４６】
【表５】
0003553815.tif 000007
２倍算処理、加算処理、逆変換処理のいずれの場合も、複数のコマンドに優先順位を設け、ＣＰＵ６からコプロセッサ５に発行するコマンドを同時に複数設定できるようにした場合の方が、コマンドレジスタ１へのアクセス回数が格段に減少させることができる。ＣＰＵ６がコマンドレジスタ１にアクセスする場合、ソフトウェアあるいはファームウェアが介在するが、このコマンドレジスタ１へのアクセス回数を減少させることによって、ソフトウェアあるいはファームウェアが介在する回数を減少させ、処理の高速化を図ることが可能となる。
【００４７】
〔ＤＭＡ転送〕
本発明の他の実施形態として、コプロセッサ５がダイレクト・メモリ・アクセス（ＤＭＡ）処理を行って、メモリ７とのデータの入出力を行う例を示す。この他の実施形態が採用される演算装置の概略構成を図５に示す。
バスＢＵＳを介してＣＰＵ６およびメモリ７に接続されるコプロセッサ５内の演算部４の構成は、前述した実施形態と同様であり、ここでは説明を省略する。
【００４８】
制御部３内には、前述したコマンドレジスタ１、ステータスレジスタ２（いずれも図５には図示せず）とは別に、メモリ７内の変数をリード／ライトするアドレスのベースアドレスが格納されるアドレス設定レジスタ１４が設けられている。また、メモリ７との間で転送を行う変数のビット数と、バスＢＵＳのうちデータバスのビット数に応じて、この変数を転送するために要する転送回数が設定される転送回数カウンタ１６が設けられている。この転送回数カウンタ１６は、バスＢＵＳのうちのデータバスのビット数毎に行われる転送処理が１回行われるとその都度デクリメントされ、０になると転送処理が完了したと判断される。
【００４９】
また、制御部３には、転送回数カウンタ１６と同期するアドレスカウンタ１３が設けられている。アドレスカウンタ１３は、変数の転送が開始されると、アドレス設定レジスタ１４に格納されているベースアドレスを出力し、バスＢＵＳのうちのデータバスのビット数毎に行われる転送処理が１回行われるとその都度データバスのビット数毎にインクリメントされる。
【００５０】
さらに、制御部３には、リード／ライト信号を生成するリード／ライト信号生成部１５が設けられている。このリード／ライト信号生成部１５は、転送回数カウンタ１６のカウントに基づいて、各転送処理毎にメモリリード信号（ＯＥ）またはメモリライト信号（ＷＥ）を出力する。
〈メモリからコプロセッサへのデータ転送〉
メモリ７に格納されている変数を使って演算処理を行う際に、メモリ７からその変数を読み出す場合について説明する。
【００５１】
まず、ＣＰＵ６は、メモリ７内において演算に用いられる変数が格納されているアドレスのベースアドレスを、アドレス設定レジスタ１４に設定する。変数のビット数とバスＢＵＳのうちのデータバスのビット数とに基づいて、この変数を入力変数格納用レジスタ８に格納するために要する転送回数を転送回数カウンタ１６に設定する。
【００５２】
１回の転送が終了する毎に、転送回数カウンタ１６の内容をデクリメントし、アドレスカウンタ１３のメモリアドレスをインクリメントしながら転送を実行する。このとき、リード／ライト信号生成部１５によりメモリリード信号（ＯＥ）を出力して、メモリ７からデータを読み出し、第１入力変数格納用レジスタ８にデータを書き込む。この動作を転送カウンタ１６の内容が０になるまで繰り返すことで、メモリ７内の変数を第１入力変数格納用レジスタ８に書き込むことができる。
【００５３】
〈コプロセッサからメモリへのデータ転送〉
演算部４における演算結果をメモリ７に格納する場合について説明する。
ＣＰＵ６は、メモリ７内における演算結果を格納するアドレスのベースアドレスをアドレス設定レジスタ１４に設定する。変数のビット数とバスＢＵＳのうちのデータバスのビット数とに基づいて、この変数をメモリ７に格納するために要する転送回数を転送回数カウンタ１６に設定する。
【００５４】
１回の転送が終了する毎に、転送回数カウンタ１６の内容をデクリメントし、アドレスカウンタ１３のメモリアドレスをインクリメントしながら転送を実行する。このとき、リード／ライト信号生成部１５によりメモリライト信号（ＷＥ）を出力して、出力変数格納用レジスタ１１からデータを読み出し、メモリ７にデータを送出する。この動作を転送カウンタ１６の内容が０になるまで繰り返すことで、出力変数格納用レジスタ１１から読み出したデータをメモリ７に書き込むことができる。
【００５５】
このようにした場合、ＤＭＡ転送によりメモリ７とコプロセッサ５間のデータ転送を行っているため、ソフトウェアあるいはファームウェアの介在を削減でき、処理を高速化することが可能となる。
〔疑似ＤＭＡ転送〕
前述したＤＭＡ転送において、ＣＰＵ６がコプロセッサ５にアクセスするタイミングに基づいて、リード／ライト信号を生成するように構成することも可能である。この場合、図５に示すものと同じ構成で、リード／ライト信号生成部１５が、ＣＰＵ６のアクセスタイミングに基づいてメモリリード信号（ＯＥ）あるいはメモリライト信号（ＷＥ）を生成するように構成する。
【００５６】
このようにした場合、データ転送を完全ハードウェアで行うわけではなく、ソフトウェアが介在することとなるが、ＣＰＵ６の制御によりメモリ７とコプロセッサ５との間のデータの転送を行うよりも高速化を図ることができる。なお、この場合、コプロセッサ５がバスを占有することがない。
【００５７】
【発明の効果】
本発明によれば、ソフトウェアあるいはファームウェアの介在を削減し、演算の高速処理を実現することができる。
【図面の簡単な説明】
【図１】本発明の１実施形態の回路ブロック図。
【図２】コマンドレジスタの説明図。
【図３】ステータスレジスタの説明図。
【図４】１実施形態の制御フローチャート。
【図５】他の実施形態の回路ブロック図。
【符号の説明】
１  コマンドレジスタ
２  ステータスレジスタ
３  制御部
４  演算部
５  コプロセッサ
６  ＣＰＵ
７  メモリ
８  第１入力変数格納用レジスタ
９  第２入力変数格納用レジスタ
１０  演算回路
１１  出力変数格納用レジスタ
１２  変数退避用レジスタ
１３  アドレスカウンタ
１４  アドレス設定レジスタ
１５  リードライト信号生成部
１６  転送回数カウンタ
【図１】
0003553815.tif 000008
【図２】
0003553815.tif 000009
【図３】
0003553815.tif 000010
【図４】
0003553815.tif 000011
【図５】
0003553815.tif 000012