Parte 1Parte IIParte IIIParte ivParte vUno de los capítulos del libro "Código" de Charles Petzold está dedicado al diseño de la CPU y al comienzo del capítulo describe un dispositivo que le permite resumir los conjuntos de números almacenados en la memoria. Diseña este circuito en
Logisim . Tome un conjunto de números de ocho dígitos y conéctelo al multiplexor, cambiaremos de un número a otro usando un contador conectado a la entrada del selector del multiplexor, y conectaremos el sumador y la batería a la salida del multiplexor. Usaremos el botón como generador de reloj. Los datos se cargarán en la batería cuando se suelte el botón (esto se hace usando el elemento NOT conectado al botón).

Almacenaremos los números en la RAM.

La RAM se puede representar como un conjunto de registros, a los que se accede mediante un demultiplexor y un multiplexor (DMX y MUX).

Supongamos que un conjunto de números se almacena en la RAM y necesitamos agregar todos los números y guardar el resultado (en una celda libre). Almacenaremos los comandos ("agregar" y "guardar") en una RAM, y los números que se procesan en otra. Este método de almacenamiento es un sello distintivo de
la arquitectura de
Harvard .
El comando "1" escribirá el número del sumador en la batería, el comando "2" escribirá el número del acumulador en la 2da RAM.

Supongamos que en la RAM se almacenan varios conjuntos de números. Es decir necesitamos
- cargar números de la RAM a la batería
- cargar números del sumador en la batería
- guardar números de la batería a la RAM
Usaremos el multiplexor MUX para seleccionar datos de la RAM.
La nueva instrucción "5" cambia el multiplexor MUX a lo largo del borde ascendente del generador de reloj, y escribe en la batería a lo largo del borde descendente (en declive).

A continuación, almacenaremos instrucciones y datos en una RAM. Este método de almacenamiento es un sello distintivo de la
arquitectura von Neumann .
El comando se almacenará en los primeros cuatro dígitos de la celda de memoria de ocho bits, la dirección se almacenará en los segundos cuatro dígitos (
direccionamiento directo ).
Cargaremos la dirección y el comando en registros separados, y luego usaremos el multiplexor para ir a la dirección guardada. Para escribir datos en la RAM, primero cargaremos los datos en el registro temporal de Temp (de lo contrario, las instrucciones se escribirán en la RAM, no en los datos), y luego en el Ass de la batería. La grabación de datos en Temp y Ass se realizará en el borde posterior.
Agregaremos, por ejemplo, los números 2 y 3, que se encuentran en las celdas 8 y 9, y guardaremos el resultado en una celda con la dirección a.

También agregamos la capacidad de hacer saltos incondicionales.
Implementamos un dispositivo en el que solo se ejecutará un comando: el comando de salto incondicional. Para hacer esto, enviaremos los cuatro bits menos significativos (dirección, de hecho) al contador que genera la dirección, y enviaremos el comando almacenado en los bits altos de la celda de memoria al puerto de descarga.
Por ejemplo, para saltar a una celda con la dirección 2, use el comando 82.

Agregue un comando para saltar incondicionalmente al esquema anterior.

En general, en geektimes ya había un
artículo dedicado al diseño de CPU en Logisim.
Todos los esquemas presentados anteriormente se pueden descargar en
un archivo .
Logisim se puede descargar
aquí .
Considere cómo funciona el sumador en el ejemplo de un chip 155im3 (7483). Para los microcircuitos de la serie 155, estamos de acuerdo en que las entradas tienen una resistencia interna que se eleva al máximo (si la pata "cuelga en el aire", entonces hay un "uno" lógico), por lo tanto, cuando la alimentación está conectada al microcircuito, todos los LED conectados a la salida se encenderán .

La imagen muestra el MS 74ls283 (un análogo moderno de 155im3).
Para diseñar un chip de este tipo en Logisim, debe seleccionar "Menú" - "Proyecto" - "Agregar esquema".
Así es como se ve esta MS dentro de un subcircuito. Estos son cuatro
medios sumadores combinados en un sumador completo.
Como batería, utilizaremos el chip 155tm8 (74175), un D-trigger cuádruple.
Los disparadores que forman parte de la MS pasan todo el tiempo hasta que hay 1 en la entrada de sincronización, y no solo a lo largo del borde (disparadores con control estático), sino que en Logisim solo tenemos disparadores dinámicos, pero en este caso no importa ; usaremos lo que es.
Puede leer más sobre los
desencadenantes en Wikipedia.
Ensamblemos el modelo MS 155tm8 de los D-flip-flops.
A continuación, recopilamos un esquema que le permite agregar conjuntos de números.
Por ejemplo, si agrega un conjunto de números 2 (0010), obtenemos 2 (0010), 4 (0100), 6 (0110), etc.
Primero 2 aparece en la salida del sumador (LED rojos), luego 2 se carga en el flip-flop quad D (LED amarillos), y 4 aparece en la salida del sumador, luego 4 se carga en 155tm8, y 6 aparece en la salida del sumador, etc.
Para diseñar un módulo de memoria simple, necesitamos un multiplexor. Diseñamos un multiplexor dual 155kp2.
También necesitamos un mostrador. Diseñaremos el chip 155ie5.
Este es un contador de cuatro dígitos, pero solo necesitamos los dos bits menos significativos.
Almacenaremos números, por ejemplo, 2 (0010), 3 (0011), 5 (0101).
Combina todos los componentes en un circuito. Agregaremos los números que están almacenados en la "memoria"
2 + 3 + 5.
Logisim se puede descargar
aquí .
PD Artículo sobre el libro "Código. Lenguaje secreto de la informática ". está en Habré
aquí .
Z.Y. Artículos traducidos (traducción por
PatientZero ) sobre la arquitectura del procesador
aquí ,
aquí y
aquí