-
Schaltungsanordnung
und Verfahren zum Erfassen einer Ausführungszeit eines Befehls in
einem Rechnersystem Die vorliegende Erfindung betrifft eine Schaltungsanordnung
und ein Verfahren zum Erfassen einer Ausführungszeit eines Befehls in einem
Rechnersystem, insbesondere eine Schaltungsanordnung und ein Verfahren
für On-Chip-Debugging,
welche es ermöglichen,
eine Ausführungszeit
eines Befehls zu ermitteln und zu speichern.
-
Die
Software moderner integrierter Systeme kann in echtzeitkritische
(„real
time software")
und echtzeitunkritische Applikationen unterteilt werden. Bei echtzeitkritischer
Software muss beispielsweise aufgrund eines Standards oder wegen
Güteanforderungen
eines Anwenders eine bestimmte Aufgabe oder ein bestimmter Befehl
in einer vorgegebenen Zeit abgearbeitet werden. Hohe Latenzzeiten
bei der Befehlsausführung
stellen ein potenzielles Problem für Echtzeitsoftware dar, da
insbesondere lange Latenzzeiten im Extremfall zu einem Systemabsturz führen können.
-
Eine
häufige
Quelle für
Echtzeitverletzungen sind Speicherzugriffe, da durch die hohe Leistung moderner
Prozessoren die Diskrepanz zwischen der immer kürzer werdenden Abarbeitungszeit
von Instruktionen im Prozessor und der im Verhältnis dazu zunehmenden Zugriffszeit
auf Speichereinheiten zunimmt. Eine Maßnahme zur Verringerung der
Speicherzugriffszeit ist die Verwendung so genannter Cache-Speicher,
wobei ein Teil der benötigten
Daten in einem kleinen schnellen Speicher, welcher in der Nähe des Prozessors
angeordnet ist, abgelegt werden kann. Die im Cache-Speicher abgelegten
Daten werden unter Berücksichtung
der Applikation derart ausgewählt,
dass möglichst
alle jeweils benötigten Daten
im Cache-Speicher vorhanden sind. Bei der Auswahl kann jedoch niemals
sichergestellt werden, dass wirklich alle benötigten Daten oder Teile des
Instruktionscodes im Cache-Speicher vorliegen. In diesem Fall, in
welchem ein benötigtes
Datum nicht im Cache-Speicher vorliegt (Cache Miss-Fall), muss auf einen
weiteren Speicher zugegriffen werden, was typischerweise eine längere Zugriffszeit
mit sich bringt. Somit sind mit derartigen Zugriffen häufig hohe
Latenzzeiten verbunden. Hohe Latenzzeiten, welche zur Verletzung
von Echtzeitbedingungen führen
können,
können
jedoch auch andere Ursachen aufweisen, wie beispielsweise Buskonflikte
und Registerzugriffe.
-
Um
Software dahingehend optimieren zu können, dass hohe Latenzzeiten
und somit auch die mit diesen verbundenen Systemabstürze vermieden werden
können,
wird die Software ausgetestet („debugging"). Dazu wird die Ausführung einer
Folge von Befehlen durch den Prozessor überwacht, um mögliche Probleme
zu detektieren. Ein derartiges Verfahren ist beispielsweise in der
JP 2002351695 A beschrieben,
bei welcher eine Programmausführung unterbrochen
wird, um den Zustand eines Befehlszählerwerts zu sichern. Aus der
JP 2000222256 A ist eine
Vorrichtung zum Austesten eines Prozessors mit einem Cache-Speicher bekannt,
bei welcher ein „Instruction
Fetch"-Wert, ein „Cache
Hit”-Wert
und eine Verzweigungszieladressinformation ausgegeben werden, wobei
aus diesen Zahlen das Cache Hit-Verhältnis berechnet werden kann.
Die Vorrichtungen und das Verfahren dieser Druckschriften ermöglichen
jedoch keine detaillierte Analyse der mit der Ausführung einzelner
Befehle verbundenen Latenzzeiten, welche für das Austesten von Software vorteilhaft
wäre.
-
Der
vorliegenden Erfindung liegt die Aufgabe zu Grunde, eine verbesserte
Vorrichtung und ein verbessertes Verfahren, insbesondere für On-Chip-Debugging,
zum Erfassen einer Ausführungszeit
eines Befehls zur Verfügung
zu stellen. Insbesondere liegt der Erfindung die Aufgabe zu Grunde,
eine Vorrichtung und ein Verfahren zur Verfügung zu stellen, welche bzw.
welches es ermöglicht
zu ermitteln, bei welchem Befehl eines Programmcodes welche Latenzzeiten
aufgetreten sind, um da durch Verletzungen von Echtzeitanforderungen
einschränken
zu können.
-
Erfindungsgemäß wird diese
Aufgabe gelöst durch
eine Schaltungsanordnung nach Anspruch 1, eine integrierte Schaltung
nach Anspruch 19 und ein Verfahren nach Anspruch 22. Die abhängigen Ansprüche definieren
vorteilhafte oder bevorzugte Ausführungsbeispiele der Erfindung.
-
Eine
Schaltungsanordnung nach einem Ausführungsbeispiel der Erfindung,
insbesondere für On-Chip-Debugging,
zum Erfassen einer Ausführungszeit
eines Befehls, welcher von einem Rechnersystem mit einem Prozessor
ausgeführt
wird, umfasst Zeitbestimmungsmittel zum Bestimmen einer die Ausführungszeit
kennzeichnenden Größe, Vergleichermittel,
welche mit dem Zeitbestimmungsmitteln gekoppelt sind und eingerichtet
sind, um die die Ausführungszeit
kennzeichnende Größe mit einem Schwellenwert
zu vergleichen, und Speichermittel, welche mit den Vergleichermitteln
gekoppelt sind und eingerichtet sind, um den den Befehl kennzeichnenden
Indikator sowie, bei einem Ausführungsbeispiel, weiterhin
die die Ausführungszeit
kennzeichnende Größe zu speichern,
falls die die Ausführungszeit kennzeichnende
Größe den Schwellenwert übersteigt.
Wie nachfolgend näher
erläutert
werden wird, kann die die Ausführungszeit
kennzeichnende Größe beispielsweise
die Ausführungszeit
in Echtzeit selbst oder eine Anzahl von Taktzyklen des Prozessors sein.
Der den Befehl kennzeichnende Indikator kann beispielsweise ein
Befehlszählerwert
des Prozessors sein. Während
die Schaltungsanordnung eingerichtet ist, um die die Ausführungszeit
kennzeichnende Größe für jeden
Befehl zu ermitteln, wird diese Größe sowie der zugehörige Indikator
für den
Befehl nur dann gespeichert, wenn die die Ausführungszeit kennzeichnende Größe den Schwellenwert übersteigt, wodurch
die Anforderungen hinsichtlich der Speicherkapazität der Speichermittel
reduziert werden oder bei vorgegebener Speicherkapazität eine längere Abfolge
von Befehlen, d.h. eine größere Applikation
untersucht werden kann.
-
Zum
Speichern des Schwellenwerts kann ein Schwellenwertspeicher, beispielsweise
in der Form eines Registers, vorgesehen sein, aus welchem die Vergleichermittel
den Schwellenwert auslesen.
-
Um
die die Ausführungszeit
kennzeichnende Größe zu bestimmen,
können
die Zeitbestimmungsmittel extern, beispielsweise von dem Prozessorkern, mit
Signalen versorgt werden, welche einen Beginn und/oder ein Ende
der Ausführung
des Befehls anzeigen. Bei einem Ausführungsbeispiel umfasst jedoch
die Schaltungsanordnung Schaltungszustandssignaldetektormittel,
welche eingerichtet sind, um ein Schaltungszustandssignal zu überwachen,
um basierend auf einer Änderung
des Schaltungszustandssignals ein den Beginn und/oder das Ende der
Ausführung
des Befehls anzeigendes Signal an die Zeitbestimmungsmittel auszugeben.
Das Schaltungszustandssignal, welches von den Schaltungszustandssignaldetektormitteln überwacht
wird, kann jedes geeignete Schaltungszustandssignal sein, dessen Änderung
den Beginn und/oder das Ende der Ausführung irgendeines Befehls oder
einer bestimmten Klasse von Befehlen anzeigt. Beispielsweise kann das
Schaltungszustandssignal ausgewählt
sein aus einer Gruppe umfassend einen Befehlszählerwert, ein Cache Miss-Signal,
ein Stall-Signal, welches anzeigt, dass der Prozessor auf die Verfügbarkeit
von Daten oder Programmcode wartet, und ein einen Speicherzugriff
anzeigendes Signal (Cache fetch). Bei mehrstufigen Caches ist es
denkbar und sinnvoll, dass das Schaltungszustandssignal die logische Kombination
mehrerer Cache Miss-Signale darstellt. Beispielsweise kann bei zweistufigen
Caches das logische AND der Cache Miss-Signale als Startsignal verwendet werden.
Das Schaltungszustandssignal kann in Abhängigkeit von den spezifischen
Zielen des On-Chip-Debugging ausgewählt werden. Soll beispielsweise
die mit jeder Befehlsausführung
verbundene Latenzzeit ermittelt werden, dient beispielsweise eine Änderung
des Befehlszählerwerts
sowohl als das ein Ende einer Befehlsausführung anzeigende Signal als
auch als das den Beginn der Ausführung des
nächsten
Befehls anzeigende Signal. Sollen dagegen nur derartige Befehle
erfasst werden, bei welchen ein Datum nicht im Cache gefunden wird,
wird beispielsweise das Cache Miss-Signal überwacht, um ein Startsignal
für die
Zeitbestimmungsmittel zu erzeugen, und ein den Abschluss der Cache
Fetch-Operation
anzeigendes Signal wird überwacht,
um das Stoppsignal für
die Zeitbestimmungsmittel zu erzeugen.
-
Die
Schaltungszustandssignaldetektormittel können derart ausgestaltet sein,
dass sie eine Registerkette mit einem ersten Register und einem
zweiten Register für
jeweils ein Bit des Schaltungszustandssignals umfassen. Dabei speichert
das erste Register und das zweite Register jeweils einen Wert des
Bits zu verschiedenen Zeiten, insbesondere während aufeinanderfolgender
Taktzyklen des Prozessors. Die in dem ersten und zweiten Register
gespeicherten Werte werden verglichen, beispielsweise mittels eines XOR-Gatters,
so dass bitweise eine Änderung
des Schaltungszustandssignals erfasst werden kann.
-
Die
Zeitbestimmungsmittel umfassen bei einem Ausführungsbeispiel Zählermittel
zum Zählen von
Taktzyklen des Prozessors und sind eingerichtet, um die die Ausführungszeit
kennzeichnende Größe basierend
auf einer Taktzyklenanzahl, welche während der Ausführung des
Befehls ermittelt wird, zu bestimmen. Die Taktzyklenanzahl kann
dabei der Gesamtzahl von Taktzyklen während der Ausführung des
Befehls entsprechen. Jedoch kann die Taktzyklenanzahl auch nur die
Anzahl von Taktzyklen während
eines Intervalls während
der Ausführung
des Befehls sein, während
dessen die Taktfrequenz konstant ist. Im letzteren Fall ist es insbesondere
möglich,
die Ausführungszeit
des Befehls auch dann zu bestimmen, wenn die Taktfrequenz nicht
konstant ist, wie nachfolgend näher
erläutert.
-
Die
die Ausführungszeit
kennzeichnende Größe kann
insbesondere die Ausführungszeit
des Befehls selbst sein oder diese umfassen. In diesem Fall sind
die Zeitbestimmungsmittel bei einem Ausführungsbeispiel dazu eingerichtet,
eine Taktfrequenz oder Taktzyklenzeit des Prozessors zu erfassen,
um basierend auf der Taktfrequenz oder Taktzyklenzeit sowie der
Taktzyklenanzahl die Ausführungszeit
zu bestimmen. Zu diesem Zweck können die
Zeitbestimmungsmittel Multiplikatormittel zum Multiplizieren der
Taktzyklenzeit mit der Taktzyklenanzahl umfassen. Ist insbesondere
die Taktfrequenz oder Taktzyklenzeit konstant, kann die Ausführungszeit
durch Multiplizieren der Taktzyklenanzahl, in diesem Fall der Anzahl
von Taktzyklen während
der gesamten Befehlsausführung,
mit der Taktzyklenzeit durch die Multiplikatormittel ermittelt werden. Ändert sich
die Taktfrequenz oder Taktzyklenzeit hingegen während der Befehlsausführung, wird
das Zeitintervall, das der Ausführung
des Befehls entspricht, in Teilintervalle mit jeweils konstanter
Taktzyklenzeit zerlegt, wobei die Taktzyklenanzahl während jedes der
Teilintervalle ermittelt und mit der entsprechenden Taktzyklenzeit
multipliziert wird. In diesem Fall umfasst die Schaltungsanordnung
bei einem Ausführungsbeispiel
mit den Multiplikatormitteln gekoppelte Addierermittel, welche eingerichtet
sind, um bei einer Änderung
der Taktfrequenz oder Taktzyklenzeit das von den Multiplikatormitteln
ermittelte Produkt der Taktzyklenzeit und Taktzyklenanzahl zu einem
Wert hinzuzuaddieren, welcher in den Addierermitteln gespeichert
ist. Auf diese Weise kann die akkumulierte Ausführungszeit, d.h. die Summe
der Längen
der einzelnen Intervalle mit jeweils konstanter Taktzyklenzeit oder
Taktfrequenz, ermittelt werden. Alternativ kann in dem Fall, in
welchem die Taktzyklenzeit zwar veränderlich ist, jedoch immer
ein ganzzahliges Vielfaches einer minimalen Zeiteinheit ist oder
sich durch dieses annähern
lässt,
die Ausführungszeit
einfacher dadurch bestimmt werden, dass die Zeitbestimmungsmittel
eingerichtet sind, um ein Inkrement der Zählermittel in Abhängigkeit
von der ermittelten Taktfrequenz oder Taktzyklenzeit einzustellen.
Vorteilhaft wird dabei für
eine gegebene Taktzyklenzeit das Inkrement als Quotient zwischen
der gegebenen Taktzyklenzeit und der minimalen Zeit eingestellt.
Die Inkremente für
verschiedene Taktzyklenzeiten können insbesondere
durch eine Inkrementlogikschaltung ermittelt werden, welche den
richtigen Wert für
die jeweils ermittelte Taktzyklenzeit einstellt.
-
Die
die Ausführungszeit
kennzeichnende Größe kann
jedoch nicht nur die Ausführungszeit selbst,
sondern beispielsweise die Taktzyklenanzahl sein. Insbesondere dient
bei konstanter Taktfrequenz oder Taktzyklenzeit des Prozessors die
Taktzyklenanzahl in gleicher Weise als Indikator für die mit
der Befehlsausführung
verbundene Zeitdauer wie die Ausführungszeit selbst. Dies gilt
jedoch auch noch in dem Fall, in welchem die Taktfrequenz oder Taktzyklenzeit
des Prozessors variabel ist. Im letzteren Fall umfasst die Schaltungsanordnung
bei einem Ausführungsbeispiel
Frequenzdetektormittel zum Erfassen einer Taktfrequenz oder Taktzyklenzeit
des Prozessors, wobei der Schwellenwert, mit welchem die die Ausführungszeit
kennzeichnende Größe, also
die Taktzyklenanzahl, verglichen wird, in Abhängigkeit von der Taktfrequenz
oder Taktzyklenzeit aus einer Mehrzahl von Werten für den Schwellenwert
ausgewählt
wird. Insbesondere kann die Schaltungsanordnung einen mit den Vergleichermitteln
gekoppelten Schwellenwertspeicher zum Speichern der Mehrzahl von
Werten für
den Schwellenwert umfassen, aus welchem der für die jeweilige Taktzyklenzeit
relevante Schwellenwert ausgelesen wird. Bei einem Ausführungsbeispiel
ist die Schaltungsanordnung dann weiterhin derart eingerichtet,
dass zusätzlich
zu der die Ausführungszeit
kennzeichnenden Größe und dem
den Befehl kennzeichnenden Indikator auch die Taktfrequenz oder
Taktzyklenzeit gespeichert wird, falls die die Ausführungszeit
kennzeichnende Größe den Schwellenwert übersteigt.
Dadurch wird es möglich,
während
späterer
Phasen des Debugging die Ausführungszeit
aus der Taktzyklenanzahl und der Taktzyklenzeit zu berechnen. Weiter
können
die Frequenzdetektormittel eingerichtet sein, um eine Änderung
der Taktfrequenz oder Taktzyklenzeit zu erfassen, wobei die Speichermittel
mit dem Frequenzdetektormittel gekoppelt und eingerichtet sind,
um die Taktfrequenz oder Taktzyklenzeit und die Taktzyklenanzahl,
d.h. den aktuellen Wert der Zählermittel,
zu speichern, falls die Frequenzdetektor mittel eine Änderung
der Taktfrequenz oder Taktzyklenzeit erfassen. In anderen Worten
werden die für
die Berechnung der Ausführungszeit
wesentlichen Größen nicht nur
bei Abschluss der Befehlsausführung,
sondern auch bei einem Wechsel der Taktfrequenz gespeichert, wenn
die Taktzyklenanzahl bereits den vorherbestimmten Schwellenwert übersteigt.
Dadurch wird sichergestellt, dass alle zur Bestimmung der Ausführungszeit
in Echtzeit benötigten
Informationen verfügbar
sind.
-
Die
Speichermittel sind bei einem Ausführungsbeispiel derart ausgestaltet,
dass bei Erreichen der Speicherkapazität die ältesten Werte zuerst überschrieben
werden und dass bei einem Reset des Prozessorkerns die gespeicherten
Werte auslesbar bleiben.
-
Der
den Befehl kennzeichnende Indikator kann insbesondere ein Befehlszählerwert,
d.h. der Wert des Befehlszählerregisters
des Prozessors sein.
-
Die
Schaltungsanordnung ist bei einem Ausführungsbeispiel als integrierter
Bestandteil einer integrierten Schaltung ausgestaltet, d.h. als On-Chip-Debug-Vorrichtung.
Bevorzugt ist die Debug-Schaltungsanordnung aktivierbar und deaktivierbar,
so dass ein spezieller Debug-Modus ausgeführt werden kann.
-
Entsprechend
wird nach einem weiteren Ausführungsbeispiel
der Erfindung eine integrierte Schaltung bereitgestellt, welche
einen Prozessor und eine Schaltungsanordnung nach einem Ausführungsbeispiel
umfasst. Der Prozessor kann einen Befehlszähler umfassen, wobei die Schaltungsanordnung
Schaltungszustandssignaldetektormittel umfasst, die mit dem Befehlszähler gekoppelt
sind, um einen Wert des Befehlszählers
zu überwachen,
und die weiterhin eingerichtet sind, um ein einen Beginn und/oder
ein Ende der Ausführung
des Befehls anzeigendes Signal an die Zeitbestimmungsmittel der Schaltungsanordnung
auszugeben, falls eine Änderung
des Befehlszählerwerts
erfasst wird. Diese Ausgestaltung, bei welcher das Start- und Stopp-Signal für die Schaltungsanordnung
basierend auf dem Befehlszählerwert
erzeugt wird, hat den Vorteil, dass die Ausführungszeit jedes Befehls überwacht
wird.
-
Bei
einem Ausführungsbeispiel
umfasst die integrierte Schaltung eine Debug-Schnittstelle zum Auslesen
der Speichermittel der Schaltungsanordnung. Dadurch können selbst
nach einem Systemabsturz die für
das Debugging notwendigen Daten aus den Speichermitteln ausgelesen
werden. Bei einem Ausführungsbeispiel
sind die Speichermittel der Schaltungsanordnung ein existierender
Debug-Speicher des Prozessors.
-
Ein
Verfahren nach einem Ausführungsbeispiel
der Erfindung, insbesondere für
On-Chip-Debugging, zum Erfassen einer Ausführungszeit eines Befehls, der
von einem Rechnersystem mit einem Prozessor ausgeführt wird,
umfasst die Schritte Bestimmen einer die Ausführungszeit kennzeichnenden Größe, Vergleichen
der die Ausführungszeit
kennzeichnenden Größe mit einem
Schwellenwert und Speichern eines den Befehl kennzeichnenden Indikators
und, bei einem Ausführungsbeispiel,
der die Ausführungszeit
kennzeichnenden Größe, falls
die die Ausführungszeit
kennzeichnende Größe den Schwellenwert übersteigt.
Das erfindungsgemäße Verfahren
weist die Vorteile auf, dass systematisch alle Befehle oder bestimmte
Klassen von Befehlen überwacht
werden können,
die die Ausführungszeit kennzeichnende
Größe jedoch
nur gespeichert wird, falls sie einen bestimmten Schwellenwert übersteigt. Dadurch
werden Speicheranforderungen reduziert.
-
Das
Bestimmen der die Ausführungszeit kennzeichnenden
Größe kann
insbesondere ein Empfangen eines einen Beginn und/oder ein Ende der
Ausführung
des Befehls kennzeichnenden Signals umfassen. Das den Beginn und/oder
das Ende der Ausführung
kennzeichnende Signal kann dabei ausgewählt sein aus einer Gruppe umfassend
eine Änderung
eines Befehlszählerwerts,
eines Cache Miss-Signals, eines Stall-Signals und eines einen Speicherzugriff
anzeigenden Signals des Prozessors. Bei einem Ausführungsbeispiel
ist sowohl das den Beginn der Ausführung des Befehls kennzeichnende
Signal als auch das das Ende der Ausführung des Befehls kennzeichnende
Signal die Änderung des
Befehlszählerwerts.
Bei einem anderen Ausführungsbeispiel
ist das den Beginn der Ausführung
des Befehls kennzeichnende Signal eine Änderung des Cache Miss-Signals,
während
das das Ende der Ausführung
des Befehls kennzeichnende Signal eine Änderung des einen Speicherzugriff
anzeigenden Signals des Prozessors ist. Durch die geeignete Wahl von
Schaltungszustandssignalen, auf deren Basis ein Start-Signal und/oder
ein Stopp-Signal für
das Bestimmen der die Ausführungszeit
kennzeichnenden Größe ermittelt
wird, können
alle Befehle oder bestimmte Klassen von Befehlen ausgewählt werden,
deren Ausführungszeit überwacht
wird.
-
Das
Bestimmen der die Ausführungszeit kennzeichnenden
Größe kann
ein Bestimmen einer Taktzyklenanzahl während der Ausführung des
Befehls umfassen. Die Taktzyklenanzahl kann dabei wiederum die gesamte
Anzahl von Taktzyklen während
der Befehlsausführung
sein, oder die Anzahl von Taktzyklen während der Ausführung des
Befehls in einem Intervall, in welchem die Taktfrequenz oder Taktzyklenzeit
konstant gehalten wird.
-
Die
die Ausführungszeit
kennzeichnende Größe kann
insbesondere die Ausführungszeit
des Befehls selbst sein. In diesem Fall umfasst das Bestimmen der
die Ausführungszeit
kennzeichnenden Größe ein Erfassen
einer Taktzyklenzeit des Prozessors und ein Multiplizieren der Taktzyklenzeit
mit der Taktzyklenanzahl. Insbesondere kann, falls die Taktzyklenzeit
oder Taktfrequenz des Prozessors konstant ist, die Ausführungszeit
als Produkt aus der gesamten Taktzyklenanzahl während der Befehlsauführung und
der Taktzyklenzeit berechnet werden. Fall die Taktzyklenzeit veränderlich
ist, umfasst das Bestimmen der die Ausführungszeit kennzeichnenden Größe beispielsweise
ein Ermitteln einer Taktzyklenanzahl während jeweils eines Zeitintervalls,
während dessen
die Taktzyklenzeit konstant ist, ein Multiplizieren der Taktzyklenanzahl
während
des Zeitintervalls mit der entsprechenden Taktzyklenzeit und ein
Aufaddieren von Produkten aus der Taktzyklenanzahl während des
Zeitintervalls mit der entsprechenden Taktzyklenzeit. In anderen
Worten wird der Zeitraum der Befehlsausführung in mehrere Zeitintervalle
mit jeweils konstanter Taktzyklenzeit unterteilt, wobei für jedes
dieser Zeitintervalle die Dauer des Zeitintervalls durch Bestimmen
der Taktzyklenanzahl und Multiplikation mit der Taktzyklenzeit ermittelt
wird.
-
Die
die Ausführungszeit
kennzeichnende Größe kann
auch die Taktzyklenanzahl sein oder diese umfassen. Insbesondere
ist bei konstanter Taktzyklenzeit des Prozessor die Taktzyklenanzahl
ein ebenso guter Indikator für
die Ausführungszeit
wird die Ausführungszeit
selbst. Bei variabler Taktzyklenzeit oder Taktfrequenz des Prozessors
kann, falls die die Ausführungszeit
kennzeichnende Größe die Taktzyklenanzahl
ist, der Schwellenwert, mit welchem diese Größe verglichen wird, in Abhängigkeit
von der Taktfrequenz oder Taktzyklenzeit des Prozessors gewählt werden.
Bei einem Ausführungsbeispiel
wird in diesem Fall zusätzlich
zu der Taktzyklenanzahl während
der Befehlsausführung
und dem den Befehl kennzeichnenden Indikator jeweils auch die Taktfrequenz
oder Taktzyklenzeit gespeichert.
-
Der
den Befehl kennzeichnende Indikator kann ein Befehlszählerwert
des Prozessors sein.
-
Nach
einem Ausführungsbeispiel
wird das Verfahren als ein On-Chip-Debugverfahren
ausgeführt.
-
Das
Verfahren kann ein Auslesen der die Ausführungszeit kennzeichnenden
Größe und des den
Befehl kennzeichnenden Indikators umfassen, um diese einer weiteren
Analyse zuzuführen,
was es beispielsweise ermöglicht,
mögliche
Verletzungen von Echtzeitbedingungen während einer Applikation zu
erkennen.
-
Die
Schaltungsanordnung und das Verfahren nach den verschiedenen Ausführungsbeispielen weisen
den Vorteil auf, dass sie eine systematische Überwachung von mit einzelnen
Befehlen verbundenen Ausführungszeiten,
entweder für
alle Befehle aus einer Folge von Befehlen oder für Befehle einer bestimmten
Klasse von Befehlen, wie beispielsweise Speicherzugriffe, erlauben,
während
die Anforderungen an den Speicherplatz zum Speichern der Ausführungszeiten
moderat gehalten werden. Die Schaltungsanordnung und das Verfahren
nach den verschiedenen Ausführungsbeispielen
kann insbesondere beim Austesten von Software, speziell bei On-Chip-Debugverfahren,
Verwendung finden.
-
Im
Folgenden werden Ausführungsbeispiele der
vorliegenden Erfindung unter Bezugnahme auf die beigefügten Figuren
detaillierter erläutert.
-
1 ist
ein Schaltbild einer Schaltungsanordnung zum Erfassen einer Ausführungszeit
eines Befehls nach einem ersten Ausführungsbeispiel der Erfindung.
-
2 zeigt
ein Schaltbild für
eine abgewandelte Implementierung der Zeitbestimmungsmittel, welche
bei der Schaltungsanordnung von 1 Verwendung
finden kann.
-
3 zeigt
ein Schaltbild für
eine weitere abgewandelte Implementierung der Zeitbestimmungsmittel,
welche bei der Schaltungsanordnung von 1 Verwendung
finden kann.
-
4 zeigt
ein Schaltbild einer Schaltungsanordnung zum Erfassen einer Ausführungszeit
eines Befehls nach einem zweiten Ausführungsbeispiel der Erfindung.
-
5 zeigt
ein Schaltbild für
eine mögliche Implementierung
von Schaltungszustandssignaldetektormitteln.
-
Unter
Bezugnahme auf 1 wird eine Schaltungsanordnung 1 zum
Erfassen einer Ausführungszeit
eines Befehls nach einem ersten Ausführungsbeispiel erläutert werden.
Die Schaltungsanordnung umfasst einen Zähler 2 zum Zählen von Taktzyklen
oder Taktimpulsen CLK, einen Komparator 3 zum Vergleichen
der Taktzyklenanzahl mit einem Schwellenwert, und einen Speicher 4 zum
Speichern einer von dem Zähler 2 ermittelten
Taktzyklenanzahl oder einer anderen Größe, welche die Ausführungszeit
des Befehls kennzeichnet, sowie eines Indikators, welcher den gerade
ausgeführten
Befehl kennzeichnet. Wie nachfolgend näher erläutert werden wird, wird bei
der Schaltungsanordnung 1 von 1 die Taktzyklenanzahl
oder Ausführungszeit des
Befehls nur dann in dem Speicher 4 gespeichert, falls sie
einen vorherbestimmten Schwellenwert übersteigt. Der Schwellenwert
ist in dem Schwellenwertregister 5 gespeichert. Der Komparator 3 vergleicht
den Wert COUNT_VAL des Zählers 2 mit
dem Schwellenwert LIMIT, welche an den Eingängen A bzw. B des Komparators 3 anliegen,
und der Ausgang des Komparators 3 ist true, wenn der Zählerwert
größer als
der Schwellenwert ist.
-
Die
Schaltungsanordnung umfasst einen Prozessorsignaldetektor 7 zum Überwachen
eines Prozessorsignals, welcher als Änderungsdetektor ausgestaltet
ist. Der Prozessorsignaldetektor 7 bildet den Schaltungszustandsdetektor
für das
vorliegende Ausführungsbeispiel.
Eine mögliche
Realisierung des Prozessorsignaldetektors 7 wird unten
unter Bezugnahme auf 5 näher erläutert werden. Der Prozessorsignaldetektor 7 hat
die Funktion, basierend auf der Überwachung
des Prozessorsignals ein Start- bzw. Stopp-Signal zu erzeugen, welches
einen Beginn bzw. ein Ende einer Befehlsausführung kennzeichnet. Dabei umfasst
der Begriff Prozessorsignal allgemein sowohl solche Signale, welche
im Prozessorkern selbst erzeugt werden, als auch solche Signale,
welche in den Prozessorkern eingekoppelt werden. Bei der in 1 dargestellten
Schaltungsanordnung ist das Prozessorsignal ein Wert PC_VAL eines Befehlszählers des
Prozessorkerns, welcher von dem Befehlszäh ler 6 des Prozessorkerns
zu dem Prozessorsignaldetektor 7 geführt wird. Es sollte beachtet
werden, dass der Befehlszähler 6 nur
aus Gründen
der Übersichtlichkeit
in 1 mit dargestellt ist, typischerweise aber kein
Bestandteil der Schaltungsanordnung zum Erfassen einer Ausführungszeit
eines Befehls ist. Eine Änderung
des Befehlszählerwerts
PC_VAL zeigt an, dass ein Befehl abgearbeitet ist und der Prozessor
mit der Ausführung
eines neuen Befehls beginnt. Entsprechend hat der Prozessorsignaldetektor 7 zwei
Ausgänge,
von welchen einer ein Signal RESET_START trägt und mit dem Zähler 2 gekoppelt
ist, während
der andere ein Signal STORE2 trägt
und mit einem AND-Gatter 8 gekoppelt ist. Erfasst der Prozessorsignaldetektor 7 eine Änderung
des Befehlszählerwerts
PC_VAL, wird sowohl das Signal STORE2 als auch, mit einer Zeitverzögerung,
das Signal RESET_START true. Sowohl das Signal STORE2 als auch der
Ausgang des Komparators 3 werden an Eingänge des
AND-Gatters 8 geführt,
so dass das Signal STORE an dessen Ausgang dann und nur dann true
wird, falls bei einer Änderung
des Befehlszählerwerts,
welche dadurch angezeigt wird, dass STORE2 true wird, der Wert des Zählers 2 den
im Schwellenwertspeicher 5 gespeicherten Schwellenwert übersteigt.
-
Der
Ausgang des AND-Gatters 8 ist mit einem Eingang 4a des
Speichers 4 verbunden, so dass, wenn das Signal STORE true
wird, Werte des Befehlszählers,
PC_VAL, und des Zählers 2, COUNT_VAL,
an dem Dateneingang 4b in dem Speicher 4 gespeichert
werden.
-
Das
Signal RESET_START an dem zweiten Ausgang des Prozessorsignaldetektors 7,
welcher mit einem Eingang des Zählers 2 verbunden
ist, wird ebenfalls true, wenn sich der Wert PC_VAL des Befehlszählers ändert. In
diesem Fall wird der Wert des Zählers 2 auf
0 zurückgesetzt,
und der Zähler
beginnt von neuem, die Taktimpulse CLK des Prozessors zu zählen. Eine
zeitliche Verzögerung
zwischen den Übergängen der
Signale STORE2 und RESET_START auf true stellt sicher, dass der
Wert des Zählers 2 ausgelesen
werden kann, bevor er auf 0 zurückgesetzt
wird.
-
Es
sollte beachtet werden, dass bei der Schaltungsanordnung von 1 Daten
bezüglich der
Ausführungszeit
eines Befehls, nämlich
die Anzahl von Taktzyklen, welche während der Befehlsausführung verstreicht,
und der zugehörige
Wert des Befehlszählers
für den
entsprechenden Befehl, nur dann gespeichert wird, wenn die Anzahl
von Taktzyklen, d.h. der Wert des Zählers 2, den im Schwellenwertregister 5 gespeicherten
Schwellenwert übersteigt.
Damit verbunden ist eine drastische Reduktion der zu speichernden
Daten im Vergleich zu einer Schaltung, bei welcher die Taktzyklenanzahl
nicht mit einem Schwellenwert verglichen wird. Dies erlaubt es,
bei vorgebebener Speicherkapazität
des Speichers 4 die Ausführung einer längeren Folge
von Befehlen durch den Prozessor zu überwachen, um die Software
oder die Applikationen entsprechend auszutesten.
-
Da
in dem Speicher 4 nicht nur die Taktzyklenanzahl während der
Ausführung
des Befehls, welche ein Maß für die Ausführungszeit
ist, sondern zusätzlich
auch der Wert des Befehlszählers
gespeichert wird, ermöglichen
die in dem Speicher 4 gespeicherten Daten eine Analyse,
bei welchen Befehlen einer Folge von Befehlen große Latenz-
oder Ausführungszeiten
auftreten, welche zu einer möglichen
Verletzung von Echtzeitbedingungen führen können.
-
Der
in dem Schwellenwertregister 5 gespeicherte Schwellenwert
wird geeignet so gewählt,
dass zunächst
die Befehle in einer Folge von Befehlen identifiziert werden können, welche
besonders lange Ausführungszeiten
aufweisen. Mit zunehmender Softwareoptimierung, d.h. mit der Eliminierung
von Befehlen mit sehr langen Ausführungszeiten, kann der Schwellenwert
entsprechend abgesenkt werden, um die Software weiter optimieren
zu können.
Ein typischer Ausgangswert für
den Schwellenwert könnten
beispielsweise 3-5 Taktzyklen sein, so dass die Takt zyklenanzahl
und der Wert des Befehlszählers nur
dann gespeichert wird, wenn die Ausführung des Befehls eine Länge von
3-5 Taktzyklen übersteigt.
Im Lauf der Optimierung kann der Schwellenwert dann auf zwei Taktzyklen
oder sogar auf einen Taktzyklus abgesenkt werden. Da ein großer Teil
der Befehle in heutigen Prozessoren in einem Taktzyklus abgearbeitet
werden kann, ist mit dem Schwellenwert eine drastische Reduktion
der zu speichernden Datenmenge verbunden.
-
Trotz
der Reduktion der zu speichernden Datenmenge kann es vorkommen,
dass beispielsweise bei langen Abfolgen von Befehlen oder bei ungenügend optimierter
Software die Speicherkapazität
des Speichers 4 überschritten
wird. Dazu kann der Speicher 4 daher als FIFO ausgestaltet
sein, so dass bei einer Überschreitung
der Speicherkapazität
zuerst die ältesten
Daten überschrieben
werden.
-
Die
in 1 gezeigte Schaltungsanordnung kann als integrierter
Teil einer integrierten Schaltung, welche einen Prozessor umfasst,
ausgestaltet sein, d.h. die Schaltungsanordnung bildet eine On-Chip-Debugvorrichtung.
Um zu gewährleisten, dass
ein Benutzer selbst nach einem Systemabsturz auf die im Speicher 4 gespeicherten
Daten zugreifen kann, um Software weiter zu optimieren, verfügt die integrierte
Schaltung, welche die Schaltungsanordnung 1 umfasst, beispielsweise über eine
Debug-Schnittstelle, welche ein Auslesen des Speichers 4 selbst
nach einem Systemabsturz ohne einen Neustart des Prozessors ermöglicht.
Verfügt
die integrierte Schaltung über
weitere On-Chip-Debugvorrichtungen, so kann ein Bestandteil oder
können mehrere
Bestandteile der Schaltungsanordnung als kombinierte Element mit
den anderen Debugvorrichtungen ausgestaltet sein. Beispielsweise
kann der Speicher 4 ein Debug-Speicher sein, welcher von mehreren
Debugvorrichtungen gleichzeitig genutzt wird.
-
Bei
dem Ausführungsbeispiel
von 1 wird die Taktzyklenanzahl als Maß für die Ausführungszeit eines
Befehls in dem Speicher 4 abgelegt. Nicht nur bei konstanter
Taktzyklenzeit, sondern auch bei nur schwach variierender Taktzyklenzeit
oder Taktfrequenz des Prozessors ist die Taktzyklenanzahl ein gutes
Maß für die Ausführungszeit,
welches es ermöglicht,
mögliche
Verletzungen von Echtzeitbedingungen zu identifizieren. Jedoch ist
häufig
ein genaueres Maß für die Ausführungszeit
wünschenswert, beispielsweise
dann, wenn sich die Taktfrequenz während der Abarbeitung der Folge
von Befehlen stärker ändern kann.
Ein genaueres Maß für die Ausführungszeit
eines Befehls erhält
man in diesem Fall dadurch, dass die sich ändernde Taktzyklenzeit berücksichtigt
wird, wenn das Maß für die Ausführungszeit
berechnet wird. Zu diesem Zweck wird der Zähler 2 in 1 durch
komplexere Schaltungen ersetzt, welche diesem Zweck dienen.
-
Unter
Bezugnahme auf 2 und 3 werden
als nächstes
mögliche
Implementierungen für
Zeitbestimmungsmittel beschrieben, welche den Zähler 2 in 1 ersetzen
können,
um bei veränderlicher
Taktfrequenz des Prozessors ein verbessertes Maß für die Ausführungszeit eines Befehls bereitzustellen.
-
2 zeigt
eine erste Implementierung von Zeitbestimmungsmitteln 11,
welche einen Zähler 12 zum
Zählen
von Taktimpulsen CLK des Prozessors, einen Frequenzdetektor 14,
einen Multiplikator 15 und einen Addierer 16 umfassen.
Der Frequenzdetektor 14 ist als Änderungsdetektor ausgestaltet,
so dass er eingerichtet ist, eine Änderung der Taktfrequenz oder
Taktzyklenzeit des Prozessors zu erfassen. Zu diesem Zweck ist der
Frequenzdetektor 14 mit einem Register 13 gekoppelt,
dessen Wert der Taktzyklenzeit oder Taktfrequenz des Prozessors entspricht.
Das Register 13 ist zwar schematisch in 2 dargestellt,
bildet jedoch typischerweise keinen Bestandteil der Zeitbestimmungsmittel.
Der Wert für
die Taktzyklenzeit oder Taktfrequenz wird im Folgenden als F_VAL
bezeichnet. Der Frequenzdetektor 14 weist zwei Ausgänge auf,
welche mit dem Zähler 12 bzw.
dem Addierer 16 gekoppelt sind, wobei die Signale an den
Ausgängen
mit RESET2_START2 bzw. ACCUMULATE be zeichnet sind. Detektiert der Frequenzdetektor 14 eine Änderung
des in dem Register 13 gespeicherten Werts der Taktfrequenz
oder Taktzyklenzeit, wird sowohl das Signal ACCUMULATE als auch,
bevorzugt mit einer Zeitverzögerung
gegenüber
dem Signal ACCUMULATE, das Signal RESET2_START2 true. Der Eingang
der Zeitbestimmungsmittel 11, welcher mit dem Ausgang des
Prozessorsignalsdetektors 7 mit dem Signal RESET_START
gekoppelt ist, ist sowohl mit dem Zähler 12 als auch mit
dem Addierer 16 verbunden, so dass, wenn das Signal RESET_START
den Wert true annimmt, sowohl der Wert des Zählers 12 als auch
der Wert des Addierers 16 auf 0 zurückgesetzt wird. Darüber hinaus
wird der Wert des Zählers 12 auch
dann auf 0 zurückgesetzt,
wenn das Signal RESET2_START2 den Wert true annimmt, d.h. wenn sich
die Taktfrequenz oder Taktzyklenzeit des Prozessors ändert.
-
Aus
Gründen
der Einfachheit wird im Folgenden angenommen, dass die Taktzyklenzeit
des Prozessors nur solche Werte annehmen kann, die als rationales
Vielfaches einer Minimalperiode Tmin geschrieben werden können, d.h.
dass die Taktzyklenzeit T = m/n·Tmin ist, wobei m, n ganze
Zahlen sind. Der Wert F_VAL für
die Taktzyklenzeit ist in diesem Fall m/n. Der Multiplikator 15 ist
als Bruchzahlmultiplikator ausgestaltet, dessen Eingänge den
Wert F_VAL für
den Quotienten m/n bzw. den Wert COUNT_VAL des Zählers 12 empfangen
und das Produkt COUNT_VAL·m/n
berechnen. Da der Wert des Zählers 12 immer
dann auf 0 zurückgesetzt
wird, wenn entweder der Wert des Befehlszählers oder der Wert der Taktfrequenz
oder Taktzyklenzeit sich ändert,
korrespondiert der Wert COUNT_VAL des Befehlszählers 12 der Anzahl
von Taktzyklen seit der letzen Änderung
des Befehlszählerwerts
oder Taktfrequenz des Prozessors, je nachdem welcher der Werte sich
zuletzt geändert
hat. Somit entspricht der Wert COUNT_VAL des Zählers 12 der Taktzyklenanzahl
während
eines Zeitintervalls während
der Befehlsausführung,
während
dessen die Taktfrequenz oder Taktzyklenzeit konstant ist, und der
von dem Multiplikator 15 berechnete Wert entspricht der
Zeitdauer dieses Zeitintervalls.
-
Mit
der in 2 gezeigten Verschaltung haben die Komponenten 12, 14 und 15 somit
die Funktion, die Zeitdauer eines Zeitintervalls während der Befehlsausführung zu
ermitteln, während
welchem die Taktzyklenzeit des Prozessors konstant gehalten wird.
-
Bei
einer Änderung
der Taktfrequenz oder Taktzyklenzeit nimmt darüber hinaus das Signal ACCUMULATE
den Wert true an, woraufhin der Addierer 16 den multiplizierten
Wert COUNT_VAL·m/n
des Multiplikators 15 zu dem in dem Addierer 16 registrierten
Wert RT_COUNT_VAL addiert gemäß der Beziehung
RT_COUNT_VAL:=RT_COUNT_VAL + COUNT_VAL·m/n. Dasselbe gilt, falls
sich der Befehlszählerwert ändert. Der
Addierer 16 ist derart eingerichtet, dass in diesem Fall,
wenn das Signal RESET_START true wird, welches an dem in 2 unteren
Eingang des Addierers 16 eingekoppelt wird, zunächst COUNT_VAL·m/n addiert
wird, dann der Wert des Addieres 16 ausgelesen wird und
erst nach dem Auslesen des Addierers 16 der Wert auf 0
zurückgesetzt
wird. Dadurch wird gewährleistet,
dass auch bei dem Ende der Befehlsausführung der Wert COUNT_VAL·m/n durch
den Addierer 16 aufaddiert wird, bevor der Addierer 16 ausgelesen
wird. Der Addierer 16 berechnet somit die Summe der Zeitdauern der
Zeitintervalle während
der Befehlsausführung, während derer
die Taktzyklenzeit jeweils konstant ist, also einen akkumulierten
Wert der gesamten, seit Beginn der Befehlsausführung verstrichenen Zeit. Sind
die Zeitbestimmungsmittel 11 in die Schaltung 1 von 1 integriert,
so dass sie dort den Zähler 2 ersetzen,
ist der Ausgang des Addierers 16 mit einem Eingang des
Komparators 3 verbunden, so dass die Ausführungszeit
des Befehls, welche durch den Addierer 16 bereitgestellt
wird, mit dem im Register 5 gespeicherten Schwellenwert
verglichen werden kann.
-
Durch
Integration der Zeitbestimmungsmittel 11 von 2 in
die Schaltungsanordnung 1 von 1 wird diese
derart angepasst, dass ein zuverlässiges Maß der Ausführungszeit eines Befehls selbst
dann bereitgestellt werden kann, falls die Taktfrequenz oder Taktzyklenzeit
veränderlich
ist.
-
Eine
alternative Ausgestaltung der Zeitbestimmungsmittel 21 ist
in 3 dargestellt. Die Zeitbestimmungsmittel 21 umfassen
einen Zähler 22, welcher
wiederum die Taktimpulse CLK des Prozessors zählt und im mit der Schaltungsanordnung
von 1 kombinierten Zustand mit dem Ausgang des Prozessordetektors 7 gekoppelt
ist, um das Signal RESET_START zu empfangen. Die Zeitbestimmungsmittel 21 umfassen
weiterhin eine Inkrementlogikschaltung 24, welche den Wert
der Taktfrequenz oder Taktzyklenzeit des Prozessors aus einem Register 23 ausliest,
welches typischerweise keinen Bestandteil der Zeitbestimmungsmittel
bildet und nur schematisch dargestellt ist. Die Inkrementlogikschaltung 24 ist
mit dem Zähler 22 gekoppelt,
um ein Inkrement des Zählers 22 in
Abhängigkeit
von der Taktfrequenz oder Taktzyklenzeit des Prozessors einzustellen,
wobei der Wert des Inkrements als INC_VAL bezeichnet ist.
-
Im
Folgenden wird angenommen, dass sich die Taktfrequenz T des Prozessors
als Vielfaches einer minimalen Zeitperiode Tmin schreiben lässt, d.h. T
= m·Tmin,
wobei m eine ganze Zahl ist. Die Inkrementlogikschaltung 24 bestimmt
basierend auf dem Wert der Taktfrequenz F_VAL einen Inkrementwert INC_VAL
gemäß INC_VAL
= m·INC_MIN,
wobei INC_MIN ein minimales Inkrement, beispielsweise 1 ist. Der
Zähler 22 addiert
pro Taktimpuls des Prozessors CLK den jeweiligen Inkrementwert INC_VAL. Bei
einer Änderung
des Werts des Befehlszählers wird
der Zähler 22 dadurch,
dass das Signal RESET_START true wird, zurückgesetzt und neu gestartet.
Der aktuelle Wert des Zählers 22 stellt
ein Maß für die seit
Beginn der Befehlsausführung
verstrichene Zeit in Einheiten von Tmin dar und ist somit ein Echtzeitmaß für die Ausführungszeit.
Ist die Schaltung 21 in die Schaltungsanordnung von 1 integriert,
ist der Ausgang des Zählers 22 mit
dem Komparator 3 verbunden, welcher den Wert des Zählers mit
dem vorherbestimmten Schwellenwert vergleicht.
-
Die
Ausgestaltung der Zeitbestimmungsmittel wie sie unter Bezugnahme
auf 2 und 3 beschrieben wurde, zielt im
Wesentlichen darauf ab, die Ausführungszeit
des Befehls direkt zu bestimmen und basierend auf der Ausführungszeit
die dem Befehl zugeordneten Daten selektiv zu speichern. Anstatt
direkt die Ausführungszeit
zu berechnen, kann jedoch selbst bei veränderlicher Taktfrequenz oder Taktzyklenzeit
des Prozessors die Anzahl von Taktzyklen, welche während der
Befehlsausführung
verstreicht, als Maß für die Ausführungszeit
dienen, wobei die Schaltungsanordnung derart ausgestaltet werden
kann, dass auch bei veränderlicher
Taktfrequenz oder Taktzyklenzeit eine selektive Speicherung basierend
auf der Taktzyklenanzahl den gewünschten
Effekt reduzierter Speicheranforderungen erzielt.
-
Unter
Bezugnahme auf 4 wird als nächstes eine derartige Schaltungsanordnung 31 beschrieben.
Die Schaltungsanordnung 31 umfasst einen Zähler 32,
einen Komparator 33 und einen Speicher 34, deren
Aufbau und Funktion im Wesentlichen denjenigen der entsprechenden
Elemente 2, 3 und 4 von 1 entsprechen.
Im Gegensatz zu 1 ist jedoch der Speicher 34 eingerichtet,
um zusätzlich
zu dem Wert PC_VAL des Befehlszählers
und einer Taktzyklenanzahl COUNT_VAL den Wert F_VAL der Taktfrequenz
oder Taktzyklenzeit des Prozessors zu speichern, so dass nach dem
Auslesen des Speichers 34 die genauen Werte für die Ausführungszeiten
einzelner Befehle aus der Taktzyklenanzahl und der korrespondierenden
Taktzyklenzeit berechnet werden können. Die Schaltungsanordnung
umfasst weiterhin einen Prozessorsignaldetektor 37 und
einen Frequenzdetektor 40, deren Aufbau und Funktion im
Wesentlichen denjenigen des Prozessorsignaldetektors 7 von 1 bzw.
des Frequenzdetektors 14 von 2 entspricht.
Der Prozessorsignaldetektor 37 und der Frequenzdetektor 40 weisen
jeweils zwei Ausgänge
auf, von welchen jeweils einer mit den Eingängen eines OR-Gatters 41 und
die jeweils anderen mit den Eingängen
eines OR-Gatters 42 gekoppelt sind. Als Antwort auf eine Än derung
des Werts PC_VAL des Befehlszählers
wird der Signalwert STORE2 an dem mit dem OR-Gatter 41 verbundenen
Ausgang des Prozessorsignaldetektors 37 auf den Wert true
gesetzt, und mit einer Zeitverzögerung wird
auch der Signalwert RS2 an dem mit dem OR-Gatter 42 verbundenen
Ausgang des Prozessorsignaldetektors 37 auf den Wert true
gesetzt. Der Frequenzdetektor 40, welcher ebenfalls als Änderungsdetektor
ausgestaltet ist, ist mit einem Register 39 gekoppelt,
in welchem die aktuelle Taktfrequenz oder Taktzyklenzeit des Prozessors
abgelegt ist. Als Antwort auf eine erfasste Änderung der Taktfrequenz wird
der mit dem OR-Gatter 41 verbundene Ausgang des Frequenzdetektors 40 mit
dem Signal STORE3 auf den Wert true gesetzt, und mit einer Zeitverzögerung wird
auch der mit dem OR-Gatter 42 verbundene Ausgang des Frequenzdetektors 40 mit
dem Signal RS3 auf den Wert true gesetzt.
-
Der
Ausgang des OR-Gatters 42 ist mit dem Zähler 32 verbunden
und stellt das Signal RESET_START für diesen bereit. Somit wird
der Zähler 32 sowohl
bei einem Wechsel des Werts PC_VAL des Befehlszählers als auch bei einem Wechsel
der Taktfrequenz oder Taktzyklenzeit des Prozessors auf 0 zurückgesetzt
und neu gestartet. Der Ausgang des OR-Gatters 41 ist mit
einem Eingang eines AND-Gatters 38 gekoppelt, dessen anderer
Eingang mit dem Ausgang des Komparators 33 gekoppelt ist.
Der Ausgang des AND-Gatters 38 ist mit einem Eingang 34a des
Speichers 34 verbunden und stellt das STORE-Signal für diesen
bereit, wobei der Wert des Befehlszählers, die Taktzyklenanzahl und
die momentane Taktfrequenz in dem Speicher 34 gespeichert
werden, wenn das Signal STORE den Wert true annimmt. Es ist wichtig
zu beachten, dass bei dem in 4 dargestellten
Ausführungsbeispiel der
Wert PC_VAL des Befehlszählers,
der Wert COUNT_VAL des Zählers 32 und
die momentane Taktfrequenz oder Taktzyklenzeit F_VAL immer dann in
dem Speicher 34 abgelegt werden, wenn sich der Wert des
Befehlszählers
oder die Taktfrequenz ändert,
vorausgesetzt dass der Wert des Zählers 32 zu dem Zeitpunkt,
in welchem sich der Wert des Befehlszählers oder die Taktfrequenz ändert, den
zu gehörigen
Schwellenwert übersteigt
und der Ausgang des Komparators 33 den Wert true hat.
-
Um
zu berücksichtigen,
dass, beispielsweise im Hinblick auf echtzeitkritische Software
oder Applikationen, die Taktzyklenanzahl allein nicht immer ein geeignetes
Maß für die Ausführungszeit
ist, besteht ein wesentlicher Unterschied der Schaltungsanordnung
von 4 zur Schaltungsanordnung von 1 darin,
dass das Register 35 nicht einen einzelnen Schwellenwert,
sondern eine Mehrzahl von Schwellenwerten speichert, welche verschiedenen
möglichen
Taktfrequenzen oder Taktzyklenzeiten des Prozessors zugeordnet sind.
Die Mehrzahl von Schwellenwerten kann beispielsweise in Form einer
Schwellenwerttabelle gespeichert sein. Das Frequenzregister 35 weist
einen Eingang auf, um den Wert der Taktfrequenz oder Taktzyklenzeit
F_VAL zu empfangen und um als Antwort auf den empfangenen Wert der Taktfrequenz
oder Taktzyklenzeit den entsprechenden Schwellenwert LIMIT_VAL für den Komparator 33 bereitzustellen.
Durch diese Ausgestaltung der Schaltungsanordnung 31 wird
es möglich,
auch bei veränderlicher
Taktfrequenz oder Taktzyklenzeit des Prozessors den Schwellenwert
jeweils geeignet so zu wählen,
dass nur bei Überschreiten
einer bestimmten Zeitdauer während
der Ausführung
des Befehls der Wert des Befehlszählers, der Wert des Zählers 32 und
der aktuelle Wert der Taktfrequenz oder Taktzyklenzeit in dem Speicher 34 gespeichert
werden, um durch die selektive Speicherung eine Reduktion der zu
speichernden Datenmenge zu erreichen. In einem einfachen beispielhaften
Fall, in welchem der Prozessor mit zwei verschiedenen Taktzyklenzeiten
getaktet wird, von welchen eine doppelt so groß wie die andere ist, werden
die im Register 35 gespeicherten Schwellenwerte bei einem
Ausführungsbeispiel
derart gewählt,
dass der der kurzen Taktzyklenzeit zugeordnete Schwellenwert doppelt
so groß wie der
der langen Taktzyklenzeit zugeordnete Schwellenwert ist. Somit bleibt
auch bei der Schaltung von 4 das Überschreiten
einer bestimmten Zeitdauer das maßgebliche Kri terium dafür, dass
Daten in dem Speicher 34 gespeichert werden.
-
Eine
beispielhafte Ausgestaltung eines Änderungsdetektors, wie er als
Prozessorsignaldetektor 7 oder 37 bei den Schaltungsanordnungen
von 1 bzw. 4 oder als Frequenzdetektor 13 bzw. 40 in den
Schaltungen von 2 bzw. 4 Verwendung finden
kann wird als nächstes
unter Bezugnahme auf 5 erläutert. Der Änderungsdetektor 51 von 5 ist
beispielhaft für
den Fall eines Werts PC_VAL des Befehlszählers mit 4 Bits PC1-PC4 angegeben.
Eine Änderung
des Werts des Befehlszählers
wird dadurch überwacht,
dass die Änderung
der Werte der einzelnen Bits mit Schaltungen 52-55 bitweise überwacht
werden. Die Schaltungen 52-55 sind identisch ausgestaltet,
so dass beispielhaft nur die Schaltung 52 für das erste
Bit PC1 näher
erläutert
werden wird.
-
Die
Schaltung 52 umfasst eine zweistufige Registerkette mit
einem ersten Register 52a und einem zweiten Register 52b,
wobei in das erste Register 52a der aktuelle Wert des ersten
Bits PC1 eingetaktet wird. Das zweite Register 52b enthält den Wert dieses
Bits während
des vorhergehenden Taktzyklus. Die Ausgänge des ersten Registers 52a und
des zweiten Registers 52b sind mit den Eingängen eines XOR-Gatters 52c gekoppelt.
Der Ausgang des XOR-Gatters 52c nimmt den Wert true an,
falls die in dem ersten Register 52a und dem zweiten Register 52b abgelegten
Werte des ersten Bits verschieden sind, d.h. falls sich der Wert
des Bits zwischen dem vorhergehenden Taktzyklus und dem aktuellen
Taktzyklus verändert
hat. Ähnlich
ist der Ausgang der XOR-Gatter 53c-55c der Schaltungen 53-55 nur dann
true, wenn sich der Wert des entsprechenden Bits zwischen dem vorhergehenden
Taktzyklus und dem aktuellen Taktzyklus verändert hat.
-
Die
Ausgänge
der XOR-Gatter 52c-55c sind mit Eingängen eines
OR-Gatters 56 gekoppelt, so dass der Ausgang des OR-Gatters 56 den
Wert true annimmt, falls sich der Wert irgendeines der Bits des Befehlszählerwerts
zwischen dem vorhergehenden und dem aktuellen Taktzyklus verändert hat.
Das Ausgangssignal des OR-Gatters 56 kann in dem Fall, dass
der Änderungsdetektor
als Prozessorsignaldetektor 7 oder 37 verwendet
wird, direkt als das Signal STORE2 verwendet werden. Um das Signal RESET_START
zu bilden, wird der Ausgang des OR-Gatters 56 über eine
Verzögerungsstufe 57 geführt. Durch
die Verzögerungsstufe 57 wird
sichergestellt, dass die gewünschten
Werte im Speicher 4 bzw. 34 der Schaltungsanordnung
von 1 bzw. 4 gespeichert werden, was dadurch
veranlasst wird, dass das Signal STORE2 den Wert true annimmt, bevor
der Wert des Zählers 2 oder 32 auf
0 zurückgesetzt
und der Zähler
neu gestartet wird, was dadurch veranlasst wird, dass das Signal RESET_START
den Wert true annimmt. Die Verzögerungsstufe 57 muss
jedoch nicht notwendigerweise vorgesehen sein, so dass das Signal RESET_START
mit dem Signal STORE2 identifiziert werden kann, sofern sichergestellt
ist, dass die benötigten
Werte, wie beispielsweise der Wert des Zählers 2 oder 32,
in dem Speicher 34 gespeichert werden können, bevor der Zähler 2 bzw. 32 auf
0 zurückgesetzt
wird.
-
Natürlich sind
zahlreiche Abwandlungen und Modifizierungen der oben dargestellten
Schaltungen denkbar. So wurde beispielsweise bei den oben dargestellten
Schaltungsanordnungen 1 bzw. 31 von 1 bzw. 4 der
Wert PC_VAL des Befehlszählers
des Prozessors überwacht,
wobei eine Änderung des
Werts des Befehlszählers
den Beginn der Ausführung
eines neuen Befehls und das Ende der Abarbeitung des letzten Befehls
anzeigt. Die Schaltungsanordnungen sind jedoch nicht darauf beschränkt, den
Befehlzählerwert
zu überwachen,
sondern zahlreiche abgewandelte Ausführungen sind denkbar, bei welchen
beispielsweise ein Stall-Signal des Prozessors, ein Cache Miss-Signal
des Prozessors oder ein ein Ende eines Speicherzugriffs anzeigendes
Signal des Prozessors überwacht
werden kann. Auch wird bei den Ausführungsbeispielen von 1 und 4 der
Befehlszählerwert
als Indikator für
den Befehl in dem Speicher 4 bzw. 34 abgelegt,
dessen Ausführungszeit
be stimmt wurde. Jedoch ist die vorliegende Erfindung nicht darauf
beschränkt.
Vielmehr kann auch jeder andere geeignete Wert anstelle des Befehlszählerwerts
gespeichert werden, welcher es ermöglicht, bei einer anschließenden Analyse
der im Speicher 4 oder 34 abgelegten Daten den
Befehl aus der Folge von Befehlen zu identifizieren, welcher eine lange
Ausführungszeit
aufweist.
-
Die
unter Bezugnahme auf 1 bis 5 oben beschriebenen
Schaltungen können
bei jeder Anwendung verwendet werden, bei welcher es nötig ist,
lange Ausführungszeiten
einzelner Befehle in einer Folge von Befehlen zu ermitteln. Die
Schaltungsanordnungen können
zum Debuggen von Echtzeitsoftware verwendet werden.
-
Ein
Verfahren zum Debuggen von Echtzeitsoftware nach einem Ausführungsbeispiel
der Erfindung besteht in diesem Fall darin, unter Einsatz einer
Schaltungsanordnung nach einem Ausführungsbeispiel der Erfindung
die Ausführungszeiten
von Befehlen zu erfassen und diese anschließend aus dem Speicher der Schaltungsanordnung
auszulesen. Ein derartiges Verfahren ist besonders dann vorteilhaft, wenn
Systemabstürze
bei der Ausführung
von Software oder von Applikationen auftreten und vermutet wird,
dass die Verletzung von Echtzeitbedingungen zu diesen Systemabstürzen führt. Durch
Analysieren der im Speicher der oben beschriebenen Schaltungsanordnungen
gespeicherten Daten können
kritische Programmteile gut identifiziert und gegebenenfalls verändert werden,
um Applikationen zu optimieren.