Dernièrement je me suis intéressé à l'électronique utilisée dans le célèbre ordinateur PDP-8 (Programmable Data Processor) première génération de Digital Equipment Corporation (DEC). Le premier PDP-8 a été mis en marché en 1965 et il a été produit jusqu'en 1978, sur plusieurs générations technologiques. La première génération utilisait des circuit logiques DRL (Diode-Resistor-Logic) et DTL (Diode-Transistor-Logic) et une mémoire à tores magnétiques.
Puis lorsque les circuits intégrés TTL (Transistor Transistor Logic) ont été mis en marché Digital a fabriqué une version dont les circuits étaient conçu avec cette technologie. Cependant il a fallu attendre les dernières années de sa production pour que la mémoire à tore magnétique soit remplacée par de la mémoire silicium RAM en circuits intégrés. Lors de ma dernière année de collège (1977-78) j'avais un cours consacré au PDP-8. On apprenait à le programmer en assembleur et on étudiait ses circuits logiques. Ceux de la version TTL.
En 1975 la compagnie Intersil a mis en marché un microprocesseur en technologie CMOS le IM6100 qui répliquait le CPU du PDP-8. Il a été utilisé dans certaines machine comme le VT78.
De 1965 à 1977 la technologie a donc permis de passer d'un mini ordinateur pesant 113Kg à un micro-ordinateur pesant sans doute moins de 30Kg et qui tenait dans le boitier d'un terminial vidéo VT521. Et la plus grosse part de ces 30Kg revenait au tube cathotique utilisé pour l'affichage.
Analyse de circuits DTL
Mes recherches m'ont permises de retrouver plusieurs manuels publiés par DEC à cette époque sur le site bitsavers.org
J'ai donc entrepris d'étudier les circuits en question pour en comprendre le fonctionnement. Selon le site suivant https://www.pdp8online.com/straight8/functional_restore.shtml le PDP8 qu'ils ont restauré contenait
- 230 cartes de circuits imprimés.
- aproximativement 10,148 diodes
- 1409 transistors
- 1674 condensateurs
- 5615 résistances
Mon intention dans cet article est d'analyser le fonctionnement de ces circuits logiques. Non pas dans leur complexité mais seulement les circuits de base. Car l'ordinateur était construit à partir d'un petit nombre de cartes logiques de base utilisées en grand nombre et interconnectées entre elles pour former la complexité de l'ordinateur. Comme mentionné plus haut il y en avait 320. C'est un peu comme si aujourd'hui on voulait reconstruire le PDP-8 avec des circuits intégrés de la série 74HCxxx et qu'on utilisait seulement des AND, OR et NON en les combinants ensemble pour former des flipflops, des latchs, des décodeurs, un ALU, etc. C'est d'ailleurs ce qu'ils ont fait dans les dernières générations en utilisant des circuits intégrés TTL au lieu d'assemblage DTL.
architecture du PDP-8
L'objectif principal de Digital en concevant le PDP-8 était de réduire le coût au minimum. Ils devaient donc choisir une architecture très simple appellée architecture à une adresse.
Une architecture à une adresse signifie que les instructions machines n'ont besoins que d'une adresse pour spécifier les opérantes. Habituellement il s'agit d'une adresse mémoire. Par exemple pour les opérations logique et arithmétiques l'une des opérandes est l'accumulateur (AC) avec le contenu d'une adresse mémoire. Le résultat est déposé dans l'accumulateur. Donc l'instruction n'a besoin que d'un paramètre soit l'adresse où se trouve la seconde opérande.
Comme on le voit il n'y a que 4 registres de 12 bits et 1 registre de 1 bit LINK. Comme vous le voyez il n'y a pas de pointeur de pile. Lors d'un appel de sous-routine l'adresse de retour était enregistrée à la première adresse de la sous-routine. Les programmeurs devaient donc réserver cette adresse dans ce but. Ceci exclus la possibilité de faire des appels récursifs. En comparaison le MOS 6502 avait 5 registres 8 bits et 1 de 16 bits pour le compteur ordinal.
De plus le PDP-8 n'avait qu'un seul bus de 12 bits pour lire et écrire dans les registres. Comme on le voit le compteur ordinal n'avait que 12 bits lui aussi donc ne pouvait adresser que 4096 mots de mémoires. De base le système se vendait donc avec 4096 mots de mémoire mais grâce à un système de sélection de plan (bank) mémoire il était possible d'ajouter des plans de mémoire en tranche de 4096 mots. Évidemment 1 seul plan (bank) était visible à la fois. En étudiant cet ordinateur je ne pouvais m'empêcher de faire le rapprochement avec le CPU de la ligne de base des microcontrôleurs PIC qui eux aussi codent les instructions sur 12 bits et divisent la mémoire RAM en plans (banks) de 128 mots. Car sur les PIC les instructions qui accèdent la mémoire code l'adresse sur 7 bits.
Ceci dit je ne m'attarderai pas plus que ça sur l'architecture de programmation du PDP-8. Voici la schématique d'une carte comprenant 7 inverseurs et une autre comprenant 3 flipflops.
Si on s'attarde à la carte des inverseurs (fonction logique NON) on constate qu'il y a 2 alimentations, l'une de +10 volts et l'autre de -15 volts. L'alimentation de +10 volts est reliée à la base de chaque transistor par une résistance de 100Kohm. Cette alimentation ne joue aucun rôle dans le fonctionnement logique des portes. Son seul rôle est de réduire le temps de commutation des transistors lors du cutoff. En effet lorsqu'un transistor est en conduction une charge électrique est accumulée dans la jonction base-émetteur. Au moment où le courant de la base est coupé cette charge doit-être dissipée. Grâce à l'alimentation +10 volts et la résistance de 100Kohm cette charge est draînée plus rapidement donc le transistor commute plus rapidement vers le cutoff. Puisque cete partie du circuit n'est pas utile à l'analyse de la fonction logique elle sera ignorée ultérieurement.
À droite du circuit on note la présence des diodes D8-D11 ainsi que le la résistance R15 branchées en série entre le GND et le -15 volts. La tension au point 6 est d'environ 4*-0,7=-2,8 volts. À partir du point 6 les diodes D1-D7 se branche au collecteur de chaque transistor. Le rôle de ce circuit est de limiter la tension au collecteur lorsque le transistor est en cutoff à environ 5*-0,7=-3,5 volts. Donc lorsque le transistor est en saturation le voltage au collecteur s'approche de 0 volts et lorsqu'il est bloqué elle s'approche de -3,5 volts. Ces valeurs correspondent aux niveaux logiques de fonctionnement de l'ordinateur. On retrouvre le même circuit sur toutes les cartes qui implémentent des fonctions logiques. Pour l'analyse du fonctionnement logique des circuits on peut ignorer ce limiteur de tension.
En éliminant de notre analyse le circuit +10 volts et le limiteur de tension au collecteur on va pouvoir redessiner un forme simplifié des circuits logiques pour fin d'analyse.
Une fois épuré un inverseur, ou si vous préférez la fonction logique NON correspond au circuit suivant:
Si l'entrée (Input) est mise au GND le transistor Q1 bloque car le courant ne circule plus dans la base. En effet pour que le courant circule dans la base de Q1 il faut 3*-0,7=-2,1 volts au point jct1. Hors si l'anode de D1 est à GND il n'y a que -0,7 volts au point jct1. Le transistor étant bloqué on retrouve -3 volts à la sortie (Out). Par contre si on laisse flotter l'anode de D1 ou si on la met à un voltage inférieur à -2,8 volts le courant peut circuler à travers R1,D2 et D3 dans la base de Q1. Le transistor entre alors en saturation et le voltage à sortie monte à 0 volts. En terme logique on obtient donc la fonction NON.On peut obtenir une fonction NON ET en ajoutant des diodes aux points de jonctions jct1 comme ceci.
On peut ajouter d'autres diodes si on a besoin de plus d'entrées. Avec des portes NON et NON ET on peut construire n'importe quel circuit logique aussi complexe soit-il. On dit que ces 2 fonctions combinées ensemble sont Turing complete2. On pourrait dire que ce sont les briques LEGO de l'informatique3.
En ce qui concerne la carte de 3 flipflops (bascule bistable). Ça a l'air compliqué n'est-ce pas? Il n'y a que 6 transistors mais 46 diodes. Vous comprenez maintenant pourquoi il y avait tant de diodes dans cet ordinateur. Ce type de circuit ne s'appelle pas DTL pour rien. Le D vient en premier. Première constatation les transistors sont de type PNP et l'alimentation principale est donc négative à -15 volts.
Puisque la carte comprend 3 circuits identiques et une partie commune j'ai simplifié en extrayant un seul flipflop. J'ai aussi enlevé le circuit à +10 volts.
La ligne verticale grise sépare la partie du circuit commune aux 3 flipflops. Cet arrangement de diodes ne sert qu'à limiter le voltage au collecteur des transistors à -3.5 volts environ (clamping) à travers les diodes D1 et D6. Les deux valeurs logiques était donc représentées par des tenstions de 0 volt et -3 volt.Le flipflop le plus simple est le RS-flipflop. On le construit en utilisant 2 portes NAND (NON ET) comme ceci.
Lorsqu'il y a un barre au dessus d'un symbole logique ça signifit que l'entrée est active à 0 logique. Si on met l'entrée ~S à 0 volt (0 logique) on force la sortie Q1 à -3 volts (1 logique) et si on met l'entrée ~R à 0 volt on force la sortie Q2 à -3 volt. La sortie ~Q est le complément de la sortie Q.
Sur le schéma du PDP-8 le point F représente la sortie Q et le point E représente la sortie ~Q. Le point D représente l'entrée ~S du flipflop. Il n'y a pas d'entrée ~R sur le schéma du PDP-8 cette entrée a étée remplacée par un circuit DCD expliqué ci-bas.
Diode-Capacitor-Diode
Cependant ce RS flipflop a été modifié quelque peu. Le NAND de droite a été modifié pour ajouter une entrée spéciale constituée des composants C1,R7,R8,D10..D14,D47,D48. Selon la terminologie de Digital ce circuit spécial s'appelle un DCD (Diode-Capacitor-Diode). Ça fonction est de changer l'état du flipflop mais avec un délais et sous contrôle d'une impulsion.
Voici une représentation séparée du circuit pour analyse.
Le circuit a donc 3 entrées et une seule sortie qui va à la base d'un transistor Q2 du flipflop en passant par la diode D10.
- conditionning input, Si cette entrée est maintenue à 0 volt la condensateur ne peut se charger et le DCD ne passera aucun signal au flipflop.
- pulse input, Pour que cette impulsion soit transmise au flipflop il faut que le condensateur est été chargé en maintenant level input à 0 volt alors que les 2 autres entrées sont à -3 volts.
- Level input, Tandis que les 2 autres entrées sont à -3 volts et que celle-ci est à 0 volt le condensateur C1 se charge à travers D11 et R7 puisque la jonction de D11-R8 est plus positive que la jonction D13-D14-R7. Le rôle de D12 est d'empêcher C1 de se charger dans l'autre sens advenant que les entrées conditionning et pulse seraient à 0 volt alors que level serait à -3 volts.
toggle flipflop
Si on installe un circuit DCD sur chacun des transistors du flipflop on peut configurer celui-ci pour fonctionner comme un toggle flipflop.
Si on branche les points d'entrrées E et L à 0 volt et qu'on branche les points d'entrées D et K ensemble en les maintenant à -3 volts. Chaque fois qu'une impulsion positive sera envoyée aux points D,K le flipflop va basculer d'état. C'est ce qu'on appelle un toggle flipflop. Si un train d'impulsions de fréquence Fi est envoyée sur l'entrée D,K on retrouve à la sortie du flipflop un train d'impulsion de fréquence Fo=Fi/2.
Démonstration pratique
Pour m'assurer que j'avais bien compris le fonctionnement du DCD j'ai fait un montage sur carte sans soudure. Ce montage comprend un multivibrateur astable qui fonctionne à 1,5 Hertz. La sortie Q du multivibrateur sert d'impulsion pour faire basculer un premier toggle flipflop dont la sortie Q et utilisée pour faire basculer un deuxième toggle flipflop. De cette façon j'obtiens un compteur binaire à 3 bits. Le compte binaire est envoyé à un décodeur qui sélectionne la sortie LED à allumer en fonction du code binaire. On a donc 8 LEDs de sortie.
Schématiques du montage
Le multivibrateur astable est utilisé comme bit de poids 0 du compteur binaire.
Le circuit suivit comprends 2 toggle flipflops pour les bits de poids 1 et 2. La sortie Q0 du multivibrateur sert d'impulsion pour faire basculer le flipflop de poids 1 et la sortie Q1 de ce flipflop sert d'impulsion pour faire basculer le deuxième flipflop.
Le décodeur sélectionne la LED à allumer en fonction du code binaire du compteur. Le circuit utilise 6 entrées puisque les sorties complémentaires doivent-être aussi utilisées par le décodeur.
En conclusion de ce long article je vous laisse l'opportunité d'étudier le circuit du décodeur pour en comprendre le fonctionnement qui somme toute est simple. Par exemple pour allumer la LED qui correspond au compte 0 la fonction booléenne est ~Q0*~Q1*~Q24.
NOTES:
- Les terminaux vidéos VT52,VT100, etc étaient aussi des produits de Digital.
- Référence au mathématicien Alan Turing.
- Les lois de De Morgan démontrent ~A*~B=~(A+B) et l'inverse ~A+~B=~(A*B) ce qui revient à dire que la combinaison des fonctions NON et OU sont aussi Turing complete.
- le caractère '~' représente la négation logique. Exemple: ~0=1 et ~1=0.Le caractère '*' représente la fonction ET et le caractère '+' la fonction OU.
- Manuel de maintenance du PDP8S dans lequel j'ai pris les schématiques présentées dans cet article.
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.