For english version http://dincaysroom.blogspot.com (Not complete yet)
DE0 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
DE0 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

18 Ocak 2011 Salı

DE0 Eklenti Karti

Bu aralar tezimle ilgilendigim icin FPGA ile ilgilenemiyorum. Az olan bos vakitlerimde, kart ile ilgili gelecekte ne yapabilirim diye dusunurken aklima DE0 icin eklenti karti yapmak geldi. Kartin uzerindeki 40 pinlik konnektore baglanacak, sinyallere, guc kaynaklarina kolayca ulasabimemi saglayacak, evde test yapmami kolaylastirecek bir kart cizip urettirmeyi dusunuyorum.

Kart ile ilgili aklima gelen bazi notlar
  • 2 katli olacak
  • 40 pine dogrudan erisebilecegim 40 pinlik disi header olacak
  • Ftdi kablosunu baglayabilecegim header olacak
  • Digilen Inc'in Pmodlarini takabilecegim headerlar olacak
  • Guc kaynaklarina kolayca erisebilecegim headerlar olacak
Simdilik aklima gelenler bunlar. Karti nerede urettirecegime karar vermedim. Kart ile ilgili her turlu oneriye acigim.

7 Ekim 2010 Perşembe

PC-FPGA RS232 ile iletisim - 2

Fpga'de calisan koda ek olarak bilgisayarda da calisan bir yazilima ihtiyac var. Ftdi ciplerinin kontrol edilebildigi iki kutuphane mevcut: D2XX kutuphanesi ve libftdi kutuphanesi. Bunlardan ilki ftdi'in hazirladigi kutuphane ve acik kaynak kodlu degil. Fakat dokumantasyonu guzel. Libftdi ise acik kaynak kodlu ama dokumantasyonu kotu. Onceleri libftdi kullaniyordum. Bu defa dokumantasyonu daha iyi oldugu icin d2xx kullanmaya niyetlendim ama ubuntuda kutuphaneyi yuklemeyi beceremedim. Libftdi ise ubuntunun "repository"lerinde var ve cok kolay yukleniyor. Herhangi bir paket programiyla (synaptic, aptitude vs..) yuklenebiliyor. Lbftdi fonksiyonlari hakkinda bilgi sahibi olunabilecek belki de tek yer kutuphanenin dokumantasyon web sitesi. http://www.intra2net.com/en/developer/libftdi/documentation/index.html adresindeki sitede her fonksiyonla ilgili kisa aciklamalar var. Ayrica kutuphaneyi kurduktan sonra /usr/share/doc/libftdi-dev/examples klasoru altinda 5-6 tane ornek kod var. Orneklerden simple.c ve serial_read.c kodlari cok yardimci oldu.

Program deneme programi oldugu icin faydali bir seyler yazmaya calismadim. Program 100 kere donen bir dongu icinde once klavyeden girilen sayiyi yolluyor, sonra fpgaden gelecek datayi bekliyor. Data geldiginde ise o degeri ekrana basiyor.

Program 3 esas kisma ayrilabilir: baslangic, yazma ve okuma. Su an yazilimi anlattigim icin yazma ve okuma tanimlarini yazilimin bakis acisindan yaziyorum. Ornegin cikis dedigim yazilimdan fpga'e giden demek.

Baslangic kisminin buyuk kismini ftdi'in bilgisayara kurdugu examples klasorundeki simple.c programindan yararlanarak yaptim. Iletisim hizini, data bicimini buradan belirliyoruz. Fpga'deki program 19200 baud, 1+8+1 bit (start+data+stop) seklinde oldugu icin yazilimi da ayni ayarlarda calistiriyorum.

Yazma kismi basit. Fpga, gelecek data icin surekli hazir oldugu icin bilgisayardan data yollama isi cabuk bitti. Tek yapilmasi gereken ftdi_write_data fonksiyonunu cagirmak.

Okumak en zor ve libftdi'yi ogrenmeyi gerektiren kisim. Dokumantasyonda okuma fonksiyonu hakkinda 1 satir aciklama yapilmis. Aciklamada fonksiyon cagirildiginda data alana kadar bekliyor mu yoksa data yoksa devam ediyor mu bahsedilmiyor. D2XX kutuphanesinin dokumantasyonunda bu durumdan acikca bahsediliyor ve iki durum icin de fonksiyonun nasil kullanilacagi anlatiliyor. Samples klasorundeki serial_read.c programina baktigimda data yoksa beklemedigini anladim. Fonksiyon dogru sekilde okudugu data sayisini dondugu icin, dondugu deger 0'dan farkli olana kadar dongu icinde cagirdim.

Programi test ederken dikkatimi ceken bir sey oldu. Ftdi cipinin icinde buffer var. Eger fpga'den data yollama sirasinda 1'den fazla data yollarasaniz, bilgisayar tarafindan okunmayanlar cipin icindeki buffera kaydediliyor ve bir sonraki okuma sirasinda yollaniyor. Yazdigim programi her defasinda 1 byte okuyacak sekilde yazdim. Ola ki fpga'den bilgisayara 2 byte yollandi, bu durumda bir sonraki okuma fpga o sirada ne gonderirse gondersin bir onceki seferde ne okuduysa onu gonderiyor. Bu ozelligi yollama ozelligi icin debounce filtresi olmadigi zaman farkettim.

Bir sonraki asamada VCM (Virtual COM Port) suruculerini kullanarak ayni isi yapmaya calisacagim.

Program kodlari buradan indirilebilir.

6 Ekim 2010 Çarşamba

PC-FPGA RS232 ile iletisim - 1

FTDI cipini kullanarak libftdi kutuphanesi ve rs232 protokolu ile fpga - bilgisayar arasinda cift yonlu veri aktarimini basardim.

Bu isi yapmasi icin yazdigim program once kullanicidan bir sayi istiyor ve bu sayiyi fpga'e gonderiyor. Fpga'de bu sayi 3 ve 4uncu 7 segment ledlerde gosteriliyor. Sonrasinda program fpga'den data yollamasini bekliyor. Fpga'den data yollamak icin kart uzerindeki button 1'e basmak yeterli. Butona basinca kart uzerindeki anahtarlarla girilen 8 bitlik sayiyi bilgisayara yolluyor ve bilgisayardaki program gonderilen sayiyi ekrana basiyor. Bu sayede hem bilgisayardan fpga'e, hem de fpga'den bilgisayara veri transferi yapilabiliyor. Bu sistemin guzelligi, pc'de atik eskiyen rs232 portu yerine usb portundan veriyi yollamasi. Ftdi cipi usb'den gelen datayi rs232 formatina ceviriyor. Ayrica ftdi cipini kontrol etmek icin ozel programlara ihtiyac yok, bunun icin olusturulmus bir kutuphane var. Bu sayede herhangi bir c programinda gerekli fonksiyonlari cagirarak rs232 portunu istedigimiz sekilde kontrol edebiliriz. Bu da bilgisayarda uygulama gelistirmek icin cok buyuk bir esneklik sagliyor. Ftdi ciplerinin kutuphanesini kullanarak yaptigim bir oyunu bu bloga yazmistim. Bu linkten o yaziya ulasilabilir.

Rs232 uygulamasi icin fpga icin yazdigim kod esas olarak 3 parcadan olusuyor. Baud yaraticisi, alici ve verici. Baud hizi olarak 19200 kullandim. Rs232 protokolunde ayrica bir clock bilgisi gitmedigi icin, ornekleme noktasini hassas olarak ayarlamak icin baud yaraticisi 19200x16 Hz hizinda palsler uretiyor. Alici ve verici modulleri kendi iclerinde palsleri sayiyorlar. Her bit gonderimi 16 pals surdugu icin; verici, basla komutu geldikten sonra her 16 palste bir cikisini guncelliyor. Alici ise yeni data gonderildigini algiladigi anda ilk basta 8 pals sayiyor ki orneklemeler bitlerin tam ortasina denk gelebilsin. Sonrasinda 16 palste bir hatti okuyup datayi aliyor. Kodlari referens kitabi olarak kullandigim kitaptan esinlenerek yazdim. Kod kendimin ama algoritma kitabin. Kitabi anlattigim yaziya buradan ulasilabilir.

Bu semada fpga icindeki esas bloklarin baglanti semasi gosteriliyor.


Alici ve vericinin arkasindaki bloklar basit birer RS flip flop. Rs232 modulunu sadece bu projede tek basina kullandim, bundan sonra kullanacagim her projede rs232 modulu yan modul olarak kullanilacak. O yuzden ana modulle iletisimlerini kolaylastirmak icin yeni veri alindigini(newdata) ve o an bir veri yollandigini(busy) gosteren iki sinyal de rs232 modulunun icinde uretiliyor.

Bilgisayarda yazdigim yazilimi bir sonraki yazida anlatacagim.

Program kodlarina buradan erisilebilir.

27 Eylül 2010 Pazartesi

Saat

DE0 ile basit bir saat uygulamasi yaptim. Saniye, dakika ve saati gosteriyor. Saniye ve dakika icin 0-59 arasinda sayan, saat icin de 0-23 arasinda sayan sayaclar kullandim. Tabii ki saniye 59;dan 0'a gecerken dakika bir sayiyor, dakika 59'dan 0'a gecerken saat bir sayiyor. Butun sayaclar 50 MHz'lik clock ile calisiyor. 1 saniyede bir arttirma islemini 1 saniyede 1 clockluk pals ureten bir devre ile yapiyorum. 1 saniyede bir, saniye sayacinin count_enable pini 1 oluyor. Bu sayede saniyede 1 artmis oluyor. Sayac cikislarindaki ikili sistemdeki sayilari BCD formatina cevirdim. Bunu icin internetten binary-to-bcd converter diye aratip uygun buldugum bir kodu kullandim. BCD formatindaki sayilari 7 segment ledlerde gostermek kolay bir is. DE0'da 7 segment ledlere 1 verince led sonuyor. Bir de 4 basamagin her biri FPGA'e ayri ari baglandigi icin time-multiplexing yapmaya gerek yok. FPGA'in 4x7=28 pini bu is icin ayrilmis.

