説明

RISCアーキテクチャを有する8ビットマイクロコントローラ

【課題】完全かつ効率的な命令セットを提供するマイクロコントローラ設計を提供する。
【解決手段】8ビットRISCベースのマイクロコントローラは、汎用8ビット専用算術論理演算装置(ALU)22に加えて算術論理演算装置(ALU)を有する8ビットレジスタファイル20を含む。レジスタファイルはさらに、間接アドレス指定のため論理16ビットレジスタを提供するためレジスタの対を組合せるための手段を含む。専用ALUは、レジスタ対に対して所定の算術機能を加え、それによって、これがなければ汎用8ビットALUに課せられることとなる計算処理を緩和する、16ビットALUである。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、マイクロコントローラ一般に関し、特に、より少数の命令セットを実行するマイクロコントローラに関する。
【背景技術】
【0002】
現在のサブミクロンCMOS技術では、複雑なメモリおよび周辺論理の実現のために十分なシリコン面積を残しつつ、複雑なマイクロコントローラアーキテクチャをチップ上に集積することが可能である。32ビットおよび64ビットのハイエンドRISCマシンにおいて最も一般に使用されている設計アーキテクチャおよび方法論は、低コストの8ビットマイクロコントローラシステムにおいても効率的に利用および応用できる。このようなパワフルでありながらも費用対効果のよいマイクロコントローラにより、システムの全体としての集積度は上昇し続けている。ハードウェアアーキテクチャにおいてより効率的なプログラムを実行することができ、より多くのハードウェア機能を集積することができる。
【0003】
近年、RISCアーキテクチャは人気を増している。最も目立つのは、アップル・コンピュータ、IBMおよびモトローラが共同開発したパワーPC(登録商標)である。RISCプロセッサを定義する特徴についての合意は存在しないものの、さまざまなRISCアーキテクチャ間には共通した特徴がある。すなわち、(1)ほとんどの命令が1サイクル内に実行される。(2)別個の簡単なロード/ストア命令がしばしば2サイクル内に実行される。(3)命令のデコーディングが典型的にはマイクロコーディングされるのではなくハードワイヤードで構成され、実行時間が速くなっている。(4)ほとんどの命令は固定フォーマットを有しそのため命令のデコーディングが簡素になっている。(5)命令セットが小さくアドレス指定モードが少ない。(6)データ経路が高度にパイプライン化されており、処理の平衡性の程度が高い。(7)より低速のシステムRAMへのおよびそこからの過剰なデータ転送を回避するための大きな高速レジスタの組(レジスタファイルとしても知られる)。
【0004】
半導体製造業者数社がマイクロコントローラを製造している。たとえばテキサス・インスツルメンツ社は8ビットマイクロコントローラであるTMS370Cx1xシリーズを提供する。これらのマイクロコントローラはRISCアーキテクチャを用いていないが、RAMとしてもまたは汎用レジスタの組としても使用できるRAM(128バイトまたは256バイト)を設けている。モトローラ社は、テキサス・インスツルメンツ社の装置に似た2目的RAMを用いる8ビットマイクロコントローラのMC6805ファミリーを提供する。マイクロチップ・テクノロジー社はマイクロコントローラ、PIC16C5Xファミリーを提供する。これらのマイクロコントローラは、データとプログラム命令とが別個のメモリおよびバスを有する、2つのバスのあるハーバードアーキテクチャを使用する。PIC16C5XはシステムRAMと共有されるレジスタファイルを用いる。PIC16C5Xは1レベル命令パイプライン方式を使用する。つまり、1つの命令が実行されている間に、次の命令がプログラムメモリからプリフェッチされる。RAMはレジスタとしては2倍なので、内部レジスタの組は現実にはない。すべてのメモリはスタティックRAMとして存在するため、レジスタ動作に関係する性能が低下する。
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のように、設計サイクルが速いことは、マイクロコントローラの設計において重要な関心事である。マイクロコントローラでの設計においてソフトウェアが果たす役割が重要であることは疑いがない。したがって、マイクロコントローラ設計の利便性は、プログラマーとハードウェア設計者との仕様のインターフェイスすなわちマイクロコントローラの命令セットに直接関係する。いかなる計算可能な機能も合理的な量のプログラムスペース内で実現できなければならないという点で、命令セットは完全でなければならない。命令セットは頻繁に使用される機能が比較的少数の命令で実現可能でなければならないという点で効率的でなければならない。
【0006】
したがって、アプリケーションソフトウェアの開発者に完全かつ効率的な命令セットを提供するマイクロコントローラ設計を提供することが望ましい。
【課題を解決するための手段】
【0007】
この発明は8ビットRISCアーキテクチャを有するコントローラである。8ビットのデータバスが、RAMメモリストア、レジスタファイル、汎用8ビット算術論理演算装置(ALU)および状態レジスタの間のデータ経路を提供する。マイクロコントローラはハーバードアーキテクチャを実現し、RAMストアとは別個にプログラムメモリストアを、そして、データバスとは別個にプログラムデータバスを備える。
【0008】
レジスタファイルは複数の8ビットレジスタを含む。レジスタファイル中のレジスタのいくつかは論理16ビットレジスタを提供するよう組合せることができる。論理16ビットレジスタは効率的なアドレス計算を行ない、データメモリおよびプログラムメモリに対する間接的アドレスポインタとして使用される。データメモリ用であるにせよまたはプログラムメモリ用であるにせよ、16ビットのアドレススペースはプログラムアドレススペースおよびデータアドレススペースの両方を増加させることによって、マイクロコントローラの柔軟性および利便性を著しく向上させる。この発明の好ましい実施例においては、レジスタファイルは3つの個別の論理16ビットレジスタとしてアクセスされ得る(すなわち読出/書込され得る)3対の8ビットレジスタを備える。
【0009】
さらに16ビットアドレス指定の利点を高めるため、レジスタファイル専用の特別な第2の算術論理演算装置が利用される。第2のALUは16ビットの加算器を含み、論理16ビットレジスタに対し16ビット算術演算を行なう。第2のALUは16ビットの結果を論理16ビットレジスタにストアし直すことができる。さらに、この16ビットの結果はアドレスとして機能し得る。したがって、汎用8ビットALUの負荷を増やしたりそれによって装置の動作速度を減じたりすることなく、第2のALUの存在によって、効率的な16ビットアドレス計算が行なわれる。
【0010】
レジスタファイル内に設けられる論理16ビットレジスタのさらなる拡張は、8ビットRAMページングレジスタの使用である。RAMページングレジスタの8ビットは、論理16ビットレジスタの16ビットと論理的に連結されており、論理24ビットアドレスを提供する。この特徴によって、基本的には8ビットの設計である基礎アーキテクチャを持つマイクロコントローラにかつてないアドレス指定範囲が与えられる。特に、ページングレジスタはメモリを64K(64*1024)バイトのページ、256ページのRAMとして形成し、64Kページ各々がページングレジスタにより参照される。この発明の好ましい実施例においては、レジスタファイルにより設けられる3つの論理16ビットレジスタ各々に対し1つずつ3つのページングレジスタがある。
【0011】
この発明のレジスタファイルは、レジスタファイルに含まれる論理の伝搬遅延に等しい遅延を持つレジスタのアクセスを特徴とする。このような組合せ遅延はクロック周期よりもはるかに短いため、レジスタアクセスは1クロックサイクル内に余裕を持って行われる。この発明はさらに、すべての演算各々を単一のクロック周期内に行なうことができる汎用算術論理演算装置(ALU)を特徴とする。この発明は、したがって、実質的にすべてのALU演算を単一クロックサイクル内に行なうことができる。
【0012】
さらにこの発明により、レジスタファイル内のレジスタは、RAMのアドレススペースの一部分を占める。この特徴によって、通常RAMアクセスと関連付けられる従来のアドレス指定モードが可能となり、レジスタが通常のメモリロケーションであるかのようにレジスタにアクセスすることができる。さらに、このようなメモリロケーションはマイクロコントローラに対して高速メモリに見えるであろう。
【0013】
レジスタファイルのレジスタ内の任意のビット位置へおよびビット位置からの1ビットのデータの転送をビットストアが可能にする。好ましい実施例においては、ビットストアは状態レジスタ内に位置付けられる。このビット転送特徴により、これ以外の場合には時間のかかる数多くのレジスタシフト動作を行なう必要なくレジスタのビット位置を直接操作することができる。多くのマイクロコントローラ応用例において典型的であるように、1バイトのデータに含まれる個別のビットは他のビットとは独立した意義を有する。従来の技術のマイクロコントローラの命令セットは典型的にはレジスタの左シフトおよび右シフトのためのシフト命令を含む。したがってレジスタの所定のビット位置のビットへのアクセスは、ビットを右または左のいずれかにシフトさせることにより達成される。これは、原データの保存が必要ならばレジスタの内容をセーブすることが必要となる、破壊動作である。加えて、この動作は、時間がかかり、実現するためにはいくつかのプログラム命令が必要である。この発明のビット転送動作は、任意のビット位置にアクセスするための、より時間効率がよく、使うスペースが少ない手段を提供する。
【0014】
桁上げ比較命令は、レジスタファイルに含まれる8ビットレジスタを16ビットにエンハンスする。命令セットのこの特徴は、8ビット環境において16ビットの量の比較を実現するための効率的な方法を提供し、それによってさらにこの発明の8ビットマイクロコントローラの計算能力を高める。
【図面の簡単な説明】
【0015】
【図1】図1は、この発明のマイクロコントローラの概略レイアウト図である。
【図2】図2は、図1に示すレジスタファイルの内部の図である。
【図3】図3は、図2に示すレジスタファイル内のレジスタの構成を示す図である。
【図4】図4は、図3に示すレジスタ書込可能化回路の詳細な図である。
【図5A】図5Aは、図4において使用されるORゲート構造を示す図である。
【図5B】図5Bは、図4において使用されるORゲート構造を示す図である。
【図6】図6は、図1に示す状態レジスタの内部構成を示す図である。
【図7】図7は、図1に示す汎用ALUの内部構成を示す図である。
【図8A】図8Aは、図7の汎用ALU内に含まれる2つのALUサブユニットを示す図である。
【図8B】図8Bは、図7の汎用ALU内に含まれる2つのALUサブユニットを示す図である。
【図9】図9はプログラムカウンタを示す図である。
【図10】図10は、この発明によるページングレジスタを使用しての24ビット論理アドレスの形成を示す図である。
【図11】図11は、ウォッチドッグ・タイマ回路を示す図である。
【図12】図12は、図10に示すページングレジスタを組入れた図1のマイクロコントローラの図である。
【図13】図13は、N個の入力を持つ可能化ANDゲートの図である。
【発明を実施するための形態】
【0016】
図1を参照し、この発明のマイクロコントローラ10が8ビットデータバス12構造のまわりに設計される。データバスは、マイクロコントローラに含まれるさまざまな構成要素に対しデータ経路を提供する。オンボードRAMは汎用データストアとして役立つ。RAMとは別個の8ビットレジスタファイル(REGISTER FILE)20がマイクロコントローラ用の高速8ビットメモリストアの組を提供する。
【0017】
レジスタ内にストアされるデータに対して算術計算を行なうために、汎用算術論理演算装置ALU−1 22がレジスタファイルに結合される。ALU−1の出力は8ビットデータバス12および状態レジスタ(STATUS REGISTER)24の両方に結合される。状態レジスタに含まれるさまざまな状態ビットは、ALU−1の結果に応じてセットされる。
【0018】
以下に説明するように、状態レジスタ24内に含まれるビットは、割込許可フラグ、ビット転送フラグ、ハーフ・キャリーフラグ、2の補数のオーバフローフラグ、負フラグ、負フラグと2の補数のフラグとの排他的論理和に等しい符号ビット、ゼロフラグ、およびキャリーフラグを含む。状態レジスタは、状態ビットへの読出/書込アクセスを可能にするよう、データバス12に結合される。データバス12に結合される付加的な構成要素は、サブルーチンの呼出/リターンおよび割込処理のために使用されるスタックポインタ(STACK POINTER)、タイマ、割込回路、タイミングおよび制御回路、EEPROM、およびUARTを含む。ポートドライバ(PORT DRIVERS)により駆動されるI/Oデータレジスタ(I/O DATA REGISTERS)は、マイクロコントローラに対するI/O経路19を提供する。
【0019】
直接アドレスバス16は、プログラムの実行中にRAMロケーションおよびレジスタファイルへの直接アクセスを提供する。間接アドレスバス14は間接アドレス指定を行なう。間接アドレスバス14はレジスタファイルからアドレスを受取るための手段、すなわち、アドレスをRAMまたはプログラムカウンタ(PROGRAM COUNTER)28に伝送するためレジスタファイルを間接アドレスバス14に結合するバスインターフェイス14'を含む。
【0020】
マイクロコントローラ10の命令実行構成要素は、プログラムメモリ(PROGRAM MEMORY)に結合されるプログラムカウンタ28を含む。好ましい実施例においては、プログラムメモリは、プログラマブル・フラッシュ・メモリである。プログラムカウンタにより指定されたプログラム命令はプログラムメモリからフェッチされ命令レジスタ(INSTRUCTION REGISTER)に与えられる。命令レジスタから、プログラム命令が命令デコーダ(INSTRUCTION DECODER)によりデコードされさまざまな制御信号が発生される。制御信号は、制御ライン(CONTROL LINE)によってマイクロコントローラ10の他の構成要素へ運ばれ、デコードされたプログラム命令によって動作が行なわれる。命令実行構成要素を結合するバスは集合的にプログラムバスと呼ばれる。データストアとは別個のプログラムメモリストアの配置およびデータバス12とは別個のプログラムバスの使用は、一般にハーバードアーキテクチャと呼ばれる。
【0021】
前述のように、レジスタファイルは複数の8ビットレジスタからなる。この発明の好ましい実施例においては、32個の8ビットレジスタがある。しかし、レジスタファイル内のレジスタがより多くてもまたはより少なくてもマイクロコントローラが同様に良好に動作するであろうということが指摘される。汎用算術論理演算装置ALU−1は8ビットの演算子であり、レジスタファイルから選択されたレジスタの間で8ビットの算術演算を行なう。ALU−1の出力はレジスタファイル内のレジスタへとデータバス12を介して送り返され得る。以下にさらに詳細に説明するように、8ビットレジスタのいくつかは対にして組合されることができ、それによって論理16ビットレジスタが提供される。好ましい実施例においては、図1に示すように、3対の8ビットレジスタが3つの論理16ビットレジスタX、Y、Zを提供する。
【0022】
図2を参照し、この発明のレジスタファイルは、32個の8ビットレジスタR0からR31を備えるレジスタ回路100を含む。レジスタファイルは、3つの出力A、B、Cと、3つの入力D_BUS、D_ALU2H、D_ALU2Lとを含む。以下に説明するように、レジスタ回路100は最後の6つのレジスタR26からR31を3対の論理16ビットレジスタR27/R26(X)、R29/R28(Y)、R31/R30(Z)として準備できる。2つの16ラインデータバス102および104からなる共通バスインターフェイスは、それぞれ16ビットレジスタに対しデータ入力バスおよびデータ出力バスを提供する。
【0023】
データ出力バス104は、B出力およびA出力を含み、B出力は16ビット値の上位バイトを提供し、A出力は16ビット値の下位バイトを提供する。データ入力バス102はレジスタファイルへの、D_ALU2L(下位バイト)入力およびD_ALU2H(上位バイト)入力に分かれる。
【0024】
レジスタファイルの備える16ビットレジスタはRAMおよびプログラムスペースのアドレス指定のための間接アドレスレジスタポインタとして使用される。メモリアクセスを容易にするため、アドレス計算用にポストインクリメントおよびプリデクリメントなどの所定の16ビット算術演算が行なわれる。16ビットレジスタに対して16ビットの算術を行なうためにALU−1を使用することも可能であるが、このような動作はALU−1が8ビット設計であるためかなり非効率的であろう。
【0025】
したがって、図2に示すレジスタファイルは、論理16ビットレジスタにかかわる16ビット計算を容易にするためレジスタファイルに専用される第2の算術論理演算装置ALU−2を含む。算術論理演算装置ALU−2は16ビット設計であり、間接アドレスポインタに典型的に必要とされる特定の演算を行なうようカストマイズされる。ALU−2は、レジスタファイルのデータ出力バス104により与えられる第1の入力を有する。ALU−2はセレクタ110により与えられる第2の入力を有する。セレクタ110は、3つの選択肢の中から1つの数値を選択する。すなわち、数値−1、数値+1および定数K_INである。ALU−2の出力はデータ入力バス102を通じてX、Y、Zレジスタへと送り返され、レジスタの内容の更新が可能にされる。mux114はレジスタファイルのバスインターフェイス14'に結合される。mux114の1入力はALU−2の出力に結合され、一方、muxの第2の入力はデータ出力バス104に結合される。この構成によって、mux114は、ALU−2またはレジスタ回路100のいずれかから選択的にデータを出力することができる。
【0026】
以下に挙げる制御信号は、上に説明したレジスタファイルの特徴である動作に関係する。これらの信号は、V_SEL、ALU2_OP、およびADDR_SELを含む。これらの信号は、命令デコーダ(INSTRUCTION DECODER)から発するさまざまな制御ライン(CONTROL LINE)により運ばれる。これらの制御信号に関してのレジスタファイルの動作を、この発明のマイクロコントローラのプログラム命令に関して以下に説明する。
【0027】
図2に示すレジスタ回路100の内部構成を図3の論理図に示す。この発明の一実施例において、32個のレジスタR0〜R31が設けられ、その各々が8ビットの出力ライン121の組と8ビットの入力ライン123の組とを有する。実際に設けられるレジスタの数はこの発明の本質部分ではない。
【0028】
各レジスタは、図3の各フリップフロップ内の「x8」の参照によって示されるように、8つのD型フリップフロップのバンクを含む。レジスタの出力ライン121は、レジスタに含まれる8つのフリップフロップの各々の出力Qを含む。同様に、レジスタの入力ライン123は、レジスタに含まれる8つのフリップフロップの各々の入力Dを含む。
【0029】
図3に示すように、偶数番号のレジスタR0、R2、・・・R30は、8ビット4:1mux130の出力に結合される共通入力を有する。同様の態様で、奇数番号のレジスタR1、R3、・・・R31は、偶数番号のレジスタからは分離され8ビット4:1mux132の出力に結合される共通入力を有する。4:1mux130は、4つの8ビット入力D_BUS、K_IN、D_BUS[n]、およびD_ALU2Lのうち1つを選択し、偶数番号のレジスタへの入力とする。4:1mux132は、4つの8ビット入力のうち1つを選択し、奇数番号のレジスタへの入力とする。セレクタD_SELは、両方のmuxに結合され、mux130および132の各々の第1、第2、第3または第4の入力のいずれかを選択する。mux130の第1の入力D_BUSは、8ビットデータバスからとられる。mux130の第2の入力K_INは、この発明のマイクロコントローラの命令セットの説明に関連して以下に説明するように、所定の命令のオペランドから導出される8ビットの定数である。mux130の第4の入力D_ALU2Lは、ALU−2(図2)の16ビット出力の下位バイトである。mux130へのD_BUS[n]入力は、データバス12からのビットラインの1つを指す。このビットラインnは、mux130への第3の8ビット入力として8回複製される。D_BUS[n]入力は、以下に説明するBLD命令とともに使用される。
【0030】
mux130の出力は、mux132の第1の入力、第2の入力および第3の入力として複製される。mux132の第4の入力D_ALU2Hは、ALU−2の16ビット出力の上位バイトである。したがって、D_SELがmuxの第1の入力、第2の入力または第3の入力を選択するとき、偶数番号のレジスタおよび奇数番号のレジスタには同じ入力、すなわち、D_BUS、K_IN、またはD_BUS[n]が与えられる。D_SELが第4のmux入力を選択するとき、偶数番号のレジスタの入力にはD_ALU2Lが与えられ、奇数番号のレジスタの入力はD_ALU2H入力が与えられる。D_ALU2L入力およびD_ALU2H入力の意義は、Xレジスタ、YレジスタおよびZレジスタに関する説明において明らかとなるであろう。
【0031】
各レジスタR0〜R31に対応する8つのフリップフロップのバンクには、Dリードに入力を与えフリップフロップのクロックラインCKをアサートすることによって、書込が行なわれる。この発明のレジスタアーキテクチャの利点は、レジスタへの書込の柔軟性である。動作モードに依存して、16ビットデータを、1ワードのデータとしてレジスタ対に書込むこともでき、8ビットデータを1バイトのデータとしてレジスタに書込むこともでき、または、レジスタの特定のビットを1ビットのデータとして書込むこともできよう。この柔軟性は、正しいレジスタおよびビットが書込まれるよう、適切なCK信号をアサートするセレクタ制御回路134により与えられる。R_SEL制御ラインおよびWE_R制御ラインは協働して選択されたレジスタに対応する8つのフリッブフロップに書込を行なう。WE_XH、WE_XL、WE_YH、WE_YL、WE_ZHおよびWE_ZLの制御ラインは、16ビットのX、YおよびZレジスタへの書込を可能化する。R_SEL、BIT_SELおよびWE_BIT制御ラインは、協働して、選択されたレジスタの選択されたビットへビットを書込む。
【0032】
レジスタの内容は、mux120、122および124を通じて与えられ、これらのmuxの出力が、それぞれ図2に示すA、BおよびC出力である。これらの出力muxは各々、8ビット32:1muxであり、32個の8ビット入力のうち1つを選択する。32個のレジスタの各々の出力は、mux120、122および124の各々の対応する入力に結合される。制御ラインR_OUTA、R_OUTB、R_OUTCはmuxを動作させ、所望のレジスタの内容を出力させる。
【0033】
mux120の8ビット出力は、8:1mux136へ与えられ、8:1mux136においてBIT_SEL制御ラインが8ビットのうち1つを選択するため役立つ。mux136の出力は、選択されたビットがクリアされているかまたはセットされているかをテストするようBTST_CLR制御ラインおよびBTST_SET制御ラインにより動作されるビットテスト回路138に結合される。ビットテスト回路の出力がBR_SKP制御ラインを駆動する。
【0034】
この発明により、マイクロコントローラは、説明した8ビットレジスタに加えて、論理16ビットレジスタを備える。これは、レジスタファイル内のレジスタの対を取出しそれらを単一のレジスタとして取扱うことによって達成される。この態様で、3つの16ビットレジスタX、Y、Zが提供される。Xレジスタは、レジスタ対R27/R26からなり、Yレジスタはレジスタ対R29/R28からなり、ZレジスタはR31/R30レジスタ対からなる。
【0035】
次に図3のセレクタ制御回路134をさらに詳細に示す図4を参照する。デコーダユニット140は、デコーディングR_SELに応答して32個の出力の任意の1つをアサートする1:32デコーダである。デコーダの出力ライン各々は、レジスタに対応する。出力は、2つの可能化ANDゲート142および144に与えられる。図13に、1ビット可能化入力A、Nビット入力BおよびNビット出力を有する可能化ANDゲート50の構造の詳細を示す。図13の拡大詳細図は、このようなゲートがN個の2入力ANDゲートを含むことを示す。N個のANDゲートの各々の第1の入力は、可能化入力Aを受取り、ANDゲートの第2の入力はB入力のNビットのうち1つを受取る。したがって、可能化入力Aがアサートされているならば、ゲート50はB入力を出力へと通らせる。可能化入力Aがアサートされていない場合は、可能化ANDゲート50のすべてのN個の出力がLOWである。再び図4を参照し、可能化ゲート142は、WE_Rにより可能化され、可能化ゲート144はWE_BITにより可能化される。
【0036】
さらに、可能化ゲート142の32出力の各々が、合成ORゲート150〜181の入力に結合される。可能化ゲート144の32出力の各々が1:8muxM0〜M31に結合される。各muxM0〜M31の8出力は、合成ORゲート150〜181の他入力に結合される。各合成ORゲートは、レジスタR0〜R31に関連付けられる。図5Aは、合成ORゲート150の構成を示す。合成ORゲート150は、8つの別個の2入力ORゲート150A〜150Hからなる。1ビット入力ライン190が、可能化ゲート142の出力から始まりORゲート150A〜150Hの各々の第1の入力に結合される。8ビット入力ライン191はmuxM0の出力から始まる。入力ライン191の各々は、ORゲートの第2の入力に結合される。図からわかるように、ORゲートは各々、レジスタR0のフリップフロップの1つのCKライン(CKO〜CK7)に結合される。この構成が、合成ORゲート150〜175に適用される。
【0037】
再び図4を参照し、いくつかの合成ORゲート、すなわちゲート176〜181が第3の入力を有する。この第3の入力は、X、Y、Zレジスタの書込に関連するWE_XL、WE_XH、WE_YL、WE_YH、WE_ZLおよびWE_ZH制御ラインの1つからくる。合成ORゲート176の詳細を示す図5Bからわかるように、付加的な1ビット制御ライン194が、ORゲート176A〜176Hの各々の第3の入力に結合される。この構成が合成ORゲート176〜181に適用される。
【0038】
上述のように、R_SEL制御ラインおよびWE_R制御ラインは協働して、8ビットデータを選択されるレジスタに書込む。これは、データをレジスタに対応するフリップフロップへクロックすることによって達成される。たとえば、データをレジスタR0に書込む場合を考える。5ビット制御ラインR_SELが選択レジスタROにセットされる。デコーダ140がラインをデコードし、それによって、可能化ゲート142を通じてORゲート150の入力ライン190へ結合されるレジスタROに対応する出力ラインをアサートする。図5Aに示すように、入力ライン190はレジスタROのフリップフロップすべてを同時にクロックし、それによって、フリップフロップ(図3)のD入力に現われるデータを入力する。
【0039】
R_SEL、WE_BITおよびBIT_SEL制御ラインを説明する前に、状態レジスタ24の説明について図6を参照する。状態レジスタは、8つのフリップフロップを含み、フリップフロップ各々がこの発明において使用される状態ビットの各々に対応する。すなわち、割込許可フラグI、ビット転送フラグT、ハーフ・キャリーフラグH、2の補数のオーバフローフラグV、負フラグN、負フラグと2の補数のフラグとの排他的論理和に等しい符号ビットS、ゼロフラグZおよびキャリーフラグCである。Iフリップフロップへの入力は直接F_SET制御ラインに結合される。Tフリップフロップへの入力は、ORゲートを通じてF_SET制御ラインおよびANDゲート228の出力に結合される。残りのフリップフロップへの入力は、それぞれのORゲートを通じてF_SET制御ラインおよび可能化ANDゲート230(図13)の8出力に結合される。
【0040】
8:1mux202は、状態レジスタフラグすべての出力を受け、F_OUT制御ラインの設定によってフラグのうち選択される1つを出力する。mux202の出力は、ビットテスト手段208へ与えられ、BR_SKP制御信号を生成する。mux202の出力はまた、ANDゲート218にも与えられ、ANDゲートの出力はデータバスD_BUS[n]のビットNに結合される。さらに、H、S、V、N、ZおよびCフラグが以下に説明する汎用ALU22へ与えられる。
【0041】
各フリップフロップは、対応するフリップフロップを単にリセットするだけで特定のフラグをクリアすることを実質的に可能とするリセットRを含む。各リセットは、可能化ANDゲート224の8出力の1つに結合される。可能化ANDゲート224は、T_SEL制御ラインにより可能化される。
【0042】
Iフリップフロップのクロック入力は、可能化ANDゲート226の出力に結合される。Tフリップフロップのクロック入力は、ORゲートを通じて可能化ゲート226およびT_SEL制御ラインに結合される。残りのフリップフロップは、それぞれのORゲートを通じて可能化ゲート226およびF_SETALU制御ラインに結合される。
【0043】
mux210は、8ビットバスから入力D_BUSを受ける。BIT_SEL制御ラインは、8ビットのうち1つをANDゲート228に出力し、ANDゲートの出力はTフリップフロップへ与えられる。T_SEL制御ラインは、ANDゲート228への可能化入力として役立つ。
【0044】
可能化ANDゲート230は汎用ALU22から入力を受け、F_SETALU制御ラインにより可能化される。この要素は、ALUの動作の間にALUから受けた状態フラグを更新するため役立つ。これについてはALU22の説明に関連しさらに説明する。
【0045】
デコーダ204、206は各々、F_SEL制御ラインをデコードし、その8出力のうち1つをアサートし、この出力がそれぞれ可能化ANDゲート224および226に与えられる。F_CLR制御ラインはゲート224を可能化する。F_SET制御ラインはゲート226を可能化する。
【0046】
ビットテスト手段208は、ORゲート216へ出力を与える1対のANDゲート212および214を含む。ゲート214は、mux202に結合される反転入力を有する。ゲート214への他入力は、FTST_CLR制御ラインに結合される。ゲート212への入力はmux202の出力とFTST_SET制御ラインとである。
【0047】
mux202の出力はまた、T_OUT制御ラインにより可能化されるANDゲート218に結合される。ANDゲート218の出力は、8ビットデータバスのビットラインnに結合されるよう図示される。
【0048】
この発明の8ビットマイクロコントローラの他の特徴について説明する。レジスタの任意のビット位置にロードまたはストアを行なうための従来の技術においては、レジスタシフト動作および/またはレジスタマスキング動作が必要となり、コードの効率が下がりコードサイズが増加することを説明した。さらに、これは破壊動作であって、もし元のデータの保存が必要であればレジスタの内容をセーブせねばならない。
【0049】
図3〜6に示すR_SEL、WE_BITおよびBIT_SEL制御ラインを考える。これらの制御ラインはレジスタ回路100(図3)を動作させ、選択されるレジスタの特定のビット位置に単一のビットを書込ませる。書込まれるビットは、状態レジスタ24から獲得され、D_BUS[n]を通じて与えられる。この動作は、mux202のTフリップフロップの出力を選択するようF_OUT(図6)をセットし、データバスへの出力を駆動するようANDゲート218を可能化するためT_OUTをアサートすることによって達成される。さらに、mux130のD_BUS[n]入力を選択するD_SELによって、mux130およびmux132の8つの出力ラインの各々においてこのビットが利用可能となる。このため、書込まれるビットがすべてのレジスタのすべてのフリップフロップの入力に与えられる(図4)。たとえば、レジスタR26のビット位置2へビットが書込まれると考える。レジスタR26を選択するようセットされたR_SEL制御ラインがデコーダ140(図4)によりデコードされ、対応する出力ラインがアサートされる。WE_BIT制御ラインが、レジスタR26に対応する1:8mux、すなわちmuxM26の入力へデコードされた出力が通ることができるよう、アサートされる。ビット位置2を選択するようセットされるBIT_SEL制御ラインが、muxM26も含む各muxを動作させ、その1ビット入力をその8個の出力のうち第2の出力へとゲートで制御して通す。muxM26の次に、その8つの出力ラインは、図5Bに示す合成ORゲート176の入力193として役立つ。入力193の各ライン[0−7]は、ORゲート176A〜176Hから特定のフリップフロップへと通される。しかし、1つのライン、この場合はライン[1]のみがアサートされるので、選択されるレジスタのフリップフロップのうち1つだけがビットを受けるようクロックされる。
【0050】
次に、図7に示すこの発明の汎用ALU22について説明する。ALU22は、各々が特定の演算を行なうことができる、複数の演算サブユニットOP1〜OPnを含む。汎用ALUにより行なわれる典型的な演算は、加算、論理演算およびシフト演算を含み、各々別個のサブユニットにより行なわれる。ALUへの入力、すなわちA、B、K_INおよび状態レジスタ24からのフラグは、サブユニットの各々に与えられる。サブユニットは、それらに対応する演算を同時に行ない、8ビットの結果22Cおよび6ビットの状態結果22Dを生成する。このパラレルアーキテクチャにより、シリアルでの実現に比べ実行時間が速くなり、どのようなALU演算でも単一のクロックサイクル内で行なうことができる。
【0051】
次に、サブユニットの結果22Cがセレクタ22Aに与えられる。セレクタは、演算サブユニットの1つの結果をデータバス12へと出力するよう、ALU1_OPにより制御される。状態結果22Dは同様の態様で処理され、各々ALU1_OPにより制御されるセレクタ22Bへ与えられ、それによって、状態レジスタ24は、選択される演算に対応する状態結果を受ける。
【0052】
ALU22はまた、XORゲート23および9入力ANDゲート24を含む。XORは、A入力およびB入力の8ビットの各々の間でビットごとにXOR演算を行なう。XOR演算の8つの結果は、ANDゲートの8つの反転入力に与えられる。A=Bのときは、XOR演算の8つの結果すべてが論理「0」となるであろう。この場合、CPSE制御ラインがアサートされるとき、ANDゲートが論理「1」を出力することとなりBR_SKP制御ラインがアサートされる。
【0053】
上述のように、サブユニットOPnは各々、特定の算術または論理演算を行ない、A、Bおよび/またはK_IN入力に演算を行ない、結果22Cを与え、適切な状態フラグを更新する。図8Aおよび図8Bは2つの典型的な演算サブユニットを示す。図8Aは、A入力とK_INを通じて与えられる即時定数との論理ANDを実現する。図8BはA入力の論理左シフトを実現する。
【0054】
プログラムのシーケンス化の説明のため次に図9を参照する。命令が、プログラムメモリ25からフェッチされ、命令レジスタ21にロードされる。命令デコード23は、フェッチされた命令をデコードし、命令を実行するためマイクロコントローラの他の部分へ制御ラインによって送られる制御信号を生成するための論理を含む。命令デコーダは、サブルーチン命令および割込に応答してスタックポインタをインクリメントまたはデクリメントするためSP_INCおよびSP_DECをアサートする。
【0055】
同時に、命令デコーダ23は、また、次の命令をフェッチするためプログラムカウンタ28を「インクリメント」するための信号を生成する。これらの信号は、=q、−q、+q、+3、+2および+1を含む。「=q」は、絶対アドレスqへの分岐を指定する命令のために使用される。「+q」および「−q」信号は、qの量の前向きおよび後向きの相対的分岐を指定する命令のために使用される。いずれの場合にも、量qが命令内に含まれる。「+3」信号および「+2」信号はスキップ命令のために使用されるが、スキップするメモリロケーションの数は、スキップされている命令のサイズに依存する。「+1」信号は単にプログラムカウンタを次の命令にインクリメントする。さらに、プログラムカウンタは、次の命令のアドレスのソースとしてX、YまたはZレジスタの1つを利用する命令のために、レジスタファイル20から入力を受ける。プログラムカウンタはまた、次の命令のアドレスの他のソースとしてRAM27からの入力を受け、RAM内のロケーションは、X、YおよびZレジスタの1つまたはスタックポインタ26により指定される。
【0056】
典型的には、命令デコーダは「+1」信号を発行し、現在の命令が実行されている間に、プログラムカウンタ28およびプログラムフラッシュにまさに次の命令をプリフェッチさせる。しかし、BR_SKP制御ラインがアサートされているときは、プログラムカウンタ28および命令レジスタ21は、プリフェッチされた命令を廃棄させられ、新しいアドレスを計算し、新しい命令をフェッチし、新しいアドレスは命令に依存する。特定の分岐命令の説明に関連してさらに詳細を説明する。
【0057】
この発明の8ビットマイクロコントローラの他の特徴は、図10に示すようなエンハンスされたアドレス指定能力である。レジスタファイルの外部にある付加的な3つのレジスタ、すなわち、RAMページングレジスタRAMPX、RAMPY、RAMPZが図示される。RAMページングレジスタは、先行技術の8ビットマイクロコントローラと比較してアドレス指定範囲を著しく増加させるよう、対応する論理16ビットレジスタX、Y、Zと関連して動作する。開示される実施例においては、RAMページングレジスタは8ビットレジスタである。しかし、これは絶対ではなく、異なったビット長を有するレジスタでもこの発明が容易に機能し得ることは明らかとなるであろう。
【0058】
図10を参照し、どのようにアドレスが形成されるかの概略を示す。各RAMページングレジスタは、対応する16ビットレジスタと連結される。たとえば、RAMページングレジスタRAMPXの8ビットは、Xレジスタの16ビットと連結され、24ビットアドレスを形成する。好ましい実施例においては、RAMPXの8ビットが24ビット論理アドレスの上位ビットX[23・・・16]として働き、一方、Xレジスタの16ビットが24ビット論理アドレスの下位ビットX[15・・・0]となる。この編成によって作られるメモリモデルは、64Kバイト(64*1024)のページの組であり、64Kページは各々8ビットRAMページングレジスタによりアクセスされ、全部で256ページである。
【0059】
次に図12を参照し、この発明の開示される実施例の文脈におけるRAMページングレジスタの実施例を説明する。RAMページングレジスタRAMPX、RAMPY、RAMPZは各々、8ビットデータバス12に結合され、プログラム実行中8ビットページ参照を受ける。セレクタ11(たとえば3:1マルチプレクサ)は、RAMページングレジスタの各々から8ビットを受け、RAMページングレジスタのうち選択された1つの8ビットをセレクタの出力に転送する。レジスタファイル20のバスインターフェイス14'の16ビットは、セレクタ11からの8ビットと連結され、24ビットアドレスを形成し、この24ビットアドレスは間接アドレスバス14により搬送される。
【0060】
この発明の拡張された24ビットアドレス指定により、24ビットアドレスはRAMの16M(16*1024*1024)をアドレス指定することができるので、外部に設けられたRAM(図示せず)を使用することが可能である。マイクロコントローラと外部RAM(図示せず)との間のデータアクセスのため、外部24ビットアドレスバス17と8ビットデータバス15とが含まれる。この発明により、レジスタファイル20、I/Oデータレジスタ(I/Oスペース)、オンボードRAMおよび外部RAMは、同一のデータアドレススペースを占める。レジスタファイルは第1の32アドレスロケーションを占め、次にI/OスペースおよびN個のアドレスロケーションを占めるオンボードRAMに割り当てられるアドレスがあり、NはRAMのサイズである。残りのアドレススペースは外部RAMによって与えられる。したがって、アドレス範囲00から(N−1)は、オンボードメモリ(レジスタファイル、I/Oスペース、およびRAM)のメモリロケーションをマッピングし、一方、残りのアドレス範囲Nから(16M−1)は、外部RAM内のメモリロケーションをマッピングする。たとえば、もしオンボードメモリが全部で64Kバイトであれば、オンボードアドレス範囲は、$00から$FFFF(「$」は16進表現を意味する)となり、一方、外部RAMのアドレス範囲は$10000から$FFFFFFとなる。オンボードメモリの量は、この発明の利便性または操作性に影響することなく変更でき、実際のメモリの量は利用可能なシリコン面積、装置のジオメトリおよびデザインルールなどの設計上の基準に依存することが留意される。
【0061】
オンボードメモリおよび外部RAMが、所定のアドレスについて確実に正しくアクセスされるようにするため、内部アドレスバス14または外部アドレスバス17のいずれかへアドレスを転送するため第2のセレクタ13が使用される。好ましい実施例においては、セレクタ13は、単一のMUX入力が2つの出力のうち1つへと転送される1:2muxである。ここで、単一の入力とは、セレクタ11から出る24ビットアドレスラインである。セレクタ13の1出力はアドレスバス14に結合され、他出力は外部アドレスバス17に結合される。オンボードメモリのアドレス範囲内のアドレスを検出すると、セレクタ13はその入力をアドレスバス14に転送させられる。24ビットアドレスのうち下位の16ビット[15・・・0]のみがアドレスバス14に転送される。逆に、外部メモリのアドレス範囲内のアドレスを検出すると、セレクタ13はその入力を外部アドレスバス17へ転送する。いくつかの検出方式のうち任意のものを使用することができ、そのいずれも通常の技量を有する設計者の能力の範囲内にある。たとえば、24ビットアドレスの上位8ビット(ビット[23・・・0])を合せて論理和をとり、その結果を使用してセレクタ13を制御してもよい。もし、論理和演算の結果がFALSEであれば、そのアドレスがオンボードメモリのアドレス範囲内にあることを意味し、その場合、セレクタ13はその入力を内部アドレスバス14へ転送せねばならない。もし、論理和演算の結果がTRUEであれば、アドレスが完全な24ビットアドレスであることを意味し、その場合、セレクタ13はその入力を外部アドレスバス17へ転送せねばならない。
【0062】
この発明の8ビットマイクロコントローラの特徴に関するハードウェアの詳細を説明したが、次にマイクロコントローラの命令セットの説明をする。
【0063】
表1は、命令セットを実現するためマイクロコントローラを制御する制御ラインの概要である。
【表1】

