Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Embedded Design mit FPGAs:Entwicklungsprozess

Anmerkung des Herausgebers:Da immer fortschrittlichere Algorithmen für intelligente Produktdesigns entstehen, haben Entwickler oft Schwierigkeiten, eingebettete Systeme zu implementieren, die die entsprechenden Verarbeitungsanforderungen dieser Algorithmen erfüllen. FPGAs können die erforderliche Leistung liefern, aber das Entwerfen mit FPGAs galt lange Zeit als auf FPGA-Programmierexperten beschränkt. Heute jedoch hat die Verfügbarkeit leistungsfähigerer FPGAs und effektiverer Entwicklungsumgebungen die FPGA-Entwicklung allgemein zugänglich gemacht. In diesem Auszug, Kapitel 4 aus dem Buch Architecting High-Performance Embedded Systems, bietet der Autor einen umfassenden Überblick über FPGA-Geräte, Implementierungssprachen und den FPGA-Entwicklungsprozess sowie eine detaillierte Anleitung, wie Sie mit der Implementierung eigener FPGAs beginnen können Entwurf. Der vollständige Auszug wird in der folgenden Reihe von Raten präsentiert:
1:Hardwareressourcen
2:Implementierungssprachen
3:Entwicklungsprozess (dieser Artikel)
4:Ein Projekt erstellen
5:Implementierung

Adaptiert aus Architecting High-Performance Embedded Systems, von Jim Ledin.


Der FPGA-Entwicklungsprozess

Obwohl FPGAs in einer Vielzahl unterschiedlicher Anwendungsdomänen verwendet werden, ist es möglich, eine Reihe von Entwicklungsschritten zu identifizieren, die allgemein auf jedes FPGA-Entwicklungsprojekt anwendbar sind. In diesem Abschnitt werden die üblichen FPGA-Entwicklungsschritte in der Reihenfolge behandelt, in der sie normalerweise während eines Projekts ablaufen.

Definieren der Systemanforderungen

Der erste Schritt bei der Entwicklung eines neuen Systems oder bei der Einleitung einer bedeutenden Aufrüstung eines bestehenden Systems besteht darin, ein klares und detailliertes Verständnis dessen zu entwickeln, was das System tun soll. Der Prozess der Anforderungsdefinition beginnt mit einer allgemeinen Beschreibung der beabsichtigten Funktionalität des Systems, der Betriebsmodi und der wichtigsten Funktionen. Diese Informationen sollten in klarer und eindeutiger Sprache abgefasst und an alle Parteien weitergegeben werden, die am Erfolg der Entwicklungsbemühungen beteiligt sind. Das Ziel der gemeinsamen Nutzung der Systemanforderungen besteht darin, einen Konsens zwischen allen Parteien über die Vollständigkeit und Richtigkeit der Beschreibungen zu erzielen.

Die Anforderungsbeschreibungen müssen konkretisiert werden, um Spezifikationen für die erforderliche Systemleistung in Bezug auf Abtastraten von Eingangssignalen und Aktualisierungsraten für Aktorausgangsbefehle zu enthalten. Zusätzliche Details wie physische Größenbeschränkungen, minimale Batterielebensdauer und tolerierbare Umgebungstemperaturbereiche werden den Designprozess leiten. Im Allgemeinen muss ein umfassender Satz von Spezifikationen entwickelt werden, der die minimalen Leistungsschwellen für alle Systemparameter beschreibt, die als relevant für den Gesamtsystemerfolg erachtet werden.

Alle Systemanforderungen müssen so vollständig sein, dass jede Designlösung, die alle angegebenen Spezifikationen erfüllt, eine adäquate Lösung sein muss. Wenn sich herausstellt, dass ein Design, das alle Spezifikationen erfüllt, aus irgendeinem Grund als inakzeptabel erachtet wird, bedeutet dies, dass die Systemanforderungen nicht vollständig angegeben werden.

