24 Ağustos 2016 Çarşamba

VHDL : XDC File

     Merhaba Arkadaşlar;
    Bu yazıda VHDL'deki xdc dosyalarını hazırlamaktan bahsetmek istiyorum. Diyelim ki elinizde tüm kodları yazılmış bir VHDL projesi var. Bu projeyi elinizdeki FPGA board'una uygulamak istiyorsunuz. Bunun için ne yapmanız lazım? Mutlaka bir XDC dosyasına ihtiyacınız var. Bu dosyada board'unuzun hangi pinlerini hangi amaçla kullanacağınızı belirteceksiniz.
    Diyelim ki biz şu anda elimizde olan up_down_counter projesini fpga'e uygulamak istiyoruz. Benim elimde Nexys4 DDR var ve buna göre uygulayacağız. Bu projede port olarak ne kullandık? SEL, EN ve clk 1 bitlik girişleri ve 2 tane 8 bitlik çıkış. Clk'yı boardun kendi clk pinine bağlayacağız zaten. Hatta onun için bir clock_divider kodu yazmıştık. Geri kalan 2 giriş portu SEL ve EN'i de boardumuzun üzerindeki switchlerden elde edebiliriz. Ayrıca çıkışları da ledlere gönderebiliriz. Nexys4 DDR'da 16 led olduğu için bizim için yeterli.
    Şimdi bizim xdc dosyasının bir kısmını paylaşıyorum;


    Biraz bu dosyadan bahsedeyim. Buradaki set_property ile başlayan ve her port için tekrar eden iki satırlık kısımı sabit bir kod olarak düşünebiliriz. Bizim yapmamız gereken sadece bu sabit koda uygun bacak isimlerini söylemek. Çünkü bu kod sadece Nexys4 DDR için doğru olacaktır. Sizin kendi boardunuzun pacak isimleri farklı olabilir. 
    
    Bu kodda farklı boardlar için değiştirilmesi gereken yerleri söyleyeyim hemen. En üstteki clk girişi. Siz kendi boardunuzun datasheet'ini açın (internete board ismiyle birlikte datasheet yazarsanız çıkar)ve oradan sizin board'un clock girişinin ismini bulun. Sonra da E3 yerine sizin girişin ismini yazın. CLock için hepsi bu. 

    Gelelim switchlere. Buradaki SEL ve EN, benim Nexys4 DDR boardunun switch0 ve switch1 switchlerini temsil ediyor. Benim boardumun switch0 bacağını ismi J15. Sizin boardunuzun switch 0 bacağının ismiyle burayı değiştirmeniz gerekecek. Aynı şekilde benim boardumum switch 1 bacağını ismi L16. Burayı da uygun şekildee değiştirmelisiniz. 

    Alttakiler de ledler. Benim boardumun led0 bacağının ismi H17. Ve ben bu bacağa up_out çıkışının sıfırıncı bitini atamak istiyorum. O yüzden bu kod böyle. Siz burada bacak ismini veya çıkış değişkeninin ismini kendi boardunuza / kodunuza göre değiştirebilirsiniz. 

    Aşağıda da örnek olması açısından Nexys4 DDR boardunun bacak bağlantılarını gösteren şekli paylaşıyorum. Kafa karışıklığı olursa işe yaraması açısından.


    Şimdi diyelim xdc dosyasını oluşturduk bütün proje bitti. Board'a nasıl uygulayacağız. Kodu önce Run synthesis yapacaksınız. Daha sonra Synthesis Successfully Completed ekranı açılınca Generate Bit Stream'e tıklayacaksınız. Boardunuzu bilgisayara USBsi ile bağlayacaksınız ve oluşturduğunuz bu bit stream dosyasını Vivado'dan Open Hardware Manager'a tıklayarak seçeceksiniz. Hepsi bu. Şu an kodu boardda görüyor olmanız lazım. SEL ve EN switchleriyle oynayarak doğru çalışıp çalışmadığını görebilirisiniz. Umarım sorun yaşamazsınız ama bir sorun olursa veya full kodları isteyen olursa mail atabilirsiniz. Kolay gelsin.

 

VHDL : Kombinasyonel Devre

Merhaba Arkadaşlar;
Bugün sizlerlee kendim rastgele çizimini yaptığım bir tümleşik devrenin tüm kodlarını paylaşacağım. Devrede MUX (aslında DEMUX ama vhdl bunu iki MUX olarak algılıyor) ve D flip flop da kullandım. Kodun kısım kısım sizlere yardımcı olabileceğini düşünüyorum. Sorunlar yaşarsanız sorabilirsiniz. Önce size kodun blok diyagramını göstermek istiyorum. Bu diyagram benim bakarak kodladığım diyagram. Sonra kodun kendi şematiğiyle bu diyagramı da karşılaştırabiliriz.

Kodun top_level.vhd dosyasına geçelim. Bu dosyanın kodları aşağıdaki gibi;
Kodun dosyası bu şekilde. Kodun testbench dosyası ise aşağıdaki gibi;


    Tabii bu testbench kodunu siz daha da uzatabilirsiniz. End process'ten önce tSEL1<= '1'; vs. şeklinde her bir değişkenlere değer vere vere simülasyon sonucunu inceleyebilirsiniz.
    Şimdi de Vhdl'in kendi ürettiği Elaborate sonucu oluşan Şematik çıktısını paylaşmak istiyorum. Böylece başlangıçta benim kodu bakarak yazdığım blok diyagramı ile farklarını görebilirsiniz.


      Gördüğünüz gibi benim kodlarken Demux olarak düşündüğüm yapıyı, Vivado 2 Mux olarak algıladı. Kodu koşunca hatasız olarak çalıştığını göreceksiniz. Kolay gelsin.

23 Ağustos 2016 Salı

VHDL : clock divider

Merhaba arkadaşlar;

   Şu ana kadar paylaşmış olduğum kodlardan up_down_counter'ı ele alalım. Diyelim ki bu kodu FPGA board'una uygulamak istiyoruz. Board'a uygulayıp çıkışı da ledlere verirsek, devrenin saydığını görebiliriz. Ancak şöyle bir sıkıntı var. Boardların saat frekansı çok hızlı. Örneğin Nexys4 DDR boardunun saat frekansı 100 MHz. Bu hız insan gözünün algılaması için çok yüksek. Dolayısıyla bu hızdaki bir clock ile kodu FPGA'e gönderirsek ledlerdeki değişimi, ve sayma işlemini gözümüz göremeyecektir. Bu nedenle bu frekansı biraz yavaşlatmamız gerekecek. Bunun için aşağıda yazmış olduğum clock_divider (saat bölücü) kodunu kullanabilirsiniz.


   Bu kodu incelediğinizde frekansın artık 1Hz 'e düşürülmüş olduğunu göreceksiniz. Bu frekans insan gözünün algılaması için yeterli. Buradaki kodda clock_divider'ı component olarak tanımladım. Ama siz isterseniz bunu component olarak tanımlamayadabilirsiniz. Burdaki process i yazıp aşağısına yeni bir process koyabilirsiniz ve o process'e de  "if rising_edge(clock_out) then"  ile kodunuza bu yeni frekanstaki saati uygulamış olacaksınız. Kolay gelsin.

22 Ağustos 2016 Pazartesi

VHDL : up_down_counter - package

Merhaba arkadaşlar;
Şimdi de size aynı up_down_counter kodunun generic ifade, package yapısı, if-generate yapısı ve enumeration yapısı kullanılmış olarak kodlanmasını göstereceğim. Bu kod sayesinde bu 4 Vhdl özelliğinin de nerede ve nasıl kullanılabileceğini anlamış olacağınızı düşünüyorum. Kodları gene kendi yazdığım koddan aldığım ekran görüntülerim şeklinde paylaşacağım. Bir sorununuz olduğunda mutlaka sormanızı istiyorum. Bir gün içinde geri dönerim büyük bir aksilik yoksa. Kodların ilk kısmından başlayalım.


Yukarıdaki iki kod resmi ana kodu temsil ediyor. Aşağıda da package kodunu görebilirsiniz.

Sırada testbench kodu var;

Şimdi ise aşağıya bu kodu koştuğumda oluşan simülasyon görüntüsünü koyuyorum. 

Simülasyon sonucu da yukarıdaki gibi arkadaşlar. Burada dikkat etmeniz gereken şöyle bir nokta var; Sel değişkeni generic tanımlanmış. Ve ben bu değerin up_sel 'e eşit olduğunu söylemişim. O zaman bu kod sonucu yukarı doğru sayacaktır. Ve kodu koşarken tek bir anda tek bir değer alabilir. Yani bu kod şu an için her zaman yukarı doğru sayacaktır ve giriş değişkenlerine bağlı değildir. Aşağı doğru sayması için Sel = down_sel yazıp kodu yeniden koşmam gerekir. Bu da SEL girişini input olarak almak ile generic olarak tanımlamak arasındaki farkı gösteriyor. Kolay gelsin arkadaşlar.


