Skip to main content

Генератор алгоритма ECC на Verilog

Данный генератор создаёт синтезируемое HDL-описание для аппаратного кодера и декодера кодов коррекции ошибок Хемминга. На выходе получается чисто комбинационный верилог-код, поэтому если кому необходимо пожертвовать задержкой в угоду производительность — вправе добавить на выход столько линеек регистров, сколько требуется для данной разрядности кода (при увеличении разрядности начинает каскадироваться дерево XOR’ов: для ASIC это максимум XOR4,  а для FPGA — LUT6). Формат выходного файла соответствует стандарту Verilog-2001. Сфера применения широка: от защиты ECC DRAM в отказоустойчивых серверах до удовлетворения одного из требований автомобильного ISO26262 — защита ECC внутренних шин, ОЗУ и Флеш-памяти.

Возможности

На данный момент генератор позволяет формировать код для кодера/декодера ECC и SECDED (позволяет исправить одну ошибку и обнаружить две).

Декодер имеет выход статуса, по которому можно судить была ли ошибка в принимаемом потоке, а если была — то была ли исправлена.

Если вы хотите посмотреть на исходники и понять как же всё это устроено, то тут отличная отправная точка для изучения этого.

Ограничения

На данный момент разрядность входных данных, защищаемых кодом Хемминга может находиться в пределах от 4 до 64 бит. Это искусственное ограничение онлайн-версии (связанное с рациональным использованием процессорного времени на хостинге). Если необходимо работать с шинами большей разрядности — используйте Матлаб/Октав-версию генератора.

Планы

  • Добавить кодер Рида-Соломона
  • При использовании нескольких кодеров различной разрядности в проекте возможен конфликт имён, поэтому, возможно, стоит вынести обозначение разрядности в имена модулей

Если у Вас есть идеи об улучшении генератора, либо, по вашему мнению, на каком-то наборе данных он демонстрирует некорректную работу, то, пожалуйста, свяжитесь со мной.

Генератор


  КодерРазрядность бит
  Декодер  ECC
  Кодер + Декодер          SEC/DED


PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: