ハーバード方式
Arm v7M アーキテクチャでは、ハーバード方式のバスを採用しています。ハーバード方式とは、データ・バスと命令バスを分離したアーキテクチャです。一般に、データと命令はいずれもメモリ領域に割り当てられているため、一つのバス上でデータと命令を処理する方式をとります。これはバスが一つであるので、簡単に構成されます。しかし、命令とデータのどちらか一つしか扱えないため、データが頻繁にアクセスされたりすると命令の実行ができなくなり、CPUの処理スピードに限界が生じます。これをフォン・ノイマン・ボトルネックとよんでいます。
ハーバード方式では、データと命令が同時に処理できるため、このフォン・ノイマン・ボトルネックを解消することができます。
下図を見ていただくと判りますが、Cortex-M3では、ハーバード方式とThumb2命令を採用することにより、従来のArmコアよりも高機能な1.2DMIPS/MHzを実現することができます。
ハーバード方式のバスは、最近のマイコンには多く採用されるようになりました。しかし、歴史は古く、30年前のマイコンでもハーバード方式を採用しているマイコンがあります。性能が上がるのが目に見えているのに、なぜあまり採用されなかったのでしょうか?
それはコスト面で不利になるからだと考えられます。一つのバスを作りこむ場合と二つのバスを作りこむ場合では、やはり2種類のバスの方がマイコンのチップ面積が大きくなります。「チップ面積が大きい=原価が高い」ということになりますので、今まではあまり採用されていませんでした。しかし、近年、製造プロセスが微細化することにより、チップサイズを小さく出来るようになり、ハーバード方式が見直されて、多くのマイコンで採用されるようになりました。
しかし、やはりフォン・ノイマン方式の方がコスト的には有利なのでCortex-M0ではハーバード方式ではなく、フォン・ノイマン方式が採用されています。
こちらも是非
“もっと見る” Cortex-M編
SysTick、電力管理
SysTick機能を有効にするには、SysTick制御およびステータスレジスタを使用します。このレジスタのENABLEビットを1にすると、カウンタは動作をはじめます。つまり、カウンタにリロード値がロードされてから、カウントダウンが開始されます。
メモリマップ
Cortex-M3のメモリマップには、一般的なマイコンのメモリマップと若干異なる特徴があります。一般的なマイコンでは、メモリ領域を変更できるものもあります。しかし、Cortex-M3のメモリマップは定義されたメモリマップになっており、アドレス領域のマッピングは固定です。
ベクタテーブル
Cortex-M3のベクタテーブルは0番地から始まります。一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-M3ではメインスタック(SP_main)の初期値が割り当てられています。