ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Journal influence

Higher Attestation Commission (VAK) - К1 quartile
Russian Science Citation Index (RSCI)

Bookmark

Next issue

4
Publication date:
09 December 2024

A fault injector to test the SoC-processor to single event upsets

Date of submission article: 06.10.2015
UDC: 681.3:629.7
The article was published in issue no. № 4, 2015 [ pp. 121-125 ]
Abstract:Error injection to the microprocessor memory is used to test fault detection and correction tools. Injection simulates the result of space heavy charged particles influence. This paper describes the developed failure injector IP-core. IP-core makes single event upsets to the memory of the system-on-a-chip (SoC) microprocessor. The paper describes a failure injector scheme, modules structure, a state machine, the work in all injection modes. The injector allows us to add failures to a register file, cache and external memory in different modes. Available modes are: with or without a microprocessor stop the processor with a random failure or predetermined by covering. Failure injector IP-core was applied to the SoC processor LEON3. The article describes the failure injection procedures in LEON3 memory. DSU interface helps to access the on-chip memory. DSU is a slave interface to the AMBA AHB bus. Using its registers the failure injector can stop the processor, modify its internal memory contents, and resume running software. A memory controller is used to access LEON3 external memory. During the experiment the injector collects statistical data on injected and found faults. The analysis of the results leads to a conclusion about the microprocessor sensitivity to single event upsets in the memory. After testing a failure injector can be excluded from the SoC microprocessor without any traces left.
Аннотация:Для тестирования механизмов обнаружения и коррекции сбоев используют иъектирование ошибок в памяти микропроцессора. Инъектирование имитирует результат воздействия космических тяжелых заряженных частиц. В работе рассмотрен IP-блок инъектора сбоев. IP-блок вносит одиночные сбои в память микропроцессора типа система на кристалле. Приведены схема инъектора сбоев, состав модулей, машина состояний, кратко описана работа во всех режимах инъектирования. Инъектор позволяет вносить сбои в регистровый файл, кэш-память и внешнюю память в различных режимах. Доступны следующие режимы: режим с остановкой и без остановки процессора со случайным или предопределенным покрытиями сбоем. IP-блок инъектора сбоев был применен в СнК-процессоре LEON3. В статье описаны процедуры инъектирования сбоев в память LEON3. Доступ к внутрикристальной памяти осуществляется через DSU-интерфейс. DSU является ведомым устройством на AMBA AHB-шине. Через его регистры инъектор сбоев может остановить работу процессора, модифицировать содержимое внутренней памяти, возобновить работу ПО. Для доступа к внешней памяти процессора LEON3 используется контроллер памяти. Во время эксперимента инъектор собирает статистическую информацию о внесенных и обнаруженных сбоях. Анализ результатов позволяет сделать вывод о чувствительности микропроцессора к одиночным сбоям в памяти. По завершении тестирования инъектор сбоев может быть исключен из состава микропроцессора типа система на кристалле, не оставив в нем никаких «следов».
Authors: Chekmarev S.A. (zaq259@yandex.ru) - Academician M.F. Reshetnev Siberian State Aerospace University (Engineer), Krasnoyarsk, Russia
Keywords: seu injector, leon3, system on a chip, injection, single event effects
Page views: 9529
Print version
Full issue in PDF (9.58Mb)
Download the cover in PDF (1.29Мб)

Font size:       Font:

Обеспечение сбоеустойчивости микропроцессоров, работающих в составе бортовой космической аппаратуры, является важнейшей задачей электронного космического приборостроения. Среди других сбоев, присущих аппаратуре в космосе, своей частотой обращают на себя внимание сбои, вызванные событиями SEU (Single Event Upset) [1, 2]. Данные сбои происходят в памяти: как внутри микропроцессора (регистры и кэш-память), так и во внешней оперативной памяти. Для предотвращения данных сбоев используют помехоустойчивые коды (Error Correction Code, ECC) [3], позволяющие находить и автоматически исправлять одну-две ошибки в памяти. Процессоры и созданные на их основе микропроцессорные системы, которые имеют механизмы обнаружения и исправления ошибок (Error Detection And Correction, EDAC) на базе ECC, называют сбоеустойчивыми.

