Hallo, habe mal hier wieder ein kleines Problem und bräuchte mal einen Denkanstoß. Ich habe einen Virtex 5 Custom Board, wo ich extern einen Taktoszillator habe, mit dem ich 5 verschiedene Clocks über GCLK Pins im FGPA verwenden kann. Nun habe ich so gelesen und gehört, dass es immer besser ist, eine Clock einzulesen (Bsp. 100MHz) und die restlichen nötigen Clocks über eine PLL/DCM im FPGA herzuleiten. Kann mich auch irren !? Nun habe ich erstmal im V5 12 DCMs und 6 PLLs. Die PLLs sind alle schon belegt und können nicht verwendet werden, also bleiben mir die 12 DCMs übrig. Es ist auch nicht möglich DCMs statt PLLs für diese best. Module zu verwenden, da die DCM eine mind. Freqeunz erwartet. Nun brauche ich intern im FPGA folgende Clocks: 100MHz, 200MHz, 125MHz, 59,09...MHz. Mit einer DCM schaffe ich entweder 100MHz, 200MHz und 125MHz zu generieren oder 100MHz, 200MHz und 59,09MHz. Jetzt war die Überlegung bei mir, das im StartUp Moment des FPGAs alle Clocks mit der pos. Flanke gleichzeitig anfangen sollen, um ebend einen sauberen StartUp zu haben. Also muss ich irgendwie das Locked Signal verwenden. Meine Überlegung war folgende: Ich lese eine 100MHz in eine DCM(DCM_1) ein. Das Locked-Signal dieser DCM resetted 2 weitere DCMs. Sobald DCM_1 sein Locked freigibt, werden die 2 DCMs auch freigegeben und erhalten als Clock Input den 100MHz Output vom DCM_1. Nun laufen die 2 DCMs an und generieren die nötigen Clock, die oben schon erwähnt sind. Nun habe ich hier warscheinlich das Problem, dass diese 2 DCMs nicht gleichzeitig ihr Locked Signal freigeben werden, d.h. das die Clocks des einen DCM nicht gleichzeitig mit der anderen starten werden. Kann man hier in diesem Punkt den DCMs mitteilen, wann sie starten sollen? Oder sollte ich es ganz anders machen, vllt. sollte man es auch nicht so machen wie ich es beschrieben habe? Ist es evtl. OK wenn ich alle Clocks die ich intern brauche vom äußeren Taktgenerator generieren lasse und sie dann im FPGA einfach verwende? Evtl. verwende ich dann für jede Clock eine eigene DCM um Jitter zu minimieren? Bräuchte in dieser Hinsicht mal einen Denkantoß, was wäre eine gute Variante, wie sollte man es machen? Danke schon mal im voraus MfG Cihan
Cihan Kalayci schrieb: > Ist es evtl. OK wenn ich alle Clocks die ich intern brauche vom äußeren > Taktgenerator generieren lasse und sie dann im FPGA einfach verwende? Das ist die denkbar schlechteste Lösung, denn dann hast du sogar zwischen augenscheinlich "geraden" Takten (100MHz+200MHz) immer einen asynchronen Übergang. Es kann aber in Bezug auf eine fällige EMV-Messung auch besser sein, unabhängige Takte zu haben, weil es dann nicht so viele SSO (gleichzeitig schaltende Ausgänge) geben kann. > Kann man hier in diesem Punkt den DCMs mitteilen, wann sie starten > sollen? Du kannst dem gesamten Design sagen, dass es erst dann "loslaufen" darf, wenn alle PLL richtig takten... > Evtl. verwende ich dann für jede > Clock eine eigene DCM um Jitter zu minimieren? Wozu denn einen DCM? Wenn du einen brauchbaren externen Taktgenerator hast, dann kannst du diesen Takt direkt verwenden.
Lothar Miller schrieb: > Das ist die denkbar schlechteste Lösung, denn dann hast du sogar > zwischen augenscheinlich "geraden" Takten (100MHz+200MHz) immer einen > asynchronen Übergang. Wenn ich aber zwischen den Clockdomainen synchronisiere, quasi mit 2 FFs oder bei Daten sogar mit Fifos, ist es dann in Ordnung mit dieser Lösung? Lothar Miller schrieb: > Du kannst dem gesamten Design sagen, dass es erst dann "loslaufen" > darf, wenn alle PLL richtig takten... Auf meine PLLs will ich mich eigentlich überhaupt nicht beziehen, da diese nur laufen werden, wenn das dazugehörige Gerät auch die Clock liefert, quasi wenn er eingeschaltet ist. Und er ist nicht immer im Betrieb eingeschaltet, kann bzw. auch ausgesteckt und wieder eingesteckt werden. Aber auf meine DCMs würde ich mich beziehen wollen. Ich habe eine Testimplementierung mal gemacht mit 3 DCMs. Doch leider bisher nicht so das richtige oder erwartete Verhalten. Hätte ich eine PLL zur Verfügung gehabt, könnte ich ganz leicht alle vier Frequenzen generieren, aber mit einer DCM schaffe ich es nur mit 2. Ich habe mir meine Simulation angeguckt, dort sehe ich auch dass beide Locks der DCMs gleichzeitig freigeben, aber auf der Hardware ist es leider nicht so. Im Anhang sind meine vhd files beigefügt. Am Anfang hatte ich die Clocks auf dem Oszi mir angeguckt, doch leider sehr unsauber gewesen. Deswegen habe ich mit der ersten Flanke jeder Clock einen Output auf HIGH gelegt und schaue mir die Schaltpunkte dabei an. lg Cihan
Und hier mal auch eine RTL-Schematic in pdf Format. Das sollte denke ich mal meine Vorgehensweise klar machen. Cihan
Hallo nochmal, habe mal versucht das ganze ein bisschen zu optimieren. Daraus erschließ sich, dass ich anstatt 59,..MHz 66,66MHz verwenden kann. Ich brauche diese Frequenz für Kommunikationsmodule. Letztendlich brauche ich nur noch eine DCM(siehe USER_DCM.vhd und RTL-Schematic), wo alle vier Frequenzen (Input: 100MHz; Output: CLK0 = 100MHz, CLK2X = 200MHz, CLKFX = 125MHz, CLKDV = 66,66MHz) generiert werden. Der StartUp-Wait Attribut ist auf TRUE gesetzt. Nun habe ich im TOP_MODULE (auch im Anhang) Outputs mit den jeweiligen Frequenzen auf 1 gesetzt, um im StartUp Moment beobachten zu können(auf dem Oszi natürlich) ob alle gleichzeitig auf HIGH schalten, doch leider ist dies nicht der Fall. Die Simulation ist hier OK, aber auf der Hardware habe ich noch Probleme. Habe dann versucht die BitGen Optionen zu benutzen, habe DONE_cycle auf 4 gesetzt, GTS_cycle auf 1, GWE_cycle auf 1 und LCK_cycle auf 2. StartUpClk ist JTAG Clock. Doch leider hat es nicht viel gebracht. Manche Outputs sind schon vor dem LOCKED Signal auf HIGH bzw. das LOCKED kommt irgendwie 2 mal. Falls gewünscht kann ich hier versuchen noch Screenshots vom Oszilloskopen zu machen. Doch wo liegt mein Fehler, was kann ich tun, damit alle Frequenzen sauber und gleichzeitig nach dem LOCKED Signal starten? Sollte ich hier evtl. das Primitive Startup_Virtex5 benutzen? Bitte um eure Hilfe. Gruß Cihan
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.