説明

ハードウェアエンドループ情報の命令へのコード化

【課題】パケットのセットのハードウェアループに関する情報をコード化するための方法と装置を提供する。
【解決手段】パケットの各々は複数命令を含む。ハードウェアループに関する情報はパケットのセットの少なくとも1つの命令の1つ以上のビットにコード化される。前記情報は、パケットがループのエンドパケットあるか否かを示す。2つのハードウェアループに関する情報がコード化される。すなわち第1のループに関する情報は各パケットの第1の予め定められた位置における命令内にコード化され、第2のループに関する情報は各パケットの第2の予め定められた位置における命令内にコード化される。エンド命令情報は、コード化されたループ情報のために予約された同じビット位置にコード化されたループ情報を有しない命令内にコード化される。このエンド命令情報は命令がパケットの最後の命令であるかどうか、およびパケットの長さを示す。

【発明の詳細な説明】
【技術分野】
【0001】
本実施例は一般にハードウェアループに関する。より詳細には、ハードウェアエンドループ情報の命令へのコード化に関する。
【背景技術】
【0002】
現在、広く用いられるコンピュータアーキテクチャは超長命令語(VLIW)アーキテクチャである。VLIWアーキテクチャの下では、複数の命令は1つ以上の命令のパケットにグループ分けされ、並列に読み込まれ実行される。VLIWアーキテクチャはアーキテクチャがパケットの複数命令を同時に実行することを可能にする数個の実行ユニットまたは演算論理ユニット(ALU)を用いる。この各実行ユニットまたはALUは特定の形式の命令を実行できる。パケット内の命令の最大数は通常は命令処理に利用可能な実行ユニットまたはALUの数によって決定される。例えば命令処理に利用可能な4個の実行ユニットまたはALUがある場合、通常はパケット当たり最大4個の命令が許容される。これは、そのパケットの各命令が並列に処理されることを可能とし、その結果、どの命令もパケット内の別の命令の処理終了を待たない。VLIWアーキテクチャにおいて、コード化ソフトウェア(例えば、コンパイラ、アセンブラツールなど)は、複数の命令を1つ以上の命令のパケットにグループ分け(同じパケットの命令が互いに依存せず、従って並列に実行されるかもしれない)するために用いられることができ、そのパケットを実行可能コードを生成するためにコード化することができる。
【0003】
命令またはパケットのセットはしばしば「ループ」の形で指示され、その結果命令またはパケットが特定の繰り返し回数だけ繰り返される。命令またはパケットのループはソフトウェアまたはハードウェアで実施され得る。ソフトウェアで実施される場合、追加の命令がループを特定するために用いられる(例えば算術、比較および分岐形式の命令)。
【0004】
ハードウェアで実施される場合、ループのスタートおよびエンド命令またはスタートおよびエンドパケットのメモリーアドレスを格納するため、並びにループ計数を格納するために、レジスタが通常用いられる。次に、このレジスタは、ループの終端に達した時点を決定するため、ループ計数を監視するため、およびループ/反復の所望の回数が実行されるまでループの開始点に戻るために用いられる。
【0005】
VLIWアーキテクチャの下では、ハードウェアループは1つ以上の特定の回数繰り返されるパケットのセットを含む。従来、VLIWアーキテクチャの下では、ハードウェアループを特定する情報は、パケットの別個のヘッダ部分に含まれる。他の既知の方法は、ハードウェアループ情報を特定するパケット内の別個の専用命令を有することを含む。しかし、ヘッダデータまたは別個のループ命令はデータオーバヘッドおよびパケットの処理時間を増加させる。したがって、当業者には、より少ないデータおよび処理オーバヘッドを必要とするハードウェアループ情報をコード化するための方法に対する要求がある。
【発明の概要】
【0006】
開示された、いくつかの態様は少なくとも1つのハードウェアループに関する情報をコード化するための方法および装置を提供する。このハードウェアループは特定の繰り返し回数実行されるべき(スタートおよびエンドパケットを含む)パケットのセットを含む。また各パケットは1つ以上の命令を含み、各命令はビットのセットを含む。いくつかの態様において、ハードウェアループ情報はパケットのセット内の少なくとも1つの指定された命令の(1つ以上の予め定められたビット位置における)1つ以上のビットにコード化される。この少なくとも1つの指定された命令は元々ハードウェアループを特定するためには用いられない命令(すなわち、元々ハードウェアループに関連しない命令)を含む。
【0007】
ハードウェアループはループの範囲を定義するスタートパケットおよびエンドパケットを有する。いくつかの態様において、コード化されたハードウェアループ情報はエンドパケット情報を含む。ここで、特定のパケットの指定された命令にコード化された情報はその特定のパケットがハードウェアループのエンドパケットであることを示すか、またはその特定のパケットがハードウェアループのエンドパケットでないことを示す(従って、先へ進み、次のパケットを処理することも示す)。これらの態様において、ループ情報の終端を含む指定された命令は、ハードウェアループのエンドパケットを特定するためには用いられない命令である(すなわち、エンドループ命令ではない)。
【0008】
いくつかの態様において、ハードウェアループ情報は指定された命令の先頭でコード化されず、むしろ指定された命令のビット内でコード化される。その結果指定された命令のビットはコード化されたハードウェアループ情報のビットの前および後にある。例えば、各命令が32ビットを含む場合、ハードウェアループ情報は指定された命令の中間ビット(例えば、第15および第16ビット)にコード化されるかもしれない。ここで、指定された命令の残余のビット(例えば、第1から第14ビットおよび第17から第32ビット)は指定された命令を特定するために用いられる。
【0009】
いくつかの態様において、パケットの前記セットは超長命令語(VLIW)パケットのセットであり、ハードウェアループ情報はそのVLIWパケットのセットの各VLIWパケット内の予め定められた位置における命令内にコード化される。例えば、ハードウェアループ情報は各VLIWパケットの第1の命令内にコード化されるかもしれない。
【0010】
いくつかの態様において、2つのハードウェアループに関する情報がコード化される。すなわち第1のハードウェアループに関する情報は各パケットの第1の予め定められた位置における命令内にコード化され、第2のハードウェアループに関する情報は各パケットの第2の予め定められた位置における命令内にコード化される。例えば、第1のハードウェアループに関する情報は各パケットの第1の命令内にコード化され、第2のハードウェアループに関する情報は各パケットの第2の命令内にコード化されるかもしれない。
【0011】
いくつかの態様において、エンド命令情報は、コード化されたハードウェアループ情報を有しないパケットの少なくとも1つの命令内にコード化される。これらの態様において、エンド命令情報はコード化されたハードウェアループ情報のために予約された予め定められた同じビット位置にコード化される。このコード化されたエンド命令情報はある命令がパケットの最後の命令であるかどうかを示す(従って、パケット長すなわちパケットがいくつの命令を含むかをも示す)。
【図面の簡単な説明】
【0012】
【図1】本発明のコード化されたVLIWパケットを生成するコンパイル処理の概念図。
【図2】本発明の超長命令語(VLIW)計算機アーキテクチャの概念図。
【図3】本発明のコード化されたハードウェアループ情報を含むように指定されたパケットの命令の概念図。
【図4】本発明の2つの命令を有する代表的パケットの概念図。
【図5】本発明の3つの命令を有する代表的パケットの概念図。
【図6】本発明の4つ以上の命令を有する代表的パケットの概念図。
【図7】本発明の最大4つの命令を有するパケットに対する符号化されたエンドループの値およびエンド命令情報のすべての変形を示す代表的表。
【図8】本発明のハードウェアループ情報をハードウェアループ内のパケットの1つ以上の命令内にコード化するための方法のフローチャート。
【図9】本発明のいくつかの実施例においてディジタル信号プロセッサ(DSP)に用いられる超長命令語(VLIW)計算機アーキテクチャの概念図。
【発明を実施するための形態】
【0013】
「代表的」という言葉は、ここでは「例、実例、または例証として役立つこと」を意味するために用いられる。ここで「代表的」と説明されるいかなる実施例も、必ずしも他の実施例より好ましいまたは有利であると解釈されるべきではない。
【0014】
図1にコード化されたVLIWパケットを生成するコンパイル処理の概念図を示す。図1に示すように、複数の命令を特定するプログラム用コード105が(例えばプログラマによって)最初に生成される。各命令は特定の計算または操作(例えばシフト、乗算、ロード、格納など)を特定する。いくつかの実施例において、複数の命令は特定の回数実行されるべき(すなわち特定の繰り返し回数実行される)命令のセットを特定するハードウェアループ命令を含む。ここで命令の上記セットはハードウェアループを含む。
【0015】
次に、プログラム用コードの複数の命令は命令110のパケットを生成するために(例えば、プログラマまたはVLIWコンパイラによって)1つ以上の命令のパケットにグループ分けされる。これらの命令は、同じパケットの複数の命令が依存性を持たないように(従って並列に実行可能なように)グループ分けされる。1パケット内の命令の最大数は通常は命令処理のためのデバイスで利用可能な実行ユニットまたはALUの数によって決定される。また、ハードウェアループの命令のセットも特定の回数実行されるべき1つ以上の(スタートパケットおよびエンドパケットを含む)パケットのセットを含むハードウェアループを生成するために複数パケットにグループ分けされる。ハードウェアループのエンドパケットは通常は標識(例えばアセンブリ構文における”endloop”)によってマークされる。
【0016】
次に、命令のパケット(ソースコード)はVLIWコンパイラによってバイナリーコードで命令115のコード化されたパケット(オブジェクトコード)へコンパイルされる。各命令は予め定められた数のビットを含む。例えば、各命令は32ビットのワード幅を有するかもしれない。パケット内の1つ以上の命令をコード化する場合、命令は、単一のより大きいコード化された命令(すなわち、コード化されたVLIWパケット)を実質的に生成するために順次コード化される。パケット内の各命令は、パケット内の他の命令との相対的な特定の順序または位置(第1、第2、第3など)を有し、また(図2に関連して以下に検討するように)それらの順序または位置に従ってメモリーに格納される。例えば、パケットの第1の命令は通常はパケットの第2の命令より低いメモリーアドレスに格納される。第2の命令はパケットの第3の命令より低いメモリーアドレスを有し、以下同様である。
【0017】
VLIWコンパイラがパケットのハードウェアループを入力すると、VLIWコンパイラはハードウェアループに関する情報のコード化もしなければならない。例えば、VLIWコンパイラはハードウェアループのエンドパケットとして(例えば、アセンブリ構文による”endloop”によって)マークされたパケットを入力するかもしれない。先行技術において、エンドパケットを識別する情報はエンドパケットの別個のヘッダ部分にコード化された。他の既知の方法には、エンドパケットであることを示すパケット内に別個のコード化された命令を有する方法がある。しかし、パケット命令のヘッダデータおよびト別個の終端はデータオーバヘッドおよびパケットの処理時間を増加させる。
【0018】
いくつかの実施例において、パケットのハードウェアループに対するエンドパケット情報はハードウェアループ内の1つ以上のパケットの1つ以上の命令内にコード化される。いくつかの実施例において、ループのエンドパケットを示す情報はエンドパケットの命令内にコード化される。従って、エンドパケット情報を含む別個のヘッダは、もはや必要ではない。また、エンドパケット情報は、エンドループ命令ではなくむしろ異なる形式の命令(例えばシフト、乗算、ロードなど)を特定する命令内にコード化される。従って、エンドパケットを示すことには別個のエンドループ命令は必要がない。
【0019】
図2に超長命令語(VLIW)計算機アーキテクチャ200の概念図を示す。VLIWアーキテクチャ200はメモリー210、処理ユニット230、およびメモリー210を処理ユニット230に接続する1つ以上のバス220を含む。
【0020】
メモリー210はデータおよび命令を(VLIWコンパイラによって生成されるVLIWパケットの形式であって、各VLIWパケットが1つ以上の命令を含むVLIWパケットの形式で)格納する。パケットの各命令はパケット内の第1の命令が通常はパケットの最後の命令より低いメモリーアドレスを有するメモリー210の特定のアドレスを有する。メモリーのアドレス指定方式は当業者には周知であり、ここでは詳細な検討はしない。メモリー210内の命令はバス220を経由して処理ユニット230にロードされる。各命令は通常は予め定められた幅の命令である。
【0021】
処理ユニット230はシーケンサ235、複数の実行ユニット245のための複数のパイプライン240、(複数の汎用レジスタを含む)汎用レジスタファイル250、および制御レジスタファイル260を含む。処理ユニット230は中央演算処理装置、マイクロプロセッサ、またはディジタル信号プロセッサ等を含むかもしれない。
【0022】
上で検討したように、各VLIWパケットは1つ以上の命令を含み、1パケット内の命令の最大数は通常は命令処理のための処理ユニット230で利用可能な、ALUのような実行パイプラインの数によって決定されている。通常、各命令は命令を処理するために必要な実行ユニットの形式に関する情報を含む。ここで各実行ユニットは特定の形式の命令(例えば、シフト、ロードなど)を処理できるだけである。したがって、特定の形式の命令を処理するために利用可能な特定の数の実行ユニットのみがある。従って、複数の命令はパケット内の命令の形式および利用可能な実行ユニットの形式に基づいて1つのパケットにグループ分けされ、その結果命令は並列に実行され得る。例えば、シフト型命令を処理できる利用可能な1実行ユニットとロード型命令を処理できる利用可能な2実行ユニットだけがある場合、2つのシフト型命令は同じパケットにグループ分けされないだろうし、また3つのロード型命令は同じパケットにグループ分けされないだろう。
【0023】
シーケンサ235はメモリー210から命令のパケットを入力し、各入力パケットの各命令に対する適切なパイプライン240/実行ユニット245を(命令に含まれる情報を用いて)決定する。パケットの各命令に対するこの決定をした後に、シーケンサ235は適切な実行ユニット245による処理のために命令を適切なパイプライン240へ入力する。
【0024】
命令を入力する各実行ユニット245は汎用レジスタファイル250を用いて命令を実行する。当業者に周知のように、汎用レジスタファイル250はレジスタアレイを含む。これは命令を実行するために必要なデータをメモリー210からロードするために用いられる。1つのパケットの命令が実行ユニット245によって実行された後に、結果として得られたデータは汎用レジスタファイル250に格納され、次にメモリー210にロードされ格納される。データはバス220を経由してメモリー210へ、およびメモリー210からロードされる。通常、1パケットの複数命令は1クロック周期内で複数の実行ユニット245によって並列に実行される。
【0025】
命令を実行するために、実行ユニット245は制御レジスタファイル260も用いるかもしれない。制御レジスタ260は通常、修飾子レジスタ、状態レジスタ、および述語レジスタのような特殊なレジスタのセットを含む。制御レジスタ260はループ計数(繰り返し計数)およびスタートループ(スタートパケット)アドレスのようなハードウェアループに関する情報を格納するために用いられ得る。制御レジスタ260に格納されたハードウェアループ情報は、いくつかの実施例において説明されるように、特定の繰り返し回数ハードウェアループを実行するためにコード化されたエンドループ(エンドパケット)情報に関連して用いられ得る。特に、エンドパケットに達すると(パケットの命令におけるコード化されたエンドループ情報で示されると)、ループ計数は減分され、ループ計数が正であればループはスタートパケットへ戻る。
【0026】
図3にコード化されたハードウェアループ情報を含むように指定されたパケットの命令300の概念図を示す。いくつかの実施例において、コード化されたハードウェアループ情報を含む指定された命令300は、元々はハードウェアループ情報を含んだ命令、またはハードウェアループを特定するために用いられた命令ではない(すなわちシフトまたはロード命令のような非ハードウェアループ命令であった)。命令300は第1ビット(0)と、最終ビット(N)と、命令の第1と最終ビットの間の1つ以上の予め定められたビット位置における1つ以上のビットにコード化されたエンドループ情報305とを含む複数のビットを含む。指定された命令を特定する残余のビット310はコード化されたハードウェアループ情報のビットのどちらの側にでも(すなわち前および後)配置されることに注意のこと。例えば、指定された命令がシフト命令の場合、シフト命令を特定するビットはコード化されたハードウェアループ情報のビットの前および後に配置される。
【0027】
いくつかの実施例において、エンドパケット情報は指定された命令300内へコード化される。この指定された命令300は、元々はエンドパケット情報を含まなかった命令、またはハードウェアループのエンドパケットを特定するために用いられた命令である。いくつかの実施例において、特定のパケットの指定された命令300にコード化されたエンドパケット情報は、その特定のパケットがハードウェアループのエンドパケットであることを(第1のバイナリーコードを用いて)示し、またはその特定のパケットがハードウェアループのエンドパケットでないことを(第2のバイナリーコードを用いて)示す(従って、先へ進み、次のパケットを処理することも示す)。例えば、予め定められたビット位置の2ビットバイナリーコード「10」はパケットがエンドパケットであることを示すかもしれず、また予め定められたビット位置の2ビットバイナリーコード「01」はパケットがハードウェアループのエンドパケットではないことを示すかもしれない。
【0028】
上で検討したように、パケット内の各命令はパケットの他の命令との相対的な特定の順序または位置(第1、第2、第3など)を有する。いくつかの実施例において、エンドループ情報はハードウェアループの各パケット内の(同じパケット内の他の命令の位置との相対的な)同じ予め定められた位置の命令(指定された命令と呼ばれる)内にコード化される。例えば、エンドループ情報はハードウェアループの各パケットの第1の命令内にコード化されるかもしれない。
【0029】
いくつかの実施例において、2つのハードウェアループ、すなわち特定の繰り返し回数実行されるべきパケットの第1のセットを含む第1のハードウェアループ、および特定の繰り返し回数実行されるべきパケットの第2のセットを含む第2のハードウェアループ、に関する情報が特定される。例えば、第1のハードウェアループは内部ループであるかもしれない。また第2のハードウェアループはその内部ループを含む外部ループであるかもしれない。また、第1および第2のハードウェアループは別々の独立したループであるかもしれない。これらの実施例において、第1のハードウェアループに関する情報はパケットの第1のセットの各パケットの同じ第1の予め定められた位置における命令内にコード化され、かつ、第2のハードウェアループに関する情報はパケットの第2のセットのパケットの各パケットの同じ第2の予め定められた位置における命令内にコード化される。例えば、第1のハードウェアループに対するエンドループ情報は第1のハードウェアループの各パケットの第1の命令(指定された命令)内にコード化されるかもしれず、かつ、第2のハードウェアループに対するエンドループ情報は第2のハードウェアループの各パケットの第2の命令(指定された命令)内にコード化されるかもしれない。
【0030】
いくつかの実施例において、第1のハードウェアループに対するエンドループ情報を含むパケットは2つ以上の命令を含む。そのようなパケットにただ1つの命令がある場合、少なくとも2つの命令となるようにNOP命令が加えられる。これらの実施例において、パケットの最後の命令は、1つ以上の予め定められたビット位置における1つ以上のビットにコード化された情報(エンド命令情報)を含む。このビットはそれがパケットの最後の命令であることを示す(また、従ってパケット長、すなわちパケットがいくつの命令を含むかを示す)。いくつかの実施例において、エンド命令情報はコード化されたハードウェアループ情報を有しない命令内にコード化され、コード化されたハードウェアループ情報のために予約された予め定められたビット位置にコード化される。
【0031】
図4に第1の命令(命令A)および第2の命令(命令B)を有する代表的パケット400の概念図を示す。図4の例において、各命令は32ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第15および第16ビット405および406(ビット番号14および15)にコード化される。各命令の残余のビット410(すなわち、第1から第14ビットおよび第17から第32ビット)は実効命令(例えば乗算操作、ロード操作など)を特定するために用いられる。他の実施例において、命令は他のビット幅を有しているかもしれない、および/またはコード化された情報は命令の他のビット内に含まれるかもしれない。図4の例において、第1のハードウェアループに関するエンドループ情報は第1の命令内にコード化され(例えば、ここでバイナリーコード「10」はパケット400がエンドパケットであることを示す)、エンド命令情報は最後の命令内にコード化される(例えば、ここでバイナリーコード「11」は命令Bがパケット400の最後の命令であることを示す)。
【0032】
いくつかの実施例において、第2のハードウェアループに対するエンドループ情報を(指定された命令内に)含むパケットは3つ以上の命令を含む。そのようなパケットにただ1つまたは2つの命令がある場合、少なくとも3つの命令となるようにNOP命令が加えられる。これらの実施例において、パケットの最後の命令は1つ以上の予め定められたビット位置における1つ以上のビットにコード化された情報(エンド命令情報)を含む。このビットはそれがパケットの最後の命令であることを示す(また、従ってパケット長、すなわちパケットがいくつの命令を含むかを示す)。いくつかの実施例において、エンド命令情報はコード化されたハードウェアループ情報を有しない命令内にコード化され、コード化されたハードウェアループ情報のために予約された予め定められたビット位置にコード化される。
【0033】
図5に第1の命令、(命令A)、第2の命令(命令B)、および第3の命令(命令C)を有する代表的パケット500の概念図を示す。図5の例において、各命令は32ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第15および第16ビット505および506にコード化される。各命令の残余のビット510は実効命令を特定するために用いられる。図5の例において、第1のハードウェアループに関するエンドループ情報は第1の命令内にコード化され、第2のハードウェアループに関するエンドループ情報は第2の命令内にコード化され(例えば、ここでバイナリーコード「10」はパケット500が第2のハードウェアループのエンドパケットであることを示す)、エンド命令情報は最後の命令内にコード化される。
【0034】
4つ以上の命令を含むパケットに関しては、コード化されたエンドループまたはエンドパケット情報を含むように指定されないパケット内の命令は、パケットの最後の命令を示すために用いられるコード以外の任意の符号でもよい無意味なバイナリーコードを(コード化されたエンドループおよびエンド命令情報のために予約された同じ予め定められたビット位置において)含むかもしれない。図6に4つ以上の命令(命令A、B、Cなど)を有する代表的パケット600の概念図を示す。図6の例において、各命令は32ビットを含む。ここで、エンドループまたはエンドパケット情報は命令の第15および第16ビット605および606にコード化される。各命令の残余のビット610は、実効命令を特定するために用いられる。図6の例において、第1および第2のハードウェアループに関するエンドループ情報は第1および第2の命令(命令AおよびB)内にコード化され、エンド命令情報は最後の命令内にコード化される。残余の命令(例えば、命令C)は通常は同じ予め定められたビット位置(例えば、第15および第16ビット)において(パケットの最後の命令を示すために用いられるコードを除く)任意のバイナリーコードを含んでも良い。これらのビット位置のコードは残余の命令においては意味がないであろうからである。図4から図6のパケット400、500、および600においてヘッダが含まれていないことに注意のこと。
【0035】
いくつかの実施例において、パケットのセットの各命令における同じ1つ以上の予め定められたビット位置はコード化されたエンドループ情報、エンドパケット情報、または無意味情報(ヌルコード)のために予約される。上記の図4から図6で示した例においては、(32ビット命令の)各命令の第15および第16ビットがこの形式の情報のために予約された。他の実施例においては、命令は他のビット幅を有しているかもしれない、および/またはコード化された情報は命令の他のビット位置内に含まれるかもしれない。各命令の残余のビット(すなわち、非予約ビット)は実効命令(例えば乗算操作、ロード操作など)を特定するために用いられる。
【0036】
図7に最大4つの命令を有するパケットに対する符号化されたエンドループの値およびエンド命令情報のすべての変形の代表的な表を示す。図7の例示的表において、以下に注意のこと。
【0037】
−命令Aはパケット内の(そのパケット内で最も低いメモリーアドレスを有する)第1の命令であり、命令Bはパケット内の(そのパケット内で2番目に低いメモリーアドレスを有する)第2の命令であり、命令Cはパケット内の(そのパケット内で2番目に高いメモリーアドレスを有する)第3の命令であり、命令Dはパケット内の(そのパケット内で最も高いメモリーアドレスを有する)第4の命令である。
【0038】
−エンドループ情報、エンド命令情報、および無意味情報は2ビットバイナリーコードとして各命令内の同じ予約されたビット位置「PP」にコード化される。
【0039】
−第1のハードウェアループに対するエンドループ情報は各パケットの第1の命令(命令A)内にコード化される。ここでバイナリーコード「10」はそのパケットがエンドパケットであることを示し、バイナリーコード「01」はそのパケットが第1のハードウェアループのエンドパケットではないことを示す。
【0040】
−第2のハードウェアループに対するエンドループ情報は各パケットの第2の命令(命令B)内にコード化される。ここでバイナリーコード「10」はそのパケットがエンドパケットであることを示し、バイナリーコード「01」はそのパケットが第2のハードウェアループのエンドパケットではないことを示す。
【0041】
−エンド命令情報は各パケットの最後の命令内にコード化される。ここでバイナリーコード「11」は、その命令がそのパケットの最後の命令であることを示す(従って、パケット長、すなわちパケットがいくつの命令を含むかも示す)。
【0042】
しかし、他の実施例において、パケットが最大4つより多い命令を有するかもしれない。またはエンドループ情報およびエンド命令情報が異なるビット数でコード化されるかもしれない。または第1のハードウェアループに対するエンドループ情報が第1の命令と異なる命令内にコード化されるかもしれない。または第2のハードウェアループに対するエンドループ情報が第2の命令と異なる命令内にコード化されるかもしれない。または異なるバイナリーコードがパケットがエンドパケットであるかないかを示すために用いられるかもしれない、または異なるバイナリーコードがパケットの最後の命令を示すために用いられるかもしれない。
【0043】
図8にハードウェアループ情報を1つ以上の命令内にコード化するための方法800のフローチャートを示す。いくつかの実施例において、方法800のいくつかのステップはハードウェアまたはソフトウェアで、例えばVLIWコンパイラで実施される。方法800のステップは例示目的だけのためのものであり、ステップの順序または数は他の実施例においては異なるか、または入れ替えられるかもしれない。
【0044】
特定の回数実行されるべき(すなわち特定の繰り返し回数実行される)命令のセットを特定するハードウェアループ命令を含む複数の命令を特定するプログラム用コードが(805で)生成されると、方法800が始まる。この命令セットはハードウェアループを含む。
【0045】
次に、プログラムコード内の複数命令は(810で)1つ以上の命令のパケットにグループ分けされる。これらの命令は同じパケットの命令が依存性を持たないように、かつ並列に実行可能なように)グループ分けされる。ハードウェアループの命令のセットは特定の回数実行されるべきパケットのセットを含むハードウェアループを生成するためにパケットにグループ分けされる。ここでハードウェアループのエンドパケットは標識(例えば、アセンブリ構文の”endloop”)によってマークされる。
【0046】
次に、命令のパケット(ソースコード)は(815で)バイナリーコードの形式でコード化された命令のパケット(オブジェクトコード)内へコンパイルされる。ハードウェアループのエンドパケット情報をコード化するとき、方法800はエンドパケット情報をハードウェアループにおける1つ以上のパケットの1つ以上の命令内にコード化する。いくつかの実施例において、第1のループに関するエンドループ情報はパケット内の第1の予め定められた位置において命令内にコード化され、第2のループに関するエンドループ情報はパケット内の第2の予め定められた位置において命令内にコード化される。エンド命令情報はコード化されたハードウェアループ情報を有しないパケットの少なくとも1つの命令内にコード化される。ここでエンド命令情報はコード化されたハードウェアループ情報のために予約された同じ予め定められたビット位置にコード化される。次に、方法800は終了する。
【0047】
図9にいくつかの実施例においてディジタル信号プロセッサ(DSP)に用いられる超長命令語(VLIW)計算機アーキテクチャ900の概念図を示す。VLIWアーキテクチャ900は命令ロードバス920を備えたメモリー910およびDSP930、データロードバス922、並びにメモリー910とDSP930を接続するデータロード/格納バス924を含む。
【0048】
メモリー910はデータおよび(1つから4つの命令を有するVLIWパケットの形式の)命令を格納する。メモリー910内の命令は命令ロードバス920を経由してDSP930にロードされる。いくつかの実施例において、各命令は4ワード幅を有する128ビットの命令ロードバス920を経由してDSP930にロードされる32ビットのワード幅を有する。いくつかの実施例において、メモリー910は統合型バイトアドレス可能メモリーであり、命令およびデータ双方を格納する32ビットのアドレス空間を有し、リトルエンディアンモードで動作する。
【0049】
DSP930はシーケンサ935、4つの論理実行ユニット945のための4つのパイプライン940、(複数の汎用レジスタを含む)汎用レジスタファイル950、および制御レジスタファイル960を含む。通常は、利用可能な4つのパイプライン940がある場合、プログラマから見ると、命令処理のために利用可能な4つの「スロット」がある。しかし、ハードウェアから見ると、分岐型命令を処理するために利用可能な付加的実行ユニットがある。この付加的実行ユニットは「スロット」のサブセットから発行されるかもしれない。シーケンサ935はメモリー910から命令のパケットを入力し、各入力パケットの各命令のための適切なパイプライン940/実行ユニット945を(命令に含まれる情報を用いて)決定する。パケットの各命令に対するこの決定をした後に、シーケンサ935は適切な実行ユニット945による処理のために命令を適切なパイプライン940へ入力する。
【0050】
実行ユニット945はベクトルシフトユニット、(乗算命令のための)ベクトルMACユニット、ロードユニット、およびロード/格納ユニットを含む。ベクトルシフトユニットは、Sタイプ(シフトおよびビット操作)、A64タイプ(複素演算)、A32タイプ(単純演算)、Jタイプ(フロー変更またはジャンプ/分岐)、およびCRタイプ(制御レジスタを含む)命令のようなシフト命令を実行する。ベクトルMACユニットは、Mタイプ(乗算)、A64タイプ、A32タイプ、Jタイプ、およびJRタイプ(レジスタを含むフロー変更命令)命令のような乗算命令を実行する。ロードユニットはメモリー910から汎用レジスタファイル950へデータをロードし、読み込み、さらにロードタイプおよびA32タイプの命令を実行する。ロード/格納ユニットは汎用レジスタファイル950からメモリーへデータを読み戻し、格納し、さらにロードタイプ、格納タイプ、およびA32タイプの命令を実行する。付加的に、各実行ユニット945は通常は多くの一般的演算および論理動作を実行できる。
【0051】
命令を入力する各実行ユニット945は4つの実行ユニット945によって共有される汎用レジスタファイル950を用いて命令を実行する。いくつかの実施例において、汎用レジスタファイル950は複数の32ビットレジスタを含む。これらは複数の単一レジスタとして、または並んだ64ビットペアとしてアクセスされ得る(その結果命令は32ビットまたは64ビットの値で動作できる)。命令が必要とするデータは64ビットのデータロードバス922を経由して汎用レジスタファイル950にロードされる。パケットの命令が実行ユニット945によって実行された後に、結果として得られたデータは汎用レジスタファイル950に格納され、次に64ビットデータロード/格納バス924を経由してメモリー910にロードされ、格納される。通常は、パケットの1つから4つの命令は4実行ユニット945によって並列に1クロック周期内で実行される(ここで最大1つの命令が各クロック周期に対してパイプライン940によって入力され、処理される)。
【0052】
命令を実行するために、実行ユニット945は制御レジスタファイル960も用いるかもしれない。制御レジスタファイル960は修飾子レジスタ、状態レジスタ、および述語レジスタのような特殊なレジスタのセットを含む。制御レジスタ960はループ計数(繰り返し計数)およびスタートループ(スタートパケット)アドレスのようなハードウェアループに関する情報を格納するために用いられ得る。制御レジスタ960に格納されたハードウェアループ情報は、いくつかの実施例において説明したように、特定の繰り返し回数ハードウェアループを実行するために、コード化されたエンドループ(エンドパケット)情報に関連して用いられ得る。
【0053】
当業者は情報および信号が種々の異なる技術および手法のいずれかを用いて表されるかもしれないことを理解するだろう。例えば、上の記述中に参照されるかもしれないデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光学場もしくは光粒子、またはそれらの任意の組合せで表されるかもしれない。
【0054】
当業者はここに開示された実施例に関連して説明された種々の例示的論理ブロック、モジュール、回路およびアルゴリズムのステップが、電子的ハードウェア、計算機ソフトウェア、またはその双方の組合せとして実施されるかもしれないことをさらに認識するだろう。ハードウェアとソフトウェアのこの互換性を明確に示すために、種々の例示的構成要素、ブロック、モジュール、回路、およびステップは、ここまで、それらの機能の面から一般的に説明してきた。そのような機能がハードウェアまたはソフトウェアとして実施されるかどうかは、全体のシステムに課せられた特定の用途および設計制約に依存する。当業者は説明した機能を各特定の用途に対して異なる方法で実施するかもしれないが、そのような実施の決定が本発明の範囲からの逸脱を引き起こすと解釈されるべきではない。
【0055】
ここに開示された実施例に関して説明された例示的論理ブロック、モジュール、および回路は、汎用プロセッサ、ディジタル信号プロセッサ(DSP)、特定用途向集積回路(ASIC)、プログラマブルゲートアレイ(FPGA)、もしくは他のプログラム可能論理回路、個別ゲートもしくはトランジスタ論理、個別ハードウェア部品、またはここに説明した機能を実行するように設計されたそれらの任意の組合せで実施または実行されるかもしれない。汎用プロセッサはマイクロプロセッサであるかもしれないが、代替的には、プロセッサは任意の通常のプロセッサ、制御器、マイクロ制御器または状態機械であるかもしれない。プロセッサはまた、計算デバイスの組合せ、例えばDSPとマイクロプロセッサ、複数のマイクロプロセッサ、DSPコアと連係した1つ以上のマイクロプロセッサ、または他のそのような構成として実施されるかもしれない。
【0056】
ここに開示された実施例に関して説明された方法またはアルゴリズムのステップは、直接ハードウェアで、プロセッサで実行されるソフトウェアモジュールで、またはその2つの組合せで具体化されるかもしれない。ソフトウェアモジュールはRAMメモリー、フラッシュメモリー、ROMメモリー、EPROMメモリー、EEPROMメモリー、レジスタ、ハードディスク、可搬形ディスク、CD−ROM、または当業者に既知の任意の形式の記憶媒体の中にあるかもしれない。代表的記憶媒体はプロセッサが情報を記憶媒体から読み出しおよび情報を記憶媒体に書き込むことができるようにプロセッサに接続される。代替的には、記憶媒体はプロセッサの構成部品であるかもしれない。プロセッサおよび記憶媒体はASIC内にあるかもしれない。ASICはユーザ端末内にあるかもしれない。代替的に、プロセッサおよび記憶媒体は個別部品としてユーザ端末内にあるかもしれない。
【0057】
開示された実施例のこれまでの説明は、いかなる当業者も本発明を製造しまたは使用することを可能にするように提供されている。これらの実施例への種々の変形は当業者に容易に明らかになるだろう。また、ここに定義した一般的原理は本発明の精神または範囲から逸脱することなく他の実施例に適用されるかもしれない。したがって、本発明はここに示した実施例に限定されることを意図されていず、ここに開示された原理および新規な特徴と矛盾しない最も広い範囲に一致するということである。

【特許請求の範囲】
【請求項1】
格納された命令を有する計算機可読媒体を有する計算機プログラム製品であって、前記命令は、実行されると、特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも1つのハードウェアループに関する情報をコード化し、前記パケットの各々が1つ以上の命令を含んでおり、前記命令の各々がビットのセットを含んでおり、
ハードウェアループ情報をパケットの前記セット内の少なくとも1つの指定された命令の1つ以上の予約されたビット位置における1つ以上のビットにコード化するための複数セットの命令を含み、前記少なくとも1つの指定された命令がハードウェアループを特定するために用いられない命令を含む、計算機プログラム製品。
【請求項2】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも1つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項1に記載の計算機プログラム製品。
【請求項3】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項2に記載の計算機プログラム製品。
【請求項4】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項1に記載の計算機プログラム製品。
【請求項5】
各命令が32ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第15および第16ビットにコード化され、かつ
指定された命令の第1から第14ビットおよび第17から第32ビットが、指定された命令を特定する、請求項4に記載の計算機プログラム製品。
【請求項6】
パケットのセットが、超長命令語(VLIW)パケットのセットであり、かつ
ハードウェアループ情報が、VLIWパケットの前記セットの各VLIWパケットの同じ予め定められた位置における命令内にコード化される、請求項1に記載の計算機プログラム製品。
【請求項7】
少なくとも1つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第1のセットを含む第1のループと、特定の繰り返し回数実行されるべきパケットの第2のセットを含む第2のループとを含み、かつ
第1のループに関するハードウェアループ情報が、パケットの前記第1のセットの各パケットの第1の予め定められた位置における命令内にコード化され、かつ
第2のループに関するハードウェアループ情報が、パケットの前記第2のセットの各パケットの第2の予め定められた位置における命令内にコード化される、請求項1に記載の計算機プログラム製品。
【請求項8】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも1つの命令内にコード化するための命令のセットであって、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、命令のセットをさらに含む、請求項1に記載の計算機プログラム製品。
【請求項9】
特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも1つのハードウェアループに関する情報をコード化するための方法であって、前記パケットの各々が1つ以上の命令を含んでおり、
前記命令の各々がビットのセットを含んでおり、ハードウェアループ情報をパケットの前記セット内の少なくとも1つの指定された命令の1つ以上の予約されたビット位置における1つ以上のビットにコード化するための複数セットの命令を含み、前記少なくとも1つの指定された命令がハードウェアループを特定するために用いられない命令を含む方法。
【請求項10】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも1つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項9に記載の方法。
【請求項11】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、 請求項10に記載の方法。
【請求項12】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項9に記載の方法。
【請求項13】
各命令が32ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第15および第16ビットにコード化され、かつ
指定された命令の第1から第14ビットおよび第17から第32ビットが、指定された命令を特定する、請求項12に記載の方法。
【請求項14】
パケットのセットが、超長命令語(VLIW)パケットのセットであり、かつ
ハードウェアループ情報が、VLIWパケットの前記セットの各VLIWパケットの同じ予め定められた位置における命令内にコード化される、請求項9に記載の方法。
【請求項15】
少なくとも1つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第1のセットを含む第1のループと、特定の繰り返し回数実行されるべきパケットの第2のセットを含む第2のループとを含み、かつ
第1のループに関するハードウェアループ情報が、パケットの前記第1のセットの各パケットの第1の予め定められた位置における命令内にコード化され、かつ
第2のループに関するハードウェアループ情報が、パケットの前記第2のセットの各パケットの第2の予め定められた位置における命令内にコード化される、請求項9に記載の方法。
【請求項16】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも1つの命令内にコード化するための方法であって、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項9に記載の方法。
【請求項17】
1つ以上の命令を含むパケットを格納するためのメモリーであって、前記命令の各々はビットのセットを含んでおり、前記命令は特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも1つのハードウェアループを特定しており、ハードウェアループ情報が、パケットの前記セットの少なくとも1つの指定された命令の1つ以上の予約されたビット位置における1つ以上のビットへコード化され、前記少なくとも1つの指定された命令が、ハードウェアループを特定するために用いられない1つの命令を含む、メモリーと、
命令の前記パケットを入力し実行するための、前記メモリーに接続され、パケットの前記命令が並列に処理される処理ユニットとを含む、命令処理のための装置。
【請求項18】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも1つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項17に記載の装置。
【請求項19】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項18に記載の装置。
【請求項20】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項17に記載の装置。
【請求項21】
各命令が32ビットを含み、かつ
ハードウェアループ情報が指定された命令の第15および第16ビットにコード化され、かつ
指定された命令の第1から第14ビットおよび第17から第32ビットが指定された命令を特定する、請求項20に記載の装置。
【請求項22】
パケットのセットが、超長命令語(VLIW)パケットのセットであり、かつ
ハードウェアループ情報が、VLIWパケットの前記セットの各VLIWパケットの同じ予め定められた位置における命令内にコード化される、請求項17に記載の装置。
【請求項23】
少なくとも1つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第1のセットを含む第1のループと、特定の繰り返し回数実行されるべきパケットの第2のセットを含む第2のループとを含み、かつ
第1のループに関するハードウェアループ情報が、パケットの前記第1のセットの各パケットの第1の予め定められた位置における命令内にコード化され、かつ
第2のループに関するハードウェアループ情報が、パケットの前記第2のセットの各パケットの第2の予め定められた位置における命令内にコード化される、請求項17に記載の装置。
【請求項24】
エンド命令情報が、コード化されたハードウェアループ情報を有しないパケットのセットの少なくとも1つの命令内にコード化され、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項17に記載の装置。
【請求項25】
特定の繰り返し回数実行されるべきパケットのセットを含む少なくとも1つのハードウェアループに関する情報をコード化するように構成された装置であって、前記パケットの各々が1つ以上の命令を含んでおり、前記命令の各々がビットのセットを含んでおり、
ハードウェアループ情報をパケットの前記セット内の少なくとも1つの指定された命令の1つ以上の予約されたビット位置における1つ以上のビットにコード化するための手段を含み、前記少なくとも1つの指定された命令が、ハードウェアループを特定するために用いられない命令を含む装置。
【請求項26】
コード化されたハードウェアループ情報が、ハードウェアループパケット情報の終端を含み、かつ
少なくとも1つの指定された命令が、ハードウェアループのエンドパケットを特定するために用いられない命令を含む、請求項25に記載の装置。
【請求項27】
特定のパケットの指定された命令にコード化されたループ情報の終端が、前記特定のパケットがハードウェアループのエンドパケットであることを示すか、または前記特定のパケットがハードウェアループのエンドパケットでないことを示す、請求項26に記載の装置。
【請求項28】
ハードウェアループ情報が、指定された命令を特定するビットがコード化されたハードウェアループ情報のビットの前および後にあるように、指定された命令のビットの中にコード化される、請求項25に記載の装置。
【請求項29】
各命令が32ビットを含み、かつ
ハードウェアループ情報が、指定された命令の第15および第16ビットにコード化され、かつ
指定された命令の第1から第14ビットおよび第17から第32ビットが、指定された命令を特定する、請求項28に記載の装置。
【請求項30】
パケットのセットが、超長命令語(VLIW)パケットのセットであり、かつ
ハードウェアループ情報が、VLIWパケットの前記セットの各VLIWパケットの同じ予め定められた位置における命令内にコード化される、請求項25に記載の装置。
【請求項31】
少なくとも1つのハードウェアループが、特定の繰り返し回数実行されるべきパケットの第1のセットを含む第1のループと、特定の繰り返し回数実行されるべきパケットの第2のセットを含む第2のループとを含み、かつ
第1のループに関するハードウェアループ情報が、パケットの前記第1のセットの各パケットの第1の予め定められた位置における命令内にコード化され、かつ
第2のループに関するハードウェアループ情報が、パケットの前記第2のセットの各パケットの第2の予め定められた位置における命令内にコード化される、請求項25に記載の装置。
【請求項32】
エンド命令情報をコード化されたハードウェアループ情報を有しないパケットのセットの少なくとも1つの命令内にコード化するための手段をさらに含み、前記エンド命令情報はコード化されたハードウェアループ情報のために予約された同じビット位置にコード化され、コード化されたエンド命令情報が、命令がパケットの最後の命令であるかどうかを示しおよびパケットの長さを示す、請求項25に記載の装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−101638(P2013−101638A)
【公開日】平成25年5月23日(2013.5.23)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−277649(P2012−277649)
【出願日】平成24年12月20日(2012.12.20)
【分割の表示】特願2009−509937(P2009−509937)の分割
【原出願日】平成19年4月20日(2007.4.20)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】