Alt-F4 n°24 - Créer des mémoires  19-02-2021

Écrit par pocarski, édité par stringweasel, Nanogamer7, Conor_, Therenas, Firerazer,
traduit par bev, Firerazer

Sommaire

Cette semaine, nous continuons l’article de pocarski de la semaine dernière qui n’est rien de moins que la possibilité de créer un ordinateur dans Factorio en utilisant seulement des convoyeurs. Cette fois, nous tentons de vous montrer comment se rappeler de choses. Jetons-y un oeil.

L’informatique par convoyeurs, Deuxième partie : N’oubliez jamais pocarski

Cette semaine, je vais poursuivre mon article à propos de l’informatique basée sur les convoyeurs. Je vous conseille vivement de revenir au numéro précédent pour vous rafraîchir la mémoire.

Une petite note avant de commencer : cette semaine, BlueCheetah#7844, utilisateur du Discord, a apporté d’importantes améliorations à la configuration de mon circuit d’additionneur : il est maintenant légèrement plus long, mais large de quatre tuiles. Voici une image de ce circuit, effectuant les mêmes calculs que la semaine dernière :

Un meilleur additionneur

La dernière fois, nous avons étudié la possibilité d’additionner des nombres en utilisant uniquement des convoyeurs et des répartiteurs. Cette semaine, nous allons nous pencher sur un élément tout aussi important en matière d’informatique : la mémoire. La possibilité d’ajouter des nombres est une opération simple, mais en fin de compte inutile s’il n’y a aucun moyen de stocker les instructions ou le résultat. Dans un processeur, les résultats de l’addition sont mémorisés puis, après quelques manipulations, renvoyés à ces mêmes additionneurs. Cela permet d’effectuer pratiquement toutes les opérations mathématiques imaginables.

Comme la semaine dernière, tout le monde est invité à faire ses propres expériences grâce au livre de plans contenant tous les circuits de cet article.

Le multiplexeur

Pour commencer, nous allons introduire un nouveau circuit : le multiplexeur. Un multiplexeur a deux entrées de données A et B, une entrée pointeur P et une sortie O. Voici la table de vérité pour ce multiplexeur (“-“ signifie que l’entrée n’a pas d’influence sur la sortie) :

A B P O
0 - 0 0
1 - 0 1
- 0 1 0
- 1 1 1

L’entrée P choisit en fait les entrées de données qui doivent être transmises à la sortie. Si P est à 0, notre sortie sera égale à la valeur de A, et s’il est à 1, notre sortie sera la valeur de B. Maintenant, pour construire ça en pratique, nous pouvons utiliser des portes ET. Elles nous permettent d’ignorer délibérément une entrée. Nous pouvons choisir de faire passer une entrée ou non en activant ou en désactivant simplement l’autre entrée de la porte. En gardant cela à l’esprit, nous pouvons reformuler le multiplexeur sous la forme (A ET NON P) OU (B ET P). Ce sont tous des éléments que nous connaissons déjà, ce qui signifie qu’un multiplexeur peut être construit de cette manière :

Il s’agit simplement d’un circuit Duplicateur-NON et de deux portes ET. Nous avons également besoin de quelques échangeurs d’objets, pour faire correspondre tous les types d’objets en entrée et en sortie.

Cellule mémoire de base

Les cellules mémoire semblent très compliquées à première vue. Un circuit qui se souvient d’une entrée ? Il faudrait sûrement une sorte de stockage, mais comment faire en sorte que la sortie reste disponible sans que le stockage ne s’épuise ? C’est là qu’intervient notre nouvel ami, le multiplexeur. Que se passe-t-il si nous ramenons la sortie au début et l’introduisons dans sa propre entrée A ? La réponse est la suivante : C’est magique !

Comme vous pouvez le voir, grâce à ce seul changement, nous avons transformé notre multiplexeur en une cellule mémoire très basique. L’ancienne entrée B est maintenant la seule entrée de données de la cellule mémoire, et l’ancienne entrée P est maintenant l’entrée “écriture”. Mais comme ce circuit n’a plus de sortie maintenant que nous l’avons bouclé, nous avons corrigé cela en ajoutant un duplicateur (et en combinant également un échangeur avec un ET, comme la dernière fois) :

Ce circuit que nous venons de faire s’appelle un Verrou D. Il a deux entrées : D pour “Donnée” et E pour “Écrire”. Contrairement aux calculateurs électroniques, nous devons laisser E allumé pendant un certain temps, car les objets doivent revenir au début pour que la sortie devienne stable. Cependant, un verrou D a un problème assez important, à savoir que, tant que l’entrée E est allumée, la sortie recopie systématiquement l’entrée D, transformant effectivement le tout en un flux fantaisiste. Nous devons garantir la stabilité de la sortie, et pour cela, nous avons besoin de quelque chose de plus que le simple verrou D.

Cellule mémoire maître-esclave

De nombreux problèmes peuvent être résolus en construisant simplement une autre copie, et celui du verrou D ne fait pas exception Nous dupliquons et inversons l’entrée E, et nous l’introduisons dans l’entrée d’écriture d’un autre verrou D. Ensuite, nous faisons passer la sortie du premier verrou dans l’entrée de données du second. L’inversion se fait ici en introduisant un troisième type d’objet, qui est remplacé par l’entrée d’écriture. Tout comme la semaine dernière, les deux côtés du convoyeur viennent à notre secours, et nous n’avons en fait pas besoin de construire une autre copie complète, nous pouvons juste faire des boucles intelligentes :

Ce système de double verrou crée une sorte d’escalier pour notre valeur de données, où elle est admise sur la première marche lorsque l’entrée E s’allume, et autorisée à continuer seulement après qu’elle se soit éteinte. Cela protège la sortie contre tout changement jusqu’à ce que nous ayons terminé un cycle. Maintenant, nous pouvons tout réorganiser pour en faire un module compact :

Il est intéressant de noter qu’il a exactement les mêmes dimensions que le module d’additionneur de la semaine dernière (ou qu’il avait, jusqu’à l’intervention de BlueCheetah). Quelle coïncidence agréable !

Remarque finale

Maintenant que nous avons un additionneur et de la mémoire, nous sommes en mesure de construire un processeur. Bien sûr, nous avons besoin d’une horloge pour tout faire fonctionner, mais c’est aussi simple qu’une boucle de demi-convoyeurs pleins avec un duplicateur. L’unité arithmétique et logique (UAL) n’est rien d’autre qu’un groupe d’additionneurs qui se repassent les données en boucle à travers un registre, qui n’est lui-même qu’un groupe de cellules mémoire. Mes connaissances en informatique ne sont pas assez étendues pour tout expliquer complètement, alors je vous invite à suivre letao12 sur YouTube, car c’est sa série qui m’a inspiré à tester cette logique à base de convoyeurs.

Contribuer

Comme toujours, nous attendons vos contributions pour les Alt-F4, que cela soit par la soumission d’un article ou en aidant pour les traductions. Si vous avez quelque chose d’intéressant en tête que vous souhaitez partager avec la communauté, vous êtes au bon endroit. Si vous n’êtes pas sûr, nous serons heureux de vous aider en discutant structure, contenu et idées. Donc si vous voulez vous impliquer dans les Alt-F4, rejoignez-le Discord pour ne rien rater !