¿Cómo se conectan los registros a los buses de la CPU?

Me pregunto qué tipo de búfer/técnicas se usan normalmente para conectar un registro de CPU (¿flip flops?) a un bus de CPU (datos/dirección/control). Dado que hay muchos registros en un solo bus, sé que tiene que haber algún tipo de mecanismo de tres estados, pero ¿cómo se especifica qué búferes deberían estar flotando?

Pensando lógicamente, debería haber algún tipo de bit de selección de registro junto con un bit de lectura/escritura que alterne qué registro está en uso y qué está haciendo con el valor. Aunque esto tiene sentido para mí, no creo que sea práctico Y cada entrada de registro con un bit de selección de registro o r/w.

He estado buscando esquemas o documentación en Internet y no puedo encontrar ninguna información sólida. La mayoría de los esquemas de CPU son tan complicados que me cuesta entenderlos. Cualquier ayuda es muy apreciada.

Respuestas (2)

En algunas tecnologías de dispositivos, los registros se conectan a un bus mediante salidas de tres estados. Tal enfoque tiene algunas ventajas, pero generalmente requiere que haya un "tiempo muerto" entre el momento en que un registro libera el bus y el momento en que otro registro comienza a manejarlo, o corre el riesgo de que un dispositivo pueda comenzar a conducir. el bus antes de que el dispositivo anterior lo haya liberado por completo.

En otras tecnologías, este enfoque se evita en favor del uso de multiplexores anidados. Si hay 64 registros que pueden generar un bit de bus, el dispositivo puede tener ocho multiplexores de 8 vías, cada uno de los cuales acepta la entrada de un registro, y un multiplexor de 8 vías más que acepta la entrada de uno de los primeros ocho. Si bien esto puede usar un poco más de circuitos que el enfoque basado en bus, tiene la ventaja de que cada señal en todo el sistema será impulsada por exactamente un dispositivo en todo momento.

Buena respuesta; sin embargo, estoy buscando más detalles sobre cómo funcionaría una 'salida de tres estados'. ¿Solo cronometran los registros que necesitan usar el valor en el bus de datos (para que los demás no cambien)? ¿Qué tipo de chips entre el bus/registro se utilizan? Su segundo párrafo tiene una gran información, ¡gracias!
@DaveC: intente mirar los esquemas/diseños de las computadoras TTL personalizadas/construidas en el hogar, hay mucha información interesante allí.
@DaveC: el diseño esperado sería que cada registro ignore el bus, excepto cuando necesite colocar su contenido allí o cargar su contenido desde allí. Dependiendo de la topología del diseño, el bus puede estar flotando, subiendo o bajando débilmente, manteniéndose débilmente en su estado actual (sea lo que sea), o subiendo o bajando activamente cuando nada más lo está impulsando. En general, las puertas CMOS consumen corriente adicional cuando sus entradas están cerca del riel medio (y un bus que no se maneja en absoluto podría flotar a un voltaje cercano al riel medio), pero...
...no es difícil diseñar una puerta CMOS NAND de tal manera que si una entrada es baja, no importará si la otra entrada está en el medio del riel; del mismo modo, se puede diseñar una puerta NOR de modo que si una entrada es alta, la otra no importará.

¿Ha considerado tal vez mirar la hoja de datos de una parte que alguna vez se usó para implementar registros en una CPU, como la hoja de datos 74HC574 ?

Funciona exactamente como sospechabas:

Un bit de selección de registro (un pin llamado CLK) para ESCRIBIR que, en su flanco ascendente, le dice al chip que tome los datos en sus pines de entrada y los almacene internamente. Una CPU que incluyera muchos de estos chips solo registraría los registros que necesitan almacenar el valor actual en el bus de datos, y no registraría los otros registros que necesitan mantener sus valores internos.

Otro bit de selección de registro (un pin a veces llamado "nOE") para LEER que, siempre que sea bajo, le dice al chip que envíe sus datos internos al bus de datos.

Los archivos de registro dentro de una FPGA son conceptualmente iguales.

¿Cómo se especifica qué búferes deberían estar flotando?

Por lo general, en otro lugar de la CPU se encuentra el registro de instrucciones (IR). Por lo general, un decodificador como el 74HC138 decodifica el "campo fuente" del registro de instrucciones en un montón de líneas NOE, una para cada registro. El 74HC138 se asegura de que, como máximo, un registro controle el bus de datos en cualquier momento, por lo que no hay conflicto. El 74HC138 mantiene alto el NOE de todos los demás registros, por lo que sus pines de salida están efectivamente "desconectados" ("triestados", "deshabilitados", etc.). Sin embargo, no diría que sus pines de salida están "flotando": cada pin conectado a un bit particular del bus de datos está siendo impulsado alto o bajo por el único chip seleccionado por el 74HC138.

Un demultiplexor similar decodifica el "campo de destino" del registro de instrucciones en un grupo de líneas CLK, una para cada registro, y el diseñador de la CPU agrega un pequeño circuito adicional para impulsar el reloj exactamente en el instante correcto, un poco después de que los datos hayan sido registrados. estabilizado en el bus, y un poco antes de que se haya seleccionado algún otro registro fuente y los datos comiencen a cambiar nuevamente.

cada señal en todo el sistema será impulsada por exactamente un dispositivo en todo momento.

Eso podría funcionar. Sin embargo, en la práctica, nunca he visto un archivo de registro , en un IC monolítico, o construido con chips TTL, o construido con componentes aún más simples, construido completamente con muxes en cascada. Los que he visto siempre incluyen al menos un autobús bidireccional de 3 estados en alguna parte.

Muchos tipos de lógica programable no tienen el concepto de un bus interno con múltiples controladores de 3 estados. Los archivos de registro creados a partir de dicha lógica (a diferencia de los circuitos de archivo de registro especialmente diseñados que a menudo se incluyen en los chips FPGA) suelen estar basados ​​en mux. Tenga en cuenta también que la salida de un archivo de registro basado en mux síncrono no necesita tener ningún "intervalo muerto" entre el momento en que un registro deja de enviar sus datos y el momento en que comienza el siguiente. El uso de la lógica de 3 estados a menudo requiere la voluntad de aceptar el tiempo muerto o la contención de bus intermitente.
Si un archivo de registro se implementa como una estructura regular dentro de un IC monolítico, puede ser (a menudo es) posible controlar los tiempos de la línea de habilitación lo suficientemente bien como para minimizar el intervalo muerto necesario. Además, en muchas situaciones, requerir que el bus esté inactivo entre lecturas de diferentes datos puede no representar un problema. No obstante, el enfoque de 3 estados requiere atención a ciertos aspectos de la sincronización que no serían un problema con un enfoque basado en mux.
@supercat: Me gustaría mencionar tales archivos de registro basados ​​en mux en un libro que estoy ayudando a escribir. ¿Tiene enlaces a buenos ejemplos? (¿Debería hacer esto como una pregunta independiente?)