Special
» 2013年02月25日 00時00分 UPDATE

宮崎 仁のマイコン基礎の基礎:第5回 メモリのしくみと種類

[PR/EDN Japan]
PR

 マイコンの動作では、CPUだけでなく、メモリがとても重要な役割を果たしています。メモリは、1バイト(8ビット)の大きさの小部屋がぎっしりと並んでいて、各部屋に順番にアドレス(部屋番号)が付けられた構成になっています。CPUは、アドレスを指定して、メモリにデータを書き込んだり、メモリにあるデータを読み出します。

 今回はメモリの働きについてまとめてみます。

主記憶とアドレス、メモリ空間

 マイコンのメモリには、プログラムを記憶する、データを記憶する、という二つの大きな働きがあります。ストアド・プログラム方式では、機械語のプログラムをデータと同様にメモリに記憶しておき、そこから一つずつ命令を取り出して実行することが大きな特徴となっています。この、プログラムをデータと同様に記憶するためのメモリを、特に主記憶(メインメモリ)と呼びます。

mm130225_miconbasic5_fig1.jpg 図1 プログラムとデータ

 主記憶は、単にプログラムやデータを記憶しているだけではなく、CPUからの要求に応じて、高速に読み出し(read)や書き込み(write)ができることが必要です。また、プログラムにしてもデータにしても、基本的には1バイト単位で細かく読み出しや書き込みを行う必要があります。それを満たすために、主記憶では1バイト単位でアドレスを指定してアクセスできる構造を採用しています。

 このように、アドレスが付けられて自由にアクセスできるメモリの領域を、アドレス空間あるいはメモリ空間と呼んでいます。

 なお、組み込み機器で広く用いられているシングルチップ・マイコン(CPU、メモリ、周辺機能を1個のLSIに内蔵しているマイコン)の場合、プログラム・メモリは読み出しだけで書き込みできないものが一般的です。

 一般に、アドレス空間の容量と実際に存在するメモリの容量は一致しないのが普通です。アドレス空間の容量は、そのマイコンの命令で指定できるアドレスのビット数で決まります。例えば、16ビットのアドレスを指定できるマイコンは、216=64Kバイトのアドレス空間をもちます。一方、実際のメモリの容量は大きくなるほどコストがかかりますし、寸法や消費電力も大きくなりますから、必要な分だけ実装します。

mm130225_miconbasic5_fig2.jpg 図2 メモリのアドレス
mm130225_miconbasic5_fig3.jpg 図3 アドレス空間

 シングルチップ・マイコンでは、同じCPUでメモリ容量の異なる製品がいくつも用意されます。例えば、TIの超低消費電力マイコンであるMSP430™ファミリは、20ビット(拡張アドレッシングモード)または16ビット(基本アドレッシングモード)のアドレス空間をもち、0.5Kバイトから512Kバイトまでさまざまなメモリ容量の製品を選択できます。

型名 フラッシュ・メモリ(注2) SRAM(注2) 汎用I/O その他の特長
MSP430F6779 512Kバイト 32768バイト 90本 6シリーズ(LCDドライバ付)
MSP430F5438A 256Kバイト 16384バイト 87本 5シリーズ
MSP430F5525 64Kバイト 4096バイト 63本 5シリーズ(USB付)
MSP430G2553 16Kバイト 512バイト 24本 バリューライン
MSP430G2353 4Kバイト 256バイト 24本 バリューライン
MSP430G2153 1Kバイト 256バイト 24本 バリューライン
MSP430G2001 0.5Kバイト 128バイト 10本 バリューライン
表1 超低消費電力マイコンMSP430ファミリの製品例(注1)

(注1)全体では400以上の品種がある。ここでは、ごく一部を示す。
(注2)フラッシュ・メモリはプログラム・メモリおよび書き換え頻度が低いデータ・メモリ用。SRAMはワーク・メモリ(書き換え頻度が高いデータ・メモリ)用。フラッシュとSRAMは同じアドレス空間に置かれている。

記憶の階層化〜レジスタから外部記憶まで

 コンピュータ用語では、通常は主記憶のことをメモリと呼びますが、広い意味では主記憶以外でもデータを記憶・保持する機能や装置をメモリと呼ぶこともあります。次に、主記憶以外の記憶装置(広義のメモリ)にはどんなものがあるかを見ていきましょう。

 マイコンのプログラムは主記憶に記憶されており、プログラムで使用する各種のデータも基本的には主記憶に置かれています。しかし、主記憶だけでは効率良くマイコンを動作させることができません。

 一般に、メモリが大容量になるほどコストが高くなりますし、また読み出しや書き込みに時間がかかるようになります。マイコンが動作している間は、メモリから命令を1個ずつ取り出しては実行するという動作を常に繰り返しています。演算命令の場合は、演算に必要なデータを読み出してきて、演算結果を書き込むという動作も必要になります。そのため、プログラムを高速に実行するためには、なるべく大容量メモリへのアクセスを減らす必要があります。

 CPUの内部には1バイト〜4バイト程度のごく小規模な記憶場所である汎用レジスタがいくつもあり、通常はレジスタに保持したデータを用いて演算を行い、演算結果もレジスタに保持します。さらに、最近のCPUでは、主記憶の内容の一部をあらかじめCPU内部に移しておき、高速に読み書き可能なキャッシュ・メモリを備えたものもあります。キャッシュ・メモリを用いれば、命令を1個ずつ取り出すときの待ち時間をなくし、プログラムの実行を高速化できます。

 一方、大量のデータを扱いたい場合には、すべてのデータを主記憶に置こうとすると大容量の主記憶が必要になり、コストが高くなってしまいます。また、パソコンのように電源を切ると主記憶の内容が消えてしまうシステムでは、HDDやフラッシュ・メモリのように電源を切ってもデータを保持できる媒体を用いるのが便利です。このような大容量の、あるいは電源なしにデータを保持できる記録媒体は、外部記憶、補助記憶、あるいはストレージなどと呼ばれています。

