はじめに
こんにちは、マス男です。
今回の赤面エピソードは初めて FPGA の内蔵メモリー・ブロックについて勉強したときに思ったことをお話しします。
FPGA デバイス内部にはメモリー・ブロック(=メモリーとして使用する専用領域)が組み込まれています。
図1. Cyclone® IV 内部構造
ユーザは、このメモリー・ブロックで以下の3種類のメモリーを実現することができます。
・RAM ( Random Access Memory ) : 指定したアドレスに対してデータを書き込み・読み出すことができるメモリー。電源を OFF にするとデータが消去する揮発性である。
・ROM ( Read Only Memory ) : 指定したアドレスのデータを読み出すメモリー。電源 OFF にしてもデータが残る不揮発性である。あらかじめ ROM 内部にデータを書き込む必要がある。
・FIFO ( First-In First-Out ) : 書き込んだデータの古い順から読み出すメモリー。 アドレスの概念がない。
メモリー・ブロックは Quartus® II の Tools メニュー ⇒ MegaWizard Plug-In Manager からデザインすることができます。
FPGA のメモリー・ブロックは 3種類のメモリー ( ROM、RAM、FIFO ) を実現するなんて不思議に思いました。
ここでマス男はひらめきました。
「 ROM は電源 OFF にしてもデータは消えない。だったら、 FPGA のメモリー・ブロックで ROM を実現し、回路データを書き込む。メモリー・ブロックをコンフィグレーション用メモリーとして使用することができるのではないか?」
図2. マス男の赤面イメージ
先輩社員にマス男の考えを話しました。
先輩社員 「 FPGA は SRAM 構造であり、電源 OFF にしたらデータが消える揮発性です。同様に内蔵メモリー・ブロックも SRAM 構造です。メモリー・ブロックの物理構造が ROM 構造に変化するわけではないからね(笑)。」
つまり、内蔵メモリー・ブロックは SRAM 構造であり、 Write Enable 信号や Address 信号の接続の有無を自在にプログラムすることで ROM や FIFO のように動作(振る舞い)していたのであった!
・書き込み信号 ( Write Enable ) が無い SRAM が、ROM のように動作している
・アドレス信号 ( Address ) が無い SRAM が、FIFO のように動作している
マス男 「メモリー・ブロックの物理構造が変化すると勘違いしました(恥)。メモリの制御信号の接続の有無を自在にプログラムできるのが FPGA の醍醐味ですね!コンフィグレーション用デバイスは不揮発性の ROM だから、 SRAM のメモリー・ブロックでは駄目なのですよね。」
先輩社員 「 ROM でコンフィギュレーションできるというのは正しくないな。 ROM といっても、さまざまな物理構造があるのは分かっている?メモリーの種類について調べてごらん。」
図3. メモリーの種類
マス男 「コンフィギュレーション用デバイスはフラッシュ ROM 構造なんですね!」
学んだこと
・アルテラ社製 FPGA の内蔵メモリー・ブロックは RAM、ROM、FIFO を実現できる
・内蔵メモリー・ブロックは SRAM 構造であり、 Write Enable 信号や Address 信号の接続の有無を自在にプログラム
することで ROM や FIFO のように動作できる