(57)【要約】ＶＬＩＷデータ処理装置を用いて命令ワードから成るプログラムが実行される。装置は、各命令ワードからの複数の命令を並行に実行できる複数の機能ユニットを備えている。少なくとも幾つかの命令ワードのそれぞれからの命令は、対応するメモリユニットから並行にフェッチされるとともに、機能ユニットに共通の１つの命令アドレスを用いてアドレス指定される。命令アドレスの物理アドレスへの変換は、メモリユニットのうちの１または複数の特定のメモリユニットにおいて変更することができる。この変更は、プログラム内の変更更新命令によって制御される。したがって、メモリユニットからのどの命令が命令アドレスに応じて命令ワード中に組み込まれるかをプログラム実行に応じて選択することができる。
2006502489.tif 000002
【特許請求の範囲】
【請求項１】
命令アドレスユニットと、
前記命令アドレスユニットからの命令アドレスに応じて、複数の命令を含むことができる命令ワードを出力する命令メモリシステムであって、前記命令ワードの対応する部分を並行して出力する複数のメモリユニットを備える命令メモリシステムと、
複数の機能ユニットを備える命令実行ユニットであって、前記各機能ユニットは、前記命令ワードからの他の命令を他の機能ユニットが実行するのと並行して、前記命令ワードからの対応する命令を実行することができる命令実行ユニットと、
前記メモリユニットのうちの特定の１つのメモリユニットにおける前記命令アドレスの物理アドレスへの変換を、プログラム実行中に、他のメモリユニットに対して変更する命令アドレス変更回路と、
を備えているデータ処理装置。
【請求項２】
前記命令アドレス変更ユニットは、プログラム実行中に、前記命令ワードからの変更更新命令の制御下で前記変換を変更するようになっている、請求項１に記載のデータ処理装置。
【請求項３】
前記特定の１つのメモリユニットは、前記機能ユニットのうちの一部を含む１つのグループに対してだけ命令を供給するようになっており、前記グループは、前記変更更新命令を実行するように構成された変更更新機能ユニットを有している、請求項２に記載のデータ処理装置。
【請求項４】
前記特定の１つのメモリユニットは、前記機能ユニットのうちの一部を含む１つのグループに対してだけ命令を供給するようになっており、前記機能ユニットは、前記変更更新命令を実行するように構成された前記グループの外側にある変更更新機能ユニットを含んでいる、請求項２に記載のデータ処理装置。
【請求項５】
前記変更更新命令が条件付き命令であり、前記変更更新命令内で定められた条件を満たすことによって変更更新が実行される、請求項２に記載のデータ処理装置。
【請求項６】
前記命令アドレス変更回路は、命令アドレスおよびメモリユニットに依存するアドレス変換のために設けられ、これにより、第１および第２の命令アドレスは、前記特定の１つのメモリユニットにおいては同じ物理アドレスに変換されるとともに、前記特定の１つのメモリユニット以外の１または複数のメモリユニットにおいては互いに異なる物理アドレスに変換される、請求項１に記載のデータ処理装置。
【請求項７】
前記変換を繰り返し変更することにより、命令のループを形成する１または複数の命令を繰り返し出力するようにプログラムされ、前記命令アドレスが漸進することにより、前記ループからの命令は、前記命令ワード内で、前記ループからの命令の供給の繰り返しの少なくとも一部の最中に繰り返されない漸進的命令と組み合わされる、請求項１に記載のデータ処理装置。
【請求項８】
前記変更更新命令を使用することにより、データに依存する条件に応じて、前記特定の１つのメモリユニットからの１または複数の命令から成る第１または第２のブロックを選択的に出力するようにプログラムされ、前記命令アドレスが漸進することにより、前記メモリユニットの少なくとも一部は、前記命令ワードまたは前記第１または第２のブロックからの命令と組み合わされた複数の命令ワードの一部としての命令から成る第３のブロックから、１または複数の命令を出力する、請求項２に記載のデータ処理装置。
【請求項９】
前記特定の１つのメモリユニットの第１の数のアドレス可能な命令アドレスは、少なくとも１つのメモリユニットの第２の数のアドレス可能な命令アドレスと異なる、請求項１に記載のデータ処理装置。
【請求項１０】
前記特定の１つのメモリユニットは、変更された命令アドレスが前記第１の数の命令アドレスを含むアドレス範囲または一組のアドレス範囲から外れると、電力節約状態に切り換わるようになっている、請求項９に記載のデータ処理装置。
【請求項１１】
複数の命令ワードから成るプログラムをデータ処理装置を用いて実行する方法であって、前記データ処理装置は、前記各命令ワードからの複数の命令を並行に実行できる複数の機能ユニットを備え、少なくとも幾つかの命令ワードのそれぞれからの命令が対応するメモリユニットから並行にフェッチされる方法において、
前記機能ユニットに共通の１つの命令アドレスを用いて前記命令ワードをアドレス指定し、
前記メモリユニットのうちの特定の１つのメモリユニットにおける命令アドレスの物理アドレスへの変更可能な変換を使用することにより、前記メモリユニットからのどの命令が前記命令アドレスに応じて命令ワード中に組み込まれるかをプログラム実行に応じて選択する、
方法。
【請求項１２】
前記変更可能な変換は、プログラム内の変更更新命令の制御下で選択される、請求項１１に記載の命令ワードから成るプログラムを実行する方法。
【請求項１３】
漸進的命令アドレスに応じて前記メモリユニットのうちの特定の１つのメモリユニット内の繰り返される物理アドレスからループから命令を繰り返しフェッチするための変更可能な変換を含み、これにより、前記ループの繰り返しの少なくとも一部からの命令が、命令ワード内で、前記特定の１つのメモリユニット以外のメモリユニットからの異なる命令と漸進的に組み合わされる、請求項１１に記載の命令ワードから成るプログラムを実行する方法。
【請求項１４】
命令ワードを含むコンピュータプログラムプロダクトであって、前記各命令ワードは、請求項２に記載のデータ処理装置により１または複数の対応する命令サイクルで実行され、前記命令ワードが少なくとも１つの変更更新命令を含み、この変更更新命令により、前記データ処理装置は、変更更新ワードの実行後、第１の命令ワードをアドレス指定した際に、前記第１の命令ワードからの命令と第１の命令ワード以外からの更なる命令とを組み合わせる、コンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令ワードからの複数の命令を並行して実行することができるＶＬＩＷ（超長命令語）プロセッサ等のデータ処理装置に関する。
【背景技術】
【０００２】
ＶＬＩＷプロセッサによれば、高い命令並行度をもってプログラムを実行することができる。従来、各命令サイクルにおいて、ＶＬＩＷプロセッサは、複数の所定の数の命令（多くの場合、演算と呼ばれる）を含む命令ワードをフェッチする（呼び出す）ためにプログラムカウンタを使用する。ＶＬＩＷプロセッサは、これらの演算を同じ命令サイクル（または複数のサイクル）内で並行して実行する。
【０００３】
この目的のため、ＶＬＩＷプロセッサは複数の機能ユニットを有しており、各機能ユニットは命令ワードからの演算のうちの１つを同時に実行することができる。ＡＬＵ（演算論理回路）、乗算器、ブランチ制御ユニット、メモリアクセスユニット等の様々な種類の機能ユニットが通常設けられる。多くの場合、特定の用途のためプログラムの速度を上げるように設計された専用の機能ユニットも含まれる。したがって、例えばＭＰＥＧエンコーディングまたはデコーディングの一部を実行するための機能ユニットが加えられる場合もある。高性能ＶＬＩＷプロセッサにおいては、数百個の機能ユニットが存在する場合もある。基本的に、命令ワードは、これらの機能ユニットの全てのための命令を同時に含んでいなければならない。
【０００４】
略語ＶＬＩＷは、これが超長命令語であることを表わしている。その結果、特にＶＬＩＷプロセッサによって実行されるプログラムが多くの命令を含んでいる場合には、そのような命令から成るプログラムを記憶するためにかなりの量の命令メモリが必要である。これによりコストが高くなる。
【０００５】
これらのコストを減らすための幾つかの手段が提案されてきた。例えば、複数の機能ユニットを１または複数の機能ユニットから成る複数のグループに編成することにより、命令ワードがグループ毎に１つの命令を与えるようにしている。これにより、命令ワード中に含まれるべき命令の量が限られ（少なくとも幾つかのグループが複数の機能ユニットを有している場合）、その結果、命令を受けることができる機能ユニットの数を減らすことなく、命令メモリのサイズが減少する。しかしながら、このようなグループ分けにより、並行に命令を実行できる機能ユニットの数が減少するので、並行度の大きさとメモリサイズとの間に直接的なトレードオフが常に存在する。
【０００６】
また、より一般的には、ＶＬＩＷ命令における命令ワード中に命令を組み込まなければならないという制約により、プログラムによって使用されるメモリのサイズが大きくなる。例えば、プログラムが命令サイクルにおいて様々な組み合わせの命令の他の実行をサポートしなければならない場合、全ての考えられる組み合わせにおける命令ワードを記憶しなければならない。機能ユニットのある部分が命令の同じループを繰り返し多数回実行しなければならず且つ機能ユニットの他の部分が異なる命令を漸進的に実行しなければならない場合、従来のＶＬＩＷプロセッサは、ループを広げることを両者間で選択するという選択肢、すなわち、ループの命令の繰り返されたコピーと漸進的に異なる命令とを組み合わせることによりプログラムを拡張し、あるいは、ループおよび漸進的命令を異なる命令サイクルで実行するという選択肢しか有さない。前者は、必要な命令メモリサイズをかなり大きくしてしまうとともに、ループの繰り返し数が予め分かっていない場合には不可能である。後者では、並行度の量が減ってしまうため、実行時間が長くなる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特に、本発明の目的は、ＶＬＩＷプロセッサにおける命令ワード内で命令を組み合わせることができる自由度を高めることである。
【０００８】
特に、本発明の他の目的は、ＶＬＩＷプロセッサにおいて必要とされる命令メモリの量を減らすことである。
【課題を解決するための手段】
【０００９】
本発明は、請求項１に係るデータ処理装置を提供する。このデータ処理装置は、例えばＶＩＬＷプロセッサのごときタイプのものであり、異なる機能ユニットのための複数の命令を含む命令ワードをアドレス指定する命令アドレスを用いたプログラムフローの集中制御を使用する。しかしながら、プログラム実行中、機能ユニットのうちの特定の１つまたは複数の機能ユニットから成る１つのグループに関して、命令アドレスの物理アドレスへの変換を選択的に変更することができる。
【００１０】
これを使用することにより、プログラム実行中に異なるメモリユニットからの複数の命令によって命令ワードを構成する方法を変更することができる。したがって、プログラム中の第１のＶＬＩＷ命令ワードの一部がプログラム中の第２のＶＬＩＷ命令ワードの一部のコピーである場合、両方のワードのための記憶場所を全て設ける必要はない。その代わり、第１の命令ワードのための命令アドレスの供給と第２の命令ワードのための命令アドレスの供給との間でアドレス変換を変更することにより、第２の命令ワード内で第１の命令ワードの記憶された部分を再使用することができる。したがって、プログラムを記憶するために必要なメモリが少なくて済む。これは、他の機能ユニットが漸進的命令を実行している間に機能ユニットの一部がループボディを繰り返し実行しなければならないループを実施するため、あるいは、機能ユニットの一部が条件付きで他の命令を実行する一方で他の機能ユニットが条件とは無関係に同じ命令を実行する「ｉｆ−ｔｈｅｎ−ｅｌｓｅ」構成を実施するために適用されても良い。
【００１１】
アドレス変換の変更は、プログラムの命令の一部である変更更新命令によって制御されることが好ましい。変更更新命令は、メモリユニットのうちの特定の１つのメモリユニットからの命令中に含まれていても良く、あるいは、上記特定の１つのメモリユニット以外の１または複数のメモリユニットからの命令中に含まれていても良い。したがって、ルーピングおよび条件付実行にわたって自由度のある制御を実現することができる。しかしながら、本発明から逸脱することなく、変換の変更の制御は、例えば１または複数のメモリ管理ユニットを使用することによりプログラムの外側で実現されても良い。メモリ管理ユニットは、メモリユニット毎に異なっていても良い命令アドレスの変換を与えることにより、異なるメモリユニットにおいては同じ命令アドレスを異なって変換することができるようにする。この場合、命令ワードのある部分を供給するあるメモリユニットにおいては異なる命令アドレスをそれぞれ同じ物理アドレスに変換することができるとともに、命令ワードの他の部分を供給する他のメモリユニットにおいては異なる命令アドレスをそれぞれ異なる命令アドレスに変換することができる。これは、メモリユニットの一部だけによって所定回数繰り返し供給されなければならない命令のループを実施する場合に特に有益である。
【００１２】
他の実施形態において、メモリユニットのうちの少なくとも特定の１つのメモリユニットは、他の１つのメモリユニットが記憶場所を利用可能にするアドレス範囲よりも小さいアドレス範囲のためだけの記憶場所を有している。命令アドレスがこの範囲外のアドレスとなった場合、その命令を上記特定の１つのメモリユニットから得る機能ユニットは、例えば規定のノーオペレーション命令を供給することにより或いは機能ユニットを無効にすることにより非アクティブにされても良い。機能ユニットは、非アクティブにされると、例えば機能ユニット内でクロック信号を無効にすることにより電力節約状態に切り換えられることが好ましい。
【００１３】
上記データ処理装置は、他の機能ユニットが漸進的命令を実行する命令サイクル中に幾つかの機能ユニットのためのループを実行することを含むプログラムを実行するために使用することができる。ループバックが生じる度に、ループ内に含まれる機能ユニットにおける命令アドレスの変換が変更されることにより、ループからの命令が同じ記憶場所から繰り返しフェッチされる。
【００１４】
共通の命令アドレスのメモリアドレスへの変換は、複数の機能ユニットまたは機能ユニットから成るグループに関して変更されても良い。したがって、互いに異なる数の命令を有する複数のループが並行に実行されても良い。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照しながら、本発明に係るデータ処理装置および方法のこれらの態様および他の有利な態様について詳細に説明する。
【００１６】
図１は、メモリユニット１２ａ〜１２ｃを有するメモリシステム１０と、コントローラ１４と、機能ユニット１８ａ〜１８ｅのグループ７０ａ〜７０ｃとレジスタファイル７２と命令アドレスカウンタユニット７４とを有する命令実行ユニット７と、オフセット加算器１５ａと、オフセットレジスタ１５ｂとを備えている処理装置を示している。命令アドレスカウンタユニット７４は、コントローラ１４に結合される命令アドレス出力部を有している。コントローラ１４は、各メモリユニット１２ａ〜１２ｃに結合されたアドレス出力部を有している。これらのアドレス出力部のうちの１つは、オフセット加算器１５ａを介してメモリユニット１２ｃに結合されている。メモリユニット１２ａ〜１２ｃは、各グループ７０ａ〜７０ｃとレジスタファイル７２とに結合された命令出力部を有している。レジスタファイルは、グループ７０ａ〜７０ｃに結合されたオペランド／結果出力／入力ポート（別個に図示せず）を有している。各グループ７０ａ〜７０ｃは１または複数の機能ユニット１８ａ〜１８ｅを有しており、これらの機能ユニットは全て、メモリユニット１２ａ〜１２ｃに結合された演算コード入力部と、レジスタファイル７２に結合されたオペランド入力部と、レジスタファイル７２に結合された結果出力部とを有している（これらの全ては、メモリユニット１２ａ〜１２ｃと機能ユニット１８ａ〜１８ｅのグループ７０ａ〜７０ｃとレジスタファイル７２との間の１つの接続部によって象徴されている）。１つのグループ７０ｂは、命令アドレスカウンタユニット７４に結合されたブランチアドレス出力部を有している。他のグループ７０ｃは、オフセットレジスタ１５ｂに結合されたオフセット調整出力部を有している。オフセットレジスタ１５ｂは、オフセット加算器１５ａに結合されたオフセット出力部を有している。
【００１７】
動作時、処理装置は一連の命令サイクルで動作する。命令サイクルにおいて、アドレスカウンタユニット７４は連続する命令から成るアドレスをコントローラ１４に出力する（これらの命令は、対応する命令が連続的に実行されるため「連続する」と呼ばれる。しかしながら、ブランチの場合には、アドレスが連続的でない場合もある）。コントローラは、命令アドレスから得られる更なる命令アドレスをメモリユニット１２ａ〜１２ｃに出力する。更なる命令アドレスのうちの１つは、オフセットレジスタ１５ｂからのオフセットを更なる命令アドレスに対して加えるオフセット加算器１５ａによって変更される。（変更された）更なる命令アドレスは、メモリユニット１２ａ〜１２ｃ内の命令記憶場所をアドレス指定する。メモリユニット１２ａ〜１２ｃは、アドレス指定された命令を命令実行ユニット７に対して出力する。
【００１８】
メモリユニット１２ａ〜１２ｃから出力された命令の組み合わせは、様々な命令のための領域を有する命令ワードを形成する。機能ユニット１８ａ〜１８ｅから成る各グループ７０ａ〜７０ｃは、メモリユニット１２ａ〜１２ｃのうちの対応する１つから命令を受ける。グループ７０ａ〜７０ｃの機能ユニット１８ａ〜１８ｅは、グループ７０ａ〜７０ｃの機能ユニット１８ａ〜１８ｅのうちのどれが対応するメモリユニット１２ａ〜１２ｃからの命令を実行すべきかを決定するとともに、その機能ユニットは、命令によってアドレス指定されたオペランドをレジスタファイル７２から読み取る（もしあれば）とともに、結果をレジスタファイル７２に対して供給する（もしあれば）。
【００１９】
図示のように、グループ７０ａ〜７０ｃのうちの１つは、命令に応じて命令アドレスカウンタユニット７４内の命令アドレスを更新するために、ブランチ機能ユニット１８ｄからの接続部を有している。ブランチ機能ユニット１８ｄは、例えばある条件が満たされたことを決定する際に、この更新を実行する。更新は、絶対的（アドレスカウンタユニット７４内のプログラムカウンタ値の交換）であっても、あるいは、相対的（プログラムカウンタ値への付加）であっても良い。一例として１つの接続部が示されている。実際には、複数のグループ７０ａ〜７０ｃが命令アドレスカウンタユニット７４に結合された１または複数のブランチ機能ユニットを有していても良い。
【００２０】
ブランチ機能ユニット１８ｄによるアドレスカウンタユニット７４内のプログラムカウンタ（命令アドレス）の更新は、機能ユニットから成る全てのグループ７０ａ〜７０ｃのためのプログラム（命令アドレス）フローに影響を与える。オフセット加算器１５ａおよびオフセットレジスタ１５ｂは、機能ユニット７０ｃから成るグループのうちの１つ７０ｃのためのプログラム（命令アドレス）フローに影響を与える方法を個別に与える。この目的のため、グループ７０ｃはローカルブランチ機能ユニット１８ｅを有している。ローカルブランチ機能ユニット１８ｅは、ローカルブランチ機能ユニット１８ｅがアドレスカウンタユニット全体内のプログラムカウンタ値を更新しない点を除き、従来のブランチ機能ユニット１８ｄと基本的に同じ方法でローカルブランチ命令を処理する。その代わり、ローカルブランチ機能ユニット１８ｅは、オフセットレジスタ１５ｂ内のオフセット値を更新する。オフセットレジスタ１５ｂは、機能ユニットから成るグループ７０ａ〜７ｃのうちの１つのメモリユニット１２ａ〜１２ｃに供給されるアドレスを変更するために使用される。したがって、プログラム実行中、この実行中に生じる条件に応じて、オフセットを変更することができる。
【００２１】
図２は、機能ユニットから成る他のグループ７０ａ，７０ｂが漸進的命令を実行する一方で、機能ユニットから成る１つのグループ７０ｃを用いて命令のループを繰り返し実行するためにオフセットがどのように使用され得るかを示している。この図においては、命令アドレス値Ａが垂直方向にプロットされるとともに、時間を表わす命令サイクル数が水平方向にプロットされている。第１のライン２０は、メモリユニットの一部１２ａ，１２ｂに対して連続的に供給されるプログラムカウンタ７４からの漸進的命令アドレスを示しており、第２のラインは、漸進的アドレスと並行してメモリユニットのうちの１つ１２ｃに対して連続的に供給されるルーピングアドレス２２を示している。
【００２２】
この場合、１つのメモリユニット１２ｃはループからの命令を含んでおり、他のメモリユニット１２ａ，１２ｂは漸進的命令を含んでいる。最初に、オフセットレジスタ１５ｂ内のオフセット値が例えばゼロであり、全てのメモリユニット１２ａ〜１２ｃが同じアドレスを受ける。ループの最後に、１つのメモリユニット１２ｃがローカルブランチ機能ユニット１８ｅのためのブランチ命令を出力し、それに伴ってローカルブランチ機能ユニット１８ｅがオフセットレジスタ１５ｂ内のオフセットからオフセット値を差し引く。オフセットは、ループの始まりとブランチ命令との間のオフセットに等しい。結果として、プログラムカウンタユニット７４内のプログラムカウンタ値が増大し続けるが、メモリユニットのうちの１つ１２ｃがループの始めから命令のフェッチングを繰り返し始める。ループからの命令が十分な回数実行されると、ローカルブランチ機能ユニット１８ｅによってオフセット値が差し引かれない。その代わり、暗黙のうちにブランチバック無しに、あるいは、その後の命令に応じて、ローカルブランチ機能ユニット１８ｅは、オフセットレジスタ１５ｂ内のオフセットをゼロまたは他の適当な値にリセットしても良い。
【００２３】
しかしながら、本発明はループに限定されない。例えば、機能ユニットの一部のための「ｉｆ−ｔｈｅｎ−ｅｌｓｅ」構成は、「ｔｈｅｎ」節または「ｅｌｓｅ」節を実行しなければならないか否かに応じてオフセットレジスタ１５ｂ内のオフセット値を更新することによりサポートされても良い。同様の技術が「ｓｗｉｔｃｈ  ｂｙ  ｃａｓｅ」構成に適用されても良い。
【００２４】
図２に示されるように、プログラムカウンタユニット７４からの命令アドレスは均等に漸進する。無論、ブランチがこの均等な漸進からの偏りを引き起こしても良い。したがって、処理装置によって実行のための命令ワードを生成するコンパイラは、機能ユニットから成る１つのグループがプログラムカウンタ全体からの選択可能なオフセットを伴ってアドレスからの命令を実行することが必要なプログラムの一部の間、全てのブランチ命令（特に条件ブランチ命令）を回避することが好ましい。一実施形態において、処理装置によって実行するための命令を生成するコンパイラは、オフセットが適用されるプログラムの部分でそのようなプログラムカウンタブランチが生じないことをチェックした後においてのみ命令を変更するオフセットを加え、あるいは逆に、オフセットが適用されるプログラムの部分におけるプログラムカウンタブランチ命令を回避する（これは、例えば所謂「ｉｆ−ｃｏｎｖｅｒｓｉｏｎ（転換仮定）」を使用して、すなわち、「ｔｈｅｎ  ｃａｓｅ」において実行されなければならない命令Ｉ１および「ｅｌｓｅ  ｃａｓｅ」において実行されなければならない命令Ｉ２（もしあれば）の両方を含ませてプログラム内で実行し且つこれらの命令Ｉ１，Ｉ２のそれぞれの実行の終了を「ｉｆ」条件節から計算された特定のガードビット値に関して条件節にすることにより「ｉｆ  ｔｈｅｎ  Ｉ１  ｅｌｓｅ  Ｉ２」を実施することによって実現されても良い）。
【００２５】
しかしながら、コンパイラは、対応するローカルブランチを挿入してオフセットを更新し、それにより、プログラムカウンタ値全体のブランチの効果を元に戻しても良い。したがって、プログラムカウンタユニット７４からの命令アドレスのブランチングまたはルーピング作用を、メモリユニット１２ａ〜１２ｃのうちの１つに対して適用されるローカルアドレスの着実な漸進と組み合わせることができる。
【００２６】
この説明では、コントローラ１４が同じアドレスを全てのメモリユニット１２ａ〜１２ｃに対して供給することを前提としているが、実際には、必ずしもそうである必要はない。本発明から逸脱することなく、コントローラ１４は、異なる形式のマッピングを適用しても良い。同様に、ローカルブランチ機能ユニット１８ｅは、その命令アドレスが変更される機能ユニットから成るグループ９０ａ〜９０ｃ内に示されているが、本発明から逸脱することなく、ローカルブランチ機能ユニット１８ｅは、機能ユニットから成る任意のグループ７０ｃ内に配置されていても良いことは言うまでもない。また、１つのメモリユニット１２ｃにおいてはローカルブランチ機能ユニット１８ｅがたった１つだけ示されているが、同じメモリユニット１２ｃにおいてオフセットを変更するために、例えばオフセットレジスタ１５ｂ内または複数のオフセットレジスタ内のオフセットを変更するために複数のローカルブランチユニットが設けられていても良いことは言うまでもない。
【００２７】
図３は、アドレスを変更するための回路３００がメモリユニット１２ａ〜１２ｃのうちの複数に設けられたデータ処理装置を示している。本発明から逸脱することなく、そのような回路は、１または複数のメモリユニット１２ａ〜１２ｃの一部のためだけに設けられていても良い。図示のように、これらの各回路によって与えられるオフセットは、対応するローカルブランチ機能ユニット１８ｅによって制御される。しかしながら、本発明から逸脱することなく、ローカルブランチ機能ユニット１８ｅは、どのメモリユニット１２ａ〜１２ｃのためにオフセットを変更するべきかを選択する命令を実行するように構成されていても良い。また、複数のメモリユニット１２ａ〜１２ｃのために共有のアドレス変更回路が使用されても良い。
【００２８】
図４は、機能ユニットから成る１つのグループが漸進的命令を実行し且つ機能ユニットから成る他のグループが漸進的命令の実行の前後において対応するループボディの繰り返しを実行するプログラムフローの一例を示している。実行中、プログラムカウンタ値ＰＣが図の上から下に向かって次第に増加する。機能ユニットから成るグループのうちの対応する１つのための命令実行が各縦列４００ａ〜４００ｃに示されている。第１の縦列４００ａは、連続的に実行される命令の第１および第２のブロック４０２，４０４を示している。第２および第３の縦列４００ｂ，４００ｃは、ブロック４０６，４０８の反復実行を示している。データ依存により、ブロック４０６，４０８の反復実行は、第１のブロック４０２内の特定の命令が実行された後においてのみ開始することができる。これに対し、第２のブロック４０４の実行は、反復実行されるブロック４０８内の特定の命令が最後に実行された後においてのみ開始することができる。第１の縦列は、第１のブロック４０２の最後の命令の実行と第２のブロック４０４の最初の命令の実行開始との間に、ノーオペレーションだけが実行されても良い中間ブロック４０３を含んでいる。
【００２９】
本発明において、この種の実行は、関連するブロックの新たな繰り返しの実行を開始する度に反復実行されるブロック４０６，４０８を実行する機能ユニットにおいてオフセットを更新することにより実現される。したがって、ブロック４０６，４０８からの命令を含む命令アドレス場所が繰り返しアドレス指定されるが、プログラムカウンタＰＣ値全体は着実に増大する。
【００３０】
中間ブロック４０３の実行中、第１の縦列４００ａからの命令を実行する機能ユニットから成るグループは、その対応する命令メモリユニット内の連続的に高い複数の記憶場所からノーオペレーションを受けても良い。したがって、他の機能ユニット内のブロック４０６，４０８からの命令の反復実行に対応するその命令メモリユニット内には、多数のノーオペレーションが供給されなければならない。また、ノーオペレーションのボディまたは中間ブロック４０３内のループバック命令の反復「実行」を与えるために、第１の縦列４００ａの命令を有する命令メモリのためのオフセットが周期的に更新されても良い。したがって、記憶空間が節約される。好ましくは、このボディは、できる限り短くなければならないとともに、反復実行をもってできる限り中間ブロック４０３を満たすために、中間ブロック４０３内でできる限り多くの回数繰り返されなければならない。
【００３１】
第１の縦列４００ａからの命令を実行する機能ユニットから成るグループからの命令により、第２または第３の縦列４００ｂ，４００ｃからの命令を実行する機能ユニットから成るグループのオフセットレジスタの更新を可能にするように装置が構成されている場合、第１の縦列４００ａ（中間ブロック４０３を含む）は、ブロック４０６および／またはブロック４０８の反復実行を引き起こす命令を含んでいても良い。さもなければ、これらの命令がブロック４０６および／またはブロック４０８内に含まれていても良い。
【００３２】
本発明が使用される場合には、メモリユニット１２ａ〜１２ｃのアドレス範囲が同一の広がりを持っている必要はない。すなわち、メモリユニット１２ａ〜１２ｃは、互いに異なる数のアドレス可能な記憶場所を有していても良い。したがって、例えば、ブランチ命令およびＡＬＵ（演算論理回路）命令を含む、一組の多目的命令を実行する機能ユニットからなる１つのグループ７０ａを対象とする命令ワードの一部を有するメモリユニット１２ａ〜１２ｃのうちの第１のメモリユニットは、他の更に専門化された機能ユニットのグループに対して命令を適用するメモリユニット１２ａ〜１２ｃよりも多くの数の命令アドレスを与えても良い。この場合、多目的機能ユニットは、一般に、プログラムの実行中に命令を実行するようにアクティブであっても良い。これに対し、更に専門化された機能ユニットアドレスは、プログラムの実行中に断続的にのみアクティブであっても良く、あるいは、多目的機能ユニットが異なる命令を漸進的に実行している間に命令のループを繰り返し実行しても良い。
【００３３】
機能ユニットから成る１つのグループ７０ａ〜７０ｃが命令を実行する必要がない場合には、そのグループのメモリユニット１２ａ〜１２ｃにおいてメモリアドレスを実行するために使用されるオフセットを繰り返し更新することにより、そのメモリユニットに適用されるアドレスの範囲を制限し、それにより、そのメモリユニット１２ａ〜１２ｃのための範囲にアドレスを位置付けても良い。しかしながら、機能ユニットのそのグループ７０ａ〜７０ｃがプログラムの一部の最中に命令を実行する必要がない場合には、関連するメモリユニット１２ａ〜１２ｃが少なくとも部分的に無効にされることが好ましい。したがって、ワット損を減らすことができる。この場合、関連するメモリユニット１２ａ〜１２ｃが命令を記憶しないアドレス値の範囲にわたって、命令アドレスが実行され続けても良い。
【００３４】
本発明は、命令のループの反復実行に限定されない。例えば、機能ユニットから成るグループ７０ａ〜７０ｃの一部（他のグループは、「ｔｈｅｎ」節の場合および「ｅｌｓｅ」節の場合の両方で同じ命令を実行する）だけに影響を与えるｉｆ−ｔｈｅｎ−ｅｌｓｅ節を含むプログラムが本発明を使用しても良い。この場合、選択されたグループ７０ａ〜７０ｃのメモリユニット１２ａ〜１２ｃにおけるオフセットは、機能ユニットから成る他のグループのための命令アドレスが実行中の時に、「ｉｆ」条件節に応じて更新されても良い。したがって、これらの他の機能ユニットのために余計な命令を与える必要がなくなる。
【００３５】
機能ユニットから成る全てのグループ７０ａ〜７０ｃは差異無く示されているが、実際にグループが異なっていても良いことは言うまでもない。すなわち、幾つかのグループ内の機能ユニットが、文字データ、例えばメモリユニット１２ａ〜１２ｃからのブランチアドレスまたは定数を受けても良い。これに対し、他のグループ内の機能ユニットだけが演算コードを受けても良い。このデータはレジスタファイル７２から供給される。また、幾つかのグループは、他のグループよりも多い数のオペランドを受けても良く、あるいは、他のグループよりも多い結果を生成しても良い。
【００３６】
また、機能ユニットから成る各グループ７０ａ〜７０ｃ毎に別個のメモリユニット１２ａ〜１２ｃが示されているが、幾つかのグループがメモリユニット１２ａ〜１２ｃを共有し、それにより、メモリユニットがこれらのグループのための命令を同時に生成しても良い（一般に、これらのメモリユニットは、他のメモリユニット１２ａ〜１２ｃよりも広い命令出力を有している）ことは言うまでもない。
【００３７】
また、オフセットレジスタはアドレス変更を実施するための簡単な方法として示されているが、本発明から逸脱することなく、他の方法を使用することにより、命令ワードから命令を供給するメモリユニット１２ａ〜１２ｃの一部においてアドレスを変換しても良いことは言うまでもない。
【００３８】
図５は、例えば、それ自体が従来と同様であり且つ命令アドレスに依存する変換を与えるために命令アドレスカウンタユニットと幾つかのメモリユニット１２ａ〜１２ｃとの間で使用される１または複数のメモリ管理ユニット５００を示している（本発明から逸脱することなく、メモリ管理ユニットは、１つのメモリユニット１２ａ〜１２ｃのためにだけに使用され、あるいは、全てのメモリユニット１２ａ〜１２ｃのために使用されても良い）。この場合、異なるメモリユニットにおける変換を異ならせ、それにより、互いに異なる第１および第２の命令アドレスが、メモリユニットの一部において同じ物理アドレスに変換されるが、他のメモリユニットにおいて互いに異なる物理アドレスに変換されるようになっていても良い。このようにすれば、プログラム内で変更更新命令を必要とすることなく、共通の命令アドレスカウンタ値に応じてアドレス変換を変えることにより、前述した実施例を実現することができる。この命令アドレスカウンタ（プログラムカウンタとも呼ばれる）値は、機能ユニットの一部に影響を与えるループの一連の繰り返しにわたって継続する。機能ユニットから成る特定のグループ７０ａがループからの命令を実行しなければならないか否かを命令アドレスの値によって決定することができ、必要に応じて、繰り返し数さえも決定することができる。したがって、メモリ管理ユニット５００は、関連するメモリユニットにおける命令アドレスを繰り返し変換することにより、同じ命令を繰り返しフェッチする。なお、この場合、変換の変更についての詳細を１つの命令アドレスレベルにおいて行なうことにより、１つのグループ７０ａ〜７０ｃが時間のループ部分からの命令を実行できる一方で、その同じグループ７０ａ〜７０ｃの機能ユニットが時間の残りの部分からの漸進的命令を実行できるようにしても良い。
【００３９】
しかしながら、プログラム制御されたオフセットレジスタは、メモリ管理ユニットよりも実施が複雑でなく、簡単なデータ依存制御をサポートするという利点を有しているが、所定数の繰り返しをもってループを実施する場合には、そのようなメモリ管理ユニットも同様にうまく機能する。無論、本発明から逸脱することなく、周期的にオフセットを自動更新するオフセットカウンタ等の他の実施形態が使用されても良い。また、例えばオフセットレジスタとメモリ管理ユニットとを組み合わせて使用しても良い。
【００４０】
実際には、処理装置は命令実行のパイプライニングを使用しても良い。すなわち、同じ命令サイクルにおいて、コントローラ１４が１つの命令アドレスを処理しても良く、メモリユニット１２ａ〜１２ｃが先行する命令アドレスにおける命令を検索しても良く、機能ユニット１８ａ〜１８ｅが１または複数だけ更に先行する命令アドレスにおいて１または複数の処理段階を処理しても良い。この場合、オフセットレジスタ１５ｂからのオフセットの適用もパイプライン処理されても良い。
【図面の簡単な説明】
【００４１】
【図１】データ処理装置を示している。
【図２】命令のループの実行を示している。
【図３】データ処理装置を示している。
【図４】プログラムフローの一例を示している。
【図５】データ処理装置を示している。
【図１】
2006502489.tif 000003
【図２】
2006502489.tif 000004
【図３】
2006502489.tif 000005
【図４】
2006502489.tif 000006
【図５】
2006502489.tif 000007
【国際調査報告】
2006502489.tif 000008
2006502489.tif 000009