temas libro - Pontificia Universidad Javeriana

Anuncio
PCSIM RELOADED
HENRY LEONARDO MORENO DÍAZ
LUCIO GUSTAVO PIRABAN LOZANO
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE ELECTRÓNICA
BOGOTA, D.C.
2004
PCSIM RELOADED
HENRY LEONARDO MORENO DÍAZ
LUCIO GUSTAVO PIRABAN LOZANO
Trabajo de grado para optar al título de
Ingeniero Electrónico
Director
FRANCISCO VIVEROS MORENO
Ingeniero Electrónico
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE ELECTRÓNICA
BOGOTA, D.C.
2004
2
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
CARRERA DE INGENIERÍA ELECTRÓNICA
RECTOR MAGNÍFICO: R.P. GERARDO REMOLINA S.J.
DECANO ACADÉMICO: Ing. ROBERTO ENRIQUE MONTOYA VILLA
DECANO DEL MEDIO UNIVERSITARIO: R.P. ANTONIO J. SARMIENTO N. S.J.
DIRECTOR DE CARRERA: Ing. JUAN CARLOS GIRALDO
DIRECTOR DEL PROYECTO: Ing. FRANCISCO VIVEROS MORENO
3
ARTICULO 23 DE LA RESOLUCIÓN No. 13 DE JUNIO DE 1946
“La universidad no se hace responsable de los conceptos emitidos por sus alumnos
en sus proyectos de grado.
Solo velará porque no se publique nada contrario al dogma y a la moral católica y
porque los trabajos no contengan ataques o polémicas puramente personales.
Antes bien, que se vea en ellos el anhelo de buscar la verdad y la justicia.”
4
AGRADECIMIENTOS
Este trabajo de grado fue posible gracias al apoyo incondicional y constante del
Ing. Francisco Viveros, quien fue una invaluable guía durante todo el proceso.
Igualmente, al Ing. Cesar Bustacara y a la Ing. Alejandra Gonzalez por su apoyo,
tiempo y conocimiento aportados, sin los cuales no hubiera sido posible este logro.
Agradecemos además a todos aquellos que participaron en nuestro proceso de
formación a lo largo de estos años, y a todos aquellos que compartieron con
nosotros e hicieron realidad este sueño.
5
A Dios por poner su mano sobre mi hombro y guiar mis pasos siempre por el buen
camino.
A mi mamá que me ve desde el cielo por darme sus sabios consejos y que espero
poder seguir durante el resto de mi vida.
A mi papá que siempre me ha dado su apoyo incondicional y al que espero haberle
podido cumplir.
A Lucio que me enseñó a ver lo mejor de la vida y ha sido mi fiel compañero hasta
el final.
A Luisa y a Marco, mis primeros amigos en la U. De los cuales aprendí muchas
cosas y que a pesar de la distancia, aún cuento con ellos.
Al Ing. Carlos H. Pinzón que me ayudó a tomar la mejor decisión en toda la
carrera.
A la sala de Técnicas Digitales donde aprendí muchas cosas que me servirán
durante mi vida como profesional.
A mis cuatro amiguitas Diana C., Diana R., Paula y Lilian que con sus sonrisas y
consejos me alegraron cada día.
A mi familia y al resto de mis amigos que sin su ayuda y compañía no hubiera
podido terminar esta carrera.
HENRY L. MORENO D.
6
A Dios por ser mi apoyo y mi guía.
A Henry por acompañarme y ser mi amigo incondicional todo este tiempo.
Al Ing. Mauricio Castillo por todo.
A mi papa por ser un ejemplo.
A mi mama porque siempre tuvo fe en mi.
A mi hermana por ser la persona que admiro.
A Dianita, a Dianis, a Lilian, a Edgar, Jorge Mario, Rosi y Cube por apoyarme y
estar ahí cuando más lo necesite.
Al Pacho y al Juancho por ser mis AMIGOS de toda la vida.
A John, Lau, Willy, Paulis, Fercho, Kike, Nelson, Pacho, por compartir tantos
momentos gratos conmigo.
A la sala de Técnicas Digitales, por todo lo aprendido y vivido.
A la Caja Negra por darme la oportunidad.
A Sofia, por ser tan increiblemente especial.
A mis amigos de B&G por ayudarme a crecer.
A todos los que no me creyeron.
LUCIO PIRABAN.
7
CONTENIDO
1.
OBJETIVOS................................................................................................................13
1.1.
1.2.
OBJETIVO GENERAL ....................................................................................... 13
OBJETIVOS ESPECÍFICOS ............................................................................... 13
2.
METODOLOGÍA .......................................................................................................14
3.
ANÁLISIS MANEJO DE MEMORIA .....................................................................16
3.1.
3.2.
4.
CANTIDAD DE OBJETOS EN UNA FORMA .................................................. 16
CARGA DE FORMAS DESDE EL INICIO........................................................ 26
REVISIÓN DEL PROGRAMA.................................................................................29
4.1.
PROBLEMA DE JSR........................................................................................... 29
4.2.
REVISIÓN DEL CÓDIGO .................................................................................. 29
4.2.1
RETORNO DE SUBRUTINA (RTE) ............................................................ 31
4.2.2
PROBLEMA CON EL AHPL ....................................................................... 32
4.3.
INTERRUPCIONES............................................................................................ 32
4.3.1
ALMACENAMIENTO DE REGISTROS DE PROPÓSITO GENERAL....... 32
5.
TRABAJOS FUTUROS .............................................................................................34
6.
CRITERIOS PARA LA CLASIFICACIÓN DE LOS MÓDULOS.......................35
6.1.
MÓDULO UNIDADES COMUNES: ................................................................. 35
6.2.
MÓDULO UNIDADES DE MEMORIA:............................................................ 36
6.3.
MÓDULO UNIDADES PERIFÉRICOS: ............................................................ 36
6.4.
MÓDULO PROCESADOR SIN SEGMENTAR: ............................................... 36
6.5.
MÓDULO UNIDADES ALU (UNIDAD ARITMÉTICA LÓGICA): ................ 37
6.6.
MÓDULO UNIDADES CACHE: ....................................................................... 37
6.7.
MÓDULO UNIDADES PROCESADOR SEGMENTADO Y PREDICTOR DE
BIFURCACIONES:......................................................................................................... 37
6.8.
MÓDULO UNIDADES DIAGRAMAS DE TIEMPO: ....................................... 38
6.9.
MÓDULO UNIDADES DMA:............................................................................ 38
6.10.
MÓDULO UNIDAD DE CONTROL MICROPROGRAMADA
HORIZONTALMENTE: ................................................................................................. 38
6.11.
MÓDULO UNIDAD DE CONTROL MICROPROGRAMADA
VERTICALMENTE: ....................................................................................................... 39
7.
DEFINICIÓN DE MÓDULOS ..................................................................................41
7.1.
7.2.
7.3.
MÓDULO 1. UNIDADES CENTRALES ........................................................... 41
MÓDULO 2. PROCESADOR SIN SEGMENTAR............................................. 41
MÓDULO 3. PROCESADOR SEGMENTADO................................................. 42
8
7.4.
7.5.
8.
MÓDULO 4. UNIDADES AVANZADAS ......................................................... 42
MÓDULO 5. UNIDADES DE CONTROL MICROPROGRAMADAS UCMP. 42
NORMAS DE DOCUMENTACIÓN ........................................................................44
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.
9.
ESPECIFICACIONES DE LOS MODULOS, UNIDADES Y FORMAS........... 45
DOCUMENTACIÓN DEL CÓDIGO ................................................................. 46
CÓDIGO ESTRUCTURADO ............................................................................. 47
CAMBIOS Y MODIFICACIONES EN EL CÓDIGO......................................... 48
LISTAS DE REFERENCIAS CRUZADAS ........................................................ 49
DESCRIPCIÓN DE LAS UNIDADES Y FUNCIONES..................................... 50
RESULTADOS OBTENIDOS...................................................................................51
10.
COSTOS ..................................................................................................................54
11.
PROBLEMAS EN EL DESARROLLO DEL TRABAJO DE GRADO............55
12.
POSIBLES CAMBIOS EN UNA FUTURA VERSIÓN......................................56
13.
CONCLUSIONES...................................................................................................57
14.
BIBLIOGRAFÍA.....................................................................................................58
ANEXOS EN CD-ROM......................................................................................................59
9
TABLA DE FIGURAS.
FIGURA 1. FORMA PRINCIPAL DE PCSIM V. ........................................................................... 17
FIGURA 2. FORMA PRINCIPAL DE PCSIM RELOADED............................................................ 18
FIGURA 3. FUNCIONES CREAR Y DESTRUIR .............................................................................. 19
FIGURA 4. DECLARACIÓN DE VARIABLES GLOBALES................................................................. 20
FIGURA 5. CREACIÓN DE OBJETOS. ........................................................................................ 21
FIGURA 6. DESTRUCCIÓN DE OBJETOS.................................................................................... 23
FIGURA 7. DEFINICIÓN DE VARIABLES BOOLEANAS.................................................................. 24
FIGURA 8. DIAGRAMA DE FLUJO CREACIÓN DE OBJETOS .......................................................... 25
FIGURA 9. CREACION DE FORMAS. .......................................................................................... 27
FIGURA 10. DIAGRAMA DE FLUJO CREACIÓN DE FORMAS......................................................... 28
FIGURA 11. EJEMPLO DE LA INSTRUCCIÓN JSR ...................................................................... 29
FIGURA 12. EJEMPLO DE LA FUNCIÓN JSR CORREGIDA. ........................................................... 30
FIGURA 13. RUTINA INTERRUPCIÓN ........................................................................................ 33
FIGURA 14. ESPECIFICACIONES DE LAS UNIDADES Y FORMAS.................................................... 45
FIGURA 15. DOCUMENTACIÓN DEL CÓDIGO............................................................................. 46
FIGURA 16. CÓDIGO ESTRUCTURADO. .................................................................................... 47
FIGURA 17. CAMBIOS EN EL CÓDIGO....................................................................................... 49
FIGURA 18. FORMA PRINCIPAL PCSIM RELOADED ............................................................... 51
FIGURA 19. FORMA PRINCIPAL PCSIM RELOADED CON OBJETOS. ........................................ 52
10
INTRODUCCIÓN
En la carrera de Ingeniería Electrónica, bajo la orientación del Ingeniero Francisco
Viveros, se han desarrollado una serie de simuladores de un procesador, con la
finalidad de facilitar a los estudiantes de Arquitectura I y II el proceso de
aprendizaje, permitiéndoles observar de forma sencilla y a la vez detallada el
contenido de los registros de propósito general, los registros de la CPU, y ver de
forma gráfica la secuencia de las señales de control para manejar la unidad
aritmética – lógica, el manejo de los buses, y todas las mejoras en el desempeño
que pueden brindársele al procesador haciendo uso de otros módulos como la
memoria Caché, el módulo de DMA, etc.
Esto permite que el estudiante comprenda con mayor facilidad el funcionamiento
de un procesador.
PCSIM es un proyecto que posee varios módulos los cuales han sido desarrollados
por diferentes grupos de estudiantes, donde cada grupo presenta una forma
diferente de solucionar el problema al cual se enfrentaron.
Los últimos grupos que trabajaron con PCSIM fueron los que experimentaron los
efectos de esta forma de desarrollo, dando a conocer problemas en el programa
los cuales se pueden agrupar en dos partes:
•
Los problemas relacionados con la implementación del software del procesador
y el uso del entorno de programación.
•
Los problemas relacionados con la transcripción del código AHPL del
procesador.
A continuación se explicará cada uno de los problemas con mayor detalle.
NORMAS DE DOCUMENTACIÓN
Uno de los problemas más graves que se presentaron durante el desarrollo de
PCSIM fue la ausencia de una metodología clara para documentar el proceso. Esto
hizo que para obtener información acerca de las funciones y los procedimientos ya
creados, fuera necesaria la realización de pruebas detalladas, las cuales implican
una inversión considerable de tiempo.
11
ADMINISTRACIÓN DE RECURSOS DE MEMORIA
Otro problema hace referencia a la estructura de programación empleada por los
primeros grupos que trabajaron en este proyecto, dado que no tuvieron en cuenta
la eficiencia, ni el manejo dinámico de la memoria. Esto hizo que el programa
presentara graves problemas en el manejo de la parte gráfica, haciéndolo poco
práctico e inestable. Por estas razones, el programa PCSIM ha llegado a su límite
en cuanto a escalabilidad, eliminando cualquier posibilidad de expansión.
FUNCIÓN SALTO A SUBRUTINA
Durante la ejecución de un programa en el simulador, al ejecutar el OPCODE
correspondiente al salto a subrutina, el procesador ejecutaba una operación
inválida y no continuaba con la ejecución del programa preestablecido.
RUTINA DE INTERRUPCIÓN
Si durante la ejecución de un programa se presentaba un llamado a interrupción,
el procesador antes de realizar el salto, almacenaba en memoria el contenido del
PROGRAM COUNTER, del STATUS REGISTER, del acumulador, y de todos los
registros de propósito general. Es común que los procesadores en su mayoría solo
almacenen en memoria el PC y el SR, haciendo el llamado a la interrupción mas
eficiente y dejando al usuario la opción de almacenar los registros que lo
requieran.
Los problemas mencionados hicieron que los últimos desarrollos realizados a
PCSIM no se pudieran fusionar de la manera deseada originalmente.
Es necesario realizar una reestructuración completa del código, como se plantea
más adelante, pero todo esto puede tomar bastante tiempo. Entonces, el propósito
es definir y orientar dicha reestructuración y señalar unas pautas que permitan que
otros grupos continúen con el trabajo y así lograr que PCSIM siga con su
desarrollo.
12
1. OBJETIVOS
1.1. OBJETIVO GENERAL
Realizar una evaluación minuciosa de todas las posibilidades en cuanto al entorno
y las normas de programación, y luego determinar y definir cómo se debe
reestructurar el simulador del procesador PCSIM.
Así mismo y teniendo en cuenta la magnitud del código del procesador, es
necesario realizar una documentación de las partes funcionales del procesador y
de dicho código, con diagramas de flujo y de bloques detallados que describan con
claridad la arquitectura del procesador y la estructura del código, para que los
futuros trabajos en PCSIM entiendan con claridad el funcionamiento del procesador
y puedan determinar con facilidad cómo y dónde en la estructura hacer el acople
de su trabajo.
1.2. OBJETIVOS ESPECÍFICOS
•
Evaluar el entorno de programación actual y definir su viabilidad para
reestructurar PCSIM.
•
Hacer una revisión completa del código del procesador, para establecer la
forma más sencilla y óptima de redefinirlo.
•
Documentar detalladamente la arquitectura del procesador, incluyendo
diagramas de bloques.
•
Hacer que el código del procesador sea modular, para que en futuros
trabajos la utilización del código existente sea sencilla y rápida.
•
Crear una política de documentación y organización del trabajo que facilite
el futuro desarrollo del procesador.
13
2. METODOLOGÍA
La realización de este proyecto se ejecutó en varías etapas:
•
Funcionamiento de PCSIM: La primera etapa consistió en entender el
funcionamiento de los módulos de PCSIM, con el fin de comprender cuáles son
las entradas y salidas de cada función y cómo se visualizan en pantalla. Junto
con esto, se realizó una revisión de la documentación y del código AHPL
existente.
•
Aprendizaje de DELPHI: Se estudió el entorno de programación DELPHI el
cual se utilizó en las primeras etapas de desarrollo del PCSIM, enfatizando el
desarrollo gráfico en sus diferentes formas, precisamente uno de los principales
problemas a resolver. Luego de contar con dichos fundamentos, se pudo
decidir con un criterio más válido si se podía seguir usando DELPHI para darle
continuidad al proceso llevado hasta ahora y no perder el trabajo hecho por los
grupos anteriores, o si era necesario detener el proyecto y reescribir el código
existente en otro lenguaje que se ajuste más a los requerimientos de PCSIM.
Esto pudo haber cambiado totalmente la metodología de aquí en adelante.
•
Reestructuración: Luego de haber definido el entorno de programación a
utilizar, el siguiente paso fue iniciar el rediseño del software, comenzando por
definir o reformar de la mejor manera su estructura básica y su núcleo
funcional, hasta definir los módulos funcionales en los cuales se segmentó el
código. Dicha reestructuración debe solucionar todos los problemas
mencionados anteriormente.
•
Solución de problemas: Ya habiendo definido y analizado cada módulo, se
empezaron a corregir los problemas encontrados en la primera etapa de este
proceso, tanto en el diseño teórico del procesador, como en la implementación
en software del procesador
•
Políticas de documentación: Se precisaron las políticas de documentación
que se adoptaron, y se señaló el camino que los siguientes grupos deben
seguir al respecto. Es muy importante porque de esta etapa depende en gran
parte que los siguientes grupos puedan acoplarse más rápidamente a lo que ya
está hecho.
14
•
Pruebas y análisis de resultados: Para terminar, se realizaron pruebas al
simulador que determinaron su correcto funcionamiento y desempeño, acorde
a los lineamientos planteados.
15
3. ANÁLISIS MANEJO DE MEMORIA
PCSIM nació como un proyecto pedagógico que busca facilitar el proceso de
aprendizaje de los estudiantes, pero no se esperaba el gran crecimiento que ha
tenido con el paso del tiempo.
Los primeros grupos que desarrollaron PCSIM no tuvieron en cuenta este
crecimiento y no planearon el programa para que fuera claro, estructurado y que
tuviera capacidad de crecimiento.
Esto llevó a que el último grupo que trabajó en el desarrollo de PCSIM sufriera las
consecuencias de estos hechos, llegando al limite de la capacidad en memoria de
la forma principal.
Este problema se presenta básicamente por dos motivos; la cantidad exagerada de
objetos que contenía la forma principal y el hecho de que todos las formas y
objetos son cargados en memoria desde el inicio del programa.
A continuación se tratarán dichos temas con mayor detalle.
3.1. CANTIDAD DE OBJETOS EN UNA FORMA
DELPHI, al igual que muchos entornos visuales de programación actualmente,
permite diagramar formas, colocar objetos y asignarles diferentes propiedades con
mucha facilidad. Simplemente se requiere arrastrarlos con el ratón desde una
barra de herramientas hasta la posición deseada, asignándole un tamaño y
propiedades deseadas. DELPHI se encarga de asignar las propiedades restantes y
generar el código necesario.
16
Figura 1. Forma principal de PCSIM V.
En las primeras etapas del desarrollo de PCSIM, se desconocían ciertas limitantes
que presenta este entorno, como la cantidad de objetos que puede contener una
forma. El problema no fue notable hasta que debido al crecimiento en módulos del
simulador, se alcanzara este límite. En la Figura 1, se puede apreciar cómo se
colocaban todos los objetos en la forma principal. La gran mayoría de las formas
también se cargaban al inicio del programa, y simplemente se mantenían ocultas al
usuario.
La solución que se presenta es, aprovechando la modularidad del simulador,
liberar a la forma principal de objetos, que ésta sólo contenga los objetos que sean
necesarios en determinado momento y que culminada su función, dichos objetos
sean destruidos para no sobrecargar la forma principal.
17
Figura 2. Forma Principal de PCSIM RELOADED.
En la Figura 2 se puede apreciar que en la nueva versión del simulador, se ha
liberado la forma principal de los objetos de la memoria caché, periféricos, y la
ventana de Otros Pines, los cuales son creados cuando son requeridos. Algunas de
las formas que se cargaban al inicio también han sido modificadas con el mismo
fin.
Teniendo en cuenta que los objetos se pueden repartir en grupos según los
módulos a los que pertenezcan, se presenta la posibilidad de introducir funciones
que permitan crear y destruir los objetos cuando cada uno de dichos módulos sea
requerido.
Dentro de la forma se deben crear dos funciones para cada módulo. La primera
que se llame CrearMODULO y la segunda DestruirMODULO, donde “MÓDULO” es
la función, unidad o módulo al que se desea convocar.
18
Figura 3. Funciones Crear y Destruir
Dentro de la función CrearMODULO se deben colocar todos los pasos necesarios
para la creación y definición de propiedades de los objetos. Este procedimiento
debe ser incluido en la sección de los procedimientos públicos, como se observa en
la Figura 3.
Estos objetos deben ser definidos dentro del código en la sección de definición de
variables, ya que de no hacerlo el programa genera un error al compilar. Pero cabe
resaltar que el hecho de definir las variables, NO ocupa espacio en memoria, un
objeto solo comienza a hacer uso de la memoria cuado es creado.
19
Figura 4. Declaración De Variables Globales.
Para efectos prácticos, se recomienda crear el objeto haciendo uso del entorno
gráfico de DELPHI para aprovechar todas sus ventajas, y cuando se tenga el
objeto como se desea y en la posición que se desea ubicar, se puede cortar
(CTRL+X) de la ventana del entorno gráfico y pegar (CTRL+V) en el archivo de
código.
Es importante que se utilice la función CORTAR y no COPIAR, ya que de copiarse
se generará un error al encontrar 2 objetos dentro del código con el mismo
nombre y las mismas propiedades. (Figura 5).
Por tratarse de un objeto que es necesario crear mientras se corre el programa y
no que se cree al iniciar el simulador, es imperativo agregar dos propiedades que
DELPHI por defecto no asigna. Estas propiedades son:
•
•
objeto := TTipo.Create(self);
objeto.Parent := form;
donde “OBJETO” es el nombre del objeto a crear, “TTIPO” es el tipo de objeto
que se va a crear (BEVEL, IMAGE, PANEL, etc.); y “FORM” es la forma en la cual
estará ubicado el objeto (generalmente la forma principal o “FORM1”)
20
Con la primera línea, se dice de qué tipo será el objeto a crear para asignarle la
memoria definida por defecto y las propiedades que le correspondan si es el caso.
El parámetro “SELF” permite hacer que el objeto tenga una referencia a sí mismo,
para que luego no genere conflictos con el destructor del objeto.
En la segunda línea, se le asigna al objeto una forma “PADRE” o “PARENT”, que
debe ser la forma en la cual va a aparecer el objeto para establecer una relación
jerárquica entre la forma y los objetos creados, permitiendo que el objeto herede
algunas propiedades, y para que estos solo se hagan visibles en la forma
“PARENT” del objeto creado.
Igualmente, al destruir la forma padre, son destruidos los objetos hijos de esta
forma, evitando así el llenado de la memoria al dejar objetos creados y sin
referencia.
Figura 5. Creación De Objetos.
21
Los objetos deben ser variables globales para que cualquier procedimiento pueda
alterar sus propiedades (incluyendo crear y destruir el objeto), inclusive si dicho
procedimiento pertenece a otro módulo del programa. Debido a esto, se definió la
siguiente nomenclatura para los objetos a crear:
FORMobjetoglb
donde “FORM” es la forma a la cual debe pertenecer el objeto y “glb” indica que es
una variable global. Gracias a esta nomenclatura, se evitan confusiones y conflictos
con los nombres de las demás variables del programa. (Figura 4)
Al finalizar el uso del objeto o del mismo módulo, es necesario destruir el objeto;
para esto se debe introducir una función análoga a “CrearMÓDULO” pero que
permita hacer esta operación.
En la función “DestruirMODULO” debe ir cada uno de los objetos que se crearon en
la función CrearMODULO usando el método “FREE”.
objeto.Free;
donde “objeto” es el nombre del objeto creado anteriormente.
Los anteriores desarrolladores de PCSIM usaban el destructor “DESTROY”. En
general los autores recomiendan el uso del método “FREE” en vez de usar el
destructor “DESTROY” directamente, ya que éstos presentan algunas diferencias.
El destructor “DESTROY” maneja automáticamente el proceso de liberación de
memoria. Cuando el programa por alguna razón genera una excepción mientras se
está creando un objeto, automáticamente se llama el destructor de dicho objeto
para liberar la memoria y las referencias que se hayan creado.
Pero este destructor tiene un problema, no revisa antes de liberar el objeto, que
las referencias no sean NULL. Este problema se soluciona con el método “FREE”.
“FREE” hace uso del destructor “DESTROY”, pero es diferente a éste mismo ya que
“FREE” revisa las referencias a NULL de los objetos, evitando así intentar liberar un
objeto que no ha sido iniciado.
22
Figura 6. Destrucción de Objetos.
Además, “FREE” hace un llamado automático al procedimiento CLEANUPINSTANCE
que libera todos los “STRINGS” asignándoles el valor “EMPTY” y a los tipos de
datos “VARIANTS” les asigna el valor “UNASSIGNED” .
“FREE” es la forma más segura de liberar memoria.
Usando este método, la memoria que se le había asignado al objeto es liberada y
mientras no se vuelva a crear, no se puede utilizar porque genera error. (Figura 6)
Los anteriores desarrolladores de PCSIM hacían un tratamiento del objeto
suponiendo de antemano que el objeto siempre estaba creado, esto les permitía
alterarlos desde cualquier parte del programa.
Debido a este cambio, se pueden empezar a generar errores, si no se es cuidadoso
al hacer los cambios a los objetos que ya hacen parte del programa. Para evitar
este tipo de errores, se crea una variable global de tipo BOOLEANA que indique si
las funciones CrearMODULO y DestruirMODULO ya fueron ejecutadas
respectivamente (Figura 7). Esto con el fin de colocar un condicional en cada lugar
del programa donde se haga un llamado a los objetos que pertenecen al módulo y
así evitar problemas cuando se quiera llamar a un objeto que aun no ha sido
creado. De la misma manera evita crear un mismo objeto varias veces.
23
Figura 7. Definición de Variables Booleanas.
Para evitar conflictos con nombres de otras variables, esta variable se llamará
MODULOActiva, donde “MODULO” es el módulo que se desea usar en ese
momento (CACHE, PERIFÉRICOS, UCMP, etc.)
A esta variable se le asignará el valor “TRUE” cuando se ejecute la función
CrearMODULO y respectivamente se le asignará el valor “FALSE” cuando se
ejecute la función DestruirMODULO.
Cuando se intente crear un objeto durante la ejecución del programa, se debe
revisar que dicha variable no tenga el valor “TRUE”, como se muestra en la Figura
5. De ser así, no se debe crear el objeto pues esto indica que los objetos de dicho
módulo ya han sido creados.
Por defecto, esta variable se debe iniciar con el valor FALSE, haciendo ver que los
objetos no han sido creados desde el comienzo del programa.
24
Figura 8. Diagrama de flujo Creación de Objetos
CARGA DE OBJETOS
INICIO
Asignación de memoria
a los objetos
MODULOActivo = FALSE
Definición de Propiedades
de los objetos
Llamado al módulo
Mostrar OBJETOS
Objeto.Visible
MODULOActivo
No
Si
MODULOActivo =TRUE
Liberación de memoria
de los objetos
Cerrar Módulo
MODULOActivo = FALSE
Si
MODULOActivo
No
FIN
25
3.2. CARGA DE FORMAS DESDE EL INICIO
Cada pantalla que se presenta en un programa es lo que se considera como una
forma. La presencia o ausencia de estas pantallas depende de ciertas condiciones
que determina el usuario para que aparezcan o desaparezcan.
Estas formas pueden ser cargadas todas desde el comienzo del programa y
simplemente se hacen visibles o se ocultan cuando así sea requerido. Pero de esta
forma se están gastando muchos de los recursos de la máquina porque cada una
de estas pantallas tiene asignada permanentemente una parte de la memoria, algo
muy similar a lo que pasa con los objetos.
Por defecto todas las formas que se creen en el proyecto se cargan desde el
comienzo de la ejecución. Para evitar esto, en el menú de DELPHI en Proyecto –
Opciones hay una pestaña que dice FORMS (Formas) y en ella aparecen dos
tablas: AUTO-CREATE FORMS y AVAILABLE FORMS. Todas las formas que se
encuentren en la primera tabla serán llamadas desde el comienzo del programa
(todas aparecen por defecto en esta tabla) y aquellas que aparezcan en la segunda
tabla solo aparecerán cuando sean creadas en ciertas partes del programa.
En PCSIM no todas las formas pueden ser retiradas porque muchas de éstas,
poseen procedimientos que son ejecutados desde otras formas, lo que causaría
demasiados errores a la hora de la ejecución si no se hace con cuidado.
Por este motivo, en la primera parte del desarrollo del trabajo de grado se dedicó
una gran cantidad de tiempo en la identificación de estos archivos importantes que
se requerían en todo momento y aquellos que solo se necesitan cuando
determinado módulo se encuentra activado. Haciendo un cuidadoso análisis a la
tabla de referencias cruzadas incluídas en los anexos, se puede tomar la decisión si
la forma se debe o no se debe cargar desde el comienzo y si no, escoger el mejor
lugar para hacer que se cree y cargue.
26
Figura 9. Creacion de Formas.
El método para asignación de memoria para una forma es la siguiente:
if not FORMCreada then
begin
FORM:=TFORM.Create(self);
FORMCreada := TRUE;
end;
FORM.show;
donde FORMCreada es una variable global de tipo booleana que indica si la forma
ya fue creada o no. Esto con el fin de saber si se puede en determinados casos
ejecutar un procedimiento que pertenezca a esta forma.
27
Figura 10. Diagrama de Flujo Creación de Formas.
CARGA DE FORMAS DESDE EL INICIO
INICIO
FORMACreada = FALSE
Llamado a la forma
Creación y asignación de
memoria para la FORMA
FORMACreada
No
FORMACreada =TRUE
Si
Mostrar FORMA
Forma.Show
Liberación de memoria
de la forma
Cerrar Forma
FORMACreada = FALSE
Si
FORMACreada
No
FIN
28
4. REVISIÓN DEL PROGRAMA
Uno de los problemas que se ha presentado referente a la trascripción del código
AHPL, es el mal funcionamiento de la instrucción Salto a SubRutina (JSR),
problema que ningún grupo antes había solucionado.
4.1. PROBLEMA DE JSR
Creando un archivo de ejemplo para probar la instrucción JSR y ejecutándola paso
a paso,
se evidenció que durante la ejecución de dicha instrucción,
repentinamente cambiaba a la ejecución de la instrucción SBC (Resta con Carry).
En uno de los pasos de esa instrucción, el registro IR almacenaba un valor
inconsistente con la ejecución de la instrucción, alterando la secuencia lógica de la
misma.
4.2. REVISIÓN DEL CÓDIGO
Ya entrando a hacer una revisión del código justo en ese paso del programa, se
encontró la siguiente línea del programa, en la que se veía afectado el valor de IR:
unit3.ir := strtoint( concat( inttostr( bites( unit3.ir, 0, 8 )), inttostr( bites(
unit_alu.talu_obus, 8, 24 ))));
Figura 11. Ejemplo de la Instrucción JSR
29
La idea de esta línea de código es tomar el valor de MA (24 bits) y reemplazar
únicamente los últimos 24 bits del IR (32 bits) y conservar los primeros 8 bits que
precisamente son los que tienen la instrucción que se está ejecutando. Después de
la ejecución de esta instrucción, el valor cambiaba pero no al valor que se
deseaba. Así que eso ameritaba una revisión mas profunda de lo que hacía.
La instrucción BITES lo que hace es devolver en una variable de tipo Entero el
número decimal equivalente a los bits que se seleccionaron. Esta función se usa en
muchas partes del programa y funciona perfecto. El problema viene al usar la
función INTTOSTR que deja los mismos números decimales en una variable de tipo
String y luego se concatenan generando un número erróneo. El proceso de
concatenación es válido cuando la base numérica es hexadecimal.(Figura 11)
Para solucionar éste problema, se alteró el código de la siguiente forma
unit3.ir := strtoint( '$' + concat( inttohex( bites( unit3.ir, 0, 8), 2), inttohex(
bites( unit_alu.talu_obus, 8, 24), 6)));
Figura 12. Ejemplo de la función JSR corregida.
30
La diferencia con el código anterior, es que en ésta última línea de código se usa la
función INTTOHEX que devuelve en forma de String, el equivalente en
hexadecimal del entero decimal que retorna la función BITES (Figura 12). Como un
parámetro adicional de esta función se debe colocar el número de cifras que desea
que retorne la función. Si el número es pequeño, se rellena de ceros a la izquierda.
Al momento de concatenar se asegura que estén las ocho cifras del valor del IR (8
cifras hexadecimales equivale a 32 bits).
Como la variable IR es de tipo entero y hasta ahora lo que se tiene es un String
con el número equivalente en hexadecimal, se le concatena al comienzo un signo
de $ que significa que el número está en base hexadecimal y la función STRTOINT
puede hacer la conversión de forma correcta. Después de varias pruebas con esta
nueva línea de código, el programa ya pasaba de forma correcta ese paso del
AHPL que antes no lo hacía.
4.2.1 RETORNO DE SUBRUTINA (RTE)
Como una consecuencia lógica del mal funcionamiento de la función de salto a
subrutina, la función de Retorno de Subrutina tampoco había sido probada nunca.
A la hora de probar esta función se presentó el problema de que no se
recuperaban correctamente los valores de la memoria señalados por el SP,
cargando en el registro PC contenido erróneo, afectando así la ejecución.
Al observar con detenimiento el SP cada vez que iniciaba el programa, se observó
que éste tomaba un valor de forma aleatoria entre 0 y FFFFFF. La memoria ROM
del procesador PCSIM va desde la posición 000 hasta la posición 3FF y la memoria
RAM está comprendida entre las posiciones 400 y BFF. Como se puede apreciar, el
valor que puede tomar el SP puede quedar muchas veces por fuera del rango de
memoria válida. Así que se obligó a que el SP tuviera como valor inicial C00 ya que
como primer paso antes de guardar el valor del PC durante el salto a una
subrutina, el SP se decrementa en uno, apuntando a una posición válida de
memoria RAM.
Con este nuevo valor en el SP y después de muchas pruebas, se observó que las
funciones de salto y retorno de Subrutina funcionan de manera correcta.
31
4.2.2 PROBLEMA CON EL AHPL
En las pruebas que se hicieron del JSR, hubo un caso en el que cual se observó
que dos de las instrucciones no eran correctas. Es el caso del modo directo del
JSR. Una breve explicación del proceso:
IR[0:31] Å MD[0:31];
MA[8:31] Å MD[8:31];
IR[8:31] Å MA[8:31];
dejando al final en IR el mismo valor que estaba desde la ejecución de la primera
instrucción.
Haciendo una revisión del AHPL, se tiene contemplado de esta forma desde ahí. Lo
que ocurre es que en el segundo paso hay una condición, y ésta es que si es un
salto con direccionamiento indizado directo, el paso sea:
MA[8:31] Å MD[8:31] + IX[0:23]
permitiendo que en el tercer paso se guarde una copia de esta nueva dirección en
el IR. Si es solo modo directo, el IR no sufre ningún cambio.
Para este problema no fue necesario darle una solución ya que funciona de
acuerdo a lo planteado en el código AHPL.
4.3. INTERRUPCIONES
Cuando un periférico genera una interrupción para el procesador, éste procede a
ejecutar una serie de pasos que no hacen parte de la función principal que se
estaba cumpliendo. Algunos de estos pasos son propios del procesador y otros son
dados por el programador.
4.3.1 ALMACENAMIENTO DE REGISTROS DE PROPÓSITO GENERAL
En el momento que se presenta una interrupción, solo es necesario almacenar por
defecto los registros “PROGRAM COUNTER” (PC) y el “STATUS REGISTER” (SR)
que son importantes para el correcto funcionamiento del programa que se estaba
ejecutando antes de presentarse la interrupción. Los demás registros solo serán
almacenados si el programador así lo requiere. Según el código AHPL de PCSIM,
se estaban almacenando todos los Registros de Propósito General (RPG) que
32
estaban creados y así se encuentra actualmente en el AHPL del procesador. Esto
hace ineficiente el salto a la rutina de interrupción. Siguiendo la tendencia de los
procesadores en la actualidad, se debe dejar al programador la libertad de escoger
qué información desea almacenar al hacer el salto a la rutina de interrupción. Por
esta razón, se alteró el código para que por defecto se almacenara únicamente el
SR y el PC, dándole al programador la libertad de guardar los demás registros.
Lo que se hizo fue alterar el código para evitar la ejecución de estos pasos en la
rutina de interrupción, pero sin eliminarlos. Esto, previniendo que en un futuro
estos pasos vuelvan a ser necesarios con fines didácticos; en dicho caso su
restauración será sencilla y así se podrá asegurar el correcto funcionamiento del
simulador.
Figura 13. Rutina Interrupción
33
5. TRABAJOS FUTUROS
Durante el desarrollo del presente Trabajo de Grado, se han modificado muchas
líneas de código, con el fin de solucionar los problemas anteriormente
mencionados. Pero debido a la inmensurable magnitud del problema y la extensión
del código que abarca varios trabajos de grado, era un trabajo demasiado largo
para un solo grupo modificar el código de todo el procesador, tal y como se dijo en
los objetivos y en el cronograma presentado inicialmente.
Por esta razón se planteó inicialmente buscar, mediante un estudio detallado, las
soluciones apropiadas para los problemas que se enfrentaban, y luego marcar las
pautas para que en un futuro otras personas pudieran continuar con el proceso de
restauración del procesador.
Se revisaron y solucionaron los problemas encontrados en cuanto a inconsistencias
entre el código del procesador y el AHPL planteado, también los problemas debido
a fallas en el código, y problemas referentes a manejo de memoria y carga de
formas y objetos, en el módulo de UNIDADES COMUNES.
Adicionalmente, se solucionaron los problemas de la carga de formas y objetos en
las unidades de PERIFÉRICOS, CACHE y para la ventana de OTROS PINES, del
menú VER.
A continuación se plantea una posible división de los trabajos futuros de PCSIM,
que permita culminar esta labor en el menor tiempo posible.
34
6. CRITERIOS PARA LA CLASIFICACIÓN DE LOS MÓDULOS
Es importante tener en cuenta muchos factores a la hora de definir los módulos en
los que se piensa dividir PCSIM para realizar una revisión:
ƒ
Total de archivos de código: Existen 92 archivos de código los cuales tienen
una determinada función. Hay algunos que cumplen más de una función.
ƒ
Extensión de los archivos: En las primeras versiones de PCSIM todas los
cambios y modificaciones se realizaban sobre el archivo base. Pero en las
últimas versiones se han hecho las modificaciones creando varios archivos,
cada uno cumple una función específica. Esto hace el código más comprensible,
pero el número de archivos aumentó en número.
ƒ
Función del código: Si van a ser varios los grupos que trabajen en la
renovación del código de PCSIM, lo mejor es que cada grupo se especialice en
una función del programa y no altere archivos al azar de los que no conozcan
claramente su utilidad. Otro detalle importante es que para poder comprender
el código de algunos archivos se hace necesario conocer el de otros porque
llaman funciones que fueron implementadas en otras partes.
ƒ
Documentación: Ya que han sido varios los grupos de personas que han
trabajado en PCSIM, cada uno de estos grupos realizó la documentación de su
correspondiente parte a su manera. Si se quiere realizar una consulta del
código, no es práctico revisar los libros de cada una de los trabajos de grado,
es práctico encontrar la documentación básica en el mismo código.
ƒ
Estructura de PCSIM: Es bueno tener en cuenta la arquitectura que tiene el
procesador y dividir en una forma similar los módulos de PCSIM. Esto hace mas
fácil hacer comprender la arquitectura del procesador y todas sus funciones.
Además, la división que poseen actualmente algunos de los archivos de código
de PCSIM están ligeramente relacionados con este punto.
6.1. MÓDULO UNIDADES COMUNES:
En éste módulo se encuentra el núcleo del programa, es decir, es la unidad base
que se encarga de llamar a todas las funciones secundarias (alu, registros,
diagramas de tiempo, etc), así mismo de darles prioridad y administrar los
35
recursos. Así mismo, se encuentran aquellas funciones que no estan relacionandas
con la arquitectura del procesador. Tenemos:
UNIT1,FORM1: Unidad Principal.
UNIT3, FORM3: Manejo de registros.
UNIT7, FORM7: Ventana de error.
UNIT13: Unidad de desensamblador.
UNIT14, FORM14: Unidad de Presentación.
UNIT15, FORM15: Registros de Propósito General.
UNIT16, FORM16: Ventana de número de registros.
UNIT19: Unidad para deshacer el último paso.
UNIT_CREDITOS, CREDITOS: Ingenieros de Desarrollo PCSIM2000.
6.2. MÓDULO UNIDADES DE MEMORIA:
Como su nombre lo indica, son las funciones relacionada al manejo de las
memorias ROM y RWM.
UNIT4, FORM4: Ventana de memoria RWM.
UNIT5, FORM5: Unidad para el manejo del mapeo de memoria.
UNIT6: Unidad de simulación de memoria.
UNIT8, FORM8: Ventana para seleccionar posición de memoria.
UNIT12, FORM12: Ventana de memoria ROM.
UNIT20, FORM20: Ventana que pregunta "Qué memoria desea guardar?".
6.3. MÓDULO UNIDADES PERIFÉRICOS:
Estan son las unidades que se encargan de manejar los periféricos, su simulación y
presentación de resultados en pantalla.
UNIT17, FORM17: Unidad de periféricos.
UNIT18, FORM18: Ventana para escoger el número de cada periférico y la
prioridad.
6.4. MÓDULO PROCESADOR SIN SEGMENTAR:
UNIT9: Unidad de ejecución de instrucciones 1.
UNIT10: Unidad de ejecución de instrucciones 2.
UNIT11: Unidad de ejecución de instrucciones 3.
36
6.5. MÓDULO UNIDADES ALU (UNIDAD ARITMÉTICA LÓGICA):
Como su nombre lo indica, son las funciones relacionadas con la ALU del
procesador:
UNIT_ALU, FORM_ALU: Unidad que realiza todas las operaciones y funciones de
la ALU.
UNIT_ALUPINT: Unidad que pinta el comportamiento interno de la ALU.
UNIT_CLA, FORM_CLA: Unidad de sumador de 32 bits con cuatro carry-lookahead.
6.6. MÓDULO UNIDADES CACHE:
Estas son todas las unidades encargadas de manejar el uso y simulación de la
memoria cache:
UNIT_CACHE1, FORM_CACHE1: Unidad que crea la ventana de MMU (MEMORY
MANAGEMENT UNIT) de registros.
UNIT_CACHE2, FORM_CACHE2: Unidad que crea la ventana de Caché.
UNIT_CACHE3, FORM_CACHE3: Unidad que crea la ventana para
habilitar/deshabilitar Caché.
UNIT_CACHE4, FORM_CACHE4, Unidad que crea la ventana de topología interna
de MMU (MEMORY MANAGEMENT UNIT).
UNIT_CACHE5: Unidad de pasos de AHPL de la Caché.
UNIT_CACHE6: Unidad para pintar buses y actualizar registros.
UNIT_CACHE7: Unidad para pintar buses y actualizar registros.
UNIT_CACHE8: FORM_CACHE8, Unidad que crea la ventana de la tabla TR.
UNIT_CACHE9, Unidad para deshacer el último paso de Caché.
6.7. MÓDULO UNIDADES PROCESADOR SEGMENTADO Y PREDICTOR DE
BIFURCACIONES:
UNIT_PIPE1: Unidad para pintar Procesador Segmento.
UNIT_PIPE2: Unidades del Procesador Segmentado.
UNIT_PIPECONTROL: Unidad de Control para el Procesador Segmentado.
UNITRIESGOS: Unidad evaluadora de Riesgos.
UNITPREDICTOR: Unidad de Predicción de Bifurcaciones.
UNIT_PIPEDIAG_ET, FORM_PIPEDIAG_ET: Unidad manejadora de ventanas del
Pipeline.
37
6.8. MÓDULO UNIDADES DIAGRAMAS DE TIEMPO:
Aunque no es parte de la arquitectura del procesador, se tiene un módulo para las
unidades que manejan la simulación con diagramas de tiempo, ya que es una
parte el código relativamente grande:
UNIT_DIAGRAMAT, FORM_DIAGRAMAT: Comportamiento gráfico de las señales.
UNIT_DIAGRAMACONF, FORM_DIAGRAMACONF: Configuración gráfica de señales.
UNIT_SAVECHECK, FORM_SAVECHECK: Guardián de guardar página gráfica.
6.9. MÓDULO UNIDADES DMA:
Aquí se encuentran todas las funciones relacionadas con el DMA (DIRECT MEMORY
ADDRESSING) y el arbitraje de los buses:
UNIT_DMA1, FORM_DMA1: Unidad de presentación interna del DMA1.
UNIT_DMAPASOS: Unidad de ejecución del DMA1.
UNIT_DMAREG: Unidad del registro de estado rcomm del DMA1.
UNIT_DMAPINTAR: Unidad de cambios en pantalla tanto externo como interno al
DMA1.
UNIT_DMA2, FORM_DMA2: Unidad de presentación interna del DMA2.
UNIT_DMAPASOS2: Unidad de ejecución del DMA2.
UNIT_DMAREG2: Unidad del registro de estado rcomm del DMA2.
UNIT_DMAPINTAR2: Unidad de cambios en pantalla tanto externo como interno al
DMA2.
UNIT_DMA3, FORM_DMA3: Unidad de presentación interna del DMA3.
UNIT_DMAPASOS3: Unidad de ejecución del DMA3.
UNIT_DMAREG3: Unidad del registro de estado rcomm del DMA3.
UNIT_DMAPINTAR3: Unidad de cambios en pantalla tanto externo como interno al
DMA3.
UNIT_ARBITRO: Unidad para manejo del arbitro (Lógico y gráfico).
6.10. MÓDULO
UNIDAD
HORIZONTALMENTE:
DE
CONTROL
MICROPROGRAMADA
MEMORIA_UCMP: Unidad para la visualización del archivo de memoria.
UNIT_UCMPHORIZONTAL: Unidad para la visualización de la arquitectura de la
UCMP, lectura y ejecución.
UNIT_UCMPALABRA: Unidad que genera las flechas de la palabra de control.
38
UNIT_SRCONTROL: Unidad para la visualización de señales de control
SRCONTROL.
UNIT_RCONTROL: Unidad para la visualización de señales de control RCONTROL.
UNIT_CARGAR: Unidad para la visualización de señales de control CARGAR.
UNIT_CALU: Unidad para la visualización de señales de control CALU.
UNIT_CBUSINT: Unidad para la visualización de señales de control CBUSINT.
UNIT_CBUSEXT: Unidad para la visualización de señales de control CBUSEXT.
UNIT_OTROS: Unidad para la visualización de señales de control OTROS.
UNIT_LOGICASECUENCIAMIENTO: Unidad para la visualización de la lógica de
secuenciamiento.
UNIT_EJECUCIÓN: Unidad de ejecución de la unidad de control microprogramada.
6.11. MÓDULO
UNIDAD
VERTICALMENTE:
DE
CONTROL
MICROPROGRAMADA
UCMV_UNIT, UCMVFORM: Unidad de la arquitectura de la Unidad de Control
Microprogramada Verticalmente.
VERTICALMEMORY_UNIT, VERTICALMEMFORM: Unidad de la memoria de control
de la UCMV.
SRCONTROLU1, SRCONTROLF1: Unidad de visualización de SRControl en la forma
principal, contiene los bits de salida de la UCMV.
RCONTROLU1, RCONTROLF1: Unidad de visualización de RControl en la forma
principal, contiene los bits de salida de la UCMV.
CARGARU1, CARGARF1: Unidad de visualización de Cargar en la forma principal,
contiene los bits de salida de la UCMV.
CALUU1, CALUF1: Unidad de visualización de CALU en la forma principal, contiene
los bits de salida de la UCMV.
CBUSINTU1, CBUSINTF1: Unidad de visualización de CBUSINT en la forma
principal, contiene los bits de salida de la UCMV.
CBUSEXTU1, CBUSEXTF1: Unidad de visualización de CBUSEXT en la forma
principal, contiene los bits de salida de la UCMV.
INOUTUNIT, INOUTFORM: Unidad de visualización de Entradas/Salidas de la
Unidad Lógica de Secuenciamiento.
GEN_DIR_UCMV, GENFORMUCMV: Unidad de visualización de la generación de
direcciones de la Unidad Lógica de Secuenciamiento.
BIFURUNIT_UCMV, BIFFORM: Unidad de visualización de la decodificación de la
dirección de bifurcación.
VERTICALWORD_UNIT, VERTICALWORDFORM: Unidad de visualización del
esquema de la palabra de control.
CSRCONTROLUNIT, CSRCONTROLFORM: Unidad de visualización de la ayuda de
codificación de SRControl.
39
CRCONTROLUNIT, CRCONTROLFORM: Unidad de visualización de la ayuda de
codificación de RControl.
CCARGARUNIT, CCARGARFORM: Unidad de visualización de la ayuda de
codificación de Cargar.
CCALUUNIT, CCALUFORM: Unidad de visualización de la ayuda de codificación de
CALU.
CCBUSINTUNIT, CCBUSINTFORM: Unidad de visualización de la ayuda de
codificación de CBUSINT.
CCBUSEXTUNIT, CCBUSEXTFORM: Unidad de visualización de la ayuda de
codificación de CBUSEXT.
COTRASUNIT, COTRASFORM: Unidad de visualización de la ayuda de codificación
de Otras.
CBIFURUNIT, CBIFURFORM: Unidad de visualización de la ayuda de codificación de
Bifurcación.
40
7. DEFINICIÓN DE MÓDULOS
Tomando en consideración los criterios anteriormente mencionados, se propone la
división del código en los siguientes módulos:
7.1. MÓDULO 1. UNIDADES CENTRALES
En este módulo se encuentra el núcleo del programa que tiene una gran parte del
código y es la columna vertebral de PCSIM.
Adicionalmente se encuentran las unidades correspondientes a las memorias ROM
y RWM, porque se consideran unidades básicas y están muy relacionadas con el
núcleo del procesador.
Las unidades que manejan los periféricos son un módulo sencillo, y a pesar de que
está en parte relacionado con las unidades de DMA, hace uso principalmente de
las funciones encontradas en las Unidades Comunes, por esta razón se incluyen en
este módulo.
•
•
•
UNIDADES COMUNES.
UNIDADES DE MEMORIA.
UNIDADES PERIFÉRICOS.
7.2. MÓDULO 2. PROCESADOR SIN SEGMENTAR
El procesador sin segmentar es un esquema básico del procesador, que muestra
una arquitectura tal como se plantea en la asignatura de Arquitectura de
Procesadores I.
Hace uso de las memorias, de los registros de propósito general (RPG) como son
el acumulador (AC), el registro de instrucciones (IR), el registro de dirección de
memoria (MA) y el registro de datos de memoria (MD). También hace uso de la
Unidad Aritmética Lógica ALU, pero además de éstos, no utiliza las demás
unidades de PCSIM.
41
Es una parte extensa de código y es fundamental que funcionen correctamente
porque sobre éstas están apoyadas muchas de las demás funciones de PCSIM. Por
esta razón se incluyen en este modulo las siguientes unidades:
•
•
PROCESADOR SIN SEGMENTAR.
UNIDADES ALU.
7.3. MÓDULO 3. PROCESADOR SEGMENTADO
El procesador segmentado es una arquitectura un poco más compleja que la del
procesador sin segmentar, ya que ésta hace uso de las funciones de PIPELINE
para poder realizar funciones en paralelo y así incrementar el desempeño del
procesador. Esto implica que la complejidad del procesador aumenta.
A causa de esto, se implantaron las unidades de los diagramas de tiempo, que
aunque también se pueden utilizar para el procesador sin segmentar, presentan
mayor utilidad para la comprensión de las funciones de PIPELINE. Por esto se
incluyeron las siguientes unidades:
•
•
PROCESADOR SEGMENTADO.
DIAGRAMAS DE TIEMPO.
7.4. MÓDULO 4. UNIDADES AVANZADAS
Estas unidades hacen parte de las funciones avanzadas de PCSIM, pero las
unidades de memoria y periféricos, con las cuales están profundamente
relacionadas, hacen uso de las unidades comunes.
En cambio estas unidades tienen sus propias formas y hacen uso de sus propias
funciones, tanto como para la simulación, como para el entorno gráfico. Por esta
razón se agruparon es un solo módulo.
•
•
UNIDADES CACHE.
UNIDADES DMA.
7.5. MÓDULO 5. UNIDADES DE CONTROL MICROPROGRAMADAS UCMP.
42
Estas unidades fueron trabajadas por los dos últimos grupos que desarrollaron
PCSIM, y como se ha mencionado anteriormente, presentaron una propuesta de
solución a los problemas que encontraron.
De ser necesario en un futuro, estas dos unidades deberán ser modificadas
siguiendo los lineamientos planteados. Además estas unidades están íntimamente
relacionadas. Por estas razones se unieron en un solo módulo.
•
•
UNIDAD DE CONTROL MICROPROGRAMADA HORIZONTALMENTE.
UNIDAD DE CONTROL MICROPROGRAMADA VERTICALMENTE.
La definición por módulos descrita anteriormente, está sujeta a modificaciones
durante el desarrollo del trabajo de grado y dependiendo de las soluciones
planteadas y de la complejidad de los problemas que presente cada módulo.
43
8. NORMAS DE DOCUMENTACIÓN
Como se mencionó en el anteproyecto, el software generalmente está en
constante evolución, y PCSIM no es la excepción a dicha regla. Es un programa
que tiene como filosofía ayudar en el proceso de formación de los estudiantes de
arquitectura de procesadores, y así como los procesadores evolucionan en su
tecnología permitiéndoles mayor rapidez y eficiencia, PCSIM debe ser una
herramienta flexible, que sea fácilmente accesible para un programador y le
permita así implementar unidades y tecnologías nuevas para continuar con su
desarrollo.
Una de las bases más importantes, sino la más importante para ayudar a un
programador a la comprensión del código, es la documentación detallada y precisa
del código. Inclusive para un programador experto, es muy difícil comprender un
programa sin la documentación adecuada, sin olvidar la gran inversión de tiempo
que debe realizar en dicha labor.
Por esta razón, se han definido ciertas normas de documentación que le brinden
claridad al código fuente de PCSIM; y es de vital importancia que esta
documentación se realice siguiendo los lineamientos establecidos para no dificultar
la evolución de PCSIM. Es necesario que estas normas se apliquen durante el
proceso de desarrollo del software, ya que entre los ingenieros electrónicos no es
común la cultura de documentar los procesos, y esto se debe a que generalmente
los proyectos son manejados por una persona o un grupo hasta el final, y algunas
veces no se promueve o contempla la posibilidad de que otra persona o grupo
continúe con dicho proyecto.
Otro error común es dejar la fase de documentación para cuando se finalice el
proyecto, ya que en esta etapa de los proyectos generalmente parece inútil o una
perdida de tiempo realizar dicha documentación, y muchas de las cosas que al
comienzo del proyecto o durante su desarrollo fueron importantes, en esta etapa
ya no se recuerdan y esto se traduce en una documentación pobre, si no
inexistente, del código.
La documentación pobre se traduce inevitablemente en una inversión de tiempo
mucho mayor luego, y dicha falta de documentación inevitablemente esconde
errores del programa, o en muchos casos, hace parecer que existen líneas de
código o instrucciones inútiles, sin ningún propósito, pero en realidad, lo que
ocurre es que su función no este especificada en ningún lugar y por eso parecen
44
sobrantes. Puede ocurrir que en realidad sean instrucciones inútiles, o que se
podrían implementar de una forma mas eficiente, clara, etc., pero un programador
sin la documentación adecuada no se atrevería a modificarlas por temor a afectar
alguna otra parte del programa.
Lo siguientes son algunos de los lineamientos que se proponen para la
documentación de PCSIM
8.1. ESPECIFICACIONES DE LOS MODULOS, UNIDADES Y FORMAS.
PCSIM se ha segmentado en ciertos módulos dependiendo de las funciones que
cumplen las unidades que los conforman. Dichas unidades a su vez contienen
formas y variables que cumplen funciones específicas.
Cada vez que se cree un módulo nuevo o una unidad nueva, debe especificarse la
o las funciones que se realizan, como se muestra en la Figura 14. En el caso de los
módulos, debe llevarse un documento que mencione la función específica de cada
módulo nuevo, los datos que requiere y con cuales otros módulos se relaciona. De
ser clara la función del módulo.
Figura 14. Especificaciones de las unidades y formas.
45
En el caso de las unidades, esta documentación debe ser mucho más explícita.
Debe estar escrita cual es la función específica de cada unidad, incluir todos los
datos que necesita de entrada, las variables que requiere de otras unidades,
cualquier consideración teórica, matemática, de tiempos de ejecución, o
consideraciones de razonamiento esenciales para el funcionamiento de la unidad.
Igualmente debe estar escrito en que casos se utiliza dicha unidad, que función la
utiliza y porque.
8.2. DOCUMENTACIÓN DEL CÓDIGO
Es tal vez la forma más importante de documentación, ya que representa gran
parte de la claridad que puede tener el código. Es importante que a medida que se
va desarrollando el código, en paralelo se vaya realizando la documentación de las
funciones. Estas notas deben explicar detalladamente y con claridad, en un
lenguaje apropiado al contexto, que cosas están pasando y el porque de dicha
operación.
Figura 15. Documentación del código.
46
Dichos comentarios del código no deben simplemente resaltar la operación que se
está realizando, ya que no dicen nada nuevo al programador. Deben hacerse
pensando en que la persona que los va a leer no conoce aún el código, y deben
dar información clara y concisa (Figura 15). El código adecuadamente
documentado puede ser leído por cualquiera que conozca el entorno de
programación para obtener una comprensión detallada del programa.
8.3. CÓDIGO ESTRUCTURADO
Es otra de las partes vitales para la comprensión de un código desconocido. Se
refiere a todo aquello que ayude a que el código sea más claro y comprensible, sin
ser los comentarios que se usan para documentar el código. Es un tema muy
amplio y aun no está todo dicho acerca del tema, pero en general, se dice que es
todo aquello que ayuda a darle estructura al código.
En general, los nombres de las variables que se utilizan deberían contener la
información referente a su función y/o a la información que contiene. Nombres de
variables como “aux1” reducen notablemente la estructura del código. Los
nombres de las variables deben ser expresivos sin importar su longitud, mientras el
entorno lo permita, tal como se observa en la Figura 16.
Figura 16. Código Estructurado.
47
En general entre los programadores, frecuentemente se hace uso de algunos
trucos que pueden brindarle al programa eficiencia, velocidad, menos espacio en
memoria, etc., pero estos trucos generalmente solo son entendidos por el
programador y aunque funcionen correctamente, le restan estructura al código, al
hacerlos misteriosos y desconocidos para otros que vean el código. En lo posible es
recomendable evitar dicha clase de maniobras de programación para no restarle
estructura al código.
Una disposición pobre del programa en sí, reduce la estructura del programa. Un
programa bien estructurado tiene un flujo lógico del programa y de sus rutinas de
ejecución. Las funciones que ocurren al principio del programa aparecen primero, y
las funciones consiguientes deben estar ubicadas en lo posible siguiendo un
diagrama de flujo de la ejecución. Aquellas funciones que se utilizan varias veces
durante la ejecución del programa, deben estar agrupadas y marcadas como tal.
Cada una de estas funciones debe tener en lo posible, un solo punto de entrada y
de salida, de lo contrario debe estar claramente especificado.
La principal regla que se debe seguir con en fin de darle estructura al código, es
hacer todas las elecciones posibles para hacer que el código sea mas comprensible
para otras personas.
8.4. CAMBIOS Y MODIFICACIONES EN EL CÓDIGO
Es una tarea extremadamente sencilla, pero igualmente importante a todas las
otras normas mencionadas. Generalmente, con el transcurso del tiempo será
necesario realizar cambios en el código, que igualmente puede ser algo tan sencillo
como agregar más código al ya existente.
Es necesario que cada cambio que se realice en el código ya existente se
documente en el mismo código, indicando la persona o el grupo que realizó el
cambio, la fecha del cambio, las razones para realizar dicho cambio, y de ser
necesario para dar claridad, dejar el código antiguo como un comentario,
señalando que es la parte del código que se acaba de modificar.(Figura 17)
48
Figura 17. Cambios en el código.
Esto agrega estructura al código y permite que el código tenga una forma de
contar su historia a través del tiempo. También se evita así el grave problema de
realizar cambios sobre los cambios, una falla que es muy difícil de detectar, pues
no existe correspondencia entre las razones para realizar los cambios y la función
que cumplen dichos cambios.
8.5. LISTAS DE REFERENCIAS CRUZADAS
Son muy importantes cuando se trabaja en un programa que se ha planeado y
estructurado para ser altamente modular y con una gran capacidad de expansión
como PCSIM. Estas listas de referencias detallan con claridad las relaciones entre
módulos o unidades, hablando de variables o funciones.
Estas listas permiten saber como se relacionan los módulos o unidades del código
y en caso de necesitarse una modificación, se puede saber con exactitud que
funciones son afectadas al realizar un cambio.
Igualmente, ayuda a saber si existen funciones que puedan ser reutilizadas,
aunque esto no es recomendable ya que le resta modularidad la código.
49
8.6. DESCRIPCIÓN DE LAS UNIDADES Y FUNCIONES
Al inicio de las unidades y funciones debe ser documentado, de forma precisa, la
utilidad de las mismas. También es importante intentar que el nombre de la
función o unidad describa en buena parte su labor.
Esta tarea es mucho más importante cuando se trata de funciones que se utilizan
muchas veces a lo largo del código.
Es evidente que existen muchas funciones que para ser descritas no necesitan un
texto extenso, pero no por ello deben ser obviadas. Debe tener suficiente detalle
para que en el futuro cualquier error o cambio que fuera necesario, se pueda
realizar con facilidad. Estos comentarios no deben estar escritos en un lenguaje
técnico, al contrario, es preferible un lenguaje sencillo y familiar, ya que la idea no
es impresionar al programador, sino orientarlo y ayudarlo.
Si es apropiado o pertinente, se pueden incluir referencias a variables o a líneas de
código para hacer mas claro el funcionamiento de la función.
50
9. RESULTADOS OBTENIDOS
En los objetivos planteados, se perseguía la meta de que el código de PCSIM fuera
más claro y sencillo para los futuros desarrolladores del programa. Para esto se
hizo una división en módulos como se mencionó anteriormente y se realizó una
documentación detallada que incluye una serie de diagramas de bloques tratando
de mostrar qué archivos de código pertenecían a cada módulo de los que
planteamos. Pero viendo que estos diagramas resultaron un tanto complejos y tan
solo brindaban una mirada superficial a la estructura, se realizaron tablas de
referencias cruzadas en Excel que mostraban las funciones y las variables que
relacionaban cada uno de los archivos de código del programa. Con el uso de estas
dos herramientas, resulta más sencillo tomar una decisión a la hora de alterar el
código.
Figura 18. Forma principal PCSIM RELOADED
51
Después de muchas versiones modificadas de PCSIM, algunas que no lograron los
objetivos buscados, otras que daban peores resultados que la original y otras que
dejaron de funcionar casi por completo, se logró obtener una versión que propone
un mejor manejo de la memoria y aunque el módulo que se alteró no es muy
significativo, se puede ver claramente la reducción en el consumo de memoria que
presenta el programa.
Figura 19. Forma Principal PCSIM RELOADED con objetos.
52
Comparando la Figura 18 con la Figura 19, se puede apreciar que al cargar los
objetos correspondientes a la Memoria Caché, la Unidad de Periféricos, la ventana
de Otros Pines, y la ventana de Créditos, la carga en memoria debido a la creación
de estos objetos aumenta el consumo de memoria RAM, mostrando así que los
objetos anteriormente no estaban creados en la RAM del computador.
53
10. COSTOS
RECURSOS HUMANOS
Director del Proyecto
Asesor
Desarrolladores
HORAS x
PERSONA
20 semanas * 2h
20 semanas * 2h
20 semanas * 30h *
2
VALOR HORA
$40.000
$30.000
$5.000
$8.800.00
0
TOTAL RECURSOS HUMANOS
EQUIPO
Computador en alquiler
TOTAL EQUIPO
CANTIDAD
1
VALOR
UNIDAD
$600000
LICENCIAS DE SOFTWARE
DELPHI 6
CANTIDAD
1
VALOR
UNIDAD
$3000000
PAPELERÍA
Papel
CANTIDAD
2 * 500 hojas
VALOR
UNIDAD
$8.000
Fotocopias
Encuadernación
Empaste
Cartucho
Disquetes
Discos Compactos
TOTAL PAPELERÍA
1000
1
3
2
10
10
$50
$25.000
$4.000
$90.000
$1.500
$1500
SERVICIO INTERNET
007 MUNDO
Marcaciones
TOTAL SERVICIOS INTERNET
CANTIDAD
4 Meses
4000
VALOR
UNIDAD
$28.000
$80.07
COSTOS INDIRECTOS
Energía
Transporte
CANTIDAD
2000 horas
1200 viajes
VALOR
UNIDAD
$161
$1000
CANTIDAD
-
VALOR
UNIDAD
-
TOTAL LICENCIAS DE SOFTWARE
TOTAL COSTOS INDIRECTOS
OTROS
Imprevistos
TOTAL OTROS
TOTAL
$1.600.000
$1.200.000
$6.000.000
TOTAL COSTOS
54
TOTAL
$600.000
$600.000
TOTAL
$3.000.000
$3.000.00
0
TOTAL
$16.000
$50.000
$25.000
$12.000
$180.000
$15.000
$15000
$313.000
TOTAL
$112.000
$320.280
$600.280
TOTAL
$322.000
$1.200.000
$1.282.00
0
TOTAL
$380.000
$380.000
$14.985.2
80
11. PROBLEMAS EN EL DESARROLLO DEL TRABAJO DE GRADO
Una de las dificultades de este proyecto fue la falta de una documentación
unificada y clara a lo largo del código, que fue precisamente uno de los problemas
que originó el presente trabajo de grado.
PCSIM es un proyecto desarrollado por diferentes grupos, y cada cual basándose
en lo desarrollado por los grupos anteriores.
Esto implica que cada grupo programó de una manera diferente, y así mismo cada
uno tuvo una forma de documentar diferente, acomodada a los propios intereses
de cada grupo.
Esto hizo que la inversión de tiempo comprendiendo el código fuera mucho mayor
a la prevista en un principio.
Otra de las dificultades más claras es la gran extensión del código, ya que PCSIM
es un programa que se ha desarrollado en varios trabajos de grado anteriores y
tiene muchas líneas de código, tanto que ha llegado al punto de colapsar. Esto
hace demasiado largo el proceso de comprensión del código.
Finalmente se presento un retraso debido a la falta de experiencia en DELPHI, en
lenguajes de programación orientados a objetos y la dificultad para obtener
información respecto al tema.
55
12. POSIBLES CAMBIOS EN UNA FUTURA VERSIÓN.
Además de las sugerencias consignadas en anteriores trabajos de grado por los
anteriores desarrolladores de PCSIM, como la inclusión de barra de estado y
manejo de “TOOL TIPS”, la manipulación de la memoria de microprograma y la
integración de periféricos y mejoras del procesador con microprogramación, se
sugiere revisar el archivo de ayuda, ya que es el archivo de mayor tamaño dentro
de los archivos del simulador, su tamaño no es justificado ya que ni siquiera
cuenta con una tabla de contenido ni con un motor de búsqueda, lo que hace que
la ayuda de PCSIM sea difícil de manejar para los usuarios.
Se recomienda generar para dicho archivo la tabla de contenido y un índice
temático similar a los usados por los programas comúnmente, para que el usuario
pueda hacer uso de la ayuda con facilidad y familiaridad.
Este trabajo de grado deja claro la manera cómo se deben trabajar las formas y
los objetos. Se debe seguir revisando el código para lograr una mayor optimización
y esto se puede hacer por cada módulo en los que se dividió el programa.
Consideramos que es la forma mas sencilla que encontramos para hacerlo.
Depende de la habilidad del grupo si pueden encargarse de modificar uno o mas
módulos.
56
13. CONCLUSIONES
Este capítulo muestra las conclusiones del estudio orientadas hacia la parte
metodológica del trabajo de grado.
•
Se sentó un precedente respecto al tema de desarrollo de herramientas
pedagógicas, dejando presente que es necesario planear el proyecto con una
clara visión de futuro y prever los cambios y la evolución que pueda sufrir dicho
proyecto.
•
La planeación de las actividades del proyecto y junto con ella la elaboración de
un cronograma objetivo y preciso, es vital para un riguroso desarrollo del
proyecto en cuestión.
•
Es preciso realizar una selección adecuada de la información disponible para
evitar retrasos en el cronograma y obtener los resultados deseados.
•
La documentación de todos los procesos y resultados obtenidos, es vital para
que el desarrollo del proyecto no se detenga ni se retrase, al contrario, facilita
un proceso continuo y eficiente.
•
Se señaló una metodología adecuada para abordar un problema donde se
involucran innumerables aspectos y variables, y así mismo la necesidad de
tener el criterio correcto para tomar ciertas decisiones que afectan el desarrollo
de un proyecto.
57
14. BIBLIOGRAFÍA
HERBER, Jens. El gran libro de DELPHI 2 : curso intensivo, practica, técnicas
profesionales, bases de datos, multimedia. Barcelona : Marcombo, 1997.
ANDERSON, Loy. DELPHI in depth. Berkeley, California : Osborne McGraw-Hill,
1996.
ROMERO, Ana Maria; TREJOS, Jairo Andrés. Simulador didáctico de un procesador
PCSIM IV (Unidad de Control Microprogramada). Pontificia Universidad Javeriana,
2003.
BOADA, Gerardo Alberto; CALDERON, Javier Leonardo. Simulador de un
procesador PCSIM (Unidad de Control microprogramada verticalmente). Pontificia
Universidad Javeriana, 2003
CREACIÓN DE COMPONENTES EN DELPHI
http://www.el-hacker.com/foro/index.php/topic,1786.0.html
DELPHI IN A NUTSHELL. Chapter 2: The Delphi Object Model.
http://www.oreilly.com/catalog/delphi/chapter/ch02.html
SOFTWARE ENGINEERING II : Delphi language details.
http://flinflon.brandonu.ca/Dueck/1997/62368/tobject.html
FONTE, Gerard. Software Documentation. Nuts & Volts. Vol 24. No5. May 2003.
Pag 98- 101
R. Hernandez. Metodología de la investigación, México, McGraw-Hill, c2003. 3a
ED.
58
ANEXOS EN CD-ROM
ANEXO A. DIAGRAMAS DE BLOQUES
•
•
•
•
•
•
•
•
•
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Comunes
Memoria
Periféricos
ALU
CACHE
DMA
Procesador sin Segmentar
Procesador Segmentado y Predictor de Bifurcaciones
Diagramas de Tiempo
ANEXO B. TABLAS DE REFERENCIAS CRUZADAS
•
•
•
•
•
•
•
•
•
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Unidades
Comunes
Memoria
Periféricos
ALU
CACHE
DMA
Procesador sin Segmentar
Procesador Segmentado y Predictor de Bifurcaciones
Diagramas de Tiempo
59
Descargar