VHDL : up_down_counter - component

Merhaba arkadaşlar,
Bu yazıda bir önceki up_down_counter kodunun componentli haline getirmiş olduğum formunu paylaşacağım. Component derken yani up_counter ile down_counter'ı iki ayrı kutu olacak şekile getirdim bu kod ile. İki kodun elaborate hallerini karşılaştırırsanız farkı göreceksiniz. Projenin kaynak kodu aşağıdaki gibi;
up_counter componentinin kodu aşağıdaki gibi;
down_counter componentinin kodu aşağıdaki gibi;

 Kodun testbench kodu da aşağıdaki gibi;


Kodun elaborate edince ortaya çıkan şematik görüntüsü de aşağıdaki gibi oldu. Bu görüntüyü VHDL : up_down_counter isimli kodum ile karşılaştırıp componentli yapının ne olduğunu görebilirsiniz.
Kod bu şekilde arkadaşlar. Merak ettiğiniz, Anlayamadığınız bir durum olursa , ya da kodu geliştirmek için bir fikriniz varsa yorum yazabilirsiniz veya mail atabilirsiniz. Kodu yazıp simülasyon sonuçlarınızı da bana gönderebilirsiniz. İyi çalışmalar.

VHDL : Up_Down_Counter

Merhaba Arkadaşlar;

Aşağıda 8 bitlik yukarı ve aşağı sayabilen VHDL kodu, şematik'i ve Testbench'i var Kod bana aittir. Vivado yazılımı kullanılarak yazılmıştır. // en üstte library tanımlamaları eksik. Dikkat edin. Kendiniz ekleyin. (library ieee;
                                        use ieee.std_logic_1164.all; )

Kaynak kodu aşağıdaki gibi;

Testbench kodu;

Elaborate edince oluşan şematik görüntüsü;

Kod bu kadar arkadaşlar. Dikkatle incelerseniz çok basit bir mantıkta yazılmış olduğunu göreceksiniz.

Vize Uğraşları 2

   Merhaba arkadaşlar. 

   Şu anda tüm belgeleri hazırladığınızı varsayıp devamında yapmanız gerekenlere geçeceğim. Bu arada bu belgeler dediğim kısım o kadar da zor değil gözünüz korkmasın. Bir günde bile halledebilirsiniz. Şimdi devamına gelelim. 
   
   İsveç Vizesine başvuru online olarak yapılıyor. Başvuru yapmanız gereken adres   http://www.migrationsverket.se/English/Private-individuals.html . Bu sayfadan sırasıyla Study in Sweden - How to apply ve altta Begin application butonlarını tıklayarak başvuruya başlayabilirsiniz. Tabi bu erasmus öğrencileri için. İsveçte çalışmak istiyorsanız Working in Sweden'a tıklamalısınız örneğin.

     Bu butonlara sırasıyla tıkladıktan sonra sizden üyelik isteyecekler. Üye olacaksınız sonra onlar size mail ile kullanıcı adınızı ve şifrenizi gönderecek. Aynı mailde giriş yapmak için gerekli link de olacak. Böylece önünüze başvuru formu gelecek. Bu formun ilk safaları kişisel bilgiler, ilk defa mı gidiyorsun, tek mi gidiyorsun vs vs. Asıl önemli kısım erasmus öğrencisiyseniz scholarship'i eu seçmeniz gerekiyor yoksa başvuru ücreti ödemek zorundasınız. Bir yerde gideceğiniz okulun bilgilerini istiyor. O kısımları da dolduracaksınız.




     Bir yerde de başvuru ücreti ödediniz mi diyecek. Oraya hayır deyip nedenini sorduğunda exchange student seçmelisiniz. Daha sonra bir sayfada hesabınızdaki parayı, bursunuzu ve seyahat sağlık sigortanızın süresini istiyor. Orayı da uygun doldurmalısınız. Banka miktarını doldurmak biraz karışık olabilir o yüzden benimkinin resmini koyuyorum. Bununla birlikte konsolosluk olarak en başta iki seçenek sunuyor Ankara mı İstanbul mu diye? Size en yakın olanı seçin. Çünkü ilerleyen dönemde iki kere konsolosluğa gitmeniz gerekecek. Ayrıca eklediğim belgelerin de ismi aşağıdaki gibidir. Sonraki yazım Vize Uğraşları 3 de devamından bahsedeceğim. Görüşmek üzere.