Processeur TTA. Partie 1

Préface


L'idée de créer mon propre processeur simple, si je peux l'appeler ainsi, j'ai démarré pendant longtemps. Le choix de l'architecture est ambigu, mais étant en partie minimaliste, je voulais mettre en œuvre quelque chose de simple, à la fois puissant et évolutif, TTA était parfait pour cela.
Partie 1.
Partie 2.
En bref, l'idée est que l'unité de contrôle ne disposerait que d'une seule commande de mouvement de données et que les calculs seraient un sous-produit de ces mouvements.

Je vais lui donner vie dans un programme simple de compilation et de simulation de circuits logiques et électriques - Logisim , l'a choisi pour sa simplicité et son accessibilité, en cas de réussite de mise en œuvre, il est prévu de le réécrire sur Verilog .

Lors de la lecture, il est préférable de toucher le projet tout de suite, il se trouve à la fin de l'article.

Bloc de contrôle


L'unité de contrôle est le composant principal. Par souci de simplicité, il a été décidé de choisir 16 entrées et 16 sorties, en conséquence, la commande reçue dans l'unité de contrôle est de 8 bits, dont la première moitié pointe vers l'une des entrées, l'autre vers l'une des sorties. Pour que le bloc récepteur comprenne que les données lui sont parvenues, 1 bit est ajouté à chaque entrée du bloc, il est d'usage d'appeler ces blocs des blocs fonctionnels.

Donc:



Mémoire


Pour que l'unité de commande exécute le programme, il doit être stocké quelque part, la mémoire sera une unité fonctionnelle dont une des sorties sera connectée au bus de l'unité de commande.

Donc:


L'entrée la plus basse est un signal d'horloge, la plus à gauche est les données d'entrée, la plus à droite est les données de sortie, ce sont également des commandes BU et la dernière est celle qui sert d'indicateur, signalant l'arrivée des données. Lors de la réception des données, elles sont écrites sur le compteur, qui indique la commande actuelle, à chaque impulsion d'horloge, le compteur augmente et l'unité de commande transmet les données d'un FU à un autre.

Autres fu simples


Créez des FU simples qui effectueront des actions courantes d'addition et de soustraction.
Le modèle FU ressemble à ceci: à l'entrée, il y a des registres à 8 bits en fonction du nombre d'entrées, leur écriture est effectuée à la réception des données. La sortie peut également contenir les registres dans lesquels la réponse sera stockée, mais cela n'est pas nécessaire pour l'additionneur.

Ainsi, l'additionneur et le soustracteur ressembleront à ceci:



Appareil fini


Connectons la mémoire et l'unité de contrôle, puis nous essaierons de créer une nouvelle unité de contrôle et d'écrire un programme.
Le bouton agira comme un signal d'horloge.

Donc la connexion:


Connectez maintenant l'additionneur et le soustracteur, ainsi que deux constantes d'entrée:


Tout est prêt à écrire un programme, il va effectuer une séquence d'actions banale: ajouter une à la valeur précédente de l'additionneur, puis revenir au début au moyen d'une transition relative (pour cela, un soustracteur a été fait: 3).

Écrivons un programme.

Initialement, tous les registres sont mis à zéro, donc cela n'a aucun sens, la première commande consiste à envoyer une unité à l'une des entrées de l'additionneur (In3 -> O2), à envoyer la sortie de l'additionneur à sa deuxième entrée (In1 -> O1), à envoyer l'adresse mémoire actuelle à l'entrée du soustracteur. (In0 -> O3), en envoyant le changement d'adresse à une autre entrée du soustracteur, il sera soustrait (In4 -> O4), après que le soustracteur passe à l'entrée du pointeur d'adresse, complétant ainsi la transition (In2 -> O0).

Le programme ressemble à ceci:

1. In3 -> O2
2. In1 -> O1
3. In0 -> O3
4. In4 -> O4
5. In2 -> O0

En mémoire:


C'est tout. Ce programme fonctionne correctement. Je prévois de créer plus de FU et de rendre leur connexion avec l'unité de contrôle plus pratique, étant donné que les FU sont pratiquement des appareils ControlFlow. Vous pouvez également connecter plusieurs unités de contrôle ensemble, c'est-à-dire créer un réseau de tels appareils.

Merci pour l'attention!

GitHub

All Articles