Die nächste Generation von Entwicklern für programmierbare Logik

Vor langer Zeit, vor dem Zeitalter der Logiksynthese, wurde vielleicht einmal ein Ingenieur gebeten, ein System zu entwerfen, das aus reiner Logik bestand. Damals hatten wir Radar, aber keine Mikrocontroller und digitale Signalverarbeitung, aber keine handelsüblichen digitalen Signalprozessoren. Dennoch hatten wir digital aufbereitetes Radar.

Zu jener Zeit musste ein frischgebackener Ingenieur wissen, wie man analoge und digitale Hardware entwickelt und wie man Software entwickelt. Ich fürchte, die Zeit des breit aufgestellten, vielseitigen Ingenieurs geht zu Ende und ich mache mir Sorgen um die Zukunft des Logikdesigns. Es gibt ein Sprichwort, das besagt, wenn ein Zimmermann nur einen Hammer hat, sieht jedes Problem wie ein Nagel aus. Haben wir den Punkt erreicht, an dem jedes Problem wie ein Softwareproblem aussieht?

Wenn Sie im Internet eine Suche mit dem Begriff „FPGA-Anwendungen“ starten, erhalten Sie als Resultat eine Liste von Spitzentechnologien der Elektrotechnik. Darunter finden sich Anwendungen, die von künstlicher Intelligenz und Spracherkennung bis hin zu Kommunikation und Bildverarbeitung reichen. Das Problem mit diesen Anwendungen ist, dass sie nicht einfach zu verstehen sind; sie sind nicht für Anfänger gedacht. Die Lernkurve zur Implementierung dieser Anwendungen ist steil und umfasst mehrere nicht triviale Themen.

Man muss die programmierbaren Logikkomponenten selbst, ihre integrierten Entwicklungsumgebungen (IDEs; und jeder Hersteller hat seine eigenen), neue Programmierparadigmen (d.h. Hardwarebeschreibungssprachen - HDL - und deren Anpassung an Parallelität und Zeitbegriff) und natürlich die Anwendung selbst verstehen. Diese Themen sind außer von Experten praktisch unüberwindbar. Dies verheißt nichts Gutes, wenn es darum geht, die nächste Generation von Logikdesignern zu inspirieren, die ihre Fähigkeiten bezüglich der programmierbaren Logik ausbauen wollen. Der erste Schritt ist einfach zu kompliziert. Ich fürchte, dass hierdurch viele Menschen davon abgehalten werden, das Feld der programmierbaren Logik zu erschließen. Es gibt im Internet viele Geschichten von Menschen, die ihre Frustration über den aktuellen Stand des programmierbaren Logikdesigns zum Ausdruck bringen, und es gibt mehrere Open-Source-Communities, die versuchen, hier abhilfe zu schaffen. Viele Menschen haben das Gefühl, dass die Erlösung durch Metaprogrammierung kommt – eine Programmiertechnik, bei der ein Programm ein anderes Programm als seine Daten behandelt.

Unternehmen aus dem Bereich der programmierbaren Logik befinden sich in einer Zwickmühle. Einerseits verlangen ihre Investoren von ihnen, immer leistungsfähigere und teurere Chips zu entwickeln, und auf der anderen Seite gibt es relativ wenige Menschen, die diese nutzen können. Ihre Lösung besteht darin, Softwareentwickler in Hardwareentwickler zu verwandeln, und sie tun dies mit neuen Tools.

HLS-Compiler (High-Level-Synthesis) bringen Designabstraktion auf eine noch höhere Ebene und das entfernt uns noch weiter von den Wurzeln des Logikdesigns. Es ist ziemlich bemerkenswert, dass wir anspruchsvolle Hardware-Designs aus reinen Softwarebeschreibungen herstellen können, aber dabei völlig den eindringlichen positiven Reiz unterbinden, den Logikdesign auf Menschen ausüben kann. Ich werde nicht behaupten, dass eine Person besser optimieren kann als ein Computer, aber ich behaupte, dass es in der Vergangenheit einfacher war, einfache Schaltungen zu entwerfen. Das Problem ist, dass einfache Schaltungen heute schwieriger zu entwerfen sind als in der Vergangenheit.

Ich erinnere mich an meine Begeisterung, als ich sah, wie mein handgefertigtes Logikdesign in Form einer Schaltung funktionierte. Es war meine eigene Cleverness, die die Anzahl der benötigten Komponenten minimierte. Als ich in den frühen 1990er Jahren programmierbare Logik lernte, war ich umso mehr erfreut, dass ich mein Wissen des Schaltungsdesigns anwenden konnte, um meine Logik in einem einzigen Gerät mit 128 Logikelementen zu implementieren, und es war mein Intellekt, der jedes dieser Logikelemente wählte. Ich war nicht abhängig vom Intellekt eines unbekannten Algorithmus-Entwicklers.

