trenger hjelp med dette, pls

A

aeneas81

Guest
Kjære alle,
Jeg har skrevet følgende prosess for å beregne CRC-5 av en 11 bits data for usb formål.det tar en data med en klokke syklus og lagrer til et signal, så i de 12 klokken syklusen vil utføre beregningen.Men for noe ukjent grunn, qu (at) rtus II holde syntetiserte bort min registre, og jeg kunne ikke få riktig utgang.
btw, jeg har lest fra boka som variabler ikke holde den verdi som signaler gjøre, men jeg har sett koder med variabler som kan holde sin verdi over klokken kanten akkurat som signal gjør, hvordan komme?
Takk for din hjelp og råd.CRC-5-koden jeg jobber på:SIGNAL stuffed_dataSig: std_logic_vector (10 DOWNTO 0);

process (clk, rst, DIN)
variabel stuffed_data: std_logic_vector (10 DOWNTO 0);
variabel crc5_state: std_logic_vector (4 DOWNTO 0);

begynne

hvis RST = '1 'da

count <= 0;

out_crc5 <= "11111";

stuffed_dataSig <= "00000000000";

ELSIF clk'EVENT OG clk = '1 'THEN

IF teller <11 da
- Få inndata
stuffed_dataSig (count) <= din;
count <= teller 1;

- Å kontrollere at dataene blir lagret
testout <= stuffed_dataSig;

ELSIF count = 11 da - beregn CRC
stuffed_data: = stuffed_dataSig;
crc5_state: = "11111";

for i 0 i til 10 sløyfe

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 <= NOT crc5_state;

end if;

end if;

end process;

 
Hei,

Problemet algoritmen, er thatyou forsøke å beregne CRC i en for løkke på slutten av tellingen prosessen.
Din loop skal ikke gjøres med en for undervisning (som i programvare), men i telleren loop.Så ved hver klokke syklus, det CRC5 verdien er utarbeidet.På slutten av disken (= 11) verdien er klar og kan utgang for bruk.

Ikke bruk variabel i synthesisable VHDL: din funksjonell simulering (med modelsim for ex) vil representere ditt design, og ikke en SW kode evaluering ...

Prøv en kode som ser slik ut:
SIGNAL stuffed_dataSig: std_logic_vector (10 DOWNTO 0);
SIGNAL crc5_state: std_logic_vector (4 DOWNTO 0);

process (clk, rst, DIN)

begynne

hvis RST = '1 'da

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

ELSIF clk'EVENT OG clk = '1 'THEN

IF teller <11 da
count <= teller 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 da - beregn CRC

out_crc5 <= NOT crc5_state;

end if;

end if;

end process;

PS: jeg ikke prøve denne koden ...

Håper dette vil hjelpe deg

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
 
hei,
takk for svar og koden følger med.
Imidlertid har jeg et spørsmål i tankene, hvis behandle den i disken basert, ville ikke det tar flere tiår?Jeg håper virkelig det kunne gjøres asap coz noen ganger mye mer enn 11 bits vil bli behandlet, noen ganger opptil et par KB ...og min programmet ikke hadde råd til så mye tid som det er andre prosess for å kjøres etter at CRC har blitt generert.Takk for verdifulle råd

Rgds

 
Hei,

faktisk vil CRC calculatuion utføres i datastrømmen.Ved hver klokke syklus, har du fått en ny data, og ved hver klokke syklus, disse dataene er tatt hensyn til ved CRC beregningen.
I den forrige koden du fremdeles har en teller som bare teller under 11 klokken sykluser, deretter i 1 klokke syklus, prøv å beregne CRC (med dårlig koding).

Den burde ta samme tid ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top