31 votos

¿Cuál es el proceso de pasar del código de la máquina al control eléctrico de los transistores individuales?

Para alguien que escribe software pero no tiene formación en ingeniería informática, las docenas de capas de abstracción siempre me han desconcertado.

Sé que todo el código fuente en su nivel más fundamental se descompone en 1s y 0s. También sé que todas las CPU en su nivel más fundamental se descomponen en miles de millones de transistores, y luego en puertas lógicas y ALU.

Pero aquí es donde se detiene mi brecha de conocimiento:

1s y 0s -> ???? -> Existen transistores, puertas lógicas y ALUs

Todas las respuestas holísticas que llenen ese vacío serán apreciadas, especialmente si puedes describir el proceso de decidir qué transistores/unidades específicas se eligen para hacer qué trabajo.

P.D. La respuesta no debe ser una disertación, ya que soy consciente de que esto puede ser eterno. Sólo una explicación/resumen sucinto con palabras clave.

25voto

GEOCHET Puntos 13787

Ah, te falta el concepto de MÁQUINA DE ESTADO. Ahí es donde podemos "escribir código" hecho de chips de hardware TTL: selectores de datos, contadores de 4 bits, bandas de flipflops paralelos. (Pero todas esas son las partes complicadas, mientras que la idea detrás de las "máquinas de estado" es bastante simple).

"Máquina de estado" también se llama comúnmente "microcódigo". También se le llama "bit-slice" o "microsequencer". También se le llama "decodificador de instrucciones" dentro del chip del procesador. (Por lo tanto, es la "persona diminuta" dentro del chip de la CPU que lee los opcodes y realmente realiza las acciones enumeradas).

En todas las explicaciones introductorias/populares de los ordenadores, nos enseñan todo sobre las puertas lógicas y sobre los procesadores integrados completos, pero nunca sobre la capa de abstracción que se encuentra invisiblemente entre ambos. No intentan explicar el hombrecillo que hay ahí dentro.

La máquina de estado más sencilla es un chip ROM con sus líneas de dirección conectadas a un contador digital de muchos bits. Entonces, los bytes de salida de la ROM se tratan como cables individuales o líneas de control. (Es como un temporizador de lavadora motorizado, que pasa entre N ajustes diferentes en sucesión). Como la dirección binaria cuenta hacia arriba, los ocho hilos de la palabra de salida (o dieciséis, 24, 32, etc.,) pueden producir cualquier patrón temporizado que queramos. Sólo hay que preescribir el patrón deseado en la ROM.

Esto es muy parecido a una caja de música mecánica. O un controlador de los patrones de las bombillas de los carteles publicitarios de los años 50: un montón de discos-cámara giratorios con interruptores de hoja en los bordes. Tallando algunas colinas y valles en el borde de los discos de baquelita, se pueden producir los patrones de luz temporizados que se deseen.

Pero la verdadera potencia de la idea sólo surgirá si conectamos nuestro contador binario a tres o cuatro de las líneas de entrada de direcciones de la ROM. Entonces usamos el resto de las líneas de dirección de la ROM como entradas. Así, por ejemplo, si la ROM tiene 8 líneas de dirección, podemos conectar nuestro contador de 3 bits a tres de las líneas. De esta manera el contador creará una secuencia escalonada de ocho patrones de bits en la salida de la ROM. Y, la ROM entonces almacena treinta y dos versiones diferentes de estos, seleccionados por las cinco líneas de addr restantes.

UN MICROPROCESADOR 6502, QUE SE ENCUENTRA EN EL APPLE-II Y OTROS
enter image description here

A continuación, utiliza las cinco entradas de dirección de la ROM ...¡PARA SELECCIONAR UN CÓDIGO OPERATIVO EN EL LENGUAJE DE LA MÁQUINA! Los diferentes bits colocados en esas cinco líneas de dirección extra activarán las diferentes secuencias de 8 pulsos almacenadas en la ROM. Cada una de las 32 instrucciones opcode posibles estará compuesta por 8 pasos (o menos). Por último, utilice todos los bits de salida de la ROM como líneas de control.

Esta línea de salida aquí, cuando es alta, dirige dos registros juntos en el sumador, para sumar dos números. Este otro es un pulso que incrementa el registro de dirección principal de la CPU, para recorrer el código de máquina almacenado en la RAM. Este otro cable enclava la salida del sumador, para que pueda ser volcado en uno de los registros de la CPU durante la instrucción ADD. Otro volcará algún registro en el registro de dirección principal, para realizar la instrucción JMP.

En otras palabras, la propia CPU está hecha de software. Pero es un patrón de bits almacenado permanentemente en unas pocas palabras de la memoria ROM. Si se cambian los patrones de bits, se altera lo que hacen los opcodes. La máquina de estado es donde el nivel más profundo del software está físicamente hecho de hardware. Piensa en la máquina de estado como el "pequeño hombre" dentro del ordenador que lee cada instrucción de código máquina y envía pulsos a las líneas de control que manipulan los registros y realizan la pequeña secuencia de pasos de cada opcode. (Y, la ROM del microsecuenciador es el simple cerebro del hombrecito).

Una animación muy chula es la del chip Visual 6502, en javascript para navegadores (el 6502 es la cpu utilizada en los antiguos ordenadores APPLE-II.) Imagen de muestra arriba.

http://www.visual6502.org/JSSim/

En realidad, puede ejecutar un programa de código de máquina, mientras usted observa cómo cambian de color todos los conductores internos y las puertas lógicas dentro del CI. El chip muestra todos los registros, contadores de memoria, sumador, desplazador, etc. Pero también tiene un enorme parche de tablero de ajedrez de aspecto aleatorio a lo largo del borde superior. Ese es el corte de bits, la ROM, el patrón permanente para sus opcodes, todo creado por la máquina de estado en funcionamiento.


Steampunk: si vas a construir un motor pensante de Babbage, querrás que tu cilindro giratorio de la caja de música gire a unas 20.000RPM, y los pequeños tacos del cilindro deberían estar hechos de una aleación de tungsteno-iridio, ya que ese cilindro contiene los opcodes, en patrones de pequeñas protuberancias, y su inmensa tasa de rotación determina la velocidad de la CPU. (Tal vez se utilicen pequeños puntos de plata en un cilindro de vidrio, y algunas de esas nuevas fotocélulas de selenio, en lugar de pequeños interruptores de hoja para leer el patrón del cilindro. Computadora óptica Steam-punk!!!!!) Durante la Segunda Guerra Mundial, los alemanes tenían televisores mecánicos de 15KHz con un espejo octogonal de cuarzo giratorio que giraba a unas 100.000RPM. Usa uno de esos, y valora la potencia de tu ordenador en términos de caballos de fuerza de la fuente de alimentación del compresor de aire.

O esto: los ordenadores son el software de la aplicación, que está hecho de lenguaje de alto nivel, que está hecho de código de intérprete, que está hecho de ensamblador, que está hecho de opcodes de código de máquina... que están hechos de secuencias de hardware de estado de máquina, que están hechos de registros y selectores de datos y contadores y flipflops, que están todos hechos de puertas lógicas, que están hechos de transistores individuales, que están hechos de silicio impuro, que está hecho de átomos de Si con muy pocos de fósforo, boro. QUE están hechos de núcleos y electrones, que están hechos de protones y neutrones, que están hechos de quarks que cabalgan sobre el mar de nivel de Fermi en ebullición.

O esto: en el centro de su ordenador hay una perilla mecánica de lavandería. Pero gira a más de un ritmo de GHz.

4voto

JW. Puntos 145

Los transistores se utilizan para construir puertas lógicas. Las puertas se utilizan para construir circuitos lógicos y memorias. Una CPU moderna se compone, a grandes rasgos, de dos partes: (1) una ruta de datos que hace cálculos y carga y almacena valores en la memoria (también hecha de transistores), y (2) circuitos de control que configuran esa ruta de datos en función de las instrucciones de la máquina (que son los 1s y 0s a los que alude el operador en la pregunta). Eso llena el vacío de conocimiento sin requerir un curso completo de arquitectura de ordenadores.

4voto

Rolando S. Puntos 41

Sí, el código máquina es 0 y 1. El paso de aquí a las señales eléctricas es pequeño; cada 0 puede ser 0 voltios y 1 puede ser 1,8 voltios (¡o lo contrario!) Son tan similares que no se necesita ninguna "traducción".

En una arquitectura de 32 bits, el bus de instrucciones tiene 32 bits de ancho; es decir, hay 32 líneas individuales, cada una con uno de estos niveles de tensión. La magia viene del reloj. Cada vez que el reloj invierte su línea, se activan circuitos básicos como los latches ( https://en.wikipedia.org/wiki/Flip-flop_(electrónica) ) para actuar sobre los niveles de señal presentes en el bus. Los transistores tardarán cierto tiempo en actuar y la señal necesita tiempo para propagarse, en la escala de un nanosegundo. El reloj debe funcionar lo suficientemente lento como para que todas las señales se estabilicen en su nuevo valor antes de volver a invertir.

Los transistores se utilizan para construir elementos lógicos como las puertas NOR ( https://en.wikipedia.org/wiki/NOR_gate ), sumadores ( https://en.wikipedia.org/wiki/Adder_(electrónica) ), etc., que forman una secuencia de búsqueda y ejecución en la CPU https://en.wikipedia.org/wiki/Instruction_cycle

A partir de ahí, la abstracción continúa a través de las complejidades de los modernos circuitos integrados digitales hacia el software. Es un logro asombroso.

4voto

jfmessier Puntos 223

Aquí hay algo que las otras respuestas no han tocado todavía... también hay algo llamado síntesis que es una manera de codificar los transistores reales y sus disposiciones físicas. Se escribe el diseño en un Lenguaje de descripción de hardware (normalmente VHDL o Verilog). A continuación, se configura un Matriz de puertas programables de campo (FPGA) o se construye un hardware real donde se mapea el código en transistores, conocido como Circuito integrado de aplicación específica (ASIC). Así es como se crean las propias CPU y GPU.

Esto no es exactamente lo que has preguntado, pero podría interesarte.

(Nota, para los pedantes, hay otras formas de configurar el silicio, Por ejemplo captura esquemática, pero eso no responde a la pregunta de "código a transistores".

4voto

Chad Johnson Puntos 248

El código fuente se traduce a código máquina mediante un compilador o un ensamblador (o alguna combinación)

este código de máquina es un patrón diferente de unos y ceros

En la CPU, el decodificador de instrucción transforma el código de la máquina en acciones realizadas por los registros de la ALU, la entrada y salida, etc. El decodificador de instrucción es típicamente un montón de puertas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X