elektrik port üyelik servisleri elektrik port üyelik servisleri

Altera DE0-Board İle FPGA Programlama |
4.Bölüm

Yazı dizimizin önceki bölümlerinde tasarladığımız devreler ile daha üst tasarımlar yapabiliriz. Bu yazımızda ise basit bir 4 bit ALU ve flip floplarla sayıcı tasarımı yapacağız. Ayrıntılar yazımızda.



A- A+
13.03.2017 tarihli yazı 7196 kez okunmuştur.
4 bit ALU tasarlamak için daha önceden yazdığımız 1 bitlik tam toplayıcı ve 4x1 multiplekser kullanmalıyız. Aritmetik Lojik Birimi, aritmetik ve mantık işlemlerini gerçekleştiren mikrodenetleyicelerden, en karmaşık mikroişlemcilere sahip bilgisayarlara kadar tüm işlemcilerin yapı taşıdır. Günümüzde çok güçlü ve karışık ALU’lar bulunmaktadır. Şimdi kendi ALU’muzu tasarmalamak için tasarımımızın blok diyagramı ve doğruluk tablosuna ihtiyacımız var. 
 
►İlginizi Çekebilir: FPGA Nedir?
 

a, b, Cin, f1 ve f0 giriş, Cout, Result ise çıkışlardır.

 
 
ALU’nun doğruluk tablosu


Bu doğruluk tablosuna ve blok diyagramına uygun olarak tasarladığımız ALU aşağıdaki gibidir. 
 

 


Programımızın Verilog kodu aşağıdaki gibidir:

 


İlk öncelikle modülümüzü ve sırasıyla çıkışları ve girişleri belirttik. Devre tasarımımızda her bir kapının çıkışına wm wireları atadık. Burada wm wirelarını 16 bitlik atadık. Bu bize w1,w2,w3,… diye yazmaktan kurtarmış oldu. Toplayıcının toplam çıkışlarına ws ve Cout’dan Cin’e w1,w2,w3 atamaları yaptık. Ardından her kapının parantez içinde sırasıyla çıkışı ve girişini yazdık. 28. satırda tam toplayıcı modülünü programımıza dahil ettik ve tam toplayıcının Verilog programındaki giriş-çıkışlarına benzeterek tasarımımızda bulunan, atadığımız giriş çıkışları tanımladık. 33. satırda 4x1 multiplekser modülü çağırarak multiplekser’ın Verilog programındaki giriş-çıkışlarına benzeterek tasarımımızda bulunan, atadığımız giriş çıkışları tanımladık. Burada dikkat edilmesi gerekenlerden biri, multiplekser uygulamasında d girişimizi 4 bit tanımladık ama programda “module mux(y,s,d) ” olarak tanımladık. Yani d yi 4 bitlik değil 1 bitlik yazmış gibiyiz. Bundan dolayı mux4_1 fonksiyonunu yazarken en sağdan sola sırasıyla 0. Bit, 1.bit, 2.bit, 3.bit şeklinde yazdık. Bu da multiplekserın girişini oluşturdu. Ardından programımızı test etmek için aşağıdaki test programını yazdık.
 


Bu test programında önceki örnekler gibi girişlerimizi register ve çıkışlarımızı wire olarak atıyoruz. Ardından yazdığımız ALU Verilog dosyasını çağırarak önce çıkışları ardından girişleri yazdık ve test koşullarını da belirttik.

Simülasyon da aşağıdaki gibi sonuçlandı:

 


Böylelikle Alu’yu tamamlamış olduk. Şimdi ise sayıcı tasarımı yapacağız. Fakat tasarımlara başlamadan önce aşağıdaki görselden flip flopların doğruluk tablolarını hatırlayalım.
 


Aşağıdan ise uyartım tablolarını inceleyelim.
 


Bu yazımızda biz JK flip flop kullanacağız. JK flip flop’un Verilog kodu aşağıdaki gibidir.
 


