Детектор ошибок в кадре кодового слова в соответствии с порождающим полиномом.
Описание
Блок General CRC Syndrome Detector вычисляет контрольные суммы циклической избыточности (CRC) для полученных кадров кодовых слов. Для корректного обнаружения ошибок в канале связи необходимо согласовать настройки параметров блока General CRC Syndrome Detector с парным блоком General CRC Generator.
Порты
Вход
# IN_1
—
полученное кодовое слово
двоичный вектор-столбец
Details
Полученное кодовое слово, заданное в виде двоичного вектор-столбца.
Выходной кадр, возвращаемый в виде двоичного вектор-столбца, который наследует тип данных входного сигнала. Выходной кадр содержит полученное кодовое слово с удаленными контрольными суммами.
Длина выходного кадра составляет бит, где – размер полученного кодового слова, – количество контрольных сумм в кадре, а – степень порождающего полинома.
Сигнал ошибки контрольной суммы, возвращаемый в виде двоичного вектор-столбца, который наследует тип данных входного сигнала.
Длина Err равна значению Checksums per frame. Для каждого вычисления контрольной суммы значение элемента 0 в Err указывает на отсутствие ошибки контрольной суммы, а значение элемента 1 в Err указывает на ошибку контрольной суммы.
Порождающий полином для CRC-алгоритма, заданный одним из следующих способов:
Полиномиальный символьный вектор. Пример: .
Вектор двоичной строки, который представляет коэффициенты полинома генератора в порядке убывания мощности. Длина этого вектора равна (), где – степень порождающего полинома. Пример: [1 1 0 1] представляет собой полином .
Вектор целых строк, содержащий экспоненты для ненулевых членов полинома в порядке убывания. Пример: [3 2 0] представляет собой многочлен .
По умолчанию используется порождающий полином CRC-16-CCITT.
В этой таблице перечислены некоторые часто используемые порождающие полиномы.
z^7 + z^2 + 1', [1 0 0 0 0 1 0 1] и [7 2 0] представляют собой один и тот же многочлен, .
Значение по умолчанию
z^16 + z^12 + z^5 + 1
Имя для программного использования
GeneratorPolynomial
Настраиваемый
Нет
#Начальное состояние —
начальные состояния внутреннего сдвигового регистра
``
Details
Начальные состояния внутреннего сдвигового регистра, заданные в виде двоичного скаляра или двоичного вектора-строки с длиной, равной степени порождающего полинома.
Скалярное значение разворачивается в вектор-строку, длина которого равна степени генераторного полинома.
Значение по умолчанию
0
Имя для программного использования
InitialStates
Настраиваемый
Нет
#Прямой метод —
включение прямого алгоритма вычисления контрольной суммы
Логический тип
Details
Установите этот флажок, чтобы использовать прямой алгоритм вычисления контрольной суммы CRC. Если флажок снят, блок использует непрямой алгоритм для вычисления контрольной суммы CRC.
Значение по умолчанию
false (выключено)
Имя для программного использования
DirectMethod
Настраиваемый
Нет
#Отражать входные биты —
включение отображения входных байтов
Логический тип
Details
Установите этот флажок, чтобы перевернуть входные данные побайтно перед вводом данных в сдвиговый регистр.
Если установлен флажок параметра Reflect input bytes, длина входного кадра, деленная на значение параметра Checksums per frame, должна быть целым числом, кратным 8.
Если флажок параметра Reflect input bytes снят, блок не переворачивает входные данные.
Значение по умолчанию
false (выключено)
Имя для программного использования
ReflectInputBytes
Настраиваемый
Нет
#Отражать контрольные суммы перед финальным исключающем ИЛИ —
включение отображения контрольных сумм перед последней XOR-операцией
Логический тип
Details
Установите этот флажок, чтобы перевернуть контрольные суммы CRC вокруг их центров после того, как входные данные полностью пройдут через сдвиговый регистр.
Если флажок параметра Reflect checksums before final XOR снят, блок не переворачивает контрольные суммы CRC.
Значение по умолчанию
false (выключено)
Имя для программного использования
ReflectChecksums
Настраиваемый
Нет
#Финальное исключающее ИЛИ —
последняя XOR-операция
``
Details
Последняя XOR-операция, заданная в виде двоичного скаляра или двоичного вектора-строки с длиной, равной степени порождающего полинома.
Операция XOR выполняется с использованием значения параметра Final XOR в качестве контрольной суммы CRC перед добавлением CRC к входным данным. Скалярное значение расширяется до вектора-строки, длина которого равна степени порождающего полинома.
Значение 0 параметра Final XOR эквивалентно отсутствию операции XOR.
Значение по умолчанию
0
Имя для программного использования
FinalXOR
Настраиваемый
Нет
#Контрольные суммы на кадр —
количество контрольных сумм, вычисляемых для каждого кадра
Целое число типа Int64
Details
Количество контрольных сумм, вычисляемых для каждого кадра, заданное в виде положительного целого числа.
Значение по умолчанию
1
Имя для программного использования
ChecksumsPerFrame
Настраиваемый
Нет
Алгоритмы
Прямой и непрямой алгоритмы CRC
Блок General CRC Syndrome Detector поддерживает генерацию контрольной суммы CRC с помощью непрямого и прямого алгоритмов CRC-преобразования.
Непрямой алгоритм CRC
Алгоритм непрямого CRC-преобразования принимает двоичный вектор данных, соответствующий многочлену , и добавляет контрольную сумму из бит, соответствующую многочлену .
Каскадное связывание входного вектора и контрольной суммы соответствует многочлену , поскольку умножение на соответствует сдвигу входного вектора на несколько бит влево. Алгоритм выбирает контрольную сумму так, чтобы была кратна заранее определенному многочлену степени , называемому порождающим полиномом.
Алгоритм делит на , и устанавливает контрольную сумму равной двоичному вектору, соответствующему остатку. То есть, если , где – полином степени меньше , то контрольной суммой будет двоичный вектор, соответствующий . При необходимости алгоритм добавляет нули к контрольной сумме, чтобы она имела длину .
Функция генерации CRC, которая реализует фазу передачи алгоритма CRC, делает следующее:
Сдвигает влево вектор входных данных на бит и делит соответствующий многочлен на .
Устанавливает контрольную сумму, равную двоичному вектору длины , соответствующему остатку от шага 1.
Добавляет контрольную сумму к вектору входных данных. Результатом является выходной вектор. Функция обнаружения CRC вычисляет контрольную сумму для всего входного вектора, как описано выше.
Алгоритм CRC использует двоичные векторы для представления двоичных полиномов в порядке убывания их силы. Например, вектор [1 1 0 1] представляет полином .
Биты поступают в регистр сдвига с линейной обратной связью (LFSR) от младшего индексного бита к старшему индексному биту. Последовательность входных битов сообщения представляет собой коэффициенты полинома сообщения в порядке убывания мощности. Вектор сообщений дополняется нулями , чтобы очистить LFSR, где – степень порождающего полинома. Если на выходе левого каскада регистра d(1) стоит 1, то биты в сдвиговом регистре XORed с коэффициентами порождающего полинома. Когда дополненная последовательность сообщений полностью проходит через LFSR, регистр содержит контрольную сумму [d(1) d(2) … d(r)]. Это реализация двоичного длинного деления, в котором последовательность сообщений является делителем (числителем), а полином – дивидендом (знаменателем). Контрольная сумма CRC – это остаток от операции деления.
Прямой алгоритм CRC
На этой блок-схеме показан алгоритм прямого CRC.
Где Ввод блока сообщений – это , а Вывод кодового слова – это
Начальный этап прямого CRC-кодирования происходит, когда три переключателя находятся в положении . Алгоритм подает на кодер биты сообщения . Эти биты являются первыми битами выходного кодового слова. Одновременно алгоритм посылает битов в регистр сдвига с линейной обратной связью (LFSR). Когда система полностью передает -й бит сообщения в LFSR, переключатели переходят в положение . Здесь LFSR содержит математический остаток от деления полинома. Эти биты смещаются из LFSR и являются оставшимися битами (контрольной суммой) на выходе кодового слова.
Работа CRC детектора
Блок General CRC Syndrome Detector выдает кадр принятого сообщения и вектор ошибок контрольной суммы в соответствии с заданным порождающим полиномом и количеством контрольных сумм в кадре.
Биты контрольной суммы удаляются из каждого подкадра таким образом, чтобы результирующая длина выходного кадра составляла , где – длина столбца принятых кодовых слов, – количество контрольных сумм в кадре, а – степень порождающего полинома. Входной кадр должен быть равномерно кратен .
Для определенного начального состояния внутреннего сдвигового регистра:
Полученное кодовое слово делится на C равных по размеру подкадров.
CRC контрольная сумма удаляется из каждого из подкадров и сравнивается с контрольной суммой, вычисленной для полученных подкадров кодового слова.
Выходной кадр собирается путем объединения битов подкадров с подкадрами и затем выводится в виде вектора столбцов.
Ошибка контрольной суммы выводится в виде двоичного вектор-столбца длиной . Значение элемента 0 указывает на отсутствие ошибок в принятом подкадре, а значение элемента 1 указывает на наличие ошибки в принятом подкадре.
Для показанного здесь сценария принимается 16-битное кодовое слово с ошибкой в третьем бите, для рассчета контрольной суммы используется порождающий полином , начальное состояние равно 0, а количество контрольных сумм на кадр равно 2.
Входной кадр делится на два подкадра размером 5, и контрольные суммы размером 3 вычисляются и добавляются к каждому подкадру. Начальные состояния не показаны, поскольку начальное состояние [0] не влияет на результат работы алгоритма CRC. Выходной кадр переданного кодового слова имеет размер 5 + 3 + 5 + 3 = 16 бит.