Während sich das Logikdesign weiterentwickelte, wurde auch das Softwaredesign weiterentwickelt. Es hat sich weitgehend zu einer objektorientierten Programmierwelt (OOP) entwickelt und Bibliotheken von häufig gefundenen Designmustern sind gut dokumentiert und in Codebibliotheken leicht verfügbar. Mein Designmusterbuch ist der einst beliebte Text von Erich Gamma, et. Al.: Design Patterns, Elements of Reusable Object-Oriented Software. Ich finde es interessant, dass Hardwaredesign als objektorientiert begann, aber diese Entwicklung mit der Einführung der HDLs ins Stocken geriet. Obwohl die HDLs die Wiederverwendung von Designs ermöglichen, enthalten Designbibliotheken die grundlegendsten Funktionen. Wenn Sie im Internet nach „Liste der integrierten Schaltungen der Serie 7400“ suchen, können Sie einige frühe Hardware-Designmuster finden. Ich fand es auch interessant, dass Meilir Page-Jones in seinem Buch Fundamentals of Object-Oriented Design in UML integrierte Schaltungen als Beispiele für gutes Objektdesign referenziert - hohe Kohäsion und geringe Kopplung. Aber auf der Suche nach immer komplexeren programmierbaren Logikkomponenten haben wir unsere Wurzeln des einfachen und direkten Logikdesigns verloren. Die heutigen Entwurfsmethoden hängen von einem Computeralgorithmus zur Implementierung unserer Logik ab. Ich denke, dieser Ansatz erzeugt eine Barriere für Anfänger in der programmierbaren Logik.

Sie könnten sich fragen: „Wie viele Zeilen Code hatte das erste Pong-Spiel, das wir in die Rückseite unserer Fernseher gesteckt haben?“ Die Antwort ist „Null“. Es handelte sich um reine Hardware (siehe Abbildung 1) – ohne eine einzige Zeile an Software-Code! Ich glaube nicht, dass es viele neu diplomierte Ingenieure gibt, die Pong ohne Software entwerfen könnten. Sie würden wahrscheinlich sagen: „Warum sollte ich?“ Meine Antwort wäre: „aus Gründen der Perspektive und weil Sie wissen sollten, dass es machbar ist. Es ist einfacher, als Sie denken.“

Abbildung 1: Pong-Schaltbild (Bild: Gefunden über Adafruit-Blog, Herkunft unbekannt)

Das IEEE veröffentlichte Anfang 2019 eine Liste von Programmiersprachen, die von Ingenieuren geliebt und gehasst wurden. Dort stand, dass Ingenieure Python lieben. Ich glaube es. Ich war vor einigen Jahren als Mitglied einer Jury bei einem Design-Wettbewerb von Texas Instruments und erfuhr, dass neun der 10 College-Teams Python für ihre Projekte nutzten. VHDL (VHSIC Hardware Description Language) und Verilog standen nicht auf den Listen für beliebte oder gehasste Programmiersprachen. Vielleicht betrachten die Redakteure am IEEE diese HDLs nicht als Programmiersprachen, aber wahrscheinlicher ist, dass niemand der Befragten überhaupt an HDLs dachte. Wenn dies zutrifft, spricht dies dafür, wie wenige Ingenieure diese Sprachen oder überhaupt das Logikdesign im Sinn haben - ein schlechtes Omen für den Bereich des Logikdesigns.

Also, was tun? Wie können wir neue Ingenieure dazu bewegen, ein Problem zu betrachten und darüber nachzudenken, ob die Lösung in Soft- oder Hardware zu finden ist? Schließlich können die meisten Probleme auf beiden Wegen gelöst werden. Ich habe eine Idee.

Ich denke, die Arduino-Plattform hat eine Vielzahl junger Menschen dazu gebracht, sich für Software zu interessieren. Sie gehen in Schulen, um Ingenieure und Informatiker zu werden. Wie hat sie das gemacht? Arduino reduzierte die Lernkurve für die Softwareentwicklung. Sie machte die Softwareentwicklung weniger beängstigend.

Durch die Definition eines Boards konnte man das Einrichten von Linker-Befehlsdateien eliminieren, Signalnamen wurden zum Standard und die IDE versteckte Kompilierungsdetails. Eine der Schönheiten der Programmiersprache Python ist, dass sie eine strenge Formatierung erfordert - z. B. müssen Einrückungen einheitlich sein. Dies eliminiert niederwertige, willkürliche Entscheidungen mit dem Effekt, den gesamten Entwicklungsprozess zu vereinfachen, was wiederum die Produktivität der Entwickler erhöht. Etwas ähnliches brauchen wir für die programmierbare Logik, und es würde der Industrie für programmierbare Logik obliegen, an einer Norm mitzuarbeiten.

Hier sind einige der Attribute, die ich für diese Norm befürworte. So wie Arduino nicht über die inhärente und robuste Fähigkeit verfügt, seine zugrundeliegende Architektur zu modifizieren, wie z.B. die Verwendung verschachtelter Interrupts, können wir für eine Logikdesignplattform annehmen, dass die auf dieser Plattform zu lösenden Logikprobleme einfach genug sind, dass die heutigen programmierbaren Logikkomponenten alle Anforderungen an das Timing erfüllen können. Das zum Arduino äquivalente Board für programmierbare Logikbausteine (PLDB: Programmable Logic Device Board) sollte einen ausreichend langsamen Taktgeber haben, so dass jeder Entwurf mit 1000 Logik-Elementen funktionieren sollte. Dies bedeutet, dass nur eine funktionale Überprüfung durch die Plattform erforderlich ist.

Da jeder Python liebt, schlage ich vor, dass das PLDB von Python unterstützt wird und auf einem Framework wie nMigen oder MyHDL (siehe Abbildung 2) oder sogar Yosys mit seinem RTLIL aufbaut. Dies würde es Anfängern ermöglichen, ihre Logikdesigns mit einer interpretierten Sprache zu simulieren, Wahrheitstabellen zu erstellen und auf jede andere Python-Bibliothek zuzugreifen, die ihnen zur Verfügung steht. Apropos Python-Bibliothek: Die Verwendung von Python ermöglicht es der Community auch, den PyPI (Python Package Index) zu verwenden, um wiederverwendbare Hardware-Blöcke zu verteilen, was dazu beiträgt, den Mangel an robusten, gemeinsam genutzten Designmustern zu beseitigen. nMigen unterstützt, wie Python, Metaprogrammierung, so dass, obwohl dieses Framework einfache Designs unterstützt, die Plattform skalierbar ist, um auch komplexe Designs zu realisieren.

Abbildung 2: Python-basiertes Framework (Bildquellen: MyHDL.org und m-labs.hk)

Die Schnittstelle von einem Host-PC zu dem PLDB sollte USB sein, zusammen mit einem auf dem PLDB eingebetteten Mikrocontroller mit einer API für den Host-PC, um die Konfiguration des PLDB auszulesen, damit der Host die Python-Umgebung für die Entwicklung programmierbarer Logik automatisch einrichten kann. Das Ergebnis dieser Konfiguration soll sein, die Details der Synthese, der Platzierung und des Routings sowie der Programmierung zu verbergen und gleichzeitig die Funktionssimulation auf dem PC und die Ausführung auf aktueller Hardware zu ermöglichen.

Damit einige Leser nicht denken, dass es keine einfachen Logikprobleme mehr zu lösen gibt, zeige ich einige Statistiken über Digi-Keys Verkäufe von Mikrocontrollern. Abbildung 3 zeigt die Aufschlüsselung der Klassen von Mikrocontrollern, die Kunden kaufen, und Abbildung 4 zeigt, wie viele Einheiten jeder Klasse verkauft werden. Insgesamt bietet Digi-Key über 80.000 Mikrocontroller-Teilenummern an, von denen sich über 19.000 Mikrocontroller auf Lager befinden, die für den sofortigen Versand in alle Teile der Welt bereit sind. Die Zahlen zeigen, dass einfache 8-Bit-Prozessoren von mehr Ingenieuren verwendet werden und dass Digi-Key mehr 8-Bit-Mikrocontroller als jede andere Prozessorklasse liefert. Das sagt mir, dass es mehr einfache Probleme als komplexe gibt.

Abbildung 3: Anzahl der Digi-Key-Kunden, die den jeweiligen Mikrocontrollertyp kaufen (Bildquelle: Digi-Key Electronics)

Abbildung 4: Anzahl der verkauften Einheiten jedes Mikrocontrollertyps von Digi-Key (Bildquelle: Digi-Key Electronics)

Unser Ziel sollte es sein, jeden, auch diejenigen, die keine formale Ausbildung in Logikdesign haben, zu Enthusiasten der programmierbaren Logik zu machen, aber wir müssen Entwicklungsparadigmen ändern, um dies zu tun.

Über den Autor

Image of Randy Restle

Randall Restle, Vice President of Applications Engineering bei Digi-Key Electronics, ist verantwortlich für die Auswahl, den Aufbau und die Leitung eines Teams von qualifizierten Anwendungstechnikern, Technikern und Führungskräften, um die technische Strategie von Digi-Key zu koordinieren, Kunden bei der Auswahl und Verwendung von Produkten modernster Technologie zu unterstützen. Er kam 2011 zu Digi-Key, nachdem er 35 Jahre lang im Ingenieurwesen tätig war und digitale und analoge Schaltungen, Leiterplatten und Embedded-Software entwickelt hatte.  Randall Restle hält BSEE-, MS- und MBA-Abschlüsse von der University of Cincinnati. Er ist zudem ein langjähriges Mitglied des IEEE, war Registered Professional Engineer im Bundesstaat Ohio, ein Certified Project Management Professional am Project Management Institute und hält als Erfinder mehrere Patente.

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum