メモリ アクセスはMCU、DSP、SoCでは非常に一般的であるため、通常、プロセッサの電力消費のかなりの割合を占めます。
その結果、プロセッサの電力消費を削減するための終わりのない探求は、チップのメモリ アーキテクチャに焦点が当てられることが多くなります。同様に、メモリ アーキテクチャは、プロセッサのパフォーマンスを向上させる手段として精査され、改良され、調整されます。
フォン・ノイマンvsハーバード・アーキテクチャー
消費電力の削減とパフォーマンスの向上を同時に試みた初期の例として、プログラム命令 (コード) とデータに別々のメモリ領域を割り当てるハーバード メモリ アーキテクチャがあります。個別のメモリ空間は個別のメモリ バスを意味し、プログラム コードとデータに同時にアクセスできることを意味します。
これは、プログラムとデータの両方を同じメモリ空間に保存するフォン・ノイマン・メモリ・アーキテクチャからの大きな逸脱でした。
ハーバードの設計戦略は、それ自体が単純なものでした。同じ計算タスクを完了するために必要なクロック サイクル数を減らすことで、パフォーマンスが向上し、消費電力が削減されます。その後の数十年で、チップ設計のトレードオフははるかに単純ではなくなりました。
PIC マイクロコントローラ アーキテクチャ
プロセッサの設計が進化するにつれて、メモリ アーキテクチャは、プログラム ビットとデータ ビットの相互作用を処理するために、キャッシュ メモリなどのさまざまな手法を使用するハイブリッドへと変化しました。しかし、これらのハイブリッドがどのように進化したかを理解するためには、純粋なハーバード アーキテクチャのいくつかの側面を再検討する価値があります。
まず、異なるメモリ タイプの利点を活用できます。たとえば、オンチップROMに保存されたプログラム メモリでは、コードを改ざんすることは事実上不可能になります。一方、チップが現場に導入された後にアプリケーション設計者がコードをアップグレードしたり再プログラムしたりできるようにしたい場合は、フラッシュ メモリの方が適しています。
プロセッサが使用されるシステムのタイプによっては、純粋なハーバード アーキテクチャが優先される場合があります。たとえば、キャッシュを省略することで得られるコストと電力の節約が非常に重要である場合、純粋なハーバード メモリ構成に遭遇することがあります (ただし、常にそうであるとは限らない)。(ただし、常にそうであるとは限らない)
PICマイクロコントローラアプリケーション
2つの例としては、特定のアプリケーションにおける DSP と MCU が挙げられます。DSPを使用して、小規模で高度に最適化されたオーディオまたはビデオ処理アルゴリズムを実行する場合、DSPの動作は極めて再現性が高くなければならないため、チップ設計戦略ではメモリ キャッシュを回避する必要があります。そのため、一部のDSPでは、SIMDおよびVLIW処理を容易にするために、異なるアドレス空間に複数のデータ メモリが存在します。
より単純な組み込みアプリケーションの多くでは、MCUは数行のプログラム コードをフラッシュ メモリに保存し、数キロバイトのデータをSRAMに保存します。この設計シナリオでは、システム設計者は、ハーバード アーキテクチャの主な利点である、同時命令およびデータ アクセスによる処理の高速化を活用できます。
分岐メモリには、プログラム メモリとデータ メモリのビット幅を異なるものにできるという別の利点もあります。たとえば、16ビット幅の命令と8ビット幅のデータ。Microchip TechnologyのPICおよびAVRファミリのMCUの一部では、この設計戦略が採用されています。このような場合でも、チップ設計者がシステム設計者に、プログラム メモリをデータであるかのようにアクセスする特別な命令を使用する権限を与える場合があります。そして、これが改良されたハーバード・アーキテクチャ・プロセッサが進化した多くの理由の1つです。
PICマイクロコントローラの長所と短所
多くの組み込みアプリケーションでは、非常に小さなメモリ空間だけが必要です。8ビットMCUの利点の1つは、プログラム メモリやデータ メモリをほとんど使用せずにコードを実行できることです。たとえば、Microchip社の8ビットPICおよびAVR8製品ラインには、最大28 KBのプログラム メモリ (フラッシュ) と2 KBのRAMがあります。したがって、チップは物理的な占有面積が小さく、エネルギー消費も少なく、非常に低コストで購入することができます。しかし、この「無駄のない運営」の利点には欠点がある場合もあります。
定数値のテーブルへのアクセスは、アプリケーションのアルゴリズムを実行するための固有のコンポーネントです。これらの定数はデータ操作の一部であるため、純粋なハーバード アーキテクチャでは、データ メモリに格納する必要があります。しかし、使用できるRAMが2 KBしかない場合、希少なRAMリソースが無駄になる可能性があります。
もちろん、明らかな解決策は、データ定数をプログラム メモリに格納することです。しかし、通常の「ハーバード」状況では、CPUはこれらの定数を直接読み取ることができません。この回避策は、適切にも「 アクセス命令メモリをデータとして する改良型ハーバード アーキテクチャ」と呼ばれています。違いは、コード メモリからCPUのレジスタに定数を読み取ることを可能にする特別な命令セットが追加されていることです。
「修正されたハーバード・アーキテクチャ」という用語には、広く合意された定義が存在しないことに注意する必要があります。これによりかなりの混乱が生じました。修正されたハーバード アーキテクチャの定義の1つは、メモリは共有されているが、プログラム バスとデータ バスは別々であるということです。これは十分にシンプルですが、実際のプロセッサ設計が多数含まれているため、あまり多くのことが分かりません。一般的に使用されているいくつかの修正されたハーバード方式と、それらを使用するシステム設計者の実際的な問題を検討した方が、時間を有効活用できます。
メモリ階層とは何ですか?
分割キャッシュ アーキテクチャは優れた例です。命令とデータを分離するCPUキャッシュを使用してメモリ階層を作成します。
メモリ階層を使用する利点の1つは、純粋なハーバード アーキテクチャのプログラミングの複雑さや制限が発生しないことです。もう1つは、分割キャッシュによってパフォーマンスが向上することです。さらにもう1つの利点は、プログラム命令とデータの両方を収容するために、単一の外部メモリ デバイスを使用してプログラム メモリ空間とデータ メモリ空間を拡張できることです (専用命令は使用しません)。それは良い考えです。
しかし、アプリケーション プログラマーの観点から見ると、分割キャッシュはフォン ノイマン アーキテクチャによく似ています。これは、コードがフォン ノイマンであるかのように記述されるためです。実際、分割キャッシュは「ほぼフォン・ノイマン」アーキテクチャと呼ばれることもあります。
したがって、アーキテクチャの進化を理解する方法として、歴史的な前身の観点から現代のプロセッサ アーキテクチャについて議論することは有用ですが、修正されたハーバード アーキテクチャの厳密な定義を定めようとしても、何の役にも立ちません。
結論
ハーバード アーキテクチャ—とその名前—は、コンピュータの世界で始まりました。第二次世界大戦中、ハーバード大学のエンジニアはMark 1と呼ばれる電気機械式コンピューターを開発しました。このコンピューターは、穴の開いた紙テープから指示を読み取りました。 別のテープにはデータが含まれていました。このデータと命令の分離は、 ハーバード アーキテクチャとして知られるようになりました。
チップ設計者は紙テープと機械式リレーを捨て去り、そのアーキテクチャを8051—などの初期のマイクロコントローラや一部のマイクロプロセッサに採用しました。並行して、フォン・ノイマン・メモリ・アーキテクチャとその統合メモリ空間を備えたチップが設計されていました。
チップの設計は決して止まることはありません。デザイナーは、ハーバードとフォン・ノイマンの選択が決して明確ではないシナリオに直面することがよくあります。エンジニアにとって、組み合わせや組み合わせは自然なことです。彼らは、パフォーマンス、電力消費、コストの目標を満たすためにあらゆることを行います。これらのソリューションは、「このプロセッサはどのようなメモリ アーキテクチャを使用しているのか」と尋ねる人がいるという理由だけで、「拡張」または修正されたハーバード アーキテクチャと呼ばれることがあります。
ハーバード建築の歴史は、電子設計の歴史です。これはユニークなものではありませんが、イノベーションによる進歩を示す良い例です。