Forum: FPGA, VHDL & Co. Einfacher CPLD programmer & CPLD problem


von Marius S. (lupin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe letztens eine Anleitung gesehen wie man sich einen parallel
port programmer für xilinx CPLDs mit passiven komponenten bauen kann,
das war glaube ich auf der Homepage von einem user hier... Leider hab
ich die URL verloren, kann mir vielleicht jemand sagen wo ich ein paar
infos dazu her bekomme (eine art anfänger tutorial)?

Ich habe einen CPLD im einsatz der eine Addresse de-multiplexen soll
allerdings arbeitet der nicht korrekt, irgendwas scheint der zu machen
aber nicht das was ich will...

Brauche ich um einen CPLD zu betreiben noch irgendwelche spezielle
Beschaltung? Ich hab einfach die VCC (über 100nF) und GND pins
beschaltet und die I/O pins gehen an einen flash speicher (der flash
speicher soll die de-multiplexte addresse erhalten) und an einen
microcontroller (low address und high address flag + eine hälfte der
addresse) ansonsten habe ich keine passiven Komponenten.

gibt es bei xilinx so fiese sachen wie gleiche CPLDs mit
unterschiedlichen pinout (reverse versionen zB)?

Es handelt sich um einen XC9536XL. Ich betreibe cpld und IO pins mit
3.25V aus einem spannungsregler.

Als ich dem CPLD die Addresse 0x3DEED übergeben habe kam 0x15E4D raus
und als ich ihm 0xFFFFF übergeben habe kam auch 0xFFFFF raus!

Wenn jemand irgend eine Idee hat woran mein problem liegen könnte nur
her damit! :)

Anbei nochmal das vhdl programm. Neben dem de-multiplexing invertiert
der CPLD auch noch das OE signal weil das OE signal vom AT49LV040 flash
speicher invertiert ist.

Mfg,
Marius

von Marius S. (lupin) Benutzerseite


Lesenswert?

und mir ist auch noch aufgefallen das bei normalen betrieb an einigen
programmier pins (das interface ist jtag glaube ich, oder?) spannung an
liegt. ist das normal?

von Tobias (Gast)


Lesenswert?

> jtag spannung ? ist normal

in deinem code (process) kommen nicht definierte zustände vor

Beispiel:
if (LADR = '1') then
      FA(9 downto 0) <= A(9 downto 0);
    end if;

Synthese weiss doch gar nicht was passieren soll wenn LADR = '0'
ist.
da liegt der Haken. Einfach ein else dahinter hängen mit dem anderen
fall, fertig.

von Marius S. (lupin) Benutzerseite


Lesenswert?

wenn es nicht '1' ist soll eigentlich nix passieren und FA soll nicht
geändert werden. Ich sehe da kein problem und ich wüßte nicht was ich
bei else hin schreiben soll.

von Cpt_Kacke (Gast)


Lesenswert?

Hallo

Auf der Hardwareseite kann ich nur empfehlen, die Abblockkondensatoren
nicht zu vernachlässigen (siehe Datenblatt). Das sind mehrere DIREKT am
CPLD. Hat bei mir Wunder gewirkt. So ein CPLD kann ganz schön große
Stromspitzen benütigen.

Grüße
Cpt

von Marius S. (lupin) Benutzerseite


Lesenswert?

Die schematic die ich habe sieht aber nur einen Abblockkondensator für
den CPLD vor. Ein bekannter hat es sogar ohne irgend einen Kondensator
zum laufen bekommen.

Wie ist das denn mit dem verlöten? Kann ein CPLD durch zu viel Hitze
beim Löten Fehlfunktionen haben?

von Marius S. (lupin) Benutzerseite


Lesenswert?

ich habe eben mal so einen cpld programmer gebastelt und damit den cpld
nochmal überprüft. Scheint alles richtig zu sein.

Ich wollte in iMPACT einen Funktionstest durchführen da kam dann aber
die Meldung:

ERROR:iMPACT:431 - '1':No vectors present.


Was hat das zu bedeuten?

von Cpt_Kacke (Gast)


Lesenswert?

