Ich schreibe den Beitrag, weil ich inzwischen ein grundsätzliches Verständnisproblem habe: Hier Beitrag "doppelt schnell synchronisieren" haben wir über Synchronsiation mit DDR-Zellen am Ausgang gesprochen. Bislang war mit das nur bekannt, daß man die nutzen kann/muss, um z.B. einen Takt rauszugeben. Nun habe ich aber mal testweise keine Zellen verwendet und komme (mit einer Warning) trotzdem hin: Systemtakt raus und es klappt! Wieso brauche ich jetzt noch die DDR-Zellen? Und wie verhält sich das mit der Verdrahtung? Die Zellen am Ausgang eines Pins brauchen ja bei Nutzung einer DDR-Zelle ein Clocknetz an der Zelle. Wie geht es dann in Richtung Pin ? Ich hatte mir überlegt, gleich das Clocknetz über einen Buffer rauszugeben, der im Pin sitzt.
Der Haupteinsaztzweck der DDR IOs ist zum anbinden von DDR(2)-SDRAM. Und nicht fuer den Takt sondern den Daten, da die ja eben bei positiver und negativer Taktflanke wechseln -> ergo doppelte Datenrate. Macht ja sonst keinen Sinn.
Die DDR-Zellen bekommen das DDR-Timing garantiert und ohne großen Aufwand richtig hin. Bei "selbstgebautem" DDR müsstest du die beiden Pfade einzeln verfolgen und sicherstellen, dass alles wasserdicht ist. Ansonsten: Klar geht es sicher auch anders, aber warum? Genauso wie du wissen willst, warum man DDR-Zellen dafür nimmt, könnte ich fragen, warum man Logikzellen nehmen sollte. Und letztere sind nicht mal für DDR-Behandlung gedacht.
Hallo. Xilinx empfiehlt einen Takt über Pins im DDR Mode auszugeben. Hierbei wird der Takt an das Register in dem Outputbuffer des Pins angeschlossen. Die beiden Dateneingänge des DDR Registers werden mit 1 und 0 belegt. Bei einer steigenden Taktflanke wird am Buffer 1 und bei einer fallende 0 ausgegeben. Der Vorteil ist, dass das Taktnetzwerk an einem Takteingang eines Registers endet und dass der Ausgang des Outputbuffers von einem Register getrieben wird. Das beides zusammen garantiert eine minimale Verzögerungszeit für die Flanken des Taktsignal. Die Verzögerung liegt vielleicht so 1 bis 2ns für nen Virtex 4/5. Gibt man zusätzlich zum Takt auch Daten aus, die idealer Weise auch von den Registern der IOBs gebuffert werden, so sind Takt und Daten an den Pins synchron zueinander. Gruß DaMicha.
So hatte ich mir das auch überlegt, weil der interne Takt ja schneller
ist und früher käme, als die Daten aus den zugehörigen Registern.
>Xilinx empfiehlt ...
Das ist aber deshalb kein Xilinx-spezifisches Problem, oder?
Wie instanziiert man DDR2-Zellen bei Xilinx? ich kenne es nur vom Megawizzard bei Altera, der eine Zelle bereitstellt. Beim CoreGen finde ich aber nichts. Ich denke, dass es eine Buffer-Primtivie ist, habe aber die Hilfen und Dokumente ergebnislos durchsucht, wie schon so oft bei Xilinx. Wo könnte man da was finden?
Fragi schrieb: > Wie instanziiert man DDR2-Zellen bei Xilinx? ich kenne es nur vom > Megawizzard bei Altera, der eine Zelle bereitstellt. Beim CoreGen finde > ich aber nichts. CoreGen ist ja auch die völlig falsche Stelle. Hier geht es um ein FlipFlop-Primitiv der IO-Zellen, namens ODDR2. Schau einfach im LibrariesGuide der entsprechenden FPGA-Familie nach, da ist das beschrieben. Inclusive einem Template für die Instanziierung, hier z.B. aus dem Spartan-6 Libraries Guide for HDL Designs (Dokument UG615):
1 | Library UNISIM; |
2 | use UNISIM.vcomponents.all; |
3 | -- ODDR2: Output Double Data Rate Output Register with Set, Reset
|
4 | -- and Clock Enable.
|
5 | -- Spartan-6
|
6 | -- Xilinx HDL Libraries Guide, version 13.4
|
7 | ODDR2_inst : ODDR2 |
8 | generic map( |
9 | DDR_ALIGNMENT => "NONE", -- Sets output alignment to "NONE", "C0", "C1" |
10 | INIT => '0', -- Sets initial state of the Q output to '0' or '1' |
11 | SRTYPE => "SYNC") -- Specifies "SYNC" or "ASYNC" set/reset |
12 | port map ( |
13 | Q => Q, -- 1-bit output data |
14 | C0 => C0, -- 1-bit clock input |
15 | C1 => C1, -- 1-bit clock input |
16 | CE => CE, -- 1-bit clock enable input |
17 | D0 => D0, -- 1-bit data input (associated with C0) |
18 | D1 => D1, -- 1-bit data input (associated with C1) |
19 | R => R, -- 1-bit reset input |
20 | S => S -- 1-bit set input |
21 | );
|
22 | -- End of ODDR2_inst instantiation
|
> Ich denke, dass es eine Buffer-Primtivie ist, habe aber die Hilfen und > Dokumente ergebnislos durchsucht, wie schon so oft bei Xilinx. Es ist ein Flip-Flop Primitiv. Kein Buffer. Wenn es um (wie Du schon richtig vermutetest) Primitiva geht, stets das zum benutzten FPGA passende "Libraries Guide" durchsuchen. Eine einfache Suche darin nach dem Begriff "DDR Flip-Flop" führt direkt zu den Primitiva IDDR2 und ODDR2. Selbst eine Suche nach "DDR" braucht nur wenige Mausklicks mehr... BTW: Du weißt schon, daß Xilinx einen globalen Suchindex mitliefert, mit dem sich in sämtlichen PDF-Dokumenten, die die ISE-Installation mitbringt, dokumentübergreifend suchen läßt? Muß man nur im Adobe-Reader eintragen... Gruß, Thorsten
Ich habe jetzt selber die LIB durchsucht und bin auf den hier gekommen: "OFDDRRSE". Die Instanz sieht änhlich aus, wie oben. Einen "ODDR2" gibt es da nicht. Thorsten S. schrieb: > Eine einfache Suche darin nach dem Begriff "DDR Flip-Flop" führt direkt > zu den Primitiva IDDR2 und ODDR2 Ich habe nach DDR FF gesucht und auch Flip Flop, bei mir findet die Suche nichts. Welches Dokument benutzt du? Thorsten S. schrieb: > BTW: Du weißt schon, daß Xilinx einen globalen Suchindex mitliefert Wo und wie? Ich habe den Xilinx Documentmanager und auch die Hilfe konsultiert. Wenn man mal bei ISE (14.1) search oder den index nutzt, ist unter DDR2 weit und breit nichts zu finden, jedenfalls kein FF.
Fragi schrieb: > Ich habe jetzt selber die LIB durchsucht und bin auf den hier gekommen: > "OFDDRRSE". Die Instanz sieht änhlich aus, wie oben. Ok, Du benutzt offenbar einen Spartan-3 oder etwas aus vergleichbarer Generation... Da gibts kein ODDR2 sondern verschiedene OFDDRxxxx In neuern Xilinx FPGAs gibts stattdessen ODDR2. Ich bezog mich (wie übrigens bereits im letzten Post erwähnt) auf Spartan-6 > Ich habe nach DDR FF gesucht und auch Flip Flop, bei mir findet die > Suche nichts. Welches Dokument benutzt du? Ok. Wenn eine Suche gar nix liefert, ist ein Hauch Kreativität gefragt. Normalerweise erstmal, indem man den Suchbegriff abspeckt. Mit Suche nach "DDR" hast Du ja die entsprechenden Teile gefunden. > Thorsten S. schrieb: >> BTW: Du weißt schon, daß Xilinx einen globalen Suchindex mitliefert > Wo und wie? Den Suchindex installiert die ISE normalerweise unter [Xilinx-Dir]\ISE_DS\ISE\doc\usenglish\isehelp\search dort liegt eine *collection.pdx* zum Installieren im Adobe-Reader und der eigentliche Index in einem Unterverzeichnis. Im Adobe-Reader öffnest Du die Erweiterte Suche (mit Klick auf den Fernglas-Button). Im dann offenen Suchfenster wählst Du zuerst unten "Mehr Optionen anzeigen" und dann unter "Suchen in:". Dort wählst Du "Index auswählen...", woraufhin sich ein Fenster Indexauswahl öffnet. Dort klickst Du rechts auf den Button "Hinzufügen" und wählst dann dort die Datei *collection.pdx* in dem oben genannten Pfad aus. Der Index steht jetzt im Adobe-Reader zur Verfügung. Danach kannst Du in der erweiterten Suche den Index als Punkt unter "Was soll durchsucht werden?" auswählen. Um einmalig im Index zu suchen reicht auch ein Doppelklick auf *collection.pdx* im Explorer. (oder auf eine auf den Desktop gelegte Verknüpfung darauf). OK, wie ich soeben feststelle, hat Xilinx den Index anscheinend abgespeckt... Die ISE_13.1 enthielt noch die Libraries Guides sämtlicher aktueller Familien, bei ISE_13.4 fehlen die Libraries Guides und der Index ist nur noch 1/4 so groß wie bei der 13.1 Die Umstellung auf 14.1 hab ich mir allerdings noch nicht angetan. Kann also nichts dazu sagen, wie umfangreich die mitgelieferten PDF-Dokus noch sind. Befürchte allerdings, daß Xilinx den Umfang der mit dem Installer mitgelieferten PDFs reduziert hat, um die Größe zu verringern... Aber die aktuellen Versionen passen eh auf keine DVD mehr, also was soll der Geiz. ;-) Schade eigentlich... Zurück zum Thema: Ich kann Dir nur raten, Dich mit der Architektur des von Dir benutzten bzw. zu benutzenden FPGAs intensiv zu beschäftigen. D.h. sämtliche UserGuides und das Datenblatt lesen und verstehen. In den UserGuides sind alle Ressourcen des FPGAs beschrieben. Infos zu den I/O-Zellen und ihren Möglichkeiten findest Du im entsprechenden UserGuide unter dem Stichwort IOB bzw. Select I/O. Wie man bestimmte Ressourcen korrekt benutzt, initialisiert usw. steht alles in den User Guides. (bei älteren FPGA-Familien gibts nur eins, bei neueren ist das aufgespalten worden auf die einzelnen Ressourcen...) Wenn es dann um konkrete Fragen der Instanziierung geht -> Nachschlagen im Libraries Guide. Hatte bislang nie Probleme, die benötigten Informationen so zu finden. Gruß, Thorsten
Thorsten S. schrieb: > Mit Suche nach "DDR" hast Du ja die entsprechenden Teile gefunden. nö, "DDR" liefert fast nichts. Thorsten S. schrieb: > Den Suchindex installiert die ISE normalerweise unter > > [Xilinx-Dir]\ISE_DS\ISE\doc\usenglish\isehelp\search > > > > dort liegt eine *collection.pdx* zum Installieren im Adobe-Reader > > und der eigentliche Index in einem Unterverzeichnis. DAS! ist mal ein Tipp, werde ich versuchen. Noch eine Frage: >C0 => C0, -- 1-bit clock input >C1 => C1, -- 1-bit clock input ich habe an c1 den negierten Takt angelegt. Das will er nicht, sondern empfiehlt, einen buffer zu nehmen. Ich denke, es ist besser, ich lasse mir aus der DCM noch einen negierten Takt geben, oder? Ich finde das bei Xilinx extrem lästig und kompliziert, sowohl die Suche, als auch das Designen. Bei Altera braucht es keinen zweiten Takt.
FPGA-Sultan schrieb im Beitrag #871453: > Nun habe ich aber mal testweise keine Zellen verwendet und komme (mit > einer Warning) trotzdem hin: Systemtakt raus und es klappt! Wieso > brauche ich jetzt noch die DDR-Zellen? Wenn du die Warnung richtig liest, merkst du sogar, dass dann das gesamte Taktnetz nicht mehr sinnvoll geroutet werden kann, denn um auf den IO-Pin direkt zu kommen, muss der gesamte Takt in ein langsames Logik-Netz verlegt werden. Daher die Sache mit dem ODDR. Fragi schrieb: > Ich finde das bei Xilinx extrem lästig und kompliziert, sowohl die > Suche, als auch das Designen. Bei Altera braucht es keinen zweiten Takt. KOmmt drauf an welchen FPGA man nimmt. Der ODDR am Virtex 4 braucht auch keinen 2. Takt. Generierung mit DCM ist im Zweifelsfall besser, es geht aber (zumindest Beim Spartan 3e, 6...) auch mit einer einfachen Negierung des CLK-Signals. Laut User Guide wird dann der auf dem IOB befindliche Clock-Inverter genutzt (der auch für falling_edge genommen werden kann), das schadet dem Clock-Netz nicht. Solche Sachen lernt man halt erst mit der Zeit, gerade solche Spezialitäten sind ja wirklich bei jedem Hersteller anders. Und die Bedienbarkeit...nunja, da kann Xilinx wirklich noch einiges verbessern. Ich arbeite sehr viel mit Eclipse und Veditor mittlerweile, nach dem Aufsetzen des Projektes lasse ich das meistens über die Command Line Tools generieren.
Fragi schrieb: >> Den Suchindex installiert die ISE normalerweise unter [...] >> >> dort liegt eine *collection.pdx* zum Installieren im Adobe-Reader >> und der eigentliche Index in einem Unterverzeichnis. > DAS! ist mal ein Tipp, werde ich versuchen. Es gibt inzwischen ein eigenes Programm/Tool für die Dokumentation: Xilinx Documentation Navigator (DocNav) [1] Es benötigt Adobe Air und ist leider nur für Windows. Insgesamt macht es einen ganz brauchbaren Eindruck, wenn man sich erstmal mit der Bedienung etwas angefeundet hat. Duke [1] http://www.xilinx.com/support/documentation/navigator/xilinxdocnav_win.zip
Es geht weder des eine noch das andere. Ich bekomme einen Mapping error, wenn ich aus der DCM den 180 Grad Takt entnehmen will.
Dann sind vielleicht alle internen Taktnetze bzw. BUFG-Netze schon verbraucht. Wie viele Takte hast du denn in deinem Design, und was ist die Meldung aus dem Mapper?
Er hat wohl insgesamt ein Grossenproblem. Die BRAMs werden nicht gemappt. Wenn ich z.B. ein Register-RAM weglasse oder den ChipsScope verkleinere, mappt er es: Das Design läuft durch. Ich habe nur noch keine praktisch Bestätigung der ODDR2-Funktion, kann da momentan nichts messen. Die Takte kommen aber wohl in 180 Grad, wie ich im Chips Scope sehe, sollte also gehen. Verwunderlich ist für mich nur, dass nun, durch die Hinzunahme des zusätzlichen Taktes in Verbindung mit dem DDR, das Design aufgrund der BRAMs übermapped sein sollen. Das war ohne das DDR und den Takt nicht der Fall. Seltsam! Ich habe jetzt übrigens ein "ODDR2" genommen und nicht das OFDDRRSE, das ich zunächst gefunden habe, scheint aber keinen Unterschied zu machen.
Was sagt denn die Simulation? Vielleicht liegts einfach an den ausgehenden Routing-Ressourcen, dann solltest du vielleicht lieber den lokalen Inveter für den 180° Takt nutzen.
Ich danke Dir schon mal herzlich. für Deine Mühe. Es scheint eine qualitative Auslastung des Chips zu sein, ein bissl das falsche Signal ins ChipsScope und es geht nichts mehr. Ich sample dort u.a. externe Daten einer anderen Domain ab, gfs ist es das. Keine Ahnung! Christian R. schrieb: > Was sagt denn die Simulation? Vielleicht liegts einfach an den > > ausgehenden Routing-Ressourcen, dann solltest du vielleicht lieber den > > lokalen Inveter für den 180° Takt nutzen.Beitrag melden Bearbeiten Löschen die Simulation is bestens den lokalen Inverster würde ich nehmen, weiss aber nicht, wie ich das buffern soll. Ich meinte eigentlich,dass ich einen BUFG nehmen müsste, aber es haut nicht hin. Brauche ich zwei? Einen vor und einen hinter dem Inverter? Das MAPing sagt (wie erwartet), ich darf mit dem Takt keine direkte Logik treiben (den inverter).
Fragi schrieb: > den lokalen Inverster würde ich nehmen, weiss aber nicht, wie ich das > buffern soll. Ich meinte eigentlich,dass ich einen BUFG nehmen müsste, > aber es haut nicht hin. Um welches FPGA gehts denn bri dir jetzt? Irgendwie ist das hir langsam etwas durcheinander. Beim Spartan 3e kann man zumindest einfach den Takt über "not" negieren und an C1 anschließen. Da braucht man weder davor noch dahinter einen Buffer. Siehe UG331, Seite 116 und dann nochmal auf Seite 328 ff. Da steht dass es geht, aber eben Verzerrungen geben kann, wenn der Takt hoch ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.