技術関連ブログ

STM32MP15xシリーズ マルチコア製品のメリット

ハイパフォーマンスと電力の最適化

IoT(Internet of Things:モノのインターネット)が、デジタル情報機器だけでなく、産業機器や生活家電にも広まり、さまざまな分野で高速通信が求められるようになりました。それに伴い、送受信情報の高速データ処理が必須になってきています。
一方、携帯型機器、ゲーム機、および電子辞書などでは、HMI(Human Machine Interface : ヒューマン・マシン・インタフェース)の複雑化が進んでいます。例えば、高精細な画像を実現するために、液晶ディスプレイの解像度を上げ、さらに動画を滑らに動作させるために表示速度を向上させています。また、音声対応のために、音声データの取り込み機能、出力機能が劇的に向上しています。
このようにシステムの総合的な高性能化は、急激に進んでおり、システムの中枢を担っているマイコンやプロセッサ自体も、今まで以上に高い性能が求められています。

一方、これらの高性能化に並行して、消費電力の最適化も必須となっています。ボタン電池や乾電池はもとより、近年はUSB給電で充電したバッテリを電源とする機器が増えており、短時間充電と長時間稼働が製品仕様の重要なポイントになっています。

そのため、マイコンやプロセッサには、性能だけを優先するのではなく、電力も見据えた総合的な電力効率の向上が求められています。

パフォーマンスと消費電力の関係

パフォーマンスを上げる手法として、代表的なものは「演算速度を上げる」と「並列同時処理」があります。

演算速度を上げる

「演算速度を上げる」手法として、マイコンやプロセッサの製造プロセスの微細化による処理速度の向上があります。また、微細化すると多くの高機能モジュールを作り込むことができ、総合的にパフォーマンスが上がります。しかし、その反面、MOS(Metal-Oxide-Semiconductor field-effect transistor)に流れる電流が増えたり、論理規模が大きくなったりして、消費電力が上がります。 ただし、プロセスの微細化は、根本的にプロセス開発が必要なので、容易には製品に適用することができません。新プロセスを適用する新シリーズや新製品が対象になります。

      

ソース、ドレイン間の電圧が同じであれば、電界強度
が増し、さらに、電荷の移動する距離が短くなるので、
スイッチング速度が速くなる。

微細化によるMOSのスイッチング速度への影響

      
      

チャネル領域の距離が短くなり、抵抗成分が小さくなる
ので電流が大きくなる。

微細化によるMOSの消費電力への影響

図1 : 製造プロセスの微細化による影響

並列同時処理

並列同時処理には、演算用のハードウェアを複数実装し、同時に複数の演算を行うのが一般的です。マイコンやプロセッサで、並列処理を行うアーキテクチャにスーパースカラがあります。演算装置(ALU : Arithmetic and Logic Unitなど)を複数搭載して、複数の演算を同時に処理する手法です。また、単純にCPU(Central Processing Unit)を複数搭載して、複数の演算を同時に処理する手法(マルチコア)もあります。スーパースカラは、複数のALU内の相関関係が複雑なので、マルチコアの方が容易に実現できます。

いずれにしろ、パフォーマンスが上がると、消費する電力が増えるので、高性能化と電力の低減は相反する関係にあることがわかります。そのため、開発者はパフォーマンスと電力を最適化する必要があります。

2つ以上のコアを使って、役割分担させるマルチコア

このように、高性能化と同時に電力を低減することは、技術的に難しいことが知られています。そこで、近年着目されているのは2つ以上のコアを1つのシリコン・チップ上に作り込み、1つのパッケージに収める手法です。いわゆる、複数のコアに役割分担をさせて、1つのシステムを構成するマルチコア方式です。
マルチコアには、コアを「メインとサブに分ける構成」と、「対等の関係にする構成」の2通りがあります。
メインコアとサブコアで構成する場合は、コアにそれぞれの役割分担や主従関係などがあり、役割に応じて並列処理を行います。対等のコアで構成される場合は、各コアが同レベルの処理を行います。また、役割分担や主従関係を持たせることもできます。

いずれの場合も、メモリ空間や処理情報を共有して並列動作させることで、システムのパフォーマンスを上げることができます。 結果的に、同じパフォーマンスを実現する場合に、シングルコアの場合よりも周波数を低くして、消費電力を抑えることができます。

