Está en la página 1de 45

Universidad Técnica Federico Santa Marı́a

Departamento de Ingenierı́a Eléctrica


Valparaı́so, Chile

Uso de Plataforma Basada en DSP+FPGA1

Pablo A. Lezana Illesca

v1.0 Valparaı́so, 19 de marzo 2019


v.1.2 : Valparaı́so, 7 de septiembre de 2021

1
Basado en el documento “Manejo de la Plataforma Digital DSP+FPGA para el control de Accionamientos”
Índice de Contenidos

Índice de Contenidos I

Índice de Figuras II

Índice de Tablas III

Índice de Ejemplos III

1 Tarjeta basada en la FPGA. 1


1.1 Formas de programar la FPGA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Instalación en Windows 10 64b . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Creación de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.3 Uso de Esquemáticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 Programación en Verilog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.5 Asignación de Pines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.6 Creación de archivo para EPROM (.mcs) . . . . . . . . . . . . . . . . . . . . 10
1.2 Firmware GC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.1 Descripción de módulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1.a Divisores de reloj. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1.b Timers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1.c Moduladores PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.1.d Módulos para el manejo de los ADC. . . . . . . . . . . . . . . . . . 19
1.2.1.e Módulos para el manejo de los DAC. . . . . . . . . . . . . . . . . . 22
1.2.1.f Módulo para la decodificación de Encoder. . . . . . . . . . . . . . . 23
1.2.1.g Interrupciones hacia el DSP. . . . . . . . . . . . . . . . . . . . . . . 24

2 Uso de la plataforma DSP+FPGA. 26


2.1 Configuración de la FPGA desde el DSP . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2 Detalle de los registros de configuración. . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.1 Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.2 Moduladores PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.3 ADCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.4 Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2.5 Manejo de Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.2.6 Otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.7 Registros especiales disponibles sólo en algunas versiones de Firmware . . . . 39

Bibliografı́a 41

i
Índice de Figuras

1.1 Ejemplos de sistemas digitales basados en elementos discretos. . . . . . . . . . . . . . 1


1.2 Selección del modo de instalación ISE WebPACK. . . . . . . . . . . . . . . . . . . . 3
1.3 Pantalla inicial del Xilinx Webpack v.8.2. (muy similar a ISE Project Navigator 14.x) 4
1.4 Ventanas de creación de un nuevo proyecto: (a) Pantalla inicial; (b) Pantalla de
configuración. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Ventanas para agregar archivos fuente: (a) Nuevo archivo fuente; (b) Archivo fuente
ya existente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Pantalla de un proyecto completo en Xilinx Webpack. . . . . . . . . . . . . . . . . . 6
1.7 Ejemplo de un archivo fuente de tipo esquemático. . . . . . . . . . . . . . . . . . . . 7
1.8 (a) Uso de objetos y módulos en Verilog; (b) Uso de funciones en C . . . . . . . . . . 10
1.9 (a) Selección del archivo principal; (b) Inicio del proceso de compilación. . . . . . . . 11
1.10 Creación de un archivo para la PROM: (a) Primer paso; (b) Segundo paso, elección
del formato del archivo para la PROM; (c) Tercer paso, elección de la PROM; (d)
Cuarto paso, elección de nombre del archivo .mcs y directorio donde se guardará. . 12
1.11 (a)Paso final para generación de archivo de configuración para la PROM;(b) Ventana
del programa Adept para cargar el programa en la PROM. . . . . . . . . . . . . . . 13
1.12 Tarjeta FPGA basada en Spartan 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.13 Diagrama de la programación modular utilizada en el Firmware GC de la FPGA. . . 14
1.14 Relaciones entre las señales de reloj y los módulos internos de la FPGA. . . . . . . . 16
1.15 Funcionamiento del módulo Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.16 Patrones PWM con manejo de referencia: (a) Asincrónica; (b) Sincrónica. . . . . . . 18
1.17 Esquema interno de un modulador PWM. . . . . . . . . . . . . . . . . . . . . . . . . 18
1.18 Bloque PWM configurado para modulación: (a) Bipolar; (b) Unipolar. . . . . . . . . 18
1.19 Distribución por defecto de los pines de los moduladores PWM: (a) Normal; (b) Para
la versión compatible con Fibra óptica. (*Pin disponible sólo en Tarjeta Spartan 6) . . . . . . . . . . 19
1.20 Puertos P8 y P9 de la tarjeta Spartan 6. . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.21 Tarjeta Spartan 3: (a) Distribución de las entradas análogas en la tarjeta; (b) Pines
de los conectores relacionados con los ADCs; Tarjeta Spartan 6: (c) Distribución de
las entradas análogas en la tarjeta; (d) Pines de los conectores relacionados con los
ADCs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.22 Módulo para inicio de secuencias de conversión AD. Cada ADC cuenta con uno de
estos módulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.23 Secuenciador de conversiones AD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.24 Formato de los datos almacenados en los registros ADCn CONVxA xB. . . . . . . . . . . 22
1.25 (a) Esquema del funcionamiento del módulo DAC; (b) Distribución de pines tarjeta
Spartan 3; (c) Distribución de pines tarjeta Spartan 6. . . . . . . . . . . . . . . . . . 23
1.26 Diagrama con alguna de las posibilidades del módulo de decodificación de Encoder. . 24
1.27 Dependencias de la generación de interrupciones en Ext Int4 de acuerdo al firmware
base de la FPGA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

ii
2.1 Relaciones entre los módulos de la FPGA y el DSP. . . . . . . . . . . . . . . . . . . 26

Índice de Tablas

1.1 Relación entre la FPGA y las Interrupciones del DSP. . . . . . . . . . . . . . . . . . 24

2.1 Registros de configuración de módulo de Timers . . . . . . . . . . . . . . . . . . . . 28


2.2 Registros de configuración del módulo PWM . . . . . . . . . . . . . . . . . . . . . . 31
2.3 Registros de configuración del módulo convertidores ADC . . . . . . . . . . . . . . . 34
2.4 Registros de configuración y lectura del decodificador de encoder . . . . . . . . . . . 36
2.5 Registro de configuración de interrupciones . . . . . . . . . . . . . . . . . . . . . . . 37
2.6 Registro de configuración de interrupciones . . . . . . . . . . . . . . . . . . . . . . . 38
2.7 Registro de configuración de interrupciones . . . . . . . . . . . . . . . . . . . . . . . 39

Índice de Ejemplos

1.1 Programa simple en Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8


1.2 Extracto de archivo .ucf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Definición de direcciones en el archivo spartan3 v1 3.h para uso de periféricos de-
finidos en la FPGA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 Definición de máscaras en el archivo spartan3 v1 3.h para uso de periféricos defi-
nidos en la FPGA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

iii
Capı́tulo 1

Tarjeta basada en la FPGA.

Durante muchos años los circuitos digitales se construyeron en base a integrados discretos, es
decir, circuitos integrados que contenı́an un pequeño número de operadores lógicos (generalmente
menos de 7) y que realizaban funciones bastante básicas: ANDs, ORs, contadores, etc... Esto hacı́a que
los circuitos lógicos fueran de gran tamaño y difı́ciles de rutear, incluso para aplicaciones simples.
Algunos ejemplos de este tipo de desarrollos se muestra en la Fig. 1.1.

Figura 1.1. Ejemplos de sistemas digitales basados en elementos discretos.

Esto llevó al desarrollo de módulos con un mayor nivel de integración (densidad de elementos
por pastilla) y flexibilidad. Un primer paso en este sentido fueron las Programmable Logic Devices
o PLDs. La mayorı́a de estos dispositivos estaban formados por dos etapas:

Una malla de productos de tipo mintérminos o maxtérminos.


Un arreglo de Flip-Flops (FF).

Como su nombre lo indica, estos dispositivos son programables, especı́ficamente se pueden señalar
qué mintérminos (o maxtérminos) alimentan a cada FF, y de esta manera es posible realizar dife-
rentes funciones lógicas en una misma pastilla. Sin embargo las PLDs son de poca capacidad, en
torno a 10 entradas, 10 salidas y 10 FF, por lo que en el caso de funciones complejas es necesario
utilizar varias de ellas.
En los 90s surgen las Complex Programmable Logic Devices (CPLDs) dispositivos bastante
similares a las PLDs, pero con una densidad de compuertas entre 10 y 100 veces mayor (algunos
centenares de FF y de pines). Las principales diferencias eran que los FF de las CPLDs pueden
conectarse entre si, y que la función de los pines de las pastillas también es configurable, es decir,
dependiendo de la programación un pin puede utilizarse como entrada o salida. El diseño de la
interconexión interna de los diferentes módulos de un dispositivo es lo que se denomina usualmente
como Firmware.

1
Capı́tulo 1. Tarjeta basada en la FPGA. 2

Finalmente a finales de los 90s se desarrolla un último tipo de dispositivo, las Field Program-
mable Gate Array (FPGA), las que en la actualidad superan en varios órdenes de magnitud la
capacidad de las CPLDs (los modelos más grandes llegan a los cientos de miles de FF y varios mi-
llones de compuertas lógicas). Las FPGAs son absolutamente configurables, dando la posibilidad
de interconectar cualquier señal interna con cualquier módulo, desde este punto de vista pueden
considerarse como una gran caja llena de componentes digitales, los cuales pueden conectarse como
el usuario requiera de manera de generar múltiples funciones que trabajen en paralelo y/o encade-
nadas entre si. El precio a pagar por esta absoluta libertad de diseño es que las FPGAs, a diferencia
de las PLDs y CPLDs, pierden su programación cada vez que su polarización se desconecta, es por
esto que para aplicaciones stand-alone (autónomas) se necesita de un hardware especial que repro-
grame automáticamente la FPGA cada vez que esta se encienda. En el caso de la plataforma de
desarrollo con la que se cuenta en el laboratorio, dicho hardware existe y se basa en una memoria
programable tipo EPROM.
La FPGA a utilizar es de marca Xilinx modelo XC6SLX16, dentro de sus principales carac-
terı́sticas se encuentran:

256 pines, 181 de ellos programables como entradas/salidas.


Frecuencia de reloj máxima 250MHz.
18.224 FF.
32 multiplicadores por hardware de 18b×18b con capacidad adicional de suma y acumulación.

La FPGA puede configurarse de múltiples maneras para realizar una infinidad de tareas. Ge-
neralmente disponer de tantos grados de libertad puede volverse un problema. Es por este motivo
que en el marco del trabajo de tı́tulo de Gonzalo Carrasco [1], se desarrolló un Firmware para la
versión previa de la Tarjeta FPGA. Buena parte de este diseño se ha actualizado para el manejo
de la tarjeta que usted utilizará.
Este diseño permite manejar de manera simple desde el DSP todos los periféricos que dispone la
Tarjeta FPGA, además de agregar funcionalidades de uso común en aplicaciones de la Electrónica
de Potencia. Algunas de los módulos programados son:

5 Timers de 16-bits, con reloj base configurable y generadores de interrupción por perı́odo,
underflow y cuenta máxima 1.2.1.b.
3 módulos PWM, uno por cada Timer. Cada uno de estos módulos permite manejar 3 modu-
ladores bipolares o 1 modulador unipolar, trabajar con polaridad positiva o negativa, ajustar
el tiempo muerto y establecer el momento para la carga sincrónica de la referencia a los
moduladores 1.2.1.c.
2 módulos para el manejo de los conversores A/D de 12 bits, uno por cada conversor, que
permiten realizar en conjunto hasta 4 mediciones simultáneas de entre los 24 canales disponi-
bles. El funcionamiento de los conversores es completamente configurable y sincronizable con
eventos de los Timers 1.2.1.d
2 módulos para el manejo de los conversores D/A de 12 bits, uno por cada conversor 1.2.1.e.
1 decodificador de Encoder 1.2.1.f.

Aún con este poderoso desarrollo, en algunas ocasiones puede ser necesario modificar este Firm-
ware o directamente crear uno nuevo. En la sección 1.1 se muestran algunas de las formas de modi-
ficar el Firmware de la FPGA, mientras que en la sección 1.2 se muestran los principales módulos
ya programados en la FPGA y el modo de utilizarlos en combinación con el DSP.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 3

1.1. Formas de programar la FPGA.


La empresa Xilinx, fabricante de la FPGA utilizada en la tarjeta, provee los programas ISE
Webpack (ver Fig. 1.3) y en los últimos años el ISE Project Navigator, que permiten programar el
Firmware de diferentes dispositivos Xilinx, tales como CPLDs y FPGAs.
El proceso de creación de un Firmware (archivo con extensión .bit) realiza los siguientes pasos:

1. Instalación del ISE Webpack


2. Creación de un proyecto (creado por el usuario).
3. Creación de un código fuente (creado por el usuario).
4. Reducción del sistema de ecuaciones lógicas (realizado por el programa).
5. Implementación del diseño simplificado (realizado por el programa a partir de las restricciones
impuestas por el usuario).
6. Creación del archivo de configuración del Firmware con extensión .bit (realizado por el pro-
grama a partir de las preferencias del usuario).
7. Establecer comunicación con los dispositivos y grabación del nuevo Firmware.

El código fuente (o un conjunto de códigos fuente), es el programa en si y que indica a la FPGA


las tareas que el usuario quiere que ésta realice. A continuación se explican dos de las múltiples
formas que existen de escribir un código fuente.

1.1.1. Instalación en Windows 10 64b

Como en cualquier sistema operativo Windows, el primer paso es ejecutar el archivo de instala-
ción, en este caso xsetup.exe. Instale el programa en una carpeta con nombre “simple”, es decir sin
espacios ni sı́mbolos. Durante el proceso de instalación, el instalador realiza una serie de consultas,
las que deben contestarse afirmativamente. El único punto en el que debe tenerse cuidado es en
seleccionar el modo de instalación ISE WebPACK, tal como se muestra en la Fig. 1.2. Este modo
es el más básico de los diaponibles, pero cumple con los requerimientos de esta asignatura y es de
uso libre.

Figura 1.2. Selección del modo de instalación ISE WebPACK.

Una vez finalizada debe realizar los siguientes pasos:

1. Entre a la carpeta DIR INST\14.7\ISE DS\ISE\lib\nt64.

2. Renombre el archivo libPortability.dll a libPortability.dll.org.

3. Haga una copia del archivo libPortabilityNOSH.dll y renómbrelo como libPortability.dll.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 4

4. Haga una segunda copia del archivo libPortabilityNOSH.dll y muévalo a la carpeta:


DIR INST\14.7\ISE DS\common\lib\nt64 y al igual que en el punto 2, renombre el archivo
libPortability.dll a libPortability.dll.org y posteriormente renombre el archivo
libPortabilityNOSH.dll como libPortability.dll.

5. Finalmente, ingrese a la carpeta:


DIR INST\14.7\ISE DS\ISE\bin\nt64
en Propiedades\Compatibilidad habilite la opción Ejecutar este programa en modo compati-
bilidad para: Windows 7 y Ejecutar este programa como administrador, en los archivos ise.exe,
pn.exe e isimgui.exe.

Figura 1.3. Pantalla inicial del Xilinx Webpack v.8.2. (muy similar a ISE Project Navigator
14.x)

1.1.2. Creación de un proyecto

Un proyecto,al igual que en el CodeComposer, reúne toda la información relevante relacionada


con el funcionamiento esperado de la FPGA. El primer paso para crear un proyecto es ejecutar el
programa ISE Project Navigator, a diferencia del CodeComposer no es necesario que la tarjeta de
desarrollo se encuentre conectada al computador. Luego, para crear un nuevo proyecto seleccione
File→New Project, luego de lo cual aparecerá la ventana mostrada en la Fig. 1.4(a). En esta
ventana se especifica el nombre del proyecto (proyecto nuevo en el caso del ejemplo), lo que
automáticamente crea una carpeta en la dirección de destino (C:\Xilinx en el caso del ejemplo).
Es en esta carpeta donde se guardarán los archivos resultantes del proceso de compilación, aunque
los archivos fuentes pueden ubicarse en diferentes carpetas. De todas maneras por portabilidad de
código se recomienda siempre tener todos los archivos necesarios en una misma carpeta. Finalmente
en Top-Level Source Type se debe especificar que formato se utilizará para los archivos fuentes, entre
los que destacan Schematic (ver 1.1.3) y HDL (ver 1.1.4).
Presionando Next se abre la ventana Device Properties, mostrada en la Fig. 1.4(b). En ella
se proporciona información al compilador sobre el tipo de FPGA que se utilizará, el software
de reducción lógico a utilizar (Synthesis Tool) y el programa para simular el funcionamiento del
sistema (Simulator, por defecto en la opción ISE Simulator). Para la plataforma que se dispone en
el laboratorio la definición de la FPGA es la mostrada en la Fig. 1.4(b):

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 5

(a) (b)

Figura 1.4. Ventanas de creación de un nuevo proyecto: (a) Pantalla inicial; (b) Pantalla
de configuración.

(a) (b)

Figura 1.5. Ventanas para agregar archivos fuente: (a) Nuevo archivo fuente; (b) Archivo
fuente ya existente.

Family: Spartan6 (Tipo de FPGA).

Device: XC6SLX16 (Modelo).

Package: FTG256 (Encapsulado).

Speed: -5 (Velocidad).

Finalmente aparecen dos pantallas más (Fig. 1.5), que ofrecen la posibilidad de crear un nuevo
archivo fuente y de agregar un archivo fuente ya creado. Ambos pasos se pueden hacer manualmente
en forma posterior en los menus de Project→New Source... y Project→Add Source....
Una vez agregados todos los archivos fuente, el programa pasa a verse como se muestra en la
Fig. 1.6.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 6

Archivos Fuente Resumen

Acciones
Pantalla de mensajes

Figura 1.6. Pantalla de un proyecto completo en Xilinx Webpack.

Destacan cuatro ventanas2 :

Ventana de archivos fuente: Donde se muestran todos los archivos utilizados en el proyecto y
eventualmente se dependencia de otros archivos.

Ventana de acciones: Permite Sintetizar, Implementar y Programar el Firmware en la FPGA.

Ventana de Resumen: Indica la cantidad de errores, advertencias y recursos utilizados.

Pantalla de Mensajes: Informa sobre el proceso actual que está en ejecución y ofrece un detalle
de los errores y advertencias.

1.1.3. Uso de Esquemáticos.

Una manera simple de obtener un código fuente es a través de una representación gráfica. Los
archivos esquemáticos utilizan sı́mbolos comunes para representar elementos digitales tales como
ANDs, ORs, FFs (Flip-Flops), CBXXs (contadores de XX-bits), entre otros muchos. La interconexión
de estos elementos se realiza a través de lı́neas en forma similar a como se realizarı́an en un papel.
La Fig. 1.7 muestra algunos elementos de uso común y la forma de interconectarlos:

Elementos lógicos: Son estos Elementos los que realizan las funciones lógicas deseadas. Las
2
La ubicación de las ventanas es configurable, por lo que pueden encontrarse en posiciones distintas a las mostradas
en las siguientes figuras.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


EA(5)
VCC VCC EA(4)
INV
DIR_OUT0 fd14ce fd14ce
EA(7:0)
EA(3) EDin(13:0) D(13:0) Q(13:0) D(13:0) Q(13:0)
EA(3) INV
EA(2) EA(2) CE TC0 CE
EA(1) Ext_INT5 INV
ARDY

EA(5)
EA(6)
EA(7)
EA(0) EA(1) Strobe C CLR clk_150 C CLR
TINP1 INV

EA(0)
EA(1)
EA(2)
EA(3)
EA(4)
TINP0 EA(0)
INV

S0
S1
S2
S3
EDout0(23:0) ED0(23:0)

GND
DIR 000 ce2
ADC3-4 INV AND7

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


DIR 001 EDout1(23:0) ED1(23:0)
T_EA
GND GND EA(5)
DIR 010 EDout2(23:0) ED2(23:0)
ADC1b-2b EA(4)
ED3(23:0) AND3 DIR_OUT2
DIR 011 EDout3(23:0) INV
fd14ce fd14ce
EA(3) EDin(13:0) D(13:0) Q(13:0) D(13:0) Q(13:0)
DIR 100 EDout4(23:0) ED4(23:0)
INV
ADC5b-6b EA(2) CE TC0 CE
EDout5(23:0) ED5(23:0)
Capı́tulo 1. Tarjeta basada en la FPGA.

DIR 101 INV


ADC ID EA(1) Strobe C CLR clk_150 C CLR
DIR 110 EDout6(23:0) ED6(23:0)
Dip 3 EA(0)
DIR 111 EDout7(23:0) ED7(23:0)
O(23:0) EDout(23:0) INV
GND

DIR 1000 ce2

GND
ED8(23:0) mux16x24 INV AND7

ED9(23:0) T
AOE
o(23:0)
ED10(23:0) EDout(23:0) io(23:0) adc_7266_ce2
io(23:0)
ED11(23:0) EDin(23:0) Dat_ADC1
i(23:0) num_conv DC1(23:0) DC1(23:12)
num_conv_impar conv_adc1(23:0)
ED12(23:0) buf3e24b CS i(11:0) o(11:0)
CS_ADC_1_2
ED13(23:0) AND2B1 en_clk_adc en_clk_adc

ED14(23:0) clk_150 clk_150


Dat_ADC1
ED15(23:0) clk_150_pin clk_150 IBUF inicio inicio EDout11(23:12)
IBUFG i(11:0) o(11:0)

VCC
FTC FTC adc_7266_ce2
Dat_ADC1
clk_75 num_conv
T Q T Q clk_tm num_conv_par conv_adc1(23:0) EDout11(23:0)
CS
BUFG
CS_ADC_1_2
AND2B2 en_clk_adc en_clk_adc
clk_150 C clk_150 C
clk_150 clk_150
CLR CLR
inicio inicio

GND
Figura 1.7. Ejemplo de un archivo fuente de tipo esquemático.
7
Capı́tulo 1. Tarjeta basada en la FPGA. 8

entradas y salidas de un Elemento pueden estar dedicadas a Lı́neas o a Buses de conexión,


dependiendo de si llevan/traen información de 1 o varios bits.
Lı́neas de conexión: Estas lı́neas pueden interpretarse como “cables”, pero tienen algunas
particularidades que deben tenerse en cuenta: las lı́neas tienen nombres, dos lı́neas con el
mismo nombre son la misma lı́nea, aunque en el diagrama no se vean conectadas; no se pueden
conectar dos salidas a una misma lı́nea; una lı́nea puede manejar múltiples entradas.( DATo )
Buses de conexión: Son similares a las lı́neas de conexión, pero representan a un grupo de
ellas. Las lı́neas dentro de un bus se denominan como nombre bus(i), donde i indica la lı́nea
i-ésima del bus nombre bus.( DAT(36:0) )
Taps de conexión a buses: Los taps permiten llevar/sacar señales a un Bus. Para su correcto
funcionamiento, la señal individual debe tener el mismo nombre del Bus e indicar una posición
válida. Si se quiere agregar una señal de nombre diferente a un Bus, ésta debe ser pasada
por un Elemento buffer de manera de poder cambiar su nombre al del bus deseado (ver
Fig. 1.7).(DAT(36:0) DAT(7) )
Puertos de entrada y salida: Los puertos indican las entradas y salidas de la hoja de esquemáti-
cos. Estos puertos permiten interconectar diferentes hojas y/o conectar Lı́neas y Buses con
los pines I/O de la FPGA.( Ent I_O Sal )

