Ödev 1 : Karaşimşek

Başlatan alicavuslu, 20 Ekim 2015, 21:41:24

alicavuslu

Karaşimşek için aşağıdaki kod üzerinde geliştirme yapmaya devam edilinebilir. Bu kod 1 saniye aralıklar ile sola kayma işlemi yapmaktadır.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity kara_simsek is
   Port (
      in_clk : in std_logic;
      out_leds : out std_logic_vector(7 downto 0)
   );
end kara_simsek;

architecture Behavioral of kara_simsek is

   constant CLK_PERIOD : integer := 10; -- ns cinsinden
   constant NEW_CLK_PERIDO : integer := 1_000; -- ms cinsinden
   constant CLK_COUNT_PARAM : integer := (NEW_CLK_PERIDO * (10**6)) /  (2 * CLK_PERIOD);
   
   signal r_clk_new : std_logic := '0';   
   signal r_leds : std_logic_vector(7 downto 0) := X"01";
   signal r_clk_count : integer := 0;

begin

   out_leds <= r_leds;

   process(in_clk)
   begin
      if rising_edge(in_clk) then
         if r_clk_count = CLK_COUNT_PARAM - 1 then
            r_clk_count <= 0;
            r_clk_new <= not r_clk_new;
         else
            r_clk_count <= r_clk_count + 1;
         end if;
      end if;
   end process;
   
   process(r_clk_new)
   begin
      if rising_edge(r_clk_new) then
         r_leds <= r_leds(r_leds'high - 1 downto 0) & r_leds(r_leds'high);
      end if;
   end process;

end Behavioral;

MC_Skywalker

#1
Ucundan azcık kopya çektim :)

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

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

architecture Behavioral of KaraSimsek is

    constant SYS_CLK_PERIOD : integer := 10; -- ns cinsinden
    constant NEW_CLK_PERIOD : integer := 100_000_000; -- ns cinsinden
    constant CLK_COUNT : integer := NEW_CLK_PERIOD / (2 * SYS_CLK_PERIOD);
         
    signal counter: std_logic_vector(3 downto 0):= "0000";
    signal gecici: std_logic_vector(3 downto 0);
    signal clk_new : std_logic := '0';
    signal count : integer range 0 to 99999999 := 0;
    signal r_led015 : STD_LOGIC_VECTOR (15 downto 0):= X"0001";
    signal fwd : std_logic := '1';

begin
     process(clk)
     begin
        if clk= '1' and clk'event then
            if count = CLK_COUNT - 1 then
                count <= 0;
                clk_new <= not clk_new;
            else
                count <= count + 1;
            end if;
        end if;
     end process;
     
     process(clk_new)
     begin
        if rising_edge(clk_new) then
            if (fwd = '1') then
                r_led015 <= r_led015(14 downto 0) & r_led015(15);
                    if (r_led015 = X"4000") then
                                fwd <= '0';
                    end if;
             else
              r_led015 <= '0' & r_led015(15 downto 1);
             if (r_led015 = X"02") then
                  fwd <= '1';
             end if;
            end if; 
        end if;
     end process;
     led015 <= r_led015;
end Behavioral;


https://youtu.be/rmpanx5cP8U




alicavuslu

Ellerinize sağlık Hocam. Güzel olmuş...

MC_Skywalker

Hocam teşekürler yardımlarınız için.

Not: Video'yu değiştirdim :)

JOKERAS

Selam,

Ne zaman Karaşimşek lambası görsem kendimi alamıyorum,hatırası büyüktür bende.

Güzel olmuş, 10 numara 4 yıldız
Neden 4 yıldız?

Kuyruklu orijinal Karaşimşek olsaydı 5 yıldız olacaktı:)
Bunu kuyruklu yaparsanız harika olur.



ipek

ilgi ile izliyorum.hocam  5'li dizi ile kaymalı filmdeki aslı öyle idi.

Cylon_Data:
    LDATA 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0
    LDATA 0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0
    LDATA 0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0
    LDATA 0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0
    LDATA 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0
    LDATA 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0
    LDATA 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0
    LDATA 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0
    LDATA 0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0
    LDATA 0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0
    LDATA 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0
    LDATA 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1

JOKERAS

İpek usta bu yöntem aldatmaca ama.
Aslı öyle değil!



MC_Skywalker

PWM ile yapınca tıpkı dizideki gibi oluyor.

JOKERAS

Alıntı yapılan: MC_Skywalker - 21 Ekim 2015, 13:13:13
PWM ile yapınca tıpkı dizideki gibi oluyor.
Tamam işte bende onu diyorum.
Öyle yapsaydınız 5 yıldız olurdu onu demek istemiştim.
Hadi yapın bizde nemalanalım :)

alicavuslu

Onu daha sonraki ödevlerde verelim. Güzel fikir...

Firzen

Alıntı yapılan: JOKERAS - 21 Ekim 2015, 13:10:59
İpek usta bu yöntem aldatmaca ama.
Aslı öyle değil!


Aslına bakarsan aldatmaca değil bu sisteme instantiation deniliyor PortMap metodu ile 3to8 gibi mux veya demux yapabilirsin.

mesaj birleştirme:: 21 Ekim 2015, 19:26:19

Alıntı yapılan: alicavuslu - 21 Ekim 2015, 13:31:35
Onu daha sonraki ödevlerde verelim. Güzel fikir...

hocam hem PWM hemde kayar sistem biraz sanki ağır olur gibi :)
Kararsız...

JOKERAS

Yok Firzen,Bence Aldatmaca o.
Kuyruk efektini vermek için uygulanmış bir taktik.
https://www.youtube.com/watch?v=-O6kMYTRyFY
Orj olan bu videodaki gibi.




alicavuslu

#13
Şöyle düşünürsek 16 bitlik buffer tanımladık. Tanımlama işlemlerinde ilk 3  biti 1 olana kadar kaydırma yapmayacağız. Yani 1 ekleyeceğiz. Daha sonra 0 ekleyeceğiz. Bu şekilde kuyruk efektide eklenmiş olur. Ama onunda sırası gelcek :)

if count < 3 then
    r_leds <= r_leds(r_leds'high - 1 downto 0) & '1';
else
    r_leds <= r_leds(r_leds'high - 1 downto 0) & '0';
end if;

Firzen

Alıntı yapılan: JOKERAS - 21 Ekim 2015, 19:39:59
Yok Firzen,Bence Aldatmaca o.
Kuyruk efektini vermek için uygulanmış bir taktik.
http://www.youtube.com/watch?v=-O6kMYTRyFY
Orj olan bu videodaki gibi.

Amplifier Tube + amplifier devresi + Shift Register ile yapılmış kayar sistem bunu direk yapar PWM bile gerek kalmaz Amp Tube zaten bu şekilde yanıp sönüyor

mesaj birleştirme:: 21 Ekim 2015, 23:07:17

Alıntı yapılan: alicavuslu - 21 Ekim 2015, 21:22:58
Şöyle düşünürsek 16 bitlik buffer tanımladık. Tanımlama işlemlerinde ilk 3  biti 1 olana kadar kaydırma yapmayacağız. Yani 1 ekleyeceğiz. Daha sonra 0 ekleyeceğiz. Bu şekilde kuyruk efektide eklenmiş olur. Ama onunda sırası gelcek :)

if count < 3 then
    r_leds <= r_leds(r_leds'high - 1 downto 0) & '1';
else
    r_leds <= r_leds(r_leds'high - 1 downto 0) & '0';
end if;
Hocam sanırım size gönderdiğim ödevde aynı bunu yapmıştım 3 bit kaydırma yapmıştım :D
Kararsız...