mikrocontroller.net

Forum: FPGA, VHDL & Co. Verschiedene Clock-Quellen


Autor: Thomas B. (thomas1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze das Spartan 3A Starter Kit.
Da steht mir ein 50MHz Quarz zur Verfügung. Für eine Ethernetanwendung 
brauche ich jedoch einen 100MHz-Takt. Dazu instanziere ich einen DCM, 
der den Eingangsclock von 50Mhz auf 100MHz verdoppelt.
Meine Frage ist nun die folgende:
Wie kann ich verhindern, dass keine Prozesse ausgeführt werden, solange 
die DLL noch nicht eingeschwungen ist, d.h. das locked-Signal noch nicht 
auf '1' ist?
Ich habe mir das so vorgestellt:

-- Die DLL während 255 Clock-Zyklen im Reset behalten
-- Für diesen Prozess wird der 50MHz-Clock verwendet
reset_dll: process(CLK_50M)
begin
  if(rising_edge(CLK_50M)) then
    if(reset_cnt = x"FF") then
      dll_reset <= '0';
    else
      reset_cnt := reset_cnt + 1;
    end if;
  end if;
end process reset_dll;

-- Alle anderen Prozesse laufen nun mit dem 100MHz-Clock von der DLL
irgendein_prozess: process(CLK_100M)
begin
  if(rising_edge(CLK_100M)) then
    if(dll_locked = '0') then
      -- solange DLL nicht eingeschwungen, darf nichts geschehen
    else
      -- hier steht die Logik meines Prozesses
    end if;
  end if;
end process irgendein_prozess;

Darf ich das so machen? Oder ist es einfach ein riesen Murx?
Hat irgendjemand eine saubere "Standartlösung"?

Vielen Dank

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas B. schrieb:
> Darf ich das so machen?
Dürfen schon, aber es ist besser die DCM nur drei Takte im Reset zu 
halten und dafür mit dem Zähler nach dem locked Signal noch ein bissel 
zu warten.

Duke

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann doch das Starten des FPGAs verzögern, bis die DCM gelocked 
sind.
Wäre das nicht die bessere Lösung?

Autor: Thomas B. (thomas1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja sicher wäre das besser. Kannst Du mir gerade sagen, wie das geht?

Vielen Dank

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht in
http://www.xilinx.com/support/documentation/user_g...

a) Für jede DCM auf die am warten will, muss STARTUP_WAIT auf True 
gesetzt werden.
b) beim BitStream erzeugen muss -g lck_cycle angegeben werden.

Aber ist schon länger her, dass ich das verwendet habe.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder was gelernt!

Autor: Anguel S. (anguel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas B. schrieb:
> Ja sicher wäre das besser. Kannst Du mir gerade sagen, wie das geht?

Wie wäre es mit einer Zustandsmaschine, die im Idle Zustand bleibt, bis 
die DCM gelockt hat? Diese könnte dann z.B. auch ein Reset wegnehmen, 
wenn sie in den nächsten Zustand wechselt. Dann bräuchte man keine 
komischen Parameter setzen.

Grüße,
Anguel

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.