Módulo 3 y notas adicionales
Diseño de la memoria del procesador
Módulo 3a
En este módulo se desarrollo del código que simula a la memoria del procesador. En la implementación del sistema en FPGA este código será sustituido por otro que incluya un IP Core de memoria.
La memoria que va a implementarse es síncrona y realiza una operación (write o read) en un solo ciclo de reloj. Por este motivo la señal ready puede sobrar (ready <='1';)Recursos:
- Enunciado: Lab4Mod3aV1.1_E.pdf
- Ficheros: memory.vhd, micro_ram_pk.vhd, tb_memory.vhd
Notas adicionales
- Para simular la memoria de 4k*32 se declara una variable de tipo
memContents_t
(revisar micro_pk.vhd). - Para que los procesos de simulación funcionen correctamente es necesario que la memoria este cargada con algunos valores. Por esto se inicializa con los contenidos de RAM_CONTENTS que están definidos en el fichero micro_ram_pk.vhd .
Módulo 3b
En este modulo se diseña el controlador de memoria que interconecta la memoria con los posibles usuarios de la memoria que son: bloque de FETCH de la CPU, bloque de datapath de la CPU y periféricos (posible DMA) .
Se implementa como una máquina finita de estados (FSM). Se utilizará un código VHDL estándar para FSMs
Recursos:
- Enunciado: Lab4Mod3bV1.1_E.pdf
- Ficheros: memCtrl.vhd, tb_memCtrl.vhd
Notas adicionales
- Es importante tener en cuenta que mientras la memoria no haya completado la operación, la máquina de estados debe permanecer en el mismo estado. Esto es para que el bloque que este usando la memoria lo haga hasta que se complete la operación.
- Es importante revisar las listas de sensibilidad de los procesos que implementan el bloque combinacional (las dos estructuras de case)
Módulo 3c
Micro6 va a tener dos pilas:
- Una en la memoria RAM para almacenar datos en forma de PILA (existe un registro que es el 31 de regfile que es el puntero de pila. Se diseño en el modulo 1e). Se emplea en las instrucciones de
push
ypull
del microprocesador . - Otra interna (de nombre stack) que se va a diseñar en este modulo 3c y sirve para guardar las direcciones de retorno de subrutinas. Se empleará en las instrucciones de salto a subrutina y retorno de subrutina .
Recursos
- Enunciado: Lab4Mod3cV1.1_E.pdf
- Ficheros: stack.vhd, tb_stack.vhd.
Notas adicionales
-
El puntero de pila (pointer en el código vhdl) esta apuntando a la primera dirección vacía de la pila. Como la profundidad es de 16 datos significa que cuando este vacía
pointer=0
y cuando este llenapointer=16
. El tamaño de pointer sera de 5 bits para poder representar desde el 0 hasta el 16.