Principe de fonctionnement de l’architecture JTAG :

Chaque signal primaire d’entrée et de sortie est complété avec un élément de mémoire appelé cellule Boundary-Scan. Les cellules qui agissent sur les composants JTAG d’entrée sont notées cellules d’entrée, de même que les cellules qui agissent sur les composants JTAG de sortie sont notées cellules de sortie. Entrées et sorties sont des notations relatives au noyau logique du composant (nous verrons par la suite les problèmes que peut entraîner le fait de noter entrées et sorties les interconnections entre deux ou plusieurs composants JTAG).

Arch.gif (3809 octets)

Le regroupement de cellules Boundary-Scan est configuré dans un registre à décalage d’entrée/sortie.

Une opération de chargement parallèle appelée ‘capture’ permet de charger les données en entrée du composant JTAG vers l’entrée des cellules JTAG. En même temps, elle prends la valeur du noyau logique et la transfère vers la sortie du composant JTAG pour être ensuite chargée vers l’entrée de la cellule JTAG. Elle permet donc de charger la totalité des données à l’entrée des cellules JTAG.

Une opération de déchargement appelée ‘update’ va décharger la valeur à l’entrée de la cellule JTAG vers le noyau logique. Une opération ‘update’ va donc suivre un opération ‘capture’. Ces valeurs de remplacement à l’entrée du composant JTAG et du signal déjà présent à la sortie de la cellule JTAG sont donc transférés vers la sortie du composant JTAG, remplaçant ainsi la valeur de sortie générée par le noyau logique.

Les données sont donc modifiées autour du registre à décalage, dans un mode série, à partir du ‘Test Data In’ (TDI) et terminé par le ‘Test Data Out' (TDO). Le 'Test Clock' (TCK) est alimenté par un autre circuit dédié à cette tâche. Le mode de fonctionnement est contrôlé par le signal de contrôle série : le ‘Test Mode Select‘ (TMS).

 

 

Pour utiliser le chemin de scan :

Le test JTAG n’influe en rien sur la fonctionnalité du noyau logique. En fait, le chemin du Boundary-Scan est indépendant de la fonction du composant. Nous allons par un exemple simple expliquer comment le chemin de scan fonctionne.

Soit la carte ci-dessous :

 

Usepath.gif (4300 octets)

Cette figure montre une carte contenant quatre composants JTAG. Notons qu’il existe sur la carte un connecteur en entrée nommé TDI connecté sur l’entrée TDI du premier composant. Le TDO du premier composant est relié au TDI du second composant. Et ainsi de suite jusqu’à la sortie du dernier composant appelée TDO. Les TCK et TMS sont reliées à chacun des composants en parallèle.

Dans ce chemin, certains tests particuliers peuvent être appliqués à chacun des composants par l’intermédiaire du chemin de scan global. Ainsi il va être possible de charger une valeur spécifique dans les cellules JTAG d'entrées via la broche TDI de la carte (opération de décalage d’entrée), d’appliquer cette valeur au composant (opération update), de mémoriser la réponse du composant (opération capture), et de sortir cette valeur sur la broche TDO de la carte (opération décalage de sortie). En fait les cellules JTAG peuvent donc être considérées comme des clous virtuels.

   

La figure ci-dessous montre une cellule JTAG universelle :

bscancell.gif (3075 octets)

Notons qu’il s’agit ici d’un exemple de réalisation d’une cellule universelle JTAG puisque le standard IEEE 1149.1 n’impose pas le schéma de cette cellule mais uniquement son fonctionnement.

 Elle contient les quatre modes opératoires cités précédemment :

- normal
- update
- capture
- décalage série

L’élément de mémoire est caractérisé par une bascule D précédée et suivie d’un multiplexeur.
En mode ‘normal’, les données introduites en entrée se retrouvent directement en sortie.
En mode ‘update’, le contenu du registre de sortie est transféré en sortie.
En mode ‘capture’, le signal de données d’entrée est routé vers le registre à décalage et la valeur est mémorisée par l’horloge DR (ClockDR) suivante.
En mode décalage , le Scan_Out d’un registre à bascule est directement transféré au suivant.

Il est important de noter que ni le mode capture ni le mode décalage n’interfèrent avec le mode normal.

Ceci permet de mémoriser la valeur d’une opération et de l’appliquer où l’utilisateur le désire pour une éventuelle inspection sans engendrer aucune interférence. Cette application de l’architecture JTAG a d’énormes potentiels pour des ‘monitorings’ en temps réels.