Для тестирования сбоеустойчивости процессоров к SEU используют методы инъекции сбоев (Fault Injection, FI) [4–9], которые заключаются в искусственном инъектировании сбоев в память микропроцессора, эмулируя результат воздействия на цифровую аппаратуру тяжелых заряженных частиц космического ионизирующего излучения. В работах [10–12] представлен метод инъектирования сбоев в память микропроцессора с помощью блока инъекций сбоев, размещаемого в микропроцессоре типа система на кристалле (СнК) в ка- честве сложно-функционального блока (IP-блока, Intellectual Property). Данный блок позволяет проводить автономные от внешнего аппаратно- программного окружения инъекции как во внутреннюю, так и во внешнюю память. Сбои могут производиться с остановкой процессора перед проведением инъектирования, а также без остановки процессора при инъектировании во внешнюю оперативную память. Покрытие сбоев может быть случайным равномерным или предопределенным.

В данной работе рассмотрен собственно сам IP-блок инъектора сбоев для СнК-процессора LEON3 [13], определен его состав, кратко описана его работа во всех режимах инъектирования. Схема IP-блока представлена на рисунке 1.

IP-блок инъектора сбоев состоит из шести частей (блоков). Блок «AMBA AHB-интерфейс» согласует инъектор сбоев с шиной AMBA AHB. При этом сам инъектор может выступать в роли как ведущего устройства на шине AMBA, так и ведомого. Режим ведущего устройства позволяет инициировать транзакции по AMBA-шине, необходимые для проведения инъекций сбоев в память микропроцессора. Режим ведомого устройства позволяет получить доступ к блокам «Лист сбоев» и «Накопитель результатов» другим устройствам на шине AMBA, что дает возможность вручную инициализировать первый блок и прочитать второй, например, с помощью внешнего управляющего компьютера, подключенного к системе по UART-интерфейсу.

Запрос на инициализацию транзакции для проведения инъекции генерируется в блоке «Генератор SEU». Режим работы генератора SEU определяется соответствующей «Машиной состояний», управляемой с помощью блока регистров по AMBA APB-интерфейсу.

Четыре генератора псевдослучайных чисел (ПСЧ) обеспечивают возможность автоматической генерации следующих параметров, необходимых для инъекции:

–      адрес ошибки во внутренней памяти;

–      положение ошибки в 32-битном слове внутренней памяти;

–      момент времени для инъекции ошибки (определяется интервалом между инъекциями, выраженным в системных тактах);

–      вид ошибки: однократная (ошибка в одном бите) или двукратная (ошибка в двух соседних битах).

ПСЧ реализованы на базе линейного регистра сдвига с обратной связью Linear Feedback Shift Register, LFSR [14].

Генерируемые данные сохраняются в блоке «Лист сбоев», который представляет собой модуль внутрикристальной 32-разрядной памяти. Для обеспечения доступа к данной памяти с различных устройств (ручной/автоматический режимы инициализации листа сбоев) реализован контроллер памяти, обрабатывающий возможные коллизии. Следует отметить, что режим ручного редактирования возможен только при условии, что генератор сбоев не находится в активном состоянии (до начала FI-компании). Данное условие позволило сократить аппаратные ресурсы при практической  реализации контроллера.

Управление инъектором сбоев осуществляется с помощью «Блока регистров», доступного для чтения/записи по AMBA APB-интерфейсу. Регистры блока приведены в таблице 1.

Блок «Накопитель результатов» представляет собой модуль внутрикристальной памяти разрядностью 32 бита. Он служит для накопления результатов проводимых FI-компаний.

Работа инъектора сбоев INJ_SEU определяется «Машиной состояний» (рис. 2), входящей в состав блока «Генератор сбоев», управление которой определяется блоком регистров. Конечный автомат состоит из девяти состояний: idle, gen_parametrs, read_sheet, pending, snooping, stop_proc, injection, start_proc, statistics_collection. Idle – режим простоя. В этом режиме генератор сбоев неактивен. У оператора есть доступ на запись для управляющих регистров и листа сбоев. Таким образом, в этом состоянии можно провести первичную инициализацию контроллера. При активации инъектора (бит «en» управляющего регистра установлен в 1) гене- ратор сбоев переходит из состояния Idle в состояние gen_parametrs или read_sheet. Выбор определяется наличием/отсутствием флага «sh» управляющего регистра.

Таблица 1

Регистры IP-ядра инъектора сбоев

Table 1

IP-core registers of a fault injector

Смещение относительно базового адреса на шине APB

Регистр

0´00

Регистр управления

0´04

Регистр задержки

0´08

Регистр статистики кэш-инструкций (область тэга)

0´0c

Регистр статистики кэш-инструкций (область данных)

0´10

Регистр статистики кэш-данных (область тэга)

0´14

Регистр статистики кэш-данных (область данных)

0´18

Регистр статистики регистрового файла

0´1С

Регистр статистики внешнего ОЗУ

0´20

Регистр предопределенного адреса

0´24

Регистр предопределенных данных

Если лист сбоев не был инициализирован вручную, генератор сбоев сам сгенерирует необходимые параметры, использовав для этого генераторы ПСЧ в состоянии gen_parametrs. Следует отметить, что в этом случае нет возможности проведения инъекции в режиме работы «предопределенный». Далее конечный автомат перейдет в состояние pending, ожидая момента наступления инъекции, который определяется суммой задержек, выставленной в регистре Time и сгенерированной генератором ПСЧ. Затем, исходя из режима работы инъектора (с остановкой/без остановки процессора), конечный автомат перейдет в состояние stop_proc/ injection соответственно. Режим работы инъектора определяется флагом SM управляющего регистра. Следует отметить, что в режиме «без остановки процессора» инъекции возможны только в ОЗУ процессора. В состоянии injection генератор производит опирации чтения/записи данных в памяти. Адрес и положение сбоя в 32-битном слове в данном случае будут определяться сгенерированными параметрами в состоянии gen_parametrs. По завершении процесса инъекции конечный автомат перейдет либо в состояние start_proc (если активирован соответствующий режим), либо напрямую в состояние statistics_collection. Состояние statistics_ collection определяет операции чтения статусных регистров механизма EDAC тестируемого процессора. По завершении процесса сбора статистики конечный автомат перейдет в состояние gen_para­ metrs и FI компания будет продолжена. По завершении необходимого числа инъекций (Nseu=max) конечный автомат сбросит флаг EN в 0 и вернется в состояние Idle. Значение max определяется размером листа сбоев инъектора.

Если лист сбоев был инициализирован вручную, конечный автомат перейдет в состояние read_sheet с целью чтения необходимых параметров. Исходя из режима работы инъектора сбоев (определяется флагом PM управляющего регистра), конечный автомат перейдет в состояние либо pending (и его работа будет соответствовать описанному выше алгоритму), либо snooping. В состоянии snooping конечный автомат будет мониторить моменты обращения во внешнюю память процессора. При достижении необходимого watchpoint либо будет остановлен процессор в состоянии stop_proc (флаг SM управляющего регистра имеет значение 1), либо при отсутствии обращений к контроллеру памяти будет произведена инъекция в ОЗУ в состоянии injection. Собрав статистику обнаруженных ошибок в состоянии statistics_collec­tion, конечный автомат вновь перейдет в состояние read_sheet. При достижении конца листа сбоев конечный автомат сбросит флаг EN в 0 и вернется в состояние Idle.

Чтение/запись данных в память процессора LEON3 производитcя с внутрикристального отладчика (DSU). DSU является ведомым устройством на AMBA AHB-шине. Для взаимодействия с процессором LEON3 инъектор по DMA-каналу обращается к регистрам DSU. Используется набор регистров отладочного интерфейса, представленный в таблице 2.

Например, для остановки процессора LEON3 необходимо установить 1 в бит Break now (BN0) регистра Break and Single Step. Для этого в состоянии stop_proc производится операция записи по адресу DSU_start_address+0x000020 слова 0x1. Аналогично производится операция запуска процессора – путем сбрасывания данного бита в 0 в состоянии start_proc.

Для выполнения инъекций в регистровый файл необходимо отключить механизм EDAC. Для этого проводится операция записи слова 0x1 по адресу DSU_start_address+0x400040 (регистр asr16). Далее инъектор читает/модифицирует содержимое регистрового файла, используя адрес DSU_start_add­ress+0x300000+error_address. Описанные операции выполняются в состоянии injection.

Таблица 2

Карта памяти DSU-интерфейса, используемая инъектором сбоев

Table 2

DSU interface memory card, which is used by a fault injector

Смещение относительно базового адреса на шине APB

Регистр

0´00

DSU control register

0´000020

Break and Single Step register

0´300000– 0´3007FC

IU register file

