Popis rozhraní JTAG

Test Access Port a architektura Boundary-Scan podle normy IEEE 1149.1 1990

Úvod

Skupina výrobců integrovaných obvodů a jejich prodejců označovaná jako JTAG (Joint

Test Actoin Group) usiluje o dosažení dohody, která by stanovila princip konstrukce

integrovaných obvodů. Cílem této skupiny je, aby metodika testování integrovaných

obvodů byla použitelná i v případě, že se na jedné desce vyskytují komponenty od

různých výrobců. Současná verze této metodiky, reprezentovaná normou IEEE 1149.1,

je výsledkem sjednocení názorů výrobců integrovaných obvodů a jejich zákazníků. Je to

kompromis mezi snahou o respektování požadavků diagnostiky a snahou o co nejnižší

výrobní náklady. Doporučení JTAG není striktní v tom smyslu, že by přesně určovalo,

jak testovací obvody (Boundary-Scan buňky) konstruovat. Zaměřuje se spíše na

definování rozhraní integrovaného obvodu a způsob komunikace na tomto rozhraní.

Norma IEEE 1149.1 tedy definuje testovací logické obvody, které mohou být zařazeny

do integrovaných obvodů za účelem testování propojení mezí jednotlivými

komponentami na již osazených deskách, testování integrovaného obvodu samotného

a sledování chování integrovaného obvodu při jeho normální činnosti.

Testovací logika se skládá s boundary-scan registru a dalších vestavěných bloků. Pro

přístup k testovací logice a jejímu řízeni slouží tzv. Test Access Port (TAP).

Obvody vyhovující normě JTAGu dovolují, aby do jejich komponent byly načteny

testovací instrukce a data a po provedení testovacích instrukcí pak provést výstup

výsledků testování. Komunikace s JTAGem (přenos instrukcí, testovacích dat a

výsledku testů) probíhá sériově.

Obecně bývá prvním krokem při testování obvodu sériové nahrání instrukce, pro

operaci, která má být provedena. Testovací logika je navržena tak, že sériový posuv

instrukce neovlivní ty bloky obvodu, jejichž činnost je ovládána touto instrukcí. Vliv

instrukce na tyto bloky se projeví až po dokončení posuvu instrukce (po jejím celém

načtení do obvodu).

Jakmile je jednou instrukce načtena, vybraný testovací obvod je nakonfigurován k

odezvě. Nicméně v některých případech je potřeba do vybraného testovacího obvodu

načíst příslušná data, aby výsledky testu byly smysluplné. Data jsou do obvodu

načítána stejným způsobem jako instrukce, jejich načítání však neovlivní instrukci, která

již byla do obvodu načtena předtím.

Po provedení instrukce jsou pak data sériově vysouvána ven z obvodu.

 

Co je to Boundary-Scan ?

Základní myšlenka metody Boundary-Scan spočívá ve vložení jednoho článku

posuvného registru mezi funkční bloky integrovaného obvodu a jeho vývody. Tento

základní stavební prvek budeme nazývat Boundary-Scan "buňkou". Její struktura je na

Obr.1.

Obr.1 Boundary-Scan buňka

Tento prvek je natolik univerzální, že může být použit na vstupním i výstupním vývodu

integrovaného obvodu.

Představme si např. že tato buňka je připojena na výstupní pin integrovaného obvodu.

Signálový vstup pak představuje výstup funkční logiky obvodu a na signálový výstup je

připojen na výstupní pin integravaného obvodu.

V režimu F (funkce) prochází signál ze signálového vstupu na signálový výstup (tzn.

výstup funkční logiky se přenáší na výstup integrovaného obvodu). Navíc je možno

logickou hodnotu na signálovém výstupu (pomocí multiplexoru MX2) vložit do klopného

obvodu. To je velice důležitá vlastnost, protože umožňuje v určitém charakteristickém

okamžiku získat "snímek" hodnoty na výstupu. Tuto informaci lze využít při analýze

přechodných poruchových stavů.

V režimu T (testování ) se odpojí signálový vstup od signálového výstupu na MX1, čím.

se oddělí primární kontakty pouzdra od vlastního logického jádra testovaného obvodu.

