Brevet FR2810472A1 — publié le 20011221

La présente invention concerne des circuits électroniques. Plus particulièrement l'invention concerne la simulation et la détermination de paramètres de conception d'un circuit électronique. Un circuit de verrouillage est un élément de circuit qui maintient un état particulier entre des événements modifiant un état, c'est-à-dire en réponse à un signal d'entrée particulier, et on le trouve partout dans des types de circuits séquentiels numériques. Par exemple, comme représenté sur la figure 1 annexée à la présente demande, un circuit de verrouillage typique 100 peut inclure notamment un inverseur à action direct 101, un inverseur de réaction 102, une borne d'entrée 103 et une borne de sortie 104. Le niveau de tension de sortie VOUT reste un niveau de tension particulier, c'est-à-dire un niveau élevé ou un niveau bas, jusqu'à ce qu'un signal d'entrée VIN soit reçu au niveau de la borne d'entrée 103, instant auquel l'état de la sortie peut changer en fonction de la nature du signal d'entrée. Par exemple l'état du signal de sortie 104 peut passer d'un état à niveau haut à un état à niveau bas lors de la réception d'un signal à niveau haut logique au niveau de l'entrée 103. Pour que le circuit de verrouillage fonctionne correctement, c'est-à-dire pour modifier l'état lors de la réception d'un signal d'entrée particulier, les niveaux du signal d'entrée envoyé au circuit de verrouillage doivent dépasser certains seuils, avec une marge suffisante. A cet effet, lors de la conception d'un circuit, il faut s'assurer que les niveaux du signal d'entrée délivrés suivant différents trajets du signal à chacun des dispositifs de verrouillage dans le circuit en cours de conception satisfassent à la marge du signal d'entrée, indiquée précédemment. L'un des moyens pour satisfaire à l'exigence concernant le niveau du signal d'entrée indiquée précédem- ment est de déterminer ce qui est souvent désigné comme étant la "marge en courant continu" pour chacun des circuits de verrouillage présents dans le circuit en cours de conception. La marge en courant continu est formée par un couple de valeurs, la marge un et la marge zéro. La marge un est la différence entre la tension de déclenchement (déclenchement) de l'inverseur à action directe 101 du circuit de verrouillage 100 et le niveau du signal d'entrée d'élévation dans le pire des cas, qui peut être présenté au circuit de verrouillage. La marge zéro est la différence entre la tension Vdéclenchement de l'inverseur à action directe 101 et le niveau du signal d'entrée d'abaissement dans le pire des cas, qui peut être appliqué au circuit de verrouillage 100. La tension de déclenchement Vdéclenchement est définie comme étant le niveau de tension à l'équilibre du niveau de tension de sortie et du niveau de tension d'entrée de l'inverseur à action directe. Pour qu'un agencement de circuit particulier s'avère acceptable, il faut que la marge en courant continu dépasse une marge minimale conformément à une directive de conception. Malheureusement jusqu'à présent, pour déterminer la marge en courant continu d'un circuit de verrouillage, tous les trajets possibles de signaux provenant de chacun des éléments de circuit possibles, qui peuvent commander le circuit de verrouillage, doivent être examinés, ce qui requiert l'exécution de simulations moyennant l'exécution d'un programme de simulations par exemple le programme connu sous la marque déposée SPICETM, pour chacun des trajets possibles du signal. Les tentatives antérieures visant à déterminer la marge en courant continu nécessitaient de nombreuses simulations, dont chacune prend beaucoup de temps, et sont par conséquent inefficaces et prennent du temps. Ce problème peut être accentué s'il existe de nombreux circuits de verrouillage dans le circuit particulier en cours de conception. C'est pourquoi il existe un besoin de disposer d'un procédé plus efficace pour déterminer la marge en courant continu d'un circuit de verrouillage, qui ne requiert pas de nombreuses simulations pour tous les trajets de signaux possibles aboutissant au circuit de verrouillage. Conformément aux principes de la présente invention, un procédé pour déterminer une marge en courant continu d'un circuit de verrouillage consiste à exécuter une première simulation en utilisant un premier circuit de simulation pour déterminer une tension de déclenchement d'un inverseur à action directe du circuit de verrouillage, exécuter une seconde simulation en utilisant un second circuit de simulation pour déterminer une marge un du circuit de verrouillage, ledit second circuit de simulation comprenant un trajet pour un signal d'élévation dans le pire des cas, et exécuter une troisième simulation en utilisant un troisième circuit de simulation pour déterminer une marge zéro dudit circuit de verrouillage, le troisième circuit de simulation comprenant un trajet pour un signal d'abaissement dans le pire des cas. Conformément à un autre aspect des principes de la présente invention, un programme d'ordinateur mémorisé dans un milieu de mémoire lisible par ordinateur met en #uvre un procédé pour déterminer une marge en courant continu dans un circuit de verrouillage et comprend un ensemble d'instructions pour exécuter une première simulation en utilisant un premier circuit de simulation pour déterminer une tension de déclenchement d'un inverseur à action directe dudit circuit de verrouillage, exécuter une seconde simulation en utilisant un second circuit de simulation pour déterminer une marge un du circuit de verrouillage, le second circuit de simulation comprenant un trajet de signal d'élévation dans le pire des cas, et exécuter une troisième simulation en utilisant un troisième circuit de simulation pour déterminer une marge zéro dudit circuit de verrouillage, le troisième circuit de simulation comprenant un trajet pour un signal d'abaissement dans le pire des cas. Selon un autre aspect des principes de la présente invention, un circuit de simulation servant à déterminer une marge en courant continu d'un circuit de verrouillage comprend une partie représentant le circuit de verrouillage simulé, la partie représentant le circuit de verrouillage comprenant un inverseur à action directe, un inverseur de réaction, une entrée de l'inverseur à action directe étant connectée de façon opérationnelle à une entrée de la partie simulant un circuit de verrouillage, et une entrée de l'inverseur de réaction étant connectée de façon opérationnelle à une sortie de la partie représentant le circuit de verrouillage, une partie formant étage d'attaque représentant un élément de circuit d'étage d'attaque apte à envoyer un signal d'entrée au circuit de verrouillage simulé, et un sous-circuit formant trajet de transfert configuré pour recevoir un signal d'attaque de la partie formant étage d'attaque et configuré de manière à envoyer le signal d'attaque à l'entrée de la partie simulant le circuit de verrouillage, le sous-circuit de trajet de transfert représentant un ou plusieurs éléments de circuit le long d'un trajet pour le signal dans le pire des cas entre l'élément de circuit de l'étage d'attaque et le circuit de verrouillage qui est simulé. Selon une autre caractéristique de l'invention, le procédé de détermination d'une marge en courant continu d'un circuit de verrouillage comprend en outre la détermination du trajet pour le signal d'élévation dans le pire des cas, par comparaison analytique d'une valeur résistive cumulée pondérée d'au moins un trajet pour le signal d'élévation, aboutissant audit circuit de verrouillage. Selon une autre caractéristique de l'invention, ladite étape de détermination dudit trajet pour le signal d'élévation dans le pire des cas comprend l'identification d'un ou de plusieurs éléments de circuit de transfert le long de chacun de trajets possibles pour le signal d'élévation, la détermination d'une résistance de chacun desdits un ou plusieurs éléments de circuits de transfert identifiés, sur la base de tailles respectives desdits un ou plusieurs éléments de circuits de transfert identifiés, l'application à ladite valeur résistive de chacun desdits un ou plusieurs éléments de circuit de transfert identifiés, d'un poids basé sur une configuration topologique de l'élément de circuit de transfert identifié correspondant ou de l'un correspondant desdits éléments de ladite pluralité de circuits de transfert identifiés pour la production d'une ou plusieurs valeurs résistives pondérées, la sommation de ladite valeur résistive pondérée ou de ladite pluralité de valeurs résistives pondérées pour produire ladite valeur résistive pondérée cumulée de chacun desdits trajets possibles du signal d'élévation, et la détermination dudit trajet du signal d'élévation dans le pire des cas, possédant la valeur résistive pondérée cumulée maximale parmi lesdits trajets possibles du signal d'élévation. Selon une autre caractéristique de l'invention, le procédé pour déterminer une marge en courant continu d'un courant de circuit de verrouillage comprend en outre la détermination dudit trajet pour un signal d'abaissement dans le pire des cas par comparaison analytique d'une valeur résistive pondérée cumulée d'au moins un trajet pour le signal d'abaissement aboutissant audit circuit de verrouillage. Selon une autre caractéristique de l'invention, ladite étape de détermination dudit trajet du signal d'abaissement dans le pire des cas comprend l'identification d'un ou plusieurs éléments de circuit de transfert le long de chacun de trajets possibles du signal d'abaissement, la détermination d'une valeur résistive dudit élément de circuit de transfert identifié ou de chacun de ladite pluralité d'éléments de circuit de transfert identifiés sur la base des tailles respectives dudit élément de circuit de transfert identifié ou de ladite pluralité de circuits de transfert identifiés, l'application à ladite valeur résistive de chacun desdits un ou plusieurs éléments de circuit de transfert identifiés, d'un poids basé sur une configuration topologique d'un circuit de transfert identifié correspondant ou de l'un correspondant desdits éléments de ladite pluralité de circuits de transfert identifiés pour la production d'une ou plusieurs valeurs résistives pondérées, la sommation de ladite valeur résistive pondérée ou de ladite pluralité de valeurs résistives pondérées pour produire ladite valeur résistive pondérée cumulée de chacun desdits trajets possibles du signal d'abaissement, et la détermination dudit trajet du signal d'abaissement dans le pire des cas, possédant la valeur résistive pondérée cumulée maximale parmi lesdits trajets possibles du signal d'abaissement. Selon une autre caractéristique de l'invention, ladite étape d'exécution de ladite seconde simulation comprend le réglage d'une valeur initiale d'un signal de sortie d'une partie dudit second circuit de simulation représentant ledit circuit de verrouillage, sur un niveau haut logique, l'application d'un signal d'entrée d'élévation à niveau haut logique à une entrée de ladite partie dudit second circuit de simulation représentant ledit circuit de verrouillage par l'intermédiaire dudit trajet de signal d'élévation dans le pire des cas, et la détermination d'un niveau de tension au niveau de ladite entrée. Selon une autre caractéristique de l'invention, ladite étape d'exécution de ladite troisième simulation comprend le réglage d'une valeur initiale d'un signal de sortie d'une partie dudit troisième circuit de simulation représentant ledit trajet, sur un niveau bas logique, l'application d'un signal d'entrée d'abaissement à niveau bas à une entrée de ladite partie dudit troisième circuit de simulation représentant ledit circuit de verrouillage, au moyen dudit trajet du signal d'abaissement dans le pire des cas, et la détermination d'un niveau de tension au niveau de ladite entrée. D'autres caractéristiques et avantages de la présente invention ressortiront de la description donnée ci-après prise en référence aux dessins annexés, sur lesquels : - la figure 1 est un schéma logique représentant les parties importantes d'un circuit de verrouillage classique ; - la figure 2 est un schéma de circuit illustrant une forme de réalisation d'un circuit formant modèle de simulation d'un circuit de verrouillage et du trajet correspondant pour le signal d'entrée aboutissant au circuit de verrouillage conformément aux principes de la présente invention; - la figure 2A est un schéma de circuit illustratif d'une forme de réalisation du sous-circuit de trajet représenté sur la figure 2; - la figure 3 est un organigramme illustrant un exemple de mode de mise en #uvre du procédé de détermination de la marge en courant continu d'un circuit de verrouillage conformément à un mode d'application des principes de la présente invention; - la figure 4 représente un schéma de circuit illustrant une forme de réalisation du circuit de simulation pour déterminer la tension de déclenchement d'un inverseur à action directe d'un circuit de verrouillage conformément aux principes de la présente invention; - la figure 5 représente un schéma de circuit illustrant une forme de réalisation d'un circuit de simulation pour déterminer la marge un d'un circuit de verrouillage conformément aux principes de la présente invention ; et - la figure 6 représente un schéma de circuit illustrant une forme de réalisation d'un circuit de simulation pour déterminer la marge zéro d'un circuit de verrouillage conformément aux principes de la présente invention. Pour simplifier et à titre d'illustration, on va décrire les principes de la présente invention en se référant principalement à une forme de réalisation prise à titre d'exemple, en particulier, avec des formes de réalisation spécifiques à titre d'exemples de différents circuits de simulation. Cependant, un spécialiste ordinaire de la technique constatera que les mêmes principes sont également applicables à et peuvent être mis en #uvre dans d'autres formes de réalisation et agencements moyennant l'utilisation de n'importe quelles autres circuits de simulation équivalents, et qu'une telle modification entre dans le cadre de la présente invention. Conformément aux principes de la présente invention, une marge en courant continu d'un circuit de verrouillage d'un circuit en cours de conception est déterminée par l'exécution de trois simulations. Une simulation est effectuée pour trouver la tension de déclenchement de l'inverseur dans le sens direct du circuit de verrouillage. Une seconde simulation est exécutée pour déterminer la marge un du circuit de verrouillage. Enfin une troisième simulation est déterminée pour trouver la marge zéro du circuit de verrouillage. Pendant chacune des simulations visant à déterminer la marge un et la marge zéro, le trajet du signal d'entrée dans le pire des cas, qui s'étend à partir des différents éléments de circuit de l'étage d'attaque, et les trajets de signaux à l'intérieur du circuit en cours de conception sont déterminés analytiquement par cumul de la résistance pondérée de chacun des éléments de circuit le long du trajet des signaux. Les poids affectés aux éléments de circuit sont déterminés de façon empirique sur la base de la configuration topologique de chacun des éléments de circuit, par exemple l'élément de circuit type, le signal qui est transféré par l'élément de circuit et le fait qu'une chute de tension de seuil apparaisse ou non entre l'élément de circuit d'attaque et l'élément de circuit de transfert. En particulier la figure 2 représente un modèle de circuit 200 représentant un circuit de verrouillage et le trajet de son signal d'entrée conformément à une forme de réalisation de la présente invention. Le circuit modèle de simulation représente un modèle de circuit équivalent au circuit réel simulé et peut ne pas inclure tous les éléments de circuit présents dans le circuit réel simulé. Par exemple le transistor NFET Ql 201 peut représenter plus d'un élément de circuit, par exemple une série de transistors NFET, du circuit actuel qui est simulé. Les spécialistes des techniques d'évaluation des circuits comprendront que chacun des éléments de circuit représentés dans le circuit modèle 200 représenté sur la figure 2 peut être un circuit équivalent et représenter un certain nombre d'éléments du circuit actuel simulé. Le circuit modèle de simulation comprend un modèle de circuit de verrouillage 100', qui utilise deux paires de transistors à effet de champ complémentaires (FET), dont chacune représente l'inverseur à action directe et l'inverseur de réaction du circuit de verrouillage. La paire de transistors complémentaires Ql 201 et Q2 202 forment conjointement l'inverseur à action directe alors que la paire complémentaire Q3 203 et Q4 204 représente l'inverseur de réaction. Le circuit modèle 200 comprend en outre un souscircuit de trajet 207 qui représente les différents éléments de circuit le long d'un trajet du signal entre l'entrée 103 du circuit de verrouillage et un élément de circuit qui peut attaquer l'entrée du circuit de verrouillage. L'élément de circuit qui attaque l'entrée du circuit de verrouillage est représenté par les transistors FET Q5 205 et Q6 206, dont chacun envoie respectivement un signal d'entrée d'abaissement et un signal d'entrée d'élévation à l'entrée du circuit de verrouillage (c'est-à-dire Vin 103) par l'intermédiaire du sous-circuit de trajet 207. Comme cela est représenté, lorsqu'un signal à niveau bas logique VINH 208 est envoyé à la grille du transistor PFET Q6 206, le transistor PFET Q6 206 est placé à l'état conducteur et par conséquent Vin 103 est placée au niveau haut. Lorsqu'un signal à niveau haut logique VINL 209 est appliqué à la grille du transistor NFET Q5 205, le transistor NFET Q5 205 est placé à l'état conducteur et par conséquent le signal Vin 103 est placé au niveau bas. La figure 2A représente le sous-circuit de trajet 207 de façon plus détaillée. Conformément à une forme de réalisation de la présente invention, le sous-circuit de trajet 207 comprend n/2 paires complémentaires de transistors FET QS1 à QSn, dont chacun peut être configuré de manière à posséder une taille variable et peut être retiré individuellement du sous-circuit de trajet 207 pour simuler les trajets de signaux d'élévation et d'abaissement dans le pire des cas. Dans une forme de réalisation préférée de la présente invention, le sous-circuit de trajet 207 comprend six (6) paires complémentaires de transistors FET. Dans une forme de réalisation de la présente invention, les trajets du signal d'élévation et du signal d'abaissement dans le pire des cas sont déterminés analytiquement au moyen du suivi de chacun de trajets possibles d'un signal depuis l'entrée du circuit de verrouillage jusqu'à chacun des éléments de circuit qui peuvent commander l'entrée du circuit de verrouillage, et par identification d'éléments de circuit de transfert le long de chacun des trajets du signal, par lesquels un signal peut circuler. Pour chacun des éléments de circuit de transfert identifiés, un poids est appliqué à la résistance d'un tel élément de circuit, par exemple sur la base de sa longueur et de sa largeur (L/W). Les poids appliqués aux valeurs résistives des éléments de circuit de transfert sont déterminés de façon empirique sur la base de la configuration topologique de chacun des éléments de circuit, par exemple le type d'élément de circuit de transfert (par exemple le fait que l'élément de circuit de transfert est un seul transistor NFET, un seul transistor PFET ou une paire complémentaire de transistors FET), le signal étant transmis par l'élément de circuit de transfert et en fonction du fait qu'une baisse de tension de seuil apparaît entre l'élément de circuit d'attaque et l'élément de circuit de transfert. Les valeurs résistives pondérées des éléments de circuit de transfert identifiés le long d'un trajet particulier du signal sont additionnées et pour la détermination de la valeur résistive totale du trajet de signal particulier et la valeur somme est comparée à la résistance totale calculée de façon similaire pour d'autres trajets de signaux afin de déterminer le trajet du signal dans le pire des cas, qui conduit à la pire altération possible du niveau du signal lors de son transfert sur le trajet du signal. Dans une forme de réalisation préférée de la présente invention, le sous-circuit 207 du trajet est configuré de manière à inclure un ou plusieurs des transistors FET QS1 et QSn, chaque transistor FET inclus représentant des éléments du circuit de transfert identi- fiés. Les tailles du transistor FET inclus dans le souscircuit 207 du trajet sont basées sur les tailles des éléments de circuit de transfert respectif. Dans une autre forme de réalisation, le trajet de sous-circuit 207 peut être simplement un élément formant résistance, ayant la valeur résistive totale pondérée du trajet du signal dans le pire des cas, identifié. On va maintenant décrire le procédé selon l'invention pour la détermination de la marge en courant continu d'un circuit de verrouillage en se référant aux figures 4 à 6. Lors du pas 301, une simulation par exemple utilisant le programme SPICETM, qui est connu des spécialistes familiers des tests de conception de circuits, est mise en #uvre pour déterminer la tension de point de déclenchement (Vdéclenchement) de l'inverseur à action directe du circuit de verrouillage. Une forme de réalisation prise à titre d'exemple du circuit de simulation 400 pour la détermination de Vdéclenchement est représentée sur la figure 4. Dans cet exemple, le circuit de déclenchement 400 inclut la partie formant inverseur à action directe du circuit de verrouillage et comprend la paire complémentaire de transistors FET Ql 201 et Q2 202. Comme cela est représenté dans le circuit de simulation 400, la borne d'entrée Vin 103 et la borne de sortie Vout 104 de l'inverseur à action directe sont connectées entre elles. La simulation comprend une analyse en courant continu du circuit de simulation 400 pour déterminer le niveau de la tension de stabilisation sur la borne d'entrée Vin 103, qui est identique au niveau de tension sur la borne de sortie Vout 104. Une fois que les niveaux de tension sur la borne d'entrée et sur la borne de sortie se sont stabilisés de manière à être égaux l'un à l'autre, la tension de stabilisation est la tension de point de déclenchement (Vdéclenchement) de l'inverseur à action directe du circuit de verrouillage. Lors du pas 302, le trajet du signal élévateur et le sous-circuit 207 du trajet basé sur le trajet du signal d'élévation dans le pire des cas sont trouvés comme cela a été décrit précédemment. En particulier dans un mode de mise en #uvre de la présente invention, le trajet pour le signal d'élévation dans le pire des cas est déterminé par voie analytique par le fait qu'on suit chacun des trajets possibles pour le signal depuis l'entrée du circuit de verrouillage jusqu'à chacun des éléments de circuit de l'étage de commande élévateur, qui peut appliquer un signal d'élévation à l'entrée du circuit de verrouillage, et identifier des éléments de circuit de transfert le long de chacun des trajets du signal, par lesquels un signal peut circuler. Pour chacun des éléments de circuit de transfert identifiés, un poids est appliqué à sa valeur résistive, par exemple sur la base de sa longueur et de sa largeur (L/W). Les poids appliqués à la valeur résistive des éléments de circuit de transfert sont déterminés de façon empirique sur la base de la configuration topologique de chacun des éléments de circuit, par exemple le type d'élément de circuit de transfert (par exemple le fait que l'élément de circuit de transfert est un seul transistor NFET, un seul transistor PFET ou une paire complémentaire de transistors FET), du signal qui traverse l'élément de circuit de transfert et du fait qu'une baisse de tension de seuil apparaît ou non entre l'élément de circuit d'attaque élévateur et l'élément de circuit de transfert. Les valeurs résistives pondérées des éléments de circuit de transfert identifiés le long d'un trajet de signal particulier sont additionnées pour déterminer une valeur résistive simulée du trajet de signal particulier, depuis la tension d'alimentation VDD en passant par l'élément de circuit d'attaque élévateur et les éléments de circuit de transfert jusqu'à l'entrée du circuit de verrouillage. La valeur résistive cumulée de chaque trajet pour le signal est comparée à la résistance totale calculée de façon similaire pour les autres trajets pour le signal de manière à déterminer le trajet pour le signal d'élévation dans le pire des cas, c'est-à-dire le trajet pour le signal, possédant la valeur résistive cumulée maximale, qui conduit à la pire altération du niveau du signal lorsqu'il circule dans ce trajet pour le signal. L'étage d'attaque élévateur du trajet identifié pour le signal d'élévatioon dans le pire des cas est configuré sous la forme d'un circuit d'attaque canonique équivalent Q6 206 comme cela est représenté sur la figure 5. Le sous-circuit de trajet 207a est agencé de manière à inclure un ou plusieurs des transistors FET QS1 et QSn (comme représenté sur la figure 2A), chaque transistor FET inclus représentant des éléments de circuit de transfert identifiés du trajet pour le signal d'élévation dans le pire des cas. Les tailles des transistors FET contenus dans le sous-circuit de trajet 207 sont basées sur les tailles des éléments de circuit de transfert respectifs. Lors du pas 303, une simulation est effectuée pour déterminer la marge un (Vmar(l)). Un exemple de forme de réalisation du circuit de simulation 500 pour la détermination de Vmar(1) est représenté sur la figure 5. Le circuit 500 de simulation de Vmar(l) inclut la partie formant inverseur à action directe, c'est-à-dire la paire complémentaire de transistors FET Ql et Q2, le transistor NFET Q3, le transistor PFET Q6 et le sous-circuit 207a du trajet, construit lors du pas 302 indiqué précédemment. Dans cet exemple de circuit de simulation 500, les transistors FET Q4 204 et Q5 205 représentés sur la figure 2 ne sont pas représentés. Cependant, dans une autre forme de réalisation, les transistors FET Q4 204 et Q5 205 peuvent être inclus et placés à l'état bloqué. La simulation de Vmar(l) comprend une analyse en courant continu du circuit de simulation 500, avec le signal de sortie Vout 104 réglé initialement au niveau haut, c'est-à-dire réglé sur VDD, et une détermination du niveau de tension sur la borne d'entrée Vin 103. Si le niveau de tension sur la borne d'entrée Vin 103 dépasse Vdéclenchement et est suffisamment élevé pour moduler le transistor NFET Q3 203, l'état de la sortie Vout 104 commute depuis le réglage initial au niveau haut sur un niveau bas logique. La marge un Vmar(l) est la différence entre le niveau de tension sur Vin 103 et Vdéclenchement. c'est-àdire que l'on a Vmar(1) - Vin - Vdéclenchement- Lors du pas 304, le trajet pour le signal d'abaissement dans le pire des cas et le sous-circuit de trajet 207 basé sur le trajet du signal d'abaissement dans le pire des cas sont trouvés comme décrit précédemment. En particulier dans un mode de mise en #uvre selon la présente invention, le trajet du signal d'abaissement dans le pire des cas est déterminé par voie analytique au moyen d'un suivi de chacun de trajets possibles du signal depuis l'entrée du circuit de verrouillage jusqu'à chacun des éléments de circuit d'attaque d'abaissement, qui peuvent appliquer un signal d'abaissement à l'entrée du circuit de verrouillage, et par identification d'éléments de circuit de transfert le long de chacun des trajets du signal, par lesquels les signaux d'abaissement peuvent passer. Pour chacun des éléments de circuit de transfert identifiés, un poids est appliqué à sa valeur résistive, par exemple sur la base de sa longueur et de sa largeur (L/W). Les poids appliqués à la valeur résistive des éléments de circuit de transfert sont déterminés de façon empirique sur la base de la configuration topologique de chacun des éléments de circuit, par exemple du type d'élément de circuit de transfert (par exemple le fait que l'élément de circuit de transfert est un seul transistor NFET, un seul transistor PFET ou une paire complémentaire de transistors FET), le signal étant transmis par l'élément de circuit de transfert et la baisse de tension de seuil apparaissant ou non entre l'élément de circuit d'attaque abaisseur et l'élément de circuit de transfert. Les valeurs résistives pondérées des éléments de circuit de transfert identifiés le long d'un trajet de signal particulier sont additionnées pour la détermination d'une valeur résistive cumulée du trajet particulier pour le signal, c'est-à-dire depuis la masse (GND) jusqu'à l'entrée du circuit de verrouillage en passant par l'élément de circuit d'attaque abaisseur et les éléments de circuit de transfert. La valeur résistive cumulée de chaque trajet pour le signal est comparée à la résistance totale calculée d'une manière similaire pour d'autres trajets de signaux d'abaissement pour déterminer le trajet pour le signal abaisseur dans le pire des cas, le trajet du signal possédant la valeur résistive cumulée maximale. L'étage d'attaque élévateur du trajet identifié pour le signal d'abaissement dans le pire des cas est reproduit par un circuit d'attaque canonique équivalent Q5 205 comme représenté sur la figure 5. Le sous-circuit 207b du trajet est agencé de manière à comporter un ou plusieurs des transistors FET QS1 et QSn (comme représenté sur la figure 2A), chaque transistor FET inclus représentant des éléments de circuit de transfert identifiés du trajet du signal d'abaissement dans le pire des cas. Les tailles des transistors FET inclus dans le sous-circuit 207 du trajet sont basées sur les tailles des éléments de circuit de transfert respectifs. Lors du pas 305, une simulation est effectuée pour déterminer la marge zéro (Vmar(0)). Un exemple de forme de réalisation du circuit de simulation 600 pour la détermination de Vmar(0) est représenté sur la figure 6. Le circuit de simulation de Vmar(0) 600 inclut la partie formant inverseur à action directe, c'est-à-dire la paire complémentaire de transistors FET Ql et Q2, le transistor NFET Q5, le transistor PFET Q4 et le sous-circuit 207b du trajet formé lors de l'étape du pas 304 indiqué plus haut. Dans ce circuit de simulation 600 pris à titre d'exemple, les transistors FET Q3 203 et Q6 206 représentés sur la figure 2 ne sont pas représentés. Cependant, dans une autre forme de réalisation, les transistors FET Q3 203 et Q6 206 peuvent être présents et placés à l'état bloqué. La simulation de Vmar(Q) comprend une analyse en courant continu du circuit de simulation 600 avec le signal de sortie Vout 104 initialement réglé au niveau bas logique, c'est-à-dire réglé à la masse, et par détermination du niveau de tension sur la borne d'entrée Vin 103. Si le niveau de tension sur la borne d'entrée Vin 103 est inférieur à la tension Vdéclenchement est suffisant pour moduler le transistor PFET Q4 204, l'état de sortie Vout 204 est commuté du réglage initial au niveau bas sur un niveau haut logique. La marge zéro Vmar(Q) est la différence entre Vdéclenchement et le niveau de tension sur Vin 103, c'est-à-dire Vmar(O) = Vdéclenchement - Vin. Enfin le processus se termine lors du pas 306. Si les deux marges, à savoir la marge un et la marge zéro, dépassent des seuils de marge correspondant à des directives de conception, la conception du circuit semble acceptable, et des fonctionnements corrects du circuit de verrouillage sont garantis. Comme on peut le noter, le procédé de détermination de la marge en courant continu ici décrit permet une détermination efficace et rapide de la marge en courant continu d'un circuit de verrouillage sans nécessiter de nombreuses simulations qui prennent du temps pour chacun des trajets possibles du signal aboutissant à l'entrée du circuit de verrouillage. Des listings de programmes pour un mode de mise en #uvre d'un procédé pour déterminer la marge en courant continu d'un circuit de verrouillage conformément aux principes de la présente invention sont fournis dans l'annexe, qui est indiquée ci-après. Bien que l'invention ait été décrite en référence à des exemples de modes de mise en #uvre de l'invention, les spécialistes de la technique ont apporté différentes modifications au mode de mise en #uvre décrit de l'invention sans sortir du cadre de cette dernière. Les termes et descriptions utilisés ici sont indiqués uniquement à titre d'illustration et ne sont pas censés être limitatifs. En particulier, bien que le procédé selon la présente invention ait été décrit sur la base d'exemples, les étapes du procédé peuvent être mises en #uvre dans un ordre différent de celui représenté ou bien d'une manière simultanée. Les spécialistes de la technique constateront que ces variantes et d'autres variantes sont possibles tout en restant dans le cadre de l'invention. ANNEXE /*I1 existe 8 transistors FET dans le modèle et je peux les disposer suivant des indices allant de 1 à 8*/ #define NUM~CKLATCH~FETS 7 #define NUM~PASSCKT~FETS 7 #define ALL~SPICE~FET~PARAMETERS \ fprintf(MYDECK," (m1 w ml 1 m2 w m2 1 m3 w m3-1 m4 w m4-1 m5 w m5-1 m6~w m6~1)\n") ; void declare~vth~ckt(MYDECK, lmodel) FILE* MYDECK ; int lmodel[NUM~CKLATCH~FETS] ; { fprintf(MYDECK,".subckt vth~ckt 100 %%\"GND\""); ALL~SPICE~FET~PARAMETERS ; fprintf (MYDECK, "Ml 3 3 0 0 N%s L=ml~l*le-6 W=ml~w*le-6 AD=1. 5 AS=1.5 PD=1. 5 PS=1. 5\n", lmodel[l] ? "L" : ""); fprintf(MYDECK,"M2 3 3 100 0 P%s L=m2~l*le-6 W=m2~w*le-6 AD=1.5 AS=1.5 PD=1. 5 PS=1. 5\n", lmodel[2] ? "L" : ""); fprintf(MYDECK,".ends vth~ckt\n"); } #define NOPASSFET~R 1.0e-3 void declare~passfet~ckt(MYDECK, ckt name, ppass~fets, npass~fets) FILE* MYDECK ; char* ckt~name ; elem~pr npass-fets[NUM-PASSCKT-FETS], ppass~fets[NUM~PASSCKT~FETS] ; { int i, left, right, left~portnum, levels = 0; /* determination du nombre de niveaux de transistors FET de transfert. */ for (i = 1 ; 2*i-1, left, right, npass~fets[i]->len > CheckLatchLongNLength~ReqERC ? "L" : "", npass~fets[i]->len, npassa~fets[i]->wid); if (ppass~fets[i]) P%s L=%.2f*le-6 W=%.2f*le-6 Ad=1.5 fprintf(MYDECK,"M%d %d 0 %d 0 P%s L=%.2f*le-6 W=%.2f*le-6 AD=1. 5 AS=1. 5 PD=1. 5 PS=1. 5\n", 2*i, left, right, ppass~fets[i]->len > CheckLatchLongPLength~ReqERC ? "L" : "", ppass~fets[i]->len, ppass~fets[i]->wid); } fprintf(MYDECK,".ends %s\n", ckt~name); } void declare~set0~ckt(MYDECK, lmodel) FILE* MYDECK ; int Imodel[NUM~CKLATCH~FETS] ; fprintf(MYDECK,".subckt setO~ckt 100 %%\"GND\"") ; ALL~SPICE~FET~PARAMETERS fprintf(MYDECK,"Ml 4 3 0 0 N%s L=ml~l*le-6 W=ml~w*le-6 AD=1.5 AS=1.5 PD=1. 5 PS=1. 5\n", lmodel[l] ? "L" : ""); fprintf(MYDECK,"M2 4 3 100 0 P%s L=m2 1*le-6 W=m2 w*le-6 AD=1.5 AS=1. 5 PD=1. 5 PS=1. 5\n", lmodel[2] ? "L" : ""); fprintf(MYDECK,"M4 3 0 100 0 P%s L=m4~l*le-6 W=m4~w*le-6 AD=1.5 AS=1.5 PD=1.5 PS=1.5\n", lmodel[4] ? "L" : ""); fprintf(MYDECK,"XO 100 2 3 %%\"GND\" pulldown~passfet~ckt \n") ; fprintf(MYDECK,"M5 2 100 0 0 N%s L=m5~l*le-6 W=m5~w*le-6 AD=1.5 AS=1. 5 PD=1. 5 PS=1. 5\n", lmodel[5] ? "L" : ""); fprintf(MYDECK,".endsset0 ckt\n"); } void declare~setl~ckt(MYDECK, lmodel) FILE* MYDECK ; int Imodel[NUM~CKLATCH~FETS] ; { fprintf(MYDECK,".subckt setl~ckt 100 %%\"GND\"") ; ALL~SPICE~FET~PARAMETERS fprintf(MYDECK,"M1 4 3 00 N%s L=ml~l*le-6 W=ml~w*le-6 AD=1.5 AS=1. 5 PD=1. 5 PS=1. 5\n", lmodel[1] ? "L" : ""); fprintf(MYDECK,"M2 4 3 100 0 P%s L=m2~l*le-6 W=m2 w*le-6 AD=1. 5 AS=1. 5 PD=1. 5 PS=1.5\n", lmodel[2] ? "L" : ""); fprintf(MYDECK,"M3 3 100 0 0 N%s L=m3~l*le-6 W=m3 w*le-6 AD=1. 5 AS=1. 5 PD=1. 5 PS=1.5\n", lmodel[3] ? "L" : ""); fprintf(MYDECK,"XO 100 2 3 %%\"GND\" pullup~passfet~ckt \n") ; fprintf(MYDECK,"M6 2 0 100 0 P%s L=m6~l*le-6 W=m6~w*le-6 AD=1.5 AS=1.5 PD=1. 5 PS=1.5\n", lmodel[6] ? "L" : ""); fprintf(MYDECK,".ends setl~ckt\n"); } void add~vth ckt~to~deck(MYDECK, m-w, m-1) FILE *MYDECK; double m~w[NUM~CKLATCH~FETS] ; double m~l[NUM~CKLATCH~FETS] ; { fprintf(MYDECK,"XO 100 %%\"GND\" vth~ckt (") ; fprintf(MYDECK,"%.2f %. 2f ",m~w[l], m~l[l]) ; fprintf(MYDECK,"%.2f %.2f ",m~w[2], m~l[2]) ; fprintf(MYDECK,"%.2f %.2f ",m~w[3], m~l[3]) ; fprintf(MYDECK,"%.2f %.2f ",m~w[4], m~l[4]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[5], m~l[5]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[6], m~l[6]) ; fprintf(MYDECK,")\n") ; } void add~set0~ckt~to~deck(MYDECK, m~w, m~1) FILE *MYDECK; double m~w[NUM~CKLATCH~FETS] ; double m~l[NUM~CKLATCH~FETS] ; { fprintf(MYDECK,"X1 100 %%\"GND\" set0~ckt ("); fprintf(MYDECK,"%.2f %. 2f ",m~w[l], m~l[l]) ; fprintf(MYDECK,"%.2f %.2f ",m~w[2], m~l[2]) ; fprintf(MYDECK,"%.2f%.2f ",m~w[3], m~l[3]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[4], m~1 [4]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[5], m~l[5]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[6], m~l[6]) ; fprintf(MYDECK,")\n") ; } void add~setl~ckt~to~deck(MYDECK, m~w, m~1) FILE *MYDECK; double m~w[NUM~CKLATCH~FETS] ; double m~l[NUM~CKLATCH~FETS] ; { fprintf(MYDECK,"X2 100 %%\"GND\" setl~ckt (") ; fprintf(MYDECK,"%.2f %. 2f ",m~w[l], m~l[l]) ; fprintf(MYDECK,"%.2f %. 2f ",m~w[2], m~l[2]) fprintf(MYDECK,"%.2f %. 2f ",m~w[3], m~l[3]) fprintf(MYDECK,"%.2f %. 2f ",m~w[4], m~l[4]) ; fprintf(MYDECK,"%.2f %. 2f ",m w[5], m~l[5]) fprintf(MYDECK,"%.2f %. 2f ",m~w[6], m~l[6]) fprintf(MYDECK,")\n") ; } /* Retourne VRAI si ce circuit de verrouillage présente une réaction trois-états. */ int latch~has~tristate~feedback(node) node~pr node ; { ~ ~ node~pr output, inv~output, tsinv~node ; elem~pr elem ; if (!NIsLatch(node)) return FALSE ; tsinv~node = NTriStateInvOf(node) ; for~gate~elems(elem, node) { output = get~output(elem) ; if (!output} continue ; inv~output = NStatInvOf(output) ; if (NSame(inv~output, node) && NSame(output, tsinv~node)) { return TRUE ; } } end~gate~elems return FALSE ; } /* Pour un noeud du circuit de verrouillage retourne le noeud de réaction trois-états. */ node~pr get~tristate~feedback(node) node~pr node ; { elem~pr elem ; node~pr output, inv~output, tsinv~node ; if (!NIsLatch(node)) return NULL ; tsinv~node = NTriStateInvOf(node) ; for~gate~elems(elem, node) { output = get~output(elem) ; if (!output) continue ; inv~output = NStatInvOf(output) ; if (NSame(inv~output, node) && NSame(output, tsinv~node)) { return output ; } } end~gate~elems return NULL ; } /* Trouver les largeurs et les longueurs des transistors FET pour ce mode. Retourne un non zéro s'il existe un problème de fonctionnement. */ #define ABSENT~FEEDBACK~FET~L~MULT 20. 0 int find~checklatch~latchfets(node, m~w, m~l) node~pr node ; double *m~w, *m~l ; { elem~pr elem, nelem; node~pr output, inv~output, inv~node, tsinv node, gate, inv gate, ngate, inv~ngate, ts feedback, other~side; int has~tsfeedback, has~single~feedback, has~inv~feedback ; inv~node = NStatInvOf(node) ; tsinv~node = NTriStateInvOf(node) ; has~tsfeedback = latch~has~tristate~feedback(node) ; has~single~feedback (!inv~node && !tsinv~node) ? TRUE : FALSE ; has~inv~feedback = (!has~tsfeedback && !has~single~feedback) ? TRUE : FALSE ; /* Trouver les transistors FET de l'inverseur à action directe. */ if (has~single~feedback) { for~gate~elems(elem, node) { output = get~output(elem) ; if (!output) continue ; inv~output = NStatInvOf(output) ; if (NSame(inv~output, node)) { if (ETypeIsP(elem)) { m~w[2] = elem->wid ; m~l[2] = elem->len ; } if (ETypeIsN(elem)) { m~w[l] = elem->wid ; m~l[l] = elem->len ; } end~gate~elems } if (has~inv~feedback # has~tsfeedback) { for~gate~elems(elem, node) { output = get~output(elem) ; if (!output) continue ; inv~output = NStatInvOf(output) ; if ( (NSame(inv~output, node) && NSame(output, inv~node)) # (NSame(inv~output, node) && NSame(output, tsinv node)) ) { if (ETypeIsP(elem)) { m~w[2] = elem->wid ; m~1[2] = elem->len ; } if (ETypeIsN(elem)) { m~w[l] = elem->wid ; m~l[l] = elem->len ; } } } end~gate~elems } if (m w[l] == 0 Il m~w[2] == 0) return 1 ; /* Détermination des transistors FET de l'inverseur de réaction. */ if (has~single~feedback) { for~chan~fets(elem, node) { gate = EGate (elem) ; inv gate = NStatInvOf(gate) ; if (NSame(node, inv~gate)) { if (ETypeIsP(elem)) { m w[4] = elem->wid ; m 1[4] = elem->len ; } if (ETypeIsN(elem)) { m w[3] = elem->wid ; m 1[3] = elem->len ; } } end~chan~fets } if (has~tsfeedback) { ts~feedback = get~tristate~feedback(node) ; for~chan~fets(elem, node) { gate = EGate (elem) ; inv~gate = NStatInvOf(gate) ; if (NSame(node, inv~gate) && NSame(ts~feedback, gate) && ETypeIsP(elem)) { m w[4] = elem->wid ; m 1[4] = elem->len ; } if (ETypeIsN(elem)) { /* Inverseur trois-état type I. */ if (NSame(node, inv~gate) && NSame(ts~feedback, gate)) { m~w[3] = elem->wid ; m~l[3] = elem->len ; } /* Inverseur trois-état type II. */ else { other~side = EOtherChan(elem, node) ; nested~for~chan~elems(nelem, other~side) { if (ETypeIsN(nelem)) { ngate = EGate(nelem) ; inv~ngate = NStatInvOf(ngate) ; if (NSame(node, inv~ngate) && NSame(ts-feedback, ngate) ) { m~w[3] = nelem->wid ; m~l[3] = nelem->len ; } } } nested~end~chan~elems } ~ ~ ~ } end~chan~fets } if (has~inv~feedback) { for~chan~fets(elem, node) gate = EGate(elem) ; inv~gate = NStatInvOf(gate) ; if (NSame(node, inv~gate) && NSame(inv~node, gâte)) { if (ETypeIsP(elem)) { m~w[4] = elem->wid ; m~l[4] = elem->len ; } if (ETypeIsN(elem)) { m~w[3] = elem->wid ; m~l[3] = elem->len ; } } } end chan fets } /* Certains circuits de verrouillage ne comportent pas des transistors FET de réaction */ if (m~w[3] ==0 && m~w[4] == 0) return 1 ; if (m~w[3] == 0) { m~w[3] = MinGateZ~ReqERC ; m~l[3] = ABSENT~FEEDBACK~FET~L~MULT * DeviceL~ReqERC ; } if (m~w[4] == 0) { m~w[4] = MinGateZ~ReqERC ; m~l[4] = ABSENT~FEEDBACK~FET~L~MULT * DeviceL~ReqERC ; } return 0 ; } /* Pour un arbre donné, écrire au sommet les noms des éléments. C'est un sous-programme récursif. */ void add~fet~tree~comments~to~deck(DECK, dlnode~ptr) FILE* DECK ; dlnodeptr dlnode~ptr; { char message[MAXSTRING] ; elem~pr this~elem, parallel~elem ; /* Aller à travers */ if (dlnode~ptr->next) { add~fet~tree~comments~to~deck(DECK, dlnode~ptr->next); } /* Allez en dessous si un transitor FET existe là */ if (dlnode~ptr->down) { add~fet~tree~comments~to~deck (DECK, dlnode~ptr->down); } this~elem = dlnode~ptr->elem ; sprintf(message, "%s grille : %s source: %s drain : %s largeur : %.4f",this~elem->name, this~elem->gate->name, this~elem->source->name, this~elem->drain->name, this~elem->wid) ; add~comment~to~deck(DECK, message) ; /* Un élément parallèle de canal n'est pas présent dans l'arbre, mais est utilisé dans effective w calc from tree */ parallel~elem = this~elem->chan~parallel ; if (parallel~elem && !ESame(parallel elem, this elem)) sprintf(message, "%s grille : %s source : %s drain : largeur: %. 4f", parallel~elem->name, parallel~elem->gate->name, parallel~elem->source->name, parallel~elem->drain->name, parallel~elem->wid) ; add~comment~to~deck(DECK, message) ; /* Annotation du sommet avec les transistors FET utilisés dans build~generic~tree. Enregistrement également, dans le sommet de tous les transistors FET de transfert contenus dans les modèles élévateurs et abaisseurs. */ void add-checklatch comments to deck(MYDECK, pulldown~ppass~fets, pulldown~npass~fets, pullup~ppass~fets, pullup~npass~fets, ndriver~node, pdriver~node) elem~pr pulldown~npass~fets[NUM~PASSCKT~FETS], pulldown~ppass~fets[NUM~PASSCKT~FETS] ; elem~pr pullup~npass~fets[NUM~PASSCKT~FETS], pullup~ppass~fets[NUM~PASSCKT~FETS] ; node pr pdriver~node, ndriver~node ; FILE* MYDECK ; { elem~pr elem, this~elem; dlnodeptr nfet tree ptr,pfet tree ptr; double nfet~max~1~over w,nfet~min~1~over w,nfet in parallel; double pfet~max~1~over~w,pfet~min~1-over~w,pfet~in~parallel; int node~type~flag, i; char message[MAXSTRING] ; add~comment~to~deck(MYDECK, " Info transistor FET de transfert élévateur: ") ; if (pullup npass fets[l] && pullup ppass fets[l]) add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert élévateur du circuit de verrouillage : ") ; else if (pullup npass fets[l]) add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert élévateur du circuit de verrouillage : ") ; else if (pullup ppass fets[l]) add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert élévateur du circuit de verrouillage : ") ; else add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert élévateur du circuit de verrouillage: AUCUN") ; for (i = 1; i name, this elem->gate->name, this-elem->source->name, this~elem->drain->name, this elem->wid) ; add~comment~to~deck (MYDECK, message) ; } if (pullup~ppass~fets[i]) { this~elem = pullup~ppass~fets[i] ; sprintf(message, "%s grille : %s source : drain: %s largeur : %.4f", this elem->name, this elem->gate->name, this~elem->source->name, this~elem->drain->name, this~elem->wid) ; add~comment~to~deck (MYDECK, message) ; } } add~comment~to~deck(MYDECK, " " Info transistor FET de transfert abaisseur : ") ; if (pulldown~npass~fets[1] && pulldown~ppass~fets [1] ) add~comment~to~deck(MYDECK, Structure de transistor FET de transfert abaisseur du circuit de verrouillage : COMPLEMENTAIRE ") ; else if (pulldown~npass~fets[l]) add comment to deck(MYDECK, " Structure de transistor FET de transfert abaisseur du circuit de verrouillage : NFET ") ; else if (pulldown~ppass~fets[l]) add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert abaisseur du circuit de verrouillage :PFET ") ; else add~comment~to~deck(MYDECK, " Structure de transistor FET de transfert abaisseur du circuit de verrouillage : AUCUN ") ; for (i = 1 ; name, this~elem->gate->name, this~elem->source->name, this~elem->drain->name, this~elem->wid) ; add~comment~to~deck(MYDECK, message) ; } if (pulldown~ppass~fets[i]) { this~elem = pulldown~ppass~fets[i] ; sprintf(message, "%s grille : %s source: %s drain : %s largeur: %.4f", this~elem->name, this elem->gate->name, this elem->source->name, this~elem->drain->name, this~elem->wid) ; add comment to deck(MYDECK, message) ; } /* inclure en tant que commentaires tous les transistors FET qui constituent les arbres génériques. */ nfet~tree~ptr = build~generic~tree(ndriver node,NTYPE,O,&node type~flag); pfet~tree~ptr = build~generic tree(pdriver node,PTYPE,O,&node type-flag); if (nfet~tree~ptr) { add~comment~to~deck(MYDECK, " valeurs de l'étage d'attaque NFET:") add~fet~tree~comments~to~deck(MYDECK,nfet~tree~ptr); free-fet~tree(nfet tree ptr,nfet tree ptr); } else { add~comment~to~deck(MYDECK, " Utilisation de la valeur de l'étage d'attaque NFET à ports ") ; if (pfet~tree~ptr) { add~comment~to~deck(MYDECK, " valeurs de l'étage d'attaque à PFET:") ; add~fet~tree~comments~to~deck(MYDECK,pfet~tree~ptr); free fet tree(pfet tree ptr,pfet tree ptr); } ~ ~ else { add comment to deck(MYDECK, Utilisation de la valeur de l'étage d'attaque PFET à ports ") ; }} /* Pour deux noeuds donnés, trouver un transistor FET de transfert de type P et un transistor FET de transfert de type N entre ces deux noeuds, s'il en existe un. S'il existe plus d'une part de N et P, alors ce sous-programme revient aux deux premiers qu'il trouve. */ void find~passfets~between~nodes (node, other~node, n elem, p elem) node~pr node, other~node ; elem~pr *n~elem, *p~elem ; { elem~pr elem ; node~pr other~node2 ; *n~elem = *p~elem = NULL ; for chan elems(elem, other~node) il (EIsPassFet(elem)) { other~node2 = EOtherChan(elem,other~node) ; if (NSame(other node2,node)) { if (ETypeIsN(elem)) *n~elem = elem ; if (ETypeIsP(elem)) *p~elem = elem ; } end~chan~elems } } /* Pour un noeud donné, trouver le noeud qui fournit à son tour à une élévation dans le pire des cas jusqu'à VDD ou à un abaissement dans le pire des cas à GND. On suppose que ce noeud est une sortie d'un transistor à effet de champ de transfert. Ce sous-programme s'appelle lui-même jusqu'à ce qu'il soit présent sur un noeud qui est une entrée de transistor FET de transfert et non une sortie de transistor FET de transfert. Il maintient le suivi de l'étage d'attaque actuel pour le pire des cas et met à jour un enregistrement à niveau plus élevé de la caractéristique d'étage d'attaque dans le pire des cas, qui le suit. La recherche uniquement dans la direction de circulation du signal. */ void find~checklatch~driver~r(node, wc~node, type, wc~width, wc~loverw, ppass~fets, npass~fets, level, wc~ppass~fets, wc~npass~fets, wc~levels) node pr node ; node pr* wc~node ; int type, level ; int *wc levels ; elem~pr *ppass~fets, *npass~fets ; elem~pr *wc~ppass~fets, *wc~npass~fets ; double *wc~width, *wc~loverw ; { elem~pr elem ; node~pr other~node ; dlnodeptr fet~tree~ptr,pfet~tree~ptr; double fet -max-1-over-w,fet-min-1-over-w,fet~in~parallel; int is npass, is~ppass, i, node~type~flag, nfet-vt-drop, pfet~vt~drop double node~width, total~loverw, stage~loverw, nscale, pscale ; elem~pr n~elem, p~elem ; double nfet~loverw, pfet~loverw ; for~chan~fets(elem, node) { other node = EOtherChan(elem,node) ; if (NIsPassGateIn(other~node) && !NIsMarked(other~node) && NSame(other node, EInputChan(elem))) { push node set mark(other node) ; /* Le calcul de 1~over~w~cumulée dépend du type du fet de transfert. */ find~passfets~between~nodes(node, other~node, &n~elem, &p~elem) ; if (level fet~tree~ptr = build generic tree(node,type,0,&node type~flag); if (fet~tree~ptr) { combine shared~diffusions(fet~tree~ptr,fet~tree~ptr); effective~w~calc~from~tree(fet~tree~ptr, &fet~max~l~over~w, &fet~min~l~over~w, &fet~in~parallel); node~width = DeviceL ReqERC fet~max~l~over~w ; free fet tree(fet tree ptr,fet tree ptr); } ~ ~ else node~width = (type == NTYPE) ? CheckLatchDefaultNWidth ReqERC : CheckLatchDefaultPWidth~ReqERC ; /* La valeur L/W totale pour ce trajet dépend d'une somme pondérée des L/W des transistors FET de transfert le long du trajet. Cette valeur dépend également du fait qu'il s'agit d'un trajet élévateur ou abaisseur. */.. pfet~vt~drop = nfet~vt~drop = FALSE ; if (type == PTYPE) total~loverw = (DeviceL~ReqERC/node~width) * PMobility~ReqERC * CheckLatchPFETPassingVDD~ReqERC ; else total loverw = (DeviceL~ReqERC/node~width) * CheckLatchNFETPassingGND~ReqERC ; for (i = NUM~PASSCKT~FETS - 1 ; i > 0; i--) { is~npass = (npass~fets[i] != NULL) ? TRUE : FALSE ; is~ppass = (ppass~fets[i] != NULL) ? TRUE : FALSE ; if (!is~ppass && !is~npass) continue ; if (is~ppass) { pfet~loverw = PMobility~ReqERC * ((ppass~fets[i])->len / (ppass~fets[i])->wid) ; } if (is npass) { nfet~loverw = (npass~fets[i])->len (npass~fets[i])->wid ; } /* La valeur L/W pour cet étage de transistors FET de transfert dépend du fait qu'il s'agit d'un trajet élévateur ou abaisseur et du fait qu'il s'est produit ou non une baisse de Vt le long de ce trajet */ if (type == NTYPE) { /* trajet abaisseur */ pscale = pfet~vt~drop ? CheckLatchPFETPassingGND~Vt~ReqERC : CheckLatchPFETPassingGND~ReqERC ; nscale = nfet~vt~drop ? CheckLatchNFETPassingGND~Vt~ReqERC : CheckLatchNFETPassingGND~ReqERC ; } else { /* trajet élévateur */ pscale = pfet~vt~drop ? CheckLatchPFETPassingVDD~ReqERC ; nscale = nfet~vt~drop ? CheckLatchNFETPassingVDD~Vt~ReqERC : CheckLatchNFETPassingVDD~ReqERC ; } pfet~loverw *= pscale ; nfet~loverw *= nscale ; if (is~npass && is~ppass) { stage~loverw = (nfet~loverw * pfet~loverw) / (nfet~loverw + pfet loverw) ; } else if (is~npass && !is~ppass) { stage~loverw = nfet~loverw ; } else { stage~loverw = pfet~loverw ; } total~loverw += stage~loverw ; /* Pour l'ensemble suivant de transistors FET de transfert, se rappeler s'il s'est produit une baisse de Vt. */ if ( is ppass && !is~npass) pfet~vt~drop # = TRUE ; if (!is~ppass && is~npass) nfet-vt-drop # = TRUE ; } /* Si ce noeud actuel est pire que la proposition actuelle la pire, enregistrer l'information. */ if (total~loverw > *wc~loverw) { *wc~width = node~width ; *wc~node = node ; *wc~loverw = total~loverw ; for (i = 0 ; elem~pr npass-fets[NUM~PASSCKT~FETS], ppass~fets[NUM~PASSCKT~FETS] ; double wc~loverw = 0.0 ; int i ; for (i = 0 ; node~pr node ; { FILE *MYDECK ; elem~pr pullup~npass~fets[NUM~PASSCKT~FETS], pullup~ppass~fets[NUM~PASSCKT~FETS] ; elem~pr pulldown~npass~fets[NUM~PASSCKT~FETS], pulldown~ppass fets[NUM~PASSCKT~FETS] ; elem~pr elem; node~pr pdriver~node = NULL, ndriver~node = NULL ; double m~w[NUM~CKLATCH~FETS], m~1[NUM~CKLATCH~FETS] ; int i, lmodel[NUM~CKLATCH~FETS] ; int pullup~levels = 0, pulldown~levels = 0 ; charmessage[MAXSTRING]; /* Sauter ce noeud si c'est la sortie de l'inverseur à action directe. */ if (NIsFeedBack(node)) return ; for (i = 0 ; pullup~ppass-fets[i] = pulldown~npass~fets[i] = pulldown ppass-fets[i] = NULL ; } /* Détermination des largeurs et des longueurs des transistors FET pour ce noeud */ if (find~checklatch~latchfets(node, &m~w[0], &m~l[0])) return ; find~checklatch~driver(node, &pdriver~node, PTYPE, &m~w[6], pullup~ppass~fets, pullup~npass~fets, &pullup~levels) ; find~checklatch~driver(node, &ndriver~node, NTYPE, &m~w[5], pulldown~ppass~fets, pulldown~npass~fets, &pulldown~levels) ; if (!pdriver~node p !ndriver~node) return ; /* Les transistors NFET sont présents en un nombre impair et les transistors PFET sont présents en des nombres pairs. */ for (i = 1 ; CheckLatchLongNLength~ReqERC ? TRUE : FALSE ; for (i = 2 ; CheckLatchLongPLength~ReqERC ? TRUE : FALSE ; MYDECK = start~deck(CHECKLATCH~SIM, node); declare~passfet~ckt(MYDECK, "pulldown~passfet~ckt", pulldown~ppass~fets, pulldown~npass~fets ) ; declare~passfet~ckt (MYDECK, "pullup~passfet~ckt", pullup~ppass~fets, pullup~npass~fets ) ; declare~vth~ckt(MYDECK, lmodel) ; declare~set0~ckt(MYDECK, lmodel) ; declare~setl~ckt(MYDECK, lmodel) ; add~checklatch~comments~to deck(MYDECK, pulldown~ppass~fets, pulldown~npass~fets, pullup~ppass~fets, pullup~npass~fets, ndriver~node, pdriver~node) ; /* Insérer un message concernant le nombre total de niveaux */ if ((pullup~levels ≥ NUM~PASSCKT~FETS) Il (pulldown~levels ≥ NUM~PASSCKT~FETS)) { sprintf(message,"Erreur Modèle : Total de transistors FET de transfert abaisseurs %d Total de transistors FET de transfert élévateurs %d Limite du modèle %d", pullup~levels, pulldown~levels, NUM~PASSCKT~FETS -1) ; add~comment~to~deck(MYDECK, message) ; } add~ckt~header~to~deck(MYDECK, "cktl", CHECKLATCH~QUERY) ; fprintf(MYDECK,"Vl 100 0 dc=%. 4e \n", CheckLatchSupplyVoltage~ReqERC); add~vth~ckt~to~deck(MYDECK, m~w, m~1) ; add~set0~ckt~to~deck(MYDECK, m~w, m~1) ; add~setl~ckt~to~deck(MYDECK, m~w, m~1) ; end~deck (MYDECK); } REVENDICATIONS 1. Procédé pour déterminer une marge en courant continu pour un circuit de verrouillage (100), caractérisé en ce qu'il consiste à : exécuter une première simulation en utilisant un premier circuit de simulation (400) pour déterminer une tension de déclenchement d'un inverseur à action directe (101) dudit circuit de verrouillage (100); exécuter une seconde simulation en utilisant un second circuit de simulation (500) pour déterminer une marge un dudit circuit de verrouillage (100), ledit second circuit de simulation (500) comprenant un trajet (207a) pour un signal d'élévation dans le pire des cas ; exécuter une troisième simulation en utilisant un troisième circuit de simulation (600) pour déterminer une marge zéro dudit circuit de verrouillage (100), ledit troisième circuit de simulation (600) comprenant un trajet (207b) pour un signal d'abaissement dans le pire des cas. 2. Procédé pour déterminer une marge en courant continu pour un circuit de verrouillage (100) selon la revendication 1, caractérisé en ce qu'il comprend en outre : la détermination du trajet (207a) pour le signal d'élévation dans le pire des cas, par comparaison analytique d'une valeur résistive cumulée pondérée d'au moins un trajet pour le signal d'élévation, aboutissant audit circuit de verrouillage (100). 3. Procédé pour déterminer une marge en courant continu pour un circuit de verrouillage (100) selon la revendication 2, caractérisé en ce que ladite étape de détermination dudit trajet (207a) pour le signal d'élévation dans le pire des cas comprend : l'identification d'un ou de plusieurs éléments de circuit de transfert le long.de chacun de trajets possibles pour le signal d'élévation; la détermination d'une résistance de chacun desdits un ou plusieurs éléments de circuits de transfert identifiés, sur la base de tailles respectives desdits un ou plusieurs éléments de circuits de transfert identifiés; l'application à ladite valeur résistive de chacun desdits un ou plusieurs éléments de circuit de transfert identifiés, d'un poids basé sur une configuration topologique de l'élément de circuit de transfert identifié correspondant ou de l'un correspondant desdits éléments de ladite pluralité de circuits de transfert identifiés pour la production d'une ou plusieurs valeurs résistives pondérées ; la sommation de ladite valeur résistive pondérée ou de ladite pluralité de valeurs résistives pondérées pour produire ladite valeur résistive pondérée cumulée de chacun desdits trajets possibles du signal d'élévation ; la détermination dudit trajet (207a) du signal d'élévation dans le pire des cas, possédant la valeur résistive pondérée cumulée maximale parmi lesdits trajets possibles du signal d'élévation. 4. Procédé pour déterminer une marge en courant continu d'un courant de circuit de verrouillage (100) selon la revendication 1, caractérisé en ce qu'il comprend en outre : la détermination dudit trajet (207b) pour un signal d'abaissement dans le pire des cas par comparaison analytique d'une valeur résistive pondérée cumulée d'au moins un trajet pour le signal d'abaissement aboutissant audit circuit de verrouillage (100). 5. Procédé pour déterminer une marge en courant continu d'un courant de circuit de verrouillage (100) selon la revendication 4, caractérisé en ce que ladite étape de détermination dudit trajet (207b) du signal d'abaissement dans le pire des cas comprend : l'identification d'un ou plusieurs éléments de circuit de transfert le long de chacun de trajets possibles du signal d'abaissement; la détermination d'une valeur résistive dudit élément de circuit de transfert identifié ou de chacun de ladite pluralité d'éléments de circuit de transfert identifiés sur la base des tailles respectives dudit élément de circuit de transfert identifié ou de ladite pluralité de circuits de transfert identifiés; l'application à ladite valeur résistive de chacun desdits un ou plusieurs éléments de circuit de transfert identifiés, d'un poids basé sur une configuration topologique de l'élément de circuit de transfert identifié correspondant ou de l'un correspondant desdits éléments de ladite pluralité de circuits de transfert identifiés pour la production d'une ou plusieurs valeurs résistives pondérées ; la sommation de ladite valeur résistive pondérée ou de ladite pluralité de valeurs résistives pondérées pour produire ladite valeur résistive pondérée cumulée de chacun desdits trajets possibles du signal d'abaissement ; la détermination dudit trajet (207b) du signal abaisseur dans le pire des cas, possédant la valeur résistive pondérée cumulée maximale parmi lesdits trajets possibles du signal d'abaissement. 6. Procédé pour déterminer une marge en courant continu d'un courant de circuit de verrouillage (100) selon la revendication 1, caractérisé en ce que ladite étape d'exécution de ladite seconde simulation comprend : le réglage d'une valeur initiale d'un signal de sortie (104) d'une partie dudit second circuit de simulation (500) représentant ledit circuit de verrouillage (100), sur un niveau haut logique; l'application d'un signal d'entrée d'élévation à niveau haut logique à une entrée (103) de ladite partie dudit second circuit de simulation (500) représentant ledit circuit de verrouillage (100) par l'intermédiaire dudit trajet (207a) de signal d'élévation dans le pire des cas; et la détermination d'un niveau de tension au niveau de ladite entrée (103). 7. Procédé pour déterminer une marge en courant continu d'un courant de circuit de verrouillage (100) selon la revendication 1, caractérisé en ce que ladite étape d'exécution de ladite troisième simulation comprend : le réglage d'une valeur initiale d'un signal de sortie (104) d'une partie dudit troisième circuit de simulation (600) représentant ledit trajet (100), sur un niveau bas logique; l'application d'un signal d'entrée d'abaissement à niveau bas à une entrée de ladite partie dudit troisième circuit de simulation (600) représentant ledit circuit de verrouillage, au moyen dudit trajet (207b) du signal d'abaissement dans le pire des cas ; la détermination d'un niveau de tension au niveau de ladite entrée (103).