図2 : マルチコア方式の種類

STM32のマルチコア製品

STでは、マルチコア製品として、STM32MP15xシリーズを提供しています。電力効率の高いリアルタイム制御と高度な機能を統合したSTM32ファミリの汎用32bitマイクロプロセッサ(MPU)です。

図3 : STM32MP15xの4つのメリット

メインコアとしてArm® Cortex®-A7をデュアルで内蔵し、サブコアとしてCortex-M4をシングルで内蔵していますので、ヘテロジニアス・アーキテクチャ(異なる種類のプロセッサを組み合わせて構築したシステム)になります。

図4 : STM32MP157のブロック図

Cortex-A7とCortex-M4

Cortex-A7は電力と性能のバランスが求められるアプリケーション向けの32bitプロセッサです。2命令デコード&イシューのインオーダ8段パイプラインなので、基本的に1サイクルで2つの命令が同時に実行されます。Cortex-M4は、3段パイプラインです。オプションで浮動小数点ユニット(FPU: Floating Point Unit)とデジタル信号処理(DSP: Digital Signal Processor)IPブロックを備えており、効率的で使いやすい制御機能と信号処理機能が求められるデジタル信号制御アプリケーションに向いています。

コアの関係性と消費電力の最適化

それぞれのコアはハードウェア的に完全に独立しています。
デュアルのCortex-A7は、同じAXIM(Advanced eXtensible Interface Master)に接続されていますが、完全に独立しています。そのため、非同期で動作させることもできますし、セマフォなどを使って同期しながら動作させることもできます。また、ユーザはデュアルのCortex-A7の関係について、主従関係か対等関係かを自由に選ぶことができます。
Cortex-M4はAXIMとは別のMLAHB(ARM 32-bit multi-AHB bus matrix)に接続されており、Cortex-A7から独立していますが、データのやり取りは、AXIMとMLAHB経由で、非同期で行えます。
Cortex-A7がデュアルで搭載されているので、同じパフォーマンスを実現する場合に、シングルコアの場合よりも周波数を低くして、消費電力を抑えることができます。

負荷の高い処理はデュアルのCortex-A7をフル稼働させて、負荷が減るに従って電圧と周波数を落として行き、消費電力を最適化することができます。負荷がさらに減った場合には、より電力の少ないCortex-M4へと切り替えることにより、さらなる電力の最適化が図れます。

開発ツール&デバッグ方法

Cortex-A7は、オープンソースOS(Linux / Android)でアクセス可能です。また、Cortex-M4には、STM32マイクロコントローラの開発エコシステムが使用できます。
STは、オープンソースのOpenSTLinuxを提供しており、Cortex-A7のアプリケーション・ソフトウェアの迅速かつ容易な開発をサポートしています。
Cortex-A7のトレースおよびデバッグ方法は、ハードウェア・パスとソフトウェア・パスの2通りがあります。ハードウェア・パスでは、ハードウェア・デバッグポート(HDP)を使用します。ソフトウェア・パスでは、Linux のトレースおよびデバッグの環境とツールスイートを使用します。
Cortex-M4はスレーブコアなので、Cortex-A7により起動を制御されます。そのためデバック方法は次の2種類が用意されています。

  • エンジニアリング・モード(Engineering mode)
  • プロダクション・モード(Production mode)
 

エンジニアリング・モードは、Cortex-A7は完全に停止状態のデバックで、STM32マイコンと同等のデバックが可能です。プロダクション・モードはCortex-A7はLinux(もしくはU-BOOT)が起動している状態でのデバックとなります。

 3つのコアを搭載しているので、コア毎にトレース&デバッグを行う必要がありますが、開発ツールが統一されていますので、3つのシングル・コアの製品を個別に使用した場合に比べると、はるかに効率良く開発とデバッグを実現できます。

評価ボード

STM32MP15xシリーズでは、評価ボードとして、スタータ・キット(Discovery kit)の「STM32MP157F-DK2」、「STM32MP157D-DK1」およびカメラモジュール・バンドルの「B-CAMS-OMV」と、評価用ボード(EVALボード)の「STM32MP157D-EV1」と「STM32MP157F-EV1」を用意しています。

図5 :STM32MP157評価ボード

技術関連ブログ一覧