Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Pld, Spld, Pal, Gal, Cpld, Fpga => Konuyu başlatan: metaltrrocker - 03 Şubat 2013, 01:06:04

Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 03 Şubat 2013, 01:06:04
Arkadaşlar marhaba basys2 fpga kitine 4-bit up counter kodlarını yazdırmaya çalışıyorum.ucf dosyalarıyla daha önce çalışmadım hiç.labda direk pinleri kod yazmadan atıyorduk ama şimdi yapamadım.Ama ucf dosyasını yazdım basit olarak ledlerden program çalışmasını izliyorum burda sıkıntı yok ancak,7segment olarak görmek istediğimde ,pinleri atayamadım .Internette de bununla ilgili pek doküman bulamadım basys2'nin referans manual'üne baktım ama düzgün bir bilgi bulamadım lütfen yardımcı olun.

mesaj birleştirme:: 03 Şubat 2013, 01:19:32

Bu normal çalışma videosu

Basys2-4 bit Counter (http://www.youtube.com/watch?v=tKAlUihF0vE#)



mesaj birleştirme:: 03 Şubat 2013, 01:22:41

Ucf kodları


NET "clk_m" TNM_NET = "clk_50";
TIMESPEC "TS_0" = PERIOD "clk_50" 5 ns HIGH 50%;
NET "Q(3)" LOC="G1";
NET "Q(2)" LOC="P4";
NET "Q(1)" LOC="N4";
NET "Q(0)" LOC="N5";
NET "reset" LOC="G12";


clk_divider kodlarım
--clk  bölücü kodları--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity clk_divider is
    Port ( clk_50 : in  STD_LOGIC;--50Mhz giriş clk
           clk1 : out  STD_LOGIC--çıkış clk
           );
end clk_divider;

architecture Behavioral of clk_divider is
     --f_div=50MHz/(2^24)=2.98Hz=>1/2.98=0.34sn
    signal clk_divider:std_logic_vector(23 downto 0):=x"000000";

begin
   
    clk_division : process (clk_50, clk_divider)
    begin
        if (clk_50 = '1' and clk_50'event) then
            clk_divider <= clk_divider + 1;
        end if;
    clk1 <= clk_divider(23);
     end process;
 
   
end Behavioral;



4-bit Counter kodlarım
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date:    19:11:57 02/02/2013
-- Design Name:
-- Module Name:    basys2 - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
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 basys2 is
    Port (
        clk_m : in STD_LOGIC;
        Q    : inout  STD_LOGIC_VECTOR(3 downto 0);
  reset: in STD_LOGIC
 
);
end basys2;

architecture Behavioral of basys2 is

COMPONENT clk_divider
PORT(
clk_50 : IN std_logic;         
clk1 : OUT std_logic
);
END COMPONENT;

signal sayac:std_logic_vector(3 downto 0);
signal clk_c:std_logic;
begin
process(reset,clk_c)
begin

if(reset='1') then
sayac<="0000";
elsif rising_edge(clk_c) then
sayac<=sayac+"0001";
end if;

end process;
Q<=sayac;
Inst_clk_divider: clk_divider PORT MAP(
clk_50 => clk_m,
clk1 => clk_c
);
end Behavioral;


mesaj birleştirme:: 03 Şubat 2013, 01:23:34

Bu da proje klasörüm
https://www.dropbox.com/s/gezq5jq375fbm4r/basdeneme1.rar (https://www.dropbox.com/s/gezq5jq375fbm4r/basdeneme1.rar)
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 03 Şubat 2013, 22:03:14
yardım edebilecek kimse yokmu?
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: speak48 - 03 Şubat 2013, 22:08:16
sorun neydi
herşey tamammış gibi görüntü veriyoda
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 03 Şubat 2013, 22:30:11
hocam yazıda da dediğim gibi 7 segment olarak yapamıyorum ledlerle yaptığımı.
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: speak48 - 03 Şubat 2013, 22:46:01
sorun kısım tasarımdamı sentezdemi
tasarımda ise cnt registerini dekode edicen 7segmene göre.
sentezde ise pin atamasınında illa text ile yapmaya gerek yok ellle tek tek gui aracılığıyla atanabilir.
altera pinplanerde xilinx planahead olması lazım presentezden sonra
io pin planning  iş akışı iş göreccektir.
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 03 Şubat 2013, 23:00:59
Tasarım kısmında da sorun vardı,clk bölücü den çıkan yeni clk yı(clk1)  basys2.vhd de kullanmak isteyince clk ile ilgili hata verdi.galiba clocklar çakıştı yada buna benzer bir hata.Sonuç olarak hatayı çözemedim.aynı dosyada component almadan farklı clock kullanamıyoruz galiba.Hata üstüne hata verdi sinir etti beni nette de bişey bulamadım.
şimdi sıfırdan başlıyorum.
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 04 Şubat 2013, 17:27:08
xilinx in 10.1 sürümünü kullanıyordum planahead yoktu.O yüzden enson sürümünü indirip kurdum decode ile 7 segmente sayac'ı gönderdim.Ancak plahahead da tek bir 7 segment seçme olayını bulamadım.tüm segmentlerde sayıyor.Bu sorunu nasıl aşabilirim?
ekran görüntüsü aşağıdadır.
[IMG]http://img338.imageshack.us/img338/3929/20130204152059.jpg[/img] (http://imageshack.us/photo/my-images/338/20130204152059.jpg/)


[IMG]http://img442.imageshack.us/img442/8099/20130204152110.jpg[/img] (http://imageshack.us/photo/my-images/442/20130204152110.jpg/)

Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: speak48 - 04 Şubat 2013, 19:01:27
board fpgadaki io sınırından dolayı 7segmetler paralel ayrı ayrı değil seri bağlanmıştır.
yani data portu ortak ama hangi segmentin yanacağı an adlı 4 çıkışla kontrol edilmekte
an yi seçerek hangisini yakacağına karar veririsin.
tüm kontrol ise tarama olayı ile kontrol edilir.
gözün algılamayacağı hızda sırayla 7segmentlere data verilip kontrol seçilir.
şematik ve usermanualde görebilirsin.
Başlık: Ynt: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 04 Şubat 2013, 19:21:05
Anladım. O zaman AN ye lojic olarak bir deger atarsak sorun çözülür
Başlık: Ynt: Ynt: Basys2-7 segment sorunu
Gönderen: metaltrrocker - 07 Şubat 2013, 02:31:54
Peki. Bu seçimleri yaparken,an1 ve an0 segmentlerine farklı değerler göstermek istediğim de ne yapmam gerekiyor.bu kısımda kafam karıştı biraz
Başlık: Ynt: Basys2-7 segment sorunu
Gönderen: speak48 - 07 Şubat 2013, 02:40:09
tarama demiştim

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity disp_mux is
   port(
      clk, reset: in std_logic;
      in3, in2, in1, in0: in std_logic_vector(7 downto 0);
      an: out std_logic_vector(3 downto 0);
      sseg: out std_logic_vector(7 downto 0)
   );
end disp_mux ;

architecture arch of disp_mux is
   -- refreshing rate around 800 Hz (50MHz/2^16)
   constant N: integer:=18;
   signal q_reg, q_next: unsigned(N-1 downto 0);
   signal sel: std_logic_vector(1 downto 0);
begin
   -- register
   process(clk,reset)
   begin
      if reset='1' then
         q_reg <= (others=>'0');
      elsif (clk'event and clk='1') then
         q_reg <= q_next;
      end if;
   end process;

   -- next-state logic for the counter
   q_next <= q_reg + 1;

   -- 2 MSBs of counter to control 4-to-1 multiplexing
   -- and to generate active-low enable signal
   sel <= std_logic_vector(q_reg(N-1 downto N-2));
   process(sel,in0,in1,in2,in3)
   begin
      case sel is
         when "00" =>
            an <= "1110";
            sseg <= in0;
         when "01" =>
            an <= "1101";
            sseg <= in1;
         when "10" =>
            an <= "1011";
            sseg <= in2;
         when others =>
            an <= "0111";
            sseg <= in3;
      end case;
   end process;
end arch;