Dieser ArtikelBenutzerSuche |
VHDL Flankenerkennung[bearbeiten] FragestellungIch habe an einem Eingang ein Signal. Wechselt dieses von 0 auf 1, dann möchte ich mit einem anderen Signal darauf reagieren.
[bearbeiten] Die FalleDie intuitive Lösung
ist hier in der Regel falsch. Dieser Konstrukt wird ausschließlich für Clock-Signale verwendet und führt dazu, daß das externe Signal an den clk-Eingang eines eigenen FFs geht. Eine solche Vorgehensweise ist praktisch nur bei Hochgeschwindigkeitszählern und Schaltungsteilen nötig, die aus anderen Gründen in einer eigenen CLK-Domain laufen müssen oder sollen. Deren Ausgänge müssen dann nochmals gesondert behandelt und ggf. einsynchronisiert werden. [bearbeiten] Die Lösung1. Das eigehende Signal wird mittels eines Flipflops synchronisiert und durch ein weiteres um einen Takt verzögert. Die Synchronisation ist in der Regel nötig, um das externe Signal stabil betrachten zu können. Die folgende FF-Stufe ist wiederum nötig, um einen "alten" und einen "neuen" Zustand zu haben und so einmalig erkennen zu können, wenn der Wechsel des Signals vom ersten in das zweite FF transportiert wird.
Somit haben wir ein zu CLK synchrones Signal, das für genau einen Takt 1 ist, wenn das Eingangssignal ansteigt. Dieses Signal kann jetzt als Clockenable an jedem beliebigen Flipflop benutzt werden. Nehmen wir an, wir brauchen ein Signal, das bei der ersten steigenden Flanke am Eingang auf 1 geht und dort bleibt:
Der obige Konstrukt toggelt allerdings jedesmal, wenn die Flanke wechselt, also auch dann, wenn das Eingangssignal von 1 auf 0 geht. Um nur auf die steigende Flanke sensitiv zu sein, müsste ausdrücklich auf "old = 0 and new = 1" geprüft werden. |