Hallo allerseits, ich habe immer wieder gelesen, dass man in FPGAs keine Delay-lines mit logischen Zellen aufbauen soll, da viele Einflüsse die Delays beeinflussen. Intel schreibt explizit: > Do not use LCELL primitives to create an intentional delay or asynchronous pulse. The delay of these elements varies with temperature, power supply voltage, and device fabrication process, so race conditions can occur and create an unreliable circuit. Hat dass schonmal jemand getestet? Sind die Abweichungen im 'normalen' Betrieb wirklich so schlimm? Ich hatte mal einen schnellen Test gemacht, und die Abweichungen über mehrere Minuten war unterhalb dessen, was ich messen konnte. Hatte ich da einfach Glück? Ich würde gerne ein paar Ausgänge um bis 1-2ns (+- 200ps) verzögern, und frage mich, ob das eine einfache Möglichkeit wäre. Leider habe ich keine PLLs mehr verfügbar, mit denen das natürlich sauberer wäre.
cell schrieb: > und die Abweichungen über mehrere Minuten war unterhalb dessen Hast du auch mal mit Föhn und Kältespray draufgehalten? > Ich würde gerne ein paar Ausgänge um bis 1-2ns (+- 200ps) verzögern Für ein Einzelstück kann man sich das schon mal hinpfriemeln, aber zu den bereits von Intel/Altera beschriebenen Effekten kommt noch dazu, dass du dann eben bei jedem Durchlauf der Toolchain Roulette spielst. Und ganz spannend wird dann ein Update der Toolchain...
Es ist meistens sehr sinnvoll, Ausgaenge nur aus synchronen Schaltungen (FD, ODDR, OSERDES u.ae.) zu treiben, da ansonsten interne Zustaende der LUTs bei einem Zustandsuebergang direkt nach draussen gehen. Da diese aber synchron sind, kann man danach im Normalfall keine asynchronen Elemente mehr danach schalten (Ausnahmen: OBUFs. Diese haben aber pro Pin eine recht konstante Verzoegerung. ODELAYs waeren genau das was du braeuchtest, diese gibt es bei X allerdings erst ab Kintex in den HP-Baenken. ) Falls du sowas unbedingt in der Fabric machen willst wuerde ich dringend empfehlen, hier alles moegliche auch manuell zu platzieren (zumindest LOC-Constraints), da die Schaltung sonst bei jedem Build anders laeuft. Kannst du nicht von einer bestehenden PLL noch eine Clock mit geringfuegig anderer Phase erzeugen, um deine handvoll Signale dann mit einer zusaetzlichen Flipflop-Stage damit auszugeben? Ich habe meistens noch 1-2 Abgriffe an den PLLs frei...
cell schrieb: > Ich würde gerne ein paar Ausgänge um bis 1-2ns (+- 200ps) verzögern, und > frage mich, ob das eine einfache Möglichkeit wäre. dafür gibt es z.B. bei vielen Xilinx-Bausteinen die IODELAYs. Die hängen zwar eigentlich ebenfalls von Temperatur, Spannung, Prozessfenster ab, aber bei denen wird über die IODELAYCTRL der korrekte Delaywert jeweils nachgeregelt (indem die interen Versorgungsspannung so varriert wird, dass der gewünschte Delaywert genau erreicht wird).
cell schrieb: > Ich würde gerne ein paar Ausgänge um bis 1-2ns (+- 200ps) verzögern, und > frage mich, ob das eine einfache Möglichkeit wäre. Leider habe ich keine > PLLs mehr verfügbar, mit denen das natürlich sauberer wäre. Das geht locker, in dem Bereich sauen dir externe Parameter nicht rein. Vermutlich musst du nicht mal manuell plazieren. Ansonsten muss man das fuer den klassischen TDC-Hack im ps-Bereich. Da findest du einiges offenes Material im Netz (Stichworte CERN, Szintillationsmessung, TDC). Nehme mal an, dass du dein FPGA - ich vermute jetzt mal Alterafabrikat - gut kennst, ebenso deine Tools um die Zellen zu plazieren.
Fitzebutze schrieb: > Das geht locker, in dem Bereich sauen dir externe Parameter nicht rein. doch das tun sie und das ist auch nicht nötig weil die ios auf 50ps genau zu trimmen sind
Lothar M. schrieb: > cell schrieb: >> und die Abweichungen über mehrere Minuten war unterhalb dessen > Hast du auch mal mit Föhn und Kältespray draufgehalten? Naja, das würde ich mal nicht als "normale Betriebsumgebung" bezeichnen. Falls der FPGA dann natürlich mal in einer heißeren, oder kälteren Umgebung steckt, kann das natürlich ein Problem sein. Mehr als +- 10° Temperaturabweichung erwarte ich aber nicht, da müsste ich mal messen ob das Timing dann mehr als 10% abweicht. Hannes schrieb: > Kannst du nicht von einer bestehenden PLL noch eine Clock mit > geringfuegig anderer Phase erzeugen, um deine handvoll Signale dann mit > einer zusaetzlichen Flipflop-Stage damit auszugeben? Ich habe meistens > noch 1-2 Abgriffe an den PLLs frei... Das wäre natürlich schöner, vielleicht sollte ich doch einfach eine größere Version des FPGAs mit zusätzlichen PLLs nehmen. Weltbester FPGA-Pongo schrieb im Beitrag #6022019: > Fitzebutze schrieb: >> Das geht locker, in dem Bereich sauen dir externe Parameter nicht rein. > doch das tun sie > > und das ist auch nicht nötig weil die ios auf 50ps genau zu trimmen sind Ich verstehe leider nicht, was Du damit meinst. Hannes schrieb: > Es ist meistens sehr sinnvoll, Ausgaenge nur aus synchronen Schaltungen > (FD, ODDR, OSERDES u.ae.) zu treiben, da ansonsten interne Zustaende der > LUTs bei einem Zustandsuebergang direkt nach draussen gehen. Das sollte doch kein Problem sein, wenn man zwischen Ausgang und synchronem Flipflop nur z.B. eine carry-chain ohne komplexe LUTs hat, oder? Fitzebutze schrieb: > Da findest du einiges > offenes Material im Netz (Stichworte CERN, Szintillationsmessung, TDC). > Nehme mal an, dass du dein FPGA - ich vermute jetzt mal Alterafabrikat - > gut kennst, ebenso deine Tools um die Zellen zu plazieren. Genau weil dort mit solchen Methoden gearbeitet wird, hatte ich hier die Frage gestellt. Ich war mir jetzt unsicher ob man Intels explizite Warnung unter gewissen Umständen misachten kann.
Klar kann man nur muss dir bewusst sein das es auch nach hinten losgehen kann wenn durch Temperatur und andere Einflüsse das Timing um die Ohren fliegt. Ich hatte zu letzt ein ähnliches Problem. 5V TTL Gatter mußten ersetzt werden und das delay der zwei Buffer auf bzw von 3.3V waren zu langsam um den Takt der vorher über ein Buffer lief zu invertieren. Die PLL kahm nicht mit den 5MHz zurecht und ich habe den Takt dann über interne Lut's um 360 Grad minus 8ns verschoben. Da der vorherige line Driver als Inverter genutzt schon ein großes Fenster hatte was das Timing angeht hatte es funktioniert. Wenn es bei dir um +/-200ps geht musst du schon schauen welche Gatter Laufzeiten dein FPGA hat. Der Spartan 7 hat bei einer LUT etwas über 250ps plus die Verbindungslänge an Laufzeit. Wenn du alle Toleranzen einrechnest und in deiner Toleranz bleibst Why not?
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.