potřebují pomoc s tím, pls

A

aeneas81

Guest
Vážení,
Napsal jsem následující postup pro výpočet CRC-5 z 11 bit data pro USB účel.To trvá jeden datový v hodinovém cyklu a ukládá se signál, pak na 12 hodinovém cyklu bude provést kalkulaci.Nicméně, z nějakého neznámého důvodu, qu (at) RTU II držet syntetizován mou registry, a nemohl jsem dostat správný výstup.
btw, jsem četl z knihy, které proměnné nemá to hodnotu jako signály dělat, ale viděl jsem kódů s proměnnými, které mohou mít hodnotu více než hodinové hraně, stejně jako signál dělá, jak to?
Děkujeme za vaši pomoc a radu.CRC-5 kód jsem pracoval:SIGNAL stuffed_dataSig: std_logic_vector (10 DOWNTO 0);

procesu (CLK, RST, DIN)
variabilní stuffed_data: std_logic_vector (10 DOWNTO 0);
variabilní crc5_state: std_logic_vector (4 DOWNTO 0);

začít

pokud RST = '1 'pak

Počet <= 0;

out_crc5 <= "11111";

stuffed_dataSig <= "00000000000";

ELSIF clk'EVENT AND CLK = '1 'THEN

IF počítat <11 pak
- Získat vstupní data
stuffed_dataSig (count) <= din;
Počet <= Počet 1;

- Ověřit, že data se skladuje
testout <= stuffed_dataSig;

ELSIF count = 11 THEN - výpočet CRC
stuffed_data: = stuffed_dataSig;
crc5_state: = "11111";

pro i při 0 až 10 smyčka

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

konec vedení;

out_crc5 <= NOT crc5_state;

end if;

end if;

ukončení procesu;

 
Ahoj,

Problém vašeho algoritmu, je thatyou zkuste spočítat CRC v pro smyčce na konci hraběte procesu.
Vaše smyčka nesmí být provedeno na výuku (stejně jako v software), ale v boji proti smyčce.Takže v každém hodinovém cyklu, hodnota CRC5 je zpracován.Na konci pultu (= 11), vaše hodnota je připraven a může být výstup k použití.

Nepoužívejte proměnné v synthesisable VHDL: vaše funkční simulace (s ModelSim na ex), budou reprezentovat váš návrh, a ne kód SW hodnocení ...

zkuste kód, který vypadá takto:
SIGNAL stuffed_dataSig: std_logic_vector (10 DOWNTO 0);
SIGNAL crc5_state: std_logic_vector (4 DOWNTO 0);

procesu (CLK, RST, DIN)

začít

pokud RST = '1 'pak

Počet <= 0;
crc5_state <= "11111";
out_crc5 <= "11111";

ELSIF clk'EVENT AND CLK = '1 'THEN

IF počítat <11 pak
Počet <= Počet 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 - výpočet CRC

out_crc5 <= NOT crc5_state;

end if;

end if;

ukončení procesu;

PS: já se nesnažil tento kód ...

Doufám, že to pomůže

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mrknutí" border="0" />
 
hi,
Díky za odpověď a kód dodává.
Nicméně, mám na mysli otázku, je-li proces je v rozporu založen, by to trvá desítky let?Opravdu doufám, že by se dalo udělat asap coz někdy mnohem víc než 11 bitů, bude zpracováno, někdy až několik KB ...a můj program nemohl dovolit tolik času, kolik je další proces, který se spustí po crc byl vytvořen.Díky za vaše cenné rady

Rgds

 
Ahoj,

ve skutečnosti, CRC bude calculatuion být prováděny v datovém toku.Na každém hodinovém cyklu, máš nová data, a při každém hodinovém cyklu, data se přihlédne se při výpočtu CRC.
Ve vaší předchozí kód, stále máte počítadlo, které počítá pouze během 11 hodinových cyklů, pak v 1 hodinovém cyklu, zkuste spočítat CRC (se špatným kódováním).

To by mělo mít stejnou dobu ...<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top