Clock Event in VHDL?

Gast #390053
Lesenswert?

In den FPGAs sind halt nur D-FF drin, die auf steigende Flanke
reagieren. Das schliesst nicht aus, dass man auch auf fallende Flanken
detektieren kann. Die Synthese schaltet dann halt Logik vor das FF, um
das gewünschte Verhalten zu erreichen. Beides gleichzeitig geht aber
nicht, dazu muss man entweder 2 FF nehmen oder mal in den Output Pads
schauen, da sinf oft DDR-FF drin.


T.M.
Gast #390054
Lesenswert?

Ein D-FlipFlop ist ein Element, das auf EINE Flanke des Taktsignals
(meist die steigende) den Zustand am Eingang speichert und an den
Ausgang legt.
Dieses Verhalten ist durch die Hardware bestimmt.

Auch wenn in VHDL zwei Flanken als Bedingung für das Übernehmen der
Daten geschrieben werden können, so kann das die HW schlicht so nicht
umsetzen. Ein D-FF kann prinzipbedingt nur auf 1 Flanke reagieren.

Es ist nicht alles synthetisierbar, was in VHDL definiert werden kann.
So kann z.B. auch kein "wait  for 23.77ns" in HW implementiert
werden.

Was willst du eigentlich machen?
Gast #390055
Lesenswert?

...ich habe ein Taktsignal am Eingang auf welches ich synchronisieren
will. Am Ausgang will ich Daten mit diesem Takt raus schicken.

Wenn ich nun immer auf die positive Flanke triggere, dann bekomme ich
die halbe Datenrate. Daher würde ich gerne auf beide Flanken reagieren
um die volle Datenrate zu bekommen...
#390057
Lesenswert?

process (clk50_in)
begin
  if clk50_in'event and clk50_in='1' then
    if (clk25 = '0') then
      clk25 <= '1';
    else
      clk25 <= '0';
    end if;
  end if;
end process;

Oh ja, das ist umständlich.

So gehts richtig:

process (clk50_in)
begin
if rising_edge(clk50_in) then
clk25 <= not clk25;
end if;
end process;
Gast #390059
Lesenswert?

...ich habe einen Eingangstakt. Mit diesem Takt möchte ich synchron
Daten raus schieben und das mit derselben Taktrate. Also muss ich auch
die negative Flanke irgendwie ausnutzen...

wie funktioniert so was?

proc_TEST : process (Takt)
begin
counter <= counter + 1;
end process;


??? wird hier bei jeder Taktänderung der Zähler ein hochgezählt?
Eigentlich schon, oder?
Gast #390060
Lesenswert?

Ändern sich denn die Eingangsdaten bei der steigenden UND fallenden
Flanke? Wenn ja, musst du im FPGA mit der doppelten Taktfrequenz
arbeiten. Was du oben beschreibst, ist zwar gültiger VHDL-Code, aber
nicht synthetisierbar, das heisst, es kann nicht in den FPGA abgebildet
werden, weil dieser nicht die passende HW dafür hat. Dafür besitzt er zB
ClockDLL, mit denen du leicht Taktverdopplungen oder
Phasenverschiebungen machen kannst. Man könnte also entweder den Takt
verdoppeln und dann an jeder steigenden Flanke abfragen, oder auch
einen um 180 Grad verschobenen Takt erzeugen, dann müsste man aber die
Verarbeitung in 2 getrennten Prozessen machen, wo der eine auf den
originalen und der andere Prozess auf den verschobenen (invertierten)
Takt abfragt.


T.M.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren