нужна помощь, PLS

A

aeneas81

Guest
Уважаемые,
Я написал следующую процедуру для вычисления CRC-5 из 11 бит данных для USB цели.Она принимает один данных в такт и магазины по сигналу, а затем в 12 такт будет выполнять расчет.Однако, по неизвестной причине, Цюй (AT) rtus II держать синтезированных с меня регистры, и я не могу получить правильный вывод.
Кстати, я читал из книги, что переменные, не выдерживает это значение как сигналы, но я видел коды с переменными, которые могут проводить свои часы стоимостью свыше края как сигнала делает, почему?
Спасибо за вашу помощь и советы.КПР-5 код, который я сейчас работаю:СИГНАЛ stuffed_dataSig: std_logic_vector (10 DOWNTO 0);

Процесс (CLK, RST, DIN)
Переменная stuffed_data: std_logic_vector (10 DOWNTO 0);
Переменная crc5_state: std_logic_vector (4 DOWNTO 0);

начинать

если RST = '1 ', то

количество <= 0;

out_crc5 <= "11111";

stuffed_dataSig <= "00000000000";

ELSIF clk'EVENT И CLK = '1 'THEN

Если количество <11, то
- Получить исходные данные
stuffed_dataSig (кол-во) <= DIN;
кол-во <= кол-1;

- Чтобы убедиться, что данные хранятся в настоящее время
testout <= stuffed_dataSig;

ELSIF Count = 11, то - вычислить CRC
stuffed_data: = stuffed_dataSig;
crc5_state: = "11111";

я в 0 до 10 петля

crc5_state (0): = stuffed_data (I) XOR crc5_state (4);
crc5_state (1): = crc5_state (0);
crc5_state (2): = crc5_state (1) XOR crc5_state (4) XOR stuffed_data (I);
crc5_state (3): = crc5_state (2);
crc5_state (4): = crc5_state (3);

конец цикла;

out_crc5 <= НЕ crc5_state;

End If;

End If;

конце процесса;

 
Привет,

Проблема ваш алгоритм, thatyou попытаться вычислить CRC в цикле в конце кол процесса.
Ваш цикла не должно быть сделано с инструкцией по (как в программное обеспечение), но в борьбе цикла.Поэтому в каждом такте, стоимость CRC5 разработано.В конце счетчика (= 11) Ваше значение готова и может быть выходом для использования.

Не используйте переменную в synthesisable VHDL: Ваше функциональное моделирование (с ModelSim для Ех) будет представлять свой дизайн, а не оценка З кодекс ...

попробуйте код, который выглядит следующим образом:
СИГНАЛ stuffed_dataSig: std_logic_vector (10 DOWNTO 0);
СИГНАЛ crc5_state: std_logic_vector (4 DOWNTO 0);

Процесс (CLK, RST, DIN)

начинать

если RST = '1 ', то

количество <= 0;
crc5_state <= "11111";
out_crc5 <= "11111";

ELSIF clk'EVENT И CLK = '1 'THEN

Если количество <11, то
кол-во <= кол-1;

crc5_state ( 0) <= DIN XOR crc5_state (4);
crc5_state (1) <= crc5_state (0);
crc5_state (2) <= crc5_state (1) XOR crc5_state (4) XOR DIN;
crc5_state (3) <= crc5_state (2);
crc5_state (4) <= crc5_state (3);

ELSIF Count = 11, то - вычислить CRC

out_crc5 <= НЕ crc5_state;

End If;

End If;

конце процесса;

PS: Я не пробовал этот код ...

Надеюсь, что это поможет вам

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
 
привет,
Спасибо за ответ и код, поставляемый.
Тем не менее, у меня есть вопрос в виду, что если процесс его в борьбе основаны, не так ли занимает десятилетия?Я действительно надеюсь, что это может быть сделано как можно скорее Coz иногда гораздо больше, чем 11 бита, будут обработаны, иногда до нескольких КБ ...и моя программа не могла позволить себе, что столько времени, сколько существует другого процесса, который будет запускаться после Конвенция была сгенерирована.Спасибо за ценные советы

Rgds

 
Привет,

В самом деле, calculatuion КПР будут исполнены в потоке данных.На каждом такте, у вас есть новые данные, и на каждом такте, эти данные учитываются при расчете КПР.
В Вашем предыдущем коде, у тебя еще есть счетчик, который имеет значение лишь в течение 11 тактов, а затем в 1 такт, попытайтесь вычислить CRC (с плохим кодирование).

Он должен принимать такие же время ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Очень веселый" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top