- Joint Test Action Group
-
Joint Test Action Group (kurz JTAG) bezeichnet den IEEE-Standard 1149.1, der eine Ansammlung von Verfahren zum Testen und Debuggen von elektronischer Hardware direkt in der Schaltung beschreibt. Das heute prominenteste und gleichzeitig zuerst in JTAG implementierte Verfahren ist der Boundary Scan Test. Durch das Hinzufügen weiterer Verfahren sind die Begriffe nicht mehr synonym, während die Beschreibungssprache von JTAG mit Boundary Scan Description Language den ursprünglichen Namen beibehielt.
Zweck des Verfahrens ist es, integrierte Schaltungen (ICs) auf Funktion zu testen, während sie sich bereits in ihrer Arbeitsumgebung befinden, beispielsweise verlötet auf einer Platine. Dazu besitzt ein JTAG-fähiges IC bestimmte Komponenten, die im Normalbetrieb vollkommen abgetrennt sind und somit die Funktion des Bauteils nicht stören. Erst durch Aktivierung der JTAG-Funktion an einem bestimmten Pin, dem Test Mode Select Input, wird die Kontrolle bestimmter Funktionen an JTAG übergeben. Die Schnittstelle von JTAG zur Außenwelt ist als Schieberegister implementiert.
Inhaltsverzeichnis
Motivation und Entwicklung
Ende der 1970er Jahre war der Integrationsgrad der Mikroelektronik soweit gestiegen (zeitgenössische komplexe IC sind Intel 4004, Intel 8008 oder Zilog Z80), dass ICs mit tausenden Flipflops bzw. Registern in einem IC arbeiteten. Die Zustände dieser internen Flipflops sind bei einem IC nicht mehr zugänglich. Es entstand die Forderung (zunächst der IC-Hersteller selbst), dass zum Test der Struktur eines komplexen IC dessen Gatter und Leitungen steuerbar; zum Test der Funktion die Zustände (aller Register und Flipflops) beobachtbar sein sollten. Eichelberger veröffentlichte 1977[1] einen als Scan-Path bezeichneten Lösungsansatz, bei dem jedes Flipflop im IC einen zusätzlichen Multiplexer (Transfergate) am Eingang erhält. Auf diese Weise können nun alle Flipflops des IC wahlweise zu einem langen Schieberegister zusammengeschaltet werden, über das jeder Zustand jedes Flipflops von außen beobachtbar und steuerbar wird.
Der JTAG-Standard entstand durch einen Zusammenschluss von Halbleiterherstellern im Jahr 1985/86. Es wurde ein Standard erarbeitet, der in der Norm IEEE 1149.1-1990 festgehalten wurde. Mit der Überarbeitung IEEE 1149.1-1994 ist die Boundary Scan Description Language Teil des Standards. Die aktuelle Version des Standards ist 1149.1-2001 IEEE standard test access port and boundary-scan architecture.[2]
Funktionsweise
Aufbau
Eine JTAG-Komponente besteht im Wesentlichen aus folgenden Teilen:
- Dem Test Access Port (TAP) mit den Steuerleitungen, im allgemeinen auch JTAG-Port oder JTAG-Schnittstelle genannt.
- Dem TAP-Controller, eine State-Machine, welche die Testlogik steuert.
- Zwei Schieberegistern, dem „Instruction Register“ (IR) und dem „Data Register“ (DR).
Test Access Port
Der Test Access Port (TAP) besteht aus fünf Steuerleitungen:
- Test Data Input (TDI). Serieller Eingang der Schieberegister.
- Test Data Output (TDO). Serieller Ausgang der Schieberegister.
- Test Clock (TCK). Das Taktsignal für die gesamte Testlogik.
- Test Mode Select Input (TMS). Diese Leitung bestimmt, in welchen folgenden State die State Machine des Test Access Port bei der nächsten positiven Signalflanke des TCK-Signals springt.
- Test Reset (TRST). Reset der Testlogik. Dieses Signal ist optional
Verdrahtung in der Gesamtschaltung
An eine JTAG-Schnittstelle können mehrere integrierte Schaltungen angeschlossen werden. Im Englischen spricht man von einer „JTAG chain“. Effektiv kommt es dabei zu einer Reihenschaltung der Schieberegister der beteiligten ICs. Die TAP-Controller der einzelnen ICs laufen dabei parallel.
TAP-Controller
Der Tap-Controller ist ein von TCK getakteter und von der TMS-Leitung gesteuerter Zustandsautomat. Die TMS-Leitung bestimmt dabei, in welchen Folgezustand beim nächsten Takt gesprungen wird. Der TAP-Controller hat sechs stabile Zustände, das heißt Zustände, in denen mehrere Takte verblieben werden kann. Diese sechs Zustände sind „Test Logic Reset“, „Run Test / Idle“, „Shift-DR“ und „Shift-IR“ sowie „Pause-DR“ und „Pause-IR“. Im Zustand „Test Logic Reset“ wird die Testlogik zurückgesetzt, „Run Test / Idle“ wird als Ruhezustand oder für Wartezeiten benutzt. Die beiden „Shift“-Zustände schieben jeweils das DR- oder IR-Schieberegister. Die beiden „Pause“-Zustände dienen der Unterbrechung von Schiebeoperationen. Aus allen anderen Zuständen wird beim folgenden Takt in einen anderen Zustand gesprungen. Beim Durchlaufen werden jeweils bestimmte Steuerfunktionen ausgelöst.
Register
Ein IC mit JTAG-Port verfügt nach außen über zwei Register, das „Instruction Register“ (IR) und das „Data Register“ (DR). Das "Data Register" ist dabei ein von mehreren Datenregistern gemeinsam benutztes Schieberegister.
Bei einer Schiebeoperation wird dabei der TDI-Eingang in das vorderste Bit des Schieberegisters „hineingeschoben“, das hinterste Bit des Schieberegisters wird zum TDO-Ausgang „hinausgeschoben“. Sind mehrere ICs in einer „JTAG-Chain“ hintereinandergeschaltet, müssen Informationen, die für ein bestimmtes IC gedacht sind, durch die Schieberegister der vorherigen hindurchgeschoben werden. Welches der beiden Register (IR oder DR) geschoben wird, hängt davon ab, ob sich der TAP-Controller im DR- oder im IR-Zweig befindet.
Das „Instruction Register“ (IR)
Wenn eine Schiebeoperation durch die Datenregister (DR, siehe unten) erfolgt, gibt der Wert des "Instruction Registers" (IR) an, durch welches der Datenregister die Schiebeoperation erfolgt. Aufgrund der Verschaltung der Schieberegister können die Instruction Register aller Bausteine in einer „JTAG chain“ nur gemeinsam geschrieben werden.
Das IR hat keine bestimmte Länge. Es ist bei einigen Mikrocontrollern 4 Bit (z. B. ARM, Maxim/Dallas DS4550, Renesas SH-Mikrocontroller), bei anderen 5 Bit (z. B. Freescale MPC5554) oder auch 8 Bit (z. B. Infineon C166) breit.
Bestimmte Werte des IR können vom IC bei Beendigung der Schiebeoperation als Kommando interpretiert werden. Beim Auslesen wird das "Instruction Register" (IR) oft als Statusregister benutzt.
Das „Data Register“ (DR)
Das „Data Register“ (DR) ist ein von mehreren Datenregistern gemeinsam benutztes Schieberegister. Welches Register darauf abgebildet wird, wird vom „Instruction Register“ (IR) bestimmt. Dieses kann als Steuerung eines Multiplexers verstanden werden, das die Datenregister auf den TDO-Ausgang multiplext. Der IEEE 1149.1-Standard schreibt bestimmte Register vor, die in allen JTAG-fähigen Bausteinen enthalten sein müssen. Das sind das Bypass-, das IDCODE- und das Boundary-Scan-Register.
Das Bypass-Register
Bei diesem Datenregister handelt es sich um ein Dummy-Schieberegister mit einem Bit Breite. Hintergrund ist, dass die Datenregister (DR) aller ICs wie beim IR nur gleichzeitig gelesen und beschrieben werden können. Soll nur das Datenregister eines einzelnen IC in der "JTAG chain" gelesen oder geschrieben werden, so wird in die IRs aller anderen ICs der Wert „Bypass-Register auswählen“ geladen, so dass dieses Register ausgewählt wird. Dadurch wirken diese ICs beim Schieben durch die DRs lediglich wie zwei parasitäre Schieberegister vor und hinter dem DR des IC, das eigentlich beschrieben werden soll.
Das IDCODE-Register
Beim Beginn einer Schiebeoperation durch dieses Datenregister (DR) wird eine IC-Kennung (Hersteller und Produkttyp) in das Schieberegister geladen, die zur Identifizierung des IC dient.
Das Boundary-Scan-Register
Die Bits dieses Datenregisters (DR) repräsentieren die Pins des IC. Die genaue Bedeutung ist herstellerabhängig. Ähnlich wie bei einer speicherprogrammierbaren Steuerung kann mit dem Boundary-Scan-Register der Spannungspegel aller Ausgänge bestimmt und die Spannungspegel aller Eingänge gelesen werden. Das wird für Scan Tests genutzt.
Weitere Register
Über die drei vorgeschriebenen Datenregister hinaus können aber auch zusätzliche Register definiert werden, die beispielsweise eine Debug- oder Programmierschnittstelle zur Verfügung stellen. So verfügt beispielsweise im Fall von ARMv5 das IC über drei spezielle Register, die als Datenregister (DR) angesprochen werden.
Um den JTAG-Port eines IC nutzen zu können, ist es notwendig, seinen Aufbau und die enthaltenen Register genau zu kennen. Das wird in einer vom Hersteller bereitgestellten BSDL-Datei (Boundary Scan Description Language) beschrieben.
Weitere Anwendungen
Inzwischen wird JTAG vermehrt auch zur Konfiguration von FPGAs und CPLDs sowie zum Programmieren und zum Debuggen von Mikrocontrollern verwendet. Parallel programmierbare Speicher wie zum Beispiel Flashspeicher, die direkt an ein IC mit JTAG-Port angeschlossen sind, können deshalb im eingebauten Zustand umprogrammiert werden, weil das IC für den Speicherchip ein Programmiergerät emulieren kann. Zum Austausch solcher Programmierdaten dient oft das Serial Vector Format (SVF).
Erweiterungen
Der IEEE-Standard 1149.1 wurde inzwischen mit einer Anzahl Erweiterungen versehen. Das sind:
- 1149.4: IEEE Standard for a Mixed-Signal Test Bus, Testen von analogen Schaltkreisen.[3]
- 1149.5: IEEE Standard for Module Test and Maintenance Bus (MTM-Bus) Protocol, wurde 2003 zurückgezogen.[4]
- 1149.6: IEEE Standard for Boundary-Scan Testing of Advanced Digital Networks, Testen von Differenzsignalen, auch mit AC-Kopplung.[5]
- 1149.7: IEEE Standard for Boundary-Scan Testing of Advanced Digital Networks, vereinfachter Test-Port mit nur zwei Signalen.[6]
Eine weitere Erweiterung des JTAG-Standards, speziell zum Programmieren von JTAG-fähigen Bausteinen wurde unter der Bezeichnung IEEE Std 1532-2002: IEEE Standard for In-System Configuration of Programmable Devices[7] verabschiedet. Ein diesem Standard entsprechender Baustein verfügt über bestimmte zusätzliche Register, die für seine Programmierung vorgesehen sind.
Siehe auch
Einzelnachweise
- ↑ Edward Eichelberger, Thomas Williams: A logic Design Structure for LSI Testability. In: Proceedings of the 14th Design Automation Conference. June 1977, S.462-468.
- ↑ IEEE OPAC: IEEE Std 1149.1-2001 IEEE standard test access port and boundary-scan architecture doi:10.1109/IEEESTD.2001.92950
- ↑ IEEE OPAC: IEEE Std 1149.4-1999: IEEE Standard for a Mixed-Signal Test Bus doi:10.1109/IEEESTD.2000.91314
- ↑ IEEE Std 1149.5-1995: IEEE Standard for Module Test and Maintenance Bus (MTM-Bus) Protocol
- ↑ IEEE OPAC: IEEE Std 1149.6-2003: IEEE Standard for Boundary-Scan Testing of Advanced Digital Networks doi:10.1109/IEEESTD.2003.94249
- ↑ IEEE OPAC: IEEE Std 1149.7-2009: IEEE Standard for Reduced-Pin and Enhanced-Functionality Test Access Port and Boundary-Scan Architecture doi:10.1109/IEEESTD.2010.5412866
- ↑ IEEE OPAC: IEEE Std 1532-2002: IEEE Standard for In-System Configuration of Programmable Devices doi:10.1109/IEEESTD.2003.94229
Weblinks
- Boundary-Scan Tutorial (englisch)
- JTAG-FAQ (englisch)
- Free JTAG/Boundary Scan Resources (englisch)
- Overview of JTAG technology (englisch)
- JTAG – was kann es, was muss man dafür tun? Anwendungs- und Kostenaspekte (PDF, 701 kB)
- IEEE Std 1149.1 Tutorial (deutsch)
- goJTAG - free and open source alternative (english)
Kategorien:- IEEE-Norm
- Protokoll (Hardware)
- Peripheriebus (extern)
- Mikrocontroller
Wikimedia Foundation.