Forum: FPGA, VHDL & Co. Takt umschalten die X.


von Hotzenblotz (Gast)


Lesenswert?

Hallo,

hab jetzt schon ein Weilchen wegen meinem Problem gesucht... Ich hab das 
soweit verstanden, dass wenn ich einen niedrigen Takt im CPLD brauche, 
ich das am besten über die Enable Leitung mache...

Habe nun das Problem, dass ich zwei EXTERNE Takte habe. Das Problem ist 
folgendes: Zum Zeitpunkt meiner Initialisierung ist nur ein Takt A 
vorhanden (66 MHz). Nach der Initialisierung stehen beide Takte A & B 
zur Verfügung, aber weitere externe Signale sind nach der 
Initialisierung zu diesem neuen Takt B synchron. Der Takt B liegt so 
zwischen 20 MHz und 80 MHz.

Kann ich das intern im CPLD irgendwie umschalten?

Vielen Dank für eure Hilfe

von Rick Dangerus (Gast)


Lesenswert?

Hast Du denn die Information, wann Dein neuer Takt stabil verfügbar ist 
(nach der Initialisierung)? Dann damit geeignet auf die neue Clock 
umschalten.

Rick

von Hotzenblotz (Gast)


Lesenswert?

Ja diese Information habe ich. Ich weiss nicht wie ich auf den neuen 
Takt umschalten soll. Ein Multiplexer sollte man dort ja nicht 
verwenden...

von Rick Dangerus (Gast)


Lesenswert?

Du könntest Takt B (neu, langsam) mit Takt A (alt, schnell) über 
ein/zwei FF (ist ja im CPLD eher knapp) einsynchronisieren. Dann sollte 
auch der MUX kein Problem sein.

Rick

von Hotzenblotz (Gast)


Lesenswert?

Hmm, das versteh ich net...

von Jan M. (mueschel)


Lesenswert?

@Rick: Was machst du dann gegen Spikes beim Umschalten?

Ein ordentlicher Clock-Mux braucht entweder spezielle Hardware (die es 
in CPLD mWn nicht gibt) oder einen ziemlichen Hardware-Aufwand mit einer 
ganzen Reihe von Flipflops (von denen man im CPLD meist zu wenig hat). 
Da hilft dann nur ein externen Taktschalter.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> einsynchronisieren...
> Takt A = 66 MHz  (Start)
> Takt B = 20 MHz - 80 MHz
Da scheidet einsynchronisieren wohl aus.


Vielleicht kannst du während des Umschaltens den Rest des CPLDs über 
einen Zähler, der immer mit dem Takt A betrieben wird, im Reset halten. 
Dazu wären dann ja nur wenige 66MHz-Clocks (und somit nur ein "kleiner" 
Zähler mit wenig FFs) nötig. Dann ist eine Umschaltung über einen MUX 
kein Problem.

Problematisch ist ja nur das Umschalten an sich, da dabei Glitches auf 
dem Takt entstehen könnten. Wenn die Schaltung im Reset ist, machen die 
nichts aus (muss in dem Fall natürlich ein asynchroner Reset sein).

> Da hilft dann nur ein externen Taktschalter.
Damit wäre die Umschaltung dann ohne Spikes/Glitches möglich.

von Rick Dangerus (Gast)


Lesenswert?

@Lothar Miller:

Die Frequenz  von Takt A hatte ich überlesen. Somit fällt
einsynchronisieren wirklich aus.

Rick

von Christian R. (supachris)


Lesenswert?

Dafür gibts doch extra Clock-Multiplexer, also zumindest bei Xilinx.

von Holger (Gast)


Lesenswert?

@Jörg
Du soltest dich mal zum Beispiel in das Thema:  PCI Bus
mit seiner spezifischen (FSM) einlesen,
bzw. ein echtes PCI Eval Board besorgen.

Mir hat das sehr geholfen, nicht nur Selbst-Befriedigung
im Speicher mit den Sim-Tools zu machen.

Du bekommst nach einiger Zeit da ein gutes Gefühl dafur
was für gute u. schlechte Code-Techniken im Netz rumgeistern
bzw. was für dedizierte I/0 oder Reset-Pinne man dem
Teil noch so aufbürden sollte und kann.

Durch ständiges spielen daran wird man immer besser.
Nun kommt man aber leider dadurch zu dem Schluss:
Je mehr man darüber weiss, desto .... weniger ....

Und schwups is schon nen neues und besseres
"Männerspielzeug" auf dem Markt,
das man sich holen sollte, und  an dem man sich wieder austoben kann.

Der gute alte LANZ BULDOG mit seiner (FSM)
warum habe ich den nicht mehr ???

Gruss Holger.

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.