Forum: FPGA, VHDL & Co. XILINX ISE erzeugt jedesmal ein anderes Bitfiles


von Dosmo (Gast)


Lesenswert?

Hallo,

wenn ich den gleichen VHDL-Sourcecode mehrfach synthetisiere, erzeugt 
die XILINX ISE jedesmal ein anderes Bitfile.
Kann man in den Properties irgendwie festlegen, daß immer ein 
identisches Bitfile erzeugt wird?

Danke,

Dosmo

von Christian R. (supachris)


Lesenswert?

Nein, das liegt in der Natur der Sache bzw. an der Arbeitsweise von Map 
und PAR. Nach der Synthese kommt noch das gleiche raus, aber schon nach 
dem Mappen hast du jedes Mal ein anderes Ergebnis. Nach dem Place and 
Route erst recht.
Wozu ist das wichtig? Außerdem steht im Bitfiel das Erstelldatum, 1:1 
wirds sowieso nie.

von Duke Scarring (Gast)


Lesenswert?

Dosmo schrieb:
> jedesmal ein anderes Bitfile.
Mit welcher ISE-Version arbeitest Du?

M.E. kommt bei den aktuellen Versionen (ab 10? ab 11?) bei gleichem 
Input auch der gleiche Output raus.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> bei gleichem Input auch der gleiche Output raus.
Naja, abgesehen eben von der eingetragenen Zeit (ISE 13.2)...

von Christian R. (supachris)


Lesenswert?

Hm, kann man paushal nicht sagen. Ich hab auch Designs, die erzeugen 
jedes mal ein anderes Bit-File trotz gleicher Settings und frischem 
Auschecken aus dem SVN. Version 13.3

von Rufus (Gast)


Lesenswert?

Christian R. schrieb:
> Nein, das liegt in der Natur der Sache bzw. an der Arbeitsweise von Map
> und PAR.

Warum denn? Das kann ich mir gar nicht erklären. Ist da etwa ein 
Zufallsgenerator drin? ;-) Das mit der Uhrzeit ist ja okay, aber der 
Rest sollte doch immer gleich sein...

von Christian R. (supachris)


Lesenswert?

Ich meine, mal gelesen zu haben, dass die Optimierung nach 
Maxima-/Minima Suche funktioniert, und der sich auch mal in einem 
lokalen Maximum/Minimum verrennen kann. Kann aber leider die Quelle 
nicht mehr finden. Bei nicht allzu vollen Designs kommt schon 
allermeistens das gleiche raus, aber ich hab hier Spartan 6 Designs mit 
über 70% Füllgrad, da krieg ich selten eine 1:1 Kopie (Datum/Uhzeit 
außer Acht gelassen).

von Georg A. (georga)


Lesenswert?

Was ist, wenn man den par-seed per -t immer auf denselben Wert setzt? 
Dann sollte eigentlich immer dasselbe rauskommen.

von Dosmo (Gast)


Lesenswert?

Danke für die Antworten.
Ich hab ISE 13.2.

von Uwe (Gast)


Lesenswert?

Wenn man nen Autorouter für ne Komplexe Leiterkarte benutzt kommt 
(warscheinlich) auch nicht jedesmal das gleiche raus. Kann ja mal jemand 
testen, dann sieht man auch warum.

von Duke Scarring (Gast)


Lesenswert?

Bei mir kommt auch jedes mal was anderes raus. Das liegt aber daran, das 
ich einen 'date'-String mit einsynthetisiere, den ich von extern 
auslesen kann.

Duke

von noname (Gast)


Lesenswert?

Also mal langsam: Die Xilinx-Synthese inkl. der Folgeschritte ist dem 
Prinzip nach voll deterministisch. Es ist nur so, dass Ergebnisse 
vorheriger Läufe mitberücksichtigt werden können. Das hängt von den 
Einstellungen und der Strategie ab. Was auch zum Tragen kommt ist das 
Resynthestisuieren der Cores, das er sporadisch vorzunehmen scheint. 
Dabei scheint relevant zu sein, ob man den CoreGen von sich aus öffnet 
und über die Coreverwaltung etwas ändert oder einfach einen vorhandenen 
core anklickt.

Grund:

Manchmal bekommen die einzelnen Xilinx Tools ganz offensichtlich nicht 
mit, wenn sich was geändert hat oder sie kriegen es zu spät mit. Ich 
habe z.B. öfters den Fall, dass ein Lauf wegen einem Signal im 
ChipsScope meckert, weil ich was umverdrahtet habe und er es einfach 
nicht bauen will. Schliesst man das Projekt und öffnet es neu, klappt es 
dann plötzlich. Er scheint an einem internen flag zu hängen.

Bei der Nutzung vom System Generator habe ich ähnliche Effekte gehabt. 
Startet man eine Synthese direkt im Anschluss an einen Neubau oder eine 
Änderung kommt was anderes heraus. Oft genug ging es garnicht.

Solche internen Probleme sind es sicherlich, die u.a. dafür sorgen, dass 
Ergebnisse variieren, neben geänderten Syntheseeinstellungen natürlich.

Es könnte natürlich sein, dass der HDL-Advisor irgendwas ändert oder man 
solche Spielchen wie "write timing constraints" aktiv.

Wenn das Tool "eingeschwungen" ist, sind die files identisch.

von J. S. (engineer) Benutzerseite


Lesenswert?

noname schrieb:
> Wenn das Tool "eingeschwungen" ist, sind die files identisch.

Beobachten das noch andere? Ich habe derzeit dass Problem, dass mir ISE 
immer mal wieder ein "schlechtes" Bitfile macht. Ich erkenne es, an 
Timing problemen bei der Ausgabe. Scheint eine Art von Tagesform zu sein 
und mit der aktuellen Version zusammenzuhängen.

von Georg A. (georga)


Lesenswert?

Blindgänger hatte ich viele bei einem DDR-Interface. War aber weg, 
nachdem ich die "Löcher" in meinen Timingsspecs gefunden hatte. Seitdem 
ist jeder Schuss ein Treffer. Nicht immer sind die Tools schuld ;)

von Bronco (Gast)


Lesenswert?

Georg A. schrieb:
> War aber weg,
> nachdem ich die "Löcher" in meinen Timingsspecs gefunden hatte.

Kann ich bestätigen.
Ich hatte auch anfangs vergessen, bestimmte Timings (Setup- und 
Hold-Zeiten eines externen Bausteins) zu definieren und dann kamen so 
50% "geht" und 50% "geht nicht" bei heraus.
Seit die Timings korrekt angegeben sind, kommt 100% "geht" bei heraus.

von Klaus F. (kfalser)


Lesenswert?

Dosmo schrieb:
> Hallo,
>
> wenn ich den gleichen VHDL-Sourcecode mehrfach synthetisiere, erzeugt
> die XILINX ISE jedesmal ein anderes Bitfile.
> Kann man in den Properties irgendwie festlegen, daß immer ein
> identisches Bitfile erzeugt wird?
>
> Danke,
>
> Dosmo

Das bitfile selbst ist deshalb unterschiedlich, weil ein Zeitstempel 
darin vorkommt.
Das Ergebnis selbst ist, zumindest in meinen Fällen, schon identisch.

http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Klaus Falser schrieb:
> Das bitfile selbst ist deshalb unterschiedlich, weil ein Zeitstempel
> darin vorkommt.
> Das Ergebnis selbst ist, zumindest in meinen Fällen, schon identisch.
Wer Muße hat, kann auch mal das angehängte TCL-Skript ausprobieren.

Duke

von Christian R. (supachris)


Lesenswert?

Man kann sich bei bitgen auch ein bin File generieren lassen, das kann 
man dann ganz leicht vergleichen.

von Bronco (Gast)


Lesenswert?

Klaus Falser schrieb:
> Das bitfile selbst ist deshalb unterschiedlich, weil ein Zeitstempel
> darin vorkommt.

Ich wage mal zu behaupten, daß jeder, der WinMerge bedienen kann, über 
diesen Punkt hinaus ist... ;)

von noname (Gast)


Lesenswert?

Die Rede ist hier nicht vom Zeitstempel oder dem USEr code, sondern 
Fehlfunktionen und verschiedenen Grössen!

Ich habe es öfters, dass die Syntheseergebnisse unterschiedlich sind. 
Entweder verrennt er sich irgendwo, oder er hat wieder intuitiv was 
umgestellt.

Ich habe es schon geschafft, nach 2maligem restart der Implementierung 
ohne sonstige Änderungen abweichende Ergebnisse im Timing und der 
Resources zu bekommen.

Ich habe den HDL-Advisor und den SmartGuide im Verdacht!

Die nutzen gfs vorherige Ergebnisse und starten daher jedesmal mit 
unterschiedlichen Randbedingungen.

von Duke Scarring (Gast)


Lesenswert?

noname schrieb:
> Ich habe den HDL-Advisor und den SmartGuide im Verdacht!
>
> Die nutzen gfs vorherige Ergebnisse und starten daher jedesmal mit
> unterschiedlichen Randbedingungen.
Den HDL-Advisor kenn ich nicht.

Bei SmartGuide steht in der Dokumentation, das bisherige 
Syntheseergebnisse genutzt werden, um die nächste Synthese zu 
'verbessern'. Da braucht man sich natürlich nicht über verschiedene 
Bitfiles zu wundern...

Duke

von Christian R. (supachris)


Lesenswert?

noname schrieb:
> Ich habe es öfters, dass die Syntheseergebnisse unterschiedlich sind.
> Entweder verrennt er sich irgendwo, oder er hat wieder intuitiv was
> umgestellt.

Das kommt vor, wenn man kein clean vorher macht und dicht an der 
Kotzgrenze bei Timing und/oder Füllgrad ist. Bei locker gefülltem FPGA 
und noch Luft beim Timing erzeugt der schon (eigentlich) immer das 
gleiche.

von Fritz J. (fritzjaeger)


Lesenswert?

(Klassisches) Place and Route nutzt den "Simulated Annealing" 
Algorithmus. Dieser basiert auf einen zufällig gewählten Startwert (hier 
cost table). Dem Par-tool kann dieser Startwert vorgegeben werden. Das 
sollte die Ursache für geänderten bitfile bei gleichen sourcen sein. 
Hält man diesen startwert gleich, sollte  auch das desing gleich 
bleiben.

Siehe:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/pp_db_place_and_route_properties.htm

und:
http://www.xilinx.com/products/design-tools/vivado/implementation/place-and-route/index.htm

MfG,

von Georg A. (georga)


Lesenswert?

> Dem Par-tool kann dieser Startwert vorgegeben werden.

Mit -t.

> Das sollte die Ursache für geänderten bitfile bei gleichen sourcen sein.

Aber von selbst passiert das auch nicht...

von Fritz J. (fritzjaeger)


Lesenswert?

Georg A. schrieb:
>> Dem Par-tool kann dieser Startwert vorgegeben werden.
>
> Mit -t.
>
>> Das sollte die Ursache für geänderten bitfile bei gleichen sourcen sein.
>
> Aber von selbst passiert das auch nicht...

Lt Doku wird dieser Startwert bei einem Durchgang automatisch um eins 
erhöht (also von selbst):

"... subsequent attempt is assigned an incremental value based on the 
placement initialization value ..."

Man könnte es so lesen das wenn das timing nicht erreicht wird im 
nächsten Versuch mit anderen Startwerten geroutet wird. Das könnte dann 
bedeuten das bei Designs mit passenden timing alles gleich bleibt.

MfG,

von reinhold_by (Gast)


Lesenswert?

Welcome to the real world :-)
Den beschriebenen Effekt hatte ich auch beim Compilieren/Linken : Die 
Dateien werden einfach der Reihenfolge der Einträge (also NICHT in der 
Reihenfolge in der man sie im Explorer angezeigt bekommt!) in die LIB 
aufgenommen. Das entstehende Programm ist funktional völlig identisch, 
aber binär verschieden. Ein SW-Update des Compiler-Herstellers hat das 
Problem dann behoben.
Auch nett: ASCET 4.0 war damals in Smalltalk implementiert. Die 
Garbage-Collection hat dann gelegentlich aufgeräumt und dabei die 
Reihenfolge der Objekte im Speicher umsortiert. Diese aber hat auch den 
generierten Code beinflusst: Mal war der Code beim zweiten Makelauf 
identisch, mal nicht.

Ich wünsche dir viel Glück bei der Suche nach einer Lösung, kann 
manchmal lang dauern bis es klappt

