Forum: FPGA, VHDL & Co. Zähler inkrementieren


von Hans H. (hanshirsch)


Lesenswert?

Hallo, ich habe folgendes Problem:
Ein Zähler soll bei jedem Tastendruck um 1 inkrementiert werden. (nicht 
gestartet werden!!!)

Es muss sozusagen ein Puls erzeugt werden, der z.B. eine Taktperiode 
lang ist.
Wie realisiere ich das? Es muss wohl ein Signal oder Variabel 
gespeichert werden?

H.H

von Joachim (Gast)


Lesenswert?

Hallo

Versuch es doch mal damit:

http://www.handzaehler24.de/epages/61863302.sf

Oder gehe mal mehr ins Detail, was du eigentlich willst.

Gruß
Joachim

von Der Besucher (Gast)


Lesenswert?

Ich würde es wie folgt machen:

* vollsynchrones Design
* Einsynchronisierung des Taster-Signals mit 2 Flipflops
* dann einen Debouncer
* am Ausgang des Debouncers die Steigende Flanke detektieren (kann man 
auch in den Debouncer einbauen)
* bei steigender Flanke den Zähler incrementieren.

Kann man in ein paar Zeilen VHDL/Verilog realisieren.

Hier mal der Code eines Debouncers, den ich vor ein paar Wochen gebaut 
habe und genau dein Problem löst:

signal taster_pulse   : std_logic;
signal taster_s0      : std_logic;
signal taster_s       : std_logic;
signal taster_count   : natural range 0 to 255;

-- debouncer for taster
process(resb,clk)
begin
  if resb = '0' then
    taster_s0 <= '0';
    taster_s <= '0';
    taster_count <= 0;
  elsif rising_edge(clk) then
    taster_s0 <= taster;
    taster_s <= taster_s0;
    if taster_s = '0' then
      taster_count <= 0;
    elsif taster_count /= 255 then
      taster_count <= taster_count + 1;
    end if;
  end if;
end process;
taster_pulse <= '1' when taster_count = 254 else '0';


Anzumerken ist, das taster_pulse in einem synchronen Prozess verwendet 
werden sollte (also dein Zähler). Ansonsten kann man taster_pulse auch 
noch ein Flipflop spendieren. War aber bei mir nicht notwendig. Sehe 
gerade, die Einsynchronisierung ist auch schon drin.

Der Besucher

von Hans H. (hanshirsch)


Lesenswert?

> if resb = '0' then

Welche Abfrage ist diese Zeile?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Welche Abfrage ist diese Zeile?
Deine Frage sollte wohl lauten: Welche Funktion hat diese Zeile?
Antwort: das ist der asynchrone low-aktive Reseteingang...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.