Intel P8051マイクロコントローラ | |
| 歴史 | |
|---|---|
| 前任者 | インテルMCS-48 |
| 後継 | インテル MCS-151 |
Intel MCS-51(一般に8051と呼ばれる)は、 1980年にIntelが組み込みシステム向けに開発したシングルチップマイクロコントローラ(MCU)シリーズです。Intelのオリジナルバージョンは1980年代から1990年代初頭にかけて人気を博し、バイナリ互換機能を強化した派生版は現在でも広く利用されています。これは、プログラム命令とデータ用に別々のメモリ空間を持つ、複雑な命令セットを持つコンピュータです。
Intelの初代MCS-51ファミリーは、前身のIntel MCS-48と同様にN型金属酸化膜半導体(NMOS )技術を用いて開発されましたが、後のバージョン(名称にCの文字が付くもの、例:80C51)は相補型金属酸化膜半導体(CMOS)技術を採用し、NMOS技術を用いた前世代製品よりも消費電力が少なくなっています。そのため、バッテリー駆動デバイスにより適したものとなりました。
このファミリーは、1996年に拡張版8ビットMCS-151と8/16/32ビットMCS -251ファミリーのバイナリ互換マイクロコントローラで継続されました。[ 1 ] IntelはもはやMCS -51、MCS-151、MCS-251ファミリーを製造していませんが、多くのベンダーが製造する拡張版バイナリ互換派生製品は今日でも人気があります。一部の派生製品には、デジタル信号プロセッサ(DSP)または浮動小数点ユニット(コプロセッサ、FPU)が統合されています。これらの物理デバイス以外にも、いくつかの企業は、フィールドプログラマブルゲートアレイ(FPGA)または特定用途向け集積回路(ASIC)設計で使用するためのIPコアとしてMCS-51派生製品を提供しています。
Intel MCS-51命令セットの設計者はジョン・H・ウォートンであった。[ 2 ] [ 3 ]

