Forum: FPGA, VHDL & Co. Xilinx ISE8.1 - Spartan3e - timing constraints Frage


von Martin Kohler (Gast)


Lesenswert?

Hallo Forum,
Da sich in diesem Forum diverse VHDL-Experten tummeln wage ich es
einmal mit einer Frage.

Zu VHDL bin ich als Quereinsteiger gekommen, d.h. ich habe Designs vom
Kollegen übernommen, der die Firma verlassen hat.
VHDL von der Vorgehensweise habe ich mittlerweile einigermassen im
Griff.
Probleme bereiten mir im Zusammenhang mit der Implementation aber die
Timing Constraints resp. deren genaue Bedeutung.
Der Kollege hatte sein Modell komplett synchron aufgebaut, mit externem
32MHz (T=31.25ns) Clock, welcher intern auf 64MHz (T=15.625ns)
verdoppelt wurde. Clock-Input = "OB_CLK"
System: ISE6.3.03i, Spartan2 XC2S100-6-PQ208
Seine Timing Constraints sahen so aus:
----------------------------------------
# Timing
NET "OB_CLK" TNM_NET    = "OB_CLK";
TIMESPEC "TS_OB_CLK"    = PERIOD "OB_CLK" 28 ns HIGH 50 %;
OFFSET                  = IN 14 ns BEFORE "OB_CLK";
OFFSET                  = OUT 14 ns AFTER "OB_CLK";
TIMESPEC "TS_P2P"       = FROM "PADS" TO "PADS" 14 ns;
----------------------------------------
Die 14ns wurden anscheinend gewählt, um auf die Limite von 15.625ns
eine Reserve zu haben.
Sind/waren diese Constraints so richtig für ein komplett synchrones
Design, bei welchem alle In- und Outputs abgecklockt werden?

Bei meinem Design soll nun der externe Clock direkt verwendet werden
(kein Verdoppler), auch hier wird das Modell komplett synchron
aufgebaut. externe und interne Taktfrequenz bei diesem Modell: 48MHz
(T=20.833ns), Clock-Input = "uC_CLK"
System: ISE8.1i - Spartan3 - XC3S250E-4VQ100
Nach meinem Wissen müssten die Timing Constraints dann so aussehen
----------------------------------------
# Timing
NET "uC_CLK" TNM_NET    = "uC_CLK";
TIMESPEC "TS_uC_CLK"    = PERIOD "uC_CLK" 18 ns HIGH 50 %;
OFFSET                  = IN 18 ns BEFORE "uC_CLK";
OFFSET                  = OUT 18 ns AFTER "uC_CLK";
TIMESPEC "TS_P2P"       = FROM "PADS" TO "PADS" 18 ns;
----------------------------------------
Hier würde also eine Reserve von 2.833ns resultieren, richtig?

Kann mir jemand die Richtigkeit meiner Annahmen bestätigen oder mir
beim Finden der richtigen Angaben behilflich sein?

Vielen Dank im Voraus!
Martin
email: mkohler[ätt]kern[punkt]ch

von Klaus Falser (Gast)


Lesenswert?

Du solltest bei Xilinx die Dokumentation zu den Constraints durchlesen,
ist gar nicht so schlecht erklärt.

In Deinem Fall hast Du 4 Constraints mit unterschiedlichster Wirkung.

Das PERIOD Constraint ist das wichtigste und sagt dem Tool die
Arbeitsfrequenz. In Deinem Fall (48 MHz) kannst Du ruhig 20 ns als
Periodendauer angeben, die Tools arbeiten eher konservativ. Also :
TIMESPEC "TS_uC_CLK"    = PERIOD "uC_CLK" 20 ns HIGH 50 %;

Die OFFSET Constraints beziehen sich nur auf die Ein- und Ausgänge, und
haben mit der Arbeitsfrequenz nichts zu tun.
OFFSET IN sagt daß die Eingänge 18 ns vor der Taktflanke stabil sind,
daß das FPGA also eine Setup-Zeit von 18 ns zur Verfügung hat.
Das hängt von der Peripherie zu deinem FPGA ab.
Ob das bei deiner Schaltung wirklich so ist, kannst nur Du wissen, bei
einer Taktperiode von 20 ns kommt mir eine Setup-Zeit von 18 ns eher
unwahrscheinlich hoch vor und wird von einem modernen FGPA auch nicht
benötigt.
OFFSET OUT bedeutet, dass die gültigen Ausgangswerte erst 18 ns nach
der Taktflanke an den Pins erscheinen müssen, weil die dem FPGA
nachgeschalteten Chips diese erst dann übernehmen. Ob dies so ist,
hängt wiederum nur von Deiner Schaltung ab.
Wenn der nachfolgende Baustein synchron mit dem FGPA arbeitet und an
der selben Falke die Daten übernimmt, dann hat er im schlimmsten Fall
nur 2 ns Setup-Zeit (=recht wenig).
Die OFFSET Constraints geben aber nur Maximalzeiten an. Die effektiven
Setupzeiten werden meist niederer sein, ebenso werden die Ausgänge oft
schneller sein.

Das letzte Constraint ist nur für kombinatorische Logik, also für alle
Signale, die von Eingängen zu Ausgängen gehen, ohne über FF zu gehen.
Ein Beispiel wäre z.B. ein Adress-Dekoder.
Wahrscheinlich gibt es in deinem Design gar keine solchen Signale.

Grüße
Klaus

von Martin Kohler (Gast)


Lesenswert?

Hallo Klaus,
Vielen Dank für die kompetente Antwort.
Du hast dieses Xilinx-Dokument gemeint?
ftp://ftp.xilinx.com/pub/documentation/misc/timingcsts6i.pdf

Ich werde dieses mal durchgehen und melde mich sonst bei weiteren
Fragen wieder.

Gruss, Martin Kohler

von Axel (Gast)


Lesenswert?

"In Deinem Fall (48 MHz) kannst Du ruhig 20 ns als
Periodendauer angeben, die Tools arbeiten eher konservativ."

Das halte ich für eine gewagte Aussage. Sicher wird das auf dem
Testboard funktionieren, wo normalerweise Raumtemperatur und optimale
Spannungsverhältnisse herrschen.

Bei höheren Umgebungstemperaturen wird der Chip aber langsamer und der
im Labor funktionierende Baustein hat dann im Feld unerklärliche
Ausfälle.

Von daher neige ich eher dazu, dass eher knapper zu kalkulieren und
erst bei Problemen (z. B. Baustein zu klein, oder Timing nicht
erreichbar) zu schauen, wie weit man gehen muss.

Die OFFSET Zeiten halte ich auch für sehr hoch, eigentlich sollten
Daten, die an den Inputs anliegen, sofort in ein FF gehen, also eher
niedrige Delays haben. Analog gilt das an den Ausgängen. Ich würde
eher Werte um die 5ns nehmen.

Gruss
Axel

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.