Systementwicklung SoCs für optimale Debugging-Fähigkeiten entwickeln

Von Sebastian Gerstl 6 min Lesedauer

Anbieter zum Thema

Debugging und Tracing sind beim Entwickeln von SoCs essenziell, um fertige, hochsichere Chips schneller in den Markt einführen zu können. Im Teil 2 unserer Serie für Depug-freundliche SoCs geht es um Sicherheitsaspekte, Off-Chip-Trace-Funktionen und die wichtigsten IP-Blöcke für eine leistungsstarke Debug-Infrastruktur.

Trace-Visualisierung in der TRACE32-PowerView-Software: Wenn ein SoC-Hersteller seine Chips von Anfang an so gestaltet, dass sie „einfach und leicht debugbar“ sind, erspart er Kunden in späteren Phasen der Entwicklung viele potenzielle Probleme.(Bild:  Lauterbach)
Trace-Visualisierung in der TRACE32-PowerView-Software: Wenn ein SoC-Hersteller seine Chips von Anfang an so gestaltet, dass sie „einfach und leicht debugbar“ sind, erspart er Kunden in späteren Phasen der Entwicklung viele potenzielle Probleme.
(Bild: Lauterbach)

Ein aus Debugger-Sicht optimal gestalteter Chip bedeutet für den Kunden weniger Aufwand, eine schnellere Markteinführung und vor allem geringere Entwicklungskosten sowie für den Chip-Hersteller einen höheren Absatz, denn jedes fehlgeschlagene Projekt führt zu reduzierten Stückzahlen. In Teil 1 dieser Artikelreihe wurde die Bedeutung von Debugging und Tracing für Time-to-Market diskutiert und erste wichtige Überlegungen für Debug-freundliche SoC-Designs angestellt. An dieser Stelle knüpft Teil 2 mit weiteren Punkten an.

Überlegungen für Debug-freundliche SoCs

Security: Die Implementierung von Sicherheitsmechanismen auf einem SoC ist für die Hersteller von entscheidender Bedeutung. Der Hersteller muss sich Gedanken über Bedrohungen und verschiedene Benutzertypen machen, welche Domänen für Debugging offen und welche gesperrt sein sollten und ob es zwischen ihnen Wechselwirkungen gibt. Auch die Signale für Reset und Power Down müssen im SoC getrennt werden. Debugging-Mechanismen bieten tiefen Zugriff auf interne Hardwareressourcen, was potenziell ein Einfallstor für Angreifer darstellt. Entwickler müssen daher Debugging-Schnittstellen standardmäßig deaktivieren oder durch Authentifizierung absichern. Nur autorisierte Benutzer sollten über diese Schnittstellen auf das System zugreifen können.

Viele Systeme implementieren auch Secure Boot um sicherzustellen, dass nur vertrauenswürdige, authentische Firmware ausgeführt wird. In sicherheitskritischen SoCs sollte das Debugging nur für nicht sicherheitsrelevante Anwendungsbereiche erlaubt sein. Zertifizierungen wie ISO 26262 oder Common Criteria verlangen oft, Debugging-Schnittstellen zu deaktivieren oder ganz zu entfernen, um die Sicherheit des Systems zu gewährleisten. Ferner gibt es Technologien wie Arm CoreSight SDC-600 secure debug channel und „Secure JTAG“, die darauf abzielen, den Debugging-Prozess sicher zu machen und ein eigenes Ökosystem für die Sicherheit auf ihrem IP aufzubauen. Noch ein sicherer Ansatz für die Implementierung von Debugging-Funktionen in Produktionssystemen ist die Verwendung von Schlüsseln oder Debug-Tokens. Intel verwendet etwa hardwarebasierte Authentifizierung wie „Disable CPU Debug“ oder „Delayed Authentication Mode“.

Off-Chip-Trace-Funktionen: Off-Chip-Trace ermöglicht die kontinuierliche Aufzeichnung der Programmausführung und des Datenflusses, um das Systemverhalten im Detail zu analysieren, ohne die Trace-Daten durch den begrenzten internen Speicher einzuschränken. Es müssen genügend Pins zur Verfügung stehen, um die Trace-Daten mit der erforderlichen Bandbreite zu übertragen. Off-Chip-Trace-Pins werden oft mit anderen Funktionen gemultiplext, aber wesentliche Funktionen sollten nicht doppelt mit Trace-Pins vorhanden sein. High-Speed-Seriell und Parallel werden als Interfaces verwendet. Zudem erfordert Off-Chip-Trace kompatible externe Tools, die die Trace-Daten interpretieren und analysieren können.

Funktionale Sicherheit: Neben der Security ist die Safety besonders wichtig, vor allem bei sicherheitskritischen Anwendungen wie in der Automobilindustrie, Medizintechnik oder Luftfahrt. So sollte das System beispielsweise so ausgelegt sein, dass es im Fehlerfall automatisch in einen sicheren Zustand übergeht. Für die Sicherheit gibt es verschiedene Vorschriften, die z.B. in der ISO 26262 für den Automobilbereich oder der DO-178 für die Avionik dokumentiert sind. Für verschiedene Anforderungen aus diesen Sicherheitsstandards, wie z.B. Code-Abdeckungsmessungen oder Timing-Analysen, ist die Verfügbarkeit von Off-Chip-Traces eine wesentliche Voraussetzung, um diese zeit- und ressourceneffizient durchführen zu können. Ein SoC, das (auch) für sicherheitskritische Anwendungen entwickelt wurde, muss daher ein Trace-Interface implementieren.

Dokumentation: Die Dokumentation dient als wichtige Informationsquelle und strafft den gesamten Prozess. So bietet die Dokumentation etwa einen umfassenden Überblick über die Systemarchitektur, einschließlich aller IP-Blöcke, Schnittstellen und Kommunikationspfade. Sie hilft bekannte Fehler und typische Probleme schneller zu erkennen. In sicherheitskritischen Anwendungen wie der Luft- und Raumfahrt, der Automobilindustrie und der Medizintechnik ist eine gründliche Dokumentation für die Rückverfolgbarkeit unerlässlich. Sie stellt sicher, dass Informationen über bekannte Probleme und deren Lösungen für spätere Entwicklungsphasen und andere Teams verfügbar sind. Eine detaillierte und präzise Dokumentation ist der Schlüssel, um den Debugging-Prozess schneller, konsistenter und sicherer zu machen.

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Zehn essenzielle IP-Blöcke fürs Debugging

All diese Anforderungen münden in einem SoC, das aus Debugger-Anbieter-Perspektive das „perfekte SoC“ für das Debugging ist. Um ein SoC hierfür optimal vorzubereiten, müssen spezielle IP-Blöcke integriert werden, die den Entwicklungs- und Debugging-Prozess unterstützen. Nachfolgend sind die zehn wichtigsten Blöcke für eine effektive Debug- und Trace-Infrastruktur aufgeführt:

JTAG (oder andere Debug-Schnittstelle): Bietet eine Standardschnittstelle für den Zugriff auf interne Register und Speicherinhalte. Sie ermöglicht das Anhalten und Kontrollieren der CPU sowie das Auslesen von Statusinformationen.

Debug Unit: Verwaltet die Debugging-Funktionen des SoC, z.B. das Setzen und Verwalten von Breakpoints, Watch-Points und Einzelschrittabarbeitung.

Trace-Module: Program-Flow-Trace zum Beispiel zeichnet die Abfolge der ausgeführten Befehle auf, um die Programmausführung zu verfolgen. Daten-Trace zeichnet Speicherzugriffe und Datenänderungen auf. Dies ist wichtig, um Speicherfehler oder Dateninkonsistenzen zu erkennen. Event-Trace und System-Trace hingegen ermöglichen die Verfolgung von Ereignissen (Software oder Hardware) und Signalen innerhalb des SoC, um zeitliche Abläufe zu analysieren und nach Synchronisationsproblemen Ausschau zu halten.

Trace-Puffer oder Export-Schnittstellen: Speichert Trace-Daten vorübergehend, bevor sie exportiert werden. Diese Puffer müssen groß genug sein, um Datenverluste zu vermeiden, insbesondere bei hohen Ausführungsfrequenzen. Die Exportschnittstellen müssen zugänglich sein und eine ausreichende Bandbreite für die wesentlichen Nutzungsszenarien bieten.

Eingebettetes Cross-Triggering: Koordiniert Debug- und Trace-Aktivitäten zwischen mehreren Kernen oder Subsystemen. Es kann Trigger-Ereignisse erzeugen und empfangen, um eine synchrone Analyse in Multi-Core-Architekturen zu ermöglichen. Besonders wichtig in Systemen mit mehreren Prozessoren, um komplexe Interaktionen zwischen Kernen zu verfolgen.

System Monitoring und Performance Counters: Überwachen die Leistungsparameter des SoC wie CPU-Auslastung, Speicherzugriffe, Bus- oder Cache-Nutzung und Latenzen. Diese Daten sind nützlich, um Engpässe und ineffiziente Codeabschnitte zu identifizieren.

Eingebettete Logikanalysatoren: Ermöglichen die Abtastung und Analyse interner Signale direkt auf dem Chip. Diese Analysatoren arbeiten wie externe Logikanalysatoren, sind aber in das System-on-Chip integriert. Auf diese Weise ermöglichen sie die Überwachung und Diagnose von Problemen auf Signalebene, ohne dass externe Geräte erforderlich sind.

Sicherheitsmodule: Kontrollieren den Zugriff auf Debug-Funktionen, um sicherzustellen, dass sensible Informationen geschützt bleiben. Häufig werden Zugangskontrollen, Verschlüsselung und Authentifizierung eingesetzt. Sie sind auch wichtig für den Schutz vor unberechtigtem Zugriff; insbesondere bei sicherheitskritischen und vertrauenswürdigen Anwendungen.

Busse oder Netzwerke: Ein separater Bus oder ein internes Netzwerk, das nur für Debugging- und Trace-Zwecke verwendet wird, sorgt für eine geringe Komplexität beim Debugging. Es schafft einen einfachen und skalierbaren Zugang zu verschiedenen Debug- und Trace-Komponenten, auch herstellerunabhängig.

Energieverwaltung: Ermöglicht die Durchführung von Debugging in verschiedenen Stromsparmodi. Dies ermöglicht es den Entwicklern, den Zustand des SoCs zu analysieren, auch wenn sich Teile des Systems in einem stromsparenden Zustand befinden. Dabei müssen alle möglichen Low-Power-Mode-Szenarien und deren Einfluss auf das Debugging berücksichtigt werden. Dies betrifft z.B. Einstellungen der Debug-Pins in der Firmware, so dass diese auch im Low-Power-Mode aktiv sind oder eine mögliche manuelle Auswahl geeigneter Taktgeneratoren für Peripheriegeräte. Da viele Chips oft alle Oszillatoren, die keine Low-Speed-Oszillatoren sind, beim Stoppen abschalten, kann es vorkommen, dass ein verwendetes Peripheriegerät seine Taktquelle von einem abgeschalteten Taktgenerator bezieht und ein Low-Speed-Oszillator manuell ausgewählt werden muss.

Testaufwand von Beginn an berücksichtigen

Zusammenfassend lässt sich sagen: System-on-Chips (SoC) benötigen Software als Grundlage für die Funktionalität. Die Integration von Software auf einem SoC ist ein wichtiger Schritt in der Entwicklung und Produktion von eingebetteten Systemen. Bei der Erstellung von Softwarecode können allerdings Fehler auftreten, die die Entwickler mit großem Aufwand, beispielsweise durch Debugging, finden und beseitigen müssen.

Eine umfassende Debug- und Trace-Infrastruktur ist für den Entwicklungs- und Testprozess eines SoCs entscheidend, da sie die Effizienz und Qualität des Produkts maßgeblich beeinflusst. Eine gut dimensionierte Debug-Lösung wie Lauterbach TRACE32 ermöglicht es Entwicklern, Fehler schnell zu identifizieren und die Funktionalität des SoCs im Detail zu analysieren.

Trace-Funktionen bieten eine lückenlose Verfolgung der Programmausführung und machen kritische Fehler und Optimierungspotenziale deutlich sichtbar. Gerade in komplexen, sicherheitskritischen Anwendungen, wie z.B. in der Automobil- oder Medizintechnik, ist eine genaue Überwachung erforderlich, um die Systemintegrität zu gewährleisten und unvorhergesehene Probleme frühzeitig zu erkennen.

Darüber hinaus erleichtern spezielle Trace-Ports und Puffer die Analyse ohne Leistungseinbußen. Ein zielgerichteter Daten-Trace und effiziente Exportmechanismen ermöglichen es Entwicklern, auch in hochkomplexen Systemen den Überblick über alle Prozesse und Speicherzugriffe zu behalten und die Zuverlässigkeit und Stabilität des SoCs langfristig zu sichern. (sg)

(ID:50345846)