Introducción a los dispositivos FPGAs. Análisis y ejemplos de diseño.

Bozich, Eduardo Carlos Director: Ing. Sergio Noriega
Modificada por Ing. F. Videla

Objetivo
Realización de un kit de implementación en FPGA, para la cátedra de „Introducción a los

sistemas lógicos y digitales‟ mediante la
plaqueta experimental UPx10K10, con el dispositivo FLEX10K10

Contenido
• Tipos de lógica programada
•Estudio de implementación en AHDL:  Medidor de frecuencia y período  Adquisisdor autónomo de datos. • Implementación en FLEX10K10

PLD
PLD (Programmable Logic Device) características modificadas y almacenadas mediante programación Características de fabricación: • Funcionabilidad completa • Celdas de funciones universales PLD:  SPLD  CPLD  FPGA

PLDs mas pequeños y de menor costo SPLD:  PLA  PAL  GAL .SPLD SPLD (Simple Programmable Logic Device) Matrices de conexiones • matriz de compuertas AND (intersección). • matriz de compuertas OR (unión).

CPLD CPLD (Complex Programmable Logic Device) Bloques lógicos similares a un SPLD Matriz de interconexión programable Tecnologías de programación idem SPLD .

FPGA FPGA (Field Programmable Gate Array) Mayor transferencia de datos y registros Tecnología de programación: antifusible. SRAM y flash .

