(57)【要約】【課題】動作中の周波数変更に要するタイムラグを解消することができ、タスクに応じた周波数制御を的確かつ迅速に実行することにより、消費電力を低減化することができるマイクロコントローラを提供する。【解決手段】オペレーションコードにシステムクロックの分周比を決定する周波数制御信号を付加し、その周波数制御信号をオペレーションコードとともにパイプライン処理によりフェッチ、解読することにより、実行命令のパイプライン処理の中で周波数制御が可能となるため、周波数変更に要するタイムラグを解消しタスクに応じた周波数制御を的確かつ迅速に実行することによりマイクロコントローラの消費電力を低減することが可能となる。【選択図】        図３
2004302827.tif 000002
【特許請求の範囲】
【請求項１】
発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号の中から周波数情報に応じた前記クロック信号をシステムクロックとして入力し、前記システムクロックに同期して動作し、メモリに格納されたオペレーションコードとオペランドからなる命令プログラムに対して、パイプライン処理により前記オペレーションコードと前記オペランドをフェッチして解読し、その解読結果に基づいて前記命令プログラムを実行するプロセッサを備え、
前記オペレーションコードは前記システムクロックの分周比を決定する周波数制御信号が付加されて前記メモリに格納されており、
前記プロセッサは、前記周波数制御信号を前記オペレーションコードとともにパイプライン処理によりフェッチ、解読することにより前記周波数制御信号に応じた前記周波数情報を出力することを特徴とするマイクロコントローラ。
【請求項２】
発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号の中から周波数情報に応じた前記クロック信号をシステムクロックとして入力し、前記システムクロックに同期して動作し、メモリに格納された拡張コードとオペレーションコードとオペランドからなる命令プログラムに対して、パイプライン処理により前記拡張コードと前記オペレーションコードと前記オペランドをフェッチして解読し、その解読結果に基づいて前記命令プログラムを実行するプロセッサを備え、
マシンコードによって前記オペレーションコードを各分周比に対応してページに分類された複数ページからなる命令マップとして構成し、前記オペレーションコードとともにパイプライン処理される前記拡張コードが前記命令マップのページを示し、
前記プロセッサは、前記拡張コードをパイプライン処理によりフェッチ、解読することにより前記拡張コードが示す前記命令マップのページに対応する分周比に応じた前記周波数情報を出力することを特徴とするマイクロコントローラ。
【請求項３】
前記発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号を生成し、その中から前記プロセッサから出力される前記周波数情報に応じたクロック信号を選択して前記プロセッサへ前記システムクロックとして出力するクロックジェネレータを設けた請求項１または２記載のマイクロコントローラ。
【請求項４】
前記クロックジェネレータは、
前記発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号を出力する分周手段と、
前記分周手段の出力する前記複数のクロック信号の中から選択信号に基づいて１つのクロック信号を選択し前記システムクロックとして出力する選択手段と、
前記プロセッサから出力される前記周波数情報に対応する前記選択信号を前記選択手段に出力する制御手段とを有した請求項３記載のマイクロコントローラ。
【請求項５】
ソースプログラムに記述された前記システムクロックの分周比を決定する分周比設定記述に従って前記周波数制御信号を生成し、前記分周比設定記述の後段の命令から生成される前記オペレーションコードに付加しＲＯＭコード化する手段を設けた請求項１記載のマイクロコントローラ。
【請求項６】
ソースプログラムに記述された前記システムクロックの分周比を決定する前記分周比設定記述に従って前記周波数制御信号を生成し、前記分周比設定記述の前段の命令の実行サイクル数が基準未満であれば前記周波数制御信号を前記分周比設定記述の前段の命令から生成される前記オペレーションコードに付加し、基準以上であれば前記周波数制御信号を前記分周比設定記述の後段の命令から生成される前記オペレーションコードに付加しＲＯＭコード化する手段を設けた請求項１記載のマイクロコントローラ。
【請求項７】
ソースプログラムに記述された前記システムクロックの分周比を決定する分周比設定記述に従って分周比に対応する前記拡張コードを選択し、前記拡張コードが示す命令マップのページから前記分周比設定記述の後段の命令に相当する前記オペレーションコードを選択しＲＯＭコード化する手段を設けた請求項２記載のマイクロコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、システムクロックに同期して動作し、ＲＯＭ等のメモリ上の命令プログラムに対し、パイプライン処理によりフェッチ、解読および実行するマイクロコントローラに関する。
【０００２】
【従来の技術】
低消費電力化の観点でマイクロコントローラを用いたシステムを見直した場合、すべてのタスクにおいてマイクロコントローラの最高周波数での動作が必要とされるわけではない。要は、システムのパフォーマンスを落とさない最低限の動作周波数であればよい。
【０００３】
一般的なマイクロコントローラにおいてはこのような場合を想定し、原発振からシステムクロックを生成する過程で分周比を変更できる構成としている。
【０００４】
従来のマイクロコントローラでは、分周比の制御はアドレスマッピングされたレジスタへの任意データの設定によって行われることが多いが、このような構成の場合、消費電力、動作周波数を細やかな制御を試みても書き込みのための命令実行サイクル分の時間的ロスが発生してしまうことが障害になり、意図した周波数制御および電力制御の効果が得られない場合がある。これら課題の対策として、一方ではアクセスしたメモリ空間に応じて周波数を変更しているものもある（例えば特許文献１参照）。しかしながら、変更すべき周波数に割り当てられたメモリ空間へのジャンプ命令の実行が必要になるためいずれにしても完全な課題解決には至っていない。
【０００５】
以上のような従来のマイクロコントローラについて、以下に説明する。図１０、図１１は、従来のマイクロコントローラの概略構成を示すブロック図であり、図１０はその内部のクロックジェネレータの構成を詳細に示し、図１１はその内部のＣＰＵの構成を詳細に示したものである。
【０００６】
図１０において、１０００はマイクロコントローラであり、１００はＣＰＵである。ＲＯＭ７００とはバスを介して接続され、クロックジェネレータ８００とはバスを介した接続以外にクロックジェネレータ８００からシステムクロックｓｙｓｃｌｋが入力されマイクロコントローラ１０００はこのｓｙｓｃｌｋに同期して動作する。クロックジェネレータ８００は原発振ｏｓｃｉｎを入力とし、クロック分周回路８０１、セレクタ８０２、クロック分周制御回路８０３、クロック分周制御レジスタ８０４から構成される。クロック分周回路８０１はｏｓｃｉｎを分周し、１分周信号の他複数の分周信号を生成する。クロック分周制御レジスタ８０４はＣＰＵ１００の処理する命令によってリード／ライト可能なレジスタで設定されるデータによってクロック分周回路８０１で生成される分周信号のうちひとつを選択する情報を保持する。クロック分周制御回路８０３はクロック分周制御レジスタ８０４に設定されたデータをもとにクロック切り替えのタイミングを調整し、セレクタ８０２の制御信号ｏｓｃｓｅｌを出力する。セレクタ８０２はｏｓｃｓｅｌに従いクロック分周回路８０１から出力される分周信号の中からひとつを選択し、ｓｙｓｃｌｋとしてＣＰＵ１００に伝達する。
【０００７】
図１１において、ＣＰＵ１００は、命令デコーダ４００、データパス３００、データレジスタ５００、アドレスレジスタ６００、バスインターフェイス２００から構成され、ＣＰＵ内部でのデータのやり取りはバスインターフェイス２００を介して行い、ＣＰＵの動作はマイクロコード（ＭＩＲ）によって制御される。次に、上記のように構成されたマイクロコントローラについて、８ビットマイクロコントローラを例にその一般的な動作を以下に説明する。
【０００８】
まず、ＲＯＭ７００から入力されたデータは、バスインターフェイス２００を経由して、命令デコーダ４００内のインストラクションフェッチバッファ（ＩＦＢ）４０１に取り込まれ、インストラクションバッファ（ＩＢ）４０２を経由し、その後、オペレーションコードとオペランドに分割される。
【０００９】
ＩＢ４０２から出力されたオペレーションコードは、インストラクションレジスタ（ＩＲ）４０３に入力された後、プログラマブルロジックアレイ（ＰＬＡ）４０４に解読され、ＭＩＲとしてバスインターフェイス２００、データパス３００、命令デコーダ４００の各構成ブロックへ供給され、各構成ブロックは、入力されたＭＩＲに従った処理動作を実行する。
【００１０】
またＩＢ４０２から出力されたオペランドは、ＭＩＲに従って、データパス３００あるいはデータレジスタ６００やアドレスレジスタ７００などへ伝達される。
【００１１】
システムクロックｓｙｓｃｌｋの分周比を変更するにはアドレスマッピングされたクロック分周制御レジスタ８０４に対して各分周比に相当する設定値を書き込むことでクロック分周制御回路８０３で切り替えタイミングを調整し、選択信号ｏｓｃｓｅｌをセレクタ８０２に出力し、それに応じてセレクタ８０２では分周信号を選択し、ｓｙｓｃｌｋとしてＣＰＵ１００に伝達する。
【００１２】
以上のような従来のマイクロコントローラの動作をプログラム例、タイミングチャートを用いて説明する。
【００１３】
図１２の（ａ）、（ｂ）、（ｃ）は、従来のマイクロコントローラの命令フォーマット、プログラム例、動作タイミングチャートである。
【００１４】
命令フォーマットは、命令マップのページ数を示す４ビットの拡張コードと、８ビットのオペコード（オペレーションコード）と、４×ｎビット（ｎ＝１，２・・・）のオペランドとで構成される。
【００１５】
プログラム例は▲１▼から▲７▼の命令を実行するものとし、ｓｙｓｃｌｋをｏｓｃｉｎの１分周で命令▲１▼を実行した後、命令▲２▼により分周比を１分周から２分周に切り替える。命令▲３▼および▲４▼を実行した後、命令▲５▼により再度１分周に戻し命令▲６▼および命令▲７▼を実行する。タイミングチャート中に示される記号で▲１▼−１はプログラム例の命令▲１▼の１ニブル目のマシンコードを示し、▲１▼μ−１は命令▲１▼の実行サイクル１サイクル目を表すものとする。Ｔ１、Ｔ２は各々ｓｙｓｃｌｋの立下りエッジ、立ち上がりエッジのタイミングを示す。タイミングＡにおいてｏｓｃｓｅｌが‘Ｌ’であるためｓｙｓｃｌｋは１／１ｏｓｃｉｎの周期で動作する。ＩＦＢ４０１、ＩＢ４０２はＴ１で命令▲１▼−１と▲１▼−２をＲＯＭ７００からフェッチする。命令▲１▼−１は拡張コード、▲１▼−２はオペコードの１ニブル目でありオペランドではないためいずれのデータもＩＲ４０３に対して出力する。タイミングＢにおいてＩＲ４０３はＴ２で▲１▼−１，２をラッチし、ＰＬＡ４０４に出力しＰＬＡ４０４はデコードを開始する。▲１▼−１は拡張コードであり、▲１▼−２はオペコードの２ニブル目がフェッチされるまで処理されないため、タイミングＣにおいて次のＴ１では▲１▼−１に相当するＭＩＲ（▲１▼μ−１）のみを拡張コードの認識サイクルとして出力する。また同時にＩＦＢ４０１は命令▲１▼−３と▲２▼−１をフェッチする。タイミングＤにおいてＩＲ４０３は命令▲１▼の残り１ニブルのオペコード▲１▼−３を取り込み、処理待ちの▲１▼−２とともにＰＬＡ４０４にてデコードする。タイミングＥにおいては▲１▼−２，３のＭＩＲ（▲１▼μ−２）を出力するとともに▲２▼−２，３をＩＦＢ４０１がフェッチする。また、タイミングＤでＩＲ４０３に取り込まれなかった▲２▼−１はタイミングＥでＩＢ４０２にシフトする。なお、▲３▼−１のように拡張コードがＩＦＢ４０１、ＩＢ４０２を経由した場合にはその間に認識されるためタイミングＦではＩＲ４０３には取り込まれず、オペコードである▲３▼−２，３がＩＲ４０３に取り込まれる。
【００１６】
命令▲２▼では実行サイクル▲２▼μ−３でのクロック分周制御レジスタ８０４への書き込みによってタイミングＧでｏｓｃｓｅｌが‘Ｈ’になり、ｓｙｓｃｌｋの周期を１／１ｏｓｃｉｎから１／２ｏｓｃｉｎに変更する。同様に命令▲５▼によってｓｙｓｃｌｋの周期を１／２ｏｓｃｉｎから１／１ｏｓｃｉｎに戻す。
【００１７】
以上のように従来のマイクロコントローラはクロック分周制御レジスタ８０４への書き込み命令によって周波数を制御することができる。
【００１８】
【特許文献１】
特開平０２−１１８８１１号公報
【００１９】
【発明が解決しようとする課題】
しかしながら上記のような従来のマイクロコントローラにおいては、周波数の変更のためにレジスタへの書き込み命令実行のために数サイクル分が必要となる。これによって、周波数制御による消費電力の調整をシステムのパフォーマンスを維持したままきめ細かく行うことができないという問題点を有していた。
【００２０】
本発明は、上記従来の問題点を解決するもので、周波数変更に要するタイムラグを解消することができ、タスクに応じた周波数制御を的確かつ迅速に実行することにより、消費電力を低減化することができるマイクロコントローラを提供する。
【００２１】
【課題を解決するための手段】
本発明の請求項１記載のマイクロコントローラは、発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号の中から周波数情報に応じたクロック信号をシステムクロックとして入力し、システムクロックに同期して動作し、メモリに格納されたオペレーションコードとオペランドからなる命令プログラムに対して、パイプライン処理によりオペレーションコードとオペランドをフェッチして解読し、その解読結果に基づいて命令プログラムを実行するプロセッサを備え、オペレーションコードはシステムクロックの分周比を決定する周波数制御信号が付加されてメモリに格納されており、プロセッサは、周波数制御信号をオペレーションコードとともにパイプライン処理によりフェッチ、解読することにより周波数制御信号に応じた周波数情報を出力することを特徴とする。
【００２２】
この構成によれば、周波数を制御する情報はパイプラインの中でオペレーションコードと同様に処理されるため、従来のように周波数制御レジスタへ設定データを書き込む必要がなく、システムのパフォーマンスを落とさず周波数制御をきめ細かく行い、マイクロコントローラの低消費電力化を効果的に実現することができる。
【００２３】
また、本発明の請求項２記載のマイクロコントローラは、発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号の中から周波数情報に応じたクロック信号をシステムクロックとして入力し、システムクロックに同期して動作し、メモリに格納された拡張コードとオペレーションコードとオペランドからなる命令プログラムに対して、パイプライン処理により拡張コードとオペレーションコードとオペランドをフェッチして解読し、その解読結果に基づいて命令プログラムを実行するプロセッサを備え、マシンコードによってオペレーションコードを各分周比に対応してページに分類された複数ページからなる命令マップとして構成し、オペレーションコードとともにパイプライン処理される拡張コードが命令マップのページを示し、プロセッサは、拡張コードをパイプライン処理によりフェッチ、解読することにより拡張コードが示す命令マップのページに対応する分周比に応じた周波数情報を出力することを特徴とする。
【００２４】
この構成によれば、既存の拡張コードエリアが周波数制御情報をもつため、回路規模の増加はなく、オペレーションコードより先にデコードされることにより周波数変更すべき命令の実行サイクルと周波数変更タイミングを合わせやすく、より的確にプログラム開発者の意図に応じた低消費電力化が可能となる。
【００２５】
また、請求項３記載のマイクロコントローラのように、請求項１または２記載のマイクロコントローラにおいて、発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号を生成し、その中からプロセッサから出力される周波数情報に応じたクロック信号を選択してプロセッサへシステムクロックとして出力するクロックジェネレータを設けてあってもよい。
【００２６】
また、このクロックジェネレータは、請求項４のように、発振周波数の１／ｎ（ｎは分周比で１以上の整数）の周波数であって異なる周波数の複数のクロック信号を出力する分周手段と、分周手段の出力する複数のクロック信号の中から選択信号に基づいて１つのクロック信号を選択しシステムクロックとして出力する選択手段と、プロセッサから出力される周波数情報に対応する選択信号を選択手段に出力する制御手段とを有した構成とすることができる。
【００２７】
また、請求項５記載のマイクロコントローラは、請求項１記載のマイクロコントローラにおいて、ソースプログラムに記述されたシステムクロックの分周比を決定する分周比設定記述に従って周波数制御信号を生成し、分周比設定記述の後段の命令から生成されるオペレーションコードに付加しＲＯＭコード化する手段を設けている。
【００２８】
これにより、周波数制御信号のオペレーションコードへの付加はプログラム開発者の負担なくコンパイラによって自動でマシンコード化が可能となる。
【００２９】
また、請求項６記載のマイクロコントローラは、請求項１記載のマイクロコントローラにおいて、ソースプログラムに記述されたシステムクロックの分周比を決定する分周比設定記述に従って周波数制御信号を生成し、分周比設定記述の前段の命令の実行サイクル数が基準未満であれば周波数制御信号を分周比設定記述の前段の命令から生成されるオペレーションコードに付加し、基準以上であれば周波数制御信号を分周比設定記述の後段の命令から生成されるオペレーションコードに付加しＲＯＭコード化する手段を設けている。
【００３０】
これにより、周波数制御信号がオペレーションコードとともにデコードされ実行されるまでの処理時間による周波数変更すべき命令の実行サイクルと周波数変更タイミングの誤差を削減することが可能となる。
【００３１】
また、請求項７記載のマイクロコントローラは、請求項２記載のマイクロコントローラにおいて、ソースプログラムに記述されたシステムクロックの分周比を決定する分周比設定記述に従って分周比に対応する拡張コードを選択し、拡張コードが示す命令マップのページから分周比設定記述の後段の命令に相当するオペレーションコードを選択しＲＯＭコード化する手段を設けている。
【００３２】
これにより、システムクロックの分周比の設定、その分周比に相当する命令コードの選択は固有の分周比設定記述によりプログラム開発者の負担なくコンパイラによって自動でマシンコード化が可能となる。
【００３３】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら具体的に説明する。
【００３４】
（実施の形態１）
本発明の実施の形態１のマイクロコントローラについて説明する。図１、図２は、本実施の形態１のマイクロコントローラの概略構成を示すブロック図であり、図１はその内部のクロックジェネレータの構成を詳細に示し、図２はその内部のＣＰＵの構成を詳細に示したものである。
【００３５】
図１において、１０００はマイクロコントローラであり、１００はＣＰＵである。ＣＰＵ１００とＲＯＭ７００とはバスを介して接続され、クロックジェネレータ８００は原発振ｏｓｃｉｎを入力とし、クロック分周回路８０１、セレクタ８０２、クロック分周制御回路８０３から構成され、ＣＰＵ１００から出力されるマイクロコードＭＩＲからシステムクロックｓｙｓｃｌｋの分周比を決定し、ＣＰＵ１００に伝達する。マイクロコントローラ１０００はこのｓｙｓｃｌｋに同期して動作する。クロック分周回路８０１は原発振ｏｓｃｉｎを分周し、１分周信号の他複数の分周信号を生成する。クロック分周制御回路８０３はＣＰＵ１００から出力されたＭＩＲをもとにクロック切り替えのタイミングを調整し、セレクタ８０２の制御信号ｏｓｃｓｅｌを出力する。セレクタ８０２はｏｓｃｓｅｌに従いクロック分周回路８０１から出力される分周信号の中からひとつを選択し、ｓｙｓｃｌｋとしてＣＰＵ１００に伝達する。
【００３６】
図２において、ＣＰＵ１００は、命令デコーダ４００、データパス３００、データレジスタ５００、アドレスレジスタ６００、バスインターフェイス２００から構成され、ＣＰＵ内部でのデータのやり取りはバスインターフェイス２００を介して行い、ＣＰＵの動作はマイクロコード（ＭＩＲ）によって制御される。
【００３７】
次に、上記のように構成された実施の形態１のマイクロコントローラの動作を説明する。
【００３８】
まず、ＲＯＭ７００から入力されたデータは、バスインターフェイス２００を介して命令デコーダ４００内のインストラクションフェッチバッファ（ＩＦＢ）４０１に取り込まれ、インストラクションバッファ（ＩＢ）４０２を経由し、その後オペレーションコードとオペランドに分割される。
【００３９】
ＩＢ４０２から出力されたオペレーションコードは、インストラクションレジスタ（ＩＲ）４０３に入力された後、プログラマブルロジックアレイ（ＰＬＡ）４０４に解読され、ＭＩＲとしてバスインターフェイス２００、データパス３００、命令デコーダ４００の各構成ブロックへ供給され、各構成ブロックは、入力されたＭＩＲに従った処理動作を実行する。
【００４０】
また、ＩＢ４０２から出力されたオペランドは、ＭＩＲに従って、データパス３００あるいはデータレジスタ６００やアドレスレジスタ７００などへ伝達される。
【００４１】
システムクロックｓｙｓｃｌｋの分周比を変更するメカニズムは、オペレーションコードに付加された周波数制御信号をオペレーションコードとともに解読し、ＭＩＲとしてクロック分周制御回路８０３に伝達される。クロック分周制御回路８０３においては伝達されたＭＩＲをもとに切り替えタイミングを調整し、選択信号ｏｓｃｓｅｌをセレクタ８０２に出力し、セレクタ８０２で分周信号を選択し、ｓｙｓｃｌｋとしてＣＰＵ１００に伝達する。
【００４２】
以上のような本実施の形態１のマイクロコントローラの動作をプログラム例、タイミングチャートを用いて説明する。
【００４３】
図３の（ａ）、（ｂ）、（ｃ）は、本実施の形態１のマイクロコントローラの命令フォーマット、プログラム例、動作タイミングチャートである。ここでは８ビットマイクロコントローラを例にｓｙｓｃｌｋの分周比をｏｓｃｉｎの１分周から２分周そして再度１分周に切り替える動作を示している。
【００４４】
命令フォーマットは、命令マップのページ数を示す４ビットの拡張コードと、８ビットのオペコード（オペレーションコード）と、オペコードに付加した１ビットの周波数制御信号と、４×ｎビット（ｎ＝１，２・・・）のオペランドとで構成される。
【００４５】
プログラム例は▲１▼から▲７▼の命令を実行するものとし、命令▲３▼からｓｙｓｃｌｋの分周比をｏｓｃｉｎの１分周から２分周に切り替え、命令▲６▼以降再度１分周に切り替える。オペコードに付加された周波数制御信号は＊０または＊１で表し、＊０のとき１分周を、＊１のとき２分周を選択するものとする。タイミングチャート中に示される記号で▲１▼−１はプログラム例の命令▲１▼の１ニブル目のマシンコードを示し、▲１▼μ−１は命令▲１▼の実行サイクルの１サイクル目を表すものとする。Ｔ１、Ｔ２は各々ｓｙｓｃｌｋの立下りエッジ、立ち上がりエッジのタイミングを示す。
【００４６】
タイミングＡにおいてｏｓｃｓｅｌが‘Ｌ’であるためｓｙｓｃｌｋは１／１ｏｓｃｉｎの周期で動作する。ＩＦＢ４０１、ＩＢ４０２はＴ１で命令▲１▼−１と▲１▼−２をＲＯＭ７００からフェッチする。命令▲１▼−１は拡張コード、▲１▼−２はオペコードの１ニブル目でありオペランドではないためいずれのデータもＩＲ４０３に対して出力する。タイミングＢにおいてＩＲ４０３はＴ２で▲１▼−１，２をラッチし、ＰＬＡ４０４に出力しＰＬＡ４０４はデコードを開始する。▲１▼−１は拡張コードであり、▲１▼−２はオペコードの２ニブル目がフェッチされるまで処理されないため、タイミングＣにおいて次のＴ１では▲１▼−１に相当するＭＩＲ（▲１▼μ−１）のみを拡張コードの認識サイクルとして出力する。また同時にＩＦＢ４０１は命令▲１▼−３と▲３▼−１をフェッチする。タイミングＤにおいてＩＲ４０３は命令▲１▼の残り１ニブルのオペコード▲１▼−３を取り込み、処理待ちの▲１▼−２とともにＰＬＡ４０４にてデコードする。タイミングＥにおいては▲１▼−２，３のＭＩＲ（▲１▼μ−２）を出力するとともに▲３▼−２，３をＩＦＢ４０１がフェッチする。また、タイミングＤでＩＲ４０３に取り込まれなかった▲３▼−１はタイミングＥでＩＢ４０２にシフトする。なお、▲３▼−１のように拡張コードがＩＦＢ４０１、ＩＢ４０２を経由した場合にはその間に認識されるためタイミングＦではＩＲ４０３には取り込まれず、オペコードである▲３▼−２，３がＩＲ４０３に取り込まれる。
【００４７】
▲３▼−３は付加された周波数制御信号に２分周制御の情報（＊１）を保有しているため▲３▼μ−１のサイクル中にＭＩＲとしてクロックジェネレータ８００に出力される。クロック分周制御回路８０３は切り替えタイミングを調整しタイミングＧでｏｓｃｓｅｌを‘Ｈ’としｓｙｓｃｌｋを１／２ｏｓｃｉｎに切り替える。同様に命令▲６▼に付加された周波数制御信号によって１／１ｏｓｃｉｎに戻す。
【００４８】
なお、付加される周波数制御信号は１ビットに限らずマイクロコントローラの仕様によって数ビットになる場合もある。
【００４９】
以上のように本実施の形態１によれば、オペレーションコードにシステムクロックの分周比を決定する周波数制御信号を付加することにより、オペレーションコードと同様にパイプラインの中で処理されるため、従来のように周波数制御レジスタ（８０４）へ設定データを書き込む時間を必要とせず、システムのパフォーマンスを落とさずマイクロコントローラの低消費電力化を効果的に実現することができる。また、本実施の形態では８ビットマイクロコントローラを例に説明しているが、ビット数が多くなれば付加するビットの回路規模への影響は極めて小さなものになり、本発明の効果はさらに大きくなる。
【００５０】
（実施の形態２）
本発明の実施の形態２のマイクロコントローラについて説明する。
【００５１】
図４は、本実施の形態２のマイクロコントローラの概略構成を示すブロック図である。実施の形態１との違いはＩＦＢ４０１、ＩＢ４０２、ＩＲ４０３、ＰＬＡ４０４と伝達されるオペレーションコードに周波数制御信号を付加しないため８ビットで構成される点のみで、その他は実施の形態１のマイクロコントローラと同様である。したがって、クロックジェネレータ８００の内部構成は図１と同じである。
【００５２】
次に、上記のように構成された実施の形態２のマイクロコントローラの動作を説明する。
【００５３】
図５の（ａ）、（ｂ）は、本実施の形態２のマイクロコントローラの命令マップ例である。命令マップは複数ページで構成され、分周比ごとに各ページに分類されている。したがって、命令マップのページ数を示す拡張コードによって同じオペレーションコードであっても異なる周波数で実行されることになる。例えば命令マップＡと命令マップＢはそれぞれ１分周と２分周に対応しており拡張コード‘００１１’および‘０１０１’で分類している。マップ中のＭＣ１とＭＣ２はともに同じ実行内容の命令で拡張コード以外のマシンコードも同一である。これらのコードをＣＰＵで処理した場合、同じ動作をＭＣ１は１分周で行い、ＭＣ２は２分周で行うことになる。このように分周比に対応した拡張コードはパイプライン処理の中でオペコードと同様に解読され、ＭＩＲとしてクロック分周制御回路８０３に伝達される。クロック分周制御回路８０３においては伝達されたＭＩＲをもとに切り替えタイミングを調整し、選択信号ｏｓｃｓｅｌをセレクタ８０２に出力し、それに応じてセレクタ８０２では分周信号を選択し、ｓｙｓｃｌｋとしてＣＰＵ１００に伝達する。
【００５４】
以上のような本実施の形態２のマイクロコントローラの動作をプログラム例、タイミングチャートを用いて説明する。
【００５５】
図６の（ａ）、（ｂ）、（ｃ）は、本実施の形態２のマイクロコントローラの命令フォーマット、プログラム例、動作タイミングチャートである。ここでは実施の形態１のマイクロコントローラにおける動作説明と同様に８ビットマイクロコントローラを例にｓｙｓｃｌｋの分周比をｏｓｃｉｎの１分周から２分周そして再度１分周に切り替える動作を示している。
【００５６】
命令フォーマットは、命令マップのページ数を示す４ビットの拡張コードと、８ビットのオペコード（オペレーションコード）と、４×ｎビット（ｎ＝１，２・・・）のオペランドとで構成される。実施の形態１のマイクロコントローラとの違いは周波数制御信号を付加していない点のみである。
【００５７】
プログラム例は▲１▼から▲７▼の命令を実行するものとし、命令▲３▼からｓｙｓｃｌｋの分周比をｏｓｃｉｎの１分周から２分周に切り替え、命令▲６▼以降再度１分周に切り替える。拡張コードの‘００１１’はｓｙｓｃｌｋをｏｓｃｉｎの１分周に設定する命令であることを示し、‘０１０１’２分周であることを示す。
【００５８】
タイミングＡにおいてｏｓｃｓｅｌが‘Ｌ’であるためｓｙｓｃｌｋは１／１ｏｓｃｉｎの周期で動作する。ＩＦＢ４０１、ＩＢ４０２はＴ１で命令▲１▼−１と▲１▼−２をＲＯＭ７００からフェッチする。命令▲１▼−１は拡張コード、▲１▼−２はオペコードの１ニブル目でありオペランドではないためいずれのデータもＩＲ４０３に対して出力する。タイミングＢにおいてＩＲ４０３はＴ２で▲１▼−１，２をラッチし、ＰＬＡ４０４に出力しＰＬＡ４０４はデコードを開始する。▲１▼−１は拡張コードであり、▲１▼−２はオペコードの２ニブル目がフェッチされるまで処理されないため、タイミングＣにおいて次のＴ１では▲１▼−１に相当するＭＩＲ（▲１▼μ−１）のみを拡張コードの認識サイクルとして出力する。また同時にＩＦＢ４０１は命令▲１▼−３と▲３▼−１をフェッチする。タイミングＤにおいてＩＲ４０３は命令▲１▼の残り１ニブルのオペコード▲１▼−３を取り込み、処理待ちの▲１▼−２とともにＰＬＡ４０４にてデコードする。タイミングＥにおいては▲１▼−２，３のＭＩＲ（▲１▼μ−２）を出力するとともに▲３▼−２，３をＩＦＢ４０１がフェッチする。また、タイミングＤでＩＲ４０３に取り込まれなかった▲３▼−１はタイミングＥでＩＢ４０２にシフトする。なお、▲３▼−１のように拡張コードがＩＦＢ４０１、ＩＢ４０２を経由した場合にはその間に認識されるためタイミングＦではＩＲ４０３には取り込まれず、オペコードである▲３▼−２，３がＩＲ４０３に取り込まれる。
【００５９】
▲３▼−１は拡張コードであり２分周制御の情報‘０１０１’を保有しており、ＩＦＢ４０１、ＩＢ４０２を経由する間に解読されＭＩＲとしてクロックジェネレータ８００に出力される。クロック分周制御回路８０３は切り替えタイミングを調整しタイミングＧでｏｓｃｓｅｌを‘Ｈ’としｓｙｓｃｌｋを１／２ｏｓｃｉｎに切り替える。同様に命令▲６▼の拡張コードによって１／１ｏｓｃｉｎに戻す。拡張コードはオペコードより先にフェッチ、デコードされるため本来２分周で動作させたい▲３▼μ−１、▲３▼μ−２、▲４▼μ−１、▲４▼μ−２、１分周で動作させたい▲６▼μ−１、▲７▼μ−１、▲７▼μ−２が想定どおりに実行することが可能である。
【００６０】
以上のように本実施の形態２によれば、拡張コードにシステムクロックの分周比を決定する情報を持たせることにより、オペレーションコードより早いサイクルでデコードすることが可能となるため、周波数を変更するためのタイムラグを最小に抑えることが可能となり、プログラム開発者は周波数制御をより簡単に正確に実行することが可能となる。したがって、周波数変更に要するタイムラグを解消しタスクに応じた周波数制御を的確かつ迅速に実行することによりマイクロコントローラの消費電力を低減することができる。
【００６１】
なお、命令は１分周と２分周の２種類に限らずマイクロコントローラの仕様によって数種類になる場合もある。また、命令数は分周比ごとに同数存在する必要はなく、例えばデフォルトの分周比に相当する命令に対してその他の分周比に相当する命令数は数個に限定することも可能である。
【００６２】
上記の実施の形態１と実施の形態２におけるマイクロコントローラ１０００では、一般的なほとんどのマイクロコントローラと同様に、システムクロックを生成するクロックジェネレータ８００を内蔵している構成としたが、クロックジェネレータ８００は外付けであっても構わない。
【００６３】
（実施の形態３）
本発明の実施の形態３のマイクロコントローラについて説明する。
【００６４】
図７（ａ）は本実施の形態３のマイクロコントローラにおけるマシンコードの生成およびＲＯＭへの配置手順を示すフローチャート、図７（ｂ）は本実施の形態３においてプログラムソースからコンパイラによってマシンコードを生成する方法を示す図である。図７（ａ）に示すように、プログラム開発によって作成されたプログラムソースは、通常コンパイラ等により発生されたデータファイルをもとに、ＲＯＭコードに変換された後、レイアウトパターンとして生成されＲＯＭ配置される。しかし、従来のマシンコード生成フローでは、実施の形態１におけるマイクロコントローラのようにマシンコードに周波数制御信号を付加することはできない。
【００６５】
本実施の形態３のマシンコード生成フローでは、プログラムソース内に分周比設定記述を挿入することでマシンコードに周波数制御信号を付加することができる。例えば、図７（ｂ）のプログラム例のように命令▲１▼、▲３▼、▲４▼、▲６▼、▲７▼の順にプログラミングし、命令▲１▼、▲６▼、▲７▼は１分周で実行し、命令▲３▼、▲４▼は２分周で実行させたい場合、命令▲１▼の前段に‘ｓｅｔ  ｆａｓｔ’と記述し、命令▲３▼の前段に‘ｓｅｔ  ｓｌｏｗ’、命令▲６▼の前段に‘ｓｅｔ  ｆａｓｔ’と記述する。コンパイラは命令とその前段の‘ｓｅｔ  ｆａｓｔ’あるいは‘ｓｅｔ  ｓｌｏｗ’の情報を入力として、命令をマシンコードに変換し、さらに前段の分周設定記述が‘ｓｅｔ  ｆａｓｔ’であれば‘０’をオペコードに付加し、‘ｓｅｔ  ｓｌｏｗ’であれば‘１’を付加する。また、命令の前段に何も記述がなければ前のマシンコードの付加信号を継続する。
【００６６】
すなわち本実施の形態３のマイクロコントローラは、前述した実施の形態１の構成において、上述のコンパイラと、コンパイラで生成したマシンコードをＲＯＭコードに変換する手段と、ＲＯＭ配置する手段とを備えたものである。
【００６７】
以上のように本実施の形態３によれば、周波数制御信号のオペレーションコードへの付加は、プログラム開発者の負担なくコンパイラによって自動でマシンコード化が可能となり、実施の形態１のマイクロコントローラの特徴を活かすことができる。
【００６８】
（実施の形態４）
本発明の実施の形態４のマイクロコントローラについて説明する。
【００６９】
図８（ａ）は本実施の形態４のマイクロコントローラにおけるマシンコードの生成およびＲＯＭへの配置手順を示すフローチャート、図８（ｂ）は本実施の形態４においてプログラムソースからコンパイラによってマシンコードを生成する方法を示す図、図８（ｃ）は本実施の形態４のマイクロコントローラの動作タイミングチャートである。ＲＯＭへの配置手順に関しては実施の形態３と同様であるが、プログラムソースからコンパイラによってマシンコードを生成する過程において生成ルールが異なる。
【００７０】
実施の形態３では‘ｓｅｔ  ｆａｓｔ’、‘ｓｅｔ  ｓｌｏｗ’によってオペコードに付加する周波数制御信号を決定するが、実施の形態１のマイクロコントローラでは分周比を変更する場合、オペコードに周波数制御信号を付加しているため、フェッチからデコード、実行し、ｏｓｃｓｅｌが切り替わるまでにやや時間を必要とする。そのため本来分周比を切り替えたい命令の実行タイミングに間に合わなくなる場合があり、プログラム開発者による周波数制御の詳細検討が必要となる。
【００７１】
本実施の形態のマシンコード生成フローでは、実施の形態３と同様に命令▲１▼から▲７▼までのマシンコードを生成した場合、分周比設定記述とその前段の命令の実行サイクルをもとに周波数制御信号を決定する。
【００７２】
例えば命令▲３▼の前段の‘ｓｅｔ  ｓｌｏｗ’は本来命令▲３▼を２分周で動作させる目的で挿入されているが、実施の形態１においては図３のようにオペコードに付加されているためｏｓｃｓｅｌの切り替わりが遅れ、実際には命令▲４▼の実行サイクル（▲４▼μ−１）から切り替わることになる。この場合の対策として、命令▲３▼を２分周で実行するためにはその前の命令▲１▼に２分周制御の付加信号をもたせることによってちょうど▲３▼μ−１の実行タイミングＧで２分周に切り替わる。ただし、命令▲１▼の実行サイクルが長い場合には命令▲１▼の処理周波数が２分周となってしまう。本実施の形態４においては、‘ｓｅｔ  ｆａｓｔ’、‘ｓｅｔ  ｓｌｏｗ’の前段の命令の実行サイクルが基準サイクル未満であれば前段の命令のマシンコードに付加し、基準サイクル以上であれば後段の命令のマシンコードに付加する。図８の例では、基準サイクルを３サイクルとし、‘ｓｅｔ  ｆａｓｔ’、‘ｓｅｔ  ｓｌｏｗ’の前段の命令の実行サイクルが３サイクル未満（すなわち２サイクル以下）であれば前段の命令のマシンコードに付加し、３サイクル以上であれば後段の命令のマシンコードに付加するようにしている。
【００７３】
すなわち本実施の形態４のマイクロコントローラは、前述した実施の形態１の構成において、上述のコンパイラと、コンパイラで生成したマシンコードをＲＯＭコードに変換する手段と、ＲＯＭ配置する手段とを備えたものである。
【００７４】
以上のように本実施の形態４によれば、周波数制御信号のオペレーションコードへの付加は、命令の実行サイクル数に応じて決定するため、より正確に意図するタイミングで周波数の制御が可能となり、プログラム開発者が実行サイクル数を考慮してプログラミングする必要がないためプログラム開発効率の向上が可能となる。
【００７５】
（実施の形態５）
本発明の実施の形態５のマイクロコントローラについて説明する。
【００７６】
図９（ａ）は本実施の形態５のマイクロコントローラにおけるマシンコードの生成およびＲＯＭへの配置手順を示すフローチャート、図９（ｂ）は本実施の形態５においてプログラムソースからコンパイラによってマシンコードを生成する方法を示す図である。ＲＯＭへの配置手順に関しては実施の形態３と同様であるが、プログラムソースからコンパイラによってマシンコードを生成する過程において生成ルールが異なる。
【００７７】
本実施の形態のマシンコード生成フローでは、プログラムソース内に分周比設定記述を挿入することで設定した分周比に対応する拡張コードを選択し、分周比設定記述の後段の命令はその拡張コードによって分類された命令マップの中から相当するマシンコードに変換される。例えば、図９（ｂ）のプログラム例のように命令▲１▼、▲３▼、▲４▼、▲６▼、▲７▼の順にプログラミングし、命令▲１▼、▲６▼、▲７▼は１分周で実行し、命令▲３▼、▲４▼は２分周で実行させたい場合、命令▲１▼の前段に‘ｓｅｔ  ｆａｓｔ’と記述し、命令▲３▼の前段に‘ｓｅｔ  ｓｌｏｗ’、命令▲６▼の前段に‘ｓｅｔ  ｆａｓｔ’と記述する。命令マップは１分周で実行する命令群は拡張コードなし、拡張コード‘００１０’、拡張コード‘００１１’で、２分周で実行する命令群は拡張コード‘０１００’、拡張コード‘０１０１’、拡張コード‘０１１０’で分類されるとする。本実施の形態５のマイクロコントローラで扱われる命令は実施の形態２で説明した図５の例のように１分周の命令群と２分周の命令群は拡張コード以外は同一のオペコードを持ち、同一の動作をするものとする。コンパイラは命令とその前段の‘ｓｅｔ  ｆａｓｔ’あるいは‘ｓｅｔ  ｓｌｏｗ’の情報を入力として、前段が‘ｓｅｔ  ｆａｓｔ’であれば１分周で実行する命令群のマップのマシンコードに変換し、‘ｓｅｔ  ｓｌｏｗ’であれば２分周で実行する命令群のマップのマシンコードに変換する。また、命令の前段に何も記述がなければ分周比の変更はないものとし、前段の命令と同じ分周比の命令群のマシンコードに変換する。
【００７８】
すなわち本実施の形態５のマイクロコントローラは、前述した実施の形態２の構成において、上述のコンパイラと、コンパイラで生成したマシンコードをＲＯＭコードに変換する手段と、ＲＯＭ配置する手段とを備えたものである。
【００７９】
以上のように本実施の形態５によれば、分周比の設定は分周比設定記述の挿入のみでマシンコードに反映することが可能となり、実施の形態２のマイクロコントローラの特徴を最大限活かすプログラム開発環境を提供できる。
【００８０】
【発明の効果】
以上のように、本発明によれば、周波数を制御するための情報をオペレーションコードに付加あるいは拡張コードに保有させることで、実行命令のパイプライン処理の中で周波数制御が可能となるため、周波数変更に要するタイムラグを解消しタスクに応じた周波数制御を的確かつ迅速に実行することによりマイクロコントローラの消費電力を低減することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態１のマイクロコントローラの概略構成を示すブロック図
【図２】本発明の実施の形態１のマイクロコントローラの概略構成を示すブロック図
【図３】本発明の実施の形態１のマイクロコントローラの命令フォーマット、プログラム例および動作タイミングチャート
【図４】本発明の実施の形態２のマイクロコントローラの概略構成を示すブロック図
【図５】本発明の実施の形態２のマイクロコントローラの命令マップ説明図
【図６】本発明の実施の形態２のマイクロコントローラの命令フォーマット、プログラム例および動作タイミングチャート
【図７】本発明の実施の形態３のマイクロコントローラにおけるＲＯＭコード生成処理を示すフローチャートとその説明図
【図８】本発明の実施の形態４のマイクロコントローラにおけるＲＯＭコード生成処理を示すフローチャートとその説明図および動作タイミングチャート
【図９】本発明の実施の形態５のマイクロコントローラにおけるＲＯＭコード生成処理を示すフローチャートその説明図
【図１０】従来のマイクロコントローラの一般的な概略構成を示すブロック図
【図１１】従来のマイクロコントローラの一般的な概略構成を示すブロック図
【図１２】従来のマイクロコントローラの命令フォーマット、プログラム例および動作タイミングチャート
【符号の説明】
１００  ＣＰＵ
２００  バスインターフェイス
３００  データパス
４００  命令デコーダ
４０１  インストラクションフェッチバッファ（ＩＦＢ）
４０２  インストラクションバッファ（ＩＢ）
４０３  インストラクションレジスタ（ＩＲ）
４０４  プログラマブルロジックアレイ（ＰＬＡ）
５００  データレジスタ
６００  アドレスレジスタ
７００  ＲＯＭ
８００  クロックジェネレータ
８０１  クロック分周回路
８０２  セレクタ
８０３  クロック分周制御回路
８０４  クロック分周制御レジスタ
１０００  マイクロコントローラ
【図１】
2004302827.tif 000003
【図２】
2004302827.tif 000004
【図３】
2004302827.tif 000005
【図４】
2004302827.tif 000006
【図５】
2004302827.tif 000007
【図６】
2004302827.tif 000008
【図７】
2004302827.tif 000009
【図８】
2004302827.tif 000010
【図９】
2004302827.tif 000011
【図１０】
2004302827.tif 000012
【図１１】
2004302827.tif 000013
【図１２】
2004302827.tif 000014