www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Clock Event in VHDL?


Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie frage ich auf eine fallende UND steigende Flanke ab?

so funktioniert es bei mir nicht
   if (((rising_edge (clock)) or (falling_edge (clock)))) then
und so auch nicht
   if (clock'event) then

... wie macht man sowas richtig?

Gruß
Bustle

Autor: Black123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur VHDL oder auch Synthese?

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...???... so das es das ISE von Xilinx für  einen FPGA übersetzen kann

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...achso, ... der Fehler tritt in der Synthese auf

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nur mit bestimmten DDR FFs. Die musst Du von Hand
instanziieren.
Ist es überhaupt unbedingt nötig auf beide Flanken zu reagieren?

Autor: Dominik Schulz (realniki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich müsste

if (clk'event and clk='1') then -- steigende Flanke
if (clk'event and clk='0') then -- fallende Flanke

funktionieren (clk in Sensitivity-Liste vorausgesetzt).

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dominik

Nein, geht nicht, weil die FlipFlops nicht auf beide Flanken reagieren.

Autor: Dominik Schulz (realniki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, wieder was gelernt...
Wozu fragt man dann über haupt clk='1' ab?

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Kohler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rooney Bob (rooney)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CoolRunner2 CPLDs können auf beide Flanken triggern. Sofern ich mich
erinnern kann heißt diese Funktionalität CoolClock.

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups...Entschuldigt bitte. Das war leider das falsche Fenster. Vergesst
den Beitrag. :(

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bustle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Antwort... Ich hab es mir der doppelten Taktrate gelöst,
wollte jedoch wissen ob es auch anders geht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.