Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microblaze Jcra04 PDF
Microblaze Jcra04 PDF
Resumen. Este artculo tiene como objetivo servir de gua para diseos en FPGAs
donde se requiera capacidad de procesamiento, sin recurrir a un procesador externo.
Esta tarea es la principal aplicacin para el soft-processor Xilinx MicroBlaze. Este
bloque est optimizado para ejecutar cdigo C. Adems del ncleo procesador,
existen una gran variedad de perifricos; adicionalmente, pueden utilizarse los
recursos de la FPGA para agregar bloques custom definidos en VHDL. Este tutorial
abarca desde los detalles arquitecturales hasta las herramientas de diseo.
1. Introduccin
Este artculo se centra sobre el procesador embebido MicroBlaze, creado por Xilinx
para sus FPGAs Spartan y Virtex. An siendo un soft-processor, el usuario no tiene acceso
a los detalles VHDL del circuito. Slo puede analizarse a partir de la documentacin del
fabricante y de los resultados experimentales. An as, es una herramienta muy potente
para desarrollar proyectos relacionados con arquitecturas paralelas, codiseo y control; y en
general, en toda investigacin sobre software, puesto que permite una comparacin
inmediata con otras arquitecturas y metodologas de desarrollo.
Este tutorial se divide en tres partes, la primera analiza la arquitectura que el fabricante
ha utilizado para la realizacin del diseo, una segunda parte se encarga de la descripcin
del procedimiento para el desarrollo y utilizacin de cdigo para este procesador y por
ltimo, el desarrollo de perifricos propios para este procesador.
a. Repertorio de Instrucciones
La restriccin de espacio fuerza a un diseo sencillo, que encaja perfectamente con la idea
de las arquitecturas tipo RISC (Reduced Instruction Set Computer), donde el limitado
nmero de instrucciones permite simplificar la unidad de descodificacin. En el caso de
MicroBlaze, el nmero total de instrucciones que soporta son 87, si se consideran diferentes
las instrucciones que operan con valores inmediatos de aquellas que realizan la misma
operacin con registros. Adicionalmente, cada instruccin se ha elegido para que el tamao
de la ALU tambin sea reducido. Las instrucciones que requieran un procesamiento
complejo habrn de realizarse en un hardware especfico, diseado utilizando los restantes
recursos de la FPGA. El mecanismo de conexin de estos co-procesadores con Microblaze
se especifica en el protocolo FSL (Fast Simple Link ) [10].
b. Pipeline
32 bits
...
Lgica de
Controlador de buses de recepcin de
datos instruccin
32 bits 32 bits
Las FPGAs actuales disponen de memoria distribuida con un tiempo de acceso corto,
cuando son utilizadas por la lgica cercana. Este tipo de memoria es utilizada por
MicroBlaze para materializar sus 32 registros internos, el contador de programa y el
registro de estado. Este ltimo slo contiene el bit de acarreo, habilitacin de cachs,
indicador de estado de parada (break), error en el FSL y bit de excepcin producida por
divisin por cero. Adems de estos registros internos, MicroBlaze utiliza un buffer de 16
instrucciones mapeado en los registros de desplazamiento SRL de los slices. Este recurso es
fundamental para un buen rendimiento del procesador. Por ejemplo, en caso de que no
disponer de multiplicador y/o divisor hardware, se aprovecha el tiempo que tarda en
ejecutarse esta instruccin (32 ciclos) para tener preparadas las siguientes instrucciones.
La utilizacin de cachs es una prctica habitual en arquitecturas modernas; el diseo de
MicroBlaze no es una excepcin. Pero en este caso, la utilizacin y configuracin de los
tamaos de cach pueden ser fijados por el usuario. Para ello, existe el siguiente conjunto
de opciones a la hora de configurar el procesador: habilitacin de cach de instrucciones
y/o datos, tamao, rango de direcciones y tamao de palabra, aunque esta ultima opcin
solo es valida para la cach de datos. Opciones no configurables por el usuario son tamao
de los bloques de cach, la poltica de sustitucin de bloques o el grado de asociatividad de
la cach.
Todas estas opciones se especifican antes de sintetizar el diseo. Las cachs son de tipo
asociativo, por lo cual es necesario el calcular el nmero de bits de la direccin (tag bits)
que especifican bloques contenidos en cach, mediante la ecuacin (1).
Numero tag bits = log2(rango de memoria cacheable) - log2(tamao de la cach) (1)
Las cachs utilizan los bloques de RAM fijos (BRAM) que contiene la FPGA. Sin
embargo, cdigos compactos tambin pueden mapearse en BRAM. Por lo tanto, la
utilizacin de cachs ser necesaria en aquellos casos donde el cdigo o los datos utilizado
por MicroBlaze residan fuera de la FPGA.
LMB: (Local Memory Bus): Bus sncrono de alta velocidad, utilizado para conectar
perifricos y los bloques de memoria interna de la FPGA. Solo admite un maestro en su
implementacin para MicroBlaze y puede ser utilizado tanto para instrucciones como para
datos. Este bus es compatible con el PLB (Processor Local Bus) incluido en el estndar
CoreConnect, pero a diferencia de ste, el LMB no admite varios maestros ni tamaos de
palabra diferentes a 32 bits.
OPB: (On-chip Peripheral Bus): Bus sncrono utilizado para conectar perifricos con
tiempos de acceso variables. Soporta varios maestros y la conectividad de muchos
perifricos es sencilla gracias a su identificacin por multiplexacin distribuida. Soporta
transferencias de tamao de palabra dinmico.
DCR: (Device Control Register): Bus sncrono diseado para una conexin tipo anillo de
perifricos con ancho de banda muy bajo. Solo soporta un maestro y est diseado para
minimizar el uso de lgica interna.
Adems de estos tres buses existe otra alternativa para comunicarse con el procesador
MicroBlaze. Se trata de un protocolo de comunicacin denominado FSL (Fast Simple Link)
mencionado anteriormente, que permite la comunicacin con el procesador a travs de sus
propios registros internos. El perifrico actuara a modo de co-procesador y la conexin se
realiza de manera sencilla a travs de unos registros de desplazamiento de 32 bits de ancho.
La comunicacin con estas FIFOs se realiza con dos instrucciones especficas del
repertorio, que realizan las funciones de push y pop de estas memorias de desplazamiento.
MicroBlaze soporta hasta 16 dispositivos conectados con este protocolo.
e. Interrupciones y excepciones
El procesador MicroBlaze contiene una lnea de interrupciones, la cual al ser activada hace
que el procesador ejecute una rutina de manejo de interrupciones que ha de ser especificada
al compilador. Las excepciones se tratan de forma similar. Cuando una de ellas ocurre, se
paraliza el procesamiento de instrucciones y se ejecuta una rutina de manejo de
excepciones. En el caso de que el sistema necesite manejar ms de una interrupcin, ser
necesario la utilizacin de un perifrico especfico (OPB Interrupt Controller), que se
encarga de multiplexar e identificar las diferentes fuentes de interrupcin.
Este archivo con extensin .mhs (microprocessor hardware specification) contiene las
especificaciones de los puertos del sistema [4]. Cada puerto ha de ser especificado con un
nombre, tipo (entrada o salida) y el nmero de bits que componen el puerto. As, por
ejemplo, si configuramos el MicroBlaze para almacenar cdigo en una memoria externa a
la FPGA, se especificaran en este archivo las diferentes seales que desde el controlador
han de salir de la FPGA al exterior para controlar esta memoria. Tambin se especifican las
opciones de configuracin del procesador, tales como los buses que componen el sistema.
Otros parmetros a especificar son la utilizacin de recursos hardware de la FPGA, como
por ejemplo divisores hardware (en caso de querer utilizar recursos de la FPGA para esta
tarea), habilitacin de cachs y tamao de las mismas, y por ltimo, habilitacin y
opciones del modo de solucin de errores (debug).
Este archivo contiene las instanciaciones de los perifricos del sistema, as como la
configuracin de los mismos. Entre estas opciones figura el rango de memoria en el cual
estn mapeados estos perifricos. Estas pueden asignarse en un archivo de opciones
hardware .mpd (microprocessor peripheral description) y descargar de contenido al
archivo de configuracin de hardware. La herramienta EDK contiene un editor para este
archivo, de manejo muy sencillo.
Este archivo con extensin .mss (microprocessor software specification) contiene las
opciones de compilacin del software del sistema [4]. Incluye la especificacin del modo
de compilacin del cdigo, asignacin de libreras a perifricos, especificacin del mtodo
de solucin de errores, y otras opciones del compilador. Este archivo depende
explcitamente del archivo de descripcin de hardware, ya que debe de especificarse el
controlador para cada uno de los perifricos instanciados. De igual forma, si el dispositivo
donde se va a cargar el diseo utiliza recursos hardware especficos, por ejemplo un
multiplicador, es en este archivo donde se debe indicar al compilador que utilice este
recurso hardware.
Los controladores de los perifricos se encuentran en otros archivos especficos. Los
.mdd (microprocessor driver definition) contienen el cdigo necesario para el control de
cada perifrico. En la instanciacin del controlador se debe especificar la versin del
mismo, en caso de que existan varias y el nivel de abstraccin con el que se va a utilizar el
perifrico en el cdigo.
c. Cdigo
Los dos archivos anteriores son de una sintaxis muy simple, puesto que se trata de
especificar opciones e instanciar perifricos y sus controladores. Una vez compilados e
introducidos los perifricos a utilizar en el sistema MicroBlaze, solo queda agregar el
cdigo del programa. Estos archivos pueden estar en C, C++, o ensamblador. El compilador
para MicroBlaze est basado en el gcc desarrollado por el proyecto GNU [Referencia]. No
existe ninguna restriccin a la hora de escribir cdigo para un sistema MicroBlaze. Al ser
un procesador de 32 bits soporta todos los tipos de datos.
En el caso que el cdigo del sistema est diseado para ser almacenado en diferentes
zonas del mapa de memoria, por ejemplo cdigo repartido entre la memoria interna y
externa de la FPGA, es necesario escribir un Linker Script conteniendo las instrucciones
necesarias para que se compile cada parte del cdigo en el rango de direcciones
correspondiente.
4. Construccin de Perifricos
La creacin de un perifrico se desarrolla en varias fases bien definidas, y para ello es
necesario utilizar un sintetizador VHDL junto con otras herramientas incluidas en la
herramienta EDK [2].
signal Bus2IP_Addr
OPB_ABus signal Bus2IP_BE
OPB_BE signal Bus2IP_Burst
OPB_Clk signal Bus2IP_Clk
OPB_DBus signal Bus2IP_CS
OPB
OPB_RNW signal Bus2IP_Data
Bus
OPB_Rst OPB ipif signal Bus2IP_RdCE
Lgica
Usuario
OPB_select signal Bus2IP_Reset
OPB_seqAddr signal Bus2IP_RNW
Sln_DBus signal Bus2IP_WrCE
Sln_errAck signal IP2Bus_Ack
Sln_retry signal IP2Bus_Data
Sln_toutSup signal IP2Bus_Error
Sln_xferAck signal IP2Bus_PostedWrInh
signal IP2Bus_Retry
signal IP2Bus_ToutSup
5. Problemas ms comunes
A continuacin se enumera una serie de puntos que deben verificarse en caso de una
implementacin fallida:
5.1 Comprobar que todas las seales de reloj (buses, perifricos y procesador) estn
conectadas al mismo puerto.
5.2 Comprobar el nivel de reset activo y cerciorarse de que coincide con el que
proporciona la placa utilizada.
5.3 Comprobar la correspondencia entre los puertos del archivo .mhs y la asignacin
de pines en el archivo .ucf.
5.4 Asegurar la seleccin del nivel de abstraccin (inteface level) con que se va a
utilizar cada perifrico. Adems utilizar en el cdigo las libreras
correspondientes a este nivel de abstraccin.
5.5 Comprobar las opciones de generacin de la cadena de bits de configuracin
(bitstream) en el archivo bitgen.ut dentro del directorio del proyecto /etc y
asegurarse que estas opciones son las requeridas por la FPGA en la placa
utilizada.
5.6 Para primeras implementaciones es fundamental el uso de la herramienta de
debug, XMD. Esta proporcionara informacin del estado del sistema, sobre todo
si est cargado correctamente en la FPGA.
5.7 Al utilizar UART y conectarla al PC a travs de pines de la FPGA, asegurarse
de la utilizacin de un conversor de niveles para protocolo RS-232.
5.8 A veces, al compilar el cdigo, ocupa ms espacio de memoria que el
disponible. Aunque no se genera un mensaje de error en el flujo de
implementacin de la herramienta, el sistema no arranca.
5.9 A la hora de compilar un perifrico, incluir las libreras utilizadas en el diseo
en el orden de compilacin correcto, en caso de utilizar la herramienta para
asistir a esta compilacin incluida en EDK, Import Peripheral Wizard.
6. Conclusiones
Agradecimientos
Referencias