Обнаружение и исправление ошибок с использованием CRC в устройствах FPGA фирмы Altera
Ионизирующее излучение — главным образом, атмосферные нейтроны, порождаемые космическими лучами, — может вызывать нежелательные переключения ячеек памяти в полупроводниковых устройствах. В частности, этому явлению подвержены программируемые логические интегральные схемы (ПЛИС) — в них содержится конфигурационная память, пользовательская память и регистры. Такие переключения имеют характер одиночных сбоев (Single Event Upset — SEU). Они обратимы, то есть не приводят к повреждению устройства, а вызывают однократный отказ. В статье рассматривается решение, которое предлагает фирма Altera — один из крупнейших производителей ПЛИС, — для преодоления воздействия одиночных сбоев на аппаратуру.
Введение
Для ответственных применений, таких как авиационная и военная электроника, телекоммуникации, системы управления, очень важно иметь возможность:
- убедиться, что конфигурационные данные в ПЛИС не содержат ошибок;
- подать системе сигнал в случае возникновения ошибки в конфигурации. (Информация об однократных сбоях (SEU) содержится в разделе продукции на сайте фирмы Altera http://www.altera.com/.)
В устройства с повышенной надежностью встраивается специальный блок, предназначенный для обнаружения ошибок циклического избыточного кода (cyclic redundancy check, CRC), который может выполнять автоматическую непрерывную проверку на отсутствие однократных сбоев.
В этой статье рассказывается, как активировать и использовать блок обнаружения ошибок CRC, когда устройство находится в пользовательском режиме*, и описывается, как устранить ошибку в конфигурации, выявленную при проверке CRC.
* Пользовательский режим — это режим, в который переходит ПЛИС после окончания конфигурации и инициализации. В таком режиме она выполняет функции, заданные пользователем (Прим. переводчика).
Использование обнаружения ошибок CRC для устройств FPGA поддерживается в САПР Quartus II, начиная с версии 4.1. Оно реализовано для устройств из следующих семейств:
- Stratix II;
- Stratix II GX;
- Stratix;
- Stratix GX;
- Cyclone II;
- Cyclone.
Блок обнаружения ошибок CRC, применяемый в устройствах Stratix, Stratix GX и Cyclone, способен находить ошибки в конфигурационной памяти. Его использование может отнимать часть ресурсов ПЛИС, замедлять трассировку (fitting) и влиять на производительность.
Опишем эти потери:
- Cyclone: уменьшение максимальной частоты на 9%, увеличение использования проводников на 21%, увеличение времени трассировки на 20% и использование 9% ресурсов.
- Stratix и Stratix GX: уменьшение максимальной частоты на 10%, увеличение использования проводников на 16%, увеличение времени трассировки на 32% и использование 7% ресурсов.
Эти потери возникают лишь в случае применения блока CRC.
В устройствах Stratix II, Stratix II GX и Cyclone II нет аппаратных проблем, связанных с использованием CRC. Поэтому применение системы обнаружения ошибок CRC в этих семействах не влияет на производительность и использование ресурсов.
В устройствах Stratix HardCopy нет конфигурационных схем, поэтому для них не нужен блок проверки CRC.
В этой статье рассматриваются следующие темы:
- основы обнаружения ошибок;
- обнаружение ошибок конфигурации;
- обнаружение ошибок в пользовательском режиме;
- вывод CRC_ERROR;
- блок обнаружения ошибок;
- временная диаграмма обнаружения ошибок;
- программная поддержка;
- восстановление после ошибок CRC.
Основы обнаружения ошибок
Если данные повреждаются во время прохождения через передающую среду, возникают ошибки. Для их обнаружения передатчик рассчитывает контрольную сумму для текущего кадра (frame) данных и добавляет ее к исходному кадру. Приемник рассчитывает контрольную сумму для принятого кадра данных по той же самой методике и сравнивает полученную контрольную сумму с переданной. Если контрольные суммы оказываются равными, полученный кадр данных считается правильным, то есть повреждения данных при передаче или хранении не произошло.
При обнаружении ошибки CRC применяется та же самая концепция. Когда устройства серий Stratix и Cyclone (Stratix II, Stratix II GX, Stratix, Stratix GX, Cyclone II или Cyclone) находятся в пользовательском режиме, блок обнаружения ошибок CRC проверяет целостность конфигурационных данных.
Существуют два вида проверки ошибок CRC в FPGA. Один всегда выполняется во время конфигурации, а второй может опционально работать фоновым образом в пользовательском режиме. Эта статья описывает обнаружение ошибок CRC в пользовательском режиме.
Обнаружение ошибок конфигурации
Блок обнаружения ошибок CRC, действующий в пользовательском режиме, — это отдельный узел, не связанный с тем, который работает во время конфигурации и использует заранее рассчитанный кадровый CRC. Данный CRC сохраняется во время конфигурации для каждого кадра вместе с конфигурационными данными.
Во время конфигурации FPGA рассчитывает CRC для каждого кадра полученных данных и сравнивает его с кадровым CRC, полученным в потоке данных. Конфигурация продолжается до обнаружения ошибки или до завершения.
Устройства Stratix II, Stratix II GX и Cyclone II, находясь в пользовательском режиме, поддерживают JTAG-команду CHANGE_EDREG, которая позволяет записывать данные в 32-разрядный регистр (табл. 1). Для автоматизации тестирования и верификации можно использовать jam-файлы (.jam). Это мощное средство, способное проверять CRC прямо в работающей системе, без переконфигурации устройства. Затем можно переключить схему CRC на проверку реальных ошибок, возникающих в результате SEU.
JTAG-команду CHANGE_EDREG можно выполнять, только если устройство находится в пользовательском режиме.
Устройства Stratix II и Stratix II GX рассчитывают значение CRC во время конфигурации. По окончании конфигурации эти устройства загружают значение CRC в 32-разрядный регистр.
Для устройств Stratix, Stratix GX, Cyclone II и Cyclone CRC рассчитывается в САПР Quartus II и загружается в устройство как часть потока конфигурационных данных. Устройства также загружают CRC в 32-разрядный регистр по окончании конфигурации.
Когда обнаружение ошибок CRC включено в пользовательском режиме, устройства пересчитывают CRC на основании содержания конфигурационных данных и сравнивают его с CRC, сохраненным в 32-разрядном регистре.
Обнаружение ошибок в пользовательском режиме
Все устройства серий Stratix и Cyclone содержат встроенную схему для обнаружения повреждения данных в ячейках конфигурационной памяти (configuration random-access memory, CRAM) в результате однократных сбоев.
Такие сбои возникают при изменении состояния битов конфигурационной памяти под воздействием ионизирующих частиц.
Когда во время реконфигурации устройства в бит данных перезаписывается правильное значение, устройство снова нормально работает. Схема обнаружения ошибок непрерывно вычисляет CRC ячеек сконфигурированной CRAM и сравнивает его с предварительно рассчитанным CRC. Если эти CRC совпадают, то считается, что в битах CRAM нет ошибок. Процесс обнаружения ошибок продолжается до сброса устройства (подачей низкого уровня на вывод nConfig).
В устройствах серий Stratix и Cyclone не производится обнаружение ошибок в блоках памяти и буферах ввода/вывода. Блоки памяти в них поддерживают биты четности, которые используются для проверки блоков на любые ошибки. Буферы ввода/вывода не проверяются, потому что в них в качестве ячеек памяти применяются триггеры, более устойчивые к одиночным сбоям. Триггеры также предназначены для хранения предварительно рассчитанного CRC и других битов схемы обнаружения ошибок.
Схема обнаружения ошибок в устройствах серий Stratix и Cyclone использует 32-разрядный CRC в соответствии со стандартом IEEE 802. Если ошибок не обнаружено, результирующая 32-разрядная сигнатура будет равна 0х00000000, в итоге выходной сигнал CRC_ERROR окажется равным 0. Если же в устройстве произойдет сбой, результирующая сигнатура окажется ненулевой и на выходе CRC_ERROR будет соответствовать 1.
Вывод CRC_ERROR. Блок обнаружения ошибок
Для устройств серий Stratix и Cyclone можно разрешить работу блока обнаружения ошибок при помощи САПР Quartus II (замечания к таблице 5). Этот блок содержит логику, необходимую для вычисления 32-разрядной сигнатуры CRC битов конфигурационной памяти устройства.
Схема CRC продолжает работать даже после возникновения ошибки. Когда происходит единичный сбой, устройство устанавливает высокий уровень на выходе CRC_ERROR. Существуют два типа проверки битов конфигурации.
- Первый тип — это проверка ошибок конфигурационной памяти (32-разрядный CRC) в пользовательском режиме, с индикацией через вывод CRC_ERROR. Здесь применяется только один 32-разрядный CRC для всех конфигурационных данных.
- Второй тип — это 16-разрядный CRC, встроенный в каждый кадр конфигурационных данных. Во время конфигурации, после загрузки кадра данных в FPGA, предварительно вычисленный CRC поступает в схему CRC. В то же время рассчитывается CRC для загруженного кадра данных. Если предварительно вычисленный CRC не совпадает с только что рассчитанным, на выводе nStatus устанавливается низкий уровень. Каждый кадр данных сопровождается 16-разрядным CRC, поэтому в потоке конфигурационных битов присутствует множество 16-разрядных значений CRC. Каждое устройство имеет свою длину кадра конфигурационных данных.
В статье рассматривается только первый тип, 32-разрядный CRC для пользовательского режима.
Регистры обнаружения ошибки
В схеме обнаружения ошибки есть два 32-разрядных регистра, в которых хранятся сигнатура текущего рассчитанного CRC и предварительно вычисленное значение CRC. При ненулевом значении регистра сигнатуры на выводе CRC_ERROR устанавливается высокий уровень. На рис. 1 показана функциональная схема блока обнаружения ошибки с двумя этими регистрами.
В таблице 3 описаны регистры, показанные на рис. 1.
Временная диаграмма обнаружения ошибок
После того как закончена конфигурация устройства и оно перешло в пользовательский режим, можно выполнять JTAG-команду CHANGE_EDREG. Если не было обнаружено сбоев, перед выполнением команды на выводе CRC_ERROR будет низкий уровень. Сбой можно имитировать, изменив содержимое 32-разрядного регистра в схеме обнаружения ошибок CRC. На выводе CRC_ERROR установится высокий уровень, сообщая об ошибке. После проверки индикации ошибки можно восстановить правильное содержимое 32-разрядного регистра, используя ту же самую команду. Следовательно, перед тем, как записать ошибочное значение, надо прочитать и сохранить правильное значение. Для автоматизации этого процесса следует создать jam-файл.
Если в САПР Quartus II разрешено обнаружение ошибок CRC, устройство автоматически активизирует процесс работы с CRC при входе в пользовательский режим, когда закончены конфигурация и инициализация. Когда в ходе проведенного расчета CRC схема обнаружения ошибки выявит поврежденный бит (биты), на этом выходе установится высокий уровень.
Altera рекомендует по окончании проверок реконфигурировать устройство, если изменено содержимое регистра CRC.
Когда на выходе CRC_ERROR появляется высокий уровень, он сохраняется в течение следующего расчета CRC. Этот вывод не сохраняет состояние, соответствующее предыдущему расчету CRC. Если при новом вычислении CRC не будет выявлено сбойных битов, на выходе CRC_ERROR вновь появится низкий уровень. Работа схемы обнаружения ошибок продолжается до сброса устройства.
Как только устройство входит в пользовательский режим, начинает работать схема обнаружения ошибок CRC. Она использует для тактирования внутренний конфигурационный генератор с делителем частоты на выходе. Можно задавать коэффициент деления делителя при помощи САПР Quartus II (замечания к таблице 5). Коэффициент деления равен степени числа 2 (2n), где n может быть целым числом от нуля или единицы до восьми.
В таблице 4 показаны минимальные и максимальные тактовые частоты схемы обнаружения ошибок.
Время, которое затрачивается на каждый расчет CRC, зависит от конкретного устройства и от тактовой частоты. В таблице 5 приводится ориентировочное время одного расчета CRC с минимальной и максимальной тактовой частотой для устройств серий Stratix и Cyclone.
Программная поддержка
САПР Quartus II поддерживает возможность обнаружения ошибок CRC, начиная с версии 4.1. При включении этого режима вывод CRC_ERROR становится выходом схемы обнаружения ошибок.
Схема обнаружения ошибок CRC управляется через диалоговое окно Device & Pin Options. Для контроля правильности данных она использует 32-разрядную схему CRC.
Для того чтобы включить схему обнаружения ошибок CRC, надо выполнить следующие действия.
- Запустить САПР Quartus II и загрузить проект, в котором используется устройство из серий Stratix или Cyclone.
- В меню Assignments выбрать Settings. Появится диалоговое окно Settings.
- Из списка Category выбрать Device. Появится страница Device.
- Щелкнуть по кнопке Device & Pin Options. Появится диалоговое окно Device & Pin Options (рис. 2).
- В диалоговом окне Device & Pin Options щелкнуть по закладке Error Detection CRC.
- Установить флажок Enable error detection CRC.
- В поле Divide error check frequency by ввести нужный делитель, как описано в таблице 4.
- Щелкнуть по кнопке OK.
Восстановление после ошибок CRC
Система, в состав которой входит FPGA Altera, должна управлять реконфигурацией устройства. При появлении сигнала ошибки на выходе CRC_ERROR система должна установить на заданное время низкий уровень на выводе nConfig, чтобы запустить реконфигурацию FPGA.
В некоторых применениях, где требуется высокая достоверность, может возникнуть необходимость подсчета одиночных сбоев.
Выводы
Назначение схемы обнаружения ошибок CRC состоит в выявлении переключений любого из битов конфигурационной памяти устройств серий Stratix или Cyclone. При использовании этой схемы можно непрерывно проверять целостность данных в конфигурационной памяти.