検索
連載

今なお現役、1000種以上が存在するIntel空前の長寿MCU「8051」マイクロプロセッサ懐古録(2)(3/5 ページ)

昔懐かしのプロセッサを取り上げ、その歴史をたどる本連載。今回は、20年近く前に生産が終了しているにもかかわらず、今なお使われている「Intel 8051」を取り上げる。

Share
Tweet
LINE
Hatena

ランチミーティングが「Intel 8051」のきっかけに

 こうして売り上げが立つと、当然後継製品を開発するための資金も組織も準備しやすくなる。1977年末には、早くもこの8048の後継製品のプロジェクトがスタートする。それがIntel 8051になる訳だが、その8051のアーキテクトであったJohn Harrison Wharton氏(2018年逝去)がアーキテクトになった、というか8051に関わり合いを持ったきっかけが面白い。

 当時Wharton氏はさまざまな企業に8048や8085を利用したシステムを売り込むためのプロトタイプ作りをしていたが、1977年12月半ばにうっかり財布を自宅に忘れて出社。昼飯が食えないというので当時の上司だったLionel Smith氏に昼飯を集ろうとする。ところがSmith氏は、ちょうど8048後継製品について議論するランチミーティングに参加しようとしていた。そこで「ミーティングにはサンドイッチが出るし、どうせいつも余るから、後ろの方に隠れて残ったものをかじっとけ」とWharton氏をミーティングに連れてゆく。そこでWharton氏はサンドイッチを食べながら後継製品のアーキテクチャに関する議論を聞いていて、より良いアイデアを考え始める。最終的にSmith氏はWharton氏に新しいアーキテクチャの提案を求め、これに応えて提出したものが議論の候補に加えられて最終的に採択されることになった。こうしてWharton氏は8051の設計に関わる事になったというわけだ。

 さてその8051と8048であるが、最大の違いはアドレス管理である。8048は12bitアドレスだったが、8051では16bitアドレスに拡張された。しかも、Data Memory/StackとProgram Memoryで別空間にするという8048の特徴はそのまま継承されたから、トータルで128KBを利用可能という、競合の8bit CPUに対して大きなアドバンテージになる特徴を得た。命令セットに関しては、基本的な考え方は8048と近いが、例えば8048では省かれた減算とか乗算/除算が追加されているし、アドレッシングモードも若干異なる。あるいはJump命令もLJMP(Long Jump)/SJMP(Small Jump)/AJMP(Absolute Jump)と3種類も用意されたりするなど、変更が多い(Call命令も同じだがSCALLは無い)。なので基本的な命令セットは「似てる」とはいえBackward Compatibleは無かったので、8048→8051への移行の際にはコードの書き直しの必要があった。

 ただ実は8048シリーズも派生型が増えてきて、中には周辺回路とかを強化したものも出てきたのだが、その回路用の命令を増やそうにも既に命令を追加するための余地が無く、結局あまり使われていない命令を廃止して新規命令に充てたなんてケースがあり、厳密に言えば同じ8048シリーズの中でも命令の非互換性があったりしたため、8048へのBackward Compatibleはあまり重要視されなかったようだ。そして8051ではより強力な命令が追加されたことで、コードサイズと処理時間の両方が削減できた。具体的にはブール値処理命令が17個追加されている。8bit MCUだからデータの処理単位は基本Byteになるので、特定ビットの操作を行うならそのbitを含む1Byteを読み込み→論理演算でそのbitを操作→そのbitを含む1Byte書き出し、という流れになるのが普通だ。ところが8051では1bit単位での演算が可能な命令を17個追加。いちいち読み出し→変更→書き出しをしなくても済むようになった。これで、特に機器制御などのプログラムが非常に簡単になった。

 具体的には

命令サイクル

という具合に命令数と命令のバイト数の両方を削減できる。ちなみに(2)とか(3)の場合、8048では6cycleかかるのが、8051では1cycleなので6倍の高速化であるが、実際には動作周波数の違いもあって処理時間でいうと15倍の高速化になるという次第だ。ちなみにこのcycle数だが、Application NoteのInstruction Set Description(図5)を見ると、例えばMove A,Rn(左下)は1 Byte/1 Cycleと表記されているのに、Datasheet(図6)を見るとMOV A,Rn(左上)は1 Byte/12 Oscillator Periodと表記されている。要するに8051は入力したクロックを12分周して動いているのと同じである。実際のところ、当時の事だからパイプライン構造などは実装されていないので、命令の処理には最小で入力クロックの12cycle、ものによってはこの倍数が必要になる。そこでデータシートではこの12cycleの入力クロックを持って1cycle(実行cycle)と表記していたわけだ(だからこそ、データシートではOscillator Periodなどという見慣れない表記を採用していた)。上の例で示したcycleというのは、実際には命令cycleを意味しており、実際のクロック数は12倍となる。

An Introduction to the Intel MCS-51 Single-Chip Microcomputer Family
図5:An Introduction to the Intel MCS-51 Single-Chip Microcomputer Family(May 1980)より[クリックで拡大]
8051 Single-Chip Microcomputer Architectural Specification and Functional Description
図6:8051 Single-Chip Microcomputer Architectural Specification and Functional Description(May 1980)より抜粋。ちなみに次のページにもこの表は続いている[クリックで拡大]

 実はこれは8048も同じ事で、1個の命令cycleは10 Clock cycleに相当していた。8048は4MHzのClockを利用するが、内部的には400KHz駆動だったわけだ。8748-6は6MHzとなっているが、内部的には600KHz駆動でCycle Timeは1.67μs相当になる。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る