Suchen

SOPC in der Praxis Die Embedded-Welt der programmierbaren Logik

Autor / Redakteur: Manfred Helzle* / azubi 625

Die Geschichte der programmierbaren Logikbausteine von den PALs bis zu den heute verfügbaren FPGAs sind etwa 20 Jahre beträchtlicher Innovationen: vom einfachen Adressdecoder bis zu leistungsfähigen 32-Bit-RISC-Prozessoren mit allen Finessen. Das „System On a Programmable Chip“ gewinnt dabei immer mehr an Bedeutung.

Firmen zum Thema

( Archiv: Vogel Business Media )

Übrigens: „Embedded“ bedeutet aus meiner Sicht ein komplettes Prozessorsystem mit Daten- und Programmspeicher, Peripherie, irgendeiner Art von Anzeige (LCD, LEDs) und Eingabemöglichkeit (Tasten, Knöpfe, Schalter) und evtl. Schnittstellen (RS232, USB, Funk) nach außen – das Ganze häufig in großen Stückzahlen zu niedrigsten Preisen und absolut robust und zuverlässig für eine einzige Applikation: Handy, Motorsteuergerät, GPS, MP3-Player, elektronisches Wörterbuch, Kaffeemaschine, Maus, Tastatur, etc.

Die SOPC-Technologie soll im Folgenden auf der Basis der Altera-Lösung mit NIOS hardware- und softwaremäßig näher erläutert werden. Nachdem die großen Anbieter im FPGA-Geschäft Produkte ab 10 s anbieten, wird es Zeit, die gebotenen Möglichkeiten in der Praxis einzusetzen – aber wie?

Bildergalerie

Was benötigt nun solch ein Embedded-System im Detail und wie kann es realisiert werden? Wie aus Tabelle 1 ersichtlich, kann ein SOPC-Design (fast) das gleiche wie eine Single-Chip-Lösung, hebt sich aber besonders dann ab, wenn viele Peripherie-Funktionen und zusätzliche Logik gleichzeitig benötigt werden, bzw. Signalverarbeitung erforderlich ist. Betrachten wir uns diese Funktionsblöcke einmal näher:

Speicher

Alle FPGAs bieten mehr oder weniger RAM-Zellen (bis zu einigen 10 MBit), die vielseitig in der Breite und Tiefe als: RAM, ROM, CAM, FIFO, Schieberegister, DPRAM oder LUT konfiguriert werden kön-nen, bei Frequenzen von einigen 100 MHz. SD/DRAM-Controller sind flexibel konfigurierbare Speicher-Controller für externen Speicher mit FIFOs, anpassba-rem Timing und Speicherbreite.

Takterzeugung – PLLs, DLLs, FLLs

Alle FPGAs bieten meist mehrere dieser Blöcke, um alle benötigten Frequenzen auf dem Chip zu erzeugen. Der externe Takt kann z.B. 33 MHz betra-gen, eine PLL erzeugt daraus 66 MHz für den Prozessor, 132 MHz für den SD/DRAM-Controller, 330 MHz für die LVDs-Signale, 100 MHz für den ADC etc.

DSP-Funktionen

Viele Anwendungen beinhalten digitale Signalverarbeitung in mehr oder weniger komplexen Algorithmen für die Sprach-, Musik-, Bild- oder Videobearbeitung. Dies wird hardwaremäßig durch skalierbare Multiplizierer und Addierer (sog. MACs) unterstützt, wie sie vielfach in digitalen Filtern und FFTs benötigt werden.

LVDS, RapidIO – ideale Kommunikations-Links

Alle modernen FPGAs bieten die Möglichkeit, LVDS-Pegel (Low Voltage Differential Signal) an den Ausgangspins paarweise zu erzeugen und an ent-sprechenden Eingangspins zu verarbeiten. Je nach FPGA-Familie gehen die Frequenzen von einigen 100 MHz bis zu derzeit ca. 10 GHz. Die FPGA-Hersteller bieten dazu dann z.B. RapidIO-konforme Funktionsblöcke an, die sehr schnelle und zuverlässige Schnittstellen zwischen Chips, Boards z.B. über die Backplane, Systemen und sogar zwischen Systemen in unterschiedlichen Räumen mit bis zu ca. 5 m Distanz erlauben – mit Serial RapidIO können beispielsweise Standard-CAT5-Kabel verwendet werden.

