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

Logicデザインの方だけやっていて、DFT Labに初めて入ると一番戸惑うところがあります。 Scan、ATPG、stuck-at pattern、transition patternなどは慣れているのですが、memoryの方に行く瞬間、突然 March algorithm、MBIST、fault...

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を読まないと壊れる

        글 참여 도구

        Share Join discussion
        How did this article help? Used only as a private quality signal.

        Private note

        Spot an error or need clarification?

        Send a private correction, question, or topic request directly to the editor.

        VLSI Korea

        Send a private note

        Your message will be delivered to [email protected].

        How should we receive it?

        Anonymous mode omits your name and email. The delivery provider may still process technical data such as an IP address, so absolute anonymity cannot be guaranteed.

        ENGINEER DISCUSSION

        What are you seeing in practice?

        Add evidence, a counterpoint, or experience from the field. Reply notifications keep the thread moving.

        VLSI KOREA BRIEFING

        Keep the signal. Lose the noise.

        Semiconductor engineering and industry intelligence from a practicing engineer. Free, with no paywall.

        FOR BUSINESS

        Need this level of technical content?

        Technical content, sponsored deep-dives and private team briefings—with clear scope and pricing.

        Work with VLSI Korea →
        VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
        MY VLSI

        내 읽기 보관함

        저장한 글과 읽던 글을 한곳에서 이어보세요.