(57)【特許請求の範囲】
【請求項１】
複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、  
各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライ
ン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される少なくとも１つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致するか否かを判定することによりレジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整することを特徴とするベクトル処理回路。
【請求項２】
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定した場合に、前記先行命令の種別に応じて設定される第１ペナルティサイクルと、
前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数に応じて設定される第２ペナルティサイクルを挿入することにより、前記後続命令の発行タイミングを遅延させることを特徴とする請求項１に記載のベクトル処理回路。
【請求項３】
前記ベクトルレジスタファイルは、前記配列レジスタ要素がベクトル長に応じてグループ化されて構成された複数の配列レジスタを含み、
前記パイプライン演算器の各々は、
前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された前記配列レジスタに格納されたデータを複数のサイクルに分けて演算し、
前記演算結果をディスティネーションとして指定された前記配列レジスタに複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記先行命令のデータ語長に応じて前記配列レジスタのデータサイズを変化させ、
前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される前記配列レジスタと、前記後続命令の先頭サイクルで処理される前記配列レジスタとの間で、レジスタ干渉の有無を判定する
ことを特徴とする請求項１又は２に記載のベクトル処理回路。
【請求項４】
前記複数の配列レジスタの各々には論理番号が割り当てられ、
前記レジスタ干渉の有無の判定は、
前記先行命令で指定された論理番号を有する前記配列レジスタの中で、
前記先行命令の非先頭サイクルで処理される前記配列レジスタ要素の物理番号と、
前記後続命令で指定された論理番号を有する前記配列レジスタの中で、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号が一致する否かを判定することにより行われることを特徴とする請求項３に記載のベクトル処理回路。
【請求項５】
前記命令は、命令コード、前記命令コードのソースとなる前記配列レジスタを示すソース情報、及び前記命令コードのディスティネーションとなる前記配列レジスタを示すディスティネーション情報を含み、
前記命令発行制御回路は、前記先行命令及び前記後続命令の少なくとも一方のディスティネーション情報によって示される前記配列レジスタと、他方のソース情報又はディスティネーション情報によって示される前記配列レジスタとの間で、レジスタ干渉の有無を判定することを特徴とする請求項３又は４に記載のベクトル処理回路。
【請求項６】
前記パイプライン処理は少なくとも、前記配列レジスタ要素に格納されたデータを演算する演算ステージと、前記演算結果のデータを前記ベクトルレジスタに格納する書き戻しステージを有し、
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定したとき、少なくとも、レジスタ干渉が有ると判定された前記配列レジスタ要素に対する前記先行命令の前記演算ステージの結果が、前記書き戻しステージで前記ベクトルレジスタファイルに格納されるまで、前記後続命令を発行しないように、前記後続命令の発行タイミングを調整することを特徴とする請求項１乃至５のいずれかに記載のベクトル処理回路。
【請求項７】
前記パイプライン演算器の演算処理結果のデータを、前記ベクトルレジスタファイルを経由することなく受けとるフォワーディング回路をさらに有し、
前記フォワーディング回路は受けとったデータを、
前記パイプライン演算器に、
前記ベクトルレジスタファイルを経由することなく供給することを特徴とする請求項１乃至６のいずれかに記載のベクトル処理回路。
【請求項８】
複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、
各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
を有するベクトル処理回路において、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御方法であって、
前記パイプライン演算器の各々によって、発行された１つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、
前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、
前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、制御回路によって、前記先行命令の非先頭サイクルで処理される少なくとも１つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致するか否かを判定することによりレジスタ干渉の有無を判定し、
前記レジスタ干渉の判定によりレジスタ干渉が有ると判定された場合に、前記制御回路によって、前記後続命令の発行タイミングを調整することを特徴とする命令発行制御方法。
【請求項９】
バスと、
バスインターフェースと、
前記バスに前記バスインターフェースを介して接続され、命令を格納する命令メモリと、
前記命令メモリに接続され、前記命令メモリに格納された命令を受けてデータの処理を実行するスカラ処理回路と、
前記スカラ処理回路に接続され、前記スカラ処理回路からの命令を受けてデータの処理を実行するベクトル処理回路と、
前記バスに前記バスインターフェースを介して接続され、前記スカラ処理回路及び前記ベクトル処理回路に対して、前記データの送受信を行うデータメモリを有するプロセッサシステムであって、前記ベクトル処理回路は、
複数の配列レジスタ要素を含み、各配列レジスタ要素の各々には物理番号が割り当てられているベクトルレジスタファイルと、
各々が前記配列レジスタ要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された複数の前記配列レジスタ要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列レジスタ要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列レジスタ要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される少なくとも１つの前記配列レジスタ要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致するか否かを判定することによりレジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整することを特徴とするプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例の一側面において開示する技術は、ベクトルレジスタファイルに格納されたデータに対してパイプライン処理を行うベクトル処理回路、及びそのベクトル処理回路を含むプロセッサシステムに関する。
【背景技術】
【０００２】
データの演算処理を行う回路として、ベクトル処理回路が知られている。ベクトル処理回路は、一般にスーパーコンピュータにおいて用いられており、ベクトルレジスタファイルに格納された配列型のデータを扱う。
【０００３】
ベクトル処理回路は、命令に応じて所望の演算処理を行う複数のパイプライン演算器を有し、各パイプライン演算器においてマルチサイクル動作を行う。すなわち、ベクトル処理回路は、処理すべき配列データを複数の部分データごとに複数のサイクルにわたって処理し、配列データ全体に対する処理を完了するまで複数のサイクルにわたって各パイプライン演算器を占有する。
【０００４】
配列データのサイズ、すなわち配列要素の個数は、ベクトル長（ＶＬ）によって指定される。ベクトル長によって指定された個数の配列要素は１つの配列レジスタを構成する。ベクトル長はベクトル処理回路内に設けられたベクトル長レジスタによって指定される。各配列要素のサイズは、ベクトル処理回路が扱うデータ語長に応じて割り当てられる。データ語長は命令によって指定される。
【０００５】
図１は、スーパーコンピュータ向けのベクトルレジスタファイルの構成例を示す図である。図１に示したベクトルレジスタファイル１０１は、１ダブルワード（ｄｏｕｂｌｅｗｏｒｄ）×２５６エントリの構成を有し、ベクトル長は１６である（ＶＬ＝１６）。
【０００６】
図１に示した例では、１つの配列要素１０２はそれぞれ６４ビットのデータを格納する。１６個の配列要素１０２により１つの配列レジスタ１０３が構成され、ベクトルレジスタファイル１０１は１６個の配列レジスタ１０３により構成されている。各配列レジスタ１０３には配列データ１０４が格納されている。各配列要素には物理番号（０〜２５５）が割り当てられており、各配列レジスタには論理番号（０〜１５）が割り当てられている。ベクトルレジスタファイル１０１に対するアクセスは、配列レジスタの論理番号を指定することにより行われるが、更に、指定された論理番号とベクトル長に基づいて、配列要素の物理番号を生成することにより行われる。
【０００７】
また、図１のスーパーコンピュータ向けの構成例では、ベクトル処理回路が扱う最大のデータ語長（例えば、６４ビット）を基本単位として配列要素のサイズが割り当てられている。データ語長の長さが半分の場合（例えば、３２ビット）には、各配列要素において前半の３２ビットのみを使用し、後半の３２ビットは不使用とする方法が採用されている。図１に示したように、例えば、ベクトル処理回路が倍精度処理型の命令を扱う場合には、データ語長は６４ビットであり、例えば、各配列要素において６４ビット全てを使用する。一方、単精度処理型の命令を扱う場合には、データ語長は３２ビットであるため、各配列要素において前半の３２ビットのみを使用する。
【０００８】
ところで、ベクトル処理回路においては、命令発行時に、先行命令と後続命令の間でレジスタ干渉の有無が判定される。これは、先行命令で指定された配列レジスタと、後続命令で指定された配列レジスタとが重複する場合、先行命令における処理結果（配列データ）を適切に後続命令における処理に反映させるために、相互の命令の発行タイミングを適切に調整する必要があるからである。
【０００９】
通常、各パイプライン演算器で処理される配列データは対応する配列レジスタを構成する先頭の配列要素の物理番号（または、論理番号）のみで区別することができる。配列データは同一の数の配列要素で構成され、１つの命令に対して、対応する配列レジスタを構成する複数の配列要素が一体として処理されるためである。例えば、図１に示したベクトルレジスタファイル１０１においては、各配列レジスタ（論理番号０〜１５）の配列データの区別は、各配列レジスタの先頭の配列要素の物理番号（０，１６，３２，・・・，２４０）により可能である。
【００１０】
このため、先行命令と後続命令の間でレジスタ干渉の有無を判定するときには、先行命令で指定された配列レジスタの先頭の配列要素の物理番号と、後続命令で指定された配列レジスタの先頭の配列要素の物理番号を比較するのが一般的であった。
【００１１】
また、先行命令と後続命令の間でレジスタ干渉が検出された場合、先行命令における処理結果がレジスタファイルに書き込まれるまで一定のサイクルだけ遅延させてから後続命令を実行させる技術が知られている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平１０−１１０６８６号公報
【特許文献２】特開平１０−１２４３１３号公報
【特許文献３】特公平０７−８６８３８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
従来、ベクトル処理回路は一般にスーパーコンピュータのようなハイパフォーマンスコンピューティングの分野において使用されてきたが、近年、ベクトル処理回路を無線ベースバンド処理のような信号処理系アプリケーションの分野に応用することが検討されている。この場合、ベクトル処理回路はＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）のような組み込み機器向けのプロセッサにおいて使用されることが想定される。
【００１４】
また、上記の無線ベースバンド処理のような分野では、例えばデータ語長が１６ビットであるハーフワード（Ｈａｌｆｗｏｒｄ）命令とデータ語長が３２ビットであるワード（Ｗｏｒｄ）命令のように、データ語長が異なる命令をプログラム中に混在させて使用するケースが頻繁に発生する。
【００１５】
先行命令と後続命令との間でデータ語長が異なる場合であっても、レジスタ干渉の有無を判定する必要がある。そこで、図１に示したスーパーコンピュータ向けのベクトルレジスタファイル１０１の構成例を使用することが考えられる。この場合、データ語長の異なる命令が混在する場合であっても、常に同じサイズの配列レジスタをアクセス単位としてベクトルレジスタファイルへのアクセスが行われるため、データ語長の違いに関わらず、レジスタ干渉の有無の判定を、命令で指定された配列レジスタの先頭の配列要素の物理番号のみを比較することによって、実行することができる。
【００１６】
しかしながら、半分のサイズのデータ語長の命令（ハーフワード命令）を実行する場合、各配列要素の後半部分が使用されないため、実質的にベクトルレジスタファイル１０１の半分の領域が使用されず、レジスタの使用に大きな無駄が生じる。このことは、限られた容量のレジスタしか搭載することができず、ベクトルレジスタファイルの全体の容量を十分に大きくすることが困難な、組み込み機器向けプロセッサにおいては大きな問題となる。
【００１７】
一方、データ語長の異なる命令が混在する場合には、レジスタ干渉の有無に関わらず無条件で、先行命令の処理が終了するまで後続命令をストールさせるように、後続命令の発行を遅延させることにより、レジスタ干渉が生じる危険を回避することも考えられる。
【００１８】
しかしながら、この場合、各パイプライン演算器において実質的にパイプライン処理が並行して実行されないことになるので、ベクトル処理回路の利点を生かすことができず、命令実行の効率が極めて悪くなる。このことは、限られた処理能力の演算器しか搭載することができず、パイプライン演算器の処理能力を十分に大きくすることが困難な、組み込み機器向けプロセッサにおいては大きな問題となる。
【００１９】
従って、本実施例の一側面におけるベクトル処理回路は、プログラム中にデータ語長が異なる命令が混在する場合であっても、限られたレジスタ容量のベクトルレジスタファイルを無駄なく使用しながら、データ語長が異なる命令に対してレジスタ干渉の有無の判定を正確に行うことを目的とする。さらに、レジスタ干渉の有無を正確に検出することによって先行命令と後続命令の発行タイミングを適切に調整し、命令実行の効率化を図ることを目的とする。
【００２０】
さらに、限られたレジスタ容量と処理能力しか持たない、組み込み機器向けプロセッサ向けのベクトル処理回路であっても、データ語長が異なる命令を効率的に実行できるようにすることを目的とする。
【課題を解決するための手段】
【００２１】
本実施例に係るベクトル処理回路は、複数の配列要素を含むベクトルレジスタファイルと、各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、先行命令と前記先行命令の後に続く後続命令を含む命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器を制御して、パイプライン処理を制御する命令発行制御回路とを有するベクトル処理回路であって、前記パイプライン演算器の各々は、１つの命令に対して、前記命令でソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果を前記命令でディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも１つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、レジスタ干渉が有ると判定した場合に、前記後続命令の発行タイミングを調整することを特徴とする。
【発明の効果】
【００２２】
本実施例に係るベクトル処理回路では、データ語長が異なる命令が混在する場合であっても、複数のレジスタ干渉の態様に応じて、先行命令と後続命令との間でレジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
【図面の簡単な説明】
【００２３】
【図１】スーパーコンピュータ向けのベクトルレジスタファイルの構成例を示す図である。
【図２】第１実施例に係るベクトル処理回路の構成例を示す図である。
【図３】ベクトルレジスタファイル２０１の構成例を示す図である。
【図４】ベクトル処理回路２００のパイプライン処理を説明するための図である。
【図５】先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理を説明するための図である。
【図６】先行命令のデータ語長と後続命令のデータ語長が同一の場合の、命令発行タイミングの調整処理の一例を示す図である。
【図７】先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理を説明するための図である。
【図８】先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。
【図９】先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。
【図１０】命令発行制御回路２０２の処理フロー１０００を示す図である。
【図１１】発行判定値ＩＤの設定方法を示す図である。
【図１２】第２実施例に係るベクトル処理回路の構成例を示す図である。
【図１３】スカラレジスタファイル１２０１の詳細を示す図である。
【図１４】ベクトルレジスタファイル２０１の内容を示す図である。
【図１５】ベクトル処理回路１２００の動作の一例を示す図である。
【図１６】図１５の命令ＩＮＳＴ１〜５に対して従来の命令発行タイミング調整処理を適用した例を示す図である。
【図１７】第３実施例に係るベクトル処理回路の構成例を示す図である。
【図１８】第４実施例に係るプロセッサシステムの一例を示す図である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施例について説明する。
【実施例】
【００２５】
［１．第１実施例］
図２は、本発明の第１実施例に係るベクトル処理回路の構成例を示す図である。図２に示したように、ベクトル処理回路２００はベクトルレジスタファイル２０１、命令発行制御回路２０２、４つのパイプライン演算器２０３〜２０６及び命令バッファ２０７を含み、後述する複数のパイプラインステージに従ってパイプライン処理を実行する。
【００２６】
［１−１．ベクトル処理回路の構成例］
まず、ベクトル処理回路２００の構成例について、図２を用いて説明する。
【００２７】
命令バッファ２０７はベクトル処理回路２００が実行する命令を格納する。命令発行制御回路２０２は、命令バッファ２０７に接続され、命令バッファ２０７から命令を受けとる。命令発行制御回路２０２は、受けとった命令に基づいてベクトルレジスタファイル２０１及びパイプライン演算器２０３〜２０６の動作を制御する。命令発行制御回路２０２は、受けとった命令（後続命令）と、すでに実行中の命令（先行命令）との間でレジスタ干渉の有無を判定し、判定結果に応じて後続命令の発行タイミングを調整する。また、命令発行制御回路２１０はベクトル長（ＶＬ）を指定するＶＬレジスタ２１０を含む。
【００２８】
ベクトルレジスタファイル２０１は、４つのパイプライン演算器２０３〜２０６が処理するデータを格納する。ベクトルレジスタファイル２０１は、命令発行制御回路２０２の制御の下、各パイプライン演算器２０３〜２０６に処理すべきデータを供給する。ベクトルレジスタファイル２０１の詳細については後述する。
【００２９】
ベクトルレジスタファイル２０１と各パイプライン演算器２０３〜２０６の間には、各パイプライン演算器が処理するデータを格納するパイプラインレジスタ２０８が設けられる。各パイプラインレジスタ２０８は、ベクトルレジスタファイル２０１から、対応するパイプライン演算器が処理するデータを受けとる。
【００３０】
各パイプライン演算器２０３〜２０６は算術論理演算ユニットＡＬＵ２１１を含み、各ＡＬＵ２１１は４つの演算器を含む。各演算器は対応するパイプラインレジスタ２０８と接続され、パイプラインレジスタ２０８から処理すべきデータの供給を受け、命令発行制御回路２０２の制御の下、所望の演算を実行する。ここで、各演算器は同時に１６ビットのデータを演算することが可能な１６ビット演算器である。このため、１つのＡＬＵは１サイクルで、１６ビットのデータであれば４個のデータを処理することができ、３２ビットのデータであれば２個のデータを処理することができる。
【００３１】
各パイプライン演算器２０３〜２０６はＡＬＵ２１１の演算結果を格納するパイプラインレジスタ２０９を含む。パイプラインレジスタ２０９はベクトルレジスタファイル２０１を接続されている。各パイプライン演算器２０３〜２０６はパイプラインレジスタ２０９を介して、その演算結果をベクトルレジスタファイル２０１に書き戻すことができる。
【００３２】
［１−２．ベクトルレジスタファイル２０１の構成例］
次に、ベクトルレジスタファイル２０１の詳細について説明する。
【００３３】
図３はベクトルレジスタファイル２０１の構成例を示す図である。
【００３４】
上述のように、無線ベースバンド処理のような分野にベクトル処理回路を応用する場合、例えば、データ語長が１６ビットであるハーフワード命令とデータ語長が３２ビットであるワード（Ｗｏｒｄ）命令のように、先行命令と後続命令の間でデータ語長が異なる命令が混在するケースが頻繁に発生する。
【００３５】
そこで、ベクトルレジスタファイル２０１においては、ハーフワード命令時の論理番号及び物理番号の割り当てが定められるとともに、ワード命令時の論理番号及び物理番号の割り当てが定められている。
【００３６】
［１−２−１．ハーフワード命令時の割り当て例］
まず、ハーフワード命令時の論理番号及び物理番号の割り当ての一例を、図３を用いて説明する。これらの論理番号及び物理番号の割り当ては命令発行制御回路２０２によって管理される。
【００３７】
図３に示したベクトルレジスタファイル２０１は、例えば、１ハーフワード（Ｈａｌｆｗｏｒｄ）×５１２エントリの構成を有し、ベクトル長は３２である（ＶＬ＝３２）。
【００３８】
図３に示した例では、１つの配列要素３０２はそれぞれ１６ビットのデータを格納する。３２個の配列要素３０２により１つの配列レジスタ３０３が構成され、ベクトルレジスタファイル２０１は１６個の配列レジスタ３０３により構成されている。各配列レジスタ３０３には配列データ３０４が格納されている。
【００３９】
命令発行制御回路２０２は各配列要素３０２に物理番号０〜５１１を割り当て、各配列レジスタ３０３に論理番号０〜１５を割り当てる。ベクトルレジスタファイル２０１に対するアクセスは、配列レジスタ３０３の論理番号を指定することにより行われるが、更に、指定された論理番号及びベクトル長に基づいて、命令発行制御回路２０２が配列要素３０２の物理番号を生成することにより行われる。
【００４０】
尚、図３に示した例では、各パイプライン演算器２０３〜２０６は１サイクルで４つの配列要素３０２のデータを演算する。上述のとおり、各パイプライン演算器２０３〜２０６のＡＬＵ２１１は、１サイクルで４個の１６ビットデータを処理することができるからである。１つの配列レジスタ３０３が３２個の配列要素３０２により構成されることから、１つの配列データ３０４の全ての部分データに対する演算処理を実行するためには、８（＝３２／４）サイクルが必要である。各パイプライン演算器２０３〜２０６のＡＬＵ２１１は１つの配列データ３０４に対して、物理番号の小さいものから４個ずつ分けられた配列要素３０２からなる８個の部分データを、８サイクルに分けて順番に演算していく。
【００４１】
［１−２−２．ワード命令時の割り当て例］
次に、ワード命令時の論理番号及び物理番号の割り当ての一例を、図３を用いて説明する。これらの論理番号及び物理番号の割り当ては命令発行制御回路２０２によって管理される。
【００４２】
ワード命令時の配列レジスタの構成と対応する論理番号の割り当ては、ハーフワード命令時の配列レジスタの構成と対応する論理番号の割り当てとは異なるが、それらを利用したものとなっている。
【００４３】
ワード命令時においては、命令発行制御回路２０２は、ハーフワード命令に対して割り当てられた物理番号に関して、偶数の物理番号Ａを有するものと、奇数の物理番号Ａ＋１を有するものからなる、隣接する２つの配列要素３０２を、１つの配列要素３０５として扱う。
【００４４】
また、命令発行制御回路２０２は、ハーフワード命令に対して割り当てられた論理番号に関して、偶数の論理番号Ｎを有するものと、奇数の論理番号Ｎ＋１を有するものからなる、隣接する２つの配列レジスタ３０３を１つの配列レジスタ３０６として扱う。各配列レジスタ３０６には配列データ３０７が格納されている。
【００４５】
命令発行制御回路２０２は、各配列要素３０５に、対応する２つの配列要素３０２のうちの偶数の物理番号を有する配列要素３０２と同一の物理番号を割り当て、偶数のみの物理番号０，２，４，・・・，５０８，５１０を割り当てる。命令発行制御回路２０２は、各配列レジスタ３０６に、対応する２つの配列レジスタ３０３のうちの偶数の論理番号を有する配列レジスタ３０３と同一の論理番号を割り当て、偶数のみの論理番号０，２，４，・・・，１２，１４を割り当てる。ベクトルレジスタファイル２０１に対するアクセスは、配列レジスタ３０６の論理番号を指定することにより行われるが、更に、指定された論理番号とベクトル長に基づいて、命令発行制御回路２０２が配列要素３０５の物理番号を生成することにより行われる。
【００４６】
すなわち、ベクトルレジスタファイル２０１においては、データ語長が異なる命令が混在する場合、短い方のデータ語長に合わせて、配列要素及び配列レジスタのサイズや構成を定めておき、長い方のデータ語長に対しては、長い方のデータ語長と短い方のデータ語長の長さの比率に応じて、短い方のデータ語長に対して定められた配列要素及び配列レジスタを複数個組み合わせて、仮想的に１つの配列要素及び配列レジスタとして取り扱う方式を採用する。
【００４７】
これにより、ベクトルレジスタファイル２０１においては、データ語長が異なる命令が混在する場合であっても、各データ語長に合わせて配列要素及び配列レジスタの割り当てを最適化することができるので、ベクトルレジスタファイルにおいて使用されない配列要素のビットをなくすことができる。
【００４８】
従って、第１実施例に係るベクトルレジスタファイル２０１においては、データ語長が異なる命令が混在する場合であって、ベクトルレジスタファイル２０１が限られたレジスタ容量しか持たない場合であっても、これを無駄なく使用しながら、データ語長が異なる命令を適切に処理することができる。
【００４９】
尚、図３に示した例では、各パイプライン演算器２０３〜２０６は１サイクルで２つの配列要素３０５のデータを演算する。上述のとおり、各パイプライン演算器２０３〜２０６のＡＬＵ２１１は１サイクルで２個の３２ビットのデータを処理することができるからである。１つの配列レジスタ３０６が３２個の配列要素３０５により構成されることから、１つの配列データ３０７の全ての部分データに対する演算処理を実行するためには、１６（＝３２／２）サイクルが必要である。各パイプライン演算器２０３〜２０６のＡＬＵ２１１は１つの配列データ３０７に対して、物理番号の小さいものから２個ずつ分けられた配列要素３０５からなる１６個の部分データを、１６サイクルに分けて順番に演算していく。
【００５０】
［１−３．ベクトル処理回路２００のパイプライン処理］
図４は、ベクトル処理回路２００のパイプライン処理を説明するための図である。図４において、ＩＦは命令フェッチ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）を、ＩＤは命令デコード（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）を、ＲＲはレジスタリード（Ｒｅｇｉｓｔｅｒ  Ｒｅａｄ）を、ＥＸは命令実行（Ｅｘｅｃｕｔｉｏｎ）を、ＷＢは書き戻し（Ｗｒｉｔｅ  Ｂａｃｋ）を表す。すなわち、ベクトル処理回路２００のパイプライン処理はＩＦ、ＩＤ、ＲＲ、ＥＸ及びＷＢからなる５段のパイプラインステージを有する。５段のパイプラインステージは連続する５つのサイクルにおいて順番に実行される。
【００５１】
まず、ＩＦステージにおいて、命令バッファ２０７は、ベクトル処理回路２００の外部に設けられた命令メモリ（不図示）から、処理すべき命令を受け取る。ここで、命令は、パイプライン演算器２０３〜２０６が処理する演算の内容を示す命令コードと、演算の対象となる配列データが格納された配列レジスタの論理番号を示すソース情報と、演算結果を格納すべき配列レジスタの論理番号を示すディスティネーション情報を含む。
【００５２】
次に、ＩＤステージにおいて、命令発行制御回路２０２は命令バッファ２０７から命令を受けとり、受けとった命令をデコードする。
【００５３】
次に、ＲＲステージにおいて、命令発行制御回路２０２は、命令デコードの結果得られたソース情報に基づいて、ベクトルレジスタファイル２０１に対して、読み出し対象となる配列データが格納された配列レジスタの論理番号を指定する。ベクトルレジスタファイル２０１は、命令発行制御回路２０２の制御の下、指定された論理番号に対応する配列レジスタにおいて所望の配列要素を選択し、選択した配列要素のデータを、命令が実行されるパイプライン演算器に対応するパイプラインレジスタ２０８に格納する。
【００５４】
次に、ＥＸステージにおいて、各パイプライン演算器２０３〜２０６に含まれるＡＬＵ２１１は、命令発行制御回路２０２の制御の下、パイプランレジスタ２０８に格納されたデータに対して、デコードの結果得られた命令コードに応じた演算を実行する。各パイプライン演算器２０３〜２０６は演算結果を、対応するパイプラインレジスタ２０９に格納する。
【００５５】
次に、ＷＢステージにおいて、各パイプライン演算器２０３〜２０６は、パイプラインレジスタ２０９に格納された演算結果のデータをベクトルレジスタファイル２０１に書き戻す。このとき、命令発行制御回路２０２は、命令デコードの結果得られたディスティネーション情報に基づいて、ベクトルレジスタファイル２０１に対して、書き込み対象となる配列レジスタの論理番号を指定する。パイプラインレジスタ２０９に格納された演算結果のデータは、ベクトルレジスタファイル２０１において、指定された論理番号に対応する配列レジスタに順次格納される。
【００５６】
ベクトル処理回路２００は４つのパイプライン演算器２０３〜２０６を有するので、上述の５段のパイプラインステージを有するパイプライン処理をパイプライン演算器２０３〜２０６の各々において並行して実行することができる。すなわち、ベクトル処理回路２００は４つの実行パイプラインを有する。
【００５７】
尚、上述のパイプライン処理では５段のパイプラインステージを用いたが、パイプライン処理のステージ構成はこれに限定されない。例えば、ＥＸステージとＷＢステージの間に、ベクトル処理回路２００の外部メモリ（不図示）に対するデータの読み出しや書き込みを行う、メモリアクセスＭＡ（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）ステージを設けてもよい。ＭＡステージを設けた場合には、ＭＡステージの処理結果のデータを格納するためのパイプラインレジスタが追加で設けられる。
【００５８】
［１−４．先行命令のデータ語長と後続命令のデータ語長が同一の場合のベクトル処理回路の動作例］
ここで、まず、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理と命令発行タイミングの調整処理について説明する。ここでは、図３に示したベクトルレジスタファイル２０１が用いられる。
【００５９】
尚、この明細書において、配列レジスタの先頭の配列要素とは、配列レジスタを構成する複数の配列要素の中で、各パイプライン演算器が実行する複数の処理サイクルの先頭サイクルで処理される配列要素のことをいい、例えば、配列レジスタを構成する複数の配列要素のうちで最も小さい物理番号を有する配列要素のことである。非先頭の配列要素とは、配列レジスタを構成する複数の配列要素の中で、各パイプライン演算器が実行する複数の処理サイクルの非先頭のサイクルで処理される配列要素のことをいい、例えば、ある特定の非先頭サイクルで処理される配列要素のうちで最も小さい物理番号を有する配列要素のことである。
【００６０】
［１−４−１．レジスタ干渉の判定処理］
以下、先行命令のデータ語長と後続命令のデータ語長が同一の場合のレジスタ干渉の判定処理の一例を説明する。
【００６１】
図５は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、レジスタ干渉の判定処理を説明するための図である。図５においては、先行命令と後続命令がともにハーフワード命令であり、先行命令のディスティネーションが配列レジスタｖｒＮ（Ｎ＝０〜１５）であり、後続命令のソースが配列レジスタｖｒＭ（Ｍ＝０〜１５）であるものとする。ここで、例えば、ｖｒＮとは、ハーフワード命令に対して割り当てられた論理番号がＮである配列レジスタ３０３を表す。
【００６２】
この場合、配列レジスタｖｒＮの先頭の配列要素の物理番号Ａは、論理番号Ｎとベクトル長ＶＬを乗算することにより得ることができ、配列レジスタｖｒＭの先頭の配列要素の物理番号Ｂは、論理番号Ｍとベクトル長ＶＬを乗算することにより得ることができる。そして、これらの２つの物理番号ＡとＢが一致する場合に、命令発行制御回路２０２は、２つの配列レジスタｖｒＮとｖｒＭが互いに干渉していると判定する。
【００６３】
配列レジスタｖｒＮとｖｒＭに格納された配列データ３０４はそれぞれ、対応する配列レジスタ３０３を構成する先頭の配列要素の物理番号Ａ及びＢのみで区別することができる。同じ数の配列要素３０２から構成されており、１つの命令に対して、これらの配列要素が一体として処理されるためである。よって、命令発行制御回路２０２は、先行命令で指定された配列レジスタの先頭の配列要素の物理番号Ａと、後続命令で指定された配列レジスタの先頭の配列要素の物理番号Ｂを比較することにより、先行命令と後続命令の間のレジスタ干渉の有無を判定することが可能である。
【００６４】
尚、図５に示した例では、先行命令のディスティネーションと後続命令のソースの間でレジスタ干渉の有無を判定する例を示したが、レジスタ干渉の判定が行われるケースはこれに限定されない。先行命令のディスティネーションと、後続命令のディスティネーションの間においても、レジスタ干渉の判定を行うようにすることができる。また、後続命令のディスティネーションと、先行命令のソースとの間においても、レジスタ干渉の判定を行うようにすることができる。先行命令か後続命令かによらず、ディスディネーションとなる配列レジスタに対しては、配列データの書き換えが行われるからである。
【００６５】
尚、図５に示した例では、先行命令で指定された配列レジスタｖｒＮの先頭の配列要素と、後続命令で指定された配列レジスタｖｒＭの先頭の配列要素を比較する例を示したが、比較の対象とする配列要素の組合せはこれに限定されない。配列レジスタｖｒＮとｖｒＭの間の対応する位置にある配列要素同士であれば比較の対象とすることができる。例えば、配列レジスタｖｒＮとｖｒＭにおいて、２〜８番目の非先頭サイクルで処理される、対応する配列要素同士を比較の対象とすることも可能である。
【００６６】
［１−４−２．命令発行タイミングの調整処理］
図６は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の、命令発行タイミングの調整処理の一例を示す図である。図６に示した例では、命令はすべてハーフワード命令である。命令ＩＮＳＴ１とＩＮＳＴ２は、命令発行制御回路２０２の制御の下、図２のパイプライン演算器２０３〜２０６のうちの２つにおいて実行される。命令ＩＮＳＴ３とＩＮＳＴ４も同様である。
【００６７】
図６に示した例では、先行ハーフワード命令ＩＮＳＴ１として加算命令（ｖａｄｄｈ）が発行され、そのソースとしてｖｒ０とｖｒ２が指定され、そのディスティネーションとしてｖｒ４が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号０の配列レジスタｖｒ０の配列データ３０４と論理番号２の配列レジスタｖｒ２の配列データ３０４を加算し（ｖａｄｄｈ）、加算結果のデータを論理番号４の配列レジスタｖｒ４に格納する命令を発行する。
【００６８】
上述のように、各パイプライン演算器２０３〜２０６のＡＬＵ２１１において、１つの配列データ３０４の全ての部分データに対する処理を実行するためには８サイクルが必要である。このため、命令ＩＮＳＴ１の加算演算は、ソースとなる配列レジスタｖｒ０とｖｒ２の各々の先頭配列要素から順番に、８サイクルに分けて実行される。図６には、命令ＩＮＳＴ１の加算演算がサイクル１〜８の合計８サイクルにわたって実行される様子が図示されている。命令ＩＮＳＴ２〜４についても同様である。
【００６９】
また、後続ハーフワード命令ＩＮＳＴ２として乗算命令（ｖｍｕｌｈ）が発行され、そのソースとしてｖｒ４とｖｒ２が指定され、そのディスティネーションとしてｖｒ６が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号４の配列レジスタｖｒ４の配列データ３０４と論理番号２の配列レジスタｖｒ２の配列データ３０４を乗算し（ｖｍｕｌｈ）、乗算結果のデータを論理番号６の配列レジスタｖｒ６に格納する命令を発行する。
【００７０】
図６に示した例では、配列レジスタｖｒ４が先行命令ＩＮＳＴ１のディスティネーションとして指定されるとともに、後続命令ＩＮＳＴ２のソースとしても指定されている。この場合、先行命令ＩＮＳＴ１のディスティネーションの先頭配列要素の物理番号Ａと、後続命令ＩＮＳＴ２のソースの先頭配列要素の物理番号Ｂがともに１２８（論理番号４×ベクトル長３２）となり、互いに一致する。このため、命令発行制御回路２０２によって、配列レジスタｖｒ４において、先行命令ＩＮＳＴ１と後続命令ＩＮＳＴ２の間にレジスタ干渉が有ることが判定される。
【００７１】
ここで、図４で説明したように、各パイプライン演算器２０３〜２０６においては、ＥＸステージでＡＬＵ２１１により演算されたデータをベクトルレジスタファイル２０１に書き戻すために、ＷＢステージの処理を実行する必要がある。加えて、ＥＸステージの前にベクトルレジスタファイル２０１から演算対象のデータを読み出すために、さらに１サイクル（ＲＲステージ）が必要である。すなわち、各パイプライン演算器２０３〜２０６は、配列データ３０４の１つの部分データに対する処理を実行するのに、少なくとも３サイクル（ＲＲステージ、ＥＸステージ、ＷＢステージ）を要する。よって、後続命令ＩＮＳＴ２において先行命令ＩＮＳＴ１の演算結果を利用することができるのは、先行命令ＩＮＳＴ１のＲＲステージを実行したサイクルの少なくとも３サイクル後のサイクルということになる。
【００７２】
従って、図６で示した例では、後続命令ＩＮＳＴ２の処理（ＲＲステージ）が、先行命令ＩＮＳＴ１の先頭サイクル（ＲＲステージ）であるサイクル１の、３サイクル後であるサイクル４で始まるように、命令発行制御回路２０２が後続命令ＩＮＳＴ２の発行タイミングを調整している。
【００７３】
すなわち、命令発行制御回路２０２は、先行命令と後続命令の間にレジスタ干渉が有る場合、後続命令に対し、先行命令に応じたペナルティサイクルＰＣ１を挿入する発行タイミング調整処理を行う。ペナルティサイクルＰＣ１の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル（ＲＲステージ）からＷＢステージが終了するまでに、さらに２サイクル（ＥＸステージとＷＢステージ）が必要となることから、ペナルティサイクルの数は２である（ＰＣ１＝２）。
【００７４】
一方、先行命令ＩＮＳＴ３と後続命令ＩＮＳＴ４の間においては、先行命令のディスティネーションとして指定された配列レジスタｖｒ８は後続命令のソースとして指定されていない。この場合、先行命令ＩＮＳＴ３のディスティネーションの先頭配列要素の物理番号Ａ＝２５６（論理番号８×ベクトル長３２）と、後続命令ＩＮＳＴ４のソースの２つの先頭配列要素の物理番号Ｂ＝３２０（論理番号１０×ベクトル長３２）、１９２（論理番号６×ベクトル長３２）は互いに一致しない。このため、命令発行制御回路２０２によって、レジスタ干渉は無いと判定される。
【００７５】
従って、この場合は、後続命令ＩＮＳＴ４が、先行命令ＩＮＳＴ３の先頭サイクルであるサイクル１の次のサイクル（サイクル２）で始まるように、命令発行制御回路２０２が後続命令ＩＮＳＴ４の発行タイミングを調整している。すなわち、命令発行制御回路２０２はペナルティサイクルを挿入しない。
【００７６】
［１−５．先行命令のデータ語長が後続命令のデータ語長より長い場合のベクトル処理回路の動作例］
次に、先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理及び命令発行タイミングの調整処理について説明する。ここでは、図３に示したベクトルレジスタファイル２０１が用いられる。
【００７７】
［１−５−１．レジスタ干渉の判定処理］
以下、先行命令のデータ語長が後続命令のデータ語長より長い場合のレジスタ干渉の判定処理の一例を説明する。
【００７８】
図７は、先行命令のデータ語長が後続命令のデータ語長より長い場合の、レジスタ干渉の判定処理を説明するための図である。図７においては、先行命令がワード命令であり、後続命令がハーフワード命令であり、先行ワード命令のディスティネーションが配列レジスタｖｒｗＮ（Ｎ＝０，２，・・・，１４）であり、後続命令のソースが配列レジスタｖｒＭ（Ｍ＝０〜１５）であるものとする。ここで、例えば、ｖｒｗＮとは、ワード命令に対して割り当てられた論理番号がＮ（Ｎは偶数）である配列レジスタ３０６を表し、ｖｒＭとは、ハーフワード命令に対して割り当てられた論理番号がＭである配列レジスタ３０３を表す。
【００７９】
ここで、上述のとおり、ワード命令においてアクセスされる１つの配列レジスタ３０６は、ハーフワード命令時にアクセスされる２つの配列レジスタ３０３から構成される。すなわち、先行ワード命令においてアクセスされる配列レジスタｖｒｗＮは、ハーフワード命令でアクセス対象となり得る、配列レジスタｖｒＮと配列レジスタｖｒＮ＋１から構成されている。
【００８０】
従って、後続ハーフワード命令でアクセスされる配列レジスタｖｒＭに関しては、前半の配列レジスタｖｒＮと後半の配列レジスタｖｒＮ＋１の両方に対して、レジスタ干渉の有無を判定することが必要である。すなわち、この場合、先行ワード命令の前半の配列レジスタが干渉する態様と、後半の配列レジスタが干渉する態様の２つのレジスタ干渉の態様が存在する。
【００８１】
しかしながら、ここでデータ語長が同一の場合のレジスタ干渉の判定処理を単に採用しただけでは、上述の先行ワード命令と後続ハーフワード命令の間のレジスタ干渉の有無を正確に判定することはできない。すなわち、先行ワード命令で指定された配列レジスタ３０６の先頭配列要素３０５の物理番号と、後続ハーフワード命令で指定された配列レジスタ３０３の先頭の配列要素３０２の物理番号を比較するだけでは、先行ワード命令と後続ハーフワード命令の間で、レジスタ干渉の有無を正確に判定することができない。
【００８２】
その理由を以下で説明する。配列レジスタｖｒｗＮの先頭の配列要素３０５の物理番号Ａ１は配列レジスタｖｒＮの先頭の配列要素３０２の物理番号と同一である。従って、命令発行制御回路２０２は、配列レジスタｖｒｗＮの先頭の配列要素３０５の物理番号Ａ１と、配列レジスタｖｒＭの先頭の配列要素３０２の物理番号Ｂを比較することにより、先行ワード命令に関する前半の配列レジスタｖｒＮと後続ハーフワード命令に関する配列レジスタｖｒＭについては、レジスタ干渉の有無を判定することができる。
【００８３】
しかしながら、上記の判定処理では、後半の配列レジスタｖｒＮ＋１については全く考慮されていないため、命令発行制御回路２０２によって、配列レジスタｖｒＭとのレジスタ干渉が判定されない。このため、先行ワード命令に関する配列レジスタｖｒＮ＋１は、後続ハーフワード命令に関する配列レジスタｖｒＭとの干渉を生じる可能性がある。
【００８４】
そこで、図７に示した例では、命令発行制御回路２０２は、配列レジスタｖｒＮ＋１の先頭の配列要素の物理番号Ａ２と、後続ハーフワード命令で指定された配列レジスタｖｒＭの先頭の配列要素の物理番号Ｂとの比較も行う。物理番号Ｂを有する配列要素は後続ハーフワード命令の先頭のサイクルで処理されるのに対し、物理番号Ａ２を有する配列要素は、配列レジスタｖｒＮの全ての配列要素に対する演算処理を実行するのに８サイクルを要することから、先行ワード命令の９番目のサイクルで処理される。
【００８５】
この比較により、命令発行制御回路２０２は、先行ワード命令に関する配列レジスタｖｒＮ＋１と後続ハーフワード命令に関する配列レジスタｖｒＭについても、レジスタ干渉の有無を判定する。すなわち、命令発行制御回路２０２は、配列レジスタｖｒｗＮの先頭の配列要素の物理番号Ａ１に加えて、非先頭の配列要素の物理番号Ａ２と、配列レジスタｖｒＭの先頭の配列要素の物理番号Ｂを比較することにより、レジスタ干渉の有無を判定する。
【００８６】
この場合、配列レジスタｖｒｗＮの先頭の配列要素の物理番号Ａ１は、論理番号Ｎとベクトル長ＶＬを乗算することにより得ることができ、非先頭の配列要素の物理番号Ａ２は、論理番号Ｎとベクトル長ＶＬを乗算し、さらにベクトル長ＶＬを加算することにより得ることができる。配列レジスタｖｒＭの先頭の配列要素の物理番号Ｂは、論理番号Ｍとベクトル長ＶＬを乗算することにより得ることができる。そして、命令発行制御回路２０２は、物理番号Ａ１とＢが一致する場合に、前半の配列レジスタｖｒＮにおいて配列レジスタｖｒｗＮとｖｒＭが互いに干渉していると判定し、物理番号Ａ２とＢが一致する場合に、後半の配列レジスタｖｒＮ＋１において配列レジスタｖｒｗＮとｖｒＭが互いに干渉していると判定する。
【００８７】
これにより、第１実施例に係るベクトル処理回路２００においては、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じて、先行命令で指定された配列レジスタと後続命令で指定された配列レジスタの間で、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができる。
【００８８】
ここで、上記のレジスタ干渉の判定において、比較の対象とすべき非先頭の配列要素の位置や数は、ベクトルレジスタファイル２０１の構成やデータ語長等によって変化する。図７に示した例では、先行命令がワード命令であり、後続命令がハーフワード命令であって、ワード命令のデータ語長がハーフワード命令のデータ語長の２倍の長さを有するため、配列レジスタｖｒｗＮの先頭に位置する配列要素（配列レジスタｖｒＮの先頭配列要素）に加えて、配列レジスタｖｒｗＮの中間に位置する配列要素（配列レジスタｖｒＮ＋１の先頭配列要素）だけを比較の対象とすれば十分である。
【００８９】
これに対し、例えば、先行命令がダブルワード命令であり、後続命令がハーフワード命令である場合は、ダブルワード命令のデータ語長がハーフワード命令のデータ語長の４倍の長さを有し、後続ハーフワード命令に対する、隣接する４つの配列要素を１つの配列要素として扱う。この場合、先行ダブルワード命令で指定される配列レジスタは、後続ハーフワード命令でアクセス対象となり得る配列レジスタを４つ含むことになる。このため、先行ダブルワード命令で指定される配列レジスタの中間（１／２）に位置する配列要素だけでなく、配列レジスタ全体の１／４及び３／４に位置する配列要素についても比較の対象とする必要がある。すなわち、先行ダブルワード命令で指定される配列レジスタにおいては、後続ハーフワード命令で指定される配列レジスタに対する演算処理を実行するのに必要となるサイクル数の１倍、２倍及び３倍に対応する３つのサイクルで処理される配列要素についても比較の対象とされる。
【００９０】
尚、図７に示した例では、先行命令のディスティネーションと後続命令のソースの間でレジスタ干渉の有無を判定する例を示したが、レジスタ干渉の判定が行われるケースはこれに限定されない。先行命令のディスティネーションと、後続命令のディスティネーションの間においても、レジスタ干渉の判定を行うようにすることができる。また、後続命令のディスティネーションと、先行命令のソースとの間においても、レジスタ干渉の判定を行うようにすることができる。先行命令か後続命令かによらず、ディスディネーションとなる配列レジスタに対しては、配列データの書き換えが行われるからである。
【００９１】
尚、図７に示した例では、先行命令で指定された配列レジスタｖｒＮ＋１の先頭の配列要素と、後続命令で指定された配列レジスタｖｒＭの先頭の配列要素を比較する例を示したが、比較の対象とする配列要素の組合せはこれに限定されない。配列レジスタｖｒＮ＋１とｖｒＭの間の対応する位置にある配列要素同士であれば比較の対象とすることができる。例えば、配列レジスタｖｒＮ＋１とｖｒＭにおいて、各々の２〜８番目の非先頭サイクルで処理される、対応する配列要素同士を比較の対象とすることも可能である。
【００９２】
［１−５−２．命令発行タイミングの調整処理］
図８と図９は、先行命令のデータ語長が後続命令のデータ語長より長い場合の、命令発行タイミングの調整処理の一例を示す図である。
【００９３】
まず、図８（Ａ）に、先行ワード命令と後続ハーフワード命令の間で、先行ワード命令の前半の配列レジスタにおいてレジスタ干渉が生じる例を示す。
【００９４】
図８（Ａ）に示した例では、先行命令はワード命令であるのに対し、後続命令はハーフワード命令である。命令ＩＮＳＴ１とＩＮＳＴ２は、命令発行制御回路２０２の制御の下、図２のパイプライン演算器２０３〜２０６のうちの２つにおいて実行される。命令ＩＮＳＴ３とＩＮＳＴ４、ＩＮＳＴ５とＩＮＳＴ６、ＩＮＳＴ７とＩＮＳＴ８も同様である。
【００９５】
図８（Ａ）に示した例では、先行ワード命令ＩＮＳＴ１として、ワード命令の加算命令（ｖａｄｄ）が発行され、そのソースとしてｖｒｗ０とｖｒｗ２が指定され、そのディスティネーションとしてｖｒｗ４が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号０の配列レジスタｖｒｗ０の配列データ３０７と論理番号２の配列レジスタｖｒｗ２の配列データ３０７を加算し（ｖａｄｄ）、加算結果のデータを論理番号４の配列レジスタｖｒｗ４に格納する命令を発行する。
【００９６】
上述のように、各パイプライン演算器２０３〜２０６のＡＬＵ２１１においては、１つの配列データ３０７の全ての部分データに対する処理を実行するためには１６サイクルが必要である。このため、命令ＩＮＳＴ１の加算演算は、ソースとなる配列レジスタｖｒｗ０とｖｒｗ２の各々の先頭配列要素から順番に、１６サイクルに分けて実行される。図８では、命令ＩＮＳＴ１の加算演算がサイクル１〜１６の合計１６サイクルにわたって実行される様子が図示されている。命令ＩＮＳＴ３、５、７についても同様である。
【００９７】
さらに、ワード命令においてアクセスされる１つの配列レジスタ３０６は、ハーフワード命令時にアクセスされる２つの配列レジスタ３０３から構成される。このため、命令ＩＮＳＴ１は、前半の８サイクルにおいて、論理番号０の配列レジスタｖｒ０の配列データ３０４と論理番号２の配列レジスタｖｒ２の配列データ３０４を加算し、加算結果のデータを論理番号４の配列レジスタｖｒ４に格納するとともに、後半の８サイクルにおいて、論理番号１の配列レジスタｖｒ１の配列データ３０４と論理番号３の配列レジスタｖｒ３の配列データ３０４を加算し、加算結果のデータを論理番号５の配列レジスタｖｒ５に格納する。
【００９８】
また、後続ハーフワード命令ＩＮＳＴ２として、ハーフワード命令の加算命令（ｖａｄｄｈ）が発行され、そのソースとしてｖｒ４とｖｒ１０が指定され、そのディスティネーションとしてｖｒ１１が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号４の配列レジスタｖｒ４の配列データ３０４と論理番号１０の配列レジスタｖｒ１０の配列データ３０４を加算し（ｖａｄｄｈ）、加算結果のデータを論理番号１１の配列レジスタｖｒ１１に格納する命令を発行する。
【００９９】
命令ＩＮＳＴ２の実行については、図６における命令ＩＮＳＴ１と同様である。図８（Ａ）では、命令ＩＮＳＴ２の加算演算がサイクル３〜１０の合計８サイクルにわたって実行される様子が図示されている。命令ＩＮＳＴ４、６、８についても同様である。
【０１００】
図８（Ａ）に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタｖｒｗ４を構成する、前半の配列レジスタｖｒ４が、後続ハーフワード命令ＩＮＳＴ２のソースとしても指定されている。この場合、先行命令ＩＮＳＴ１のディスティネーションの先頭配列要素３０５の物理番号Ａ１と、後続命令ＩＮＳＴ２のソースの先頭配列要素３０２の物理番号Ｂがともに１２８（論理番号４×ベクトル長３２）であり、互いに一致する。このため、命令発行制御回路２０２によって、前半の配列レジスタｖｒ４において、先行命令ＩＮＳＴ１と後続命令ＩＮＳＴ２の間にレジスタ干渉が有ることが判定される。
【０１０１】
一方、配列レジスタｖｒｗ４を構成する後半の配列レジスタｖｒ５は、後続ハーフワード命令のソースとして指定されていない。この場合、先行命令ＩＮＳＴ１のディスティネーションの中間の配列要素３０５の物理番号Ａ２＝１６０（論理番号５×ベクトル長３２）と、後続命令ＩＮＳＴ２のソースの先頭配列要素３０２の物理番号Ｂ＝１２８（論理番号４×ベクトル長３２）、３２０（論理番号１０×ベクトル長３２）は互いに一致しない。このため、命令発行制御回路２０２は、後半の配列レジスタｖｒ５においては、レジスタ干渉は無いと判定する。
【０１０２】
よって、前半の配列レジスタｖｒ４が干渉しているので、図８（Ａ）で示した例では、後続ハーフワード命令ＩＮＳＴ２の処理（ＲＲステージ）が、先行ワード命令ＩＮＳＴ１の前半の配列レジスタｖｒ４に対する処理開始サイクル（ＲＲステージ、先行ワード命令ＩＮＳＴ１の先頭サイクル）であるサイクル１の、３サイクル後に位置するサイクル４で始まるように、命令発行制御回路２０２が後続命令ＩＮＳＴ２の発行タイミングを調整している。ここで、後続命令を３サイクル遅延させる理由は、図６に示した例の場合と同様である。
【０１０３】
すなわち、命令発行制御回路２０２は、先行ワード命令の前半の配列レジスタと後続ハーフワード命令の配列レジスタとの間にレジスタ干渉が有る場合、後続ハーフワード命令に対し、先行ワード命令に応じたペナルティサイクルＰＣ１を挿入する発行タイミング調整処理を行う。ペナルティサイクルＰＣ１の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル（ＲＲステージ）からＷＢステージが終了するまでに、さらに２サイクル（ＥＸステージとＷＢステージ）が必要となることから、ペナルティサイクルＰＣ１の数は２である（ＰＣ１＝２）。
【０１０４】
ここで、比較例として、図９（Ｂ）に、先行命令のデータ語長が後続命令のデータ語長より長い場合に、従来の命令発行タイミング調整処理を適用した例を示す。図９（Ｂ）に示したように、従来の命令発行タイミング調整処理を適用した場合、命令発行制御回路２０２は、レジスタ干渉の有無に関わらず無条件で、後続ハーフワード命令ＩＮＳＴ８を先行ワード命令ＩＮＳＴ７の処理が終了するまでストールさせるように、後続命令ＩＮＳＴ８の発行を遅延させる。このため、後続ハーフワード命令ＩＮＳＴ８の処理はサイクル１７から始まる。
【０１０５】
よって、図８（Ａ）に示した例では、第１実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の先頭サイクル（処理開始サイクル）を１３サイクル早めることができる。従って、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
【０１０６】
次に、図８（Ｂ）に、先行ワード命令と後続ハーフワード命令の間で、先行ワード命令の後半の配列レジスタにおいてレジスタ干渉が生じる例を示す。
【０１０７】
図８（Ｂ）に示した例では、先行ワード命令ＩＮＳＴ３として、ワード命令の加算命令（ｖａｄｄ）が発行され、そのソースとしてｖｒｗ０とｖｒｗ２が指定され、そのディスティネーションとしてｖｒｗ４が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号０の配列レジスタｖｒｗ０の配列データ３０７と論理番号２の配列レジスタｖｒｗ２の配列データ３０７を加算し（ｖａｄｄ）、加算結果のデータを論理番号４の配列レジスタｖｒｗ４に格納する命令を発行する。
【０１０８】
命令ＩＮＳＴ３は、前半の８サイクルにおいて、論理番号０の配列レジスタｖｒ０の配列データ３０４と論理番号２の配列レジスタｖｒ２の配列データ３０４を加算し、加算結果のデータを論理番号４の配列レジスタｖｒ４に格納するとともに、後半の８サイクルにおいて、論理番号１の配列レジスタｖｒ１の配列データ３０４と論理番号３の配列レジスタｖｒ３の配列データ３０４を加算し、加算結果のデータを論理番号５の配列レジスタｖｒ５に格納する。
【０１０９】
また、後続ハーフワード命令ＩＮＳＴ４として、ハーフワード命令の加算命令（ｖａｄｄｈ）が発行され、そのソースとしてｖｒ５とｖｒ１０が指定され、そのディスティネーションとしてｖｒ１１が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号５の配列レジスタｖｒ５の配列データ３０４と論理番号１０の配列レジスタｖｒ１０の配列データ３０４を加算し（ｖａｄｄｈ）、加算結果のデータを論理番号１１の配列レジスタｖｒ１１に格納する命令を発行する。
【０１１０】
図８（Ｂ）に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタｖｒｗ４を構成する、前半の配列レジスタｖｒ４は、後続ハーフワード命令のソースとして指定されていない。この場合、先行命令ＩＮＳＴ３のディスティネーションの先頭の配列要素３０５の物理番号Ａ１＝１２８（論理番号４×ベクトル長３２）と、後続命令ＩＮＳＴ４のソースの先頭配列要素３０２の物理番号Ｂ＝１２８（論理番号４×ベクトル長３２）、３２０（論理番号１０×ベクトル長３２）が互いに一致しない。このため、命令発行制御回路２０２は、前半の配列レジスタｖｒ５においては、レジスタ干渉は無いと判定する。
【０１１１】
一方、配列レジスタｖｒｗ４を構成する、後半の配列レジスタｖｒ５は、後続ハーフワード命令ＩＮＳＴ４のソースとしても指定されている。この場合、先行命令ＩＮＳＴ３のディスティネーションの中間の配列要素３０５の物理番号Ａ２と、後続命令ＩＮＳＴ４のソースの先頭配列要素３０２の物理番号Ｂがともに１６０（＝論理番号５×ベクトル長３２）であり、互いに一致する。このため、命令発行制御回路２０２によって、後半の配列レジスタｖｒ５において、先行命令ＩＮＳＴ１と後続命令ＩＮＳＴ２の間にレジスタ干渉が有ることが判定される。
【０１１２】
よって、先行ワード命令の後半の配列レジスタｖｒ５が干渉しているので、図８（Ｂ）で示した例では、後続ハーフワード命令ＩＮＳＴ４の処理（ＲＲステージ）が、先行ワード命令ＩＮＳＴ１の後半の配列レジスタｖｒ５に対する処理開始サイクル（ＲＲステージ、先行ワード命令ＩＮＳＴ１の非先頭サイクル）であるサイクル９の、３サイクル後に位置するサイクル１２で始まるように、命令発行制御回路２０２が後続命令ＩＮＳＴ４の発行タイミングを調整している。ここで、後続命令を３サイクル遅延させる理由は、図６に示した例の場合と同様である。
【０１１３】
すなわち、命令発行制御回路２０２は、先行ワード命令の後半の配列レジスタと後続ハーフワード命令の配列レジスタとの間にレジスタ干渉が有る場合、後続ハーフワード命令に対し、先行ワード命令に応じたペナルティサイクルＰＣ１に、先行ワード命令の前半の配列レジスタｖｒ４に対する処理開始サイクル（先行ワード命令の先頭サイクル）から後半の配列レジスタｖｒ５に対する処理開始サイクル（先行ワード命令の非先頭サイクル）までのサイクル数に応じたペナルティサイクルＰＣ２を加えたペナルティサイクルＰＣを挿入する発行タイミング調整処理を行う（ＰＣ＝ＰＣ１＋ＰＣ２）。
【０１１４】
ペナルティサイクルＰＣ１の数は先行命令の種別に応じて設定される。例えば、上述の加算命令の場合は、命令の先頭サイクル（ＲＲステージ）からＷＢステージが終了するまでに、さらに２サイクル（ＥＸステージとＷＢステージ）が必要となることから、ペナルティサイクルＰＣ１の数は２である（ＰＣ１＝２）。
【０１１５】
また、ペナルティサイクルＰＣ２の数は、各パイプライン演算器２０３〜２０６のＡＬＵ２１１において、先行ワード命令の前半の配列レジスタの配列データ３０４を処理するのに必要となるサイクル数であり、ＡＬＵ２１１が１サイクルで演算することができる配列要素３０２の数によって決まる。ペナルティサイクルＰＣ２は、ベクトル長をＶＬとし、各パイプライン演算器２０３〜２０６の演算器並列度（ＡＬＵ２１１が有する演算器の数）をＰＡとすると、ＶＬをＰＡで除算することにより得られる（ＰＣ２＝ＶＬ／ＰＡ）。例えば、図８（Ｂ）に示し例では、ベクトル長が３２であり（ＶＬ＝３２）、演算器並列度が４であるので（ＰＡ＝４）、ペナルティサイクルＰＣ２は８となる（ＰＣ２＝８）。
【０１１６】
ここで、上述のように、図９（Ｂ）に示した比較例においては、後続ハーフワード命令はサイクル１７から開始される。
【０１１７】
よって、図８（Ｂ）に示した例では、第１実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の先頭サイクル（処理開始サイクル）を５サイクル早めることができる。従って、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
【０１１８】
次に、図９（Ａ）に、先行ワード命令と後続ハーフワード命令の間で、レジスタ干渉が生じない例を示す。
【０１１９】
図９（Ａ）に示した例では、先行ワード命令ＩＮＳＴ５として、ワード命令の加算命令（ｖａｄｄ）が発行され、そのソースとしてｖｒｗ０とｖｒｗ２が指定され、そのディスティネーションとしてｖｒｗ４が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号０の配列レジスタｖｒｗ０の配列データ３０７と論理番号２の配列レジスタｖｒｗ２の配列データ３０７を加算し（ｖａｄｄ）、加算結果のデータを論理番号４の配列レジスタｖｒｗ４に格納する命令を発行する。
【０１２０】
また、後続ハーフワード命令ＩＮＳＴ６として、ハーフワード命令の加算命令（ｖａｄｄｈ）が発行され、そのソースとしてｖｒ６とｖｒ１０が指定され、そのディスティネーションとしてｖｒ１１が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号６の配列レジスタｖｒ６の配列データ３０４と論理番号１０の配列レジスタｖｒ１０の配列データ３０４を加算し（ｖａｄｄｈ）、加算結果のデータを論理番号１１の配列レジスタｖｒ１１に格納する命令を発行する。
【０１２１】
図９（Ａ）に示した例では、先行ワード命令のディスティネーションとして指定された配列レジスタｖｒｗ４は前半の配列レジスタｖｒ４と後半の配列レジスタｖｒ５により構成されるが、配列レジスタｖｒ４とｖｒ５はともに後続ハーフワード命令のソースとして指定されていない。この場合、先行命令ＩＮＳＴ５のディスティネーションの先頭の配列要素３０５の物理番号Ａ１＝１２８（論理番号４×ベクトル長３２）と、後続命令ＩＮＳＴ４のソースの先頭配列要素３０２の物理番号Ｂ＝１９２（論理番号６×ベクトル長３２）、３２０（論理番号１０×ベクトル長３２）は互いに一致しない。このため、命令発行制御回路２０２は、レジスタ干渉は無いと判定する。
【０１２２】
従って、この場合は、後続ハーフワード命令ＩＮＳＴ６の処理（ＲＲステージ）が、先行命令ＩＮＳＴ５の先頭サイクル（ＲＲステージ）であるサイクル１の次のサイクル（サイクル２）で始まるように、命令発行制御回路２０２が後続命令ＩＮＳＴ６の発行タイミングを調整している。すなわち、命令発行制御回路２０２はペナルティサイクルを挿入しない。
【０１２３】
ここで、上述のように、図９（Ｂ）に示した比較例においては、後続ハーフワード命令はサイクル１７から開始される。
【０１２４】
従って、図９（Ａ）に示した例では、第１実施例に係るレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理を用いることにより、比較例と比べて、後続ハーフワード命令の開始サイクルを１５サイクル早めることができる。よって、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することにより、命令発行の効率化を図ることができる。
【０１２５】
以上説明したように、第１実施例に係るベクトル処理回路２００においては、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じて、先行命令で指定された配列レジスタと後続命令で指定された配列レジスタの間で、レジスタ干渉の判定を適切に行い、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
【０１２６】
［１−６．命令発行制御回路２０２の処理］
上述したレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理は命令発行制御回路２０２によって実行される。命令発行制御回路２０２は命令バッファ２０７から後続命令を受けとった後、その後続命令に関し、各パイプライン演算器２０３〜２０６において実行中の全ての先行命令に対して、レジスタ干渉の判定を行う。命令発行制御回路２０２は、その判定結果に基づいて後続命令の発行タイミングを調整する。
【０１２７】
図１０は、第１実施例に係る命令発行制御回路２０２の処理フロー１０００を示す図である。図１０では、発行される命令に、データ語長の異なるワード命令とハーフワード命令が混在するものとする。図１０に示したＳ１００１〜Ｓ１０１４からなる一連の処理は命令発行制御回路２０２において、各処理サイクルごとに実行されるものである。
【０１２８】
まず、ステップＳ１００１において、命令発行制御回路２０２は後続命令を受けとり、一連の処理を開始する。
【０１２９】
次に、ステップＳ１００２において、命令発行制御回路２０２は各パイプライン演算器２０３〜２０６において実行中の全ての先行命令に対して、発行判定値ＩＤを設定したか否かをチェックする。実行中の全ての先行命令に対して発行判定値ＩＤの設定を完了した場合は、命令発行制御回路２０２の処理はステップ１０１０に移行する。未完了の場合は、命令発行制御回路２０２は発行判定値ＩＤの設定対象となる対象先行命令を特定し、その処理はステップ１００３に移行する。
【０１３０】
ステップＳ１００３において、命令発行制御回路２０２は、対象先行命令に対して発行判定値ＩＤの設定処理を実行する。ステップＳ１００３では、実行中の先行命令が複数有る場合は、その先行命令と同じ数の発行設定値が設定される。ステップＳ１００３の処理はステップＳ１００４〜Ｓ１００９の処理から構成される。
【０１３１】
まず、ステップＳ１００４において、命令発行制御回路２０２は発行判定値ＩＤの設定処理を開始する。
【０１３２】
次に、ステップＳ１００５において、後続命令がハーフワード命令であるか否かを判定する。後続命令がハーフワード命令である場合は、ステップＳ１００６に移行する。そうでない場合はステップＳ１００８に移行する。
【０１３３】
次に、ステップＳ１００６において、対象先行命令がワード命令であるか否かを判定する。対象先行命令がワード命令である場合は、ステップＳ１００７に移行する。そうでない場合はステップＳ１００８に移行する。
【０１３４】
次に、ステップＳ１００７において、命令発行制御回路２０２は先行ワード命令と後続ハーフワード命令の間でレジスタ干渉の判定を行う。ここでは、図７で説明したように、後続ハーフワード命令でアクセスされる配列レジスタｖｒＭに関して、先行ワード命令でアクセスされる前半の配列レジスタｖｒＮと後半の配列レジスタｖｒＮ＋１の両方に対して、レジスタ干渉の有無を判定する。その判定結果に基づいて、命令発行制御回路２０２は図１１（Ａ）に示した対応関係に従って、発行判定値ＩＤを設定する。発行判定値ＩＤの設定後、ステップＳ１００９に移行する。
【０１３５】
また、ステップＳ１００８において、命令発行制御回路２０２は先行命令と後続命令の間でレジスタ干渉の判定を行う。その判定結果に基づいて、命令発行制御回路２０２は図１１（Ｂ）に示した対応関係に従って、発行判定値ＩＤを設定する。発行判定値ＩＤの設定後、ステップＳ１００９に移行する。
【０１３６】
ここで、発行判定値ＩＤの詳細について説明する。発行判定値ＩＤは後続命令を次のサイクルで発行するか否かを判定するためのパラメータであり、発行判定値ＩＤが０以下となったとき（ＩＤ≦０）、命令発行制御回路２０２は後続命令を次のサイクルで発行する。
【０１３７】
図１１は、発行判定値ＩＤの設定方法を示す図である。発行判定値ＩＤは、先行命令の種別に応じて設定されるペナルティサイクルＰＣ１、先行命令の前半の配列レジスタに対する処理開始サイクル（先行命令の先頭サイクル）から後半の配列レジスタに対する処理開始サイクル（先行命令の非先頭サイクル）までのサイクル数に応じたペナルティサイクルＰＣ２、及び対象先行ワード命令の先頭サイクルと現在のサイクル（処理フロー１０００を実行しているサイクル）との間の差分サイクルＤＣにより決定される。ペナルティサイクルＰＣ１及びＰＣ２については、図６及び図８で説明したとおりである。差分サイクルＤＣは、対象先行ワード命令の先頭サイクルが、処理フロー１０００を実行中の現在のサイクルから見て何サイクル前であるかを表すものであり、対象先行ワード命令と現在のサイクルとの距離を表すものである。
【０１３８】
図１１は、ワード命令とハーフワード命令が混在する場合の発行判定値ＩＤの設定例を示すものである。発行判定値ＩＤの設定は混在する命令のデータ語長の組合せによって異なり、発行判定値ＩＤはデータ語長の組合せに応じて適宜設定されるものである。
【０１３９】
図１１（Ａ）は、 先行命令のデータ語長が後続命令のデータ語長よりも長く、先行命令がワード命令であり、後続命令がハーフワード命令である場合の発行判定値ＩＤの設定例を示す図である。
【０１４０】
命令発行制御回路２０２によって、先行ワード命令と後続ハーフワード命令の間にレジスタ干渉が無いと判定されたときは、発行判定値ＩＤは０である。これは、命令発行制御回路２０２が後続ハーフワード命令を先行命令の先頭サイクル（処理開始サイクル）の次のサイクルで発行することを意味する。
【０１４１】
一方、命令発行制御回路２０２によって、先行ワード命令でアクセスされる前半の配列レジスタｖｒＮと後続ハーフワード命令でアクセスされる配列レジスタｖｒＭの間でレジスタ干渉が有ると判定されたときは、発行判定値ＩＤは、ペナルティサイクルＰＣ１に対して差分サイクルＤＣを減算したものとなる（ＩＤ＝ＰＣ１−ＤＣ）。これは、命令発行制御回路２０２が先行ワード命令の先頭サイクル（処理開始サイクル）の次のサイクルから、更にペナルティサイクルＰＣ１分だけ後のサイクルで、後続ハーフワード命令を発行することを意味する。
【０１４２】
また、命令発行制御回路２０２によって、先行ワード命令でアクセスされる後半の配列レジスタｖｒＮ＋１と後続ハーフワード命令でアクセスされる配列レジスタｖｒＭの間でレジスタ干渉が有ると判定されたときは、発行判定値ＩＤは、発行判定値はペナルティサイクルＰＣ１に対して、ペナルティサイクルＰＣ２を加算し、差分サイクルＤＣを減算したものとなる（ＩＤ＝ＰＣ１＋ＰＣ２−ＤＣ）。これは、命令発行制御回路２０２が先行ワード命令の後半の配列レジスタｖｒＮ＋１に対する処理開始サイクル（先行ワード命令の非先頭サイクル）の次のサイクルから、更にペナルティサイクルＰＣ１分だけ後のサイクルで、後続ハーフワード命令を発行することを意味する。
【０１４３】
図１１（Ｂ）は、先行命令のデータ語長と後続命令のデータ語長が同一の場合の発行判定値ＩＤの設定例を示す図である。命令発行制御回路２０２によって、先行命令と後続命令の間に、レジスタ干渉が無いと判定された場合は、発行判定値ＩＤは０である。これは、命令発行制御回路２０２は後続命令を先行命令の先頭サイクル（処理開始サイクル）の次のサイクルで発行することを意味する。
【０１４４】
一方、命令発行制御回路２０２によって、レジスタ干渉が有ると判定されたときは、発行判定値ＩＤはペナルティサイクルＰＣ１に対して差分サイクルＤＣを減算したものとなる（ＩＤ＝ＰＣ１−ＤＣ）。これは、命令発行制御回路２０２が先行命令の開始サイクルの次のサイクルから、ペナルティサイクルＰＣ１分だけ後のサイクルで、後続命令を発行することを意味する。
【０１４５】
図１０に戻って、ステップＳ１００９において、命令発行制御回路２０２は発行判定値ＩＤの設定処理を終了する。終了後、ステップＳ１００２に移行する。ステップＳ１００２において、実行中の全ての先行命令に対して発行判定値ＩＤの設定を完了したと判断された場合は、ステップＳ１０１０に移行し、未完了と判断された場合は、Ｓ１００３に移行し、再度発行判定値ＩＤの設定処理が行われる。
【０１４６】
ステップＳ１０１０において、ステップＳ１００３で設定された発行判定値ＩＤのうち、１つでもその値が１以上のものが有るか否かをチェックする。発行設定値ＩＤが１以上のものが有る場合は、Ｓ１０１１に移行する。発行設定値ＩＤが１以上のものが無い場合（全ての発行設定値ＩＤが０以下である場合）は、Ｓ１０１３に移行する。
【０１４７】
ステップＳ１０１１において、命令発行制御回路２０２は後続命令に、先行命令とのレジスタ干渉に起因する発行制約が有ると判断する。その後、ステップＳ１０１２に移行する。
【０１４８】
ステップＳ１０１２においては、命令発行制御回路２０２は、処理フロー１０００を実行中の現在のサイクルの次のサイクルにおいては、後続命令を発行しないことを決定する。更に、命令発行制御回路２０２は同一の後続命令に対して再度同じ一連の処理を実行することを決定する。その後、ステップＳ１００１に戻る。
【０１４９】
また、ステップＳ１０１３において、命令発行制御回路２０２は後続命令に、先行命令とのレジスタ干渉に起因する発行制約は無いと判断する。その後、ステップＳ１０１４に移行する。
【０１５０】
ステップＳ１０１４では、後続命令の発行に関し、レジスタ干渉以外の発行制約の有無の判定を行う。レジスタ干渉以外の発行制約としては、例えばベクトル処理回路２００における、ベクトルレジスタファイル以外のハードウェア資源の競合等がある。レジスタ干渉以外の発行制約も無いと判定された場合には、命令発行制御回路２０２は後続命令を現在のサイクルの次のサイクルで発行する。
【０１５１】
以上説明したように、第１実施例に係る命令発行制御回路２０２は、後続命令を受けとった後、各サイクルごとに、その後続命令に関し、実行中の全ての先行命令に対するレジスタ干渉の判定処理を行う。命令発行制御回路２０２は、その判定結果に基づいて発行判定値ＩＤを設定することにより、後続命令が次のサイクルで実行できるか否かを判断する。発行設定値ＩＤは、レジスタ干渉が生じる複数の態様に応じて適切に設定される。
【０１５２】
従って、第１実施例に係るベクトル処理回路２００では、先行命令のデータ語長が後続命令のデータ語長より長い場合であっても、複数のレジスタ干渉の態様に応じてレジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。よって、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
【０１５３】
［２．第２実施例］
図１２は、本発明の第２実施例に係るベクトル処理回路の構成例を示す図である。図１２に示した第２実施例のベクトル処理回路１２００は、図２に示した第１実施例のベクトル処理回路２００と、スカラレジスタファイル１２０１とデータメモリ１２０２を有する点で異なるが、その他の部分については同様である。図２に示したベクトル処理回路２００と同一又は対応する部分には同一の符号が付されている。
【０１５４】
レジスタファイル群１２０３は、スカラレジスタファイル１２０１とベクトルレジスタファイル２０１を含む。スカラレジスタファイル１２０１はデータメモリ１２０２のアドレス情報を格納し、命令発行制御回路２０２の要求に応じてそのアドレス情報を供給する。スカラレジスタファイル１２０１の詳細については後述する。
【０１５５】
命令発行制御回路２０２は、スカラレジスタファイル１２０１から、データメモリ１２０２のアドレス情報を受けとり、受けとったアドレス情報に基づいて、データメモリ１２０２に対して読み出し対象となるデータのアドレスを指定する。
【０１５６】
データメモリ１２０２は各パイプライン演算器２０３〜２０６が処理するデータを格納する。データメモリ１２０２は、命令発行制御回路２０２によって指定されたアドレス情報に対応するデータをパイプラインレジスタ２０９に供給する。パイプラインレジスタ２０９はデータメモリ１２０２からデータを受けとり、受けとったデータをベクトルレジスタファイル２０１に供給する。
【０１５７】
ベクトル処理回路１２００で行われるパイプライン処理は、図２に示したベクトル処理回路２００のそれと同一であり、命令発行制御回路２０２で行われるレジスタ干渉の判定処理及び後続命令の発行タイミング調整処理も互いに同一である。
【０１５８】
図１３はスカラレジスタファイル１２０１の詳細を示す図である。スカラレジスタファイル１２０１は３２個のスカラレジスタ１３０２から構成されており、１つのスカラレジスタ１３０２は１個の３２ビットのデータを格納するレジスタ要素から構成されている。各スカラレジスタ１３０２はデータメモリ１２０２上のアドレス情報を格納する。
【０１５９】
図１４はベクトルレジスタファイル２０１の内容を示す図である。図３に示したベクトルレジスタファイル２０１には、論理番号８の配列レジスタｖｒ８の配列データ３０４として、図１４に示したデータが格納されているものとする。配列レジスタｖｒ８では、偶数の物理番号を有する配列要素３０２はすべて“０”のデータを有する。
【０１６０】
続いて、第２実施例におけるベクトル処理回路１２００の動作例を説明する。図１５は、第２実施例におけるベクトル処理回路１２００の動作の一例を示す図である。
【０１６１】
まず、命令ＩＮＳＴ１として、ロード命令（ｖｌｄ）が発行され、そのソースとしてスカラレジスタｖｓｒ１が指定され、そのディスティネーションとして配列レジスタｖｒｗ０が指定されている。すなわち、命令発行制御回路２０２は、図１３に示したスカラレジスタファイル１２０１のスカラレジスタｖｓｒ１に格納された３２ビットデータが指し示すデータメモリ１２０２上のアドレスから３２個の３２ビットのデータをロードし（ｖｌｄ）、パイプラインレジスタ２０９を介して、ベクトルレジスタファイル２０１の論理番号０の配列レジスタｖｒ０と論理番号１の配列レジスタｖｒ１からなるペアレジスタに格納する命令を発行する。
【０１６２】
次に、命令ＩＮＳＴ２として、ロード命令（ｖｌｄ）が発行され、そのソースとしてスカラレジスタｖｓｒ２が指定され、そのディスティネーションとして配列レジスタｖｒｗ２が指定されている。すなわち、命令発行制御回路２０２は、図１３に示したスカラレジスタファイル１２０１のスカラレジスタｖｓｒ２に格納された３２ビットデータが指し示すデータメモリ１２０２上のアドレスから３２個の３２ビットのデータをロードし（ｖｌｄ）、パイプラインレジスタ２０９を介して、ベクトルレジスタファイル２０１の論理番号２の配列レジスタｖｒ２と論理番号３の配列レジスタｖｒ３からなるペアレジスタに格納する命令を発行する。
【０１６３】
次に、命令ＩＮＳＴ３として、ワード命令の加算命令（ｖａｄｄ）が発行され、そのソースとして配列レジスタｖｒｗ０とｖｒｗ２が指定され、そのディスティネーションとして配列レジスタｖｒｗ４が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号０の配列レジスタｖｒｗ０の配列データ３０７と論理番号２の配列レジスタｖｒｗ２の配列データ３０７を加算し（ｖａｄｄ）、加算結果のデータを論理番号４の配列レジスタｖｒｗ４に格納する命令を発行する。
【０１６４】
命令ＩＮＳＴ３は、前半の８サイクルにおいて、論理番号０の配列レジスタｖｒ０の配列データ３０４と論理番号２の配列レジスタｖｒ２の配列データ３０４を加算し、加算結果のデータを論理番号４の配列レジスタｖｒ４に格納するとともに、後半の８サイクルにおいて、論理番号１の配列レジスタｖｒ１の配列データ３０４と論理番号３の配列レジスタｖｒ３の配列データ３０４を加算し、加算結果のデータを論理番号５の配列レジスタｖｒ５に格納する。
【０１６５】
次に、命令ＩＮＳＴ４として、ハーフワード命令のＡＮＤ命令（ｖａｎｄｈ）が発行され、そのソースとして配列レジスタｖｒ４とｖｒ８が指定され、そのディスティネーションとして配列要素ｖｒ６が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号４の配列レジスタｖｒ４の配列データ３０４と論理番号８の配列レジスタｖｒ８の配列データ３０４についてＡＮＤ演算（ｖａｎｄ）を行い、演算結果のデータを論理番号６の配列レジスタｖｒ６に格納する命令を発行する。
【０１６６】
次に、命令ＩＮＳＴ５として、ハーフワード命令のＡＮＤ命令（ｖａｎｄｈ）が発行され、そのソースとして配列レジスタｖｒ５とｖｒ８が指定され、そのディスティネーションとして配列要素ｖｒ７が指定されている。すなわち、命令発行制御回路２０２は、図３に示したベクトルレジスタファイル２０１における論理番号５の配列レジスタｖｒ４の配列データ３０４と論理番号８の配列レジスタｖｒ８の配列データ３０４についてＡＮＤ演算（ｖａｎｄ）を行い、演算結果のデータを論理番号７の配列レジスタｖｒ７に格納する命令を発行する。
【０１６７】
以上の命令ＩＮＳＴ１〜５によって行われる処理をまとめると、以下のとおりである。ベクトル処理回路１２００は、命令ＩＮＳＴ１とＩＮＳＴ２により、スカラレジスタファイル１２０１の２つの値が指し示すデータメモリ１２０２上のアドレスから２組の３２個の３２ビットのデータ（３２個のワードデータ）をロード命令で、ベクトルレジスタファイル２０１の２個の配列レジスタ３０６にそれぞれ格納し、各パイプライン演算器２０３〜２０６で演算可能な状態にする。続いて、ベクトル処理回路１２００は、命令ＩＮＳＴ３により、それら２個の配列レジスタ３０６に格納したワードデータ同士を加算する。続いて、命令ＩＮＳＴ４とＩＮＳＴ５により、加算の結果得られたワードデータ（３２ビットデータ）の各々に対して前半のハーフワードデータ（１６ビットデータ）をマスクする処理を行う。このような処理は、無線ベースバンド処理のような信号処理系アプリケーションにおいて、頻繁に行われるものである。
【０１６８】
図１５に示した例では、ワード命令ＩＮＳＴ３のディスティネーションとして配列レジスタｖｒｗ４が指定され、その配列レジスタｖｒｗ４を構成する前半の配列レジスタｖｒ４が、ハーフワード命令ＩＮＳＴ４のソースとしても指定されている。この場合、命令発行制御回路２０２によって、前半の配列レジスタｖｒ４において、先行のワード命令ＩＮＳＴ３と後続のハーフワード命令ＩＮＳＴ４の間にレジスタ干渉が有ることが判定される。また、配列レジスタｖｒｗ４を構成する後半の配列レジスタｖｒ５が、ハーフワード命令ＩＮＳＴ５のソースとしても指定されている。この場合、命令発行制御回路２０２によって、後半の配列レジスタｖｒ５において、先行のワード命令ＩＮＳＴ３と後続のハーフワード命令ＩＮＳＴ５の間にレジスタ干渉が有ることが判定される。レジスタ干渉の判定処理については、図７にした例において説明したとおりである。
【０１６９】
図１５に示した例では、上記のレジスタ干渉の判定結果に基づいて、命令発行制御回路２０２によって、命令ＩＮＳＴ４とＩＮＳＴ５の発行タイミングが命令ＩＮＳＴ３に対して調整されており、命令ＩＮＳＴ４の処理（ＲＲステージ）はサイクル６から始まり、命令ＩＮＳＴ５の処理（ＲＲステージ）はサイクル１４から始まる。命令発行タイミングの調整処理については、図６、図８〜図１１に示した例において説明したとおりである。その結果、命令ＩＮＳＴ１〜５までの全ての処理を２１サイクルで実行することができる。
【０１７０】
これに対して、比較例として、図１６に、命令ＩＮＳＴ１〜５に対して従来の命令発行タイミング調整処理を適用した例を示す。図１６に示したように、従来の命令発行タイミング調整処理を適用した場合、命令発行制御回路２０２は、レジスタ干渉の有無に関わらず無条件で、後続ハーフワード命令ＩＮＳＴ４を先行ワード命令ＩＮＳＴ３の処理が終了するまでストールさせるように、後続ハーフワード命令ＩＳＮＴ４の発行を遅延させる。そのため、後続のハーフワード命令ＩＮＳＴ４の処理はサイクル１９から始まり、後続のハーフワード命令ＩＮＳＴ５はサイクル２０から始まる。その結果、命令ＩＮＳＴ１〜５までの全ての処理を実行するのに、２７サイクルが必要となる。
【０１７１】
従って、図１５に示した例では、ベクトル処理回路１２００は、第１実施例に係るレジスタ干渉の判定処理及び命令発行タイミングの調整処理を用いることにより、無線ベースバンド処理のような信号処理系アプリケーションにおいて頻繁に発生する処理において、従来の場合と比べて、約１．３倍（≒２７／２１倍）の処理性能の向上を達成することができる。
【０１７２】
これにより、データ語長の異なる命令が混在する場合であっても、命令発行の効率化を図ることができる。
【０１７３】
［３．第３実施例］
図１７は、本発明の第３実施例に係るベクトル処理回路の構成例を示す図である。図１７に示した第３実施例のベクトル処理回路１７００は、図２に示した第１実施例のベクトル処理回路２００と、フォワーディング回路１７０１と選択回路１７０２を有する点で異なるが、その他の部分については同様である。図２に示したベクトル処理回路２００と同一又は対応する部分には同一の符号が付されている。
【０１７４】
図１７に示したベクトル処理回路１７００は、パイプライン処理においてフォワーディング処理を行うことができるが、フォワーディング処理を行う点を除いては、図３に示したベクトル処理回路２００と同一の動作を行う。すなわち、ベクトル処理回路１７００で行われるパイプライン処理は、フォワーディング処理が追加される点を除いては、図２に示したベクトル処理回路２００のそれを同一であり、命令発行制御回路２０２で行われるレジスタ干渉の有無の判定及び後続命令の発行タイミング調整の処理も互いに同一である。
【０１７５】
フォワーディング処理とは、レジスタファイルファイル２０１に未だ書き戻されていないが、パイプライン演算器２０３〜２０６においてすでに生成されている演算結果を次のサイクルで発行される命令のソースとして使用するように制御する処理である。図１７に示した例では、フォワーディング回路１７０１と選択回路１７０２が協働してフォワーディング処理を行う。
【０１７６】
フォワーディング回路１７０１は、ＡＬＵ２１１の演算結果を格納する４つのパイプラインレジスタ２０９のデータを受けとる。また、フォワーディング回路１７０１は４つのＡＬＵ２１１の演算結果のデータを、パイプラインレジスタ２０９を経由することなく受けとる。フォワーディング回路１７０１は受けとったデータを、ベクトルレジスタファイル２０１を経由することなく、各選択回路１７０２に供給する。
【０１７７】
選択回路１７０２はベクトルレジスタファイル２０１とパイプラインレジスタ２０８の間に、各パイプライン演算器２０３〜２０６ごとに設けられる。選択回路１７０２は、フォワーディング回路１７０１とベクトルレジスタファイル２０１からデータを受けとり、命令発行制御回路２０２の制御に基づいて、受けとった複数のデータの中から１つのデータを選択し、対応するＡＬＵ２１１に供給する。
【０１７８】
図１７に示したベクトル処理回路１７００では、フォワーディング回路１７０１と選択回路１７０２によりフォワーディング処理を行うため、ＥＸステージにおいてＡＬＵ２１１が実行した演算の結果を、ベクトルレジスタファイル２０１に書き戻すことなく、使用することができる。このため、ベクトル処理回路１７００では、後続命令が先行命令の演算結果のデータを使用するとき、その演算結果のデータをベクトルレジスタファイル２０１に書き戻すためのＷＢステージの処理が終了するのを待つ必要がない。
【０１７９】
よって、ベクトル処理回路１７００においては、先行命令と後続命令の間でレジスタ干渉が有る場合であっても、後続命令を発行するときに、先行命令のＷＢステージの処理が終了するのを待つ必要がなくなる。すなわち、フォワーディング処理が上述の４つのパイプラインレジスタ２０９のデータを対象とするものである場合には、ＷＢステージの処理を行うのに必要な１サイクル分を考慮する必要がなくなる。また、フォワーディング処理が上述の４つのＡＬＵ２１１の演算結果のデータを対象とするものである場合には、ＥＸ、ＷＢステージの処理を行うのに必要な２サイクル分を考慮する必要がなくなる。
【０１８０】
従って、ＥＸ、ＷＢステージの処理を行うのに必要なサイクルをペナルティサイクルとして考慮する必要がなくなることから、図６、図８、図１１及び図１５等におけるペナルティサイクルＰＣ１の数を減らすことができる。
【０１８１】
従って、図１７に示した第３実施例に係るベクトル処理回路１７００においては、図６、図８、図１１及び図１５等において説明した第１実施例に係る命令発行タイミングの調整処理に、フォワーディング処理を組み合わせることにより、先行命令と後続命令の間でレジスタ干渉が有る場合に後続命令に対して挿入されるペナルティサイクルの数を減らすことができ、それによって、第１実施例に係るベクトル処理回路２００よりも、後続命令の発行タイミングをさらに早めることができる。従って、データ語長の異なる命令が混在する場合であっても、命令発行の効率をより高めることができる。
【０１８２】
尚、図３に示したベクトル処理回路２００と同様に、ベクトル処理回路１７００においても、例えば、ＥＸステージとＷＢステージの間に、ベクトル処理回路１７００の外部メモリ（不図示）に対するデータの読み出しや書き込みを行う、メモリアクセスＭＡ（ＭｅｍｏｒｙＡｃｃｅｓｓ）ステージを設けることができる。ＭＡステージを設けた場合には、ＭＡステージの処理結果を格納するためのパイプラインレジスタが設けられるので、フォワーディング回路１７０１がそのパイプラインレジスタのデータを、ベクトルレジスタファイル２０１を経由することなく受けとり、各選択回路１７０２に供給するようにしてもよい。
【０１８３】
［４．第４実施例］
図１８は、本発明の第４実施例に係るプロセッサシステムの一例を示す図である。図１８に示したプロセッサシステム１８００は、ベクトル処理回路１８０１、スカラ処理回路１８０２、命令メモリ１８０３、データメモリ１８０４、及びバスインターフェース１８０５を含む。
【０１８４】
スカラ処理回路１８０２は例えばＣＰＵ（中央処理装置）であり、命令メモリ１８０３とデータメモリ１８０４に接続される。スカラ処理回路１８０２は、命令メモリ１８０３から命令を受けとり、受けとった命令に応じた処理を実行する。また、スカラ処理回路１８０２は、受けとった命令に基づいてベクトル処理回路１８０１に実行させるべき処理があると判断した場合には、ベクトル処理回路１８０１に対してその処理を実行させるための内部命令を供給する。
【０１８５】
ベクトル処理回路１８０１は、スカラ処理回路１８０２とデータメモリ１８０４に接続される。ベクトル処理回路１８０１はスカラ処理回路１８０２から上述の内部命令を受けとり、受けとった内部命令に応じた処理を実行する。スカラ処理回路１８０２とベクトル処理回路１８０１はデータメモリ１８０４を介して、上述の内部命令に応じた処理に必要なデータのやり取りを行う。ベクトル処理回路１８０１としては、図２、図１２、図１７に示したベクトル処理回路２００、１２００、１７００のいずれかが用いられる。
【０１８６】
命令メモリ１８０３及びデータメモリ１８０４は例えばＲＡＭであり、バスインターフェース１８０５に接続される。バスインターフェース１８０５はバス１８０６に接続される。命令メモリ１８０３は、バス１８０６及びバスインターフェース１８０５を介して命令を受けとる。
【０１８７】
図１８に示したプロセッサシステム１８００は、組み込み機器向けに用いられるものであり、スカラ処理回路１８０２が主処理装置として機能し、ベクトル処理回路１８０１はスカラ処理回路１８０２を補助する副処理装置として機能する。ベクトル処理回路１８０１は、スカラ処理回路１８０２が行うべき処理のうちの一部の処理を、スカラ処理回路１８０２からの内部命令を受けて担当する。ベクトル処理回路１８０１は例えば、無線ベースバンド処理のような特定の信号処理を行う。
【０１８８】
図１８に示した例では、ベクトル処理回路１８０１は組み込み機器向けのプロセッサシステムにおける副処理装置として位置付けられるものである。このため、ベクトル処理回路１８０１は、限られた容量のレジスタしか搭載することができず、限られた処理能力の演算器しか搭載することができない。
【０１８９】
これに対して、ベクトル処理回路１８０１として用いられるベクトル処理回路２００、１２００、１７００ではいずれも、図２、図１２及び図１７で説明したように、データ語長の異なる命令が混在する場合であっても、ベクトルレジスタファイル２０１の限られたレジスタ容量を無駄なく使用しながら、データ語長が異なる命令を適切に処理することができる。さらに、複数のレジスタ干渉の態様の違いに応じてレジスタ干渉の判定を適切に行うことにより、レジスタ干渉の有無を正確に検出することができ、正確な検出結果に基づいて、後続命令の発行タイミングを適切に調整することができる。
【０１９０】
従って、限られたレジスタ容量と処理能力しか持たない、組み込み機器向けプロセッサシステム向けのベクトル処理回路１８０１においても、データ語長が異なる命令を効率的に実行することができる。
【０１９１】
以上の第１乃至第４実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも１つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするベクトル処理回路。
（付記２）
前記複数の配列レジスタ要素の各々には物理番号が割り当てられ、
前記レジスタ干渉の判定は、前記先行命令の非先頭サイクルで処理される前記少なくとも１つの配列要素の物理番号と、前記後続命令の先頭サイクルで処理される前記配列要素の物理番号が一致する否かを判定することにより行われることを特徴とする付記１記載のベクトル処理回路。
（付記３）
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定した場合に、前記先行命令の種別に応じて設定される第１ペナルティサイクルと、前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数に応じて設定される第２ペナルティサイクルを挿入することにより、前記後続する命令の発行タイミングを遅延させることを特徴とする付記１又は２記載のベクトル処理回路。
（付記４）
前記命令発行制御回路は、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の先頭のサイクルで処理される前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、さらにレジスタ干渉の有無を判定することを特徴とする付記１ないし３のいずれか一つに記載のベクトル処理回路。
（付記５）
前記先行命令のデータ語長は、前記後続命令のデータ語長の２倍の長さであり、
前記命令発行制御回路は、前記先行命令の後半サイクルで処理される前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定することを特徴とする付記１ないし４のいずれか一つに記載のベクトル処理回路。
（付記６）
前記ベクトルレジスタファイルは、前記配列要素がベクトル長に応じてグループ化されて構成された複数の配列レジスタを含み、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された前記配列レジスタに格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された前記配列レジスタに複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記先行命令のデータ語長に応じて前記配列レジスタのデータサイズを変化させ、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭サイクルで処理される前記配列レジスタと、前記後続命令の先頭サイクルで処理される前記配列レジスタとの間で、レジスタ干渉の有無を判定する
ことを特徴とする付記１ないし５のいずれか一つに記載のベクトル処理回路。
（付記７）
前記複数の配列要素の各々には物理番号が割り当てられ、
前記複数の配列レジスタの各々には論理番号が割り当てられ、
前記レジスタ干渉の有無の判定は、前記先行命令で指定された論理番号を有する前記配列レジスタの中で、前記先行命令の非先頭サイクルで処理される前記配列要素の物理番号と、前記後続命令で指定された論理番号を有する前記配列レジスタの中で、前記後続命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号が一致する否かを判定することにより行われる
ことを特徴とする付記６記載のベクトル処理回路。
（付記８）
前記命令は、命令コード、前記命令コードのソースとなる前記配列レジスタを示すソース情報、及び前記命令コードのディスティネーションとなる前記配列レジスタを示すディスティネーション情報を含み、
前記命令発行制御回路は、前記先行命令及び前記後続命令の少なくとも一方のディスティネーション情報によって示される前記配列レジスタと、他方のソース情報又はディスティネーション情報によって示される前記配列レジスタとの間で、レジスタ干渉の有無を判定することを特徴とする付記６又は７記載のベクトル処理回路。
（付記９）
前記先行命令はワード命令であり、
前記後続命令はハーフワード命令であり、
前記命令発行制御回路は、前記ワード命令時に、前記ハーフワード命令に対して割り当てられた前記物理番号が連続する２つの配列要素を１つの配列要素として扱い、前記ハーフワード命令に対して割り当てられた前記論理番号が連続する２つの配列レジスタを１つの配列レジスタとして扱い、
前記レジスタ干渉の判定は、前記ワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ワード命令の後半サイクルで最初に処理される前記配列要素の物理番号と、前記ハーフワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ハーフワード命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致する否かを判定することにより、行われる
ことを特徴とする付記７又は８記載のベクトル処理回路。
（付記１０）
前記先行命令はダブルワード命令であり、
前記後続命令はハーフワード命令であり、
前記命令発行制御回路は、前記ダブルワード命令時に、前記ハーフワード命令に対して割り当てられた前記物理番号が連続する４つの配列要素を１つの配列要素として扱い、前記ハーフワード命令に対して割り当てられた前記論理番号が連続する４つの配列レジスタを１つの配列レジスタとして扱い、
前記レジスタ干渉の判定は、前記ダブルワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ダブルワード命令の２番目ないし４番目の四半サイクルでそれぞれ最初に処理される前記配列要素の物理番号と、前記ハーフワード命令で指定された論理番号を有する前記配列レジスタの中で、前記ハーフワード命令の先頭サイクルで処理される前記配列レジスタ要素の物理番号とが一致する否かを判定することにより、行われる
ことを特徴とする付記７又は８記載のベクトル処理回路。
（付記１１）
前記パイプライン処理は少なくとも、前記配列要素に格納されたデータを演算する演算ステージと、前記演算結果のデータを前記ベクトルレジスタに格納する書き戻しステージを有し、
前記命令発行制御回路は、前記レジスタ干渉の判定によりレジスタ干渉が有ると判定したとき、少なくとも、レジスタ干渉が有ると判定された前記配列要素に対する前記先行命令の前記演算ステージの結果が、前記書き戻しステージで前記ベクトルレジスタファイルに格納されるまで、前記後続命令を発行しないように、前記後続命令の発行タイミングを調整することを特徴とする付記１乃至１０のいずれか一つに記載のベクトル処理回路。
（付記１２）
複数のスカラレジスタを含むスカラレジスタファイルと、
データを格納するデータメモリと
をさらに有し、
前記スカラレジスタによって指定された、前記データメモリ内のデータが前記ベクトルレジスタファイルに供給されることを特徴とする付記１乃至１１のいずれか一つに記載のベクトル処理回路。
（付記１３）
前記パイプライン演算器の演算処理結果のデータを、前記ベクトルレジスタファイルを経由することなく受けとるフォワーディング回路をさらに有し、
前記フォワーディング回路は受けとったデータを、前記パイプライン演算器に、前記ベクトルレジスタファイルを経由することなく供給することを特徴とする付記１乃至１２のいずれか一つに記載のベクトル処理回路。
（付記１４）
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記後続命令のＸ番目（Ｘは１以上の整数）のサイクルで処理される前記配列要素と、前記先行命令のＹ番目（ＹはＸより大きな整数）のサイクルで処理される少なくとも１つの前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするベクトル処理回路。
（付記１５）
前記整数Ｙは、前記後続命令で指定された複数の前記配列要素の演算処理を実行するのに必要なサイクル数Ｚ（Ｚは１以上の整数）よりも大きいことを特徴とする付記１４記載のベクトル処理回路。
（付記１６）
前記整数Ｙは、ｎを１以上の整数としたとき、前記整数Ｘ及びＺに対して、Ｙ＝Ｘ＋ｎ×Ｚの関係を満たすことを特徴とする付記１５記載のベクトル処理回路。
（付記１７）
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
を有するベクトル処理回路において、命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御方法であって、
前記パイプライン演算器の各々によって、発行された１つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、
前記命令として前記先行命令と前記先行命令の後に続く後続命令を発行し、
前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、制御回路によって、前記先行命令の非先頭のサイクルで処理される少なくとも１つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、
前記レジスタ干渉の判定によりレジスタ干渉が有ると判定された場合に、前記制御回路によって、前記後続命令の発行タイミングを調整する
ことを特徴とする命令発行制御方法。
（付記１８）
前記レジスタ干渉の判定において、前記制御回路によって、前記先行命令に対して、前記先行命令の種別と、前記先行命令の先頭サイクルから前記非先頭サイクルまでのサイクル数と、前記先行命令の先頭サイクルと現在のサイクルとの間の差分に基づいて発行判定値を設定し、
前記発行判定値に基づいて前記後続命令の発行タイミングを決定することを特徴とする付記１７記載の命令発行制御方法。
（付記１９）
バスと、
バスインターフェースと、
前記バスに前記バスインターフェースを介して接続され、命令を格納する命令メモリと、
前記命令メモリに接続され、前記命令メモリに格納された命令を受けてデータの処理を実行するスカラ処理回路と、
前記スカラ処理回路に接続され、前記スカラ処理回路からの命令を受けてデータの処理を実行するベクトル処理回路と、
前記バスに前記バスインターフェースを介して接続され、前記スカラ処理回路及び前記ベクトル処理回路に対して、前記データの送受信を行うデータメモリを有するプロセッサシステムであって、前記ベクトル処理回路は、
複数の配列要素を含むベクトルレジスタファイルと、
各々が前記配列要素に格納されたデータに対して演算処理を行う複数のパイプライン演算器と、
命令を発行し、前記命令に基づいて前記ベクトルレジスタファイル及び前記パイプライン演算器の動作を制御することにより、パイプライン処理を制御する命令発行制御回路と
を有するベクトル処理回路であって、
前記パイプライン演算器の各々は、前記命令発行制御回路によって発行された１つの前記命令に対して、ソースとして指定された複数の前記配列要素に格納されたデータを複数のサイクルに分けて演算し、前記演算結果をディスティネーションとして指定された複数の前記配列要素に複数のサイクルに分けて格納し、
前記命令発行制御回路は、前記命令のデータ語長に応じて前記配列要素のデータサイズを変化させ、前記命令として先行命令と前記先行命令の後に続く後続命令を発行し、前記先行命令のデータ語長が前記後続命令のデータ語長より長いとき、前記先行命令の非先頭のサイクルで処理される少なくとも１つの前記配列要素と、前記後続命令の先頭サイクルで処理される前記配列要素との間で、レジスタ干渉の有無を判定し、前記レジスタ干渉の判定結果に基づいて前記後続命令の発行タイミングを調整する
ことを特徴とするプロセッサシステム。
【符号の説明】
【０１９２】
２００  ベクトル処理回路
２０１  ベクトルレジスタファイル
２０２  命令発行制御回路
２０３〜２０６  パイプライン演算器
２０７  命令バッファ
２０８、２０９  パイプラインレジスタ
２１０  ＶＬレジスタ
２１１  ＡＬＵ
３０２、３０５  配列要素
３０３、３０６  配列レジスタ
３０４、３０７  配列データ
１２００  ベクトル処理回路
１２０１  スカラレジスタファイル
１２０２  データメモリ
１２０３  レジスタファイル群
１３０２  スカラレジスタ
１７００  ベクトル処理回路
１７０１  フォワーディング回路
１７０２  選択回路
１８００  プロセッサシステム
１８０１  ベクトル処理回路
１８０２  スカラ処理回路
１８０３  命令メモリ
１８０４  データメモリ
１８０５  バスインターフェース
【図１】
0005699554.tif 000002
【図２】
0005699554.tif 000003
【図３】
0005699554.tif 000004
【図４】
0005699554.tif 000005
【図５】
0005699554.tif 000006
【図６】
0005699554.tif 000007
【図７】
0005699554.tif 000008
【図８】
0005699554.tif 000009
【図９】
0005699554.tif 000010
【図１０】
0005699554.tif 000011
【図１１】
0005699554.tif 000012
【図１２】
0005699554.tif 000013
【図１３】
0005699554.tif 000014
【図１４】
0005699554.tif 000015
【図１５】
0005699554.tif 000016
【図１６】
0005699554.tif 000017
【図１７】
0005699554.tif 000018
【図１８】
0005699554.tif 000019