flip-flop y lógica adicional) LABs de 8 LEs c/u 3 a 20 EABs de 2kbits por bloque de RAM interna Interconexión (Fast Track) de LEs. EABs e IOEs .FPGA: FLEX10K FLEX: Flexible Logic Element matriX Basados en LUT Programación SRAM 576 a 12160 elementos lógicos (LEs) (LUT de 4 entradas.

• Control directo del proceso de adquisición de datos del conversor analógico digital ADC0820. Adquisidor autónomo de datos • Controlado desde PC a través de puerto paralelo en modo SPP. • Capacidad de almacenamiento de hasta 500 muestras. • Rango en modo período: 100ns a 10s. • Representación mediante 6 dígitos.Implementaciones Medidor de frecuencias y períodos • Entradas de medición compatibles con lógica TTL • Rango en modo frecuencia: 1Hz a 100MHz. Dispositivo FPGA FLEX10K10 de Altera . • Comunicación con PC a través de puerto paralelo en modo SPP.

Diagrama en bloques AHDL frecuencímetro .

Frecuencímetro Generador de base de tiempo Control de latch y drive Señal de entrada Acondicionador de señal Contador Latch y drive de LEDs f señal  Nº de pulsos contados Tiempo de medición Displays de 7 segmentos Señal de salida del Acondicionador Salida del Generador de base de tiempo Pulsos a contar por el contador .

f. g carga Vcc D clrn Q W Displays de segmentos Z clk . d. e.Frecuencímetro en AHDL Bloque combinatorio Señal de entrada BT base de tiempos 10 MHz Selección de base 10 MHz base de tiempos Generador de base de tiempos 6 Contadores sincrónicos Z tiempo de conteo tiempo w Ubicación del punto dp W tiempo z 6 Latchs de 4bits c/u tiempo Señal Z: Maquina de Moore (puesta a cero) dp Cuádruple MUX 6:1 1 S1/ 1 0 0 1 S2/ 0 0 Decodificador Decodificador BCD a 7 segmentos S0/ 0 1 Señal W: flip-flop tipoD base_tiempos a. c. b.

Frecuencímetro en AHDL Bases de tiempos selec_base[1..0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Duración del nivel alto de la base de tiempos 10000 ms 1000 ms 100 ms 10 ms f señal  Nº de pulsos contados Tiempo de medición Ubicación del punto dp selec_base[1..0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Duración del nivel alto de la base de tiempos 10000 ms 1000 ms 100 ms 10 ms dígito que contiene el punto 5 4 3 2 .

Medidor de períodos Generador de pulsos de período definido Control de latch y drive Señal de entrada Acondicionador de señal Contador Latch y drive de LEDs Tseñal  Nº de pulsos contados* Tpulsos Displays de 7 segmentos .

b. d. g Displays de 7 segmentos . f.Medidor de períodos en AHDL Bloque combinatorio Señal de entrada Divisor pulsos 10 MHz Selección de base 10 MHz base de tiempos pulsos Generador de pulsos w 6 Contadores sincrónicos Ubicación del punto dp z 6 Latchs de 4bits c/u dp Cuádruple MUX 6:1 Decodificador Decodificador BCD a 7 segmentos a. e. c.

1us 1us 10us 100us dígito que contiene el punto 5 4 3 2 .1us 1us 10us 100us Tseñal  Nº de pulsos contados* Tpulsos Ubicación del punto dp selec_base[1.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Período de la señal de pulsos 0..Medidor de períodos en AHDL Pulsos de período definido selec_base[1.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Período de la señal de pulsos 0..

0001 a 99..1 us 1us 10 us 100 us Rango de períodos a medir [ms] 0.1 1  10  100 ..1 a 99999.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Tseñal  Nº de pulsos contados* Tpulsos Período 0.Error y rango de mediciones • Error de base de tiempos • Error de pulsos contados Nº pulsos contados: 1 – 999999 pulsos f señal  Nº de pulsos contados Tiempo de medición Medidor de frecuencias selec_base[1.999 0.0] “00” = 0 Duración del nivel alto de la base de tiempos 10000 ms Rango de frecuencias a medir [Hz] 0.9999 0.01 a 9999.1 a 99999.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 períodos selec_base[1.99 0.9 error [Hz]  0.9 error [us]  0.001 a 999.

.999 0.9999 0..99999 0.01  0.00001 a 9.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Duración 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 períodos con prescaler selec_base[1.99 error [us]  0.1 us 1us 10 us 100 us Rango de períodos a medir [ms] 0.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Período 0.001 a 999.Error y rango de mediciones Solución  Prescaler que divida por 10 la señal de entrada Medidor de frecuencias con prescaler selec_base[1.1 1  10 .01 a 9999.0001 a 99.

9999MHz  Período :  Frecuencia:  Período: 1us a 99. 1Hz a 999.9999 seg.999MHz 100ns a 9.99999 seg • Con activación de prescaler Limitación de la frecuencia máxima de la FPGA .1Hz a 99.Rango de mediciones Rangos de medición teóricos para un error máximo del 10% • Sin activación de prescaler  Frecuencia: 0.

3. 2. 4.D0) “000” = 0 “001” = 1 “010” = 2 “011” = 3 “100” = 4 “101” = 5 “110” = 6 (S6.S3) Overflow valor dígito 1 valor dígito 2 valor dígito 3 valor dígito 4 valor dígito 5 valor dígito 6 congela latchs selección dígito overflow y valor dígito Secuencia programa de PC: 1.. (D7. 5. .D0) para cargar overflow y dígitos Se desactiva carga (D3) para refresco de latchs Repeticion de 2-4 de forma necesaria.Comunicación 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.D4) activo prescaler. selec. Secuencia 0-6 en (D2... modo frec o period...D0) (S6... Activo carga mediante congelamiento de latch (D3). base en forma contínua.S3) puerto datos datos datos datos datos datos estado sentido salida salida salida salida salida salida entrada Función activa_prescaler FoP selec_base[1] selec_base[0] (D2.

..Adquisidor autónomo 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 autónomo de datos máximo tWR tRD tP tINTH 50us mínimo 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 .

D0 en „1‟ para limpiar memoria Activo carga de FIFO mediante D1 hata que S7=‟1‟(full). . 3. 4.. Con D3 en bajo.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] q[7.4] q[3. D3 en alto y cargo low nibble en (S6. Activo lectura de FIFO con D2.. Repito pasos 3 – 5 hasta cargar totalidad de muestras en PC.S3)..... 6..Adquisidor autónomo 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. genero pulso de reloj en D4 y cargo high nibble en (S6.0] 0 1 Secuencia programa de PC: 1. 5. 2.0] nibble High Low HoL_nibble datos[3.S3).

Implementación en FLEX10K10 Plaqueta UPx10K10 .

Implementación en FLEX10K10 .

Implementación en FLEX10K10 Plaqueta FPGA con puerto paralelo de PC .

Implementación en FLEX10K10 Plaqueta Frecuencímetro .

Implementación en FLEX10K10 Plaqueta Adquisidor .

LE (logic element) .Estructura de un elemento lógico.

Modos de operación 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 .

D0) (S6.S3) puerto datos datos datos datos datos datos estado sentido salida salida salida salida salida salida entrada Función activa_prescaler FoP selec_base[1] selec_base[0] congela latchs selección dígito overflow y valor dígito ..Lectura escritura FIFO AHDL Visual Basic pin D7 D6 D5 D4 D3 (D2..

Este archivo puede tener la extensión . Borramos el contenido de la ventana Programming File Name y apretamos el botón Add para incorporar ambos a la ventana Device Names & Programming File Names .pof.pof de programación de la EPC2. 13. 16. y seleccionamos como programador el ByteBlaster. estén colocados.JCF (JTAG Configuration File). Archivamos estas opciones mediante el botón Save . y que el jumper J1-EPC2 no está colocado.3 Programación de la FPGA. Generamos el archivo . 10. 14. aunque también . • Elegimos el archivo . Posteriormente vamos a proceder a programar la FPGA.sof a convertir y lo ingresamos mediante Add a la lista 5. 12. 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 . y conectamos la fuente comprobando que tiene energía (LED encendido).1.jbc. Escribimos el nombre del archivo de programación en la ventana Programming File Name (para esta tarea también podemos usar el botón Select Programming File). Conectamos el cable de impresora entre la PC y la UPx10K10. En la zona correspondiente al archivo asociado a la EPF10K10 aparecerá como texto <none>. y eligimos Program. 8. 9. vamos a OPTIONS→Hardware Setup. vamos a la opción File de la línea superior y elija Convert SRAM Object File. Para esto vamos a programar la EPC2 de la UPx10K10 a través de la interfase ByteBlaster. Seleccionamos EPC2 en la ventana Device Name. Si todo se ha realizado correctamente. A través del ByteBlaster interno de la UPx10K10 el MAX+PLUS II debe detectar la EPF10K10 y la EPC2. Una vez elegidos el dispositivo y el archivo de programación. apretamos el botón Add para incorporar ambos a la ventana Device Names & Programming File Names. 4.Verificamos que la EPC2 está en su zócalo. 15. Los pasos a seguir son los siguientes: 1. respectivamente. Seleccionamos ahora EPF10K10 en la ventana Device Name. 3. Para ello: • Con la ventana del Compiler abierta.6. Aún en el Programmer en el MAX+PLUS II.32. Apretamos el botón Detect JTAG Chain Info para verificar si todo funciona bien. colocamos en ON la opción MultiDevice JTAG Chain en el sub-menú JTAG. 2. Elegimos MultiDevice JTAG Chain Setup en ese submenú. 6.pof) como muestra la figura 4. .jam o . 7. Finalmente volvemos al Programmer en el MAX+PLUS II. Elegimos el Programmer en el MAX+PLUS II.Programación de la FPGA 4. Como no hay plaquetas enchufadas en CON1 o CON2. verificamos que también los jumpers J1-CON1 y J1-CON2. 11.

Comandos en VB para carga y descarga de memoria FIFO .

FIN .

Sign up to vote on this title
UsefulNot useful