SAYISAL DEVRE TASARIMI_5 PLD’s_FPGA

 

Sayısal tasarım yazı dizisinde bir arkadaşımın hatırlatmasıyla bu yazıyı da yazmam gerektiğine inandığım için araştırmamı genişleterek bu yazıyı yazdım.

Endüstriyel devrelerde eskiden PAL entegreleri kullanılırdı. Şimdiler de bunlar çeşitli şekillerde yenilenmiş ve şu anda FPGA gibi bir karmaşık yapıya ulaşmış durumda.

Bu yazıyı hazırlarken tüm bilgileri biliyorum dersem yalan olur.
Sizlere araştırmalarımdan bir özet sunuyorum. Bu özet ile sayısal devre tasarımlarınızda neler kullanabileceğinizi anlatmaya çalışacağım.

Aynı zamanda bu tip entegreleri nasıl programlarız bu konuyu da bulacaksınız.
Tabii ki ben bu programlama da amatörce bir başlangıç yaptım. Belki sizlerde buradan başlayarak çok daha ileri programlar yapabilirsiniz.

Bu yapılara neden ihtiyaç duyulur.
Bazen bir dizayn yaparken çeşitli entegrelere ihtiyaç duyulur. Bunlar kendi başlarına tek bir işlem içindir. mesela 7400 entegresi. (içerisinde 4 adet 2 girişli VE DEĞİL, NAND kapısı vardır)
Bunları diğer benzer entegrelerle birleştirerek devremizi kurarız. Bazen 1 entegrenin içindeki 4 kapıdan 1 tanesini kullanırız. Fakat devrede bulunmak zorunda olduğu için bir yer kaplar. Bunu programlı entegreyle bir nebze önleyebiliriz.
Ya da bir entegre elimizde olmaz onun yerine programlı bir entegre koyabiliriz.
Bazen de yapmak istediğimiz dizayn özel bir dizayndır ve bunun için diğer komponentleri de devreye sokmak zorunda kalırız.
Bütün bunlar için programlı entegrelerden faydalanırız.
Ayrıca özel bir işlem için de bu entegrelerden faydalanabiliriz.

Kısaca Özetlersek.

  • Baskıdevre kartını basitleştirir
    Güç tüketimi azalır
    Kart boyutu küçülür.
    Üretim sonrası test sürecini basitleştirir
  • Güvenirliği yükseltir.
  • Tasarımda esneklik sağlar.

Bu entegreler çeşitli programlama dilleri kullanabilirler.
VHDL, ABEL, CUPL veya Verilog HDL gibi normal IC tasarımı için de kullanılan bir donanım açıklama dili (HDL) sıklıkla kullanılır. Ayrıca alternatif olarak verilog ve VHDL dilleri de kullanılmaktadır.
Hepsini öğrenmek uzun sürecektir. Fakat internette bol örnek bulabileceğiniz CUPL dili biraz kolay geldi.

Bir de Microchip firmasının hazırladığı WINCUPL programı ve yanında gelen winsim programı BEDAVA kullanımıyla size yardımcı olacaktır.
https://www.microchip.com/en-us/products/fpgas-and-plds/spld-cplds/pld-design-resources

Bir de bu programı aldığınız ekrandaki, kayıt numarasını kullanacaksınız..

Bu resimde görünen kayıt numarası olmayabilir. Sayfadan size ait olanı kopyalayın.


Bu program ile SPLD ve CPLD leri programlayabilirsiniz.

PLD (Programmable logic device) : Türkçesi programlanabilir mantık cihazlarıdır.
PLD’ler birkaç düzine 7400 serisi yonganın (AND, OR, NOT kapıları) yerini alacak şekilde tasarlanmıştır. Kombinasyonal mantık (AND, OR) ve flip-flop’lara sahip makro hücrelerden yapılmıştır.
En yaygın PLD türü, temel olarak tek bir çipe bağlı birden fazla PLD olan,
Karmaşık Programlanabilir Mantık Aygıtıdır (CPLD).
Bellekleri Uçucu değildir. Yani gücü kapattıktan sonra yeniden yapılandırmanız gerekmez.

PLD ler kendi aralarında fonksiyonlarına göre ayrılır.
SPLD ve CPLD.

SPLD nedir : Simple programmable logic devices ( Basit programlanabilir mantık cihazları)
Basit programlanabilir mantık cihazları (SPLD), programlanabilir mantık cihazlarının en basit, en küçük ve en ucuz biçimleridir.
Tipik olarak 4 ila 22 tamamen bağlı makro hücre içerirler. Bu makro hücreler tipik olarak bazı kombinasyonal mantıktan (VE VEYA kapıları gibi) ve bir flip-flop’tan oluşur. Başka bir deyişle, her makro hücre içinde küçük bir İkili mantık denklemi oluşturulabilir. Bu denklem, bazı ikili girişlerin durumunu, ikili bir çıkışta birleştirecek ve gerekirse, bu çıkışı bir sonraki saat kenarına kadar Flip-Flop da saklayacaktır. Elbette mevcut mantık kapılarının ve Flip-Flop ayrıntıları her üreticiye ve ürün ailesine özeldir. Ancak genel fikir her zaman aynıdır.

Çoğu SPLD, kalıcılığı sağlamak için sigortalar veya geçici olmayan bellek hücreleri ( EPROM , EEPROM , Flash ve diğerleri) kullanır.

Bu cihazlar ayrıca şu isimlerle de bilinir:
Programlanabilir mantık dizileri (PLA)
Alan programlanabilir mantık dizileri (FPLA)
Programlanabilir dizi mantığı (PAL)
Genel dizi mantığı (GAL)

Her birinin kendine göre avantaj ve dezavantajları vardır. Bir de ihtiyaca ve zamana göre geliştirilmiştir.
PLA (Programmable Logic Array) lar İlk geliştirilen programlanabilir mantık entegreleriydi. O zamanlar içerisinde 8 F/F 17 adet giriş ve 18 adet çıkışa sahipti. Bu entegre 1 kere programlanabiliyordu. Hafıza yoktu. Sonrasında bir firma Silinebilir PROM çıkarmaya başladı ve PLA teknolojisine bu entegre edilerek ilk silinebilen PLD elde edildi. PLA lar fazla kullanılmıyor.

PAL ( Programmable Array Logic) entegresi, Sigorta patlatmayla programlandığı için 1 kez programlanır.
PAL entegresi içeriğinde bulundurduğu VE kapısı ve VEYA kapısıyla ÇARPIMLARIN TOPLAMI şeklinde çalışır. Programlanabilen VE kapıları ve programlanmayan VEYA kapıları içerir.
Devre şeması temel olarak bu resimdeki gibidir. VE kapısı girişlerinde kullanılan GRİ çizgiler sigortalardır. Bunları programlayarak çıkışı istediğimiz duruma getirebiliriz. PAL entegreleri eskiden fazla kullanılıyordu. Şimdiler de içerisinde Pal ve GAL devreleri bulunan CPLD karmaşık programlanabilir mantık dizileri kullanılıyor.


Mesela PAL kullanarak XOR çıkış elde edebiliriz. Aşağıdaki resim bunu göstermektedir.
Açıkdevre olan sigortalar boşluk olarak görülür.


PAL entegreleri çıkışında ve girişlerinde MACROCELL denilen devre ye bağlanır. Bu şekilde entegreler oluşturulur.
Aşağıdaki devre şeması PAL ve GAL entegrelerinin blok şemasıdır.


Yukarıdakiler temel devredir. Gerçek bir PAL entegresinin içeriğini görmek isterseniz
Bu datasheet’e bakabilirsiniz.
https://www.ti.com/lit/ds/symlink/pal16r6am.pdf?ts=1689431069862&ref_url=https%253A%252F%252Fwww.startpage.com%252F

GAL (Generic array logic) entegreleri ise PAL entegreleri gibi yapıya sahiptir.
Buradaki tek fark GAL ENTEGRELERİ BİRDEN FAZLA KEZ PROGRAMLANABİLİR.
Bunu yapabilmesi de sigortaların yerine EEPROM (𝐸 2𝐶𝑀𝑂𝑆) kullanılmasıdır. Sigorta patlatmak yerine, hafıza hücreleri programlanır. Sonradan elektrik ile silinerek yeniden programlanabilir. Aşağıdaki resimde sigorta yerine kullanılan sistemi görebilirsiniz.

PAL ile GAL entegreler, yukarıda verdiğim program ile programlanabilir. Tabii ki bunu entegreye göndermek için JTAG programlayıcılar kullanılıyordu. Şimdilerde USB üzerinden çalışan programlayıcılar da mevcuttur.
Bunun yanı sıra PAL entegreleri 1 kez programlanabilir dememize rağmen PAL_flash entegrelerde piyasaya çıkmıştır.

Fakat bir de iyi tarafından bakalım.
Mesela GAL16V8 entegresine bakalım. Bu entegre PAL emulatörü gibi çalışabilir. Yani birden fazla kez silmeniz mümkün olduğundan denemelerinizi burada yapabilirsiniz. Sonrasında ise PAL entegresini programlayabilirsiniz. PAL entegreleri OTP denilen 1 kez programlama şekli ve düşük maliyeti ile endüstri de tercih edilebilir.
Bu entegre çıkışındaki OLMC (Output Logic Macrocell) Çıkış mantık hücresinin programlanmasıyla PAL entegresi gibi kullanılabilir. Bu entegrede 3 çalışma modu bulunur. OLMC ile bu seçilir. Aşağıdaki tablo bu entegre için verilen örnektir.


Bu modlara göre ve belirlenmiş PAL entegre tiplerine göre, programlanmış olacaktır. Denemeler bunlarla yapılabilir. Sonrasında ise belirlenen PAL entegrelerine programlama yapılabilir.
Tabii ki Bu tip entegreler PAL emulasyonu yapılsın diye değil, tüm olanaklarıyla kullanılsın diye satın alınır. O zaman da COMPLEX mod da çalıştırılmalıdır.

CPLD (Complex Programmable Logic Device) Karmaşık programlanabilir mantık cihazları.
Bu tipler, kendi programlanabilir ara bağlantıları ile çoklu SPLD dizilerinden oluşur. PAL ve GAL entegreleri birkaç yüz mantık kapısına eşdeğer küçük boyutlarda mevcuttur. CPLD ise, programlanabilir ara bağlantılarla birbirine bağlanan birkaç PAL eşdeğerini içerir. CPLD, binlerce, hatta yüz binlerce mantık kapısının yerini alabilir.

CPLD entegrelerini görmek isterseniz DIGIKEY firmasının seçim sayfasını kullanabilirsiniz. Aynı şekilde PLD olarak kullanılacak entegreleri de aynı firmanın seçim sayfasında bulabilirsiniz.

CPLD Sayfası :
https://www.digikey.com/en/products/filter/cplds-complex-programmable-logic-devices/695

PLD Sayfası :
https://www.digikey.com/en/products/filter/embedded/plds-programmable-logic-device/719

FPGA: Alan Programlanabilir Kapı Dizileri
Bir FPGA , mantık bloklarından, ara bağlantılardan ve G/Ç’den oluşur. Devre oluşturmak için FPGA’lar, Arama tablolarını (LUT’lar) takip eden bir dizi mantık kapısı yapılandırır. Bellekleri uçucudur, bu nedenle her çalıştırıldıklarında yeniden yapılandırılmaları gerekir. Yapılandırma dosyası genellikle bir EEPROM veya NAND belleğinde saklanır.

Basit yapıları nedeniyle CPLD’ler, FPGA’lardan daha hızlı görev gerçekleştirmek için kullanılabilir.
Bununla birlikte, makro hücrelerin boyutuna göre,
CPLD’ler genellikle 500’den az F/F sınırlıdır.
FPGA’lar ise 150.000’den fazla F/F içerebildikleri için daha büyük ve daha karmaşık tasarımlar için kullanılabilirler.

Mikrodenetleyici ve FPGA 

Ne zaman birini, diğerine tercih etmeliyiz?

Basit bir ifadeyle, bir mikrodenetleyici, sizin için zaten oluşturulmuş farklı devrelere (çevre birimlerine) sahip bir işlemcidir. Tek yapmanız gereken onu programlamak. Genellikle, C veya C++ kullanılarak programlanırlar.

Bir FPGA ise, istediğiniz her şeyi inşa etmeniz için bir dizi mantık kapısına sahip boş bir çiptir.
Aslında, teknik olarak bir FPGA ile küçük bir mikroişlemci oluşturabilirsiniz. Bunları yapılandırmak için Verilog veya VHDL gibi bir Donanım Açıklama Dili (HDL) kullanarak kodlamanız gerekir.

Çoğu uygulama için bir Mikrodenetleyici, en basit çözüm olacaktır. Ucuzdurlar, programlanmaları kolaydır ve daha az güç tüketirler.

Mikrodenetleyiciler sıralı işlem gerçekleştirir (Saat palsine göre her seferinde bir görevi yürütür),
FPGA’lar ise birden çok işlemi paralel olarak çalıştırabilir. Bu, FPGA’ları DSP gibi yüksek hızlı veya gerçek zamanlı uygulamalar için daha uygun hale getirir
.

 Bundan sonrasında NASIL PROGRAMLARIZ sorusuna yanıt arayalım.
Yukarıda dediğim gibi ben de her ne kadar kullandığım sistemlerde PAL entegresiyle karşılaştıysam da hiçbir zaman programlamadım.
Fakat WINCUPL programıyla örnekleri ve kullanım kılavuzunu kullanarak birkaç örnek program yaptım.
Bu programlara geçmeden önce WINCUPL programını kurmanız gerek.
İlk çalıştırmada kayıt için numara isteyecektir bu kayıt numarası yükleme sayfasındaki numaradır.

