Инъектор сбоев для тестирования микропроцессоров типа система на кристалле к одиночным сбоям

Программные продукты и системы /Software & Systems

№ 4 (112), 2015

УДК 681.3:629.7 Дата подачи статьи: 06.10.15

DOI: 10.15827/0236-235X.112.121-125

ИНЪЕКТОР СБОЕВ ДЛЯ ТЕСТИРОВАНИЯ МИКРОПРОЦЕССОРОВ ТИПА СИСТЕМА НА КРИСТАЛЛЕ К ОДИНОЧНЫМ СБОЯМ

С.А. Чекмарёв, инженер, zaq259@yandex.ru

Для тестирования механизмов обнаружения и коррекции сбоев используют иъектирование ошибок в памяти микропроцессора. Инъектирование имитирует результат воздействия космических тяжелых заряженных частиц. В работе рассмотрен IP-блок инъектора сбоев. IP-блок вносит одиночные сбои в память микропроцессора типа система на кристалле. Приведены схема инъектора сбоев, состав модулей, машина состояний, кратко описана работа во всех режимах инъектирования. Инъектор позволяет вносить сбои в регистровый файл, кэш-память и внешнюю память в различных режимах. Доступны следующие режимы: режим с остановкой и без остановки процессора со случайным или предопределенным покрытиями сбоем. IP-блок инъектора сбоев был применен в СнК-процессоре LEON3. В статье описаны процедуры инъектирования сбоев в память LEON3. Доступ к внутрикристальной памяти осуществляется через DSU-интерфейс. DSU является ведомым устройством на AMBA AHB-шине. Через его регистры инъектор сбоев может остановить работу процессора, модифицировать содержимое внутренней памяти, возобновить работу ПО. Для доступа к внешней памяти процессора LEON3 используется контроллер памяти. Во время эксперимента инъектор собирает статистическую информацию о внесенных и обнаруженных сбоях. Анализ результатов позволяет сделать вывод о чувствительности микропроцессора к одиночным сбоям в памяти. По завершении тестирования инъектор сбоев может быть исключен из состава микропроцессора типа система на кристалле, не оставив в нем никаких «следов».

Ключевые слова: одиночные сбои, инъектирование, система на кристалле, LEON3, инъектор сбоев.

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

Генератор SEU

4 генератора ПСЧ

Машина

состояний

Блок

регистров

m :

<* < о.  m ф

И

: & < Q.

m о)

Ш

И

Н

А

A

M

B

A

Рис. 1. Схема IP-блока инъектора сбоев Fig. 1. IP-block scheme of a fault injector

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

121

Программные продукты и системы /Software & Systems

№ 4 (112), 2015

первый блок и прочитать второй, например, с помощью внешнего управляющего компьютера, подключенного к системе по 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 - режим простоя. В этом режиме генератор сбоев неактивен. У оператора есть доступ на запись для управляющих регистров и листа сбоев. Таким образом, в этом состоянии можно провести первичную инициализацию контроллера. При активации инъектора (бит «еп» управляющего регистра установлен в 1) гене-

ратор сбоев переходит из состояния Idle в состояние gen_parametrs или read_sheet. Выбор определяется наличием/отсутствием флага «sh» управляющего регистра.

Таблица 1

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

Table 1

IP-core registers of a fault injector

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

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

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

0x08 Регистр статистики кэш-инструкций

0x0c Регистр статистики кэш-инструкций

0x10 Регистр статистики кэш-данных

0x14 Регистр статистики кэш-данных

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

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

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

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

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

122

Программные продукты и системы /Software & Systems

№ 4 (112), 2015

73

Рис. 2. Машина состояний инъектора Fig. 2. Injector’s state machine

шении необходимого числа инъекций (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 производится с внутрикристального отладчика (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 Регистр

0x00 DSU control register

0x000020 Break and Single Step register

0x300000- 0x3007FC IU register file

0x300800- 0x300FFC IU register file check bits

0x400024 DSU ASI register

0x400040 ASR16

0x700000- 0x7FFFFC ASI diagnostic access

123

Программные продукты и системы /Software & Systems

№ 4 (112), 2015

Аналогично инъектор сбоев модифицирует содержимое кэш-памяти. При этом используется диагностический регистр интерфейса 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 Errormask, где Er-rormask - параметр, определяемый на стадии read_sheet или gen_parametrs; Dread - содержимое памяти; Dmod - данные, записанные в результате инъекции.

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

-- AHB slave inputs type ahb_slv_in_type is record hsel : std_logic_vector(0 toNAHBSLV-1); haddr : std_logic_vector(31 downto 0); hwrite : std_ulogic; htrans : std_logic_vector(1 downto 0); hsize : std_logic_vector(2 downto 0); hburst : std_logic_vector(2 downto 0); hwdata: std_logic_vector(31 downto 0); hprot : std_logic_vector(3 downto 0); hready : std_ulogic;

hmaster : std_logic_vector(3 downto 0); hmastlock : std_ulogic;

hmbsel : std_logic_vector

hcache : std_ulogic;

hirq : std_logic_vector(NAHBIRQ-1 downto 0); testen : std_ulogic; testrst : std_ulogic; scanen : std_ulogic;

testoen : std_ulogic;

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., Gon-calves 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-Garda 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. N° 4 (56). С. 132-138.

-- slave select -- address bus

-- read/write -- transfer type -- transfer size -- burst type -- write data bus -- protection control -- transfer done -- current master -- locked access ; -- memory bank select -- cacheable -- interrupt result bus -- scan test enable -- scan test reset -- scan enable -- test output enable

124

Программные продукты и системы /Software & Systems

№ 4 (112), 2015

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

12. Чекмарев С.А. Инъекция сбоев в процессорные ядра систем на кристалле методом внутрикристальной отладки в реальном времени // Современные проблемы радиоэлектроники: сб. науч. тр. Красноярск: Сиб. федер. ун-т, 2015. С. 235-239; URL:

http://eflr.sfU-kras.ru/wp-content/uploads/download/Cборник_ СПР- 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/arti-cles/ m_sequence_linear_feedback_shift_register_lfsr.htm (дата обращения: 05.10.2015).

DOI: 10.15827/0236-235X.112.121-125 Received 06.10.15

A FAULT INJECTOR TO TEST THE SoC-PROCESSOR TO SINGLE EVENT UPSETS Chekmarev S.A., Engineer, zaq259@yandex.ru (Academician M.F. Reshetnev Siberian State Aerospace University,

Krasnoyarsky Rabochy Ave. 31, Krasnoyarsk, 660014, Russian Federation)

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.

Keywords: single event upset, injection, system-on-chip, LEON3, SEU injector.

References

1. Osipenko P. Single failures are a challenge to modern microprocessors. Elektronnye komponenty [Electronic Components]. 2009, no. 7, pp. 12-15 (in Russ.).

2. Maksimenko S.L., Melekhin V.F., Filippov A.S. Analysis of the problem of building radiation-resistant information-management systems. Informatsionno-upravlyayushchie sistemy [Information and Control Systems]. 2012, no. 2, pp. 18-25 (in Russ.).

3. Zolotarev V.V., Ovechkin G.V. Pomekhoustoychivoe kodirovanie. Metody i algoritmy [Error-correction coding. Methods and algorithms]. 2004, Moscow, Goryachaya liniya-Telekom Publ., 126 p.

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., Hen-riques 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-Garda M., Lopez-Ongil C., Entrena L. Fault Injectionbased Reliability Evaluation of SoPCs. Proc. of the 11th IEEE European Test Symp. 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 Int. Online Testing Symp. Heraklion, Crete, Greece, 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. Proc. of the 9th IEEE Workshop on Design & Diagnostics of Electronic Circuits & Systems. 2006, pp. 172-177.

10. Chekmarev S.A. Method and system of error injection for testing the fault tolerance processor on-the board control system of spacecraft. VestnikSibGAU [The Bulletin of SibSAU]. 2014, no. 254(56), pp. 132-138 (in Russ.).

11. Chekmarev S.A., Khanov V.Kh., Antamoshkin О.А. Modification of Fault Injection Method via On-Chip Debugging for Processor Cores of Systems-On-Chip. Proc. of the 2015 Int. Siberian Conf. on Control and Communications (SibCon). Omsk, 2015, pp. 1-4 (in Russ.).

12. Chekmarev S.A. Fault injection in systems-on-chip processors using the real-time on-chip debugging method. “Sov-remennyeproblemy radioelektroniki”, sb. nauch. trudov [“Modern problems in radioelectronics”, Proc.]. Krasnoyarsk, Siberian Fed. Univ. Publ., 2015, pp. 235-239. Available at: http://eflr.sfu-kras.ru/wp-content/uploads/download/Cборник_CПР-2015.pdf (accessed September 10, 2015).

13. LEON3 Processor. Available at: http://www.gaisler.com/index.php/products/processors/leon3 (accessed October 05, 2015).

14. Linear Feedback Shift Registers. Available at: http://www.newwaveinstruments.com/resources/articles/m_se-quence_linear_feedback_shift_register_lfsr.htm (accessed September 10, 2015).

125