Está en la página 1de 44

Introduccin a los dispositivos FPGAs. Anlisis y ejemplos de diseo.

Bozich, Eduardo Carlos Director: Ing. Sergio Noriega


Modificada por Ing. F. Videla

Objetivo
Realizacin de un kit de implementacin en FPGA, para la ctedra de Introduccin a los

sistemas lgicos y digitales mediante la


plaqueta experimental UPx10K10, con el dispositivo FLEX10K10

Contenido
Tipos de lgica programada
Estudio de implementacin en AHDL: Medidor de frecuencia y perodo Adquisisdor autnomo de datos. Implementacin en FLEX10K10

PLD
PLD (Programmable Logic Device) caractersticas modificadas y almacenadas mediante programacin Caractersticas de fabricacin: Funcionabilidad completa Celdas de funciones universales PLD: SPLD CPLD FPGA

SPLD
SPLD (Simple Programmable Logic Device) Matrices de conexiones matriz de compuertas AND (interseccin). matriz de compuertas OR (unin). PLDs mas pequeos y de menor costo SPLD:

PLA PAL GAL

CPLD
CPLD (Complex Programmable Logic Device) Bloques lgicos similares a un SPLD

Matriz de interconexin programable


Tecnologas de programacin idem SPLD

FPGA
FPGA (Field Programmable Gate Array)
Mayor transferencia de datos y registros

Tecnologa de programacin: antifusible, SRAM y flash

FPGA: FLEX10K
FLEX: Flexible Logic Element matriX
Basados en LUT Programacin SRAM 576 a 12160 elementos lgicos (LEs) (LUT de 4 entradas, flip-flop y lgica adicional) LABs de 8 LEs c/u 3 a 20 EABs de 2kbits por bloque de RAM interna Interconexin (Fast Track) de LEs, EABs e IOEs

Implementaciones
Medidor de frecuencias y perodos
Entradas de medicin compatibles con lgica TTL Rango en modo frecuencia: 1Hz a 100MHz. Rango en modo perodo: 100ns a 10s. Representacin mediante 6 dgitos. Comunicacin con PC a travs de puerto paralelo en modo SPP.

Adquisidor autnomo de datos


Controlado desde PC a travs de puerto paralelo en modo SPP. Control directo del proceso de adquisicin de datos del conversor analgico digital ADC0820. Capacidad de almacenamiento de hasta 500 muestras. Dispositivo FPGA FLEX10K10 de Altera

Diagrama en bloques AHDL frecuencmetro

Frecuencmetro
Generador de base de tiempo

Control de latch y drive

Seal de entrada

Acondicionador de seal

Contador

Latch y drive de LEDs

f seal

N de pulsos contados Tiempo de medicin

Displays de 7 segmentos

Seal de salida del Acondicionador Salida del Generador de base de tiempo

Pulsos a contar por el contador

Frecuencmetro en AHDL
Bloque combinatorio

Seal de entrada

BT

base de tiempos
10 MHz
Seleccin de base

10 MHz

base de tiempos

Generador de base de tiempos

6 Contadores sincrnicos

tiempo de conteo

tiempo

w
Ubicacin del punto dp

tiempo

6 Latchs de 4bits c/u


tiempo

Seal Z: Maquina de Moore (puesta a cero)


dp

Cudruple MUX 6:1 1

S1/ 1

0
1
S2/ 0

Decodificador

Decodificador BCD a 7 segmentos

S0/ 0

1 Seal W: flip-flop tipoD


base_tiempos

a, b, c, d, e, f, g

carga
Vcc D
clrn

Displays de segmentos

clk

Frecuencmetro en AHDL
Bases de tiempos
selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Duracin del nivel alto de la base de tiempos 10000 ms 1000 ms 100 ms 10 ms

f seal

N de pulsos contados Tiempo de medicin

Ubicacin del punto dp


selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Duracin del nivel alto de la base de tiempos 10000 ms 1000 ms 100 ms 10 ms dgito que contiene el punto 5 4 3 2

Medidor de perodos
Generador de pulsos de perodo definido

Control de latch y drive

Seal de entrada

Acondicionador de seal

Contador

Latch y drive de LEDs

Tseal N de pulsos contados* Tpulsos

Displays de 7 segmentos

Medidor de perodos en AHDL


Bloque combinatorio

Seal de entrada Divisor

pulsos
10 MHz
Seleccin de base

10 MHz

base de tiempos

pulsos

Generador de pulsos

6 Contadores sincrnicos

Ubicacin del punto dp

z
6 Latchs de 4bits c/u

