elektrik port üyelik servisleri elektrik port üyelik servisleri

Altera DE0-Board ile FPGA Programlama |
3. Bölüm

Altera DE0-Board ile FPGA programlama yazı serimizin önceki bölümlerinde Modelsim programıyla, Verilog kodlama ile ilgili uygulamalar yapmıştık. Yazı serimizin bu bölümünde ise örneklere devam ederek biraz daha üst konulara geçeceğiz. Ayrıntılar yazımızda.



A- A+
02.03.2017 tarihli yazı 8535 kez okunmuştur.
Altera DE0-Board ile FPGA Programlama yazı serimizin 2. bölümünde Verilog programlamayı açıklayarak bir kendi tasarımımızı ve bir de tam toplayıcı tasarlayıp bunları Modelsim programında kodlara dökmüştük. Bu bölümde de örneklere devam edip, örneklerimizi kodlara dökeceğiz. İlk öncelikle 2. bölümde yaptığımız  tam toplayıcı devresini kullarak 4 bit toplayıcı çıkarıcı devresi tasarlayalım.
 
►İlginizi Çekebilir: FPGA Nedir?

Devremizin şekli aşağıdadır.



Burada Sub ucu 1 bitliktir. Yani ya 0’dır ya da 1’dir. Sub ucunun 0 olması toplama işlemi yapılacağını, 1 olması çıkarma işlemi yapılması anlamındadır. Verilog programımızın içine önceden tasarladığımız tam toplayıcı programını dahil etmeliyiz. Çünkü 4 bit toplayıcı çıkarıcı devresini tasarlarken önceden tasarladığımız tam toplayıcı devresinden 4 adet modül çekmeliyiz. Bu şekilde 4 bit toplayıcı çıkarıcı elde etmiş oluruz. Eğer 32 bit toplayıcı çıkarıcı istiyorsak, programımızın içine 32 adet tam toplayıcı modülü çekmeliyiz ve gerekli bağlantıları kodlayarak yazmalıyız. Tasarımın çalışma şekli şu şekildedir. Seçilen 2 adet 4 bit sayı sisteme girilir. Sub ucundan örneğin 0 seçilmişse bu devreye giren 2 adet 4 bit sayının toplanacağını göstermektedir. Her bir B girişi xor kapısına denk gelmekte seçilen bit 0 ise, seçilen bit aynen tam toplayıcıya iletilmekte ve A’dan gelen bit ile de tam toplayıcı içerisindeki devre gelen 2 bit sayıyı toplayıp T uçlarından çıkış vermektedir. Ayrıca C elde çıkışları da bir sonraki elde girişine bağlanmıştır. Bu şekilde paralel bir işlem yapılması sağlanmıştır. Bu devrenin Verilog kodu aşağıdaki gibidir.
 


 
 
►İlginizi Çekebilir: Savunma Sanayinde FPGA Kullanımı

Öncelikle modülümüzün isminden sonra parantez içinde ilk önce çıkışlarını sonra girişlerini tanımlıyoruz. Burada [3:0]a’ın anlamı, a değişkeninin 4 bitlik olduğunu belirtmektedir. Giriş ve çıkış tanımlamalarımızı yaptıktan sonra xor kapılarını kullanarak parantez içinde ilk önce çıkışı daha sonra girişi belirtecek biçimde yazıyoruz. Ardından tam toplayıcı modulünü programımıza çekerek, tasarımımıza uygun şekilde 4 adet modülün giriş ve çıkışlarını tanımlıyoruz. Tasarımımızın test Verilog programı ise aşağıdaki gibidir.
 

Test programımızda girişleri register olarak atıyoruz, çıkışlarımızı ise wire olarak atıyoruz. Bunu yapmamızın sebebi, test koşullarında bizi vereceğimiz değerler RAM üzerindeki registerlardan çekilerek kullanılmasından dolayıdır. Ardından asıl program modülünü yazarak parantez içinde sırasıyla çıkışları ve girişleri yazıyoruz. Daha sonra test koşullarını 4’bXXXX şeklinde yazıyoruz. Örneğin, 4’b0010 demek, 4 bit 0010 demektir. Baştaki #100 ifadesi, belirli bir süre gecikme sağlamaktadır. Test koşullarımızı belirttikten sonra simülasyon sonucunu aşağıdaki görselden görebilirsiniz.
 

Böylelikle 4 bit toplayıcı ve çıkarıcı devresini tamamlamış oluyoruz. Şimdi ise bir sonraki uygulamamız olan 3x8 dekoder uygulaması yapacağız. Ardında da multiplekser uygulaması yapacağız. 3X8 dekoder doğruluk tablosu ve devresi aşağıdaki gibidir.
 
Yukarıda devresi verilen 3x8 dekoderin Verilog programı aşağıdadır.
 

Öncelikle modülümüzü tanıttık. Ardından giriş ve çıkışlarımızı tanımladık ve devreye göre kapılarımızın ilk önce çıkışlarını ardından girişlerini tanıtarak programımızı bitiriyoruz. Bu devrenin test programıda aşağıdaki gibidir.
 

