Die zweite Stufe ist eine mit einer Hochsprache vergleichbare Notation, welche sich an die Syntax von C anlehnt. Mit dieser als »High Level TQL« (HTQL) bezeichneten Sprache ist eine abstraktere Beschreibung von Analyseaufgaben ohne detaillierte Kenntnis der Hardwareressourcen realisierbar. Die Trace-Aufgabe wird mit Hilfe von einfachen, bedingten Trace-Aktionen bzw. durch eine Zustandsmaschine beschrieben. Somit lassen sich auch komplexere Debug-Aufgaben vergleichsweise einfach umsetzen. Zu diesem Zweck ist der Sprachumfang von HTQL eher an Hochsprachenkonstrukte angelehnt und spiegelt nur begrenzt die Hardwarerealisierung des ESB wieder. »IF-THEN-ELSE«-Konstrukte dienen zur Definition von bedingten Trace-Aktionen und lassen sich jeweils in einem Zustand, gekennzeichnet durch ein vorangestelltes Label, einbetten. Zustandsübergänge werden durch »GOTO«-Anweisungen realisiert. Ein der eigentlichen Trace-Aufgabe vorangestellter Deklarationsteil initialisiert die Trace-Konfiguration und gibt verwendete Signale bekannt. Ein einfaches Beispiel für HTQL ist in Listing 1 gezeigt.
// Definition of signals
TSignal onBufferStartAccs =
DATA_ADDR.rw == 0x8000A000;
TSignal onBufferElemAccs =
DATA_ADDR.rw == 0x8000A008;
TSignal inInterruptFct =
0xD0001000 <= CODE_ADDR <= 0xD0001010;
// State machine defining trace actions
state_0:
if (onBufferStartAccs) then
goto state_1;
state_1:
if (inInterruptFct) then
store_instruction;
store_data;
if (onBufferElemAccs) then
trigger;
Listing 1: Verknüpfung mehrerer Komparatoren in HTQL