mm130225_miconbasic5_fig4.jpg 図4 記憶の階層化

 なお、HDD(ハードディスク)やDVD-ROMのような大容量の記録媒体は、大量のデータをまとめて扱うのに便利なように、HDDは512バイト〜4Kバイト程度、CD-ROMやDVD-ROMは2Kバイトを1セクタとして、セクタ単位でアドレスが付けられています。バイトごとにアドレスが付いていないので、HDD上に保存されたプログラムをその場で直接実行することはできません。HDD上のプログラムは、必ず主記憶に転送してから実行されます。

 また、HDDやDVD-ROMからデータを1バイトだけ読み出そうとしても、1セクタ全部読み出さなければならないので、時間がかかってしまいます。また、1バイトだけ書き込もうとしても、1セクタ単位で書き込まなければなりません。時間がかかるだけでなく、細かいデータを独立して保存しようとすると無駄に容量を消費してしまいます。

 現在のコンピュータシステムは、小容量で高速なものから、大容量で低速なものまで、いくつかの記憶装置を階層的に組み合わせて効率良くシステムを構成しています。

コラム:フラッシュ・メモリ

 USBメモリや小型メモリ・カードなどに広く用いられているNAND型フラッシュ・メモリは、2Kバイト〜8Kバイト程度のページ単位で読み出しや書き込みを行います。さらに、書き込みの前に行うデータ消去は、64ページ〜256ページ程度のブロック単位で行います。その点で、NAND型フラッシュ・メモリは主記憶に使用するには不向きであり、HDDやDVD-ROMのような大容量記録媒体としての使い方に向いています。

 同じフラッシュ・メモリでも、NOR型は1バイト単位で読み書きできるので、主記憶に用いるのに適しています(消去はブロック単位)。最近では、シングルチップ・マイコンの内蔵プログラム・メモリにはNOR型フラッシュ・メモリが多く用いられています。例えば、TIの超低消費電力マイコンであるMSP430ファミリでは、大半の機種でプログラム・メモリとしてフラッシュ・メモリを採用しています(より高速で低消費電力なFRAMや、書換え不能なマスクROMを搭載した製品もあります)。


命令とアドレス、スタック

 主記憶は、アドレスを指定して自由にアクセスできますが、プログラムでいちいちアドレスを指定するのが面倒な場合もあります。アドレスを指定せずに一時的にデータを置き、後で取り出せる特別なメモリとして、スタック(stack)があります。スタックは「棚」とか「積み重ねる」という意味があります。

 CPUから見ると、スタックは1個の記憶場所であり、アドレスを指定せずにアクセスできます。さらに、通常のメモリはデータを書き込むと前にあったデータは上書きされて消えてしまいますが、スタックではデータは上書きされず、新しいデータを書き込むとどんどん上に積み上げられていきます。一方、データを読み出すときは、常に一番上に積まれたデータが読み出されて、そのデータはなくなります。

 これは、LIFO(Last-In、First-Out)あるいは後入れ先出しと呼ばれる方法で、データを書き込んでいったのと逆順で読み出してくることができます。順序関係さえ間違えなければ、書き込んだデータを正しく読み出すことができます。

 スタックを利用するために、ほとんどのマイコンはpushとpopという命令をもっています。pushはスタックにデータを置く、popはスタックに置いたデータを取り出す、という命令です。

 スタックは、特別な専用ハードウェアで実現することも可能ですが、たいていのマイコンでは、主記憶の一部をスタックとして利用しています。スタックポインタと呼ばれる特別なレジスタがCPUに内蔵されていて、データを書き込んだり読み出したりするアドレスを自動的に管理しています。

mm130225_miconbasic5_fig5.jpg 図5 スタックの機能
mm130225_miconbasic5_fig6.jpg 図6 スタックの実現方法

※MSP430はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。

TIのマイコン製品の詳細はこちら

宮崎 仁のマイコン基礎の基礎 第6回 「さまざまなメモリデバイス」は、3/25(月)の公開を予定しています。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.


提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2013年3月31日

設計に役立つヒント集

宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎:
第24回 割り込みっていろいろあるのですか?どんな種類があるか教えてください。

今回は、外部割り込み、内部割り込み、ソフトウェア割り込みについて詳しく解説しています
全文を読む


電源IC選択のヒント集
電源IC 使用時の注意点をわかりやすく説明しているほか、使用時に発生する可能性のあるさまざまなトラブルとその対処法についても紹介しています。ぜひご利用ください。ダウンロードには myTI アカウントが必要です。
Part 1をダウンロード
Part 2をダウンロード


アナログ回路設計式一覧ポケット・ガイド
日本語版 PDF

英語版で高い評価を受けてきたポケット・ガイドの日本語版が完成しました。基板レベルやシステム・レベルの回路設計でよく使われるアナログ設計式を紹介しています。ダウンロードには myTI アカウントが必要です。
ダウンロード



facebook & twitter

製品情報、セミナーや展示会などのイベント情報をお知らせしています。

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.