Microinstrucciones: ¿Por qué H = H – MDR es ilegal si H y MDR usan dos buses diferentes?

El libro aquí (en la página 14) dice esto:

De manera similar, H = H – MDR también es ilegal, porque la única fuente posible de un sustraendo (el valor que se resta) es el registro H.

Según tengo entendido, la declaración anterior dice que el sustraendo (valor en MDR) está en el registro H. Sin embargo, si observa esta microarquitectura MIC-1 en la página 7, el registro H se conecta directamente a la ALU y el MDR usa el bus B, entonces, ¿por qué es ilegal?

¡La oración que citaste te lo dice! El restador SOLO implementos <dest> = <source> - H.
@BrianDrummond - ¿Por qué el MDR se convierte en H si se puede cargar en el bus B?

Respuestas (1)

El problema no es tener dos autobuses diferentes. La restricción, que hace que 'H = H - R' sea ilegal, proviene del conjunto de operaciones que implementa la ALU.

Según la página 14:

Hay muchas declaraciones aparentemente razonables que son operaciones ilegales. Por ejemplo, MDR = SP + MDR parece razonable, pero no hay forma de ejecutarlo en la ruta de datos de Mic-1 en un ciclo.

Esto se debe a que solo hay un bus, el bus B, que puede suministrar valores desde el registro SP y el registro MDR a la ALU. Entonces solo uno de esos dos registros se puede conectar.

Continúa diciendo:

De manera similar, H = H – MDR también es ilegal, porque la única fuente posible de un sustraendo (el valor que se resta) es el registro H.

Está diciendo que el diseño de la ALU debe tener el sustraendo del puerto de registro H. Esa ALU no tiene una operación que use el valor del puerto del bus B como sustraendo; el sustraendo no se puede suministrar a través del bus B a esa ALU.

Entonces la ALU solo implementa X = <B-bus-register-port> - <H-register-port>
La ALU no implementaX = <H-register-port> - <B-bus-register-port>

Esa fue una decisión tomada por los diseñadores de la arquitectura. Podrían haber definido la ALU de una manera diferente, de modo que pudiera tomar el sustraendo del bus B. Pero no lo hicieron.

Además, la pregunta '¿Por qué el MDR se convierte en H si se puede cargar en el bus B?' no tiene sentido Para una operación, el 'MDR' no se 'convierte en H'. Se necesitarían operaciones previas para mover MDR a H, y H a otro registro, para tener el efecto de 'H = H - MDR'

Editar en respuesta al comentario de OP:

Sin embargo, ¿hay alguna razón por la que la ALU no pueda usar el sustraendo? No veo cómo si el valor del MDR se puede pasar al registro H a través de la ALU, no se puede usar en la operación ilegal anterior.

Las instrucciones que se describen, ejecutadas por la arquitectura, no son las instrucciones de máquina de ISA disponibles para el sistema operativo o las aplicaciones del usuario.

Las instrucciones que se describen son las 'Microinstrucciones' internas que controlan directamente cada ciclo de la operación interna de la CPU; (Página 1):

Para nuestra microarquitectura de ejemplo, está controlada por las microinstrucciones, cada una de las cuales controla la ruta de datos durante un ciclo.

Este es el concepto crucial, central. Si algo no es una Microinstrucción, entonces no se puede hacer en un ciclo. Solo se puede hacer usando múltiples Microinstrucciones.

Ese manual (página 5, sección 'Microinstrucciones'):

Para controlar la ruta de datos de la figura 1, necesitamos 29 señales.

luego, en el siguiente punto:

Los valores de estas 29 señales de control especifican las operaciones para un ciclo de la ruta de datos . Un ciclo consiste en sacar valores de los registros y llevarlos al bus B, propagar las señales a través de la ALU y el cambiador, conducirlas al bus C y finalmente escribir los resultados en el registro o registros apropiados.

Esa es la definición de un solo ciclo de máquina, interno a la CPU. El comportamiento de las máquinas se 'programa' utilizando las microinstrucciones disponibles, que contienen esas 29 señales. Eso es todo lo que hay para trabajar.

Si una Microinstrucción no puede lograr lo que le gustaría, entonces la única forma de lograr ese efecto es usar múltiples Microinstrucciones.

Como ya hemos visto, el manual explica en la página 14:

De manera similar, H = H – MDR también es ilegal, porque la única fuente posible de un sustraendo (el valor que se resta) es el registro H.

Así está diseñada la ALU. Esa es la razón por la que la ALU no puede tomar el sustraendo del bus B. No está diseñado para hacer eso. Ese fue un compromiso de diseño que hicieron los diseñadores. Presumiblemente, tienen una lógica basada en (al menos) la ISA de destino que desean implementar, el costo, la complejidad y el rendimiento.

Entonces, tomando el comentario pieza por pieza:

... si el valor del MDR se puede pasar al registro H a través de la ALU ...

Coloque MDR en el bus B, a través de ALU sin una operación, y almacene en H parece ser una microinstrucción válida.

Sin embargo, AFAICT, no hay Microinstrucción que pueda mover MDR al registro H y hacer una operación ALU en un solo ciclo .

Ese efecto general se puede lograr en varias Microinstrucciones. Eso es común para una máquina Microprogramada.

Sin embargo, 'H = H - MDR' no se puede hacer en una Microinstrucción por diseño.

Tal vez los conceptos con los que está luchando son: microinstrucciones, microprogramación, muchas microinstrucciones de un solo ciclo que implementan una instrucción ISA y la idea de que los diseñadores de la máquina microprogramada optaron por no admitir todas las operaciones posibles (para equilibrar el costo, la complejidad y el rendimiento).

Quizás si trabaja en la implementación de las instrucciones ISA 'ISUB' e 'IFLT' (que son las que parecen necesitar sustracción) como microprogramas, podría quedar más claro por qué tomaron la decisión de no implementarX = <H-register-port> - <B-bus-register-port>

Gracias por la respuesta, creo que entiendo parcialmente. Es cierto que expresé mi otro comentario bastante mal, ya que entiendo que es el valor lo que se está moviendo. Sin embargo, ¿hay alguna razón por la que la ALU no pueda usar el sustraendo? No veo cómo si el valor del MDR se puede pasar al registro H a través de la ALU, no se puede usar en la operación ilegal anterior.