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

Проблема при использовании мегафункции CRC Compiler v11.1

Здравствуйте!

Я генерирую ряд чисел, записываю их в 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 час. Даже то, что работало, если выкинуть проверку контрольной суммы.

 

Кто-нибудь сталкивался? Что с этим можно сделать, не покупая лицензию?)) Подскажите, пожалуйста!

 

 

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


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

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


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

Так, я поняла, что сразу после конфигурирования ПЛИС, пока она подключена кабелем, я нахожусь в режиме JTAG-отладки. Но если я отключу кабель, я выйду из этого режима, и мой design как раз этот час и проработает.

 

Но у меня отладочная плата DE0-Nano питается от этого кабеля! Если я хочу выйти из режима отладки, надо отключить кабель, но тогда и питание пропадет...

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


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

Но это то, что я поняла из этого документа.

 

На деле оказалось не так: я залила в ПЛИС time_limited.sof, и появилось сообщение с вопросом, когда прекратить действие OpenCore feature. До того, как жмешь "ок" - все работает, как полагается.

 

Но time_limited.sof удалось создать, используя только crc-генератор, так как лицензия от OpenCore Plus выдалась только ему, а crc-check'erу - нет. Странно, ведь и генератор, и чекер созданы с помощью одной и той же мегафункции...

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


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

ПМСМ для 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;

И к ней прикрутить простейшую обвязку.

 

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


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

Да, зря я , наверное, с самого начала поленилась написать вычисление crc... Спасибо всем, кто ответил!

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


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

Правда, не поняла я, почему в вышеприведенном коде 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;

 

Но это уже обсуждение из другой оперы =)

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


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

Правда, не поняла я, почему в вышеприведенном коде xor делается после сдвига? Я сделала наоборот: сдвиг после xor'a, и получилось вот так:

Потому, что так полагается crc вычислять. В частности, каждый бит data сразу же влияет на все биты аккумулятора. В вашем случае, помимо того, что это нестандартный crc, не выполнен последовательный перебор в цикле всех битов data.

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


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

Ммм, как раз на каждой итерации цикла вдвигается в аккумулятор по одному биту data.

А вообще, я подсмотрела этот алгоритм в хорошей книжке Росса Уильямса "Элементарное руководство по CRC-алгоритмам обнаружения ошибок"

CRC.pdf

Если вдруг интересно =)

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


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

Если вдруг интересно =)

 

Это конечно интересно.

Но сегодня свободно предлагают уже готовые решения в железе.

http://www.xilinx.com/support/documentatio...tes/xapp209.pdf

Достаточно прочитать про волшебное слово 32'hc704dd7b //// CRC magic number

Время - это наше все.

 

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


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

Ммм, как раз на каждой итерации цикла вдвигается в аккумулятор по одному биту data.

А вообще, я подсмотрела этот алгоритм в хорошей книжке Росса Уильямса "Элементарное руководство по CRC-алгоритмам обнаружения ошибок"

CRC.pdf

Если вдруг интересно =)

В книжке всё правильно написано. Но, там же написано, что данный алгоритм требует дополнения сообщения нулевым заголовком, а оно нам надо? И приводится способ этого избежать, которым все успешно пользуются, включая меня.

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


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

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

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

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

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

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

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

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

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

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