¿Cómo 'cambiar en paralelo' en un registro de desplazamiento?

Estoy tratando de diseñar una calculadora básica que pueda sumar, sub, mul y div con Logisim. Para almacenar los operandos voy a usar registros de desplazamiento. Recientemente aprendí sobre ellos y entiendo qué es la entrada en serie y la carga en paralelo. También sé cómo cambiar los bits. He copiado este registro de desplazamiento universal de mi libro de texto. (Diseño digital por Morris Mano)Registro de turno universal

La calculadora funcionará solo con 4 dígitos. Por eso he combinado 4 Registros Universales de Desplazamiento de la siguiente maneraMemoria de 4 palabras

Aquí, cada vez que cambio el valor (izquierda o derecha), el registro cambia solo 1 bit. Lo que necesito es poder cambiar 4 bits a la vez. Debido a que estoy almacenando mis dígitos en BCD, necesito poder mover los 4 bits a la derecha o a la izquierda juntos en un solo pulso de reloj.

He buscado esto en Google y todo lo que pude encontrar fue: Serial In Serial out Shift Register,
Serial In Parallel out Shift Register,
Parallel In Serial out Shift Register,
Parallel In Parallel out Shift Register.

Pero todos estos registros pueden cambiar solo un bit por pulso de reloj. Entonces, para poder almacenar mis representaciones BCD, ¿cómo puedo cambiar los bits en paralelo (4 bits a la vez)?

¿O debo controlar el reloj de alguna manera para que lata solo 4 veces? (En caso afirmativo, explíqueme cómo)

Mencione si hay una mejor manera de almacenar mis operandos.

Retrocedamos un segundo. ¿ Por qué crees que necesitas un registro de turnos aquí?
Es el único elemento de memoria que conozco por ahora. Y estoy usando el registro Shift para poder usar fácilmente la funcionalidad de Retroceso. Cuando se hace clic en cualquier dígito >> desplazar a la derecha 4 bits. Cuando se hace clic en la tecla de retroceso, << desplaza 4 bits a la izquierda.
Por cierto, desplazar a la izquierda 4 es girar a la derecha 12
Puede usar un mux para seleccionar entre 'turno 1' y 'turno 4'
Para desplazar 4 bits, debe conectar 4 registros de desplazamiento en paralelo en lugar de en serie.
Creo que el término que estás buscando es "barrel shifter"

Respuestas (3)

No sé cómo se ve el resto de su diseño, pero los operandos tienen que venir de alguna parte. Supongo que es el bus de 4 bits en la esquina inferior izquierda.

Para desplazar 4 bits hacia adelante y hacia atrás, debe colocar cuatro registros de desplazamiento en paralelo . Los has puesto en serie.

Poner dos registros de desplazamiento en serie duplica la profundidad.
Poner dos registros de desplazamiento en paralelo duplica el ancho.

Gracias, ¿puede explicar qué quiere decir con "poner cuatro turnos en paralelo"? ¿Cómo lo hago? ¿Algún recurso donde pueda buscar?
Debe tomar sus cuatro registros de desplazamiento y alimentar cada uno de sus cuatro bits de entrada en el puerto derecho de desplazamiento de entrada de cada registro de desplazamiento. Luego, en cada reloj, los cuatro bits se mueven en paralelo. (También significa que puede soltar los puertos de entrada in0..in3. No los necesita)

Solo cambias 4 veces.

Las primeras calculadoras usaban una CPU de 4 bits, ya que eso es todo lo que necesita para las matemáticas BCD.

Pero dentro de esa CPU de 4 bits, usaron una unidad de lógica aritmética de 1 bit para hacer las adiciones reales. Desplazaron los 4 bits en serie a través de la ALU de 1 bit, agregando con acarreo de 1 bit. (posteriormente cpus de 8 bits hizo lo mismo)

Una vez que entiendes esta idea, te das cuenta de que hacer matemáticas de precisión múltiple no es más difícil en una ALU de 1 bit, que está en una CPU de 32 bits, simplemente más lento, pero usando muchos menos transistores.

Sigue siendo matemática de precisión múltiple.

Y si está haciendo una calculadora, aún tendrá que hacer cálculos de precisión múltiple, incluso si usa un ARM de 32 bits.

Me parece que solo necesita dos registros de desplazamiento unidireccionales de 16 bits (operandos X, Y), con un nibble de entrada de carga paralela de 4 bits.

Puede copiar X a Y en 16 cambios de un solo bit. Puede desplazar a la izquierda 15 rotaciones a la derecha. Puede hacer operaciones matemáticas con una ALU de 1 bit con acarreo. Necesitará un decimal inteligente para ajustar cada mordisco. Necesita un contador cargable de 4 bits para el control de cambios, ya que tendrá cambios de 4 bits, 1 bit, 15 bits y 16 bits

Así que realmente no creo que necesite resistencias de cambio de carga bidireccionales o paralelas en absoluto. La mayoría de las operaciones lógicas y muxing ocurrirán con un ancho de 1 bit al final del SR.

El circuito que se muestra en la pregunta es un cambio de un solo bit porque A3 alimenta el mux de A2. 3-2 = 1, por lo tanto, un cambio de bit.

Si, en cambio, A6 alimenta el mux de A2, A7 en A3, A5 en A1, y así sucesivamente, admitirá un cambio de 4 bits en una sola operación.

Si está diseñando para una codificación BCD, entonces tener una operación de cambio por 4 es una buena idea, y será un ahorro de tiempo significativo en comparación con repetir un cambio por 1.

Tenga en cuenta que si tuviera que tomar las conexiones de registro shift-by-4 y organizar los registros en una matriz de 4 filas y N/4 columnas, en lugar de una sola fila de N columnas, vería la "conexión paralela de 4 registros de desplazamiento" de los que hablan algunos de los comentarios.