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
#1456957
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
Gast
#1456989
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
> if resb = '0' then
Welche Abfrage ist diese Zeile?
> Welche Abfrage ist diese Zeile?
Deine Frage sollte wohl lauten: Welche Funktion hat diese Zeile?
Antwort: das ist der asynchrone low-aktive Reseteingang...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.