A close-up photograph capturing an engineer's hand wearing a white glove, gently probing a central processor unit (CPU) on an open automotive engine control unit (ECU). The ECU is connected by a cable to a multi-channel signal generator with a display showing waveform, and then to a laptop. The laptop screen displays 'Fault Injection Management' software, showcasing charts like 'Fault Detection Rate' (green bars) and 'Fault Injector Status', indicating an ongoing fault injection reliability test. The background is a well-lit, professional electronics development lab with an oscilloscope and other equipment blurred.

Тестирование надежности интегральных схем и программного обеспечения: практическое руководство по внедрению ошибок.

Автор: Джонни Лю, генеральный директор компании Dowway Vehicle.

Опубликовано: 21 июля 2026 г.

Категория: Встроенные системы, автомобильная безопасность, аппаратная инженерия, соответствие нормативным требованиям.

Как генеральный директор компании Dowway Vehicle, где мы разрабатываем критически важные для безопасности автомобильные системы, я знаю, что надежность — это не просто формальность. В нашей работе незамеченный сбой микросхемы или кратковременная ошибка программного обеспечения могут привести к серьезным проблемам с безопасностью.

Внедрение ошибок — наиболее надежный способ проверки того, насколько хорошо система обрабатывает ошибки. В этом руководстве рассматриваются основные методы внедрения ошибок, которые помогут вам проектировать системы, корректно обрабатывающие сбои и соответствующие таким стандартам, как IEC 61508.

Table of Contents

1. Почему мы должны внедрять ошибки

В середине 1970-х годов в ходе космических миссий впервые были зафиксированы странные сбои в работе систем, вызванные ошибками в микросхемах. С тех пор разработчикам и производителям микросхем приходится уделять большое внимание надежности. Сегодня необходимо анализировать поведение цифровых схем в самолетах, автомобилях и других критически важных системах при возникновении ошибок. Тестирование с внедрением ошибок — один из лучших способов оценки этой надежности. Фактически, стандарты функциональной безопасности, такие как IEC 61508, настоятельно рекомендуют внедрять ошибки на каждом этапе цикла разработки.

Когда системы дают сбой, они часто приводят к серьёзным проблемам, уничтожая ценные данные о состоянии. Ошибки также могут оставаться скрытыми в течение длительного времени, прежде чем проявятся в явной форме. Это делает невероятно сложным поиск первопричины сбоя в работающей системе. Для больших и сложных конфигураций воспроизведение этих редких сбоев практически невозможно.

Внедрение ошибок решает эту проблему. Оно позволяет проверить, насколько хорошо система:

  • Выявляет неисправности.
  • Изолирует дефекты, чтобы предотвратить их распространение.
  • Проводит перенастройку для обеспечения безопасной работы.
  • Восстанавливается до нормального состояния.

2. Внутри среды внедрения ошибок

Профессиональная система внедрения ошибок представляет собой структурированную экосистему. Она использует девять основных компонентов для проведения тестов без нарушения работы целевой системы:

  1. Целевая система: Тестируемое оборудование или программное обеспечение.
  2. Инжектор ошибок: Инструмент (аппаратный или программный), который приводит к ошибке.
  3. Библиотека ошибок: Отдельная база данных содержит параметры для тестов, такие как типы ошибок, их местоположение, время возникновения и правила работы оборудования или программного обеспечения. Независимость этой библиотеки делает всю систему очень гибкой и упрощает ее перенос в другие проекты.
  4. Генератор рабочих нагрузок: Инструмент, передающий оперативные команды целевой системе. Эти команды могут представлять собой реальные приложения, стандартизированные тесты или синтезированные задачи.
  5. Библиотека рабочих нагрузок: Набор предварительно заданных рабочих нагрузок и тестовых примеров.
  6. Контроллер: Программа, которая запускает весь эксперимент. Она может работать как на целевой системе, так и на независимом хост-компьютере.
  7. Монитор: Инструмент, отслеживающий выполнение системы в режиме реального времени, позволяющий выявлять моменты выполнения команд и возникновения аномалий.
  8. Сборщик данных: Инструмент, который записывает системные данные в режиме реального времени при срабатывании монитора.
  9. Анализатор данных: Автономный инструмент, который обрабатывает и анализирует собранные данные для оценки их достоверности.

3. Внедрение ошибок в аппаратное и программное обеспечение.

Выбор между аппаратными и программными методами зависит от типов неисправностей, которые вы хотите проверить, и от усилий, необходимых для их создания.

Тип неисправности / МодельВнедрение аппаратных ошибокВнедрение программных ошибок
Разомкнутая цепьДаНет
МостДаНет
Bit-FlipДаДа
Побочный токДаНет
Скачок напряженияДаНет
Застрял наДа (лучше всего подходит для контроля местоположения)Сложный / Высокий уровень накладных расходов
Повреждение хранимых данных (память, регистры, диск)РедкоДа
Повреждение данных в сети (шина, сеть)РедкоДа
Проявление дефектов программного обеспечения (на машинном уровне и выше)НетДа

Если вы хотите протестировать залипание сигнала (когда физическая линия принудительно фиксируется в состоянии 1 или 0), то аппаратный инжектор — ваш лучший вариант, поскольку вы можете контролировать точное физическое положение. Имитация залипания сигнала с помощью программного обеспечения либо крайне медленная, либо совершенно невозможная.

Если вас интересует повреждение данных, обычно достаточно программных средств. Некоторые ошибки, например, изменение бита в ячейке памяти, можно воспроизвести как аппаратно, так и программно. В таких случаях выбор следует делать, исходя из стоимости, точности, степени влияния инструмента на систему и простоты повторения теста.

4. Внедрение ошибок, реализованное на аппаратном уровне

Аппаратные методы используют дополнительное физическое оборудование для внесения ошибок непосредственно в целевое оборудование. Мы разделяем эти методы на две основные группы: контактные и бесконтактные.

Впрыск контактного оборудования (на уровне контактов)

Это наиболее распространенный метод внедрения аппаратных средств. Он требует прямого физического контакта с выводами целевого чипа.

  • Активные зонды: Зонды подключаются непосредственно к выводам для подачи тока. Это изменяет состояние выводов. В основном это используется для устранения залипания выводов, хотя можно также замкнуть два вывода вместе. Будьте осторожны: подача слишком большого тока с помощью активных зондов может привести к выгоранию целевой микросхемы.
  • Вставка разъема: Между целевым чипом и его печатной платой устанавливается специальный разъем. Этот разъем подает на контакты определенные уровни аналогового напряжения для имитации залипания, обрыва цепи или сложных логических ошибок. Он может инвертировать сигналы на контактах, выполнять операции И или ИЛИ с соседними контактами или даже выполнять операции, объединяющие текущий сигнал с предыдущими сигналами на том же контакте.

Эти контактные методы позволяют точно контролировать время и место возникновения неисправности. Они также практически не влияют на программное обеспечение, работающее на целевом устройстве. Однако, поскольку эти неисправности возникают на уровне выводов, они не совсем идентичны истинным внутренним залипаниям или замыканиям, происходящим глубоко внутри кремния. Тем не менее, они отлично подходят для тестирования схем обнаружения ошибок. Также можно подключать активные щупы к линии питания для имитации колебаний напряжения, хотя это сопряжено с высоким риском повреждения устройства.

Бесконтактная инъекция оборудования

Инжектор не контактирует с системой. Вместо этого он использует внешние физические силы для создания проблем внутри чипа.

  • Излучение тяжелых ионов: Ионы прорываются через обедненные области микросхем, создавая кратковременные электрические токи.
  • Электромагнитные поля: Размещение оборудования в сильных электромагнитных полях или вблизи них имитирует естественные физические помехи.

Эти бесконтактные методы отлично подходят для тестирования ранних прототипов, особенно когда требуется высокоскоростное отслеживание аппаратных параметров (например, измерение времени реакции процессора на ошибку) или когда необходимо добраться до внутренних участков, недоступных для физических датчиков. Аппаратные системы могут отслеживать и запускать эти ошибки с высокой скоростью и очень низким уровнем системных помех, часто используя аппаратные таймеры или ожидая определенного события (например, появления адреса на шине).

Главный недостаток заключается в том, что бесконтактные методы сложно активировать с точностью до момента или места, поскольку невозможно идеально контролировать момент выброса тяжелого иона или момент попадания электромагнитной волны на конкретный транзистор.

5. Внедрение ошибок, реализованное программным обеспечением (SFI)

Программные средства внедрения ошибок (SFI) пользуются большой популярностью. Главная причина — стоимость: не нужно покупать дорогостоящее лабораторное оборудование. SFI также позволяет тестировать приложения и операционные системы напрямую, что очень сложно сделать с помощью аппаратного обеспечения.

Если вы хотите протестировать приложение, вы размещаете инжектор внутри самого приложения или между приложением и операционной системой. Если вы хотите протестировать операционную систему, вы должны разместить инжектор внутри кода ОС, поскольку добавление дополнительного слоя между аппаратным обеспечением и ОС крайне затруднительно.

Несмотря на свою гибкость, у SFI есть три основных недостатка:

  1. Ограничения доступа: Оно не может затрагивать области, недоступные для программного обеспечения (например, физические логические элементы).
  2. Системные помехи: Внедрение кода может замедлить работу целевой системы или даже изменить исходную структуру программного обеспечения.
  3. Низкое временное разрешение: Это может исказить точность теста. SFI хорошо работает для медленно развивающихся неисправностей (например, проблем с памятью). Но для сверхбыстрых неисправностей (например, сбоев синхронизации ЦП или шины) программное обеспечение может не заметить, как ошибка распространяется по системе.

Гибридный подход

Для решения этих проблем с синхронизацией инженеры иногда используют гибридный метод. Он сочетает в себе гибкость внедрения программного обеспечения со скоростью и точностью аппаратного отслеживания. Он отлично подходит для измерения мельчайших задержек синхронизации. Однако добавление инструментов аппаратного отслеживания увеличит ваши затраты и ограничит гибкость тестирования из-за ограничений физического хранения данных.

6. Внедрение программного обеспечения на этапе компиляции и во время выполнения.

Внедрение программных ошибок различается в зависимости от момента их возникновения: на этапе компиляции или во время выполнения.

SFI на этапе компиляции

Вы изменяете инструкции программы перед её загрузкой или запуском. Вместо изменения физического оборудования вы изменяете исходный код или код ассемблера, чтобы имитировать аппаратные, программные ошибки или временные сбои. Это создаёт модифицированный, неисправный образ программы. Когда система запускает этот образ, возникает ошибка.

Это не требует дополнительного программного обеспечения во время выполнения и не вызывает замедления производительности. Поскольку ошибка постоянно записывается в код, это идеально подходит для имитации постоянных аппаратных сбоев. Недостаток заключается в том, что вы не можете динамически внедрять ошибки во время активного выполнения программы.

Runtime SFI

Вам необходим способ инициировать ошибки во время выполнения программы. Существует три распространенных способа сделать это:

  • Тайм-ауты: Таймер (аппаратный или программный) запускает прерывание через заданное время, вызывая механизм обработки ошибок. Это не требует изменений в коде вашего приложения. Однако, поскольку он срабатывает по времени, а не в зависимости от действий программы, результаты могут быть непредсказуемыми. Этот метод лучше всего подходит для имитации случайных кратковременных или временных аппаратных сбоев.
  • Исключения и ловушки: Аппаратное исключение или инструкция перехвата программного обеспечения (например, точка останова) передают управление инжектору. В отличие от тайм-аутов, это позволяет внедрять ошибки именно тогда, когда происходит определенное событие или условие (например, когда программа пытается получить доступ к определенному участку памяти). Оба механизма должны быть напрямую связаны с обработчиками прерываний системы.
  • Вставка кода: Вы добавляете в программу новые инструкции, которые выполняются непосредственно перед целевым кодом. Это похоже на модификацию кода, но происходит во время выполнения и добавляет новые инструкции вместо изменения старых. В отличие от ловушек, инжектор может работать полностью в пользовательском режиме, а не в системном, поэтому ему не требуются глубокие привилегии операционной системы.

7. Подведение итогов различий

Давайте сравним два основных подхода:

  • Целевые точки: Аппаратная часть ориентирована на выводы корпуса и физические внутренние компоненты. Программная часть ориентирована на активную память, регистры ЦП и общее состояние программного обеспечения.
  • Помехи: Аппаратное обеспечение практически не вызывает задержек по времени. Программное обеспечение вносит накладные расходы на производительность, поскольку требуется выполнение дополнительного кода.
  • Расходы: Оборудование дорогое и требует специализированной лаборатории. Программное обеспечение основано на коде и недорого в реализации.
  • Разрешение по времени: Аппаратное обеспечение обеспечивает высокую точность (наносекунды). Программное обеспечение имеет более низкое разрешение (микросекунды или миллисекунды).
  • Фокус тестирования: Аппаратное обеспечение оценивает обнаружение ошибок на низком уровне и защиту от них. Программное обеспечение тестирует программы восстановления высокого уровня, операционные системы и приложения.

8. Часто задаваемые вопросы

В чём основное различие между внедрением аппаратных и программных ошибок?

Внедрение аппаратных угроз нацелено на физические контакты и схемы, тогда как внедрение программных угроз нацелено на память, регистры и код. Аппаратные методы используют физические инструменты, такие как зонды или излучение, для проверки низкоуровневых реакций в цепи. Программные методы изменяют код или системную память для проверки того, как приложения и операционные системы обрабатывают ошибки.

Может ли внедрение программных ошибок имитировать необратимые аппаратные сбои?

Да, путем внедрения зависимостей на этапе компиляции для необратимого изменения кода программы. Изменяя исходные или ассемблерные инструкции перед выполнением, вы создаете необратимо поврежденный образ программы. Это имитирует необратимый физический сбой, не вызывая при этом замедления производительности во время выполнения.

Почему установка разъема в гнездо безопаснее, чем использование активных щупов для проверки уровня контактов?

При установке микросхемы в разъем используется контролируемое управление сигналом, тогда как активные пробники подают внешние токи, которые могут привести к выгоранию чипа. Активные пробники подают ток непосредственно на физические контакты, что может легко привести к перегреву кремния. Разъемы-переходники безопасно перехватывают сигналы с контактов и используют логические элементы (И, ИЛИ, инверсия) для имитации неисправностей без риска поражения электрическим током.

Заключительные мысли для системных архитекторов

В компании Dowway Vehicle мы придерживаемся простого правила: Если вы не проверяли реакцию вашей системы на неисправность, вы должны исходить из того, что ваша система выйдет из строя при возникновении этой неисправности. Не полагайтесь только на один метод тестирования. Используйте внедрение программного обеспечения на ранних этапах разработки для тестирования конечных автоматов на уровне приложений и процедур восстановления ОС. Позже используйте внедрение аппаратного обеспечения в физические прототипы, чтобы убедиться, что ваши аппаратные сторожевые таймеры, системы защиты памяти и сбои физических контактов не приведут к системной катастрофе.

Ссылки

  • [1] Методы и инструменты внедрения ошибок (Комплексное академическое исследование)
  • [2] Среда внедрения ошибок на основе функциональной верификации (Симпозиум IEEE по надежности и ремонтопригодности)
  • [3] ISO 26262-11:2018 – Рекомендации по применению полупроводниковых технологий для обеспечения функциональной безопасности в автомобильной промышленности.
  • [4] IEC 61508 – Функциональная безопасность электрических/электронных/программируемых электронных систем, связанных с обеспечением безопасности.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.