Мур 1 16 декабря, 2011 Опубликовано 16 декабря, 2011 · Жалоба Для полной картины выдаю тестбенч с модулем CRC16 Для такого полинома может кто поделится magic number (прогон 123456789)? CRC16_A001.VHD tbanch.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADA007 0 16 декабря, 2011 Опубликовано 16 декабря, 2011 · Жалоба Для полной картины выдаю тестбенч с модулем CRC16 Попробовал я посмотреть вашу функцию подсчета crc...параллельного подсчета... У меня получилось, что алгоритм подсчета у вас отличается от того алгоритма, для которого посчитана функция... т.е. для Modbus используют полином нормальный, а у вас в тесте - реверсированый. изучаем мат. часть. http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%...%BA%D0%BE%D0%B4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 декабря, 2011 Опубликовано 16 декабря, 2011 · Жалоба Огромное спасибо! вашу функцию ? Она не моя, а полученная в онлайн-генерации. На самом деле сомнения у меня по поводу тулза. Буду разбираться.... Никуда не денусь. (Полином А001?) Таблица кодов из сишного текста тут совсем не к месту. Вырвано из контекста... Решит проблему образец magic для прогона модели. К чему стремиться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
i-mir 0 16 декабря, 2011 Опубликовано 16 декабря, 2011 · Жалоба Друзья давайте не путать полиномы. Для случая таблицы (пост №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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 декабря, 2011 Опубликовано 16 декабря, 2011 · Жалоба Подсчет CRC имеет как минимум 5 степеней свободы, из-за чего собственно и путаница. Если есть сомнения в конкретных значениях - лучше сперва восстановить параметры CRC: 1. Полином 2. Инициация 3. Реверс до 4. Реверс после 5. XOR после а затем проверять вычисления своих процедур. Для проверки привожу пример калькулятора для 2-го слова таблицы из поста №15 О! это уже стоящее для magic code! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 6 сентября, 2014 Опубликовано 6 сентября, 2014 (изменено) · Жалоба Написал тестбенч для генератора 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! Изменено 6 сентября, 2014 пользователем farbius Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться