XILINX ISE erzeugt jedesmal ein anderes Bitfiles

#2445798
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.
#2446785
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).
Gast #2456888
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.
Gast #2786958
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.
#2788466
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
Gast #2788999
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.
Gast #2789036
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
#2789281
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.
#2791009
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,
#2791699
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,
Gast #2791714
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
Gast #2820210
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!
#2820217
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.
Gast #2823897
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".
#2823921
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren