こんにちは、 ダックです。

 

これまで C 言語に関する記事を多く書いてきました。

組み込みシステムにおいて、その C 言語で書いたコードをコンパイルして書きこんで置く場所、それが Flash メモリになります。 Flash メモリとはどのようなメモリなのでしょうか。

メモリの種類

Flash メモリはどのような位置づけなのかを見ていきます。

メモリの分類といえば以下のようになっています。



メモリ      
  RAM DRAM  
    SRAM  
    MRAM  
      など
  ROM EEPROM  
    Flash  
    CDROM  
      など



もともとは、

・RAM:動作が速いが電源を落とすとデータが残らない揮発性のメモリ
・ROM:動作が遅いがデータが残る不揮発性のメモリ

と分けることが多かったですが、近年は MRAM などの不意発性のRAMも登場しています。 

 

今回扱う Flash メモリは不揮発性のメモリです。

データの変更も容易で、身近なところでいえば USB メモリはこの Flash メモリが使われています。

Flash メモリの特徴

USB メモリは、自由に上書きができて便利だと思っていた私に、講師から衝撃の一言が飛んできました。

 

講師 「 Flash ってデータの書き換えできないのは知っている?」

私  「・・・・・え?」

 

どういうことなのでしょうか?

Flash メモリの動作 1 -データの書き込み-

Flash メモリの初期状態はすべてのビットが 1 になった状態になっています。

 

Flash メモリにおける書き込み動作は 1 のデータを 0 にすることだけなのです。

逆の操作になる0から1にすることはできません。また書き込める単位としてはデバイスにより差はありますが、1 Byte 単位、Word (2 Byte) 単位が一般的です。

Flash メモリの書き込み動作

 

しかしこれでは、一度書きこんだデータを変更できません。どうすればいいのでしょうか。

Flash メモリの動作 2 -データの消去-

Flash メモリができるもう一つの動作がデータの消去(イレーズ)です。

 

しかし、このイレーズ動作はすべて 0 になっているデータをブロックごとに 1 にします。

ブロックのサイズはデバイスにより異なりますが、64 KB など、書き込みに対して非常に大きなサイズになります。

Flash メモリのイレーズ動作

 

Flash メモリにおけるデータ変更方法はこの二つしかありません。

 

したがって上書きするには、少し手間がかかります。

例として、ホストとして PC を使い、Flash メモリ内のデータの黄色で塗られた部分を変更してみます。

Flash メモリの上書き方法

 

一度バッファに保存し、そのデータを変更し、Flash メモリに書き込むことになります。

また、Flash メモリにすべて0で書きこむ処理は Flash メモリが自動で行う場合は、意識する必要はありません。

このように、Flash では 1 bit 変更するだけでも、多くのステップが必要となります。

覚えておきたい+α

一般的に FPGA は揮発性のため、デザインデータを保存するためのコンフィギュレーション ROM と呼ばれる不揮発性のメモリをセットで使用する必要があり、おもに Flash メモリが使用されます。

インテル社では、コンフィギュレーション専用のシリアル Flash メモリとして EPCQ と EPCS を用意しています。

また、少し調べてみたところ、最近の FPGA では、コンフィギュレーション ROM を内蔵した FPGA である、MAX 10 デバイスがインテル社からリリースされているんですね。