dp

Cudruple MUX 6:1

Decodificador

Decodificador BCD a 7 segmentos

a, b, c, d, e, f, g

Displays de 7 segmentos

Medidor de perodos en AHDL


Pulsos de perodo definido
selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Perodo de la seal de pulsos 0.1us 1us 10us 100us

Tseal N de pulsos contados* Tpulsos

Ubicacin del punto dp


selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Perodo de la seal de pulsos 0.1us 1us 10us 100us dgito que contiene el punto 5 4 3 2

Error y rango de mediciones


Error de base de tiempos Error de pulsos contados
N pulsos contados: 1 999999 pulsos
f seal N de pulsos contados Tiempo de medicin

Medidor de frecuencias
selec_base[1..0] 00 = 0

Duracin del nivel alto de la base de tiempos 10000 ms

Rango de frecuencias a medir [Hz] 0.1 a 99999.9

error [Hz] 0.1

01 = 1
10 = 2 11 = 3

1000 ms
100 ms 10 ms

1 a 999999
10 a 9999990 100 a 99999900

1
10 100

Medidor de perodos
selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3

Tseal N de pulsos contados* Tpulsos

Perodo 0.1 us 1us 10 us 100 us

Rango de perodos a medir [ms] 0.0001 a 99.9999 0.001 a 999.999 0.01 a 9999.99 0.1 a 99999.9

error [us] 0.1 1 10 100

Error y rango de mediciones


Solucin Prescaler que divida por 10 la seal de entrada Medidor de frecuencias con prescaler
selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Duracin del nivel alto de la base de tiempos 10000 ms 1000 ms 100 ms 10 ms Rango de frecuencias a medir [Hz] 1 a 999999 10 a 9999990 100 a 99999900 1000 a 999999000 error [Hz] 1 10 100 1000

Medidor de perodos con prescaler


selec_base[1..0] 00 = 0 01 = 1 10 = 2 11 = 3 Perodo 0.1 us 1us 10 us 100 us Rango de perodos a medir [ms] 0.00001 a 9.99999 0.0001 a 99.9999 0.001 a 999.999 0.01 a 9999.99 error [us] 0.01 0.1 1 10

Rango de mediciones
Rangos de medicin tericos para un error mximo del 10% Sin activacin de prescaler

Frecuencia: 0.1Hz a 99.9999MHz


Perodo : Frecuencia: Perodo: 1us a 99.9999 seg. 1Hz a 999.999MHz 100ns a 9.99999 seg Con activacin de prescaler

Limitacin de la frecuencia mxima de la FPGA

Comunicacin con PC
Por puerto paralelo en modo SPP

D7 a D0 como salidas y S6 a S3 como entradas


pin D7 D6 D5 D4 D3 (D2..D0) (S6..S3) puerto datos datos datos datos datos datos estado sentido salida salida salida salida salida salida entrada Funcin
activa_prescaler FoP selec_base[1] selec_base[0]

(D2..D0) 000 = 0 001 = 1 010 = 2 011 = 3 100 = 4 101 = 5 110 = 6

(S6..S3) Overflow valor dgito 1 valor dgito 2 valor dgito 3 valor dgito 4 valor dgito 5 valor dgito 6

congela latchs seleccin dgito overflow y valor dgito

Secuencia programa de PC:


1. 2. 3. 4. 5. (D7..D4) activo prescaler, modo frec o period., selec. base en forma contnua. Activo carga mediante congelamiento de latch (D3). Secuencia 0-6 en (D2..D0) para cargar overflow y dgitos Se desactiva carga (D3) para refresco de latchs Repeticion de 2-4 de forma necesaria.

Adquisidor autnomo de datos


10MHz /INT datos[3..0] full
clear cargar_fifo leer_fifo HoL_nibble clk_PC

FPGA

DB[7..0]

ADC0820

FIFO con palabras de 8 bits


/RD

/CS

/WR

ADC0820 en modo WR-RD

Adquisidor autnomo de datos


mximo tWR tRD tP tINTH 50us mnimo 600ns 600ns 500ns 225ns

Adoptamos
tWR = 800ns
tRD = 800ns tP = 800ns tINTH = 300ns

tWR
/WR

tRD

tP

tIINTH
/RD

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

x100ns

Adquisidor autnomo de datos con PC


Por puerto paralelo en modo SPP

D4 a D0 como salidas y S7 a S3 como entradas


pin D0 D1 D2 D3 D4 S7 (S6..S3) puerto datos datos datos datos datos estado estado sentido salida salida salida salida salida entrada entrada nodo
clear cargar_fifo leer_fifo HoL_nibble clk_PC full datos[3..0]

