計算集約型プロジェクトへのShieldBuddyの活用

著者 Clive "Max" Maxfield(クライブ・マックスフィールド)氏

DigiKeyの北米担当編集者の提供

多くの愛好家、メイカー、DIY好きの人々が、Arduinoマイクロコンピュータ開発ボードを使用してプロジェクトのモニタリングや制御を行っています。同様に、これらのボードを評価や試作のプラットフォームとして活用し、開発を加速して集積回路(IC)、センサ、ペリフェラルの評価コストを削減するプロフェッショナルのエンジニアも増えています。「Arduino BOB活用によるセンサやペリフェラルの迅速な評価」の記事でも述べたように、これらのエンジニアは小さなチームに所属し、市場投入までの時間(TTM)に厳しく制約される場合もあります。このためエンジニアは、さまざまなエンジニアリング領域とタスクを取り込みながら、コンポーネントの評価を加速しそのコストを削減する方法を見つける必要があります。

1つの解決方法となるのが、Arduinoをオープンソースハードウェアのセンサやペリフェラルのブレイクアウトボード(BOB)とともに活用し、オープンソースソフトウェアのライブラリやサンプルプログラムを合わせて利用する方法です。Arduinoボードには、幅広いプロセッシングおよびメモリの要件を満たすさまざまなタイプがありますが、計算によっては、浮動小数点ユニット(FPU)を使用した処理がより適切な場合があり、これによりメインプロセッサの速度低下を回避できます。この問題は、Arduinoエコシステムの範囲内でShieldBuddyによって対応されています。

この記事では、さまざまなArduinoプロセッシングプラットフォームのオプションを取り上げ、FPU機能が多くのアプリケーションできわめて重要な理由についても説明します。次にShieldBuddyについて紹介します。ShieldBuddyは、物理的フットプリントはArduinoボードと同等でありながら、3つの独立した32ビットロセッサコアコアを持つボードで、各コアとも200MHzで動作し、それぞれが独自のFPUを備えています。さらに記事では、そのプログラミングモデルについて説明し、Eclipseベースのプログラミング環境とArduinoの統合開発環境(IDE)のサポートにより、DIY愛好者と設計者のいずれもがShieldBuddyを利用して開発作業をすぐに始められる方法を解説します。

初心者にもプロフェッショナルにも利用されるArduino

Arduinoに初めて触れるユーザーは、まずArduino Uno Rev3(図1)から始めるのが一般的でしょう。このボードは、動作速度16MHzの8ビットATmega328Pマイクロコントローラをベースにしており、32Kバイトのフラッシュ(プログラム)メモリ、2KバイトのSRAM、デジタル入出力(I/O)ピン x 14、アナログ入力ピン x 6のみを備えています。デジタルピンの内6つはパルス幅変調(PWM)出力に対応し、必要に応じてアナログピンをデジタルI/Oピンとしても使用できます。

Arduino Uno Rev3開発ボードの画像図1:Arduino Uno Rev3開発ボードは、動作速度16MHzの8ビットATmega328Pマイクロコントローラをベースにしています。(画像提供:Arduino.cc)

デジタルI/Oピン x 14、アナログ入力ピン x 6、電源、グランド、リファレンスの各種ピンを備えたArduino Uno Rev3のヘッダのフットプリントは、シールドと呼ばれるドーターボードによる広範なエコシステムの基盤になります。

Uno Rev3の多くのユーザーが次に進むのは、Arduino Mega 2560 Rev3ボード(図2)です。このボードは動作速度16MHzの8ビットATmega2560マイクロコントローラをベースにしており、256Kバイトのフラッシュメモリと8KバイトのSRAMを備えています。このボードのヘッダのフットプリントはUnoと同じシールドをサポートしますが、追加のヘッダによりデジタルI/Oピン x 54およびアナログ入力ピン x 16にも対応します。このボードでは、15のデジタルピンがPWM出力に対応し、必要に応じてアナログピンをデジタルI/Oピンとして使用できます。

Arduino Mega 2560 Rev3開発ボードの画像図2:Arduino Mega 2560 Rev3開発ボードは、動作速度16MHzの8ビットATmega2560マイクロコントローラをベースにしています。ボードのヘッダのフットプリントによりArduino Unoと同じシールドをサポートするとともに、追加のヘッダにより合計でデジタルI/Oピン x 54およびアナログ入力ピン x 16を提供します。(画像提供:Arduino)

Arduino UnoとArduino Megaには、8ビットデータパスと16MHzクロック速度による制約があることに加えて、いずれのマイクロコントローラにもFPUがないため、浮動小数点値を含む計算ではこれらのプロセッサの速度が大幅に低下します。

さらに処理能力を求めるユーザーにとって、次のステップはArduino Due(図3)です。このボードは、Arduino Megaと類似の物理的なフットプリントを備えますが、Atmel/Microchip Technologyの32ビットSAM3X8E Arm® Cortex®-M3プロセッサ(動作速度84MHz)をベースにしています。また、512Kバイトのフラッシュメモリ、96KバイトのSRAM、デジタルI/Oピン x 54、アナログ入力ピン x 12、およびデジタル/アナログコンバータ(DAC)により駆動されるアナログ出力ピン x 2を備えています。このボードでは、12のデジタルピンのみがPWM出に対応し、必要に応じてアナログピンをデジタルI/Oピンとして使用できます。残念ながら、Arduino UnoおよびMegaと同様に、Arduino DueのプロセッサにもFPUが含まれていません。

Arduino Due開発ボードの画像図3:Arduino Due開発ボードは、動作速度84MHzの32ビットAtmel SAM3X8E Arm Cortex-M3プロセッサをベースにしています。ヘッダのフットプリントはArduino Megaと同じです。(画像提供:Arduino.cc)

愛好家とプロフェッショナル両方の多くのユーザーにとって、Arduino MegaおよびArduino Due開発ボードのピン数の多さは便利です。しかし演算集約型タスクによっては、Arduino Dueの動作速度84MHzの32ビットプロセッサでも不十分な場合があります。同様に、膨大なデータを扱う相当規模のプログラムでは、Dueの512Kバイトのフラッシュメモリおよび96KバイトのSRAMでは不十分かもしれません。

マイクロコントローラが処理できるデータ量はますます増えていますが、計算によってはより効率的かつ低レイテンシで実行するために、FPUの使用が適する場合があります。

FPUとは? FPUが必要な理由とは?

FPUが有用な理由を考えるには、コンピュータが数値を処理する方法に立ち戻ります。コンピュータ内部で数値を表す最も簡単な方法は、整数を使用することです。また、整数を使用して計算を実行すると、計算コストが低下します。しかし、整数は本質的に有限で、幅広いダイナミックレンジを表現できません。

これは、同じ計算に非常に大きい値と小さい値を頻繁に使用するエンジニアや科学者にとって問題です。たとえば物理学者は、計算に光の速度(300,000,000)とニュートンの重力定数(0.00000000006674)の数値を使用するかもしれません。同様にエンジニアは、デジタル信号処理(DSP)などのタスクや人工知能(AI)および機械学習(ML)アプリケーションの使用において、広範なダイナミックレンジをともなう値を必要とします。

このような計算の解決方法は、浮動小数点の数値表現を使用することです。これにより、小数点は数値の個々の桁に対応して「浮動」し、より細かい数値「分解能」を実現できます。問題は、32ビットの浮動小数点数値は固定小数点の32ビット整数と同じ量のメモリを消費しますが、浮動小数点値を使用した計算では各段に多くの計算リソースが必要になることです。

プロセッサが標準的な固定小数点ハードウェアを使用して浮動小数点の計算を実行する必要がある場合、そのプロセッサのパフォーマンスには甚大な影響が及びます。その解決策は、プロセッサに専用FPUを備えることです。これにより、非常に少ないクロックサイクルを使用して高度な浮動小数点の計算を実行できます。

その役割を担うのがShieldBuddyです。

ShieldBuddyがArduinoエコシステムにもたらすFPUと高度な性能

Arduino互換分野では比較的新参のメーカーであるInfineon Technologiesが提供するKITAURIXTC275ARDSBTOBO1、またはShieldBuddy(図4)は、InfineonのTC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32ビットマイクロコントローラ対応の組み込み評価ボードです。

Infineon TC275 32ビットマルチコアプロセッサを搭載したShieldBuddy TC275の画像図4:InfineonのTC275 32ビットマルチコアプロセッサを搭載したShieldBuddy TC275。Arduino MegaおよびArduino Dueと同じフットプリントを持ち、提供されている多くのアプリケーションシールドと互換性があります。 (画像提供:Hitex.com)

Arduino MegaおよびArduino Dueと同等の物理的フットプリントを持つShieldBuddyは多くのアプリケーションシールドと互換性がありますが、動作速度200MHzで専用FPUを備える3つの独立した32ビットコアとともにTC275を使用する点が特長的です。さらにShieldBuddyには、4Mバイトのフラッシュメモリ(Arduino Dueの8倍、Arduino Megaの16倍)、および500KバイトのRAM(Arduino Dueの5倍、Arduino Megaの62倍)が含まれています。

ShieldBuddyの特長としては、Arduino Megaのコアでは1マイクロ秒(µs)あたり約16の8ビット命令しか処理しない点が挙げられます。それに比べて、TC275の各コアのサイクルタイムは5ナノ秒(ns)、つまり各コアは標準で約150~200の32ビット命令/µsを実行できます。ShieldBuddyの各プロセッサコアには専用FPUが含まれるため、このボードでほぼパフォーマンスの低下なく浮動小数点計算を実行できます。

ShieldBuddyによる開発

ShieldBuddyを使用する場合、プロフェッショナルのソフトウェア開発者はEclipse IDEを使用したいと考え、愛好家やメイカーはなじみのあるArduino IDEを使用したいと考えるかもしれません。その両方のオプションがサポートされます。

Arduinoのユーザーは、実際に使用しながら、各スケッチ(プログラム)には2つの標準関数として、1回実行されるsetup()と何度も実行されるloop()が必要なことを理解します。また、ユーザーは独自の関数を作成することもできます。

ShieldBuddyの3つのコアは、Core 0、Core 1、Core 2と呼ばれます。Arduino IDEでは、ほとんどの既存のスケッチが、ShieldBuddyで使用できるように変更なしにコンパイル可能です。デフォルトでは、setup()およびloop()関数は、それらが呼び出すユーザー作成関数とともに、Core 0で実行するようにコンパイルされます。

新しいプログラムを作成する場合、ユーザーはこれらの関数にsetup0()およびloop0()と名付けることで同じ効果を得られます。また、ユーザーはsetup1()およびloop1()関数も作成でき、これらの関数は、それらが呼び出すユーザー作成関数とともに、Core 1で実行するように自動でコンパイルされます。同様に、setup2()およびloop2()関数は、それらが呼び出す関数とともに、Core 2で実行するように自動でコンパイルされます。

デフォルトでは各コアが独立して実行されるので、ShieldBuddyでまったく別々の3つのプログラムを同時に実行できます。また、それらのコアは共有メモリのような手法によってコア間で通信することもできます。さらに、どのコアもソフト割り込みを別のコアでトリガできます。

まとめ

オープンソースArduinoのコンセプトは実績として非常に高く評価されており、それを受けてハードウェアとソフトウェアのエコシステムは数百に及ぶシールドと数千に上るライブラリおよびアプリケーションを含む規模に拡大しています。

8ビット、16MHzのArduino UnoやArduino Megaなど初期のArduino開発ボードにはそれなりの制約がありましたが、32ビット、84MHzのArduino Dueなど、より新しい実装では性能が大幅に強化されています。それでも多くのユーザーは、従来のArduinoが提供する能力に比べて、さらに多くのプログラム空間(フラッシュ)、より多くのデータ空間(SRAM)、より高い処理能力を必要としています。

4Mバイトのフラッシュメモリ、500KバイトのSRAM、そして動作速度200MHzで専用FPU搭載の独立した3つの32ビットプロセッサコアを備えるShieldBuddyは、Arduinoのコンセプトをかつてないレベルに高め、上級DIYユーザーとプロフェッショナルエンジニア両者の関心を惹きつけています。

お勧めの記事:

  1. ど初心者にエレクトロニクスを教える
  2. Arduino MKR Vidor 4000によるFPGAのすばやく簡単な応用
  3. 使いやすいArduino Starter Kitで「メイカー」の世界を体験しよう
DigiKey logo

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。

著者について

Image of Max Maxfield

Clive "Max" Maxfield(クライブ・マックスフィールド)氏

Clive "Max" Maxfield氏は、1980年にイギリスのシェフィールドハラム大学で制御工学の理学士号を取得し、メインフレームコンピュータの中央処理装置(CPU)の設計者としてキャリアをスタートしました。Maxは長年にわたって、シリコンチップから回路基板まで、果ては脳波増幅器からスチームパンクな予測エンジンまであらゆる設計に携わってきました(細かいことは聞かない)。彼はまた、30年以上にわたってEDA(電子設計自動化)の最前線にいます。

また彼は、『Designus Maximus Unleashed』(アラバマ州で発禁)、『Bebop to the Boolean Boogie』(型破りなエレクトロニクス界へのガイド)、『Where Electronics Begins』(EDA関連)、『Instant Access』(FPGA関連)、『How Computers Do Math』(同)をはじめとする多くの書籍の著者や共著者として活動しています。彼のブログ Max's Cool Beans をチェック!

出版者について

DigiKeyの北米担当編集者