(57)【特許請求の範囲】
【請求項１】
実行サイクル数が動的に変化する第１の命令を実行するために、最大の実行サイクル数に対応する数の複数の第１の命令である命令群が格納されている命令メモリから前記第１の命令をフェッチするフェッチ部と、
前記命令群の次の命令が格納されている前記命令メモリのアドレスが保持されるアドレスレジスタと、
前記フェッチ部によりフェッチされた命令を解読するデコード部と、
前記デコード部により解読された命令を受けて演算を実行し、前記第１の命令の実行に必要な演算の完了を判断したときに終了信号を出力する演算部と
を備え、
前記フェッチ部は、前記終了信号に応答して前記アドレスレジスタ内のアドレスを用いて前記次の命令を前記命令メモリからフェッチすること
を特徴とするプロセッサ。
【請求項２】
前記デコード部は、解読した命令が前記第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むために出力し、
前記アドレスレジスタは、前記デコード部によりアドレスが書き込まれてから前記終了信号が出力されるまで、新たなアドレスの書き込みが禁止されること
を特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記デコード部は、解読した命令が前記命令群の先頭の第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むこと
を特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記命令メモリと前記フェッチ部との間に、前記命令メモリからの命令をプリフェッチするプリフェッチ部を備え、
前記フェッチ部は、前記プリフェッチ部を介して前記命令メモリに保持されている命令をフェッチし、前記終了信号が出力されたときに前記プリフェッチ部を介することなく前記命令メモリに直接アクセスし、前記次の命令を前記命令メモリからフェッチすること
を特徴とする請求項１ないし請求項３のいずれか１項に記載のプロセッサ。
【請求項５】
前記デコード部は、前記終了信号が出力された後、前記フェッチ部から前記次の命令を受けるまで、演算の実行を停止する命令を前記演算部に出力すること
を特徴とする請求項１ないし請求項４のいずれか１項に記載のプロセッサ。
【請求項６】
前記演算部と、前記演算部による演算の結果をメモリまたはレジスタに書き込む書き込み部とを各々有し、並列に動作する複数のパイプラインを備え、
前記第１の命令の演算は、前記パイプラインのいずれかの前記演算部で実行されること
を特徴とする請求項１ないし請求項５のいずれか１項に記載のプロセッサ。
【請求項７】
前記次の命令を保持する命令レジスタを備え、
前記フェッチ部は、前記命令メモリからコード長が圧縮された命令をフェッチし、
前記デコード部は、前記フェッチ部から受ける圧縮された命令を解凍し、解凍した命令を解読して前記パイプラインに出力し、前記パイプラインに出力しきれない解読した命令が残っているとき、前記フェッチ部に停止信号を出力し、前記終了信号を受けたときに前記命令レジスタ内の前記次の命令を解読し、
前記フェッチ部は、前記停止信号を受けているときに、前記アドレスレジスタ内のアドレスを用いて前記命令メモリにアクセスし、前記次の命令を前記命令メモリからフェッチし、フェッチした前記次の命令を前記命令レジスタに格納し、前記終了信号に応答して前記次の命令をフェッチする代わりに、前記アドレスレジスタ内のアドレスの１つ先のアドレスを用いて命令をフェッチすること
を特徴とする請求項６に記載のプロセッサ。
【請求項８】
請求項１ないし請求項７のいずれか１項に記載のプロセッサと、
前記プロセッサが演算するデータを生成するデータ生成部と、
前記プロセッサにより演算されたデータを用いてデータ処理を実行するデータ処理部と
を備えていることを特徴とするシステム。
【請求項９】
実行サイクル数が動的に変化する第１の命令を実行するために、最大の実行サイクル数に対応する数の複数の第１の命令である命令群が格納されている命令メモリから前記第１の命令をフェッチし、
フェッチされた命令を解読し、
解読された命令を受けて演算を実行し、前記第１の命令の実行に必要な演算の完了を判断したときに終了信号を出力し、
前記終了信号に応答して、前記命令群の次の命令が格納されている前記命令メモリのアドレスをアドレスレジスタから読み出し、読み出したアドレスを用いて前記次の命令を前記命令メモリからフェッチすること
を特徴とするプロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびプロセッサが搭載されるシステムおよびプロセッサの動作方法に関する。
【背景技術】
【０００２】
情報技術の発展により、大量の情報を処理する必要が出てきている。特に、マルチメディア、通信、数値計算の分野ではその傾向が著しい。このような分野では、例えば、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等のプロセッサにより大量の信号データが処理される。また、ソフトウェアにより無線処理を行う携帯電話機でも、大量の信号データを処理するのにＤＳＰが必要とされている。この種のプロセッサは、例えば、配列の演算のように、メモリ内に連続して、または規則的に並んでいる同一属性のデータを処理することが多い。これは、プロセッサに入力されるデータが特定のフォーマットに則っているためである。
【０００３】
また、大量の情報を並列に処理するために、複数のパイプラインを有するスーパースカラプロセッサやＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）型のプロセッサが開発されている。ＶＬＩＷ型のプロセッサでは、並列処理ができないときに、プログラムにＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）命令が埋め込まれる。ＶＬＩＷ型のプロセッサにおいて、プログラムに記述されているＮＯＰ命令を圧縮することで、プログラムサイズを小さくする手法が提案されている（例えば、特許文献１参照。）。
【０００４】
例えば、配列の演算を実行するある種の命令では、演算データを格納するメモリのアクセス効率の変化に応じて実行サイクルが動的に変化し、あるいは、データの演算回数の変化に応じて実行サイクルが動的に変化する。実行サイクルが動的に変化する場合、プログラムを生成するコンパイラ等により実行サイクル数をあらかじめ計算することは困難である。そのため、最大の実行サイクル数に対応する数の命令がプログラムに記述される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１８２１６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、命令を実行するために最大の実行サイクル数が必要なことは稀である。プロセッサの演算器は、演算が終了した後に、残りの命令をＮＯＰ命令等に置き換えて実行するが、この期間は無駄な時間である。
【０００７】
本発明の目的は、実行サイクルが動的に変化する命令を実行するときに、不要な命令が実行されることを防止し、プロセッサの演算処理の性能を向上させることである。
【課題を解決するための手段】
【０００８】
本発明の一形態では、プロセッサは、実行サイクル数が動的に変化する第１の命令を実行するために、最大の実行サイクル数に対応する数の複数の第１の命令である命令群が格納されている命令メモリから第１の命令をフェッチするフェッチ部と、命令群の次の命令が格納されている命令メモリのアドレスが保持されるアドレスレジスタと、フェッチ部によりフェッチされた命令を解読するデコード部と、デコード部により解読された命令を受けて演算を実行し、第１の命令の実行に必要な演算の完了を判断したときに終了信号を出力する演算部とを備え、フェッチ部は、終了信号に応答してアドレスレジスタ内のアドレスを用いて次の命令を命令メモリからフェッチする。
【発明の効果】
【０００９】
実行サイクルが動的に変化する命令を実行するときに、不要な命令が実行されることを防止でき、プロセッサの演算処理の性能を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、一実施形態におけるプロセッサの例を示している。
【図２】図２は、別の一実施形態におけるプロセッサの例を示している。
【図３】図３は、サイクル可変命令の例と、サイクル可変命令を実行するための演算部の例を示している。
【図４】図４は、サイクル可変命令の別の例と、サイクル可変命令を実行するための演算部の例を示している。
【図５】図５は、図３および図４に示したサイクル可変命令の実行において、実行サイクル数が動的に変化する例を示している。
【図６】図６は、サイクル可変命令の別の例と、サイクル可変命令を実行するための演算部の例を示している。
【図７】図７は、図６に示した検索命令のコンパイルの例を示している。
【図８】図８は、図２に示したプロセッサの動作の例を示している。
【図９】図９は、図２に示したプロセッサがアドレスレジスタを持たないときの動作の例を示している。
【図１０】図１０は、図２に示したプロセッサの動作の別の例を示している。
【図１１】図１１は、別の実施形態におけるプロセッサの例を示している。
【図１２】図１２は、図１１に示したプロセッサの動作の例を示している。
【図１３】図１３は、図１１に示したプロセッサがアドレスレジスタを持たないときの動作の例を示している。
【図１４】図１４は、別の実施形態におけるプロセッサの例を示している。
【図１５】図１５は、図１４に示したプロセッサの動作の例を示している。
【図１６】図１６は、図１４に示したプロセッサがアドレスレジスタを持たないときの動作の例を示している。
【図１７】図１７は、別の実施形態におけるプロセッサの例を示している。
【図１８】図１８は、図１７に示したデコード部の解凍動作の例を示している。
【図１９】図１９は、図１７に示したプロセッサの動作の例を示している。
【図２０】図２０は、図１７に示したプロセッサがアドレスレジスタおよび命令レジスタを持たないときの動作の例を示している。
【図２１】図２１は、ベクトルレジスタを用いた加算処理において番号が連続するレジスタが指定される例を示している。
【図２２】図２２は、図２１に示した加算命令の圧縮および解凍の例を示している。
【図２３】図２３は、上述したプロセッサが搭載されるシステムの例を示している。
【図２４】図２４は、図２、図１１または図１４に示したフェッチ部の動作の例を示している。
【図２５】図２５は、図１７に示したフェッチ部の動作の例を示している。
【図２６】図２６は、図２、図１１または図１４に示したデコード部の動作の例を示している。
【図２７】図２７は、図１７に示したデコード部の動作の例を示している。
【図２８】図２８は、図２、図１１、図１４または図１７に示したアドレスレジスタの書き込み動作の例を示している。
【図２９】図２９は、図２、図１１、図１４または図１７に示した演算部の動作の例を示している。
【図３０】図３０は、別の実施形態におけるプロセッサの例を示している。
【図３１】図３１は、ブレイク付きループ命令のコンパイルの例を示している。
【図３２】図３２は、ブレイク付きループ命令を用いずにループ処理から抜ける命令のコンパイルの例を示している。
【図３３】図３３は、図３０に示したプロセッサの動作の例を示している。
【図３４】図３４は、図３０に示したプロセッサがアドレスレジスタ、ループ開始アドレスレジスタ、ループフラグレジスタおよびブレイク判断アドレスレジスタを持たないときの動作の例を示している。
【図３５】図３５は、図３０に示したフェッチ部の動作の例を示している。
【図３６】図３６は、図３０に示したデコード部の動作の例を示している。
【図３７】図３７は、図３０に示した演算部の動作の例を示している。
【図３８】図３８は、上述したプロセッサが搭載される携帯端末の例を示している。
【図３９】図３９は、図３８に示した携帯端末のベースバンド処理部のハードウェア構成を示している。
【図４０】図４０は、図３８に示した携帯端末の動作の例を示している。
【図４１】図４１は、図３８に示した携帯端末の無線方式の切り替え動作の例を示している。
【発明を実施するための形態】
【００１１】
以下、図面を用いて実施形態を説明する。
【００１２】
図１は、一実施形態におけるプロセッサＰＲＯＣの例を示している。例えば、プロセッサＰＲＯＣは、ＤＳＰ（ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）やＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。プロセッサＰＲＯＣは、フェッチ部ＦＴＣ、デコード部ＤＥＣ、演算部ＥＸおよびアドレスレジスタＡＲＥＧを有している。プロセッサＰＲＯＣは、命令メモリＩＭＥＭに接続されている。命令メモリＩＭＥＭには、実行サイクル数が動的に変化する第１の命令ＩＮＳ１および第１の命令以外の通常の命令ＩＮＳが格納されている。以降の説明では、実行サイクル数が動的に変化する命令は、サイクル可変命令とも称する。サイクル可変命令の例は、図３から図７に示す。
【００１３】
例えば、命令メモリＩＭＥＭのアドレス０ｘＸＸ００から０ｘＸＸ４Ｃには、複数の通常の命令ＩＮＳおよび複数の第１の命令ＩＮＳ１が格納されている。アドレスは、１６進数で表されており、アドレスを示すｘおよびＸは、任意の値である。この例では、各命令ＩＮＳ、ＩＮＳ１は、３２ビット（４バイト）で記述されるため、アドレスは４つずつ更新される。
【００１４】
第１の命令ＩＮＳ１等のサイクル可変命令の実行サイクル数は、プロセッサＰＲＯＣの内部状態（例えば、レジスタに保持されているデータ値やアクセスアドレスなど）により変化する。このため、最大の実行サイクル数に対応する数のサイクル可変命令が、プログラムに記述される必要がある。この例では、第１の命令ＩＮＳ１を実行するための最大の実行サイクル数は、例えば１６サイクルである。このため、命令メモリＩＭＥＭに格納されたプログラムにおいて、第１の命令ＩＮＳ１を実行するために、連続した１６個の第１の命令ＩＮＳ１を有する命令群（サイクル可変命令群）が記述されている。
【００１５】
フェッチ部ＦＴＣは、アドレスを順次更新してサイクル可変命令ＩＮＳ１および通常の命令ＩＮＳを命令メモリＩＭＥＭからフェッチし、フェッチした命令ＩＮＳ１、ＩＮＳをデコード部ＤＥＣに出力する。デコード部ＤＥＣは、フェッチ部ＦＴＣによりフェッチされた命令ＩＮＳ１、ＩＮＳを解読し、解読した命令を演算部ＥＸに出力する。演算部ＥＸは、デコード部ＤＥＣにより解読された命令を受けて演算を実行する。また、演算部ＥＸは、サイクル可変命令ＩＮＳ１を順次実行中に、必要な演算を全て完了したことを判断したときに終了信号ＥＮＤを出力する。
【００１６】
アドレスレジスタＡＲＥＧは、サイクル可変命令ＩＮＳ１の命令群の次の命令ＩＮＳが格納されている命令メモリＩＭＥＭのアドレス（この例では０ｘＸＸ４４）を保持している。フェッチ部ＦＴＣは、終了信号ＥＮＤに応答して、残りのサイクル可変命令のフェッチを止める。フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧ内のアドレス０ｘＸＸ４４を用いて、次の命令ＩＮＳを命令メモリＩＭＥＭからフェッチし、フェッチした命令ＩＮＳをデコード部ＤＥＣに出力する。
【００１７】
例えば、デコード部ＤＥＣがアドレス０ｘＸＸ１４に格納されている５番目のサイクル可変命令ＩＮＳ１の解読により、サイクル可変命令ＩＮＳ１の実行に必要な演算の完了を判断したとき、演算部ＥＸは、アドレス０ｘＸＸ１８−０ｘＸＸ４０に格納されているサイクル可変命令ＩＮＳ１を実行する必要がない。デコード部ＤＥＣは、フェッチ部ＦＴＣからの次の命令ＩＮＳ（アドレス０ｘＸＸ４４）を解読し、解読した命令を演算部ＥＸに出力する。そして、演算部ＥＸは、命令群内の一部のサイクル可変命令ＩＮＳ１を実行することなく、次の命令ＩＮＳの演算を実行する。
【００１８】
このように、終了信号ＥＮＤにより、一部のサイクル可変命令ＩＮＳ１のフェッチ、デコード、実行を省略することができるため、命令の実行効率を向上できる。なお、以上の動作は、デコード部ＤＥＣによるアドレスレジスタＡＲＥＧへの保持、およびアドレスレジスタＡＲＥＧのロック、ロックの解除を除き、図８に示すフェッチ部ＦＴＣ、デコード部ＤＥＣおよび演算部ＥＸの動作と同様である。
【００１９】
以上、この実施形態では、実行サイクル数が動的に変化するサイクル可変命令の実行の完了が判断されるときに、フェッチ部ＦＴＣは、残りのサイクル可変命令のフェッチを止め、サイクル可変命令群の次の命令ＩＮＳをフェッチする。これにより、不要なサイクル可変命令が実行されないため、命令の実行効率を向上させることができる。この結果、プロセッサＰＲＯＣの演算処理の性能を向上させることができる。
【００２０】
図２は、別の実施形態におけるプロセッサの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＲＯＣは、ＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。プロセッサＰＲＯＣは、命令メモリＩＭＥＭおよび４バンク構成のデータメモリＤＭＥＭ（ＤＭＥＭ０−ＤＭＥＭ３）に接続され、バスＢＵＳを介して周辺回路ＰＥＲＩに接続されている。
【００２１】
例えば、プロセッサＰＲＯＣは、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３および周辺回路ＰＥＲＩとともに単一のＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）チップとして設計される。バスＢＵＳは、外部端子ＥＴＭを介して、ＬＳＩチップの外部に配置される外部入出力装置に接続されてもよい。プロセッサＰＲＯＣ、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３、周辺回路ＰＥＲＩおよび外部入出力装置により、システムが形成される。
【００２２】
プロセッサＰＲＯＣは、レジスタ部ＲＥＧ、パイプラインＰＬ、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴを有している。レジスタ部ＲＥＧは、ベクトルレジスタＶＲ、マスクレジスタＭＲおよびスカラーレジスタＳＲ等を有している。ベクトルレジスタＶＲは、プロセッサＰＲＯＣが実行する演算に必要なベクトルデータやアクセスアドレス、演算により得られたベクトルデータが格納される。ベクトルレジスタＶＲの例は、図３に示す。
【００２３】
マスクレジスタＭＲは、ベクトルレジスタＶＲのうち使用しない格納領域を示すマスク情報が格納される。なお、マスク機能が不要なとき、レジスタ部ＲＥＧはマスクレジスタＭＲを持たなくてもよい。スカラーレジスタＳＲは、汎用レジスタおよびベクトル長（図３）を示すレジスタ等を有している。なお、アドレスレジスタＡＲＥＧは、スカラーレジスタＳＲ内に形成されてもよい。
【００２４】
パイプラインＰＬは、フェッチ部ＦＴＣ、デコード部ＤＥＣ、演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢを有している。すなわち、パイプラインＰＬは、５つのステージを有している。メモリアクセス部ＭＡおよびライトバック部ＷＢは、演算部ＥＸによる演算の結果をデータメモリＤＭＥＭ０−３またはレジスタ部ＲＥＧに書き込む書き込み部の一例である。なお、フェッチ部ＦＴＣおよびデコード部ＤＥＣを除く演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢを、パイプラインＰＬと定義してもよい。
【００２５】
フェッチ部ＦＴＣは、命令メモリＩＭＥＭに供給するアドレスＩＡＤを管理し、順次更新するアドレスＩＡＤを命令メモリＩＭＥＭに供給し、命令メモリＩＭＥＭに格納されている命令ＩＮＳを取得する。フェッチ部ＦＴＣは、演算部ＥＸからの終了信号ＥＮＤに応答してアドレスレジスタＡＲＥＧから読み出されるアドレスをアドレスＩＡＤとして命令メモリＩＭＥＭに出力する。
【００２６】
なお、命令メモリＩＭＥＭとフェッチ部ＦＴＣの間にプリフェッチ部を形成し、プリフェッチ部を介して命令メモリＩＭＥＭからフェッチ部ＦＴＣに命令を供給してもよい。プリフェッチ部は、図１４および図１７に示すＶＬＩＷ型のプロセッサＰＲＯＣに形成されてもよい。
【００２７】
デコード部ＤＥＣは、アドレスＩＡＤとともにフェッチ部ＦＴＣから転送される命令ＩＮＳを解析する。デコード部ＤＥＣは、解析結果に応じて、命令ＩＮＳを実行するために必要なレジスタにアクセスし、演算部ＥＸに実行させる動作を指定する。デコード部ＤＥＣは、命令ＩＮＳが、実行サイクル数が動的に変化するサイクル可変命令であることを認識したときに、連続するサイクル可変命令であるサイクル可変命令群の次に実行される命令ＩＮＳが格納されている命令メモリＩＭＥＭのアドレスＩＡＤを求め、求めたアドレスＩＡＤをアドレスレジスタＡＲＥＧにセットする。サイクル可変命令の例は、図３、図４および図６に示す。デコード部ＤＥＣは、演算部ＥＸからの終了信号ＥＮＤに応答して、命令ＩＮＳの解読を停止し、あるいは解読結果をマスクし、演算部ＥＸにノーオペレーション（何もしない）を指示する。
【００２８】
演算部ＥＸは、デコード部ＤＥＣからの指示に基づいて、例えば、レジスタ部ＲＥＧのベクトルレジスタＶＲに格納された値を用いて演算を実行する。演算結果は、メモリアクセス部ＭＡに出力される。演算部ＥＸは、ストア命令等の実行により、演算結果をデータメモリＤＭＥＭに格納する必要があるとき、格納先を示すアドレスＤＡＤを計算し、求めたアドレスＤＡＤをメモリ制御部ＭＣＮＴに出力する。演算部ＥＸは、サイクル可変命令群の実行中に、実行すべき全ての演算が完了したとき、終了信号ＥＮＤを出力する。
【００２９】
メモリアクセス部ＭＡは、演算部ＥＸの実行により得られたデータを受け、メモリ制御部ＭＣＮＴまたはライトバック部ＷＢに出力する。また、メモリアクセス部ＭＡは、メモリ制御部ＭＣＮＴを介してデータメモリＤＭＥＭ０−３から出力されるデータをライトバック部ＷＢに出力する。
【００３０】
ライトバック部ＷＢは、命令の実行により得られるデータを、メモリアクセス部ＭＡを介して演算部ＥＸから受け、レジスタ部ＲＥＧ内のレジスタに書き込む。また、ライトバック部ＷＢは、データメモリＤＭＥＭ０−３から読み出されるデータをメモリアクセス部ＭＡから受け、レジスタ部ＲＥＧ内のレジスタに書き込む。
【００３１】
メモリ制御部ＭＣＮＴは、演算部ＥＸからのアドレスＤＡＤに応じてデータメモリＤＭＥＭ０−３にアクセスするためのメモリインタフェースの機能を有している。メモリ制御部ＭＣＮＴは、メモリアクセス部ＭＡから供給されるデータ（ストアデータ）をデータメモリＤＭＥＭ０−３（４つのバンク）の少なくともいずれかに書き込み、データメモリＤＭＥＭ０−３（４つのバンク）の少なくともいずれかから読み出したデータ（ロードデータ）を、メモリアクセス部ＭＡに供給する。
【００３２】
メモリ制御部ＭＣＮＴは、４つのデータメモリＤＭＥＭ０−３に同時にアクセス可能である。換言すれば、１つのロード命令で、最大４つのデータメモリＤＭＥＭ０−３からデータが読み出し可能であり、１つのストア命令で、最大４つのデータメモリＤＭＥＭ０−３にデータが書き込み可能である。なお、データメモリＤＭＥＭの数は、４つに限定されず、一般的には、２のｎ乗個（ｎは正の整数）のデータメモリＤＭＥＭが、プロセッサＰＲＯＣに接続可能である。
【００３３】
図３は、サイクル可変命令の例と、サイクル可変命令を実行するための演算部ＥＸの例を示している。図３に示すサイクル可変命令は、インダイレクトロード命令およびインダイレクトストア命令である。例えば、インダイレクトロード命令は、オペレーションコードＩＬＤと３つのオペランドＢＡＳＥ、ｖｒ０、ｖｒ１により記述される。インダイレクトロード命令の実行では、ベクトルレジスタＶＲ内のオペランドｖｒ０で示されるベクトル領域（ＶＲ０、ＶＲ１、．．．、ＶＲ１２７の１つ）の１６個の格納領域ＶＲ［０］、ＶＲ［１］、．．．、ＶＲ［１５］に格納されているオフセットアドレス（相対アドレス）の配列に、オペランドＢＡＳＥで示されるベースアドレス（絶対アドレス）がそれぞれ加算され、１６個のアクセスアドレスＡ［０］、Ａ［１］、．．．、Ａ［１５］が求められる。そして、アクセスアドレスＡ［０］−Ａ［１５］を用いてデータメモリＤＭＥＭからデータが読み出され、ベクトルレジスタＶＲ内のオペランドｖｒ１で示されるベクトル領域（ＶＲ０−ＶＲ１２７の１つ）に読み出されたデータが格納される。
【００３４】
例えば、インダイレクトストア命令は、オペレーションコードＩＳＴと３つのオペランドＢＡＳＥ、ｖｒ０、ｖｒ１により記述される。データメモリＤＭＥＭにアクセスするためのアドレスの求め方は、インダイレクトロード命令と同じである。インダイレクトストア命令では、ベクトルレジスタＶＲ内のオペランドｖｒ１で示されるベクトル領域（ＶＲ０−ＶＲ１２７の１つ）に格納されているデータＶＲ［０］、ＶＲ［１］、．．．、ＶＲ［１５］がデータメモリＤＭＥＭに書き込まれる。
【００３５】
図３に示すベクトルレジスタＶＲは、ベクトル長が１６に設定されているときの状態を示している。例えば、ベクトルレジスタＶＲが２０４８個の格納領域を有するとき、ベクトル長に対応する１６個の格納領域ＶＲ［０］、ＶＲ［１］、．．．、ＶＲ［１５］をそれぞれ有する１２８個のベクトル領域ＶＲ０−ＶＲ１２７が割り当てられる。演算部ＥＸは、絶対アドレス値（ＢＡＳＥで示す）に相対アドレス値（ＶＲ［０］−ＶＲ［１５］で示す）をそれぞれ加算して、アクセスアドレスＡ［０］−Ａ［１５］を求める１６個の演算器ＯＰ１（加算器）を有している。
【００３６】
なお、１６個のアクセスアドレスＡ［０］−Ａ［１５］は、一度に求められるが、同時にアクセスできるデータメモリＤＭＥＭ０−３の最大数は４であるため、インダイレクトロード命令およびインダイレクトストア命令の実行に必要なプロセッサＰＲＯＣの動作サイクル数は、アクセスアドレス値に応じて変わる。すなわち、インダイレクトロード命令およびインダイレクトストア命令は、図５に示すように、命令の実行サイクル数が動的に変化する。
【００３７】
図４は、サイクル可変命令の別の例と、サイクル可変命令を実行するための演算部ＥＸの例を示している。図４に示すサイクル可変命令は、ストライドロード命令およびストライドストア命令である。例えば、ストライドロード命令は、オペレーションコードＳＴＲＬＤと４つのオペランドＢＡＳＥ、ｃｏｕｎｔ、ｄｉｓｔａｎｃｅ、ｖｒにより記述される。例えば、ストライドストア命令は、オペレーションコードＳＴＲＳＴと４つのオペランドＢＡＳＥ、ｃｏｕｎｔ、ｄｉｓｔａｎｃｅ、ｖｒにより記述される。
【００３８】
ストライドロード命令の実行では、データメモリＤＭＥＭ０−３により形成される矩形領域内の矩形のアクセス領域からデータが読み出され、ベクトルレジスタＶＲ内のオペランドｖｒで示されるベクトル領域に格納される。ストライドストア命令の実行では、ベクトルレジスタＶＲ内のオペランドｖｒで示されるベクトル領域に格納されているデータが、矩形のアクセス領域に書き込まれる。例えば、データメモリＤＭＥＭ１−４のメモリ空間が表示装置の画面（矩形領域）に対応するとき、ストライドロード命令およびストライドストア命令により、画面に表示されている情報を取得し、あるいは画面を表示するための矩形アクセスが実施される。
【００３９】
矩形領域内の数値０、１、２、３は、データメモリＤＭＥＭ０−３の番号を示している。矩形領域は、各データメモリＤＭＥＭ０−３の１回にアクセスされる単位領域を帯状に順次つなげ、１行ずつ上から並べることで形成される。この例では、矩形領域の１行は、５つのデータメモリＤＭＥＭの単位領域を含んでいる。
【００４０】
ストライドロード命令およびストライドストア命令では、次のようにアクセス領域をアクセスするためのアクセスアドレスＡ［０］、Ａ［１］、．．．、Ａ［１５］が求められる。アクセスアドレスＡ［０］−Ａ［１５］により、データメモリＤＭＥＭ１−４のいずれかがアクセスされる。
【００４１】
まず、オペランドＢＡＳＥで示される開始アドレス（以下、開始アドレスＢＡＳＥと称する）を起点として、オペランドｃｏｕｎｔで示されるカウント数（以下、カウント数ｃｏｕｎｔと称する）分の１行目のアクセスアドレスが求められる。アクセスアドレスの数がカウント数ｃｏｕｎｔを超えた場合、開始アドレスＢＡＳＥとオペランドｄｉｓｔａｎｃｅで示される矩形領域の幅（以下、幅ｄｉｓｔａｎｃｅと称する）とに基づいて次の行のアクセス開始アドレスが求められる。幅ｄｉｓｔａｎｃｅは、矩形領域を１行アクセスするために必要なアクセスアドレスの数を示し、開始アドレスＢＡＳＥに基づいてアクセス領域の各行の開始位置を求めるためのオフセットとなる。
【００４２】
そして、上述と同様に、カウント数ｃｏｕｎｔ分の２行目のアクセスアドレスが求められる。以上を繰り返して、１６個のアクセスアドレスＡ［０］−Ａ［１５］が求められる。これを複数回繰り返すことで、任意の大きさのアクセス領域のアクセスアドレスが順次求められる。
【００４３】
演算部ＥＸは、アクセスアドレスＡ［０］−Ａ［１５］を一度に求めるための１６個の演算器ＯＰ２を有している。アクセスアドレスＡ［０］を求める初段の演算器ＯＰ２は、初期値０を受け、開始アドレスＢＡＳＥをアクセスアドレスＡ［０］として出力し、アクセスアドレスＡ［０］、アクセス数”１”および行数”１”を、２段目の演算器ＯＰ２に出力する。２段目以降の演算器ＯＰ２は、アクセス数がカウント数ｃｏｕｎｔより小さいとき、前段からのアクセスアドレスをインクリメントし、アクセスアドレスとして出力する。
【００４４】
一方、２段目以降の演算器ＯＰ２は、アクセス数がカウント数ｃｏｕｎｔと等しいとき、行数と幅ｄｉｓｔａｎｃｅの積を開始アドレスＢＡＳＥに加え、アクセスアドレスとして出力する。また、２段目以降の演算器ＯＰ２は、アクセス数がカウント数ｃｏｕｎｔと等しいとき、アクセス数を”０”にリセットし、行数をインクリメントし、アクセスアドレスとともに次段の演算器ＯＰ２に出力する。なお、各演算器ＯＰ２は、アクセス数を順次インクリメントし、アクセス数をカウント値ｃｏｕｎｔで割ることで、アクセス領域の行番号を求めてもよい。この場合、行数は、次段の演算器ＯＰ２に出力されなくてもよい。
【００４５】
図５は、図３および図４に示したサイクル可変命令の実行において、実行サイクル数が動的に変化する例を示している。演算部ＥＸは、各実行サイクルＣＹＣ（ＣＹＣ１−ＣＹ１６）において、アクセスするデータメモリＤＭＥＭ１−４が重複しないように、求めたアクセスアドレスＡ［０］−Ａ［１５］から最大４つを選択し、選択したアクセスアドレスをメモリ制御部ＭＣＮＴに出力する。例えば、アクセスアドレスは、アクセスアドレスＡ［０］−Ａ［１５］の番号が小さい順に優先的に選択される。メモリ制御部ＭＣＮＴは、演算部ＥＸから供給されるアクセスアドレスに応じて、データメモリＤＭＥＭ１−４にアクセスする。
【００４６】
サイクル可変命令群の実行は、例１では実行サイクルＣＹＣ１−ＣＹＣ５で完了し、例２では実行サイクルＣＹＣ１−ＣＹＣ４で完了し、例３では実行サイクルＣＹＣ１−ＣＹＣ１６で完了する。すなわち、例１では５つのサイクル可変命令が実行され、例２では４つのサイクル可変命令が実行され、例３では１６個のサイクル可変命令が実行される。サイクル可変命令が最も効率的に実行されるのは例２であり、サイクル可変命令が最も非効率に実行されるのは例３である。このように、図３および図４に示したサイクル可変命令は、データメモリＤＭＥＭ１−４のアクセスの重複具合により実行サイクル数が動的に変化し、終了サイクルが変化する。
【００４７】
実行サイクル数は、アクセスされるデータメモリＤＭＥＭに依存し、命令のコンパイル時に求めることができない。このため、サイクル可変命令は、最悪ケースである例３を考慮してプログラム中に記述される必要がある。すなわち、図５に示す例では、Ｃ言語等からアセンブリ言語（マシン語）の命令を生成するコンパイラは、連続する１６個のサイクル可変命令をサイクル可変命令群として生成する。これにより、プロセッサＰＲＯＣがサイクル可変命令群を実行するとき、例１では、１１個の不要な命令が発生し、例２では、１２個の不要な命令が発生する。
【００４８】
図６は、サイクル可変命令の別の例と、サイクル可変命令を実行するための演算部ＥＸの例を示している。図６に示すサイクル可変命令は、検索命令である。例えば、検索命令は、オペレーションコードＦＩＮＤと３つのオペランドＲｄ、Ｒｓ１、Ｒｓ２により記述される。検索命令の実行では、ベクトルレジスタＶＲ（図３）内のオペランドＲｓ２で示されるベクトル領域（ＶＲ０−ＶＲ１２７の１つ）の各格納領域ＶＲ［ｉ］（ｉは０から１５のいずれか）に格納されているデータが、オペランドＲｓ１で示されるレジスタに格納されている参照データ（以下、参照データＲｓ１と称する）と一致するかが検索される。そして、一致するデータが格納されている格納領域ＶＲ［ｉ］を示す値がオペランドＲｄで示されるレジスタに格納される。参照データＲｓ１と一致するデータが複数の格納領域ＶＲ［ｉ］に格納されているとき、最も小さい番号が割り当てられている格納領域ＶＲ［ｉ］を示す値がオペランドＲｄで示されるレジスタに格納される。
【００４９】
演算部ＥＸは、１６組の比較器ＣＭＰとセレクタＳＥＬのペアを有している。各比較器ＣＭＰは、ベクトル領域ＶＲ内の各格納領域ＶＲ［ｉ］に格納されているデータが参照データＲｓ１と一致するか否かを判定し、判定結果を対応するセレクタＳＥＬに出力する。
【００５０】
セレクタＳＥＬは、対応する比較器ＣＭＰの出力が不一致を示すときに、前段のセレクタＳＥＬから出力される不一致または一致済みを示す情報を次段のセレクタＳＥＬに出力する。「一致済み」は、比較器ＣＭＰにより一致が検出されたデータを格納している格納領域ＶＲ［ｉ］のうち、最も番号が小さい格納領域ＶＲ［ｉ］を示す情報を含んでいる。
【００５１】
セレクタＳＥＬは、対応する比較器ＣＭＰの出力が一致を示し、前段のセレクタＳＥＬの出力が不一致を示すときに、新たな一致済みを示す情報を次段のセレクタＳＥＬに出力する。「新たな一致済み」は、一致が検出されたデータを格納している格納領域ＶＲ［ｉ］を示す情報を含んでいる。セレクタＳＥＬは、対応する比較器ＣＭＰの出力が一致を示し、前段のセレクタＳＥＬの出力が一致済みを示すときに、前段からの一致済みを示す情報を次段のセレクタＳＥＬに出力する。以上の動作により、最終段のセレクタＳＥＬから出力される検索結果ＲＳＬＴは、参照データＲｓ１と同じデータが格納されている格納領域ＶＲ［ｉ］のうち、最も番号が小さい格納領域ＶＲ［ｉ］を示す情報を含んでいる。
【００５２】
例えば、ベクトルレジスタＶＲが２０４８個の格納領域を有し、ベクトル長が２５６に設定されているとき、８個のベクトル領域ＶＲ０−ＶＲ７がベクトルレジスタＶＲ内に割り当てられる。ベクトルレジスタＶＲ、ベクトル領域ＶＲ０−７および格納領域ＶＲ［ｉ］の関係は、図３と同様である。ベクトル領域ＶＲ０−ＶＲ７の１つにおける２５６個の格納領域ＶＲ［ｉ］に格納されたデータと、参照データＲｓ１との一致を検出する場合、演算部ＥＸは、最小で１回、最大で１６回の実行サイクルが必要である。
【００５３】
図７は、図６に示した検索命令のコンパイルの例を示している。例えば、Ｃ言語による記述では、Ｗｈｉｌｅ文により、格納領域ＶＲ［ｉ］に格納されているデータが参照データＤＡＴＡと一致するまで、データの検索が実施される。参照データＤＡＴＡは、レジスタＲｓ１に格納されている。検索の最大回数は、ベクトル長ＶＬ（この例では２５６）に対応する回数であり、ベクトル領域ＶＲ０−ＶＲ７のいずれかの全ての格納領域が検索される。
【００５４】
コンパイラは、Ｃ言語の記述をコンパイルし、プロセッサＰＲＯＣにより実行可能なアセンブリ命令を生成する。この例では、図６で説明したように、最大で１６回の実行サイクルが必要なため、連続する１６個の検索命令が記述される。検索命令のオペランドＲｓ２は、ベクトル領域ＶＲｎ（ＶＲ０−ＶＲ７のいずれか）における２５６個の検索領域ＶＲ［０］−ＶＲ［２５５］をそれぞれ示す。プロセッサＰＲＯＣは、他のサイクル可変命令と同様に、最小で検索命令を１回実行し、最大で検索命令を１６回実行する。
【００５５】
図８は、図２に示したプロセッサＰＲＯＣの動作の例を示している。この例では、サイクル可変命令としてインダイレクトロード命令が実行される。図８以降において、アドレスの値は１６進数で示し、インダイレクトロード命令は符号ＩＬＤで示している。インダイレクトロード命令ＩＬＤ等のサイクル可変命令は、太枠で示している。例えば、各命令は、３２ビット（４バイト）で記述されるため、アドレスは４つずつ更新される。また、図８以降において、サイクルで示す数値は、プロセッサＰＲＯＣの実行サイクルを示す。図８、図９および図１０において、フェッチ部ＦＴＣ、デコード部ＤＥＣ、演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢに示す各命令の右側の括弧内の数値は、アドレスの下位８ビットを示している。
【００５６】
命令メモリＩＭＥＭのアドレス０ｘＸＸ００から０ｘＸＸ５４には、加算命令ＡＤＤ、複数のインダイレクトロード命令ＩＬＤ、加算命令ＡＤＤおよび複数のインダイレクトロード命令ＩＬＤが格納されている。加算命令ＡＤＤは、サイクル可変命令以外の通常の命令である。通常の命令は、加算命令ＡＤＤに限定されず、減算命令、乗算命令等でもよい。
【００５７】
インダイレクトロード命令ＩＬＤを実行するための最大の実行サイクル数は、図５に示したように１６サイクルである。このため、命令メモリＩＭＥＭに格納されたプログラムにおいて、１回のインダイレクトロード命令ＩＬＤを実行するために、連続した１６個のインダイレクトロード命令ＩＬＤを有するサイクル可変命令群が記述されている。
【００５８】
フェッチ部ＦＴＣは、サイクル毎に、命令メモリＩＭＥＭから命令ＩＮＳを順次フェッチする。デコード部ＤＥＣは、サイクル毎に、フェッチ部ＦＴＣからの命令ＩＮＳを解読する。サイクル３において、デコード部ＤＥＣは、命令ＩＮＳの解読により、インダイレクトロード命令ＩＬＤを検出する。デコード部ＤＥＣは、インダイレクトロード命令ＩＬＤとともにフェッチ部ＦＴＣから受けるアドレス（０４）に１６命令分の相対アドレス４０を加算し、サイクル可変命令群の次の命令ＩＮＳが格納されている命令メモリＩＭＥＭのアドレス４４を求める。デコード部ＤＥＣは、次のサイクル４において、求めたアドレス４４をアドレスレジスタＡＲＥＧに書き込む。
【００５９】
デコード部ＤＥＣは、アドレス４４をアドレスレジスタＡＲＥＧに書き込んだ後、アドレスレジスタＡＲＥＧに新たなアドレスが書き込まれることを禁止するために、アドレスレジスタＡＲＥＧをロックする。デコード部ＤＥＣは、インダイレクトロード命令ＩＬＤを解読する毎に、現在のアドレスに相対アドレスを加算し、加算したアドレスをアドレスレジスタＡＲＥＧに書き込むために書き込み要求を出力する。しかし、アドレスレジスタＡＲＥＧの書き換えは、ロック中に禁止されるため、アドレスレジスタＡＲＥＧ内のアドレス４４はロックが解除されるまで保持される。
【００６０】
なお、デコード部ＤＥＣは、先頭のインダイレクトロード命令ＩＬＤを解読したときのみ、サイクル可変命令群の次の命令ＩＮＳが格納されているアドレスを求め、求めたアドレスをアドレスレジスタＡＲＥＧに書き込んでもよい。図１０、図１２、図１５の動作も同様である。この場合、アドレスレジスタＡＲＥＧのロックおよびロックの解除の制御を不要にでき、デコード部ＤＥＣの回路規模を削減できる。
【００６１】
演算部ＥＸは、サイクル毎に、デコード部ＤＥＣにより解読された命令ＩＮＳの演算を実行する。インダイレクトロード命令ＩＬＤでは、演算部ＥＸは、データを読み出すデータメモリＤＭＥＭのアドレスＤＡＤ（図２；最大４つ）をメモリ制御部ＭＣＮＴに出力する。メモリアクセス部ＭＡは、演算部ＥＸの実行結果に応じて、メモリ制御部ＭＣＮＴまたはライトバック部ＷＢにデータを出力する。インダイレクトロード命令ＩＬＤでは、データメモリＤＭＥＭから読み出されたデータをメモリ制御部ＭＣＮＴを介して受け、受けたデータをライトバック部ＷＢに出力する。ライトバック部ＷＢは、メモリアクセス部ＭＡからのデータをレジスタ部ＲＥＧ内のレジスタに書き込む。
【００６２】
演算部ＥＸは、サイクル８において、５つのインダイレクトロード命令ＩＬＤの演算の実行により、１６個のデータをデータメモリＤＭＥＭから読み出せると判断し、終了信号ＥＮＤを出力する。すなわち、演算部ＥＸは、次のサイクル９のメモリアクセス部ＭＡの動作により全てのデータを得られ、インダイレクトロード命令ＩＬＤの実行が完了すると判断する。図８以降では、演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢにおいて、インダイレクトロード命令ＩＬＤの実行が完了するサイクルの動作を太い破線枠で示している。
【００６３】
デコード部ＤＥＣは、終了信号ＥＮＤを受けたサイクル８と次のサイクル９において、インダイレクトロード命令ＩＬＤを解読せずに、いわゆるＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）命令を演算部ＥＸに出力する。ＮＯＰ命令は、演算部ＥＸの演算の実行を停止する命令である。なお、デコード部ＤＥＣは、サイクル８−９において、インダイレクトロード命令ＩＬＤを解読し、解読したインダイレクトロード命令ＩＬＤの代わりに、ＮＯＰ命令を演算部ＥＸに出力してもよい。
【００６４】
フェッチ部ＦＴＣは、終了信号ＥＮＤを受けた次のサイクル９において、アドレスレジスタＡＲＥＧに格納されているアドレス４４を用いて、命令メモリＩＭＥＭから加算命令ＡＤＤをフェッチする。すなわち、サイクル可変命令群の次の命令がフェッチされる。終了信号ＥＮＤを受けた次のサイクル９において、デコード部ＤＥＣは、アドレスレジスタＡＲＥＧのロックを解除する。サイクル１０において、デコード部ＤＥＣは、加算命令ＡＤＤを解読する。
【００６５】
演算部ＥＸは、サイクル９、１０において、デコード部ＤＥＣから受けるＮＯＰ命令を実行する。メモリアクセス部ＭＡおよびライトバック部ＷＢも、順次動作を停止し、ＮＯＰ命令の実行状態になる。以上の動作により、１６個のインダイレクトロード命令ＩＬＤで記述されるサイクル可変命令群の次の命令（ＡＤＤ）の演算は、演算部ＥＸにより１１サイクル目で実行される。
【００６６】
以降、フェッチ部ＦＴＣ、デコード部ＤＥＣ、演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢが順次動作し、命令ＩＮＳが順次実行される。例えば、デコード部ＤＥＣは、サイクル１１において、２つ目のサイクル可変命令群（インダイレクトロード命令ＩＬＤ）を受ける。デコード部ＤＥＣは、アドレス（４８）に相対アドレス４０を加算し、１６個のインダイレクトロード命令ＩＬＤで記述されるサイクル可変命令群の次の命令ＩＮＳが格納されているアドレス８８を求める。デコード部ＤＥＣは、次のサイクル１２において、求めたアドレス８８をアドレスレジスタＡＲＥＧに格納し、アドレスレジスタＡＲＥＧをロックする。
【００６７】
なお、終了信号ＥＮＤは、メモリアクセス部ＭＡまたはライトバック部ＷＢから出力されてもよい。但し、実行の必要のない無駄なインダイレクトロード命令ＩＬＤのフェッチをできるだけ少なくするために、終了信号ＥＮＤは早いサイクルで出力された方がよい。このため、終了信号ＥＮＤは、インダイレクトロード命令ＩＬＤの実行が完了すると判断した時点で出力されることが望ましい。
【００６８】
図９は、図２に示したプロセッサＰＲＯＣがアドレスレジスタＡＲＥＧを持たないときの動作の例を示している。プロセッサＰＲＯＣは、アドレスレジスタＡＲＥＧを持たないとき、１６個のインダイレクトロード命令ＩＬＤで記述されるサイクル可変命令群の次の命令ＩＮＳが格納されている命令メモリＩＭＥＭのアドレスを保持できない。このため、演算部ＥＸは、サイクル８においてサイクル可変命令群に対応して１６個のデータをデータメモリＤＭＥＭから読み出せると判断した後も、残りのインダイレクトロード命令ＩＬＤの演算を実行する。なお、サイクル９−１９では、演算部ＥＸは、メモリアクセス部ＭＡにデータメモリＤＭＥＭからのデータの読み出しを指示する必要がない。このため、実際には、演算部ＥＸは、サイクル９−１９では、残りのインダイレクトロード命令ＩＬＤの演算の実行を停止し、ＮＯＰ命令を実行する。メモリアクセス部ＭＡおよびライトバック部ＷＢも、順次ＮＯＰ命令の実行状態になる。
【００６９】
以上の動作により、１６個のインダイレクトロード命令ＩＬＤで記述されるサイクル可変命令群の次の命令ＩＮＳ（ＡＤＤ）の演算は、演算部ＥＸにより２０サイクル目で実行される。これは、図８に示した動作より９サイクル遅い。換言すれば、図２に示したプロセッサＰＲＯＣは、無駄なＮＯＰ命令の実行数を削減でき、命令ＩＮＳの実行効率を向上できる。
【００７０】
なお、図８および図９に示した動作は、図３のインダイレクトストア命令、図４のストライドロード命令およびストライドストア命令、図６の検索命令でも同様に実行される。これ等の動作は、図８および図９に示した符号「ＩＬＤ」を「ＩＳＴ（インダイレクトストア命令）」、「ＳＴＲＬＤ（ストライドロード命令）」、「ＳＴＲＳＴ（ストライドストア命令）」または「ＦＩＮＤ（検索命令）」に置き換えることで表現される。この際、演算部ＥＸは、１６個のデータをデータメモリＤＭＥＭに対して読み出しまたは書き込みできると判断し、あるいはデータの検索が完了したと判断したときに終了信号ＥＮＤを出力する。
【００７１】
図１０は、図２に示したプロセッサＰＲＯＣの動作の別の例を示している。この例では、サイクル可変命令として検索命令が実行される。検索命令は符号ＦＩＮＤで示している。アドレスレジスタＡＲＥＧへのアドレス４４の格納動作は、図８と同じである。例えば、命令メモリＩＭＥＭは、図８に示したインダイレクトロード命令ＩＬＤの代わりに検索命令ＦＩＮＤを記憶している。すなわち、サイクル可変命令群は、１６個の検索命令ＦＩＮＤで記述される。
【００７２】
この例では、演算部ＥＸは、サイクル４において、サイクル可変命令群中の先頭の検索命令ＦＩＮＤの演算の実行時に、ベクトルレジスタＶＲ内に保持されているデータが参照データＲｓ１と同じであることを検出し、終了信号ＥＮＤを出力する。サイクル５−１３までの動作は、サイクル可変命令の種類が異なることを除き、図８のサイクル９−１７と同じである。この例では、図９の動作に比べて無駄なサイクル数を１３サイクル削減できる。
【００７３】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、デコード部ＤＥＣは、解読した命令がサイクル可変命令のときに、サイクル可変命令群の次の命令が格納されているアドレスを計算し、計算したアドレスをアドレスレジスタＡＲＥＧに書き込む。これにより、複数のサイクル可変命令群がプログラム中に存在するときにも、各サイクル可変命令群の次の命令が格納されているアドレスを確実に求めてアドレスレジスタＡＲＥＧに書き込みできる。この際、アドレスレジスタＡＲＥＧの書き込みのロックおよびロックの解除をすることで、サイクル可変命令を解読する毎にデコード部ＤＥＣからアドレスレジスタＡＲＥＧへの書き込み要求が発行される場合にも、アドレスレジスタＡＲＥＧの誤書き込みを防止できる。
【００７４】
デコード部ＤＥＣは、終了信号ＥＮＤを受けたときに、インダイレクトロード命令ＩＬＤの解読結果ではなく、ＮＯＰ命令を演算部ＥＸに出力する。これにより、演算部ＥＸの動作を停止状態でき、プロセッサＰＲＯＣの消費電力を削減できる。
【００７５】
図１１は、別の実施形態におけるプロセッサＰＲＯＣの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＲＯＣは、ＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。プロセッサＰＲＯＣは、命令メモリＩＭＥＭおよびデータメモリＤＭＥＭ０−ＤＭＥＭ３に接続されている。
【００７６】
例えば、プロセッサＰＲＯＣは、図２と同様に、バスＢＵＳを介して周辺回路ＰＥＲＩに接続され、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３および周辺回路ＰＥＲＩとともに単一のＬＳＩチップとして設計される。図２と同様に、バスＢＵＳは、外部端子ＥＴＭを介して、ＬＳＩチップの外部に配置される外部入出力装置に接続されてもよい。プロセッサＰＲＯＣ、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３、周辺回路ＰＥＲＩおよび外部入出力装置により、システムが形成される。
【００７７】
プロセッサＰＲＯＣは、レジスタ部ＲＥＧ、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ，  Ｆｉｒｓｔ  Ｏｕｔ）、フェッチ部ＦＴＣ、デコード部ＤＥＣ、４つのパイプラインＰＬ（ＰＬ１−ＰＬ４）、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴを有している。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、パイプラインＰＬ１−４に共通のブロックである。プロセッサＰＲＯＣは、命令ＩＮＳの順序を入れ替えることなく実行する。すなわち、この実施形態のプロセッサＰＲＯＣは、インオーダタイプのスーパースカラプロセッサである。なお、プロセッサＰＲＯＣは、メモリ制御部ＭＣＮＴに接続されていない、内部の演算のみを実行する１以上のパイプラインを、パイプラインＰＬ１−４以外に有していてもよい。
【００７８】
レジスタ部ＲＥＧ、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴは、図２に示したレジスタ部ＲＥＧ、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴの機能と同様の機能を有している。レジスタ部ＲＥＧのベクトルレジスタＶＲの例は、図３に示している。アドレスレジスタＡＲＥＧは、スカラーレジスタＳＲ内に形成されてもよい。
【００７９】
ＦＩＦＯは、命令メモリＩＭＥＭに格納されている命令ＩＮＳをプリフェッチし、プリフェッチした命令ＩＮＳから順次フェッチ部ＦＴＣに出力する。ＦＩＦＯは、命令メモリＩＭＥＭからの命令ＩＮＳをプリフェッチするプリフェッチ部の一例である。この実施形態では、４つのパイプラインＰＬ１−４が同時に動作可能であるため、ＦＩＦＯは、命令ＩＮＳを４つずつプリフェッチする。ＦＩＦＯは、フェッチ部ＦＴＣからの転送要求ＲＥＱ１が示す数の命令ＩＮＳをフェッチ部ＦＴＣに出力する。
【００８０】
フェッチ部ＦＴＣは、命令メモリＩＭＥＭに供給するアドレスＩＡＤを管理し、ＦＩＦＯに空き領域があるときに、命令メモリＩＭＥＭにアドレスＩＡＤを出力し、ＦＩＦＯに命令ＩＮＳを格納する。例えば、各命令は３２ビットで記述される。４つの命令（１２８ビット＝１６バイト）が命令メモリＩＭＥＭからＦＩＦＯに一度に転送されるため、アドレスＩＡＤは１６個（１６進数の１０）ずつ更新される。
【００８１】
フェッチ部ＦＴＣは、命令ＩＮＳをフェッチ可能なときに、ＦＩＦＯに転送要求ＲＥＱ１を出力する。この例では、ＦＩＦＯからフェッチ部ＦＴＣに一度にフェッチ可能な命令ＩＮＳの数は、最小で１、最大で４である。フェッチ部ＦＴＣは、デコード部ＤＥＣからの命令ＩＮＳの転送要求ＲＥＱ２に応答して、フェッチしている命令ＩＮＳをデコード部ＤＥＣに出力する。この例では、フェッチ部ＦＴＣからデコード部ＤＥＣに一度に出力可能な命令ＩＮＳの数は、デコード部ＤＥＣの空きに応じて最小で１、最大で４である。
【００８２】
また、フェッチ部ＦＴＣは、各パイプラインＰＬ１−４の演算部ＥＸからの終了信号ＥＮＤに応答して、ＦＩＦＯを空にする機能を有している。フェッチ部ＦＴＣは、終了信号ＥＮＤに応答して、アドレスレジスタＡＲＥＧから読み出されるアドレスをアドレスＩＡＤとして命令メモリＩＭＥＭに出力する。
【００８３】
フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧに保持されているアドレスを用いて命令メモリＩＭＥＭにアクセスするとき、命令メモリＩＭＥＭから読み出される命令ＩＮＳをＦＩＦＯを介することなく直接受ける。すなわち、フェッチ部ＦＴＣは、終了信号ＥＮＤが出力されたときにＦＩＦＯを介することなく命令メモリＩＭＥＭに直接アクセスする。このために、ＦＩＦＯを介することなく命令ＩＮＳを命令メモリＩＭＥＭからフェッチ部ＦＴＣに転送するためのバイパス経路ＢＰが形成されている。
【００８４】
例えば、フェッチ部ＦＴＣは、ＦＩＦＯからの命令ＩＮＳの伝達経路と命令メモリＩＭＥＭからの命令ＩＮＳのバイパス経路ＢＰのいずれかを選択するスイッチＳＷを有している。スイッチＳＷは、通常の動作時にＦＩＦＯからの命令ＩＮＳの伝達経路を選択し、演算部ＥＸからの終了信号ＥＮＤを受けた次のサイクルでは、命令メモリＩＭＥＭからの命令ＩＮＳのバイパス経路ＢＰを選択する。
【００８５】
デコード部ＤＥＣは、パイプラインＰＬ１−４に発行した命令ＩＮＳの数に対応する転送要求ＲＥＱ２をフェッチ部ＦＴＣに通知し、新たな命令ＩＮＳをフェッチ部ＦＴＣから受ける。デコード部ＤＥＣは、図２に示したデコード部ＤＥＣの機能に加えて、命令ＩＮＳのオペランド同士の競合を判断し、競合が発生しないようにパイプラインＰＬ１−４に命令ＩＮＳを割り当てる機能を有している。例えば、オペランドの競合は、複数の命令ＩＮＳの実行中に発生する同じレジスタへの書き込み時に発生する。デコード部ＤＥＣは、競合関係のある複数の命令ＩＮＳをパイプラインＰＬ１−４に同時に発行しない。このため、４つのパイプラインＰＬ１−４は、４つの命令ＩＮＳを同時に実行するとは限らない。
【００８６】
このように、スーパースカラプロセッサでは、命令ＩＮＳの競合を避けながら、命令ＩＮＳを並列化して実行することができ、プロセッサＰＲＯＣの演算処理の性能を向上できる。但し、インダイレクトロード命令ＩＬＤ、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤおよびストライドストア命令ＳＴＲＳＴ等のサイクル可変命令の実行では、全てのデータメモリＤＭＥＭ１−４がアクセスされる可能性がある。このため、複数のパイプラインＰＬ１−４によるデータメモリＤＭＥＭ１−４のアクセスの競合を避けるため、これ等命令は、パイプラインＰＬ１−４のいずれかに対してのみ発行される。検索命令ＦＩＮＤも、パイプラインＰＬ１−４のいずれかに対してのみ発行される。
【００８７】
各パイプラインＰＬ１−４は、図２と同様の演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢを有している。この実施形態では、サイクル可変命令を実行するパイプラインＰＬ（ＰＬ１−４のいずれか）の演算部ＥＸは、終了信号ＥＮＤを出力する。メモリ制御部ＭＣＮＴは、図２に示したメモリ制御部ＭＣＮＴに、４つの演算部ＥＸからの最大で４つのアドレスＤＡＤを同時に受ける機能を追加している。また、メモリ制御部ＭＣＮＴは、図２に示したメモリ制御部ＭＣＮＴに、メモリアクセス部ＭＡに対して最大４つのデータを同時に入出力する機能を有している。レジスタ部ＲＥＧは、ライトバック部ＷＢからの最大４つのデータを同時に受ける機能を有している。
【００８８】
図１２は、図１１に示したプロセッサＰＲＯＣの動作の例を示している。図８と同じ動作については、詳細な説明は省略する。サイクル可変命令は、太枠で示している。命令メモリＩＭＥＭにおいて、サイクル可変命令群を形成する１６個のサイクル可変命令は、１６個の連続する領域に格納されている。サイクル可変命令は、インダイレクトロード命令ＩＬＤ、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤ、ストライドストア命令ＳＴＲＳＴおよび検索命令ＦＩＮＤのいずれかである。サイクル可変命令を実行するための最大の実行サイクル数は、１６サイクルである。
【００８９】
図１２以降において、フェッチ部ＦＴＣ、デコード部ＤＥＣ、演算部ＥＸ、メモリアクセス部ＭＡおよびライトバック部ＷＢに示す数値と、ＦＩＦＯまたは命令メモリＩＭＥＭに示す数値は、命令メモリＩＭＥＭのアドレスの下位８ビットの値を示しており、そのアドレスに格納されている命令を示している。
【００９０】
この実施形態では、４つのパイプラインＰＬ１−４が同時に動作可能なため、フェッチ部ＦＴＣは、最大で４つの命令を同時にフェッチし、デコード部ＤＥＣは、最大で４つの命令を同時に解読する。命令メモリＩＭＥＭは、命令を４つ単位で記憶している。図１２では、ＦＩＦＯは、命令メモリＩＭＥＭから複数の命令をプリフェッチしている。
【００９１】
サイクル１−３の各々において、フェッチ部ＦＴＣは、ＦＩＦＯから４つの命令ＩＮＳを同時にフェッチする。サイクル２において、デコード部ＤＥＣは、フェッチ部ＦＴＣからの４つの命令ＩＮＳを解読し、競合関係がないため、パイプラインＰＬ１−４にそれぞれ割り当てる。サイクル３において、デコード部ＤＥＣは、命令ＩＮＳの解読により、サイクル可変命令群中の先頭のサイクル可変命令（１０）を検出する。そして、デコード部ＤＥＣは、例えばパイプラインＰＬ１の演算部ＥＸに、サイクル可変命令の実行をサイクル毎に順次指示する。
【００９２】
デコード部ＤＥＣは、サイクル可変命令群中の先頭のサイクル可変命令とともにフェッチ部ＦＴＣから受けるアドレス（１０）に１６命令分の相対アドレス４０を加算し、サイクル可変命令群の次の命令ＩＮＳが格納されている命令メモリＩＭＥＭのアドレス５０を求める。デコード部ＤＥＣは、次のサイクル４において、求めたアドレス５０をアドレスレジスタＡＲＥＧに格納する。
【００９３】
サイクル４−９において、デコード部ＤＥＣは、解読したサイクル可変命令を演算部ＥＸに指示する毎に、フェッチ部ＦＴＣから次のサイクル可変命令を受ける。サイクル４−８において、フェッチ部ＦＴＣは、サイクル可変命令をデコード部ＤＥＣに転送する毎に、新たなサイクル可変命令をＦＩＦＯから受ける。
【００９４】
パイプラインＰＬ１の演算部ＥＸは、サイクル可変命令を順次実行し、サイクル８において、１６個のデータをデータメモリＤＭＥＭに対して読み出しまたは書き込みできると判断し、あるいは、データの検索が完了したと判断する。そしてパイプラインＰＬ１の演算部ＥＸは、終了信号ＥＮＤをフェッチ部ＦＴＣおよびデコード部ＤＥＣに出力する。サイクル可変命令が供給されている間、デコード部ＤＥＣは、パイプラインＰＬ２−４で実行する命令を受けない。このため、デコード部ＤＥＣは、この期間、例えば、ＮＯＰ命令をパイプラインＰＬ１−４に供給する。
【００９５】
サイクル９において、フェッチ部ＦＴＣは、終了信号ＥＮＤに応答してＦＩＦＯを空にし、バイパス経路ＢＰを介して命令メモリＩＭＥＭからサイクル可変命令群の次の命令（アドレス５０、５４、５８、５Ｃ）を直接受ける。命令メモリＩＭＥＭのアドレス５０、５４、５８、５Ｃに格納されている命令ＩＮＳは、通常の命令であり、競合関係もないため、パイプラインＰＬ１−４にそれぞれ割り当てられる。この後、フェッチ部ＦＴＣにより次のサイクル可変命令群がフェッチされ、サイクル１０−１７では、サイクル２−１０と同様の動作が実行される。
【００９６】
図１３は、図１１に示したプロセッサＰＲＯＣがアドレスレジスタＡＲＥＧを持たないときの動作の例を示している。図９および図１２と同じ動作については、詳細な説明は省略する。命令メモリＩＭＥＭにおいて、サイクル可変命令群を形成する１６個のサイクル可変命令は、１６個の連続する領域に格納されている。サイクル可変命令は、インダイレクトロード命令ＩＬＤ、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤ、ストライドストア命令ＳＴＲＳＴおよび検索命令ＦＩＮＤのいずれかである。ＦＩＦＯに格納されている命令は、図１２と同じである。
【００９７】
この例では、図９と同様に、パイプラインＰＬ１の演算部ＥＸは、サイクル８においてサイクル可変命令群に対応して１６個のデータがアクセスできると判断した後、あるいは、データの検索が完了したと判断した後、残りのインダイレクトロード命令ＩＬＤの演算を実行する。なお、サイクル９−１９では、パイプラインＰＬ１の演算部ＥＸは、メモリアクセス部ＭＡにデータメモリＤＭＥＭのアクセスを指示する必要がなく、あるいは、データの検索を実行する必要もない。このため、実際には、パイプラインＰＬ１の演算部ＥＸは、サイクル９−１９では、残りのインダイレクトロード命令ＩＬＤの演算の実行を停止し、ＮＯＰ命令を実行する。メモリアクセス部ＭＡおよびライトバック部ＷＢも、順次ＮＯＰ命令の実行状態になる。
【００９８】
以上の動作により、図８と同様に、図１２では、サイクル可変命令群の次の命令ＩＮＳ（ＡＤＤ）を、図１３に比べて９サイクル早く実行できる。すなわち、図１１に示したプロセッサＰＲＯＣは、無駄なＮＯＰ命令の実行数を削減でき、命令ＩＮＳの実行効率を向上できる。
【００９９】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、複数のパイプラインＰＬ１−４を有するプロセッサＰＲＯＣにおいても、不要なサイクル可変命令が実行されることを防止でき、命令の実行効率を向上できる。
【０１００】
また、フェッチ部ＦＴＣは、終了信号ＥＮＤが出力されたときに、アドレスレジスタＡＲＥＧに保持されているアドレスを用いてＦＩＦＯを介することなく命令メモリＩＭＥＭに直接アクセスする。これにより、フェッチ部ＦＴＣと命令メモリＩＭＥＭとの間にＦＩＦＯが配置される場合にも、フェッチ部ＦＴＣは、ＦＩＦＯに保持されている命令とは無関係に、バイパス経路ＢＰを介してサイクル可変命令群の次の命令を優先的にフェッチできる。この結果、プロセッサＰＲＯＣによる命令ＩＮＳの実行効率を向上できる。これに対して、バイパス経路ＢＰがない場合、フェッチ部ＦＴＣによる次の命令のフェッチは、ＦＩＦＯを空にし、ＦＩＦＯに次の命令をプリフェッチした後になり、実行効率の向上の妨げになる。
【０１０１】
図１４は、別の実施形態におけるプロセッサＰＲＯＣの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＲＯＣは、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）型のＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。プロセッサＰＲＯＣは、命令メモリＩＭＥＭおよびデータメモリＤＭＥＭ０−ＤＭＥＭ３に接続されている。
【０１０２】
例えば、プロセッサＰＲＯＣは、図２と同様に、バスＢＵＳを介して周辺回路ＰＥＲＩに接続され、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３および周辺回路ＰＥＲＩとともに単一のＬＳＩチップとして設計される。図２と同様に、バスＢＵＳは、外部端子ＥＴＭを介して、ＬＳＩチップの外部に配置される外部入出力装置に接続されてもよい。プロセッサＰＲＯＣ、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３、周辺回路ＰＥＲＩおよび外部入出力装置により、システムが形成される。
【０１０３】
プロセッサＰＲＯＣは、レジスタ部ＲＥＧ、フェッチ部ＦＴＣ、デコード部ＤＥＣ、４つのパイプラインＰＬ（ＰＬ１−ＰＬ４）、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴを有している。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、パイプラインＰＬ１−４に共通のブロックである。レジスタ部ＲＥＧ、パイプラインＰＬ１−４、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴは、図１１と同じ機能を有している。
【０１０４】
フェッチ部ＦＴＣは、命令メモリＩＭＥＭから命令ＩＮＳを４つずつ取得し、取得した命令ＩＮＳを４つずつデコード部ＤＥＣに出力することを除き、図２に示したフェッチ部ＦＴＣと同じ機能を有している。例えば、１つの命令ＩＮＳは、３２ビットで記述される。デコード部ＤＥＣは、フェッチ部ＦＴＣから転送される４つの命令ＩＮＳを同時に解析し、解析結果に応じて、命令ＩＮＳを実行するために必要なレジスタにアクセスし、各パイプラインＰＬ１−４の演算部ＥＸに実行させる動作を指定することを除き、図２に示したデコード部ＤＥＣと同じ機能を有している。
【０１０５】
なお、ＶＬＩＷ型のプロセッサでは、命令メモリＩＭＥＭに格納されている命令ＩＮＳは、どのパイプラインＰＬ１−４で実行するかを考慮してプログラムされている。すなわち、命令ＩＮＳは、パイプラインＰＬ１−４での競合が発生しないようにプログラムされている。このため、図１１に示したプロセッサＰＲＯＣと異なり、デコード部ＤＥＣは、命令ＩＮＳのオペランド同士の競合を判断する機能、および、競合が発生しないようにパイプラインＰＬ１−４に命令ＩＮＳを割り当てる機能を持たない。
【０１０６】
パイプラインＰＬ１−４の構成は、図１１に示したパイプラインＰＬ１−４と同じである。パイプラインＰＬ１−４と、フェッチ部ＦＴＣ、デコード部ＤＥＣ、レジスタ部ＲＥＧおよびメモリ制御部ＭＣＮＴとの接続関係は、図１１と同じである。
【０１０７】
図１５は、図１４に示したプロセッサＰＲＯＣの動作の例を示している。図８および図１２と同じ動作については、詳細な説明は省略する。例えば、各命令は３２ビットで記述され、４つの命令（１２８ビット＝１６バイト）が命令メモリＩＭＥＭからフェッチ部ＦＴＣに一度に転送される。このため、アドレスＩＡＤは１６個（１６進数の１０）ずつ更新される。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、サイクル毎に４つの命令（１２８ビット＝１６バイト）を同時に取り込む。デコード部ＤＥＣは、取り込んだ４つの命令を同時に解読し、あらかじめ決められた順にパイプラインＰＬ１−４の演算部ＥＸにそれぞれ割り当てる。例えば、解読された命令は、アドレスが小さい順にパイプラインＰＬ１−４に順に割り当てられる。
【０１０８】
命令メモリＩＭＥＭの太枠は、４つの命令の最初がサイクル可変命令であることを示している。フェッチ部ＦＴＣ、デコード部ＤＥＣおよびパイプラインＰＬ１の太枠は、サイクル可変命令を示している。命令メモリＩＭＥＭにおいて、サイクル可変命令群を形成する１６個のサイクル可変命令は、１６個の連続するアドレス（１０、２０、．．．、Ｆ０、１００）に格納されている。
【０１０９】
命令メモリＩＭＥＭにおいて、下位の４ビットの値が４、８、Ｃのアドレスには、パイプラインＰＬ２−４で実行される通常の命令が格納されている。ＶＬＩＷ型のプロセッサＰＲＯＣで実行される命令ＩＮＳは、パイプラインＰＬ１−４での競合が発生しないようプログラムが最適化されている。このため、例えば、パイプラインＰＬ１−４で実行される通常の命令ＩＮＳ（サイクル可変命令を除く命令）は、ＮＯＰ命令を含んでいる。
【０１１０】
サイクル可変命令は、インダイレクトロード命令ＩＬＤ、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤ、ストライドストア命令ＳＴＲＳＴおよび検索命令ＦＩＮＤのいずれかである。サイクル可変命令を実行するための最大の実行サイクル数は、１６サイクルである。
【０１１１】
サイクル３において、デコード部ＤＥＣは、サイクル可変命令群中の先頭のサイクル可変命令（アドレス１０）を検出し、パイプラインＰＬ１の演算部ＥＸに、サイクル可変命令の実行を指示する。この後の動作は、フェッチ部ＦＴＣおよびデコード部ＤＥＣが命令ＩＮＳを４つずつ取り込むこと、命令が格納されているアドレスが異なること、およびパイプラインＰＬ２−４がデコード部ＤＥＣにより解読された命令を実行することを除き、図１２と同様である。
【０１１２】
図１６は、図１４に示したプロセッサＰＲＯＣがアドレスレジスタＡＲＥＧを持たないときの動作の例を示している。図９、図１３および図１５と同じ動作については、詳細な説明は省略する。命令メモリＩＭＥＭに格納されている命令は、図１５と同じである。サイクル可変命令は、インダイレクトロード命令ＩＬＤ、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤ、ストライドストア命令ＳＴＲＳＴおよび検索命令ＦＩＮＤのいずれかである。
【０１１３】
この例では、図１５と同様に、パイプラインＰＬ１の演算部ＥＸは、サイクル８においてサイクル可変命令群に対応して１６個のデータがアクセスできると判断し、あるいは、データの検索が完了したと判断した後も、残りのインダイレクトロード命令ＩＬＤの演算を実行する。なお、実際には、パイプラインＰＬ１の演算部ＥＸは、サイクル９−１９では、残りのインダイレクトロード命令ＩＬＤの演算の実行を停止し、ＮＯＰ命令を実行する。パイプラインＰＬ１のメモリアクセス部ＭＡおよびライトバック部ＷＢも、順次ＮＯＰ命令の実行状態になる。パイプラインＰＬ２−４の動作は、図１５と同様である。
【０１１４】
以上の動作により、図８および図１２と同様に、図１５では、サイクル可変命令群の次の命令（アドレス１１０）を、図１６に比べて９サイクル早く実行できる。すなわち、図１４に示したプロセッサＰＲＯＣは、無駄なＮＯＰ命令の実行数を削減でき、命令ＩＮＳの実行効率を向上できる。
【０１１５】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、複数のパイプラインＰＬ１−４を有するＶＬＩＷ型のプロセッサＰＲＯＣにおいても、不要なサイクル可変命令が実行されることを防止でき、命令の実行効率を向上できる。
【０１１６】
図１７は、別の実施形態におけるプロセッサＰＲＯＣの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＲＯＣは、ＶＬＩＷ型のＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。プロセッサＰＲＯＣは、命令メモリＩＭＥＭおよびデータメモリＤＭＥＭ０−ＤＭＥＭ３に接続されている。
【０１１７】
例えば、プロセッサＰＲＯＣは、図２と同様に、バスＢＵＳを介して周辺回路ＰＥＲＩに接続され、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３および周辺回路ＰＥＲＩとともに単一のＬＳＩチップとして設計される。図２と同様に、バスＢＵＳは、外部端子ＥＴＭを介して、ＬＳＩチップの外部に配置される外部入出力装置に接続されてもよい。プロセッサＰＲＯＣ、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３、周辺回路ＰＥＲＩおよび外部入出力装置により、システムが形成される。
【０１１８】
プロセッサＰＲＯＣは、フェッチ部ＦＴＣおよびデコード部ＤＥＣの機能が図１４に示したフェッチ部ＦＴＣおよびデコード部ＤＥＣの機能と相違している。また、プロセッサＰＲＯＣは、図１４に示したプロセッサＰＲＯＣに命令レジスタＩＲＥＧを追加している。プロセッサＰＲＯＣのその他の構成は、図１４のプロセッサＰＲＯＣと同様である。
【０１１９】
命令メモリＩＭＥＭは、ＮＯＰ命令の代わりにＮＯＰ命令の有無を示す符号を記憶している。すなわち、ＮＯＰ命令を示すコード長は圧縮されている。ＮＯＰ命令の圧縮は、命令メモリＩＭＥＭに格納されるプログラムを生成するコンパイラあるいはコンパイル後の圧縮処理で実施される。
【０１２０】
フェッチ部ＦＴＣは、デコード部ＤＥＣからの停止信号ＳＴＯＰを受けている間、順次に発生するアドレスを用いた命令ＩＮＳのフェッチを停止する機能を、図１４に示したフェッチ部ＦＴＣに追加している。また、フェッチ部ＦＴＣは、命令メモリＩＭＥＭに格納されているサイクル可変命令群の次の命令ＩＮＳを通常のフェッチ動作の空き期間に取り込み、命令レジスタＩＲＥＧに格納する機能を、図１４に示したフェッチ部ＦＴＣに追加している。
【０１２１】
デコード部ＤＥＣは、圧縮されたＮＯＰ命令を解凍する機能を、図１４に示したデコード部ＤＥＣに追加している。また、デコード部ＤＥＣは、ＮＯＰ命令が圧縮されていることを検出したときに、対応するパイプラインＰＬの演算部ＥＸにＮＯＰ命令を供給し、停止信号ＳＴＯＰを出力する機能を、図１４に示したデコード部ＤＥＣに追加している。
【０１２２】
図１８は、図１７に示したデコード部ＤＥＣの解凍動作の例を示している。例１から例３は、命令メモリＩＭＥＭからフェッチ部ＦＴＣに一度にフェッチされる４つの命令ＩＮＳを示している。各命令ＩＮＳの上位４ビットは、ＮＯＰ命令の有無を示す符号が格納されている。論理０はＮＯＰ命令がないことを示し、論理１は、ＮＯＰ命令があることを示す。各命令ＩＮＳの下位２８ビットは、パイプラインＰＬ１−４のいずれかで実行される命令０−命令３が格納されている。ＮＯＰ命令が圧縮されているため、命令０−命令３はＮＯＰ命令を含まない。
【０１２３】
例１では、４つの命令ＩＮＳの符号が全て論理０のため、デコード部ＤＥＣは、ＮＯＰ命令の圧縮はないと判断し、命令０−３をパイプラインＰＬ１−４の演算部ＥＸにそれぞれ割り当てる。なお、例１の命令０−３は、サイクル可変命令以外の通常の命令である。
【０１２４】
例２の命令０を含む命令ＩＮＳの３番目と４番目の符号は論理１のため、デコード部ＤＥＣは、パイプラインＰＬ３−４で実行すべきＮＯＰ命令が圧縮されていると判断する。そして、デコード部ＤＥＣは、命令０、ＮＯＰ命令、ＮＯＰ命令をパイプラインＰＬ１、ＰＬ３、ＰＬ４にそれぞれ割り当てる。さらに、デコード部ＤＥＣは、パイプラインＰＬ２で実行する命令が命令１であると判断し、命令１をパイプラインＰＬ２に割り当てる。命令１に隣接する４ビットの符号は全て論理０に設定される。
【０１２５】
例２の命令２−３を含む２つの命令ＩＮＳの２番目から４番目の符号は論理１のため、デコード部ＤＥＣは、パイプラインＰＬ２−４で実行すべきＮＯＰ命令が圧縮されていると判断する。そして、デコード部ＤＥＣは、命令２、ＮＯＰ命令、ＮＯＰ命令、ＮＯＰ命令をパイプラインＰＬ１、ＰＬ２、ＰＬ３、ＰＬ４にそれぞれ割り当てる。デコード部ＤＥＣは、命令３、ＮＯＰ命令、ＮＯＰ命令、ＮＯＰ命令をパイプラインＰＬ１、ＰＬ２、ＰＬ３、ＰＬ４にそれぞれ割り当てる。これにより、例２では、４つの命令により、パイプラインＰＬ１−４の３サイクル分の命令ＩＮＳを生成できる。この結果、命令メモリＩＭＥＭに格納されるプログラムのサイズを削減でき、命令メモリＩＭＥＭへのアクセス頻度を削減できる。
【０１２６】
例３では、命令０がサイクル可変命令群の先頭のサイクル可変命令（例えば、インダイレクトロード命令ＩＬＤ）で、４ビットの符号のうち１ビットが論理１のときを示している。このとき、２番目の命令ＩＮＳの符号は全て論理０に設定され、命令を格納する領域にはアドレスＡＤＲが格納されている。アドレスＡＤＲは、命令メモリＩＭＥＭにおいてサイクル可変命令群の次の命令ＩＮＳが格納されているアドレスを示す。例３では、最初の命令ＩＮＳの２番目の符号が論理１のため、デコード部ＤＥＣは、ＮＯＰ命令をパイプラインＰＬ２に割り当てる。３番目および４番目の符号は全て論理０のため、デコード部ＤＥＣは、命令１−２をパイプラインＰＬ３−４に割り当てる。
【０１２７】
ＶＬＩＷ型のプロセッサＰＲＯＣのプログラムでは、ＮＯＰ命令が圧縮されない場合、図１５で説明したように、１６個のサイクル可変命令とともにパイプラインＰＬ２−４に対応する４８個の命令ＩＮＳが、命令メモリＩＭＥＭに格納されている。このため、サイクル可変命令群の次の命令ＩＮＳは、命令メモリＩＭＥＭにおいて、先頭のサイクル可変命令が格納されているアドレスに１００（１６進数）を加えた領域に常に格納されている。しかし、ＮＯＰ命令が圧縮されている場合、サイクル可変命令群の次の命令ＩＮＳのアドレスは、ＮＯＰ命令の圧縮数に応じて変化する。換言すれば、命令メモリＩＭＥＭに格納されたプログラムのアドレスの進み方は、ＮＯＰ命令が圧縮されている場合と圧縮されていない場合とで異なる。このため、プログラム中にアドレスＡＤＲを記述しておき、フェッチ部ＦＴＣは、先頭のサイクル可変命令とともにアドレスＡＤＲをフェッチする必要がある。
【０１２８】
例２において、４ビットの符号のうち２ビットが論理１のとき、すなわち、２つのＮＯＰ命令が圧縮されているとき、２つの命令ＩＮＳを用いて、パイプラインＰＬ１−４で実行する命令が割り当てられる。このとき、２つ目の命令ＩＮＳの符号は全て論理０に設定されている。４ビットの符号のうち３ビットが論理１のとき、すなわち、３つのＮＯＰ命令が圧縮されているとき、１つの命令ＩＮＳを用いて、パイプラインＰＬ１−４で実行する命令が割り当てられる。図１８には示していないが、４ビットの符号のうち１ビットが論理１のとき、すなわち、１つのＮＯＰ命令が圧縮されているとき、３つの命令ＩＮＳを用いて、パイプラインＰＬ１−４で実行する命令が割り当てられる。
【０１２９】
図１９は、図１７に示したプロセッサＰＲＯＣの動作の例を示している。図８、図１２および図１５と同じ動作については、詳細な説明は省略する。例えば、デコード部ＤＥＣからパイプラインＰＬ１−４への命令実行の指示、およびパイプラインＰＬ１−４の動作は、図１５と同じである。
【０１３０】
命令メモリＩＭＥＭに示した太枠は、パイプラインＰＬ１−４で並列に実行される命令群ＩＮＳを示している。なお、図１９および図２０では、符号ＩＮＳ、ＩＮＳａ−ＩＮＳｈは、サイクル可変命令以外の通常の命令を示し、符号ＩＬＤ１−ＩＬＤ１６は、インダイレクトロード命令ＩＬＤを示している。なお、符号ＩＬＤ１−１６は、インダイレクトストア命令ＩＳＴ、ストライドロード命令ＳＴＲＬＤ、ストライドストア命令ＳＴＲＳＴまたは検索命令ＦＩＮＤ等のサイクル可変命令に置き換えられてもよい。命令メモリＩＭＥＭの右側に示した角括弧によるくくりは、フェッチ部ＦＴＣに一度にフェッチされる４つの命令を示している。
【０１３１】
各サイクル１−４において、フェッチ部ＦＴＣは、命令メモリＩＭＥＭから４つの命令ＩＮＳを順次フェッチする。サイクル２において、デコード部ＤＥＣは、フェッチ部ＦＴＣからの命令ＩＮＳを解読し、パイプラインＰＬ１−４にそれぞれ割り当てる。
【０１３２】
サイクル３において、デコード部ＤＥＣは、サイクル可変命令群の先頭のサイクル可変命令ＩＬＤ１を検出し、パイプラインＰＬ１の演算部ＥＸに、サイクル可変命令ＩＬＤ１の実行を順次指示する。また、デコード部ＤＥＣは、先頭のサイクル可変命令ＩＬＤ１の次の命令をアドレスＡＤＲとしてアドレスレジスタＡＲＥＧに格納する。この実施形態では、アドレスＡＤＲは、命令コードとして命令メモリＩＭＥＭから供給されたときに、アドレスレジスタＡＲＥＧに書き込まれる。このため、図８等に示したアドレスレジスタＡＲＥＧのロックおよびロックの解除は、不要である。
【０１３３】
デコード部ＤＥＣは、アドレスＡＤＲが格納されている命令を、ＮＯＰ命令として認識し、対応するパイプラインＰＬ２の演算部ＥＸにＮＯＰ命令を指示する。なお、サイクル３では、デコード部ＤＥＣは、ＮＯＰ命令の圧縮を検出しないため、残りの２つの命令ＩＮＳをパイプラインＰＬ３−４にそれぞれ割り当てる。
【０１３４】
サイクル４において、デコード部ＤＥＣは、サイクル可変命令ＩＬＤ２の検出とともにパイプラインＰＬ３−４で実行すべき２つのＮＯＰ命令が圧縮されていることを検出する。デコード部ＤＥＣは、圧縮されたＮＯＰ命令を解凍し、パイプラインＰＬ３−４の演算部ＥＸにＮＯＰ命令を供給する。デコード部ＤＥＣは、ＮＯＰ命令の解凍により、パイプラインＰＬ１−４に出力しきれない解読した命令（この例では、ＩＬＤ３、ＩＬＤ４）が残っていると判断し、フェッチ部ＦＴＣに停止信号ＳＴＯＰを出力する。
【０１３５】
また、デコード部ＤＥＣは、各サイクル可変命令ＩＬＤ３、ＩＬＤ４の検出とともにパイプラインＰＬ２−４で実行すべき３つのＮＯＰ命令が圧縮されていることを検出する。すなわち、デコード部ＤＥＣは、フェッチ部ＦＴＣから受ける４つの命令に３サイクル分の命令が含まれていることを検出し、サイクル４−６において、図１８に示した例２の動作を実行する。
【０１３６】
デコード部ＤＥＣは、圧縮されたＮＯＰ命令を除く命令を４つ単位でフェッチ部ＦＴＣから受ける。ＮＯＰ命令が圧縮されているとき、デコード部ＤＥＣは、フェッチ部ＦＴＣから受けた４つの命令の一部をパイプラインＰＬに指示できず、保持しておく必要がある。デコード部ＤＥＣは、ＮＯＰ命令の圧縮に伴い命令を保持している間、フェッチ部ＦＴＣから新たな命令が出力されることを禁止するため、停止信号ＳＴＯＰをフェッチ部ＦＴＣに出力する。フェッチ部ＦＴＣは、停止信号ＳＴＯＰを受けている間、順次発生するアドレスを用いた命令のフェッチを禁止する。したがって、サイクル可変命令ＩＬＤ５−８は、サイクル４−６の間、フェッチ部ＦＴＣに保持される。
【０１３７】
停止信号ＳＴＯＰが出力されている間、命令メモリＩＭＥＭはアクセスされない。デコード部ＤＥＣは、命令メモリＩＭＥＭの空きサイクルを利用して、アドレスレジスタＡＲＥＧに格納されているアドレスＡＤＲによる命令メモリＩＭＥＭのアクセスをフェッチ部ＦＴＣに指示する。フェッチ部ＦＴＣは、停止信号ＳＴＯＰを受けているときに、アドレスＡＤＲを用いて、サイクル可変命令群の次に格納されている命令ＩＮＳａ−ＩＮＳｄを命令メモリＩＭＥＭからフェッチし、フェッチした命令ＩＮＳａ−ＩＮＳｄを命令レジスタＩＲＥＧに格納する。なお、フェッチ部ＦＴＣは、デコード部ＤＥＣからの指示を受けることなく、アドレスレジスタＡＲＥＧに格納されているアドレスＡＤＲによる命令メモリＩＭＥＭのアクセスを、停止信号ＳＴＯＰに応答して実行してもよい。
【０１３８】
サイクル５において、デコード部ＤＥＣは、サイクル可変命令ＩＬＤ３、ＮＯＰ命令、ＮＯＰ命令、ＮＯＰ命令をパイプラインＰＬ１−４の演算部ＥＸに出力する。サイクル６において、デコード部ＤＥＣは、サイクル可変命令ＩＬＤ４、ＮＯＰ命令、ＮＯＰ命令、ＮＯＰ命令をパイプラインＰＬ１−４の演算部ＥＸに出力し、停止信号ＳＴＯＰの出力を停止する。これにより、サイクル７において、フェッチ部ＦＴＣは、サイクル可変命令ＩＬＤ５−８をデコード部ＤＥＣに出力し、新たなサイクル可変命令ＩＬＤ９−１２を命令メモリＩＭＥＭからフェッチする。
【０１３９】
サイクル７において、デコード部ＤＥＣは、サイクル可変命令ＩＬＤ５−８を解読し、各サイクル可変命令ＩＬＤ５−８に３つのＮＯＰ命令が圧縮されていることを検出する。すなわち、デコード部ＤＥＣは、フェッチ部ＦＴＣから受ける４つの命令に４サイクル分の命令が含まれていることを検出し、サイクル７−１０において、図１８に示した例２の２サイクル目の動作をそれぞれ実行する。
【０１４０】
サイクル１０において、パイプラインＰＬ１の演算部ＥＸは、サイクル可変命令ＩＬＤ７により、データメモリＤＭＥＭのアクセスが完了すると判断し、あるいはデータの検索が完了すると判断し、終了信号ＥＮＤをフェッチ部ＦＴＣおよびデコード部ＤＥＣに出力する。終了信号ＥＮＤを受けたフェッチ部ＦＴＣは、サイクル１１において、サイクル可変命令群の２つ後の命令ＩＮＳｅ、ＩＮＳｆ、ＩＮＳｇ、ＩＮＳｈをフェッチする。例えば、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧに格納されているアドレスＡＤＲにアドレス１０（１６進数）を加えることで、２つ後の命令ＩＮＳｅ−ＩＮＳｈが格納されている命令メモリＩＭＥＭのアドレス（ＡＤＲの１つ先のアドレス）を求める。
【０１４１】
終了信号ＥＮＤを受けたデコード部ＤＥＣは、サイクル１１において、フェッチ部ＦＴＣに保持されている命令ではなく、命令レジスタＩＲＥＧに保持されている命令ＩＮＳａ−ＩＮＳｄを取得し、取得した命令ＩＮＳａ−ＩＮＳｄを解読する。デコード部ＤＥＣは、解読した結果をパイプラインＰＬ１−４の演算部ＥＸに供給する。サイクル１２において、デコード部ＤＥＣは、フェッチ部ＦＴＣから次の命令ＩＳＴｅ−ＩＳＴｈを受けて解読する。
【０１４２】
以上の動作により、フェッチ部ＦＴＣは、命令メモリＩＭＥＭのアドレスＡＤＲに格納されている命令を、終了信号ＥＮＤの後にフェッチする必要がなくなる。したがって、終了信号ＥＮＤの後にパイプラインＰＬ１−４が実行するＮＯＰ命令の数を１サイクル分少なくできる。
【０１４３】
図２０は、図１７に示したプロセッサＰＲＯＣがアドレスレジスタＡＲＥＧおよび命令レジスタＩＲＥＧを持たないときの動作の例を示している。図８、図１２図１５および図１９と同じ動作については、詳細な説明は省略する。命令メモリＩＭＥＭに格納されている命令は、図１９と同じである。
【０１４４】
この例では、図１９と同様に、パイプラインＰＬ１の演算部ＥＸは、サイクル１０においてデータメモリＤＭＥＭのアクセスが完了し、あるいはデータの検索が完了すると判断した後も、残りのサイクル可変命令ＩＬＤ８−ＩＬＤ１６の演算を実行する。なお、実際には、パイプラインＰＬ１の演算部ＥＸは、サイクル１１−１９では、残りのサイクル可変命令ＩＬＤ８−ＩＬＤ１６の演算の実行を停止し、ＮＯＰ命令を実行する。パイプラインＰＬ１のメモリアクセス部ＭＡおよびライトバック部ＷＢも、順次ＮＯＰ命令の実行状態になる。
【０１４５】
以上の動作により、図１９では、サイクル可変命令群の次の命令を、図２０に比べて８サイクル早く実行できる。これは、図１４に示したＶＬＩＷ型のプロセッサＰＲＯＣの動作（図１５）に比べて、さらに１サイクル改善している。
【０１４６】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、圧縮された命令がデコード部ＤＥＣにより検出され、パイプラインＰＬ１−４に出力しきれない解読した命令が残っていると判断されたときに、アドレスレジスタＡＲＥＧ内のアドレスを用いてサイクル可変命令群の次の命令が先読みされる。これにより、終了信号ＥＮＤが出力される前に、サイクル可変命令群の次の命令を命令レジスタＩＲＥＧに保持することができ、命令の実行効率を向上させることができる。
【０１４７】
図２１および図２２は、別の実施形態におけるプロセッサＰＲＯＣにおいて、ＮＯＰ命令以外の命令の圧縮の例を示している。例えば、信号処理等において配列の演算が行われるとき、連続する複数の命令において、番号が連続するレジスタが指定されることが多い。特に、ベクトルレジスタＶＲを有するプロセッサ（ベクトルプロセッサ）では、大きなベクトル長ＶＬが設定されているとき、演算毎に番号が連続するレジスタが指定される。
【０１４８】
図２１は、ベクトルレジスタＶＲを用いた加算処理において番号が連続するレジスタが指定される例を示している。例えば、図２１に示した加算処理を実行するプロセッサＰＲＯＣは、デコード部ＤＥＣが、圧縮されたＮＯＰ命令ではなく圧縮された加算命令を解凍する機能を有することを除き、図１７と同じである。すなわち、プロセッサＰＲＯＣは、ＶＬＩＷ型のＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。
【０１４９】
図２１のＣ言語による記述は、ベクトル長ＶＬ（この例では１２８）の回数だけベクトルレジスタＶＲの格納領域ａ［ｉ］、ｂ［ｉ］内のデータを加算し、加算結果を格納領域ｃ［ｉ］に格納することを示している。格納領域ａ［ｉ］、ｂ［ｉ］のデータは、データメモリＤＭＥＭ０−３の領域ＡＤＲ０−７、ＡＤＲ８−１５からそれぞれロードされる。格納流域ｃ［ｉ］のデータ（加算結果）は、データメモリＤＭＥＭ０−３の領域ＡＤＲ１６−２３に格納される。例えば、格納領域ａ［ｉ］はベクトル領域ＶＲａ内の格納領域ＶＲ［０］−ＶＲ［１２７］である。同様に、格納領域ｂ［ｉ］はベクトル領域ＶＲｂ内の格納領域ＶＲ［０］−ＶＲ［１２７］であり、格納領域ｃ［ｉ］はベクトル領域ＶＲｃ内の格納領域ＶＲ［０］−ＶＲ［１２７］である。
【０１５０】
プロセッサＰＲＯＣにおいて、各パイプラインＰＬ１−４の演算部ＥＸ（図１７）は、図３、図４、図６と同様に、同時に動作可能な１６個の演算器（加算器を含む）を有している。このため、ベクトル長ＶＬに対応する１２８個のデータの加算（ＡＤＤ）、ロード（ＬＤ）およびストア（ＳＴ）は、それぞれ命令を８回実行する必要がある。このため、Ｃ言語の記述からプロセッサＰＲＯＣにより実行可能なアセンブリ命令を生成するコンパイラは、加算命令ＡＤＤ、ロード命令ＬＤおよびストア命令ＳＴを、それぞれ８個を生成する。
【０１５１】
図２２は、図２１に示した加算命令ＡＤＤの圧縮および解凍の例を示している。加算命令ＡＤＤの圧縮は、命令メモリＩＭＥＭに格納されるプログラムを生成するコンパイラあるいはコンパイル後の圧縮処理で実施される。この例では、レジスタ番号が連続する４つの加算命令ＡＤＤ（１２８ビット）が、４８ビットに圧縮される。
【０１５２】
圧縮後の命令に含まれる符号Ｌは、圧縮された命令のコード長を示し、図２２に示す例では、前から２つのコード長Ｌに４８が格納され、最後のコード長Ｌに０が格納されている。なお、例えば、コード長Ｌが０、３２、４８、６４のいずれかに設定される場合、コード長Ｌは２ビット（０、１、２、３のいずれか）で表現できる。これにより、圧縮された命令のコード長はさらに短くなる。
【０１５３】
コード長Ｌの次の４ビットは、圧縮された４つの加算命令ＡＤＤにそれぞれ対応しており、オペランド（レジスタ番号）が１つ前の加算命令ＡＤＤのオペランドを引き継ぐときに論理１に設定され、引き継がないときに論理０に設定される。例えば、圧縮される４つの加算命令ＡＤＤの先頭の加算命令ＡＤＤは、オペランドを引き継がない命令であり、圧縮後の命令コード列にオペランドが記述される。
【０１５４】
プロセッサＰＲＯＣはＶＬＩＷ型であり、例えば、図１９に示したように、命令を４つずつフェッチし、デコード部ＤＥＣで解読する。このため、各命令が３２ビットで記述されるとき、圧縮された命令は、１２８ビット（３２ビットの４倍）の領域からはみ出すことなく配置されなくてはならない。図２２の例では、圧縮された２つの命令のコード長は、それぞれ４８ビットであるため、１２８ビットの領域からはみ出すことがない。
【０１５５】
図２２の例では、圧縮後の命令において、１２８ビットの残りの３２ビットは使用されない。このとき、残りの３２ビットの値が無効であることを示すために最後のコード長Ｌは０に設定される。最後のコード長Ｌの後ろは、ダミー命令（例えば、オール０やオール１）が書き込まれる。なお、例えば、圧縮された３つの命令が記述されるとき、３つ目の命令は、１２８ビットの領域からはみ出すために次の１２８ビットの領域に配置され、コード長Ｌの次の４ビットは全て論理１に設定される。このときにも、２つ目の命令の後ろに配置される最後のコード長Ｌは０に設定され、最後のコード長Ｌの後ろは、ダミー命令が書き込まれる。
【０１５６】
圧縮された命令を解凍するデコード部ＤＥＣは、まず、コード長Ｌの値４８に基づいて圧縮された命令の切れ目を認識する。次にコード長Ｌの後ろの４ビットの値に基づいて、最初の４つの命令を再生する。再生された命令は、演算部ＥＸに供給される。デコード部ＤＥＣは、次のコード長Ｌの値が４８であるため、解凍すべき命令がまだあることを認識し、フェッチ部ＦＴＣに停止信号ＳＴＯＰを出力する。この動作は、図１９および図２０と同様である。
【０１５７】
デコード部ＤＥＣは、演算部ＥＸにサイクル可変命令を実行させているとき、停止信号ＳＴＯＰの出力中に、図１９と同様に、アドレスレジスタＡＲＥＧに格納されているアドレスＡＤＲによる命令メモリＩＭＥＭのアクセスをフェッチ部ＦＴＣに指示する。フェッチ部ＦＴＣは、アドレスＡＤＲを用いて、サイクル可変命令群の次に格納されている命令（例えば、図９のＩＮＳａ−ＩＮＳｄ）を命令メモリＩＭＥＭから読み出し、読み出した命令を命令レジスタＩＲＥＧに格納する。
【０１５８】
デコード部ＤＥＣは、次の圧縮された命令を解凍して次の４つの命令を再生し、再生した命令を次のサイクルで演算部ＥＸに供給する。デコード部ＤＥＣは、最後のコード長Ｌの値が０であるため、その後ろに圧縮された命令がないことを認識する。そして、デコード部ＤＥＣは、停止信号ＳＴＯＰの出力を停止し、フェッチ部ＦＴＣから次の命令を取得する。フェッチ部ＦＴＣは、次の命令を命令メモリＩＭＥＭからフェチする。
【０１５９】
このように、加算命令ＡＤＤを圧縮する場合にも、図１９および図２０と同様の動作を実行でき、命令の実行効率を向上できる。なお、加算命令ＡＤＤの圧縮と同様の手法を用いて、図２１に示したロード命令ＬＤやストア命令ＳＴを圧縮することも可能である。
【０１６０】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、加算命令ＡＤＤやロード命令ＬＤ、ストア命令ＳＴが圧縮されるときにも、プロセッサＰＲＯＣを図１９および図２０と同様に動作させることができ、命令の実行効率を向上させることができる。
【０１６１】
図２３は、上述したプロセッサＰＲＯＣが搭載されるシステムＳＹＳの例を示している。例えば、システムＳＹＳは、携帯電話等の組み込み型の通信機器であり、アンテナＡＮＴ、復調器ＤＭＤ、変調器ＭＤ、命令メモリＩＭＥＭ、プロセッサＰＲＯＣ、データメモリＤＭＥＭ０−３、データ処理回路ＤＰおよび入出力部Ｉ／Ｏを有している。例えば、命令メモリＩＭＥＭ、プロセッサＰＲＯＣおよびデータメモリＤＭＥＭ０−３は、単一のＬＳＩチップとして設計される。ＬＳＩチップは、データ処理回路ＤＰを含んでいてもよい。プロセッサＰＲＯＣは、図１、図２、図１１、図１４または図１７に示したプロセッサＰＲＯＣ、あるいは図２２の圧縮された命令を処理するプロセッサＰＲＯＣのいずれかである。
【０１６２】
復調器ＤＭＤは、アンテナＡＮＴを介して受信する受信データを復調し、ＬＳＩに出力する。ＬＳＩ内では、復調された受信データは、データメモリＤＭＥＭ０−３に格納される。復調器ＤＭＤは、プロセッサＰＲＯＣが演算する受信データを生成するデータ生成部の一例である。プロセッサＰＲＯＣは、受信データに含まれる受信情報を演算により取り出し、取り出した受信情報をデータメモリＤＭＥＭ０−３に書き込む。
【０１６３】
また、プロセッサＰＲＯＣは、データメモリＤＭＥＭ０−３に格納されている送信情報を演算して送信データを生成し、生成した送信データをデータメモリＤＭＥＭ０−３に書き込む。変調器ＭＤは、データメモリＤＭＥＭ０−３に格納されている送信データを変調し、アンテナＡＮＴに出力する。変調器ＭＤは、プロセッサＰＲＯＣにより演算された送信データを用いてデータ処理を実行するデータ処理部の一例である。
【０１６４】
データ処理回路ＤＰは、データメモリＤＭＥＭ０−３に格納されている受信情報を用いて、受信情報の種類に応じた処理を実行する。また、データ処理回路ＤＰは、送信データを生成し、データメモリＤＭＥＭ０−３に書き込む。データ処理回路ＤＰは、プロセッサＰＲＯＣにより演算された受信データを用いてデータ処理を実行するデータ処理部の一例であり、あるいはプロセッサＰＲＯＣが演算する送信データを生成するデータ生成部の一例である。
【０１６５】
例えば、データ処理回路ＤＰは、音声データを再生するためのデコード処理や、画像データを再生するためのデコード処理、あるいは、音声データや画像データのエンコード処理を実行する。なお、音声データのデコード処理やエンコード処理、画像データのデコード処理やエンコード処理をそれぞれ実行する複数のデータ処理回路ＤＰが、システムＳＹＳ内に形成されてもよい。
【０１６６】
例えば、入出力部Ｉ／Ｏは、ディスプレイ、スピーカー、入力キーおよび撮像装置等である。ディスプレイは、データ処理回路ＤＰによりデコードされる画像データを表示する。スピーカーは、データ処理回路ＤＰによりデコードされる音声データを出力する。入力キーは、データ処理回路ＤＰによりエンコードされる文字列を入力するために使用される。撮像装置は、データ処理回路ＤＰによりエンコードされる画像データを撮像する。上述した実施形態のプロセッサＰＲＯＣをシステムＳＹＳに搭載することで、プロセッサＰＲＯＣの演算処理の性能を向上させることができ、受信データや送信データの処理効率を向上させることができる。この結果、システムＳＹＳの性能を向上させることができる。
【０１６７】
図２４は、図２、図１１または図１４に示したフェッチ部ＦＴＣの動作の例を示している。フェッチ部ＦＴＣは、演算部ＥＸから終了信号ＥＮＤを受け取らない間（ステップＳ１：Ｎｏ）、命令メモリＩＭＥＭから、プログラムカウンタが示すアドレスに対応する命令をフェッチする（ステップＳ４）。プロセッサＰＲＯＣがプリフェッチ部を有する場合には、フェッチ部ＦＴＣは、プリフェッチ部のＦＩＦＯから古い順にプリフェッチされた命令をフェッチする。次いで、フェッチ部ＦＴＣは、プログラムカウンタの値をインクリメントする（ステップＳ５）。そして、ステップＳ１へ戻る。
【０１６８】
一方、フェッチ部ＦＴＣは、終了信号ＥＮＤを受け取ると（ステップＳ１：Ｙｅｓ）、命令メモリＩＭＥＭから、アドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチする（ステップＳ２）。プロセッサＰＲＯＣがプリフェッチ部を有する場合には、フェッチ部ＦＴＣは、プリフェッチ部のＦＩＦＯを空にする。そして、フェッチ部ＦＴＣは、プログラムカウンタに、現在のプログラムカウンタの値に４を加算した値を設定する（ステップＳ３）。そして、ステップＳ１へ戻る。フェッチ部ＦＴＣは、上述したステップＳ１〜ステップＳ５を繰り返す。
【０１６９】
図２５は、図１７に示したフェッチ部ＦＴＣの動作の例を示している。フェッチ部ＦＴＣは、演算部ＥＸから終了信号ＥＮＤを受け取らず（ステップＳ１１：Ｎｏ）、かつデコード部ＤＥＣから停止信号ＳＴＯＰを受け取っていない場合（ステップＳ１２：Ｎｏ）、命令メモリＩＭＥＭから、アドレスレジスタＡＲＥＧの値に４を加算した値のアドレスに対応する命令をフェッチする（ステップＳ１３）。そして、ステップＳ１１へ戻る。
【０１７０】
フェッチ部ＦＴＣは、停止信号ＳＴＯＰを受け取っている場合、すなわち命令のフェッチ動作の停止が指示されている場合（ステップＳ１２：Ｙｅｓ）、命令をフェッチせずにステップＳ１１へ戻る。
【０１７１】
一方、フェッチ部ＦＴＣは、終了信号ＥＮＤを受け取った場合（ステップＳ１１：Ｙｅｓ）、アドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチすることが指示されていなければ（ステップＳ１４：Ｎｏ）、ステップＳ１２へ進む。そして、フェッチ部ＦＴＣは、停止信号ＳＴＯＰを受け取っていれば（ステップＳ１２：Ｙｅｓ）、ステップＳ１１へ戻る。フェッチ部ＦＴＣは、停止信号ＳＴＯＰを受け取っていなければ（ステップＳ１２：Ｎｏ）、命令メモリＩＭＥＭから、アドレスレジスタＡＲＥＧの値に４を加算した値のアドレスに対応する命令をフェッチする（ステップＳ１３）。そして、ステップＳ１１へ戻る。
【０１７２】
また、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチすることが指示されていれば（ステップＳ１４：Ｙｅｓ）、命令メモリＩＭＥＭから、アドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチする（ステップＳ１５）。そして、ステップＳ１１へ戻る。フェッチ部ＦＴＣは、上述したステップＳ１１〜ステップＳ１５を繰り返す。
【０１７３】
図２６は、図２、図１１または図１４に示したデコード部ＤＥＣの動作の例を示している。デコード部ＤＥＣは、ＮＯＰ変更用のフラグを有している。ＮＯＰ変更用のフラグが設定されている場合には、デコード部ＤＥＣは、次に演算部ＥＸへ渡す命令をＮＯＰ命令に変更する。ＮＯＰ変更用のフラグが設定されていない場合には、デコード部ＤＥＣは、次の命令をＮＯＰ命令に変更しない。
【０１７４】
ＮＯＰ変更用のフラグが設定されていない場合であり（ステップＳ２１：Ｎｏ）、かつ演算部ＥＸがサイクル可変命令でない命令を実行している場合（ステップＳ２２：Ｎｏ、ステップＳ２３：Ｎｏ）、デコード部ＤＥＣは、フェッチ部ＦＴＣから渡された命令を解読する。そして、デコード部ＤＥＣは、演算部ＥＸへ演算に必要な情報を送信し（ステップＳ２４）、ステップＳ２１へ戻る。
【０１７５】
演算部ＥＸがサイクル可変命令を実行している場合（ステップＳ２３：Ｙｅｓ）、デコード部ＤＥＣは、アドレスレジスタＡＲＥＧに、命令メモリＩＭＥＭの、当該サイクル可変命令の命令群の次の命令が格納されているアドレスを書き込む。また、デコード部ＤＥＣは、アドレスレジスタＡＲＥＧのロックを指示する（ステップＳ２５）。次いで、デコード部ＤＥＣは、フェッチ部ＦＴＣから渡された命令を解読し、演算部ＥＸへ演算に必要な情報を送信し（ステップＳ２４）、ステップＳ２１へ戻る。
【０１７６】
デコード部ＤＥＣは、演算部ＥＸからの終了信号ＥＮＤによって実行中の命令が終了したことを通知されると（ステップＳ２２：Ｙｅｓ）、アドレスレジスタＡＲＥＧのロックを解除する（ステップＳ２６）。また、デコード部ＤＥＣは、現在解読中の命令をＮＯＰ命令に変更し（ステップＳ２７）、ＮＯＰ変更用のフラグを設定する（ステップＳ２８）。そして、デコード部ＤＥＣは、演算部ＥＸへＮＯＰ命令を送信し（ステップＳ２４）、ステップＳ２１へ戻る。
【０１７７】
また、デコード部ＤＥＣは、ＮＯＰ変更用のフラグが設定されている場合には（ステップＳ２１：Ｙｅｓ）、現在解読中の命令をＮＯＰ命令に変更し（ステップＳ２９）、ＮＯＰ変更用のフラグをクリアする（ステップＳ３０）。そして、デコード部ＤＥＣは、演算部ＥＸへＮＯＰ命令を送信し（ステップＳ２４）、ステップＳ２１へ戻る。デコード部ＤＥＣは、上述したステップＳ２１〜ステップＳ３０を繰り返す。
【０１７８】
図２７は、図１７に示したデコード部ＤＥＣの動作の例を示している。デコード部ＤＥＣは、アドレスレジスタからのフェッチ指示用のフラグを有している。アドレスレジスタからのフェッチ指示用のフラグが設定されている場合には、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧからアドレスを取得し、取得したアドレスに基づいて命令をフェッチする。アドレスレジスタからのフェッチ指示用のフラグが設定されていない場合には、デコード部ＤＥＣは、プログラムカウンタに基づいて命令をフェッチする。
【０１７９】
演算部ＥＸがサイクル可変命令でない命令を実行している場合であり（ステップＳ４１：Ｎｏ、ステップＳ４２：Ｎｏ）、かつ命令が圧縮されていない場合（ステップＳ４３：Ｎｏ）、デコード部ＤＥＣは、フェッチ部ＦＴＣから渡された命令を解読する。そして、デコード部ＤＥＣは、演算部ＥＸへ演算に必要な情報を送信し（ステップＳ４９）、ステップＳ４１へ戻る。
【０１８０】
命令が圧縮されている場合（ステップＳ４３：Ｙｅｓ）、デコード部ＤＥＣは、圧縮されている命令を解凍し、停止信号ＳＴＯＰによりフェッチ部ＦＴＣへ命令のフェッチ動作の停止を指示する（ステップＳ４４）。そして、デコード部ＤＥＣは、解凍した命令の数をレジスタなどの記憶部に保持し（ステップＳ４５）、解凍した命令の数から１を減算して残りの命令数を求める（ステップＳ４６）。デコード部ＤＥＣは、残りの命令数が０にならない間（ステップＳ４７：Ｎｏ）、解凍した命令を解読し、演算部ＥＸへ演算に必要な情報を送信し（ステップＳ４９）、ステップＳ４１へ戻る。
【０１８１】
解凍した全ての命令の解読が終了し、残りの命令数が０になると（ステップＳ４７：Ｙｅｓ）、デコード部ＤＥＣは、フェッチ部ＦＴＣに対する命令のフェッチ動作の停止を解除する（ステップＳ４８）。そして、デコード部ＤＥＣは、命令を解読し、演算部ＥＸへ演算に必要な情報を送信し（ステップＳ４９）、ステップＳ４１へ戻る。
【０１８２】
また、演算部ＥＸがサイクル可変命令を実行している場合（ステップＳ４２：Ｙｅｓ）、デコード部ＤＥＣは、アドレスレジスタＡＲＥＧに、命令メモリＩＭＥＭの、当該サイクル可変命令の命令群の次の命令が格納されているアドレスを書き込む（ステップＳ５０）。そして、停止信号ＳＴＯＰによりフェッチ部ＦＴＣへ命令のフェッチ動作の停止を指示していない場合には（ステップＳ５１：Ｎｏ）、デコード部ＤＥＣは、ステップＳ４３〜ステップＳ４９を行い、ステップＳ４１へ戻る。
【０１８３】
フェッチ部ＦＴＣへ命令のフェッチ動作の停止を指示している場合であり（ステップＳ５１：Ｙｅｓ）、かつアドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチすることを指示していなければ（ステップＳ５２：Ｎｏ）、デコード部ＤＥＣは、アドレスレジスタからのフェッチ指示用のフラグを設定する（ステップＳ５３）。そして、ステップＳ４１へ戻る。
【０１８４】
アドレスレジスタＡＲＥＧに格納されているアドレスに対応する命令をフェッチすることを指示している場合には（ステップＳ５２：Ｙｅｓ）、そのままステップＳ４１へ戻る。一方、デコード部ＤＥＣは、演算部ＥＸから終了信号ＥＮＤにより実行中の命令が終了したことを指示されると（ステップＳ４１：Ｙｅｓ）、現在解読中の命令をＮＯＰ命令に変更する。また、デコード部ＤＥＣは、停止信号ＳＴＯＰによりフェッチ部ＦＴＣへ命令のフェッチ動作の停止を指示する（ステップＳ５４）。そして、ステップＳ４１へ戻る。デコード部ＤＥＣは、上述したステップＳ４１〜ステップＳ５４を繰り返す。
【０１８５】
図２８は、図２、図１１、図１４または図１７に示したアドレスレジスタＡＲＥＧの書き込み動作の例を示している。アドレスレジスタＡＲＥＧのロックが解除されている状態において（ステップＳ６１：Ｙｅｓ）、デコード部ＤＥＣがサイクル可変命令を解読すると（ステップＳ６２：Ｙｅｓ）、アドレスレジスタＡＲＥＧは、命令メモリＩＭＥＭの、当該サイクル可変命令の命令群の次の命令が格納されているアドレスを保持する。また、アドレスレジスタＡＲＥＧは、ロック状態となる（ステップＳ６３）。そして、ステップＳ６１へ戻る。
【０１８６】
デコード部ＤＥＣがサイクル可変命令でない命令を解読すると（ステップＳ６２：Ｎｏ）、ステップＳ６１へ戻る。一方、アドレスレジスタＡＲＥＧのロックが解除されていない状態、すなわちロック状態のときに（ステップＳ６１：Ｎｏ）、デコード部ＤＥＣによりロック状態の解除が指示されると（ステップＳ６４：Ｙｅｓ）、アドレスレジスタＡＲＥＧはロック状態を解除する（ステップＳ６５）。そして、ステップＳ６１へ戻る。
【０１８７】
デコード部ＤＥＣからロック状態の解除の指示がない場合には（ステップＳ６４：Ｎｏ）、そのままステップＳ６１へ戻る。アドレスレジスタＡＲＥＧは、上述したステップＳ６１〜ステップＳ６５を繰り返す。
【０１８８】
図２９は、図２、図１１、図１４または図１７に示した演算部ＥＸの動作の例を示している。演算部ＥＸは、デコード部ＤＥＣから渡された命令に基づいて演算を実行する（ステップＳ７１）。演算部ＥＸは、実行中の命令がサイクル可変命令であり、かつ当該サイクル可変命令が終了した場合（ステップＳ７２：Ｙｅｓ）、終了信号ＥＮＤを出力してフェッチ部ＦＴＣおよびデコード部ＤＥＣへサイクル可変命令の終了を通知する（ステップＳ７３）。そして、ステップＳ７１へ戻る。
【０１８９】
実行中の命令がサイクル可変命令でないか、またはサイクル可変命令であるが終了していない場合（ステップＳ７２：Ｎｏ）、そのままステップＳ７１へ戻る。演算部ＥＸは、上述したステップＳ７１〜ステップＳ７３を繰り返す。
【０１９０】
図３０は、別の実施形態におけるプロセッサＰＲＯＣの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＲＯＣは、ＶＬＩＷ型のＤＳＰやＣＰＵであり、ベクトルプロセッサとして動作する。プロセッサＰＲＯＣは、命令メモリＩＭＥＭおよびデータメモリＤＭＥＭ０−ＤＭＥＭ３に接続されている。
【０１９１】
例えば、プロセッサＰＲＯＣは、図２と同様に、バスＢＵＳを介して周辺回路ＰＥＲＩに接続され、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３および周辺回路ＰＥＲＩとともに単一のＬＳＩチップとして設計される。図２と同様に、バスＢＵＳは、外部端子ＥＴＭを介して、ＬＳＩチップの外部に配置される外部入出力装置に接続されてもよい。プロセッサＰＲＯＣ、命令メモリＩＭＥＭ、データメモリＤＭＥＭ０−３、周辺回路ＰＥＲＩおよび外部入出力装置により、システムが形成される。
【０１９２】
プロセッサＰＲＯＣは、レジスタ部ＲＥＧ、フェッチ部ＦＴＣ、デコード部ＤＥＣ、４つのパイプラインＰＬ（ＰＬ１−ＰＬ４）、およびメモリ制御部ＭＣＮＴを有している。また、プロセッサＰＲＯＣは、ループを制御するループ用レジスタとして、アドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧ、ブレイク判断アドレスレジスタＢＲＥＧおよびループカウンタＣＮＴを有している。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、パイプラインＰＬ１−４に共通のブロックである。レジスタ部ＲＥＧ、パイプラインＰＬ１−４、アドレスレジスタＡＲＥＧおよびメモリ制御部ＭＣＮＴは、図１１と同じ機能を有している。
【０１９３】
アドレスレジスタＡＲＥＧは、フェッチ部ＦＴＣおよびデコード部ＤＥＣに接続されている。説明の便宜上、ここでは、アドレスレジスタＡＲＥＧに保持されているアドレスをループ終了アドレスと称する。つまり、ループ終了アドレスは、ループ処理される命令群の次の命令、すなわちループ処理から抜けた後、最初に実行される命令が格納されている命令メモリＩＭＥＭのアドレスである。
【０１９４】
ループ開始アドレスレジスタＬＳＲＥＧは、フェッチ部ＦＴＣおよびデコード部ＤＥＣに接続されている。ループ開始アドレスレジスタＬＳＲＥＧは、後述するブレイク付きループ命令（ｄｏｂ命令とする、ｄｏｂ：ｄｏ  ｂｒｅａｋ）を実行する際のループ開始アドレスを保持している。ループ開始アドレスは、ｄｏｂ命令によってループ処理される命令群の先頭の命令が格納されている命令メモリＩＭＥＭのアドレスである。
【０１９５】
ループフラグレジスタＬＦＲＥＧは、フェッチ部ＦＴＣ、デコード部ＤＥＣおよび各パイプラインＰＬ１−４の演算部ＥＸに接続されている。ループフラグレジスタＬＦＲＥＧには、ｄｏｂ命令を実行する際に、ループ処理中であることを示すフラグが設定される。ループフラグレジスタＬＦＲＥＧにフラグが設定されていればループ処理中であり、設定されていなければループ処理中でない。
【０１９６】
ブレイク判断アドレスレジスタＢＲＥＧは、フェッチ部ＦＴＣ、デコード部ＤＥＣおよび各パイプラインＰＬ１−４の演算部ＥＸに接続されている。ブレイク判断アドレスレジスタＢＲＥＧは、ｄｏｂ命令を実行する際のブレイク判断アドレスを保持している。ブレイク判断アドレスは、ループ処理中に演算部ＥＸがブレイクを発生させるか否かを判断する際の判断基準として演算部ＥＸによって用いられるアドレスである。
【０１９７】
ループカウンタＣＮＴは、フェッチ部ＦＴＣおよびデコード部ＤＥＣに接続されている。ループカウンタＣＮＴは、ｄｏｂ命令を実行する際に、ループ処理の繰り返し回数、すなわちループ回数をカウントする。特に限定しないが、ここでは、ループ処理の開始時にループカウンタＣＮＴに最大のループ回数が設定され、ループ処理が１回実行されるごとにループカウンタＣＮＴの値がデクリメントされていくとする。
【０１９８】
フェッチ部ＦＴＣは、命令メモリＩＭＥＭから命令ＩＮＳを４つずつ取得し、取得した命令ＩＮＳを４つずつデコード部ＤＥＣに出力することを除き、図２に示したフェッチ部ＦＴＣと同じ機能を有している。例えば、１つの命令ＩＮＳは、３２ビットで記述される。また、フェッチ部ＦＴＣは、ｄｏｂ命令の実行中にアドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧ、ブレイク判断アドレスレジスタＢＲＥＧおよびループカウンタＣＮＴを参照し、更新しまたはクリアにする。
【０１９９】
デコード部ＤＥＣは、フェッチ部ＦＴＣから転送される４つの命令ＩＮＳを同時に解析し、解析結果に応じて、命令ＩＮＳを実行するために必要なレジスタにアクセスし、各パイプラインＰＬ１−４の演算部ＥＸに実行させる動作を指定することを除き、図２に示したデコード部ＤＥＣと同じ機能を有している。また、デコード部ＤＥＣは、ｄｏｂ命令を解読し、アドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧ、ブレイク判断アドレスレジスタＢＲＥＧおよびループカウンタＣＮＴを設定する。デコード部ＤＥＣは、ｄｏｂ命令の実行中にループフラグレジスタＬＦＲＥＧを参照する。
【０２００】
なお、図１４に示したプロセッサＰＲＯＣと同様に、デコード部ＤＥＣは、命令ＩＮＳのオペランド同士の競合を判断する機能、および、競合が発生しないようにパイプラインＰＬ１−４に命令ＩＮＳを割り当てる機能を持たなくてもよい。
【０２０１】
パイプラインＰＬ１−４の構成は、図１１に示したパイプラインＰＬ１−４と同じである。パイプラインＰＬ１−４と、フェッチ部ＦＴＣ、デコード部ＤＥＣ、レジスタ部ＲＥＧおよびメモリ制御部ＭＣＮＴとの接続関係は、図１１と同じである。
【０２０２】
演算部ＥＸは、ｄｏｂ命令の実行中にループフラグレジスタＬＦＲＥＧおよびブレイク判断アドレスレジスタＢＲＥＧを参照する。演算部ＥＸは、ループフラグレジスタＬＦＲＥＧにフラグが設定されており、かつブレイク判断アドレスレジスタＢＲＥＧに格納されているアドレスに現在の命令のアドレスが一致すると、ブレイクを発生させるか否かを判断する。演算部ＥＸは、ブレイクを発生させるか否かの判断にあたり、ブレイクを発生させる条件が満たされると、ブレイクを発生させる。
【０２０３】
図３１は、ブレイク付きループ命令のコンパイルの例を示している。ここでは、２つのデータを１００回取得して累積加算した結果を出力するプログラムを例にして説明する。２つのデータはいずれも符号付きであり、累積加算の途中で総和が負になった場合には、ただちに演算を終了するプログラムであるとする。
【０２０４】
ブレイク付きループ命令（ｄｏｂ命令）は、ブロックリピート命令を基本とし、引数として、ループ回数、ｄｏｂ命令のアドレスに対する相対的なループ終了アドレス、およびｄｏｂ命令のアドレスに対する相対的なブレイク判断アドレスを有する。図３１に示した、プロセッサにより実行可能な命令の例では、演算部ＥＸは、１１行目の命令［ａｄｄ  ｒ０，ｒ０，ｒ１］によってブレイクを発生させるか否かを判断する。
【０２０５】
ブレイクを発生させる条件が満たされた場合、ここでの例では累積加算結果が負になった場合に、演算部ＥＸはブレイクを発生させる。それによって、プロセッサＰＲＯＣの処理は、ｄｏｂ命令によるループ処理から抜け、ｄｏｂ命令の次の命令に移る。
【０２０６】
上述したように、ｄｏｂ命令においてループ処理の開始から、ループ処理から抜けるまでのサイクル数は、ブレイクを発生させる条件がいつ満たされるかによって動的に変化する。従って、ｄｏｂ命令をサイクル可変命令の一つと見なすことができる。
【０２０７】
ｄｏｂ命令では、ループ処理の最後尾から先頭へ戻る際にオーバーヘッドが発生しない。また、ｄｏｂ命令では、ブレイク判断アドレスによってブレイクの発生箇所が指定されていることによって、ループ処理内に分岐命令を設けずに済む。従って、ループ処理の回数にかかわらず、ループ処理から抜けるときに１回、オーバーヘッド（ＮＯＰ命令）が発生する。分岐命令には、分岐命令と同時に他の命令を並列に実行することができないという制約がある。ｄｏｂ命令は、この制約を受けない。従って、ｄｏｂ命令を用いることによって、プロセッサＰＲＯＣは、効率的に並列処理を実行することができる。
【０２０８】
図３２は、ブレイク付きループ命令を用いずにループ処理から抜ける命令のコンパイルの例を示している。上述したｄｏｂ命令と同様、２つの符号付きデータを１００回取得して累積加算する途中で総和が負になった場合に演算を終了するプログラムであるとする。
【０２０９】
図３２に示した、プロセッサにより実行可能な命令の例では、演算部ＥＸは、１２行目の命令［ｂｒａｎｃｈ  ｚ  ｌａｂｅｌ＿ｌｏｏｐ１＿ｅｎｄ］によってループ処理から抜けるか否かを判断する。ループ処理から抜ける条件が満たされた場合、ここでの例では累積加算結果が負になった場合に、プロセッサＰＲＯＣの処理は、ループ処理から抜ける。ループ処理から抜けない場合、プロセッサＰＲＯＣの処理は、１５行目の命令［ｂｒａｎｃｈ  ｚ  ｌａｂｅｌ＿ｌｏｏｐ１］によってループ処理の先頭に戻り、ループ処理を繰り返す。
【０２１０】
図３２に示したループ処理では、ループ処理中に分岐命令が２つ設けられているので、ループ処理を繰り返すごとに２回ずつオーバーヘッド（ＮＯＰ命令）が発生する。従って、演算部ＥＸは、ループ処理の繰り返し回数が増えるほど多くの不要な命令を実行することになるため、プロセッサＰＲＯＣの演算処理の性能が低下してしまう。また、プロセッサＰＲＯＣは、分岐命令と同時に他の命令を並列に実行することができないため、並列処理の効率が低下してしまう。
【０２１１】
図３３は、図３０に示したプロセッサＰＲＯＣの動作の例を示している。図８、図１２、図１５および図１９と同じ動作については、詳細な説明は省略する。例えば、デコード部ＤＥＣからパイプラインＰＬ１−４への命令実行の指示、およびパイプラインＰＬ１−４の動作は、図１５と同じである。命令メモリＩＭＥＭの太枠は、ｄｏｂ命令によってループ処理される命令群であることを示している。演算部ＥＸは、アドレス４０に格納されている命令の実行結果に基づいてブレイクを発生させるか否かを判断するとする。
【０２１２】
命令メモリＩＭＥＭにおいて、アドレス００にｄｏｂ命令が配置されている。デコード部ＤＥＣは、ｄｏｂ命令を解読することによってループ開始アドレス、ループ終了アドレス、ループ回数およびブレイク判断アドレスを取得する。デコード部ＤＥＣは、ループ開始アドレスレジスタＬＳＲＥＧ、アドレスレジスタＡＲＥＧ、ループカウンタＣＮＴおよびブレイク判断アドレスレジスタＢＲＥＧに、それぞれループ開始アドレス、ループ終了アドレス、ループ回数およびブレイク判断アドレスを設定する。
【０２１３】
フェッチ部ＦＴＣは、ループフラグレジスタＬＦＲＥＧにフラグが設定されている間、フェッチした命令のアドレスを、アドレスレジスタＡＲＥＧに格納されているループ終了アドレス６０と比較する。フェッチした命令のアドレスが５０である場合、ループ終了アドレス６０との差が１０、すなわちフェッチ１回分となる。従って、フェッチ部ＦＴＣは、現在フェッチした命令がループ処理の最後尾の命令であると判断する。
【０２１４】
そして、フェッチ部ＦＴＣは、ループ開始アドレスレジスタＬＳＲＥＧからループ開始アドレスを取得し、ループ開始アドレスに基づいて命令メモリＩＭＥＭから命令をフェッチする。つまり、ループ処理の先頭に戻る。このとき、ループ処理の先頭に戻ることによるオーバーヘッドは発生しない。そして、フェッチ部ＦＴＣは、ループカウンタＣＮＴの値を一つ減らす。
【０２１５】
図３３に示した例では、例えばパイプラインＰＬ１において２回目のループ処理の途中（「検出」と記したアドレス４０の箇所）でブレイクが発生している。ブレイクが発生すると、ブレイクを発生させた演算部ＥＸは、終了信号ＥＮＤによりフェッチ部ＦＴＣおよびデコード部ＤＥＣにブレイクが発生したことを通知する。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、演算部ＥＸからのブレイク発生の通知を受けて現在の命令を破棄する。
【０２１６】
そして、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧからループ終了アドレスを取得し、ループ終了アドレスに基づいて命令メモリＩＭＥＭから次の命令をフェッチする。つまり、ループ処理から抜ける。また、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧ、ブレイク判断アドレスレジスタＢＲＥＧおよびループカウンタＣＮＴをクリアにする。
【０２１７】
デコード部ＤＥＣは、次の命令をＮＯＰ命令に変更する。そして、デコード部ＤＥＣは、ループ終了アドレスに基づいてフェッチ部ＦＴＣがフェッチした命令から解読を再開し、解読した命令を演算部ＥＸへ渡す。このように、ｄｏｂ命令によってループ処理を行うと、ループ処理から抜ける際に、２段分のＮＯＰ命令によるオーバーヘッドが１回発生する。
【０２１８】
図３４は、図３０に示したプロセッサがアドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧおよびブレイク判断アドレスレジスタＢＲＥＧを持たないときの動作の例を示している。命令メモリＩＭＥＭの太枠は、ループ処理される命令群であることを示している。演算部ＥＸは、アドレス３０に格納されている命令の実行結果に基づいて、アドレス４０の分岐命令でループ処理を抜けるか否かを判断し、アドレス６０の分岐命令でループ処理の先頭に戻るとする。
【０２１９】
図３４に示した例では、例えばパイプラインＰＬ１において１回目のループ処理の終わり（「分岐判定」と記したアドレス６０の箇所）で、演算部ＥＸは、フェッチ部ＦＴＣおよびデコード部ＤＥＣへ、ループ処理の先頭に戻るように指示する。その後、フェッチ部ＦＴＣがループ処理の先頭のアドレスに基づいてフェッチした命令が演算部ＥＸにくるまで、演算部ＥＸは、二段分のＮＯＰ命令を実行する。
【０２２０】
そして、例えばパイプラインＰＬ１において２回目のループ処理の途中（「分岐判定」と記したアドレス４０の箇所）で、演算部ＥＸは、２回目のループ処理の途中（アドレス３０の箇所）で実行した命令の結果がループ処理を抜ける条件を満たすと判断したとする。この場合、演算部ＥＸは、フェッチ部ＦＴＣおよびデコード部ＤＥＣへ分岐を指示する。フェッチ部ＦＴＣおよびデコード部ＤＥＣは、演算部ＥＸから分岐の指示を受け取ると、保持していた命令を破棄する。
【０２２１】
そして、フェッチ部ＦＴＣは、ループ処理の次の命令をフェッチする。演算部ＥＸは、ループ処理を抜けた後にフェッチ部ＦＴＣがフェッチした命令がデコード部ＤＥＣで解読されて演算部ＥＸにくるまで、二段分のＮＯＰ命令を実行する。従って、アドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧおよびブレイク判断アドレスレジスタＢＲＥＧを持たないプロセッサでループ処理を行うと、ループ処理の先頭に戻るときと、ループ処理から抜けるか否かを判断するときの計２回、それぞれ２段分のＮＯＰ命令によるオーバーヘッドが発生する。
【０２２２】
図３５は、図３０に示したフェッチ部ＦＴＣの動作の例を示している。フェッチ部ＦＴＣは、ループフラグレジスタＬＦＲＥＧにフラグが設定されていない場合（ステップＳ８１：Ｎｏ）、通常の動作、すなわち命令メモリＩＭＥＭから、プログラムカウンタが示すアドレスに対応する命令をフェッチする（ステップＳ８２）。そして、ステップＳ８１へ戻る。
【０２２３】
ループフラグレジスタＬＦＲＥＧにフラグが設定されている場合において（ステップＳ８１：Ｙｅｓ）、演算部ＥＸからブレイクの発生が通知されなければ（ステップＳ８３：Ｎｏ）、フェッチ部ＦＴＣは、フェッチした命令のアドレスがループ処理の最後尾の命令のアドレスであるか否かを判断する（ステップＳ８４）。フェッチ部ＦＴＣがフェッチした命令のアドレスと、アドレスレジスタＡＲＥＧに格納されているループ終了アドレスとの差がフェッチ１回分である場合、フェッチされた命令のアドレスは、ループ処理の最後尾の命令のアドレスである。
【０２２４】
アドレスの差がフェッチ１回分でない場合には、フェッチされた命令のアドレスは、ループ処理の最後尾の命令のアドレスではない。ループ処理の最後尾の命令のアドレスでない場合（ステップＳ８４：Ｎｏ）、フェッチ部ＦＴＣは、命令メモリＩＭＥＭから、次のアドレスに対応する命令をフェッチする（ステップＳ８９）。そして、ステップＳ８１へ戻る。
【０２２５】
一方、ループ処理の最後尾の命令のアドレスである場合（ステップＳ８４：Ｙｅｓ）、フェッチ部ＦＴＣは、ループ開始アドレスレジスタＬＳＲＥＧからループ開始アドレスを取得する。そして、フェッチ部ＦＴＣは、命令メモリＩＭＥＭから、ループ開始アドレスに対応する命令をフェッチする（ステップＳ８５）。また、フェッチ部ＦＴＣは、ループ用レジスタのうちループカウンタＣＮＴをデクリメントして更新する（ステップＳ８６）。
【０２２６】
ループカウンタＣＮＴを更新した結果、ループカウンタＣＮＴの値が０となり、ループ処理の最終回であった場合（ステップＳ８７：Ｙｅｓ）、フェッチ部ＦＴＣは、ループフラグレジスタＬＦＲＥＧに設定されているフラグをクリアにする（ステップＳ８８）。そして、ステップＳ８１へ戻る。ループ処理の最終回でなかった場合には（ステップＳ８７：Ｎｏ）、そのままステップＳ８１へ戻る。
【０２２７】
ブレイクの発生が通知されると（ステップＳ８３：Ｙｅｓ）、フェッチ部ＦＴＣは、アドレスレジスタＡＲＥＧからループ終了アドレスを取得する。そして、フェッチ部ＦＴＣは、命令メモリＩＭＥＭから、ループ終了アドレスに対応する命令をフェッチする（ステップＳ９０）。また、フェッチ部ＦＴＣは、ループ用レジスタ、すなわちアドレスレジスタＡＲＥＧ、ループ開始アドレスレジスタＬＳＲＥＧ、ループフラグレジスタＬＦＲＥＧ、ブレイク判断アドレスレジスタＢＲＥＧおよびループカウンタＣＮＴをクリアにする（ステップＳ９１）。そして、ステップＳ８１へ戻る。フェッチ部ＦＴＣは、上述したステップＳ８１〜ステップＳ９１を繰り返す。
【０２２８】
図３６は、図３０に示したデコード部ＤＥＣの動作の例を示している。デコード部ＤＥＣは、解読した命令がｄｏｂ命令でない場合において（ステップＳ１０１：Ｎｏ）、ループフラグレジスタＬＦＲＥＧにフラグが設定されていない場合（ステップＳ１０２：Ｎｏ）、通常の動作、すなわち解読した命令を演算部ＥＸへ渡す（ステップＳ１０３）。そして、ステップＳ１０１へ戻る。
【０２２９】
デコード部ＤＥＣは、ｄｏｂ命令を解読した場合（ステップＳ１０１：Ｙｅｓ）、ループ用レジスタの対応するレジスタまたはカウンタにループ回数、フラグ、ループ開始アドレス、ループ終了アドレスおよびブレイク判断アドレスを設定する（ステップＳ１０４）。ループフラグレジスタＬＦＲＥＧにフラグが設定されているときに（ステップＳ１０２：Ｙｅｓ）、演算部ＥＸからブレイクの発生が通知されなければ（ステップＳ１０５：Ｎｏ）、デコード部ＤＥＣは、通常の動作を行い、解読した命令を演算部ＥＸへ渡す（ステップＳ１０３）。そして、ステップＳ１０１へ戻る。
【０２３０】
ループフラグレジスタＬＦＲＥＧにフラグが設定されているときに（ステップＳ１０２：Ｙｅｓ）、ブレイクの発生が通知されると（ステップＳ１０５：Ｙｅｓ）、デコード部ＤＥＣは、現在の命令をＮＯＰ命令に変更する（ステップＳ１０６）。そして、ステップＳ１０１へ戻る。デコード部ＤＥＣは、上述したステップＳ１０１〜ステップＳ１０６を繰り返す。
【０２３１】
図３７は、図３０に示した演算部ＥＸの動作の例を示している。演算部ＥＸは、デコード部ＤＥＣから渡された命令に基づいて演算を実行する（ステップＳ１１１）。そして、ループフラグレジスタＬＦＲＥＧにフラグが設定されていない場合（ステップＳ１１２：Ｎｏ）、ステップＳ１１１へ戻る。
【０２３２】
ループフラグレジスタＬＦＲＥＧにフラグが設定されている場合（ステップＳ１１２：Ｙｅｓ）、演算部ＥＸは、現在の命令のアドレスが、ブレイク判断アドレスレジスタＢＲＥＧに格納されているブレイク判断アドレスに一致するか否かを判断する。また、演算部ＥＸは、ブレイク発生の条件を満たしているか否かを判断する（ステップＳ１１３）。
【０２３３】
現在の命令のアドレスがブレイク判断アドレスに一致しないか、またはブレイク発生の条件を満たしていない場合（ステップＳ１１３：Ｎｏ）、ステップＳ１１１へ戻る。現在の命令のアドレスがブレイク判断アドレスに一致しており、かつブレイク発生の条件を満たしている場合（ステップＳ１１３：Ｙｅｓ）、演算部ＥＸは、終了信号ＥＮＤによりフェッチ部ＦＴＣおよびデコード部ＤＥＣへブレイクの発生を通知する（ステップＳ１１４）。そして、ステップＳ１１１へ戻る。フェッチ部ＦＴＣは、上述したステップＳ１１１〜ステップＳ１１４を繰り返す。
【０２３４】
以上、この実施形態では、プロセッサＰＲＯＣが例えばループ命令などの制御命令を実行する際に、ＮＯＰ命令の実行回数を減らすことができる。これにより、不要な命令が実行されないため、命令の実行効率を向上させることができる。この結果、プロセッサＰＲＯＣの演算処理の性能を向上させることができる。
【０２３５】
ところで、メモリへのアクセスに時間がかかることによって命令の実行サイクル数が動的に変化することがある。この対策として、命令の発行を停止するストールという手段を用いることができる。しかし、ストールによって命令の発行を停止する場合には、命令全体の発行が停止されてしまうため、命令の実行効率が低下してしまう。上述した各実施の形態によれば、サイクル可変命令の実行時に他の命令を発行して並列に処理することができる。従って、命令の実行効率が向上する。また、命令をより効率的に配置することができる。
【０２３６】
なお、上述した実施の形態では、サイクル可変命令の一例として、例えばインダイレクトロード命令、インダイレクトストア命令、ストライドロード命令、ストライドストア命令、検索命令およびブレイク付きループ命令を挙げたが、サイクル可変命令はこれらの命令に限らない。例えば、符号なし飽和付総和命令、除算命令、符号なしで、配列の先頭から掛け算を行う命令、最大値検出命令または最小値検出命令、あるいはこれらの命令と同様の命令を実行する場合にも、上述した実施例と同様の効果が得られる。
【０２３７】
符号なし飽和付総和命令は、飽和した時点で終了となる。除算命令は、割られる数から割る数を引き、割る数の方が大きくなった時点で終了し、配列（ベクトル）の何番目かを指すＩＮＤＥＸを返す。符号なしで、配列の先頭から掛け算を行う命令は、飽和した時点で終了する。最大値検出命令は、最大値が飽和して検出された時点で終了し、ＩＮＤＥＸを返す。最小値検出命令は、最小値が飽和して検出された時点で終了し、ＩＮＤＥＸを返す。また、符号なしで、ある特定の値に対し、配列の先頭から引き算を行い、特定の値（例えば０）以下になったら終了してＩＮＤＥＸを返す、というような除算命令を拡張した命令を実行する場合にも、上述した実施例と同様の効果が得られる。
【０２３８】
上述した図２、図１１、図１４、図１７または図３０に示したプロセッサを用いた装置の一例として、例えばソフトウェア無線に対応した携帯端末が挙げられる。携帯端末の一例として、例えば無線通信機能を備えた携帯電話機またはスマートフォンが挙げられる。
【０２３９】
図３８は、上述したプロセッサが搭載される携帯端末の例を示している。携帯端末１は、タッチパネルを備えた表示パネル２および操作ボタン３、スピーカ４、および図には現れていないマイクを備えている。携帯端末１は、例えば無線通信を行う機能を備えていてもよい。
【０２４０】
図３９は、図３８に示した携帯端末１のベースバンド処理部のハードウェア構成を示している。携帯端末１のベースバンド処理部１１は、ＲＦ部１２、専用回路部１３、複数のデータ処理モジュール１４を備えている。ＲＦ部１２、専用回路部１３およびデータ処理モジュール１４は、バス１５に接続されている。
【０２４１】
ＲＦ部１２は、高周波信号の処理を行う。専用回路部１３は、例えばターボ符号などの符号化処理やビタビ復号などの復号処理、またはＭＩＭＯ（Ｍｕｌｔｉｐｌｅ  Ｉｎｐｕｔ  Ｍｕｌｔｉｐｌｅ  Ｏｕｔｐｕｔ）通信を行う際の信号の分割処理や合成処理を行う。専用回路部１３は、パラメータによって設定を変更することができるハードウェアであってもよい。
【０２４２】
データ処理モジュール１４は、例えば送信信号の変調処理や受信信号の復調処理などのベースバンド信号の処理を行う。データ処理モジュール１４は、例えばプロセッサ、プログラムメモリ、データメモリおよび周辺回路を有していてもよい。データ処理モジュール１４のプロセッサ、プログラムメモリ、データメモリおよび周辺回路は、単一のＬＳＩチップとして設計されてもよい。
【０２４３】
また、単一のＬＳＩチップに複数のデータ処理モジュール１４が実装されるように設計されてもよい。さらに、複数のデータ処理モジュール１４と専用回路部１３とが同一のＬＳＩチップに実装されるように設計されてもよい。
【０２４４】
データ処理モジュール１４において、プロセッサは、図２、図１１、図１４、図１７または図３０に示したプロセッサＰＲＯＣであってもよい。プログラムメモリは、図２、図１１、図１４、図１７または図３０に示した命令メモリＩＭＥＭであってもよい。データメモリは、図２、図１１、図１４、図１７または図３０に示したデータメモリＤＭＥＭ０−３であってもよい。周辺回路は、図２に示した周辺回路ＰＥＲＩであってもよい。
【０２４５】
図４０は、図３８に示した携帯端末の動作の例を示している。一例として、例えば携帯端末１は、Ｗ−ＣＤＭＡ（Ｗｉｄｅｂａｎｄ  Ｃｏｄｅ  Ｄｉｖｉｓｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ａｃｃｅｓｓ）方式およびＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）方式に対応しているとする。例えば携帯端末１が、Ｗ−ＣＤＭＡの基地局２１との間で無線通信が可能な領域２２から、ＬＴＥの基地局２３との間で無線通信が可能な領域２４へ移動したとする。
【０２４６】
この移動によって、Ｗ−ＣＤＭＡ方式の電波が弱くなり、ＬＴＥ方式の電波が強くなった場合、携帯端末１は、電波の強弱を検知して無線通信用のファームウェアをＷ−ＣＤＭＡ方式からＬＴＥ方式に切り替えて、ＬＴＥの基地局２３との間で無線通信を行う。携帯端末１が、ＬＴＥの基地局２３との間で無線通信が可能な領域２４から、Ｗ−ＣＤＭＡの基地局２１との間で無線通信が可能な領域２２へ移動した場合は、無線通信用のファームウェアは、ＬＴＥ方式からＷ−ＣＤＭＡ方式に切り替えられる。
【０２４７】
なお、無線通信方式は、Ｗ−ＣＤＭＡ方式やＬＴＥ方式に限らない。例えば、ＣＤＭＡ２０００方式やＷｉＭＡＸ（Ｗｏｒｌｄ  Ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｆｏｒ  Ｍｉｃｒｏｗａｖｅ  Ａｃｃｅｓｓ）方式やＷｉ−Ｆｉ（Ｗｉｒｅｌｅｓｓ  Ｆｉｄｅｌｉｔｙ）方式などの無線通信方式であってもよい。
【０２４８】
図４１は、図３８に示した携帯端末の無線方式の切り替え動作の例を示している。携帯端末１は、対応している通信方式を変えながら基地局を検索する（ステップＳ１２１）。例えば携帯端末１は、Ｗ−ＣＤＭＡ方式によって基地局を検索し、ＬＴＥ方式によって基地局を検索する。そして、携帯端末１は、検索した基地局の中から、最も感度のよい基地局、すなわち最も電波の強い基地局を検索する（ステップＳ１２２）。
【０２４９】
最も感度のよい基地局が、携帯端末１の現在の通信相手に設定されている基地局と異なる場合（ステップＳ１２３：Ｙｅｓ）、携帯端末１は、最も感度のよい基地局の通信方式が、現在、携帯端末１に設定されている通信方式と異なるか否かを判断する（ステップＳ１２４）。通信方式が異なる場合（ステップＳ１２４：Ｙｅｓ）、携帯端末１は、通信方式を、最も感度のよい基地局の通信方式に変更する（ステップＳ１２５）。そしてステップＳ１２１へ戻る。
【０２５０】
最も感度のよい基地局の通信方式が、現在、携帯端末１に設定されている通信方式と同じである場合（ステップＳ１２４：Ｎｏ）、携帯端末１は、通信方式を変更せずに、通常の通信動作を行う（ステップＳ１２６）。通常の通信動作では、携帯端末１は、通信相手を、現在、携帯端末１に設定されている通信方式と同じ通信方式の最も感度のよい基地局に変更する（ステップＳ１２６）。そしてステップＳ１２１へ戻る。
【０２５１】
一方、最も感度のよい基地局が、携帯端末１の現在の通信相手に設定されている基地局と同じである場合（ステップＳ１２３：Ｎｏ）、携帯端末１は、通常の通信動作を行う（ステップＳ１２６）。通常の通信動作では、携帯端末１は、通信相手を、現在、携帯端末１の通信相手に設定されている基地局とする（ステップＳ１２６）。そしてステップＳ１２１へ戻る。携帯端末１は、上述したステップＳ１２１〜ステップＳ１２６を繰り返す。
【０２５２】
なお、ステップＳ１２４において、携帯端末１は、伝送レートを考慮して通信方式を変更するか否かを判断するようにしてもよい。例えば、通信方式を変更することによって伝送レートが上がるのであれば（ステップＳ１２４：Ｙｅｓ）、携帯端末１は、通信方式を変更し（ステップＳ１２５）、伝送レートが上がらないのであれば（ステップＳ１２４：Ｎｏ）、携帯端末１は、通信方式を変更しないで通常動作を行う（ステップＳ１２６）、というようにしてもよい。
【０２５３】
以上の実施形態において説明した発明を整理して、付記として開示する。
【０２５４】
（付記１）実行サイクル数が動的に変化する第１の命令を実行するために、最大の実行サイクル数に対応する数の複数の第１の命令である命令群が格納されている命令メモリから前記第１の命令をフェッチするフェッチ部と、
前記命令群の次の命令が格納されている前記命令メモリのアドレスが保持されるアドレスレジスタと、
前記フェッチ部によりフェッチされた命令を解読するデコード部と、
前記デコード部により解読された命令を受けて演算を実行し、前記第１の命令の実行に必要な演算の完了を判断したときに終了信号を出力する演算部と
を備え、
前記フェッチ部は、前記終了信号に応答して前記アドレスレジスタ内のアドレスを用いて前記次の命令を前記命令メモリからフェッチすること
を特徴とするプロセッサ。
【０２５５】
（付記２）前記デコード部は、解読した命令が前記第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むために出力し、
前記アドレスレジスタは、前記デコード部によりアドレスが書き込まれてから前記終了信号が出力されるまで、新たなアドレスの書き込みが禁止されること
を特徴とする付記１に記載のプロセッサ。
【０２５６】
（付記３）前記デコード部は、解読した命令が前記命令群の先頭の第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むこと
を特徴とする付記１に記載のプロセッサ。
【０２５７】
（付記４）前記命令メモリと前記フェッチ部との間に、前記命令メモリからの命令をプリフェッチするプリフェッチ部を備え、
前記フェッチ部は、前記プリフェッチ部を介して前記命令メモリに保持されている命令をフェッチし、前記終了信号が出力されたときに前記プリフェッチ部を介することなく前記命令メモリに直接アクセスし、前記次の命令を前記命令メモリからフェッチすること
を特徴とする付記１ないし付記３のいずれか１項に記載のプロセッサ。
【０２５８】
（付記５）前記デコード部は、前記終了信号が出力された後、前記フェッチ部から前記次の命令を受けるまで、演算の実行を停止する命令を前記演算部に出力すること
を特徴とする付記１ないし付記４のいずれか１項に記載のプロセッサ。
【０２５９】
（付記６）前記演算部と、前記演算部による演算の結果をメモリまたはレジスタに書き込む書き込み部とを各々有し、並列に動作する複数のパイプラインを備え、
前記第１の命令の演算は、前記パイプラインのいずれかの前記演算部で実行されること
を特徴とする付記１ないし付記５のいずれか１項に記載のプロセッサ。
【０２６０】
（付記７）前記次の命令を保持する命令レジスタを備え、
前記フェッチ部は、前記命令メモリからコード長が圧縮された命令をフェッチし、
前記デコード部は、前記フェッチ部から受ける圧縮された命令を解凍し、解凍した命令を解読して前記パイプラインに出力し、前記パイプラインに出力しきれない解読した命令が残っているとき、前記フェッチ部に停止信号を出力し、前記終了信号を受けたときに前記命令レジスタ内の前記次の命令を解読し、
前記フェッチ部は、前記停止信号を受けているときに、前記アドレスレジスタ内のアドレスを用いて前記命令メモリにアクセスし、前記次の命令を前記命令メモリからフェッチし、フェッチした前記次の命令を前記命令レジスタに格納し、前記終了信号に応答して前記次の命令をフェッチする代わりに、前記アドレスレジスタ内のアドレスの１つ先のアドレスを用いて命令をフェッチすること
を特徴とする付記６に記載のプロセッサ。
【０２６１】
（付記８）付記１ないし付記７のいずれか１項に記載のプロセッサと、
前記プロセッサが演算するデータを生成するデータ生成部と、
前記プロセッサにより演算されたデータを用いてデータ処理を実行するデータ処理部と
を備えていることを特徴とするシステム。
【０２６２】
（付記９）実行サイクル数が動的に変化する第１の命令を実行するために、最大の実行サイクル数に対応する数の複数の第１の命令である命令群が格納されている命令メモリから前記第１の命令をフェッチし、
フェッチされた命令を解読し、
解読された命令を受けて演算を実行し、前記第１の命令の実行に必要な演算の完了を判断したときに終了信号を出力し、
前記終了信号に応答して、前記命令群の次の命令が格納されている前記命令メモリのアドレスをアドレスレジスタから読み出し、読み出したアドレスを用いて前記次の命令を前記命令メモリからフェッチすること
を特徴とするプロセッサの動作方法。
【０２６３】
（付記１０）解読した命令が前記第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むために出力し、
アドレスが書き込まれてから前記終了信号が出力されるまで、前記アドレスレジスタへの新たなアドレスの書き込みを禁止すること
を特徴とする付記９に記載のプロセッサの動作方法。
【０２６４】
（付記１１）解読した命令が前記命令群の先頭の第１の命令のときに、前記次の命令が格納されているアドレスを求め、求めたアドレスを前記アドレスレジスタに書き込むこと
を特徴とする付記９に記載のプロセッサの動作方法。
【０２６５】
（付記１２）前記命令メモリからの命令をプリフェッチするプリフェッチ部を介して命令をフェッチし、
前記終了信号が出力されたときに、前記プリフェッチ部を介することなく前記命令メモリに直接アクセスし、前記次の命令を前記命令メモリからフェッチすること
を特徴とする付記９ないし付記１１のいずれか１項に記載のプロセッサの動作方法。
【０２６６】
（付記１３）前記終了信号を出力した後、前記次の命令を解読するまで、演算の実行を停止すること
を特徴とする付記９ないし付記１２のいずれか１項に記載のプロセッサの動作方法。
【０２６７】
（付記１４）解読された命令の演算の実行と、演算の実行結果のメモリまたはレジスタへの書き込みとを、複数のパイプラインを用いて並列に処理し、
前記第１の命令の演算は、前記パイプラインのいずれかにより実行されること
を特徴とする付記９ないし付記１３のいずれか１項に記載のプロセッサの動作方法。
【０２６８】
（付記１５）前記命令メモリからコード長が圧縮された命令をフェッチし、
フェッチした命令を解凍し、
解凍した命令を解読して前記パイプラインに出力し、
前記パイプラインに出力しきれない解読した命令が残っているとき、前記次の命令を前記命令メモリからフェッチし、フェッチした前記次の命令を命令レジスタに格納し、
前記終了信号を受けたときに、前記次の命令をフェッチする代わりに、前記アドレスレジスタ内のアドレスの１つ先のアドレスを用いて命令をフェッチし、
前記命令レジスタ内の前記次の命令を解読すること
を特徴とする付記１３に記載のプロセッサの動作方法。
【０２６９】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０２７０】
ＡＮＴ  アンテナ
ＡＲＥＧ  アドレスレジスタ
ＢＵＳ  バス
ＤＥＣ  デコード部
ＤＭＤ  復調器
ＤＭＥＭ０−３  データメモリ
ＤＰ  データ処理回路
ＥＴＭ  外部端子
ＥＸ  演算部
ＦＴＣ  フェッチ部
ＩＭＥＭ  命令メモリ
Ｉ／Ｏ  入出力部
ＩＲＥＧ  命令レジスタ
ＭＡ  メモリアクセス部
ＭＣＮＴ  メモリ制御部
ＭＤ  変調器
ＭＲ  マスクレジスタ
ＰＥＲＩ  周辺回路
ＰＬ、ＰＬ１−４  パイプライン
ＰＲＯＣ  プロセッサ
ＲＥＧ  レジスタ部
ＳＲ  スカラーレジスタ
ＳＹＳ  システム
ＶＲ  ベクトルレジスタ
ＷＢ  ライトバック部
【図１】
0005794172.tif 000002
【図２】
0005794172.tif 000003
【図３】
0005794172.tif 000004
【図４】
0005794172.tif 000005
【図５】
0005794172.tif 000006
【図６】
0005794172.tif 000007
【図７】
0005794172.tif 000008
【図８】
0005794172.tif 000009
【図９】
0005794172.tif 000010
【図１０】
0005794172.tif 000011
【図１１】
0005794172.tif 000012
【図１２】
0005794172.tif 000013
【図１３】
0005794172.tif 000014
【図１４】
0005794172.tif 000015
【図１５】
0005794172.tif 000016
【図１６】
0005794172.tif 000017
【図１７】
0005794172.tif 000018
【図１８】
0005794172.tif 000019
【図１９】
0005794172.tif 000020
【図２０】
0005794172.tif 000021
【図２１】
0005794172.tif 000022
【図２２】
0005794172.tif 000023
【図２３】
0005794172.tif 000024
【図２４】
0005794172.tif 000025
【図２５】
0005794172.tif 000026
【図２６】
0005794172.tif 000027
【図２７】
0005794172.tif 000028
【図２８】
0005794172.tif 000029
【図２９】
0005794172.tif 000030
【図３０】
0005794172.tif 000031
【図３１】
0005794172.tif 000032
【図３２】
0005794172.tif 000033
【図３３】
0005794172.tif 000034
【図３４】
0005794172.tif 000035
【図３５】
0005794172.tif 000036
【図３６】
0005794172.tif 000037
【図３７】
0005794172.tif 000038
【図３８】
0005794172.tif 000039
【図３９】
0005794172.tif 000040
【図４０】
0005794172.tif 000041
【図４１】
0005794172.tif 000042