Wenn beispielsweise festgestellt wird, dass eine technisch adäquate Lösung zu teuer in der Herstellung ist, liegt die Ursache des Problems wahrscheinlich darin, dass während des Anforderungsentwicklungsprozesses nicht vollständig Kostenbegrenzungsbeschränkungen definiert wurden.

Nachdem die Systemanforderungen auf oberster Ebene definiert und vereinbart wurden, ist es im Allgemeinen erforderlich, die Gesamtsystemkonfiguration in eine Sammlung von Teilsystemen mit jeweils einem zusammenhängenden Zweck und eigenen beschreibenden Anforderungen und technischen Spezifikationen zu unterteilen. In einer Echtzeit-Embedded-Systemarchitektur wird die digitale Verarbeitungsfähigkeit wahrscheinlich als ein Subsystem mit einer entsprechenden Sammlung von Anforderungen dargestellt

Funktionalität dem FPGA zuweisen

Wenn die Anforderungen an die digitale Verarbeitung in einer Systemarchitektur die Fähigkeiten von Mikrocontrollern und Mikroprozessoren übersteigen, die ansonsten für die Verwendung im System geeignet wären, kann es angebracht sein, einen FPGA in das Design zu integrieren. Einige Systemarchitekturen, insbesondere solche, die von einer digitalen Hochgeschwindigkeitshardware profitieren, die parallele Operationen durchführt, sind natürliche Kandidaten für eine FPGA-Implementierung. Andere Systemarchitekturen können mit herkömmlicher digitaler Verarbeitung eine angemessene Leistung erzielen, aber es können wertvolle Möglichkeiten bestehen, die Flexibilität und Erweiterbarkeit einer FPGA-Implementierung über eine geplante Lebensdauer zu nutzen, die erhebliche System-Upgrades in der Zukunft vorsieht.

Nachdem die Entscheidung getroffen wurde, ein FPGA in das Design zu integrieren, besteht der nächste Schritt darin, die Teile der digitalen Verarbeitungsanforderungen des Gesamtsystems dem FPGA-Gerät zuzuordnen. Dies umfasst typischerweise die Spezifikation der FPGA-Eingangs- und -Ausgangssignale, die Aktualisierungsraten von Ein- und Ausgängen und die Identifizierung von Komponenten, mit denen das FPGA interagieren muss, einschließlich Teilen wie ADCs und RAM-Bausteinen.

Erforderliche FPGA-Funktionen identifizieren

Nachdem die vom FPGA auszuführenden Funktionen definiert wurden und die Schnittstellen zu anderen Geräten bekannt sind, die das FPGA unterstützen muss, ist es möglich, eine Liste von Funktionen zu entwickeln, die FPGA-Kandidaten bieten müssen.

Einige FPGA-Familien sind für kostengünstige, weniger komplexe Anwendungen konzipiert und bieten daher nur begrenzte Ressourcen für die Implementierung digitaler Logik. Diese Geräte können mit Batteriestrom betrieben werden und benötigen nur eine passive Kühlung. Andere, leistungsstärkere FPGA-Familien unterstützen groß angelegte digitale Designs mit vollem Funktionsumfang, sollen mit Spitzenleistung betrieben werden und erfordern möglicherweise eine kontinuierliche aktive Kühlung.

Die mit der eingebetteten Anwendung verbundenen Systemanforderungen leiten die Auswahl einer geeigneten FPGA-Familie für die Anwendung. An dieser Stelle ist es wahrscheinlich nicht möglich, ein bestimmtes FPGA-Modell innerhalb der bevorzugten Familie zu identifizieren, da die Ressourcenanforderungen der FPGA-Implementierung nicht vollständig definiert wurden. Mit Erfahrung ist es jedoch möglich, eine kleine Anzahl von FPGA-Modellen zu identifizieren, die für das Design geeignet erscheinen.

Zusätzlich zu den FPGA-Ressourcen für die digitale Schaltungsimplementierung enthalten viele FPGA-Modelle zusätzliche Funktionen, die für das Systemdesign wichtig sein können. Ein integrierter ADC kann beispielsweise nützlich sein, um die Anzahl der Systemteile zu minimieren. Die Liste der erforderlichen und gewünschten FPGA-Funktionen hilft dabei, die Auswahl geeigneter FPGA-Geräte für das System weiter einzugrenzen.

