mikrocontroller.net

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


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.