implementación de procesador con bus espía y guía pedagógica tg

Anuncio
IMPLEMENTACIÓN DE PROCESADOR CON BUS ESPÍA Y GUÍA PEDAGÓGICA
T.G 1213
MÓNICA MARÍA VELÁSQUEZ TORRES
NATALIA FRANCO ALFONSO
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
BOGOTÁ
2013
IMPLEMENTACIÓN DE PROCESADOR CON BUS ESPÍA Y GUÍA PEDAGÓGICA
T.G 1213
MÓNICA MARÍA VELÁSQUEZ TORRES
NATALIA FRANCO ALFONSO
Informe final
Trabajo de grado
Director
Ing. FRANCISCO VIVEROS MORENO
Jefe Sección técnicas digitales
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
BOGOTA 2013
2
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
RECTOR:
DECANO ACADEMICO:
DECANO MEDIO UNIVERSITARIO:
DIRECTOR DE CARRERA:
DIRECTOR DE PROYECTO:
P. JOAQUÍN EMILIO SÁNCHEZ GARCÍA, S.J.
LUIS DAVID PRIETO MARTÍNEZ
P. SERGIO BERNAL RESTREPO, S.J.
ING. JAIRO ALBERTO HURTADO LONDOÑO
ING. FRANCISCO VIVEROS MORENO
ARTÍCULO 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. Sólo velará porque no se publique nada contrario al dogma y 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”.
3
Dedicatoria:
En la culminación de este proceso
queremos dedicar la finalización del
mismo a Dios, que nos ha brindado
todo lo requerido para avanzar en el
proceso, igualmente a nuestros padres
y familiares quienes nos han
acompañado a lo largo de la carrera.
A nuestros profesores y en especial a
los directores de este trabajo que nos
han brindado su ayuda y comprensión.
Y por último a nosotras que hoy
podemos ver atrás un largo y arduo
camino del que hemos aprendido
grandes y valiosas lecciones.
4
AGRADECIMIENTOS
Queremos agradecer a Dios y a todas y cada una de las personas que han sido parte de nuestro proceso de
aprendizaje en la universidad, sin muchas de las personas que han estado presentes, la culminación de este
gran proyecto no sería posible. Especiales agradecimientos para nuestros padres y hermanos que han
sabido comprendernos y apoyarnos, a nuestros directores y profesores que han sido una guía invaluable en
todo el proceso. Además un reconocimiento al personal del laboratorio del departamento de electrónica
que ha sido un gran apoyo, gracias por su disposición y toda la colaboración brindada para llevar a cabo el
trabajo de Grado, además de todos los proyectos desarrollados a lo largo de la carrera.
5
TABLA DE CONTENIDO
LISTA DE FIGURAS .................................................................................................................................. 7
LISTA DE TABLAS .................................................................................................................................... 8
INTRODUCCIÓN........................................................................................................................................ 9
OBJETIVOS ................................................................................................................................................. 9
1. MARCO TEÓRICO .......................................................................................................................... 9
1.1 EL PROCESADOR .................................................................................................................... 9
1.2 AHPL:LEANGUAJE DE PROGRAMACIÓN EN HARDWARE .......................................... 9
1.3 VHDL ....................................................................................................................................... 10
2. ESPECIFICACIONES .................................................................................................................... 10
2.1 DIAGRAMA ENTRADA-SALIDA ........................................................................................ 10
2.2 DIAGRAMA DE BLOQUES DEL PROCESADOR .............................................................. 11
2.3 INTERRUPCIONES ................................................................................................................ 14
2.4 BUS ESPÍA .............................................................................................................................. 15
2.5 MAPA DE MEMORIA ............................................................................................................ 17
2.6 FORMATOS DE INSTRUCCIÓN .......................................................................................... 18
2.7 MODOS DE DIRECCIONAMIENTO .................................................................................... 19
2.7.1 INSTRUCCIONES DE 32 BITS ................................................................................. 19
2.7.2 INSTRUCCIONES DE 16 BITS ................................................................................. 20
2.8 CONJUNTO DE INSTRUCCIONES ...................................................................................... 21
3. DESARROLLO .............................................................................................................................. 24
3.1 AHPL ........................................................................................................................................ 24
3.2 PROGRAMAS PROPUESTOS ............................................................................................... 25
3.3 VHDL ....................................................................................................................................... 25
3.3.1 ENTIDADES ............................................................................................................... 25
3.3.2 TABLAS DE CONECTIVIDAD ................................................................................ 26
3.4 PROTOCOLO DE PRUEBAS ................................................................................................. 27
3.4.1 VHDL .......................................................................................................................... 27
3.4.2 HARDWARE .............................................................................................................. 28
3.5 TARJETA DE DESARROLLO ............................................................................................... 30
4. ANÁLISIS DE RESULTADOS ..................................................................................................... 31
4.1 ANÁLISIS PARA UN PROCESADOR .................................................................................. 32
4.1.1 ANÁLISIS DE RECURSOS ....................................................................................... 32
4.1.2 ANÁLISIS DE TIEMPOS........................................................................................... 34
4.1.2.1 CICLOS DE INSTRUCCIÓN PARA EL PROCESADOR ................................. 35
4.1.2.2 ANÁLISIS DE TIEMPOS UTILIZADO QUARTUS II 9.0 ............................... 35
4.1.3 ANÁLISIS DE POTENCIA ........................................................................................ 38
4.2 RESULTADOS EN SIMULACIÓN ........................................................................................ 40
4.2.1 JERARQUÍA FINAL .................................................................................................. 40
4.2.2 RTL.............................................................................................................................. 40
4.2.2.1 RTL GENERAL ................................................................................................... 40
4.2.2.2 RTL EXPANDIDO ............................................................................................... 41
4.3 RESULTADOS EN HARDWARE .......................................................................................... 42
5. CONCLUSIONES .......................................................................................................................... 43
6. BIBLIOGRAFÍA............................................................................................................................. 45
6
LISTA DE FIGURAS
Figura 1. Diagrama general: Entrada – Salida
Figura 2. Diagrama de Bloques general
Figura 3. Formato de Instrucción 32 bits
Figura 4. Formato de Instrucción 16 bits
Figura 5. Direccionamiento Directo
Figura 6. Direccionamiento Indirecto
Figura 7. Direccionamiento Indexado
Figura 8. Direccionamiento Indexado Indirecto
Figura 9. Diagrama de Jerarquía para VHDL
Figura 10. Bus Espía en Modo A
Figura 11. Bus Espía en Modo B
Figura 12. Bus Espía en Modo C
Figura 13. Tarjeta de desarrollo TARDAC
Figura 14. Reporte de compilación QUARTUS II
Figura 15. Reporte de recursos utilizados
Figura 16. Recursos por entidad
Figura 17. Reporte de Tiempo de QUARTUS II.
Figura 18. Reporte de Tiempo de QUARTUS II con Cyclone III.
Figura 19. Reporte QUARTUS II Tiempo de Setup ( )
Figura 20. Reporte QUARTUS II Tiempo de Hold ( )
Figura 21. Reporte QUARTUS II Tiempo Clock to Output ( )
Figura 22. Reporte QUARTUS II Tiempo pin to pin ( )
Figura 23. Reporte de Potencia
Figura 24. Core Dynamic Thermal Power Dissipation
Figura 25. Thermal Power Dissipation por tipo bloque
Figura 26. Thermal Power Dissipation por jerarquía
Figura 27. Corriente consumida por la Fuente de Voltaje
Figura 28. Jerarquía Final del Procesador PHERB.
Figura 29. RTL general del procesador PHERB
Figura 30. RTL expandido del procesador PHERB
Figura 31. Parte I Programa
Figura 32. Parte II Programa
Figura 33. Parte III Programa
Figura 34. Parte IV Programa
7
LISTA DE TABLAS
Tabla 1. Codificación Modo Bus Espía
Tabla 2. Codificación Registros para Modo B de Bus Espía
Tabla 3. Modo C Bus espía
Tabla 4. Mapa de Memoria
Tabla 5. Codificación Registro Fuente
Tabla 6. Codificación modo de direccionamiento
Tabla 7. Codificación Registro del operando o dato
Tabla 8. Instrucciones de 32 bits para manejo de datos
Tabla 9. Instrucciones de 32 bits ALU
Tabla 10. Instrucciones de 16 bits ALU
Tabla 11. Instrucciones de Branch
Tabla 12. Instrucciones de Rotación y Desplazamiento
Tabla 13. Instrucciones Especiales
Tabla 14. Instrucciones de Interrupciones
Tabla 15. Instrucciones de Miscelánea
Tabla 16. Programa Prueba Bus Espía
Tabla 17. Número teórico de registros utilizados por el procesador
Tabla 18. Tiempo de Duración de las instrucciones
8
INTRODUCCIÓN
En el presente documento se encuentra la recopilación de todo el trabajo desarrollado, con el propósito de
contribuir al proyecto PCSIM, este proyecto de larga trayectoria en la facultad de ingeniería, que empezó
a desarrollarse en el año de 1999, con la idea de realizar un programa que permitiera a los estudiantes
conocer y comprender la arquitectura de un procesador. Desde ese entonces, se han venido realizando
algunas modificaciones al programa, es decir varias versiones del software, además se han realizado dos
versiones implementadas en hardware, con bastante éxito. En este trabajo se presenta una versión más,
que permite la evolución del proyecto enfocado a dos condiciones fundamentales para el aprendizaje de
arquitectura de computadores, el manejo de las interrupciones y la idea del bus espía.
Se considera que la modificación de las interrupciones se hace necesaria cuando los modos planteados en
la versión anterior resultan con derivaciones no deseadas al momento de ponerlas a prueba. Replantear las
especificaciones del bus espía proviene de la búsqueda de simplicidad y estructura de la idea original
presentada como trabajo de grado en el departamento. Así todo el proyecto se desarrolla en torno a definir
unas especificaciones que cumplan con las expectativas de las ideas en pro del aprendizaje de esta área del
conocimiento.
El proyecto se llevó a cabo sobre la versión anterior, presentada como Binaric que correspondió a un
trabajo de grado realizado en el año 2007 por Bibiana Álvarez y Nathalie Pinilla, quienes realizaron la
segunda versión implementada en hardware del proyecto inicial, y cabe mencionar que el procesador será
implementado siguiendo la arquitectura y el conjunto de instrucciones de las versiones anteriores, para
continuar con el proyecto de PCSIM y que sea coherente con todo el desarrollo y la trayectoria académica
que éste ha tenido, por ende contribuir con el objetivo pedagógico de éste gran proyecto, exclusivo de la
universidad Javeriana.
OBJETIVOS
Desarrollar e implementar la tercera versión en hardware de PCSIM
-
Diseñar e implementar un sistema de visualización del estado del procesador en tiempo real,
denominado bus espía.
Lograr concebir especificaciones de funcionamiento claras y sencillas para el trabajo del procesador
con el medio, es decir el manejo de las interrupciones.
Crear un manual demostrativo, que guie al usuario mediante programas sencillos, a través del manejo
adecuado del procesador y por ende facilite el aprendizaje.
Realizar una descripción adecuada y correctamente documentada del procesador en AHPL (A
Hardware programming language).
Contribuir a la evolución del proyecto denominado PCSIM, principalmente para que sea agradable al
estudiante, el trabajo con el mismo.
1. MARCO TEÓRICO
1.1 El Procesador
Una de las grandes preguntas que le surge al estudiante es ¿Qué es un procesador?, como primera
respuesta que se obtiene es que un procesador es la parte fundamental de un computador o como se diría
en la cotidianidad, el cerebro de un computador. Aunque cabe aclarar que en la actualidad no solo se
encuentran en los computadores comúnmente conocidos, sino en un sinfín de artefactos que se usan a
9
diario. Es por esto, que es de vital importancia tener una definición precisa acerca del concepto de un
procesador para así entender el diseño realizado en este proyecto.
Aunque si bien es cierto, el procesador es una parte fundamental, una definición técnica sería: un
procesador es un sistema digital complejo encargado de realizar la ejecución de diversas instrucciones,
compuesto por un conjunto de registros que almacenan datos, una unidad aritmético-lógica (ALU), una
unidad de control y las diferentes interconexiones entre ellas.
A lo largo de los años, las arquitecturas de cada procesador han evolucionado para obtener mayor
desempeño y velocidad, sin embargo, se ha mantenido la estructura básica descrita en el párrafo anterior.
Hoy en día se diseñan procesadores con mejores especificaciones para que las instrucciones que se deben
ejecutar tomen el menor tiempo posible; un ejemplo de estas mejoras corresponde al procesamiento
paralelo donde se unen dos o más núcleos como los es el Intel Core I3 o I5, dando a lugar a la denominada
tecnología de núcleos múltiples.
Éste proyecto no pretende ser un procesador de mayor velocidad o con múltiples mejoras comerciales, el
objetivo principal es desarrollar un procesador para que los estudiantes interesados en el área de técnicas
digitales puedan tener un acercamiento más dinámico y profundo a una arquitectura, aunque sencilla,
brinde la posibilidad de explorar y entender los conceptos básicos de éste tema de que es tan apasionante.
1.2 AHPL : Lenguaje de programación de Hardware
El lenguaje AHPL (A Hardware Programming Language) fue creado por los ingenieros Frederick J. Hill y
Gerald R. Peterson en los años 80s. Este lenguaje surge de la necesidad de realizar una descripción
sencilla y clara de un sistema digital complejo. Este lenguaje de programación utiliza una descripción
sencilla con convenciones lógicas para tener una descripción cercana al hardware, este se basa
principalmente en un lenguaje de transferencia de registros.
Para este proyecto se contaba con alguna parte del código en AHPL, proveniente del resultado del trabajo
de grado denominado Binaric, por lo tanto se siguió la sintaxis y la distribución del uso de recursos. Cabe
notar que resulta de gran importancia entender en detalle el funcionamiento del AHPL, ya que esta
descripción corresponde a la unidad de control del procesador, que como su nombre lo indica controla las
operaciones que debe realizar.
1.3 VHDL : Lenguaje de Descripción de Hardware
Después de realizar una descripción en AHPL, el siguiente gran paso corresponde a la descripción en
VHDL estas siglas son el resultado de la unión entre VHSIC (Very high speed integrated circuit) y HDL
(Hardware description language). Este lenguaje es de vital importancia ya que corresponde a la
descripción en hardware para su posterior implementación en un dispositivo de lógica programable FPGA.
Este lenguaje permite modelar y simular sistemas digitales desde un nivel bajo hasta un nivel alto, llamado
también un diseño jerárquico. Hay tres niveles de descripción, el primero siendo comportamental, el
segundo estructural y finalmente un nivel de descripción de flujo de datos o RTL (siglas en ingles).
2. ESPECIFICACIONES
2.1 Diagrama Entrada – Salida
En el siguiente diagrama general correspondiente a la Figura 1, se observan las entradas y salidas del
procesador.
10
24
CLK
ADBUS
RESET
READ
SWAIT
WRITE
INT
PRIN
MODO_ESPIA
BUS_ESPIAR
DBUS
IACK
3
PHERB
IOREQ
2
CS_ROM
5
CS_RAM
32
40
BUS_ESPIA
Figura 1. Diagrama general: Entrada - Salida
Las señales de entrada son:

CLK: señal de reloj con una frecuencia máxima de 4MHz. Cada uno de los bloques del procesador
manejan borde de subida para la respectiva carga de datos, señales de control y operaciones.

RESET: señal asíncrona que lleva al procesador a su estado inicial.

SWAIT: señal activa en alto, es un bit que le indica al procesador que debe esperar antes de considerar
válido el dato contenido en el bus de datos DBUS [0:31], evitando que el bus tome alta impedancia sin
haber entregado el dato. Esta señal se utiliza para operaciones de lectura, escritura, importación y
exportación de periféricos.

INT: señal asíncrona, activa en alto de un bit que le informa al procesador que hay un periférico
interrumpiendo y espera a ser atendido. El periférico debe mantener esta señal hasta que el procesador
le informe que lo va a atender.

PRIN: señal de tres bits que actúa en los modos B, C y D de interrupciones. En el modo B informa la
prioridad de los 8 periféricos que pueden interrumpir. En los modos C y D cada periférico tiene su línea
de interrupción que corresponde a cada bit de esta señal.

MODOESPIA: señal de dos bits por la cual el usuario elige el modo en que el bus espía trabaje.

BUS_ESPIAR: señal de cinco bits por la cual el usuario elige el registro a ver en el modo B del bus
espía.

DBUS: es un bus bidireccional de treinta y dos bits que contiene los datos para la respectiva
interconexión entre la memoria, periféricos y el procesador.
Las señales de salida son:

ADBUS: es un bus de veinticuatro bits que contiene la dirección de memoria o del periférico a la cual
se desea acceder
11

READ: es una señal de un bit, activa en bajo, la cual indica que el dato contenido en el bus de
direcciones ADBUS [0:23] corresponde a la dirección efectiva. Esta señal se utiliza para operaciones
de lectura desde memoria o importación desde un periférico.

WRITE: es una señal de un bit, activa en bajo, la cual establece la operación de escritura en memoria o
exportación de periférico.

IACK: es una señal de un bit, que le indica al periférico que está interrumpiendo que va a ser atendido.

IOREQ: es una señal de un bit; cuando se encuentra en cero indica que la instrucción que se está
ejecutando interactúa con la memoria, de lo contrario interactúa con un periférico.

CS_ROM: es una señal de un bit que controla el ciclo de lectura de la memoria ROM.

CS_RAM: es una señal de un bit que controla el ciclo de escritura de la memoria RAM.

BUS_ESPIA: es un bus de 40 bits, mediante el que se observa el contenido interno de los registros
junto con el paso de control en el cual se encuentra el procesador. La organización de los bits de este
bus variara de acuerdo al modo que el usuario elija.
2.2 Diagrama de bloques del procesadorLa arquitectura de PHERB se basa en una arquitectura RIC de
tres buses, diseñado por Frederick J. Hill y Gerald R. Peterson. En el siguiente diagrama se presenta el
diagrama de bloques del procesador.
Figura 2. Diagrama de Bloques general

Bloque Memorias: es un bloque externo al procesador que contiene memorias ROM (solo lectura) y
RAM (lectura y escritura), estas almacenan los datos y las instrucciones a ejecutar.
12

ALU: este bloque interno del procesador se encarga de realizar las operaciones aritméticas y lógicas
según la instrucción, los datos se manejan en complemento a dos. De igual forma, este bloque se utiliza
para incrementar o disminuir una dirección de memoria.

ABUS: corresponde a un bus interno del procesador de treinta y dos bits [0:31]. Este bus interconecta
la salida del registro de direcciones (MA), de instrucciones (IR) y de datos (MD) con una entrada de la
unidad aritmético – lógica (ALU).

BBUS: corresponde a un bus interno del procesador de treinta y dos bits [0:31]. Este bus interconecta la
salida del registro acumulador (AC), contador de programa (PC), pila (SP), índice (IX), desplazamiento
(SHC) y de propósito general (RPG) con la otra entrada de la unidad aritmética – lógica (ALU).

OBUS: corresponde al bus de salida de la unidad aritmético – lógica (ALU), es un bus de treinta y dos
bits. Por medio de este, sale el resultado de alguna operación ejecutada por la ALU.

] que recibe los datos desde el bus de datos
Registro de Datos (MD): Es un registro de 32 bits [
(
)
(DBUS) o del bus de salida de la ALU
, utilizado para almacenar los datos provenientes de
memoria o de un periférico y los datos que van hacia memoria o hacia un periférico.

Registro de Direcciones (MA): Es un registro de 24 bits [
) y desde el bus de direcciones (
salida de la ALU (
efectiva de memoria o de periférico.

] que recibe los datos desde el bus de
Registro de Instrucciones (IR): Es un registro de 32 bits [
(
).
salida de la ALU
Durante el ciclo de fetch, carga el dato con la instrucción almacenado en el
registro de datos para ser decodificada y luego proceder a su ejecución.

] que recibe los datos desde el bus de
Contador de programa ( ) Es un registro de 24 bits [
) que almacena e incrementa la dirección de la siguiente instrucción a
salida de la ALU (
ejecutar. La dirección de arranque corresponde a
.

] que recibe los datos desde el bus de
Registro Acumulador (AC): Es un registro de 32 bits [
). Por medio de este registro se realizan operaciones y se guardan de forma
salida de la ALU (
temporal.

Registros de Propósito general (RPG): Son seis registros
,
, ,
,
y ; cada uno de 32
]. Se utilizan para almacenar datos provenientes del bus de salida de la ALU (
).
bits [

], recibe los datos desde el bus de
Registro Puntero de pila (SP): Es un registro de 24 bits [
(
).
salida de la ALU
Este se encarga de almacenar la dirección de memoria desde la cual se
guardan las direcciones a las cuales se debe retornar después de una subrutina o de una interrupción,
como también se almacenan los datos que el usuario desee.

] , recibe los datos desde el bus de salida de la
Registro Índice (IX): Es un registro de 24 bits [
(
).
ALU
Este registro contiene un dato que se suma con los 24 bits menos significativos del
registro de instrucciones para la ejecución de una instrucción con direccionamiento indexado.

Registro de Estados (SR): Es un registro de 10 bits [0:9] que contiene siete banderas, cada una de un
bit; estas indican el estado y las operaciones del procesador, además tiene 3 bits que indican la
13
] que recibe los datos desde el bus de
). Se utiliza para colocar la dirección
prioridad de la interrupción que el procesador debe atender, esto se utiliza para los modos B, C y D. A
continuación se presenta la organización de los bits en el registro:
[ ] Indica si el resultado de una operación es cero.
[ ] Indica si hubo acarreo.
[ ] Indica si hubo desbordamiento en una operación de suma o resta.
[ ] Indica si el número es negativo.
[ ] Indica si la última instrucción ejecutada era de 16 bits.
[ ] Indica si se habilitan las interrupciones.
[
] Indica la prioridad de la interrupción a ejecutar, utilizado en modo B, C y D.
[ ] Indica ejecución normal de la instrucción.

] que recibe los datos
Registro de Rotación y Desplazamiento (SHC): Es un registro de 5 bits [
) e indica el número de movimientos que faltan por realizar en el
del bus de salida de la ALU (
registro acumulador para que se termine de ejecutar la instrucción de rotación o desplazamiento. El
máximo de movimientos permitido es de treinta y dos bits.

], recibe los datos desde el bus de salida
Registro de Máscara (MR): Es un registro de dos bits [
) y contiene el modo de interrupción el procesador debe ejecutar cuando un
de la ALU (
periférico este interrumpiendo.

Registro de Interrupciones (INTR): Es un registro de tres bits, utilizado para el modo D de
interrupciones. Este registro cambia la prioridad dinámicamente.

Registro Bus Espía (RBE): Es un registro de tres bits [0:2] utilizado para guardar el modo en que
actúa el bus espía, de esta forma, de acuerdo al bit que se encuentre en uno activara los datos que se
deban mostrar.
2.3 Interrupciones
El módulo de entrada salida interrumpirá al procesador para solicitar su servicio cuando esté preparado
para intercambiar datos con él. La serie de eventos en hardware cuando sucede una interrupción son:
1. El dispositivo envía una señal de interrupción al procesador.
2. El procesador termina la ejecución de la instrucción en curso antes de responder a la interrupción.
3. El procesador comprueba si hay interrupciones, determina que hay una y envía una señal de
reconocimiento. La señal de reconocimiento hace que el dispositivo desactive su señal de
interrupción.
4. El procesador se prepara para transferir el control a la rutina de interrupción. Debe guardar la
información necesaria para continuar el programa en curso en el punto en el que se interrumpió. La
información que se debe guardar es el estado del procesador es decir almacenar la información
necesaria para que el procesador pueda continuar la ejecución previa a la interrupción, además
dependerá del usuario y la posición de la siguiente instrucción a ejecutar.
5. El procesador carga el contador de programa con la posición de inicio del programa de gestión de la
interrupción solicitada. Puede haber un solo programa, uno por cada tipo de interrupción, o uno por
cada dispositivo y cada interrupción. Si hay más de una rutina el procesador debe determinar a qué
programa llamar.
6. Se deben guardar los contenidos de los registros necesarios para el procesador, dado que estos
registros pueden ser utilizados en la rutina de interrupción.
14
7. La rutina de interrupción puede continuar
8. Cuando el proceso de la interrupción ha terminado, los valores de los registros almacenados se
recuperan de la pila.
9. Recuperar los valores del contador de programa.
Después de un largo proceso de ideas acerca de los distintos modos de interrupciones que el procesador
puede manejar, finalmente, se llegó a los siguientes cuatros modos A, B, C y D, descritos a continuación:

Modo A
Este modo consiste en una sola línea de interrupción, por la cual solo interrumpe un periférico a la vez, y
es auto-vectorizado (La rutina requerida para la atención del periférico está contenida en memoria y esta
previamente direccionada). En este modo el periférico envía la señal de requerimiento de atención (IRQ)
por la línea INT, el procesador al recibir la señal, almacena la información requerida en la pila, para poder
detenerse y luego le envía al periférico la señal de reconocimiento (IACK), en seguida éste es atendido
con el salto a la subrutina correspondiente a este modo de interrupción, que se encuentra en la posición
000000h de memoria. Al finalizar la subrutina de atención, el procesador vuelve a la instrucción, en la que
se encontraba antes de recibir la señal de interrupción, cargando la información de la pila nuevamente en
los registros, para continuar con la ejecución del programa. Cabe aclarar que la primera instrucción del
procesador no puede ser interrumpida.

Modo B
Este modo se compone de tres líneas de interrupción, una por cada periférico y este modo es vectorizado
(La rutina de atención debe ser introducida a través del bus de datos). La prioridad se define mediante una
tabla de prioridad utilizando los bits 6 a 8 del registro de estados, en este modo el periférico envía la señal
de interrupción a través de su línea respectiva y un hardware interno procesa la interrupción, da la
prioridad y envía la señal de reconocimiento, dependiendo de la cantidad de periféricos que lo requieran
los atiende uno por uno, cada periférico entregara por el bus de datos la dirección de la rutina a ejecutar.
El procedimiento que realiza el periférico por cada atención es igual al del modo A.

Modo C
Este modo consiste en tres líneas de interrupción, mediante las cuales pueden interrumpir distintos
periféricos, la cantidad permitida por el número de bits de la máscara, en este caso la máscara tendrá tres
bits, es decir podrán tener acceso 8 periféricos. El periférico enviara la señal de requerimiento a través de
la línea INT y la máscara por otra línea PRIN, lo que permite decodificar la prioridad y el vector de las
rutinas de interrupción que correspondan. La rutina de atención por parte del procesador será igual que en
los modos descritos anteriormente.

Modo D
Este modo consiste en tres líneas de interrupción, una para cada periférico. Cada periférico envía su señal
de interrupción por la línea INT y tendrá asignada una línea de PRIN para que el procesador tenga
conocimiento de cual periférico debe atender primero. Este procesador cuenta con un registro INTR [0:2]
de tres bits respectivamente que decide que periférico debe atender primero en caso de que haya más de
uno interrumpiendo para después cambiar la prioridad de atención de una forma cíclica. El objetivo de
este modo es que la prioridad cambie para que todos los periféricos tengan la posibilidad de ser atendidos.
15
100
010
010
100
001
001
El objetivo es recalcar que la atención a todos los periféricos es una de las actividades más relevantes en el
uso de los procesadores, por ejemplo actualmente al comprar un computador se tiene una gran variedad de
posibles periféricos y el procesador debe estar en la capacidad de atenderlos a todos y de cumplir las
expectativas del usuario. Por ejemplo así como se creería que debe tener mayor prioridad el disco sobre la
impresora, si el disco interrumpe todo el tiempo la impresora jamás podrá ser atendida y el usuario no
tendrá la posibilidad de utilizar la impresora como periférico. Es por esta razón que se crea este modo de
interrupción.
2.4 Bus Espía
El bus espía es una función del procesador en la que el usuario dispone de un bus de 40 bits, que le
permite revisar la secuencia de ejecución de las instrucciones. Ésta función permite visualizar un paso de
control, y simultáneamente el contenido de un registro o ver la transferencia de los datos en cada registro
de acuerdo a la instrucción que se va a ejecutar.
Para elegir el modo del bus espía, el usuario cuenta con una entrada denominada MODOESPIA [0:1]
codificada de la siguiente forma:
MODO
A
B
C
D
MODOESPIA[0]
MODOESPIA[1]
0
1
1
0
1
1
0
0
Tabla 1. Codificación Modo Bus Espía
A continuación se describe cada uno de los modos en que el bus espía puede trabajar:

Modo A
En este modo se pretende visualizar la secuencia de la máquina de control para que el usuario revise si el
procesador está activando los pasos adecuados de cada instrucción. Para activar este modo, el usuario
ingresara la codificación 01 por medio de un dip-switch. Al activarse este modo, el bus espía se mostrará
de la siguiente forma:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Codificación paso de control
En decimal

Modo B
El objetivo de éste modo es hacer posible la observación de la secuencia de la máquina de control y el
contenido de algún registro. Para activar este modo, el usuario ingresara por medio MODO_ESPIA “10” e
16
ingresará por BUS_ESPIAR la codificación del registro que desea ver. En este modo se verá al mismo
tiempo el paso de control y el contenido de un registro de tal forma, que el usuario solo podrá seleccionar
un registro para su visualización. La organización de los bits en el bus espía se realiza de manera que en
los ocho bits más significativos se cargue la codificación en binario del estado en el que se encuentra el
procesador y en los treinta y dos bits restantes se cargará el contenido del registro seleccionado, así:
0 0 0 0 0 0 0 0 0
Contenido del Registro [8:39]
Codificación paso de control
En decimal
La codificación para cada uno de los registros se da en la siguiente tabla:
REGISTRO
BUS_ESPIAR
[0]
BUS_ ESPIAR
[1]
BUS_ ESPIAR
[2]
BUS_ ESPIAR
[3]
BUS_ ESPIAR
[4]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
REGISTRO DE DATOS(MD)[0:31]
REGISTRO DE DIRECCIONES(MA)[0:23]
CONTADOR PROGRAMA(PC)[0:23]
REGISTRO ACUMULADOR(AC)[0:31]
PUNTERO DE PILA(SP)[0:23]
REGISTRO INDICE(IX)[0:23]
REGISTRO DE ESTADOS(SR)[0:9]
REGISTRO ROTAC Y DESPLA(SHC)[0:4]
REGISTRO DE MASCARA(MR)[0:1]
RA(RPG)[0..31]
RB(RPG)[0..31]
RC(RPG)[0..31]
RD(RPG)[0..31]
RE(RPG)[0..31]
RF(RPG)[0..31]
REGISTRO DE INSTRUCCIONES[0:32]
Tabla 2. Codificación Registros para Modo B de Bus Espía

Modo C
La activación de este modo se hará ingresando “11” por medio de MODO_ESPIA. El usuario al elegir
este modo podrá ver la transferencia de los datos entre los registros de acuerdo a la instrucción elegida,
como también el paso de control en el que se encuentra. Se debe aclarar que en un paso en los que actúan
dos o más registros se deberá introducir por medio de BUS_ESPIAR la codificación del registro que se
desea ver, permitiendo así una mayor flexibilidad para el modo. La organización de los bits del bus espía
se realiza de la misma forma que en el modo B. En la siguiente tabla se presenta los registros que se
muestran en cada paso:
PASO
1
2
3
4
5
6
7
REGISTRO
MA
ADBUS
ADBUS
MD
PC
-
PASO
31
32
33
34
35
36
37
REGISTRO
ADBUS
ADBUS
MD
MD
SR
PC
SP
17
PASO
61
62
63
64
65
66
67
REGISTRO
DBUS
DBUS
SR
SR
MR
SR
PASO
91
92
93
94
95
96
97
REGISTRO
MA
ADBUS
ADBUS
MD
-
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
MA
MD
IR
MD
MA
ADBUS
ADBUS
MD
MA
ADBUS
ADBUS
MD
AC
PC
IR
AC
ADBUS
ADBUS
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
MD
ADBUS
ADBUS
ADBUS
PC
MD
Codificación
SHC
AC
SHC
PC
IR
IR
ADBUS
ADBUS
MD
AC
AC
Tabla 3. Modo C Bus espía
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
SP
MD
ADBUS
ADBUS
SP
ADBUS
ADBUS
MD
PC
AC
MA
ADBUS
MD
PC
SR
SR
ADBUS
ADBUS
MD
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
SP
MA
PC
SP
MA
SR
DBUS
DBUS
SP
ADBUS
ADBUS
MD
SR
SP
ADBUS
ADBUS
MD
PC
-
MD
Por ejemplo, si el usuario elige este modo ocurrirá lo siguiente: cuando el procesador llegue al paso
número “10” mostrará el registro de direcciones (MA), luego al llegar al 13 mostrará el registro (MD), y
así sucesivamente. De la Tabla 3, se observa que el paso “44” tiene el nombre “codificación” esto se debe
a que precisamente en ese estado de control varios registros interactúan, de tal forma, que el usuario
deberá ingresar por medio de BUS_ESPIAR el registro que desea ver para poder observar que sucede en
el paso y en el registro, es decir ambas condiciones se deben cumplir. La codificación de este registro
corresponde a la misma utilizada por el Modo B, Tabla 2 Codificación Registros para Modo B de Bus
Espía.

Modo D
Si el usuario no desea utilizar el bus espía entonces deberá dejar MODO_ESPIA en “00” de tal forma, que
el bus espía se encontrará inactivo hasta que el usuario ingrese por esta señal de dos bits el modo en que
desea estar.
2.5 Mapa de Memoria
El mapa de memoria corresponde a una tabla de datos que indica precisamente como está organizada la
memoria; en la tabla se observa el tamaño total de la memoria al igual que se dan las posiciones asignadas
para cada operación. En la siguiente tabla se observa el mapa de memoria para el procesador.
DIRECCIÓN
000000H
000001H
000002H
000003H
000004H
000005H
000006H
000007H
000008H
DESCRIPCIÓN
Dirección de la rutina de Interrupción para la Máscara "000"
Dirección de la rutina de Interrupción para la Máscara "001"
Dirección de la rutina de Interrupción para la Máscara "010"
Dirección de la rutina de Interrupción para la Máscara "011"
Dirección de la rutina de Interrupción para la Máscara "100"
Dirección de la rutina de Interrupción para la Máscara "101"
Dirección de la rutina de Interrupción para la Máscara "110"
Dirección de la rutina de Interrupción para la Máscara "111"
Dirección de memoria de la primera instrucción a ejecutar
18
000009H
a
0003FFH
000400H
a
00043FH
Direcciones para manejo del usuario
Direcciones de los periféricos utilizados en Importar
000440H
a
00047FH
000480H
a
0004BFH
0004C0H
a
0004FFH
000500H
a
FFFFFFH
Direcciones de los periféricos utilizados en Exportar
Direcciones para manejo del usuario
Direcciones de las instrucciones después de realizar
Reset por Software(RTS)
Direcciones para manejo del usuario
Tabla 4. Mapa de Memoria
2.6 Formatos de Instrucción
Debido a que PHERB al igual que BINARIC manejan dos tipos de instrucciones, 32 y 16 bits
respectivamente; a continuación se presenta el formato de instrucción para cada una.

Instrucciones de 32 bits
0
1 2
Opcode
3
4
1
5
6
Dir
[8………..31]
Dirección
7
Figura 3. Formato de Instrucción 32 bits
[0:3]  Corresponde al código de operación de cada instrucción.
[4]  Este bit en uno significa que la instrucción es de 32 bits.
[5:7]  Estos bits corresponden a la codificación del modo de direccionamiento.
[8:31]Corresponden a la dirección donde se encuentra el operando.

Instrucciones de 16 bits
0
1 2 3
Opcode
4
0
5 6 7 8 9 10 11 12 13 14
1
AD1
MODE
AD2
Figura 4. Formato de Instrucción 16 bits
15
[
] Corresponde al código de operación de cada instrucción.
[ ] Este bit en cero indica que la instrucción es de 16 bits.
[ ] Bit utilizado para futura expansión
[
] Especifica la codificación del registro que se utiliza como destino para el resultado de una
operación, como también se utiliza como el registro donde se encuentra el dato a ser utilizado para
ciertas operaciones como la suma.
[
] Especifica el modo de direccionamiento sea registro fuente o dato inmediato.
[
] Especifica la codificación de un registro o un dato inmediato para ser operado.
2.7 Modos de direccionamiento
2.7.1 Instrucciones de 32 bits
19


Inmediato (100): El operando se da en los 24 bits menos significativos, es útil para inicializar los
registros.
Directo (000): Los 24 bits menos significativos de la instrucción contiene la dirección efectiva de
memoria donde se encuentra el operando.
Opcode
Dirección
Operando
Figura 5. Direccionamiento Directo

Indirecto (001): Los 24 bits menos significativos de la instrucción contiene la posición de memoria en
donde se encuentra la dirección efectiva donde está el operando.
Opcode
Dirección
Dirección
Operando
Figura 6. Direccionamiento Indirecto

Indexado (010): Los 24 bits menos significativos de la instrucción se suman con el contenido del
registro índice ( ), teniendo como resultado la dirección efectiva donde se encuentra el operando.
Opcode
Dirección
+
Operando
IX
Figura 7. Direccionamiento Indexado

Indexado Indirecto (011): Los 24 bits menos significativos de la instrucción se suman con el
contenido del registro índice ( ) dando como resultado la posición de memoria de la nueva instrucción
de 32 bits, donde los 24 bits menos significativos de esta instrucción corresponden a la dirección efectiva
en donde se encuentra el operando.
Opcode
Dirección
+
IX
Dirección
Operando
Figura 8. Direccionamiento Indexado Indirecto
2.7.2 Instrucciones de 16 bits
Las instrucciones de 16 bits manejan dos tipos de direccionamiento, inmediato y registro fuente. El
primero indica en la instrucción el operando a utilizar, mientras que el segundo modo indica de cual
registro se debe tomar el operando para realizar la instrucción. A continuación se presentan las
codificaciones para cada registro:
20
[
] Especifica la codificación del registro que se utiliza como destino para el resultado de una
operación, como también se utiliza como el registro donde se encuentra el dato a ser utilizado para ciertas
operaciones como la suma. Los registros a los que se puede hacer referencia con estos bits son:
0000
Registro Acumulador
1000
Registro Índice
1111
Registro puntero de pila
0001
Registro de propósito general
0010
Registro de propósito general
0011
Registro de propósito general
0100
Registro de propósito general
0101
Registro de propósito general
0110
Registro de propósito general
Tabla 5. Codificación Registro Fuente
[
] Especifica el modo de direccionamiento sea registro fuente o dato inmediato.
00
Registro fuente
11
Dato Inmediato
Tabla 6. Codificación modo de direccionamiento
[
] Especifica la codificación de un registro o un dato inmediato para ser operado.
0000
Registro Acumulador
1000
Registro Índice
1111
Registro puntero de pila
0001
Registro de propósito general
0010
Registro de propósito general
0011
Registro de propósito general
0100
Registro de propósito general
0101
Registro de propósito general
0111
Registro de propósito general
Tabla 7. Codificación Registro del operando o dato
Es importante tener en cuenta que si se desea realizar un programa con instrucciones de 16 y 32 bits
simultáneamente, la instrucción de 16 bits para ser seguida por una de 32 bits debe tener en sus bits menos
significativos una instrucción de NOP, a menos que sean dos de 16 bits en una misma dirección.
2.8 Conjunto de Instrucciones
El procesador cuenta con las siguientes instrucciones:
INSTRUCCIONES DE 32 BITS MANEJO DE DATOS
1
INSTRUCCIÓN
DESCRIPCIÓN
MVF
Mover hacia
memoria
2
INC
Incremento
3
DEC
Decremento
MODO
Directo
Indirecto
Indexado
Indexado Indirecto
CICLOS
13
18
13
18
BANDERAS
-
Directo
Indirecto
Indexado
Indexado Indirecto
Directo
Indirecto
Indexado
Indexado Indirecto
15
19
15
19
15
19
15
19
-
21
4
JMP
5
JSR
Directo
Indirecto
Indexado
Indexado Indirecto
Directo
Salto a
Indirecto
subrutina
Indexado
Indexado Indirecto
Tabla 8. Instrucciones de 32 bits para manejo de datos
18
22
18
22
12
16
12
16
-
CICLOS
16
19
BANDERAS
-
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
15
19
12
16
19
15
19
12
16
19
15
19
12
16
19
15
19
12
16
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
Directo
Indirecto
Indexado
Indexado Indirecto
Inmediato
19
15
19
12
16
19
15
19
12
16
19
15
19
12
16
19
15
19
12
16
19
15
19
12
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Salto
incondicional
INSTRUCCIONES DE 32 BITS MANEJO DE DATOS
INSTRUCCIÓN
DESCRIPCIÓN
MODO
Directo
Indirecto
6
MVT
Mover desde
memoria
7
CMP
Comparación
aritmética
8
SBC
Resta con
acarreo
9
SUB
Resta
10
ADC
Suma con
acarreo
11
ADD
Suma
12
ORA
OR lógica
13
AND
AND lógica
14
XOR
XOR lógica
22
15
BIT
16
INSTRUCCIÓN
MVT
17
CMP
18
SBC
19
SUB
20
ADC
21
ADD
22
ORA
23
AND
24
XOR
25
BIT
Directo
Indirecto
AND
Indexado
comparación
Indexado Indirecto
Inmediato
Tabla 9. Instrucciones de 32 bits ALU
INSTRUCCIONES DE 16 BITS MANEJO DE DATOS
DESCRIPCIÓN
MODO
Mover desde
Registro Fuente
memoria
Inmediato
Comparación
Registro Fuente
aritmética
Inmediato
Resta con
Registro Fuente
acarreo
Inmediato
Resta
Registro Fuente
Inmediato
Suma con
Registro Fuente
acarreo
Inmediato
Suma
Registro Fuente
Inmediato
OR lógica
Registro Fuente
Inmediato
AND lógica
Registro Fuente
Inmediato
XOR lógica
Registro Fuente
Inmediato
AND
Registro Fuente
comparación
Inmediato
Tabla 10. Instrucciones de 16 bits ALU
16
19
15
19
12
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
CICLOS
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
BANDERAS
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
Z,C,V,N
INSTRUCCIONES DE BRANCH
26
27
28
29
30
31
32
33
34
35
36
37
38
39
INSTRUCCIÓN
BEQ
BNE
BPL
BMI
BCS
BCC
BVS
BVC
BSR
BRA
BLT
BLE
BGE
BGT
40
41
42
43
44
45
46
INSTRUCCIÓN
LSR
ASR
SHL
ROR
RRC
ROL
RLC
DESCRIPCIÓN
Bandera de cero activa, en uno
Bandera de cero inactiva, en cero
Bandera de negativo inactiva, en cero
Bandera de negativo activa, en uno
Bandera de acarreo activa, en uno
Bandera de acarreo inactiva, en cero
Bandera de desbordamiento activa, en uno
Bandera de desbordamiento inactiva, en cero
Salto a subrutina
Salto incondicional
Salto condicional
Salto si XOR entre Nff y Vff es cero
Salto si XOR entre Nff y Vff es cero
Salto si XOR entre Nff y Vff es uno
Tabla 11. Instrucciones de Branch
CICLOS
13
13
13
13
13
13
13
13
18
13
13
13
13
13
BANDERAS
-
INSTRUCCIONES ROTACIÓN Y DESPLAZAMIENTO
DESCRIPCIÓN
Desplazamiento a la derecha lógico
Desplazamiento a la derecha aritmético
Desplazamiento a la izquierda
Rotación a la derecha
Rotación a la derecha con carry
Rotación a la izquierda
Rotación a la izquierda con carry
Tabla 12. Instrucciones de Rotación y Desplazamiento
23
CICLOS
15
15
15
15
15
15
15
BANDERAS
C
C
C
C
47
48
49
INSTRUCCIÓN
NOP
HLT
RST
INSTRUCCIONES ESPECIALES
DESCRIPCIÓN
No Haga ninguna instrucción
Detiene el procesador
Acceso a 63 direcciones distintas
Tabla 13. Instrucciones Especiales
CICLOS
14
14
14
BANDERAS
-
50
51
52
53
54
55
56
57
58
INSTRUCCIÓN
CIE
SIE
RTI
IMP
EXP
IM-A
IM-B
IM-C
IM-D
INSTRUCCIONES DE INTERRUPCIONES
DESCRIPCIÓN
Desactivar bandera interrupción
Activar interrupción
Retorno de interrupción
Importar periférico
Exportar periférico
Modo A interrupciones
Modo B interrupciones
Modo C interrupciones
Modo D interrupciones
Tabla 14. Instrucciones de Interrupciones
CICLOS
14
14
19
18
17
14
14
14
14
BANDERAS
-
59
60
61
62
63
64
INSTRUCCIÓN
CLC
SEC
PSH
POP
RTS
MSI
INSTRUCCIONES DE MISCELÁNEA
DESCRIPCIÓN
Poner en cero bandera de acarreo
Poner en uno bandera de acarreo
Poner en pila
Sacar de pila
Retorno de subrutina
Mover bits más significativos
Tabla 15. Instrucciones de Miscelánea
CICLOS
14
14
17
18
18
14
BANDERAS
-
3. DESARROLLO
3.1 AHPL
Como se explicó anteriormente, el AHPL describe la sección de control y de datos de un procesador, es
por esto, que fue de gran importancia este paso para el diseño satisfactorio de PHERB. El punto de partida
de la descripción en hardware consistió en la asignación de los valores iniciales de cada una de las señales
descritas en la sección 2.1, estas corresponden a los pasos uno a seis del AHPL; en éstos, se carga la
dirección de la rutina de principal como los valores iniciales de los bits del registro de estados (SR). A
continuación se presenta el inicio del procesador en AHPL:
Inicio del AHPL
1.
[(
)
(̅̅̅̅̅̅̅̅̅
)]
Señales de Salida
Señales de salida
Inicio del procesador
Carga el contador de programa
2.
3.
Se carga la dirección de la rutina principal
Señales de Salida
Señales de Salida
Se carga la dirección de la rutina principal
4.
Se carga la dirección de la rutina principal
[(
)
(̅̅̅̅̅̅̅̅̅
)]
Espera validez del dato contenido en el DB
24
5.
[
Se carga la dirección de la rutina principal
Dirección efectiva de la rutina principal
Se carga el registro de estados
Señal de lectura
Se carga el contador de programa
Señales de Salida
Señales de Salida
]
[
6.
]
Cabe aclarar que el punto de partida del AHPL fue tomada de BINARIC ya que debe haber una
correspondencia en ambos proyectos como también con el software PCSIM. Al estudiar el AHPL de
BINARIC se encontraron algunas falencias que fueron corregidas utilizando el AHPL dado por Fredrick J.
Hill y Gerald R. Peterson en el libro “Digital Systems: Hardware Organization and Design”, así como
también, se realizaron las modificaciones adecuadas en los temas principales que se manejaron, las
interrupciones y el bus espía. El AHPL completo contiene 118 pasos de control. El documento se
encuentra en el Anexo A: AHPL PHERB.
3.2 Programas Propuestos
Se realizaron algunos programas teniendo en cuenta que este proyecto tiene un fin altamente académico de
enseñanza, donde se probaron todas las instrucciones del procesador encontrando un buen
funcionamiento.
3.3 VHDL
Después de realizar la descripción en AHPL y teniendo una claridad en la estructura del procesador, se
inició la descripción en VHDL (Very High-Level Design Hardware), este lenguaje de descripción permite
el acceso a la herramienta de simulación de sistemas digitales Quartus II de ALTERA, la cual permite
simular el funcionamiento del procesador por medio de diagramas de tiempos, realizando así una primera
comprobación del sistema.
De igual forma, para este proyecto se tuvo acceso a la programación en VHDL de BINARIC, sin
embargo, al realizar un estudio, se encontró que es una programación más avanzada ya que principalmente
se basó en sentencias concurrentes como when, else, if, case entre otras. Debido a este tipo de
programación y teniendo en cuenta que uno de los principales objetivos de este proyecto es la enseñanza
de la materia, se decidió realizar una nueva descripción en VHDL más organizada y sencilla, buscando dar
facilidad al estudiante. En la siguiente figura se encuentra la jerarquía utilizada para el desarrollo en
VHDL.
PHERB
UNIDAD_DATOS
UNIDAD_CONTROL
SALIDA
DBUS
ALU
REGISTRO 2
INC
AND
REGISTRO 3
DEC
BIT
REGISTRO 5
RESTA
XOR
REGISTRO
10
SUMA
OR
REGISTROS
MUX_ABUS
MUX_BBUS
SALIDA
ADBUS
CONTROL
FULL_ADDER
REGISTRO
24
ROT_DES
REGISTRO
32
Figura 9. Diagrama de Jerarquía para VHDL
25
SIGNALS
UNIDAD_ESPIA
RBE
REGISTROS
BE
ESTADOS
En el Anexo B: VHDL PHERB se encuentra documentado entidad por entidad.
3.3.1

Entidades
PHERB
Esta entidad corresponde a la unidad principal de implementación en el lenguaje VHDL, es decir
corresponde a la entidad de mayor jerarquía, de tal forma que contiene las entradas y salidas del
procesador ya definidas en la sección 2.3 de este documento.

UNIDAD_DATOS
La unidad de datos corresponde a la entidad que recibe los datos para realizar operaciones de
almacenamiento, operaciones aritméticas o lógicas y donde posteriormente serán guardados los resultados
de cada una de estas. De acuerdo a esta descripción se concluye que esta entidad se encarga de distribuir
todos los datos hacia los registros y hacia la unidad aritmético-lógica (ALU). Como se puede observar en
la Figura 9, esta unidad se compone de los siguientes bloques:
 Registros: como su nombre lo indica se refiere a los registros donde se almacenan las operaciones
y donde se distribuyen los datos de acuerdo a las instrucción que se va a ejecutar, como también el
estado de control indicado. Este bloque está compuesto por registros de 2, 3, 5, 10, 24 y 32 bits
respectivamente.
 Mux_ABUS: corresponde a un multiplexor que recibe las salidas de los registros de direcciones,
datos e instrucciones, de tal forma que dependiendo de la instrucción y del paso de control, se
cargará el dato en el BUS A de la ALU.
 Mux_BBUS: corresponde a un multiplexor que recibe las salidas de los registros acumulador,
índice, pila, contador de programa, propósito general, rotación y desplazamiento y máscara, de tal
forma que dependiendo de la instrucción y del paso de control, se cargará el dato en el BUS B de la
ALU.
 Salida_ADBUS: este bloque corresponde a la lógica de salida de acuerdo al estado de control para
que el bus de direcciones tome el contenido del registro de direcciones; en AHPL, esta operación se
evidencia de la siguiente forma: ADBUS=MA.
 Salida_DBUS: este bloque corresponde a la lógica de salida de acuerdo al estado de control para
que el bus de datos tome el contenido del registro de datos; en AHPL, esta operación se evidencia
de la siguiente forma: DBUS=MD.
 ALU: es la unidad que se encarga de ejecutar operaciones aritméticas o lógicas, como se observa
en la Figura 2, la ALU recibe los datos que provienen de los buses A y B. Se compone de los
siguientes sub-bloques: AND, BIT, OR, XOR, Incremento, Decremento, Rot_Des, Resta y
Sumador.
26

UNIDAD_CONTROL
Esta unidad corresponde a la máquina de estado, se encarga de decodificar las instrucciones, así como
también envía las señales necesarias para efectuar cada una de las instrucciones en la unidad de datos. Se
compone de los siguientes sub-bloques: control, signals y RBE.

UNIDAD_ESPIA
Este bloque corresponde al manejo del bus espía, a él entran todas las salidas de cada uno de los registros,
de tal forma, que dependiendo del modo que el usuario elija se cargara en el bus los datos
correspondientes. Se compone de las sub-unidades Registros_BE y Estados.
3.3.2
Tablas de conectividad
Una de las ayudas fundamentales a la hora de hacer una descripción hardware en VHDL son las tablas de
conectividad, éstas son una herramienta que conecta las entidades e instancias, es decir conectan las
señales de entrada y salida de cada bloque. Son de gran utilidad ya que los nombres dados a cada entidad
difieren entre ellas, resulta útil utilizar estas tablas para mayor claridad en la conexión de cada uno de los
bloques como también a la hora de depurar errores. Estas tablas se presentan en el Anexo C: Tablas de
Conectividad.
3.4 Protocolo de pruebas
3.4.1
VHDL
En esta sección se muestran las distintas pruebas que se realizaron para la verificación del funcionamiento
del procesador PHERB. Las pruebas en VHDL se realizaron con la ayuda de la implementación de
memoria ROM y RAM para verificar tanto la lectura de datos como la escritura. Teniendo en cuenta el
diagrama de jerarquía dado en la Figura 9, se realizaron las pruebas en VHDL en el siguiente orden.
a. Registros: se probó cada uno de los registros por separado para verificar la carga de los datos,
como se dijo anteriormente, cada uno de los registros se carga con los datos cuando hay borde de
subida.
b. ALU:
 Sumador: el sumador se realizó con lógica combinatoria utilizando un full adder hecho con
compuertas XOR. Aunque es un sumador lento debido a la propagación del carry a lo largo
de todos los bits, se considera que es adecuado para la enseñanza de la materia, se
realizaron diferentes sumas con este bloque comprobando su funcionamiento. Sin
embargo, si el estudiante desea profundizar más puede optar por realizar simulaciones
utilizando la carpeta IEEE.std_logic_unsigned.all y el sumador “+”.
 Resta: este bloque utiliza un sumador de 32 bits, teniendo en cuenta que un operando se
encuentra en complemento base dos. Al igual que el sumador, se realizaron diferentes
operaciones para comprobar su funcionamiento.
 XOR, OR, AND, BIT: se realizaron las pruebas con distintos operandos para verificar el
buen funcionamiento.
 Incremento: utiliza un sumador de 32 bits donde un operando equivale a un “1” (decimal).
Al igual que los demás bloques se realizaron diversas operaciones.
 Decremento: utiliza un sumador en complemento base dos donde un operando equivale a
27
un “1” (decimal). Al igual que los demás bloques se realizaron diversas operaciones.
 Rot_Des: corresponde a la unidad de rotación y desplazamiento, se comprobó
satisfactoriamente su funcionamiento.
c. Máquina de control: la realización de la máquina de control se basó en una máquina one-hot (un
solo paso a la vez) de 118 pasos que cambia de estado en cada borde de subida. Primero, se
probaron las instrucciones donde se aprecia que cada una de ellas siguiera la secuencia adecuada de
acuerdo al AHPL, y se verificó que las señales de control se activaran en los pasos adecuados; estas
señales corresponden a los bloques Signals y RBE, donde el primero, contiene las señales de
lectura, escritura, entre otras, y el último corresponde a un registro de tres bits que guarda el modo
de bus espía que el usuario eligió. Con estas pruebas se verificó el funcionamiento de las señales de
control para las memorias. En el Anexo D: Pruebas Máquina Control, se encuentran los programas
realizados.
d. Registros_BE y Estados: Registros_BE corresponde a la lógica combinatoria del bus espía, esto se
refiere al contenido del registro que se debe cargar en el bus espía de cuarenta (40) bits. Esta carga
se realiza de acuerdo al paso de control y la codificación según sea el modo. Estados corresponde a
la codificación en binario de cada estado de control, de tal forma que si el procesador se encuentra
en el paso número dos, el bus espía en sus ocho bits más significativos mostrará “00000010”. Se
probó cada uno de los modos del bus espía con diferentes codificaciones. A continuación se
presenta una simulación para cada modo del bus espía mediante la realización de un programa
pequeño. El programa consiste en mover desde memoria el número “10” al registro acumulador,
este dato transferirlo al registro de propósito general RF, realizar la operación SUB (resta)
inmediata entre ambos registros y finalmente, congelar el procesador.
Nombre del Archivo: PruebaControl1.vwf
Nombre del Archivo Memoria: PruebaBE1.mif
INSTRUCCIÓN
MVT Inmediato
MVT RF,AC
SUB AC,RF
HLT
REGISTRO
Acumulador AC
Registro PG RA
Datos MD
BINARIO
HEXADECIMAL
00101100000000000000000000001010
2C00000A
0010010110000000
0001010000000110
25801406
110001000100
C4400000
BINARIO
HEXADECIMAL
00011
03
01001
09
00000
00
Tabla 16. Programa Prueba Bus Espía
En el Modo A del bus espía solo se muestra los estados de control que se activan.
28
EXECUTE
16,25
43,44,52,53 43,44,52
48,50
MVT inm, AH
MVT RF, AC; SUB AC, RF
HLT
Figura 10. Bus Espía en Modo A
En la Figura 10 se observa que el procesador está ejecutando los pasos adecuados para la instrucción, así
como también solo está mostrando los estados de control ya que en el vector “Registro_BE” no muestra
nada así el “BUS_ESPIAR” este activo.
A continuación se muestra el Modo B de bus espía donde se puede observar el contenido interno del
registro que el usuario elige.
MVT inm, AH
MVT RF, AC
SUB AC,RF
HLT
Figura 11. Bus Espía en Modo B
Para este modo, ya se observa el contenido de los registros, en este caso RF y AC; en 4.16 [µs] el estado
“25” se encuentra activo y por el vector “Registro_BE” se observa el contenido del registro acumulador
ya que por “BUS_ESPIAR” se ingresó la codificación para observarlo, efectivamente este registro toma el
número “10”, luego el procesador regresa a “fetch” para leer la nueva instrucción, cuando llega al estado
“13” el registro de datos MD toma la instrucción como se observa en 6.08 [µs]; el procesador detecta que
es una instrucción de 16 bits y va al paso “43” y en el paso “44” se transfiere el dato al registro RF como
29
se observa en 7 [µs], luego se debe leer la segunda mitad de la instrucción que corresponde a la operación
de SUB inmediata entre ambos registros; el procesador regresa al estado “44” donde se realiza la
operación y muestra por el vector “Registro_BE” el resultado que corresponde al número “0” en 8.32
[µs], finalmente, el procesador vuelve a “fetch” para leer una nueva instrucción que corresponde a HLT
para congelar el procesador como se observa en 11.2 [µs] paso “50”. De igual forma, se observan todas las
transiciones de “0” al contenido adecuado.
El Modo C del bus espía corresponde a mostrar el paso de control y el contenido de un registro para poder
visualizar el proceso de forma “paralela”, se debe tener en cuenta que para instrucción de 16 bits se debe
ingresar por “BUS_ESPIAR” la codificación del registro que se desea ver, esto se realizó de esta forma
debido a que en el paso de control “44” el usuario puede interactuar con varios registros, de tal forma que
debe haber claridad en cuál de ellos se desea ver; para este programa de prueba evidentemente se desea
ver el contenido del registro acumulador ya que hay es donde se guarda el resultado final. En este modo
no se observan todos los pasos de control, solamente los que interactúan con registros, por ejemplo, la
instrucción HLT no interactúa con ninguno de tal forma que se debe observar un “0” en todo el bus espía.
MVT RF, AC
SUB AC, RF
HLT
Figura 12. Bus Espía en Modo C
De la Tabla 3, se observa que cuando el procesador llegue al paso “25” se mostrará el registro acumulador
AC, de acuerdo a la instrucción este registro debe tomar el número “10”; en 3.92 [µs] se observa que el
registro acumulador finalmente tiene el dato de memoria, cabe destacar que hay un lapso de tiempo en
este estado, mientras que el registro toma el dato como se observa claramente la transición entre “0” a
“10”. Cuando el procesador vuelve a “fetch” toma la nueva instrucción de memoria por medio del bus de
datos y el registro de datos la toma en el paso “13” para su ejecución como se muestra en 5.44 [µs], como
es instrucción de 16 bits, el procesador debe ir al paso “43” donde según la tabla se muestra el registro de
datos con el número “10”, esto concuerda con el AHPL, ya que las operaciones de la ALU se realizan con
este registro, en el paso “44” se muestra el registro RF ya que por “BUS_ESPIAR” se ingresó la
codificación para observar este registro, evidentemente en 6.48 [µs] el registro de propósito general toma
el dato; a continuación se lee la segunda mitad de la instrucción correspondiente a la operación lógica
SUB; en 7.76 [µs] se observa claramente la transición entre el dato que contiene el acumulador al nuevo
dato que corresponde al resultado de la operación. De esta forma, se puede concluir que los modos de uso
para bus espía se encuentran funcionando de acuerdo a lo planteado anteriormente.
En el Anexo E: Pruebas Bus Espía se encuentran las simulaciones hechas en Quartus II 9.0 con diferentes
programas que incluyen la mayoría de instrucciones.
30
e. Lógicas de Entrada: Esta prueba corresponde a los bloques Mux_ABUS, Mux_BBUS,
Salida_ADBUS, Salida_DBUS. Se probó cada uno de los bloques para comprobar que la lógica
combinatoria funcionara adecuadamente.
Después de probar cada bloque por separado, se realizaron las conexiones entre cada entidad para así tener
el procesador PHERB ya terminado. Cabe destacar que una de las mayores ayudas que se tuvo a la hora de
probar el procesador fue el bus espía, ya que permitía ver la transferencia de los datos en los registros y de
esta forma, comprobar el funcionamiento adecuado del procesador de una forma rápida y eficiente.
f. Pruebas de todo el procesador conectado: Se realizaron diferentes programas teniendo en cuenta
que abarcaran todo el conjunto de instrucciones para así comprobar el adecuado funcionamiento de
todo el procesador; al mismo tiempo se comprobaron cada uno de los modos de bus espía que el
procesador puede manejar. Estas pruebas se encuentran explicadas en el Anexo F: Pruebas
Procesador PHERB con sus respectivas simulaciones.
Después de realizar las simulaciones y comprobar el funcionamiento del procesador, se implementó
en la tarjeta de desarrollo TARDAC que será explicada en la sección 3.5.
g. Pruebas de Interrupciones: Se simularon cada uno de los modos de interrupciones ya descritos,
observando que se cumpliera la secuencia de pasos de control de acuerdo al AHPL. Estas pruebas
también se encuentran en el Anexo F: Pruebas Procesador PHERB.
3.4.2
Hardware
Las pruebas en hardware consistieron en varias partes para verificar el adecuado funcionamiento.
a.
b.
c.
d.
e.
f.
Revisión del montaje
Conexión del analizador lógico con puntas de prueba
Programación de las memorias
Conexión tarjeta
Verificación inicio del procesador
Verificación lectura de memorias
3.5 Tarjeta de desarrollo
Siguiendo la continuidad del proyecto de grado BINARIC, el procesador PHERB se implementó sobre el
hardware ya hecho para este procesador. La tarjeta de desarrollo utilizada fue la TARDAC que contiene
un dispositivo de lógica programable FPGA de ALTERA con referencia ACEX EP1K100QC208-3. Este
dispositivo contiene 208 terminales de salida, 100.000 compuertas típicas, 49152 bits de memoria RAM,
consumo bajo de potencia, entre otras características. La tarjeta de desarrollo TARDAC se muestra a
continuación:
31
Figura 13. Tarjeta de desarrollo TARDAC
Además de contar con el dispositivo FPGA, esta tarjeta cuenta con lo siguiente:








Memoria EPC2LC20: Es una memoria no volátil que se comunica con el dispositivo EP1K100QC2083 por medio de un protocolo JTAG.
Conector de voltaje: adaptador de 5
, 1.5ª.
Regulador de 3.3
y 2.5
Cable de programación y configuración: Cable para la comunicación de puerto JTAG con el puerto
paralelo del computador.
Circuito Oscilador: Circuito de reloj de 8MHz.
Puentes de configurar JP1 y JP2.
Regletas de 40 terminales para la conexión externa.
Cintas de 40 hilos.
4. ANÁLISIS DE RESULTADOS
4.1 Análisis para un procesador
Para la realización del análisis de recursos, tiempos y de potencia se utilizó la herramienta de simulación
QUARTUS II 9.1 de Altera. Los ajustes realizados para obtener los distintos análisis fueron los siguientes:







4.1.1
Dispositivo: EP1K100QC208-3
Early timing mode: Realistic
Physical Synthesis: Normal(optimize during fitting)
VHDL 1993
Fitter settings: Standard Fit(Highest effort).
Classic Timing Analyzer con frecuencia máxima de 4MHz.
Power Up Análisis corresponde al análisis de potencia se realizó sobre el dispositivo FPGA
Cyclone III EP3C25F324 ya que esta herramienta solo es soportada para ciertas familias de
dispositivos de lógica programable.
Análisis de Recursos
En la siguiente Figura se aprecia la cantidad de recursos utilizados por la FPGA en la programación del
procesador. Este reporte corresponde al primer informe que la herramienta QUARTUS II entrega al
programador.
32
Figura 14. Reporte de compilación QUARTUS II PHERB
De la Figura se observa la cantidad de elementos lógicos utilizados correspondiente a 2,323 de 4,992
equivalentes a un 47% de la FPGA. Se observa que queda un 53% restante para futuras modificaciones,
sin embargo, se aclara que este procesador puede ser programado en un dispositivo como Cyclone o
Stratix que contienen alrededor de 24,624 elementos lógicos, lo cual daría la posibilidad de realizar otras
actualizaciones del procesador más grandes, además la posibilidad de utilizar memorias embebidas y
hacer el montaje mucho más sencillo.
De igual forma, se observa la cantidad de pines utilizados que corresponden a 124, un 84% del chip.
Aunque este dispositivo no tiene tantos pines de salida en comparación con una Cyclone, la diferencia de
la utilización de esta FPGA se centra en la tarjeta de desarrollo. Uno de los requisitos a tener en cuenta, es
la posibilidad de poder visualizar en el analizador de estados lógicos absolutamente todas las señales de
salida descritas en la Sección 2.1, como también el bus espía, es por esto, que la única tarjeta de desarrollo
que permitió esto fue la TARDAC ya que permite utilizar todos los pines de salida de la FPGA.
Así mismo, se realizó una breve comparación con el reporte de compilación de BINARIC, que dio como
resultado un total de 2,609 elementos lógicos, de esta forma, se evidenció una breve optimización en la
descripción de VHDL del 3%.
En el siguiente reporte se muestra la cantidad de elementos lógicos, como se observa en la Figura hay un
total de 2,323 elementos lógicos que se encuentran repartidos en los registros, en las lógicas combinatorias
utilizadas para la carga de datos y las operaciones que realiza la ALU (Unidad Aritmético Lógica). Para
esta FPGA el elemento lógico corresponde a la unidad más pequeña de la arquitectura que permite un uso
eficiente de la lógica. Cada elemento lógico contiene una tabla de búsqueda (LUT) de 4 entradas que
realiza rápidamente cualquier función de cuatro variables.
Figura 15. Reporte de recursos utilizados
33
De la Figura 15 se observa el máximo fan-out, este es uno de los parámetros más importantes ya que
corresponde a la máxima cantidad de puertas básicas que se pueden conectar a la salida de una sola
compuerta lógica; del reporte se observa que éste corresponde a 566, que a su vez es la cantidad de
registros del procesador, de igual forma, se analiza que el nodo con el máximo fan-out es el reloj, lo cual
es coherente porque es una señal que marca el ritmo de carga de los datos, por lo tanto, se encuentra
conectada a cada uno de los registros utilizados. También se observa la cantidad de funciones lógicas
utilizadas, donde 1410 corresponden a funciones de 4 entradas, al ser de esta categoría se afirma que los
elementos lógicos están operando en forma normal, este modo es perfecto para aplicaciones de lógica
combinatoria, para las funciones de 3 entradas se puede decir que están operando en función aritmética, la
cual es perfecta para la implementación de sumadores.
Del reporte se extrae también la cantidad de registros utilizados por el procesador correspondiente a 566,
este dato debe tener una exacta correspondencia con la cantidad calcula teóricamente dada a continuación:
NOMBRE DEL REGISTRO
CANTIDAD
118
MÁQUINA DE CONTROL
2
REGISTRO MÁSCARA
3
REGISTRO BUS ESPÍA
3
REGISTRO INTERRUPCIONES
5
REGISTRO CORRIMIENTO
10
REGISTRO DE ESTADOS
24
CONTADOR DE PROGRAMA
24
REGISTRO PUNTERO PILA
24
REGISTRO DE DIRECCIONES
24
REGISTRO ÍNDICE
32
REGISTRO DE DATOS
32
REGISTRO DE INSTRUCCIONES
32
REGISTRO ACUMULADOR
192
REGISTROS PROPÓSITO GNA
TOTAL
525
Tabla 17. Número teórico de registros utilizados por el procesador
Del reporte, se observa que hay 41 registros que hacen falta en el dato teórico. 32 de estos corresponden al
manejo del bidireccional necesario para la lectura y escritura de datos. Los 9 restantes corresponde al
bloque Signals para la sincronización de las señales de lectura y escritura en memoria.
A continuación se presenta el análisis de recursos por entidad, donde se indica la cantidad de registros que
cada una utiliza, así como también la cantidad de celdas lógicas; una celda lógica es un bloque que tiene la
capacidad de resolver una función combinatoria o secuencial de hasta 5 entradas. De la Figura se
evidencia una total correspondencia entre lo teórico y lo programado:
34
Figura 16. Recursos por Entidad
4.1.2 Análisis de Tiempos
4.1.2.1 Ciclos de Instrucción para el procesador
Un primer análisis de tiempo se centra en la contabilización de la cantidad de ciclos de reloj que cada
instrucción utiliza; para esto nos referimos a la tablas 6 a 13 como también se tiene en cuenta la frecuencia
máxima de trabajo que corresponde a 4MHz teniendo como periodo de reloj 250ns. En la siguiente tabla
se presentan el tiempo que cada instrucción toma para ejecutarse de acuerdo a los ciclos de reloj:
CICLOS DE RELOJ
TIEMPO
3 µs
12
3,25 µs
13
3,5 µs
14
3,75 µs
15
4 µs
16
4,5 µs
18
4,75 µs
19
5,5 µs
22
Tabla 18. Tiempo de Duración de las instrucciones.
4.1.2.2 Análisis de tiempos utilizando QUARTUS II 9.0
En la primera compilación del procesador, la herramienta QUARTUS nos entrega un reporte mostrando
los tiempos críticos, es decir los peores casos donde los tiempos dejarían de ser válidos produciendo un
mal funcionamiento del procesador. En la siguiente figura se muestra el primer reporte extraído:
35
Figura 17. Reporte de Tiempo de QUARTUS II.
De la Figura se observa un valor de gran importancia, la máxima frecuencia de trabajo correspondiente a
4.21MHz, que corresponde al trayecto entre el paso número 10 de la máquina de control al bit número 2
del registro de estados; en caso de que se trabaje con una frecuencia mayor a esta, el funcionamiento del
procesador no sería el adecuado debido a que varios caminos entre las señales no trabajarían
correctamente. Sin embargo, para obtener una mayor velocidad se sugiere utilizar una FPGA con mejores
características. Teniendo en cuenta el deseo de utilizar una Cyclone III, se decidió realizar una
compilación para determinar la máxima frecuencia de trabajo que el procesador puede tener, de tal forma
que se obtuvo una frecuencia máxima de 25.45 MHz, esto se observa en la siguiente figura:
Figura 18. Reporte de Tiempo de QUARTUS II con Cyclone III.
De igual forma, se observan los valores para los tiempos de setup (
pin to pin ( ) que serán explicados uno a uno posteriormente.
a. Tiempo de Setup (
), hold ( ), clock to output (
)y
)
El tiempo de Setup o también llamado tiempo de asentamiento se refiere al intervalo tiempo en que la
entrada debe ser válida, es decir no debe cambiar antes de un flanco de reloj. Este parámetro puede tener
un valor negativo el cual representa el intervalo más corto para el cual el sistema funciona correctamente.
Del reporte de QUARTUS II se tomaron los valores máximos y mínimos para este tiempo, se observan en
la siguiente figura:
36
Figura 19. Reporte QUARTUS II Tiempo de Setup (
)
Del reporte extraído, se encuentra que el tiempo de setup es de 14.800 [ns], este ocurre cuando la señal de
interrupción PRIN llega al Registro de direcciones (MR), de igual forma, el mejor tiempo se da cuando la
señal SWAIT pasa al estado número 30 de la máquina de control.
b. Tiempo de Hold ( )
El tiempo de hold o tiempo de mantenimiento se refiere al tiempo mínimo después de un flanco de reloj,
en la cual las entradas no pueden cambiar de valor. A continuación se muestra el peor y mejor tiempo para
este sistema.
Figura 20. Reporte QUARTUS II Tiempo de Hold ( )
De la Figura, se concluye que el mejor tiempo corresponde a -0.400 [ns] que ocurre del paso de la señal
SWAIT al estado número 88 de la máquina de control; de igual forma, el peor caso para este tiempo,
ocurre del paso de la señal PRIN[1] al flip - flop número 22 del registro de direcciones (MA) con un valor
de -13.200 [ns].
37
c. Tiempo Clock to Output (
)
Este tiempo se refiere al tiempo mínimo para obtener una salida válida en un pin de salida después de un
flanco de reloj. Como en los casos anteriores, se presentan los valores más críticos del diseño.
Figura 21. Reporte QUARTUS II Tiempo Clock to Output (
)
Del análisis dado por la herramienta QUARTUS II, se determina que el mejor tiempo para una salida
válida en el bus espía es de 39.600 [ns], se considera que es un tiempo muy largo, sin embargo, esto se
debe a la extensión de la lógica combinatoria utilizada en el diseño. El peor caso corresponde a 50.200[ns]
que corresponde a la conexión entre la unidad de control y el bus espía.
d. Tiempo pin to pin (
)
Este tiempo se refiere al tiempo de propagación punto a punto desde un pin de entrada a uno de salida. El
mayor tiempo se encontró desde la entrada BUS_ESPIAR[0] a la salida BUS_ESPIA[39] con un valor de
49.700 [ns], la primera corresponde a un bit de entrada por el cual el usuario escoge el registro que desea
ver por medio del bus espía; de igual forma, el menor valor es de 24.800 [ns] correspondiente al camino
entre BUS_ESPIAR[0] a BUS_ESPIA[5]. En la siguiente figura se observan estos resultados:
Figura 22. Reporte QUARTUS II Tiempo pin to pin (
38
)
4.1.3
Análisis de Potencia
Para realizar el análisis en potencia se debió simular el procesador utilizando un dispositivo FPGA
Cyclone III con referencia EP3C25F324 ya que para el dispositivo ACEX la herramienta PowerPlay no se
encuentra habilitada. El primer reporte que entrega QUARTUS II, corresponde a un resumen, este se da
en la siguiente figura:
Figura 23. Reporte de potencia
Se observa que el procesador disipará un total de 105.98 [mW] dentro del dispositivo. Dentro de este total
de potencia se encuentra la potencia dinámica del núcleo, la cual corresponde a la conmutación interna del
dispositivo, es decir, la carga y descarga de capacitancias en los nodos internos. El total de esta potencia es
de 1.50 [mW] como se muestra a continuación:
Figura 24. Core Dynamic Thermal Power Dissipation
Otro de los componentes importantes acerca de la potencia, se refiere a la potencia térmica disipada, esta
se refiere al total disipado por el dispositivo, de otra manera, se refiere a la habilidad de la FPGA para
transferir calor y así, mantener las junturas en condiciones de operación normales. En la siguiente figura
se observa el total por cada bloque, donde el bloque de entradas y salidas es el que más consume con un
total de 13.80 [mW]:
Figura 25. Thermal Power Dissipation por tipo de bloque
Otro de los reportes entregado por QUARTUS II, se refiere al consumo de potencia total de cada
jerarquía; este total se divide en potencia térmica dinámica, térmica estática y térmica de enrutamiento. En
la siguiente figura se observan los valores obtenidos de cada una de ellas por jerarquía:
39
Figura 26. Thermal Power Dissipation por jerarquía
De la anterior figura, se observa que la entidad PHERB consume 15.28 [mW] esto se debe a que ella
contiene las entradas y salidas del procesador, el mayor consume se da en la potencia térmica estática que
hace referencia a la potencia consumida por los transistores. Al seguir observando, el segundo valor más
alto corresponde a la Unidad de Datos, esto se debe a que esta esta jerarquía contiene toda la lógica de
carga, al igual, que realiza todas las operaciones aritméticas y lógicas; de tal forma, entre más lógica
combinatoria el diseño tenga el consumo será mayor, es decir a mayor elementos lógicos mayor potencia.
Figura 27. Corriente consumida por la Fuente de Voltaje
En la Figura se observa la corriente consumida por cada una de las fuentes. La fuente VCCINT
corresponde al voltaje para la lógica interna, esta consume un total de 13.23 [mA] donde el mayor
porcentaje de consumo se encuentra en la corriente estática correspondiente a los transistores del
dispositivo. Observando la figura, se observa que la fuente VCCA correspondiente a un regulador PLL es
el que más consume corriente, esto es lógico ya que se trata de un dispositivo análogo basado en un lazo
enganchado en fase comúnmente llamado PLL (ingles).
A partir de estos resultado y observando la Figura se encuentra una gran coherencia en el consumo de
potencia de los transistores, siendo esta la de mayor valor con 81.33 [mW].
4.2 Resultados en simulación
4.2.1
Jerarquía Final
4.2.2
RTL
Figura 28. Jerarquía Final del Procesador PHERB.
El visor RTL (Register Transfer Level) corresponde al esquema o diagrama de flujo equivalente de las
descripciones hechas en VHDL; es decir, corresponde al sistema digital después del análisis. El uso de
esta herramienta se basa en la comprobación de que no existan componentes alternos no pertenecientes al
40
sistema como también que las conexiones hechas en la descripción sean apropiadas y conecten a los
bloques adecuadamente.
Sin embargo, muchas veces no resulta útil ya que no hay el conocimiento suficiente de las diferentes
formas que QUARTUS realiza el componente, esto se tiene en cuenta al utilizar sentencias como case,
when, switch, entre otras.
4.2.2.1 RTL general
Figura 29. RTL general del sistema
En la figura anterior se puede observar el diagrama general del procesador PHERB; este diagrama
obtenido por QUARTUS II corresponde totalmente al diagrama principal de entrada/salida visto en la
sección 2.1 Figura 1.
4.2.2.2 RTL expandido
Figura 30. RTL expandido del sistema.
Después de observar el RTL obtenido general, al hacer un “click” sobre ese bloque, se obtiene un
diagrama general expandido como se ve en la Figura; de ella, se aprecia tres grandes entidades
correspondientes a la Unidad de Datos, Unidad de Control y Unidad Espía, esto concuerda con lo
planeado anteriormente a la hora del diseño del procesador.
41
4.3 Resultados en hardware
Mediante el analizador de estados lógicos Tektronix TLA5202B se realizó la comprobación del
funcionamiento del procesador con las instrucciones, para de esta forma comparar los resultados
simulados con los implementados. Sin embargo, a continuación se presenta un pequeño programa con
modo de bus espía C activo:
Figura 31. Parte I programa.
En la Figura 32 se observa que el bus espía está mostrando el registro MA el cual contiene la posición de
memoria donde se encuentra la primera instrucción a ejecutar.
Figura 32. Parte II programa
La primera instrucción consiste en traer de memoria un dato de forma directa; el dato corresponde a un
“10”. En la Figura 33 se observa que el registro de direcciones toma está dirección y cuando el
procesador llega al paso de control número “33” toma el dato, de la figura se puede observar la transición
que ocurre en el registro de datos de tener la instrucción a obtener solo el número; Luego el procesador
42
llega al siguiente estado donde ocurre el incremento, en la Figura se observa que el registro cambia de
0AH a 0BH que en decimal corresponde un incremento de “1”.
Figura 33. Parte III programa
En la Figura 34 se puede visualizar la siguiente instrucción que corresponde a traer de memoria un dato
de forma indirecta, en el estado “17” se puede observar la transición de una posición de memoria a otra, ya
que en este modo de bus espía el registro de direcciones se muestra cuando el procesador se encuentra en
este estado. Siguiendo el procedimiento cuando el procesador llega al estado “21” hay otra transición de
posición de memoria, al igual que en el estado “17” en este también se muestra el registro de direcciones.
Figura 34. Parte IV programa
Esta figura muestra que el procesador lee de memoria el número “0” y lo realiza un decremento en el paso
“34” respectivamente.
43
Figura 35. Parte V programa
Finalmente, el procesador regresa a “fetch” donde lee de nuevo una instrucción, esta última corresponde a
un salto incondicional para volver a empezar todo el programa planteado.
5. CONCLUSIONES

La metodología de diseño digital que se utiliza en la Sección de Técnicas digitales para el diseño e
implementación de sistemas digitales sencillos y complejos permite al estudiante una mayor claridad en
cuanto al funcionamiento de cada sistema diseñado, ya que a partir de una descripción en AHPL, tablas
de conectividad, diagrama de bloques y descripción en VHDL se logra una conceptualización adecuada
acerca del diseño de sistemas digitales.

Las modificaciones hechas a los modos de bus espía permitieron realizar un seguimiento paso a paso
del sistema para cubrir en su totalidad la prueba de instrucciones, ya que permitió observar la unidad de
control y unidad de datos al mismo tiempo y de esta forma, verificar el buen funcionamiento de una
forma sencilla y eficiente.

Unas de las características para posibles mejoras, corresponden a la velocidad y a el montaje aparatoso,
juntas van ligadas con el dispositivo FPGA utilizado, aunque la universidad cuenta con dispositivos de
desarrollo adecuados, ninguna tarjeta proporciona la cantidad de pines disponibles para uso del usuario,
lo que hace imposible la conexión del bus espía, junto con la conexión externa de las memorias.

Esta tercera implementación en hardware de PCSIM es más sencilla y clara que las versiones anteriores
ya que se realizaron documentaciones detalladas acerca de cada proceso realizado, como también un
manual de usuario más adecuado para el aprendizaje del estudiante.

Una de las grandes modificaciones en hardware constituye el manejo de interrupciones definiendo
modos sencillos y diferentes para que el estudiante logre una mayor compresión acerca de este tema de
gran importancia en un computador.

Entre más compleja sea la lógica de entrada a una compuerta, la capacitancia del dispositivo FPGA
(Field Programmable Array) aumentara causando que haya más conmutaciones entre estados lógicos,
lo cual lleva a un consumo de potencia mayor.
44

La simulación de periféricos en QUARTUS II 9.1 resulta difícil de realizar para los modos
vectorizados, ya que no hay un periférico implementado que envíe por el bus de datos la rutina a
ejecutar.

La implementación en QUARTUS II 9.1 de un memoria RAM resulta confusa, aunque se realizó
siguiendo los lineamientos que la ayuda de Altera proporcionó, resulta difícil entender cómo funciona
al interior, de tal forma, que sería una excelente práctica en la sección de técnicas digitales.

La implementación del “bus espía” fue de gran ayuda ya que el uso del mismo permitió la depuración
de errores del procesador, específicamente cuando se perdían datos al realizar las cargas en los
registros.

Una de las ideas que se deja para proyectos futuros corresponde al diseño de una tarjeta de desarrollo
con una FPGA como la Cyclone III que tenga la mayor cantidad de pines libres, esto con el fin de tener
un procesador con mayor velocidad y la posibilidad de tener memorias embebidas; como se observó en
los análisis hechos, la Cyclone III permite una frecuencia máxima de 32MHz, de tal forma que el
procesador tendría una mayor rapidez en la ejecución de las instrucciones.

Se realizó satisfactoriamente una descripción en VHDL más sencilla y entendible para el estudiante, ya
que ésta se realizó en su totalidad de forma concurrente, es decir sin sentencias como when, case, if,
else; se implementó de esta forma debido a que este proyecto tiene como finalidad su uso pedagógico y
estas sentencias suponen el conocimiento por parte del estudiante de la cantidad de elementos lógicos
utilizados y su forma adecuada de utilización.

Se realizaron algunas modificaciones en relación a las especificaciones de la propuesta inicial en pro de
facilitar el manejo del procesador.

Nosotras como usuario principal del procesador pudimos observar con bastante claridad los resultados
obtenidos; como usuario consideramos que las especificaciones serian de agrado al estudiante.

La elaboración del manual permitirá a los estudiantes de sistemas digitales acercarse a la arquitectura
de procesador de una manera más clara ya que acompaña al estudiante en todo el proceso de diseño e
implementación.

Los tres modos de bus espía nos permitieron depurar errores y comprobar de una forma didáctica el
funcionamiento del procesador.

Seguir la metodología de diseño aprendida durante las asignaturas del área de técnicas digitales, hizo
posible la implementación exitosa del proyecto. En el resultado se observa, que al trabajar de manera
disciplinada, se obtienen los resultados deseados en el tiempo asignado para cumplir los objetivos.

Es de resaltar que no existe ninguna referencia bibliográfica externa a la universidad Javeriana, para el
concepto de bus espía, o alguna especificación similar, que permita visualizar la dinámica interna del
funcionamiento de un procesador.

Todos los objetivos propuestos fueron cumplidos de manera exitosa, y esperamos que se cumpla su fin
pedagógico.
45
6. BIBLIOGRAFÍA
[1] ALVAREZ RIVERA, Bibiana Andrea, PINILLA PICO, Lady Nathalie. “Implementación de un
procesador digital BINARIC”. Trabajo de Grado, Carrera de Ingeniera Electrónica, Pontificia Universidad
Javeriana, 2007.
[2] BELTRÁN VELEZ, Diego Hernán, HERRERA BUITRAGO, Moisés Fernando, MAYOLO
OBREGÓN, Marco Antonio. “Implementación del procesador ALTERIC”. Trabajo de Grado,
Carrera de Ingeniera Electrónica, Pontificia Universidad Javeriana, 2004.
[3] HILL, Frederick J, PETERSON, Gerald R. "Digital Systems, Hardware organization and
design". Tercera edición. Singapore. John Wiley & Sons. 1987.
[4] PEDRONI, Volnei A. “Circuit Design with VHDL”. Massachussets Institute of Technology. United
States .2004
[5] STALLINGS, William. “Organización y Arquitectura de Computadores”. Séptima Edición.
Pearson Education, 2006.
[6] HENNESSY, John L. PATTERSON, David A. “Computer Architecture A Quantitative
Approach”. Second Edition.1996.
[7] WAKERLY, John F. “Diseño Digital : Principios y Prácticas”. Tercera Edición. Prentice Hall. 2001.
46
Descargar