Probleme mit synchronen Clock Ausgängen -> Timing Constraints

OP #1813351
Lesenswert?

Hallo,

ich habe ein Problem beim Erstellen zweier Clocksignale. Ich habe einen 
Clockeingang mit 32 MHz. Aus diesem Signal muss ich zwei Clockausgänge 
generieren. Zum Einen eine Clock mit 32MHz und eine mit 16MHz.
Aus Unwissenheit heraus habe ich einfach den Clockeingang genommen und 
daraus die 32 und 16 MHz generiert um diese anschließend auf normale 
IO-Pins (Keine CLOCK-IOs!!!) zu geben. Auf dem Oszilloskop ist mir 
aufgefallen, dass je nach Compilierung die Signale zueinander 
phasenverschoben sind.

Ich habe bereits rausgefunden, dass ich auf sogenannte Timing 
Constraints zurückgreifen muss. Allerdings weiß ich nicht wie ich diese 
in VHDL implementieren muss.

Kann mir jemand helfen?
Ich arbeite mit einem Xilinx Virtex 4 Board.

Vielen Dank für eure Mühe im Vorraus.

Gruß
Daniel
#1813385
Lesenswert?

@Daniel S. (uc4life)

>Kann mir jemand helfen?

Erstmal lies was über Taktung FPGA/CPLD. Ist zwar nicht 100% das 
Problem hier, aber schafft wichtiges Verständnis.

>Ich arbeite mit einem Xilinx Virtex 4 Board.

Na dann ist ja alles Easy. Für den 32 MHz Takt nimmt man ein DDRO 
FlipFlop, also ein DDR-FlipFlop, welches direkt in den IO-Zellen sitzt. 
Einfach direkt instanziieren.
Für den 16 MHz Takt reicht ein normales IO-FlipFlop.

Damit ist deine Verzögerung festgenagelt.

MFG
Falk
Moderator (Firma: Titel) Persönliche Seite #1813397
Lesenswert?

Daniel S. schrieb:
> Ich habe bereits rausgefunden, dass ich auf sogenannte Timing
> Constraints zurückgreifen muss. Allerdings weiß ich nicht wie ich diese
> in VHDL implementieren muss.
Timing-Constraints werden wie die IO-Constraints (Pinzuordnung) nicht im 
VHDL-Text eingegeben, sondern in einer Datei mit der Endung UCF (User 
Constraints File) abgelegt. In dieser Datei sollte mindestens 1 Timing 
Constraint stehen: der FPGA-Takt.

> Aus Unwissenheit heraus habe ich einfach den Clockeingang genommen
> und daraus die 32 und 16 MHz generiert
Wie hast du diese Takte generiert (Quelltext)?
Warum hast/brauchst du 2 Takte?

> Auf dem Oszilloskop ist mir aufgefallen, dass je nach Compilierung
> die Signale zueinander phasenverschoben sind.
Um wieviel? 1ns? 10ns?
#1813470
Lesenswert?

Wichtig ist, wie schon gesagt, die Takte über ODDR FlipFlips auszugeben.
Zum Beispiel so:
1
USB_CLK : ODDR Port map(Q => USBclk, C => BusCLK, CE => '1', D1 => '1', D2 => '0', R => '0', S => '0');

Außerdem ist wichtig, dass sie auf einem globalen Clock-Netzwerk sind, 
also am besten per DCM erzeugen und die BUFG an den DCM Ausgängen 
aktivieren. Dann klappt das.
OP #1814693
Lesenswert?

Danke für die Hilfe. Beim Recherchieren nach euren Tipps bin ich über 
ein DCM-Modul gestoßen das ich mit Hilfe eines Wizards in ISE erstellt 
habe. Dieses Modul kann unterschiedliche Takte aus einem vorgegeben Takt 
ableiten. Unteranderem auch das benötigte Ref-Clock und 1/2 Ref-Clock.

Jetzt haben die Clocksignal die selbe Phasenlage und mein Baustein läuft 
einwandfrei...

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