VHDL Clock Frage

Oct 14 2020

Was ist der Unterschied zwischen diesen Aussagen in VHDL:

  1. if (clk'event und clk = '1') dann
  2. wenn aufsteigende Kante (clk) dann

Sind sie gleichwertig? Produzieren Sie das gleiche Verhalten (Ausgänge)? Warum sollte einer gegen den anderen verwendet werden?

Ist auch eine gegen die andere synthetisierbar? Was ist besser für die Synthese korrekte Codierung?

Antworten

3 DaveTweed Oct 14 2020 at 01:20

Nein, sie sind nicht genau gleichwertig. Die erste Variante

if (clk'event and clk='1') then

funktioniert nur richtig, wenn der vorherige Zustand der Uhr tatsächlich '0' war. Dies funktioniert in den meisten Fällen einwandfrei, erfasst jedoch keine ungewöhnlichen Fälle, z. B. wenn der vorherige Status "U", "W", "X" oder "Z" war.

Die zweite Variante verwendet rising_edge()1 , die speziell prüft, ob der vorherige Zustand '0' oder 'L' war und der neue Zustand '1' oder 'H' ist.


1 Sie können die tatsächliche Definition unter Stapelüberlauf sehen