(57)【要約】【課題】個々にプロセッサを作り替えたり、プロセッサの外部に大規模な回路を搭載したりしなくても、ユーザが定義する様々な命令を高速に処理することが可能なプロセッサを提供すること。【解決手段】本発明によるプロセッサは、命令セット内の命令は演算器２０４で、それ以外のカスタム命令は第２演算器２０５でそれぞれ実行する。第２演算器２０５は具体的には、複数のＡＮＤ回路、ＯＲ回路、加算器、セレクタ、マルチプレクサなどから構成され、どの命令が入力したときにどの回路とどの回路とを組み合わせればよいかは、コンフィギュレーションメモリ２０６に構成情報として保持されている。１つのカスタム命令に１つの構成情報が対応しており、当該情報により決定される最適な回路構成の第２演算器２０５で当該命令を実行することで、演算器２０４で実行する場合よりも処理の高速化が図れる。【選択図】　　　図２
2004062821.tif 000002
【特許請求の範囲】
【請求項１】
与えられた命令が所定の命令セット内の命令であるか否かを判定する判定手段と、
前記判定手段により前記命令が所定の命令セット内の命令であると判定された場合に、当該命令を実行する第１の演算手段と、
前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令を実行するための回路構成を決定する構成情報を出力する構成情報出力手段と、
前記構成情報出力手段から出力された構成情報により決定される回路構成で前記命令を実行する第２の演算手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
前記第２の演算手段を複数備えたことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記構成情報出力手段は、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする請求項１または請求項２に記載の情報処理装置。
【請求項４】
前記構成情報出力手段は、前記命令で指定されたアドレスおよび／または所定のレジスタに保持されたアドレスにもとづいて、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記構成情報は書き換え可能なメモリに保持されることを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記構成情報は前記メモリのほか、前記命令内の所定のフィールドあるいは所定のレジスタにも保持されることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記所定のレジスタは、前記第２の演算手段により前記命令が実行される都度、前記メモリに保持された構成情報にもとづいて値を更新することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリに前記構成情報をロードする命令を複数発行する命令発行手段と、を備え、
前記第１の演算手段は、前記命令発行手段により発行された命令を実行することを特徴とする請求項５〜７のいずれか一つに記載の情報処理装置。
【請求項９】
さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリが割り当てられた所定のレジスタに前記構成情報を転送する命令を発行する命令発行手段と、を備え、
前記第１の演算手段は、前記命令発行手段により発行された命令を実行することを特徴とする請求項５〜７のいずれか一つに記載の情報処理装置。
【請求項１０】
さらに、前記構成情報出力手段により出力された構成情報中所定のビット位置にある情報のみを出力する選択手段を備えたことを特徴とする請求項１〜９のいずれか一つに記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、パーソナルコンピュータや各種の通信機器、ＡＶ機器、あるいは家電などの情報処理装置、より詳細には当該装置に搭載されるプロセッサに関する。
【０００２】
【従来の技術】
半導体の微細加工技術の進展とともに、ＬＳＩチップに搭載される回路規模が大きくなり、プロセッサ（ＣＰＵ）とともにユーザ独自の回路を１チップに集積したシステムＬＳＩの開発が従来から行われている。
【０００３】
そして、ユーザのアプリケーションに適したシステムＬＳＩを開発する方式として、（１）プロセッサとは独立にアプリケーションに応じた回路ブロックを搭載する方法と、（２）プロセッサ自体をアプリケーションに応じて修正する方法とがある。
【０００４】
このうち、（１）はごく一般のシステムＬＳＩの実現方法である。（２）はＴｅｎｓｉｌｃａ社やＡＲＣ社のコンフィギャラブルプロセッサに見られる手法であり、ユーザのアプリケーションに適した専用命令（カスタム命令）を命令セットに追加するとともに、当該命令を実行するための演算器をプロセッサに追加するというものである。
【０００５】
【発明が解決しようとする課題】
しかしながらプロセスの微細化に伴って、マスク代などのプロセスコストは非常に高額となる。そしてその費用にペイするのは、非常に大量に生産される一部のシステムＬＳＩに限られてしまい、そうでないものはプロセス費用がチップ単価に大きく跳ね返る結果、経済的に引き合わないものになってしまう。すなわち、上記（１）（２）は大量生産されるシステムＬＳＩについては有効であるが、少量しか必要とされないシステムＬＳＩにはコスト的に適用できない。
【０００６】
上記に対し近年になって、（３）プロセッサとＦＰＧＡとをチップ上に混載する方法が現れ、実際に製品化されてきている。この手法によると、ユーザのアプリケーションに応じた様々な回路をＦＰＧＡブロックで実現できるが、ＦＰＧＡの面積効率は通常の回路に対して１／１０〜１／２０と低く、やはりコスト高になってしまうという問題点があった。さらにＦＰＧＡ部分は動作周波数が高くできないので、性能を引き上げるためには並列化する必要があり、これに伴って回路規模が大きくなってしまうという問題点があった。
【０００７】
この発明は上記従来技術による問題を解決するため、個々に回路を作り替えたり大規模な回路を搭載したりしなくても、ユーザが定義する様々な命令を高速に処理することが可能な情報処理装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上述した課題を解決し、目的を達成するため、この発明にかかる情報処理装置は与えられた命令が所定の命令セット内の命令であるか否かを判定し、そうであると判定された場合には第１演算器（従来型の演算器）により当該命令を実行するとともに、そうでないと判定された場合には、第２演算器（本発明による演算器）に当該命令を実行するための回路構成を決定する構成情報を出力し、当該回路構成となった第２演算器により当該命令を実行することを特徴とする。
【０００９】
また、この発明にかかる情報処理装置は、第２演算器を複数備えたことを特徴とする。
【００１０】
また、この発明にかかる情報処理装置は、前記命令が所定の命令セット内の命令でないと判定された場合に、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする。
【００１１】
また、この発明にかかる情報処理装置は、前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令で指定されたアドレスおよび／または所定のレジスタに保持されたアドレスにもとづいて、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする。
【００１２】
また、この発明にかかる情報処理装置は、前記構成情報が書き換え可能なメモリに保持されることを特徴とする。
【００１３】
また、この発明にかかる情報処理装置は、前記構成情報がメモリのほか命令内の所定のフィールドあるいは所定のレジスタにも保持されることを特徴とする。
【００１４】
また、この発明にかかる情報処理装置は、前記第２の演算器により命令が実行される都度、前記メモリに保持された構成情報にもとづいて、前記レジスタが値を更新することを特徴とする。
【００１５】
また、この発明にかかる情報処理装置は、前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定し、そうであった場合には前記メモリに前記構成情報をロードする命令を複数発行して、第１演算器で各々の命令を実行することを特徴とする。
【００１６】
また、この発明にかかる情報処理装置は、前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定し、そうであった場合には前記メモリが割り当てられた所定のレジスタに前記構成情報を転送する命令を発行して、第１演算器で当該命令を実行することを特徴とする。
【００１７】
また、この発明にかかる情報処理装置は、前記構成情報中所定のビット位置にある情報のみを出力することを特徴とする。
【００１８】
これらの発明により実現されるプロセッサを搭載した情報処理装置は、与えられた命令が命令セット内に用意されていないような命令（たとえば入力データ中のビットを入れ替える処理や、１の個数を係数する処理など）であっても、メモリから読み出した構成情報により自らの演算器の構成を変化させることで、高速に当該命令を実行できる。逆に言えば、適切な構成情報さえ用意してやれば、上記装置は原理上は無限の種類の命令を処理することができる。
【００１９】
【発明の実施の形態】
以下に添付図面を参照して、この発明にかかる情報処理装置の好適な実施の形態を詳細に説明する。
【００２０】
（本発明の基本構成）
具体的な実施例の説明に入る前に、本発明の基本構成について説明する。図１は、従来技術によるプロセッサの内部構成を模式的に示すブロック図である。命令キャッシュ１００に蓄積された命令は、命令フェッチ部１０１により読み出され、命令デコーダ１０２で解釈されて、その解釈に応じてレジスタファイル１０３や演算器１０４に信号が送られる。
【００２１】
この演算器１０４は、プロセッサの設計時にあらかじめ定義された命令セット内の命令しか実行できない。そのため、一般的なプロセッサの命令セットには用意されていないような複雑な処理、たとえばデータ中のビットの入れ替えなどを行うには、命令セット内の命令をいくつか組み合わせてやる必要がある。そして、組み合わせる命令の個数が多いほど全体の処理時間も長くかかってしまう。
【００２２】
もっとも逆に言えば、あらかじめ想定されていない処理でも１つのカスタム命令として定義し、当該命令を実行するような演算器をプロセッサに組み込むことができれば、処理を高速化することができる。
【００２３】
図２は、本発明によるプロセッサの内部構成を模式的に示す説明図である。図示するように本発明によるプロセッサは、図１に示した従来技術のプロセッサに、その内部構成を外部からの構成情報の入力により変化させることができる第２演算器２０５、および当該構成情報を蓄積・供給するコンフィギュレーションメモリ２０６を追加した構成である。
【００２４】
第２演算器２０５は、具体的には複数のＡＮＤ回路、ＯＲ回路、加算器、セレクタ、マルチプレクサなどから構成されている。なお、図示する例では一個のみであるが、プロセッサ内に第２演算器２０５を複数設ける構成にしてもよい。この場合、演算器ごとにコンフィギュレーションメモリ２０６を用意してもよいが、複数の演算器でメモリを共有する、すなわち読み出しポートを第２演算器２０５の数だけ持たせるようにして、メモリの節約をはかることもできる。
【００２５】
また、図３はコンフィギュレーションメモリ２０６の内容を模式的に示す説明図である。図示するように、コンフィギュレーションメモリ２０６には第２演算器２０５に供給するための複数の構成情報が蓄積されている。
【００２６】
この構成情報とは具体的には、どのカスタム命令が入力したときは第２演算器２０５内のどのマルチプレクサで何番目のビットを選択すればよいか、などといったパラメータを定義したものである。１つのエントリに格納された構成情報が１つのカスタム命令に対応し、構成情報の読み出し元のアドレスを変化させる、すなわち供給する構成情報を変化させることで、第２演算器２０５に個々のカスタム命令に応じた処理を行わせることができる。
【００２７】
（出力する構成情報の切り替え処理）
次に、出力する構成情報の切り替え処理について説明する。第２演算器２０５に供給する構成情報を切り替えるには、たとえば下記のようにして当該情報の格納されたアドレスを指定してやればよい。
【００２８】
（１）命令コードによる指定
図４に示すように、命令コード中の何ビットかをコンフィギュレーションメモリ２０６のアドレス指定のために割り当てておけば、当該メモリ内のどの構成情報を第２演算器２０５に出力するか、すなわち第２演算器２０５にどのカスタム命令を実行させるかを指定できる。
【００２９】
なお、カスタム命令ごとに異なるオペコードを割り当ててもよいが、そうすると定義できるカスタム命令の数がオペコードの種類の上限に制限されてしまうので、ここではカスタム命令であればオペコードは共通（１種類だけ）で、それに続くアドレスで個々のカスタム命令を区別している。
【００３０】
（２）特定用途レジスタによる指定
上記のように命令コード中でメモリアドレスを指定すると、標準的な３２ビット長の命令の場合、アドレスの指定用にはせいぜい５ビット程度しか取れないため、指定できるエントリは３２個程度に限定されてしまう。
【００３１】
そこで別の方法として、コンフィギュレーションメモリ２０６のアドレスを保持する特定用途レジスタ（ＳＰＲ）を用意し、当該レジスタに、カスタム命令の実行に先立って当該命令に対応する構成情報のアドレスをセットするようにしてもよい。特定用途レジスタは通常は３２ビットなので、命令コード中の数ビットを使うよりも多くのアドレスを指定できる。逆に言えば、より大規模なコンフィギュレーションメモリ２０６を搭載することが可能である。
【００３２】
もっとも特定用途レジスタを利用する場合は、コンフィギュレーションメモリ２０６のアドレスを当該レジスタにセットするステップと、当該アドレスの構成情報を第２演算器２０５に供給して、命令を実際に実行するステップとの２段階でカスタム命令が実行されることになる。ただし同一のカスタム命令を続けて実行する場合は、特定用途レジスタへのアドレス設定は毎回行う必要はないので、このオーバーヘッドは発生しない。
【００３３】
（３）命令コードおよび特定用途レジスタによる指定
上記（１）および（２）を組み合わせて、メモリアドレスの一部（たとえば上位アドレス）を特定用途レジスタで、残りの一部（たとえば下位アドレス）を命令コードで指定すれば、欠点を相互に補い合い、大規模なメモリを搭載しつつ効率的にカスタム命令を実行してゆくことができる。
【００３４】
（メモリ内の構成情報の切り替え処理）
次に、メモリ内の構成情報の切り替え処理について説明する。コンフィギュレーションメモリ２０６としてＲＯＭのような読み出し専用メモリを使うと、第２演算器２０５で実行可能なカスタム命令の種類は、上記メモリのエントリの個数に制限される。
【００３５】
一方、コンフィギュレーションメモリ２０６としてＲＡＭを使うと、プログラム実行中にメモリ内の情報を書き換えることで、エントリの個数以上の（理論上は無限の）カスタム命令を実行させることができる。コンフィギュレーションメモリ２０６への構成情報のロードは、たとえば下記のようにして実現すればよい。
【００３６】
（１）実現方法１：命令セットにコンフィギュレーションメモリ２０６へのロード命令を追加する。
命令セット中に、コンフィギュレーションメモリ２０６へのロード命令を新たに追加し、当該命令を実行できるように演算器２０４を拡張する。演算器２０４は、上記ロード命令を命令デコーダ２０２から供給されると、当該命令で指定されたアドレスの構成情報をコンフィギュレーションメモリ２０６の指定されたエントリにロードする。
【００３７】
（２）実現方法２：コンフィギュレーションメモリ２０６へのロード命令を複数のロード命令で代替する。
あるいは命令フェッチ部２０１がコンフィギュレーションロード命令を検出すると、命令デコーダ２０２には上記命令の代わりに、必要な数のロード命令を供給するようにし、ロードされたデータをコンフィギュレーションメモリ２０６に格納するようにしてもよい。たとえばロードする構成情報が２５６ビットの場合は、コンフィギュレーションロード命令の代わりに、８個のロード命令あるいは４個のダブルワードロード命令を命令デコーダ２０２に供給する。
【００３８】
（３）実現方法３：コンフィギュレーションメモリ２０６を特定用途レジスタにマッピングする。
命令セットに含まれている、特定用途レジスタへのデータの転送命令を利用してもよい。すなわち、コンフィギュレーションメモリ２０６を特定用途レジスタにマッピングし、汎用レジスタへのロード命令と、当該汎用レジスタから上記特定用途レジスタへの転送命令とを実行することでコンフィギュレーションメモリ２０６へ構成情報をロードする。プログラム中でこれらの命令を組み合わせることでコンフィギュレーションメモリ２０６へのロードを実現できるので、あえて命令セット中にコンフィギュレーションロード命令を用意する必要はない。ただ、プログラマの負担を軽減する意味では命令セットに上記命令を追加し、命令デコーダ２０２で当該命令を汎用レジスタへのロード命令と、特定用途レジスタへの転送命令とに置換するようにしてもよい。
【００３９】
（４）実現方法４：コンフィギュレーションメモリ２０６を通常のアドレス空間にマッピングする。
コンフィギュレーションメモリ２０６を通常のアドレス空間にマッピングし、レジスタへのロード命令に続けて上記メモリが割り当てられた領域へのストア命令を実行するか、ＤＭＡコントローラを起動して、外部メモリからコンフィギュレーションメモリ２０６へ直接データを転送させることで構成情報をロードすることもできる。プログラム中でロード命令とストア命令とを組み合わせることで、あるいはＤＭＡを起動することで、コンフィギュレーションメモリ２０６へのロードを実現できるので、あえて命令セット中にコンフィギュレーションロード命令を用意する必要はない。ただ、プログラマの負担を軽減する意味では命令セットに上記命令を追加し、命令デコーダ２０２で当該命令をロード命令とストア命令、あるいはＤＭＡの起動命令に置換するようにしてもよい。
【００４０】
（実施の形態１）
次に、実施の形態１、すなわち、ビットの入れ替え処理について説明する。図５は本発明の実施の形態１による第２演算器２０５の内部構成を模式的に示す説明図である。第２演算器２０５内の３２個のマルチプレクサ（同図には３個しか示していないが実際には３２個）に、それぞれ異なる位置のビットを出力するよう選択信号を与えてやると、レジスタファイル２０３からの入力データ（３２ビットであるものとする）の任意のビットを、出力データの任意のビットに持ってゆくことができる。すなわち、あらゆるパターンのビットシャッフリングが可能である。
【００４１】
このとき、３２ビット中の１ビットを指定するには少なくとも５ビットが必要なので、コンフィギュレーションメモリ２０６から第２演算器２０５に供給される選択信号、すなわち構成情報は最低でも５ビット×３２個＝１６０ビットとなる。
【００４２】
またレジスタファイル２０３からの入力データとして、１と０とを少なくとも１つ含むデータ、すなわちオール０（「０００・・・０００」）やオール１（「１１１・・・１１１」）以外のビット列を与えてやると、選択信号を適当に作ってやれば、あらゆるビットパターンの出力データを生成することができる。すなわち、任意のマスクパターンを出力するパターンジェネレータが実現できる。
【００４３】
上記の入力データとしては、たとえばＬＳＢのみに１が立っているデータを使用する。このような入力データは汎用レジスタに、ユーザがプログラムで明示的に設定しておくこともできるが、汎用レジスタのいずれかをこのデータ専用に割り当てておくこともできる。たとえば、一般的なプロセッサの０番レジスタ（ＧＲ０）には固定値０が設定されているが、同様にたとえば１番レジスタ（ＧＲ１）には固定値として１（ＬＳＢのみに１が立っているデータ）を設定しておけば、わざわざ値を設定してやる必要がない。
【００４４】
（実施の形態２）
次に、実施の形態２、すなわち、１が立っているビットの計数処理について説明する。図６は本発明の実施の形態２による第２演算器２０５の内部構成を模式的に示す説明図である。実施の形態２では、第２演算器２０５内の右シフタ６００、パターンジェネレータ６０１、ＡＮＤ回路６０２・６０３および加算器（ＡＬＵでもよい）６０４を用いて、図７に示す処理を所定回数だけ繰り返すことで、入力データ中で１が立っているビットの個数をカウントする。
【００４５】
説明の便宜上、ここでは入力データとして８ビットのデータ、たとえば「ａｂｃｄｅｆｇｈ」を考える。ここで「ａ」「ｂ」などは、そのビット位置にある０または１を表すものとする。
【００４６】
（１）１回目の処理
図８において、まず、右シフタ６００により入力データを右に所定ビット（１回目では１ビット）だけシフトする（ステップＳ７０１）。次にパターンジェネレータ６０１により、所定のマスクパターン（１回目では「０１０１０１０１」すなわち０ｘ５５）を生成する（ステップＳ７０２）。さらに、一方のＡＮＤ回路６０２で入力データと上記マスクパターンとの論理積を（ステップＳ７０３）、もう一方のＡＮＤ回路６０３で右シフト後の入力データと上記マスクパターンとの論理積をそれぞれ取った後（ステップＳ７０４）、これら２つのＡＮＤ結果を加算器６０４で加算する（ステップＳ７０５）。
【００４７】
上記処理の結果、加算器６０４からの出力データでは、図８に示すようにその最上位の２ビットが入力データ中のａとｂとの加算結果、次の２ビットがｃとｄとの加算結果、次の２ビットがｅとｆとの加算結果、最下位の２ビットがｇとｈとの加算結果となっている（偶数ビット（２ｎ）と奇数ビット（２ｎ＋１）の和が計算されたと言ってもよい）。そして、ステップＳ７０１〜Ｓ７０５の繰り返し回数が所定の回数（入力データが８ビットの場合は３回）に達しない間は（ステップＳ７０６：Ｎｏ）、再度ステップＳ７０１に移行する。
【００４８】
（２）２回目の処理
図９において、２回目の処理では、その直前の１回目の処理で得られた出力データが入力データとなる。まず、右シフタ６００により上記入力データを右に所定ビット（２回目では２ビット）だけシフトする（ステップＳ７０１）。次にパターンジェネレータ６０１により、所定のマスクパターン（２回目では「００１１００１１」すなわち０ｘ３３）を生成する（ステップＳ７０２）。そして、これらの入力データとマスクパターンとの間で、１回目と同様論理積とその和とを計算する（ステップＳ７０３〜Ｓ７０５）。
【００４９】
上記処理の結果、加算器６０４からの出力データでは、図９に示すようにその上位４ビットが入力データ中のａ・ｂ・ｃ・ｄの加算結果、下位４ビットがｅ・ｆ・ｇ・ｈの加算結果となっている。そして、ステップＳ７０１〜Ｓ７０５の繰り返し回数がまだ所定回数（３回）に達しないので（ステップＳ７０６：Ｎｏ）、再びステップＳ７０１に戻る。
【００５０】
（３）３回目の処理
図１０において、３回目の処理では、その直前の２回目の処理で得られた出力データが入力データとなる。まず、右シフタ６００により上記入力データを右に所定ビット（３回目では４ビット）だけシフトする（ステップＳ７０１）。次にパターンジェネレータ６０１により、所定のマスクパターン（３回目では「００００１１１１」すなわち０ｘ０Ｆ）を生成する（ステップＳ７０２）。そして、これらの入力データとマスクパターンとの間で、１回目や２回目と同様論理積とその和とを計算する（ステップＳ７０３〜Ｓ７０５）。
【００５１】
上記処理の結果、加算器６０４からの出力データには、図１０に示すように入力データ中の各ビットの加算結果、すなわち入力データ中で１が立っているビットの個数が格納されている。なお、上記データの最下位ビットは入力データのパリティビットにもなっている。そして、この時点でステップＳ７０１〜Ｓ７０５の繰り返し回数が所定回数（３回）に達したので（ステップＳ７０６：Ｙｅｓ）、上記フローチャートによる処理を終了する。
【００５２】
なお、この繰り返しの回数は入力データのビット数に依存し、８ビットの場合は上述のように３サイクル、３２ビットの場合は５サイクルである。ビットの増加に伴って繰り返しの回数が増え、右シフタ６００によるシフト量やパターンジェネレータ６０１により生成されるマスクパターンも変化してゆくが、図７に示した処理の手順は同一である。図１１に、入力データが８ビットである場合と３２ビットである場合のシフト量およびマスクパターンをそれぞれ示す。
【００５３】
また、パターンジェネレータ６０１の生成パターンを変えることによって、上記のような１のカウント処理以外にも様々な処理を実現できる。また、上記ではマスクパターンをパターンジェネレータ６０１で生成しているが、コンフィギュレーションメモリ２０６にマスクパターンを格納しておいて、それを直接使うようにしてもよい。
【００５４】
（パラメータの指定方法）
次に、パラメータの指定方法について説明する。上述のように各回の処理ごとに異なるのは、右シフタ６００でのシフト量とパターンジェネレータ６０１で生成されるマスクパターンのみである。そこで、コンフィギュレーションメモリ２０６内に各回ごとの構成情報を用意し（各回ごとに異なるカスタム命令を用意し、と言ってもよい）、これらを順次第２演算器２０５に与えることで上記一連の処理を実現してもよいが、一部のパラメータが異なるだけの複数の構成情報でメモリを占有するのは無駄である。
【００５５】
そこで、各回ともコンフィギュレーションメモリ２０６から読み出す構成情報は共通とし（命令中で指定する上記メモリのアドレスは同一とし、と言ってもよい）、ただ各回ごとに異なるパラメータのみを、以下に例示するように所定のレジスタにロードしておいたり、命令中に当該パラメータ用のフィールドを設けたりすることで、別途指定するようにしてもよい。第２演算器２０５の回路構成を決定するためのパラメータが、コンフィギュレーションメモリ２０６のほか、所定のレジスタや命令中に分散していると見ることもできる。
【００５６】
（１）特定用途レジスタによる指定
右シフタ６００用のパラメータ指定用、パターンジェネレータ６０１用のパラメータ指定用の特定用途レジスタをそれぞれ用意しておき、構成情報中では当該レジスタを指定する。この場合、右シフタ６００用の特定用途レジスタにシフト量をセット→パターンジェネレータ６０１用の特定用途レジスタにマスクパターン生成のためのパラメータをセット→カスタム命令を実行、という３ステップの処理を３セット繰り返すことで、上述のカウント処理を実現できる。
【００５７】
（２）自動更新機能を有する特定用途レジスタによる指定
上記（１）では、構成情報を保持するためのメモリは少なくて済む一方、３ステップ×３セット＝９ステップの処理が必要になってしまう。メモリを節約しながら処理時間を短縮するには、たとえば図１２に示すような回路で、右シフタ６００用・パターンジェネレータ６０１用の特定用途レジスタに自動更新機能を具備することが考えられる。
【００５８】
図示する例ではレジスタ内の現在の値と、コンフィギュレーションメモリ２０６内の値との和を更新後の値としている。もっとも加算値が固定、たとえば１の場合は、特にコンフィギュレーションメモリ２０６から当該値を供給してやる必要はない。なお、図示する例ではこの（２）の方式と、後述する（３）の方式のいずれか一方をセレクタで選択できるようになっている。どちらを選択するかはコンフィギュレーションメモリ２０６内の構成情報により決定される。
【００５９】
この（２）の方式では、特定用途レジスタへの設定は最初の１回だけ行えばよい（２回目以降は自動更新される）ので、必要なステップを（１）の９ステップから５ステップに減らすことができる。
【００６０】
（３）命令コードによる指定
別の方法として、メモリを節約しながら処理時間を短縮するには、たとえば命令コード中で右シフタ６００やパターンジェネレータ６０１のパラメータを直接指定することも考えられる。これにより、毎回特定用途レジスタを設定する必要がなくなるので、同じカスタム命令（ただしパラメータはそれぞれ異なる）を３回実行するだけで上述のカウント処理を実現できる。もっとも、命令長は通常３２ビットに制限されることから、パラメータの指定のために１０数ビット確保するのは難しい場合が多い。
【００６１】
（４）汎用レジスタによる指定
実施の形態２で扱う入力データは１つなので、命令のフォーマットが図４のようなものであった場合、もう１つソースレジスタを指定することができる。ここで指定される汎用レジスタの特定フィールドに、右シフタ６００やパターンジェネレータ６０１に与えるパラメータをロードしておくこともできる。
【００６２】
（実施の形態３）
次に、ＤＥＳのＩＰ転置処理について説明する。図１３は本発明の実施の形態３による第２演算器２０５の内部構成を模式的に示す説明図である。実施の形態３では、第２演算器２０５内の右シフタ１３００、パターンジェネレータ１３０１、反転回路１３０２、ＡＮＤ回路１３０３・１３０４、ＯＲ回路１３０５およびビット入れ替え器１３０６を用いて、図１４に示す手順により、６４ビットの入力データについてＤＥＳのＩＰ転置処理を行う。
【００６３】
暗号化アルゴリズムのＤＥＳではビットの入れ替え操作を多用するが、その中のＩＰ転置操作では図１５のような６４ビットのデータに対して、図１６に示すようなビット入れ替えを行う。なお、各数字はビット位置を示している。
【００６４】
図１５の転置前の入力データは、汎用レジスタ上では２つのレジスタに分割されて、たとえば３０番（ＧＲ３０）に１〜３２ビット目まで（１，２，・・・，３２）が、３１番（ＧＲ３１）に３３〜６４ビット目まで（３３，３４，・・・，６４）が、それぞれ格納される。また、図１６の転置後の出力データは前半の３２ビット（５８，５０，・・・，８）が２８番（ＧＲ２８）、後半の３２ビット（５７，４９，・・・，７）が２９番（ＧＲ２９）というように、２分割されて汎用レジスタに格納される。
【００６５】
図１３に示した第２演算器２０５では、コンフィギュレーションメモリ２０６からの構成情報（あるいは特定用途レジスタからのパラメータ、など）により、右シフタ１３００はデータを４ビットだけ右シフトするように、パターンジェネレータ１３０１はマスクパターン０ｘＦ０Ｆ０Ｆ０Ｆ０を出力するように、それぞれ設定されている。
【００６６】
また、ビット入れ替え器１３０６は図１７に示すような規則で各ビットの順序を入れ替える。図中「＊」は任意のビット位置のデータでよいことを示し、たとえば最上位ビットの値を一律に埋めるようにする。
【００６７】
上記を前提として、図１４に示した手順を具体的に説明する。まず、第２演算器２０５で図１８に示すように、入力１側にＧＲ０（一般のプロセッサでよく使われるゼロレジスタで、読み出し値が常にオール０になる特殊なレジスタ）、入力２側にＧＲ３０を選択すると、出力レジスタ（ここではＧＲ２８とする）には図１６に示した転置後のデータで、右上隅の４×４ビットにあたる部分が左詰めで出力される（ステップＳ１４０１）。
【００６８】
次に、図１９に示すように、入力１側にステップＳ１４０１による処理後のＧＲ２８、入力２側にＧＲ３１を選択すると、出力レジスタ（ここではＧＲ２８とする）には図１６に示した転置後のデータで、上半分の８×４ビットにあたる部分が出力される（ステップＳ１４０２）。
【００６９】
次に、演算器２０４に通常の命令（すなわち命令セット内の命令）である右シフト命令を与えて、ＧＲ３０のデータを右に１ビットシフトし、結果をＧＲ３０に出力する（ステップＳ１４０３）。また、同様に右シフト命令を使って、ＧＲ３１のデータを右に１ビットシフトし、結果をＧＲ３１に出力する（ステップＳ１４０４）。
【００７０】
次に、図２０に示すように、入力１側にＧＲ０、入力２側にステップＳ１４０３による処理後のＧＲ３０を選択すると、出力レジスタ（ここではＧＲ２９とする）には図１６に示した転置後のデータで、右下隅の４×４ビットにあたる部分が左詰めで出力される（ステップＳ１４０５）。
【００７１】
次に、図２１に示すように、入力１側にステップＳ１４０５による処理後のＧＲ２９を、入力２側にステップＳ１４０４による処理後のＧＲ３１を選択すると、出力レジスタ（ここではＧＲ２９とする）には図１６に示した転置後のデータで、下半分の８×４ビットにあたる部分が出力される（ステップＳ１４０６）。
【００７２】
以上により、ＧＲ３０およびＧＲ３１に分割して格納されていた６４ビットの入力データが、ビット入れ替えの上でＧＲ２８およびＧＲ２９に出力されたことになり、図１５から図１６へのＩＰ転置処理が終了する。従来のプロセッサでは１ビットずつデータを操作していたので、全体の入れ替えに多くの命令を実行する必要があったが、上述した実施の形態３ではＩＰ転置処理を６命令で実現することができ、実行速度の大幅な向上がはかれる。
【００７３】
なお、６４ビットデータを一挙に扱うことのできるビット入れ替え器を用いれば、１命令で上記処理を実現できるが、その分回路規模が大きくなることは避けられない。
【００７４】
以上説明した実施の形態１〜３によれば、ユーザが求める種々のカスタム命令をコンフィギュレーションメモリ２０６からの構成情報を切り替えるだけで、すなわちＬＳＩを個々に作り替えたり大規模なＦＰＧＡを搭載したりしなくても定義することができるので、ユーザのアプリケーションに適したカスタムプロセッサを非常に容易、かつ安価に実現できる。
【００７５】
また、従来の演算器２０４なら多数の命令の組み合わせで実現しなければならなかった処理を、第２演算器２０５ではごく少数の命令で実現できるので、プロセッサそのものの処理速度の向上だけでなく、当該プロセッサで実行されるプログラムのサイズの縮小も同時に実現することができる。
【００７６】
なお、上述した実施の形態１〜３の第２演算器２０５は、コンフィギュレーションメモリ２０６からの情報をもっぱら自己の内部構成を決定するために用いたが、コンフィギュレーションメモリ２０６をダイレクトにテーブルメモリとして扱い、第２演算器２０５はメモリ内の任意の情報を読み出すだけにすることもできる。
【００７７】
すなわち、コンフィギュレーションメモリ２０６の１エントリ分の情報が２５６ビットだとすると、これを１ビット×２５６、２ビット×１２８、４ビット×６４のようなテーブルと見なし、与えられた命令の特定のフィールドを当該テーブルのアドレスと見なして、そのアドレスのデータを読み出し出力する。
【００７８】
この場合の第２演算器２０５は、実施の形態１〜３で上述した種々のカスタム命令を処理する演算器部分（コンフィギュレーションメモリ２０６からの構成情報によりその内部構成が変化する部分、と言ってもよい）と、コンフィギュレーションメモリ２０６内の任意のデータを抽出するための選択器部分とからなる。
【００７９】
図２２は、この選択器部分の回路構成を示す説明図である。図示する例では、コンフィギュレーションメモリ２０６から入力した２５６ビットのデータから、３２対１の８個のマルチプレクサにより８ビットのデータのみが選択（抽出）されている。なお、個々のマルチプレクサが必要とする選択信号（３２ビット中のどのビットを選択すればよいかを示す信号であり、長さは５ビットである）は、汎用レジスタや特定用途レジスタ、あるいは命令内の特定のフィールドなどから供給する。
【００８０】
上記はコンフィギュレーションメモリ２０６を８ビット×３２のテーブルとして使用する例であるが、４ビット×６４のテーブルとして使用するのであれば、図２３に示すように選択信号を１ビット増やして、３２対１の８個のマルチプレクサから出力された８ビットを、さらに２対１の４個のマルチプレクサで４ビットに絞ればよい。
【００８１】
また、コンフィギュレーションメモリ２０６を２ビット×１２８のテーブルとして使用するのであれば、さらに選択信号を１ビット増やし、２対１の２個のマルチプレクサで２ビットに絞ればよい。もう一段２対１のマルチプレクサを通せば最終的に１ビットの出力となり、１ビット×２５６のテーブルとして使うこともできる。
【００８２】
なお、選択器の構成を図２４のようにすると出力データの幅が２のべき乗に制限されるため、テーブルの作り方は複雑になる一方、図２３よりも回路量を削減しつつ同一の機能を実現することができる。
【００８３】
（付記１）与えられた命令が所定の命令セット内の命令であるか否かを判定する判定手段と、
前記判定手段により前記命令が所定の命令セット内の命令であると判定された場合に、当該命令を実行する第１の演算手段と、
前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令を実行するための回路構成を決定する構成情報を出力する構成情報出力手段と、
前記構成情報出力手段から出力された構成情報により決定される回路構成で前記命令を実行する第２の演算手段と、
を備えたことを特徴とする情報処理装置。
【００８４】
（付記２）前記第２の演算手段を複数備えたことを特徴とする付記１に記載の情報処理装置。
【００８５】
（付記３）前記構成情報出力手段は、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする付記１または２に記載の情報処理装置。
【００８６】
（付記４）前記構成情報出力手段は、前記命令で指定されたアドレスおよび／または所定のレジスタに保持されたアドレスにもとづいて、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする付記３に記載の情報処理装置。
【００８７】
（付記５）前記構成情報は書き換え可能なメモリに保持されることを特徴とする付記１〜４のいずれか一つに記載の情報処理装置。
【００８８】
（付記６）前記構成情報は前記メモリのほか、前記命令内の所定のフィールドあるいは所定のレジスタにも保持されることを特徴とする付記５に記載の情報処理装置。
【００８９】
（付記７）前記所定のレジスタは、前記第２の演算手段により前記命令が実行される都度、前記メモリに保持された構成情報にもとづいて値を更新することを特徴とする付記６に記載の情報処理装置。
【００９０】
（付記８）前記所定の命令セット内の命令には、前記メモリに前記構成情報をロードする命令が含まれることを特徴とする付記５〜７のいずれか一つに記載の情報処理装置。
【００９１】
（付記９）さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリに前記構成情報をロードする命令を複数発行する命令発行手段と、を備え、
前記第１の演算手段は、前記命令発行手段により発行された命令を実行することを特徴とする付記５〜７のいずれか一つに記載の情報処理装置。
【００９２】
（付記１０）さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリが割り当てられた所定のレジスタに前記構成情報を転送する命令を発行する命令発行手段と、を備え、
前記第１の演算手段は、前記命令発行手段により発行された命令を実行することを特徴とする付記５〜７のいずれか一つに記載の情報処理装置。
【００９３】
（付記１１）さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリが割り当てられたアドレス空間内の所定の領域に前記構成情報をストアする命令を発行する命令発行手段と、を備え、
前記第１の演算手段は、前記命令発行手段により発行された命令を実行することを特徴とする付記５〜７のいずれか一つに記載の情報処理装置。
【００９４】
（付記１２）さらに、前記判定手段により前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定手段と、
前記第２の判定手段により、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリが割り当てられたアドレス空間内の所定の領域に前記構成情報を転送するようＤＭＡコントローラに指示する指示手段と、
を備えたことを特徴とする付記５〜７のいずれか一つに記載の情報処理装置。
【００９５】
（付記１３）前記第２の演算手段は、前記構成情報出力手段から出力された構成情報により決定される回路構成で、与えられたデータ中の任意のビットを入れ替えることを特徴とする付記１〜１２のいずれか一つに記載の情報処理装置。
【００９６】
（付記１４）前記第２の演算手段は、前記構成情報出力手段から出力された構成情報により決定される回路構成で、与えられたデータ中の１の個数を計数することを特徴とする付記１〜１２のいずれか一つに記載の情報処理装置。
【００９７】
（付記１５）さらに、前記構成情報出力手段により出力された構成情報中所定のビット位置にある情報のみを出力する選択手段を備えたことを特徴とする付記１〜１４のいずれか一つに記載の情報処理装置。
【００９８】
（付記１６）与えられた命令が所定の命令セット内の命令であるか否かを判定する判定工程と、
前記判定工程で前記命令が所定の命令セット内の命令であると判定された場合に、当該命令を実行する第１の演算工程と、
前記判定工程で前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令を実行するための回路構成を決定する構成情報を出力する構成情報出力工程と、
前記構成情報出力工程で出力された構成情報により決定される回路構成で前記命令を実行する第２の演算工程と、
を含んだことを特徴とする情報処理方法。
【００９９】
（付記１７）前記構成情報出力工程では、前記判定工程で前記命令が所定の命令セット内の命令でないと判定された場合に、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする付記１６に記載の情報処理方法。
【０１００】
（付記１８）前記構成情報出力工程では、前記命令で指定されたアドレスおよび／または所定のレジスタに保持されたアドレスにもとづいて、複数の構成情報の中から当該命令を実行するための回路構成を決定する構成情報を選択して出力することを特徴とする付記１７に記載の情報処理方法。
【０１０１】
（付記１９）前記構成情報は書き換え可能なメモリに保持されることを特徴とする付記１６〜１８のいずれか一つに記載の情報処理方法。
【０１０２】
（付記２０）前記構成情報は前記メモリのほか、前記命令内の所定のフィールドあるいは所定のレジスタにも保持されることを特徴とする付記１９に記載の情報処理方法。
【０１０３】
（付記２１）前記所定のレジスタは、前記第２の演算工程で前記命令が実行される都度、前記メモリに保持された構成情報にもとづいて値を更新することを特徴とする付記２０に記載の情報処理方法。
【０１０４】
（付記２２）さらに、前記判定工程で前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定工程と、
前記第２の判定工程で、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリに前記構成情報をロードする命令を複数発行する命令発行工程と、を含み、
前記第１の演算工程では、前記命令発行工程で発行された命令を実行することを特徴とする付記１９〜２１のいずれか一つに記載の情報処理方法。
【０１０５】
（付記２３）さらに、前記判定工程で前記命令が所定の命令セット内の命令でないと判定された場合に、当該命令が前記メモリに前記構成情報をロードする命令であるか否かを判定する第２の判定工程と、
前記第２の判定工程で、前記命令が前記メモリに前記構成情報をロードする命令であると判定された場合に、前記メモリが割り当てられた所定のレジスタに前記構成情報を転送する命令を発行する命令発行工程と、を含み、
前記第１の演算工程では、前記命令発行工程で発行された命令を実行することを特徴とする付記１９〜２１のいずれか一つに記載の情報処理方法。
【０１０６】
（付記２４）さらに、前記構成情報出力工程で出力された構成情報中所定のビット位置にある情報のみを出力する選択工程を含んだことを特徴とする付記１６〜２３のいずれか一つに記載の情報処理方法。
【０１０７】
【発明の効果】
以上説明したように本発明により実現されるプロセッサは、与えられた命令が命令セット内に用意されていないような命令（たとえば入力データ中のビットを入れ替える処理や、１の個数を係数する処理など）であっても、メモリから読み出した構成情報により自らの演算器の構成を変化させることで、高速に当該命令を実行できるので、個々に回路を作り替えたり大規模な回路を搭載したりしなくても、ユーザが定義する様々な命令を高速に処理することが可能な情報処理装置が得られるという効果を奏する。
【図面の簡単な説明】
【図１】従来技術によるプロセッサの内部構成を模式的に示すブロック図である。
【図２】本発明によるプロセッサの内部構成を模式的に示す説明図である。
【図３】本発明によるコンフィギュレーションメモリ２０６の内容を模式的に示す説明図である。
【図４】本発明によるプロセッサに与えられる命令コードの、フォーマットの一例を模式的に示す説明図である。
【図５】本発明の実施の形態１による第２演算器２０５の内部構成を模式的に示す説明図である。
【図６】本発明の実施の形態２による第２演算器２０５の内部構成を模式的に示す説明図である。
【図７】本発明の実施の形態２による第２演算器２０５で実行される、入力データ中の１の個数の計数処理の手順を示すフローチャートである。
【図８】図７に示すフローの１回目の処理を具体例により示す説明図である。
【図９】図７に示すフローの２回目の処理を具体例により示す説明図である。
【図１０】図７に示すフローの３回目の処理を具体例により示す説明図である。
【図１１】本発明の実施の形態２による第２演算器２０５でのシフト量およびマスクパターンを示す説明図である。
【図１２】自動更新機能を具備する特定用途レジスタの回路構成の一例を示す説明図である。
【図１３】本発明の実施の形態３による第２演算器２０５の内部構成を模式的に示す説明図である。
【図１４】本発明の実施の形態３による第２演算器２０５で実行される、入力データのＩＰ転置処理の手順を示すフローチャートである。
【図１５】ＩＰ転置前のデータの一例を示す説明図である。
【図１６】ＩＰ転置後のデータの一例を示す説明図である。
【図１７】本発明の実施の形態３による第２演算器２０５内の、ビット入れ替え器１３０６におけるビットの入れ替え規則を示す説明図である。
【図１８】図１４に示すステップＳ１４０１の処理を具体例により示す説明図である。
【図１９】図１４に示すステップＳ１４０２の処理を具体例により示す説明図である。
【図２０】図１４に示すステップＳ１４０５の処理を具体例により示す説明図である。
【図２１】図１４に示すステップＳ１４０６の処理を具体例により示す説明図である。
【図２２】コンフィギュレーションメモリ２０６をテーブルメモリとして使用する場合の、第２演算器２０５の回路構成の一例を示す説明図である。
【図２３】コンフィギュレーションメモリ２０６をテーブルメモリとして使用する場合の、第２演算器２０５の回路構成の他の一例を示す説明図である。
【図２４】コンフィギュレーションメモリ２０６をテーブルメモリとして使用する場合の、第２演算器２０５の回路構成の他の一例を示す説明図である。
【符号の説明】
１００，２００　命令キャッシュ
１０１，２０１　命令フェッチ部
１０２，２０２　命令デコーダ
１０３，２０３　レジスタファイル
１０４，２０４　演算器
２０５　第２演算器
２０６　コンフィギュレーションメモリ
６００，１３００　右シフタ
６０１，１３０１　パターンジェネレータ
６０２，６０３，１３０３，１３０４　ＡＮＤ回路
６０４　加算器
１３０２　反転回路
１３０５　ＯＲ回路
１３０６　ビット入れ替え器
【図１】
2004062821.tif 000003
【図２】
2004062821.tif 000004
【図３】
2004062821.tif 000005
【図４】
2004062821.tif 000006
【図５】
2004062821.tif 000007
【図６】
2004062821.tif 000008
【図７】
2004062821.tif 000009
【図８】
2004062821.tif 000010
【図９】
2004062821.tif 000011
【図１０】
2004062821.tif 000012
【図１１】
2004062821.tif 000013
【図１２】
2004062821.tif 000014
【図１３】
2004062821.tif 000015
【図１４】
2004062821.tif 000016
【図１５】
2004062821.tif 000017
【図１６】
2004062821.tif 000018
【図１７】
2004062821.tif 000019
【図１８】
2004062821.tif 000020
【図１９】
2004062821.tif 000021
【図２０】
2004062821.tif 000022
【図２１】
2004062821.tif 000023
【図２２】
2004062821.tif 000024
【図２３】
2004062821.tif 000025
【図２４】
2004062821.tif 000026