バス

バス

ハーバード方式

ARM v7M アーキテクチャでは、ハーバード方式のバスを採用しています。ハーバード方式とは、データ・バスと命令バスを分離したアーキテクチャです。一般に、データと命令はいずれもメモリ領域に割り当てられているため、一つのバス上でデータと命令を処理する方式をとります。これはバスが一つであるので、簡単に構成されます。しかし、命令とデータのどちらか一つしか扱えないため、データが頻繁にアクセスされたりすると命令の実行ができなくなり、CPUの処理スピードに限界が生じます。これをフォン・ノイマン・ボトルネックとよんでいます。

ハーバード方式では、データと命令が同時に処理できるため、このフォン・ノイマン・ボトルネックを解消することができます。

図1

下図を見ていただくと判りますが、Cortex-M3では、ハーバード方式とThumb2命令を採用することにより、従来のARMコアよりも高機能な1.2DMIPS/MHzを実現することができます。

図2

ハーバード方式のバスは、最近のマイコンには多く採用されるようになりました。しかし、歴史は古く、30年前のマイコンでもハーバード方式を採用しているマイコンがあります。性能が上がるのが目に見えているのに、なぜあまり採用されなかったのでしょうか?

それはコスト面で不利になるからだと考えられます。一つのバスを作りこむ場合と二つのバスを作りこむ場合では、やはり2種類のバスの方がマイコンのチップ面積が大きくなります。「チップ面積が大きい=原価が高い」ということになりますので、今まではあまり採用されていませんでした。しかし、近年、製造プロセスが微細化することにより、チップサイズを小さく出来るようになり、ハーバード方式が見直されて、多くのマイコンで採用されるようになりました。

しかし、やはりフォン・ノイマン方式の方がコスト的には有利なのでCortex-M0ではハーバード方式ではなく、フォン・ノイマン方式が採用されています。