Academic Über NI Veranstaltungen NI Developer Zone Support Lösungen Online Store Kontakt MyNI

Dokumententyp: Tutorium
Von NI unterstützt: Ja
Veröffentlichungsdatum: 28.11.2008


Feedback


Ja Nein

Thematisch verwandte Links - Developer Zone

Thematisch verwandte Links - Products and Services

Programmierung von FPGAs mit LabVIEW-Zustandsdiagrammen

0 Bewertung(en) | 0.00 von 5
Sprache | Drucken | PDF

Übersicht

Mit der Version 8.5 der grafischen Entwicklungsumgebung LabVIEW von National Instruments wurde ein neues Softwarewerkzeug für das Design eingeführt: das LabVIEW Statechart Module. Das LabVIEW Statechart Module erweitert die Plattform für das grafische Systemdesign von National Instruments und ist für die steigende Komplexität von Anwendungen konzipiert. Dieser neue Bestandteil der LabVIEW-Softwareplattform ergänzt LabVIEW um ein weiteres Modellierungsverfahren, so dass Programmierer Anwendungen nun auf einer höheren Abstraktionsebene entwickeln können. Überdies können sie ihren Entwurf schnell in reale Ein- und Ausgänge integrieren. Mithilfe der Entwicklungsfunktionen von LabVIEW-Zustandsdiagrammen und handelsüblicher Standardhardware können Anwender zügig Prototypen von Embedded-Systemen erstellen, wie z. B. Kommunikationssysteme, Maschinensteuerungseinheiten (Controller) und Logik zum Schutz von Systemen.

Einsatz von LabVIEW-Zustandsdiagrammen mit FPGA

Mit Zustandsdiagrammen können Systeme durch Bestimmen von Zuständen, Übergängen und Ereignissen entworfen werden. Zustandsdiagramme eignen sich besonders für ereignisbasierte Entwürfe wie beispielsweise die Implementierung von Kommunikationsprotokollen, den Schutz von Systemen, die Erstellung von Benutzeroberflächen und die Entwicklung von Zustandsmaschinen (endlichen Automaten). Ein Anwender kann LabVIEW-Zustandsdiagramme auf vielen Ausführungsgeräten einsetzen, so etwa auf Desktop-PCs, Echtzeitcontrollern und FPGAs. Das LabVIEW Statechart Module lässt sich nahtlos in das LabVIEW FPGA Module integrieren, so dass man digitale Logik auf rekonfigurierbarer Hardware mithilfe von Zustandsdiagrammen und grafischer Datenflussprogrammierung ohne Low-Level-Beschreibungssprachen oder Design auf Hardwareebene erstellen kann.
In diesem Dokument wird dargelegt, wie das LabVIEW Statechart Module zur Programmierung des digitalen Kommunikationsprotokolls SPI (Serial Peripheral Interface) auf einem FPGA eingesetzt werden kann. Zuerst werden Hintergrundinformationen zum SPI-Protokoll erläutert und anschließend wird dessen Implementierung in das LabVIEW Statechart Module mithilfe von LabVIEW FPGA beschrieben.

Serial Peripheral Interface (SPI)

SPI ist ein synchrones Protokoll, das häufig zum Daten-Streaming (im Gegensatz zum Lesen und Schreiben) eingesetzt und daher oft für die Kommunikation zwischen Mikroprozessoren und Digitalsignalprozessoren gewählt wird. Das SPI-Protokoll besteht aus Datenpaketen, die zwischen mindestens zwei Geräten verschickt werden: einem Master und einem oder mehreren Slaves. Das Master-Gerät steuert zwei digitale Signale, das Chip-Select-Signal (zur Auswahl des Slaves für die Kommunikation) und das Taktsignal (Clock). Das Slave-Gerät hat eine dedizierte Chip-Select-Datenleitung vom Master oder, wenn mehrere Slave-Geräte existieren, eine gemeinsame Leitung für alle Geräte. Falls die Anwendung eine wechselseitige Kommunikation zwischen Master und Slave erfordert, kann der Anwender zwei Datenleitungen nutzen: Master out, Slave in (MOSI) und Master in, Slave out (MISO). Abbildung 1 zeigt die Leitungen, die zur Kommunikation zwischen den Master- und den Slave-Geräten verwendet werden. Weitere Informationen zum SPI-Protokoll finden Sie unter dem Abschnitt „Thematisch verwandte Seiten“.

SPI Communication

Abb. 1: Darstellung der SPI-Kommunikation zwischen Master und Slave

Das LabVIEW Statechart Module

Bevor das LabVIEW Statechart Module verfügbar war, gab es im Wesentlichen zwei Methoden zur Implementierung von Zustandsmaschinen in LabVIEW. Die Implementierung ohne Add-ons umfasste die Integration einer Case-Struktur in eine While-Schleife. Diese Methode ist zwar effektiv, aber der Anwender kann nicht den allgemeinen Datenfluss oder den gesamten Programmcode zur selben Zeit einsehen. Das LabVIEW State Diagram Toolkit sorgte für einen höheren Abstraktionsgrad in LabVIEW, da jeder Zustand eingesehen werden kann. Das LabVIEW Statechart Module bringt den Entwurf von Zustandsmaschinen auf ein höheres Niveau und nutzt dazu eine breite, ganzheitliche Darstellung einer Zustandsmaschine sowie der Hierarchie, Nebenläufigkeit, Trigger und Bedingungen. Zudem steht dem Anwender die gewohnte Benutzeroberfläche von LabVIEW zur Verfügung.

Das LabVIEW Statechart Module ist für die hier beschriebene Anwendung sehr hilfreich, um die Codierung und Decodierung für die digitale Kommunikation zu implementieren. Bei diesem Modul geschieht die natürliche Aufgliederung des Timing-Diagramms in separaten Schritten. Dadurch wird jeder Schritt für sich genommen, um die Vielschichtigkeit im Programm für die einzelnen Teile der Implementierung zu reduzieren. Zudem werden typische Arbeitsabläufe wie z. B. Fehler- und Ausnahmebehandlung vereinfacht und es wird möglich, von einer beliebigen Stelle der Protokollausführung zu speziellen Fehlerbehandlungszuständen zu wechseln. Das LabVIEW Statechart Module bietet auch eine höhere Abstraktionsebene, um eine komplexe Anwendung zu vereinfachen, indem es eine Ansicht auf Systemebene bereitstellt.

FPGA-Entwurf

Mit LabVIEW FPGA lässt sich die bekannte grafische Datenflussentwicklung von LabVIEW nutzen, um Hardware für benutzerdefinierte I/O-Mess-, -Steuer- und -Regelanwendungen zu erstellen, ohne dass Low-Level-Hardwarebeschreibungssprachen oder Design auf Hardwareebene erforderlich wären. Diese Hard- und Softwarekombination sorgt beim Systementwurf für Flexibilität. Das SPI-Protokoll ist ein gutes Beispiel für die Leistung, die diese Kombination bietet: Der Anwender kann sie nutzen, um ein Bussystem für die Interaktion mit einem anderen System zu erstellen und zu implementieren. Durch Erweiterung um das LabVIEW Statechart Module kann der Anwender eine weitere Abstraktionsschicht über den Programmcode legen, um Visualisierung und Implementierung einer solchen Interaktion zu vereinfachen.

Abbildung 2 ist das Timing-Diagramm für die SPI-Kommunikation. Sobald die ChipSelect-Leitung auf „low“ gelegt wurde, werden die Bits über die MOSI-Leitung einzeln an das bestimmte Slave-Gerät geschickt. Zugleich erfolgt eine Synchronisierung mit der Taktleitung.

  

SPI Timing Diagram 
Abb. 2: SPI-Timing-Diagramm

Für das SPI-Timing-Diagramm sind die folgenden Schritte eine Möglichkeit, um das Timing-Diagramm in ein Zustandsdiagramm aufzuteilen:
      1. Set ChipSelect low
      2. Set Data (0)
      3. Set Clock high
      4. Set Clock low
      5. Set Data (1)
      6. Set Clock high
      7. Set Clock low
      8. Repeat Data and Clock for bits 2-15
      9. Set ChipSelect high

Diese Schritte stellen einfach dar, wie der Anwender dieses Kommunikationsprotokoll in eine endliche Anzahl von Zuständen für das LabVIEW Statechart Module aufspalten kann. Es gibt fünf individuelle Schritte, wobei manche davon für jedes Datenbit wiederholt werden. Im Zustandsdiagramm erstellt der Anwender einen individuellen Zustand für jeden Schritt und jeden Durchlauf. Für die drei sich wiederholenden Schritte, mit denen die Datenleitung aktualisiert und die Taktleitung ausgelöst wird, kann der Anwender ein Zustandsdiagramm konfigurieren, damit diese Folge 16 Mal wiederholt wird, bevor der Übergang zum letzten Schritt erfolgt.

Ausführung

Im Folgenden geht es um die eigentliche Implementierung der SPI-Kommunikation unter Einsatz des LabVIEW Statechart Module mit LabVIEW FPGA. Dieser Code wurde speziell für die Datenerfassungskarte NI PCI-7831R der R-Serie erstellt. Das LabVIEW Statechart Module kann aber mit jedem NI CompactRIO, PXI- oder PCI-Gerät der R-Serie verwendet werden. Abbildung 3 zeigt das LabVIEW-Zustandsdiagramm für das Master-Gerät. Jeder der oben aufgeführten Schritte des Timing-Diagramms wird im Zustandsdiagramm in fünf Zustände unterteilt (wobei das Zurücksetzen der Takt- und der MOSI-Leitung zu einem Schritt zusammengefasst wird). Das Diagramm umfasst auch den Ruhezustand, in dem das Master-Gerät wartet, bis es einen Sendebefehl erhält und zu dem es wieder zurückkehrt, wenn die 16 bit übertragen wurden, um erneut zu warten.

Zustandsdiagramme können verschiedene Elemente besitzen, die die Ausführung bestimmen. Der Anschluss „Initial“ am Zustandsdiagramm, der als schwarzer Kreis dargestellt wird, ist ein Pseudozustand, an dessen Stelle das Diagramm initialisiert wird. Damit wird die Eintrittsstelle ins Zustandsdiagramm festgelegt. Als nächstes folgt T1. Das ist ein Übergang, mit dem das Zustandsdiagramm in den Ruhezustand (Idle) überführt wird. Für jeden Übergang kann ein Trigger und/oder eine Bedingung festgelegt werden. Trigger lösen einen Zustandsübergang aus, und Bedingungen sind Code, der ausgewertet wird, um festzustellen, ob der Übergang übernommen wird. Der Ruhezustand wartet auf einen Sendebefehl von der Hauptanweisung, der den Übergang T2 auslöst. Innerhalb des Oberzustands „Write Bits“ konfigurieren Unterzustände den eigentlichen Datentransfer. Jeder Zustand entspricht dem Setzen oder Zurücksetzen einer der digitalen Leitungen, die der FPGA ausgibt.
 

 


[+] Bild vergrößern


Abb. 3: Das Zustandsdiagramm des Master-Geräts beim Schreiben von Daten

