}}}
[[PageOutline]]
= 1 Objectif =
Nous avons vu dans le TP6 comment dessiner une cellule précaractérisée respectant
le gabarit de le bibliothèque '''SXLIB'''.
Le but de ce TP7 est de réaliser le dessin des masques d'un bloc combinatoire
résultant de l'intreconnexion d'une quinzaine de cellules de la biblioyhèque '''SXLIB'''.
On va donc effectuer ''à la main'' (c'est à dire en utilisant l'éditeur interactif '''graal'''),
le placement et le routage de cet opérateur, pour mieux comprendre les problèmes
que doivent résoudre les outils de placement/routage automatiques.
= 2 Spécification fonctionnelle =
On souhaite réaliser le décodeur 3 vers 4 tel que décrit ci-dessous.
[[Image(compteur.jpg,nolink)]]
La sortie Zi prend la valeur 1 quand le nombre de bits d'entrée ayant la valeur 1 est
égal à i. Les 3 autres sorties prennent la valeur 0.
Les équations sont les suivantes:
* Z0=/A./B/./C
* Z1=(A./B./C)+(/A.B./C)+(/A./B/.C)
* Z2= (A.B./C) +(A./B.C)+ (/A.B.C)
* Z3=A.B.C
De ces équations , on déduit le schéma en portes logiques inverseuses
[[Image(schema.jpg,nolink)]]
Le bloc à réaliser contient donc 10 portes NAND3 et 5 inverseurs. Regardons
plus précisément les caractéristiques de chaque cellule :
* La cellule na3_x1 a une largeur de 5 pitchs.
Les 3 signaux d'entrée E1, E2 et E3 sont accessibles
sur 6 pistes de routage.
Le signal de sortie S est accessible sur 7 pistes de
routage.
[[Image(nand3.jpg,nolink)]]
* La cellule inv_x1 a une largeur de 3 pitchs.
Le signal d'entrée E est accessible sur 6 pistes de
routage. Le signal de sortie S est accessible sur 7 pistes de
routage.
[[Image(tp3.jpg,nolink)]]
On propose le placement ci-dessous pour cet opérateur, mais vous pouvez
choisir un autre placement si vous le souhaitez :
[[Image(place.jpg,nolink)]]
Le dessin ci-dessous illustre un routage partiel correspondant à quelques signaux
et utilisant des fils de Metal2 , Metal3, ainsi que des via12 et des vias23.
[[Image(routage.jpg,nolink)]]
= 3 Saisie du schéma =
Utiliser le langage '''STRATUS''' pour décrire le schéma proposé ci dessus, et générer le fichier
''decodeur.vst'' correspondant à la description structurelle VHDL de cet opérateur.
Valider ce schéma en écrivant quelques stimuli, et en simulant sous '''asimut'''.
= 4 Placement / Routage =
Saisir sous '''graal''' le dessin du bloc ''decoder'' en instanciant les 5 portes inv_x1 et
les 10 portes na3_x1.
Dessiner les fils de routage sous '''graal''', et utiliser la commande ''equi'' pour vérifier
la connectivité de chacun des signaux.
Vérifier l'absence de violation des règles de dessin
en lançant la commande ''druc'' sous '''graal'''.
Pour que cette vérification soit significative, il faut préalablement "mettre à plat"
le bloc ''decoder'', en utilisant la commande ''real flat''.
= 5 Validation du routage =
Extraire la netlist du bloc ''decoder'' au format .al avec l'outil '''cougar''',
mais sans descendre au niveau des transistors : On veut obtenir une ''net-list'' de cellules,
et non une ''net-list'' de transistors.
Vérifier que les deux net-lists définies par les fichiers decoder.vst et ''decoder.al'' sont isomorphes
en utilisant l'outil '''lvx'''.