¿Cómo funcionan los bitshifts en la capa eléctrica?

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

Se ha desplazado a la izquierda dos bits. Cambiar a la derecha daría como resultado 0000 0010. Es posible que desee aclarar su pregunta: ¿está hablando de microcontroladores o lógica cableada? El bit de "saltar a sus segundos vecinos" es fácil. Repite un solo cambio de bit tantas veces como sea necesario.
Oh, qué error por descuido, culpa mía. Por supuesto que estoy desplazando a la izquierda. Repetir una operación específica es claro, cambiar dos veces para cambiar de dos es fácil. Pero aún así, ¿cómo ocurre el cambio en sí? He leído varias veces que el cambio es una operación extremadamente rápida y, debido a mi falta de conocimientos de ingeniería, no sé por qué es así.
En ese caso, deberías aprender cómo funciona un flip-flop . Un registro de desplazamiento es solo eso: varios flip-flops en serie.
Un registro de desplazamiento para N bits tiene N+1 (a veces N+2) flip/flops, e

Respuestas (5)

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:

  • F = A (op) B
  • 'op' es la operación deseada.
  • Si S = S3S2S1S0 = 1100, entonces 'op' se desplaza a la izquierda.

Así funciona el desplazamiento a la izquierda en el caso particular del 74181:

  • Mire el grupo superior izquierdo de cinco puertas AND y 2 puertas NOR.
  • La primera puerta AND no es exactamente AND, porque solo tiene una entrada: /A0. Por lo tanto, su salida es /A0.
  • Las compuertas AND segunda y tercera tienen salida 0 porque S1S0 = 00
  • La cuarta puerta AND tiene salida /A0*B0, porque S2 = 1
  • La quinta puerta AND tiene salida /A0*/B0, porque S3 = 1
  • La primera puerta NOR tiene salida A0.
  • La segunda puerta NOR tiene salida A0, porque /A0*B0 + /A0*/B0 = /A0.

En conclusión, cuando tiene S3S2S1S0 = 1100, la ALU hace que F = A + A, que es lo mismo que el desplazamiento a la izquierda.

Esquema simplificado de la ALU 74181

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.