# Diseño de circuitos digitales en una FPGA



## andres7_83 (Mar 1, 2007)

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


----------



## Estudiante_Vitalicio (Mar 3, 2007)

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.


----------



## andres7_83 (Mar 3, 2007)

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


----------



## chuko (Mar 3, 2007)

Les paso un libro interesante para VHDL, se llama VHDL Cookbook

http://tams-www.informaciónrmatik.uni-hamburg.de/vhdl/doc/cookbook/VHDL-Cookbook.pdf

Espero que "ahora" no me salgan "algunos abogados" conque esta información es ilegal. (MDC)


----------



## azendere (Mar 6, 2007)

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


----------



## sromeros (Mar 15, 2007)

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


----------



## Antonio_Maza (Abr 27, 2007)

Quisiera ayuda acerca del Spartan 3E Starter Board que comercaliza digilentinc y si con ese es suficiente para poder iniciar en este mundo de los FPGA; y me gustaria sebaer acerca de los pedidos a esta compañia(principalmente si hacen envios al extranjero,México)

 Acepto toda la ayuda y sugerencias que me puedan brindar acerca del tema.

Gracias

http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&Nav2=Programmable&Prod=S3EBOARD


----------



## sromeros (May 2, 2007)

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


----------



## azendere (May 15, 2007)

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


----------



## sromeros (May 15, 2007)

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


----------



## azendere (May 15, 2007)

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.


----------



## azendere (Jun 18, 2007)

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.


----------



## z3po (Jul 23, 2007)

¡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**


----------



## MkN (Ago 2, 2007)

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!


----------



## Paloky (Sep 12, 2007)

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.


----------



## aerodesliza (Sep 13, 2007)

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


----------



## gueguin (Nov 1, 2007)

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 .


----------



## Juggler_Borbon (Nov 5, 2007)

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


----------



## joeguco (May 23, 2008)

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.


----------



## yukardo (May 23, 2008)

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.


----------



## rojo_007 (Jun 18, 2008)

Estoy en busca de tutoriales, manuales o documentación alguna que me permita poder descargar los programas a la tarjeta del starter kit para el Cyclone II de altera, tanto al FPGA  como a la memoria flash. Personalmente he trabajado con Xilinx y la metodologia de descarga y ejecución es casi intuitiva, cosa que no sucede con Altera. 
Los manuales y Handbooks, que la empresa proporciona, no me han permitido poder bajar ni un solo programa, por mas sencillo que este sea, si tienen esta documentacion o saben de un sitio donde venga la información paso a paso se los agradeceré.

saludos


----------



## Chimi (Jun 25, 2008)

Hola a todos.He comenzado a utilizar una tarjeta spartan 3E que me ha prestado mi faultad ya que nadie tene idea de como utilisarla, me he puesto a ivertigar y hasta la fecha solo me he basado en la programacion por modo esquematico. me gustaria aprender a programar en  VHDL.la pregunta es.¿ que bibliografia me recomiendan para arrancar o si alguno tiene un pdf y me lo puede mandar se lo agradesco 


            Desde ya gracias.................


----------



## yukardo (Jun 25, 2008)

Voy a colocar varios manuales los cuales he leido. Yo tambien estoy comenzando y estos fueron los que me recomendaron.


----------



## yukardo (Jun 25, 2008)

Si quieres pasame tu correo y te los envio porq son mayores a 500 KB y no los puedo subir.


----------



## Andres Cuenca (Jun 25, 2008)

yukardo dijo:
			
		

> Si quieres pasame tu correo y te los envio porq son mayores a 500 KB y no los puedo subir.



Hola yukardo, porque mejor no los envías al correo del foro para compartirlos con todos.

forosdeelectronica[arroba]gmail.com

Saludos.


----------



## serrano_10 (Jul 1, 2008)

Hola. Espero puedan ayudarme. Estoy haciendo un proyecto con FPGA. Debo hacer el protocolo SPI y SD para tarjetas SD con el Xilinx. Uso una FPGA Spartan II XC2S200. Por ahora estoy haciendo pequeñas pruebas. Les pongo el código que llevo exo. Es poco, pero aún estoy recopilando información. 


```
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Library UNISIM;
use UNISIM.vcomponents.all;

entity SD_Detection is
    port (clk: in std_logic; cs_cd_dat3,cmd_di,dat0_do,dat1,dat2:inout std_logic; salida: out std_logic_vector(6 downto 0));
end SD_Detection;

architecture Sequence of SD_Detection is

signal cmd_0 : std_logic_vector(47 downto 0) := X"400000000095"; --     "0x40,0x00,0x00,0x00,0x00,0x95"
--"Respuesta = 0x01 : Tarjeta en modo IDLE"
signal cmd_41: std_logic_vector(47 downto 0) := X"4100000000FF";	--     "0x41,0x00,0x00,0x00,0x00,0xXX"
--"Respuesta = 0x00 : Tarjeta está lista"	
signal cmd_55: std_logic_vector(47 downto 0) := X"7700000000FF";  --     "0x77,0x00,0x00,0x00,0x00,0xXX"
--"Respuesta = 0x00 : Tarjeta Kingstone no necesario"
signal cmd_58: std_logic_vector(47 downto 0) := X"7A00000000FF";  --      "0x7A,0x00,0x00,0x00,0x00,0xXX"
--"Respuesta = 0x00 : Tarjeta preparada para 3,3V"

signal clk_sdi, locked, fin, reset, cmd_dii, cs_cd_dat3i, clk_sd_pos_edge, clk_sd_neg_edge : std_logic;

signal response : std_logic_vector(7 downto 0):=X"00";
signal salidai : std_logic_vector(6 downto 0);
signal flancos_entr : integer range 0 to 48;
signal flancos_resp : integer range 0 to 8;
signal patron : std_logic_vector(3 downto 0);
signal count: integer range 0 to 90;
signal init_sd, init_resp: boolean;
	
	
begin	
	
-- CLKDLL: Delay Locked Loop Circuit for Virtex and Spartan-II (Low frequency)

CLK_SDCARD : CLKDLL
         generic map (
	CLKDV_DIVIDE => 4.0, --  Divide by: 1.5,2.0,2.5,3.0,4.0,5.0,8.0 or 16.0
	DUTY_CYCLE_CORRECTION => TRUE, --  Duty cycle correction, TRUE or FALSE
	FACTORY_JF => X"C080",  --  FACTORY JF Values
	STARTUP_WAIT => FALSE)  --  Delay config DONE until DLL LOCK, TRUE/FALSE
	port map (
	--CLK0 => CLK0,     -- 0 degree DLL CLK ouptput
	--CLK180 => CLK180, -- 180 degree DLL CLK output
	--CLK270 => CLK270, -- 270 degree DLL CLK output
	--CLK2X => CLK2X,   -- 2X DLL CLK output
	--CLK90 => CLK90,   -- 90 degree DLL CLK output
	CLKDV => clk_sdi,   -- Divided DLL CLK out (CLKDV_DIVIDE)
	LOCKED => locked, -- DLL LOCK status output				--CLKFB => clk_sd_back,   -- DLL clock feedback
	CLKIN => clk,   -- Clock input (from IBUFG, BUFG or DLL)
	RST => reset        -- DLL asynchronous reset input
	);
	
HUELLA:	process
	begin
	wait until clk'event and clk='1';
	patron <= clk_sdi & patron(3 downto 1); -- Para observar flancos de clk.
               end process;
            
				
clk_sd_neg_edge <= '1' when patron(1 downto 0)= "01" else '0';
clk_sd_pos_edge <= '1' when patron(1 downto 0)= "10" else '0';
	
process_count: process -- contando flancos de reloj. Dejamos unos 80 flancos para inicializar la tarjeta. (Min 74)
	begin
	wait until clk_sdi'event and clk_sdi = '1';
	if (reset = '1') then
	   count <= 0;
	   init_sd <= false; 
	else
	   count <= count + 1;
	   if count = 80 then
	      init_sd <= true;
	   end if;
	end if;
              end process;
	
	
INTRO_CMD_0:process -- Comando de inicialización de tarjeta. Según esté CS, se irá a SPI mode o SD mode. 
	begin
	wait until clk_sdi'event and clk_sdi = '1' and init_sd = true;
	if reset = '1' then 
	   fin <= '1';
                   flancos_entr<=  0 ; 
	   cs_cd_dat3i<= '0'; -- directos a spi mode (Por ahora solo este modo)		   cmd_dii	<= 'H';
	   dat0_do<= 'H';
	   dat1<= 'H';
	   dat2<= 'H';					
	else
	    if flancos_entr < 48 and ((fin = '1') or (fin = 'U')) then -- la U está pq no tengo reset inmediato.
	       cmd_dii <= cmd_0(47);
	       cmd_0 <= cmd_0(46 downto 0) & '0';
	       flancos_entr <= flancos_entr + 1;
	    else
	       fin <= '0';
	       if flancos_entr = 48 then
	          cs_cd_dat3i	<=	'1';
	          flancos_entr <= 0;
	       end if;	
	     end if;	
	end if;
	end process;-- Tengo que hacer una tabla con todos los comendos que uso. Tb necesito comprobar que el comando
-- que he introducido es el correcto.
					
cmd_di<=cmd_dii;
cs_cd_dat3<=cs_cd_dat3i;
							
WAIT_RESPONSE:	process
		begin
		wait until clk_sdi'event and clk_sdi = '1' and init_sd = true;
		if reset = '1' then 
		flancos_resp <= 0; 
		init_resp <= false; 
		else
                	if cs_cd_dat3 = '0' and fin = '0' and flancos_resp < 8 then
	                init_resp <= TRUE;
		response	 <= response (6 downto 0) & cmd_di;
		flancos_resp <= flancos_resp + 1;
		end if;
		end if;
		end process;

WHAT_RESPONSE:	process
		begin
		wait until clk_sdi'event and clk_sdi = '1' and init_resp = true;
		if reset = '1' then
		-- los que sea
		else
		   if response(7) = '0' then
    	                      if response = "00000001" then
		         salidai<="1111001";   --1 (Veremos un 1 en los displays)
			-- estamos en idle state
		      elsif response = "00000010" then
			salidai<="0100100";   --2 (Veremos un 2 en los displays)...
			-- estamos en erase reset
		      elsif response = "00000100" then
			salidai<="0110000";   --3
			-- estamos en illegal command
		      elsif response = "00001000" then
			salidai<="0011001";   --4
			-- estamos en "COMMAND CRC ERROR"
		      elsif response = "00010000" then
			salidai<="0010010";   --5
			-- estamos en "ERASE SEQUENCE ERROR"
		      elsif response = "00100000" then
			salidai<="0000010";   --6
			-- estamos en "ADDRES ERROR"
		      else 
		                salidai<="1111000";   --7
			-- estamos en "PARAMETER ERROR"
		      end if;
		else
		salidai<="0000000";   --8
		-- error en la respuesta, el bit 7 debe ser 0
		end if;
	            end if;
	end process;

salida<=salidai;
	
end Sequence;
```


Necesito saber más comandos (CMD) y si os parece bien el código para ver si me responde la SD. En la prueba inicial el ppal problema que encontre (bastante grave por cierto) fue que no se como hacer que saquen 3,3V por uno de los pines de expansión de la FPGA, concretamente por el pin 3 del puerto A2. Según las especificaciones dice que está conectado a VCCO, que son 3,3 V, pero no me sale nada. ¿He de activarlo?si es así, ¿Como se hace? No encontré nada en la documentación.

Gracias por anticipado.


----------



## José G. (Jul 23, 2008)

hola, esto del tema de los FPGA me ha llamado enormemente la atención. Estoy empezando a aprender las capacidades de estos dispositivos y son verdaderamente grandiosas. Tengo el kit de desarrollo Spartan 3 LC de Xilinx que usa un FPGA XC3S400, PQ208 y lo estoy programando con el ISE 9.1i. Hasta ahora he seguido las instrucciones del tutorial del ISE, el cual consta del diseño de un contador ascendente/descendente de 4 bits. El contador será ascendente si por una entrada existe un nivel alto y será descendente si por la misma entrada (dirección) hay un nivel bajo. Tiene una entrada de reloj y 4 salidas que deberian ir a 4 leds.(un led por salida).

Todo ha ido bien, pero en el momento de asignar los pines de entrada y de salida al FPGA, puedo cambiar el banco pero no el pin del banco. 

En el tutorial dice que la entrada del clock debe ir al pin 79, en el banco 4 y toma es el pin 80. La entrada Dirección va a un boton push puede ser el pin 22 o el 24 del banco 7 y toma es el pin 26. los leds, es decir, las salidas deben ir conectados a los pines 20, 21, 18 y 19 para activar los leds que trae el kit, pero no me toma esos valores.

No puedo modificar el número del pin al que yo quiero conectar cada entrada o salida. Por favor, si alguien puede ayudarme le agradecería de antemano para ver si puedo continuar con el tutorial y poder cargar el programa al FPGA.

Muchas gracias de antemano a quien me pueda dar una solución


----------



## ruben852 (Ago 28, 2008)

Hola, me estoy iniciando en esto de las FPGA y no se bien como empezar, quiero hacer un demodulador QPSK con decodificacion Viterbi para un bitrate de 2 Mbps Para mi proyecto de fin de carrera, y mi duda es que kit de FPGA me recomiendan? ya que no tengo idea de como hago para saber que velocidad de reloj y cantidad de celdas necesito para elegir uno, otra cosa, la señal modulada es de 36MHz, que conversor A/D me recomiendan?.
Desde ya muchas gracias y el foro esta muy bueno.
Saludos.


----------



## fruiz (Sep 11, 2008)

Hola, la verdad es que ando algo perdido con mi proyecto, este consiste en realizar un core de conexion de un ADC al bus del Picoblaze. Por ejemplo el ADC0801. Las 3 partes de mi proyecto son:
1. conectar un ADC de 3.3V del laboratorio a la plataforma
2. Hacer un core HDL que conecte el HW al bus del Picoblaze
3. Hacer un programa en Assembler que demuestre que todo está bien conectado y funcionando.

Si me pudieses guiar con algun ejemplo especialmente para la parte 2, sería ideal.

Muchas gracias

Felipe


----------



## guillelio (Dic 23, 2008)

Buenos dias gente, mi nombre es Guillermo LIO y soy nuevo en el foro. El motivo de mi mensaje es contartes que estoy empezando a averiguar como hacer un  kit de desarrollo para algun DSP o FPGA (todavia no defini ninguno). La idea es hacer una placa mas bien didactica para poder dejarla en la facultad para que los alumnos la usen y luego la reproduzcan para el dictado de alguna materia de programación ya que todo lo que tenemos es muy obsoleto y en malas condiciones.
Ya que veo que ustedes han trabajado con FPGA les queria preguntar si no me pueden pasar algun contacto o información como para realizar la placa o lo que crean que puedan facilitarme, todo será de gran ayuda.
Bueno desde ya muchas gracias.

Guillermo


----------



## rocker (Feb 11, 2009)

Saludos, soy nuevo en este foro y espero despejar dudas. Tengp un proyecto que utiliza una  fpga spartan 3e de xilinx, uso una celda de carga como sensor y tengo hecho el acondicionamiento de señal pero tengo dudas si tengo que usar un ADC adicional o la spartan 3e tiene un ADC incluido el cual puedo utilizar y ya no implementar  uno. Gracias


----------



## kay1987 (Feb 11, 2009)

Hola!
Buenas soy nuevo por aqui.
Escribo porque tengo que hacer el proyecto fin de carrera con una Espartan 3e; pero no se lo que
hacer. Sugiero que me digais ideas para hacer el proyecto.
Un saludo


----------



## Toño (Abr 27, 2009)

me podrian decir donde puedo comprar un CPLD o un FPGA, soy de mexico, he leido que xilinx, y ya estuve viendo, pero no entiendo si en la compra de ellos ya viene el programador...de antemano gracias


----------



## yukardo (Abr 28, 2009)

Toño lo que ellos venden son unos kit de desarrollo. Esto es una tarjeta con un FPGA conectado a varios perifericos o con conectores para que agregues perifericos. Con esa tarjeta puedes programar el FPGA que viene incorporado y hacer pruebas.


----------



## tatan15 (Jul 21, 2009)

buenas ,que tal saben tengo que hacer una calculadora de 4 operaciones en distintas bases (decimal, binario y haxadecimal)  y tengo que utilizar el spartan 3e , por fa alguna ayuda


----------



## yukardo (Jul 21, 2009)

Para eso necesitas tener un teclado hexadecimal. Despues seria meterle al VHDL.


----------



## tatan15 (Jul 22, 2009)

claro pero como se haria el vhdl esa es mi pregunta para hacer la calculadora porque todo radica en la calculadora en su vhdl


----------



## yukardo (Jul 22, 2009)

Primero necesitamos saber la conexion del teclado y como identificar los numero y las letras en caso de que sea un numero hexadecimal.


----------



## adrianjpc (Ago 6, 2009)

hola a todos tengo el kit de altera Cyclone 2 FPGA 

eh querido programar un reloj con un contador pero siempre me marca error cuando le incremento 1 a la variable ejemplo
dato: out std_logic_vector(6 downto 0);

dato <= dato+1; pero nunca lo hace en el simulador no me marca error pero no lo hace 
 lo simule con leds como le puedo hacer para que lo incremente en uno esa variable 


espero y me ayuden saludos a todos


----------



## ufernandez (Oct 4, 2009)

simplemete tienes que cambiar esto:
dato : inout std_logic_vector(3 downto 0));

espero y te sirva


----------



## LING (Nov 2, 2009)

Hola   seguro esto del tema fpga esta rebueno me podrian decir por favor cual seria el el kit para empezar a  trabajar como practicas bueno y como adquirilo ....   Estoy en peru


----------



## dimitridkn (Nov 5, 2009)

Hola, alguien de Mexico conoce alguna tienda que venda tarjetas de desarrollo, programadores, sensores, etc. Saludos


----------



## jaimepsantos (Nov 7, 2009)

En distele quizas encuentres alguno ahi venden muchos kits fijate en su pagina web


----------



## renatopa (Nov 9, 2009)

amigo yo necesito pero manuales de ahdl o minimo algunos problemas propuestos, porque veo que no hay mucha informacion. por favor haber si alguien podria tener y hacerme el favor de subir si quieren algo de los que tengo me avisan y los subo.


----------



## qui_que_87 (Mar 8, 2010)

HOla espero que alguien me pueda dar informacion con que software puedo programar una espartan 3e


----------



## jaimepsantos (Mar 9, 2010)

Con el ise de xilinx me parece que van en el 11.4 solo te registras y listo


----------



## Justina (Ago 13, 2010)

Hola!!
Estoy haciendo un proyecto que consiste en comunicar la FPGA con una SD con VHDL,he visto tu código y me ha servido de alguna ayuda pero tengo algunas dudillas. En este momento quiero mandar el comando CMD0 y ver que recibo la respuesta correctamente pero no se como hacerlo, la linea CMD es de un solo bit y el comando tiene 47, entonces no se como mandarlo bit a bit, es que la SD ya tiene una especia de FIFO o algo así que va acumulando los bit o sino según el código que te he visto solo se quedaría con el ultimo bit mandado no?
Tampoco se como reconoce CMDO, es decir ,hablando en binario que es lo que le estoy mandando, o es que solo con mandar CMDO ya lo reconoce automáticamente, en fin estoy un poco liada y si pudieras aclararme algo o mandarme alguna documentación o código que me lo resuelva te lo agradecería mucho.


----------



## corercme (Oct 11, 2012)

dimitridkn dijo:


> Hola, alguien de Mexico conoce alguna tienda que venda tarjetas de desarrollo, programadores, sensores, etc. Saludos



En robodacta se pueden comprar los fpga nada mas que son bajo pedido y te tardan como un mes para entregartelos.


----------



## Azlan (Oct 29, 2012)

Hola estoy empezando a incursionar en el mundo de fpga pero desafortunadamente cuento con una fpga de altera la cual se programa mediante puerto paralelo y necesito un circuito del *JTAG(Byteblaster MV)*, he encontrado algunos y los he diseñado en proteus y pcb wizard manualmente para quemar la tarjeta pero no funciona si alguien tiene diseñado el circuito en alguno de estos simuladores listo para quemar se lo agradeceria mucho.


----------

