Intel Edison Compute ModuleのMicrocontroller Unit(MCU)を分析する

はじめに

Intel Edison Compute Module用の新ファームウェア「Release 2.1」において、Microcontroller Unit(MCU)でのプログラム実行が解禁され、そのためのMCU SDKが公開されました。このMCU SDKを使用してIntel Edison Compute Module(コードネーム「Bodega Bay」)に搭載されているMCUの素性について簡単に調査してみることにしました。

MCUについての公開情報

Intel Corporationが公開している「Release 2.1」の資料によれば、Intel Edison Compute Moduleが搭載しているMCUは以下のような仕様であるとされています:

  • Minute Intelアーキテクチャーは486をベースとし、Pentium IA ISA互換性が追加されています。
  • MCUでは浮動小数点のサポートを全く行いません(MCUで浮動小数点を使用するコードをビルドすることができますが、それは実行時に例外を生成します)。

このことから、命令についてはPentium互換の命令が追加されたIntel 486系のプロセッサーであり、浮動小数点数演算プロセッサー(FPU)が省略されているということが説明されています。

一方で初期には「Intel Edison Compute Moduleは、Intel Atom(コードネーム「Silvermont」アーキテクチャー)が2コア、MCUにIntel Quarkを搭載する」とされていました。

現在のところ、プロセッサー・コアとしてのIntel Quarkと言えばIntel Quark Coreことコードネーム「Lakemont Core」アーキテクチャーただ1つだけです。このLakemont Coreアーキテクチャーはかなり詳細な資料が公開されており、これとIntel Edisonに内蔵されたMCUと比較することで、どのようなプロセッサーであるかがある程度明らかにできるでしょう。

比較対象

Intel Quark SoC X1000(コードネーム「Clanton」)に初めて搭載されたIntel Quark Core(コードネーム「Lakemont Core」)はPentium ISA(Instruction Set Architecture:命令セット・アーキテクチャー)互換であるとされています。そして、その表現が間接的に意味しているのは、このコアがPentiumではないということでもあります。このコアは、実際にはWrite-back Enhanced Intel DX4(コードネーム「P24C」、Write-back Enhanced Intel 486DX4とも呼ばれる)をベースに、Intel Pentium(コードネーム「P54C」、通称Classic Pentium)の要素と、近年のIA-32の拡張でセキュリティーのために導入されたNXやSMEPなどを取り込んだものとなっています。

これまで「Quarkである」ということは、これらの要素がすべて取り入れられているであろうと期待することと等価であったと言えます。すなわち、Intel Edison Compute ModuleはMCUとしてQuarkを搭載しているとアナウンスされていたということで、これらの要素をすべて搭載していると多くの人が受け取ったことは間違いないでしょう。

そこで今回はIntel Edison Compute Moduleに内蔵されているMCUと、現時点で唯一製品化されているIntel Quark系のチップであるIntel Quark SoC X1000シリーズのうち、Intel Galileo Development Board(コードネーム「KipsBay Fab-D」)に搭載されているIntel Quark SoC X1000の実データと、Intel Pentium(P54C)およびIntel Pentium MMX(P55C)を比較しつつ、その位置づけを探ってみたいと思います。

個別に命令を実行して差異を調査するのも1つの手ですが、それは非常に手間がかかり、また時間もかかります。今回はより多くのことをより少ない手間で見渡すことができる方法を選択しました。それはプロセッサーの各種情報を提供する目的で設けられているCPUID命令などを使用する方法です。

Intel Edison Compute Moduleに内蔵されたMCUのステータス

MCU SDKはC言語(GNU GCCによる)でコードを記述することで実行することができます。今回はインライン・アセンブリ言語で必要な情報を非特権命令に限って実行して取得し、それをデバッグ情報としてホスト(Intel Edison Compute ModuleのIntel Atomプロセッサー)側にメッセージを転送することで取得しました。

その情報を以下に示します:

( INFO): Start ====================
( INFO): CPUID Supported
( INFO): Base CPUID Information
( INFO): 00000000  -  EAX:00000007  EBX:756e6547  ECX:6c65746e  EDX:49656e69
( INFO): Vendor ID : "GenuineIntel"
( INFO): 00000001  -  EAX:00000490  EBX:00010000  ECX:00000000  EDX:0000033a
( INFO): Processor Type: 0 (0x00000000)
( INFO): Family: 4 (0x00000004)
( INFO): Model: 9 (0x00000009)
( INFO): Stepping: 0 (0x00000000)
( INFO): Extended Family: 0 (0x00000000)
( INFO): Extended Model: 0 (0x00000000)
( INFO): Basic Feature EDX : VME PSE TSC MSR CX8 APIC
( INFO): Basic Feature ECX :
( INFO): 00000002  -  EAX:00000001  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 00000003  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 00000004  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 00000005  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 00000006  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 00000007  -  EAX:00000490  EBX:00010000  ECX:00000000  EDX:0000033a
( INFO): Extended Feature EBX : AVX512F
( INFO): Extended Feature ECX :
( INFO): Extended CPUID Information
( INFO): 80000000  -  EAX:80000008  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000001  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): Extended Feature EDX :
( INFO): Extended Feature ECX :
( INFO): 80000002  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000003  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000004  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): Processor Brand String : ""
( INFO): 80000005  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000006  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000007  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): 80000008  -  EAX:00002020  EBX:00000000  ECX:00000000  EDX:00000000
( INFO): Physical Address Bit Width : 32-bit
( INFO): Virtual Address Bit Width : 32-bit
( INFO): Machine Status Word
( INFO): MSW  -  0000001d
( INFO): MSW Dump : PE EM TS ET
( INFO): End ======================

Intel Quark SoC X1000のステータス

MCUに対して行ったのと同一のチェックをIntel Galileo Development Board上のIntel Quark SoC X1000に対して行った結果を以下に示します:

CPUID Supported
Base CPUID Information
00000000  -  EAX:00000007  EBX:756E6547  ECX:6C65746E  EDX:49656E69
Vendor ID : "GenuineIntel"
00000001  -  EAX:00000590  EBX:00010000  ECX:00000000  EDX:8000237B
Processor Type: 0 (0x0)
Family: 5 (0x5)
Model: 9 (0x9)
Stepping: 0 (0x0)
Extended Family: 0 (0x0)
Extended Model: 0 (0x0)
Basic Feature EDX : FPU VME PSE TSC MSR PAE CX8 APIC PGE PBE
Basic Feature ECX :
00000002  -  EAX:00000001  EBX:00000000  ECX:00000000  EDX:00000000
00000003  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
00000004  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
00000005  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
00000006  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
00000007  -  EAX:00000001  EBX:00000080  ECX:00000000  EDX:00000000
Extended Feature EBX : SMEP
Extended Feature ECX :
Extended CPUID Information
80000000  -  EAX:80000008  EBX:00000000  ECX:00000000  EDX:00000000
80000001  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00100000
Extended Feature EDX : NX
Extended Feature ECX :
80000002  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
80000003  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
80000004  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
Processor Brand String : ""
80000005  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
80000006  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
80000007  -  EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000000
80000008  -  EAX:00002020  EBX:00000000  ECX:00000000  EDX:00000000
Physical Address Bit Width : 32-bit
Virtual Address Bit Width : 32-bit
Machine Status Word
MSW  -  003B
MSW Dump : PE MP TS ET NE

Intel PentiumおよびIntel Pentium MMXのステータス

今回は実機からデータを取得するのではなく、著名なCPU Worldというサイトより「Intel Pentium 100 – A80502-100 / A80502100」および「SL2RY (Intel Pentium MMX 200 MHz)」というページに掲載されているデータを引用させていただきました。

この場を借りまして、厚く御礼申し上げます。

機能ステータスの比較

各コアがサポートしていると報告する機能をまとめた表を以下に示します:

Processor Name FPU VME DE PSE TSC MSR PAE MCE CX8 APIC PGE PBE SMEP NX AVX512F MMX
Intel Edison internal MCU                  
Intel Quark SoC X1000 (Clanton)        
Intel Pentium (P54C/SL2TU)                
Intel Pentium MMX (P55C/SL2RY)              

プロセッサー・ステータスの比較

各コアが返すステータスをまとめた表を以下に示します:

Processor Name Processor
Type
Family Model Stepping Extended
Family
Extended
Model
Intel Edison internal MCU 0 4 9 0 0 0
Intel Quark SoC X1000 (Clanton) 0 5 9 0 0 0
Intel Pentium (P54C/SL2TU) 0 5 2 12 0 0
Intel Pentium MMX (P55C/SL2RY) 0 5 4 3 0 0

※Intel Pentiumと同MMXのSteppingは製品リビジョンによって変わる可能性があります。

考察