Kondensatoren gehören eigentlich an "fast" jedes digitale IC (bei
mehreren ev. jedes 2. etc.! Die Application Note von Xilinx zum CPLD
Dev Board ist irgendwie nicht mehr online. Da waren die Kondensatoren
eingezeichnet. Versuch mal an wenigstens 1 der VCC/GND Paare direkt am
CPLD einen Kondensator ca. 10 pF und einen ca. 10 nF anzubringen.

"No vectors present" hört sich jetzt ohne nachzuschaun nach fehlendem
Config-File an ... schau mal nach ob du auch eine Datei zum
programmieren zugeordnet hast.

Eine gute Möglichkeit um die Stabilität der Versorgungsspannung und des
Programmers zu testen ist das "ID-Core looping" (oder so ähnlich). Die
Funktion ist im selben Menü, das auch für die Programmierung benutzt
wird anwählbar.

Grüße Cpt

von Marius S. (lupin) Benutzerseite


Lesenswert?

hmm also das id-core looping hat funktioniert. Vorm funktionstest habe
ich extra die *.jed datei nochmal neu geladen - daran liegt es wohl
nicht.

Warum denn so komische Werte für die Kondensatoren?

von Cpt_Kacke (Gast)


Lesenswert?

sorry die Meldung "no vectors present" scheint was mit den
configurationsfiles für den CPLD zu tun zu haben. Hast du in den
Project options den korrekten CPLD angegeben? Im Impact tool das
richtig BSDL File angewählt? Und bist du auch im JTAG
Configurationsmodus ??

10 nF ist eigentlic kein "komischer" Wert zum abblocken. Den um die
47 pF Kondensator nur zur Sicherheit für extrem schnelle Stromspitzen.
Die Kondensatoren brauchst du, da beim schalten von digitalen
Strukturen kurzzeitig hohe Stromspitzen auftauchen. Die Quelle kenn den
Strom nicht liefern und die Spannung bricht ein. --> Fehlfunktion des
Logikschaltkreises. CPLD's sind da meiner Erfahrung nach noch etwas
"fieser"  :-)

So ich geh jetzt feiern.
Hoffe mal das bringt dich irgendwie weiter

Cpt

von Marius S. (lupin) Benutzerseite


Lesenswert?

> Hast du in den Project options den korrekten CPLD angegeben?
Ich habe XC9536XL-10vq44 angegeben

Auf den Chip steht genau das hier:
XC9536XL(tm)
VQG44CMNO449
A13361B4A
10C

Das ist echt schwer zu lesen :(

> Im Impact tool das richtig BSDL File angewählt?
Wo wähle ich das? Das tool hat den chip selbstständig als XC9536XL
erkannt keine ahnung ob es dann das richtige bsdl file wählt.

> Und bist du auch im JTAG Configurationsmodus ??
Keine Ahnung. ich denke mal das tool macht das auch automatisch, oder
nicht?

Also ich hab noch einen 22pF Kondensator ran gemacht, scheint nix zu
bringen. Ich werd nochmal ein wenig durchtesten

von FPGA-User (Gast)


Lesenswert?

wäre mir nicht sicher, ob die Synthese aus Deinem
VHDL-Code das richtige macht.
Was Du brauchst, sind doch 2 Latches, die jeweils
10 bit der Adresse festhalten - oder ?
Also versuch doch mal, das so umzuschreiben, dass
LADR und HADR als Clocksignale wirken.

Wie schnell ist das Timing ?

von Marius S. (lupin) Benutzerseite


Lesenswert?

Das Timing ist 4 mhz, leide habe ich keine ahnung von vhdl und den vhdl
code hat jemand anders geschrieben... wenn du weisst was ich ändern
sollte probiere ich das gerne aus

ich hab eben 3x 27 pF kondensatoren ran gehauen, das hat nix
gebracht... ich werd sie mal ran lassen, kann ja nicht schaden :)

von FPGA-User (Gast)


Angehängte Dateien:

Lesenswert?

OK, ich hab mal den VHDL-Code geändert, wie gesagt,
das basiert auf Vermutungen, da ich das genaue Timing
nicht kenne, probier doch mal beide Varianten aus.
Bist Du auch sicher, dass die Pins alle richtig belegt sind?
(UCF-File ...?)

von FPGA-User (Gast)


Angehängte Dateien:

Lesenswert?

... jetzt noch Version 1 ...

von Marius S. (lupin) Benutzerseite


Lesenswert?

danke! Aber ich glaube mein CPLD ist mir gestern oder so drauf
gegangen... der gibt an allen ports immer eine spannung von ~0.2-1.5
volt aus, aber das programmieren geht noch. Echt komisch das ganze, ich
werde mal versuchen einen neuen drauf zu bekommen.

von FPGA-User (Gast)


Lesenswert?

warte mal, kann das sein, dass da was schwingt ?
Hast Du einen Oszi zur Hand ??
mögl. ist das CPLD noch OK !
Leg doch im VHDL-Code mal einen konstanten Wert auf
die Adresse, z.B.:

adr <= (others=>'0');

damit kannst Du das CPLD prüfen

von Marius S. (lupin) Benutzerseite


Lesenswert?

