Dem Fehler schneller auf der Spur Multicores leichter debuggen

Auswahl von gespeicherten Trace-Strömen
Auswahl von gespeicherten Trace-Strömen

Um das Testen und Debuggen komplexer Multicore-SoCs in Embedded Systemen weiter zu erleichtern, hat PLS in der aktuellen Version 4.4 ihrer Universal Debug Engine (UDE) gleich eine ganze Reihe zusätzlicher bzw. deutlich erweiterter Funktionen implementiert.

Ihr besonderes Augenmerk richteten die Experten von PLS dabei auf die Visualisierung von in Echtzeit gewonnenen Trace-Informationen und eine optimierte Auswertung dieser Daten. Dazu wurde in der UDE-Version 4.4 unter anderem das integrierte Trace-Framework massiv erweitert. So können jetzt mit Hilfe eines speziell dafür entwickelten Formates Trace-Daten-Ströme architekturunabhängig in einer Datenbank abgespeichert werden. Nicht nur für das System-Level-Debugging verwendete Analyse-Komponenten wie beispielsweise Profiling, Code Coverage oder Execution Sequence Diagram profitieren von dieser neuen Möglichkeit. Unabhängig vom konkreten Target sind die Ergebnisse für den Entwickler jetzt besser vergleichbar. Aus der Datenbank können die Trace-Daten später wieder in das Werkzeug geladen und sind Offline oder auch durch andere Tools analysierbar.

Im überarbeiteten Trace-Window der UDE 4.4 kann der Entwickler sehr flexibel ausgewählten, welche der aus den aufgezeichneten Daten gewonnenen Informationen darzustellen sind.

Für die Gewinnung von Trace-Daten zur Laufzeit stehen für die Automotive-Multicore-SoCs der »Aurix«-Familie von Infineon bzw. Freescales »MPC57xx Qorivva«-Serie Emulation Devices zur Verfügung. Dabei handelt es sich zum Serienchip Footprint-kompatible Bausteine, die zusätzlichen Emulationsspeicher, eine komplexe Filter- und Triggerlogik und in einigen Fällen auch eine externe Trace-Schnittstelle enthalten. Der aktuell einige Megabyte große Emulationsspeicher kann als Flash-Overlay-Speicher für die Kalibrierung oder für die Aufzeichnung von Trace-Daten verwendet werden, wobei er in letzterem Fall aufgrund der begrenzten Speicherressourcen hauptsächlich der Fehlersuche dient. Mit Hilfe spezieller Werkzeuge, wie dem in der UDE integrierten Universal Emulation Configurator (UEC), wird dafür die Filter- und Triggerlogik so konfiguriert, dass nur die für die Erkennung der Fehlerursache notwendigen Daten aufgezeichnet werden.

Für statistische Analysen wie Code Coverage wird üblicherweise eine wesentlich größere Menge an Trace-Daten benötigt. Um diese Datenmassen in ausreichend großen externen Speichern sammeln zu können, sind in den Emulation Devices von Infineon und Freescale spezielle, auf dem Aurora-Protokoll basierende serielle Trace-Schnittstellen implementiert. Damit das Auslagern der Daten auch zuverlässig funktioniert, bedarf es allerdings zusätzlicher, besonders leistungsfähiger Hardware-Tools wie dem mit einem speziellen Aurora-Trace-Pod und bis zu 4 GByte Speicher ausgestattetem »Universal Access Device 3+«. Erst danach können die gesammelten Datenmassen softwareseitig verschiedenen statistischen Analysen wie Code Coverage oder Profiling mit einer umfassenden grafischen Auswertung unterzogen werden.

Um Code-Coverage-Messungen auch dann zu ermöglichen, wenn nur der in der Größe limitierte On-Chip-Trace-Speicher zur Verfügung steht, können mit der UDE 4.4 nun entsprechende Messergebnisse erstmals automatisch akkumuliert werden. Neben der bereits seit langem verfügbaren Darstellung von Variablen zur Laufzeit des Programms ist mit der aktuellen UDE-Version sogar eine gleichartige Darstellung basierend auf den Resultaten eines durchgeführten Daten-Trace möglich. Ebenfalls neu ist eine für alle Compiler-Hersteller offene Erweiterung des DWARF-Standards, die Branch-Coverage-Messungen auch an hoch optimierenden Code zulässt.

Vor allem in den Bereichen Trace-Daten-Auswertung, Makros und Multicore-Breakpoints deutlich erweitert wurde auch das für die Testautomatisierung und Interaktion mit anderen Werkzeugen dienende Objektmodell der UDE. So können jetzt auch skriptgesteuert Cores zu Run-Control-Gruppen für synchrones Starten und Stoppen zusammengefasst werden. Auch welcher Breakpoint in welchem Core zum Stop des Gesamtsystems geführt hat, ist jetzt über das Objektmodell durch gekoppelte Werkzeuge bestimmbar. Darüber hinaus unterstützt eine neue Methode zur Erkennung der Rücksprungadresse einer Funktion den automatisierten Test und externe Skripte können auf alle intern geladenen Makros zugreifen. Diese Softwareschnittstelle der UDE wird von weiteren externen Tools für den Target-Zugang, die Flash-Programmierung und die Target-Steuerung verwendet. Dazu zählen unter anderem PikeTecs Time Partition Testing (TPT) für modellbasierten Test sowie der UML-Debugger von LieberLieber Software.

Zu den von der UDE 4.4 neu unterstützten Mikrocontrollern zählen unter anderem die aktuellsten Modelle der »Aurix«-Familie von Infineon (TC29x, TC27x, TC26x, TC23x, TC22x inklusive Emulation Devices), der »Qorivva«-Bausteine MPC57xx von Freescale (MPC5746M, MPC5777M, MPC5748G, MPC5746C, MPC77xK und MPC574xP) sowie der »SPC57x«-Familie von STM. Bei diesen Modellreihen können auch die Programme für die integrierten Generic Timer Module (GTM) und Hardware Security Module (HSM) debuggt werden. Ebenfalls unterstützt werden die Embedded-Power-ICs »TLE98xx« von Infineon, die »Cortex-M« basierten Bausteine »STM32Fx« von STMicroelectronics sowie die »Zynq 7000«-Familie von Xilinx.