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).
¡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:
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.
Sus instrucciones y arquitectura definen implícitamente el ancho del bus (Instrucción, Datos - ¡8,16,32,64 o incluso 128 bits!)
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.
Cree todos los registros necesarios, registros de funciones especiales SFR, búferes de E/S, pines, señales de habilitación/deshabilitación.
Construya los temporizadores, contadores, circuitos de sincronización.
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.
Construya la ALU (Unidad Lógica Aritmética). ¡Realmente construye una ALU avanzada!
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)
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!
Implemente scratchpad, caché y otras áreas internas de memoria de contabilidad.
¡Construya periféricos de bus como I2C, SPI e interfaces de memoria y cualquier otro periférico útil que se le ocurra!
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
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!
¡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.
Para que un procesador funcione correctamente, necesitará algunos módulos funcionales:
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:
Todavía puede comprar los chips ALU principales 74HC181
y 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 74HC181
s y 5 74HC182
s 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. 74HC194
parece un buen candidato. Enlaza 16 de ellos y obtienes una palanca de cambios de barril de 64 bits.
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 74HC173
s 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 74HC241
s.
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, r1
con 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 6116
s. 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
.
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.
connor lobo
seshu
Dmitri Grigoriev
pedrog
usuario