nibble High Low

HoL_nibble

datos[3..0] q[7..4] q[3..0]

0 1

Secuencia programa de PC:


1. 2. 3. 4. 5. 6. D0 en 1 para limpiar memoria Activo carga de FIFO mediante D1 hata que S7=1(full). Activo lectura de FIFO con D2. Con D3 en bajo, genero pulso de reloj en D4 y cargo high nibble en (S6..S3). D3 en alto y cargo low nibble en (S6..S3). Repito pasos 3 5 hasta cargar totalidad de muestras en PC.

Implementacin en FLEX10K10
Plaqueta UPx10K10

Implementacin en FLEX10K10

Implementacin en FLEX10K10
Plaqueta FPGA con puerto paralelo de PC

Implementacin en FLEX10K10
Plaqueta Frecuencmetro

Implementacin en FLEX10K10
Plaqueta Adquisidor

Estructura de un elemento lgico. LE (logic element)

Modos de operacin de los LEs

AHDL Base de tiempo

AHDL monoestable

AHDL salida W reset contador

AHDL Bloque cuenta (6 contadores)

AHDL Bloque de latchs


Caso general

AHDL Bloque MPX

AHDL decodificadores
BCD 7 SEG

AHDL punto

Medidor de periodos

Pines de control y datos FPGA ADC0820

Lectura escritura FIFO


AHDL Visual Basic

pin D7 D6 D5 D4 D3 (D2..D0) (S6..S3)

puerto datos datos datos datos datos datos estado

sentido salida salida salida salida salida salida entrada

Funcin
activa_prescaler FoP selec_base[1] selec_base[0]

congela latchs seleccin dgito overflow y valor dgito

Programacin de la FPGA
4.6.1.3 Programacin de la FPGA. Posteriormente vamos a proceder a programar la FPGA. Para esto vamos a programar la EPC2 de la UPx10K10 a travs de la interfase ByteBlaster. Los pasos a seguir son los siguientes: 1.Verificamos que la EPC2 est en su zcalo, y que el jumper J1-EPC2 no est colocado. 2. Como no hay plaquetas enchufadas en CON1 o CON2, verificamos que tambin los jumpers J1-CON1 y J1-CON2, respectivamente, estn colocados. 3. Conectamos el cable de impresora entre la PC y la UPx10K10, y conectamos la fuente comprobando que tiene energa (LED encendido). 4. Generamos el archivo .pof de programacin de la EPC2. Para ello: Con la ventana del Compiler abierta, vamos a la opcin File de la lnea superior y elija Convert SRAM Object File. Elegimos el archivo .sof a convertir y lo ingresamos mediante Add a la lista 5. Elegimos el Programmer en el MAX+PLUS II, vamos a OPTIONSHardware Setup, y seleccionamos como programador el ByteBlaster. 6. An en el Programmer en el MAX+PLUS II, colocamos en ON la opcin MultiDevice JTAG Chain en el sub-men JTAG. 7. Elegimos MultiDevice JTAG Chain Setup en ese submen. 8. Seleccionamos EPC2 en la ventana Device Name. 9. Escribimos el nombre del archivo de programacin en la ventana Programming File Name (para esta tarea tambin podemos usar el botn Select Programming File). Este archivo puede tener la extensin .pof, aunque tambin .jam o .jbc. 10. Una vez elegidos el dispositivo y el archivo de programacin, apretamos el botn Add para incorporar ambos a la ventana Device Names & Programming File Names. 11. Seleccionamos ahora EPF10K10 en la ventana Device Name. 12. Borramos el contenido de la ventana Programming File Name y apretamos el botn Add para incorporar ambos a la ventana Device Names & Programming File Names . En la zona correspondiente al archivo asociado a la EPF10K10 aparecer como texto <none>. 13. Si todo se ha realizado correctamente, en la ventana Device Names & Programming File Names debe estar en el puesto 1 la EPF10K10 (con <none>) y en 2 lugar la EPC2 (con su archivo .pof) como muestra la figura 4.32. 14. Apretamos el botn Detect JTAG Chain Info para verificar si todo funciona bien. A travs del ByteBlaster interno de la UPx10K10 el MAX+PLUS II debe detectar la EPF10K10 y la EPC2. 15. Archivamos estas opciones mediante el botn Save .JCF (JTAG Configuration File). 16. Finalmente volvemos al Programmer en el MAX+PLUS II, y eligimos Program.

Comandos en VB para carga y descarga de memoria FIFO

FIN