【0064】
表2はデータラインの概要である。
【表2】

【0065】
表3は、算術および論理演算の概要であり、特定の演算が制御ラインALU1_OPにより選択される。いくつかの命令は2つのレジスタAおよびBに対して動作する。他の命令は、レジスタおよび定数値k(すなわち「即時」データ)に対して動作する。
【表3】

【0066】
表4は専用ALU−2の算術演算の概要である。
【表4】

【0067】
この発明におけるほとんどの命令は、単一のクロックサイクル中に行なわれる。各レジスタの内容は、それらに対応するフリップフロップ(図3)の出力において常に利用可能である。したがって、選択されたレジスタの内容はほぼ即時にmux120、122および124の出力において利用可能であり、muxに含まれる組合せ回路の伝搬遅延に等しい遅延しか要しない。この時間期間を通常「組合せ遅延」と呼ぶ。
【0068】
1つのクロックサイクルの間に以下の算術および論理命令が実行される。すなわち、ADD、ADC、SUB、SUBI、SBC、SBCI、AND、ANDI、OR、ORI、EOR、COM、NEG、SBR、CBR、INC、DEC、TST、CLR、SER、LSL、LSR、ROL、ROR、ASR、SWAP、CP、CPC、CPIである。図2からわかるように、A入力およびB入力は、命令がフェッチされデコードされたほぼ直後に汎用ALU22に対して利用可能となる。R_OUTA制御ラインは、レジスタの内容を選択し、ALU22の2つの入力の一方に出力する。R_OUTBは同様に、もし命令が第2のレジスタオペランドを指定するならばアサートされる。代替的に、K_IN制御ラインが、即時データを使用する命令に対してはALUへの2進入力として役立つ。一方、ALU(図7)のサブユニットOPnは、それぞれの演算を行ない、ALUへの入力が準備されるとすぐに、若干の組合せ遅延後に結果が利用可能となる。命令に対応するサブユニットの結果22Cは、ALU1_OP制御ラインを通じて選択され、データバス12へ置かれる。同時に、D_SEL制御ライン(図3)がmux130および132を動作させ、データバス入力D_BUSを選択させる。R_SEL(およびWE_R)制御ラインは、結果がストアされるレジスタを選択し、「組合せ遅延」後に、結果がレジスタへとクロックされる。同時に、ALUによりセットされた状態フラグが、F_SETALUのアサートによって状態レジスタ(図6)へクロックされる。
【0069】
乗算命令MULは、2つの8ビットレジスタの乗算を行ない、16ビットの結果をR0/R1レジスタ対にストアする。他のALU命令とは異なり、MUL命令には2クロックサイクルかかる。各1サイクルが、16ビットの積の半分をレジスタ対のレジスタの片方にストアするため使われる。
【0070】
MOV命令は、レジスタの間でのデータ転送を1クロックサイクル中に行なう。MOV命令は、ソースレジスタおよび行先レジスタを指定する。図2、3および図4を参照し、R_OUTC制御ラインは、mux124を動作させ、指定されたソースレジスタの内容をデータバス12へと駆動する。同時に、D_SEL制御ラインは、mux130および132を動作させ、レジスタの入力Dに現われるようD_BUSを出力させる。そしてR_SELおよびWE_R制御ラインは、行先レジスタにクロックするよう、セレクタ制御回路134を動作させ、それによって、D_BUSにより与えられる内容をストアする。
【0071】
LDI命令は、指定されたデータがレジスタにロードされるのを可能にする。データは、LDI命令の機械演算コードにおいて指定され、mux130のK_IN入力として現われる。D_SEL制御ラインは、K_INを出力するようmux130および132を動作させ、一方、R_SELおよびWE_R制御ラインは、指定されたレジスタにクロックするよう、セレクタ制御回路134を動作させる。
【0072】
16ビットX、Y、Zレジスタにおける演算は、X、Y、Zレジスタによりアドレス指定されるメモリロケーションから指定されたレジスタへデータを転送するためのLD命令、および、指定されたレジスタからX、Y、Zレジスタによりアドレス指定されるメモリロケーションにデータを転送するためのST命令を含む。LD命令およびST命令には、実行のため2クロックサイクルかかる。図2および図3を参照し、第1のクロックサイクルの間に、R_OUTA制御ラインおよびR_OUTB制御ラインが、所望の16ビットレジスタのレジスタ対(X:R27/R26、Y:R29/R28、Z:R31/R30)を選択する。ADDR_SEL制御ラインは、B:A出力を間接アドレスバス14へ送るようセレクタ114を動作させる。さらに、ST命令の場合には、R_OUTC制御ラインが、そこからデータを読出すべきレジスタを選択し、データをバス12へ置く。第2のクロックサイクルの間、メモリからバス12へとデータをロードするため(LD)またはデータをメモリに書込むため(ST)のいずれかのためメモリがストローブされる。さらに、LD命令の場合には、R_SEL制御ラインおよびWE_R制御ラインが、指定されたレジスタにD_BUSからデータを書込むため選択される。
【0073】
LD命令およびST命令は各々、特定のC言語特徴をサポートするために良く適した2つのバリアント、すなわち、ポストインクリメント(LD+、ST+)演算およびプリデクリメント(LD−、ST−)演算を有する。上述のように、図2に示す専用ALU−2は、このような演算に必要な16ビット算術演算を行なう。
【0074】
ポストインクリメント:第1のクロックサイクルにおいて、上に説明したLD命令およびST命令についてのアクティビティに加えて、V_SEL制御ラインが+1入力を選択し、ALU2_OPが、16ビットアドレスがバス14に置かれた後、付加的な演算を行なうよう専用ALU_2を動作させる。加算102の結果は、レジスタ回路100のD_ALU2H入力およびD_ALU2L入力に結合される。図3のD_SEL制御ラインは、D_ALU2Hmux入力およびD_ALU2Lmux入力を選択し、D_ALU2HをR27,R29およびR31へ送り、D_ALU2LをR26、R28およびR30へ送る。次に、データを正しいレジスタ対に書込むため、適切なWE_[XYZ]L制御ラインおよびWE_[XYZ]H制御ラインがアサートされる。
【0075】
プリデクリメント:第1のクロックサイクルにおいて、上に説明したLD命令およびST命令についてのアクティビティに加えて、V_SELは、−1入力を選択し、ALU2_OPがALU−2に加算を行なわさせる。結果は、(i)上述のようにレジスタ回路にフィードバックされ、(ii)プリデクリメントアドレスとして使用されるようADDR_SELにより選択される。
【0076】
LD命令およびST命令は各々、テーブル参照演算を簡素化するための第3のバリアント(LDD、STD)を有する。LDD命令およびSTD命令は、メモリアクセス前に16ビットアドレスレジスタに加えられる変位値を指定する。第1のクロックサイクルにおいて、LD命令およびST命令について上に説明したアクティビティに加え、V_SELは、K_IN入力を選択し、ALU2_OPが、ALU−2に加算を行なわさせる。結果は、ADDR_SELにより選択され、変位アドレスとして役立つ。
【0077】
LD命令およびST命令についての計算を行なうのに加えて、専用ALU−2は、16ビット加算命令および減算命令、すなわちADIW命令およびSBIW命令を容易にするため使用される。専用ALU−2は、1クロックサイクルでのX、Y、Zレジスタの計算を可能にするが、これはさもなくば汎用ALU22を使用しては不可能である。ADIW命令およびSBIW命令は、X、Y、Zレジスタの1つとそこに加算される定数値とを指定する。動作においては、R_OUTA制御ラインおよびR_OUTB制御ラインが、指定されたレジスタ対を専用ALU−2への第1の入力として選択する。V_OUTは、K_IN(定数値)をALU−2への第2の入力として選択する。ALU2_OPは、加算演算または減算演算のいずれかを選択する。結果102は、レジスタ回路100のD_ALU2H入力およびD_ALU2L入力へフィードバックされる。図3に示すD_SEL制御ラインは、D_ALU2HおよびD_ALU2Lmux入力を選択し、D_ALU2HをR27、R29およびR31へ送り、D_ALU2LをR26、R28およびR30へ送る。次に、データを所望のレジスタ対に書込むため、適切なWE_[XYZ]L制御ラインおよびWE_[XYZ]H制御ラインがアサートされる。
【0078】
マイクロコントローラは、各々1クロックサイクルで実行される、状態レジスタ24のさまざまなフラグをセットしクリアするため命令を与える。これらは、BSETおよびBCLR、ならびにSExおよびCLxを含み、xはI、T、H、S、V、N、ZまたはCである。アセンブリ言語レベルでは、SEx命令およびCLx命令は付加的なオペランドを必要としないが、BSET命令およびBCLR命令は、影響を及ぼすフラグを特定する状態フラグオペランドsを含む。
【0079】
図6を参照し、制御信号F_SELは、影響を及ぼすフラグを選択するため、デコーダ204および206を動作させる。フラグクリア命令の場合には、F_CLR制御ラインは、可能化信号として役立ち、影響されるフラグに対応する可能化ANDゲート224で出力を与える。出力は、フリップフロップのリセットR入力に結合され、フリップフロップをクリアする。フラグセット命令の場合には、F_SET制御ラインが2つの目的のため役立つ。第1に、(F_SELにより選択される)状態フラグの1つをセットするために各フリップフロップに入力を与える。第2に、F_SET制御ラインは、可能化ANDゲート226のための可能化信号であり、その出力は入力をクロックインするためにフリップフロップクロックラインに結合される。
【0080】
上述のように、この発明のマイクロコントローラの特徴は、1クロックサイクルでのBST命令およびBLD命令により与えられる、ビットアクセス能力である。BST命令は、状態レジスタのTフラグへコピーされるべきレジスタ内のビット位置およびレジスタを指定する。R_OUTC制御ラインは、mux124によりデータバス12へと駆動されるべき内容を持つレジスタを選択する。同時に、BIT_SEL制御ラインは、mux210(図6)を動作させ、所望のビットをデータバスから選択させ、所望のビットは、T_SEL制御ラインをアサートすることによって、Tフリップフロップへロードされる。
【0081】
BLD命令は、Tフラグ内にストアされるビットを指定されたレジスタの指定されるビット位置へロードする。F_OUT制御ラインは、Tフラグを選択するようmux202を動作させ、一方、T_OUT制御ラインは、出力をデータバスのビットnへと駆動する。同時に、図3を参照し、D_SEL制御ラインは、mux130および132の第3の入力を選択し、それによって、すべてのレジスタに入力としてD_BUSNを与える。R_SEL、BIT_SELおよびWE_BIT制御ライン(図4、図5Aおよび図5B)は、所望のレジスタ/ビット位置のフリップフロップをクロックする。
【0082】
各々変位量を指定する以下の条件付分岐命令が与えられる。
【表5】

