Forum: FPGA, VHDL & Co. ISE 14.x produziert bisweilen seltsame Syntheseergebnisse


von J. S. (engineer) Benutzerseite


Lesenswert?

Ich arbeite seit Kurzem mit der 14.1 / 14.2 und habe einige seltsame 
Effekte. Relatv einfache und überschaubare designs / module scheinen 
nicht richtig zu arbeiten - je nach Syntheseeinstellung, wie mir 
scheint.

In einem Fall geht es u.a um die Ergebnisse, die ich im ChipScope habe:

1) Eine state machine, die linear durchläuft, bedient in jedem state 
eine Anzahl von Signalen. In einem Fall werden z.B. 3 Signale geändert. 
Im Chip Scope ändern sich aber nur 2 davon und eines erst einen state 
später, in dem das nicht programmiert wurde.

In einem anderen Fall scheint die FSM nicht korrekt erzeugt zu werden:

2) Eine ebenfalls weitgehend linear laufende FSM bedient je nach 
Notwendigkeit SRAM-Steuersignale WE, OE, CS sowie DAT + ADR. In einigen 
states, in denen die Ausgaben verarbeitet werden, wird auf den Eingang 
gehört. Die zuvor in einem vorheirgen state eingestellten Signale WE und 
OE werden nicht angetastet, sondern nur die Reaktion auf dem Bus 
beobachtet. Das Verhalten zeigt, dass OE nicht mehr gesetzt war 
(Datenbus geht weg = floatet) obwohl es noch anstehen hätte müssen. Das 
Problem konnte nur behoben werden, indem in jedem state alle Signale 
ausdrücklich gesetzt werden - auch die, die vom state vorher noch 
unverändert sein sollen.

In einem dritten Fall geht es um RAMS:

3) Durch das Beschreiben eines Videopuffers (im FPGA rein mit BRAMs) 
kommt es bei manchen Synthesen zu offensichtlichen Fehlern. Die 
Darstellung stimmt nicht, es kommen bei manchen Zeilen 
Punktversatzeffekt zu Vorschein, die darauf schliessen lassen, dass 
Werte einen Takt zu spät eingeschrieben werden. Die Videoseite und 
Einschreibeseite sind getrennte Domains die laut report kein 
Timingproblem haben.

In diesem Fall könnte es auch mit der Hardware zu tun haben: Es geht im 
Spartan6, die bekanntlich ein INIT-RAM Problem haben und wohl auch im 
9Bit-Mode unzuverlässig arbeiten.

Frage:

Hat jemand ähnliche Probleme beobachtet- was ISE oder Spartan 6 angeht?

Speziell bei dem Videodesign bin ich zu 100% sicher, dass es kein 
Designfehler ist, weil ich es in änhlicher Weise immer mal wieder in 
Chips einsetze und solche Fehler definitiv nicht hatte.

Bei den state machine Effekten ist es so, dass diese nur in der Praxis 
beobachtbar sind. Die Simulationen funktioneren - sogar die 
post-PAR-Sim! Die state machines verlaufen sich nicht und die Signale 
werden zeitrichtig gesetzt. Zudem kann ich die states im realen Design 
ansehen und verfolgen, dass sie linear fortschreiten.

Mein Erklärungsansatz:

Ich benutze sowohl register retiming, als auch register duplicating. 
Daher sind die Signale, die ich in ChipScope sehe, bzw die, die ich in 
der FSM sehe, nicht zwangsläufig identisch zu ihren automatisch 
erzeugten Kopien, die an anderer Stelle im Design benutzt werden. 
Speziell beim retiming könnte es der Synthese / dem 
Implementierungs-Algo aufgrund von SW-Fehlern passieren, dass sie auf 
falsche Signale aus falschen Zeitebenen zugreift, um diese anzuzapfen 
oder zu vereinfachen.

Kann da jemand was zu sagen?

An den Constraints kann es eigentlich nicht liegen, da die Effekte 
duruchaus bei unveränderten Constraints auftauchen.

von Cihan K. (lazoboy61)


Lesenswert?

Hallo J.S.,

ich habe ähnliche Erkenntnisse mit Chipscope gemacht, dass Signale 
manchmal nicht gesetzt werden. Ich habe aber so um die 500 Datenpunkte 
(Bits), die ich in CS anzeigen will.

Das was mich stutzig macht ist, dass ich ohne CS nach der Implemetierung 
im Report einen Max.Frequenz von ca. 118 MHz bekomme und mit CS nur 70 
MHz. (Design wird abgebremmst????)

In meinem Design arbeite ich mit 100MHz und 200MHz, habe einen 100 MHz 
Quarz, womit ich über eine DCM die 200 erzeuge. Timing-Constraints sind 
bei mir richtig gesetzt und werden auch eingehalten.

Doch trotzdem funktioniert mein Design ab und zu sporadisch nicht 
richtig, habe auch mehrere FSM´s drin, beschreibe auch zyklisch einen 
DDR2 in meinem Design.

Hat jemand dafür eine Lösung?

PS: Target ist der ML507 von Xilinx mit dem Virtex 5
ISE Version ist bei mir zur Zeit die 14.1.

Gruß Cihan

von SuperWilly (Gast)


Lesenswert?

>Das was mich stutzig macht ist, dass ich ohne CS nach der Implemetierung
>im Report einen Max.Frequenz von ca. 118 MHz bekomme und mit CS nur 70
>MHz. (Design wird abgebremmst????)

Das ist durchaus üblich, da die Chipscope-Logik Teil des Logik-Pfades 
wird. Ich mache das immer so, dass ich Register, die ich mir anschauen 
möchte, nochmals registriere und mir diese ins CS reinziehe. Das 
entspannt in jedem Fall das Timing.

1
signal design_register : std_logic;
2
signal CS_design_register : std_logic;   -- das schaue ich mir in CS an
3
4
Pipeline_fuer_Chipscope: process(clk)
5
begin
6
    if rising_edge(clk) then
7
        CS_design_register <= design_register;
8
    end if;
9
end process;


Wenn man diese Zusatzregistrierung vornimmt, dann sollte man das für 
alle zu betrachtenden Register tun, sonst wird es bei der Bewertung von 
Abläufen schwierig ;-)

Vg, SuperWilly

von Stachele (Gast)


Lesenswert?

>An den Constraints kann es eigentlich nicht liegen, da die Effekte
>duruchaus bei unveränderten Constraints auftauchen.


Naja, vielleicht fehlen dir noch ein paar Constraints. Bist du dir 
sicher, dass du nicht asynchrone Signal-Abfragen übersiehst? Ob das dann 
gut geht oder nicht, hängt dann von der Platzierung ab, und somit auch 
von der ISE-Version...

von Selbi (Gast)


Lesenswert?

Interessant! mir ist es passiert, dass eine Schaltung unter 14.1 gar 
nicht lief, daher habe ich von der Benutzung der Version abgesehen. 
Leider ist es aber nun so, dass ich aufgrund der mangelnden IP 
Unterstützung auf die neue Version werde wechseln müssen. Ich bin gerade 
dabei die 14.2 zu installieren.

von Cihan K. (lazoboy61)


Lesenswert?

Selbi schrieb:
> Interessant! mir ist es passiert, dass eine Schaltung unter 14.1 gar
> nicht lief, daher habe ich von der Benutzung der Version abgesehen.
> Leider ist es aber nun so, dass ich aufgrund der mangelnden IP
> Unterstützung auf die neue Version werde wechseln müssen. Ich bin gerade
> dabei die 14.2 zu installieren.

Und wie siehts aus mit der neuen Version, ist die besser?

Ich habe zur Zeit mit der 14.1 Version unter Chipscope mächtig Probleme 
eine Analyse zu machen. Mal funktioniert mein Design, mal nicht, mal 
habe ich sporadisch Fehler drin, so kann man nicht arbeiten. Ist evtl. 
in der 14.2 Version Chipscope zuverlässiger oder hat sicht evtl. bei 
Chipscope garnichts geändert?

Hat jemand einen besseren Ansatz, Lösungsweg oder Vorschlag um mit 
Chipscope zu arbeiten. Habe zur Zeit um die 44 Signale zur Betrachtung 
in Chipscope drin. Evtl. schon zu viel?!?.

Cihan

von Christian R. (supachris)


Lesenswert?

Ich mach das immer so, dass ich mir vom Core-Gen den ILA und den ICON 
als Core erzeugen lasse und dann direkt instanziiere. Das geht bisher 
zuverlässig. Aber das Design wird langsamer, auch weil die im Core gated 
clocks und solche Schweinerein benutzen. Aber Fehler produzieren hab ich 
damit bisher noch nicht hinbekommen, höchstens dass ein schon so 
ziemlich volles Design dann nicht mehr geroutet werden kann.

von Cihan K. (lazoboy61)


Lesenswert?

Christian R. schrieb:
> Ich mach das immer so, dass ich mir vom Core-Gen den ILA und den ICON
> als Core erzeugen lasse und dann direkt instanziiere. Das geht bisher
> zuverlässig. Aber das Design wird langsamer, auch weil die im Core gated
> clocks und solche Schweinerein benutzen. Aber Fehler produzieren hab ich
> damit bisher noch nicht hinbekommen, höchstens dass ein schon so
> ziemlich volles Design dann nicht mehr geroutet werden kann.

Wie erzeugts du die Core denn, mit dem CoreGen?

Ich hatte auch schon mal sowas benutzt, so eine fertige Core dafür, 
hatte aber wenig Trigger und Daten Input. Deswegen hatte ich mir immer 
eine Chipscope File unter ISE erstellt und anschließend die Signale 
ausgewählt und nach der Implementierung mit Chipscope Pro betrachtet.

Cihan

von Christian R. (supachris)


Lesenswert?

Ja mit dem Core Generaor. Die Anzahl der Trigger und Dateneingänge ist 
doch dort frei wählbar. Ich guck da öfters 2 interne 32 Bit Busse samt 
der Steuerleitungen an. Kein Problem. Du musst einen ICON Core 
erstellen, der verbindet den JTAG Anschluss mit dem ILA Core, welcher 
der Logic Analyzer ist.

von Cihan K. (lazoboy61)


Lesenswert?

Ich habe warscheinlich den Fehler bei mir gefunden, warum Chipscope 
nicht gut funktionierte.

Im UG029 für Chipscope steht unter Seite 58 unter "Useful Project 
Navigator Settings" das man die Keep-Hierarchy auf Yes oder Soft stellen 
soll.

Im Anschluss daran sah ich, dass ich nun ganz andere Signale im Core 
Inserter vom Chipscope wählen kann. Nun habe ich auch mehr Signale drin 
und funktioniert bis jetzt erstmal gut.

Werde berichten falls es wieder zu Fehlern kommt.

Cihan

von Duke Scarring (Gast)


Lesenswert?

J. S. schrieb:
> In einem anderen Fall scheint die FSM nicht korrekt erzeugt zu werden:
Die Steuersignale für die FSM hast Du aber auch alle ordentlich 
einsynchronisiert, oder?

Duke

von Cihan K. (lazoboy61)


Lesenswert?

Ja, dass habe ich natürlich versucht immer zu berücksichtigen.

Ich habe beispielsweise noch eine DDR2 Core drin, indem ich ebend einen 
DDR2 beschreibe. An Anfang wo ich die Signale nicht einsynchronisiert 
hatte, hatte ich Bitfehler zwischen meinen Daten. Nun stimmen sie, also 
gehe davon aus, dass ich auf dem richtigem Weg bin.

Cihan

von Andi (chefdesigner)


Lesenswert?

Cihan Kalayci schrieb:
> Ich habe warscheinlich den Fehler bei mir gefunden, warum Chipscope
> nicht gut funktionierte.
>
> Im UG029 für Chipscope steht unter Seite 58 unter "Useful Project
> Navigator Settings" das man die Keep-Hierarchy auf Yes oder Soft stellen
> soll.

Das ist eher eine funktionelle Fehlbedienung, bzw ein Manko der Xilinx 
chain. Auch wenn ChipsCope die Signale fordert und sie dadurch ja über 
JTAG ausgegeben werden, kriegt das die Synthese nicht mit und optimiert 
es weg. Das ist also ziemlich bekannt und erklärlich.

Unerklärlich dagegen ist, dass Xilinx öfters mal was an internen 
Strukturen ändert - währscheinlich, um einie alte Zöpfe loszuwerden. 
U.U. hat es auch mit Vivado zu tun, ja. Im Zuge dessen funktionieren 
immer mal wieder interne Dinge nicht, die eigentlich vorher schon 
liefen.

Im Bezug auf Chipsscope gab es in den 13er Versionen dauern Problem mit 
dem Platz. Mehr als 2048 Zellen konnten nicht erzeugt werden, egal wie 
kleine sie waren und wie viel Platz noch im chip hätte sein können.

J. S. schrieb:
> In diesem Fall könnte es auch mit der Hardware zu tun haben: Es geht im
> Spartan6, die bekanntlich ein INIT-RAM Problem haben und wohl auch im
> 9Bit-Mode unzuverlässig arbeiten.

Es könnte sein, dass es da Probleme mit dem Reset gibt und dem Clear. 
Denn diese Mechanismen sind intern dafür verantwortlich, dass Zellen 
vorgeladen werden (können). Soweit ich es überschaue, nutzt Xilinx 
keinen asynchronen Reset, sondern lädt immer synchron. Kann sein, dass 
dabei was nicht funktioniert. Altera braut das bekanntlich ech asynchron 
und es gibt zwei Möglichkeiten das RAM zu resetten und auch zwei 
Fehlerquellen. Gerade bei Altera gab es da öfters mal work arounds, die 
in fabric logic realsiert wurden, um dual port funktion möglich zu 
machen. Ich kann mir sehr gut vorstellen, dass Xlinx da ähnlich vorgeht, 
freilich ohne es zu verkünden und mit neueren ISE-Versionen da 
"Verbesserungen" zu erwarten sind.

Benutzt Du ein asynch clear? oder  ein synch clear?

U.U. bringt es etwas darauf zu verzichten oder Du benutzt kein 
DP-Funktion.

von Spartanist (Gast)


Lesenswert?

Bei mir trifft er plötzlich keine Constraints mehr, nachdem es bereits 
locker ging.

Beitrag "Re: XILINX ISE erzeugt plötzlich nichtfunktionierendes Bitfiles"

Erreicht wurde das Phänomen mit ISE 14,2

von J. S. (engineer) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
>> In einem anderen Fall scheint die FSM nicht korrekt erzeugt zu werden:
> Die Steuersignale für die FSM hast Du aber auch alle ordentlich
> einsynchronisiert, oder?
Schlimmer, sie kommen aus derselben state machine derselben domain. Das 
ist der Witz.

Stachele schrieb:
> Naja, vielleicht fehlen dir noch ein paar Constraints.
Theoretisch ja, aber ich sehe momentan nicht, wo.

> Bist du dir
> sicher, dass du nicht asynchrone Signal-Abfragen übersiehst?
Sehr sicher! Links und rechts vom DPRAM ist alles total synchron und 
zudem habe ich das Thema synchrones design und Eintakten sowas von 
durch, dass ich Vorträge dazu halte.

Einige Probleme sind inzwischen durch work around gelöst, auch scheint 
die ISE 14.2 einiges zu bügeln. Ich kann es aus Zeitgründen nicht alles 
querchecken, aber das seltame "state machine 
Statusverschleppungsproblem" ist weg. Da hatte wohl das ChipsScope eine 
Macke.

Nach wie vor habe ich die Spartan6 BRAMs in Verdacht, dass da was 
Seltsames passiert. Gfs hat es mit dem R/W auf gleichen Adressen zu tun, 
was in meinem Design unvermeidbar passiert und passieren muss. Die RAMs 
scheinen da - gfs infolge Synthesoptimierung oder- fehler irgendwie 
transparent zu sein oder aber es werden Daten nicht richtig 
rausgetaktet.

Ich werde da aber dran bleiben.

von Christian R. (supachris)


Lesenswert?

Die BRAMs im S6 haben einige Macken, vor allem die Initialisierung im 
8/9 Bit Modus. und dann musst du genau aufpassen wie du die beschreibst, 
wegen read/write first, das steht im XST user guide für den S6.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich hatte auch so ein ungeklärtes Phänomen, was in die Ecke passt.


Es war eine State-Maschine die unter bestimmten Ereignissen in die 
entsprechenden Zustände sprang. Die Ereignisse wurden durch ein Flipflop 
synchron gehalten.
Leider sprang die Statemachine nicht immer richtig aber eben manchmal 
schon.


Ich hatte das Gefühl, das unter Umständen ein Signal zu spät kam, obwohl 
ich ein synchrones Design hatte. Die Sprungadressen kamen aus einem 
interen RAM.

Ich habe es übern den Haufen geschnissen und noch mal neu geschrieben 
mit Vectoren als Sprungadressen und dann lief die Sache. Leider waren 
die beiden Sachen nicht mehr vergleichbar, dass ich es eindeutig 
herausgefunden habe.

von Spartanist (Gast)


Lesenswert?

René D. schrieb:
> Ich hatte das Gefühl, das unter Umständen ein Signal zu spät kam, obwohl
> ich ein synchrones Design hatte. Die Sprungadressen kamen aus einem
> interen RAM.

Konntest Du es an der Version der ISE festmachen?
Welcher Chip war es, der betroffen war?

Bei mir ist es der Spartan6, der spukt. Ein Phänomän ist, dass ich beim 
S6-BRAM die zusätlzichen Register am Ausgang weglassen kann oder 
hinzufügen, ich bekomme trotzdem irgendwie dasselbe 
Verzögerungsverhalten. Simulation und Realität laufen dann auseinander.

von Duke Scarring (Gast)


Lesenswert?

Spartanist schrieb:
> Bei mir ist es der Spartan6, der spukt. Ein Phänomän ist, dass ich beim
> S6-BRAM
BRAM8 oder BRAM16?
1
INFO:Bitgen:341 - This design is using one or more 9K Block RAMs (RAMB8BWER).
2
   9K Block RAM initialization data, both user defined and default, requires a
3
   special bit stream format.  For more information, please reference Xilinx
4
   Answer Record 39999.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Spartanist schrieb:
> René D. schrieb:

> Konntest Du es an der Version der ISE festmachen?
> Welcher Chip war es, der betroffen war?

Spartan6 passt auch.

Es war das Entwicklungsboard SP601 und als ISE version muss es eine 
höhere 13.x gewesen sein. Es war vergangenes Jahr und da hatte ich keine 
14 Version.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Kanst du eine Post-Place & Route-Simulation im ISE durchführen?

von Michael (Gast)


Lesenswert?

Ich glaube nicht, dass eine PAR Simulation hier weiter hilft, denn der 
Fehler muss sich nicht zwangskäufig dort abbilden. Ich hatte anderseits 
schon PAR-Simus, die ausfielen, während Logik-Sim und Realität 
funktionierten.

von Thorsten Radke (Gast)


Lesenswert?

Leider habe ich das Thema erst jetzt gefunden. Ich hatte Anfang des 
Jahres auch einen solchen Effekt, dass eine state machine nicht richtig 
funktionierte und habe versucht, es mitchipscope zu untersuchen. 
Unerklärlicherweise führte die Schaltung komplett unsinnige Sprünge aus, 
die sich aufgrund der Signalsituation nicht hätte ergeben dürfen. Ob es 
am Chipscope lag, also dass die hinzutretenden Schaltungselemente dafür 
etwas ändern oder es nur falsch angezeigt wurde, war nicht 
herauszubekommen, da sich der Ablauf von Aussen nicht verfizieren liess. 
Es war nur zu beobachten, dass die Ausgänge, die von der FSM abhingen, 
nicht richtig zu funktionieren schienen - obwohl es in der Simulation 
gleichwohl korrekt arbeitete.

Inzwischen bin ich an einem anderen Problem dran:

Beitrag "ChipScope geht in 14.4 nicht"

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich denke, dass es an ChipScope lag, bzw daran, was die Synthes 
diesbezüglich einbaut. Wie ich oben geschrieben habe, sind o.g. Probleme 
aller Wahrscheinlichkeit nach ein Phantomfehler gewesen. Der rale Ablauf 
im Design dürfte gestimmt haben, wenngleich ich das nicht 100% 
verifizieren konnte.

Das Problem trat jetzt bei den neueren Version ab 14.4 nicht mehr auf - 
wenigstens hatte ich da in jüngster Zeit keine Probleme wahrnehmen 
können.

Inzwischen ziehe ich mir wichtige Zustände in einen eigenen Sampler und 
zeige es extern an. Da weiss man, was man hat.

Wegen Deiner ChipsScopefrage 14.4 antworte ich im anderen thread.

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.