6Tセルから324bit SRAM TEGのGDS統合まで
はじめに
「自分で設計したSRAMを、実際のシリコンチップに載せてみたい」。そんな想いから、OpenSUSI TR-1um MPW Project向けに小規模なSRAMを設計しました。
最初に2word × 2bit(4bit)の6T SRAMを設計し、さらに行数・列数を拡張して、4種類のSRAMマクロ(合計324bit) をMPWに搭載しました。最小構成は小規模ですが、メモリセルの構成、ワード線・ビット線、読み書き動作、レイアウト、回路とレイアウトの照合、チップ全体への統合といった、SRAM設計の一連の工程を体験しました。
また、読み出し用の5Tセンスアンプを試作・評価したものの、最終的にはCMOS Read Bufferへ切り替えた経緯も紹介します。
本記事では、TR-1umの設計環境(PDK)を用いた開発の考え方と、OpenSUSI TR-1um MPW Project用GDSへの統合までの流れを紹介します。なお、設計・レイアウト検証と、製造後の実チップ動作確認は別物です。本記事は主に設計とデータ統合の記録であり、実測結果はこの先になります。
プロジェクトと公開リポジトリ
-
MPW公式プロジェクト: OpenSUSI/OpenSUSI_MPW_TR2026
-
SRAM設計: TAKE-HooJoo/tr10_sram
6T SRAM Bit Cell
1. SRAMの基本:なぜ6Tなのか
SRAM(Static Random Access Memory)は、電源が供給されている間、記憶状態を保持するメモリです。一般的な6T SRAMセルは、6個のMOSトランジスタから構成されます。
- 4個のトランジスタで、相互に接続された2つのインバータを構成する
- 残る2個のアクセストランジスタで、内部ノードをビット線へ接続する
相互接続されたインバータは、相補的な内部ノード Q と QB に論理値を保持します。ワード線 WL が有効になると、アクセストランジスタを通してビット線 BL と BLB に接続されます。
| 信号 | 役割 |
|---|---|
WL |
対象ワードのセルを選択するワード線 |
BL |
読み書きに使うビット線 |
BLB |
BL と対になる相補ビット線 |
Q, QB
|
セル内部の相補記憶ノード |
Hold(保持)
WL=0 ではセルがビット線から切り離され、クロスカップルドインバータが記憶状態を保持します。
Write(書き込み)
BL と BLB に書き込みたい値とその反転値を与え、WL を有効にしてセル内部の状態を更新します。書き込みが成立するには、ビット線側の駆動とセル内部の保持能力のバランスが重要です。
Read(読み出し)
一般的な差動読み出しでは、ビット線対をプリチャージしてから WL を有効にし、記憶値に応じて生じるビット線間の電位差を検出します。読み出し時に内部ノードが変動するため、Read disturb(読み出し擾乱) にも注意が必要です。
2. 4種類のSRAMを搭載する構成
まず基準となる最小容量(Capmin)として、1ワードが2bitで、2ワードを格納する構成を設計しました。
2bit幅
Bit 0 Bit 1
+--------+--------+
WL0 ---->| Cell00 | Cell01 | Word 0
+--------+--------+
WL1 ---->| Cell10 | Cell11 | Word 1
+--------+--------+
| | | |
BL BLB BL BLB
この構成では6Tセルを4個使うため、記憶セル部分だけで24トランジスタとなります。実際のSRAMマクロ全体には、選択・駆動・読み出しなどの周辺回路が加わる場合があります。
4bitという小規模構成を出発点にした理由は、配列の動作と物理設計の問題を追いやすく、検証範囲を管理しやすいからです。
MPWに搭載した4マクロ
| タイプ | マクロ名 | 配列構成 | 容量 | 狙い |
|---|---|---|---|---|
| Capmin | sram_2w2b |
2word × 2bit | 4bit | 最小構成の基準 |
| Rowmax | sram_16w2b |
16word × 2bit | 32bit | 行数(ワード数)の拡張 |
| Colmax | sram_2w16b |
2word × 16bit | 32bit | 列数(ビット幅)の拡張 |
| Capmax | sram_16w16b |
16word × 16bit | 256bit | 行数・列数の両方を拡張 |
合計容量は 4 + 32 + 32 + 256 = 324bit です。これは4マクロの記憶容量の合計であり、単一の324bit SRAMマクロという意味ではありません。
ビット幅(列数)
2bit 16bit
+-------------+-------------+
2word | Capmin | Colmax |
| 2w × 2b | 2w × 16b |
| 4bit | 32bit |
+-------------+-------------+
16word | Rowmax | Capmax |
| 16w × 2b | 16w × 16b |
| 32bit | 256bit |
+-------------+-------------+
ワード数(行数)が増加 ↓
Rowmaxではワード数を増やすことでビット線方向の負荷増加を、Colmaxではビット幅を増やすことでワード線方向の負荷増加を検討できます。Capmaxは両方の拡張を組み合わせた構成です。RowmaxとColmaxは同じ32bit容量で形状が異なるため、行方向・列方向の拡張の違いを比較するための重要な組み合わせです。
これらは比較評価を意図した設計であり、実チップ上での特性差や測定値を本記事で確定するものではありません。
2word × 2bit SRAM
3. 開発環境と設計の進め方
本プロジェクトでは、回路設計・SPICEシミュレーション・レイアウト作成・物理検証・GDS統合を段階的に進めました。
| 工程 | 主な対象 |
|---|---|
| セル設計 | 6T SRAMセルのトランジスタ接続 |
| 回路検証 | Hold / Write / Read / SNM |
| アレイ設計 | 2word × 2bitを基準に16word・16bitまで拡張した4マクロと周辺回路 |
| レイアウト | セル、配列、トップ階層の物理配置 |
| 物理検証 | DRC、LVS |
| MPW統合 | GDSIIをMPW用トップへ組み込み、提出前チェック |
設計データの正確なファイル構成や使用ツールのバージョンは、公開リポジトリの該当コミットを参照してください。特にEDAツールやPDKのバージョンが異なると、検証結果や操作手順が変わる可能性があります。
4. まずは6Tセルの動作を確認する
配列全体を最初から作るのではなく、基本セル単体の動作を確認してから規模を広げる方法を採りました。
4.1 Holdの確認
セルに初期値を与え、WL を無効にした状態で Q と QB が相補状態を維持できるかを確認します。
4.2 Writeの確認
ビット線対に相補データを印加し、WL を有効にして、記憶値を 0→1 および 1→0 に切り替えられるかを確認します。両方向の書き込みを試すことが重要です。
4.3 Readの確認
読み出しでは、ビット線の変化とともに内部ノードの電圧変動を観察します。正しいデータが読めるだけでなく、読み出し後に記憶内容が保持されることも確認対象です。
4.4 Read SNMの評価
SNM(Static Noise Margin)は、SRAMセルの記憶状態の安定性を示す指標です。2つのインバータの電圧伝達特性(VTC)からバタフライカーブを作成し、左右のローブに収まる正方形の一辺を用いて評価します。なお、正方形の向きと座標系を含む算出手法の確認が必要です。
今回は読み出し状態の安定性を調べるため、XschemとngspiceでRead SNM用のDC解析を行いました。
| 項目 | 条件 |
|---|---|
| VDD | 5 V |
| WL | 5 V |
| BL / BLB | 5 V / 5 V |
| PMOS W/L | 3.4 µm / 1 µm |
| Pull-down NMOS W/L | 6.8 µm / 1 µm |
| Access NMOS W/L | 5.1 µm / 1 µm |
| DC Sweep | VN1 = 0~5 V、5 mV刻み |
クロスカップルド接続の一部を切り離し、左インバータの入力ノードN1を電圧源で掃引して、N1、Q、QBを記録しました。
Read SNM測定回路(Xschem)
ngspiceの解析指示は次のとおりです。
.control
save all
dc VN1 0 5 0.005
plot v(n1) v(q) v(qb)
wrdata read_snm_vtc.dat v(n1) v(q) v(qb)
.endc
Pythonでは、測定データから(N1, Q)と(QB, Q)の2曲線を描きました。後者を標準的なVTCの対角反転とみなせるかは、テストベンチのノード定義と照合する必要があります。解析にはplot_read_snm.pyを使用し、さらにShapelyを用いたplot_read_snm_verified.pyで、各ローブに収まる正方形を数値探索しました。
| 算出項目 | 結果 |
|---|---|
| 左ローブの正方形の一辺 | 約399.5 mV |
| 右ローブの正方形の一辺 | 約399.5 mV |
| 小さい方を採用した幾何学的な算出値 | 約400 mV(暫定) |
| VDDに対する割合 | 約8.0% |
Read SNMバタフライカーブと数値探索した内接正方形
バタフライカーブの左右の領域に、それぞれ収まる正方形を求めました。SNMは、2つの正方形のうち、小さい方の一辺の長さを基準に評価します。
今回のシミュレーションでは、Read SNMの算出値として約400mVが得られました。
なお、この値はTypicalモデルを用いたシミュレーション結果であり、条件が変わると正方形の大きさも変わってきます。
4.5 5Tセンスアンプの回路設計と単体評価
最初、SRAMの読み出し回路として5Tラッチ型センスアンプを考えました。2個のPMOSと2個のNMOSによるクロスカップルドラッチに、SAE(Sense Amplifier Enable)で制御するテールNMOSを追加した構成です。
| 素子 | W/L | 役割 |
|---|---|---|
| ラッチPMOS × 2 | 6.8 µm / 1 µm | 正帰還ラッチ |
| ラッチNMOS × 2 | 3.4 µm / 1 µm | 正帰還ラッチ |
| テールNMOS × 1 | 6.8 µm / 1 µm | SAEによる動作制御 |
単体シミュレーションでは、初期ビット線差電圧 ΔVBL を10〜200 mVに変化させ、センス遅延を評価しました。
| 初期差電圧 ΔVBL | センス遅延 |
|---|---|
| 10 mV | 6.202 ns |
| 20 mV | 5.604 ns |
| 50 mV | 4.812 ns |
| 100 mV | 4.212 ns |
| 200 mV | 3.614 ns |
入力差電圧が大きいほどセンス遅延が短くなり、10 mV条件でも今回の判定条件に基づく遅延値が得られました。ただし、遅延の測定起点・終点や出力判定しきい値は、再現実験時にテストベンチで確認する必要があります。
5Tセンスアンプの回路図
5Tラッチ型センスアンプの回路図。5個のMOSトランジスタで構成し、BLとBLBのわずかな電圧差を増幅して読み出します。
センスアンプの動作確認用回路。BLとBLBに電圧差を与え、SAE信号によってセンスアンプを動作させます。
センスアンプの遅延特性
センスアンプ単体の遅延特性。BLとBLBの電圧差が大きいほど、読み出しに必要な時間が短くなることが分かります。
今回の結果は、センスアンプ単体でのシミュレーション結果です。実際にSRAMへ接続した場合は、ビット線の負荷などが変わるため、同じように動作するとは限りません。
4.6 SRAMアレイへの統合で生じた課題
単体では差電圧に応じた動作を確認できましたが、SRAMアレイと接続した統合評価では、ビット線への負荷が課題になりました。今回の5T構成ではBL/BLBがラッチノードに直接接続されるため、ラッチ動作がビット線へ影響する点も考慮が必要です。
センスアンプ単体で動作することと、SRAM全体で安定に読み出せることは別です。ビット線のセル容量・配線容量・プリチャージ条件を含めた統合評価が必要になります。
4.7 最終TopではCMOS Read Bufferを採用
今回の最終Topでは、5Tセンスアンプの採用を見送り、CMOS Read Bufferに変更しました。最終構成は、6T SRAM Core、Decoder、Write Driver、Precharge/Equalize、CMOS Read Bufferを組み合わせたものです。
| 比較項目 | 5Tセンスアンプ | 最終採用:CMOS Read Buffer |
|---|---|---|
| 位置づけ | 試作・単体評価 | 最終Topの読み出し回路 |
| 確認内容 | ΔVBL=10〜200 mVで遅延を評価 | SRAM周辺回路と統合 |
| 設計判断 | ビット線負荷が課題 | 今回の最終構成として採用 |
5Tセンスアンプは単体では動作しましたが、開発時間の制約もあり、最終的には採用を見送りました。
今回の小規模SRAMでは、ビット線が短く、CMOS Read Bufferでも読み出しが可能でした。また、センスアンプの動作タイミングを調整する必要がないため、シンプルで高速な読み出しを実現しやすい構成になりました。
今回は、はじめてのSRAM設計ということもあり、確実に動作するシンプルな構成を優先しました。
5. KLayoutでSRAMをレイアウトする
回路図が正しくても、そのままチップに載せられるわけではありません。製造ルールを満たす形状にトランジスタや配線を配置し、回路図と同じ接続関係を実現する必要があります。
特にSRAMでは、同じセルを繰り返し配置するため、セル境界、電源配線、ワード線、ビット線の整合が重要になります。
今回のような小規模アレイでも、次の点が設計上のチェックポイントになります。
- 各セルの
VDDとGNDが正しく接続されているか - 同じ行のセルに同じ
WLが接続されているか - 各列の
BLとBLBが混線していないか - レイアウト階層と回路階層の対応が取れているか
- 上位階層に組み込むための端子・境界が整理されているか
6. DRCとLVS:見た目では分からない問題を検出する
DRC(Design Rule Check)
DRCでは、配線幅、間隔、重なりなどがプロセスの設計ルールを満たしているかを確認します。DRCに問題があると、回路図上は正しくても製造上の不具合につながる可能性があります。
LVS(Layout Versus Schematic)
LVSでは、レイアウトから抽出した回路と、元の回路図を照合します。トランジスタ数や接続関係などが一致しているかを確認する工程です。
今回の開発では、2word × 2bit SRAMトップのLVS-cleanを重要な到達点としました。LVS-cleanは、回路図とレイアウトの照合が通ったことを意味します。
7. SRAMマクロをOpenSUSI TR-1um MPW ProjectのGDSへ統合する
4種類のSRAMマクロを sram_teg_top(SRAM TEGトップ)にまとめ、MPW向けのトップレベルGDSに統合します。ここで重要なのは、単にセルを配置するだけでなく、トップセル名・階層・境界・レイヤー・配線接続などをMPW側の要件に合わせることです。
SRAM TEGには、sram_2w2b_top、sram_16w2b_top、sram_2w16b_top、sram_16w16b_topに対応する4種類のマクロを配置しました。
今回のMPW統合用リポジトリには、トップレベルGDSとして次のファイルを扱う手順があります。
src/tr_1um_TAKE_HooJoo.gds
提出前チェックの一例として、プロジェクト内のスクリプトを次のように実行します。
cd ~/TR10/TR-1um_MPW_project
python3 scripts/pre_check.py \
src/tr_1um_TAKE_HooJoo.gds \
--top tr_1um_TAKE_HooJoo
開発中の実行記録では、トップセル名について次のメッセージが得られています。
OK: Top-level cell name
このメッセージはトップセル名の確認結果であり、GDS全体のDRC/LVSやMPW受理を証明するものではありません。 各検証を個別に確認することが重要です。
8. GDS差分の確認とレビュー
GDS統合後には、修正前後のレイアウト差分を確認する作業も重要です。差分が意図した修正によるものなのか、予期しない形状の変化なのかを切り分けます。
今回のMPWプロジェクトでも、GitHub Issueを通じてGDS修正と差分確認が行われました。
差分確認には、KLayoutのレポートデータベース(.lyrdb)が利用できます。例えば tr_1um_TAKE_HooJoo.gds_xor.lyrdb のようなファイルを開き、指摘された差分の位置と内容を確認します。
ここでのポイントは、差分が存在すること自体を即座に不具合と判断しないことです。意図した修正でも差分は生じます。修正内容、対象レイヤー、座標、最終GDSの整合性をセットで確認します。
9. 開発で学んだこと
小規模でもメモリ設計の本質を学べる
基準となる4bitのSRAMでも、記憶セルの安定性、読み書き時の駆動条件、ワード線とビット線の配線、物理検証など、実際のメモリ設計につながる課題が現れます。
回路検証と物理検証は両方必要
SPICEで正しく動作しても、レイアウトで接続を間違えれば意図した回路にはなりません。逆にLVSが通っても、動作速度やノイズマージンが十分とは限りません。回路動作・レイアウト整合・製造ルールを別々に確認することが重要です。
最終GDSの管理も設計の一部
MPWへの搭載では、SRAM単体の完成に加えて、上位階層への統合、提出前チェック、差分レビュー、GitHubでの変更履歴の管理が必要になります。
10. 今後の展開
今回の設計・統合を出発点として、今後は次の評価や改良を進めたいと考えています。
- 実チップ入手後のHold / Write / Read動作確認
- 電源電圧や動作条件を変えた安定性評価
- 読み出しマージンと動作速度の検討
- 既存のプリチャージ/イコライズ回路の改良と、センスアンプを使った読み出し回路の再検討
- より大きなSRAMアレイへの拡張
まとめ
OpenSUSI TR-1um MPW Project向けに、TR-1umを使った4種類の6T SRAMマクロ(Capmin 4bit、Rowmax 32bit、Colmax 32bit、Capmax 256bit) を設計し、SRAM TEGとしてMPW用GDSへ統合しました。
最小4bitのセルアレイから合計324bitの4マクロ構成へ展開し、セル設計、SPICEによる動作確認、DRC/LVS、GDS統合、差分レビューという一連の流れを経験できました。
「まずは小さな回路を、最後まで設計してみる」。これからオープンな半導体設計環境に触れる方にとって、本記事が一つの参考になれば幸いです。