Kurulum C dizinine yapılır. Fakat çalışma dizinini seçmezseniz yaptığınız programlar wincupl programlarına karışır.
Bundan dolayı programda OPTIONS menüsünden WİNCUPL seçeneğini seçip WORKING DIRECTORY kısmını kendinize göre seçin.

 

 

 

 

 

Burada dikkat etmeniz gereken nokta şu olabilir. NE PROGRAMDA, NE DE DİZİN İSİMLERİNDE TÜRKÇE KARAKTER KULLANMAYIN.
Hatta program içerisindeki açıklamalarda bile Türkçe karakter kullanmayın. Derleme yaparken sorun çıkarıyor.

Programınız kurulduğunda 2 program olarak kuruluyor. Wincupl ve Winsim. İsterseniz bazı simulatör özelliklerini winsim içerisinde kullanabilirsiniz. Ben kullanmadım. Gerekmedi.

Buraya kadar sadece dizin yerini seçtik. Programda OPTINS/Devices seçeneğini seçerseniz kullanmak istediğiniz entegreleri seçebileceğiniz bir alan var. Buradan entegre ismini pencerenin en altındaki kutucuktan kopyalayın. ( Buradan seçerek programa dahil etmeyi bulamadığım için kopyalama yaptım.) Belki siz bulabilirsiniz.
Program için NEW seçeneğini seçtiğinizde, yan tarafına gelecek kutudan PROJECTS seçin. Ekrana bir kutu gelecek. Design properties. Burada en altta device kısmı virtual olarak geçiyor. Kopyaladığınız entegre ismini buraya yapıştırın.


Sonrasında projenize bir isim verin. Ve resimlerdeki gibi bilgileri yazabilirsiniz.

Bilgileri girip OK butonuna bastığınızda bazı sorular soracak. Buna göre taslak programı oluşturacak. Aşağıdaki resimler bunları gösteriyor. INPUT olarak kullanacağınız kaç PIN olacak. OUTPUT olarak kaç PIN kullanılacak ve PINNODES olarak kaç tane kullanılacak. Son soru 0 olarak geçiyorum fakat ileri programlamada NODES kullanacaksanız buraya girebilirsiniz.

Bütün sorulara cevap verdiğinizde aşağıdaki gibi bir TASLAK program ekrana gelecektir.


Son resimde artık programınız belirttiğiniz parametrelere göre yazılmaya hazırdır.

Bundan sonra yapmak istediklerinizi yazabilirsiniz. Ben ilk olarak örnek program alıp çalışmasını anladım sonradan birkaç değişiklik ile kendi programımı yazdım.
Fakat tam bir programlama yapmak isterseniz el kitabını iyi okuyup sonrasında bol örnek üzerinde çalışmanız gerekecek. El kitabını TÜM Dosyaların arasında bulabilirsiniz.

Neyse ki entegre almaya gerek yok. PROTEUS ile denemelerinizi yapabilirsiniz.

Aşağıdaki örnek proteus çizimidir. WINCUPL programının derlenmiş dosyası JED uzantılı dosya buradaki gibi eklenecektir.

Tabii ki programımızı hazırladıktan sonra derlememiz lazım. Aşağıdaki resimdeki gibi RUN menüsünden DEVICE DEPENDENT COMPLIAR F9 seçmeniz yeterli. Şayet hata yoksa yine resimdeki gibi complete succesfull yazısını alırsınız.
Şayet açıklamalarda Türkçe karakter kullanırsanız burada hata verecektir.
Derledikten sonra WORKING dizinini açarsanız orada sizin projenizin 5 dosyadan oluştuğunu görürsünüz. Biz bunlardan 2 tanesini kullanacağız.
Birincisi PLD uzantılı. Bizim TXT olarak görebileceğimiz program dosyamız. Tekrar çağırmak istersek open projects ile bunu çağıracağız.

İkincisi ise JED uzantılı derlenmiş dosya. Bu da PROTEUS ta entegreye vereceğimiz program dosyası.
Artık programınızın giriş ve çıkışlarını ayarladıysanız denemelerinizi yapabilirsiniz.

Proteus Örnek programlar:

STEPPER_MOTORS_1 : Step motor tam adım kontrolü

STEP_MOTOR_HALF   : Step motor yarım adım kontrolü

COUNTER_SAF            : 7 seg display ile ileri geri sayıcı

7seg_cpld                      : 7 seg displayli 10 bit gösterge

T_FF                             : T F/F yapımı.

Tüm program dizinlerinde WİNCUPL programları RAR olarak mevcuttur.

Dosyalar arasında bulunan araştırdığım web siteleri de size yardım edecektir.

TÜM DOSYALARA BURADAN ULAŞABİLİRSİNİZ.


 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.