(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
命令コードを格納するメモリと、
命令コード保持手段と、
前記命令コード保持手段に保持された命令コードを実行可能な複数の演算ユニットと、
前記メモリに格納された命令コード中の指定情報に基づき、前記命令コードを実行する複数の演算ユニットを指定して、当該指定された複数の演算ユニット数だけ前記命令コードと同じ命令コード作成し、当該作成された命令コードを前記命令コード保持手段へ投入する手段とを有することを特徴とするプロセッサ。
【請求項２】
プロセッサであって、
命令コードを格納するメモリと、
命令コード保持手段と、
前記命令コード保持手段に保持された命令コードを実行する演算器を有する複数の演算ユニットと、
前記メモリに格納された命令コード中の指定情報に基づき、前記命令コードを実行する複数の演算器を指定して、当該指定された複数の演算器数だけ前記命令コードと同じ命令コード作成し、当該作成された命令コードを前記命令コード保持手段へ投入する手段とを有することを特徴とするプロセッサ。
【請求項３】
命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードにしたがって並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、
前記メモリに格納された命令コード中に、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドと、該命令コードを実行する演算ユニットと該命令コードと同一の命令を実行させる他の演算ユニットを指定する情報を有し、該フィールドを解析して前記実行モードが有効となっている命令の少なくともオペコードとオペランドとを複数の演算ユニットのうちで前記指定情報により指定された演算ユニットおよび他の演算ユニットへ投入する解析手段を設け、同一種類の演算を前記指定された複数の演算ユニットにおいて実行可能に構成したことを特徴とするプロセッサ。
【請求項４】
命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードに従って並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、
前記メモリに格納された命令コード中に、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドと、該命令コードを実行する演算ユニットと該命令コードと同一の命令を実行させる他の演算ユニットを指定する演算ユニット指定フィールドとを有し、該フィールドを解析して前記実行モードが有効となっている命令の少なくともオペコードとオペランドとを、前記演算ユニット指定フィールドで指定された演算ユニットおよび他の演算ユニットへ投入する解析手段を設け、前記指定された演算ユニットにおいて前記指定情報で指定した数の同一種類の演算を実行可能に構成したことを特徴とするプロセッサ。
【請求項５】
前記各演算ユニットが固有のレジスタファイルを有することを特徴とする請求項３又は４記載のプロセッサ。
【請求項６】
前記各演算ユニットが固有のレジスタファイルを有し、オペランドフィールドが各演算ユニット固有のレジスタファイルの中のレジスタ指定することにより、演算データが各演算ユニットで異なることを特徴とする請求項３又は４記載のプロセッサ。
【請求項７】
前記各演算ユニットが共通のレジスタファイルを有することを特徴とする請求項３又は４記載のプロセッサ。
【請求項８】
前記各演算ユニットが共通のレジスタファイルを有し、該レジスタファイルの中からレジスタ番号を指定するオペランドフィールドを有し、該オペランドフィールドの値に、指定する演算ユニットに固有のオフセット値を加えることで、各演算ユニットが異なるレジスタを使用可能にして、異なる演算データで演算可能に構成したことを特徴とする請求項３又は４記載のプロセッサ。
【請求項９】
命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、複数の演算ユニットとを有するプロセッサであって、
前記命令コードは演算ユニット数に対応する複数フィールドから構成し、この命令コード中の任意の一つのフィールドにおいて、複数の演算ユニットを制御することを示す制御情報と各フィールドが対応する演算ユニットを指定するフィールド情報とを有し、該フィールド情報と前記制御情報を解析して前記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して前記フィールドを投入する解析手段を設け、前記命令コード中の一つのフィールドが複数の演算ユニットを制御して前記演算ユニット数よりも少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサ。
【請求項１０】
命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、複数の演算ユニットとを有するプロセッサであって、
前記命令コードは演算ユニット数に対応する複数フィールドから構成し、この命令コード中の任意の一つのフィールドが複数の演算ユニットを制御することを示す制御情報と前記命令コード中に存在するフィールド数を示すヘッダ情報とを前記メモリに格納しておき、前記ヘッダ情報と前記制御情報を解析して前記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して前記フィールドを投入する解析手段を設け、前記命令コード中の一つのフィールドが複数の演算ユニットを制御して前記ヘッダ情報を用いて少ないフィールド数で構成した短い命令コートで複数演算が実行可能に構成したことを特徴とするプロセッサ。
【請求項１１】
命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された情報で制御される少なくとも一つの演算器及び該演算器のオペランド情報を格納するレジスタファイルで構成された複数の演算ユニットとを備えたプロセッサであって、
前記命令コードは演算ユニット数に対応する複数フィールドから構成してこの一つの命令コードで複数の演算ユニットを操作可能に構成し、前記全ての演算ユニット内に、同一機能を有する演算器を少なくとも一つ設けることで、全ての各演算ユニットが同一の演算を実行可能に構成したことを特徴とするプロセッサ。
【請求項１２】
命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した情報で制御される少なくとも一つの演算器及び該演算器のオペランド情報を格納するレジスタファイルで構成した複数の演算ユニットとを備えたプロセッサであって、
前記命令コードは演算ユニット数に対応する複数フィールドから構成し、前記全ての演算ユニット内に、同一機能を有する演算器を少なくとも一つ設け、更に前記各演算ユニット内に前記レジスタファイル内のレジスタで指定不可能なビット幅の広いデータタイプを保持するための特殊レジスタを設け、前記レジスタファイル内のレジスタで指定可能なビット幅のデータタイプと前記特殊レジスタに格納したデータタイプの両方の演算処理を可能に構成したことを特徴とするプロセッサ。
【請求項１３】
複数の演算ユニットの実行を指示する指定情報を有する命令コードを格納するメモリと、該メモリに格納された命令コード中に有する指定情報を解析して命令コードが指定する複数の演算ユニットを決定する解析手段と、該解析手段で決定された複数の演算ユニットを指定する命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された命令コードに従って、各々が並列に演算を実行する複数の演算ユニットとを備えたことを特徴とするプロセッサ。
【請求項１４】
複数の演算ユニットの実行を指示する指定情報を有する命令コードを格納するメモリと、該メモリに格納された命令コード中に有する指定情報を解析して単一命令コードで複数命令に相当する演算を実行するように前記単一命令コードが指定する複数の演算ユニットを決定する解析手段と、該解析手段で決定された複数の演算ユニットを指定する単一命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された単一命令コードに従って、各々が並列に演算を実行する複数の演算ユニットとを備えたことを特徴とするプロセッサ。
【請求項１５】
前記複数の演算ユニットの各々は、異なる種類の演算を実行するように構成したことを特徴とする請求項13又は14記載のプロセッサ。
【請求項１６】
演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドを有する命令コードを格納するメモリと、該メモリから読みだした命令コード中のフィールドを解析して前記実行モードが有効となっている命令の少なくともオペコードとオペランドとを複数の演算ユニットへ投入する解析手段と、該解析手段で投入された複数の演算ユニットへの実行モードが有効となっている命令の少なくともオペコードとオペランドとを保持する命令コード保持手段と、該命令コード保持手段に保持された少なくともオペコードとオペランドとに従って同一種類の演算を並列に実行する複数の演算ユニットとを備えたことを特徴とするプロセッサ。
【請求項１７】
演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドと演算ユニットを指定する演算ユニット指定フィールドとを有する命令コードを格納するメモリと、該メモリから読みだしたフィールドを解析して前記実行モードが有効となっている命令の少なくともオペコードとオペランドとを、演算ユニット指定フィールドで明示された演算ユニットへ投入する解析手段と、該解析手段で投入された演算ユニット指定フィールドで指定された演算ユニットへの実行モードが有効となっている命令の少なくともオペコードとオペランドとを保持する命令コード保持手段と、該命令コード保持手段に保持された少なくともオペコードとオペランドとに従って前記演算ユニット指定フィールドで指定された数の同一種類の演算を並列に実行可能に構成した複数の演算ユニットとを備えたことを特徴とするプロセッサ。
【請求項１８】
前記各演算ユニットが固有のレジスタファイルを有することを特徴とする請求項16又は17記載のプロセッサ。
【請求項１９】
前記各演算ユニットが固有のレジスタファイルを有し、オペランドフィールドが各演算ユニット固有のレジスタファイルの中のレジスタ指定することにより、演算データが各演算ユニットで異なることを特徴とする請求項16又は17記載のプロセッサ。
【請求項２０】
前記各演算ユニットが共通のレジスタファイルを有することを特徴とする請求項16又は17記載のプロセッサ。
【請求項２１】
前記各演算ユニットが共通のレジスタファイルを有し、該レジスタファイルの中からレジスタ番号を指定するオペランドフィールドを有し、該オペランドフィールドの値に、指定する演算ユニットに固有のオフセット値を加えることで、各演算ユニットが異なるレジスタを使用可能にして、異なる演算データで演算可能に構成したことを特徴とする請求項16又は17記載のプロセッサ。
【請求項２２】
演算ユニット数に対応する複数フィールドから構成され、この中の任意の一つのフィールドにおいて、複数の演算ユニットを制御することを示す制御情報と各フィールドが対応する演算ユニットを指定するフィールド情報とを有する命令コードを格納するメモリと、該メモリから読みだした命令コードのフィールド情報と前記制御情報を解析して前記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して前記フィールドを投入する解析手段と、該解析手段で前記フィールドを保持する命令コード保持手段と、該命令コード保持手段に保持されたフィールドに従って並列演算を実行する複数の演算ユニットとを備え、前記命令コード中の一つのフィールドが前記複数の演算ユニットを制御して前記演算ユニット数よりも少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサ。
【請求項２３】
演算ユニット数に対応する複数フィールドから構成され、この中の任意の一つのフィールドが複数の演算ユニットを制御することを示す制御情報を有する命令コードと該命令コード中に存在するフィールド数を示すヘッダ情報とを格納するメモリと、該メモリから読みだした前記ヘッダ情報と前記制御情報を解析して上記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して前記フィールドを投入する解析手段と、該解析手段で投入されたフィールドを保持する命令コード保持手段と、該命令コード保持手段に保持されたフィールドに従って並列演算を実行する複数の演算ユニットとを備え、前記命令コード中の一つのフィールドが前記複数の演算ユニットを制御して前記ヘッダ情報を用いて少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサ。
【請求項２４】
前記解析手段には、前記メモリから圧縮された命令コードを読みだして直接実行可能な伸帳命令コードに変換する命令伸帳手段を有することを特徴とする請求項16又は17又は22又は23記載のプロセッサ。
【請求項２５】
前記解析手段には、前記メモリから圧縮された１命令コード中の少なくとも一つのフィールドを読みだして直接実行可能な複数のフィールドからなる伸帳命令コードに変換する命令伸帳手段を有することを特徴とする請求項16又は17又は22又は23記載のプロセッサ。
【請求項２６】
前記解析手段には、前記メモリから圧縮された命令コードをラッチするインストラクションバッファと、前記命令コード中に存在するフィールド数を示すヘッダ情報を解析するフィールドコントローラと、該フィールドコントローラから解析されたフィールドの選択信号及びフィールドの有無を示す信号に基づいて各フィールドの有無を含めて並び替えて伸帳フィールドを形成する各フィールドに対応したセレクタとを備えたことを特徴とする請求項16又は17又は22又は23記載のプロセッサ。
【請求項２７】
前記解析手段には、前記命令コードの各フィールドの実行モード（Ｓモード）とSIMDとを解析して各フィールドの複写元フィールドを選択して決定するSIMDコントローラと、該SIMDコントローラで選択して決定された複写元フィールドを複写して各演算ユニットに対して投入するセレクタとを備えたことを特徴とする請求項16又は17又は22又は23記載のプロセッサ。
【請求項２８】
演算ユニット数に対応する複数フィールドから構成された命令コードを格納するメモリを備え、該メモリから読みだした命令コードを保持する命令コード保持手段を備え、該命令コード保持手段に保持した情報で制御される少なくとも一つの同一機能を有する演算器及び該演算器のオペランド情報を格納するレジスタファイル及び該レジスタファイル内のレジスタで指定不可能なビット幅の広いデータタイプを保持するための特殊レジスタで構成した演算ユニットを複数備え、これら複数の演算ユニットにおいて前記レジスタファイル内のレジスタで指定可能なビット幅のデータタイプと前記特殊レジスタに格納したデータタイプの両方の演算処理を可能に構成したことを特徴とするプロセッサ。
【発明の詳細な説明】
技術分野
本発明は、デジタル動画や３次元グラフィックスのようなマルチメディア処理に適したプロセッサに関わり、特に、並列度の高い処理を少ないコードサイズで実現するプロセッサに関する。
背景技術
近年、パソコン、ワークステーションを中心にして、マルチメディア対応が進展している。マルチメディア対応に必要な機能は、主として、動画圧縮・伸張、音声圧縮・伸張、３次元グラフィックス、及び各種認識処理である。音声処理などには、従来から、数10MOPS性能のDSP（Digital Signal Processor）が利用されている。しかしながら、動画、グラフィックスを扱うには、かなり高性能なプロセッサが要求されている。例えば、動画伸張には約2GOPS、動画圧縮には約50GOPS程度の性能が必要である。この性能を達成するためには、演算器の高性能化が必要である。そのための手法には、動作周波数の高速化と、演算処理の並列化がある。
前者は、比較的単純に高性能化できるが、実装設計の難易度が高く、コスト増の要因になる。そのため、妥当なコストで実現するには、後者の手法も必須になると思われる。一方、後者は、アプリケーションが並列性を有しているかということと、複数演算器を有効な活用するための制御が複雑になることが課題となる。アプリケーションに関しては、上述したマルチメディアに焦点を絞ると、かなり高度な並列性がある。例えば、動画圧縮処理では、８演算が同時に実行可能である。
また、複数演算器を活用するための手法として、スーパースカラやVLIW（Very Long Instruction Word）がある。前者は、汎用プロセッサが主として採用している手法であり、複数演算を同時に実行するためのスケジューリングをプロセッサが行うものである。この手法は、既存の単一処理プロセッサとのオブジェクトとの互換性を確保できるという利点があるものの、スケジューリングをプロセッサが動的に行うので、そのハードウエアが極めて複雑になっている。一方、VLIWは、既存プロセッサとの互換性の確保に難点があるが、命令デコード回路が不要であり、そのハードウエアを簡略化できる利点がある。
VLIWにおけるハードウエア簡略化の要点のひとつは、命令フォーマットにある。その命令フォーマットは、演算器を直接制御するフィールドで構成されており、ハードウエアによる制御を極めて単純なものにする。このような命令フォーマットを有するプロセッサの一例として、特開昭63−98733「演算回路制御方式」がある。この引例では、演算用マイクロ命令が演算用命令であることを指示するオペレーションフィールドと、演算回路の制御用の複数のコントロールビットを設け、複数のコントロールビット各々で直接演算回路の各部の制御を行っている。このように、VLIWは比較的簡単なハードウエアで並列処理を実現できる。
上述したように、スーパースカラやVLIWなどは、性能を引き出すために、処理の並列度を向上する有効な手段である。しかしながら、並列度を十分引き出すためには、コンパイラの助けが必要である。具体的には、ループ展開などの手法が知られている。これは、プログラム中のループ本体を複数回複写（展開）し、展開したループ内のコードをスケジューリングする手法である。すなわち、ループ戻りの分岐間で実行する命令数を増加させると、複数命令を同時に実行できる可能性が大きくなる。
この手法においては、ループを複写するので、コードサイズが大きくなるという課題がある。つまり、コードサイズが大きくなると、プログラムを格納するメモリ容量を大きくとる必要があり、システムのコスト増につながる。また、キャッシュメモリを有するプロセッサにおいては、コードサイズが大きくなるとヒット率が下がり、システム性能が低下する要因になる。
また、プロセッサの並列度を増やすと、演算器の数が増加する。したがって、回路規模が大きくなり、それにしたがって開発工数が増えるという課題がある。パソコン等を中心とするコンピュータ市場においては、適時に新製品を投入することが事業的に重要となっており、開発工数の低減が重要になる。
本発明の目的は、上記課題を解決すべく、性能向上のため処理の並列度を向上しつつ、コードサイズを少なく抑えることができるアーキテクチャを有するプロセッサを提供することにある。
本発明の他の目的は、少ない命令コードで多くの演算を実行可能なプロセッサを提供することである。
本発明の他の目的は、静的なスケジューリングを前提にするVLIW型プロセッサを提供することにある。
本発明の他の目的は、各種アプリケーションに対応可能であり、各演算器の稼動率を高めたVLIW型プロセッサを提供することにある。
本発明の他の目的は、マルチメディア処理など同一種類の演算を繰り返し実行するような並列プロセッサの命令コード量の削減に有効なマルチメディア処理に適するプロセッサを提供することにある。
本発明の他の目的は、コードサイズ削減に有効なスーパースカラ型プロセッサを提供することにある。
本発明の他の目的は、処理の並列度を増加しつつ開発工数を抑えることが可能なプロセッサアーキテクチャを提供することにある。
発明の開示
上記第一の課題を解決するために、本発明は、マルチメディア処理については、同一種類の複数演算を同時に実行するケースが多いことに着目し、一つの命令で複数の演算器を制御できるようなモード情報を命令フォーマット中に用意した。
例えば、複数の演算器を有し一命令で複数演算を実行するために、各演算器を制御するフィールド複数で１命令を構成するVLIWプロセッサにおいては、一つのフィールド中に複数の演算器を制御可能にするモード情報を設けた。さらに、１命令中の一つのフィールドから複数のフィールドを生成する命令伸張回路を設けると共に、同一機能の演算器を複数並べて上記複数の演算器を構成した。
また、スーパースカラプロセッサにおいては、１命令中に複数の演算器を同時に制御するモード情報を設けた。また、一つの命令から複数の命令を生成する命令伸張回路を設けると共に、上記生成した複数の命令を同時に実行できるように同一機能の演算器を複数並べる構成とした。
また、３つ以上の演算器を有するプロセッサにおいては、必要数の演算器だけを使用できるように、同時に実行する演算器を指定する指定情報を設けると共に、前記指定情報にしたがって、VLIWにおいては必要な数の命令フィールドを、スーパースカラプロセッサにおいては命令を生成する機能を上記命令伸張回路を設けた。
上記第二の課題を解決するために、本発明は、同一種類の演算を複数同時に実行するための演算器と、主にこの演算器に供給するオペランドをメモリから読み込む整数演算器と、上記２種類の演算器が使用するオペランドを格納するレジスタファイルとで構成された演算ユニットを複数設けた。
即ち、本発明は、命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードにしたがって並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、上記メモリに格納された命令コード中に、複数の演算ユニットにおける演算の実行を指示する指定情報を有し、該指定情報を解析して命令コードが指定する複数の演算ユニットを決定して上記命令コードを指定された複数の演算ユニットへ投入する解析手段を設け、単一命令コードで上記複数の演算ユニットにおける複数の演算を制御可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードにしたがって並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、上記メモリに格納された命令コード中に、複数の演算ユニットにおける演算の実行を指示する指定情報を有し、該指定情報を解析して命令コードが指定する複数の演算器を決定して上記命令コードを指定された複数の演算ユニットへ投入する解析手段を設け、上記複数の演算ユニットにおいて単一命令コードで複数命令に相当する演算を上記複数の演算ユニットにおいて実行するように構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードにしたがって並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、上記メモリに格納された命令コード中に、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドを有し、該フィールドを解析して上記実行モードが有効となっている命令の少なくともオペコードとオペランドとを複数の演算ユニットへ投入する解析手段を設け、同一種類の演算を上記複数の演算ユニットにおいて実行可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした複数の命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した複数の命令コードに従って並列に演算動作可能な複数の演算ユニットとを有するプロセッサであって、上記メモリに格納された命令コード中に、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドと演算ユニットを指定する演算ユニット指定フィールドとを有し、該フィールドを解析して上記実行モードが有効となっている命令の少なくともオペコードとオペランドとを、演算ユニット指定フィールドで指定された演算ユニットへ投入する解析手段を設け、上記複数の演算ユニットにおいて上記指定した数同一種類の演算を実行可能に構成したことを特徴とするプロセッサである。
また本発明は、上記プロセッサにおいて、上記各演算ユニットが固有のレジスタファイルを有することを特徴とする。また本発明は、上記プロセッサにおいて、上記各演算ユニットが固有のレジスタファイルを有し、オペランドフィールドが各演算ユニット固有のレジスタファイルの中のレジスタ指定することにより、演算データが各演算ユニットで異なることを特徴とする。また本発明は、上記プロセッサにおいて、上記各演算ユニットが共通のレジスタファイルを有することを特徴とする。
また本発明は、上記プロセッサにおいて、上記各演算ユニットが共通のレジスタファイルを有し、該レジスタファイルの中からレジスタ番号を指定するオペランドフィールドを有し、該オペランドフィールドの値に、指定する演算ユニットに固有のオフセット値を加えることで、各演算ユニットが異なるレジスタを使用可能にして、異なる演算データで演算可能に構成したことを特徴とする。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、複数の演算ユニットとを有するプロセッサであって、上記命令コードは上記演算ユニット数に対応する複数フィールドから構成し、この命令コード中の任意の一つのフィールドにおいて、複数の演算ユニットを制御することを示す制御情報と各フィールドが対応する演算ユニットを指定するフィールド情報とを有し、該フィールド情報と上記制御情報を解析して上記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して上記フィールドを投入する解析手段を設け、上記命令コード中の一つのフィールドが複数の演算ユニットを制御して上記演算数よりも少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、複数の演算ユニットとを有するプロセッサであって、上記命令コードは演算ユニット数に対応する複数フィールドから構成し、この命令コード中の任意の一つのフィールドが複数の演算ユニットを制御することを示す制御情報と上記命令コード中に存在するフィールド数を示すヘッダ情報とを上記メモリに格納しておき、上記ヘッダ情報と上記制御情報を解析して上記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して上記フィールドを投入する解析手段を設け、命令コード中の一つのフィールドが複数の演算ユニットを制御して上記ヘッダ情報を用いて少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された情報で制御される少なくとも一つの演算器及び該演算器のオペランド情報を格納するレジスタファイルで構成された複数の演算ユニットとを備えたプロセッサであって、上記命令コードは演算ユニット数に対応する複数フィールドから構成してこの一つの命令コードで複数の演算ユニットを操作可能に構成し、上記全ての演算ユニット内に、同一機能を有する演算器を少なくとも一つ設けることで、全ての各演算ユニットが同一の演算を実行可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コードを格納するメモリと、該メモリから読みだした命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持した情報で制御される少なくとも一つの演算器及び該演算器のオペランド情報を格納するレジスタファイルで構成した複数の演算ユニットとを備えたプロセッサであって、上記命令コードは演算ユニット数に対応する複数フィールドから構成し、上記全ての演算ユニット内に、同一機能を有する演算器を少なくとも一つ設け、更に上記各演算ユニット内に上記レジスタファイル内のレジスタで指定不可能なビット幅の広いデータタイプを保持するための特殊レジスタを設け、上記レジスタファイル内のレジスタで指定可能なビット幅のデータタイプと上記特殊レジスタに格納したデータタイプの両方の演算処理を可能に構成したことを特徴とするプロセッサである。
また本発明は、複数の演算ユニットの実行を指示する指定情報を有する命令コードを格納するメモリと、該メモリに格納された命令コード中に有する指定情報を解析して命令コードが指定する複数の演算ユニットを決定する解析手段と、該解析手段で決定された複数の演算ユニットを指定する命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された命令コードに従って、各々が並列に演算を実行する複数の演算ユニットとを備えたことを特徴とするプロセッサである。
また本発明は、複数の演算ユニットの実行を指示する指定情報を有する命令コードを格納するメモリと、該メモリに格納された命令コード中に有する指定情報を解析して単一命令コードで複数命令に相当する演算を実行するように上記単一命令コードが指定する複数の演算ユニットを決定する解析手段と、該解析手段で決定された複数の演算ユニットを指定する単一命令コードを保持する命令コード保持手段と、該命令コード保持手段に保持された単一命令コードに従って、各々が並列に演算を実行する複数の演算ユニットとを備えたことを特徴とするプロセッサである。
また本発明は、上記プロセッサにおいて、上記複数の演算ユニットの各々は、異なる種類の演算を実行するように構成したことを特徴とする。
また本発明は、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドを有する命令コードを格納するメモリと、該メモリから読みだした命令コード中のフィールドを解析して上記実行モードが有効となっている命令の少なくともオペコードとオペランドとを複数の演算ユニットへ投入する解析手段と、該解析手段で投入された複数の演算ユニットへの実行モードが有効となっている命令の少なくともオペコードとオペランドとを保持する命令コード保持手段と、該命令コード保持手段に保持された少なくともオペコードとオペランドとに従って同一種類の演算を並列に実行する複数の演算ユニットとを備えたことを特徴とするプロセッサである。
また本発明は、演算種類を示すオペコードと、オペランドに加えて、指定情報として実行モードを指定するフィールドと演算ユニットを指定する演算ユニット指定フィールドとを有する命令コードを格納するメモリと、該メモリから読みだしたフィールドを解析して上記実行モードが有効となっている命令の少なくともオペコードとオペランドとを、演算ユニット指定フィールドで指定された演算ユニットへ投入する解析手段と、該解析手段で投入された演算ユニット指定フィールドで指定された演算ユニットへの実行モードが有効となっている命令の少なくともオペコードとオペランドとを保持する命令コード保持手段と、該命令コード保持手段に保持された少なくともオペコードとオペランドとに従って上記指定された数同一種類の演算を並列に実行可能に構成した複数の演算ユニットとを備えたことを特徴とするプロセッサである。
また本発明は、上記プロセッサにおいて、上記各演算ユニットが固有のレジスタファイルを有することを特徴とする。また本発明は、上記プロセッサにおいて、上記各演算ユニットが固有のレジスタファイルを有し、オペランドフィールドが各演算ユニット固有のレジスタファイルの中のレジスタ指定することにより、演算データが各演算ユニットで異なることを特徴とする。また本発明は、上記プロセッサにおいて、上記各演算ユニットが共通のレジスタファイルを有することを特徴とする。また本発明は、上記プロセッサにおいて、上記各演算ユニットが共通のレジスタファイルを有し、該レジスタファイルの中からレジスタ番号を指定するオペランドフィールドを有し、該オペランドフィールドの値に、指定する演算ユニットに固有のオフセット値を加えることで、各演算ユニットが異なるレジスタを使用可能にして、異なる演算データで演算可能に構成したことを特徴とする。
また本発明は、演算ユニット数に対応する複数フィールドから構成され、この中の任意の一つのフィールドにおいて、複数の演算ユニットを制御することを示す制御情報と各フィールドが対応する演算ユニットを指定するフィールド情報とを有する命令コードを格納するメモリと、該メモリから読みだした命令コードのフィールド情報と上記制御情報を解析して上記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して上記フィールドを投入する解析手段と、該解析手段で上記フィールドを保持する命令コード保持手段と、該命令コード保持手段に保持されたフィールドに従って並列演算を実行する複数の演算ユニットとを備え、上記命令コード中の一つのフィールドが上記複数の演算ユニットを制御して上記演算数よりも少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサである。
また本発明は、演算ユニット数に対応する複数フィールドから構成され、この中の任意の一つのフィールドが複数の演算ユニットを制御することを示す制御情報を有する命令コードと該命令コード中に存在するフィールド数を示すヘッダ情報とを格納するメモリと、該メモリから読みだした上記ヘッダ情報と上記制御情報を解析して上記フィールドが制御する演算ユニットを特定し、この特定された演算ユニットに対して上記フィールドを投入する解析手段と、該解析手段で投入されたフィールドを保持する命令コード保持手段と、該命令コード保持手段に保持されたフィールドに従って並列演算を実行する複数の演算ユニットとを備え、上記命令コード中の一つのフィールドが上記複数の演算ユニットを制御して上記ヘッダ情報を用いて少ないフィールド数で構成した短い命令コードで複数演算が実行可能に構成したことを特徴とするプロセッサである。
また本発明は、上記プロセッサにおいて、上記解析手段には、上記メモリから圧縮された命令コードを読みだして直接実行可能な伸帳命令コードに変換する命令伸帳手段を有することを特徴とする。
また本発明は、上記プロセッサにおいて、上記解析手段には、上記メモリから圧縮された１命令コード中の少なくとも一つのフィールドを読みだして直接実行可能な複数のフィールドからなる伸帳命令コードに変換する命令伸帳手段を有することを特徴とする。また本発明は、上記プロセッサにおいて、上記解析手段には、上記メモリから圧縮された命令コードをラッチするインストラクションバッファと、上記命令コード中に存在するフィールド数を示すヘッダ情報を解析するフィールドコントローラと、該フィールドコントローラから解析されたフィールドの選択信号及びフィールドの有無を示す信号に基づいて各フィールドの有無を含めて並び替えて伸帳フィールドを形成する各フィールドに対応したセレクタとを備えたことを特徴とする。また本発明は、上記プロセッサにおいて、上記解析手段には、上記命令コードの各フィールドの実行モード（Ｓモード）とSIMDとを解析して各フィールドの複写元フィールドを選択して決定するSIMDコントローラと、該SIMDコントローラで選択して決定された複写元フィールドを複写して各演算ユニットに対して投入するセレクタとを備えたことを特徴とする。
また本発明は、演算ユニット数に対応する複数フィールドから構成してこの一つで複数の演算ユニットを操作可能に構成した命令コードを格納するメモリを備え、該メモリから読みだした命令コードを保持する命令コード保持手段を備え、該命令コード保持手段に保持された情報で制御される少なくとも一つの同一機能を有する演算器及び該演算器のオペランド情報を格納するレジスタファイルで構成された演算ユニットを複数備え、これら複数の演算ユニットが同一の演算を実行可能に構成したことを特徴とするプロセッサである。
また本発明は、演算ユニット数に対応する複数フィールドから構成された命令コードを格納するメモリを備え、該メモリから読みだした命令コードを保持する命令コード保持手段を備え、該命令コード保持手段に保持した情報で制御される少なくとも一つの同一機能を有する演算器及び該演算器のオペランド情報を格納するレジスタファイル及び該レジスタファイル内のレジスタで指定不可能なビット幅の広いデータタイプを保持するための特殊レジスタで構成した演算ユニットを複数備え、これら複数の演算ユニットにおいて上記レジスタファイル内のレジスタで指定可能なビット幅のデータタイプと上記特殊レジスタに格納したデータタイプの両方の演算処理を可能に構成したことを特徴とするプロセッサである。
また本発明は、命令コード及びデータを格納するメモリと、上記メモリから読みだした複数の命令コードを保持する命令コード保持手段と、上記命令コード保持手段に保持した複数の命令コードにしたがって並列に動作可能な複数の演算ユニットを有するプロセッサであって、複数の演算器と複数アクセスポートレジスタファイルとで演算ユニットを構成し、上記各演算器が、対応するアクセスポートから上記レジスタファイルの内容を読み出して演算可能で、かつ、上記複数の演算ユニットが同一機能であることを特徴とするプロセッサである。
また本発明は、命令コード及びデータを格納するメモリと、上記メモリから読みだした複数の命令コードを保持する命令コード保持手段と、上記命令コード保持手段に保持した複数の命令コードにしたがって並列に動作可能な複数の演算ユニットを有するプロセッサであって、複数の演算器と複数アクセスポートレジスタファイルとで演算ユニットを構成し、上記各演算器が、対応するアクセスポートから上記レジスタファイルの内容を読み出して演算可能で、かつ、上記複数の演算ユニットが同一機能のサブセットを有することを特徴とするプロセッサである。
また本発明は、上記プロセッサにおいて、演算ユニット内の少なくとも一つの演算器が上記メモリと上記レジスタファイル間のデータ転送を行うデータ転送命令を実行可能であることを特徴とする。
本発明によれば、VLIWプロセッサが８つの演算器を有する場合、１命令は８つのフィールドで構成される。一つのフィールドが、オペレーション情報、オペランド情報、及び上記モード情報を有しており、そのモード情報が、複数の演算器を制御する同時演算モードを指定している時、残りの７つのフィールドは命令読み込み時、メモリ上に実存していない。そこで、命令伸張回路が、前記一つのフィールド中で指定したオペレーション情報とオペランド情報を複写することによって、残り７つのフィールドを生成する。これにより、１フィールド分のコードサイズで８フィールドに相当する１命令を生成し、各演算器が同一機能を有しているので、問題なく複数演算命令が並列に実行可能になり、コードサイズが1/8に圧縮できる。とくに、モード情報に演算器の指定情報を設定すると、その設定情報に対応するフィールドだけが生成されるので、設定情報を３ビット設けると同時演算数を２〜８の範囲で制御できる。
また、上述したスーパースカラプロセッサが４つの演算器を有する場合、１命令が、オペレーション情報、オペランド情報、及び上記モード情報を有しており、そのモード情報が、同時演算モードを指定している時、命令伸張回路が、前記命令中で指定したオペレーション情報とオペランド情報を生成することによって、３つの命令を生成する。この場合、各演算器が同一機能を有しているので、１命令分のコードサイズで４命令に相当する複数演算命令が実行可能になり、コードサイズが1/4に圧縮できる。とくに、モード情報に演算器の指定情報を設定すると、その設定情報に対応する分の命令だけが新たに生成されるので、設定情報を２ビット設けると同時演算数を２〜４の範囲で制御できる。
以上のように、本発明によると、同時演算の処理の並列度を向上しつつ、コードサイズを少なく抑えることができる。
また、上述したとおり、演算ユニット単位で処理の並列度を増減するアーキテクチャとすることにより、例えば、２演算ユニット構成のプロセッサの開発において、１演算ユニットの回路を開発すれば、この演算ユニットの回路を複写することで２演算ユニット分の演算器を開発できる。したがって、２演算ユニットの演算器の開発工数は、１演算ユニットの演算器の開発工数とほぼ同一となる。将来、半導体の微細化技術が進歩して、４演算ユニットや８演算ユニットの高並列処理プロセッサを開発する場合でも、演算器の開発工数が増加することはない。
前述したとおり、マルチメディア処理においては、同一種類の演算が複数回繰り返し実行される特性を持っているので、処理の並列度を増やすことにより、確実に性能向上できる。
また、一つの演算ユニット内で、マルチメディア演算器の処理と同時に、整数演算器が次のサイクルで処理するデータをロードできる。ロードしたデータは、演算ユニット内のレジスタファイルに格納されるのでマルチメディア演算器が処理するオペランドとして使用できる。
このように、演算ユニット単位で処理するソフトウエア構造とすることにより、演算ユニットを対象にしたプログラムの単位で演算ユニットの増減に対応できる。したがって、演算ユニット数を変更したプロセッサに、開発済みプログラムを移植する場合などにも、演算ユニット数の増減に伴うソフトウエアの開発工数を低減できる。
以上のように、本発明によると、プロセッサ処理の並列度を向上しつつ、ハードウエアの開発工数だけでなくソフトウエアの開発工数も削減することが可能になる。
【図面の簡単な説明】
第１図は本発明の第１の実施例を示すプロセッサのブロック図である。第２図はプロセッサの命令フォーマットを示す図である。第３図はインストラクションメモリ１内へのプログラム格納例を示す図である。第４図はヘッダのフォーマットを示す図である。第５図は命令コードの具体例を示す図である。第６図は命令コードの具体例を示す図である。第７図は命令伸張回路２の詳細ブロック図である。第８図はフィールドコントローラ42の詳細ブロック図である。第９図はプログラムの格納例を示す図である。第10図はフィールドコントローラ42の動作フローを示す図である。第11図はヘッダアナライザ60の詳細ブロック図である。第12図はパーシャルライトコントローラ62の詳細ブロック図である。第13図はアドレスコントローラ61の詳細ブロック図である。第14図はセレクトシグナルジェネレータ63の詳細ブロック図である。第15図はオフセット生成回路120の詳細ブロック図である。第16図はSIMDコントローラ46の詳細ブロック図である。第17図は本発明の第２の実施例を示すプロセッサのブロック図である。第18図は第２の実施例を示す命令フォーマットを示す図である。第19図は命令伸張回路200の詳細ブロック図である。第20図はフィールドコントローラ201の詳細ブロック図である。第21図はシンクロナイザ210の詳細ブロック図である。第22図はセレクトシグナルジェネレータ211の詳細ブロック図である。第23図は本発明の第３の実施例を示すプロセッサのブロック図である。第24図は第３の実施例を示す命令フォーマットを示す図である。第25図は命令伸張回路241の詳細ブロック図である。第26図はレジスタアジャスタ250の機能を実現する真理値表を示す図である。第27図は本発明の第４の実施例を示すプロセッサのブロック図である。第28図は第４の実施例を示す命令フォーマットを示す図である。第29図は命令伸張回路260の詳細ブロック図である。第30図は本発明に係るIFG演算器の一実施例を示す構成図である。
発明を実施するための最良の形態
以下、本発明を説明する。第１図は、本発明を適用したVLIWプロセッサのブロック図である。同図において、１はプロセッサ命令コードを圧縮して格納するインストラクションメモリ、２は本発明の主要ブロックでありインストラクションメモリ１から読みだした圧縮命令コードを実際に実行可能なコードに伸張する命令伸張回路、３はインストラクションメモリ１のアドレスバス、４はインストラクションメモリ１のデータバス、５〜12は命令伸張回路２が伸張コードを出力するフィールドバス、14〜21は各々フィールドバス５〜12を介して転送される伸張コードを保持する命令レジスタ、22〜25は同一構成であり、各々命令レジスタ14〜21に保持した伸張コードにしたがって各種演算を実行する演算ユニット、26は８ビットや16ビット単位で複数演算を実行するマルチメディア演算及び乗算など複雑な演算を実行するIFG（Integer Floating Graphics）演算器、27はデータメモリ30とレジスタファイルとの間のデータ転送を実行するデータ転送命令や論理演算など簡単な演算を実行するINT（Integer）演算器、28は演算する値や演算結果の値を保持するものであり、32個の64ビットレジスタで構成し、４個のリードポートと３個のライトポートを有するレジスタファイル、29は演算ユニット22〜25の演算結果を他の演算ユニットへ転送可能にする選択回路、30は演算ユニット22〜25内のレジスタファイルとの間でデータ転送が可能なデータメモリである。
なお、この図において、このVLIWプロセッサは１つのLSIにまとめられている。又、命令コードなどを一旦蓄えるキャッシュメモリ、命令コードなどをプロセッサ外部から読み込み、演算結果を外部へ出力する等のLSI端子の記述は省略している。
本発明の特徴は、演算ユニット22がIFG演算器26とINT演算器27及びレジスタファイル28で構成されており、同一の演算ユニット23〜25が複数並列に並んだ構成となっていることである。
以下、第１図の動作を説明する。
同図において、命令伸張回路２は、アドレスバス３を介して与えたアドレス情報によりインストラクションメモリ１から圧縮された命令コードを読み出し、演算ユニット22〜25が直接実行可能になる伸張命令コードに変換する。１命令に相当する伸張命令コードは、８つのフィールドで構成されており、各フィールドは各々対応する命令レジスタ14〜21へ転送される。フィールドには、IFGフィールドとINTフィールドの２種類がある。IFGフィールドは、命令レジスタ14、16、18、20に、INTフィールドは命令レジスタ15、17、19、21に転送される。
命令レジスタ14に格納されたIFGフィールドは、演算ユニット22内のIFG演算器26に関する演算を制御する。一方、命令レジスタ15に格納されたINTフィールドは、演算ユニット22内のINT演算器27に関する演算を制御する。同様に、命令レジスタ16と17は演算ユニット23、命令レジスタ18と19は演算ユニット24、命令レジスタ20と21は演算ユニット25内のIFG演算器及びINT演算器を制御する。
IFG演算器26及びINT演算器27において演算するデータは、レジスタファイル28から読みだす。演算結果は、選択回路29へ出力され、いずれの演算ユニット内のレジスタファイル28へも書き込むことができる。
また、データ転送命令が発行されると、選択回路29を通して、レジスタファイル28とデータメモリ30間でデータ転送が行われる。つまり、IFG演算器26が演算命令を実行すると同時に、データ転送命令によって、次サイクルでIFG演算器26が演算するデータをメモリ30からレジスタファイル28へ転送する命令をINT演算器27が実行できる。INT演算器27によってレジスタファイル28に転送されたデータは、IFG演算器22からも読み出し可能なので、IFG演算器は毎サイクル演算命令を実行できる。
画像処理のようなマルチメディア処理を考慮すると、処理する画像の領域を４分割し、各領域の処理を各４つの演算ユニットに割り当てるようなプログラム構造にすることができる。この場合、各領域の処理内容と各演算ユニットの機能が同じであるため、基本的に、各演算ユニットで実行するプログラムは同一である。したがって、一つの演算ユニットのプログラムを開発し、それを他３つの演算ユニットにも流用できる。本実施例では、演算ユニット数が４であるが、半導体技術の進歩により、演算ユニット数を８に増やした場合でも、処理する画像領域を８分割するプログラム構造とすれば、各演算ユニットで実行するプログラムは、流用可能であり、ソフトウエアの開発工数を削減できる。
これらの効果は、上述した画像処理のようなマルチメディア処理においては、同一の演算の繰り返し処理が頻発することを利用して、繰り返し処理を並列化することによって処理性能を向上した結果である。演算ユニットは、基本的に同一回路なので、当然、複数の演算ユニットを有するプロセッサのハードウエア開発工数も削減できる。
また、第１図の実施例では、上述したように同時演算の処理の並列度を向上しつつ、コードサイズを少なく抑えることもできる。
次に、各演算ユニット22〜25を制御する伸張命令コードのフィールドについて、詳細を説明する。
第２図は、IFGフィールドとINTフィールドのフォーマットを示している。
（１）まず、IFGフィールドを構成する各ブロックについて説明する。
即ち、ビット０〜ビット７のオペコードブロック（以下、“オペコード”と記す）は演算の種類を示しており、最大256種類を指定できる。なお、オペコード＝０の時は、ノーオペレーション（NOP）とする。ビット８のイミディエートブロック（以下、“イミディエート”と記す）は、ビット22〜ビット26のソース１ブロック（以下、“ソース1"と記す）の内容の意味を示しており、１の時にイミディエート値、０の時にレジスタ番号を示している。レジスタ番号は、当該演算ユニット内のレジスタファイルにある32個のレジスタのうちの一つを示す。ビット17〜ビット21のソース０ブロック（以下、“ソース0"と記す）も同様に、当該演算ユニット内のレジスタファイルにある32個のレジスタのうちの一つを示す。
ビット27のＳモードブロック（以下、“Ｓモード”と記す）（１ビットのフィールド）は、本発明のポイントとなる同時演算モードを指定する。本ビット（“Ｓモード”）が、０の時ノーマルモード、１の時SIMD（単一命令複数データ流:Single Instruction Multiple Datastream）モード（同時演算モード）を示す。
ビット９〜ビット11のSIMD/デストバンクブロックは、ノーマルモードの時、“デストバンク”と記し、SIMDモードの時、“SIMD"と記す。
ノーマルモード（“Ｓモード”が０）の時には、各演算ユニットの演算結果は、他の演算ユニット内のレジスタファイル内のレジスタへ書き込むことができる。したがって、ノーマルモード時は、“デストバンク”で演算ユニットを特定し、ビット12〜ビット16のデスティネーションブロック（以下、“デスティネーション”と記す）でその演算ユニット内のレジスタを特定する。演算ユニット22がバンク０、演算ユニット23がバンク１、演算ユニット24がバンク２、演算ユニット25がバンク３に対応している。“デスティネーション”は、32種類のレジスタ番号を指定可能であり、デストバンクは、８種類の演算ユニットを指定可能である。本実施例では、４個の演算ユニット22〜25で構成しているが、命令フォーマット自身は、８個の演算ユニットで構成するVLIWプロセッサに適用できるようになっている。
一方、SIMDモードの時（“Ｓモード”が１の時）には、一つのIFGフィールドで複数の演算ユニットを制御可能にするため、各演算ユニットの演算結果は、当該演算ユニット内のレジスタファイル内のレジスタへのみ書き込みができるようにする。従って、SIMDモード時には、“デスティネーション”で、32種類のレジスタ番号を指定することで演算結果を書き込むレジスタを指定する。更に、同時に演算する他の演算ユニットを指定するために、デストバンクとフィールドを共用する“SIMD"を用いる。
“SIMD"は、３ビットで構成され、他の３つの演算ユニットが各々同一演算を実行するか否かを示す。１は同一命令実行を示し、０は実行しない、つまり、ノーオペレーション（以下、NOPと略記する）を示す。３つのビットと各演算ユニットとの対応関係は、IFGフィールドが保持される命令レジスタに依存する。つまり、IFGフィールドがバンク０に対応する命令レジスタ14に保持される場合、“SIMD"の３ビットは、バンク１、バンク２、バンク３に対応する。従って、“SIMD"が110（２進数）ならば、命令レジスタ14と15、16と17、18と19に、同じ命令が設定される。IFGフィールドがバンク１に対応する命令レジスタ16に保持される場合、“SIMD"の３ビットは、バンク０、バンク２、バンク３に対応する。IFGフィールドがバンク２に対応する命令レジスタ18に保持される場合、“SIMD"の３ビットは、バンク０、バンク１、バンク３に対応する。IFGフィールドがバンク３に対応する命令レジスタ20に保持される場合、“SIMD"の３ビットは、バンク０、バンク１、バンク２に対応する。
なお、“デステネーション”、“ソース0"、“ソース1"でオペランドを形成する。
（２）次に、INTフィールドについて説明する。
即ち、INTフィールドのIFGフィールドとの相違点は、３つある。一つ目は、“オペコード”が１ビット削減され、指定できる演算種類が128種類になっていることである。２つ目は、“ソース1"のビット数が８ビットに拡張され、イミディエート値が０〜255まで指定できるようになっていることである。最後は、IFGフィールドにないブランチテストブロック（以下、“ブランチテスト”）が加わっていることである。“ブランチテスト”は、プログラムの分岐制御用である。各演算ユニット22〜25は、条件分岐用に各１ビットのブランチバンクレジスタを６個有している。これらは１の時分岐、０の時分岐しないことを示す。“ブランチテスト”が、000（２進数）の時、分岐は発生しない。001の時、無条件分岐が発生する。010〜111の時、対応するブランチバンクレジスタの内容に応じて分岐（条件分岐）が発生する。
以下に、これらのIFGフィールド、INTフィールドで構成した命令が、インストラクションメモリ１へ格納される過程について説明する。即ち、第３図は、インストラクションメモリ１へのプログラム格納例を示している。図中、０〜95番地に８命令が格納されており、ヘッダは各命令のフィールドの有無を示す情報であり、４命令単位にひとつの割合で設けてある。また、フィールド０、１、２、３、４、５、６及び７は、各々命令レジスタ14、15、16、17、18、19、20及び21に対応している。また、フィールド無しは、NOPまたはSIMDモードを使用することで省略されたフィールドを意味する。
ここでは、NOPのフィールドが格納されおらず、１番目の命令はフィールド０、１、４、６、７で、２番目の命令はフィールド０、１、２で、３番目の命令はフィールド０、１、２、４、６、７で、４番目の命令はフィールド４、７で、５番目の命令はフィールド０、１で、６番目の命令はフィールド２、３で、７番目の命令はフィールド６で、８番目の命令はフィールド４で構成されている。
以下、さらに詳細な説明を行う。即ち、第４図は、第３図に示すヘッダのフォーマットを示している。一つのヘッダは、１フィールドと同一サイズの32ビットで構成されており、連続する４命令分のフィールド有無情報（４×８＝32）を示している。
具体的な例として、第３図で示したヘッダ０とそれに対応する１〜４番目の伸張後の命令フォーマットを第５図に示す。この４命令は全てノーマルモードを指定しているものとする。伸張後の命令フォーマットとは、命令伸張回路２がヘッダのフィールド有無情報から生成するものであり、インストラクションメモリ１内では省略されていたNOPフィールドが生成されるとともに、フィールドの並び替えが行われている。
一方、SIMDモードを指定した具体例として、第３図で示したヘッダ１とそれに対応する５〜８番目の伸張後の命令フォーマットを第６図に示す。これらの命令の“Ｓモード”と“SIMD"はそれぞれ図中に記載された値になっているものとする。
図中、５番目の命令では、フィールド０において“Ｓモード”＝１によりSIMDモードを指定されており、且つ、“SIMD"が111のため、フィールド０と１の内容がフィールド２と３、フィールド４と５、フィールド６と７へ複写される。６番目の命令では、フィールド２において“Ｓモード”＝１によりSIMDモードを指定されており、且つ、“SIMD"が010のため、フィールド２と３の内容がフィールド４と５へ複写される。７番目の命令では、フィールド６において“Ｓモード”＝１によりSIMDモードを指定されており、且つ、“SIMD"が101のため、フィールド６と７の内容がフィールド０と１、フィールド４と５へ複写される。８番目の命令では、フィールド４においてSIMDモードを指定されており、且つ、“SIMD"が001（０がNOP、１が同一命令実行）のため、フィールド４と５の内容がフィールド６と７へ複写される。
以上が本実施例において、圧縮された命令コードを伸張する方式である。
以下に、この方式を実現する命令伸張回路２の詳細について説明する。即ち、第７図は、命令伸張回路２の詳細を示すブロック図である。同図において、第１図と同一機能を有する回路ブロック及び同一信号線には同一符号を付してある。40はデータバス４からの圧縮命令コード（32バイト）をラッチするインストラクションバッファ、41（41a〜41h）は４バイト（１フィールド叉は１ヘッダ）×８本構成の圧縮フィールドバス、42はヘッダ情報を解析するフィールドコントローラ、43は４バイト単位で独立に書き込みを可能にするため８本の信号で構成したライトイネーブルバス、44はフィールドの並べ替えを行うためのフィールド選択信号線、45aから45hは圧縮フィールドバス41の８本の４バイト信号から１本を選択するセレクタ、67はフィールド０〜７の各フィールドの有無を示す８本フィールド信号線、49はフィールド並べ替え後の伸張フィールドバス、46は各命令のSIMDモード時のフィールド複写動作を制御するSIMDコントローラ、47は複写するフィールドの選択を制御するSIMD選択信号線、48はいずれかの２フィールド（IFGフィールドとINTフィールド）を選択するデュアルセレクタである。
以下に、その詳細動作を説明する。即ち、フィールドコントローラ42は、インストラクションバッファ40に保持した情報を参照して、ヘッダ情報を切り出し解析する。その解析結果から、インストラクションバッファ40へフェッチするべき命令のアドレス情報をアドレスバス３へ、４バイト単位でインストラクションバッファ40へフェッチ可能とする情報をライトイネーブルバス43へ、圧縮フィールドバス41の中からその命令のフィールド０を選択するための情報をフィールド選択信号線44へ出力する。同様に、フィールド１〜７の選択情報も各々該当するセレクタ45bから45hへ出力する。また、各フィールドの有無を示す情報をフィールド信号線67へ出力する。
インストラクションバッファ40は、32バイトなので、ヘッダと８つのフィールドで構成する最長命令を一度に保持することができない。従って、この場合、２回のフェッチが必要になる。この場合、フィールドコントローラ42は、２回目のフェッチサイクルであることを示す情報を再フェッチ信号線13へ出力する。この信号は、第１図に示す命令レジスタ14〜21へ送られる。再フェッチサイクルで出力されるのは、フィールド７の情報に限られるので、このサイクルにおいては、フィールド７に対応する命令レジスタ21だけがフィールドデータをラッチ（更新）する。
セレクタ45aは、フィールド信号線67のフィールド０に対応する信号線がフィールド無しを示していると、０をフィールド情報として出力する。つまり、この実施例では、オペコード＝０をNOPとしているので、NOPが出力される。逆に、フィールド有りを示していると、フィールド選択信号線44の情報に従って、圧縮フィールドバス41からフィールド０の情報を選択して、伸張フィールドバス49へ出力する。同様、各フィールドに対応するセレクタ45bから45hが、フィールドコントローラ42からの情報に従って、各々のフィールドを選択して、伸張フィールドバス49へ出力する。このように、伸張フィールドバス49には、伸張され、並び換えられた後の命令コードが出力される。
SIMDコントローラ46は、伸張フィールドバス49内のフィールド０、２、４、６の“Ｓモード”と“SIMD"を解析して、各フィールドの複写元フィールドを決定して、その複写元フィールドを選択する情報を、デュアルセレクタ48aへ出力する。
ノーマルモード時には、SIMDコントローラ46は、複写元フィールド０と１の選択情報をデュアルセレクタ48aへ出力する。この選択情報にしたがって、デュアルセレクタ48aは、伸張フィールドバス49内の８つのフィールドから２つを選択して、フィールド０をフィールドバス５へ、フィールド１をフィールドバス６へ出力する。
同様に、フィールド２と３、４と５及び６と７の複写元フィールドを選択する情報が、対応する各デュアルセレクタ48b〜ｄへ出力される。各デュアルセレクタ48b〜ｄは、伸張フィールドバス49内の８つのフィールドから２つを選択して、フィールド２をフィールドバス７へ、フィールド３をフィールドバス８へ、フィールド４をフィールドバス９へ、フィールド５をフィールドバス10へ、フィールド６をフィールドバス11へ、フィールド７をフィールドバス12へ出力する。このように、SIMDモード時には、命令中に指定した情報にしたがって、特定のフィールドの内容を別のフィールドへ複写できる。これにより、少ない命令で多くの演算が可能になる。
例えば、第３図に示した例の１番目の命令動作を説明する。インストラクションバッファ40には、ヘッダ０から２番目の命令のフィールド１までが保持されている。この状態から、各フィールドに対応するセレクタ45a〜ｈが、フィールドコントローラ42におけるヘッダ０の解析情報にしたがって、第５図に示した１番目の命令フォーマットを生成して、伸張フィールドバス49へ出力する。
この際、フィールドコントローラ42は、インストラクションバッファ40内の、ヘッダ０と１番目の命令に相当する５フィールド分との合計24バイトに、次の命令をフェッチするための情報を、ライトイネーブルバス43へ出力する。ライトイネーブルバス43へ出力される情報は、各々４バイト境界での書き込みを制御するために、８ビットで構成してある。
一方、アドレスバス３のアドレス情報は、次の命令の先頭（第３図の２番目の命令のフィールド０）を示しており、データバス４にはそのアドレスから連続する32バイトのデータ（24番地〜55番地）が読み出される。この状態で、次のサイクルでは、上記ライトイネーブルバス43の情報に従って、24バイト分のデータ（32番地〜55番地）が更新される。従って、インストラクションバッファ40は、32番地〜55番地及び24番地〜31番地の32バイトの情報を保持する。この状態から、各フィールドに対応するセレクタ45a〜ｈが、フィールドコントローラ42におけるヘッダ０の解析情報に従って、第５図に示した２番目の命令フォーマットを生成して、伸張フィールドバス49へ出力する。
この際、フィールドコントローラ42は、２番目の命令に相当する３フィールド分の合計12バイトをインストラクションバッファ40へフェッチするための情報を、ライトイネーブルバス43へ転送する。一方、アドレスバス３のアドレス情報は、次の命令の先頭（第３図の３番目の命令のフィールド０）を示しており、データバス４にはそのアドレスから連続する32バイトのデータ（36番地〜67番地）が読み出される。この状態で、次のサイクルでは、上記ライトイネーブルバス43の情報に従って、12バイト分のデータ（56番地〜67番地）が更新される。従って、インストラクションバッファ40は、64番地〜67番地及び36番地〜63番地の32バイトの情報を保持する。このように、フィールドコントローラ42は、アドレスバス３とライトイネーブルバス43を介して、インストラクションバッファ40にデータが常時充満するように制御する。このようなフィールドコントローラ42の詳細については、後述する。
以上のように生成した、伸張フィールドバス49上の各フィールドの“Ｓモード”は、SIMDコントローラ46において、チェックされる。“Ｓモード”ビットが有効の場合、SIMDコントローラ46は、第６図に示したように、複写するフィールドと複写されるフィールドを特定する。
例えば、フィールド０と１へ複写する場合には、複写元のフィールド選択情報をSIMD選択信号線47を介して、デュアルセレクタ48aへ送る。ノーマルモード時（“Ｓモード”＝０の時）、或いはSIMDモード時（“Ｓモード”＝１の時）でフィールド０と１が複写元の場合、フィールド選択情報は、それ自身のフィールド、つまりフィールド０と１を選択する。フィールド２と３、フィールド４と５、フィールド６と７のフィールド選択情報も、同様に、各々該当するデュアルセレクタ48b〜ｄへ送られる。
フィールドバス５と６は、デュアルセレクタ48aから出力され、フィールドバス５のフィールド０は伸張フィールドバス49のフィールド０、２、４、６の中から選択され、一方、フィールドバス６のフィールド１は伸張フィールドバス49のフィールド１、３、５、７の中から選択される。以下同様に、フィールドバス７〜12上のフィールド２〜７が生成される。このSIMDコントローラ46の詳細は、後述する。
以下に、フィールドコントローラ42とSIMDコントローラ46の詳細構成について説明する。
まず、フィールドコントローラ42の詳細構成を第８図に示す。同図において、第７図と同一機能を有する回路ブロック及び同一信号線には同一符号を付してある。図中、60はヘッダ情報を解析するヘッダアナライザ、67はヘッダ内のフィールド構成を示す８ビットのフィールド信号線、68は圧縮時の命令長（０〜33）を示す６ビットの命令長信号線、61はアドレスバス３へ与えるアドレス情報を生成するアドレスコントローラ、64は実行中の命令アドレス情報を転送する命令アドレスバス、65はヘッダに含まれる４命令のうちの一つを示す２ビットのヘッダアドレスバス、66はヘッダアドレスが０の時アサートされるヘッダ０信号線、62はライトイネーブルバス43へ与えるフェッチ情報を生成するパーシャルライトコントローラ、63はフィールド選択信号線44などへ与えるフィールド選択情報を生成するセレクトシグナルジェネレータである。以下に、具体例を挙げて、動作説明を行う。
第９図は、インストラクションメモリ１に格納されている命令列である。ここでは、０〜127番地までに、７命令が格納されている。
これらの命令を順次実行する場合の、動作を示すタイムチャートが第10図である。同図では、T0〜T8までの９サイクル間の動作を示している。各命令は、基本的には、４ステージのパイプラインで実行される。４ステージの内訳としては、IFは命令フェッチステージ、EXPは命令伸張ステージ、EXEは演算実行ステージ、WBは演算結果の書き込みステージである。図中、命令１〜命令６までのタイムチャートを示している。
まず、命令１に着目する。命令１は、初期状態からスタートしており、T0サイクルの各信号線は初期値を示している。命令アドレスバス64が０のためインストラクションメモリ１からは、０番地〜31番地までが読み出される。さらに、ライトイネーブルバス43が11111111（２進数）であり、インストラクションバッファ40へは、T0からT1サイクルへの遷移時に、０番地〜31番地までがラッチされる。
T1サイクルでは、命令１のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、命令アドレスバス64とヘッダアドレスバス65から入力した情報に従って、圧縮フィールドバス41から入力されたインストラクションバッファ40にラッチされている情報の中から、ヘッダ情報を特定する。つまり、命令アドレスバス64が０であることから、命令１〜４のヘッダは０〜３番地に存在していることが判り、この４バイトの情報をラッチする。さらに、ヘッダアドレスバス65が０であることから、命令１に相当するヘッダ情報は０番地の８ビットであることが判る。
この情報から、ヘッダアナライザ60は、命令１が５つのフィールドから構成され、その内訳はフィールド０、１、４、６、７である、ことが判る。従って、フィールド信号線67へは命令１のヘッダ情報11001011（２進数）がそのまま出力される。さらに、命令１はヘッダを含めてその命令長が24バイトであり、命令長信号線68へは24であることを示す011000（２進数）の情報が出力される。命令長が32を越えてないので、再フェッチ信号線13はアサートされない。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T1サイクルでは、32がアドレスバス３へ出力される。
パーシャルライトコントローラ62は、命令長信号線68と命令アドレスバス64の情報から、インストラクションバッファ40において保持されている命令１のフィールドの位置情報をライトイネーブルバス43へ出力する。この位置情報は、４バイト単位で管理されており、８ビットで構成してある。T2サイクルにおいては、命令アドレスバス64が０、命令長信号線68が24であることから、インストラクションバッファ40の先頭から24バイトが命令１に相当することが判り、11111100（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、命令アドレスバス64、ヘッダ０信号線66及びフィールド信号線67から、各フィールド情報をインストラクションバッファ40の中から選択する情報を生成し、出力する。例えば、フィールド０の選択情報は、フィールド選択信号線44へ出力される。同様に、フィールド１〜７の選択情報は、該当するフィールド選択信号線へ出力される。選択情報は、インストラクションバッファ40において４バイト境界のどの位置から読み出すかを示す３ビットで構成する。T1サイクルにおける命令アドレスバス64が０、ヘッダ０信号線66がアサートされていることから、命令１のフィールドは、インストラクションバッファ40の２番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、２番目の32ビット境界には、フィールド０が保持されていることが判り、フィールド０を示す選択情報は１となり、フィールド選択信号線44へ出力される。同様に、フィールド１を示す選択情報は２、フィールド４は３、フィールド６は４、フィールド７は５となる。
T1からT2サイクルへの遷移時に、アドレスバス３が32、ライトイネーブルバス43が11111100（２進数）であることから、インストラクションバッファ40へは32番地〜55番地までが新たにラッチされ、既に保持している24番地〜31番地の情報はそのまま保持されている。同時に、命令長信号線68が24であることから、命令アドレスバス64の情報は、０に24が加算されて24に、ヘッダアドレスバス65の情報は１が加算されて１となる。
次に、命令２に着目すると、上述したT1サイクルがIFステージとなり、T2サイクルにおいては、インストラクションバッファ40に命令２が保持されている。T2サイクルでは、命令２のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、ヘッダアドレスバス65が１であることから、命令２に相当するヘッダ情報はT1サイクルでラッチした情報のうち１番地の８ビットであることが判る。この情報から、ヘッダアナライザ60は、命令２が３つのフィールドから構成され、その内訳はフィールド０、１、２である、ことが判る。従って、フィールド信号線67へは命令２のヘッダ情報11100000（２進数）がそのまま出力される。さらに、命令２はその命令長が12バイトであり、命令長信号線68へは24であることを示す001100（２進数）の情報が出力される。命令長が32を越えてないので、再フェッチ信号線13はアサートされない。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T2サイクルでは、56がアドレスバス３へ出力される。
パーシャルライトコントローラ62は、T2サイクルにおける命令アドレスバス64が24、命令長信号線68が12であることから、インストラクションバッファ40の７番目の４バイト境界から３バイトが命令２に相当することが判り、10000011（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、T2サイクルにおける命令アドレスバス64が24、ヘッダ０信号線66がアサートされてないことから、命令２のフィールドは、インストラクションバッファ40の７番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、７番目の32ビット境界には、フィールド０が保持されていることが判り、フィールド０を示す選択情報は６となり、フィールド選択信号線44へ出力される。同様に、フィールド１を示す選択情報は７、フィールド２は０となる。
T2からT3サイクルへの遷移時に、アドレスバス３が56、ライトイネーブルバス43が10000011（２進数）であることから、インストラクションバッファ40へは56番地〜67番地までが新たにラッチされ、既に保持している36番地〜55番地の情報はそのまま保持されている。同時に、命令長信号線68が12であることから、命令アドレスバス64の情報は、24に12が加算されて36に、ヘッダアドレスバス65の情報は１が加算されて２となる。
次に、命令３に着目すると、上述したT2サイクルがIFステージとなり、T3サイクルにおいては、インストラクションバッファ40に命令３が保持されている。T3サイクルでは、命令３のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、ヘッダアドレスバス65が２であることから、命令３に相当するヘッダ情報はT1サイクルでラッチした情報のうち２番地の８ビットであることが判る。この情報から、ヘッダアナライザ60は、命令３が８つのフィールドから構成され、その内訳はフィールド０、１、２、３、４、５、６、７である、ことが判る。従って、フィールド信号線67へは命令３のヘッダ情報11111111（２進数）がそのまま出力される。さらに、命令３はその命令長が32バイトであり、命令長信号線68へは32であることを示す100000（２進数）の情報が出力される。命令長が32を越えてないので、再フェッチ信号線13はアサートされない。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T3サイクルでは、68がアドレスバス３へ出力される。パーシャルライトコントローラ62は、T3サイクルにおける命令アドレスバス64が36、命令長信号線68が32であることから、インストラクションバッファ40の２番目の４バイト境界から32バイトが命令３に相当することが判り、11111111（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、T3サイクルにおける命令アドレスバス64が36、ヘッダ０信号線66がアサートされてないことから、命令３のフィールドは、インストラクションバッファ40の２番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、２番目の32ビット境界には、フィールド０が保持されていることが判り、フィールド０を示す選択情報は１となり、フィールド選択信号線44へ出力される。同様に、フィールド１を示す選択情報は２、フィールド２は３、フィールド３は４、フィールド４は５、フィールド５は６、フィールド６は７、フィールド７は０となる。
T3からT4サイクルへの遷移時に、アドレスバス３が68、ライトイネーブルバス43が11111111（２進数）であることから、インストラクションバッファ40へは68番地〜99番地までが新たにラッチされる。同時に、命令長信号線68が32であることから、命令アドレスバス64の情報は、36に32が加算されて68に、ヘッダアドレスバス65の情報は１が加算されて３となる。
次に、命令４に着目すると、上述したT3サイクルがIFステージとなり、T4サイクルにおいては、インストラクションバッファ40に命令４が保持されている。T4サイクルでは、命令４のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、ヘッダアドレスバス65が３であることから、命令４に相当するヘッダ情報はT1サイクルでラッチした情報のうち３番地の８ビットであることが判る。この情報から、ヘッダアナライザ60は、命令４が１つのフィールドから構成され、その内訳はフィールド０である、ことが判る。従って、フィールド信号線67へは命令４のヘッダ情報10000000（２進数）がそのまま出力される。さらに、命令４はその命令長が４バイトであり、命令長信号線68へは４であることを示す000100（２進数）の情報が出力される。命令長が32を越えてないので、再フェッチ信号線13はアサートされない。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T4サイクルでは、100がアドレスバス３へ出力される。
パーシャルライトコントローラ62は、T4サイクルにおける命令アドレスバス64が68、命令長信号線68が４であることから、インストラクションバッファ40の２番目の４バイト境界から４バイトが命令４に相当することが判り、01000000（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、T4サイクルにおける命令アドレスバス64が68、ヘッダ０信号線66がアサートされてないことから、命令４のフィールドは、インストラクションバッファ40の２番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、２番目の32ビット境界には、フィールド０が保持されていることが判り、フィールド０を示す選択情報は１となり、フィールド選択信号線44へ出力される。
T4からT5サイクルへの遷移時に、アドレスバス３が68、ライトイネーブルバス43が01000000（２進数）であることから、インストラクションバッファ40へは100番地〜103番地までが新たにラッチされ、既に保持している72番地〜99番地の情報はそのまま保持されている。同時に、命令長信号線68が４であることから、命令アドレスバス64の情報は、68に４が加算されて72に、ヘッダアドレスバス65の情報は３に１が加算されて０（加算結果は０〜３のラップアラウンド）となる。
次に、命令５に着目すると、上述したT4サイクルがIFステージとなり、T5サイクルにおいては、インストラクションバッファ40に命令５が保持されている。T5サイクルでは、命令５のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、命令アドレスバス64が72であることから、命令５〜８のヘッダは72〜75番地に存在していることが判り、インストラクションバッファ40に保持されているこの４バイトの情報をラッチする。さらに、ヘッダアドレスバス65が０であることから、命令５に相当するヘッダ情報は72番地の８ビットであることが判る。この情報から、ヘッダアナライザ60は、命令５が８つのフィールドから構成されていることが判る。従って、フィールド信号線67へは命令５のヘッダ情報11111111（２進数）がそのまま出力される。さらに、命令５はヘッダを含めてその命令長が36バイトであり、命令長信号線68へは36であることを示す100100（２進数）の情報が出力される。命令長が32を越えるので、T5〜T6への遷移時に再フェッチ信号線13はアサートされる。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T5サイクルでは、104がアドレスバス３へ出力される。
パーシャルライトコントローラ62は、T5サイクルにおける命令アドレスバス64が72、命令長信号線68が36であることから、インストラクションバッファ40の３番目の４バイト境界から32バイトが命令５に相当することが判り、11111111（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、T5サイクルにおける命令アドレスバス64が72、ヘッダ０信号線66がアサートされていることから、命令５のフィールドは、インストラクションバッファ40の４番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、４番目の32ビット境界には、フィールド０が保持されていることが判り、フィールド０を示す選択情報は３となり、フィールド選択信号線44へ出力される。同様に、フィールド１を示す選択情報は４、フィールド２を示す選択情報は５、フィールド３を示す選択情報は６、フィールド４を示す選択情報は７、フィールド５を示す選択情報は０、フィールド６を示す選択情報は１となる。命令長が32を越えたことから、フィールド７の情報はインストラクションバッファ40に保持されてないことが判るので次サイクル（T6）にて選択情報を出力する。
T5からT6サイクルへの遷移時に、アドレスバス３が104、ライトイネーブルバス43が11111111（２進数）であることから、インストラクションバッファ40へは104番地〜135番地までが新たにラッチされる。同時に、命令長信号線68が36であることから、命令アドレスバス64の情報は、72に36が加算されて108に、ヘッダアドレスバス65の情報は０に１が加算されて１となる。
上述したように、T5サイクルでは、命令５のフィールド７を生成できないので、命令５の付加的なEXP（EXP2）ステージとしてT6サイクルが必要になる。
T6サイクルでは、再フェッチ信号線13がアサートされていることで、EXP2ステージであることが判る。再フェッチ信号線13がアサートされていると、ヘッダアナライザ60、アドレスコントローラ61、パーシャルライトコントローラ62及びセレクトシグナルジェネレータ63は特殊な動作となる。
具体的に、アドレスコントローラ61は、命令アドレスバス64の108に28を加算した136をアドレスバス３へ出力する。また、T6からT7への遷移時に、ヘッダアドレスは１を加算されずに１のままとなる。
ヘッダアナライザ60は、０を命令長信号線68へ出力する。従って、T6からT7への遷移時に命令アドレスバス64の情報は108のまま変化しない。パーシャルライトコントローラ62は、命令アドレスバス64が108であり、命令５のフィールド７は、インストラクションメモリ１の104番地に存在していることから、インストラクションバッファ40の３番目の４バイト境界にあることが判り、00100000（２進数）をライトイネーブルバス43へ出力する。
同様に、セレクトシグナルジェネレータ63は、命令アドレスバス64が108であ、命令５のフィールド７は、インストラクションメモリ１の104番地に存在していることから、インストラクションバッファ40の３番目の４バイト境界にあることが判り、３をフィールド７に対応するフィールド選択信号線へ出力する。
T5からT6サイクルへの遷移時に、アドレスバス３が136、ライトイネーブルバス43が00100000（２進数）であることから、インストラクションバッファ40へは136番地〜139番地までが新たにラッチされ、既に保持している108番地〜135番地の情報はそのまま保持されている。
次に、命令６に着目すると、上述したT6サイクルがIFステージとなり、T7サイクルにおいては、インストラクションバッファ40に命令６が保持されている。T7サイクルでは、命令６のEXPステージが実行される。
具体的に、ヘッダアナライザ60は、ヘッダアドレスバス65が１であることから、命令６に相当するヘッダ情報はT5サイクルでラッチした情報のうち２番目のバイト境界であることが判る。この情報から、ヘッダアナライザ60は、命令６が３つのフィールドから構成され、その内訳はフィールド１、２、３である、ことが判る。従って、フィールド信号線67へは命令６のヘッダ情報01110000（２進数）がそのまま出力される。さらに、命令６はその命令長が12バイトであり、命令長信号線68へは12であることを示す001100（２進数）の情報が出力される。命令長が32を越えてないので、再フェッチ信号線13はアサートされない。
アドレスコントローラ61は、初期状態のサイクル以外では命令アドレスバス64の値に32を加算した値をアドレスバス３へ出力する。従って、T7サイクルでは、140がアドレスバス３へ出力される。
パーシャルライトコントローラ62は、T7サイクルにおける命令アドレスバス64が108、命令長信号線68が12であることから、インストラクションバッファ40の４番目の４バイト境界から12バイトが命令６に相当することが判り、00011100（２進数）がライトイネーブルバス43へ出力される。
セレクトシグナルジェネレータ63は、T7サイクルにおける命令アドレスバス64が108、ヘッダ０信号線66がアサートされてないことから、命令６のフィールドは、インストラクションバッファ40の４番目の32ビット境界以降に保持されていることが判る。さらに、どのフィールドが存在するかは、フィールド信号線67の情報から判る。従って、４番目の32ビット境界には、フィールド１が保持されていることが判り、フィールド１を示す選択情報は３となり、フィールド選択信号線44へ出力される。同様に、フィールド２を示す選択情報は４、フィールド３は５となる。
T7からT8サイクルへの遷移時に、アドレスバス３が140、ライトイネーブルバス43が00011100（２進数）であることから、インストラクションバッファ40へは140番地〜151番地までが新たにラッチされ、既に保持している120番地〜139番地の情報はそのまま保持されている。同時に、命令長信号線68が12であることから、命令アドレスバス64の情報は、108に12が加算されて120に、ヘッダアドレスバス65の情報は１に１が加算されて２となる。
命令６以降が順次同様のシーケンスで繰り返し実行される。各命令のEXPステージからEXEステージに遷移する時に、各命令レジスタ14〜21に、伸張された命令フィールドがラッチされる。従って、EXEステージでは、各命令レジスタ14〜21に制御下で各演算ユニット22〜25が演算を実行する。実行結果は、WBステージにおいて、命令フィールドで指定されたレジスタへ書き込まれて、命令が終了する。
以上が、フィールドコントローラ42の動作説明である。以下、その構成要素であるヘッダアナライザ60、アドレスコントローラ61、パーシャルライトコントローラ62及びセレクトシグナルジェネレータ63の詳細構成を説明する。
第11図は、ヘッダアナライザ60の詳細を示すブロック図である。同図において、第８図と同一機能を有する回路ブロック及び同一信号線には同一符号を付してある。図中、80は８個の４バイトデータから１個を選択するセレクタ、81〜83は各々１バイトデータのラッチ回路、84は４個の１バイトデータから１個を選択するセレクタ、85は１ビット９入力の加算器、86は４ビットのデコーダ、87は論理積回路87、88は１ビットのラッチ回路、89は１ビットの反転回路、90は論理積回路90である。
セレクタ80は、32ビットの命令アドレスバス64（IA31〜IA0）のうち、IA4〜IA2の３ビットからヘッダの位置を特定して、４バイト（４命令分の）ヘッダ情報を出力する。ヘッダ０信号線66はアサートされていると、ヘッダ情報のうち、１番目の命令ヘッダはセレクタ84へ、２番目の命令ヘッダはラッチ回路81へ、３番目の命令ヘッダはラッチ回路82へ、４番目の命令ヘッダはラッチ回路83へ出力される。
セレクタ84は、ヘッダアドレスバス65の情報に従って、０ならば上記１番目のヘッダ情報、１ならば上記ラッチ回路81へ保持したヘッダ情報、２ならば上記ラッチ回路82へ保持したヘッダ情報、３ならば上記ラッチ回路83へ保持したヘッダ情報を選択してフィールド信号線67へ出力する。
フィールド信号線67の情報から、加算器85は命令長情報を生成する。９入力の内訳は、フィールド信号線67の８ビットとヘッダ０信号線66の１ビットである。基本的には、フィールド信号線67のフィールド数を数えることで命令長が判る。さらに、ヘッダ０信号線66がアサートされているサイクルでは、命令がヘッダ情報を含んでいるので、フィールド数から生成した命令長に１を加算する。従って、加算器85の加算結果は０〜９の範囲であり、命令長を４ビットの情報で出力する。実際の命令長は、上記加算結果に４を乗算した値であり、０〜36バイト長となる。
デコーダ86は、36バイト長の命令を検出する回路であり、入力情報が９の時出力をアサートする。
デコーダ86の出力がアサートされると、サイクルが遷移するタイミングで、ラッチ回路88は、再フェッチ信号線13をアサートする。
再フェッチ信号線13がアサートされると、反転回路89の出力がネゲートされ、論理積回路87はデコーダ86の出力をマスクする。
この状態において、サイクルが遷移するタイミングで、ラッチ回路88は、再フェッチ信号線13をネゲートする。すなわち、再フェッチ信号線13は、アサートされた次のサイクルでは、必ずネゲートされる。再フェッチ信号線13がアサートされると、反転回路89の出力が加算器85の出力をマスクし、論理積回路90は命令長０の情報を命令長信号線68へ出力する。アサートされなければ、加算器85が出力する命令長情報は、命令長信号線68へ出力される。
以上のように、ヘッダアナライザ60は、命令長信号線68、フィールド信号線67、再フェッチ信号線13の各々へ必要な情報を出力できる。
次に、パーシャルライトコントローラ62の詳細動作を説明する。第12図は、パーシャルライトコントローラ62の詳細構成を示すブロック図である。同図において、第８図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、100は４ビット入力８ビット出力のデコーダ、101は８ビットのバレルシフタ、102は３ビットの加算器、103はアドレスバス３ビット入力８ビット出力のデコーダ、104はバレルシフタ101とデコーダ103の出力を選択してライトイネーブルバス43へ出力するセレクタである。
デコーダ100は、同図に示す変換テーブルに従って、８ビットの情報を生成する。
この情報は、バレルシフタ101において、命令アドレスバス64の３ビット（IA4〜IA2）の情報に従って、ローテートされる。これにより、バレルシフタ101が出力する情報は、命令アドレスバス64が示す命令が、インストラクションバッファ40内のどこに保持されているかを４バイト単位で示している。すなわち、この情報は、次のサイクルへの遷移時に、更新するべきインストラクションバッファ40の場所を示している。
従って、再フェッチ信号線13がアサートされてない場合、セレクタ104がこの情報を選択してライトイネーブルバス43へ出力される。一方、再フェッチ信号線13がアサートされたサイクルでは、命令アドレスバス64は次の命令の先頭番地を示しているので、その番地から４を減じた値が命令のフィールド７の格納番地となる。
インストラクションバッファ40におけるこのフィールド７の格納位置を求めるために、加算器102は、命令アドレスバス64の３ビット（IA4〜IA2）の情報に７（110、２進数）を加算する。その加算結果は、デコーダ103の図中に示す変換テーブルに従って、ライトイネーブルバス43へ出力する情報を生成する。
そのために、セレクタ104は、再フェッチ信号線13がアサートされると、デコーダ103の出力を選択する。
以上のように、パーシャルライトコントローラ62はライトイネーブルバス43へ必要な情報を出力できる。
次に、アドレスコントローラ61の詳細動作を説明する。第13図は、アドレスコントローラ61の詳細構成を示すブロック図である。同図において、第８図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、110は32ビットのアドレス命令アドレス情報を保持するプログラムカウンタ、111は32ビットの加算器、112は２ビットのヘッダカウントレジスタ、113は２ビットの加算器、114は論理和の否定情報を出力する２入力のNOR回路、115は32と28のどちらかを選択するセレクタ、116はセレクタ115の出力か０かを選択するセレクタ、117は32ビットの加算器である。
プログラムカウンタ110は、サイクルが遷移する毎に、命令アドレス情報を更新する。更新情報は、加算器111が命令長信号線68の情報とプログラムカウンタ110の命令アドレス情報を加算することで生成される。生成した情報は、命令アドレスバス64へ出力される。
ヘッダカウントレジスタ112はヘッダアドレス情報（０〜２）を保持しており、プログラムカウンタ110と同様に、サイクルが遷移する毎に、ヘッダアドレス情報を更新する。更新情報は、加算器111がヘッダアドレス情報に１を加算することで生成される。生成した情報は、ヘッダアドレスバス65へ出力される。
NOR回路114は、ヘッダアドレス情報が０であることを検出して、ヘッダ０信号線66をアサートする。
セレクタ115は、再フェッチ信号線13がアサートされてない場合“32"を、再フェッチ信号線13がアサートされている場合“28"を選択して出力する。
セレクタ116は、初期状態の場合のみ０を選択し、それ以外はセレクタ115の出力を選択する。
加算器117は、命令アドレスバス64の情報とセレクタ116の出力情報を加算した結果をアドレスバス３へ出力する。
以上のように、アドレスコントローラ61は、命令アドレスバス64、ヘッダアドレスバス65、ヘッダ０信号線66及びアドレスバス３へ必要な情報を出力できる。
次に、セレクトシグナルジェネレータ63の詳細動作を説明する。第14図は、セレクトシグナルジェネレータ63の詳細構成を示すブロック図である。同図において、第８図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、120はオフセット生成回路、121は３ビットの加算器、122〜128は３ビットの加算器、129は３ビットの加算器、130はセレクタである。
オフセット生成回路120は、第１番目のフィールドの位置を０とした場合の、フィールド１〜７の相対位置を示す各３ビットの情報を生成する。相対位置は、インストラクションメモリ１に格納してある圧縮状態での相対位置である。従って、オフセット生成回路120は、存在するフィールドの相対位置のみ有効な情報を出力する。オフセット生成回路120の詳細は、後述する。
加算器121は、命令アドレスバス64の３ビット（IA4〜IA2）の情報に、ヘッダ０信号線66の１ビット情報を加えた結果を出力する。ヘッダを含む命令において、命令アドレスバス64の情報はヘッダの位置を指しているので、その命令の第１番目のフィールド位置を知るために、加算器121での加算が必要になる。加算結果は、フィールド０が存在する場合、フィールド０の位置を示しているので、フィールド選択信号線44へ出力される。
加算器122は、オフセット生成回路120が出力するフィールド１の相対位置情報と第１番目のフィールド位置情報を加算することで、フィールド１の絶対位置情報を生成する。以下同様に、加算器123〜128は、オフセット生成回路120が出力するフィールド２〜７の各々の相対位置情報と第１番目のフィールド位置情報を加算することで、フィールド２〜７の絶対位置情報を生成する。
とくに、セレクタ130は、再フェッチ信号線13がアサートされてない場合にレジスタファイル28の出力を選択し、再フェッチ信号線13がアサートされている場合は加算器129の出力を選択して、フィールド７の選択情報として出力する。
再フェッチ信号線13がアサートされている状態では、命令アドレスバス64は次の命令アドレス情報を示しているので、フィールド７のアドレス情報は、上記アドレス情報から４を減算した結果となる。従って、加算器129は、加算器121と同様に、命令アドレスバス64の３ビット（IA4〜IA2）の情報に−１（111、２進数）を加算することで、フィールド７の選択情報を生成する。
以上のように、セレクトシグナルジェネレータ63は、フィールド選択信号線44などへ必要な選択情報を出力できる。
第15図は、前述したオフセット生成回路120の詳細構成図である。同図において、第14図と同一回路ブロック及び同一信号線には同一符号を付してある。
図中、131は１ビット２入力の加算器、132は１ビット３入力の加算器、133は１ビット４入力の加算器、134は１ビット５入力の加算器、135は１ビット６入力の加算器、136は１ビット７入力の加算器である。
オフセット生成回路120において、フィールド１の相対位置情報は、フィールド０が存在する場合１、存在しない場合０なので、フィールド信号線67のフィールド０の情報そのものとなる。フィールド２の相対位置情報は、フィールド０とフィールド１の有無に依存しており、両方存在しない場合０、どちらか一方が存在する場合１、両方が存在する場合２となる。したがって、加算器131において、フィールド０とフィールド１の各１ビット情報を加算することで、相対位置情報が生成される。
同様に、フィールド３の相対位置情報は、フィールド０〜２の有無に依存しており、加算器132において、フィールド０〜２の各１ビット情報を加算することで、生成される。同様に、フィールド４の相対位置情報は、フィールド０〜３の有無に依存しており、加算器133において、フィールド０〜３の各１ビット情報を加算することで、生成される。同様に、フィールド５の相対位置情報は、フィールド０〜４の有無に依存しており、加算器134において、フィールド０〜４の各１ビット情報を加算することで、生成される。同様に、フィールド６の相対位置情報は、フィールド０〜５の有無に依存しており、加算器135において、フィールド０〜５の各１ビット情報を加算することで、生成される。同様に、フィールド７の相対位置情報は、フィールド０〜６の有無に依存しており、加算器136において、フィールド０〜６の各１ビット情報を加算することで、生成される。
以上がフィールドコントローラ42の詳細説明であり、以下、SIMDコントローラ46の詳細を説明する。
即ち、第16図は、SIMDコントローラ46の詳細を示すブロック図である。同図において、第７図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。図中、140はイネーブルアナライザ140、141〜143は140と同一機能のイネーブルアナライザ、144はシグナルジェネレータ、145〜147は144と同一機能のシグナルジェネレータ、148〜150は２入力の論理積回路、151〜154と156は左側の入力１ビットが０の場合０、１の場合右側の２ビットの情報を出力する論理積回路、155は４入力の１ビット論理和の否定情報を出力するNOR回路155である。
イネーブルアナライザ140は、フィールド０でSIMDモードを指定しているかを検出するものであり、伸張フィールドバス49からフィールド０のビット９〜11（“SIMD"）とビット27（“Ｓモード”）の４ビットを入力する（第２図参照）。“Ｓモード”が０の場合、論理積回路148、149及び150は、０を出力する。一方、Ｓモードビットが１の場合、論理積回路148はビット９の情報を、論理積回路149はビット10の情報を、論理積回路150はビット11の情報を出力する。第２図に示した“SIMD"の意味にしたがって、論理積回路148の情報が１の場合、フィールド０と１の内容をフィールド１と２へ複写することを示す。同様に、論理積回路149の情報が１の場合フィールド０と１の内容を４と５へ、論理積回路150の情報が１の場合フィールド０と１の内容を６と７へ複写することを示す。
同様に、イネーブルアナライザ141はフィールド２で、イネーブルアナライザ142はフィールド４で、イネーブルアナライザ143はフィールド６で、SIMDモードを指定しているかを検出して、複写先を特定する。各イネーブルアナライザ140〜143からの複写指示は、各シグナルジェネレータへ送られる。具体的に、シグナルジェネレータ144は、フィールド０と１がどのフィールドから複写されるかを決定するものであり、フィールド２と３からの複写指示は論理積回路152へ、フィールド４と５からの複写指示は論理積回路153へ、フィールド６と７からの複写指示は論理積回路154へ送られる。これらの複写指示が複数のイネーブルアナライザから同時に送られることはない。このことは、基本的に、コンパイラが保証している。また、同様の理由から、シグナルジェネレータ144においてイネーブルアナライザ140から複写指示が挙げられることはないので、論理積回路151の入力は、０で固定している。
論理積回路152は複写指示を受けると複写元としてフィールド２と３を選択するための情報である１を出力する。同様に、論理積回路153は２、論理積回路154は３を出力する。複写指示がない（SIMDモードでない）場合、NOR回路155はこれを検出し、論理積回路156は、フィールド０と１が選択されるように選択情報０を出力する。最終的には、論理和回路157が、論理積回路151から154と156が出力する３ビット情報の論理和を、フィールド０と１の選択情報としてSIMD選択信号線47へ出力する。
シグナルジェネレータ145は、基本的には、シグナルジェネレータ144と同様に動作する。ただし、フィールド２と３の選択情報を出力するので、イネーブルアナライザ141から複写指示が送られることはないのでそれに対応する入力は０で固定すると共に、複写指示がない（SIMDモードでない）ことを検出するとフィールド２と３が選択されるように選択情報１を出力する。
同様に、シグナルジェネレータ146も、基本的には、シグナルジェネレータ144と同様に動作する。ただし、フィールド４と５の選択情報を出力するので、イネーブルアナライザ142から複写指示が送られることはないのでそれに対応する入力は０で固定すると共に、複写指示がない（SIMDモードでない）ことを検出するとフィールド４と５が選択されるように選択情報２を出力する。
さらに、シグナルジェネレータ147も、基本的には、シグナルジェネレータ144と同様に動作する。ただし、フィールド６と７の選択情報を出力するので、イネーブルアナライザ143から複写指示が送られることはないのでそれに対応する入力は０で固定すると共に、複写指示がない（SIMDモードでない）ことを検出するとフィールド６と７が選択されるように選択情報３を出力する。
以上が、第１図に示した第一の実施例である。本実施例は、NOPの圧縮用のヘッダがあることを前提にして、そのヘッダをSIMDモードでも活用する方式である。
通常、VLIWにおいては、オブジェクトの約80％をNOPが占めている。従って、NOP圧縮は、メモリの使用効率を考慮すると必須の技術である。この技術で用いるヘッダをSIMDモードでも活用することで、オーバーヘッドを軽減できることが、本実施例の特徴である。
本実施例では、各フィールド当たり４ビットの追加で、SIMDモードを実現しているが、ヘッダを前提にしない場合には、各フィールドに７ビットを追加する必要がある。つまり、本実施例で使用した４ビットに加えて、フィールドアドレスの２ビットと同期制御の１ビットが必要になる。
SIMDモード時に省略されたフィールドが存在するので、各フィールド自身がフィールド０、１、または２、３、または４、５、または６、７のどれかを知っている必要がある。このために必要なのがフィールドアドレスの２ビットである。さらに、１命令のフィールド数が不定なので、命令の切れ目が不明である。このために必要なのが同期制御の１ビットであり、１命令毎にビットの情報を反転することで、命令の切れ目検出が可能になる。従って、実施例と同様に１フィールド単位で圧縮を可能にすることまで考慮すると、１命令（32ビット×８＝256ビット）当たり、
0003547139.tif 000002
ただし、［］内は、その数字の意味を示す
が必要になる。２フィールド単位での圧縮に限ると、１命令当たり、
8/2×（２＋１）＋8/2×（３＋１）＝28ビット
になる。一方、本実施例では、ヘッダを含めた１命令当たり、
８［ヘッダ］＋8/2×（３＋１）＝24ビット
で済むことになり、SIMDモードを実現する上でのオーバーヘッドを軽減できる。
次に、上述したヘッダを前提にしない方式を第２の実施例として、第17図を用いて説明する。とくに、本実施例では、上記したうちの、２フィールド単位で圧縮することを前提に考える。同図は、VLIWプロセッサの全体ブロック図である。同図において、第１図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。図中、200は、第１図とは異なる命令伸張回路である。本実施例では、ヘッダを使用しないので、必ず、１命令は32バイト以内に収まり、第１図の再フェッチ信号線13は不要となる。すなわち、第10図に示した命令５で必要になったEXP2ステージは、存在しない。この点が、本実施例の特徴のひとつである、この点と命令伸張回路200の内部動作を除いては、第１図と同じである。
第18図に、本実施例の命令フォーマットを示す。同図においては、INTフィールドとIFGフィールドの０〜27ビットは、第１の実施例と同じである。IFGフィールドの28、29ビットは、そのフィールドのアドレスを示している。IFGフィールドは、フィールド０、２、４及び６の何れかであり、ビット割付は図中のとおりである。また、IFGフィールドのビット30（シンク）は同期信号である。１命令毎に、シンクビットを反転することで、命令の切れ目を認識できるようになる。図中、偶数番目の命令はシンクビットが０、奇数番目の命令はシンクビットが１となる仕様としてある。このような命令フォーマットをベースにして、以下に、本実施例のポイントである命令伸張回路200の詳細動作を説明する。
第19図は命令伸張回路200の詳細を示すブロック図である。同図において、第17図及び第７図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、201は１命令を生成する各フィールドを、圧縮フィールドバス41から選択する情報を生成するフィールドコントローラ、206〜209は上記選択情報を転送する選択情報線、202はフィールド０と１を生成するデュアルセレクタ、203はフィールド２と３を生成するデュアルセレクタ、204はフィールド４と５を生成するデュアルセレクタ、205はフィールド６と７を生成するデュアルセレクタである。図中明示していないが、デュアルセレクタ203〜205は、デュアルセレクタ202と同一の回路構成である。インストラクションバッファ40から同時に読み出される32バイトは、１フィールドに相当する４バイト単位の８本の信号線（41a〜41h）で構成されている。41aは（32×Ｎ）番地、41bは（32×Ｎ＋４）番地、・・・・・・、41hは（32×Ｎ＋28）番地から読み出されたデータに対応している。
デュアルセレクタ202は、選択情報線206の選択情報に従って、圧縮フィールドバス41a、41c、41e、41gの中から選択したフィールド０のデータをフィールドバス５へ、圧縮フィールドバス41b、41d、41f、41hの中から選択したフィールド１のデータをフィールドバス６へ出力する。選択情報線206の選択情報は、４ビットで構成されており、基本的にはその中の１ビットがアサートされるが、全てがアサートされてない場合NOPフィールドであるとみなし、NOPコードに相当する０を出力する。これにより、２フィールド単位でのNOP圧縮が可能になる。デュアルセレクタ203〜205も同様に、フィールド２〜７のデータを生成して出力する。
次に、フィールドコントローラ201の詳細を説明する。第20図は、フィールドコントローラ201の詳細を示すブロック図である。同図において、第８図と第19図と同一機能を有する回路ブロック及び同一信号線には、同一符号を付して有る。
図中、210は圧縮フィールドバス41と命令アドレスバス64の情報から命令長信号線68とライトイネーブルバス43へ出力する情報を生成するシンクロナイザ、211は圧縮フィールドバス41とライトイネーブルバス43の情報から選択情報線206〜209への選択情報を生成するセレクトシグナルジェネレータである。アドレスコントローラ61は第８図に示したアドレスコントローラ61と基本的に同一機能を有している。
シンクロナイザ210は、圧縮フィールドバス41から41a、ｃ、ｅ及びｇのシンクビットを入力する。また、命令アドレスバス64から命令アドレスを入力することで、処理中の命令が上記どのシンクビットであるかを特定できる。さらに、シンクビットの変化点を調べることで、その命令長をしることができる。さらに、その命令が存在する上記圧縮フィールドバス41内のデータを特定し、次にインストラクションバッファ40へ書き込むべき位置を示す情報を命令長信号線68へ出力する。
セレクトシグナルジェネレータ211は、ライトイネーブルバス43の情報と、圧縮フィールドバス41から41a、ｃ、ｅ及びｇの“SIMD"、“Ｓモード”及びアドレス情報を入力する。また、これらの情報から、フィールド０の位置情報４ビット（41a、ｃ、ｅまたはｈの４つのうちの何れかを示す情報）を選択情報線206へ出力する。フィールド０がNOP圧縮されていると４ビット全てが０になる。これは、同時に、フィールド１の選択情報（41b、ｄ、ｆまたはｇの４つのうちの何れかを示す情報）でもある。同様に、フィールド２の位置情報４ビット（41a、ｃ、ｅまたはｈの４つのうちの何れかを示す情報）を選択情報線207へ、フィールド４の位置情報４ビット（41a、ｃ、ｅまたはｈの４つのうちの何れかを示す情報）を選択情報線208へ、フィールド６の位置情報４ビット（41a、ｃ、ｅまたはｈの４つのうちの何れかを示す情報）を選択情報線209へ、出力する。以下に、シンクロナイザ210とセレクトシグナルジェネレータ211の詳細動作を説明する。
第21図は、シンクロナイザ210の詳細を示すブロック図である。同図において、第20図同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、220はインストラクションバッファ40の41aとｂへの書き込み有効になる情報を生成するライトイネーブル生成回路、221〜223は、ライトイネーブル生成回路220と同一機能を有しており、各々、インストラクションバッファ40の41cとｄへ、41eとｆへ、41gとｈへの書き込み有効になる情報を生成するライトイネーブル生成回路、224は命令アドレスバス64の情報のうち、IA4とIA3の２ビットをデコードするデコーダである。デコーダ224が出力する４本の信号線は、セレクトシグナルジェネレータ63が41aと41bを示す信号、41cと41dを示す信号、41eと41fを示す信号及び41gと41hを示す信号である。
ライトイネーブル生成回路220は、41aとｂの書き込み有効情報を生成する。圧縮フィールドバス41から41aと41gのシンク情報、デコーダ224から41aとｂのデコード信号及びライトイネーブル生成回路223から書き込み有効情報を入力する。デコーダ224からのデコード信号が、アサートされると、ライトイネーブル生成回路220は書き込み有効情報をアサートする。デコード信号がアサートされてない場合、ライトイネーブル生成回路223の出力がアサートされてないと、書き込み有効情報をネゲートする。デコード信号がアサートされてなく、かつ、ライトイネーブル生成回路223がアサートされている場合、41aのシンク情報と41gのシンクビットを比較して、同一ならば命令の切れ目でないと判断して書き込み有効情報をアサートする。逆に、比較結果が同一でない場合、命令の切れ目であると判断して、書き込み有効情報をネゲートする。
このように、ライトイネーブル生成回路220は、41aとｂの書き込み有効情報を生成する。これにより、次サイクルへの遷移時に、インストラクションバッファ40へ書き込むか否かを制御する。同様の考え方で、ライトイネーブル生成回路221は41cとｄ書き込み有効情報を、ライトイネーブル生成回路222は41eとｆ書き込み有効情報を、ライトイネーブル生成回路223は41gとｈ書き込み有効情報を生成して、ライトイネーブルバス43へ出力する。加算器225は、ライトイネーブル生成回路220〜223の４つの信号を入力して、１ビットの４入力加算結果を命令長信号線68へ出力する。１ビットは８バイト（２フィールド分）なので、加算結果は、最大32バイトである。加算結果は、命令長情報として命令長信号線68へ出力される。
次に、セレクトシグナルジェネレータ211の詳細動作を説明する。第22図はセレクトシグナルジェネレータ211の詳細を示すブロック図である。同図において、第20図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
230〜233は、同一機能を有する行き先信号生成回路である。行き先信号生成回路230においては、234が図中に示した真理値表を実現する組み合わせ回路、235が２ビットのデコーダ、236〜239は同一機能を有する論理回路である。
行き先信号生成回路230は、41aとｃがどのフィールドに相当するかを決定している。論理回路236はフィールド０と１に相当することを、論理回路237はフィールド２と３に相当することを、論理回路238はフィールド４と５に相当することを、論理回路239はフィールド６と７に相当することを示す。したがって、41aとｂがフィールド０と１に相当すると論理回路236の出力が、フィールド２と３に相当すると論理回路237の出力が、フィールド４と５に相当すると論理回路238の出力が、フィールド６と７に相当すると論理回路239の出力が、アサートされる。また、41aの命令がSIMDモードを指定していると、行き先信号生成回路230は複数の信号を同時にアサートする。例えば、他の３つのフィールド全てに複写する場合、論理回路236〜239の出力信号が全てアサートされる。
行き先信号生成回路230は、圧縮フィールドバス41の中から41aの“SIMD"、“Ｓモード”及びアドレスを入力する。これらの入力情報から、組み合わせ回路234は、図に示した真理値表にしたがって、sf0〜３の出力情報を生成する。sf0〜３は、41aのフィールドがＳモードを指定時に、41aの複写先フィールドを指定する信号である。図中、ａ、ｂ及びｃは“SIMD"3ビットの論理値を示す。したがって、sf0〜３のａ、ｂ及びｃは、その論理値をそのまま出力することを示している。sf0は、41aフィールドがSIMDモードを指定しており、複写先としてフィールド０が指定されている時にアサートされる。同様に、sf1〜３は、複写先としてフィールド２、４、６が指定されている時にアサートされる。
デコーダ235は、フィールドのアドレス情報をデコードして、41aがどのフィールドであるかを示す。フィールド０ならば論理回路236への出力を、フィールド２ならば論理回路237への出力を、フィールド４ならば論理回路238への出力を、フィールド６ならば論理回路239への出力を、アサートする。
また、行き先信号生成回路230は、ライトイネーブルバス43の中から43aの書き込み有効情報を入力する。この情報がアサートされていることは、43aが実行命令のフィールドであることを示す。したがって、この信号がアサートされてない場合、論理回路236〜239の出力は、全てアサートされることはない。逆に、アサートされている場合、デコーダ235の出力線の中のアサートされている一つの信号線が接続されている論理回路が出力信号をアサートする。アドレスが00（２進数）ならば論理回路236が、アドレスが01（２進数）ならば論理回路237が、アドレスが10（２進数）ならば論理回路238が、アドレスが11（２進数）ならば論理回路239が、出力信号をアサートする。例えば、論理回路236がアサートしており、SIMDモードでフィールド２と４への複写を指定していると、行き先信号生成回路230が論理回路237と238への信号をアサートするので、論理回路236と237の出力信号もアサートされる。
以上のように、行き先信号生成回路230は、41aがどの命令フィールドに相当するかを、さらに、SIMDモード時の複写先フィールドを解析した上で、41aの行き先フィールドを、選択情報線206を介してデュアルセレクタ202に対して指定する。同様に、行き先信号生成回路231は41c、行き先信号生成回路232は41e、行き先信号生成回路233は41g、がどの命令フィールドに相当するかを、さらに、SIMDモード時の複写先フィールドを解析した上で、各々41c、41e、41gのフィールド情報の行き先フィールド番号を各デュアルセレクタに対して指定する。
これら行き先信号生成回路230〜233の出力信号で出力する行き先がフィールド０であるものは選択情報線206へ出力される。同様に、これら行き先信号生成回路230〜233の出力信号で出力する行き先が、フィールド２であるものは選択情報線207へ、フィールド４であるものは選択情報線208へ、フィールド６であるものは選択情報線209へ、出力される。これらの選択情報を使って、第19図におけるデュアルセレクタ202〜205が圧縮フィールドバス41の情報から各フィールド情報を選択することができる。
以上が、第２の実施例である。この実施例の特徴は、第１の実施例のようにヘッダ情報を用いることなく、SIMDモードを実現している点である。これによる利点は、最大命令長が32バイトのため、次に実行する命令が必ずインストラクションバッファ40（32バイト）内に揃っていることが保証されるので、１命令を揃えるために１サイクル余分に必要とするケースがなくなり、パイプラインの制御が容易になることである。第１の実施例において上記余分な１サイクルを不要にするためには、64バイトのバッファを用意する必要がある。しかし、本実施例では、これを必要とせず、ハードウエア量が少なくて済むという特徴がある。
次に、第３の実施例について、第23図を用いて説明する。同図において、第17図と同一機能有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、240は各演算ユニットに共通のレジスタファイル、241は本実施令特有の命令伸張回路である。本実施例は、レジスタファイル240が各演算ユニット共通な構成となっている点が特徴である。この場合、命令フォーマットにおいて、レジスタを指定する方法が異なる。
本実施例の具体的な命令フォーマットを第24図に示す。同図は、基本的には、第18図と同様であるが、以下の点で異なっている。デスティーションとしてバンク指定が不要になるため、IFGフィールドのビット９〜11は、SIMDモード時にだけ有効となり、ノーマルモード時には意味を持たない。同様に、INTフィールドのビット11〜13も無効となっている。この場合、SIMDモード時に問題が発生する。つまり、各フィールドが指定するレジスタ番号が物理的に同じレジスタを示すため、レジスタリソースの競合が発生する。このため、SIMDモードによって複写されたフィールドのレジスタ番号を調整して、競合発生を避ける必要がある。これは、命令伸張回路241によって行われる。
第25図は命令伸張回路241の詳細ブロック図である。同図において、第23図及び第19図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。
図中、250〜253は、レジスタアジャスタである。レジスタアジャスタ250は、入力したフィールドのビット27をチェックする。もしノーマルモードならば、そのフィールド内のレジスタ番号の変更は行わない。逆に、SIMDモードならば、ビット28と29のアドレスをチェックする。その結果、アドレスがフィールド０ならば複写元フィールドであると判断できるので、レジスタ番号の変更を行わない。逆に、これ以外のフィールドならば、複写先のフィールドであると判断してレジスタ番号（ビット12〜16、17〜21、22〜26）を更新する。具体的に、フィールド３ならばオフセット値１、フィールド２ならばオフセット値２、フィールド１ならばオフセット値３を各レジスタ番号に加える。
同様に、レジスタアジャスタ251も動作する。レジスタアジャスタ251は、入力したフィールドのビット27をチェックする。もしノーマルモードならば、そのフィールド内のレジスタ番号の変更は行わない。逆に、SIMDモードならば、ビット28と29のアドレスをチェックする。その結果、アドレスがフィールド１ならば複写元フィールドであると判断できるので、レジスタ番号の変更を行わない。逆に、これ以外のフィールドならば、複写先のフィールドであると判断してレジスタ番号（ビット12〜16、17〜21、22〜26）を更新する。具体的に、フィールド０ならばオフセット値１、フィールド３ならばオフセット値２、フィールド２ならばオフセット値３を各レジスタ番号に加える。以下、レジスタアジャスタ252と253も同様に動作する。このようなレジスタアジャスタ250〜253は、上記した動作を簡単な組み合わせ回路で実現できる。
組み合わせ回路を実現するための真理値表を第26図に示す。同図において、入力フィールドのＳモードはビット27、アドレスはビット28と29、レジスタ＃はビット12〜16、17〜21、22〜26の各入力値（０〜31）を示している。出力フィールドのレジスタ＃は、ビット12〜16、17〜21、22〜26の各出力値を示している。とくに、出力レジスタ＃が31を越えた場合は、32を引いた値とする。
このように、レジスタファイルが複数の演算器で共通に使用される構成のプロセッサにも本発明は、適用可能である。
なお、上記第１、２、３の実施例での命令フォーマットは一例であって、これに限るものではない。
また、第１、２、３の実施例共に、静的なスケジューリングを前提にするVLIWプロセッサに適用したものであるが、本発明は、このアーキテクチャに限定するものではない。例えば、動的にスケジューリングを行うスーパースカラ型プロセッサにも、本発明は適用できる。スーパースカラ型プロセッサの１命令は、基本的に前述の実施例で言うところの１フィールドの固定長で構成されている。このようなプロセッサは、複数の演算ユニットと命令キューを内蔵しており、キューの中に存在する複数命令の依存関係を調べて、その結果、依存関係がなく、実行可能な複数の命令が存在すると、それらの命令を同時に複数の演算ユニットへ転送するディスパッチャを備えている。したがって、本発明の第２図で示したように、“Ｓモード”と“SIMD"によってSIMDモードが命令フォーマット中で指定されていると、上記ディスパッチユニットがその命令を複数の演算ユニットへ転送することで、スーパースカラ型プロセッサのSIMDモードが容易に実現できる。
具体的な全体ブロック図は、第27図に示す。同図において、第23図と同一機能を有する回路ブロック及び同一信号線には同一符号を付して有る。図中、260はスーパースカラ型アーキテクチャに対応した命令伸張回路である。
また、この実施例における命令フォーマットを第28図に示す。同図に示すとおり、IFG及びINTフィールドが各々１命令である。したがって、命令がどちらのフォーマットであるかを知る必要があるため、ビット31が０の時にIFGフォーマット、１の時のINTフォーマットであることを示す。このビット以外は、第24図と同様である。ただし、INT命令フォーマットの“デスティネーション”、“ソース0"、“ソース1"及びスペアブロックは、そのビット位置が異なっている。したがって、命令伸張回路260が、同時に実行可能な複数の命令を抽出して、各演算ユニットへ投入することになる。
命令伸張回路260の詳細構成を第29図に示す。同図において、第27図及び第25図と同一機能を有する回路ブロック及び同一信号線には、同一符号を付してある。
図中、270は命令のスケジューリングを行い各演算器への命令投入を制御するディスパッチャ、271は命令キューである。同図において命令キュー271は、最大８命令を格納することができる。これらの命令は、圧縮フィールドバス41a〜41hを通して、ディスパッチャ270が、全て知ることができる。
ディスパッチャ270は、各命令フィールドの内容を解析して、プロセッサの内部資源の依存性を調べる。その結果、相互に非依存な複数の命令を決定して、それらの命令を然るべき演算ユニットへ投入するための情報を、デュアルセレクタ202〜205へ転送する。一方、ライトイネーブルバス43は、命令キュー271内のどの命令が実行されたかを命令キュー271へ知らせると共に、アドレスバス３を介して、次に、命令キュー271が保持する命令コードが存在するアドレス情報をアドレスバス３へ出力する。例えば、41a〜41cの３命令が実行されると、命令キュー271は、41d〜41hの５命令を41a〜41eの位置へ転送すると同時に、41f〜41hへアドレスバス３の情報にしたがって転送されてくる３つの命令をラッチする。
このような構成のスーパースカラ型プロセッサにおいて、ディスパッチャ270が“SIMD"を解析して、１命令を複数の演算ユニットへ投入することは、第19図のフィールドコントローラ201の構成を参考すれば、容易に実現可能である。
このようなスーパースカラ型プロセッサは、動的なスケジューリングを行うものの、実際には、並列性を引き出すために、コンパイラが命令の並び替え（例えば、ループ展開）を行っている。これにより、オブジェクトコードサイズが大きくなるため、１命令で複数命令の実行が可能になる本発明は、スーパースカラ型プロセッサのコードサイズ削減にも有効である。
また、本発明において、第１図に示した実施例では、演算ユニット22〜25の演算ユニットは、全く同一の機能を有することを前提にしてあるが、本発明は、これに限ったわけではない。例えば、SIMDモードで動作可能な命令を限定する場合もある。具体的には、各演算ユニット22〜25が、マルチメディアに有効な演算の命令セットだけをSIMDモードに対応し、分岐命令などに対応していない場合には、各演算ユニット22〜25が必ずしも全く同一である必要はない。この場合の利点は、演算ユニットがサポートするオペレーション数を多くとれることである。
例えば、第２図に示したIFGフィールドにおいては、８ビットの“オペコード”と１ビットの“Ｓモード”により、256種類の命令に対応可能であり、各命令全てに対してSIMDモードを指定できる仕様となっている。ここで、SIMDモードで動作可能な命令を128種類に絞ると、演算ユニット22〜25は最大384種類の命令をサポートできる。つまり、８ビットの“オペコード”で指定する半分の128種類の命令がSIMDモードを指定しないので、“Ｓモード”の１ビットを“オペコード”の一部として使用可能になり、結果として、SIMDモードに対応しない命令は256種類をサポートできることになる。
さらに、本発明は、SIMDモードを使用するため、第１図における演算ユニット22〜25が同一機能を有している。この構成は、SIMDモードに使用する以外にも次のような効果もある。
第一に、プロセッサの開発工数削減効果である。つまり、演算ユニット22の回路をコピーすることで、演算ユニット23〜25の回路を開発できる。つまり、回路規模に対する開発工数が通常の25％で済むことになる。
第二に、各演算ユニットの稼動率を向上できる効果である。各演算ユニット内のIFG演算器が、数値演算命令とマルチメディア処理命令など複数用途に対応できる構成とすることがポイントである。このような構成により、数値演算が必要なアプリケーションに対しては４つの演算ユニット22〜25の各IFG演算器が数値演算命令を実行し、マルチメディア処理が必要なアプリケーションに対しては４つの演算ユニットの各IFG演算器がマルチメディア処理命令を実行することで、IFG演算器の能力を多様なアプリケーションに対してフルに発揮できる。
ここで、ポイントとなるIFG演算器の構成例について説明する。数値演算で使用する32×32ビットの乗算命令と、マルチメディアに使用する128ビットデータを、８×８ビットの演算を同時に16個実行して行う分割乗算命令とを実行できるIFG演算器の構成方法について述べる。通常32×32ビットの乗算の結果は、データを４つの８ビットに分割して、16個の８×８ビットの乗算に分割して、各乗算結果の総和を求めることで得られる。従って、16個の８ビット乗算器が必要になる。この点に着目すると、マルチメディア処理で多用される８ビットの乗算を16演算同時に実行することができる。よって、ほとんどの回路部分を共通にしながら、多様なアプリケーションに対応できるIFG演算器を実現できる。この詳細なIFG演算器構成を第30図を用いて以下に説明する。
第30図において、第１図と同一機能を有する回路ブロック及び同一信号名には同一符号を付してある。
図中、300と301はマルチメディアに使用する分割乗算命令のオペランドを保持する128ビットのレジスタ、302は32ビットの乗算命令用のデータを８ビット単位に分配するオペランドルータ、303は256ビットの２入力セレクタ、304は８ビット乗算器、305は乗算結果の加算を行う加算器である。
先ず、分割乗算命令の動作を説明する。分割乗算命令は、レジスタ300に格納された16個の８ビットデータ（a0〜a15）とレジスタ301に格納された16個の８ビットデータ（b0〜b15）に対して、（a0×b0＋a1×b1＋a2×b2＋a3×b3＋a4×b4＋a5×b5＋a6×b6＋・・・・＋a15×b15）の計算を行う。このため、先ず、この乗算命令を実行する前に、レジスタ300と301にデータをセットする。
この命令が実行されると、セレクタ303は、レジスタ300と301のデータを選択して各乗算器に出力する。乗算器304は、a0×b0の項を計算する。残りの15個の乗算器は、同様に、a1×b1、a2×b2、a3×b3、・・・・、a15×b15を計算する。各乗算結果は、加算器305へ送られる。この命令が実行されていると、加算器305は、16個の乗算結果の総和を計算した結果を出力する。
一方、32ビット×32ビットの乗算命令は、４個の８ビットデータ（a0〜a3とb0〜b3）に分割して、次の16個の８ビット乗算に分割する。
（c0＝a0×b0、c1＝a0×b1、c2＝a0×b2、c3＝a0×b3、c4＝a1×b0、c5＝a1×b1、c6＝a1×b2、c7＝a1×b3、c8＝a2×b0、c9＝a2×b1、c10＝a2×b2、c11＝a2×b3、c12＝a3×b0、c13＝a3×b1、c14＝a3×b2、c15＝a3×b3）
このような16個の８ビット乗算ができるように、オペランドルータ302は、各乗算器に供給するオペランドデータを出力する。
乗算命令の実行時には、セレクタ303が、オペランドルータ302の出力を選択して各８ビット乗算器へ出力する。さらに、乗算結果は、加算器305へ送られる。加算器305は上記16個の乗算結果を以下のように、計算する。
（c0＋（c1＋c4）×16＋（c2＋c5＋c8）×162＋（c3＋c6＋c9＋c12）×163＋（c7＋c10＋c13）×164＋（c11＋c14）×165＋c15×166）
この計算結果が32ビット×32ビットの乗算結果として出力される。
以上述べたように、回路の大半を占める16個の８ビット乗算器を、通常の乗算命令と分割乗算命令で兼用できる。このように構成した演算器で構成した演算ユニットを複数並べることで、各種アプリケーションに対応可能になり、各演算ユニットの稼動率を高めたVLIW型プロセッサを実現可能になる。
産業上の利用可能性
以上述べたように、本発明によれば、マルチメディア処理など同一種類の演算を繰り返し実行するような並列プロセッサの命令コード量の削減に有効である。また、本発明は、同一機能の演算ユニットを複数並べた構成となっているため、演算ユニットの設計工数を削減できることに加えて、並列度向上に対しても演算ユニットの数を増加するだけで簡単にハードウエアを実現できる効果がある。
さらに、画像処理のようなマルチメディア処理を考慮すると、処理する画像の領域を複数に分割し、各領域の処理を各実行ユニットに割り当てるようなプログラム構造にすることができる。したがって、一つの実行ユニットのプログラムを開発し、それを他３つの実行ユニットにも流用することでソフトウエアの開発工数を削減できる効果もある。
さらに、本発明は、VLIWやスーパースカラなど多用なアーキテクチャのプロセッサに適用可能である。
【図３】
0003547139.tif 000003
【図１】
0003547139.tif 000004
【図２６】
0003547139.tif 000005
【図２】
0003547139.tif 000006
【図４】
0003547139.tif 000007
【図５】
0003547139.tif 000008
【図６】
0003547139.tif 000009
【図７】
0003547139.tif 000010
【図８】
0003547139.tif 000011
【図９】
0003547139.tif 000012
【図１２】
0003547139.tif 000013
【図１０】
0003547139.tif 000014
【図１１】
0003547139.tif 000015
【図１３】
0003547139.tif 000016
【図１４】
0003547139.tif 000017
【図１５】
0003547139.tif 000018
【図１６】
0003547139.tif 000019
【図１７】
0003547139.tif 000020
【図１８】
0003547139.tif 000021
【図１９】
0003547139.tif 000022
【図２０】
0003547139.tif 000023
【図２１】
0003547139.tif 000024
【図２２】
0003547139.tif 000025
【図２３】
0003547139.tif 000026
【図２４】
0003547139.tif 000027
【図２５】
0003547139.tif 000028
【図２７】
0003547139.tif 000029
【図２８】
0003547139.tif 000030
【図２９】
0003547139.tif 000031
【図３０】
0003547139.tif 000032