Power-Management

Durch gezieltes Abschalten von Clock-Signalen, können dynamisch einzelne Funktionsblöcke abgetrennt werden, um die Stromaufnahme zu reduzieren. Ebenso können durch Umprogrammierung der PLLs die internen und externen Takte den aktuellen Forderungen angepasst und dadurch die Rechenleistung und der Stromverbrauch optimiert werden.

System-Update

Wenn (fast) alle Hardware-Funktionen im FPGA realisiert sind, kann außer der Software jetzt auch die Hardware vor Ort aktualisiert werden – mit zusätzlichen Funktionen, an die bei der Entwicklung möglicherweise noch nie gedacht worden war, oder die sogar unbekannt waren. Dazu zählen z.B. zusätzlich benötigte Timer, DMAs, oder Änderungen an den FIFOs. Dem Ruf nach einem Hardware-Redesign lässt sich relativ schnell und kostengünstig durch ein Update des FPGAs und der Software begegnen.

Nachbausicherheit – Kopierschutz, Klonen

Da die Funktionalität eines FPGA-Designs nicht aus einem frei verfügbaren Datenblatt ersichtlich ist, sondern vom jeweiligen Entwickler für seine Applikation festgelegt wird, ist eine hohe Nachbausicherheit gewährleistet.

Software

Assembler, C und C++ sind die gängigen Programmiersprachen im Bereich der Embedded-Systeme, wobei der Trend ein-deutig zu C und C++ geht, mit speziellen Derivaten wie EC++, der Embedded-Version von C++. Die C-Compiler sind heutzutage so effizient, dass es schon beträchtlichen Aufwand erfordert, von Hand einen besseren Code in Assembler zu erzeugen, von der Handhabbarkeit, Wiederverwendbarkeit und Pflege einmal abgesehen.

Allerdings bieten ein paar Assembler-Instruktionen in einer ISR evtl. erhebliche Leistungs-vorteile gegenüber der Hochsprache, da nicht der volle Kontext gerettet und restauriert werden muss.

NIOS: Prozessoren und I/Os

Teil der QuartusII-Entwicklungsumgebung von Altera ist der SOPC-Builder, in dem man seinen Prozessor (16 oder 32 Bit, Cache etc.) mit Speicher (On-Chip, externes SRAM, externes SD/DRAM, FlashROM), Peripherie (U-ART(s), Timer, DMA(s)) und Custom Instructions (z.B. divi, fmul etc.) zusammenstellt – hauptsächlich durch Anklicken der angebotenen Möglichkeiten und Ausfüllen der Optionen wie Adressen und Prioritäten. Bild 1 zeigt die Gesamtübersicht des SOPC-Builders.

Danach drückt man den Knopf „Generate“ und es wird automatisch der VHDL-Code für die Hardware und die benötigten Header-Files, Libraries und Beispiel-Programme generiert, um den Prozessor mit den ge-wählten Peripherie-Funktionen testen zu können und die eigene Applikation zu entwickeln.

Auf der Schematic-Ebene (Bild 2) werden die Signale sehr übersichtlich mit den zur Verfügung stehenden Pins und/oder weiteren Logikblöcken des FPGAs verbunden. Eine Simulation und Synthese ist zusätzlich z.B. mit ModelSim und Sinplify möglich, die direkt eingebunden werden können. Das ganze ist zeitgemäß in die integrierte Entwicklungsumgebung (IDE) Eclipse eingebunden.

Custom-Instructions

Bei NIOS gibt es die Möglichkeit, sog. Custom-Instructions zu implementieren. Dahinter verbirgt sich ein VHDL-Code, der über zwei 32-Bit-Register zwei Eingangswerte erhält, einen 32-Bit-Ausgangswert berechnet und dies automatisch dem NIOS im Register mitteilt. Über einen 11-Bit-PreFix (PFX) kann diese VHDL-Funktion auf bis zu 2048 unterschiedliche Weisen reagieren – und die Quartus-Entwicklungsumgebung liefert dazu passend gleich die benötigten Header-Files mit, um das Ganze direkt aus C/C++ aufzu-rufen. Andere Möglichkeiten wären 7-Segment-Dekoder, Big-/Little-Endian-Converter, Regel-algorithmen, digitale Filter, FFT etc.

