Ein komplexer programmierbarer Logikbaustein (CPLD) ist ein unverzichtbarer Bestandteil Ihrer Hardware-Ausrüstung. Wie der Name schon sagt, können Sie diese Chips so programmieren, dass sie die benötigten Logikfunktionen bereitstellen. Dies kann der Ersatz veralteter Chips sein oder einfach eine Möglichkeit, verschiedene Technologien kennenzulernen und auszuprobieren. Was eignet sich besser zum Lernen als die praktische Anwendung von CPLDs?
Ich habe ein CPLD-Modul entwickelt, um es an verschiedene Geräte, unter anderem Steckplatinen, anschließen zu können, aber dabei ist mir ein Fehler unterlaufen. Die Steckfläche der Steckplatine beträgt anscheinend nur 1,1 Zoll. Ich habe die Leiterplatte jedoch 1 Zoll breit gestaltet, sodass kein Platz für eine Drahtreihe auf beiden Seiten bleibt. Mist.
Aber lassen Sie mich einen Schritt zurückgehen und genauer erklären, was ich mache: Ich möchte eine programmierbare Logik entwickeln, die als Bausatz gebaut, einfach zu Hause gelötet, in einem Schaltkreis programmiert werden kann und mit 3,3 oder 5 Volt funktioniert.
Um einen einfach zu lötenden Bausatz zu realisieren, verwendete ich ein älteres CPLD-Bauteil, das auch in 3,3-V- und 5-V-Versionen erhältlich ist und seine Programmierung unabhängig von der Versorgungsspannung beibehält. Die Logik selbst ist ein CPLD-IC der Altera Max-Serie, der in zwei Versionen für Leiterplatten mit 32 oder 64 Makrozellen verfügbar ist. Makrozellen sind die grundlegenden logischen Bausteine, die mithilfe logischer „Terme“ programmiert und anschließend über programmierbare Verbindungen miteinander verknüpft werden.
Wenn man sich den Schaltplan ansieht, erkennt man, dass er nicht viel Inhalt hat: im Grunde das CPLD, die In-Circuit-Programmierschaltung und den Oszillator, der die CPLD-Logik ansteuert.
Diese Bauteile, EPM7032 und EPM7064, verwenden einen 44-poligen PLCC-Chip (Plastic Lead Chip Carrier), der aufgrund seiner J-Form auch als J-Leitung bezeichnet wird. Das Gehäuse kann in eine Durchsteckfassung eingesetzt oder direkt auf die Leiterplatte gelötet werden.
Das Modul verfügt über einen integrierten Oszillator, sodass der CPLD zustandsbehaftete Operationen ausführen und selbstständig schnelle Zähler ohne externen Takt erzeugen kann. Steht ein externer Takt zur Verfügung, kann der Hochgeschwindigkeitstakt des Moduls genutzt werden, um bei jeder steigenden oder fallenden Flanke des externen Takts ein Taktereignis zu erzeugen. Dabei werden die CPLD/FPGA-Richtlinien eingehalten, d. h. es sollte das interne globale Taktnetzwerk anstelle der Option „Asynchron“ für den Takteingang verwendet werden. Die Nennversorgungsspannung dieses Oszillators liegt zwischen 1,8 und 5,5 Volt.
Wenn Sie sich das Video ansehen, werden Sie sehen, dass ich meine persönliche Präferenz für den Umgang mit dem "INH"-Pin des Oszillators erläutere; einfach ausgedrückt: Nachdem ich überprüft habe, ob die Spezifikationen zulässig sind, lasse ich ihn in der Regel offen.
Bei der Arbeit mit solchen Funktionen kamen mir unter anderem meine Bedenken in den Sinn, die Eingangspins (wenn möglich) nicht direkt an die Versorgungsspannung anzuschließen. Ich bevorzuge es, Vorwiderstände zu verwenden, um den Strom bei transienten Vorgängen zu begrenzen, selbst wenn dies eigentlich nicht nötig sein sollte.
Im Laufe der Jahre habe ich einige Probleme in der Produktion (insbesondere bei großen Losgrößen) beobachtet. Gelegentlich kann es vorkommen, dass durch häufiges Ein- und Ausschalten die direkt an die Stromversorgung angeschlossenen Pins eine höhere Spannung aufweisen als der Chip selbst – was unerwünscht ist. Um die Pins später verwenden zu können, kann man sie über einen Widerstand (entweder für die Stromversorgung oder Masse) mit der Stromversorgung verbinden. Dies ist insbesondere bei ungenutzten Gates relevant, da diese niemals unbeschaltet oder unverbunden bleiben sollten. Mithilfe eines Pull-up-Widerstands lässt sich das Signal anschließen und das Gate nutzen, ohne Leiterbahnen zu durchtrennen.
Der 10-polige Stecker und einige Widerstände bilden die Programmierschaltung. Wären alle Widerstände Pull-up-Widerstände, würde ich ein Widerstandsnetzwerk verwenden, aber leider ist einer davon geerdet.
Um einen so unabhängigen CPLD zu programmieren, wird ein spezieller Programmer benötigt. Das kann ich leicht sagen, da ich normalerweise ein paar davon griffbereit habe. Aber auch ohne eigenen Programmer ist der Einstieg nicht allzu schwierig. Der empfohlene „Altera USB Blaster“ kostet 50 US-Dollar und ist unter anderem bei Digikey erhältlich. Ich besitze mehrere Klone von eBay, darunter einen, der Altera, Xilinx und Lattice gleichzeitig unterstützt. Im Internet findet man ein Projekt und den dazugehörigen Code, mit dem man einen eigenen Klon bauen kann. Ich werde ihn in meiner Liste möglicher Videos zum Thema Programmer-Klone aufführen. Außerdem zeige ich ein Shield-Design, mit dem sich Motherboard, Arduino, PIC usw. programmieren lassen.
Die zum Kompilieren und Programmieren des CPLD benötigte Software ist kostenlos von Altera erhältlich, allerdings benötigt dieses ältere Bauteil die Version 9.1. Erfreulicherweise war dies meine Lieblingsversion. Sie verfügte über einen intuitiven Timing-Analyzer, der jedoch in einer späteren Version entfernt wurde.
Die Leiterplatte ist ein einfaches, doppelseitiges Design. Solange die Platine hineinpasst, verwende ich Kupfer für die Erdung und manchmal auch für die Stromversorgung. Manchmal verläuft das Gießen so unsauber, dass es zu Problemen oder einem unsauberen Endergebnis führen kann. Daher ist das erneute Gießen von Kupfer zwar hilfreich, muss aber kontrolliert erfolgen.
Heutzutage enthalten viele (wenn nicht die meisten) CAD-Softwarepakete 3D-Ansichten des Endprodukts. Die Genauigkeit der Darstellungen hängt jedoch von der Genauigkeit der verwendeten 3D-Modelle ab. Hier sehen Sie, wo ich das 3D-Modell für die 44-polige Buchse, den Programmieranschluss und den Oszillator ausgewählt habe. Hier sind einige 3D-Softwarepakete, die ich gerne verwende:
Viele Unternehmen verfügen auch über 3D-Modelle ihrer Bauteile. Molex ist nur ein Beispiel für ein Unternehmen, das in diesem Bereich gute Arbeit geleistet hat.
Der Fehler, den ich gemacht habe, beeinträchtigt weder die Funktion noch die Ästhetik und ist auch nicht das Hauptproblem, nämlich dass es nicht für ein einzelnes lötfreies Steckbrett geeignet ist.
Als ich darüber nachdachte, das Design mit anderen zu teilen, war ich sofort mit den Schaltplansymbolen des CPLD und der Pinbelegung des 40-poligen Steckers, der dessen Gesamtfläche ausmacht, unzufrieden. Ich nahm das Symbol eines 40-poligen zweireihigen Steckers und passte es an eine 1-Zoll-Grundfläche an. Die Pinbelegung ist jedoch nicht mit 1, 2, 3, 4 usw. nummeriert, sondern seitlich wie bei einem DIP-Gehäuse mit 1 und 3, 5, 7 usw., genau wie bei Flachbandkabelsteckern. Daher ist die Belegung nicht intuitiv, um die Verbindungen zum Modul zu ermitteln und Fehler zu beheben.
Auch die Pinbelegung der CPLDs ist etwas verwirrend, daher habe ich verschiedene Tools verwendet, die auf der Boundary Scan Description Language (BSDL) basieren, um Symbole zu erstellen. Die meisten großen Hersteller bieten BSDL-Dateien für ihre Standardkomponenten an, mit denen sich Symbole und Gehäuse (halb-)automatisch generieren lassen. Wie jede Automatisierung sollte man sie als Werkzeug betrachten und sie muss unter Umständen noch angepasst werden, um optimale Ergebnisse zu erzielen. In diesem Fall habe ich die Pins alphabetisch sortieren lassen, was beim Suchen der Pins auf der Platine fast zufällig ist. Ich kann nur sagen, dass ich an diesem Tag sehr nervös war.
Diese Abkürzungen rächen sich irgendwann. Wenn ich dieses Modul modifiziere, werde ich die Pinbelegung exakt an die des Bauteils anpassen, sodass man die Oszilloskopsonde anhand des Schaltplansymbols ganz einfach ansetzen kann.
Bei der Verwendung von Leiterplatten gibt es weitere Verbesserungen, die hauptsächlich ästhetischer oder praktischer Natur sind. Die Kennzeichnung von Pin 1 sollte in mehreren Gehäusen üblicher sein, und ich bevorzuge stets einen einfachen Masseanschluss für die Masse des Oszilloskops oder die Messleitung des Multimeters. Dies könnte durch einen zweipoligen Stecker realisiert werden, sodass Stromversorgung und Masse direkt an die Platine angelegt werden können, anstatt an die unteren Pins geklemmt zu werden.
Bevor ich die Platine modifiziere, möchte ich sicherstellen, dass sie einwandfrei funktioniert und auch optisch einwandfrei ist. Nachdem ich sie eingeschaltet und die korrekte Funktion des Oszillators bestätigt hatte, schloss ich den Programmierer an. Obwohl die 3,3-V-Version neuer ist als die Programmiersoftware, erkannte sie das CPLD und zeigte es als „unbekanntes“ Gerät an.
Anschließend erstellte ich in Quartus einen Zähler und wies ihm Pin-Nummern zu. Die schnelle Kompilierung und der Download sowie die auf dem Oszilloskop sichtbare Zählerfunktion bestätigen die Machbarkeit des Designs.
Die Schnelltestschaltung in Verilog ist sehr einfach. Der Code ist unten aufgeführt. Sie können eine ZIP-Datei mit dem Schaltplan und der Verilog-Testschaltung als Quartus II-Projekt herunterladen (Version 9.1 erforderlich).
Wie bereits erwähnt, werde ich die Leiterplatte ein zweites Mal überarbeiten, um den Details, die für die Weitergabe des Designs oder die Fehlersuche wichtig sind, mehr Aufmerksamkeit zu widmen. Da die Breite des unteren Anschlusses auf maximal 0,9 Zoll begrenzt sein muss, kann ich sie weiterhin auf 0,6 Zoll einstellen, was einem Standard-DIP-Gehäuse entspricht. Dadurch ragen die unteren Pins aus der CPLD-Sockelfläche heraus. In der Serienproduktion würde ich dies nicht tun, da die Platine damals von Hand bestückt wurde. Eines der Ziele war jedoch die Entwicklung eines Lötkits. Der Kompromiss beim Handlöten besteht darin, dass der Oszillator in einem SMD-Gehäuse (Surface Mount) verbaut sein muss. Die bedrahtete Version ist sehr groß und unterstützt in der Regel nicht den gewünschten Spannungsbereich.
Ist es möglich, mit diesen Modulen einen kompletten einfachen Computer zu bauen? Ich glaube, ich muss den Arbeitsspeicher erweitern.
Haha … ja, das hängt vom Computertyp ab. Allerdings sind „echte“ Mikrocontroller/Mikrocomputer durch die Pinbelegung des Moduls beeinträchtigt, was bedeutet, dass man nicht genügend Informationen vom Modul erhält, um damit wirklich etwas Sinnvolles anzufangen.
Ich habe einen kompletten NTSC-Kamera-Timing- und Modus-Controller mit einer Größe von 64 erstellt, sodass kein Prozessor benötigt wird.
Das im Buch Nand to Tetris verwendete Structural Verilog und HDL sind mehr oder weniger identisch.
Warum sind Durchsteckbauteile nötig? Schweißen mit 0805-Edelstahl ist einfach! Jetzt ist der richtige Zeitpunkt für jeden Bastler, diese Fertigkeit zu erlernen.
Wenn ich die obere Buchse so anordne, dass sie die von unten angelöteten Pins überlappt, kann ich sechs Kontakte (entsprechend einem 40-Pin-Chip) oder diagonale Verbindungen usw. verwenden. Die Bauteile für die unteren Anschlüsse müssen manuell verlötet werden. Die obere Buchse befindet sich hinter den Füßen.
Für Anfänger ist es jedoch schwierig, von unten zu löten. Wenn ich Stiftleisten für die Leiterplatte eines Steckbretts löte (diese günstigen SMD-Adapterplatinen, die man auf eBay findet, eignen sich gut für Prototypen), stecke ich die Stiftleisten in das Steckbrett, lege dann die Leiterplatte darauf und kann anschließend problemlos löten. Das ist für Steckbretter sehr gut geeignet. Wenn man von unten löten muss, ist es noch schwieriger.
Wenn sich das CPLD in der Mitte befindet (was die Verdrahtung möglicherweise vereinfacht), kann es diagonal ohne Überlappung installiert werden, es gibt 4 Reihen, oder das CPLD kann sich auf einer Seite befinden:
Danke für den Tipp, den Stecker vor dem Löten in das Steckbrett zu stecken. Meiner ist etwas wackelig.
Wie wäre es mit DIP-Steckplatinenstiften an einem Ende und dem Chip-Sockel in Dongle-Bauweise am anderen? Der Chip kann dann am Ende der Steckplatine aufgehängt werden. Die Leiterbahnführung wird eng.
|####### ******************** |. Ja, ich habe mich für die kostenlose Version von Altera entschieden, genau wie Xilinx und Lattice ebenfalls kostenlose Versionen anbieten. Ich muss das Gespräch mit Al Williams noch abschließen, um zu verstehen, was die gesamte Open-Source-Unterstützung beinhaltet, insbesondere die spezifischen Eigenschaften der Geräteserie. Trotzdem habe ich mit der kostenlosen Version schon viel erreicht.
Ja, ich glaube, Sie zeigen, dass sich das CPLD mit den Pins überlappt. Wenn ich es richtig verstehe, könnte das wie Revision 2 aussehen. Bei der Entwicklung für die (Massen-)Produktion bin ich immer allergisch gegen den Schritt der manuellen Lötmontage, da sich die Lötpins (genauer gesagt die Lötpins auf der Nicht-Komponentenseite) überlappen. (Es handelt sich bereits um ein handgelötetes Bauteil), aber dies ist nur ein kleines Kit, keine produktionsorientierte Entwicklung. Ich habe einfach ein paar Gewohnheiten, die ich in meinem Alter nur schwer ablegen kann. 
Ich denke, eine T-förmige Leiterplatte mit CPLD und passiven Bauteilen, die einen breiten T-förmigen Teil aufweist, wäre sehr nützlich, wenn sie am Rand des Steckbretts befestigt wird. Ähnlich wie der Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Dadurch wird der größte Teil der Steckbrettfläche genutzt.
Leider wird die Einstellung der Produktion die Verwendung in Nebenprojekten stark einschränken, genau wie bei all den Funktionsgeneratoren, die auf XR2206 und ICL8038 basieren.
Interessante Idee. Mir gefallen diese beiden Chips. CPLD ist nicht veraltet, es ist nur eine günstigere Möglichkeit, es mit 3,3 V zu beziehen.
Zu deinem „Unsinn“ … du hast ja kein neues Layout für das Steckbrett erstellt. Stecke einfach zuerst den Draht auf das Steckbrett und dann das Kabel darauf. Oder, falls du die Strom- und Masseanschlüsse von einem der Steckbretter abziehen kannst, verwende zwei Steckbretter.
Zu Altium und Eagle: Haben Sie KiCad schon einmal in Betracht gezogen? Es hat keine Einschränkungen, die Sie gegenüber Altium und Eagle bevorzugen würden, und erzeugt standardmäßig DRC-Fehler für alle nicht verbundenen Pins. Wenn Sie einen Pin wirklich öffnen möchten, müssen Sie dies explizit angeben. (Möglicherweise nur für Eingänge, nicht für Ausgänge; dies wurde jedoch noch nicht getestet.) Ein weiterer großer Vorteil ist die einfache Erlernbarkeit. Ich habe nur einen Nachmittag gebraucht, und die hervorragende Einführung hat mir den Einstieg erleichtert.
Ich bevorzuge SMD-Bauteile (mit größerem Bauteil) mit Durchsteckmontage. Sie sind einfacher zu handhaben. Man muss die Leiterplatte nicht ständig drehen. (Dadurch sind mir einige dumme Fehler unterlaufen...). Außerdem muss man die Anschlussdrähte der Widerstände nicht kürzen. Bei der gemeinsamen Nutzung eines Designs lassen sich mehrere Bauteile bequem auf einer Leiterplatte oder einem einzelnen Bauteil platzieren. SMD-Widerstände mit Durchsteckmontage. (Das Layout wird dadurch allerdings etwas komplizierter.)
Ich habe die „KiCad Getting Started“-Anleitung im PDF-Format verwendet. Die ältere Version, die ich benutzt habe, umfasst 29 Seiten, die neueste Version hat 52 Seiten. Sie finden sie in anderen Tutorials (inklusive Videolinks): http://kicad-pcb.org/help/tutorials/
Ich weiß, dass [Chris Gemmell] von Hackaday und The Amp Hour eine Serie über Kicad gemacht hat: http://kicad-pcb.org/help/tutorials/
KiCad könnte nützlich sein, ich schaue mir die Version 2 an. Danke für Ihre Vorschläge. Nicht verbundene Eingänge sind für die DRC (ERC) von Vorteil, und bei Steckverbindern und anderen Komponenten, die als Soft- oder IO-Komponenten fungieren, lassen sich die meisten CAD-Verbindungsabbrüche in der Regel vermeiden.
Ich habe einen kurzen Test durchgeführt und den Stecker in eine leere Tabelle eingefügt, anschließend die Annotationen und die DRC-Prüfung ausgeführt. Dabei wurden für jeden Pin DRC-Fehler angezeigt. Das Markieren bekanntermaßen nicht verbundener Pins ist jedoch sehr einfach.
Auf passiv einstellen. Ich muss suchen (Komponente bearbeiten -> Mit Bibliothekseditor bearbeiten). Der Bibliothekseditor öffnet sich und lädt Ihre Komponente in einem separaten Fenster. Sie können jeden Teil der Komponente überprüfen oder ändern. Die geänderte Komponente kann im Schaltplan gespeichert oder aktualisiert werden. Dadurch wird das Ändern von Komponenten sehr einfach. Die Bibliothek selbst ist mir nicht so wichtig. Wenn Sie beispielsweise CPLD verwenden, möchten Sie den Pins aussagekräftige Namen zuweisen. Wichtiger ist jedoch die gute Benutzeroberfläche zum Entwerfen eigener Komponenten.
In KiCads ERC (Electrical Rules Checker) werden „nicht verbundene“ Pins anders behandelt als „passive Pins“, und alle „nicht verbundenen“ Pins erzeugen Fehler. Die Funktionsweise des ERC lässt sich einfach an Ihre Bedürfnisse anpassen: Werkzeuge → Elektrische Regelprüfung → Optionen.
Veröffentlichungsdatum: 18. November 2021





