# Conception de circuits intégrés

La conception (ou le design) de circuits intégrés (ou puces électroniques) consiste à réaliser les nombreuses étapes de développement (flot de conception ou design flow) nécessaires pour concevoir correctement et sans erreurs une puce électronique.
* Le point d'entrée est une spécification fonctionnelle qui décrit le fonctionnement voulu de la puce, ainsi que des contraintes non fonctionnelles (surface, coût, consommation...).
* Le point de sortie est la représentation sous forme d'un fichier informatique (généralement au format GDSII ou plus récemment OASIS) des dessins des masques (layout) de la puce. Ce fichier permet la fabrication des masques (généralement en quartz). Ces masques serviront alors lors de la fabrication de la puce dans les unités de fabrication de semi-conducteurs (fab ou fonderie) pendant les étapes de photolithographie.

## De quoi est composé un circuit intégré ?

Les circuits intégrés complexes de type SoC (System On Chip ou Système Sur Puce en français) intègrent généralement :
* une partie numérique synthétisable composée généralement de :
** un ou plusieurs processeurs (comme ceux par exemple proposés par la société ARM),
** un gestionnaire d'horloge et de reset,
** un contrôleur d'interruption, une interface de debug, éventuellement des coprocesseurs de calculs, des DSP,
** des périphériques de communication comme des ports d'entrées-sorties, des interfaces série (par exemple UART, SPI ou USB) ou parallèle (interfaces FLASH ou SDRAM), voire une interface PCI,
** d'autres périphériques suivant l'application visée comme des timers/compteurs, un crypto-processeur, un décodeur mpeg2 ou un contrôleur de moteur (PWM) ;
* une partie mémoire non synthétisable, généralement :
** de la SRAM,
** de la mémoire cache pour le processeur,
** éventuellement de la FLASH ou de la ROM pour sauvegarder le code,
** éventuellement des SRAM double ports ;
* une partie analogique (non synthétisable) qui comprend généralement :
** une ou plusieurs PLL éventuellement associée à des oscillateurs pour générer les horloges nécessaires au processeur et autres périphériques,
** éventuellement des convertisseurs analogiques/numériques et numériques/analogiques ;
* des pad d'entrée/sortie avec le buffer d'entrée/sortie sur lesquels seront connectés les fils d'or qui les relient aux connecteurs du boîtier (généralement en plastique) qui contiendra la puce.
Le flot de conception n'est pas du tout le même pour chacune de ces parties (numériques, mémoires, parties analogiques, I/O pad).

## Conception d'un circuit numérique

Le point de départ est une spécification fonctionnelle décrivant la fonctionnalité voulue. Lorsqu'il s'agit d'une architecture à un ou plusieurs processeurs, la conception du logiciel associé démarre généralement en parallèle afin de pouvoir le simuler sur l'architecture cible durant la conception.

### Modélisation système (System Design)

Cette étape consiste à modéliser à très haut niveau le système complet (matériel et logiciel) afin de valider en matière de performances l'architecture choisie par rapport aux besoins de l'application.
Plusieurs langages et simulateurs associés existent actuellement pour effectuer cette étape. Les plus connus sont :
* System C (extension du langage C++ dans le but de modéliser une architecture matérielle) ;
* System Verilog (extension du langage Verilog).
Des standards sont en cours d'élaboration.

### Description RTL (RTL design)

Une fois l'architecture validée, le circuit est modélisé au niveau Transfert de registres (Register Transfer Level). Cette modélisation revient à décrire l'implémentation sous forme d'éléments séquentiels (les registres ou bascules) et de combinaisons logiques entre les différentes entrées/sorties des éléments séquentiels et des entrées/sorties primaires du circuit.
Cette modélisation est codée à l'aide d'un langage de description matériel (Hardware description language). Cela se fait soit en VHDL, soit en Verilog.
Le propre d'une description RTL est d'être automatiquement synthétisable en portes logiques combinatoires (portes ET, OU, multiplexeur, etc.) et séquentiels (comme les bascules D synchrones) issues d'une bibliothèque de cellules standard (Standard Cell Library). Pour cela, le codage RTL en VHDL ou Verilog doit suivre certaines règles précises afin que le code soit dit « synthétisable ». Il est tout à fait possible de décrire une fonctionnalité équivalente en VHDL ou Verilog qui ne soit pas synthétisable. On appelle cela une description comportementale de plus haut niveau que le niveau RTL.

### Simulation logique