La méthode de test JTAG, comme nous l’avons indiqué précédemment, est définie par le standard IEEE 1149.1. Voyons précisément ce que cette norme impose.

 

Architecture d’un composant à la norme IEEE 1149.1

 Après cinq ans de discussions, l’organisation JTAG a finalement proposé une architecture telle que le montre la figure ci-dessous :

Chiparch.gif (3818 octets)

 

Cette figure montre les éléments suivants :

Les quatre broches de test : Test Data In (TDI), Test Mode Select (TMS), Test Clock (TCK), Test Data Out (TDO), une broche optionnelle : le Test Reset (TRST*). Les regroupements de toutes ces broches forment le Test Access Port (TAP).

Une cellule JTAG de chacune des broches d’entrées et de sortie du composant est reliée de manière interne à un registre Boundary-Scan série.

Une machine d’état qui contrôle le TAP par l’intermédiaire du TCK et du TMS.

Un registre d’instructions (IR) sur n bits (n=2) qui garde les instructions courantes.

Un registre Bypass sur 1 bit (Bypass).

Un registre d’identification optionnel sur 32 bits capable d’être chargé avec un code d’identification du composant.

 

Un seul registre peut être connecté du TDI vers le TDO (par exemple le registre IR, Bypass, Ident…). La sélection du registre se fait par le décodage du registre d’instruction (IR).

Nous allons voir dans le détail chacune des parties qui composent cette architecture.

 

Le Test Access Port :

 Le représentation du Test Access Port (TAP) est donnée dans la figure ci-dessous :

 Tapcntlr.gif (2051 octets)

Comme nous l’avons vu dans le chapitre précèdent, le TAP est donc constitué de quatre signaux et d’un signal optionnel :

Test Data In (TDI) : Signal de test série d’entrée dont la valeur par défaut vaut ‘1’.
Test Data Out (TDO) : Signal de test série de sortie dont la valeur par défaut vaut ‘Z’. Il n’est actif que pendant l’opération de décalage.
Test Mode Select (TMS) : Signal de contrôle série d’entrée dont la valeur par défaut vaut ‘1’.
Test Clock (TCK) : signal fournissant l'horloge au test.
Test Reset (TRST*) : signal qui contrôle la remise à ‘0’ du TAP dont la valeur par défaut vaut ‘1’. Il est actif sur un niveau bas. C’est ce signal qui est optionnel.

TMS, TCK et TRST* (s’il existe) entrent dans une machine d’état qui produit les changements d’état du signal de contrôle. Ces signaux permettent également de contrôler le registre d’instruction ainsi que les différents registres de données.

 

 La figure ci-dessous montre le diagramme de transition du TAP et suffit à la compréhension de son fonctionnement, sachant que la valeur qui va permettre au TAP de changer d’état est celle du TMS et que ce changement d’état est synchrone sur un front montant de l’horloge.

 

Statetab.gif (8184 octets)

 

Le registre Boundary-Scan :

Si nous regardons les cellules JTAG plus attentivement, nous nous rendons compte qu’elles sont chaînées de manière à former le registre Boundary-Scan. L’ordre de la chaîne est déterminé par l’agencement physique des composants sur la carte et/ou par le nombre de couches de la carte. Le registre Boundary-Scan est sélectionné par une instruction commandée au registre d’instructions : instructions Extest, Sample/Preload ou Intest que nous verrons dans le chapitre suivant.

 

Soit la cellule JTAG d’entrée classique ci-dessous :

Bcellin.gif (3425 octets)

Cette cellule ne permet de réaliser que l’opération de capture et l’opération de décalage. Elle peut être utilisée par exemple pour l’horloge.

 La cellule JTAG classique d’entrée/sortie ci-dessous montre une conception d’une cellule JTAG le plus souvent utilisé et qui permet trois modes opératoires : capture, décalage et update.

 bscancell.gif (3075 octets)

Ce type de conception permet d’avoir des bascules D distinctes pour les fonctions de décalage et de maintien. Les données peuvent être transférées à travers le registre Boundary-Scan sans interférer sur la valeur de la section de maintien (qui peut être routée vers le port de données de sortie par l’intermédiaire du multiplexeur de sortie).

 La figure ci-dessous montre pourquoi une section de maintien est nécessaire :

Holdstat.gif (2892 octets)

Cette figure représente un composant JTAG dont les trois sorties vont permettre de contrôler trois RAM par l’intermédiaire de leur Chip-Select (CS).

Dans un mode de fonctionnement normal, seulement une RAM est sélectionnée pour venir dialoguer avec le bus de données. Cela signifie que la plupart des combinaisons de ces trois CS sont interdites.

Il serait impossible de garder une séquence interdite si les données étaient transférées sur le chemin JTAG sans l’élément de maintien et sans le multiplexeur de sortie.

Si le multiplexeur autorisait le passage de la valeur générée par le noyau logique, nous pourrions avoir un problème.

Une solution simple est d’inclure la section de maintien et d’utiliser l’instruction Sample/Preload (que nous verrons dans le chapitre suivant) pour charger une valeur de sécurité dans la section de maintien.

 

 

Le registre d’instructions :

Un registre d’instructions est composé d’un registre à décalage, qui peut être connecté au TDI et au TDO, et une section de maintien qui garde les instructions courantes comme le montre la figure ci-dessous :

Ir.gif (4323 octets)

Il peut y avoir plusieurs décodeurs logiques entre ces deux sections (cela va dépendre de la taille du registre ainsi que du nombre d’instructions). Le signal de contrôle du registre d’instructions est issu du contrôleur du TAP et permet soit de décaler les valeurs d’entrée/sortie vers le registre à décalage du registre d’instruction soit de charger directement vers la section de maintien (opération ‘update’ le contenu du registre à décalage. Il est donc possible de charger (opération ‘capture’) certaines valeurs vers le registre à décalage du registre d’instruction.

La taille du registre d’instructions doit être d’au moins 2 bits (pour permettre les différentes instructions : Bypass, Sample/Preload, Extest) mais sa taille maximale n’est pas définie.

 

Les différentes instructions :

L’architecture IEEE 1149.1 impose trois instructions qui sont :

Bypass : L’instruction Bypass permet de passer au travers des composants avec un bit de décalage. Tous les bits doivent être à ‘1’ pour qu’elle soit exécutée.

Extest : L’instruction Extest sélectionne le registre Boundary-Scan en déconnectant le composant JTAG. Elle prépare au test des interconnections (voir les différents types de test ). Tous les bits doivent être à ‘0’ pour qu’elle soit exécutée. Sa taille de code n’est pas définie.

Sample/Preload : L’instruction Sample/Preload sélectionne le registre Boundary-Scan mais sans déconnecter le composant JTAG.

 

Le standard IEEE 1149.1 autorise un certain nombre d’instructions optionnelles qui sont les suivantes :

Intest : Elle sélectionne le registre Boundary-Scan pour le préparer au test du noyau logique interne.

Idcode : Elle sélectionne le registre d’identification placé entre TDI et TDO pour le préparer au chargement du code Idcode et à sa lecture au travers le TDO. Si l’instruction Idcode est chargée, il n’y a pas de registre d’identification présent sur la carte et l’instruction Idcode peut être vu comme si l’utilisateur chargeait l’instruction Bypass.

Runbist : C’est l’instruction qui initialise une routine de test interne et charge le résultat dans le registre placé entre le TDI et le TDO.

En 1993 une révision du standard IEEE 1149.1 apporte deux nouvelles instructions :

Clamp : C’est une instruction qui pilote la valeur de présélection vers la sortie de certains composants et qui sélectionne le registre Bypass entre TDI et TDO.

High : C’est une instruction similaire à Clamp mis à part le fait qu’elle permet de laisser la valeur des broches des composants de sortie sur un niveau logique haute impédance. Elle va également sélectionner le registre Bypass entre TDI et TDO.

 

Remarque générale :

A l’exception de Bypass, le code de toutes les autres instructions n’est pas défini. La taille minimale du registre d’instructions est de 2 bits et sa taille maximale est indéfinie.

 

Le registre Bypass :

 La figure ci-dessous montre un schéma classique d’un registre Bypass

 

Bypass.gif (2105 octets)

Le registre Bypass est un registre sur 1 bit, sélectionné par l’instruction Bypass et qui provient de la fonction de décalage. Il n’y a pas de sortie parallèle (ce qui signifie que le signal de contrôle Update_DR n’agit pas sur le registre). Au contraire, le signal de contrôle Capture_DR agit sur le registre et l’autorise à garder une valeur de ‘0’.

 

Le registre d’identification :

 Le registre optionnel d’identification est un registre 32 bits qui contient les opérations de capture et de décalage. Une fois que l’opération de capture a été réalisée, le code d’identification sur 32 bits peut être chargé vers TDO pour une inspection. La figure ci-dessous montre une manière possible d’incrémenter une cellule du registre 32 bits.

Dev_id.gif (2843 octets)