STM32F7 von STMicroelectronics ARMs Cortex-M7 - der Schlüssel zu sicherheits­kritischen Anwendungen?

Flexibles Speichersystem

Neu beim Cortex-M7 sind die eng angebundenen Speicher (TCM) mit zwei getrennten Schnittstellen für Befehle und Daten. Beiden gemeinsam ist, dass sie bis zu 16 MB Speicher und Wait States unterstützen, die Basisdadressen sind im Speichermodell des M7 fest (0x00000000 – 0x1FFFFFFF Code, 0x20000000 – 0x3FFFFFFF Daten). Da die Daten nicht gecacht werden, kann ein  deterministisches Verhalten garantiert werden. Der Befehls-TCM (ITCM) wird über eine 64-bit-Schnittstelle angebunden; Flash-Speicher muss bei den Taktfrequenzen des M7 jenseits eines Null-Wait-State-Betriebes jeder heute bekannten Flash-Technologie zwangsläufig mit einem Beschleuniger wie STMicros ART ausgerüstet werden, um die Rechenleistung des M7 bei Codeausführung aus dem Flash nutzen zu können. Der Daten-TCM (DTCM) weist dagegen zwei 32-bit-Schnittstellen auf, über die zwei Datenelemente im Dual-Issue-Betrieb parallel geladen werden können.
Die DMA-Schnittstelle wurde über eine 32-bit-AHB-Lite-Slave-Schnittstelle realisiert und ermöglicht, wie aus Bild 1 ersichtlich ist, Zugriff sowohl auf den ITCM als auch den DTCM. Als Puffer wird der gleiche genutzt wie Software, die auf TCMs zugreift. Logischerweise kann es dabei zu Zugriffskonflikten Software vs. DMA kommen. Der Cortex-M7 bietet dafür zwei mögliche Betriebsmodi: Beim „Round Robin“ wird die TCM-Bandbreite laut ARM „fair“ aufgeteilt; in einem zweiten Modus hat die Software erste Priorität, was bei Echtzeitanwendungen notwendig ist. Über eine separate Taktversorgung kann eine DMA-Übertragung auch bei schlafendem Prozessor stattfinden. Es ist sogar möglich, per DMA bei schlafendem Prozessor Boot-Code in flüchtigen TCM-Speicher zu übertragen und die MCU von dort zu booten.
Peripherien werden über eine weitere 32-bit-AHB-Lite-Schnittstelle angebunden. Dies ermöglicht ARMs Lizenznehmern, für den Cortex-M4 entwickelte Peripherien von Cortex-M3/4-Controllern wiederzuverwenden. Unterstützt wird eine Schreiboperation pro Taktzyklus (natürlich nur bei Null-Wait-States-Slaves). Die Schnittstelle unterstützt keine Instruktions-Fetch-Operationen, sondern nur Zugriffe auf Daten. Sollten Instruktions-Fetch-Operationen in einem für Peripherien reservierten Adressraum auftreten (0x40000000 – 0x5FFFFFFF), werden diese automatisch zu dem in der Folge diskutierten AXI-Bus geroutet.
Der 64-bit-AMBA4-AXI-Bus dient zum Zugriff auf Instruktionen und Daten, die sich in Adressräumen außerhalb der TCMs und der AHB-Lite-Peripherie-Schnittstelle bewegen. Dies sind die Adressen 0x60000000 – 0x9FFFFFFF (externes RAM) und 0xA0000000 – ­0xDFFFFFFF (externe Devices). Unterstützt werden zwei optionale jeweils 4 bis 64 KB große Caches für Instruktionen und Daten. Als nativer AXI-Master werden 25–39 ausstehende Schreiboperationen bzw. 5–7 ausstehende Leseoperationen unterstützt. Für eine Maximierung des Datendurchsatzes empfiehlt ARM die Integration eines puren AXI-Systems, nichtsdestotrotz kann der AXI-Bus für preissensitive Systeme auf Kosten des Datendurchsatzes auch als Brücke zu einem AHB-Bus dienen. Durch die Bereitstellung von WID-Signalen kann auch eine Integration mit einer AXI3-Schnittstelle erfolgen.
Caches waren bislang in der ARMv7E-M-Systemarchitektur nicht vorgesehen. Daher musste diese z.B. für Cache-Maintenance-Operationen erweitert werden. Im System-Adressbereich (0xE0100000 – 0xFFFFFFFF) wurden z.B. ab der Adresse 0xE000ED78 vier neue Identifikationsregister mit den Bezeichnungen CLIDR (Cache-Level-ID-Register), CTR (Cache-Typ-Register), CCSIDR (Cache-Größen-ID-Register) und CSSELR (Cache-Größen-Auswahl-Register) angelegt. Ab 0xE000EF50 beginnt der Cache-Maintenance-Bereich mit zehn weiteren Registern, die z.B. eine Ungültigkeit eines Cache-Inhaltes angeben. Anders als z.B. beim Cortex-A9-MPCore wird beim Cortex-M7 Cache-Kohärenz nicht Hardware-seitig unterstützt.
Bei einem Schreibzugriff auf einen Block, der im Cache vorhanden ist, gibt es prinzipiell zwei Möglichkeiten, die vom Cortex-M7 beide unterstützt werden:  Zurückkopieren (Write-back) und durchgängiges Schreiben (write-through). Bei ersterer wird der zu schreibende Block nicht sofort in der nächsthöheren Speicherebene abgelegt, sondern zunächst im Cache. Dabei entsteht eine Inkonsistenz zwischen Cache und zu cachendem Speicher. Letzterer enthält somit veraltete Information. Erst wenn das Wort aus dem Cache verdrängt wird, wird es auch in die nächsthöhere Speicherebene geschrieben. Dazu bekommt jeder Cache-Block ein sogenanntes Dirty-Bit, das anzeigt, ob der Block beim Ersetzen zurückkopiert werden muss. Das führt bei Speicherzugriff durch andere Prozessoren oder DMA-Geräte zu Problemen, weil diese veraltete Informationen lesen würden. Es sind somit „händische“ Maßnahmen (Cache Maintenance) notwendig.
Beim Write-through wird der zu schreibende Block sofort in der nächsthöheren Speicherebene abgelegt. Damit ist die Konsistenz gesichert. Damit der Prozessor nicht jedes Mal warten muss, bis der Block in der nächsthöheren Speicherebene (die ja langsamer als der Cache ist) abgelegt ist, benutzt man einen Pufferspeicher. Wenn dieser voll läuft, muss der Prozessor jedoch anhalten und warten. ARM empfiehlt logischerweise den Einsatz der Write-Back-Strategie, um eine möglichst hohe Rechenleistung zu erzielen.
Tabelle 3 zeigt die Speicher-Latenzzeiten der unterschiedlichen Speicher-Schnittstellen bei Leseoperationen. Angenommen ist ein Slave mit null Wait States und dass keine Verzögerungen auf den Schaltmatrizen auftreten. Da alle Speicheroperationen gepuffert sind, ist hier die Latenzzeit natürlich null Taktzyklen.

SpeicherschnittstelleLatenzzeit in Taktzyklen
TCM0
AXI (externer Speicher Cache-Treffer)0
AXI (externer Speicher Cache-Miss oder nicht Cache-fähig)4 für 1. Taktzyklus, 0 für weitere Taktzyklen
AXI (externe Peripherie)4
AHBP (on-Chip-Peripherie)4
Tabelle 3. Speicherlatenzzeiten beim Lesezugriff über die unterschiedlichen Schnittstellen des Cortex-M7. Die maximale Latenzzeit von 4 Taktzyklen tritt bei Zugriffen über den AXI-Bus auf externen RAM-Speicher (bei Cache-Miss) oder externe Peripherie auf.