Ich bekomme 6 verschiedene Datenströme, die statisch umgeschaltet werden
sollen (und dürfen), womit Glitches erlaubt wären, weil sie nicht
stören. Die Takte sind leider nicht gleichen Formats und müssen auf eine
von 2 PLLs übersetzt werden. Dazu muss ich der einen PLL einen von 6
Takten zuweisen und der anderen einen der ersten 3.
Wie mache ich das am Einfachsten? Bei 3 Takten hatte ich bisher 2
BUFGMUX verwendet, die in Reihe liegen. (X,Y,Z) Für 6 Eingänge bräuchte
ich aber 5 Stück!
X = A / B
Y = C / D
Z = E / F
U = X / Y
V = U / Z
Geht das einfacher?
Frank Petelka schrieb:> Geht das einfacher?
Wahrscheinlich nicht.
Was für einen Chip verwendest Du?
Muß Dein FPGA-Design synchron zu den Taktquellen laufen?
Evtl. kannst Du mit einem asynchronen FIFO arbeiten und Dein Design auf
einem festen Takt lassen?!
Duke
Frank Petelka schrieb:> Geht das einfacher?
Vermutlich ja.
Beschreibe mal dein eigentliches Problem und nicht schon die halbe
Lösung.
Denn eventuell ist der Ansatz, Takte umschalten zu wollen/müssen, schon
nicht gerade optimal
Leider müssen die Takte so umgeschaltet werden, weil es im Betrieb zu
erfolgen hat.
Das Einsynchronisieren der Daten wird ohnehin gemacht, aber das Ausgeben
muss eben mit dem Takt laufen, der von aussen gewählt wird.
Daher klappt es auch nicht, eine Ausgangs-PLL zu nehmen und diese
umzuprogrammieren.
Frank Petelka schrieb:> aber das Ausgeben> muss eben mit dem Takt laufen, der von aussen gewählt wird
Geht es, wenn Du für die Takte einen Multiplexer nimmst, dessen Ausgang
auf einen BUFG und damit noch ein asynchronses FIFO für die
Ausgangsdaten betreibst?
Duke
Duke Scarring schrieb:> Frank Petelka schrieb:>> aber das Ausgeben>> muss eben mit dem Takt laufen, der von aussen gewählt wird> Geht es, wenn Du für die Takte einen Multiplexer nimmst, dessen Ausgang> auf einen BUFG und damit noch ein asynchronses FIFO für die> Ausgangsdaten betreibst?
Sicher, das ginge von der Funktion her, warum? Wie sähe dann eine
verbesserte Lösung aus?
Schlumpf schrieb:> Von welchen Frequenzen reden wir denn da bei den Takten?
Bis 125 MHz, einmal auch 133MHz werden es wohl.
Frank Petelka schrieb:> Sicher, das ginge von der Funktion her, warum?
Weil Du dann mit zwei Takten auskommst:
1. der interne Prozessingtakt
2. der extern Datentakt
Am Eingang und am Ausgang kommt ein asynchrones FIFO hin, welches
zwischen den Takten wandelt. Deine verschiedenen externen Takte gehen
auf einen einfachen Multiplexer und erst danach auf einen BUFG und damit
in das globale Taktnetz.
Es entfällt der Aufwand die Taktumschaltung mit den Taktressourcen des
FPGAs abzubilden.
Duke
So wie ich es jetzt verstanden habe, liegen alle diese Takte im Chip
vor, richtig? Oder werden diese von außen angelegt?
Falls sie intern vorliegen, dann würde ich den internen Teil deines
Designs, welches mit einem fixen Systemtakt läuft, über einen FIFO mit
dem Ausgabeteil verbinden. Den Takt für diesen Ausgabeteil kannst du
über Multiplexer umschalten. Natürlich geht dabei die Phasenlage
"verloren", aber das stört nicht, da dieser Teil sowieso vom Rest des
Designs über einen FIFO entkoppelt ist. Sprich: Der FIFO sorgt eh dafür,
dass sowohl Takt als auch Phase zwischen Eingang und Ausgang des FIFOs
unerheblich ist.
Der Synthesizer sollte damit auch kein Problem haben.
Du musst halt dafür sorgen, dass das FIFO samt Steuerung so ausgelgt
ist, dass es bei allen Takten der Ausgabeeinheit zuverlässig
funktioniert.
Also Steuersignale lange genug anliegen, dass sie auf jeden Fall von
jedem gewählten Ausgangstakt sicher abgetastet werden können und den
FIFO so groß wählen, dass selbst bei ungünstigsten Verhältnissen
zwischen Quell- und Ziel-Takt kein Over- oder Underrun auftreten kann.
Aber dann sollte das meines Erachtens zuverlässig funktionieren.
Schlumpf schrieb:> So wie ich es jetzt verstanden habe, liegen alle diese Takte im Chip> vor, richtig? Oder werden diese von außen angelegt?
Nein, die kommen von aussen und ich kann / muss mich darauf
synchronisieren.
> Falls sie intern vorliegen, dann würde ich den internen Teil deines> Designs, welches mit einem fixen Systemtakt läuft, über einen FIFO mit> dem Ausgabeteil verbinden.
Sowas habe ich schon. Ich kann eigentlich an jeder Stelle auf den
Zielausgangstakt überwechseln. Meistens brauche ich ein paar Register.
Das Problem ist der Takt selber, mit dem dann die Geschichte läuft:
Der kommt aus einer der inputs und es muss schaltbar sein, von wem.
Wenn ich die Schaltung das nächste mal überarbeite, mache ich einen
externen Clock-MUX dran.