Procesador TTA. Parte 2

Prefacio


Esta es la segunda parte del intento de crear un procesador TTA en Logisim. En el proceso de creación, había una necesidad de memoria adicional en la que pudieran almacenarse algunos valores intermedios, y para esta memoria había una necesidad de cambiar el dispositivo de control.

Parte 1
Parte 2

Memoria adicional


Dado que los comandos y las constantes son difíciles de almacenar en la memoria, será difícil crear una memoria totalmente direccionable, por lo que necesita algo más simple, una pila o una cola es buena para esto.

La cola no parece muy conveniente, y el lenguaje Forth fue inventado para la pila , cuyo compilador me gustaría escribir. Implementamos la pila como un dispositivo funcional:


Parece confuso, pero de hecho, este dispositivo realiza funciones simples: el contador apunta a la siguiente celda, cuando llegan los datos, se escriben en la celda a la que apunta el contador y aumenta, cuando se toman datos, se dan desde la celda anterior a la indicado por el contador y el contador disminuye. Entonces surge otro problema, cómo sabes qué datos se tomaron de la pila, necesitas un indicador para esto, entonces el dispositivo de control (UU) se verá así:


Para facilitar la conexión, las salidas se ubicarán a la izquierda y las entradas a la derecha, luego la unidad de control y otros dispositivos funcionales (pila, sumador, AND, OR, registro, etc.):


Ensamblemos un circuito simple con memoria de comandos, dos pilas, dos registros, un sumador, un negativo, Y, O y algo constante (que sea 5):


Queda por crear memoria para las constantes y puede escribir el compilador Forth, pero por ahora intentemos escribir algunas palabras directamente en la memoria.

Dup


La palabra dup hace algo simple: duplica los datos de la celda superior de la pila de nuevo en la pila. Primero necesita cargar, por ejemplo, nuestra constante (in6 -> o1) en la pila, ahora tenemos datos en la primera celda de la pila, pero cuando toma los datos, desaparece de la pila, ¿cómo estar? Hay registros para esto, cargue la celda de la pila en el registro y guárdela allí, después de lo cual la cargamos en la pila dos veces, duplicando así, el pseudocódigo se ve así:

1. in6 -> o1 // Cargando la constante en la pila
2. in1 -> o3 // Cargue una celda de la pila en el registro
3. in3 -> o1
4. in3 -> o1 // Cargue dos veces el contenido del registro en la pila

Eso es todo, en la memoria se ve así:


Y después de la ejecución, la pila se ve así:


Como era de esperar, nuestras dos constantes. Eso es todo, de manera similar, puedes soltar, intercambiar, pudrir, etc.

Gracias por su atención, ¡espero que no haya sido aburrido!

Enlace Github: GitHub

All Articles