Sub-circuitos: Es frecuente que una estructura se repita varias veces dentro de un diseño
lógico. Los Sub-circuitos son circuitos esquemáticos transformados a sı́mbolos o elementos
definidos por el usuario, de esta manera se pueden utilizar como un Elemento más.

Las ventajas de la programación a través de esquemáticos es que no se requieren de conoci-


mientos especiales, más allá del conocimiento básico del funcionamiento de los diferentes elementos
digitales (los cuales cuentan con una descripción de su funcionamiento en Object Properties→Symbol
Info). Además ayuda a ver de manera clara que, tal como ocurre en la realidad, todos los procesos
ocurren de manera simultánea.
Por otro lado puede resultar complejo realizar modificaciones como cambiar el ancho de buses
de datos, implementar secuencias condicionales, máquinas secuenciales complejas, etc...

1.1.4. Programación en Verilog.

A diferencia de los archivos de esquemáticos, los archivos Verilog son archivos de texto, que
especifican mediante comandos especı́ficos el funcionamiento que se desea obtener. Para más in-
formación sobre el lenguaje Verilog véase [2], mientras que su aplicación concreta a los módulos
ya desarrollados se encuentra detallada en [1]. Un ejemplo de un programa simple en Verilog se
presenta en el Ej. 1.1.
En lı́neas generales Verilog funciona definiendo un module (módulo) que puede interpretarse
como un subsistema que visto desde afuera posee entradas y salidas que se comunican con el exterior,
las que son definidas al comienzo del módulo. Dentro de este módulo se definen las caracterı́sticas de
las señales “externas” (entrada, salida, entrada-salida, cantidad de bits por señal) las que conviven e
interactúan con señales internas del tipo combinacional (wire) o secuencial (reg), ası́ como elementos
lógicos que definen el funcionamiento del módulo. La ventaja del Verilog es que permite varias
formas de definir el funcionamiento del bloque, desde una descripción detallada de elementos lógicos,
hasta niveles de abstracción altos como el uso de operadores matemáticos y secuencias condicionales,
además de resultar sumamente simple escalar el tamaño de buses.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 9

Ejemplo 1.1 (Programa simple en Verilog).


// Definición del módulo PWM
module PWM(clk,cuenta,load,dt,ref1,ref2,ref3,g11,g12,g21,g22);
// Definición de las entradas
input clk; //Reloj de 150MHz
input [15:0] cuenta; //Se~nal triangular de 16-bits
input load; //Se~nal de sincronización
input [2:0] dt; //Tiempos muertos (0-7)->(500ns-4000ns)
input [15:0] ref1,ref2,ref3; //Referencias para la modulación 16-bits
// Definición de las salidas
output g11; //Salidas de gate con tiempos muertos
output g12;
// Definición de las "variables" internas
reg [15:0] sref1,sref2,sref3;
wire gs11; //Se~nales sin tiempos muertos
wire gs12;
// Código propiamente tal
always @(posedge load) begin //con un canto positivo de load, se cargan
sref1=ref1; //los registros shadow
sref2=ref2;
end
//Comparaciones
assign gs11=(sref1>cuenta)?1:0; // Si sref1>cuenta entonces gs11 = 1, si no 0
...
endmodule

// Creación del objeto "modulador", basado en el módulo PWM antes definido


PWM modulador( .clk(clk_150), .cuenta(cuenta_contador), .load(s_int_contador)
, .dt({dip_sw3,dip_sw2,dip_sw1}), .ref1(conver_mod), .ref2(ref2)
, .ref3(ref3), .g11(g), .g12(gate), .g21(gate2), .g22());

Para utilizar este módulo basta con crear un objeto. Este objeto debe tener un nombre, y
es asociado a un módulo tal como se muestra al final del Ej. 1.1. Note que mediante la sintaxis
.nombre se~ nal módulo(nombre se~ nal real) se asigna una señal real perteneciente al proyecto a
un pin del módulo, en forma similar a cuando en C, se asigna una variable como argumento de una
función. La diferencia con C que DEBE tenerse en mente es que cada vez que se crea un objeto
basado en un módulo, este nuevo objeto se crea fı́sicamente en la FPGA, tal como muestra la
Fig. 1.8.

1.1.5. Asignación de Pines.

Si bien este paso es en teorı́a opcional y se podrı́a dejar al compilador la tarea de asignar
los pines según mejor le parezca, en la práctica, debido a que la FPGA se encuentra instalada
fı́sicamente en una tarjeta ya desarrollada, es necesario que el usuario se haga cargo, de acuerdo a
las restricciones planteadas en [1].
La asignación de pines es una restricción (constrain en inglés) impuesta al compilador por
el usuario, y se incluye en un archivo con extensión .ucf (User Constrain File) o archivo de
restricciones del usuario. Además de la asignación de pines en el archivo .ucf se pueden agregar
restricciones sobre la utilización de ciertas área de la FPGA, tiempos máximos de propagación
entre señales, entre otros. El Ej. 1.2 muestra un extracto del archivo .ucf creado en [1].

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 10

cont func_ 1();


cont func_ 2();
func_ 1

D Q

CLK Q func_ 1=cont()


...
cont ... int cont(...)
func_ 2 for i=1;i<2;i++
func_ 2=cont()
....
D Q ....
end
CLK Q

cont
DSP
FPGA

(a) (b)

Figura 1.8. (a) Uso de objetos y módulos en Verilog; (b) Uso de funciones en C

Ejemplo 1.2 (Extracto de archivo .ucf).


NET "A<0>" LOC = "p37" ;
NET "A<1>" LOC = "p43" ;
NET "A<2>" LOC = "p42" ;
NET "AOE" LOC = "p134" ;
NET "ARDY" LOC = "p135" ;
NET "ARE" LOC = "p132" ;
NET "AWE" LOC = "p133" ;
NET "ce2" LOC = "p138" ;
NET "ce3" LOC = "p136" ;
NET "clk_150" LOC = "p80" ;
NET "clk_ADC_1_2" LOC = "p33" ;
NET "CS_ADC_1_2" LOC = "p41" ;
NET "Dat_ADC1" LOC = "p47" ;
NET "Dat_ADC2" LOC = "p46" ;
NET "Dat_ADC3" LOC = "p36" ;
NET "Dat_ADC4" LOC = "p35" ;
NET "Dat_ADC5" LOC = "p45" ;
NET "Dat_ADC6" LOC = "p44" ;
NET "DS1" LOC = "p27" ;

Note que en la plataforma que dispone existen muchos pines para tareas especı́ficas y que no
debieran modificarse, salvo que se esté absolutamente seguro que es necesario y posible. Pero
por otro lado existe un número significativo de pines que pueden ser asignados libremente por el
usuario ya sea para tareas relacionadas con los moduladores PWM y/o cualquier otra actividad
tipo I/O que se requiera.

1.1.6. Creación de archivo para EPROM (.mcs)

La FPGA es un dispositivo volátil, es decir, que pierde su programación cada vez que pierde su
polarización. Es por esto que se requiere de un dispositivo no volátil que mantenga la programación
del Firmware que se desea utilizar y lo grabe en la FPGA cada vez que ésta se polariza. En particular
en el caso de las plataformas desarrolladas se utilizan memorias de tipo EPROM para almacenar el
Firmware. En el caso de la plataforma basada en la Spartan 6 es la XCF04s. Es importante señalar

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 11

Archivo
principal

Análisis de la
lógica del sistema

Optimiza la
implementación de
la lógica en la FPGA

Creación del archivo


para la EPROM

(a) (b)

Figura 1.9. (a) Selección del archivo principal; (b) Inicio del proceso de compilación.

que al polarizarse la plataforma, las EPROM tardan un par de segundos en programar a la FPGA,
por lo que durante este perı́odo de tiempo esta última puede no funcionar como estaba previsto.
Una vez terminados los archivos .sch y/o .v es necesario compilar el proyecto de manera de
generar un archivo que contenga la información necesaria para que la FPGA realice la tarea deseada,
archivo .bit. Luego es necesario crear un archivo de configuración para la EPROM (.mcs), basado
en el archivo .bit. Por lo que los pasos son:

Crear archivos fuente .sch y/o .v



Compilar para crear el archivo de configuración para la FPGA (.bit)

Crear un archivo de configuración para la PROM (.mcs) a partir del .bit

Programar la PROM

Para esto deben realizarse los siguientes pasos:

Seleccione el archivo principal del proyecto, tal como se muestra en la Fig. 1.9(a), lo que
activará las opciones de compilación en la ventana de procesos (Processes), que se muestra
en la Fig. 1.9(b).
Haga click en la viñeta Generate Programming File, el menú desplegará tres opciones, haga
doble click en Generate PROM, ACE or JTAG File, lo que iniciará el proceso de compilación,
el que consta básicamente de tres pasos:
• Sı́ntesis del sistema: Se revisa la lógica del sistema, se reducen las ecuaciones lógicas y
se obtienen las expresiones mı́nimas para implementar el proyecto.
• Implementación: Se busca la mejor manera de implementar en la FPGA especı́fica las
ecuaciones lógicas obtenidas del proceso de sı́ntesis.
• Generación del archivo de configuración: Una vez que se ha determinado que elementos
internos de la FPGA se utilizarán, se crea un archivo de configuración para ser cargado
en la FPGA o PROM.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 12

(a) (b) (c) (d)

Figura 1.10. Creación de un archivo para la PROM: (a) Primer paso; (b) Segundo paso,
elección del formato del archivo para la PROM; (c) Tercer paso, elección de la PROM; (d) Cuarto
paso, elección de nombre del archivo .mcs y directorio donde se guardará.

Dependiendo del estado en que se encuentre cada uno de estos procesos, diferentes ı́conos
aparecerán a un costado de cada proceso:

: Proceso aún no iniciado.


: Trabajando en el proceso.
: Proceso terminado con éxito.
: Proceso terminado con éxito, pero se generaron advertencias que podrı́an indicar un
funcionamiento inapropiado.
: Error en el proceso, lo que detiene la compilación. Se pueden encontrar detalles del
error en la ventana inferior.

Si el proceso finalizó con éxito (todos los procesos con el ı́cono ) se abrirá la ventana mostrada
en la Fig. 1.10(a), seleccione la opción Create PROM File nombre archivo principal.bit
con el archivo de configuración para la FPGA.

Aparecerá la ventana de la Fig. 1.10(b) donde se deben seleccionar la opcion Xilinx Flash
EPROM y presionar la flecha verde que se encuentra a la izquierda de esta ventana. Esto
habilitará el siguiente cuadro de diálogo.

Seleccione el modelo de la EPROM xcf04s y presione el botón Add Storage Device (ver
Fig. 1.4(b)(c)). Presionar la flecha verde que se encuentra a la izquierda de esta ventana. Esto
habilitará el siguiente cuadro de diálogo. mostradas.

En el casillero Output File Name escriba cualquier nombre que le parezca apropiado para
el archivo .mcs, preste atención al directorio (Output File Location) donde se guardará el
archivo (Fig. 1.10(d)).

Presione el botón de OK que se encuentra en la esquina inferior derecha.

Una nueva ventana solicitará elegir un archivo .bit para usar como base para el archivo de
configuración de la PROM. Presione OK, se abrirá una ventana de navegación, seleccione el
archivo nombre archivo principal.bit.

Una ventana preguntará si se desea agregar un archivo de configuración adicional, presione


No. Una última ventana notifica que el proceso esta terminado, presione Ok.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 13

(a) (b)

Figura 1.11. (a)Paso final para generación de archivo de configuración para la PROM;(b)
Ventana del programa Adept para cargar el programa en la PROM.

Aparecerá una ventana similar a la mostrada en la Fig. 1.11(a), haga doble click en el co-
mando ⇒Generate File.... Si todo se hizo correctamente aparecerá el mensaje PROM File
Generation Succeeded, y el archivo se habrá generado.

Para cargar el archivo .mcs en la PROM conecte el cable USB proporcionado por el profesor
a su computador y el otro extremo al conector Programador mostrado en la Fig. 1.12. Preste
especial atención en el orden de los respectivos pines.

Conecte el cable USB-JTAG, proporcionado por el profesor, al PC y a la tarjeta. Tenga


cuidado de conectar el extremo que va hacia la tarjeta de manera apropiada. Polarice la
tarjeta FPGA con una fuente de laboratorio.

Entradas
ADCs Conector para
IOs programación
Zona FPGA
DACs

Fuentes
Conversores ADCs

Conector para
programación

IOs

Figura 1.12. Tarjeta FPGA basada en Spartan 6.

Ejecute el programa Digilent→Adept3 .


3
http://store.digilentinc.com/digilent-adept-2-download-only/

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 14

Si la tarjeta se encuentra polarizada y el cable correctamente conectado, aparecerá la ventana


mostrada en la Fig. 1.11(b). Si al abrirse la ventana no aparecen los botones PROM y/o
FPGA entonces el cable no está bien conectado, hay algún problema con la polarización
o con el cable USB. Revise y presione Initialize Chain. Si nuevamente hay problemas
apague y llame al profesor.

Presione el botón Browse a un costado del botón PROM y seleccione el archivo .mcs recién
creado. Si lo ha cargado con anterioridad aparecerá en el menu desplegable entre el botón
PROM y el botón Browse.

Una vez que el nombre del archivo .mcs aparece en el menu desplegable, presione el botón
derecho sobre el botón PROM y elija la opción Program Device. En la ventana inferior se
entregará información sobre los pasos que está siguiendo el programa Adept. Una vez que
aparezca el mensaje Program Succesful el nuevo programa estará grabado en la PROM

Para cargar el programa desde la PROM a la FPGA apague y encienda la polarización de la


tarjeta FPGA

1.2. Firmware GC.4


El firmware base del que se dispone está diseñado para poder utilizar todos los periféricos
con que cuenta la tarjeta FPGA. El firmware se ha programado de manera modular, tal como se
muestra en la Fig. 1.13, donde el módulo principal es el archivo General.v. El objetivo de este tipo
de programación es que cada usuario pueda agregar, modificar y/o duplicar módulos de acuerdo
a las necesidades especı́ficas de cada aplicación. Tal como se describe en las secciones siguientes,
algunos módulos se encuentran interrelacionados, por lo que es necesario prestar atención a este
punto al momento de editar el firmware.

Figura 1.13. Diagrama de la programación modular utilizada en el Firmware GC de la FPGA.


4
Versión original por Gonzalo Carrasco, versión actual modificada por Andrés Ulloa y Pablo Lezana.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 15

A continuación se presentan las principales caracterı́sticas de los módulos antes mencionados.


Como ya se dijo, una explicación más detallada se encuentra disponible en [1].

1.2.1. Descripción de módulos.

En los siguientes puntos se muestra la funcionalidad de los diferentes módulos antes descritos, las
posibilidades que ofrecen y los registros involucrados en sus respectivas configuraciones. Finalmente
en la sección 2.2 se detallan todos los registros de configuración de los que se dispone.

1.2.1.a. Divisores de reloj.

La plataforma de la FPGA cuenta con un oscilador externo denominado OS1, conectado al pin
A10 de la FPGA. En general este oscilador se utiliza con una frecuencia de 150MHz5 . Este es el reloj
base para todos los procesos de la FPGA. Sin embargo en muchas ocasiones se requiere de relojes
más lentos o de diferente frecuencia, con el fin de adecuarse a ciertos periféricos o condiciones
externas. Es por eso que la FPGA cuenta con 4 señales de reloj internas, CLK0 a CLK3, que se
configuran en función de la señal entregada por OS1. La frecuencia de estos relojes está dada por:
fOS1
fCLKx = (1.1)
DIV CLKx

Ya que tı́picamente fOS1 = 150MHz, en general puede utilizarse:

150e6
fCLKx = (1.2)
DIV CLKx

DIV CLKx puede tomar cualquier valor entero entre 2 y 65535. Utilizar el 0 o 1 hará que el
respectivo reloj se detenga. Para números mayores a 65535, sólo los 16-bits menos significativos
serán considerados.
La principal aplicación de los relojes configurables es la de permitir ajustar la frecuencia de los
Timers, descritos en la sección 1.2.1.b, agregando un grado de libertad adicional para el ajuste de
dicha frecuencia.
Es importante tener en cuenta que si bien las señales CLKx son libremente configurables, el
CLK3 es también utilizado como reloj base para el funcionamiento de los ADC. Es por esto que se
recomienda utilizarlo a una frecuencia de hasta 32MHz (DIV CLK3 ADC=5 para OS1=150MHz), si
fCLK3 32MHz los ADC pueden entregar resultados erroneos, mientras que a medida que fCLK3 baja
de 32MHz, la precisión mejora un poco, pero el tiempo que tardan las secuencias de conversión
puede volverse relevante dependiendo de la aplicación.
La Fig. 1.14 muestra las relaciones más importantes entre los diferentes relojes del sistema y
los módulos desarrollados en la FPGA.

1.2.1.b. Timers.

El Firmware cuenta con 5 Timers (Timer0 a Timer4) de 16-bits cada uno. Estos Timers pueden
configurarse para contar de manera ascendente, descendente y ascendente-descendente (Fig. 1.15)
enter 0x0000 y el valor del registro TnC MAX, el cual es especificado por el usuario.
5
Compruebe esto en su tarjeta.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 16

Figura 1.14. Relaciones entre las señales de reloj y los módulos internos de la FPGA.

Figura 1.15. Funcionamiento del módulo Timer.

Los Timers incrementan (o decrementan) el valor de su cuenta en una unidad de acuerdo con
la frecuencia de los relojes base CLK0 a CLK3 los que se configuran como un divisor entero del reloj
principal de 150MHz.
Cada Timer puede configurarse para operar de manera absolutamente independiente de los
otros, lo que incluye modo de cuenta, valor máximo de cuenta, fuente de reloj base para la cuenta,
entre otros. Además se provee de un modo maestro-esclavos en el que uno o varios de los Timers
Timer1-Timer4 pueden ser sincronizados al Timer0, lo que permite generar señales triangulares
que operen con un desfase fijo, el que se determina para cada Timer de acuerdo al valor del registro
TnLOAD y el bit SLOPE INI del registro TnCTRL asociado el Timer.
IMPORTANTE: Para que el modo maestro-esclavos funcione adecuadamente, los bits de
configuración SEL CLK, MODE y la palabra TnC MAX de los Timers esclavos deben tener el mismo
valor que los del Timer maestro.
Tal como se muestra en las Fig. 1.15 y Fig. 2.1 los Timers se interconectan con prácticamente
todos los demás módulos de la FPGA, debido a que cumplen con dos tareas muy importantes:

Generadores de bases de tiempo para realizar tareas a tasas de muestreo constantes (como
evaluar controladores discretos). En concreto se comunican con:

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 17

• Los moduladores PWM, sincronizando la carga de los valores de comparación con dife-
rentes eventos de las triangulares.
• Los ADCs, dando la posibilidad de realizar mediciones a tasas de muestreo fijas y/o
sincronizadas con los diferentes contadores.
• El DSP, ya que en base a eventos de los Timers se pueden generar interrupciones al DSP.

Generadores de señales triangulares para modulaciones de ancho de pulso (PWM).

Cada Timer genera tres tipos de eventos:

1. Underflow: Ocurre siempre que la cuenta del Timer llegue a 0 (0x0000).


2. Perı́odo: Ocurre cuando la cuenta del Timer llega al valor máximo de la cuenta especificada
por el usuario (TnC MAX).
3. Overflow: Ocurre siempre que la cuenta del Timer llegue a 65535 (0xFFFF).

El valor de la cuenta del Timer se encuentra disponible en todo momento en el registro TnCNT
respectivo.
La configuración de los Timers puede cambiarse en cualquier momento, pero el resultado de
este cambio puede tomar algunos ciclos de reloj. Para más información sobre este punto consulte
la sección 4.3.4.2 en [1].

1.2.1.c. Moduladores PWM.

Como se señaló en la sección anterior, los Moduladores PWM se encuentran estrechamente


relacionados con Timers. De hecho cada Timer tiene asociado un Bloque de Modulación PWM que
puede o no utilizarse, lo que se controla a través del bit PWMnCTRL(0).
Un Bloque de Modulación PWM está compuesto por:

Tres moduladores de tipo Bipolar (dos niveles de voltaje en la salida) o un modulador Unipolar
(tres niveles de voltaje en la salida), seleccionado por el bit PWMnCTRL(12).
Generador de tiempo muerto, definido por PWMnCTRL(10:1).
Generación de una salida directa SPx Tn y una señal cuasi-complementaria SNx Tn. Las
señales no son exactamente complementarias debido al efecto del tiempo muerto.
Selector de polaridad de la modulación PWM (PWMnCTRL(11)). Con polaridad positiva SPx Tn=1
si TnCMPRx>TnCNT, con polaridad negativa SPx Tn=0 si TnCMPRx>TnCNT. La polaridad tam-
bién afecta al funcionamiento del tiempo muerto, con polaridad positiva se genera el tiempo
muerto tradicional, con polaridad negativa se genera un “tiempo vivo” del largo correspon-
diente.
Selector del evento de sincronización de la referencia del modulador. Esta opción se utiliza
con el fin de evitar falsas conmutaciones, o glitches, que pueden ocurrir si la referencia es
actualizada en un momento distinto a cuando la cuenta es máxima o mı́nima (ver Fig. 1.16). El
sincronizador de referencia permite actualizar el valor de la referencia en cualquier momento,
pero esta queda retenida en un buffer, quedando disponible para el comparador sólo a partir
del instante de sincronismo seleccionado, tal como muestra el diagrama de la Fig. 1.17
Señal de inhabilitación del modulador PWM (PWMTRIP).

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 18

Figura 1.16. Patrones PWM con manejo de referencia: (a) Asincrónica; (b) Sincrónica.

Figura 1.17. Esquema interno de un modulador PWM.

En el modo Bipolar cada modulador puede modular hasta tres señales de referencia TnCMPR1,
TnCMPR2 y TnCMPR3, con n= 0, . . . , 4, generando tres señales PWM y sus respectivas señales cuasi-
complementarias. Por otra parte, en el modo Unipolar sólo se utiliza una señal de referencia, la
que genera dos señales PWM con sus señales cuasi-complementarias, tal como se muestra en la
Fig. 1.18.

TnCMPR1 SP1_ Tn TnCMPR1 SP1_ Tn


Modulador Modulador
TnCOUNT SN1_ Tn TnCOUNT SN1_ Tn

TnCMPR2 SP2_ Tn TnCMPR2 SP2_ Tn


Modulador Modulador
TnCOUNT SN2_ Tn “-1” SN2_ Tn

TnCMPR3 SP3_ Tn 0x0000 SP3_ Tn


Modulador Modulador
TnCOUNT SN3_ Tn TnCOUNT SN3_ Tn
(a) (b)

