Il n'y pas à se soucier des variables d'environnement si elles sont à leur valeur par défaut.genlib :
Ce programme prend en entrée un fichier c décrivant les diverses cellules du composant et leurs interactions. Ces cellules doivent figurer dans le fichier qu'indique la variable d'environnement MBK_CATAL_NAME, et qui se trouve dans les répertoires qu'indique la variable d'environnement MBK_CATA_LIB. En l'occurrence, ici, on a deux librairies: la sclib, qui est la librairie des cellules standards qu'on utilise avec scmap, et padlib, qui est la librairie des pads. Cette librairie nécessite une explication sur la structure de l'anneau entourant le noyau.L'anneau, ou ring:L'anneau est constitué des lignes d'alimentation du noyau(vdd et vss), des lignes d'alimentation des pads(vdde et vsse), ainsi que de la ligne d'horloge. Toutes ces lignes font le tour du noyau et peuvent ainsi suffisamment approvisionner le noyau en énergie. Les cellules qui font le lien entre les lignes de l'anneau, les signaux venant et allant vers l'extérieur, et les signaux venant et allant vers le noyau s'appellent les pads. Pour une description complète des pads, il faut rechercher le fichier "pads.ps" sur le site de lip6 (ftp://ftp.lip6.fr/lip6/softs/alliance/obsolete/pads.ps.gz). Voici tout de même un bref récapitulatif des pads les plus importants:La syntaxe de genlib:- pvddi_sp, pvssi_sp, pvdde_cp, pvsse_sp :Lors de la conception du composant, ces cellules sont remplacées par des cellules 'fantômes' vides (pour simuler correctement le système), mais, à la fonderie, ces emplacements vides sont remplacés par les vraies cellules. A savoir, il existe une page man pour toute cellule de la sclib et de la padlib. Essayez "man pck_sp" pour voir.ces pads récupèrent les signaux d'alimentations venant de l'extérieur afin de les rediriger sur les lignes correspondantes de l'anneau. Il ne faut pas se formaliser sur les noms: pvssi_sp et pvddi_sp récupèrent les signaux d'alimentation du noyau qu'on avait appelés vss et vdd, et non pas vssi et vddi, mais ces noms ont été choisis pour pouvoir être maniés et lus facilement. On aurait aussi bien pu les appeler 'truc' et 'chouette', cela n'aurait fait aucune différence.- pck_sp :ce pad fait de même avec le signal d'horloge.- pvddick_sp, pvssick_sp, pvddeck_sp, pvsseck_sp :identiques à leurs homologues sans le ck, à l'exception qu'ils routent aussi le signal d'horloge de l'anneau vers le noyau. Il s'agit même là de la seule manière de procéder, aucun autre type de cellules ne se chargeant de cette opération.- pi_sp, po_sp:ces deux pads définissent les entrées(pour pi_sp) et sorties(pour po_sp) du composant. Le lien est fait directement entre le signal extérieur et celui du noyau sans transiter par une ligne de l'anneau.
On note la présence aussi la présence des pads pour les sorties 3-états, pour les entrées-sorties de faible niveau (weak),etc... Mais cela dépasse notre étude.Reprenez le fichier addaccu.c et examinons-le.dans l'exemple:
Il contient la déclaration: #include <genlib.h>
Cette déclaration va permettre l'utilisation des primitives dont je donne l'explication ci-après.
DEF_LOFIG: Il s'agit du nom sous lequel va être enregistré la netliste logique(sans l'extension vst).
LOCON: définition d'un connecteur.le connecteur permet de faire le lien entre le composant et son environnement extérieur. Le 1er paramètre indique sous quel nom le connecteur est connu de l'extérieur. Ce nom est utilisé dans les différents tests. Le 2nd paramètre indique simplement le sens du signal. Le 3ème paramètre indique à quel signal est relié le connecteur. C'est ce nom de signal que vont utiliser les autres pads pour s'y connecter.LOINS: insertion d'un composant logique.
Pour simplifier les choses, en général, on indique le premier paramètre égal au troisième sans se soucier de quel paramètre a quelle signification.il insère un composant dont il peut trouver une description logique. Il s'agira soit d'un composant de la librairie des cellules standards, si vous voulez créer un peu de logique sans passer par le VHDL, soit un composant de la librarie des pads(voir plus haut), soit de la description logique du noyau que vous avez compilé avec scmap (c'est-à-dire "core" dans ce cas précis).SAVE_LOFIG: enregistre la description logique sous le nom défini par DEF_LOFIG
Le 1er argument est le type de la cellule. Il s'agira du nom d'une cellule de sclib ou padlib auquel cas référez-vous à sa page de manuel qui explique la syntaxe d'un appel à LOINS.
Le 2nd argument est le nom de la cellule. Si la cellule est un pad, ATTENTION : ce nom est utilisé par la suite afin de disposer les broches autour de l'ASIC. Une bonne habitude consiste à donner aux pads le nom du signal qu'ils doivent conduire préfixé par "p_" (par exemple: "p_vsse" pour le pad de type "pvsse_sp"). Sinon ce nom n'est pas réutilisé et peut être fixé au bon vouloir de celui qui l'invente. Le reste est la suite des entrées et sorties de l'élément logique. Pour un élément appartenant aux bibliothèques, il suffit de consulter sa page man pour avoir la syntaxe exacte.
Pour la description logique de "core", on reprend dans l'ordre les déclarations de la description comportementale initiale "addaccu.vbe" et on inscrit dans cet ordre le nom des différents signaux qui correspondent (Début de remarque: ll n'ont pas à ce titre l'obligation d'avoir le même nom, mais simplement le même type et le même sens. Ainsi, comme on donne un nom différent du nom d'origine pour les signaux allant vers le noyau, on peut donner les nom d'origine pour les signaux allant vers l'extérieur,ce qui facilitera beaucoup les tests en permettant la réutilisation de fichiers de tests préexistants. Fin de remarque). Quand on aura fait la correspondance de tous ces signaux, il ne faudra surtout pas oublier les alimentations du noyau, dans l'ordre vdd et vss. Les alimentations ont été rajoutées automatiquement par scmap au moment de la création de la netliste logique du noyau.
Toutes les définitions LOFIG se terminent par 0 (équivalent au pointeur NULL) pour signaler la fin des paramètres du composant logique.
NAME: cette petite fonction prend en paramètre une chaîne contenant "%d", et un entier. Il retourne la chaine contenant cet entier. Il s'agit d'une fonction qui crée une fuite de mémoire mais est tout de même fort utile dans des boucles pour traiter des signaux ayant un nom similaire au chiffre près.Après avoir compris comment fonctionne le fichier addaccu.c, lancez la commande suivante:genlib -v addaccuCette commande (avec l'option -v comme verbose) prend le fichier addaccu.c en entrée, définit selon les directives de ce fichier les différents éléments de l'anneau, puis intègre la définition logique du noyau. Si cette dernière n'existe pas, genlib échoue avec un message d'erreur. La sortie est "addaccu.vst".
|
|
|