6. Testowanie i testowalność układów scalonych

6.7. Układy łatwo testowalne i samotestujące się

Zajmiemy się teraz odpowiedzią na pytanie: jak zaprojektować układ cyfrowy, by był on łatwo testowalny (czyli aby można było uzyskać wysoki poziom wykrywalności uszkodzeń przy umiarkowanej długości sekwencji wektorów testowych)? 

Projektowanie układów łatwo testowalnych polega na wyborze rozwiązań poprawiających obserwowalność i kontrolowalność wewnętrznych węzłów. Głównym problemem są bloki sekwencyjne, bowiem w nich ustawienie zera lub jedynki w konkretnym węźle, a potem zaobserwowanie na wyjściu, jaki tam był stan, może wymagać podania bardzo długiej sekwencji wektorów testowych. Niekiedy poprawę kontrolowalności i obserwowalności można osiągnąć przez wprowadzenie zmian do schematu logicznego oraz ewentualnie dodatkowych wejść i wyjść wykorzystywanych tylko przy testowaniu. Dodatkowe wejścia i wyjścia są jednak rozwiązaniem podnoszącym znacznie koszt układu, bowiem pola montażowe zajmują bardzo dużą powierzchnię. Uniwersalnym, skutecznym i powszechnie stosowanym sposobem jest wyposażenie układu w łańcuch skanujący (zwany także ścieżką skanującą) – rysunek 6-3. Łańcuch skanujący jest to utworzony z przerzutników rejestr szeregowy, który umożliwia przekształcenie układu sekwencyjnego w kombinacyjny na czas testowania. Wykorzystuje się tu przerzutniki istniejące w układzie, nie ma potrzeby dodawania nowych. Przerzutniki te mają jednak specjalną konstrukcję umożliwiającą wykorzystanie ich w łańcuchu skanującym.

 

Rysunek 6 3. Układ sekwencyjny z łańcuchem skanującym. (a) - praca w trybie normalnym, (b) - praca w trybie testowym.

 

Na rysunku 6-3 kolorem szarym zaznaczono połączenia nieaktywne w danym trybie pracy, pogrubiona czerwona linia: szeregowy łańcuch skanujący.

Rysunek 6-3 ilustruje ideę łańcucha skanującego. Układ składa się z bloków kombinacyjnych K i z rejestrów R, zaś w każdym rejestrze znajduje się pewna liczba przerzutników typu D. Układ z łańcuchem skanującym ma dwa tryby pracy: zwykły i testowy. W zwykłym trybie pracy każdy z przerzutników w rejestrach działa niezależnie od pozostałych. Układ wykonuje swe zwykłe funkcje. W trybie testowym wszystkie przerzutniki w rejestrach zostają połączone w jeden szeregowy rejestr przesuwający zwany łańcuchem skanującym, zaznaczony na rysunku 6-3b pogrubioną czerwoną linią. Teraz możliwe jest szeregowe wpisanie z wejścia testowego do łańcucha skanującego wektora testowego, który z wyjść przerzutników podany będzie bezpośrednio na wewnętrzne węzły układu – wejścia bloków kombinacyjnych. Odpowiedzi są z wyjść wpisywane do przerzutników w łańcuchu skanującym, po czym można je szeregowo wyprowadzić na wyjście testowe i porównać z prawidłowymi. W czasie wyprowadzania odpowiedzi na poprzedni wektor testowy można równocześnie wpisywać następny wektor. Dzięki łańcuchowi skanującemu węzły wewnętrzne połączone z przerzutnikami stają się w trybie testowym łatwo kontrolowalne i obserwowalne.

Budowa przerzutników do łańcucha skanującego nie jest skomplikowana. Idea jest pokazana na rysunku 6-4. Przy stanie „1” sygnału „test” następuje wpisywanie szeregowe wektora testowego. Po zakończeniu tego procesu stan sygnału „test” zmienia się na „0” na czas tak długi, aby w blokach kombinacyjnych ustaliły się odpowiedzi na wyjściach. Odpowiedzi te zostają wpisane do przerzutników, po czym sygnał „test” ponownie otrzymuje wartość „1”. Można teraz szeregowo wyprowadzić odpowiedzi na wyjście testowe.
 

Rysunek 6 4. Idea łączenia przerzutników w łańcuch skanujący przy zastosowaniu bramek transmisyjnych sterowanych sygnałem "test"

 

W bibliotekach komórek standardowych dostarczanych przez producentów układów z reguły znajdziemy dwa rodzaje przerzutnika D – zwykły oraz przystosowany do tworzenia łańcuchów skanujących.

W dużych układach pojedynczy łańcuch skanujący byłby bardzo długi, przez co podawanie kolejnych wektorów testowych w trybie wpisywania szeregowego trwałoby dużo czasu. Dlatego w dużych układach można wprowadzić wiele niezależnych łańcuchów skanujących o umiarkowanej długości, które mogą działać w trybie testowania równocześnie. 

