budda_cognac 0 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Здравствуйте! Я генерирую ряд чисел, записываю их в SDR SDRAM (самописный мастер управляет альтеровским контроллером), в ходе генерации постепенно вычисляю контрольную сумму (crc-генератор создан при помощи мегафункции CRC Compiler v11.1), дозаписываю её в SDRAM. Когда все вычислено-записано, начинаю считывать из SDRAM эти же числа + контрольную сумму. Корректность проверяет crc-check'er, созданный той же мегафункцией. Когда я пытаюсь запрограммировать ПЛИС, появляется сообщение о том, что проект содержит мегафункции, использующие OpenCore Plus, и время их работы в железе ограничено (в warning'ах написано 1 час). Часа мне вполне достаточно. Warning (265069): Megafunction that supports OpenCore Plus feature will stop functioning in 1 hour after device is programmed Также в warning'ах написано, что вообще нельзя создать файлы для программирования: Warning (115003): Can't generate programming files for your current project because you do not have a valid license for the following IP core or cores. В итоге, после конфигурации ПЛИС я вижу, что не работает вообще ничего. Даже 1 час. Даже то, что работало, если выкинуть проверку контрольной суммы. Кто-нибудь сталкивался? Что с этим можно сделать, не покупая лицензию?)) Подскажите, пожалуйста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Вот это : AN 320: OpenCore Plus Evaluation of Megafunctions читали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
budda_cognac 0 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Так, я поняла, что сразу после конфигурирования ПЛИС, пока она подключена кабелем, я нахожусь в режиме JTAG-отладки. Но если я отключу кабель, я выйду из этого режима, и мой design как раз этот час и проработает. Но у меня отладочная плата DE0-Nano питается от этого кабеля! Если я хочу выйти из режима отладки, надо отключить кабель, но тогда и питание пропадет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
budda_cognac 0 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба Но это то, что я поняла из этого документа. На деле оказалось не так: я залила в ПЛИС time_limited.sof, и появилось сообщение с вопросом, когда прекратить действие OpenCore feature. До того, как жмешь "ок" - все работает, как полагается. Но time_limited.sof удалось создать, используя только crc-генератор, так как лицензия от OpenCore Plus выдалась только ему, а crc-check'erу - нет. Странно, ведь и генератор, и чекер созданы с помощью одной и той же мегафункции... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 11 сентября, 2012 Опубликовано 11 сентября, 2012 · Жалоба ПМСМ для CRC вообще не нужен мегавизард, он вычисляется элементарной функцией: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; package crc is function crc_next_rev(crc_poly,crc,data:std_logic_vector)return std_logic_vector; constant crc32_poly_rev:std_logic_vector(31 downto 0) := X"04C11DB7"; end crc; package body crc is function crc_next_rev(crc_poly, crc, data:std_logic_vector)return std_logic_vector is variable i:integer; variable a,crc_a:std_logic_vector(crc'range); begin crc_a := crc; for i in data'reverse_range loop if (crc_a(crc_a'high) xor data(i)) = '1' then a := crc_poly; else a := (others=>'0'); end if; crc_a := std_logic_vector(shl(unsigned(crc_a), "1")) xor a; end loop; return crc_a; end function; end crc; И к ней прикрутить простейшую обвязку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
budda_cognac 0 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба Да, зря я , наверное, с самого начала поленилась написать вычисление crc... Спасибо всем, кто ответил! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
budda_cognac 0 12 сентября, 2012 Опубликовано 12 сентября, 2012 · Жалоба Правда, не поняла я, почему в вышеприведенном коде xor делается после сдвига? Я сделала наоборот: сдвиг после xor'a, и получилось вот так: function check_sum(poly, initial_value, data:std_logic_vector)return std_logic_vector is variable i:integer; variable a, crc:std_logic_vector(initial_value'range); begin crc := initial_value; for i in data'reverse_range loop if crc(crc'high) = '1' then crc := crc xor poly; end if; crc := std_logic_vector(shl(unsigned(crc), "1")) + data (data'high - i); end loop; return crc; end function; Но это уже обсуждение из другой оперы =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 13 сентября, 2012 Опубликовано 13 сентября, 2012 · Жалоба Правда, не поняла я, почему в вышеприведенном коде xor делается после сдвига? Я сделала наоборот: сдвиг после xor'a, и получилось вот так: Потому, что так полагается crc вычислять. В частности, каждый бит data сразу же влияет на все биты аккумулятора. В вашем случае, помимо того, что это нестандартный crc, не выполнен последовательный перебор в цикле всех битов data. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
budda_cognac 0 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба Ммм, как раз на каждой итерации цикла вдвигается в аккумулятор по одному биту data. А вообще, я подсмотрела этот алгоритм в хорошей книжке Росса Уильямса "Элементарное руководство по CRC-алгоритмам обнаружения ошибок" CRC.pdf Если вдруг интересно =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба Если вдруг интересно =) Это конечно интересно. Но сегодня свободно предлагают уже готовые решения в железе. http://www.xilinx.com/support/documentatio...tes/xapp209.pdf Достаточно прочитать про волшебное слово 32'hc704dd7b //// CRC magic number Время - это наше все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба Ммм, как раз на каждой итерации цикла вдвигается в аккумулятор по одному биту data. А вообще, я подсмотрела этот алгоритм в хорошей книжке Росса Уильямса "Элементарное руководство по CRC-алгоритмам обнаружения ошибок" CRC.pdf Если вдруг интересно =) В книжке всё правильно написано. Но, там же написано, что данный алгоритм требует дополнения сообщения нулевым заголовком, а оно нам надо? И приводится способ этого избежать, которым все успешно пользуются, включая меня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться