ENTORNO VISUAL DE SIMULACIÓN DE MIPS BASADO EN VHDL

Anuncio
ENTORNO VISUAL DE SIMULACIÓN DE MIPS
BASADO EN VHDL
Jesús M. Álvarez Llorente, Nieves Pavón Pulido
Departamento de Ingeniería Electrónica, Sistemas Informáticos y Automática, Escuela
Politécnica Superior, Universidad de Huelva.
Julio Ballesteros Rubio
Departamento de Informática, Escuela Politécnica, Universidad de Extremadura.
Resumen: En este trabajo presentamos una aplicación que permite la simulación
visual del funcionamiento de una máquina basada en MIPS. La novedad de este
sistema frente a los simuladores convencionales es que el motor de simulación es el
resultado de la simulación real con un entorno de desarrollo de VHDL, que puede ser
modificada y simulada de diversas formas con el objetivo de comprobar y estudiar su
funcionamiento. Así conseguimos conjuntar la versatilidad de un entorno comercial
de desarrollo de VHDL y la facilidad de manejo y amenidad de un entorno gráfico.
Finalmente, se ha definido un lenguaje ensamblador que permite desarrollar pequeñas
aplicaciones de prueba para el computador simulado.
Palabras clave: Multimedia e Hipermedia en educación, Evaluación de entornos
educativos.
Introducción
La máquina MIPS, descrita en [Pat95], es el sistema más empleado actualmente como
referencia en la enseñanza de las asignaturas de arquitectura de computadores. Existen
multitud de simuladores de todo tipo para mostrar el funcionamiento de cualquiera de las
versiones de MIPS, y no es difícil encontrar en Internet descripciones VHDL completas de
las mismas. En nuestro sistema utilizamos una máquina basada en la versión segmentada de
MIPS con control de riesgos, en la se que ha efectuado una reducción en el formato y
repertorio de instrucciones.
La simulación mediante VHDL de una máquina como MIPS permite al alumno enfrentarse a
la construcción real de una UCP. Sin embargo, algunas de las herramientas que permiten
trabajar con VHDL no proporcionan, como resultado de la simulación, más que una larga
lista de tiempos y estados que resultan bastante abstractos y difíciles de interpretar para un
alumno que comienza a conocer el funcionamiento de la UCP y los sistemas segmentados.
Nuestro sistema de simulación pretende proporcionar un interface gráfico que facilite la
interpretación de los resultados numéricos obtenidos mediante la utilización de una
herramienta VHDL convencional, en concreto el simulador VSIM distribuido por Model
Technology Incorporated, Version 1.2.
Debido a las limitaciones de la versión compilador utilizado, se ha hecho una simplificación
sobre la estructura de la máquina MIPS, reduciendo el repertorio de instrucciones y la
capacidad de memoria. La máquina resultante se describe detalladamente más adelante.
El proceso de simulación con el nuevo sistema parte de la construcción de la descripción
VHDL de la máquina, sobre la cual se pueden realizar determinadas modificaciones para
comprobar el funcionamiento (por ejemplo, cambiar una definición de comportamiento por
una definición estructural). Esta descripción es compilada mediante el entorno de Model
Technology.
El siguiente paso es la creación de un programa de prueba para la UCP diseñada. Para este
propósito se ha definido un lenguaje ensamblador que permite realizar programas sencillos
utilizando el repertorio de instrucciones, etiquetas, variables, etc. Se dispone de un editor de
código fuente y un programa ensamblador que traduce la aplicación codificada a una
representación que es aceptada, a través de un fichero, por la descripción VHDL de la UCP.
A continuación, desde el entorno gráfico, se invoca al simulador VSIM, con el que debemos
trabajar de la forma habitual, haciendo que se muestre el estado de las señales que nos
interesen, programando la resolución de tiempo deseada, y realizando una simulación
suficientemente larga como para que el programa codificado pueda terminar.
Si no dispusiéramos del entorno gráfico, lo siguiente sería analizar el fichero de resultados
intentando identificar las operaciones de cada etapa de segmentación, el estado de las señales
de control, etc., mediante un conjunto de números binarios y decimales que proporciona el
simulador. Sin embargo, el analizador gráfico, la última etapa de simulación con nuestro
sistema, nos permitirá repetir la simulación mostrando los resultados en un esquema gráfico
en el que se representan todos los bloques y señales de la máquina. La activación de líneas de
control se representa mediante colores, y las líneas de datos muestran su contenido mediante
una etiqueta. Disponemos de opciones que nos permiten avanzar y retroceder en el proceso
de ejecución del programa, así como realizar una ejecución auto-animada. De esta forma se
puede observar fácilmente cómo se desarrolla la ejecución del programa a través de las
distintas etapas de segmentación.
Objetivos
Los objetivos propuestos para este sistema son los siguientes:
- Disponer de un entorno gráfico sencillo e intuitivo, que muestre gráficamente el estado de la
máquina y permita avanzar y retroceder en el proceso de simulación.
- Proporcionar un lenguaje de programación que permita probar el funcionamiento con
diferentes programas de forma rápida y sencilla.
- Utilizar un entorno VHDL real para realizar la descripción del computador, de modo que
sirva para estudiar este lenguaje mediante un ejemplo real, aprovechando las ventajas de una
simulación gráfica y la existencia de un compilador.
- Realizar la simulación al nivel de las señales eléctricas digitales que gobiernan la UCP.
Puesto que la simulación inicial desde el entorno VHDL puede configurarse para atender a
cualquier conjunto de las señales de la máquina, podemos centrarnos en componentes
aislados de la UCP, o estudiarla de forma global. Incluso podemos hacer ambas cosas durante
la misma simulación, mostrando u ocultando señales durante el desarrollo de la misma.
- Que sea adaptable a diferentes herramientas de desarrollo VHDL.
Metodología
Como se ha comentado anteriormente, se han diseñado tres partes fundamentales que
componen la aplicación. El corazón del simulador es la implementación del comportamiento
de una máquina basada en una versión reducida de MIPS en VHDL, que produce una
simulación real en un fichero que contiene la información obtenida sobre tiempos y estado de
la máquina. Este fichero de tiempos y estados es recogido por la aplicación creada para
mostrar los resultados de forma visual. Por otro lado, la aplicación ofrece la posibilidad de
crear programas sencillos en ensamblador, compilarlos y traducirlos a código máquina de
MIPS. De esta forma, el alumno puede familiarizarse muy pronto con la forma de trabajo de
una máquina que utiliza técnicas de segmentación para producir resultados de forma más
eficiente. El simulador permite visualizar el contenido de la memoria de instrucciones y de la
memoria de datos. El conjunto de instrucciones máquina obtenidas del proceso de
compilación se utilizan como el programa que estará cargado en la memoria de instrucciones,
y que ejecutará MIPS al realizar la simulación desde el entorno de VHDL, obteniéndose
como resultado el fichero con los datos de la simulación. Luego, la aplicación interpreta
dicho fichero para que sea posible observar visualmente cómo evolucionan en el tiempo los
diversos componentes de la máquina y cómo fluye la información a través de la
segmentación.
Veamos cada parte del simulador más detalladamente.
Descripción de la máquina MIPS restringida
Se utiliza una arquitectura tipo RISC segmentada, con una profundidad de 5 etapas. Cada
etapa se encuentra separada de la siguiente por el correspondiente registro de segmentación:
Etapa IF (Búsqueda de la instrucción) (Registro IF/ID); Etapa ID (Decodificación de la
instrucción) (Registro ID/EX); Etapa EX (Ejecución de la instrucción) (Registro EX/MEM);
Etapa MEM (Escritura en memoria) (Registro MEM/WB); Etapa WB (Postescritura)
Existe un banco de registros formado por 8 registros denominados R0 a R7, de 16 bits cada
uno. Además, se emplean mapas de memoria separados para instrucciones y datos. El tamaño
de la palabra de memoria es de 8 bits. La organización de la memoria de instrucciones se
hace teniendo en cuenta que cada instrucción ocupa dos palabras de memoria (16 bits). El
tamaño más adecuado para la memoria de instrucciones es de 128 palabras de 2 bytes, es
decir, una RAM de 256×8 palabras. En el caso de la memoria de datos se ha utilizado una
memoria RAM de 256×8, de manera que puede ser direccionada por completo mediante el
campo de dirección del formato de instrucción.
Disponemos de 2 formatos de instrucción. Por un lado tenemos instrucciones de tipo registroregistro, utilizadas en las operaciones que de UAL, y por otro, instrucciones que utilizan
direcciones de memoria: carga, almacenamiento y saltos.
Las instrucciones registro-registro utilizan tres campos de direccionamiento de registro, dos
como operando fuente (RS, RT) y uno como operando destino (RD). Cada uno de estos
campos es de 3 bits. Además, existe un campo de operación (CO) que identifica este formato
de instrucciones (debe establecerse al valor 00), y un campo de operación extendida (COX),
que identifica el tipo concreto de operación registro-registro (Figura 1). Existen 5
instrucciones de este tipo: ADD (RD←RS+RT), SUB(RD←RS–RT), AND (RD←RS∧RT), OR
(RD←RS∨RT), SLT (Si RS<RT, RD←1, SI NO, RD←0).
Figura 1: Formato de instrucción registro-registro
15
14
13
CO
12
11
10
RS
9
8
7
6
RT
5
4
3
2
RD
1
0
COX
Las instrucciones con direcciones de memoria contienen un único campo de operación (CO),
dos campos de registros (RS, RD) y un campo de dirección de 8 bits (Figura 2). Son las
siguientes: LW (RS←Memoria[Dirección+RT]), SW (Memoria[Dirección+RT]←RS), BEQ
(Si RS=RT, PC←PC+Dirección).
Figura 2: Formato de instrucción de memoria
15
14
CO
13
12
RS
11
10
9
RT
8
7
6
5
4
3
2
1
0
Dirección
Dado que el diseño realizado utiliza técnicas de segmentación, aumenta la eficiencia en la
ejecución de las instrucciones, pero se producen riesgos por dependencias de datos y riesgos
de control de saltos. El primer tipo de riesgo se ha solucionado mediante la detención del
flujo de ejecución hasta la eliminación del mismo, y el segundo tipo de riesgo se ha
solucionado suponiendo el salto no realizado.
Teniendo en cuenta todo lo dicho anteriormente, el diagrama de bloques que se obtiene se
muestra en la Figura 3. Todos los bloques se describieron en VHDL a nivel de
comportamiento. Esta descripción puede ser modificada ligeramente, por ejemplo, para
probar implementaciones diferentes de los elementos definidos a nivel de comportamiento
(por ejemplo para probar una definición estructural). Las posibles modificaciones están
limitadas debido a que los cambios realizados no se muestran en el simulador gráfico sin
modificar y recompilar el sistema.
Figura 3: Diagrama de bloques de la unidad segmentada
Descripción del lenguaje ensamblador
Para permitir la programación de la máquina se ha diseñado un sencillo lenguaje
ensamblador. Un programa en ensamblador consta de una secuencia de líneas, donde cada
línea puede contener una de las siguientes posibilidades:
- Una línea en blanco, que será ignorada.
- Un comentario, comenzando por dos guiones (“--”), que ocupará el resto de la línea.
- La definición de una variable (DB, DW).
- La definición de una etiqueta.
- Una instrucción en ensamblador.
No se distingue entre mayúsculas y minúsculas, y se consideran palabras reservadas todas las
instrucciones y directivas: ADD, SUB, AND, OR, SLT, LW, SW, BEQ, DB, DW. Un
identificador válido para una etiqueta o una variable puede ser cualquier combinación de
caracteres formada por letras, números y el carácter underscore (“_”), que no coincida con
una palabra reservada, otra etiqueta u otra variable.
El repertorio de instrucciones reconocidas por el ensamblador se muestra en la Figura 4.
Figura 4: Repertorio de instrucciones
Instrucción
Significado
Formato
Operación realizada
ADD
Suma
ADD R1 R2 R3
R1 ← R2 + R3
SUB
Resta
SUB R1 R2 R3
R1 ← R2 - R3
AND
AND lógico
AND R1 R2 R3
R1 ← R2 ∧ R3
OR
OR lógico
OR R1 R2 R3
R1 ← R2 ∨ R3
SLT
Establecer si menor
SLT R1 R2 R3
Si (R2<R3) R1←1 SI NO R1←0
LW R1 VAR [R2]
R1 ← Memoria [VAR + R2]
LW
Cargar palabra
LW R1 [R2]
R1 ← Memoria [R2]
SW R1 VAR [R2]
Memoria [VAR + R2] ← R1
SW R1 [R2]
Memoria [R2] ← R1
BEQ R1 R2 VAR
Si (R1=R2) PC = VAR
SW
BEQ
Almacenar palabra
Saltar si igual
Los 8 registros de la máquina se direccionan en las instrucciones que utilizan este
direccionamiento mediante los identificadores R0 a R7. Las referencias a posiciones de
memoria de datos se realizan mediante la especificación de variables. La definición de
variables se puede realizar en cualquier parte del programa en ensamblador, utilizando alguna
de las palabras reservadas (DB, DW) para la definición del tamaño de la variable. La
definición de una variable admite opcionalmente un valor inicial. La definición de etiquetas
tiene como objetivo la declaración de puntos de destino para realizar saltos con la instrucción
de ramificación condicional (BEQ).
La Figura 5 muestra un ejemplo de un programa sencillo que realiza la multiplicación de dos
números. Para facilitar la programación, el sistema creado incorpora un editor con las
opciones habituales en Windows (cortar, pegar, buscar, etc.). Este editor es la pantalla
principal del sistema (Figura 6) y desde él se accede al resto de las opciones a través de
menús, botones y teclas rápidas.
Figura 5: Ejemplo de programa en ensamblador
-- PROGRAMA PARA MULTIPLICAR DOS NUMEROS POSITIVOS
DW
DW
DW
DW
uno
1
factor1
15
factor2
7
producto
-- Ponemos 0 en R0 para hacer direccionamientos y para tener cero
-- Ponemos factor1 en R1 y factor2 en R2
-- Iniciamos el producto en R3 a 0
-- Guardamos 1 en R7
SUB R0 R0 R0
LW R1 factor1 [R0]
LW R2 factor2 [R0]
SUB R3 R3 R3
LW R7 uno [R0]
bucle:
BEQ
ADD
SUB
BEQ
R2
R3
R2
R0
R0
R3
R2
R0
fin
R1
R7
bucle
fin:
SW R3 producto [R0]
stop:
BEQ R0 R0 stop
Figura 6: Editor de ensamblador
Descripción de la interfaz gráfica de simulación
El analizador gráfico permite realizar un seguimiento visual del comportamiento de la
máquina ante un determinado conjunto de instrucciones. Tras escribir un programa en
ensamblador, la secuencia de pasos que hay que seguir para analizar gráficamente el
comportamiento es la siguiente:
- Ensamblar el programa.
- Simular el programa ensamblado con VSIM. Aquí se puede decidir si mostrar o no todas las
señales de la máquina, el tiempo de simulación, etc.
- Terminar VSIM y analizar gráficamente la simulación.
Una vez que estamos dentro de la pantalla del analizador gráfico (Figura 7), podemos avanzar
y retroceder en el tiempo de simulación a nuestro antojo. El estado de la máquina se muestra
mediante colores y etiquetas en las líneas que representan el esquema de la unidad
segmentada:
- Las líneas de control (binarias) se colorean en rojo cuanto están activadas (1 lógico), en
negro cuando están desactivadas (0 lógico), o en gris si no se conoce su estado (porque no fue
trazada durante la simulación con VSIM).
- Las líneas de datos muestran su estado mediante una etiqueta que representa el valor
decimal que transmiten, o un interrogante ("?") cuando se desconoce su valor (debido a que
no fue trazada durante la simulación con VSIM).
Además de avanzar y retroceder manualmente en el tiempo, podemos analizar
automáticamente todo el fichero de simulación configurando una velocidad de avance
automático (esto es, el tiempo que transcurre desde que se muestra un estado y el siguiente).
En la parte inferior derecha de la pantalla de análisis tenemos una ventana donde se muestran
los nombres de las señales que actualmente se están visualizando.
Figura 7: Ventana del simulador gráfico
Los datos de la simulación con VSIM se almacenan en un fichero de texto (listfile) que
contiene una lista de señales y estados. Este fichero es interpretado por la interfaz gráfica para
mostrar los estados de la máquina. Podemos guardar este fichero de simulación para su uso
posterior, y analizar otros ficheros almacenados sin necesidad de realizar de nuevo la
simulación real con VSIM.
La descripción VHDL toma como entradas para llenar la memoria del computador dos
ficheros, ram_mips.dt1 y ram_mips.dt2, correspondientes a la memoria de instrucciones y la
memoria de datos, que se obtienen como resultado de la última compilación realizada con
éxito de un programa en ensamblador. Desde el entorno podemos consultar estos ficheros
(Figura 8).
Figura 8: Ventana para mostrar el contenido del programa compilado
Conclusiones
Como conclusión podemos decir que este sistema de simulación proporciona una serie de
ventajas y cumple los objetivos propuestos al principio del trabajo. Disponemos de un
entorno visual que nos permite comprender cómo funciona una unidad segmentada, con la
posibilidad de probar su comportamiento con diferentes programas de forma rápida y sencilla
gracias al ensamblador proporcionado. Además, el hecho de utilizar un entorno VHDL real
para realizar la descripción del computador, amplía las posibilidades del sistema de modo que
también sirve como herramienta para el estudio de dicho lenguaje, utilizando el entorno
gráfico como instrumento de apoyo a la interpretación de resultados. Esta es una posibilidad
ampliamente demandada en los entornos de la enseñanza de arquitectura de computadores.
Sería deseable, sin embargo, que la simulación no estuviera restringida a un pequeño
subconjunto de la máquina MIPS original, limitación debida a que la versión de VHDL
utilizada no permite trabajar con grandes volúmenes de información.
Trabajo futuro
Conocidas las limitaciones del sistema, el trabajo futuro se centra en ampliarlo siguiendo las
siguientes directrices:
- Adaptación del sistema a un entorno VHDL más moderno, que permita mayores
posibilidades de simulación y mayor complejidad en la descripción de la unidad segmentada.
- Ampliación de la máquina hasta el repertorio y dimensiones originales, tanto en su
descripción VHDL como en el lenguaje ensamblador.
- Generación de un entorno para definir gráficamente las ampliaciones sobre la arquitectura
del computador, de forma que las modificaciones realizadas en el código VHDL puedan ser
reflejadas en el simulador gráfico con total precisión sin tener que recompilar el sistema.
Bibliografía
Patterson, D.A., Hennessy J.L. (1995). Organización y Diseño de Computadores. McGraw
Hill.
Ashenden P.J., (1996). The Designers Guide to VHDL, Morgan Kaufmann Publisher.
Model Technology Inc. (1991). V-System PC, User´s Manual.
Dirección de los autores
Jesús M. Álvarez Llorente (llorente@uhu.es)
Universidad de Huelva, Escuela Politécnica Superior; Carretera Huelva-La Rábida, 21071,
Palos de la Frontera (Huelva). Tfno.: 959 530 245 ext. 2321
Nieves Pavón Pulido (npavon@uhu.es)
Universidad de Huelva, Escuela Politécnica Superior; Carretera Huelva-La Rábida, 21071,
Palos de la Frontera (Huelva). Tfno.: 959 530 245 ext. 2339
Julio Ballesteros Rubio (julioba@unex.es)
Universidad de Extremadura, Escuela Politécnica; Ctra. de Trujillo s/n, 10071, Cáceres.
Tfno.: 927 257 189
Descargar