VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Zähler ... Takt ... und Co!

Anfang   zurück   weiter   Ende
Autor Beitrag
Böserkater
Gast
New PostErstellt: 17.05.10, 14:34  Betreff: Zähler ... Takt ... und Co!  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

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;
nach oben
K.
Gast
New PostErstellt: 17.05.10, 17:04  Betreff: Re: Zähler ... Takt ... und Co!  drucken  weiterempfehlen Antwort mit Zitat  

Hi,

soll der Prozess mit dem State getaktet sein?

Also ich schreib meine Prozesse immer so:

process(clock,reset)
begin
if reset then
state <= s0;
elsif clock'event and clock='1' then
--hier kommen dann die Zuweisungen für state ...
end if;
end process;

Schau mal ob dir das weiterhilft.

Gruss,

K.
nach oben
mietzekater
Gast
New PostErstellt: 17.05.10, 17:09  Betreff: Re: Zähler ... Takt ... und Co!  drucken  weiterempfehlen Antwort mit Zitat  

Der Takt soll eigentlich nur von "clk1s" kommen.
state sind die Zustände, welche beim nächsten Takt angenommen werden sollen.

Soll eine Art Uhr werden - die z.Z. jede Sekunde einen Takt bekommen soll und erst dann, wenn sie Takt hat, schalten soll.

Dafür hat sie 2 Eingänge und 4 Ausgänge - der Rest ist dann eben das VHDL-Blöcklein, was die Ausgänge abhängig von den Eingängen und dem inneren Zustand (state) schalten soll.
nach oben
Gast
New PostErstellt: 21.05.10, 15:09  Betreff: Re: Zähler ... Takt ... und Co!  drucken  weiterempfehlen Antwort mit Zitat  

Das ist vom Prinzip her auch ok, allerdings wie gesagt, Prozesse bedürfen einer bestimmten Form:

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

geht aus meiner einfach Sicht nicht!

Sondern:

process
begin
If reset
-- resetwerte ...
elsif clock'event
--Funktion, Statevector, update der ganzen register
end if
end process

Kannst das ganze auch mit synchronem reset machen

if clock'event then
if reset
--sync reset
else
-- Funktion
end if
end process

In der Sensitivityliste stehen dann auch nur Clock&Reset bzw nur Clock.
nach oben
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj