Когда вы впервые приходите в лабораторию DFT после работы в области логического проектирования, наступает момент, когда вы больше всего растеряны.
Сканирование, ATPG, паттерн "застрял-ат", паттерн перехода и т. д. знакомы, но как только вы переходите на сторону памяти, вы вдруг начинаете говорить об алгоритме Марча, MBIST, модели ошибок.
И даже старшие инженеры DFT иногда путаются в этом:
"Какие именно неисправности покрывает March C-? Какие у него недостатки?"
"Почему он должен дважды подниматься и опускаться?"
Цель этой статьи проста.
- Для людей, которые уже знакомы с DFT/ATPG, но тесты памяти неудобны, я хочу объяснить, что такое алгоритм Марча и почему он работает именно в таком порядке,
- Чем он принципиально отличается от паттерна логических тестов
- И какую роль играет шаблон шахматной доски, который часто можно услышать на практике
1. Тест на логику против теста на память: почему паттерны отличаются?"
1.1 Логическая сторона: мир Scan + ATPG
Типичный логический блок тестируется следующим образом.

- Вставка сканирующей цепочки
- ATPG-инструмента в флип-флопы в месте неисправности stuck-at, Создание вектора тестирования, нацеленного на неисправность перехода
- На оборудовании ATE или плате
- ввод значений во входной порт + сканирование внутрь (сдвиг сканирования)
- захват
- наблюдение значений с помощью сканирования наружу
Есть три ключевых момента.
- Неисправность определяется в терминах флип-флопов (сканирующих ячеек):
- Тест-шаблон Вектор стимулирует множество узлов одновременно.
- Активация неисправности → распространение → наблюдение протекает по комбинаторному логическому пути.
Таким образом, философия логического тестирования такова:
"Охватите как можно больше неисправностей с помощью одного паттерна."
То, что мы делаем в ATPG, является скорее математической/алгоритмической реализацией этой философии:
1.2 Сторона памяти: структура совершенно другая
Напротив, структура SRAM типа памяти выглядит следующим образом:

- Декодер адреса: активирует словесную линию выбранного адреса
- Пара битов + ячейка: читает или записывает данные выбранной ячейки
- обычно одновременно можно обращаться только к одной адресной линии
Эта структура обусловливает некоторые важные особенности тестов памяти.
(1) Гранулярность доступа
- Логика: тестирование нескольких флип-флопов/узлов одновременно
- Память: Обычно "по одному адресу за раз" доступ
(2) Сама модель отказов отличается
- Логика: gate/net-centric
- Память:
- Неисправность в самой ячейке
- Взаимодействие между ячейками
- Ненормальность декодера адреса
- Чувствительность к окружающим моделям ячеек
Если даже посмотреть на репрезентативную модель неисправности памяти, то она уже отличается.
- Неисправность сопряжения (CF)
- Неисправность дешифратора адреса (AF)
- Неисправность, чувствительная к шаблону соседства (NPSF)
- Неисправность, разрушающая чтение/запись, и т. д.
(3) Зависимость от последовательности
Некоторые неисправности проявляются только в следующей последовательности, например.
Запись 1 в эту ячейку → запись 0 в соседнюю ячейку → повторное чтение исходной ячейки для ее разрушения.
Иными словами, важно, "в каком порядке и когда соседние ячейки имеют какие данные".
Поэтому память гораздо лучше подходит для алгоритма, который повторяет последовательность чтения/записи, проходя все ячейки в определенном порядке, а не для вектора ATPG, открывающего сразу несколько узлов.
В этом и заключается мартовский алгоритм, буквально, идея марша по адресному пространству в одной файловой строке.
2. March Algorithm의 핵심 아이디어
2.1 Определение: проверка при "маршировании" по адресам
Алгоритм March можно кратко описать в одной строке.
Алгоритм тестирования, который "марширует" по всем адресам в памяти в определенном направлении (↑, ↓ или оба), выполняя предопределенную последовательность операций чтения/записи по каждому адресу
Обычно нотация выглядит следующим образом
↑: возрастающая последовательность адресации↓: убывающая последовательность адресации↕: возрастающая или убывающая, независимая от направления (каждый адрес один раз)wx: записать значение x (w0,w1)rx: прочитать & проверить значение x (r0,r1)
Например:
↑ (w0) : записать 0 в каждую ячейку с адреса 0 по MAX
↑ (r0, w1): снова от адреса 0 до MAX, читаем, если 0 (r0) и записываем 1
Такая последовательность "направление + операция" называется элементом марша.
Последовательность из нескольких элементов называется тестом марша.

