Programmierbare Logik: Erstellen Sie selbst ein CPLD-Modul

Blog

HeimHeim / Blog / Programmierbare Logik: Erstellen Sie selbst ein CPLD-Modul

Aug 07, 2023

Programmierbare Logik: Erstellen Sie selbst ein CPLD-Modul

Ein komplexes programmierbares Logikgerät (CPLD) ist eine großartige Hardware, die Sie in Ihrem Repertoire haben sollten. Wie der Name schon sagt, können Sie diese Chips so programmieren, dass sie die von Ihnen benötigten Logikfunktionen erfüllen. Das könnte

Ein komplexes programmierbares Logikgerät (CPLD) ist eine großartige Hardware, die Sie in Ihrem Repertoire haben sollten. Wie der Name schon sagt, können Sie diese Chips so programmieren, dass sie die von Ihnen benötigten Logikfunktionen erfüllen. Dies könnte der Ersatz eines veralteten Chips sein oder einfach nur eine Möglichkeit, verschiedene Techniken zu erlernen und auszuprobieren. Gibt es eine bessere Möglichkeit, etwas zu lernen, als ein CPLD in die Hände zu bekommen und es auszuprobieren?

Ich habe ein CPLD-Modul mit der Absicht entwickelt, es in viele Dinge, einschließlich lötfreier Steckbretter, einstecken zu können, aber ich habe es vermasselt. Es scheint, dass der Steckplatz, der auf einem lötfreien Steckbrett verfügbar ist, 1,1 Zoll beträgt. Ich hatte die Grundfläche 1 Zoll breit gemacht und auf beiden Seiten keinen Platz für eine Reihe von Drähten gelassen. Puh.

Aber lassen Sie mich zurückgehen und mehr über das zeigen, was ich tue. Ich wollte ein programmierbares Stück Logik erstellen, das als Bausatz gebaut werden kann, den man leicht zu Hause löten kann, das im Schaltkreis programmiert werden kann und bei 3,3 funktioniert oder 5 Volt.

Um einen leicht lötbaren Bausatz zu implementieren, habe ich mich für ein älteres CPLD-Teil entschieden, das auch 3,3-V- und 5-V-Versionen hat, die ihre Programmierung unabhängig von der Stromversorgung beibehalten. Die Logik selbst ist ein CPLD-IC aus der Altera Max-Familie mit zwei Versionen, die entweder mit 32 oder 64 Makrozellen auf die Platine passen. Eine Makrozelle ist der grundlegende Logikbaustein und wird mit logischen „Begriffen“ programmiert und dann über eine programmierbare Verbindung mit anderen Makrozellen verbunden.

Wenn man sich den Schaltplan ansieht, erkennt man, dass nicht viel dahintersteckt: im Grunde das CPLD, die Schaltung für die In-Circuit-Programmierung und einen Oszillator zur Ansteuerung der Logik im CPLD.

Dieses Teil, das als EPM7032 und EPM7064 bekannt ist, wird in einem 44-poligen Plastic Leaded Chip Carrier (PLCC) geliefert, der aufgrund der J-Form der Stiftanschlüsse manchmal auch als J-Anschluss bezeichnet wird. Dieses Gehäuse kann in eine Durchgangsbuchse gesteckt oder direkt auf die Leiterplatte gelötet werden.

Der integrierte Oszillator ist im Lieferumfang enthalten, sodass das CPLD zustandsbehaftet arbeiten und selbständig schnelle Zähler erstellen kann, ohne dass ein externer Takt erforderlich ist. Wenn ein externer Takt verfügbar ist, kann der schnellere Takt des Moduls verwendet werden, um bei jeder steigenden oder fallenden Flanke des externen Takts ein Taktereignis zu erzeugen und sich dennoch an die Richtlinien für CPLD/FPGAs zu halten, die besagen, dass Sie den wirklich verwenden sollten internes globales Taktnetzwerk und treibt einen Takteingang nicht „asynchron“ an. Dieser Oszillator ist für eine Versorgungsspannung zwischen 1,8 und 5,5 Volt ausgelegt.

Wenn Sie sich das Video ansehen, werden Sie sehen, wie ich meine persönlichen Vorlieben bespreche, wie ich den Aktivierungspin „INH“ an einem Oszillator behandle. Einfach ausgedrückt neige ich dazu, es schweben zu lassen, nachdem ich anhand des Datenblatts überprüft habe, ob dies zulässig ist.

