(57)【特許請求の範囲】
【請求項１】
同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元する命令デコーダと、
各命令ワードの元の構成から情報ワードを構成する部分のビットフィールドが除かれた複数の部分命令ワード、および、情報ワードを同一サイクルで前記命令デコーダに出力する命令供給部と、
制御情報に基づいて命令を実行する少なくとも１つの実行部と
を備え、
前記命令デコーダは、復元された各命令ワードをデコードし、各命令ワードを実行するための制御情報を前記実行部のそれぞれに出力する個別命令デコード部を備える
ことを特徴とするプロセッサ。
【請求項２】
前記命令供給部は、同一サイクルで実行される最大命令数がｎであり、ｎ個の部分命令ワードの次に情報ワードがある場合、ｎ個の部分命令ワードの最後尾に、部分命令ワードの順番にしたがってそれぞれのビットフィールドが配置された情報ワードを配置して出力し、ｎ個に満たないｍ個の部分命令ワードの次に情報ワードがある場合、ｍ個の部分命令ワードの最後尾にｎ−ｍ個のＮＯＰ命令を配置し、さらにその最後尾に、部分命令ワードの順番にしたがってそれぞれのビットフィールドが配置された情報ワードを配置して出力することを特徴とする請求項１記載のプロセッサ。
【請求項３】
情報ワードを構成するビットフィールドは、命令ワードの種類によって決まる長さの超過オペランド、および、即値オペランドの少なくとも一方であることを特徴とする請求項２記載のプロセッサ。
【請求項４】
前記命令デコーダは、
１以上ｎ以下の整数をｉとしたとき、第ｉから第ｎの部分命令ワードのオペコードを入力し、第ｉの部分命令ワードに対応する超過オペランド、および、即値オペランドのいずれかを選択するための第ｉの選択信号を各部分命令ワードの種類に基づいて生成し出力する第ｉのデコーダと、
前記第ｉのデコーダから出力される第ｉの選択信号にしたがって情報ワードの該当する位置から第ｉの部分命令ワードに対応する超過オペランド、および、即値オペランドのいずれかを選択する第ｉの選択回路と
を備えることを特徴とする請求項３記載のプロセッサ。
【請求項５】
プロセッサの命令デコーダで、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元するステップと、
前記プロセッサの命令供給部から前記命令デコーダに、各命令ワードの元の構成から情報ワードを構成する部分のビットフィールドが除かれた複数の部分命令ワード、および、情報ワードを同一サイクルで出力するステップと、
前記命令デコーダで、復元された各命令ワードをデコードし、各命令ワードを実行するための制御情報を前記プロセッサの少なくとも１つの実行部に出力するステップと、
前記実行部で、制御情報に基づいて命令を実行するステップと
を備えることを特徴とする命令制御方法。
【請求項６】
プロセッサに、
同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元するステップと、
各命令ワードの元の構成から情報ワードを構成する部分のビットフィールドが除かれた複数の部分命令ワード、および、情報ワードを同一サイクルで出力するステップと、
復元された各命令ワードをデコードし、各命令ワードを実行するための制御情報を生成するステップと、
生成された制御情報に基づいて命令を実行するステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２００６年６月１５日に出願された日本出願特願２００６−１６６０７７号を基礎とする優先権を主張し、その日本出願の開示は参照によりすべてここに取り込まれる。【０００２】
本発明は、プロセッサ、および、命令制御方法に関し、特に、命令実行性能を低下させずにメモリの消費量を削減できるプロセッサ、および、命令制御方法に関する。
【背景技術】
【０００３】
サイクル毎に１つ以上の命令ワードをプログラムメモリからフェッチして実行するプログラマブル・プロセッサにおいて、貴重なプログラムメモリ資源の利用効率を高めるためには通常、固定した命令語長を用いる必要がある。一方、一般に個々の命令は、そのプロセッサに対する動作指定の内容に依存して必要なビット数Ｘは異なる。【０００４】
一般的には、オペコードのビット数をＡ［ビット］、オペランドに指定可能なレジスタの数を表現するために必要なビット数をＢ［ビット］、指定が必要なレジスタ数をＣ、そして、命令の動作を修飾するフラグのビット数をＤ［ビット］、即値フィールドのビット数をＥ［ビット］とすると、命令の語長Ｘ＝Ａ＋Ｂ×Ｃ＋Ｄ＋Ｅ［ビット］とした場合に、もっとも効率的にプロセッサ動作の指定が可能である。しかし、たとえば、２項演算と単項演算とでは、前者の方が、Ｃが１だけ大きいように、通常は、命令毎あるいは命令の種類毎に、それに最適な語長Ｘは異なる。【０００５】
そのため、１種類の固定した命令語長Ｙだけでは、ある命令について、Ｘ＜Ｙの場合は、本来不要なスペースがその命令ワード内に発生し、プログラムメモリの利用効率が悪くなる。また、ある命令について、Ｘ＞Ｙの場合は、ＸをＹに合わせるために、命令ビット数を削減しなければならず、プロセッサに対するその命令の動作指定効率が落ちる。そこで、所定の基本語長を設けた上、その整数倍の命令語長を複数同時に採用する形の可変語長のプログラマブル・プロセッサが、たとえば特開平８−９５７８３号公報（文献１）に開示されている。【０００６】
その場合、より多くのビット数を消費する命令には倍の語長を割り当て、そうでない命令には基本語長を割り当てる、といった形での命令セット設計が可能となる。したがって、プログラムメモリスペースに隙間が生じないという固定命令語長の利点を損なわないまま、ある程度にプログラムメモリの利用効率を改善し、かつ、個々の命令設計における自由度を上げ、高性能なプロセッサをより実現しやすくするといった利点がある。【０００７】
また、語長の種類を増やすのではなく、即値フィールドの長さに対する命令毎の要求の相違が大きいことに着目して、即値フィールドの拡張を指定する専用命令を有するＶＬＩＷ型プロセッサの技術が、たとえば特開平５−１５０９７９号公報（文献２）に開示されている。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
文献１に開示されている関連技術のように、命令語長を、所定の基本語長Ｙの整数倍ｎ×Ｙ（ｎ＝１、２、…）に設定する場合では、命令毎あるいは命令の種類毎の最適語長Ｘと基本語長のある整数倍との間で違いがあることは避けられず、以下の問題点がある。【０００９】
すなわち、Ｘより小さいｎ×Ｙのうち、Ｘにもっとも語長が近いｉ×Ｙを、ある種類の命令の語長として選択した場合は、Ｘとｉ×Ｙとの差のＸ−（ｉ×Ｙ）ビット数分だけ、Ｘのビット数を削減することになり、プロセッサに対する動作指定効率が低下する（すなわち、命令実行性能が低下する）。【００１０】
また、Ｘより大きいｎ×Ｙのうち、Ｘにもっとも語長が近いｊ×Ｙを、上記命令の語長として選択した場合は、今度は、（ｊ×Ｙ）−Ｘビット数分だけ、余分にメモリ領域が消費されることになりプログラムメモリ利用効率が低下する（すなわち、メモリの消費量が増加する）。【００１１】
また、文献２に開示されている他の関連技術のように、即値フィールドのみを同サイクルの別の１ワードの専用命令によって拡張できるようにした場合も、１倍長、および、２倍長の２種類の命令語長を有する文献１の可変長型の一種である。したがって、やはり、上記の問題点を持つ。【００１２】
本発明の目的は、上記関連技術の課題である命令実行性能を低下させずにメモリの消費量を削減するプロセッサ、および、命令制御方法を提供することである。
【課題を解決するための手段】
【００１３】
本発明のプロセッサは、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元することを特徴とする。【００１４】
本発明の命令制御方法は、プロセッサで、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元するステップを備えることを特徴とする。
【発明の効果】
【００１５】
本発明の効果は、命令実行性能の低下させずにメモリの消費量を削減できることである。【００１６】
その理由は、プロセッサが、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集められて構成される情報ワードを実行時に分解し、各命令ワードを元の構成に復元する構成をとるからである。
【図面の簡単な説明】
【００１７】
【図１】図１は、本発明の第１の実施例の構成を示すブロック図である。
【図２】図２は、本発明の第２の実施例の構成を示すブロック図である。
【図３】図３は、図２の命令デコーダの構成を示すブロック図である。
【図４】図４は、図３の命令ワード復元部の構成を示すブロック図である。
【図５】図５は、元の命令ワードのフォーマットを示す説明図である。
【図６Ａ−６Ｃ】図６Ａ−図６Ｃは、情報ワードのフォーマットの例を示す説明図である。
【図７】図７は、本発明の第２の実施例の動作を示す説明図である。
【図８】図８は、本発明の第３の実施例の動作を示す説明図である。
【図９】図９は、命令ワード復元部の動作を示すフローチャートである。
【図１０】図１０は、本発明の第２の実施例の具体例の命令ワード復元部の一部の構成を示すブロック図である。
【発明を実施するための最良の形態】
【００１８】
次に、本発明の第１の実施例について図面を参照して詳細に説明する。図１は、本発明の第１の実施例の構成を示すブロック図である。図１を参照すると、本発明の第１の実施例のプロセッサ１００は、同一サイクル（たとえば、同一パイプラインステージ）で実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する命令デコーダ１０３を含む。【００１９】
元の第１命令ワードＩ１の構成は、ビットフィールドＬ１１とビットフィールドＬ１２とである。元の第２命令ワードＩ２の構成は、ビットフィールドＬ２１とビットフィールドＬ２２とである。元の第３命令ワードＩ３の構成は、ビットフィールドＬ３１とビットフィールドＬ３２とである。【００２０】
情報ワードＩＷの構成は、元の第１命令ワードＩ１に属するビットフィールドＬ１２と、元の第２命令ワードＩ２に属するビットフィールドＬ２２と、元の第３命令ワードＩ３に属するビットフィールドＬ３２とである。【００２１】
命令デコーダ１０３は、第１命令ワードとしてビットフィールドＬ１１、第２命令ワードとしてビットフィールドＬ２１、第３命令ワードとしてビットフィールドＬ３１、および、情報ワードＩＷを同一サイクルに入力する。命令デコーダ１０３に入力される第１ワードＬ１１〜第３命令ワードＬ３１は、それぞれの元の第１ワードＩ１〜第３命令ワードＩ３から、情報ワードＩＷを構成するビットフィールドＬ１２〜Ｌ３２が除かれたものであり、部分命令ワードとも呼ぶ。【００２２】
次に、命令デコーダ１０３は、情報ワードＩＷを、ビットフィールドＬ１２と、ビットフィールドＬ２２と、ビットフィールドＬ３２とに分解する。【００２３】
次に、命令デコーダ１０３は、ビットフィールドＬ１１とビットフィールドＬ１２とを結合し、元の第１命令ワードＩ１の構成を復元する。さらに、命令デコーダ１０３は、ビットフィールドＬ２１とビットフィールドＬ２２とを結合し、元の第２命令ワードＩ２の構成を復元する。さらに、命令デコーダ１０３は、ビットフィールドＬ３１とビットフィールド３２２とを結合し、元の第３命令ワードＩ３の構成を復元する。【００２４】
以上において、情報ワードＩＷに含まれるビットフィールドＬ１２〜ビットフィールドＬ３２は、元の第１命令ワードＩ１〜元の第３命令ワードＩ３の最後尾に存在するとは、限らない。ビットフィールドＬ１２〜ビットフィールドＬ３２は、先頭でも、末尾、あるいは、それぞれの命令の種類に依存して決まる所定位置でよい。したがって、復元においては、ビットフィールドＬ１２〜ビットフィールドＬ３２は、先頭、末尾、あるいは、それぞれの命令の種類に依存して決まる所定位置に挿入される。【００２５】
以上において、３命令ワードの場合について説明したが、本発明の第１の実施例は、ｎ（ｎは、２以上の整数）命令ワードについて適用可能である。【００２６】
本発明の第１の実施例は、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、命令実行性能の低下させずにメモリの消費量を削減できる。【００２７】
次に、本発明の第２の実施例について図面を参照して詳細に説明する。本発明の第２の実施例のプロセッサは、最大３命令を同一サイクルに実行可能であり、かつ、３種類の命令語長を持つ命令（正確には、元の命令）を実行可能である。図２は、本発明の第２の実施例の構成を示すブロック図である。【００２８】
図２を参照すると、本発明の第２の実施例のプロセッサ１００は、命令パス１０１と、命令供給部１０２と、命令デコーダ１０３と、命令パス１０４と、制御情報パス１０５と、制御情報パス１０６と、制御情報パス１０７と、実行部１０８と、実行部１０９と、実行部１１０とを含む。【００２９】
命令供給部１０２は、たとえば、命令バッファであり、命令ワード、および、情報ワードを格納し、最大、３命令ワード、および、情報ワードを同一サイクルで、命令パス１０４を介して命令デコーダ１０３に出力する。たとえば、命令供給部１０２は、各ワードの情報ワード識別子を調べ、同一サイクルで実行される命令ワードが１または２個であり、その次に、情報ワードがある（図示しないメモリ上に）場合、１または２個の命令ワードの最後尾に情報ワードをシフトし、命令ワードと情報ワードとの間に、必要に応じてＮＯＰ命令（Ｎｏ  ｏｐｅｒａｔｉｏｎ  命令；無操作命令）を挿入して、出力する。【００３０】
同一サイクルで実行される最大命令数がｎ（ｎは、１以上の整数）であり、ｎ［個］の命令ワードの次に情報ワードがある場合には、命令供給部１０２は、ｎ［個］の命令ワードの最後尾に情報ワードを配置して出力する。また、ｎ［個］に満たないｍ［個］（ｍは、１以上の整数）の命令ワードの次に情報ワードがある場合には、ｎ−ｍ［個］のＮＯＰ命令をｍ［個］の命令ワードの次に挿入する。【００３１】
命令デコーダ１０３は、元の命令ワードの復元を行い、復元結果に基づいて、各命令対応の制御情報を制御情報パス１０５〜１０７を介して実行部１０８〜１１０に出力する。制御情報は、たとえば、オペランド同士の演算を指定する情報である。実行部１０８〜１１０は、同一サイクルで、制御情報に基づいて各命令の実行を行う。【００３２】
図３は、図２の命令デコーダ１０３の構成を示すブロック図である。図３を参照すると、命令デコーダ１０３は、命令ワード復元部２００、実行部１０８に対応する個別命令デコード部２０１、実行部１０９に対応する個別命令デコード部２０２、および、実行部１１０に対応する個別命令デコード部２０３を含む。【００３３】
図４は、図３の命令ワード復元部２００の構成を示すブロック図である。図４を参照すると、命令ワード復元部２００は、分解部２１０、および、結合部２１１を含む。分解部２１０は、情報ワードを複数のビットフィールドに分解する。結合部２１１は、複数の命令ワード（命令ワードの元の構成から情報ワードを構成する部分のビットフィールドを除いたもの）と、分解部２１０により分解された対応するビットフィールドとを結合することにより、各命令ワードを元の構成に復元する。【００３４】
図５は、元の命令ワードのフォーマットを示す説明図である。図５を参照すると、元の命令ワード３００は、Ｙ［ビット］の基本フィールドＢＦと、命令の種類により長さが決まる拡張フィールドＥＦとを含む。基本フィールドＢＦは、１［ビット］の情報ワード識別子３０３、Ｑ［ビット］のオペコード３０４（オペレーションコード；命令の種類を示す）、および、Ｙ−Ｑ−１［ビット］のオペランドを含む。拡張フィールドＥＦは、命令の種類Ｍ、Ｎ、Ｏにより決まるＡ［ビット］、Ｂ［ビット］、または、Ｃ［ビット］の超過オペランドを含む。【００３５】
また、さらに、拡張フィールドＥＦは、命令の種類Ｍ、Ｎ、Ｏ等により決まるＥ０［ビット］、Ｅ１［ビット］、または、Ｅ２［ビット］の即値オペランドを含むことが可能である。したがって、即値オペランドを使用する場合には、元の命令ワードの語長は、命令の種類Ｍ、Ｎ、Ｏに対し、それぞれ、Ｙ＋Ａ＋Ｅ０［ビット］、Ｙ＋Ｂ＋Ｅ１［ビット］、Ｙ＋Ｃ＋Ｅ２［ビット］である。即値オペランドを使用しない場合には、元の命令ワードの語長は、命令の種類Ｍ、Ｎ、Ｏに対し、それぞれ、Ｙ＋Ａ［ビット］、Ｙ＋Ｂ［ビット］、Ｙ＋Ｃ［ビット］である。【００３６】
元の命令ワード３００のＹ［ビット］の基本フィールドＢＦの部分が、命令ワード３０１として独立する。また、拡張フィールドＥＦの部分は情報ワード３０２に含まれる。情報ワード３０２は、１［ビット］の情報ワード識別子３０３、および、フリービットフィールド（元の命令ワード３００と同一サイクルで実行される複数の命令ワードの拡張フィールドＥＦの結合）ＦＦを含む。【００３７】
なお、個々の命令が即値オペランドを使用するかどうかは、たとえば、オペランド指定ビットフィールド内の所定オペランドのビットパタンで指定可能である。すなわち、オペランドのビットパタンの一つが例えばオール１のような特定のビットパタンである場合に、レジスタ番号指定ではなく即値オペランドを使用する命令であるという命令体系が可能である。即値オペランドを使用する命令は、自命令ワード内に即値オペランドを使用するように実行される。【００３８】
次に、情報ワード３０２のフォーマットについて図面を参照して説明する。図６Ａは、情報ワード３０２が、１ワードであり、かつ、即値オペランドが含まれない超過オペランドのみの場合の、フォーマットの例を示す説明図である。図６Ｂ、図６Ｃは、情報ワード３０２、情報ワード３０５の２つにわたって、超過オペランド、および、即値オペランドが使用される場合の、フォーマットの例を示す説明図である。【００３９】
図６Ａを参照すると、情報ワード３０２は、右詰で、命令の種類Ｏ、Ｎ、Ｍに対応するＣ［ビット］、Ｂ［ビット］、および、Ａ［ビット］の超過オペランドを含む。なお、超過オペランドの順番は、命令供給部１０２から出力される命令ワードの順番にしたがって決めることができる。図６Ａの例は、命令コードが、最初（左側）に種類Ｍ、次（中央）に種類Ｎ、最後（右側）に種類Ｏの順番に配置される場合を示している。後述する図６Ｂおよび図６Ｃの例も同様である。【００４０】
図６Ｂを参照すると、情報ワード３０２、情報ワード３０５は、右詰めで、命令の種類Ｏに対応する「Ｃ［ビット］の超過オペランド、Ｅ２［ビット］の即値オペランド」、命令の種類Ｎに対応する「Ｂ［ビット］の超過オペランド、Ｅ１［ビット］の即値オペランド」、および、命令の種類Ｍに対応する「Ａ［ビット］の超過オペランド、Ｅ１［ビット］の即値オペランド」を含む。【００４１】
ここで、ある１つ元の命令の超過オペランド、または、即値オペランドが、情報ワード３０２、情報ワード３０５に分割されて含まれることが可能である。【００４２】
図６Ｃを参照すると、情報ワード３０２は、右詰で、命令の種類Ｏ、Ｎ、Ｍに対応するＣ［ビット］、Ｂ［ビット］、および、Ａ［ビット］の超過オペランドを含む。情報ワード３０５は、命令の種類Ｏ、Ｎ、Ｍに対応するＥ２［ビット］、Ｅ１［ビット］、Ｅ０［ビット］の即値オペランドを含む。以上は、例であり、他のフォーマットが可能である。【００４３】
次に、本発明の第２の実施例の動作について図面を参照して説明する。本発明の第２の実施例は、即値を利用しない３命令以上を同一サイクルで実行する命令体系の場合である。また、説明を簡単にするために、Ａ、Ｂ、Ｃの３つの合計よりも常にＹは大きい場合について説明する。情報ワードは、図６Ａの場合である。【００４４】
図７は、本発明の第２の実施例の動作を示す説明図である。図７を参照すると、命令供給部１０２から同サイクルで、固定語長Ｙの種類Ｍの命令ワード４００、種類Ｎの命令ワード４０１、種類Ｏの命令ワード４０２、および、情報ワード４０３が、命令パス１０４を介して出力される。説明を簡単にするために、情報ワード４０３は、最後尾、すなわち、命令ワード４００〜命令ワード４０２の右側に配置される場合について説明する。【００４５】
命令デコーダ１０３の命令ワード復元部２００は、命令ワード４００〜命令ワード４０２、情報ワード４０３を入力すると、各ワードの情報ワード識別子３０３により各ワードが、情報ワードであるのか、命令ワードであるのかを判別する。【００４６】
ワードが情報ワードであれば、命令ワード復元部２００は、フリービットフィールドＦＦの内容を元の各命令ワードの復元に使用する。ワードが命令ワードであれば、命令ワード復元部２００は、そのオペコード３０４から命令の種類を判別する。次に、命令ワード復元部２００は、必要に応じ、同一サイクルに存在する情報ワード４０３のフリービットフィールドＦＦから命令の種類に応じたビット数の超過オペランドを取り出し、当該命令ワードの適当な箇所（図７では末尾）に付加することにより元の命令ワードを復元する。【００４７】
すなわち、命令ワード復元部２００は、Ｍ、Ｎ、Ｏの３種類の命令ワード４００、４０１、命令ワード４０２を、それぞれ、語長Ｙ＋Ａ［ビット］、Ｙ＋Ｂ［ビット］、Ｙ＋Ｃ［ビット］の元の命令ワード４０５、元の命令ワード４０６、元の命令ワード４０７に復元する。次に、命令ワード復元部２００は、復元した元の命令ワード４０５、元の命令ワード４０６、元の命令ワード４０７を、それぞれ、個別命令デコード部２０１、個別命令デコード部２０２、個別命令デコード部２０３へ出力する。【００４８】
個別命令デコード部２０１〜個別命令デコード部２０３は、それぞれ、元の命令ワード４０５〜元の命令ワード４０７をデコードし、各命令を実行するための制御情報を制御情報パス１０５〜制御情報パス１０７を介して実行部１０８〜実行部１１０に出力する。【００４９】
本発明の第２の実施例は、同一サイクルで実行される複数の命令ワードに属する超過オペランドが集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、プロセッサ１００に対する動作指定効率を低下させずに、メモリの利用率効率を高め、メモリの消費量を削減できる。【００５０】
次に、本発明の第３の実施例について図面を参照して詳細に説明する。本発明の第３の実施例のプロセッサ１００は、本発明の第２の実施例とは異なり、２つの情報ワードを使用し、即値オペランドを使用する。本発明の第３の実施例の構成は、本発明の第２の実施例の図２、図３の構成と同一である。本発明の第３の実施例は、即値を利用する３命令以上を同一サイクルで実行する。【００５１】
次に、本発明の第３の実施例の動作について図面を参照して説明する。説明を簡単にするために、Ｙは、常に、Ａ、Ｂ、Ｃ、Ｅ０、Ｅ１、および、Ｅ２のいずれか３つの合計よりも大きく、かつ、いずれか４つの合計よりも小さい場合について説明する。情報ワードは、図６Ｂの場合である。【００５２】
図８は、本発明の第３の実施例の動作を示す説明図である。図８を参照すると、命令供給部１０２から同サイクルで、固定語長Ｙの種類Ｍの命令ワード５００、種類Ｎの命令ワード５０１、種類Ｏの命令ワード５０２、情報ワード５０３、および、情報ワード５０４が、命令パス１０４を介して出力される。説明を簡単にするために、情報ワード５０３、情報ワード５０４は、最後尾、すなわち、命令ワード５００〜命令ワード５０２の右側に配置される場合について説明する。【００５３】
命令デコーダ１０３の命令ワード復元部２００は、命令ワード５００〜命令ワード５０２、情報ワード５０３、情報ワード５０４を入力すると、各ワードの情報ワード識別子３０３により各ワードが、情報ワードであるのか、命令ワードであるのかを判別する。【００５４】
ワードが情報ワードであれば、命令ワード復元部２００は、フリービットフィールドＦＦの内容を元の各命令ワードの復元に使用する。ワードが命令ワードであれば、命令ワード復元部２００は、そのオペコード３０４から命令の種類を判別する。次に、命令ワード復元部２００は、必要に応じ、同一サイクルに存在する情報ワード５０３、および、情報ワード５０４のフリービットフィールドＦＦから命令の種類に応じたビット数の超過オペランド、即値オペランドを取り出し、当該命令ワードの適当な箇所（図８では末尾）に挿入することにより元の命令ワードを復元する。【００５５】
すなわち、命令ワード復元部２００は、Ｍ、Ｎ、Ｏの３種類の命令ワード５００、５０１、命令ワード５０２を、それぞれ、語長Ｙ＋Ａ＋Ｅ０［ビット］、Ｙ＋Ｂ＋Ｅ１［ビット］、Ｙ＋Ｃ＋Ｅ２［ビット］の元の命令ワード５０５、元の命令ワード５０６、元の命令ワード５０７に復元する。次に、命令ワード復元部２００は、復元した元の命令ワード５０５、元の命令ワード５０６、元の命令ワード５０７を、それぞれ、個別命令デコード部２０１、個別命令デコード部２０２、個別命令デコード部２０３へ出力する。【００５６】
個別命令デコード部２０１〜個別命令デコード部２０３は、それぞれ、元の命令ワード５０５〜元の命令ワード５０７をデコードし、各命令を実行するための制御情報を制御情報パス１０５〜制御情報パス１０７を介して実行部１０８〜実行部１１０に出力する。【００５７】
次に、本発明の第３の実施例の動作について、さらに詳細に説明する。なお、Ｍ、Ｎ、Ｏの各種類の命令が常に情報ワードを必要とし、情報ワードはサイクル毎に必ず一つ以上存在する場合について説明する。【００５８】
たとえば、１個以上の情報ワードをサイクル毎に実行されるワード群８００の最後尾（右側）に配置すれば、同一サイクルに実行される命令かどうかを区切るためにも情報ワードを利用できる。したがって、同一サイクルで、３に満たない命令数の命令ワードを実行する場合でも、別途命令ワード内に、当該サイクルでの実行命令数を表現する専用ビットフィールドを設ける必要がない。そこで、以下では、情報ワードを常にサイクル毎に実行される命令群の最後尾に配置した場合について説明する。【００５９】
図９は命令ワード復元部２００の動作を示すフローチャートである。図９を参照すると、命令デコーダ１０３の命令ワード復元部２００は、同一サイクルで、ワード群８００を入力する（図９ステップＳ１）。ワード群８００は、同一サイクルで実行される命令ワード、および、必要数だけの情報ワードからなる。ここでは、ワード群８００は、Ｙ［ビット］×５［ワード］であるとする。また、説明を簡単にするためにＹは定数であるとする。【００６０】
次に、命令ワード復元部２００は、ワード群８００の最後尾に配置されている第５ワード（すなわち、情報ワード）を現ワードとする（ステップＳ２）。次に、命令ワード復元部２００は、現ワードに対してステップＳ３〜ステップＳ６の処理を行う。【００６１】
命令ワード復元部２００は、次に、ステップＳ７〜ステップＳ８の処理を行い、現ワードを更新し、次々と、前の方のワードを対象にステップＳ３〜ステップＳ６の処理を行う。【００６２】
命令ワード復元部２００は、情報ワード識別子３０３により、現ワードが情報ワードであると判別すると（ステップＳ３／Ｙｅｓ）、現ワードのフリービットフィールドＦＦを後続する命令ワードの処理に利用できるように準備する。すなわち、命令ワード復元部２００は、現ワードが最初の情報ワードならば、そのフリービットフィールドＦＦの最後尾に、フリービットフィールド現在位置を設定する。また、命令ワード復元部２００は、現ワードが最初でない情報ワードならば、既存のフリービットフィールドＦＦの前に、その情報ワードのフリービットフィールドＦＦを追加する（ステップＳ１０）。【００６３】
命令ワード復元部２００は、現ワードが情報ワードでないと判別すると（ステップＳ３／Ｎｏ）、現ワードである命令ワードの種類を判別する（ステップＳ４、Ｓ５、または、Ｓ６）。命令ワード復元部２００は、フリービットフィールド現在位置から、命令の種類に対応するビット長のビットフィールド（超過オペランド、即値オペランド）を取り出し、命令ワード（現ワード）の末尾に追加し、命令ワード（現ワード）をその本来の語長の元の命令ワードに復元する。また、命令ワード復元部２００は、フリービットフィールド現在位置を取り出したビットフィールドのビット長だけ前にシフトするように更新する（ステップＳ１１、Ｓ１２、または、Ｓ１３）。これらの動作により、元の各命令ワードの命令語長が命令ワード復元部２００によって復元される。【００６４】
本発明の第３の実施例は、同一サイクルで実行される複数の命令ワードに属する超過オペランド、および、即値オペランドが集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、プロセッサ１００に対する動作指定効率を低下させずに、メモリの利用率効率を高め、メモリの消費量を削減できる。【００６５】
次に、本発明の第１、第２、または第３の実施例の具体例について説明する。本具体例のマイクロプロセッサは、２項命令（種類Ｍ）、単項命令（種類Ｎ）、および、明示的にオペランドを取らない無項命令（種類Ｏ）を含む命令体系を実行する。本具体例のマイクロプロセッサは、常時、３命令を同一サイクルで実行する。【００６６】
情報ワード識別子のビット数Ｓが１［ビット］、オペコードのビット数ＯＰが７［ビット］である。また、オペランドに指定可能なレジスタ数が３２個であり、各レジスタを指定するレジスタ指定のビット数ＲＥＧは、５［ビット］である。以下、２項命令、単項命令、無項命令の指定レジスタ数がそれぞれ３（ソース２つとデスティネーション１つ）、２（ソース１つとデスティネーション１つ）、１（デスティネーション１つ）、即値フィールドの必要ビット数ＩＭＭを１〜１６とした場合について説明する。【００６７】
即値オペランドを使用しないケースでは、２項命令（種類Ｍ）、単項命令（種類Ｎ）、および、無項命令（種類Ｏ）の最適命令語長は、それぞれ、Ｓ＋ＯＰ＋ＲＥＧ×３＝１＋７＋５×３＝２３［ビット］、Ｓ＋ＯＰ＋ＲＥＧ×２＝１＋７＋５×２＝１８［ビット］、および、Ｓ＋ＯＰ＋ＲＥＧ×１＝１＋７＋５×１＝１３［ビット］である。【００６８】
また、即値オペランドを使用するケースでは、２項命令（種類Ｍ）、単項命令（種類Ｎ）、および、無項命令（種類Ｏ）の最適命令語長は、それぞれ、Ｓ＋ＯＰ＋ＲＥＧ×３＋ＩＭＭ＝１＋７＋５×３＋１６＝３９［ビット］、Ｓ＋ＯＰ＋ＲＥＧ×２＋ＩＭＭ＝１＋７＋５×２＋１６＝３４［ビット］、および、Ｓ＋ＯＰ＋ＲＥＧ×１＋ＩＭＭ＝１＋７＋５×１＋１６＝２９［ビット］である。【００６９】
この条件下で、単一命令語長を用いるという一般的な手法（関連手法１と呼ぶ）で、プロセッサ性能を重視して命令語長が決定される場合には、命令語長は、最も長い最適語長の２項命令に合わせるように３９［ビット］固定語長である。また、基本語長、および、その倍の語長の２種類の語長を用いるという可変語長方式に基づく関連手法（関連手法２と呼ぶ。たとえば、［文献１］）で、プロセッサ性能を重視し命令語長が決定される場合には、命令語長は、基本語長の２９［ビット］およびその倍の５８［ビット］の２種類の語長である。【００７０】
これに対し、本発明の具体例では、たとえば、固定語長Ｙ＝１８［ビット］とすると、下記のようになる。即値オペランドを使用しない場合（図７に対応）では、２項命令（種類Ｍ、上記より２３［ビット］）の超過オペランドのビット数Ａ、単項命令（種類Ｎ、上記より１８［ビット］）の超過オペランドのビット数Ｂ、および、無項命令（種類Ｏ、上記より１３［ビット］）の超過オペランドのビット数Ｃは、それぞれ、Ａ＝２３−１８＝５［ビット］、Ｂ＝１８−１８＝０［ビット］、Ｃ＝０［ビット］（１８＞１３なので）とすればよい。即値オペランドを参照する場合（図８に対応）では、Ａ、Ｂ、Ｃに加え、さらに、Ｅ０、Ｅ１、Ｅ２を最大１６［ビット］とすればよい。【００７１】
その際、Ｍ、Ｎ、Ｏの３種類の命令に関する全てのあり得る命令発行パタンにおいて、Ａ、Ｂ、Ｃのうちの任意の３つの合計の最大値は、Ａ＋Ａ＋Ａ＝５＋５＋５＝１５［ビット］である。この最大値１５［ビット］は、固定語長Ｙ−１＝１８−１＝１７［ビット］よりも小さいので、即値オペランドを使用しない命令の場合は、常時、１ワード分の情報ワードのみをサイクル毎に発行すればよい。【００７２】
次に、即値オペランドを使用する命令と、即値オペランドを使用しない命令とが混在する（すなわち、図７と図８との状況が混在する）場合について説明する。表１は、混在の場合の命令発行パタンと１ワード目の情報ワード内で即値オペランドとして利用可能なビット数との関係を示す表である。【００７３】
【表１】
0005168143.tif 000002
【００７４】
混在の場合、必ずしも、２ワード目の情報ワードが必要となるわけではない。なぜならば、命令の発行パタンによっては、表１に示すように、１ワード目の情報ワード内に超過オペランドとして未使用のフリービットフィールドＦＦが存在し、その未使用のフリービットフィールドＦＦが即値オペランドに利用できるからである。【００７５】
すなわち、それらの未使用のフリービットフィールドＦＦが、命令に必要な即値オペランドのビット数以内であれば、新たにもう１ワードの情報ワードを当該サイクル用として追加する必要がないことになる。このように、本具体例は、同一サイクルに実行される即値オペランドを使用する命令が存在する場合であっても、必ずしも情報ワードの数を増やす必要がない。【００７６】
本具体例と、単一命令語長を用いる上記関連手法１、および、２種類の語長を用いる可変語長を用いる上記関連手法２とを詳細に比較すると、本具体例の効果は以下のようになる。【００７７】
関連手法１の場合は、サイクル毎に、常時３９×３＝１１７［ビット］が必要である。また、関連手法２の場合は、サイクル毎に、８７［ビット］（短い方の語長の命令が、３ワードの場合：２９×３）〜１７４［ビット］（長い方の語長の命令が、３ワードの場合＝５８×３）が必要である。１８［ビット］の固定語長を用いた本具体例の場合、同一サイクルにおいて３つの命令が同時に有効桁１６［ビット］の即値オペランドを利用する稀なケースでは、１８×（３＋４）＝１２６［ビット］を消費する。【００７８】
ここで、上記の‘４’は、以下のように算出する。１命令ワードの超過オペランドは、４［ビット］であり、即値オペランドの最大値が１６［ビット］なので、情報ワード全体では、（４＋１６）×３＝６３［ビット］が必要である。３＜（６３／１７）＜４なので、最大４ワードの情報ワードが１サイクルで必要である。【００７９】
ほとんどのケースでは、３つの命令ワードと１〜２つの情報ワードの計４〜５ワード、すなわち、１８×４＝７２［ビット］〜１８×５＝９０［ビット］程度のビットが必要である。【００８０】
したがって、本具体例は、関連手法１と比べると、平均的には、プログラムメモリ消費量が（１１７−７２）／１１７＝３８［％］〜（１１７−９０）／１１７＝２２［％］程度削減できる。また、関連手法２において、平均サイクル毎に必要なビット数が、８７［ビット］と１７４［ビット］との平均である１３０［ビット］であるとすると、本具体例はそれと比べ、平均的には、プログラムメモリ消費量が、（１３０−７２）／１３０＝４５［％］〜（１３０−９０）／１３０＝３０［％］程度削減できる。【００８１】
次に、第２の実施例の具体例の構成について図面を参照して説明する。図１０は、本発明の第２の実施例の具体例の命令ワード復元部２００の一部の構成を示すブロック図である。図１０を参照すると、命令ワード復元部２００は、デコーダ６１０、デコーダ６１１、デコーダ６１２、選択信号６３０、選択信号６３１、選択信号６３２、選択回路６２０、選択回路６２１、および、選択回路６２２を含む。【００８２】
デコーダ６１２は、第３命令ワード６０２のオペコードをデコードし、第３命令ワード６０２の超過オペランドを選択するための選択信号６３２を出力する。デコーダ６１１は、第２命令ワード６０１、および、第３命令ワード６０２のオペコードをデコードし、第２命令ワード６０１の超過オペランドを選択するための選択信号６３１を出力する。デコーダ６１０は、第１命令ワード６００、第２命令ワード６０１、および、第３命令ワード６０２のオペコードをデコードし、第１命令ワード６００の超過オペランドを選択するための選択信号６３０を出力する。【００８３】
たとえば、第３命令が種類Ｍ、種類Ｎ、種類Ｏであれば、デコーダ６１２は、それぞれ、情報ワード６０３の最後尾からＡ［ビット］、Ｂ［ビット］、Ｃ［ビット］を選択するように選択信号６３２を出力する。また、たとえば、第３命令が種類Ｏであり、第２命令が種類Ｎであれば、デコーダ６１１は、情報ワード６０３の最後尾からＣ［ビット］前にずれた位置からＢ［ビット］を選択するように選択信号６３１を出力する。また、たとえば、第３命令が種類Ｏであり、第２命令が種類Ｎであり、第１命令が種類Ｍであれば、デコーダ６１０は、情報ワード６０３の最後尾からＢ＋Ｃ［ビット］前にずれた位置からＡ［ビット］を選択するように選択信号６３０を出力する。【００８４】
選択回路６２０（１８ウェイ）、選択回路６２１（９ウェイ）、選択回路６２２（３ウェイ）は、それぞれ、選択信号６３０、選択信号６３１、選択信号６３２にしたがって、情報ワード６０３から第１命令ワード６００、第２命令ワード６０１、第３命令ワード６０２の超過オペランドを選択し出力する。【００８５】
図示しないが、プロセッサ１００は、マイクロプログラム制御方式の構成が可能である。すなわち、プロセッサ１００が命令制御プログラムにしたがって動作することにより、上述した命令供給部１０２、命令デコーダ１０３、および、実行部１０８〜１１０の各機能部を実現することができる。この命令制御プログラムは、光ディスクや磁気ディスクなどの機械読み取り可能な記録媒体に記録した状態で提供することができる。【００８６】
同一サイクルでｎ個の命令が実行される場合には、第１、…、第ｉ、…、第ｎのデコーダ、第１、…、第ｉ、…、第ｎの選択回路が必要になる。第ｉのデコーダは、第ｉ、第ｉ＋１、…、および、第ｎの命令のオペコードを入力し、第ｉの命令ワードに対応する超過オペランド、または、即値オペランドを選択するための第ｉの選択信号を出力する。第ｉの選択回路は、第ｉの選択信号にしたがって情報ワードの該当する位置から第ｉの命令に対応する超過オペランド、または、即値オペランドを選択する。【００８７】
また、１８ウェイの選択回路６２等の遅延時間が大であり、実行時間が、１サイクルに収まらない場合には、パイプラインステージの段数の増加により、本具体例が実現できる。【００８８】
その他、他の具体例として、本発明を、関連手法２である可変語長命令方式と組み合わせて実施することが考えられる。その場合、情報ワードの語長を必要に応じて基本語長としたり、あるいは用意されている他の整数倍の語長としたりすることが可能となるため、さらにプログラムメモリ消費量が削減できる。【００８９】
たとえば、最小語長がＺ［ビット］で、２種類の語長を持つ可変語長方式の場合、図９において、情報ワードの語長Ｙのみが、サイクル毎にＺ［ビット］であったり２Ｚ［ビット］であったりする。この場合、情報ワード識別子３０３のビット数を増やすか、あるいは、別途語長を指定するビットフィールドを命令ワード、または、情報ワード内に追加する必要がある。【００９０】
以上のように、上述した実施例のプロセッサ１００は、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを、実行時に分解し各命令ワードの元の構成を復元する命令デコーダ１０３を含む。具体的には、命令デコーダ１０３は、情報ワードからビットフィールドを取り出し、これらのビットフィールドを各命令ワードのそれぞれの所定ビット位置に挿入することにより、各命令ワードを復元する。さらに詳しく言えば、命令デコーダ１０３は、情報ワードからビットフィールドを取り出し、これらのビットフィールドを各命令ワードのそれぞれの先頭あるいは、末尾、あるいは、それぞれのオペコードに依存して決まる所定位置に挿入することにより、各命令ワードを復元する。【００９１】
また、プロセッサ１００は、複数の命令ワード、および、情報ワードを同一サイクルで出力する命令供給部１０２と、復元した各命令ワードをそれぞれデコードし、各命令ワードを実行するための制御情報を出力する命令デコーダ１０３と、制御情報に基づいて各命令を実行する１以上の実行部１０８〜１１０とを含む。【００９２】
命令供給部１０２は、同一サイクルで実行される最大命令数がｎであり、ｎ［個］の命令ワードの次に情報ワードがあると、ｎ［個］の命令の最後尾に情報ワードを配置して出力し、ｎ［個］に満たないｍ［個］の命令ワードの次に情報ワードがあると、ｎ−ｍ［個］のＮＯＰ命令をｎ［個］の命令ワードの次に挿入するようにしてもよい。【００９３】
ここで、情報ワードとして集められるビットフィールドの一部が、命令ワードの種類によって決まる長さの超過オペランド、または、即値オペランドであってもよい。この場合、命令デコーダ１０３は、第ｉ、第ｉ＋１、…、および、第ｎの命令のオペコードを入力し、第ｉの命令ワードに対応する超過オペランド、または、即値オペランドを選択するための第ｉの選択信号を出力する第ｉのデコーダ６１０〜６１２と、第ｉの選択信号にしたがって情報ワードの該当する位置から第ｉの命令に対応する超過オペランド、または、即値オペランドを選択する第ｉの選択回路６２０〜６２２とを備えていてもよい。【００９４】
以上、本発明の実施例および具体例を図面により詳述してきたが、具体的な構成は上記実施例および具体例に限られるものではなく、この発明の要旨を逸脱しない範囲の設計の変更などがあっても、この発明に含まれる。
【産業上の利用可能性】
【００９５】
本発明は、性能を維持したままプログラムメモリの消費ビット数を削減できる、単一サイクルに複数命令を発行可能な高性能プロセッサ、たとえば、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）型のプロセッサの実現に適用できる。
【図１】
0005168143.tif 000003
【図２】
0005168143.tif 000004
【図３】
0005168143.tif 000005
【図４】
0005168143.tif 000006
【図５】
0005168143.tif 000007
【図６Ａ】
0005168143.tif 000008
【図６Ｂ】
0005168143.tif 000009
【図６Ｃ】
0005168143.tif 000010
【図７】
0005168143.tif 000011
【図８】
0005168143.tif 000012
【図９】
0005168143.tif 000013
【図１０】
0005168143.tif 000014