(57)【要約】【課題】並列処理を実行するプロセッサで無駄な電力消費を極力抑えること。【解決手段】複数のプログラムメモリに格納された複数の命令を一つのコードに含んだ命令コードとして実行する並列実行プロセッサシステムで、命令コード中からｎｏｐ命令の連続回数を定義する拡張ｎｏｐ命令を検出し、検出した拡張ｎｏｐ命令からｎｏｐ命令の連続回数を取得する命令デコーダ23と、連続回数から２を減じた命令実行期間、拡張ｎｏｐ命令を格納していたＲＯＭを機能抑止するＲＯＭ制御部24とを備えたことを特徴とする。【選択図】図９
2014119957.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムメモリに格納された複数の命令を一つのコードに含んだ命令コードとして実行する並列実行プロセッサシステムであって、
上記命令コード中からｎｏ−ｏｐｅｒａｔｉｏｎ命令（以下「ｎｏｐ命令」）の連続回数を定義する拡張ｎｏｐ命令を検出する検出手段と、
上記検出手段で検出した拡張ｎｏｐ命令からｎｏｐ命令の連続回数を取得する回数取得手段と、
上記回数取得手段で取得した連続回数から２を減じた命令実行期間、上記拡張ｎｏｐ命令を格納していた上記プログラムメモリを機能抑止するプログラムメモリ制御手段と
を備えたことを特徴とする並列実行プロセッサシステム。
【請求項２】
上記システムは、ソースプログラムを上記プログラムメモリに格納するための命令に変換して出力するコンパイラを含み、
上記コンパイラは、
上記ソースプログラムを構成する個々の命令を入力して解析する命令解析手段と、
上記命令解析手段に入力した命令がｎｏｐ命令であるか否かを判定するｎｏｐ判定手段と、
連続するｎｏｐ命令の数をカウントするカウンタと、
上記ｎｏｐ判定手段によりｎｏｐ命令であると判定した場合に上記カウンタの値をプラス１更新し、ｎｏｐ命令ではないと判定した場合は上記カウンタの値をゼロにクリアするカウンタ制御手段と、
上記カウンタの値が３以上となる場合、上記連続するｎｏｐ命令の先頭のｎｏｐ命令を、上記カウンタの値に応じてｎｏｐ命令の連続回数を定義する拡張ｎｏｐ命令に置換して出力する拡張ｎｏｐ命令生成手段と
を備えたことを特徴とする請求項１記載の並列実行プロセッサシステム。
【請求項３】
上記コンパイラは、さらに、
命令コード中にｎｏｐ命令を含んでいる場合に当該命令コードを一時格納するバッファ手段と、
命令コード中にｎｏｐ命令を含んでいない場合は当該命令コード中にジャンプ命令を含んでいるか否かを判定する第１の判定手段と、
命令コードで使用するレジスタ及びメモリアドレスが上記バッファ手段に格納している命令コードで使用されているか否かを判定する第２の判定手段と、
上記第１の判定手段で上記命令コード中にジャンプ命令を含んでいないと判定し、且つ上記第２の判定手段で上記命令コードで使用するレジスタ及びメモリアドレスのいずれも上記バッファ手段で格納している命令コードで使用していないと判定した場合、当該命令コードをそのまま出力する第１の出力制御手段と、
上記第１の判定手段で上記命令コード中にジャンプ命令を含んでいると判定した場合、及び上記第２の判定手段で上記命令コードで使用するレジスタ及びメモリアドレスのいずれかが上記バッファ手段で格納している命令コードで使用していると判定した場合の少なくとも一方で、上記バッファ手段で格納している命令コードを出力した後に、当該命令コードを出力する第２の出力制御手段と
を備えたことを特徴とする請求項２記載の並列実行プロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列実行プロセッサと、このプロセッサで実行する命令コードを生成するコンパイラを含んだ並列実行プロセッサシステムに関する。
【背景技術】
【０００２】
近年、画像や音声を扱うマルチメディアに関するデータ処理分野では、例えばスマートフォンやタブレット端末でインターネットの動画投稿サイトを閲覧することが一般化し、且つＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）を含む高速移動体通信網の整備が広く普及するなどにより、処理すべきデータ量が年々増大している。これらの膨大な数のデータを効率的に処理するために、各端末機器内では、複数の命令を並列して同時に実行することが可能な並列実行プロセッサが利用されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１７１５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一例として、２命令を同時に実行することが可能な３２ビットマイクロプロセッサの場合の、プログラム中の命令コードを図１２に示す。また、命令コード中で使用される各種命令の一覧を図１３に示す。
【０００５】
プログラムメモリのデータバスが６４ビットであり、上位３２ビットと下位３２ビットの命令を２つの別体のＲＯＭであるＲＯＭ１とＲＯＭ２とに格納している。ここでは命令コードの上位３２ビットをＲＯＭ１に、同下位３２ビットをＲＯＭ２に格納するものとする。
【０００６】
そしてこれらの、上位３２ビットと下位３２ビットで異なる命令をコードに埋め込むことで、２命令を同時に実行している。
【０００７】
また、回路の増大を防ぐために、上位側と下位側で使用できる命令がなるべく重複しないようにしている。例えば、上位側ではＡＮＤ、ＯＲ、ＡＤＤなどの演算系の命令、下位側ではメモリへのデータロード、データストアを行なうような命令の構成になっている。
【０００８】
このような構成の命令コードを実行する並列実行プロセッサでは、計算が多いプログラムでは上位側の演算系の命令が多く使用され、メモリアクセスが必要ない場合の下位側ではコンパイラによりｎｏ−ｏｐｅｒａｔｉｏｎ命令（以下「ｎｏｐ命令」）の挿入が必要になる。またこれとは逆に、計算が少ないプログラムでは、コンパイラが上位側にｎｏｐ命令を挿入する必要がある。
【０００９】
上記図１２においても、コンパイラが第１１行目乃至第１８行目の命令コードで上位側のＲＯＭ１に連続してｎｏｐ命令を挿入した例を示している。
【００１０】
このように、通常は１命令ずつ実行するプロセッサに対して、実行するプログラムの内容に応じてｎｏｐ命令の数が多くなり、このｎｏｐ命令の期間もプロセッサは対応するＲＯＭから命令コードを読み込んでいる。そのため、プロセッサとしては動作する必要がないのに動作を続行し、結果として無駄に電力を消費するという不具合があった。
【００１１】
本発明は上記のような実情に鑑みてなされたもので、その目的とするところは、無駄な電力消費を極力抑えることが可能な並列実行プロセッサ及び該プロセッサ用コンパイラを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の一態様は、複数のプログラムメモリに格納された複数の命令を一つのコードに埋め込んだ命令コードとして実行する並列実行プロセッサシステムであって、上記命令コード中からｎｏ−ｏｐｅｒａｔｉｏｎ命令（以下「ｎｏｐ命令」）の連続回数を定義する拡張ｎｏｐ命令を検出する検出手段と、上記検出手段で検出した拡張ｎｏｐ命令からｎｏｐ命令の連続回数を取得する回数取得手段と、上記回数取得手段で取得した回数から２を減じた命令実行期間、上記拡張ｎｏｐ命令を格納している上記プログラムメモリを機能抑止するプログラムメモリ制御手段とを備えたことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、並列実行処理中にｎｏｐ命令が連続する場合の無駄な電力消費を極力抑えることが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態に係るコンパイラが実行する処理内容を示すフローチャート。
【図２】同実施形態に係るｎｏｐ命令が分散したプログラムの一例を示す図。
【図３】同実施形態に係る命令コードの出力順を示す図。
【図４】同実施形態に係るコンパイラで並び替えられた命令コードの出力順を示す図。
【図５】同実施形態に係る命令コードのフォーマット構成を示す図。
【図６】同実施形態に係る命令コードの生成例を示す図。
【図７】同実施形態に係る並列実行プロセッサのハードウェア構成を示すブロック図。
【図８】同実施形態に係るＣＰＵ内の並列実行処理を行なうためのブロック構成を示す図。
【図９】同実施形態に係るＲＯＭのチップセレクト信号とＣＰＵへの処理データとを制御する回路の構成を抽出して示すブロック図。
【図１０】同実施形態に係るパイプラインの実行状態を示す図。
【図１１】同実施形態に係る拡張ｎｏｐ命令（ｎｏｐｉ命令）実行時のタイミングチャート。
【図１２】並列実行プロセッサが実行するプログラムの一例を示す図。
【図１３】プログラムで使用する命令の一覧を示す図。
【発明を実施するための形態】
【００１５】
以下、本発明に係る並列実行プロセッサシステムの一実施形態について図面を参照して説明する。  
まず、本システムで適用するコンパイラによる、プログラムの命令コードの並び替え処理（図では「ｎｏｐｉ処理」と称する）について説明する。このコンパイラは、後述する並列実行プロセッサ１０のプログラムメモリである第１ＲＯＭ１２及び第２ＲＯＭ１３に格納するための命令を生成するべく、以下の処理を実行する。
【００１６】
図１は、この並び替え処理を含むコンパイラでの処理内容を示すフローチャートである。処理当初に通常のコンパイル処理を実行する（ステップＳ１０１）。  
図２は、上記通常のコンパイル処理により生成された一連の命令コードの一例を示す。同図では、上記図１２に示した内容と異なり、下位側の第２ＲＯＭに格納する、メモリへのデータロード、データストアを行なうような命令が多く、上位側の第１ＲＯＭに格納する側の命令にｎｏｐ命令が多く挿入されているが、各ｎｏｐ命令は分散しており、連続していない例を示している。
【００１７】
コンパイラでは、初期設定としてｎｏｐ命令の保存数をカウントする変数Ｎｎｕｍを初期値「０」にすると共に、ｎｏｐ命令を含む命令コードを順次蓄積して格納するバッファであるＮｏｐＢｕｆの内容をクリアする（ステップＳ１０２）。
【００１８】
その後、上記通常のコンパイル結果の命令コード１ライン分を選択して入力し（ステップＳ１０３）、その命令コードの同一ＲＯＭ側にｎｏｐ命令があるか否かを判断する（ステップＳ１０４）。
【００１９】
例えば図２の第１行目の命令コードでは、上位側にｎｏｐ命令があるため、上記ステップＳ１０４でｎｏｐ命令ありと判断し、その時点の変数Ｎｎｕｍの値「０」に従ってバッファＮｏｐＢｕｆの「０」ライン位置の命令コードを格納させると共に、変数Ｎｎｕｍの値「０」を「＋１」更新設定して「１」とした後（ステップＳ１０５）、再び上記ステップＳ１０３からの処理に戻る。図３（Ａ）にこのときの動作を示す。
【００２０】
上記ステップＳ１０３で第２行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令がないと判断し、その時点の変数Ｎｎｕｍの値が「０」であるか否かを判断する（ステップＳ１０６）。
【００２１】
変数Ｎｎｕｍの値が「０」ではなく「１」であるため、次にコンパイラは当該命令コード中にジャンプ命令「ｊ，ｊａｌ，ｊａｌｒ，ｊｒ」のいずれかがあるか否かを判断する（ステップＳ１０７）。
【００２２】
ジャンプ命令がないと判断した場合、上記バッファＮｏｐＢｕｆに格納している命令コード中の全使用レジスタをチェックすると共に、入力したラインの命令コード中でも使用しているレジスタの内容をチェックする（ステップＳ１０８）。
【００２３】
ここでコンパイラは、チェックした命令コード中で使用対象となる同一のレジスタ「ｒｘｘ（ｘｘはレジスタ番号）」があるか否かを判断する（ステップＳ１０９）。
【００２４】
図３（Ｂ）にこのときの動作を示す。ここではレジスタ「ｒ１０」が一致したと判断し、続いてその時点での変数Ｎｎｕｍの値が「２」より大きいか否か、すなわち「３」以上であるか否かを判断する（ステップＳ１１２）。
【００２５】
ここで変数Ｎｎｕｍの値が「３」以上ではなく「１」であるため、上記バッファＮｏｐＢｕｆに格納している命令コードをすべて最終コンパイル結果として出力すると共に（図３（Ｂ）での「出力１」）、変数Ｎｎｕｍの値をクリアして「０」とする（ステップＳ１１４）。
【００２６】
その後、入力ラインの命令コードを最終コンパイル結果として出力する（図３（Ｂ）での「出力２」）（ステップＳ１１５）。  
さらにまだ命令コードが最終ラインではないことを確認した上で（ステップＳ１１６）、上記ステップＳ１０３からの処理に戻る。
【００２７】
上記ステップＳ１０３で第３行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令があると判断し、上記ステップＳ１０５でその時点の変数Ｎｎｕｍの値「０」に従ってバッファＮｏｐＢｕｆの「０」ライン位置の命令コードを格納させると共に、変数Ｎｎｕｍの値「０」を「＋１」更新設定して「１」とした後、再び上記ステップＳ１０３からの処理に戻る。図３（Ｃ）にこのときの動作を示す。
【００２８】
上記ステップＳ１０３で第４行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令がないと判断し、さらに次のステップＳ１０６でその時点の変数Ｎｎｕｍの値が「０」でなく「１」であるとして、上記ステップＳ１０７で当該命令コード中にジャンプ命令があるか否かを判断する。
【００２９】
ジャンプ命令がないと判断した場合、上記ステップＳ１０８で上記バッファＮｏｐＢｕｆに格納している命令コード中の全使用レジスタをチェックすると共に、入力したラインの命令コード中でも使用しているレジスタの内容をチェックし、続く上記ステップＳ１０９でチェックした命令コード中で同一のレジスタがあるか否かを判断する。
【００３０】
図３（Ｄ）にこのときの動作を示す。ここでは同一のレジスタはなく、一致したものがないと判断し、次に上記バッファＮｏｐＢｕｆに格納している命令コード中の全メモリアドレスをチェックすると共に、入力したラインの命令コード中でも使用しているメモリアドレスの内容をチェックし（ステップＳ１１０）、同一のメモリアドレス「♯ｘｘ（ｘｘはメモリアドレス値）」があったか否かを判断する（ステップＳ１１１）。
【００３１】
ここで一致するメモリアドレスがないと判断すると、コンパイラはそのまま上記ステップＳ１１５に進み、入力ラインの命令コードを最終コンパイル結果として出力する（図３（Ｄ）での「出力３」）。さらに上記ステップＳ１１６でまだ命令コードが最終ラインではないことを確認した上で、上記ステップＳ１０３からの処理に戻る。
【００３２】
上記ステップＳ１０３で第５行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令があると判断し、上記ステップＳ１０５でその時点の変数Ｎｎｕｍの値「１」に従ってバッファＮｏｐＢｕｆの「１」ライン位置の命令コードを格納させると共に、変数Ｎｎｕｍの値「１」を「＋１」更新設定して「２」とした後、再び上記ステップＳ１０３からの処理に戻る。図３（Ｅ）にこのときの動作を示す。
【００３３】
上記ステップＳ１０３で第６行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令がないと判断し、さらに次のステップＳ１０６でその時点の変数Ｎｎｕｍの値が「０」でなく「２」であると判断し、さらに続く上記ステップＳ１０７で当該命令コード中にジャンプ命令があるか否かを判断する。
【００３４】
ジャンプ命令がないと判断すると、上記ステップＳ１０８で上記バッファＮｏｐＢｕｆに格納している命令コード中の全使用レジスタをチェックすると共に、入力したラインの命令コード中でも使用しているレジスタの内容をチェックし、続く上記ステップＳ１０９でチェックした命令コード中で同一のレジスタがあるか否かを判断する。
【００３５】
図３（Ｆ）にこのときの動作を示す。ここでは同一のレジスタはなく、一致したものがないと判断し、次に上記ステップＳ１１０でバッファＮｏｐＢｕｆに格納している命令コード中の全メモリアドレスをチェックすると共に、入力したラインの命令コード中でも使用しているメモリアドレスの内容をチェックし、続くステップＳ１１１で同一のメモリアドレスがあったか否かを判断する。
【００３６】
ここで一致するメモリアドレスもないと判断すると、コンパイラはそのまま上記ステップＳ１１５に進み、入力ラインの命令コードを最終コンパイル結果として出力する（図３（Ｆ）での「出力４」）。さらに上記ステップＳ１１６でまだ命令コードが最終ラインではないことを確認した上で、上記ステップＳ１０３からの処理に戻る。
【００３７】
以後同様に処理を順次実行することで、同一のＲＯＭ側、ここでは上位側にｎｏｐ命令を含む命令コードは順次バッファＮｏｐＢｕｆに格納されると共に、変数Ｎｎｕｍの値がインクリメントされる。
【００３８】
また、上位側にｎｏｐ命令を含まない命令コードは順次最終コンパイル結果として上記ステップＳ１１５で出力される。
【００３９】
その後、図３（Ｇ）に示すように上記ステップＳ１０３で第１９行目の命令コードを入力したコンパイラは、続くステップＳ１０４で命令コード中の上位側にｎｏｐ命令がないと判断し、さらに次のステップＳ１０６でその時点の変数Ｎｎｕｍの値が「０」でなく「８」であると判断する。
【００４０】
そして、続く上記ステップＳ１０７で当該命令コード中にジャンプ命令があると判断し、さらに上記ステップＳ１１２で変数Ｎｎｕｍの値「８」が「２」より大きいと判断した上で、バッファＮｏｐＢｕｆ内の最初のｎｏｐ命令をｎｏｐｉとし、これにＮｎｕｍの値「８」を連続数として付加して「ｎｏｐｉ  ８」と書き換える（ステップＳ１１３）。
【００４１】
その後、上記ステップＳ１１４において、バッファＮｏｐＢｕｆに格納している命令コードをすべて最終コンパイル結果として出力すると共に（図３（Ｇ）での「出力１１」〜「出力１８」）、変数Ｎｎｕｍの値をクリアして「０」とする。  
さらに、上記ステップＳ１１５で入力ラインの命令コードを最終コンパイル結果として出力する（図３（Ｇ）での「出力１９」）。
【００４２】
以後、上記同様に処理を順次実行し、最終行目の命令コードを上記ステップＳ１１５で
出力した後、コンパイラは上記ステップＳ１１６でエンドラインであることを判断し、以上で上記図１の一連の処理を終了する。
【００４３】
図４が、上記図１の処理によってコンパイラが出力するプログラムである。第１１行目の命令コードの上位側が「ｎｏｐｉ  ８」命令となっている点を除いて、上記図１２で示したプログラムと同様の内容となる。
【００４４】
図５は上記３２ビットの命令のフォーマット構成を示す。３２ビットの命令は、上記図１３にも記載したＩ，Ｒ，Ｊの３種類のフォーマットのいずれかであるものとする。具体的には、上記図１３に記載した「ｌｈｉ（ｌｏａｄ  ｈｉｇｈ  ｂｉｔｓ：上位ビット読出し命令）」「ｌｗ（ｌｏａｄ  ｗｏｒｄ：ワード読出し命令）」「ｓｗ（ｓｔｏｒｅ  ｗｏｒｄ：ワード格納命令）」の３つの読出し、格納を指示する命令を下位側、それ以外の命令を上位側で実行するものとする。  
上記ｎｏｐｉ命令は図５（Ａ）で示すＩフォーマットとする。
【００４５】
図６は命令コードの生成例を示す。図６（Ａ−１）〜図６（Ａ−３）は、上記図４のプログラムの第２行目の命令コードの上位側の命令  
「ｏｒｉ  ｒ１０，ｒ１０，♯３２７７６（アセンブリ）」、
を上記Ｉフォーマットに従って３２ビットの命令とした場合を示す。
【００４６】
また図６（Ｂ−１）〜図６（Ｂ−３）は、上記図４のプログラムの第１１行目の命令コードの上位側の命令  
「ｎｏｐｉ  ８（アセンブリ）」、
を上記Ｉフォーマットに従って３２ビットの命令とした場合を示す。
【００４７】
次に、上記並び替え処理により得たプログラムをプログラムメモリに格納して実行する並列実行プロセッサについて説明する。  
図７は、本システムに係る並列実行プロセッサ１０の機能回路構成を示すブロック図である。同図で、処理を実行する３２ビットマイクロプロセッサであるＣＰＵ１１が、命令コードの上位側３２ビット分の命令を記憶したプログラムメモリである第１ＲＯＭ１２、同下位側の３２ビット分の命令を記憶した第２ＲＯＭ１３、及びワークメモリであるＲＡＭ１４と接続される。
【００４８】
ＣＰＵ１１には、動作クロックＣＬＫとリセット信号ＲＥＳＥＴとが外部から与えられる。またＣＰＵ１１は、第１ＲＯＭ１２にチップセレクト信号ＲＯＭ１ＣＳを、第２ＲＯＭ１３にチップセレクト信号ＲＯＭ２ＣＳをそれぞれ出力すると共に、各３２ビットのＲＯＭアドレスバスを介して両ＲＯＭ１２，１３にアドレスを指定することで、当該アドレスに格納されていたプログラム命令を各３２ビットのＲＯＭ１データバス、ＲＯＭ２データバスを介して読出す。
【００４９】
さらにＣＰＵ１１は、ＲＡＭ１４に対してチップセレクト信号ＲＡＭＣＳ、読出し信号ＲＡＭＯＥ、書込み信号ＲＡＭＷＥを出力すると共に、アドレスバスを介してアドレスを指定し、当該アドレスへのデータの書込みと読出とを行なう。
【００５０】
図８は、上記ＣＰＵ１１内の並列実行処理を行なうためのブロック構成を示す図である。同図で、第１ＲＯＭ１２からデータバスを介して読出されてきた命令は、データセレクタ（ＤＳ）２１に入力される。このデータセレクタ２１は、後述する第１ＲＯＭ制御部２４から帰還入力されるチップセレクト信号により、第１ＲＯＭ１２からの命令または定数「０」のいずれかを選択して命令レジスタ（ＩＲ）２２に出力する。
【００５１】
命令レジスタ２２の保持する命令は、命令デコーダ（ＩＤ）２３が読出してデコードし、デコード結果を第１ＲＯＭ制御部２４へ出力する共に、デコード結果に応じて適宜プログラムカウンタ（ＰＣ）２５、レジスタファイル（ＲＦ）２６、及び算術演算ユニット（ＡＬＵ）２７をそれぞれ制御する。  
第１ＲＯＭ制御部２４は、上記データセレクタ２１と上記第１ＲＯＭ１２にチップセレクト信号を出力する。
【００５２】
プログラムカウンタ２５のカウント値は、上記第１ＲＯＭ１２及び第２ＲＯＭ１３に指定アドレスとして出力される。算術演算ユニット２７は、命令デコーダ２３からの制御に基づいてレジスタファイル２６とデータを送受しながら指定された演算を実行し、演算結果をレジスタファイル２６へ出力する。
【００５３】
一方、第２ＲＯＭ１２からデータバスを介して読出されてきた命令は、データセレクタ（ＤＳ）２８に入力される。このデータセレクタ２８は、後述する第２ＲＯＭ制御部３１から帰還入力されるチップセレクト信号により、第２ＲＯＭ１３からの命令または定数「０」のいずれかを選択して命令レジスタ（ＩＲ）２９に出力する。
【００５４】
命令レジスタ２９の保持する命令は、命令デコーダ（ＩＤ）３０が読出してデコードし、デコード結果を第２ＲＯＭ制御部３１へ出力する共に、デコード結果に応じて適宜ロードメモリデータレジスタ３２及びＲＡＭ制御部３３と上記レジスタファイル２６とをそれぞれ制御する。  
第２ＲＯＭ制御部３１は、上記データセレクタ２８と上記第２ＲＯＭ１３にチップセレクト信号を出力する。
【００５５】
ＲＡＭ制御部３３は、アドレスバスを介して上記ＲＡＭ１４のアドレス指定を行なうと共に、ＲＡＭ１４に対して上記チップセレクト信号ＲＡＭＣＳ、読出し信号ＲＡＭＯＥ、書込み信号ＲＡＭＷＥを出力する。
【００５６】
上記ロードメモリデータレジスタ３２及びレジスタファイル２６は、データバスを介して上記ＲＡＭ１４と接続され、保持しているデータをＲＡＭ１４へ出力し、またにＲＡＭ１４から出力されてきたデータを保持する。
【００５７】
図９に、上記ｎｏｐｉ命令によってＲＯＭのチップセレクト信号とＣＰＵ１１への処理データとを制御する回路の構成を抽出して示す。これらは、上記第１ＲＯＭ１２と第２ＲＯＭ１３に対して２系統存在する回路を１つに纏めて説明するものである。
【００５８】
第１ＲＯＭ１２（または第２ＲＯＭ１３）から読出されてきた命令がデータバスを介してデータセレクタ２１（または２８）に入力され、データセレクタ２１はＲＯＭ制御部２４（または３１）からのチップセレクト信号により命令または定数「０」のいずれかを選択して命令レジスタ２２（または２９）に出力する。
【００５９】
命令レジスタ２２（または２９）の保持する命令は、命令デコーダ２３（または３０）が読出してデコードし、デコード結果に応じてＲＯＭ制御部２４（または３１）にチップセレクト出力のマスクスタート信号と、チップセレクト出力のマスク回数データとを出力する。
【００６０】
ＲＯＭ制御部２４（または３１）は、命令デコーダ２３（または３０）からのこれらの信号、データにより、開始タイミングと期間とを制御して第１ＲＯＭ１２（または第２ＲＯＭ１３）を一時的に機能停止させることで、無駄な電力の消費を制限する。
【００６１】
次に上記並列実行プロセッサ１０での動作について説明する。  
ここでは上記ＣＰＵ１１によるパイプライン処理が、以下の５つのサイクル、すなわち  
ＩＦ：命令フェッチユニット／サイクル  
ＩＤ：命令デコードユニット／サイクル  
ＥＸ：実行ユニット／実行アドレスサイクル  
ＭＥＭ：メモリアクセスユニット／サイクル  
ＷＢ：レジスタ・ライトバックユニット／サイクル  
から構成される。
【００６２】
命令フェッチユニット／サイクルでは、上記プログラムカウンタ２５のカウント値をＲＯＭアドレスバスに出力し、そのアドレスにある命令を読出して上記命令レジスタ２２，２９に保持させる。プログラムカウンタ２５のカウント値を「＋８」させることで、後続の命令アドレスを指すようにする。上記命令レジスタ２２，２９には、次のクロックサイクルで処理すべき命令が格納される。
【００６３】
命令デコードユニット／サイクルでは、命令をデコードし、レジスタファイル２６にアクセスして必要なレジスタを読み取る。処理すべき命令は上記命令フェッチユニット／サイクルから受け取り、その命令から命令コードとオペランドを展開する。また、必要によりレジスタの内容を取り出す。
【００６４】
実行ユニット／実行アドレスサイクルでは、上記算術演算ユニット２７が前サイクルで用意されたオペランドを使って実際の処理を実行する。具体的には、命令の種別に応じてメモリの参照、レジスタ／レジスタＡＬＵ命令、レジスタ／即値ＡＬＵ命令、分岐などの命令を実行する。
【００６５】
メモリアクセスユニット／サイクルでは、ロード命令、ストア命令、及び分岐命令でメモリにアクセスする。ロード命令であった場合、メモリから読出したデータを上記ロードメモリデータレジスタ３２に保持させる。
【００６６】
レジスタ・ライトバックユニット／サイクルは、ストアユニットとも称され、メモリまたは上記算術演算ユニット２７からの処理結果をレジスタファイル２６に書込ませる。
【００６７】
図１０は、上記５段のパイプライン構造を示す。ここでは縦軸が逐次的な命令列、横軸が時間を示す。図中にハッチングで示す列は、最初のｎ番目の命令では最終段のレジスタ・ライトバックサイクルにあると共に、且つｎ＋４番目の命令をフェッチしている時点を示している。
【００６８】
次に、図１１により、上記図４の第１１行目の命令コード中の上位側、拡張ｎｏｐ命令である「ｎｏｐｉ」命令を実行する際のＣＰＵ１１内でのタイミングチャートを示す。
【００６９】
ＣＰＵ１１では、リセット信号ＲＥＳＥＴが解除されると、第１ＲＯＭ１２及び第２ＲＯＭ１３への各チップセレクト信号ＣＳをイネーブル（Ｈレベル）として、命令コードの読み込みを開始し、各種命令内容の処理を行なう一方で、通常のｎｏｐ命令の場合は何もしない。
【００７０】
命令フェッチ（ＩＦ）サイクルで第１ＲＯＭ１２側から上記「ｎｏｐｉ  ８」命令をフェッチした場合、次の命令デコード（ＩＤ）サイクルで命令デコーダ２３がこれを解析すると、図１１（Ｂ）に示すように第１ＲＯＭ制御部２４へのチップセレクト出力のマスクスタート信号をＨレベルとすると共に、同じく第１ＲＯＭ制御部２４に対し、命令中の数値「８」から、チップセレクトを制御できない期間「２」を減じた結果「６」を図１１（Ｃ）に示すようにチップセレクト出力のマスク回数データとして出力する。
【００７１】
第１ＲＯＭ制御部２４では、その次のサイクルから図１１（Ｄ）に示すように第１ＲＯＭ１２へのチップセレクト信号ＣＳのみをディセーブル（Ｌレベル）とし、図１１（Ｆ）に示すように第１ＲＯＭ１２へのアクセスを停止する。
【００７２】
同時にデータセレクタ２１を制御して定数「０」を選択させ、図１１（Ｇ）に示すように命令レジスタ２２に入力するＣＰＵ処理データをｎｏｐ命令である「０」とする。
【００７３】
この状態をチップセレクト出力のマスク回数データ「６」サイクル分継続させることで、ＣＰＵ１１による第１ＲＯＭ１２のアクセスに要する電力、及び第１ＲＯＭ１２で消費する電力を抑制できる。
【００７４】
以上詳述した如く本実施形態によれば、ｎｏｐ命令が２回より多く連続する場合に、それら連続してｎｏｐ命令が格納されている側のプログラムメモリのチップセレクト信号を非選択にすることで、無駄な電力消費を極力抑えることが可能となる。
【００７５】
また本実施形態に係るコンパイラは、ｎｏｐ命令が２回より多く連続する場合に、連続するｎｏｐ命令の数を定義する拡張ｎｏｐ命令を生成できる。
【００７６】
加えて上記コンパイラは、できるだけｎｏｐ命令が連続するように命令コードの並び替えを行ない、上記並列実行プロセッサ１０がさらなる電力消費を削減するような命令コードを生成できる。
【００７７】
なお、上記実施形態では、並列実行プロセッサ１０として３２ビットマイクロプロセッサの場合について説明したが、本発明はプロセッサの演算ビット数や、プロセッサに接続するプログラムメモリの数等を制限するものではない。
【００７８】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【００７９】
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。  
請求項１記載の発明は、複数のプログラムメモリに格納された複数の命令を一つのコードに含んだ命令コードとして実行する並列実行プロセッサシステムであって、上記命令コード中からｎｏ−ｏｐｅｒａｔｉｏｎ命令（以下「ｎｏｐ命令」）の連続回数を定義する拡張ｎｏｐ命令を検出する検出手段と、上記検出手段で検出した拡張ｎｏｐ命令からｎｏｐ命令の連続回数を取得する回数取得手段と、上記回数取得手段で取得した連続回数から２を減じた命令実行期間、上記拡張ｎｏｐ命令を格納していた上記プログラムメモリを機能抑止するプログラムメモリ制御手段とを備えたことを特徴とする。
【００８０】
請求項２記載の発明は、上記請求項１記載の発明において、上記システムは、ソースプログラムを上記プログラムメモリに格納するための命令に変換して出力するコンパイラを含み、上記コンパイラは、上記ソースプログラムを構成する個々の命令を入力して解析する命令解析手段と、上記命令解析手段に入力した命令がｎｏｐ命令であるか否かを判定するｎｏｐ判定手段と、連続するｎｏｐ命令の数をカウントするカウンタと、上記ｎｏｐ判定手段によりｎｏｐ命令であると判定した場合に上記カウンタの値をプラス１更新し、ｎｏｐ命令ではないと判定した場合は上記カウンタの値をゼロにクリアするカウンタ制御手段と、上記カウンタの値が３以上となる場合、上記連続するｎｏｐ命令の先頭のｎｏｐ命令を、上記カウンタの値に応じてｎｏｐ命令の連続回数を定義する拡張ｎｏｐ命令に置換して出力する拡張ｎｏｐ命令生成手段とを備えたことを特徴とする。
【００８１】
請求項３記載は、上記請求項２記載の発明において、上記コンパイラは、さらに、命令コード中にｎｏｐ命令を含んでいる場合に当該命令コードを一時格納するバッファ手段と、命令コード中にｎｏｐ命令を含んでいない場合は当該命令コード中にジャンプ命令を含んでいるか否かを判定する第１の判定手段と、命令コードで使用するレジスタ及びメモリアドレスが上記バッファ手段に格納している命令コードで使用されているか否かを判定する第２の判定手段と、上記第１の判定手段で上記命令コード中にジャンプ命令を含んでいないと判定し、且つ上記第２の判定手段で上記命令コードで使用するレジスタ及びメモリアドレスのいずれも上記バッファ手段で格納している命令コードで使用していないと判定した場合、当該命令コードをそのまま出力する第１の出力制御手段と、上記第１の判定手段で上記命令コード中にジャンプ命令を含んでいると判定した場合、及び上記第２の判定手段で上記命令コードで使用するレジスタ及びメモリアドレスのいずれかが上記バッファ手段で格納している命令コードで使用していると判定した場合の少なくとも一方で、上記バッファ手段で格納している命令コードを出力した後に、当該命令コードを出力する第２の出力制御手段とを備えたことを特徴とする。
【符号の説明】
【００８２】
１０…並列実行プロセッサ、１１…ＣＰＵ、１２…第１ＲＯＭ、１３…第２ＲＯＭ、１４…ＲＡＭ、２１…データセレクタ（ＤＳ）、２２…命令レジスタ（ＩＲ）、２３…命令デコーダ（ＩＤ）、２４…第１ＲＯＭ制御部、２５…プログラムカウンタ（ＰＣ）、２６…レジスタファイル（ＲＦ）、２７…算術演算ユニット（ＡＬＵ）、２８…データセレクタ（ＤＳ）、２９…命令レジスタ（ＩＲ）、３０…命令デコーダ、３１…第２ＲＯＭ制御部、３２…ロードメモリデータレジスタ（ＲＭＤＲ）、３３…ＲＡＭ制御部。
【図１】
2014119957.tif 000003
【図２】
2014119957.tif 000004
【図３】
2014119957.tif 000005
【図４】
2014119957.tif 000006
【図５】
2014119957.tif 000007
【図６】
2014119957.tif 000008
【図７】
2014119957.tif 000009
【図８】
2014119957.tif 000010
【図９】
2014119957.tif 000011
【図１０】
2014119957.tif 000012
【図１１】
2014119957.tif 000013
【図１２】
2014119957.tif 000014
【図１３】
2014119957.tif 000015