Forum: FPGA, VHDL & Co. Frage zu verschiedenen Clock Domains


von Thomas (Gast)


Lesenswert?

Hi,

ich probiere hier gerade etwas mit einem Xilinx Spartan3e aus und habe 
ein (hoffentlich) simples Problem, welches ich aber leider nicht selbst 
gelöst bekomme.

Ich möchte in meinem FPGA 2 Prozessoren mit unterschiedlichen 
Geschwindigkeiten betreiben. Der erste soll mit 75Mhz und der zweite mit 
50Mhz takten. Nun möchte ich aber ein paar Daten hin und her übertragen. 
Die Daten selber sind nur ein paar Status Bits die jeweils an oder aus 
sein könnnen. Die  Bits sind nicht zeitkritisch - soll heißen sie ändern 
sich vielleicht alle paar hunderttausend zyklen einmal, wenn überhaupt.

Mein Problem:
Mein Routing bricht ab mit dem Fehler, dass der langsamere Prozessor 
nicht die 75Mhz schafft. Ich vermute, dass es durch die Signale (Die 
Status Bits sind einfache Signale, die die Prozessoren verbinden) eine 
Timing Abhängigkeit gibt. Kann ich diese irgendwie aufbrechen?

Wie programmiert man normalerweise mit mehreren Clock Domains? Gibt es 
dazu im Netz gute Anleitungen? Ich konnte da bei google nichts 
entsprechendes finden.

Danke schonmal für Eure Antworten,
Thomas

von Falk B. (falk)


Lesenswert?

@ Thomas (Gast)

>Mein Routing bricht ab mit dem Fehler, dass der langsamere Prozessor
>nicht die 75Mhz schafft. Ich vermute, dass es durch die Signale (Die

Du musst so oder so ein Register einfügen. Mach das.
Beim Lesen muss man es in etwa so machen. Beim Schreibzugriff auf dein 
Register wird gleichzeitig auch ein zusätzliches Bit gesetzt. Der 
andere, hier lesende Prozessor. erkennt das gesetzte Bit und liest 
danach erst das register ein, dann setzt er das Bit zurück (asynchrones 
Reset). So ist deine Datenübertragung über asynchrone Taktgrenzen 
sicher.

>Wie programmiert man normalerweise mit mehreren Clock Domains? Gibt es

Vorsichtig! Nix für Anfänger!

>dazu im Netz gute Anleitungen? Ich konnte da bei google nichts
>entsprechendes finden.

asynchronous clocks, clock boundaries

MfG
Falk

von Thomas (Gast)


Lesenswert?

Hallo Falk,

ich denke, dass ich mir das zusätzliche Bit in diesem Sonderfall sparen 
kann, da ich davon ausgehen kann, dass das Signal nur sehr langsam den 
Wert ändert. Hinzu kommt noch, dass der Empfangende Prozessor sich alle 
Zeit der Welt lassen darf, um herauszufinden, dass sich das Signal 
geändert hat. Würde er eine Flanke verpassen wäre es nicht schlimm, da 
es immer nur auf den aktuellen Zustand ankommt.

Das mit dem Register einfügen ist wohl das, was ich mit dem "aufbrechen 
des Clock Pfades" gemeint habe. Wie genau mache ich sowas? Ich benutze 
XST als Synthese Tool und schreibe in VHDL. Gibt es dazu eine passende 
Primitive in den Xilinx Librarys?

Gruß,
Thomas

von Falk B. (falk)


Lesenswert?

@ Thomas (Gast)

>ich denke, dass ich mir das zusätzliche Bit in diesem Sonderfall sparen
>kann, da ich davon ausgehen kann, dass das Signal nur sehr langsam den
>Wert ändert.

NEIN!

> Hinzu kommt noch, dass der Empfangende Prozessor sich alle
>Zeit der Welt lassen darf, um herauszufinden, dass sich das Signal
>geändert hat.

Ist EGAL! Es sind asynchrone Takte. Punkt. Die ausfühliche Erklärung 
gibt es dutzendfach im Internet.

>Das mit dem Register einfügen ist wohl das, was ich mit dem "aufbrechen
>des Clock Pfades" gemeint habe. Wie genau mache ich sowas? Ich benutze
>XST als Synthese Tool und schreibe in VHDL. Gibt es dazu eine passende
>Primitive in den Xilinx Librarys?

Bitte? Für ein Register? Du schreibst nicht wirklich in VHDL, gibs zu.

MfG
Falk

von J. S. (engineer) Benutzerseite


Lesenswert?

Auf welcher Frequenz läuft denn der FPGA? Wenn Gfs musst Du nämlich die 
Takte noch absamplen.

Oder werden die CPUs aus dem FPGA gespeist? Wenn die CLOKS hart verhakt 
sind, z.B. über 150MHz liesse sich ein sehr einfaches Protokoll 
verwenden.

?

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.