Testbarkeit

Dadurch, dass das Ganze im FPGA realisiert ist, können Daten zu Testzwecken synthetisch (durch VHDL-Code) erzeugt werden, bevor z.B. ein A/D-Wandler seine Werte ans FIFO liefert. Damit könnte sogar mit einem einfachen Evaluierungs-Board eine komplexe Applikation getestet werden, bevor die endgültige Hardware fertig ist.

Außerdem bietet QuartusII noch die Möglichkeit eines integrierten Logik-Analysators, der an jedes Signal angeklemmt werden kann und über JTAG mit der Benutzeroberfläche auf dem PC kommuniziert. Die Anzahl der Kanäle, die Speichertiefe und die Triggermöglichkeiten sind nur durch die zur freien Verfügung stehende Logik begrenzt.

MatLab

Wer mit MatLab-Algorithmen und -Funktionen entwickelt (z.B. Filter, FFT), kann über spezielle Schnittstellen direkt Funktionsblöcke für das FPGA erzeugen und zusammen mit dem NIOS-Prozessor im FPGA platzieren.

Debugging

Über einen zweiten UART und die Benutzeroberfläche „Insight“ kann der Standard GNU Debugger GDB verwendet werden.

Zudem steht von einem Dritt-anbieter ein On-Chip-Debugger zur Verfügung, der zusätzliche Logik „verbraucht“ und über JTAG mit der Benutzeroberfläche am PC kommuniziert.

Ich persönlich habe ein Zu-satzmodul entwickelt, das es erlaubt, Memory-Mapped-Variablen und Register hard-waremäßig zu beobachten, ohne jeglichen Software-Overhead.

Sehr leicht lassen sich IRQs oder Triggersignale für ein Oszilloskop generieren, wenn z.B. bestimmte Daten an einer bestimmten Adresse auftauchen – ein einfacher Dekoder am internen Adress- und Datenbus angeklemmt.

Skalierbarkeit

Skalierbar sind Kosten ge-genüber Funktionalität und Performance. Das ist mit SOPC in weiten Bereichen realisierbar:

- ein Layout/Board,

- unterschiedliche FPGA-Geschwindigkeiten,

- unterschiedlich große FPGAs im selben Gehäuse,

- unterschiedlich große FBGA-Gehäuse,

- unterschiedlich schnelle externe Speicher und

- unterschiedliche Größe externer Speicher.

?(RT)OS

Jetzt kommt eine Glaubensfrage, über die schon viel diskutiert und gestritten wurde: Wie-viel (RT)OS braucht der Mensch – die Applikation?

Ein SOPC-System mit vielen Peripherie-Funktionen auf dem Chip, erzeugt eine Unzahl von priorisierten Interrupts (IRQs), die am schnellsten (und meistens auch am einfachsten und übersichtlichsten) direkt in der jewei-ligen Interrupt-Service-Routine (ISR) bearbeitet werden; in Assembler oder Hochsprache.

Kosten sparen, Übersicht wahren

SOPC-Systeme sind heutzutage kostengünstig und einfach zu konzipieren, erstellen, simulieren, programmieren, testen und pflegen.

Der SOPC-Prozessor (oder mehrere) managt das System, die schnellen Funktionen laufen in Hardware. Das spart Kosten, sorgt für Übersichtlichkeit und ist auch langfristig machbar, ohne dem GHz-Hipe nach-laufen zu müssen!

Sogar mehrere „langsame“ Prozessoren können, jeder für sich, eine Aufgabe bearbeiten und zusammen trotzdem höchste Leistungsfähigkeit erzielen – bei erheblich reduziertem Stromverbrauch!

Über die schnellen LVDS-Links werden einfach so viele Knoten verbunden, wie Rechenleistung oder Funktionalität benötigt wird – in jeder Richtung skalierbar. Nachträgliche Änderungen und Erweiterungen sind möglich.

Die Wiederverwendbarkeit von Hardware- und Software-Code ist enorm, da immer wieder die selben Software-Routinen die selben Hardware-Blöcke bedienen.

embedd.it, Fax +49(0)7304 929426

*Manfred Helzle ist Inhaber des Embedded-Dienstleisters embedd.it in Blaustein-Wippingen.

(ID:197667)