VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Count down -zähler

Anfang   zurück   weiter   Ende
Autor Beitrag
andy_vhdl
Registrierter Benutzer


Beiträge: 1

New PostErstellt: 25.10.10, 18:47  Betreff: Count down -zähler  drucken  weiterempfehlen Antwort mit Zitat  

Nabend meine VHDL Freunde,

ich stehe am vor einen Problem welches ich einfach nicht gelöst bekomme. Das Program soll folgendes machen. Wir haben einen kaskadierbaren Zähler mit 2 Dezimalstellen. (99 -0) Er soll im sekunden Takt runterzählen. Sobald er die 0 erreicht hat sollen alle 8 Led's den eingestellten wert blinkend darstellen. Ansonsten soll der momentane Wert ausgegeben werden.
Könnt ihr mir vielleicht sagen wo mein Denkfehler ist, oder habt ihr eine bessere Idee für die Umsetzung.
Folgendes Bord nutze ich: Spartan 3a FPGA Starter Kit (Interner Takt 50MHZ)

Hier mein Program:

entity counter1 is
Port ( CLOCK : in STD_LOGIC;
BTN_SOUTH : in STD_LOGIC; -- Taste Start/Stop
LED_LOW : out STD_LOGIC_VECTOR (3 downto 0); -- LEDs Einerstelle
LED_HIGH : out STD_LOGIC_VECTOR (3 downto 0)); -- LEDs Zehnerstelle
end counter1;

architecture Behavioral of counter1 is
signal bcd_low : std_logic_vector (3 downto 0):="1001"; --Anfangswert Einerstelle
signal bcd_high : std_logic_vector (3 downto 0):="0001"; --Anfangswert Zehnerstelle
signal start : std_logic;
signal co1 : std_logic; -- carry out Einerstelle
signal divider_bcd : integer range 0 to 50000000;
signal takt_1hz : std_logic;
signal stop : std_logic;

type zuC is (G,H,I,J); -- Flankenerkennung SOUTH
signal zu3, fzu3: zuC;

type zuD is (K,L,M); -- Start/Stop
signal zu4, fzu4: zuD;

begin

------------------------------------------------------------------------------------
--Flankenerkennung_south
------------------------------------------------------------------------------------
Zustandsaktualisierung_2: process (CLOCK, stop)
begin
if stop = '0' then zu3 <= G;

elsif CLOCK = '1' and CLOCK'event then zu3 <= fzu3;
end if;

end process Zustandsaktualisierung_2;

Flankenerkennung_start: process (BTN_SOUTH, zu3)
begin
case zu3 is
when G => if BTN_SOUTH = '1' then fzu3 <= G;

else
fzu3 <= H;

end if;

start <= '0';
when H => if BTN_SOUTH = '1' then fzu3 <= I;

else
fzu3 <= H;

end if;

start <= '0';
when I => if BTN_SOUTH = '1' then fzu3 <= J;

else
fzu3 <= J;

end if;

start <= '1';
when J => if BTN_SOUTH = '0' then fzu3 <= J;

else
fzu3 <= G;

end if;

start <= '1';

end case;
end process Flankenerkennung_start;
--------------------------------------------------------------------------------------------
--Start-Stop
--------------------------------------------------------------------------------------------
Zustandsaktualisierung_3: process (CLOCK, start)
begin
if start = '0' then zu4 <= K;
elsif CLOCK = '1' and CLOCK'event then zu4 <= fzu4;
end if;
end process Zustandsaktualisierung_3;

start_stop: process (start, zu4)
begin
case zu4 is


when K => if start = '0' then fzu4 <= K; -- anfang
else fzu4 <= L;
end if;
stop <= '0';
when L => if start = '0' then fzu4 <= L; -- start
else fzu4 <= M;
end if;
stop <= '0';
when M => if start = '0' then fzu4 <= M; -- stop
else fzu4 <= L;
end if;
stop <= '1';
end case;
end process start_stop;





---------------------------------------------------------------------------------------------
-- 1 Hz Takt
---------------------------------------------------------------------------------------------


process(CLOCK)
begin
if (CLOCK'event and CLOCK = '1') then
if divider_bcd = 0 then
divider_bcd <= 50000000;
takt_1hz <= not takt_1hz;
else
divider_bcd <= divider_bcd -1;
end if;
end if;
end process;
---------------------------------------------------------------------------------------------
-- Count-Down-Zaehler_Low
---------------------------------------------------------------------------------------------

counter_bcd_low: process (CLOCK, takt_1hz, start, bcd_low, stop)

begin
if stop = '1' then bcd_low <= "0000";
elsif (CLOCK = '1' and CLOCK'event and takt_1hz='1') then

if start ='0' then bcd_low <= bcd_low;
else bcd_low <= bcd_low - 1;
end if;

end if;


end process counter_bcd_low;
---------------------------------------------------------------------------------------------
-- Count-Down-Zaehler_High
---------------------------------------------------------------------------------------------
counter_bcd_high: process (CLOCK, co1, bcd_high, stop)

begin
if stop = '1' then bcd_high <= "0000";
elsif(CLOCK'event and CLOCK = '1') then
if co1 = '0' then bcd_high <= bcd_high;
else


bcd_high <= bcd_high - 1;
end if;
end if;
end process counter_bcd_high;
co1 <= '1' when bcd_low = 0 else '0';
---------------------------------------------------------------------------------------------
-- LED_blinken_low
---------------------------------------------------------------------------------------------

LED_LOW<=bcd_low ;
LED_HIGH<=bcd_high;

end Behavioral;

Ich hoffe sehr das ihr mir da helfen könnt.
Vielen Dank im vor raus

Gruß

Andy

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj