Forum: FPGA, VHDL & Co. Xilinx constraints für Signale in unterer Hierarchieebene


von Markus (Gast)


Lesenswert?

Hallo,

eine Frage zum Thema constraints bei Xilinx.

Ich habe ein VHDL-Design, welches vom Timing her ziemlich auf Kante 
genäht ist. Das Design umfasst mehrere Hierarchieebenen. Mit der 
Synthese-/Mapoption keep_hierarchy=false wird das gewünschte Timing 
(meist) eingehalten, bei true of nicht.

Nun enthält das Design Xilinx-FIFOs, welche bei Taktübergängen 
setup/hold-Verletzungen anzeigen, die ignoriert werden können (siehe 
auch Beitrag "Constraint Problem am BlockRAM FIFO Xilinx" bzw. im pg057). Da ich 
am Timingreport sehen möchte, ob eine "echte" constraint-Verletzung 
stattgefunden hat bzw. den Tools (PAR) mitteilen möchte, dass sie die 
FIFO-Timings ignorieren können, habe ich es mit dem TIG constraint aus 
o.g. Thread bzw. aus pg057 (in etwa das gleiche für konkrete Signale) im 
ucf versucht. Damit funktioniert es wie gewünscht, dass die 
FIFO-Taktübergänge ignoriert werden.

Mein Problem ist nun, dass ich dafür die Synthese-/Mapoption 
keep_hierarchy=true setzen muss, da sonst die interne Hierarchie und 
damit der Pfad zu den constrainten Taktsignalen beim PAR , wo die ucf 
ins Spiel kommt, nicht mehr bekannt ist (zumindest mir nicht, ich 
schreibe den Hierarchiepfad ins ucf). Wie schon gesagt, klappt dann aber 
das Timing oft nicht.

Gibt es eine Möglichkeit, diese in der Hierarchie vergrabenen Signale 
trotzdem zu constrainen, wenn die Hierarchie durch die Synthese 
plattgemacht wird? Evtl. schon in einer xcf, die von der Synthese 
verarbeitet wird und dann bis zum PAR (automatisch?) "weitergereicht" 
wird? Oder mit irgendeiner Option doch in der ucf?

Danke für Vorschläge.
Markus

von Punkt Setzer (Gast)


Lesenswert?

Markus schrieb:
> Gibt es eine Möglichkeit, diese in der Hierarchie vergrabenen Signale
> trotzdem zu constrainen

Normalerweise kann man Wildcards bspw '*' für beliebige Zeichenkette 
verwenden, da benötigt man nicht den kompletten Hierarchiepfad solange 
der Signalname einmalig ist. Also sowas wie

NET "*einmaligersignalname*"    OFFSET = IN 6 ns VALID 7 ns BEFORE 
"sys_clk" HIGH;

sollte passen.

Ansonsten schau mal im constraint guide unter naming oder Wildcards.

von J. S. (engineer) Benutzerseite


Lesenswert?

Das ist dasselbe Problem wie bei ChipsScope: Man setzt "keep hierarchie" 
auf "soft". Dann fliegen die überzähligen Signale erst beim Mappen raus.

von Markus (Gast)


Lesenswert?

Danke für die Vorschläge.

Die Wildcard-Methode funktioniert bei mir leider nicht, obwohl der 
Signalname eindeutig ist. Wer weiß, was die Synthese daraus macht.

Mit keep hierarchie auf soft scheint es erstmal zu funktionieren, muss 
noch ein paar Testläufe machen

Danke.
Markus

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich würde so oder so, das keep hierchie verwenden, weil es ansonsten 
Signale munter wegoptimiert. Wenn dadurch die Clusterung über 
Hierarchieebenen hinweg behindert wird, muss es eben selektiv geschehen: 
Du gehst in die Unterkomponente und setzt dort ein keep constraint auf 
das Signal selber.

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.