-
TECHNISCHES
GEBIET
-
Die
Erfindung betrifft eine Software-Debug-Unterstützung in Mikroprozessoren,
und insbesondere eine mikroprozessor-basierte Vorrichtung mit einem
auf dem Chip angeordneten Instruktions-Abfolge-Cache.
-
TECHNISCHER
HINTERGRUND
-
Der
Anstieg der Software-Komplexität
in Verbindung mit ansteigenden Prozessor-Taktgeschwindigkeiten hat
die Entwickler von Anwender-Software mit zunehmenden Herausforderungen
konfrontiert. Die Kosten für
Entwicklung und Debugging neuer Software-Produkte ist nun ein wichtiger
Faktor bei der Prozessor-Wahl. Ein Versagen eines Prozessors in
der adäquaten
Erleichterung des Software-Debugging verursacht längere Kunden-Entwicklungszeiten
und reduziert die Attraktivität
des Prozessors für
die Verwendung in der Industrie. Das Erfordernis der Schaffung einer
Software-Debug-Unterstützung ist
besonders akut in der Industrie für eingebettete Produkte, bei
denen spezialisierte Produkte oft mit einem Prozessor-Kern kombiniert
werden.
-
Außer den
Software-Ingenieuren sind auch andere Parteien von der Debug-Tool-Konfiguration
betroffen. Zu diesen Partein zählen:
der "Abfolge"-Algorithmus-Entwickler,
der erfasste Software-Abfolge-Daten durchsuchen muss, die den Instruktions-Ausführungs-Fluss
in einem Prozessor reflektiert; der Entwickler von In-circuit-Emulatoren,
der sich mit den Problemen der Signal-Synchronisation, Taktfrequenz
und Abfolge-Bandbreite befasst; und der Prozessor-Hersteller, der
keine Lösung
anstrebt, die erhöhte
Prozessor-Kosten oder Design- und Entwicklungskomplexität verursacht.
-
Bei
Desktop-Systemen stehen derzeit komplexe Multitasking-Operationen
zur Verfügung,
um das Debugging zu unterstützen.
Die anfängliche
Aufgabe jedoch, diese Operationen zuverlässig zu betreiben, erfordert
oft eine spezielle Entwicklungsvorrichtung. Wenngleich sie nicht
den Standard in der Desktop-Umgebung bildet, handelt es sich bei
der Verwendung einer derartigen Vorrichtung oft um den Ansatz, der
in der Industrie eingebetteter Produkte verwendet wird. Häufig werden
logische Analysevorrichtungen, Nurlesespeicher-(ROM-)Emulatoren
und In-circuit-Emulatoren (ICE) verwendet. In-circuit-Emulatoren
bieten in der Tat bestimmte Vorteile gegenüber anderen Debug-Systemen,
wobei sie eine vollständige
Steuerung und eine vollständige
Sichtbarkeit der Speicher- und Register-Inhalte bietet, während die Überlagerung
und der Abfolge-Speicher beim Systemspeicher unzureichend sind.
Die Verwendung herkömmlicher
In-circuit-Emulatoren, bei denen ein Interfacing zwischen einem
Kunden-Emulator-Back-Ende und einer Prozesser-Buchse erforderlich
ist, um die Kommunikation zwischen der Emulations-Vorrichtung und
dem Target-System zu ermöglichen, wird
in der derzeitigen Ära
exotischer Packs und schrumpfender Produktlebenszyklen zunehmend
schwierig und kostenaufwendig.
-
Wenn
man annimmt, dass eine Vollfunktions-In-circuit-Emulation erforderlich
ist, existieren nur wenige bekannte Prozessor-Herstellungstechniken,
die in der Lage sind, die erforderliche Unterstützung für die Emulations-Vorrichtung zu bieten.
Bei den meisten für
Personal-Computer-(PC-) Systeme vorgesehenen Prozessoren wird ein
Multiplex-Ansatz verwendet, bei dem existierende Stifte für die Verwendung
beim Software-Debugging gemultiplext werden. Dieser Ansatz ist in
der Industrie für
eingebettete Produkte, bei denen größere Schwierigkeiten hinsichtlich
einer Überlastung
der Stift-Funktionen bestehen, nicht besonders wünschenswert.
-
Bei
weiteren hochentwickelten Prozessoren werden die Debug-Stifte zeitlich
gemultiplext. Bei derartigen Prozessoren wird der Adress-Bus verwendet,
um während
eines BTA-Zyklus (Branch Target Address) Software-Ablauferfolgungs-Information
mitzuteilen. Der BTA-Zyklus jedoch muss aus dem regulären Bus-Betrieb
entwendet werden. In Debug-Umgebungen, bei denen die Abzweig-Aktivität hoch ist
und die Cache-Treffer-Raten niedrig sind, wird es unmöglich, die
BTA-Zyklen zu verbergen. Der resultierende Konflikt hinsichtlich des
Zugriffs auf den Adress-Bus erfordert ein Prozessor"Zurückdrosseln", um einen Verlust
an Instruktions-Abfolge-Information zu verhindern. In der Kommunikationsindustrie
beispielsweise macht die Software extensiven Gebrauch von Abzweigungen
und erleidet eine unzureichende Cache-Nutzung, was oft einer Zurückdrosselung
um 20 % oder mehr resultiert. Dieser Betrag an Drosselung ist für eingebettete
Produkte, bei denen Echtzeit-Einschränkungen aufgenommen werden
müssen,
inakzeptabel.
-
Gemäß einem
weiteren Ansatz wird ein zweiter "Abfolge"- oder "Slave"-Prozessor
mit dem Hauptprozessor kombiniert, wobei die beiden Prozessoren
miteinander in Schritt arbeiten. Nur der Hauptprozessor ist zum
Abrufen von Instruktionen erforderlich. Der zweite Prozessor, der
Slave-Prozessor, wird zum Überwachen der
abgerufenen Instruktionen auf dem Datenbus verwendet und hält seinen
internen Zustand mit dem Hauptprozessor synchronisiert. Der Adress-Bus
des Slave-Prozessors funktioniert zum Liefern von Abfolge-Information.
Nach dem Hochfahren wird über
einen JTAG(Joint Test Action Group) Eingang der zweite Prozessor
in eine Slave-Betriebsart
geschaltet. Frei von der Notwendigkeit zum Abruf von Instruktionen
liefern sein Adress-Bus und weitere Stifte die erforderliche Abfolge-Information.
-
Ein
weiterer existierender Ansatz beinhaltet das Erstellen einer Debug-Unterstützung in
jedem Prozessor, wobei jedoch nur die erforderlichen Signalstifte
in einer beschränkten
Anzahl von Packen außengebondet werden.
Diese "speziell" gepackten Versionen
des Prozessors werden während
des Debugging verwendet und für
die Endproduktion durch das kleinere Pack ersetzt. Dieser Außenbond-Ansatz
leidet unter dem Erfordernis, zusätzliche Bond-Pad-Stellen in
sämtlichen
fabrizierten Vorrichtungen zu unterstützen. Dies kann bei kleinen Packen
und bei Konzepten mit Pad-Limitationen eine Belastung darstellen,
insbesondere falls durch die Debug-Unterstützungs-Variante eine beträchtliche Anzahl von "Extra"-Stiften erforderlich
ist. Zudem ist die Debug-Fähigkeit
der speziell gepackten Prozessoren bei typischen prozessor-basierten
Produktionssystemen unvermeidlich.
-
Bei
einem wiederum weiteren Ansatz (dem "Background Debug Mode" von Motorola, Inc.)
ist eine begrenzte 0n-chip-Schaltung für die basale Betriebssteuerung
erforderlich. Obwohl es sich um ein speziell zugewiesenes serielles
Link handelt, das zusätzliche
Stifte erfordert, ermöglicht
dieser Ansatz einem Debugger, das Target-System zu starten und zu
stoppen und basale Code-Breakpoints einzuführen, indem spezielle Instruktionen
in den Systemspeicher eingegeben werden. Nachdem ein Anhalten erfolgt
ist, werden spezielle Instruktionen verwendet, um Speichervariablen
und Registerinhalte zu inspizieren. Dieser serielle Link jedoch
bietet keine Abfolge-Unterstützung – es sind
zusätzliche
speziell vorgesehene Stifte und kostenaufwendige externe Abfolge-Erfassungs-Hardware
erforderlich, um Instruktions-Abfolge-Daten zu liefern. Die Europäische Patentanmeldung
EP-A-O 762 276 von Motorola beschreibt ein Debug-Modul eines Datenprozessors,
das einen parallelen Ausgangs-Port aufweist, um interne Betriebsinformation über ein
DDATA-Signal und ein PST-Signal zu liefern. Das DDATA-Signal liefert
Daten, die Operandenwerte reflektieren, und das PSI-Signal liefert
kodierte Status-Information, die einen Ausführungsstatus der zentralen
Verarbeitungseinheit reflektiert.
-
Somit
leiden die derzeitigen Lösungen
für das
Software-Debugging unter einer Vielzahl von Beschränkungen,
zu denen zählen:
erhöhte
Packungs- und Entwicklungskosten,
Schaltungskomplexität,
Prozessor-Drosselung und Schwierigkeiten bei der Bandbreiten-Anpassung.
Ferner existiert derzeit kein adäquates kostengünstiges
Verfahren zum Erhalt von Abfolge-Informa tion. Die Limitationen der
existierenden Lösungen werden
in der Zukunft wahrscheinlich noch verschärft, wenn die Taktfrequenzen
interner Prozessoren weiterhin zunehmen.
-
OFFENBARUNG
DER ERFINDUNG
-
Kurz
ausgedrückt
weist eine prozessor-basierte Vorrichtung gemäß der vorliegenden Erfindung
einen On-chip-Instruktions-Abfolge-Cache auf, der in der Lage ist,
Information zum Rekonstruieren des Instruktions-Ausführungs-Flusses
zu liefern. Die Abfolge-Information kann erfasst werden, ohne den
normalen Prozessorbetrieb anzuhalten. Es sind sowohl serielle als
auch parallele Kommunikationskanäle
vorgesehen, um die Abfolge-Information an externe Vorrichtungen
zu übermitteln.
Bei der offenbarten Ausführungsform
der Erfindung werden die Steuerbarkeit und Beobachtbarkeit des Instruktions-Abfolge-Cache
mittels eines Software-Debug-Ports erzielt, der ein für IEEE-1
149.1–1990
geeignetes JTAG- (Joint Test Action Group) Interface oder ein ähnliches
genormtes Interface verwendet, das in die prozessorbasierte Vorrichtung
integriert ist.
-
Gemäß einem
ersten Aspekt wird mit der vorliegenden Erfindung eine prozessorbasierte
elektronische Vorrichtung geschaffen, die in der Lage ist, eine
Folge aus externen Quellen erhaltener Instruktionen auszuführen, wobei
die prozessor-basierte Vorrichtung mit Pins zur Verbindung mit externen
Leitern versehen ist, wobei die prozessor-basierte elektronische
Vorrichtung gekennzeichnet ist durch:
einen mit einem Prozessor-Kern
verbundenen Abfolge-Cache zum Speichern von Abfolge-Information,
welche die Reihenfolge angibt, in der die Instruktionen von dem
Prozessor-Kern ausgeführt
werden, wobei der Abfolge-Cache
mehrere Speicherelemente aufweist, von denen jedes in der Lage ist,
Abfolge-Information zu speichern, die Abfolge-Information mehrere
Instruktions-Abfolge-Aufzeichnungen aufweist, die Adress- und Daten-Information enthalten,
der Abfolge-Cache derart konfiguriert ist, dass er auf einen Lade-Befehl hin Daten aus
dem Prozessor-Kern lädt,
und derart konfiguriert ist, dass der Prozessor-Kern auf einen Aufruf-Befehl
hin Daten aus dem Abfolge-Cache aufruft;
und einen zwischen
dem Abfolge-Cache und gewählten
der Pins angeordneten Kommunikationskanal zum Übertragen von Abfolge-Information
von dem Abfolge-Cache zu externen Vorrichtungen.
-
Gemäß einem
zweiten Aspekt wird mit der vorliegenden Erfindung ein Verfahren
zum Analysieren von Abfolge-Information in einer prozessorbasierten
Vorrichtung mit einem Prozessor-Kern angegeben, das folgende Schritte
aufweist:
Bereitstellen eines Abfolge-Cache in der prozessor-basierten
Vorrichtung, wobei der Abfolge-Cache mehrere Speicherelemente aufweist,
die zum Speichern von Abfolge-Information in der Lage sind;
Erfassen
von Abfolge-Information aus dem Prozessor-Kern, welche die Reihenfolge
angibt, in der die Folge von Instruktionen durch den Prozessor-Kern ausgeführt wird;
Speichern
der Abfolge-Information in den Abfolge-Cache-Speicherelementen als
Instruktions-Abfolge-Aufzeichnungen;
Aufrufen der Abfolge-Information
durch den Prozessor-Kern aus den Abfolge-Cache-Speicherelementen
auf einen Aufruf-Befehl hin; und
Laden weiterer Information
aus dem Prozessor-Kern in die Abfolge-Cache-Speicherelemente auf einen Lade-Befehl
hin;
Bereitstellen eines Kommunikationskanals aus dem Abfolge-Cache
zu gewählten
Pins der prozessor-basierten Vorrichtung; und
Zuführen der
Abfolge-Information aus dem Abfolge-Cache zu den gewählten Pins über den
Kommunikationskanal.
-
Vorzugsweise
wird die in dem Instruktions-Abfolge-Cache gespeicherte Information
derart "komprimiert", dass ein kleinerer
Cache verwendet werden kann. Ferner erlaubt das Komprimieren der
Abfolge-Daten, dass externe Hardware mit normalen Busgeschwindigkeiten
arbeitet, selbst wenn der interne Prozessor sehr viel schneller
arbeitet. Somit kann mit einer gemäß der vorliegenden Erfindung
ausgebildeten prozessor-basierten Vorrichtung weniger kostenaufwendige
externe Erfassungs-Hardware verwendet werden.
-
Wenn
bei der offenbarten Ausführungsform
der Erfindung eine Adresse in einem Instruktions-Fluss aus einem
Programm-Bild (Objekt-Modul) erhalten werden kann, dann ist sie
nicht in den Abfolge-Daten vorgesehen. Vorzugsweise werden nur Instruktionen
mitgeteilt, die den Instruktions-Fluss unterbrechen, und ferner
nur Instruktionen, bei denen die Trarget-Adresse in irgendeiner
Weise abhängig
ist. Zu derartigen "Unterbrechungs"-Ereignissen zählen z.B.
Anruf-Instruktionen oder bedingungslose Abzweig-Instruktionen, bei
denen die Target-Adresse aus einem Datenregister oder einer anderen
Speicherstelle wie z.B. einem Stapel vorgelegt wird. Im Fall zahlreicher
bedingungsloser Abzweige oder sequentieller Instruktionen wird kein
Eintrag in dem Abfolge-Cache platziert, da die Target-Adresse vollständig aus
dem Instruktions-Fluss bestimmt werden kann. Zu der weiteren Information,
die von dem Instruktions-Abfolge-Cache geliefert wird, zählen: die
Target-Adresse einer
Trap- oder Interrupt-Handhabungsvorrichtung, die Target-Adresse einer Rücklauf-Instruktion,
Adressen aus den Abfolge-Rückläufen, Task-Identifikationen
und Abfolge-Erfassungs-Stop-/Start-Information. Diese Technik reduziert
die Menge an Information, die aus dem Abfolge-Cache an die externe
Debug-Hardware übermittelt
wird.
-
Somit
wird mit der Erfindung eine prozessor-basierte Vorrichtung geschaffen,
die eine präzise,
hochleistungsfähige
Lösung
für das
Vorlegen von In struktions-Abfolge-Information bietet. Der offenbarte On-chip-Instruktions-Abfolge-Cache behebt
verschiedenen der Bandbreiten- und Taktsynchronisationsprobleme,
die bei zahlreichen existierenden Lösungsansätzen existieren.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Ein
besseres Verständnis
der vorliegenden Erfindung ergibt sich aus der folgenden detaillierten
Beschreibung in Verbindung mit den folgenden Zeichnungen, in denen
folgendes gezeigt ist:
-
1 zeigt
ein Blockschaltbild einer Software-Debug-Umgebung, bei der eine
Software-Debug-Lösung
gemäß der vorliegenden
Erfindung verwendet wird;
-
2 zeigt
ein Blockschaltbild zur Darstellung von Einzelheiten eines Beispiels
eines eingebetteten Prozessor-Produkts, das einen On-chip-Instruktions-Abfolge-Cache
gemäß der vorliegenden
Erfindung aufweist;
-
3 zeigt
ein vereinfachtes Blockschaltbild zur Darstellung des Verhältnisses
zwischen einem Beispiel eines Instruktions-Abfolge-Cache und anderen Komponenten
eines eingebetteten Prozessor-Produkts gemäß der vorliegenden Erfindung;
-
4 zeigt
ein Flussdiagramm zur Veranschaulichung des Durchlaufs eines Software-Debug-Befehls gemäß einer
Ausführungsform
der Erfindung;
-
5 zeigt
ein Flussdiagramm zur Veranschaulichung des Durchlaufs des verbesserten
Software-Port-Befehls gemäß einer
zweiten Ausführungsform
der Erfindung; und
-
6A–6G zeigen
das generelle Format verschiedener Abfolge-Cache-Einträge zur Mitteilung einer Instruktions-Ausführung gemäß der Erfindung.
-
ART(EN)
ZUM AUSFÜHREN
DER ERFINDUNG
-
In
den nun zu erläuternden
Zeichnungen zeigt 1 ein Beispiel einer Software-Debug-Umgebung zur
Veranschaulichung einer vorgesehenen Verwendung der vorliegenden
Erfindung. Es ist ein Target-System T gezeigt, das eine eingebettete
Prozessor-Vorrichtung gemäß der vorliegenden
Erfindung enthält,
die mit dem System-Speicher 106 verbunden ist. Die eingebettete
Prozessor-Vorrichtung 102 enthält einen Prozessor-Kern 104,
einen Instruktions-Abfolge-Cache 200 (2)
und einen Debug-Port 100. Obwohl dies nicht als kritisch
für die
Erfindung angesehen wird, kann die eingebettete Prozessor-Vorrichtung 102 (nicht
gezeigte) zusätzliche
Schaltungen zum Durchführen
anwendungsspezifischer Funktionen enthalten, oder sie kann in Form
eines freistehenden Prozessors oder Digitalsignalprozessors ausgebildet
sein. Vorzugsweise wird bei dem Debug-Port 100 ein für IEEE-1149.1–1990 geeignetes
JTAG-Interface oder ein anderes standardisiertes Seriell-Port-Interface
verwendet.
-
Ein
Host-System H wird zur Anwendung der Debug-Steuerungs-Software 112 verwendet,
um auf höherer
Ebene angesetzte Befehle zu übertragen
und die Extraktion und Analyse von Debug-Information, die von dem
Taget-System T erzeugt
wird, zu steuern. Das Host-System H und das Target-System T der offenbarten Ausführungsform
der Erfindung kommunizieren über
ein serielles Link 110. Die meisten Computer sind mit einem
seriellen oder parallelen Interface ausgestattet, das mittels eines
seriellen Konnek tors 108 in kostengünstiger Weise mit dem Debug-Port 100 verbunden
werden kann, so dass viele verschiedene Computer als Host-System
H funktionieren können.
Alternativ kann der serielle Konnektor 108 durch eine für höhere Geschwindigkeit
ausgelegte JTAG-/Netzwerk-Konvertierungs-Ausrüstung ersetzt werden. Ferner
kann das Target-System T zum internen Analysieren von Debug-/Abfolge-Information
konfiguriert sein.
-
Die
nun zu erläuternde 2 zeigt
Einzelheiten einer eingebetteten Prozessor-Vorrichtung 102 gemäß der vorliegenden
Erfindung. Zusätzlich
zu dem Prozessor-Kern 104 zeigt 2 verschiedene
Elemente einer fortentwickelten Ausführungsform des Debug-Port 100,
die zum Verwenden und Steuern des Abfolge-Cache 200 in
der Lage ist. Zahlreiche weitere Konfigurationen sind möglich, wie
Fachleuten auf dem Gebiet ersichtlich ist, und die verschiedenen
Komponenten der Prozessor-Vorrichtung 102, die nachstehend
beschrieben werden, sind zur Veranschaulichung der Vorteile gezeigt,
die durch das Vorsehen eines On-chip-Abfolge-Cache 200 erzielt
werden.
-
Signifikant
für die
offenbarte Ausführungsform
der Erfindung ist, dass die Abfolge-Steuerungs-Schaltung 218 und
der Abfolge-Cache 200 derart arbeiten, dass die Abfolge-Information
zum Rekonstruieren des Instruktions-Ausführungs-Flusses
in dem Prozessor-Kern 104 liefern. Die Abfolge-Steuerungs-Schaltung 218 unterstützt das "Ablaufverfolgen" zu einem Abfolge-Pad-Intergface-Port 220 oder
zu einem Instruktions-Abfolge-Cache 200 und ermöglicht dem
Benutzer eine Steuerung zum selektiven Aktivieren der Instruktions-Abfolge-Erfassung.
Zu den weiteren Merkmalen, die durch die Abfolge-Steuerungs-Schaltung 218 ermöglicht werden,
zählen
die Programmierbarkeit der Synchronisationsadress-Erzeugung und
der benutzerspezifizierten Abfolge-Aufzeichnungen, wie nachstehend
eingehender erläutert
wird. Die Abfolge-Steuerungs-Schaltung 218 steuert ferner
einen Abfolge-Pad-Interface-Port 220. Bei Benutzung ist
der Abfolge-Pad-Interface-Port 220 in der Lage, Abfolge-Daten
zu liefern, während
der Prozessor-Kern 104 Instruktion ausführt, obwohl Taktsynchronisations-
und andere Probleme auftreten können.
Der Instruktions-Abfolge-Cache 200 befasst sich mit zahl reichen
dieser Probleme, wobei er die Bandbreiten-Anpassung verbessert und
die Notwendigkeit beseitigt, eine Zurückdrosselungs-Schaltung in
dem Prozessor-Kern 104 vorzusehen.
-
Bei
der beschriebenen Ausführungsform
der Erfindung brauchen zumindest die herkömmlichen JTAG-Stifte nicht
in dem Software-Debug-Port 100 unterstützt zu werden. Die JTAG-Stifte
werden essentiell zu einem Transportmechanismus, wobei existierende
Stifte verwendet werden, um Befehle einzugeben, die von dem Prozessor-Kern 104 ausgeführt werden
sollen. Insbesondere sind das Tesr-Taktsignal TCK, das Test-Modus-Wahl-Signal
TMS, das Test-Daten-Eingangssignal TDI und das Test-Daten-Ausgangssignal
TDO, die von dem JTAG-Test-Zugriffs-Port-(TAP)Controller 204 geliefert
und gesteuert werden, herkömmliche JTAG-Unterstützungs-Signale
und Fachleuten auf dem Gebiet bekannt. Wie nachstehend noch eingehender zu
erläutern
ist, wird durch eine "fortentwickelte" Ausführungsform
des Debug-Ports 100 das Befehls-Bestätigungssignal CMDACK, das UnterbrechungsRequest-/Ablauferfassungs-Signal
BRTC, das Stop-Übertragungs-Signal
STOPTX und das Trigger-Signal TRIG zusätzlich an das Standard-JTAG-Interface übermittelt. Diese
zusätzlichen
Signale ermöglichen
eine extreme Präzision
der externen Unterbrechungspunkt-Veranlassung und -Überwachung,
das Triggern externer Vorrichtungen auf externe Unterbrechungspunkte
hin und das Entfallen des Status-Abfragens des JTAG-Seriell-Interface.
Diese "Seitenband"-Signale bieten eine
zusätzliche
Funktionalität
und verbessern die Kommunikationsgeschwindigkeiten für den Debug-Port 100.
Diese Signale helfen ferner bei dem Betrieb eines optionalen Parallel-Ports 214,
der an speziellen Außenbond-Versionen
der offenbarten eingebetteten Prozessor-Vorrichtung 102 vorgesehen
ist.
-
Über die
herkömmlichen
JTAG-Signale erhält
der JTAG-TAP-Controller 204 Standard-JTAG-Seriell-Daten
und Steuerdaten. Wenn eine DEBUG-Instruktion in das JTAG-Instruktions-Register
geschrieben worden ist, wird ein serieller Debug-Shifter 212 derart
mit dem JTAG-Testdaten-Eingangssignal TDI und dem Testdaten-Ausgangssignal
TDO verbunden, dass Befehle und Daten dann in die Debug-Register 210 geladen und
aus diesen gelesen werden können.
Bei der offenbarten Ausführungsform
der Erfindung weisen die Debug-Register 210 zwei Debug-Register
zum Senden (TX_DATA-Register) und Empfangen (RX_DATA-Register) von
Daten, ein Instruktions-Abfolge-Konfigurationsregister
(ITCR) und ein Debug-Steuer-Status-Register (DCSR) auf.
-
Eine
Steuer-Interface-Zustandsmaschine 206 koordiniert das Laden/Lesen
von Daten in den bzw. aus dem Debug-Shifter 212 und in
die bzw. aus den Debug-Registern 210. Ein Befehls-Dekodier-
und Verarbeitungs-Block 208 dekodiert Befehle/Daten und
sendet sie an die Prozessor-Interface-Logik 202 und die
Abfolge-Debug-Interface-Logik 216. Zusätzlich zum Durchführen anderer
Funktionen koordinieren die Abfolge-Debug-Interface-Logik 216 und
die Abfolge-Steuerlogik 218 die Kommunikation von Abfolge-Information
aus dem Abfolge-Cache 200 zu dem TAP-Controller 204.
Die Prozessor-Interface-Logik 202 kommuniziert direkt mit dem
Prozessor-Kern 104 sowie mit der Abfolge-Steuerlogik 218.
Wie nachstehend detaillierter beschrieben wird, kommuniziert die
parallele Port-Logik 214 mit der Steuer-Interface-Zustandsmaschine 206 und
den Debug-Registern 210, um parallele Lese-/Schreib-Operationen
bei optionalen Außenbond-Versionen
der eingebetteten Prozessor-Vorrichtung 102 durchzuführen.
-
Bevor
die Debug-Information unter Verwendung nur herkömmlicher JTAG-Signale über den
Debug-Port 100 übermittelt
wird, wird der Port 100 aktiviert, indem die öffentliche
JTAG-Instruktion DEBUG in ein JTAG-Instruktions-Register geschrieben
wird, das in dem TAP-Controler 204 enthalten ist. Wie nachstehend gezeigt,
handelt es sich bei dem JTAG-Instruktions-Register der offenbarten Ausführungsform
um ein 38-Bit-Register, das ein 32-Bit-Datenfeld (debug_data [31:0]),
ein Vier-Bit-Befehlsfeld zum Verweisen auf verschiedene interne
Register und vom Debug-Port geleistete Funktionen, ein Befehl-anhängig-Flag
und ein Befehl-beendet-Flag aufweist. Es besteht die Möglichkeit,
dass einige Befehle Bits aus dem debug_data-Feld als Unterfeld verwenden,
um die Anzahl verfügbarer
Befehle zu erweitern.
-
JTAG-Instruktions-Register.
-
Das
JTAG-Instruktions-Register wird durch Toggeln des Test-Modus-Wähl-Signals TMS gewählt. Das Test-Modus-Wähl-Signal
TMS ermöglicht
ein Verändern
des JTAG-Wegs des Taktens in dem Abtastweg, so dass mehrere Wege
variabler Länge
verwendet werden können.
Vorzugsweise kann auf das JTAG-Instruktions-Register über einen
kurzen Weg zugegriffen werden. Dieses Register ist derart konfiguriert,
dass es ein "weiches" Register zum Halten
von Werten enthält,
die in spezifizierte System-Register geladen oder aus diesen empfangen
werden sollen.
-
Die
nun zu erläuternde 3 zeigt
ein vereinfachtes Blockschaltbild zur Veranschaulichung des Verhältnisses
zwischen dem Beispiel eines Instruktions-Abfolge-Cache 200 und weiteren
Komponenten einer eingebetteten Prozessor-Vorrichtung 102 gemäß der vorliegenden
Erfindung. Bei einer vorgesehenen Ausführungsform der Erfindung ist
der Abfolge-Cache 200 ein 128-Eintrags-First-in-first-out-(FIFO-)Zirkulär-Cache, der
die aktuellsten Abfolge-Einträge
aufzeichnet. Durch Vergrößerung der
Bemessung des Abfolge-Cache 200 wird
die Menge an Instruktions-Cache-Information, die erfasst werden
kann, vergrößert, obwohl
auch die Menge an erforderlichem Siliciumbereich zunehmen kann.
-
Wie
nachstehend noch genauer beschrieben wird, werden in dem Abfolge-Cache 200 gemäß der offenbarten
Ausführungsform
der Erfindung mehrere Abfolge-Einträge von 20 Bit (oder mehr) gespeichert,
welche die Reihenfolge angeben, in der Instruktionen von dem Prozessor-Kern 104 ausgeführt werden.
Weitere Information, wie z.B. Task-Identifikationen und Abfolge-Erfassungs-Stop-/Start-Information,
kann ebenfalls in dem Abfolge-Cache 200 platziert werden.
Der Inhalt des Abfolge-Cache 200 wird an externe Hardware,
wie z.B. das Host-System H, entweder über serielle oder paralle- le Abfolge-Stifte 230 übermittelt.
Alternativ kann das Target-System T zum internen Prüfen des
Inhalts des Abfolge-Cache 200 konfiguriert sein.
-
4 zeigt
ein auf hoher Ebene angesetztes Flussdiagramm des Befehls-Durchlaufs bei Verwendung eines
Standard-JTAG-Interface. Beim Eintritt in den Debug-Modus in Schritt 400 wird
in Schritt 402 die DEBUG-Instruktion in den TAP-Controller 204 geschrieben.
Als nächstes
wird in Schritt 404 der 38-Bit-Seriell-Wert als ganzes
eingeschoben, wobei das Befehl-anhängig-Flag gesetzt und die gewünschten
Daten (falls zutreffend, andernfalls null) in dem Datenfeld vorhanden
sind. Der Steuervorgang rückt
auf Schritt 406 vor, in dem der anhängige Befehl geladen/entladen
wird und das Befehlbeendet-Flag geprüft wird. Das Beenden eines
Befehls beinhaltet typischerweise das Übertragen eines Werts zwischen
einem Datenregister und einer Prozessorregister- und/oder Speicher-IO-Stelle.
Nachdem der Befehl abgeschlossen worden ist, löscht der Prozessor 104 das
Befehl-anhängig-Flag
und setzt das Befehl-beendet-Flag, wobei gleichzeitig ein Wert in dem
Datenfeld gespeichert wird, falls zutreffend. Das gesamte 38-Bit-Register
wird abgetastet, um die Befehl-beendet- und Befehl-anhängig-Flags
zu überwachen.
Falls das Befehl-anhängig-Flag
auf Null rückgesetzt ist
und das Beendet-Flag auf Eins gesetzt ist, ist der vorherige Befehl
beendet worden. Der Status der Flags wird von der Steuer-Interface-Zustandsmaschine 206 erfasst.
Eine Slave-Kopie des Status des Flag wird intern gespeichert, um
festzustellen, ob die nächste
Instruktion geladen werden soll. Die Slave-Kopie wird aufgrund der Möglichkeit
einer Veränderung
des Flag-Status zwischen Zuständen
des TAP-Controllers 204 aufrechterhalten. Dies gibt dem
Prozessor 104 die Möglichkeit,
festzustellen, ob die vorherige Instruktion abgeschlossen worden
ist, bevor die nächste
Instruktion geladen wird.
-
Falls
gemäß der Bestimmung
in Schritt 408 das Beendet-Flag nicht gesetzt ist, rückt der
Steuervorgang auf Schritt 410, und das Laden/Entladen des
38-Bit-Befehls wird wiederholt. Ferner wird das Befehls-beendet-Flag
geprüft.
Der Steuervorgang kehrt dann auf Schritt 408 zurück. Falls
gemäß der Bestimmung
in Schritt 408 das Beendet-Flag gesetzt ist, kehrt der Steuervorgang
auf Schritt 406 zurück,
um den nächsten Befehl
zu verarbeiten. Der Austritt aus dem DEBUG-Modus erfolgt über einen
typischen JTAG-Vorgang.
-
Nochmals
gemäß 2 werden
die bereits erwähnten
optischen Seitenband-Signale bei dem fortentwickelten Debug-Port 100 verwendet,
um zusätzliche
Funktionen bereitzustellen. Die optischen Seitenband-Signale enthalten
ein Unterbrechungs-Request-/Abfolge-Erfassungs-Signal BRTC; das
als Unterbrechungs-Request-Signal oder als Abfolge-Erfassungs-Aktivierungs-Signal
funktionieren kann, je nach dem Status des in dem Debug-Steuer-/Status-Register
gesetzten Bit. Falls das Unterbrechungs-Request/Abfolge-Erfassungs-Signal
BRTC derart gesetzt ist, dass es als Unterbrechungs-Request-Signal
funktionieren kann, wird es aktiviert, um den Prozessor 104 zu
veranlassen, in den Debug-Modus einzutreten. (Der Prozessor kann auch
gestoppt werden, indem ein Befehl von Anhalten über die konventionellen JTAG-Signale
eingescannt wird.) Falls das Signal derart gesetzt ist, dass es
als Abfolge-Erfassungs-Aktivierungs-Signal funktioniert, ermöglicht das
Aktivieren des Unterbrechungs-Request-/Abfolge-Erfassungs-Signals
BRTC eine Abfolge-Erfassung. Durch Deaktivieren des Signals wird
die Erfassung ausgeschaltet. Das Signal wird bei der nächsten Instruktions-Grenze wirksam, nachdem
es detektiert worden ist, und es wird mit, dem internen Prozessor-Takt synchronisiert.
Das Unterbrechungs-Request-/Abfolge-Erfassungs-Signal BRTC kann
zu jedem Zeitpunkt aktiviert werden.
-
Das
Trigger-Signal TRIG ist derart ausgelegt, dass immer dann pulsiert,
wenn ein Intern-Prozessor-Unterbrechungspunkt aktiviert wird. Das
Trigger-Signal TRIG
kann zum Triggern einer externen Erfassungsvorrichtung wie z.B.
einer logischen Analysevorrichtung verwendet werden und ist synchronisiert
mit dem Abfolge-Aufzeichnungs-Erfassungs-Taktsignal TRACECLK. Wenn
ein Unterbrechungspunkt generiert wird, wird das Ereignis mit dem
Abfolge-Erfassungs-Taktsignal TRACECLK synchronisiert, woraufhin
das Trigger-Signal TRIG während
der Dauer der Abfolge-Erfassung aktivgehalten wird.
-
Das
Stop-Übertragungssignal
STOPTX wird aktiviert, wenn der Prozessor 104 in den DEBUG-Modus eingetreten
ist und für
eine Register-Abfrage/Modifikation, Speicher- oder I/O-Lesevorgänge und
-Schreibvorgänge
durch den Debug-Port 100 bereit ist. Bei der offenbarten
Ausführungsform
der Erfindung reflektiert das Stop-Übertragungssignal STOPTX den
Zustand eines Bits in dem Debug-Steuer-Status-Register (DCSR). Das Stop-Übertragungssignal
STOPTX ist synchron mit dem Abfolge-Erfassungs-Taktsignal TRACECLK.
-
Das
Befehls-Bestätigungs-Signal
CMDACK wird anhand von 5 beschrieben, die einen vereinfachten
Befehls-Durchlauf bei dem fortentwickelten Debug-Port 100 gemäß 2 zeigt.
Wiederum wird, um das Target-System T in den DEBUG-Modus zu versetzen,
in Schritt 502 eine DEBUG-Instruktion in den TAP-Controller 204 geschrieben.
Der Steuervorgang rückt
auf Schritt 504, und das Befehls-Bestätigungs-Signal CMDACK wird
in dem Host-System
H überwacht,
um den Befehls-Beendigungs-Status festzustellen. Das Signal wird
von dem Target-System T gleichzeitig mit dem Befehlbeendet-Flag
auf high gesetzt und bleibt high, bis der nächste Schiebe-Zyklus beginnt. Wenn
das Befehls-Bestätigungs-Signal
CMDACK verwendet wird, ist es nicht erforderlich, das JTAG-Instruktions-Register
herauszuschieben, um den Befehl-beendet-Flag-Status zu erfasssen.
Das Befehls-Bestätigungs-Signal
CMDACK geht bei der nächsten
Anstiegsflanke des Tast-Taktsignals TCK auf high über, nachdem
das Befehl-beendet-Flag von null auf eins gewechselt hat. Bei Verwendung der
fortentwickelten JTAG-Signale
wird eine neue Schiebe-Seguenz (Schritt 506) von dem Host-System H erst dann
gestartet, wenn das Befehls-Bestätigungs-Signal
CMDACK auf high gesetzt worden ist. Das Befehls-Bestätigungs-Signal
CMDACK ist synchron mit dem Test-Taktsignal TCK. Das Test-Taktsignal
TCK braucht nicht jederzeit getaktet zu werden, wird jedoch idealerweise
durchgehend getaktet, wenn auf eine Reaktion des Bestätigungs-Signals
CMDACK gewartet wird.
-
BETRIEBSSYSTEM-/ANWENDUNGS-KOMMUNIKATION ÜBER DEN
DEBUG-PORT 100 In
dem Debug-Register-Block 210 ist ferner ein Instruktions-Abfolge-Konfigurations-Register
(ITCR) enthalten. Dieses 32-Bit-Register ist für die Aktivierung/Deaktivierung
und die Konfiguration der Instruktions-Abfolge-Debug-Funktionen zuständig. Es
können
zahlreiche derartige Register vorgesehen sein, einschließlich verschiedener
Ebenen der Abfolgeverfolgung, der Abfolge-Synchronisationsstärke-Zählstände, der
Abfolge-Initialisierung, der Instruktions-Abfolge-Modi, der Taktteilerverhältnis-Information
sowie zusätzlicher
Funktionen, die in der folgenden Tabelle gezeigt sind. Auf das ITCR
wird durch einen JTAG-Tnstruktions-Register-Schreib-/Lese-Befehl
zugegriffen, wie es bei den anderen Registern des Debug-Register-Blocks 210 der
Fall ist, oder über eine
reservierte Instruktion.
-
Instruktions-Abfolge-Konfigurations-Register
(ITCR).
-
Ein
weiteres Debug-Register, das Debug-Steuer-/Status-Register (DCSR),
liefert einen Hinweis darauf, wann der Prozessor 104 in
den Debug-Modus eingetreten ist, und ermöglicht, dass der Prozessor 104 durch
das fortentwickelte JTAG-Interface in den DEBUG-Modus gezwungen
wird. Wie in der folgenden Tabelle gezeigt, aktiviert das DCSR auch
verschiedene Steuer-Merkmale,
wie z.B.: Zwingen eines Ready-Signals in den Prozessor 104,
Steuern des Speicher-Zugriffs-Raums für durch den Debug-Port initiierte
Zugriffe, Cache-Flush-Deaktivierung beim Eintritt in den DEBUG-Modus,
die TX- und RX-Bits, die den Parallel-Port 214 betreffenden
Aktivierungen, erzwungenen Unterbrechungen, erzwungenen globalen
Rücksetzungen
und andere Funktionen.
-
-
Debug-Steuer-/Status-Register
(DCSR).
-
Wenn
es in einer Cross-Debug-Umgebung wie derjenigen gemäß 1 für den an
dem Target-System T betriebenen Parent-Task erforderlich, Information
an die Host-Plattform zu senden, die das System steuert. Diese Daten
können
z.B. aus einem Typen-Strom von einem Printf()-Anruf oder aus Register-Information aus
einem Task's Control
Block (TCB) bestehen. Ein vorgesehenes Verfahren zum Übertragen
der Daten besteht darin, dass das Betriebssystem die Daten in einem
bekannten Bereich platziert und dann über eine Trap-Instruktion veranlasst,
dass der Eintritt in den DEBUG-Modus
erfolgt.
-
Über die
Befehle am Debug-Port 100 kann das Host-System H dann den
Grund bestimmen, aus dem der Eintritt in den DEBUG-Modus erfolgt
ist, und es kann reagieren, indem es die Daten aus dem reservierten Bereich
aufruft. Während
sich der Prozessor 104 in dem DEBUG-Modus befindet, wird
jedoch der normale Prozessor-Ausführungsvorgang gestoppt. Wie
oben erwähnt,
ist dies bei zahlreichen Echtzeit-Systemen unerwünscht.
-
Gemäß der vorliegenden
Erfindung wird diese Situation gehandhabt, indem in dem Debug-Port 100 zwei
Debug-Register für
das Senden (TX_DATA-Register) und das Empfangen (RX_DATA-Register)
vorgesehen sind. Auf diese Register kann mittels der Soft-Adress-
und JTAG-Instruktions-Register-Befehle
zugegriffen werden. Wie angemerkt, wird, nachdem das Host-System H eine Debug-Instruktion
in das JTAG-Instruktions-Register geschrieben hat, der serielle
Debug-Shifter 212 mit der Test-Daten-Eingangssignal-TDI-Leitung und
der Test-Daten-Ausgangssignal-TDO-Leitung verbunden.
-
Wenn
der Prozessor 104 den Code ausführt, der ihn zum Senden von
Daten veranlasst, testet er zuerst ein TX-Bit in dem ITCR. Falls
das TX-Bit auf Null gesetzt ist, dann führt der Prozessor 104 eine
Prozessor-Instruktion aus (entweder einen Speicher- oder einen I/O-Schreibvorgang),
um die Daten in das TX-DAT-Register zu übertragen. Der Debug-Port 100 setzt
das TX-Bit in dem DCST und dem ITCR, was dem Host-System anzeigt,
dass die Bereitschaft zum Senden von Daten besteht. Ferner wird
der STOPTX-Stift auf high gesetzt. Nachdem das Host-System das Lesen
der Sende-Daten aus dem TX_DATA-Register beendet hat, wird das TX-Bit
auf Null gesetzt. Dann wird ein TXINTEN-Bit in dem ITCR gesetzt,
um ein Signal zum Unterbrechen des Prozessors 104 zu erzeugen.
Das Interrupt wird nur erzeugt, wenn das TX-Bit in den ITCR-Übergängen null
beträgt.
Wenn das TXINTEN-Bit nicht gesetzt ist, fragt der Prozessor 104 das
ICTR ab, um den Status des TX-Bits zwecks weiterer Übertragung
von Daten zu bestimmen.
-
Wenn
das Host-System N Daten senden möchte,
testet es zuerst ein RX-Bit in dem ITCR. Falls das RX-Bit auf Null
gesetzt ist, schreibt das Host-System N die Daten in das RX_DATA-Register,
und das RX-Bit wird sowohl in dem DCSR als auch in dem ITCR auf
Eins gesetzt. Dann wird ein RXINT-Bit in dem ITCR gesetzt, um ein
Signal zum Unterbrechen des Prozessors 104 zu erzeugen.
Dieses Interrupt wird nur erzeugt, wenn das RX in dem ITCR auf Eins übergeht.
Wenn das RXINTEN-Bit nicht gesetzt ist, fragt der Prozessor 104 das
ITCR ab, um den Status des RX-Bits zu prüfen. Falls das RX-Bit auf Eins
gesetzt ist, wird die Prozessor-Instruktion ausgeführt, um
Daten aus dem RX_DATA-Register zu lesen. Nachdem die Daten von dem
Prozessor 104 aus dem RX_DATA-Register gelesen worden sind,
wird das RX-Bit auf Null gesetzt. Das Host-System H liest das ITCR
kontinuierlich, um zwecks weiteren Senden von Daten den Status des
RX-Bits zu bestimmen.
-
Diese
Technik ermöglicht
einem Betriebssystem oder einer Anwendung, mit dem Host-System zu kommunizieren,
ohne dass der Ausführungsvorgang
des Prozessors 104 gestoppt wird. Die Kommunikation wird
in praktischer Weise über
den Debug-Port 100 mit minimalem Einfluss auf On-chip-An wendungs-Ressourcen
erzielt. In manchen Fällen
ist es nötig,
System-Interrupts zu deaktivieren. Dies erfordert, dass die RX- und
TX-Bits durch den Prozessor geprüft
werden. In dieser Situation wird das Kommunikations-Link in einem abgefragten
Modus betrieben.
-
PARALLEL-INTERFACE ZUM
DEBUG-PORT 100
-
Einige
eingebettete System verlangen, dass die Instruktions-Abfolge überwacht
wird, während
die I/O- und Datenverarbeitungs-Operationen aufrechterhalten werden.
Ohne die Verwendung eines Multi-Tasking-Betriebssystems wird bevorzugt,
dass ein eine Außenbond-Version
der eingebetteten Prozessor-Vorrichtung 102 die Abfolge-Daten
liefert, da das Überprüfen des
Abfolge-Cache 200 über
den Debug-Port 100 verlangt, dass der Prozessor 104 gestoppt
wird.
-
Bei
der offenbarten Ausführungsform
der Erfindung ist ferner ein paralleler Port 214 bei einer
otionalen Außenbond-Version
der eingebetteten Prozessor-Vorrichtung 102 vorgesehen,
um einen parallelen Befehls- und Daten-Zugriff auf den Debug-Port 10 zu
ermöglichen.
Dieses Interface bildet einen 16 Bit breiten bidirektionalen Datenbus
(PDATA[15:0]), einen 3-Bit-Adress-Bus (PADR[2:0]), ein paralleles Debug-Port-Lese-/Schreib-Wähl-Signal
(PRW), einen Abfolge-gültig-Signal
TV und ein Instruktions-Abfolge-Aufzeichnungs-Ausgangs-Taktsignal
TRACECLOCK (TC). Obwohl nicht gemeinsam mit dem Abfolge-Pad-Interface-Port 220 benutzt,
ist ferner ein (nicht gezeigtes) Parallel-Bus-Request-/Gewährungs-Signal-Paar PBREG/PBGNT
vorgesehen. Der parallele Port 214 wird aktiviert, indem
ein Bit in dem DCSR gesetzt wird. Die seriellen Kommunikationen über den
Debug-Port 100 werden nicht deaktiviert, wenn der parallele
Port aktiviert ist.
-
Format
der Außenbond-Stifte/des
Parallel-Ports 214.
-
Der
parallele Port 214 ist primär für schnelle Downloads/Uploads
in den und aus dem Target-System-T-Speicher vorgesehen. Der parallele
Port 214 kann jedoch für
sämtliche
Debug-Kommunikationen mit dem Target-System jedes Mal verwendet
werden, wenn der Prozessor 214 gestoppt ist. Die seriellen
Debug-Signale (standardgemäß oder fortentwickelt)
werden zum Debug-Zugriff auf das Target-System T verwendet, wenn
der Prozessor 104 Instruktionen ausführt.
-
In ähnlicher
Weise wie bei dem JTAG-Standard werden sämtliche Eingangssignale zu
dem parallelen Port 214 an der Anstiegsflanke des Test-Takt-Signals TCK abgetastet,
und sämtliche
Ausgangssignale werden an der Abstiegsflanke des Test-Takt-Signals
TCK geändert.
Bei den offenbarten Ausführungsformen
teilt sich der parallele Port 214 Stifte mit dem Abfolge-Pad-Interface 220,
was ein Initiieren paralleler Befehle nur dann erfordert, wenn der
Prozessor 104 gestoppt ist und das Abfolge-Pad-Interface 220 von
dem gemeinsam benutzten Bus abgetrennt ist.
-
Das
Parallel-Bus-Request-Signal PBREG und das Parallel-Bus-Gewährungs-Signal PBGNT werden ausgegeben,
um das Multiplexen der Gemeinsam-Bus-Signale
zwischen dem Abfolge-Cache 200 und dem parallele Port 214 zu
beschleunigen. Wenn das Host-Interface zu dem parallelen Port 214 feststellt,
dass das Parallel-Bus-Request-Signal PBREG aktiviert ist, beginnt
es die Signale des parallelen Ports 214 zu treiben und
gibt das Parallel-Bus-Gewährungs-Signal
PBGNT aus.
-
Beim
Eintritt in den DEBUG-Modus oder beim Austritt aus diesem im aktivierten
Zustand des parallelen Ports 214 wird der parallele Port 214 für die Prozessor-Zustands-Speicher-
und Wiederherstellungs-Zyklen verwendet.
-
Das
Parallel-Bus-Request-Signal PBREG wird unmittelbar vor dem Beginn
einer Speicherungs-Zustands-Sequenz ausgegeben, welche die vorletzte
vor dem Eintritt in den DEBUG-Modus ist. Nach dem letzten Wiederherstellungs-Zustands-Zyklus wird
das Parallel-Bus-Request-Signal PBREG deaktiviert, nachdem die Schreib-Daten
gelatcht worden sind. Das Host-Inteface des parallelen Ports 214 reagiert
auf die Deaktivierung des Parallel-Bus-Request-Signals PBREG durch Dreizustandsbildung
an seinen Parallel-Port-Treibern
und Deaktivieren des Parallel-Bus-Gewährungs-Signals PBGNT. Der parallele
Port 214 aktiviert dann die Debug-Abfolge-Port-Stift-Treiber,
schließt
den letzten Wiederherstellungs-Zustands-Zyklus ab, gibt das Befehls-Bestätigungs-Signal
CMDACK aus und gibt die Steuerung des Interface an die Abfolge-Steuerlogik 218 zurück.
-
Bei
der Kommunikation über
den parallelen Port 214 werden die Adress-Stifte PADR[2:0]
für die
Wahl des Felds des JTAG-Instruktions-Registers verwendet, das wie
in der folgenden Tabelle gezeigt auf den 16-Bit-Datenbus PDATA[15:0]
abgebildet wird.
-
-
Es
ist nicht erforderlich, beide Hälften
des debug data [31:0]-Registers zu aktualisieren, falls nur eine der
beiden Hälften
verwendet wird (z.B. bei 8-Bit-I/O-Zyklus-Daten-Schreibvorgängen). Das
Befehl-anhängig-Flag
wird automatisch gesetzt, wenn eine Schreiboperation in das Vier-Bit-Befehlsregister
durchgeführt wird,
und es wird gelöscht,
wenn das Befehls-beendet-Flag aktiviert ist. Das Host-System N kann
das Befehls-Bestätigungs- Signal CMDACK überwachen,
um festzustellen, wann das Beendet-Flag aktiviert worden ist. Die
Verwendung des parallelen Ports 214 ermöglicht eine volle Sichtbarkeit
der Ausführungs-Historie,
ohne dass ein Drosseln des Prozessor-Kerns 104 erforderlich
ist. Der Abfolge-Cache 200 kann bei Bedarf derart konfiguriert
sein, dass er als Puffer für
den parallelen Port 214 verwendbar ist, um jegliche Bandbreiten-Anpassungs-Probleme
zu beseitigen.
-
BETRIEBSSYSTEM-
UND DEBUGGER-INTEGRATION
-
Bei
der offenbarten Ausführungsform
der Erfindung kann der Betrieb sämtlicher
Debug-Unterstützungs-Merkmale
einschließlich
des Abfolge-Cache 200 durch den Debug-Port 100 oder über Prozessor-Instruktionen
gesteuert werden. Diese Prozessor-Instruktionen können von
einem Monitor-Programm, einem target-gehosteten Debugger oder einer
herkömmlichen
Pod-Anordnung kommen.
Der Debug-Port 100 führt die
Datenbewegungen aus, die durch Seriell-Daten-Port-Befehle statt
durch Prozessor-Instruktionen initiiert sind.
-
Der
Betrieb des Prozessors aus einem herkömmlichen Pod-Raum heraus hat
große Ähnlichkeit
mit dem Betrieb im DEBUG-Modus aus einem Monitor-Programm heraus. Sämtliche Debug-Operationen können über Prozessor-Instruktionen gesteuert
werden. Es macht keinen Unterschied, ob diese Instruktionen aus
dem Pod-Raum oder einem regulären
Speicher kommen. Dies ermöglicht
ein Erweitern eines Betriebsystems dahingehend, dass es zusätzliche
Debug-Fähigkeiten
aufweist.
-
Selbstverständlich haben
Betriebssysteme über
privilegierte System-Anrufe wie z.B. ptrace() seit langem Debug-Vorrichtungen
unterstützt.
Die Einbeziehung eines On-chip-Abfolge-Cache 200 macht
es nun jedoch möglich,
dass ein Betriebssystem eine Instruktions-Abfolge-Fähigkeit
bietet. In der Debug-Umgebung gemäß der vorliegenden Erfindung
ist es möglich,
eine limitierte Abfolgeverfolgung zu unterstützen, ohne eine "externe" Logik-Analysevorrichtung
oder einen In-circuit-Emulator einzubeziehen.
-
Zu
den Beispielen von Instruktionen, die für das interne Unterstützungs-Laden und Wiederaufrufen des
Inhalts des Abfolge-Cache 200 verwendet werden, zählen ein
Lade-Instruktions-Abfolge-Cache-Aufzeichnungs-Befehl LITCR und ein
Speicher-Instruktions-Abfolge-Cache-Aufzeichnungs-Befehl SITCR.
Der Befehl LITCR bewirkt das Laden einer indizierten Aufzeichnung
in dem Abfolge-Cache 200, wie spezifiziert durch einen
Abfolge-Cache-Pointer
ITREC.PTR, mit dem Inhalt des EAX-Registers des Prozessor-Kerns 104.
Der Abfolge-Cache-Pointer ITREC.PTR ist derart vor-inkrementiert,
dass die generelle Operation des Befehls LITCR wie folgt beschaffen
ist:
ITREC. PTR < –ITREC.
PTR + 1;
ITREC[ITREC.PTR] < –EAX.
-
In
dem Fall, dass die Instruktions-Abfolge-Aufzeichnung (siehe die
nachfolgende Beschreibung der Abfolge-Aufzeichnung) kleiner ist
als die EAX-Aufzeichnung,
wird nur ein Teil des EAX-Registers verwendet.
-
In ähnlicher
Weise wird der Speicher-Instruktions-Abfolge-Cache-Aufzeichnungs-Befehl
SITCR verwendet, um eine indizierte Aufzeichnung aus dem Abfolge-Cache 200 aufzurufen
und (in dem EAX-Register) zu speichern. Der Inhalt des ECX-Registers
des Prozessor-Kerns 104 wird als ein Offset verwendet,
das dem Abfolge-Cache-Pointer ITREC.PTR hinzugefügt wird, um einen Index zu
dem Abfolge-Cache 200 zu erzeugen. Das ECX-Register ist
nach-inkrementiert, während
der Abfolge-Cache-Pointer ITREC.PTR unbeeinflusst bleibt, derart,
dass:
EAX < –ITREC[ECX
+ ITREC.PTR];
ECX < –ECX + 1.
-
Fachleuten
auf dem Gebiet werden zahlreiche Variationen der LITR- und SITCR-Befehle
ersichtlich sein.
-
Das
Erweitern eines Betriebssystems dahingehend, dass ein On-chip-Ablauf
unterstützt
wird, hat in der Kommunikationsindustrie bestimmte Vorteile. Es
ermöglicht
das Aufrechterhalten der System-I/O- und Kommunikations-Aktivität, während ein
Task verfolgt wird. Traditionell hat die Verwendung eines On-chip-Emulators
das Erfordernis nach sich gezogen, den Prozessor zu stoppen, bevor
der Zustand und die Abfolge des Prozessors geprüft werden können [anders als ptrace()].
Dadurch wird die kontinuierliche Unterstützung der I/O-Datenverarbeitung
unterbrochen.
-
Zudem
ist der Abfolge-Cache 200 sehr nützlich, wenn er mit der Apparatur
im Feld verwendet wird. Falls ein unerwarteter System-Absturz eintritt,
kann der Abfolge-Cache 200 untersucht werden, um zu prüfen, um
die Ausführungs-Historie
zu beobachten, die zu dem Absturz-Ereignis geführt hat. Bei Verwendung in
tragbaren Systemen oder anderen Umgebungen, in denen auf den Energieverbrauch
zu achten ist, kann der Abfolge-Cache 200 wie erforderlich über eine
Energiehandhabungsschaltung deaktiviert werden.
-
BEISPIEL EINES ABFOLGE-AUFZEICHNUNGS-FORMATS
-
Bei
der offenbarten Ausführungsform
der Erfindung ist eine Abfolge-Instruktions-Aufzeichnung 20 Bits breit
und besteht aus zwei Feldern, TCODE (Trace Code) und TDATA (Trace
Data) sowie einem Gültig-Bit
V. Bei dem TCODE-Feld handelt es sich um einen Code, der den Typ
von Daten in dem TDATA-Feld identifiziert. Das TDATA-Feld enthält Software-Abfolge-Information,
die für
Debug-Zwecke verwendet wird.
-
Instruktions-Abfolge-Aufzeichungs-Format.
-
Bei
einer vorgesehenen Ausführungsform
der Erfindung teilt die eingebettete Prozessor-Vorrichtung
102 elf
verschiedene Abfolge-Codes mit, die in der folgenden Tabelle aufgeführt sind:
Der Abfolge-Cache
200 hat
eine limitierte Speicherkapazität;
somit ist ein bestimmtes Maß an "Kompression" in den erfassten
Abfolge-Daten wünschenswert.
Hinsichtlich des Erfassens der Abfolge-Daten wird in der folgenden
Diskussion angenommen, dass dem Host-System N ein Bild des Programms,
das gerade in seinem Ablauf verfolgt wird, zur Verfügung steht.
Falls eine Adresse aus einem Programm-Bild (Objekt-Modul) erhalten
werden kann, dann ist sie nicht in den Abfolge-Daten vorgesehen.
Vorzugsweise werden nur Instruktionen mitgeteilt, die den Instruktions-Fluss
unterbrechen, und ferner nur diejenigen, bei denen die Target-Adresse
in irgendei ner Weise abhängig
ist. Zu derartigen "unterbrechenden" Ereignissen zählen Anruf-Instruktionen
oder bedingungslose Abzweig-Instruktionen, bei denen die Target-Adresse
aus einem Datenregister oder einer anderen Speicherstelle wie z.B.
einem Stapel vorgelegt wird.
-
Wie
in der vorstehenden Tabelle aufgeführt, zählt zu den weiteren gewünschten
Abfolge-Informationen folgende: die Target-Adresse einer Trap- oder Interrupt-Handhabungsvorrichtung;
die Target-Adresse einer Rücklauf-Instruktion; eine
bedingte Abzweig-Instruktion, die eine Target-Adresse aufweist,
welche datenregister-abhängig
ist (andernfalls wird nur eine 1-Bit-Abfolge benötigt, die angibt, ob der Abzweig
genommen wurde oder nicht); und – am häufigsten – Adressen aus den Vorgangs-Rückläufern. Andere
Information, wie z.B. Task-Identifikationen und Abfolge-Erfassungs-Stop- /Start-Information,
kann ebenfalls in dem Abfolge-Cache 200 platziert werden.
Der präzise
Inhalt und die präzise
Beschaffenheit der Abfolge-Aufzeichnungen werden nicht als kritisch
für die
Erfindung angesehen.
-
6A zeigt
ein Beispiel eines Formats zum Melden bedingter Abzweig-Ereignisse. Bei der
offenbarten Ausführungsform
der Erfindung kann das Ergebnis von bis zu 15 Abzweig-Ereignissen
in einem einzigen Abzweig-Eintrag
gruppiert werden. Das 16-Bit-TDATA-Feld (oder "BFIELD") enthält 1-Bit-Abzweig-Ergebnis-Abfolge-Einträge und wird
bezeichnet als Eintrag TCODE = 0001. Das TDATA-Feld wird anfangs
gelöscht, mit
Ausnahme am weitesten links angeordneten Bit, das auf 1 gesetzt
ist. Mit dem Auftreten jedes neuen bedingten Abzweig wird auf der
linken Seite ein neuer Bit-Eintrag
hinzugefügt,
und sämtliche
anderen Einträge werden
um ein Bit nach rechts verschoben.
-
Die
Verwendung eines 128-Eintrags-Abfolge-Cache 200 ermöglicht das
Speichern von 320 Bytes von Information. Nimmt man eine Abzweig-Frequenz
von einem Abzweig für
jeweils sechs Instruktionen an, bildet der offenbarte Abfolge-Cache 200 somit
einen effektiven Abzweig-Rekord von 1.536 Instruktionen. Diese Schätzung berücksichtigt
nicht das Auftreten von Anruf-, Sprung- und Rücklauf-Instruktionen.
-
Bei
der offenbarten Ausführungsform
der Erfindung überwacht
die Abfolge-Steuerlogik 218 die
Instruktions-Ausführung über eine
Prozessor-Interface-Logik 202.
Wenn eine Abzweig-Target-Adresse gemeldet werden muss, wird Information,
die in einem aktuellen bedingten Abzweig-TDATA-Feld enthalten ist,
von der Abfolge-Steuerlogik 218 als vollständig markiert,
selbst falls nicht 15 Einträge
angesammelt worden sind. Gemäß 6B wird
dann die Target-Adresse (bei einer prozessor-basierten Vorrichtung 102 mit
Verwendung von 32-Bit-Adressierung) in einem Abfolge-Eintrags-Paar
aufgezeichnet, wobei der erste Eintrag (TCODE = 0010) die im High-Zustand
befindlichen 16 Bits der Target-Adresse und der zweite Eintrag (TCODE
= 0111) die im Low-Zustand befindlichen 16 Bits der Target-Adresse
liefert. Wenn eine Abzweig-Target-Adresse für eine bedingte Sprung-Instruktion
vorgelegt wird, erscheint kein 1-Bit-Abzweig-Ergebnis-Eintrag für den gemeldeten Abzweig.
-
STARTEN UND
STOPPEN DER ABFOLGE-ERFASSUNG
-
Im
Zusammenhang mit der nun zu erläuternden 6 kann es wünschenswert sein, die Abfolge-Erfassung
während
bestimmter Abschnitte der Programm-Ausführung zu starten und zu stoppen,
z.B. wenn ein Task-Kontext-Umschalten
erfolgt. Wenn die Abfolge-Erfassung gestoppt ist, werden keine Abfolge-Einträge in den
Abfolge-Cache 200 eingegeben, und es treten auch keine
Abfolge-Einträge
an den Außenbond-Stiften
des Abfolge-Ports 214 auf. Für das Aktivieren und Deaktivieren
der Abfolge-Erfassung sind verschiedene Verfahren vorgesehen. Beispielsweise
kann ein x86-Befehl vorgesehen sein, oder ein existierender x86-Befhel
kann verwendet werden, um ein Bit in einer I/0-Operation zu toggeln.
Alternativ können
(nicht gezeigte) On-chip-Unterbrechungspunkt-Steuerregister derart
konfiguriert sein, dass sie die Adressen angeben, an denen die Abfolge-Erfassung
starten/stoppen sollte. Wenn das Abfolge-Verfolgen angehalten wird,
wird ein Abfolge-Eintrag (TCODE = 1000, TCODE = 0111), der die letzte
Abfolge-Adresse aufzeichnet, in dem Abfolge-Strom platziert. Wenn
das Abfolge-Verfolgen wiederaufgenommen wird, wird ein Abfolge-Synchronisations-Eintrag
(TCODE = 0110, TCODE = 0111) erzeugt, der die Adresse der derzeit
ausgeführten
Instruktion enthält.
-
Es
kann wichtig sein, Segment-Veränderungen
zu berücksichtigen,
die auftreten, während
das Abfolge-Verfolgen gestoppt ist. Diese Situation kann teilweise
behoben werden, indem eine Option gewählt wird, gemäß der auf
einen Eintrag TCODE = 1000 unmittelbar ein aktueller Segment-Basis-Adress-Eintrag (TCODE =
0100, TCODE = 0111) folgt, wie 6C zeigt.
Ferner ist eine Konfigurations-Option wünschenswert, mit der ein aktueller
Segment-Basis-Adress-Eintrag an dem Ende einer Abfolge vor dem Eintritt
in den Debug-Modus aktiviert wird. Im Gegensatz dazu kann es möglicherweise
nicht wünschenswert
sein, Segment-Basis-Information vorzulegen, wenn sich die Basis
nicht verändert
hat, wie z.B. wenn ein Interrupt aufgetreten ist.
-
Gemäß 6D wird
nach dem Auftreten eines synchronen oder asynchronen Ereignisses
wie z.B. eines Interrupt oder Trap ein Abfolge-Eintrag TCODE = 0101
erzeugt, um die Adresse der Target-Interrupt-Handhabungsvorrichtung
vorzulegen. Es ist jedoch auch wünschenswert,
die Adresse der Instruktion, die unterbrochen wurde, aufzuzeichnen,
indem ein Abfolge-Synchronisations-
(TCODE = 0110) Eintrag unmittelbar vor dem Interrupt-Eintrag sowie die
vorherige Segment-Basis-Adresse (TCODE = 0011) erzeugt wird. Der
Abfolge-Synchronisations-Eintrag enthält die Adresse der letzten
zurückgezogenen
Instruktion vor dem Start der Interrupt-Handhabungsvorrichtung.
-
SEGMENT-VERÄNDERUNGEN
-
6E zeigt
einen Abfolge-Eintrag, der zur Meldung einer Veränderung in den Segment-Parametern verwendet
wird. Wenn ein Abfolge-Strom gemäß der Erfindung
verarbeitet wird, werden Abfolge-Adress-Werte mit einer Segment-Basis-Adresse
kombiniert, um die lineare Adresse einer Instruktion zu bestimmen.
Die Basis-Adresse sowie die Vorgabe-Daten-Operanden-Größe (32-
oder 16-Bit-Modus) unterliegen Veränderungen. Als Ergebnis werden
die Einträge
TCODE = 0011 und 0111 derart konfiguriert, dass sie die für die präzise Rekonstruktion
des Instruktions-Strom erforderliche Information liefern. Das TDATA-Feld,
das dem Eintrag TCODE = 0011 entspricht, enthält die 16 Bits der vorherigen
Segment-Basis-Adresse, während
der entsprechende Eintrag TCODE = 0111 die im Low-Zustand befindlichen
15 oder 4 Bits enthält
(je nachdem, ob die Instruktion im echten oder geschützten Modus
ausgeführt
wird). Der Eintrag TCODE = 0111 enthält vorzugsweise ferner Bits,
welche die aktuelle Segment-Größe (32 Bits
oder 16 Bits) und den Betriebsmodus (echt oder geschützt) angeben,
und ein Bit, das angibt, ob ein Paging verwendet wird. Die Segment-Information
betrifft generell das vorherige Segment, nicht ein aktuelles (Target-)
Segment. Die aktuelle Segment-Information wird erhalten, indem der
Zustand des Prozessor-Kerns 104 angehalten und geprüft wird.
-
BENUTZERSPEZIFISCHER
ABFOLGE-EINTRAG
-
Es
existieren Umstände,
unter denen ein Anwendungsprogramm oder Betriebsystem möglicherweise zusätzliche
Information zu einem Abfolge-Strom
hinzugeben will. Damit dies erfolgen kann, ist vorzugsweise ein
x86-Instruktion
vorgesehen, die ermöglicht,
dass ein 16-Bit-Datenwert an einer gewünschten Ausführungsposition
in dem Abfolge-Strom platziert wird. Die Instruktion kann in Form
einer Bewegung zu dem I/O-Raum implementiert werden, wobei der Operand
von einem Speicher oder Register vorgelegt wird. Wenn der Prozessor-Kern 104 diese
Instruktion ausführt,
wird der be nutzen-spezifizierte Abfolge-Eintrag mittels der Abfolge-Steuerlogik 218 erfasst
und in dem Abfolge-Cache 200 platziert. Gemäß 6F wird
für diesen
Zweck gemäß der bevorzugten
Ausführungsform
der Erfindung ein Eintrag TCODE = 1001 verwendet. Dieser Eintrag kann
z.B. eine vorherige oder aktuelle Task-Identifizierung liefern,
wenn ein Task-Umschalten in einem Multi-Tasking-Betriebssystem erfolgt.
-
SYNCHRONISATION
VON ABFOLGE-DATEN
-
Beim
Ausführen
typischer Software in einer prozessor-basierten Vorrichtung 102 gemäß der offenbarten
Ausführungsform
der Erfindung enthalten nur wenige Abfolge-Einträge Adress-Werte. Die meisten
Einträge
haben das Format TCODE = 0001, bei dem ein einzelnes Bit das Ergebnis
einer bedingten Operation angibt. Beim Prüfen eines Abfolge-Stroms jedoch
können
Daten nur in Relation zu einer bekannten Programm-Adresse studiert
werden. Beispielsweise sind, beginnend mit dem ältesten Eintrag in dem Abfolge-Cache 200 sämtliche
Einträge
bis zu einem Adress-Eintrag nur von wenig Nutzen. Eine Algorithmus-Synchronisation
beginnt typischerweise ausgehend von einem Abfolge-Eintrag, der
eine Target-Adresse liefert.
-
Falls
der Abfolge-Cache 200 keine Einträge enthält, die eine Adresse vorlegen,
dann kann die Abfolge-Analyse nicht erfolgen. Diese Situation ist
selten, jedoch möglich.
Aus diesem Grund ist gemäß der bevorzugten
Ausführungsform
der Erfindung ein Synchronisations-Register TSYNC vorgesehen, um
das Eingeben von Synchronisations-Adress-Information zu steuern.
Falls das Synchronisations-Register TSYNC auf Null gesetzt ist,
dann werden keine Abfolge-Synchronisations-Einträge erzeugt.
-
Abfolge-Eintrags-Synchronisationseintrags-Steuerregister.
-
6G zeigt
ein Beispiel eines Abfolge-Synchronisations-Eintrags. Bei Betrieb
wird jedes Mal, wenn ein Abfolge-Eintrag, der eine Target-Adresse
enthält,
erzeugt wird, ein Zähler-Register
auf den im Synchronisations-Register TSYNC enthaltenen Wert eingestellt.
Der Zähler
wird für
sämtliche
anderen Abfolge-Einträge um
Eins dekrementiert. Falls der Zähler
Null erreicht, wird ein Abfolge-Eintrag (TCODE = 0110) eingegeben, der
die Adresse der zuletzt zurückgezogenen
Instruktion enthält
(oder alternativ die anhängige
Instruktion). Ferner erscheint, wenn ein Synchronisations-Eintrag
in dem Abfolge-Cache 200 aufgezeichnet wird, dieser auch
an den Abfolge-Stiften, um eine hinreichende Verfügbarkeit
von Synchronisations-Abfolge-Daten für eine Vollfunktions-ICE-Apparatur
zu gewährleisten.
-
Die
Abfolge-Eintrags-Information kann auch dahingehend erweitert werden,
dass sie Daten enthält, welche
die Code-Abdeckung oder die Ausführungs-Leistung betreffen.
Diese Information ist z.B. für
das Code-Testen und Leistungs-Abstimmen nützlich. Selbst ohne diese Verbesserungen
ist es wünschenswert,
den Prozessor-Kern 104 zum Zugreifen auf den Abfolge-Cache 200 zu
befähigen.
Im Falle einer Microcontroller-Vorrichtung kann dieses Merkmal erzielt
werden, indem der Abfolge-Cache 200 innerhalb eines Teils
des I/O- oder Speicher-Raums abgebildet wird. Ein eher genereller
Ansatz beinhaltet die Einbeziehung einer Instruktion, die das Bewegen
von Daten des Abfolge-Cache 200 in den System-Speicher
unterstützt.
-
Somit
wurde eine prozessor-basierte Vorrichtung beschrieben, die eine
flexible, hochleistungsfähige Lösung zum
Erzeugen von Instruktions-Abfolge-Information bietet. Die prozessor-basierte
Vorrichtung enthält einen
Instruktions-Abfolge-Cache, der in der Lage ist, Abfolge-Information
zum Rekonstruieren des Instruktions-Ausführungs-Stroms in dem Prozessor
zu liefern, ohne dass der Prozessor-Betrieb gestoppt wird. Es sind sowohl
serielle als auch parallele Kommunikationskanäle vorgesehen, um Abfolge-Daten
an externe Vorrichtungen zu übermitteln.
Der offenbarte On-chip-Instruktions-Abfolge-Cache beseitigt zahlreiche der
bei existierenden Lösungen
auftretenden Bandbreiten- und Taktsynchronisations-Probleme und
erlaubt die Verwendung einer weniger kostenaufwendigen externen
Erfassungs-Hardware.
-
Die
vorstehende Offenbarung und Beschreibung der Erfindung dient lediglich
zur Veranschaulichung und als Beispiel, und es können zahlreiche Veränderungen
hinsichtlich der Größe, der
Form, der Materialien, der Komponenten der Schaltungselemente, der
Verdrahtungsverbindungen und der Kontakte sowie hinsichtlich der
Einzelheiten der gezeigten Schaltung, der Ausgestaltung und des
Betriebsverfahrens vorgenommen werden, ohne vom Umfang der Erfindung
abzuweichen.