EDA-Tools Software-Entwicklung aus der Vogelperspektive

Wie kann eine modular aufgebaute Software-Applikation helfen, sich auf das Wesentliche zu konzentrieren; nämlich auf die eigentliche Applikation und nicht auf die mühselige, immer wiederkehrende Implementierung der Treiber und Dienste, um die Hardware ansprechen zu können. Dass der modulare Ansatz Sinn macht, beweist das im Folgenden beschriebene Beispiel, bei dem Daten über eine Tastatur mit PS/2-Schnittstelle eingelesen werden.

Die nachstehend skizzierte FPGA-Applikation beinhaltet ein Embedded-Projekt, dessen Herzstück ein 32-bit-IP-Softcore-Prozessor (TSK3000) - basierend auf einer Mips-Architektur - ist. Aufgabe der Embedded-Applikation ist es, die über eine an die PS/2-Schnittstelle angeschlossene Tastatur eingegebenen Zeichen einzulesen und auf einem 240×320-Pixel-TFT-LCD auszugeben. Die Funktionsfähigkeit des Designs kann dabei auf einem Entwicklungsboard, dem Altium NanoBoard 3000, umgehend getestet werden.

„Steckbrief“ des FPGA-Projekts

Das FPGA-basierte Embedded-Projekt wird mit Hilfe eines einfachen, grafischen Ansatzes aufgebaut. Dazu dient die so genannte OpenBus-Struktur, welche die IP, Peripherie-Controller sowie den TSK3000-Prozessor beinhaltet.

In einem OpenBus-Dokument können der Prozessor und die benutzten Peripherie- und Speichercontroller auf einfache Art und Weise miteinander verbunden werden. Die im Hintergrund benötigten Busse und Steuerleitungen werden automatisch angelegt. Die Aufgabe des Anwenders besteht dann darin, eine Verbindung der Komponenten über die Master/Slave-Ports herzustellen (Bild 1).

Über das FPGA wird dieses IP-basierte System mit der „externen Welt“ verbunden, für die Anbindung werden die Ports der Peripherie-Hardware den entsprechenden physikalischen FPGA-Pins zugewiesen. Die Peripherie kommuniziert über den Wishbone-Bus-Standard mit dem Prozessor (Bild 2).

Die benutzten Peripherie-IP-Cores sind ein PS/2-Controller, um die Keyboard-Daten einzulesen, ein TFT-Dis- play-Controller für die Ausgabe der Daten auf dem Display sowie ein SRAM-Memory-Controller, über den die Embedded-Applikation auf 1 Mbyte externes SRAM - zusätzlich zum internen FPGA-Embedded-RAM - zugreifen kann. Da sowohl der TFT-Display-Controller als auch der TSK3000-Prozessor dieses externe RAM adressieren müssen, wird ein Arbiter benutzt, um den Zugriff mehrerer Master auf das SRAM zu ermöglichen.

Der Arbiter arbeitet in dieser Applikation prioritätsgesteuert, wobei das TFT-Display die höhere Priorität gegenüber dem TSK3000-Prozessor hat. Der Arbiter selbst kann alternativ auch nach dem „Round Robin“-Ausführungsplan verfahren. Hierbei haben dann alle Master nacheinander einen kurzen Zeitraum für den Zugriff auf den Speicher. Wohin die Peripherie im Peripherie-I/O-Bereich des TSK3000-Prozessors gemappt wird, bestimmen die Wishbone-Interconnect-Anschlüsse. Über diese Interconnect-Anschlüsse kann bei Bedarf auch der gemappte Bereich verschoben werden.

Die Ansteuerung der eingesetzten Peripherie ist eine der wichtigsten Aufgaben, für die ein Prozessor innerhalb einer Embedded-Applikation zuständig ist. Hierzu werden entsprechende Treiber-Funktionen benötigt, die sich zeitaufwendig dadurch realisieren lassen, dass man diese Funktionen selbst schreibt und anschließend testet. Eine komfortablere Möglichkeit indes besteht darin, auf Peripherietreiber-Bibliotheken von Drittanbietern zurückzugreifen, die dann die Funktionen zur Bedienung der Peripherie beinhalten.