mikrocontroller.net

Forum: FPGA, VHDL & Co. Steigende Flanke erkennen


Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe einen Prozess, der mit einem 80 MHz-Takt läuft. In diesem 
Prozess soll bei einer steigenden Flanke eines anderen Signals eine 
bestimmte Aktion durchgeführt werden. Gibt es dafür eine elegantere 
Möglichkeit als sich bei jeder Taktflanke den aktuellen Zustand des 
Signals zu Puffern und anschließend den alten mit dem neuen Zustand zu 
vergleichen?

Um das Ganze zu verdeutlichen etwas Code (signal_i ist ein Eingangsport 
vom Typ std_logic):
signal buffered_signal_s : std_logic := '0';

process (rst_l, clk80m, signal_i)
begin
    if (rst_l = '0') then
        -- asynchronous reset
    elsif (rising_edge(clk80m)) then
        -- hier soll nur auf die steigende Flanke von signal_i hin etwas passieren (diese ist aber asynchron zu clk80m!)
        -- meine Lösung bisher:
        buffered_signal_s <= signal_i;
        if (buffered_signal_s = '0' and signal_i = '1') then
            -- Tu was
        end if;
    end if;
end process;

Danke vorab für die Hilfe und viele Grüße

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Höchstens in der Schreibweise:
signal edge_detected     : std_logic;
signal buffered_signal_s : std_logic_vector(1 downto 0);

detect_edge: process (rst_l, clk80m)
begin
    if (rst_l = '0') then
        -- asynchronous reset
        buffered_signal_s <= (others => '0');

    elsif (rising_edge(clk80m)) then
        buffered_signal_s <= buffered_signal_s(0) & signal_i;

    end if;
end process;
 
edge_detected <= '1' when buffered_signal_s = "01" else '0'; 

Auch wenn signal_i asynchron ist, muß es in diesem Synchronizer/Detektor 
nicht in die Sensitivity-Liste.

Duke

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, danke für die Antwort. Dann werde ich wohl oder übel damit 
leben müssen...

Viele Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.