¿Qué? ¿Cómo ejecuta la CPU el código? ¡Demasiado difícil para la gente! ! !

Recientemente leí un artículo de este tipo y analicé el reconocimiento y la lectura del código por parte de la CPU desde la perspectiva del hardware subyacente. El contenido es maravilloso. Después de leerlo, siento que muchas cosas que aprendí se conectan instantáneamente y se comparten con los simios.

 

Para comenzar este tema primero, hablemos de semiconductores. ¿Qué es un semiconductor?

 

Un semiconductor es en realidad algo entre un conductor y un aislante, como un diodo.

La corriente puede fluir desde el terminal A al terminal C, pero no al revés. Puede entenderlo como algo que evita que la corriente fluya hacia atrás.

Cuando el terminal C es de 10 V y el terminal A es de 0 V, el diodo puede considerarse desconectado.

Cuando el terminal C es 0 V y el terminal A es 10 V, el diodo se puede considerar como un cable, y el resultado es que la corriente en el terminal A fluye continuamente al terminal C, lo que da como resultado que el resultado final sea A terminal = C terminal = 10 V

Espera, ¿no es un buen terminal C 0V, un terminal A 10V? ¿Entonces resulta que final A = final C = 10V?

Puede entender esto como el estado inicial, y cuando finalmente se estabilice, se convertirá en A terminal = C terminal = 10V.

Lo siento por los zapatos de los niños de las artes liberales, realmente no sé cómo preguntarle al profesor de física del instituto. De todos modos, si no puedes entenderlo, recuerda que en este caso equivale a un cable.

Usando semiconductores, podemos hacer algunos circuitos interesantes, como [puerta AND]

En este momento, siempre que uno de los terminales A y B sea 0 V, el terminal Y se conectará directamente al lugar de 0 V, lo que hará que el terminal Y se convierta en 0 V. Solo cuando ambos extremos de AB son 10 V, no fluye corriente entre Y y AB, y el extremo Y también es 10 V.

Llamamos a este dispositivo una "puerta Y", y contamos los lugares con voltaje como 1 y los lugares con voltaje 0 como 0. En cuanto al voltaje específico de varios voltios, eso no es importante.

Es decir, AB debe ingresar 1 al mismo tiempo, la salida Y es 1; AB tiene un 0, la salida Y es 0.

También hay [puertas O] [puertas NO] y [puertas O exclusivas], que son similares a esta. La puerta O significa que una de las entradas es 1 y la salida es 1, y la entrada de 00 es 0.

La puerta no es fácil de entender, es decir, entrada 1 y salida 0, entrada 0 y salida 1.

La puerta XOR es un poco más difícil de entender, pero es lo mismo: ingrese 01 o 10 a la salida 1, e ingrese 00 u 11 a la salida 0. (Es decir, si ingresa dos valores idénticos, generará 0, y si ingresa dos valores diferentes, generará 1).

Este tipo de puertas se pueden hacer con diodos y no voy a demostrar cómo se hacen. Aquellos que estén interesados ​​pueden probarlos por su cuenta. También es problemático dibujar diodos cada vez, por lo que simplificamos el circuito de la puerta en los siguientes símbolos.

Entonces podemos usar el circuito de puerta para hacer la CPU. Por supuesto, es bastante difícil hacer una CPU, comencemos con el simple: sumador.

Sumador, como su nombre indica, es un circuito que se usa para calcular la suma. El más simple es el siguiente.

AB solo puede ingresar 0 o 1, lo que significa que este sumador puede contar 0 + 0, 1 + 0 o 1 + 1.

La salida S es el resultado y C representa si hay un acarreo, el binario 1 + 1 = 10. En este momento C = 1, S = 0

Después de gastar mucho esfuerzo, ¿es una sensación de logro contar como 1 + 1?

Vayamos más allá y calculemos 1 + 2 (binario 01 + 10), y luego encontramos un nuevo problema: el segundo bit debe lidiar con la posibilidad de transportar el primer bit, por lo que tenemos que diseñar un sumador completo.

 

Es demasiado complicado dibujar así cada vez, simplifiquémoslo

Es decir, hay 3 entradas y 2 salidas, ingrese respectivamente los dos números a sumar y el acarreo del anterior, y luego ingrese el resultado y si se lleva a cabo.

Luego ensartamos este sumador completo

 

Tenemos un sumador de 4 dígitos que puede calcular la suma de 4 dígitos, que es 15 + 15. Ha alcanzado el nivel de la clase media de jardín de infantes. ¿Es particularmente poderoso?

Después de terminar el sumador, hagamos un multiplicador. Por supuesto, multiplicar cualquier número decimal es un poco complicado. Hagamos un multiplicador por 2.

Multiplicar por 2 es muy simple: para un número binario, agregamos un 0 al final para multiplicarlo por 2.

como:

5 = 101 (2)

10 = 1010 (2)

Así que solo tenemos que mover la entrada un bit hacia adelante y agregar un cero al bit más bajo, y se multiplicará por 2. No dibujaré el diagrama de circuito lógico específico, siempre que sepa lo que está sucediendo.

¿Qué tal multiplicar por 3? Simple, primero cambie una vez (multiplique por 2) y agregue nuevamente. ¿Qué tal multiplicar por 5? Muévalo dos veces (multiplique por 4) y agréguelo nuevamente.

Por lo tanto, una CPU simple no tiene multiplicación, y la multiplicación se realiza mediante software mediante una combinación de desplazamiento y suma. Esto está un poco lejos, continuemos con la CPU.

Ahora suponga que tiene un sumador de 8 bits y un módulo que se desplaza 1 bit. ¡Puedes olvidarlo si lo unes!

(A + B) X2

Emocionante, casi ha alcanzado el nivel de estudiantes de escuela cuasi primaria.

¿Y si quiero contar?

AX2 + B

Simple, solo necesita cambiar el cableado del módulo sumador y el módulo de desplazamiento, y cambiar la entrada A para pasar primero el módulo de desplazamiento y luego ingresar al sumador.

¿Qué? ? ? ? ¿De qué estás hablando? ? ? ¿Quiere decir que tengo que volver a cablear después de cambiar el programa?

¿Entonces, qué piensas? La programación es simplemente conectar los cables de un lado a otro.

¿Sorpresa, no sorpresa? ¿Accidente no es accidente?

Las computadoras anteriores estaban programadas de esta manera y tardaron unos minutos en conectarse durante días. Y conectarse es un trabajo meticuloso y paciente, por lo que las programadoras en ese momento eran todas chicas hermosas, del tipo de uniforme, como en la imagen. ¿Hay un sentimiento de parto prematuro?

Aunque es un placer estar en compañía de mujeres hermosas, también es un trabajo agotador conectar. Así que necesitamos mejorarlo para que la CPU pueda sumar o multiplicar 2 según las instrucciones.

Aquí se introducen dos módulos más, uno se llama flip-flop, o FF para abreviar, que parece llamarse flip-flop en chino.

 

La función de este módulo es almacenar datos de 1 bit. Por ejemplo, en el RS anterior tipo FF, R es Reset y la entrada 1 se borra. S es Set, ingrese 1 para guardar 1. Cuando el RS ingresa 0, el contenido guardado justo ahora siempre saldrá.

Usamos FF para almacenar los datos intermedios del cálculo (también puede ser un estado intermedio u otra cosa). 1 bit definitivamente no es suficiente, pero podemos conectarnos en paralelo y usar 4 u 8 para almacenar 4 u 8 bits de datos. A este tipo de registro lo llamamos (Registro).

El otro se llama MUX y el chino se llama selector.

Esto es simple, sel ingresa 0 y genera los datos de i0, y genera lo que sea i0, y 01 está bien. De manera similar, si sel ingresa 1, entonces emite datos i1. Por supuesto, el selector puede ser muy largo, como este de cuatro entradas y una salida.

 

No daré más detalles sobre los principios específicos. De hecho, solo mira el diagrama lógico y descúbrelo. Solo debes saber que existe esta cosa.

Con esto, podemos diseñar un pin de activación para el sumador y el módulo de multiplicar 2 (desplazamiento).

Ingrese 1 del pin de activación para activar el módulo e ingrese 0 para desactivarlo. De esta forma podemos controlar si los datos fluyen al sumador o al módulo de desplazamiento.

Así que primero diseñamos 8 pines de entrada, 4 instrucciones y 4 datos para la CPU.

Diseñamos 3 instrucciones más:

0100, los datos se leen en el registro

0001, agregue los datos al registro y guarde el resultado en el registro

0010, los datos del registro se desplazan un bit a la izquierda (multiplicar por 2)

¿Por qué está diseñado así? Ahora mismo, podemos diseñar un pin de activación para cada módulo. Entonces podemos usar el segundo, tercer y cuarto pines de la entrada de comando para conectar los pines de activación del registro, sumador y cambio respectivamente.

Entonces, cuando ingresamos el comando 0100, la entrada del registro se activa, y los otros módulos no están activados, y los datos se almacenan en el registro. De la misma forma, si ingresamos la instrucción 0001, el sumador comienza a funcionar, y podemos realizar la operación de suma.

Aquí hay una respuesta simple a la primera pequeña pregunta de esta pregunta:

Entonces, ¿por qué la CPU puede entender estos números de dos niveles?

Por qué la CPU puede entender, porque la línea dentro de la CPU está conectada así. Ingresa un número binario, activa varios módulos especificados en la CPU como un interruptor y cambia la forma en que estos módulos se combinan, y finalmente obtiene el resultado.

Algunas preguntas que se pueden hacer

P: Puede haber miles de módulos pequeños en la CPU. ¿Puede una instrucción de 32 bits / 64 bits controlar tantos?

R: Solo hay 3 módulos en la CPU de nuestro ejemplo, por lo que están conectados directamente. Habrá un decodificador en la CPU real, que traduce las instrucciones en la forma requerida.

P: Para su CPU simple, ¿qué pasará si ingreso el comando 0011?

R: Por supuesto, el sumador y el cambiador se activan al mismo tiempo, lo que genera consecuencias impredecibles. En pocas palabras, debido a que usó una instrucción no diseñada, usted es responsable de las consecuencias. (La alta probabilidad de hacer esto en una CPU real es un bloqueo. Por supuesto, habrá varios diseños de protección y la muerte matará el proceso actual)

Los amigos atentos pueden encontrar un problema: las instrucciones que diseñó

【0001, agregar datos para registrar, guardar el resultado para registrar】

¿No puedes hacer este paso? Después de todo, existe un proceso de reescritura, que es realmente el caso. La CPU simple que diseñamos toma casi tres pasos para ejecutar una instrucción, leer instrucciones, ejecutar instrucciones y escribir registros.

El diseño clásico de RISC se divide en 5 pasos: instrucción de lectura (IF), instrucción de decodificación (ID), instrucción de ejecución (EX), operación de memoria (MEM), registro de escritura (WB). Algunas instrucciones de nuestras CPU x86 habituales pueden dividirse en casi 20 pasos.

Puedes entender que existe tal interruptor. Cuando hacemos clic en él, la CPU dará un paso. Cuanto más rápido lo presione, más rápido irá la CPU. ¿Eh? Escuché que tienes una idea Vaya, esta idea tuya es muy peligrosa, y mucho menos si tienes un brazo de unicornio, ¿puedes presionarlo tan rápido (las CPU modernas son solo de 2 GHz, aproximadamente 2 mil millones de veces por segundo)

Incluso si puede presionar tan rápido, aunque la velocidad aumenta, el consumo de energía aumentará mucho, y el calor aumentará y la estabilidad disminuirá. De hecho, existe este tipo de juego en la arena, llamado overclocking, pero los novatos no recomiendan que lo pruebes.

¿Cómo sabe la CPU dónde está? ¿No introdujo FF antes? Esto puede usarse no solo para almacenar datos intermedios, sino también para almacenar estados intermedios, que es donde se encuentra.

El diseño específico involucra FSM (máquina de estados finitos), que es la teoría de la máquina de estados finitos, y cómo implementarla con FF. Esta también es una pieza muy importante. El examen se debe realizar, pero no tiene nada que ver con el tema, así que no entraré en él aquí.

Continuemos con lo que acabamos de decir, ahora tenemos 3 instrucciones. Intentemos contar (1 + 4) X2 + 3.

0100 0001; almacenar 1 en el registro

0001 0100; agregue 4 al número del registro

0010 0000; multiplicar por 2

0001 0011; agregue tres más

Es genial. Con esta computadora, deberíamos ser capaces de vencer a todos los niños del jardín de infancia y dominar la gran clase. Y ahora estamos usando una CPU de 4 bits. Si cambia a una CPU de 8 bits, ¡puede vencer a los alumnos de grado inferior!

De hecho, usar un programa para controlar la CPU es una idea muy avanzada, antes de esto, la CPU de la computadora (máquina) se diseñó por separado.

En 1969, una empresa japonesa BUSICOM quería desarrollar una calculadora controlada por programa, y ​​la empresa estadounidense a cargo del diseño de la CPU también pensó que era una tontería rediseñar la CPU cada vez. Así que los dos se llevaron bien y lanzaron un producto que hizo época en 1970. Se lanzó el primer microprocesador 4004.

Esta arquitectura cambió el mundo, y la empresa estadounidense responsable del diseño de la CPU también se ha convertido paso a paso en un gigante de la industria. Oh, por cierto, se llama Intel, sí, es la risa.

Resolvamos el procedimiento ahora mismo,

01000001000101000010000000010011

Si vienes a ingresarlo en la CPU, me prepararé para el trabajo de ir a la clase de jardín de infantes. ¿Qué? Después de perder, ¿los niños pueden resolverlo rompiéndose los dedos? ?

No hay forma de que el lenguaje de máquina sea tan antihumano. Oh, se me olvidó decir, este lenguaje compuesto solo por 01 se llama lenguaje de máquina (código de máquina), y es el único lenguaje que la CPU puede entender. Pero si haces que el lenguaje de máquina sea leído por personas, definitivamente cambiará a Dianwei en un segundo. Nadie puede soportarlo.

Supongo que te gusta

Origin blog.csdn.net/weixin_45132238/article/details/108550290
Recomendado
Clasificación