170
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

Microprocesador sintetizable en FPGA - IIT | Instituto de ... · ... con capacidad de referenciar hasta 65.536 instrucciones, se trata de una memoria tipo ... it takes a small set

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.

A mis padres, por todo

MEMORIA

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

76i

ESTUDIO ECONÓMICO

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

78i

MANUAL DE USUARIO

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

102

CÓDIGO FUENTE

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

104

DATASHEETS

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

106

9 POASIC

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

107

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

108

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

109

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

110

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

111

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

112

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

113

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

114

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

115

10 RTAX

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

116

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

117

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

118

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

119

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

120

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

121

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

122

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

123

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

124

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

125

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

126

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

127

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

128

Diseño de un microprocesador sintetizable en FPGA

Álvaro Padierna Díaz

129

PLANOS

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

2

Microprocesador sintetizable en FPGA

PLIEGO DE CONDICIONES

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.

PRESUPUESTO

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