Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Pld, Spld, Pal, Gal, Cpld, Fpga => Konuyu başlatan: MC_Skywalker - 08 Haziran 2016, 18:07:44

Başlık: VHDL ile 7 Seg
Gönderen: MC_Skywalker - 08 Haziran 2016, 18:07:44
VHDL ile 7 segmet uygulması  deneme çalışması. BASYS 3 üstündeki 4 dijitlik 7 segment'in hepsini kullanarak 4bit sayıcının 7segmette gösterme gerçeklemesi.

http://youtu.be/qUkjNuYoByw (http://youtu.be/qUkjNuYoByw)


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

entity sayac1 is
    Port ( clk : in STD_LOGIC;
          led015 : out STD_LOGIC_VECTOR (15 downto 0));
end sayac1;

architecture Behavioral of sayac1 is
     signal counter: std_logic_vector(3 downto 0):= "0000";
     signal gecici: std_logic_vector(3 downto 0);
     signal pulse : std_logic := '0';
     signal count : integer range 0 to 99999999 := 0;

begin
      process(clk)
     begin
          if clk= '1' and clk'event then
              if count = 99999999 then
                       count <= 0;
                       counter <= counter + 1;
               else
         count <= count + 1;
               end if;
          end if;

     end process;
      gecici <= counter;
     
      process (gecici)
                           
                  begin
                  case gecici is
                       when "0000" =>  led015 <= "0000000000000001";  --0
                       when "0001" =>  led015 <= "0000000000000010";  --1
                       when "0010" =>  led015 <= "0000000000000100";  --2
                       when "0011" =>  led015 <= "0000000000001000";  --3
                       when "0100" =>  led015 <= "0000000000010000";  --4
                       when "0101" =>  led015 <= "0000000000100000";  --5
                       when "0110" =>  led015 <= "0000000001000000";  --6
                       when "0111" =>  led015 <= "0000000010000000";  --7
                       when "1000" =>  led015 <= "0000000100000000";  --8
                       when "1001" =>  led015 <= "0000001000000000";  --9
                       when "1010" =>  led015 <= "0000010000000000";  --10
                       when "1011" =>  led015 <= "0000100000000000";  --11
                       when "1100" =>  led015 <= "0001000000000000";  --12
                       when "1101" =>  led015 <= "0010000000000000";  --13
                       when "1110" =>  led015 <= "0100000000000000";  --14
                       when "1111" =>  led015 <= "1000000000000000";  --15
                       when others =>  led015 <= "0000000000000000";  --Hata         
                       end case;
          end process;
end Behavioral;



bir sonraki adım tarama yöntemiyle 0-9999 sayıcı

Başlık: Ynt: VHDL ile 7 Seg
Gönderen: MC_Skywalker - 10 Haziran 2016, 20:08:39
önce bu videoyu ekleyecektim unutmuşum. çekip ekledim.

SW ile seçilen 4bit değeri 7 segmentte gösteren gerçekleme

http://youtu.be/kC9gGnZeiOI (http://youtu.be/kC9gGnZeiOI)


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

entity SWinBCDto7SEG is
       Port ( sw : in STD_LOGIC_VECTOR (3 downto 0);
             -- led4 : out STD_LOGIC_VECTOR (3 downto 0);     
              seg : out STD_LOGIC_VECTOR (6 downto 0));
end SWinBCDto7SEG;

architecture Behavioral of SWinBCDto7SEG is
       
begin
   
      process (sw)
                             
                  begin
                  case sw is
                  when "0000" =>  seg <= "0000001"; --0 a b c d e f g
                  when "0001" =>  seg <= "1001111"; --1
                  when "0010" =>  seg <= "0010010"; --2
                  when "0011" =>  seg <= "0000110"; --3
                  when "0100" =>  seg <= "1001100"; --4
                  when "0101" =>  seg <= "0100100"; --5
                  when "0110" =>  seg <= "0100000"; --6
                  when "0111" =>  seg <= "0001111"; --7
                  when "1000" =>  seg <= "0000000"; --8
                  when "1001" =>  seg <= "0001100"; --9
                  when "1010" =>  seg <= "0001000"; --A
                  when "1011" =>  seg <= "1100000"; --b
                  when "1100" =>  seg <= "0110001"; --C
                  when "1101" =>  seg <= "1000010"; --d
                  when "1110" =>  seg <= "0010000"; --e
                  when "1111" =>  seg <= "0111000"; --F
                  when others =>  seg <= "1001000"; --Hata         
                  end case;
    end process;                                         
end Behavioral;

Başlık: Ynt: VHDL ile 7 Seg
Gönderen: MC_Skywalker - 08 Ekim 2016, 20:01:39
0-9999 sayıcı yapmak için multuplexer kullanmayı beceremedim. bunun matığını h.ç bilmeyen birine anlatır gibi bana anlatacak biri arkadaş varmıdır?

şimdiden teşekürler
Başlık: Ynt: VHDL ile 7 Seg
Gönderen: alicavuslu - 08 Ekim 2016, 20:54:23
Hocam yapmak istediğiniz şey sayacın her bir rakamını mı göstermek mi?
Başlık: Ynt: VHDL ile 7 Seg
Gönderen: MC_Skywalker - 08 Ekim 2016, 22:04:19
Evet Basys3 üzerindeki 4lü displayi kullanmak için. birçok örnek inceledim kafam karışıt. hepsi farklı teknik kullanmış.

Bir örnekte 200Hz clk ile tetiklenen iki bit sayıcı yapmış onu "case" kullanıp ortak uçların aktivasyonu için kullanmış.  ama sayıların basamaklarıyla nasıl eşlediğini anlaymadım.  Birbaşka örnekte karmaşık bir lojik kombinasyonu yapmış anlmadım.

Başlık: Ynt: VHDL ile 7 Seg
Gönderen: alicavuslu - 08 Ekim 2016, 22:10:42
Aslında yapmak istediğiniz linkteki kronometre uygulaması ile aynı. Yapmanız gereken 4 tane farklı sinyal değeri tutmanız. Kodda bunu port maplarla sağlamakta.  pulse_generator ile sizin ilk display ekranınızın artış miktarı belirleniyor. Yani buradaki süre sonunda siz bir valid sinyali üretiyorsunuz. O sinyal ile birlikte artış yapıyorsunuz. Daha sonra bu display sinyalin in değeri 9'dan büyük olduğunda sıfırlama yapıyorsunuz. Ve yine bir valid sinyali üretiyorsunuz. Sonra diğer basamaktaki sinyali artırıyorsunuz. Bu şekilde tüm hepsini kontrol edebilirsiniz.

http://www.alicavuslu.gen.tr/2016/07/20/dijital-kronometre-uygulamasinin-nexys-4-karti-uzerinde-gerceklenmesi/ (http://www.alicavuslu.gen.tr/2016/07/20/dijital-kronometre-uygulamasinin-nexys-4-karti-uzerinde-gerceklenmesi/)