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


von Thomas B. (thomas1)


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:
1
-- Die DLL während 255 Clock-Zyklen im Reset behalten
2
-- Für diesen Prozess wird der 50MHz-Clock verwendet
3
reset_dll: process(CLK_50M)
4
begin
5
  if(rising_edge(CLK_50M)) then
6
    if(reset_cnt = x"FF") then
7
      dll_reset <= '0';
8
    else
9
      reset_cnt := reset_cnt + 1;
10
    end if;
11
  end if;
12
end process reset_dll;
13
14
-- Alle anderen Prozesse laufen nun mit dem 100MHz-Clock von der DLL
15
irgendein_prozess: process(CLK_100M)
16
begin
17
  if(rising_edge(CLK_100M)) then
18
    if(dll_locked = '0') then
19
      -- solange DLL nicht eingeschwungen, darf nichts geschehen
20
    else
21
      -- hier steht die Logik meines Prozesses
22
    end if;
23
  end if;
24
end process irgendein_prozess;

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

Vielen Dank

von Duke Scarring (Gast)


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

von Klaus F. (kfalser)


Lesenswert?

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

von Thomas B. (thomas1)


Lesenswert?

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

Vielen Dank

von Klaus F. (kfalser)


Lesenswert?

Steht in
http://www.xilinx.com/support/documentation/user_guides/ug331.pdf

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.

von D. I. (Gast)


Lesenswert?

Wieder was gelernt!

von Anguel S. (anguel)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.