Forum: FPGA, VHDL & Co. takte synchronisieren


von chris (Gast)


Lesenswert?

hi,
ich habe zwei verschiedene Takte in meinem System.
Gibts App Notes oder Whitepapers wo beschrieben wird wie man sinnvoll
zwei Takte auffeinander synchronisiert ? ..
ich habe bei Xilinx nichts in dir Richtung gefunden ..

 Danke
  Chris

von Christian Schleiffer (Gast)


Lesenswert?


von chris (Gast)


Lesenswert?

Danke sehr. peinlich ...
 chris

von Dirk (Gast)


Lesenswert?

Hi,

dazu haette ich auch eine Frage. In einem Design moechte ich zwei
CPLD's XC9532 nutzen, weil diese im TQFP Gehaeuse zukriegen sind.
Einer der beiden CPLD's ist ein Memory Controller fuer asynchronen
SRAM. Der zweite CPLD wird zum sampeln von den Daten genutzt. Sollte
ich nun beide CPLD's an einem Quarzoszillator parallel anschliessen
oder sollte ich in den einem CPLD den Takt fuer den zweiten CPLD
erzeugen?

Was ist besser um Clock Skew's zuvermeiden?

Gruß,

Dirk

PS.: Wieso ich kein XC9572 nutze liegt daran das diese nur im PLCC
zukriegen sind.

Gruß,

Dirk

von schlumpf (Gast)


Lesenswert?

tauschen die beiden CPLDs Daten miteinander aus?

von Dirk (Gast)


Lesenswert?

Hi,

ja eine Datenuebergabe erfolgt.

Gruß,
Dirk

von Axel (Gast)


Lesenswert?

"Sollte ich nun beide CPLD's an einem Quarzoszillator parallel
anschliessen oder sollte ich in den einem CPLD den Takt fuer den
zweiten CPLD erzeugen? "

Ich würde letzteres machen. Die Daten basieren ja auf dem internen Takt
der ersten CPLDs, daher würde ich diesen, internen Takt für die
Weiterverarbeitung nutzen.

Entscheidend ist ja nicht so sehr der Skew zwischen den beiden Takten,
sondern der zu Deinen Daten, die Du übertragen willst.

Gruss
Axel

von HolgerB (Gast)


Lesenswert?

@chris
http://www.edn.com/contents/images/310388.pdf beschreibt das noch etwas
ausführlicher.

von chris (Gast)


Lesenswert?

hallo,
danke erstmal.

Bei mir siehts ja so aus das ich die Takte aufeinander synchronisieren
will.
( und nicht die Daten aus einer Taktwelt in eine andere Taktwelt
übertragen )

bei mir ist der Fall so das ich ein langsamen Takt auf einen schnellen
synchronieren will.

( langsam , schnell heißt der der schnelle Takt >> 2* langsamer Takt
ist )

im ersten schritt habe ich mir das ganz einfach so vorgestellt:
1
process(CLK_Fast)
2
begin 
3
if rising_edge(CLK_Fast)then 
4
  CLK_Slow_sync <= CLK_Slow;
5
end if ;
6
end process;

reicht das ?

oder soll ich 2 FF hintereinander machen ?

etwa so
1
.
2
.
3
CLK_Fast : in std_logic;
4
CLK_Slow : in std_logic;
5
OUTPUT   : out std_logic; 
6
.
7
.
8
.
9
signal :  CLK_Slow_sync  std_logic; 
10
signal :  CLK_Slow_sync std_logic; 
11
12
13
process(CLK_Fast)
14
begin 
15
if rising_edge(CLK_Fast) then 
16
      CLK_Slow_sync <= CLK_Slow;
17
      OUTPUT <= CLK_Slow_sync;
18
end if ;
19
end process;

von Axel (Gast)


Lesenswert?

Ich würde die zweite Variante nehmen.

Da haben metastabile Zustände zwischen den beiden FF Zeit sich zu
"entscheiden".

Gruss
Axel

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.