von Frank Fridolin Tinitus (Gast)


Lesenswert?

DIe Lösung liegt auf der Hand:

KEIN XILINX
KEIN WINDOWS
KEIN MICROSOFT

je mehr man von diesen Grundregeln auser 8 lässt, desto mehr ärger hat 
mann

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank Fridolin Tinitus schrieb:
> laberlaberlabersülzlaber...
Das bringt dem Thread keinerlei Informationsgewinn. Du hättest 
wenigstens noch schreiben können, wie man diese potenziellen 
Problemquellen deiner Meinung nach umgehen könnte...

von Spartanist (Gast)


Lesenswert?

Ich habe etwas Seltsames:

eines meiner Designs wurde in den vergangenen Tagen jedesmal in den 
constraints getroffen und ich habe heute nur noch einige Parameter 
geändert. Wieder wird das Design getroffen.

Der letzte Schritt war die Anpassung der internen firmware Nummer, die 
in einem Register steht. Nun klemmt es. Einziger Schritt: "clear all 
project settings".

Die Syntheserandbedingungen "speed, retiming" und die hundert anderen 
blieben unverändert. Ich habe die auch überprüft!

WIE GIBT ES DAS?

Ich kann mir das nur so erklären, dass er sporadisch anders arbeitet, 
oder aber, was auch sein kann, die positiven Meldungen zuvor waren 
falsch und basierten auf einem alten report oder alten Annahmen. 
Allerdings wurden die reports jedesmal sichbar gelöscht und neu 
erstellt, als ich die Implementierung startete.

So langsam werde ich noch blöde mit dem Xilinx-mist!

von Christian R. (supachris)


Lesenswert?

Wenn die Firmware Nummer nicht im BRAM steht sondern hart codiert ist, 
ist es ja durchaus normal, das etwas völlig anderes rauskommt. 
Schließlich ändert das ja die Verdrahtung. Allerdings ist dann offenbar 
dein Design extrem voll oder extrem nah am kritischen Timing, mit so 
einem Design weiter zu arbeiten bringt nur Stress. Das musst du dann 
irgendwo entspannen. Sonst kriegst du ja graue Haare.

von Spartanist (Gast)


Lesenswert?

Nein, das kann es nicht sein. Die Nummer wird lediglich als Wert in 
einem statischen Vektor ausgewertet, der keinen Einfluss auf das Timing 
haben kann und das design ist auch keineswegs voll. Ich habe weniger, 
als 20% derzeit und die Timings werden mit ausreichendem slack erzielt - 
WENN sie denn getroffen werden. Dies ist aus unerfindlichen Gründen 
jedoch manchmal nicht der Fall.

Es tritt allerdings sporadisch auf und hat mit dem o.g. direkt nichts zu 
tun - auch andere Änderungen führen dazu, dass das Timing nicht mehr 
passt. Bei weiteren Änderungen, = Hinzuaddieren von Funktionen, geht es 
dann urplötzlich wieder, bzw. wenn man das Projekt cleared.

Irgendwie scheint er sich mit alten Zwischenergebnissen zu verrennen! 
Manchmal mapped er auch ellenlang umeinander, bis was rauskommt.

Smartguide ist schonmal nicht der Grund, falls das jemand vermutet. Da 
leuchtet es mir ein, dass er da irgendwann gegen die Wand laufen kann, 
aber das ist jeweils "off".

von Christian R. (supachris)


Lesenswert?

Achso, na ich lass fast alles über die Command Line bauen, nur zum 
Aufsetzen des Projektes oder hinzufügen/ändern von Cores benutze ich die 
IDE noch.
Vor dem Build lösche ich dann alle erzeugten Files und hab somit immer 
einen frischen Durchlauf. Dann bekommt man auch reproduzierbare 
Ergebnisse.
Ich glaube in der ISE reicht es, wenn man die *_guide.ncd löscht, dann 
fängt der Map/PAR von vorne an.

von Spartanist (Gast)


Lesenswert?

Die guide sollte er doch eigentlich nur benutzen, wenn besagter 
SmartGuide aktiviert ist. (?)

von Christian R. (supachris)


Lesenswert?

Gute Frage. die _guide löschen hilft aber schon mindestens seit Version 
9.x wenn der sich mal verrannt hat.

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.