»TRACE32« von Lauterbach Effizientes Debugging der Xilinx-»Zynq-7000«-Familie

Das Debugging von Multicore-Systemen stellt Entwickler oft vor eine schwierige Aufgabe. Ein einfach zu handhabendes Tool wie »TRACE32« von Lauterbach jedoch schafft schnell und detailliert Klarheit über die Abläufe im Inneren des Systems. Wie das genau geht, beleuchtet Lauterbachs International Sales Manager Norbert Weiss anhand der »Zync-7000«-Plattform von Xilinx.

Die »Zynq-7000«-Plattform von Xilinx ist eine Familie von Bausteinen, die einen ARM-Dual-Core Cortex A9 und eine 28-nm-programmierbare Logik auf einem SoC kombiniert. Als Vorrausetzung für einen vernünftigen und umfangreichen Test des Multicore-Systems sollte der Multicore-Prozessor über eine geeignete Debug- und Trace-Infrastruktur (CoreSight-Komponenten) verfügen. Die Entwicklungsumgebung muss dabei das Debugging der einzelnen Cores und des Gesamtsystems mit intelligenten Test- und Analysefunktionen unterstützen.

Was ist CoreSight?

CoreSight heißt die Debug- und Trace-Infrastruktur, die ARM speziell für Multicore-Prozessoren zur Verfügung stellt. CoreSight ist jedoch nicht als ein fester Logik-Block konzipiert, sondern stellt wie ein Baukasten verschiedene Komponenten zur Verfügung. Der Designer des Multicore-Prozessors kann so selbst den Leistungsumfang für das Debugging und Tracing bestimmen. Das CoreSight-Baukastenkonzept wirkt sich natürlich auch auf das eingesetzte Entwicklungswerkzeug aus. Kennt dieses den Prozessor und seine CoreSight-Komponenten, wie etwa beim Zynq-7000, ist alles ganz einfach. Für neue Prozessoren erfordert das Baukastenkonzept jedoch eine hohe Flexibilität des Werkzeugs.

Bilder: 7

Debugging der »Zync-7000«-Familie

Debugging der »Zync-7000«-Familie

CoreSight-Debug

Für Prozessoren mit CoreSight erfolgt das Debugging aller Cores über eine gemeinsame JTAG-Schnittstelle. Eine Entwicklungsumgebung für unseren Beispielprozessor umfasst folgende TRACE32-Produkte (Bild 1):

•          Ein universelles PowerDebug Modul, das über eine USB- bzw. Ethernet-Schnittstelle an den Hostrechner angeschlossen wird.

•          Ein Debug-Kabel mit einer Lizenz für die Architektur Cortex-A9 und einer Multi-Core-Lizenz.

CoreSight-Trace

Für die Trace-Information aller Cores steht ebenfalls eine gemeinsame Schnittstelle zur Verfügung. Unter CoreSight kann jedem Core eine Komponente zur Generierung von Trace-Informationen zugeordnet sein. Für unseren Beispielprozessor sind dies die folgenden Komponenten (Bild 2):

• Programm-Trace für beide Cortex A9 Cores (PTM)

• Trace für Software-Instrumentierung (ITM)

• AXI Monitor-Trace (AXIM)

• FPGA Trace (FTM)

Jede Trace-Quelle generiert spezielle Echtzeit-Informationen über Abläufe im Inneren der Multi-Core-Plattform. So liefert beispielsweise das »Program Trace Module (PTM)« den Programmfluss, also welche Instruktionen in beiden Cores ausgeführt wurden. Der ITM-Block liefert Daten, die durch instrumentierten Code erzeugt wurden. Das »Fabric Trace Module (FTM)« liefert Informationen über die Abläufe aus dem Inneren des FPGAs. Um diese Trace-Information an der gemeinsamen Schnittstelle zur Verfügung zu stellen, fasst der so genannte Funnel die Trace-Daten zu einem einzigen Datenstrom zusammen. Dieser wird dann entweder über einen Traceport ausgegeben oder in einem On-chip-Trace-Speicher abgelegt.

Off-Chip Traceport

Über die »Trace Port Interface Unit (TPIU)« können die Trace-Daten aller Trace-Quellen für ein externes Tool ausgegeben werden. Für die off-chip-Aufzeichnung und -Auswertung durch TRACE32 muss die Entwicklungsumgebung um folgende Produkte ergänzt werden (Bild 3):

• Ein universelles »PowerTrace-II«-Modul, das den bis zu 4 GByte großen Trace-Speicher zur Verfügung stellt.

• Einen Preprocessor »AutoFocus II« für das Abgreifen der Trace-Daten am Traceport.

On-chip-Trace-Speicher ETB

Eine Pin-sparende Alternative zum Traceport bildet der On-chip-Trace-Speicher, der unter CoreSight »ETB – Embedded Trace Buffer« – heißt. Sein Fassungsvermögen ist aber im Vergleich zu einem externen Tracetool wesentlich kleiner, in unserem Fall 4 KByte. Die Trace-Daten werden im ETB abgespeichert und anschließend über die JTAG-Schnittstelle ausgelesen.

Multi-Core-Debugging

Die Zynq-7000-Plattform kann als AMP- oder SMP-System betrieben werden. Angepasst an die Betriebsart kommen unterschiedliche Debug- und Trace-Konzepte zur Anwendung. Im Gespräch mit Kunden stellen wir immer wieder fest, dass es für die beiden Begriffe

•          AMP – Asymmetrisches Multiprocessing

•          SMP – Symmetrisches Multiprocessing

recht unterschiedliche Interpretationen gibt. Deshalb beschreiben wir im Folgenden, wie die Firma Lauterbach diese Begriffe verwendet und welche Auswirkungen unsere Sichtweise auf die Konfiguration und die Bedienung des TRACE32-Debuggers hat.

Wie der Begriff »Multiprocessing« schon vermuten lässt, arbeiten mehrere Cores in einem Embedded-System zusammen. Entscheidend für das Debugging ist die Frage, wie die Systemaufgaben auf die einzelnen Cores verteilt werden.