mindstorm
Guest
Mon Jan 08, 2007 8:11 pm
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;
czerstwy
Guest
Mon Jan 08, 2007 10:41 pm
On 2007-01-08, mindstorm <k.przespolewski@okok.pl> wrote:
Quote:
case ster is
when s1=
a=b"1";
b=b"0";
c=b"0";
if licz[].q==b"0100" then %stan ma trwaae 5 impuls?w zegarowych%
licz[].d=b"0000";
ster=s2;
else
licz[].d=licz[].q+1;
ster=s1;
end if;
analogicznie dalej, musisz pamietać, że instrukcje nie wywołują się
sekwencyjnie ale 'na raz'
--
czerstwy
gg:9037311