Na signálový výstup je přenášena informace z klopného obvodu, která reprezentuje

testovací data.

Boundary-scan buňky na pinech komponenty integrovaného obvodu jsou pomocí

signálů sériový vstup sériový výstup propojeny do série a tvoří tak posuvný registr

označovaný jako scanovací kanál. Na obr. 2 je scanovací kanál zobrazen tučně.

Obr.2 Scanovací kanál

Test Access Port (TAP)

Pro přístup k testovacím funkcím vestavěným do obvodu slouží tzv. Test Access Port.

Je sestaven minimálně ze tří vstupních a jednoho výstupního signálu. Těmito signály

jsou:

 

-  TCK - Test Clock Input - Vstupní signál TCK je do TAP zařazen proto, aby

seriová datová cesta mezi kompomentami zařízení mohla být používána

nezávisle na hodinách jednotlivých komponent, proto.e ty se mohou v každé

komponentě lišit. Tento způsob také dovoluje, aby posuv testovacích dat

probíhal paralelně s činností komponent zařízení.

 

-  TMS - Test Mode Select Input - Tento vstupní signál je dekódován řadičem

TAP a slouží k výběru testovacích operací. Pomocí hodnot TMS jsou řízeny

přechody mezi stavy ve stavovém diagramu řadiče TAP. Hodnota na vstupu

TMS je snímána pří nábězné hraně TCK.

 

-  TDI - Test Data Input - Datový vstup TDI a datový výstup TDO se používají k

seriovému pohybu testovacích dat obvodem. Hodnoty ze stupu TDI jsou načítány

do příslusného datového nebo instrukčího registru, který se vybrán aktuální

istrukcí. Hodnota na vstupu TDI je snímána pří nábězné hraně TCK.

 

-  TDO - Test Data Output - Hodnota na vstupu TDO je platná pří sestupné hraně

TCK.

 

- TRST - Test Reset Input - Tento signál je nepovinný. Pokud je přítomen, pak

pokud je jeho hodnota rovna logické nule, musí řadič TAP přejít asynchronně do

stavu Test-Logic-Reset. Tento signál není povinný proto, že inicializaci

(resetovaní) řadiče TAP můžeme dosáhnout i jinak a to buď aplikací logické

jedničky na signál TMS po dobu minimálně pěti náběžných hran TCK nebo

zapnutím napájení integrovaného obvodu..

Je-li na desce více integrovaných obvodů vybavených JTAG rozhraním, je mo.no

zřetězit je sériově prostřednictvím řídících signálů rozhraní (Obr. 3). Tímto uspořádáním

může být prováděna nejen diagnostika jednotlivých obvodů, ale i jejich vzájemného

propojení.

Obr.3 Propojení více obvodů JTAG

Architektura testovací logiky

Architektura testovací logiky musí obsahovat tyto prvky:

 

-  Test Access Port (TAP)

- TAP Controller

-  Instrukční registr

-  Sadu testovacích datových registrů

 

Instrukční a datové registry musí být paralelní datové cesty na bázi posuvného registru,

mající společný sériový vstup a společní sériový výstup připojený k signálům TDI a

TDO. O tom, zda mezi TDI a TDO bude připojena cesta tvořená z instrukčních nebo

datových registrů rozhoduje řadič TAP. Architektura integrovaného obvodu s Boundary

Scan buňkami a řadičem rozhraní TAP je na Obr. 4

 

Obr.4 Architektura testovací logiky

 

Řadič TAP přijímá signál hodin TCK a interpretuje signály TMS. Řadič pak generuje

hodinové a řídící signály pro instrukční a datové registry a pro zbytek architektury.

Instrukční registr dovoluje, aby byla do testovacího obvodu nahrána instrukce, které pak

určuje jaká testovací operace se bude provádět a které datové registry se budou

používat. Instrukčni registr musi být minimálně dvoubitový, proto.e se třeba zakódovat

minimálně 3 instrukce, které jsou povinné pro všechna JTAG zařízení.

Skupina datových registrů musí obsahovat minimálně dva registry a to bypass registr a

boundary-scan registr (sloučený s boundary-scan buněk na všech vývodech). Mohou

zde být zařazeny i další registry jako např. Device Identification registr, který dovoluje

indentifikovat typ zařízení. Přidání dalších datových registrů však závisí pouze na

výrobci obvodu.

 

Řadič TAP

 

Řadič TAP synchronní konečný automat, který řídí činnost testovací logiky uvnitř

integrovaného obvodu v závislosti na signálu TMS. Stavový diagram řadiče je vidět na

obr. 5. Všechny přechody jsou uskutečňovány v závislosti na hodnotě signálu TMS při

náběžné hraně hodin TCK.

Obr.5 Stavový diagram řadiče TAP

 

Popis jednotlivých stavů:

 

-  Test-Logic-Reset - V tomto stavu je testovací logika zablokována a nijak

neovlivňuje normální funkci integrovaného obvodu. Do tohoto stavu se mů.e

řadič TAP dostat z jakéhokoliv jiného stavu pokud se na vstupu TMS objeví

logická jednička po dobu minimálně pěti náběžných hran TCK. V tomto stavu je

řadič nachází také po zapnutí napájení nebo pokud je na vstupu nTRST logická

nula.

 

-  Run Test/Idle - V tomto stavu jsou testovací obvody aktivní pouze pokud je v

instrukčním registru určitá speciální instrukce. Například instrukce RUNBIST

způsobí, že dojde ke spuštění speciálního vnitřního testu, vestavěného do

obvodu jeho výrobcem. Instrukce které v tomto stavu nespouštějí žádnou funkci

nesmí změnit hodnoty v datových registrech (Idle).

 

-  Select-DR-Scan - Jedná se o dočasný stav řadiče, ve kterém si všechny datové

registry vybrané současnou instrukcí zachovají svůj předchozí stav. Pokud se v

tomto stavu při náběžné hraně TCK na TMS objeví logická nula, pak je

odstartována scanovací sekvence vybraných datových registrů. Instrukce se v

tomto stavu nemění.

 

-  Select-IR-Scan - Jedná se o dočasný stav řadiče, ve kterém si všechny datové

registry vybrané současnou instrukcí zachovají svůj předchozí stav. Pokud se v

tomto stavu při náběžné hraně TCK na TMS objeví logická nula, pak je

odstartována scanovací sekvence instrukčního registru. Instrukce se v tomto

stavu nemění.

 

-  Capture-DR - V tomto stavu mohou být do datových registrů vybraných aktuální

instrukční paralelně nahrána data . Jestliže vybrané registry nemají paralelní

vstup, pak se jejich hodnota nezmění. Aktuální instrukce se v tomto stavu

nemění.

 

-  Shift-DR - V tomto stavu všechny registry, které byly spojeny (jako výsledek

aktuální instrukce do datové cesty mezi TDI a TDO provedou, při každé náběžné

hraně TCK, posuv o jeden bit směrem k TDO. Ostatní datové registry, které

nebyly zapojeny do datové cesty zůstanou nezměněny. Aktuální instrukce se v

tomto stavu také nezmění.

 

-  Exit1-DR - Jedná se o dočasný stav řadiče. Pokud se v tomto stavu při náběžné

hraně TCK na TMS objeví logická jednička, pak je ukončena scanovací

sekvence datových registrů. Datové registry ani aktuální instrukce se v tomto

stavu nemění.

 

-  Pause-DR - Tento stav řadiče dovoluje, aby posuv dat mezi TDI a TDO byl

dočasně pozastaven. Datové registry ani aktuální instrukce se v tomto stavu

nemění.

 

-  Exit2-DR - Jedná se o dočasný stav řadiče. Pokud se v tomto stavu při náběžné

hraně TCK na TMS objeví logická jednička, pak je ukončena scanovací

sekvence datových registrů. Datové registry ani aktuální instrukce se v tomto

stavu nemění.

 

-  Update-DR - Některé datové registry mohou být vybaveny blokovaným

paralelním výstupem, aby se zabránilo změně paralelního výstupu v době

posouvání dat. Paralelní výstupy datových registrů mohou být uvolněny pouze v

tomto stavu nebo při vlastním testu zabudovaném výrobcem. Datové registry ani

aktuální instrukce se v tomto stavu nemění.

 

-  Capture-IR - V tomto stavu je do posuvného registru obsahujícího instrukci,

nahrán vzorek logických hodnot. Přitom do nejnižšího bitu (bit nejblíže k

sériovému výstupu) musí být uložena hodnota 1 a do druhého nejnižšího bitu

hodnota 0. Toto opatření je zde z toho důvodu, aby se dala odhalit chyba ve

scanovacím kanále. Do ostatních bitů mohou být nahrány hodnoty podle potřeby

návrháře obvodu. Datové registry ani aktuální instrukce se v tomto stavu nemění.

 

-  Shift-IR - V tomto stavu je posuvný registr obsahující instrukci připojen mezi TDI

a TDO a posouván o jeden bit směrem k TDO při každé náběžné hraně TCK.

 

-  Exit1-IR - Jedná se o dočasný stav řadiče. Pokud se v tomto stavu při náběžné

hraně TCK na TMS objeví logická jednička, pak je ukončena scanovací

sekvence instrukčního registru. Datové registry ani aktuální instrukce se v tomto

stavu nemění.

 

-  Pause-IR - Tento stav řadiče dovoluje, aby posuv instrukce mezi TDI a TDO byl

dočasně pozastaven. Datové registry ani aktuální instrukce se v tomto stavu

nemění.

 

-  Exit2-IR - Jedná se o dočasný stav řadiče. Pokud se v tomto stavu při náběžné

hraně TCK na TMS objeví logická jednička, pak je ukončena scanovací

sekvence instrukčního registru. Datové registry ani aktuální instrukce se v tomto

stavu nemění.

 

-  Update-IR - Pouze v tomto stavu může být uvolněn paralelní výstup instrukčního

registru a nová instrukce se stává aktuální instrukcí.

 

Instrukce

Instrukční registr dovoluje, aby do něj byla sériově nahrána instrukce, která pak řídí

funkci testovací logiky. V této kapitole bych se chtěl zmínit o základních instrukcích,

které musí mít každý obvod vyhovující specifikaci JTAG.

Nejdříve bych se zmínil o vlastnostech, které musí každá instrukce mít:

 

a.          Každá instrukce musí přesně určovat skupinu datových registrů, které se budou

při provádění této instrukce používat.

 

b.         Ostatní datové registry musí být řízeny tak, aby neovlivňovali činnost systémové

logiky a datové registry, které se používají.

 

c.          Každá instrukce musí datové registry, které se používají propojit do datové cesty

mezi TDI a TDO.

 

d.          Kódy instrukcí, které nejsou nějakým způsobem využívány musí být ekvivalentní

instrukci BYPASS.

 

3 základní instrukce, které musí mít každý obvod vyhovující JTAG:

 

-  Instrukce BYPASS - Instrukční kód této instrukce musí být {111.1}, tedy ve

všech buňkách instrukčního registru musí být logická jednička. Provedení

instrukce BYPASS tedy můžeme dosáhnout tak, že na vstup TDI budeme

přivádět logickou jedničku po celou dobu scanovacího cyklu instrukce. Tato

instrukce používá při svém provádění pouze registr bypass, který připojí do

datové cesty mezi TDI a TDO. Instrukce BYPASS se velmi dobře hodí, pokud

máme na desce mnoho komponent a otestovat chceme např. jenom jednu. Ve

všech komponentách, které nepotřebujeme testovat se jako aktuální instrukce

nastaví instrukce BYPASS, která pro každou komponentu zařadí do datové cesty

mezi TDI a TDO pouze jednobitový registr bypass a datová cesta pak bude mít

délku počet komponent + počet vývodů komponenty, kterou chceme testovat.

Bez použití této instrukce by byla délka datové cesty rovna součtu vývodu všech

komponent, čímž by se doba testování rapidně a zbytečně prodloužila.

 

-  Instrukce EXTEST - Instrukční kód této instrukce musí být {000.0}, tedy ve

všech buňkách instrukčního registru musí být logická nula. Při použití instrukce

EXTEST musí být stav všech signálů na výstupních pinech všech komponent

definován daty nasunutými do boundary-scan registru (propojené boundary-scan

buňky. Stav všech signálů na vstupních pinech všech komponent musí být

uložen do boundary-scan registru ve stavu Capture-DR řadiče TAP. Tato

instrukce používá při svém provádění pouze boundary-scan registr, který připojí

do datové cesty mezi TDI a TDO.

Instrukce EXTEST dovoluje, aby byla testována propojení mezi jednotlivými

komponentami obvodu. Buňky boundary-scan registru na výstupních pinech

komponent jsou použity jako budiče testovacích hodnot, zatímco buňky

boundary-scan registru na vstupních pinech jsou použity k zaznamenání

výsledků. Tok dat při použití instrukce EXTEST je znázorněn na obr.6.

Obr.6 Tok dat při instrukci EXTEST

 

-  Instrukce SAMPLE - Při použití instrukce SAMPLE musí být stav všech signálů

na vstupních i výstupních pinech všech komponent uložen do boundary-scan

registru ve stavu Capture-DR řadiče TAP. Při použití této instrukce může být do

datové cesty mezi TDI a TDO připojen pouze registr boundary-scan. Kód pro

instrukci SAMPLE může být určen výrobcem komponenty obvodu.

Instrukce SAMPLE dovoluje, aby při normální činnosti komponenty (systémové

logiky) mohly být do boundary-scan registru zaznamenávány hodnoty vstupující

a vystupující z komponenty, aniž by byla činnost systémové logiky snímáním

ovlivněna. Tok dat při použití instrukce EXTEST je znázorněn na obr.7.

Obr.7 Tok dat při instrukci SAMPLE

Jen okrajově zde zmíním několik dalších instrukcí, které může komponenta vyhovující

normě JTAGu podporovat.

 

Nepovinné instrukce

 

-  Instrukce IDCODE - Pokud komponenta obsahuje identifikační registr zařízení,

pak musí mít tuto instrukci implementovánu. Při použítí této instrukce je mezi TDI

a TDO připojen pouze identifikační registr zařízení. Ve stavu Capture-DR je pak

do tohoto registru paralelně nahrán identifikační údaj, který je pak možno

vysunout na výstup TDO.

 

-  Instrukce INTEST - Tato instrukce slouží k provedení testů systémové logiky a k

získání její odezvy na tyto testy. Při této instrukci musí být stav všech vstupních a

výstupních pinech komponenty určen daty nasunutými do boundary-scan

registru. Ve stavu Capture-DR jsou pak do boundary-scan registru uloženy

hodnoty na výstupu systémové logiky.

 

-  Instrukce RUNBIST - Tato instrukce způsobí spuštění vnitřního testu

komponenty vestavěného výrobcem. Samotný test se prování ve stavu Run-

Test/Idle řadiče TAP. Výhodou použití této instrukce je, že můžeme paralelně ve

všech komponentách obvodu spustit vestavěný test a otestovat tak všechny

komponenty, aniž bychom do obvodu museli pouštět nějaká testovací data.

 

- Instrukce USERCODE - Tato instrukce je určena pro programovatelné komponenty typu FPGA a EEPROM. Instrukce dovolí vnějšímu testeru (PC) určit uživatelské programování  logického obvodu / paměti

 

- Instrukce CLAMP - Tato přepojí vstup TDI na výstup TDO přímo jako bypass místo jednobitového bypassu, dále pak propojí všechny logické výstupy logického jádra na snímací registry Boundary scan buněk.

 

- Instrukce HIGZ - Tato instrukce nastaví všechny výstupy logického obvodu do stavu vysoké impedance.

 

Požadavky na časování signálů

Časování signálů není součástí normy JTAGu, ale musí být součástí dokumentace

každého zařízení vyhovujícího této normě. V dokumentaci musí být obsaženy

především tyto hodnoty:

-  Maximální frekvence hodin TCK

-  Úplná sada časovacích parametrů testovací logiky

-  Logické úrovně pro vstupní a výstupní piny TAP

-  Budící schopnosti výstupu TDO