【0083】
上述の分岐命令に加え、指定されたレジスタの指定されたビットのテストの結果に基づいて、次の命令をスキップするためのSBRC命令およびSBRS命令が与えられる。同様にCPSE命令は、2つのレジスタの内容を比較し、比較の結果に基づいて、次の命令をスキップする、すなわち、もし2つのレジスタの内容が等しければスキップする。これらの命令は、分岐が行なわれるか否かに依存して、1クロックサイクルまたは2クロックサイクルで実行される。
【0084】
図6および図9を参照し、BRxx命令のフェッチに際して、F_OUT制御ラインは、mux202から所望の状態フラグを出力するため、制御信号を搬送し、FTST_SETまたはFTST_CLRのいずれかがアサートされ、ビットテスト手段208が適切なビットテストを行なう。一方、プログラムカウンタ28は、インクリメントされており、次の命令がプリフェッチされている。もしビットテストがフェールであると、プリフェッチされている命令が、次に実行される命令としてとられる(taken)。もし、ビットテストがパスであれば、BR_SKP制御ラインがアサートされ、プログラムカウンタに、分岐アドレスを形成させ、命令レジスタ25に新しい命令がロードされる。新しい命令のロードには第2のクロックサイクルが必要である。
【0085】
図3を参照し、SBRC命令およびSBRS命令を参照してのBR_SKP制御信号の生成が図示される。所望のレジスタがmux120によってR_OUTA制御ラインを通じて選択され、mux136の入力に結合される。BIT_SEL制御ラインは、所望のビットを出力するようmux136を動作させ、所望のビットは次にBTST_CLRまたはBTST_SET制御ラインのいずれかのアサートによってビットテスト手段138においてテストされる。テストの結果に依存して、BR_SKP制御ラインがアサートされる。
【0086】
図3および図7を参照し、CPSE命令に関してのBR_SKP制御信号の発生について説明する。問題となる2つのレジスタの内容が、R_OUTA制御ラインおよびR_OUTB制御ラインを通じてのmux120および122の動作によって、汎用ALU22のA入力およびB入力において利用可能となる。XORゲート23およびANDゲート24を通じてALU内で「比較」演算が行なわれる。制御ラインCPSEがANDゲートの出力を可能化するようアサートされ、A=BのときにBR_SKPがアサートされる。
【0087】
以下の無条件分岐命令が与えられる。RJMP命令は、相対ジャンプアドレスを生成するためプログラムカウンタに加算される変位値を指定する。IJMP命令は、Zレジスタの内容をジャンプアドレスとして利用する。JMP命令はプログラムカウンタにロードされるジャンプアドレスを指定する。IJMP命令は、Zレジスタに含まれるレジスタ対R31/R30を選択するため、R_OUTA制御ラインおよびR_OUTB制御ラインに対して制御信号を生成する。図2からわかるように、mux114は、ADDR_SELにより動作させられ、Zレジスタの内容を間接アドレスバス14へ駆動し、これは次にプログラムカウンタ28にロードされる。
【0088】
以下のサブルーチン関連命令が与えられる。CALL命令は、サブルーチンの開始アドレスであるアドレスを指定する。RCALL命令は、サブルーチンの開始アドレスを生成するためプログラムカウンタに加算される変位値を指定する。ICALL命令は、サブルーチンの開始アドレスとしてZレジスタの内容を利用する。ICALL命令の実行中、レジスタファイル20は、IJMP命令について上に説明したのと同様の態様で動作する。サブルーチン呼出命令はまた、リターンアドレスをセーブするよう、スタックポインタとスタック、すなわちスタックポインタによりアドレス指定されるRAM内の区域とに動作する。
【0089】
サブルーチンリターン命令は、単にプログラムカウンタにスタックの一番上の内容をロードし、それに従ってスタックポインタを更新する標準RET命令を含む。さらに、割込ハンドラからのリターンのためRETI命令が設けられる。RETI命令は、RETと同様の態様で動作するが、状態レジスタにIフラグをセットするという付加的な作用を伴う。
【0090】
PUSH命令およびPOP命令は、SP_INC制御ラインおよびSP_DEC制御ラインをアサートし(RAM内の)スタックに書込を行なうかまたはスタックから読出を行なうことによって、スタックポインタを動作させる。
【0091】
レジスタファイルのレジスタのように一連のフリップフロップを含むI/Oポートデータレジスタとレジスタとの間でデータバス12を通じてデータを転送するためにIN命令およびOUT命令が使用される。IN命令は、I/Oポートからレジスタへデータをロードする。指定されるポートのデータレジスタの内容は、データバス12へと駆動される。D_SEL制御ラインは、D_BUSを出力するようmux130および132を動作させる。R_SEL制御ラインおよびWE_R制御ラインは、セレクタ制御回路134を動作させ、所望のレジスタをデータにクロックインさせる。逆に、OUT命令は、レジスタからI/Oポートへデータをロードする。データは、R_OUTCをアサートすることにより、指定されるレジスタからデータバスへとロードされる。選択されたポートのデータレジスタのフリップフロップは、次に、データバス12上に現われるデータにクロックインするよう動作させられる。
【0092】
LPM命令は、プログラムメモリからレジスタROへデータのバイトをロードする。プログラムメモリ内のアドレスは、Zレジスタ内に含まれる。Zレジスタは、mux120および122でレジスタR31/R30へ出力するようR_OUTAおよびR_OUTBをアサートし、得られた16ビット値(図2)をmux114を通じてアドレスバス14へと駆動することによってアクセスされる。プログラムメモリがアクセスされ、データがデータバスへとロードされる。D_SEL制御ライン(図3)は、D_BUS入力を選択し、一方、R_SEL制御ラインおよびWE_R制御ラインは、レジスタR0に対応するフリップフロップにクロックするようセレクタ制御回路を動作させ、それによってD_BUSをレジスタR0にロードする。
【0093】
SLEEP命令は、マイクロコントローラをスリープモードにセットする。割込で起動されると、プログラムカウンタおよび命令レジスタは、割込ハンドラを実行する前にSLEEP命令に続いて命令をロードし実行するよう動作させられる。
【0094】
マイクロコントローラは、ユーザにより選択可能な所定の時間期間の間にタイマがリセットされない限りマイクロコントローラをリセットするウォッチドッグ・タイマ300(図1)を含む。図11は、タイマ300が、セレクタ304に結合される複数の出力を有するカウンタ302を含むことを示す。カウンタは、1MHzで動作する内部発振器によりクロックされる。カウンタの各出力は、所定数のカウント後にアサートされる。したがって、カウンタ302は、複数の遅延時間を有する遅延手段として動作する。図11に示すように、カウンタ出力は、16mSのインクリメントで、16mSから2048mSまでの遅延時間を備え得る。遅延時間は、セレクタ304を通じて制御ラインWD_SELにより選択され、その出力は、WD_E制御ラインにより可能化される可能化ANDゲート306へ結合される。選択された遅延時間に等しい時間期間が経過したとき、対応するカウンタ出力がハイとなり、それによってMCU RESETラインをアサートする。WD_SELおよびWD_E制御ラインは、ウォッチドッグ・レジスタ308に含まれるフリップフロップの出力である。データは、データバス12を通じてレジスタ308に読込まれる。
【0095】
WDR命令は、ウォッチドッグ・タイマ300をリセットするため使用される。命令デコーダ23は、カウンタ302をリセットするWD_RST信号を生成する。したがって、タイマが可能化されるとき(WD_Eがハイのとき)、WDR命令は、選択された遅延時間に対応する頻度で実行されねばならず、さもなくばマイクロコントローラがリセットされる。

