Reverse Engineering du intel 4004

Oni's blog

Introduction

L'Intel 4004, le tout premier processeur commercialisé est une petite merveille technologique des années 1970. À cette époque, il était encore possible de voir les transistors de circuits intégrés presque à l'oeil nu. Un simple microscope permet de dévoiler la complexité qui se cache sur ces plaquettes de silicium:

image-text

image-text

Pour ceux qui sont intéressés par une histoire détaillée du intel 4004, un site en anglais ici.

Mon but ici est de décortiquer le intel 4004 transistor par transistor, afin de comprendre ses mécanismes en profondeur. Pour cela, je vais utiliser les schémas officiels et faire une simulation complète sous TICS, mon logiciel de simulation de circuits intégrés à partir d'images bitmap.

Transistor

Avant de commencer, il est important de comprendre le fonctionnement d'un transistor.
Un transistor fonctionne comme un simple interrupteur électronique. On a un semi-conducteur, que l'on peut définir comme passant ou bloquant grâce à une entrée spéciale que l'on nomme "gate", ou grille en français. Selon si l'on applique un courant ou non à la grille, le transistor agira comme un interrupteur fermé ou ouvert.

On peut voir un transistor comme un relais (un interrupteur électromécanique), mais très rapide et qui consomme peu d'énergie, tout en étant incroyablement petit.

Cette notion suffit pour comprendre ensuite tout le fonctionnement du processeur, qui n'est constitué que de transistors et résistances pour former des portes logiques (en fait il y a aussi des condensateurs, mais il n'est pas nécessaire de les comprendre pour assimiler la partie logique du système).
Il faut aussi ne pas oublier comment fonctionne le courant électrique, qui va toujours essayer de passer par le chemin le plus "court" (avec le moins de résistance) pour relier le "+" et le "-" (notre potentiel haut qui tente de rejoindre notre potentiel bas).

Image
Un transistor sous forme schématique.

Ici, à gauche VCC indique notre potentiel "haut", et GND notre potentiel bas (la terre). La résistance est la uniquement pour empêcher un court-circuit. C'est d'ailleurs la principale source de consommation de ces circuits (heureusement, plus tard de nouvelles techniques ont été inventées pour grandement diminuer la consommation énergétique des transistors).

Tout comme un interrupteur, le courant ne pourra passer que si le circuit est fermé, et donc que le transistor est passant. Pour que le transistor soit passant, il suffit que la grille (gate) soit alimentée. Sinon, le transistor agit comme un interrupteur ouvert et le courrant ne passe pas.

Portes logiques

Les portes logiques utilisent une combinaison de transistors. La porte logique la plus simple "not" est un simple inverseur et n'utilise qu'un seul transistor:

Image

Vient ensuite la porte logique NAND qui n'utilise que deux transistors:

Image

Et la porte NOR:

Image

Il suffit d'inverser un NAND pour obtenir un AND, et un NOR pour obtenir un OR. À partir de ces portes logiques, on peut créer des structures beaucoup plus complexes.

Note: ci-dessus, un pixel bleu correspond a "Ground", un pixel rouge a "Vcc", et le pixel vert indique le transistor.

Layouts

Comme les transistors ne sont pas gravés directement sous forme schématique, il est important de comprendre la notion de layout. Un transistor "physique" est composé de deux matériaux distincts (jonction NPN ou PNP). Je ne vais pas m'étendre sur les détails, mais l'idée est que l'on "grave" un transistor en utilisant plusieurs couches de matériaux différents.

Dans le cas du 4004, un transistor utilisera exactement deux couches, et c'est l'analyse de ces couches qui nous permettra de comprendre où ils se situent sur notre circuit réel. Il existe aussi une couche métallique qui sert notamment à faire la circuiterie entre l'alimentation et les transistors.

Par chance, les circuits schématiques du 4004 sont accessibles, on peut donc sauter la première étape de reverse engineering.

Simulation

Après plusieurs jours de travail pour retranscrire les schémas d'origine dans TICS sans erreur, voici le circuit complet en version petit format et grand format (il suffit de cliquer sur l'image):

image-text

Ce circuit est totalement fonctionnel, mais il nécessite d'être interfacé avec au moins une ROM, émulée dans le cas présent pour tester des programmes facilement. Le plus impressionnant étant que tout tient dans une si petite image.

Grâce à cette simulation il va être possible d'identifier des parties du circuit afin de comprendre les mécanismes internes du processeur.

Ci-dessous, l'animation d'un programme qui remplit tous les registres un à un.
Un clic sur l'image pour voir l'animation complète:

image-text

On reconnaît facilement les registres (le bloc en bas a droite) qui se remplissent ligne par ligne.
L'identification des parties du circuit et leur fonctionnement se feront dans le prochain billet.