Hallo, ich habe vor mir dieses Weihnachten den Einstieg in die CPLD-Technik zu gönnen :) Also bestelle ich mir ein XC95144XL und entwerfe ein Experimentierboard. Allerdings möchte ich vorher noch ein paar Fragen klären. Inzwischen habe ich schon verschiedene Datenblätter von Xilinx durchgearbeitet. Leider gibt es da sehr viele verschiedene und nicht DAS Datenblatt. Daher besteht die größte Herausforderung darin irgendwelche Funktionen zu erahnen und dann auf der Xilinx Website nach dem richtigen Begriff zu suchen. Daher möchte ich hier nur nochmal Sicherheitshalber nachfragen ob ich alles richtig verstanden habe. Mir sind folgende Global Pins aufgefallen: GCK - Global Clock GTS - Global Enable Output GSR - Global Set/Reset Global Clock: Ist eine extra geführte "Leitung" im CPLD, welche es ermöglicht ein Clocksignal zum syncronen Design an alle Notwendigen Punkte gleichzeitig zu liefern (z.b. an FlipFlops). Man könnte zwar auch andere Leitungen für den Clock mißbrauchen, was jedoch zu unterschiedlichen Laufzeiten führen könnte... Gloabl Enable Output: Ist ebenfalls eine extra geführte "Leitung", welche es ermöglicht TRI-State Buffer an den Ausgangpins ein oder aus zu schalten. Ich nehme an, daß diese Buffer optional sind, da in einigen Layouts mit solchen CPLDs die GTS Leitung nicht bestückt war. Gloabl Set/Reset: Ist auch eine extra geführte "Leitung" womit man ein Globales Reset Signal an alle Notwendigen Punkte gleichzeitig senden kann (ohne unterschiedliche Laufzeiten) z.b. an ein Flip Flop. Ich hoffe das habe ich so richtig verstanden, fall nicht: Einfach sagen :) Der XC95144XL hat ganze 81 IO Pins. Das ist dufte, denn so teile ich diese Pins in 10 Gruppen mit je 8 Leitungen und führe sie dann auf meinem Board an 10 Klemmen mit je 8 Pins. Bleibt dabei ein PIN übrig und da habe ich den GSR Pin ausgewählt. Diesen schließe ich an die Resetleitung meines Boards. Ist nur die frage ob man den GSR Pin normalerweise High oder Low Aktiv betreibt? Was kommt bei euren Designs am meisten vor, wie handhabt ihr dieses Signal? Im Notfall kann ich mein Schaltungsdesign so auslegen, daß man den Reset durch das umlöten von zwei Widerstandänden sowohl als auch betreiben kann. Was findet ihr besser? Und als letztes habe ich mir gedacht, das es vielleicht keine schlechte Idee ist allen restlichen IO-Pins (also 80) Pull Up oder Pull Down Widerstände zu schenken (ist ja Weihnachten). Zwar verfügt der CPLD selbst über die Möglichkeit ungenutzte Pins mit internen PULL Up oder PULL Downs auszustatten, aber vielleicht sind ja externe gar nicht schlecht? Oder sehe ich das falsch? Habt ihr jemals externe PULL Up/Down verwendet oder gebraucht? Sind immerhin 80 Widerstände die man sich sparen könnte :) Falls ich diese doch im Design lasse, dann werde ich es so handhaben, daß durch einen Jumper zwischen PULL Up und PULL Down gewählt werden kann. Ich hoffe ich habe hier niemanden durch Fragen genervt, die schon tausend mal vorgekommen sind (ich habe vorher zumindest nach den Antworten gesucht) und vielleicht hat der eine oder andere noch ne dufte Idee für meine Experimentierplatine :) Bis denn, Netbandit
>Ist nur die frage ob man den GSR Pin normalerweise High oder Low >Aktiv betreibt? Was kommt bei euren Designs am meisten vor, wie >handhabt ihr dieses Signal? Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv) Gruß, Dirk
Hallo, ich würde den GCK nicht auf einen Pin führen, sondern auf einen Quarzoszillator, der mit auf dem Board ist. Einen Takt braucht man immer, einen Reset nicht :-) Wenn du die Leitungen eh auf 10 x 8er klemmen führst, so kannst du auch einfach 10 SIL Widerstandsnetzwerke nehmen, du weist schon, diese länglichen mit 9 Beinen alle in einer Reihe, von denen einer der Gemeinsame ist, das sollte Layouttechnisch auch keinen großen mehraufwand machen. Wenn man Pull Ups hat ist man immer auf der sicheren Seite, wenn man z.B einen Taster nach GND anklemmt. Und wenn schon Weinachten ist und du deinem Demo Board was spendieren willst, dann bau noch n paar LEDs und Taster gleich mit aufs Board. Stören tun sie ja nicht wenn die da sind, es stört aber wenn man bei jedem kleinen Text immer Taster und LEDs rannfriemeln muss. mfg stefan
>>Der XC95144XL hat ganze 81 IO Pins. Das ist dufte, denn so teile ich >>diese Pins in 10 Gruppen mit je 8 Leitungen und führe sie dann auf >>meinem Board an 10 Klemmen mit je 8 Pins. Diese Vorgehensweise ist zu pauschal und du wirst mit späteren "on the fly" Designs immer wieder Probleme bekommen auf diesen Headern die Busse logisch zu gruppieren. Es wird nämlich öfters der Fall sein das die Synthese ein Bus nicht exakt zu einem IO-Block zuordnen kann. Der Effekt ist dann das ein zb. 16 Bit Datenbus auf deinen gruppierten Headern ungleichmäßig verteilt sein dürfte. Ich rate daher zu folgedenem. In der Mitte dein CPLD, drumherum ein Karret aus Pin Headern. Am Boardrand dann mehrere 8/16/32 Bit Header die per Steckbrücken verdrahtet werden können. Du brauchst dann nur noch entsprechend viele kleine Litzen mit Buchsen. Gruß Hagen
Hi, danke schonmal wegen den Tips. @Dirk: >Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv) An sich habe ich selten Bausteine gesehen, welche ein High Aktiven Reset haben. Vielleicht verzichte ich ganz und gar auf diese Möglichkeit zu gunten etwas mehr Platz auf der LP :) @Stefan: Ja grundsätzlich ist das eine gute Idee, man könnte ja einen IC Sockel nehmen und einen Quarzoszillator draufsetzen. Andererseits ist so ein Oszillator auch ganz schnell an die Klemme rangesteckt (der Klemmpin für GCK) Für Taster und Leds habe ich nicht genug Platz (bzw. nicht genug Platz um diese abschaltbar zu gestalten) und pauschal an jedem Pin eine LED oder einen Taster das gefällt mir nicht. Jedoch werde ich mit sicherheit noch LED Platinen und Tasterplatinen zum ranklemmen dazudesignen. @Hagen: Deine Idee gefällt mir sehr gut, doch wid auf einer Standart Europlatine der Platz dann etwas knapp. An sicht müßte man eigendlich eine schöne große Platine nehmen (doppelte EURO z.b.) und noch so richtig schon viel schnickschnack dazu packen (Speicher etc.) Aber das System mit den Klemmkontakten ist schon recht flexibel und erlaubt mir einzelne Pins auf den 10 Klemmkontakten anabhänig zu beschalten. Dadurch erziele ich ja schon fast wieder den Effekt den du vorschlägst. Ich habe mal ein Bild meiner Mega128 Experimentalplatine angehangen. Dort verwende ich die gleichen Klemmkontakte. Ich habe mir für das nächste Jahr auch vorgenommen verschiedene kleine Zusatzplatinen (mit Tastern SRAM LEDs ) hinzuzubauen, damit dürfte dann das System perfekt sein. Von den Klemmen erwarte ich mir eine sehr lange Lebenszeit (im gegensatz zu Präzisionsstiftleisten die leicht mal verbiegen und abbrechen).
>>Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv) >An sich habe ich selten Bausteine gesehen, welche ein High Aktiven >Reset haben. Vielleicht verzichte ich ganz und gar auf diese >Möglichkeit zu gunten etwas mehr Platz auf der LP :) Nun, das ist nur die halbe Wahrheit. Stimmt, die meisten IC der 74xx Reihe haben low active reset. Intern arbeiten zumindest die Xilinx Teile mit ihren vordef. Blöcken (LSR16 etc.) jedoch (fast immer?) mit active high. Intern müsste man dann wieder (indirekt) einen Inverter für active low nehmen. Zwei Möglichkeiten, die ich kenne: 1) in der architecture
1 | constant RESET_ACTIVE : std_logic := '0'; -- oder '1' |
2) als generic bei der entity
1 | generic ( |
2 | RESET_ACTIVE : std_logic := '1'; |
3 | );
|
und dann:
1 | if (reset = RESET_ACTIVE) then |
2 | ...
|
3 | else ... |
Damit kann man bis zum Zeitpunkt des PCB die Entscheidung herauszögern. Was Hagen schon angedeutet hat, dass die I/O von Bussystemen nicht zwingend alle auf aufeinander folgende I/O Pins gelegt werden können aufgrund der internen Struktur, ist schon problematisch. Dafür habe ich allerdings keine Lösung (ist imo nervig). Viele Grüße Olaf
Hi Olaf, danke für die Tips. Ins VHDL bin ich zwar noch nicht eingestiegen (habe erst ein wenig mit Schematic eine Trockenübung betrieben) aber das habe ich mir im neuen Jahr ganz fest vorgenommen. Ich werde dann Sicherheitshalber das Reset für beide varianten Layouten. Und so kann ich im Notfall ein paar Widerstände umlöten. Das mit den IOs ist wirklich etwas nervig, aber man kann halt nicht alles haben :)
Hi, so nun (im neuen Jahr) ist mein erstes Projekt zum Thema CPLD fertig. Ich habe wie angekündigt eine Experimentierplatine gebaut und schon die ersten kleinen Schematics getestet. Sie geht sehr gut und entspricht meinen Erwartungen voll und ganz. Damit ich auch noch in einem Jahr weiß welcher Pin zu welcher Klemmleiste geht und die wichtigsten Informationen zum Betrieb und Nachbau immer parat habe, hab ich nun eine Art "Projektdokumentation" bzw. "Datenblatt" dafür geschrieben. Ich bin ja kien Dipl.-Ing. und habe daher nie gelernt nach welchen Regeln soetwas geschehen sollte, daher stelle ich es mal online. Vielleicht hat der eine oder andere noch Tips welche Infos noch dringend reingehören. Also ich bin ganz Ohr :)
Hi! Das ist mal ganz interessant zu sehen! Vielen Dank! Möchte auch demnächst mit CPLDs anfangen und suche gerade alle möglichen Infos zusammen.
@Gast Gast Hier sind die Eagle Datein für das Board, den CPLD_ISP und die Bibliothekn für die verwendeten Bauteile. Vielleicht hilft es ja. Zusätzlich empfehle ich dir http://www.ulrichradig.de/ Viel Erfolg
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.