embedded architectures am Beispiel AVR - Weblearn
Transcrição
embedded architectures am Beispiel AVR - Weblearn
Eingebettete Systeme am Beispiel Atmel AVR/AVR32 Schriftliche Ausarbeitung Hochschule Bremen - University of Applied Sciences Bremen Fachbereich: Elektrotechnik und Informatik Studiengang Technische Informatik Fachrichtung: Angewandte Informatik Rechnerstrukturen Labor Prof. Dr. Thomas Risse Wintersemester 2007/2008 Semesterverband: I7I vorgelegt von: Florian Haskamp (Matrikelnr. 151199) Thorsten Katzor (Matrikelnr. 147487) Bremen, 11. März 2008 Inhaltsverzeichnis Abbildungsverzeichnis Inhaltsverzeichnis 1 Einführung 4 1.1 Einsatzgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Mikrocontroller 2.1 2.2 2.3 2.4 8 Atmel AVR (8 Bit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.1 Kernarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.2 Befehlssatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.3 AVR Mikrocontroller Familie . . . . . . . . . . . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.1 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.2 Eignung für eingebettete Systeme . . . . . . . . . . . . . . . . . . . . . 18 Atmel AVR32 (32 Bit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.1 Befehlssatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.2 Mikroarchitekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.3 Priorisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.4 Java Erweiterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.5 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3.6 MMU / MPU Atmel ATtiny13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Atmel AT32AP7000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.4.1 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.4.2 Eignung für eingebettete Systeme . . . . . . . . . . . . . . . . . . . . . 29 3 Software 32 3.1 Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2 ISP und JTAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3 Betriebssysteme 34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abbildungsverzeichnis 1 AVR Architektur [avr8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 ADD (AVR RISC) [avr8is] Beispiel: 32-Bit-Befehl JMP (AVR RISC) [avr8is] . . . . . . . . . . . . . . . . 14 4 AVR Mikrocontroller Familie [avr8] . . . . . . . . . . . . . . . . . . . . . . . . 15 5 Architektur ATtiny13 [avr8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 6 ADD Befehl: kompakt [avr32] . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2 Beispiel: 16-Bit-Befehl 2 . . . . . . . . . . . . . . . . 14 Abbildungsverzeichnis Abbildungsverzeichnis 7 ADD Befehl: erweitert [avr32] . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 8 Java Erweiterung Software / Hardware [avr32jvm] . . . . . . . . . . . . . . . . 23 9 Java Ausführung [avr32jvm] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 10 AT32AP7000 Pipeline [avr32ap] . . . . . . . . . . . . . . . . . . . . . . . . . . 25 11 AT32AP7000 Übersicht [embnews] . . . . . . . . . . . . . . . . . . . . . . . . 28 12 Umfrage embedded.com [embos] 35 . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 EINFÜHRUNG 1 Einführung In den letzen Jahrzehnten zeichnete sich ein deutlicher Trend bei der Entwicklung von Rechnersystemen ab, der sich auch in naher Zukunft so fortsetzen wird; der Trend der Miniaturisierung. In den 80er Jahren arbeitete man noch mit groÿen Mainframe-Rechnern, um Daten elektronisch zu verarbeiten, während in den 90er Jahren diese Rechner durch den PC (Personal Computer) abgelöst wurden. Das letzte Jahrzehnt wurde und wird vor allem durch mobile Endgeräte wie Notebooks, Subnotebooks und PDAs geprägt, man spricht dabei auch von der Post-PC Era. Teilweise schon heute aber auch in der Zukunft werden kleinere Rechnersysteme entwickelt, die in gröÿere Produkte integriert werden, Beispiele hierfür sind Mobiltelefone, Digitalkameras uvm. Dieser Trend wird auch als verschwindende Computer bezeichnet, damit wird ausgedrückt, dass Rechnersysteme nicht mehr direkt sichtbar, sondern eher im verborgenen - also für den Nutzer nicht sichtbar - arbeiten. Peter Marwedel beschreibt dazu in seinem Buch Eingebettete Systeme [esmar] drei Begrie, welche die Schwerpunkte zukünftiger Informationsverarbeitung charakterisieren: • ubiquitous computing (dtsch.: Rechnerallgegenwart): Informationen werden überall und jederzeit zur Verfügung gestellt. • pervasive computing (dtsch.: Rechnerdurchdringung): Durchdringende Vernetzung des Alltags durch den Einsatz von intelligenten Geräten. • ambient intelligence (dtsch.: Umgebungsintelligenz): Kommunikationstechnologie im Wohnbereich, intelligente Gebäudetechnik Grundlage für diese Charaktereigenschaften sind eingebettete Systeme. Als eingebettetes System versteht man intelligente informationsverarbeitende Systeme, die in eine gröÿere technische Umgebung integriert (eingebettet) sind, wobei diese Datenverarbeitungen normalerweise nicht direkt vom Benutzer wahrgenommen werden (vgl.[esmar]). Eingebettete Systeme werden häug nur für einen bestimmten Zweck entwickelt und arbeiten meistens autonom. Im folgendem Abschnitt soll ein kurzer Überblick über die Einsatzgebiete von eingebetteten Systemen gegeben werden. 1.1 Einsatzgebiete Eingebettete Systeme sind heute in sämtlichen Bereichen des alltäglichen Lebens vorhanden. Die folgende Auistung mit exemplarischen Beispielen (vgl. [esmar] Seite 5) soll einen kurzen Einblick in die vielen unterschiedlichen Einsatzgebiete dieser Systeme geben: 4 1.1 Einsatzgebiete • 1 EINFÜHRUNG Automobilindustrie Gerade im Bereich der Automobilindustrie zeichnet sich der Trend ab, immer mehr Elektronikkomponenten einzusetzen. 1995 wurden in einem Audi A6 genau sechs eingebettete Systeme verbaut, heutzutage sind es schon 70 mit steigender Tendenz (vgl. [cz]). Als Beispiele gelten für diesen Bereich: ABS (Antiblockiersystem), adaptives Kurvenlicht, ESP (Elektronisches Stabilitätsprogramm), elektronisches Einspritzsystem, Navigationssystem, Infotainment, Tempomat, etc. • Bordelektronik im Flugzeug Auch bei Flugzeugen werden viele intelligente informationsverarbeitende Systeme verwendet, die einen groÿen Anteil am Gesamtwert eines Flugzeugs ausmachen. Beispiele hierfür sind Autopilot-, Flugkontroll-, Anti-Kollisions- und Piloteninformationssysteme. • Eisenbahntechnik Im Bereich der Eisenbahntechnik nden eingebettete Systeme bei Zügen, Lokomotiven und stationären Sicherheitssystem Verwendung. Auch hier bildet der Anteil an Elektronik einen beachtlichen Teil am Gesamtwert. • Telekommunikation Die Herstellung von Mobiltelefonen hat in den letzten Jahren ein enormes Wachstum erlebt, die Funktionalität nimmt ständig zu, während die Geräte dabei immer kompakter werden. Multimedia-Applikationen, Büro-Anwendungen, alles gehört bereits heute zum Funktionsumfang eines Mobiltelefons. Bei dieser Art von Einsatzgebiet spielen vor allem die schnelle Verarbeitung von Daten, ein geringer Stromverbrauch sowie die Gröÿe der Systeme eine wichtige Rolle. • Medizinische Systeme In der Medizintechnik verwendet man eingebettete Systeme bspw. für Überwachungssysteme (Monitoring), elektronische Gasdosierung, Glukosetester, Infusionspumpen, Respiratoren, Inkubatoren, EEG (Elektroenzephalograe), EKG (Elektrokardiogramm). • Unterhaltungselektronik Ein Bereich, in dem viele Nutzer gar nicht bemerken, dass sie es mit intelligenten Systemen zu tun haben, ist der Bereich der Unterhaltungselektronik. In diesen Bereich fallen Digitalkameras, MP3-Player, DVB-T-Receiver, CD/DVD Systeme, etc. • weitere Einsatzgebiete lassen sich im Bereich der Automatisierungstechnik, der Robotik, bei militärischen Anwendungen, in Authentizierungs-Systemen oder intelligenten Gebäuden nden. 5 1.2 Anforderungen 1 EINFÜHRUNG 1.2 Anforderungen Aus den im vorhergehenden Kapitel genannten Einsatzgebieten wird deutlich, dass eingebettete Systeme speziellen Anforderungen gerecht werden müssen. Diese Systeme bestehen oft aus Sensoren und Aktoren; Sensoren sammeln Informationen über die Umgebung und Aktoren nehmen aktiv Einuÿ auf die Umwelt. Da solche Systeme häug direkt mit Ihrer Umgebung verbunden sind und unmittelbaren Einuÿ auf diese ausüben, müssen sie verlässlich sein. Beispiele für die- se Beeinussung nden wir in Transportmitteln wie Autos, Zügen, Flugzeugen usw. Teilweise müssen eingebettete Systeme auch sicherheitskritischen Anforderungen gerecht werden, wenn wir uns die Steuerung eines Atomkraftwerkes vor Augen führen (vgl. [esmar] Seite 95) Verlässlichkeit Ein eingebettetes System muss verlässlich sein. Diese Anforderung wird durch folgende Charaktereigenschaften näher speziziert (vgl. [baswt]): • Zuverlässigkeit Die Zuverlässigkeit beschreibt hierbei, inwieweit das System fähig ist, sein Leistungsniveau unter festgelegten Bedingungen in einem festen Zeitraum zu bewahren. Reife Wie oft versagt das System aufgrund von Fehlern? Fehlertoleranz Wie verhält sich das System gegenüber der Nicht-Einhaltung der spezizierten Schnittstellen? • Wartbarkeit/Wiederherstellbarkeit Wartbarkeit gibt an, wie groÿ der Aufwand ist, in einer bestimmten Zeitspanne das Leistungsniveau nach Versagen wiederherzustellen. • Verfügbarkeit Verfügbarkeit macht Aussagen über die Wahrscheinlichkeit, dass das System bestimmte Anforderungen in einem festgelegten Zeitintervall erfüllt. Demnach berechnet sich die Verfügbarkeit etwa nach folgender Formel: Verfügbarkeit = Gesamtzeit−Gesamtausfallzeit Gesamtzeit Zuverlässigkeit und Wartbarkeit müssen entsprechend hoch sein, um eine hohe Verfügbarkeit zu erreichen. 6 1.2 Anforderungen • 1 EINFÜHRUNG Sicherheit Sicherheit macht Aussagen über die Wahrscheinlichkeit, dass ein ausfallendes System Schaden anrichten kann. • Integrität Integrität beschreibt, inwiefern das System die Fähigkeit besitzt, Daten vor Manipulation zu schützen, vertrauliche Daten geheim zu halten und die Authentizität der Kommunikation zu gewährleisten. Ezienz Ein eingebettetes System muss ezient sein, d.h. das Verhältnis zwischen dem Leistungsniveau und den eingesetzten Mitteln sollte möglichst hoch sein. Dabei sind folgende fünf Aspekte zu unterscheiden (vgl. [esmar] Seite 158): 1. Energie Eingebettete Systeme sind oft in tragbare Geräte integriert und beziehen somit Ihre Energie aus Batterien bzw. Akkumulatoren. Die Kapazitäten dieser Energieträger sind begrenzt, zudem beanspruchen die zahlreichen Mulitmedia-Anwendungen immer höhere Rechenleistung. Die vorhandene elektrische Energie muss daher ezient eingesetzt werden, um dem Kunden möglichst lange Betriebsdauern zu gewährleisten. 2. Codegröÿe Bei eingebetteten Systemen muss der auszuführende Code innerhalb des Systems gespeichert werden können, da es bei solchen Systemen i.A. keine Festplatten gibt. Der Code muss so klein wie möglich sein, während die Funktionalität erhalten bleiben muss. Will man beispielsweise auf einem System On a Chip (SoC), bei dem alle informationsverarbei- tenden Komponenten auf einem Chip vorhanden sind, einen Befehlsspeicher integrieren, so muss dieser sehr ezient genutzt werden. 3. Laufzeit-Ezienz Bei dieser Eigenschaft geht es darum, möglichst ressourcenschonend vorzugehen. Die Funktionalität und das Einhalten von Zeitbedingungen sollten mit minimalem Einsatz von Hardware- und Energie-Ressourcen sichergestellt sein. Desweiteren sollten nur Komponenten integriert werden, welche die sog. worst case execution time (kurz: WCET) wirklich verbessern. Dies ist insbesondere bei Echzeitsystemen von Bedeutung, da es hierbei auf die rechtzeitige Lieferung von korrekten Ergebnissen zu bestimmten Zeitpunkten ankommt. Die WCET der eingesetzten Komponenten darf also nie gröÿer sein, als es die zeitlichen Vorgaben erlauben. 4. Gewicht 7 2 MIKROCONTROLLER Eingebettete System sind oft in mobilen Endgeräten integriert. Aus diesem Grund ist es wichtig, ein möglichst geringes Gewicht zu erzielen, damit der Kaufanreiz erhalten bleibt. 5. Preis Ebenso wie das Gewicht spielt der Preis eine wichtige Rolle. Um wettbewerbsfähig zu bleiben, müssen Hard- und Software kostenezient produziert und genutzt werden. Echtzeitanforderungen Viele eingebettete Systeme müssen Echzeit-Bedingungen erfüllen, bei denen Berechnungen innerhalb bestimmter Zeitspannen erfolgt sein müssen. Schon bei geringen Unregelmäÿigkeiten bei der Einhaltung dieser Vorgaben, kann es z.B. bei Audio/VideoAnwendungen zu Qualitätsverlusten kommen. Es kann sogar zu körperlichen Schäden der Benutzer kommen, wenn z.B. Systeme im Auto oder in Zügen nicht korrekt arbeiten/reagieren. Man unterscheidet hierbei zwei Formen von Zeitbedingungen: Zum Einen harte Zeitbedingungen, deren Nicht-Einhaltung katastrophale Folgen haben kann, und zum Anderen weiche Zeitbedingungen, die alle anderen Bedingungen umfassen. Während in normalen informationsverarbeitenden Systemen Techniken eingesetzt werden, um die Geschwindigkeit zu erhöhen (Caches) bzw. die Zuverlässigkeit der Kommunikation zu verbessern (Protokolle mit wiederholten Sendevorgängen) und dabei Verzögerungen in Kauf genommen werden, funktioniert dies bei Echzeitsystemen nicht. Diese Systeme müssen immer eine vorgegebene Antwortzeit garantieren. 2 Mikrocontroller Die Herzstücke von eingebetteten Systemen sind sog. Mikrocontroller. Mikrocontroller werden in der Literatur häug auch als nur als µC micro controller unit (MCU), als µController oder auch einfach bezeichnet. Sie sind deniert als leistungsfähige, programmierbare Rechnersysteme auf einem Chip. Dabei gibt es oft den Fall, dass auf diesem Chip zusätzlich alle nötigen Funktionseinheiten wie z.B. Speicher, A/D-Wandler, Timer, I/O-Schnittstellen, etc. integriert sind, man spricht dann von einem system on a chip (SoC). Mikrocontroller gibt es in den verschie- densten Variationen mit mehr oder weniger Speicher, in kleiner oder gröÿerer Form. Auf dem Markt gibt es zahlreiche Hersteller, von denen die Marktführer hier aufgelistet sind: • Atmel • ARM • Texas Instruments 8 2.1 Atmel AVR (8 Bit) • IBM • Intel • Hitachi 2 MIKROCONTROLLER Für diese Ausarbeitung wurden zwei Mikrocontroller des Unternehmens Atmel ausgewählt, die als Beispiel für diese Technologie dienen sollen und im Weiteren näher erläutert werden. Das Unternehmen wurde 1984 gegründet und ist, wie in der obigen Liste aufgezeigt, eines der führenden Unternehmen in diesem Bereich weltweit. Die 8-Bit-Variante der Mikrocontroller wurde ausgewählt, da sie im Hobby-Bereich besonders 1 beliebt und verbreitet sind: Sie sind meist in DIL -Gehäusen verfügbar, können per In-SystemProgramming (dazu später mehr) programmiert werden, und es existieren eine Vielzahl von kostenlosen Programmen zur Softwareentwicklung (Assembler, Compiler). Die 32-Bit-Variante als Stellvertreter für leistungsfähigere Mikrocontroller wurde für eine bessere Vergleichbarkeit aus dem gleichen Hause gewählt. 2.1 Atmel AVR (8 Bit) 2.1.1 Kernarchitektur Atmels AVR Architektur ist eine 8-Bit-Kernarchitektur. Der Kern dieser MikrocontrollerStruktur ndet sich bei allen Mikroprozessoren dieser Architektur-Familie wieder. Die Unterschiede der einzelnen Prozessoren bestehen lediglich in der Gröÿe des Speichers und der Anzahl an I/O-Modulen. Der Befehlssatz dieser Architektur wird von Atmel als Advanced RISC Architektur bezeichnet - inwieweit die Bezeichnung RISC als zutreend gilt, wird im Abschnitt 2.1.2 näher erläutert. Abb. 1 zeigt die AVR Kernarchitektur. Sie deniert folgende Merkmale: 1 • 8-Bit Architektur • 32 8-Bit Allzweck-Register Das Dual in-line package (Akronym DIP, auch Dual In-Line, kurz DIL) ist eine längliche Gehäuseform (Package) für elektronische Bauelemente, bei der sich zwei Reihen von Anschlussstiften (Pins) zur Durchsteckmontage an gegenüberliegenden Seiten des Gehäuses benden. [wikipedia] 9 2.1 Atmel AVR (8 Bit) 2 MIKROCONTROLLER • Harvard-Architektur • Abarbeitung eines Befehls pro Taktzyklus (meistens) Abbildung 1: AVR Architektur [avr8] Die hohe Anzahl an Allzweck-Registern ist in diesem Segment der Mikroarchitekturen eher unüblich, daher ist es ein besonderes Merkmal dieser Architektur. Bei der Architektur wurde das Harvard-Schaltungskonzept verwendet. Dies bedeutet, dass Programm und Datenspeicher physikalisch getrennt von einander implementiert sind und dabei über getrennte Busse angesteuert werden. Durch diese Form ergeben sich Vorteile: Eine schnellere Befehlsabarbeitung durch gleichzeitiges Laden von Daten und Befehlen, bei Softwarefehlern kann der Programmcode nicht überschrieben werden und es sind unterschiedliche Daten- und Befehlswortbreiten möglich. Ein Nachtteil dieser Bauweise ist allerdings, dass unbenötigter Datenspeicher nicht als zusätzlicher Befehlsspeicher genutzt werden kann. In Abb. 1 wird diese Architektur durch die getrennten Blöcke Flash Program Memory (Befehlspeicher, 16-Bit Organisation) und Data SRAM (Da- tenspeicher, 8-Bit Organisation) deutlich. Die AVR Architektur verfügt dabei über eine ALU 10 2.1 Atmel AVR (8 Bit) 2 MIKROCONTROLLER für die Verarbeitung arithmetisch-logischer Operationen mit zwei Operanden. Desweiteren ist diese Bauart mit folgenden Komponenten ausgestattet: • Für die Verarbeitung von Unterbrechungen (Interrupts und Exceptions) gibt es eine terrupt Unit. • Zur Steuerung von zeitlichen Abläufen gibt es einen Watchdog Timer. In- Dieser Timer besitzt einen eigenem Taktgeber. Überschreitet der Timer ein bestimmtes Zeitfenster, ohne dass er vom laufenden Programm zurückgesetzt worden ist, wird ein Interrupt bzw. ein System-Neustart ausgelöst. • Es gibt einen Analog Comparator zum Vergleich von analogen Signalen. Ein weiteres besonderes Merkmal dieser Kernarchitektur sind drei besondere Register, die als X-, Y- und Z-Register bezeichnet werden (siehe Abb. 5). Es handelt sich dabei um die sechs letzten Byteregister der insgesamt 32 8-Bit-Allzweckregister. Diese Register können paarweise als drei 16-Bit indirekt addressierte Zeiger für die Datenspeicher Adressierung verwendet werden, um eziente Adressberechnungen zu ermöglichen. Einer dieser Adresszeiger kann ebenso als Zeiger für Look Up Tables (LUT) im Flash-Programmspeicher genutzt werden. 2.1.2 Befehlssatz Laut Atmel handelt es sich bei der AVR Mikrocontroller-Familie um eine sog. RISC ( instruction set computing ) reduced Architektur. Unter einer RISC-Architektur versteht man folgende Eigenschaften des Befehlssatzes: • Weniger komplexe Befehle Durch weniger komplexe Befehle wird auf der einen Seite das Chipdesign vereinfacht (weniger Transistoren) und auf der anderen Seite muss weniger Aufwand zum Dekodieren des Befehls betrieben werden. • Befehle bei RISC-Prozessoren sind fest verdrahtet Alle Operationen werden durch Leiterbahnen auf dem Chip repräsentiert. Es gibt also keine • µProgramm-Steuerung, wie z.B. bei CISC-Prozessoren. LOAD/STORE-Architektur Nur LOAD- und STORE-Befehle greifen auf den Speicher zu. • Hohe Anzahl an Allzweck-Registern 11 2.1 Atmel AVR (8 Bit) • 2 MIKROCONTROLLER Homogener Befehlssatz, d.h. wenige Befehlsformate Es gibt nur wenige Befehle, die in der Regel gleich breit sind und wenig Befehlsformate aufweisen. Nachfolgend sind die tatsächlichen Merkmale des 8-Bit-AVR-Befehlssatzes dargestellt: Load/Store-Architektur So wie kurz zuvor beschrieben kommt auch hier eine LOAD/STORE-Architektur zum Einsatz, bei der nur über LOAD/STORE-Befehle auf den Speicher zugegrien wird. Adressierungsarten Insgesamt sind bei dieser Architektur 13 verschiedene Arten der Adres- sierung möglich: 1. Direct Single Register Addressing Ein Operand bendet sich in einem Register des Registersatzes. 2. Direct Register Addressing Zwei Operanden benden sich in Registern des Registersatzes. 3. I/O Direct Addressing Die sechs unteren Bits des Befehls werden zur externen Speicheraddressierung verwendet. 4. Direct Data Addressing (2-Wort-Befehl, 1 Wort = 16 Bits) Die 16-Bit-Adresse zur Datenadressierung bendet sich in den unteren 16-Bits des 2Wort-Befehls. 5. Data Indirect with Displacement Die Datenspeicheradresse wird aus der Summe des Y- oder Z-Register mit den unteren 6 Bits des Befehls gebildet. 6. Data Indirect Die Adresse des Operanden (im Datenspeicher) bendet sich in einem der speziellen X-, Y- oder Z-Register. 7. Data Indirect Addressing with Pre-decrement Der Inhalt von dem X-,Y- oder Z-Register wird um 1 verringert. Der veringerte Inhalt bildet die Adresse des Operanden (im Datenspeicher). 8. Data Indirect Addressing with Post-increment 12 2.1 Atmel AVR (8 Bit) 2 MIKROCONTROLLER Der Inhalt von dem X-, Y- oder Z-Register bildet die Adresse des Operanden (im Datenspeicher). Nach der Operation wird dessen Inhalt um eins erhöht. 9. Program Memory Constant Addressing Der Inhalt des Z-Registers bildet die konstante Byteadresse. Die oberen 15-Bits des Befehls beschreiben die Wort-Adresse, während das LSB entscheidet, ob die oberen oder unteren 16 Bits des Programmspeichers angesprochen werden. 10. Programm Memory Addressing with Post-increment Der Inhalt des Z-Registers bildet die konstante Byteadresse. Die oberen 15-Bits des Befehls beschreiben die Wort-Adresse, während das LSB entscheidet, ob die oberen oder unteren 16 Bits des Programmspeichers angesprochen werden. Nach der Operation wird der Inhalt des Registers um eins erhöht. 11. Direct Program Memory Addressing (32-Bit) Die Programmausführung beginnt ab der Adresse, die sich direkt aus 22-Bits des Befehls ergeben (6 MSB, 16 LSB). 12. Indirect Program Memory Addressing Die Programmausführung beginnt ab der Adresse, die aus dem Inhalt des Z-Registers gebildet wird. 13. Relative Programm Memory Addressing Die Programmausführung beginnt ab der Adresse, die aus der Summe des aktuellen und um eins erhöhten Programmzählers und einer 12-Bit-Konstanten (vorzeichenbehaftet) aus dem Befehl gebildet wird. Diese hohe Anzahl an Adressierungsarten widerspricht den eigentlichen RISC-Eigenschaften, siehe auch die Hinweise auf Seite 14. Befehlsbreite Durch die implementierte Harvard-Architektur (siehe Abschnitt 2.1.1) ist es möglich, dass sich die Befehlswortbreite von der Datenwortbreite unterscheidet. Bei diesem Befehlssatz ist ein Befehlswort 16-Bit breit, für spezielle Befehle zur direkten Daten- oder Programmadressierung ist ein 2-Wort-Befehl vorgesehen (32-Bit). Beispiele hierfür sind: 1. Additionsbefehl (16-Bit-Befehl) Die Inhalte der Register Rd und Rr werden addiert und in das Register Rd geschrieben. Danach wird der Programmzähler um eins erhöht. 13 2.1 Atmel AVR (8 Bit) 2 MIKROCONTROLLER Abbildung 2: Beispiel: 16-Bit-Befehl 2. Sprungbefehl ADD (AVR RISC) [avr8is] (32-Bit-Befehl) Die Programmausführung beginnt bei der Adresse, die aus der 22-Bit-Konstante gebildet wird. Abbildung 3: Beispiel: 32-Bit-Befehl JMP (AVR RISC) [avr8is] In Abb. 2 und 3 ist deutlich zu erkennen, dass eine gewisse Inhomogenität bei den OperationCodes der Befehle existiert; sie haben weder eine feste Breite noch eine einheitliche Anordnung. Ob es sich bei dieser Implementierung tatsächlich um eine RISC-Architektur handelt, ist fragwürdig. Die hohe Anzahl an Allzweck-Registern und die LOAD/STORE-Architektur sprechen dafür, die Inhomogenität des Befehlsaufbaus und die hohe Anzahl an unterschiedlichen Adressierungsarten sprechen eher dagegen. 2.1.3 AVR Mikrocontroller Familie Abb. 4 zeigt den Aufbau der AVR Mikrokontroller - wie bereits erwähnt, ist die Kernarchitektur in allen AVR Controllern wieder zu nden. Es gibt zwei unterschiedliche Gruppen TINY und MEGA, die sich in Gröÿe und Eigenschaften unterscheiden. TINY ist dabei die Gruppe mit den Mikroprozessoren für den Low-End-Bereich, sie verfügen über wenig Speicher, sind dafür aber klein und günstig. MEGA-Controller haben dagegen wesentlich mehr Funktionen durch integrierte I/O-Schnittstellen oder andere Module und verfügen darüberhinaus über einen gröÿeren Speicher. 14 2.1 Atmel AVR (8 Bit) 2 MIKROCONTROLLER Abbildung 4: AVR Mikrocontroller Familie [avr8] ATtiny - Eigenschaften im Überblick ATmega - Eigenschaften im Überblick • Speicher: 1-8 KB Flash Speicher • Speicher: 4-256 KB Flash Speicher • Anzahl I/O-Pins: 6-18 • Anzahl I/O-Pins: bis zu 100 • Gröÿe: 7,7mm x 5,13mm • Gröÿe: 15,75mm x 15,75mm (≈1/6 Eurocent) • (≈1 Eurocent) • Preis: 1,20 Euro (ATTINY 13V-10SU) Preis: 14,30 Euro (ATMEGA 2561V8AU) Spezialisierte AVR Mikrocontroller Atmel hat in seinem Produktportfolio viele Mikrocon- troller, die für bestimmte Einsatzzwecke entwickelt worden sind. Im Folgenden sind diese mit ihren Eigenschaften aufgelistet: • Automotive AVR 2 Spezielle Controller mit CAN - und LIN 3 -Schnittstellen, speziell für die Autmobilindustrie daher mit besonderen Qualitätsmerkmalen wie z.B. erlaubten Betriebstemperaturen bis ◦ +150 C. • AVR Z-Link Unterstützung des ZigBee Standards (oener Funkstandard nach IEEE 802.15.4) CAN Controller Area Network - Asynchrones, serielles Feldbussystem entwickelt zur Verringerung der Kabelbäume in Automobilen 3 LIN Local Interconnect Network - Feldbussystem entwickelt zur kostengünstigen Kommunikation von intelligenten Sensoren und Aktuatoren im KfZ-Bereich 2 15 2.2 Atmel ATtiny13 • 2 MIKROCONTROLLER CAN AVR AVR Controller mit CAN-Schnittstelle • LCD AVR Spezielle Schnittstelle zur Ansteuerung von Monochrome-LCDs. • LIGHTNING AVR Spezielle Eigenschaften zur Ansteuerung von Blitzlicht (für Digitalkamera, o.Ä.) • Smart Battery AVR Besonders stromsparend zur Erhaltung einer langen Batterielebensdauer. 2.2 Atmel ATtiny13 Als Beispiel für einen Mikrocontroller, der in eingebetteten Systemen Verwendung ndet, dient der ATtiny13 der AVR-Familie. Dieser µController wurde ausgewählt, da er im Gegensatz zu dem nachfolgend erwähnten AT32AP7000 eher im Low-End-Bereich angesiedelt ist. Low-End bezieht sich hierbei zum einen auf die Kosten, denn ein solcher Chip ist im Handel schon ab ca. 1,20 Euro zu haben, zum anderen bezieht es sich aber auch auf den sehr geringen Stromverbrauch des Controllers. Die Namensbezeichnung tiny trägt er zurecht, denn seine Ausmaÿe sind in etwa so groÿ wie 1 6 der 1-Eurocent-Münze. Folgende Eigenschaften zeichnen diesen Controller aus: • 6 programmierbare I/O-Lines • Bis zu 20 MHz (20 MIPS) • Geringer Stromverbrauch • 1kB programmierbarer Flash Programmspeicher • 64 Bytes EEPROM • 64 kB SRAM Es handelt sich bei diesem Mikrocontroller um ein System on a Chip, da alle nötigen Komponen- ten, wie z.B. Speicher und Taktgeber, auf einem Chip vereint sind. Über die sechs programmierbaren I/O-Lines können Signale eingelesen bzw. ausgegeben werden. Sofern in der Befehlsfolge ausschlieÿlich Befehle vorkommen, die innerhalb eines Taktzyklusses abgearbeitet werden können, schat der Controller bei 20 MHz Taktfrequenz 20 MIPS. Als Befehlspeicher dient der 16 2.2 Atmel ATtiny13 2 MIKROCONTROLLER 1 kB groÿe, programmierbare Flash Speicher, der sowohl über die von extern, als auch intern von der µController debugWIRE 4 -Schnittstelle Unit, programmiert werden kann. Zusätzlich zu dem 64 kB groÿen 8-Bit-Datenspeicher verfügt der Mikrocontroller über 64 Bytes EEPROM Speicher, der als Datenspeicher organisiert ist, in welchem einzelne Bytes gespeichert werden können. 2.2.1 Architektur Abbildung 5: Architektur ATtiny13 [avr8] 4 Auf dem Chip bendliches Debug-System, das die Steuerung des Programmusses, die Ausführung von AVRBefehlen und die Programmierung der nicht-üchtigen Speicherbausteine ermöglicht 17 2.2 Atmel ATtiny13 Wie in Abb. 5 ersichtlich, stammt dieser 2 MIKROCONTROLLER µController aus der AVR Familie. Im linken Teil der durch den 8-Bit-Datenbus getrennten Grak, bendet sich hauptsächlich die bereits beschriebene AVR-Kernarchitektur mit den getrennten Befehls- und Datenspeichern, dem 32x8-Bit Registersatz inkl. der X-,Y- und Z-Register und der ALU zur Durchführung von arithmethischlogischen Operationen. Auf der rechten Seite bendet sich die weitere Peripherie, die diesen Controller zu einem SoC werden lässt. Zu diesen Komponenten zählen u. A. der eigene Taktgeber, ein separater Timer sowie eine Einheit zu Verarbeitung von internen und externen Interrupts. Im unteren Bereich bendet sich der bi-direktionale Port B mit der Ansteuerung für die Data Register Port B, das den aktuellen Status der I/O-Pins wieder gibt und das Data Direction Register Port B, in dem sechs I/O-Lines. Port B verfügt über zwei bereitgestellte Register festgelegt werden kann, ob ein PIN zum Lesen oder Schreiben genutzt werden soll ([avr8] Seite 43). 2.2.2 Eignung für eingebettete Systeme Der ausgewählte Mikrocontroller erfüllt einige der angesprochenen Anforderungen von eingebetteten Systemen in mehreren Hinsichten: Chipgröÿe Da der Chip sehr klein ist, kann er gut in eingebetteten Systemen eingesetzt werden, die selbst wiederum minimalen Platz beanspruchen dürfen. Kostenezienz Wie angesprochen ist dieser Chip im Verhältnis zu seiner Funktionalität sehr günstig und kann damit auch in Systemen eingesetzt werden, die sehr kostenezient sein müssen. Stromsparend Um möglichst stromsparend arbeiten zu können, unterstützt der ATtiny13 drei unterschiedliche Stromsparmodi: • Idle Mode In diesem Modus wird nur die CPU abgeschaltet, d.h. die Taktsignale für die CPU und für den Programmspeicher werden angehalten. Die CPU kann durch externe und interne Interrupts wieder aktiviert werden. • ADC Noise Reduction Im Prinzip verhält sich dieser Modus wie der vorhergehende, mit dem Unterschied, dass 18 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER nicht nur das Taktsignal für die CPU und den Flashspeicher angehalten werden, sondern darüberhinaus auch das Signal für den I/O-Port. • Power-down In diesem Modus werden alle generierten Taktsignale angehalten. Das System kann erst durch einen externen Interrupt wieder aktiviert werden. Wiederherstellbarkeit Die Wiederherstellbarkeit des Systems wird dadurch begünstigt, dass es wenig Aufwand benötigt, den Programmspeicher neu zu programmieren (zu ashen). Dafür In System Programming ) entwickelt. Diese Schnittstelle wird wurde eine sog. ISP-Schnittstelle ( im Laufe dieses Berichts noch näher erläutert. Codeezienz Dadurch, dass es im Befehlssatz 1- und 2-Wort-Instruktionen gibt, kann der Programmspeicher ezienter ausgenutzt werden, als wenn sich der Befehlssatz auf einen dieser Instruktionstypen beschränken würde. 2.3 Atmel AVR32 (32 Bit) AVR32 ist eine 32 Bit RISC Architektur und wurde für High-Perfomance Anwendungen bei gleichzeitig niedrigem Stromverbrauch und hoher Codedichte entworfen. Auÿer dem Namen hat diese Architektur nicht viel mit der 8-Bit AVR Architektur gemeinsam - sie ist nicht binärkompatibel. Tatsächlich will Atmel mit Mikrocontrollern dieser neuen (erstmalig im Jahre 2006 veröentlichten) Architektur ein Konkurrenzprodukt zu den ARM-Mikrocontrollern etablieren, die häug in PDAs (Palm, Windows Mobile) oder Netzwerkgeräten wie Routern (Linksys WRT54G oder NSLU2) zu nden sind. Die AVR32 Architektur deniert • 15x 32-bit Allzweckregister • Pipeline System • Interrupt / Ausnahmen mit Prioritäten • Optionale Sprungvorhersage • Befehlssatz mit Befehlsarten unterschiedlicher Länge 19 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER • MMU oder MPU Unterstützung • Erweiterbarkeit: Java Unterstützung, Coprozessoren ... • Mikroarchitekturen: AVR32A / AVR32B (siehe Abschnitt 2.3.2) 2.3.1 Befehlssatz Der Befehlssatz der AVR32 Architektur wird von Atmel als RISC-Befehlssatz (siehe auch Abschnitt 2.1.2 auf Seite 11) angegeben. Aber bis auf den Speicherzugri über separate Load/Sto- re -Befehle ist an diesem Befehlssatz sehr wenig reduced. Beispielsweise gibt es 67 verschiedene Load/Store -Varianten, Befehle liegen als 16- und 32-Bit Typen vor und das Befehlsformat sieht fast 60 verschiedene Möglichkeiten des Befehlsaufbaus vor. Weiterhin gibt es verschiedene spezialisierte Befehle, die dem RISC-Grundsatz widersprechen bspw. Instruktionen für die Ansteuerung eines Coprozessors oder SIMD-Instruktionen um ganze Datenpakete zu verarbeiten. Beispiel: ADD Im folgenden wird anhand der ADD-Anweisung ein Beispiel für die AVR32- Befehle gezeigt. Diese Anweisung liegt in zwei verschiedenen Varianten vor, als kompakte 16Bit-Anweisung mit zwei Operanden sowie als erweiterte 32-Bit-Anweisung mit drei (bzw. vier) Operanden. Je nach Anwendungsfall kann der Compiler sich so für eine dieser Instruktionen entscheiden, um die Codegröÿe gering zu halten. Abbildung 6: ADD Befehl: kompakt [avr32] Abbildung 6 zeigt die kompakte ADD-Variante auf den Inhalt des Registers Rd addiert. 20 ADD Rd, Rs. Der Inhalt des Registers Rs wird 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER Abbildung 7: ADD Befehl: erweitert [avr32] In Abbildung 7 ist dagegen die erweiterte 32-Bit-Variante ADD Rd, Rx, Ry << sa Diese ermöglicht das shiften (bitweise Verschieben) des Registers die darauolgende Addition der Register (kurz geschrieben: Rx und Ry Ry zu sehen. um 0 bis 3 Stellen und mit Speicherung des Ergebnisses in Rd Rd=Rx+Rysa). Aufgrund seiner Komplexität ist dieser Befehl bereits ein Beispiel für eine typische CISC-Operation! 2.3.2 Mikroarchitekturen In der AVR32 Architekturbeschreibung werden sogenannte Mikroarchitekturen beschrieben (siehe Abschnitt 1.3 Microarchitectures in [avr32]), die Teile der Implementation zusammenfassen und unterschiedliche Stufen von Performance, Chip-Gröÿe oder auch Stromverbrauch erreichen sollen. Derzeit sind die beiden Mikroarchitekturen AVR32A und AVR32B deniert, die im folgenden beschrieben werden: AVR32B Die Mikroarchitektur AVR32B ist für Anwendungen gedacht, bei denen Interrupt- Latenzzeiten eine wichtige Rolle spielen. Aus diesem Grund verfügt diese Architektur über dedizierte Register für Interrupts und Ausnahmebehandlung, die die Statusregister und RücksprungAdressen enthalten. Es müssen somit keine Stackzugrie erfolgen, was die Latenzzeiten reduziert. Weiterhin existieren für die Kontexte Interrupt 0 bis Interrupt 3 (also der Zustand des Mikrocontrollers, während eine Interrupt-Routine für einen dieser vier Interrupts abgearbeitet wird) separate Register. Diese Register sind sogenannte Shadow Register, da sie die normalen Allzweckregister überlagern. Durch Einsatz dieser zusätzlichen Register kann eine Interrupt-Routine sofort ausgeführt werden, ohne vorher die vorhandenen Allzweckregister auf dem Stack zu sichern. Ob und in welchem Maÿe ein shadowing, also ein Überlagern, stattndet, hängt von der jeweiligen Implementation ab. Im Mikrocontroller AT32AP7000 werden beispielsweise nur im 21 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER INT3 Kontext die Hälfte der Register überlagert, weitere Register müssen auch hier über den Stack gesichert werden (vgl. Abschnitt 2.3 Register le conguration in [avr32tech]). AVR32A Diese Mikroarchitektur zielt eher auf Anwendungen, bei denen ein niedriger Preis und eventuell eine geringere Chipgröÿe eine Rolle spielen. Im Gegensatz zu AVR32B sind hier keine zusätzlichen Register vorhanden, stattdessen werden die vorhandenen Registerinformationen sowie Rücksprunginformationen auf dem Stack gesichert. 2.3.3 Priorisierung Um ein deniertes Laufzeitverhalten zu erreichen, deniert die AVR32 Architektur eine Priorisierung von Ereignissen ( events ) und eine Priorisierung von Ausführungsmodi (execution contexts ). Ein Event ist beispielsweise ein ausgelöster Interrupt oder eine Ausnahme des Coprozessors etc. Ein Ausführungsmodus ist bspw. Interrupt0 für den Zustand während der Ausführung der Service-Routine für den Interrupt 0. Die Event-Priorisierung deniert das Verhalten bei gleichzeitig auftretenden Ereignissen. Dies garantiert, dass wichtigere Ereignisse Vorrang vor weniger wichtigen haben. Die Priorisierung der Ausführungsmodi dagegen legt fest, aus welchem Kontext die Ausführung unterbrochen werden kann (bspw. kann die Ausführung einer Service Routine des Interrupts 3 nicht von Interrupt 2 unterbrochen werden). Vgl. Kapitel 7 Event Processing in [avr32]. 2.3.4 Java Erweiterung Die AVR32 Architektur unterstützt optional das direkte Ausführen von Java Bytecode durch den Einsatz eines Java Erweiterungsmoduls ( Java Extension Module JEM ). Im direkten Vergleich zwischen den AVR32 RISC Befehlen und den Java Befehlen fällt auf, dass sich sehr viele der Instruktionen gleichen bzw. ähneln (bspw. iadd für Integer-Addition oder ifeq für einen bedingten Sprung). Die Grundidee ist also, dass eine separate Dekodiereinheit die Java Befehle auf die vorhandene Hardware umsetzt. Das Umschalten zwischen RISC- und JavaCode wird über ein Flag im Statusregister des Controllers gesteuert. Da die virtuelle JVM keine Register- sondern eine Stack-Maschine ist, werden die AVR32 Register im Java Modus genutzt, um einen Stack zu implementieren bzw. zu beschleunigen. Für einen schnellen Zugri werden 22 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER jeweils 8 Elemente des Operanden- und Variablen-Stacks direkt einzelnen Registern zugewiesen (vgl. Abschnitt 2.3 The RISC Register File and the Java Operand Stack in [avr32jvm]). Leider können nicht alle Befehle des Java Befehlssatzes 1:1 ohne aufwendige Hardwareerweiterungen umgesetzt werden. Aus diesem Grund werden komplexere Java Instruktionen als normale RISC Programme im Programmspeicher abgelegt. Der Java Decoder fängt diese Instruktionen ab, schaltet in den normalen RISC Modus zurück und führt das jeweilige Unterprogramm aus. Für eine Auistung der Java-Instruktionen und ihrer Zuordnung Software/Hardware vgl. Abschnitt 3.4 Java Bytecode Summary in [avr32jvm]. Abbildung 8: Java Erweiterung Software / Hardware [avr32jvm] Abbildung 8 zeigt die Unterteilung Software vs. Hardware der virtuellen Java Maschine von Atmel. Der graue Bereich zeigt den Teil, der komplexe Java-Instruktionen behandelt und in Software implementiert ist. Das Extension Module auf der rechten Seite enthält die Hardwareanteile zur direkten Umsetzung der Befehle. 23 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER Abbildung 9: Java Ausführung [avr32jvm] Ein Beispiel für die Ausführung von Java Code zeigt die Abbildung 9. AVR32-Code (im Bild als C-Syntax dargestellt) wird ausgeführt und dann wird die Java Virtual Machine (ajvm) wie ein normales Unterprogramm aufgerufen. Diese bereitet zuerst das System auf das Ausführen von Java Code vor und ruft dann die eigentliche Java Methode auf (im Bild der innerste Bereich). Diese wird daraufhin vom Java Extension Module ausgeführt, wobei für die komplexen Instruktionen zurück in den normalen RISC Modus gesprungen wird (im Bild als 24 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER Trap routines bezeichnet). Am Ende der Methode setzt die umgebende Virtual Machine einige Register zurück etc. und kehrt zur Ausführung des normalen Codes zurück. Vgl. Abschnitt 1.3 The AVR32 Java Virtual Machine in [avr32jvm]. 2.3.5 Pipeline Die allgemeine AVR32 Architektur deniert nur das Vorhandensein einer Pipeline. Die exakte Funktion und die Anzahl der Pipeline-Stufen hängt von der jeweiligen Implementation ab. Im folgenden wird die Pipeline (siehe Abb. 10) des AT32AP7000 Mikrocontrollers, der in den späteren Kapiteln vorgestellt wird, kurz erläutert (vgl. Abschnitt 3 Pipeline in [avr32tech]). Abbildung 10: AT32AP7000 Pipeline [avr32ap] Prefetch In der Prefetch Phase werden die Instruktionen aus dem Befehlscache geladen und an den Befehlsdekoder ID weitergegeben. Zusätzlich werden in dieser Phase Sprungvorhersagen getroen, wenn es sich bei der gelesenen Instruktion um eine entsprechende Anweisung handelt (dementsprechend muss in dieser Phase bereits eine Befehlsdekodierung stattnden). Falls möglich, wird sogar die Sprunganweisung direkt gegen die Instruktion im Sprungziel ersetzt. Als weitere Aufgabe der Prefetch Einheit werden einige Java-Instruktionspaare zu einer zusammengesetzten Instruktion für die Weitergabe an den ID verschmolzen. Decode Die Dekodierungseinheit (decode unit) generiert in der ID-Stufe (instruction decode) für jeden Befehl die entsprechenden Kontrollsignale für die Befehlsausführung und kann eventuell Exceptions auslösen (bspw. Illegal instruction usw.). 25 2.3 Atmel AVR32 (32 Bit) 2 MIKROCONTROLLER Auÿerdem wird hier ein Mapping der logischen Registeradressen auf die physikalischen Adressen vorgenommen, je nach aktuellem Kontext. Siehe hierzu auch die Erläuterung zu shadowed Registern im Abschnitt 2.3.2 auf Seite 21. Die IS Stufe (instruction issue) liest Register aus und prüft die Pipeline auf Datenhemmnisse (data hazards) und kann die Pipeline entsprechend anhalten, um diese Hemmnisse aufzulösen. Weiterhin kann sie ein Forwarding zwischen den drei Unterpipelines aktivieren, um Daten aus einer Pipeline in einer anderen frühzeitig bekanntzugeben. ALU Die Stufe A1 führt Adressberechnungen sowie Condition Checks aus (also Prüfungen auf Gleichheit von Registerinhalten etc.) und ist für allgemeine arithmetische sowie logische Operationen zuständig. Weiterhin wird hier geprüft, ob Sprungvorhersagen aus der Prefetch Einheit korrekt waren. Falls nein, wird die Prefetch Einheit informiert, die Pipeline zu leeren und die richtige Instruktion zu holen. In der Stufe A2 werden die zusätzlichen Aktionen für sogenannte saturate-Befehle ausgeführt. Bspw. die Anweisung SATADD.W addiert zwei 32 Bit Werte mit der Besonderheit, dass bei einem Über- bzw. Unterlauf der maximal bzw. minimal mögliche Wert als Ergebniswert gesetzt wird. Multiply Für die Multiply-Unterpipeline stellt die Dokumentation des AP7000 keine exakte Dokumentation der beiden Stufen bereit. Allgemein werden hier Multiplikationen und Divisionen durchgeführt und je nach Befehl auch eine dazugehörige Addition des Ergebnisses auf den Wert eines Zielregisters. Je nach Gröÿe der Operanden sowie Art des Befehls sind u.U. zwei oder mehr Takte für die Abarbeitung nötig. Load/Store Die Adressen für indizierte Zugrie auf den Speicher werden in der Stufe A1 der ALU Unterpipeline berechnet. Alle sonstigen Adressberechnung werden in der DA Stufe der Load/Store Pipeline durchgeführt. In der D Stufe werden dann die eigentlichen Schreib- oder Lesezugrie auf den Datencache durchgeführt. Writeback Die drei Unterpipelines teilen sich eine Writeback-Stufe mit drei Registern für das Zurückschreiben von Daten. 26 2.4 Atmel AT32AP7000 2 MIKROCONTROLLER 2.3.6 MMU / MPU Die AVR32 Architekturbeschreibung sieht den Einsatz einer oder einer Memory Management Unit (MMU) Memory Protection Unit (MPU) für die Verwaltung der Speicherzugrie vor, die im folgenden kurz erläutert werden (vgl. Abschnitt 4 Memory Management Unit und Abschnitt 5 Memory Protection Unit in [avr32]): MMU AVR32 speziziert einen 32-bit-adressierbaren virtuellen Speicher, der mit Hilfe einer MMU auf 32-bit-adressierbaren physikalischen Speicher abgebildet wird. Virtueller Speicher vereinfacht die Ausführung von mehreren Prozessen und erlaubt Zugrisbeschränkungen auf einzelne Speicherbereiche. MPU Eine MPU ist eine einfachere Alternative zur MMU, die keine virtuelle Speicherverwal- tung besitzt. Stattdessen erlaubt die MPU, den Speicher in (vom Benutzer denierbare) Bereiche aufzuteilen, denen jeweils andere Berechtigungsstufen zugewiesen werden können. Diese Stufen bestehen aus Kombinationen der drei Zugrisarten lesen, schreiben oder ausführen. 2.4 Atmel AT32AP7000 2.4.1 Architektur Als Beispiel für die AVR32 Architektur wird im folgenden der Mikrocontroller Atmel AT32AP7000 kurz vorgestellt und in Hinblick auf die Eignung für eingebettete Systeme betrachtet. AP steht für Application Processor und soll auf den möglichen Einsatz für High- digital signal processing ), Performance Anwendungen hindeuten, wie DSP ( Multimedia und Wireless-Anwendungen. Dieser Mikrocontroller steht in Bezug auf Leistung und Flexibilität am oberen Ende von Atmels Produktpalette und stellt ein Konkurrenzprodukt zu den (bspw. in 5 PDAs und Smartphones) weit verbreiteten ARM Prozessoren dar . . 5 Siehe Atmel AVR32 AP Produktvorstellung und Benchmarks unter http://www.atmel.com/products/ avr32/ap7/ap7_3.asp?family_id=682 27 2.4 Atmel AT32AP7000 2 MIKROCONTROLLER Abbildung 11: AT32AP7000 Übersicht [embnews] Die grobe Übersicht über den Aufbau des AT32AP7000 in Abbildung 11 zeigt die umfangreichen Möglichkeiten, verschiedenste Arten von Peripherie und Speicher anzuschlieÿen. Eine kurze Übersicht über einige in der Abbildung verwendete Kürzel: • VMU: Video Management Unit • OCD: On Chip Debugging (entspricht JTAG) • EBI: External Bus Interface • TWI: Two-Wire-Interface (entspricht I C) • PWM: Pulsweitenmodulation (Pulse-width Modulation) 2 28 2.4 Atmel AT32AP7000 • SPI: Serial Peripheral Interface • SSC: Synchronous Serial Controller • TC: Timer / Counter • MCI: Multimedia Card Interface 2 MIKROCONTROLLER Um ein paar Funktionen zu nennen, bietet der Chip bspw. die Möglichkeit der EthernetKommunikation über zwei Schnittstellen, einen Anschluss für eine LC-Anzeige oder auch eine MCI erlaubt die direkte Anbindung von diversen Arten von FlashSpeichern wie bspw. CompactFlash (CF) oder SecureDigital (SD). USB 2.0 Schnittstelle. Das Weiterhin ist ein Pixel-Coprozessor onboard, welcher bspw. Unterstützung für bestimmte Berechnungen bei der MPEG4 Dekodierung bietet. Detaillierte Erläuterungen der vielen Controller und Schnittstellen nden sich in [avr32ap]. 2.4.2 Eignung für eingebettete Systeme Ezienz Bei der Entwicklung der AVR32 Architektur wurde darauf geachtet, mit möglichst wenig Taktzyklen möglichst viele Daten zu verarbeiten. Der Prozessor kann also trotz hoher Performance bei einer vergleichsweise niedrigen Taktfrequenz betrieben werden. Dies verringert den Stromverbrauch. 6 gibt Atmel ein Szenario an, bei dem der AVR32 AP7000 einen QVGA Als Praxisbeispiel (320x240 Pixel) MPEG4 Datenstrom, der über den eingebetteten 100 MBit Ethernet-Controller empfangen wird, mit 30 Bildern pro Sekunde dekodiert und auf einem angeschlossenen QVGA TFT LCD ausgibt, während im Hintergrund ein angepasstes Linux System läuft. Der Mikrocontroller begnügt sich hierbei mit einem Systemtakt von 100 MHz und einem Stromverbrauch von 250mW. Weiterhin gibt Atmel an, dass für MPEG2 Dekodierung in PAL Auösung weniger als 75 MHz und für reine MP3 Dekodierung nur 15 MHz Systemtakt ausreichend sind. Diese Werte sind allerdings kritisch zu betrachten, da der Mikrocontroller mit spezieller Hardware ausgestattet ist (Pixel Coprozessor), die insbesondere für die Bewältigung dieser Aufgaben ausgelegt ist. 6 http://atmel.com/products/AVR32/ap7/ap7_6.asp 29 2.4 Atmel AT32AP7000 2 MIKROCONTROLLER Der AVR32 AP7000 deniert zusätzlich verschiedene Sleep-Zustände, um den Stromverbrauch zu senken: • Idle : Die CPU ist angehalten, der Rest des Chips arbeitet normal weiter. Die CPU wird durch jeden Interrupt oder durch ein Signal am WAKE_N Pin wieder aufgeweckt. • Frozen: Die CPU und alle Module am HighSpeedBus sind angehalten, aber die sonstige Peripherie arbeitet normal weiter. Das System wird durch Interrupts vom Peripherie-Bus oder durch ein Signal am WAKE_N Pin wieder aufgeweckt. • Standby : Alle synchronen Taktgeber werden angehalten, aber Oszillatoren und PLLs laufen weiter und erlauben ein schnelles Aufwachen aus dem Standby-Modus. Das Signal für das Aufwachen wird entweder von der Echtzeituhr, einem externen Interrupt oder durch den WAKE_N Pin ausgelöst. • Stop: Wie Standby, aber weitere (nicht alle) Oszillatoren und PLLs sind deaktiviert. • Static : Alle Oszillatoren und Taktgeber sind angehalten. Externe Interrupts oder ein Signal am WAKE_N Pin können das System wieder aufwecken. Der Befehlssatz der AVR32 Architektur wurde unter dem Gesichtspunkt einer geringen Codegröÿe bzw. einer hohen Codedichte entworfen. Beispielsweise gibt es für einige Instruktionen mit Konstanten zwei Maschinenbefehle - eine kompakte und eine erweiterte Form. Die kompakte Form kann für kleine Konstanten genutzt werden und die erweiterte für groÿe Konstanten. Der Compiler kann bei der Übersetzung immer die optimale Instruktion wählen und so die Codegröÿe klein halten. Ein weiteres Beispiel sind häug benutzte Befehle (wie ADD), die es in kompakten Varianten mit zwei sowie erweiterten Varianten mit drei Operanden gibt. Die erweiterten Instruktionen ermöglichen in einem Zyklus bspw. sowohl eine Addition als auch eine Daten-Bewegung (also Addition zweier Register und Ergebnis in drittem Register sichern). Detaillierte Erläuterungen des Befehlssatzes nden sich in [avr32] ab Abschnitt 8.3 Instruction Set Summary. Varianten Die AVR32 Architektur sieht optionale bzw. gegeneinander austauschbare Anteile vor (bspw. Mikroarchitekturen AVR32A vs. AVR32B; Java Extension etc.). Dadurch kann eine Variante des Mikroprozessors gewählt werden, die am besten zum geplanten Einsatzgebiet passt ohne unnützen Ballast mitzuführen. Dies spart Platz und verringert u.U. den Stromverbrauch. 7 des AVR32 (AVR32 AP7000, AP7001 und AP7002) Praktisch sind derzeit drei Varianten 7 zu Details der versch. Varianten siehe auch Produktübersicht unter http://atmel.com/dyn/products/ param_table.asp?family_id=682&OrderBy=part_no&Direction=ASC 30 2.4 Atmel AT32AP7000 2 MIKROCONTROLLER erhältlich, die sich nur durch die Zahl der I/O Pins und des Ethernet-Anteils unterscheiden. Der AP7000, der als maximale Ausbaustufe angesehen werden kann, ist aktuell im Handel für ca. 20,- Euro erhältlich. Eine komplette Referenzimplementation des AP7000 ist als NGW100 8 für ca. 80,- Euro zu kaufen und wird ausgeliefert mit zwei Ethernet-Schnittstellen, 32 MB SDRAM, 16 MB Flash, Adapter für SD oder MMC Karten, USB Anschluss, JTAG Schnittstelle sowie diversen I/O-Pins und LEDs. Vorinstalliert ist ein als Netzwerk-Router angepasstes LinuxSystem. Eine Variante des AVR32 (AVR32 UC3) mit der Mikroarchitektur AVR32A, die für niedrigere Anforderungen bei kleinerem Preis gedacht ist, bendet sich derzeit vor der oziellen Auslieferung. Wartbarkeit / Verfügbarkeit Die AVR32 Architektur unterstützt (im Gegensatz zu einfa- cheren Mikrocontrollern) explizit Betriebssysteme, bspw. durch spezielle Instruktionen (normale Sprünge mit ACALL vs. System-Sprünge mit SCALL, die für den Aufruf von Routinen eines Betriebssystem verwendet werden können). Mit einer Memory Management Unit (MMU), die in der Mikroarchitektur AVR32B deniert wird, ist auch die Portierung von komplexeren Systemen wie Linux möglich. Durch den Einsatz eines portierten, in der Praxis bewährten Betriebssystems und damit der Verwendung von vorhandener und entsprechend getesteter Software wird die Stabilität erhöht und der Aufwand sowie die Kosten für neue Systeme vermindert. Echtzeitanforderungen Durch das Priorisierungssystem (siehe Abschnitt 2.3.3 auf Seite 22) ist das Laufzeitverhalten exakt festgelegt und Systementwickler können die Interruptleitungen entsprechend den eigenen Anforderungen nutzen und Routinen in hoch priorisierten Kontexten laufen lassen. Bezüglich Eignung für Echtzeitanforderungen lässt sich hier weiterhin die Möglichkeit auühren, 9 ein Echtzeit-Betriebssystem (bspw. embOS der Firma Segger Mikrocontroller GmbH ) einzusetzen, welches ein exaktes Zeitverhalten garantiert. 8 9 http://www.avrfreaks.net/wiki/index.php/Category:NGW100 http://www.segger.com/embos.html 31 3 SOFTWARE 3 Software 3.1 Entwicklung Programme für Mikrocontroller wie die vorgestellten AVR Varianten können auf unterschiedliche Arten geschrieben werden. Assembler Assembler, also die Kodierung des Programms direkt mit dem Befehlssatz des Zielsystems, erlaubt dem Entwickler die volle Kontrolle darüber, was auf dem Mikrocontroller abläuft. Diese Art der Entwicklung ist jedoch im Vergleich mit Hochsprachen aufwendiger, schwieriger zu warten und wird daher nur in kleineren Anwendungen oder aus Ezienzgründen in Teilbereichen der Software eingesetzt. Für die AVR 8-Bit Architektur wird von Atmel das sogenannte AVR-Studio 10 als Entwicklungs- umgebung (Freeware) für Windows angeboten, das neben dem Assembler auch einen Simulator enthält. Für Linux gibt es mehrere freie AVR Assembler wie etwa lässt sich mit der Software C simulavr avra11 . Simulation und Debugging 12 in Verbindung mit dem Debugger gdb13 vornehmen. Neben Assembler ist C die wohl am häugsten eingesetzte Programmiersprache bei der Softwareentwicklung für Mikrocontroller. Die Sprache ist hoch genug, um leicht verständlichen und somit wartbaren Code zu erzeugen - bietet aber noch genug Hardwarenähe, um die Ressourcen des Controllers direkt und ezient zu nutzen. Für die Entwicklung in C unterstützt die GNU Compiler Collection ( gcc bzw. gcc-avr 14 ) so- wohl die AVR- als auch die AVR32-Architektur. Eine Windows-Variante im Komplettpaket mit weiteren benötigten Werkzeuge ist als WinAVR 15 im Internet zu nden. Für AVR32 hat Atmel ein Paket aus der Eclipse IDE und den GNU Werkzeugen als Studio 16 mit Unterstützung für Windows und Linux veröentlicht. 10 http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 http://avra.sourceforge.net/ 12 http://www.nongnu.org/simulavr/ 13 http://sourceware.org/gdb/ 14 http://www.gnu.org/software/gcc/ 15 http://winavr.sourceforge.net/ 16 http://www.atmel.com/dyn/products/tools.asp?family_id=682 11 32 AVR32 3.2 ISP und JTAG Weitere Sprachen 3 SOFTWARE Mikrocontroller können neben C und Assembler auch in weiteren Sprachen programmiert werden. In Bezug auf die AVR Architektur muss hier der kommerzielle Basic-Compiler BASCOM der 17 Electronics besonders erwähnt werden. Dieser bietet einen sehr einfachen Einstieg Firma MCS in die Softwareentwicklung für Mikrocontroller und enthält bereits viele Sprachkonstrukte (bspw. direkte Unterstützung von I2C-Bussen) für die schnelle Erstellung von Programmen. Java wurde bereits bei der Vorstellung der AVR32 Java-Erweiterung erwähnt. Dies ist aber nicht die einzige Zielumgebung für diese Programmiersprache: NanoVM 18 ist eine JVM Implementierung für Atmels AVR Mega8 und Mega32 Mikrocontroller, die komplett in deren 8 kByte Flash ROM untergebracht wird. Diese wurde entwickelt, um den mobilen Lehr-Roboter programmieren. NanoVM ASURO 19 des Instituts für Luft- und Raumfahrt einfacher zu unterstützt nur einen kleinen Teil der Java Spezikation und das Programmieren mit Java und NanoVM ist weniger exibel und auch weniger performant als mit C oder Assembler. Der Vorteil ist aber darin zu sehen, dass die JVM sämtliche Hardwarespezischen Details vor dem Entwickler verbirgt und dieser plattformunabhängigen Code mit Zugri auf einfach strukturierte Schnittstellen schreiben und sich so mehr auf das was als auf das wie konzentrieren kann: gerade zu Lehrzwecken und für den Einstieg in die Entwicklung ein groÿer Vorteil. Eine weitere interessante (Nicht-Atmel-)Hardwareumgebung für die Java-Entwicklung ist die Experimentierplattform Sun SPOT 20 der Firma Sun Microsystems; ein auf einem ARM Prozessor basierendes, batteriebetriebenes Gerät mit Funktechnologie und verschiedensten Sensoren. 3.2 ISP und JTAG Für die eigentliche Programmierung eines Mikrocontrollers, also den Vorgang, Software auf den internen Speicher zu laden, gibt es hauptsächlich zwei verschiedene Möglichkeiten (weitere Varianten sind Hersteller- oder Schaltungsabhängig): In-System Programmierung Für die sogenannte In-System Programmierung (ISP) bietet der Mikrocontroller eine Schnittstelle an, die es ermöglicht, seinen internen Flash-Speicher 17 http://www.mcselec.com/ http://www.harbaum.org/till/nanovm/index.shtml 19 http://www.dlr.de/rm-neu/desktopdefault.aspx/tabid-3848/6062_read-9032/ 20 http://www.sunspotworld.com/ 18 33 3.3 Betriebssysteme 3 SOFTWARE zu beschreiben (je nach Mikrocontroller kann auch die Möglichkeit gegeben sein, den Speicher auszulesen). Gewöhnlich wird diese Schnittstelle auf der Zielschaltung bspw. über eine Stiftleiste nach auÿen geführt. Dadurch kann der Mikrocontroller in-System programmiert werden - er muss also nicht mehr aus der Schaltung entfernt werden, um ihn zu programmieren. Siehe auch [wikiisp]. ISP Programmiergeräte für AVR Mikrocontroller sind kostengünstig und als reine Adapter für den Parallelport bereits ab ca. 10,- Euro erhältlich. Programmiergeräte mit USB Schnittstelle der Firma Atmel sind für ca. 40,- Euro zu beziehen; diese bieten den Vorteil, dass direkt aus der Software AVR Studio die Programmierung des Mikrocontrollers erfolgen kann. Die derzeit erhältlichen Mikrocontroller der AVR32 Architektur bieten leider keine ISP Schnittstelle sondern werden entweder über die JTAG Schnittstelle oder über einen vorinstallierten Bootloader beschrieben. JTAG Schnittstelle Die Alternative zur ISP Schnittstelle lautet JTAG (Joint Test Action Group). JTAG bezieht sich auf den Standard IEEE-Standard 1149.1, der ein Verfahren für das Testen und Debugging von elektronischer Hardware beschreibt. Im Gegensatz zu ISP ist hier also nicht das reine Programmieren des angebundenen Speichers möglich, sondern auch das Testen laufender Anwendungen (On-Chip Debugging OCD) direkt im Zielsystem möglich. Ähnlich dem Debugging bei PC Software kann Befehl für Befehl nachvollzogen werden, was auf dem Mikrocontroller ausgeführt wird. Weiterhin können Register und Speicherinhalte geprüft werden. Dies erleichtert das Testen und die Fehlersuche für den Entwickler - insbesondere, wenn Eigenschaften der Zielhardware nicht im Simulator dargestellt werden können (bspw. angeschlossene Peripheriegeräte). Siehe auch [wikijtag]. Geräte für die Anbindung an JTAG Schnittstellen sind technisch aufwendiger zu realisieren als Programmiergeräte für ISP. Dies schlägt sich auch im Preis nieder - das aktuelle JTAG Entwicklungstool JTAG ICE MKII der Firma Atmel ist für knapp 300,- Euro im Handel erhältlich. 3.3 Betriebssysteme Das Feld der Betriebssysteme für eingebettete Systeme ist sehr groÿ und wird hier nur kurz angerissen. 34 3.3 Betriebssysteme 3 SOFTWARE Abbildung 12: Umfrage embedded.com [embos] Laut einer Umfrage durch embedded.com aus dem Jahre 2006 (siehe Abbildung 12) wird in weniger als 30% der eingebetteten Systeme direkt auf der Hardware entwickelt - über 70% der befragten Firmen setzen auf ihren Systemen ein Betriebssystem ein. Dementsprechend wichtig und groÿ ist auch der Markt der Betriebssysteme für eingebettete Systeme, von denen ein Groÿteil als Realtime OS (Echtzeit-Betriebssystem, welches ein striktes Einhalten von speziziertem Zeitverhalten aufweist) beworben wird. Das, laut embedded.com, am häugsten eingesetzte (kommerzielle) OS ist VxWorks der Firma Wind River Systems mit einem Anteil von ca. 25%, mit einigem Abstand gefolgt von den beiden Microsoft Systemen XP Embedded, Windows CE 35 und diversen Linux Distributionen. Literaturverzeichnis Literaturverzeichnis Literaturverzeichnis [esmar] Peter Marwedel: Eingebettete Systeme, Springer Verlag Berlin, 2007 [baswt] A. Spillner, T. Linz: Basiswissen Softwaretest, dpunkt.Verlag Heidelberg, 2007 [wikijtag] Wikipedia Deutschland: Joint Test Action Group http://de.wikipedia.org/wiki/Joint_Test_Action_Group [wikiisp] Wikipedia Deutschland: In-System-Programmierung, 2007 http://de.wikipedia.org/wiki/In-System-Programmierung [avr32ap] Atmel Corporation: AT32AP7000 Preliminary, 2007 http://atmel.com/dyn/resources/prod_documents/doc32003.pdf [avr8] Atmel Corporation: ATtiny13, 2007 http://www.atmel.com/dyn/resources/prod_documents/doc2535.pdf [avr8is] Atmel Corporation: AVR Instruction Set, 2007 http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf [avr32] Atmel Corporation: AVR32 Architecture Document, 2007 http://atmel.com/dyn/resources/prod_documents/doc32000.pdf [avr32jvm] Atmel Corporation: AVR32 Java Technical Reference, 2007 http://www.atmel.com/dyn/resources/prod_documents/doc32049.pdf [avr32tech] Atmel Corporation: AVR32 AP Technical Reference Manual, 2007 http://www.atmel.com/dyn/resources/prod_documents/doc32001.pdf [cz] Urlich Hottelet: Eingebettete Systeme prägen das Auto der Zukunft, Online Artikel der Computer Zeitung, 28.11.2007 http://computerzeitung.de/loader?path=/articles/2007049/31326048_ ha_CZ.html&art=/articles/2007049/31326048_ha_CZ.html&thes=8002, 9788,9801,9789,9790,9791,9792,9794,9795,9797,9846,9796&pid= ee54f3c7-0de1-40f5-bb23-2cfdf022aee5&page=1 [embos] Operating Systems On The Rise, Online Artikel embedded.com, 21.6.2006 36 Literaturverzeichnis Literaturverzeichnis http://www.embedded.com/columns/surveys/187203732?_requestid= 636383 [embnews] AP7000 AVR32-based SoCs - Atmel, Online Artikel embedded-systems.net, 29.08.2006 http://embedded-system.net/avr32-based-socs-atmel-ap7000.html 37