(57)【要約】パケットのセットのハードウェアループに関する情報をコード化するための方法と装置が提供される。前記パケットの各々（４００）は複数命令を含む。前記情報はパケットの前記セットの少なくとも１つの命令（３００）の１つ以上のビットにコード化される。前記情報は、パケットがループのエンドパケットあるか否かを示すかもしれない。２つのハードウェアループに関する情報がコード化されるかもしれない。すなわち第１のループに関する情報は各パケットの第１の予め定められた位置における命令内にコード化され、第２のループに関する情報は各パケットの第２の予め定められた位置における命令内にコード化される。エンド命令情報は、コード化されたループ情報のために予約された同じビット位置にコード化されたループ情報を有しない命令内にコード化されるかもしれない。このエンド命令情報は命令がパケットの最後の命令であるかどうか、およびパケットの長さを示す。【選択図】      図８
2009536769.tif 000002
【特許請求の範囲】
【請求項１】
格納された命令を有する計算機可読媒体を有する計算機プログラム製品であって、前記命令は、実行されると、特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも１つのハードウェアループに関する情報をコード化し、前記パケットの各々が１つ以上の命令を含んでおり、前記命令の各々がビットのセットを含んでおり、
ハードウェアループ情報をパケットの前記セット内の少なくとも１つの指定された命令の１つ以上の予約されたビット位置における１つ以上のビットにコード化するための複数セットの命令を含み、前記少なくとも１つの指定された命令がハードウェアループを特定するために用いられない命令を含む、計算機プログラム製品。
【請求項２】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも１つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項１に記載の計算機プログラム製品。
【請求項３】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項２に記載の計算機プログラム製品。
【請求項４】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項１に記載の計算機プログラム製品。
【請求項５】
各命令が３２ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第１５および第１６ビットにコード化され、かつ
指定された命令の第１から第１４ビットおよび第１７から第３２ビットが、指定された命令を特定する、請求項４に記載の計算機プログラム製品。
【請求項６】
パケットのセットが、超長命令語（ＶＬＩＷ）パケットのセットであり、かつ
ハードウェアループ情報が、ＶＬＩＷパケットの前記セットの各ＶＬＩＷパケットの同じ予め定められた位置における命令内にコード化される、請求項１に記載の計算機プログラム製品。
【請求項７】
少なくとも１つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第１のセットを含む第１のループと、特定の繰り返し回数実行されるべきパケットの第２のセットを含む第２のループとを含み、かつ
第１のループに関するハードウェアループ情報が、パケットの前記第１のセットの各パケットの第１の予め定められた位置における命令内にコード化され、かつ
第２のループに関するハードウェアループ情報が、パケットの前記第２のセットの各パケットの第２の予め定められた位置における命令内にコード化される、請求項１に記載の計算機プログラム製品。
【請求項８】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも１つの命令内にコード化するための命令のセットであって、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、命令のセットをさらに含む、請求項１に記載の計算機プログラム製品。
【請求項９】
特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも１つのハードウェアループに関する情報をコード化するための方法であって、前記パケットの各々が１つ以上の命令を含んでおり、
前記命令の各々がビットのセットを含んでおり、ハードウェアループ情報をパケットの前記セット内の少なくとも１つの指定された命令の１つ以上の予約されたビット位置における１つ以上のビットにコード化するための複数セットの命令を含み、前記少なくとも１つの指定された命令がハードウェアループを特定するために用いられない命令を含む方法。
【請求項１０】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも１つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項９に記載の方法。
【請求項１１】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、  請求項１０に記載の方法。
【請求項１２】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項９に記載の方法。
【請求項１３】
各命令が３２ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第１５および第１６ビットにコード化され、かつ
指定された命令の第１から第１４ビットおよび第１７から第３２ビットが、指定された命令を特定する、請求項１２に記載の方法。
【請求項１４】
パケットのセットが、超長命令語（ＶＬＩＷ）パケットのセットであり、かつ
ハードウェアループ情報が、ＶＬＩＷパケットの前記セットの各ＶＬＩＷパケットの同じ予め定められた位置における命令内にコード化される、請求項９に記載の方法。
【請求項１５】
少なくとも１つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第１のセットを含む第１のループと、特定の繰り返し回数実行されるべきパケットの第２のセットを含む第２のループとを含み、かつ
第１のループに関するハードウェアループ情報が、パケットの前記第１のセットの各パケットの第１の予め定められた位置における命令内にコード化され、かつ
第２のループに関するハードウェアループ情報が、パケットの前記第２のセットの各パケットの第２の予め定められた位置における命令内にコード化される、請求項９に記載の方法。
【請求項１６】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも１つの命令内にコード化するための方法であって、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項９に記載の方法。
【請求項１７】
１つ以上の命令を含むパケットを格納するためのメモリーであって、前記命令の各々はビットのセットを含んでおり、前記命令は特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも１つのハードウェアループを特定しており、ハードウェアループ情報が、パケットの前記セットの少なくとも１つの指定された命令の１つ以上の予約されたビット位置における１つ以上のビットへコード化され、前記少なくとも１つの指定された命令が、ハードウェアループを特定するために用いられない１つの命令を含む、メモリーと、
命令の前記パケットを入力し実行するための、前記メモリーに接続され、パケットの前記命令が並列に処理される処理ユニットとを含む、命令処理のための装置。
【請求項１８】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも１つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項１７に記載の装置。
【請求項１９】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項１８に記載の装置。
【請求項２０】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項１７に記載の装置。
【請求項２１】
各命令が３２ビットを含み、かつ
ハードウェアループ情報が指定された命令の第１５および第１６ビットにコード化され、かつ
指定された命令の第１から第１４ビットおよび第１７から第３２ビットが指定された命令を特定する、請求項２０に記載の装置。
【請求項２２】
パケットのセットが、超長命令語（ＶＬＩＷ）パケットのセットであり、かつ
ハードウェアループ情報が、ＶＬＩＷパケットの前記セットの各ＶＬＩＷパケットの同じ予め定められた位置における命令内にコード化される、請求項１７に記載の装置。
【請求項２３】
少なくとも１つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第１のセットを含む第１のループと、特定の繰り返し回数実行されるべきパケットの第２のセットを含む第２のループとを含み、かつ
第１のループに関するハードウェアループ情報が、パケットの前記第１のセットの各パケットの第１の予め定められた位置における命令内にコード化され、かつ
第２のループに関するハードウェアループ情報が、パケットの前記第２のセットの各パケットの第２の予め定められた位置における命令内にコード化される、請求項１７に記載の装置。
【請求項２４】
エンド命令情報が、コード化されたハードウェアループ情報を有しないパケットのセットの少なくとも１つの命令内にコード化され、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項１７に記載の装置。
【請求項２５】
特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも１つのハードウェアループに関する情報をコード化するように構成された装置であって、前記パケットの各々が１つ以上の命令を含んでおり、前記命令の各々がビットのセットを含んでおり、
ハードウェアループ情報をパケットの前記セット内の少なくとも１つの指定された命令の１つ以上の予約されたビット位置における１つ以上のビットにコード化するための手段を含み、前記少なくとも１つの指定された命令が、ハードウェアループを特定するために用いられない命令を含む装置。
【請求項２６】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも１つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項２５に記載の装置。
【請求項２７】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項２６に記載の装置。
【請求項２８】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項２５に記載の装置。
【請求項２９】
各命令が３２ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第１５および第１６ビットにコード化され、かつ
指定された命令の第１から第１４ビットおよび第１７から第３２ビットが、指定された命令を特定する、請求項２８に記載の装置。
【請求項３０】
パケットのセットが、超長命令語（ＶＬＩＷ）パケットのセットであり、かつ
ハードウェアループ情報が、ＶＬＩＷパケットの前記セットの各ＶＬＩＷパケットの同じ予め定められた位置における命令内にコード化される、請求項２５に記載の装置。
【請求項３１】
少なくとも１つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第１のセットを含む第１のループと、特定の繰り返し回数実行されるべきパケットの第２のセットを含む第２のループとを含み、かつ
第１のループに関するハードウェアループ情報が、パケットの前記第１のセットの各パケットの第１の予め定められた位置における命令内にコード化され、かつ
第２のループに関するハードウェアループ情報が、パケットの前記第２のセットの各パケットの第２の予め定められた位置における命令内にコード化される、請求項２５に記載の装置。
【請求項３２】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも１つの命令内にコード化するための手段をさらに含み、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項２５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施例は一般にハードウェアループに関する。より詳細には、ハードウェアエンドループ情報の命令へのコード化に関する。
【背景技術】
【０００２】
現在、広く用いられるコンピュータアーキテクチャは超長命令語（ＶＬＩＷ）アーキテクチャである。ＶＬＩＷアーキテクチャの下では、複数の命令は１つ以上の命令のパケットにグループ分けされ、並列に読み込まれ実行される。ＶＬＩＷアーキテクチャはアーキテクチャがパケットの複数命令を同時に実行することを可能にする数個の実行ユニットまたは演算論理ユニット（ＡＬＵ）を用いる。この各実行ユニットまたはＡＬＵは特定の形式の命令を実行できる。パケット内の命令の最大数は通常は命令処理に利用可能な実行ユニットまたはＡＬＵの数によって決定される。例えば命令処理に利用可能な４個の実行ユニットまたはＡＬＵがある場合、通常はパケット当たり最大４個の命令が許容される。これは、そのパケットの各命令が並列に処理されることを可能とし、その結果、どの命令もパケット内の別の命令の処理終了を待たない。ＶＬＩＷアーキテクチャにおいて、コード化ソフトウェア（例えば、コンパイラ、アセンブラツールなど）は、複数の命令を１つ以上の命令のパケットにグループ分け（同じパケットの命令が互いに依存せず、従って並列に実行されるかもしれない）するために用いられることができ、そのパケットを実行可能コードを生成するためにコード化することができる。
【０００３】
命令またはパケットのセットはしばしば「ループ」の形で指示され、その結果命令またはパケットが特定の繰り返し回数だけ繰り返される。命令またはパケットのループはソフトウェアまたはハードウェアで実施され得る。ソフトウェアで実施される場合、追加の命令がループを特定するために用いられる（例えば算術、比較および分岐形式の命令）。
【０００４】
ハードウェアで実施される場合、ループのスタートおよびエンド命令またはスタートおよびエンドパケットのメモリーアドレスを格納するため、並びにループ計数を格納するために、レジスタが通常用いられる。次に、このレジスタは、ループの終端に達した時点を決定するため、ループ計数を監視するため、およびループ／反復の所望の回数が実行されるまでループの開始点に戻るために用いられる。
【０００５】
ＶＬＩＷアーキテクチャの下では、ハードウェアループは１つ以上の特定の回数繰り返されるパケットのセットを含む。従来、ＶＬＩＷアーキテクチャの下では、ハードウェアループを特定する情報は、パケットの別個のヘッダ部分に含まれる。他の既知の方法は、ハードウェアループ情報を特定するパケット内の別個の専用命令を有することを含む。しかし、ヘッダデータまたは別個のループ命令はデータオーバヘッドおよびパケットの処理時間を増加させる。したがって、当業者には、より少ないデータおよび処理オーバヘッドを必要とするハードウェアループ情報をコード化するための方法に対する要求がある。
【発明の開示】
【発明の概要】
【０００６】
開示された、いくつかの態様は少なくとも１つのハードウェアループに関する情報をコード化するための方法および装置を提供する。このハードウェアループは特定の繰り返し回数実行されるべき（スタートおよびエンドパケットを含む）パケットのセットを含む。また各パケットは１つ以上の命令を含み、各命令はビットのセットを含む。いくつかの態様において、ハードウェアループ情報はパケットのセット内の少なくとも１つの指定された命令の（１つ以上の予め定められたビット位置における）１つ以上のビットにコード化される。この少なくとも１つの指定された命令は元々ハードウェアループを特定するためには用いられない命令（すなわち、元々ハードウェアループに関連しない命令）を含む。
【０００７】
ハードウェアループはループの範囲を定義するスタートパケットおよびエンドパケットを有する。いくつかの態様において、コード化されたハードウェアループ情報はエンドパケット情報を含む。ここで、特定のパケットの指定された命令にコード化された情報はその特定のパケットがハードウェアループのエンドパケットであることを示すか、またはその特定のパケットがハードウェアループのエンドパケットでないことを示す（従って、先へ進み、次のパケットを処理することも示す）。これらの態様において、ループ情報の終端を含む指定された命令は、ハードウェアループのエンドパケットを特定するためには用いられない命令である（すなわち、エンドループ命令ではない）。
【０００８】
いくつかの態様において、ハードウェアループ情報は指定された命令の先頭でコード化されず、むしろ指定された命令のビット内でコード化される。その結果指定された命令のビットはコード化されたハードウェアループ情報のビットの前および後にある。例えば、各命令が３２ビットを含む場合、ハードウェアループ情報は指定された命令の中間ビット（例えば、第１５および第１６ビット）にコード化されるかもしれない。ここで、指定された命令の残余のビット（例えば、第１から第１４ビットおよび第１７から第３２ビット）は指定された命令を特定するために用いられる。
【０００９】
いくつかの態様において、パケットの前記セットは超長命令語（ＶＬＩＷ）パケットのセットであり、ハードウェアループ情報はそのＶＬＩＷパケットのセットの各ＶＬＩＷパケット内の予め定められた位置における命令内にコード化される。例えば、ハードウェアループ情報は各ＶＬＩＷパケットの第１の命令内にコード化されるかもしれない。
【００１０】
いくつかの態様において、２つのハードウェアループに関する情報がコード化される。すなわち第１のハードウェアループに関する情報は各パケットの第１の予め定められた位置における命令内にコード化され、第２のハードウェアループに関する情報は各パケットの第２の予め定められた位置における命令内にコード化される。例えば、第１のハードウェアループに関する情報は各パケットの第１の命令内にコード化され、第２のハードウェアループに関する情報は各パケットの第２の命令内にコード化されるかもしれない。
【００１１】
いくつかの態様において、エンド命令情報は、コード化されたハードウェアループ情報を有しないパケットの少なくとも１つの命令内にコード化される。これらの態様において、エンド命令情報はコード化されたハードウェアループ情報のために予約された予め定められた同じビット位置にコード化される。このコード化されたエンド命令情報はある命令がパケットの最後の命令であるかどうかを示す（従って、パケット長すなわちパケットがいくつの命令を含むかをも示す）。
【詳細な説明】
【００１２】
「代表的」という言葉は、ここでは「例、実例、または例証として役立つこと」を意味するために用いられる。ここで「代表的」と説明されるいかなる実施例も、必ずしも他の実施例より好ましいまたは有利であると解釈されるべきではない。
【００１３】
図１にコード化されたＶＬＩＷパケットを生成するコンパイル処理の概念図を示す。図１に示すように、複数の命令を特定するプログラム用コード１０５が（例えばプログラマによって）最初に生成される。各命令は特定の計算または操作（例えばシフト、乗算、ロード、格納など）を特定する。いくつかの実施例において、複数の命令は特定の回数実行されるべき（すなわち特定の繰り返し回数実行される）命令のセットを特定するハードウェアループ命令を含む。ここで命令の上記セットはハードウェアループを含む。
【００１４】
次に、プログラム用コードの複数の命令は命令１１０のパケットを生成するために（例えば、プログラマまたはＶＬＩＷコンパイラによって）１つ以上の命令のパケットにグループ分けされる。これらの命令は、同じパケットの複数の命令が依存性を持たないように（従って並列に実行可能なように）グループ分けされる。１パケット内の命令の最大数は通常は命令処理のためのデバイスで利用可能な実行ユニットまたはＡＬＵの数によって決定される。また、ハードウェアループの命令のセットも特定の回数実行されるべき１つ以上の（スタートパケットおよびエンドパケットを含む）パケットのセットを含むハードウェアループを生成するために複数パケットにグループ分けされる。ハードウェアループのエンドパケットは通常は標識（例えばアセンブリ構文における”endloop”）によってマークされる。
【００１５】
次に、命令のパケット（ソースコード）はＶＬＩＷコンパイラによってバイナリーコードで命令１１５のコード化されたパケット（オブジェクトコード）へコンパイルされる。各命令は予め定められた数のビットを含む。例えば、各命令は３２ビットのワード幅を有するかもしれない。パケット内の１つ以上の命令をコード化する場合、命令は、単一のより大きいコード化された命令（すなわち、コード化されたＶＬＩＷパケット）を実質的に生成するために順次コード化される。パケット内の各命令は、パケット内の他の命令との相対的な特定の順序または位置（第１、第２、第３など）を有し、また（図２に関連して以下に検討するように）それらの順序または位置に従ってメモリーに格納される。例えば、パケットの第１の命令は通常はパケットの第２の命令より低いメモリーアドレスに格納される。第２の命令はパケットの第３の命令より低いメモリーアドレスを有し、以下同様である。
【００１６】
ＶＬＩＷコンパイラがパケットのハードウェアループを入力すると、ＶＬＩＷコンパイラはハードウェアループに関する情報のコード化もしなければならない。例えば、ＶＬＩＷコンパイラはハードウェアループのエンドパケットとして（例えば、アセンブリ構文による”endloop”によって）マークされたパケットを入力するかもしれない。先行技術において、エンドパケットを識別する情報はエンドパケットの別個のヘッダ部分にコード化された。他の既知の方法には、エンドパケットであることを示すパケット内に別個のコード化された命令を有する方法がある。しかし、パケット命令のヘッダデータおよびト別個の終端はデータオーバヘッドおよびパケットの処理時間を増加させる。
【００１７】
いくつかの実施例において、パケットのハードウェアループに対するエンドパケット情報はハードウェアループ内の１つ以上のパケットの１つ以上の命令内にコード化される。いくつかの実施例において、ループのエンドパケットを示す情報はエンドパケットの命令内にコード化される。従って、エンドパケット情報を含む別個のヘッダは、もはや必要ではない。また、エンドパケット情報は、エンドループ命令ではなくむしろ異なる形式の命令（例えばシフト、乗算、ロードなど）を特定する命令内にコード化される。従って、エンドパケットを示すことには別個のエンドループ命令は必要がない。
【００１８】
図２に超長命令語（ＶＬＩＷ）計算機アーキテクチャ２００の概念図を示す。ＶＬＩＷアーキテクチャ２００はメモリー２１０、処理ユニット２３０、およびメモリー２１０を処理ユニット２３０に接続する１つ以上のバス２２０を含む。
【００１９】
メモリー２１０はデータおよび命令を（ＶＬＩＷコンパイラによって生成されるＶＬＩＷパケットの形式であって、各ＶＬＩＷパケットが１つ以上の命令を含むＶＬＩＷパケットの形式で）格納する。パケットの各命令はパケット内の第１の命令が通常はパケットの最後の命令より低いメモリーアドレスを有するメモリー２１０の特定のアドレスを有する。メモリーのアドレス指定方式は当業者には周知であり、ここでは詳細な検討はしない。メモリー２１０内の命令はバス２２０を経由して処理ユニット２３０にロードされる。各命令は通常は予め定められた幅の命令である。
【００２０】
処理ユニット２３０はシーケンサ２３５、複数の実行ユニット２４５のための複数のパイプライン２４０、（複数の汎用レジスタを含む）汎用レジスタファイル２５０、および制御レジスタファイル２６０を含む。処理ユニット２３０は中央演算処理装置、マイクロプロセッサ、またはディジタル信号プロセッサ等を含むかもしれない。
【００２１】
上で検討したように、各ＶＬＩＷパケットは１つ以上の命令を含み、１パケット内の命令の最大数は通常は命令処理のための処理ユニット２３０で利用可能な、ＡＬＵのような実行パイプラインの数によって決定されている。通常、各命令は命令を処理するために必要な実行ユニットの形式に関する情報を含む。ここで各実行ユニットは特定の形式の命令（例えば、シフト、ロードなど）を処理できるだけである。したがって、特定の形式の命令を処理するために利用可能な特定の数の実行ユニットのみがある。従って、複数の命令はパケット内の命令の形式および利用可能な実行ユニットの形式に基づいて１つのパケットにグループ分けされ、その結果命令は並列に実行され得る。例えば、シフト型命令を処理できる利用可能な１実行ユニットとロード型命令を処理できる利用可能な２実行ユニットだけがある場合、２つのシフト型命令は同じパケットにグループ分けされないだろうし、また３つのロード型命令は同じパケットにグループ分けされないだろう。
【００２２】
シーケンサ２３５はメモリー２１０から命令のパケットを入力し、各入力パケットの各命令に対する適切なパイプライン２４０／実行ユニット２４５を（命令に含まれる情報を用いて）決定する。パケットの各命令に対するこの決定をした後に、シーケンサ２３５は適切な実行ユニット２４５による処理のために命令を適切なパイプライン２４０へ入力する。
【００２３】
命令を入力する各実行ユニット２４５は汎用レジスタファイル２５０を用いて命令を実行する。当業者に周知のように、汎用レジスタファイル２５０はレジスタアレイを含む。これは命令を実行するために必要なデータをメモリー２１０からロードするために用いられる。１つのパケットの命令が実行ユニット２４５によって実行された後に、結果として得られたデータは汎用レジスタファイル２５０に格納され、次にメモリー２１０にロードされ格納される。データはバス２２０を経由してメモリー２１０へ、およびメモリー２１０からロードされる。通常、１パケットの複数命令は１クロック周期内で複数の実行ユニット２４５によって並列に実行される。
【００２４】
命令を実行するために、実行ユニット２４５は制御レジスタファイル２６０も用いるかもしれない。制御レジスタ２６０は通常、修飾子レジスタ、状態レジスタ、および述語レジスタのような特殊なレジスタのセットを含む。制御レジスタ２６０はループ計数（繰り返し計数）およびスタートループ（スタートパケット）アドレスのようなハードウェアループに関する情報を格納するために用いられ得る。制御レジスタ２６０に格納されたハードウェアループ情報は、いくつかの実施例において説明されるように、特定の繰り返し回数ハードウェアループを実行するためにコード化されたエンドループ（エンドパケット）情報に関連して用いられ得る。特に、エンドパケットに達すると（パケットの命令におけるコード化されたエンドループ情報で示されると）、ループ計数は減分され、ループ計数が正であればループはスタートパケットへ戻る。
【００２５】
図３にコード化されたハードウェアループ情報を含むように指定されたパケットの命令３００の概念図を示す。いくつかの実施例において、コード化されたハードウェアループ情報を含む指定された命令３００は、元々はハードウェアループ情報を含んだ命令、またはハードウェアループを特定するために用いられた命令ではない（すなわちシフトまたはロード命令のような非ハードウェアループ命令であった）。命令３００は第１ビット（０）と、最終ビット（Ｎ）と、命令の第１と最終ビットの間の１つ以上の予め定められたビット位置における１つ以上のビットにコード化されたエンドループ情報３０５とを含む複数のビットを含む。指定された命令を特定する残余のビット３１０はコード化されたハードウェアループ情報のビットのどちらの側にでも（すなわち前および後）配置されることに注意のこと。例えば、指定された命令がシフト命令の場合、シフト命令を特定するビットはコード化されたハードウェアループ情報のビットの前および後に配置される。
【００２６】
いくつかの実施例において、エンドパケット情報は指定された命令３００内へコード化される。この指定された命令３００は、元々はエンドパケット情報を含まなかった命令、またはハードウェアループのエンドパケットを特定するために用いられた命令である。いくつかの実施例において、特定のパケットの指定された命令３００にコード化されたエンドパケット情報は、その特定のパケットがハードウェアループのエンドパケットであることを（第１のバイナリーコードを用いて）示し、またはその特定のパケットがハードウェアループのエンドパケットでないことを（第２のバイナリーコードを用いて）示す（従って、先へ進み、次のパケットを処理することも示す）。例えば、予め定められたビット位置の２ビットバイナリーコード「１０」はパケットがエンドパケットであることを示すかもしれず、また予め定められたビット位置の２ビットバイナリーコード「０１」はパケットがハードウェアループのエンドパケットではないことを示すかもしれない。
【００２７】
上で検討したように、パケット内の各命令はパケットの他の命令との相対的な特定の順序または位置（第１、第２、第３など）を有する。いくつかの実施例において、エンドループ情報はハードウェアループの各パケット内の（同じパケット内の他の命令の位置との相対的な）同じ予め定められた位置の命令（指定された命令と呼ばれる）内にコード化される。例えば、エンドループ情報はハードウェアループの各パケットの第１の命令内にコード化されるかもしれない。
【００２８】
いくつかの実施例において、２つのハードウェアループ、すなわち特定の繰り返し回数実行されるべきパケットの第１のセットを含む第１のハードウェアループ、および特定の繰り返し回数実行されるべきパケットの第２のセットを含む第２のハードウェアループ、に関する情報が特定される。例えば、第１のハードウェアループは内部ループであるかもしれない。また第２のハードウェアループはその内部ループを含む外部ループであるかもしれない。また、第１および第２のハードウェアループは別々の独立したループであるかもしれない。これらの実施例において、第１のハードウェアループに関する情報はパケットの第１のセットの各パケットの同じ第１の予め定められた位置における命令内にコード化され、かつ、第２のハードウェアループに関する情報はパケットの第２のセットのパケットの各パケットの同じ第２の予め定められた位置における命令内にコード化される。例えば、第１のハードウェアループに対するエンドループ情報は第１のハードウェアループの各パケットの第１の命令（指定された命令）内にコード化されるかもしれず、かつ、第２のハードウェアループに対するエンドループ情報は第２のハードウェアループの各パケットの第２の命令（指定された命令）内にコード化されるかもしれない。
【００２９】
いくつかの実施例において、第１のハードウェアループに対するエンドループ情報を含むパケットは２つ以上の命令を含む。そのようなパケットにただ１つの命令がある場合、少なくとも２つの命令となるようにＮＯＰ命令が加えられる。これらの実施例において、パケットの最後の命令は、１つ以上の予め定められたビット位置における１つ以上のビットにコード化された情報（エンド命令情報）を含む。このビットはそれがパケットの最後の命令であることを示す（また、従ってパケット長、すなわちパケットがいくつの命令を含むかを示す）。いくつかの実施例において、エンド命令情報はコード化されたハードウェアループ情報を有しない命令内にコード化され、コード化されたハードウェアループ情報のために予約された予め定められたビット位置にコード化される。
【００３０】
図４に第１の命令（命令Ａ）および第２の命令（命令Ｂ）を有する代表的パケット４００の概念図を示す。図４の例において、各命令は３２ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第１５および第１６ビット４０５および４０６（ビット番号１４および１５）にコード化される。各命令の残余のビット４１０（すなわち、第１から第１４ビットおよび第１７から第３２ビット）は実効命令（例えば乗算操作、ロード操作など）を特定するために用いられる。他の実施例において、命令は他のビット幅を有しているかもしれない、および／またはコード化された情報は命令の他のビット内に含まれるかもしれない。図４の例において、第１のハードウェアループに関するエンドループ情報は第１の命令内にコード化され（例えば、ここでバイナリーコード「１０」はパケット４００がエンドパケットであることを示す）、エンド命令情報は最後の命令内にコード化される（例えば、ここでバイナリーコード「１１」は命令Ｂがパケット４００の最後の命令であることを示す）。
【００３１】
いくつかの実施例において、第２のハードウェアループに対するエンドループ情報を（指定された命令内に）含むパケットは３つ以上の命令を含む。そのようなパケットにただ１つまたは２つの命令がある場合、少なくとも３つの命令となるようにＮＯＰ命令が加えられる。これらの実施例において、パケットの最後の命令は１つ以上の予め定められたビット位置における１つ以上のビットにコード化された情報（エンド命令情報）を含む。このビットはそれがパケットの最後の命令であることを示す（また、従ってパケット長、すなわちパケットがいくつの命令を含むかを示す）。いくつかの実施例において、エンド命令情報はコード化されたハードウェアループ情報を有しない命令内にコード化され、コード化されたハードウェアループ情報のために予約された予め定められたビット位置にコード化される。
【００３２】
図５に第１の命令、（命令Ａ）、第２の命令（命令Ｂ）、および第３の命令（命令Ｃ）を有する代表的パケット５００の概念図を示す。図５の例において、各命令は３２ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第１５および第１６ビット５０５および５０６にコード化される。各命令の残余のビット５１０は実効命令を特定するために用いられる。図５の例において、第１のハードウェアループに関するエンドループ情報は第１の命令内にコード化され、第２のハードウェアループに関するエンドループ情報は第２の命令内にコード化され（例えば、ここでバイナリーコード「１０」はパケット５００が第２のハードウェアループのエンドパケットであることを示す）、エンド命令情報は最後の命令内にコード化される。
【００３３】
４つ以上の命令を含むパケットに関しては、コード化されたエンドループまたはエンドパケット情報を含むように指定されないパケット内の命令は、パケットの最後の命令を示すために用いられるコード以外の任意の符号でもよい無意味なバイナリーコードを（コード化されたエンドループおよびエンド命令情報のために予約された同じ予め定められたビット位置において）含むかもしれない。図６に４つ以上の命令（命令Ａ、Ｂ、Ｃなど）を有する代表的パケット６００の概念図を示す。図６の例において、各命令は３２ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第１５および第１６ビット６０５および６０６にコード化される。各命令の残余のビット６１０は、実効命令を特定するために用いられる。図６の例において、第１および第２のハードウェアループに関するエンドループ情報は第１および第２の命令（命令ＡおよびＢ）内にコード化され、エンド命令情報は最後の命令内にコード化される。残余の命令（例えば、命令Ｃ）は通常は同じ予め定められたビット位置（例えば、第１５および第１６ビット）において（パケットの最後の命令を示すために用いられるコードを除く）任意のバイナリーコードを含んでも良い。これらのビット位置のコードは残余の命令においては意味がないであろうからである。図４から図６のパケット４００、５００、および６００においてヘッダが含まれていないことに注意のこと。
【００３４】
いくつかの実施例において、パケットのセットの各命令における同じ１つ以上の予め定められたビット位置はコード化されたエンドループ情報、エンドパケット情報、または無意味情報（ヌルコード）のために予約される。上記の図４から図６で示した例においては、（３２ビット命令の）各命令の第１５および第１６ビットがこの形式の情報のために予約された。他の実施例においては、命令は他のビット幅を有しているかもしれない、および／またはコード化された情報は命令の他のビット位置内に含まれるかもしれない。各命令の残余のビット（すなわち、非予約ビット）は実効命令（例えば乗算操作、ロード操作など）を特定するために用いられる。
【００３５】
図７に最大４つの命令を有するパケットに対する符号化されたエンドループの値およびエンド命令情報のすべての変形の代表的な表を示す。図７の例示的表において、以下に注意のこと。
【００３６】
−命令Ａはパケット内の（そのパケット内で最も低いメモリーアドレスを有する）第１の命令であり、命令Ｂはパケット内の（そのパケット内で２番目に低いメモリーアドレスを有する）第２の命令であり、命令Ｃはパケット内の（そのパケット内で２番目に高いメモリーアドレスを有する）第３の命令であり、命令Ｄはパケット内の（そのパケット内で最も高いメモリーアドレスを有する）第４の命令である。
【００３７】
−エンドループ情報、エンド命令情報、および無意味情報は２ビットバイナリーコードとして各命令内の同じ予約されたビット位置「ＰＰ」にコード化される。
【００３８】
−第１のハードウェアループに対するエンドループ情報は各パケットの第１の命令（命令Ａ）内にコード化される。ここでバイナリーコード「１０」はそのパケットがエンドパケットであることを示し、バイナリーコード「０１」はそのパケットが第１のハードウェアループのエンドパケットではないことを示す。
【００３９】
−第２のハードウェアループに対するエンドループ情報は各パケットの第２の命令（命令Ｂ）内にコード化される。ここでバイナリーコード「１０」はそのパケットがエンドパケットであることを示し、バイナリーコード「０１」はそのパケットが第２のハードウェアループのエンドパケットではないことを示す。
【００４０】
−エンド命令情報は各パケットの最後の命令内にコード化される。ここでバイナリーコード「１１」は、その命令がそのパケットの最後の命令であることを示す（従って、パケット長、すなわちパケットがいくつの命令を含むかも示す）。
【００４１】
しかし、他の実施例において、パケットが最大４つより多い命令を有するかもしれない。またはエンドループ情報およびエンド命令情報が異なるビット数でコード化されるかもしれない。または第１のハードウェアループに対するエンドループ情報が第１の命令と異なる命令内にコード化されるかもしれない。または第２のハードウェアループに対するエンドループ情報が第２の命令と異なる命令内にコード化されるかもしれない。または異なるバイナリーコードがパケットがエンドパケットであるかないかを示すために用いられるかもしれない、または異なるバイナリーコードがパケットの最後の命令を示すために用いられるかもしれない。
【００４２】
図８にハードウェアループ情報を１つ以上の命令内にコード化するための方法８００のフローチャートを示す。いくつかの実施例において、方法８００のいくつかのステップはハードウェアまたはソフトウェアで、例えばＶＬＩＷコンパイラで実施される。方法８００のステップは例示目的だけのためのものであり、ステップの順序または数は他の実施例においては異なるか、または入れ替えられるかもしれない。
【００４３】
特定の回数実行されるべき（すなわち特定の繰り返し回数実行される）命令のセットを特定するハードウェアループ命令を含む複数の命令を特定するプログラム用コードが（８０５で）生成されると、方法８００が始まる。この命令セットはハードウェアループを含む。
【００４４】
次に、プログラムコード内の複数命令は（８１０で）１つ以上の命令のパケットにグループ分けされる。これらの命令は同じパケットの命令が依存性を持たないように、かつ並列に実行可能なように）グループ分けされる。ハードウェアループの命令のセットは特定の回数実行されるべきパケットのセットを含むハードウェアループを生成するためにパケットにグループ分けされる。ここでハードウェアループのエンドパケットは標識（例えば、アセンブリ構文の”endloop”）によってマークされる。
【００４５】
次に、命令のパケット（ソースコード）は（８１５で）バイナリーコードの形式でコード化された命令のパケット（オブジェクトコード）内へコンパイルされる。ハードウェアループのエンドパケット情報をコード化するとき、方法８００はエンドパケット情報をハードウェアループにおける１つ以上のパケットの１つ以上の命令内にコード化する。いくつかの実施例において、第１のループに関するエンドループ情報はパケット内の第１の予め定められた位置において命令内にコード化され、第２のループに関するエンドループ情報はパケット内の第２の予め定められた位置において命令内にコード化される。エンド命令情報はコード化されたハードウェアループ情報を有しないパケットの少なくとも１つの命令内にコード化される。ここでエンド命令情報はコード化されたハードウェアループ情報のために予約された同じ予め定められたビット位置にコード化される。次に、方法８００は終了する。
【００４６】
図９にいくつかの実施例においてディジタル信号プロセッサ（ＤＳＰ）に用いられる超長命令語（ＶＬＩＷ）計算機アーキテクチャ９００の概念図を示す。ＶＬＩＷアーキテクチャ９００は命令ロードバス９２０を備えたメモリー９１０およびＤＳＰ９３０、データロードバス９２２、並びにメモリー９１０とＤＳＰ９３０を接続するデータロード／格納バス９２４を含む。
【００４７】
メモリー９１０はデータおよび（１つから４つの命令を有するＶＬＩＷパケットの形式の）命令を格納する。メモリー９１０内の命令は命令ロードバス９２０を経由してＤＳＰ９３０にロードされる。いくつかの実施例において、各命令は４ワード幅を有する１２８ビットの命令ロードバス９２０を経由してＤＳＰ９３０にロードされる３２ビットのワード幅を有する。いくつかの実施例において、メモリー９１０は統合型バイトアドレス可能メモリーであり、命令およびデータ双方を格納する３２ビットのアドレス空間を有し、リトルエンディアンモードで動作する。
【００４８】
ＤＳＰ９３０はシーケンサ９３５、４つの論理実行ユニット９４５のための４つのパイプライン９４０、（複数の汎用レジスタを含む）汎用レジスタファイル９５０、および制御レジスタファイル９６０を含む。通常は、利用可能な４つのパイプライン９４０がある場合、プログラマから見ると、命令処理のために利用可能な４つの「スロット」がある。しかし、ハードウェアから見ると、分岐型命令を処理するために利用可能な付加的実行ユニットがある。この付加的実行ユニットは「スロット」のサブセットから発行されるかもしれない。シーケンサ９３５はメモリー９１０から命令のパケットを入力し、各入力パケットの各命令のための適切なパイプライン９４０／実行ユニット９４５を（命令に含まれる情報を用いて）決定する。パケットの各命令に対するこの決定をした後に、シーケンサ９３５は適切な実行ユニット９４５による処理のために命令を適切なパイプライン９４０へ入力する。
【００４９】
実行ユニット９４５はベクトルシフトユニット、（乗算命令のための）ベクトルＭＡＣユニット、ロードユニット、およびロード／格納ユニットを含む。ベクトルシフトユニットは、Ｓタイプ（シフトおよびビット操作）、Ａ６４タイプ（複素演算）、Ａ３２タイプ（単純演算）、Ｊタイプ（フロー変更またはジャンプ／分岐）、およびＣＲタイプ（制御レジスタを含む）命令のようなシフト命令を実行する。ベクトルＭＡＣユニットは、Ｍタイプ（乗算）、Ａ６４タイプ、Ａ３２タイプ、Ｊタイプ、およびＪＲタイプ（レジスタを含むフロー変更命令）命令のような乗算命令を実行する。ロードユニットはメモリー９１０から汎用レジスタファイル９５０へデータをロードし、読み込み、さらにロードタイプおよびＡ３２タイプの命令を実行する。ロード／格納ユニットは汎用レジスタファイル９５０からメモリーへデータを読み戻し、格納し、さらにロードタイプ、格納タイプ、およびＡ３２タイプの命令を実行する。付加的に、各実行ユニット９４５は通常は多くの一般的演算および論理動作を実行できる。
【００５０】
命令を入力する各実行ユニット９４５は４つの実行ユニット９４５によって共有される汎用レジスタファイル９５０を用いて命令を実行する。いくつかの実施例において、汎用レジスタファイル９５０は複数の３２ビットレジスタを含む。これらは複数の単一レジスタとして、または並んだ６４ビットペアとしてアクセスされ得る（その結果命令は３２ビットまたは６４ビットの値で動作できる）。命令が必要とするデータは６４ビットのデータロードバス９２２を経由して汎用レジスタファイル９５０にロードされる。パケットの命令が実行ユニット９４５によって実行された後に、結果として得られたデータは汎用レジスタファイル９５０に格納され、次に６４ビットデータロード／格納バス９２４を経由してメモリー９１０にロードされ、格納される。通常は、パケットの１つから４つの命令は４実行ユニット９４５によって並列に１クロック周期内で実行される（ここで最大１つの命令が各クロック周期に対してパイプライン９４０によって入力され、処理される）。
【００５１】
命令を実行するために、実行ユニット９４５は制御レジスタファイル９６０も用いるかもしれない。制御レジスタファイル９６０は修飾子レジスタ、状態レジスタ、および述語レジスタのような特殊なレジスタのセットを含む。制御レジスタ９６０はループ計数（繰り返し計数）およびスタートループ（スタートパケット）アドレスのようなハードウェアループに関する情報を格納するために用いられ得る。制御レジスタ９６０に格納されたハードウェアループ情報は、いくつかの実施例において説明したように、特定の繰り返し回数ハードウェアループを実行するために、コード化されたエンドループ（エンドパケット）情報に関連して用いられ得る。
【００５２】
当業者は情報および信号が種々の異なる技術および手法のいずれかを用いて表されるかもしれないことを理解するだろう。例えば、上の記述中に参照されるかもしれないデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光学場もしくは光粒子、またはそれらの任意の組合せで表されるかもしれない。
【００５３】
当業者はここに開示された実施例に関連して説明された種々の例示的論理ブロック、モジュール、回路およびアルゴリズムのステップが、電子的ハードウェア、計算機ソフトウェア、またはその双方の組合せとして実施されるかもしれないことをさらに認識するだろう。ハードウェアとソフトウェアのこの互換性を明確に示すために、種々の例示的構成要素、ブロック、モジュール、回路、およびステップは、ここまで、それらの機能の面から一般的に説明してきた。そのような機能がハードウェアまたはソフトウェアとして実施されるかどうかは、全体のシステムに課せられた特定の用途および設計制約に依存する。当業者は説明した機能を各特定の用途に対して異なる方法で実施するかもしれないが、そのような実施の決定が本発明の範囲からの逸脱を引き起こすと解釈されるべきではない。
【００５４】
ここに開示された実施例に関して説明された例示的論理ブロック、モジュール、および回路は、汎用プロセッサ、ディジタル信号プロセッサ（ＤＳＰ）、特定用途向集積回路（ＡＳＩＣ）、プログラマブルゲートアレイ（ＦＰＧＡ）、もしくは他のプログラム可能論理回路、個別ゲートもしくはトランジスタ論理、個別ハードウェア部品、またはここに説明した機能を実行するように設計されたそれらの任意の組合せで実施または実行されるかもしれない。汎用プロセッサはマイクロプロセッサであるかもしれないが、代替的には、プロセッサは任意の通常のプロセッサ、制御器、マイクロ制御器または状態機械であるかもしれない。プロセッサはまた、計算デバイスの組合せ、例えばＤＳＰとマイクロプロセッサ、複数のマイクロプロセッサ、ＤＳＰコアと連係した１つ以上のマイクロプロセッサ、または他のそのような構成として実施されるかもしれない。
【００５５】
ここに開示された実施例に関して説明された方法またはアルゴリズムのステップは、直接ハードウェアで、プロセッサで実行されるソフトウェアモジュールで、またはその２つの組合せで具体化されるかもしれない。ソフトウェアモジュールはＲＡＭメモリー、フラッシュメモリー、ＲＯＭメモリー、ＥＰＲＯＭメモリー、ＥＥＰＲＯＭメモリー、レジスタ、ハードディスク、可搬形ディスク、ＣＤ−ＲＯＭ、または当業者に既知の任意の形式の記憶媒体の中にあるかもしれない。代表的記憶媒体はプロセッサが情報を記憶媒体から読み出しおよび情報を記憶媒体に書き込むことができるようにプロセッサに接続される。代替的には、記憶媒体はプロセッサの構成部品であるかもしれない。プロセッサおよび記憶媒体はＡＳＩＣ内にあるかもしれない。ＡＳＩＣはユーザ端末内にあるかもしれない。代替的に、プロセッサおよび記憶媒体は個別部品としてユーザ端末内にあるかもしれない。
【００５６】
開示された実施例のこれまでの説明は、いかなる当業者も本発明を製造しまたは使用することを可能にするように提供されている。これらの実施例への種々の変形は当業者に容易に明らかになるだろう。また、ここに定義した一般的原理は本発明の精神または範囲から逸脱することなく他の実施例に適用されるかもしれない。したがって、本発明はここに示した実施例に限定されることを意図されていず、ここに開示された原理および新規な特徴と矛盾しない最も広い範囲に一致するということである。
【図面の簡単な説明】
【００５７】
【図１】本発明のコード化されたＶＬＩＷパケットを生成するコンパイル処理の概念図。
【図２】本発明の超長命令語（ＶＬＩＷ）計算機アーキテクチャの概念図。
【図３】本発明のコード化されたハードウェアループ情報を含むように指定されたパケットの命令の概念図。
【図４】本発明の２つの命令を有する代表的パケットの概念図。
【図５】本発明の３つの命令を有する代表的パケットの概念図。
【図６】本発明の４つ以上の命令を有する代表的パケットの概念図。
【図７】本発明の最大４つの命令を有するパケットに対する符号化されたエンドループの値およびエンド命令情報のすべての変形を示す代表的表。
【図８】本発明のハードウェアループ情報をハードウェアループ内のパケットの１つ以上の命令内にコード化するための方法のフローチャート。
【図９】本発明のいくつかの実施例においてディジタル信号プロセッサ（ＤＳＰ）に用いられる超長命令語（ＶＬＩＷ）計算機アーキテクチャの概念図。
【図１】
2009536769.tif 000003
【図２】
2009536769.tif 000004
【図３】
2009536769.tif 000005
【図４】
2009536769.tif 000006
【図５】
2009536769.tif 000007
【図６】
2009536769.tif 000008
【図７】
2009536769.tif 000009
【図８】
2009536769.tif 000010
【図９】
2009536769.tif 000011
【国際調査報告】
2009536769.tif 000012
2009536769.tif 000013
2009536769.tif 000014