Diseño de circuitos digitales en una FPGA

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
 
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.................
 
Voy a colocar varios manuales los cuales he leido. Yo tambien estoy comenzando y estos fueron los que me recomendaron.
 

Adjuntos

  • tutorial_de_vhdl_272.pdf
    360.4 KB · Visitas: 359
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.

Código:
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.
 
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
 
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.
 
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
 
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
 
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
 
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
 
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
 
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.
 
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
 
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
 
Atrás
Arriba