Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CRC пакета Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
eastwind
Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.
Заранее спасибо.
niksal
Попробуйте это:

http://www.easics.com/webtools/crctool
iosifk
Цитата(eastwind @ Jun 13 2007, 08:23) *
Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.
Заранее спасибо.

У меня на сайте есть старая статья о проекте МАС. Там есть пара слов о CRC.
Удачи!
eastwind
CRC Tool я уже пробовал. Тоже не получается. Не сходится CRC - хоть тресни.
Кнкн
Цитата(eastwind @ Jun 13 2007, 08:23) *
Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета.
Заранее спасибо.


Посмотрите на сайте XILINXa. у них есть статейка про это.
Проверено,что там все правильно.
Postoroniy_V
Цитата(eastwind @ Jun 13 2007, 09:48) *
CRC Tool я уже пробовал. Тоже не получается. Не сходится CRC - хоть тресни.

а как вы его считаете? и с чем сравниваете при проверке?
если взять из опенкорес проекта езернет то всё получится rolleyes.gif
Krys
Я брал вот этот в гигабит изернет:
http://www.easics.com/webtools/crctool
Учтите, что это всего лишь функция, вычисляющая требуемый полином. Потом с ним нужно проделать различные операции, прежде чем поместить в поле CRC пакета.
Какие операции проделать, нужно читать прямо в стандарте IEEE802.3, там этому посвящено всего полстраницы, но этого вполне достаточно.
Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д.
Необходимо также учесть начальное состояние регистра перед обработкой пакета.
Успехов!
Postoroniy_V
Цитата(Krys @ Jun 13 2007, 11:38) *
Я брал вот этот в гигабит изернет:
http://www.easics.com/webtools/crctool
Учтите, что это всего лишь функция, вычисляющая требуемый полином. Потом с ним нужно проделать различные операции, прежде чем поместить в поле CRC пакета.
Какие операции проделать, нужно читать прямо в стандарте IEEE802.3, там этому посвящено всего полстраницы, но этого вполне достаточно.
Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д.
Необходимо также учесть начальное состояние регистра перед обработкой пакета.
Успехов!

а можно взять из опенкорес biggrin.gif
Код
    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
prottoss
Всем привет!
А есть ли более "простые" алгоритмы вичисления CRC? Например, как в MODBUS, с помощью таблицы...
Postoroniy_V
Цитата(prottoss @ Jun 16 2007, 16:06) *
Всем привет!
А есть ли более "простые" алгоритмы вичисления CRC? Например, как в MODBUS, с помощью таблицы...

критерий просто можно узнать?
prottoss
Цитата(Postoroniy_V @ Jun 21 2007, 22:35) *
критерий просто можно узнать?
Критерий один - скорость smile.gif
Postoroniy_V
Цитата(prottoss @ Jun 21 2007, 18:38) *
Критерий один - скорость smile.gif

1)а погуглить?
2)табличный метод в fpga накладно использовать да и не нужно
3) если же нужнен табличный метод не для fpga см п.1
prottoss
Цитата(Postoroniy_V @ Jun 22 2007, 14:02) *
1)а погуглить?
2)табличный метод в fpga накладно использовать да и не нужно
3) если же нужнен табличный метод не для fpga см п.1


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

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

3) Если есть чего сказать по существу, а не просто потрепаться см п. первый (внимательно)
Postoroniy_V
Цитата(prottoss @ Jun 22 2007, 16:12) *
1) Если бы чего нагуглил, не обращался бы за помощью, или, по крайней мере, сообщил об этом в этой ветке.

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

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


0)тяжёлый случай a14.gif
1)специально и только для вас!
жмите сюда
2)читайте весь тред целиком
3)см п.0 и п.1
prottoss
Цитата(Postoroniy_V @ Jun 23 2007, 16:23) *
0)тяжёлый случай a14.gif
1)специально и только для вас!
жмите сюда
2)читайте весь тред целиком
3)см п.0 и п.1
да, действительно, тяжелый smile.gif , сорри
Postoroniy_V
Цитата(prottoss @ Jun 23 2007, 14:29) *
да, действительно, тяжелый smile.gif , сорри

есть ещё 1 способ wink.gif
поиск исходников
prottoss
Цитата(Postoroniy_V @ Jun 23 2007, 19:43) *
есть ещё 1 способ wink.gif
поиск исходников
ну вот видите smile.gif , есть все же, чему научить людей, я и не занал что так гуглить можно beer.gif
novartis
Возник вопрос по crc32 для Ethernet.

У меня шина данных 64 бит.
Сгенерил с сайта http://www.easics.be/services/freesics/crctool.html функцию для 64 разрядных слов.
Долго с ним мучался, ничего не получалось.
Для тестов использовал сохраненный ранее ethernet пакет с crc внутри. И эта crc приходится на старшие 32 бита в последнем слове.
Я пробовал и нули вместо crc подставлять и FFFFFFFF, но без успеха.

Потом сгенерил еще одну функцию для 32 разрядных слов.
Все слова пакета засовываю в вариант для 64 разрядных слов, а на последнем такте половину слова засунул в вариант для 32 разрядных слов.
И crc посчиталось то какое и было в пакете.

Если таким способом реализовывать, то это придется иметь варианты для 8, 16, 24, 32, 40, 48, 56, 64 разрядных слов, и на последнем такте анализировать куда приходится crc пакета.

Есть ли возможность использовать только вариант для 64 разрядных слов?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.