Jump to content

    
Sign in to follow this  
OutputLogic

Онлайновый tool для генерации CRC,Scrambler,LFSR Counter на Verilog/VHDL

Recommended Posts

Для полной картины выдаю тестбенч с модулем CRC16

 

Для такого полинома может кто поделится magic number (прогон 123456789)?

CRC16_A001.VHD

tbanch.vhd

Share this post


Link to post
Share on other sites
Для полной картины выдаю тестбенч с модулем CRC16

 

Попробовал я посмотреть вашу функцию подсчета crc...параллельного подсчета...

BgXng4O7.jpg

У меня получилось, что алгоритм подсчета у вас отличается от того алгоритма, для которого посчитана функция... т.е. для Modbus используют полином нормальный, а у вас в тесте - реверсированый.

 

изучаем мат. часть. http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%...%BA%D0%BE%D0%B4

Share this post


Link to post
Share on other sites

Огромное спасибо!

вашу функцию ? Она не моя, а полученная в онлайн-генерации.

На самом деле сомнения у меня по поводу тулза. Буду разбираться.... Никуда не денусь. (Полином А001?)

 

Таблица кодов из сишного текста тут совсем не к месту. Вырвано из контекста... Решит проблему образец magic для прогона модели. К чему стремиться?

Share this post


Link to post
Share on other sites

Друзья давайте не путать полиномы.

 

Для случая таблицы (пост №15)

- CRC poly : $8005 CRC init: $0000 reverse data before =1 reverse data after =1 Xorout =0

 

Для случая тестбенч (пост №17)

- CRC poly : $A001 CRC init: $0000 reverse data before =0 reverse data after =0 Xorout =0

 

Подсчет CRC имеет как минимум 5 степеней свободы, из-за чего собственно и путаница.

Если есть сомнения в конкретных значениях - лучше сперва восстановить параметры CRC:

1. Полином

2. Инициация

3. Реверс до

4. Реверс после

5. XOR после

а затем проверять вычисления своих процедур.

Для проверки привожу пример калькулятора для 2-го слова таблицы из поста №15

post-57986-1324045261_thumb.png

Share this post


Link to post
Share on other sites
Подсчет CRC имеет как минимум 5 степеней свободы, из-за чего собственно и путаница.

Если есть сомнения в конкретных значениях - лучше сперва восстановить параметры CRC:

1. Полином

2. Инициация

3. Реверс до

4. Реверс после

5. XOR после

а затем проверять вычисления своих процедур.

Для проверки привожу пример калькулятора для 2-го слова таблицы из поста №15

 

О! это уже стоящее для magic code!

Share this post


Link to post
Share on other sites

Написал тестбенч для генератора crc32 (VHDL) с сайта. Однако считает неправильно. Все возможные манипуляции с порядком следования\инвертированием входных байтов, содержимым регистра lfsr_c ситуацию не исправили. Входной поток -- кадр Ethernet с рассчитанной FCS взял отсюда:

http://www.edaboard.com/thread120700.html

 

Проверяю регистр lfsr_c после прихода каждого байта. Например если для x"00" в регистре x"4e08bfb4", что после инвертирования и реверса совпадает с результатом полученным онлайн калькулятором 0xD202EF8D

http://www.lammertbies.nl/comm/info/crc-calculation.html

 

То после прихода второго байта x"0a", текущая контрольная сумма слова x"000a", с результатом онлайн калькулятора расходится: x"00b7647d" а должно быть x"7820сf7a".

 

Есть рабочий модуль на verilog. Но переделывать его для vhdl желание нет, к тому же хочеться убедиться в работоспособности модуля с сайта OutputLogic.Com.

 

Ошибка найдена! Некорректно считывал данные с текстового файла в тестбенче. Очередной раз убедился насколько проще моделировать на verilog!

Edited by farbius

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this