Ü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.
Inhaltsverzeichnis
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“.

Abb. 1: Darstellung der SPI-Kommunikation zwischen Master und Slave
Das LabVIEW Statechart Module
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.
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.
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
Überlegungen
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
Links auf thematisch verwandte Internetseiten
Weitere Informationen erhalten Sie unter:
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/).
