Forum: FPGA, VHDL & Co. Xilinx Timing Constrains


von T. F. (sar)


Lesenswert?

Hallo,

Bei einem Design habe ich folgende Situation:

Es werden synchron zum Takt 4 Ausgangssignale erzeugt. Diese Signale 
werden in einer externen Elektronik verzögert und manipuliert. Die 
Signale werden dann wieder zum FPGA geführt wo die Signale entweder 
direkt wieder ausgegeben werden oder zusammengefasst werden (rein 
kombinatorisch).
1
   Spartan 6   |
2
               |
3
               |    4     +----------+
4
     OUTPUT    +----/---->|          |
5
               |          |          |
6
               |          | SOMETHING|
7
     INPUT     |     4    |          |
8
     +---------+<----/----|          |
9
     |         |          +----------+
10
     |         |
11
     |         |
12
     v         |
13
 +---- --+     |
14
 |       |     |
15
 | comb. | OUT |   2
16
 | logic +---->+---/----> EVALUATION
17
 |       |     |
18
 |       |     |
19
 +-------+     |

Jetzt ist es so, dass nach der Erzeugung der Signale der ganze Pfad 
asynchron zum Takt verläuft, da die Verzögerungen der externen 
Elektronik später von Interesse sind. Deshalb würde ich gerne per 
Constrains erreichen, dass die Pfade im FPGA auch ca. die selben Delays 
aufweisen. Wie macht man das?

Danke,
Stefan

von Dr. Schnaggels (Gast)


Lesenswert?

>dass die Pfade im FPGA

1. Welche Pfade meinst Du?
2. Arbeitet Dein "Something"-Kasten mit einem Takt? Dem FPGA-Takt?

Was genau hast Du eigentlich vor? Nur der Vorstellung wegen ...

von T. F. (sar)


Lesenswert?

Hallo,

Die Signale OUTPUT werden synchron mit dem FPGA Takt über 4 Zähler 
erzeugt und an die Ausgangspins gelegt. Hier wäre das erste mal ein min. 
Delay zwischen den Signalen gewünscht (wenn alle Zähler den selben Wert 
haben).

Der "Something" kasten arbeitet komplett ohne Takt. Besteht aus einem 
Grab aus Transistoren, FETs, ...  Dabei erhalten die Signale 
unterschiedliche Delays, in Abhängigkeit der Messgröße, es bleibt aber 
die Ordnung erhalten also immer Signal 1 vor Signal 2 vor Signal 3 vor 
Signal 4.

Diese Signale füttere ich dann wieder dem FPGA der z.B.: im einfachsten 
Fall nur z.B.: Signal 1 und Signal 3 wieder an die Auswertelektronik 
ausgibt. Das Delay der beiden Signale zueinander sollte aber so gut wie 
möglich erhalten bleiben. Je nach Anwendung wären dann aber auch z.B.: 
kombinationen der Signale wie XOR oder AND denkbar.

Es ist so, dass wenn ich die das Delay der Signale von OUTPUT zu 
EVALUATION momentan messe sind es ca. 24ns wobei der Durchlauf durch 
Something (OUTPUT bis INPUT) ca. 8ns benötigt. Elso gehen mir bei dem 
kombinatorischen Teil grob geschätzt die fehlenden 16ns verlohren. Was 
mich für eine IN -> XOR -> OUT Konfiguration sehr wundert. Und denke mir 
mit Constrains kann ich diesen Teil optimieren.

Danke

von Dr. Schnaggels (Gast)


Lesenswert?

Du könntest den Teil, der im FPGA getaktet ist, bei der Ausgabe mit 
Ausgansgsregistern in den IO-Zellen versehen.

(Wie schnell ist der Takt?)

Du könntest die kombinatorische Logik nahe an den FPGA-IOs platzieren, 
dafür gibt es Constraints (muss Du mal suchen, Stichwort "placement"). 
Natürlich gibt es eine Mindest-Verzögerungszeit von Pin-nach-Pin im 
FPGA, sollte im FPGA-Datenblatt stehen. Diese ist fest. Hinzu kommt das 
Logik-Routing. Durch die Rand-Platzierung sollte es kürzer und 
deterministischer ausfallen.

von Fpgakuechle K. (Gast)


Lesenswert?

Stefan S. schrieb:
Deshalb würde ich gerne per
> Constrains erreichen, dass die Pfade im FPGA auch ca. die selben Delays
> aufweisen. Wie macht man das?


Garnicht. Falls du wirklich sowas sucht wie, "verzögere signal a um 2,34 
ns (externe Verzögerung)", dann vergiß es. Was realisierbar ist sind 
constraint wie
das Signal a darf höchsten 5 ns von A nach B benötigen.

Vielleicht ist board level deskewing das was du suchst, da braucht es 
aber mehr als nur constraints:

http://www.xilinx.com/support/documentation/application_notes/xapp132.pdf

von HTI (Gast)


Lesenswert?

Stefan S. schrieb:
> Jetzt ist es so, dass nach der Erzeugung der Signale der ganze Pfad
> asynchron zum Takt verläuft,
Wieso? Die Signale werden doch synchron erzeugt, also sind auch deren 
Reaktionen synchron zum Takt, nur eben mit Delay behaftet.

> da die Verzögerungen der externen
> Elektronik später von Interesse sind.
Kapiere ich nicht. Wieso sind die Signale deshalb (a)synchron, weil sie 
"später von Interesse sind"?

Ich denke, Du meinst etwas komplett anderes, als Du geschrieben hast.

> Deshalb würde ich gerne per
> Constrains erreichen, dass die Pfade im FPGA auch ca. die selben Delays
> aufweisen. Wie macht man das?

Welche "Delays" sollen so gross sein, wie welche?

Grundsätzlich kannst Du erstmal nur in der Raster arbeiten, dass der 
FPGA-Takt vorgibt. Alles andere ist unbestimmt und kann nicht direkt 
vermessen werden.

von T. F. (sar)


Lesenswert?

Hallo,

Danke für die Antworten. Der Takt mit dem die Signale generiert werden 
ist irgendwo im Bereich von 40-80MHz und kommt von einer externen 
Quelle. Mit diesem Takt werden 5 Zähler getaktet. Wenn der erste Zähler 
einen einstellbaren Stand erreicht werden die anderen 4 Zähler gestartet 
und erzeugen dann, nach erreichen eines einstellbaren Zählstandes, ein 
high an ihren Ausgängen welches die 4 Ausgangssignale sind, welche zu 
der externen Schaltung gehen. Dort ergibt sich dann in Abhängigkeit der 
Messgröße ein Delay von ca. 1ns bis 70ns jedoch für alle 4 Signale 
unterschiedlich. Dieses Delay der einzelnen Signale ist dann ein Teil 
der zu bestimmenden Information.

Man könnte jetzt direkt diese Delays auswerten, aber je nach Meßeinsatz 
wäre die Information die z.B.: Signal1 XOR Signal2 enthält von Interesse 
und nicht direkt die einzelnen Signale. Da sich diese Verknüpfung ändern 
kann, dachte ich mir es macht Sinn diese Signale wieder dem eh schon 
vorhandenen FPGA zurückzuführen, welcher dann die Verknüpfung 
durchführt. Hätte mir halt erwartet, dass die I/O Delays and Routing 
Delays für die Signalpfade vergleichbar sind und absolut gesehen kürzer 
(sowas um 8ns und nicht 16ns).

Werde mal weiter mit dem Timing Analyzer und PlanAhead spielen.

von Trundle T. (shaheed)


Lesenswert?

Also wenn du einfach nur willst das die 4 Signale +  Takt in etwa 
zeitgleich ohne wirklich messbaren Delay zueinander nach außen gehen, 
also die FPGA-Pins verlassen, dann folgendes machen (für Xilinx): 1.vor 
die Registerdefiniton von den 4 Signalen schreibst du (* IOB="TRUE" *)( 
zumindest in Verilog)
2. Du legst alle 4 Signale (und Takt) in die gleiche Region im ucf-File.

So erreichst du das deine 4 Signale so gut wie zeitgleich den FPGA 
verlassen. Verzögerung sind irgendwo in ps-Bereich. Also für 40-80 Mhz 
irrelevant.

Ps. der Krams ist nicht auf meinem Mist gewachsenen, sondern von nem 
schlauen Kerl ausm Xilinx-Forum, hier der Originalbeitrag:
http://forums.xilinx.com/t5/Implementation/Cannot-constraint-the-OUTPUT-clock-vs-data-the-GUI-says-the/td-p/245310

von HTI (Gast)


Lesenswert?

>2. Du legst alle 4 Signale (und Takt) in die gleiche Region im ucf-File.
Wie ist das gemeint? Sicher sollen die Signale nicht im UCF file nahe 
beieinnander sein, sondern bei den IOS? Das kann man sich aber doch 
nicht aussuchen. (??)

von Trundle T. (shaheed)


Lesenswert?

natürlich in die gleiche IO-Region (mein Spartan 6, hat zum Beispiel 4 
IO-Regionen). Und ich kann schon festlegen wo ich meine IO-s haben will.

von J. S. (engineer) Benutzerseite


Lesenswert?

HTI schrieb:
> Stefan S. schrieb:
> Alles andere ist unbestimmt und kann nicht direkt vermessen werden.

Nun ja, man könnte das schon durchaus hindrehen, bis auf einige 
Bruchteile von Nanosekunden, es erfordert aber ein Eintrainieren der 
Ausgänge und der Eingänge mittels der programmierbaren IOs und damit zum 
Einen eine Schaltung, die eine Referenz und die Eingänge gibt und zum 
Anderen auch die Ausgänge auf justierte Eingänge gibt, damit man das 
komplett in Software im FPGA machen kann. Ist aber ein bissl 
"oversized".

Wenn es Messungen mit reproduzierbaren Ergebnissen sind kann man die 
Ausgänge des FPGAs auf parallele Eingänge legen, die selber noch von 
einem Ausgäng gespeist werden. Damit sind die Eingänge und später die 
Ausgänge trainierbar. Ab dann kann die Messung statistisch erfolgen, 
indem man die Augänge kontinuierlich schiebt. Das ergibt relative 
Ergebnisse zum Takt, die man aber mit einer durch diesen Takt 
gesteuerten Filterung beaufschlagen und damit glätten kann. Die Maxima 
ergeben dann Zeitpunkte, die eine relative Lage zum Messtakt und damit 
wieder einen absoluten Zeitpunkt haben.

Solcherlei Spielchen führen aber am Ende zu einer doch sehr begrenzten 
Genaugikeit, weil die FPGA-Ausgänge nicht die analoge Güte haben, um 
präzise genug zu schalten. Mehr als 1/10 Takt + Taktjitter = ca. 100 ps 
Auflösung bekommt man auch durch noch so viele redundante Messungen 
nicht hin. Um zeitgenaue Messungen weit unterhalb des Taktrasters zu 
machen, müssen die Ausgänge der FPGAs einen schnellen Schalter hinten 
drauf bekommen (GaAs-Transitortypen) dem ein Bandpass-Filter 
vorgeschaltet ist, dass auf die Taktflanke eingestellt ist. Das 
verrinngert zwar die Schaltgeschwindigkeit, präzisiert sie aber 
genügend, um sie reproduzierbar zu machen, weil dann 
NF/Bias-Einstreuungen und HF-EMV weniger wirken. Damit sind 
Schaltgenauigkeiten um den Faktor 10-20 zu verbessern.

Dasselbe macht man nun an den Eingängen: Filter und Schmitt-Trigger. 
Damit wird das Delay insgesamt deutlich grösser, als bei der direkten 
Schaltung, aber erheblich genauer. Wenn man es ordentlich baut, sind 
Schaltvorgänge für grössere Gruppen von Ausgängen bis unter 10ps auf den 
Takt reproduzierbar. Die absolute Genauigkeit, also die Lage des 
Zeitpunktes realtiv zur theoretischen Zeit, hängt dann nur noch am 
FPGA-Takt.

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.