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

 

これまで 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 や EPCQA を用意しています。

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