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
@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
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?
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.