Forum: FPGA, VHDL & Co. Frage zu IFD Delay


von Anguel S. (anguel)


Lesenswert?

Hallo!

Kann mir bitte jemand erklären, wozu genau die IFD Delay Einstellung 
(Spartan 3A) gut sein soll? Werde aus dem UG nicht wirklich schlau, in 
welchen Fällen man das Delay nutzt. Danke!

Grüße,
Anguel

von Christian R. (supachris)


Lesenswert?

Das IFD Delay wirkt, wenn du ein IFF am Eingang hast, und ist da, um die 
Verzögerung zwischen Datenleitungen und der Taktleitung im FPGA 
auszugleichen. Bei einem Source-Synchronen Design mit Nutzung des DCM 
kann man das IFD_DELAY_VALUE auf Null setzen, weil der DCM so gemacht 
ist, dass er diese internen Verzögerungen schon ausgleicht. Ansonsten 
setzt ISE das meistens automatisch. Problematisch wird das bei knappen 
Constraints, da kann es schon mal sein, dass das zuviel Delay ist. Daher 
am besten DCM verwenden und IFD Delay auf 0 setzen.

von Anguel S. (anguel)


Lesenswert?

Christian R. schrieb:
> Das IFD Delay wirkt, wenn du ein IFF am Eingang hast, und ist da, um die
> Verzögerung zwischen Datenleitungen und der Taktleitung im FPGA
> auszugleichen.

Danke für die Erklärung Christian! Ich versuche einen externen A/D 
Wandler anzusteuern. Ich habe ein IFF am seriellen Dateneingang zum 
FPGA. Ich erzeuge außerdem in meinem FPGA alle SPI Signale für den 
A/D-Wandler (alle in IOB FFs), auch SCLK, der meinem FPGA Clock von 56 
MHz entspricht. Nun ist das jedoch so, dass die über SDO vom ADC zum 
FPGA zurückkommenden seriellen Daten nur noch 3 ns nach der SCLK 
Flanke bei der ich sample mit Sicherheit valide sind. Jetzt sehe ich 
aber, dass mir die Tools meinem Eingangs-IOB ein IFD Delay von 5 
zugewiesen haben. Deshalb frage ich mich, ob ich das Delay auf 0 ändern 
soll oder nicht? DCM nutze ich nicht.

von Christian R. (supachris)


Lesenswert?

Also eine Hold-Time von 3ns? Das reicht doch dicke. Die internen FF 
haben meist kleiner 1ns erforderliche Hold-Time. Kannst das Delay auch 
auf 0 setzen, denn bei der Anwendung muss ja zwischen dem Takt und den 
Daten nix ausgeglichen werden, denn den Takt stellst du ja selbst zur 
Verfügung. Aber wenn du das Delay auf 0 setzt, wird die Hold-Time ja 
eher kleiner. Also wenn alles funktioniert, würd ich das erst mal so 
lassen. Dummerweise lassen sich da keine OFFSET IN Constraints angeben, 
die brauchen immer einen externen CLK.

von Anguel S. (anguel)


Lesenswert?

Christian R. schrieb:
> Also eine Hold-Time von 3ns? Das reicht doch dicke. Die internen FF
> haben meist kleiner 1ns erforderliche Hold-Time. Kannst das Delay auch
> auf 0 setzen, denn bei der Anwendung muss ja zwischen dem Takt und den
> Daten nix ausgeglichen werden, denn den Takt stellst du ja selbst zur
> Verfügung. Aber wenn du das Delay auf 0 setzt, wird die Hold-Time ja
> eher kleiner. Also wenn alles funktioniert, würd ich das erst mal so
> lassen. Dummerweise lassen sich da keine OFFSET IN Constraints angeben,
> die brauchen immer einen externen CLK.

Ich hatte nur befürchtet, dass dieses IFD Delay von 5 irgendwie dazu 
führen könnte, dass meine Daten dann vom Sampling-Zeitpunkt aus gesehen 
etwas mehr als 4 ns später am Eingangs-FF ankommen (da IFD von 5 laut 
http://forums.xilinx.com/t5/Spartan-Family-FPGAs/Demystifying-the-IBUF-DLY-ADJ/m-p/26579#M1999 
zu einer Verzögerung von über 4 ns führt). Und somit dachte ich, dass 
ich dann die 3 ns Hold Zeit des Wandlers um ca. 1 ns verpasse. Oder 
mache ich einen Denkfehler?

von Duke Scarring (Gast)


Lesenswert?

Du hast ja nur ein Problem, wenn sich Daten und Clock gleichzeitig 
ändern (bzw. die Daten zu kurz vor dem Takt). Wenn Du ein Delay 
brauchst, dann am ehesten auf der Taktleitung, damit die Daten schon 
stabil sind, wenn der Takt kommt.

Duke

von Anguel S. (anguel)


Lesenswert?

Duke Scarring schrieb:
> Du hast ja nur ein Problem, wenn sich Daten und Clock gleichzeitig
> ändern (bzw. die Daten zu kurz vor dem Takt). Wenn Du ein Delay
> brauchst, dann am ehesten auf der Taktleitung, damit die Daten schon
> stabil sind, wenn der Takt kommt.

Also sollte ich das IFD Delay doch manuell auf 0 setzen? Ich versuche 
meine Gedanken nochmal zu präzisieren: Ich benutze ja den gleichen FPGA 
Clock einmal für die Erzeugung des SCLK zum ADC und dann wieder zum 
Samplen der ADC Daten im FPGA. Das SCLK Signal zum ADC erzeuge ich über 
ein ODDR2 FF. Über SCLK bestimmt der FPGA Clock indirekt, wann mir der 
ADC die Daten zur Verfügung stellt. Diese ADC Daten muss ich dann 
innerhalb von 3 ns nach der SCLK Flanke im FPGA gesamplet haben, da sie 
danach nicht mehr valide sind. Dieses Samplen im Eingangs-IOB-FF 
geschieht wieder mit dem selben FPGA Clock. Nur dass mir die Tools am 
Dateneingang des IOB FFs per Default dieses Delay von 5 vorgeben. 
Irgendwie bin ich mir jetzt nicht sicher, ob mir dieses Delay eher 
hilft, die 3 ns Hold-Zeit des ADC einzuhalten oder eher dazu führt, dass 
ich die validen Daten verpasse.

von Christian R. (supachris)


Lesenswert?

In dem Fall hilft dir ja das zusätzliche Delay, weil die Daten dann 
länger nach der (internen) Flanke des Taktes anliegen. Solange es keine 
Probleme gibt, lass sie lieber drin. Du kannst ja auch mal eine post 
Route Simulation machen, dann sagt dir der Simulator, ob es eine 
Verletzung der Hold-Zeit gibt (musst du aber einstellen, default steht 
der Simulator auf Setup-Zeit).

von Anguel S. (anguel)


Lesenswert?

Ok, danke nochmal für die Hilfe!

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.