Figura 1.18. Bloque PWM configurado para modulación: (a) Bipolar; (b) Unipolar.

El módulo generador de tiempo muerto es capaz de ajustar este tiempo con una precisión de

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 19

6.6ns en un rango desde los 6.6ns hasta los 6.82µs, de acuerdo con:

T M = PWMnCTRL(10:1) · 6,6[ns] (1.3)

Cada submódulo de cada modulador puede ser deshabilitado de manera individual a través de
la señal PWMTRIP(m), permitiendo un control más detallado ante, por ejemplo, valores peligrosos de
voltaje y corriente. El detalle del uso del registro PWMTRIP se detalla en la sección 2.2.2.
Finalmente las Fig. 1.19(a) y Fig. 1.19(b) muestran la distribución fı́sica por defecto de los pines
relacionados con los diferentes moduladores PWM dependiendo si se usa el firmware normal o el
adaptado para el uso de fibra óptica. Es importante señalar que esta distribución puede modificarse
fácilmente en el archivo General.v, perteneciente a los archivos fuente del Firmware de la FPGA,
para acomodarse a aplicaciones especı́ficas. En la tarjeta Spartan 6, los puertos P8 y P9 no se
encuentran preasignados.
4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
SN1 SN1 SN1 SN1 SN1 SN2 SN2 SN2 SN2 SN2 SN3 SN3 SN3 SN3 SN3
P5 2
GND
T0 T1 T2 T3 T4 T0 T1 T2 T3 T4
SP1 SP1 SP1 SP1 SP1 SP2 SP2 SP2 SP2 SP2
3.3V GND
T0 T1 T2 T3 T4
SP3 SP3 SP3 SP3 SP3
* 3.3V
48
GND 3.3V GND 3.3V
1 T0 T1 T2 T3 T4 T0 T1 T2 T3 T4 T0 T1 T2 T3 T4 47
P6 1 GND GND 5V 5V 3.3V 3.3V 5V 5V GND
24
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

(a)

4 6 8 10 12
14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
SN1 SP1 SN2 SP2
SN3 SP3
P5 2
GND
T4 T4
SP1 SN1 SP2
T4
SN2
T4T4 T4
SP3 SN3 SP1 SN1
3.3V GND
SP2 SN2 SP3 SN3 SP1 SN1 SP2 SN2
*T0 3.3V
48
GND 3.3V GND 3.3V
1 T0 T0 T0 T0 T0 T0 T1 T1 T1 T1 T1 T1 T2 T2 T2 T2 min 47
SP3 SN3 SP1 SN1 SP2 SN2 SP3 SN3
P6 1 GND GND 5V 5V 3.3V 3.3V
T2 T2 T3 T3 T3 T3 T3 T3
5V 5V GND
24
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

(b)

Figura 1.19. Distribución por defecto de los pines de los moduladores PWM: (a) Normal;
(b) Para la versión compatible con Fibra óptica. (*Pin disponible sólo en Tarjeta Spartan 6)

4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34
GND 5V
2 36
P8
GND 3.3V
5V
1 35
P9 1 GND 5V
18
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Figura 1.20. Puertos P8 y P9 de la tarjeta Spartan 6.

1.2.1.d. Módulos para el manejo de los ADC.

Una de las principales funciones de la FPGA es la de manejar los dos conversores AD de Analog
Devices AD7266 que posee la tarjeta. Las principales caracterı́sticas de estos conversores son las
siguientes:

Resultado en 12-bits.
Frecuencia de muestreo de hasta 2MSPS, es decir hasta dos millones de conversiones por
segundo.
12 entradas análogas, las que SIEMPRE son muestreadas en pares A1-B1, A2-B2, etc...

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 20

Rango de entradas análogas 0-5V.

Ya que la tarjeta cuenta con dos de estas pastillas se pueden realizar hasta 24 conversiones AD,
de las cuales 4 pueden hacerse de manera simultánea. Estas 24 conversiones pueden dividirse en
dos tipos:

1. Entradas directas: Las entradas análogas ADCn A3-ADCn B3, ADCn A4-ADCn B4, ADCn A5-ADCn B5
y ADCn A6-ADCn B6 de los integrador AD7266, se encuentran disponibles directamente en el
conector P1 de la tarjeta, por lo que cualquier voltaje que se aplique en este conector apa-
recerá automáticamente en los ADCs. Por este motivo es MUY IMPORTANTE que los
voltajes aplicados en estas entradas NUNCA supere los 5V ni caiga de 0V, de otro modo se
corre el riesgo de dañar los conversores.
2. Entradas diferenciales: Las entradas análogas ADCn A1-ADCn B1 y ADCn A2-ADCn B2 no son
accesibles directamente por el usuario, sino que se encuentran conectadas a un circuito di-
ferencial, al que se accede a través de los conectores P3 y P4. Estos circuitos diferenciales
permiten convertir voltajes de entrada en el rango ±10[V] (dependiendo de la configuración
del diferencial), los que son adaptados para ser convertidos apropiadamente por los conver-
sores.

La Fig. 1.21 muestra la distribución fı́sica de los conectores y un esquema funcional del amplificador
diferencial.

Figura 1.21. Tarjeta Spartan 3: (a) Distribución de las entradas análogas en la tarjeta;
(b) Pines de los conectores relacionados con los ADCs; Tarjeta Spartan 6: (c) Distribución de las
entradas análogas en la tarjeta; (d) Pines de los conectores relacionados con los ADCs.

Las conversiones AD se pueden configurar para realizarse en secuencias que, tal como se señaló
en la sección 1.2.1.b, pueden coordinarse con eventos relacionados con los Timers o bien comandados
directamente desde el DSP, dependiendo de la configuración de los bits ADCnCTRL(20:10), tal como
se muestra en la Fig. 1.22.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 21

Figura 1.22. Módulo para inicio de secuencias de conversión AD. Cada ADC cuenta con
uno de estos módulos.

Es importante señalar que en el caso de sincronizarse con los Timers, el conversor ADC se
sincronizará con la ocurrencia de un evento en el Timer, es decir cuando:

Se genera un evento de underflow (la cuenta del Timer llegue a 0), cuando esto ocurre
TxMIN=1.

Se genera un evento de perı́odo (la cuenta del Timer llegue al valor máximo al que se ha
configurado TnC MAX), cuando esto ocurre TxMAX=1.

No es necesario que estén habilitadas las interrupciones del Timer para que se inicie
la conversión AD basta que la cuenta del Timer pase por 0 o TnC MAX.
Finalmente recuerde que los conversores ADC0 y ADC1 son módulos completamente indepen-
dientes, por lo que pueden configurarse para trabajar a partir de eventos diferentes.
Cada conversor cuenta con un registro secuenciador de seis posiciones (ADCnCHS) que indi-
ca que canales serán convertidos y en que orden se realizarán dichas conversiones, mientras que
los bits ADCnCTRL(6:4) indican cuantas de las seis conversiones (comenzando por la definida por
ADCnCHS(2:0)) se llevarán a cabo, tal como muestra la Fig. 1.23. Los secuenciadores son absoluta-
mente independientes, por lo que pueden realizar un número diferente de conversiones y/o convertir
canales en diferente orden. Asimismo pueden o no trabajar de manera simultánea, dependiendo de
la configuración de los registros ADC0CTRL y ADC1CTRL.
Un punto especialmente sensible es el del almacenamiento del resultado de las conversiones.
Como se mencionó anteriormente, cada conversión arroja un resultado de 12-bits, y siempre las
conversiones se realizan en pares, luego el resultado total es de 24-bits correspondientes al par
nAx-nBx, n=0,1 conversor utilizado y x=1. . .6 canal convertido. Dado que el bus de datos entre el
DSP y la FPGA es justamente de 24-bits, y con el fin de disminuir el tiempo de transferencia de
datos entre los dispositivos, el resultado total de una conversión se almacena en un único registro de
24-bits llamado ADCn CONVxA xB donde los 12-bits más significativos corresponden a la conversión
del canal xA y los 12-bits menos significativos a la conversión del canal xB, tal como se muestra en
la Fig. 1.24. Es de responsabilidad del usuario separar apropiadamente en el DSP este
resultado total, de manera de obtener el(los) datos correctos.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 22

Figura 1.23. Secuenciador de conversiones AD.


23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
Conversión del canal A Conversión del canal B

Figura 1.24. Formato de los datos almacenados en los registros ADCn CONVxA xB.

Es muy importante señalar que el orden de llenado de los registros de resultado está relacionado
con el orden en el que se realizan las conversiones AD y no con el número del canal convertido, por
lo tanto:
Siempre el resultado total de la primera conversión se almacenará en el registro
ADCn CONV1A 1B, el resultado de la segunda conversión se almacenará en el registro
ADCn CONV2A 2B y ası́ sucesivamente.
Por lo tanto si se desea realizar una secuencia de tres conversiones en el conversor 0, es decir
ADC0CTRL(6:4)=(011), en el orden (ChA3, ChA1, ChB2) se obtendrá el siguiente resultado:

Registro de salida Contenido


ADC0 CONV1A 1B [ChA3:ChB3]
ADC0 CONV2A 2B [ChA1:ChB1]
ADC0 CONV3A 3B [ChA2:ChB2]

es decir, se obtendrá el resultado de 6 conversiones en total.

1.2.1.e. Módulos para el manejo de los DAC.

La tarjeta FPGA dispone de dos DAC, cuyas principales caracterı́sticas son:

Dos salidas por DAC.


Palabra digital de entrada de 12-bits.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 23

voltaje de salida entre 0 y 4.095[V], por lo que el factor de conversión es de 1 mV/bit.

A diferencia de todos los demás periféricos de la FPGA, los cuales son manejados a través del
Bus de Memoria, los DAC son manejados por comunicación serial a través del Bus McBSP0.
Al ser un bus serial, la palabra de datos enviada por el DSP es recibida bit a bit por la
FPGA. Esta palabra básicamente debe contener la información de a qué DAC va dirigido el dato
(Dato(11:0)), además de en que DAC (C=0,1) y en que canal (Ch=0,1) se desea escribir. Estos
dos últimos datos son utilizados por la FPGA para direccionar correctamente los datos hacia la
pastilla adecuada, tal como se muestra en la Fig. 1.25.

Figura 1.25. (a) Esquema del funcionamiento del módulo DAC; (b) Distribución de pines
tarjeta Spartan 3; (c) Distribución de pines tarjeta Spartan 6.

Es importante tener en cuenta que Dato(11:0) debe ser un número entero en el rango 0-4095,
ya que de otro modo se obtendrán resultados inesperados. Debido a esta restricción frecuentemente
se deberán utilizar ganancias y ajustes de offset de modo de adaptar las variables.

1.2.1.f. Módulo para la decodificación de Encoder.

La FPGA tiene programado un resolvedor de encoder, que permite contar de manera automática
la cantidad de conmutaciones, incrementando o decrementando el valor de la cuenta dependiendo
del sentido de giro del encoder. Las señales A, B y Z del encoder pueden llegar a la FPGA de dos
maneras diferentes:

Modo diferencial: El encoder envı́a las señales normales y sus valores complementarios A,
B y Z. El uso de las señales complementarias permite disminuir notablemente el efecto del
ruido en las señales desde el encoder, pero se requiere del doble de señales. Para utilizar
este modo las resistencias Rz0 a Rz5 deben encontrarse soldadas en la placa de la
FPGA, con resistencias de 0Ω.
Modo directo: Sólo se utilizan las señales normales provenientes del encoder. Esto aumenta el
ruido en las señales, pero la construcción del cable es más simple. Para utilizar este modo
las resistencias Rz6 a Rz11 deben encontrarse soldadas en la placa de la FPGA,
con resistencias de 0Ω.

La Fig. 1.26 muestra alguna de las posibilidades del módulo de decodificación de encoder, entre
estas destacan:

Multiplicador de pulsos, que permite aumentar la resolución del encoder en cuatro veces su
número de pulsos nominales.
Posibilidad de entregar la cuenta en valor absoluto (encoder absoluto), al utilizar la señal de
cero, Z, para reiniciar el contador cada vez que se da una vuelta completa.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 24

Figura 1.26. Diagrama con alguna de las posibilidades del módulo de decodificación de Encoder.

El valor de la cuenta puede almacenarse en un registro especial cada vez que alguno de los
Timers llegue a su valor máximo y/o su valor mı́nimo. De esta forma se garantiza que las
lecturas de la cuenta del encoder se realice de manera periódica.

Generación de un flag, o aviso, cuando:

• la cuenta llega a cero en algún instante entre dos muestreos consecutivos.


• ocurrió un pulso de la señal Z entre dos muestreos consecutivos.
• ocurrió una inversión de sentido de giro entre dos muestreos consecutivos.

El registro que almacena la cuenta es de 16-bits, por lo que el valor máximo de la cuenta es de
65.535, una vez alcanzado este valor la cuenta vuelve automáticamente a cero.

1.2.1.g. Interrupciones hacia el DSP.

Los conectores de interfase entre la tarjeta de la FPGA y del DSP proporcionan cuatro pines
que son capaces de interrumpir al DSP. De estos cuatro contactos, tres de ellos se encuentran
conectados a la FPGA, de acuerdo a la Tabla 1.1.
Tabla 1.1
Relación entre la FPGA y las Interrupciones del DSP.

Interrupción del DSP Pin FPGA


Ext Int4 T4
Ext Int5 R5

Cualquier evento interno de la FPGA puede ser enviado a alguno de estos pines editando el
archivo .ucf, generando asi un evento de interrupción, que de estar bien configurado dentro del
DSP generará una interrupción de la CPU de éste.
En el firmware base de la FPGA se encuentran programadas dos tipos de interrupciones:

Ext Int4: Esta interrupción puede habilitarse a partir de los eventos TxMAX, TxMIN y/o TxMIN
de cualquiera de los cinco Timers o el fin de secuencia de conversión de los ADC0 y/o ADC1,
tal como se muestra en la Fig. 1.27.

Ext Int5: A diferencia de la interrupción anterior, en este caso el evento que gatilla la inte-
rrupción proviene desde una fuente externa a la FPGA, especı́ficamente de una señal digital
que se ingresa por el pin P6 7. Esta señal puede utilizarse, por ejemplo, como una señal de
emergencia externa que ejecute un código especial cuando se detecte algún error en el sistema.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 1. Tarjeta basada en la FPGA. 25

T0_0xFFFF
T0CTRL(2)
T0CTRL(3) [T0CTRL(7)]
E_INT
T0MAX
T0CTRL(2)

T0MIN
T0CTRL(3)

T1_0xFFFF
T1CTRL(2) INT_CTRL
T1CTRL(3) [T1CTRL(7)]
E_INT
T1MAX
[INT_CTRL(2)]
T1CTRL(2)
INT_EXT EXT_INT5
T1MIN Pin P6_7
T1CTRL(3)

T2_0xFFFF
T2CTRL(2)
T2CTRL(3) [T2CTRL(7)]
E_INT
T2MAX
T2CTRL(2)
INT_TIMERS
T2MIN
T2CTRL(3)
[INT_CTRL(0)]

T3_0xFFFF
T3CTRL(2)
T3CTRL(3)
[T3CTRL(7)]
E_INT
T3MAX
T3CTRL(2)
EXT_INT4
T3MIN
T3CTRL(3)

T4_0xFFFF
T4CTRL(2)
T4CTRL(3)
[T4CTRL(7)]
E_INT
T4MAX
T4CTRL(2)

T4MIN [ADC0CTRL(7)] [INT_CTRL(1)]


T4CTRL(3) E_INT INT_ADC
FIN_SEC_ADC0
FIN_SEC_ADC1
E_INT
[ADC1CTRL(7)]

Figura 1.27. Dependencias de la generación de interrupciones en Ext Int4 de acuerdo al


firmware base de la FPGA.

La Fig. 1.27 muestra un diagrama que relaciona los diferentes eventos de interrupción con
sus habilitadores y señales de interrupción. Note que en muchos casos la señal de habilitación se
denomina E Int, sin embargo este nombre hace referencia a bits de diferentes registros. Para que
una señal de interrupción efectivamente llegue al DSP deben estar habilitadas tanto la señal de
interrupción como el selector de evento del módulo en cuestión.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2

Uso de la plataforma DSP+FPGA.

Los diferentes módulos se relacionan de manera diferente con el DSP, tal como se muestra en
la Fig. 2.1, dependiendo de las caracterı́sticas de los periféricos que manejan, ası́ por ejemplo, los
ADCs reciben señales de control desde el DSP y a cambio le envı́an grupos de bits con los resultados
de las conversiones; de manera diferente los DACs reciben señales de control y bits de datos, sin
devolver nada al DSP.

DSP

DAC 2

ADC 1 ADC 2
DAC 1
Bits de control

Gen. de
Reloj Timers Buses de datos

Dec.
Encoder
Mod. Mod. Mod. Mod. Mod.
PWM PWM PWM PWM PWM

FPGA

Figura 2.1. Relaciones entre los módulos de la FPGA y el DSP.

2.1. Configuración de la FPGA desde el DSP


Todos los registros de la FPGA se configuran a través de palabras binarias y bits especı́ficos.
Conocerlos todos de memoria es bastante complejo y de utilidad dudosa. Es por esto que para
simplificar la configuración desde el DSP se ha desarrollado una serie de máscaras y definiciones

26
Capı́tulo 2. Uso de la plataforma DSP+FPGA. 27

Ejemplo 2.1 (Definición de direcciones en el archivo spartan3 v1 3.h para uso de pe-
riféricos definidos en la FPGA.).

7 #define DIV CLK0 ∗ ( unsigned int ∗ ) 0 xA0000000 // D i r e c c i ó n


8 #define DIV CLK1 ∗ ( unsigned int ∗ ) 0 xA0000004 // D i r e c c i ó n
9 #define DIV CLK2 ∗ ( unsigned int ∗ ) 0 xA0000008 // D i r e c c i ó n
10 #define DIV CLK3 ∗ ( unsigned int ∗ ) 0 xA000000C // D i r e c c i ó n
11
12 // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
13 // R e g i s t r o s de Timer ’ s
14
15 #define T0CTRL ∗ ( unsigned int ∗ ) 0 xA0000020 // D i r e c c i ó n
16 #define T0LOAD ∗ ( unsigned int ∗ ) 0 xA0000024 // D i r e c c i ó n
17 #define T0C MAX ∗ ( unsigned int ∗ ) 0 xA0000028 // D i r e c c i ó n
18 #define T0CMPR1 ∗ ( unsigned int ∗ ) 0 xA000002C // D i r e c c i ó n
19 #define T0CMPR2 ∗ ( unsigned int ∗ ) 0 xA0000030 // D i r e c c i ó n
20 #define T0CMPR3 ∗ ( unsigned int ∗ ) 0 xA0000034 // D i r e c c i ó n

Ejemplo 2.2 (Definición de máscaras en el archivo spartan3 v1 3.h para uso de periféri-
cos definidos en la FPGA.).

107 #define SLOPE INI 0 x001000 // Máscara


108 #define SINC T4 0 x000800 // Máscara
109 #define SINC T3 0 x000400 // Máscara
110 #define SINC T2 0 x000200 // Máscara
111 #define SINC T1 0 x000100 // Máscara
112 #define E INT 0 x000080 // Máscara
113 #define SEL CLK 0 0 x000000 // Máscara
114 #define SEL CLK 1 0 x000010 // Máscara
115 #define SEL CLK 2 0 x000020 // Máscara
116 #define SEL CLK 3 0 x000030 // Máscara
117 #define SEL INT UND 0 x000004 // Máscara
118 #define SEL INT PER 0 x000008 // Máscara
119 #define MODE STOP 0 x000000 // Máscara
120 #define MODE UP 0 x000001 // Máscara
121 #define MODE DOWN 0 x000002 // Máscara
122 #define MODE UP DOWN 0 x000003 // Máscara

que simplifica bastante el trabajo. Para esto hay que tener siempre en cuenta que dentro de la
FPGA se han definido una serie de direcciones que vistas desde el DSP se encuentran a partir del
0xA0000000 en pasos de 4 direcciones.
Las primeras lı́neas del archivo spartan3 v1 3.h asignan nombres bastante descriptivos a las
direcciones de memoria definidas en la FPGA, tal como muestra el Ej. 2.1. Mientras que el Ej. 2.2,
muestra la definición de las máscaras que permiten realizar la configuración de los periféricos de
manera mucho mpas natural.
De esta forma, para configurar al Timer 0 como un contador que utiliza como base al reloj 1
y que cuenta en modo up-down, generando una interrupción cada vez que llega al valor mı́nimo,
basta con ingresar la siguiente lı́nea en el programa en C:
T0CTRL = SEL_CLK1 + MODE_UP_DOWN + SEL_INT_UND + E_INT;

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 28

2.2. Detalle de los registros de configuración.


En esta sección se detallan los registros implementados en el Firmware de la FPGA. Para
facilitar la programación en C el nombre de los registros y bits de control se han definido con el
mismo nombre en el archivo spartan3 v 3.h.
IMPORTANTE: La descripción de registros realizada a continuación es válida exclusivamente
para la versión 1.3 del software de la tarjeta FPGA (archivo FPGAv 1 3.mcs). Confirme la correcta
versión del firmware antes de realizar cualquier prueba.

2.2.1. Timers

Tabla 2.1
Registros de configuración de módulo de Timers
Registro Nombre Corto (R/W) Dirección
Divisor de Reloj 0 DIV CLK0 W 0xA0000000
Divisor de Reloj 1 DIV CLK1 W 0xA0000004
Divisor de Reloj 2 DIV CLK2 W 0xA0000008
Divisor de Reloj 3 DIV CLK3 ADC W 0xA000000C
Control de Timer0 T0CTRL W 0xA0000020
Cuenta máxima del Timer0 T0C MAX W 0xA0000028
Cuenta del Timer0 T0CNT R 0xA0000038
Control de Timer1 T1CTRL W 0xA0000040
Valor de precarga del Timer1 T1LOAD W 0xA0000044
Cuenta máxima del Timer1 T1C MAX W 0xA0000048
Cuenta del Timer1 T1CNT R 0xA0000058
Control de Timer2 T2CTRL W 0xA0000060
Valor de precarga del Timer2 T2LOAD W 0xA0000064
Cuenta máxima del Timer2 T2C MAX W 0xA0000068
Cuenta del Timer2 T2CNT R 0xA0000078
Control de Timer3 T3CTRL W 0xA0000080
Valor de precarga del Timer3 T3LOAD W 0xA0000084
Cuenta máxima del Timer3 T3C MAX W 0xA0000086
Cuenta del Timer3 T3CNT R 0xA0000098
Control de Timer4 T4CTRL W 0xA00000A0
Valor de precarga del Timer4 T4LOAD W 0xA00000A4
Cuenta máxima del Timer4 T4C MAX W 0xA00000A8
Cuenta del Timer4 T4CNT R 0xA00000B8

DIV CLKx, (W) Divisor de Reloj (x = 0, 1, 2, 3 ADC)6


23 22 21 20 19 18 17 16 15 14 13 12
DIV_CLKx

11 10 9 8 7 6 5 4 3 2 1 0
DIV_CLKx

DIV CLKx Bits 15-0 Valor del divisor para el reloj base CLKx.

6
El divisor de reloj DIV CLK3 ADC es utilizado para el funcionamiento de los conversores AD, por lo que debe
ser inicializado con un valor mayor a 5 si el reloj externo de la FPGA es de 150MHz. Mientras mayor sea este valor
más tardarán las conversiones AD

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 29

T0CTRL, (W) Control de Timer0

No usados Bits 23-12 No usados


SINC T4 Bit 11 Sincronización del Timer4 con Timer0
1 Timer4 sincronizado, con reloj fuente y modo de Timer0
0 Timer4 independiente, con reloj fuente y modo propios
SINC T3 Bit 10 Sincronización del Timer3 con Timer0
1 Timer3 sincronizado, con reloj fuente y modo de Timer0
0 Timer3 independiente, con reloj fuente y modo propios
SINC T2 Bit 9 Sincronización del Timer2 con Timer0
1 Timer2 sincronizado, con reloj fuente y modo de Timer0
0 Timer2 independiente, con reloj fuente y modo propios
SINC T1 Bit 8 Sincronización del Timer1 con Timer0
1 Timer1 sincronizado, con reloj fuente y modo de Timer0
0 Timer1 independiente, con reloj fuente y modo propios
E INT Bit 7 Habilitación local de interrupción
1 Interrupción habilitada
0 Interrupción enmascarada
No usado Bit 6 No usado
SEL CLK Bits 5-4 Selección del reloj fuente
00 CLK0
01 CLK1
10 CLK2
11 CLK3
SEL INT PER Bit 3 Selección del evento de interrupción por Periodo
0 Evento para interrupción por Periodo desactivado
1 Evento para interrupción por Periodo activado, paso por C MAX
SEL INT UND Bit 2 Selección del evento de interrupción por Underflow
0 Evento para interrupción por Underflow desactivado
1 Evento para interrupción por Underflow activado, paso por 0x0000
MODE Bits 1-0 Selección del modo de operación
00 Stop
01 UP
10 DOWN
11 UP/DOWN

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 30

TnCTRL, (W) Control de Timern (n=1,2,3,4)

No usados Bits 23-13 No usados


SLOPE INI Bit 12 Pendiente (sentido de cuenta) inicial frente a una precarga
1 Pendiente positiva, comienza cuenta ascendente
0 Pendiente negativa, comienza cuenta descendente
No usados Bits 11-8 No usados
E INT Bit 7 Habilitación local de interrupción
1 Interrupción habilitada
0 Interrupción enmascarada
No usado Bit 6 No usado
SEL CLK Bits 5-4 Selección del reloj fuente
00 CLK0
01 CLK1
10 CLK2
11 CLK3
SEL INT PER Bit 3 Selección del evento de interrupción por Periodo
0 Evento para interrupción por Periodo desactivado
1 Evento para interrupción por Periodo activado, paso por C MAX
SEL INT UND Bit 2 Selección del evento de interrupción por Underflow
0 Evento para interrupción por Underflow desactivado
1 Evento para interrupción por Underflow activado, paso por 0x0000
MODE Bits 1-0 Selección del modo de operación
00 Stop
01 UP
10 DOWN
11 UP/DOWN
TnLOAD, (W) Valor de precarga del Timern (n=1,2,3,4)
23 22 21 20 19 18 17 16 15 14 13 12
V_LOAD

11 10 9 8 7 6 5 4 3 2 1 0
V_LOAD

V LOAD Bits 15-0 Valor de precarga.


TnC MAX, (W) Cuenta máxima del Timern (n=0,1,2,3,4)
23 22 21 20 19 18 17 16 15 14 13 12
C_MAX

11 10 9 8 7 6 5 4 3 2 1 0
C_MAX

C MAX Bits 15-0 Valor de la cuenta máxima.


TnCNT, (R) Cuenta del Timern (n=0,1,2,3,4)

TnCNT Bits 15-0 Valor de la cuenta en el Timer.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 31

2.2.2. Moduladores PWM

Tabla 2.2
Registros de configuración del módulo PWM
Registro Nombre Corto (R/W) Dirección
Control del Modulador 0 PWM0CTRL W 0xA0000140
Valor de referencia 1 para PWM0 T0CMPR1 W 0xA000002C
Valor de referencia 2 para PWM0 T0CMPR2 W 0xA0000030
Valor de referencia 3 para PWM0 T0CMPR3 W 0xA0000034
Control del Modulador 1 PWM1CTRL W 0xA0000144
Valor de referencia 1 para PWM1 T1CMPR1 W 0xA000004C
Valor de referencia 2 para PWM1 T1CMPR2 W 0xA0000050
Valor de referencia 3 para PWM1 T1CMPR3 W 0xA0000054
Control del Modulador 2 PWM2CTRL W 0xA0000148
Valor de referencia 1 para PWM2 T2CMPR1 W 0xA000006C
Valor de referencia 2 para PWM2 T2CMPR2 W 0xA0000070
Valor de referencia 3 para PWM2 T2CMPR3 W 0xA0000074
Control del Modulador 3 PWM3CTRL W 0xA000014C
Valor de referencia 1 para PWM3 T3CMPR1 W 0xA000008C
Valor de referencia 2 para PWM3 T3CMPR2 W 0xA0000090
Valor de referencia 3 para PWM3 T3CMPR3 W 0xA0000094
Control del Modulador 4 PWM4CTRL W 0xA0000150
Valor de referencia 1 para PWM4 T4CMPR1 W 0xA00000AC
Valor de referencia 2 para PWM4 T4CMPR2 W 0xA00000B0
Valor de referencia 3 para PWM4 T4CMPR3 W 0xA00000B4
Inhibidores de patrón PWM PWMTRIP W 0xA0000154

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 32

PWMnCTRL, (W) Control de modulador n (n = 0, 1, 2, 3, 4)

No usados Bits 23-15 No usados


LOAD MAX Bit 14 Carga de referencia en máximo
0 carga en paso por máximo
1 no carga en paso por máximo
LOAD MIN Bit 13 Carga de referencia en mı́nimo
0 carga en paso por mı́nimo
1 no carga en paso por mı́nimo
MOD UNI Bit 12 Modo de la modulación
0 modulación simple para tres referencias
1 modulación unipolar para una referencia
INV Bit 11 Lógica de control
0 lógica positiva, nivel de salida activo 1
1 lógica negativa, nivel de salida activo 0
DT Bits 10-1 Tiempo muerto, en pasos de 6.667[ns]
EN Bit 0 Habilitación del modulador
0 Inhabilitado, salidas en nivel inactivo
1 Habilitado, salidas conmutan según modulación
TnCMPRx, (W) Referencia x de comparación con la portadora del Timern (x=1,2,3 n=0,1,2,3,4)

23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0
REFx

No usados Bits 23-16 No usados


REFx Bits 15-0 Referencia para los moduladores

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 33

PWMTRIP, (W) Señales para la inhibición de los patrones PWM

TRIP 24 Bit 18 TRIP 24 = 1, Deshabilita el modulador 2 del Timer 4


TRIP 14 Bit 17 TRIP 14 = 1, Deshabilita el modulador 1 del Timer 4
TRIP 04 Bit 16 TRIP 04 = 1, Deshabilita el modulador 0 del Timer 4
No usado Bit 15 No usado
TRIP 23 Bit 14 TRIP 23 = 1, Deshabilita el modulador 2 del Timer 3
TRIP 13 Bit 13 TRIP 13 = 1, Deshabilita el modulador 1 del Timer 3
TRIP 03 Bit 12 TRIP 03 = 1, Deshabilita el modulador 0 del Timer 3
No usado Bit 11 No usado
TRIP 22 Bit 10 TRIP 22 = 1, Deshabilita el modulador 2 del Timer 2
TRIP 12 Bit 9 TRIP 12 = 1, Deshabilita el modulador 1 del Timer 2
TRIP 02 Bit 8 TRIP 02 = 1, Deshabilita el modulador 0 del Timer 2
No usado Bit 7 No usado
TRIP 21 Bit 6 TRIP 21 = 1, Deshabilita el modulador 2 del Timer 1
TRIP 11 Bit 5 TRIP 11 = 1, Deshabilita el modulador 1 del Timer 1
TRIP 01 Bit 4 TRIP 01 = 1, Deshabilita el modulador 0 del Timer 1
No usado Bit 3 No usado
TRIP 20 Bit 2 TRIP 20 = 1, Deshabilita el modulador 2 del Timer 0
TRIP 10 Bit 1 TRIP 10 = 1, Deshabilita el modulador 1 del Timer 0
TRIP 00 Bit 0 TRIP 00 = 1, Deshabilita el modulador 0 del Timer 0

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 34

2.2.3. ADCs

Tabla 2.3
Registros de configuración del módulo convertidores ADC
Registro Nombre Corto (R/W) Dirección
Control del ADC0 ADC0CTRL W 0xA00000C0
Selección de canales ADC0CHS W 0xA00000C4
Inicio manual del ADC0 ADC0START W 0xA00000C8
Resultado 1º conv. del ADC0 ADC0CONV1A 1B R 0xA00000D0
Resultado 2º conv. del ADC0 ADC0CONV2A 2B R 0xA00000D4
Resultado 3º conv. del ADC0 ADC0CONV3A 3B R 0xA00000D8
Resultado 4º conv. del ADC0 ADC0CONV4A 4B R 0xA00000DC
Resultado 5º conv. del ADC0 ADC0CONV5A 5B R 0xA00000E0
Resultado 6º conv. del ADC0 ADC0CONV6A 6B R 0xA00000E4
Control del ADC1 ADC1CTRL W 0xA0000100
Selección de canales ADC1CHS W 0xA0000104
Inicio manual del ADC1 ADC1START W 0xA0000108
Resultado 1º conv. del ADC1 ADC1CONV1A 1B R 0xA0000110
Resultado 2º conv. del ADC1 ADC1CONV2A 2B R 0xA0000114
Resultado 3º conv. del ADC1 ADC1CONV3A 3B R 0xA0000118
Resultado 4º conv. del ADC1 ADC1CONV4A 4B R 0xA000011C
Resultado 5º conv. del ADC1 ADC1CONV5A 5B R 0xA0000120
Resultado 6º conv. del ADC1 ADC1CONV6A 6B R 0xA0000124

ADCnCTRL, (W) Control del ADC n (n = 0, 1)


23 22 21 20 19 18 17 16 15 14 13 12
ADC_ST_DSP T4MAX T4MIN T3MAX T3MIN T2MAX T2MIN T1MAX T1MIN

11 10 9 8 7 6 5 4 3 2 1 0
T0MAX T0MIN E_INT NUM_CONV

No usados Bits 23-21 No usados


ADC ST DSP Bit 20 1 Inicio de la conversión por orden del DSP
T4MAX Bit 19 1 T4 CNT=T0C MAX inicia una conversión AD
T4MIN Bit 18 1 T4 CNT=0x0000 inicia una conversión AD
T3MAX Bit 17 1 T3 CNT=T0C MAX inicia una conversión AD
T3MIN Bit 16 1 T3 CNT=0x0000 inicia una conversión AD
T2MAX Bit 15 1 T2 CNT=T0C MAX inicia una conversión AD
T2MIN Bit 14 1 T2 CNT=0x0000 inicia una conversión AD
T1MAX Bit 13 1 T1 CNT=T0C MAX inicia una conversión AD
T1MIN Bit 12 1 T1 CNT=0x0000 inicia una conversión AD
T0MAX Bit 11 1 T0 CNT=T0C MAX inicia una conversión AD
T0MIN Bit 10 1 T0 CNT=0x0000 inicia una conversión AD
No usados Bits 8-9 No usados
E INT Bit 7 Habilitación de interrupción por fin de conversión
0 interrupción inhabilitada
1 interrupción habilitada
NUM CONV Bits 6-4 Número de pares de conversiones por ráfaga
0 módulo ADC inhabilitado
1-6 conversiones por ráfaga
No usados Bits 3-0 No usados

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 35

ADCnCHS, (W) Selección de canales para el convertidor n (n = 0, 1)


23 22 21 20 19 18 17 16 15 14 13 12
AN6 AN5

11 10 9 8 7 6 5 4 3 2 1 0
AN4 AN3 AN2 AN1

No usados Bits 23-18 No usados


AN6 Bits 17-15 Selección del 6º par de canales a convertir
000 canales 1A-1B
001 canales 2A-2B
010 canales 3A-3B
011 canales 4A-4B
100 canales 5A-5B
101 canales 6A-6B
AN5 Bits 14-12 Selección del 5º par de canales a convertir
Ver AN6
AN4 Bits 11-9 Selección del 4º par de canales a convertir
Ver AN6
AN3 Bits 8-6 Selección del 3º par de canales a convertir
Ver AN6
AN2 Bits 5-3 Selección del 2º par de canales a convertir
Ver AN6
AN1 Bits 2-0 Selección del 1º par de canales a convertir
Ver AN6

ADCnSTART, (W) Inicio manual del ADC n (n = 0, 1)(desde DSP)


23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0

No usados Bits 23-0 No usados

ADCnCONVxA xB, (R) Resultado xº (x= 1, . . . 6) de la conversión en el ADC n (n = 0, 1)


23 22 21 20 19 18 17 16 15 14 13 12
xª CONVERSIóN A

11 10 9 8 7 6 5 4 3 2 1 0
xª CONVERSIóN B

Conversión A Bits 23-12 Resultado de la conversión A del par de conversiones


Conversión B Bits 11-0 Resultado de la conversión B del par de conversiones

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 36

2.2.4. Encoder

Tabla 2.4
Registros de configuración y lectura del decodificador de encoder
Registro Nombre Corto (R/W) Dirección
Registro de control ENCCTRL W 0xA0000180
Cuenta y flags ENCCOUNTER R 0xA0000184

ENCCTRL, (W) Registro de control del Encoder


23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0
READ_MAX READ_MIN SINC_SEL SINC_READ RESET_Z

No usados Bits 23-7 No usados


READ MAX Bit 6 Sincronización de lectura con cuenta máxima del Timer seleccionado
(Sólo válido cuando SINC READ = 1)
0 no sincroniza por cuenta máxima
1 lectura sincronizada por cuenta máxima
READ MIN Bit 5 Sincronización de lectura con cuenta mı́nima del Timer seleccionado
(Sólo válido cuando SINC READ = 1)
0 no sincroniza por cuenta mı́nima
1 lectura sincronizada por cuenta mı́nima
SINC SEL Bits 4-2 Selección de Timer fuente de sincronización
(Sólo válido cuando SINC READ = 1)
000 Timer0 como fuente se sincronización
001 Timer1 como fuente se sincronización
010 Timer2 como fuente se sincronización
011 Timer3 como fuente se sincronización
100 Timer4 como fuente se sincronización
SINC READ Bit 1 Sincronización de lectura de registro ENCCOUNTER
0 lectura asincrónica
1 lectura sincrónica
RESET Z Bit 0 Reset de cuenta con pulso en señal Z
0 ENCCOUNTER cuenta continuamente
1 ENCCOUNTER resetea cuenta con el pulso en Z

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 37

ENCCOUNTER, (R) Valor de la cuenta y flags


23 22 21 20 19 18 17 16 15 14 13 12
FLAG_Z FLAG_ZERO FLAG_INV

11 10 9 8 7 6 5 4 3 2 1 0
CUENTA

FLAG Z Bit 23 Flag de pulso Z


0 no ha ocurrido un pulso en Z desde la lectura previa
1 ha ocurrido al menos un pulso en Z desde la lectura previa
FLAG ZERO Bit 22 Flag de cuenta cero
0 la cuenta del decodificador no ha pasado por cero desde la
lectura previa
1 la cuenta del decodificador pasó al menos una vez por cero
desde la lectura previa
FLAG INV bit 21 Flag de inversión de giro
0 no ha ocurrido una inversión en el sentido de rotación desde
la lectura previa
1 ocurrió al menos una inversión en el sentido de rotación desde
la lectura previa
No usados Bits 20-18 No usados
CUENTA Bits 17-0 Cuenta del decodificador de encoder

2.2.5. Manejo de Interrupciones

Tabla 2.5
Registro de configuración de interrupciones
Registro Nombre Corto (R/W) Dirección
Registro de control INT CTRL W 0xA0000160

INT CTRL, (W) Registro de control de Interrupciones


23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0
INT_EXT INT_ADC INT_TIMERS

INT EXT Bit 2 Habilita las interrupciones al DSP desde un pin externo de la FPGA
INT ADC Bit 1 Habilita las interrupciones al DSP desde los ADCs
INT TIMERS Bit 0 Habilita las interrupciones al DSP desde los Timers

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 38

2.2.6. Otros

Tabla 2.6
Registro de configuración de interrupciones
Registro Nombre Corto (R/W) Dirección
Inicio secuencia de prueba TEST ENEABLE W 0xA00001C0
Manejo de LEDs de la tarjeta FPGA LED DSP SET W 0xA0000200
Estado del DIP-Switch de la tarjeta FPGA DIP DSP READ R 0xA0000204

TEST ENEABLE, (W) Modo de prueba de la tarjeta

TEST Bit 0 1 Inicia una secuencia de prueba que hace que la mayorı́a de los
IOs y LEDs comiencen una secuencia de encendido y apagado

LED DSP SET, (W) Encendido/Apagado de los LEDs de la tarjeta de la FPGA

LED SET 4 Bit 3 1 Enciende el LED4 de la placa de la FPGA


0 Apaga el LED4 de la placa de la FPGA
LED SET 3 Bit 2 1 Enciende el LED3 de la placa de la FPGA
0 Apaga el LED3 de la placa de la FPGA
LED SET 2 Bit 1 1 Enciende el LED2 de la placa de la FPGA
0 Apaga el LED2 de la placa de la FPGA
LED SET 1 Bit 0 1 Enciende el LED1 de la placa de la FPGA
0 Apaga el LED1 de la placa de la FPGA

DIP DSP READ, (R) Posición del DIP-Switch de la tarjeta de la FPGA

DS 4 Bit 3 1 DIP-Switch en posición “1”


0 DIP-Switch en posición “0”
DS 3 Bit 2 1 DIP-Switch en posición “1”
0 DIP-Switch en posición “0”
DS 2 Bit 1 1 DIP-Switch en posición “1”
0 DIP-Switch en posición “0”
DS 1 Bit 0 1 DIP-Switch en posición “1”
0 DIP-Switch en posición “0”

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 39

2.2.7. Registros especiales disponibles sólo en algunas versiones de Firmware

Tabla 2.7
Registro de configuración de interrupciones
Registro Nombre Corto (R/W) Dirección
Configuración de registro de eventos de Timers CONFIG T REG W 0xA0000014
Registro de último evento de Timer T REG R 0xA0000018

CONFIG T REG, (W) Registro de configuración para registro de último evento de los Timer
que generó un evento de interrupción
23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0
T4_MAX T4_MIN T3_MAX T3_MIN T2_MAX T2_MIN T1_MAX T1_MIN T0_MAX T0_MIN

T4 MAX Bit 9 1 Permite que se registre cuando el Timer 0 llega a “T4 MAX”.
0 No registra cuando el Timer 4 llega a “T4 MAX”.
T4 MIN Bit 8 1 Permite que se registre cuando el Timer 0 llega a “0”.
0 No registra cuando el Timer 4 llega a “0”.
T3 MAX Bit 7 1 Permite que se registre cuando el Timer 0 llega a “T3 MAX”.
0 No registra cuando el Timer 3 llega a “T3 MAX”.
T3 MIN Bit 6 1 Permite que se registre cuando el Timer 0 llega a “0”.
0 No registra cuando el Timer 3 llega a “0”.
T2 MAX Bit 5 1 Permite que se registre cuando el Timer 0 llega a “T2 MAX”.
0 No registra cuando el Timer 2 llega a “T2 MAX”.
T2 MIN Bit 4 1 Permite que se registre cuando el Timer 0 llega a “0”.
0 No registra cuando el Timer 2 llega a “0”.
T1 MAX Bit 3 1 Permite que se registre cuando el Timer 0 llega a “T1 MAX”.
0 No registra cuando el Timer 1 llega a “T1 MAX”.
T1 MIN Bit 2 1 Permite que se registre cuando el Timer 0 llega a “0”.
0 No registra cuando el Timer 1 llega a “0”.
T0 MAX Bit 1 1 Permite que se registre cuando el Timer 0 llega a “T0 MAX”.
0 No registra cuando el Timer 0 llega a “T0 MAX”.
T0 MIN Bit 0 1 Permite que se registre cuando el Timer 0 llega a “0”.
0 No registra cuando el Timer 0 llega a “0”.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Capı́tulo 2. Uso de la plataforma DSP+FPGA. 40

T REG, (R) Registro de último evento de los Timer que generó un evento de interrupción
23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0
T4_MAX T4_MIN T3_MAX T3_MIN T2_MAX T2_MIN T1_MAX T1_MIN T0_MAX T0_MIN

T4 MAX Bit 9 1 Timer 4 = T4 MAX ha sido el último evento ocurrido.


0 Timer 4 = T4 MAX no ha sido el último evento ocurrido.
T4 MIN Bit 8 1 Timer 4 = 0 ha sido el último evento ocurrido.
0 Timer 4 = 0 no ha sido el último evento ocurrido.
T3 MAX Bit 7 1 Timer 3 = T3 MAX ha sido el último evento ocurrido.
0 Timer 3 = T3 MAX no ha sido el último evento ocurrido.
T3 MIN Bit 6 1 Timer 3 = 0 ha sido el último evento ocurrido.
0 Timer 3 = 0 no ha sido el último evento ocurrido.
T2 MAX Bit 5 1 Timer 2 = T2 MAX ha sido el último evento ocurrido.
0 Timer 2 = T2 MAX no ha sido el último evento ocurrido.
T2 MIN Bit 4 1 Timer 2 = 0 ha sido el último evento ocurrido.
0 Timer 2 = 0 no ha sido el último evento ocurrido.
T1 MAX Bit 3 1 Timer 1 = T1 MAX ha sido el último evento ocurrido.
0 Timer 1 = T1 MAX no ha sido el último evento ocurrido.
T1 MIN Bit 2 1 Timer 1 = 0 ha sido el último evento ocurrido.
0 Timer 1 = 0 no ha sido el último evento ocurrido.
T0 MAX Bit 1 1 Timer 0 = T0 MAX ha sido el último evento ocurrido.
0 Timer 0 = T0 MAX no ha sido el último evento ocurrido.
T0 MIN Bit 0 1 Timer 0 = 0 ha sido el último evento ocurrido.
0 Timer 0 = 0 no ha sido el último evento ocurrido.

UTFSM-Dpto. Ingenierı́a Eléctrica, PLI


Bibliografı́a

[1] Gonzalo Carrasco, “Diseño e Implementación de Módulos de Firmware para uso de FPGA en
Aplicaciones de Potencia,” Memoria para optar el tı́tulo de Ingeniero Civil Electrónico, Enero
2008.

[2] http://www.asic-world.com/verilog/index.html, “Welcome to Verilog Page,” .

41

También podría gustarte