Forum: FPGA, VHDL & Co. Out-DDR-FF bei Xilinx-FPGAs richtig ansteuern


von Markus F. (Gast)


Lesenswert?

Wie erzeuge ich die beiden Takte, mit denen ich die beiden Flanken aus 
dem FF treibe?

Ich habe gesehen, dass einige aus einer PLL nicht einen, sondern zwei 
Takte (einen mit 180 Grad) beziehen und diese auf das FF geben, manchmal 
mit und manchmal ohne BUFG. Braucht man keinen BUFG?

Andererseits wird in manchen Beschreibungen auch komplett auf den 
negierten Takt verzichtet und dieser per Inverter generiert. und auch 
hier wieder mit und ohne Buffer dazwischen.

Was ist wann richtig?

von S. N. (higgns)


Lesenswert?

Die ODDR Primitive hat nur einen Takteingang C.

Die Dateingänge werden bei steigender bzw. fallender Taktflanke 
durchgeschaltet. Es ist nicht notwendig einen zweiten Takt zu 
generieren.

Gruß

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

das hängt - wie so oft - vom konkreten FPGA ab. Der Spartan 6 
beispielsweise hat keine ODDR sondern ODDR2, die mit 2 Takten (oder mit 
einem Takt und lokalem Taktinverter) angesteuert werden.

von Christian R. (supachris)


Lesenswert?

Wenn der negierte Takt einzig an das ODDR2 geht, kann das mit dem 
lokalen Inverter gemacht werden, ich hab das auch oft so, Taktausgang 
ist trotzdem OK und keine Timing Probleme.

von FPGA-Ingenieur (Gast)


Lesenswert?

Achim S. schrieb:
> Der Spartan 6 hat keine ODDR sondern ODDR2, die mit 2 Takten
Welchen Grund gab es, für XILINX, das beim Spartan 6 anders zu 
handhaben? Führt der Inverter dann nicht zu einem anderen d.c. als 50%? 
Ok, das wäre meistens wohl nicht relevant, nehme ich an - mur so 
interessehalber.

Christian R. schrieb:
> Wenn der negierte Takt einzig an das ODDR2 geht
Warum nimmt man den negierten?  Um den anderen frei zu haben?

von Christian R. (supachris)


Lesenswert?

Das ODDR2 am Spartan 3 und 6 hat nun mal zwei Takteingänge, die 
beschaltet werden müssen. Bei den Virtex und der 7er Serie ist dann 
wieder nur einer. Wahrscheinlich Sparmaßnahmen.

von Achim S. (Gast)


Lesenswert?

FPGA-Ingenieur schrieb im Beitrag #4335053:
> Welchen Grund gab es, für XILINX, das beim Spartan 6 anders zu
> handhaben?

Wie Christian denke ich auch, dass es dabei um die "ökonomische 
Optimierung" der verschiedenen FPGA-Serien geht. Spartan6-Kunden sind 
daran gewohnt, dass ihr FPGA bei der Genauigkeit der IO-Timings hinter 
anderen herhinkt.

FPGA-Ingenieur schrieb im Beitrag #4335053:
>> Wenn der negierte Takt einzig an das ODDR2 geht
> Warum nimmt man den negierten?  Um den anderen frei zu haben?

Das hast du glaube ich falsch verstanden: man schickt den "normalen" 
Takt zum ODDR2. Dort invertiert man ihn lokal und nutzt die invertierte 
Kopie, um den zweiten Takteingang des ODDR2 zu bedienen. Christian 
meinte, dass der invertierte Takt nur fürs ODDR2 benutzt wird (und nicht 
als Takt für andere Teile des Designs).

von Christian R. (supachris)


Lesenswert?

Genau so. Spartan kommt halt von spartanisch ausgestattet.

von FPGA-Ingenieur (Gast)


Lesenswert?

Achim S. schrieb:
> Dort invertiert man ihn lokal und nutzt die invertierte
> Kopie, um den zweiten Takteingang des ODDR2 zu bedienen. Christian
> meinte, dass der invertierte Takt nur fürs ODDR2 benutzt wird (und nicht
> als Takt für andere Teile des Designs).

Ok, aber wäre es gfs ein Vorteil wegen fan out, den negativen Takt zum 
ODDR2 zu führen und ihn dort zu invertieren?

von Achim S. (Gast)


Lesenswert?

es mag sein, dass die eine Variante ein paar ps Timingvorteil gegenüber 
der anderen hat. Wenn man das wirklich wissen will, muss man halt tief 
in die timing Modelle des FPGAs einsteigen. Und wenn du auf diese paar 
ps angewiesen bist, dann hast du mit dem Spartan 6 den falschen Baustein 
gewählt (wobei noch nicht klar ist, von welchen konkreten Baustein es 
der TO zu tun hat).

Meine Empfehlung: mach dir keinen Kopf über solche hypothetischen 
Fragen. Setze die Timings Constraints so, wie sie benötigt werden, und 
schau, ob sie eingehalten werden können. Wenn ja: pfeiff auf ein paar 
hypothetischen ps.
Wenn nein: versuche das timing der Signalpfade zu verstehen, die zur 
Verletzung der constraints führen, und arbeite an den Parametern, die 
tatsächlich begrenzend für dein Design sind.

von Christian R. (supachris)


Lesenswert?

Für einen ADC ist der Ausgang wegen Jitter sowieso nicht brauchbar, 
alles andere sollte auch mit einem nicht ganz 50:50 Tastverhältnis klar 
kommen. Ich hab jedenfalls gerade da beim S6 keine Probleme. Ansonsten 
ist der halt wirklich Low Cost. Aber tut seinen Dienst, wenn man um die 
Bugs und Clocking Sachen herum schiffen kann. Für neue Designs nehmen 
wir aber nur noch die 7er Serie.

von J. S. (engineer) Benutzerseite


Lesenswert?

Christian R. schrieb:
> alles andere sollte auch mit einem nicht ganz 50:50 Tastverhältnis klar
> kommen.

Solange es nicht DDR ist, definitiv.

FPGA-Ingenieur schrieb im Beitrag #4335897:
> Ok, aber wäre es gfs ein Vorteil wegen fan out, den negativen Takt zum
> ODDR2 zu führen und ihn dort zu invertieren?

Theoretisch könnte es so sein, dass dieser Takt, weil er einen 
geringeren fan out hat, mit weniger Verzögerung daher kommt, aber wenn 
das Timing im Chip getroffen wird, bleibt es sich gleich. Der Grund, den 
Takt aus einem eigenen Zeig der PLL kommen zu lassen, ist meist ein 
anderer, nämlich der, dass der Takt gegen die Daten etwas verschoben 
werden muss und die beiden Optionen 0 Grad und 180Grad, die das DDR-Reg 
bietet, nicht reichen.

von P. K. (pek)


Lesenswert?

Ich kämpfe schon auf viel weiter unten. Welches Vivado-IP muss ich 
nehmen, um ein ODDR zu erhalten (Ersatz für Altera altddio_out)?

von Achim S. (Gast)


Lesenswert?

ODDR wird nicht als IP-Core implementiert. Du kannst es einfach direkt 
instanziieren. Im Libraries Guide gibt es entsprechend 
Instanziierungs-templates, die du in deinen Code kopieren kannst.

von Michael W. (Gast)


Lesenswert?

Das geht aber auch direkt aus ISE oder Vivado mit dem Templates-Tab.

von P. K. (pek)


Lesenswert?

Achim S. schrieb:
> Im Libraries Guide gibt es entsprechend
> Instanziierungs-templates, die du in deinen Code kopieren kannst.

Funktioniert tipp-topp. Nur schade, dass lediglich ein 
Instanziierungs-Template vorhanden ist (und man die zu verwendenden 
Typen mangels Entitydefinition erraten muss).

von Markus F. (Gast)


Lesenswert?

Dafür gibt es einen Library-Guide.

Nur ist in dem eben nicht erwähnt, wie man es sinnvoll schließt. Daher 
meine Frage.

von Christian R. (supachris)


Lesenswert?

Der Anschluss sollte doch klar sein....was soll man da groß beschreiben? 
Ich glaube im Spartan 3 User Guide war da mal ein Bild drin.

von Markus F. (Gast)


Lesenswert?

Es ging um den Anschluss der Clock-Pins. Mit Buffer oder Ohne, aus PLL 
oder per Inverter.

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.