マイクロコントローラのRAMがこれほど少ないのはなぜですか?


39

おそらくこれは知覚上の問題ですが、マイクロコントローラーは過去20年間で飛躍的に進歩しており、ほぼすべての点で、クロック速度の高速化、周辺機器の増加、デバッグの容易化、32ビットコアなどのように思われます...

RAMが数十KB(16/32 KB)で表示されることはまだ一般的です。

コストやサイズの問題に直接なるとは思えません。あるしきい値を超えるRAMコントローラーの複雑さの問題ですか?

それとも、一般的には必要ないというだけですか?

人気のあるインターネットサプライヤのパーツマトリックスを見ると、256 KBのCortex M4が8米ドル未満で見られ、さらに数ドルでROMのないものを見つけることができますが、かなりまばらです...

MBの揮発性ストレージを備えたマイクロコントローラーは必ずしも必要ではありませんが、誰かが...


8
おそらくもっと技術的な理由があるかもしれませんが、私にはそれは市場の問題かもしれません。マイクロコントローラを使用するアプリケーションがある場合、さらにパワーが必要な場合は、通常、より完全な組み込みシステムに移行します。
ジャロッドクリスト

15
数十キロバイト。すごく大きい。私のゴーへのマイクロコントローラを使用するものを試作中で68ありバイト:RAMのen.wikipedia.org/wiki/PIC16x84
slebetman

2
86KBで2KB RAMを搭載したArduinoで3Dソフトウェアラスタライザーを作成したことがあります。私が10 KBまたは50 KBさえあれば、実際のモデルをメモリにフィッティングし、何か面白いことをすることができたので、私は動揺しました。十分に対処してください。 はい、 SRAMは高価ですが、CPUにはSRAMで作られたメガバイトのキャッシュがありますが、それでもかなり安価です。それはつまらない言い訳のように感じます。
イマレット14年

2
@slebetmanあなたが20歳のマイクロが好きな理由は、はるかに優れたデバイスがより広く利用可能で安価であるときですか?
Markrages 14年

3
it seems like somebody mightここでキャッチですが、ほとんどの人はそうではありません。そのチップ上でNetflixを正確にストリーミングするつもりはありません。通常、64Kは、マイクロコントローラーで行う必要のあるすべてにとって十分です。もっと高くしたい場合は、ラズベリーなどの本格的なコンプを入手してください。
TC1 14年

回答:


44

これにはいくつかの理由があります。

まず、メモリは多くのシリコン領域を占有します。これは、RAMの量を増やすと、チップのシリコン面積が増加するため、コストが増加することを意味します。シリコン面積が大きいと、価格に「ダブルワーミー」効果があります。チップが大きいほど、特にエッジ周辺では、ウェーハあたりのチップが少なくなり、チップが大きいほど、各チップに欠陥が発生しやすくなります。

2番目はプロセスの問題です。RAMアレイは、ロジックとは異なる方法で最適化する必要があり、同じチップの異なる部分を異なるプロセスで送信することはできません。チップ全体を同じプロセスで製造する必要があります。多かれ少なかれDRAMの製造に専念している半導体ファウンダリーがあります。CPUやその他のロジックではなく、DRAMをそのまま使用します。DRAMには、面積効率の良いコンデンサと非常に低いリーク電流のトランジスタが必要です。コンデンサを作るには特別な処理が必要です。低リークトランジスタを作成すると、トランジスタが遅くなります。これは、DRAM読み出し電子回路のトレードオフですが、高性能ロジックの構築にはあまり適していません。マイクロコントローラのダイでDRAMを製造することは、プロセスの最適化と何らかのトレードオフが必要になることを意味します。また、大規模なRAMアレイは、その大面積、歩留まりの低下、およびコストの増加のために、障害が発生しやすくなります。大規模なRAMアレイのテストにも時間がかかるため、大規模なアレイを含めるとテストコストが増加します。さらに、スケールメリットにより、専用のマイクロコントローラーよりも、個別のRAMチップのコストが削減されます。

