Das Embedded-Projekt besteht aus einem C-Modul sowie einem Software-Platform-Builder-Dokument. Der C/C++-Compiler für den TSK3000 ist im Altium Designer enthalten. Nachdem das Embedded-Projekt mit dem FPGA-Projekt „verheiratet“ wurde, können nun im Software-Platform-Builder mittels einer „Import from FPGA“-Funktion die benutzten Peripherie-Komponenten importiert werden. Hiernach werden die im FPGA-Projekt erkannten Komponenten der untersten Ebene, also die Hardware-Wrapper für den PS/2-Controller sowie das VGA-TFT-Display, angezeigt.
Über eine „Grow Stack Up“-Funktion können nun zusätzliche Treiber und Context-Ebenen hinzugefügt werden. Für den PS/2-Controller ist dieses der „Keyboard I/O Context“ und für den VGA-TFT-Display-Controller der „Text Display Context“ als oberste Context-Ebene. Um die Standard- Ein- und -Ausgabe direkt nutzen zu können, werden die Standard-Input- bzw. Standard-Output-Optionen aktiviert und das Keyboard als „stdin“-Device, respektive das TFT-Display als „stdout“-Device zugewiesen (Bild 5).
Für eine automatische Initialisierung der Peripherie werden die Optionen „Generate Initialization Code“ sowie „Call Initialization Code“ ausgewählt. Dann werden dementsprechend Funktionsaufrufe für die Initialisierung erzeugt, und der Startup-Code des Embedded-Projekts ruft diese Funktionen auf. Zu Beginn der „main“-Schleife kann dann sofort auf die Hardware zugegriffen werden. Der verbleibende C-Code für diese Beispielanwendung ist dann aufgrund der Software-Platform-Builder-Unterstützung auf wenige Zeilen reduziert (Listing 2).
Hier erscheint also eine kurze Anweisungsausgabe auf dem TFT-Display, und anschließend können Testeingaben über das PS/2-Keyboard gemacht werden. Wird die ESC-Taste betätigt, so beendet dies das Programm.
Aternative I/O-Peripherie lässt sich einfach integrieren
Sollen mehrere Ein- oder Ausgabe-Peripheriekomponenten gleichzeitig benutzt werden, so werden die zusätzlichen Komponenten dann über die Standard-C-Bibliotheksfunktionen „fopen()“, „fprintf()“, „fgetc()“, „fputc()“, „fclose()“ adressiert.
Alternativ zum TFT-Display könnte die Ausgabe auch über die serielle Schnittstelle oder ein virtuelles Terminal-Interface erfolgen. Oder statt die Daten über ein PS/2-Keyboard einzulesen, könnte dies auch über ein USB-Keyboard oder ebenfalls die serielle Schnittstelle erfolgen. Die dazu erforderliche Anpassung bedingt lediglich einen Austausch der Peripherie-Komponente im OpenBus-System-Dokument und im Schaltplan-Dokument für die geänderte FPGA-Pin-Zuweisung sowie eine anschließende Aktualisierung des Software-Platform-Builder-Dokuments, um das geänderte „stdout/stdin“-Device darin zu konfigurieren.
Sich aufs Wesentliche konzentrieren können
Der Software-Platform-Builder beinhaltet Module auf unterschiedlichen Abstraktionsebenen (Stack-Ebenen). Context-Module beispielsweise können auf Treiber-Module aufgesetzt werden, um damit eine Hardware-Unabhängigkeit für eine optimale Portabilität der Applikation zu erreichen. Allerdings kann auch sinnvoll sein, stattdessen die APIs der Module aus den unteren Stack-Ebenen zu benutzen.
Die Context-Module bieten zwar den Vorteil der Hardware-Unabhängigkeit und sind sehr einfach einsetzbar, man erkauft sich diesen einfachen und praktikablen Aufbau aber mit möglichen Abstrichen in der Performance der Applikation.
Nichtsdestotrotz bietet eine solche Vorgehensweise eine sehr schnelle Möglichkeit, verschiedene Ansätze und Algorithmen für eine Applikation aufzubauen und zu testen, ohne dabei zeitraubende Low-Level-Routinen vorbereiten zu müssen. Die Konzentration ist dadurch sehr schnell beim wesentlichen Thema - nämlich der Applikation selbst.
Der Autor:
| Ulrich Kloidt |
|---|
| studierte Nachrichtentechnik an der FH Steinfurt. Nach seiner Tätigkeit als Software-Entwickler für 8-bit-Mikrocontroller-Applikationen ist er seit 1996 als Applikationsingenieur im C/C++-Cross-Compiler-Support für Tasking-Produkte bei Altium tätig. Seit 2004 gehört auch der Support für Embedded/FPGA-Systementwicklung mit Altium Designer zu seinem Aufgabenbereich als Senior Application Engineer Altium Europe. |
ulrich.kloidt@altium.com