メモリーの種類
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 メモリーの動作 2 -データの消去-
Flash メモリーができるもう一つの動作がデータの消去(イレーズ)です。
しかし、このイレーズ動作はすべて 0 になっているデータをブロックごとに 1 にします。
ブロックのサイズはデバイスにより異なりますが、64 KB など、書き込みに対して非常に大きなサイズになります。
Flash メモリーにおけるデータ変更方法は、この二つしかありません。
したがって上書きするには、少し手間がかかります。
例として、ホストとして PC を使い、Flash メモリー内のデータの黄色で塗られた部分を変更してみます。
一度バッファーに保存し、そのデータを変更し、Flash メモリーに書き込むことになります。
また、Flash メモリーにすべて0で書きこむ処理は Flash メモリーが自動でおこなう場合は、意識する必要はありません。
このように、Flash では 1 bit 変更するだけでも、多くのステップが必要となります。
覚えておきたい+α
一般的に FPGA は揮発性のため、デザインデータを保存するためのコンフィグレーション ROM と呼ばれる不揮発性メモリーをセットで使用する必要があり、
おもに Flash メモリーが使用されます。
インテル社では、コンフィグレーション専用のシリアル Flash メモリーとして EPCQ や EPCQA を用意しています。
また 少し調べてみたところ 最近の FPGA では、コンフィグレーション ROM を内蔵した FPGA である、MAX® 10 デバイスがインテル社からリリースされているんですね。