(57)【要約】【課題】  レジスタへの電源供給などを制御して、消費電力を削減することが可能なマイクロコントローラユニットを提供すること。【解決手段】  精度保持部１２は、必要とされるデータの精度を保持する。レジスタ１１は、８ビットのレジスタ１１ａ〜１１ｄによって構成される。デコーダ１４１は、精度保持部１２によって保持されるデータの精度をデコードする。そして、デコーダ１４１によるデコード結果に応じて、レジスタ１１ａ〜１１ｄに供給される電源およびクロックが制御される。したがって、マイクロコントローラユニットの消費電力を削減することが可能となる。【選択図】        図３
2005078518.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタと、
フェッチした命令に応じて、前記複数のレジスタを用いた演算処理を実行する演算手段とを含んだマイクロコントローラユニットであって、
前記複数のレジスタのそれぞれは、複数ビットのデータを所定単位で保持する複数のデータ保持手段を含み、
前記マイクロコントローラユニットはさらに、必要とされるデータの精度を保持する精度保持手段と、
前記精度保持手段により保持されるデータの精度に応じて、前記複数のレジスタの各々における複数のデータ保持手段にそれぞれ入力するデータを保持させるかどうかを制御する制御手段とを含む、マイクロコントローラユニット。
【請求項２】
前記制御手段は、前記精度保持手段により保持されるデータの精度に応じて前記複数のデータ保持手段へのそれぞれの電源供給を制御する電源制御手段を有する、請求項１記載のマイクロコントローラユニット。
【請求項３】
前記制御手段は、前記精度保持手段により保持されるデータの精度に応じて前記複数のデータ保持手段へのそれぞれクロック供給を制御するクロック制御手段を有する、請求項１または２記載のマイクロコントローラユニット。
【請求項４】
前記精度保持手段は、前記複数のレジスタに対応して設けられ、各々は対応のレジスタに保持されるデータの精度を保持する複数の精度保持部を有する、請求項１〜３のいずれかに記載のマイクロコントローラユニット。
【請求項５】
各々は複数ビットのデータを保持する複数のレジスタと、
前記複数のレジスタにそれぞれ対応して設けられ、各々は対応のレジスタに保持されるデータの精度を示す情報を保持する複数の精度保持部と、
フェッチした命令に応じて前記複数のレジスタの少なくとも１つのレジスタを用いて演算を実行し、前記少なくとも１つのレジスタに対応する精度保持部のデータ精度に応じたデータ幅で前記演算を実行する演算手段とを備えた、マイクロコントローラユニット。
【請求項６】
前記演算手段は、前記少なくとも１つのレジスタのデータを受けて演算を行なう演算器と、
前記少なくとも１つのレジスタに対応する精度保持部に保持されたデータ精度に応じて前記演算器に供給されるべき電源の供給を制御する電源制御手段とを有する、請求項５記載のマイクロコントローラユニット。
【請求項７】
前記演算手段は、クロックに同期して前記少なくとも１つのレジスタのデータを受けて演算を行なう演算器と、
前記少なくとも１つのレジスタに対応する精度保持部に保持されたデータ精度に応じて前記演算器に供給されるべきクロックの供給を制御するクロック制御手段とを有する、請求項５または６記載のマイクロコントローラユニット。
【請求項８】
前記マイクロコントローラユニットはさらに、前記複数のレジスタのうちのオペランドとして選択されるレジスタが２以上の場合に、該２以上のレジスタに対応する精度保持手段に保持されたデータ精度のうちの最も大きいデータ精度に応じたデータ幅で演算する手段を含む、請求項５〜７のいずれかに記載のマイクロコントローラユニット。
【請求項９】
前記マイクロコントローラユニットはさらに、低消費電力モードまたは通常モードを設定するためのモード設定手段を含み、
前記モード設定手段に低消費電力モードが設定されている場合に、前記電源制御手段は電源の制御を行なう、請求項２または６記載のマイクロコントローラユニット。
【請求項１０】
前記マイクロコントローラユニットはさらに、低消費電力モードまたは通常モードを設定するためのモード設定手段を含み、
前記モード設定手段に低消費電力モードが設定されている場合に、前記クロック制御手段はクロックの制御を行なう、請求項３または７記載のマイクロコントローラユニット。
【請求項１１】
前記モード設定手段は、専用命令に応じて低消費電力モードまたは通常モードを設定する、請求項６記載のマイクロコントローラユニット。
【請求項１２】
前記複数のデータ保持手段のそれぞれは、電源の供給が停止されている場合には、符号ビットと同じ値を出力する、請求項２または６記載のマイクロコントローラユニット。
【請求項１３】
前記複数のデータ保持手段のそれぞれは、クロックの供給が停止されている場合には、符号ビットと同じ値を出力する、請求項３または７記載のマイクロコントローラユニット。
【請求項１４】
前記設定手段は、必要とされる精度を設定する専用命令に応じて、前記精度保持手段にデータの精度を設定する、請求項１または５記載のマイクロコントローラユニット。
【請求項１５】
前記マイクロコントローラユニットはさらに、レジスタに保持されるデータを受け、当該データに基づいてレジスタに必要とされるデータ精度を判定して前記精度保持手段に設定する精度判定手段を含む、請求項１または５記載のマイクロコントローラユニット。
【請求項１６】
前記マイクロコントローラユニットはさらに、内蔵メモリまたは外部メモリに対するアクセス時に、前記精度保持手段によって保持されるデータの精度に応じて、バスを制御するための電源およびクロックを制御するバス制御手段を含む、請求項１〜１５のいずれかに記載のマイクロコントローラユニット。
【請求項１７】
前記複数のレジスタは、不揮発性メモリによって構成される、請求項１〜１６のいずれかに記載のマイクロコントローラユニット。
【請求項１８】
プログラムに対して通常のコンパイル処理を行なうためのコンパイル処理手段と、
前記コンパイル処理手段によってコンパイルされたプログラム内の関数で使用されるレジスタに必要とされる精度を判定し、当該レジスタの電源を供給するビットと電源を供給しないビットとを指定する命令コードを挿入するためのコード挿入手段とを含むコンパイラ。
【請求項１９】
前記コード挿入手段は、前記コンパイル処理手段によってコンパイルされたプログラム内の関数で使用されるレジスタに必要とされる精度を判定し、当該レジスタの電源を供給するビットと電源を供給しないビットとを指定する命令コードを前記関数の先頭に挿入するため第１のコード挿入手段を含む、請求項１８記載のコンパイラ。
【請求項２０】
前記第１のコード挿入手段は、前記レジスタに割当てる変数の型から前記レジスタに必要とされる精度を判定する、請求項１９記載のコンパイラ。
【請求項２１】
前記コード挿入手段はさらに、前記関数内で前記レジスタが最後に使用される箇所を検索し、その直後に前記レジスタの全てのビットの電源供給の停止を指定する命令コードを挿入するための第２のコード挿入手段を含む、請求項１９または２０記載のコンパイラ。
【請求項２２】
前記コンパイラはさらに、前記第１のコード挿入手段によって命令コードを挿入するか、前記第２のコード挿入手段によって命令コードを挿入するかを、コンパイルオプションによって判定するための判定手段を含む、請求項２１記載のコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のレジスタなどを用いて演算等の処理を行なうマイクロコントローラユニット（以下、ＭＣＵと略す。）に関し、特に、演算対象のデータの精度に応じて複数のレジスタなどを制御するＭＣＵおよびそのＭＣＵによって実行されるプログラムをコンパイルするコンパイラに関する。
【背景技術】
【０００２】
近年、マイクロプロセッサを搭載した情報通信機器、家電機器などが広く普及している。マイクロプロセッサ、メモリなどを含んだコンピュータの機能を１個の半導体チップに収めたものを、特にＭＣＵと呼ぶ。
【０００３】
一般に、ＭＣＵ内のレジスタに保持されるデータは、その精度に関係なくハードウェアによって予め定められた精度で演算などの処理が行なわれる。そのため、演算対象となるデータの精度が低い場合であっても、演算対象とはならない上位の複数ビットに対して値の保持や転送などが行なわれてしまい、無駄な電力を消費するといった問題点があった。これに関連する技術として、特開平６−２５０８１８号公報に開示された発明がある。
【０００４】
特開平６−２５０８１８号公報に開示された算術論理演算装置においては、命令コード中に埋め込まれている演算するビット幅を命令解読部で解読し、解読結果信号を出力することによって２４ビット演算を行なうか、１６ビット演算を行なうかを制御し、動作させる必要のない算術論理演算装置およびレジスタを動作させないように制御するものである。
【特許文献１】特開平６−２５０８１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上述した特開平６−２５０８１８号公報に開示された算術論理演算装置においては、命令コード中に演算するビット幅を埋め込む必要があるため、命令コードによって指定される演算の種類やオペランドのビット数などが少なくなってしまうといった問題点がある。また、演算処理を伴わない命令を実行する場合には、消費電力を削減することができないといった問題点があった。
【０００６】
本発明は、上記問題点を解決するためになされたものであり、第１の目的は、レジスタへの電源供給などを制御して、消費電力を削減することが可能なマイクロコントローラユニットを提供することである。
【０００７】
第２の目的は、マイクロコントローラユニット内のレジスタへの電源供給などを制御して、マイクロコントローラユニットの消費電力を削減できるようにプログラムをコンパイルすることが可能なコンパイラを提供することである。
【課題を解決するための手段】
【０００８】
本発明のある局面に従えば、複数のレジスタと、フェッチした命令に応じて、複数のレジスタを用いた演算処理を実行する演算手段とを含んだマイクロコントローラユニットであって、複数のレジスタのそれぞれは、複数ビットのデータを所定単位で保持する複数のデータ保持手段を含み、マイクロコントローラユニットはさらに、必要とされるデータの精度を保持する精度保持手段と、精度保持手段により保持されるデータの精度に応じて、複数のレジスタの各々における複数のデータ保持手段にそれぞれ入力するデータを保持させるかどうかを制御する制御手段とを含む。
【０００９】
本発明の別の局面に従えば、マイクロコントローラユニットは、各々は複数ビットのデータを保持する複数のレジスタと、複数のレジスタにそれぞれ対応して設けられ、各々は対応のレジスタに保持されるデータの精度を示す情報を保持する複数の精度保持部と、フェッチした命令に応じて複数のレジスタの少なくとも１つのレジスタを用いて演算を実行し、少なくとも１つのレジスタに対応する精度保持部のデータ精度に応じたデータ幅で演算を実行する演算手段とを備える。
【００１０】
本発明のさらに別の局面に従えば、コンパイラは、プログラムに対して通常のコンパイル処理を行なうためのコンパイル処理手段と、コンパイル処理手段によってコンパイルされたプログラム内の関数で使用されるレジスタに必要とされる精度を判定し、当該レジスタの電源を供給するビットと電源を供給しないビットとを指定する命令コードを挿入するためのコード挿入手段とを含む。
【発明の効果】
【００１１】
本発明のある局面によれば、制御手段が、精度保持手段により保持されるデータの精度に応じて、複数のレジスタの各々における複数のデータ保持手段にそれぞれ入力するデータを保持させるかどうかを制御するので、マイクロコントローラユニットの消費電力を削減することが可能となった。
【００１２】
本発明の別の局面によれば、演算手段が、精度保持部のデータ精度に応じたデータ幅で演算を実行するので、マイクロコントローラユニットの消費電力を削減することが可能となった。
【００１３】
本発明のさらに別の局面によれば、コード挿入手段が、コンパイル処理手段によってコンパイルされたプログラム内の関数で使用されるレジスタに必要とされる精度を判定し、当該レジスタの電源を供給するビットと電源を供給しないビットとを指定する命令コードを挿入するので、マイクロコントローラユニットの消費電力を削減できるようにプログラムをコンパイルすることが可能となった。
【発明を実施するための最良の形態】
【００１４】
（第１の実施の形態）
図１は、本発明の第１の実施の形態におけるＭＣＵの概略構成を示すブロック図である。このＭＣＵは、ＣＰＵ（Central Processing Unit）コア１と、内蔵メモリ２と、内蔵メモリ２、外部のメモリなどにアクセスする場合に、ＣＰＵバス４および外部バスの制御を行なうバス制御部３とを含む。
【００１５】
図２は、図１に示すＣＰＵコア１の概略構成を示すブロック図である。ＣＰＵコア１は、複数のレジスタ０〜Ｎ（１１）と、データの精度情報を保持するための精度保持部１２と、ＭＣＵの動作モードが設定されるモードレジスタ１３と、レジスタ０〜Ｎ（１１）などの電源およびクロックの制御を行なう電源・クロック制御部１４と、演算部１５と、フェッチした命令をデコードする命令デコーダ１６と、データの精度を判定する精度判定部２０とを含む。なお、精度保持部１２および電源・クロック制御部１４は、各レジスタ０〜Ｎ（１１）毎に設けられる。また、精度保持部１２およびモードレジスタ１３は、ＣＰＵコア１によって読出し／書込みが可能なレジスタなどによって構成される。
【００１６】
バス１７および１８は、それぞれ３２ビットのデータバスを示しており、演算部１５による演算で使用されるデータが、レジスタ０〜Ｎのいずれかから転送される。また、メモリへのデータストアの際には、たとえばバス１７を介してデータが転送され、ＣＰＵバス４を介してメモリへデータがストアされる。
【００１７】
命令デコーダ１６は、フェッチした命令を順次デコードし、命令で指定された処理を実行するようＣＰＵコア各部を制御する。たとえば、レジスタ０〜Ｎのうち、命令の実行において使用するレジスタを選択する。また、演算命令により指定された演算を実行させるように演算部１５を制御する。ある特定の命令に応じて、モードレジスタ１３に対するモード設定も行なう。
【００１８】
バス１９は、３２ビットのデータバスを示しており、演算部１５による演算結果を、レジスタ０〜Ｎのうち使用するレジスタに転送する。また、メモリからのデータロードの際には、ＣＰＵバス４を介してメモリからデータが転送され、バス１９を介してデータが指定のレジスタに転送されてロードされる。
【００１９】
バス１７’および１８’は、それぞれ３ビットのバスを示しており、バス１７および１８を介してデータが転送されるレジスタに対応する精度保持部１２のデータを転送し、演算部１５へ供給する。
【００２０】
精度判定部２０は、バス１９を介して転送されるデータを受け、バス１９を介してレジスタにロードされるべきデータの精度を判定する。具体的には、３２ビットのデータを上位から１バイトずつに分け、各バイト内の全ビットが０であるか、または全ビットが１であるかをサーチする。以下に、サーチの仕方を場合分けして説明する。
【００２１】
（１）３２ビットデータの最上位バイトからサーチを行ない、バイト内の全ビットが０でない最初のバイトがサーチされたときに、そのバイトを含んだ下位バイトをデータ精度とする。
【００２２】
たとえば、バス１９上のデータが0x00 00 00 ffのとき、上位３バイトの全ビットが０であり、最下位バイトのみ全ビットが０でないため、その最下位バイトがサーチされる。これによって、データは８ビット精度と判定される。
【００２３】
また、バス１９上のデータが0x00 00 ff ffのとき、上位２バイトの全ビットが０であり、その次のバイトの全ビットが０でないため、上位から３つ目のバイトがサーチされる。これによって、データは１６ビット精度と判定される。
【００２４】
また、バス１９上のデータが0x01 ff ff 00のとき、最上位のバイトの全ビットが０でないため、この最上位バイトがサーチされる。これによって、データは３２ビット精度と判定される。
【００２５】
（２）３２ビットデータの全ビットが０のとき、そのデータは０ビット精度と判定される。
【００２６】
（３）３２ビットデータの最上位バイトからサーチを行ない、バイト内の全ビットが１でない最初のバイトがサーチされたときに、そのサーチされたバイトの先頭ビットが０か１かによって、以下のように判定を行なう。
【００２７】
１）サーチされたバイトの先頭ビットが１の場合、そのサーチされたバイトをデータ精度とする。
【００２８】
たとえば、バス１９上のデータが0xff ff f0 00のとき、上位２つのバイトの全ビットが１であり、その次のバイトの全ビットが１でないため、上位から３つ目のバイトがサーチされる。そのサーチされたバイトの先頭ビットが１であるので、サーチされた上位から３つ目のバイトによって、そのデータは１６ビット精度と判定される。
【００２９】
２）サーチされたバイトの先頭ビットが０の場合、そのサーチされたバイトの１つ上位のバイトをデータ精度とする。
【００３０】
たとえば、バス１９上のデータが0xff ff ff 00のとき、上位３つのバイトの全てが１であり、その次のバイトの全ビットが１でないため、最下位のバイトがサーチされる。そのサーチされたバイトの先頭ビットが０であるので、上位から３つ目のバイトによって、そのデータは１６ビット精度と判定される。
【００３１】
（４）３２ビットデータの全ビットが１のとき、そのデータは８ビット精度と判定される。
【００３２】
精度判定部２０で判定された精度によって、そのデータ精度をもつデータが、ロードされるべきレジスタに対応する精度保持部１２に保持される。その精度保持部１２の選択は、ロードされる対象のレジスタの選択とともに、命令デコーダ１６によって制御される。
【００３３】
命令デコーダ１６によってデコードされる命令のうち、レジスタへデータをロードするロード命令に関しては、次の種類の命令がサポートされている。
【００３４】
（１）ｌｄｕ命令…メモリから符号なしの３２ビットデータをロードする命令
（２）ｌｄｕｈ命令…メモリから符号なしの１６ビットデータをロードする命令
（３）ｌｄｕｂ命令…メモリから符号なしの８ビットデータをロードする命令
（４）ｌｄ命令…メモリから符号付きの３２ビットデータをロードする命令
（５）ｌｄｈ命令…メモリから符号付きの１６ビットデータをロードする命令
（６）ｌｄｂ命令…メモリから符号付きの８ビットデータをロードする命令
（７）ｌｄｉ命令…符号付きの即値をロードする命令
ｌｄｕ命令およびｌｄ命令によってロードされる３２ビットデータは、データバス１９の全ビット幅を使用して転送され、指令のレジスタに格納される。
【００３５】
ｌｄｕｈ命令およびｌｄｈ命令によってロードされる１６ビットデータは、３２ビットのデータバス１９の下位１６ビット幅を使用して転送され、バス１９の上位１６ビットは０に固定される。
【００３６】
ｌｄｕｂ命令およびｌｄｂ命令によってロードされる８ビットデータは、３２ビットのデータバス１９の下位８ビット幅を使用して転送され、バス１９の上位２４ビットは０に固定される。
【００３７】
ｌｄｉ命令による即値のロードの場合、即値を１６ビットデータとするか、８ビットデータとするかを指定できる。１６ビットの即値の場合、３２ビットのデータバス１９の下位１６ビット幅を使用して転送され、バス１９の上位１６ビットは０に固定される。また、８ビットの即値の場合、３２ビットのデータバス１９の下位８ビット幅を使用して転送され、バス１９の上位２４ビットは０に固定される。
【００３８】
メモリからレジスタへのデータ転送経路は、図１に示す内蔵メモリ２からＣＰＵバス４および図２に示すデータバス１９を経て、所定のレジスタとなる。また、ＭＣＵ外部のメモリであれば、外部メモリからバス制御部３、ＣＰＵバス４および図２に示すデータバス１９を経て、所定のレジスタとなる。また、即値のロードであれば、命令デコーダ１６からデータバス１９を経て、指定のレジスタとなる。
【００３９】
いずれのデータロードにおいても、データがデータバス１９を介して転送されるときに、精度判定部２０がそのデータ精度を決定する。
【００４０】
レジスタからメモリへデータをデータをストアするストア命令に関しては、次の種類の命令がサポートされている。
【００４１】
（１）ｓｔ命令…３２ビットデータのストア
（２）ｓｔｈ命令…１６ビットデータのストア
（３）ｓｔｂ命令…８ビットデータのストア
レジスタからメモリへのデータ転送経路は、レジスタ０〜Ｎのうちの指定されたレジスタからバス１７または１８および図１に示すＣＰＵバス４を介して内蔵メモリ２となる。また、ＭＣＵ外部のメモリであれば、レジスタ０〜Ｎのうちの指定されたレジスタからバス１７または１８、図１に示すＣＰＵバス４およびバス制御部３を解して外部メモリとなる。
【００４２】
命令デコーダ１６は、デコードした命令が符号付きロード命令である場合には信号Ｓ０にＨレベルを出力し、それ以外の命令の場合には信号Ｓ０にＬレベルを出力する。
【００４３】
図３は、図２に示す電源・クロック制御部１４をさらに詳細に説明するためのブロック図である。この電源・クロック制御部１４は、精度保持部１２によって保持されるデータの精度情報をデコードするデコーダ１４１と、デコーダ１４１のデコード結果に応じて、レジスタ１１に入力されるクロックの制御を行なうＡＮＤ回路１４０および１４２〜１４５と、ＯＲ回路１３９とを含む。
【００４４】
精度保持部１２は３ビットの情報Ｘ２，Ｘ１，Ｘ０を保持する。この３ビットの情報によって、データの精度が０ビット、８ビット、１６ビット、２４ビットおよび３２ビットのいずれであるかが示される。
【００４５】
図４は、モードレジスタ１３に保持されるモードおよび精度保持部１２に保持される３ビットの情報に対するデータ精度および図３に示す電源制御信号ａ〜ｄの関係を示す図である。モードレジスタの値が“０”のとき省電力モードを示し、“１”のとき通常モードを示す。なお、＊は値が“０”および“１”のいずれでもよいことを示している。
【００４６】
精度保持部１２に保持される情報Ｘ２，Ｘ１，Ｘ０のそれぞれが“０”、“１”、“１”のとき、データ精度が３２ビット精度であることを示し、電源制御信号ａ〜ｄの全てにＨレベルが出力される。
【００４７】
精度保持部１２に保持される情報Ｘ２，Ｘ１，Ｘ０のそれぞれが“０”、“１”、“０”のとき、データ精度が２４ビット精度であることを示し、電源制御信号ａにＬレベルが出力され、電源制御信号ｂ〜ｄにＨレベルが出力される。
【００４８】
精度保持部１２に保持される情報Ｘ２，Ｘ１，Ｘ０のそれぞれが“０”、“０”、“１”のとき、データ精度が１６ビット精度であることを示し、電源制御信号ａ〜ｂにＬレベルが出力され、電源制御信号ｃ〜ｄにＨレベルが出力される。
【００４９】
精度保持部１２に保持される情報Ｘ２，Ｘ１，Ｘ０のそれぞれが“０”、“０”、“０”のとき、データ精度が８ビット精度であることを示し、電源制御信号ａ〜ｃにＬレベルが出力され、電源制御信号ｄにＨレベルが出力される。
【００５０】
精度保持部１２に保持される情報Ｘ２が“１”のとき、他の値に関係なくデータ精度が０ビット精度であることを示し、電源制御信号ａ〜ｄの全てにＬレベルが出力される。
【００５１】
図３において、ＯＲ回路１３９は、精度保持部１２に保持されるＸ２の反転と、モードレジスタ１３に保持される値との論理和を演算する。ＡＮＤ回路１４０は、クロックＣＬＫと、ＯＲ回路１３９の出力との論理積を演算し、その出力をレジスタ１１ａの後述する最上位ＦＦ１１２ａのクロック信号とする。したがって、省電力モードのときであって、精度保持部１２が０ビット精度を保持しているときに限り、ＯＲ回路１３９の出力を用いてＦＦ１１２ａの電源を切るとともに、ＡＮＤ回路１４０の出力によってＦＦ１１２ａへのクロックを停止させる。
【００５２】
図５は、図３に示す３２ビットレジスタ１１の構成をさらに詳細に説明するためのブロック図である。上位８ビット（ｂ０〜ｂ７）に相当するレジスタ１１ａは、ＦＦ１１２ａ〜１１９ａと、ＦＦ１１２ａの電源を制御する電源制御回路１１０ａと、ＦＦ１１３ａ〜１１９ａの電源を制御する電源制御回路１１１ａと、セレクタ１２２ａ〜１２９ａ、１４１および１４２と、ＯＲ回路１４３とを含む。また、次の８ビット（ｂ８〜ｂ１５）に相当するレジスタ１１ｂは、電源制御回路１１１ｂと、ＦＦ１３２ａ〜１３９ａと、セレクタ１３２ｂ〜１３９ｂとを含む。
【００５３】
セレクタ１２２ａは、Ｘ２’信号が０のときに“０”を選択して出力し、Ｘ２信号が１のときにＦＦ１１２ａの出力を選択して出力する。また、セレクタ１２３ａ〜１２９ａは、電源制御信号ａが０のときにセレクタ１２２ａの出力を選択して出力し、電源制御信号ａが１のときにＦＦ１１３ａ〜１１９ａの出力を選択して出力する。
【００５４】
電源制御回路１１１ａは、電源制御信号ａがＨレベルのときにＦＦ１１３ａ〜１１９ａへの電源を供給する。また、電源制御信号ａがＬレベルのときにＦＦ１１３ａ〜１１９ａへの電源供給を停止する。このとき、ＦＦ１１３ａ〜１１９ａに入力されるクロック信号も停止される。
【００５５】
電源制御回路１１０は、Ｘ２’信号がＨレベルのとき、すなわちモードレジスタ１３が１のとき、または精度保持部１２が０ビット精度以外を保持しているときに、ＦＦ１１２ａへの電源を供給する。また、Ｘ２信号がＬレベルのときに、ＦＦ１１２ａへの電源供給を停止する。このとき、ＦＦ１１２ａに入力されるクロック信号も停止される。ＦＦ１１２ａへの電源供給が停止されているときは、他の電源制御信号ｂ〜ｄは全てＬレベルであり、セレクタ１２２ａが０を出力することでｂ０〜ｂ３１は全て０となる。
【００５６】
セレクタ１２３ａ〜１２９ａは、電源制御信号ａがＨレベルのときにＦＦ１１３ａ〜１１９ａの内容を選択して出力し、電源制御信号ａがＬレベルのときに前段のセレクタ１２２ａの出力を選択して出力する。このようにして、電源制御信号ａがＬレベルのときに符号ビットをレジスタ１１ａ内の全てのビットに出力することができ、符号拡張を行なうことが可能になる。
【００５７】
図６は、セレクタ１４１の動作を説明するための図である。セレクタ１４１は、精度保持部１２によって保持されるＸ１，Ｘ０信号のそれぞれが、“１”、“０”のとき、３２ビットデータの下位２４ビット目であるａ８を選択して出力する。また、セレクタ１４１は、精度保持部１２によって保持されるＸ１，Ｘ０のそれぞれが、“０”、“１”のとき、３２ビットデータの下位１６ビット目であるａ１６を選択して出力する。また、セレクタ１４１は、精度保持部１２によって保持されるＸ１，Ｘ０のそれぞれが、“０”、“０”のとき、３２ビットデータの下位８ビット目であるａ２４を選択して出力する。
【００５８】
ＯＲ回路１４６は、電源制御信号ａと、信号Ｓ０の反転との論理和を演算し、その演算結果をセレクタ１４２の選択制御信号としている。
【００５９】
レジスタにロードされるデータのデータ精度が３２ビットのとき、電源制御信号ａがＨレベルとなるので、セレクタ１４２はそのデータのＭＳＢであるａ０を選択して出力する。その結果、ＦＦ１１２ａはａ０を保持する。
【００６０】
符号付ロード命令によってレジスタにロードされるデータ精度が８ビット精度であるとき、Ｘ１，Ｘ０信号はそれぞれ“０”、“０”となるので、セレクタ１４１は、そのデータの下位８ビット目であるａ２４を選択する。また、ＯＲ回路１４６はＬレベルを出力するので、セレクタ１４２は、ａ２４を選択して出力する。その結果、ＦＦ１１２ａはａ２４を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ２４がｂ０〜ｂ２３に反映される。他のｂ２４〜ｂ３１は、ａ２４〜ａ３１の値となる。
【００６１】
符号付ロード命令によってレジスタにロードされるデータ精度が１６ビット精度であるとき、Ｘ１，Ｘ０信号はそれぞれ“０”、“１”となるので、セレクタ１４１は、そのデータの下位１６ビット目であるａ１６を選択する。また、ＯＲ回路１４６はＬレベルを出力するので、セレクタ１４２は、ａ１６を選択して出力する。その結果、ＦＦ１１２ａはａ１６を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ１６がｂ０〜ｂ１５に反映される。他のｂ１６〜ｂ３１は、ａ１６〜ａ３１の値となる。
【００６２】
符号付ロード命令によってレジスタにロードされるデータ精度が２４ビット精度であるとき、Ｘ１，Ｘ０信号はそれぞれ“１”、“０”となるので、セレクタ１４１は、そのデータの下位２４ビット目であるａ８を選択する。また、ＯＲ回路１４６はＬレベルを出力するので、セレクタ１４２は、ａ８を選択して出力する。その結果、ＦＦ１１２ａはａ８を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ８がｂ０〜ｂ７に反映される。他のｂ８〜ｂ３１は、ａ８〜ａ３１の値となる。
【００６３】
符号付ロード命令以外（たとえば、演算器１５を用いた演算命令、符号なしロード命令）によってレジスタにロードされるデータ精度が８ビット精度であるとき、ＯＲ回路１４６はＨレベルを出力するので、セレクタ１４２は、最上位ビットａ０を選択して出力する。その結果、ＦＦ１１２ａはａ０を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ０がｂ０〜ｂ２３に反映される。他のｂ２４〜ｂ３１は、ａ２４〜ａ３１の値となる。
【００６４】
符号付ロード命令以外によってレジスタにロードされるデータ精度が１６ビット精度であるとき、ＯＲ回路１４６はＨレベルを出力するので、セレクタ１４２は、最上位ビットａ０を選択して出力する。その結果、ＦＦ１１２ａはａ０を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ０がｂ０〜ｂ１５に反映される。他のｂ１６〜ｂ３１は、ａ１６〜ａ３１の値となる。
【００６５】
符号付ロード命令以外によってレジスタにロードされるデータ精度が２４ビット精度であるとき、ＯＲ回路１４６はＨレベルを出力するので、セレクタ１４２は、最上位ビットａ０を選択して出力する。その結果、ＦＦ１１２ａはａ０を保持する。このとき、セレクタ１２２ａ〜１２９ａ、１３２ｂから１３９ｂ、さらにはこれらに対応する１１ｃ、１１ｄ内のレジスタの選択により、ａ０がｂ０〜ｂ７に反映される。他のｂ８〜ｂ３１は、ａ８〜ａ３１の値となる。
【００６６】
図７（ａ）および図７（ｂ）は、図５に示すセレクタ（セレクタ１４１を除く）の構成例を示す図である。図７（ａ）に示すセレクタは、インバータ２０１と、トランジスタ２０２〜２０５とを含む。選択制御信号がＬレベルのとき、トランジスタ２０２および２０３がオンとなり、トランジスタ２０４および２０５がオフとなるため、入力０が選択されて出力される。また、選択制御信号がＨレベルのとき、トランジスタ２０４および２０５がオンとなり、トランジスタ２０２および２０３がオフとなるため、入力１が選択されて出力される。
【００６７】
図７（ｂ）に示すセレクタは、インバータ２１１と、ＮＡＮＤ回路２１２〜２１４とを含む。選択制御信号がＬレベルのとき、ＮＡＮＤ回路２１２が入力０の反転した値を出力し、ＮＡＮＤ回路２１３がＨレベルを出力するため、ＮＡＮＤ回路２１４は入力０を出力する。また、選択制御信号がＨレベルのとき、ＮＡＮＤ回路２１２がＨレベルを出力し、ＮＡＮＤ回路２１３が入力１の反転した値を出力するため、ＮＡＮＤ回路２１４は入力１を出力する。
【００６８】
図７（ｃ）は、セレクタ１４１の構成例を示す図である。図７（ｃ）に示すセレクタ１４１は、トランジスタ２２１，２２２，２２５，２２６，２２９および２３０と、ＮＯＲ回路２２３，２２７および２３１と、インバータ２２４，２２８および２３２とを含む。
【００６９】
Ｘ１，Ｘ０信号が“１”、“０”のとき、トランジスタ２２１および２２２がオンとなり、トランジスタ２２５，２２６，２２９および２３０がオフとなるため、ａ８が選択されて出力される。
【００７０】
Ｘ１，Ｘ０信号が“０”、“１”のとき、トランジスタ２２５および２２６がオンとなり、トランジスタ２２１，２２２，２２９および２３０がオフとなるため、ａ８が選択されて出力される。
【００７１】
Ｘ１，Ｘ０信号が“０”、“０”のとき、トランジスタ２２９および２３０がオンとなり、トランジスタ２２１，２２２，２２５および２２６がオフとなるため、ａ２４が選択されて出力される。
【００７２】
図８は、電源制御回路１１０ａ，１１１ａおよび１１１ｂの構成例を示す図である。電源制御回路１１０ａ，１１１ａおよび１１１ｂは、同じ構成を有している。たとえば、電源制御回路１１０ａは、トランジスタ２４１および２４２と、インバータ２４３とを含む。Ｘ２’信号がＬレベルのときに、トランジスタ２４１および２４２はオフとなり、ＦＦ１１２ａへの電源供給が停止される。また、Ｘ２’信号がＨレベルのときに、トランジスタ２４１および２４２がオンとなり、ＦＦ１１２ａへの電源が供給される。
【００７３】
図９は、図２に示す演算部１５の詳細を説明するための図である。この演算部１５は、電源・クロック制御部１５０と、８ビット演算器１７１と、１６ビット演算器１７２と、２４ビット演算器１７３と、３２ビット演算器１７４と、セレクタ３０２とを含む。
【００７４】
精度保持部１２ａは、データバス１７にデータを与える第１のソースレジスタに対応するデータ精度を保持する。また、精度保持部１２ｂは、データバス１８にデータを与える第２のソースレジスタに対応するデータ精度を保持する。
【００７５】
演算部１５は、演算命令のオペランドとして選択されたレジスタのデータを用いて演算命令で指定された演算を行なうが、その内部に設けられた電源・クロック制御部１５０がバス１７および１８の一方または双方のデータのデータ精度に応じて、演算部１５が行なう演算のデータ幅を決定する。
【００７６】
また、電源・クロック制御部１５０は、精度保持部１２ａに保持される値と精度保持部１２ｂに保持される値とを比較する比較器１５５と、デコーダ１５６と、ＮＯＲ回路１６０と、ＡＮＤ回路１６１〜１６８とを含む。
【００７７】
比較器１５５は、精度保持部１２ａおよび１２ｂが保持するデータ精度を比較し、大きい方のデータ精度を選択して出力する。データ精度が等しいときは、そのデータ精度を出力する。
【００７８】
デコーダ１５６は、比較器１５５から出力されるデータ精度をデコードする。デコードした結果、データ精度が３２ビット精度であれば電源制御信号ａのみをＨレベルにし、他の電源制御信号をＬレベルにする。また、データ精度が２４ビット精度であれば電源制御信号ｂのみをＨレベルにし、他の電源制御信号をＬレベルにする。また、データ精度が１６ビット精度であれば電源制御信号ｃのみをＨレベルにし、他の電源制御信号をＬレベルにする。また、データ精度が８ビット精度であれば電源制御信号ｄのみをＨレベルにし、他の電源制御信号をＬレベルにする。
【００７９】
８ビット演算器１７１は、ＡＮＤ回路１６１の出力がＨレベルのときクロックＣＬＫに同期してバス１７および１８のそれぞれの下位８ビットの算術演算／論理演算を行なう。また、ＡＮＤ回路１６１の出力がＬレベルのとき８ビット演算器１７１の電源供給が停止されるとともに、ＡＮＤ回路１６５の出力がＬレベルとなってクロックＣＬＫの供給が停止されて、８ビット演算器１７１は動作しない。
【００８０】
１６ビット演算器１７２は、ＡＮＤ回路１６２の出力がＨレベルのときクロックＣＬＫに同期してバス１７および１８のそれぞれの下位１６ビットの算術演算／論理演算を行なう。また、ＡＮＤ回路１６２の出力がＬレベルのとき１６ビット演算器１７２の電源供給が停止されるとともに、ＡＮＤ回路１６６の出力がＬレベルとなってクロックＣＬＫの供給が停止されて、１６ビット演算器１７２は動作しない。
【００８１】
２４ビット演算器１７３は、ＡＮＤ回路１６３の出力がＨレベルのときクロックＣＬＫに同期してバス１７および１８のそれぞれの下位２４ビットの算術演算／論理演算を行なう。また、ＡＮＤ回路１６３の出力がＬレベルのとき２４ビット演算器１７３の電源供給が停止されるとともに、ＡＮＤ回路１６７の出力がＬレベルとなってクロックＣＬＫの供給が停止されて、２４ビット演算器１７３は動作しない。
【００８２】
３２ビット演算器１７４は、ＯＲ回路１６４の出力がＨレベルのときクロックＣＬＫに同期してバス１７および１８のそれぞれの３２ビットの算術演算／論理演算を行なう。また、ＯＲ回路１６４の出力がＬレベルのとき３２ビット演算器１７４の電源供給が停止されるとともに、ＡＮＤ回路１６８の出力がＬレベルとなってクロックＣＬＫの供給が停止されて、３２ビット演算器１７４は動作しない。
【００８３】
ＮＯＲ回路１６０は、バス１７および１８のそれぞれの最上位ビットとなるｂ０どうしの非論理和を演算して出力する。すなわち、バス１７および１８の少なくとも一方の最上位ビットｂ０が１のとき、ＮＯＲ回路１６０はＬレベルを出力する。これによって、ＡＮＤ回路１６１〜１６３および１６５〜１６７がＬレベルを出力し、８ビット演算器１７１、１６ビット演算器１７２および２４ビット演算器１７３への電源とクロックの供給が停止される。また、ＯＲ回路１６４がＨレベルを出力するので、３２ビット演算器１７４への電源およびクロックが供給される。たとえば、符号付データの演算ff ff ff ff+00 00 00 01の正しい演算結果は00 00 00 00（０値）であるが、８ビット演算器１７１によってこの演算を行なうと、キャリーを含めて1 00となる。この演算結果を０値と識別するのが困難であるため、３２ビット演算器１７４によって演算を行なう。
【００８４】
バス１７および１８の最上位ビットｂ０がともに０のとき、ＮＯＲ回路１６０はＨレベルを出力する。これによって、比較器１５５が出力するビット精度に応じて演算器が選択され、演算が行なわれる。すなわち、データ精度が８ビット精度のとき８ビット演算器１７１が演算を行なう。また、データ精度が１６ビット精度のとき１６ビット演算器１７２が演算を行なう。また、データ精度が２４ビット精度のとき２４ビット演算器１７３が演算を行なう。また、データ精度が３２ビット精度のとき３２ビット演算器１７４が演算を行なう。
【００８５】
セレクタ３０２は、ＡＮＤ回路１６１〜１６４の出力に応じて、演算を行なった演算器の演算結果を選択して出力する。すなわち、３２ビット演算器１７４が選択されたときは、その出力する３２ビットの演算結果を３２ビットバス１９の全ビットに与える。また、２４ビット演算器１７３が選択されたときは、キャリーを含めた２５ビットの演算結果を３２ビットバス１９の下位２５ビットに与え、上位の７ビットを０に固定する。
【００８６】
また、１６ビット演算器１７２が選択されたときは、キャリーを含めた１７ビットの演算結果を３２ビットバス１９の下位１７ビットに与え、上位の１５ビットを０に固定する。また、８ビット演算器１７１が選択されたときは、キャリーを含めた９ビットの演算結果を３２ビットバス１９の下位９ビットに与え、上位の２３ビットを０に固定する。
【００８７】
上述した８ビット、１６ビット、２４ビットおよび３２ビットの演算器１７１〜１７４のそれぞれは、加算、減算などの算術演算や、論理和、論理積などの論理演算を行なう。
【００８８】
このように、精度保持部１２ａおよび１２ｂによって保持されるデータ精度に応じて演算のデータ幅を判定し、そのデータ幅の演算を行なうことで、消費電力の低減を実現できる。すなわち、データ精度が８ビット精度であれば、３２ビット幅で演算しても、８ビット幅で演算しても、演算結果は同じであるので、消費電力が少なくて済む８ビット幅で演算を行なうようにしている。
【００８９】
図１０は、本発明の第１の実施の形態におけるＭＣＵの動作を説明するためのフローチャートである。まず、ＣＰＵコア１は、全ての汎用レジスタの精度保持部１２に“０”をセットし（Ｓ１）、汎用レジスタ内のＦＦへの電源およびクロックを停止させる（Ｓ２）。
【００９０】
次に、ＣＰＵコア１は、内蔵メモリ２から、またはバス制御部３を介して外部メモリから命令をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して省電力モードであるか否かを判定する（Ｓ４）。省電力モードでなければ（Ｓ４，Ｎｏ）、ＣＰＵコア１は通常の処理を行ない（Ｓ１４）、ステップＳ３に戻って以降の処理を繰返す。
【００９１】
また、省電力モードであれば（Ｓ４，Ｙｅｓ）、ＣＰＵコア１はフェッチした命令の種類がいずれであるかを判定する（Ｓ５）。フェッチした命令がロード命令であれば（Ｓ５，ロード命令）、即値のロードであるか、メモリからのロードであるかを判定する（Ｓ６）。即値のロードであれば（Ｓ６，Ｙｅｓ）、ステップＳ９へ進む。また、メモリからのロードであれば（Ｓ６，Ｎｏ）、精度に応じてバス制御部３を制御し（Ｓ７）、ステップＳ９へ進む。
【００９２】
また、フェッチした命令が演算命令であれば（Ｓ５，演算命令）、ＣＰＵコア１は、オペランドとなるレジスタの精度に応じて演算処理を行ない（Ｓ８）、ステップＳ９へ進む。
【００９３】
ステップＳ９において、ＣＰＵコア１は、ロード先となるレジスタの精度保持部１２を更新する。そして、ロード先となるレジスタの精度に応じて電源およびクロックを制御し（Ｓ１０）、ロード処理を行なう。そして、ステップＳ３に戻って以降の処理を繰返す。
【００９４】
また、フェッチした命令がストア命令であれば（Ｓ５，ストア命令）、ＣＰＵコア１はストア命令の精度に応じてバス制御部３を制御し（Ｓ１２）、ストア処理を行なう（Ｓ１３）。そして、ステップＳ３に戻って以降の処理を繰返す。
【００９５】
フェッチした命令が、ロード命令、演算命令およびストア命令のいずれでもなければ（Ｓ５，その他の命令）、通常の処理を行ない（Ｓ１４）、ステップＳ３に戻って以降の処理を繰返す。
【００９６】
図１１は、本発明の第１の実施の形態におけるＭＣＵ１によって実行される命令列の一例を示す図である。この命令列の処理を、図１０に示すフローチャートにしたがって説明する。まず、ＣＰＵコア１は、全ての精度保持部１２に“０ビット精度”をセットし（Ｓ１）、汎用レジスタ内の全てのＦＦへの電源およびクロックを停止させる（Ｓ２）。そして、ＣＰＵコア１は、最初の命令“ＬＤＩ  Ｒ０，＃１”をフェッチする（Ｓ３）。
【００９７】
次に、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類がロード命令であるので（Ｓ５，ロード命令）、このロード命令が即値のロード命令であるか、メモリからのロード命令であるかを判定する（Ｓ６）。フェッチした命令が即値のロード命令であり（Ｓ６，Ｙｅｓ）、レジスタＲ０にロードする即値が“１”であるので、精度として８ビットを示す“０”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ０の下位８ビット（ｂｉｔ２４〜ｂ３１）および最上位ビット（ｂｉｔ０）以外のＦＦの電源およびクロックが停止される（Ｓ１０）。
【００９８】
そして、ＣＰＵコア１は、レジスタＲ０の下位８ビットに即値“１”をロードし（Ｓ１１）、ステップＳ３へ処理が戻る。
【００９９】
ＣＰＵコア１は、次の命令“ＬＤＩ  Ｒ１，＃０ｘ１００”をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類がロード命令であるので（Ｓ５，ロード命令）、このロード命令が即値のロード命令であるか、メモリからのロード命令であるかを判定する（Ｓ６）。フェッチした命令が即値のロード命令であり（Ｓ６，Ｙｅｓ）、レジスタＲ０にロードする即値が“０ｘ１００”であるので、精度として１６ビットを示す“１”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ０の下位１６ビット（ｂｉｔ１６〜ｂ３１）および最上位ビット（ｂｉｔ０）以外のＦＦの電源およびクロックが停止される（Ｓ１０）。
【０１００】
そして、ＣＰＵコア１は、レジスタＲ０の下位１６ビットに即値“０ｘ１００”をロードし（Ｓ１１）、ステップＳ３へ処理が戻る。
【０１０１】
ＣＰＵコア１は、最後の命令“ＡＤＤ  Ｒ０，Ｒ１”をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類が演算命令であるので（Ｓ５，演算命令）、オペランドとなるレジスタＲ０とＲ１との精度にしたがい、１６ビットの加算処理を行なう（Ｓ８）。このとき、レジスタＲ０のｂｉｔ１〜ｂｉｔ２３のＦＦには電源およびクロックが供給されていないので、レジスタＲ０の値を１６ビットで読出した場合、ビットｂ１６〜ｂ２３には符号ビット（ｂｉｔ０）の“０”が読出される。
【０１０２】
次に、ＣＰＵコア１は、レジスタＲ０にロードする値（加算の結果）が“０ｘ１０１”であるので、精度として１６ビットを示す“１”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ０の下位１６ビット（ｂｉｔ１６〜ｂ３１）および最上位ビット（ｂｉｔ０）以外のＦＦの電源およびクロックが停止される（Ｓ１０）。
【０１０３】
そして、ＣＰＵコア１は、レジスタＲ０の下位１６ビットに“０ｘ１０１”をロードし（Ｓ１１）、ステップＳ３へ処理が戻る。
【０１０４】
図１２は、本発明の第１の実施の形態におけるＭＣＵ１によって実行される命令列の他の一例を示す図である。この命令列の処理を、図１０に示すフローチャートにしたがって説明する。まず、ＣＰＵコア１は、全ての汎用レジスタの精度保持部１２に“０ビット精度”をセットし（Ｓ１）、汎用レジスタ内の全てのＦＦへの電源およびクロックを停止させる（Ｓ２）。そして、ＣＰＵコア１は、最初の命令“ＬＤＢ  Ｒ０，＃ｖａｌ”をフェッチする（Ｓ３）。
【０１０５】
次に、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類がロード命令であるので（Ｓ５，ロード命令）、このロード命令が即値のロード命令であるか、メモリからのロード命令であるかを判定する（Ｓ６）。フェッチした命令がメモリからのロード命令であり（Ｓ６，Ｎｏ）、内蔵メモリ２から８ビットのデータをロードする命令であるので、バス制御部３はＣＰＵバス４の下位８ビット以外の電源およびクロックを停止させる（Ｓ７）。そして、内蔵メモリ２から符号付き８ビット変数ｖａｌの値“０ｘｆｆ”が出力される。
【０１０６】
次に、ＣＰＵコア１は、レジスタＲ０にロードする値が“０ｘｆｆ”であるので、精度として８ビットを示す“０”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ０の下位８ビット（ｂｉｔ２４〜ｂ３１）および最上位ビット（ｂｉｔ０）以外のＦＦの電源およびクロックが停止される（Ｓ１０）。
【０１０７】
そして、ＣＰＵコア１は、レジスタＲ０の下位８ビットに値“０ｘｆｆ”をロードする（Ｓ１１）。このとき、同時に符号ビットｂｉｔ０にｂｉｔ２４の値がロードされる。そして、ステップ３へ処理が戻る。
【０１０８】
ＣＰＵコア１は、次の命令“ＬＤＩ  Ｒ１，＃１”をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４、Ｙｅｓ）、フェッチされた命令の種類がロード命令であるので（Ｓ５，ロード命令）、このロード命令が即値のロード命令であるか、メモリからのロード命令であるかを判定する（Ｓ６）。フェッチした命令が即値のロード命令であり（Ｓ６，Ｙｅｓ）、レジスタＲ１にロードする即値が“１”であるので、精度として８ビットを示す“０”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ１の下位８ビット（ｂｉｔ２４〜ｂ３１）および最上位ビット（ｂｉｔ０）以外のＦＦの電源およびクロックが停止される（Ｓ１０）。
【０１０９】
そして、ＣＰＵコア１は、レジスタＲ１の下位８ビットに即値“１”をロードし（Ｓ１１）、ステップＳ３へ処理が戻る。
【０１１０】
ＣＰＵコア１は、次の命令“ＳＴ  Ｒ０，＃ｖａｌ２”をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類がストア命令であり（Ｓ５，ストア命令）、３２ビットのストア命令であるので、ＣＰＵバス４の３２ビット全ての電源およびクロックが供給されるようにバス制御部３を制御する（Ｓ１２）。そして、ＣＰＵコア１は、レジスタＲ０の値をＣＰＵバス４に出力する。
【０１１１】
このとき、レジスタＲ０の下位８ビットおよび符号ビット以外のＦＦへの電源およびクロックの供給が停止されているので、下位８ビット以外のビットには符号ビットである“１”が出力される。その結果、ＣＰＵバス４には３２ビットの“−１（０ｘｆｆｆｆｆｆｆｆ）”が出力され、この値が変数ｖａｌ２にストアされ（Ｓ１３）、ステップＳ３へ処理が戻る。
【０１１２】
ＣＰＵコア１は、最後の命令“ＡＤＤ  Ｒ０，Ｒ１”をフェッチする（Ｓ３）。そして、ＣＰＵコア１は、モードレジスタ１３を参照して、現在省電力モードがセットされていることを確認すると（Ｓ４，Ｙｅｓ）、フェッチされた命令の種類が演算命令であるので（Ｓ５，演算命令）、オペランドとなるレジスタＲ０とＲ１との精度および符号ビットの値にしたがい、３２ビットの加算処理を行なう（Ｓ８）。
【０１１３】
次に、ＣＰＵコア１は、レジスタＲ０にロードする値が“０（−１＋１）”であるので、精度として８ビットを示す“０”を精度保持部１２に設定する（Ｓ９）。これによって、レジスタＲ０の精度は０ビット精度となり、図５に示す全てのＦＦには電源もクロックも供給されず（Ｓ１０）、セレクタ１４１および１４２を除く全てのセレクタが０側を選択するので、出力ｂ０〜ｂ３１は全て０となる（Ｓ１１）。
【０１１４】
なお、本実施の形態において、３２ビットのレジスタ１１として、フラッシュメモリ、バックアップされたＳＲＡＭ（Static Random Access Memory）などを用いるようにすれば、レジスタに対してアクセスするとき以外は、電源の供給を停止させることができる。これらのメモリを、不揮発性メモリと呼ぶことにする。
【０１１５】
また、本実施の形態においては、モードレジスタ１３に省電力モードであるか否かを示す情報を格納するようにしたが、省電力モードと通常のモードとを切換えるための専用命令を設け、その専用命令をプログラム内に挿入することによってモードを直接切換えるようにしてもよい。
【０１１６】
また、本実施の形態においては、電源およびクロックの両方の供給を停止するようにしたが、電源およびクロックのいずれか一方のみの供給を停止するようもしてもよい。また、たとえばロードされるデータの入力およびＦＦの出力のフィードバックのいずれかを選択し、当該ＦＦの入力に与えるセレクタを設けるようにする。そして、ＦＦの内容を更新しないときはＦＦの出力を選択するようにすれば、電力の消費を削減することが可能となる。
【０１１７】
また、図９においては、複数の演算器１７１〜１７４を備え、この中から演算に使用する演算器を選択するようにしたが、１つの演算器だけを備え、演算のデータ精度に応じてその演算器において演算に必要でないビット部分を動作させないようにしてもよい。
【０１１８】
以上説明したように、本実施の形態におけるＭＣＵ１によれば、各レジスタに設けられた精度保持部１２の値に応じて、レジスタ内のＦＦへの電源およびクロックの供給を制御するようにしたので、ＭＣＵ１の消費電力を削減することが可能となった。
【０１１９】
また、０ビット精度以外のとき最上位ビットｂ０（符号ビット）の値を保持するＦＦには電源を常に供給するようにし、電源の供給が停止されたレジスタからは符号ビットと同じ値が出力されるようにしたので、符号拡張を容易に行なうことが可能となった。
【０１２０】
（第２の実施の形態）
図１３は、本発明の第２の実施の形態におけるＣＰＵコアの概略構成を示すブロック図である。図２に示す第１の実施の形態におけるＣＰＵコアと比較して、精度判定部２０が削除されている点、および命令デコーダ１６が後述する専用命令をデコードして、データ精度を精度保持部１２に設定する点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。
【０１２１】
図１４は、本発明の第２の実施の形態におけるコンパイラの構成例を示すブロック図である。このコンパイラは、コンピュータ本体２１、ディスプレイ装置２２、ＦＤ（Flexible Disk）２４が装着されるＦＤドライブ２３、キーボード２５、マウス２６、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）２８が装着されるＣＤ−ＲＯＭ装置２７およびネットワーク通信装置２９を含む。
【０１２２】
プログラムをコンパイルするプログラム（以下、コンパイルプログラムと呼ぶ。）は、ＦＤ２４またはＣＤ−ＲＯＭ２８等の記録媒体によって供給される。コンパイルプログラムがコンピュータ本体２１によって実行されることにより、プログラムのコンパイルが行なわれる。なお、コンパイルプログラムは、ネットワーク通信装置２９を介して、他のコンピュータから供給されてもよい。
【０１２３】
コンピュータ本体２１は、ＣＰＵ（Central Processing Unit）３０、ＲＯＭ（Read Only Memory）３１、ＲＡＭ（Random Access Memory）３２およびハードディスク３３を含む。ＣＰＵ３０は、ディスプレイ装置２２、ＦＤドライブ２３、キーボード２５、マウス２６、ＣＤ−ＲＯＭ装置２７、ネットワーク通信装置２９、ＲＯＭ３１、ＲＡＭ３２またはハードディスク３３との間でデータを入出力しながら処理を行う。ＦＤ２４またはＣＤ−ＲＯＭ２８に記録された検査プログラムは、ＣＰＵ３０によりＦＤドライブ２３またはＣＤ−ＲＯＭ装置２７を介してハードディスク３３に格納される。ＣＰＵ３０は、ハードディスク３３から適宜コンパイルプログラムをＲＡＭ３２にロードして実行することによって、プログラムのコンパイルが行なわれる。
【０１２４】
図１５は、本発明の第２の実施の形態におけるコンパイラの機能的構成を示す示すブロック図である。このコンパイラは、通常のコンパイル処理を行なうコンパイル処理部４１と、電源の制御レベルを判定する電源制御レベル判定部４２と、電源制御レベルがレベル１の場合の電源制御コードを挿入するレベル１電源制御コード挿入部４３と、電源制御レベルがレベル２の場合の電源制御コードを挿入するレベル２電源制御コード挿入部４４とを含む。
【０１２５】
図１６は、本発明の第２の実施の形態におけるコンパイラの処理手順を説明するためのフローチャートである。まず。コンパイル処理部４１は、通常のコンパイル処理を行なう（Ｓ２１）。なお、このコンパイル処理は、一般的なコンパイラによって行なわれる処理と同様であるので、詳細な説明は行なわない。
【０１２６】
次に、電源制御レベル判定部４２は、コンパイルオプションで指定された電源制御のレベルを判定する（Ｓ２２）。電源制御レベルが、電源制御を行なわないことを示すレベル０であれば（Ｓ２２，０）、そのまま処理を終了する。
【０１２７】
また、電源制御レベルが、関数の先頭でのみ電源制御を行なうことを示すレベル１であれば（Ｓ２２，１）、レベル１電源制御コード挿入部４３は、レベル１の電源制御コードの挿入処理を行なう（Ｓ２３）。なお、このレベル１の電源制御コード挿入処理については後述する。
【０１２８】
また、電源制御レベルが、関数の途中でも電源制御を行なうことを示すレベル２であれば（Ｓ２２，２）、レベル１電源制御コード挿入部４３は、レベル１の電源制御コードの挿入処理を行なう（Ｓ２４）。そして、レベル２電源制御コード挿入部４４は、レベル２の電源制御コードの挿入処理を行なう（Ｓ２５）。なお、このレベル２の電源制御コード挿入処理については後述する。
【０１２９】
図１７は、図１６のステップＳ２３およびＳ２４のレベル１の電源制御コード挿入処理の詳細を説明するためのフローチャートである。まず、レベル１電源制御コード挿入部４３は、変数Ｋに関数の番号の初期値として“１”を代入する（Ｓ３１）。
【０１３０】
次に、変数Ｋが関数の個数以下であるか否かが判定される（Ｓ３２）。変数Ｋが関数の個数よりも大きければ（Ｓ３２，Ｎｏ）、処理を終了する。また、変数Ｋが関数の個数以下であれば（Ｓ３２，Ｙｅｓ）、変数Ｎにテンポラリレジスタの番号の初期値として“１”を代入する（Ｓ３３）。なお、テンポラリレジスタとは、関数の呼出し前後で値を保持していなくてもよいレジスタ、すなわち、その関数内で自由に使用できるレジスタを指すものとする。
【０１３１】
次に、変数Ｎがテンポラリレジスタの個数以下であるか否かが判定される（Ｓ３４）。変数Ｎがテンポラリレジスタの個数よりも大きければ（Ｓ３４，Ｎｏ）、次の関数の処理を行なうために変数Ｋを１だけインクリメントし（Ｓ４１）、ステップＳ３２に戻って以降の処理が繰返される。
【０１３２】
また、変数Ｎがテンポラリレジスタの個数以下であれば（Ｓ３４，Ｙｅｓ）、レベル１電源制御コード挿入部４３は、関数Ｋ内におけるテンポラリレジスタＮに必要とされる精度を判定する（Ｓ３５）。必要とされる精度が３２ビットであれば（Ｓ３５，３２ビット）、レベル１電源制御コード挿入部４３は、テンポラリレジスタＮの全てのビットに電源およびクロックを供給することを示す命令を関数Ｋの先頭に挿入し（Ｓ３６）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ４０）、ステップＳ３４に戻って以降の処理が繰返される。なお、必要とされる精度は、テンポラリレジスタに割当てる変数の型などから判定される。
【０１３３】
また、必要とされる精度が１６ビットであれば（Ｓ３５，１６ビット）、レベル１電源制御コード挿入部４３は、テンポラリレジスタの上位１６ビットへの電源およびクロックの供給を停止し、テンポラリレジスタの下位１６ビットに電源およびクロックを供給することを示す命令を関数Ｋの先頭に挿入し（Ｓ３７）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ４０）、ステップＳ３４に戻って以降の処理が繰返される。
【０１３４】
また、必要とされる精度が８ビットであれば（Ｓ３５，８ビット）、レベル１電源制御コード挿入部４３は、テンポラリレジスタの上位２４ビットへの電源およびクロックの供給を停止し、テンポラリレジスタの下位８ビットに電源およびクロックを供給することを示す命令を関数Ｋの先頭に挿入し（Ｓ３８）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ４０）、ステップＳ３４に戻って以降の処理が繰返される。
【０１３５】
また、テンポラリレジスタＮが使用されなければ（Ｓ３５，未使用）、レベル１電源制御コード挿入部４３は、テンポラリレジスタの全てのビットへの電源およびクロックの供給を停止することを示す命令を関数Ｋの先頭に挿入し（Ｓ３９）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ４０）、ステップＳ３４に戻って以降の処理が繰返される。
【０１３６】
図１８は、図１６のステップＳ２５のレベル２の電源制御コード挿入処理の詳細を説明するためのフローチャートである。まず、レベル２電源制御コード挿入部４４は、変数Ｋに関数の番号の初期値として“１”を代入する（Ｓ５１）。
【０１３７】
次に、変数Ｋが関数の個数以下であるか否かが判定される（Ｓ５２）。変数Ｋが関数の個数よりも大きければ（Ｓ５２，Ｎｏ）、処理を終了する。また、変数Ｋが関数の個数以下であれば（Ｓ５２，Ｙｅｓ）、変数Ｎにテンポラリレジスタの番号の初期値として“１”を代入する（Ｓ５３）。
【０１３８】
次に、変数Ｎがテンポラリレジスタの個数以下であるか否かが判定される（Ｓ５４）。変数Ｎがテンポラリレジスタの個数よりも大きければ（Ｓ５４，Ｎｏ）、次の関数の処理を行なうために変数Ｋを１だけインクリメントし（Ｓ５８）、ステップＳ５２に戻って以降の処理が繰返される。
【０１３９】
また、変数Ｎがテンポラリレジスタの個数以下であれば（Ｓ５４，Ｙｅｓ）、関数Ｋ内でテンポラリレジスタＮが使用されているか否かが判定される（Ｓ５５）。テンポラリレジスタＮが使用されていなければ（Ｓ５５，Ｎｏ）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ５７）、ステップＳ５４に戻って以降の処理が繰返される。
【０１４０】
テンポラリレジスタＮが使用されていれば（Ｓ５５，Ｙｅｓ）、関数Ｋ内でテンポラリレジスタＮが最後に使用されている部分を検索し、その直後にテンポラリレジスタＮの全てのビットへの電源およびクロックの供給を停止することを示す命令を挿入し（Ｓ５６）、次のテンポラリレジスタの処理を行なうために変数Ｎを１だけインクリメントし（Ｓ５７）、ステップＳ５４に戻って以降の処理が繰返される。
【０１４１】
以上説明したように、本実施の形態におけるコンパイラによれば、関数内のテンポラリレジスタに必要とされる精度を判定して、テンポラリレジスタ内の各ビットに対する電源およびクロックを制御するようにしたので、第１の実施の形態において説明したＭＣＵ１によって実行されるプログラムを、効率的にコンパイルすることが可能となった。
【０１４２】
また、電源制御のレベルを２つに分けて、それぞれ異なる方法でテンポラリレジスタ内の各ビットに対する電源およびクロックを制御するようにしたので、コンパイラの汎用性をさらに高めることが可能となった。
【０１４３】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１４４】
【図１】本発明の第１の実施の形態におけるＭＣＵの概略構成を示すブロック図である。
【図２】図１に示すＣＰＵコア１の概略構成を示すブロック図である。
【図３】図２に示す電源・クロック制御部１４をさらに詳細に説明するためのブロック図である。
【図４】モードレジスタ１３に保持されるモードおよび精度保持部１２に保持される３ビットの情報に対するデータ精度および図３に示す電源制御信号ａ〜ｄの関係を示す図である。
【図５】図３に示す３２ビットレジスタ１１の構成をさらに詳細に説明するためのブロック図である。
【図６】セレクタ１４１の動作を説明するための図である。
【図７】図５に示すセレクタの構成例を示す図である。
【図８】電源制御回路１１０ａ，１１１ａおよび１１１ｂの構成例を示す図である。
【図９】図２に示す演算部１５の詳細を説明するための図である。
【図１０】本発明の第１の実施の形態におけるＭＣＵの動作を説明するためのフローチャートである。
【図１１】本発明の第１の実施の形態におけるＭＣＵ１によって実行される命令列の一例を示す図である。
【図１２】本発明の第１の実施の形態におけるＭＣＵ１によって実行される命令列の他の一例を示す図である。
【図１３】本発明の第２の実施の形態におけるＣＰＵコアの概略構成を示すブロック図である。
【図１４】本発明の第２の実施の形態におけるコンパイラの構成例を示すブロック図である。
【図１５】本発明の第２の実施の形態におけるコンパイラの機能的構成を示す示すブロック図である。
【図１６】本発明の第２の実施の形態におけるコンパイラの処理手順を説明するためのフローチャートである。
【図１７】図１６のステップＳ２３およびＳ２４のレベル１の電源制御コード挿入処理の詳細を説明するためのフローチャートである。
【図１８】図１６のステップＳ２５のレベル２の電源制御コード挿入処理の詳細を説明するためのフローチャートである。
【符号の説明】
【０１４５】
１  ＣＰＵコア、２  内蔵メモリ、３  バス制御部、４  ＣＰＵバス、１１  レジスタ０〜Ｎ、１２，１２ａ，１２ｂ  精度保持部、１３  モードレジスタ、１４、１５０  電源・クロック制御部、１５  演算部、２０  精度判定部、２１  コンピュータ本体、２２  ディスプレイ装置、２３  ＦＤドライブ、２４  ＦＤ、２５  キーボード、２６  マウス、２７  ＣＤ−ＲＯＭ装置、２８  ＣＤ−ＲＯＭ、２９  ネットワーク通信装置、４１  コンパイル処理部、４２  電源制御レベル判定部、４３  レベル１電源制御コード挿入部、４４  レベル２電源制御コード挿入部、１１０，１１１ａ，１１１ｂ  電源制御回路、１１２ａ〜１１９ａ，１３２ａ〜１３９ａ  ＦＦ、１２３ａ〜１２９ａ，１３２ｂ〜１３９ｂ，１４１，１４２  セレクタ、１３９，１４６，１６４，２２３，２２７，２３１  ＯＲ回路、１４１，１５６  デコーダ、１４０，１４２〜１４５，１６１〜１６３，１６５〜１６８  ＡＮＤ回路、１５５  比較器、１６０  ＮＯＲ回路、１７１  ８ビット演算器、１７２  １６ビット演算器、１７３  ２４ビット演算器、１７４  ３２ビット演算器、２０１，２１１，２２４，２２８，２３２，２４３  インバータ、２０２〜２０５，２２１，２２２，２２５，２２６，２２９，２３０，２４１，２４２  トランジスタ、２１２〜２１４  ＮＡＮＤ回路。
【図１】
2005078518.tif 000003
【図２】
2005078518.tif 000004
【図３】
2005078518.tif 000005
【図４】
2005078518.tif 000006
【図５】
2005078518.tif 000007
【図６】
2005078518.tif 000008
【図７】
2005078518.tif 000009
【図８】
2005078518.tif 000010
【図９】
2005078518.tif 000011
【図１０】
2005078518.tif 000012
【図１１】
2005078518.tif 000013
【図１２】
2005078518.tif 000014
【図１３】
2005078518.tif 000015
【図１４】
2005078518.tif 000016
【図１５】
2005078518.tif 000017
【図１６】
2005078518.tif 000018
【図１７】
2005078518.tif 000019
【図１８】
2005078518.tif 000020