|
CRC пакета Ethernet, подскажите алгоритм |
|
|
|
Jun 13 2007, 04:23
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета. Заранее спасибо.
|
|
|
|
|
Jun 13 2007, 05:48
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 1-08-05
Пользователь №: 7 242

|
CRC Tool я уже пробовал. Тоже не получается. Не сходится CRC - хоть тресни.
|
|
|
|
|
Jun 13 2007, 06:07
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

|
Цитата(eastwind @ Jun 13 2007, 08:23)  Подскажите алгоритм подсчета CRC32 для пакета Ethernet? Перепробовал массу вариантов и полиномов. Но все время не совпадает с CRC реального пакета. Заранее спасибо. Посмотрите на сайте XILINXa. у них есть статейка про это. Проверено,что там все правильно.
|
|
|
|
|
Jun 13 2007, 07:38
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Я брал вот этот в гигабит изернет: http://www.easics.com/webtools/crctoolУчтите, что это всего лишь функция, вычисляющая требуемый полином. Потом с ним нужно проделать различные операции, прежде чем поместить в поле CRC пакета. Какие операции проделать, нужно читать прямо в стандарте IEEE802.3, там этому посвящено всего полстраницы, но этого вполне достаточно. Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д. Необходимо также учесть начальное состояние регистра перед обработкой пакета. Успехов!
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Jun 13 2007, 09:18
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(Krys @ Jun 13 2007, 11:38)  Я брал вот этот в гигабит изернет: http://www.easics.com/webtools/crctoolУчтите, что это всего лишь функция, вычисляющая требуемый полином. Потом с ним нужно проделать различные операции, прежде чем поместить в поле CRC пакета. Какие операции проделать, нужно читать прямо в стандарте IEEE802.3, там этому посвящено всего полстраницы, но этого вполне достаточно. Когда я пробовал, тоже поперепробывал вычислители функций с различных сайтов. Как оказалось, все они вполне пригодны. Нужно перепробовать различные комбинации сигналов: инверсия бит на определённой стадии или подмена направления возрастания значимости бит (передача от младшего к старшему или наоборот). Это нужно пытаться делать в разных точках схемы. На регистре, на входе, на выходе и т.д. Необходимо также учесть начальное состояние регистра перед обработкой пакета. Успехов! а можно взять из опенкорес Код 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
--------------------
Cogito ergo sum
|
|
|
|
|
Jun 22 2007, 06:02
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(prottoss @ Jun 21 2007, 18:38)  Критерий один - скорость  1)а погуглить? 2)табличный метод в fpga накладно использовать да и не нужно 3) если же нужнен табличный метод не для fpga см п.1
--------------------
Cogito ergo sum
|
|
|
|
|
Jun 23 2007, 08:23
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(prottoss @ Jun 22 2007, 16:12)  1) Если бы чего нагуглил, не обращался бы за помощью, или, по крайней мере, сообщил об этом в этой ветке.
2) Про fpga моей речи вообще не было, с чего вы его приплели?
3) Если есть чего сказать по существу, а не просто потрепаться см п. первый (внимательно) 0)тяжёлый случай 1)специально и только для вас! жмите сюда2)читайте весь тред целиком 3)см п.0 и п.1
--------------------
Cogito ergo sum
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|