人知れず消えていったマイナーCPUを語ろう(第9回):アナログ半導体メーカーが作った稀有なMCU「Maxim MAXQ」の行方

テクノロジー Other
大原雄介

猫に傅くために原稿を書いて日銭を稼いでいる毎日。元は組み込み系のエンジニアだったのに、もうずいぶん遠い所まで来てしまった。

特集

コンピュータの歴史を暗部も含めてていねいに掘り起こすことで定評のある大原雄介さんによる連載9回目。今回は、Analog Devicesに買収されたMaxim Integratedというアナログ半導体メーカーによる「Maxim MAXQ」というチップについて。



Maxim Integratedという会社はアナログ半導体で大きなポジションを得ていた会社であり、現在はAnalog Devicesに買収されてしまったものの、同社の残した功績は大きい。そんなMaxim、末期(=買収直前)にはArmのCortex-M3/M4ベースのMCUをいろいろな用途向けにリリースしていたが、それ以前に同社独自のMAXQと呼ばれる16bit(?)MCUをリリースしていたことは余り知られていない。

Maxim Integratedは1983年に創業された。創業メンバーはJack Gifford、Fred Beck、Dave Bingham、Steve Combs、Lee Evans、Dave Fullagar、Roger Fuller、Rich Hood、Dick Wilenkenの各氏で、知る人ぞ知るというか当時の半導体業界としては錚々たるメンバーが集まって結成された。

いずれも電気回路とかCMOSデバイスなどの分野の重鎮とでもいうべきメンバーであり、このメンバーが集まった時点で成功間違いなしというのは後から見て思えることで、当初はセカンドソースビジネスを中心にしていた。

ただ1987年にリリースされたRS-232のドライバであるMAX232は大ヒットし、同社の業績を大きく引き上げる。この効果もあってか、1988年にはIPOを果たす。

そんな同社であるが、1990年台に入ってからM&Aを利用しての規模拡大もちょくちょく行っている。最初に買収したのはテクトロニクスのIC部門で、オレゴン州のBeavertonに拠点を置いていたWireless RF向けの高速バイポーラや光ファイバー向け製品を手掛けていた。これが1994年のこと。

1997年にはIC WorksからサンノゼにあったウエハーFabを4200万ドルで買収。そして3つ目の買収が2001年4月に行われた、テキサス州のDallasに拠点を置くDallas Semiconductorの買収である。

Dallas Semiconfuctorは1984年創業で、主にMixed-SignalのCMOS回路に強みを持っていた。PC業界も無縁ではなく、2000年以前のマザーボードには同社のRTC(Real Time Clock)モジュール(Photo01)が広く搭載されていた。

Photo01:このモジュールに電池まで入っていたが、ただ電池が切れるとモジュールごと交換になり、これが大変であった。結果2000年頃にはもっと小さな(電源非内蔵の)RTC+ボタン電池という組み合わせが一般的になった。
出典はWikipedia。(c)Raimond Spekking / CC BY-SA 4.0 (via Wikimedia Commons), CC BY-SA 4.0に則り利用

ただDallas Semiconductorはこれとは別にMCUビジネスも手掛けていた。同社が最初に開発していたのは8051互換となるDS80シリーズで、命令セットは8051と完全互換ながら命令処理速度を平均2.5倍高速化。更に動作周波数を33MHzまで引き上げ、オリジナルの8051なら82.5MHz相当の性能が得られる(Photo02)というものだった。

Photo02:DS80コアを搭載したDS80C310のデータシートより。オリジナルが1命令の実行に最大12cycle掛かるのに、DS80コアだと4cycleで済む(のでピークで3倍高速)とされる。これはMaximの買収後に出されたデータシートなので、両社のロゴが踊っている

これがそれなりに高速であるのは間違いないのだが、所詮は8bit MCUであって、時代のニーズはより高性能なプロセッサを求める方向にあった。そこでDallas Semiconductorは独自アーキテクチャに基づく16bit RISCコアの開発をスタートする。ただこれが完成する前に買収の話が持ち上がり、完成したのはMaximの傘下に入った後の2004年のことであった。

Transport Triggered Architecture

さて、このMAXQは非常に特異というか、珍しいアーキテクチャである。TTA(Transport Triggered Architecture)という言葉はあまり馴染みがないだろうが、端的に言えば「内部バス(Transport)から直接命令を実行できる」仕組みである。なんじゃそりゃと思うかもしれないのでもう少し説明したい。

典型的なプロセッサの場合、周辺回路がI/Oを完了したとかタイマーに設定した時間が到来した時には、I/Oバスに対して割り込みを発生させる。この割り込みはCPUのInterrupt Handlerに伝えられ、Interrupt Handlerはこれを受けて現在実行中の処理のContextをStackあたりに保存した上で、ISR(Interrupt Service Routine)に飛ぶ。

ISRの中で、具体的にどんな割り込みが発生したのか(≒どのデバイスから割り込みが入ったのか)を特定、そのデバイスの状態を確認して、緊急性の高い処理(例えば通信ポートなら割り込みのフラグを落として受信が行われた事をデバイスに通知すると共に、受け取ったデータを内部のバッファに格納する)を完了したらISRを抜けるといった具合だ。

これに対してTTAは、デバイスが作業を完了したら、割り込みを発生する代わりに、Trigger Unitの当該ポート(このポートは通常デバイス毎に用意される)にデータを書き込む(送信とかタイマー通知であれば、ステータスを書き込む格好だ)。このTrigger Unitへの書き込みで、所定の命令の実行を開始するという仕組みである。要するにISRの起動とかの処理を省ける、というのがこのTTAの特徴である。

もちろんMAXQにはInterrupt Vectorそのものは用意されており、ISRを利用してのハンドリングも可能だが、これは外部回路などに向けたものであり、内蔵される周辺機器に関してはISRを経由せずに直接Callback Routingに相当するものを稼働させられるという仕組みだ。

ただMAXQの実装は完全なTTAではない。本来TTAでは、そのポートの数だけ実行ユニットが並んでる実装を想定している。ある種のVLIWに近い実装だが、これは流石に実装に無理があると思ったらしく、同時に動く実行ユニットは1つであり、これをマルチプレクサを入れることで解決している。MAXQ Family User's Guideの表紙(Photo03)にある図は、要するにこのTTAのアーキテクチャの実装の有様を意味しているものと思われる。

Photo03:ついでに言えば、TTAは本来ポート毎に最適化した実行ユニットが用意される訳だが、MAXQでは全ポート(と通常のプログラム)の実行が出来るような汎用的な構成になっている

CPUコアの構造そのものは比較的穏当というか、シンプルな構造である(Photo04)。

Photo04:上半分のSystem Modules/Registersはまぁまだ普通(Loop Countersとかあまり見かけないものはあるが)だが、下半分のPeripheral Modules/Registerがあまり普通ではない。IIR経由でInterrupt Logicに繋がる線もあるが、Src/Dstポートを経由して内部バスの、Instruction Decodeとか各種実行ユニットに直接つながっているのはかなり珍しい

ちなみにパイプライン構造にはなっておらず、ただしSingle-cycle Execution(1cycleで実行可能)とされている。また命令も16bitの固定長と非常にシンプルで、デコードの手間を大幅に省いている。このデコード段もちょっと独特である。Photo05はその16bit命令のフォーマットであるが、

Format(Bit15):0ならばSourceフィールドは即値、1ならばレジスタ指定
Source(Bit 0~7):演算対象となるソース値。即値orレジスタが利用できる、というのはFormatで示した通り、

Destination(Bit 8~14):処理対象。実際にはこれはレジスタ、あるいはModuleの指定となる

という、ある意味スッキリした構成である。

Photo05:このDestinationが事実上のOp Codeになっている、ということを理解するまでだいぶマニュアルを読み込む羽目になった。結構変だ

さて「これOp Codeどこに入るの?」と思われた方は鋭い。実はDestinationが事実上のOp Codeに相当する。実はMAXQの場合、全ての命令は基本的にMoveである。だから例えばadd A[4]という処理、アセンブラ的にはAcc = Acc +A[4]になるのだが、実際はAccモジュールに対してA[4]というレジスタ指定の情報をMoveしていることになる。

