Steigende Flanke erkennen

Gast #1287750
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):
1
signal buffered_signal_s : std_logic := '0';
2

3
process (rst_l, clk80m, signal_i)
4
begin
5
    if (rst_l = '0') then
6
        -- asynchronous reset
7
    elsif (rising_edge(clk80m)) then
8
        -- hier soll nur auf die steigende Flanke von signal_i hin etwas passieren (diese ist aber asynchron zu clk80m!)
9
        -- meine Lösung bisher:
10
        buffered_signal_s <= signal_i;
11
        if (buffered_signal_s = '0' and signal_i = '1') then
12
            -- Tu was
13
        end if;
14
    end if;
15
end process;

Danke vorab für die Hilfe und viele Grüße
Gast #1287774
Lesenswert?
• ▲
▼
Nein. Höchstens in der Schreibweise:
1
signal edge_detected     : std_logic;
2
signal buffered_signal_s : std_logic_vector(1 downto 0);
3

4
detect_edge: process (rst_l, clk80m)
5
begin
6
    if (rst_l = '0') then
7
        -- asynchronous reset
8
        buffered_signal_s <= (others => '0');
9

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

13
    end if;
14
end process;
15
 
16
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.