Processeur TTA. Partie 2

Préface


Il s'agit de la deuxième partie d'une tentative de création d'un processeur TTA dans Logisim. Dans le processus de création, il y avait un besoin de mémoire supplémentaire dans laquelle certaines valeurs intermédiaires pourraient être stockées, et pour cette mémoire, il fallait changer le dispositif de commande.

Partie 1
Partie 2

Mémoire supplémentaire


Comme les commandes et les constantes sont difficiles à stocker en mémoire, il sera difficile de créer une mémoire entièrement adressable, vous avez donc besoin de quelque chose de plus simple, une pile ou une file d'attente est bonne pour cela.

La file d'attente ne semble pas très pratique, et le langage Forth a été inventé pour la pile , dont je voudrais écrire le compilateur. Nous implémentons la pile comme un appareil fonctionnel:


Cela semble déroutant, mais en fait, cet appareil remplit des fonctions simples: le compteur pointe vers la cellule suivante, lorsque les données arrivent, elles sont écrites dans la cellule vers laquelle le compteur pointe et elle augmente; lorsque les données sont prises, elles sont fournies depuis la cellule précédente à celle indiqué par le compteur et le compteur diminue. Ici un autre problème se pose, comment savez-vous quelles données ont été prises de la pile, vous avez besoin d'un indicateur pour cela, alors le périphérique de contrôle (UU) ressemblera à ceci:


Pour faciliter la connexion, les sorties seront situées à gauche, et les entrées à droite, puis l'unité de contrôle et les autres appareils fonctionnels (pile, additionneur, ET, OU, registre, etc.):


Assemblons un circuit simple avec mémoire de commandes, deux piles, deux registres, un additionneur, un négateur, Et, Ou et une constante (que ce soit 5):


Il reste à créer de la mémoire pour les constantes et vous pouvez écrire le compilateur Forth, mais pour l'instant essayons d'en écrire quelques mots directement en mémoire.

Dup


Le mot dup fait une chose simple: duplique les données de la cellule supérieure de la pile sur la pile. Vous devez d'abord charger, par exemple, notre constante (in6 -> o1) sur la pile, maintenant nous avons des données dans la première cellule de la pile, mais lorsque vous prenez les données, elles disparaissent en quelque sorte de la pile, que dois-je faire? Il existe des registres pour cela, chargez la cellule de la pile dans le registre et enregistrez-la, après quoi nous la chargeons deux fois dans la pile, la dupliquant ainsi, le pseudocode ressemble à ceci:

1. in6 -> o1 // Chargement de la constante dans la pile
2. in1 -> o3 // Charger une cellule de la pile dans le registre
3. in3 -> o1
4. in3 -> o1 // Charger deux fois le contenu du registre sur la pile

C'est tout, en mémoire ça ressemble à ça:


Et après l'exécution, la pile ressemble à ceci:


Comme prévu, nos deux constantes. C'est tout, d'une manière similaire, vous pouvez faire tomber, échanger, pourrir, etc.

Merci de votre attention, j'espère que ce n'était pas ennuyeux!

Lien Github: GitHub

All Articles