この情報を貰ったAccモジュールは、自身のレジスタにA[4]の値を追加し、その結果を再び自身のレジスタに保管する、という仕組みである。こうした実装は、実際はアセンブラに遮蔽されてプログラマからは見えないが、実装としてはかなり独特なのが判る。ただそんな訳でデコードは恐ろしく簡単であり、結果として極めて迅速に稼働するという訳だ。

この方式の欠点は、命令を無尽蔵に増やせない事だ。命令の上限は、Destinationで指定できる7bit=128個に限られる。実際にはDestinationのうち、モジュール(≒命令)の指定は4bit、残り3bitはその際のレジスタ指定に利用されるので、命令数は実質16種類、利用できるレジスタは8つに限られる。ただまぁこれ汎用プロセッサとしては制限が多いが、MCU向けとしては必要十分という見方もできる。

ちなみに冒頭でMAXQを「16bit(?)MCU」と書いたが、MAXQには8bit相当のMAXQ10と16bit相当のMAXQ20の2種類のコアがある。どちらも命令そのものは今説明した16bitなのだが、MAXQ10はALUの幅が8bit、MAXQ20は16bitとなっており、これに伴いレジスタの幅もMAXQ10は8bit、MAXQ20は16bitである。

命令フォーマットでSourceが8bitなのにどうやって16bitの即値を入れるんだ?と思うかもしれないが、それは2回命令を発行し、上位8bitと下位8bitを別々に入れてから演算を行う、という仕組みになっている。

この違いはメモリマッピングにも表れている。MAXQはSRAMとFlash Memoryを区別しない構成になっており、MAXQ10はそんなわけでこれを素直に実装している(Photo06)一方、MAXQ20はCDA(Code Access Bit)なる仕組みを利用して、Flashの内部をバンク切り替えするような仕組みも用意されている(Photo07)。

Photo06:メモリ空間そのものは128KB(64K 16bit Word)用意されている。最近の8bit MCUだとこれでは足りないとかになるが、この時代としては十分である

Photo07:このCDAを使うかどうかの制御がUPA(Upper Program Access)で、UPA=1にするとCPUからPhysical Data Memoryがアクセスできなくなる

ちなみにMAXQ20の方は、さらに幾つかメモリマッピングモードを持っているのは、多分16bitアプリケーションではメモリが不足するのが見えており、でもMAXQ10との互換性などもあってメモリ空間を簡単に増やせないことへの対策だったのだろうと想像される。

他にも特徴は幾つかある(例えばスタックは16レベルのH/W Stackが用意されており、ユーザーメモリ空間にStackを積めないとか)が、性能そのものにDallasというかMaximはそれなりに自信があったらしい。

「MAXQ命令セットアーキテクチャと RISCのベンチマーク比較」という資料に、MicrochipのPIC16とAtmel AVR、それとTIのMSP430と性能というか性能効率を比較した結果が示されているが、最終的な結論はこちら(Photo08)である。

Photo08:性能/消費電力比では競合を圧倒しているという話だが、CPUコアだけで性能が決まる訳では無いのがこの手の話で難しいところ

アナログ半導体会社の限界

少なくともDallasとMaxim的には、狙っていた通りの性能を出したMCUコアを手に入れた訳で、これは喜ばしい事である。そこでMaximは、これを利用した製品のポートフォリオの充実を図ろうとするが、ここで問題だったのは同社がアナログ一辺倒の会社だったことだ。

つまりアナログ回路に適切なMCUを組み合わせたソリューションの類はほとんど提供しておらず、そうしたものはMaximの製品を購入した顧客が自身で構築しており、それもあって製品投入のペースはあまり早くなかった。

2004年にはMAXQコアの完成をアピールしたものの、この年に製品投入は無し。2005年にはMAXQ3120とMAXQ2000をラインアップ(どちらもMAXQ20ベース)し、2006年にはMAXQ3210も追加される。

2007年にはMAXQ3100やMAX3212なども追加されている一方、早くもMAXQ3120がラインナップから落ちている。ただいずれの製品も汎用というよりは、高精度ADCなどを搭載した特定用途向けといった扱いである。

2008年にはMAXQ2000の省電力型であるMAXQ2010が追加され、翌2009年にやっと汎用向け製品としてMAXQ610がリリースされたものの、残念ながら広くシェアを獲得できるには至っていない。

理由は簡単で、同じMaxim内での競合である。2009年、MaximはZilogからWireless Control BusinessとSecure Transaction Product Lineの2つのビジネスを買収する。前者はZilogのZ8 MCUを利用した製品、後者はArmのARM922Tを利用した製品である。

Maximが2009年に出したMicrocontroller Design Guideというマニュアルで、MAXQ610はリモコン用にラインアップされているが、殆どはZ8ベースのMCUで占められているのが判る(Photo09)。

Photo09:一応Z8シリーズのRecommended Upgrade先はMAXQ600/MAXQ61Hになっているが、これを見て「じゃぁMAXQ600を使おう」と考えるユーザーは少ないと思う

ちなみにこのDesign Guideを読むと、PCI32のブリッジ用にはMIPS32 4KSdが使われており、MAXQを利用した製品はMulti Function AFEのMAXQ3180とかEnergy Meter向けのMAXQ3108、OIS(Optical Image Stabilization)向けのMAXQ8913、スマートセンサー向けのMAXQ7666 / MAXQ7670といった感じで、もう汎用というよりはASSP向けコアといった扱いになっている。

実は2007年、MaximはMAXQ1103という製品をリリースしている。このMAXQ1103にはMAXQ30という32bitコアが搭載されていた。このMAXQ30の詳細がさっぱり判らないのだが、既存のMAXQ10/20を32bit拡張するのは幾らなんでも無理があるので、恐らくは全く違うコアであろうかと思う(TTAを継承しているかどうかも怪しい)。

このMAXQ1103は金融向けに暗号化機能を搭載したセキュアMCUであり、PCI(Payment Card Industry)やFIPS 140-2、Common Criteriaといったセキュリティ業界標準に準拠しており、セキュアカードなどの用途向けにリリースされた(Photo10)にもかかわらず、Zilogから買収したSecure Transaction Product Lineの製品の方が先に出てくる(Photo11)、というあたりが悲しい。

Photo10:MAXQ1103の下位製品としてMAXQ1850もラインアップされている

Photo11:機能的にはMAXQ1103とかの方が上に見えるのだが、にも関わらずZilogベースの製品が前面に押し出されている不思議

この32bitのMAXQ30は、この後G3-PLCモデム向けのMAX2992にも採用されているが、汎用向けの製品として市場投入されることはなかった。というのはこの頃にはCortex-Mをベースとした製品が次第に増えてきており、MAXQを使うニーズがどんどん減っていったからだ。

結局2010年代に入るとMAXQを搭載した新製品はASSPの一部に限られ、2021年にMaximがAnalog Devicesに買収されることでMAXQアーキテクチャにとどめが刺された。Analog Devicesも独自のアーキテクチャに基づく製品とCortex-Mベースの製品が混在しており、ここでさらにMAXQを継続サポートする理由は皆無だからだ。

まだいくつかの製品(例えばMAXQ610)は継続生産と供給が行われているから、入手することは可能だ。ただ開発環境であるMAX-IDEの最終バージョンは2006年に出たきりである。gccは2004年にMAXQのサポートが追加されていた筈だが、最新のSupport Architectureを見るともはやサポートリストから落ちている。IARもやはりMAXQをサポートしていたが、現状のステータスは不明である。全体として、既に見捨てられた存在としてしまっても差し支えないと思う。

TTAを実装したMCUという意味でも稀有な製品であり、もっと前面に押し出していれば最終的にはCortex-Mに押し切られるにしても、もう少しプレゼンスを高めることは出来たと思う。

それも無いまま超マイナーアーキテクチャのまま消えかかっているというのは、やはりMaximがアナログ主体の会社だったから、というあたりが理由なのかもしれない。

《大原雄介》

大原雄介

猫に傅くために原稿を書いて日銭を稼いでいる毎日。元は組み込み系のエンジニアだったのに、もうずいぶん遠い所まで来てしまった。

特集

BECOME A MEMBER

『テクノエッジ アルファ』会員募集中

最新テック・ガジェット情報コミュニティ『テクノエッジ アルファ』を開設しました。会員専用Discrodサーバ参加権やイベント招待、会員限定コンテンツなど特典多数です。