Upload
hoangtuong
View
213
Download
0
Embed Size (px)
Citation preview
PROYECTO FIN DE CARRERA
Microprocesador sintetizable en FPGA
AUTOR: Álvaro Padierna Díaz
MADRID, Jun/2009
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERO EN AUTOMÁTICA Y ELECTRÓNICA INDUSTRIAL
ESTE PROYECTO CONTIENE LOS SIGUIENTES DOCUMENTOS
DOCUMENTO Nº 1, MEMORIA 1.1 Memoria pág. 1 a 755 75 páginas 1.2 Estudio Económico pág. 76 a 77 2 páginas 1.3 Manual del Usuario pág. 78 a 101 24 páginas 1.4 Código pág. 102 a 103 2 páginas 1.5 Datasheets pág. 154 a 197 26 páginas DOCUMENTO Nº 2, PLANOS 2.1 Lista de planos pág. 1 1 página 2.2 Planos pág. 2 a 4 3 páginas DOCUMENTO Nº 3, PLIEGO DE CONDICIONES 3.1 Generales y Económicas pág. 2 a 4 3 páginas 3.2 Técnicas y Particulares pág. 7 a 7 3 páginas DOCUMENTO Nº 4, PRESUPUESTO 4.1 Mediciones pág. 2 a 3 2 páginas 4.2 Precios Unitarios pág. 4 1 página 4.3 Sumas Parciales pág. 5 1 página 4.4 Presupuesto General pág. 6 1 página
Autorizada la entrega del proyecto
Microprocesador sintetizable en FPGA
Realizado por:
Álvaro Padierna Díaz
Vº Bº del director de proyecto
Firmado: Jose Daniel Muñoz Fríaz
Fecha: ....../............/......
Vº Bº del Coordinador de Proyectos
Firmado: Álvaro Sánchez Miralles
Fecha: ....../............/......
PROYECTO FIN DE CARRERA
Microprocesador sintetizable en FPGA
AUTOR: Álvaro Padierna Díaz
MADRID, Jun/2009
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERO EN AUTOMÁTICA Y ELECTRÓNICA INDUSTRIAL
Resumen I
MICROPROCESADOR SINTETIZABLE EN FPGA
Autor: Padierna Díaz, Álvaro.
Director: Muñoz Frias, José Daniel.
Entidad colaboradora: EADS-Astrium-Crisa.
RESUMEN DEL PROYECTO
a integración de microprocesadores en FPGAs es una estrategia muy potente en
el mundo de la electrónica digital. Siendo posible integrar sistemas mixtos en
los que se combinen procesador y lógica convencional, agilizando las tareas y
ahorrando espacio, bien escaso en los sistemas embarcados en satélites.
En el mercado hay disponible una gama moderadamente amplia de dispositivos, entre
los que se pueden encontrar tanto dispositivos de código abierto, como dispositivos
de código propietario. Sin embargo, por sus características, ninguno está optimizado
para labores de control de flujo.
El objetivo del presente proyecto es diseñar un microprocesador altamente
especializado en ejecutar, de la forma más eficiente posible, tareas de control de flujo.
De este modo se logra cubrir los requerimientos específicos de este tipo de tareas,
evitando el derroche innecesario de las celdas lógicas de la FPGA
Tras el análisis detenido de los procesos que pueden tener lugar en una rutina de
control de flujo (a partir de una rutina “tipo” proporcionada por EADS-Astrium-
Crisa) se desarrolló un softcore con las siguientes características:
1) Banco de 16 registros de propósito general, en el que el registro 0 se siempre
alberga el valor cero.
2) Memoria de programa, con capacidad de referenciar hasta 65.536 instrucciones,
se trata de una memoria tipo “Hard program code storage”, en la que el código se
encuentra sintetizado en lógica de puertas, sacrificando la reprogramabilidad en
pos de una mayor robustez frente a la corrupción de los datos debida a la
radiación.
3) El micro tiene una capacidad de direccionamiento de memoria de 16 bits, por
medio de la cual es posible manipular, además de la propia memoria, diversos
elementos internos de la máquina. De este modo se obtiene una alta flexibilidad,
siendo posible agregar o quitar periféricos con solo modificar el mapeado de
memoria. Los elementos actualmente integrados en el micro son:
L
Resumen
Álvaro Padierna Díaz
I
a) Interfaz con el bus APB: Se trata del elemento encargado de llevar el peso
de la comunicación del micro con el exterior. Se trata de un maestro del bus
AMBA 3 APB, con capacidad de soportar esperas y operaciones erróneas en
el bus.
b) Soporte para 16 interrupciones: El dispositivo es capaz de soportar hasta 16
secuencias de interrupción con prioridad fija y sin anidamiento ni
almacenamiento del contexto (Tarea que, por razones de optimización, queda
a cargo del programador sobre aquellos registros que sean manipulados en el
proceso). Las diferentes rutinas son despertadas por un flanco de subida en el
puerto de entrada destinado a tal efecto. El circuito ha sido diseñado para que
el número de interrupciones que puedan ser gestionadas pueda ser ampliado
de forma casi inmediata en caso de ser necesario
c) Un timer interno: Asociado a una instrucción de salto condicional, permite
la ejecución de retardos, muy comunes en operaciones de control de flujo.
En lo referente al juego de instrucciones, se ha tomado un juego de instrucciones
reducido, optimizado para la labor a la que está especializado el procesador, así las
instrucciones disponibles son:
4) Operaciones aritméticas: Tipo suma y resta en complemento a dos bien entre
dos registros, bien entre un registro y un inmediato.
5) Operaciones lógicas: Instrucciones AND, OR y XOR bit a bit entre registros o
entre registro e inmediato
6) Operaciones de comparación: Compara dos registros o un registro y un
inmediato. También se engloba en este grupo la verificación de un bit en concreto
de una palabra almacenada en un registro
7) Operaciones de manejo de memoria: Permiten mover información entre
memoria y registros así como cargar inmediatos en un registro dado o copiar su
contenido en otro registro.
8) Instrucciones de salto: Se trata de instrucciones de salto a una determinada
posición de la memoria de programa, bien de forma condicional (asociado al
resultado de una instrucción de comparación previa o al estado de un indicador
interno como el estado del timer o el testigo de error del maestro del bus APB) o
bien incondicionales.
Resumen
Álvaro Padierna Díaz
I
Figura 1: Diagrama de bloques del micro.
Tests
Para verificar el buen funcionamiento de todas las partes del equipo, se dividió el
micro en bloques funcionales, haciéndolos funcionar en rutinas automáticas de
verificación denominadas “test benches”, en las que los bloques son sometidos a
todas las combinaciones de entradas posibles, de modo que quede probado su buen
funcionamiento en cualquier caso posible.
Estas rutinas de test son extensivas a los bloques superiores, formados por
combinación de bloques más simples, hasta llegar al nivel superior, es decir, el propio
procesador, para cuya verificación se recurrió a un programa de autotest,
obteniéndose resultados satisfactorios.
Conclusiones
Tras finalizar el presente proyecto se ha obtenido un microprocesador altamente
especializado, con una gran eficiencia en lo que a lógica empleada se refiere y con
una gran escalabilidad para trabajar con diferentes anchos de palabra, número de
interrupciones etc. así como para la incorporación de nuevos periféricos mediante el
direccionamiento en memoria.
Así pues, se concluye el presente proyecto con la satisfacción de haber realizado un
dispositivo funcional y con un gran potencial de aplicación sobre equipos reales.
Abstract
I
MICROPROCESSOR SYNTETISIZED IN FPGA
Author: Padierna Díaz, Alvaro.
Director: Muñoz Frias, Jose Daniel.
Partner: EADS-Astrium-Crisa.
PROJECT SUMMARY
he integration of microprocessors in FPGAs is a very powerful strategy in
the world of digital electronics. Being possible to integrate mixed systems
that combine microprocessor and conventional logic , speeding up the tasks and
saving space, scarce in the systems aboard satellites..
There is a moderately wide range of devices in the market, that range from open
source code to propietary code devices. However none are optimized for work
flow control (flags handling, continuous jump secuences, mathematical operations
limited to the management of loops, etc).
The objective of this project is to design a microprocessor specialized for
processing work flow control routines the most efficient way possible. This way
we can cover the requirements for this type of task, avoiding unnecessary waste of
logic cells in the FPGA.
After the careful analysis of the processes that can take place in a routine
of flow control (from a routine "type" by EADS-Astrium-Crisa) a softcore with
the following characteristics was developed:
1) Bank of 16 general purpose registers where the register 0 has always a value
of zero.
2) The chip has a memory addressing capability of 16 bits, by which you can
manipulate, in addition to the memory, various internal elements of the
machine. Thus giving a high flexibility, being possible to add or remove
peripherals with just changing the mapping of memory. The elements
currently included in the micro are:
a) APB bus Interface: It is the element responsible for carrying the micro
communication with the outside world. This is a Master AMBA 3 APB
bus, capable of supporting wrong operations and waits on the bus.
T
Abstract
Álvaro Padierna Díaz
IIII
b) Support for 16 interrupts: The device is capable of supporting up to
16 interrupt sequences with a fixed priority without embedding and
storage of the context (a task which, for optimization, is left to the
programmer to decide how those records are handled in the process) . The
different routines are awakened by a rising edge in the entry port
designated for that effect. This element has been designed so that the
number of interruptions that can be managed, can be expanded almost
immediately if necessary
c) An internal timer: Associated to a conditional jump instruction, allows
the implementation delays, common operations in flow control.
3) Program memory with capacity to refer up to 65,536 instructionsng, this is
a "Hard program code storage" memory type, in which the code is synthesized
into logic gates, sacrificing the option for reprogramming the device towards a
greater robustness against data corruption due to radiation.
Regarding the set of instructions, it takes a small set of instructions optimized for
the kind of work that the equipment is specialized for, the avaible instructions are:
1) Arithmetic operations: addition and subtraction in two's complement
notation between registers or between a register and inmediate data.
2) Logical operations: Instructions AND, OR and XOR bit to bit between
registers or between a register and immediate data.
3) Comparison operations: Compares two registers or a register and immediate
data. Also the verification of a specific bit of a word stored in a register is part
of this group of operations.
4) Memory management operations: they allow you to move information
between registers and memory, along with loading inmediate data in a given
register or copy a register's contents into another one.
5) Jump instructions: Instructions to jump into a determined position of the
program memory, either conditional (associated to the result of a previous
comparison instruction or the state of an internal indicator like a timer or an
error flag in the APB Bus Master) or unconditional.
Abstract
Álvaro Padierna Díaz
IIII
Figure 2: Microprocessor block diagram.
Tests
To verify the proper functioning of all parts of the system, it was divided into
micro functional blocks, making them operate in automatic verification routines
called "test benches," in which the blocks are subjected to all possible
combinations of inputs, so the proper functioning of the module is proved for
every possible case, independently of any particular case.
These test routines are extended to the upper blocks, formed by combining the
simpler blocks until you reach the top level, the processor itself, for its
verification an autotest program was used, obtaining satisfactory results.
Conclusions
Upon completion of this project we have obtained a highly specialized
microprocessor, with a high efficiency as far as logic is concerned and high
flexibility to work with different word widths, number of breaks and so on. as
well as for adding new peripherals by memory addressing.
Thus, this project is concluded to the satisfaction of having carried out a
functional device with a great potential for application on real equipment.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
iii}
Índice general
MEMORIA.......................................................................................................................................I
1 INTRODUCCIÓN................................................................................................................. 1
1.1 ¿POR QUÉ USAR UN MICROCONTROLADOR EN UNA FPGA? ............................................ 1 1.2 ESTADO DEL ARTE .......................................................................................................... 2
1.2.1 Core ABC de Actel .................................................................................................... 3 1.2.2 Core 8051 de Actel.................................................................................................... 4 1.2.3 PicoBlaze de Xilinx ................................................................................................... 5 1.2.4 MicroBlaze de Xilinx................................................................................................. 6 1.2.5 Nios de Altera............................................................................................................ 7 1.2.6 LEON de la ESA........................................................................................................ 7
1.3 MOTIVACIÓN DEL PROYECTO.......................................................................................... 9 1.4 OBJETIVOS.................................................................................................................... 10 1.5 METODOLOGÍA / SOLUCIÓN DESARROLLADA................................................................ 10 1.6 RECURSOS / HERRAMIENTAS EMPLEADAS ..................................................................... 10
2 ESTUDIO PRELIMINAR.................................................................................................. 11
2.1 ANÁLISIS PREVIO .......................................................................................................... 11 2.1.1 Elección del dispositivo........................................................................................... 11 2.1.2 Características de la familia RTAX 2000/4000....................................................... 11
2.1.2.1 Las celdas lógicas........................................................................................................14 2.1.2.2 Topología de la memoria.............................................................................................17
2.1.3 Características de la familia ProASIC.................................................................... 19 2.1.4 Topología de la memoria ........................................................................................ 21
2.1.4.1 Lectura síncrona ..........................................................................................................21 2.1.4.2 Lectura asíncrona ........................................................................................................22 2.1.4.3 Escritura síncrona........................................................................................................23 2.1.4.4 Escritura asíncrona ......................................................................................................23
2.1.5 Conclusión .............................................................................................................. 24 2.2 ESTUDIO DEL CÓDIGO “TIPO”........................................................................................ 25 EN BASE A ESTO, SE TOMAN LAS SIGUIENTES DECISIONES DE CARA A LA ESPECIFICACIÓN DE LA
ARQUITECTURA. .......................................................................................................................... 26 2.3 EL PROTOCOLO APB..................................................................................................... 27
2.3.1 Señales del bus APB................................................................................................ 27 2.3.2 Maniobra de escritura con espera y sin error......................................................... 28 2.3.3 Maniobra de lectura con espera y sin error............................................................ 28 2.3.4 Maniobra de escritura con error ............................................................................ 29 2.3.5 Maniobra de lectura con error................................................................................ 29
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
iiii
2.3.6 Diagrama de fases del protocolo APB.................................................................... 30
3 ARQUITECTURA DEL MICROPROCESADOR .......................................................... 31
3.1 ESPECIFICACIÓN DE LA ARQUITECTURA........................................................................ 31 3.2 EL JUEGO DE INSTRUCCIONES ....................................................................................... 33
3.2.1 Las instrucciones de movimiento de datos .............................................................. 33 3.2.1.1 Instrucciones movrm y movmr....................................................................................35 3.2.1.2 Instrucción movir ........................................................................................................36 3.2.1.3 Instrucción movrr ........................................................................................................37
3.2.2 Las instrucciones de comparación.......................................................................... 37 3.2.2.1 Las instrucciónes cmp puramente comparativas..........................................................38 3.2.2.2 La instrucción cmpbit..................................................................................................38
3.2.3 Las instrucciones aritméticas.................................................................................. 38 3.2.4 Las instrucciones lógicas ........................................................................................ 39 3.2.5 Las instrucciones de salto ....................................................................................... 39
3.2.5.1 La instrucción Jmpt .....................................................................................................40 3.2.5.2 La instrucción Jmpf .....................................................................................................40 3.2.5.3 La instrucción Jmpuc...................................................................................................40 3.2.5.4 La instrucción Jmpsig..................................................................................................40 3.2.5.5 La instrucción End ......................................................................................................40
4 IMPLANTACIÓN............................................................................................................... 42
4.1 VISIÓN GENERAL .......................................................................................................... 42 4.2 LA ALU ....................................................................................................................... 43
Figura 4-2: Esquema funcional del ALU .............................................................................. 43
4.2.1 El bloque sumador .................................................................................................. 44 4.2.2 El bloque restador................................................................................................... 44 4.2.3 El bloque comparador............................................................................................. 44 4.2.4 El bloque lógico ...................................................................................................... 45 4.2.5 El bloque “flag state” ............................................................................................. 45
4.3 EL CONTROL ................................................................................................................. 46 4.3.1 Mapeo de memoria.................................................................................................. 47 4.3.2 Gestión de los punteros de interrupción ................................................................. 48 4.3.3 Gestión de las interrupciones.................................................................................. 50 4.3.4 Gestión de los parámetros del timer ....................................................................... 52 4.3.5 Gestión del timer ..................................................................................................... 53 4.3.6 El watchdog............................................................................................................. 55 Manejo del contador de programa (fetch)............................................................................. 57 4.3.7 Decodificación de la instrucción............................................................................. 59 4.3.8 La memoria del programa ...................................................................................... 60
4.4 EL MAESTRO DE APB ................................................................................................... 62
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
ivi}
5 RESULTADOS/EXPERIMENTOS................................................................................... 63
5.1 TEST BENCH DEL MAESTRO DE APB ............................................................................. 64 5.1.1 Operación de escritura (sin error).......................................................................... 64 5.1.2 Operación de escritura (con error)......................................................................... 65 5.1.3 Operación de lectura (sin error) ............................................................................. 65 5.1.4 Operación de lectura (con error)............................................................................ 66
5.2 TEST BENCH DEL BANCO DE REGISTROS........................................................................ 67 5.3 TEST BENCH DEL BLOQUE SUMADOR ............................................................................ 68 5.4 TEST BENCH DEL BLOQUE RESTADOR ........................................................................... 68 5.5 TEST BENCH DEL BLOQUE COMPARADOR ...................................................................... 69
6 CONCLUSIONES ............................................................................................................... 73
7 FUTUROS DESARROLLOS............................................................................................. 74
BIBLIOGRAFÍA........................................................................................................................... 75
ESTUDIO ECONÓMICO............................................................................................................ 76
MANUAL DE USUARIO............................................................................................................. 78
INTRODUCCIÓN ........................................................................................................................... 81 ¿Por qué usar un microcontrolador en una FPGA? ............................................................. 81
DESCRIPCIÓN DEL DISPOSITIVO ................................................................................................... 82 PUERTOS ..................................................................................................................................... 84 LISTA DE INSTRUCCIONES –FUNCIONES ...................................................................................... 86 LISTA DE INSTRUCCIONES – CÓDIFICACIÓN ................................................................................ 91 MAPEO DE MEMORIA................................................................................................................... 94 EL INTERFAZ APB....................................................................................................................... 96
Señales del bus APB .............................................................................................................. 96 Maniobra de escritura con espera y sin error....................................................................... 97 Maniobra de lectura con espera y sin error.......................................................................... 97 Maniobra de escritura con error........................................................................................... 98 Maniobra de lectura con error.............................................................................................. 98 Diagrama de fases del protocolo APB .................................................................................. 99
CÓDIGO FUENTE..................................................................................................................... 102
8 CÓDIGO VHDL................................................................................................................ 103
DATASHEETS............................................................................................................................ 104
9 POASIC.............................................................................................................................. 106
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
vi}
10 RTAX.................................................................................................................................. 115
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
vii}
Índice de figuras
FIGURA 1: DIAGRAMA DE BLOQUES DEL MICRO................................................................................ III FIGURE 2: MICROPROCESSOR BLOCK DIAGRAM. ............................................................................... III
FIGURA 1-1: DIAGRAMA ESQUEMÁTICO DEL CORE ABC DE ACTEL. ................................................. 3
FIGURA 1-2: ESQUEMA DEL CORE8051 Y SU INTERFAZ SFR.............................................................. 4
FIGURA 1-3: DIAGRAMA DE BLOQUES DEL PICOBLAZE ..................................................................... 6
FIGURA 1-4: DIAGRAMA DE BLOQUES DEL LEON3 ........................................................................... 7
FIGURA 2-1:ESTRUCTURA DE LAS FPGA'S DE LA FAMILIA RTAX DE ACTEL .................................. 12
FIGURA 2-2: MODULO DE MEMORIA DEL RTAX-S/SL (ACTEL)....................................................... 13
FIGURA 2-3: CELDA C ...................................................................................................................... 14
FIGURA 2-4: CELDA R ..................................................................................................................... 15
FIGURA 2-5: DETALLE DE LAS CONEXIONES DIRECTAS ENTRE CELDAS LÓGICAS. ............................ 15
FIGURA 2-6: EVOLUCIÓN TEMPORAL DE LS SEÑALES EN UN FLIP-FLOP FORMADO POR CELDAS R... 16
FIGURA 2-7: EVOLUCIÓN DE LAS FORMAS DE ONDA EN OPERACIONES DE LECTURA Y ESCRITURA... 17
FIGURA 2-8: ORGANIZACIÓN INTERNA DE LA PFGA PROASIC....................................................... 19
FIGURA 2-9: CELDA LÓGICA PROASIC........................................................................................... 20
FIGURA 2-10: OPERACIÓN DE LECTURA SÍNCRONA DE LA MEMORIA SRAM.................................... 21
FIGURA 2-11: LECTURA ASÍNCRONA DE LA MEMORIA SRAM ......................................................... 22
FIGURA 2-12ESCRITURA SÍNCRONA SOBRE LA MEMORIA SRAM..................................................... 23
FIGURA 2-13: ESCRITURA ASÍNCRONA SOBRE LA MEMORIA SRAM ................................................ 24
FIGURA 2-14: OPERACIÓN DE ESCRITURA EN UN ESCLAVO APB...................................................... 28
FIGURA 2-15: OPERACIÓN DE LECTURA DE UN ESCLAVO APB......................................................... 28
FIGURA 2-16: OPERACIÓN DE ESCRITURA ERRONEA EN UN ESCLAVO APB...................................... 29
FIGURA 2-17: OPERACIÓN DE LECTURA ERRONEA EN UN ESCLAVO APB......................................... 29
FIGURA 2-18: DIAGRAMA DE FASES DEL PROTOCOLO APB ............................................................. 30
FIGURA 4-1: ORGANIZACIÓN GENERAL DEL MICRO ......................................................................... 42
FIGURA 4-2: ESQUEMA FUNCIONAL DEL ALU ................................................................................. 43
FIGURA 4-3: DIAGRAMA FUNCIONAL DEL CONTROL. ....................................................................... 46
FIGURA 4-4 DIAGRAMA DE FLUJO DE LA GESTIÓN DE INTERRUPCIONES........................................... 51
FIGURA 4-5 :DIAGRAMA DE FLUJO DEL FUNCIONAMIENTO DEL TIMER............................................. 53
FIGURA 4-6: DIAGRAMA DE FLUGO DEL PROCESO DE FECH ............................................................. 57
FIGURA 4-7: DIAGRAMA DE ESTADOS DEL MAESTRO DE APB ......................................................... 62
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
viii
FIGURA 5-1: ESQUEMA DEL PROCESO DE TEST................................................................................. 63
FIGURA 5-2: SEÑALES CORRESPONDIENTE A LA ESCRITURA EN UN ESCLAVO DE APB..................... 64
FIGURA 5-3: SEÑALES CORRESPONDIENTE A LA ESCRITURA ERRONEA EN UN ESCLAVO DE APB..... 65
FIGURA 5-4:: SEÑALES CORRESPONDIENTES A LA LECTURA DE UN ESCLAVO DE APB..................... 65
FIGURA 5-5: SEÑALES CORRESPONDIENTES A LA LECTURA ERRONEA DE UN ESCLAVO DE APB ...... 66
FIGURA 5-6: VISIÓN GENERAL DEL PROCESO DE TEST DEL BANCO DE REGISTROS............................ 67
FIGURA 5-7: DETALLE DEL PROCESO DE ESCRITURA EN EL BANCO DE REGISTROS. .......................... 67
FIGURA 5-8: DETALLE DEL PROCESO DE RECTURA DE LOS REGISTROS............................................. 67
FIGURA 5-9: DETALLE DEL PROCESO DE TEST DEL BLOQUE SUMADOR. ........................................... 68
FIGURA 5-10: DETALLE DEL PROCESO DE TEST DEL BLOQUE RESTADOR.......................................... 68
FIGURA 5-11: DETALLE DEL PROCESO DE TEST DEL BLOQUE COMPARADOR. ................................... 69
FIGURA 7-1: INTERFAZ DE LEON .................................................................................................... 74
FIGURA 0-1: INTERFAZ DEL CORE .................................................................................................... 84
FIGURA 0-2: OPERACIÓN DE ESCRITURA EN UN ESCLAVO APB. ...................................................... 97
FIGURA 0-3: OPERACIÓN DE LECTURA DE UN ESCLAVO APB........................................................... 98
FIGURA 0-4: OPERACIÓN DE ESCRITURA ERRONEA EN UN ESCLAVO APB........................................ 98
FIGURA 0-5: OPERACIÓN DE LECTURA ERRONEA EN UN ESCLAVO APB........................................... 99
FIGURA 0-6: DIAGRAMA DE FASES DEL PROTOCOLO APB ............................................................... 99
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
viii
Índice de tablas
TABLA 1-1: SOFTCORES DISPONIBLES EN EL MERCADO ..................................................................... 2
TABLA 1-2: SOFTWARE EMPLEADO EN EL PROYECTO. ..................................................................... 10
TABLA 2-1: NÚMERO DE CELDAS LÓGICAS EN LOS DISPOSITIVOS DE LA FAMILIA RTAX DE ACTEL 12
TABLA 2-2: ORGANIZACIÓN DE LA MEMORIA EN LAS FPGA'S DE LA FAMILIA RTAX DE ACTEL..... 13
TABLA 2-3: TIEMPOS ASOCIADOS A LA FIGURA PREVIA EN EL PEOR CASO POSIBLE.......................... 16
TABLA 2-4: TIEMPO ASOCIADOS A LA LECTURA Y ESCRITURA EN RAM ........................................... 18
TABLA 2-5: CONFIGURACIÓN DE LA MEMORIA EN UNA PASTILLA PROASIC EN FUNCIÓN DEL
DISPOSITIVO ........................................................................................................................... 19
TABLA 2-6: RETARDOS DE DIFERENTES CIRCUITOS LÓGICOS. .......................................................... 20
TABLA 2-7: SEÑALES QUE INTERVIENEN EN LA OPERACIÓN DE LA MORIA SRAM ........................... 21
TABLA 2-8:RETARDOS ASOCIADOS A LA LECTURA SÍNCRONA DE LA SRAM ................................... 22
TABLA 2-9: RETARDOS ASOCIADOS A LA LECTURA ASÍNCRONA DE LA SRAM ................................ 22
TABLA 2-10: RETARDOS ASOCIADOS A LA ESCRITURA SÍNCRONA DE LA SRAM ............................. 23
TABLA 2-11: RETARDOS ASOCIADOS A LA ESCRITURA ASÍNCRONA DE LA SRAM ........................... 24
TABLA 3-1: JUEGO DE INSTRUCCIONES DE MOVIMIENTO DE DATOS ................................................. 33
TABLA 3-2: JUEGO DE INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTROS. ................................ 33
TABLA 3-3: JUEGO DE INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTRO E INMEDIATO. ............ 34
TABLA 3-4: : JUEGO DE INSTRUCCIONES DE OPERACIONES ARITMÉTICAS ENTRE REGISTROS .......... 34
TABLA 3-5: JUEGO DE INSTRUCCIONES DE OPERACIONES ARITMÉTICAS ENTRE REGISTRO E
INMEDIATO............................................................................................................................. 34
TABLA 3-6: JUEGO DE INSTRUCCIONES DE OPERACIONES LÓGICAS ENTRE REGISTROS .................... 34
TABLA 3-7: JUEGO DE INSTRUCCIONES DE OPERACIONES LÓGICAS ENTRE REGISTRO E INMEDIATO 35
TABLA 3-8: JUEGO DE INSTRUCCIONES DE SALTO. ........................................................................... 35
TABLA 4-1: OBTENCIÓN DE LOS RESULTADOS DE LA COMPARACIÓN ............................................... 44
TABLA 4-2: MAPEADO DE LA MEMORIA........................................................................................... 47
TABLA 4-3: ZONA DE MEMORIA RESERVADA PARA LOS PUNTEROS A INTERRUPCIONES. .................. 48
TABLA 4-4: ORGANIZACIÓN DEL AREA DE MEMORIA DEDICADA A LOS PARÁMETROS DEL TIMER. .. 52
TABLA 4-5: ORGANIZACIÓN DEL AREA DE MEMORIA DEDICADA A LOS PARÁMETROS DEL
WATCHDOG. ........................................................................................................................... 56
TABLA 4-6: TIPOS FORMATOS DE INSTRUCCIÓN............................................................................... 59
TABLA 0-1: FUNCIONES DE LOS PUESTOS DEL MICRO. ..................................................................... 85
TABLA 0-2: INSTRUCCIONES DE MANEJO DE MEMORIA. ................................................................... 86
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
ixi}
TABLA 0-3: INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTROS.................................................. 87
TABLA 0-4: INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTRO E INMEDIATO .............................. 88
TABLA 0-5: INSTRUCCIONES ARITMÉTICAS ENTRE REGISTROS......................................................... 89
TABLA 0-6: INSTRUCCIONES ARITMÉTICAS ENTRE REGISTRO E INMEDIATO ..................................... 89
TABLA 0-7: INSTRUCCIONES LÓGICAS ENTRE REGISTROS ................................................................ 89
TABLA 0-8: INSTRUCCIONES LÓGICAS ENTRE REGISTRO E INMEDIATO............................................. 90
TABLA 0-9: INSTRUCCIONES DE SALTO ............................................................................................ 90
TABLA 0-10: JUEGO DE INSTRUCCIONES DE MOVIMIENTO DE DATOS ............................................... 91
TABLA 0-11: JUEGO DE INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTROS. .............................. 91
TABLA 0-12: JUEGO DE INSTRUCCIONES DE COMPARACIÓN ENTRE REGISTRO E INMEDIATO. .......... 92
TABLA 0-13: : JUEGO DE INSTRUCCIONES DE OPERACIONES ARITMÉTICAS ENTRE REGISTROS ........ 92
TABLA 0-14: JUEGO DE INSTRUCCIONES DE OPERACIONES ARITMÉTICAS ENTRE REGISTRO E
INMEDIATO............................................................................................................................. 92
TABLA 0-15: JUEGO DE INSTRUCCIONES DE OPERACIONES LÓGICAS ENTRE REGISTROS .................. 92
TABLA 0-16: JUEGO DE INSTRUCCIONES DE OPERACIONES LÓGICAS ENTRE REGISTRO E INMEDIATO
............................................................................................................................................... 93
TABLA 0-17: JUEGO DE INSTRUCCIONES DE SALTO. ......................................................................... 93
TABLA 0-18: MAPEADO DE LA MEMORIA......................................................................................... 94
TABLA 0-19: ORGANIZACIÓN DEL AREA DE MEMORIA DEDICADA A LOS PARÁMETROS DEL TIMERY
DEL WATCHDOG. .................................................................................................................... 94
TABLA 0-20: ZONA DE MEMORIA RESERVADA PARA LOS PUNTEROS A INTERRUPCIONES. ................ 95
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
1i}
1 INTRODUCCIÓN
1.1 ¿Por qué usar un microcontrolador en una FPGA?
Tanto los microcontroladores como las FPGA’s son capaces de implementar
prácticamente cualquier función lógica. Sin embargo, cada uno tiene ventajas
particulares en coste, rendimiento y facilidad de uso.
Los microcontroladores se ajustan muy bien a tareas de control, adaptándose
especialmente bien a los cambios de especificaciones.
La programación de secuencias de control o de máquinas de estado por medio de
código ensamblador es, por lo general, más sencillo que la creación de éstas
directamente en la propia FPGA.
Los microcontroladores suelen tener limitado su rendimiento. Cada instrucción se
ejecuta de forma secuencial, por lo que a medida que la aplicación presenta mayor
complejidad, el número de instrucciones necesarias crece, en detrimento del
rendimiento del sistema. Sin embargo, mientras que el código entre dentro de la
memoria del micro, no se presentarán más inconvenientes.
Por otro lado, La implantación del algoritmo directamente en la FPGA, siendo
posible llevar a cabo el algoritmo de manera secuencial o en paralelo,
consumiéndo una mayor cantidad de recursos de la FPGA a medida que se
incrementa la complejidad de la aplicación.
Un softcore (micro sintetizable en una FPGA) auna lo mejor de estos dos mundos.
Así es posible ejecutar rutinas en el micro, mientras que ciertos procesos que
necesitan respuestas rápidas o procesos paralelizados se ejecutan en hardware en
la FPGA de forma externa al microprocesador.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
2i}
1.2 Estado del arte
Prácticamente todos los fabricantes de FPGA’s proporcionan microprocesadores
sintetizables én estas. Sin embargo, tal y como se verá a continuación, bien por ser
demasiado limitados, bien por estar sobredimensionados para esta aplicación en
concreto, no se ajustan a las especificaciones.
A continuación se ilustra una tabla resumen con los principales softcores
existentes actualmente.
Procesador Desarrollador ¿Código abierto? Soporte para bus Notas
TSK3000A Altium No – Sin regalías Wishbone 32-bits arquitectura Harvard.
Incorpora multiplicador, divisor...
TSK51/52 Altium No - Sin regalías Wishbone / 8051 8-bits
OpenSPARC T1 Sun Si No 64-bits
MicroBlaze Xilinx No PLB, OPB, FSL, LMB 32-bits
PicoBlaze Xilinx Si No 8-bits
Nios, Nios II Altera No Avalon 32-bits
Mico32 Lattice Si Wishbone
LEON 3 ESA Si AMBA 32-bits
OpenRISC OpenCores Si Wishbone 32-bits; Específico para ASIC,
Altera, Xilinx
AEMB Shawn Tan Si Wishbone
OpenFire Virginia Tech
CCM Lab Si OPB, FSL 32-bits
xr16 Jan Gray No XSOC abstract bus 16-bits
ZPU Zylin AS Si Wishbone 16/32 bits
Tabla 1-1: Softcores disponibles en el mercado
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
3i}
1.2.1 Core ABC de Actel
Este micro proporciona interfaz con el bus APB. Presenta una estructura tipo
Harvard en la que la memoria de programa queda sintetizada por medio de celdas
lógicas (“Hard program code storage”) o módulos de memoria interna de la propia
FPGA (“Soft program code storage”).
El micro queda constituido por seis bloques principales:
• Bloque de instrucciones. el cual contiene la memoria de programa así
como el procedimiento de Fetch
• Secuenciador. Se trata del bloque que, a partir de la instrucción controla el
funcionamiento de los diferentes elementos del micro.
• Alu y flags
• Bloque de almacenamiento. Comprende la RAM, los registros, la pila etc.
• Controlador del bus APB. Contenedor de la máquina de estados encargada de llevar a cabo las tareas de lectura y escritura en los esclavos del bus APB
En la Figura 1-1 puede apreciarse un diagrama funcional del micro.
Figura 1-1: Diagrama esquemático del Core ABC de Actel.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
4i}
El micro permite configurar los siguientes parámetros:
• Ancho del bus de direcciones de APB
• Ancho de la memoria de programa
o Permite determinar el número máximo de instruccines que podrá
presentar el código ejecutable, siendo este un número comprendido
entre 2 y 4,096 instrucciones.
• Número de puertos de entrada salida
• Número de flags de entrada/salida
• Tamaño de la pila
El inconveniente de este dispositivo es que presenta un número excesivamente
alto de instrucciones, las cuales como se verá más adelante, en su grán mayoría no
serán utilizadas para las aplicaciones en las que se desea trabajar, por lo cual se
generará un gasto infructuoso de puertas lógicas en la FPGA. Así mismo, tampoco
es de código abierto, por lo que una vez elegidos los parámetros de configuración,
lo que se nos proporciona es el micro en lógica de puertas y no es VHDL, lo que
hace que sea dificil poder exportarlo a otras plataformas de otros fabricantes.
1.2.2 Core 8051 de Actel
Se trata de un procesador monociclo de 8 bits. Soporta hasta 13 interrupciones
(con cuatro niveles de prioridad), está provisto de UART, dos contadores/timers y
cuatro puertos de 8 bits de entrada/salida. Posee interfaz con el bus SFR con
capacidad de direccionamiento de hasta 101 esclavos.
Figura 1-2: Esquema del Core8051 y su interfaz SFR
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
5i}
En general, las principales pegas de este micro es que no dispone de interfaz con
el bus APB. La segunda gran pega es el ancho de palabra con el que trabaja el
micro, pues con un ancho de palabra de solo 8 bits, las posibilidades del mismo se
ven limitadas por debajo de los requerimientos.
1.2.3 PicoBlaze de Xilinx
Se trata de un Softcore de 8 bits desarrollado por Xilinxs, el cual presenta las
siguientes características.
• 16 Registros de propósito general
• Alu con flags de zero y acarreo
• hasta 256 puertos de entrada/salida (sin soporte a bus)
• 64 bits de RAM
• Soporte de interrupciones (respuesta en 5 ciclos de reloj)
El equipo incorpora un juego de instrucciones reducido el cual comprende:
• Instrucciones de control de programa
• Instrucciones Lógicas (AND, OR, XOR)
• Instrucciones aritméticas (Suma y resta)
• Instrucciones de desplazamiento
• Instrucciones de Entrada/Salida
• Instrucciones relacionadas con interrupciónes
En general, aunque este micro presenta buenas características de consumo de area,
con un juego de instrucciones muy similar al necesario en la aplicación de la que
trata el presente proyecto, el problema es que peca por defecto, siendo muy
limitado en determinados aspectos, como la ausencia de bus, poca capacidad de
direccionamiento, limitado ancho de palabra, etc.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
6i}
Figura 1-3: Diagrama de bloques del PicoBlaze
1.2.4 MicroBlaze de Xilinx
Se trata de un micro de 32 bits con tres etapas de pipeline. Incorpora 87
instrucciones, 32 registros de propósito general y soporte para buses PLB, OPB,
FSL y LMB
El pipeline supone ciertos problemas con el código lleno de saltos de los
programas de control de flujo, y aunque el microprocesador incorpora “delay
slots”, el consumo de area que este supone en una aplicación con múltiples saltos
no supone una ventaja.
MicroBlaze utiliza el estándar CoreConnect de IBM, para conectar diferentes
elementos en un circuito integrado. Un aspecto interesante es que CoreConnect
permite reducir la carga capacitiva del bus, repartiéndola entre varios buses. Así,
se consiguen mayores rendimientos, dado que los retardos de pistas globales son
muy importantes en FPGAs. La contrapartida a esto es un mayor consumo del
cableado interno de la FPGA
El MicroBlaze contiene una línea de interrupciones, la cual al ser activada hace
que el procesador ejecute una rutina de manejo de interrupciones correspondiente.
En el caso de que el sistema necesite manejar más de una interrupción, será
necesaria la utilización de un periférico específico, que se encarga de multiplexar
e identificar las diferentes fuentes de interrupción.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
7i}
En general se trata de una máquina muy completa, sin embargo su consumo de
celdas lógicas la hace desaconsejable.
1.2.5 Nios de Altera
Nios es Un softcore de 32 bits desarrollado por Altera para FPGA’s de Altera,
presentando un amplio abanico de capacidades que le hacen apto para
aplicaciones desde control hasta DSP. Nios es comparable con MicroBlaze en
cuanto a segmento de mercado, sin embargo, al contrario que este, tiene licencias
de síntesis a terceras compañias (Synopsis).
1.2.6 LEON de la ESA
Se trata de un procesador de 32 bits desarrollado por la ESA, disponible en modo
tolerante a fallos para aplicaciones aeroespaciales y de defensa, encontrándose
disponible bajo licencia GNU PLD.
La arquitectura del LEON3 está basada en el SPARC V8 implementando un
pipeline de 7 etapas para datos e instucciones por separado, así como, de forma
opcional, una unidad de punto flotante con capacidad para trabajar en simple y
doble precisión.
Incorpora interfaz con el bus AMBA AHB y es capaz de alcanzar una frecuencia
de funcionamiento de hasta 140 MHz.
Figura 1-4: Diagrama de bloques del LEON3
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
8i}
El equipo proporciona inmuidad ante SEU (Single Event Upset), aspecto
fundamental en aplicaciones espaciales debido a los altos niveles de radiación (e
incluso en aplicaciones terrestres con las nuevas tecnologías de (45-65 nm).
En general, este dispositivo está orientado a funciones de tratamiento digital de la
señal y, aunque es una máquina muy configurable, no encaja con los
requerimientos de la aplicación objetivo, ocupando un area excesiva para el
rendimiento que se necesita en nuestra aplicación.
1.2.7 Conclusiones
Tras un análisis de los dispositivos actualmente existente en el mercado
del que se han mostrado los más destacados, se concluye que ninguno se
ajusta exactamente a los requerimientos exigidos por una aplicacióin de
control de flujo. A continuación se enumeran los principales
inconvenientes:
• Arquitecturas demasiado complejas, con pipelines y/o juegos de
instrucciones demasiado extensos. Redundando en un consumo de
área de la FPGA prescindible.
• Algunos micros están demasiado especializados en un modelo o
fabricante de FPGAs, no siendo exportables de forma sencilla a
otros dispositivos.
• Rigidez para modificar el ancho de palabra, el número de
interrupciones o los periféricos que incorpora, dificultando su
adaptabilidad a aplicaciones particulares.
• Uso de buses distintos del AMBA (usado en Crisa) o sin soporte
para buses.
En definitiva, es necesario desarrollar un microprocesador que se ajuste a
los requerimientos, supliendo todas las carencias detectadas en los
actuales softcores.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
9i}
1.3 Motivación del proyecto
La electrónica destinada a aplicaciones aeroespaciales se ve sometida a ambientes
hostiles con niveles de radiación electromagnética mucho mayores de los que
sufriría en aplicaciones terrestres, que además, al considerar la criticidad de las
funciones desempeñadas por estos elementos, puede conllevar pérdidas de
millones de euros.
Para garantizar el buen funcionamiento de los dispositivos, la mayoría de las
misiones espaciales usan chips protegidos contra la radiación denominados "Rad-
hard”. Estos Chips tienen características que los hacen especialmente resistentes a
la radiación cósmica; contienen transistores adicionales que necesitan más energía
para encenderse y apagarse, de modo que la radiación cósmica no puede provocar
su conmutación tan fácilmente, por lo que son capaces de funcionar de forma
correcta cuando otros chips se verían fuertemente afectados por la radiación.
Sin embargo, los chips "Rad-hard” tienen sus contrapartidas, son caros, consumen
más potencia y son lentos —hasta 10 veces más lentos que un microprocesador
equivalente en los modernos computadores personales de consumo. Además, los
microprocesadores pueden no presentar las características que más se ajustan a la
aplicación requerida, quedando sobredimensionados, con el consiguiente
desperdicio de recursos.
Tal y como se ha visto en el punto 1.2 actualmente existen microprocesadores
sintetizables en FPGA’s, los cuales permiten la posibilidad de aprovechar el chip
para llevar a cabo otras funciones lógicas adicionales en paralelo evitando de este
modo consumo de tiempo de proceso. Sin embargo, dichos procesadores
presentan características genéricas, lo cual hace que no se ajusten fielmente a las
características requeridas por la aplicación, suponiendo un mal aprovechamiento
de los recursos (area de la FPGA).
Es pues, el objetivo del presente proyecto, dadas unas especificaciones iniciales,
desarrollar un microprocesador sintetizable en una FPGA resistente a radiación de
modo que se ajuste fielmente a las exigencias de un tipo de código (labores de
control de flujo), evitando cualquier sobredimensionamiento.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
10i
1.4 Objetivos
Tal y como se ha comentado de forma previa, El objetivo del presente proyecto es
desarrollar un microprocesador sintetizable en las FPGA’s Proasic y RTAX de
Actel para aplicaciones espaciales. Se deberá hacer un estudio del código para
identificar los requerimientos de instrucciones, interrupciones si fueran necesarias,
interfaz, uso de timers, etc. Una vez que se encuentren bien definidas los
requerimientos se deberá plantear un modelo de arquitectura que posteriormente
será implementado por medio del lenguaje VHDL.
Finalmente se deberá disponer de un bloque el cual pueda ser incorporado a un
diseño, siendo capaz de interactuar de forma activa con el mismo con la finalidad
de que este pueda ser sintetizado en una FPGA formando parte del equipo
electrónico embarcado en un satélite, lanzador, etc.
1.5 Metodología / Solución desarrollada
En primera instancia se estudiarán las necesidades de la aplicación a la que va
destinado el microprocesador así como las características particulares de las
familias de FPGA’s de Actel a fin de encontrar aspectos aprovechables para el
diseño del microprocesador.
Posteriormente, se procederá a la codificación y depuración del hardware. A tal
efecto, se subdividirá el diseño en bloques simples, los cuales serán comprobados
de forma independiente, para su posterior interconexión y comprobación hasta
alcanzar el nivel correspondiente al microprocesador completo.
1.6 Recursos / herramientas empleadas
Para el desarrollo del proyecto se emplearan las herramientas que figuran en la
siguiente tabla:
Software Función
HDS Designer Diseño
Modelsim Simulación
Tabla 1-2: Software empleado en el proyecto.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
11i
2 ESTUDIO PRELIMINAR
2.1 Análisis previo
2.1.1 Elección del dispositivo
La elección de las FPGA’s sobre las que será implantado el microprocesador es
un aspecto impuesto de antemano. Al tratarse de dispositivos destinados a
aplicaciones espaciales, estos deben de ser capaces de trabajar en entornos con
altos niveles de radiación electromagnéticas. Dentro de este selecto grupo, las
normas de la agencia espacial europea limitan el abanico de dispositivos
disponibles a aquellos de empresas europeas o con “foundrys” en territorio
europeo. Así pues, las FPGA’s a las que el microprocesador irá destinado de
forma principal son las de la familia RTAX 2000/4000 y ProASIC de Actel
(Aunque por su concepción, deberá ser facilmente exportable a otras plataformas).
Debido a que el microprocesador está destinado a implantarse sobre una familia
concreta de FPGA’s, es de recibo aprovechar los recursos que dichos dispositivos
proporcionan a fin de optimizar lo máximo posible el diseño.
A continuación se enumeran los aspectos característicos de interes de las FPGA’s
a emplear:
2.1.2 Características de la familia RTAX 2000/4000
A nivel de chip, el dispositivo está organizado en varias celdas interconectadas.
Cada una de dichas celdas se puede subdividir a su vez en 336 “clusters” y cuatro
módulos de SRAM (176 clusters y tres módulos de SRAM en el caso del
RTAX250S/SL) [vease Figura 2-1]
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
12i
Figura 2-1:Estructura de las FPGA's de la familia RTAX de Actel
Dispositivo Número de celdas
RTAX250S/SL 4 celdas
RTAX1000S/SL 9 celdas
RTAX2000S/SL 16 celdas
RTAX4000S 30 celdas
Tabla 2-1: Número de celdas lógicas en los dispositivos de la familia RTAX de Actel
La arquitectura del RTAX-S/SL proporciona módulos de RAM de alta velocidad.
Además, cada módulo de 4.608 bits contiene su propio controlador de FIFO para
generar el direccionamiento interno y los flags (FULL, EMPTY, AFULL,
AEMPTY). Cada bloque de memoria funciona de forma síncrona, pudiendo
alcanzar una frecuencia de funcionamiento máxima de 500 MHz. Puesto que es
posible que las acciones de lectura y escritura tengan lugar de forma asíncrona, el
bloque de memoria está protegido para prevenir metaestabilidad además de
overflow y underflow.
A continuación se muestra un diagrama de la estructura de puertos de un bloque
de memoria.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
13i
Figura 2-2: Modulo de memoria del RTAX-s/SL (Actel)
Cada bloque de memoria de 4.608 bits puede organizarse de diferentes formas en
función del ancho de palabra 128x36, 256x18, 512x9, 1kx4, 2kx2, or 4kx1
pudiendo conectarse en cascada para generar tamaños mayores. A continuación se
muestra una tabla resumen con dicho aspecto:
Ancho de palabra Posiciones de
memoria
Bus de direcciones Bus de datos
1 4,096 RA/WA[11:0] RD/WD[0]
2 2,048 RA/WA[10:0] RD/WD[1:0]
4 1,024 RA/WA[9:0] RD/WD[3:0]
9 512 RA/WA[8:0] RD/WD[8:0]
18 256 RA/WA[7:0] RD/WD[17:0]
36 128 RA/WA[6:0] RD/WD[35:0]
Tabla 2-2: Organización de la memoria en las FPGA's de la familia RTAX de Actel
Además, al disponer de puertos de lectura y escritura independientes en cada
bloque, es posible simultanear las operaciones de lectura y escritura.
Tal y como se comentó previamente, cada celda de la FPGA se subdivide en
clusters, los cuales están formados por dos tipos posibles de celdas lógicas: Celdas
tipo C [Figura 2-3] y celdas tipo R [Figura 2-4]
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
14i
2.1.2.1 Las celdas lógicas
Existen dos tipos de celdas lógicas en esta familia de FPGA’s con funciones bien
definidas.
El primer tipo son las celdas lógicas tipo C, las cuales están destinadas a actuar
configurando elementos de lógica combinacional. Se trata de una extensión de la
implementación de las celdas lógicas tipo C de la familia A54SX-A, donde el
principal añadido es la incorporación de una cadena de acarreo, util en la
implementación de funciones aritméticas.
Las principales características de las celdas tipo C son:
• Inversor (DB) que puede usarse para elaborar la señal complementaria de
cualquier señal de entrada.
• Entrada y salida de acarreo (propagación en menos de 0.1 ns).
• “Hardwired” con la celda lógica precendente, para facilitar la síntesis de
funciones lógicas complejas.
Figura 2-3: Celda C
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
15i
En lo referente a las celdas tipo R, estas están especializadas en la implementación
de elementos de lógica secuencial. Se trata de una mejora de las celdas tipo R de
la familia A54SX-A, incorporando entradas de reloj adicionales así como presets
y clears globales.
Las principales características de las celdas tipo R se enumeran a continuación:
• Conexión directa con el Módulo lógico tipo C precedente, proporcionando
conexiones con un retardo menor de 0.1 ns.
• Posibilidad de uso como Flip-Flop en solitario, controlada por una celda
tipo C o por módulos de entrada/salida.
• Clear asíncrono independiente.
Figura 2-4: Celda R
Figura 2-5: Detalle de las conexiones directas entre celdas lógicas.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
16i
En la Figura 2-6 y en la Tabla 2-3 se muestra la evolución temporal así como los
tiempos en el peor caso posible para la operación con Flip-Flops sintetizados por
medio de celdas lógicas tipo R.
Figura 2-6: Evolución temporal de ls señales en un Flip-Flop formado por celdas R
Tabla 2-3: Tiempos asociados a la figura previa en el peor caso posible.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
17i
2.1.2.2 Topología de la memoria
Tal y como se comentó, La FPGA incorpora módulos de memoria RAM, a
contiuación se analizarán sus características (Figura 2-7).
Figura 2-7: Evolución de las formas de onda en operaciones de lectura y escritura
En la Tabla 2-4 se indican los tiempos asociados, en el peor caso posible, a las
operaciones de escritura y lectura mostradas en la figura anterior.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
18i
Tabla 2-4: Tiempo asociados a la lectura y escritura en Ram
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
19i
2.1.3 Características de la familia ProASIC
Los dispositivos ProASIC disponen de dos bloques de memoria SRAM de dos
puertos (uno de lectura y otro de escritura), ubicados en la parte superior e inferior
del dispositivo, que pueden actuar bien como fifo, bien como RAM.
Figura 2-8: Organización interna de la PFGA ProASIC
Cada bloque de memoria puede ser utilizado de forma independiente o como parte
de un conjunto de ellos para obtener bloques de memoria mayores. En la siguiente
tabla se ilustran el número de celdas de memoria (256x9) en función del
dispositivo.
Banco de memorias Máximo ancho Máxima profundidad
Dispositivo inferior superior D W D W
APA075 0 12 256 108 1536 9
APA 150 0 16 256 144 2048 9
APA300 16 16 256 144 2048 9
APA450 24 24 256 216 3072 9
APA600 28 28 256 252 3584 9
APA750 32 32 256 288 4096 9
APA1000 44 44 256 396 5632 9
Tabla 2-5: Configuración de la memoria en una pastilla ProASIC en función del dispositivo
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
20i
En lo referente a las celdas lógicas, estas presentan interruptores con memoria
flash para proporcionar reprogramabilidad y no volatilidad del circuito.
Cada celda lógica presenta tres entradas (las cuales pueden o no ser invertidas) y
una única salida. Pudiendo actuar como una función lógica de hasta tres entradas
en si misma. Así mismo, también es posible su configuración como flip-flop,
empleando una celda lógica completa para cada uno.
Figura 2-9: Celda lógica ProASIC
En la Tabla 2-6 se muestran los retardos generados por diferentes circuitos lógicos
sintetizados con celdas lógicas en una FPGA de la familia ProASIC. Los retardos
se muestran para el peor caso posible
Tabla 2-6: Retardos de diferentes circuitos lógicos.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
21i
2.1.4 Topología de la memoria
La memoria Ram integrada en el dispositivo puede ser usada de forma síncrona o
asíncrona. En la
Tabla 2-7: Señales que intervienen en la operación de la moria SRAM
2.1.4.1 Lectura síncrona
En la Figura 2-10 se muestra la evolución de las señales durante una operación de
lectura síncrona de un banco de memoria SRAM mientras que en la Tabla 2-8 se
muestran los retardos correspondientes.
Figura 2-10: Operación de lectura síncrona de la memoria SRAM
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
22i
Tabla 2-8:Retardos asociados a la lectura síncrona de la SRAM
2.1.4.2 Lectura asíncrona
Por otro lado, tambien es posible llevar a cabo la lectura de forma asíncrona del
banco de memoria SRAM, en la Figura 2-11 se muestra la evolución de las
señales, mientras que en la Tabla 2-9 se muestran los retardos asociados.
Figura 2-11: Lectura asíncrona de la memoria SRAM
Tabla 2-9: Retardos asociados a la lectura asíncrona de la SRAM
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
23i
2.1.4.3 Escritura síncrona
En el caso de la escritura síncrona, esta solo toma un ciclo de reloj en llevarse a
cabo, en la siguiente figura se muestra la evolucón de las señanles así como los
retardos asociads en la Tabla 2-10
Figura 2-12Escritura síncrona sobre la memoria SRAM
Tabla 2-10: Retardos asociados a la escritura síncrona de la SRAM
2.1.4.4 Escritura asíncrona
Finalmente se muestra el caso de la escritura sobre la SRAM en modo asíncrono
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
24i
Figura 2-13: Escritura asíncrona sobre la memoria SRAM
Tabla 2-11: Retardos asociados a la escritura asíncrona de la SRAM
2.1.5 Conclusión
Tras este análisis se determina la notable diferencia de velocidad entre la gestión
de datos por medio del acceso a la memoria RAM del propio dispositivo y el uso
de registros dedicados. Así pues será recomendable, en la medida de lo posible,
realizar todos los procesos posibles por medio del uso de registros, destinándose
un rol de respaldo a la RAM (funcionamiento tipo “carga-almacenamiento”).
Así mismo, se disponen de datos significativos sobre las velocidades máximas de
trabajo, siendo posible la estimación del mínimo ciclo de reloj del
microprocesador.
Para más información sobre las FPGAs, remitase a la web del fabricante:
http://www.actel.com/
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
25i
2.2 Estudio del código “tipo”
Dado que se trata de un softcore “a medida” es necesario el estudio del tipo de
código al que va a ir enfocado, así pues, a continuación se muestra un ejemplo, en
forma de pseudocódigo, de una etapa del mismo.
OPERATIONS DELAY (ms) NEXT STATE [ST ID] if CS = OFF set DANS.EN = T 240 end if set CS = STANDBY if FLAG:FDIR = T set FLAG:FDIR = F
set S.BSOC.TRIP = F
set S.ACCOC.TRIP = F
set S.ND.TRIP = F set S.CD.TRIP = F end if set FDIR.EN = T set NTFC.LOOP.EN = P.NTFC.LOOP.EN set MTFC.LOOP.EN = F set CTFC.LOOP.EN = F set AN.I = 0 set MH.I = 0 set CTFC.DR = 0 set NTFC.DR = P.NTFC:DR set MTFC.DR = 0 set AN.I = P.AN.I.PROFILE (0)
set BS.MODE = P.BS.MODE set AN.EN = F for n = 0 to 4 if BS.MODE[n] = T BS.COUNT = BS.COUNT + 1 end if end loop set NFV.EN = F set CTFC.EN = F set MTFC.EN = F set NTFC.EN = P.NTFC:EN if P.NS = CONFIGURE null CONFIGURE [200] else if P.NS = MANUAL null MANUAL [300] else if P.NS = STARTUP or P.NS = DISCHARGE or P.NS = THRUST ACC.MODE = ACC AN.MODE = AN 60 STARTUP [400] else if P.NS = SHORTCLEAR null SHORTCLEAR [700] else null [120] end if
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
26i
En el fragmento de código previamente mostrado se pueden destacar los
siguientes aspectos:
• Uso intensivo de flags tanto en verificación de su estado, como en
asignación
• Existencia de operaciones artméticas limitadas practicamente a la gestion
de bucles y contadores.
• Aparición de retardos de duraciones variables a lo largo del código.
• El código se divide en etapas.
o Cada etapa es un bucle infinito en si misma
o Bajo ciertas condiciones, se realiza el cambio de etapa, es decir,
salto a otro de los bucles infinitos.
• Existe un uso intensivo de interrupciones (con un número elevado de
rutinas de interrupción).
Adicionalmente son requisitos:
• Toda la comunicación debe realizarse por medio del bus APB
• El ancho de los parámeros es variable, pudiendo ser:
o Flags
o palabras ente 8 y 16-bits en complemento a 2
En base a esto, se toman las siguientes decisiones de cara a la especificación de la
arquitectura.
• El interfaz APB estará mapeado en memoria así como los parámetros de
timers, interrupciones, etc. para flexibilizar el sistema de cara a posibles
ampliaciones.
• El ancho de palabra del micro será de 16 bits
• Se incorporará un alu capaz de hacer sumas y restas en complemento a 2
así como de llevar a cabo comparaciones, operaciones lógicas bit a bit y de
verificar el estado de un bit en concreto dentro de la palabra.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
27i
2.3 El protocolo APB
El protocolo APB (Advanced Peripheral Bus) es parte de la familia de protocolos
de AMBA 3. Se trata de un interfaz de bajo coste, optimizado para un consumo
mínimo de energía así como el area de puertas empleada.
El APB es un protocolo no pipelinezado, todas las transiciones en las señales
tienen lugar ante un flanco ascendente de reloj, para facilitar su integración en
cualquier diseño. Toda transferencia toma al menos dos ciclos (pudiendo ser más
en caso añadir estados de espera)
2.3.1 Señales del bus APB
Las señales relacionadas con el bus APB suelen referirse con la letra P como
prefijo. Son las siguientes:
• PADDR. Bus de direcciones APB
• PSEL. Señal de selección del esclavo x APB.
• PENABLE. Señal de habilitación. Se usa para sincronizar la transferencia.
• PWRITE. A nivel alto indica acceso de escritura, a nivel bajo acceso de
lectura.
• PRDATA. Bus de datos en transferencias de lectura.
• PWDATA. Bus de datos en transferencias de escritura.
• PREADY. Indica cuando se ha completado la operación de lectura o
escritura.
• PSLVERR. En estado activo, indica que algún error ha sucedido durante la
transferencia.
El protocolo, en la versión de AMBA 3 incorpora cobertura de errorres y espera.
Así pues, una instrucción de lectura o escritura en un escavo APB se da de la
siguiente forma:
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
28i
2.3.2 Operación de escritura con espera y sin error
Figura 2-14: Operación de escritura en un esclavo APB.
La transferencia se inicia con la activación tras un flanco de subida de reloj, de la
señales PSEL y PWRITE. Así mismo, en PADDR, se transmite la dirección del
esclavo objetivo y en PWDATA el dato a ser escrito. La segunda fase se alcanza
cuando se activa la señal PENABLE, Permaneciéndose en este estado hasta la
activación de PREADY, momento en el que finaliza la operación, tal y como se
detalla en la Figura 2-14.
De esta forma es posible trabajar con esclavos que requieran de varios ciclos de
reloj para responder.
2.3.3 Operación de lectura con espera y sin error
En el caso de la operación de lectura, todo el protocolo es idéntico con la salvedad
de que la señal PWRITE se fija a ‘0’ y el valor de PWDATA carece de relevancia.
Así mismo, el valor de PRDATA es fijado por el esclavo, como se aprecia en la
Figura 2-15.
Figura 2-15: Operación de lectura de un esclavo APB.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
29i
2.3.4 Operación de escritura con error
En el caso de la operación de escritura erronea, toda la operación es idéntica de la
de escritura exitosa, con la salvedad de que en este caso, al mismo tiempo que el
esclabo fija la señal PREADY a ‘1’, tambien fija a ‘1’ la señan PSLVERR, como
indicación de que algo ha fallado durante la operación, tal y como se aprecia en la
Figura 2-16.
Figura 2-16: Operación de escritura erronea en un esclavo APB
2.3.5 Operación de lectura con error
Finalmente, en el caso de las operaciones de lectura con error, las señales
son la conjunción de la operación de lectura previamente explicada ( 2.3.3)
con la operación con indicación de error del punto anterior, tal y como se
puede observar en la Figura 2-17.
Figura 2-17: Operación de lectura erronea en un esclavo APB
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
30i
2.3.6 Diagrama de fases del protocolo APB
Es posible representar las fases del protocolo ABP de una forma esquemática por
medio del diagrama mostrado en la Figura 2-18
Figura 2-18: Diagrama de fases del protocolo APB
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
31i
3 ARQUITECTURA DEL MICROPROCESADOR
3.1 Especificación de la arquitectura
El core responde a las características de un microprocesador tipo RISC con una
arquitectura Harvard, es decir, con memorias independientes para el código de
programa y los datos.
El circuito trabaja con un ancho de palabra de 16 bits, siendo este tambien el
ancho de palabra del contador de programa.
Se establecen un total de 16 registros, dentro de los cuales, el registro nº0 se
encuentra de forma permanente con el valor 0 almacenado en el. Cualquier
escritura sobre dicho registro es ignorada.
El microprocesador trabaja con instrucciones rápidas, las cuales en su mayoria
toman tan solo un ciclo de reloj para su ejecución. Es pues que se podría
considerar un microprocesador monociclo pero con modificaciones. Dichas
excepciones se dan en las operaciones de acceso a memoria, las cuales
dependiendo de si trabajan sobre memoria RAM, bus APB u otro elemento
pueden tomar dos o más ciclos de reloj.
El equipo presenta una mecánica de funcionamiento tipo “carga-
almacenamiento”; todas las operaciones aritméticas, lógicas, comparaciones, etc
tienen lugar entre registros o entre registros e inmediatos. Por tanto, para operar
con parámetros almacenados en memoria, primero será necesario hacer una copia
desde la RAM al banco de registros, para posteriormente llevar a cabo la
operación deseada.
Tambien se dispone de soporte para interrupciones. Es posible gestionar hasta 16
interrupciones, con prioridad fija (siendo la interrupción 0 la menos prioritaria y la
15 la más prioritaria) y sin que exista anidamiento de estas. Tampoco se
contempla el almacenamiento del contexto, delegándose esta tarea al
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
32i
programador. De este modo se logra almacenar solamente los registros que sean
utilizados por la rutina de interrupción, agilizando el funcionamiento del equipo.
Los punteros asociados a las rutinas de interrupción así como las flags que las
habilitan se encuentran mapeados en memoria, por lo que tanto la lectura como la
escritura de sus parámetros se llevan a cabo del mismo modo que si se efectuara
sobre la memoria propiamente dicha.
Se dispone de un timer interno, (vease el apartado 4.3.5) cuyo estado únicamente
es accesible como llave para la instrucción de salto condicional asociado a una
señal interna (jmpsig.). Este elemento tambien se encuentra mapeado en memoria,
por lo que cualquier manipulación del mismo se lleva a cabo por medio de las
instrucciones de manejo de datos movmr y movrm (vease el apartado 3.2)
Se dispone de interfaz con el bus AMBA 3 APB, con soporte de errores y espera.
En caso de error, este es verificable por la instrucción de salto condicional jmsig
según se explicó en el punto 2.3.
En el caso de que durante una operación sobre el bus APB se detecte algún error,
se activará un indicador de fallo en el bus APB (el cual permanecerá en dicho
estado hasta la siguiente operación de lectura o escritura en el bus APB) la cual es
accesible por la instrucción de salto condicional jmpsig. De este modo, es posible
detectar y repetir operaciones fallidas si fuera necesario.
Tambien se implementa un watchdog. Dicho dispositivo se inicializa
deshabilitado, siendo necesaria su activación por parte del programador si es
necesario. Una vez encendido actua como un timer, con la salvedad de que si el
contador llega a cero, el puerto de salida del micro “watchdog_state” pasa a
estado activo. El objetivo de esto es permitir reiniciar, no solo el procesador, si no
tambien elementos externos ligados al micro.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
33i
3.2 El juego de instrucciones
El micro dispone de un juego reducido de instrucciones las cuales se ilustran
agrupadas en familias a continuación para, posteriormente ser explicadas de forma
detallada.
Código de
operación Argumentos
6 bits 4 bits 4 bits 12 bits
Movrm Nº Reg Mem addr
Movmr Nº Reg Mem addr
Movir Nº Reg inmediato
Movrr Nº Reg Nº Reg
Tabla 3-1: Juego de instrucciones de movimiento de datos
Código de
operación Argumentos
6 bits 4 bits 4 bits 12 bits
Cmpgt_rr Nº Reg Nº Reg
Cmpge_rr Nº Reg Nº Reg
Cmpeq_rr Nº Reg Nº Reg
Cmple_rr Nº Reg Nº Reg
Cmplt_rr Nº Reg Nº Reg
Cmpbit_rr Nº Reg Nº Reg
Tabla 3-2: Juego de instrucciones de comparación entre registros.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
34i
Código de
operación Argumentos
6 bits 4 bits 16 bits
Cmpgt_ri Nº Reg Inmediato
Cmpge_ri Nº Reg Inmediato
Cmpeq_ri Nº Reg Inmediato
Cmple_ri Nº Reg Inmediato
Cmplt_ri Nº Reg Inmediato
Cmpbit_ri Nº Reg Inmediato
Tabla 3-3: Juego de instrucciones de comparación entre registro e inmediato.
Código de
operación Argumentos
6 bits 4 bits 4 bits 4 bits 8 bits
Addrr Nº Reg Nº Reg Nº Reg
Subrr Nº Reg Nº Reg Nº Reg
Tabla 3-4: : Juego de instrucciones de operaciones aritméticas entre registros
Código de
operación Argumentos
6 bits 4 bits 16 bits
Addri Nº Reg inmediato
Subri Nº Reg inmediato
Tabla 3-5: Juego de instrucciones de operaciones aritméticas entre registro e inmediato
Código de
operación Argumentos
6 bits 4 bits 4 bits 4 bits 8 bits
And_rr Nº Reg Nº Reg Nº Reg
Or_rr Nº Reg Nº Reg Nº Reg
Xor_rr Nº Reg Nº Reg Nº Reg
Tabla 3-6: Juego de instrucciones de operaciones lógicas entre registros
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
35i
Código de
operación Argumentos
6 bits 4 bits 16 bits
And_ri Nº Reg Inmediato
Or_ri Nº Reg Inmediato
Xor_ri Nº Reg inmediato
Tabla 3-7: Juego de instrucciones de operaciones lógicas entre registro e inmediato
Código de
operación Argumentos
6 bits 4 bits 16 bits
Jmpt PC
Jmpf PC
Jmpuc PC
Jmpsig PC
End
Tabla 3-8: Juego de instrucciones de salto.
3.2.1 Las instrucciones de movimiento de datos
Este tipo de instrucciones son las encargadas de copiar las palabras entre memoria
y registros o entre registros. Se trata del único grupo de instrucciones que tienen
acceso a la lectura y a la escritura de memoria.
Las instrucciones de movimiento de datos se subdividen en:
3.2.1.1 Instrucciones movrm y movmr
Estas instrucciones presentan el siguiente formato:
Mov** Nº Reg Mem addr
Donde “Mem addr” tiene 16 bits de ancho e indica la posición de memoria
origen/destino, mientras que “Nº Reg” toma 4 bits y señala el registro del que se
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
36i
tomarán daros (movrm) o del cual se extraerán datos para su escritura en memoria
(movrm).
En lo referente a la duración de la instrucción, ésta depende de la zona de
memoria a la que se acceda (vease 4.3.1 Mapeo de memoria):
• Si el acceso se realiza sobre las areas de datos de los timer o de los
punteros asociados a las interrupciones, la operación es inmediata,
durando la instrucción solo un ciclo de reloj.
• En el caso de que la escritura se lleve a cabo sobre la memoria RAM, la
operación de lectura tomará dos ciclos de reloj, mientras que la operación
de escritura se completará en solo uno.
• Si por el contrario, la operación se lleva a cabo sobre el bus APB, el
número de ciclos de reloj necesarios pueden variar considerablemente en
función de los estados de espera (vease el punto 2.3 El protocolo APB).
La instrución lanza la orden de lectura o escritura sobre la memoria
proporcionando la dirección de lectura (extraida de la instrucción) y conmutando
los multiplexores de acceso al banco de registros de la forma adecuada. Es deber
del programador conocer el segmento de memoria sobre el que se debe escribir
para actuar sobre el elemento deseado (RAM, bus APB, timer....).
3.2.1.2 Instrucción movir
Esta instrucción presenta el formato:
Nº Reg Inmediato
Donde “Inmediato” es una palabra de 16 bits de ancho, mientras que “Nº Reg”
toma 4 bits y señala el registro en el cual escribirá el inmediato.
En este caso, se vuelca el contenido del campo “Inmediato” sobre el registro,
perdiéndose cualquier información alacenada en éste de forma previa. Es
necesario tener presente que cualquier escritura sobre el registro cero será
ignorada.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
37i
Toda la instrucción necesita un tiempo muy corto para completar su escritura;
pues solo hay que conmutar el multiplexor que selecciona el valor de entrada del
banco de registros y almacenarlo en el mismo, por lo que con un solo ciclo de
reloj, la operación se completa.
3.2.1.3 Instrucción movrr
Esta instrucción se limita a copiar el contenido de un registro a otro, siendo de la
forma:
Nº Reg#1 Nº Reg#2
En este caso, el contenido del registro #1 se copia sobre el registro #2
necesitándose para completarse la instrucción tan solo un ciclo de reloj. De nuevo
es importante tener presentes las consideraciones comentadas en el epígrafe
anterior.
3.2.2 Las instrucciones de comparación
Estas instrucciones comparan bien un registro con un inmediato, bien con un
registro.
Siendo la instrucción de la forma:
Nº Reg Inmediato
Nº Reg Nº Reg
En lo referente a la duración de la instrucción, la instrucción “movmr” toma un
único ciclo de reloj.
El resultado de la comparación no está accesible para su manipulación con los
registros o memoria, si no que se presenta en un flag específico en la forma de
true/false, el cual es empleado por las instrucciones de salto (vease el punto 3.2.5).
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
38i
Es posible dividir esta familia de instrucciones en dos grandes grupos:
3.2.2.1 Las instrucciónes cmp puramente comparativas
En función de la instrucción, se activará la señal de comparación cuando el
registro sea estrictamente mayor (gt) ,mayor o igual(ge), igual(eq), menor o
igual(le) o estrictamente menor (lt)
3.2.2.2 La instrucción cmpbit
En este caso, no se trata de una instrucción de comparación estrictamente
hablando, aunque su función es similar. Esta instrucción verifica el estado
concreto de un bit dentro el registro, siendo de gran utilidad para verificar el
estado de un flag dentro de una palabra.
El número del bit a verificar viene determinado por los cuatro bits menos
significativos del inmediato o del registro complementario (en función del
formato de la instrucción).
El estado del bit en cuestión se fija como resultado de la instrucción de
comparación, siendo accesible tan solo por una instrucción de salto condicional.
3.2.3 Las instrucciones aritméticas
Este conjunto de instrucciones realizan operaciones aritméticas (suma o resta)
sobre los operandos suministrados. Pudiendo presentar estas dos configuraciones:
Nº Reg Inmediato
Nº Reg#1 Nº Reg#2 Nº Reg#3
En el caso de la instrucción con registro e inmediato, el resultado de la operación
se escribe sobre el propio registro, perdiéndose el valor anterior. Esta instrucción
presenta su principal aplicación en bucles for, en los que el contador se
incrementa periódicamente con un valor fijo.
En el otro formato de instrucción, el contenido del registro#2 se suma o resta al
contenido del registro#1, almacenándose el resultado sobre el registro marcado
como #3.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
39i
En lo respectivo al tiempo de ejecución, estas instrucciones son lo suficientemente
simples como para poder llevarse a cabo en un único ciclo de reloj.
3.2.4 Las instrucciones lógicas
Estas instrucciones efectuan una operación lógica AND, OR, ó XOR bit a bit
sobre los operandos. Así pues pueden presentar los siguientes formatos:
Nº Reg Inmediato
Nº Reg#1 Nº Reg#2 Nº Reg#3
Del mismo modo que sucedia con las instrucciones aritméticas, en el caso de la
instrucción con registro e inmediato, el resultado de la operación se escribe sobre
el propio registro
En el otro formato de instrucción, el contenido del registro#2 se suma o resta al
contenido del registro#1, almacenándose el resultado sobre el registro marcado
como #3.
En lo referente al tiempo necesario para completar la operación, estas
instrucciones son lo suficientemente simples como para poder llevarse a cabo en
un único ciclo de reloj.
3.2.5 Las instrucciones de salto
En este caso, a tenor del resultado de una instrucción de comparación previa
(vease apartado 3.2.2), del estado del timer ó del resultado de una manipulación
previa del bus APB, se efectua, en caso de que la condición se cumpla, un salto a
la dirección de memoria de programa indicada por el puntero incluido en la
instrucción. En caso contrario, el contador de programa se incrementa
normalmente.
Esta familia de instrucciones presenta el siguiente formato:
Puntero
Dentro de la familia existen diversas instrucciones:
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
40i
3.2.5.1 La instrucción Jmpt
En esta clase de instrucción, el salto se produce si la última instrucción de
comparación efectuada dio un resultado de verdadero
3.2.5.2 La instrucción Jmpf
Se trata de la antítesis de la instrucción previa, en este caso el salto se produce si
la última instrucción de comparación efectuada dio un resultado de falso
3.2.5.3 La instrucción Jmpuc
En este caso, el salto se da siempre, con independencia de cualquier comparación
previa.
3.2.5.4 La instrucción Jmpsig
En este caso el salto viene asociado a una señal interna del microprocesador.
Existen dos casos contemplados:
• Timer interno: En este caso, el salto queda supeditado a la finalización o
no de la cuenta por parte del timer interno
• Transferencia erronea del bus APB: En este caso, el salto tiene lugar en
función del estado del testigo “APB_fault”, es decir, de la correcta
finalización o no de la última operación sobre el bus APB.
Cual de estas dos alternativas es empleada es determinado por medio del bit nº19
(a 0 para el estado del timer y a 1 para la señal de error del bus APB), mientras
que el estado en el que produce el salto queda fijado por el estado del bit nº18.
3.2.5.5 La instrucción End
Aunque no se trata estrictamente de una operación de salto del mismo modo que
las anteriores, se engloba dentro del mismo grupo.
Esta instrucción se ejecuta para finalizar una rutina de interrupción y provoca la
devolución del control a la rutina principal.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
41i
3.2.5.6 La instrucción nula
Aunque no es estrictamente una instrucción, se tratará igualmente. Esta
instrucción (la cual se corresponde con todos los bits de la palabra de instrucción a
cero) no desencadena ninguna acción en el procesador más allá del normal
incremento en el contador de programa.
Se trata de una instrucción no funcional pero imprescindible para cubrir todo el
espacio de direccionamiento de memoria no ocupado por ninguna instrucción.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
42i
4 IMPLANTACIÓN
4.1 Visión general
En la Figura 4-1 se puede apreciar una visión general de la organización del
micro. Se dispone de dos bancos de registros con escritura simultanea que operan
sobre la ALU (en el caso del operando B, este puede ser tambien un inmediato).
La memoria RAM se encuentra externalizada, mientras que el bus APB posee un
bloque dedicado a su gestión.
rega_addr : (3:0)regb_addr : (3:0)
reg_din_mux : (1:0)reg_waddr : (3:0)
reg_wenable
opcode : (5:0)
cmp_resultinmediate : (15:0)
mux_opb
watchdog_state
g_word_width = 16 ( integer )
alu_opcode
pfc_memory
g_word_width = 16 ( integer ) g_n_regs = 16 ( integer )
reset_n
w_addrw_enable
g_apbbusaddr_width = 14 ( integer ) g_word_width = 16 ( integer )
pfc_memory
g_word_width = 16 ( integer ) g_n_regs = 16 ( integer )
reset_n
r_addrw_addrw_enable
memory_dout : (15:0)
reg_wenable
ram_dout : (15:0)
ram_din : (15:0)
ram_addr : (13:0)
ram_enable
apb_rdata : (15:0)
apb_addr : (13:0)
apb_wdata : (15:0)
inmediate : (15:0)
ram_ready
regsU_2
din
clk
p_mux10
regsU_3
din
reg_din_mux
clk
memory_dout : (15:0)inmediate : (15:0)
reg_wenable
reg_din
reg_din
reg_din
alu_result
reg_waddr
reg_waddr
reg_waddrreg_wenable
rst_n
opa
doutr_addr
pfc_alualu2U_4
opa
opb
p_mux_opb713
dout
opa
opb
rega_addr
regb_addr
opcode : (5:0)
regb
pfc_apbapb_mstr
paddr
pwdataprdata
penable
preadypslverrpwrite
1
ram_dout
ram_din
ram_enableram_rw
ram_addr
p_ram_ready
clkclk
ram_rw
opa
rst_n
preadypslverr
rst_n
clk
U_1
clk
psel
rst_n
interrupt_vector
prdatapaddr
pwdata
pselpenable
pwrite
clkrst_n
addr
rdatawdata
start_wr
ready
start_rd
apb_fault
G
G
apb_start_wrapb_start_rd
apb_ready
apb_fault
mux_opb
pfc_corecore_control2U_5
ram_dout : (15:0)
ram_din : (15:0)
ram_enableram_rw
ram_addr : (13:0)
memory_dout : (15:0)memory_din : (15:0)
ram_ready
rst_nrst_n
apb_addr : (13:0)
apb_wdata : (15:0)apb_rdata : (15:0)
apb_start_wrapb_start_rd
rst_nclk
interrupt_vector : (15:0)
apb_ready
apb_fault
rst_nclk
watchdog_state
resultcmp_result
regb_addrrega_addr
reg_din_mux
opcode : (5:0)
inmediate : (15:0)cmp_result
reg_waddrreg_wenable
alu_result
mux_opb
cmp_result
Figura 4-1: Organización general del micro
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
43i
4.2 LA ALU
La alu procesa, en función del estado actual de los operandos, todas las funciones
en paralelo, poniendo en la salida tan solo el resultado correspondiente con el
actual “opcode”, tal y como se aprecia en el siguiente diagrama funcional (se
dispone de un esquema más detallado en el tomo de planos):
p_mux1
opa
opb
2alu_opcode
rst_n
pfc_commonadd_c2U_0
g_nbit_a = 16 ( integer ) -- nbit b >= nbit a g_nbit_b = 16 ( integer ) -- nbit b >= nbit a
ab
s
rst_n
pfc_commonsub_c2U_1
ab
s
opa
opa
opa
opb
opb
rst_n
add_result
sub_result
result
cmp_result
g_wide = 16 ( integer )
pfc_common
g_wide = 16 ( integer )
pfc_common
flagstate
pfc_common
g_nbit = 16 ( integer ) --n_bit_a=n_bit_b
operation
rst_n
comp2v_c2U_2
aa_maxa_min
rst_n
opaopbopb
rst_n
rst_n
overunder
comp_overcomp_under
flag_stateU_4
opaopb
logicU_3
ab
rst_n
opaopb
rst_n
opaopb
slogic_resultlogic_operation
flag_state_result
g_word_width = 16 ( integer )
rst_nrst_n
rst_n
Figura 4-2: Esquema funcional del ALU
El motivo de esto es la reducción de la lógica empleada en el manejo de las
instrucciones y por tanto, del area ocupada por la unidad. El incremento en el
número de conmutaciones de puertas al funcionar simultáneamente los cinco
bloques se consideran un mal necesario.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
44i
A continuación se pormenorizan los diferentes bloques integrados en el ALU.
4.2.1 El bloque sumador
Este bloque realiza, de forma asíncrona, la suma de los operandos A y B. El ancho
de los operandos viene determinado por “genéricos”, por lo que se trata de un
bloque muy flexible en su implantación, pudiendo adaptarse con solo modificar el
valor del genérico correspondiente a cualquier ancho de palabra.
Una ventaja evidente de dicha flexibilidad viene dada en las simulaciones, en las
que fijando un ancho de palabra menor, es posible realizar una simulación de
todos los casos posibles con un menor número de operaciones.
4.2.2 El bloque restador
Este bloque es el complementario del bloque sumador, presentando grandes
similitudes con el mismo. Obviamente, en este caso, la operación aritmética
efectuada es la resta, pero por lo demas, es idéntico, incluido el ancho variable de
palabra, gestionado por valores genéricos.
4.2.3 El bloque comparador
Este bloque, compara internamente el valor de la entrada (OPA) con otros
dos parámetros denominados como límite superior y límite inferior
(Ambos conectados con el operando OPB).
En el caso de que el parámetro de entrada sea mayor que el valor máximo,
se activa la señal “over”, mientras que si se encuentra por debajo del valor
mínimo, se activa la señal “Under”. Así, por medio de operaciones
combinacionales es posible obtener todo el espectro de comparaciones:
over AND (NOT under) Estrictamente mayor
NOT under Mayor o igual
(Not over) AND (NOT under) Igual
NOT over Menor o igual
under AND (NOT over) Estrictamente menor
Tabla 4-1: Obtención de los resultados de la comparación
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
45i
4.2.4 El bloque lógico
Este bloque proporciona el resultado de realizar la operación lógica indicada bit a
bit entre los operandos OPA y OPB.
La operación a realizar es suministrada por el proceso p_mux en función del
opcode.
4.2.5 El bloque “flag state”
Este bloque está fuertemente orientado a la verificación de flags. Toma el
operando OPA (Considerado como array de flags) y los cuatro bits menos
significativos de OPB, dando como resultado el estado del bit de OPA indicado
por los cuatro bits menos significativos de OPB
OPA
OPB (3 downto 0)
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
46i
4.3 Circuito de control
En el bloque de control se integran tanto los procesos de Fetch y la decodicifación
de las instrucciones como la gestión de las interrupciones, el watchdog, así como
la gestión del timer interno y el multiplexado del acceso a memoria.
En la siguiente figura se muestra un diagrama funcional de la organización del
bloque de control (se dispone de un esquema más detallado en el tomo de planos):
memory_din
memory_dout
ram_enable
apb_wdata
apb_start_wrapb_start_rd
apb_ready
ram_ready
reg_wenable
g_instruction_width = 26 ( integer ) g_nbit_pc = 16 ( integer )
preescale
top_valuepreescale
start_timer
timer_dout
watchdog_datawatchdog_addr
p_mem_mux1
p_timer_parameters5
timer_din
pfc_timerstimerU_0
donetop_value
ram_dout
ram_rw
ram_addr
ram_din
apb_addr
timer_writetimer_read
timer_addr
timer_data_ready
p_fetch2
g_timer_width = 16 ( integer ) g_preescale_width = 16 ( integer )
clkrst_n
start
watchdog_state
pfc_timerswatchdogU_3
watchdog_datawatchdog_addr
clk
rst_n
watchdog_state
clkrst_n
rst_nclk
p_decod3
timer_state
mem_addrmem_wri te
mem_read
rega_addr
regb_addr
reg_din_mux
reg_waddr
mux_opb
next_op
pc_jumpjump
p_interrupt_handle
apb_fault
apb_rdata
interrupt_vector
4interrupt_dininterrupt_dout
interrupt_addr
interrupt_readinterrupt_wri te
mem_ready
interrupt_data_readypfc_coreprog_memU_1
pc
instructuction
pc
instructuction
interruption_pcinterruption_start
c lkrst_n
opcode
cmp_result
inmediate
interruption_end
interruption_end
Figura 4-3: Diagrama funcional del control.
A continuación se detallan cada uno de los diferentes procesos que tienen lugar en
el control del micro.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
47i
4.3.1 Mapeo de memoria
Tanto la escritura en el bus APB como el manejo de los punteros asociados a las
interrupciones, los parámetros del timer y la propia memoria se llevan a cabo de
forma transparente para el usuario por medio de la escritura en diferentes sectores
de la memoria.
A tal efecto, la escritura de la memoria queda segmentada de la siguiente forma:
Dirección Contenido
0x FFFF
0x F000 Ram
0x BFFF
0x B000 Maestro de APB
0x 7FFF
0x 7000 Interrupciones
0x 3FFF
0x3000 Timer y watchdog
Tabla 4-2: Mapeado de la memoria
La razón de este mapeo de memoria es, por un lado la posibilidad de manejar
diversos dispositivos del micro de una forma sencilla, sin tener que incrementar el
número de instrucciones del mismo, así como la posibilidad de ampliar el número
de elementos gestionados desde el micro de una forma sencilla y casi inmediata
modificando tan solo el multiplexado del acceso a memoria sin necesidad de
efectuar modificaciones adicionales el la estructura del propio micro.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
48i
4.3.2 Gestión de los punteros de interrupción
Tal y como Se aprecia en la Tabla 4-2 los punteros asociados a las diferentes
interrupciones se encuentran almacenados en memoria, siendo posible tanto su
lectura como su estructura por medio de las instrucciones de acceso a memoria.
Dirección Contenido
0x 7FFF
░
0x 7011
Sin uso
0x 7010 Flags de enable de las interrupciones.
0x 700F Puntero asociado a la interrupción nº15
0x 700E Puntero asociado a la interrupción nº14
0x 700D Puntero asociado a la interrupción nº13
0x 700C Puntero asociado a la interrupción nº12
0x 700B Puntero asociado a la interrupción nº11
0x 700A Puntero asociado a la interrupción nº10
0x 7009 Puntero asociado a la interrupción nº9
0x 7008 Puntero asociado a la interrupción nº8
0x 7007 Puntero asociado a la interrupción nº7
0x 7006 Puntero asociado a la interrupción nº6
0x 7005 Puntero asociado a la interrupción nº5
0x 7004 Puntero asociado a la interrupción nº4
0x 7003 Puntero asociado a la interrupción nº3
0x 7002 Puntero asociado a la interrupción nº2
0x 7001 Puntero asociado a la interrupción nº1
0x7000 Puntero asociado a la interrupción nº 0
Tabla 4-3: Zona de memoria reservada para los punteros a interrupciones.
El número de la interrupción queda determinado por los cuatro bits menos
significativos de la dirección. Así pues, por ejemplo, para acceder al puntero
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
49i
asociado a la interrupción nº3 del micro se deberá ejecutar una instrucción de
lectura o escritura sobre la dirección 0x7003 de memoria.
En lo referente a la habilitación de las interrupciones, tras la ejecución del reset,
todas las interrupciones comienzan deshabilitadas como una medida de seguridad,
siendo necesario fijar su estado de habilitadas o deshabilitadas escribiendo sobre
la posición 0x7010 de memoria. Así pues, escribiendo doble dicha posición la
palabra “1000000000000101” quedarán activadas las interrupciones número 0, 2
y 15.
Este tipo de habilitación permite el activado o desactivado de varias
interrupciones de una forma rápida al hacerse de manera simultanea. Así mismo
permite trabajar con una parte de las interrupciones, pues es posible que no
siempre se necesiten las 16 interrupciones en una aplicación o momento dado.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
50i
4.3.3 Gestión de las interrupciones
La gestión de las interrupciones parte de los puntos siguientes:
• No anidamiento de interrupciones.
• No almacenamiento del contexto.
• Interrupciones con prioridad fija.
Al no almacenar el contexto, delegándose esta tarea sobre el programador se
permite agilizar el proceso de transición entre el funcionamiento normal y las
interrupciones, almacenando solo los registros que sean utilizados.
Cuando se detecta un flanco de subida en uno o varios de los bits del vector de
interrupción, el evento es almacenado de forma interna, de esta forma es posible
tener constancia de cualquier interrupción, aunque estas se produzcan de forma
simultánea o mientras que se encuentra otra rutina de interrupción activa.
Si el procesador no se encuentra funcionando en modo interrupción y hay alguna
solicitud de interrupción activada en el registro interno, se entra en el modo
interrupción, enviando un pulso al proceso de “Fetch” para indicarle que se debe
conmutar el contador de programa al asociado a la interrupción (proporcionado
por el bloque encargado de gestionar las interrupciones) tan pronto como sea
posible.
En el caso de que existan varias solicitudas de interrupción activas
simultáneamente, la resolución de cual debe lanzarse se toma por medio de una
prioridad fija, en la cual la interrupción número 0 tiene el nivel más bajo de
prioridad, mientras que la interrupción número 15 presenta el nivel más alto de
prioridad.
Cuando se ejecuta la instrucción “end”, el control se devuelve a la rutina principal,
saliendose del modo interrupción y bajando el indicador de la interrupción que
acaba de finalizar.
Para mayor claridad, en la siguiente figura se ilustra el diagrama de flujo de la
gestión de interrupciones:
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
51i
Figura 4-4 Diagrama de flujo de la gestión de interrupciones.
Flanco en el vector
de interrupción
Registrado de la
interrupción
Espera hasta que se
active la señal
interrup_end
•Pc_interrup<=Pc asociado
•cmp_stack<=cmp_result
•Lanzar pulso en Interrup_start
•Activar la señal que indica que
una interrupción se encuentra
activa
¿Hay una solicitud de
interrupción activa?
•Desactivar la señal que indica
que una interrupción se
encuentra inactiva
Si
No
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
52i
4.3.4 Gestión de los parámetros del timer
Dentro del área de memoria reservada para el timer, ésta queda determinada de
acuerdo a la siguiente tabla:
Dirección Contenido
0x 7FFF
░
0x 7003
Sin uso por parte del timer
0x 7002 Valor del preescalado
0x 7001 Valor final del contador
0x7000 Arranque del timer
Tabla 4-4: Organización del area de memoria dedicada a los parámetros del Timer.
Así pues, para la escritura o lectura del preescalado y el valor final de la cuenta
del timer no es necesario más que el acceso a su posición de memoria asociada.
Un caso peculiar es la dirección 0x7000, en la cual, un acceso en modo escritura
genera un pulso en la señal de Start del timer produciendo como consecuencia, el
arranque del timer, independientemente del valor escrito en el.
En lo referente a los valores iniciales, tras el reset, tanto el preescalado como la
cuenta final quedan inicializados a cero.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
53i
4.3.5 Gestión del timer
En la Figura 4-5, se muestra en forma de diagrama de flujo el funcionamiento
interno del bloque de timer.
Figura 4-5 :Diagrama de flujo del funcionamiento del timer
Ante un flanco en la señal Start timer desencadenado por la escritura en la parte
baja del área de datos del timer tal y como se comentó en el apartado 4.3.4
produce que se almacenen internamente los valores de preescalado y valor final de
la cuenta igualando los parámetros internos asociados a estos.
Carga del valor final
y el preescalado
No Preescalado==0?
Si
Nuevo ciclo
de reloj
Preescalado-1 Preescalado=preescalado inicial
Cuenta-1
Cuenta==0?
Timer_state<=’0’
Espera
Start timer
timer._state<=’1’
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
54i
Cuando el valor de preescalado difiere de uno, con cada flanco de reloj se reduce
el valor interno del preescalado en una unidad. En el momento en el que el
preescalado se iguala a cero es el valor de la cuenta interna el que se ve reducido
en uno. Este proceso se repite hasta el momento en que dicha cuenta llegue a cero,
en el cual todo el timer se detiene y el bit que indica el estado del bit pasa a valer
‘1’.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
55i
4.3.6 El watchdog
El watchdog es una pieza de hardware que produce el reseteo del micro cuando
juzga que el sistema no está funcionando de forma correcta.
La idea remanente es la de una cuenta atras, que en el momento en el que alcanza
el valor cero, genera una señal que resetea el sistema. Así pues, el sistema debe
“patear” periodicamente el watchdog a fín de reiniciar la cuenta y que esta nunca
llegue a cero.
Es importante reseñar el tipo de errores que cubre el watchdog, pues este no es
capaz de detectar absolutamente todos los fallos posibles.
Es posible, en ambientes hostiles (o incluso en ambientes convencionales aunque
con menor frecuencia), que se produzcan errores en los datos almacenados en
memoria, en registros, un salto en el contador de programa, etc. La función del
Watchdog es que en caso de que el sistema entre en una dinámica de
funcionamiento erronea, en la cual el sistema entre en un bucle infinito, por
ejemplo. El watchdog obligue al sistema a volver a la situación de funcionamiento
seguro.
Hay que tener presente que hay ciertas situaciones erroneas que el sistema no
cubre, como por ejemplo bucles infinitos en los que el sistema “patee”
continuamente el watchdog. Para acotar aun más estos casos, es común la
modificación del watchdog para que no solo se active transcurrido un cierto
periodo de tiempo sin ser pateado, si no tambien por ser pateado demasiado
rápido. Sin embargo, esta estrategia requiere un profundo conocimiento de los
tiempos por parte del programador, convirtiendose en una medida virtualmente
inviable en el caso de sistemas con soporte de interrupciones o instrucciones con
duraciones indefinidas como es el caso.
El sistema escogido consiste en un bloque tipo timer ( 4.3.5) con ciertas
modificaciones que le hacen inicializar desactivado, siendo necesario liberar el
watchdog en un momento dado. En caso contrario, la señal “watchdog_state”
permanecerá a nivel bajo indefinidamente sin necesidad de patear el dispositivo.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
56i
En el micro, los parámetros del watchdog son accesibles mediante escritura en
memoria, encontrándose mapeados del siguiente modo:
Dirección Contenido
0x 7FFF
░
0x 7020
Sin uso
0x 7012 Valor del preescalado del watchdog
0x 7011 Valor final del contador del watchdog
0x7010 restart del watchdog
0x 7F002
░
0x7000
Area utilizada por el timer
Tabla 4-5: Organización del area de memoria dedicada a los parámetros del watchdog.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
57i
Manejo del contador de programa (fetch)
El proceso de Fetch tiene lugar de forma síncrona con cada ciclo de reloj. Para
evitar cortar procesos en curso, se ejecuta el algoritmo solamente cuando la señal
“next_op” se encuentre activa, la cual es un indicador de que el procesador está
preparado para ejecutar una nueva instrucción en el siguiente ciclo de reloj.
En la Figura 4-6 se muestra un diagrama de flujo ilustrativo del proceso.
Figura 4-6: Diagrama de flugo del proceso de Fech
Next_op=’1’ & clk=’1’
¿Interrupción
solicitada?
¿Orden de salto
solicitada?
Si No
Si No
PC=PC de salto PC+1
PC_bufer=PC
PC=PC de
interrupción
¿Fin de la
interrupción?
Si No
PC= PC_bufer
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
58i
En el proceso normal de fetch, con cada ciclo de reloj el contador de programa se
ve incrementado en una unidad. La excepción a dicha norma se produce al
ejecutarse operaciones que requieren de varios ciclos de reloj para su realización,
como es el caso de la lectura de la memoria o las operaciones en las cuales
interviene el bus APB. En este caso la activación de la señal “mem_ready” (y
como consecuencia de esta “next_op”) por parte del decodificador produce el
incremento del contador de programa.
En el caso de las instrucciones de salto, estas activan una señal “jump” así como
un puntero contenido en estas. El proceso fetch, en el momento de incrementar el
contador de programa, al registrar la señal “jump” en estado activo actualiza el PC
al valor indicado por el puntero de la instrucción de salto en lugar de
incrementarlo.
En lo respectivo al tratamiento de las interrupciones, ante un flanco de subida en
la señal “Start_interruption” se activa una señal interna del proceso fetch que
reserva la entrada en la interrupción. El propósito de esta señal es esperar a que se
complete la instrucción en curso, evitando que no se completen instrucciones
“lentas” como la lectura desde memoria.
Una vez que se entra en la interrupción, el actual contador de programa es
almacenado en un buffer, mientras que el PC es actualizado con el puntero
asociado a dicha interrupción.
Una vez concluida la interrupción, el PC es actualizado con el valor almacenado
en el buffer.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
59i
4.3.7 Decodificación de la instrucción
La decodificación de la instrucción se realiza por medio de una instrucción “case”,
en la que se asignan las señales que comandan la ALU, la gestión de memoria,
etc.
La distribución de los operandos de las instrucciones está ideada para minimizar
el área de la FPGA ocupada por el proceso. Estando las instrucciones divididas en
los siguientes grupos:
Código de operación Argumentos
Nº Reg Mem addr
Nº Reg inmediato
Nº Reg Nº Reg
Nº Reg Nº Reg Nº Reg
PC
Tabla 4-6: Tipos formatos de instrucción
En primer lugar, el área destinada al código de operación queda dividida en dos
subsecciones de tres bits cada una. En la primera se recoge el tipo de instrucción;
operaciones de salto, aritméticas, etc. Las cuales presentan formatos similares. El
segundo campo Clasifica el tipo de instrucción (suma, resta...).
Los bits del 19 al 16 almacenan la dirección del registro del primer operando.
Mientras que los bits menos significativos varian los operandos contenidos en
ellos.
En general, el mantener los operandos en posiciones fijas en diferentes tipos de
instrucciones, así como agrupar operaciones de un mismo tipo con un número
limitado del código de operación permite una reducción sustancial del area
producto de la síntesis del código.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
60i
4.3.8 La memoria de programa
La memoria de programa se encuentra sintetizada en lógica de puertas (“Hard
program code storage”). De este modo, a costa de sacrificar la reprogramabilidad
del dispositivo, es posible aumentar la robustez frente a la corrupción de los datos
debida a la radiación.
El código se encuentra en un paquete de vhdl, definido como un vector de
vectores del siguiente modo:
package program_code is
constant c_n_instructions : integer := 100;
type ROM_anio_type is array (natural range <>) of s td_logic_vector(25 downto 0);
constant ROM_anio: ROM_anio_type(0 to c_n_instructi ons-1) := (
c_opcode_movir & x"3" & x"0003", --movir R3 #3
c_opcode_movir & x"4" & x"0004", --movir R4 #4
c_opcode_addrr & x"4" & x"3" & x"5" & x"00 ", --addrr R3 R4 R5
c_opcode_cmpgt_rr & x"4" & x"3" & x"000", --cmpgt R4 R3
c_opcode_movir & x"6" & x"000A", --movir R6 #xA
c_opcode_movrm & x"6" & "0100" & x"001", --movir R6 #x4001
c_opcode_jmpt & x"0" & x"0000", --jmpt #x0000
(others =>'0'),
c_opcode_movir & x"6" & x"000A", - -movir R6 #xA
c_opcode_movrm & x"6" & x"0001", - -movir R6 #x0001
c_opcode_movir & x"6" & x"0002", - -movir R6 #x2
c_opcode_movrm & x"6" & x"0002", - -movir R6 #x0002
c_opcode_movrm & x"0" & x"0000", - movir R0 #x0000 --start timer
c_opcode_jmps & x"0" & x"000F", - -jmps #x000F
c_opcode_end & x"00000", - -end
(others =>'0'),
(others =>'0'),
);
end program_code;
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
61i
El proceso encargado de gestionar la memoria de programa actua de forma
asíncrona, asignando a la salida el elemento del vector correspondiente al actual
valor del contador de programa. A continuación se muestra el segmento de código
encargado de llevar a cabo dicha tarea:
architecture rtl of prog_mem is
begin
p_opcode_dec: process (pc)
begin
if (conv_integer(pc)< c_n_instructions) then
instructuction <= ROM_anio(conv_integer( unsigned(pc)));
else
instructuction <= (others => '0');
end if;
end process p_opcode_dec;
end architecture rtl;
En el caso de que el PC exceda el valor del parámetro “c_n_instructions” (valor
más allá del vector de instrucciones), el bloque devuelve una instrucción nula.
esto es una medida de protección para minimizar en lo posible la carga lógica del
sistema.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
62i
4.4 El maestro de APB
Se ha implementado un maestro de APB que cubre tanto la existencia de estados
de espera como la posibilidad de maniobras erroneas en el bus APB. La máquina
de estados encargada de llevar el peso de la operación en el bus es la siguiente
s_wait
Post Actions:
APB master
write APB read APBstart_wr='1'
1
start_rd='1'
2
s_wsetup
paddr<=addr;pwrite<='1';psel<='1';pwdata<=wdata;
s_rsetup
paddr<=addr;pwrite<='0';psel<='1';
s_waccess
paddr<=addr;pwrite<='1';psel<='1';penable<='1';pwdata<=wdata;
s_raccess
paddr<=addr;pwrite<='0';psel<='1';penable<='1';
s_wait s_wait
pready='1' pready='1'
Figura 4-7: Diagrama de estados del maestro de APB
La máquina permanece en espera hasta que recibe la orden de iniciar la operación
de lectura o de escritura. Es en este momento cuando pasa a la fase de setup
(Figura 2-18) para acto seguido pasar a la fase de adquisición, en la cual
permanecerá hasta que la señal pready notifique de que la operación ha concluido.
La gestión de errores se lleva a cabo de forma paralela, actualizando el estado de
la señal APB_fault cada vez que se concluye una operación de transmisión de
datos y conservando dicho estado hasta la siguiente transferencia de modo que
pueda ser accesible por la operación de salto condidional jmpsig. (siendo posible
repetir operaciones de transferencia fallidas).
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
63i
5 RESULTADOS/EXPERIMENTOS
Para la elaboración de las pruebas sobre el sistema se realizaron “test benchs”
individuales sobre cada uno de los bloques funcionales en que se divide el
sistema, haciendo posible el estudio de casos particulares e incrementando la
facilidad de depuración..
En cada “test bench” se estimula al bloque con todo el rango de entradas
razonables, verificando de forma automática que los resultados proporcionados
son los correctos. En caso contrario el sistema envia un mensaje de error e indica
el instante en el que se ha producido. De esta forma es posible verificar un amplio
abanico de casos que con una simple verificación visual serian imposibles de
abarcar.
Figura 5-1: Esquema del proceso de test.
A continuación se muestran los resultados de las simulaciones sobre los bloques
del sistema así como una breve descripción de la rutina de test.
Estímulos
Respuesta
Rutina de test Bloque VHDL
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
64i
5.1 Test bench del maestro de APB
Para el test del maestro de APB se estableció un primer proceso que ordene al
maestro que comience los procedimientos de lectura o escritura y otro proceso que
actue como esclavo del bus APB. Así pues, los resultados son los siguientes:
5.1.1 Operación de escritura (sin error)
De acuerdo al estandar AMBA 3 APB, se contempla que la escritura en el bus no
tiene porque producirse de forma inmediata, si no que se debe esperar a que el
exclavo manifieste que la escritura se ha producido, poniendo en alto la señal
“pready”. En la siguiente figura se puede apreciar la evolución de las señales
durante la maniobra de escritura.
Figura 5-2: Señales correspondiente a la escritura en un esclavo de APB
Se aprecia como tras la orden “start_wr”, se pasa a la primera fase de escritura con
el paso a estado activo de las señales “pwrite” y “psel”, en el siguiente ciclo de
reloj se hace lo propio con la señal “penable” permaneciendo en este estado hasta
recibir la confirmación de que la operación ha concluido con la transición de la
señal “pready” a estado activo, de acuerdo con la especificación AMBA.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
65i
5.1.2 Operación de escritura (con error)
El interfaz APB tambien debe ser capaz de soportar operaciones erroneas de
escritura. en la siguiente figura se muestra un detalle de dicho caso.
Figura 5-3: Señales correspondiente a la escritura erronea en un esclavo de APB
Se observa como la operación transcurre de modo similar a la de escritura sin
error, con la salvedad de que en este caso, al mismo tiempo que la señal “pready”,
el esclavo activa la señal ”pslverr” indicado que ha tenido lugar un error. Este hito
se ve reflejado en la señal “apb_fault” la cual se activa permaneciendo en dicho
estado hasta la siguiente operación sobre el bus.
5.1.3 Operación de lectura (sin error)
En la siguiente figura se muestra el resultado de llevar a cabo una operación de
escritura (iniciada por la señal “start_rd”).
Figura 5-4:: Señales correspondientes a la lectura de un esclavo de APB
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
66i
5.1.4 Operación de lectura (con error)
En el caso de una operación de lectura erronea se obtienen resultados
análogos representados en la siguiente figura.
Figura 5-5: Señales correspondientes a la lectura erronea de un esclavo de APB
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
67i
5.2 Test bench del banco de registros
En el caso del banco de registros se procede a bombardear el bloque con
diferentes datos de entrada y direcciones, dando la orden de almacenamiento
únicamente cuando la dirección de escritura y el dato de entrada coinciden.
Tras la fase de escritura se procede a la fase de lectura y verificación, en la que se
barren los registros, comprobando que el dato almacenado en su interior se
corresponde con el que deberia.
En la siguiente figura se muestra una visión general de este proceso.
Figura 5-6: Visión general del proceso de test del banco de registros.
A continuación se muestra un detalle del proceso de escritura:
Figura 5-7: Detalle del proceso de escritura en el banco de registros.
Y en la siguiente figura se aprecia el proceso de lectura:
Figura 5-8: Detalle del proceso de rectura de los registros.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
68i
5.3 Test bench del bloque sumador
Para verificar el correcto funcionamiento del bloque se generan todas las
combinaciones de entradas posibles para los operandos del bloque para, en
paralelo, mediante otro proceso, verificar que el resultado de la suma se ha
efectuado de forma correcta.
Puesto que el número de combinaciones posibles para dos operandos de 16 bits es
exageradamente grande, dando lugar a tests con una duración excesivamente
larga. Para solventar este problema, es cuando el uso de genéricos revela su
potencial. Al tratarse de un bloque en el que todos los anchos de palabra se
encuentran determinados a varables genéricas, es posible obtener un bloque
análogo pero con menor ancho de palabras y por tanto, un tiempo de simulación
menor.
En este caso particular, se ha llevado a cabo en test para palabras de un ancho de 4
bits, obteniendose el resultado que se observa en la siguiente figura.
Figura 5-9: Detalle del proceso de test del bloque sumador.
Por motivos obvios, no se ilustra la simulación al completo si no solo un detalle
de la misma.
5.4 Test bench del bloque restador
El proceso anteriormente comentado para el caso del bloque sumador se repite de
forma idéntica en el caso del bloque restador, como se aprecia a continuación:
Figura 5-10: Detalle del proceso de test del bloque restador.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
69i
5.5 Test bench del bloque comparador
En este caso se sigue la tónica de las simulaciones sobre los bloques sumador y
restador. Se somete a un bloque comparador con ancho de palabra limitado a un
tren de señales que cubre todas las combinaciones posibles, verificándose para
cada caso que las señales de salida que se corresponden con el valor esperado.
En la Figura 5-11 se muestra un instante de la rutina de test:
Figura 5-11: Detalle del proceso de test del bloque comparador.
Se aprecia como los valores max, min y a evolucionan de forma independiente.
Max y min crean una ventana de valores entre los cuales, a da lugar al estado
inactivo de las señales “over” y “under”, las cuales se activan cuando a se
posiciona por encima o por debado de dicha ventana respectivamente.
5.6 Test del micro completo
Para verificar el equipo en conjunto no es posible estimular el bloque
únicamente con señales externas, si no que es necesario recurrir a un
programa de autotest.
Dicho programa ejecuta diversas instrucciones. Si el programa se ha
ejecutado de forma correcta, proporciona al final un valor numérico dado
vía APB, como resultado de efectuar las operaciones matemáticas, lógicas,
saltos, etc.
Para verificar las interrupciones, de forma externa se fuerza al sistema a
entrar en diversas rutinas de interrupción, comprobando que el resultado
proporcionado es correcto.
Finalmente, se fuerza al sistema a entrar en un bucle infinito a fin de
comprobar el buen funcionamiento del watchdog.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
70i
--Start-up
c_opcode_jmpnc & x"0" & x"0014", --jmpnc #0011
--///////////////////////////////////////////////// //////////////////////
-- Interruption 0
--///////////////////////////////////////////////// //////////////////////
c_opcode_cmpeq_ri & x"F" & x"0003", --cmp R16 #3
c_opcode_jmpf & x"0" & x"0004", --jmpf #x0004
c_opcode_movrm & x"F" & x"8003", --movir R3 #x8003 (escritura en APB)
c_opcode_end & x"00000", --end
--///////////////////////////////////////////////// //////////////////////
-- Interruption 1
--///////////////////////////////////////////////// //////////////////////
--carga del contexto
c_opcode_movrm & x"1" & "1100" & x"001", --movrm R2 #xC001
c_opcode_movrm & x"2" & "1100" & x"002", --movrm R2 #xC002
--Carga de un valor en un esclavo
c_opcode_movir & x"1" & x"0F33", --movir R1 #3
c_opcode_movir & x"2" & x"FFFF", --movir R2 #FFFF
c_opcode_and_ri & x"2" & x"000E", --and_ri R2 #000E
c_opcode_or_ri & x"2" & x"0001", --or_ri R2 #0001
c_opcode_and_rr & x"1"&x"2"&x"1"&x"00", --and_rr R1R1R1
c_opcode_cmpbit_ri& x"1" & x"0002", --bitstate R1 #2
c_opcode_jmpf & x"0" & x"000E", --jmpf #x000E
c_opcode_movrm & x"1" & x"8003", --movrm R1 #x8003 (APB write)
--Si la operación es fallida, se repite
c_opcode_jmp_s &”1100" & x"000D", --jmpsig APB #x000D
--Recuperacion del conexto
c_opcode_movmr & x"1" & "1100" & x"001", --movmr R1 #xC001
c_opcode_movmr & x"2" & "1100" & x"002", --movmr R2 #xC002
c_opcode_end & x"00000", --end
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
71i
--///////////////////////////////////////////////// //////////////////////
-- Interruption 1
--///////////////////////////////////////////////// //////////////////////
--Bucle infinito
c_opcode_jmpuc & x"0" & x"0013" --jmpuc #x0013
--///////////////////////////////////////////////// //////////////////////
-- Initialitation state
--///////////////////////////////////////////////// //////////////////////
--Carga del puntero a la interrupción 0
c_opcode_movir & x"1" & x"0F33", --movir R1 #3
c_opcode_movir & x"2" & x"FFFF", --movir R2 #FFFF
--Carga del puntero a la interrupción 1
c_opcode_movir & x"1" & x"0005", --movir R1 #x5
c_opcode_movrm & x"1" & "0100" & x"001", --movir R1 #x4001
--Lectura de APB
c_opcode_movmr & x"1" & x"8003", --movmr R1 #x8003 (APB read)
c_opcode_cmpeq_ri & x"1" & x"0003", --cmpeq_ri R1, #3
--Bucle for
c_opcode_movir & x"4" & x"0000", --movir R4 #0000
c_opcode_movir & x"5" & x"0001", --movir R5 #0001
c_opcode_addri & x"5" & x"0002", --movir R5 #0001
c_opcode_subrr & x"4"&x”5”&x"4"&x"00", --subrr R4 R5 R4
c_opcode_movrr & x"4"& x"F"&x"000", --movir R4 #0000
c_opcode_cmplt_ri & x"F" & x"0003", --bitstate R1 #2
c_opcode_jmpt & x"0" & x"000F", --jmpt #x000F
--Bucle de retardo (usando el timer)
c_opcode_movir & x"6" & x"000A", --movir R6 #xA
c_opcode_movrm & x"6" & x"0001", --movir R6 #x0001
c_opcode_movir & x"6" & x"0002", --movir R6 #x2
c_opcode_movrm & x"6" & x"0002", --movir R6 #x0002
c_opcode_movrm & x"0" & x"0000", --movir R0 #x0000 --start timer
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
72i
c_opcode_jmps & x"0" & x"00026", --jmps #x00026
--bucle infinito
c_opcode_jmpnc & x"0" & x"0018", --jmpnc #x0018
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
73i
6 CONCLUSIONES
Una vez concluido el presente proyecto de forma satisfactoria, se ha obtenido un
bloque exportable a diversos diseños con interfaz APB para realizar tareas de
control de flujo.
Se ha generado un procesador a medida, destinado a cubrir con un alto
aprovechamiento de los recursos una tarea muy concreta la cual no se veia
completamente satisfecha hasta el momento.
Es un aspecto enormemente esperanzador la certeza de que este proyecto no está
destinado a morir en una estantería, si no que será implantado en equipos reales
destinados al sector aeroespacial, evolucionando y con toda seguridad,
cumpliendo con las espectativas y la gran responsabilidad que esto supone.
.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
74i
7 FUTUROS DESARROLLOS
Una vez concluido el diseño básico, se abren una serie de posibles mejoras y
añadidos. A continuación se enumeran algunos de ellos:
• Creación de un compilador que sirva de interfaz con la creación del código
del dispositivo, automatizando las tareas y facilitando la labor al
programador, así como permitiendo automatizar labores como variar el
ancho de palabra, número de interrupciones soportadas, etc.
Figura 7-1: Interfaz de LEON
• Flexibilizar la sintesis, usando secuencias “generate” y ampliando el
número de instrucciones, sintetizando el circuito unicamente cuando este
sea necesario. Esto permite la incorporación de nuevas instrucciones, pero
empleando en la síntesis unicamente los procesos que vayan a ser
utilizados, convirtiendo el sistema en una herramienta muchísimo más
flexible.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
75i
BIBLIOGRAFÍA
[1] Wakerly. Diseño digital principios y prácticas. Ed: Prentice Hall
[2] Peter J. Ashenden the VHDL Cookbook Ed: University of Adelaide
[3] Volnei A.Pedroni Circuit.Design.with.VHDL.(2004).Ed: MIT Press
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
77i
A pesar de la existencia en el mercado de diversos softcores, la pretensión
generalista de los mismos hace que no sean todo lo eficientes que sería deseable a
la hora de trabajar con aplicaciones específicas.
Este es el caso de los equipos dedicados a tareas de control de flujo, en los que el
proceso se limita a la lectura de parámetros (temperaturas, estado de flags, etc.) y
actuar en consecuencia, enviando comandos a diversos elementos del sistema.
Estos equipos presentan peculiaridades como un número alto de rutinas urgentes o
interrupciones (atendiendo al incremento de cierta temperatura por encima de los
límites de seguridad) que no pueden ser cubiertas por los micros disponibles.
Tambien suelen presentar una serie de rutinas simples, que pueden ser gestionadas
con un número limitado de comandos, por lo que los micros convencionales se
antojan sobredimensionados, desembocando en un desperdicio de los escasos
recursos disponibles en una FPGA.
Es pues que es necesario el desarrollo de herramientas especializadas en tareas
concretas que lleven a cabo su cometido de forma rápida y eficiente con un
consumo minimizado de los recursos disponibles.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
79i
PFC0809 RISC Microprocessor Manual de Referencia
PFC0809 Rev. 2 5/2009
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
80i
Organización del documento Introducción.........................................................................................................81
¿Por qué usar un microcontrolador en una FPGA?.......................................81
Descripción del dispositivo................................................................................82
Puertos..................................................................................................................84
Lista de instrucciones –Funciones....................................................................86
Lista de instrucciones – Códificación...............................................................91
Mapeo de memoria.............................................................................................94
El interfaz APB.....................................................................................................96
Señales del bus APB................................................................................96
Operación de escritura con espera y sin error.....................................97
Operación de lectura con espera y sin error........................................97
Operación de escritura con error...........................................................98
Operación de lectura con error..............................................................98
Diagrama de fases del protocolo APB..................................................99
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
81i
Introducción
Esta guía contiene información detallada sobre las instrucciones soportadas
por el PFC0809. Un breve ejemplo de cada una de ellas así como sus efectos
sobre el código.
¿Por qué usar un microcontrolador en una FPGA?
Tanto los microcontroladores como las FPGA’s son capaces de implementar
prácticamente cualquier función lógica. Sin embargo, cada uno tiene
ventajas particulares en coste, rendimiento y facilidad de uso.
Los microcontroladores se ajustan muy bien a tareas de control, adaptándose
especialmente bien a los cambios de funcionamiento.
La programación de secuencias de control o de máquinas de estado por
medio de código ensamblador es, por lo general, más sencillo que la
creación de estas directamente en la propia FPGA.
Los microcontroladores suelen tener limitado su rendimiento. Cada
instrucción se ejecuta de forma secuencial, por lo que a medida que la
aplicación presenta mayor complejidad, el número de instrucciones
necesarias crece, en detrimento del rendimiento del sistema, sin embargo,
mientras que el código entre dentro de la memoria del micro, no se
presentarán más inconvenientes.
Sin embargo, La implantación del algoritmo directamente en la FPGA,
siendo posible llevar a cabo el algoritmo de manera secuencial o en paralelo,
consumiendo una mayor cantidad de recursos de la FPGA a medida que se
incrementa la complejidad de la aplicación.
Un softcore (Micro sintetizable en una FPGA) aúna lo mejor de estos dos
mundos. Así es posible ejecutar rutinas en el micro, mientras que ciertos
procesos que necesitan respuestas rápidas o procesos paralelizados se
ejecutan en la FPGA de forma externa al microprocesador.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
82i
1 Descripción del dispositivo
El dispositivo responde a las características de un microprocesador tipo
RISC con una arquitectura Harvard, es decir, con memorias independientes
para el código de programa y las variables.
El equipo trabaja con un ancho de palabra de 16 bits, siendo este tambien el
ancho de palabra del contador de programa.
Se establecen un total de 16 registros, dentro de los cuales, el registro nº0 se
encuentra de forma permanente con el valor 0 almacenado en el. Cualquier
escritura sobre dicho registro es ignorada.
El microprocesador trabaja con instrucciones rápidas, las cuales en su
mayoria toman tan solo un ciclo de reloj para su ejecución. Es pues que se
podría considerar un microprocesador monociclo pero con modificaciones.
Dichas excepciones se dan en las operaciones de acceso a memoria, las
cuales dependiendo de si trabajan sobre memoria RAM, bus APB u otro
elemento pueden tomar dos o más ciclos de reloj.
El equipo presenta una mecánica de funcionamiento tipo “carga-
almacenamiento”; todas las operaciones aritméticas, lógicas,
comparaciones, etc tienen lugar entre registros o entre registros e
inmediatos. Por tanto, para operar con parámetros almacenados en memoria,
primero será necesario hacer una copia desde la RAM al banco de registros,
para posteriormente llevar a cabo la operación deseada.
Tambien se dispone de soporte para interrupciones. Esposible gestionar
hasta 16 interrupciones, con prioridad fija (siendo la interrupción 0 la menos
prioritaria y la 15 la más prioritaria) y sin que exista anidamiento de estas.
Tampoco se contempla el almacenamiento del contexto, delegándose esta
tarea al programador. De este modo se logra almacenar solamente los
registros que sean utilizados por la rutina de interrupción, agilizando el
funcionamiento del equipo.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
83i
Los punteros asociados a las rutinas de interrupción así como las flags que
las habilitan se encuentran mapeados en memoria, por lo que tanto la lectura
como la escritura de sus parámetros se llevan a cabo del mismo modo que si
se efectuara sobre la memoria propiamente dicha.
Se dispone de un timer interno, (vease el apartado 4.3.5) cuyo estado
únicamente es accesible como llave para la instrucción de salto condicional
asociado a una señal interna (jmpsig). Este elemento tambien se encuentra
mapeado en memoria, por lo que cualquier manipulación de los mismos se
lleva a cabo por medio de las instrucciones de manejo de datos movmr y
movrm (vease el apartado 3.2)
Se dispone de interfaz con el bus AMBA 3 APB, con soporte de errores y
espera. En caso de error, éste es verificable por la instrucción de salto
condicional jmsig según se explicó en el punto 2.3.
En el caso de que durante una operación sobre el bus APB se detecte algún
error, se activará un indicador de fallo en el bus APB (el cual permanecerá
en dicho estado hasta la siguiente operación de lectura o escritura en el bus
APB) La cual es accesible por la instrucción de salto condicional jmpsig. De
este modo, es posible detectar y repetir operaciones fallidas si fuera
necesario.
Tambien se implementa un watchdog. Dicho dispositivo se inicializa
deshabilitado, siendo necesaria su activación por parte del programador si es
necesario. Una vez encendido actua como un timer, con la salvedad de que
si el contador llega a cero, el puerto de salida del micro “watchdog_state”
pasa a estado activo. El objetivo de esto es permitir reiniciar, no solo el
procesador, si no tambien elementos externos ligados al micro.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
84i
2 Puertos
El micro dispone de los siguientes puertos
Figura 0-1: Interfaz del core
Nombre Función Tipo
clk Señal de reloj input
rst_n Reset asíncrono input
ram_dout Datos procedente de la memoria RAM input
ram_din Datos destinados a ser almacenados en la memoria RAM output
ram_enable Señal que habilita la lectura o la escritura de la memoria RAM output
ram_rw Señal que habilita o la escritura de la memoria RAM output
ram_addr Dirección destino de la memoria RAM output
paddr Dirección destino del bus APB output
prdata Dato leido del bus APB input
pwdata Dato escrito en el bus APB output
psel Selección del esclavo del bus APB output
penable Enable del bus APB output
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
85i
pready Señal que indica que se ha completado con éxito la operación
en curso sobre el bus APB
input
pslverr Señal que indica que se ha producido un error de cualquier
tipo en la operación sobre el bus APB
input
pwrite Señal que indica que se realiza una operación de escritura
sobre el bus APB
output
interrupt_vector Vector en el que cada bit está vinculado a una interrupción.
Un flanco de subida da paso a la rutina de interrupción
vinculada (necesario que las interrupciones se encuentren
habilitadas)
input
watchdog_state Testigo del estado interno del watchdog. Su activación no
tiene otros efectos internos al microprocesador, siendo
necesaria su conexión externa al reset síncrono para que se
produzca el reinicio del mismo.
output
Tabla 0-1: Funciones de los puestos del micro.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
86i
3 Lista de instrucciones –Funciones
Este capítulo proporciona, de forma concisa, una lista de las instrucciones
del micro. Las instrucciones se encuentran agrupadas de acuerdo a su
función.
Tabla 0-2: Instrucciones de manejo de memoria.
Mnemonicos Descripción Ciclos
Movrm R1,#addr Desplaza el dato contenido en R1 a la dirección de
memoria señalada por #addr nc
Movmr R1,#addr Desplaza el dato contenido en la dirección de memoria
señalada por #addr al registro R1 nc
Movir R1,#inmediato Carga en el registro R1 el valor de #inmediato. 1
Movrr R1,R2 Copia el contenido del registro R1 al registro R2 1
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
87i
Tabla 0-3: Instrucciones de comparación entre registros
Mnemonicos Descripción Ciclos
Cmpgt_rr R1,R2 Compara los registros R1 y R2, si R1 es mayor, a la
salida del Alu se activa un true que podrá ser usado
en posteriores saltos condicionales, en caso contrario
la salida se fija en False.
1
Cmpge_rr R1,R2 Compara los registros R1 y R2, si R1 es mayor o igual,
a la salida del Alu se activa un true que podrá ser
usado en posteriores saltos condicionales, en caso
contrario la salida se fija en False.
1
Cmpeq_rr R1,R2 Compara los registros R1 y R2, si R1 es igual, a la
salida del Alu se activa un true que podrá ser usado
en posteriores saltos condicionales, en caso contrario
la salida se fija en False.
1
Cmple_rr R1,R2 Compara los registros R1 y R2, si R1 es menor o igual,
a la salida del Alu se activa un true que podrá ser
usado en posteriores saltos condicionales, en caso
contrario la salida se fija en False.
1
Cmplt_rr R1,R2 Compara los registros R1 y R2, si R1 es menor, a la
salida del Alu se activa un true que podrá ser usado
en posteriores saltos condicionales, en caso contrario
la salida se fija en False.
1
Cmpbit_rr R1,N Se fija a la salida del ALU el estado del bit del registro
R1 indicado por N que podrá ser usado en posteriores
saltos condicionales.
1
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
88i
Tabla 0-4: Instrucciones de comparación entre registro e inmediato
Mnemonicos Descripción Ciclos
Cmpgt_ri R1,#inmediato Compara los registros R1 y R2, si R1 es mayor, a la
salida del Alu se activa un true que podrá ser
usado en posteriores saltos condicionales, en caso
contrario la salida se fija en False.
1
Cmpge_ri R1,#inmediato Compara los registros R1 y R2, si R1 es mayor o
igual, a la salida del Alu se activa un true que
podrá ser usado en posteriores saltos
condicionales, en caso contrario la salida se fija en
False.
1
Cmpeq_ri R1,#inmediato Compara los registros R1 y R2, si R1 es igual, a la
salida del Alu se activa un true que podrá ser
usado en posteriores saltos condicionales, en caso
contrario la salida se fija en False.
1
Cmple_ri R1,#inmediato Compara los registros R1 y R2, si R1 es menor o
igual, a la salida del Alu se activa un true que
podrá ser usado en posteriores saltos
condicionales, en caso contrario la salida se fija en
False.
1
Cmplt_ri R1,#inmediato Compara los registros R1 y R2, si R1 es menor, a la
salida del Alu se activa un true que podrá ser
usado en posteriores saltos condicionales, en caso
contrario la salida se fija en False.
1
Cmpbit_ri R1,#inmediato Se fija a la salida del ALU el estado del bit del
registro R1 indicado por N que podrá ser usado en
posteriores saltos condicionales.
1
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
89i
Tabla 0-5: Instrucciones aritméticas entre registros
Tabla 0-6: Instrucciones aritméticas entre registro e inmediato
Tabla 0-7: Instrucciones lógicas entre registros
Mnemonicos Descripción Ciclos
Addrr R1,R2,R3 Suma el contenido de R2 a R1 almacenando el
resultado en R3 1
Subrr R1,R2,R3 Resta el contenido de R2 a R1 almacenando el
resultado en R3 1
Mnemonicos Descripción Ciclos
Addri R1,#inmediato Suma el contenido de #inmediato y R2 almacenando
el resultado en R1 (sobreescritura) 1
Subri R1,#inmediato Resta el contenido de #inmediato a R1 almacenando el
resultado en R1 (sobreescritura) 1
Mnemonicos Descripción Ciclos
And_rr R1,R2,R3 Hace un AND bit a bit del contenido de R1 y R2
almacenando el resultado en R3 1
Or_rr R1,R2,R3 Hace un OR bit a bit del contenido de R1 y R2
almacenando el resultado en R3 1
Xor_rr R1,R2,R3 Hace un XOR bit a bit del contenido de R1 y R2
almacenando el resultado en R3 1
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
90i
Tabla 0-8: Instrucciones lógicas entre registro e inmediato
Tabla 0-9: Instrucciones de salto
Mnemonicos Descripción Ciclos
And_ri R1,#inmediato Hace un AND bit a bit del contenido de R1 e
#inmediato almacenando el resultado en R1
(sobreescritura)
1
Or_ri R1,#inmediato Hace un OR bit a bit del contenido de R1 e
#inmediato almacenando el resultado en R1
(sobreescritura)
1
Xor_ri R1,#inmediato Hace un XOR bit a bit del contenido de R1 e
#inmediato almacenando el resultado en R1
(sobreescritura)
1
Mnemonicos Descripción Ciclos
Jmpt #addr Si el resultado de la última instrucción de
comparación deó como resultado un True, carga
#addr en el contador de programa. En caso contrario
incrementa este en uno.
Requiere una comparación previa.
1
Jmpf #addr Si el resultado de la última instrucción de
comparación deó como resultado un False, carga
#addr en el contador de programa. En caso contrario
incrementa este en uno.
Requiere una comparación previa.
1
Jmpuc #addr Carga #addr en el contador de programa 1
Jmpsig #addr Si el timer ha terminado su cuenta atrás, carga #addr
en el contador de programa. En caso contrario
incrementa este en uno.
1
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
91i
4 Lista de instrucciones – Códificación
En este capítulo se muestra el código máquina asociado a cada
función tal y como debe ser escrito para su correcta interpretación
por el dispositivo.
Los mnemónicos correspondientes a cada instrucción se encuentran
almacenados en el paquete pfc_core.opcodes siendo suficiente para
indicar de que operación se trata el comando c_opcode[mnemónico]
tal y como se verá más adelante
Código de
operación Argumentos
6 bits 4 bits 4 bits 12 bits
Movrm Nº Reg Mem addr
Movmr Nº Reg Mem addr
Movir Nº Reg inmediato
Movrr Nº Reg Nº Reg
Tabla 0-10: Juego de instrucciones de movimiento de datos
Código de
operación Argumentos
6 bits 4 bits 4 bits 12 bits
Cmpgt_rr Nº Reg Nº Reg
Cmpge_rr Nº Reg Nº Reg
Cmpeq_rr Nº Reg Nº Reg
Cmple_rr Nº Reg Nº Reg
Cmplt_rr Nº Reg Nº Reg
Cmpbit_rr Nº Reg Nº Reg
Tabla 0-11: Juego de instrucciones de comparación entre registros.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
92i
Código de
operación Argumentos
6 bits 4 bits 16 bits
Cmpgt_ri Nº Reg Inmediato
Cmpge_ri Nº Reg Inmediato
Cmpeq_ri Nº Reg Inmediato
Cmple_ri Nº Reg Inmediato
Cmplt_ri Nº Reg Inmediato
Cmpbit_ri Nº Reg Inmediato
Tabla 0-12: Juego de instrucciones de comparación entre registro e inmediato.
Código de
operación Argumentos
6 bits 4 bits 4 bits 4 bits 8 bits
Addrr Nº Reg Nº Reg Nº Reg
Subrr Nº Reg Nº Reg Nº Reg
Tabla 0-13: : Juego de instrucciones de operaciones aritméticas entre registros
Código de
operación Argumentos
6 bits 4 bits 16 bits
Addri Nº Reg inmediato
Subri Nº Reg inmediato
Tabla 0-14: Juego de instrucciones de operaciones aritméticas entre registro e inmediato
Código de
operación Argumentos
6 bits 4 bits 4 bits 4 bits 8 bits
And_rr Nº Reg Nº Reg Nº Reg
Or_rr Nº Reg Nº Reg Nº Reg
Xor_rr Nº Reg Nº Reg Nº Reg
Tabla 0-15: Juego de instrucciones de operaciones lógicas entre registros
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
93i
Código de
operación Argumentos
6 bits 4 bits 16 bits
And_ri Nº Reg Inmediato
Or_ri Nº Reg Inmediato
Xor_ri Nº Reg inmediato
Tabla 0-16: Juego de instrucciones de operaciones lógicas entre registro e inmediato
Código de
operación Argumentos
6 bits 4 bits 16 bits
Jmpt PC
Jmpf PC
Jmpuc PC
Jmpsig PC
End
Tabla 0-17: Juego de instrucciones de salto.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
94i
6 Mapeo de memoria
La memoria queda mapeada del siguiente modo:
Dirección Contenido
0x FFFF
0x F000 Ram
0x BFFF
0x B000 Maestro de APB
0x 7FFF
0x 7000 Interrupciones
0x 3FFF
0x3000 Timer y watchdog
Tabla 0-18: Mapeado de la memoria
Dentro de cada uno de los slots previamente mostrados, la memoria
queda mapeada en función del elemento asignado, así pues, en el
caso del segmento destinado al timer y al watchdog, los parámetros
quedan posicionados en las siguientes direcciones:
Dirección Contenido
0x 7FFF
░
0x 7020
Sin uso
0x 7012 Valor del preescalado del watchdog
0x 7011 Valor final del contador del watchdog
0x7010 restart del watchdog
░ Sin uso
0x 7002 Valor del preescalado
0x 7001 Valor final del contador
0x7000 Arranque del timer
Tabla 0-19: Organización del area de memoria dedicada a los parámetros del Timery del watchdog.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
95i
Por otro lado, en el segmento de memoria destinado al manejo de los
punteros asociados a las rutinas de interrupción, así como los flags
que habilitan a éstas, se encuentra mapeado de la siguiente forma:
Dirección Contenido
0x 7FFF
░
0x 7011
Sin uso
0x 7010 Flags de enable de las interrupciones.
0x 700F Puntero asociado a la interrupción nº15
0x 700E Puntero asociado a la interrupción nº14
0x 700D Puntero asociado a la interrupción nº13
0x 700C Puntero asociado a la interrupción nº12
0x 700B Puntero asociado a la interrupción nº11
0x 700A Puntero asociado a la interrupción nº10
0x 7009 Puntero asociado a la interrupción nº9
0x 7008 Puntero asociado a la interrupción nº8
0x 7007 Puntero asociado a la interrupción nº7
0x 7006 Puntero asociado a la interrupción nº6
0x 7005 Puntero asociado a la interrupción nº5
0x 7004 Puntero asociado a la interrupción nº4
0x 7003 Puntero asociado a la interrupción nº3
0x 7002 Puntero asociado a la interrupción nº2
0x 7001 Puntero asociado a la interrupción nº1
0x7000 Puntero asociado a la interrupción nº 0
Tabla 0-20: Zona de memoria reservada para los punteros a interrupciones.
En lo referente a las zonas de memoria mapeadas para su uso como
memoria RAM y como interfaz con el bus APB, de los 16 bits de
direccionamiento, los 14 menos significativos corresponden de forma
directa con la dirección en RAM o en el bus APB.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
96i
7 El interfaz APB
El protocolo APB (Advanced Peripheral Bus) es parte de la familia de
protocolos de AMBA 3. Se trata de un interfaz de bajo coste, optimizado
para un consumo mínimo de energía así como el area de puertas empleada.
El APB es un protocolo no pipelinezado, todas las transiciones en las
señales tienen lugar ante un flanco ascendente de reloj, para facilitar su
integración en cualquier diseño. Toda transferencia toma al menos dos
ciclos (pudiendo ser más en caso añadir estados de espera)
Señales del bus APB
Las señales relacionadas con el bus APB suelen referirse con la letra P como
prefijo. Son las siguientes:
• PADDR. Bus de direcciones APB
• PSEL. Señal de selección del esclavo x APB.
• PENABLE. Señal de habilitación. Se usa para sincronizar la transferencia.
• PWRITE. A nivel alto indica acceso de escritura, a nivel bajo acceso de
lectura.
• PRDATA. Bus de datos en transferencias de lectura.
• PWDATA. Bus de datos en transferencias de escritura.
• PREADY. Indica cuando se ha completado la operación de lectura o
escritura.
• PSLVERR. En estado activo, indica que algún error ha sucedido durante la
transferencia.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
97i
El protocolo, en la versión de AMBA 3 incorpora cobertura de errorres y
espera. Así pues, una instrucción de lectura o escritura en un escavo APB se
da de la siguiente forma:
Operación de escritura con espera y sin error
Figura 0-2: Operación de escritura en un esclavo APB.
La transferencia se inicia con la activación tras un flanco de subida de reloj,
de la señales PSEL y PWRITE. Así mismo, en PADDR, se transmite la
dirección del esclavo objetivo y en PWDATA el dato a ser escrito. La
segunda fase se alcanza cuando se activa la señal PENABLE,
Permaneciéndose en este estado hasta la activación de PREADY, momento
en el que finaliza la operación, tal y como se detalla en la Figura 2-14.
De esta forma es posible trabajar con esclavos que requieran de varios ciclos
de reloj para responder.
Operación de lectura con espera y sin error
En el caso de la operación de lectura, todo el protocolo es idéntico con la
salvedad de que la señal PWRITE se fija a ‘0’ y el valor de PWDATA
carece de relevancia. Así mismo, el valor de PRDATA es fijado por el
esclavo, como se aprecia en la Figura 2-15.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
98i
Figura 0-3: Operación de lectura de un esclavo APB.
Operación de escritura con error
En el caso de la operación de escritura erronea, toda la operación es idéntica
de la de escritura exitosa, con la salvedad de que en este caso, al mismo
tiempo que el esclabo fija la señal PREADY a ‘1’, tambien fija a ‘1’ la
señan PSLVERR, como indicación de que algo ha fallado durante la
maniobra, tal y como se aprecia en la Figura 2-16.
Figura 0-4: Operación de escritura erronea en un esclavo APB
Operación de lectura con error
Finalmente, en el caso de las operaciones de lectura con error, las
señales son la conjunción de la operación de lectura previamente
explicada ( 2.3.3) con la maniobra con indicación de error del punto
anterior, tal y como se puede observar en la Figura 2-17.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
99i
Figura 0-5: Operación de lectura erronea en un esclavo APB
Diagrama de fases del protocolo APB
En genera, es posible representar las fases del protocolo ABP de una forma
esquemática por medio del diagrama mostrado en la Figura 2-18
Figura 0-6: Diagrama de fases del protocolo APB
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
100
8 Interrupciones
El dispositivo es capaz de gestionar hasta 16 interrupciones sin que exista
anidamiento entre las mismas ni almacenamiento del contexto.
Así pues, recae sobre el programador la responsabilidad de almacenar el
contenido de los registros que vayan a ser manipulados durante la
interrupción. De este modo, se logra acelerar la transición entre la rutina
principal y la de interrupción, reduciéndola al mínimo imprescindible.
El estado de las instrucciones tras el “start-up reset” es desactivado, por
motivos de seguridad. Para su uso, el programa deberá acceder a las
direcciones indicadas en la Tabla 0-20 para cargar las direcciones de
memoria de las rutinas de interrupción así como para activar los flags que
habilitan las interrupciones.
La activación de la secuencia de interrupción tiene lugar cuando es
detectado un flanco ascendente en alguno de los bits del vector de
interrupción. A partir de ese instante, la rutina de interrupción se activará
tan pronto como sea posible.
En el caso de que varias interrupciones hayan solicitado ser activadas al
mismo tiempo, se entrará a la rutina más prioritaria, dentro de una prioridad
fija (la rutina nº0 es la menos prioritaria mientras que la nº15 es la más
prioritaria) permaneciendo las demas interrupciones a la espera hasta que
ésta finalice.
Para finalizar la rutina de interrupción, basta con ejecutar la instrucción End
(Tabla 0-9), la cual devuelve el control al proceso principal. Recuérdese que
el programador debe devolver a su posición original los registros
almacenados en memoria al comienzo de la interrupción.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
101
9 Formato del código
Al trabajar con código sintetizado en lógica de puertas, el programa
debe ser expresado como código VHDL con el siguiente formato:
library ieee;
use ieee.std_logic_1164.all;
library pfc_core;
use pfc_core.opcodes.all;
--************************************************* **********************
package program_code is
constant c_n_instructions : integer := 20;
type ROM_anio_type is array (natural range <>) of s td_logic_vector(25 downto 0);
constant ROM_anio: ROM_anio_type(0 to c_n_instructi ons-1) := (
c_opcode_movir & x"3" & x"0003", --movir R3 #3
c_opcode_movir & x"4" & x"0004", --movir R4 #4
c_opcode_addrr & x"4" & x"3" & x"5" & x"00", --addrr R3 R4 R5
c_opcode_cmpgt & x"4" & x"3" & x"000", --cmpgt R4 R3
c_opcode_movir & x"6" & x"000A", --movir R6 #xA
c_opcode_movrm & x"6" & "0100" & x"001", --movir R6 #x4001
c_opcode_jmpt & x"0" & x"0000", --jmpt #x0000
(others =>'0'),
(others =>'0'),
(others =>'0'),
c_opcode_movir & x"6" & x"000A", --movir R6 #xA
c_opcode_movrm & x"6" & x"0001", --movir R6 #x0001
c_opcode_movir & x"6" & x"0002", --movir R6 #x2
c_opcode_movrm & x"6" & x"0002", --movir R6 #x0002
c_opcode_movrm & x"0" & x"0000", --movir R0 #x0000
--start timer
c_opcode_jmps & x"0" & x"000F", --jmps #x000F
c_opcode_end & x"00000", --end
(others =>'0'),
(others =>'0'),
(others =>'0'
);
end program_code;
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
103
8 CÓDIGO VHDL
Dada la amplia cantidad de código generado en este proyecto y a fin de evitar
incluir numerosas páginas con código de forma totalmente prescindible, se hace
necesaria la inclusión del mismo en un cd adjunto, el cual puede encontrarse al
final del presente volumen.
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
105
En las siguientes páginas se muestran de forma breve algunas
características de las familias de FPGAS RTAX y ProAsic, para más
detalles, remitase al fabricante
www.actel.com
Diseño de un microprocesador sintetizable en FPGA
Álvaro Padierna Díaz
1i}
Índice de planos
Plano nº 1: Diagrama esquemático del core.
Plano nº 2: Diagrama esquemático de la ALU.
Plano nº 3: Diagrama esquemático del control.
1
Microprocesador sintetizable en FPGA
Índice
PLIEGO DE CONDICIONES....................................................................................................... 0
1 PLIEGO DE CONDICIONES GENERALES Y ECONÓMICAS ................................... 2
1.1 CONDICIONES GENERALES .............................................................................................. 2 1.2 CONDICIONES ECONÓMICAS ........................................................................................... 4
2 PLIEGO DE CONDICIONES TÉCNICAS Y PARTICULARES.................................... 5
2.1 EQUIPO ELECTRÓNICO .................................................................................................... 5 2.2 PLACA DEL CIRCUITO DE ALIMENTACIÓN ....................................................................... 6
2.2.1 Soporte ...................................................................................................................... 6 2.2.2 Pistas......................................................................................................................... 6
2.3 NORMAS DE CALIDAD ..................................................................................................... 7 2.4 NORMAS DE SEGURIDAD E HIGIENE ................................................................................ 7 2.5 VIDA ÚTIL DEL EQUIPO ................................................................................................... 7 2.6 OTROS CRITERIOS DE DISEÑO.......................................................................................... 7
2
Microprocesador sintetizable en FPGA
1 PLIEGO DE CONDICIONES GENERALES
Y ECONÓMICAS
1.1 Condiciones generales
Las condiciones y cláusulas que se establecen en este documento son de obligado
cumplimiento por las partes contratantes.
I. Tanto el administrador como el cliente se comprometen desde la fecha de la
firma del contrato a llevar a cabo lo que se estipule.
II. Ante cualquier reclamación o discrepancia en lo concerniente al
cumplimiento de lo pactado por cualquiera de las partes, una vez agotada
toda vía de entendimiento, se tramitará el asunto por la vía de lo legal. El
dictamen o sentencia que se dicte será de obligado cumplimiento para las
dos partes.
III. Al firmarse el contrato, el suministrador se compromete a facilitar toda la
información necesaria para la instalación y buen funcionamiento del equipo,
siempre que sea requerido para ello.
IV. Así mismo, el cliente entregará al suministrador todas las características
distintivas del equipo comprado y aquellas otras que considere oportunas
para el necesario conocimiento de la misma a efectos del diseño del presente
equipo.
V. El plazo de entrega será de nueve meses, a partir de la fecha de la firma del
contrato, pudiendo ampliarse en tres meses. Cualquier modificación de los
plazos deberá contar con el acuerdo de las dos partes.
3
Microprocesador sintetizable en FPGA
VI. En caso de retrasos imputables al suministrador, se considerará una
indemnización del 1 % del valor estipulado por semana de retraso.
VII. Existirá un plazo de garantía de un año a partir de la entrega del sistema.
Dicha garantía quedará sin efecto si se demostrase que el sistema ha estado
sometido a manipulación o uso indebido.
VIII. Cumplido dicho plazo de garantía, el suministrador queda obligado a la
reparación del sistema durante un plazo de cinco años, fuera del cual
quedará a su propio criterio atender la petición del cliente.
IX. En ningún momento tendrá el suministrador obligación alguna frente a
desperfectos o averías por uso indebido por personas no autorizadas por el
suministrador.
4
Microprocesador sintetizable en FPGA
1.2 Condiciones económicas
Las condiciones económicas a tener en cuenta son:
I. Los precios indicados en este proyecto son firmes y sin revisión por ningún
concepto, siempre y cuando se acepten dentro del periodo de validez del
presupuesto que se fija hasta Diciembre de 2001.
II. El pago se realizará como sigue:
o 75% a la firma del contrato.
o 25% en el momento de entrega.
III. La forma de pago será al contado mediante cheque nominativo o mediante
transferencia bancaria. En ningún caso se aceptarán letras de cambio.
IV. El suministrador se hará cargo de los gastos de embalaje y del transporte,
dentro de la ciudad donde se encuentre la instalación. En caso de ser
necesario transporte interurbano, el gasto correrá por cuenta del cliente. En
todo caso, el responsable de los posibles desperfectos ocasionados por el
transporte será el suministrador.
V. Durante el plazo de garantía, la totalidad de los gastos originados por las
reparaciones correrán por cuenta del suministrador.
VI. Fuera de dicho plazo y durante los siguientes cinco años, los costes serán
fijados mediante acuerdo por ambas partes. Pasados 5 años, éstos los fijará
exclusivamente el suministrador.
5
Microprocesador sintetizable en FPGA
2 PLIEGO DE CONDICIONES TÉCNICAS Y
PARTICULARES
2.1 Equipo electrónico
El equipo sobre el que se implemente el diseño habrá de ser un FPGA; éste habrá
de contar con las siguientes características:
I. El equipo informático debe estar homologado conforme a la normativa de la
Agencia Espacial Europea (ESA) para funcionar en aplicaciones espaciales.
II. El código debe instalarse conforme a las indicaciones del fabricante,
manteniendo las condiciones de humedad y temperatura entre los límites
marcados.
III. Los programas informáticos empleados han de contar con la licencia
preceptiva y cumplir con las condiciones de la misma. En caso de usar
programas de licencia GNU, se deberán respetar las condiciones de la
misma.
.
6
Microprocesador sintetizable en FPGA
2.2 Placa del circuito de alimentación
2.2.1 Soporte
El tipo de soporte aislante utilizado en las placas de circuito será de fibra de
vidrio, con las características siguientes (recomendadas):
• Resistencia superficial en M< 105.
• Resistencia volumétrica en M<107.
• Constante dieléctrica (a f=1 MHz) 0,25.
• Temperatura máxima de trabajo 125ºC.
• Temperatura máxima de soldadura (máx. 20 seg.) 260ºC.
El espesor de las placas será de 1,6 mm (valor normalizado). Las placas serán de
una más caras, fabricadas por el método sustractivo basado en máscaras. Deberán
acompañarse de un esquema que contenga los taladros a realizar, así como la
colocación exacta de los componentes.
2.2.2 Pistas
El diseño se realizará teniendo en cuenta las recomendaciones para equipos de alta
frecuencia y de telecomunicaciones que dicta la normativa Europea en cuanto a:
• Compatibilidad electromagnética (89/36/EEC).
• Niveles de tensión (73/23/EEC).
Asimismo, se realizarán las pistas con el siguiente grosor recomendado:
7
Microprocesador sintetizable en FPGA
2.3 Normas de calidad
Los sistemas se diseñarán de forma que cumplan las normas UNE CEI y EN
aplicables a este tipo de productos.
2.4 Normas de seguridad e higiene
El proyecto cumplirá con la Ley 31/95 de Prevención de Riesgos Laborales.
2.5 Vida útil del equipo
Los sistemas se diseñarán para una vida útil en uso continuo no inferior a
diez años.
2.6 Otros criterios de diseño
Se emplearán componentes normalizados para los circuitos electrónicos
considerando los márgenes de seguridad necesarios para trabajar en entornos de
alta radiación.
1
Microprocesador sintetizable en FPGA
Índice
PRESUPUESTO ............................................................................................................................. 0
1 MEDICIONES....................................................................................................................... 2
2 PRECIOS UNITARIOS........................................................................................................ 4
3 SUMAS PARCIALES........................................................................................................... 5
4 PRESUPUESTO GENERAL ............................................................................................... 6
2
Microprocesador sintetizable en FPGA
1 MEDICIONES
En este capítulo se indican las diferentes partes que integran el proyecto,
agrupadas en distintas partidas, definiendo los presupuestos de cada una de ellas,
así como el presupuesto total.
A la hora de detallar los conceptos que se verán incluidos en el presupuesto final
correspondiente al presente proyecto, se han seguido las premisas que se exponen
a continuación:
I. Los precios de los componentes detallados corresponden al importe
pagado en su fecha de compra, y pueden no coincidir con el importe de
compra en caso de requerirse una reproducción del proyecto, en cuyo
caso el presente presupuesto podrá ser revisado y actualizado.
II. Se incluyen los costes correspondientes al equipo informático y al
software utilizado en el desarrollo del proyecto.
III. El presupuesto final incluye la totalidad de los componentes
empleados en el proyecto que constituye el concepto global
desarrollado, pero la mano de obra incluida se corresponde únicamente
con la empleada por el proyectista encargado de la parte del concepto
global desarrollada en el presente proyecto.
3
Microprocesador sintetizable en FPGA
Las partidas correspondientes a recursos humanos se encuentran a continuación,
en la Tabla 1-1
Concepto Número de Horas
Estudio y auditoria 75
Horas de ingeniería 350
Elaboración de
documentación 50
Tabla 1-1: Medios de los recursos humanos
En la Tabla 1-2 se hace referencia a las unidades de cada unos de los materiales
que componen el proyecto.
Concepto Cantidad
PC Procesador Intel Core 2 Duo 2.10 Ghz Memoria RAM 2 Gb Disco duro 250 Gb Blue-ray Disc Drive WLAN 802.11 a/b/g/n Tarjeta nVIDIA GeForce 8600 GS GPU Microsoft Windows Vista Home Premium
32 bits
Paquete Office 2003
1 unidad
HDL designer Licencia 1 año 1 licencia
Modelsim Licencia 1 año 1 licencia
Tabla 1-2: Recursos de los medios materiales
4
Microprocesador sintetizable en FPGA
2 PRECIOS UNITARIOS
Los precios unitarios de las partidas de los recursos humanos son:
Concepto Precio (€/hora)
Estudio y auditoria 45
Horas de ingeniería 30
Elaboración de
documentación 20
Tabla 2-1: Precio unitario de los recursos humanos
Los precios unitarios de los materiales son:
Concepto Precio (€/ud.)
PC Procesador Intel Core 2 Duo 2.10 Ghz Memoria RAM 2 Gb Disco duro 250 Gb Blue-ray Disc Drive WLAN 802.11 a/b/g/n Tarjeta nVIDIA GeForce 8600 GS GPU Microsoft Windows Vista Home
Premium 32 bits
Paquete Office 2003
1200/5 =240
(amortización correspondiente
al periodo)
HDL designer Licencia 1 año 6000
Modelsim Licencia 1 año 1000
Tabla 2-2: Precio unitario de los medios materiales
5
Microprocesador sintetizable en FPGA
3 SUMAS PARCIALES
Las sumas parciales de los recursos humanos y de materiales son:
Concepto Número de horas Precio (€/hora) Precio Total (€)
Estudio y auditoria 75 45 3375
Horas de ingeniería 350 30 10500
Elaboración de
documentación 50 20 100
Total de RR. HH. 13975
Tabla 3-1: Sumas parciales de los recursos humanos.
Concepto Uds. Precio (€/ud.) Precio Total
(€)
PC Procesador Intel Core 2 Duo 2.10 Ghz Memoria RAM 2 Gb Disco duro 250 Gb Blue-ray Disc Drive WLAN 802.11 a/b/g/n Tarjeta nVIDIA GeForce 8600 GS GPU
Microsoft Windows Vista Home
Premium 32 bits
Paquete Office 2003
1 240 240
HDL designer Licencia 1 año 1 6000 6000
Modelsim Licencia 1 año 1 1000 1000
Total de equipos y componentes 7240
Tabla 3-2: Sumas parciales de los materiales
6
Microprocesador sintetizable en FPGA
4 PRESUPUESTO GENERAL
El presupuesto general del proyecto es el siguiente
Partida Importe (€)
Total de Recursos Humanos 13975
Total de equipos y componentes 7240
Total de presupuesto 21215
16 % IVA 3 394.4
Total de presupuesto general 24 609.4
Tabla 4-1: Precio unitario de los recursos humanos