DFT:3月のアルゴリズム?#チェッカーボード #1

DFT:3月のアルゴリズム?#チェッカーボード #1
Photo by Kentaro Komada on Unsplash

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つです。
        1. Faultがflip-flop(scan cell)基準で定義される
        2. Test pattern 一つのベクトルが複数のノードを同時に刺激する。
        3. 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は以下を強制します。
            1. 各cellが0と1の両方を複数回経験させ、
            2. 0→1、1→0 transitionをすべて実行させ、
            3. strong>up/down方向をすべて回りながら
            4. 隣接 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)

          • 意味を解いてみると:
            1. すべてのcellを0に初期化 (↑(w0))
            2. 再び上りながら
              • 0かどうかを読み取り (r0)
              • 1 を書き込む(w1)
      • これだけです:
        • すべてのセルが少なくとも一度は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)

          • ここでは方向関係なく "すべてのアドレスを一回ずつ" という意味で理解してください。
          • もう少し詳しく説明すると:
            1. すべてのcellに0を書きます。 (初期化)
            2. addressを上に上げながら
              • 0かどうかを読み取る (r0)
              • 1 を書く (w1)
            3. 다시 위로上げながら
              • 1かどうかを読む(r1)
              • 0を書く(w0)
            4. 今度はaddressを下に下げながら
              • 0かどうか読み取り(r0)
              • 1を書く(w1)
            5. 再び下に下げながら
              • 1かどうかを読み取り(r1)
              • 0を書く(w0)
              • 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を読まないと壊れる

        Enjoyed this article?

        Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

        Work with me

        Consulting · Collaboration · Support

        Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

        View options →
        VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
        Support