Delay-lines in FPGAs

Gast #6021380
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.
Moderator (Firma: Titel) Persönliche Seite #6021403
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...
Gast #6021409
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...
Gast #6021412
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).
Gast #6021614
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.
Gast #6022715
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.
Gast #6024487
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.