Перейти к содержанию
    

Производитель требует и приводит пример расчёта 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).

3.thumb.jpeg.41380e06dfcadc04f777b9330921409b.jpeg

Попытался это на 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В инете есть целый ряд готовых генераторов кода crc. Вот например https://www.easics.com/crctool/

Ваш полином crc16 x25

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, zombi said:

Попытался это на verilog записать, но что-то не фурычит оно.

подробности нефурычения будут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, zombi сказал:

Гляньте плиз где я накосячил?

Про регистр забыл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 minutes ago, andrew_b said:

Про регистр забыл?

ТС только код тела функции привел,  коде должно быть как-то так always_ff @(posedge clk) crc <= CRC16(data, crc). Поэтому регистр там есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно регистр CRC и начальная установка его есть.

Я просто хотел убедиться в правильности реализации самой функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, des00 said:

подробности нефурычения будут?

Подробность одна - внешнее устройство ( СF карта) после транзакции считает что CRC не верная и устанавливает бит ошибки.

Я не уверен ни в том что данные верно читаю ни в том что CRC правильно передаю карте (хотя судя по диаграмме все должно быть правильно).

Мне сейчас хотя бы быть уверенным что сам подсчёт CRC сделал верно.

Поскольку приходится решать уравнение со всеми неизвестными. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посимулировать наверное надо и свериться с онлайн калькуляторами crc16.

Может там какой порядок байт важен. Обратный/прямой

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, zombi said:

Мне сейчас хотя бы быть уверенным что сам подсчёт CRC сделал верно.

Поскольку приходится решать уравнение со всеми неизвестными. :biggrin:

ну вы сами на себе проверьте CRC. Заодно глянули бы процедуру сравнения, может быть у вас разная инициализация а проверка должна быть не на ноль, а на magic word. Так то по коду забито то правильно, но может не работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, new123 said:

В инете есть целый ряд готовых генераторов кода crc.

Да, я знаю о таких.

Даже однажды в проекте использовал, но помню долго выяснял необходимость инверсии шины вх и вых данных и тд. и тп.

А тут решил избежать всех этих танцев с бубном и реализовать именно так как в DS рекомендуют.

5 minutes ago, new123 said:

Может там какой порядок байт важен. Обратный/прямой

Все что есть это информация на моём скриношоте из DS. Ни о каком порядке байт там речи не идёт. Есть шина 16 бит и у нее есть мл. и ст.

8 minutes ago, des00 said:

Так то по коду забито то правильно

Вот, спасибо. Мне пока хотя бы в чем-то быть уверенным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 :biggrin:

Вот и думаю почему перевёрнуто? Надо мне переворачивать или нет?

 

-----------------

По поводу 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

Посоветуйте онлайн калькулятор где это можно проверить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, zombi said:

Посоветуйте онлайн калькулятор где это можно проверить

сейчас перебиру свое избранное гляну. У вас специфичное задание, UDMA crc с не самой частым значением инициализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 minutes ago, zombi said:

Получил при начальной инициализации 0x4ABA и следующих данных 0x0000 :

0xFA66 / 0xEE9A / 0x0FBE / 0x48DB

Пусть поправят меня лучше, но вроде я все правильно вбил в поля.

http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

image.thumb.png.f222148095b0954168d828e6d6785bd6.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, zombi said:

Получается что ошибка всё таки в моей функции?

может я не так вбил. Тот же полином, но вроде он.
И потом, быть может дело не в функции, а вокруг нее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...