Documentos de Académico
Documentos de Profesional
Documentos de Cultura
He Choen Casa
He Choen Casa
Resumen
El siguiente trabajo tiene un perfil doble: por un lado, es el diseo de un
microprocesador RISC de 32 bits; por el otro, es una investigacin sobre el uso de Verilog HDL
para la descripcin y simulacin del diseo.
La finalidad del trabajo tambin es doble: sienta una base para otros proyectos sobre
microprocesadores; y adems sirve para tener una idea de la utilidad de Verilog HDL as como
del tiempo necesario para aprender a manejarlo, con vistas a la inclusin de un mdulo
dedicado a este lenguaje en una asignatura, Arquitectura de Computadoras.
Este artculo presenta las principales fases de un trabajo mayor realizado por los
autores, en las que se destaca principalmente el procedimiento seguido y los resultados ms
importantes.
Palabras clave: Microprocesador, RISC, Arquitectura de Computadoras, Diseo digital,
Pipelining, Verilog, HDL, Simulacin.
Abstract
The present paper features a double profile: on one hand, it is the design of a 32-bit
RISC microprocessor; on the other hand, its a research about the advantages of using a
Hardware Description Language (HDL) such as Verilog for describing and simulating the
design, as well as about the time that should be employed in order to learn how to use the
language, heading towards the addition of a Verilog module in the Computer Architecture
subjects curriculum.
On the following pages, it will be found only a fraction of the whole work done by the
authors, in which the main purpose is to highlight the procedures followed and the results
obtained instead of the details and implementation.
After the tests it remained clear that Verilog HDL is a very powerful tool which use imply
enormous improvement in the productivity of the hardware designers, for it greatly reduces the
time needed for description and simulation. Finally its stated that it would be very useful for the
Computer Architecture students to learn how to use this tools in order to be better trained to
face the competitive world beyond the University.
Keywords: Microprocessor, RISC, Computer Architecture, Digital Design, Pipelining, Verilog,
HDL, Simulation.
Introduccin
Este artculo presenta tanto un trabajo de diseo realizado por los autores, como as
tambin una investigacin sobre la utilizacin de un lenguaje de descripcin de hardware
(Verilog HDL) y sobre una herramienta de simulacin en el diseo digital, concretamente, de
microprocesadores. La herramienta utilizada para la simulacin ser SynaptiCAD Verilogger
Pro 7.5, en una versin de evaluacin.
Esta investigacin tiene dos finalidades principales. En primer lugar, servir para tener
una idea precisa del tiempo necesario para aprender a usar tanto el lenguaje como la
herramienta, la practicidad de stos y su valor didctico. Esto influir posiblemente en la
estructura de la asignatura Arquitectura de Computadoras (asignatura obligatoria de la carrera
de Ingeniera en Computacin de la Facultad de Ciencias Exactas y Tecnologa de la
Universidad Nacional de Tucumn), insertndose un mdulo dedicado a Verilog, como muchas
de las universidades del mundo de hecho lo tienen. En segundo lugar, podra constituir la base
de diversos proyectos de investigacin multidisciplinarios de mayor escala, como as tambin
de trabajos de graduacin.
El trabajo se realiz en 3 etapas, a saber: 1) Diseo del Set de Instrucciones a utilizar;
2) Diseo de un microprocesador uniciclo; y 3) Diseo de un microprocesador segmentado. El
motivo para realizar 2 diseos de microprocesadores consiste en tener una idea ms concreta
sobre cmo influye la complejidad del hardware sobre la descripcin y la evaluacin de
resultados.
Ser del tipo Load/Store, indicando con esto que slo dos instrucciones podrn
acceder a memoria.
OPCODE
6
rd
ro
desp
R1
R2
R3
16
Formato 2:
OPCODE
6
Formato 3:
Reservado
11
OPCODE
Desp
24
Los dos tipos de salto, tanto los condicionales (JPC) como los incondicionales (JP),
sern relativos al PC (Program Counter), utilizando un desplazamiento de 24 bits con signo.
Los saltos condicionales utilizan cdigos de condicin, siendo las condiciones evaluadas: cero,
negativo, carry y una bandera adicional. Estas instrucciones utilizan el Formato 3 de la Figura
1, donde pueden observarse dos bits a continuacin del OPCODE destinados a los cdigos de
condicin, y luego el desplazamiento.
Se tomaron 6 bits para el cdigo de operacin (OPCODE) de las instrucciones por dos
motivos principales: 1) Para facilitar una posterior ampliacin del set de instrucciones; y 2) Para
establecer (ms adelante) dos modos de operacin del microprocesador, un modo protegido y
un modo usuario, diferenciando las instrucciones pertenecientes a cada modo por su cdigo de
operacin.
El microprocesador Uniciclo
Llamamos uniciclo a un microprocesador en el que todas las instrucciones se ejecutan
en un nico ciclo de reloj. El motivo para comenzar el diseo de hardware con este procesador
es similar al motivo por el cual elegimos RISC: porque es simple, y esa simplicidad nos
permitir ir de menor a mayor, de una manera modular y ms ordenada, sirviendo de base para
el diseo de un microprocesador segmentado que se presenta ms adelante.
Para el diseo de un camino de datos se decidi, para simplificar, tomar un
subconjunto del set de instrucciones, centrando la atencin en los aspectos principales del
mismo. El subconjunto de instrucciones est formado por las instrucciones LDIN (Load
Indexado), STIN (Store Indexado), ADIL (Suma Inmediata), ADD (Suma), SLA (Desplazamiento
Aritmtico hacia la Izquierda) y JPC (Salto Condicional). El microprocesador posee una
arquitectura tipo Harvard, o sea que posee una memoria de datos y otra de programa,
independientes entre s, que posibilita un incremento en la performance y es apropiado para el
diseo segmentado posterior. Veamos un poco de la estructura interna de nuestro
microprocesador.
El microprocesador presenta un banco de registros compuesto por 32 registros de
propsito general de 32 bits cada uno, que posee dos puertos de lectura y un puerto de
escritura. Este banco de registros permite leer y escribir el mismo registro en el mismo ciclo de
reloj. Adems tiene la caracterstica de que el valor del registro 0 es siempre cero. El
microprocesador tambin cuenta con cuatro registros de propsito especfico, todos de 32 bits:
el registro PC (Program Counter, un puntero a la memoria de programa que indica la
instruccin que est siendo cargada actualmente), el Registro de Instruccin (IR, recibe la
instruccin de la memoria de programa para su decodificacin), y dos registros ms para
acceder a la Memoria de Datos el MAR (para indicar la direccin) y el MDR (para leer o escribir
los datos). Tambin posee una ALU (Arithmetic and Logical Unit) de dos entradas de datos y
una salida, todas de 32 bits, que es capaz de realizar (para este subconjunto de instrucciones)
las operaciones de suma, desplazamiento a la izquierda y que permite la opcin de mantener el
resultado sin modificar los flags por ms que varen sus entradas.
Adicionalmente, el microprocesador presenta tres bloques adicionales. El bloque
SumPC (Sumador del PC), que tiene por funcin actualizar el PC con la suma del PC ms 1 o
ms el valor del salto, segn corresponda. La Unidad de saltos compara los cdigos de
condicin y emite una seal de control hacia el Sumador del PC, indicando si un salto debe
realizarse o no. El bloque denominado SUAT (Sistema nico de Aritmtica Translatoria) se
encarga de conformar el dato correspondiente al campo inmediato de las instrucciones de
Formato 1 (ver Figura 1) que ingresar en la ALU. Por ltimo, se cuenta con diversos
multiplexores necesarios para el correcto funcionamiento de todas las instrucciones. Para
mayores detalles, consultar [2].
En nuestro diseo estamos considerando que la velocidad de la memoria es del orden
de la velocidad del microprocesador porque el objetivo del proyecto nos lo permite. Sin
embargo, hay que tener en mente que esto est muy alejado de la realidad. Los accesos a
memoria son muy costosos en tiempo, y degradan notablemente la performance de un
microprocesador. Lo que nosotros vemos como memoria en este diseo sera en realidad un
cach en un diseo ms avanzado.
Introduccin a Verilog HDL
Verilog es un lenguaje de descripcin de hardware (HDL) usado como estndar en la
industria para caracterizar el comportamiento de sistemas digitales. Tales sistemas pueden ser
descritos a un nivel estructural, empleando elementos previamente creados (compuertas o
transistores) y realizando la interconexin de los mismos, o a un nivel de comportamiento (nivel
RTL), describiendo la transferencia de informacin entre registros. Estos dos niveles de
descripcin pueden mezclarse dando lugar a diseos mixtos. En nuestro trabajo usaremos
CONTROL
P
C
Memoria
de
Programa
U
N
O
M
u
x
3
Banco
de
Registros
SUAT
M
D
R
M
u
x
1
D
O
S
ALU
B
T
R
E
S
Memoria
de
Datos
SuPC
M
D
R
M
u
x
2
C
U
A
T
R
O
Riesgos de la Segmentacin
Hay momentos en la segmentacin en los que la siguiente instruccin no se puede
ejecutar en el siguiente ciclo. Estos sucesos se denominan comnmente riesgos (hazards), y
los hay de tres tipos. A continuacin explicaremos los tres tipos de riesgos y la manera en la
que fueron solucionados.
Riesgos Estructurales
Estos riesgos se producen cuando el camino de datos no puede soportar la ejecucin
de una determinada secuencia de instrucciones que se quiere ejecutar durante un mismo ciclo.
En otras palabras, se produce un riesgo estructural cuando dos instrucciones quieren usar la
misma etapa durante el mismo ciclo.
Gracias a un diseo simple desde el primer momento (arquitectura Harvard) y a una
simple regla de segmentacin (que todas las instrucciones usen todas las etapas), no
contamos con este tipo de riesgos en nuestro microprocesador segmentado.
Riesgos de Datos
Estos riesgos se producen cuando una instruccin depende del resultado de una
instruccin previa que todava se encuentra dentro del pipeline. Veamos una situacin
hipottica sencilla para comprender mejor este tipo de riesgo. Supongamos tener 3 lneas de
cdigo como las siguientes:
ADD r1, r2, r3
ADD r4, r1, r2
STIN r4, r1, 10
Estas lneas indican hacer una suma de los valores contenidos en los registros 2 y 3 y
guardarla en el registro 1; posteriormente, sumar en el registro 4 los valores del 1 y del 2, y
finalmente guardar este valor (del registro 4) en la posicin de memoria indicada por la suma
del contenido del registro 1 ms 10.
Si seguimos la ejecucin de estas instrucciones, notamos que al momento de decodificar
la segunda suma, el resultado de la suma anterior (r1) todava no se grab en el banco de
registros, y lo mismo ocurrira con la operacin de escritura en memoria, por lo que con el
hardware disponible hasta el momento, el resultado de esta secuencia de instrucciones sera
desastroso. Por ello fue necesario incluir una Unidad de Adelantamiento en la etapa de
Decodificacin, que contemple todos los casos en los que un dato producido por alguna etapa
sea necesitado antes de estar disponible en el banco de registros. En caso de detectar la
ocurrencia de un riesgo de este tipo, entrega las seales indicadas para que efectivamente se
adelante el valor correcto. El adelantamiento se produce agregando dos multiplexores en las
entradas de la ALU, cuyas entradas provienen de las etapas D (normalmente), A y M.
An as, hay casos en los que resulta imposible adelantar los valores en el pipe, por
ejemplo, consideremos el siguiente ejemplo:
LDIN r1, r2, 10
ADD r3, r1, r2
Aqu estamos indicando al procesador que traiga un dato desde la posicin de memoria
(r2+10) y lo guarde en el registro 1. Luego, la suma necesitar ese valor para realizarse
correctamente. La tcnica de adelantamiento no resuelve este riesgo.
La solucin es insertar un ciclo que haga nada entre ambas instrucciones, o sea
detener el pipeline durante un ciclo llamado burbuja. Esto podra hacerse por software (en
tiempo de compilacin) o por hardware, deteniendo el PC y manejando las seales de control
correspondientes. Esta ltima es la opcin por la cual nos inclinamos, principalmente para
independizar al microprocesador del compilador. Ser necesaria una nueva unidad, a la que
llamaremos Unidad de Insercin de Burbuja, que debe detectar cuando ocurra el riesgo del
ejemplo antes mencionado y detener el pipeline cargando seales de control en el registro Dos
que no realicen escrituras, y evitando que el registro Uno y el PC actualicen sus valores. De
esta manera se consigue una efectiva parada en el pipeline.
Riesgos de Control
Llamaremos salto a toda modificacin del valor del PC en cualquier valor que no sea
adicionar 1. Esto significa que luego de la ejecucin de un salto, el programa debe continuar
ejecutando en una lnea que no es la prxima. Podemos clasificar los saltos en 2 tipos
elementales:
1. Saltos incondicionales, en los que el procesador simplemente salta.
2.
Saltos condicionales, en los que la ocurrencia del salto est subordinada a alguna
condicin, en nuestro caso de la etapa aritmtica exclusivamente. Pueden ser hacia
delante o hacia atrs.
CONTROL
M
u
x
P
'0'
P
C
Memoria
de
Programa
'0'
M
u
x
F
U
N
O
M
u
x
3
M
u
x
A
Banco
de
Registros
SUAT
M
u
x
1
D
O
S
M
u
x
A
M
D
R
A
ALU
M
u
x
B
T
R
E
S
Memoria
de
Datos
M
D
R
M
u
x
2
C
U
A
T
R
O
UCR
SuPC
UPS
UA
UIB
Conclusiones
Una vez finalizado el trabajo, pudimos comprobar que Verilog HDL constituye una
herramienta muy poderosa que potencia enormemente la productividad de los diseadores de
hardware. Tambin podemos agregar que no es muy costoso familiarizarse con el lenguaje, ya
que su sintaxis es bastante similar a la del lenguaje C, siendo este ltimo muy popular tanto en
ambientes profesionales como acadmicos. Sin embargo, presenta conceptos que no son
simples de comprender y manejar mentalmente (como la concurrencia de procesos) que
pueden resultar en fuentes de error de difcil identificacin si no son manejados con el cuidado
que merecen. Adems, de por s, la depuracin del cdigo es dificultosa y encontrar la causa
de los errores requiere conocer plenamente y tener presente el diseo del microprocesador.
Con respecto a su posible implementacin como parte de la asignatura mencionada,
pensamos que es muy til, importante y ms an, necesaria, porque proporcionara a los
estudiantes conocimientos bsicos sobre el manejo de una herramienta muy utilizada en el
ambiente de la industria. Adicionalmente, el uso de Verilog HDL no queda restringido al mbito
de Arquitectura de Computadoras, sino que puede extenderse a otras asignaturas de la
carrera, en lo que podra llegar a constituirse como un Laboratorio de Microprocesadores.
Estamos seguros de que se cumpli ampliamente la expectativa de que el trabajo sirva
como base para otros proyectos que lo amplen (agregndole mdulos ms complejos, como el
manejo de interrupciones y excepciones, por ejemplo), que lo usen como plataforma (por
ejemplo, el desarrollo de un sistema operativo o de un compilador), o que lo plasmen en un
circuito integrado programable, todos ellos sustentados en el hecho de poder simular el
funcionamiento de un microprocesador RISC. De hecho, actualmente los autores estn
trabajando en el diseo de una jerarqua de memoria para el microprocesador, y en la
formacin de un equipo de trabajo.
Finalmente, no queramos perder la oportunidad de expresar nuestro agradecimiento a
la ctedra de Arquitectura de Computadoras de la FACET por el apoyo que nos brindaron.
Bibliografa
[1] Patterson, David y Hennessy. Computer Organization & Design. The
Hardware/Software Interface
[2] Majorel Padilla, Nicols y Sale, Ernesto Jos. Diseo, Codificacin en Verilog HDL
y Simulacin de un microprocesador RISC de 32 bits
[3] Tannenbaum, Andrew S. Organizacin de Computadoras Un Enfoque
Estructurado
[4] Hyde, Daniel C. Handbook On Verilog HDL, Bucknell University.
[5] Lindsay, Donald. Static Methods in Branch Prediction, 1971.
[6] Mark W. Goudreau. Advanced Computer Architecture II, University of Central
Florida
[7] Extreme Tech, Dom. 16 de diciembre de 2001, A closer look at Branch Prediction
Autores
Nicols Majorel Padilla
nickmpad@arnet.com.ar
ernesto_j_s@yahoo.com