Ich möchte mit einem FPGA einen high speed shutter betätigen, der ein Hochfrequenzdesign steuert. Dieses läuft auf> 1GHz und folglich muss der Schalter auf ca 0,2 .. 0,3 ns genau schalten. So genau lässt sich das im FPGA aber nicht direkt erreichen, weil die Taktfrequenz auf sagen wir 300 MHz (also Faktor 10 zu grob) limitiert ist. Man müsste es also mit den Delays einstellen. Ich denke, dass es reichen wird, wenn ich mit dem Takt auf die richtige Position gehe, also ganzzahlig verzögere, und dann den Rest mit den IO-Delays fahre. Welche Massnahmen wären zu ergreifen, um die Synthese per Constraints richtig zu steuern, dass bei einem IO-Delay von null eine ganz bestimmte Verzögerung durch das Routing erfolgt? Soweit mir bekannt, kann man das Routingdelay nur nach oben hin begrenzen, sodass die Synthese es hinschiebt oder meldet, wenn es nicht geklappt hat. Ich meine, ich müsste das so ähnlich ansetzen, wie man schnelle DDR-Rams fährt, sodass die Verzögerungen in einem bestimmten Bereich bleiben und dann mit den programmierbaren IO-Delays feintunen. Wie genau bekommt man das hin?
Die Synthese und auch die nachfolgenden Schritte ändern am Delay selber erst mal nichts, nur weil du Constraints vorgibst. Da bekommst du am Ende nur die Meldung, ob es geklappt hat, oder nicht. Sie optimieren aber den Rest auf die Constrints hin. Wenn du ein Output Delay einstellen willst, musst du das über die ODELAY Primitive machen. Die gibts meines Wissens eh nur in den großen Virtex, ich glaube ab Virtex 5. Die Spartan haben nur sehr begrenzte Delay Fähigkeiten, Spartan 6 zum Beispiel nur mit Ringoszillator, ist temp.- und spannungsabhängig. Zu was muss das Ausgangssignal überhaupt so genau kommen? Zu einem Eingangssignal? Dann hättest du ja noch das vom Routing und den IOB Zellen kommende Delay dazu, und das ist im Datenblatt mit Min-Typ-Max angegeben, also auch nicht wirklich fix.
Wäre es nicht auch eine Möglichkeit nen SERDES zu verwenden. Stratix V FPGAs haben SERDES die bis zu 14GBit/s machen
Wenn es um regelmässige Pulse geht und nicht auf eine bestimmte Verzögerung aufgrund eines externen Triggers, könnte man das auch mit der Phasenjustage der DCMs machen. Damit sollte man so auf einige 10ps genau hinkommen.
user schrieb: > Wäre es nicht auch eine Möglichkeit nen SERDES zu verwenden. Zu wenige Ausgänge mit SERDES -> zu teuer. Georg A. schrieb: > Phasenjustage der DCMs machen. Viel zu wenige Resourcen PLL -> viiiiell zu teuer. :-)
Piccolo MC von TI, der hat 150ps Zeitauflösung bei den Timern.
> Zu wenige Ausgänge mit * Tja, der Hinweis, wieviele IOs da so geschoben werden müssen, hat in den Anforderungen gefehlt... Es gäbe noch eine quasi-analoge Möglichkeit: Die Ausgänge auf langsame Slewrate stellen und über einen DAC+R einen leichten Gleichspannungspegel auflegen. Damit kann man die Schaltschwelle eines Eingangs durchaus um einige 100ps verschieben. Der DAC kann dabei aus einen PWM/PDM/delta-sigma-Block mit Tiefpass aus einem FPGA-IO gemacht werden. Die Werte muss man halt probieren... In gewissem Sinne intern kalibrieren kann man das dann über ein Readback des Pins selbst, wenn man es mit einem per DCM nahe an den Umkipppunkt geschobenen Sampletakt vergleicht. > Piccolo MC von TI, der hat 150ps Zeitauflösung bei den Timern. Was es alles gibt ;) Aber da passt sicher auch was mit den noch nicht erwähnten weiteren Anforderungen zusammen...
Ja, das habe ich auch schon gedacht, aber ist zu kompliziert. Ausserdem:
> man es mit einem per DCM
Ich habe kaum DCMs
Hm, du hast uns immer noch nicht gesagt, wieviele Ausgänge zu welcher "Referenz" so genau positioniert werden sollen und um welches FPGA es sich handelt. OSERDES (nicht GTP/GTX...) gibts bei Xilinx übrigens, wenn vorhanden an jedem IO, aber die gehen auch nur bis 1GHz oder sowas, also nixmit ps-Bereich.
>Ja, das habe ich auch schon gedacht, aber ist zu kompliziert. Ausserdem: Ja mei, wenn du solche Anforderungen (GHz...ps...viele IOs) hast, muss man ein paar grössere Geschütze auffahren. Mit einem BC337 wird sich das halt nicht lösen lassen. Bauteilemässig wäre die Pegelverschiebung jedenfalls günstig (RC-Kleinkram). >> man es mit einem per DCM >Ich habe kaum DCMs Eine reicht für die Kalibrierung.
> Es gäbe noch eine quasi-analoge Möglichkeit: Die Ausgänge auf langsame > Slewrate stellen und über einen DAC+R einen leichten > Gleichspannungspegel auflegen. Das ist die genauseste Methode, geht aber noch etwas einfacher und fast genau so präzise. > Damit kann man die Schaltschwelle eines Eingangs durchaus um einige > 100ps verschieben. Geht ebenfalls noch eine ganze Ecke genauer. :-) > Der DAC kann dabei aus einen PWM/PDM/delta-sigma-Block Und auch das geht noch einfacher, wenn man die PWM nicht einkanalig mit nur einem Pin baut. Ich habe mich im Zuge einer industierellen Entwicklung mit dem Thema mal befasst und gefunden, dass man im FPGA mittels IO-Delay unter Umgehung von MCMs/DCMs/PLLs auf ungefähr 50ps genau schieben kann. Feiner geht es dann nur noch mit dem FPGA-Editor unter Nutzung von existenten Chip-Strukturen. Aufgrund von Hersteller-Infos und eigenen Überlegungen sind 15ps theoretisch und ca 20ps praktisch möglich - weitgehend jitterfrei, wenn man es richtig anfängt. Genauer geht es statisch nur in einem ASIC unter Nutzung kalibierter Routing-Delays. Dynamisch (also mit Kalibierung) liesse sich theoretisch jeder beliebige Wert erzielen, wenn man genügend Pins hinzunimmt und ein wenig mit den Impulsen trickst. Praktisch kommt man an eine Rausch- und Jittergrenze. Ich habe aber eine Schaltungsidee, die nur 2 Out-Pins und einen weiteren In-Pin zur Kalibierung benötigt, um auf ca. 1/50 des Taktes zu kommen. Das wären bei 300MHz in etwa 30ps. Mit einer zweiten Stufe (mit dann 3+1 FPGA-Pins) wäre nochmal eine Verfeinerung um Faktor 3-5 drin. Ich denke, dass man auf unter 10 ps kommen kann und dies ohne irgendwelche IO-Delays, PLLs oder dergleichen. Man braucht nur etwas Vogelfutter. Damit wäre jedes PLD nutzbar. Man müste allerdings gut treiben und sehr sauber abschließen.
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.