【特許請求の範囲】
【請求項1】
マイクロコントローラであって、
命令セットと、
命令セットから選択される命令をストアするためのプログラムメモリと、
命令の実行に応答して制御信号を与えるための複数の制御ラインを有する命令実行ユニットと、
プログラムメモリから命令を獲得し、獲得された命令を命令実行ユニットにロードするためのフェッチ手段と、
フェッチ手段を命令実行ユニットに結合するプログラムバスと、
プログラムメモリとは別個のデータメモリとを含み、前記データメモリはアドレススペースを有し、前記マイクロコントローラはさらに、
プログラムバスとは別個の8ビットデータバスを含み、前記データバスはデータメモリに結合され、前記マイクロコントローラはさらに、
データバスに結合されるレジスタファイルを含み、前記レジスタファイルは、複数の8ビットレジスタを有し、前記レジスタファイルはさらに、2つの8ビットレジスタに単一の論理16ビットレジスタとしてアクセスするための組合せ手段を有し、前記レジスタファイルはさらに、組合せ手段を通じてアクセスさせる論理16ビットレジスタにおいて、算術機能を行なうため組合せ手段に結合される専用ALUを有し、前記マイクロコントローラはさらに、
2つの8ビットレジスタの内容を受けるためレジスタファイルに結合される第1および第2の入力を有する汎用ALUを含み、前記汎用ALUは、定数値データを受けるための第3の入力を有し、前記汎用ALUは1クロックサイクルで出力を生成するため、第1、第2および第3の入力に選択的に動作するための手段を有し、前記汎用ALUはデータバスに結合される出力を有し、前記マイクロコントローラはさらに、
データバスおよび汎用ALUに結合される状態レジスタを含み、前記状態レジスタは、割込許可フラグ、ビット転送フラグ、ハーフ・キャリーフラグ、2の補数のオーバフローフラグ、負フラグ、符号ビット、ゼロフラグおよびキャリービットを含むフラグを有し、前記状態レジスタはさらに、フラグの1つにアクセスし、テストするためのビットテスト手段を有し、前記マイクロコントローラはさらに、
プログラムの実行中に、データメモリまたはレジスタファイルのいずれかに直接アクセスするため命令実行ユニットに結合される直接アドレスバスと、 プログラムの実行中にレジスタファイルにデータメモリへ間接的にデータアクセスさせるための間接アドレスバスとを含み、前記間接アドレスバスは、16ビットアドレスとして役立つよう組合せ手段から16ビット値を受けるためのアドレス受取手段を有し、前記マイクロコントローラはさらに、
データメモリのアドレススペース内に規定されるアドレスを有し、そのため、レジスタとしてもメモリロケーションとしてもアクセス可能である、レジスタファイルの8ビットレジスタとを含む、マイクロコントローラ。
【請求項2】
ページングレジスタと、前記ページングレジスタの内容および前記組合せ手段から与えられる16ビットデータの両方からアドレスを形成するためのアドレス形成手段とをさらに含む、請求項1に記載のマイクロコントローラ。
【請求項3】
前記ページングレジスタは8ビットレジスタであり、前記ページングレジスタは、前記8ビットデータバスに結合され、したがって、前記ページングレジスタへの値のロードが各々64Kバイトの256個のページの1つを指定する、請求項2に記載のマイクロコントローラ。
【請求項4】
ビット識別子およびレジスタを指定する機械演算コードを各々有するBST命令およびBLD命令をさらに含み、前記命令実行ユニットは、BST命令およびBLD命令の実行に応答してビット操作制御信号を生成するため有効であり、前記ビット操作制御信号は、(i)レジスタおよびビット識別子により特定されるビット位置にアクセスするためレジスタファイルを動作させるため、および、(ii)アクセスされたビット位置の内容を状態レジスタ内のビット転送フラグへと、またはビット転送フラグの内容をアクセスされたビット位置へと転送するため有効である、請求項1に記載のマイクロコントローラ。
【請求項5】
行先レジスタおよびソースレジスタの対を指定する機械演算コードを各々有する第1の複数の命令をさらに含み、前記命令実行ユニットは、第1の命令の1つの実行に応答して第1の制御信号を生成するため有効であり、前記第1の制御信号は、(i)ソースレジスタ対の内容を間接アドレスとして提供するようレジスタファイルの組合せ手段を動作させるため、(ii)間接アドレスにより指定されるメモリロケーションの内容にアクセスするようデータメモリを動作させるため、および、(iii)メモリロケーションの内容を行先レジスタにストアするためレジスタファイルを動作させるため有効であり、前記第1の命令は、LD、LD+、LD−およびLDDを含む、請求項4に記載のマイクロコントローラ。
【請求項6】
行先レジスタ対およびソースレジスタを指定する機械演算コードを各々有する第2の複数の命令をさらに含み、前記命令実行ユニットは、第2の命令の1つの実行に応答して第2の制御信号を生成するため有効であり、前記第2の制御信号は、(i)ソースレジスタの内容にアクセスするためレジスタファイルを動作させるため、(ii)行先レジスタ対の内容を間接アドレスとして提供するためレジスタファイルの組合せ手段を動作させるため、および、(iii)間接アドレスにより指定されるメモリロケーションにソースレジスタの内容をストアするようデータメモを動作させるため有効であり、前記第2の命令は、ST、ST+、ST−およびSTDを含む、請求項5に記載のマイクロコントローラ。
【請求項7】
前記命令実行ユニットはさらに、LD+命令およびST+命令の実行に応答して、レジスタ対の内容をインクリメントするようレジスタファイルの専用ALUを動作させる制御信号を生成するため有効である、請求項6に記載のマイクロコントローラ。
【請求項8】
前記命令実行ユニットはさらに、LD−命令およびST−命令の実行に応答して、レジスタ対の内容をデクリメントするためレジスタファイルの専用ALUを動作させる制御信号を生成するため有効である、請求項6に記載のマイクロコントローラ。
【請求項9】
LDD命令およびSTD命令の機械演算コードはさらに、変位値を含み、前記命令実行ユニットはさらに、LDD命令およびSTD命令の実行に応答して、組合せ手段により与えられる間接アドレスに変位値を加算するためレジスタファイルの専用ALUを動作させる制御信号を生成するため有効である、請求項6に記載のマイクロコントローラ。
【請求項10】
乗数レジスタおよび被乗数レジスタを指定する機械演算コードを有する乗算命令をさらに含み、前記乗算命令は関連付られる上位バイト行先レジスタおよび下位バイト行先レジスタを有し、前記命令実行ユニットは、乗算命令の実行に応答して乗算制御信号を生成するため有効であり、前記乗算制御信号は、(i)乗数レジスタおよび被乗数レジスタにより特定されたレジスタの内容を汎用ALUへの入力として与えるためレジスタファイルを動作させるため、(ii)乗算演算を行なうため汎用ALUを動作させるため、および、(iii)上位バイト行先レジスタおよび下位バイト行先レジスタにより特定されるレジスタに乗算演算の出力をストアするためレジスタファイルを動作させるため有効である、請求項6に記載のマイクロコントローラ。
【請求項11】
第1のレジスタおよび第2のレジスタを指定する機械演算コードを各々有する第3の複数の命令をさらに含み、前記命令実行ユニットは、第3の命令の1つの実行に応答して第3の制御信号を生成するため有効であり、前記第3の制御信号は、(i)第1および第2のレジスタの内容を汎用ALUへの入力として与えるためレジスタファイルを動作させるため、(ii)演算コードにおいて指定されるALU演算を行なうため汎用ALUを動作させるため、および、(iii)ALU演算の出力を第1のレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第3の命令は、ADD、ADC、SUB、SBC、AND、ORおよびEORを含む、請求項10に記載のマイクロコントローラ。
【請求項12】
レジスタおよび定数値を指定する機械演算コードを各々有する第4の複数の命令をさらに含み、前記命令実行ユニットは、第4の命令の1つの実行に応答して第4の制御信号を生成するため有効であり、前記第4の制御信号は、(i)レジスタの内容を汎用ALUへの第1の入力として与えるためレジスタファイルを動作させるため、(ii)定数値を汎用ALUへの第4の入力として与えるため、(iii)演算コードで指定されるALU演算を行なうよう汎用ALUを動作させるため、および、(iv)ALU演算の出力をレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第4の命令はSUBI、SBCI、ANDI、ORI、SBRおよびCBRを含む、請求項11に記載のマイクロコントローラ。
【請求項13】
レジスタを指定する機械演算コードを各々有する第5の複数の命令をさらに含み、前記命令実行ユニットは、第5の命令の1つの実行に応答して第5の制御信号を生成するため有効であり、前記第5の制御信号は、(i)レジスタの内容を汎用ALUへの入力として与えるためレジスタファイルを動作させるため、(ii)演算コードにおいて指定されるALU演算を行なうため汎用ALUを動作させるため、および、(iii)ALU演算の出力をレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第5の命令はCOM、NEG、INC、DEC、TST、CLRおよびSERを含む、請求項12に記載のマイクロコントローラ。
【請求項14】
状態ビットおよび変位値を指定する機械演算コードを各々有する第6の複数の命令をさらに含み、前記命令実行ユニットは、第6の命令の1つの実行に応答して第6の制御信号を生成するため有効であり、前記第6の制御信号は、(i)状態ビットをテストするためビットテスト手段を動作させるため、および、(ii)テストされた状態ビットの結果に基づいて、実行のためにロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるようフェッチ手段を任意に動作させるため有効であり、前記第6の命令は、BREQ、BRNE、BRCS、BRCC、BRSH、BRLO、BRMI、BRPL、BRHS、BRHC、BRTS、BRTC、BRVS、BRVC、BRID、BRIE、BRBC、BRBS、BRGEおよびBRLTを含む、請求項13に記載のマイクロコントローラ。
【請求項15】
レジスタ対および定数値を指定する機械演算コードを各々有する第7の複数の命令をさらに含み、前記命令実行ユニットは、第7の命令の1つの実行に応答して第7の制御信号を生成するため有効であり、前記第7の制御信号は、(i)レジスタ対の内容を専用ALUの入力として与えるためレジスタファイルの組合せ手段を動作させるため、(ii)定数値を専用ALUへの他入力として与えるため、(iii)加算または減算を行なうためALUを動作させるため、および、(iv)演算の結果をレジスタ対にストアするためレジスタファイルを動作させるため有効であり、前記第7の命令はADIWおよびSBIWを含む、請求項14に記載のマイクロコントローラ。
【請求項16】
ビット識別子およびレジスタを指定する機械演算コードを各々有する第8の複数の命令をさらに含み、前記命令実行ユニットは、第8の命令の1つの実行に応答して第8の制御信号を生成するため有効であり、前記第8の制御信号は、(i)レジスタにアクセスし、ビット識別子により指定されるビットをテストするためレジスタファイルを動作させるため、および、(ii)テストされたビットの結果に基づいて、次の命令をスキップするようフェッチ手段を任意に動作させるため有効であり、前記第8の命令はSBRCおよびSBRSを含む、請求項15に記載のマイクロコントローラ。
【請求項17】
定数値およびレジスタを指定する機械演算コードを有するCPI命令をさらに含み、前記命令実行ユニットは、CPI命令の実行に応答してCPI制御信号を生成するため有効であり、前記CPI制御信号は、(i)レジスタの内容を専用ALUへの第1の入力として与えるようレジスタファイルを動作させるため、(ii)定数値を専用ALUへの第2の入力として与えるため、および、(iii)第1の入力から第2の入力を減算するよう専用ALUを動作させるため有効である、請求項16に記載のマイクロコントローラ。
【請求項18】
第1のレジスタおよび第2のレジスタを指定する機械演算コードを有するCPC命令をさらに含み、前記命令実行ユニットは、CPC命令の実行に応答してCPC制御信号を生成するため有効であり、前記CpC制御信号は、(i)第1および第2のレジスタの内容を専用ALUへの入力として与えるためレジスタファイルを動作させるため、および、(ii)Rf−Rs−C、ただし
fは第1のレジスタであり、
sは第2のレジスタであり、
Cはキャリービットである、を計算するため、専用ALUを動作させるため有効である、請求項17に記載のマイクロコントローラ。
【請求項19】
第1のレジスタおよび第2のレジスタを指定する機械演算コードを有するCP命令をさらに含み、前記命令実行ユニットは、CP命令の実行に応答してCP制御信号を生成するため有効であり、前記CP制御信号は、(i)それぞれ第1のレジスタおよび第2のレジスタの内容を専用ALUへの第1の入力および第2の入力として与えるためレジスタファイルを動作させるため、および、(ii)第1の入力から第2の入力を減算するため専用ALUを動作させるため有効である、請求項18に記載のマイクロコントローラ。
【請求項20】
第1および第2のレジスタを指定する機械演算コードを有するCPSE命令をさらに含み、前記命令実行ユニットは、CPSE命令の実行に応答してCPSE制御信号を生成するため有効であり、CPSE制御信号は、(i)それぞれ第1および第2のレジスタにより指定されるレジスタの内容を汎用ALUへの第1の入力および第2の入力として与えるため、レジスタファイルを動作させるため、(ii)第1の入力と第2の入力とを比較するため汎用ALUを動作させるため、および、(iii)比較の結果に基づいて、次の命令をスキップするためフェッチ手段を任意に動作させるため有効である、請求項19に記載のマイクロコントローラ。
【請求項21】
変位値を指定する機械演算コードを各々有する第9の複数の命令をさらに含み、前記命令実行ユニットは、第9の命令の1つの実行に応答して第9の制御信号を生成するため有効であり、前記第9の制御信号は、実行のためにロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効であり、前記第9の命令はRJMPおよびJMPを含む、請求項20に記載のマイクロコントローラ。
【請求項22】
IJMP命令をさらに含み、前記命令実行ユニットは、IJMP命令の実行に応答してIJMP制御信号を生成するため有効であり、IJMP制御信号は、(i)2つのレジスタの内容を単一の変位値として与えるためレジスタファイルの組合せ手段を動作させるため、および、(ii)実行のためロードされる次の命令が、現在の命令の位置から単一の変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効である、請求項21に記載のマイクロコントローラ。
【請求項23】
変位値を指定する機械演算コードを各々有する第10の複数の命令をさらに含み、前記命令実行ユニットは、第10の命令の1つの実行に応答して第10の制御信号を生成するため有効であり、前記第10の制御信号は、(i)実行される次の命令のプログラムメモリ内の位置をスタックヘ移すため、および、(ii)実行のためロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるようフェッチ手段を動作させるため有効であり、前記第10の命令はRCALLおよびCALLを含む、請求項22に記載のマイクロコントローラ。
【請求項24】
ICALL命令をさらに含み、前記命令実行ユニットは、ICALL命令の実行に応答してICALL制御信号を生成するため有効であり、前記ICALL制御信号は、(i)2つのレジスタの内容を単一の変位値として与えるためレジスタファイルの組合せ手段を動作させるため、(ii)次に実行される命令のプログラムメモリ内での位置をスタックへと移すため、および、(iii)実行のためロードされる次の命令が、現在の命令の位置から単一の変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効である、請求項23に記載のマイクロコントローラ。
【請求項25】
変位値を指定する機械演算コードを各々有する第11の複数の命令をさらに含み、前記命令実行ユニットは、第11の命令の1つの実行に応答して第11の制御信号を生成するため有効であり、前記第11の制御信号は、(i)プログラムメモリ内の位置を獲得するためスタックをポップ(pop)するため、および、(ii)実行のためロードされる次の命令が、スタックから獲得されるプログラムメモリ内の位置に基づくようフェッチ手段を動作させるため有効であり、前記第11の命令は、RETおよびRETIを含む、請求項24に記載のマイクロコントローラ。
【請求項26】
前記命令実行ユニットはさらに、RETI命令の実行に応答して、グローバル割込フラグをセットするよう状態レジスタを動作させる制御信号を生成する、請求項25に記載のマイクロコントローラ。
【請求項27】
行先レジスタおよびデータソースを指定する機械演算コードを各々有する第12の複数の命令をさらに含み、前記命令実行ユニットは、第12の命令の1つの実行に応答して第12の制御信号を生成するため有効であり、前記第12の制御信号は、(i)もしデータソースがレジスタであれば、レジスタの内容にアクセスするためレジスタファイルを動作させるため、および、(ii)もしデータソースがレジスタであればアクセスされるレジスタの内容を、または、もしデータソースが定数値であればデータソースそれ自体のいずれかを行先レジスタにストアするようレジスタファイルを動作させるため有効であり、前記第12の命令はMOVおよびLDIを含む、請求項26に記載のマイクロコントローラ。
【請求項28】
レジスタを指定するPUSH命令をさらに含み、前記命令実行ユニットは、PUSH命令の実行に応答してPUSH制御信号を生成するため有効であり、前記PUSH制御信号は、(i)スタック内の次の位置を指し示すためスタックポインタを更新するため、および、(ii)レジスタの内容を受けるようスタックを動作させるため有効である、請求項27に記載のマイクロコントローラ。
【請求項29】
レジスタを指定するPOP命令をさらに含み、前記命令実行ユニットは、POP命令の実行に応答してPOP制御信号を生成するため有効であり、前記POP制御信号は、(i)スタックの内容をレジスタにストアするためスタックを動作させるため、および、(ii)スタック内の前の位置を指し示すようスタックポインタを更新するため有効である、請求項28に記載のマイクロコントローラ。
【請求項30】
ポートおよびレジスタを指定する機械演算コードを各々有するIN命令およびOUT命令をさらに含み、前記命令実行ユニットは、IN命令およびOUT命令の一方の実行に応答してポート制御信号を生成するため有効であり、前記ポート制御信号は、(i)レジスタにアクセスするためにレジスタファイルを動作させるため、および、(ii)アクセスされるレジスタからポートへ内容を転送するかまたはポートの内容をアクセスさせるレジスタに転送するかのため有効である、請求項29に記載のマイクロコントローラ。
【請求項31】
LPM命令をさらに含み、前記命令実行ユニットは、LPM命令の実行に応答してLPM制御信号を生成するため有効であり、前記LPM制御信号は、(i)2つのレジスタの内容をプログラムアドレスとして与えるためレジスタファイルの組合せ手段を動作させるため、(ii)プログラムアドレスにより指定されるプログラムメモリのメモリロケーション内のデータにアクセスするため、および、(iii)レジスタ内にアクセスされたデータをストアするためレジスタファイルを動作させるため有効である、請求項30に記載のマイクロコントローラ。
【請求項32】
第13の複数の命令をさらに含み、前記命令実行ユニットは、第13の命令の1つの実行に応答して第13の制御信号を生成するため有効であり、前記第13の制御信号は、(i)状態レジスタ内のビットにアクセスするため状態レジスタを動作させるため、および、(ii)アクセスされたビットをセットまたはクリアのいずれかするため有効であり、前記第13の命令は、SEC、CLC、SEN、CLN、SEZ、CLZ、SEI、CLI、SES、CLS、SEV、CLV、SET、CLT、SEH、CLH、BSETおよびBCLRを含む、請求項31に記載のマイクロコントローラ。
【請求項33】
レジスタを指定するLSL命令をさらに含み、前記命令実行ユニットは、LSL命令の実行に応答して第1のシフト制御信号を生成するため有効であり、前記第1のシフト制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、(ii)アクセスされたレジスタの最上位ビットをキャリービットにシフトするため、(iii)ビットを左に1つ位置をシフトさせるため、および、(iv)最下位ビットをクリアするため有効である、請求項32に記載のマイクロコントローラ。
【請求項34】
レジスタを指定するLSR命令をさらに含み、前記命令実行ユニットは、LSR命令の実行に応答して第2のシフト制御信号を生成するため有効であり、前記第2のシフト制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、(ii)アクセスされたレジスタの最下位ビットをキャリービットにシフトするため、(iii)ビットを右に1つ位置をシフトさせるため、および、(iv)最上位ビットをクリアするため有効である、請求項33に記載のマイクロコントローラ。
【請求項35】
レジスタを指定するROL命令をさらに含み、前記命令実行ユニットは、ROL命令の実行に応答して第3のシフト制御信号を生成するため有効であり、前記第3のシフト制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、(ii)ビットを左に1つ位置をシフトさせるため、(iii)キャリービットを最下位ビットにシフトさせるため、および、(iv)最上位ビットをキャリービットにシフトさせるため有効である、請求項34に記載のマイクロコントローラ。
【請求項36】
レジスタを指定するROR命令をさらに含み、前記命令実行ユニットは、ROR命令の実行に応答して第4のシフト制御信号を生成するため有効であり、前記第4のシフト制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、(ii)ビットを右に1つ位置をシフトさせるため、(iii)キャリービットを最上位ビットにシフトさせるため、および、(iv)最下位ビットをキャリービットにシフトさせるため有効である、請求項35に記載のマイクロコントローラ。
【請求項37】
レジスタを指定するASR命令をさらに含み、前記命令実行ユニットは、ASR命令の実行に応答して第5のシフト制御信号を生成するため有効であり、前記第5のシフト制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、(ii)ビットを右に1つ位置をシフトさせるため、および、(iii)最下位ビットをキャリービットにシフトさせるため有効である、請求項36に記載のマイクロコントローラ。
【請求項38】
レジスタを指定するSWAP命令をさらに含み、前記命令実行ユニットは、SWAP命令の実行に応答してスワップ制御信号を生成するため有効であり、前記スワップ制御信号は、(i)レジスタにアクセスするためレジスタファイルを動作させるため、および、(ii)アクセスされたレジスタの上位ニブルおよび下位ニブルをスワップするため有効である、請求項37に記載のマイクロコントローラ。
【請求項39】
SLEEP命令をさらに含み、前記命令実行ユニットは、SLEEP命令の実行に応答してスリープ制御信号を生成するため有効であり、前記スリープ制御信号は、マイクロコントローラをスリープモードにするため有効である、請求項38に記載のマイクロコントローラ。
【請求項40】
ウォッチドッグ・リセットラインおよびMCUリセットラインを有するウォッチドッグ・タイマと、時間期間の遅延後にMCUリセットライン上の信号をアサートするための遅延手段とをさらに含み、前記MCUリセットラインは、遅延手段による信号のアサートに際してマイクロコントローラのリセットを起こすよう結合され、前記ウォッチドッグ・リセットラインは遅延期間を開始するよう遅延手段に結合され、前記マイクロコントローラはさらに、WDR命令を含み、前記命令実行ユニットは、WDR命令の実行に応答してウォッチドッグ・リセットライン上の信号をアサートし、それによって遅延期間を開始するため有効である、請求項39に記載のマイクロコントローラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2009−223897(P2009−223897A)
【公開日】平成21年10月1日(2009.10.1)
【国際特許分類】
【出願番号】特願2009−73431(P2009−73431)
【出願日】平成21年3月25日(2009.3.25)
【分割の表示】特願平10−541670の分割
【原出願日】平成10年3月13日(1998.3.13)
【出願人】(591225523)アトメル・コーポレイション (57)
【氏名又は名称原語表記】ATMEL CORPORATION
【Fターム(参考)】