clk'event Verwendung

Gast #653004
Hallo,

ich sehe immer wieder wie in manchen codes nach einer Taktflanke gesucht 
wird indem man in einem Prozess das Eingangssignal um einen Takt 
verzögert und dann an der gewünschten Stelle in einer if Abfrage fragt 
ob das originalsignal 1 und das alte 0 ist (in dem Fall also eine 
steigende Flanke).

Warum wird das so gemacht, es gibt doch xxx'event and xxx = '1'?? So 
könnte man doch viel einfacher nach einer steigenden Flanke in dem 
entsprechenden Signal suchen oder??

Danke für die Aufklärung

Robert
#653071
Das 'event, bzw. rising_edge und falling_edge nutzt man bei 
Clock-Signalen.
Wenn man aber die Signaländerung eines "normalen" Signals entdecken 
will,
nimmt man die verzögert Variante.

Ich kann jetzt nicht genau sagen, warum das so ist,
vermute einfach mal, dass bei 'event die ISE denkt,
dass es ein Clocksignal ist und das Signal dann versucht
so zu routen, was natürlich nicht gewollt ist.
Kann aber falsch sein. :)
Ist nur eine Frage der Zeit, bis ein Experte Stellung nimmt. ;)
Gast #653121
Na ja, in erster Linie ist man bestrebt nur einen einzigen Clock
zu haben.
Warum?
Ganz einfach: Damit das Layout synchron bleibt, ansonsten können
-- Metastabile Zustände
-- Glitches
-- Spikes
auftreten.

Deswegen wird ein Siganl, dessen Flanke man erkennen möchte zunächst mal 
mit dem Takt einsynchronisiert.

Um weitere Informationen zu erlangen einfach mal die oben genannten 
Begriffe in der Suchmaske eintragen.

Gruß Volker
Gast #653707
Bei der Verwendung von clock'event (and clk='1' oder '0') generiert das 
Synthesetool Flip-Flops die mit clk getaktet werden. Alternativ (besser)
schreibt man rising_edge(clk), falling_edge(clk).

Diese Konstruktion könnte man nun auch verwenden, um Flanken von 
beliebigen Signalen zu erkennen, dann kommt man aber ganz schnell in den 
Bereich asynchroner Schaltungen. Wer nicht weiß was das ist und warum 
man das vermeiden sollte, schaut mal hier im Forum oder sucht bei 
Google.

Generell sollten also alle Signale synchron zu 'clk' sein. Wenn man nun 
ein Signal A hat, das synchron zu clk ist und dessen steigende Flanke 
erkennen möchte, dann verzögert man das Signal um einen Clock und 
vergleicht aktuellen und vorherigen Zustand. Das ist der übliche (und 
einzige mir bekannte) Weg, um Signaländerungen vollsynchron zu erkennen.
Gast #654071
IMHO denkst du wie ein Programmierer ("...nach einer Taktflanke 
gesucht...","...if Abfrage..."), nur wird mit VHDL ausschließlich in 
Testbenches für Simulationen PROGRAMMIERT, soll dagegen ein FPGA 
synthetisiert werden, steht VHDL für das BESCHREIBEN für Hardware. Und 
die FPGA - Hardware erkennt eben Signalflanken (oder in HW formuliert: 
setzt ein Ausgangssignal auf '1) durch ein 2Input XOR mit einem Eingang 
am Orginal und an dem zweiten Eingang das mit einem ein DD-FF 
verzögertem Signal.
Nicht anders.

In der Synthese wird eben der Code anders (mit einem anderen Ziel) 
"übersetzt". Bei 'event kommt das "mit IF abgefragte" Signal an den 
Takteingang eines FF. und mit einem solchen FF kannst du kein Signal auf 
'1' setzten sobald das "getestete" Signal '1' wird.
mit 'edge kann man Signalwechsel in einer Simulation erkennen, aber 
keinen Flankendetektor bauen. Ist halt missdeutbar - die Sprache.

Und letzlich will man nicht den Signalwechsel erkennen (das dauert ja 
nur ein paar ps), sondern das sich das Signal gewechselt hat.

Es ist die selbe Sprache nur für einen koplett anderen Empfänger.
Gast #655930
Hallo,

danke für die ausführlichen Antworten. Mir ist die Sache jetzt klar und 
ich werde es weiterhin so machen "wie die andern", nur jetzt weiss ich 
auch warum :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.