(57)【特許請求の範囲】
【請求項１】
記憶装置にアクセスしてデータの読み出しあるいは書き込みを行うメモリアクセス命令と、該メモリアクセス命令の後に発行され該メモリアクセス命令により読み出しまたは書き込まれたデータにアクセスする命令と、の間のクロック数を検出するクロック数検出手段と、
前記クロック数検出手段で検出されたクロック数に基づいて、該メモリアクセス命令で前記記憶装置をアクセスするのに要する時間を調整するアクセス時間調整手段と、を備えることを特徴とするプロセッサ。
【請求項２】
前記アクセス時間調整手段は、該メモリアクセス命令で前記記憶装置をアクセスする際、前記クロック数検出手段で検出されたクロック数以下の時間がかかるように、前記記憶装置に対するアクセス速度を変化させることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記メモリアクセス命令のオペランドには、該メモリアクセス命令と、該メモリアクセス命令の後に発行され該メモリアクセス命令により読み出しまたは書き込まれたデータにアクセスする命令との間のクロック数情報が含まれており、
前記クロック数検出手段は、前記クロック数情報に基づいて、メモリアクセス命令と、該メモリアクセス命令の後に発行され該メモリアクセス命令により読み出しまたは書き込まれたデータにアクセスする命令との間のクロック数を検出することを特徴とする請求項１または２に記載のプロセッサ。
【請求項４】
前記メモリアクセス命令は、前記記憶装置からレジスタにデータをロードするロード命令であり、
前記クロック数検出手段は、前記ロード命令と、該ロード命令がデータをロードするレジスタにアクセスする該ロード命令の後続命令との間のクロック数を検出することを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項５】
前記メモリアクセス命令は、前記記憶装置の所定領域にデータをストアするストア命令であり、
前記クロック数検出手段は、前記ストア命令と、該ストア命令がストアする前記記憶装置内の所定領域にアクセスする該ストア命令の後続命令との間のクロック数を判定することを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項６】
命令の実行処理を開始する前に、一時的に命令を格納する命令バッファを備え、
前記クロック数検出手段は、ロード命令と、該ロード命令がデータをロードするレジスタにアクセスする該ロード命令の後続命令とが前記命令バッファ内に格納されている場合に、両命令間のクロック数を検出することを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項７】
命令の実行処理を開始する前に、一時的に命令を格納する命令バッファを備え、
前記クロック数検出手段は、ストア命令と、該ストア命令がストアする前記記憶装置内の所定領域にアクセスする該ストア命令の後続命令との間のクロック数を検出することを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項８】
前記アクセス時間調整手段は、前記記憶装置に供給する電源電圧または前記記憶装置のしきい値電圧を調整することにより、前記記憶装置に対するアクセス速度を調整することを特徴とする請求項１〜７のいずれかに記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサの低消費電力化に関し、特に、プロセッサが記憶装置にアクセスする際の消費電力を低減する技術に関する。
【０００２】
【従来の技術】
マイクロプロセッサの動作周波数は年々高くなる傾向にあり、また、バッテリで駆動する携帯電子機器が急速な勢いで普及していることから、ＬＳＩの低消費電力化が重要視されつつある。
【０００３】
近年、マイクロプロセッサやその周辺回路とメモリとを混載したＬＳＩの開発が盛んに行われているが、メモリ混載型のＬＳＩはメモリなしのＬＳＩよりも消費電力が大きくなる傾向にある。
【０００４】
ちなみに、ＬＳＩの消費電力Ｐは、P=a*C*V*V*n*f+Psと表すことができる。ここで、ａはＬＳＩの稼働率、ＣはＬＳＩの容量、Ｖは電圧、ｎは素子数、ｆは動作周波数、Psは待機時の消費電力である。
【０００５】
メモリの消費電力を抑える手法として、（ａ）デバイスやプロセスに依存する方法、（ｂ）メモリ内の基本部品に依存する方法（例えば、センスアンプの構成やセルアレイの構成を工夫するなど）、（ｃ）メモリの外側からの制御による方法などが考えられる。
【０００６】
特に、（ｃ）の方法は、具体的には以下のようなものである。
(c-1)単体のメモリとして使用するときのみ電力を消費するようにする。(c-2)機能的には一つでも、複数のメモリに分割し、使用するメモリのみで電力を消費するようにする。(c-3)消費電力の使用量の異なる複数のメモリを使用して使い分ける。(c-4)プロセッサから見えるメモリのアドレスをグレイコード化するなどして、アドレス線から信号が伝搬する素子の充放電を小さくする。(c-5)メモリに与えるデータが、ある値の付近で小さく振れる場合には、そのデータからの変化分をグレイコードとして扱い、データ線から信号が伝搬する素子の充放電を小さくする。(c-6)DRAMの場合には、リフレッシュに関する制御をコントロールする。
【０００７】
上述した(c-1)〜(c-6)の方法は主に、メモリの実効稼働率ａに関する低消費電力化手法である。
【０００８】
また、メモリには限らないが、上述した（ｃ）と同様の上位アーキテクチャレベルの低消費電力化手法として、以下のようなものがある。
【０００９】
（ｄ）ＬＳＩ内部の各部で処理に必要十分な周波数で動作させる。ただし、原則として、その周波数は各部で固定する。
【００１０】
（ｅ）通常の動作モードの他に、消費電力を全体的に低減する低消費電力動作モードなどを設け、低消費電力動作モードの定義に従って、ＬＳＩ内部の一部あるいは全部の動作周波数を下げたり、クロックを停止したりする。
【００１１】
（ｆ）通常の動作モードの他に、低消費電力動作モードなどを設けて、電源電圧やしきい値電圧を下げる。
【００１２】
（ｇ）動作させる必要のないフリップフロップにはクロックを供給しない。
【００１３】
一方、メモリからのデータのロードに関するパイプライン制御の手法として、ノンブロッキング制御と呼ばれる手法がある。
【００１４】
例えば、図９のような命令フェッチステージ（Fstage）、デコード／レジスタ読み出しステージ（Dstage）、メモリアクセス／演算ステージ（Estage）、レジスタ書き込みステージ（Wstage）という四段にパイプライン構成されたプロセッサについて考える。
【００１５】
図９のプロセッサは、命令フェッチ装置１と、命令メモリ２と、命令レジスタ３と、デコーダ４と、レジスタ５と、セレクタ６と、パイプラインレジスタ７と、演算器８と、ロード／ストア制御装置９と、内蔵メモリ１１とを有する。
【００１６】
ロード命令（load Rs,(Rt))は、Fstageで命令メモリ２から読み出した命令レジスタ３内の命令を、Dstageでデコーダ４でデコードし、Estageでロード／ストア制御装置９を介して、内蔵メモリ１１や外部メモリ１４にアクセスしてデータを読み出し、Wstageでデータをレジスタ番号Rsで示される読み出しレジスタ５に書き込む。
【００１７】
また、ストア命令（store Rs, (Rt))は、Fstageで命令を読み出し、DstageでレジスタRtからアドレスを、Rsからデータを読み出し、Estageで内蔵メモリ１１のアドレスにアクセスしてデータを書き込み、Wstageでは何もしない。
【００１８】
この他、加算命令（add Rs,Rt)は、Fstageで命令を読み出し、DstageでレジスタRs，Rtの値を読み出し、EstageでRs，Rtから読み出したデータを演算器８で加算し、Wstageで読み出しレジスタ５に加算結果を書き込む。また、他の減算命令（sub Rs,Rt)、ＯＲ命令（or Rs,Rt)、ＡＮＤ命令（and Rs,Rt)も、加算命令と同様に動作する。
【００１９】
レジスタ番号Rs，Rtは、例えば、R0〜R31の値を取るものとする。また、これらの動作は、デコーダ４によりデコードされた制御信号により制御されている。
【００２０】
図１０（ａ）はプロセッサが実行する命令列の一例を示す図であり、ロード命令がデータをロードしたレジスタR1を、後続のａｄｄ命令が参照する例を示している。図１０（ａ）の例では、ロード命令とａｄｄ命令との間に３命令が存在する。
【００２１】
本明細書では、ロード命令でロードすべきデータを、Estageでロードできた場合は、そのデータをロード命令の直後の命令で使用できるように、データのバイパス回路が組み込まれているものとする。図１０（ａ）の例では、ロード命令でロードしたデータをｓｕｂ命令で使用可能である。
【００２２】
ここで、もし、ロードすべきデータが内蔵メモリ１１内になくてキャッシュミスを起こした場合や、ロード対象が外部メモリ１４の場合は、図１０（ｂ）のようにロード命令のEstageおよびそれ以降の命令をストールさせて、有効なデータがロードされるまで待機する方法と、図１０（ｃ）に示すようにロードしたデータを必要とする命令がDstageに達してから初めてストールさせる方法がある。
【００２３】
この場合、データを必要とする命令がDstageに達する以前は、ロード／ストア制御装置９による制御機構とプロセッサのパイプライン機構は別個に動作している。その結果、図１０（ｄ）に示すようにストールせずに済む場合もある。なお、図１０（ｂ）〜図１０（ｄ）は、ロードに要するクロック数が６クロックの例を示している。
【００２４】
図１０（ｃ）や図１０（ｄ）のように動作させる制御手法をロードのノンブロッキング制御という。本発明では、ロード命令とそのロードデータを使用する命令との間のクロック数、すなわちノンブロッキング動作可能な命令数をロード遅延数と呼ぶ。例えば、図１０（ｄ）のロード遅延数は５である。
【００２５】
ノンブロッキング制御方法は簡単であり、Estageのロード命令でロードされる先のレジスタ番号と、Dstageの後続命令で参照されるレジスタの番号が一致し、かつEstageでまだ有効なデータがロードされていない場合に、このDstageをストールさせるようにすればよい。
【００２６】
図９は上述したノンブロッキング制御機能を備えた従来のプロセッサのブロック構成を示している。図９のプロセッサは、ノンブロッキング制御を行うノンブロッキング制御部１２をロード／ストア制御装置９内に設けている。
【００２７】
上述したノンブロッキング制御では、先行するロード命令でロードされるべきデータが後続命令のEstageでまだロードされていない場合のみ、パイプライン処理をストールさせるため、ストールの頻度が少なくなってプロセッサの性能向上が図れる。
【００２８】
【発明が解決しようとする課題】
しかしながら、最近のプロセッサは、高速のクロックで動作するため、１サイクルの時間が短く、ノンブロッキング制御を行っても、ストールの頻度を減らせないおそれがある。また、プロセッサの動作周波数が高くなるほど、消費電力が増えるという問題もある。
【００２９】
本発明は、このような点に鑑みてなされたものであり、その目的は、性能を低下させることなく、消費電力を低減できるプロセッサを提供することにある。
【００３０】
【課題を解決するための手段】
上述した課題を解決するために、本発明は、記憶装置にアクセスしてデータの読み出しあるいは書き込みを行うメモリアクセス命令と、該メモリアクセス命令の後に発行され該メモリアクセス命令により読み出しまたは書き込まれたデータにアクセスする命令と、の間のクロック数を検出するクロック数検出手段と、前記クロック数検出手段で検出されたクロック数に基づいて、該メモリアクセス命令で前記記憶装置をアクセスするのに要する時間を調整するアクセス時間調整手段と、を備える。
【００３１】
本発明では、メモリアクセス命令と、このメモリアクセス命令の後に発行されこのメモリアクセス命令により読み出しまたは書き込まれたデータにアクセスする命令と、の間のクロック数に基づいて、このメモリアクセス命令で記憶装置をアクセスするのに要する時間を調整するようにしたため、必要以上に高速に記憶装置にアクセスしなくなり、消費電力を低減できる。
【００３２】
メモリアクセス命令の中には、ロード命令やストア命令などが含まれる。
【００３３】
メモリアクセス命令と後続命令との間のクロック数を計測するには、例えば、メモリアクセス命令のオペランドを参照する手法や、命令列を一時的に格納する命令バッファを用いてクロック数を計測する手法がある。
【００３４】
【発明の実施の形態】
以下、本発明に係るプロセッサについて、図面を参照しながら具体的に説明する。
【００３５】
（第１の実施形態）
図１は本発明に係るプロセッサの内部構成を示す第１の実施形態のブロック図である。図１のプロセッサは、図９に示す従来のプロセッサと同様に、実行すべき命令をフェッチする命令フェッチ装置１と、フェッチした命令を格納する命令メモリ２と、命令メモリ２から読み出した命令を一時的に格納する命令レジスタ３と、命令レジスタ３から取り出した命令をデコードするデコーダ４と、命令の実行に用いられるオペランドの情報を格納するレジスタ５と、命令のバイパス制御を行うセレクタ６と、システムクロックに同期化させるパイプラインレジスタ７と、演算命令を実行する演算器８と、ロード／ストア命令の実行を制御するロード／ストア制御装置９と、高速でアクセス可能な内蔵メモリ１１とを有する。
【００３６】
ロード／ストア制御装置９には、上述したノンブロッキング制御を行うノンブロッキング制御部１２が内蔵されている。
【００３７】
図１の演算器８で演算されたデータは、セレクタ６とパイプラインレジスタ７を介して演算器８またはロード／ストア制御装置９に入力される。演算器８での演算結果、あるいはロード／ストア制御装置９でのロード／ストア処理結果は、セレクタ６とパイプラインレジスタ７を介してレジスタ５に書き戻される。
【００３８】
また、図１のプロセッサは、バス１３を介して外部メモリ１４とアクセス可能であり、外部メモリ１４から読み出したデータは内蔵メモリ１１に格納される。これにより、以後、同一アドレスにアクセスする際に外部メモリ１４にアクセスしなくて済むため、メモリアクセスの高速化が可能になる。
【００３９】
図１のプロセッサは、内蔵メモリ１１のアクセス速度を可変制御できるようにした点に特徴がある。具体的には、ロード／ストア遅延量計測部（クロック数計測手段）２１と、アクセス速度可変制御部（アクセス時間調整手段）２２とを有する点に特徴がある。
【００４０】
ロード／ストア遅延量計測部２１は、ロード／ストア命令と、このロード／ストア命令によりロード／ストアされたデータにアクセスする後続命令との間のクロック数を計測する。
【００４１】
アクセス速度可変制御部２２は、ロード／ストア遅延量計測部２１で計測されたクロック数に基づいて、内蔵メモリ１１に供給する電源電圧やしきい値電圧の電圧レベルを可変制御する。
【００４２】
図２は命令列の具体例であり、以下、この例に基づいて本実施形態の動作を説明する。図２の命令列の場合、命令列の並びだけから、ロード命令とこのロード命令でロードするデータを使用する後続命令との間の命令数、すなわちロード遅延数を判定できる。図２の例の場合、ロード遅延数は３である。なお、図２のロード命令のオペランドである(R2)には、直前で即値が代入されているなどして、命令列だけから、アドレスが内蔵メモリ１１へのアクセスであると分かっているものとする。
【００４３】
ロード命令がデータをロードしたレジスタＲ１を使用する後続命令は、４命令後のａｄｄ命令である。このａｄｄ命令が実際にレジスタ番号Ｒ１を参照するのは、Dstageである。すなわち、ロード命令がレジスタＲ１にデータをロードしてから４クロック後にａｄｄ命令はレジスタＲ１を参照する。したがって、ロード命令は、４クロックかけてレジスタＲ１にデータをロードしても、後続命令の実行に支障は起きない。
【００４４】
そこで、本実施形態は、図３に示すように、内蔵メモリ１１へのアクセス速度を遅くして、ロード命令が４クロックかけてデータをロードするようにしている。図中の”ｅ”は、”Ｅ”に比べて内蔵メモリ１１がゆっくり動作することを模式的に示している。
【００４５】
図３のように、ロード命令をゆっくり実行しても、後続のａｄｄ命令がレジスタＲ１を参照する時点ではレジスタＲ１には所望のデータがロードされているため、実質的な影響はない。
【００４６】
ロード命令をゆっくり実行するための具体的な手法として、本実施形態は、アクセス速度可変制御部２２により、内蔵メモリ１１に供給する電源電圧やしきい値電圧の電圧レベルを低くする。これにより、内蔵メモリ１１を構成するトランジスタの動作が遅くなり、内蔵メモリ１１へのアクセス速度も低下する。
【００４７】
なお、電圧レベルを変更する以外の手法でロード命令をゆっくり実行させてもよく、例えば、内蔵メモリ１１に供給するクロックの周波数を遅くしてもよい。
【００４８】
図４は内蔵メモリ１１へのアクセスタイミングを示すタイミング図であり、図４（ａ）は通常の電源電圧を内蔵メモリ１１に供給した場合、図４（ｂ）は内蔵メモリ１１に供給する電源電圧を下げた場合を示している。
【００４９】
図４からわかるように、電源電圧を下げると、内蔵メモリ１１からデータが読み出されるまでにかなりの時間がかかる。したがって、内蔵メモリ１１からデータが読み出されるタイミングに合わせて、内蔵メモリ１１に制御クロックを供給することで、通常の電源電圧供給時と同様に、内蔵メモリ１１の読み書きを正常に行うことができる。
【００５０】
本実施形態では、コンパイラやプログラム作成者がプロセッサに与えるプログラムコードを生成する際、ロード命令がデータをロードしたレジスタと同じレジスタに後続命令がアクセスする場合には、両命令間のクロック数を予め計測しておき、そのクロック数に「１」を加えた値を、ロード命令のオペランドに記述しておく。このオペランドを以下では遅延数オペランドと呼ぶ。
【００５１】
例えば、図２の命令列は図５のような命令列に変更されてプロセッサに供給される。図２と図５の違いは、１行目のロード命令であり、図５のロード命令は遅延数オペランドをもつ。以下では、遅延数オペランドをもつロード命令を拡張ロード命令と呼ぶ。
【００５２】
以下、図５のような命令列を実行する場合の図１のプロセッサの動作を説明する。デコーダ４内のロード／ストア遅延量計測部２１は、命令列の中に含まれる拡張ロード命令の遅延数オペランドに基づいて、遅延クロック数を計測する。この遅延クロック数は、パイプラインレジスタ７を介してロード／ストア制御装置９に送られる。
【００５３】
ロード／ストア制御装置９内のノンブロッキング制御部１２は、拡張ロード命令の遅延クロック数をアクセス速度可変制御部２２に送る。アクセス速度可変制御部２２は、遅延クロック数に応じた電源電圧を内蔵メモリ１１に供給する。
【００５４】
ロード／ストア制御装置９は、Estageにて、拡張ロード命令が示すアドレスを内蔵メモリ１１に供給するとともに、拡張ロード命令以降の命令をノンブロッキング制御部１２に実行させ、その実行制御と並行して拡張ロード命令の処理を制御する。そして、４クロックかけてデータをレジスタＲ１にロードした後、後続のａｄｄ命令のDstageでバイパス装置を経由してバイパスするとともに、レジスタＲ８に書き込んで動作を終了する。
【００５５】
このように、第１の実施形態では、ロード命令等のメモリアクセス命令のアクセス先に後続命令がアクセスする場合に、両命令間のクロック数に応じて、内蔵メモリ１１に供給する電源電圧やしきい値電圧を制御するため、命令列の実行に支障がない範囲でメモリアクセス命令の実行時間を制御でき、プロセッサの処理速度を落とさずに消費電力の低減を図ることができる。
【００５６】
（第２の実施形態）
第２の実施形態は、ロード命令がデータをロードしたレジスタと同じレジスタに後続命令がアクセスする場合に、両命令間のクロック数を動的に検出するものである。
【００５７】
図６は本発明に係るプロセッサの内部構成を示す第２の実施形態のブロック図である。図６のプロセッサは、命令メモリ２から読み出した命令列を一時的に格納するFIFO(First In First Out)構造の命令バッファ２３を有する。
【００５８】
命令バッファ２３に格納された命令列は、古いものから順にデコーダ４に送られる。デコーダ４内部のロード／ストア遅延量計測部２１は、ロード命令がデータをロードしたレジスタと同じレジスタに後続命令がアクセスする場合に、両命令間のクロック数を検出する。検出されたクロック数は、パイプラインレジスタ７を介してロード／ストア制御装置９に送られる。
【００５９】
ロード／ストア制御装置９内のノンブロッキング制御部１２は、ロード／ストア遅延量計測部２１が計測したクロック数に基づいて、内蔵メモリ１１に供給する電源電圧やしきい値電圧の電圧レベルを調整する。
【００６０】
このように、第２の実施形態では、命令バッファ２３にて、同一のレジスタにアクセスするロード命令とその後続命令との間のクロック数を判別するため、プログラマやコンパイラは従来と同様の手法でプログラムコードを生成できる。すなわち、従来と同様のプログラミング手法を用いつつ、消費電力の低減が図れる。
【００６１】
（その他の実施形態）
第１および第２の実施形態では、同一のレジスタにアクセスするロード命令とその後続命令について説明したが、他のメモリアクセス命令についても、本発明は同様に適用可能である。
【００６２】
図７は、ストア命令がストアしたアドレスと同一アドレスに、後続命令がアクセスする例を示す図である。図７の場合、ストア命令と、このストア命令がストアしたデータにアクセスするロード命令との間の命令数、すなわちアクセス遅延クロック数が「３」の場合の例を示している。なお、図７において、ロード／ストア命令のアクセスアドレスには、直前で即値が代入されるなどして、命令列だけからアドレスが内蔵メモリ１１へのアクセスであると分かっているものとする。
【００６３】
図７の命令列の場合、後続のロード命令がDstageでストアデータを参照するまでに、先行するストア命令のストア処理が完了していればよい。このため、本実施形態では、図８に示すようにストア命令のEstageを（アクセス遅延クロック数＋１＝４）クロックかけて行う。図８の”ｅ”は、”Ｅ”と記載した場合よりも内蔵メモリ１１がゆっくりと動作していることを模式的に示している。
【００６４】
このように、ストア命令がストアしたアドレスと同一アドレスに、後続命令がアクセスする場合も、プロセッサの動作速度を低下させずに、消費電力の低減を図ることができる。
【００６５】
なお、本発明が対象とするメモリアクセス命令は、ロード命令やストア命令以外の命令でもよい。例えば、ａｄｄ命令等の演算命令がメモリに直接アクセスする場合にも本発明は適用可能である。
【００６６】
【発明の効果】
以上詳細に説明したように、本発明によれば、メモリアクセス命令の実行結果を利用する命令の実行の妨げにならない範囲内で、メモリアクセス命令の実行に要する時間を調整できるようにしたため、記憶装置に対するアクセス速度を動的に変化させることにより、消費電力の低減を図ることができる。
【図面の簡単な説明】
【図１】本発明に係るプロセッサの内部構成を示す第１の実施形態のブロック図。
【図２】命令列の具体例を示す図。
【図３】４クロックかけてロード命令を実行する場合の命令列を示す図。
【図４】内蔵メモリへのアクセスタイミングを示すタイミング図。
【図５】ロード命令を拡張ロード命令に変更した命令列を示す図。
【図６】本発明に係るプロセッサの内部構成を示す第２の実施形態のブロック図。
【図７】ストア命令がストアしたアドレスと同一アドレスに、後続命令がアクセスする例を示す図。
【図８】４クロックかけてストア命令を実行する場合の命令列を示す図。
【図９】従来のプロセッサの内部構成を示すブロック図。
【図１０】プロセッサが実行する命令列の一例を示す図。
【符号の説明】
１  命令フェッチ装置
２  命令メモリ
３  命令レジスタ
４  デコーダ
５  レジスタ
６  セレクタ
７  パイプラインレジスタ
８  演算器
９  ロード／ストア制御装置
１１  内蔵メモリ
１２  ノンブロッキング制御部
１３  バス
１４  外部メモリ
２１  ロード／ストア遅延量計測部
２２  アクセス速度可変制御部
２３  命令バッファ
【図１】
0003697393.tif 000002
【図２】
0003697393.tif 000003
【図３】
0003697393.tif 000004
【図４】
0003697393.tif 000005
【図５】
0003697393.tif 000006
【図６】
0003697393.tif 000007
【図７】
0003697393.tif 000008
【図８】
0003697393.tif 000009
【図９】
0003697393.tif 000010
【図１０】
0003697393.tif 000011