¿Puedes hacer una CPU con puertas lógicas?

Si sueldo suficientes sumadores binarios, restadores binarios, ¿es posible que funcione como una CPU moderna (muy, muy lenta) (como la que se encuentra en una calculadora gráfica).

¿De qué crees que están hechas las CPU?
Es una pregunta genuina, y no hay necesidad de restarle importancia. Las preguntas cortas y nítidas también necesitan respuestas reales. Se trata de generar ideas, compartir y discutir.
¿ Quieres decir así ?
Algo como el antiguo Intel 4004, 8008 o, si te sientes ambicioso, incluso el 8080 podría ser un buen objetivo al que apuntar. El 4004 usó 2300 transistores, el 8008 usó 3500 transistores y el 8080 usó 6000 transistores, todo según Wikipedia. Esto es lo suficientemente pequeño como para ser alcanzable en la práctica, y aunque no es muy útil según los estándares actuales, la gente logró hacer un trabajo útil con tales CPU. Tampoco debería ser demasiado difícil encontrar documentación sobre estos con un poco de búsqueda.

Respuestas (4)

¡Sí! Uno puede construir un procesador realmente lento con una lógica discreta. O implementarlo en un FPGA.

(¡Asumiendo que esto puede no tener una aplicación inmediata y solo para pensar! Disculpas si es demasiado largo. ¡Solo idea!) Aquí hay algunos pasos básicos que uno puede considerar:

  1. Desarrolle un conjunto de instrucciones primero. Enumere cada instrucción y el número requerido de operandos. Asigne a cada instrucción un número binario único. Su decodificador de instrucciones reconocerá estas instrucciones únicas por el número que asigne.

Si es para una aplicación de calculadora, concéntrese en las operaciones matemáticas. La aritmética básica es fácil. La informática científica necesita un conjunto de instrucciones y una arquitectura más sofisticados.

  1. Sus instrucciones y arquitectura definen implícitamente el ancho del bus (Instrucción, Datos - ¡8,16,32,64 o incluso 128 bits!)

  2. Construya el decodificador de instrucciones. Será un circuito lógico combinacional. Y también admite lógica secuencial para temporización, secuenciación y sincronización. En un nivel muy alto, puede pensar en el decodificador de instrucciones como un decodificador/desmultiplexor. Las señales de este bloque se habilitarán/deshabilitarán y configurarán operaciones posteriores.

  3. Cree todos los registros necesarios, registros de funciones especiales SFR, búferes de E/S, pines, señales de habilitación/deshabilitación.

  4. Construya los temporizadores, contadores, circuitos de sincronización.

  5. Construya circuitos de hardware de conducción periféricos especiales. Con el ejemplo de la calculadora, podría ser la pantalla, el teclado, el control de la batería y el altavoz/zumbador, etc.

  6. Construya la ALU (Unidad Lógica Aritmética). ¡Realmente construye una ALU avanzada!

  7. Construye un buen hardware matemático. ¡También implemente hardware aritmético de punto flotante! (Las funciones especiales, los registros, las funciones trigonométricas se implementan como series de Taylor u otras matemáticas de series personalizadas en algún hardware)

  8. En realidad, vivimos en la era de la ciencia de datos y la IA. Así que implemente unidades de procesamiento de matriz/vector. ¡Construye un procesador vectorial!

  9. Implemente scratchpad, caché y otras áreas internas de memoria de contabilidad.

  10. ¡Construya periféricos de bus como I2C, SPI e interfaces de memoria y cualquier otro periférico útil que se le ocurra!

  11. Cree un contador de programas, obtenga circuitos antes de enviar las instrucciones al decodificador... O construya una canalización de instrucciones y algo de paralelismo de instrucciones

  12. Mire la especificación del lenguaje de programación C. Intente adaptar sus propias instrucciones de CPU para que se compilen desde ese idioma. ¡Puede desarrollar sus propios detalles de implementación y desarrollar su propio compilador!

  13. ¡Lo más importante es tener un RESET implementado dentro del circuito y también hacerlo disponible en un pin externo!

Además de la lógica combinacional (que puede formar sumadores y restadores), necesitará lógica secuencial (que permite que la computadora tenga memoria).

Sí, con suficientes componentes podría construir una CPU.

Tenga en cuenta que las CPU de la calculadora gráfica pueden funcionar a más de 15 MHz. Es poco probable que pueda construir una CPU útil tan rápido a partir de elementos discretos.

TL; DR: ¡ Los procesadores están hechos de puertas lógicas y tienen que serlo!


Si está hablando de chips reales instalados en una placa de circuito, siga leyendo. El procesador PDP-11 en realidad está hecho principalmente de lógica TTL de la serie 7400. Aquí estoy hablando de construir su propia CPU de 64 bots a partir de esos chips lógicos discretos.

planificación de suelos

Para que un procesador funcione correctamente, necesitará algunos módulos funcionales:

  • ALU,
  • Sistema de autobús,
  • Archivo de registro (GPRs y número de ellos),
  • Contador de programa,
  • registro de instrucciones,
  • Unidad decodificadora de instrucciones,
  • Unidad controladora.

No incluyo la memoria ni los periféricos de E/S, ya que suelen ser externos al procesador si se produce en forma de chip. Esos van al bus del sistema y también obedecen al controlador.

También hay algunos elementos que debe decidir antes de comenzar a planificar su procesador:

  • Conjunto de instrucciones (determina cómo se ven el registro de instrucciones, la unidad decodificadora de instrucciones y el controlador)
  • Endianness (si está utilizando palabras de máquina de varios bytes como lo estamos haciendo ahora, utilizando palabras de 64 bits)
  • Ancho de bus

ALU

Todavía puede comprar los chips ALU principales 74HC181y 74HC182, ahora, aunque ahora está construido con tecnología CMOS en lugar de TTL y consume mucha menos energía que los TTL originales. Usando 16 74HC181s y 5 74HC182s puede obtener una ALU básica combinacional de 64 bits. No funcionará tan rápido como su Core i7 de varios gigahercios, pero a unos pocos kilohercios todavía puede hacer su trabajo. También es un núcleo estático, por lo que puede reducir la velocidad a 0 Hz si la energía se está agotando.

Es posible que desee agregar una palanca de cambios de barril usando, bueno, registros de desplazamiento. Una palanca de cambios de barril acelerará mucho cosas como la multiplicación. 74HC194parece un buen candidato. Enlaza 16 de ellos y obtienes una palanca de cambios de barril de 64 bits.

Sistema de autobús

Un bus es un conjunto de cables de señal que tienen múltiples entradas y salidas conectadas. Tendrá que hacer tri-state de las salidas de un bloque funcional al bus o dos dispositivos que emitan señales opuestas quemarán su placa. También es posible que desee bloquear las entradas del bus a los módulos funcionales mediante un registro, de modo que pueda permitir que el bus transfiera otra información mientras el módulo funcional la procesa.

Una cadena de 16 74HC173s parece un buen candidato para un solo registro. Cuentan con salidas de tres estados, lo que facilita mucho la gestión del bus. Coloque un conjunto de estos en los lugares donde necesite una entrada bloqueada.

Los búferes de tres estados no bloqueados se pueden construir utilizando una cadena de 8 74HC241s.

Registro de archivos y puntero de instrucciones

Necesita un archivo de registro para el espacio disponible. La mayoría de los registros no estarán comprometidos con ningún propósito específico, pero al menos uno debe tener un propósito especial: puntero de instrucción.

El puntero de instrucción siempre se incrementa en una longitud de instrucción después de que se carga cada instrucción, siempre apuntando a la próxima instrucción que viene.

También es posible que desee tener un puntero de pila que permita que algunas instrucciones de acceso a la memoria lean y/o escriban memoria y modifiquen este registro en una instrucción atómica.

Tener un registro de palabras de estado de máquina es bueno. Aunque no hay nada que le impida usar instrucciones especiales para transferir datos hacia y desde la palabra de estado de la máquina oculta y un registro de uso general, eso haría que el código del ensamblador fuera un poco incómodo.

Puede ser bueno tener el registro "cero", pero en realidad no tiene sentido, ya que funciona tan bien como mov r0, r1, xor r1, r1con la única excepción de que este último puede establecer el indicador cero en la palabra de estado de la máquina.

El archivo de registro de propósito general se puede construir usando chips SRAM (como lo son prácticamente) como una cadena de 6116s. El contador de programa y los punteros de pila pueden construirse mejor a partir de contadores ascendentes/descendentes como 74HC193(si tiene una longitud de instrucción fija y/o una longitud de empuje) o una ALU secundaria. La palabra de estado de la máquina es más complicada de implementar, ya que sirve de puente entre la ALU y la unidad de control, y generalmente se construye a partir de flip-flops D individuales como 74HC171.

registro de instrucciones, decodificador y unidad de control

Este no es un registro accesible desde el programa. En cambio, es el lugar donde trabajan el decodificador de instrucciones y la unidad de control. El control puede ser una gran máquina de estado programada con transferencias de estado en forma de ROM (microcódigo, utilizado principalmente en arquitecturas CISC) o un montón de cables que se ramifican de demultiplexores a demultiplexores (controlador de cableado duro, utilizado principalmente en arquitecturas RISC).

La respuesta es sí. Este es un ejemplo de cómo se hacía en los primeros días de la informática.

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

La computadora de vuelo Apollo fue la primera computadora en utilizar circuitos integrados (CI). Mientras que la versión Block I usó 4100 IC, cada uno con una única puerta NOR de tres entradas, la última versión Block II (usada en los vuelos tripulados) usó 2800 IC, cada uno con puertas NOR duales de tres entradas.[1]:34 Los circuitos integrados, de Fairchild Semiconductor, se implementaron utilizando lógica de resistencia-transistor (RTL) en un paquete plano. Se conectaron a través de una envoltura de alambre y luego el cableado se incrustó en plástico epoxi fundido.

Esto no incluye la memoria:

La computadora tenía 2048 palabras de memoria de núcleo magnético borrable y 36 kilopalabras de memoria de cuerda central de solo lectura.

La memoria también se puede implementar utilizando puertas lógicas, pero requiere muchas de ellas.

Es posible que le interese leer sobre los primeros sistemas informáticos en los archivos de historial. Hubo una generación (o tal vez dos) que se hicieron usando puertas simples.