Le premier niveau de vérification revient à simuler le code RTL écrit en VHDL ou Verilog. Le simulateur va simuler dans le temps chaque signal d'interconnexion en fonction de stimuli d'entrée qu'il faudra décrire (généralement dans le même langage VHDL ou Verilog). Si le circuit à simuler contient un processeur, il faudra aussi fournir le programme exécutable correspondant sous forme d'un contenu binaire de mémoire. La mémoire contenant le code programme et les données (FLASH ou SRAM par exemple) est aussi modélisée en VHDL ou Verilog, mais à un niveau d'abstraction plus élevé que le RTL (les SRAM ou FLASH n'étant pas synthétisables).
Les simulateurs les plus utilisés sont :
* Riviera et Active-HDL de la société Aldec ;
* vcs de la société Synopsys ;
* nc-sim (native compiler) de la société Cadence ;
* ModelSim et QuestaSim de la société Siemens (anciennement Mentor).

### Vérification fonctionnelle

L'utilisation de simulateurs logiques n'est pas suffisante pour garantir qu'il n'y a pas d'erreur de conception pour les raisons suivantes :
* la génération des stimuli est faite par le concepteur : cela peut être relativement long et ne permet pas une couverture de tests fonctionnelle exhaustive.
* les simulateurs logiques sont lents, et pour un système complexe il est difficilement envisageable de simuler des durées réelles de plusieurs minutes qui peuvent prendre plusieurs jours de simulation.
Pour compenser cela, des solutions de vérification fonctionnelle existent essayant soi d'être plus exhaustives soit d'accélérer le temps de simulation : Par exemple, il est possible d'utiliser :
* des générateurs aléatoires de stimuli avec vérification automatique des résultats par rapport à un modèle de référence. Exemple l : 'outil de vérification Specman associé à son langage de modélisation E : Specman génère aléatoirement des stimuli d'entrée, les simule à la fois sur la description RTL de la conception à vérifier et sur le modèle de référence puis compare les résultats obtenus. Le nombre de stimuli générés est déterminé par une métrique de couverture fonctionnelle déterminée par l'ingénieur de vérification. Le modèle de référence est codé dans le langage E (langage standardisé IEEE-1647).
* les outils de vérification fonctionnelle formelle. À l'aide de langage comme PSL, basé sur une modélisation par assertion. La définition d'assertion consiste à définir des propriétés fonctionnelles que doit vérifier le circuit. Par exemple « si le signal s19 vaut 0 et que le registre r22 vaut 1 alors la sortie n36 doit passer de 0 à 1 après 3 cycles d'horloge ».
Il est théoriquement possible de décrire entièrement la fonctionnalité d'un circuit numérique par des assertions. L'outil peut alors vérifier de façon formelle que les deux modélisations (l'implémentation en RTL et la modélisation par assertion) sont équivalentes.
* la vérification au niveau système. Le but est d'accélérer le temps de simulation et ainsi de simuler un temps de fonctionnement relativement long (comme le boot complet d'un système d'exploitation par exemple et le lancement d'applications logicielles).
* l'émulation ou prototypage à base de FPGA ou EPLD. Le but est de réaliser un prototype fonctionnel à base de composants à logique programmable de type FPGA ou EPLD comme ceux proposés par les sociétés Xilinx ou Altera. Le prototype peut alors être stimulé dans les conditions réelles de son environnement, par exemple la carte électronique complète dans laquelle le circuit sera soudé.

### Synthèse logique

La synthèse logique est l'étape qui permet de transformer la description RTL du circuit en une description au niveau portes logiques (Gate netlist). Au préalable, une bibliothèque cible de portes logiques doit être disponible. Celle-ci rassemble généralement plusieurs centaines d'éléments logiques (comme des portes ET, OU, bascules, etc.). Cette bibliothèque dépend de la technologie cible, c'est-à-dire du nœud technologique (par exemple 0,18 µm ou 0,13 µm) et du fondeur (les règles de dessin des cellules dépendent du procédé de fabrication).
L'utilisateur doit également fournir des contraintes de synthèse comme, par exemple :
* la fréquence de fonctionnement du circuit ;
* les conditions (gamme de tension d'alimentation, gamme de température, dispersion des délais de traversée des portes liées au procédé de fabrication) ;
* les contraintes de temps de départ et d'arrivée sur les entrées primaires et secondaires du circuit ;
* le modèle de charge lié aux fils d'interconnexion qui relieront les portes ensembles ;
* la taille maximale du circuit sur le silicium en µm$^2$.
Les outils de synthèse actuels travaillent essentiellement sur des circuits digitaux dits « synchrones ». C'est-à-dire que tous les éléments séquentiels (les bascules) sont cadencés par une seule et même horloge. À chaque front d'horloge (généralement montant), les bascules échantillonnent leurs entrées qui se retrouvent généralement recopiées sur leur sortie (pour des bascules de type D). Ces sorties sont ensuite traitées par l'unité combinatoire avant d'être re-échantillonnées au coup d'horloge suivant. On dispose donc d'une période d'horloge comme temps de traitement de l'unité combinatoire qui est égale à la somme des délais de traversée des portes incriminées. Éventuellement, il peut y avoir plusieurs domaines d'horloge, regroupant un ensemble d'éléments séquentiels et combinatoires. À l'inverse, dans une conception asynchrone, l'horloge d'une bascule peut très bien être issue de la combinaison logique d'autres éléments séquentiels. Ces types de conception sont plus marginaux car il n'existe pas d'outil d'aide à la conception permettant de s'assurer de façon exhaustive que le circuit fonctionne sans problème dans toutes les conditions d'utilisation.
L'outil de synthèse d'un circuit synchrone procède généralement en plusieurs étapes :
* il va d'abord transformer la description RTL en éléments logiques combinatoires et séquentiels génériques (indépendamment de la bibliothèque cible) suivant des algorithmes mathématiques ;
* il va ensuite remplacer les éléments logiques génériques par ceux issus de la bibliothèque cible. Pour cela, il choisit les éléments logiques respectant les contraintes de temps et d'espace données par l'utilisateur. Des calculs d'analyse de délais sont alors réalisés sur tous les chemins logiques du circuit afin de s'assurer qu'ils respectent les contraintes de temps (fréquence de fonctionnement du circuit). Si les résultats ne sont pas concluants, l'outil essaye d'utiliser d'autres portes disponibles dans la bibliothèque pour arriver au résultat souhaité. Il est ainsi courant dans une bibliothèque d'avoir de nombreuses portes réalisant la même fonction logique mais avec des tailles et des sortances différentes ;
* lorsque les contraintes de temps sont remplies, l'outil de synthèse dispose de certaines marges de temps sur certains chemins. Il peut alors remplacer certaines portes par d'autres moins gourmandes en consommation et en taille silicium tout en continuant à respecter les contraintes de temps.
Dans cette phase de conception, l'arbre d'horloge n'est pas synthétisé : il est considéré comme idéal. Toutefois, on estime une certaine latence qui correspond au pire décalage possible d'arrivée de l'horloge entre deux bascules.
Le résultat de cette étape est un fichier informatique représentant l'instanciation des portes de la bibliothèque cible et leur interconnexion, représentant le circuit électronique (gate netlist). Il existe différents formats de ce type de représentation :
* le format Verilog (le plus utilisé) ;
* le format VHDL ;
* le format EDIF.
Les outils les plus connus sont :
* design_compiler de la société Synopsys.
* rtl_compiler de la société Cadence.

### Placement et routage

C'est le processus lors duquel les différentes parties d'un circuit sont automatiquement placées et connectées en fonction du problème à résoudre. Le placement-routage est en particulier employé dans le cadre des FPGA, des composants reprogrammables avec des milliers d'unités de traitement internes qui peuvent être reliées entre elles.
Le placement-routage est un problème d'optimisation difficile qui nécessite des techniques métaheuristiques comme les algorithmes génétiques ou le recuit simulé. Les temps de calcul sont donc souvent très élevés au vu du nombre d'éléments à considérer. Il est toutefois possible de laisser une marge de manœuvre à l'algorithme pour obtenir plus rapidement une solution acceptable mais non optimale.

### Analyse des délais et d'intégrité des signaux

Une analyse statique de timings (STA) est nécessaire pour s'assurer que les délais dans le design sont respectés dans les différentes conditions d'utilisations prévues. Des paramètres tels que la température de fonctionnement, le voltage, ou le processus, variabilité apparaissant lors de la fabrication proprement dite, ont un effet important sur les délais.
Cette analyse est faite généralement dans le pire cas (Worst Case) et le meilleur cas (Best Case). L'analyse dans le pire cas permet de s'assurer qu'il n'existe pas de violations en setup sur les éléments synchrones par rapport à la fréquence désirée. L'analyse dans le meilleur cas permet quant à elle de détecter s'il existe des violations en hold.
Une analyse de timings sur les interfaces est aussi importante.
L'outil Primetime (Synopsys) est un des outils de STA.

### Vérifications physiques (DRC et LVS, antennes)

La phase de vérification physique (en anglais Physical verification, PV) permet de s'assurer que le dessin (layout) correspond au circuit électrique qui a été spécifié, et qu'il peut être fabriqué sans erreurs qui l'empêcheraient de fonctionner correctement. On distingue :
* la vérification des règles de dessin (Design Rule Checking, DRC) : si les règles définies par la fonderie sont respectées, le circuit en silicium correspondra au dessin du layout
* la comparaison du layout au schéma électrique (logiciel de vérification de schéma, LVS) : on recherche en particulier des courts-circuits (short) ou des coupures dans le circuit (open)
* l'extraction des caractéristiques électriques (Resistors and Capacitors eXtraction, RCX) : on calcule les valeurs des résistances et capacités du circuit, mais aussi toutes les résistances et capacités parasites

### Vérification physique au niveau masque (DFM)

De nos jours la microélectronique est descendue dans des technologies submicroniques (largeur de poly-silicium dans un transistor inférieure à 130 nm). Cette descente dans des valeurs très petites provoque la croissance de phénomènes pouvant altérer le bon fonctionnement des puces si des règles de dessin très strictes ne sont pas respectées. Les services de layout se préoccupent de la manière dont on peut intervenir sur la réalisation des masques les défauts résiduels. Ces défauts se manifestent principalement lors du process et peuvent se répartir en trois groupes :
    – Aléatoire : défauts liés à la qualité du substrat et à la propreté de la salle blanche (particules).
    – Systématique : défauts de « process et lithography » (sur-gravure, sous-gravure…).
    – Paramétrique : fluctuation des paramètres des dispositifs et/ou des connexions.
Parmi ces défauts, seuls les défauts aléatoires ne peuvent être résolus par une optimisation des dessins du masque. Les deux autres groupes ciblent des problèmes connus et résolus et qu’il faudra de nouveau résoudre pour les technologies submicroniques afin de pouvoir avoir des simulations correctes. Ces défauts ont pour point commun d’engendrer une diminution conséquente du rendement des puces et sont corrigés par les règles dites DFM/DFY (Design for Manufacturability et Design for Yield) qui sont des règles influant sur le rendement et fabricabilité des puces.

### Validation du silicium
## Conception d'un circuit analogique
### Saisie d'un schéma

La saisie du schéma est la première étape du design d'un circuit analogique. Elle se fait en CAO (conception assistée par ordinateur) en utilisant des logiciels spéciaux, très souvent Virtuoso de Cadence dans le milieu industriel. La conception de circuits analogiques repose sur la technologie CMOS, et de ce fait, les schémas obtenus contiennent en grande partie des transistors, assemblés avec des composants plus classiques (résistors, condensateurs, diodes, ...). Lors de la saisie du schéma, il est préférable de procéder par bloc afin d'alléger la création. En effet, il est possible de transformer un étage d'un circuit en un bloc afin de pouvoir le réutiliser dans le projet complet. Les schémas complets d'un circuit intégré sont donc une accumulation de blocs qui contiennent chacun un montage précis à transistors.

### Simulation analogique

La simulation analogique permet de tester le bon fonctionnement théorique du circuit en utilisant un environnement de simulation contenu dans le logiciel de design. Ces outils de simulation permettent d'obtenir des courbes (ou waveform) qui représentent les tensions ou les courants que le designer a choisi de tester sur son schéma. Cette étape est très importante dans la conception car elle permet de valider le schéma avant de passer au layout.

### Vérifications physiques (DRC et LVS, antennes)

Le DRC pour Design Rule Check est une étape de validation qui permet de vérifier que le circuit dessiné (ou layout) peut effectivement être fabriqué. Ces règles de dessin sont définies par les capacités des machines de fabrication à créer sur silicium des motifs plus ou moins proches, plus ou moins fins, et qui autorisent un rendement de fabrication élevé. Par exemple, deux fils de métal ne doivent pas être trop proches, au risque de se retrouver court-circuités lors de la fabrication.
Les procédés de fabrication des circuits intégrés peuvent produire des accumulations de charges électriques sur les circuits. Ces charges électriques peuvent être destructrices pour certains composants. On parle d'effet d'antenne. Le respect de règles de dessin similaires aux règles DRC permet d'éviter ces effets.
Le LVS pour logiciel de vérification de schéma, est une étape de validation qui permet de vérifier que le circuit dessiné (ou layout) correspond au schéma électrique du circuit.
Ces trois étapes de validation se font en général au moyen de logiciels spécialisés, et paramétrés ou programmés pour détecter des mauvaises configurations, des mauvais dessins, en regard de ce que permettent les lignes de fabrication. Ces logiciels spécialisés sont fournis par des sociétés dites de CAD (Computed Assisted Design).

### Tapeout

Terme désignant l'envoi du GDSII en fabrication afin de fabriquer les masques.