STM32WB- Arm® M0+ コア
Arm Cortex®-M0+ コア
1.0 版

STM32WB マイクロコントローラファミリ全製品に搭載されている
Arm Cortex-M0+ コアのプレゼンテーションにようこそ。

1Cortex-M0+ プロセッサ概要• Arm v6-M アーキテクチャ

2

Arm Cortex-M0+• フォンノイマンアーキテクチャ、2 段パイプライン

ネスト化されたベクタ割込みコントローラ• シングルイシューアーキテクチャ

CPU Arm v6-M

• 1 サイクル乗算

メモリ保護ユニット

AHB-Lite

データウォッチ
ポイント
ブレークポイントユニット

シリアルワイヤ
デバッグ

超低電力設計非常にコンパクトなコード

低消費電力と高エネルギー効率

制御命令、分岐、リンクを除くすべての命令は 16bit 長

Cortex-M0+ コアは 32bit RISC コアの Arm Cortex-M グループのひとつです。Arm v6-M アーキテクチャが実装されており、2 段パイプラインを特徴としています。
Cortex-M0+ には独自の AHB-Lite マスタポートが備わっています。

2

Cortex-M の互換性

3

• すべてのアプリケーションに対してシームレスなアーキテクチャ

Cortex-M0 & M0+

Cortex-M3

超低電力

Arm からリリースされた最初のCortex-M CPU

Cortex-M4

バイナリ／ツール互換

Cortex-M7
高性能
最高性能

比類なきミリワット当たりの性能のメリットを活用するために、
STM32WB マイクロコントローラには Arm Cortex-M0+ コアが搭載されています。
すべての Cortex-M CPU は 32bit アーキテクチャを採用しています。
Arm によってリリースされた最初の Cortex-M CPU は CortexM3 でした。
その後、Arm は、互換性は維持しながらも、高性能と低電力の 2種類の製品系列を分離して特徴付けることを決定しました。
Cortex-M0+ は、低電力製品系列に属します。消費電力に非常に敏感なバッテリ電源デバイス用として設計されています。

3

コアアーキテクチャの概要

4

Arm Cortex-M0+

プロセッサコア
2 段パイプライン
NVIC

32 個の割込みリクエストデバッグ

デバッグ

バスインタフェースユニット

AHB-Lite
AHB-Lite バスマトリックス
内部メモリ

内部ペリフェラル

Cortex-M0+ コアは、2 段命令パイプラインのおかげで CortexM0 よりも高性能を発揮します。
命令のフェッチと実行を担当するプロセッサコアから、私たちのCPU の説明を始めましょう。

4Arm Cortex-M0+ は 2 段パイプライン
フェッチとプリデコード

デコードと実行2 つの16bit 命令フェッチ

フェッチ
InstrN, InstrN+1

5

プリデコードInstrN

命令フェッチ なし
データアクセス可能

デコード
InstrN

2 つの16bit 命令フェッチ

実行
InstrN
プリデコードInstrN+1

デコード
InstrN+1
フェッチ
InstrN+2, InstrN+3

クロック 1

クロック 2

実行
InstrN+1
プリデコードInstrN+2

クロック 3

大部分の V6-M 命令は 16bit 長です。32bit 命令はわずか 6命令だけであり、そのほどんどはまれにしか使用されない制御命令です。ただし、サブプログラムのコールに用いられる分岐命令とリンク命令は、この命令と実行予定である次の命令との間の大きなオフセットに対応するために 32bit 長となっています。
32bit アクセス 1 回で 16bit 命令に 2 個づつアクセスし、命令当たりのフェッチ回数が少なくなるのが理想的です。
クロック 2 の間は命令フェッチは発生しません。AHB Lite ポートを使用すると、命令 N がロード／ストア命令である場合にデータアクセスを実行することができます。

5

分岐性能

6

• Cortex-M0+ コア• 最大 2 個の 16bit 分岐シャドウ命令…
Label:

Inst0
B
Inst1
Inst2…
InstN
InstN+1

クロック 1
フェッチとプリデコードデコードと実行

Label; Labelに分岐; 分岐シャドウ命令; 分岐シャドウ命令

クロック 2

Inst0, B Label
Inst0

クロック 3

クロック 4

Ins1, Inst2

InstrN, InstN+1

B Label

任意の分岐において、（2 段パイプラインにより）プリフェッチされた命令が破棄される個数は少なくなります。
クロック 1 において、プロセッサは Inst0 と無条件分岐命令をフェッチします。
クロック 2 において、 Instr0 を実行します。
クロック 3 において、分岐命令を実行すると同時に、次の連続した 2 個の命令 Inst1 と Inst2（分岐シャドウ命令と呼ばれる）をフェッチします。
クロック 4 において、プロセッサは Inst1 と Inst2 を破棄し、InstrN と InstN+1 をフェッチします。
Cortex-M0、M3、M4 には、フェッチ、デコード、実行の 3 段パイプラインが実装されています。分岐シャドウ命令の個数が増加し、最大で 16bit 命令 が 4 個までです。

6コアアーキテクチャの概要

7

Arm Cortex-M0+

プロセッサコア
2 段パイプライン
NVIC

32 個の割込みリクエスト

デバッグ

デバッグ

バスインタ
フェースユニット

AHB-Lite
AHB-Lite バスマトリックス
内部メモリ

内部ペリフェラル

Cortex-M0+ にはキャッシュも内部 RAM もありません。その結果として、あらゆる命令フェッチトランザクションは AHB-Lite インタフェースによって誘導され、あらゆるデータアクセスは AHBLite インタフェースによって誘導されます。
STM32WB には、CPU の外部に SoC レベルキャッシュが搭載されていることに注意してください。
AHB-Lite マスタポートはバスマトリックスに接続されていますので、CPU はメモリとペリフェラルにアクセス可能となります。トラン
ザクションは AHB-Lite でパイプライン転送されますので、最大スループットは、クロック当たり 32bit のデータまたは命令であり、最低で 2クロックの遅延が発生します。

7

参照

8

• 詳細については、以下の関連資料を参照してください。
• STM32G0 シリーズ Cortex-M0+ プロセッサプログラミングマニュアル（PM0223）• 下記リンクにあるArmのウェブサイト• http://www.arm.com/products/processors/cortex-m/cortex-m0+-processor.php

詳細については、www.st.com ウェブサイトから入手可能なアプリケーションノートと Cortex-M0+ プログラミングマニュア
ルを参照してください。
また、Cortex-M0+ コアに関する詳細情報は、Arm ウェブサ
イトを参照してください。

8