Implementierung des FPGA-Designs

Nachdem ein FPGA-Kandidatenmodell identifiziert wurde und die detaillierte Definition der dem FPGA zugewiesenen Funktionalität vorliegt, ist es an der Zeit, mit der Implementierung des FPGA-Designs zu beginnen. Dies beinhaltet im Allgemeinen die Verwendung der FPGA-Entwicklungstoolsuite und besteht normalerweise hauptsächlich aus der Entwicklung von HDL-Code in der bevorzugten Sprache für das Projekt.

Gegebenenfalls kann die FPGA-Implementierung mit einer Blockdiagrammdarstellung des FPGA-Designs der obersten Ebene beginnen. Bei Bedarf können in HDL oder C/C++ entwickelte Komponenten in das Blockdesign integriert werden, um die vollständige Systemimplementierung zu vervollständigen.

Alternativ ist es auch üblich, komplette Systemdesigns direkt in HDL zu entwickeln. Für Entwickler, die mit der Sprache vertraut sind und die Funktionen und Einschränkungen des verwendeten FPGA-Modells vollständig verstehen, kann dies zu den ressourceneffizientesten und leistungsstärksten Designergebnissen führen.

Die FPGA-Entwicklung verläuft in Phasen, in denen das anfängliche Design detaillierter spezifiziert wird, bis eine Programmierdatei für das FPGA-Bauelement erstellt wird. Es ist üblich, diese Phasen bei einem großen Projekt mehrmals zu durchlaufen und einen kleinen Teil des Gesamtdesigns bei jedem Durchlauf der Schritte zu entwickeln. Diese Phasen werden in den folgenden Abschnitten beschrieben.

Designeintrag

Designeintrag ist die Phase, in der der Systementwickler die Systemfunktionalität unter Verwendung von HDL-Code, Blockdiagrammen und/oder C/C++-Code definiert. Der Code und andere Artefakte, wie beispielsweise Blockdiagramme, definieren die logische Funktionalität des Systems in abstrakter Form. Mit anderen Worten, die Designartefakte definieren eine Logikschaltung, aber sie definieren nicht, wie sie in den Rest des Systems integriert wird.

I/O-Planung

FPGA-I/O-Planung ist der Prozess des Identifizierens der Pins, die zur Ausführung bestimmter I/O-Funktionen zugewiesen sind, und des Zuordnens von Gerätemerkmalen wie dem für jedes Signal zu verwendenden I/O-Signalstandard. Als Teil des E/A-Planungsprozesses kann es wichtig sein, Aspekte zu berücksichtigen, wie z. B. die Position der E/A-Pins auf dem physischen Gerätepaket. Dieser Schritt ist wichtig, um die Leiterbahnlängen auf der Leiterplatte für Hochgeschwindigkeitssignale zu minimieren und zu vermeiden, dass sich die Leiterbahnen der Schaltkreise unnötigerweise überkreuzen.

Die Definition der E/A-Signalanforderungen ist eine Form der Einschränkung im FPGA-Entwicklungsprozess. Die andere primäre Einschränkungskategorie besteht aus Timing-Anforderungen, die die Leistung der FPGA-Lösung bestimmen. Der FPGA-Syntheseprozess verwendet den HDL-Code und die Projektbeschränkungen, um eine funktional korrekte FPGA-Lösung zu entwickeln, die alle definierten Beschränkungen erfüllt. Wenn das Tool nicht alle Bedingungen erfüllen kann, schlägt die Synthese fehl.

Synthese

Synthese wandelt den Quellcode in ein Schaltungsdesign um, das als Netzliste bezeichnet wird . Die Netzliste stellt die aus den Ressourcen des Ziel-FPGA-Modells aufgebaute Schaltung dar. Die Netzliste repräsentiert eine logische oder schematische Version der Schaltung. Es definiert nicht, wie die Schaltung im physischen FPGA-Gerät implementiert wird. Dies geschieht im nächsten Schritt.

