1カ月集中講座
IoTの波に乗るマイコン事情 第4回
~MPUとは違った世界を創るMCU/DSPのプレーヤー
(2015/1/29 06:00)
前回はMPU寄りのアーキテクチャを少し深めに紹介したが、今回はそのほかの(PC Watch読者は普段あまり目にしないような)アーキテクチャをご紹介したいと思う。ちなみにこれ、深掘りしすぎると、いくらでも書き続けられてしまうので、“昔は広く使われていた”(現在はメンテナンスモードに入っていて、新規設計は行なわれていない)ものは省かせていただく。
8bit MCU
8bitのディスクリートMCU 2大勢力はMicrochipの「PIC」とAtmelの「AVR」で、後はいくつかのベンダーが「8051」ベースの製品を出しているのが主なところだ。
先行したのはMicrochipである。同社は元々GI(General Instrument)という電機メーカー(もう分割され、複数の会社に買収されてしまった)のマイクロエレクトロニクス部門がスピンアウトする形で1987年に独立。1993年には株式上場も果たしている。元々GIは「CP1600」という16bitのプロセッサを保有していたが、これと組み合わせてI/O処理を行なうために開発されたPIC(Programmable Interface Controller)が大元である。Microchipは独立するにあたり、8bitにフォーカスすることを決断し、その戦略が当たった形であるが、この際にPICは“Programmable Interface Controller”の略とされ、次いで“Programmable Intelligent Computer”の略と言い換えられた。
最初の製品は「PIC16C5X」で、512バイトのOTP(One-Time Programmable)と25バイトのSRAMを持つ8bit CPUである。CPUコアは独自のRISCベースであり、命令数は33、1命令が12bit長というもの。パッケージは各種用意されており、開発はEPROMの消去用ガラス窓の付いたパッケージを使って行ない、完成したらプラスチックモールド(つまり消去用ガラス窓なし)のものにプログラムを書き込んで出荷という仕組みが可能になっていた(ほかにもマスクROMバージョンが用意されていた)。
これに引き続き、1992年には命令語長を14bit(命令数は35)に増やした「PIC16C7X」シリーズ、1993年には同じ14bit長の「PIC16C8X」シリーズと、より上位向けに命令語長を16bitに増やした「PIC17C4X」シリーズが登場する。PIC16C7/C8の14bit命令は、一応PIC16C5の14bit命令の上位互換を謳っているが、実はあまり互換性がない。1997年にはハイエンド製品として、命令長16bit/命令数58の8bit MCUという、いまいち謎の構成な「PIC17」を発表したが、これはあまりうまくいかず、1999年に同じく命令長16bit/命令数75の「PIC18」をリリース、これがハイエンドとなった。逆にローエンドはまず1998年に「PIC12C」シリーズが投入される。
これらの動きと並行して、OTPあるいはEEPROMからフラッシュメモリへの転換が1999年~2001年に行なわれ、一段落したところでさらにローエンドの「PIC10」が2004年に投入され、これでほぼ8bitのラインナップが完了した形だ。
もっとも、ラインナップとしてはPIC10/12/16/18の4つだが、未だに新製品が投入され続けており、現在販売中のものだけで360品種以上(パッケージ違いはここには含まない)、販売終了品と今後発売予定のものも合わせると軽く1,000品種に達する勢いである。2011年には、「100億個目のMCUをSamsungに納入」なんてプレスリリースが出ているほどである。同社の2014年度の売り上げは19.3億ドルで、そのうちMCU部門の売り上げは12.6億ドルとなっており、この半分以上が8bit MCUから成る、というあたりにその売り上げの大きさがお分かりいただけよう。
ただし同社の場合、「ラインナップを整理する」という考えが基本的にないようで、複数のシリーズで似たような構成・性能・周辺回路を持つ製品が平気で重複しており、使うときに悩んだりするのだが、逆にそのように“重複を恐れずにがんがんラインナップを追加した結果がこのシェアに繋がっている”と考えているように感じられる。
【記事修正】初出時、「PIC16C5X」のパッケージに言及した箇所で、EEPROMと記載しておりましたが、正しくはEPROMとなります。お詫びして訂正いたします。
これを追う勢いなのがAtmelである。同社は元々はEPROMのベンダーだったが、フラッシュメモリやFPGAに参入。1994年からはMCUの製造も手がける。当初は8051ベースの製品だったが、途中でARMのアーキテクチャライセンスを受けてARM9ベースのMCUなどもリリースしている。さて、そのAtmelの8bit製品の中核を成すのは、同社が1997年に発表した「AVR」シリーズだ。元々はノルウェーのトロンハイムにあったASICサービス会社(現在のNordic Semiconductor)が8bitのMCUを開発し、これをデザインチームごと引き抜いた形である。基本的にはPICとほぼ同じマーケットを狙うが、大きな違いとして、
- アーキテクチャがローエンドからハイエンドまで同一。PICの場合、同じシリーズの中でもバイナリ互換はもとよりソース互換さえない場合もあった。
- 基本1命令/サイクルの高性能。PICはシリーズによって性能がまちまちだった。
- アドレス空間がリニア。PICはシリーズによってアドレスの振り方が変わったりした。
- 製品が整理されている。
などの特徴があり、PICより使いやすいということで、後発にも関わらず人気を博した。
特に「Arduino」プロジェクトでAVRが採用されたことで、Arduinoや互換品に広く使われるようになった上、ArduinoでAVRの便利さと性能を知り、Arduinoではなく直接AVRを使うようになった開発者も少なくない。同社の2013年度の決算では、総売り上げが13.9億ドルで、このうちMCU部門が9億ドル。Microchipにはちょっと及ばないものの、随分健闘している(余談だが同社の場合、ここ数年の業績では2011年がピークで、この年はMCU部門だけで11.1億ドルを売り上げている)。
この両社の製品、ローエンドのPIC10/12やTinyAVRは省パッケージ・省電力を特徴としたもので、例えば火災感知器のように乾電池で10年持つ、自動車用のキーレスエントリのようにボタン電池で2年持つといった用途に現在も利用されている。特にAtmelはこの分野で、TinyAVR/RF/暗号化エンジンをワンチップ化した製品を大量にラインナップしている。他方ハイエンドはPIC18やAVR XMEGAの様に周辺回路てんこ盛りで、さまざまな周辺回路や通信回路を搭載しており、多機能センサーなどで利用されることが多かった。普及帯はPIC16やmegaAVRあたりで、Arduinoクラスの製品に利用される形だ。実際、IoTの場面においても、性能的にはこの普及帯があれば「通常は」大丈夫と言われている。
さて、8bitで一番メジャーなのはこの2つ、と言いつつも実際はほかにもある。まず何度か名前が出てきたIntelの8051だ。WikipediaのMSC-51のページを見ると74社が8051互換製品をリリースしていることになっている。が、実際にはこのリスト以外にもIPコアの形で8051コアをリリースしているメーカーはあり、それまで含めると80社近くが提供を行なっている(いた)と思われる。
今も、例えばCypressの「PSoC 3」、Silicon Labsの8bit MCUは比較的簡単に入手できるし、開発環境も提供されている。
もっとも、8051の場合、ディスクリートのMCUとしての使われ方よりも、むしろなんらかのデバイスの内部コントローラとして使われ続けている比率の方が今では遥かに多いかも知れない。例えばCypressの「EZ-USB FX2LP」は、8051コアを内蔵したUSB 2.0デバイス用のコントローラである。ほかにも10/100BASE-TのEthernetコントローラや、IEEE 802.11bのWi-Fiコントローラなどにも8051コアの採用例は多い。昨今ではハイエンド製品ではUSB 3.0やGigabit Ethernet、IEEE 802.11g/n/acといったより高速なインターフェイスに移ってしまったから、さすがに8051では性能的に追い付けないということでCortex-Mなどを使う例が増えているようだが、だからといって急にこうした古い製品のニーズがなくなるわけではないので、現在もまだ製品が出荷され続けている。
ちなみにIPコアの形で提供される8051コアも同じように、コントローラへの組み込みを狙った形で提供されるが、性能面での不足を補うためか“ぶっ飛んだ”デザインが多い。例えばポーランドのDCD(Digital Core Design)が提供する「DQ8051」というIPコアは、オリジナルのIntelの8051の20~26倍高速で、ASICのほか主要なFPGAで利用できる。その上位に当たる「DQ80251」に至っては66倍高速と称している。“既存のASICの処理性能をもうちょっと引き上げたい”なんて時に、プログラムはそのままで処理性能を引き上げられることから、まだまだ8051コアのニーズは根強いものがある。
同じように根強いのが「Z80」や「Z8」、「HD64180」などのニーズである。さすがにHD64180に関しては(日立の1社供給だったこともあって)最近ではあまり聞かなくなってきたが、Z80に関しては複数のセカンドソースが提供されたほか、IPの形でまだ流通していることもあって、一部のデバイスのコントローラにまだ採用されている。
また、これは日本国内だけの話であるが、パチンコの主基板は(技術的というよりも政治的な理由で)未だにZ80が使われている。またこのZ80を下敷きに、よりMCU向けにしたZ8コアは、開発元であるZilogの製品が未だに生き残っており、「Z8 Encore!」として新製品も出続けている。ただ同社は現在IXYS Corporationという、パワー半導体などを主体にしたメーカーの子会社になっており、それもあってかラインナップはモーター制御などを重視した構成のものも多い。
余談だが、同社は第2回でもちょっと触れた通り、Samsungの4/8bit MCUのラインナップを抱えるほか、2012年にはなぜか8051まで製品ラインナップに加えており、こうした古いMCUで動いているアプリケーションを全部抱え込もうという意図が明確である。
これ以外にも有名どころならCypressのM8Cコアを使った「PSoC1」、STMicroelectronicsの「STM8」シリーズ、台湾Holtek Semiconductorの「HT RISC」コア。そして、国内ではルネサスエレクトロニクスの「78K」シリーズやラピスセミコンダクタ(旧OKIセミコンダクタ)の「ML610xxx」シリーズ、エプソンの「S1C88」シリーズ、東芝の「TLCS-870/C1」、パナソニックの「MN101」など、独自のアーキテクチャに基づく製品が山ほどあり、それぞれ独自のユーザーとアプリケーションを抱えてはいるものの、広範に使われているとはちょっと言いにくい状況である。
16bit MCU
続いては16bit MCUである。元々は8bit MCUの高性能版という形で伸びたマーケットであるが、昨今は「Cortex-M0」を初めとする「省電力32bit MCU」が16bitの性能レンジを侵食しつつあり、この結果としてむしろ「32bitより省電力」を売り文句にする製品が増えてくるという、不安定な状況に陥りつつある。また、メーカーの中には16bitを提供しないところも多い。例えばAtmelは、8bitのAVR XMEGAが「16bit MCU相当」という位置付けになっており、16bitコアは存在しない。あるいはFreescaleは自動車向けにのみ「S12」というアーキテクチャに基づく製品を現在も販売しているが、汎用向けは8bitと32bitになっているという具合だ。
さて、このマーケットでは意外にも「支配的なメーカー/アーキテクチャ」は存在しない。とりあえず比較的メジャーなアーキテクチャということで順に挙げると、まずは8bitの王者だったMicrochipの「PIC24」だろうか。PIC24は少し面白く、アナウンスそのものは2001年に「dsPIC」として行なわれ、これが2004年に「dsPIC30」として発表される。次いで2005年には高性能版の「dsPIC33」も発表され、その後で同2005年に「PIC24F/H」という形で投入された。dsPICというのは後で説明するDSPを16bit MCUと組み合わせた構成で、同社は16bit MCU単体ではそれほど魅力がないと判断したのかも知れない。
8bitのPICはシリーズ名と命令長が一致していないが、PIC24は24bit命令から来ており、ただし命令は32bitで格納される。この際上位8bitは“Phantom Byte”として0で埋めるという、アドレス的にはややもったいない使い方になっている。命令数は相応に多いが、8bit PIC(特にPIC18)の命令と相似のものに、PIC24のみの3オペランド命令を加えた形になっており、やや混乱気味である。
ラインナップで言えばPIC24Fは超低消費電力向け、PIC24H(と後から加わったPIC24E)は高性能向け、といった扱いになっている。例えばPIC24Eのハイエンド製品である「PIC24EP512GU814」は、70MIPSの処理性能と、512KBフラッシュ、52KB SRAMを搭載し、32ch ADC(A/D Converter)やUART/SPI/I2C/USB/CANを合計13ch、PWMモジュール16個、16/32bitタイマーを合計13個という重厚な構成になっている。
次はTI(Texus Instruments)。TIはかつては8051ベースのMCUなどを販売していたが、もう8bitは全て廃番となっており、現在では16bitの「MSP430」が同社の中ではローエンドの扱いになっている。
MSP430シリーズそのものは、動作周波数は最大でも25MHz、フラッシュメモリが最大512KB、SRAM最大66KBということで、ハイエンドの8bitよりもむしろ目劣りする程度。さすがにほとんどの命令は1サイクルで実行できるから、25MIPSという計算だ。むしろ省電力性の方が売りであり、0.9V駆動の「MSP430L092」の場合、消費電流は稼動時に45μA/MHz、スタンバイ時で6μA、スリープ状態だと3μAに抑えられ、復帰は5μs未満とされる。8bitでは、例えばAtmelの「picoPower」と呼ばれる省電力技術を搭載した「ATtiny13A」という製品の場合、稼動時に190μA/MHz、待機状態で24μA/MHzで、これでもかなり少ない部類には入るのだが、MSP430はそれを上回る省電力ぶりである。またMSP430の中には、米Ramtron(2012年にCypressが買収)が開発したFRAMを搭載した製品もあり、フラッシュメモリの代わりにFRAMを利用することで性能改善と消費電力削減を実現できているものもある。さらに、MSP430コアに13.56MHzのRFトランシーバを統合した「RF430」、あるいはZigBee用の1GHz未満のRFトランシーバを統合した「CC430」といった製品もあり、このCC430はIoTのセンサーノードやRF4CEを使ったリモコンのコントローラなどに向けた低価格ソリューションとして同社は売り込んでいる。
国内の例では、ルネサス エレクトロニクスは、旧日立系列の「H8S」/「H8SX」というコア(独自の16bit CISC)と、「SH」シリーズのRISCコア(アドレス/データ長は32bitなので、これだけ見れば32bitコアということになるが、命令が16bitの固定長となっており、これをもって16bitに分類する場合もある)ベースの製品が現役であり、旧NEC系列では78Kシリーズを16bit化した「78K0」コアがある。旧三菱電機系では「M16C」/「R8C」コアがあり、この4種類のコアを利用した16bit MCUが引き続きラインナップされている。また、78K0とR8Cの後継製品として2010年に発表された「RL78」というシリーズもあり、同社では16bitは基本的にRL78に集約させて行きたいようだ。
さて、このあたりまでが比較的メジャーというか汎用という位置付けであるが、ではややマイナーあるいは特定用途向けというところでは、海外では、
- Ensilicaの「eSi-1600」(16bit MCU IP)
- Maxim Integratedの「MAXQ」
- Pyramid Semiconductorの「PACE P175x」
- RDC Semiconductoの「R88xx/R11xx」
- Spansion(旧富士通)の「F2MC-16」シリーズ
- STMicroelectronicsの「ST10」
- Unicore Systemsの8086/80186 IP(リンク先はPDF)
- Zilogの「Z16/ZNeo」
という程度である。あとは(8bitのところで紹介した)DCDの80251のIPコアくらいだろうか。RDCとUnicoreは80186互換であるし、SpansionやSTは既にメンテナンスモードに入った製品だから、独自の現役コアは案外に少ないことがお分かりいただけよう。
国内では
といったものがあるが、これらも特定顧客/用途向けといった感じだ。
32bit MCU
ARMとMIPS/PowerPC/x86は既にご紹介してしまったから、残っているのはいずれもマイナーあるいは特定用途向けということになる。とりあえず列挙していくと、
- Atmel「AVR32 UC3」: 米Atmelの提供する独自32bitコアと、これを使った32bit MCU。ただ昨今では同社は汎用品にはARMベースMCUを薦めており、AVR32コアはASICなど向けだそうだ。
- Cortus「APS/FPSシリーズ: 仏Cortusの提供する32bit コアIP。アプリケーションプロセッサにもMCUにもなるものだが、もっぱらASICの組み込み向けコントローラとして使われることが多い。
- Ensilica「eSi-3200」: 低コストの32bit RISC MCU IP。ASICとFPGAの両方をサポート。ASICの場合90nmプロセスで700MHz駆動、15Kゲートで消費電力は18μW/MHzと控えめ。性能は2.44CoreMark/MHzとされる。上位にもう少し性能を上げた「eSi-3250」もある。
- Freescale「ColdFire/ColdFire+」: ARMの所でもちょっとだけ触れたが、MC68Kと命令互換のRISCコアは、以前は同社のS08という8bitコアと対でFlexisというシリーズを形成、8bit→32bitというマイグレーションパスを提供するのに利用されていたが、現在は特定用途もしくはASIC向けとされ、汎用にはCortex-MベースのKinetisが推奨されている。
- Infineon「TriCore」: Infineon独自開発の32bitコア。MPUとMCU、DSPの3種類のコアが1つのプロセッサに入っているところからこの名前がある。同社はこれをさまざまな用途向けに展開したものの、現状残っているのは自動車向けのみで、しかもそれも次第にシェアが減りつつある。
- パナソニック「AM32」: パナソニック独自の32bitコア。3/4段の可変パイプラインを持つ独自のものだが、同社以外で使われているケースは目にしたことがない。
- ルネサス エレクトロニクス: 16bitと被るが、旧日立系の「SuperH」、三菱電機系の「M32R」、旧NEC系の「V850」というコアに加え、SuperHとV850の後継である「RH850」および独自のCISCコアである「RX」シリーズと、32bitだけで大別して5種類もの製品系統があり、これに加えてARMベースの「RZ」シリーズまで提供されている。
- Spansion「FR」: 元々は富士通で開発された独自のRISCコアをベースとした汎用MCUだが、既にメンテナンスモード入りしている。
- TI「C2000」: Piccoloという愛称を持ち、モーター制御や機能安全向けに特化させる形でアプリケーションを展開している。
- 東芝「TLCS900/H1」: 一応汎用品だが、同社もARM MCUに力を入れている関係で、ラインナップも少なく、かなりメンテナンスモードに近い。
といったあたりか。IPベースで言えばもう少し色々あるのだが、MCU用というよりはMPU用に近い(例えばOracleのOpenSPARCや、ESAのLEONなど)こともあり、リストからは割愛した。また主要なFPGAメーカーは全て自社製品で動くCPU IP(AlteraのNios II、LatticeのMico32、XilinxのMicroBlaze)を提供しているので選択肢は多い。ただ、選択する場合、判断基準は絶対性能よりもコストやソフトウェアサポートの方が重要視されがちで、そのあたりで勢いのあるARMが選ばれているようだ。
VLIW/DSP
「MCUの用途にVLIWが使われるのか?」という疑問はあるかも知れないが、実際にそういう構成の製品が存在する(SpansionのFR-Vなど)からちょっとびっくりではある。VLIW、DSPともに汎用には向かないというべきか、特定用途向けになっている。PC Watch読者の方はVLIWそのものはご存知であろう。古くはTransmetaの「Crusoe」や「Efficeon」が採用したもので、現役製品ではIntelの「Itanium」がVLIWである。同時に複数の命令を処理できる仕組みとなっており、命令の供給そのものが複数の命令をパックする形で渡される仕組みだ。
実はこのVLIWはDSPにも使われる。DSPはDigital Signal Processorの略で、簡単に言えば信号処理を専門としたプロセッサである。昨今で言えば、音声の処理(Bluetoothヘッドセットやスピーカーなど)にDSPは欠かせない。もっと言えば、音声認識や(Kinectのような)モーション認識は、まず大量のデータにフィルタを掛けて特徴抽出などを行なう必要があるが、こうした処理にはDSPが非常に適している。
そんなDSPであるが、内部はMAC(積和演算)に適した構造になっている。MACとは“Y=A×X+B”のように、乗算と加算を行なうもので、フィルタ処理ではこれを非常に多用するのだが、同時に複数の積和演算をやらすためには、複数のMACユニットを同時に動かす必要がある。このためには命令そのものはVLIW方式で供給するのが適しているので、ほとんどのDSPはVLIW方式で実装されている。
ちなみにDSP演算そのものはMCUにも取り込まれており、Cortex-M4のDSP演算ユニットというのは1サイクルで積和演算ができるように配慮されたものである。ほかにも、8~32bit MCUにアクセラレータ風に16bit×16bitあるいは32bit×32bitのMACユニットが追加されたMCUは多い。ただこれらは1サイクルに1つしかMACが行なえない。対してVLIW方式のDSPプロセッサは1サイクルに4~16個ものMACが可能なものも存在する。最近ではデジタル電源の制御やモーターの細かな制御などにもDSPを使うケースが増えてきており、こうした特定用途向けのVLIW/DSP MCUが数多く存在する。こちらも列挙していくと、
- ARC CPU: ARC International(2010年にSynopsisに買収)が提供する32bit CPU/DSP IP。カスタマイズの範囲も広いので、DSPなしの32bitコアとすることもできるし、DSPを重視した構成にすることも可能。ローエンドのARM EM4は32bit MCUにぴったりな構成であり、オプションでDSPユニットも追加できる。
- AnalogDevices(ADI)「Blackfin」: 動作周波数は200~600MHzと高速で、最大2,400MMAC/secの処理性能を持つ。オーディオや自動車、セキュリティ、監視、テスト、プロセス制御など幅広い用途向けの汎用製品。
- CEVADSP-Core: CEVAはオーディオ向けを主にターゲットとしたDSPコアのIPベンダー。「TeakLite」は低コスト/低消費電力向け、「CEVA-X」が性能とコストのバランスを取ったもの、「CEVA-XC」が絶対性能を高めたものということで、特に携帯電話やBluetoothヘッドセット、あるいはオーディオ機器などのベンダーで多く採用されている。
- Freescale「StarCore」: 元々は単体DSPとして製品を提供していたが、現在は3.5G/4Gの基地局向け用途が主となっている。
- FreescaleDSC: DSCはDigital Signal Controllerの略で、主にモータ制御用にDSPコア+モータ制御用周辺回路という形で提供される。
- Microchip「dsPIC30/33」: 先ほどPIC24のところでも触れたが、元々は16bitのMCUコアに17bit×17bitのMACユニット(乗算は40bit精度)を搭載したもの。今となっては絶対的な処理性能では見劣りするが、信号処理と通常のデータ処理の両方がそれなりの速度で動く構成となっている。
- tensilica DPU:現在はCadenceに買収されているが、同社はVLIWベースのDSP IPを1997年から提供している、ある意味老舗である。同社の特徴は、顧客が構成を自由に変えてプロセッサを構成できることで、実際「Xtensa」やAudio DSPなど、ある程度特定用途向けにカスタマイズが済んだ形のIPも提供されているが、フルにカスタマイズすることも可能である。古いところでは、Stretchの「S6」がXtensa LXを利用していた。最近では、AMDのGPUに搭載されたTrue Audioの正体がTensilicaのAudio DSPベースであることが知られている。
- TI「C5000/C6000」: DSPの草分けとも言えるメーカー。TIが1983年にリリースした「TMS32010」は、世界初というわけではないが、広く成功した初めての製品である。現在C5000がオーディオや携帯機器向けの省電力用途に、C6000がモーター制御や電力制御、デジタル無線などに利用される。さらに上位には「KeyStone」というものがあり、産業用途向けカメラや、3.5G/4Gの基地局向けに提供される。
- Spansion「FR-V」: 元々は富士通で開発されたRISC風の可変長VLIWプロセッサコア。命令語長は32bitで1~4wayまで用意されており、Spansionによる買収に伴いFR-VもSpansionのラインナップに加わったが、完全にメンテナンスモードに入っており、既に製品ページすら存在しない。
あたりが主要なところだろうか。
以上の通り、今回は延々と製品を列挙する記事になってしまったが、実に多くのプレーヤーがこのマーケットにひしめいていることはご理解いただけたかと思う。ちなみにこれでも、結構省いたものはあるのだが、それらも含めて全て列挙していくとキリがない。中には既に会社がないものまであるからだ。
このように組み込み向けは、通常のPC向けやスマートフォン向けのCPU/SoCとはまた違った世界になっているのである。