Zähler ... Takt ... und Co!
So,
ich habe bis Ende des Sommers eine Prüfungsaufgabe mittels VHDL und Quartus II zu lösen - es soll eine digitale Weckuhr rauskommen.
Jetzt hänge ich hier da und irgendwie funktioniert garnichts.
Ich hänge mal meinen VHDL-Code ran, in der Hoffnung mir kann jemand helfen (sorry - ist schon ziemlich verbastelt).
Wie man erkennen kann, soll es ein 4bit-Synchron-Zähler sein, der von 0-15,0 zählt.
Problem: Der Zähler zählt garnichts - irgendwie geht mit dem Ding nichts.
Nehme ich den "CLK"-Teil (NICHT den clk1s-Teil) raus, dann bekomme ich zwar was an den Ausgängen (a-d) zu sehen - aber das hat rein garnichts mit einem Zähler zu tun, da kommt irgendwas lustig verwurschteltes raus.
Hilfe ?!
-- Generated by Quartus II Version 9.0 (Build Build 132 02/25/2009)
-- Created on Sun May 09 21:17:32 2010
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-- Entity Declaration
ENTITY dec_sekunden IS
-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
PORT
(
clk1s : in std_logic;
reset : in std_logic;
a : out std_logic;
b : out std_logic;
c : out std_logic;
d : out std_logic
);
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
END dec_sekunden;
-- Architecture Body
architecture dec_sekunden_architecture of dec_sekunden is
-- Build an enumerated type for the state machine
type state_type is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15);
-- Register to hold the current state
signal state: state_type;
signal clk: integer range 0 to 100;
begin
-- Logic to advance to the next state
process (clk1s, reset, state, clk) begin
if reset = '1' then
state <= s0;
clk <= 0;
end if;
if clk < 100 then
clk <= clk+1;
end if;
if clk > 99 and clk1s = '1' then
case state is
when s0 =>
state <= s1;
when s1 =>
state <= s2;
when s2 =>
state <= s3;
when s3 =>
state <= s4;
when s4 =>
state <= s5;
when s5 =>
state <= s6;
when s6=>
state <= s7;
when s7=>
state <= s8;
when s8=>
state <= s9;
when s9 =>
state <= s10;
when s10 =>
state <= s11;
when s11 =>
state <= s12;
when s12=>
state <= s13;
when s13=>
state <= s14;
when s14=>
state <= s15;
when s15 =>
state <= s0;
end case;
end if;
end process;
-- Output depends solely on the current state
process (state) begin
case state is
when s0 => -- dec 0
a <= '0';
b <= '0';
c <= '0';
-- d <= '0';
when s1 => -- dec 1
a <= '0';
b <= '0';
c <= '0';
d <= '1';
when s2 => -- dec 2
a <= '0';
b <= '0';
c <= '1';
d <= '0';
when s3 => -- dec 3
a <= '0';
b <= '0';
c <= '1';
d <= '1';
when s4 => -- dec 4
a <= '0';
b <= '1';
c <= '0';
d <= '0';
when s5 => -- dec 5
a <= '0';
b <= '1';
c <= '0';
d <= '1';
when s6 => -- dec 6
a <= '0';
b <= '1';
c <= '1';
d <= '0';
when s7 => -- dec 7
a <= '0';
b <= '1';
c <= '1';
d <= '1';
when s8 => -- dec 8
a <= '1';
b <= '0';
c <= '0';
d <= '0';
when s9 => -- dec 9
a <= '1';
b <= '0';
c <= '0';
d <= '1';
when s10 => -- dec 10
a <= '1';
b <= '0';
c <= '1';
d <= '0';
when s11 => -- dec 11
a <= '1';
b <= '0';
c <= '1';
d <= '1';
when s12 => -- dec 12
a <= '1';
b <= '1';
c <= '0';
d <= '0';
when s13 => -- dec 13
a <= '1';
b <= '1';
c <= '0';
d <= '1';
when s14 => -- dec 14
a <= '1';
b <= '1';
c <= '1';
d <= '0';
when s15 => -- dec 15
a <= '1';
b <= '1';
c <= '1';
d <= '1';
end case;
end process;
end dec_sekunden_architecture;