Zähler inkrementieren

OP #1456939
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
Gast #1456989
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren