|
Обнаружение и исправление ошибок с использованием CRC в устройствах FPGA фирмы Altera Сокращённый перевод документа AN357 фирмы Altera «Error Detection & Recovery Using CRC in Altera FPGA Devices», версия 1.2, апрель 2006 года. Перевёл Дмитрий Иоффе dsioffe@yandex.ru Ионизирующее излучение - главным образом, атмосферные нейтроны, порождаемые космическими лучами - может вызывать нежелательные переключения ячеек памяти в полупроводниковых устройствах. В частности, этому явлению подвержены программируемые логические интегральные схемы (ПЛИС) - в них содержится конфигурационная память, пользовательская память и регистры. Такие переключения имеют характер одиночных сбоев (SEU - Single Event Upset). Они обратимы, то есть не приводят к повреждению устройства, а вызывают однократный отказ. В предлагаемой вниманию читателей статье рассматривается решение, которое предлагает фирма Altera - один из крупнейших производителей ПЛИС - для преодоления воздействия одиночных сбоев на аппаратуру. ВведениеДля ответственных применений, таких, как авиационная и военная электроника, телекоммуникации, системы управления, очень важно иметь возможность:
(Информация об однократных сбоях (SEU) содержится в разделе продукции на сайте фирмы Altera http://www.altera.com/.) В устройства с повышенной надёжностью встраивается специальный блок для обнаружения ошибок циклического избыточного кода (cyclic redundancy check, CRC), который может выполнять автоматическую непрерывную проверку на отсутствие однократных сбоев. В этой статье рассказывается, как активировать и использовать блок обнаружения ошибок CRC, когда устройство находится в пользовательском режиме 1, и описано, как устранить ошибку в конфигурации, обнаруженную при проверке CRC. Использование обнаружения ошибок CRC для устройств FPGA поддерживается в САПР Quartus® II, начиная с версии 4.1. Оно реализовано для устройств из следующих семейств:
Блок обнаружения ошибок CRC, который используется в устройствах Stratix, Stratix GX и Cyclone, может обнаруживать ошибки в конфигурационной памяти. Его использование может отнимать часть ресурсов ПЛИС, замедлять трассировку (fitting) и влиять на производительность. Ниже описываются эти потери:
Эти потери имеют место только тогда, когда используется блок CRC. В устройствах Stratix II, Stratix II GX и Cyclone II нет аппаратных проблем, связанных с использованием CRC. Поэтому применение обнаружения ошибок 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-разрядный регистр. Для автоматизации тестирования и верификации можно использовать Jam файлы (.jam). Это мощное средство разработки, которое позволяет проверять CRC прямо в работающей системе, на лету, без переконфигурации устройства. После этого можно переключить схему CRC на проверку реальных ошибок, возникающих в результате SEU. ^ Таблица 1. 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. ^ В таблице 2 описывается вывод CRC_ERROR. Расположение выводов CRC_ERROR для устройств Stratix и Stratix GX, приведённое в таблицах 3 и 4 оригинала, в переводе опущено. Таблица 2. Описание вывода CRC_ERROR
^ Для устройств серий Stratix и Cyclone Вы можете разрешить работу блока обнаружения ошибок при помощи САПР Quartus II (см. раздел «(2) Минимальное время соответствует максимальной тактовой частоте схемы обнаружения ошибок и может изменяться в зависимости от процессов, напряжений и температур.»). Этот блок содержит логику, необходимую для вычисления 32-разрядной сигнатуры CRC битов конфигурационной памяти устройства. Схема CRC продолжает работать даже после возникновения ошибки. Когда происходит единичный сбой, устройство устанавливает высокий уровень на выходе CRC_ERROR. Существуют два типа проверки битов конфигурации:
В данном тексте рассматривается только первый тип, 32-разрядный CRC для пользовательского режима. ^ В схеме обнаружения ошибки есть два 32-разрядных регистра, в которых хранятся сигнатура текущего рассчитанного CRC и предварительно вычисленное значение CRC. При ненулевом значении регистра сигнатуры на выводе CRC_ERROR устанавливается высокий уровень. На рисунке 1 показана функциональная схема блока обнаружения ошибки с двумя этими регистрами. ![]() Рисунок 1. Схема блока обнаружения ошибки Рисунок находится в файле fig1.bmp. В таблице 5 описаны регистры, показанные на рисунке 1. ^
^ Когда закончена конфигурация устройства, и оно перешло в пользовательский режим, Вы можете выполнять JTAG-команду CHANGE_EDREG. Если не было обнаружено сбоев, перед выполнением команды на выводе CRC_ERROR будет низкий уровень. Вы можете имитировать сбой, изменив содержимое 32-разрядного регистра в схеме обнаружения ошибок CRC. На выводе CRC_ERROR установится высокий уровень, сообщая об ошибке. После проверки индикации ошибки Вы можете восстановить правильное содержимое 32-разрядного регистра, используя ту же самую команду. Следовательно, перед тем, как записать ошибочное значение, надо прочитать и сохранить правильное значение. Для автоматизации этого процесса можно создать Jam файл. Когда в САПР Quartus II разрешено обнаружение ошибок CRC, устройство автоматически активизирует процесс работы с CRC при входе в пользовательский режим, когда закончены конфигурация и инициализация. До возникновения ошибки на выводе CRC_ERROR будет низкий уровень. Когда схема обнаружения ошибки обнаружит повреждённый бит (биты) в ходе проведённого расчёта CRC, на этом выходе установится высокий уровень. ^ Когда на выходе CRC_ERROR появляется высокий уровень, он сохраняется там в течение следующего расчёта CRC. Этот вывод не сохраняет состояние, соответствующее предыдущему расчёту CRC. Если при новом вычислении CRC не будет выявлено сбойных битов, на выходе CRC_ERROR опять появится низкий уровень. Работа схемы обнаружения ошибок продолжается до сброса устройства. Как только устройство входит в пользовательский режим, начинает работать схема обнаружения ошибок CRC. Она использует для тактирования внутренний конфигурационный генератор с делителем частоты на выходе. Вы можете задавать коэффициент деления делителя при помощи САПР Quartus II (см. раздел «(2) Минимальное время соответствует максимальной тактовой частоте схемы обнаружения ошибок и может изменяться в зависимости от процессов, напряжений и температур.»). Коэффициент деления равен степени числа 2 (2n), где n может быть целым числом от нуля или единицы до восьми. В таблице 6 показаны минимальные и максимальные тактовые частоты схемы обнаружения ошибок. ^
Время, которое затрачивается на каждый расчёт CRC, зависит от конкретного устройства и от тактовой частоты. В таблице 7 приводится ориентировочное время одного расчёта CRC с минимальной и максимальной тактовой частотой для устройств серий Stratix и Cyclone. ^
Замечания к таблице 7: (1) Времена расчёта CRC для устройств Stratix II GX будут включены в следующую версию этого документа. (2) Минимальное время соответствует максимальной тактовой частоте схемы обнаружения ошибок и может изменяться в зависимости от процессов, напряжений и температур. (3) Максимальное время соответствует максимальной тактовой частоте схемы обнаружения ошибок и может изменяться в зависимости от процессов, напряжений и температур. ^ САПР Quartus II поддерживает возможность обнаружения ошибок CRC, начиная с версии 4.1. При включении этого режима вывод CRC_ERROR становится выходом схемы обнаружения ошибок. Схема обнаружения ошибок CRC управляется через диалоговое окно «Device & Pin Options». Для контроля правильности данных она использует 32-разрядную схему CRC. Для того, чтобы включить схему обнаружения ошибок CRC, надо выполнить следующие действия:
![]() Рисунок 2. Включение обнаружения ошибок CRC в САПР Quartus II Рисунок находится в файле fig2.bmp. ^ Система, в состав которой входит FPGA Altera, должна управлять реконфигурацией устройства. При появлении сигнала ошибки на выходе CRC_ERROR система должна установить на заданное время низкий уровень на выводе nCONFIG, чтобы запустить реконфигурацию FPGA. В некоторых применениях, где требуется высокая достоверность, может возникнуть необходимость подсчёта одиночных сбоев. ВыводыНазначение схемы обнаружения ошибок CRC состоит в обнаружении переключений любого из битов конфигурационной памяти устройств серий Stratix или Cyclone. При использовании этой схемы Вы можете непрерывно проверять целостность данных в конфигурационной памяти. 1 Пользовательский режим - это режим, в который переходит ПЛИС после окончания конфигурации и инициализации. В этом режиме она выполняет функции, заданные пользователем (примечание переводчика). |