Hard- und Software-Co-Design mit FPGAs #####
14. Juli 2009, 10:12 Uhr |
Frank Krämer
Fortsetzung des Artikels von
Teil 1
Herausforderung Hardware-Entwicklung
Krux oder Segen – bevor programmierbare Bausteine oder Prozessoren mit Leben gefüllt werden können, muss ein Prototyp in Hardware existieren. Natürlich lassen sich Vorarbeiten im „Trockenen“ durchführen, aber lieber früher als später wird der Test in realer Hardware erfolgen. Daraus ergibt sich, dass die Entwicklung der Hardware-Plattform traditionell die erste zu nehmende Hürde in der Entwicklung eines Boards darstellt. Gleichzeitig ist dies aber der Bereich, der sehr unflexibel für Änderungen ist. Eine Überarbeitung der Hardware ist immer zeitund kostenaufwendig. In diesem Stadium werden Entscheidungen getroffen, die alle weiteren Schritte des Design-Flows beeinflussen. Dazu gehören z.B. Entscheidungen zur Architektur der Applikation, der Partitionierung in Hard- und Software oder aber die Festlegung auf bestimmte FPGAs oder Prozessoren. Oftmals werden im späteren Ablauf Kompromisse oder Workarounds implementiert, um Fehler bzw. ungünstige Entscheidungen aus dem Anfangsstadium zu beheben.
Jobangebote+
passend zum Thema
Im Fokus der Hardware-Entwicklung steht die Aufgabe, möglichst schnell ein funktionierendes System zur Verfügung zu stellen, das den verschiedensten Anforderungen genügen muss. Dabei steht im Vordergrund, dass das System in den spezifizierten Bereichen elektrisch einwandfrei funktionieren muss. Stehen die entsprechenden stabilen Versorgungsspannungen zur Verfügung und sind alle kritischen Signale störungsfrei und zum richtigen Zeitpunkt verfügbar? An sich schon eine beliebig komplexe Aufgabe, die zudem mit den Freiheitsgraden der programmierbaren Bausteine und der Prozessoren zurechtkommen muss. Die mechanischen Anforderungen verlangen ein für den Einsatzbereich belastbares System, das oft den Randbedingungen des umgebenden Gehäuses unterliegt.
Bei der Lösung dieser Aufgabe stellen sich verschiedene Fragen:
- Gibt es schon verifizierte Sub-Komponenten des Systems? Falls ja, ist das schon ein großer Schritt. Bewältigt werden kann er aber erst, wenn klar ist, wie vorhandene Design-Elemente in eine neue Applikation eingebunden werden können.
- Wie verläuft die Zusammenarbeit mit den Kollegen in der mechanischen CAD-Welt? Ein nicht zu unterschätzendes Thema, das viele Teilbereiche enthält. Wie schnell lässt sich eine Leiterplattenkontur aus den Vorlagen der Mechanik definieren? Wie erfolgt eine Prüfung der bestückten Leiterplatte auf Kollisionen mit dem Gehäuse? Kann eine 3D-Kollisionsprüfung der Bauteile auf der Leiterplatte durchgeführt werden? Steht ein 3D-Modell der bestückten Leiterplatte zur Verfügung?
- Wie sind die Schnittstellen zu programmierbaren Bausteinen definiert? Nur allzu oft werden immer noch ausgedruckte Listen ausgetauscht, um ein FPGA in der Leiterplatte zu implementieren. Welcher Aufwand tritt auf, wenn Änderungen am Pin-Out durchgeführt werden sollen? Wie werden Fehler vermieden?
Herausforderung Software-Entwicklung
Ähnliche Sorgen beschäftigen auch den Software-Entwickler, der darauf wartet, seine Applikation auf der Ziel-Hardware zu testen. Bis es soweit ist, stellen sich auch hier einige Fragen:
- Wo finde ich die passenden Treiber? Viel zu oft wird wertvolle Zeit damit verschwendet, Treiber zu programmieren. Dabei ist durch den Treiber noch nicht eine Zeile der wirklichen Applikation entstanden.
- Wie kann ich verschiedene Lösungsansätze testen? Es ist natürlich ratsam, verschiedene Ansätze zur Optimierung einer Lösung zu testen. Oft ist der Spielraum sehr begrenzt, da sich die Varianten meist in der zuvor schon festgelegten Hardware-Plattform bewegen müssen.
- Kann ich meine Software in Hardware umwandeln? Beim Einsatz von FPGAs ist dies ein spannendes Thema. Wie lässt sich C-Code in parallel arbeitende FPGA-Logik umsetzen? Sind dazu Änderungen am Code notwendig?
- Wie hardware-nah bzw. -unabhängig kann die Applikation gestaltet werden? Dies ist ein Thema, das zwingend mit der verwendeten Entwicklungsumgebung verknüpft ist. Eine hardwareunabhängige Implementierung setzt voraus, dass die Schnittstellen zur Hardware entsprechend aufgesetzt sind und konfiguriert werden können. Um Software zu schreiben, die auf ein Peripherie-Element zugreift oder dieses steuert, ist ein gründliches Wissen über die Funktionsweise dieses Elements notwendig: Welche Register werden benötigt, welche bausteinspezifischen Befehle müssen verwendet werden, welches Protokoll ist einzusetzen und welche Interrupts müssen verwaltet werden?
- Hard- und Software-Co-Design mit FPGAs #####
- Herausforderung Hardware-Entwicklung
- Die Grenzen des „Self-made“-Design
- Hard- und Software-Co-Design mit FPGAs
- Übersichtliche Bauteilbezeichnungen