Forum: FPGA, VHDL & Co. Höhere Clock nur wegen eines Signals?


von Pepe (Gast)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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.

von Pepe (Gast)


Lesenswert?

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...

von Hannes (Gast)


Lesenswert?

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.

von Xxx (Gast)


Lesenswert?

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.

von Xxx (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.