組み込みシステムのためのメモリ選択:適切なメモリ構成を選択するには

この記事は「 Memory Options for Embedded Systems: How to Select the Right Memory Configuration」の抄訳です。組み込みシステム用のメモリの選択は、非常に重要です。ここでは組み込みメモリに関する私の長年の経験を基に、詳細な情報を提供するとともに、システムに最適なメモリを選択するための専門家によるヒントも紹介します。

この記事の内容:

組み込みメモリとは

組み込みメモリとは、組み込みデバイスのプロセッサが必要な機能を実行し、デバイスを動作させる際に使用するメモリです。このメモリは組み込みデバイス用のシステムオンチップ上に格納することも、別個に設置することもできます。

揮発性メモリと不揮発性メモリの違い

揮発性メモリは、電力が供給されている期間だけ情報を保持します。不揮発性メモリは、電力の供給が絶たれても情報を保持します。

揮発性メモリの場合は、電源がオフになるとデータが失われます。ランダムアクセスメモリ(RAM)は揮発性メモリの一種です。

エンジニアは、デバイスが(システムの再起動後を含め)常時必要とするコードやその他のデータを保存するために、組み込みシステムで不揮発性メモリを使用します。たとえば不揮発性メモリには、システムの構成設定を保存することが多くあります。

コンピューター内の一次メモリと二次メモリ

一次メモリは、コンピューターシステムのメインの内部メモリです。システムの中央処理装置(CPU)は一次メモリに直接アクセスします。二次メモリは多くの場合、外部のストレージデバイスです。CPUが二次メモリに直接アクセスすることはありません。

CPUは一次メモリにすばやくアクセスできますが、一般的に一次メモリは揮発性メモリです。つまりデバイスの電源がオフになればデータも失われます。二次メモリは不揮発性メモリであり、電源がオフになってもデータが保持されます。一次メモリに比べて、二次メモリは比較的低速です(組み込みシステムに最適なCPUを選択する方法については、こちらのガイドをお読みください)。

今日においては、エンジニアが使用している組み込みシステムやMCUの多くは、すべてのメモリがCPUから直接参照できるようになっています。

組み込みシステム内の一次メモリ

組み込みシステム内の一次メモリは、一般的にRAMの一種です。最も一般的なタイプのRAMは、ダイナミックランダムアクセスメモリ(DRAM)とスタティックランダムアクセスメモリ(SRAM)です。

SRAMとDRAMの違い

SRAMとDRAMはどちらも揮発性メモリです。しかしこれら2つには、特に速度とコストの点で重要な違いがあります。

  • SRAM:SRAMはプロセッサに対するアクセスが非常に高速で、DRAMの約4倍の速度です。SRAMも電力が供給されている限りデータを保持します。消費電力は少なくなっていますが、DRAMよりも高価です。エンジニアは一般的に、アクセス速度が非常に重要になるデバイスでSRAMを使用します。SRAMは多くの場合、システムオンチップまたはマイクロコントローラーチップ上に組み込まれています。
  • DRAM:DRAMはSRAMよりも低速かつ安価です。電力が常時供給されている場合でも、データが保持されるのは数ミリ秒から数秒という短い時間です。エンジニアはDRAMコントローラーを使用することで、DRAMをSRAMのように機能させています。DRAMコントローラーはDRAMに保存されているデータを継続的に更新するため、データが失われることはありません。DRAMはSRAMに比べて低コストであるため、デバイスが大量のメモリを必要とする場合には、DRAMが多く使われます。
  • SDRAM:同期型ダイナミックランダムアクセスメモリ(SDRAM)は最も一般的に使用されているDRAMです。応答前にマイクロプロセッサのクロックに同期するため、設定された時間内にプロセッサがより多くの命令を実行できます。

組み込みシステム内のSRAMとDRAMの違い


組み込みシステムでは多くの場合、両方のタイプのRAMが使用されます。高価であるが高速なSRAMの小さなブロックをクリティカルパスに沿って使用し、その他の機能については大きなブロックのDRAMを使用するのが一般的です。多くのシステムでは、RAM全体におけるSRAMの割合は10%未満です。

組み込みシステム用のメモリ:SRAMとDRAMの比較

 

Memory for embedded systems SRAM vs. DRAM

SRAMとDRAMの比較チャートをダウンロード

組み込みシステムにおけるRAMとROMの役割

エンジニアはプログラムの実行とデータ保存のために、組み込みシステムでRAMを使用します。永続的データを保存する場合は、読み取り専用メモリ(ROM)を使用します。

組み込みシステム内のメモリの種類

組み込みシステム内のメモリの種類は、一般的に揮発性と不揮発性の2つのカテゴリに分けられます。これらのカテゴリには各種のRAMメモリとROMメモリが含まれます。それらのメモリの詳細を以下に示します。

RAM
組み込みシステムで使用できるRAMには次のような種類があります。

  • SRAM:最速の揮発性メモリであるSRAMは、ほぼプロセッサ速度で動作するメモリです。DRAMよりも消費電力が小さい一方で、価格は高くなります。組み込みシステム内では限られた方法で使用されます。

    QtのシニアソフトウェアエンジニアであるTimo Aarnipuroは、多くのSoCやMCUではチップ上に少量の内蔵RAMが実装されていると指摘しています。「これは多くの場合、SRAMとCPUキャッシュがSoC上で組み合わされています。一部のチップ製品では、オンチップメモリ構成が異なるバリアントを選択できます。それにより、高速メモリの量が最適であるバリアントをある程度柔軟に選択できるようになっています」
  • DRAM:このメモリは、コンデンサーとトランジスターによって情報を保持します。この構成は、その性質上時間経過とともに情報が失われるため、継続的に更新しないとメモリ内のすべてのデータが失われます。DRAMはSRAMよりも低速で、コストも大幅に低くなっています。
  • SDRAM:このタイプのDRAMは組み込みシステムのバスと同期します。SDRAMはSRAMに比べてチップ上に占めるスペースが大幅に小さくなります。しかし継続的に更新する必要があることもあり、消費電力は大きくなっています。

    「この更新により、通常の動作時やシステムのスリープ時にも、非常に短時間ではあっても遅延が生じます」と、アイダホ州に本社を置く製品設計会社、SGW Designworks社の電気システムおよび組み込みシステム設計エンジニア、Dan Day氏は述べています。

ROM
組み込みシステムが使用できるタイプの不揮発性メモリです。

  • マスクROM:マスクROMの場合、メーカーがメモリチップに書き込んだデータは変更できません。非常に低コストのメモリであるマスクROMは、寿命の長い大量生産のデバイスで多く使用されています。

    マスクROMのデメリットは、チップ上に書き込まれたデータを誰も変更できないことです。

  • プログラマブル読み取り専用メモリ(PROM):このプログラマブルチップはプログラムされていない状態で購入し、1回限りのプログラミングを行います。ファームウェアや、ソースコード内の定数の保存に使用します。

    「シリアル番号、無線構成、またはユーザーが変更することが想定されないデータの保存に使用できます」とAarnipuro氏は述べています。

    Day氏は、PROMが陳腐化しつつあると述べています。プログラムと動作に高い電圧を必要とするためです。またDay氏は、「ほとんどのPROMでは、デバイスメーカーが1回限りのプログラミングを行う必要があり、それがロジスティクス上の問題になっています」とも述べています。これは特に、メモリを購入して自社の製品に組み込んでいる企業に当てはまります。

揮発性メモリと不揮発性メモリ両方の機能を持つその他の選択肢

一部の不揮発性メモリには、揮発性メモリの重要な機能を備えているものがあります。プログラムと再プログラムが可能であると同時に、電力供給がなくてもデータの保存ができます。

  • 電気的消去可能プログラマブル読み取り専用メモリ(EEPROM):チップを消去し、電気的な操作で再プログラムできます。

    エンジニアは、一般的にEEPROMを製品のファームウェアや開発中のファームウェアを保存するために使用しています。このEEPROMは顧客が製品を購入した後もファームウェアを更新する必要がある製品にとって有益です。

    「これは現在も広範に利用されています」と、QtのAarnipuroは述べています。「EEPROMには、通常10,000程度の書き込み-消去サイクルが保証されています」


  • フラッシュ:組み込みシステムの開発者は、他の不揮発性メモリやハイブリッドメモリよりも、フラッシュメモリを多く使用しています。フラッシュメモリはデバイスによる読み取りが高速で、かつ低コストです。サイズの大きなファイルをデバイスに保存するために使用されています。

    EEPROMと同様に、フラッシュメモリは電気的に再プログラム可能です。フラッシュメモリの消去と再プログラムはセクター単位で行いますが、その点が、バイト単位で行うEEPROMと異なります。

    システムオンチップ(SoC)には、フラッシュメモリが組み込まれているものがあります。外部ストレージでは、主に次の2種類のフラッシュメモリが使用されています。
  • NANDフラッシュ:エンジニアが一般的に使用しているのが、このフラッシュメモリです。小型のメモリであり、USBフラッシュドライブやソリッドステートディスプレイ(SSD)で多く使用されています。
  • NORフラッシュ:NORフラッシュはNANDフラッシュよりも高速かつ高価ですが、NANDほど長持ちしません。エンジニアは多くの場合、Execute-In-Place(XIP)コード用にNORフラッシュを使用しています。
  • NVRAM(不揮発性ランダムアクセスメモリ):このタイプのRAMでは電源がオフになってもデータが失われず、永続的に保存できます。高価ですが高速です。エンジニアは起動時間が非常に重要である場合にNVRAMを使用しています。
  • 強誘電体ランダムアクセスメモリ(FRAM):これも電源をオフにしてもデータが失われないタイプのRAMであり、高速で多数の書き込みサイクルが得られ、消費電力が少なくなっています。エンジニアはEEPROMやフラッシュメモリの代わりにFRAMを使用する場合があります。
  • 相変化メモリ(PCM):PCRAMとも呼ばれるPCMは不揮発性メモリであり、電源をオフにしてもデータが保持されます。エンジニアはフラッシュメモリの代わりにPCMを使用する場合があります。書き込みサイクルが速く、消費電力が低くなっています。

    「PCMは、SDRAMに迫る非常に高速の読み取り/書き込みが可能な、新しい技術です。不揮発性メモリとして、データを数十年間保持できます」と、SGW Designworks社のDay氏は述べています。

その他のタイプの外部メモリ

エンジニアは組み込みシステムで、次に示す外部メモリを使用することもできます。

  • SSD:メーカーは組み込みシステムでSSDを多く使用しています。エンジニアはフラッシュメモリを使用してデバイスを設計しています。
  • セキュアデジタルカード(SDカード):ポータブルデバイスで一般的に使用されている不揮発性メモリです。

組み込みメモリの階層

Embedded Memory Hierarchy

 

プロジェクトに最適な組み込みメモリ構成を選択するには

組み込みシステムに適するメモリまたはメモリの組み合わせを選択するには、価格、レイテンシ、容量など、さまざまな要素について検討することになります。検討すべき主な要素を次に示します。

  • 速度:組み込みシステムやデバイスによっては、起動の速さや、何らかの機能をすばやく実行することが求められる場合があります。そうした動作を考慮して、十分に高速なメモリを選択することが重要です。速度に関する性能はメモリのタイプによって異なります。たとえばSRAMはDRAMよりも大幅に高速です。
  • データストレージのサイズ:組み込みシステムでは多くの場合、データ保存のための容量が限られています。選択するメモリの種類によって、データの保存、維持、アクセスの方法が異なってきます。外部デバイスによってメモリを増設する方法もあります。
  • レイテンシ:選択するメモリまたはメモリの組み合わせは、組み込みシステムに影響します。
  • 電力消費:組み込みシステムやデバイスでは多くの場合、電力が限定されています。限定された電力でデバイスのパフォーマンスを確保する方法が求められます。

    「極めて重要でありながらあまり注意を払われない要素が、電源供給と電源管理です」とDay氏は語ります。「クリーンで安定した電源供給が鍵になります。システムアーキテクチャに対する電源管理的アプローチも重要です」
  • コスト:各種のメモリのコストは大きく異なります。一般的に、SRAMメモリはDRAMに比べて大幅に高価です。組み込みシステムのメーカーは、システムの良好な稼働に必要な場合に限って高価なメモリを使用するように、メモリの組み合わせを選択しなければなりません。

  • 開発とデバッグの容易さ:QtのAarnipuroは、メモリを選択する際には、組み込みシステムの開発とデバッグについて考慮すべきであると指摘しています。フラッシュメモリの書き込みが低速であると、コストの増大につながり、テストの実施がむずかしくなるとAarnipuroは述べています。不揮発性メモリが十分にないと、再起動につながる問題のデバッグが困難になります。それは「再起動前のデータが通常のDRAMメモリから失われるため」であるとAarnipuroは説明しています。

    「製品化の期限が重要であるならば、開発とデバッグの容易さを考慮すべきです。通常これは忘れられるか無視されていますが、製品に責任を持つ開発者にとって望ましいことではないでしょう」とAarnipuroは述べています。

  • 組み込みデバイスのグラフィカルユーザーインターフェイス(GUI)に関する要件:多くの組み込みデバイスには、ユーザー向けの画面またはディスプレイがあります。画面の解像度は「メモリから取得する必要があるデータの量に影響する」点で重要であるとAarnipuroは述べています(組み込みデバイスに適したディスプレイを選択する方法についてはQtのガイドをお読みください)。
  • セキュリティ:「メモリの選択によっては、組み込みシステム全体でさまざまなレベルのセキュリティリスクが生ずる可能性があります」と、セキュリティコンサルティング企業NCC Groupのハードウェアおよび組み込みセキュリティサービス担当バイスプレジデント、Rob Wood氏は述べています。メモリデバイスのコンピューティング要素にはセキュリティ上の脆弱性がある場合があります。

    Wood氏は、メモリのベンダーを精査することを勧めています。「システムの深部に至るまで、重要なファームウェアの脆弱性を回避できるベンダーが求められます。製品のライフサイクル全体を通じて継続的にセキュリティパッチを提供し、ファームウェアを維持できる、一貫性のあるプランがなければなりません。」

メモリの選択:組み込みシステムにおける重要な決定

組み込みシステム用のメモリとメモリの組み合わせを選択することは、システムにとって最も重要な決定事項になります。メモリはCPUに次いで高価な構成要素になると考えられます。組み込みシステムが最大限に機能するために必要なメモリのタイプを把握するには、広範なテストが必要になります。この場合、設計およびソフトウェア開発プロセスが確立されていると、適切な選択が促進されるでしょう。

メモリの決定をはじめ、組み込みシステムの構築全体をQtがサポート

組み込みシステム用に適切なメモリを選択することは、数多くの決定事項の1つにすぎません。Qtは各種のツールを通じて、システムに関する重要な意思決定を支援します。新しいソフトウェアフレームワークは従来のものに比べてメモリ消費が改善されており、使用するフレームワークをその開発過程を含めて評価することが効果的です。Qtの組み込み製品のプランニングおよび要件ガイドをダウンロードして、組み込みデバイス構築の参考にしてください。

商用ライセンスのトライアルやオープンソースを利用したい方は、ぜひQtの無料トライアルを開始してみてください!また、Qtについてご質問あり場合は、お気軽にお問い合わせください。

組み込みメモリに関するFAQ

ここでは、組み込みシステムのメモリの選択についてよく寄せられる質問を取り上げます。

メモリマップとは何ですか? 組み込みシステムにとってなぜ重要なのですか?

メモリマップは、組み込みシステム内でのメモリの構成を詳細に示す仮想データベースです。組み込みデバイスのオペレーティングシステムは、メモリマップを通じて、使用可能なメモリの量や、適切な場所から必要なメモリを獲得する方法を把握します。組み込みシステムに最適なオペレーティングシステムを選択する方法について、Qtのガイドをご覧ください。

組み込みフラッシュメモリとは何ですか?

組み込みフラッシュメモリは、ポータブルな家電製品などのデバイスで多く使用されているフラッシュメモリ技術です。メーカーによっては、デバイスで非リムーバブルのフラッシュメモリを使用している場合もあります。リムーバブルメモリカードによってフラッシュメモリを追加することも可能です。

フラッシュメモリは不揮発性メモリでは最も安価であり、一般的によく使用されます。特にモバイルコンシューマーデバイスのメーカーでは広範に利用されています。またさまざまな業界で、組み込みシステムや組み込みデバイスにも採用されています。

組み込みSRAMとは何ですか?

組み込みSRAMは、組み込みシステムで使用されるスタティックランダムアクセスメモリ(SRAM)です。SRAMは非常に高速なメモリですが、高価でもあります。組み込みシステムでは、高速で信頼性に優れたメモリが求められる重要な機能でSRAMが使用されます。

組み込みシステムで最速のメモリは?

組み込みシステムではおそらくSRAMが最速のメモリですが、高価でもあります。SRAMは揮発性メモリです。不揮発性メモリでは、NVRAMとPCMが比較的高速です。