Ort und Route

Der Ort Der Prozess nimmt die in der Netzliste definierten FPGA-Ressourcen und weist sie bestimmten Logikelementen innerhalb des ausgewählten FPGA zu. Die resultierenden Ressourcenplatzierungen müssen alle Einschränkungen erfüllen, die die Zuweisung dieser Elemente einschränken, einschließlich E/A-Einschränkungen und Timing-Einschränkungen.

Nachdem den Logikelementen während des Platzierungsprozesses physische Standorte zugewiesen wurden, wird während der Route . eine Reihe von Verbindungen zwischen den Logikelementen konfiguriert Prozess. Das Routing implementiert alle Verbindungen zwischen den Logikelementen und ermöglicht der Schaltung, wie im HDL-Code beschrieben zu funktionieren. Nachdem die Orts- und Routenoperationen abgeschlossen sind, ist die Konfiguration des FPGA vollständig festgelegt.

Bitstream-Generierung

Der letzte Schritt im FPGA-Entwicklungsprozess ist die Erstellung einer Bitstream-Datei. Um die höchste Leistung zu erzielen, speichern die meisten modernen FPGA-Geräte ihre Konfiguration intern mit statischem RAM (SRAM ).

Sie können sich den FPGA-Konfigurations-SRAM als ein sehr großes Schieberegister vorstellen, das vielleicht Millionen von Bits enthält. Der Inhalt dieses Schieberegisters spezifiziert vollständig alle Aspekte der Konfiguration und des Betriebs von FPGA-Geräten. Die während der FPGA-Entwicklung erstellte Bitstream-Datei stellt die Einstellungen für das Schieberegister dar, die bewirken, dass das Gerät die beabsichtigten Funktionen ausführt, die durch die HDL und die Einschränkungen spezifiziert sind. In Bezug auf traditionelle Softwareentwicklungsprozesse entspricht die Bitstream-Datei einem ausführbaren Programm, das von einem Linker erzeugt wird.

SRAM ist flüchtig und verliert seinen Inhalt jedes Mal, wenn die Stromversorgung des Geräts unterbrochen wird. Die Echtzeit-Embedded-Systemarchitektur muss ein Mittel zum Laden der Bitstream-Datei in das FPGA jedes Mal bereitstellen, wenn Strom angelegt wird. Normalerweise wird der Bitstream bei jedem Einschaltzyklus entweder vom Flash-Speicher im Gerät geladen oder von einer externen Quelle, z. B. einem PC, die an das Gerät angeschlossen ist.

Nachdem die Kompilierung des FPGA-Bitstreams abgeschlossen ist, besteht der nächste Schritt darin, die Implementierung zu testen, um sicherzustellen, dass sie richtig funktioniert. Dieser Schritt unterscheidet sich nicht von den Tests, die am Ende eines herkömmlichen Softwareerstellungsprozesses erforderlich sind.

Testen der Implementierung

Die FPGA-Entwicklung ist anfällig für alle Arten von Fehlern, die herkömmliche Bemühungen zur Softwareentwicklung beeinträchtigen. Während der FPGA-Entwicklung werden Ihnen wahrscheinlich viele Fehlermeldungen im Zusammenhang mit falscher Syntax, Versuchen, derzeit nicht zugängliche Ressourcen zu verwenden, und vielen anderen Arten von Verstößen angezeigt. Wie bei jedem Programmiervorhaben müssen Sie die Quelle jedes Fehlers identifizieren und das Problem beheben.

Selbst nachdem die FPGA-Anwendung alle Stufen bis zur Bitstream-Generierung erfolgreich durchlaufen hat, gibt es keine Garantie dafür, dass das Design wie beabsichtigt funktioniert. Um ein erfolgreiches Design in einem vernünftigen Zeitplan zu erreichen, ist es absolut wichtig, in jeder Phase der Entwicklung angemessene Tests durchzuführen.

In der ersten Testphase sollte das Verhalten des HDL-Codes gründlich getestet werden, um zu demonstrieren, dass er wie beabsichtigt funktioniert. Das Beispielprojekt am Ende dieses Kapitels demonstriert die Verwendung der Vivado-Toolsuite, um einen gründlichen Test der HDL-Logik im Design durchzuführen.

Nachdem der Bitstream generiert wurde, gibt es keinen Ersatz für ein umfassendes Testen des FPGAs, wie es in der endgültigen Systemkonfiguration implementiert ist. Bei diesem Test müssen alle Funktionen und Modi des FPGA gründlich getestet werden, einschließlich seiner Reaktion auf Außerbereichs- und Fehlerbedingungen.

Bei jedem Schritt des Design-, Entwicklungs- und Testprozesses muss das Projektpersonal auf die Möglichkeit der Implementierung von Systemfunktionen eingestellt sein, die in unwahrscheinlichen oder seltenen Situationen anfällig für unangemessenes Verhalten sind. Das Auftreten dieser Art von Problemen kann Fehler darstellen, die extrem schwer zu duplizieren sind und die die Wahrnehmung des eingebetteten Systemdesigns und der Organisation, die es erstellt hat, für immer trüben können. Wenn Sie beim Testen hervorragende Arbeit leisten, wird die Wahrscheinlichkeit dieses Ergebnisses erheblich reduziert.

Der nächste Abschnitt enthält eine detaillierte Beschreibung der Schritte bei der Entwicklung, dem Testen und der Implementierung eines einfachen FPGA-Projekts unter Verwendung des Arty A7-Entwicklungsboards und der Xilinx Vivado-Toolsuite.

Nachdruck mit Genehmigung von Packt Publishing. Copyright © 2021 Packt Publishing


Jim Ledin ist CEO von Ledin Engineering, Inc. Jim ist ein Experte für Design, Entwicklung und Test von eingebetteter Software und Hardware. Er ist auch in der Cybersicherheitsbewertung von eingebetteten Systemen und in Penetrationstests versiert. Er hat einen B. S. Abschluss in Luft- und Raumfahrttechnik von der Iowa State University und einen M.S. Abschluss in Elektro- und Computertechnik vom Georgia Institute of Technology. Jim ist ein registrierter professioneller Elektroingenieur in Kalifornien, ein Certified Information System Security Professional (CISSP), ein Certified Ethical Hacker (CEH) und ein Certified Penetration Tester (CPT).

Verwandte Inhalte:

  • Embedded Design mit FPGAs:Hardwareressourcen
  • Embedded Design mit FPGAs:Implementierungssprachen
  • Open-Source-Tools vereinfachen die FPGA-Programmierung
  • Implementierung von Gleitkomma-Algorithmen in FPGAs oder ASICs
  • Einsatz von FPGAs für Deep Learning
  • Softwaretools migrieren GPU-Code auf FPGAs für KI-Anwendungen
  • FPGAs ersetzen ASICs in den Vision-basierten ADAS von Subaru Eyesight

Für mehr Embedded, abonnieren Sie den wöchentlichen E-Mail-Newsletter von Embedded.


Eingebettet

  1. Ausfallsicheres Design
  2. Was ist eingebettete Systemprogrammierung und ihre Sprachen
  3. Was ist Chatbot:Designprozess und seine Architektur
  4. Was ist Embedded System Design:Schritte im Designprozess
  5. Grundlagen eingebetteter Systeme und Anwendungen
  6. ADI zeigt Technologien für alle Bereiche des Embedded-System-Designs
  7. Axiomtek:eingebettetes System mit integriertem Layer-2-Managed-PoE-Switch
  8. IBASE:schlankes Mini-ITX-System mit integriertem AMD Ryzen Embedded V1000 SoC
  9. MicroSys:Embedded Edge Computing mit NPX LS1028A CPU und IEEE TSN
  10. Alles drin mit Additiv