FPGA ile 0-9999 sayıcı

Başlatan yamak, 26 Ekim 2011, 00:25:47

yamak

Kaç zamandır stm32f4 ile ilgilenmekten,kit alımı olayları falan derken fpga öğrenmeye ara vermiştim.Daha yeni başlayabildim.Bu konuda daha yeni olduğum için böyle basit uygulamalar yapabiliyoru ancak ama yine de yeni başlayanlara faydalı olabileceğini düşündüm.Bu arada kodlarımda bi eksiklik saçma ya da daha kısa yazılabilecek yerler varsa bilen arkadaşların önerilerini bekliyorum.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sayici is
	PORT(C:OUT STD_LOGIC_VECTOR(0 to 6);
		  AN:OUT STD_LOGIC_VECTOR(3 downto 0);
		  LED,LED1: out  STD_LOGIC_VECTOR(3 downto 0);
		  clk:in STD_LOGIC);
end Sayici;

architecture Behavioral of Sayici is
signal out1:std_logic_vector(3 downto 0):=X"1";
signal out2:std_logic_vector(3 downto 0):=X"F";
type seven_segment is array(0 to 9) of std_logic_vector(7 downto 0);
constant eleman:seven_segment:=( (X"3F"),(X"06"),(X"5B"),(X"4F"),(X"66"),
											(X"6D"),(X"7D"),(X"07"),(X"7F"),(X"6F"));
begin
U1:process(clk)
	variable birler,onlar,yuzler,binler:integer range 0 to 9;
	variable delay:integer;
	variable secim:integer range 0 to 4;
	begin
	if(clk'EVENT and clk='1') then
		delay:=delay+1;
		if((delay mod 2**13)=0) then
			if(secim=0) then
			   AN<="1110";
				for index in 0 to 6 loop
					C(index) <= NOT eleman(birler)(index);
				end loop;
			 elsif(secim=1) then
			   AN<="1101";
				for index in 0 to 6 loop
					C(index) <= NOT eleman(onlar)(index);
				end loop;
			 elsif(secim=2) then
			   AN<="1011";
				for index in 0 to 6 loop
					C(index) <= NOT eleman(yuzler)(index);
				end loop;
			  elsif(secim=3) then
			   AN<="0111";
				for index in 0 to 6 loop
					C(index) <= NOT eleman(binler)(index);
				end loop;
			 end if;
				secim:=secim+1;
			if(secim=4) then
		      secim:=0;
			end if;
		end if;
		if(delay>8000000) then
		   delay:=0;
		   birler:=birler+1;
			if birler=10 then
				birler:=0;
				onlar:=onlar+1;
				if onlar=10 then
				   onlar:=0;
				   yuzler:=yuzler+1;
				   if yuzler=10 then
						yuzler:=0;
						binler:=binler+1;
						if binler=10 then
						   binler:=0;
						end if;
				   end if;
				end if;
			end if;
		end if;
	end if;
end process;
U2:process (clk)
   variable say,sira:integer;
   begin
   if (clk'EVENT and clk='1') then
   say:=say+1;
      if (say>10000000) then
			say:=0;
			out1<=out1(2 downto 0)&'0';
		   LED<=out1;
		   if sira>=3 then
			   out1<='0'&out1(3 downto 1);
			   LED<=out1;
		   end if;
		   sira:=sira+1;
		   if sira=6 then 
			   sira:=0;
         end if;
       end if;
	end if;
end process;
U3:process (clk)
   variable say,sira:integer;
   begin
   if (clk'EVENT and clk='1') then
       say:=say+1;
       if(say>20000000) then
			 say:=0;
		    out2<='0'&out2(3 downto 1);
		    LED1<=out2;
		    if sira>=3 then
			    out2<=out2(2 downto 0)&'0';
			    LED1<=out2;
		    end if;
		    sira:=sira+1;
		    if sira=6 then
			    sira:=0;
		    end if;
      end if;
   end if;
end process;
end Behavioral;


aykut54

Merhaba hocam

Uygulamanız gerçekten çok guzel:) Benim gibi FPGA anlamayan biri için:)

Kullanmış olduğunuz kitin fiyatı nedir nereden temin ettiniz?

Aynı zamanda burda vermiş olduğunuz kodu hangi programda  yazıp derlediniz. Başka söylemek istediğim ise burda verdiğiniz uygulamayı

şematik ortamda proteusta olduğu gibi simüle edebilirmiyiz?




yamak

Hocam kitin fiyatı normalde 149$ ama akademik indirimle 99$ dolar oldu fakat kargo parasına 37$ verdim toplamda 136$ a mal oldu bana.Digilentten aldım.
Kullandığım program da xilinx ise.Malesef proteusta simulasyon yapılmıyo modelsim gibi programlar var onlarla simulasyon yapılabiliyo fakat o da proteustaki gibi değil sadece çıkışlardaki sinyalleri gözlemleyebiliyosun.

scaemteitn

Aslında Tina diye bir program var ama proteus kadar gelişmiş gelmedi bana. Yazdığınız kodlara göre size bir aygıt oluşturuyor. Oluşturulan aygıta çıkış elemanı bağlayabiliyorsunuz.  Yani görsel olarak bir deneme imkanı veriyor.

yamak

Evet tinayı ben de duydum ama nasıl olduğunu bilmiyorum hiç kullanmadım daha önce

scaemteitn