Forum: FPGA, VHDL & Co. ISE erzeugt immerwieder andere JED Datei


von Ralph H. (guru)


Lesenswert?

Hallo, ich hab ein sehr merkwürdiges Problem und hoffe, dass es jemand 
gibt der mir ein Erklärung liefern kann, bzw. gar ein Lösung.

Ich arbeite mit der XILINX ISE Webpack 12.3 und habe für CPLD XC95108 
Code erzeugt, der auch funktioniert.
Damit ich die versch. Entwicklungsstufen mal nachvollziehen kann, hab 
ich in Abständen Kopien des Projektes angelegt. Dabei habe ich jeweils 
die *.JED, *.VHD und *.UCF Datei in ein Zip-File gesichert. Soweit so 
gut.
Nun habe ich aber mal eine solche "Sicherung" gebraucht und die *.VHD 
und *.UCF Datei zurückgespielt und die JED Datei erzeugt, die aber 
plötzlich NICHT mehr funktioniert ! Sie ist auch von der Kopie komplett 
anders.
Um das zu verifizieren, hab ich mal ein neues Projekt mit diesen Dateien 
erstellt und dort den gleichen Effekt.

Was mach ich falsch, oder wo könnte das Problem liegen?

Danke Euch ! Gruß Ralph

PS: Das ich die Hardware nicht geändert hab ist logisch !

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


Lesenswert?

Ralph H. schrieb:
> Nun habe ich aber mal eine solche "Sicherung" gebraucht und die *.VHD
> und *.UCF Datei zurückgespielt und die JED Datei erzeugt, die aber
> plötzlich NICHT mehr funktioniert !
Du hast noch einige Optionen, die in den Projekteinstellungen versteckt 
sind. Und die können durchaus (insbesondere bei asynchronen Designs) 
über Erfolg und Misserfolg entscheiden...

von Ralph H. (guru)


Lesenswert?

Lothar Miller schrieb:
> über Erfolg und Misserfolg entscheiden...

und ob mein lieber Lothar :) !! Du hast mal wieder vollkommen Recht !

In einer nächtlichen Sitzung hab ich herausgefunden, woran es liegt und 
konnte nun die JED Datei wieder exakt identisch herstellen! :-)
Es war die Einstellung im Fitter die Zellen im LOW Power Modus zu 
betreiben! Leider ist genau dadurch das nächste Problem entstanden.
Im Power Mode LOW funzt mein Design, im STD Mode nicht !! Hast Du ne 
Idee worin der Unterschied der beiden Modi beim CPLD XC95108 liegt ?

Und noch ne Frage dazu... welche Dateien im Projekt muss ich sichern, 
wenn ich z.B. einem Nachbauer meine Sourcen geben möchte, damit er NICHT 
in diese gemeine Falle tappt ?

Danke sagt Ralph

von Klaus F. (kfalser)


Lesenswert?

Ralph H. schrieb:
> Im Power Mode LOW funzt mein Design, im STD Mode nicht

Low Power ist langsamer!

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


Lesenswert?

Ralph H. schrieb:
> welche Dateien im Projekt muss ich sichern,
Ich mach das hart&herzlich:
Cleanup Project Files und dann das ganze Verzeichnis gesichert.

Klaus Falser schrieb:
> Low Power ist langsamer!
Das ist mein Verdacht...
>> insbesondere bei asynchronen Designs

von Ralph H. (guru)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
> Ralph H. schrieb:
>> welche Dateien im Projekt muss ich sichern,
> Ich mach das hart&herzlich:
> Cleanup Project Files und dann das ganze Verzeichnis gesichert.

Gute Idee ! das werd ich auch in Zukunft tun, aber noch die JED Datei 
sichern :-)

> Klaus Falser schrieb:
>> Low Power ist langsamer!
> Das ist mein Verdacht...
>>> insbesondere bei asynchronen Designs

Hm.. ich denk mir auch sowas, weiß aber echt nicht wo mein Problem 
liegt. Bitte seid so lieb und schaut mal über das Design. Ich habe hier 
eine real existierende Schaltung 1:1 nachgebildet. Das funktioniert auch 
gut, wenn es im POWER Mode LOW läuft. Bei POWER Mode STD spinnen die 
beiden FlipFlops für die Synchronimpulserzeugung und ich meine fast sie 
schwingen total unregelmäßig?!
Bitte schaut mal über den Code ob ich da nen groben Schnitzer drin hab. 
Er ist für einen CPLD XC95108 und es existiert noch eine UCF Datei 
dafür.

Vielen Dank sagt Ralph

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


Lesenswert?

> ich meine fast sie schwingen total unregelmäßig?!
Hmmm...
Wie sieht denn die Stromversorung und insbesondere die Entkopplung aus?
Im Standard-Modus hast du natürlich auch höhere Umschaltströme...

von Ralph H. (guru)


Lesenswert?

Naja ich hab die üblichen Abblock C's drin und zwar an jedem Vcc Pin.
Hab grad mal den Oszi drangehalten.. nicht eine einzige Zacke zu sehen.

Gruß Ralph

von Klaus F. (kfalser)


Lesenswert?

Ralph H. schrieb:
> Bitte schaut mal über den Code ob ich da nen groben Schnitzer drin hab.

Ja, z.B. abgeleitete Takte wie z.B. TaktD41.
So etwas macht man mit Clock Enable.

von Ralph H. (guru)


Lesenswert?

OK und warum sind abgeleitete Takte nun grobe Schnitzer ?

Bitte seid so lieb und versucht es mir auch irgendwie verständlich zu 
erklären und nicht nur draufhaun, ok ?!
Ich weiß das ihr Profis alles gern synchron haben wollt, aber wenn ich 
als Newbie ne logische Schaltung nachbilde, dann sieht das so aus.

Gern werd ich mit Euch zusammen das ganze auf gute Füße und synchrone 
Füße stellen, nur wie ?

von Klaus F. (kfalser)


Lesenswert?

Ralph H. schrieb:
> Bitte seid so lieb und versucht es mir auch irgendwie verständlich zu
> erklären und nicht nur draufhaun, ok ?!
Draufloshauen wollte ich nicht, aber solche Dinge wurden hier doch schon 
oft besprochen, und Du hast sie anscheinend auch schon gehört.

FPGAs und CPLDs haben spezielle, interne Resourcen für die 
Taktverteilung.
Diese sind notwendig, damit z.B. bei einem 16 Bit Zähler wirklich alle 
Bits "gleichzeitig" schalten.
a) Bei abgeleiteten Takten werden diese Taktnetze nicht immer verwendet, 
besonders in Deinem Fall wo Du 4 oder mehr Takte hast.
b) Verknüpft man Signale, die aus FFs mit abgeleitetem Takt kommen, 
wieder mit anderen Signalen, die vom Originaltakt stammen, dann kommt es 
zu Glitches usw, und die Tool können die Einhaltung des Timings nicht 
mehr kontrollieren.
c) FFs mit abgeleitete Takte werden nicht auf Einhalten der Setup- und 
Holdzeit kontrolliert.

> Ich weiß das ihr Profis alles gern synchron haben wollt, aber wenn ich
> als Newbie ne logische Schaltung nachbilde, dann sieht das so aus.

Nicht die Profis wollen es so, aber eine zuverlässige Schaltung möchte 
es so ...

von Ralph H. (guru)


Lesenswert?

Klaus Falser schrieb:
> Ralph H. schrieb:
> a) Bei abgeleiteten Takten werden diese Taktnetze nicht immer verwendet,
> besonders in Deinem Fall wo Du 4 oder mehr Takte hast.
> b) Verknüpft man Signale, die aus FFs mit abgeleitetem Takt kommen,
> wieder mit anderen Signalen, die vom Originaltakt stammen, dann kommt es
> zu Glitches usw, und die Tool können die Einhaltung des Timings nicht
> mehr kontrollieren.
> c) FFs mit abgeleitete Takte werden nicht auf Einhalten der Setup- und
> Holdzeit kontrolliert.

Das war etwas was ich verstehen kann Falk ! Insbesonder b) wird wohl bei 
den FlipFlops für die Synchronimpulse genau das Problem sein.
Also lass mich das Projekt richtig machen und wir fangen mal bei den 
ersten beiden Zählern DG19 und QD41_42 an.
DG 19 muss bis 6 zählen und dann neu bei 0 beginnen, der Übertrag muss 
QD41_42, der bis 84, zählt weiterschalten. Wie löse ich das synchron ?

Ein einfaches Beispiel würde mir erstmal genügen, ich mach das dann 
fertig und schaut wieder drüber, können wir das so machen ?

Danke sag ich schon mal vorab :-)

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


Lesenswert?

