Diseño de circuitos digitales en una FPGA

El objetivo de este tema es publicar soluciones a temas concernientes al diseño digital con FPGAs, proponer nuevos proyectos y aprender bastante mas que lo necesario.

Mi meta personal es postear un diseño cada semana, espero por mi cumplirla.

Saludos ^^
 
Hola, me gustaria iniciarme en la programación de FPGAs, he investigado pero no he podido decidir por alguno, pienso iniciar con algun FPGA xilinx pues por lo visto es la marca mas famosa, pero tengo algunas dudas de principiante:

- Cuales son los índices de rendimiento característicos de un FPGA ??
Esque no se como preguntar por alguno, por ejemplo en un microcontrolador los índices de rendimiento son:
- El ancho del bus de datos: 8bits, 16bits.
- La frecuencia de reloj que define la velocidad: 8Mhz, 16Mhz.
- La cantidad y tipo de memoria: RAM, ROM, Flash.
- Los periféricos disponibles: ADC, PWM, comunicación serial.

- En que lenguaje se programan y cuales son los compiladores mas reconocidos??
Ojala fuera en uno de alto nivel como lenguaje C. Y ojalá el programa sea de la misma copañia que el dispositivo, como el Code Composer Studio para DSPs de la Texas I. o el Code Warrior para micros de Freescale.

- Existe algun kit recomendable para principiantes ??
Que incluya lo necesario para iniciar, no quiero comprar algo y despues tener que andar buscando por interner información de como se programa.

- Cual es la tendencia de los FPGAs ??
Quiero evitar gastar mucho tiempo aprendiendo algo obsoleto o que pronto sera obsoleto.

De antemano muchas gracias a los que tomen la molestia de leer esto y responder.
 
Me agrada de sobremanera que haya un interes tan amplio de tu parte.

Antes que nada, me se me hace indispensable definir que es una FPGA y me voy a referir a la definicion de la Wikipedia en español.

http://es.wikipedia.org/wiki/FPGA

Ahora en general los indices de rendimiento difieren algo de los indices de rendimiento de un microcontrolador.

1- Número de compuertas, Celdas lógicas, Memorias y Elementos Aritmetico Lógicos.
2- Las frecuencias de trabajo (Aunque esto es relativo a la compilacion). Frecuencia Baja va desde 18MHz hasta 167Mhz, en Frecuencia alta va desde 48MHz hasta 280MHz.
3- LA CANTIDAD DE PINES DISPONIBLES.

Ahora un ejemplo de comparación.

En una FPGA de gama media - baja, en este momento se ha desarrollado un microcontrolador PIC

http://www.opencores.org/projects.cgi/web/ppx16/overview

otros proyectos de micro procesadores con FPGA.

http://www.dte.eis.uva.es/OpenProjects/OpenUP/indice.htm
http://cegt201.bradley.edu/projects/proj2001/vhdlrisc/

El unico problema es el manejo de perifericos como el ADC - DAC, RS232 y otros, porque la FPGA solo tiene salidas digitales.

Ahora este problema es sencillo de solucionar, pero hay una alternativa mas práctica para estudantes, principiantes, desarrolladores y todo aquel que no este en producción, El "Starter Kit". Los mejores son los de la compañia Digilent Inc, http://www.digilentinc.com/, porque usan las mejores FPGA e incluyen la mayoria de los Perifericos que se necesitan y si no los incluyen los venden como adicionales, igual hay bastantes proyectos de modulos adicionales que puedes armar por ti mismo.

En mi caso yo adquiri un Spartan 3 Starter Kit, que trae el software y unos ejemplos bastante buenos.

Ahora el lenguaje de programacion no hay, hay es un lenguaje de descripcion de hardware, a diferencia de los micros este dispositivo no se programa, se le describe el comportamiento en hardware, un ejemplo es que si quieres aunque seria un desperdicio la puedes describir enteramente en su capacidad como una memoria ram o una rom, o hacer un micro completo ;)

Los lenguajes de descripcion mas usados son VHDL y Verilog, el VHDL es mas profesional porque fue desarrollado junto con la FPGA para uso de las fuerzas militares norteamericanas, el verilog es un lenguaje de descripcion mas simple y tecnico, en realidad es muy parecido al C. Yo personalmente recomiendo VHDL, mas por el hecho que es el que manejo que por sus diferencias.

En el Starter Kit, viene el siguiente software:

EDK - Kit de Desarrollo Embevido.
ISE - Compilador.
Modelsim - Simulador.

y eso es todo con eso se hacen maravillas.

Ahora lo mas importante, la tendencia de las FPGA es hacer modulos de hardware con posibilidades de revision de versiones, y se usan ampliamente en el area de las telecomunicaciones en el diseño de Filtros de respuesta impulsiva finita (FIR) y una gama variada de filtros adaptativos, tambien se usan para el procesamiento digital de señales (DSP), cuando no se requiere una capacidad de analisis basta como para adquirir un procesador digital de señales (DSP), y lo mas importante Comunicaciones Digitales, los principales clientes de estos dispositivos son los fabricantes de Telefonos celulares.

Espero que este breve recuento sirva para animarte a adquirir una FPGA

PD.

Hay una manera de pedir un Starter Kit como donativo universitario, lo unico es que hay que tener un correo .edu y pasar un proyecto para el cual se necesite una FPGA en

http://www.xilinx.com/univ/

Pero pilas que a muchas universidades les molesta que se use su nombre para recibir un dispositivo que ellos no van a tener y ademas que los resultados del proyecto se tienen que retroalimentar a xilinx.

Saludos ^^
 
saludos.
Aztualmente estoy desarrollando un proyecto en VHDL, usandoo para ello una Spartan II, con el kit completo de BurchED.
Mi problema es que dicha paguina está cerrada por reforma y no puedo acceder a los datasheet de los periféricos. Me interesa de forma primordial el referente al bloque VGA-PS2-Serial port, asi como el bloque de Ram externa.
Conoceis algún sitio web de donde pueda descargalos? Tengo los esquemas, pero me falta las temporizaciones y codificaciones de funcionamiento.
Agradecido por cualquier ayuda
 
hola que tal , me gusta esto de los Fpgas ya tengo dos años trabajando con ellos , con lo que respecta a lo que pides yo tengo uno programas para hechar a andar el vga el detalle es que lo he configurado (UCF) para la spartan3 , si de algo te sirven responde
 
con respecto a lo que mencionas , la tarjeta Espartan 3E es ideal para procesamiento de señales de audio y video, ya que trae integrado un ADC y un DAC,para iniaciarte en el mundo de los FPGAS la tarjeta Espartan 3 es ideal ya que es un poco mas practica y sobre todo mas economica puedes comenzar con esta. (que tal si despues te aburres ¡¡)En mexico hacen envios comprando directamente en xilinx.com claro el pago es con tarjeta de credito+ envio
Nota: Puedes comprarte una de uso solo es cuestion de buscar en una universidad
 
Saludos de nuevo. Como comente anteriormente tengo un proyecto entre manos, si bien me he visto obligado a dejar de lado la Spartan IIE por una apremiante falta de memoria. Ahora mismo estoy usando la Spartan III de Xillins, con una gran mejora en todos los sentidos.
Mi proyecto incluye tanto un manejo de una VGA como la lectura de ordenes a través de un teclado PS2, aprovechando las conexiones disponibles.
Mi pregunta es...¿Existe alguna diferencia de los códigos que transmite el teclado a la fpga al ser teclado español? Mi simulación funciona a la perfección, pero al conectar la fpga no consigo respuesta alguna del teclado. ¿Es necesario iniciarlo de algún modo?
Saludos y gracias
 
Hola me da mucho gusto que ya estas trabajando con la Spartan3 como habras visto cuenta con un modulo PS2, a continuacion te anexo una rutina para inicializar un teclado, sugiero descargues el manual de la tarjeta.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity PS2 is
port (
clk_ps2: in std_logic; --- entrada divisor de frecuencia
in_dato_ps2: in std_logic; --- entrada tecla
dato_out: out std_logic_vector(5 downto 0); --- salida a micro
bit_startut std_logic; --- indica que a llegado el dato
stop: out std_logic --- indica que se ha enviado el dato
);
end ps2;

architecture PS2 of PS2 is

signal registro: STD_LOGIC_VECTOR(8 downto 0);
signal cuenta : STD_LOGIC_VECTOR(4 downto 0);
signal paridad, paridad_ok : STD_LOGIC;
signal start : STD_LOGIC;

begin
process (clk_ps2)
begin
if clk_ps2'event and clk_ps2='0' then -- inicializa
stop <='0'; -- no hay dato en la entrada
bit_start<='0';
if cuenta="00000" and in_dato_ps2='0' then -- se espera bitstart
start<='1'; -- inicia todo
paridad<='1'; -- dato+paridad=impar
end if;
if start='1' then
registro <= in_dato_ps2 & registro(8 downto 1); -- registro(8)<=ps2_dato guarda datos(letra) en registro
if cuenta="01000" then -- limite de datos
dato_out <=registro(6 downto 1); -- manda el dato a la salida
if in_dato_ps2=paridad then paridad_ok<='1'; -- in_dato_ps2 = bitparydad checa paridad
else paridad_ok<='0';
end if;
end if;
if cuenta="01001" then -- pulso 9 de clock ps2_dato = bit stop
cuenta <= "00000";
start <= '0';
else
cuenta <= unsigned(cuenta)+1; -- contador
end if;
bit_start <='1';
stop <='1';
if in_dato_ps2='1' then -- checa paridad ??
paridad <= not paridad; -- Bits+paridad = impar ??
end if;
end if;
end if;
end process;
end PS2;


Cuando aplastas una tecla ,el teclado manda la letra en forma hexadecimal, pero , tu la podras visualizar en la tarjeta en los led's de forma binaria (los 8 bits) por lo que tendras que convertirlo a hexidecimal(usa la calculadora de windows para que se te facilite) una ves que lo comprubes podras utilizar el teclado a tu gusto.

El ucf yo lo coloque de la siguiente manera:

NET "bit_start" LOC = "D6" ;
NET "clk_ps2" LOC = "M16" ;
NET "dato_out<0>" LOC = "K12" ;
NET "dato_out<1>" LOC = "P14" ;
NET "dato_out<2>" LOC = "L12" ;
NET "dato_out<3>" LOC = "N14" ;
NET "dato_out<4>" LOC = "P13" ;
NET "dato_out<5>" LOC = "N12" ;
NET "dato_out<6>" LOC = "P12" ;
NET "dato_out<7>" LOC = "P11" ;
NET "in_dato_ps2" LOC = "M15" ;
NET "stop" LOC = "D5" ;

Ok nos vemos y espero te sirva
 
Gracias por el codigo. Pero ya consegui encontrar el error. Nada mas era un voltaje inadecuado. Al ser un teclado viejo necesitaba 5V en lugar de los 3.3V actuales. No he tenido mas que mover el jumper de seleccion, al lado del conector PS2 y todo solucionado.
En realidad mi codigo es algo mas complejo, ya que usé una máquina de estados simple(3 estados) para poder diferenciar cuando se suelta la tecla, ya que mientras está presionada envia reiteradamente el codigo de tecla, pero al soltarla envian un "F0" en hexadecimal, mas una ultima vez el codigo de tecla(obviando las teclas extendidas que envia "F0" "E0" y codigo) de éste modo envio exclusivamente el código de tecla a otro futuro bloque de procesos.


Gracias por la solución. Espero ser de utilidad a alguien en un futuro.
 
Saludos de nuevo.
Tengo un pequeño problema que posiblemente se solucione con algo mas de conocimiento del que yo tengo.
Quiero usar una instrución...en concreto una rotación de los bits de un vector. Pero a la hora de colocarla en el código(dirigido siempre a implementación) ninguna de las que encuentro son válidas...(ROR, ROL, SLR,SLL...) ya que me da error de sintaxis.
Alguien podría decirme como es la sintaxis? Yo uso:
vector ROR 1;
Necesito recorer el vector posición a posición para ir sacando los bits uno a uno. Es un método que se me ha ocurrido para "pintar" líneas en una pantalla con un módulo VGA que ya tengo funcionando.
Gracias de antemano.
 
¡Hola amigos!

Estoy leyendo todas las respuestas y quería formular 2 nuevas preguntas:

¿Que me recomendais para aprender VHDL? Tengo un nivel medio tirando a bajo.

Y una segunda pregunta, lo del Code Composer Studio ¿te permite pasar programas de matlab a ese compilador verdad?.

** Gracias por leerme y Salu2**
 
Buenas! Aqui ando investigando con una xilinx ML501 intentando obtener una salida DVI y/o VGA, pero claro, de fábrica el DVI-Transmitter viene en modo POWER-DOWN y solo estan activos dos pines del mismo, los del Serial Port, estos son uno de reloj y otro de datos. ¿Alguien sabe si para modificar los registros hay algún codigo hecho? ¿Algún core?
Es que ya he intentado hacerlo, pero no consigo que el DVI-Transmitter me devuelva la señal de Acknoledge. Cualquier ayuda se agradecería bastante.

Un saludo!
 
Hola.

Yo he trabajado con las FPGA de Altera, y la verdad es que el software que tiene es muy bueno. Se llama "Quartus-II". A parte de poder hacer la programacion en VHDL, se puede hacer directa y graficamente mediante las puertas lógicas. El simulador que trae incorporado, también es muy bueno.

En mi proyecto final de carrera, Utilize una 128 para hacer el control de un motor brushless con realimentación por BEMF.

El único problema que le encuentro a las FPGAs, es que la cantidad de macroceldas, es proporcional al número de pines. En mi caso, solo utilize un 15% de los pins, porque necessitaba mucha cantidad de macrocelas para mi implementación.

Un Saludo.
 
Lo unico que no me gusto de los FPGA y los CPLD es que todos vienen en encapsualdos pocos manegables como SSOP y SOIC y todavias mas diminutos de ahi. Si tienen cualquier duda de como programar en VHDL solo preguntenme.

Saludos
 
hola . bueno pues un coment . del encapsulado pues los dispositivos de avanzada con alta capacidad vienen en ese tipo . no les podes pedir que de pasos atras en fabricación . igual creo q ya no es problema eso . podes usar un starter kit . o diseñar un tarjeta q le dejes la posibilidad de programar .
 
Alguien sabe como manejar, las entradas y salidas analogas de la Spartan 3 Starter kit, es que estoy construyendo un filtro digital y deseo usar los conversores pero no se como meterlos en el codigo gradesco de antemano la ayuda
 
He comenzado a utilizar una tarjeta spartan 3, hasta la fecha solo me he basado en la programacion por modo esquematico me gustaria mucho aprender a programar en modo VHDL, pero por el momento quiciera saber se me pueden ayudar sobre como utilizar o echar a andar los displays de la tarjeta, no se alomejor hacien un contador o algo parecido.
 
Saludos.

Yo tambien estoy interesado en ingresar al mundo de los FPGA's. Por ahora estoy aprendiendo VHDL. Estoy esperando sacar mi tarjeta de credito para comprarme mi Starter Kit.
 
Atrás
Arriba