2.2 "А нельзя ли просто w0→r0, w1→r1 дважды?"
На всю память
w0→r0 → w1→r1
Это все, что нам нужно проверить?"
Проблема заключается в модели ошибок памяти:
- Некоторые ошибки выявляются только переходом 0→1, некоторые ошибки выявляются по состоянию соседней ячейки.
- Некоторые неисправности хорошо проявляются при обходе адреса в направлении вверх, но вызывают проблемы в направлении вниз.
- Например, некоторые пути декодера, структуры сопряжения и т. д.
Таким образом, алгоритм March обеспечивает следующее.
- Заставьте каждую ячейку пережить 0 и 1 несколько раз
- выполнить переходы 0→1 и 1→0
- пройти как вверх, так и вниз и изменить относительный порядок со своими соседями.
Существует множество алгоритмов, которые могут сделать это за один проход и при этом сохранить время тестирования на уровне O(N).
- Одноклеточные неисправности
- 2-клеточные неисправности сопряжения
- неисправности декодера адреса
Так какие же алгоритмы марта популярны на практике?
3. Если мы вспомним только два: March X & March C-
3.1 марта X - простейший базовый в образовательных целях
Март X - один из самых базовых мартовских алгоритмов. Обычно он записывается так:
1) ↑ (w0)
2) ↑ (r0, w1)
3) ↑ (r1, w0)
Что это значит:
- Инициализируем все ячейки в 0 (
↑(w0)) - На обратном пути
- читаем, если это 0, и записываем (
r0) - 1. (
w1)
- читаем, если это 0, и записываем (
- После очередного подъема
- прочитайте, если это 1, и запишите (
r1) - запишите 0 (
w0)
- прочитайте, если это 1, и запишите (
Вот и все:
- Каждая ячейка хранит 0 и 1 хотя бы один раз
- Каждый переход 0→1 и 1→0 выполняется
- Основные Stuck-at fault и Transition fault более или менее обнаружимы
Ограничения очевидны.
↓нет направленного обхода- Неисправность сопряжения, Неисправность дешифратора адреса охват ограничен.
В результате он часто используется для концептуальных иллюстраций, обучения и очень простых SRAM, в то время как реальные MBIST используют более мощные алгоритмы.
3.2 March C- - наиболее распространенный на практике стандарт
March C- - это стандарт, который чаще всего встречается в MBIST на практике.
В действительности разработчики SRAM разработали гораздо больше алгоритмов, чем этот, и существует множество различных названий March, но значительное число семейств являются производными от March C-.
March C- обычно определяется следующим образом:
1) ↕ (w0)
2) ↑ (r0, w1)
3) ↑ (r1, w0)
4) ↓ (r0, w1)
5) ↓ (r1, w0)
6) ↕ (r0)
Здесь ↕ может означать "каждый адрес один раз", независимо от направления.
Разберем это еще немного подробнее:
- Запишем 0 в каждую ячейку. (Инициализация)
- с адресом up
- прочитать, если он равен 0 (
r0) - записать 1 (
w1)
- прочитать, если он равен 0 (
- снова вверх. и читаем (
r0) - записываем 1 (
w1) - Снова прокручиваем вниз и читаем
- 1 и записываем (
r1) - 0 (
w0)
- 1 и записываем (
- И наконец, пролистайте весь набор в последний раз и прочитайте
- 0 (
r0)
- 0 (
В этом одном наборе содержится все следующее
- Каждая ячейка испытывает 0 и 1 много раз
- повторяет 0→1, 1→0 переход
- выполняет обход как вверх, так и вниз
- умышленно создает ситуации, когда состояние соседних ячеек меняется сразу после чтения или когда остаются следы предыдущего образца
Поэтому March C- может достаточно хорошо обнаружить следующее.
- Неисправность засорения (SAF)
- Неисправность перехода (TF)
- Наиболее Неисправность дешифратора адреса (AF)
- Типичная 2.Ячейка Ошибка сопряжения (CF)
В реальном BIST памяти на уровне продукта комбинация "March C- (или производный вариант)" + дополнительный фон является практически стандартной.
4. March X vs March C- с точки зрения модели неисправностей
Чтобы разобраться в этом, давайте сравним эти два варианта с точки зрения модели неисправностей.Практический итог прост:
- Базовые концепции, объясненные в лаборатории → March X
- Реальный BIST памяти на уровне продукта → почти March C- (или вариант, производный от C-)
.