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
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?
> 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.
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.
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
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?
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?
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
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?
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
> 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
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 ?
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 :)
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 ...?)
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.
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
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
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)?
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).
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?
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?
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
http://www.xilinx.com/xlnx/xil_ans_display.jsp?iLanguageID=1&getPagePath=13979&BV_SessionID=@@@@1948250797.1122327304@@@@&BV_EngineID=ccchaddfellgmfdcefeceihdffhdfkf.0 Taktsignale? O_o Naja egal :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.