Programin kullanimi soyle. 4 tane 7 segment ledlerde saat ve dakika gosteriliyor 2'ser basamak ile. Ustteki resimde saat 1'i14 geciyor. 10 ledin ilk 4 ve son 4'u bcd formatinda saniyeyi gosteriyor. Yukaridaki resimde (0101)(0011) = 53uncu saniyeyi gosteriyor. Ortadaki iki led birbirinin degili ve saniyenin iki kati hizla yanip sonuyor. 5-0 numarali anahtarlardan girilin ikili sayi yukleme tusuna basinca (button 1) dakika yada saat hanesine yukleniyor. Dakikaya mi saate mi yuklenecegi 9 numarali anahtar ile belirleniyor. Buton 0 reset tusu ve buton 2'ye basinca da 7 segment ledlerde saniye gosteriliyor.


Saatin calismasi ile ilgili video buradan izlenebilir.

Programin kodlari buradan indirilebilir.

30 Temmuz 2010 Cuma

Yeni Kit: Altera DE0

Bozulan S3E kitimin yerine Altera DE0 kitiniz aldim. Cizgi Tagem'den 220 liraya aldim. 3 gun icinde elime ulasti. Baska herhangi bir karti bu kadar hizli teslim alamazdim.

Kutunun icinden FPGA karti, adaptoru, priz icin cevirici, usb kablosu, metal ayaklari icin plastik kiliflar ve bir iki ufak kablo cikiyor. Adaptorun ufak olmasi guzel. Hem adaptor kablosu hem de usb kablosu yeterince uzun. Kartin onunde koruma amacli seffaf plastik bir levha var. Bu levha isigi engeller, kart soluk gorunur diye dusunuyordum ama levha seffaf. Kart yine capcanli gozukuyor. Baski devre uzerindeki mavi renkli yalitim kaplamasi da kartin guzel gosteriyor. Kart, S3E karti gibi icinde test programi yuklu geliyor.

Karttaki cevre birimlerine gelince: SDRAM, flash bellek, VGA, PS/2, RS232, SD kart okuyucu, 10 anahtar, 3 pushbutton, 8 basamakli 7 segment LED, 10 yesil led var. LCD icin yer yapmislar ama LCD'yi kullanicinin takmasi gerekiyor. Genisleme yuvasi standart 0.1 inc 2x40 pin soket seklinde. S3E kiti icin aldigim hirose konnektorlu genisleme kartini bir iki degisiklikle DE0'da da kullanabilirim gibi. Genisleme kartini kullanmak istiyorum cunku bir suru PMOD kartim var.

DE0 kitinin kullanim kilavuzu ne yazik ki S3E Starter kitin kullanim kilavuzu kadar kapsamli degil. Ornek programlar da S3E kitine gore cok daha az. Altera, Altera Universite programi cercevesinde pek cok universitelere bu kitten bir suru dagitti. Ornek programlari cogaltirsa kitin okullarda kullanimini kolaylastirir.

Xilinx'ten farkli olarak Altera'nin tek tip mikroislemci yapisi var. Yani picoblaze ve microblaze gibi iki mikroislemci modulu yerine ikisini de kapsayan Nios isimli mikroislemci modulu var. Nios'un belli kisimlari ucretsiz. Kullanimi Picoblaze'in kullanimi kadar kolay degil. Bu benim gibi hobiciler icin kotu bir sey.

Altera FPGA'leri programlamak icin Quartus yazilimi gerekiyor. Tipki ISE gibi Quartus'un da ucretsiz surumu ve Linux destegi var. Quartus'u kurmak ISE'yi kurmaktan biraz daha kolay. Quartus'tan edindigim izlenim, Quartus'un ISE'den daha derli toplu bir program oldugu yonunde. ISE'nin aksine her yaptigim is icin yeni bir program calistirmiyorum. Quartus'un bir kotu yani, cok fazla penceresi oldugundan netbook'umun ekrarina sigmamasi. Anca netbook'a monitor baglayip iki monitorlu kullanabiliyorum.

Quartus'u kurma kismi kolay. Zor kisim, Linux'ta usb suruculerini kullanmak icin biraz numara cekmek gerekmesi. Bunun ilac gibi cozumu http://gunluk.muuzoo.gen.tr/2009/06/17/vhdl-bolum-1 adresinde veriliyor.

Kitin resmi sitesi:
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=364