Soy desarrollador de software y entiendo cómo funcionan en principio los cambios de bits aritméticos y lógicos.
Pero, ¿cómo actúan sobre la capa eléctrica?
Podría tener una imaginación completamente equivocada;
Digamos que tenemos el valor binario 0000 1011 y lo desplazamos a la izquierda por 2.
El resultado es 0010 1100, nada especial.
Pero, ¿cómo "saltan" los bits a sus segundos vecinos?
Editar: se corrigió un desliz, donde escribí "desplazamiento a la derecha" mientras hacía un desplazamiento a la izquierda.
Editar: etiquetas ALU y DIGITAL-LOGIC agregadas
En las computadoras, las operaciones aritméticas son realizadas por un circuito integrado específico que se coloca dentro del microprocesador, y se llama "Unidad Lógica Aritmética". Puede consultar el artículo de Wikipedia sobre ALU ( https://en.wikipedia.org/wiki/Arithmetic_logic_unit ). Como ejemplo menciona la ALU 74181, que es una unidad lógica aritmética muy simple, capaz de realizar varios tipos de operaciones, incluido el desplazamiento a la izquierda, sobre 4 bits.
He adjuntado el esquema lógico de la ALU 74181 (ver más abajo). Las entradas son A y B, y el resultado es F. Cada número tiene una longitud de 4 bits, por lo que hay A3A2A1A0, B3B2B1B0 y F3F2F1F0. La operación deseada se selecciona con S3S2S1S0:
Así funciona el desplazamiento a la izquierda en el caso particular del 74181:
En conclusión, cuando tiene S3S2S1S0 = 1100, la ALU hace que F = A + A, que es lo mismo que el desplazamiento a la izquierda.
Un enfoque es un paralelo en el registro de desplazamiento de salida paralela . Los datos se cargan en el registro de desplazamiento, luego se desplazan hacia la izquierda o hacia la derecha el número de lugares deseado. La desventaja de esto es que solo puede cambiar un bit por ciclo de reloj.
Una alternativa es una palanca de cambios de barril que puede cambiar un número arbitrario de lugares de una sola vez.
Vale la pena darse cuenta de que el cambio no tiene por qué ser más que cómo conectas las líneas de entrada a las líneas de salida en un bus de datos. Cableado directo no hay cambio. Conecte cada línea de entrada a la línea de salida que está un lugar a la izquierda es un desplazamiento a la izquierda de 1, y así sucesivamente.
Busque algo llamado registro de desplazamiento . Una forma de pensar en esto es una cadena de chanclas. Digamos que estos flip-flops toman una instantánea de cualquier valor que esté en su entrada en la transición de baja a alta del reloj, luego transfieren esa instantánea a su salida en la siguiente transición de alta a baja del reloj. Conecta la salida de un flip-flop a la entrada del siguiente, etc., luego los conecta a todos a la misma señal de reloj.
Unos y ceros se representan dentro del circuito integrado de la CPU como niveles de voltaje. Por ejemplo, 0 voltios es el cero lógico y 5 voltios es el uno lógico. Los valores lógicos generalmente se mantienen en circuitos llamados "flip-flop". Un chip de CPU típico tiene millones de flip-flops.
Y un chip de CPU típico también tiene millones de interruptores operados eléctricamente. Entonces, para ejecutar una función de cambio, la CPU enciende los interruptores apropiados para enviar los niveles lógicos al flip-flop SIGUIENTE (o "posición de bit") en el registro.
Básicamente, todas las funciones matemáticas y lógicas se implementan simplemente conectando registros de bits de formas particulares, según lo que desee hacer. Para eso está diseñado el chip de la CPU.
Cuando rotas las llantas de tu auto, ¿cómo sucede eso? Bueno, quitas al menos dos y los cambias, ¿sí?
Almacenamiento de bits, ya sean flip-flops individuales o millones de ellos empacados en un carnero. Cada bit de almacenamiento se puede leer y escribir. de lo contrario, ¿cuál es el punto? Un cambio de bit no es más que una operación que quita las llantas, lee los bits de un registro o ubicación de memoria y luego los vuelve a escribir en una ubicación diferente, al igual que mover una llanta de atrás hacia adelante, se lee y luego escríbalo de nuevo en una ubicación diferente.
No hay magia en la lógica, todo es muy, muy simple en concepto. cero, uno y no es todo lo que se requiere para comprender. A veces es una gran cantidad de y, ors y nots en paralelo y/o en serie.
Algunos procesadores cambian un bit a la vez y en pseudo hdl no es realmente diferente que en el software
alu_out[16] = (operand_a[14:0],0)
la salida de 16 bits se compone de los 15 bits inferiores de la entrada reposicionados en los 15 bits superiores de la salida con un cero añadido en la posición 0.
Y esa línea de código puede estar en una instrucción similar a un interruptor o en un árbol de declaraciones if then else que básicamente dice si alu_operation = left_shift entonces haz esto.
Y todo eso se compila en puertas lógicas, los ifs y las asignaciones se convierten en puertas and, or, not o puertas derivadas de and, or, not. en un enorme nido de ratas.
Algunos procesadores tienen una palanca de cambios de tamaño variable que en una operación puede rotar o cambiar tanto como desee (obviamente hasta el tamaño de la palabra completa, de lo contrario, ¿cuál es el punto) concedido que requiere muchas más puertas, solo esa operación en cada bit del la salida para un registro de 16 bits tiene un mux de 15, 16 o 17 dependiendo, solo para esa operación.
Transistor
pjc50
jajo
Dmitri Grigoriev
Jim Dearden
Con3ro