zombi 0 6 апреля, 2021 Опубликовано 6 апреля, 2021 · Жалоба Производитель требует и приводит пример расчёта CRC16 Quote The CRC generator polynomial is: G(X) = X16 + X12 + X5 + 1. Table 26 describes the equations for 16-bit parallel generation of the resulting polynomial (based on a word boundary). Попытался это на verilog записать, но что-то не фурычит оно. Гляньте плиз где я накосячил? function [15:0] CRC16; input [15:0] d, crc; reg [16:1] f; reg [15:0] c; begin f[1] = d[0] ^ crc[15]; f[2] = d[1] ^ crc[14]; f[3] = d[2] ^ crc[13]; f[4] = d[3] ^ crc[12]; f[5] = d[4] ^ crc[11] ^ f[1]; f[6] = d[5] ^ crc[10] ^ f[2]; f[7] = d[6] ^ crc[9] ^ f[3]; f[8] = d[7] ^ crc[8] ^ f[4]; f[9] = d[8] ^ crc[7] ^ f[5]; f[10] = d[9] ^ crc[6] ^ f[6]; f[11] = d[10] ^ crc[5] ^ f[7]; f[12] = d[11] ^ crc[4] ^ f[1] ^ f[8]; f[13] = d[12] ^ crc[3] ^ f[2] ^ f[9]; f[14] = d[13] ^ crc[2] ^ f[3] ^ f[10]; f[15] = d[14] ^ crc[1] ^ f[4] ^ f[11]; f[16] = d[15] ^ crc[0] ^ f[5] ^ f[12]; c[0] = f[16]; c[1] = f[15]; c[2] = f[14]; c[3] = f[13]; c[4] = f[12]; c[5] = f[11] ^ f[16]; c[6] = f[10] ^ f[15]; c[7] = f[9] ^ f[14]; c[8] = f[8] ^ f[13]; c[9] = f[7] ^ f[12]; c[10] = f[6] ^ f[11]; c[11] = f[5] ^ f[10]; c[12] = f[4] ^ f[9] ^ f[16]; c[13] = f[3] ^ f[8] ^ f[15]; c[14] = f[2] ^ f[7] ^ f[14]; c[15] = f[1] ^ f[6] ^ f[13]; CRC16 = c; end endfunction Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба В инете есть целый ряд готовых генераторов кода crc. Вот например https://www.easics.com/crctool/ Ваш полином crc16 x25 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 4 hours ago, zombi said: Попытался это на verilog записать, но что-то не фурычит оно. подробности нефурычения будут? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 6 часов назад, zombi сказал: Гляньте плиз где я накосячил? Про регистр забыл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 45 minutes ago, andrew_b said: Про регистр забыл? ТС только код тела функции привел, коде должно быть как-то так always_ff @(posedge clk) crc <= CRC16(data, crc). Поэтому регистр там есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба Конечно регистр CRC и начальная установка его есть. Я просто хотел убедиться в правильности реализации самой функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 4 hours ago, des00 said: подробности нефурычения будут? Подробность одна - внешнее устройство ( СF карта) после транзакции считает что CRC не верная и устанавливает бит ошибки. Я не уверен ни в том что данные верно читаю ни в том что CRC правильно передаю карте (хотя судя по диаграмме все должно быть правильно). Мне сейчас хотя бы быть уверенным что сам подсчёт CRC сделал верно. Поскольку приходится решать уравнение со всеми неизвестными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 (изменено) · Жалоба Посимулировать наверное надо и свериться с онлайн калькуляторами crc16. Может там какой порядок байт важен. Обратный/прямой Изменено 7 апреля, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 3 minutes ago, zombi said: Мне сейчас хотя бы быть уверенным что сам подсчёт CRC сделал верно. Поскольку приходится решать уравнение со всеми неизвестными. ну вы сами на себе проверьте CRC. Заодно глянули бы процедуру сравнения, может быть у вас разная инициализация а проверка должна быть не на ноль, а на magic word. Так то по коду забито то правильно, но может не работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 5 hours ago, new123 said: В инете есть целый ряд готовых генераторов кода crc. Да, я знаю о таких. Даже однажды в проекте использовал, но помню долго выяснял необходимость инверсии шины вх и вых данных и тд. и тп. А тут решил избежать всех этих танцев с бубном и реализовать именно так как в DS рекомендуют. 5 minutes ago, new123 said: Может там какой порядок байт важен. Обратный/прямой Все что есть это информация на моём скриношоте из DS. Ни о каком порядке байт там речи не идёт. Есть шина 16 бит и у нее есть мл. и ст. 8 minutes ago, des00 said: Так то по коду забито то правильно Вот, спасибо. Мне пока хотя бы в чем-то быть уверенным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 18 minutes ago, des00 said: может быть у вас разная инициализация а проверка должна быть не на ноль, а на magic word. Из DS : The CRC function in the host and the device shall be initialized with a seed of 4ABAh at the beginning of an Ultra DMA burst before any data is transferred. Так и инициализирую if (INIT) CRC <= 16'H4ABA; А в RTL наблюдаю на входе мультиплексора перед регистром CRC 16'h5D52 Вот и думаю почему перевёрнуто? Надо мне переворачивать или нет? ----------------- По поводу magic word. Вот что в DS: The device shall then compare the CRC data from the host with the calculated value in its own CRC calculation function. If the two values do not match, the device shall save the error and report it at the end of the command. Вроде как нужно просто полное совпадение. 28 minutes ago, new123 said: Посимулировать наверное надо и свериться с онлайн калькуляторами crc16. Конечно просимулировал. Получил при начальной инициализации 0x4ABA и следующих данных 0x0000 : 0xFA66 / 0xEE9A / 0x0FBE / 0x48DB Посоветуйте онлайн калькулятор где это можно проверить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 17 minutes ago, zombi said: Посоветуйте онлайн калькулятор где это можно проверить сейчас перебиру свое избранное гляну. У вас специфичное задание, UDMA crc с не самой частым значением инициализации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 36 minutes ago, zombi said: Получил при начальной инициализации 0x4ABA и следующих данных 0x0000 : 0xFA66 / 0xEE9A / 0x0FBE / 0x48DB Пусть поправят меня лучше, но вроде я все правильно вбил в поля. http://www.sunshine2k.de/coding/javascript/crc/crc_js.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба Получается что ошибка всё таки в моей функции? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 9 minutes ago, zombi said: Получается что ошибка всё таки в моей функции? может я не так вбил. Тот же полином, но вроде он. И потом, быть может дело не в функции, а вокруг нее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться