(57)【要約】【課題】簡単な構成でnop命令数を削減できるＶＬＩＷ型プロセッサを提供する。【解決手段】命令ディスパッチャ１２とＡＬＵ１５の間にディレイ発生部１３を設け、命令ディスパッチャ１２とストアユニット１７の間にディレイ発生部１４を設ける。ディレイ発生部１３は、命令ディスパッチャ１２からＡＬＵ１５に向けて送出された小命令の、ＡＬＵ１５への供給タイミングを調整する。ディレイ発生部１４は、命令ディスパッチャ１２からストアユニット１７に向けて送出された小命令の、ストアユニット１７への供給タイミングを調整する。【選択図】図１
2008015589.tif 000002
【特許請求の範囲】
【請求項１】
独立して処理を行う複数の実行ユニットが並列に配置されたＶＬＩＷ型プロセッサであって、
前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
前記ディレイ発生手段は、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給する、ＶＬＩＷ型プロセッサ。
【請求項２】
前記複数の実行ユニットは、
ロード命令に従って、主記憶部から演算に必要なデータをロードする少なくとも１つのロードユニットと、
演算命令に従って、前記主記憶部からロードされたデータを使用して演算する少なくとも１つの演算ユニットと、
ストア命令に従って、前記演算ユニットでの演算結果を前記主記憶部に格納する少なくとも１つのストアユニットと、を有し、
前記ディレイ発生手段は、
前記演算命令の前記演算ユニットへの供給タイミングを第１の遅延量だけ遅延させる第１のディレイ発生部と、
前記ストア命令の前記ストアユニットへの供給タイミングを前記第１の遅延量より大きな第２の遅延量に基づいて遅延させる第２のディレイ発生部と、を有する、請求項１に記載のＶＬＩＷ型プロセッサ。
【請求項３】
前記ロードユニット、前記演算ユニットおよび前記ストアユニットの各実行ユニットの処理で必要とされるサイクル数が固定であり、
前記第１の遅延量が、前記ロードユニットの処理で必要とされるサイクル数に対応する遅延量であり、前記第２の遅延量が、前記ロードユニットの処理で必要とされるサイクル数と前記演算ユニットの処理で必要とされるサイクル数との和に対応する遅延量である、請求項２に記載のＶＬＩＷ型プロセッサ。
【請求項４】
前記演算ユニットは、前記演算命令に従って一連の演算処理を実行する複数のユニットからなる、請求項２に記載のＶＬＩＷ型プロセッサ。
【請求項５】
前記命令列は、前記ロード命令として、命令の実行完了に要するサイクル数が異なるロード命令の設定が可能とされ、
前記第１のディレイ発生部は、前記ロード命令の、前記命令の実行完了に要するサイクル数の違いに応じて、前記第１の遅延量を制御する、請求項２に記載のＶＬＩＷ型プロセッサ。
【請求項６】
前記第１のディレイ発生部は、前記命令ディスパッチャから送出された前記ロード命令および演算命令を入力としており、
入力された前記演算命令を、設定された遅延量で遅延させるディレイレジスタと、
入力された前記ロード命令の実行完了に要するサイクル数から該ロード命令の実行完了タイミングを検出するサイクル検出部と、
前記サイクル検出部で検出された前記ロード命令の実行完了タイミングの値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
入力された前記演算命令の前のサイクルで前記命令ディスパッチャから前記演算ユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記演算命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
前記遅延量決定部は、前記現在の遅延量が前記ロード命令の実行完了タイミングの値以下の場合は、該実行完了タイミングに対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きである場合は、該実行完了タイミングの値から１サイクル分の時間を差し引いた値に対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定する、請求項５に記載のＶＬＩＷ型プロセッサ。
【請求項７】
前記命令列は、前記演算命令として、命令の実行完了に要するサイクル数が異なる演算命令の設定が可能とされ、
前記第２のディレイ発生部は、前記演算命令の、前記命令の実行完了に要するサイクル数の違いに応じて、前記第２の遅延量を制御する、請求項２に記載のＶＬＩＷ型プロセッサ。
【請求項８】
前記第２のディレイ発生部は、前記命令ディスパッチャから送出された前記演算命令およびストア命令を入力としており、
入力された前記ストア命令を、設定された遅延量で遅延させるディレイレジスタと、
入力された前記演算命令の実行完了に要するサイクル数から該演算命令の実行完了タイミングを検出するサイクル検出部と、
前記サイクル検出部で検出された前記演算命令の実行完了タイミングの値と予め与えられている前記第１の遅延量との和である遅延加算値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
入力された前記ストア命令の前のサイクルで前記命令ディスパッチャから前記ストアユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記ストア命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
前記遅延量決定部は、前記現在の遅延量が前記遅延加算値以下の場合は、該遅延加算値を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きである場合は、前記演算命令の実行完了タイミングの値から１サイクル分の時間を差し引いた値に対応する遅延時間を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定する、請求項７に記載のＶＬＩＷ型プロセッサ。
【請求項９】
独立して処理を行う複数の実行ユニットが並列に配置されたＶＬＩＷ型プロセッサにおいて行われる命令発行方法であって、
前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を命令メモリから読み出す第１のステップと、
前記命令メモリから読み出した命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する第２のステップと、
送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整する第３のステップと、を含み、
前記第３のステップは、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給するステップを含む、命令発行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサアーキテクチャに関し、特にＶＬＩＷ（Very Long Instruction Word）アーキテクチャに関する。
【背景技術】
【０００２】
プロセッサの性能を表すときの一つの指標として、動作周波数と１サイクルに発行（実行）可能な命令数の積が用いられる。ゆえに、プロセッサの性能向上を達成するためには、動作周波数の向上や同時実行可能な命令数の向上が重要となる。ＶＬＩＷ方式は、同時実行可能な命令数を向上させる手段のひとつとして用いられている。
【０００３】
ＶＬＩＷ方式のプロセッサ（ＶＬＩＷ型プロセッサ）について述べる。ＶＬＩＷ型プロセッサは、非特許文献１に示されているように、複数の実行ユニットが並列に配置された構成をとる。命令は命令メモリに格納されており、プログラムカウンタで指定される一つの命令（以降、命令列と呼ぶ）は、多数の小命令（各実行ユニットに対する命令）で構成されている。同じ命令列に含まれる小命令は、同時に各実行ユニットに発行される。そうすることで、複数の実行ユニットを並列動作させることができる。この方式の特徴として、コンパイラはソースプログラムからデータの依存関係を考慮しながら並列演算が可能な小命令を抽出して１つの命令列に合成することがあげられる。小命令を抽出する過程で、ある演算ユニットが何も命令を実行しない時間があった場合、その時間で実行される命令列には何もしない演算命令を表すｎｏｐ(No Operation)命令が配置される。
【０００４】
図１３に、ＶＬＩＷ型プロセッサの構成の一例を示す。図１３を参照すると、プロセッサは、それぞれが実行ユニットとして用いられる、ロードユニット４４とストアユニット４５とＡＬＵ（Arithmetic Unit）４３とが、並列に配置された構成をとる。これら実行ユニットの周辺には、命令を格納する命令メモリ４１、命令メモリの制御を行うプログラムカウンタ４０、小命令を各実行ユニットに振り分ける命令ディスパッチャ４２、データを格納するために用いられる主記憶装置４６、および汎用レジスタ４７が存在する。
【０００５】
このプロセッサでは、ＡＬＵ４３での演算に必要なデータが、主記憶装置４６から汎用レジスタ４７に転送される。ＡＬＵ４３は、汎用レジスタ４７に入力されたデータを用いて演算を行う。演算結果は、汎用レジスタ４７に一旦格納され、その後、主記憶装置４６に転送される。この一連の典型的な処理に対して、コンパイラは、命令シーケンス（複数の命令列のまとまり）を以下のように構成する。
【０００６】
まず、はじめの命令列にロード命令を配置する。次に、ロード命令を配置した命令列からＡＬＵ命令が発行できるタイミングだけ遅れて発行される命令列にＡＬＵ命令を配置する。これにより、ロード命令−ＡＬＵ命令間の依存関係が保障される。ストア命令を配置する際には、コンパイラは、ＡＬＵ命令−ストア命令間の依存関係を考慮した配置を行う。つまり、ストア命令は、ストア対象となるデータを演算結果として出力するＡＬＵ命令が配置された命令列からストア命令が発行可能なタイミングだけ遅れて発行される命令列に配置される。
【０００７】
一例として、図１４に、ロード命令、ストア命令、ＡＬＵ命令が常に１サイクルで完了するプロセッサを想定した場合の演算式（d = (a + b）x (a - c)）を処理するための命令シーケンスを示す。
【０００８】
図１４の命令シーケンスにおいて、左側の数字は命令列が実行される順番を示す。最初のカンマで区切られたフィールドにロード命令、次のカンマで区切られたフィールドにストア命令、その次のカンマで区切られたフィールドにＡＬＵ命令がそれぞれ配置される。ロード命令とＡＬＵ命令とストア命令は、ロード命令−ＡＬＵ命令間とＡＬＵ命令−ストア命令間のデータ依存関係が保障されるように配置される。３番目から５番目の命令列にかけてのロード命令のフィールド、０番目、１番目、５番目の命令列のＡＬＵ命令のフィールド、および０番目から４番目の命令列のストア命令のフィールドには、それぞれの実行ユニットにおいて何も命令を実行しないためｎｏｐ命令が配置される。
【０００９】
しかし、上記の命令シーケンスでは、ｎｏｐ命令が多数配置されるために、命令メモリの使用効率が悪くなるという問題が発生する。そこで、ｎｏｐ命令数削減方式として、以下の第一および第二の方式（非特許文献２参照）が提案されている。
【００１０】
第一の方式は、命令列の先頭に、実行ユニットに対しての小命令かを表すマスクと一つの命令列に存在する小命令の個数（以下、PCincと呼ぶ）を追加することで、ｎｏｐ命令を削減するという方式である。
【００１１】
図１５に、第一の方式の概要を示す。この第一の方式では、命令列の先頭に追加したマスクにより指定された命令バッファの位置に小命令を割り当てる。そして、命令バッファから各実行ユニットへ小命令を発行する。次に、マスクに付随しているPCincの値から次の命令のマスクの位置を判別して、次のマスクを読み込む。
【００１２】
図１５に示した例では、命令キャッシュラインの最初の命令列の先頭に追加された「マスク０」は、命令バッファの位置を指定する情報として「１１０００１１１」が与えられており、次の命令列の先頭に追加された「マスク１」は、命令バッファの位置を指定する情報として「００１１０１００」が与えられている。「マスク０」に付随しているPCincの値は「５」であり、「マスク１」に付随しているPCincの値は「３」である。「マスク０」が付与された命令列は、「命令００」、「命令０１」、「命令０５」、「命令０６」、「命令０７」を含む。「マスク１」が付与された命令列は、「命令１２」、「命令１３」、「命令１５」を含む。「マスク０」の命令列においては、「１１０００１１１」の情報によって指定される命令バッファ０の位置に、小命令である「命令００」、「命令０１」、「命令０５」、「命令０６」、「命令０７」をそれぞれ割り当てる。「マスク１」の命令列においては、「００１１０１００」の情報によって指定される命令バッファ１の位置に、小命令である「命令１２」、「命令１３」、「命令１５」をそれぞれ割り当てる。
【００１３】
第二の方式は、小命令ごとに、Ｐｂｉｔと呼ばれる同一命令列に含まれる最後の小命令であることを示すビットを付加することで、ｎｏｐ命令を削減するという方式である。
【００１４】
図１６に、第二の方式の概要を示す。この第二の方式では、それぞれの小命令のPbitの値を判定することによって、どの小命令までが一つの命令列であるかが識別される。この場合、Pbitの他に、それぞれの小命令がどの実行ユニットに対するものかを判別する手段が必要となる。
【００１５】
図１６に示した例では、命令キャッシュラインの最初の命令列である「命令００」、「命令０１」、「命令０５」、「命令０６」、「命令０７」のうち、最後尾に位置する「命令０７」のPbit値が「０」とされ、これ以外の命令のPbit値は「１」とされている。Pbit値が「０」である命令を判定することで、命令列の区切りを判断することができる。
【００１６】
上記の他、特許文献１には、並列配置された複数の実行パイプラインを備えるＶＬＩＷ型プロセッサが記載されている。初段の実行パイプラインを除く他の実行パイプラインの入力側には、ＰＲ（パイプラインレジスタ）が設けられている。このＶＬＩＷ型プロセッサでは、並列配置順に初段から１段ずつシフトした対角線上の各段で、VLIW命令内の複数の処理から選択指定した処理を1つずつ対角線方向にパイプライン実行する。
【特許文献１】特開2002-333978号、図1、第19段落
【非特許文献１】富田眞治著「並列計算機構成論」昭晃堂出版、1986年11月15日、ｐｐ．131−142
【非特許文献２】Joseph A. Fisher外2名  著「エンベデッド  コンピューティング (Embedded Computing)」Morgan Kaufmann Pub出版、2004年10月31日、pp. 115-117
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかし、上述した第一及び第二の方式においては、マスクやPbitとよばれるフラグを常に命令列や小命令中に付加し、その付加したマスクやフラグの値から同一命令列に存在する小命令の構成を判断して、小命令を各実行ユニットへ振り分ける、といった動作が行われる。このため、命令ディスパッチャの入力側または命令ディスパッチャ内部に、マスクやPbitにより小命令の発行先を特定するような手段を設ける必要があり、その分、命令発行制御の構成が複雑になる。
【００１８】
特許文献１に記載のＶＬＩＷ型プロセッサは、並列配置順に初段から１段ずつシフトした対角線上の各段で、選択指定した処理を１つずつ対角線方向にパイプライン実行する構成である。このような構成では、実行パイプラインの配置が制限されることになるので、どうしても回路設計時における自由度が低くなってしまう。
【００１９】
また、実行パイプラインに、命令列中に設けられた選択ビットに基づく制御信号に従って、前段の実行パイプラインからのオペランドとパイライン転送されたオペランドとの切り替え制御を行う処理部を設ける必要があるので、その分、命令発行制御の構成が複雑になり、装置コストが増大する。
【００２０】
さらに、各実行パイプラインのパイプラインには実行パイプラインに対する小命令のほかに、レジスタオペランドで指定されたレジスタの値が入力されるようになっているため、その分、ＰＲなどのハードウェアの構成が大掛かりになり、コストが増大する。
【００２１】
本発明の目的は、上記問題を解決し、簡単な構成でnop命令数を削減できるＶＬＩＷ型プロセッサを提供することである。
【課題を解決するための手段】
【００２２】
上記目的を達成するため、本発明は、独立して処理を行う複数の実行ユニットが並列に配置されたＶＬＩＷ型プロセッサであって、
前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
前記ディレイ発生手段が、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給することを特徴とする。
【００２３】
上記の構成によれば、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される。例えば、データ依存関係が存在する、ロード命令、ＡＬＵ命令およびストア命令が、同一の命令列内に配列されており、命令ディスパッチャが、それらロード命令、ＡＬＵ命令およびストア命令をロードユニット、ＡＬＵおよびストアユニットに向けて送出した場合、ディレイ発生手段によって、ロード命令の後続命令であるＡＬＵ命令およびストア命令が適切なタイミングで送出先のＡＬＵおよびストアユニットに供給される。ここで、適切なタイミングとは、ロード命令−ＡＬＵ命令間やＡＬＵ命令−ストア命令間にデータ依存関係を保障することのできるタイミングである。このように、データ依存関係が存在する小命令であっても、同一の命令列内に配列することが可能となっているので、従来、データ依存関係により挿入されていたnop命令を削減することが可能である。
【００２４】
また、命令列を構成する小命令の配列順序は予め決められており、命令ディスパッチャは、その配列順序に従って小命令を実行ユニットに向けて送出するようになっているので、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加する必要がない。
【００２５】
また、ディレイ発生手段は、命令ディスパッチャから送出された小命令のみを入力としており、レジスタオペランドで指定されたレジスタの値が入力されることはない。
【００２６】
また、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される構成においては、特許文献１に記載の、並列配置順に初段から１段ずつシフトした対角線上の各段で、選択指定した処理を１つずつ対角線方向にパイプライン実行する構成のように、実行ユニットの配置が制限されることはない。
【発明の効果】
【００２７】
本発明によれば、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加することなくnop命令を削減することが可能であるので、従来に比べて、構成が簡単で、低コストのプロセッサを提供することができる。
【００２８】
また、実行ユニットの配置が制限されることはないので、回路設計における自由度も高い。
【００２９】
ディレイ発生手段は、命令ディスパッチャから送出された小命令のみを入力としているので、小命令およびレジスタオペランドで指定されたレジスタの値が入力されるパイプレジスタに比べて、より少ないハードウェアリソースで構成することができる。
【発明を実施するための最良の形態】
【００３０】
次に、本発明の実施形態について図面を参照して説明する。
【００３１】
（第１の実施形態）
図１は、本発明の第１の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。図１を参照すると、ＶＬＩＷ型プロセッサの主要部は、プログラムカウンタ１０、命令メモリ１１、命令ディスパッチャ１２、ディレイ発生部１３、１４、ＡＬＵ１５、ロードユニット１６、ストアユニット１７、主記憶部１８、および汎用レジスタ１９からなる。
【００３２】
命令メモリ１１は、命令を格納するためのメモリである。プログラムカウンタ１０は、命令メモリ１１からの命令発行を制御する。プログラムカウンタ１０で指定されるアドレスに従って命令メモリ１１から命令が発行される。命令ディスパッチャ１２は、命令メモリ１１から発行された命令列に含まれる小命令（ロード命令、ＡＬＵ命令、ストア命令）を、実行ユニットである、ＡＬＵ１５、ロードユニット１６およびストアユニット１７に振り分ける。
【００３３】
ディレイ発生部１３は、命令ディスパッチャ１２がＡＬＵ１５に向けて送出した小命令（ＡＬＵ命令またはｎｏｐ命令）のＡＬＵ１５への供給タイミングを調整するためのものである。ディレイ発生部１４は、命令ディスパッチャ１２がストアユニット１７に向けて送出した小命令（ストア命令またはｎｏｐ命令）のストアユニット１７への供給タイミングを調整するためのものである。これらディレイ発生部１３、１４により、命令ディスパッチャ１２から送出された小命令の各実行ユニット（ＡＬＵ１５、ロードユニット１６、ストアユニット１７）への供給タイミングを調整するディレイ発生手段が構成されている。
【００３４】
ロードユニット１６は、命令ディスパッチャ１２から供給されるロード命令に従って、主記憶部１８から汎用レジスタ１９へデータを転送する。ＡＬＵ１５は、命令ディスパッチャ１２から供給されるＡＬＵ命令に従って、汎用レジスタ１９からの入力データを用いて演算を行い、その演算結果を汎用レジスタ１９に出力する。ストアユニット１７は、命令ディスパッチャ１２から供給されるストア命令に従って、主記憶部１８へ汎用レジスタ１９のデータを転送する。
【００３５】
汎用レジスタ１９は、ＡＬＵ１５への入力データやＡＬＵ１５での演算結果を格納する汎用のレジスタである。主記憶部１８は、汎用レジスタ１９では格納しきれないデータや外部入出力用のデータを格納する。
【００３６】
本実施形態のＶＬＩＷ型プロセッサでは、次の２つの前提条件を満たしているものと仮定する。アーキテクチャにおいて、主記憶部１８は、固定サイクルで応答するＳＲＡＭ等の記憶装置により構成される。したがって、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するＡＬＵ命令が発行できるようになるまでの時間（以下、T_loadと記す）は、ロード命令によらず一定である（第１の前提条件）。また、ＡＬＵ命令がＡＬＵに発行されてからそのＡＬＵでの演算結果を対象としたストア命令が発行できるようになるまでの時間（以下、T_ALUと記す）も、ＡＬＵ命令によらず一定である（第２の前提条件）。
【００３７】
次に、ディレイ発生部１３、１４の構成を具体的に説明する。ディレイ発生部１３、１４は、基本的には同じ構成であって、図２に示すように、シフトレジスタとして動作するディレイレジスタ２０のみにより構成される。このようにディレイ発生部１３、１４は、非常にシンプルな構成とされている。
【００３８】
ディレイ発生部１３のディレイレジスタの深さＮはT_loadに等しい。よって、このディレイ発生部１３は、命令ディスパッチャ１２から出力されたＡＬＵ命令に対してT_load分の遅延を与える。一方、ディレイ発生部１４におけるディレイレジスタの深さＮは、T_loadとT_ALUとの和に等しい。よって、このディレイ発生部１４は、命令ディスパッチャ１２から出力されたストア命令に対して、（T_load＋T_ALU）分の遅延を与える。
【００３９】
次に、本実施形態のＶＬＩＷ型プロセッサの命令発行動作について、図１を参照して具体的に説明する。以下に説明する動作では、１つの命令列に対しての発行処理から演算処理完了までを注目している。
【００４０】
まず、命令メモリ１１からプログラムカウンタ１０によって指定されたアドレスにある命令列が命令ディスパッチャ１２に出力される。命令ディスパッチャ１２は、入力された命令列を小命令ごとに分割して各実行ユニット（ＡＬＵ１５、ロードユニット１６、ストアユニット１７）に振り分ける。この命令振り分けによれば、例えば、命令メモリ１１から小命令として「Load 0」、「Operation 0」および「Store 0」を含む命令列（３段のパイプラインの命令列に対応する）が入力された場合は、小命令「Load 0」はロードユニット１６に直接供給され、小命令「Operation 0」はディレイ発生部１３を介してＡＬＵ１５に供給され、小命令「Store 0」はディレイ発生部１４を介してストアユニット１７に供給される。
【００４１】
ロード命令は、命令ディスパッチャ１２からロードユニット１６に直接供給される。ロードユニット１６では、命令ディスパッチャ１２から直接供給されたロード命令に従って、主記憶部１８から汎用レジスタ１９へデータを転送するロード処理が実行される。
【００４２】
ＡＬＵ命令は、命令ディスパッチャ１２からディレイ発生部１３を介してＡＬＵ１５に供給される。ディレイ発生部１３では、命令ディスパッチャ１２から供給されたＡＬＵ命令は、図２に示した構成を有するディレイレジスタに入力され、そこで、（T_load）サイクル分の遅延を受ける。ＡＬＵ１５は、ディレイ発生部１３から供給されるT_load分の遅延を受けたＡＬＵ命令に従って、汎用レジスタ１９からの入力データを用いた演算処理を実行し、その演算結果を汎用レジスタ１９に出力する。このように、ＡＬＵ命令は、ディレイ発生部１３でT_load分の遅延を受けた後にＡＬＵ１５に供給されるので、ＡＬＵ１５によるＡＬＵ命令の実行時には、演算に必要なデータは、ロードユニット１６により主記憶部１８から汎用レジスタ１９にすでに転送されている。よって、ＡＬＵ１５は、ロード対象であるデータを入力データとして使用することができる。
【００４３】
ストア命令は、命令ディスパッチャ１２からディレイ発生部１４を介してストアユニット１７に供給される。ディレイ発生部１４では、命令ディスパッチャ１２から供給されたストア命令は、図２に示した構成を有するディレイレジスタに入力され、そこで、（T_load+T_ALU）分の遅延を受ける。ストアユニット１７は、ディレイ発生部１３から供給される（T_load+T_ALU）分の遅延を受けたストア命令に従って、汎用レジスタ１９に保持されているデータ（演算結果）を主記憶部１８に転送する。このように、ストア命令は、ディレイ発生部１４で（T_load+T_ALU）分の遅延を受けた後にストアユニット１７に供給されるので、ストア命令の実行時には、ＡＬＵ１５での演算結果がすでに汎用レジスタ１９に保持されている。
【００４４】
図３に、命令メモリ１１内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を模式的に示す。命令メモリ１１には、第１乃至第４の命令列が順番に格納されている。第１および第２の命令列はいずれも、「load」、「ALU operation」、「store」の３つの小命令からなる。第３の命令列は、「load」、「ALU operation」、「nop」の３つの小命令からなる。第４の命令列は、「nop」、「ALU operation」、「store」の３つの小命令からなる。この例では、第１の命令列、第２の命令列、第３の命令列、第４の命令列の順番で、命令メモリ１１から命令列が読み出される。なお、図３において、命令発行タイミングは、各実行ユニットに小命令が供給されるタイミングを示し、その供給タイミングを示す指標として時間ｔ＝０〜８が示されている。時間ｔ０〜ｔ８のぞれぞれの間隔は１サイクルに相当する。
【００４５】
プログラムカウンタ１０によって指定されるアドレスに従って命令メモリ１１から第１番目〜第４の命令列が順番に読み出される。命令メモリ１１から読み出された命令列は、命令ディスパッチャ１２によって小命令に分割されてそれぞれ該当する実行ユニットに向けて出力される。
【００４６】
第１の命令列の小命令「load」、第２の命令列の小命令「load」、第３の命令列の小命令「load」、第４の命令列の小命令「nop」は、それぞれ時間ｔ０、ｔ１、ｔ２、ｔ３にロードユニット１６に供給される。ロードユニット１６では、各時間に供給された小命令に従って必要な処理が実行される。
【００４７】
第１の命令列の小命令「ALU operation」、第２の命令列の小命令「ALU operation」、第３の命令列の小命令「ALU operation」、第４番目の命令列の小命令「ALU operation」は、それぞれ時間ｔ１、ｔ２、ｔ３、ｔ４にＡＬＵ１５に供給される。第１の命令列の小命令「ALU operation」は、該小命令と同じ命令列にあるロードユニット１６向けの小命令（すなわち、第１の命令列の小命令「load」）がロードユニット１６に供給されてから、（T_load）サイクル遅れて、ＡＬＵ１５に供給される。同様に、第２の命令列の小命令「ALU operation」、第３の命令列の小命令「ALU operation」、第４番目の命令列の小命令「ALU operation」についても、該小命令と同じ命令列にあるロードユニット１６向けの小命令がロードユニット１６に供給されてから、（T_load）サイクル遅れて、ＡＬＵ１５に供給される。
【００４８】
第１番目の命令列の「store」命令、第２番目の命令列の「store」命令、第３番目の命令列の「nop」命令、第４番目の命令列の「store」命令は、それぞれ時間ｔ５、ｔ６、ｔ７、ｔ８にストアユニット１７に供給される。第１番目の命令列の「store」命令は、該小命令と同じ命令列にあるＡＬＵ１５向けの小命令（すなわち、第１の命令列の小命令「ALU operation」）がＡＬＵ１５に供給されてから、（T_load）サイクル遅れて、ストアユニット１７に供給される。同様に、第２番目の命令列の「store」命令、第３番目の命令列の「nop」命令、第４番目の命令列の「store」命令についても、該小命令と同じ命令列にあるＡＬＵ１５向けの小命令がＡＬＵ１５に供給されてから、（T_load）サイクル遅れて、ストアユニット１７に供給される。
【００４９】
以上の本実施形態のＶＬＩＷ型プロセッサによれば、ディレイ発生部１３、１４を設けたことにより、同一の命令列内に配置されたロード命令、ＡＬＵ命令およびストア命令の各小命令を、適切な発行タイミング（ロード命令−ＡＬＵ命令間やＡＬＵ命令−ストア命令間にデータ依存関係を保障することのできるタイミング）で、各実行ユニット（ＡＬＵ１５、ロードユニット１６、ストアユニット１７）に供給することができる。したがって、ロード命令−ＡＬＵ命令間やＡＬＵ命令−ストア命令間にデータ依存関係が存在する場合であっても、ロード命令、ＡＬＵ命令およびストア命令の各小命令を同一の命令列内に配置することができ、その結果、ｎｏｐ命令数を削減することができる。
【００５０】
具体的に説明すると、従来のプロセッサによる図１４に示した命令シーケンスは、本実施形態のＶＬＩＷ型プロセッサでは、図４に示すような命令シーケンスになる。この命令シーケンスでは、図１４の命令シーケンスにおける第４および第５の命令列が、１つの命令列「nop, mul R3 R4 R5, store R5 addr0」で表される。この命令列「nop, mul R3 R4 R5, store R5 addr0」において、「mul R3 R4 R5」および「store R5 addr0」はそれぞれＡＬＵ命令およびストア命令であり、これら小命令の間には、ＡＬＵ命令−ストア命令間にデータ依存関係が存在する。この場合、第４の命令列の最後の小命令「nop」、第５の命令列の最初の小命令「nop」およびその次の小命令「nop」は削減されている。このように、nop命令数を削減することができるので、その分、命令メモリにおけるメモリ領域を有効に使用することができる。
【００５１】
また、本実施形態のＶＬＩＷ型プロセッサでは、命令メモリに格納される命令列は、ロードユニットに対する小命令、ＡＬＵに対する小命令、ストアユニットに対する小命令の３つの小命令からなり、各小命令の配置順序は予め決められている（本実施形態では、ロードユニット、ＡＬＵ、ストアユニットの順で配置されている）。このため、命令ディスパッチャは、命令メモリから読み出された命令列を所定の順序で振り分けることで、各小命令を該当する実行ユニットに供給することができる。このように、命令列を構成する小命令の配列順序は予め決められており、命令ディスパッチャは、その配列順序に従って小命令を実行ユニットに向けて送出するようになっているので、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加する必要がない。よって、従来に比べて、構成が簡単で、低コストのプロセッサを提供することができる。
【００５２】
また、ディレイ発生手段（ディレイ発生部１３、１４）は、命令ディスパッチャから送出された小命令のみを入力としており、レジスタオペランドで指定されたレジスタの値が入力されることはない。よって、小命令およびレジスタオペランドで指定されたレジスタの値が入力されるパイプレジスタに比べて、より少ないハードウェアリソースで構成することができる。
【００５３】
また、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される構成であるので、特許文献１に記載の、並列配置順に初段から１段ずつシフトした対角線上の各段で、選択指定した処理を１つずつ対角線方向にパイプライン実行する構成のように、実行ユニットの配置が制限されることはない。よって、回路設計における自由度も高い。
【００５４】
なお、本実施形態では、２つディレイ発生部を設ける必要があるが、そのようなディレイ発生部は、図２に示したような構成のシンプルなディレイレジスタにより構成されるので、命令発行制御の構成が複雑になることはない。
【００５５】
（第２の実施形態）
図５は、本発明の第２の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。図５を参照すると、ＶＬＩＷ型プロセッサの主要部は、プログラムカウンタ７０、命令メモリ７１、命令ディスパッチャ７２、ディレイ発生部７３、７４、専用演算器７５、ロードユニット７６、ストアユニット７７、主記憶部７８、および汎用レジスタ７９からなる。
【００５６】
本実施形態のＶＬＩＷ型プロセッサは、図１に示した第１の実施形態のＶＬＩＷ型プロセッサのＡＬＵ１５に代えて専用演算器７５を設けたものであり、専用演算器７５以外の構成は、第１の実施形態で説明したものと基本的に同じである。
【００５７】
命令ディスパッチャ７２は、命令メモリ７１から出力された命令列を小命令に分割して専用演算器７５、ロードユニット７６およびストアユニット７７の各実行ユニットに供給する。ロードユニット７６への小命令は、命令ディスパッチャ７２からロードユニット７６に直接供給される。専用演算器７５への小命令は、命令ディスパッチャ７２からディレイ発生部７３を介して専用演算器７５に供給される。ストアユニット７７への小命令は、命令ディスパッチャ７２からディレイ発生部７４を介してストアユニット７７に供給される。
【００５８】
専用演算器７５は、３つのＡＬＵ７５ａ〜７５ｃと１つのアキュムレータ７５ｄからなる。ディレイ発生部７３から専用演算器７５へ向けて出力された小命令（以下、OPE命令と記す）はＡＬＵ７５ａ、７５ｃに供給される。ＡＬＵ７５ａは、供給されたOPE命令に従って、汎用レジスタ７９からの入力データを用いて演算を行い、その演算結果をＡＬＵ７５ｃに出力する。ＡＬＵ７５ｂも、汎用レジスタ７９からの入力データを用いて演算を行い、その演算結果をＡＬＵ７５ｃに出力する。ＡＬＵ７５ｃは、供給されたOPE命令に従って、汎用レジスタ７９からの入力データおよびＡＬＵ７５ａ、７５ｂからの演算結果を用いて演算を行い、その演算結果を汎用レジスタ７９に出力する。この専用演算器７５における一連の演算処理に要するサイクル数は、汎用レジスタ７９からのデータ入力で１サイクル、ＡＬＵ７５ａ、７５ｂの演算処理で１サイクル、ＡＬＵ７５ｃの演算処理で１サイクル、汎用レジスタ７９へのデータ出力で１サイクルの合計４サイクルである。
【００５９】
ロードユニット７６は、小命令としてロード命令が供給されると、該ロード命令に従って、主記憶部７８から汎用レジスタ７９へデータを転送する。このロードユニット７６におけるロード処理には、１サイクルを要する。ストアユニット７７は、小命令としてストア命令が供給されると、該ストア命令に従って、主記憶部７８へ汎用レジスタ７９のデータを転送する。このストアユニット７７におけるストア処理には、１サイクルを要する。
【００６０】
ディレイ発生部７３、７４は、いずれも図２に示したディレイレジスタよりなる。ディレイ発生部７３におけるディレイレジスタの深さＮは１、ディレイ発生部７４におけるディレイレジスタの深さＮは５である。これらディレイ発生部７３、７４により、専用演算器７５およびストアユニット７７に供給される小命令を遅延させることで、同一の命令列内に配置された各小命令を、適切な発行タイミング（ロード命令−OPE命令間やOPE命令−ストア命令間のデータ依存関係を保障することのできるタイミング）で、各実行ユニット（専用演算器７５、ロードユニット７６、ストアユニット７７）に供給することができる。
【００６１】
次に、本実施形態のＶＬＩＷ型プロセッサの命令発行動作について、図５を参照して具体的に説明する。以下に説明する動作では、１つの命令列についての発行処理から演算処理完了までを注目している。
【００６２】
命令メモリ７１からプログラムカウンタ７０によって指定されたアドレスにある命令列が命令ディスパッチャ７２に出力される。命令ディスパッチャ７２は、命令メモリ７１からの命令列を小命令に分割し、分割した小命令を専用演算器７５、ロードユニット７６およびストアユニット７７の各実行ユニットに向けて出力する。
【００６３】
ロードユニット７６への小命令（Load命令）は、命令ディスパッチャ７２からロードユニット７６に直接供給される。ロードユニット７６では、発行されたLoad命令によりロード処理が行われる。専用演算器７５への小命令（OPE命令）は、命令ディスパッチャ７２からディレイ発生部７３を介して専用演算器７５に供給される。専用演算器７５では、発行されたOPE命令により演算処理が行われる。ストアユニット７７への小命令（store命令）は、命令ディスパッチャ７２からディレイ発生部７４を介してストアユニット７７に供給される。ストアユニット７７では、発行されたstore命令によりストア処理が行われる。
【００６４】
上記の場合、OPE命令は、ディレイ発生部７３により１サイクル遅れて専用演算器７５に発行され、store命令は、ディレイ発生部７４により５サイクル遅れてストアユニット７７に発行されることになるので、Load命令−OPE命令間のデータ依存関係およびOPE命令−store命令間のデータ依存関係を保障することができる。
【００６５】
図６に、命令メモリ７１内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を模式的に示す。命令メモリ７１には、第１乃至第４の命令列が順番に格納されている。第１および第２の命令列はいずれも、「load」、「OPE operation」、「store」の３つの小命令からなる。第３の命令列は、「load」、「OPE operation」、「nop」の３つの小命令からなる。第４の命令列は、「nop」、「OPE operation」、「store」の３つの小命令からなる。この例では、第１の命令列、第２の命令列、第３の命令列、第４の命令列の順番で、命令メモリ１１から命令列が読み出される。なお、図６において、命令発行タイミングは、各実行ユニットに小命令が供給されるタイミングを示し、その供給タイミングの指標として時間ｔ＝０〜８が示されている。時間ｔ０〜ｔ８のぞれぞれの間隔は１サイクルに相当する。
【００６６】
プログラムカウンタ７０によって指定されるアドレスに従って命令メモリ７１から第１乃至第４の命令列が順番に読み出される。命令メモリ７１から読み出された命令列は、命令ディスパッチャ７２によって小命令に分割されてそれぞれ該当する実行ユニットに向けて出力される。
【００６７】
第１の命令列の小命令「load」、第２の命令列の小命令「load」、第３の命令列の小命令「load」、第４の命令列の小命令「nop」は、それぞれ時間ｔ０、ｔ１、ｔ２、ｔ３にロードユニット７６に供給される。ロードユニット７６では、各時間に供給された小命令が実行される。
【００６８】
第１の命令列の小命令「OPE operation」、第２の命令列の小命令「OPE operation」、第３の命令列の小命令「OPE operation」、第４の命令列の小命令「OPE operation」は、それぞれ時間ｔ１、ｔ２、ｔ３、ｔ４に専用演算器７５に供給される。専用演算器７５では、各時間に供給された小命令が実行される。この場合の専用演算器７５における小命令の実行は、ロードユニット７６における小命令の実行に対して、１サイクル遅れて行われることになる。
【００６９】
第１の命令列の小命令「store」、第２の命令列の小命令「store」、第３の命令列の小命令「nop」、第４の命令列の小命令「store」は、それぞれ時間ｔ５、ｔ６、ｔ７、ｔ８にストアユニット７７に供給される。ストアユニット７７では、各時間に供給された小命令が実行される。この場合のストアユニット７７における小命令の実行は、ロードユニット７６における小命令の実行に対して、５サイクル遅れて行われることになる。
【００７０】
以上の本実施形態のＶＬＩＷ型プロセッサにおいても、ディレイ発生部７３、７４を設けたことにより、同一の命令列内に配置されたロード命令、OPE命令およびストア命令の各小命令を、適切な発行タイミング（ロード命令−OPE命令間やOPE命令−ストア命令間にデータ依存関係を保障することのできるタイミング）で、各実行ユニット（専用演算器７５、ロードユニット７６、ストアユニット７７）に供給することができる。したがって、ロード命令−OPE命令間やOPE命令−ストア命令間にデータ依存関係が存在する場合であっても、ロード命令、OPE命令およびストア命令の各小命令を同一の命令列内に配置することができ、その結果、nop命令数を削減することができる。この他、第１の実施形態と同様な効果も奏する。
【００７１】
本実施形態において、専用演算器７５を、浮動小数点演算ユニットなどの他の専用演算器で置き換えた形態としてもよい。
【００７２】
（第３の実施形態）
図７は、本発明の第３の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。図７を参照すると、ＶＬＩＷ型プロセッサの主要部は、プログラムカウンタ９０、命令メモリ９１、命令ディスパッチャ９２、ディレイ発生部９３、９４、ＡＬＵ９５ａ、９５ｂ、ロードユニット９６ａ、９６ｂ、ストアユニット９７ａ、９７ｂ、主記憶部９８、および汎用レジスタ９９からなる。
【００７３】
本実施形態のＶＬＩＷ型プロセッサは、図１に示した第１の実施形態のＶＬＩＷ型プロセッサにおいて、ＡＬＵ、ロードユニット、ストアユニットの各実行ユニットをそれぞれ複数設けたものであり、これ以外の構成は、第１の実施形態で説明したものと基本的に同じである。図７の構成では、ＡＬＵ、ロードユニット、ストアユニットの各実行ユニットはそれぞれ２つ設けられているが、３つ以上であってもよい。
【００７４】
命令ディスパッチャ９２は、命令メモリ９１から出力された命令列を小命令に分割してＡＬＵ９５ａ、９５ｂ、ロードユニット９６ａ、９６ｂ、ストアユニット９７ａ、９７ｂの各実行ユニットに供給する。
【００７５】
ロードユニット９６ａへの小命令は、命令ディスパッチャ７２からロードユニット９６ａに直接供給され、ロードユニット９６ｂへの小命令は、命令ディスパッチャ７２からロードユニット９６ｂに直接供給される。ロードユニット９６ａ、９６ｂは、小命令としてロード命令が供給されると、該ロード命令に従って、主記憶部９８から汎用レジスタ７９へデータを転送する。
【００７６】
ＡＬＵ９５ａへの小命令は、命令ディスパッチャ９２からディレイ発生部９３を介してＡＬＵ９５ａに供給され、ＡＬＵ９５ｂへの小命令は、命令ディスパッチャ９２からディレイ発生部９３を介してＡＬＵ９５ｂに供給される。ＡＬＵ９５ａ、９５ｂは、小命令としてＡＬＵ命令が供給されると、該ＡＬＵ命令に従って、汎用レジスタ７９からの入力データを用いて演算処理を行う。
【００７７】
ストアユニット９７ａへの小命令は、命令ディスパッチャ９２からディレイ発生部９４を介してストアユニット９７ａに供給され、ストアユニット９７ｂへの小命令は、命令ディスパッチャ９２からディレイ発生部９４を介してストアユニット９７ｂに供給される。
ストアユニット９７ａ、９７ｂは、小命令としてストア命令が供給されると、該ストア命令に従って、主記憶部７８へ汎用レジスタ７９のデータを転送する。
【００７８】
ディレイ発生部９３、９４は、いずれも図２に示したディレイレジスタよりなる。ディレイ発生部９３のディレイレジスタの深さＮは、T_load（ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するＡＬＵ命令が発行できるようになるまでの時間）に等しい。ディレイ発生部９４のディレイレジスタの深さＮは、T_loadとT_ALU（ＡＬＵ命令がＡＬＵに発行されてからそのＡＬＵでの演算結果を対象としたストア命令が発行できるようになるまでの時間）との和に等しい。これらディレイ発生部９３、９４により、ＡＬＵ９５ａ、９５ｂおよびストアユニット９７ａ、９７ｂに供給される小命令を遅延させることで、同一の命令列内に配置された各小命令を、適切な発行タイミング（ロード命令−ＡＬＵ命令間やＡＬＵ命令−ストア命令間のデータ依存関係を保障することのできるタイミング）で、各実行ユニット（ＡＬＵ９５ａ、９５ｂ、ロードユニット９６ａ、９６ｂ、ストアユニット９７ａ、９７ｂ）に供給することができる。
【００７９】
（第４の実施形態）
本発明の第４の実施形態であるＶＬＩＷ型プロセッサの構成について説明する。本実施形態のＶＬＩＷ型プロセッサは、第１の実施形態のＶＬＩＷ型プロセッサの構成と基本的に同じであるが、ＡＬＵ命令がＡＬＵに発行されてからそのＡＬＵでの演算結果を対象としたストア命令が発行できるようになるまでの時間（T1_ALU）がＡＬＵ命令の種類によって異なるために、ストアユニットと接続されるディレイ発生部の構成が第１の実施形態のＶＬＩＷ型プロセッサと異なる。なお、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するＡＬＵ命令が発行できるようになるまでの時間（T1_load）は、ＡＵＬ命令によらず一定である。
【００８０】
図８に、ストアユニットと接続されるディレイ発生部の構成を示す。図８を参照すると、ディレイ発生部は、ディレイレジスタ１００、ディレイコントローラ１０１およびセレクタ１０３からなる。
【００８１】
ディレイレジスタ１００は、命令ディスパッチャからの小命令を入力とし、入力された小命令に対して、設定された遅延量に基づく遅延を与える。セレクタ１０３は、ディレイコントローラ１０１からの制御信号の供給タイミングで、ディレイレジスタ１００から遅延を与えられた小命令を読み出す。セレクタ１０３で読み出した小命令は、ストアユニットに供給される。
【００８２】
ディレイコントローラ１０１は、ＡＬＵ命令の種類によるT1_ALUの違いに応じて、ディレイレジスタ１００における小命令に与える遅延量を決定し、その決定した遅延量で小命令を読み出すための制御信号をセレクタ１０３に供給する。このディレイコントローラ１０１は、T1_ALUの値を検出するＡＬＵサイクル検出部と、ＡＬＵサイクル検出部で検出されたT1_ALU値と現在の遅延量(T_cur)を比較する比較部と、入力されたストア命令の前のサイクルにおける小命令が空きかどうか判断する空き命令判別部と、比較部における比較結果および空き命令判別部における判断結果に基づいて、入力された小命令に対する遅延量（T_next）を決定する遅延量決定部とを有する。ディレイ発生部におけるディレイレジスタ１０１の深さＮは、T1_ALUの最大値とT1_loadの和に等しい。
【００８３】
図９に、ディレイコントローラ１０１による遅延量決定処理の一手順を示す。図９を参照すると、まず、ＡＬＵサイクル検出部が、命令ディスパッチャから供給されるＡＬＵ命令に基づいてT1_ALUの値を検出する（ステップステップ１１０）。T1_ALUの値は、ＡＬＵのパイプラインの段数などのプロセッサのアーキテクチャやＡＬＵの構成によって、各ＡＬＵ命令で、あらかじめ決まった値として設定されている。よって、ＡＬＵ命令に応じて、例えばテーブルを引く形で、T1_ALUの値を得ることができる。例えば、５段のパイプラインを持つプロセッサ（IF、Decode、EXE、MEM、WB）においては、T1_ALUの値は、IFからWBまでに必要なサイクル数、すなわち５サイクルとなる。もし、このプロセッサで、乗算命令がＡＬＵ内、つまりEXEのステージで２サイクル必要となる場合は、T1_ALUの値は、６サイクルとなる。このようなT1_ALUの値とＡＬＵ命令の対応関係を有するテーブルを使用することで、ＡＬＵサイクル検出部で、入力されたＡＬＵ命令に対するT1_ALUの値を検出する。
【００８４】
ＡＬＵサイクル検出部でT1_ALUの値が検出されると、比較部が、その検出されたT1_ALUの値と予め与えられているT1_loadの値との和（T1_ALU＋T1_load）と、ディレイレジスタ１０１に対して現在設定している遅延量T_curとを比較し、現在の遅延量T_curの値が（T1_ALU＋T1_load）値より大きいか否かを判断する（ステップ１１１）。ここで、現在の遅延量T_curは、同じ命令列に存在したLoad命令が発行されてからStore命令が発行されるまでのサイクル数で与えられる。具体的には、現在の遅延量T_curは、１つ前のサイクルで入力されたストア命令に対して設定した遅延量であり、各ユニットのディレイ発生部のディレイレジスタで使用した段数（遅延）に対応する。例えば、ＡＬＵに接続する遅延発生部のディレイレジスタが２段目（段数固定）から命令を発行し、ストアユニットに接続する遅延発生部のディレイレジスタが５段目（段数可変）から命令を発行している場合は、現在の遅延量T_curは７（＝2+5）段（サイクル）となる。
【００８５】
ステップ１１１の判断で「ｎｏ」となった場合は、遅延量決定部は、入力された小命令に対する遅延量（T_next）を（T1_ALU＋T1_load）の値とする（ステップ１１２）。この場合は、ディレイレジスタに対して（T1_ALU＋T1_load）が設定され、ディレイレジスタはその設定値（T1_ALU＋T1_load）に相当する遅延を、入力されたストア命令に対して与える。
【００８６】
ステップ１１１の判断が「yes」となった場合は、次いで、空き命令判別部が、入力されたストア命令の前のサイクルにおける小命令が空き（nop命令）かどうか判断する（ステップ１１３）。ここで、ストア命令の前のサイクルとは、ストアユニットに発行されるストア命令のうちのターゲットとなっている命令の前のストア命令のサイクルを意味する。つまり、ディレイ発生部に入力されたストア命令の前のサイクルが空きかどうかとは、現在、ディレイ発生部に入力されたストア命令の前のサイクルでストア命令がディレイ発生部に入力されたかどうか、ということを意味する。
【００８７】
図１０に、発行される命令列の一例を示す。図１０に示す例において、時間T２で発行された命令列の小命令「store」が、ディレイ発生部に入力されたターゲットのストア命令である場合、このターゲットのストア命令の前のサイクルは、時間T1で発行された命令列を意味する。この場合は、時間T1で発行された命令列において、小命令「store」と小命令「nop」のいずれが含まれているかを判断する。小命令「nop」が含まれている場合は、ディレイ発生部に入力されたストア命令の前のサイクルは空きと判断されることになる。なお、前のサイクルの命令は、ディレイ発生部内のディレイレジスタに蓄えられているため、その蓄積データを参照することで、ディレイ発生部に入力されたストア命令の前のサイクルが空き（nop命令）かどうかを判定することができる。
【００８８】
ステップ１１３の判断が「no」となった場合は、遅延量決定部は、遅延量（T_next）を現在の遅延量T_curとする（ステップ１１４）。この場合は、ディレイレジスタに対して現在の遅延量T_curが設定され、ディレイレジスタはその現在の遅延量T_curに相当する遅延を、入力されたストア命令に対して与える。
【００８９】
ステップ１１３の判断が「yes」となった場合は、遅延量決定部は、遅延量（T_next）を遅延量T_curから１サイクルに相当する遅延量を差し引いた値（T_cur−１）とする（ステップ１１５）。この場合は、ディレイレジスタに対して遅延量（T_cur−１）が設定され、ディレイレジスタはその遅延量（T_cur−１）に相当する遅延を、入力されたストア命令に対して与える。
【００９０】
上述した遅延量決定処理によれば、ＡＬＵ命令の種類によるT1_ALUの違いに応じて、ディレイレジスタ１００における小命令に与える最適な遅延量が決定されるので、ＡＬＵの演算を行うサイクル数がＡＬＵ命令によって異なる構成おいて、ＡＬＵ命令−ストア命令間のデータ依存関係を保障しつつ、nop命令数を削減した命令列を用いて演算処理を行うことができる。
【００９１】
加えて、以下のような効果も得られる。
【００９２】
例えば、ＡＬＵにおいて、MUL（乗算命令）のEXEステージでの実行に２サイクル必要な場合で、乗算命令の実行後に、他のＡＬＵ命令（EXEステージでの実行に１サイクル必要な命令）を実行する構成において、乗算命令の後に、他のＡＬＵ命令が存在する場合を考える。この場合は、T1_ALU+T1_loadの値は、現在の遅延量T_curの値より小さくなる。例えば、現在の遅延量T_curの値が７サイクルであり、T1_ALUの値が５サイクル、T1_loadの値が１サイクルである場合、（T1_ALU+T1_load）の値は、現在の遅延量T_curの値より小さくなる。このような場合は、ステップ１１１の判断が「yes」となり、同じ命令列のストア命令の前のストア命令の状況をみて、ディレイレジスタの遅延量が制御されることになる。ターゲットとなっているストア命令（乗算命令）の前にあるストア命令が空きサイクル（nop命令）だった場合、そのストア命令は発行せずに、一段後のターゲットとなっているストア命令を出力するように、ディレイレジスタが制御される（ステップ１１５の処理）。これにより、ストア命令の発行タイミングを早くすることができる。
【００９３】
図１１に、ディレイレジスタの制御状態を模式的に示す。時間T0において、ディレイレジスタには、上から２段目、３段目、４段目、５段目にそれぞれ、ストア命令＃２、ストア命令＃１、ｎｏｐ命令、ストア命令＃０が格納されている。時間T1では、ストア命令＃２、ストア命令＃１、ｎｏｐ命令、ストア命令＃０の各格納位置が全体で１段ずつシフトされ、ストア命令＃０が発行される。時間T2では、ストア命令＃２、ストア命令＃３、ｎｏｐ命令の各格納位置が全体で１段ずつシフトされる。この時間T2において、ステップ１１１の判断は「yes」となり、ステップ１１３の判断は「yes」となるので、ｎｏｐ命令の次のストア命令＃１が発行される。このようにｎｏｐ命令を発行せずに、次命令であるストア命令＃１を発行することで、ストア命令の発行タイミングを早くすることができる。
【００９４】
なお、本実施形態では、第１乃至第３の実施形態のものに比べて、ディレイレジスタの制御が必要な分、構成は複雑になると考えられる。しかし、ストア命令やＡＬＵ命令のオペコードは通常５bit程度のものであるため、パイプラインの段数を５段程度のアーキテクチャを想定した場合において、4-5bit程度の比較やディレイレジスタ内のデータがnopか空きかを判定することが可能なユニットは、小規模なユニットとして構成することができる。
【００９５】
（第５の実施形態）
本発明の第５の実施形態であるＶＬＩＷ型プロセッサの構成について説明する。本実施形態のＶＬＩＷ型プロセッサは、第１の実施形態のＶＬＩＷ型プロセッサの構成と基本的に同じであるが、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するＡＬＵ命令が発行できるようになるまでの時間（T1_load）がロード命令の種類によって異なるために、ＡＬＵと接続されるディレイ発生部の構成が第１の実施形態のＶＬＩＷ型プロセッサと異なる。なお、ＡＬＵ命令がＡＬＵに発行されてからそのＡＬＵでの演算結果を対象としたストア命令が発行できるようになるまでの時間（T1_ALU）は一定とする。
【００９６】
ＡＬＵと接続されるディレイ発生部は、図８に示したディレイ発生部の構成と基本的に同じで、ディレイレジスタ１００、ディレイコントローラ１０１、およびセレクタ１０２からなる。ただし、ディレイレジスタ１００の命令ディスパッチャからの入力がＡＬＵ命令とされ、ディレイコントローラ１０１への「ALU命令」入力がロード命令入力とされる。また、本実施形態では、ディレイコントローラ１０１は、ロードサイクル検出部、比較部、空き命令判別部および遅延量決定部から構成される。
【００９７】
図１２に、ディレイコントローラ１０１による遅延量決定処理の一手順を示す。図１２を参照すると、まず、ロードサイクル検出部が、命令ディスパッチャから供給されるロードに基づいてT1_Loadの値を検出する（ステップステップ１２０）。T1_loadの値は、各ロード命令で、あらかじめ決まった値として設定されている。よって、ロード命令に応じて、例えばテーブルを引く形で、T1_Loadの値を得ることができる。
【００９８】
ロードサイクル検出部でT1_Loadの値が検出されると、比較部が、その検出されたT1_Loadの値と、ディレイレジスタ１０１に対して現在設定している遅延量T_curとを比較し、現在の遅延量T_curの値がT1_Loadの値より大きいか否かを判断する（ステップ１２１）。ここで、現在の遅延量T_curは、同じ命令列に存在したLoad命令が発行されてからＡＬＵ命令が発行されるまでのサイクル数で与えられる。具体的には、現在の遅延量T_curは、１つ前のサイクルで入力されたＡＬＵ命令に対して設定した遅延量であり、ＡＬＵに接続するディレイ発生部のディレイレジスタ１００で使用した段数（遅延）に対応する。
【００９９】
ステップ１２１の判断で「ｎｏ」となった場合は、遅延量決定部は、入力された小命令に対する遅延量（T_next）をT1_loadの値とする（ステップ１２２）。この場合は、ディレイレジスタに対してT1_loadの値が設定され、ディレイレジスタはその設定値（T1_load）に相当する遅延を、入力されたＡＬＵ命令に対して与える。
【０１００】
ステップ１２１の判断が「yes」となった場合は、次いで、空き命令判別部が、入力されたＡＬＵ命令の前のサイクルにおける小命令が空き（nop命令）かどうか判断する（ステップ１２３）。ここで、ＡＬＵ命令の前のサイクルとは、ＡＬＵユニットに発行されるＡＬＵ命令のうちのターゲットとなっている命令の前のＡＬＵ命令のサイクルを意味する。つまり、ディレイ発生部に入力されたＡＬＵ命令の前のサイクルが空きかどうかとは、現在、ディレイ発生部に入力されたＡＬＵ命令の前のサイクルでＡＬＵ命令がディレイ発生部に入力されたかどうか、ということを意味する。
【０１０１】
ステップ１２３の判断が「no」となった場合は、遅延量決定部は、遅延量（T_next）を現在の遅延量T_curとする（ステップ１２４）。この場合は、ディレイレジスタに対して現在の遅延量T_curが設定され、ディレイレジスタはその現在の遅延量T_curに相当する遅延を、入力されたＡＬＵ命令に対して与える。
【０１０２】
ステップ１２３の判断が「yes」となった場合は、遅延量決定部は、遅延量（T_next）を遅延量T_curから１サイクルに相当する遅延量を差し引いた値（T_cur−１）とする（ステップ１２５）。この場合は、ディレイレジスタに対して遅延量（T_cur−１）が設定され、ディレイレジスタはその遅延量（T_cur−１）に相当する遅延を、入力されたストア命令に対して与える。
【０１０３】
（他の実施形態）
第４および第５の実施形態を組み合わせることで、T1_loadの値およびT1_ALUの値がともに命令によって変化する構成に適用することができる。ただし、この場合は、第４の構成のディレイ発生部において、ディレイコントローラは、命令ディスパッチャから供給されるロード命令およびＡＬＵ命令からT1_loadおよびT1_ALUを検出することになる。これ以外の動作は、第４および第５の実施形態の場合と同様に行われる。
【産業上の利用可能性】
【０１０４】
本発明によれば、多量のストリームデータに対してデータに応じた処理を行う、データ通信処理装置などのデジタル信号処理装置といった用途に適用できる。
【図面の簡単な説明】
【０１０５】
【図１】本発明の第１の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。
【図２】図１に示すディレイ発生部の構成を示す模式図である。
【図３】図１に示すＶＬＩＷ型プロセッサにおける、命令メモリ内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を説明するための模式図である。
【図４】図１に示すＶＬＩＷ型プロセッサで使用される命令シーケンスを説明するための図である。
【図５】本発明の第２の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。
【図６】図５に示すＶＬＩＷ型プロセッサにおける、命令メモリ内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を説明するための模式図である。
【図７】本発明の第３の実施形態であるＶＬＩＷ型プロセッサの概略構成を示すブロック図である。
【図８】本発明の第４の実施形態であるＶＬＩＷ型プロセッサを構成するディレイ発生部の構成を示すブロック図である。
【図９】図８に示すディレイコントローラによる遅延量決定処理の一手順を示すフローチャートである。
【図１０】本発明の第４の実施形態であるＶＬＩＷ型プロセッサにおいて発行される命令列の一例を示す模式図である。
【図１１】本発明の第４の実施形態であるＶＬＩＷ型プロセッサにおけるディレイレジスタの制御状態を示す模式図である。
【図１２】本発明の第５の実施形態であるＶＬＩＷ型プロセッサのディレイコントローラによる遅延量決定処理の一手順を示すフローチャートである。
【図１３】ＶＬＩＷ型プロセッサの構成を示すブロック図である。
【図１４】図１３に示すＶＬＩＷ型プロセッサで使用される命令シーケンスを説明するための図である。
【図１５】ｎｏｐ命令数削減方式の一例を示す模式図である。
【図１６】ｎｏｐ命令数削減方式の他の例を示す模式図である。
【符号の説明】
【０１０６】
１０  プログラムカウンタ
１１  命令メモリ
１２  命令ディスパッチャ
１３、１４  ディレイ発生部
１５  ＡＬＵ
１６  ロードユニット
１７  ストアユニット
１８  主記憶部
１９  汎用レジスタ
【図１】
2008015589.tif 000003
【図２】
2008015589.tif 000004
【図３】
2008015589.tif 000005
【図４】
2008015589.tif 000006
【図５】
2008015589.tif 000007
【図６】
2008015589.tif 000008
【図７】
2008015589.tif 000009
【図８】
2008015589.tif 000010
【図９】
2008015589.tif 000011
【図１０】
2008015589.tif 000012
【図１１】
2008015589.tif 000013
【図１２】
2008015589.tif 000014
【図１３】
2008015589.tif 000015
【図１４】
2008015589.tif 000016
【図１５】
2008015589.tif 000017
【図１６】
2008015589.tif 000018