problem z licznikiem w ahdl`u

Jan 08, 2007 1 Replies

Witam



Mam taki oto problem stworzy³em sobie taki oto kod. Uk³ad ma tylko wej¶cie zegarowe i 3 wyj¶cia, zadeklarowalem sobie maszyne stanów 3 kolejno nastêpuj±ce po sobie od s1 do s3 i tak tak w ko³o z s3 przechodzi do s1 a ka¿demu ze stanów przypo¿±dkowane s± inne warto¶ci na wyj¶ciach, problem jaki napotka³em to to i¿ mimo ¿e zastosowa³em licznik licz który ma wp³ywaæ na czas trwania poszczególnych stanów maszyny jest on inkrementoany i po spe³nieniu warunku zerowany po przej¶ciu do kolejnego stanu jednak z tymi czasami co¶ siê nie zgadza bo po symulacji wychodzi na to ¿e stany trwaj± nastêpuj±co s1-3cykle zegara ,s2-15cykli zegara,s3-14cykli zegara co robie nie tak bo ju¿ niemam pojêcia ??? Dodam ¿e program pisze i symuluje w Quatrusie II Altery.



SUBDESIGN xyz (zeg:input; a,b,c:output; )



VARIABLE ster : machine with states (s1,s2,s3); licz[3..0]:dff; BEGIN ster.clk=zeg; licz[].clk=zeg; case ster is when s1=>



a=b"1"; b=b"0"; c=b"0"; if licz[].q==b"0100" then %stan ma trwaæ 5 impulsów zegarowych% licz[].d=b"0000"; ster=s2; end if; licz[].d=licz[].q+1; when s2=>



a=B"0"; b=b"1"; c=b"0"; if licz[].q==b"0011" then %stan ma trwaæ 4 impulsy zegarowe% licz[].d=b"0000"; ster=s3; end if; licz[].d=licz[].q+1; when s3=>



a=b"0"; b=b"0"; c=b"1"; if licz[].q==b"0001" then %stan ma trwaæ 2 impulsy zegarowe% licz[].d=b"0000"; ster=s1; end if; licz[].d=licz[].q+1; end case; END;



else licz[].d=licz[].q+1; ster=s1; end if;

analogicznie dalej, musisz pamietaæ, ¿e instrukcje nie wywo³uj± siê sekwencyjnie ale 'na raz'

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required