Аппаратная реализация вычислителя 32-разрядной циклической контрольной суммы CRC

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    261,79 Кб
  • Опубликовано:
    2015-08-09
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Аппаратная реализация вычислителя 32-разрядной циклической контрольной суммы CRC

Министерство образования Российской Федерации

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

им. Н.Э. БАУМАНА

Курсовая работа по дисциплине

«Электроника и схемотехника»

Москва

Содержание

Введение

. Операция деление по модулю 2

. Табличный метод вычисления CRC

3. Аппаратная реализация вычисления CRC в параллельном и последовательном коде

. Математическое описание алгоритма вычисления CRC

. Вычисление CRC. Параметры алгоритма

. Описание процедуры алгоритма вычисления CRC

. Стандартизованные полиномы

. Аппаратная реализация CRC32

Заключение

Введение

Для осуществления контроля правильности хранимой и передаваемой информации в цифровой электронике широко применяются так называемые контрольные суммы.

Метод с применением контрольных сумм основывается на следующем: к передаваемой или хранимой в виде массива информации добавляется небольшой контрольный код (чаще всего от 1 до 64 разрядов), в котором хранится вычисленная по определенному алгоритму контрольная сумма данного массива. При чтении или получении адресуемым устройством этого массива информации, контрольная сумма по тому же самому алгоритму вычисляется снова. Если сумма контрольного кода и суммы вычисленная для полученного массива совпадут, то будет считаться, что информация передана правильно, т.е. без ошибок.

Метод построен на следующих логических предпосылках. Контрольная сумма она же (контрольный код) значительно меньше массива информации, а потому вероятность искажения контрольного кода (при передаче информации по какому - либо каналу или при ее хранении на носителе) значительно ниже вероятности искажения массива информации. При искажении, как массива информации, так и контрольного кода высока вероятность, что эти искажения будут обнаружены при следующем подсчете контрольной суммы. Есть вероятность, что искажение массива в нескольких местах будет таковым, что итоговая контрольная сумма не изменится. Такая вероятность обычно чрезвычайно мала. Контрольные суммы применяются при хранении информации на всех видах носителей, а также при ее передаче по сети. Контрольные суммы помогают, определить являются ли данные хранимые в файлах, секторах на диске поврежденными (тогда их нельзя использовать) или нет.

Существует ряд способов вычисления контрольной суммы, отличающихся по степени сложности и надежности обнаружения ошибок. Наиболее распространенным в настоящее время является - циклический метод контроля по избыточности или CRC (Cyclic Redundancy Check), при котором применяется циклическая контрольная сумма.

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

N - разрядное двоичное число делится по модулю два (операция XOR) на некоторое постоянное двоичное число (полином), которое специальным образом выбирается. Остаток этого деления и является вычисляемой контрольной суммой.

Этим методом определяются одиночные ошибки в информационном массиве с достоверностью 100%, остальные ошибки находятся с вероятностью, приблизительно равной 1-2-n, где n - число разрядов контрольного кода (утверждение верно лишь при условии, что N намного больше n, что, впрочем, практически всегда выполняется). К примеру, при n = 8 такая вероятность составит 0.996, для n = 16 ее значение будет равно 0.999985, а для n = 32 она составит 0.9999999997672. Другими словами практически все ошибки будут обнаружены.

1.      Операция деление по модулю 2

Пусть массив (последовательность бит) имеет следующий вид: 101111001110 (для простоты примера берем небольшую разрядность). Число, на которое выполняется деление по модулю (носит название образующего полинома ) для примера будет 10011. Выбирается это число с учетом тех свойств, что оно должно делиться по модулю 2 без остатка только на единицу и само на себя. Образующий полином имеет разрядность на единицу больше чем разрядность контрольного кода. К примеру, если требуется получить 8 - разрядный контрольный код необходимо взять образующий полином 9 - разрядный.

В рассматриваемом примере это полином 5-го разряда, а контрольная сумма (остаток от деления) будет 4-х разрядной. Если бы требовалось получить 8-разрядный остаток то можно, к примеру, было бы взять образующий полином равным 100011101 в шестнадцатеричном коде 11D.

