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

• matriz de compuertas OR (unión). 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).

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.

• Comunicación con PC a través de puerto paralelo en modo SPP. • 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. • Control directo del proceso de adquisición de datos del conversor analógico digital ADC0820. Dispositivo FPGA FLEX10K10 de Altera . • Capacidad de almacenamiento de hasta 500 muestras. • Rango en modo período: 100ns a 10s. Adquisidor autónomo de datos • Controlado desde 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 .

b.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. d. e. g carga Vcc D clrn Q W Displays de segmentos Z clk . f. c.

..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.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 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 .

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. f. b. d. e. g Displays de 7 segmentos . c.

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..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.

01 a 9999.1 1  10  100 .0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Tseñal  Nº de pulsos contados* Tpulsos Período 0.9 error [us]  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 períodos selec_base[1.9 error [Hz]  0.0] “00” = 0 Duración del nivel alto de la base de tiempos 10000 ms Rango de frecuencias a medir [Hz] 0.99 0.1 a 99999.1 a 99999.999 0.001 a 999..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..0001 a 99.9999 0.1 us 1us 10 us 100 us Rango de períodos a medir [ms] 0.

1 us 1us 10 us 100 us Rango de períodos a medir [ms] 0.1 1  10 .01  0..99 error [us]  0.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.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Período 0.99999 0.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.001 a 999.0001 a 99.9999 0.01 a 9999.999 0.00001 a 9..

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

D0) para cargar overflow y dígitos Se desactiva carga (D3) para refresco de latchs Repeticion de 2-4 de forma necesaria.. base en forma contínua. Activo carga mediante congelamiento de latch (D3). ..D4) activo prescaler. 2. 3.D0) (S6..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. (D7.D0) “000” = 0 “001” = 1 “010” = 2 “011” = 3 “100” = 4 “101” = 5 “110” = 6 (S6.. 5.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.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. Secuencia 0-6 en (D2. 4... selec. modo frec o period..

..Adquisidor autónomo de datos 10MHz /INT datos[3.0] ADC0820 FIFO con palabras de 8 bits /RD /CS /WR ADC0820 en modo WR-RD .0] full clear cargar_fifo leer_fifo HoL_nibble clk_PC FPGA DB[7.

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). 5. genero pulso de reloj en D4 y cargo high nibble en (S6.0] 0 1 Secuencia programa de PC: 1. 3. 4.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.0] q[7...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. Activo lectura de FIFO con D2.S3)..S3). D3 en alto y cargo low nibble en (S6. Repito pasos 3 – 5 hasta cargar totalidad de muestras en PC..4] q[3.. . Con D3 en bajo. 6.0] nibble High Low HoL_nibble datos[3.. 2..

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 .

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

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.Lectura escritura FIFO AHDL Visual Basic pin D7 D6 D5 D4 D3 (D2.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 ..

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

Comandos en VB para carga y descarga de memoria FIFO .

FIN .

Sign up to vote on this title
UsefulNot useful