İlk olarak modülümüzü tanıtıyoruz. Parantez içine sırasıyla çıkışı ardından girişi yazıyoruz. Ardından girişlerimizi çıkışlarımızı atıyoruz. Yalnız burada q’yu hem çıkış hem de register olarak atıyoruz. Çünkü bir flip flop’a 1 veya 0 değerlerinden birini verirseniz bunu, siz başka bir şey yapana kadar tutmayı başarır. Bundan dolayı register olarak yazarsak RAM üzerinde 1 bitlik veriyi tutabilir. Ardından 7. satırda yazan fonksiyon clock’un yükselen kenarda gerçekleşeceğini belirtmektedir. 9. satırda eğer reset tuşuna basılmışsa q’yu 0’a çekeceğini belirtmekte ardından eğer reset’e basılmamışsa j,k ikilisini doğruluk tablolarına uygun olacak şekilde yazılır. 17. satırda “~” işareti ‘değilleme’ işaretidir. Ardından modüller kapatılır. Bu Modelsimde flip floplar için genel kalıplardandır. 
 


Yukarıda görseli verilen JK flip flop’un test kodlarıdır. Burada da girişlerimizi register ve çıkışımızı wire olarak atıyoruz. Ardından bir başlanıç koşulu olarak ilk öncelikle flip flop’u resetliyoruz ve clock sinyalimizi sıfır’a çekiyoruz. Ardından 14. Satırda “clk= ~clk” ifadesiyle anlatılmak istenilen kare dalgadır. Ardından test koşullarımızı belirtiyoruz.

Simülasyon sonucu aşağıdaki gibidir:

 


Şimdi ise flip flopları kullanarak 0-1-2-3-0 şeklinde sayan bir sayıcı tasarımı yapalım. Bunun için ilk öncelikle durum diyagramını ve doğruluk tablosunu oluşturmalıyız. 
 
 
0-1-2-3-0 şeklinde sayan sayıcının durum diyagramı

 


Burada x’in 1 olması sayma işleminin gerçekleşmesini, 0 olması da örneğin önceki durum 00 ise x=0 için sonraki durumda da 00 olması anlamındadır. Yani flip flop’un saymayı bırakıp kendi üzerinde durmasıdır.

Sayıcımızın devresi aşağıdaki gibidir:

 

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


Tasarımımızın Verilog kodu aşağıdaki gibidir:
 


İlk önce modülümüzü tanıtıyoruz. Ardından giriş çıkışlarımızı belirtiyoruz. 10. Satırda JK flip flop modülünü programımıza çekiyoruz. Ardından parantez içinde ilk önce çıkışları ardından girişleri belirtiyoruz. Ayrıca JK flip flop Verilog programını progamımızda kullanmak için sayıcı klasörümüzün içinde olması gerekmektedir.

Tasarımımızın test Verilog programıda aşağıdaki gibidir: 

 


Burada test programımızı tanıtıyoruz ardından girişleri register ve çıkışlarıda wire olarak atıyoruz. Ardından asıl Verilog programımızdan sayıcı modülünü çekiyoruz. Başlangıç koşulu olarak ilk önce flip flopları resetliyoruz ve clock sinyalini de sıfırlıyoruz. Ardından “always #2 clk= ~clk” yazısıyla kare dalga üretiyoruz. Test koşulları için reset’i sıfır’a çekiyoruz ve x=1 diyerek sayıcımıza saymasını söylüyoruz.

Simülasyon sonucu da aşağıdaki gibidir:

 


Böylelikle serimizin sonuna geldik. Bu 4 serilik yazı ile Altera DE0 Board için yazılmış olup FPGA hakkında başlangıç için sizlere gerekli başlangıç seviyesini vermektedir. Bol bol örnek ile kendinizi daha üst ve  karmaşık tasarımlara yönlendirerek kendinizi geliştirebilirsiniz.


Altera DE0-Board İle FPGA Programlama Yazı Dizimizin Önceki Bölümleri

 
 
 
Ö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