www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx Spartan3 DCM - wann "locked" ?


Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Weiss jemand zufällig wann die DCM locked meldet ?

Wenn ich folgende Signale aus einer 50mhz clock erzeuge:
         _   _   _   _   _   _   _   _   _   
100M | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_...
                  __     ___     ___     __
 50M ............|   |___|   |___|   |___|   |___...
                  ______         ______
 25M ............|       |_______|       |_______...
                          ______         ______
!25M ............|_______|       |_______|       ...
                   _________________________________
locked ___________|

So sieht es im Simulator aus, locked kommt 0.1ns nachdem alle
Clocks ok sind und kurz nach der ersten gemeinsamen rising edge (der
nicht phasenverschobenen signale).
Ist das immer so oder nur im Simulator ?

Ich muss nämlich einen process der mit 100Mhz läuft so synchronisieren
dass er einen bestimmten Status hat wenn die eine 25Mhz Leitung
ihre rising edge hat.

Da hab ich aber irgendwie probleme mit...
Im Simulator gehts :(

Wie macht man sowas generell ?
Asynchron auf locked warten und dann davon ausgehen das man die erste
100mhz flanke verpasst hat ? (mein aktueller Ansatz)
Oder mit dem 100mhz Takt prüfen ob locked da ist und dann bis 4 zählen
und loslegen ?

Gruss,
Simon

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich das bei der Virtex DLL noch in Erinnerung habe, braucht diese
DLL einige tausend Taktzyklen, um auch das LOCKED Signal zu erreichen.
Wird wohl bei der Spartan DCM ähnlich sein...

Wie wäre es denn, wenn Du die aus Deinem Eingangstakt generierten Takte
erst dann auf die entsprechenden Ausgänge der Entity, die die  DCM
enthält, schaltest, wenn das LOCKED Signal auf High gesetzt wird, wie
zB:

SYSTEMCLK_2X_o <= CLK_2x_Buf when DLL1_Locked = '1' else '0';

Dabei sind CLK_2x_Buf und DLL1_Locked Signale, die laut dem Virtex
Datasheet an der Instanzierung der CLKDLL bzw benötigten Buffern
geschaltet werden.

Gruß
Tom

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Habe mitlerweile rausgefunden dass das locked nicht immer dann kommt
wenn alle übereinander synchron sind :(

Dein Vorschlag hilft mir aber nicht den ersten Takt zu finden
wo alle Signale die steigende Flanke haben...

Ich hatte dann einfach mal nach einer steigenden Flanke von 25mhz
gesucht:
if (rising_edge(clk100)) then
  if (sync = '0') then
    if (clk25_old = '0' and clk25 = '1') then
       sync <= '1';
    else
       sync <= '0';
    end if;
    clk25_old <= clk25;
  else
    --sync !
  end if; --sync
end if; --rising100

Aber das spukt auch irgendwie rum..

Mir ist vorhin beim testen aber noch was ganz seltsames aufgefallen:
Ich hatte mitten im Betrieb aufeinmal den Fall dass die DCM von locked
auf unlocked ging :o

Muss ich nochmal auf dem eval board testen morgen. Nicht
dass da irgendwas mit meiner entworfenen Platine nicht stimmt...

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.