(57)【要約】【課題】急激な電流変動の発生を低コストで抑制し、半導体集積回路の誤動作を抑制する。【解決手段】回路資源に対する省電力制御が行われるとともに浮動小数点演算を実行する浮動小数点演算部と、浮動小数点演算命令に対応するプリアクセス命令を受けて、浮動小数点演算部が有する回路資源に対する省電力制御を段階的に無効化して浮動小数点演算部の回路資源の一部を動作させる電力制御命令制御部と、浮動小数点演算部に浮動小数点演算処理を実行させる制御部とを備え、浮動小数点演算部で浮動小数点演算処理を実行する前に、プリアクセス命令により予め消費電力を増加させ、浮動小数点演算処理の実行に係る急激な電流変動の発生を抑制する。【選択図】図３
2014059761.tif 000002
【特許請求の範囲】
【請求項１】
命令に応じて所定の処理を実行する演算部であって、当該演算部が有する複数の回路資源に対して消費電力の低減に係る省電力制御が行われる演算部と、
前記演算部の回路資源を使用して処理が実行される第１の命令に対応する第２の命令を受けて、前記第１の命令に応じた処理で使用される前記回路資源の一部を動作させる第１の制御部と、
前記第１の命令を受けて、当該第１の命令に応じた処理を前記演算部に実行させる第２の制御部とを有することを特徴とする半導体集積回路。
【請求項２】
前記第１の制御部は、前記第１の命令に対応する第３の命令を受けて、前記第１の命令を受けたことによって動作している前記回路資源の一部の動作を停止させることを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記第１の制御部は、前記第１の命令に応じた処理が前記演算部で実行されてからの経過サイクル数をカウントするカウンタ部を有し、
前記カウンタ部によりカウントされた経過サイクル数が、設定したサイクル数以上である場合には、前記第１の命令を受けたことによって動作している前記回路資源の一部の動作を停止させることを特徴とする請求項１記載の半導体集積回路。
【請求項４】
前記第２の命令には、当該第２の命令により動作させる前記回路資源を指定する情報を含み、
前記第１の制御部は、受けた前記第２の命令に従って、複数の前記回路資源の内の指定された前記回路資源を動作させることを特徴とする請求項１〜３記載の半導体集積回路。
【請求項５】
前記第２の命令には、当該第２の命令により動作させる前記回路資源を指定する情報を含み、
前記第１の制御部は、受けた前記第２の命令に従って、複数の前記回路資源の内の指定された前記回路資源を動作させ、
かつ前記第３の命令には、当該第３の命令により動作を停止させる前記回路資源を指定する情報を含み、
前記第１の制御部は、受けた前記第３の命令に従って、複数の前記回路資源の内の指定された前記回路資源の動作を停止させることを特徴とする請求項２記載の半導体集積回路。
【請求項６】
ソースプログラムを読み込んで字句を解析する字句解析処理と、
前記字句解析処理での解析結果に基づいて、前記ソースプログラムの構文を解析する構文解析処理と、
前記構文解析処理で解析された前記ソースプログラムの意味を解析する意味解析処理と、
前記意味解析処理での解析結果に基づいて最適化を行う最適化処理と、
前記最適化処理の結果を用いて実行可能形式のオブジェクトコードを生成するコード生成処理とをコンピュータに実行させ、
前記コード生成処理は、半導体集積回路が有する消費電力の低減に係る省電力制御が行われる演算部の複数の回路資源を使用して処理が実行される第１の命令を検出する検出ステップと、
前記検出ステップにて検出された前記第１の命令の前方に、前記第１の命令に応じた処理で使用される前記回路資源の一部を動作させる第２の命令を挿入する第２の命令挿入ステップとを含むことを特徴とするコンパイラ。
【請求項７】
前記コード生成処理は、前記検出ステップにて検出された前記第１の命令の間隔を検出し、当該間隔が設定値以上である場合には、先の前記第１の命令の後方に、前記第１の命令に応じた処理で動作する前記回路資源の一部の動作を停止させる第３の命令を挿入する第３の命令挿入ステップとを含むことを特徴とする請求項６記載のコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路及びコンパイラに関する。
【背景技術】
【０００２】
半導体集積回路においては、クロックゲーティングやＲＡＭ（Random Access Memory）マクロのチップイネーブル制御などの手法により、使用しない回路が動作することを抑制して消費電力を低減し低消費電力化する手法が一般的に使用されている。例えば、特定の回路ブロックのクロックを制御し、その回路ブロックを使用しない場合にはクロックや電源の供給を遮断し、その回路ブロックを使用する場合にはクロックや電源の供給を行うことで、消費電力を低減している。
【０００３】
しかし、これらの手法で低消費電力化を図ると、半導体集積回路が消費する最大電力と最小電力との差が大きくなるため、回路を流れる最大電流と最小電流との差も大きくなる。これは、電源ノイズの増大に繋がり、半導体集積回路において、回路が誤動作する原因になったり、低消費電力化手法の積極的な導入の妨げになったりしてしまう。また、ＳＩＭＤ（Single Instruction Multiple Data）命令など、１つの命令で複数の演算を行う命令を実行する場合には、複数の演算器、ＲＡＭマクロやレジスタファイル等の回路資源を同時に動作させるために急激な電流変動が発生する。ダイ、パッケージ、ボードで構成される電源系において、そのインピーダンスが高い周波数帯での電流変動が発生すると電源ノイズが大きくなる。このような電源ノイズを抑制する対策として、ダイやパッケージあるいはボード上にデカップリングキャパシタを搭載し、電流変動が発生しても、電源ノイズが許容値以下になるようにしていた。
【０００４】
図１２は、従来のプロセッサにおけるパイプライン動作と、その動作時の電流波形及び電源電圧波形の例を示す図である。図１２においては、命令フェッチステージＦ、命令デコードステージＤ、演算実行ステージＥ、及びレジスタ書き込みステージＷの４段のパイプライン動作を一例として示している。論理演算のような消費電力が小さい命令Ｉ１１、Ｉ１２、Ｉ１５、Ｉ１６と、浮動小数点演算やＳＩＭＤ命令のような消費電力が大きい命令Ｉ１３、Ｉ１４とが混在して実行された場合、消費電力が大きい命令の演算が実行される期間に、電流は大きくなる。そのため、図１２において電源電圧波形に示すように電源ノイズが発生して、電源電圧が許容上限値ＶＨや許容下限値ＶＬを超えてしまう場合がある。このような場合、従来は、前述のようにプロセッサ内部やパッケージ等にデカップリングキャパシタを搭載して電源ノイズを抑制していた。
【０００５】
このような大きな電流変動は、次のような場合に起こりうる。例えば、プロセッサ内の高速性が要求される演算器などで、しきい値電圧が低く、高速ではあるがリーク電流が大きいトランジスタを使用すると、消費電力を低減するために以下のような制御を行うことが考えられる。演算器を使用しない期間のリーク電流を抑えるために、演算器のみパワーゲーティングを行ったり、演算器を使用しない期間のダイナミック電力を抑えるために、演算器の無駄な動作が起きないよう、演算器にデータを供給する経路上のレジスタのクロックゲーティングを行ったりデータ経路のデータゲーティングを行ったりする。このような場合に、パワーゲーティングやクロックゲーティングやデータゲーティングの設定動作や解除動作が急速であると、急激な電流変動が発生してパワーインテグリティ（電源品質）が損なわれてしまい、回路が誤動作する原因になる可能性がある。
【０００６】
実際のデータ処理やデータ格納に使用する回路とは別の、回路電流を制御する回路を用いて電流を発生し、電力切り換え時における電流変動を抑制する技術が提案されている（例えば、特許文献１参照）。また、命令の種類により各回路資源が動作するか否かに関する情報が記録されたテーブルを用いて命令プログラムを解析し、解析結果に基づいて電力制御命令を挿入するコンパイラ等の命令変換技術や、プロセッサに実行される命令を判断して命令実行時に使用しない回路ブロックに対する電流供給を制限する技術が提案されている（例えば、特許文献２〜４参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−２３５２０３号公報
【特許文献２】特開２００４−３１８５０２号公報
【特許文献３】特開２００３−２９６１２３号公報
【特許文献４】特開平１−１５５４５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
前述のように従来は、ダイやパッケージあるいはボード上にデカップリングキャパシタを搭載して、電流変動による電源ノイズを抑制していた。しかし、今後、テクノロジの微細化の進展により低電圧大電流化が進み、半導体集積回路における単位時間あたりの電流変動量が大きくなると、前述した従来の対応策では電源ノイズを抑制するために必要なキャパシタの容量も増える。必要なキャパシタの容量の増大は、ダイサイズの増大や、パッケージ上あるいはボード上に搭載するキャパシタ部品の増加を招きコストを増大させる原因となる。
【０００９】
本発明は、急激な電流変動の発生を低コストで抑制し、半導体集積回路の誤動作を抑制できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
半導体集積回路の一態様は、命令に応じて所定の処理を実行し、内部に有する複数の回路資源に対して省電力制御が行われる演算部と、演算部の回路資源を使用して処理が実行される第１の命令に対応する第２の命令を受けて、第１の命令に応じた処理で使用される回路資源の一部を動作させる第１の制御部と、第１の命令を受けて、それに応じた処理を演算部に実行させる第２の制御部とを有する。
【発明の効果】
【００１１】
開示の半導体集積回路は、第１の命令に応じた処理で使用される回路資源の一部を、第１の命令に対応する第２の命令によって動作させて消費電力を予め増加させることができ、急激な電流変動の発生を低コストで抑制し、電源ノイズによる誤動作を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態における半導体集積回路の構成例を示す図である。
【図２】本実施形態における命令コードの一例を示す図である。
【図３】本実施形態における電力制御に係る機構を説明するための図である。
【図４】本実施形態におけるレジスタファイルに対するクロック制御の例を示す図である。
【図５】本実施形態における演算スロットに対するクロック制御の例を示す図である。
【図６】本実施形態における半導体集積回路の動作例を示すフローチャートである。
【図７】本実施形態における半導体集積回路でのパイプライン動作と、電流波形及び電源電圧波形の例を示す図である。
【図８】本実施形態における半導体集積回路の他の動作例を示すフローチャートである。
【図９】図８に示す動作例に対応する半導体集積回路の状態遷移を説明するための図である。
【図１０】本実施形態におけるコンパイラの処理フローを示す図である。
【図１１】本実施形態におけるコンパイラの処理例を示すフローチャートである。
【図１２】従来のプロセッサにおけるパイプライン動作と、電流波形及び電源電圧波形の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態における半導体集積回路としてのプロセッサの構成例を示すブロック図である。本実施形態におけるプロセッサ１は、例えばクロックゲーティングを利用した省電力制御を行う。プロセッサ１は、制御部１０、キャッシュ部２０、バス部３０、浮動小数点演算部４０、整数演算部５０、クロック生成部６０、及び電力制御命令制御部７０を有する。
【００１４】
制御部１０は、プロセッサの制御を行う。制御部１０は、命令フェッチ部１１、命令デコード部１２、命令発行部１３、及びパイプライン制御部１４を有する。命令フェッチ部１１は、命令キャッシュ２１から命令を読み出して（フェッチして）命令デコード部１２に出力する。命令デコード部１２は、供給される命令をデコードして命令発行部１３に出力する。命令発行部１３は、デコードされた命令の実行をプロセッサ１内の演算部４０、５０等に対して指示する。パイプライン制御部１４は、浮動小数点演算や整数演算等に係るパイプラインの制御を行うとともに、クロックゲーティング制御信号を出力しクロックゲーティングの制御を行う。
【００１５】
キャッシュ部２０は、外部のメモリ（主記憶装置）等からバス部３０を介して入力される命令を格納する命令キャッシュ２１と、バス部３０を介して外部から入力されるデータを格納するとともに外部に出力するデータを格納するデータキャッシュ２２とを有する。バス部３０は、外部のメモリ（主記憶装置）やシステムバスとのインタフェース部である。バス部３０は、内部バスのバスインタフェース３１、メモリインタフェース３２、及びシステムバスインタフェース３３を有する。
【００１６】
浮動小数点演算部４０は、制御部１０による制御に応じて浮動小数点演算を実行する。浮動小数点演算部４０は、浮動小数点演算スロット４１Ａ、４１Ｂ、浮動小数点レジスタファイル（floating point register file：ＦＰＲ）４２、及びマルチプレクサ４３を有する。浮動小数点演算スロット４１Ａ、４１Ｂは、それぞれ演算器を有し、供給されるデータを用いて浮動小数点演算を行い、演算結果を出力する。浮動小数点レジスタファイル４２は、浮動小数点演算に用いられるデータや演算結果を保持する。マルチプレクサ４３は、浮動小数点演算の実行に際し、浮動小数点演算スロット４１Ａ、４１Ｂや浮動小数点レジスタファイル４２に入力されるデータの制御を行う。
【００１７】
整数演算部５０は、制御部１０による制御に応じて整数演算を実行する。整数演算部５０は、整数演算スロット５１Ａ、５１Ｂ、汎用レジスタファイル（general purpose register file：ＧＰＲ）５２、及びマルチプレクサ５３を有する。整数演算スロット５１Ａ、５１Ｂは、それぞれ演算器を有し、供給されるデータを用いて整数演算を行い、演算結果を出力する。汎用レジスタファイル５２は、整数演算に用いられるデータや演算結果を保持する。マルチプレクサ５３は、整数演算の実行に際し、整数演算スロット５１Ａ、５１Ｂや汎用レジスタファイル５２に入力されるデータの制御を行う。
【００１８】
なお、図１においては、浮動小数点演算部４０が２つの浮動小数点演算スロット４１Ａ、４１Ｂを有し、整数演算部５０が２つの整数演算スロット５１Ａ、５１Ｂを有する例を示したが、これに限定されるものではない。浮動小数点演算部４０が有する浮動小数点演算スロットの数、及び整数演算部５０が有する整数演算スロットの数は、それぞれ任意である。
【００１９】
クロック生成部６０は、プロセッサ１の内部で使用するクロックを生成する。電力制御命令制御部７０は、消費電力の制御に係る電力制御命令に応じて電力制御信号を出力し、演算部４０、５０等の回路資源に対する省電力制御を段階的に無効化したり有効化したりする。電力制御命令には、回路資源の一部をダミーで動作させることにより、その回路資源に対する省電力制御を段階的に無効化するプリアクセス命令や、その回路資源に対する省電力制御を段階的に有効化するアクセスエンド命令がある。プリアクセス命令及びアクセスエンド命令は、消費電力が大きい命令に対応している。なお、以下では、消費電力が大きい命令の一例として浮動小数点演算命令を例に説明するが、これに限定されるものではない。消費電力が大きい命令が、浮動小数点演算命令とロード命令などのように複数ある場合には、それぞれの命令に対応するプリアクセス命令及びアクセスエンド命令を持つことができる。
【００２０】
図２（Ａ）は、本実施形態における命令コードの一例を示す図である。図２（Ａ）において、Instruction_A_type、Instruction_B_type、Instruction_C_type、Instruction_D_type、Instruction_E_typeのそれぞれは、消費電力が小さい命令である。また、Instruction_F_type、Instruction_G_typeのそれぞれは、パワーインテグリティを損なうおそれのある回路資源を使用するような消費電力が大きい命令である。Instruction_pre_access_F_typeは命令Instruction_F_typeに対応するプリアクセス命令であり、Instruction_access_end_F_typeは命令Instruction_F_typeに対応するアクセスエンド命令である。また、Instruction_pre_access_G_typeは命令Instruction_G_typeに対応するプリアクセス命令であり、Instruction_access_end_G_typeは命令Instruction_G_typeに対応するアクセスエンド命令である。
【００２１】
本実施形態においては、消費電力が大きい命令１０１を実行する前に、その命令に対応するプリアクセス命令１０２を予め実行する。また、消費電力が大きい命令１０１の実行に際し、次にそれと同じ命令を実行するまでの間隔が設定値以上である場合には、命令の実行が終了した後に、その命令に対応するアクセスエンド命令１０３を実行する。すなわち、パワーインテグリティを損なうおそれのある回路資源を使用するような急激な電流変動を引き起こす原因になる命令を実行する前に、その命令に対応するプリアクセス命令を予め実行して、徐々に消費電力を大きくしておく。これにより、急激な電流変動を引き起こす原因になる命令を実行した際の電流変動を小さくし、パワーインテグリティを確保することができる。また、急激な電流変動を引き起こす原因になる命令の実行が終了した場合には、その命令に対応するアクセスエンド命令を実行し、段階的に消費電力が小さくなるようにすることで、急激な電流変動を抑制し、パワーインテグリティを確保することができる。また、消費電力が大きい命令を実行する時点からある程度離れた時点である数サイクル前にプリアクセス命令を実行することで、性能のペナルティが発生することもなく、性能を劣化させずにパワーインテグリティを確保することができる。なお、プリアクセス命令やアクセスエンド命令を実行しても、プロセッサのステータスやメモリの内容やレジスタのデータなどのソフトウェアから観測可能なプロセッサの状態は変化しない。
【００２２】
プリアクセス命令によって増加させる消費電力の増加量は、デカップリングキャパシタの搭載量を少なくするコストの観点からは、プリアクセス命令自体、及びこのプリアクセス命令に対応する後続の命令の実行によって発生する電流変動量を小さくするために、プリアクセス命令を実行することなく命令を実行した場合に増加する電力量の２分の１とすることが望ましい。これにより、プリアクセス命令、及びこのプリアクセス命令に対応する後続の命令をそれぞれ実行したときに発生する電流変動量を２分の１にすることができ、電源ノイズによる電圧変動量を２分の１にすることができる。また、消費電力の観点からは、プリアクセス命令によって増加させる消費電力の増加量を少なくしても、対応する後続の命令の実行により発生する電流変動量が、電源ノイズの許容値を満足できる場合には、消費電力の増加量は可能な限り少ないことが望ましい。また、同様にアクセスエンド命令により減少させる消費電力の量は、コストの観点からはアクセスエンド命令を実行することなく命令実行後に減少する電力量の２分の１とすることが望ましく、消費電力の観点からは、可能な限り多く減少させることが望ましい。
【００２３】
ここで、図２（Ｂ）に示すように、プリアクセス命令は、命令で動作させる、すなわち省電力制御を無効化する回路資源やモジュールを指定できるフィールド１０４を持つようにしても良い。また同様に、アクセスエンド命令は、命令で動作を停止させる、すなわち省電力制御を有効化する回路資源やモジュールを指定できるフィールド１０５を持つようにしても良い。また、プリアクセス命令のフィールド１０４やアクセスエンド命令のフィールド１０５に、各命令が対応する命令を指定できるようにしても良い。
【００２４】
図３は、本実施形態における電力制御に係る機構を説明するための図である。図３においては、浮動小数点演算についての電力制御に係る機構を一例として示している。図３において、図１に示した構成要素と同一の構成要素には同一の符号を付し、重複する説明は省略する。図３に示すように、電力制御命令制御部７０は、ステートマシン部７１、電力制御信号生成部７２、及びカウンタ部７３を有する。
【００２５】
パイプライン制御部１４は、命令発行部１３の出力に応じて、クロックゲーティングを利用した省電力制御を行うためのクロックゲーティング制御信号ＣＧＣ１、ＣＧＣ２、ＣＧＣ３を生成し出力する。クロックゲーティング制御信号ＣＧＣ１が、浮動小数点レジスタファイル４２に入力される。また、クロックゲーティング制御信号ＣＧＣ２が、浮動小数点演算スロットＡ４１Ａに入力され、クロックゲーティング制御信号ＣＧＣ３が、浮動小数点演算スロットＢ４１Ｂに入力される。クロックゲーティング制御信号ＣＧＣ１、ＣＧＣ２、ＣＧＣ３の各々は、入力される浮動小数点レジスタファイル４２や浮動小数点演算スロット４１Ａ、４１Ｂを動作させるときにハイレベルとされる。
【００２６】
ステートマシン部７１は、命令発行部１３から出力される命令処理リクエスト信号ＩＲＥＱ及び命令処理オペコード信号ＩＯＰＣが入力される。ステートマシン部７１は、命令処理リクエスト信号ＩＲＥＱ及び命令処理オペコード信号ＩＯＰＣやカウンタ部７３の出力に応じてステートを制御する。ステートマシン部７１は、例えば浮動小数点演算命令に対応するプリアクセス命令に係る命令処理リクエスト信号ＩＲＥＱ及び命令処理オペコード信号ＩＯＰＣが入力されると、ステートを浮動小数点演算部４０の省電力制御を一部無効化する状態に変化させる。また、ステートマシン部７１は、例えば浮動小数点演算命令に対応するアクセスエンド命令に係る命令処理リクエスト信号ＩＲＥＱ及び命令処理オペコード信号ＩＯＰＣが入力されると、ステートを浮動小数点演算部４０の省電力制御を一部有効化する状態に変化させる。
【００２７】
電力制御信号生成部７２は、ステートマシン部７１の出力に応じて、電力制御信号ＰＷＣ１、ＰＷＣ２、ＰＷＣ３を生成し出力する。電力制御信号ＰＷＣ１が、浮動小数点レジスタファイル４２に入力され、電力制御信号ＰＷＣ２が、浮動小数点演算スロットＡ４１Ａに入力され、電力制御信号ＰＷＣ３が、浮動小数点演算スロットＢ４１Ｂに入力される。電力制御信号ＰＷＣ１、ＰＷＣ２、ＰＷＣ３の各々は、入力される浮動小数点レジスタファイル４２や浮動小数点演算スロット４１Ａ、４１Ｂを電力調整のためにダミーで動作させるときにハイレベルとされる。言い換えれば、電力制御信号ＰＷＣ１、ＰＷＣ２、ＰＷＣ３の各々は、プリアクセス命令やアクセスエンド命令によって制御され活性化／非活性化される。カウンタ部７３は、例えば浮動小数点演算命令が無実行であるサイクルをカウントするカウンタやプリアクセス命令処理リクエストを受信してからの経過サイクルをカウントするカウンタなどを有する。
【００２８】
図４は、本実施形態におけるレジスタファイルでの電力制御に係るクロック制御の例を示す図である。図４においては、浮動小数点レジスタファイル４２が、動作状態とするか非動作状態とするかをそれぞれ制御可能な２つのレジスタファイル部４２Ａ、４２Ｂを有する例を一例として示している。
【００２９】
レジスタファイル部４２Ａ、４２Ｂの各々は、クロックバッファ２０１、リードアドレスＲＡＤ用のフリップフロップ２０２、ライトアドレスＷＡＤ用のフリップフロップ２０３、ライトデータＷＤＴ用のフリップフロップ２０４、及びレジスタ群２０５を有する。フリップフロップ２０２、２０３、２０４の各々には、クロックバッファ２０１を介してクロックが供給される。
【００３０】
論理和演算回路（ＯＲ回路）２１１Ａは、レジスタファイル部４２Ａに対応するクロックイネーブル信号ＣＬＫＥＮＡ及び電力制御信号ＰＷＲＣＡが入力され、その演算結果を出力する。クロックイネーブル信号ＣＬＫＥＮＡは、図３に示したクロックゲーティング制御信号ＣＧＣ１に相当し、電力制御信号ＰＷＲＣＡは、図３に示した電力制御信号ＰＷＣ１に基づく信号である。論理積演算回路（ＡＮＤ回路）２１２Ａは、クロックＣＬＫ及びＯＲ回路２１１Ａの出力が入力され、その演算結果を出力する。ＡＮＤ回路２１２Ａの出力がレジスタファイル部４２Ａのクロックバッファ２０１に入力される。
【００３１】
同様に、ＯＲ回路２１１Ｂは、レジスタファイル部４２Ｂに対応するクロックイネーブル信号ＣＬＫＥＮＢ及び電力制御信号ＰＷＲＣＢが入力され、その演算結果を出力する。クロックイネーブル信号ＣＬＫＥＮＢは、図３に示したクロックゲーティング制御信号ＣＧＣ１に相当し、電力制御信号ＰＷＲＣＢは、図３に示した電力制御信号ＰＷＣ１に基づく信号である。ＡＮＤ回路２１２Ａは、クロックＣＬＫ及びＯＲ回路２１１Ｂの出力が入力され、その演算結果を出力する。ＡＮＤ回路２１２Ｂの出力がレジスタファイル部４２Ｂのクロックバッファ２０１に入力される。
【００３２】
すなわち、クロックイネーブル信号ＣＬＫＥＮＡ及び電力制御信号ＰＷＲＣＡの少なくとも一方がハイレベルであるときには、レジスタファイル部４２Ａのフリップフロップ２０２、２０３、２０４にクロックが供給される。また、クロックイネーブル信号ＣＬＫＥＮＡ及び電力制御信号ＰＷＲＣＡがともにローレベルであるときには、レジスタファイル部４２Ａのフリップフロップ２０２、２０３、２０４へのクロックの供給が遮断される。同様に、クロックイネーブル信号ＣＬＫＥＮＢ及び電力制御信号ＰＷＲＣＢの少なくとも一方がハイレベルであるときには、レジスタファイル部４２Ｂのフリップフロップ２０２、２０３、２０４にクロックが供給される。また、クロックイネーブル信号ＣＬＫＥＮＢ及び電力制御信号ＰＷＲＣＢがともにローレベルであるときには、レジスタファイル部４２Ｂのフリップフロップ２０２、２０３、２０４へのクロックの供給が遮断される。
【００３３】
ここで、例えば浮動小数点演算命令の実行時にクロックイネーブル信号ＣＬＫＥＮＡ、ＣＬＫＥＮＢがともにハイレベルにされてレジスタファイル部４２Ａ、４２Ｂでデータの読み書きが行われるとする。また、省電力制御における消費電力低減状態時にはクロックイネーブル信号ＣＬＫＥＮＡ、ＣＬＫＥＮＢがともにローレベルにされてレジスタファイル部４２Ａ、４２Ｂがともに非動作状態にされるものとする。
【００３４】
このような場合には浮動小数点演算命令に対応するプリアクセス命令が実行されたときに、電力制御信号ＰＷＲＣＡ又はＰＷＲＣＢの一方をハイレベルとすることで、レジスタファイル部４２Ａ、４２Ｂの一方にクロックを供給して動作させ消費電力を増加させる。これにより、浮動小数点演算命令の実行に係る消費電力を段階的に増加させ、急激な電流変動を抑制し、パワーインテグリティを確保することができる。
【００３５】
また、浮動小数点演算命令に対応するアクセスエンド命令が実行されたときは、電力制御信号ＰＷＲＣＡ又はＰＷＲＣＢの一方をハイレベルとし他方をローレベルとすることで、レジスタファイル部４２Ａ、４２Ｂの一方はクロックを供給して動作させ、他方はクロックの供給を遮断して動作を停止させる。その後、電力制御信号ＰＷＲＣＡ及びＰＷＲＣＢをともにローレベルとすることで、レジスタファイル部４２Ａ、４２Ｂへのクロックの供給を遮断して非動作状態にする。これにより、浮動小数点演算命令の実行後において、消費電力を段階的に小さくして急激な電流変動を抑制し、パワーインテグリティを確保することができる。
【００３６】
図５は、本実施形態における演算スロットでの電力制御に係るクロック制御の例を示す図である。図５に示すように浮動小数点演算スロット４１Ａ、４１Ｂの各々は、入力データ（ＩＤＡ０、ＩＤＢ０）用のフリップフロップ３０１、入力データ（ＩＤＡ１、ＩＤＢ１）用のフリップフロップ３０２、演算器３０３、及び出力データ（ＯＤＡ、ＯＤＢ）用のフリップフロップ３０４を有する。
【００３７】
ＯＲ回路３１１Ａは、浮動小数点演算スロットＡ４１Ａに対応するクロックイネーブル信号ＣＬＫＥＮＩＡ及び電力制御信号ＰＷＲＣＩＡが入力され、その演算結果を出力する。ＡＮＤ回路３１２Ａは、クロックＣＬＫ及びＯＲ回路３１１Ａの出力が入力され、その演算結果を出力する。ＡＮＤ回路３１２Ａの出力が、浮動小数点演算スロットＡ４１Ａの入力データ用のフリップフロップ３０１、３０２にクロックとして入力される。また、ＯＲ回路３１３Ａは、浮動小数点演算スロットＡ４１Ａに対応するクロックイネーブル信号ＣＬＫＥＮＯＡ及び電力制御信号ＰＷＲＣＯＡが入力され、その演算結果を出力する。ＡＮＤ回路３１４Ａは、クロックＣＬＫ及びＯＲ回路３１３Ａの出力が入力され、その演算結果を出力する。ＡＮＤ回路３１４Ａの出力が、浮動小数点演算スロットＡ４１Ａの出力データ用のフリップフロップ３０４にクロックとして入力される。クロックイネーブル信号ＣＬＫＥＮＩＡ、ＣＬＫＥＮＯＡは、図３に示したクロックゲーティング制御信号ＣＧＣ２に相当し、電力制御信号ＰＷＲＣＩＡ、ＰＷＲＣＯＡは、図３に示した電力制御信号ＰＷＣ２に相当する。
【００３８】
すなわち、クロックイネーブル信号ＣＬＫＥＮＩＡ及び電力制御信号ＰＷＲＣＩＡの少なくとも一方がハイレベルであるときには、浮動小数点演算スロットＡ４１Ａの入力データ用のフリップフロップ３０１、３０２にクロックが供給される。一方、クロックイネーブル信号ＣＬＫＥＮＩＡ及び電力制御信号ＰＷＲＣＩＡがともにローレベルであるときには、浮動小数点演算スロットＡ４１Ａの入力データ用のフリップフロップ３０１、３０２へのクロックの供給が遮断される。また、クロックイネーブル信号ＣＬＫＥＮＯＡ及び電力制御信号ＰＷＲＣＯＡの少なくとも一方がハイレベルであるときには、浮動小数点演算スロットＡ４１Ａの出力データ用のフリップフロップ３０４にクロックが供給される。一方、クロックイネーブル信号ＣＬＫＥＮＯＡ及び電力制御信号ＰＷＲＣＯＡがともにローレベルであるときには、浮動小数点演算スロットＡ４１Ａの出力データ用のフリップフロップ３０４へのクロックの供給が遮断される。
【００３９】
同様に、ＯＲ回路３１１Ｂは、浮動小数点演算スロットＢ４１Ｂに対応するクロックイネーブル信号ＣＬＫＥＮＩＢ及び電力制御信号ＰＷＲＣＩＢが入力され、その演算結果を出力する。ＡＮＤ回路３１２Ｂは、クロックＣＬＫ及びＯＲ回路３１１Ｂの出力が入力され、その演算結果を出力する。ＡＮＤ回路３１２Ｂの出力が、浮動小数点演算スロットＢ４１Ｂの入力データ用のフリップフロップ３０１、３０２にクロックとして入力される。また、ＯＲ回路３１３Ｂは、浮動小数点演算スロットＢ４１Ｂに対応するクロックイネーブル信号ＣＬＫＥＮＯＢ及び電力制御信号ＰＷＲＣＯＢが入力され、その演算結果を出力する。ＡＮＤ回路３１４Ｂは、クロックＣＬＫ及びＯＲ回路３１３Ｂの出力が入力され、その演算結果を出力する。ＡＮＤ回路３１４Ｂの出力が、浮動小数点演算スロットＢ４１Ｂの出力データ用のフリップフロップ３０４にクロックとして入力される。クロックイネーブル信号ＣＬＫＥＮＩＢ、ＣＬＫＥＮＯＢは、図３に示したクロックゲーティング制御信号ＣＧＣ３に相当し、電力制御信号ＰＷＲＣＩＢ、ＰＷＲＣＯＢは、図３に示した電力制御信号ＰＷＣ３に相当する。
【００４０】
すなわち、クロックイネーブル信号ＣＬＫＥＮＩＢ及び電力制御信号ＰＷＲＣＩＢの少なくとも一方がハイレベルであるときには、浮動小数点演算スロットＢ４１Ｂの入力データ用のフリップフロップ３０１、３０２にクロックが供給される。一方、クロックイネーブル信号ＣＬＫＥＮＩＢ及び電力制御信号ＰＷＲＣＩＢがともにローレベルであるときには、浮動小数点演算スロットＢ４１Ｂの入力データ用のフリップフロップ３０１、３０２へのクロックの供給が遮断される。また、クロックイネーブル信号ＣＬＫＥＮＯＢ及び電力制御信号ＰＷＲＣＯＢの少なくとも一方がハイレベルであるときには、浮動小数点演算スロットＢ４１Ｂの出力データ用のフリップフロップ３０４にクロックが供給される。一方、クロックイネーブル信号ＣＬＫＥＮＯＢ及び電力制御信号ＰＷＲＣＯＢがともにローレベルであるときには、浮動小数点演算スロットＢ４１Ｂの出力データ用のフリップフロップ３０４へのクロックの供給が遮断される。
【００４１】
ここで、例えば浮動小数点演算命令の実行時にクロックイネーブル信号ＣＬＫＥＮＩＡ、ＣＬＫＥＮＯＡ、ＣＬＫＥＮＩＢ、ＣＬＫＥＮＯＢのすべてがハイレベルにされて浮動小数点演算スロット４１Ａ、４１Ｂで浮動小数点演算が行われるとする。また、省電力制御における消費電力低減状態時にはクロックイネーブル信号ＣＬＫＥＮＩＡ、ＣＬＫＥＮＯＡ、ＣＬＫＥＮＩＢ、ＣＬＫＥＮＯＢのすべてがローレベルにされて浮動小数点演算スロット４１Ａ、４１Ｂがともに非動作状態にされるものとする。
【００４２】
このような場合には浮動小数点演算命令に対応するプリアクセス命令が実行されたときに、電力制御信号ＰＷＲＣＩＡ又はＰＷＲＣＩＢの一方、及び電力制御信号ＰＷＲＣＯＡ又はＰＷＲＣＯＢの一方をハイレベルとする。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの内の一方の演算スロットの入力データ用のフリップフロップ３０１、３０２、及び出力データ用のフリップフロップ３０４にクロックを供給して動作させ消費電力を増加させる。したがって、浮動小数点演算命令の実行に係る消費電力を段階的に増加させ、急激な電流変動を抑制し、パワーインテグリティを確保することができる。
【００４３】
また、浮動小数点演算命令に対応するアクセスエンド命令が実行されたときは、電力制御信号ＰＷＲＣＩＡ又はＰＷＲＣＩＢの一方、及び電力制御信号ＰＷＲＣＯＡ又はＰＷＲＣＯＢの一方をハイレベルとし、他方をローレベルとする。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの内の一方の演算スロットの入力データ用のフリップフロップ３０１、３０２、及び出力データ用のフリップフロップ３０４にクロックを供給して動作させる。浮動小数点演算スロット４１Ａ、４１Ｂの内の他方の演算スロットの入力データ用のフリップフロップ３０１、３０２、及び出力データ用のフリップフロップ３０４へのクロックの供給を遮断して動作を停止させる。その後、電力制御信号ＰＷＲＣＩＡ、ＰＷＲＣＩＢ、ＰＷＲＣＯＡ、ＰＷＲＣＯＢのすべてをローレベルとすることで、浮動小数点演算スロット４１Ａ、４１Ｂのフリップフロップ３０１、３０２、３０４のすべてへのクロックの供給を遮断して非動作状態にする。これにより、浮動小数点演算命令の実行後において、消費電力を段階的に小さくして急激な電流変動を抑制し、パワーインテグリティを確保することができる。
【００４４】
図６は、本実施形態におけるプロセッサの動作例を示すフローチャートである。なお、以下の説明において、浮動小数点演算命令では、浮動小数点演算スロット４１Ａ、４１Ｂをともに使用するとともに、浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂをともに使用するものとする。まず、制御部１０が、命令キャッシュ２１から命令をフェッチし（Ｓ１０１）、フェッチした命令をデコードする（Ｓ１０２）。次に、制御部１０は、デコードされた命令の種別を判定する（Ｓ１０３）。
【００４５】
ステップＳ１０３での判定の結果、浮動小数点演算命令である場合には、制御部１０は、浮動小数点演算部４０に対して命令を発行する（Ｓ１０４）。制御部１０からの命令を受けた浮動小数点演算部４０は、その命令に従って浮動小数点レジスタファイル４２からデータを読み出して（Ｓ１０５）、浮動小数点演算スロット４１Ａ、４１Ｂで浮動小数点演算を行う（Ｓ１０６）。そして、浮動小数点演算部４０は、浮動小数点演算スロット４１Ａ、４１Ｂでの演算結果を浮動小数点レジスタファイル４２に書き込み（Ｓ１０７）、処理を終了する。
【００４６】
また、ステップＳ１０３での判定の結果、浮動小数点演算命令に対応するプリアクセス命令である場合には、制御部１０は、電力制御命令制御部７０に対して命令を発行する（Ｓ１０８）。制御部１０からの命令を受けた電力制御命令制御部７０は、その命令に従って、電力制御信号ＰＷＣ２、ＰＷＣ３の一方をハイレベルにして浮動小数点演算スロット４１Ａ、４１Ｂの一方（ここでは、浮動小数点演算スロットＡ４１Ａ）の省電力制御を無効化する（Ｓ１０９）。また、電力制御命令制御部７０は、命令に従って、電力制御信号ＰＷＣ１をハイレベルにして浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方の省電力制御を無効化する（Ｓ１１０）。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの一方、及び浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方を、非動作状態から動作状態にして消費電力を増加させる。なお、ステップＳ１０９、Ｓ１１０についての実行順序は任意であり、ステップＳ１１０の後にステップＳ１０９が実行されても良い。
【００４７】
また、ステップＳ１０３での判定の結果、浮動小数点演算命令に対応するアクセスエンド命令である場合には、制御部１０は、電力制御命令制御部７０に対して命令を発行する（Ｓ１１１）。制御部１０からの命令を受けた電力制御命令制御部７０は、その命令に従って、電力制御信号ＰＷＣ２、ＰＷＣ３の一方をローレベルにして浮動小数点演算スロット４１Ａ、４１Ｂの一方（ここでは、浮動小数点演算スロットＡ４１Ａ）の省電力制御を有効化する（Ｓ１１２）。また、電力制御命令制御部７０は、命令に従って、電力制御信号ＰＷＣ１をローレベルにして浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方の省電力制御を有効化する（Ｓ１１３）。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの一方、及び浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方を動作状態にして消費電力が急激に減少しないようにする。なお、ステップＳ１１２、Ｓ１１３についての実行順序は任意であり、ステップＳ１１３の後にステップＳ１１２が実行されても良い。
【００４８】
また、ステップＳ１０３での判定の結果、浮動小数点演算命令、及びそれに対応するプリアクセス命令やアクセスエンド命令ではないその他の命令である場合には、制御部１０は、その他の命令に応じた機能部に対して命令を発行する（Ｓ１１４）。制御部１０からの命令を受けた機能部は、その命令に従って処理を行い（Ｓ１１５）、処理を終了する。
【００４９】
図７は、本実施形態におけるプロセッサでのパイプライン動作と、その動作時の電流波形及び電源電圧波形の例を示す図である。図１２においては、命令フェッチステージＦ、命令デコードステージＤ、演算実行ステージＥ、及びレジスタ書き込みステージＷの４段のパイプライン動作を一例として示している。また、図１２において、命令Ｉ４、Ｉ５はパワーインテグリティを損なうおそれのある消費電力が大きい命令（例えば浮動小数点演算命令）であり、命令Ｉ１は命令Ｉ４、Ｉ５に対応するプリアクセス命令であり、命令Ｉ６は命令Ｉ４、Ｉ５に対応するアクセスエンド命令である。また、命令Ｉ２、Ｉ３、Ｉ７はパワーインテグリティを損なうおそれのない消費電力が小さい命令（例えば論理演算命令）である。
【００５０】
プリアクセス命令Ｉ１が実行されると、ハードウエアは、命令Ｉ４、Ｉ５の実行時に使用する予定の回路資源やモジュールのクロックゲーティングなどの省電力制御を予め緩やかに解除して消費電力を増加させる。これにより、命令Ｉ４、Ｉ５が実行される際に消費電力が急激に増加することを抑制し、パワーインテグリティが損なわれることを回避しながら、性能の劣化が発生しないようにする。例えば、急激なクロックゲーティングの解除ではなく、予め徐々にクロックゲーティングを解除しておいたり、使用する演算器等の周辺のクロックゲーティングを解除して、命令Ｉ４、Ｉ５が実行される前にダミーで動作させる回路資源等の割合を、徐々に上げておいたりする。これにより、消費電力の増加による急激な電流変動が抑制され、電源ノイズが抑制されることで、電源電圧が許容上限値ＶＨや許容下限値ＶＬを超えてしまうことを防止しパワーインテグリティを確保することができる。図７には、消費電力が大きい命令Ｉ４が実行される３サイクル前に、プリアクセス命令Ｉ１を配置して電流消費を１段階だけ増やす場合を示したが、必要に応じて、さらに前方のサイクルにプリアクセス命令を配置し電流消費を複数段階で増やすようにしても良い。また、アクセスエンド命令も同様に、さらに長いサイクルをかけて段階的に電流消費を減らすようにしても良い。
【００５１】
図８は、本実施形態におけるプロセッサの他の動作例を示すフローチャートである。図８に示す動作例は、アクセスエンド命令を用いずに、プリアクセス命令だけを用いるものである。ある命令に対応するプリアクセス命令を検出すると、その命令を実行する際に使用される回路資源に対する省電力制御を段階的に無効化する。そして、最も近い過去にその命令を実行してから設定した期間（サイクル）が経過すると、回路資源に対する省電力制御を段階的に有効化する。
【００５２】
図８においても、浮動小数点演算命令を例にし、浮動小数点演算命令では、浮動小数点演算スロット４１Ａ、４１Ｂをともに使用するとともに、浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂをともに使用するものとする。浮動小数点演算命令に対応するプリアクセス命令が検出されると、電力制御命令制御部７０が、電力制御信号ＰＷＣ２、ＰＷＣ３の一方をハイレベルにして浮動小数点演算スロット４１Ａ、４１Ｂの一方（ここでは、浮動小数点演算スロットＡ４１Ａ）の省電力制御を無効化する（Ｓ２０１）。また、電力制御命令制御部７０は、電力制御信号ＰＷＣ１をハイレベルにして浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方の省電力制御を無効化する（Ｓ２０２）。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの一方、及び浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方を、非動作状態から動作状態にして消費電力を増加させる。なお、ステップＳ２０１、Ｓ２０２についての実行順序は任意である。
【００５３】
次に、電力制御命令制御部７０では、浮動小数点演算命令が無実行であるサイクルをカウントするカウンタの値が確認される（Ｓ２０３）。このカウンタの値の確認は、最も近い過去に浮動小数点演算命令を実行してから設定した期間（サイクル）が経過していると電力制御命令制御部７０が判断するまで繰り返し行われる。
【００５４】
そして、電力制御命令制御部７０が、最も近い過去に浮動小数点演算命令を実行してから設定した期間（サイクル）が経過していると判断すると、電力制御信号ＰＷＣ２、ＰＷＣ３の一方をハイレベルにして浮動小数点演算スロット４１Ａ、４１Ｂの一方（ここでは、浮動小数点演算スロットＡ４１Ａ）の省電力制御を有効化する（Ｓ２０５）。また、電力制御命令制御部７０は、電力制御信号ＰＷＣ１をハイレベルにして浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方の省電力制御を有効化する（Ｓ２０６）。これにより、浮動小数点演算スロット４１Ａ、４１Ｂの一方、及び浮動小数点レジスタファイル４２のレジスタファイル部４２Ａ、４２Ｂの一方を動作状態にして消費電力が急激に減少しないようにする。なお、ステップＳ２０５、Ｓ２０６についての実行順序は任意である。
【００５５】
図９は、図８に示した動作例に対応するプリアクセス命令処理の状態遷移の例を示す図である。電力制御命令制御部７０のステートマシン部７１は、プリアクセス命令処理リクエストを受信すること（Ｃ１）により、省電力制御有効状態（ＳＴＡＴＥ１）から省電力無効状態（ＳＴＡＴＥ２）に状態を遷移させる。そして、プリアクセス命令処理リクエストを受信してから設定した期間が経過する（Ｃ２）と、ステートマシン部７１は、省電力制御無効状態（ＳＴＡＴＥ２）から省電力無効状態（ＳＴＡＴＥ３）に状態を遷移させる。省電力無効状態（ＳＴＡＴＥ３）において、最も近い過去に浮動小数点演算命令を実行してから設定した期間が経過する（Ｃ３）と、ステートマシン部７１は、省電力無効状態（ＳＴＡＴＥ３）から省電力制御有効状態（ＳＴＡＴＥ１）に状態を遷移させる。なお、省電力無効状態（ＳＴＡＴＥ３）において、プリアクセス命令処理リクエストを受信した場合（Ｃ１）には、ステートマシン部７１は、省電力制御無効状態（ＳＴＡＴＥ３）から省電力無効状態（ＳＴＡＴＥ２）に状態を遷移させる。
【００５６】
本実施形態によれば、電源ノイズを抑制するためにチップやパッケージやボード等に搭載するデカップリングキャパシタを少なくすることが可能になり、電源ノイズ対策のコストを削減でき、低コストで半導体集積回路の誤動作を抑制することができる。また、クロックゲーティングなどの低消費電力化手法を実装することにより発生する電源ノイズを小さくすることができ、半導体集積回路の低消費電力化を図ることができる。また、発生する電源ノイズを小さく抑制することが可能になるために、電源電圧を低くすることができ、半導体集積回路の低消費電力化を図ることができる。
【００５７】
なお、本実施形態において、プリアクセス命令が実行された後、パワーインテグリティ確保の準備がされる前に、プリアクセス命令に対応する命令が発行された場合には、例外を発生させて、プログラマにプログラムの修正を促すようにしても良い。また、プリアクセス命令の実行前、又はプリアクセス命令の実行後であっても、その効力が失われて省電力制御が有効化された後に、プリアクセス命令に対応する命令が発行された場合に、例外を発生させるようにしても良い。前述した説明では、クロックゲーティングを利用して省電力制御を行うプロセッサを一例に説明したが、本実施形態による電力制御は、パワーゲーティングやＲＡＭマクロのチップイネーブル制御などの他の手法で省電力制御を行うものに対しても適用可能である。
【００５８】
図１０は、本実施形態におけるプリアクセス命令やアクセスエンド命令を生成可能なコンパイラの処理フローを示す図であり、図１１は、本実施形態におけるコンパイラの処理例を示すフローチャートである。コンパイラ４００は、プログラムをコンピュータが実行することによって、ソースプログラム４０６をコンパイルして実行可能形式のオブジェクトコード４０７を生成する。コンパイラ４００は、ソースプログラム４０６の字句解析処理４０１と、構文解析処理４０２と、意味解析処理４０３と、最適化処理４０４と、コード生成処理４０５とを実行してオブジェクトコード４０７を作成する。
【００５９】
字句解析処理４０１は、ソースプログラム４０６を読み込んで、ソースプログラム４０６の字句を解析する。構文解析処理４０２は、字句解析処理４０１でのソースプログラム４０６の字句解析の結果を基に、ソースプログラム４０６の構文を解析する。意味解析処理４０３は、構文解析処理４０２で解析されたソースプログラム４０６の意味を解析する。最適化処理４０４は、意味解析処理４０３で解析された結果を基に、最適化を行う。コード生成処理４０５は、最適化処理４０４などの結果を用いて、ソースプログラム４０６の実行可能形式のオブジェクトコード４０７を生成する。
【００６０】
本実施形態におけるコンパイラは、プリアクセス命令やアクセスエンド命令をコードに挿入するために次のステップを有する。コンパイラは、コード生成処理において、図１１に示すように浮動小数点演算命令（消費電力が大きい命令）を検出するステップ（Ｓ３０１）と、その浮動小数点演算命令の前方のパスにそれに対応するプリアクセス命令を挿入するステップ（Ｓ３０２）とを有する。この際、浮動小数点演算命令の前方に、ラベルがある場合には、そのラベルに分岐するすべてのパスにプリアクセス命令を挿入する。
【００６１】
また、コンパイラは、プロセッサが備えている、同時に使用可能な浮動小数点演算器（消費電力が大きい回路資源）の数を把握しておき、使用する演算器の数がパワーインテグリティを損なうおそれがある数以上である場合にのみ、プリアクセス命令を挿入するようにしても良い。例えば、浮動小数点演算スロット（演算器）を２つ有するプロセッサにおいて、１つの浮動小数点演算スロットだけを使うような場合には、ダミー動作を開始する必要がなくなるために無駄な消費電力を抑制することができる。
【００６２】
また、コンパイラは、コード生成処理において、図１１に示すように浮動小数点演算命令を検出するステップ（Ｓ３０１）と、浮動小数点演算命令の間隔を検出し間隔が設定値以上である場合に、浮動小数点演算命令の後方にアクセスエンド命令を挿入するステップ（Ｓ３０３）とを有する。本実施形態におけるコンパイラは、コード生成処理において、命令コードの生成が完了する（Ｓ３０４）まで浮動小数点演算命令の検出を行って前述の処理を行う。
【００６３】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
１  プロセッサ
１０  制御部
１１  命令フェッチ部
１２  命令デコード部
１３  命令発行部
１４  パイプライン制御部
２０  キャッシュ部
２１  命令キャッシュ
２２  データキャッシュ
３０  バス部
４０  浮動小数点演算部
４１Ａ、４１Ｂ  浮動小数点演算スロット
４２  浮動小数点レジスタファイル（ＦＰＲ）
４３  マルチプレクサ
５０  整数演算部
５１Ａ、５１Ｂ  整数演算スロット
５２  汎用レジスタファイル（ＧＰＲ）
５３  マルチプレクサ
６０  クロック生成部
７０  電力制御命令制御部
７１  ステートマシン
７２  電力制御信号生成部
７３  カウンタ部
【図１】
2014059761.tif 000003
【図２】
2014059761.tif 000004
【図３】
2014059761.tif 000005
【図４】
2014059761.tif 000006
【図５】
2014059761.tif 000007
【図６】
2014059761.tif 000008
【図７】
2014059761.tif 000009
【図８】
2014059761.tif 000010
【図９】
2014059761.tif 000011
【図１０】
2014059761.tif 000012
【図１１】
2014059761.tif 000013
【図１２】
2014059761.tif 000014