ГОСТ Р 54708—2011
15
Приложение А
(обязательное)
Расчет слова CRC
Использование циклических кодов с избыточностью (CRC кодов) позволяет обнаруживать ошибки передачи
на стороне приемника. Эти слова CRC должны быть определены в результате процедуры, описанной в этом при-
ложении.
CRC код определяется полиномом в степени n:
G(x) = x
n
+ g
n – 1
x
n – 1
+ … + g
2
x
2
+ g
1
x + 1,
i
0n – 101
2n – 1
где: n ≥ 1.
g ϵ {0,1}, i = 1 … n – 1.
Расчет CRC может быть выполнен посредством сдвигового регистра, содержащего n ступеней, эквивалент-
ных степени полинома (см. рисунок А.1). Ступени обозначены от b до b, где b соответствует 1, b соответ-
ствует х, b соответствует х
2
, bсоответствует х
n – 1
.
Сдвиговый регистр функционирует, включая элементы XORs (исключающее ИЛИ) на входах тех регистров,
где корреспондирующий коэффициент g
i
полинома равен “1”.
Рисунок А.1 — CRC генератор
n – 1
В начале вычисления CRC все содержимое регистров калибруется одинаково.
После поступления на вход регистра первого бита блока данных (первый — MSb), сдвиговые тактовые им-
пульсы заставляют регистр перемещать его содержимое вперед на одну ступень к MSb(b), в то же время
загружая следующие ступени результатом соответствующих XOR операций. Процедура затем повторяется для
каждого бита данных. Вслед за сдвигом после поступления на вход последнего бита (LSb) блока данных, сдвиго-
вый регистр содержит слово СRC, которое затем считывается. Данные и CRC слова передаются, начиная с MSb.
CRC должен быть инвертирован (дополнен единицами) перед передачей.
Должен использоваться генератор полинома G(x) = x
16
+ x
12
+ x
5
+ 1.
Если CRC будет приложен к оригинальным данным, то второй CRC, рассчитанный по всей длине, приведет
к постоянному значению 1D0F
16
.