(57)【特許請求の範囲】
【請求項１】
所定の命令セットを実行するマイクロコントローラであって、
前記命令セットから選択される命令をストアするためのプログラムメモリと、
命令の実行に応答して制御信号を与えるための複数の制御ラインを有する命令実行ユニットと、
プログラムメモリから命令を獲得し、獲得された命令を命令実行ユニットにロードするためのフェッチ手段と、
フェッチ手段を命令実行ユニットに結合するプログラムバスと、
プログラムメモリとは別個のデータメモリとを含み、前記データメモリはアドレススペースを有し、前記マイクロコントローラはさらに、
プログラムバスとは別個の８ビットデータバスを含み、前記データバスはデータメモリに結合され、前記マイクロコントローラはさらに、
データバスに結合されるレジスタファイルを含み、前記レジスタファイルは、複数の８ビットレジスタを有し、前記レジスタファイルはさらに、２つの８ビットレジスタを単一の論理１６ビットレジスタとしてアクセスするための組合せ手段を有し、前記レジスタファイルはさらに、組合せ手段を通じてアクセスさせる論理１６ビットレジスタにおいて、算術機能を行なうため組合せ手段に結合される専用ＡＬＵを有し、前記マイクロコントローラはさらに、
２つの８ビットレジスタの内容を受けるためレジスタファイルに結合される第１および第２の入力を有する汎用ＡＬＵを含み、前記汎用ＡＬＵは、定数値データを受けるための第３の入力を有し、前記汎用ＡＬＵは１クロックサイクルで出力を生成するため、第１、第２および第３の入力に選択的に動作するための手段を有し、前記汎用ＡＬＵはデータバスに結合される出力を有し、前記マイクロコントローラはさらに、
データバスおよび汎用ＡＬＵに結合される状態レジスタを含み、前記状態レジスタは、割込許可フラグ、ビット転送フラグ、ハーフ・キャリーフラグ、２の補数のオーバフローフラグ、負フラグ、符号ビット、ゼロフラグおよびキャリービットを含むフラグを有し、前記状態レジスタはさらに、フラグの１つにアクセスし、テストするためのビットテスト手段を有し、前記マイクロコントローラはさらに、
プログラムの実行中に、データメモリまたはレジスタファイルのいずれかに直接アクセスするため命令実行ユニットに結合される直接アドレスバスと、
プログラムの実行中にレジスタファイルにデータメモリへ間接的にデータアクセスさせるための間接アドレスバスとを含み、前記間接アドレスバスは、１６ビットアドレスとして役立つよう組合せ手段から１６ビット値を受けるためのアドレス受取手段を有し、
前記レジスタファイルの前記８ビットレジスタは、前記データメモリのアドレススペース内に規定されるアドレスを有し、そのため、レジスタとしても位置がアドレスで指定されるメモリとしてもアクセス可能であり、
前記８ビットレジスタはセレクタ制御回路を備え、前記セレクタ制御回路は、動作モードに依存して、１６ビットデータを１ワードのデータとしてレジスタ対に書き込むこともでき、８ビットデータを１バイトのデータとしてレジスタに書き込むこともでき、または、レジスタの特定のビットを１ビットのデータとして書き込むこともできるように構成されている、マイクロコントローラ。
【請求項２】
ページングレジスタと、前記ページングレジスタの内容および前記組合せ手段から与えられる１６ビットデータの両方からアドレスを形成するためのアドレス形成手段とをさらに含む、請求項１に記載のマイクロコントローラ。
【請求項３】
前記ページングレジスタは８ビットレジスタであり、前記ページングレジスタは、前記８ビットデータバスに結合され、したがって、前記ページングレジスタへの値のロードが各々６４Ｋバイトの２５６個のページの１つを指定する、請求項２に記載のマイクロコントローラ。
【請求項４】
ビット識別子およびレジスタを指定する機械演算コードを各々有するＢＳＴ命令およびＢＬＤ命令をさらに含み、前記命令実行ユニットは、ＢＳＴ命令およびＢＬＤ命令の実行に応答してビット操作制御信号を生成するため有効であり、前記ビット操作制御信号は、（ｉ）レジスタおよびビット識別子により特定されるビット位置にアクセスするためレジスタファイルを動作させるため、および、（ii）アクセスされたビット位置の内容を状態レジスタ内のビット転送フラグへと、またはビット転送フラグの内容をアクセスされたビット位置へと転送するため有効である、請求項１に記載のマイクロコントローラ。
【請求項５】
行先レジスタおよびソースレジスタの対を指定する機械演算コードを各々有する第１の複数の命令をさらに含み、前記命令実行ユニットは、第１の命令の１つの実行に応答して第１の制御信号を生成するため有効であり、前記第１の制御信号は、（ｉ）ソースレジスタ対の内容を間接アドレスとして提供するようレジスタファイルの組合せ手段を動作させるため、（ii）間接アドレスにより指定されるメモリロケーションの内容にアクセスするようデータメモリを動作させるため、および、（iii）メモリロケーションの内容を行先レジスタにストアするためレジスタファイルを動作させるため有効であり、前記第１の命令は、ＬＤ、ＬＤ＋、ＬＤ−およびＬＤＤを含む、請求項４に記載のマイクロコントローラ。
【請求項６】
行先レジスタ対およびソースレジスタを指定する機械演算コードを各々有する第２の複数の命令をさらに含み、前記命令実行ユニットは、第２の命令の１つの実行に応答して第２の制御信号を生成するため有効であり、前記第２の制御信号は、（ｉ）ソースレジスタの内容にアクセスするためレジスタファイルを動作させるため、（ii）行先レジスタ対の内容を間接アドレスとして提供するためレジスタファイルの組合せ手段を動作させるため、および、（iii）間接アドレスにより指定されるメモリロケーションにソースレジスタの内容をストアするようデータメモを動作させるため有効であり、前記第２の命令は、ＳＴ、ＳＴ＋、ＳＴ−およびＳＴＤを含む、請求項５に記載のマイクロコントローラ。
【請求項７】
前記命令実行ユニットはさらに、ＬＤ＋命令およびＳＴ＋命令の実行に応答して、レジスタ対の内容をインクリメントするようレジスタファイルの専用ＡＬＵを動作させる制御信号を生成するため有効である、請求項６に記載のマイクロコントローラ。
【請求項８】
前記命令実行ユニットはさらに、ＬＤ−命令およびＳＴ−命令の実行に応答して、レジスタ対の内容をデクリメントするためレジスタファイルの専用ＡＬＵを動作させる制御信号を生成するため有効である、請求項６に記載のマイクロコントローラ。
【請求項９】
ＬＤＤ命令およびＳＴＤ命令の機械演算コードはさらに、変位値を含み、前記命令実行ユニットはさらに、ＬＤＤ命令およびＳＴＤ命令の実行に応答して、組合せ手段により与えられる間接アドレスに変位値を加算するためレジスタファイルの専用ＡＬＵを動作させる制御信号を生成するため有効である、請求項６に記載のマイクロコントローラ。
【請求項１０】
乗数レジスタおよび被乗数レジスタを指定する機械演算コードを有する乗算命令をさらに含み、前記乗算命令は関連付られる上位バイト行先レジスタおよび下位バイト行先レジスタを有し、前記命令実行ユニットは、乗算命令の実行に応答して乗算制御信号を生成するため有効であり、前記乗算制御信号は、（ｉ）乗数レジスタおよび被乗数レジスタにより特定されたレジスタの内容を汎用ＡＬＵへの入力として与えるためレジスタファイルを動作させるため、（ii）乗算演算を行なうため汎用ＡＬＵを動作させるため、および、（iii）上位バイト行先レジスタおよび下位バイト行先レジスタにより特定されるレジスタに乗算演算の出力をストアするためレジスタファイルを動作させるため有効である、請求項６に記載のマイクロコントローラ。
【請求項１１】
第１のレジスタおよび第２のレジスタを指定する機械演算コードを各々有する第３の複数の命令をさらに含み、前記命令実行ユニットは、第３の命令の１つの実行に応答して第３の制御信号を生成するため有効であり、前記第３の制御信号は、（ｉ）第１および第２のレジスタの内容を汎用ＡＬＵへの入力として与えるためレジスタファイルを動作させるため、（ii）演算コードにおいて指定されるＡＬＵ演算を行なうため汎用ＡＬＵを動作させるため、および、（iii）ＡＬＵ演算の出力を第１のレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第３の命令は、ＡＤＤ、ＡＤＣ、ＳＵＢ、ＳＢＣ、ＡＮＤ、ＯＲおよびＥＯＲを含む、請求項１０に記載のマイクロコントローラ。
【請求項１２】
レジスタおよび定数値を指定する機械演算コードを各々有する第４の複数の命令をさらに含み、前記命令実行ユニットは、第４の命令の１つの実行に応答して第４の制御信号を生成するため有効であり、前記第４の制御信号は、（ｉ）レジスタの内容を汎用ＡＬＵへの第１の入力として与えるためレジスタファイルを動作させるため、（ii）定数値を汎用ＡＬＵへの第４の入力として与えるため、（iii）演算コードで指定されるＡＬＵ演算を行なうよう汎用ＡＬＵを動作させるため、および、（iv）ＡＬＵ演算の出力をレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第４の命令はＳＵＢＩ、ＳＢＣＩ、ＡＮＤＩ、ＯＲＩ、ＳＢＲおよびＣＢＲを含む、請求項１１に記載のマイクロコントローラ。
【請求項１３】
レジスタを指定する機械演算コードを各々有する第５の複数の命令をさらに含み、前記命令実行ユニットは、第５の命令の１つの実行に応答して第５の制御信号を生成するため有効であり、前記第５の制御信号は、（ｉ）レジスタの内容を汎用ＡＬＵへの入力として与えるためレジスタファイルを動作させるため、（ii）演算コードにおいて指定されるＡＬＵ演算を行なうため汎用ＡＬＵを動作させるため、および、（iii）ＡＬＵ演算の出力をレジスタにストアするためレジスタファイルを動作させるため有効であり、前記第５の命令はＣＯＭ、ＮＥＧ、ＩＮＣ、ＤＥＣ、ＴＳＴ、ＣＬＲおよびＳＥＲを含む、請求項１２に記載のマイクロコントローラ。
【請求項１４】
状態ビットおよび変位値を指定する機械演算コードを各々有する第６の複数の命令をさらに含み、前記命令実行ユニットは、第６の命令の１つの実行に応答して第６の制御信号を生成するため有効であり、前記第６の制御信号は、（ｉ）状態ビットをテストするためビットテスト手段を動作させるため、および、（ii）テストされた状態ビットの結果に基づいて、実行のためにロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるようフェッチ手段を任意に動作させるため有効であり、前記第６の命令は、ＢＲＥＱ、ＢＲＮＥ、ＢＲＣＳ、ＢＲＣＣ、ＢＲＳＨ、ＢＲＬＯ、ＢＲＭＩ、ＢＲＰＬ、ＢＲＨＳ、ＢＲＨＣ、ＢＲＴＳ、ＢＲＴＣ、ＢＲＶＳ、ＢＲＶＣ、ＢＲＩＤ、ＢＲＩＥ、ＢＲＢＣ、ＢＲＢＳ、ＢＲＧＥおよびＢＲＬＴを含む、請求項１３に記載のマイクロコントローラ。
【請求項１５】
レジスタ対および定数値を指定する機械演算コードを各々有する第７の複数の命令をさらに含み、前記命令実行ユニットは、第７の命令の１つの実行に応答して第７の制御信号を生成するため有効であり、前記第７の制御信号は、（ｉ）レジスタ対の内容を専用ＡＬＵの入力として与えるためレジスタファイルの組合せ手段を動作させるため、（ii）定数値を専用ＡＬＵへの他入力として与えるため、（iii）加算または減算を行なうためＡＬＵを動作させるため、および、（iv）演算の結果をレジスタ対にストアするためレジスタファイルを動作させるため有効であり、前記第７の命令はＡＤＩＷおよびＳＢＩＷを含む、請求項１４に記載のマイクロコントローラ。
【請求項１６】
ビット識別子およびレジスタを指定する機械演算コードを各々有する第８の複数の命令をさらに含み、前記命令実行ユニットは、第８の命令の１つの実行に応答して第８の制御信号を生成するため有効であり、前記第８の制御信号は、（ｉ）レジスタにアクセスし、ビット識別子により指定されるビットをテストするためレジスタファイルを動作させるため、および、（ii）テストされたビットの結果に基づいて、次の命令をスキップするようフェッチ手段を任意に動作させるため有効であり、前記第８の命令はＳＢＲＣおよびＳＢＲＳを含む、請求項１５に記載のマイクロコントローラ。
【請求項１７】
定数値およびレジスタを指定する機械演算コードを有するＣＰＩ命令をさらに含み、前記命令実行ユニットは、ＣＰＩ命令の実行に応答してＣＰＩ制御信号を生成するため有効であり、前記ＣＰＩ制御信号は、（ｉ）レジスタの内容を専用ＡＬＵへの第１の入力として与えるようレジスタファイルを動作させるため、（ii）定数値を専用ＡＬＵへの第２の入力として与えるため、および、（iii）第１の入力から第２の入力を減算するよう専用ＡＬＵを動作させるため有効である、請求項１６に記載のマイクロコントローラ。
【請求項１８】
第１のレジスタおよび第２のレジスタを指定する機械演算コードを有するＣＰＣ命令をさらに含み、前記命令実行ユニットは、ＣＰＣ命令の実行に応答してＣＰＣ制御信号を生成するため有効であり、前記ＣｐＣ制御信号は、（ｉ）第１および第２のレジスタの内容を専用ＡＬＵへの入力として与えるためレジスタファイルを動作させるため、および、（ii）Ｒf−Ｒs−Ｃ、ただし
Ｒfは第１のレジスタであり、
Ｒsは第２のレジスタであり、
Ｃはキャリービットである、を計算するため、専用ＡＬＵを動作させるため有効である、請求項１７に記載のマイクロコントローラ。
【請求項１９】
第１のレジスタおよび第２のレジスタを指定する機械演算コードを有するＣＰ命令をさらに含み、前記命令実行ユニットは、ＣＰ命令の実行に応答してＣＰ制御信号を生成するため有効であり、前記ＣＰ制御信号は、（ｉ）それぞれ第１のレジスタおよび第２のレジスタの内容を専用ＡＬＵへの第１の入力および第２の入力として与えるためレジスタファイルを動作させるため、および、（ii）第１の入力から第２の入力を減算するため専用ＡＬＵを動作させるため有効である、請求項１８に記載のマイクロコントローラ。
【請求項２０】
第１および第２のレジスタを指定する機械演算コードを有するＣＰＳＥ命令をさらに含み、前記命令実行ユニットは、ＣＰＳＥ命令の実行に応答してＣＰＳＥ制御信号を生成するため有効であり、ＣＰＳＥ制御信号は、（ｉ）それぞれ第１および第２のレジスタにより指定されるレジスタの内容を汎用ＡＬＵへの第１の入力および第２の入力として与えるため、レジスタファイルを動作させるため、（ii）第１の入力と第２の入力とを比較するため汎用ＡＬＵを動作させるため、および、（iii）比較の結果に基づいて、次の命令をスキップするためフェッチ手段を任意に動作させるため有効である、請求項１９に記載のマイクロコントローラ。
【請求項２１】
変位値を指定する機械演算コードを各々有する第９の複数の命令をさらに含み、前記命令実行ユニットは、第９の命令の１つの実行に応答して第９の制御信号を生成するため有効であり、前記第９の制御信号は、実行のためにロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効であり、前記第９の命令はＲＪＭＰおよびＪＭＰを含む、請求項２０に記載のマイクロコントローラ。
【請求項２２】
ＩＪＭＰ命令をさらに含み、前記命令実行ユニットは、ＩＪＭＰ命令の実行に応答してＩＪＭＰ制御信号を生成するため有効であり、ＩＪＭＰ制御信号は、（ｉ）２つのレジスタの内容を単一の変位値として与えるためレジスタファイルの組合せ手段を動作させるため、および、（ii）実行のためロードされる次の命令が、現在の命令の位置から単一の変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効である、請求項２１に記載のマイクロコントローラ。
【請求項２３】
変位値を指定する機械演算コードを各々有する第１０の複数の命令をさらに含み、前記命令実行ユニットは、第１０の命令の１つの実行に応答して第１０の制御信号を生成するため有効であり、前記第１０の制御信号は、（ｉ）実行される次の命令のプログラムメモリ内の位置をスタックヘ移すため、および、（ii）実行のためロードされる次の命令が、現在の命令の位置から変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるようフェッチ手段を動作させるため有効であり、前記第１０の命令はＲＣＡＬＬおよびＣＡＬＬを含む、請求項２２に記載のマイクロコントローラ。
【請求項２４】
ＩＣＡＬＬ命令をさらに含み、前記命令実行ユニットは、ＩＣＡＬＬ命令の実行に応答してＩＣＡＬＬ制御信号を生成するため有効であり、前記ＩＣＡＬＬ制御信号は、（ｉ）２つのレジスタの内容を単一の変位値として与えるためレジスタファイルの組合せ手段を動作させるため、（ii）次に実行される命令のプログラムメモリ内での位置をスタックへと移すため、および、（iii）実行のためロードされる次の命令が、現在の命令の位置から単一の変位値に等しい量だけ変位されたプログラムメモリ内の位置から獲得されるよう、フェッチ手段を動作させるため有効である、請求項２３に記載のマイクロコントローラ。
【請求項２５】
変位値を指定する機械演算コードを各々有する第１１の複数の命令をさらに含み、前記命令実行ユニットは、第１１の命令の１つの実行に応答して第１１の制御信号を生成するため有効であり、前記第１１の制御信号は、（ｉ）プログラムメモリ内の位置を獲得するためスタックをポップ（ｐｏｐ）するため、および、（ii）実行のためロードされる次の命令が、スタックから獲得されるプログラムメモリ内の位置に基づくようフェッチ手段を動作させるため有効であり、前記第１１の命令は、ＲＥＴおよびＲＥＴＩを含む、請求項２４に記載のマイクロコントローラ。
【請求項２６】
前記命令実行ユニットはさらに、ＲＥＴＩ命令の実行に応答して、グローバル割込フラグをセットするよう状態レジスタを動作させる制御信号を生成する、請求項２５に記載のマイクロコントローラ。
【請求項２７】
行先レジスタおよびデータソースを指定する機械演算コードを各々有する第１２の複数の命令をさらに含み、前記命令実行ユニットは、第１２の命令の１つの実行に応答して第１２の制御信号を生成するため有効であり、前記第１２の制御信号は、（ｉ）もしデータソースがレジスタであれば、レジスタの内容にアクセスするためレジスタファイルを動作させるため、および、（ii）もしデータソースがレジスタであればアクセスされるレジスタの内容を、または、もしデータソースが定数値であればデータソースそれ自体のいずれかを行先レジスタにストアするようレジスタファイルを動作させるため有効であり、前記第１２の命令はＭＯＶおよびＬＤＩを含む、請求項２６に記載のマイクロコントローラ。
【請求項２８】
レジスタを指定するＰＵＳＨ命令をさらに含み、前記命令実行ユニットは、ＰＵＳＨ命令の実行に応答してＰＵＳＨ制御信号を生成するため有効であり、前記ＰＵＳＨ制御信号は、（ｉ）スタック内の次の位置を指し示すためスタックポインタを更新するため、および、（ii）レジスタの内容を受けるようスタックを動作させるため有効である、請求項２７に記載のマイクロコントローラ。
【請求項２９】
レジスタを指定するＰＯＰ命令をさらに含み、前記命令実行ユニットは、ＰＯＰ命令の実行に応答してＰＯＰ制御信号を生成するため有効であり、前記ＰＯＰ制御信号は、（ｉ）スタックの内容をレジスタにストアするためスタックを動作させるため、および、（ii）スタック内の前の位置を指し示すようスタックポインタを更新するため有効である、請求項２８に記載のマイクロコントローラ。
【請求項３０】
ポートおよびレジスタを指定する機械演算コードを各々有するＩＮ命令およびＯＵＴ命令をさらに含み、前記命令実行ユニットは、ＩＮ命令およびＯＵＴ命令の一方の実行に応答してポート制御信号を生成するため有効であり、前記ポート制御信号は、（ｉ）レジスタにアクセスするためにレジスタファイルを動作させるため、および、（ii）アクセスされるレジスタからポートへ内容を転送するかまたはポートの内容をアクセスさせるレジスタに転送するかのため有効である、請求項２９に記載のマイクロコントローラ。
【請求項３１】
ＬＰＭ命令をさらに含み、前記命令実行ユニットは、ＬＰＭ命令の実行に応答してＬＰＭ制御信号を生成するため有効であり、前記ＬＰＭ制御信号は、（ｉ）２つのレジスタの内容をプログラムアドレスとして与えるためレジスタファイルの組合せ手段を動作させるため、（ii）プログラムアドレスにより指定されるプログラムメモリのメモリロケーション内のデータにアクセスするため、および、（iii）レジスタ内にアクセスされたデータをストアするためレジスタファイルを動作させるため有効である、請求項３０に記載のマイクロコントローラ。
【請求項３２】
第１３の複数の命令をさらに含み、前記命令実行ユニットは、第１３の命令の１つの実行に応答して第１３の制御信号を生成するため有効であり、前記第１３の制御信号は、（ｉ）状態レジスタ内のビットにアクセスするため状態レジスタを動作させるため、および、（ii）アクセスされたビットをセットまたはクリアのいずれかするため有効であり、前記第１３の命令は、ＳＥＣ、ＣＬＣ、ＳＥＮ、ＣＬＮ、ＳＥＺ、ＣＬＺ、ＳＥＩ、ＣＬＩ、ＳＥＳ、ＣＬＳ、ＳＥＶ、ＣＬＶ、ＳＥＴ、ＣＬＴ、ＳＥＨ、ＣＬＨ、ＢＳＥＴおよびＢＣＬＲを含む、請求項３１に記載のマイクロコントローラ。
【請求項３３】
レジスタを指定するＬＳＬ命令をさらに含み、前記命令実行ユニットは、ＬＳＬ命令の実行に応答して第１のシフト制御信号を生成するため有効であり、前記第１のシフト制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、（ii）アクセスされたレジスタの最上位ビットをキャリービットにシフトするため、（iii）ビットを左に１つ位置をシフトさせるため、および、（iv）最下位ビットをクリアするため有効である、請求項３２に記載のマイクロコントローラ。
【請求項３４】
レジスタを指定するＬＳＲ命令をさらに含み、前記命令実行ユニットは、ＬＳＲ命令の実行に応答して第２のシフト制御信号を生成するため有効であり、前記第２のシフト制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、（ii）アクセスされたレジスタの最下位ビットをキャリービットにシフトするため、（iii）ビットを右に１つ位置をシフトさせるため、および、（iv）最上位ビットをクリアするため有効である、請求項３３に記載のマイクロコントローラ。
【請求項３５】
レジスタを指定するＲＯＬ命令をさらに含み、前記命令実行ユニットは、ＲＯＬ命令の実行に応答して第３のシフト制御信号を生成するため有効であり、前記第３のシフト制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、（ii）ビットを左に１つ位置をシフトさせるため、（iii）キャリービットを最下位ビットにシフトさせるため、および、（iv）最上位ビットをキャリービットにシフトさせるため有効である、請求項３４に記載のマイクロコントローラ。
【請求項３６】
レジスタを指定するＲＯＲ命令をさらに含み、前記命令実行ユニットは、ＲＯＲ命令の実行に応答して第４のシフト制御信号を生成するため有効であり、前記第４のシフト制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、（ii）ビットを右に１つ位置をシフトさせるため、（iii）キャリービットを最上位ビットにシフトさせるため、および、（iv）最下位ビットをキャリービットにシフトさせるため有効である、請求項３５に記載のマイクロコントローラ。
【請求項３７】
レジスタを指定するＡＳＲ命令をさらに含み、前記命令実行ユニットは、ＡＳＲ命令の実行に応答して第５のシフト制御信号を生成するため有効であり、前記第５のシフト制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、（ii）ビットを右に１つ位置をシフトさせるため、および、（iii）最下位ビットをキャリービットにシフトさせるため有効である、請求項３６に記載のマイクロコントローラ。
【請求項３８】
レジスタを指定するＳＷＡＰ命令をさらに含み、前記命令実行ユニットは、ＳＷＡＰ命令の実行に応答してスワップ制御信号を生成するため有効であり、前記スワップ制御信号は、（ｉ）レジスタにアクセスするためレジスタファイルを動作させるため、および、（ii）アクセスされたレジスタの上位ニブルおよび下位ニブルをスワップするため有効である、請求項３７に記載のマイクロコントローラ。
【請求項３９】
ＳＬＥＥＰ命令をさらに含み、前記命令実行ユニットは、ＳＬＥＥＰ命令の実行に応答してスリープ制御信号を生成するため有効であり、前記スリープ制御信号は、マイクロコントローラをスリープモードにするため有効である、請求項３８に記載のマイクロコントローラ。
【請求項４０】
ウォッチドッグ・リセットラインおよびＭＣＵリセットラインを有するウォッチドッグ・タイマと、時間期間の遅延後にＭＣＵリセットライン上の信号をアサートするための遅延手段とをさらに含み、前記ＭＣＵリセットラインは、遅延手段による信号のアサートに際してマイクロコントローラのリセットを起こすよう結合され、前記ウォッチドッグ・リセットラインは遅延期間を開始するよう遅延手段に結合され、前記マイクロコントローラはさらに、ＷＤＲ命令を含み、前記命令実行ユニットは、ＷＤＲ命令の実行に応答してウォッチドッグ・リセットライン上の信号をアサートし、それによって遅延期間を開始するため有効である、請求項３９に記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マイクロコントローラ一般に関し、特に、より少数の命令セットを実行するマイクロコントローラに関する。
【背景技術】
【０００２】
現在のサブミクロンＣＭＯＳ技術では、複雑なメモリおよび周辺論理の実現のために十分なシリコン面積を残しつつ、複雑なマイクロコントローラアーキテクチャをチップ上に集積することが可能である。３２ビットおよび６４ビットのハイエンドＲＩＳＣマシンにおいて最も一般に使用されている設計アーキテクチャおよび方法論は、低コストの８ビットマイクロコントローラシステムにおいても効率的に利用および応用できる。このようなパワフルでありながらも費用対効果のよいマイクロコントローラにより、システムの全体としての集積度は上昇し続けている。ハードウェアアーキテクチャにおいてより効率的なプログラムを実行することができ、より多くのハードウェア機能を集積することができる。
【０００３】
近年、ＲＩＳＣアーキテクチャは人気を増している。最も目立つのは、アップル・コンピュータ、ＩＢＭおよびモトローラが共同開発したパワーＰＣ（登録商標）である。ＲＩＳＣプロセッサを定義する特徴についての合意は存在しないものの、さまざまなＲＩＳＣアーキテクチャ間には共通した特徴がある。すなわち、（１）ほとんどの命令が１サイクル内に実行される。（２）別個の簡単なロード／ストア命令がしばしば２サイクル内に実行される。（３）命令のデコーディングが典型的にはマイクロコーディングされるのではなくハードワイヤードで構成され、実行時間が速くなっている。（４）ほとんどの命令は固定フォーマットを有しそのため命令のデコーディングが簡素になっている。（５）命令セットが小さくアドレス指定モードが少ない。（６）データ経路が高度にパイプライン化されており、処理の平衡性の程度が高い。（７）より低速のシステムＲＡＭへのおよびそこからの過剰なデータ転送を回避するための大きな高速レジスタの組（レジスタファイルとしても知られる）。
【０００４】
半導体製造業者数社がマイクロコントローラを製造している。たとえばテキサス・インスツルメンツ社は８ビットマイクロコントローラであるＴＭＳ３７０Ｃｘ１ｘシリーズを提供する。これらのマイクロコントローラはＲＩＳＣアーキテクチャを用いていないが、ＲＡＭとしてもまたは汎用レジスタの組としても使用できるＲＡＭ（１２８バイトまたは２５６バイト）を設けている。モトローラ社は、テキサス・インスツルメンツ社の装置に似た２目的ＲＡＭを用いる８ビットマイクロコントローラのＭＣ６８０５ファミリーを提供する。マイクロチップ・テクノロジー社はマイクロコントローラ、ＰＩＣ１６Ｃ５Ｘファミリーを提供する。これらのマイクロコントローラは、データとプログラム命令とが別個のメモリおよびバスを有する、２つのバスのあるハーバードアーキテクチャを使用する。ＰＩＣ１６Ｃ５ＸはシステムＲＡＭと共有されるレジスタファイルを用いる。ＰＩＣ１６Ｃ５Ｘは１レベル命令パイプライン方式を使用する。つまり、１つの命令が実行されている間に、次の命令がプログラムメモリからプリフェッチされる。ＲＡＭはレジスタとしては２倍なので、内部レジスタの組は現実にはない。すべてのメモリはスタティックＲＡＭとして存在するため、レジスタ動作に関係する性能が低下する。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述のように、設計サイクルが速いことは、マイクロコントローラの設計において重要な関心事である。マイクロコントローラでの設計においてソフトウェアが果たす役割が重要であることは疑いがない。したがって、マイクロコントローラ設計の利便性は、プログラマーとハードウェア設計者との仕様のインターフェイスすなわちマイクロコントローラの命令セットに直接関係する。いかなる計算可能な機能も合理的な量のプログラムスペース内で実現できなければならないという点で、命令セットは完全でなければならない。命令セットは頻繁に使用される機能が比較的少数の命令で実現可能でなければならないという点で効率的でなければならない。
【０００６】
したがって、アプリケーションソフトウェアの開発者に完全かつ効率的な命令セットを提供するマイクロコントローラ設計を提供することが望ましい。
【課題を解決するための手段】
【０００７】
この発明は８ビットＲＩＳＣアーキテクチャを有するコントローラである。８ビットのデータバスが、ＲＡＭメモリストア、レジスタファイル、汎用８ビット算術論理演算装置（ＡＬＵ）および状態レジスタの間のデータ経路を提供する。マイクロコントローラはハーバードアーキテクチャを実現し、ＲＡＭストアとは別個にプログラムメモリストアを、そして、データバスとは別個にプログラムデータバスを備える。
【０００８】
レジスタファイルは複数の８ビットレジスタを含む。レジスタファイル中のレジスタのいくつかは論理１６ビットレジスタを提供するよう組合せることができる。論理１６ビットレジスタは効率的なアドレス計算を行ない、データメモリおよびプログラムメモリに対する間接的アドレスポインタとして使用される。データメモリ用であるにせよまたはプログラムメモリ用であるにせよ、１６ビットのアドレススペースはプログラムアドレススペースおよびデータアドレススペースの両方を増加させることによって、マイクロコントローラの柔軟性および利便性を著しく向上させる。この発明の好ましい実施例においては、レジスタファイルは３つの個別の論理１６ビットレジスタとしてアクセスされ得る（すなわち読出／書込され得る）３対の８ビットレジスタを備える。
【０００９】
さらに１６ビットアドレス指定の利点を高めるため、レジスタファイル専用の特別な第２の算術論理演算装置が利用される。第２のＡＬＵは１６ビットの加算器を含み、論理１６ビットレジスタに対し１６ビット算術演算を行なう。第２のＡＬＵは１６ビットの結果を論理１６ビットレジスタにストアし直すことができる。さらに、この１６ビットの結果はアドレスとして機能し得る。したがって、汎用８ビットＡＬＵの負荷を増やしたりそれによって装置の動作速度を減じたりすることなく、第２のＡＬＵの存在によって、効率的な１６ビットアドレス計算が行なわれる。
【００１０】
レジスタファイル内に設けられる論理１６ビットレジスタのさらなる拡張は、８ビットＲＡＭページングレジスタの使用である。ＲＡＭページングレジスタの８ビットは、論理１６ビットレジスタの１６ビットと論理的に連結されており、論理２４ビットアドレスを提供する。この特徴によって、基本的には８ビットの設計である基礎アーキテクチャを持つマイクロコントローラにかつてないアドレス指定範囲が与えられる。特に、ページングレジスタはメモリを６４Ｋ（６４＊１０２４）バイトのページ、２５６ページのＲＡＭとして形成し、６４Ｋページ各々がページングレジスタにより参照される。この発明の好ましい実施例においては、レジスタファイルにより設けられる３つの論理１６ビットレジスタ各々に対し１つずつ３つのページングレジスタがある。
【００１１】
この発明のレジスタファイルは、レジスタファイルに含まれる論理の伝搬遅延に等しい遅延を持つレジスタのアクセスを特徴とする。このような組合せ遅延はクロック周期よりもはるかに短いため、レジスタアクセスは１クロックサイクル内に余裕を持って行われる。この発明はさらに、すべての演算各々を単一のクロック周期内に行なうことができる汎用算術論理演算装置（ＡＬＵ）を特徴とする。この発明は、したがって、実質的にすべてのＡＬＵ演算を単一クロックサイクル内に行なうことができる。
【００１２】
さらにこの発明により、レジスタファイル内のレジスタは、ＲＡＭのアドレススペースの一部分を占める。この特徴によって、通常ＲＡＭアクセスと関連付けられる従来のアドレス指定モードが可能となり、レジスタが通常のメモリロケーションであるかのようにレジスタにアクセスすることができる。さらに、このようなメモリロケーションはマイクロコントローラに対して高速メモリに見えるであろう。
【００１３】
レジスタファイルのレジスタ内の任意のビット位置へおよびビット位置からの１ビットのデータの転送をビットストアが可能にする。好ましい実施例においては、ビットストアは状態レジスタ内に位置付けられる。このビット転送特徴により、これ以外の場合には時間のかかる数多くのレジスタシフト動作を行なう必要なくレジスタのビット位置を直接操作することができる。多くのマイクロコントローラ応用例において典型的であるように、１バイトのデータに含まれる個別のビットは他のビットとは独立した意義を有する。従来の技術のマイクロコントローラの命令セットは典型的にはレジスタの左シフトおよび右シフトのためのシフト命令を含む。したがってレジスタの所定のビット位置のビットへのアクセスは、ビットを右または左のいずれかにシフトさせることにより達成される。これは、原データの保存が必要ならばレジスタの内容をセーブすることが必要となる、破壊動作である。加えて、この動作は、時間がかかり、実現するためにはいくつかのプログラム命令が必要である。この発明のビット転送動作は、任意のビット位置にアクセスするための、より時間効率がよく、使うスペースが少ない手段を提供する。
【００１４】
桁上げ比較命令は、レジスタファイルに含まれる８ビットレジスタを１６ビットにエンハンスする。命令セットのこの特徴は、８ビット環境において１６ビットの量の比較を実現するための効率的な方法を提供し、それによってさらにこの発明の８ビットマイクロコントローラの計算能力を高める。
【図面の簡単な説明】
【００１５】
【図１】図１は、この発明のマイクロコントローラの概略レイアウト図である。
【図２】図２は、図１に示すレジスタファイルの内部の図である。
【図３】図３は、図２に示すレジスタファイル内のレジスタの構成を示す図である。
【図４】図４は、図３に示すレジスタ書込可能化回路の詳細な図である。
【図５Ａ】図５Ａは、図４において使用されるＯＲゲート構造を示す図である。
【図５Ｂ】図５Ｂは、図４において使用されるＯＲゲート構造を示す図である。
【図６】図６は、図１に示す状態レジスタの内部構成を示す図である。
【図７】図７は、図１に示す汎用ＡＬＵの内部構成を示す図である。
【図８Ａ】図８Ａは、図７の汎用ＡＬＵ内に含まれる２つのＡＬＵサブユニットを示す図である。
【図８Ｂ】図８Ｂは、図７の汎用ＡＬＵ内に含まれる２つのＡＬＵサブユニットを示す図である。
【図９】図９はプログラムカウンタを示す図である。
【図１０】図１０は、この発明によるページングレジスタを使用しての２４ビット論理アドレスの形成を示す図である。
【図１１】図１１は、ウォッチドッグ・タイマ回路を示す図である。
【図１２】図１２は、図１０に示すページングレジスタを組入れた図１のマイクロコントローラの図である。
【図１３】図１３は、Ｎ個の入力を持つ可能化ＡＮＤゲートの図である。
【発明を実施するための形態】
【００１６】
図１を参照し、この発明のマイクロコントローラ１０が８ビットデータバス１２構造のまわりに設計される。データバスは、マイクロコントローラに含まれるさまざまな構成要素に対しデータ経路を提供する。オンボードＲＡＭは汎用データストアとして役立つ。ＲＡＭとは別個の８ビットレジスタファイル（REGISTER FILE）２０がマイクロコントローラ用の高速８ビットメモリストアの組を提供する。
【００１７】
レジスタ内にストアされるデータに対して算術計算を行なうために、汎用算術論理演算装置ＡＬＵ−１ ２２がレジスタファイルに結合される。ＡＬＵ−１の出力は８ビットデータバス１２および状態レジスタ（STATUS REGISTER）２４の両方に結合される。状態レジスタに含まれるさまざまな状態ビットは、ＡＬＵ−１の結果に応じてセットされる。
【００１８】
以下に説明するように、状態レジスタ２４内に含まれるビットは、割込許可フラグ、ビット転送フラグ、ハーフ・キャリーフラグ、２の補数のオーバフローフラグ、負フラグ、負フラグと２の補数のフラグとの排他的論理和に等しい符号ビット、ゼロフラグ、およびキャリーフラグを含む。状態レジスタは、状態ビットへの読出／書込アクセスを可能にするよう、データバス１２に結合される。データバス１２に結合される付加的な構成要素は、サブルーチンの呼出／リターンおよび割込処理のために使用されるスタックポインタ（STACK POINTER）、タイマ、割込回路、タイミングおよび制御回路、ＥＥＰＲＯＭ、およびＵＡＲＴを含む。ポートドライバ（PORT DRIVERS）により駆動されるＩ／Ｏデータレジスタ（I/O DATA REGISTERS）は、マイクロコントローラに対するＩ／Ｏ経路１９を提供する。
【００１９】
直接アドレスバス１６は、プログラムの実行中にＲＡＭロケーションおよびレジスタファイルへの直接アクセスを提供する。間接アドレスバス１４は間接アドレス指定を行なう。間接アドレスバス１４はレジスタファイルからアドレスを受取るための手段、すなわち、アドレスをＲＡＭまたはプログラムカウンタ（PROGRAM COUNTER）２８に伝送するためレジスタファイルを間接アドレスバス１４に結合するバスインターフェイス１４'を含む。
【００２０】
マイクロコントローラ１０の命令実行構成要素は、プログラムメモリ（PROGRAM MEMORY）に結合されるプログラムカウンタ２８を含む。好ましい実施例においては、プログラムメモリは、プログラマブル・フラッシュ・メモリである。プログラムカウンタにより指定されたプログラム命令はプログラムメモリからフェッチされ命令レジスタ（INSTRUCTION REGISTER）に与えられる。命令レジスタから、プログラム命令が命令デコーダ（INSTRUCTION DECODER）によりデコードされさまざまな制御信号が発生される。制御信号は、制御ライン（CONTROL LINE）によってマイクロコントローラ１０の他の構成要素へ運ばれ、デコードされたプログラム命令によって動作が行なわれる。命令実行構成要素を結合するバスは集合的にプログラムバスと呼ばれる。データストアとは別個のプログラムメモリストアの配置およびデータバス１２とは別個のプログラムバスの使用は、一般にハーバードアーキテクチャと呼ばれる。
【００２１】
前述のように、レジスタファイルは複数の８ビットレジスタからなる。この発明の好ましい実施例においては、３２個の８ビットレジスタがある。しかし、レジスタファイル内のレジスタがより多くてもまたはより少なくてもマイクロコントローラが同様に良好に動作するであろうということが指摘される。汎用算術論理演算装置ＡＬＵ−１は８ビットの演算子であり、レジスタファイルから選択されたレジスタの間で８ビットの算術演算を行なう。ＡＬＵ−１の出力はレジスタファイル内のレジスタへとデータバス１２を介して送り返され得る。以下にさらに詳細に説明するように、８ビットレジスタのいくつかは対にして組合されることができ、それによって論理１６ビットレジスタが提供される。好ましい実施例においては、図１に示すように、３対の８ビットレジスタが３つの論理１６ビットレジスタＸ、Ｙ、Ｚを提供する。
【００２２】
図２を参照し、この発明のレジスタファイルは、３２個の８ビットレジスタＲ０からＲ３１を備えるレジスタ回路１００を含む。レジスタファイルは、３つの出力Ａ、Ｂ、Ｃと、３つの入力Ｄ＿ＢＵＳ、Ｄ＿ＡＬＵ２Ｈ、Ｄ＿ＡＬＵ２Ｌとを含む。以下に説明するように、レジスタ回路１００は最後の６つのレジスタＲ２６からＲ３１を３対の論理１６ビットレジスタＲ２７／Ｒ２６（Ｘ）、Ｒ２９／Ｒ２８（Ｙ）、Ｒ３１／Ｒ３０（Ｚ）として準備できる。２つの１６ラインデータバス１０２および１０４からなる共通バスインターフェイスは、それぞれ１６ビットレジスタに対しデータ入力バスおよびデータ出力バスを提供する。
【００２３】
データ出力バス１０４は、Ｂ出力およびＡ出力を含み、Ｂ出力は１６ビット値の上位バイトを提供し、Ａ出力は１６ビット値の下位バイトを提供する。データ入力バス１０２はレジスタファイルへの、Ｄ＿ＡＬＵ２Ｌ（下位バイト）入力およびＤ＿ＡＬＵ２Ｈ（上位バイト）入力に分かれる。
【００２４】
レジスタファイルの備える１６ビットレジスタはＲＡＭおよびプログラムスペースのアドレス指定のための間接アドレスレジスタポインタとして使用される。メモリアクセスを容易にするため、アドレス計算用にポストインクリメントおよびプリデクリメントなどの所定の１６ビット算術演算が行なわれる。１６ビットレジスタに対して１６ビットの算術を行なうためにＡＬＵ−１を使用することも可能であるが、このような動作はＡＬＵ−１が８ビット設計であるためかなり非効率的であろう。
【００２５】
したがって、図２に示すレジスタファイルは、論理１６ビットレジスタにかかわる１６ビット計算を容易にするためレジスタファイルに専用される第２の算術論理演算装置ＡＬＵ−２を含む。算術論理演算装置ＡＬＵ−２は１６ビット設計であり、間接アドレスポインタに典型的に必要とされる特定の演算を行なうようカストマイズされる。ＡＬＵ−２は、レジスタファイルのデータ出力バス１０４により与えられる第１の入力を有する。ＡＬＵ−２はセレクタ１１０により与えられる第２の入力を有する。セレクタ１１０は、３つの選択肢の中から１つの数値を選択する。すなわち、数値−１、数値＋１および定数Ｋ＿ＩＮである。ＡＬＵ−２の出力はデータ入力バス１０２を通じてＸ、Ｙ、Ｚレジスタへと送り返され、レジスタの内容の更新が可能にされる。ｍｕｘ１１４はレジスタファイルのバスインターフェイス１４'に結合される。ｍｕｘ１１４の１入力はＡＬＵ−２の出力に結合され、一方、ｍｕｘの第２の入力はデータ出力バス１０４に結合される。この構成によって、ｍｕｘ１１４は、ＡＬＵ−２またはレジスタ回路１００のいずれかから選択的にデータを出力することができる。
【００２６】
以下に挙げる制御信号は、上に説明したレジスタファイルの特徴である動作に関係する。これらの信号は、Ｖ＿ＳＥＬ、ＡＬＵ２＿ＯＰ、およびＡＤＤＲ＿ＳＥＬを含む。これらの信号は、命令デコーダ（INSTRUCTION DECODER）から発するさまざまな制御ライン（CONTROL LINE）により運ばれる。これらの制御信号に関してのレジスタファイルの動作を、この発明のマイクロコントローラのプログラム命令に関して以下に説明する。
【００２７】
図２に示すレジスタ回路１００の内部構成を図３の論理図に示す。この発明の一実施例において、３２個のレジスタＲ０〜Ｒ３１が設けられ、その各々が８ビットの出力ライン１２１の組と８ビットの入力ライン１２３の組とを有する。実際に設けられるレジスタの数はこの発明の本質部分ではない。
【００２８】
各レジスタは、図３の各フリップフロップ内の「ｘ８」の参照によって示されるように、８つのＤ型フリップフロップのバンクを含む。レジスタの出力ライン１２１は、レジスタに含まれる８つのフリップフロップの各々の出力Ｑを含む。同様に、レジスタの入力ライン１２３は、レジスタに含まれる８つのフリップフロップの各々の入力Ｄを含む。
【００２９】
図３に示すように、偶数番号のレジスタＲ０、Ｒ２、・・・Ｒ３０は、８ビット４：１ｍｕｘ１３０の出力に結合される共通入力を有する。同様の態様で、奇数番号のレジスタＲ１、Ｒ３、・・・Ｒ３１は、偶数番号のレジスタからは分離され８ビット４：１ｍｕｘ１３２の出力に結合される共通入力を有する。４：１ｍｕｘ１３０は、４つの８ビット入力Ｄ＿ＢＵＳ、Ｋ＿ＩＮ、Ｄ＿ＢＵＳ［ｎ］、およびＤ＿ＡＬＵ２Ｌのうち１つを選択し、偶数番号のレジスタへの入力とする。４：１ｍｕｘ１３２は、４つの８ビット入力のうち１つを選択し、奇数番号のレジスタへの入力とする。セレクタＤ＿ＳＥＬは、両方のｍｕｘに結合され、ｍｕｘ１３０および１３２の各々の第１、第２、第３または第４の入力のいずれかを選択する。ｍｕｘ１３０の第１の入力Ｄ＿ＢＵＳは、８ビットデータバスからとられる。ｍｕｘ１３０の第２の入力Ｋ＿ＩＮは、この発明のマイクロコントローラの命令セットの説明に関連して以下に説明するように、所定の命令のオペランドから導出される８ビットの定数である。ｍｕｘ１３０の第４の入力Ｄ＿ＡＬＵ２Ｌは、ＡＬＵ−２（図２）の１６ビット出力の下位バイトである。ｍｕｘ１３０へのＤ＿ＢＵＳ［ｎ］入力は、データバス１２からのビットラインの１つを指す。このビットラインｎは、ｍｕｘ１３０への第３の８ビット入力として８回複製される。Ｄ＿ＢＵＳ［ｎ］入力は、以下に説明するＢＬＤ命令とともに使用される。
【００３０】
ｍｕｘ１３０の出力は、ｍｕｘ１３２の第１の入力、第２の入力および第３の入力として複製される。ｍｕｘ１３２の第４の入力Ｄ＿ＡＬＵ２Ｈは、ＡＬＵ−２の１６ビット出力の上位バイトである。したがって、Ｄ＿ＳＥＬがｍｕｘの第１の入力、第２の入力または第３の入力を選択するとき、偶数番号のレジスタおよび奇数番号のレジスタには同じ入力、すなわち、Ｄ＿ＢＵＳ、Ｋ＿ＩＮ、またはＤ＿ＢＵＳ［ｎ］が与えられる。Ｄ＿ＳＥＬが第４のｍｕｘ入力を選択するとき、偶数番号のレジスタの入力にはＤ＿ＡＬＵ２Ｌが与えられ、奇数番号のレジスタの入力はＤ＿ＡＬＵ２Ｈ入力が与えられる。Ｄ＿ＡＬＵ２Ｌ入力およびＤ＿ＡＬＵ２Ｈ入力の意義は、Ｘレジスタ、ＹレジスタおよびＺレジスタに関する説明において明らかとなるであろう。
【００３１】
各レジスタＲ０〜Ｒ３１に対応する８つのフリップフロップのバンクには、Ｄリードに入力を与えフリップフロップのクロックラインＣＫをアサートすることによって、書込が行なわれる。この発明のレジスタアーキテクチャの利点は、レジスタへの書込の柔軟性である。動作モードに依存して、１６ビットデータを、１ワードのデータとしてレジスタ対に書込むこともでき、８ビットデータを１バイトのデータとしてレジスタに書込むこともでき、または、レジスタの特定のビットを１ビットのデータとして書込むこともできよう。この柔軟性は、正しいレジスタおよびビットが書込まれるよう、適切なＣＫ信号をアサートするセレクタ制御回路１３４により与えられる。Ｒ＿ＳＥＬ制御ラインおよびＷＥ＿Ｒ制御ラインは協働して選択されたレジスタに対応する８つのフリッブフロップに書込を行なう。ＷＥ＿ＸＨ、ＷＥ＿ＸＬ、ＷＥ＿ＹＨ、ＷＥ＿ＹＬ、ＷＥ＿ＺＨおよびＷＥ＿ＺＬの制御ラインは、１６ビットのＸ、ＹおよびＺレジスタへの書込を可能化する。Ｒ＿ＳＥＬ、ＢＩＴ＿ＳＥＬおよびＷＥ＿ＢＩＴ制御ラインは、協働して、選択されたレジスタの選択されたビットへビットを書込む。
【００３２】
レジスタの内容は、ｍｕｘ１２０、１２２および１２４を通じて与えられ、これらのｍｕｘの出力が、それぞれ図２に示すＡ、ＢおよびＣ出力である。これらの出力ｍｕｘは各々、８ビット３２：１ｍｕｘであり、３２個の８ビット入力のうち１つを選択する。３２個のレジスタの各々の出力は、ｍｕｘ１２０、１２２および１２４の各々の対応する入力に結合される。制御ラインＲ＿ＯＵＴＡ、Ｒ＿ＯＵＴＢ、Ｒ＿ＯＵＴＣはｍｕｘを動作させ、所望のレジスタの内容を出力させる。
【００３３】
ｍｕｘ１２０の８ビット出力は、８：１ｍｕｘ１３６へ与えられ、８：１ｍｕｘ１３６においてＢＩＴ＿ＳＥＬ制御ラインが８ビットのうち１つを選択するため役立つ。ｍｕｘ１３６の出力は、選択されたビットがクリアされているかまたはセットされているかをテストするようＢＴＳＴ＿ＣＬＲ制御ラインおよびＢＴＳＴ＿ＳＥＴ制御ラインにより動作されるビットテスト回路１３８に結合される。ビットテスト回路の出力がＢＲ＿ＳＫＰ制御ラインを駆動する。
【００３４】
この発明により、マイクロコントローラは、説明した８ビットレジスタに加えて、論理１６ビットレジスタを備える。これは、レジスタファイル内のレジスタの対を取出しそれらを単一のレジスタとして取扱うことによって達成される。この態様で、３つの１６ビットレジスタＸ、Ｙ、Ｚが提供される。Ｘレジスタは、レジスタ対Ｒ２７／Ｒ２６からなり、Ｙレジスタはレジスタ対Ｒ２９／Ｒ２８からなり、ＺレジスタはＲ３１／Ｒ３０レジスタ対からなる。
【００３５】
次に図３のセレクタ制御回路１３４をさらに詳細に示す図４を参照する。デコーダユニット１４０は、デコーディングＲ＿ＳＥＬに応答して３２個の出力の任意の１つをアサートする１：３２デコーダである。デコーダの出力ライン各々は、レジスタに対応する。出力は、２つの可能化ＡＮＤゲート１４２および１４４に与えられる。図１３に、１ビット可能化入力Ａ、Ｎビット入力ＢおよびＮビット出力を有する可能化ＡＮＤゲート５０の構造の詳細を示す。図１３の拡大詳細図は、このようなゲートがＮ個の２入力ＡＮＤゲートを含むことを示す。Ｎ個のＡＮＤゲートの各々の第１の入力は、可能化入力Ａを受取り、ＡＮＤゲートの第２の入力はＢ入力のＮビットのうち１つを受取る。したがって、可能化入力Ａがアサートされているならば、ゲート５０はＢ入力を出力へと通らせる。可能化入力Ａがアサートされていない場合は、可能化ＡＮＤゲート５０のすべてのＮ個の出力がＬＯＷである。再び図４を参照し、可能化ゲート１４２は、ＷＥ＿Ｒにより可能化され、可能化ゲート１４４はＷＥ＿ＢＩＴにより可能化される。
【００３６】
さらに、可能化ゲート１４２の３２出力の各々が、合成ＯＲゲート１５０〜１８１の入力に結合される。可能化ゲート１４４の３２出力の各々が１：８ｍｕｘＭ０〜Ｍ３１に結合される。各ｍｕｘＭ０〜Ｍ３１の８出力は、合成ＯＲゲート１５０〜１８１の他入力に結合される。各合成ＯＲゲートは、レジスタＲ０〜Ｒ３１に関連付けられる。図５Ａは、合成ＯＲゲート１５０の構成を示す。合成ＯＲゲート１５０は、８つの別個の２入力ＯＲゲート１５０Ａ〜１５０Ｈからなる。１ビット入力ライン１９０が、可能化ゲート１４２の出力から始まりＯＲゲート１５０Ａ〜１５０Ｈの各々の第１の入力に結合される。８ビット入力ライン１９１はｍｕｘＭ０の出力から始まる。入力ライン１９１の各々は、ＯＲゲートの第２の入力に結合される。図からわかるように、ＯＲゲートは各々、レジスタＲ０のフリップフロップの１つのＣＫライン（ＣＫＯ〜ＣＫ７）に結合される。この構成が、合成ＯＲゲート１５０〜１７５に適用される。
【００３７】
再び図４を参照し、いくつかの合成ＯＲゲート、すなわちゲート１７６〜１８１が第３の入力を有する。この第３の入力は、Ｘ、Ｙ、Ｚレジスタの書込に関連するＷＥ＿ＸＬ、ＷＥ＿ＸＨ、ＷＥ＿ＹＬ、ＷＥ＿ＹＨ、ＷＥ＿ＺＬおよびＷＥ＿ＺＨ制御ラインの１つからくる。合成ＯＲゲート１７６の詳細を示す図５Ｂからわかるように、付加的な１ビット制御ライン１９４が、ＯＲゲート１７６Ａ〜１７６Ｈの各々の第３の入力に結合される。この構成が合成ＯＲゲート１７６〜１８１に適用される。
【００３８】
上述のように、Ｒ＿ＳＥＬ制御ラインおよびＷＥ＿Ｒ制御ラインは協働して、８ビットデータを選択されるレジスタに書込む。これは、データをレジスタに対応するフリップフロップへクロックすることによって達成される。たとえば、データをレジスタＲ０に書込む場合を考える。５ビット制御ラインＲ＿ＳＥＬが選択レジスタＲＯにセットされる。デコーダ１４０がラインをデコードし、それによって、可能化ゲート１４２を通じてＯＲゲート１５０の入力ライン１９０へ結合されるレジスタＲＯに対応する出力ラインをアサートする。図５Ａに示すように、入力ライン１９０はレジスタＲＯのフリップフロップすべてを同時にクロックし、それによって、フリップフロップ（図３）のＤ入力に現われるデータを入力する。
【００３９】
Ｒ＿ＳＥＬ、ＷＥ＿ＢＩＴおよびＢＩＴ＿ＳＥＬ制御ラインを説明する前に、状態レジスタ２４の説明について図６を参照する。状態レジスタは、８つのフリップフロップを含み、フリップフロップ各々がこの発明において使用される状態ビットの各々に対応する。すなわち、割込許可フラグＩ、ビット転送フラグＴ、ハーフ・キャリーフラグＨ、２の補数のオーバフローフラグＶ、負フラグＮ、負フラグと２の補数のフラグとの排他的論理和に等しい符号ビットＳ、ゼロフラグＺおよびキャリーフラグＣである。Ｉフリップフロップへの入力は直接Ｆ＿ＳＥＴ制御ラインに結合される。Ｔフリップフロップへの入力は、ＯＲゲートを通じてＦ＿ＳＥＴ制御ラインおよびＡＮＤゲート２２８の出力に結合される。残りのフリップフロップへの入力は、それぞれのＯＲゲートを通じてＦ＿ＳＥＴ制御ラインおよび可能化ＡＮＤゲート２３０（図１３）の８出力に結合される。
【００４０】
８：１ｍｕｘ２０２は、状態レジスタフラグすべての出力を受け、Ｆ＿ＯＵＴ制御ラインの設定によってフラグのうち選択される１つを出力する。ｍｕｘ２０２の出力は、ビットテスト手段２０８へ与えられ、ＢＲ＿ＳＫＰ制御信号を生成する。ｍｕｘ２０２の出力はまた、ＡＮＤゲート２１８にも与えられ、ＡＮＤゲートの出力はデータバスＤ＿ＢＵＳ［ｎ］のビットＮに結合される。さらに、Ｈ、Ｓ、Ｖ、Ｎ、ＺおよびＣフラグが以下に説明する汎用ＡＬＵ２２へ与えられる。
【００４１】
各フリップフロップは、対応するフリップフロップを単にリセットするだけで特定のフラグをクリアすることを実質的に可能とするリセットＲを含む。各リセットは、可能化ＡＮＤゲート２２４の８出力の１つに結合される。可能化ＡＮＤゲート２２４は、Ｔ＿ＳＥＬ制御ラインにより可能化される。
【００４２】
Ｉフリップフロップのクロック入力は、可能化ＡＮＤゲート２２６の出力に結合される。Ｔフリップフロップのクロック入力は、ＯＲゲートを通じて可能化ゲート２２６およびＴ＿ＳＥＬ制御ラインに結合される。残りのフリップフロップは、それぞれのＯＲゲートを通じて可能化ゲート２２６およびＦ＿ＳＥＴＡＬＵ制御ラインに結合される。
【００４３】
ｍｕｘ２１０は、８ビットバスから入力Ｄ＿ＢＵＳを受ける。ＢＩＴ＿ＳＥＬ制御ラインは、８ビットのうち１つをＡＮＤゲート２２８に出力し、ＡＮＤゲートの出力はＴフリップフロップへ与えられる。Ｔ＿ＳＥＬ制御ラインは、ＡＮＤゲート２２８への可能化入力として役立つ。
【００４４】
可能化ＡＮＤゲート２３０は汎用ＡＬＵ２２から入力を受け、Ｆ＿ＳＥＴＡＬＵ制御ラインにより可能化される。この要素は、ＡＬＵの動作の間にＡＬＵから受けた状態フラグを更新するため役立つ。これについてはＡＬＵ２２の説明に関連しさらに説明する。
【００４５】
デコーダ２０４、２０６は各々、Ｆ＿ＳＥＬ制御ラインをデコードし、その８出力のうち１つをアサートし、この出力がそれぞれ可能化ＡＮＤゲート２２４および２２６に与えられる。Ｆ＿ＣＬＲ制御ラインはゲート２２４を可能化する。Ｆ＿ＳＥＴ制御ラインはゲート２２６を可能化する。
【００４６】
ビットテスト手段２０８は、ＯＲゲート２１６へ出力を与える１対のＡＮＤゲート２１２および２１４を含む。ゲート２１４は、ｍｕｘ２０２に結合される反転入力を有する。ゲート２１４への他入力は、ＦＴＳＴ＿ＣＬＲ制御ラインに結合される。ゲート２１２への入力はｍｕｘ２０２の出力とＦＴＳＴ＿ＳＥＴ制御ラインとである。
【００４７】
ｍｕｘ２０２の出力はまた、Ｔ＿ＯＵＴ制御ラインにより可能化されるＡＮＤゲート２１８に結合される。ＡＮＤゲート２１８の出力は、８ビットデータバスのビットラインｎに結合されるよう図示される。
【００４８】
この発明の８ビットマイクロコントローラの他の特徴について説明する。レジスタの任意のビット位置にロードまたはストアを行なうための従来の技術においては、レジスタシフト動作および／またはレジスタマスキング動作が必要となり、コードの効率が下がりコードサイズが増加することを説明した。さらに、これは破壊動作であって、もし元のデータの保存が必要であればレジスタの内容をセーブせねばならない。
【００４９】
図３〜６に示すＲ＿ＳＥＬ、ＷＥ＿ＢＩＴおよびＢＩＴ＿ＳＥＬ制御ラインを考える。これらの制御ラインはレジスタ回路１００（図３）を動作させ、選択されるレジスタの特定のビット位置に単一のビットを書込ませる。書込まれるビットは、状態レジスタ２４から獲得され、Ｄ＿ＢＵＳ［ｎ］を通じて与えられる。この動作は、ｍｕｘ２０２のＴフリップフロップの出力を選択するようＦ＿ＯＵＴ（図６）をセットし、データバスへの出力を駆動するようＡＮＤゲート２１８を可能化するためＴ＿ＯＵＴをアサートすることによって達成される。さらに、ｍｕｘ１３０のＤ＿ＢＵＳ［ｎ］入力を選択するＤ＿ＳＥＬによって、ｍｕｘ１３０およびｍｕｘ１３２の８つの出力ラインの各々においてこのビットが利用可能となる。このため、書込まれるビットがすべてのレジスタのすべてのフリップフロップの入力に与えられる（図４）。たとえば、レジスタＲ２６のビット位置２へビットが書込まれると考える。レジスタＲ２６を選択するようセットされたＲ＿ＳＥＬ制御ラインがデコーダ１４０（図４）によりデコードされ、対応する出力ラインがアサートされる。ＷＥ＿ＢＩＴ制御ラインが、レジスタＲ２６に対応する１：８ｍｕｘ、すなわちｍｕｘＭ２６の入力へデコードされた出力が通ることができるよう、アサートされる。ビット位置２を選択するようセットされるＢＩＴ＿ＳＥＬ制御ラインが、ｍｕｘＭ２６も含む各ｍｕｘを動作させ、その１ビット入力をその８個の出力のうち第２の出力へとゲートで制御して通す。ｍｕｘＭ２６の次に、その８つの出力ラインは、図５Ｂに示す合成ＯＲゲート１７６の入力１９３として役立つ。入力１９３の各ライン［０−７］は、ＯＲゲート１７６Ａ〜１７６Ｈから特定のフリップフロップへと通される。しかし、１つのライン、この場合はライン［１］のみがアサートされるので、選択されるレジスタのフリップフロップのうち１つだけがビットを受けるようクロックされる。
【００５０】
次に、図７に示すこの発明の汎用ＡＬＵ２２について説明する。ＡＬＵ２２は、各々が特定の演算を行なうことができる、複数の演算サブユニットＯＰ１〜ＯＰｎを含む。汎用ＡＬＵにより行なわれる典型的な演算は、加算、論理演算およびシフト演算を含み、各々別個のサブユニットにより行なわれる。ＡＬＵへの入力、すなわちＡ、Ｂ、Ｋ＿ＩＮおよび状態レジスタ２４からのフラグは、サブユニットの各々に与えられる。サブユニットは、それらに対応する演算を同時に行ない、８ビットの結果２２Ｃおよび６ビットの状態結果２２Ｄを生成する。このパラレルアーキテクチャにより、シリアルでの実現に比べ実行時間が速くなり、どのようなＡＬＵ演算でも単一のクロックサイクル内で行なうことができる。
【００５１】
次に、サブユニットの結果２２Ｃがセレクタ２２Ａに与えられる。セレクタは、演算サブユニットの１つの結果をデータバス１２へと出力するよう、ＡＬＵ１＿ＯＰにより制御される。状態結果２２Ｄは同様の態様で処理され、各々ＡＬＵ１＿ＯＰにより制御されるセレクタ２２Ｂへ与えられ、それによって、状態レジスタ２４は、選択される演算に対応する状態結果を受ける。
【００５２】
ＡＬＵ２２はまた、ＸＯＲゲート２３および９入力ＡＮＤゲート２４を含む。ＸＯＲは、Ａ入力およびＢ入力の８ビットの各々の間でビットごとにＸＯＲ演算を行なう。ＸＯＲ演算の８つの結果は、ＡＮＤゲートの８つの反転入力に与えられる。Ａ＝Ｂのときは、ＸＯＲ演算の８つの結果すべてが論理「０」となるであろう。この場合、ＣＰＳＥ制御ラインがアサートされるとき、ＡＮＤゲートが論理「１」を出力することとなりＢＲ＿ＳＫＰ制御ラインがアサートされる。
【００５３】
上述のように、サブユニットＯＰｎは各々、特定の算術または論理演算を行ない、Ａ、Ｂおよび／またはＫ＿ＩＮ入力に演算を行ない、結果２２Ｃを与え、適切な状態フラグを更新する。図８Ａおよび図８Ｂは２つの典型的な演算サブユニットを示す。図８Ａは、Ａ入力とＫ＿ＩＮを通じて与えられる即時定数との論理ＡＮＤを実現する。図８ＢはＡ入力の論理左シフトを実現する。
【００５４】
プログラムのシーケンス化の説明のため次に図９を参照する。命令が、プログラムメモリ２５からフェッチされ、命令レジスタ２１にロードされる。命令デコード２３は、フェッチされた命令をデコードし、命令を実行するためマイクロコントローラの他の部分へ制御ラインによって送られる制御信号を生成するための論理を含む。命令デコーダは、サブルーチン命令および割込に応答してスタックポインタをインクリメントまたはデクリメントするためＳＰ＿ＩＮＣおよびＳＰ＿ＤＥＣをアサートする。
【００５５】
同時に、命令デコーダ２３は、また、次の命令をフェッチするためプログラムカウンタ２８を「インクリメント」するための信号を生成する。これらの信号は、＝ｑ、−ｑ、＋ｑ、＋３、＋２および＋１を含む。「＝ｑ」は、絶対アドレスｑへの分岐を指定する命令のために使用される。「＋ｑ」および「−ｑ」信号は、ｑの量の前向きおよび後向きの相対的分岐を指定する命令のために使用される。いずれの場合にも、量ｑが命令内に含まれる。「＋３」信号および「＋２」信号はスキップ命令のために使用されるが、スキップするメモリロケーションの数は、スキップされている命令のサイズに依存する。「＋１」信号は単にプログラムカウンタを次の命令にインクリメントする。さらに、プログラムカウンタは、次の命令のアドレスのソースとしてＸ、ＹまたはＺレジスタの１つを利用する命令のために、レジスタファイル２０から入力を受ける。プログラムカウンタはまた、次の命令のアドレスの他のソースとしてＲＡＭ２７からの入力を受け、ＲＡＭ内のロケーションは、Ｘ、ＹおよびＺレジスタの１つまたはスタックポインタ２６により指定される。
【００５６】
典型的には、命令デコーダは「＋１」信号を発行し、現在の命令が実行されている間に、プログラムカウンタ２８およびプログラムフラッシュにまさに次の命令をプリフェッチさせる。しかし、ＢＲ＿ＳＫＰ制御ラインがアサートされているときは、プログラムカウンタ２８および命令レジスタ２１は、プリフェッチされた命令を廃棄させられ、新しいアドレスを計算し、新しい命令をフェッチし、新しいアドレスは命令に依存する。特定の分岐命令の説明に関連してさらに詳細を説明する。
【００５７】
この発明の８ビットマイクロコントローラの他の特徴は、図１０に示すようなエンハンスされたアドレス指定能力である。レジスタファイルの外部にある付加的な３つのレジスタ、すなわち、ＲＡＭページングレジスタＲＡＭＰＸ、ＲＡＭＰＹ、ＲＡＭＰＺが図示される。ＲＡＭページングレジスタは、先行技術の８ビットマイクロコントローラと比較してアドレス指定範囲を著しく増加させるよう、対応する論理１６ビットレジスタＸ、Ｙ、Ｚと関連して動作する。開示される実施例においては、ＲＡＭページングレジスタは８ビットレジスタである。しかし、これは絶対ではなく、異なったビット長を有するレジスタでもこの発明が容易に機能し得ることは明らかとなるであろう。
【００５８】
図１０を参照し、どのようにアドレスが形成されるかの概略を示す。各ＲＡＭページングレジスタは、対応する１６ビットレジスタと連結される。たとえば、ＲＡＭページングレジスタＲＡＭＰＸの８ビットは、Ｘレジスタの１６ビットと連結され、２４ビットアドレスを形成する。好ましい実施例においては、ＲＡＭＰＸの８ビットが２４ビット論理アドレスの上位ビットＸ［２３・・・１６］として働き、一方、Ｘレジスタの１６ビットが２４ビット論理アドレスの下位ビットＸ［１５・・・０］となる。この編成によって作られるメモリモデルは、６４Ｋバイト（６４＊１０２４）のページの組であり、６４Ｋページは各々８ビットＲＡＭページングレジスタによりアクセスされ、全部で２５６ページである。
【００５９】
次に図１２を参照し、この発明の開示される実施例の文脈におけるＲＡＭページングレジスタの実施例を説明する。ＲＡＭページングレジスタＲＡＭＰＸ、ＲＡＭＰＹ、ＲＡＭＰＺは各々、８ビットデータバス１２に結合され、プログラム実行中８ビットページ参照を受ける。セレクタ１１（たとえば３：１マルチプレクサ）は、ＲＡＭページングレジスタの各々から８ビットを受け、ＲＡＭページングレジスタのうち選択された１つの８ビットをセレクタの出力に転送する。レジスタファイル２０のバスインターフェイス１４'の１６ビットは、セレクタ１１からの８ビットと連結され、２４ビットアドレスを形成し、この２４ビットアドレスは間接アドレスバス１４により搬送される。
【００６０】
この発明の拡張された２４ビットアドレス指定により、２４ビットアドレスはＲＡＭの１６Ｍ（１６＊１０２４＊１０２４）をアドレス指定することができるので、外部に設けられたＲＡＭ（図示せず）を使用することが可能である。マイクロコントローラと外部ＲＡＭ（図示せず）との間のデータアクセスのため、外部２４ビットアドレスバス１７と８ビットデータバス１５とが含まれる。この発明により、レジスタファイル２０、Ｉ／Ｏデータレジスタ（Ｉ／Ｏスペース）、オンボードＲＡＭおよび外部ＲＡＭは、同一のデータアドレススペースを占める。レジスタファイルは第１の３２アドレスロケーションを占め、次にＩ／ＯスペースおよびＮ個のアドレスロケーションを占めるオンボードＲＡＭに割り当てられるアドレスがあり、ＮはＲＡＭのサイズである。残りのアドレススペースは外部ＲＡＭによって与えられる。したがって、アドレス範囲００から（Ｎ−１）は、オンボードメモリ（レジスタファイル、Ｉ／Ｏスペース、およびＲＡＭ）のメモリロケーションをマッピングし、一方、残りのアドレス範囲Ｎから（１６Ｍ−１）は、外部ＲＡＭ内のメモリロケーションをマッピングする。たとえば、もしオンボードメモリが全部で６４Ｋバイトであれば、オンボードアドレス範囲は、＄００から＄ＦＦＦＦ（「＄」は１６進表現を意味する）となり、一方、外部ＲＡＭのアドレス範囲は＄１００００から＄ＦＦＦＦＦＦとなる。オンボードメモリの量は、この発明の利便性または操作性に影響することなく変更でき、実際のメモリの量は利用可能なシリコン面積、装置のジオメトリおよびデザインルールなどの設計上の基準に依存することが留意される。
【００６１】
オンボードメモリおよび外部ＲＡＭが、所定のアドレスについて確実に正しくアクセスされるようにするため、内部アドレスバス１４または外部アドレスバス１７のいずれかへアドレスを転送するため第２のセレクタ１３が使用される。好ましい実施例においては、セレクタ１３は、単一のＭＵＸ入力が２つの出力のうち１つへと転送される１：２ｍｕｘである。ここで、単一の入力とは、セレクタ１１から出る２４ビットアドレスラインである。セレクタ１３の１出力はアドレスバス１４に結合され、他出力は外部アドレスバス１７に結合される。オンボードメモリのアドレス範囲内のアドレスを検出すると、セレクタ１３はその入力をアドレスバス１４に転送させられる。２４ビットアドレスのうち下位の１６ビット［１５・・・０］のみがアドレスバス１４に転送される。逆に、外部メモリのアドレス範囲内のアドレスを検出すると、セレクタ１３はその入力を外部アドレスバス１７へ転送する。いくつかの検出方式のうち任意のものを使用することができ、そのいずれも通常の技量を有する設計者の能力の範囲内にある。たとえば、２４ビットアドレスの上位８ビット（ビット［２３・・・０］）を合せて論理和をとり、その結果を使用してセレクタ１３を制御してもよい。もし、論理和演算の結果がＦＡＬＳＥであれば、そのアドレスがオンボードメモリのアドレス範囲内にあることを意味し、その場合、セレクタ１３はその入力を内部アドレスバス１４へ転送せねばならない。もし、論理和演算の結果がＴＲＵＥであれば、アドレスが完全な２４ビットアドレスであることを意味し、その場合、セレクタ１３はその入力を外部アドレスバス１７へ転送せねばならない。
【００６２】
この発明の８ビットマイクロコントローラの特徴に関するハードウェアの詳細を説明したが、次にマイクロコントローラの命令セットの説明をする。
【００６３】
表１は、命令セットを実現するためマイクロコントローラを制御する制御ラインの概要である。
【表１】
0005199931.tif 000002
【００６４】
表２はデータラインの概要である。
【表２】
0005199931.tif 000003
【００６５】
表３は、算術および論理演算の概要であり、特定の演算が制御ラインＡＬＵ１＿ＯＰにより選択される。いくつかの命令は２つのレジスタＡおよびＢに対して動作する。他の命令は、レジスタおよび定数値ｋ（すなわち「即時」データ）に対して動作する。
【表３】
0005199931.tif 000004
【００６６】
表４は専用ＡＬＵ−２の算術演算の概要である。
【表４】
0005199931.tif 000005
【００６７】
この発明におけるほとんどの命令は、単一のクロックサイクル中に行なわれる。各レジスタの内容は、それらに対応するフリップフロップ（図３）の出力において常に利用可能である。したがって、選択されたレジスタの内容はほぼ即時にｍｕｘ１２０、１２２および１２４の出力において利用可能であり、ｍｕｘに含まれる組合せ回路の伝搬遅延に等しい遅延しか要しない。この時間期間を通常「組合せ遅延」と呼ぶ。
【００６８】
１つのクロックサイクルの間に以下の算術および論理命令が実行される。すなわち、ＡＤＤ、ＡＤＣ、ＳＵＢ、ＳＵＢＩ、ＳＢＣ、ＳＢＣＩ、ＡＮＤ、ＡＮＤＩ、ＯＲ、ＯＲＩ、ＥＯＲ、ＣＯＭ、ＮＥＧ、ＳＢＲ、ＣＢＲ、ＩＮＣ、ＤＥＣ、ＴＳＴ、ＣＬＲ、ＳＥＲ、ＬＳＬ、ＬＳＲ、ＲＯＬ、ＲＯＲ、ＡＳＲ、ＳＷＡＰ、ＣＰ、ＣＰＣ、ＣＰＩである。図２からわかるように、Ａ入力およびＢ入力は、命令がフェッチされデコードされたほぼ直後に汎用ＡＬＵ２２に対して利用可能となる。Ｒ＿ＯＵＴＡ制御ラインは、レジスタの内容を選択し、ＡＬＵ２２の２つの入力の一方に出力する。Ｒ＿ＯＵＴＢは同様に、もし命令が第２のレジスタオペランドを指定するならばアサートされる。代替的に、Ｋ＿ＩＮ制御ラインが、即時データを使用する命令に対してはＡＬＵへの２進入力として役立つ。一方、ＡＬＵ（図７）のサブユニットＯＰｎは、それぞれの演算を行ない、ＡＬＵへの入力が準備されるとすぐに、若干の組合せ遅延後に結果が利用可能となる。命令に対応するサブユニットの結果２２Ｃは、ＡＬＵ１＿ＯＰ制御ラインを通じて選択され、データバス１２へ置かれる。同時に、Ｄ＿ＳＥＬ制御ライン（図３）がｍｕｘ１３０および１３２を動作させ、データバス入力Ｄ＿ＢＵＳを選択させる。Ｒ＿ＳＥＬ（およびＷＥ＿Ｒ）制御ラインは、結果がストアされるレジスタを選択し、「組合せ遅延」後に、結果がレジスタへとクロックされる。同時に、ＡＬＵによりセットされた状態フラグが、Ｆ＿ＳＥＴＡＬＵのアサートによって状態レジスタ（図６）へクロックされる。
【００６９】
乗算命令ＭＵＬは、２つの８ビットレジスタの乗算を行ない、１６ビットの結果をＲ０／Ｒ１レジスタ対にストアする。他のＡＬＵ命令とは異なり、ＭＵＬ命令には２クロックサイクルかかる。各１サイクルが、１６ビットの積の半分をレジスタ対のレジスタの片方にストアするため使われる。
【００７０】
ＭＯＶ命令は、レジスタの間でのデータ転送を１クロックサイクル中に行なう。ＭＯＶ命令は、ソースレジスタおよび行先レジスタを指定する。図２、３および図４を参照し、Ｒ＿ＯＵＴＣ制御ラインは、ｍｕｘ１２４を動作させ、指定されたソースレジスタの内容をデータバス１２へと駆動する。同時に、Ｄ＿ＳＥＬ制御ラインは、ｍｕｘ１３０および１３２を動作させ、レジスタの入力Ｄに現われるようＤ＿ＢＵＳを出力させる。そしてＲ＿ＳＥＬおよびＷＥ＿Ｒ制御ラインは、行先レジスタにクロックするよう、セレクタ制御回路１３４を動作させ、それによって、Ｄ＿ＢＵＳにより与えられる内容をストアする。
【００７１】
ＬＤＩ命令は、指定されたデータがレジスタにロードされるのを可能にする。データは、ＬＤＩ命令の機械演算コードにおいて指定され、ｍｕｘ１３０のＫ＿ＩＮ入力として現われる。Ｄ＿ＳＥＬ制御ラインは、Ｋ＿ＩＮを出力するようｍｕｘ１３０および１３２を動作させ、一方、Ｒ＿ＳＥＬおよびＷＥ＿Ｒ制御ラインは、指定されたレジスタにクロックするよう、セレクタ制御回路１３４を動作させる。
【００７２】
１６ビットＸ、Ｙ、Ｚレジスタにおける演算は、Ｘ、Ｙ、Ｚレジスタによりアドレス指定されるメモリロケーションから指定されたレジスタへデータを転送するためのＬＤ命令、および、指定されたレジスタからＸ、Ｙ、Ｚレジスタによりアドレス指定されるメモリロケーションにデータを転送するためのＳＴ命令を含む。ＬＤ命令およびＳＴ命令には、実行のため２クロックサイクルかかる。図２および図３を参照し、第１のクロックサイクルの間に、Ｒ＿ＯＵＴＡ制御ラインおよびＲ＿ＯＵＴＢ制御ラインが、所望の１６ビットレジスタのレジスタ対（Ｘ：Ｒ２７／Ｒ２６、Ｙ：Ｒ２９／Ｒ２８、Ｚ：Ｒ３１／Ｒ３０）を選択する。ＡＤＤＲ＿ＳＥＬ制御ラインは、Ｂ：Ａ出力を間接アドレスバス１４へ送るようセレクタ１１４を動作させる。さらに、ＳＴ命令の場合には、Ｒ＿ＯＵＴＣ制御ラインが、そこからデータを読出すべきレジスタを選択し、データをバス１２へ置く。第２のクロックサイクルの間、メモリからバス１２へとデータをロードするため（ＬＤ）またはデータをメモリに書込むため（ＳＴ）のいずれかのためメモリがストローブされる。さらに、ＬＤ命令の場合には、Ｒ＿ＳＥＬ制御ラインおよびＷＥ＿Ｒ制御ラインが、指定されたレジスタにＤ＿ＢＵＳからデータを書込むため選択される。
【００７３】
ＬＤ命令およびＳＴ命令は各々、特定のＣ言語特徴をサポートするために良く適した２つのバリアント、すなわち、ポストインクリメント（ＬＤ＋、ＳＴ＋）演算およびプリデクリメント（ＬＤ−、ＳＴ−）演算を有する。上述のように、図２に示す専用ＡＬＵ−２は、このような演算に必要な１６ビット算術演算を行なう。
【００７４】
ポストインクリメント：第１のクロックサイクルにおいて、上に説明したＬＤ命令およびＳＴ命令についてのアクティビティに加えて、Ｖ＿ＳＥＬ制御ラインが＋１入力を選択し、ＡＬＵ２＿ＯＰが、１６ビットアドレスがバス１４に置かれた後、付加的な演算を行なうよう専用ＡＬＵ＿２を動作させる。加算１０２の結果は、レジスタ回路１００のＤ＿ＡＬＵ２Ｈ入力およびＤ＿ＡＬＵ２Ｌ入力に結合される。図３のＤ＿ＳＥＬ制御ラインは、Ｄ＿ＡＬＵ２Ｈｍｕｘ入力およびＤ＿ＡＬＵ２Ｌｍｕｘ入力を選択し、Ｄ＿ＡＬＵ２ＨをＲ２７，Ｒ２９およびＲ３１へ送り、Ｄ＿ＡＬＵ２ＬをＲ２６、Ｒ２８およびＲ３０へ送る。次に、データを正しいレジスタ対に書込むため、適切なＷＥ＿［ＸＹＺ］Ｌ制御ラインおよびＷＥ＿［ＸＹＺ］Ｈ制御ラインがアサートされる。
【００７５】
プリデクリメント：第１のクロックサイクルにおいて、上に説明したＬＤ命令およびＳＴ命令についてのアクティビティに加えて、Ｖ＿ＳＥＬは、−１入力を選択し、ＡＬＵ２＿ＯＰがＡＬＵ−２に加算を行なわさせる。結果は、（ｉ）上述のようにレジスタ回路にフィードバックされ、（ii）プリデクリメントアドレスとして使用されるようＡＤＤＲ＿ＳＥＬにより選択される。
【００７６】
ＬＤ命令およびＳＴ命令は各々、テーブル参照演算を簡素化するための第３のバリアント（ＬＤＤ、ＳＴＤ）を有する。ＬＤＤ命令およびＳＴＤ命令は、メモリアクセス前に１６ビットアドレスレジスタに加えられる変位値を指定する。第１のクロックサイクルにおいて、ＬＤ命令およびＳＴ命令について上に説明したアクティビティに加え、Ｖ＿ＳＥＬは、Ｋ＿ＩＮ入力を選択し、ＡＬＵ２＿ＯＰが、ＡＬＵ−２に加算を行なわさせる。結果は、ＡＤＤＲ＿ＳＥＬにより選択され、変位アドレスとして役立つ。
【００７７】
ＬＤ命令およびＳＴ命令についての計算を行なうのに加えて、専用ＡＬＵ−２は、１６ビット加算命令および減算命令、すなわちＡＤＩＷ命令およびＳＢＩＷ命令を容易にするため使用される。専用ＡＬＵ−２は、１クロックサイクルでのＸ、Ｙ、Ｚレジスタの計算を可能にするが、これはさもなくば汎用ＡＬＵ２２を使用しては不可能である。ＡＤＩＷ命令およびＳＢＩＷ命令は、Ｘ、Ｙ、Ｚレジスタの１つとそこに加算される定数値とを指定する。動作においては、Ｒ＿ＯＵＴＡ制御ラインおよびＲ＿ＯＵＴＢ制御ラインが、指定されたレジスタ対を専用ＡＬＵ−２への第１の入力として選択する。Ｖ＿ＯＵＴは、Ｋ＿ＩＮ（定数値）をＡＬＵ−２への第２の入力として選択する。ＡＬＵ２＿ＯＰは、加算演算または減算演算のいずれかを選択する。結果１０２は、レジスタ回路１００のＤ＿ＡＬＵ２Ｈ入力およびＤ＿ＡＬＵ２Ｌ入力へフィードバックされる。図３に示すＤ＿ＳＥＬ制御ラインは、Ｄ＿ＡＬＵ２ＨおよびＤ＿ＡＬＵ２Ｌｍｕｘ入力を選択し、Ｄ＿ＡＬＵ２ＨをＲ２７、Ｒ２９およびＲ３１へ送り、Ｄ＿ＡＬＵ２ＬをＲ２６、Ｒ２８およびＲ３０へ送る。次に、データを所望のレジスタ対に書込むため、適切なＷＥ＿［ＸＹＺ］Ｌ制御ラインおよびＷＥ＿［ＸＹＺ］Ｈ制御ラインがアサートされる。
【００７８】
マイクロコントローラは、各々１クロックサイクルで実行される、状態レジスタ２４のさまざまなフラグをセットしクリアするため命令を与える。これらは、ＢＳＥＴおよびＢＣＬＲ、ならびにＳＥｘおよびＣＬｘを含み、ｘはＩ、Ｔ、Ｈ、Ｓ、Ｖ、Ｎ、ＺまたはＣである。アセンブリ言語レベルでは、ＳＥｘ命令およびＣＬｘ命令は付加的なオペランドを必要としないが、ＢＳＥＴ命令およびＢＣＬＲ命令は、影響を及ぼすフラグを特定する状態フラグオペランドｓを含む。
【００７９】
図６を参照し、制御信号Ｆ＿ＳＥＬは、影響を及ぼすフラグを選択するため、デコーダ２０４および２０６を動作させる。フラグクリア命令の場合には、Ｆ＿ＣＬＲ制御ラインは、可能化信号として役立ち、影響されるフラグに対応する可能化ＡＮＤゲート２２４で出力を与える。出力は、フリップフロップのリセットＲ入力に結合され、フリップフロップをクリアする。フラグセット命令の場合には、Ｆ＿ＳＥＴ制御ラインが２つの目的のため役立つ。第１に、（Ｆ＿ＳＥＬにより選択される）状態フラグの１つをセットするために各フリップフロップに入力を与える。第２に、Ｆ＿ＳＥＴ制御ラインは、可能化ＡＮＤゲート２２６のための可能化信号であり、その出力は入力をクロックインするためにフリップフロップクロックラインに結合される。
【００８０】
上述のように、この発明のマイクロコントローラの特徴は、１クロックサイクルでのＢＳＴ命令およびＢＬＤ命令により与えられる、ビットアクセス能力である。ＢＳＴ命令は、状態レジスタのＴフラグへコピーされるべきレジスタ内のビット位置およびレジスタを指定する。Ｒ＿ＯＵＴＣ制御ラインは、ｍｕｘ１２４によりデータバス１２へと駆動されるべき内容を持つレジスタを選択する。同時に、ＢＩＴ＿ＳＥＬ制御ラインは、ｍｕｘ２１０（図６）を動作させ、所望のビットをデータバスから選択させ、所望のビットは、Ｔ＿ＳＥＬ制御ラインをアサートすることによって、Ｔフリップフロップへロードされる。
【００８１】
ＢＬＤ命令は、Ｔフラグ内にストアされるビットを指定されたレジスタの指定されるビット位置へロードする。Ｆ＿ＯＵＴ制御ラインは、Ｔフラグを選択するようｍｕｘ２０２を動作させ、一方、Ｔ＿ＯＵＴ制御ラインは、出力をデータバスのビットｎへと駆動する。同時に、図３を参照し、Ｄ＿ＳＥＬ制御ラインは、ｍｕｘ１３０および１３２の第３の入力を選択し、それによって、すべてのレジスタに入力としてＤ＿ＢＵＳNを与える。Ｒ＿ＳＥＬ、ＢＩＴ＿ＳＥＬおよびＷＥ＿ＢＩＴ制御ライン（図４、図５Ａおよび図５Ｂ）は、所望のレジスタ／ビット位置のフリップフロップをクロックする。
【００８２】
各々変位量を指定する以下の条件付分岐命令が与えられる。
【表５】
0005199931.tif 000006
【００８３】
上述の分岐命令に加え、指定されたレジスタの指定されたビットのテストの結果に基づいて、次の命令をスキップするためのＳＢＲＣ命令およびＳＢＲＳ命令が与えられる。同様にＣＰＳＥ命令は、２つのレジスタの内容を比較し、比較の結果に基づいて、次の命令をスキップする、すなわち、もし２つのレジスタの内容が等しければスキップする。これらの命令は、分岐が行なわれるか否かに依存して、１クロックサイクルまたは２クロックサイクルで実行される。
【００８４】
図６および図９を参照し、ＢＲｘｘ命令のフェッチに際して、Ｆ＿ＯＵＴ制御ラインは、ｍｕｘ２０２から所望の状態フラグを出力するため、制御信号を搬送し、ＦＴＳＴ＿ＳＥＴまたはＦＴＳＴ＿ＣＬＲのいずれかがアサートされ、ビットテスト手段２０８が適切なビットテストを行なう。一方、プログラムカウンタ２８は、インクリメントされており、次の命令がプリフェッチされている。もしビットテストがフェールであると、プリフェッチされている命令が、次に実行される命令としてとられる（ｔａｋｅｎ）。もし、ビットテストがパスであれば、ＢＲ＿ＳＫＰ制御ラインがアサートされ、プログラムカウンタに、分岐アドレスを形成させ、命令レジスタ２５に新しい命令がロードされる。新しい命令のロードには第２のクロックサイクルが必要である。
【００８５】
図３を参照し、ＳＢＲＣ命令およびＳＢＲＳ命令を参照してのＢＲ＿ＳＫＰ制御信号の生成が図示される。所望のレジスタがｍｕｘ１２０によってＲ＿ＯＵＴＡ制御ラインを通じて選択され、ｍｕｘ１３６の入力に結合される。ＢＩＴ＿ＳＥＬ制御ラインは、所望のビットを出力するようｍｕｘ１３６を動作させ、所望のビットは次にＢＴＳＴ＿ＣＬＲまたはＢＴＳＴ＿ＳＥＴ制御ラインのいずれかのアサートによってビットテスト手段１３８においてテストされる。テストの結果に依存して、ＢＲ＿ＳＫＰ制御ラインがアサートされる。
【００８６】
図３および図７を参照し、ＣＰＳＥ命令に関してのＢＲ＿ＳＫＰ制御信号の発生について説明する。問題となる２つのレジスタの内容が、Ｒ＿ＯＵＴＡ制御ラインおよびＲ＿ＯＵＴＢ制御ラインを通じてのｍｕｘ１２０および１２２の動作によって、汎用ＡＬＵ２２のＡ入力およびＢ入力において利用可能となる。ＸＯＲゲート２３およびＡＮＤゲート２４を通じてＡＬＵ内で「比較」演算が行なわれる。制御ラインＣＰＳＥがＡＮＤゲートの出力を可能化するようアサートされ、Ａ＝ＢのときにＢＲ＿ＳＫＰがアサートされる。
【００８７】
以下の無条件分岐命令が与えられる。ＲＪＭＰ命令は、相対ジャンプアドレスを生成するためプログラムカウンタに加算される変位値を指定する。ＩＪＭＰ命令は、Ｚレジスタの内容をジャンプアドレスとして利用する。ＪＭＰ命令はプログラムカウンタにロードされるジャンプアドレスを指定する。ＩＪＭＰ命令は、Ｚレジスタに含まれるレジスタ対Ｒ３１／Ｒ３０を選択するため、Ｒ＿ＯＵＴＡ制御ラインおよびＲ＿ＯＵＴＢ制御ラインに対して制御信号を生成する。図２からわかるように、ｍｕｘ１１４は、ＡＤＤＲ＿ＳＥＬにより動作させられ、Ｚレジスタの内容を間接アドレスバス１４へ駆動し、これは次にプログラムカウンタ２８にロードされる。
【００８８】
以下のサブルーチン関連命令が与えられる。ＣＡＬＬ命令は、サブルーチンの開始アドレスであるアドレスを指定する。ＲＣＡＬＬ命令は、サブルーチンの開始アドレスを生成するためプログラムカウンタに加算される変位値を指定する。ＩＣＡＬＬ命令は、サブルーチンの開始アドレスとしてＺレジスタの内容を利用する。ＩＣＡＬＬ命令の実行中、レジスタファイル２０は、ＩＪＭＰ命令について上に説明したのと同様の態様で動作する。サブルーチン呼出命令はまた、リターンアドレスをセーブするよう、スタックポインタとスタック、すなわちスタックポインタによりアドレス指定されるＲＡＭ内の区域とに動作する。
【００８９】
サブルーチンリターン命令は、単にプログラムカウンタにスタックの一番上の内容をロードし、それに従ってスタックポインタを更新する標準ＲＥＴ命令を含む。さらに、割込ハンドラからのリターンのためＲＥＴＩ命令が設けられる。ＲＥＴＩ命令は、ＲＥＴと同様の態様で動作するが、状態レジスタにＩフラグをセットするという付加的な作用を伴う。
【００９０】
ＰＵＳＨ命令およびＰＯＰ命令は、ＳＰ＿ＩＮＣ制御ラインおよびＳＰ＿ＤＥＣ制御ラインをアサートし（ＲＡＭ内の）スタックに書込を行なうかまたはスタックから読出を行なうことによって、スタックポインタを動作させる。
【００９１】
レジスタファイルのレジスタのように一連のフリップフロップを含むＩ／Ｏポートデータレジスタとレジスタとの間でデータバス１２を通じてデータを転送するためにＩＮ命令およびＯＵＴ命令が使用される。ＩＮ命令は、Ｉ／Ｏポートからレジスタへデータをロードする。指定されるポートのデータレジスタの内容は、データバス１２へと駆動される。Ｄ＿ＳＥＬ制御ラインは、Ｄ＿ＢＵＳを出力するようｍｕｘ１３０および１３２を動作させる。Ｒ＿ＳＥＬ制御ラインおよびＷＥ＿Ｒ制御ラインは、セレクタ制御回路１３４を動作させ、所望のレジスタをデータにクロックインさせる。逆に、ＯＵＴ命令は、レジスタからＩ／Ｏポートへデータをロードする。データは、Ｒ＿ＯＵＴＣをアサートすることにより、指定されるレジスタからデータバスへとロードされる。選択されたポートのデータレジスタのフリップフロップは、次に、データバス１２上に現われるデータにクロックインするよう動作させられる。
【００９２】
ＬＰＭ命令は、プログラムメモリからレジスタＲＯへデータのバイトをロードする。プログラムメモリ内のアドレスは、Ｚレジスタ内に含まれる。Ｚレジスタは、ｍｕｘ１２０および１２２でレジスタＲ３１／Ｒ３０へ出力するようＲ＿ＯＵＴＡおよびＲ＿ＯＵＴＢをアサートし、得られた１６ビット値（図２）をｍｕｘ１１４を通じてアドレスバス１４へと駆動することによってアクセスされる。プログラムメモリがアクセスされ、データがデータバスへとロードされる。Ｄ＿ＳＥＬ制御ライン（図３）は、Ｄ＿ＢＵＳ入力を選択し、一方、Ｒ＿ＳＥＬ制御ラインおよびＷＥ＿Ｒ制御ラインは、レジスタＲ０に対応するフリップフロップにクロックするようセレクタ制御回路を動作させ、それによってＤ＿ＢＵＳをレジスタＲ０にロードする。
【００９３】
ＳＬＥＥＰ命令は、マイクロコントローラをスリープモードにセットする。割込で起動されると、プログラムカウンタおよび命令レジスタは、割込ハンドラを実行する前にＳＬＥＥＰ命令に続いて命令をロードし実行するよう動作させられる。
【００９４】
マイクロコントローラは、ユーザにより選択可能な所定の時間期間の間にタイマがリセットされない限りマイクロコントローラをリセットするウォッチドッグ・タイマ３００（図１）を含む。図１１は、タイマ３００が、セレクタ３０４に結合される複数の出力を有するカウンタ３０２を含むことを示す。カウンタは、１ＭＨｚで動作する内部発振器によりクロックされる。カウンタの各出力は、所定数のカウント後にアサートされる。したがって、カウンタ３０２は、複数の遅延時間を有する遅延手段として動作する。図１１に示すように、カウンタ出力は、１６ｍＳのインクリメントで、１６ｍＳから２０４８ｍＳまでの遅延時間を備え得る。遅延時間は、セレクタ３０４を通じて制御ラインＷＤ＿ＳＥＬにより選択され、その出力は、ＷＤ＿Ｅ制御ラインにより可能化される可能化ＡＮＤゲート３０６へ結合される。選択された遅延時間に等しい時間期間が経過したとき、対応するカウンタ出力がハイとなり、それによってＭＣＵ ＲＥＳＥＴラインをアサートする。ＷＤ＿ＳＥＬおよびＷＤ＿Ｅ制御ラインは、ウォッチドッグ・レジスタ３０８に含まれるフリップフロップの出力である。データは、データバス１２を通じてレジスタ３０８に読込まれる。
【００９５】
ＷＤＲ命令は、ウォッチドッグ・タイマ３００をリセットするため使用される。命令デコーダ２３は、カウンタ３０２をリセットするＷＤ＿ＲＳＴ信号を生成する。したがって、タイマが可能化されるとき（ＷＤ＿Ｅがハイのとき）、ＷＤＲ命令は、選択された遅延時間に対応する頻度で実行されねばならず、さもなくばマイクロコントローラがリセットされる。
【図１】
0005199931.tif 000007
【図２】
0005199931.tif 000008
【図３】
0005199931.tif 000009
【図４】
0005199931.tif 000010
【図５Ａ】
0005199931.tif 000011
【図５Ｂ】
0005199931.tif 000012
【図６】
0005199931.tif 000013
【図７】
0005199931.tif 000014
【図８Ａ】
0005199931.tif 000015
【図８Ｂ】
0005199931.tif 000016
【図９】
0005199931.tif 000017
【図１０】
0005199931.tif 000018
【図１１】
0005199931.tif 000019
【図１２】
0005199931.tif 000020
【図１３】
0005199931.tif 000021