(57)【特許請求の範囲】
【請求項１】
主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置であって、
前記主記憶装置に格納されている命令列のうち、前記中央処理装置に繰り返し供給される第１の命令列を前記中央処理装置に再度供給する前に、前記第１の命令列の先頭部分である第１の部分命令列を蓄積する第１のバッファと、
前記中央処理装置に繰り返し供給される第２の命令列を前記中央処理装置に再度供給する前に、前記第２の命令列の先頭部分である第３の部分命令列を蓄積する第３のバッファと、
前記第１の命令列を前記中央処理装置に繰り返し供給する際に、前記第１のバッファに蓄積されている前記第１の部分命令列を前記中央処理装置に供給しながら、前記第１の部分命令列に後続する第２の部分命令列を蓄積し、前記第２の命令列を前記中央処理装置に繰り返し供給する際に、前記第３のバッファに蓄積されている前記第３の部分命令列を前記中央処理装置に供給しながら、前記第３の部分命令列に後続する第４の部分命令列を蓄積する第２のバッファと、
前記第１の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第２の部分命令列から、前記第１の部分命令列の後続命令を前記中央処理装置に供給し、前記第３の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第４の部分命令列から、前記第３の部分命令列の後続命令を前記中央処理装置に供給する選択手段と
を備え、
前記第１の命令列の所在と、前記第１の部分命令列を前記第１のバッファに蓄積することが特定される情報が含まれる第１の命令が前記主記憶装置に格納されており、前記第１の命令を実行した前記中央処理装置から、前記第１の命令に含まれる情報に基づいた指示を受けて、前記第１の部分命令列を前記第１のバッファに蓄積し、前記第２の命令列の所在と、前記第３の部分命令列を前記第３のバッファに蓄積することが特定される情報が含まれる第２の命令が前記主記憶装置に格納されており、前記第２の命令を実行した前記中央処理装置から、前記第２の命令に含まれる情報に基づいた指示を受けて、前記第３の部分命令列を前記第３のバッファに蓄積する
ことを特徴とする命令供給装置。
【請求項２】
前記命令供給装置は、さらに、
前記主記憶装置に格納されている命令列を前記中央処理装置に供給する際に、
順次蓄積する第４のバッファを備え、
前記選択手段は、
前記中央処理装置に繰り返し供給する場合を除いて、前記第４のバッファに蓄積されている命令列を、順次、前記中央処理装置に供給する
ことを特徴とする請求項１に記載の命令供給装置。
【請求項３】
前記命令供給装置は、
前記第１の命令列および前記第２の命令列を前記中央処理装置に繰り返し供給する場合を除いて、前記主記憶装置に格納されている命令列を前記中央処理装置に供給する場合には、順次、前記第２のバッファに蓄積する
ことを特徴とする請求項１に記載の命令供給装置。
【請求項４】
主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置であって、
前記主記憶装置に格納されている命令列のうち、前記中央処理装置に繰り返し供給される第１の命令列を前記中央処理装置に再度供給する前に、前記第１の命令列の先頭部分である第１の部分命令列を蓄積する第１のバッファと、
前記第１の命令列を前記中央処理装置に繰り返し供給する際に、前記第１のバッファに蓄積されている前記第１の部分命令列を前記中央処理装置に供給しながら、前記第１の部分命令列に後続する第２の部分命令列を蓄積する第２のバッファと、
前記第１の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第２の部分命令列から、前記第１の部分命令列の後続命令を前記中央処理装置に供給する選択手段と
を備え、
前記第１の命令列を前記中央処理装置に繰り返し供給する場合を除いて、前記主記憶装置に格納されている命令列を前記中央処理装置に供給する場合には、順次、前記第２のバッファに蓄積し、
前記第２のバッファに蓄積されている第２の部分命令列を前記中央処理装置に供給している間は、前記第２の部分命令列を前記中央処理装置に供給することによって前記第２のバッファに生じた空き容量が所定の容量を超えるまでは、前記第２の部分命令列の後続命令を前記第２のバッファに蓄積しない
ことを特徴とする命令供給装置。
【請求項５】
前記命令供給装置は、さらに、
前記所定の容量を保持するレジスタを備え、
前記中央処理装置からの指示に応じて、前記所定の容量が設定されて前記レジスタに保持される
ことを特徴とする請求項４に記載の命令供給装置。
【請求項６】
第１のバッファと第２のバッファと第３のバッファとを備えて主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置を制御する命令供給制御方法であって、
前記主記憶装置に格納されている命令列のうち、前記中央処理装置に繰り返し供給される第１の命令列を前記中央処理装置に再度供給する前に、前記第１の命令列の先頭部分である第１の部分命令列を前記第１のバッファに蓄積し、
前記中央処理装置に繰り返し供給される第２の命令列を前記中央処理装置に再度供給する前に、前記第２の命令列の先頭部分である第３の部分命令列を前記第３のバッファに蓄積し、
前記第１の命令列を前記中央処理装置に繰り返し供給する際に、前記第１のバッファに蓄積されている前記第１の部分命令列を前記中央処理装置に供給しながら、前記第１の部分命令列に後続する第２の部分命令列を前記第２のバッファに蓄積し、
前記第１の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第２の部分命令列から、前記第１の部分命令列の後続命令を前記中央処理装置に供給し、
前記第２の命令列を前記中央処理装置に繰り返し供給する際に、前記第３のバッファに蓄積されている前記第３の部分命令列を前記中央処理装置に供給しながら、前記第３の部分命令列に後続する第４の部分命令列を前記第２のバッファに蓄積し、
前記第３の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第４の部分命令列から、前記第３の部分命令列の後続命令を前記中央処理装置に供給し、
前記第１の命令列の所在と、前記第１の部分命令列を前記第１のバッファに蓄積することが特定される情報が含まれる第１の命令が前記主記憶装置に格納されており、前記第１の命令を実行した前記中央処理装置から、前記第１の命令に含まれる情報に基づいた指示を受けて、前記第１の部分命令列を前記第１のバッファに蓄積し、
前記第２の命令列の所在と、前記第３の部分命令列を前記第３のバッファに蓄積することが特定される情報が含まれる第２の命令が前記主記憶装置に格納されており、前記第２の命令を実行した前記中央処理装置から、前記第２の命令に含まれる情報に基づいた指示を受けて、前記第３の部分命令列を前記第３のバッファに蓄積する
ことを特徴とする命令供給制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主記憶装置と中央処理装置との間に介在して主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置に関し、特に、ループにより命令を繰り返し供給する場合において、主記憶装置へのアクセスを省略しても命令を供給することができる命令供給装置に関する。
【背景技術】
【０００２】
従来、主記憶装置と中央処理装置との間に介在して主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置がある。
【０００３】
命令供給装置は、主記憶装置から読み出した命令を中央処理装置に効率的に供給するために、ループ用命令バッファと通常用命令バッファとを有する。そして、ループブロックの命令を供給する場合には、主記憶装置へのアクセスを省略して、ループ用命令バッファから中央処理装置に供給する（例えば、特許文献１参照。）。
【０００４】
「ループ用命令バッファ」とは、ループブロックを蓄積するバッファをいう。
【０００５】
「ループブロック」とは、ループにより繰り返し供給される命令列をいう。
【０００６】
「通常用命令バッファ」とは、通常ブロックを蓄積するバッファをいう。
【０００７】
「通常ブロック」とは、ループブロック以外の命令列をいう。
【特許文献１】特開昭６３―３１４６４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、前記従来の技術においては、ループブロックの命令をループ用命令バッファだけで供給するため、ループブロックが多数の命令で構成されている場合には、ループ用命令バッファの容量を予め大きめに確保しておく必要がある。結果、ループ用命令バッファの容量が大きければ、ハードウェア量も増大するという問題がある。さらに、複数のループに対応するために、複数のループ用命令バッファを有すれば、より顕著にハードウェア量が増大するという問題がある。
【０００９】
そこで、本発明は、前記問題に鑑みてなされたものであり、少ないハードウェア量でループを形成する命令列を効率的に供給する命令供給装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
前記目的を達成するために、本発明に係る命令供給装置は、（ａ）主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置であって、（ｂ）前記主記憶装置に格納されている命令列のうち、前記中央処理装置に繰り返し供給される第１の命令列を前記中央処理装置に再度供給する前に、前記第１の命令列の先頭部分である第１の部分命令列を蓄積する第１のバッファと、（ｃ）前記第１の命令列を前記中央処理装置に繰り返し供給する際に、前記第１のバッファに蓄積されている前記第１の部分命令列を前記中央処理装置に供給しながら、前記第１の部分命令列に後続する第２の部分命令列を蓄積する第２のバッファと、（ｄ）前記第１の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第２の部分命令列から、前記第１の部分命令列の後続命令を前記中央処理装置に供給する選択手段とを備え、前記第１の命令列の所在と、前記第１の部分命令列を前記第１のバッファに蓄積することが特定される情報が含まれる第１の命令が前記主記憶装置に格納されており、前記第１の命令を実行した前記中央処理装置から、前記第１の命令に含まれる情報に基づいた指示を受けて、前記第１の部分命令列を前記第１のバッファに蓄積することとする。
【００１１】
これによって、ループブロックの命令列を一つのバッファに蓄積する場合と比べて、二つ以上のバッファに分けて蓄積することができ、これ等のバッファが全て更新されない限り、更新されずにバッファに蓄積されている命令列を再利用することができる。そして、ループの後半部分をループ実行時にバックグラウンドでバッファに格納することによって、ループ全体を常時バッファに保持しなくても、ループ時には全てバッファに保持されている状態と同等となり、効率的な命令を供給することができる。
【００１２】
例えば、８語分の命令を二つのバッファに半分ずつ蓄積して、一つのバッファが更新されても、他のバッファが更新されていなければ、更新されずに他のバッファに蓄積している４語分の命令を再利用することができる。そして、８語分の命令を主記憶装置から再度読み出すことなく、更新された４語の命令を主記憶装置から再度読み出すだけでよく、主記憶装置にアクセスする時間も短くすることができる。
【００１３】
または、（ａ）前記命令供給装置は、さらに、（ｂ）前記主記憶装置に格納されている命令列のうち、前記第１の命令列以外で前記中央処理装置に繰り返し供給される第２の命令列を前記中央処理装置に再度供給する前に、前記第２の命令列の先頭部分である第３の部分命令列を蓄積する第３のバッファを備え、（ｃ）前記第２の命令列を前記中央処理装置に繰り返し供給する際に、前記第３のバッファに蓄積されている前記第３の部分命令列を前記中央処理装置に供給しながら、前記第３の部分命令列に後続する第４の部分命令列を前記第２のバッファに蓄積し、（ｄ）前記選択手段は、前記第３の部分命令列の全てを前記中央処理装置に供給すると、前記第２のバッファに蓄積されている第４の部分命令列から、前記第３の部分命令列の後続命令を前記中央処理装置に供給し、前記第２の命令列の所在と、前記第３の部分命令列を前記第３のバッファに蓄積することが特定される情報が含まれる第２の命令が前記主記憶装置に格納されており、前記第２の命令を実行した前記中央処理装置から、前記第２の命令に含まれる情報に基づいた指示を受けて、前記第３の部分命令列を前記第３のバッファに蓄積することとしてもよい。
【００１４】
これによって、ループを形成する第１の命令列以外の第２の命令列を供給する際に用いられるバッファと、第１の命令列の先頭部分である部分命令列に結合される部分命令列を蓄積するバッファとを共用することができる。この場合において、バッファの追加なしに、より多数の命令を含む命令列を効率的に供給することができる。
【００１５】
なお、本発明は、命令供給装置として実現されるだけではなく、命令供給装置を制御する方法（以下、命令供給方法と呼称する。）等として実現されるとしてもよい。また、命令供給装置によって提供される機能（以下、命令供給機能と呼称する。）が組み込まれたＬＳＩ、命令供給機能をＦＰＧＡ、ＣＰＬＤ等のプログラマブル・ロジック・デバイスに形成するＩＰコア（以下、命令供給コアと呼称する。）、及び命令供給コアを記録した記録媒体等として実現されるとしてもよい。
【発明の効果】
【００１６】
以上、本発明に係る命令供給装置によれば、ループ用命令バッファの容量以上のループブロックに対しても、主記憶装置へのアクセスを省略し、効率的に命令を供給することができる。そして、複数のループ用命令バッファを有する場合には、ハードウェア量の増加を抑止することができる。さらに、主記憶装置へのアクセスが省略されることによって、主記憶装置に対するアクセス待ちが回避され、中央処理装置における実行処理の性能を向上することができる。また、主記憶装置に対するアクセス頻度が低減され、消費電力の増大を抑制することができる。
【発明を実施するための最良の形態】
【００１７】
（実施の形態１）
以下、本発明に係る実施の形態１について図面を参照しながら説明する。
【００１８】
本発明に係る実施の形態１における命令供給装置は、メモリインターフェースを介して主記憶装置から先行して読み出した命令をバッファに蓄積しつつ、バッファに蓄積している命令列から命令を中央処理装置に供給する。このとき、ループにより繰り返し命令を供給する命令列（以下、ループブロックと呼称する。）以外の命令列（以下、通常ブロックと呼称する。）については、通常用命令バッファに蓄積する。また、ループブロックについては、分割してループ用命令バッファと結合用命令バッファとに蓄積する。そして、ループブロックの命令を中央処理装置に供給する場合には、ループ用命令バッファと結合用命令バッファとに蓄積している命令列を結合した命令列を中央処理装置に供給することを特徴とする。
【００１９】
「通常ブロック」とは、主記憶装置に格納されている命令列のうち、ループブロック以外のブロックをいう。
【００２０】
「ループブロック」とは、主記憶装置に格納されている命令列のうち、繰り返し実行される命令が格納されているブロックをいう。
【００２１】
以上の点を踏まえて本発明に係る実施の形態１における命令供給装置について説明する。
【００２２】
先ず、実施の形態１における命令供給装置の構成について説明する。
【００２３】
図１に示されるように、命令供給装置１０１は、マイクロプロセッサ１００の中に一緒に実装された中央処理装置１０の指示に応じて、マイクロプロセッサ１００と接続されている主記憶装置１から命令を読み出し、中央処理装置１０に供給する。ここでは、一例として、メモリインターフェース１１１、通常用命令バッファ１１２、ループ用命令バッファ１１３、ループ用命令バッファ１１４、結合用命令バッファ１１５、及び選択回路１１６等を備える。
【００２４】
メモリインターフェース１１１は、中央処理装置１０からの指示に応じて、主記憶装置１から命令を読み出し、読み出した命令を通常用命令バッファ１１２、ループ用命令バッファ１１３、ループ用命令バッファ１１４、結合用命令バッファ１１５のいずれかに蓄積する。
【００２５】
通常用命令バッファ１１２は、通常ブロックから読み出された命令を４語分蓄積するバッファである。
【００２６】
ループ用命令バッファ１１３は、ループブロックから読み出された命令を４語分蓄積するバッファである。
【００２７】
ループ用命令バッファ１１４は、ループブロックから読み出された命令を４語分蓄積するバッファである。
【００２８】
結合用命令バッファ１１５は、ループ用命令バッファ１１３及びループ用命令バッファ１１４のいずれかに結合する。ループ用命令バッファ１１３に結合する場合には、ループ用命令バッファ１１３に蓄積している命令列の後続命令を４語分蓄積する。ループ用命令バッファ１１４に結合する場合には、ループ用命令バッファ１１４に蓄積している命令列の後続命令を４語分蓄積するバッファである。
【００２９】
選択回路１１６は、中央処理装置１０からの指示に応じて、通常用命令バッファ１１２、ループ用命令バッファ１１３、ループ用命令バッファ１１４、結合用命令バッファ１１５のいずれかを命令の供給源に選択する。
【００３０】
続いて、実施の形態１における命令供給装置において主記憶装置から命令をフェッチする際の処理について説明する。
【００３１】
図２に示されるように、命令供給装置１０１は、中央処理装置１０から指示を受けた場合において（ステップＳ１０１：Ｙｅｓ）、空きサイクルを見計らい（ステップＳ１０２：Ｙｅｓ）、通常用命令バッファ１１２、ループ用命令バッファ１１３、１１４、結合用命令バッファ１１５の中から、指示を受けたバッファに空きがある場合には（ステップＳ１０３：Ｙｅｓ）、主記憶装置１から命令をフェッチする（ステップＳ１０４）。
【００３２】
なお、指示を受けていないバッファは、指示待ち状態である。
【００３３】
続いて、中央処理装置１０と命令供給装置１０１との動作について説明する。
【００３４】
ここでは、図３に示されるように、主記憶装置１に格納されている命令列として、通常ブロック１２１、１２３、１２５、ループブロック１２２、ループブロック１２４から構成される命令列を一例として説明する。
【００３５】
通常ブロック１２１は、上から下に向かって並んでいる命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）から構成されている。
【００３６】
Ｉ＃１〜Ｉ＃７は、ループストア命令、分岐命令以外の命令である。
【００３７】
ＬＳＩ＃１は、Ｉ＃８からループブロック１２２が開始することが示されるループストア命令である。
【００３８】
ループブロック１２２は、上から下に向かって並んでいる命令列（Ｉ＃８〜Ｉ＃１３、ＢＩ＃１）から構成されている。
【００３９】
Ｉ＃８〜Ｉ＃１３は、ループストア命令、分岐命令以外の命令である。
【００４０】
ＢＩ＃１は、Ｉ＃８に分岐する条件付の分岐命令である。
【００４１】
通常ブロック１２３は、上から下に向かって並んでいる命令列（Ｉ＃１４〜Ｉ＃２１、ＬＳＩ＃２）から構成されている。
【００４２】
Ｉ＃１４〜Ｉ＃２１は、ループストア命令、分岐命令以外の命令である。
【００４３】
ＬＳＩ＃２は、Ｉ＃２２からループブロック１２４が開始することが示されるループストア命令である。
【００４４】
ループブロック１２４は、上から下に向かって並んでいる命令列（Ｉ＃２２〜Ｉ＃２６、ＢＩ＃２）から構成されている。
【００４５】
Ｉ＃２２〜Ｉ＃２６は、ループストア命令、分岐命令以外の命令である。
【００４６】
ＢＩ＃２は、Ｉ＃２２に分岐する条件付の分岐命令である。
【００４７】
通常ブロック１２５は、上から下に向かって並んでいる命令列（Ｉ＃２７〜Ｉ＃３２）から構成されている。
【００４８】
Ｉ＃２７〜Ｉ＃３２は、ループストア命令、分岐命令以外の命令である。
【００４９】
「ループストア命令」とは、例えば、下記の命令で示されるように、ｌａｂｅｌによって特定されるアドレスからループブロックが開始することが示される命令である。
【００５０】
［命令］  Ｌｏｏｐｓｔｏｒｅ  ｌａｂｅｌ，  ｂｕｆｆ
【００５１】
なお、ループブロックから読み出した命令を蓄積するバッファがｂｕｆｆ値によって指定される。ここでは、ｂｕｆｆ値が０の場合には、ループ用命令バッファ１１３に蓄積し、ｂｕｆｆ値が１の場合には、ループ用命令バッファ１１４に蓄積する。
【００５２】
なお、ＬＳＩ＃１については、ｂｕｆｆ値が０の場合として、中央処理装置１０は、ループブロック１２２の先頭部分がループ用命令バッファ１１３に蓄積することを、命令供給装置１０１に指示する。
【００５３】
また、ＬＳＩ＃２については、ｂｕｆｆ値が１の場合として、中央処理装置１０は、ループブロック１２４の先頭部分がループ用命令バッファ１１４に蓄積することを、命令供給装置１０１に指示する。
【００５４】
続いて、中央処理装置１０の動作について説明する。
【００５５】
中央処理装置１０は、一例として挙げた命令列（図３参照。）を実行するにあたり、下記（１）〜（６）の場合に応じて処理を行う。
【００５６】
（１）中央処理装置１０は、通常ブロックの命令を実行する場合には、通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。さらに、命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００５７】
（２）中央処理装置１０は、ループストア命令を実行した場合には、通常用命令バッファ１１２への蓄積が行われていない時に、ループストア命令によって特定されるループブロックの先頭から一定量の命令をループストア命令によって指示されたループ用命例バッファに蓄積することをメモリインターフェース１１１に指示する。
【００５８】
（３）中央処理装置１０は、繰り返し供給される場合を除き、分岐命令の実行によってループ用命令バッファから供給された命令を実行する場合には、そのループ用命令バッファに蓄積している命令列の後続命令を結合用命令バッファ１１５に蓄積することを、メモリインターフェース１１１に指示する。
【００５９】
（４）中央処理装置１０は、ループ用命令バッファから全ての命令が供給された場合には、後続の命令の供給源に結合用命令バッファ１１５を選択することを、選択回路１１６に指示する。
【００６０】
（５）中央処理装置１０は、繰り返し供給される場合を除き、結合用命令バッファ１１５から供給された命令を実行する場合には、結合用命令バッファ１１５に蓄積している命令列の後続命令を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。
【００６１】
（６）中央処理装置１０は、分岐命令を実行してその分岐命令によって指定されたアドレスに分岐する場合には、そのアドレスによって特定される命令を蓄積しているループ用命令バッファを選択することを、選択回路１１６に指示する。一方、分岐せずに結合用命令バッファ１１５から全ての命令が供給された場合には、後続の命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００６２】
続いて、命令供給装置１０１の動作について説明する。
【００６３】
命令供給装置１０１は、中央処理装置１０からの指示に応じて各構成要素が下記の様に振る舞う。
【００６４】
メモリインターフェース１１１は、主記憶装置１から命令を読み出し、通常用命令バッファ１１２、ループ用命令バッファ１１３、ループ用命令バッファ１１４、及び結合用命令バッファ１１５のいずれかに読み出した命令を蓄積する。
【００６５】
選択回路１１６は、通常用命令バッファ１１２、ループ用命令バッファ１１３、ループ用命令バッファ１１４、及び結合用命令バッファ１１５のいずれかを命令の供給源に選択する。
【００６６】
そして、命令の供給源に選択されたバッファは、選択回路１１６を介して中央処理装置１０に、そのバッファに蓄積している命令を供給する。
【００６７】
ここでは、一例としてあげた命令列（図３参照。）を用いながら、中央処理装置１０と命令供給装置１０１との動作について説明する。
【００６８】
図４Ａ〜図７Ｂに示されるように、命令供給装置１０１は、下記（１）〜（１２）の場合に応じた処理を行う。
【００６９】
（１）中央処理装置１０は、通常ブロック１２１の命令を実行する場合には、通常ブロック１２１の命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００７０】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を読み出して通常用命令バッファ１１２に蓄積する。さらに、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を供給する（図４Ａ参照。）。
【００７１】
（２）中央処理装置１０は、分岐命令により繰り返し供給される場合を除き、ループブロック１２２の命令を実行する場合には、命令列（Ｉ＃８〜Ｉ＃１４）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。また、ループストア命令（ＬＳＩ＃１）を実行した場合には、ループストア命令（ＬＳＩ＃１）のｂｕｆｆ値が０により、ループストア命令（ＬＳＩ＃１）によって特定されるループブロック１２２の先頭部分の命令列（Ｉ＃８〜Ｉ＃１１）をループ用命令バッファ１１３に蓄積することを、メモリインターフェース１１１に指示する。
【００７２】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃８〜Ｉ＃１４）を読み出して通常用命令バッファ１１２に蓄積する。さらに、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃８〜ＢＩ＃１）を供給する。これと同時にバックグランドで、ループストア命令（ＬＳＩ＃１）によって特定されるループブロック１２２の先頭部分の命令列（Ｉ＃８〜Ｉ＃１１）を読み出し、読み出した命令列（Ｉ＃８〜Ｉ＃１１）をループ用命令バッファ１１３に蓄積する（図４Ｂ、図４Ｃ参照。）。
【００７３】
（３）中央処理装置１０は、分岐命令（ＢＩ＃１）を実行してループブロック１２２の開始アドレスに分岐する場合には、ループ用命令バッファ１１３に蓄積している命令列（Ｉ＃８〜Ｉ＃１１）の後続命令（Ｉ＃１２〜Ｉ＃１４）を結合用命令バッファ１１５に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路１１６に指示する。
【００７４】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１２〜Ｉ＃１４）を読み出して結合用命令バッファ１１５に蓄積する。さらに、選択回路１１６は、命令の供給源にループ用命令バッファ１１３を選択する。そして、ループ用命令バッファ１１３は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃８〜Ｉ＃１１）を供給する（図４Ｄ参照。）。
【００７５】
（４）中央処理装置１０は、ループ用命令バッファ１１３から全ての命令が供給された場合には、後続の命令の供給源に結合用命令バッファ１１５を選択することを、選択回路１１６に指示する。
【００７６】
これに応じて、選択回路１１６は、命令の供給源に結合用命令バッファ１１５を選択する。結合用命令バッファ１１５は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃１２〜Ｉ＃１４）を供給する（図５Ａ参照。）。
【００７７】
（５）中央処理装置１０は、結合用命令バッファ１１５への命令の蓄積が完了した場合には、結合用命令バッファ１１５に蓄積している命令列（Ｉ＃１２〜Ｉ＃１４）の後続命令（Ｉ＃１５〜Ｉ＃１７）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。
【００７８】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１５〜Ｉ＃１８）を読み出して通常用命令バッファ１１２に蓄積する（図５Ｂ参照。）。
【００７９】
（６）中央処理装置１０は、分岐命令（ＢＩ＃１）を実行してループブロック１２２の開始アドレスに分岐せずに、結合用命令バッファ１１５から全ての命令（Ｉ＃１２〜Ｉ＃１４）が供給された場合には、後続の命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００８０】
これに応じて、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃１５〜Ｉ＃１８）を供給する（図５Ｃ参照。）。
【００８１】
（７）中央処理装置１０は、通常ブロック１２３の命令を実行する場合には、通常ブロック１２３の命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００８２】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を読み出して通常用命令バッファ１１２に蓄積する。さらに、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を供給する（図５Ｄ参照。）。
【００８３】
（８）中央処理装置１０は、分岐命令により繰り返し供給される場合を除き、ループブロック１２４の命令を実行する場合には、命令列（Ｉ＃２２〜Ｉ＃２８）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。さらに、中央処理装置１０は、ループストア命令（ＬＳＩ＃２）を実行した場合には、ループストア命令（ＬＳＩ＃２）のｂｕｆｆ値が１により、ループストア命令（ＬＳＩ＃２）によって特定されるループブロック１２４の先頭部分の命令列（Ｉ＃２２〜Ｉ＃２５）をループ用命令バッファ１１４に蓄積することを、メモリインターフェース１１１に指示する。
【００８４】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２２〜Ｉ＃２５）を読み出して通常用命令バッファ１１２に蓄積する。さらに、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃２２〜Ｉ＃２５）を供給する。これと同時にバックグランドで、ループストア命令（ＬＳＩ＃２）によって特定されるループブロック１２４の先頭部分の命令列（Ｉ＃２２〜Ｉ＃２５）を読み出し、読み出した命令列（Ｉ＃２２〜Ｉ＃２５）をループ用命令バッファ１１４に蓄積する（図６Ａ、図６Ｂ参照。）。
【００８５】
（９）中央処理装置１０は、分岐命令（ＢＩ＃２）を実行してループブロック１２４の開始アドレスに分岐する場合には、ループ用命令バッファ１１４に蓄積している命令列（Ｉ＃２２〜Ｉ＃２５）の後続命令（Ｉ＃２６〜Ｉ＃２８）を結合用命令バッファ１１５に蓄積することを、メモリインターフェース１１１に指示する。それから、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路１１６に指示する。
【００８６】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２６〜Ｉ＃２８）を読み出して結合用命令バッファ１１５に蓄積する。さらに、選択回路１１６は、命令の供給源にループ用命令バッファ１１３を選択する。そして、ループ用命令バッファ１１４は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃２２〜Ｉ＃２５）を供給する（図６Ｃ参照。）。
【００８７】
（１０）中央処理装置１０は、ループ用命令バッファ１１４から全ての命令が供給された場合には、後続の命令の供給源に結合用命令バッファ１１５を選択することを、選択回路１１６に指示する。
【００８８】
これに応じて、選択回路１１６は、命令の供給源に結合用命令バッファ１１５を選択する。結合用命令バッファ１１５は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃２６〜Ｉ＃２８）を供給する（図６Ｄ参照。）。
【００８９】
（１１）中央処理装置１０は、結合用命令バッファ１１５への命令の蓄積が完了した場合には、結合用命令バッファ１１５に蓄積している命令列（Ｉ＃２６〜Ｉ＃２８）の後続命令（Ｉ＃２９〜Ｉ＃３２）を通常用命令バッファ１１２に蓄積することを、メモリインターフェース１１１に指示する。
【００９０】
これに応じて、メモリインターフェース１１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２９〜Ｉ＃３２）を読み出して通常用命令バッファ１１２に蓄積する（図７Ａ参照。）。
【００９１】
（１２）中央処理装置１０は、分岐命令（ＢＩ＃２）を実行してループブロック１２４の開始アドレスに分岐せずに、結合用命令バッファ１１５から全ての命令（Ｉ＃２６〜Ｉ＃２８）が供給された場合には、後続の命令の供給源に通常用命令バッファ１１２を選択することを、選択回路１１６に指示する。
【００９２】
これに応じて、選択回路１１６は、命令の供給源に通常用命令バッファ１１２を選択する。そして、通常用命令バッファ１１２は、選択回路１１６を介して中央処理装置１０に命令列（Ｉ＃２９〜Ｉ＃３２）を供給する（図７Ｂ参照。）。
【００９３】
以上、説明したように本発明の実施の形態１における命令供給装置によれば、ループブロックの命令列を一つのバッファに蓄積する場合と比べて、二つ以上のバッファに分けて蓄積することができ、これ等のバッファが全て更新されない限り、更新されずにバッファに蓄積されている命令列を再利用することができる。そして、ループの後半部分をループ実行時にバックグラウンドでバッファに格納することによって、ループ全体を常時バッファに保持しなくても、ループ時には全てバッファに保持されている状態と同等となり、効率的な命令を供給することができる。
【００９４】
例えば、８語分の命令を二つのバッファに半分ずつ蓄積し、そのうちの一つのバッファが更新されても、他のバッファが更新されていなければ、更新されずに他のバッファに蓄積している４語分の命令を再利用することができる。そして、８語分の命令を主記憶装置から再度読み出すことなく、更新された４語の命令を主記憶装置から再度読み出すだけでよく、主記憶装置にアクセスする時間も短くすることができる。そして、ループ用命令バッファおよび結合用命令バッファの合計語数である８語までのループブロックに対して、繰り返し供給する際には、主記憶装置にアクセスせずにループブロックの命令を供給することができる。
【００９５】
同様に、結合用命令バッファの代わりに、もう一つのループ用命令バッファを用いた場合においても、８語までのループブロックに対して、繰り返し供給する際には、主記憶装置にアクセスせずにループブロックの命令を供給することができる。
【００９６】
なお、８語のループブロック二つに対して、ループ中に主記憶装置にアクセスせずに供給するには、従来の構成においては、８語分のループ用命令バッファを２つ設ける必要があり、計１６語分の命令バッファが必要となる。これに対して、本発明の実施の形態１においては、ループ用命令バッファ１１３、ループ用命令バッファ１１４、及び結合用命令バッファ１１５の計１２語分の命令バッファを用いて、同等の機能を実現することができ、より少ないハードウェア量でループブロックに対して効率的に命令を供給することができる。
【００９７】
（実施の形態２）
次に、本発明に係る実施の形態２について図面を参照しながら説明する。なお、実施の形態１と同一の構成については説明を省略する。
【００９８】
本発明に係る実施の形態２における命令供給装置は、命令供給装置１０１（図１参照。）と比べて、結合用命令バッファ１１５を備えない代わりに、通常用命令バッファ１１２と結合用命令バッファ１１５とを兼用する通常用命令バッファを備える点が異なる。
【００９９】
具体的には、実施の形態２における通常命令バッファは、通常ブロックの命令を供給する場合には、通常用命令バッファ１１２のように機能し、ループブロックの命令を供給する場合には、結合用命令バッファ１１５のように機能する。
【０１００】
以上の点を踏まえて本発明に係る実施の形態２における命令供給装置について説明する。
【０１０１】
先ず、本発明に係る実施の形態２における命令供給装置の構成について説明する。
【０１０２】
図８に示されるように、命令供給装置２０１は、命令供給装置１０１（図１参照。）と比べて、下記（１）〜（５）の点が異なる。
【０１０３】
（１）メモリインターフェース１１１の代わりにメモリインターフェース２１１を備える。
【０１０４】
メモリインターフェース２１１は、中央処理装置２０からの指示に応じて、主記憶装置１から命令を読み出し、読み出した命令を通常用命令バッファ２１２、ループ用命令バッファ１１３のいずれかに蓄積する。
【０１０５】
（２）通常用命令バッファ１１２の代わりに通常用命令バッファ２１２を備える。
【０１０６】
通常用命令バッファ２１２は、通常ブロックの命令を供給する場合には、通常用命令バッファ１１２のように、通常ブロックから読み出された命令を４語分蓄積する。また、ループブロックの命令を供給する場合には、結合用命令バッファ１１５のように、ループ用命令バッファ１１３に蓄積している命令列の後続命令を４語分蓄積する。
【０１０７】
（３）選択回路１１６の代わりに選択回路２１６を備える。
【０１０８】
選択回路２１６は、中央処理装置１０からの指示に応じて、通常用命令バッファ２１２、ループ用命令バッファ１１３のいずれかを命令の供給源に選択する。
【０１０９】
（４）新たに閾値レジスタ２１３を備える。
【０１１０】
閾値レジスタ２１３は、通常用命令バッファ２１２がループブロックの命令を供給中に、通常用命令バッファ２１２の空き領域の容量が所定の容量に至ったか否かを判断する際に参照される閾値を保持する。
【０１１１】
（５）ループ用命令バッファ１１４、結合用命令バッファ１１５を備えない。
【０１１２】
命令供給装置２０１には、ループ用命令バッファが１つしか存在しないために、ループストア命令のｂｕｆｆ値、すなわち、バッファを選択する情報については無視する。
【０１１３】
続いて、実施の形態２における命令供給装置において主記憶装置から命令をフェッチする際の処理について説明する。
【０１１４】
図９に示されるように、通常用命令バッファ２１２は、ループ用命令バッファ１１３に蓄積されている命令列の後続命令を供給中の場合には（ステップＳ２０１：Ｙｅｓ）、命令供給に伴うバッファの空き領域が所定の閾値（ここでは、２語とする。）を超えるまでは（ステップＳ２０２）、新たな命令を蓄積しない。
【０１１５】
続いて、中央処理装置２０の動作について説明する。
【０１１６】
中央処理装置２０は、実施の形態１において一例として挙げた命令列（図３参照。）を実行するにあたり、下記（１）〜（５）の場合に応じて処理を行う。
【０１１７】
（１）中央処理装置２０は、通常ブロックの命令を実行する場合には、通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。さらに、命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１１８】
（２）中央処理装置２０は、ループストア命令を実行した場合には、通常用命令バッファ２１２への蓄積が行われていない時に、ループストア命令によって特定されるループブロックの先頭から一定量の命令をループ用命例バッファ１１３に蓄積することをメモリインターフェース２１１に指示する。
【０１１９】
（３）中央処理装置２０は、分岐命令の実行により、ループ用命令バッファ１１３から供給された命令を実行する場合には、ループ用命令バッファ１１３に蓄積している命令列の後続命令を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１２０】
（４）中央処理装置２０は、ループ用命令バッファから全ての命令が供給された場合には、後続の命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１２１】
（５）中央処理装置２０は、分岐命令を実行してその分岐命令によって指定されたアドレスに分岐する場合には、ループ用命令バッファ１１３を選択することを、選択回路２１６に指示する。一方、分岐せずに通常用命令バッファ１１２から残りの命令が供給された場合には、通常用命令バッファ２１２に蓄積している命令列の後続命令を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１２２】
続いて、命令供給装置２０１の動作について説明する。
【０１２３】
命令供給装置２０１は、中央処理装置２０からの指示を受けたメモリインターフェース２１１によって、主記憶装置１から命令を先行して読み出し、通常用命令バッファ２１２とループ用命令バッファ１１３のいずれかに読み出した命令を蓄積する。また、選択回路２１６において、通常用命令バッファ２１２とループ用命令バッファ１１３のいずれかを命令の供給源に選択する。そして、命令の供給源に選択されたバッファは、選択回路２１６を介して中央処理装置２０に、そのバッファに蓄積している命令を供給する。
【０１２４】
なお、通常用命令バッファ２１２は、ループブロックの命令を供給中に、命令を供給することによって生じた空き容量が閾値レジスタ２１３において保持されている閾値を超えると、主記憶装置１から後続の命令を読み出して蓄積する処理を再開する。
【０１２５】
そして、通常用命令バッファ２１２は、ループブロックの命令を供給する場合、すなわち、ループ用命令バッファ１１３に後続命令を供給する場合には、命令の供給に伴い自身のバッファに空き領域ができても、その空き領域がこの閾値（例えば、２語とする。）を超えるまでは、新たな命令を主記憶装置１から読み出して蓄積しない。このことにより、ループ用命令バッファ１１３に後続命令を保持し続ける。
【０１２６】
ここでは、一例として挙げた命令列（図３参照。）を用いながら、中央処理装置２０と命令供給装置２０１との動作について説明する。
【０１２７】
図１０Ａ〜図１２Ｂに示されるように、命令供給装置２０１は、下記（１）〜（１２）の場合に応じた処理を行う。
【０１２８】
（１）中央処理装置２０は、通常ブロック１２１の命令を実行する場合には、通常ブロック１２１の命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１２９】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃１〜Ｉ＃７、ＬＳＩ＃１）を供給する（図１０Ａ参照。）。
【０１３０】
（２）中央処理装置２０は、分岐命令により繰り返し供給される場合を除き、ループブロック１２２の命令を実行する場合には、命令列（Ｉ＃８〜Ｉ＃１４）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。また、ループストア命令（ＬＳＩ＃１）を実行した場合には、ループストア命令（ＬＳＩ＃１）によって特定されるループブロック１２２の先頭部分の命令列（Ｉ＃８〜Ｉ＃１１）をループ用命令バッファ１１３に蓄積することを、メモリインターフェース２１１に指示する。
【０１３１】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃８〜Ｉ＃１４）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃８〜Ｉ＃１１）を供給する。これと同時にバックグラウンドで、ループストア命令（ＬＳＩ＃１）によって特定されるループブロック１２２の先頭部分の命令列（Ｉ＃８〜Ｉ＃１１）を読み出し、読み出した命令列（Ｉ＃８〜Ｉ＃１１）をループ用命令バッファ１１３に蓄積する（図１０Ｂ、図１０Ｃ参照。）。
【０１３２】
（３）中央処理装置２０は、分岐命令（ＢＩ＃１）を実行してループブロック１２２の開始アドレスに分岐する場合には、ループ用命令バッファ１１３に蓄積している命令列（Ｉ＃８〜Ｉ＃１１）の後続命令（Ｉ＃１２〜Ｉ＃１４）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路２１６に指示する。
【０１３３】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１２〜Ｉ＃１４）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源にループ用命令バッファ１１３を選択する。そして、ループ用命令バッファ１１３は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃８〜Ｉ＃１１）を供給する（図１０Ｄ参照。）。
【０１３４】
（４）中央処理装置２０は、ループ用命令バッファ１１３から全ての命令が供給された場合には、後続の命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１３５】
これに応じて、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令（Ｉ＃１２、Ｉ＃１３）を供給する（図１０Ｅ参照。）。
【０１３６】
さらに、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令を供給する。このとき、中央処理装置２０に命令を供給することによって生じた通常用命令バッファ２１２の空き領域が閾値を超えているため、通常用命令バッファ２１２に蓄積している命令列（Ｉ＃１２〜Ｉ＃１４）の後続命令（Ｉ＃１５、Ｉ＃１６）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１３７】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１５、Ｉ＃１６）を読み出して通常用命令バッファ２１２に蓄積する（図１０Ｆ参照。）。
【０１３８】
（５）中央処理装置２０は、分岐命令（ＢＩ＃１）を実行してループブロック１２２の開始アドレスに分岐する場合には、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路２１６に指示する。それから、ループ用命令バッファ１１３に蓄積している命令列（Ｉ＃８〜Ｉ＃１１）の後続命令（Ｉ＃１２、Ｉ＃１３）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１３９】
これに応じて、選択回路２１６は、命令の供給源にループ用命令バッファ１１３を選択する。さらに、ループ用命令バッファ１１３は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃８〜Ｉ＃１１）を供給する。そして、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１２、Ｉ＃１３）を読み出して通常用命令バッファ２１２に蓄積する（図１０Ｇ参照。）。
【０１４０】
（６）中央処理装置２０は、分岐命令（ＢＩ＃１）を実行してループブロック１２２の開始アドレスに分岐せずに、通常用命令バッファ２１２から全ての命令（Ｉ＃１２〜Ｉ＃１４）が供給された場合には、通常用命令バッファ２１２に蓄積している命令列（Ｉ＃１２〜Ｉ＃１４）の後続命令（Ｉ＃１５〜Ｉ＃１８）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１４１】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１５〜Ｉ＃１８）を読み出して通常用命令バッファ２１２に蓄積する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃１５〜Ｉ＃１８）を供給する（図１０Ｈ、図１１Ａ参照。）。
【０１４２】
（７）中央処理装置２０は、通常ブロック１２１の命令を実行する場合には、通常ブロック１２１の命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１４３】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃１９〜Ｉ＃２１、ＬＳＩ＃２）を供給する（図１１Ｂ参照。）。
【０１４４】
（８）中央処理装置２０は、分岐命令により繰り返し供給される場合を除き、ループブロック１２４の命令を実行する場合には、命令列（Ｉ＃２２〜Ｉ＃２５）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。また、ループストア命令（ＬＳＩ＃２）を実行した場合には、ループストア命令（ＬＳＩ＃２）によって特定されるループブロック１２４の先頭部分の命令列（Ｉ＃２２〜Ｉ＃２５）をループ用命令バッファ１１３に蓄積することを、メモリインターフェース２１１に指示する。
【０１４５】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２２〜Ｉ＃２５）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃２２〜ＢＩ＃２）を供給する。これと同時にバックグランドで、ループストア命令（ＬＳＩ＃２）によって特定されるループブロック１２４の先頭部分の命令列（Ｉ＃２２〜Ｉ＃２５）を読み出し、読み出し命令列（Ｉ＃２２〜Ｉ＃２５）をループ用命令バッファ１１３に蓄積する（図１１Ｃ、図１１Ｄ参照。）。
【０１４６】
（９）中央処理装置２０は、分岐命令（ＢＩ＃２）を実行してループブロック１２４の開始アドレスに分岐する場合には、ループ用命令バッファ１１３に蓄積している命令列（Ｉ＃２２〜Ｉ＃２５）の後続命令（Ｉ＃２６〜Ｉ＃２８）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。それから、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路２１６に指示する。
【０１４７】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２６〜Ｉ＃２８）を読み出して通常用命令バッファ２１２に蓄積する。さらに、選択回路２１６は、命令の供給源にループ用命令バッファ１１３を選択する。そして、ループ用命令バッファ１１３は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃２２〜Ｉ＃２５）を供給する（図１１Ｅ参照。）。
【０１４８】
（１０）中央処理装置２０は、ループ用命令バッファ１１３から全ての命令が供給された場合には、後続の命令の供給源に通常用命令バッファ２１２を選択することを、選択回路２１６に指示する。
【０１４９】
これに応じて、選択回路２１６は、命令の供給源に通常用命令バッファ２１２を選択する。通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令（Ｉ＃２６、ＢＩ＃２）を供給する（図１１Ｆ参照。）
【０１５０】
さらに、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令を供給する。このとき、中央処理装置２０に命令を供給することによって生じた通常用命令バッファ２１２の空き領域が閾値を超えていないため、通常用命令バッファ２１２に蓄積している命令列（Ｉ＃２６〜Ｉ＃２８）の後続命令（Ｉ＃２９、Ｉ＃３０）を通常用命令バッファ２１２に生じた空き領域に蓄積することを、メモリインターフェース２１１に指示しない（図１１Ｇ参照。）。
【０１５１】
（１１）中央処理装置２０は、分岐命令（ＢＩ＃２）を実行してループブロック１２４の開始アドレスに分岐する場合には、命令の供給源にループ用命令バッファ１１３を選択することを、選択回路２１６に指示する。
【０１５２】
これに応じて、選択回路２１６は、命令の供給源にループ用命令バッファ１１３を選択する。さらに、ループ用命令バッファ１１３は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃２２〜Ｉ＃２５）を供給する（図１１Ｈ参照。）
【０１５３】
（１２）中央処理装置２０は、分岐命令（ＢＩ＃２）を実行してループブロック１２２の開始アドレスに分岐せずに、通常用命令バッファ２１２から全ての命令（Ｉ＃２６〜Ｉ＃２８）が供給された場合には、通常用命令バッファ２１２に蓄積している命令列（Ｉ＃２６〜Ｉ＃２８）の後続命令（Ｉ＃２９〜Ｉ＃３２）を通常用命令バッファ２１２に蓄積することを、メモリインターフェース２１１に指示する。
【０１５４】
これに応じて、メモリインターフェース２１１は、主記憶装置１にアクセスし、主記憶装置１から命令列（Ｉ＃２９〜Ｉ＃３２）を読み出して通常用命令バッファ２１２に蓄積する。そして、通常用命令バッファ２１２は、選択回路２１６を介して中央処理装置２０に命令列（Ｉ＃２９〜Ｉ＃３２）を供給する（図１２Ａ、図１２Ｂ参照。）。
【０１５５】
以上、説明したように命令供給装置２０１によれば、６語までのループブロックに対しては、主記憶装置１にアクセスせずとも、繰り返し命令を供給することができる。
【０１５６】
例えば、従来の構成で同等の結果を実現する場合には、４語分の命令を蓄積する通常用命令バッファとは別に、６語分の命令を蓄積するループ用命令バッファが必要である。すなわち、合計して１０語分の命令を蓄積するバッファが必要である。
【０１５７】
しかし、命令供給装置２０１によれば、４語分の命令を蓄積する通常用命令バッファ２１２を有効に活用することによって、６語分のループブロックのうち４語分の命令をループ用命令バッファ１１３に蓄積し、残り２語分の命令を通常用命令バッファ２１２に蓄積することができる。すなわち、６語分のループブロックを一括して蓄積するループ用命令バッファを設ける必要がなく、４語分の命令を蓄積する通常用命令バッファ２１２と、４語分の命令を蓄積するループ用命令バッファ１１３だけが必要であり、合計して８語分の命令を蓄積するバッファが必要である。そして、従来の構成と比べると、２語分のバッファが削減されている。
【０１５８】
（その他）
なお、閾値レジスタ２１３において保持されている閾値は、プログラムによって設定できるとしてもよい。また、通常用命令バッファ２１２の容量内で設定できるとしてもよい。これに伴い、プログラムの特定に合わせた命令を供給することができる。そして、この閾値を大きくすることによって、ループブロックの命令に対しては、割り当てられる容量が大きくなり、効率的に供給することができる。その反面、そのループブロックに後続する命令列に対しては、割り当てられる容量が小さくなり、そのループブロックと一緒に通常用命令バッファ２１２に蓄積できる命令数が少なくなるというトレードオフがある。
【０１５９】
なお、命令供給装置は、フルカスタムＬＳＩ（Large Scale Integration）によって実現されるとしてもよい。また、ＡＳＩＣ（Application Specific Integrated Circuit）等のようなセミカスタムＬＳＩによって実現されるとしてもよい。また、ＦＰＧＡ（Field Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）等のようなプログラマブル・ロジック・デバイスによって実現されるとしてもよい。また、動的に回路構成が書き換え可能なダイナミック・リコンフィギュラブル・デバイスとして実現されるとしてもよい。
【０１６０】
さらに、命令供給装置を構成する１乃至２以上の機能を、これ等のＬＳＩに形成する設計データは、ＶＨＤＬ（Very high speed integrated circuit Hardware Description Language）、Ｖｅｒｉｌｏｇ−ＨＤＬ、ＳｙｓｔｅｍＣ等のようなハードウェア記述言語によって記述されたプログラム（以下、ＨＤＬプログラムと呼称する。）としてもよい。また、ＨＤＬプログラムを論理合成して得られるゲート・レベルのネットリストとしてもよい。また、ゲート・レベルのネットリストに、配置情報、プロセス条件等を付加したマクロセル情報としてもよい。また、寸法、タイミング等が規定されたマスクデータとしてもよい。
【０１６１】
さらに、設計データは、コンピュータシステム、組み込みシステム等のようなハードウェアシステムに読み出され得るように、光学記録媒体（例えば、ＣＤ−ＲＯＭ等。）、磁気記録媒体（例えば、ハードディスク等。）、光磁気記録媒体（例えば、ＭＯ等。）、半導体メモリ（例えば、ＲＡＭ等。）等のようなコンピュータ読み取り可能な記録媒体に記録しておくとしてもよい。そして、記録媒体を介して他のハードウェアタシステムに読み取られた設計データは、ダウンロードケーブルを介して、プログラマブル・ロジック・デバイスにダウンロードされるとしてもよい。
【０１６２】
または、設計データは、ネットワーク等のような伝送路を経由して他のハードウェアシステムに取得され得るように、伝送路上のハードウェアシステムに保持しておくとしてもよい。さらに、ハードウェアシステムから伝送路を介して他のハードウェアタシステムに取得された設計データは、ダウンロードケーブルを介して、プログラマブル・ロジック・デバイスにダウンロードされるとしてよい。
【０１６３】
または、論理合成、配置、配線された設計データは、通電時にＦＰＧＡに転送され得るように、シリアルＲＯＭに記録しておくとしてもよい。そして、シリアルＲＯＭに記録された設計データは、通電時に、直接、ＦＰＧＡにダウンロードされるとしてもよい。
【産業上の利用可能性】
【０１６４】
本発明は、主記憶装置から読み出した命令を中央処理装置に供給する命令供給装置等として、特に、ループ用命令バッファの容量を増加させることなく、より多数の命令によるループについて主記憶装置へのアクセスを行うことなく命令供給を行う命令供給装置等として、利用することができる。
【図面の簡単な説明】
【０１６５】
【図１】図１は、実施の形態１における命令供給装置の構成を示す図である。
【図２】図２は、実施の形態１における命令供給装置において主記憶装置から命令をフェッチする際の処理を示す図である。
【図３】図３は、主記憶装置に格納されている命令列の一例を示す図である。
【図４Ａ】図４Ａは、実施の形態１における命令供給装置の動作例を示す第１の図である。
【図４Ｂ】図４Ｂは、実施の形態１における命令供給装置の動作例を示す第２の図である。
【図４Ｃ】図４Ｃは、実施の形態１における命令供給装置の動作例を示す第３の図である。
【図４Ｄ】図４Ｄは、実施の形態１における命令供給装置の動作例を示す第４の図である。
【図５Ａ】図５Ａは、実施の形態１における命令供給装置の動作例を示す第５の図である。
【図５Ｂ】図５Ｂは、実施の形態１における命令供給装置の動作例を示す第６の図である。
【図５Ｃ】図５Ｃは、実施の形態１における命令供給装置の動作例を示す第７の図である。
【図５Ｄ】図５Ｄは、実施の形態１における命令供給装置の動作例を示す第８の図である。
【図６Ａ】図６Ａは、実施の形態１における命令供給装置の動作例を示す第９の図である。
【図６Ｂ】図６Ｂは、実施の形態１における命令供給装置の動作例を示す第１０の図である。
【図６Ｃ】図６Ｃは、実施の形態１における命令供給装置の動作例を示す第１１の図である。
【図６Ｄ】図６Ｄは、実施の形態１における命令供給装置の動作例を示す第１２の図である。
【図７Ａ】図７Ａは、実施の形態１における命令供給装置の動作例を示す第１３の図である。
【図７Ｂ】図７Ｂは、実施の形態１における命令供給装置の動作例を示す第１４の図である。
【図８】図８は、実施の形態２における命令供給装置の構成を示す図である。
【図９】図９は、実施の形態２における命令供給装置において主記憶装置から命令をフェッチする際の処理を示す図である。
【図１０Ａ】図１０Ａは、実施の形態２における命令供給装置の動作例を示す第１の図である。
【図１０Ｂ】図１０Ｂは、実施の形態２における命令供給装置の動作例を示す第２の図である。
【図１０Ｃ】図１０Ｃは、実施の形態２における命令供給装置の動作例を示す第３の図である。
【図１０Ｄ】図１０Ｄは、実施の形態２における命令供給装置の動作例を示す第４の図である。
【図１０Ｅ】図１０Ｅは、実施の形態２における命令供給装置の動作例を示す第５の図である。
【図１０Ｆ】図１０Ｆは、実施の形態２における命令供給装置の動作例を示す第６の図である。
【図１０Ｇ】図１０Ｇは、実施の形態２における命令供給装置の動作例を示す第７の図である。
【図１０Ｈ】図１０Ｈは、実施の形態２における命令供給装置の動作例を示す第８の図である。
【図１１Ａ】図１１Ａは、実施の形態２における命令供給装置の動作例を示す第９の図である。
【図１１Ｂ】図１１Ｂは、実施の形態２における命令供給装置の動作例を示す第１０の図である。
【図１１Ｃ】図１１Ｃは、実施の形態２における命令供給装置の動作例を示す第１１の図である。
【図１１Ｄ】図１１Ｄは、実施の形態２における命令供給装置の動作例を示す第１２の図である。
【図１１Ｅ】図１１Ｅは、実施の形態２における命令供給装置の動作例を示す第１３の図である。
【図１１Ｆ】図１１Ｆは、実施の形態２における命令供給装置の動作例を示す第１４の図である。
【図１１Ｇ】図１１Ｇは、実施の形態２における命令供給装置の動作例を示す第１５の図である。
【図１１Ｈ】図１１Ｈは、実施の形態２における命令供給装置の動作例を示す第１６の図である。
【図１２Ａ】図１２Ａは、実施の形態２における命令供給装置の動作例を示す第１７の図である。
【図１２Ｂ】図１２Ｂは、実施の形態２における命令供給装置の動作例を示す第１８の図である。
【符号の説明】
【０１６６】
１  主記憶装置
１０，２０  中央処理装置
１００，２００  マイクロプロセッサ
１０１，２０１  命令供給装置
１１１，２１１  メモリインターフェース
１１２，２１２  通常用命令バッファ
１１３  ループ用命令バッファ
１１４  ループ用命令バッファ
１１５  結合用命令バッファ
１１６，２１６  選択回路
２１３  閾値レジスタ
【図１】
0004086885.tif 000002
【図２】
0004086885.tif 000003
【図３】
0004086885.tif 000004
【図４Ａ】
0004086885.tif 000005
【図４Ｂ】
0004086885.tif 000006
【図４Ｃ】
0004086885.tif 000007
【図４Ｄ】
0004086885.tif 000008
【図５Ａ】
0004086885.tif 000009
【図５Ｂ】
0004086885.tif 000010
【図５Ｃ】
0004086885.tif 000011
【図５Ｄ】
0004086885.tif 000012
【図６Ａ】
0004086885.tif 000013
【図６Ｂ】
0004086885.tif 000014
【図６Ｃ】
0004086885.tif 000015
【図６Ｄ】
0004086885.tif 000016
【図７Ａ】
0004086885.tif 000017
【図７Ｂ】
0004086885.tif 000018
【図８】
0004086885.tif 000019
【図９】
0004086885.tif 000020
【図１０Ａ】
0004086885.tif 000021
【図１０Ｂ】
0004086885.tif 000022
【図１０Ｃ】
0004086885.tif 000023
【図１０Ｄ】
0004086885.tif 000024
【図１０Ｅ】
0004086885.tif 000025
【図１０Ｆ】
0004086885.tif 000026
【図１０Ｇ】
0004086885.tif 000027
【図１０Ｈ】
0004086885.tif 000028
【図１１Ａ】
0004086885.tif 000029
【図１１Ｂ】
0004086885.tif 000030
【図１１Ｃ】
0004086885.tif 000031
【図１１Ｄ】
0004086885.tif 000032
【図１１Ｅ】
0004086885.tif 000033
【図１１Ｆ】
0004086885.tif 000034
【図１１Ｇ】
0004086885.tif 000035
【図１１Ｈ】
0004086885.tif 000036
【図１２Ａ】
0004086885.tif 000037
【図１２Ｂ】
0004086885.tif 000038