Łańcuchy skanujące znalazły ważne zastosowanie także w testowaniu całych pakietów drukowanych, urządzeń i systemów. W przypadku wielowarstwowych płytek drukowanych wykonywanych nowoczesnymi technologiami mamy do czynienia z tym samym problemem, który występuje wewnątrz układów scalonych –brakiem dostępu do wewnętrznych węzłów. Co za tym idzie, testowanie pakietów drukowanych zawierających wiele układów scalonych jest równie trudne jak testowanie pojedynczych układów, a czasem nawet trudniejsze. Aby je ułatwić, wbudowuje się do wnętrza scalonych układów cyfrowych specjalne łańcuchy skanujące zwane brzegowymi lub krawędziowymi. Komórki tych łańcuchów znajdują się między wnętrzem układu, a polami montażowymi. W normalnym trybie pracy są one „przezroczyste” dla sygnałów. W trybie testowania są one łączone w łańcuch skanujący obejmujący wszystkie układy na pakiecie. Łańcuch taki pozwala wpisywać szeregowo wektory testowe, które po wpisaniu trafiają bezpośrednio na wejścia układów scalonych, i po otrzymaniu odpowiedzi wyprowadzić je w trybie szeregowym. Łańcuch tego typu bywa nazywany krawędziową ścieżką skanującą (ang. „boundary scan path”). Tę ideę ilustruje rysunek 6-5.
 

Rysunek 6 5. Krawędziowa ścieżka skanująca dla czterech układów scalonych na pakiecie drukowanym

 

Krawędziowa ścieżka skanująca jest znormalizowana (norma IEEE 1149.1), dzięki czemu można swobodnie łączyć ze sobą układy różnych producentów. Większość katalogowych cyfrowych układów scalonych jest obecnie wyposażona w taką ścieżkę. Szczegółów technicznych nie będziemy tutaj omawiać.

Testowanie staje się jeszcze prostsze, jeśli układ ma wbudowany mechanizm samotestowania.  Samotestowanie można zrealizować wbudowując w układ generator wektorów testowych oraz układ analizujący prawidłowość odpowiedzi. Mogłoby się wydawać, że to jest do zrealizowania przez wprowadzenie do układu dwóch pamięci ROM: pamięci wektorów testowych i pamięci poprawnych odpowiedzi, oraz układu porównującego odpowiedzi otrzymane z prawidłowymi. Jest to jednak rozwiązanie niepraktyczne, bo potrzebne do tego pamięci z reguły zajmowałyby w układzie bardzo dużo miejsca. Stosowane zazwyczaj rozwiązanie polega na wprowadzeniu do układu generatora pseudolosowych sekwencji wektorów testowych oraz układu analizy odpowiedzi poddającego kolejne odpowiedzi kompresji prowadzącej do otrzymania t.zw. sygnatury - pojedynczego słowa binarnego, które ma jednoznacznie określoną wartość w przypadku układu sprawnego, natomiast przyjmuje inne wartości, jeśli w testowanym układzie jest uszkodzenie.
 

Rysunek 6 6. Trzybitowy generator wektorów pseudolosowych

 

Taki układ generuje w każdym takcie zegara nowy wektor różny od poprzedniego (pod warunkiem, że stany początkowe przerzutników to nie są same zera). Ciąg tych wektorów nie jest przypadkowy, zależy od stanów początkowych w przerzutnikach, ale ma cechy statystyczne ciągu losowego. Po wygenerowaniu 2n-1 wektorów (n – liczba przerzutników) generowana sekwencja powtarza się. Jednak w testowaniu wystarcza zwykle wykorzystywanie tylko początkowej, znacznie krótszej sekwencji. W czasie testowania kolejne wektory podawane są na wejścia testowanego układu, a odpowiedzi na wejście układu tworzącego sygnaturę. Taki układ może być zbudowany podobnie, jak generator wektorów pseudolosowych.

 

Rysunek 6 7. Układ tworzący trzybitową sygnaturę

 

W każdym takcie zegara tworzone jest na wyjściu układu nowe słowo binarne, które zależy od wszystkich poprzednich oraz od ostatniej odpowiedzi układu. Po zakończeniu testowania końcowe słowo jest sygnaturą. Porównywana jest ona z zapamiętaną sygnaturą poprawną (tj. otrzymaną z układu bez uszkodzeń).

Nic nie stoi na przeszkodzie, aby w dużym układzie stosować wszystkie omówione sposoby testowania jednocześnie, dobierając metodę testowania do charakteru i stopnia złożoności testowanego bloku.

Jak widać, testowanie jest na tyle złożonym zagadnieniem, że wymaga brania pod uwagę od samego początku procesu projektowania układu.