- System on a Programmable Chip
-
Unter „System on a Chip (SoC)“ oder Ein-Chip-System (bzw. Einchipsystem) versteht man die Integration aller oder eines großen Teils der Systemfunktionen auf einem Stück Silizium, auch monolithische Integration genannt. Eingesetzt werden SoCs üblicherweise in eingebetteten Systemen. Bei der im Deutschen oftmals verwendeten Bezeichnung System on Chip handelt es sich um einen Scheinanglizismus. Die korrekte englische Bezeichnung für ein Ein-Chip-System lautet System-on-a-chip.
Während Systeme ursprünglich aus einem Mikroprozessor- oder Mikrocontroller-IC und vielen anderen ICs bestanden, die auf einer Platine aufgelötet waren, geht heute der Trend dazu, möglichst alle Funktionen auf einem IC zu realisieren. Dabei werden digitale, analoge und mixed-signal Funktionseinheiten integriert. Vorteile sind vor allem Kosteneinsparung und Miniaturisierung. So ist heute beispielsweise bei Mobiltelefonen die digitale Funktion mit Ausnahme des Speichers auf einem IC realisiert. Bei noch höherer Integrationsdichte wird ein System-in-Package verwendet. Die Schnittstelle beispielsweise zur Tastatur, zur SIM-Karte oder zum Display sind bereits auf diesem IC enthalten.
Inhaltsverzeichnis
Einsatzgebiet
Eingesetzt werden SoCs vor allem im Mobilfunk, für Embedded Computer, Handhelds, Smartphones, PDAs, für MP3-Player, CD- und DVD-Geräte und überall dort wo es auf kleine Abmessungen bei hoher Leistung und vielfältigen Aufgaben ankommt, also beispielsweise auch im medizinischen Bereich sowie in der Luft- und Raumfahrt. Nicht zu vergessen ist aber auch der sehr große Markt der Steuerungs- und Automatisierungstechnik von der heimischen Waschmaschine bis zur Transferstraße in der Metallindustrie. Es ist normal, dass solche Geräte auch abgesetzte Einheiten haben können, wie etwa eine Tastatur oder einen Bildschirm. Das wesentliche Merkmal ist jedoch der minimale innere Zusatzaufwand für Bauteile auf der oder den Leiterplatten, welche den Kern des Geräts ausmachen. SoCs sind vor allem aus Kostengründen, d. h. zur weiteren Kostensenkung bei Gerätepreisen oder überhaupt zur marktfähigen Realisierung von Geräten ein entscheidender Trend im beginnenden 21. Jahrhundert.
Entwurfsvorgang
Typischerweise werden SoCs heute nicht mehr komplett neuentwickelt, sondern die Entwürfe basieren zumindest in Teilen auf bereits vorhandenen oder zugekauften Komponenten (Intellectual Property). Dies sind beispielsweise komplette Makros für CPU-Kerne oder Peripherieblöcken wie einem Ethernet- oder Bluetooth-Controller. Diese IP-Blöcke können aus unterschiedlichen Quellen stammen. Viele Standardkomponenten sind heutzutage bei entsprechenden EDA-Werkzeugen der Chiphersteller kostenlos enthalten. Andere Komponenten können vom Chip-Hersteller oder anderen IP-Schmieden wie z. B. ARM oder Transmeta lizenziert werden. Oftmals lassen sich solche IPs auch über Parametern dem Verwendugszweck angepasst generieren, beispielsweise in Form der Pipelinelänge, der Cachegröße oder den Busbreiten. Weitere Komponenten wurden beispielsweise in früheren Projekten entwickelt und können im Idealfall direkt wiederverwendet werden, oder es müssen Änderungen daran vorgenommen werden, evtl. auch nur in Form einer Parametrisierung. Eine weitere Möglichkeit ist das Verwenden „freier“ Hardware. Zwischenzeitlich entstehen auch im Hardwarebereich immer mehr OpenSource-Projekte (z. B. auf OpenCores.org), die sich jedoch oft noch im Entwicklungsstadium befinden. Was anschließend noch fehlt muss der Nutzer selbst entwickeln, oder entwickeln lassen. Die Übergänge, was in Software und was in Hardware umgesetzt wird, sind hierbei immer fließender, siehe Software Defined Radio.
Komponenten
Bus
Verbunden wird das System intern über einen oder mehrere Busse. In komplexeren SoCs kommt oft ein hierarchisches oder zumindest segmentiertes Bussystem zum Einsatz. Dieses besteht typischerweise aus einem schnellen Systembus, einem langsameren Peripheriebus und einem Register- bzw. Steuerbus. Schnelle Peripherieeinheiten werden mitunter aber auch direkt mit dem Systembus verbunden. Zwischen dem Systembus und dem Peripheriebus vermittelt eine Bridge. Weiterhin benötigt jeder Bus mit mehreren Mastern einen Arbiter. Für die besonders wichtige Verbindung zwischen dem Prozessor und seinem oder seinen Cache(s) bzw. einem kleinen lokalen Speicher wird oft ein proprietärer aber besonders schneller Prozessorbus eingesetzt. Ein Beispiel hierfür ist der LMB von Xilinx.
Als Systembus sind in SoCs beispielsweise AMBA von Arm (Busse: AHB bzw. ASB/APB) CoreConnect von IBM (Busse: PLB/OPB/DCR) oder in jüngster Zeit auch der WishBone von Silicore/OpenCores.org stark vertreten. Weit verbreitet sind heute Busbreiten von 32 bis 128 Bit. Bei leistungsfähigen SoCs findet sich oft ein DMA-Kontroller am Systembus, um die CPU von Speicherzugriffen zu entlasten.
Die Spezifikationen dieser Busse sind physikalisch alle auf die Implementierung in Anwendungsspezifische Integrierte Schaltungen (ASIC) und/oder FPGAs (engl. Field Programmable Gate Array)ausgelegt, lehnen sich jedoch ansonsten stark an verbreiteten Sytembussen wie PCI an.
Prozessor
Üblicherweise besteht ein SoC aus einem Prozessor, welcher über ein Bussystem mit Speicher und weiterer Peripherie verbunden ist. Bei diesem Prozessor kann es sich sowohl um einen sehr einfachen 8-Bit-Mikrocontroller handeln, als auch um eine sehr leistungsfähige Multicore-CPU, Mehrprozessorsysteme sind ebenfalls möglich. Je nach Leistungsfähigkeit, Anwendungsanforderungen und weiteren Kriterien wie Stromverbrauch, Größe, Preis usw. besitzt das SoC evtl. neben seinen Registern nur einen kleinen internen Speicher, oder (meist zusätzlich) einen oder mehrere deutlich größere externe Speicher. Dies kann beispielsweise SDRAM oder Flash sein. Hierfür hängt dann in der Regel am Systembus ein Speichercontroller, welcher eine entsprechende Schnittstelle für den Speicher zu Verfügung stellt.
Peripherie
Welche weiteren Peripherieeinheiten integriert werden, hängt sehr stark von der eigentlichen Anwendung, aber natürlich auch von vielen weiteren Faktoren wie den beim Prozessortyp erwähnten Kriterien ab. Diese Peripherieblöcke hängen meist nicht direkt am Systembus, sondern über eine sogenannte Bridge an einem separaten Peripheriebus. Dieser ist meist deutlich langsamer getaktet, genügt jedoch den Anforderungen der meisten Peripherie. Somit wird in erster Linie neben einigen anderen positiven Effekten die kapazitive Belastung des Systembusses gesenkt und dieser kann somit schneller getaktet werden, was natürlich nur so lange hilft, bis die CPU tatsächlich auf eine Peripherieeinheit warten muss, dann sind im Normalfall beide Busse belegt, ohne etwas zu arbeiten. Zusätzlich erleichtert ein Peripheriebus die Entwicklung einfacherer Komponenten, da der Bus im Gegensatz zum Systembus i. d. R. deutlich einfacher ist und durch seine oft kleinere Bitbreite und langsamere Taktung deutlich geringere Anforderungen stellt.
Viele SoCs enthalten auch einen Grafikkern, welcher der Ansteuerung eines oder mehrerer Displays dient. Hierfür ist in einem gewöhnlichen PC beispielsweise eine separate Grafikkarte oder ein im Chipsatz integrierter Grafikkern zuständig. Aber auch hier geht der Trend zu einer immer weiter fortschreitenden Integration. So planen bereits seit einigen Jahren große CPU-Hersteller wie AMD/ATI (siehe [1]), Intel und VIA/Nvidia CPUs mit integrierten GPUs zu fertigen. Während manche eingebetteten Systeme sehr hohe Anforderungen an die Grafikausgabe stellen (Spielekonsolen, BlueRay/DVD-Player, Bildgebende Geräte der Medizintechnik oder des Militärs), reichen in anderen Fällen oft LCDs oder einige Leuchtdioden zur Statusausgabe aus. Je nach Anwendung kann auch ganz auf eine grafische Ausgabe verzichtet werden. Besonders erschwert wird die Realisierung der Grafikfähigkeit oft durch besonders rigide Vorgaben beim maximalen Leistungsverbrauch, der maximalen Chipfläche oder auch durch einen extremen Preisdruck, sofern es sich um Massenware handelt.
Ebenso anzutreffen sind in vielen SoCs spezielle Audiokerne. Diese werden beispielsweise in Handys, MP3/DVD/…-Playern und ähnlichen Multimediageräten benötigt. Hierbei kommen je nach Anforderung/Stückzahl/finanziellen Möglichkeiten/Platzbeschränkungen/usw. oft aber auch externe Audio-Codecs zum Einsatz, welche dann nur über einen relativ kleinen IP-Block an den SoC-internen Bus angebunden sind. Sofern keine besonders hohen Anforderungen an die Audioqualität gestellt werden, kann beispielsweise ein AC97-Codec zum Einsatz kommen. Kosten sparen kann man mit solchen externen Komponenten aber nur bei kleinen Stückzahlen, da sich hier die Entwicklungskosten für eine integrierte oder gar selbst entwickelte Lösung oft überproportional auswirken.
Je nach Art und Anzahl der Peripherieblöcke sowie Einsatzzweck des SoC enthält dieses manchmal einen dedizierten Interruptcontroller. Bei einfacheren oder kleineren bzw. besonders günstigen Systemen wird aber oft auf einen solchen verzichtet. Hier muss dann die Software im nachhinein herausbekommen, wer denn nun den Interrupt ausgelöst hat. Fortschrittliche Interruptkontroller bieten nicht nur viele Kanäle um die Zuordnung der Interrupts zu übernehmen, sondern bieten auch Kanäle mit unterschiedlichen Interrupt-Prioritäten an. Dies ist beispielsweise wichtig, wenn in Teilen des Systems Echtzeitanforderungen gestellt werden, die mit Interrupts ohnehin nicht einfach bzw. manchmal überhaupt nicht zu lösen sind, da Interrupts ja eben nicht vorhersehbar sind. Dieses Problem kann im Einzelfall oft durch eine intelligente Priorisierung gelöst werden.
SoCs kommunizieren typischerweise viel stärker mit ihrer technischen Umgebung als mit einem Bediener. Hierzu werden je nach Anforderung diverse Schnittstellen implementiert. Dies geschieht oftmals durch Einbinden fertiger IP-Blöcke welche je nach Geschwindigkeit- und Latenzanforderung mit dem internen System- oder Peripheriebus verbunden werden. Zum Bediener hin kommt neben den bereits angesprochenen Audio- und Grafikschnittstellen hauptsächlich ein Tastaturcontroller (z. B. für Matrix-Tastaturen, serielle Tastaturen oder Touchpads) oder eine USB-Schnittstelle für entsprechende Geräte in Frage. Zur Kommunikation mit anderen Systemen kommen hauptsächlich Serielle Schnittstellen wie z. B. USB, RS232, CAN-Bus, LIN-Bus, MOST-Bus, ARINC429 und Ethernet in Frage. Hierbei wird manchmal nur der MAC-Layer im SoC integriert, manchmal aber auch der PHY. Eine weitere Möglichkeit sind Parallele Schnittstellen wie z. B. Centronics, Port-IO, IDE/CF, usw.
In der Regel besitzen SoCs eine Debug-Schnittstelle. Dies ist oft eine einfache RS232-Schnittstelle, zunehmend kommt aber auch hier USB zum Einsatz. Über diese Debugschnittstelle können dann im Betrieb Fehlermeldungen bzw. allgemeine Informationen ausgegeben werden, beispielsweise auf ein Terminal, also eine Konsolenanwendung. In komplexeren Umgebungen übernimmt diese Funktion oft auch eine JTAG-Schnittstelle. Diese wird typischerweise nicht nur zur Übertragung von Fehlermeldungen genutzt, sondern zur Kommunikation mit einem Hard- oder Softwaredebugmodul im SoC. Ein solches erlaubt es dem Anwender, beispielsweise das SoC „anzuhalten“ und die Abarbeitung im CPU-Kern Schrittweise „Step-by-Step“ durchzuführen, und bei Bedarf währenddessen einzelne Registerwerte zu ändern, oder beispielsweise eine Schleife abzukürzen oder einen Sprungbefehl zu umgehen. Eine weitere Anwendung dieser Schnittstelle ist das Programmieren programmierbarer Bereiche eines SoC wie z. B. RAM, EEPROM, Flash oder auch einzelner Schaltungsteile bis hin zum kompletten SoC (nur in einem FPGA o. Ä.). Meist hängen weitere externe Bausteine als „Kette“ an derselben JTAG-Schnittstelle, welche über einen sogenannten Boundary-Scan angesprochen werden.
Um den eigentlichen Hauptprozessor des SoC zu entlasten, sind je nach Anwendung auch Spezialprozessoren enthalten. Dies können beispielsweise Prozessoren zur digitalen Signalverarbeitung sein (DSPs) oder beispielsweise Ver-/Entschlüsselungseinheiten oder sonstige Hardwarebeschleuniger wie Physikbeschleuniger. Hierzu können einzelne Berechnungen oder auch nur Teile davon „ausgelagert“ werden. Diese werden entweder komplett vom Coprozessor übernommen oder der Hauptprozessor reicht nur einzelne, besonders rechenintensive Befehle weiter. Diese werden dann unter Umständen nicht mehr als Software auf einer General Purpose CPU oder DSP ausgeführt, sondern direkt in Hardware implementiert. Dies ist zumindest in FPGAs und ASICs gängige Praxis und wird daher auch dementsprechend direkt von den EDA-Werkzeugen unterstützt. Viele moderne FPGAs wie Virtex4/5 oder StratixII/III enthalten auch sogenannte DSP-Makros, womit sehr schnell in vielen parallelen Pfaden sogenannte MAC-Befehle ausgeführt werden können.
Speicher
Ebenfalls sehr wichtig in einem SoC ist Speicher. Dieser dient entweder zur Ablage und Ausführung des Programmes (Programmspeicher) oder zur Ablage und Bearbeitung von Daten (Datenspeicher). Handelt es sich bei dem Speicher um einen Cache so ist dieser oft in zwei getrennten Speichern als Harvardarchitektur ausgeführt. Normaler RAM wird hingegen gewöhnlich in einer Von-Neumann-Architektur implementiert. Speichertechnisch handelt es sich intern meist um schnellen SRAM, bei externem Speicher welcher über einen Speichercontroller angebunden wird meist um langsameren aber günstigeren DRAM oder um Flash.
System on a Programmable Chip
In zunehmender Zahl werden SoCs auf programmierbaren Chips implementiert. Hierbei handelt es sich in der Regel um FPGAs. Hierbei kommen als Prozessor entweder sogenannte HardCores (als Makro im Silizium vorhandene CPU-Kerne) oder sogenannte SoftCores (aus Quellcode synthetisierbare CPU-Kerne) zum Einsatz. Als HardCore gibt es beispielsweise PowerPC- oder ARM-Kerne, als SoftCores meist Herstellerspezifische Prozessoren wie den MicroBlaze von Xilinx oder den NIOSII von Altera. Es existieren aber auch plattformunabhängig synthetisierbare Kerne von ARM, Lattice und anderen, welche entweder kommerziell als IP vertrieben werden oder als Opensource zur Verfügung stehen. Nicht zu verwechseln ist dies jedoch mit Lösungen wie den PSoCs von Cypress oder anderen Firmen, bei welchen nur ein klassischer Mikrokontroller programmierbar ist, nicht jedoch dessen ALU und das ganze System mit Bussen, Speicher und weiterer Peripherie.
Die üblichen Komponenten eines SoCs sind:
- Prozessor
- Grafikkern
- Audiokern
- Speicher
- Interne Einheiten
- Zeitgeber
- Zähler
- Interruptcontroller
- Watchdog-Timer
- Debug-Schnittstellen, z. B. JTAG
- Spezielle Recheneinheiten, wie z. B. in DSP-SoCs
- Kryptographie
- Peripherie-Einheiten und -Schnittstellen
- Tastaturcontroller, z. B. für Matrix-Tastaturen, serielle Tastaturen oder Touchpads
- Grafikschnittstellen, z. B. für LVDS, LCD, VGA, DVI, MPEG, HD/SDMI
- Serielle Schnittstellen, z. B. USB, RS232, CAN-Bus
- Parallele Schnittstellen, z. B. nach Centronics, Port-IO
- Pulsweitenmodulation, z. B. für DC-DC-Wandler oder Motorsteuerung
- Modulatoren, z. B. für GSM-Codierung, QAM, PSK
- Weitere Schnittstellen, z. B. Ethernet, MAC oder USB
- Analog-Digital Wandler
Hersteller
Am Markt finden sich zahlreiche Angebote für System on a Chip Halbleiter. Wichtige Anbieter hierfür sind: (alphabetisch sortiert, nicht nach Größe)
- ARM und Intel mit der ARM-Architektur bzw. der Weiterentwicklung XScale
- Altera, Lattice und Xilinx mit diversen SoC-Plattformen in FPGAs
- Broadcom mit diversen Kommunikationschips
- Cypress Semiconductor Corporation für PSoC programmierbare System on Chip
- Infineon und NXP mit SoC-ICs für mobile Endgeräte wie Handys oder auch xDSL-Modems
- LSI Logic mit Chips für Netzwerk und Speicherprodukte
- MagicEyes[2] mit diversen ARM Derivaten, unter anderem für den GP2X
- MIPS und Lizenznehmer wie etwa AMD mit der AU1000 Serie
- Motorola/Freescale und IBM mit diversen PowerPC-Derivaten
- STMicroelectronics
- Texas Instruments mit OMAP, DSPs und RF-Modulen (z. B. ZigBee Modul µTiny)
Weitere Anbieter finden sich unter [1]
Literatur
- Bashir M. Al-Hashimi: System-on-Chip: Next Generation Electronics. Institution of Engineering and Technology, 2006, ISBN 0863415520.
- F. Kesel und R. Bartholomä: Entwurf von digitalen Schaltungen und Systemen mit HDLs und FPGAs. Oldenbourg, 2006, ISBN 978-3486575569. – Erklärt den Entwurf digitaler Schaltungen und SoCs auf FPGA-Basis – VHDL-Beispiel ist ein kleiner Mikrocontroller. Ausblick zu SystemC enthalten (Hinweis: Ist kein VHDL-Einsteiger-Lehrbuch!)
- Steve Furber: ARM Rechnerarchitekturen für System-on-Chip-Design. Mitp-Verlag, 2002, ISBN 978-3826608544.
Weblinks
Einzelnachweise
Wikimedia Foundation.