Перейти к содержанию
    

Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.

Заранее спасибо.

У меня на сайте есть старая статья о проекте МАС. Там есть пара слов о CRC.

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.

Заранее спасибо.

 

Посмотрите на сайте XILINXa. у них есть статейка про это.

Проверено,что там все правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CRC Tool я уже пробовал. Тоже не получается. Не сходится CRC - хоть тресни.

а как вы его считаете? и с чем сравниваете при проверке?

если взять из опенкорес проекта езернет то всё получится :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я брал вот этот в гигабит изернет:

http://www.easics.com/webtools/crctool

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

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

Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д.

Необходимо также учесть начальное состояние регистра перед обработкой пакета.

Успехов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я брал вот этот в гигабит изернет:

http://www.easics.com/webtools/crctool

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

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

Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д.

Необходимо также учесть начальное состояние регистра перед обработкой пакета.

Успехов!

а можно взять из опенкорес :biggrin:

    function[31:0]  NextCRC;
        input[7:0]      D;
        input[31:0]     C;
        reg[31:0]       NewCRC;
        begin
            NewCRC[0]=C[24]^C[30]^D[1]^D[7];
            NewCRC[1]=C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
            NewCRC[2]=C[26]^D[5]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
            NewCRC[3]=C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
            NewCRC[4]=C[28]^D[3]^C[27]^D[4]^C[26]^D[5]^C[24]^C[30]^D[1]^D[7];
            NewCRC[5]=C[29]^D[2]^C[28]^D[3]^C[27]^D[4]^C[25]^C[31]^D[0]^D[6]^C[24]^C[30]^D[1]^D[7];
            NewCRC[6]=C[30]^D[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
            NewCRC[7]=C[31]^D[0]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
            NewCRC[8]=C[0]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
            NewCRC[9]=C[1]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6];
            NewCRC[10]=C[2]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[24]^D[7];
            NewCRC[11]=C[3]^C[28]^D[3]^C[27]^D[4]^C[25]^D[6]^C[24]^D[7];
            NewCRC[12]=C[4]^C[29]^D[2]^C[28]^D[3]^C[26]^D[5]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
            NewCRC[13]=C[5]^C[30]^D[1]^C[29]^D[2]^C[27]^D[4]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
            NewCRC[14]=C[6]^C[31]^D[0]^C[30]^D[1]^C[28]^D[3]^C[27]^D[4]^C[26]^D[5];
            NewCRC[15]=C[7]^C[31]^D[0]^C[29]^D[2]^C[28]^D[3]^C[27]^D[4];
            NewCRC[16]=C[8]^C[29]^D[2]^C[28]^D[3]^C[24]^D[7];
            NewCRC[17]=C[9]^C[30]^D[1]^C[29]^D[2]^C[25]^D[6];
            NewCRC[18]=C[10]^C[31]^D[0]^C[30]^D[1]^C[26]^D[5];
            NewCRC[19]=C[11]^C[31]^D[0]^C[27]^D[4];
            NewCRC[20]=C[12]^C[28]^D[3];
            NewCRC[21]=C[13]^C[29]^D[2];
            NewCRC[22]=C[14]^C[24]^D[7];
            NewCRC[23]=C[15]^C[25]^D[6]^C[24]^C[30]^D[1]^D[7];
            NewCRC[24]=C[16]^C[26]^D[5]^C[25]^C[31]^D[0]^D[6];
            NewCRC[25]=C[17]^C[27]^D[4]^C[26]^D[5];
            NewCRC[26]=C[18]^C[28]^D[3]^C[27]^D[4]^C[24]^C[30]^D[1]^D[7];
            NewCRC[27]=C[19]^C[29]^D[2]^C[28]^D[3]^C[25]^C[31]^D[0]^D[6];
            NewCRC[28]=C[20]^C[30]^D[1]^C[29]^D[2]^C[26]^D[5];
            NewCRC[29]=C[21]^C[31]^D[0]^C[30]^D[1]^C[27]^D[4];
            NewCRC[30]=C[22]^C[31]^D[0]^C[28]^D[3];
            NewCRC[31]=C[23]^C[29]^D[2];
            NextCRC=NewCRC;
        end
    endfunction

она (функция) же для генерации црц и для проверки

при проверки сравниваете полученое значение с magic значением 32'hc704dd7b

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

А есть ли более "простые" алгоритмы вичисления CRC? Например, как в MODBUS, с помощью таблицы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

А есть ли более "простые" алгоритмы вичисления CRC? Например, как в MODBUS, с помощью таблицы...

критерий просто можно узнать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Критерий один - скорость :)

1)а погуглить?

2)табличный метод в fpga накладно использовать да и не нужно

3) если же нужнен табличный метод не для fpga см п.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1)а погуглить?

2)табличный метод в fpga накладно использовать да и не нужно

3) если же нужнен табличный метод не для fpga см п.1

 

1) Если бы чего нагуглил, не обращался бы за помощью, или, по крайней мере, сообщил об этом в этой ветке.

 

2) Про fpga моей речи вообще не было, с чего вы его приплели?

 

3) Если есть чего сказать по существу, а не просто потрепаться см п. первый (внимательно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Если бы чего нагуглил, не обращался бы за помощью, или, по крайней мере, сообщил об этом в этой ветке.

 

2) Про fpga моей речи вообще не было, с чего вы его приплели?

 

3) Если есть чего сказать по существу, а не просто потрепаться см п. первый (внимательно)

 

0)тяжёлый случай :a14:

1)специально и только для вас!

жмите сюда

2)читайте весь тред целиком

3)см п.0 и п.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0)тяжёлый случай :a14:

1)специально и только для вас!

жмите сюда

2)читайте весь тред целиком

3)см п.0 и п.1

да, действительно, тяжелый :) , сорри

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...