これらのステータスから得られる情報から考えられる事項を以下に列挙してみます:

  • 各コアにはCPUID命令が実装されており、またこのCPUIDが実装されていることを示すフラグが適切に設定されていることがわかります。
  • ベンダーID(Vendor ID)は「GenuineIntel」であり、これは想定された通りです(他のIntel製プロセッサーもすべてこの文字列を返します)。
  • MCUはプロセッサーのFamilyとして4、Modelとして9を報告しています。これは「Write-back Enhanced Intel DX4」を示す組み合わせと同一です。このことからMCUは、486シリーズの中でも「Write-back Enhanced Intel DX4」をベースとして設計されたことが示唆されています。一方でIntel Quark SoC X1000シリーズはPentiumシリーズと同様にFamilyとして5を報告しています。
  • この「さかきけいのメモ」でもIntel Quark SoC X1000シリーズとIntel Pentiumとの機能差について、これまで触れてきませんでしたが、今回のステータスの表が示すように、Intel Quark SoC X1000シリーズは完全なIntel Pentiumシリーズのスーパー・セットではなく、一部の機能が省かれていることがわかります。このことから「Pentium ISA互換」というのは、その名称の通りに「命令セットの互換」を示すものであり、「Pentium互換」とは別の意味であることを示していることがわかります。
  • 今回取得したステータスはMCUは浮動小数点数演算ユニット(FPU)が存在しないことを示しています。このことはCPUID命令のステータスのみならず、CR0レジスターの下位16ビットであるMSW(Machine Status Word)の値からも示されています。
  • 筆者の初期の考察ではMCUのキャッシュ・メモリーが省略されている可能性について言及しましたが、今回得られたデータではキャッシュに関するディスクリプターが提供されていません。このため具体的にキャッシュを搭載しているかどうか、またもし搭載しているのであればどのようなキャッシュを搭載しているのかが不明です。近日中に別途キャッシュが実装されているかどうかを確認したいと思います。
  • MCUは拡張機能のビットでAVX512Fをサポートしているとしています。実際にサポートしていれば素晴らしいとは思いますが、FPUを省略しているのにもかかわらず対応しているとは考えづらいのではないかと思います。このことから、何か別の機能を示すつもりで誤ったビットを設定してしまったか、単純にAVX512Fビットを立てたこと自体がミスである可能性がありそうです。
  • プロセッサー固有の名称などを示すプロセッサー・ブランド文字列(Processor Brand String)にはIntel PentiumおよびIntel Pentium MMXなど当時のプロセッサーには存在しないことは確かですが、それだけではなく現代にリリースされたプロセッサーであるIntel Quark SoC X1000およびMCUにも何も設定されていません。
  • 物理アドレスと仮想アドレスはいずれも32ビットであることが示されています。
  • メモリーが極端に少ないMCU側もプロテクト・モードで動作していることがわかります。このあたりはMCU上で動いているとされている「Wind River Viper OS」の仕様がさらに公開されることを期待したいと思います。
  • その他の情報も0x00000000とビットを立てない状態で供給されています。

結論

一言で表現すれば、Intel Edison Compute Moduleに搭載されているMCUは従来知られていたIntel Quark Coreではありません。これらよりもさらにWrite-back Enhanced Intel DX4に寄ったコアであるといえます。

Intel Quark Coreで追加されたセキュリティーのための機能拡張は存在せず、より486シリーズに寄った設計となっています。一方でTSCやMSRなどをサポートするなど、一般的なPentium用のアプリケーション・バイナリーを動作させるには十分なサポートが追加されていると見ることができます。

進化の系列で並べると、Write-back Enhanced Intel DX4→MCU→Intel Quark Coreとなっていると見るのが適切でしょう。つまりMCUはQuarkではないのです。

Intel Edison Compute Module発表時の「MCUはQuarkである」というIntel Corporationの発表から多くの人が受け取った意味合いは正しくはなかったと言えるでしょう。これらのことを踏まえて、MCU SDKではMCUをQuarkと呼ぶことを避けたのであろうと考えられます。

まとめ

このように、Intel Edison Compute Moduleに内蔵されたMCUはIntel Quark Coreではなく、Intel Quark Coreよりも前の設計のチップであると考えるのが妥当です。Intel Quark Coreは、このMCUそのものか同系列の設計を元に拡張を施したコアの可能性が出てきました。

Intel Quark CoreはIntel Irelandが設計したとされています。その前のMCUはいったいどこが設計したのでしょうか?発表がないということは新たな拠点ではないと考える方が妥当性が高いでしょう。おそらくはIntel Corporationの本拠地であるアメリカ国内のいずれかの拠点で設計されたのではないかと筆者は推測します。

従来、Intel Corporationが実験的なチップを作る際はIntel Pentium(P54C)をベースとすることが多いとされてきましたが、このようにIntel 486シリーズの派生コアが複数存在している現状を考えると必ずしもそうではないようです。Intel Pentium(P54C)だけではなく、Intel 486シリーズの設計も活用されていると見るべきです。

折を見てより詳しく見ていきたいと考えています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です