Bildergalerie
Bild 1: Das Spektrum des Embedded-Designs von SoC bis MCU.
Bild 2: Tools wie der PSoC Creator von Cypress Semiconductor, ermöglichen das Design einer programmierbaren analogen Schaltung durch die Auswahl der gewünschten Funktio-nalität und vermeiden Implementierungsdetails.
Bild 3: Eine Überspannungszeitschaltung, bestehend aus einem analogen Komparator und einem digitalen Zähler.
Bild 4: Der Workspace Explorer des PSoC Creator zeigt die erstellten Quelldateien für Komparator, Zähler, Taktgeber und Unterbrechungsroutine.

Brücke zwischen ASIC und MCU

Um die Kluft zwischen ASIC und MCU zu überbrücken und Vorteile beider Architekturen zu vereinen, muss eine programmierbare analoge und digitale Plattform eine hohe Flexibilität aufbieten, ohne dass man dafür über Expertenwissen in beiden Gebieten verfügt. Designer möchten diese Programmierbarkeit um herkömmliche CPUs und handelsübliche Tools und Ökosysteme erweitern. Am Ende passt ein ideales System perfekt zu einer Anwendung und verfügt über all die erforderlichen Peripherien und Benutzeroberflächen, erbringt die optimale Leistung und hat keine unnötigen Funktionen, die nur zusätzliche Kosten bedeuten.

Im Laufe des letzten Jahrzehnts hat sich die ARM-Architektur zum gängigen Standard für das ASIC-Design entwickelt. Der Zuspruch, den ARM überall in der Embedded-Branche erhält, spricht eindeutig dafür. Realistisch ist, dass für jede Plattform, die im programmierbaren Bereich erfolgreich sein soll, lediglich eine ARM-CPU einzusetzen ist – und zwar aus dem Grund, dass diese den beteiligten Entwicklern eine einheitliche Basis und eine optimale Zeitplanung ermöglicht. Beim SoC-Design ist es äußerst schwierig, Entwickler von ihren traditionellen Plattformen abzubringen, wenn CPU-Architektur, Compiler, IDEs und Debugger, und RTOS nicht identisch sind, und nicht dieselben Middleware-Pakete verwendet werden.

Analoge Funktionen programmierbaren Geräten hinzufügen

Obwohl es viele Plattformen gibt, die zum Beispiel analoge Komponenten in Form von Hochgeschwindigkeits-Kommunikationsschnittstellen integrieren, sind der eigentliche Nachteil, der beseitigt werden sollte, die Low-Level-Schaltkreise, die normalerweise externen hinzubeschaltet werden müssen. Schließlich erledigt die Phy-Implementierung (PHY) moderner FPGAs die Probleme der gesamten analogen Komponenten, und sorgt für eine standardmäßige digitale Schnittstelle wie bei einem IP-Block.

Die eigentliche Herausforderung besteht darin, universelle Funktionen wie Analog-Digital-Wandler und Digital-Analog-Wandler, Verstärker und Spannungskomparatoren zu implementieren. Eine digitale Funktion macht es beispielsweise möglich, die Implementierung in ein Design umzusetzen, sie an die jeweiligen I/Os zu leiten und statische Timing-Analysen durchzuführen. Das Timing spielt mit Sicherheit eine wichtige Rolle beim Design; Timing-Probleme sind jedoch weniger Eigenschaften des IPs, das integriert wird, vielmehr hängen diese von der Geschwindigkeit ab, mit der ein Gerät läuft, der generellen Komplexität des gesamten Designs, und der Anwendungshäufigkeit des Teils – jeder einzelne Faktor wirkt sich auf die verfügbaren Routing-Ressourcen aus. Bei einem analogen Design wird die Funktionsweise selbst der einfachsten Schaltkreise jedoch unmittelbar von den Konfigurationsmöglichkeiten, dem On-Chip-Routing, und dem externen Leiterplattendesign beeinflusst, und es ist nicht leicht, hier alles richtig zu machen.

Auch muss ein Designer nicht wissen, wie ein ADC-Chip an sich funktioniert, und genauso wenig sollte er die Registernamen und Bitfelder eines integrierten Bauteils lernen müssen, nur um ein On-Chip-ADC einzurichten.

Sobald ein ADC im Design ausgewählt wurde (z.B. SAR oder Delta-Sigma), muß eine Anpassung an die genauen Anforderungen einer Anwendung vorgenommen werden. Idealerweise geschieht dies mithilfe von Parametern. Wenn ein ADC einen Wertbereich oder festgelegte Werte z.B. für den Eingangsspannungsbereich (der Spannungsbereich, bei dem keine Sättigung des ADC eintritt) unterstützt, dann sollten die Wahlmöglichkeiten leicht verständlich vorgestellt werden, und die Entscheidung einzig durch die Wahl des gewünschten Parameterwertes gefällt werden.

Ein Beispiel für ein Tool einer programmierbaren Plattform ist PSoC Creator von Cypress Semiconductor (Bild 2). PSoC Creator unterstützt mit einem Tool zugleich PSoC 3- (8051-Core) und PSoC 5- (ARM Cortex M3) Designs mit einer graphischen Erfassungsmethode, die den Benutzer das geplante Design zeichnen und ihn die ausgewählten Parameter über einen benutzergeführten Editor einstellen lässt.

Der Benutzer kann vorgefertigte analoge und digitale Komponenten aus einer Bibliothek auswählen, über den er auch Zugriff auf Beispielprojekte und Datenblätter erhält, genau wie z.B. bei einem externen ADC-Chip. Wenn eine Komponente in ein Design integriert wird, erstellt das Tool APIs, mit denen die Anwendung kommunizieren kann, ohne Registersets zu dekodieren oder sich auf die Anordnung und das Timing des Setup-Codes konzentrieren zu müssen.

Analoges und digitales Design in Softwareentwicklung integrieren

Es ist zwar effektiv, das Problem analoger programmierbarer Schaltkreise mit einem schematischen Tool anzugehen, dies ist jedoch keine Lösung für die gesamte Systemerstellung. Entwickler benötigen ebenfalls ein Tool, das digitales Design unterstützt, und, vielleicht noch wichtiger, die Softwareanwendung.

Anstatt üblicherweise mehrere Tools zu verwenden, könnten Entwickler stattdessen mit einer Kombination digitaler und analoger Designelemente in einem Editor zeichnen und derartige Designs in ein- und derselben Umgebung gleich erstellen, debuggen und testen.

Hersteller programmierbarer Plattformen dürfen nicht vergessen, dass Entwickler in der MCU-Welt ihre Designs in einer softwarezentrierten integrierten Entwicklungsumgebung (IDEs) durchführen, die Source Editing, Projektmanagement, Kompilierungstools und Debugging an einem Ort zusammenbringt. Selbiges gilt grundsätzlich – für die Anwendungsentwicklung – in der Welt der ASICs, in der Entwickler von Chips und Software aber selten im selben Boot sitzen. Beide Parteien benötigen eine moderne IDE, die sich so verhält wie diejenige, an die sie gewöhnt sind. Und sie sollte sogar noch vielversprechendere Funktionen haben, um einen Wechsel lohnenswert zu machen.

Ein modernes integriertes Konzept kann anhand des Beispiels einer Überspannungszeitschaltung dargestellt werden, die einen analogen Komparator und einen digitalen Zähler verwendet, um die Eingangsspannung zu kontrollieren (Bild 3). Wenn die Spannung auf dem Pol den vorgegebenen Wert übersteigt, startet der Komparator den Zähler, und signalisiert nach einer vorher durch einen Parameter festgelegten Zeit einen Fehlerzustand auf einem Pol und löst eine Unterbrechungsroutine (ISR) aus. Dieses einfache Beispiel integriert digitales und analoges Design mühelos und stellt zugleich andere Funktionen dar, deren Ausführung sich als schwierig gestaltet, wenn ein Entwickler ein Gerät von Grund auf neu entwickelt, oder den Beschränkungen einer MCU unterliegt; insbesondere der Fähigkeit, Kontakte, Taktgeber, Spannungssollwerte und Interrupts einfach umzusetzen.

Wenn dieses Design umgesetzt wird, erstellt das Designtool APIs für die verwendeten Komponenten. Es ermöglicht dem Entwickler, diese Komponenten zu verwenden, ohne zunächst die genaue Implementierung beschreiben zu müssen. In den APIs kann ein Entwickler beispielsweise die Timeout-Zeit eines Zählers verändern oder seinen Wert abfragen, den Interrupt deaktivieren, den Taktgeber abschalten usw., alles ohne das Referenzhandbuch für das Element zu lesen oder den Mustercode zu durchforsten. Da die notwendigen Hardwarebeschaltungen im Schaltplan berücksichtigt werden, bietet ein programmierbares Design einen faktischen Vorteil gegenüber Chips mit fest definierten Funktionen, da das Tool den gesamten Setup-Code automatisch bereitstellt und er unkompliziert in alle On-Chip-Funktionen eingespeist werden kann.

Die Generierung der API ist tatsächlich nur eine Erweiterung der Idee, Parameter des Hardware-Setups an die Software überzuleiten. Um einen Taktgeber einzurichten, muss der Entwickler ihn lediglich graphisch in die Schaltung einbauen und schließlich die gewünschte Frequenz einstellen. Das Tool errechnet selbst, wie die passende Frequenz innerhalb des Toleranzbereiches anhand der verfügbaren Taktquellen abzuleiten ist. Um den Taktgeber zu starten und zu stoppen, wird eine einfache Anfrage an die API wie ctr_clock_Start() bzw. ctr_clock_Stop() benötigt. Die  Register müssen nie modifiziert werden, um die Taktgeberquelle auszuwählen, ein Teilverhältnis einzustellen, sie als Input für die On-Chip-Funktion einzustellen, oder sie über kryptische Bit-Manipulation zu aktivieren/deaktivieren.

Ein Tool, das APIs für Systemressourcen wie Taktgeber, Interrupts, DMA, Filter und Pole generiert, ermöglicht enorme Zeiteinsparungen. Und mindestens so gut wie bei MCUs oder ASICs lassen sich analoge oder digitale Kommunikationsschnittstellen einbauen, wenn nicht sogar noch viel einfacher.

Kombiniert mit den beliebtesten Embedded-ARM-Cores ist ein integriertes schematisches Erfassungstool eine attraktive Alternative für beide Enden des Design-Spektrums. Programmierbares Silizium wird immer besser und erbringt immer mehr Leistung, wodurch auch immer größere Neuerungen ermöglicht werden. Und da es immer leistungsstärkere (ARM)-Cores gibt, die diesen Fortschritt unterstützen, und angesichts dessen, dass hochentwickelte analoge Funktionen die Gesamtzahl an Chips immer geringer werden lässt, ist es offensichtlich, dass die Software, von der die Plattform unterstützt wird, der ausschlaggebende Faktor ist, ob diese am Markt erfolgreich sein wird oder nicht. Das Entwicklungs-Tool für den Alltag ist der Schlüssel, um das Potenzial des Siliziums auszuschöpfen, und um das Spektrum an Designmöglichkeiten zu erweitern; viel wichtiger ist jedoch, dass es Fans unter den Programmierern im Embedded-Bereich gewinnen wird, die genau das tun, was sie immer tun: nach einem besseren Lösungsweg für komplexe Probleme zu suchen.