Burada ise girişlerimizi register ve çıkışlarımızı wire olarak atıyoruz. Asıl programımızdan modülümüzü çekiyoruz ve doğruluk tablosundaki giriş değerlerini yazıyoruz. Sonuçta aşağıdaki simülasyon sonucu elde ediyoruz.
 



Şimdi ise  4x1 multiplekser tasarımı yapalım. Yapacağımız bu multiplekser tasarımı bizim kendi işlemcimizi tasarlamaya bir adım yaklaştıracak. Çünkü multiplekser olmadan bir ALU (Aritmetik Lojik Birimi) tasarlayamayız. Multiplekser bir çeşit veri seçicidir. Multiplekserkullanarak hangi verinin geçeceğine karar veririz. Bundan dolayı birçok bilgisayar işlemcisinde bulunan ALU’nun yapı taşını oluştururlar. Multiplekser’ın doğruluk tablosu ve devresi aşağıda verilmiştir.
Yukarıda devresi ve tablosu verilen devrenin Verilog programı aşşağıdaki gibidir.
 

Programın test Verilog programı aşşağıdaki gibidir.
 

Test programında girişlerimizi register ve çıkışlarımıza da wire ataması yapıyoruz. Ardından test koşullarımızı belirtiyoruz. Bundan sonra tekrar simülasyon yaparak devrenin çalışıp çalışmadığını kontrol edebiliriz. Şimdi ise yazdığımız bu programı Quartus programıyla kartımıza nasıl atacağımızı gösterelim. Quartus programını açtıktan sonra aşağıdaki adımları izleyin.

Sol üstten File sekmesine tıklayın > New project wizard > Next tuşuna basın > İlk kutucuğa yazdığımız multiplekser dosyasının Verilog programını seçiyoruz. Burada dikkat edeceğimiz husus, test programını seçmeyin. Çünkü test programı Modelsim de kullanılan bir programdır> Alttaki kutucuğada projemizin ismini yazın ve next tuşuna basın > Gelen ekranda tekrar dosyamızı seçiyoruz ve dosyamız içindeki Verilog dosyasını seçiyoruz ardından next diyoruz > Gelen ekranda Family kısmını Cyclone III, package kısmını FBGA, pin count’u 484 ve speed grade’ı 6 seçiyoruz. Ardından alttaki pencereden en üstteki ismi EP3C16F484C6 olanı seçiyoruz ve next diyoruz > Gelen ekranda bir değişiklik yapmıyoruz ve next tuşuna tekrar basıyoruz >Gelen son ekranda seçtiğimiz tanımlamalar görülmekte, burada Finish diyoruz > Programda hemen sol kısımda görülen Tasks kısmından ilk başta bulunan compile design tuşuna basıyoruz. Eğer hatalı bir işlem bulursa Modelsim’e dönüp kodumuzu kontrol etmeliyiz. Şimdi pin atamalarımızı yapmadan aşağıdan DE0’ın datasheet’inde bulunan pin isimlerine göz atalım.

 
Altera De0 üzerinde bulunan kayan butonların ve basmalı butonların Cyclone III çipi içindeki adresleri
 
Altera De0 üzerinde bulunan çıkış olarak kullanacağımız LED’lerin Cyclone III çipi içindeki adresleri


Şimdi pin atamalarımızı yapmak için programda sol üstten file dosyasının bulunduğu satırda Assignments sekmesine geliyoruz ve buradan pin planner seçeneğine tıklıyoruz. Çıkan ekranda aşağıdaki pencerede bizim için giriş ve çıkış atamaları yapmak için yazdığımız Verilog programından modülümüzü çekmiş durumdadır. Pin atamalarımızı girişleri butonlara, çıkışları da LED’lere atıyoruz. Atamalarımızı yaparken 0. Bitten itibaren dikkate alarak atamaları yaparsanız, karta attıktan sonra daha rahat bir şekilde simülasyonlarınızı gerçekleştirirsiniz.
 

Şimdi ise atamalarımız tamamladıktan sonra bu pencereyi kapatalım ve programımızı karta yükleyelim. Kapattıktan sonraprogramda hemen sol kısımda görülen Tasks kısmından ilk başta bulunan Compile design tuşuna tekrar basıyoruz. Ardından aynı menü içinde en aşağıya inerek program device (open programmer) seçeneğine tıklayalım. Eğer FPGA bilgisayarımıza bağlıysa Hardware setup butonunun yanındaki kutucukta USB BLASTER yazısını görmemiz gerekir. Göremiyorsak bilgisayara bağlı olup olmadığı kontrol edilmeli. Bilgisayara bağı olmasına rağmen hala gözükmüyorsa Hardware setup’a tıklayarak sorun giderilebilir. Ardından büyük pencereden program seçilir ve sol tarafta Start tuşundan program Altera De0 board’a yüklenir. Yüklerken dikkat edilmesi gerekenlerden biri de FPGA’ınızın yükleme esnasında açık olmasıdır. Açık olmadığı zamanda Quartus programı bağlantıyı görmez. Verilog programınızı attıktan sonra kart üzerinde ki uygulamalarınızı test edebilirsiniz. Bir sonraki yazımızda 4 bit ALU tasarımı ve flip floplarla sayıcı tasarımı yapacağız.



 

Ömer Faruk GÜMÜŞ Ömer Faruk GÜMÜŞ Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar