MIPS: Memoria de instrucciones: Refiriéndose a instrucciones en la memoria

0

Estoy implementando el procesador MIPS usando Verilog.

input   [31:0] address;
output [31:0] instruction;
reg [31:0] instruction_memory [255:0];
assign instruction = instruction_memory[address[9:2]];

Este es un cuerpo casi completo del módulo Memoria de instrucciones . Lo que no entiendo es por qué nos referimos a las instrucciones en la memoria usando address [ 9: 2 ] . Quiero decir, ¿por qué [9: 2] ?

He encontrado una respuesta, pero no puedo entenderla. Dice:

  

¿Qué bits seleccionan las primeras 256 palabras? [9: 2] !

¿Puedes, por favor, explicarme este detalle de alguna otra forma más comprensible? Gracias.

    
pregunta I.Gandakov

2 respuestas

2

Debido a que las instrucciones MIPS tienen una longitud de 32 bits, los bits 0 y 1 no tienen ningún significado. Por lo tanto, en lugar de mirar a [7:0] de la dirección, se ve a [9:2] , que es la traducción de las instrucciones.

    
respondido por el Ignacio Vazquez-Abrams
1

Aquí hay un ejemplo.

Una pila (los números decimales a la izquierda están destinados a usarse para esta breve explicación). Los números binarios a la derecha son las direcciones de las instrucciones en la memoria de instrucciones (los valores no son reales. Solo un ejemplo).

Así que en ...

1 | 0000 10 00 > > Dirección (Instrucción 3)

2 | 0000 0111

3 | 0000 0110

4 | 0000 0101

5 | 0000 01 00 > > Dirección (Instrucción 2)

6 | 0000 0011

7 | 0000 0010

8 | 0000 0001

9 | 0000 00 00 > > Dirección (Instrucción 1)

En MIPS, una instrucción tiene una longitud de 4 bytes. Es por eso que, como puede ver en el ejemplo anterior, que va desde Instruct 1 (l. 9) a Instruct 2 (l. 5), en realidad estamos "pisando "sobre 4 líneas (9, 8, 7, 6), que se agrega a 0000 0000 , 4. A medida que se llega a Instruct 2 , es obvio que las dos primeras los bits (en negrita) permanecen sin cambios. Y nuevamente, al agregar Dirección (Instrucción 2) + 4 , llegamos a Instrucción 3 . Aquí, los dos primeros bits no han cambiado.

El resultado será el mismo para un número infinito de instrucciones.

Así que la conclusión es: los dos primeros bits no nos dicen nada. No cambian a medida que avanzamos de una instrucción a otra. Es una buena razón para descuidarlos.  Los que son útiles son los bits que comienzan desde la posición 2.

Aquí está la implementación de la memoria de instrucciones:

    
respondido por el I.Gandakov

Lea otras preguntas en las etiquetas