消費電力も別の理由です。多くの組み込みアプリケーションは電力に制約があるため、多くのマイクロコントローラーは非常に低電力のスリープ状態にできるように構築されています。非常に低電力のスリープを有効にするには、SRAMを使用します。これは、非常に低い電力消費で内容を維持できるためです。バッテリバックアップ式SRAMは、単一の3Vボタンバッテリで何年もその状態を保持できます。一方、DRAMはその状態を1秒未満しか保持できません。コンデンサは非常に小さいため、一握りの電子がトンネルを通って基板に侵入したり、セルトランジスタから漏れたりします。これに対抗するには、DRAMを継続的に読み取り、書き戻す必要があります。その結果、DRAMはアイドル状態のSRAMよりもかなり多くの電力を消費します。

反対に、SRAMビットセルはDRAMビットセルよりもはるかに大きいため、大量のメモリが必要な場合は、一般的にDRAMの方が適しています。このため、少量のSRAM(kBからMB)をオンチップキャッシュメモリとして使用し、大量のオフチップDRAM(MBからGB)を使用するのは非常に一般的です。

組み込みシステムで使用可能なRAMの量を低コストで増やすために、非常に優れた設計手法がいくつか使用されてきました。これらのいくつかは、プロセッサとRAMの個別のダイを含むマルチチップパッケージです。他のソリューションでは、CPUパッケージの上部にパッドを作成して、RAMチップを上部に積み重ねることができます。このソリューションは、必要なメモリ量に応じてCPUの上に異なるRAMチップをはんだ付けできるため、ボードレベルのルーティングを追加する必要がありません(メモリバスは非常に広く、多くのボード領域を占有します)。これらのシステムは通常、マイクロコントローラーとは見なされないことに注意してください。

とにかく非常に小さな組み込みシステムの多くは、それほど多くのRAMを必要としません。大量のRAMが必要な場合は、オンボードSRAMではなく、外部DRAMを搭載したハイエンドプロセッサを使用することをお勧めします。


レッグとすべてがプロセッサ(BGAパッケージ)の上に接着/配置され、それらにルーティングされる実際のRAM ICを見ました!ボードスペースのために私たちがすること!! ロシア人がTRIZの設計方法論で指摘しているように、XとYにスペースがなくなったら、Zに進んでください:)
KyranF 14年

2
+1 SRAMとDRAMの重要な区別のため。SRAMは、特にアイドル状態のときに高速でエネルギー効率が向上しますが、ご指摘のとおり、かなり高価であり、より多くのスペースが必要です。
フィズル14年

SRAMはRAMの中で最も高価な種類ではないと思います。フリップフロップとマルチプレクサの組み合わせはランダムアクセスメモリとして使用でき、SRAMよりも優れたパフォーマンスを提供しますが、シリコンコストは大幅に増加します。通常、このようなメモリは約32ワードよりも大きくなることはありませんが、SRAMでは不可能な方法での同時読み取りと書き込みに対応できます。
supercat 14年

1
確かに、レジスタファイルとフルフリップフロップはSRAMよりも高価ですが、汎用システムメモリには使用されません。
alex.forencich 14年

1
160kBのSRAMと外部DRAMのないMCUで動作するHTTPサーバーを見てきました。多くの並列接続を処理できませんでしたが、機能しました。
ヤンドルニアック

15

メモリはおそらく最も多くのシリコンスペースを占有し、RAMは非常に高速であるため揮発性であり、常に状態を維持するために電力を使用します。大量のRAMが必要でない限り、他の多くのアプリケーションには役立ちません。組み込みシステムの設計者がより多くのRAMを必要とする場合、外部RAMチップを取得し、プラグアンドプレイメモリ拡張を非常に簡単にするために、最近マイクロコントローラによくある周辺メモリインターフェイスを使用します。理にかなっているアプリケーションコードとユースケースシナリオでは通常あまり必要ないので、マイクロコントローラーが一般に適度に低いオンボードRAMを持っている理由として私が考える理由です。

オペレーティングシステムで完全に実行する必要がある大規模なアーキテクチャに着手すると、RAMが非常に重要になりますが、これはマイクロコントローラーの領域から抜け出し、BeagleboneやRaspberri Piボードで見られるような組み込みコンピューターになります日々。また、この段階でも、プロセッサは非常に複雑で機能が豊富であるため、タスクに必要なRAMの容量を確保する余地がないため、外部メモリはほとんど動作しません。

編集:

個人的な逸話として、私は最近、モーション検出やオブジェクトの追跡や追跡などの低解像度のコンピュータービジョンに使用することを目的として、小型の自律ロボット制御ボードを作成しました。私はこのタスクに少ないピン数のARM Cortex M3を選択し、AtmelのSAM3シリーズプロセッサの選択を見ながら、実際に見つけられる最高のRAMを探しました。この場合、外部RAM ICを購入したくなかったからです。基板スペースとPCB上の高速RAMメモリバスの複雑さを望まないためです。この場合、特定のアプリケーションでは、可能であれば、RAMをさらに数百KB増やすオプションがあればいいと思います。


良い点は、電力消費についても考えていませんでした...
Grady Player 14年

4
「RAMは揮発性ですが、非常に高速に使用でき、常に電力を使用してその状態を維持します」。SRAMを含むCMOSロジックは、状態を変更しないときの消費電力が非常に小さくなります。ほとんどのマイクロコントローラーは、非常に低消費電力のパワーダウンモードでもRAMの内容を保持していることに注意してください。
クリスストラットン14年

@ChrisStratton:いくつかの異なるメーカーの多くのマイクロコントローラーを見ましたが、それらのRAMの一部をシャットダウンし電力を節約するモードがありますが、多少面倒なことに、RAMの電源を入れることができませんシステムリセットなし。後者の制限の目的が何であるかわからない 特定の操作中に一時ストレージ用に大きなRAMチャンクが必要な場合、そうでない場合は、必要なときに電源をオンにしたり、必要でないときにオフにしたりできない理由がわかりませんが、特徴。
supercat

14

他の回答で挙げられた優れた点に加えて、RAMが制限されるもう1つの理由は、マイクロコントローラーのアーキテクチャです。たとえば、わずか448 バイトのプログラム(フラッシュ)メモリと64 バイトのRAM しか搭載していないMicrochip PIC10LF320 を使用します。しかし、おそらく大量に25ȼ(またはそれ以下)しかかかりません。PIC10命令ワード(12ビット)のサイズが制限されているため、128バイトのRAMのみを直接アドレス指定できます。

8ビットのアドレスバスのみを持ち、256バイトのRAMに制限する他のマイクロコントローラーが存在するはずです。

しかし、ほとんどのミッドレンジマイクロコントローラー(8ビットのデータパスを備えたものも含む)には、16ビットのアドレスバスがあります。これらのチップの主要なアーキテクチャ上の考慮事項は、チップがハーバードアーキテクチャとフォンノイマンアーキテクチャのどちらを使用するかです。

ほとんどのマイクロコントローラは、プログラムメモリ、RAM、およびメモリマップドI / Oアドレス用に個別の16ビットアドレス空間を持つハーバードアーキテクチャを使用しています。そのため、16ビットアドレスバスは最大64K(65,536)バイトのRAMにアクセスできます。アーキテクチャにはまだ64Kの制限があり、それ以上にしたい場合は、何らかのページングを使用する必要があります。RAMスペースよりもプログラムスペースのページングを使用する方がはるかに一般的です。

フリースケールHCS08ラインなどのVon Neumannアーキテクチャを使用するマイクロコントローラーのアドレス空間は、プログラムメモリ、RAM、およびメモリマップドI / Oに分割されています。適切な量​​のプログラムスペースを確保するために、これによりRAMの量が通常4Kまたは8Kに制限されます。繰り返しますが、ページングを使用して、使用可能なプログラムまたはRAMスペースを増やすことができます。


1
ただし、PICコアはまったくコード効率が悪いため、多くの余分なフラッシュを無料で消費することに注意してください。また、多くのRAMを必要としない1つの理由は、たとえば呼び出しスタックの深さに厳しい制限があるためです。
ランディン14年

@Lundin Agreed、元のPIC10とPIC12をアセンブリ言語で非常に慎重にプログラムする必要があります。新しいPIC12FおよびPIC16Fデバイスには、16レベルのハードウェアスタックと14の新しい命令が含まれています。C用に追加されたものもあるため、さらに使いやすくなっています。
tcrosley 14年

