Verschiedene Clock-Quellen

OP #2102146
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

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