メディア

シングルバンクとデュアルバンクの違いQ&Aで学ぶマイコン講座(65)(3/4 ページ)

» 2021年09月30日 11時00分 公開

異なるアドレスを複数のバンクに割り当てる

 ハード的に区分けしたバンクに異なるメモリ領域を割り当てる場合は、各バンクは完全に独立した動作が可能です。そのため、あるバンクから命令をフェッチして実行し、別のバンクのデータにアクセスするといった複数バンクの同時使用ができます。

 本記事では、STマイクロエレクトロクス(以下、ST)の汎用32ビットマイコンSTM32G4シリーズ*2)のフラッシュメモリのバンクを例にして解説します。

 図3に、STM32G4シリーズのメモリ構成とアドレス割り当てを示します。

図3:STM32G4シリーズのデュアルバンクの例(クリックで拡大)

 フラッシュメモリは、256KBのメモリモジュールを2つ使って512KBを構成し、前半の256KBのアドレスの“0x0800 0000〜0x0803 FFFF”をバンク1に割り当て、後半の256KBのアドレスの“0x0804 0000〜0x0807 FFFF”をバンク2に割り当てています。バンクが2つなのでデュアルバンクです。

 フラッシュメモリのバンク構成のイメージ図を図4に示します。

図4:STM32G4シリーズのバンク構成(イメージ図)(クリックで拡大)
STM32G4シリーズデータシート、リファレンスマニュアルから抜粋
https://www.stmcu.jp/design/document/datasheet/66889/
https://www.stmcu.jp/design/document/reference_manual/66929/

 アドレスを“0x0800 0000〜0x0803 FFFF”に割り当てたバンク1と“0x0804 0000〜0x0807 FFFF”に割り当てたバンク2は、それぞれ完全に独立したハードウェアになっています。

 STM32G4シリーズは、ハーバードアーキテクチャ*3)なので、命令バスとデータバスが独立しています。また、アドレスバスはバンク1の“0x0800 0000〜0x0803 FFFF”用とバンク2の“0x0804 0000〜0x0807 FFFF”用に分かれています。そのため、バンク1とバンク2は各バスを含め完全に独立して動作することができます。

 例えば、バンク1から命令をフェッチする場合は、バンク1用のアドレスバスで命令のアドレスを指定し、読み出された命令は命令バスに乗って、CPUに読み込まれます。同時に、バンク2にデータを書き込む場合は、バンク2用アドレスバスで、データを書き込みたいアドレスを指定し、データをデータバスに乗せ、バンク2に書き込みます。

 命令バス、データバス、バンク1用のアドレスバス、バンク2用のアドレスバスがそれぞれ独立しているので、このような命令フェッチとデータアクセスが同時に実行できます。また、その逆で、バンク2からフェッチした命令を実行中に、バンク1のデータにアクセスすることも可能です。

*2)https://www.stmcu.jp/stm32/stm32g4/
*3)Q&Aで学ぶマイコン講座(36):ハーバードアーキテクチャって何?

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.