はじめに
2015年4月、Intel Corporationの発行する一部の文書で初めてその存在が明らかになった「Intel Quark Microcontroller D1000(コードネーム「Silver Butte」)」という製品があります。この名称からわかるように、Internet of Things(IoT)に向けたIntel Quark系の一種です。
8月に入ってからは製品に関するデータ・シートやユーザー・ガイドなどのドキュメントが公開され始め、その内容が明らかになってきてはいるのですが、なぜかあまり注目されていないようで、日本語で紹介するページも少ないようです(2015年10月25日17時半現在、Googleでの検索では1ページも引っかかりません)。
今回のメモは、このIntel Quark Microcontroller D1000に関して書いてみたいと思います。
Intel Quark Microcontroller D1000とは
Intel Quark Microcontroller D1000(以下、D1000)はその名前が示すようにMicrocontroller Unit(MCU)として使用することを目的とする、低消費電力の製品です。その用途は「Intel Quark SoC X1000(以下、X1000。コードネーム「Clanton」)」シリーズよりも下の領域に向けられたもので、X1000とD1000は全く競合する関係にはありません。逆に補完する関係ということができます。
D1000が投入される以前のIntel Architecture(IA)※1のInternet of Thingsにおけるカバー領域の下限はX1000までであり、ARMのCortex Mシリーズの一部が担っているような、より小規模の領域には手が届いていませんでした。
この部分を新たにカバーすべく投入されたのが、このD1000です。すなわち、X1000よりも低消費電力であり、1つのD1000でメモリーを含めてメイン・ロジックが賄える構成となっています。一方で処理速度はX1000と比較して非常に低くなっています。これはトレード・オフの関係なので「割り切っている」と見るべきです。
Intel Quark Microcontroller D1000の主な仕様
- 動作周波数 1 – 33 MHz
- 動作電圧 1.62 – 3.63 V
- 消費電力 アクティブ 320μA、スリープ 1.5μA
- 接点数は40、パッケージがVSS(GND)
- 32-bit ハーバード・アーキテクチャーのCISCプロセッサー
- 8 KBのROM(コード・バスとデータ・バスでプロセッサーと接続)
- 8 KBのSRAM(データ・バスでプロセッサーと接続)
- フラッシュ・メモリー・コントローラー
- 4 KBのデータ・フラッシュ・メモリー※
- 32 KBのコード・フラッシュ・メモリー※
- ボルテージ・レギュレーター(300 μA Linearと50 mA Buck)※
- クロック発振器※
- 19チャネルの12-bit SAR ADC(高速6、低消費電力13)
- Real Time Clock(RTC)
- ウォッチドッグ・タイマー
- 2つの汎用タイマー
- 24本のGPIO
- SPI Master
- SPI Slave
- I2C
- 2本のUART(CTS/RTSあり)
- GPIO/ADCの各ピンは静電気保護あり
※プロセッサーを搭載するメインのダイとは別に搭載されます。
プロセッサーの特徴
D1000のプロセッサーは32-bit ハーバード・アーキテクチャーのCISCです。それ以外の特徴は以下の通りです:
- シングルイシュー、インオーダーの5ステージ・パイプライン
- 分岐予測は逆行評価、順行不評価※2
- 32-bit幅のデータ・メモリー用のバス
- 128-bit幅のプログラム・メモリー用のバス
- 1サイクルのバレル・シフター
- 2サイクルの乗算器
- マルチサイクルのハードウェア除算器
- JTAGデバッグのサポート
- 統合されたProgrammable Interrupt Controller(PIC)
- 統合された32-bitのタイマー
データシートに掲載されているブロック・ダイアグラムによると、この1つの塊が1ブロックとして構成されているように描かれています。このことから、現世代のIntel Quarkとしてのプロセッサー・コアの最小構成にはこれらの機能が含まれるようです。
【追記】このプロセッサー・コアの仕様については、別途2015年11月16日付け公開のメモ「Intel Quark microcontroller D1000のCPUはIA-32ではない」にまとめました。
内部バス
プロセッサー・ブロックは内部バスとしてAHBを使用しており、ブリッジを経由してその先にペリフェラル系が接続するバスとしてAPBを使用しています。また、それとは別にコード・バスとデータ・バスが存在しています。
AHB-Lite
この32-bitバスはARM Limitedが2006年に策定したAMBA 3 AHB-Lite Protocol Specificationに基づいています。
プロセッサーに近い側のバスがこのAHBバスであり、フラッシュ・メモリー・コントローラー、ボルテージ・レギュレーター、クロック・マネージメントなどの高速な制御あるいは基本的な機能への接続に使用されています。
AHB-APBブリッジ
プロセッサー側のAHBとペリフェラル側のAPBを結ぶためのブリッジです。
APB
この32-bitバスはARM Limitedが2004年に策定したAMBA 3 APB Protocol Specificationに基づいています。
プロセッサーから遠い側のバスとしてこのAPBが採用されており、ADC、RTC、GPIO、UARTなど、外部と接続するための機能ブロックとの接続に使用されています。
コード・バス
プロセッサー・コアがプログラム・コードを読み取るために使用する128-bitのバスです。このバスに接続されたメモリーに格納されたプログラム・コードだけが実行可能です。
データ・バス
プロセッサー・コアがデータを読み取るために使用する32-bitのバスです。このバスはデータのみを扱うため、プログラム・コードの実行は行えません。
キャッシュ・メモリー
D1000にはキャッシュ・メモリーが存在しません。※3
ハーバード・アーキテクチャーの採用
D1000のプロセッサーはハーバード・アーキテクチャーを採用しており、コード用のバスとデータ用のバスが明確に分かれています。※4
内蔵のROMはコード・バスとデータ・バスの両方が接続されています。このためROMにはコードとデータの両方を格納することができます。一方でSRAMにはデータ・バスのみが接続されており、コードを格納することができません(仮にコードを格納したとしても、それを実行する手段がありません)。また、フラッシュ・メモリーもデータ用の4 KBとコード用の32 KBに分割されており、それぞれの用途にのみ使用することができます。
Intelはドキュメント内でコードを実行可能なメモリーを「プログラム・メモリー」、コードの実行ができないメモリーを「データ・メモリー」と呼んでいます。
これらの制限はセキュリティーを高める効果もあります。例えば外部からバッファー・オーバー・フローなどを利用して任意のコードを注入したとしても、それを実行する手段がないためです。
不明な仕様
FPU(浮動小数点演算ユニット)の有無
現時点で公開されているドキュメントには、FPUがあるともないとも書いていないため、その存在は不明確です。
同じくMCUを名乗っていた「Intel Edison Compute Module(コードネーム「Bodega Bay」)」内蔵の「Minute Intelアーキテクチャー※5」にはFPUが存在していないことから、同様にMCU扱いであるD1000にはFPUが存在しない可能性が高そうです。
命令のサポート・レベル
現時点で確認できるドキュメントでは、D1000のプロセッサーがどのレベルの命令をサポートするのかは明らかではありません。それどころかIAであるとすら明記していません。しかし、JTAGの仕様にはおなじみのレジスター名があるため、少なくともIAの流れを汲んでいることは間違いありません。ただ、従来は存在した「486」や「Pentium」といった命令のサポート・レベルとして比較可能な語句が今回は一切見当たりません。
カスタマー・リファレンス・ボード
D1000を載せたカスタマー・リファレンス・ボード(CRB)は、Arduino型です:
Intel® Quark™ microcontroller D1000 CRB v3 User Guideより引用
ただし、PWMのサポートはありません。
CRBの主な構成
- Intel Quark microcontroller D1000
- 3軸加速度センサー(SPI接続)
- 32 Mbit フラッシュ・メモリー(SPI接続)
- Bluetooth LE 無線通信(SPI接続)
- シリアル→Wi-Fi変換モジュール(SPI接続)
- Arduinoヘッダー
- USB→デュアル・シリアル変換を経由してUARTおよびJTAGへ接続
- Li-Poあるいは通常電源
一通りの機能にアクセスできるように構成しているようです。
まとめ
ここまでに取り上げたことを簡単にまとめると以下のようになります:
- ベースとしている設計はIntel 486のようではあるが、大きく変更を加えているため、もはやIntel 486とは言えない設計となっている。
- プロセッサー・コアはx86系としては初となるプログラム・メモリーとデータ・メモリーを分離したハーバード・アーキテクチャーを採用している。
- メインのダイのほかに複数のチップあるいはダイを取り込んで1つのパッケージとしている、MCM(Multi-chip Modulle)あるいはSiP(System-in Package)型の製品である。
- フラッシュ・メモリーはメインのダイに統合されていない。
- メインのダイの製造プロセスは不明だが、フラッシュ・メモリーが統合されていないことからIntel Corporationが所有するファブで製造している可能性が高い。
- Intel Quark SoC X1000に引き続いてCRBはArduino型
私にとって特に大きな変更であると感じたのは、単純に従来の「Intel Quark Core(コードネーム「Lakemont Core」)」を採用したのではなく、Intel 486をベースにいろいろな変更を行い、ハーバード・アーキテクチャーを採用したという点です。
IBM PC/ATをベースとする、現在のパソコンの枠組みではプログラムの互換性の問題からできない選択ではあるのですが、組み込み系に限れば「IA」だとしてもコードの大部分は再構成となるため、確かにとりうる選択肢です。そしてこの分野ではハーバード・アーキテクチャーを実際に採用しているケースも多くあり、また以前にIntelが作っていた組み込み用の製品である「Intel 8051」もまたハーバード・アーキテクチャーでした。組み込みには向いている構成ということができるでしょう。そしてセキュリティーの確保にも効果が見込めます。
ほかにも消費電力を下げたり、接点数を大幅に削減したり、1つのD1000でメイン機能(ROM/SRAMなどを含む)をカバーできるなど、本格的に組み込みに特化した製品がようやく出てきたように感じます。
現在のところ静かな船出となっていますが、今後どうなっていくのでしょう?
参考資料
- Intel® Quark™ Microcontroller D1000 仕様
- 製品 (開発コード名 Silver Butte)
- Intel® Quark™ Microcontroller D1000 User Guide
- Intel® Quark™ Microcontroller D1000 CRB User Guide
- Intel® Quark™ Microcontroller D1000 Datasheet
- IA-32系の意として使用しています。
- つまり静的予測をしているということを意味します。
- 「Intel® Quark™ Microcontroller D1000 仕様」に「キャッシュ 0 KB」と記載があります。
- コードとデータのキャッシュが分かれている設計もハーバード・アーキテクチャーということがありますが、ここでいうハーバード・アーキテクチャーとは本来の意味の「コードとデータのバスが分離している」というアーキテクチャーのことを指しています。
- Intel Edison Compute Moduleの発表当初は「Quark」とされていましたが、後に単にMCUと呼ばれるようになりました。