Moin, ich hab ein kleines Problem. Ich möchte auf einem Xilinx FPGA (Spartan3/6, steht noch nicht ganz fest) folgendes Implementieren: Mehrere Ausgänge, die Synchron, also ohne/minimalem Delay geschaltet werden. Das System läuft mit einem 200 MHz Clock. D. h. ich habe 5 Signale, die alle zeitlich vom 1 auf 0 geschaltet werden sollen. Das ganze soll dann auch noch so gestaltet werden, dass ein Delay von x-Takten zwischen den Signalen eingefügt werden kann. Soweit so gut, das ganze ist halt mit Zählern Implementiert, da es wie gesagt ein Delay (aber auch eine bestimmte Breite) für die Pulse geben soll. Alles auch soweit kein Problem. Allerdings habe ich teilweise 1-2 ns Delay zwischen zwei Signalen (ungewollt, also wenn die Pulse im gleichen Takt kommen sollen). Ich habe dann mit dem Floorplanner rumgespielt und habs dann auch hinbekommen, dass der Versatz nur noch ca. 100 ps beträgt (das wäre okay). Allerdings eher durch ausprobieren. U. a. habe ich bei den constraints (Pins) IOB=TRUE genutzt und die einzelnen Elemente (Zähler und restliche Logik) für jeden Ausgang möglichst gleich angeordnet, das ganze möglichst nahe am entsprechenden Ausgang. Leichtes verschieben der Logik im FPGA ändert allerdings recht schnell das ganze Verhalten. Das ganze ist mir irgendwie zu willkürlich. Zugegebener Maßen fehlt mir an der Stelle einiges an Hintergrundwissen. Meine eigentliche Frage ist auch eher, ist das prinzipiel für mein Problem das richtige Vorgehen (Floorplanning) und falls nein, was dann?
Hallo, der Spartan6 hat ein iodelay2. Damit kann bei Eingängen eine variable Signalverzögerung und für Ausgänge eine feste Signalverzögerung einstellen. http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_1/spartan6_hdl.pdf Tom
Danke, klingt doch gut. Meine das schonmal gehört zu haben bei einem älteren Spartan. Allerdings hatte ich dann gelesen, dass das nur die Eingänge betrifft. Kann das sein? Beim Spartan6 gehts ja auf jeden Fall auch für Ausgänge, das teste ich mal aus. Wäre auf jeden Fall wenns so geht nen gutes Argument für den 6er ;-)
Vorsicht, die IODELAY am Spartan 6 sind nicht kalibriert und auch nicht temperaturstabil. Da musst du genau aufpassen, ob das dann auch passt.
1 | Different from the Virtex-5 FPGA structures, the |
2 | Spartan-6 FPGA delay is not compensated for either temperature or voltage, though there |
3 | are mechanisms that allow the user to accurately calibrate the delay on an on-going basis. |
Hmmm, klingt gefährlich und ist dann wahrscheinlich schon ein Ausschluss-Kriterium. Ausprobieren werde ich es aber trotzdem.
Ich denke der sicherste Weg sollte die Verwendung der FFs in den IO Blöcken sein. Die Ausgangsignale werden mit dem gemeinsamen Takt in den IOBs nochmal abgetaktet, damit sind sie alle "synchron" (was immer man darunter versteht, aber in jedem Fall in der Größenordung von 100 ps). Die Routing-Delays von intern zu den IOBs spielen dann keine Rolle mehr.
Wenn ich mich nicht täusche macht IOB = TRUE doch genau das, oder? Also im .ucf file z. B. INST "OUT1_O" IOB = TRUE; oder?
> Ich denke der sicherste Weg sollte die Verwendung der FFs in den IO > Blöcken sein. Das würde ich auch sagen. "Synchroner" und vor allem reproduzierbarer geht es auf jeden mit Floorplan-Tricksereien nicht. > Wenn ich mich nicht täusche macht IOB = TRUE doch genau das, oder? Nur, wenn dein Design das hergibt, und tatsächlich ein FF (und nicht eine logische Verknüpfung wie z.B. ein Mux) auf den Ausgang geht. Aber das kann man nur an deinem Code sehen. Evtl. mußt du nochmal alle betroffenen Ausgangssignale über Register leiten...
Hatte ich eigentlich beides gemacht, ich schau mir auch das nochmal genau an. Danke.
> U. a. habe ich bei den constraints (Pins) IOB=TRUE genutzt Aus http://www.xilinx.com/itp/xilinx7/books/data/docs/cgd/cgd0106_67.html
1 | The IOB constraint, when associated with a flip-flop or latch, tells the |
2 | mapper to pack that instance into an IOB type component if possible. |
Dieses Constraint kannst du nicht einfach so auf Pins anwenden, sondern nur auf FFs, die dann in den Pintreibern lokalisiert werden.
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.