Forum: FPGA, VHDL & Co. Delay-lines in FPGAs


von cell (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Hannes (Gast)


Lesenswert?

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

von Achim S. (Gast)


Lesenswert?

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

von Fitzebutze (Gast)


Lesenswert?

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.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

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

von cell (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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