0´300800– 0´300FFC

IU register file check bits (LEON3FT only)

0´400024

DSU ASI register

0´400040

ASR16

0´700000– 0´7FFFFC

ASI diagnostic access (ASI = value in DSU ASI register, address = address[19:0])

Аналогично инъектор сбоев модифицирует содержимое кэш-памяти. При этом используется диагностический регистр интерфейса DSU (ASI). Инъектор по DMA-каналу записывает в него (DSU_start_address+0x400024) следующие значения: 0x9 для доступа к кэшу инструкций (область данных), 0xB для доступа к кэшу данных (об- ласть данных), 0xC для доступа к кэшу инструкций (область тэга), 0xE для доступа к кэшу данных (область тэга). Далее производятся операции чтения/модификации по адресу DSU_start_address+ +0x700000+error_address.

Доступ к внешнему ОЗУ осуществляется без DSU, напрямую через контроллер памяти. До осуществления инъекции инъектор сбоев отключает механизм EDAC контроллера памяти путем установки в единицу бита RE (RAM EDAC enable). Далее осуществляется операция чтения/модификации по адресу ram_start_address+error_address.

Во всех случаях при осуществлении инъекций модифицированные данные определяются следующим образом: Dmod=Dread xor Error_mask, где Error_mask – параметр, определяемый на стадии read_sheet или gen_parametrs; Dread – содержимое памяти; Dmod – данные, записанные в результате инъекции.

Инъектор сбоев является и ведомым устройством на шине AMBA AHB. Эта функция позволяет получать доступ к листу сбоев и накопителю результатов инъектора для других устройств, входящих в состав СнК. Одним из входных сигналов инъектора является ahbsi  : in  ahb_slv_in_type. Рассмотрим его состав.

-- AHB slave inputs

  type ahb_slv_in_type is record

    hsel       : std_logic_vector(0 to NAHBSLV-1);                      -- slave select

    haddr   : std_logic_vector(31 downto 0);                       -- address bus (byte)

    hwrite   : std_ulogic;                                                             -- read/write

    htrans  : std_logic_vector(1 downto 0);                         -- transfer type

    hsize     : std_logic_vector(2 downto 0);                        -- transfer size

    hburst  : std_logic_vector(2 downto 0);                         -- burst type

    hwdata          : std_logic_vector(31 downto 0);                      -- write data bus

    hprot    : std_logic_vector(3 downto 0);                         -- protection control

    hready  : std_ulogic;                                                             -- transfer done

    hmaster         : std_logic_vector(3 downto 0);               -- current master

    hmastlock     : std_ulogic;                                                    -- locked access

    hmbsel           : std_logic_vector(0 to NAHBAMR-1); -- memory bank select

    hcache  : std_ulogic;                                                             -- cacheable

    hirq       : std_logic_vector(NAHBIRQ-1 downto 0);  -- interrupt result bus

    testen    : std_ulogic;                                                             -- scan test enable

    testrst   : std_ulogic;                                                             -- scan test reset

    scanen           : std_ulogic;                                                    -- scan enable

    testoen           : std_ulogic;                                                    -- test output enable

  end record;

Сигналы hsel, hwrite, haddr, hmaster  позволяют инъектору контролировать шину адреса и данных, а также направление передачи (write/read). Эта особенность позволяет инъектору осуществлять мониторинг транзакций на шине AMBA AHB. Данный режим используется в состоянии snooping, когда инъектор работает в привилегированном режиме и ожидает наступления определенного события (на­пример, запись определенных данных по конкретному адресу оперативной памяти). Как только это событие происходит, осуществляется инъекция.

При работе в предопределенном режиме с остановкой процессора инъектор может производить инъекции и в другие виды памяти. Для этого можно установить специальные контрольные точки (watchpoint) в регистре процессора. LEON3 поддерживает до четырех подобных контрольных точек с возможностью наложения на них устанавливаемых масок. Таким образом, до проведения FI-компании оператор конфигурирует соответствующим образом регистры процессора и инъектор сбоев. При срабатывании watchpoint процессор сам перейдет в режим отладки и будет остановлен. Инъектор может определить наступление этого события по установленному биту DM (Debug mode в control register) DSU-интерфейса. Ожидание на­ступления данного события также происходит в состоянии snooping. Далее будет произведена инъекция путем модификации содержимого интересующей области памяти.

Таким образом, разработанный инъектор сбоев позволяет вносить сбои в регистровый файл, кэш-память и внешнюю память в режимах с остановкой и без остановки процессора со случайным или предопределенным покрытиями сбоями. Являясь независимым IP-блоком, он имеет слабую связь с остальными блоками LEON3, что позволяет проводить его простое включение/выключение из состава данного СнК-процессора.

Литература

1.     Осипенко П. Одиночные сбои – вызов современных микропроцессоров // Электронные компоненты. 2009. № 7. С. 12–15.

2.     Максименко С.Л., Мелехин В.Ф., Филиппов А.С. Анализ проблемы построения радиационно-стойких информационно-управляющих систем // Информационно-управляющие системы. 2012. № 2. С. 18–25.

3.     Золотарев В.В., Овечкин Г.В. Помехоустойчивое кодирование. Методы и алгоритмы: справочник. М.: Горячая линия–Телеком, 2004. 126 с.

4.     Yuste P., de Andres D., Lemus L., Serrano J., Gil P.  Inerte: Integrated Nexus-Based Real-Time Fault Injection Tool for Embedded Systems. Intern. Conf. on Dependable Systems and Networks. SF, CA, 2003, p. 669.

5.     Zenha-Rela M., Cunha J.C., Santos L.E., Gameiro M., Goncalves P., Alves G., Fidalgo A., Fortuna P., Maia R., Henriques L., Costa D. Exploiting the IEEE 1149.1 Standard for Software Reliability Evaluation in Space Applications. European Safety and Reliability Conf., 2006, pp. 1459–1464.

6.     Sonza R.M., Sterpone L., Violante M., Portela-García M., Lopez-Ongil C., Entrena L. Fault Injectionbased Reliability Evaluation of SoPCs. 11th IEEE European Test Sympos., 2006, pp. 75–82.

7.     Portela-Garcia M., Lopez-Ongil C., Garcia-Valderas M., Entrena L. Fault Injection Approach for Measuring SEU Sensitivity in Complex Processors. A Rapid. 13th IEEE Intern. Online Testing Sympos. Heraklion, Crete, Greece July 8–11, 2007, pp. 101–106.

8.     Fidalgo A., Gerigota M., Alves G., Ferreira J. Real-time fault injection using enhanced on-chip debug infrastructures. Microprocessors and Microsystems, 2011, no. 25, pp. 441–452.

9.     Fidalgo A., Alves G., Ferreira J.  A modified debugging infrastructure to assist real time fault injection campaigns. 9th IEEE Workshop on Design & Diagnostics of Electronic Circuits & Systems, 2006, pp. 172–177.

10.  Чекмарев С.А. Способ и система инъекции ошибок для тестирования сбоеустойчивых процессоров бортовых систем космических аппаратов // Вестн. СибГАУ. 2014. № 4 (56). С. 132–138.

11.  Chekmarev S.A., Khanov V.Kh., Antamoshkin О.А. Mo- dification of Fault Injection Method via On-Chip Debugging for Processor Cores of Systems-On-Chip. Proc. Intern. Siberian Conf. on Control and Communications (SibСon), Russia, Omsk, 2015, pp. 1–4.

12.  Чекмарев С.А. Инъекция сбоев в процессорные ядра систем на кристалле методом внутрикристальной отладки в реальном времени // Современные проблемы радиоэлектроники: сб. науч. тр. Красноярск: Сиб. федер. ун-т, 2015. С. 235–239; URL: http://efir.sfu-kras.ru/wp-content/uploads/download/Сборник_ СПР- 2015.pdf (дата обращения: 05.10.2015).

13.  LEON3 Processor // Aeroflex Gaisler 2015. URL: http:// www.gaisler.com/index.php/products/processors/leon3 (дата обращения: 05.10.2015).

14.  Linear Feedback Shift Registers // New Wave Instruments 2015. URL: http://www.newwaveinstruments.com/resources/articles/ m_sequence_linear_feedback_shift_register_lfsr.htm (дата обращения: 05.10.2015).


Permanent link:
http://swsys.ru/index.php?page=article&id=4080&lang=en
Print version
Full issue in PDF (9.58Mb)
Download the cover in PDF (1.29Мб)
The article was published in issue no. № 4, 2015 [ pp. 121-125 ]

Perhaps, you might be interested in the following articles of similar topics: