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 .

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

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.

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 . • Control directo del proceso de adquisición de datos del conversor analógico digital ADC0820. • 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.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. g carga Vcc D clrn Q W Displays de segmentos Z clk . b. d. e.

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

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

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

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

01 a 9999.1 us 1us 10 us 100 us Rango de períodos a medir [ms] 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.999 0.0001 a 99.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.1 1  10 ..00001 a 9.99999 0.99 error [us]  0.0] “00” = 0 “01” = 1 “10” = 2 “11” = 3 Período 0.001 a 999.9999 0.01  0..

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

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

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 .

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

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

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

Comandos en VB para carga y descarga de memoria FIFO .

FIN .

Sign up to vote on this title
UsefulNot useful