Das Verhalten innerhalb von Zuständen wird mit grafischem LabVIEW-Code bestimmt. Jeder Zustand kann Programmcode haben, der die Aktion bestimmt, wenn das System in den Zustand eintritt oder aus ihm austritt oder wenn ein benutzerdefiniertes Ereignis eintritt. Ein Beispiel wird in Abbildung 4 gezeigt, wo der LabVIEW-Code für die Eintrittsaktion des Zustands „Reset Clock and Output“ abgebildet ist. In diesem Zustand wird das aktuelle Bit vom 16-bit-Datenarray entfernt und auf einem I/O-Knoten des FPGA ausgegeben. Dann wird die aktuelle Bitzahl erhöht, so dass das nächste Bit bei der folgenden Wiederholung geschrieben wird. Entsprechend des SPI-Timings wird der Takt auf die Einstellung „low“ gesetzt und die Leitung ChipSelect niedrig gehalten, während der Takt nur einmal zählt.

Der Wechsel vom Zustand „Reset Clock and Output“ zum Zustand „Set Clock“ muss geschehen, wenn die Hälfte der Taktzeit vergangen ist. Abbildung 5 zeigt, wie dieser Übergang mit dem LabVIEW-Bedingungscode ausgewertet wird. Wenn die halbe Zeitspanne des Takts dem „Tick Count“ entspricht, geschieht der Übergang. Der Austrittsanschluss ersetzt alle Zustände in der Unterregion und fordert das Zustandsdiagramm zu dem Zeitpunkt zum Austritt auf, wenn der Trigger auftritt, unabhängig davon, in welchem Zustand das Programm innerhalb der Unterregion ist. Wenn die Ausgabe abgeschlossen ist und das Zustandsdiagramm nicht zum Austritt angewiesen wird, kehrt es in den Ruhezustand zurück und wartet.
 


[+] Bild vergrößern
Abb. 4: Eintrittsaktion „Reset Clock and Output“


[+] Bild vergrößern
Abb. 5: Bedingung für den Übergang von „Reset Clock and Output“ zur Konfiguration „Set Clock“

Wenn die Entwicklung des Zustandsdiagramms abgeschlossen ist, kann ein LabVIEW-SubVI erzeugt werden, welches das Diagramm und den Programmcode umfasst. Abbildung 6 zeigt rot umrandet das Zustandsdiagramm-VI im Blockdiagramm. Es enthält die Trigger-Eingabe sowie auch die Datenein- und -ausgaben. Der Write-Trigger ist eine Eingabe in das Zustandsdiagramm, der die Aktion „Write Bits“ auslöst. Das Zustandsdiagramm fungiert als SubVI, das der Anwender nutzen kann, um Daten an das Diagramm zu übergeben bzw. aus ihm zu lesen. Dieses SubVI kann auch in einem separaten Fenster zur Bearbeitung geöffnet werden.


[+] Bild vergrößern
Abb. 6: LabVIEW-FPGA-Code mit rot umrandetem Zustandsdiagramm

Fehlerbehebung

Die automatische Codeerzeugung des Zustandsdiagramms erstellt den LabVIEW-Code im Hintergrund. Der Hauptvorteil des LabVIEW Statechart Module ist die Fähigkeit, ein Modell ohne zusätzlichen Aufwand automatisch in FPGA-Code umwandeln zu können und dabei auch die Vorteile der Nutzung eines Zustandsdiagramms, einschließlich Abstraktion und Skalierbarkeit, zu erhalten. Der Code kann ohne FPGA-Karte auf Fehler untersucht und kompiliert werden, so dass Entwickler ihre Entwürfe einfach am Desktop validieren können, bevor sie diese auf einem FPGA kompilieren und ausführen. Ein Zustandsdiagramm erzwingt auch FPGA-Syntaxregeln, wenn die Bedingungen und Aktionen bearbeitet werden. So trägt es dazu bei, dass der Code problemlos kompiliert wird.

Überlegungen

Wenn der Platz auf einem FPGA knapp ist, sollte bedacht werden, dass das LabVIEW Statechart Module Overhead hat. Wenn der mit einem LabVIEW-Zustandsdiagramm implementierte Code kompiliert und mit demselben Programmcode verglichen wird, der mit der LabVIEW-Darstellung einer Zustandsmaschine geschrieben wurde, stellt sich heraus, dass der Code des Zustandsdiagramms 3 Prozent mehr Segmente nutzte.

Die Implementierung des Zustandsdiagramms kann auch die theoretische maximale Taktrate verringern. Das liegt daran, dass eine Zähleinheit (Tick) einem Zustand entspricht, der einen Austrittsübergang prüft. Falls es mehrere mögliche Pfade aus einem Zustand heraus gibt, sind mehrere Zähleinheiten zur Auswertung erforderlich, was die theoretische maximale Taktrate proportional verlangsamt. Allerdings beeinflusst in der beschriebenen SPI-Implementierung der Rückgang des theoretischen Maximums nicht die erforderliche Rate, so dass keine Probleme auftreten. Das sollte beispielsweise berücksichtigt werden, wenn ein schnelleres System oder Kommunikationsprotokoll entwickelt werden soll.

Vergleich

Abbildung 7 zeigt zum Vergleich dieselbe SPI-Ausgabe unter Einsatz eines FPGA-VIs zur Darstellung einer Zustandsmaschine. Bei dieser Darstellung sind bestimmte Bestandteile des Programmcodes zu sehen, die innerhalb eines Zustands oder eines Übergangs sind. Allerdings kann man die einzelnen Zustände, die das Programm durchläuft, nicht so leicht darstellen, wie mit der vom LabVIEW Statechart Module gewonnenen Abstraktion.

Abb. 7: Implementierung ohne Zustandsdiagramm in LabVIEW mit FPGA

Zusammenfassung

Ingenieure, die Prüfanwendungen entwickeln und dazu nicht unterstützte oder benutzerspezifische digitale Kommunikationsprotokolle verwenden, können das LabVIEW FPGA Module einsetzen, um rasch unterschiedliche Kommunikationsschnittstellen auf FPGA-basierter rekonfigurierbarer I/O-Hardware der R-Serie von National Instruments zu implementieren oder einen Prototyp zu erstellen. Das neue LabVIEW Statechart Module unterstützt Anwender dabei, Zustände, Übergänge und Ereignisse zu bestimmen. Somit sollen sie die Möglichkeit erhalten, Zustandsmaschinen wie etwa die Implementierung eines Kommunikationsprotokolls zu vereinfachen, indem das Modul durch eine Ansicht auf Systemebene sowie durch Hierarchie und Nebenläufigkeit mehr Abstraktion bietet. Das Modul erweitert LabVIEW um ein weiteres Modell und hilft Anwendern, Applikationen auf einer höheren Abstraktionsebene zu entwickeln als zuvor. Überdies wird eine bessere Wartung und Skalierbarkeit möglich. Dank dieses leistungsstarken neuen Softwarewerkzeugs für die Entwicklung können Anwender mit der NI-Plattform für das grafische Systemdesign steigende Anwendungsanforderungen erfüllen.

Links auf thematisch verwandte Internetseiten

Weitere Informationen erhalten Sie unter:

 

0 Bewertung(en) | 0.00 von 5
Sprache | Drucken | PDF

AGB
Dieses Tutorium ("Tutorium") wurde von National Instruments ("NI") entwickelt. Auch wenn National Instruments dieses Tutorium technisch unterstützt, ist es jedoch möglich, dass dieses Tutorium nicht umfassend getestet und überprüft wurde. NI übernimmt weder Garantien bezüglich der Qualität des Tutoriums noch bezüglich der weiteren technischen Unterstützung neuer Versionen ähnlicher Produkte und Treiber. DIESES TUTORIUM WIRD IM "IST-ZUSTAND" ZUR VERFÜGUNG GESTELLT UND NI ÜBERNIMMT KEINERLEI GARANTIEN. AUSFÜHRLICHERE ERLÄUTERUNGEN ZU ANDEREN EINSCHRÄNKUNGEN ENTNEHMEN SIE BITTE DEN NUTZUNGSBEDINGUNGEN AUF NI.COM (http://ni.com/legal/termsofuse/unitedstates/us/).