FPGAの学習を始めると、「LUTの中身はSRAMでできている」といった説明によく出会います。でも、「そもそもSRAMって何?」と思った人も多いのではないでしょうか。
SRAMとは
SRAM(Static Random Access Memory)は、「スタティック(静的)RAM」と呼ばれる揮発性メモリの一種です。電源が供給されている間はデータを保持し続けますが、電源が切れると内容は失われます。では、このSRAMがどのような物理構造を持ち、どのようにして情報を保持しているのでしょうか。
記憶セル(メモリセル)の最小構成 ― 6T構成
SRAMの記憶セル(メモリセル)は、一般に 6個のMOSFETトランジスタ(6T構成) で1ビットのデータを保持します。この構成は、次のような要素でできています:
- 2つのインバータ(反転器)を互いに接続してループを形成
- 2つのアクセス用トランジスタ(パスゲート)で読み書きを制御
- ビット線(bit line)とワード線(word line)で外部との接続を行う
これらを図式的に説明すると、2つのインバータの出力と入力がクロスするように接続されており、入力が出力、出力がまた入力に戻るというループ構造を取ります。
インバータのループがなぜ「記憶」になるのか?
インバータとは、入力された電圧を反転して出力する回路です。0を入れれば1が出てきて、1を入れれば0が出てきます。
2つのインバータを互いに向き合わせる(出力と入力を繋ぎあう)ことで、自己保持(フィードバック)回路が成立します。たとえば、ある時点で一方のノードが「1」だったとしましょう。すると、それが次のインバータに「1」として伝わり、反転されて「0」になり、また最初のインバータに戻ってきて「1」に戻されます。このように、今の状態をお互いに補強し合う形で記憶しているのです。
このループ構造により、電源が供給されている限り、記憶セルはその状態を半永久的に維持し続けます。これが「Static(静的)」と呼ばれる理由です。一方で後述するDRAMは、定期的にリフレッシュを行う必要があります。
アクセス用トランジスタと外部接続
前述のループだけでは、外からデータを読み書きすることができません。そこで、SRAMセルにはさらに 2つのアクセス用トランジスタが追加されます。
これらのトランジスタは、「ワードライン(WL)」という制御信号によってゲートが開閉され、内部の記憶状態と外部の「ビット線(Bit, Bit̅)」とをつなげる役割を果たします。
- 読み出し時:ワードラインを有効にすると、記憶セルの出力がビット線に伝えられ、データが読み取られます。
- 書き込み時:ビット線に新しい値を載せた状態でワードラインをアクティブにすると、強制的にセルの状態を書き換えることができます。
トランジスタ構成の具体的内訳
1ビットのSRAMセルに必要な6個のトランジスタは以下のように分類されます:
トランジスタの役割 | 個数 | 説明 |
---|---|---|
インバータ構成用 | 4 | 相互接続された2つのインバータ(各2トランジスタ) |
アクセス制御用 | 2 | ワードラインとビット線を繋ぐスイッチとして機能 |
この構成は非常に高速で、しかも動作が安定しており、電源がある限りは記憶内容が変わることはありません。ただし、トランジスタを6個も使うため、面積が大きく、集積度が低くなるというデメリットもあります。
DRAMとは
さて、SRAMについて理解したところで、StaticではないRAM、DRAMについても理解を深めましょう。これによって、SRAMのこともよりよく出来るようになります。
DRAM(Dynamic Random Access Memory)は、主にパソコンやスマートフォンのメインメモリとして使われている、大容量かつ低コストな揮発性メモリです。揮発性というのは電源を切ると中身が消えるという意味ですが、それだけでなく、DRAMは電源が入っていても定期的に読み出して書き直す(リフレッシュ)必要があるという特殊な特性を持っています。
DRAMの基本構成:1T1C(1トランジスタ+1コンデンサ)
SRAMが1ビットの記憶に6個ものトランジスタを使うのに対し、DRAMはたった「1つのトランジスタと1つのコンデンサ」だけで1ビットを記憶します。この構成を「1T1Cセル」と呼びます。
- コンデンサ(C): 電荷(電子)を貯めることで、「1」か「0」の情報を表す
- トランジスタ(T): スイッチの役割。ワードラインが有効なときだけ、コンデンサとビット線の間を接続する
この構成のシンプルさこそが、DRAMの高密度・低コスト・大容量を可能にしている最大の理由です。セルを縦に積層(3次元構造)して配置することで、さらに面積効率を向上といった工夫もされ、同じチップ面積でもSRAMの10倍以上の容量を実現できます。
コンデンサは電荷を蓄えることができる電子部品で、電圧をかけると内部に電子が溜まり、電圧を抜くと電子が逃げていきます。DRAMでは、コンデンサに電荷がある状態を「1」、電荷がない状態を「0」とみなして記憶します。
しかし、完璧な絶縁体は存在しないため、時間とともに電荷は自然に漏れ出していきます。そのため、たとえ電源が入っていても、定期的に電荷を再注入する(リフレッシュ)必要があります。
リフレッシュとは、メモリセルに記録されているデータを周期的に読み出し、同じデータを再度書き込む処理です。これを行わないと、コンデンサ内の電荷が徐々に失われてしまい、誤ったデータ(0や1)が読まれてしまいます。
一般的なDRAMでは、数ミリ秒ごとに全ビットのリフレッシュを行う必要があります。これを行う回路や制御ロジックは、メモリコントローラ側に含まれており、利用者が意識しなくても自動で処理されています。
読み出し動作の特徴:「破壊的読み出し」
SRAMでは、読み出しても中の状態は変わりませんが、DRAMは「破壊的読み出し」と呼ばれる特徴を持ちます。なぜなら、コンデンサの電荷を読み取るということは、その電荷をビット線へ流して測定することを意味し、その結果、中の電荷が失われてしまうからです。
このため、読み出しのたびに再度同じ値を書き戻す(再書き込み)が必要になります。これも、メモリコントローラが裏で自動的に行っています。
DRAMの実際の使われ方
DRAMは、主に以下のような場所で使用されています:
- パソコンやスマホのメインメモリ(DDR4/DDR5など)
- GPUメモリ
- 一部のFPGAで外部メモリとして接続される
一方、SRAMはFPGA内部のLUTやキャッシュメモリなど、超高速アクセスが求められる領域に限定的に使用されます。
LUTにおけるSRAM
「動的で不安定だが軽量」というDRAMの性質と、「静的で安定だが重い」というSRAMの対比を理解することで、メモリ技術の設計思想や、それぞれの用途がよりはっきりと見えてきます。FPGAやコンピュータシステムを学ぶ上でも、非常に重要な知識です。
特徴 | SRAM | DRAM |
---|---|---|
保持方式 | トランジスタで電圧状態を保持 | コンデンサで電荷を蓄える |
リフレッシュ | 不要 | 必要 |
構造 | 複雑(6トランジスタ) | 単純(1T1C) |
速度 | 高速 | やや遅い |
面積・密度 | 大きくて低密度 | 小さくて高密度 |
コスト | 高い | 安い |
FPGAでは、LUT(ルックアップテーブル)という論理関数を表現する回路があります。この中に、小さなSRAMが使われています。
- 4入力LUTなら、16通りの入力に対して出力を記録 → 16ビットのSRAM
- このSRAMが、HDLで記述した論理関数の「出力テーブル」を記憶
- 入力に応じて、対応するビットを選ぶことで出力を決定
つまり、LUTは小さなSRAMを使って、論理関数を実現する部品なのです。
なぜそんなにトランジスタを使ってでもSRAM方式を使うのしょうか。以下の特徴があるためです。
- 汎用性:任意の論理関数を表現できる
- 再構成性:SRAMを書き換えるだけで回路を変更可能
- 高速動作:SRAMの読み出し+MUX選択だけで出力を決定できる
FPGAの「柔軟で高速な再構成可能ロジック」という性質にピッタリなんです。
まとめ
FPGAを使ううえで、SRAMの性質(高速、リフレッシュ不要、小容量)を知ることはとても重要です。
- なぜFPGAが高速に論理処理できるのか? → SRAMで構成されたLUTだから
- なぜFPGAの設定が電源OFFで消えるのか? → SRAMは揮発性だから
- なぜFPGAはDRAMより高価で小容量なのか? → SRAMベースで構成されているから
DRAMとSRAMの違いを理解することで、FPGAの「性格」や使いどころがよりはっきり見えてきます。