サイト内検索

はじめに

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

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