Zu den Gründen, die mir durch den Kopf gehen, wenn ich mich mit dieser Art von Funktion beschäftige, gehört die Tatsache, dass ich einen Eingangspin nicht gerne direkt an eine Stromschiene binde, wenn ich es vermeiden kann. IE bevorzuge ich die Verwendung eines Vorwiderstands, der den Strom bei Transienten begrenzt, auch wenn er eigentlich nicht benötigt wird.

Im Laufe der Jahre habe ich Probleme in der Produktion (Massenmengen) gesehen, bei denen gelegentlich ein direkt an eine Stromschiene angeschlossener Pin durch Aus- und Einschalten eine höhere Spannung als der Chip selbst haben kann, was schlecht ist. Schließlich kann man mit einem Stift, der über einen Widerstand an eine Stromschiene angeschlossen ist, egal ob Strom oder Masse, später seine Meinung ändern und den Stift verwenden. Dies gilt meiner Erfahrung nach insbesondere für ungenutzte Gates, die, wie Sie wahrscheinlich wissen, niemals schwebend oder unverbunden bleiben sollten. Durch die Verwendung eines Pull-Ups haben Sie einen Punkt, an dem Sie ein Signal anschließen und das Gate verwenden können, ohne Kupferleiterbahnen durchtrennen zu müssen.

Der 10-polige Stecker und eine Handvoll Widerstände bilden die Programmierschaltung. Wenn alle Widerstände Pull-ups wären, würde ich ein Widerstandsnetzwerk verwenden, aber leider ist einer auf Masse.

Um ein eigenständiges CPLD wie dieses zu programmieren, ist ein dedizierter Programmierer erforderlich. Das kann ich leicht sagen, da ich normalerweise mehrere herumliegen habe, aber wenn man keines hat, ist es nicht allzu schwierig, in das Spiel einzusteigen. Ein zugelassener „Altera USB Blaster“ kostet 50 US-Dollar und ist unter anderem bei Digikey erhältlich. Ich habe mehrere Klone, die ich bei eBay gekauft habe, darunter einen, der Altera, Xilinx und Lattice in einem unterstützt. Im Internet gibt es ein Projekt und Code zum Erstellen eines eigenen Klons, und ich habe es auf meiner Liste möglicher Videos, um ein Projekt zum Erstellen eines Programmierer-Klons durchzuführen. Ich werde auch ein Shield-Design zeigen, bei dem die Hauptplatine, Arduino, PIC usw. die Programmierung übernehmen kann

Die zum Kompilieren und Programmieren des CPLD erforderliche Software ist kostenlos bei Altera erhältlich, für diesen älteren Teil ist jedoch die ältere Version 9.1 erforderlich. Die gute Nachricht ist, dass es meine liebste ältere Version ist, die über einen intuitiven Timing-Analysator verfügt, der in späteren Versionen entfernt wurde.

Die Platine hat ein einfaches zweiseitiges Design und ich neige dazu, Kupfer für die Erdung und manchmal für die Stromversorgung zu verwenden, solange die Platine dafür geeignet ist. Manchmal zerfällt der Guss so stark, dass es tatsächlich zu Problemen kommt oder das Endergebnis einfach nur schlampig ausfällt. Auch hier ist ein Kupferguss ein Werkzeug, das aber gehandhabt werden muss.

Viele, wenn nicht die meisten CAD-Pakete enthalten heutzutage eine 3D-Ansicht des Endprodukts, allerdings ist die Genauigkeit des Bildes nur so genau wie die 3D-Modelle, die zur Darstellung der Teile verwendet werden. Hier ist zu sehen, wo ich das 3D-Modell für die 44-Pin-Buchse, den Programmierstecker und den Oszillator auswähle. Hier sind einige der 3D-Pakete, die ich gerne verwende:

Auch viele Unternehmen verfügen über 3D-Modelle für ihre Komponenten. Molex ist nur ein Beispiel für ein Unternehmen, dem das recht gut gelingt.

Die Fehler, die ich gemacht habe, wirken sich weniger auf die Funktion als vielmehr auf die Ästhetik aus, ganz zu schweigen vom Hauptproblem, das darin besteht, dass es nicht sehr gut auf ein einziges lötfreies Steckbrett passt.

Als mir in den Sinn kam, dass ich das Design mit irgendjemandem teilen könnte, war ich sofort unzufrieden mit dem Schaltplansymbol für das CPLD und mit der Pinbelegung des 40-Pin-Steckers, die seinen gesamten Platzbedarf darstellt. Ich hatte mir ein zweireihiges 40-Pin-Steckersymbol geschnappt und es an eine 1-Zoll-Grundfläche angepasst, aber statt der Pinnummerierung 1,2,3,4... an der Seite wie bei einem DIP-Gehäuse ist es mit 1,3,5,7 nummeriert … wie ein Flachbandkabelstecker. Folglich handelt es sich um einen nicht intuitiven Footprint, um herauszufinden, wie man eine Verbindung zum Modul herstellt, und um Fehler zu beheben.

Ebenso ist die CPLD-Pinbelegung etwas verwirrend. Ich habe eine Reihe von Dienstprogrammen verwendet, die auf der Boundary Scan Description Language (BSDL) basieren, um das Symbol zu erstellen. Die meisten großen Anbieter verfügen über BSDL-Dateien für ihre Mainstream-Teile, mit denen Sie Symbole und Footprints (halb-)automatisch erstellen können. Wie jede Automatisierung muss es wie ein Werkzeug behandelt werden und kann für optimale Ergebnisse eine weitere Massage erfordern. In diesem Fall lasse ich die Pins alphabetisch auflisten, was fast zufällig ist, wenn es darum geht, einen Pin auf der Platine zu verfolgen. Sagen wir einfach, ich hatte es an diesem Tag eilig.

Irgendwann auf der Straße zahlen Sie für diese Abkürzungen. Wenn ich dieses Modul überarbeite, werde ich darauf achten, ihm eine Pin-Platzierung zu geben, die mit dem Teil selbst übereinstimmt, sodass Sie mit nur einem Blick auf das Schaltplansymbol wissen, wo Sie Ihre Oszilloskopsonde platzieren müssen.

Es gibt weitere Verbesserungen, die vor allem ästhetischer Natur sind oder bei der Arbeit mit der Platine nützlich sind. Der Pin-1-Indikator muss für mehrere Pakete stärker verbreitet sein, und ich mag immer einen einfachen Erdungspunkt zum Anbringen von Oszilloskop-Erdungen oder VOM-Kabeln. Ich werde dies wahrscheinlich hinzufügen, indem ich einen zweipoligen Stecker hinzufüge, damit Strom und Masse direkt an die Platine angelegt werden können, anstatt sie an den unteren Stiften festzuklemmen.

Bevor ich das Board überarbeite, möchte ich sicherstellen, dass es trotz der physischen und ästhetischen Probleme funktioniert. Nachdem ich Strom angelegt und überprüft hatte, ob der Oszillator ordnungsgemäß funktionierte, schloss ich das Programmiergerät an und es erkannte das CPLD, obwohl die 3,3-V-Version neuer als die Programmiersoftware war und als „unbekanntes“ Gerät angezeigt wurde.

Als nächstes habe ich in Quartus einen Zähler erstellt und Pin-Nummern zugewiesen. Ein schnelles Kompilieren und Herunterladen sowie die vom Oszilloskop angezeigte Zählerfunktion bestätigten, dass das Design realisierbar war.

Die Schnelltestschaltung in Verilog ist ziemlich einfach. Der Code ist unten aufgeführt und Sie können eine ZIP-Datei herunterladen, die sowohl Schaltplan- als auch Verilog-Testschaltungen als Quartus II-Projekte enthält (erfordert Version 9.1).

Wie bereits erwähnt, werde ich eine zweite Überarbeitung des Boards vornehmen und dabei mehr auf die Details achten, die beim Teilen eines Designs oder bei der Fehlerbehebung erforderlich sind. Da ich die Breite des unteren Anschlusses auf 0,9 Zoll oder weniger beschränken muss, kann ich ihn auf 0,6 Zoll beschränken, was einem standardmäßigen „breiten“ DIP-Footprint entspricht. Dies bedeutet, dass die Stifte an der Unterseite durch die Grundfläche des CPLD-Sockels herausragen. Ich würde dies in einer Produktionssituation nicht tun, da es sich zu diesem Zeitpunkt um eine Handmontage handelte, aber eines der Ziele bestand darin, einen handlötbaren Bausatz herzustellen. Der Kompromiss beim Handlöten besteht darin, dass der Oszillator wirklich in einem SMD-Gehäuse für die Oberflächenmontage untergebracht werden muss, die Durchsteckversionen sind riesig und unterstützen normalerweise nicht den von mir gewünschten Spannungsbereich.

Außerdem gefallen mir oberflächenmontierte LEDs sehr gut, ich finde, sie sehen cool aus.