今回は、MCUを語る上で欠かせない存在であり、出荷数は累計数百個に上るであろう「PIC」シリーズを語る。とりわけ「PIC16」は、アーキテクチャどころか製品としてもまだまだ現役である。
アーキテクチャどころか製品としてまだ現役なのがMicrochip Technology(以下、Microchip)の「PIC16」だ。そもそも製品が多過ぎて、同社のPIC MCUのページを見に行っても全製品の一覧がどこにも無い。データシートを見ると、PIC16だけで155個。PIC全体で言えば573個とかになっているが、ここには「dsPIC」とか「PIC24/PIC32」なんかも入っているから、8bit PICだけで言えばもっと少ない(試しに"PIC1"で検索したら264個だった)が、そんな訳で十分現役のアーキテクチャである。その一方で、例えばポーランドのDCDはPIC16互換IP(Intellectual Property)を提供しているし、Lattice Semiconductorも自社のFPGA向けにPIC16互換のソフトIPを提供するなど、幅広く利用されているのが分かる。このPIC16、最初に登場したのは(先月ご紹介した)「Intel 8048」と同じく1976年である。
もともとPIC16というか、そのPICの元になったPIC1650を開発したのは、今は無きGI(General Instruments)のMicroelectronics Divisionである。1975年、GIはHoneywellと共同で、「CP1600」という16bit Processorを開発していた。中身は非常に「PDP-11」に近いというか、だいぶマネをした部分があったらしいが、PDP-11そのものと命令互換というわけではない。このCP1600、Honeywellが開発に絡んでいたことからも分かるように制御システム向けとして開発され、Honeywellはこれを利用して制御システムを開発していたらしいし、GI自身も「GIC 1600」というマイクロコンピュータを製造・発売していた(図1)。もっとも出荷数量という意味では、このCP1600の派生型である「CP1610」がMattel Electronicsの「Intellivision」という家庭用ゲーム機に採用された。Intellivisionは一時期は全米のシェアの20%のシェアを獲得し、1983年までに375万台が発売されたそうなので、それだけCP1610が出荷されたことになる。
ちなみにCP1600やCP1610は専用の入出力回路を持たず全部Mapped I/Oになる関係で、外部にI/O用のチップが用意される(図2)。ここで
となっている。ちなみにこの"PIC"は「この時点では」"Programmable Interface Controller"の略である。
さて、GIはこのPIC1640をベースに「PIC1650」を1976年に発表する。といっても両者の差はほとんどなく、I/Oピンの数が増えただけである。このPIC1650はもちろん、PIC1640同様にCP1600/CP1610の周辺チップとして利用する事もできたが、Intellivisionとは無関係なPIC1650だけで利用するような用途が次第に増えていったこともあり、1983年には7製品に増えている(ついでにPICの意味も"Programmable Intelligent Computer"に変更された)。簡単にスペックをまとめると
品種 | ROM容量 (bit) |
RAM容量 (bit) |
Cycle Time (マイクロ秒) |
Interrupt | Package |
---|---|---|---|---|---|
PIC1650A | 512×12 | 32×8 | 4 | No | 40pin |
PIC1654 | 512×12 | 32×8 | 2 | No | 18pin |
PIC1655A | 512×12 | 32×8 | 4 | No | 28pin |
PIC16C56 | 512×12 | 32×8 | 4.5 | No | 28pin |
PIC1656 | 512×12 | 32×8 | 4 | Yes | 28pin |
PIC1670 | 1024×13 | 32×8 | 2 | Yes | 40pin |
PIC1672 | 2048×13 | 32×8 | 2 | Yes | 40pin |
ということになっている。ここで注目すべきはROM容量である。PIC1640とかPIC1650ではOpCodeが12bitで設計されていたが、PIC1670/1672ではOpCodeを13bitに拡張すると共に、Register Spaceを64Byteに拡張(うち16BytesはSpecial Register、48ByteがRAM)、いくつか命令を追加している。また初期のPIC1650を始めとする製品は外部のInterruptを受け取る機能が無かったが、PIC1650やPIC1670では外部Interruptのサポートが追加されるなど、同じファミリーながら割と根本的なところでコアの構造に手が入っているのが特徴である。特にこのOpCodeを勝手に拡張というのは他のメーカーでは見られない部分である。まぁ当時はBinary Compatibilityがそこまで重視されていなかったということだろう。
Copyright © ITmedia, Inc. All Rights Reserved.