Документация Engee

General CRC Generator

Генератор битов CRC-кода в соответствии с порождающим полиномом.

general crc generator

Описание

Блок General CRC Generator генерирует биты контроля циклическим избыточным кодом (cyclic redundancy check, СКС) для каждого кадра входных данных и добавляет их к кадру.

Порты

Вход

# IN_1 — входной сигнал
двоичный вектор-столбец

Details

Входной сигнал, заданный в виде двоичного вектора-столбца. Длина входного кадра должна быть кратна значению параметра Checksums per frame.

Типы данных

Float64 | Boolean

Поддержка комплексных чисел

Нет

Выход

# OUT_1 — кадр выходного кодового слова
двоичный вектор-столбец

Details

Выходной кадр кодового слова, возвращаемый в виде двоичного вектор-столбца, который наследует тип данных входного сигнала. На выходе получаются кадры входных данных с добавленными к ним последовательностями битов CRC.

Длина выходного кадра равна , где – размер входного кадра, – количество контрольных сумм в кадре, а – степень порождающего полинома.

Типы данных

Float64 | Boolean

Поддержка комплексных чисел

Нет

Параметры

Parameters

# Generator polynomial — порождающий полином

Details

Порождающий полином для CRC-алгоритма, заданный одним из следующих способов:

  • Символьное представление полинома. Пример: z^3 + z^2 + 1.

  • Двоичный вектор, элементы которого задают коэффициенты порождающего полинома в порядке убывания мощности. Длина этого вектора равна ( ), где – степень порождающего полинома. Пример: [1 1 0 1] представляет полином .

  • Вектор целых чисел, содержащий степени для ненулевых членов полинома в порядке убывания. Пример: [3 2 0] представляет собой многочлен .

По умолчанию используется порождающий полином CRC-16-CCITT.

В этой таблице перечислены некоторые часто используемые порождающие полиномы.

Имя CRC-алгоритма

Порождающий полином

CRC-32

z^32 + z^26 + z^23 + z^22 + z^16 + z^12 + z^11 + z^10 + z^8 + z^7 + z^5 + z^4 + z^2 + z + 1

CRC-24

z^24 + z^23 + z^14 + z^12 + z^8 + 1

CRC-16

z^16 + z^15 + z^2 + 1

CRC-16-CCITT

z^16 + z^12 + z^5 + 1

Reversed CRC-16

z^16 + z^14 + z + 1

CRC-8

z^8 + z^7 + z^6 + z^4 + z^2 + 1

CRC-4

z^4 + z^3 + z^2 + z + 1

Пример

z^7 + z^2 + 1', [1 0 0 0 0 1 0 1] и [7 2 0] представляют собой один и тот же многочлен, .

Значение по умолчанию

z^16 + z^12 + z^5 + 1

Имя для программного использования

GeneratorPolynomial

Настраиваемый

Нет

# Initial states — начальные состояния внутреннего сдвигового регистра

Details

Начальные состояния внутреннего сдвигового регистра, заданные в виде двоичного скаляра или двоичного вектора-строки с длиной, равной степени порождающего полинома.

Скалярное значение разворачивается в вектор-строку, длина которой равна степени порождающего полинома.

Значение по умолчанию

0

Имя для программного использования

InitialStates

Настраиваемый

Нет

# Direct method — включение прямого алгоритма вычисления контрольной суммы

Details

Установите этот флажок, чтобы использовать прямой алгоритм вычисления контрольной суммы CRC. Если флажок снят, блок использует непрямой алгоритм для вычисления контрольной суммы CRC.

Значение по умолчанию

false (выключено)

Имя для программного использования

DirectMethod

Настраиваемый

Нет

# Reflect input bytes — включение отражения входных байтов

Details

Установите этот флажок, чтобы перевернуть входные данные побайтно перед вводом данных в сдвиговый регистр.

  • Если установлен флажок параметра Reflect input bytes, длина входного кадра, деленная на значение параметра Checksums per frame, должна быть целым числом, кратным 8.

  • Если флажок параметра Reflect input bytes снят, блок не переворачивает входные данные.

Значение по умолчанию

false (выключено)

Имя для программного использования

ReflectInputBytes

Настраиваемый

Нет

# Reflect checksums before final XOR — включение отражения контрольных сумм перед последней XOR-операцией

Details

Установите этот флажок, чтобы перевернуть контрольные суммы CRC вокруг их центров после того, как входные данные полностью пройдут через сдвиговый регистр.

  • Если флажок параметра Reflect checksums before final XOR снят, блок не переворачивает контрольные суммы CRC.

Значение по умолчанию

false (выключено)

Имя для программного использования

ReflectChecksums

Настраиваемый

Нет

# Final XOR — последняя XOR-операция

Details

Последняя XOR-операция, заданная в виде двоичного скаляра или двоичного вектора-строки с длиной, равной степени порождающего полинома.

Операция XOR выполняется с использованием значения параметра Final XOR с рассчитанными битами контрольной суммы CRC перед их добавлением к входным данным. Скалярное значение расширяется до вектора строк, длина которого равна степени порождающего полинома.

  • Значение 0 параметра Final XOR эквивалентно отсутствию операции XOR.

Значение по умолчанию

0

Имя для программного использования

FinalXOR

Настраиваемый

Нет

# Checksums per frame — количество контрольных сумм, вычисляемых для каждого кадра

Details

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

Значение по умолчанию

1

Имя для программного использования

ChecksumsPerFrame

Настраиваемый

Нет

Алгоритмы

Прямой и непрямой алгоритмы CRC

Блок General CRC Generator поддерживает генерацию контрольной суммы CRC с помощью алгоритма косвенного или прямого CRC.

Непрямой алгоритм CRC

Алгоритм непрямого CRC-преобразования принимает двоичный вектор данных, соответствующий многочлену , и добавляет контрольную сумму из бит, соответствующую многочлену .

Каскадное связывания входного вектора и контрольной суммы соответствует многочлену , поскольку умножение на соответствует сдвигу входного вектора на несколько бит влево. Алгоритм выбирает контрольную сумму так, чтобы была кратна заранее определенному многочлену степени , называемому порождающим полиномом.

Алгоритм делит на , и устанавливает контрольную сумму равной двоичному вектору, соответствующему остатку. То есть, если , где – полином степени меньше , то контрольной суммой будет двоичный вектор, соответствующий . При необходимости алгоритм добавляет нули к контрольной сумме, чтобы она имела длину .

Функция генерации CRC, которая реализует фазу передачи алгоритма CRC, делает следующее:

  1. Сдвигает влево вектор входных данных на бит и делит полученный многочлен на .

  2. Устанавливает контрольную сумму равной двоичному вектору длины , соответствующему остатку от шага 1.

  3. Добавляет контрольную сумму к вектору входных данных. Результатом является выходной вектор.

Функция обнаружения CRC вычисляет контрольную сумму для всего входного вектора, как описано выше.

Алгоритм CRC использует двоичные векторы для представления двоичных полиномов в порядке убывания их силы. Например, вектор [1 1 0 1] представляет полином .

general crc generator 1

Биты поступают в регистр сдвига с линейной обратной связью (linear feedback shift register, LFSR) в порядке от младшего бита к старшему. Последовательность входных битов сообщения представляет собой коэффициенты полинома сообщения в порядке убывания мощности. Вектор сообщений дополняется нулями, чтобы вымыть LFSR, где – степень порождающего полинома. Если на выходе левого каскада регистра d(1) стоит 1, то выполняется операция XOR битов cдвигового регистра с коэффициентами порождающего полинома. Когда дополненная последовательность сообщений полностью проходит через LFSR, в регистре остается контрольная сумма [d(1) d(2) …​ d(r)]. Это реализация двоичного длинного деления, в котором последовательность сообщений является делителем (числителем), а полином – делимым (знаменателем). Контрольная сумма CRC – это остаток от операции деления.

Прямой алгоритм CRC

На блок-схеме показан алгоритм прямого CRC.

general crc generator 2 ru

Здесь Ввод блока сообщений – это , а Вывод кодового слова – это

Начальный этап прямого CRC-кодирования происходит, когда три переключателя находятся в положении . Алгоритм подает на кодер биты сообщения . Эти биты являются первыми битами выходного кодового слова. Одновременно алгоритм посылает битов в регистр сдвига с линейной обратной связью (LFSR). Когда система полностью передает все бит сообщения в LFSR, переключатели переходят в положение . Здесь LFSR содержит математический остаток от деления полинома. Эти биты смещаются из LFSR и являются оставшимися битами (контрольной суммой) на выходе кодового слова.

Работа генератора CRC

Генератор CRC добавляет контрольные суммы CRC к входному кадру в соответствии с заданным порождающим полиномом и числом контрольных сумм на кадр.

Для определенного начального состояния внутреннего сдвигового регистра и контрольных сумм на входной кадр:

  1. Входной сигнал делится на подкадров одинакового размера.

  2. Каждому из субкадру соответствует префикс из вектора начальных состояний.

  3. К каждому подкадру применяется алгоритм CRC.

  4. Полученные контрольные суммы добавляются в конец каждого субкадра.

  5. Подкадры объединяются и выводятся в виде вектор-столбцов. Для сценария, показанного здесь, на вход подается 10-битный кадр, порождающий полином вычисляет контрольную сумму CRC, начальное состояние равно 0, а количество контрольных сумм на кадр равно 2.

general crc generator 3 ru

Входной кадр делится на два подкадра размером 5, и контрольные суммы размером 3 вычисляются и добавляются к каждому подкадру. Начальные состояния не показаны, поскольку начальное состояние [0] не влияет на результат работы алгоритма CRC. Выходной кадр переданного кодового слова имеет размер 5 + 3 + 5 + 3 = 16 бит.

Литература

  1. Sklar, Bernard. "Digital Communications: Fundamentals and Applications". Englewood Cliffs, N.J.: Prentice-Hall, 1988.

  2. Wicker, Stephen B. "Error Control Systems for Digital Communication and Storage." Upper Saddle River, N.J.: Prentice Hall, 1995.