Hallo. Ich habe in einer Schaltung zum Auslesen eines Video(zeilen)sensors einen Systemtakt von 100MHz. Die Pixel werden mit 10MHz aus dem Sensor per VideoADC ausgelesen. Um die Signale für den VideoADC korrekt zu erzeugen, verwende ich die 10MHz als Basistakt und verschiebe die benötigten Triggersignale entsprechend. Für die Verschiebung nehme ich die 100MHz als Basis. D.h. ich kann die Triggersignale in 1/10 Schritten verschieben. Das Ganze läuft in einem MAX 10M08. Die Schaltung an sich läuft und liefert Ergebnisse. Beim Optimieren der Schaltung hab ich jetzt gesehen, dass die Amplitude des Analogsignals höher wäre, wenn ich das Delay für den Samplepunkt in 1/20 Schritte einstellen könnte. Ich hab's bisher immer so gehalten, dass der Systemtakt der höchste war. Jetzt brauche ich "wegen 3 Triggersignalen" den doppelten Takt. Den Aufwand, dass ich die gesamte Schaltung auf 200 MHz umstelle, möchte ich mir sparen. Was soll ich machen? Nur für die 3 Signale ne höhere Clockdomain verwenden oder die ganze Schaltung schneller laufen lassen.
Arbeite mit zwei Takten. Da der eine 100 MHz und der andere 200 MHz ist, kannst du beide aus der gleichen PLL erzeugen und diese sogar synchron verwenden. Ansonsten kannst du auch alle Übergänge asynchron behandeln. Da gibt es viel Literatur unter "Clock Domain Crossing". Wahrscheinlich brauchst du aber die synchrone Variante, da sonst die Triggerpräzision wahrscheinlich darunter leidet.
Danke für die Antwort. Ich glaube, dass ich mir sogar das Synchronisieren sparen kann, da die 3 Triggersignale eh nur für die Erzeugung des Timings für den externen ADC verwendet werden. Intern verwende ich die Signale sonst nicht. Der ADC gibt mir dann zurück, dass er mit seiner Wandlung fertig ist. Und dieses Ready-Signal lese ich wieder synchron zu meinen 100MHz ein...
Bei vielen FPGAs hast du auch ODDR, OSERDES oder aehnliche bloecke, mit denen du nur die Outputs selbst hoeher taktest, aber den Systemtakt gleich laesst. Da berechnet man in einem Systemtakt mehrere Bits und kann relativ dazu die Flanke recht genau verschieben. Ich weiss allerdings nicht, ob der MAX10 sowas hat, gehe aber mal pauschal davon aus.
Eventuell kannst du auch mit der steigenden und fallenden Flanke des 100 MHz Taktes was tricksen. Aber da muss man natürlich dann aufpassen, dass das Triggersignal nicht glitched oder andere hässliche Dinge passieren, die von Laufzeiten verursacht werden.
Nachtrag: Wenn du die Anpassung des Triggerzeitpunktes nicht während des Betriebs vornehmen musst, sondern im Design 'hart' einstellen kannst, sollte es eigentlich recht einfach sein. Verwende sowohl für den Takt als auch für die Trigger je ein PAD-Register. Damit sind die Laufzeiten zu den Pins recht kurz und haben wenig Skew. Das Register für den 10 MHz Ausgang taktest du mit der steigenden Flanke des 100 MHz Clock. Die Register für die Trigger taktest du wahlweise entweder mit der steigenden oder fallenden Flanke des 100 MHz Clocks. Damit kannst du das Triggersignal nochmal um ne halbe Periode verschieben, bevor es aus dem Pin purzelt. Ob das für deinen Anwendungsfall praktikabel ist, kann ich allerdings nicht beurteilen
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.