Ralph H. schrieb:
> Wie löse ich das synchron ?
Du brauchst den einen einzigen Systemtakt, den du in deiner Anwendung 
aber nicht so ohne weiteres hast...
Diese schöne reproduzierbare reine Lehre vom synchronen Design findet in 
CPLDs sehr schnell ein Ende :-(

Aber dies hier (und ähnliches) geht garantiert (früher oder später) 
schief:
1
  process(VDCLK)      -- Basis ist VDCLK Takt der durch 6 geteilt wird
2
  begin
3
    if rising_edge(VDCLK) then QD19 <= QD19 + 1 ; end if ; --zählen..
4
    if QD19 = 6           then QD19 <= "000"    ; end if ; --max. bis 6 !!! falsch !!! die Hardware zählt nur 0...5, bei 6 kommt ein kombinatorischer Reset
5
  end process;
6
  TaktD41 <=  '1'  when QD19 = 0   Else '0' ;  -- Takt aus Kombinatorik (Vergleicher) --> der kleinste Glitch kann takten
Und da fällt mir gerade noch was auf: deine Sensitivliste ist 
unvollständig, die Simulation ist falsch, da müsste eigentlich noch QD19 
rein...
Denk mal drüber nach.

Und viel schlimmer:
du hast einen asynchronen (Bäh), kombinatorischen (Bäbäh) Reset 
eingefügt und den auch noch als Taktsignal (Igittigitt) genommen...

Wenn schon, dann sollte das mindestens noch durch ein FF gehen (so du 
genug hast), damit kein Glitch auftreten kann:
1
  process(VDCLK)      -- Basis ist VDCLK Takt der durch 6 geteilt wird
2
  begin
3
    if rising_edge(VDCLK) then 
4
      if QD19 < 6 then  -- zählt 0..5
5
        QD19    <= QD19 + 1
6
        TaktD41 <= '0'; 
7
      else
8
        QD19    <= "000"; 
9
        TaktD41 <= '1'; 
10
      end if ; 
11
    end if;
12
  end process;


>> Klaus Falser schrieb: ...
> Das war etwas was ich verstehen kann Falk !
Wie, wer, wo, was?

von Ralph H. (guru)


Lesenswert?

Lothar Miller schrieb:
> Und da fällt mir gerade noch was auf: deine Sensitivliste ist
> unvollständig, die Simulation ist falsch, da müsste eigentlich noch QD19
> rein...
> Denk mal drüber nach.
Gut mach ich mal :) und werd das ganze mal überarbeiten.

> Wenn schon, dann sollte das mindestens noch durch ein FF gehen (so du
> genug hast), damit kein Glitch auftreten kann:

Hm.. Danke Dir ! aaber ne Frage dazu, ich hab mal gelesen, dass ich 
möglichst KEINE Größer oder Kleiner als Operationen verwenden soll.

>>> Klaus Falser schrieb: ...
>> Das war etwas was ich verstehen kann Falk !
> Wie, wer, wo, was?
Upps da war ich einfach auf den falschen Tasten. Sorry

von Ralph H. (guru)


Lesenswert?

Hm.. nun hab ich zumindest mal die Zähler umgebaut und es geht garnichts 
mehr :-(, dabei habe ich zuerst D19 geändert --> ging noch :-)
dann D41_42 und schon war es aus mit der Freude. :-(
Also hab ich alle Zähler mal so aufgebaut, aber das änderte auch nichts. 
Die Zähler scheinen falsch zu zählen.

von Ralph H. (guru)


Angehängte Dateien:

Lesenswert?

So, ich möchte mich nach längerer Zeit mal wieder melden. Hab meinen
Code überarbeitet und bitte um Eure Hinweise, Kritik oder auch
Bestätigung.

Ich denke jetzt meine Zähler schön synchron zu haben, sodass ich ohne
Glitches zu beführchten, verschiedene Zählerstände mit FlipFlips
auswerten kann, oder ?

LG Ralph

PS: Hatte grad die falsche Datei hochgeladen und deshalb den Beitrag 
nochmal gelöscht ! Sorry

von Daniel -. (root)


Lesenswert?

Lothar Miller schrieb:
> Diese schöne reproduzierbare reine Lehre vom synchronen Design findet in
> CPLDs sehr schnell ein Ende :-(

warum? ich hatte bis jetzt nur mit spartan3 zu tun.
zu wenige FF?

von Daniel -. (root)


Lesenswert?

Ralph H. schrieb:
> Bitte seid so lieb und versucht es mir auch irgendwie verständlich zu
> erklären und nicht nur draufhaun, ok ?!
> Ich weiß das ihr Profis alles gern synchron haben wollt, aber wenn ich
> als Newbie ne logische Schaltung nachbilde, dann sieht das so aus.

eigentlich nur deswegen weil der Takt - Event der ansteigenden Flanke -
durch die Logik "verschmiert" wird. Google nach clock skew.
Das Problem dabei ist, dass die Tools die clock skew "überwachen"
dadurch verwirrt werden und nicht mehr garantieren, dass es keine
setup-violentions gibt. clock enable hingegen ist normales Signal
und mischt nicht in die clock Analyse hinein.
So, das war meine unprofessionele Erklärung, da ich nur gelegentlich
damit zu tun habe.

von Daniel -. (root)


Lesenswert?

zusatz: from the top of my head ...
also wenn du clock gatest, beispielsweise durch ein
Freigabesignal, das zusammen mit clock und-verknüpft wird,
erfährt ein delay .. in ca 2ns Grösse. (LUT delay)
Gleichzeitig garantiert dir clock-tree in einem FPGA (Datenblatt)
ebenfalls max. clock skew von 2ns(Grössenordnung).
Worst case von FF zu FF können sich 4ns Taktversatz ergeben!
Wenn die jetzt Daten austauschen .. das schreit nach Problemen.

von Ralph H. (guru)


Lesenswert?

@Daniel... hm.. was willst Du mit Deinen Beiträgen sagen ?

Aus meiner Sicht liegen die doch glatt neben meinen Fragen zum Check des 
Codes, oder?

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.