Die Hauptaufgabe in der Vorbereitung eines Tests liegt in der Erzeugung geeigneter Testmuster. Diese sollen so gestaltet sein, daa sie mit möglichst wenigen Testmustern möglichst alle Fehlermöglichkeiten abdecken.
Die Vefahren zur Erzeugung von Testmustern lassen sich wieder in 2 Gruppen aufteilen:
Die strukturorientierten Verfahren, denen die Schaltungsstruktur auf Gatterebene zugrunde gelegt wird, und die funktionsorientierten Verfahren, die dann verwendet werden, wenn die Struktur auf Gatterebene unbekannt oder zu komplex ist (vergleiche Fehlermodelle!)
Bei den strukturorientierten Verfahren werden unter Verwendung strukturorientierter Fehlermodelle (meist Haftfehler) Testmuster bestimmt, welche eine Überprüfung der korrekten Realisierung ermöglichen. Die strukturelle Testmustererzeugung basiert meist auf der sogenannten \"Pfadsensibilisierung\". Durch Ausbildung eines sensiblen Pfades wird jede Signaländerung auf diesem Pfad am Ausgang der Schaltung beobachtet. Ein Test sämtlicher möglicher Signalpfade überprüft die Struktur der Schaltung, womit gleichzeitig die Funktion der Schaltung bei allen möglichen Eingangssignalen bestätigt ist.
Bei den fumktionsorientierten Verfahren wird der Prüfling als geschlossene Einheit betrachtet. Aus einer Funktionsbeschreibung in Form von Gleichungen oder Tabellen wird ein abstraktes Schaltungsmodell, z.B. auf Registerebene abgeleitet, für das unter Verwendung bestimmter funktionsorientierter Fehlermodelle die Testmuster erzeugt werden.
Die Testmustererzeugung selbst erfolgt meist rechnergestützt mit automatischen Testmustererzeugungssystemen (ATPG) die für jede der beiden Hauptrichtungen mehrere Verfahren anbieten. Die Auswahl des geeigneteten Testmustererzeugungsverfahrens obliegt dem Benutzer. Mögliche Kriterien bei der Auswahl eines Verfahrens sind:
- geringer Rechenzeitbedarf bei der Mustererzeugung
- kurze Testlänge (geringe Anzahl von Mustern) für minimale Testzeit
- einfache Generierung der Testmuster während des Tests
3.2.1 Testmuster für kombinatorische Schaltungen
Eine kombinatorische Schaltung ist dadurch gekennzeichnet, daa sie gedächtnislos auf die Eingangsdaten reagiert. Das Verhalten der Ausgänge ist somit eindeutig als Funktion der Eingänge zum aktuellen Zeitpunkt darstellbar.
Ein Fehler kann nur dann durch ein Testmuster erkannt werden, wenn das Testmuster im Fehlerfall ein anderes Ergebnis liefert als bei funktionierender Schaltung. Als Beispiel sei hier die Schaltung in Bild 3.8 angeführt.
Bild 3.4 Beispielschaltung mit 2 möglichen Haftfehlern
Diese Schaltung realisiert normalerweise folgende Funktion:
Z = A B + B C
Beim Auftreten des Fehlers , Eingang B sa1 verändert sich die Schaltfunktion zu:
Z = A + C
mit den entsprechenden Abweichungen in der Funktionstabelle:
Nr A B C Z Z Z
0 0 0 0 0 0 0
1 0 0 1 0 1 0
2 0 1 0 0 0 0
3 0 1 1 1 1 1
4 1 0 0 0 1 1
5 1 0 1 0 1 1
6 1 1 0 1 1 1
7 1 1 1 1 1 1
Die Funktionstabelle verdeutlicht, daa der Fehler durch 3 Eingangsvektoren entdeckbar ist; die Testmuster lauten (0,0,1), (1,0,0) und (1,0,1). Wie für diesen Fehler lassen sich auch die Testmuster für die übrigen Fehler durch Vergleich der Testmuster herleiten. Dabei ergibt sich, daa sämtlich Fehler mit nur 4 Testmustern entdeckt werden können, gegenüber 8 beim vollständigen Test. Es wird jedoch deutlich, daa diese Methode in dieser Form speziell bei größeren Netzwerken einen sehr großen Arbeitsaufwand darstellt und somit unrentabel ist.
Es gibt aber eine möglichkeit, diese Methode zu \"mathematisieren\" und mit weniger Aufwand lösbar zu machen:
Für ein Testmuster, das einen Fehler erkennt gilt:
Z + ZF = 1
womit sich für den Fehler ergibt:
(A B + B C) + (A + B) = 1 = A B + B C
Diese Gleichung wird genau für die 3 Testmuster erfüllt, die fehlererkennend wirken.
Entsprechend ergeben sich die Testmuster, die für Fehler fehlererkennend wirken zu (1,0,0) und (1,0,1). Diese Testmuster entdecken aber auch den Fehler . Tritt nun während des Tests bei einem dieser Testmuster ein Fehler auf, kann nicht zwischen dem Fehler und dem Fehler unterschieden werden. Dazu benötigt man ein anderes Testmuster, das diese beiden Fehler zu unterscheiden vermag. Analog zur Bedingung für fehlerentdeckende Testmuster lautet diese:
ZF1 + ZF2 = 1
Für das oben angeführte Beispiel ergibt sich dann das Testmuster (0,0,1) zur Unterscheidung zwischen diesen beiden Fehlern.
Fehlerunterscheidende Testmuster werden, wie bereits erwähnt, zu Lokalisierung des Fehlerortes benötigt. Durch die Notwendigkeit von zusätzlichen fehlerunterscheidenden Testmustern, kann der Test aber insgesamt stark vergrößert werden, weshalb man diese Testmuster meist nur in der Entwicklugsphase oder wenn der Prüfling durch eine Fehlerlokalisierung repariert werden kann benützt, was aber im allgemeinen nur bei Speichern möglich ist.
Da diese Methode mit steigender Schaltungskomplexität sehr schnell immer rechenintensiver wird, wendet man sie hauptsächlich für kleine Schaltungen an.
Bei größeren Schaltungen wendet man die Methode der Pfadsensibilisierung an, bei der die Eingänge aller Gatter so belegt werden, daa der Ausgang nur noch von einem einzigen Pfad abhängt. Die einzelnen Gatter schalten das Signal dann entweder nur mehr durch, oder invertieren es.
Regeln für die Gattersensibilisierung:
Gattertyp Belegung der übrigen GAttereingänge
AND, NAND alle logisch 1
OR, NOR alle logisch 0
Inverter, EXOR keine Bedingungen
Bild 3.5 Beispielschaltung zur Pfadsensibilisierung
Diese Schaltung kann gegenüber einem Fehler am Punkt a sensibilisiert werden, indem man den Zustand von Gatter 3 und 4 nur noch vom Zustand des Gatters 1 abhängig macht.
Dies kann geschehen durch C = 0, D = 1. Durch C = 0 ist das Signal am Punkt b sicher 0, und damit der Ausgangszustand des Gatters 3 nur noch vom Signal am Punkt a abhängig, und durch D = 1 ist das Ausgangssignal nur noch von Gatter 3 abhängig.
3.2.3 Testmuster für sequentielle Schaltungen
Diese ähneln prinzipiell denen für kombinatorische Schaltungen, es ist jedoch zu beachten, daa nach dem Einschalten ein undefinierter Zustand vorliegt, sodaa das Schaltwerk entweder zunächst initialisiert werden mua (einfachste Möglichkeit: über hardwaremäßigen Rücksetzeingang) oder daa vom Anfangszstand unabhängige Testmuster gewählt werden, was meist bevorzugt wird.
Die Testmustererzeugung selbst erfolgt meist durch Auftrennung der Rückkopplungsleitungen der Schaltung, und Überleiten in ein kombinatorisches Netzwerk.
Bild 3.6 allgemeines Modell einer sequentiellen
Schaltung; m Eingänge, n Registerzellen, p Ausgänge
Bild 3.7 sequentielles Modell übergeleitet in ein
kombinatorisches
Die sequentielle Schaltung wird hierbei durch Momentaufnahmen der Schaltung zu bestimmten Zeitpunkten dargestellt.
Für dieses nun wieder rein kombinatorische Modell können mit Hilfe der hierfür benützbaren Verfahren die Fehler bestimmt werden. Da die Testmustererzeugung selbst aber durch wiederholte Anwendung der bekannten Pfadsensibilisierungsverfahren auf jede der erforderlichen Zellen des umgewandelten Modells durchgeführt werden muß, und die Sensibilisierung durch sämtliche Speicherstufen hindurch erfolgen muß, kommt man hier sehr bald zu einer Grenze, die durch den benötigten Speicherplatz und die Rechenzeit hervorgerufen wird.
Für solche Fälle wird dann auf funktionsorientierte Verfahren übergegangen, die nur von der \"Automatentafel\" des Systems abhängen, und damit realisationsunabhängig sind. Hierbei werden Testfolgen bestimmt, die prüfen, ob die zu testende Schaltung fehlerfrei ist.
Die Ausführung dieser Verfahren kann aufgrund Ihrer Komplexität hier nicht angeführt werden, sie ist in geeigneter Literatur (E.F. Moore: experiments on sequential machines Princeton University Press 1956; Z. Kohavi, P.Lavallee: Design of sequential machines with fault detection capabilities IEE Trans. EC-16 1967; C.E. Holborow: An improved bound on the length of checking sequential machines with counter cycles IEEE Trans. C-21 1976; H. Fujiwara et al.: Easily testable sequential machines with extra inputs IEEE Trans. C-24 1975) beschrieben.
|