mikrocontroller.net

Forum: FPGA, VHDL & Co. FPGA Ausgänge synchron/zeitlich schalten


Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_man...

Tom

Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorsicht, die IODELAY am Spartan 6 sind nicht kalibriert und auch nicht 
temperaturstabil. Da musst du genau aufpassen, ob das dann auch passt.
Different from the Virtex-5 FPGA structures, the
Spartan-6 FPGA delay is not compensated for either temperature or voltage, though there
are mechanisms that allow the user to accurately calibrate the delay on an on-going basis.

Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm, klingt gefährlich und ist dann wahrscheinlich schon ein 
Ausschluss-Kriterium. Ausprobieren werde ich es aber trotzdem.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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...

Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte ich eigentlich beides gemacht, ich schau mir auch das nochmal 
genau an. Danke.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> U. a. habe ich bei den constraints (Pins) IOB=TRUE genutzt
Aus 
http://www.xilinx.com/itp/xilinx7/books/data/docs/...
The IOB constraint, when associated with a flip-flop or latch, tells the 
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.

Autor: KDC666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, scheint so hin zu hauen, danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.