Logicデザインの方だけやっていて、DFT Labに初めて入ると一番戸惑うところがあります。
Scan、ATPG、stuck-at pattern、transition patternなどは慣れているのですが、memoryの方に行く瞬間、突然March algorithm、MBIST、fault modelの話が飛び出します。
しかも、シニアDFTエンジニアも時々こんなことを混乱することがあります。
"March C-は正確にどのようなfaultまでカバーするのか? 短所は何だったっけ..."
"なぜ必ずup/downで2回ずつ回るのか?"
この記事の目標は単純です。
- DFT/ATPGはすでに慣れているが、memory testが苦手な人に
- March algorithmが何であり、なぜそのような順序で動作するのか、
- Logic test patternと何が根本的に違うのか
- そして、実務でよく聞くCheckerboard patternがどのような役割をするか
1.Logic Test vs Memory Test: なぜパターンが異なるのか
1.1 Logic側: Scan + ATPGの世界
一般的な logic blockはこのようにテストされます。

- Flip-flops に scan chain insert
- ATPG tool が stuck-at fault、transition faultをターゲットにtest vectorを生成
- ATE装置やボードから
- 入力ポート+ scan-inで値注入(scan shift)
- capture
- scan-outで値観察
- 重要なポイントは3つです。
- Faultがflip-flop(scan cell)基準で定義される
- Test pattern 一つのベクトルが複数のノードを同時に刺激する。
- Fault activation → propagation → observationが組み合わせ論理経路に乗る.
- だから、logicテストの哲学は:
- ATPGの仕事は、この哲学を数学的/アルゴリズム的に解く作業に近いです。
- 逆にSRAMと同じmemoryの構造は以下の通りです
- Address decoder: 選択されたアドレスのwordlineを有効にする
- Bitline pair + cell: 選択されたcellのデータを読み書きする
- 通常、一度に1つのaddress lineのみアクセス可能
- この構造のため、memory testにはいくつかの重要な特徴が生じます。
- Logic: 複数の flip-flop / nodeを一度にテスト
- Memory:通常"一アドレスずつ順番に"アクセス
- (2) Fault model自体が違う
- Logic:stuck-at, transition, bridgingなどgate/net中心
- Memory:代表的なmemory fault modelだけ見てもすでに違う。
- cell自体の不良
- cell間の相互作用
- address decoder異常
- 周囲のcell patternに敏感な現象など
- Coupling fault (CF)
- Address decoder fault (AF)
- Neighborhood pattern sensitive fault (NPSF)
- Read/Write destructive faultなど
- h4 id="3-sequence-%EC%9D%98%EC%A1%B4%EC%84%B1">(3) Sequence依存性
- 一部のフォルトは、例えば以下のようなシーケンスにのみ現れます。
- つまり、「どのような順序で、周りのcellがどのようなdataを持っているか」が重要です。
- なので、memoryは
- "一度に複数のnodeを破裂させるATPG vector"よりも
- "すべてのcellを一定の順序で辿りながら、read/writeシーケンスを繰り返すアルゴリズム"の方がはるかに適しています。
- それがMarch algorithmです。
文字通り、アドレス空間を一列に並べて行進(march)させる概念です。 - 2.March Algorithm의 핵심 아이디어
- March algorithmを一行で要約すると、このように表現することができます。
- 表記の仕方は通常次のようになります。
↑: increasing addressing sequence↓: decreasing addressing sequence↕: increasing or decreasing, direction irrespective (all addresses once씩)wx:値xをwrite (w0,w1)rx: 値xをread & check (r0,r1)
- 例えば:
- このように"方向 + 演算シーケンス"をまとめたものを一つの March element と呼びます。
複数の要素を順番につなげたものが一つの March test です。 - Jin-Fu Li Advanced Reliable Systems (ARES) Lab.国立中央大学中壢電気工学研究院のJin-Fu Li氏、Taiwan
- メモリ全体について
- w0 → r0 → w0 → w1 → r1
- この4つの動作だけでtestingが終わるのでしょうか?
- 問題はMemory fault modelです.
- どのようなfaultは0→1 transitionだけで、どのようなfaultは隣のセル状態によって明らかになります。
- あるfaultは、up方向のaddress traversalでは問題ないが、down方向では問題を引き起こします。
- 例:特定のデコーダパス、カップリング構造など
- そのため、March algorithmは以下を強制します。
- 各cellが0と1の両方を複数回経験させ、
- 0→1、1→0 transitionをすべて実行させ、
- strong>up/down方向をすべて回りながら
- 隣接 cellとのrelative orderingを変えてみる。
- この過程で一度にカバーしながら、test timeをO(N)レベルに維持するアルゴリズムが現業で多く使われます。
- single cell fault
- 2-cell coupling fault
- address decoder fault
- では、具体的にどのようなMarch algorithmがよく使われるのでしょうか?
- March Xは最も基本的なMarch algorithmの一つです。通常、以下のように書きます。
- code class="language-text">1) ↑ (↑ (w0)
- 2) ↑ (r0, w1)
- 3) ↑ (r1、w0)
- 意味を解いてみると:
- すべてのcellを0に初期化 (
↑(w0)) - 再び上りながら
- 0かどうかを読み取り (
r0) - 1 を書き込む(
w1)
- 0かどうかを読み取り (
- すべてのcellを0に初期化 (
- これだけです:
- すべてのセルが少なくとも一度は0, 1を保存
- 0→1, 1→0 transitionをすべて実行
- 基本的なStuck-at fault, Transition faultはある程度検出可能
- 限界も明らかです。
↓方向traversalがない- Coupling fault, Address decoder faultに対するカバレッジが限られている。
- そのため、概念説明、教育用、非常に単純なSRAM程度に使われることが多く、
実際のMBISTではより強力なアルゴリズムを使います。 - 実際にMBISTで最も多く登場するのはMarch C-です。
- 実際はSRAM designersがこれより多くのアルゴリズムを設計しており、
Marchの名前も様々ですが、かなりの数はMarch C-から派生したfamilyと見なすことができます。 - March C-は通常、以下のように定義します。
- 1) ↕ (w0)
- 2) ↑ (r0, w1)
- 3) ↑ (r1, w0)
- 4) ↓ (r0、w1)
- 5) ↓ (r1、w0)
- 6) ↕ (r0)
- ここで
↕は方向関係なく "すべてのアドレスを一回ずつ" という意味で理解してください。 - もう少し詳しく説明すると:
- すべてのcellに0を書きます。 (初期化)
- addressを上に上げながら
- 0かどうかを読み取る (
r0) - 1 を書く (
w1)
- 0かどうかを読み取る (
- 다시 위로上げながら
- 1かどうかを読む(
r1) - 0を書く(
w0)
- 1かどうかを読む(
- 今度はaddressを下に下げながら
- 0かどうか読み取り(
r0) - 1を書く(
w1)
- 0かどうか読み取り(
- 再び下に下げながら
- 1かどうかを読み取り(
r1) - 0を書く(
w0)
- 1かどうかを読み取り(
- 0を読み取る(
r0)
- このセットには以下がすべて含まれています。
- すべてのセルが0と1を複数回経験する
- 0→1、1→0 transitionを繰り返す
- up / down traversalをすべて行う
- 読み取った直後に隣のセルの状態が変わったり、前のパターンの痕跡が残っている状況を意図的に作り出す
- そのため、March C-一つで下をかなりよく検出することができます。
- Stuck-at fault (SAF)
- Transition fault (TF)
- 대부분의 Address decoder fault (AF)
- 대표적인 2-cell Coupling fault (CF)
- 実際のproduct-level memory BISTでは、"March C- (または派生変種)"+追加backgroundの組み合わせがほぼデフォルトのように使われます。
- 感覚をつかむためにfault modelの基準で両者を比較してみましょう
("O"は一般的に良いカバー、"△"は部分的/制限的なカバー程度に理解すればよいです。) - 実用的な要約は簡単です。
- ul>
- 研究室での基本的な概念の説明 → March X
- 実際の product-level memory BIST → ほぼ March C- (またはC-から派生した変種)
- 限界も明らかです。
4. Fault Modelの観点からMarch X vs March C-
3.2 March C- - 実務で最も多く使われる標準型
(1) Access granularity
figure class="kg-card kg-image-card">

1.2 Memory側:構造が全く違う
"一回のパターンでできるだけ多くのfaultをカバーしよう。"
3.1 March X - 教育用の最も単純な基本型
3:March X & March C-
2.2 "w0→r0、w1→r1の二回だけではダメですか?"
figure class="kg-card kg-image-card kg-card-hascaption">

↑ (w0) : address 0からMAXまで進みながら各cellに0をwrite
↑ (r0, w1) : 再び0からMAXまで、0かどうかを読み取って(r0) 1を write
メモリのすべてのアドレスを一定の方向(↑, ↓あるいはその両方)で巡回しながら、
各アドレスごとにあらかじめ定義された read/write 演算シーケンスを実行する test algorithm
2.1 定義: Addressを「行進(march)」しながらテスト
このcellに1を書き込む→隣のcellに0を書き込む→再び元のcellを読まないと壊れる