hulp nodig met dit, pls

A

aeneas81

Guest
Dear all,
Ik heb geschreven het volgende proces om de CRC-5 van een 11 bit data voor usb doel te berekenen.duurt een gegevens op een klok cyclus en winkels tot een signaal, dan op de 12 klokcyclus uit te voeren zal de berekening.echter om een onbekende reden, qu (at) rtus II houden gesynthetiseerd weg mijn registers, en ik kon niet de juiste uitgang.
btw, ik heb gelezen uit het boek dat variabelen niet in het bezit is de waarde als signalen doen, maar ik codes met variabelen die de waarde ervan houden over klok rand net als signaal heeft, hoe komt het hebt gezien?
Bedankt voor je hulp en advies.de CRC-5 code I'm working on:SIGNAL stuffed_dataSig: std_logic_vector (10 Downto 0);

proces (CLK, RST, DIN)
variabele stuffed_data: std_logic_vector (10 Downto 0);
variabele crc5_state: std_logic_vector (4 Downto 0);

beginnen

indien rst = '1 'dan

count <= 0;

out_crc5 <= "11111";

stuffed_dataSig <= "00000000000";

Elsif clk'EVENT en CLK = '1 'THEN

Als count <11 dan
- Haal de input data
stuffed_dataSig (count) <= din;
count <= count 1;

- Om te controleren dat de gegevens worden opgeslagen
testout <= stuffed_dataSig;

Elsif count = 11 THEN - bereken crc
stuffed_data: = stuffed_dataSig;
crc5_state: = "11111";

for i in 0 tot 10 lus

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);

end loop;

out_crc5 <= NIET crc5_state;

end if;

end if;

einde proces

 
Hoi,

Het probleem van je algoritme, is DAT U proberen het CRC te berekenen in een lus aan het eind van de telling proces.
Uw lus mag niet worden gedaan met een voor instructie (zoals in software), maar in de teller lus.Dus bij elke klok cyclus, de CRC5 waarde is uitgewerkt.Aan het einde van de teller (= 11) uw waarde is klaar en kan worden uitgevoerd voor gebruik.

Niet gebruiken variabele in synthesisable VHDL: uw functionele simulatie (met modelsim voor ex-) zal vertegenwoordigen uw ontwerp, en niet een SW-code evaluatie ...

Probeer een code die er uit ziet:
SIGNAL stuffed_dataSig: std_logic_vector (10 Downto 0);
SIGNAL crc5_state: std_logic_vector (4 Downto 0);

proces (CLK, RST, DIN)

beginnen

indien rst = '1 'dan

count <= 0;
crc5_state <= "11111";
out_crc5 <= "11111";

Elsif clk'EVENT en CLK = '1 'THEN

Als count <11 dan
count <= count 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 THEN - bereken crc

out_crc5 <= NIET crc5_state;

end if;

end if;

einde proces

PS: Ik heb niet probeer deze code ...

Hoop dat dit zal je helpen

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
 
hoi,
bedankt voor het antwoord en de code geleverd.
Maar ik heb een vraag in gedachten, als het proces in teller gebaseerd, zou niet het duurt decennia?Ik hoop echt dat het gedaan zou kunnen worden zsm coz soms veel meer dan 11 bits zal worden verwerkt, soms tot een paar KB ...en mijn programma niet kon veroorloven dat zoveel tijd als er een ander proces te worden uitgevoerd nadat crc is gegenereerd.Bedankt voor uw waardevolle adviezen

Rgds

 
Hoi,

In feite zal de CRC calculatuion worden uitgevoerd in de gegevensstroom.Bij elke klokcyclus, je hebt een nieuwe gegevens, en op elke klokcyclus, deze gegevens wordt rekening gehouden bij de CRC berekening.
In uw vorige code, je nog steeds een teller die alleen telt gedurende 11 klokcycli, dan in 1 klokcyclus, probeert de CRC berekenen (met slechte codering).

Het moet nemen dezelfde tijd ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top