Forum: FPGA, VHDL & Co. Steigende Flanke erkennen


von Ampfing (Gast)


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

von Duke Scarring (Gast)


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

von Ampfing (Gast)


Lesenswert?

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

Viele Grüße

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.