Операция деления по модулю два выполняется практически так же как обычное деление в столбик (рис. 1 <#"872077.files/image001.gif">

Рис. 1

2.      Табличный метод вычисления CRC

Реализация на практике вычисления циклического контрольного кода, выполняется параллельным и последовательным методами. Практическая реализация вычисления этого остатка возможна по приведенному здесь примеру аппаратным или программным способом, но этот способ считается медленным. Увеличить скорость вычисления контрольного кода можно, прибегнув, к так называемому табличному методу. Суть метода такова создается таблица чисел размером 2nхn, где n - разрядность контрольной суммы. Метод вычисления чисел в таблице следующий (табл. 1 <#"872077.files/image002.gif">

Рис. 2. Параллельный вычислитель 8-разрядной циклической контрольной суммы на ПЗУ.

В случае если разрядность контрольной суммы n>=16 применяют вычисление в последовательном коде. При этом методе вычисления все биты информационного массива начиная с первого, поступают на вход вычисляющего устройства последовательно бит за битом.

Устройство вычисления контрольной суммы в последовательном режиме представляет собой сдвиговый регистр с обратными связями от некоторых разрядов через сумматоры по модулю 2 (то есть элементы исключающее ИЛИ).

Полное число разрядов сдвигового регистра должно равняться разрядности вычисляемой циклической контрольной суммы (при этом разрядность регистра на единицу меньше разрядности используемого образующего полинома). Место включения обратных связей однозначно определяется выбранным полиномом. Число точек включения обратной связи определяется числом единиц в полиноме (единица младшего разряда в данном случае не берется), а номера разрядов сдвигового регистра, с которых берутся сигналы обратной связи, определяются номерами единичных разрядов в коде полинома. В данном случае необходимо смешать по функции исключающее ИЛИ не только сигналы обратной связи, но и входной сигнал данных в последовательном коде.

Рис.3 Последовательный вычислитель 16-разрядной циклической контрольной суммы на регистре сдвига.

На рис.  <#"872077.files/image004.gif"> взаимно однозначно <https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%B5%D0%BA%D1%86%D0%B8%D1%8F> соответствует двоичный полином [1]  его коэффициенты представляют собой исходную последовательность. К примеру, последовательности бит 1011010 соответствует многочлен:

Значение контрольной суммы в алгоритме с порождающим многочленом G(x) степени N определяется, как последовательность бит длиной N, представляющая многочлен R(x), получившийся в остатке от деления многочлена P(x), представляющего входящий массив бит, на порождающий многочлен G(x):


Где

R(x) - многочлен, представляющий значение CRC;

P(x) - многочлен, коэффициенты которого представляют входные данные;

G(x) - порождающий многочлен;

N - степень порождающего многочлена.

При делении с остатком <https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC> исходного многочлена (представляющего входной массив бит) на порождающий многочлен G(x) степени N можно получить 2N различных остатков от деления. Многочлен G(x) как часто бывает является неприводимым <https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D0%B9_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD>. Порождающий многочлен подбирают обычно в соответствии с требованиями к хэш-функции <https://ru.wikipedia.org/wiki/%D0%A5%D1%8D%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F> в для каждого конкретного применения.

Однако следует отметить, что существует множество стандартизованных образующих полиномов, имеющих хорошие математические и корреляционные свойства (минимальное число коллизий <https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D0%BB%D0%B8%D0%B7%D0%B8%D1%8F_%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8>, простота вычисления) в таблице 2 перечислены некоторые стандартные порождающие полиномы.

5.      Вычисление CRC. Параметры алгоритма

Одним из основных параметров CRC является порождающий полином.

С порождающим полиномом связан другой параметр - его степень <https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD%D0%B0>, она определяется количеством бит <https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82>, используемых для вычисления значения CRC. На практике наиболее распространены 8-ми, 16-ти и 32-х битовые слова, что обусловлено особенностью архитектуры <https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0> современной вычислительной техники.

Ещё одним параметром является начальное (стартовое) значение слова. Указанные параметры полностью определяют «традиционный» алгоритм вычисления CRC. Существуют также модификации алгоритма, например, использующие обратный порядок <https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2> обработки битов.

6.      Описание процедуры алгоритма вычисления CRC

Из файла берётся первое слово - это может быть битовый (CRC-1), байтовый (CRC-8) или любой другой элемент. Если старший бит в слове «1», то слово сдвигается влево на один разряд с последующим выполнением операции XOR <https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%8E%D1%89%D0%B5%D0%B5_%D0%B8%D0%BB%D0%B8>. Соответственно, если старший бит в слове «0», то после сдвига <https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3> операция XOR не выполняется. После сдвига теряется старый старший бит, а младший бит освобождается - его значение устанавливается равным нулю. На место младшего бита загружается очередной бит из файла, и операция повторяется до тех пор, пока не загрузится последний бит файла. После прохождения всего файла, в слове остается остаток, который и является контрольной суммой.

7.      Стандартизованные полиномы

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

Этот парадокс касается и выбора многочлена - генератора: При этом многие широко используемые стандартизованные полиномы не являются наиболее эффективными из всех возможных.

Самый популярный и рекомендуемый IEEE <https://ru.wikipedia.org/wiki/IEEE> полином для CRC-32 используется в Ethernet <https://ru.wikipedia.org/wiki/Ethernet>, FDDI <https://ru.wikipedia.org/wiki/FDDI>, а также этот многочлен является генератором кода Хемминга <https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A5%D0%B5%D0%BC%D0%BC%D0%B8%D0%BD%D0%B3%D0%B0>. Использование другого полинома CRC-32C позволяет достичь такой же производительности при длине исходного сообщения от 58 бит до 131 кбит, а в некоторых диапазонах длины входного сообщения может быть даже выше - поэтому в наши дни он тоже пользуется популярностью.

К примеру, стандарт ITU-T G.hn использует CRC-32C с целью обнаружения ошибок в полезной нагрузке. В таблице 2 перечислены наиболее часто используемые полиномы - генераторы CRC. На практике вычисление CRC может включать пре- и пост-инверсию, а также обратный порядок обработки битов. В некоторых реализациях <https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE> CRC с целью усложнения анализа кода используют некоторые ненулевые начальные значения регистров.

Таблица 2. Стандартизованные полиномы.

Название

Полином

Представления: нормальное / реверсированное / реверсированное от обратного

CRC-1

 (используется в аппаратном контроле ошибок; также известен как бит чётности <https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82_%D1%87%D1%91%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8>)0x1 / 0x1 / 0x1


CRC-4-ITU

 (ITU <https://ru.wikipedia.org/wiki/ITU> G.704)0x3 / 0xC / 0x9


CRC-5-EPC


CRC-5-ITU

 (ITU <https://ru.wikipedia.org/wiki/ITU> G.704)0x15 / 0x15 / 0x1A


CRC-5-USB

 (USB <https://ru.wikipedia.org/wiki/USB> token packets)0x05 / 0x14 / 0x12


CRC-6-ITU

 (ITU <https://ru.wikipedia.org/wiki/ITU> G.704)0x03 / 0x30 / 0x21


CRC-7

 (системы телекоммуникации, ITU <https://ru.wikipedia.org/wiki/ITU>-T G.707, ITU <https://ru.wikipedia.org/wiki/ITU>-T G.832 MMC <https://ru.wikipedia.org/wiki/MultiMediaCard>, SD <https://ru.wikipedia.org/wiki/Secure_Digital>)0x09 / 0x48 / 0x44


CRC-8-CCITT <https://ru.wikipedia.org/wiki/CCITT> (ATM <https://ru.wikipedia.org/wiki/Asynchronous_Transfer_Mode> HEC <https://ru.wikipedia.org/w/index.php?title=Header_Error_Correction&action=edit&redlink=1>), ISDN <https://ru.wikipedia.org/wiki/ISDN> Header Error Control <https://ru.wikipedia.org/w/index.php?title=HEC&action=edit&redlink=1> and Cell Delineation <https://ru.wikipedia.org/w/index.php?title=Cell_Delineation&action=edit&redlink=1> ITU-T I.432.1 (02/99) <#"872077.files/image009.gif"> (1-Wire <https://ru.wikipedia.org/wiki/1-Wire> bus <https://ru.wikipedia.org/w/index.php?title=Bus_(computing)&action=edit&redlink=1>)0x31 / 0x8C / 0x98



CRC-8

 (ETSI <https://ru.wikipedia.org/wiki/ETSI> EN 302 307, 5.1.4)0xD5 / 0xAB / 0xEA[1] <https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4>


CRC-8-SAE J1850

0x1D / 0xB8 / 0x8E

CRC-10

0x233 / 0x331 / 0x319

CRC-11

 (FlexRay <https://ru.wikipedia.org/wiki/FlexRay>)0x385 / 0x50E / 0x5C2


CRC-12

 (системы телекоммуникации)

0x80F / 0xF01 / 0xC07

CRC-15-CAN <https://ru.wikipedia.org/wiki/Controller_Area_Network>0x4599 / 0x4CD1 / 0x62CC



CRC-16-IBM <https://ru.wikipedia.org/wiki/IBM> (Bisync <https://ru.wikipedia.org/w/index.php?title=Binary_Synchronous_Communications&action=edit&redlink=1>, Modbus <https://ru.wikipedia.org/wiki/Modbus>, USB <https://ru.wikipedia.org/wiki/USB>, ANSI <https://ru.wikipedia.org/wiki/ANSI> X3.28[20] <https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4>, многие другие; также известен как CRC-16 и CRC-16-ANSI)0x8005 / 0xA001 / 0xC002



CRC-16-CCITT

 (X.25 <https://ru.wikipedia.org/wiki/X.25>, HDLC <https://ru.wikipedia.org/wiki/HDLC>, XMODEM <https://ru.wikipedia.org/w/index.php?title=XMODEM&action=edit&redlink=1>, Bluetooth <https://ru.wikipedia.org/wiki/Bluetooth>, SD <https://ru.wikipedia.org/wiki/Secure_Digital> и др.)0x1021 / 0x8408 / 0x8810[1] <https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4>


CRC-16-T10 <https://ru.wikipedia.org/w/index.php?title=International_Committee_for_Information_Technology_Standards&action=edit&redlink=1>-DIF <https://ru.wikipedia.org/w/index.php?title=Data_Integrity_Field&action=edit&redlink=1> (SCSI <https://ru.wikipedia.org/wiki/SCSI> DIF)0x8BB7 0xEDD1 / 0xC5DB



CRC-16-DNP <https://ru.wikipedia.org/wiki/DNP3> (DNP, IEC 870 <https://ru.wikipedia.org/wiki/IEC_60870-5>, M-Bus <https://ru.wikipedia.org/wiki/Meter-Bus>)0x3D65 / 0xA6BC / 0x9EB2



CRC-16-Fletcher

Не CRC; см. ’Fletchers checksum <https://ru.wikipedia.org/wiki/Fletcher%27s_checksum>Используется в Adler-32 <https://ru.wikipedia.org/wiki/Adler-32> A & B CRC


CRC-24

 (FlexRay <https://ru.wikipedia.org/wiki/FlexRay>)0x5D6DCB / 0xD3B6BA / 0xAEB6E5


CRC-24-Radix-64 <https://ru.wikipedia.org/w/index.php?title=Radix-64&action=edit&redlink=1> (OpenPGP <https://ru.wikipedia.org/wiki/Pretty_Good_Privacy>)0x864CFB / 0xDF3261 / 0xC3267D



CRC-30

 (CDMA <https://ru.wikipedia.org/wiki/CDMA>)0x2030B9C7 / 0x38E74301 / 0x30185CE3


CRC-32-Adler

Не CRC; Adler-32 <https://ru.wikipedia.org/wiki/Adler-32>Adler-32 <https://ru.wikipedia.org/wiki/Adler-32>


CRC-32-IEEE 802.3 <https://ru.wikipedia.org/wiki/IEEE_802.3> (V.42 <https://ru.wikipedia.org/wiki/V.42>, MPEG-2 <https://ru.wikipedia.org/wiki/MPEG-2>, PNG <https://ru.wikipedia.org/wiki/Portable_Network_Graphics>[22] <https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4>, POSIX <https://ru.wikipedia.org/wiki/POSIX> cksum <https://ru.wikipedia.org/wiki/Cksum>)0x04C11DB7 / 0xEDB88320 / 0x82608EDB



CRC-32C (Castagnoli)

 (iSCSI <https://ru.wikipedia.org/wiki/ISCSI>, G.hn <https://ru.wikipedia.org/w/index.php?title=G.hn&action=edit&redlink=1> payload)0x1EDC6F41 / 0x82F63B78 / 0x8F6E37A0


CRC-32K (Koopman)

0x741B8CD7 / 0xEB31D82E / 0xBA0DC66B

CRC-32Q

 (aviation; AIXM <https://ru.wikipedia.org/wiki/AIXM>)0x814141AB / 0xD5828281 / 0xC0A0A0D5


CRC-64-ISO

 (-HDLC  ISO 3309 <https://ru.wikipedia.org/wiki/High-Level_Data_Link_Control>)0x000000000000001B / 0xD800000000000000 / 0x800000000000000D


CRC-64-ECMA <https://ru.wikipedia.org/wiki/Ecma_International> 0x42F0E1EBA9EA3693 / 0xC96C5795D7870F42 / 0xA17870F5D4F51B49



8.      Аппаратная реализация CRC32

В качестве порождающего многочлена возьмем CRC-32-IEEE 802.3 <https://ru.wikipedia.org/wiki/IEEE_802.3>.

Синтез схемы вычислителя 32-х разрядной контрольной суммы в последовательном коде произведем по описанному выше алгоритму. Результат построения схемы представлен на рис.4.

Рис. 4. Аппаратная реализация CRC32.

Заключение

вычислитель аппаратный контрольный код

В ходе курсовой работы нами была разработана аппаратная реализация вычислителя 32-разрядной циклической контрольной суммы CRC, с приемом данных в последовательном коде. При проектировании устройства, в качестве порождающего использован стандартизованный полином CRC -32-IEEE 802.3 <https://ru.wikipedia.org/wiki/IEEE_802.3>.

Похожие работы на - Аппаратная реализация вычислителя 32-разрядной циклической контрольной суммы CRC

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!