sayıcı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
sayıcı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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.

 

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 - 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.