Forum: FPGA, VHDL & Co. Xilinx Components und Timing Constraints


von Christian (Gast)


Lesenswert?

Hallo zusammen,

ich bin, was Timing Constraints anbelangt, noch ziemlicher Anfänger. 
Kämpfe mich zwar derzeit durch die ganzen Constraints Guides, konnte 
aber bisher keinen Lösungsansatz für mein Problem finden.

Folgendes Problem: Ich nutze ein gekauftes FPGA-Board mit einem Xilinx 
Virtex 5 Fpga. Auf diesem Board befindet sich noch unter anderem 
QDR-RAMs, SDR-Rams und eine PMC-Schnittstelle. Für die PMC- und die 
RAM-Schnittstellen liegen mir "funktionierende" Components des 
Herstellers vor, die ich in mein Design eingebunden hab. Das ganze ließ 
sich auch bisher immer fehlerfrei übersetzen.
Scheinbar ist mein Design mitlerweile so groß geworden das neuerdings 
Timing Constraints fehler (Setup Time) auftreten. Mein Problem ist 
jetzt, daß diese Fehler ausgerechnet in den Hersteller Components 
auftreten und nicht in meinem Teil des Designs. Da diese Components 
recht komplex sind würde ich ungern in das Design der Component 
eingreifen. Keine Ahnung, was ich damit dann anrichten würde. Gibt es 
eine Möglichkeit den Xilinx Tools beizubringen, daß die 
Hersteller-Components quasi als Block so platziert und geroutet werden, 
daß in diesen Components keine Timing Constraints Verletzungen 
auftreten? Mit Timing Constraints Fehlern in meinem eigenem Design würde 
ich schon klar kommen.
Hat Irgendwer von Euch eine Idee wie ich das Problem lösen kann, bzw. 
unter welchem Stichwort ich weitere Informationen dazu finden könnte?

Grüße,
Christian

von iulius (Gast)


Lesenswert?

Prinzipiell ist das ziemlich leicht : weise im fpga editor ein Feld zu 
wo der Block platziert werden soll.
(sinnvollerweise nahe den genutzten Pins)

Das dies dein Problem nicht unbedingt lößt muss dir aber klar sein, denn 
auch wenn diese Blöcke lokal die Geschwindigkeit halten, so 
kommunizierst du doch sicherlich mit diesen.

Das kann je nachdem bei langen Wegen auf dem Chip zu Problemen führen.

Helfen kann hier  :

- Taktrate verringern
- zusätzliche FFs zwischen die 2 Module einbauen (verkürzt den 
Routing-Pfad pro Takt enorm)
- aggressivere Einstellungen für den Routingaufwand (Achtung : kann die 
PAR Dauer stark erhöhen)

Erstes Mittel bleibt aber sich den langsamsten Pfad genau anzusehen. 
Häufig entdeckt man sofort etwas wo man ansetzen kann.
z.b. ein Mux dazischen.

von Christian (Gast)


Lesenswert?

Hallo iulius,

danke für den Hinweis. Das ich das Problem so im Endeffekt nur 
verschiebe ist mir klar, aber eigentlich will ich ja genau das. Ich 
möchte die das Problem von der Hersteller Komponente in den von mir 
designten Bereich verschieben. Den Teil kenn ich und da hab ich auch 
keine Probleme z.B. zusätzliche FFs zwischen Module einzufügen.
Dann werde ich mich jetzt wohl mal in den FPGA editor einarbeiten 
müssen. Danke nochmal. Jetzt weis ich wenigstens wo ich ansetzen muss. 
Xilinx dokumentiert ja echt überdurchschnittlich viel.

Grüße,
Christian

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Hallo Christian,

für deine Probleme gab es in der Vergangenheit ein nettes aber teures 
Tool:
PlanAhead.
In ISE 11 ab Logic Edition gibt es nun eine preiswerte weil enthaltene 
Lösung: PlanAhead ;)

Planahead gibt Dir unter anderem die von iulius beschriebene Möglichkeit 
Areas zu definieren in denen einzelne Komponenten zum liegen kommen.
Darüber hinaus analysiert PlanAhead die Ausgaben der Synthese und kann 
Dir die kritischen Pfade innerhalb des FPGAs aufzeigen.
Weitere Funktionen ist das durchprobieren verschiedener 
Syntheseeinstellungen ( z.B. die Map und Place&Route Affords).

We auch schon von iulius beschrieben ist es sicherlich sinnvoll, wenn 
möglich über Pipelining nachzudenken.

Gruß

Andreas

von Christian (Gast)


Lesenswert?

Hallo Andreas,

danke für die Hilfe. Planahead macht auf jeden Fall einen deutlich 
besseren Eindruck als der FPGA Editor. Dann werde ich mich da jetzt mal 
einarbeiten. Das ist ja recht gut Dokumentiert.
Pipelining ist sicher eine super Lösung bei Setup Time verletzungen 
zwischen den einzelnen Komponenten oder in meinen eigenen Komponenten, 
ich hab aber eben die Sorge, daß ich mir die Funktionalität einer 
komplexen Komponente, die ich nicht wirklich kenne, da ich sie nicht 
selber geschrieben hab, dadurch zerschieße, daß ich Latenzen an 
eventuell zeitkritischen Stellen einfüge.

Gruß,
Christian

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.