Обеспечение сбоеустойчивости микропроцессоров, работающих в составе бортовой космической аппаратуры, является важнейшей задачей электронного космического приборостроения. Среди других сбоев, присущих аппаратуре в космосе, своей частотой обращают на себя внимание сбои, вызванные событиями 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_collection, конечный автомат вновь перейдет в состояние 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_address+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).