(57)【要約】【課題】所定のデコーダ入力命令配置構造に従ってプログラム命令をコンパイルするためのコンパイラを提供する。【解決手段】コンパイラは、デコーダへの入力のための複数のプログラム命令を有する配列を生成するために、ソースコードを処理するように動作可能であるプログラム命令配列生成部を備える。少なくとも１つのプログラム命令は、プログラムメモリの記憶領域で再配列される。記憶領域は、関連するメモリアドレス及びオフセット値を有する。オフセット値は、メモリアドレス内のプログラム命令の開始位置を与える。プログラム命令の再配列は、デコーダ入力命令配置構造を達成するのに必要とされる複数のプログラム命令の命令ユニットの操作が、もし再配列が実行されなかった場合に必要とされるであろう操作より複雑にならないような再配列である。【選択図】図８Ａ
2007102792.tif 000002
【特許請求の範囲】
【請求項１】
所定のデコーダ入力命令配置構造に従ってプログラム命令をコンパイルするためのコンパイラであって、
前記コンパイラが、デコーダへの入力のための複数のプログラム命令を有する配列を生成するために、ソースコードを処理するように動作可能であるプログラム命令配列生成部を備え、
前記複数のプログラム命令の内の少なくとも１つが、少なくとも２つの命令ユニットの命令長を有しており、
前記少なくとも１つのプログラム命令が、プログラムメモリ内にそれぞれの記憶領域を有していると共に、
前記コンパイラが、再配列されたプログラム命令を生成するために、前記記憶領域内で、前記少なくとも１つのプログラム命令の前記少なくとも２つの命令ユニットを再配列するように動作可能であるプログラム命令再フォーマット部を備え、
前記記憶領域が、関連するメモリアドレス及びオフセット値を有し、
前記オフセット値が、前記メモリアドレス内の前記プログラム命令の開始位置を与え、
前記再配列は、前記デコーダ入力命令配置構造を達成するのに必要とされる前記複数のプログラム命令の命令ユニットの操作が、もし再配列が実行されなかった場合に必要とされるであろう操作より複雑にならないような再配列である
ことを特徴とするコンパイラ。
【請求項２】
前記少なくとも１つのプログラム命令の前記少なくとも２つの命令ユニットの前記再配列は、前記命令ユニットの内の少なくとも１つが前記所定のデコーダ入力命令配置構造におけるそのそれぞれの位置に対応する位置にあるような再配列である
ことを特徴とする請求項１に記載のコンパイラ。
【請求項３】
前記プログラムメモリが、少なくとも２つのメモリバンクを備えると共に、
前記少なくとも２つの命令ユニットの各々が、前記少なくとも２つのメモリバンクの内のそれぞれのメモリバンクに記憶される
ことを特徴とする請求項１に記載のコンパイラ。
【請求項４】
前記少なくとも２つのメモリバンクの各々が、関連するメモリバンクデータ幅を有していると共に、
前記少なくとも２つの命令ユニットの各々のデータ幅が、前記メモリバンクデータ幅に等しい
ことを特徴とする請求項３に記載のコンパイラ。
【請求項５】
前記プログラム命令再フォーマット部により再フォーマットされた命令の前記命令ユニット配列は、前記記憶領域が与えられて前記所定のデコーダ入力命令配置構造におけるその所定の位置に対応する位置に配置され得る前記再フォーマットされたプログラム命令の各命令ユニットが、前記所定の位置に配置される配列である
ことを特徴とする請求項１に記載のコンパイラ。
【請求項６】
もし前記再フォーマットされたプログラム命令の命令ユニットが、前記メモリスペースが与えられても所定の位置に配置されることができない場合、前記プログラム命令再フォーマット部が、前記命令ユニットを、複数の再フォーマットされたプログラム命令におけるその命令ユニットの代替位置の総数を削減する位置に配置するように動作可能である
ことを特徴とする請求項５に記載のコンパイラ。
【請求項７】
前記プログラム命令再フォーマット部が、複数の再フォーマットされたプログラム命令のそれぞれを生成するために、複数のプログラム命令を再フォーマットするように動作可能である
ことを特徴とする請求項１に記載のコンパイラ。
【請求項８】
前記複数のプログラム命令が、可変の命令長を有するプログラム命令を含む
ことを特徴とする請求項７に記載のコンパイラ。
【請求項９】
前記所定のデコーダ入力命令配置構造が、ビッグエンディアン配置構造及びリトルエンディアン配置構造の内の１つである
ことを特徴とする請求項１に記載のコンパイラ。
【請求項１０】
命令デコーダへの入力のための所定のデコーダ入力命令配置構造に従って前記再フォーマットされたプログラム命令を整列させるために、プログラムメモリから前記再フォーマットされたプログラム命令を読み込むと共に、請求項１に記載のコンパイラによって生成された前記再フォーマットされたプログラム命令の位置を少なくとも１つシフトするように動作可能であるプログラム命令アライナであって、
前記プログラム命令アライナが、
複数のレジスタフィールドを有する命令レジスタと、
前記再フォーマットされたプログラム命令に関連付けられた前記命令長及び前記オフセット値を受信するように動作可能である制御入力端子と、
複数のシフタフィールドを有すると共に、前記複数のレジスタフィールドの内の少なくともいくつかと前記複数のシフタフィールドの内の少なくともいくつかとの間の複数の接続を提供するように動作可能である一連のマルチプレクサを有するシフタとを備え、
前記命令レジスタが、前記再フォーマットされたプログラム命令を記憶するように動作可能であり、
前記複数のシフタフィールドの内のいくつかが、前記複数のレジスタフィールドから、前記再フォーマットされたプログラム命令の前記少なくとも２つの命令ユニットを受信するように動作可能であり、
前記シフタが、前記所定のデコーダ入力命令配置構造を生成するために、前記命令長及び前記オフセット値、前記再フォーマットされたプログラム命令の少なくとも一部分に基づいてシフトするように動作可能であり、
前記複数の接続は、前記複数のレジスタフィールドの内の少なくとも１つが、前記複数のシフタフィールドのサブセットだけに接続されるような接続であると共に、
前記再フォーマットされた命令が、前記所定のデコーダ入力命令配置構造を生成するために前記レジスタフィールドの内の少なくとも１つから前記サブセットを除く前記複数のシフタフィールドの内の１つに対する接続が必要とされないような前記命令ユニット配列を有する
ことを特徴とするプログラム命令アライナ。
【請求項１１】
前記シフタが、複数の命令ユニット配列のそれぞれに対応する複数の再フォーマットされたプログラム命令の各々をシフトするように動作可能であると共に、
前記サブセットが、前記複数の命令ユニット配列によって決定される
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１２】
前記複数の命令ユニット配列は、前記シフタが、前記複数のシフタフィールドの一方の端と前記複数のシフタフィールドの反対側の端との間で一方向にシフトすることによって前記所定のデコーダ入力命令配置構造を生成するように動作可能であるような配列である
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１３】
前記再フォーマットされたプログラム命令の前記命令ユニット配列は、前記命令ユニットの内の１つが前記所定のデコーダ入力命令配置構造におけるそのそれぞれの位置に対応する位置にあるような配列である
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１４】
前記再フォーマットされた命令の前記命令ユニット配列は、前記所定のデコーダ入力命令配置構造におけるその所定の位置に対応する位置に配置され得る前記再フォーマットされたプログラム命令の各命令ユニットが、前記所定の位置に配置されるような配列である
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１５】
前記複数の命令ユニット配列は、前記サブセットが、前記複数の再フォーマットされたプログラム命令の各々に関して前記所定のデコーダ入力命令配置構造が獲得されることを可能にする最小のサブセットであるように制限される
ことを特徴とする請求項１１に記載のプログラム命令アライナ。
【請求項１６】
もし、前記再フォーマットされたプログラム命令の特定の命令ユニットが前記所定の位置に配置されない場合、それは、前記複数の再フォーマットされたプログラム命令における前記特定の命令ユニットの代替え位置の総数を削減する位置に配置され、それにより前記サブセットを削減する
ことを特徴とする請求項１５に記載のプログラム命令アライナ。
【請求項１７】
前記複数のシフタフィールドの内の少なくとも１つのデータ幅は、前記複数のレジスタフィールドの内の対応するもののデータ幅に等しい
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１８】
前記複数のシフタフィールドが、数の点で前記複数のレジスタフィールドと等しい
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項１９】
前記再フォーマットされたプログラム命令が、命令長指定部分を含むと共に、
前記命令長指定部分が、前記制御入力に供給するための前記命令長を抽出するために使用される
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項２０】
前記再フォーマットされたプログラム命令のコピーを格納すると共に、前記制御入力に供給するために、前記命令長指定部分から前記命令長を抽出するように動作可能である命令長抽出レジスタを備える
ことを特徴とする請求項１９に記載のプログラム命令アライナ。
【請求項２１】
前記命令長指定部分が、前記少なくとも２つの命令ユニットの各々におけるフラグビットに対応する
ことを特徴とする請求項１９に記載のプログラム命令アライナ。
【請求項２２】
前記シフタが、前記命令長指定部分を除いた前記再フォーマットされたプログラム命令の一部分を受信するように動作可能である
ことを特徴とする請求項１９に記載のプログラム命令アライナ。
【請求項２３】
前記シフタが、少なくとも１つの入力が除去された状態のフルクロスバーシフタとして実現される
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項２４】
前記シフタが、複数の２入力マルチプレクサを備える対数シフタとして実現されると共に、標準の対数シフタより少なくとも１つ少ない２入力マルチプレクサを備える対数シフタとして実現される
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項２５】
前記シフタが、前記標準の対数シフタと比較して少なくとも１つの二重化されたマルチプレクサを備える
ことを特徴とする請求項２４に記載のプログラム命令アライナ。
【請求項２６】
前記所定のデコーダ入力命令配置構造が、ビッグエンディアン配置構造及びリトルエンディアン配置構造の内の１つである
ことを特徴とする請求項１０に記載のプログラム命令アライナ。
【請求項２７】
所定のデコーダ入力命令配置構造に従ってプログラム命令をコンパイルする方法であって、
前記方法が、デコーダへの入力のための複数のプログラム命令を有する配列を生成するために、ソースコードを処理する段階を含み、
前記複数のプログラム命令の内の少なくとも１つが、少なくとも２つの命令ユニットの命令長を有しており、
前記少なくとも１つのプログラム命令が、プログラムメモリ内にそれぞれの記憶領域を有していると共に、
前記方法が、再配列されたプログラム命令を生成するために、前記記憶領域内で、前記少なくとも１つのプログラム命令の前記少なくとも２つの命令ユニットを再配列する段階を含み、
前記記憶領域が、関連するメモリアドレス及びオフセット値を有し、
前記オフセット値が、前記メモリアドレス内の前記プログラム命令の開始位置を与え、
前記再配列は、前記デコーダ入力命令配置構造を達成するのに必要とされる前記複数のプログラム命令の命令ユニットの複数の操作が、もし再配列が実行されなかった場合に必要とされるであろう複数の操作より複雑にならないような再配列である
ことを特徴とする方法。
【請求項２８】
実行されたときに請求項２７に基づく方法の段階を遂行するコンピュータ読み取り可能な命令を含むコンピュータ読み取り可能な記憶媒体を保持する
ことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関するものである。更に特に、本発明は、可変長プログラム命令の実行をサポートするデータ処理システム、及び可変長プログラム命令のためのコンパイラに関するものである。
【背景技術】
【０００２】
可変長プログラム命令の実行をサポートするデータ処理装置のカテゴリの例は、データ処理動作の高度な並列実行を提供する超長命令語（very long instruction word：ＶＬＩＷ）プロセッサである。そのようなシステムは、複数のデータ経路要素を有していると共に、ＶＬＩＷプログラム命令によって指定されるそれぞれのデータ処理動作を並列に実行するように独立して動作可能である。
【０００３】
これらのデータ処理システムにおいて、コンパイラは、少なくとも１つのプログラム命令の配列を生成するように動作可能である。プログラム命令の配列は、プログラムメモリに格納されると共に、実行の前に、各プログラム命令は、命令レジスタに読み取られ、その後、プログラム命令によって指定されたデータ処理動作を実行するために、データ処理回路構成を制御するための制御信号を生成するデコーダに供給される。一般的に、プログラム命令は、所定のフォーマットに従ってデコーダに供給されることになる。プログラム命令の配置構造は、デコーダへの入力のために適切に並べられるようにオフセット値に従ってプログラム命令をシフトするプログラム命令アライナ（program instruction aligner）を使用して実現される。もし多くの異なる命令長がサポートされる場合、その場合に、可変長命令を整列させるために使用されるプログラム命令アライナは、大きく、そして複雑になり得る。例えば、一般的に３２ビットのプログラム命令ユニットを１個〜８個の範囲で有する命令長を扱うことに適当なプログラム命令アライナは、結局データ処理ユニットのゲート−カウントの約１０％になり得る５０００のゲートを必要とする。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
もしプログラム命令が１からＮユニットまでの長さで変化し得る場合、その場合に、フルクロスバー（full cross-bar）プログラム命令アライナは、Ｎ個のプログラム命令ユニットを、１からＮの範囲にあるＯのオフセットに関して循環（rotate）させるために、一般的にＮ＊Ｎマルチプレクサ入力（すなわち、Ｎ入力をそれぞれ有するＮ個のマルチプレクサ）を必要とすることになる。プログラム命令アライナの対数尺度のシフタの実装は、複雑さを“Ｎ＊Ｎ”から“Ｎ＊Ｌｏｇ２（Ｎ）”まで減少させることを達成するために、フルクロスバーに対する代替として使用され得る。しかしながら、可変長プログラム命令の実行を更に能率的にサポートするために、更にプログラム命令アライナの複雑さを減少させるという要求がある。
【課題を解決するための手段】
【０００５】
第１の特徴によれば、本発明は、所定のデコーダ入力命令配置構造に従ってプログラム命令をコンパイルするためのコンパイラを提供すると共に、前記コンパイラが、デコーダへの入力のための複数のプログラム命令を有する配列を生成するために、ソースコードを処理するように動作可能であるプログラム命令配列生成部を備え、前記複数のプログラム命令の内の少なくとも１つが、少なくとも２つの命令ユニットの命令長を有しており、前記少なくとも１つのプログラム命令が、プログラムメモリ内にそれぞれの記憶領域を有していると共に、前記コンパイラが、再配列されたプログラム命令を生成するために、前記記憶領域内で、前記少なくとも１つのプログラム命令の前記少なくとも２つの命令ユニットを再配列するように動作可能であるプログラム命令再フォーマット部を備え、前記記憶領域が、関連するメモリアドレス及びオフセット値を有し、前記オフセット値が、前記メモリアドレス内の前記プログラム命令の開始位置を与え、前記再配列は、前記デコーダ入力命令配置構造を達成するのに必要とされる前記複数のプログラム命令の命令ユニットの操作が、もし再配列が実行されなかった場合に必要とされるであろう操作より複雑にならないような再配列であることを特徴とする。
【０００６】
本発明は、それに従ってプログラム命令がプログラムメモリに格納される命令ユニット配列は、所定のデコーダ入力命令配置構造とかなり異なる可能性があり、それは、命令ユニットがプログラムメモリから読み取られた後で、命令ユニットをデコーダへの入力のための適切な配置構造にシフトするために、複雑なプログラム命令アライナ回路構成が必要とされることを意味すると認識する。デコーダに入力されるために、複数のプログラム命令の内の少なくとも１つのプログラム命令の命令ユニットの再配列が遂行される。その再配列は、プログラムメモリ内のその命令に割当てられた記憶領域の中で遂行される。このように、少なくとも１つの命令ユニットは、デコーダへの入力のために、更に適切に位置決めされ得る。その再配列は、デコーダ入力命令配置構造を達成するのに必要とされる複数のプログラム命令の命令ユニットの操作が、もし再配列が実行されなかった場合に必要とされるであろう操作より複雑にならないような再配列である。これは、プログラム命令の位置合わせ回路構成のサイズ、及び複雑さを減少させ、そして、電力消費を減少させる。
【０００７】
コンパイルされたプログラム命令に関して実行されるべき位置合せの複雑さを減少させるために、コンパイラによって特定のプログラム命令に関して実行される再配列は、必ずしも命令ユニットを、その位置が所定のデコーダ入力命令配置構造におけるそのそれぞれの最終位置に対応するように整列させる必要はないということが認識されることになる。実際には、もし命令ユニットが、コンパイラによって、所定のデコーダ入力命令配置構造におけるその必要とされる最終位置に対応する位置において出力されない場合に、コンパイラによって出力される一群のプログラム命令を所定のデコーダ入力命令配置構造に配置するために実行されることを必要とされる配置構造の数及び種類は、更に削減され得る。それどころか、再配列されたプログラム命令の（例えば、異なる命令幅、及び特定のアライナ幅に関する全ての可能な命令ユニット配列、及びオフセットの）グループ特質は、要求されたフォーマットでデコーダへ入力される前にコンパイルされたプログラム命令を整列させるのに必要とされるアライナの複雑さを減少させるように配置され得る。複雑さの減少は、例えば、命令をコンパイラによって出力された状態に保つレジスタのレジスタフィールドと、デコーダへの入力の前に、所定のデコーダ入力命令配置構造において対応するプログラム命令を保持するレジスタのレジスタフィールドとの間のマルチプレクサ入力の数を削減するためであり得る。しかしながら、一実施例において、少なくとも１つのプログラム命令の少なくとも２つの命令ユニットの再配列は、命令ユニットの内の少なくとも１つが、所定のデコーダ入力命令配置構造におけるそのそれぞれの位置に対応する位置にあるような再配列である。
【０００８】
一実施例において、プログラムメモリは、少なくとも２つのメモリバンクを備えると共に、少なくとも２つの命令ユニットの各々は、少なくとも２つのメモリバンクの内のそれぞれのメモリバンクに記憶される。一実施例において、少なくとも２つのメモリバンクの各々は、関連するメモリバンクデータ幅を有していると共に、少なくとも２つの命令ユニットの各々のデータ幅は、メモリバンクデータ幅に等しい。各命令ユニットがそれぞれのメモリバンクと容易に結合されることができるので、これは、更に単純な制御構造を提供する。
【０００９】
一実施例において、プログラム命令再フォーマット部により再フォーマットされた命令の命令ユニット配列は、記憶領域が与えられて所定のデコーダ入力命令配置構造におけるその所定の位置に対応する位置に配置され得る再フォーマットされたプログラム命令の各命令ユニットが、所定の位置に配置される配列である。従って、可能であれば、プログラム命令がその中で再配列され得るプログラムメモリ内の記憶領域を与えられて、所定のデコーダ入力命令配置構造に可能な限り近い配列が達成される。これは、コンパイラによって再配列されなかったプログラム命令と関連して遂行されなければならない再フォーマットされたプログラム命令の命令ユニットのシフト数における全体の削減を提供する。
【００１０】
一実施例において、もし再フォーマットされたプログラム命令の命令ユニットが、メモリスペースが与えられても所定の位置に配置されることができない場合、プログラム命令再フォーマット部は、命令ユニットを、複数の再フォーマットされたプログラム命令におけるその命令ユニットの代替位置の総数を削減する位置に配置するように動作可能である。従って、所定のデコーダ入力命令配置構造におけるそれぞれのプログラムユニットの配置構造を適合させるようにプログラムユニットを整列させるための柔軟性を持たないにもかかわらず、再フォーマットされたプログラム命令を完全に整列させるために使用されることになるシフト回路構成の複雑さは、例えば異なるオフセット、または異なる命令長を有する一群の再フォーマットされたプログラム命令の中の特定の命令ユニットによって占有され得る代替位置の数を制限することによって削減される。
【００１１】
一実施例において、プログラム命令再フォーマット部は、それぞれの複数の再フォーマットされたプログラム命令を生成するために、複数のプログラム命令を再フォーマットするように動作可能である。この種類の特別な一実施例において、複数のプログラム命令は、可変命令長を有するプログラム命令を含む。異なる命令長を有する命令は、プログラムメモリ内の記憶領域の異なるサイズを占有することになると共に、所定のデコーダ入力命令配置構造を生成するために、恐らく、異なる方法で再配列されなければならい。プログラム命令再フォーマット部は、これらの様々な再配列要求を能率的に考慮し得ると共に、コンパイラによって再配列されなかったプログラム命令のために必要とされるであろう回路構成と比較して、再配列された命令を所定のデコーダ入力命令配置構造に整列させるのに必要とされるシフト回路構成の複雑さを削減する。
【００１２】
一実施例において、所定のデコーダ入力命令配置構造は、ビッグエンディアン配置構造であると共に、代替え実施例において、所定のデコーダ入力命令配置構造は、リトルエンディアン配置構造である。
【００１３】
第２の特徴によれば、本発明は、所定のデコーダ入力命令配置構造に従ってプログラム命令をコンパイルする方法を提供すると共に、前記方法が、デコーダへの入力のための複数のプログラム命令を有する配列を生成するために、ソースコードを処理する段階を含み、前記複数のプログラム命令の内の少なくとも１つが、少なくとも２つの命令ユニットの命令長を有しており、前記少なくとも１つのプログラム命令が、プログラムメモリ内にそれぞれの記憶領域を有していると共に、前記方法が、再配列されたプログラム命令を生成するために、前記記憶領域内で、前記少なくとも１つのプログラム命令の前記少なくとも２つの命令ユニットを再配列する段階を含み、前記記憶領域が、関連するメモリアドレス及びオフセット値を有し、前記オフセット値が、前記メモリアドレス内の前記プログラム命令の開始位置を与え、前記再配列は、前記デコーダ入力命令配置構造を達成するのに必要とされる前記複数のプログラム命令の命令ユニットの複数の操作が、もし再配列が実行されなかった場合に必要とされるであろう複数の操作より複雑にならないような再配列であることを特徴とする。
【００１４】
第３の特徴によれば、本発明は、命令デコーダへの入力のための所定のデコーダ入力命令配置構造に従って前記再フォーマットされたプログラム命令を整列させるために、プログラムメモリから前記再フォーマットされたプログラム命令を読み込むと共に、請求項１に記載のコンパイラによって生成された前記再フォーマットされたプログラム命令の位置を少なくとも１つシフトするように動作可能であるプログラム命令アライナを提供し、前記プログラム命令アライナが、複数のレジスタフィールドを有する命令レジスタと、前記再フォーマットされたプログラム命令に関連付けられた前記命令長及び前記オフセット値を受信するように動作可能である制御入力端子と、複数のシフタフィールド、及び前記複数のレジスタフィールドの内の少なくともいくつかと、前記複数のシフタフィールドの内の少なくともいくつかとの間の複数の接続を提供するように動作可能である一連のマルチプレクサを有するシフタとを備え、前記命令レジスタが、前記再フォーマットされたプログラム命令を記憶するように動作可能であり、前記複数のシフタフィールドの内のいくつかが、前記複数のレジスタフィールドから、前記再フォーマットされたプログラム命令の前記少なくとも２つの命令ユニットを受信するように動作可能であり、前記シフタが、前記所定のデコーダ入力命令配置構造を生成するために、前記命令長及び前記オフセット値、前記再フォーマットされたプログラム命令の少なくとも一部分に基づいてシフトするように動作可能であり、前記複数の接続は、前記複数のレジスタフィールドの内の少なくとも１つが前記複数のシフタフィールドのサブセットだけに接続されるような接続であると共に、前記再フォーマットされた命令が、前記所定のデコーダ入力命令配置構造を生成するために前記レジスタフィールドの内の少なくとも１つから前記サブセットを除く前記複数のシフタフィールドの内の１つに対する接続が必要とされないような前記命令ユニット配列を有することを特徴とする。
【００１５】
本発明は、再フォーマットされたプログラム命令の命令ユニット配列は、命令レジスタのレジスタフィールドのプログラムアライナのシフタのシフタフィールドに対する完全な接続性が必要とされないように配置され得るので、プログラム命令を再配列するためにコンパイラを使用することによって、プログラム命令位置合せ回路構成は、複雑さにおいて削減され得ると認識する。それどころか、レジスタフィールドの内の少なくとも１つは、シフタフィールドのサブセットとのみと接続されている。サブセットに属さないシフタフィールドへの接続の必要条件は、適切にコンパイルステージで命令を再配列することによって消去される。これは、削減された回路領域、及び低電力消費量を有するプログラム命令位置合せ回路構成に通じるマルチプレクサ入力の全体の削減に帰着する。
【００１６】
一実施例において、シフタは、それぞれの複数の命令ユニット配列に対応する複数の再フォーマットされたプログラム命令の各々をシフトするように動作可能であると共に、サブセットは、複数の命令ユニット配列によって決定される。従って、命令ユニット配列は、サブセットに属するシフタフィールドの数を減少させるために、言い換えると、複数のシフタフィールドからそのレジスタフィールドまで提供されなければならないマルチプレクサ入力の数を削減すると共に、シフタに関連付けられた複雑さ、及び回路領域を削減するために、適宜選択され得る。
【００１７】
一実施例において、複数の命令ユニット配列は、シフタが複数のシフタフィールドの一方の端と複数のシフタフィールドの反対側の端との間で一方向にシフトすることによって所定のデコーダ入力命令配置構造を生成するように動作可能であるような配列である。これは、再配列されたプログラム命令において、リトルエンディアンデコーダ入力配置構造のために、複数の再配列されたプログラム命令の各々について、命令ユニットの再配列された位置が、常に、所定のデコーダ入力命令配置構造におけるその命令ユニットの所定の位置の左側にあることになることを意味する。対比するものとして、ビッグエンディアンデコーダ入力配置構造のために、命令ユニットの再配列された位置は、所定のデコーダ入力命令配置構造におけるその命令ユニットの所定の位置の右側にあることになる。これは、シフタの制御回路を単純化すると共に、所定のデコーダ入力命令配置構造を達成するためにシフタによって実行されるシフトの全体の数を減少させる。同様に、所定のデコーダ入力命令配置構造を達成するために、オフセットと関連付けられた位置の数によって各命令ユニットを単にシフトする配置と、これが異なる点に注意が必要である。
【００１８】
一実施例において、再フォーマットされたプログラム命令の命令ユニット配列は、命令ユニットの内の１つが所定のデコーダ入力命令配置構造におけるそのそれぞれの位置に対応する位置にあるような配列である。従って、少なくとも１つの命令ユニットに関して、シフタによって、シフトが実行される必要がない。
【００１９】
一実施例において、再フォーマットされた命令の命令ユニット配列は、所定のデコーダ入力命令配置構造におけるその所定の位置に対応する位置に配置され得る再フォーマットされたプログラム命令の各命令ユニットが、所定の位置に配置されるような配列である。
【００２０】
一実施例において、複数の命令ユニット配列は、サブセットが、複数の再フォーマットされたプログラム命令の各々に関して所定のデコーダ入力命令配置構造が獲得されることを可能にする最小のサブセットであるように制限される。
【００２１】
一実施例において、もし、プログラム命令フォーマット部によって、再フォーマットされたプログラム命令の特定の命令ユニットが所定の位置に配置されない場合、それは、複数の再フォーマットされたプログラム命令における特定の命令ユニットの代替え位置の総数を削減する位置に配置され、それによりサブセットを削減する。
【００２２】
一実施例において、複数のシフタフィールドの内の少なくとも１つのデータ幅は、複数のレジスタフィールドの内の対応するもののデータ幅に等しい。一実施例において、複数のシフタフィールドは、数の点で複数のレジスタフィールドと等しい。これらの実施例は、多数のマルチプレクサの接続性を単純化する。
【００２３】
一実施例において、再フォーマットされたプログラム命令は、命令長指定部分を含むと共に、命令長指定部分は、制御入力端子に供給するための命令長を抽出するために使用される。
【００２４】
一実施例において、プログラム命令アライナは、再フォーマットされたプログラム命令のコピーを格納すると共に、制御入力端子に供給するために、命令長指定部分から命令長を抽出するように動作可能である命令長抽出レジスタを備える。これは、正しい命令長を特定の命令に関する制御入力端子へ伝達する効率的な方法を提供する。一実施例において、命令長指定部分は、少なくとも２つの命令ユニットの各々におけるフラグビットに対応する。これは、プログラム命令からの命令長の簡単な抽出を提供する。
【００２５】
一実施例において、シフタは、命令長指定部分を除いた再フォーマットされたプログラム命令の一部分を受信するように動作可能である。従って、命令長指定部分からの情報は、再配列されたプログラム命令の位置合わせを行うシフタによって、分離されて並列に処理され得る。シフタ入力から除外される再フォーマットされた命令の一部分は、命令長を決定するために使用され得ると共に、同様に、復号化処理の間の使用ために、デコーダに渡され得る。
【００２６】
一実施例において、プログラム命令アライナのシフタは、少なくとも１つの入力が除去された状態のフルクロスバーシフタとして実現される。一つの代替実施例において、シフタは、複数の２入力マルチプレクサを備える対数シフタとして実現されると共に、標準の対数シフタより少なくとも１つ少ない２入力マルチプレクサを備える対数シフタとして実現される。これらの対数シフタのいくつかの実施例において、シフタは、標準の対数シフタと比較して少なくとも１つの二重化されたマルチプレクサを備える。
【００２７】
それらをプログラム命令アライナに供給する前のコンパイラによるプログラム命令の再配列は、本技術に基づくフルクロスバー装置、及び修正された対数シフタタイプの装置の両方に関して、シフタ内のマルチプレクサ入力の総数を削減することによって、シフタの機能的な複雑さを削減する。
【００２８】
本発明の第４の特徴によれば、実行されたときに本発明の第２の特徴に基づく方法の段階を遂行するコンピュータ読み取り可能な命令を含むコンピュータ読み取り可能な記憶媒体を保持するコンピュータプログラム製品が提供される。
【００２９】
上述の目的、及び他の目的、そしてこの発明の特徴、及び利点は、添付図面に関連して読まれるべきである実例となる実施例の以下の詳細な説明から明白になることになる。
【発明を実施するための最良の形態】
【００３０】
図１は、構成可能なＶＬＩＷデータエンジンの構造を概略的に例証する。装置は、制御器１１０と、第１の相互接続ネットワーク１２０と、一連のレジスタファイル１３０と、第２の相互接続ネットワーク１４０と、一連の機能ユニット１５０と、一連のメモリ１６０と、入出力（ＩＯ）回路構成１７０とを備える。
【００３１】
制御器１１０は、命令デコーダ（図２参照）から制御命令を受信する。復号化された命令は、第１及び第２の相互接続ネットワーク１２０、１４０、一連のレジスタファイル１３０、一連の機能ユニット１５０、一連のメモリ１６０、及びＩ／Ｏ回路構成１７０に対して送信される制御信号を直接駆動する。
【００３２】
第１及び第２の相互接続ネットワーク１２０、１４０は、各々複数の配線及びマルチプレクサを備えると共に、それはデータ通信経路を提供するように、制御器１１０によって構成可能である。第１の相互接続ネットワーク１２０は、一連の機能ユニット１５０からの結果データを受信すると共に、記憶するために、一連のレジスタファイル１３０に対してこの結果データを送信する。第２の相互接続ネットワーク１４０は、一連のレジスタファイル１３０から読み込まれたデータを、処理動作のための入力として一連の機能ユニット１５０に対して供給すると共に、記憶するために一連のメモリ１６０に対して供給する。一連のメモリ１６０は、ランダムアクセスメモリ（ＲＡＭ）、及び読取専用メモリ（ＲＯＭ）を備える。一連の機能ユニット１５０は、演算論理回路（ＡＬＵ）、マルチプレクサ、加算器、シフタ、浮動小数点ユニット、及び他の機能ユニットを備える。データは、レジスタファイル１３０から読み取られると共に、制御器１１０からの制御信号に基づいて計算が実行される一連の機能ユニット１５０を通じて並列に送信される。それらの計算の結果は、その場合に、記憶するために、第１の相互接続ネットワーク１２０を経由して、レジスタファイル１３０に対して返信される。制御器１１０は、所望のデータ処理動作、または特定のプロセッサクロックサイクルにおける動作の並列セットを実行するように、機能ユニット１５０、レジスタファイル１３０、及び相互接続ネットワーク１２０、１４０を構成する。
【００３３】
図１の装置において、第２の相互接続ネットワーク１４０は、ハードウェアに組み込まれている。しかしながら、代替装置において、第２の相互接続ネットワーク１４０は、制御器１００によって構成可能である。
【００３４】
図２は、本技術に基づくＶＬＩＷプロセッサを概略的に例証する。装置は、制御器１１０と、プログラムカウンタ２１０と、プログラムメモリ２２０と、ファーストインファーストアウト（first in first out：ＦＩＦＯ）命令レジスタ２３０と、プログラム命令アライナ２４０と、命令デコーダ２５０と、制御レジスタ２６０と、一連の３つの機能ユニット１５２、１５４、１５６と、状態レジスタ２７０とを備える。
【００３５】
制御器１１０は、制御器命令を実行すると共に、データ処理動作を制御する制御信号を送信する。プログラムカウンタ２１０は、プログラムメモリから現在フェッチされる命令を記録する。ＦＩＦＯ命令レジスタ２３０、及び制御レジスタ２６０における遅延があるので、フェッチされた命令は、２、３サイクル後で実行されることになる（どのくらい遅延するかは、ＦＩＦＯ命令レジスタ２３０の構造に依存する）。
【００３６】
プログラムカウンタ２１０は、同様に、プログラムメモリ２２０の中のメモリアドレスに格納されるプログラム命令に対するインデックスを提供する。
【００３７】
プログラムカウンタ２１０は、プログラムメモリから現在フェッチされ、実行されない命令を記録する。ＦＩＦＯ命令レジスタ、及び制御レジスタにおける遅延があるので、その命令は、２、３サイクル後で実行されることになる（どのくらい遅延するかは、ＦＩＦＯ命令レジスタの構造に依存する）。
【００３８】
プログラムメモリ２２０は、可変長プログラム命令語を格納する。プログラムメモリ２２０からの命令は、ＦＩＦＯ命令レジスタ２３０に対して、固定長メモリアクセス語として出力される。ＦＩＦＯ命令レジスタからの個別の命令は、命令デコーダ２５０に入力するための適切なフォーマットにあるように各命令を整列させるプログラム命令アライナに供給される。循環を実行するために、プログラム命令アライナは、特定のプログラム命令と関連付けられた命令オフセット、及び命令長を提供される。この例の実施例において、命令の最下位ビット（ＬＳＢ）がデコーダ入力のビット位置０にあるように、それらの命令は整列させられる。代替実施例において、その配置構造が異なるであろうということが認識されることになり、例えば、その命令は、命令の最上位ビットがデコーダ入力のビット位置０にあるように、代りに整列させられるであろう。命令デコーダ２５０は、データ処理動作を実行するための制御信号を生成するために、プログラム命令を復号化する。このＶＬＩＷプロセッサにおいて、機能ユニット１５２、１５４、１５６の全ては、第２の相互接続アレイ１４０内の制御バス（図示せず）によって並列に制御される。制御バスの幅がＶＬＩＷ命令語の幅に等しいので、これは非常に広い命令語をもたらす。プログラムアプリケーションの並列処理の大きな度合いを有する部分は、更に能率的にこの広い命令語を有効に利用することになる。
【００３９】
例えば、必要とされる並列処理の度合いに従って、異なる命令セットが異なる処理タスクのために使用され得るように、図２のＶＬＩＷプロセッサは、複数の異なる命令セットを実行するように動作可能である。命令デコーダ２５０は、あらゆる特定の命令セットの各命令語を、その命令語がデータパスに適用される前に、制御バスの幅に拡大する働きをする。復号化されたＶＬＩＷ命令は、制御レジスタ２６０に格納される。制御レジスタ２６０からの制御信号は、図１の機能ユニット１５０の配列の特定のものに供給される。簡単化のために、３つの機能ユニット１５２、１５４、１５６のサブセットが、図２において示される。これらの機能ユニット１５２、１５４、１５６は、レジスタファイル１３０から読み込まれると共に、第２の相互接続ネットワーク１４０（図１を参照）を経由して機能ユニット１５２、１５４、１５６に対して供給されるオペランドに対するデータ処理動作を実行するために、制御レジスタ２６０からの制御信号に応答する。データ処理動作の結果は、状態レジスタ２７０に格納されると共に、その次に第１の相互接続ネットワーク１１０を経由してレジスタファイル１３０にフィードバックされる。制御器１１０は、最近実行されたプログラム命令に起因すると共に、状態レジスタ２７０を経由して制御器１１０に供給される状態フラグに応答する。制御器１１０は、同様に、命令デコーダ２５０から受信される復号化された制御器命令に応答する。制御器１１０は、プログラムメモリ２２０に格納されるプログラム命令を通じて、順次に増加するようにプログラムカウンタ２１０を制御する。
【００４０】
図３Ａは、図２のＶＬＩＷプロセッサと関連付けられたプログラム命令の一般的な形を概略的に例証する。プログラム命令は、命令セット識別子フィールド３１０、及び命令フィールド部分３２０を含む。この場合、その命令は、２つの命令フィールド３２２、及び３２４を含む。命令フィールド３２０は、制御器１１０の制御を指定するビットを含む実際の符号化された命令ビット、及びそれらの機能ユニットによって実行されるべき動作を指定する、機能ユニット１５２、１５４、１５６の特別なものに関する複数の命令フィールドを含む。プログラムメモリ２２０は、各メモリバンクがＮビット幅である、複数のＭ個のメモリバンク（図４を参照）に細分化される。プログラム命令は、Ｎ−ビットのＭブロックがＦＩＦＯ命令レジスタ２３０によって並列にアクセス可能であるように、（プログラム命令ユニットを意味した）Ｎ−ビットブロックでアクセス可能である。従って、プログラム命令の最大幅は、Ｍ＊Ｎビットに強制される。
【００４１】
図３Ｂ〜３Ｇは、図３Ａの２フィールド命令と関連付けられることができる６つの異なるコードフォーマットを概略的に例証する。１つの符号化されたプログラム命令を用いてできる限り多くの復号化されたＶＬＩＷ命令を示すために、命令フィールド３２２、３２４は、（i）制御グループ、及び（ii）動作セット（operation set）に関して階級的に定義される。動作セットは、特定の資源（例えば、特定の機能ユニット１５２、１５４、１５６）上の特別な命令バスのための命令のリストから構成される。制御グループは、これらの動作セットのリストを含む。各制御グループは、常に同時に制御される命令バスのための動作セットの収集物から構成される。ＡＬＵが多分常にそのレジスタファイルからのデータを必要とすることになるので、例えば、ＡＬＵ入力のために設けられると共に、レジスタファイルからの読み込みポートと結合された命令バスは、同じ制御グループにそのＡＬＵの命令バスとして割り当てられることになる。図３Ｂ〜３Ｇの例において、第１の命令フィールドＦ１は、２つの制御グループＧ１、及びＧ２を含み、第２の命令フィールドは、３つの制御グループＧ３、Ｇ４、及びＧ５を含む。Ｓ１、及びＳ２は、グループ選択ビットである。Ｕ、及びＵ１．．．Ｕ５は、それぞれ未使用のマイクロコードメモリバンク、及び命令フィールドビットである。
【００４２】
図４は、複数のメモリバンクを含む図２のプログラムメモリ２２０の構造を概略的に例証する。可変長の符号化された命令を格納するために、プログラムメモリは、それぞれＮビットの幅を有する複数のＭ個のメモリバンクに細分化される。この実施例において、Ｍ＝４であり、従って、プログラムメモリ２２０は、第１のメモリバンク２２２、第２のメモリバンク２２４、第３のメモリバンク２２６、及び第４のメモリバンク２２８を含む。プログラムメモリ２２０は、バンクの数及びバンク幅という、２つの制御パラメータを有している。メモリバンク幅は、プログラム命令ユニットの幅に等しい。全ての４個のメモリバンク２２２、２２４、２２６、２２８からの値は、並列で読み込まれ得る。セット｛０、１、２、３｝からのオフセット値は、各プログラム命令と関連付けられている。オフセット値、メモリアドレス、及び命令長は、特定のプログラム命令に占有されたメモリ領域を指定するのに必要とされる。図４の例の実施例において、６つの可変長プログラム命令は、プログラムメモリ２２０に現在格納されている。各プログラム命令語の最下位ビットは、そのプログラム命令により橋渡しされた最も右のメモリバンクに格納される。例えば、プログラム命令３は、第２のメモリバンク２２４、及び第３のメモリバンク２２６を橋渡しすると共に、最下位ビットは、第２のメモリバンク２２４の最も右のビット位置にある。各プログラム命令は、メモリアドレス（または、プログラムカウンタ値）、命令の最初の語のオフセット、及び命令長によって完全に定義される。命令１は、アドレスＸ、オフセット０を有していると共に、３つの命令ユニットを含む。命令２は、アドレスＸ、オフセット３を有していると共に、２つの命令ユニットを含む。命令３は、アドレスＸ＋１、オフセット１を有していると共に、２つの命令ユニットを含む。命令４は、アドレスＸ＋１、オフセット３を有していると共に、３つの命令ユニットを含む。命令５は、アドレスＸ＋２、オフセット２を有していると共に、１つの命令ユニットを含む。命令６は、アドレスＸ＋２、オフセット３を有していると共に、４つの命令ユニットを含む。２つ以上のプログラム命令と関連付けられたビットが、特定のメモリアドレスと関連付けられ、例えば、アドレスＸ＋１に、命令２、３、及び４と関連付けられたビットが全て格納され得るように、６つの命令が連結された形式においてプログラムメモリ２２０に格納される点に注意が必要である。
【００４３】
図５Ａは、命令を標準的な配列に従ってプログラムメモリに格納するコンパイラによって生成されたプログラム命令を、整列させるように動作可能であるプログラム命令アライナを包含する復号化フローを概略的に例証する。この装置のプログラム命令アライナは、"Program Instruction Compression"と表題をつけられた同時係属のＧＢ特許出願番号0410986.4号に説明されるように、「ローテータ（rotator）」に対応する。その処理は、第１のＶＬＩＷ命令語５１０、第２のＶＬＩＷ命令語５１２、及び第３のＶＬＩＷ命令語５１４で始まる。これらのＶＬＩＷ命令語の各々は、４つのＮ−ビット命令ユニットを含む。これらの３つの命令語は、それぞれ第１の符号化された命令５２２、第２の符号化された命令５２４、及び第３の符号化された命令５２６を生成するために符号化される。符号化されたプログラム命令がＶＬＩＷ命令５１０、５１２、５１４より更にコンパクトである点に注意が必要である。特に、符号化されないＶＬＩＷ命令がそれぞれ４つの命令ユニットを含む一方で、第１及び第２の符号化された命令は、３つのＮ−ビット命令ユニットを含み、第３の符号化された命令５２６は、１つのＮ−ビット命令ユニットを含む。第１の符号化された命令５２２は、最下位Ｎ−ビット命令ユニットＡ１、最上位の次のＮ−ビット命令ユニットＢ１、及び最上位Ｎ‐ビット命令ユニットＣ１を含む。第２の符号化された命令５２４は、最下位Ｎ−ビット命令ユニットＡ２、最上位の次のＮ−ビット命令ユニットＢ２、及び最上位Ｎ−ビット命令ユニットＣ２を含む。第３の符号化された命令５２６は、１つのＮ−ビット命令ユニットＡ３を含む。コンパイラは、示されたように、標準的な配列に従って符号化されたプログラム命令を、ステージ５３０におけるプログラムメモリ２２０に詰め込む。符号化されたプログラム命令は、４つのＮ−ビットメモリバンクを含むプログラムメモリ２２０において連結される。第１の符号化された命令５２２の符号化された命令ユニットＡ１、Ｂ１、及びＣ１は、それぞれアドレスＸのオフセット０、１、及び２に格納され、第２の命令の命令ユニットＡ２は、アドレスＸ及びオフセット３に格納される一方、第２の命令の残っている命令ユニットＢ２及びＣ２は、それぞれアドレスＸ＋１のオフセット０及びオフセット１に格納されると共に、第３の符号化された命令５２６と対応する命令ユニットＡ３は、アドレスＸ＋１及びオフセット２に格納される。このように、それぞれ符号化されたプログラム命令５２２、５２４、５２６に関して関連するメモリアドレスがあると共に、各Ｎ−ビット命令ユニットは、メモリアドレスの中のプログラム命令の開始位置を与えるオフセット値を有する。この場合、命令ユニット幅はメモリバンク幅に等しく、従って、そのオフセットは命令ユニットが格納されるメモリバンクを指定する。
【００４４】
ＦＩＦＯ命令レジスタ２３０（図２を参照）は、プログラムメモリ２２０から、３つの符号化されたプログラム命令５２２、５２４、５２６のそれぞれを順次に読み取る。ＦＩＦＯ命令レジスタ２３０は、プログラムメモリ２２０の４つのメモリバンクと直接対応する４つのＮ−ビットフィールドを有している。従って、ステージ５２８におけるＦＩＦＯ命令レジスタに格納されるそれぞれの符号化された命令は、４つのＮ−ビットメモリアクセス語を有している。それぞれの符号化された命令のために、特定の命令ユニットは、プログラムメモリにおけるそのメモリバンクから、ステージ５２８におけるＦＩＦＯ命令レジスタの対応するレジスタフィールドに直接読み込まれる。各サイクルにおいて、プログラムカウンタによって示された位置からスタートして、４つの命令ユニットが読み込まれる。命令が４つのユニットの長さより小さいとき、いくらかのこれらのユニットは廃棄される（すなわち、使用されない）。図５Ａ及び図５Ｂにおいて、廃棄されたユニットはダッシュで表される。
【００４５】
このように、例えば、プログラムメモリ２２０において、第２の符号化されたプログラム命令５２４は、アドレスＸ及びオフセット３に格納される命令ユニットＡ２、アドレスＸ＋１及びオフセット０に格納される命令ユニットＢ２、そして、アドレスＸ＋１及びオフセット３に格納される命令ユニットＣ２を有する。この第２の符号化された命令は、命令ユニットＡ２がレジスタオフセット３を占有し、レジスタオフセット２が廃棄されるであろうビットを含み、命令ユニットＣ２がレジスタオフセット１を占有し、そして命令ユニットＢ２がレジスタオフセット０を占有するように、ＦＩＦＯ命令レジスタ２３０に読み込まれる。第３の符号化されたプログラム命令５２６に関して、プログラムメモリにおけるアドレスＸ＋１及びオフセット２に格納されたＡ３は、それがレジスタオフセット２を占有するように、ＦＩＦＯ命令レジスタに読み込まれる。レジスタオフセット０、１、及び３に対応するフィールドは、廃棄されるであろうビットを含む。第１の符号化された命令の命令ユニットＡ１、Ｂ１、及びＣ１は、それぞれＦＩＦＯ命令レジスタ２３０のレジスタオフセット０、１、及び２を占有する一方、レジスタオフセット３は、廃棄されることになるビットを含む。
【００４６】
図５Ａのステージ５５０において、３つの符号化されたプログラム命令５２２、５２４、５２６のそれぞれは、（図２のプログラム命令アライナ２４０によって）所定のデコーダ入力命令配置構造に従って並べられた。この装置において、命令の最下位ビットがデコーダ入力のビット位置０にあるように、符号化された命令が整列させられることが必要とされ、それは“リトルエンディアン”配置構造である。代替装置において、最上位のビットがデコーダ入力のビット位置０に配置される“ビッグエンディアン”配置構造が使用される。ステージ５２８における命令ユニット配列を、ステージ５５０における所定のデコーダ入力命令配置構造と比較すると、第１の符号化された命令５２２を整列させるのに、循環が必要とされないということが理解され得る。しかしながら、第２の符号化された命令の各命令ユニットは、１つの命令ユニット（この場合、１ワード（語）はＮ−ビットを含むとする）だけシフト（すなわち向こう側に循環）されなければならないと共に、第３の符号化された命令の１つの命令ユニットＡ３は、２つの命令ユニットだけ右シフトされなければならない。
【００４７】
図５Ｂは、本技術に基づくプログラム命令アライナを有する装置における復号化フローを概略的に例証する。図５Ｂにおけるステージ５１０、５２０、及び５３０は、上で示された図５Ａの復号化フローにおける同じステージと同一である。図５Ｂにおける復号化フローは、図５Ｂのコンパイラが、ステージ５２７におけるメモリに符号化されたプログラム命令が詰め込まれた後で、そして符号化されたプログラム命令５２２、５２４、５２６をステージ５３０におけるＦＩＦＯ命令レジスタ２３０に読み出す前に発生するプログラム命令再フォーマット化の追加のステージ５４５を含むという点で、図５Ａの復号化フローと異なる。
【００４８】
（再配列がコンパイラによって遂行される）図５Ｂに基づいた装置において、メモリにおける命令語の詰め込みが２段階で行われる点に注意が必要である。
【００４９】
１．命令によって占有されることになる位置を決定する。
２．（図５Ｂにおけるステージ５２７で示されたように）命令をそれらの位置に格納する。
【００５０】
再配列はオフセットを知ることが必要であるので、再配列することが行われる前に、第１の段階が実行されるべきである。しかしながら、第２の段階（ステージ５２７）は省略され得る。従って、代替装置において、コンパイラは、詰め込みステージ５２７、及び再配列ステージ５４５を１つの段階に結合する。これらの２段階は、その再配列処理を明確に概説する目的のために、図５Ｂにおいて別々に例証されたが、しかし、詰め込みステージ及び再配列ステージを１つの段階に結合することは、本発明に基づくコンパイラの更に効率的な実行を生じさせると認識されることになる。
【００５１】
総合的に、特定の一群の命令のためのコンパイラからの出力（例えば、所定の命令アライナ幅に関する全ての可能なオフセット値、及び全ての可能な命令幅に関しては、以下で示された図６Ｂ、７Ｂ、及び９Ｂを参照）に関するプログラム命令における命令ユニットの順列の範囲が、所定のデコーダ入力命令配置構造を獲得するために使用されることになるプログラム命令アライナの複雑さを減少させるために制限されるように、図５Ｂにおいて事前配列（pre-order）として示されるプログラム命令再フォーマット化ステージは、プログラムメモリのメモリバンクにおけるそのプログラム命令と関連付けられた記憶領域内のプログラム命令の命令ユニットを再配列する。図５Ｂの特別な例において、可能であれば、命令ユニットは、所定のデコーダ入力命令配置構造に従って並べられる。従って、Ａ１、Ｂ１、Ｃ１、Ａ２、及びＢ２は、全て最終の所望のデコーダ入力命令配置に存在し、Ｃ２、及びＡ３だけがシフトされる必要性がある。しかしながら、命令ユニットは、更なるシフトが復号化の前にプログラム命令アライナによって実行され得るので、それらが所定のデコーダ入力命令配置構造におけるそれらの最終位置に従ってコンパイラにより出力されるように、常に再配列される必要があるとは限らない。
【００５２】
この装置におけるデコーダへの入力の前に、それらは、ステージ５２８におけるＦＩＦＯ命令レジスタ２３０に読み出される。所定のデコーダ入力命令配置構造に対応する命令ユニット配列を生成するために、命令の最下位ユニットＡｉ（ここで、ｉ＝１、２、または３）は、メモリバンク０に格納されるべきであり、最上位の次の命令ユニットＢｉはメモリバンク１に格納されるべきであり、最上位の次の次の命令ユニットはメモリバンク２に格納されるべきであり、そして最上位の命令ユニットはメモリバンク３に格納されるべきである。従って、プログラム命令再フォーマット部は、できる限り多くの命令ユニットを、所定のデコーダ入力命令配置構造におけるそれらのそれぞれの位置と対応する位置に配置するように、プログラム命令と関連付けられた元来割当てられた記憶領域の中で、命令ユニットの位置を再配列する（もしくはスワップする）ことによって命令を配列する。これは、後でプログラム命令アライナによって実行される必要がある移動動作（すなわち、シフト）の数を減少させる。
【００５３】
ここで、元来割当てられた記憶領域は、所定のデコーダ入力命令配置構造において、その位置に従って特定の命令ユニットを配置するために、Ｎ−ビット語を適切なメモリバンクに含まず、その場合に、ステージ５３０における命令レジスタから、ステージ５５２におけるシフタフィールドに、再フォーマットされた命令を読み取るとき、プログラム命令アライナによって、後で適切な位置合わせだけが実行され得る。図５Ｂにおいて、ステージ５２７のプログラムメモリにおける元来割当てられた記憶領域がＮ−ビット語をメモリバンク２に全く含まないので、これは、第２の符号化された命令の命令ユニットＣ２に関する場合である。
【００５４】
図５Ｂにおいて示された装置において、命令１は、既に並べられると共に、再フォーマットされる必要がない。しかしながら、命令２は、３つの異なるメモリバンクである、メモリバンク３、０、及び１に格納される。その命令は、３つのユニットの幅を有しており、従ってメモリバンク０、１、及び２と位置合わせされた位置において、デコーダに入力として供給されることになる。従って、この場合、メモリバンク３に格納されるユニットが位置合わせされない一方、メモリバンク０、及び１に格納される命令ユニットは、デコーダ入力と位置合わせされた適切な命令ユニットを格納するために、再フォーマットされ得る。
従って、この場合、Ａ２がメモリバンク０に格納され、Ｂ２がメモリバンク１に格納され、その結果Ｃ２がメモリバンク３に格納されるように、命令が再フォーマットされる。このように、Ａ２、及びＢ２は、デコーダ入力と位置合わせが実行されると共に、デコーダへの入力の前に、プログラム命令アライナによってシフトされる必要がない。
【００５５】
図５Ｂにおける第３の符号化された命令５２６は、１つの命令ユニットを含むが、しかし、特定のプログラム命令に割当てられたメモリ位置が固定されるので、この場合第３のプログラム命令５２６の再フォーマット化を可能にする自由の程度がない。命令ユニットＡ３は、デコーダに入力する前に、ステージ５３０の命令レジスタからステージ５５２のシフタフィールドに読み出されるとき、メモリバンク２に対応する位置から、メモリバンク０に対応する位置にシフトされる。
【００５６】
図６Ａは、２つの命令ユニットに等しい幅を持つプログラム命令アライナ、及び命令を標準的な配列に従ってプログラムメモリ２２０に格納するコンパイラに関して、Ｎ−ビット命令ユニットＡ、及びＢがプログラム命令アライナ２４０のフィールドに入力されるように（すなわち、コンパイラによって出力されると共に、命令レジスタ２３０に格納されるように）、Ｎ−ビット命令ユニットＡ、及びＢの位置を列挙（list）するテーブルである。プログラム命令アライナへの入力における配列が、ＦＩＦＯ命令レジスタ２３０における配列に対応する点に注意が必要である。この装置において、各シフタ（すなわち、ローテータ）フィールドの幅は、プログラム命令ユニットの幅に等しい。オフセットは、最下位命令ユニットＡの位置を指定する。テーブルの下端部分は、ローテータへの必要とされるマルチプレクサ入力を指定する。入力の数は、命令幅の利用可能な範囲に関して、ＦＩＦＯ命令レジスタ２３０において配列されるように、各命令ユニットＡ、Ｂの可能な位置によって変わる。従って、“ユニット０に関する入力”は、命令幅＝１と、命令幅＝２の両方に関して、プログラム命令アライナへの入力上の命令ユニットＡの可能な初期位置に対応する。同様に、“ユニット１に関する入力”は、プログラム命令アライナへの入力上の命令ユニットＢの可能な初期位置に対応する。この単純な場合において、ＡとＢの両方が、プログラム命令アライナへの入力上の２つの位置のどちらにでも存在することができるということが理解され得る。
【００５７】
図６Ｂは、プログラム命令アライナ２４０が、本技術に基づくコンパイラのプログラム命令再フォーマット部によって再配列されたプログラム命令を受信するように動作可能であることを除いて、図６Ａのテーブルと対応するテーブルである。命令幅＝１に関して、プログラムメモリにおける割当てられたスペース内に命令を再配列することは自由ではなく、従って、この場合、プログラム命令アライナの入力配列は、図６Ａ及び図６Ｂにおいて同じである。しかしながら、命令幅＝２に関して、プログラム命令は、オフセット＝１を有する命令がプログラム命令アライナに提供され、Ａがオフセット０、そしてＢがオフセット１にあるように、コンパイラによって再配列される。命令幅＝１と、命令幅＝２の両方に関して、プログラム命令アライナへの入力上で、Ｂがオフセット１を占有するので、ユニット１のための入力は、図６Ａのプログラム命令アライナと比較して削減される。
【００５８】
図７Ａは、４つの命令ユニットの幅を有すると共に、標準の配列に従ってコンパイラから命令を受信するように動作可能であるプログラム命令アライナに関するテーブルである。この場合、プログラム命令アライナへの入力における命令ユニット位置は、１ユニット、２ユニット、３ユニット、及び４ユニットの命令幅に関して示される。図７Ｂは、本技術に基づくコンパイラによって再配列されたプログラム命令を受信するように動作可能である“変更されたプログラム命令アライナ”に対応するテーブルである。図７Ａにおいて、各命令ユニット（Ａ、Ｂ、Ｃ、Ｄ）は、４つのオフセットの内のどれでも占有し得る。従って、４つのプログラム命令アライナユニットの内のそれぞれは、４つのオフセット位置の内のどのような１つからでも読み込まれるために、入力許可値を有していなければならない。
【００５９】
図７Ｂのテーブルにおいて、（命令ユニットＡの入力位置に対応する）ユニット０のための入力は、全ての４つのオフセット位置を含むが、（命令ユニットＢの入力位置に対応する）ユニット１のための入力は、オフセット１及びオフセット３のみから構成される。ここで、なぜこれが再配列されたプログラム命令を考慮した場合であるかを考える。図７Ｂのテーブルにおいて、命令幅＝２に関して、Ｂがオフセット１（−−ＢＡ、及び、−ＡＢＡ）である２つの配列構造、及び、Ｂがオフセット３（ＢＡ−−、及び、Ｂ−−Ａ）である２つの配列構造があるということが理解され得る。命令幅＝３に関して、Ｂがオフセット３（−ＣＢＡ、ＡＣＢ−、及び、Ｃ−ＢＡ）である３つの配列構造、及び、Ｂがオフセット１（Ｃ−ＢＡ）である１つの配列構造がある。命令幅＝４に関して、Ｂは、全ての４つの配列構造についてオフセット３である。従って、このローテータサイズに対する命令幅の全範囲に関して、ＦＩＦＯ命令レジスタ２３０に格納される命令のためのＢの唯一の可能な位置は、オフセット１かオフセット３のいずれかに対応する。従って、唯一の必要とされたマルチプレクサ入力は、ユニット２に関する１及び３である。同様に、命令幅＝３、及び命令幅＝４に関する配列を参照すると、（Ｃの位置に対応する）ユニット２に関する入力は、オフセット２及びオフセット３のみから構成される。（Ｄの位置に対応する）ユニット３に関する入力は、それがオフセット３にあるように、Ｄが命令レジスタ２３０からプログラム命令アライナに読み込まれるだけなので、オフセット３のみから構成される。
【００６０】
図８Ａは、標準の配列に従ってプログラム命令を格納させるコンパイラのための復号化配列の３つの異なるステージにおける命令ユニット配列を概略的に例証する。図８Ｂは、本技術に従ってプログラム命令の再配列を遂行するコンパイラのための対応する復号化ステージを示す。この特別な例は、プログラム命令アライナ幅＝３、命令幅＝３、及びオフセット＝３の図６Ａ及び６Ｂのテーブルにおける例に対応する。
【００６１】
図８Ａにおいて、命令は、アドレスＸにおいて３のオフセットを有するように、メモリ２２０に詰め込まれる。従って、命令は、アドレスｘにおけるオフセット３（命令ユニットＡ）、アドレスｘ＋１におけるオフセット０（命令ユニットＢ）、そしてアドレスｘ＋１におけるオフセット１（命令ユニットＣ）を占有する。命令は、示されるように、プログラム命令アライナ２４０に入力されると共と、Ｂがオフセット０にあり、Ｃがオフセット１にあり、そしてＡがオフセット３にあるように、命令レジスタ２３０に読み込まれる。プログラム命令アライナ２４０は、その場合に、適切なデコーダ入力命令配置構造を獲得するために、各命令ユニットを３つ右シフトする。
【００６２】
図８Ｂにおいて、コンパイラは、プログラム命令を、図８Ａにおいて示される標準の配列から、Ａがアドレスｘ＋１におけるオフセット０を占有し、Ｂがアドレスｘ＋１におけるオフセット１を占有し、そして、Ｃがアドレスｘにおけるオフセット３を占有する配列に、再配列する。命令ユニットＡ、Ｂ、及びＣは、元々はそれぞれ、アドレスｘにおけるオフセット３、アドレスｘ＋１におけるオフセット０、アドレスｘ＋１におけるオフセット１に割り当てられていた。従って、同じメモリ配置が使用されたが、しかし、それらのメモリ配置の中で命令が再配列された、すなわち、Ｃが以前はＡにより占有されていたメモリ位置を占有し、Ａが以前はＢにより占有されていたメモリ位置を占有し、Ｂが以前はＣにより占有されていたメモリ位置を占有するということが理解され得る。必要とされるデコーダ入力の配列は、Ａがオフセット０であり、Ｂがオフセット１であり、そしてＣがオフセット３である配列である。従って、図８Ａのプログラム命令アライナは、命令ユニットの各々を位置３つ右シフトしなければならない一方、図８Ｂのプログラム命令アライナは、命令ユニットの内の１つである命令ユニットＣを、位置１つ右シフトする必要があるだけである。Ａ及びＢは、これらのユニットがシフトされる必要がないように、プログラム命令アライナへの入力に関して、既に適切に配列されている。
【００６３】
図９Ａは、８つの命令ユニットの幅を有すると共に、標準の配列に従ってコンパイラから命令を受信するように動作可能であるプログラム命令アライナのためのテーブルである。図９Ｂは、本技術に従ってコンパイラによって再配列されたプログラム命令を受信するように動作可能である“変更されたプログラム命令アライナ”に対応するテーブルである。この場合、プログラム命令アライナへの入力における命令ユニット位置は、１つ、２つ、３つ、４つ、５つ、６つ、７つ、及び８つのユニットの命令幅について示される。図６Ａ及び図７Ａのテーブルに関する場合と同様に、８つのマルチプレクサ入力の全範囲が、デコーダへの入力における命令の８つのユニットの各々のために必要とされる。しかしながら、図８Ｂの再配列されたプログラム命令に関して、かなり削減されたマルチプレクサ入力のセットが、（命令ユニットＡに対応する）デコーダ入力のユニット０を除いた全てで必要とされる。特に、ユニット１に関する入力（命令ユニットＢ）は、１、３、５、及び７であり、ユニット２に関する入力（命令ユニットＣ）は、２、４、６、及び７であり、ユニット３に関する入力（命令ユニットＤ）は、３、及び７であり、ユニット４に関する入力（命令ユニットＥ）は、４、及び７であり、ユニット５に関する入力（命令ユニットＦ）は、５、及び７であり、ユニット６に関する入力（命令ユニットＧ）は、６、及び７であり、そして、ユニット７に関する入力（命令ユニットＨ）は、７のみである。
【００６４】
例えば、それぞれ図９Ａ、及び図９Ｂのテーブルにおける命令幅＝７に関する列を参照すること。オフセット＝０に関して、オリジナルの命令配列が必要なデコーダ入力配置構造と一致するので、再配列は遂行されない。オフセット＝３に関して、例えば、オリジナルの命令配列によると、プログラムユニットの内の単一のものは、正しいデコーダ入力配置構造に対応する位置にはない一方、図９Ｂに示される再配列されたプログラム命令に関して、プログラムユニットＡ、Ｂ、Ｄ、Ｅ、Ｆ、及びＧが、それぞれそれらの正しいデコーダに対応する場所に位置しており、従って、プログラムユニットＣのみが、プログラム命令アライナによって、命令がデコーダに入力される前にシフトされる必要がある。いくらかの場合に、例えば、命令幅＝３、オフセット＝５に関して、復号化のために適切に並べられた位置にあるプログラムユニットの内のどれにも帰着しない再配列が遂行されることに注意が必要である。オフセット５、６、及び７だけが再配列するために使用され得ると共に、一方、必要とされるデコーダ配置構造はオフセット０、１、２を使用するので、この場合、プログラムユニットの内のいずれも配列することは可能ではない。しかしながら、この場合、総合的にマルチプレクサ入力の数が減少するように、再配列は遂行される。概して、必要とされるデコーダ入力に従って配列されることができない命令ユニットの再配列された位置は、特定のシフタ（ローテータ）サイズに関して（すなわち、図８Ｂのテーブルにおいて列挙されたオフセット、及び命令長の全範囲に関して）、プログラム命令の全体のグループにおける特定の命令ユニットに関する代替位置の総数が削減されるように配置される。特にこの例において、もしオリジナルの配列ＣＢＡ−−−−−−が保存された場合、その場合に、Ｂがオフセット６を占有することが理解され得ると共に、それは、（Ｂに対応する）ユニット１に関する入力が、１、３、５、及び７に加えて６を含まなければならないであろうことを意味するであろう。従って、それがＣＡＢ−−−−−としてプログラム命令アライナに入力されるように、その命令は再配列される。
【００６５】
テーブル９Ｂに列挙された修正されたプログラム命令アライナによって生成された命令ユニット配列は、シフタが、複数のシフタフィールドの一方の端と複数のシフタフィールドの反対側の端との間で一方向にシフトすることによって所定のデコーダ入力命令配置構造を生成するように動作可能であるような命令ユニット配列であることに注意が必要である。例えば、図９Ａのテーブルにおいて、命令幅＝４、及びオフセット＝６に関して、命令ユニットＣ、及びＤは、それぞれ左に位置２つシフトされなければならない一方、命令ユニットＡ、及びＢは、それぞれ右に位置５つシフトされなければならない。対比するものとして、テーブル９Ｂの修正されたプログラム命令アライナにおける命令幅＝４、及びオフセット＝６に関して、命令ユニットＣ、及びＤの右シフトのみが必要とされると共に、左シフトは必要とされない。同様に、図９Ａにおいては、左シフトと右シフトの両方が命令幅＝４、オフセット＝５、７に関して必要とされる一方、図９Ｂにおいては、対応するパラメータに関して、右シフトのみが必要とされる。
【００６６】
上述の段落において説明された一方向のシフトは、もはや図８Ｂの訂正されたテーブルにおいて有効ではない。それは、恐らく、４つのユニット幅までの命令に関してだけ可能である。
【００６７】
図９Ｃは、コンパイラがプログラム命令を再配列するが、しかし、図８Ｂのプログラム命令に対する代替えの配列に従って再配列する８つのプログラムユニットの幅のプログラム命令アライナに関するプログラムユニット配置構造を概略的に例証する。従って、図９Ｃのマルチプレクサ入力のセットは、図９Ｂのマルチプレクサ入力のセットと異なる。例えば、テーブル９Ｃにおいて、プログラム命令アライナへの入力における命令幅＝７、及びオフセット＝７に関して、命令ユニット配列はＡ−ＦＥＤＧＢＣであり、ユニットＢ、Ｄ、Ｅ、及びＦが、デコーダへの入力に関して適切に並べられた位置にあるということが理解され得る。対比するものとして、同じパラメータに関して、図９Ｂにおいて、命令ユニット配列は、Ｆ−ＥＤＣＢＡであり、その結果、ユニットＦのみが、復号化の前にシフトされなければならない。しかしながら、図９Ｃの装置は、図８Ａの元来配列されたプログラム命令の更に多くのプログラムユニットを、それらの適切な位置に更に整列させ、図９Ａより少ないマルチプレクサ入力を可能にする。
【００６８】
コンパイラによって実行された再配列は、アライナの複雑さを減少させるように、適宜配置される。命令ユニットを、それらの最終位置に再配列することが、これを実行する１つの方法であるということが認識されることになる。これは、上述の図９Ｃの場合に、命令ユニットＢ、Ｄ、Ｅ、及びＦに関して（幅＝７、及びオフセット＝７に関して）、実行される。しかしながら、必要とされるデコーダ入力配置構造を達成するために実行されるべき操作の複雑さを減少させようと試みる際、全ての命令ユニットがそれらの最終の所望の位置を保持すると見込むことは、実用的でなさそうである。例えば、図９Ｃにおいて、幅＝６、及びオフセット＝１に関して、ワードＣは、デコーダの入力で必要とされる位置であるユニット２に配置されたであろう。しかしながら、その代りに、ユニット２は、Ａを格納するために使用される。しかしながら、ユニット１からユニット７（図９Ｃ参照）に関するマルチプレクサ入力の数が、コンパイラによって再配列されなかった図９Ａの命令の場合に示される入力の対応する数と比較して、削減されるので、総合的に、所定のデコーダ入力命令配置構造を達成するために、コンパイラによって出力されたプログラム命令を並べるのに必要とされるシフタの複雑さは削減される。従って、再配列する効果は、必要とされるデコーダ入力命令配置構造を達成するために、コンパイラによって出力された命令に関して実行されなければならない操作の複雑さを減少させることであるということが理解され得る。これは、以下の図９Ｃと図９Ｄとの比較で例証される。複雑さの減少は、結局、特定のプログラム命令ユニットに関するシフトの数の減少になり得るか、もしくは、コンパイラによって出力された命令語を、その所望のデコーダ入力命令配置構造に移動させるのに必要とされる可能な置換の数の全体の減少になり得ると共に、それは、言い換えると、命令語と関連付けられたマルチプレクサ入力の必要とされる数の減少になり得る。
【００６９】
図９Ｄは、図９Ａのテーブルと対応するプログラム命令アライナ（すなわち、再配列されなかったコンパイル済のプログラム命令を整列させるアライナ）を概略的に例証する。図９Ｄの命令アライナ９１０は、命令レジスタ９２０と、複数のシフタフィールド９３０と、一連のマルチプレクサ９４０と、制御入力端子９４８を有するマルチプレクサ制御器９４６とを備える。この装置において、シフタは、フルクロスバーシフタとして実現される。各出力装置のための（すなわち、シフタフィールド９３０の各ユニットのための）フルクロスバーシフタには、必要とされる入力に関連付けられたマルチプレクサがある。図９Ｄにおいて、一連のマルチプレクサ９４０の単一のマルチプレクサ９４２の入力が、分かり易くするために示される。図９Ａの下側のテーブルにおいて列挙されているように、ユニット１のための入力は、命令レジスタユニット０、１、２、３、４、５、６、７を有すると共に、マルチプレクサ９４２が、それぞれ命令レジスタ９２０の８つのフィールドに対応する８つの入力を有するということになる。図９Ｄのアライナにおける８つのマルチプレクサの各々は、同様にマルチプレクサ９４２に対する８つの入力を実際に必要とする。この装置は、フルクロスバーシフタを表す。マルチプレクサ９４０の配置は、制御入力端子９４８を通じてマルチプレクサ制御器９４６に供給されたオフセット値に従って、マルチプレクサ制御器９４６によって制御される。
【００７０】
図９Ｅは、本技術に基づくと共に、図９Ａ及び図９Ｂのテーブルと対応するプログラム命令アライナを概略的に例証する。図９Ｄの装置と同様に、このプログラム命令アライナは、命令レジスタ９６０、複数のシフタフィールド９７０、及び一連のマルチプレクサ９８０を備える。その装置は、更にオフセット値、及び命令長を受信するように動作可能な制御入力端子９８４を有するマルチプレクサ制御器９８２を備える。マルチプレクサアレイ９８０、及び複数のシフタフィールド９７０によって構成されたシフタは、所定のデコーダ入力命令配置構造を生成するために、命令レジスタ９６０に格納された再フォーマットされたプログラム命令の少なくとも一部分をシフトするように動作可能である。シフトは、オフセット値、及びプログラム命令長に従って実行される。マルチプレクサアレイ９８０のマルチプレクサ９８６の接続が詳細に示される。マルチプレクサ９８６は、シフタユニット１に対する入力を提供する。図９Ｂ、及び図９Ｃのテーブルから、ユニット１に必要とされる入力が１、３、５、及び７のみであるということが理解され得る。入力０、２、４、及び６からの、ワードＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈのシフトは、コンパイラによって実行されるプログラム命令の戦略的再配列のために、必要とされない。シフタフィールド２からシフタフィールド７と関連付けられたマルチプレクサへの入力と類似した単純化は、再配列する命令によって達成される。従って、各々図９Ｂ及び図９Ｃと関連付けられたプログラム命令アライナによって実行されるべき操作は、（図９Ａのテーブルと関連付けられた）図９Ｄのフルクロスバーシフタにおいて提供されなければならない操作より複雑ではないということが理解され得る。図９Ｅのプログラム命令アライナは、フルクロスバーシフタであると考えられ得るが、しかし、少なくとも１つの入力が除去されており、それによってアライナの複雑さが減少している。
【００７１】
図９Ｅの装置は、各出力装置（すなわち、各シフタフィールド）と結合されたマルチプレクサを有するアライナを示すが、本技術は、そのような装置に制限されない。
【００７２】
図９Ｄにおけるマルチプレクサの各々は、２入力マルチプレクサのツリー構造体と置き換えられ得る。これは、図９Ｆで例証される。図９Ｆの装置は、複数の命令レジスタフィールド１０２０と、複数のシフタフィールド１０３０と、シフタフィールドのユニット１に供給するマルチプレクサ１０４１、１０４２、１０４３、１０４４、１０４５、１０４６、及び１０４７から構成されるツリー構造体と、信号をシフターフィールドのユニット２に供給するのに必要とされる追加のマルチプレクサ１０４８、１０４９、及び１０５０と、マルチプレクサ制御器１０５８と、関連する制御入力端子１０５９とを有するプログラム命令アライナ１０１０を備える。マルチプレクサ制御器１０５８は、制御入力端子１０５９によってオフセット値を受信すると共に、マルチプレクサは、このオフセットに基づいて制御される。
【００７３】
シフタフィールド１０３０のユニット１への出力のためのマルチプレクサは、それぞれの階層が４個、２個、１個の２入力マルチプレクサから構成される３つの階層を有するマルチプレクサのツリー構造体と置き換えられる。第１の層は、マルチプレクサ１０４１、１０４２、１０４３、及び１０４４を有する。第２の層は、マルチプレクサ１０４５、及び１０４６を有する。第３の層は、マルチプレクサ１０４７を有する。図９Ｄにおけるシフタフィールド９３０のユニット２への出力のためのマルチプレクサは、同様に図９Ｆの装置において置き換えられた。それは、シフターユニット１のマルチプレクサに類似したツリー構造を要求するが、しかし、大部分のマルチプレクサは、ユニット１のためのツリー構造体１０４１、１０４２、１０４３、１０４４、１０４５、１０４６、１０４７と共有され得る。３つの層の各々において、２入力マルチプレクサが、１つだけ加えられなければならない。特に、第１の層においては、マルチプレクサ１０４８が加えられ、第２の層においては、マルチプレクサ１０４９が加えられ、第３の層においては、マルチプレクサ１０５０が加えられる。それらが同じ入力を使用するので、他の２入力マルチプレクサは共有され得ると共に、ユニット１のためのツリー構造体において、それらの出力が選択されるとき、それは、ユニット２のためのツリー構造体、及び“ｖｉｓａ  ｖｅｒｓａ”において、選択されない。図９Ｄにおける８つのマルチプレクサ９４０の全てが、この方法で置き換えられる場合、その結果は、８つの２入力マルチプレクサの３つの階層を有する。この構造は、対数バレルシフタとして知られている。
【００７４】
図９Ｅで示される再配列されたプログラム命令を並べるように動作可能なアライナであるマルチプレクサアレイ９８０は、同様の方法で、２入力マルチプレクサのツリー構造体と置き換えられ得る。図９Ｅのマルチプレクサが、（再配列されなかったプログラム命令を扱う）図９Ｄの対応するマルチプレクサより少ない入力を有しているので、これらのツリー構造体は更に小さい。図９Ｇは、ユニット１のための出力を駆動するマルチプレクサ１０８６に関するこの変更を示す。図９Ｅにおける対応するマルチプレクサ９８６が、４つの入力を有しているだけであるので、ツリー構造体は、わずか３つの２入力マルチプレクサ１０８２、１０８４、及び１０８６を必要とする。
【００７５】
図９Ｇは、図９のテーブルの再配列されたプログラム命令を並べるように配置されたプログラム命令アライナの修正された対数シフタの実装を概略的に例証する。
【００７６】
装置は、複数の命令レジスタフィールド１０６２と、複数のシフタフィールド１０７０と、シフタフィールド１０７０のユニット１と結合されたマルチプレクサ１０８２、１０８４、１０８６の第１のツリー構造体と、シフタフィールド１０７０のユニット２と結合されたマルチプレクサ１０９０、１０９２、１０９４の第２のツリー構造体と、マルチプレクサ制御器１０９６と、関連する制御入力端子１０９８とを有するプログラム命令アライナ１０６０を備える。マルチプレクサ制御器１０９６は、オフセット値及び命令長の値を含む制御入力に基づいて、マルチプレクサを制御する。
【００７７】
図９Ｅのシフタフィールド９７０のユニット２のためのマルチプレクサは、同様に、図９Ｇにおいて置き換えられた。これは、マルチプレクサ１０９０、１０９２、及び１０９４を備える。同様にそれが４つの入力を有しているので、同じくそれは、３つの２入力マルチプレクサを必要とする。しかしながら、図９Ｆにおける状況と異なり、これらのマルチプレクサの内のいずれもが共有されない。それらは、同じ入力を有していないので、共有できない。
【００７８】
全てのマルチプレクサがこのように実装されるとき、いくつかの２入力マルチプレクサは、同じ入力を使用する。しかし、それらは、同時に異なるツリー構造体において使用されるので、それらの大半は共有できない。それでもなお、図９Ｇの装置における２入力マルチプレクサの総数は、図９Ｆの対数バレルシフタより少ない。従って、図９Ｆ、及び図９Ｇの対数シフタタイプの装置においてさえも、プログラム命令の再配列が更にアライナ装置回路構成の単純化を生じさせるということが認識されることになる。
【００７９】
図１０は、図９Ｃの命令再配列を生成するために使用されるプログラムコードを示す図である。
【００８０】
図１１Ａ、Ｂは、図９Ｃで列挙されるように再配列されたプログラム命令を受信するように構成されるプログラム命令アライナのために必要とされる選択信号及びマルチプレクサ入力を表す一連のテーブルを示す図である。
【００８１】
図１２は、デコーダへの入力に関してプログラム命令を並べるように動作可能である、２つの異なるプログラム命令アライナの組み合わせを有するプログラム命令アライナの配置を概略的に例証する図である。装置は、プログラム命令レジスタ１１００と、第１のプログラム命令アライナ１１１０と、第２のプログラム命令アライナ１１２０とを備える。
【００８２】
命令レジスタ１１００は、４つのユニットの幅であり、４つのプログラム命令ユニットを保持すると共に、それらの各々は、命令フィールド部分１１０４、及び命令セットＩＤ部分１１０２を備える。第１のプログラム命令アライナ１１１０は、４つのプログラム命令ユニットの命令フィールド部分１１０２のみを受信するために配置されると共に、第２のプログラム命令アライナ１１２０は、プログラム命令の命令セットＩＤ部分１１０４のみを受信するために配置される。特にこの例において、命令セットＩＤビット１１０２は、各プログラム命令ユニットの４つの最下位ビットを含む。第２のプログラム命令アライナ１１２０は、命令セット識別子１１０２部分に符号化される命令長を獲得するために使用される。デコーダへの入力に関してプログラム命令を適切に並べるように実行されるべき命令ユニットシフトを決定するために、命令長は、命令オフセットと共に制御入力として第１のプログラム命令アライナ１１１０によって必要とされる。
【００８３】
図１２において例証された装置において、命令セットＩＤビットは、プログラム命令の各プログラム命令ユニットの４つの最下位ビットを含む。各プログラム命令ユニットの命令セット識別子部分１１０２において、１つのビット（すなわち、長さフラグビット）が長さを符号化するために使用される。この場合、特定の命令の最後のユニットのフラグビットは、“１”にセットされると共に、命令における最後のユニットではない全てのユニットにおけるフラグビットは、“０”にセットされる。この装置には、そのような符号化から命令長を獲得するための遅延が比較的少ないという利点がある。Ｎ個のプログラムユニットの長さである命令のために、命令セット識別子１１０２部分のＮビットの総計が命令長を符号化するために設けられる。これが、本技術に基づいた可変長プログラム命令に関する多くの代替可能なフォーマットの内のほんの１つであるということが認識されることになる。例えば、命令セットＩＤ部分は、可変長命令の複数のプログラム命令ユニットに渡って分散されるよりむしろ、図３Ａの例と同様に、プログラム命令ユニットの内の１つのプログラム命令ユニットの中に含まれるであろう。
【００８４】
（例えば図９Ｅで例証されたような）本技術に基づくシフタは、所定のデコーダ入力命令配置構造に従って再配列されたプログラム命令を並べるのに何をしなければならないかを決定するために、オフセットと長さの両方を使用する。長さは、命令セットＩＤ部分１１０２における命令に符号化される（図１２の説明を参照）。
【００８５】
代替装置において、命令中に長さを明白に符号化する代りに、命令の各ユニットの位置が符号化される。この符号化は、命令の第１のユニットのアドレス及びオフセットに関係があり得るか、または、それは、そのユニットのアドレスのみに関係があり得る。
【００８６】
例えば、もし８つのメモリバンクがある場合、その命令は、８ビット、すなわちメモリバンク当たり１ビットを含むことができる。そのようなビットにおける‘１’が示すのは、そのバンクが現在の命令のユニットを含むということであり、一方、‘０’が示すのは、このバンクがこの命令のためのユニットを含まないということである。命令の長さは、‘１’のビットの数から得ることができる。そのような装置は、特定の境界上におけるいくつかの命令の位置合せを容易にするか、及び／または、機能停止を回避するために便利であり得る。
【００８７】
更なる代替装置において、プログラム命令がＦＩＦＯ命令レジスタ２３０（図２を参照）に入力される前に、本技術に基づいたプログラム命令アライナに制御入力として必要とされる命令長は、初期のステージで決定され得る。
【００８８】
このように前もって命令長を決定するために、分岐予測が使用され得る。従って、例えば、実行されるべき次の命令は、恐らくメモリにおいて現在の命令に続く命令であると推測される。その結果、ハードウェアは、これが実際に実行するべき次の命令であることが確かになる前に、その命令から長さを抽出し始める。分岐が実行されるとき、この事前に決定された長さは使用されない。その代りに、正しい命令がフェッチされると共に、余分の周期が長さを決定するために使用される。これは、少なくとも１つの周期の間、命令の復号化が可能ではなくなることになることを意味する。プロセッサは、この周期の間、停止される。
【００８９】
上述の装置において、プログラム命令アライナ２４０のユニットは、命令メモリ２２０のメモリバンク２２２、２２４、２２６、２２８の幅に等しい。しかしながら、代替装置において、プログラム命令アライナユニットは、メモリバンクの幅のサイズにおいて異なる（更に広い、もしくは、更に狭い）かもしれない。プログラム命令アライナユニットの最も小さなサイズは、１つのビットである。
【００９０】
図６Ｂ、図７Ｂ、及び図９Ｂの例において、プログラム命令アライナの幅は、最も広い命令の幅に等しい。代替装置において、プログラム命令アライナの幅は、最も広い命令の幅より大きいであろう。例えば、ＦＩＦＯ命令レジスタ２３０は、それが２プログラム命令語を保持し得るようにバッファされ得ると共に、プログラム命令アライナの幅は、２プログラム命令語を格納する能力を有するように、相応じて２倍にされ得る。
【００９１】
更なる代替装置において、プログラム命令アライナが処理するユニットは、可変サイズのユニットであり得る。明らかに、この場合、マルチプレクサ入力は、更に複雑になることになる。
【００９２】
本発明の実例となる実施例が添付図面を参照してここに詳細に説明されたが、本発明は、それらの明確な実施例に制限されないと共に、その様々な変更及び修正が、当業者によって、その中に付加された特許請求の範囲によって定義された発明の範囲及び精神からはずれずにもたらされ得る、と理解されるべきである。
【図面の簡単な説明】
【００９３】
【図１】設定可能なＶＬＩＷデータエンジンの構造を概略的に例証する図である。
【図２】ＶＬＩＷプロセッサを概略的に例証する図である。
【図３Ａ】一般的な形式の図２のＶＬＩＷプロセッサと関連付けられたプログラム命令を概略的に例証する図である。
【図３Ｂ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図３Ｃ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図３Ｄ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図３Ｅ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図３Ｆ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図３Ｇ】ＶＬＩＷプログラム命令の代替コードフォーマットを概略的に例証する図である。
【図４】複数のメモリバンクを備える図２のプログラムメモリの構造を概略的に例証する図である。
【図５Ａ】コンパイラによって再配列されなかった符号化されたプログラム命令を受信するように構成されたプログラム命令アライナを包含する復号化フローを概略的に例証する図である。
【図５Ｂ】本技術に基づくコンパイラによって再配列された符号化されたプログラム命令を受信するように構成されたプログラム命令アライナを包含する復号化フローを概略的に例証する図である。
【図６Ａ】命令を標準的な配列に従ってプログラムメモリに格納するコンパイラに関して、プログラム命令ユニットが２ユニットのプログラム命令アライナのフィールドに入力されるように（すなわち、コンパイラによって出力されるように）、プログラム命令ユニットの位置を列挙するテーブルである。
【図６Ｂ】本技術に基づくプログラム命令再配列を実現するコンパイラを除いた、図６Ａのテーブルと対応するプログラム命令ユニット位置のテーブルである。
【図７Ａ】命令を標準的な配列に従ってプログラムメモリに格納するコンパイラに関して、プログラム命令ユニットが４ユニットのプログラム命令アライナのフィールドに入力されるように（すなわち、コンパイラによって出力されるように）、プログラム命令ユニットの位置を列挙するテーブルである。
【図７Ｂ】本技術に基づくプログラム命令再配列を実現するコンパイラを除いた、図７Ａのテーブルと対応するプログラム命令ユニット位置のテーブルである。
【図８Ａ】図６Ａ、及び図６Ｂのテーブルにおける例の内の１つに関する復号化配列の３つの異なるステージにおける命令ユニット配列を概略的に例証する図である。
【図８Ｂ】図６Ａ、及び図６Ｂのテーブルにおける例の内の１つに関する復号化配列の３つの異なるステージにおける命令ユニット配列を概略的に例証する図である。
【図９Ａ】命令を標準的な配列に従ってプログラムメモリに格納するコンパイラに関して、プログラム命令ユニットが８ユニットのプログラム命令アライナのフィールドに入力されるように（すなわち、コンパイラによって出力されるように）、プログラム命令ユニットの位置を列挙するテーブルである。
【図９Ｂ】本技術に基づく第１のプログラム命令再配列を実現するコンパイラを除いた、図９Ａのテーブルと対応するプログラム命令ユニット位置のテーブルである。
【図９Ｃ】本技術に基づく第２のプログラム命令再配列を実現するコンパイラを除いた、図９Ａのテーブルと対応するプログラム命令ユニット位置のテーブルである。
【図９Ｄ】図９Ａのテーブルと対応するプログラム命令アライナを概略的に例証する図である。
【図９Ｅ】本技術に基づくと共に、図９Ａ及び図９Ｂのテーブルと対応するプログラム命令アライナを概略的に例証する図である。
【図９Ｆ】図９Ａのテーブルと対応するプログラム命令アライナ１０１０に関して、再配列されなかったプログラム命令を並べる代替装置を概略的に例証する図である。
【図９Ｇ】図９のテーブルの再配列されたプログラム命令を並べるように配置されたプログラム命令アライナの修正された対数シフタの実装を概略的に例証する図である。
【図１０】図９Ｃの命令再配列を生成するために使用されるプログラムコードを示す図である。
【図１１Ａ】図９Ｃで列挙されるように再配列されたプログラム命令を受信するように構成されるプログラム命令アライナのために必要とされる選択信号及びマルチプレクサ入力を表す一連のテーブルを示す図である。
【図１１Ｂ】図９Ｃで列挙されるように再配列されたプログラム命令を受信するように構成されるプログラム命令アライナのために必要とされる選択信号及びマルチプレクサ入力を表す一連のテーブルを示す図である。
【図１２】デコーダへの入力に関してプログラム命令を並べるように動作可能である２つの異なるプログラム命令アライナの組み合わせを有するプログラム命令アライナの配置を概略的に例証する図である。
【符号の説明】
【００９４】
１１０    制御器
１２０    第１の相互接続ネットワーク
１３０    一連のレジスタファイル
１４０    第２の相互接続ネットワーク
１５０    一連の機能ユニット
１５２、１５４、１５６    一連の３つの機能ユニット
１６０    一連のメモリ
１７０    入出力（ＩＯ）回路構成
２１０    プログラムカウンタ
２２０    プログラムメモリ
２２２    第１のメモリバンク
２２４    第２のメモリバンク
２２６    第３のメモリバンク
２２８    第４のメモリバンク
２３０    ファーストインファーストアウト（ＦＩＦＯ）命令レジスタ
２４０    プログラム命令アライナ
２５０    命令デコーダ
２６０    制御レジスタ
２７０    状態レジスタ
３１０    命令セット識別子フィールド
３２０    命令フィールド部分
３２２、３２４    命令フィールド
５１０    第１のＶＬＩＷ命令語
５１２    第２のＶＬＩＷ命令語
５１４    第３のＶＬＩＷ命令語
５２２、５２４、５２６    符号化されたプログラム命令
９１０    命令アライナ
９２０    命令レジスタ
９３０    複数のシフタフィールド
９４０    一連のマルチプレクサ
９４６    マルチプレクサ制御器
９４８    制御入力端子
９６０    命令レジスタ
９７０    複数のシフタフィールド
９８０    一連のマルチプレクサ
９８２    マルチプレクサ制御器
９８４    制御入力端子
９８６    マルチプレクサ
１０１０    プログラム命令アライナ
１０２０    複数の命令レジスタフィールド
１０３０    複数のシフタフィールド
１０４１、１０４２、１０４３、１０４４、１０４５、１０４６、１０４７    マルチプレクサ
１０４８、１０４９、１０５０    追加のマルチプレクサ
１０５８    マルチプレクサ制御器
１０５９    制御入力端子
１０６０    プログラム命令アライナ
１０６２    複数の命令レジスタフィールド
１０７０    複数のシフタフィールド
１０８２、１０８４、１０８６    ２入力マルチプレクサ
１０９０、１０９２、１０９４    マルチプレクサ
１０９６    マルチプレクサ制御器
１０９８    制御入力端子
１１００    プログラム命令レジスタ
１１０２    命令セットＩＤ部分
１１０４    命令フィールド部分
１１１０    第１のプログラム命令アライナ
１１２０    第２のプログラム命令アライナ
【図１】
2007102792.tif 000003
【図２】
2007102792.tif 000004
【図３Ａ】
2007102792.tif 000005
【図３Ｂ】
2007102792.tif 000006
【図３Ｃ】
2007102792.tif 000007
【図３Ｄ】
2007102792.tif 000008
【図３Ｅ】
2007102792.tif 000009
【図３Ｆ】
2007102792.tif 000010
【図３Ｇ】
2007102792.tif 000011
【図４】
2007102792.tif 000012
【図５Ａ】
2007102792.tif 000013
【図５Ｂ】
2007102792.tif 000014
【図６Ａ】
2007102792.tif 000015
【図６Ｂ】
2007102792.tif 000016
【図７Ａ】
2007102792.tif 000017
【図７Ｂ】
2007102792.tif 000018
【図８Ａ】
2007102792.tif 000019
【図８Ｂ】
2007102792.tif 000020
【図９Ａ】
2007102792.tif 000021
【図９Ｂ】
2007102792.tif 000022
【図９Ｃ】
2007102792.tif 000023
【図９Ｄ】
2007102792.tif 000024
【図９Ｅ】
2007102792.tif 000025
【図９Ｆ】
2007102792.tif 000026
【図９Ｇ】
2007102792.tif 000027
【図１０】
2007102792.tif 000028
【図１１Ａ】
2007102792.tif 000029
【図１１Ｂ】
2007102792.tif 000030
【図１２】
2007102792.tif 000031
【外国語明細書】
2007102792.tif 000032
2007102792.tif 000033
2007102792.tif 000034
2007102792.tif 000035
2007102792.tif 000036
2007102792.tif 000037
2007102792.tif 000038
2007102792.tif 000039
2007102792.tif 000040
2007102792.tif 000041
2007102792.tif 000042
2007102792.tif 000043
2007102792.tif 000044
2007102792.tif 000045
2007102792.tif 000046
2007102792.tif 000047
2007102792.tif 000048
2007102792.tif 000049
2007102792.tif 000050
2007102792.tif 000051
2007102792.tif 000052
2007102792.tif 000053
2007102792.tif 000054
2007102792.tif 000055
2007102792.tif 000056
2007102792.tif 000057
2007102792.tif 000058
2007102792.tif 000059
2007102792.tif 000060
2007102792.tif 000061
2007102792.tif 000062
2007102792.tif 000063
2007102792.tif 000064
2007102792.tif 000065
2007102792.tif 000066
2007102792.tif 000067
2007102792.tif 000068
2007102792.tif 000069
2007102792.tif 000070
2007102792.tif 000071
2007102792.tif 000072
2007102792.tif 000073
2007102792.tif 000074
2007102792.tif 000075
2007102792.tif 000076
2007102792.tif 000077
2007102792.tif 000078
2007102792.tif 000079
2007102792.tif 000080
2007102792.tif 000081
2007102792.tif 000082
2007102792.tif 000083
2007102792.tif 000084
2007102792.tif 000085
2007102792.tif 000086
2007102792.tif 000087
2007102792.tif 000088