jo da scheint irgendwas zu schwingen, ein test in dem ich alles mal
high/low gesetzt habe hat funktioniert. komisch ist nur das dieses
geschwinge auch an den eingabepins A() vor kommt... die eingabe pins
gehen zu einen microcontroller der die pins als eingang geschaltet hat
und ich hab den strom an den pins ohne eingesteckte karte gemessen - 0V
und als ich die karte eingesteckt habe hatte ich ~1V (wahrscheinlich am
schwingen). Hab kein osziloskop

von FPGA-User (Gast)


Lesenswert?

das Problem könnte sein, dass die XC95... ziemlich stark
zum Schwingen neigen, wenn die Eingangsbeschaltung nicht
ganz OK ist.
Die Masse von uC und CPLD sind direkt verbunden, hoffe ich,
versuchs doch mal mit Pullup bzw. Pulldown - Widerständen.
leg mal ein Adressbit über  1k auf Masse, steck alles zusammen
und miss nochmal (der uC darf natürlich jetzt keine Adressen
ändern, sonst wirds sinnlos).
Hast Du schonmal meine Änderungen getestet (auch ohne Pullups)?

von Marius S. (lupin) Benutzerseite


Lesenswert?

also es liegt wohl am vhdl code

hab mal nen test durchgeführt, erst hab ich den ersten, unteren teil
der addresse geschrieben und durchgemessen - super, alle pins werden
richtig angesteuert, ich hab einfach mal überall 1 ausgegeben also
waren 10 pins auf 3.2 volt!

Soweit so gut, dann hab ich nachdem ich alles gemessen habe meinem
controller das signal gegeben den zweiten teil der addresse zu
schreiben, ich hab dann alle "hohen" address-pins durchgemessen und
alle 10 pins waren auf 3.2 volt! super! aber dann mess ich nochmal die
unteren pins und die wurden irgendwie wieder auf 0 volt zurück gesetzt
O_o"

Was ist denn da los? :(

Scheint so als ob das Ergebnis nur an den pins dargestellt wird wenn
die if-abfrage true ergibt! Deshalb funktioniert dein code gar nicht
(beim durchmessen ist da immer 0 weil wahrscheinlich nur ein mal bei
steigender oder fallender flanke 1 gesetzt wird).

von FPGA-User (Gast)


Lesenswert?

also hast Du jetzt mit Deinem orig. Code getestet
oder mit meiner Variante 1 oder 2 oder alle 3 Varianten?

Und wenn Du nicht weißt, wie sich die Signale verhalten sollten,
dann kannst Du auch keine Lösung finden, die sicher funktioniert.

Da ich 2 Adr-Ena-Signale in Deinem VHDL gesehen habe, nahm ich
an, dass mit diesen Signalen der jeweilige Adressteil anliegt.
Wenn das so ist, sollte das Einschreiben bei steigender oder
fallender Flanke in ein 10 bit Register schon möglich sein.
Ein anderes, sinnvolles Timing ist mir nicht eingefallen.

Sollte ein Adressteil wieder auf '0' gehen, dann war eine
entspr. Taktflanke vorhanden, ohne dass der Adressbus korrekt
gesetzt war. Vielleicht fehlt noch ein CS-Signal ? Hängt noch
ein anderer Teilnehmer am Bus oder nutzt der uC diesen selbst?

von Marius S. (lupin) Benutzerseite


Lesenswert?

nein es ist einfach nur eine Verbindung zwischen mikrocontroller, cpld
und flash speicher. ein CS signal gibt es auch, ist aber dauerhaft
gesetzt :)

Also ich hab gerade gemerkt das 2 pins vertauscht waren, kann ich mir
zwar nicht ganz erklären weil das bei einem früheren design nicht
vertauscht war aber egal... jedenfalls scheint der cpld jetzt zu
funktionieren, ich habe mühsam einfach mal jedes signal einzeln gesetzt
und geschaut ob auch der richtige pin high wird.

Aber bei der Synthese ist mir noch was aufgefallen, nämlich diese
Warnung für alle FA einträge:

WARNING:Xst:737 - Found 1-bit latch for signal <FA_19>.

Was hat denn das zu bedeuten?

von Tobias (Gast)


Lesenswert?

Ignoriere die Warnung, ist normal. Ursache ist, das du Taktsignale
verwendest, die nicht über Global Clock Pins, bzw. über das
ausbalancierte globale Clock Netzwerk geführt werden. Das führt dazu,
das die Taktflanken nicht synchron an den den Flip Flops ankommen, was
in einigen Fällen (z.b. komplexe State Machines) zu Problemen führen
können, in deinem Design aber absolut unkritisch sind.

G. Tobias

von Marius S. (lupin) Benutzerseite


Lesenswert?


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.