@Lundin:12ビットと14ビットの命令長を持つPICチップは、私が考えていたコード密度にかなり適していました。PIC18Fは、一般的に必要とされる過剰なバンクスイッチングのために、HiTechコンパイラを使用するとコード密度が実際に低下する傾向がありました。
supercat

7

しばらくの間、マイクロコントローラーと小さなシステムで作業してきたので、非常に多くの場合、非常に少ないRAMが必要であることを指摘したいと思います。MCUが多くのことを達成できるとしても、最近の傾向は、これまでよりも多くのMCUを使用し、より多くのタスクをより大きなシステムに分散するために使用する傾向があることを忘れないでください。これは、Windowsでのプログラミングに必要な肥大化した開発システムとは異なり、MCU開発では、非常に最適化されたコンパイラーを使用することが多く、ほとんどの場合、非常に効率的なCおよびC ++ソースコードを使用し、OSのオーバーヘッドはほとんどまたはまったくありません。OSリソースを含む少なくとも数百キロバイトを消費することなく、デバイス上で名前を表示するWindowsプログラムを書くことはほとんどできませんが、

確かに、他の人が指摘したように、コストとスペースの問題があります。しかし、ここで手元にある歴史は、最近の新参者によって少量のRAMと見なされているものは、これまでにないほど多くのことであり、その間、MCUがインターフェースする必要のあるコンポーネントおよびデバイス自体はよりスマートになっています。正直なところ、最近の多くのMCUアプリケーションでのRAMの最大の使用は、データを失うことを恐れずに他のタスクのためにMCUを解放するための割り込み駆動型通信バッファ用です。しかし、信じられないかもしれませんが、通常のロジックと計算機能では、MCUは限られた組み込みのRAMおよびフラッシュリソースに非常によく適合しており、ごくわずかで多くのことができます。

昔々、粗雑なグラフィックスを備えた有名なビデオゲームで、「PAC Man」や「Space Invaders」のような複雑なゲームロジックは、通常8 KBまたは16 KBのRAMしか搭載されていないマシンで行われていました。


SDカードはどうですか?SDHCカードは256または512バイトのバッファーを必要としませんか(標準/古いSDカードは生産されなくなりました)?
ピーターモーテンセン14年

Atari 2600ビデオコンピュータシステムのパックマンのバージョンは4K ROMで、VCS自体には128バイトのRAMがありました。しかし、多くのアーケードマシンには、当時のホームコンピューターと比較して、かなりまともなROMとRAMのチャンクがありました。たとえば、Defenderには32KまたはROMと64KのRAMがありましたが、32KのRAMはCPUの観点からは「書き込み専用」でした(プロセッサは、ディスプレイハードウェアがモニターに出力するデータをそこに置きます) 。
supercat 14年

@PeterMortensen多くのSDカードには、フラッシュを管理するための何らかの統合CPUが搭載されています。一部のカードには、16または32KのRAMが接続されている可能性のある完全な32ビットARMコアがあります。
alex.forencich 14年

@ alex.forencich:はい、しかし、SDHC SDカードを操作するためのSPIインターフェースは、ホスト側(組み込みシステム/マイクロコントローラー)にバッファを必要としませんか?古いカードとは対照的ですか?つまり、新しい(SDHC)カードではビットアドレス指定ができなくなりましたか?または、ファイルシステムにのみ依存していますか(ビットアドレッシングも可能です)。新しいカードはブロック転送を必要としませんか(したがって、256または512バイトのバッファーが必要です)?
ピーターモーテンセン14年

はい、思い出すと512Bです。データの最初のXバイトを破棄するために、非効率的なSDカードドライバーを記述するだけで済み、「大きな」バッファーは必要ありません。
堂免

3

コストと製造に関する優れた点に加えて、多くのオンチップRAMに対する需要は驚くほど少ないです。

多くの場合、数十kB(16kB、32kB)のフラッシュとkB範囲(1kB、2kB)のRAMを備えたマイクロコントローラーを使用します。私は非常に頻繁にフラッシュを使い果たし、ほとんどRAMを使い果たしません。ほとんどのプロジェクトで、フラッシュの制限にかなり近づいていますが、通常はRAMの20%未満しか必要としません。

ほとんどの非常に小さなマイクロコントローラーには、2種類の役割があります。

  • 規制と制御:機械を制御する必要があります。数十kBのコードスペースを占有する可能性がある複雑なコントローラーアルゴリズムの場合でも、RAMはほとんど必要ありません。あなたは物理プロセスの制御下にあり、いくつかの物理ユニットを含む変数と、おそらくループカウンターとしてのいくつかの変数を持っています。もっとする必要はありません。

  • データ処理:まれに、大量のデータを同時に保存する必要がある場合、外部RAMを使用できます。ほとんどすべての最新のマイクロコントローラーは、ネイティブサポートを備えています。大量のメモリを使用する単純なプログラムが必要な場合、高レベルのマイクロコントローラではなく、小型のマイクロコントローラと外部RAMを使用する方が安価で小さくなります。少数のポート、小さなフラッシュ、大きなRAMを備えたコントローラーは、需要がほとんどないため、だれも作成しません。


2

すでに述べた理由はすべて、もちろん、技術的に有効かつ正確です。ただし、エレクトロニクスはビジネスであり、MCUはエレクトロニクス業界で最も競争力のあるニッチ市場の1つであることを忘れないでください。

MCUの価格を組み込みSRAMの量にリンクする実際の理由は、コスト上の理由ではなく、主にマーケティング上の理由であると言いたいと思います。

  • ほとんどの設計では、最大達成可能クロック周波数は制限要因ではありません。代わりに、使用可能なSRAMの量があります。誤解しないでください、CPU周波数は非常に重要ですが、特定のMCUファミリセグメント内では、通常、最大CPU周波数に基づいて異なるデバイスモデルが異なる価格で提供されることはありません。また、フラッシュプログラムストレージは他の重要な制限要因ですが、フラッシュにはあまり焦点を当てません(質問は特にSRAMに向けられています)。

  • 使用可能なSRAMの量は、MCUに組み込むことができる複雑さのレベルに直接関係します。これは、サードパーティのライブラリを使用する場合でも、独自のロールアウトコードを使用する場合でも同様です。したがって、MCUの価格に基づいてセグメント化することは「自然な」メトリックです。技術的なお客様は、より複雑なタスク(より多くのSRAM、より多くのフラッシュストレージ)が可能なMCUの方がコストが高くなることを受け入れることは理解できます。ここでの価格とは、MCUの根底にある価値(機能の提供)を反映したものです。フラッシュストレージは通常、SRAMに比例した量で提供されます。

  • それどころか、デスクトップおよびモバイルCPU市場を利用する場合、通常、特定のMCU / CPUをさまざまなSRAMサイズで調達することはできません。代わりに、価格設定スキーマは通常、MCU / CPUの実行/パフォーマンス機能の上に構築されます:周波数、コア数、電力効率...


これはおそらく正確だと思いますが、証拠はありますか?チップaをチップbとして販売するためにトレースをスクラッチするのが好きですか?
グレイディプレーヤー14年

えっと…おもしろい考え。私はそのような慣習の証拠を持っていません。ただし、基礎となる製造コストについて興味深い疑問が生じます。より大きなSRAMサイズのチップがより小さなSRAMサイズまで削られた場合、シリコンチップ(ウエハ)の無駄な領域はより高価になりますか?または、単一のデバイスではなく2つのデバイスの製造に関連する製造コストと在庫コストの増加ですか?エレクトロニクス業界全体が、コストを公然と議論することについて非常にうるさいのではないかと思います。知らないかもしれません。
jose.angel.jimenez 14年

1
証拠として:MT6250はマルチダイチップであり、シングルチップフィーチャーフォンに使用され、価格は2ドル未満で、mcuよりもはるかに複雑で、8MBのスラムダイが含まれています。技術SRAMリッチmcu。
hulkingtickets

これは、「MCUの価格が埋め込みSRAMの量にリンクしている理由」に対する良い答えでしょう。しかし、元の質問には答えていないようです。どんな価格でも512 KB以上のSRAMをオンチップで使用できるマイクロコントローラーが少ないのはなぜですか?専用のSRAMチップメーカーが在庫コストの削減により2のべき乗サイズで専用のSRAMチップを生産するだけの価値があると考えるのに、なぜ2のべき乗でないサイズのSRAMを備えたマイクロコントローラーが非常に多いのですか?
ダビデカリー

1

そのため、最初に16 KBまたは32 KBは膨大な量のメモリであり、今日販売されているほとんどのマイクロコントローラにはそのような大量のRAMがないことを考慮する必要があります。

多くのマイクロコントローラプログラムには、10または50バイトのメモリが必要です。さらに複雑なものでも、ほとんど何百バイトも必要です。

基本的に、RAMをKバイトのオーダーで必要とする3つのユースケースがあります。

次に、マイクロコントローラーRAMについて話す場合、レベル0 /レベル1キャッシュについて話すことに注意してください。Intel Haswellにレベル1キャッシュが「64 KByte」しかないことを考慮すると、マイクロコントローラーのRAMサイズを再検討することになります。

3つ目は、特にCPUに接続できる以上の量の外部RAMをマイクロコントローラーに接続できることです。

個人的には、多くのマイクロコントローラーアプリケーションを開発しており、1 KB以上のメモリは必要ありませんでした。また、外部RAMを使用したこともありません。

あなたのプログラムとデータはROMにあるので、ROM(今日のフラッシュ)に来ると物事は異なります。多くのデータがあるため、マイクロコントローラに外部ROMを接続するアプリケーションは本当にたくさんあります。

例を見てみましょう。マイクロコントローラアプリケーションを分析して、ディスプレイと4ギガバイトのフラッシュを備えたポータブルMP3プレーヤーを取り上げます。

このアプリケーションには、おそらく1 KBのRAMが必要です。それは仕事をするのに十分です。ただし、USBからフラッシュへの書き込みを高速化するために、より大きなバッファーにRAMをいくつか使用できます。

違いがわかりました。典型的なPCはすべてのプログラムとデータをRAMに保持しています。したがって、大量のRAMが必要です。マイクロコントローラーの場合、これはすべてFlash / ROMにあります。


2
多くのアプリケーションでRAM使用量を過小評価しています。莫大な量ではなく、インスタンスに応じて10〜100倍になります。MP3プレーヤーはデジタル信号処理を行う必要があります。
ジェイソンS

私はあなたのどちらかがこれらのことを言っている理由を知りたいです。RAMが必要なCコマンドの種類。「これらのアプリケーションはより多くのRAMを必要とする」と言うよりも、「これらの操作はより多くのRAMを必要とするので...」
フレデリック

-1

MCUを設計する際、PCではそれほど重要ではない状況に直面する必要があります。

  1. 耐久性

    コンポーネントを選択するために、必ずしも最高または最高のパフォーマンスの部品を使用する必要はありませんが、数年の使用後に適切に動作することが証明されている部品は、数年間利用可能で、24時間年中無休で稼働できます年。この状況により、コントローラーが数年間市場に出ていて、その仕事をうまく行っている場合、今日のPC標準と比較して、RAMが貧弱であるようです。とにかく、それはうまく機能し、エンジニアリングがうまくいけば、交換の必要はないはずです。

  2. スペース

    マイクロプロセッサユニットは文字通りマイクロです。必要なスペースを最小限に抑える必要があります。もちろん、10年前の64 KBチップと同じスペースで256 MBを取得できます。これが#1のポイントです。

  3. 価格

    購入価格だけでなく、消費電力も。ビジネスのライバルが25 Wのみを必要とする場合、エントリーシステムを制御し、1000 Wを必要とするMCUを設計する必要はありません。そして、より安い購入価格(同じ品質)は常に良い。


1
それは本当に高出力のマイクロプロセッサです!
KyranF 14年

2
私は1kWのMCUが非常に長く固体状態に留まらないだろうと推測しています。
ダンブライアント14年

1
最近のPC設計では、3つのポイントすべてが非常に重要です。

@KyranF:はい、両方の数値を100で除算します。しかし、どちらかといえば、バッテリーアプリケーション向けの高性能プロセッサと低電力マイクロコントローラの相対的な電力差を控えめに言っています。
ベンフォイト14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.