はじめに

こんにちは、マス男です。

今回の赤面エピソードは初めて 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 のように動作できる