Bei eines Busbreite von 128 bit werden gleichzeitig 4-8 Thumb-Befehle in einen Zwischenspeicher, der 8 Blöcke mit jeweils acht 128-bit-Einträgen enthält, eingelesen. Bei linearem Code handelt es sich daher „nur“ um eine einfache Prefetch-Einheit. Bei Sprüngen und bedingten Verzweigungen sowie beim Aufruf von Interrupt-Service-Routinen werden die Befehle ab der Zieladresse eingelesen, so dass der Code aus dem schnellen RAM ohne Wartezyklen abgearbeitet werden kann. Bei der Architektur des Beschleunigers handelt es sich um eine LRU-Architektur (Least recently used), d.h. die am häufigsten benutzen Sprungziele bleiben im Zwischenspeicher, die am wenigsten benutzten werden durch neue Sprungziele ersetzt. Ein Sprungziel wird in den Cache aufgenommen, sobald es das erste Mal angesprungen wird, und dann entsprechend der LRU-Regel im Cache gehalten.
Architekturen, deren Flash-Speicher bei höheren Taktfrequenzen mit Wait-States operieren müssen, testen ihre MCUs, um einen möglichst hohen Coremark-Wert zu erzielen, in der Regel bei niedrigen Taktfrequenzen: So erzielt STs STM32F103RB bei 24 MHz noch 1,797 Coremark/MHz, bei 72 MHz dagegen nur noch 1,504 Coremark/MHz bei einer Coeeausführung aus dem Flash-Speicher.
NXP als nächster ARM-Lizenznehmer hat seinen LPC1768, der wie der STM32 auf dem Coretx-M3 basiert, bei 72 und 100 MHz testen lassen. Die Ergebnisse: 1,755 bzw 1,753 Coremark/MHz. Hier muss man jedoch aufpassen: Der Wert für 100 MHz wurde bei Codeausführung aus dem RAM gemessen, vermutlich, weil der Flash-Speicher nicht mehr mitgekommen ist und der Wert bei Codeausführung aus dem Flash-Speicher dank Wait-States erheblich geringer ausgefallen wäre.
Auch Texas Instruments hat einen Stellaris-Controller getestet: Der LM3S9B96 erzielt bei 50 MHz einen Wert von 1,921 Coremark/MHz, schon bei 80 MHz geht dieser mit 1,595 Coremark/MHz in die Knie, da der Flash-Speicher nur bis 50 MHz ohne Wait-States arbeiten kann.
Microchip ist bei 8-bit-MCUs klarer Marktführer, bei 32-bit-Controllern jedoch (noch) Nischenanbieter. Der Chip-Hersteller aus Arizona setzt als einziger auf einen Core aus dem Hause MIPS, konkret auf den MIPS32 M4K. Dieser Core ist mit seiner 5-stufigen Pipeline äußerst performant und schlägt mit 1,56 DMIPS/MHz den Cortex-M3 klar. So kommt der PIC32MX360F512L beim Einsatz des GCC-Compilers ohne Wait-States bei 30 MHz auf 2,599 Coremark/MHz, bei 80 MHz und 2 Wait-States immerhin noch auf 2,297 Coremark/MHz. Der Nachteil des PIC32 gegenüber dem RX von Renesas ist, dass der Wert mit zunehmenden Frequenzen auf Grund der vergleichsweise ineffizienten Flash-Architektur immer mehr sinkt.
Neben der Rechenleistung gibt es natürlich noch diverse andere Entscheidungskriterien für oder gegen eine MCU. Für diverse Applikationen z.B. im Automobilbau wird die Leistungsaufnahme immer wichtiger. Hier sind Vergleiche nur bedingt möglich, da die einzelnen Chips unterschiedliche Peripherie, unterschiedliche Energiesparmodi und last but not least in den Datenblättern Leistungsangaben bei unterschiedlichen Rahmenbedingungen angeben. Die Core-Werte sind zwar bekannt, jedoch ist der Core ja nur für rund 10 % der Gesamtleistungsaufnahme eines Mikrocontrollers verantwortlich. Grob kann man aber feststellen, dass von den erwähnten MCUs die STM32F2- und die RX-Familien im aktiven Modus mit vollständig aktivierter Peripherie in Bezug auf Coremark/mW am besten abschneiden.
Ein weiterer Unterschied der RX-CISC-Architektur gegenüber den RISC-Architekturen besteht in der variablen Länge der Befehle, die von 8 bis 64 bit reichen kann. Damit ergeben sich in der Praxis gegenüber ARM- und MIPS-basierten MCUs, die „nur“ 16- und 32-bit-Befehle aufweisen, Vorteile bei der Codegröße. Bei Motorsteuerungen konnte z.B. der Code für einen STM32 auf einem RX610 um knapp 30 % reduziert werden.
Last but not least greift die FPU eines RX auf den normalen Registersatz zurück, wodurch Lade/Speicher-Operationen für die Überführung von Daten aus dem Integer-Registersatz in spezielle FPU-Register vermieden wird.
Als Fazit kann man festhalten, dass die RX-Architektur von Renesas seitens der Rechenleistung zu den Spitzenmodellen gehört und sich hinter ARM- und MIPS-basierten Modellen nicht zu verstecken braucht. In manchen Punkten ist die CISC-Architektur auch überlegen, so z.B. bei den flexiblen Befehlslängen.
Renesas RX610 | STM STM32F103RB | STM STM32F2xxx | Microchip PIC32-MX360F512L | TI Stellaris LM3S9B96 |
|
---|---|---|---|---|---|
Core |
Renesas RX |
ARM Cortex-M3 |
ARM Cortex-M3 |
MIPS32 M4K |
ARM Cortex-M3 |
Architektur | CISC 32-bit |
RISC ARMv7-M 32 bit |
RISC ARMv7-M 32 bit |
RISC MIPS32 | RISC ARMv7-M 32 bit |
Befehlslänge | 8-64 bit | 16/32 bit | 16/32 bit | 16/32 bit | 16/32 bit |
Pipeline |
5 | 3 | 3 | 5 | 3 |
DSP- Erweiterung |
Ja | Nein | Nein | Nein | Nein |
Interrupt- Latenz |
10 Zyklen | 12 Zyklen | 12 Zyklen | 10 Zyklen | 12 Zyklen |
Taktfrequenz (MHz) |
100 | 72 | 120 | 80 | 80 |
Coremark/ MHz |
2,247 |
1,504 |
2,12 | 2,297 | 1,595 |
Compiler |
RedHat GNU V4.5.1. |
GCC V 4.4.1. |
Keil ARMCC 4.1. |
GCC V 4.3.2. |
Keil ARMCC V4.0. |
Vergleich von Renesas RX mit RISC-basierten Mikrocontrollern mit ARM- und MIPS-Cores