8051アーキテクチャは、中央処理装置(CPU)、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、入出力(I/O)ポート、シリアルポート、割り込み制御、タイマーなど、多くの機能を1つのパッケージに搭載しています。
8051コアの特長の一つは、ブール演算エンジンを搭載していることです。これにより、ビットレベルのブール論理演算を、選択した内部レジスタ、ポート、およびRAM上の特定の位置で直接かつ効率的に実行できます。もう一つの特長は、バンク選択可能な4つのワーキングレジスタセットを搭載していることです。これにより、割り込みサービスルーチンへの出入りに必要なコンテキストスイッチの時間を大幅に短縮できます。8051は1つの命令でレジスタバンクを切り替えることができ、重要なレジスタをRAMに転送するという時間のかかる作業を回避できます。
2013年現在新たな派生製品は多くの主要チップメーカーによって開発され続けており、IAR Systems、Keil、TASKING [ 6 ]などの主要コンパイラサプライヤーは継続的にアップデートをリリースしている。
MCS-51 ベースのマイクロコントローラは通常、1 つまたは 2 つのUART、2 つまたは 3 つのタイマー、128 バイトまたは 256 バイトの内部データRAM ( そのうち 16 バイトはビット アドレス指定可能)、最大 128 バイトのI/O、512 バイトから 64 KB の内部プログラム メモリ、そして場合によっては外部データ スペースに配置された拡張データ RAM (ERAM) を備えています。外部 RAM と ROM はデータ バスとアドレス バスを共有します。オリジナルの 8051 コアは、マシン サイクルあたり 12 クロック サイクルで動作し、ほとんどの命令は 1 または 2 マシン サイクルで実行されます。12 MHz のクロック周波数では、8051 は 毎秒 100 万の 1 サイクル命令、または毎秒 50 万の 2 サイクル命令を実行できます。拡張された 8051 コアが現在では一般的に使用されており、マシン サイクルごとに 6、4、2、または 1 クロック (「1T」と表記) で動作し、クロック周波数は最大 100 MHz であるため、1 秒あたりさらに多くの命令を実行できます。Silicon Labs のすべてのデバイス、Dallas (現在はMaxim Integratedの一部) の一部、およびAtmel (現在はMicrochipの一部)のいくつかのデバイスには、シングル サイクル コアが搭載されています。[ 7 ] [ 8 ] [ 9 ]
8051 のバリアントには、ブラウンアウト検出機能を備えた内蔵リセットタイマー、オンチップ発振器、自己プログラム可能なフラッシュ ROMプログラム メモリ、内蔵外部 RAM、追加の内部プログラム ストレージ、 ROM 内のブートローダーコード、EEPROM不揮発性データ ストレージ、I 2 C、SPI、およびUSBホスト インターフェイス、CANまたはLINバス、ZigbeeまたはBluetooth無線モジュール、PWMジェネレータ、アナログコンパレータ、アナログ - デジタルおよびデジタル - アナログ コンバータ、RTC、追加のカウンタおよびタイマー、イン サーキット デバッグ機能、より多くの割り込みソース、追加の省電力モード、パラレル ポートの増減などが含まれる場合があります。 Intel は、ROM 内にBASICインタープリタを備え、RAM にロードされたユーザー プログラムを実行できるマスク プログラム バージョン 8052AH-BASIC を製造しました。
MCS-51 ベースのマイクロコントローラは、極限環境向けに改良されています。高温対応型の例としては、-40 °C ~ +250 °Cの Tekmos TK8H51 ファミリー[ 10 ]や、-55 °C ~ +225 °C (+300 °Cで最大 1 年間動作可能) のHoneywell HT83C51 [ 11 ]などがあります。宇宙船で使用する耐放射線MCS-51 マイクロコントローラも入手可能です。例えば、 Cobham (旧Aeroflex ) の UT69RH051 [ 12 ]や、NIIET の 1830VE32 (ロシア語: 1830ВЕ32 ) [ 13 ]などがあります。
一部の工学系大学では、8051マイクロコントローラがマイクロコントローラ入門コースで使用されています。[ 14 ] [ 15 ] [ 16 ] [ 17 ]
Intel初のMCS-51マイクロコントローラは8051で、4KB のROMと128 バイトのRAMを搭載していました。87で始まるバリアントは、ユーザーがプログラム可能なEPROMを搭載しており、UV消去可能な場合もあります。3番目の文字がCであるバリアントは、何らかのCMOSです。8031と8032はROMレスバージョンで、それぞれ128バイトと256バイトのRAMを搭載しています。最後の桁はメモリサイズを示す場合があり、例えば8052は8KBの ROM、87C54は16KB のEPROM、87C58は32KB のEPROMを搭載し、いずれも256バイトのRAMを搭載しています。
MCS-51には、内部RAM、特殊機能レジスタ、プログラムメモリ、外部データメモリの4種類のメモリがあります。これらに効率的にアクセスするために、一部のコンパイラ[ 18 ]は、内部RAM、内部RAMへのシングルビットアクセス、特殊機能レジスタ、選択された(8で割り切れる)特殊機能レジスタへのシングルビットアクセス、プログラムRAM、レジスタ間接アクセスを使用してアクセスされる外部RAM、標準の8ビットレジスタのいずれかを使用する方法、および16ビット間接アクセスレジスタを使用したレジスタ間接外部RAMアクセスなど、最大7種類のメモリ定義を使用します。
8051の命令セットは、データと命令が分離されたメモリを持つハーバードアーキテクチャとして設計されています。プログラムメモリからフェッチされたコードのみを実行でき、プログラムメモリに書き込む命令はありません。しかし、ICから出るバスは単一のアドレスパスとデータパスを持ち、フォン・ノイマンアーキテクチャのバスに非常によく似ています。
ほとんどの8051システムは命令セットを尊重しており、例えばフラッシュメモリに新しい実行可能プログラムをダウンロードするには、カスタマイズされた機能が必要となる。
内部RAM(IRAM)は、アドレス0から0xFFまでの8ビットのアドレス空間を持ちます。0x00から0x7FまでのIRAMには、128個の直接アドレス指定可能な1バイトレジスタが含まれており、命令の一部である8ビット絶対アドレスを使用してアクセスできます。あるいは、IRAMには間接的にアクセスすることもできます。アドレスをR0またはR1にロードし、または構文を使用してメモリにアクセスするか、スタックポインタSPを介してスタックメモリとして、/および/演算を使用し@R0てアクセスします。@R1PUSHPOP*CALLRET
オリジナルの8051は、IRAMが128バイトしかありませんでした。8052では、0x80から0xFFまでの領域にIRAMが追加されましたが、これは間接的にしかアクセスできません(例えば、スタック領域として使用する場合など)。ほとんどの8051互換機は、256バイトのIRAMを搭載しています。
IRAMアドレス0x80~0xFFへの直接アクセスは、代わりに特殊機能レジスタ(SFR)にマッピングされ、そこにはアキュムレータA、B、キャリービットC、および制御、ステータスなどのためのその他の特殊レジスタが配置されています。
特殊機能レジスタ(SFR)は、IRAMと同じアドレス空間(アドレス0x80~0xFF)に配置されており、IRAMの下位半分と同様の命令を使用して直接アクセスできます。スタックポインタSPを介して間接的にアクセスすることはできません@R0。@R1これらのアドレスに間接的にアクセスすると、代わりにIRAMの後半部分にアクセスされます。
特殊機能レジスタ (SFR) には、アキュムレータ A (または ACC、E0) と B (F0)、プログラム ステータス ワード (または PSW、D0) 自体、および 16 ビット データ ポインタ DPTR (82、DPL および 83、DPH) が含まれます。これらに加えて、割り込みイネーブルIE (A8) および割り込み優先度 IP ( B8)、I/O ポート P0 (80)、P1 (90)、P2 (A0)、P3 (B0)、シリアル I/O 制御 SCON (98) およびバッファ SBUF (99)、CPU/電源制御レジスタ PCON (87) など、その他の特殊機能レジスタの小さなコアがあります。また、タイマー0と1の制御レジスタ(TCON、アドレス88)と動作モードレジスタ(TMOD、アドレス89)、16ビットタイマー0(TL0、アドレス8A、TH0、アドレス8C)、タイマー1(TL1、アドレス8B、TH1、アドレス8D)は、 8051のすべてのバージョンに存在します。その他のアドレスはバージョンによって異なります。特に、8052のタイマー2のレジスタ、制御レジスタT2CON(アドレスC8)、16ビットキャプチャ/ラッチ(RCAP2L、アドレスCA、RCAP2H、アドレスCB)、タイマー2(TL2、アドレスCC、TH2、アドレスCD)は8051には含まれていません。
IRAMの0x00から0x1Fまでの32バイトには、8バイトのレジスタウィンドウが4つ格納されており、8つのレジスタR0~R7がそれぞれこれらのウィンドウに対応しています。現在アクティブなウィンドウは、プログラムステータスワードに含まれる2ビットのアドレスによって決定されます。
IRAMアドレス0x20~0x2Fにある16バイト(128ビット)には、128個の1ビットレジスタのための領域が含まれており、これらはビットレジスタ00~7Fとして個別にアドレス指定可能です。
残りのビットレジスタ(アドレス80~FF)は、16個の特殊機能レジスタ80、88、90、98、 …、F0、F8(アドレスが8の倍数であるもの)にマッピングされ、アキュムレータA、B、およびプログラムステータスワードPSWを構成するビットが含まれます。レジスタウィンドウアドレスはPSWのビット3と4であり、それぞれビットレジスタD3とD4としてアドレス指定できます。一方、キャリービットC(またはCY)はPSWのビット7にあり、ビットレジスタD7としてアドレス指定できます。
プログラムメモリ(PMEM、ただしIRAMやXRAMほど一般的ではない)は 、別個のアドレス空間のアドレス0から始まる最大64KBの読み出し専用メモリです。使用するチップのモデルによって、オンチップまたはオフチップのいずれかになります。プログラムメモリは読み出し専用ですが、8051の一部のバリアントではオンチップフラッシュメモリを使用し、システム内またはアプリケーション内でメモリを再プログラムする方法を提供しています。
コードに加えて、ルックアップテーブルなどの読み取り専用データをプログラムメモリに格納することも可能で、これらのデータはまたは命令によって取得されます。アドレスは、8ビットアキュムレータと16ビットレジスタ(PCまたはDPTR)の合計として計算されます。MOVCA,@A+DPTRMOVCA,@A+PC
特殊なジャンプ命令とコール命令(AJMPおよびACALL)は、ローカル(同じ 2 KB 以内)のプログラム メモリにアクセスするコードのサイズをわずかに削減します。[ 19 ]
64 KB を超えるコード が必要な場合、一般的なシステムでは、汎用 I/O が上位アドレス ビットを選択するバンク スイッチ方式のコードが採用されます。一部の 8051 コンパイラ[ 18 ]は、ページングされたコードに自動的にアクセスする機能を備えています。これらのシステムでは、割り込みベクタとページング テーブルはコードの最初の 32 KB に配置され、常に常駐します。
外部データメモリ(XRAM)は、アドレス0から始まる3つ目のアドレス空間で、16ビットのアドレス空間を提供します。これもオンチップまたはオフチップのどちらでも構いませんが、「外部」と呼ばれるのは、外部メモリへのアクセスにMOVX(外部移動)命令を使用する必要があるためです。8051の多くのバリエーションでは、標準の256 バイトのIRAMに加えて、数キロバイトのXRAMがチップ上に搭載されています。
XRAMの最初の256バイトには、、、、および命令を使用してアクセスできます。64KB全体には、およびを使用してアクセスできます。16ビットアドレスを使用するには、プログラマが16ビットインデックスレジスタをロードする必要があります。このため、16ビットアドレスを使用したRAMアクセスは大幅に遅くなります。MOVXA,@R0MOVXA,@R1MOVX@R0,AMOVX@R1,A MOVXA,@DPTRMOVX@DPTR,A
一部のCPU [ 20 ]は、8ビット間接アドレスが任意の8ビット汎用レジスタを使用することを許可しています。
この機能を使用できるようにするため、内部 RAM が 256 バイトより大きい、または外部 RAM にアクセスできない一部の 8051 互換マイクロコントローラは、[ 20 ]内部 RAM を外部 RAM であるかのようにアクセスし、256 バイトページの上位アドレスを設定できる特別な機能レジスタ (PDATA など) を備えています。これは、汎用 I/O ピンを設定することで RAM アドレスの上位バイトをページングできる MCS8051 モードをエミュレートします。
64KBを超えるRAM が必要な場合、一般的なシステムではRAMをバンク切り替えし、汎用I/Oで上位アドレスビットを選択します。一部の8051コンパイラ[ 18 ]は、ページングされたデータに自動的にアクセスする機能を備えています。
8051においてメモリマップされていない唯一のレジスタは、16ビットのプログラムカウンタ(PC)です。これは、次に実行される命令のアドレスを指定します。相対分岐命令は、8ビットの符号付きオフセットを提供し、これがPCに加算されます。
汎用レジスタR0~R7は、他のレジスタよりも1バイト短い命令でアクセスできます。これらのレジスタは、IRAMの0x00~0x1Fの領域にマッピングされています。PSWの2つのバンク選択ビットによって、この範囲のうち一度に使用できるのは8バイトのみです。
以下は、8051のレジスタの一部リストです。これらのレジスタは、特殊機能レジスタ空間にメモリマップされています。
256ビットが直接アドレス指定可能です。これらは、0x20~0x2Fの16個のIRAMアドレスと、0x80、0x88、0x90、…、0xF8の16個の特殊機能レジスタです。これらのバイトの任意のビットは、さまざまな論理演算や条件分岐によって直接アクセスできます。
PSWには、一般的な負フラグ(N)やゼロフラグ(Z)は含まれていないことに注意してください。負フラグの場合、アキュムレータの最上位ビットはビットアドレス指定可能なSFRであるため、直接アドレス指定できます。ゼロフラグの場合、アキュムレータがゼロかどうかに応じてジャンプする明示的な命令があります。また、2オペランドの比較とジャンプ演算もあります。
パリティ(P)ビットは、パリティを含むシリアルモードを実装する際によく使用されます。これに対応するため、標準のMCS51 UARTは9ビットを送信できます。
Intel MCS8051 のマイクロアーキテクチャは独自仕様ですが、公開されている機能[ 21 ]からその動作原理が分かります。これはマルチサイクルプロセッサです。MCS8051 はほとんどの命令に 12 クロックサイクル[ 21 ]を使用します。多くの命令はアキュムレータを使用します[ 21 ] 。これに対し、ほとんどの互換コンピュータは、乗算および除算命令を除いて、1 ~ 3 サイクルで命令を実行します。このはるかに高速な処理速度が、これらのコンピュータがほとんどのアプリケーションで MCS8051 に取って代わった主な理由です。
各割り込みには4つの優先度があります。[ 21 ]各優先度内では、デバイスの割り込みは固定された優先度になります。[ 21 ]
命令はすべて1~3バイトの長さで、最初のオペコードバイトと、それに続く最大2バイトのオペランドで構成されます。
オペコードバイトの1 / 4 、 x0~x3は、不規則なオペコードに使用されます。
オペコードバイトの 3/4 ( x4 – xF )は、12種類のオペランドを持つ 16 種類の基本 ALU 命令に割り当てられます。オペコードの最下位 4ビットは、次のように主オペランドを選択します。
@R0@R1address。次のバイトは IRAM または SFR の場所を指定します。#data後続のバイトは 8 ビット定数を指定します。オペランドが宛先 (、)である場合、または演算に既に即値ソース (、) が含まれている場合は、代わりにアキュムレータが使用されることを指定します。INCoperandDECoperandMOVoperand,#dataCJNEoperand,#data,offset通常はアキュムレータ上で動作する3つのビット演算ANL、ORL、およびXRLは、2つのメモリ宛先モードもサポートしています。
opLaddress,#dataopLaddress,A最上位ニブルは、次のように操作を指定します。すべての命令がすべてのアドレッシングモードをサポートしているわけではありません。特に、即値モードは主オペランドへの書き込み時には使用できないため、6つの操作にのみ適用され、さらに4つの操作ではアキュムレータの宛先をエンコードします。命令ニーモニックは、宛先、ソースオペランドの順で使用されます。
INCoperandINCADECoperandDECAADDA,operandRLAADDA,AADDCA,operandRLCAADDCA,AORLA,operandORLaddress,#dataORLaddress,AANLA,operandANLaddress,#dataANLaddress,AXRLA,operandXRLaddress,#dataXRLaddress,AMOVoperand,#dataMOVA,#dataMOVaddress,operandMOVaddress,addressSUBBA,operandMOVoperand,addressCJNEoperand,#data,offset#data、等しくない場合はPC +オフセット#dataにジャンプします。この命令は既にオペランドの最大 2 バイトを持っているため、即値モードとメモリダイレクトモード (オペコード 0xB4 および 0xB5) では即値を省略し、代わりにオペランドをアキュムレータamdと比較します。等しい場合に比較してジャンプする命令はありません。CJNEA,#data,offsetCJNEA,address,offsetCJEXCHA,operandXCHA,ADJNZoperand,offsetMOVA,operandMOVoperand,AMOVA,AADD、、ADDCおよび命令のみがSUBBPSWフラグを設定します。INC、、、DECおよび論理命令は設定しません。命令は、オペランド1 −オペランド2CJNEの結果である借用値にCビットのみを変更します。
不規則命令はアドレッシングモードがより限定されており、 x 0~x 3の範囲でエンコードされ、さらに通常の命令では使用されないx 4~x 7の範囲のいくつかのオペコードも含まれます。
その他の不規則な指示:
ESC8051では使用されなかったが、 § MCS-251などの後継機種では拡張オペコードに使用された。XCHDA,@R0–1オペランドの下位4ビットを交換する。(ショートジャンプ)オペコードSJMPは、符号付きの相対オフセットバイトオペランドを受け取り、次の命令のアドレスを基準としてそこに制御を移します。AJMP/ACALLオペコードは、オペコードバイトの最上位 3 ビットと次のバイトを組み合わせて、PC レジスタの下位 11 ビットを置き換えるために使用される 11 ビットの宛先を指定します (PC レジスタの上位 5 ビットはそのまま残るため、これは 2048 バイトのページ内でのみジャンプできます)。より大きな距離の場合は、LJMPおよびLCALL命令で 16 ビットの宛先を指定できます。
8051が人気を集めている理由の一つは、単一ビットに対する幅広い演算機能です。ビットは常に絶対アドレスで指定され、レジスタ間接アドレス指定やインデックスアドレス指定はできません。単一ビットを操作する命令は以下のとおりです。
SETBbit、、:指定されたビットを設定、クリア、または反転します。CLRbitCPLbitJBbit,offsetビットが設定されている場合は(PC+オフセットに)ジャンプするJNBbit,offset: ビットがクリアになったらジャンプJBCbit,offsetビットが設定されている場合はジャンプし、ビットをクリアするMOVC,bit、:指定されたビットをキャリービットに移動、またはその逆MOVbit,CORLC,bit、:またはビット(またはその補数)をキャリービットにORLC,/bitANLC,bit、:ビット(またはその補数)をキャリービットにANLC,/bitビットオペランドは の形式で記述されますaddress.number。キャリーフラグはビットアドレス指定可能なプログラムステータスワードのビット 7 であるため、、および命令は、およびの短縮版です。SETBCCLRCCPLCSETBPSW.7CLRPSW.7CPLPSW.7
8051 にはさまざまな高水準プログラミング言語コンパイラがあります。8051にはいくつかのCコンパイラが利用可能で、そのほとんどはプログラマが 6 種類のメモリ内の各変数の格納場所を指定でき、複数のレジスタバンクやビット操作命令などの 8051 固有のハードウェア機能にアクセスできます。商用の C コンパイラは多数あります。[ 22 ] Small Device C Compiler (SDCC) は人気のオープンソース C コンパイラです。[ 23 ] C++、Forth、[ 24 ] [ 25 ] [ 26 ] [ 27 ] BASIC、Object Pascal、Pascal、PL/M、Modula-2 などの他の高水準言語も8051 で利用可能ですが、C やアセンブリほど広くは使用されていません[ 28 ]。
IRAM、XRAM、およびPMEM(読み取り専用)はすべてアドレス0を持つため、8051アーキテクチャ用のCコンパイラは、特定のデータを格納する場所(例えば、定数はPMEMに、高速アクセスが必要な変数はIRAMに格納するなど)を示すためのコンパイラ固有のプラグマやその他の拡張機能を提供します。データは3つのメモリ空間のいずれかに存在する可能性があるため、ポインタの型にメモリ空間を含めるように制約するか、ポインタとともにメタデータを格納することによって、ポインタがどのメモリを参照しているかを判別できるメカニズムが通常提供されます。


Intelは2007年3月にMCS-51製品ラインの販売を終了しましたが[ 29 ] [ 30 ]、他のベンダーからは多くの改良された8051製品やシリコンの知的財産が定期的に追加されています。
8051の前身である8048は、初代IBM PCのキーボードに使用され、キー入力をシリアルデータストリームに変換してコンピュータの本体に送信していました。Intel 8049は、Sinclair QLで同様の役割を果たしていました。8048とその派生型は現在でも使用されています。ベーシックモデルのキーボード向け。
8031は、内部プログラムROMを持たないオリジナルの8051の縮小版でした。このチップを使用するには、8031がフェッチして実行するプログラムを含む外部ROMを追加する必要がありました。8031ベースの設計では、EAピンの通常の状態によって8051の内部ROMが無効になるため、8051チップはROMレスの8031として販売される可能性がありました。ベンダーが8051を8031として販売する理由は様々で、8051のROMに不具合のあるコードが含まれている場合や、単に8051の供給過剰と8031の供給不足などが考えられます。

8044 (およびROMレスの8344とEPROM搭載の8744)は、8051コアにSDLCコントローラを追加しました(特にビットバスアプリケーション向け)。[ 31 ]
8052は、オリジナルの8051を改良したバージョンで、 内部RAMが128バイトから256バイトに 、 ROMが4KBから8KBに 、そして3つ目の16ビットタイマーを搭載していました。現代の8051互換マイクロコントローラのほとんどは、これらの機能を備えています。
8032は、内部ROMプログラムメモリを搭載していない点を除けば、8052と同じ機能を備えていた。
8751は 、4KB ROMの代わりに4KB EPROMを搭載した8051でした 。不揮発性メモリの種類を除けば、両者は同一です。この部品はセラミックパッケージで提供され、ダイの上に透明な石英窓が設けられていたため、紫外線を使用してEPROMを消去することができました。関連部品としては、8752( 8KB EPROM)、8754( 16KB EPROM)、8758 (32KB EPROM)があります。
80C537 (ROMなし)と80C517(8KB ROM)は、自動車業界向けに設計されたCMOSバージョンです。主な機能強化は、新規および強化された周辺機器です。80C5x7は、フェイルセーフ機構、アナログ信号処理機能、強化されたタイマー機能、および32ビット演算周辺機器を備えています。その他の機能は以下のとおりです。
20社以上の独立系メーカーがMCS-51互換プロセッサを製造している。
MCS-51と互換性のある他のICまたはIPは、Analog Devices、[ 32 ] Integral Minsk、[ 33 ] Kristall Kyiv、[ 34 ]およびNIIET Voronezhによって開発されています。[ 13 ]
今日でも8051はディスクリート部品として入手可能ですが、主にシリコンIPコアとして使用されています。[ 35 ]ハードウェア記述言語ソースコード(VHDLやVerilogなど)またはFPGAネットリスト形式で入手可能なこれらのコアは、通常、USBフラッシュドライブから洗濯機、チップ上の複雑な無線通信システムまで、さまざまな製品の組み込みシステムに統合されています。設計者は、ARM Cortex-Mシリーズ、MIPS 、BA22などの32ビットプロセッサと比較して、サイズが小さく、消費電力が低いため、8051シリコンIPコアを使用します。
後継の 8051 コア設計では、オリジナルの MCS-51 命令セットとの互換性を維持しながら、パフォーマンスが向上しています。オリジナルの Intel 8051 は、受動抵抗プルアップで電力を消費する NMOS ロジックゲートの数を最小限に抑えるため、マシン サイクルあたり 12 クロックのマイクロコード サイクルを使用するマイクロコード エンジンでした。ほとんどの命令は 1 または 2 マシン サイクルで実行されます。一般的な最大クロック周波数 12 MHz では、オリジナルの 8051 タイプは、1 秒あたり 100 万のシングル サイクル命令、または 500,000 の 2 サイクル命令を実行します。アクティブ P チャネル FET プルアップを使用する CMOS への変更により、マイクロコードなしでコアを実現することが可能になりました。拡張 8051 IP コアは、マシン サイクルあたり 1 クロック サイクルで動作します。最大 450 MHz のクロック周波数で、8051 互換プロセッサは、1 秒あたり最大 4億 5000 万の命令を実行できます。

追加の 16 ビットデジタル信号プロセッサ(DSP) (例えばMP3やVorbis のエンコード/デコード用) を備え、毎秒最大 675 万命令 (MIPS) [ 47 ]と統合されたUSB 2.0インターフェース[ 48 ]または知的財産[ 49 ]として存在するいくつかのバリアントがあります。
1996年、インテルは最大6倍高速なバリアントであるMCS-151ファミリーを発表しました[ 1 ]。これは8051と完全にバイナリおよび命令セット互換性があります。8051とは異なり、MCS-151はパイプラインCPUであり、16ビットの内部コードバスを持ち、6倍の速度です。MCS-151ファミリーもインテルによって生産中止されましたが、バイナリ互換および部分的に拡張されたバリアントが広く入手可能です。
16 MB ( 24 ビット) アドレス空間と 6 倍高速な命令サイクルを備えた 8/16/32 ビット マイクロコントローラ 80251 は、 1996 年に Intel によって発表されました。 [ 1 ] [ 50 ] 8 ビット 8051 として動作でき、24 ビットリニア アドレス指定、8 ビット ALU、8 ビット命令、16 ビット命令、限定された 32 ビット命令セット、16 個の 8 ビット レジスタ、16 個の 16 ビット レジスタ (そのうち 8 個は 8 ビット レジスタのペアと重複)、および 10 個の 32 ビット レジスタ (そのうち 8 個は 16 ビット レジスタのペアと重複) を備えています。[ 51 ]
拡張命令セット[ 52 ] [ 53 ]と、より高性能な後継バージョン[ 54 ]を特徴としています。知的財産(IP)としても利用可能です[ 55 ] 。3段パイプラインです。MCS-251ファミリーもインテルによって製造中止されましたが、バイナリ互換で部分的に機能強化されたバージョンが多くのメーカーから広く入手可能です。
80251個の新しい命令にはx8~xFの範囲のオペコードが割り当てられ、以前は使用されていなかったオペコードA5をオペコード接頭辞として使用して、次の2つの方法のいずれかで選択されます。[ 56 ]: 4~13
一般的に、新しい80251命令は2バイト長( A5プレフィックスを除く)で、最初のバイトは演算を指定し、2番目のバイトは2つの4ビットレジスタオペランド、または1つのレジスタオペランドと4つの追加のオペコードビットをエンコードします。
{{cite book}}: CS1メンテナンス: 場所 (リンク)
ウィキメディア・コモンズにあるMCS-51関連のメディア