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

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.

2 Haziran 2010 Çarşamba

Verilog ile PID Kontrol

Verilog'da yazılmış ve doğrudan FPGA'de çalışan bir PID kontrol bloğu yaptım. Bir PID kontrol bloğunu çalıştırmak doğru çalışan bir programa ek olarak için P, I ve D katsayılarını doğru belirlemek gerekiyor. İnternette PID anlatan bir sürü belge var ama düzgün çalışan bir kat sayı seti bulamadım. Deneme yanılma ile ISE'de simulasyonda çalıştığı görülebilecek şekilde katsayıları belirledim. Normalde PID kontrol şeması aşağıdaki resimdeki gibi oluyor.


Benim durumumda dış elektronik hiç kullanmadığım için geri besleme FPGA'in içinden oluyor. Genel bir şey olmasını istediğim için de kontrol edilecek blok (resimde plant) "Çıkış=Giriş" olan bir blok.

Kullandığım PID denklemini http://www.atlantixeng.com/pdf-files/PID_Controller_in_FPGA.pdf adresindeki belgeden aldım.

Programın 8 bit girişi ve 8 bit çıkışı var. Program kodlarına buradan erişilebilir.

12 Eylül 2009 Cumartesi

Klavye Arayüzü - 1

Klavyeden basılan tuşun kodunu 7 bölmeli ledde gösteren bir program yazdım. Program klavyeden gelen veriyi doğrudan ledlerde gösteriyor.

Klavye veriyi SPI(Serial Peripheral Interface) ile gönderiyor. SPI'de bir clock bir de data hattı var. Clock'u da datayı da klavye sürüyor. O yüzden clockdaki kenarları bulmak FPGA'in işi. Klvaye veriyi paket halinde gönderiyor. Bir paket 11 bit. Paket biçimi 1 bit start biti ve hep 0 + 8 bit data + odd parity biti + stop bit. Data, clock'un negatif kenarında okunmalı. Datanın en düşük biti ilk yollanıyor. Aşağıdaki şekil PS2 klavyenin 1 paketi yollarkenki pin seviyelerini gösteriyor.

FPGA, ps2clockdaki negatif kenarları algılayıp, durum makinası ile ps2data'yı shift registera koyuyor. Sonra pariteyi kontrol edip, eğer hata yoksa ledlere veriyor ve data_ready bayrağını 1 yapıyor. Hata varsa ölü bir durumda kalıyor. FPGA'in tekrar çalışması için resetlemek gerekiyor. Ps2 klavyenin çalışma frekansı 10kHz - 16kHz arasında. Bu çok düşük çalışma frekansından dolayı 2 klavye pininin de filtrelenmesi gerekiyor.

Aşağıdaki şekilde klavye kodları var.
Bir tuşa basıldığında klavye o tuşun kodunu yolluyor. Eğer tuşa basılı tutulursa 0.1 saniye sonra tuşun kodunu sürekli yollamaya başlıyor. Tuş bırakılınca da F0 ve tuşun kodunu yolluyor. Yani 2 paket yolluyor. Program en son basılan tuşun kodunu gösterdiği için F0 gözükmüyor, onun yarine bırakılan tuşun kodu gözüküyor. Ama tuş bırakılınca ledlerin kısa bir süre yandığı görebiliyorum. Tuşa basılı tutulunca olan sürekli yollamalar da gözüküyor.

Bundna sonra klavye ile kartın üzerindeki LCD ekrana yazı yazabilecek programı yazmayı düşünüyorum.

Program kodları buradan indirilebilir.

5 Eylül 2009 Cumartesi

Multi LED 2

Çevrim sürelerini LCD ekranda gösterme işini hallettim. İşte ekran görüntüsü
LCD erkanı PicoBlaze mikroişlemci kontrol ediyor. LCD ekranın kontrolü, mirkoişlemci ile durum makinasıdan daha kolay oluyor. PicoBlaze'ı kullanmak için 2 şey gerekli. mikroişlemci kaynak dosyası ve program dosyası. Program kodu, FPGA'deki blok RAM'e hex olarak yazılıyor. Kodu hex'e çevirmek için başka bir program kullanılıyor, ISE bu işi yapamıyor. Gerekli olan her şey zip dosyasında var.

PicoBlaze kodundaki LCD fonksiyonlarını kart geldiğinde içinde yüklü olan programdan aldım. Bu program www.xilinx.com/products/boards/s3estarter/reference_designs.htm adresinden indirilebilir.

LCD ekranda niye olduğunu anlamadığım bir şey var. PicoBlaze'de LCD çıkış port_id'sini 40 kullandığımda harfler düzgün gözükürken 00 tanımladığımda bazı harflerin üstüne istemediğim şeyler yazılmış oluyor. Bunun sebebi belki 01, 02, 03 ve 04 port_id'lerindeki giriş pinleri ile çakışma olabilir ama bana saçma geliyor. LCD pinlerine osiloskopla bakmak gerekir.

Program kodlarına buradan ulaşılabilir.

11 Temmuz 2009 Cumartesi

Döner Kodlayıcı

Döner kodlayıcı modülünü bitirdim ve önceden yaptığım ileri geri sayan programa ekledim. Program döner kodlayıcı saat yönüne döndükçe ileri, ters yöne döndükçe geri sayıyor.

Döner kodlayıcı modülünü önce kendi bildiğim gibi yapmak istedim. Zıplamaları filtrelemek için 2 tane zıplama önleyici modülü kullanmak istemedim çünkü çok verimsiz bir yol. 2 tane 22 bit register kullanılacak. Onun yerine kendim durum makinası yaptım. Bu şekilde yaptığım modül doğru çalışıyor. Fakat tüm zıplamaları filtrelemek için 9 durum tanımlamak zorunda kaldım. Xilinx'in kendi referans tasarımını düşününce yine çok. O yüzden Xilinx'in referans tasarımını kullanmaya karar verdim. İki tasarım da program kodlarında var.

Döner kodlayıcı modülünü Xilinx'in referans tasarımını biraz değiştirerek yaptım. Referans tasarımına http://www.xilinx.com/products/boards/s3estarter/files/s3esk_rotary_encoder_interface.pdf adresinden ulaşılabilir. Referans tasarımında dönme olduğunu gösteren ve dönmenin yönünü gösteren 2 çıkış var. Ben bunları saat yönünde dönme olduğunu ve saat yönünün tersinde dönme olduğunu göstercek şekilde değiştirdim. Ayrıca modülün iç kısımlarını da kısalttım. Şimdi daha şık duruyor.

Xilinx'in referansında bir hata var. Döner kodlayıcının anahtarları normal durumda devre şemasına göre 1 konumunda (pull-up direncinden dolayı) ama osiloskop ekran görüntüsü 0 olduklarını gösteriyor. Doğru olan şemada gösterilen şekil. Karttaki LED'lerden iki tanesi anahtarların durumunu gösteriyor, normal durumda ikisi de 1. Modül girişleri senkron yaparken bu durumu da düzeltiyor, girişlerin tersini alıyor.

Karttaki LED'lerden iki tanesi döner kodlayıcıdaki iki anahtarın durumlarını gösteriyor. Şaftı çevirirken anahtarların durumlarının değiştiğini gözlemleyebiliyorum. Gerçekten eğlenceli.

Çevre birimleri arasından bir tek LCD ekran kaldı. LDC ekranın modülünü de yaptıktan sonra kendi tasarımlarımı yapmaya başlayabilirim.

Döner kodlayıcı modülüne buradan ulaşılabilir.
Verimsiz döner kodlayıcı modülüne buradan ulaşılabilir.
Program kodlarına buradan ulaşılabilir.

16 Haziran 2009 Salı

Booth - Wallace ve Shift - Add Multiplier

Aldığım dijital VLSI tasarım dersinin projesi olarak 2 farklı çarpma devresi yaptım. Amaç bunları karşılaştırmak ama ben o kısmı geçiyorum. Bu iki devreden booth-wallace çarpma devresi kombinasyonel çarpma yapıyor. Yani clocka ihtiyacı yok, içinde DFF yok. Ama bu yüzden çok sayıda kapıdan oluşuyor. FPGA'in çok kaynağını tüketecektir.

Asıl anlatmak istediğim shift-add çarpma devresi. Bunun hoşuma giden yanı algoritmik akış şemasından (ASM - Algoirthmic Flow Chart) yola çıkarak kodu yazmış olmam. Internette pek çok yerde ve pek çok dijital tasarım kitabında bu ASM bulunabilir. Ben kullanımını rahatlatmak için küçük bir değişiklik yaptım. İşte ASM akış şeması

Normalde shift-add çarpma devresi 3 durumlu. En sona END durumunu ekledim. Start bitini 1'de unutunca çarpmaya devam etmesin. Çünkü çarpmaya başladı mı arada durdurulmuyor. Durum değişkeni için 2 bit kullanıldığı için 4. durumu oluşturmak donanım olarak da yük getirmiyor.

Esas modülde 3 always bloğu var. Biri sonraki durumu şimdiki durum yapan tek satırlık blok. Diğeri next_state için; bir sonraki duruma karar veren blok. Sonuncusu ise aritmetik işlemleri yapan blok. Always bloklarını bu şekilde ayırmak kodun yazılabilirliğini ve okunabilirliğini çok arttırıyor. Bu programlama tekniği aldığım verilog kitabında kullanılıyor.

En tepedeki modülü, çarpma modülünü kullanabilmek için yazdım. Spartan 3E Starter Kit'teki anahtar ve düğmelere göre sayı girme yöntemi belirledim. Karttaki 4 anahtar, 4 bitlik bir sayıyı gösteriyor. Batı düğmesi giriş tuşu. Ona basınca anahtarlardaki 4 bit sayı girilmiş oluyor ve 8 ledin ilk 4ü bu sayıyı gösteriyor. Aynı işlemi bu defa 2. sayı için yapıyorum. Bu sayede 2 tane 4 bitlik sayı girmiş oluyorum. Güney düğmesi çarpma modülünün "start" girişi. Ona basınca da 2 sayının çarpımı 7 segment ledlerde gözüküyor.

Shift-Add multiplier kodları buradan indirilebilir.

Booth-Wallace kodları buradan indirilebilir. Booth-Wallace çarpma modülünü karta uygun hale getirmeye uğraşmadım. Sadece algoritma hali var.

Booth-Wallace algoritması hakkında kaynak
http://www.eecs.tufts.edu/~ryun01/vlsi/index.htm

13 Haziran 2009 Cumartesi

Verilog Sunumu

Okulda bu dönem 3. sınıflara verilog sunumu yaptım. Slaytlarda çok yazı yok, sunumda anlattığım şeylerin özetini içeriyor. En azından biraz dijital elektronik, biraz da mantık tasarımı bilen ama verilog hakkında hiç bir şey bilmeyen birine nereden başlaması gerektiğini hakkında bilgi verebilir. Zaten anlattığım insanlar da ilk defa verilog gören kişilerdi. Sunum buradan indirilebilir.

2 Haziran 2009 Salı

İlk program

Yapmayı düşündüğüm programı bitirdim. Program, zıplama önleyicisi ve 7 bölmeli LED sürücüsünü test etmeye yarıyor. Her tuşa basılınca LED'lerdeki sayı bir artıyor. Eğlence olsun diye azalma özelliği de ekledim. Bir anahtar sayma yönünü belirliyor. Bu programı yazdığım çok iyi oldu. Çünkü zıplama önleyicisinde ve LED sürücüsünde önemli hatalar varmış. Şimdi ikisi de çatır çatır çalışıyor. İnternete koyduğum dosyaları da düzelttim.

Zıplama önleyiciye, düzgün simulasyon yapabilmek için reset ekledim.

LED sürücüde basamakların yerleri tersti ve 4 rakamını yanlış basıyordu. İkisini de düzelttim.

Kart kutusundan çıktığında programlama jumperlarının üçü de takılıydı. Bu sayede kartı açar açmaz kart, prom'daki programı kendine yüklüyordu. FPGA'i USB'den programlamak için jumperları sadece ortadaki kalacak şekilde yapmak gerekiyor. Bununla ilgili kullanım kılavuzunda açıklama var.

Program kodlarına buradan ulaşılabilir.

Sayma işlemini tuşla değil de döner kodlayıcı ile yapmak istiyorum. Bir dahaki programda döner kodlayıcıyı kullanacağım. Üstelik döner kodlayıcı için de bir modül yapmış olurum.

29 Mayıs 2009 Cuma

Kart Geldi

Sonunda kartım geldi. 26 Mayıs salı günü elime ulaştı. Buraya yazabilmek için anca vakit bulabildim. Kartı Xilinx'in Türkiye distribütörü Empa Elektronik'ten aldım. Fiyatı 190$+KDV. KDV dahil 350 YTL etti. Sipariş formunu imzaladıktan sonra 4 buçuk haftada elime geçti kart.

Kit kutu içinde geldi. Güzel bir kutusu var.

İşte kartın fotoğrafı

Kartın 1.5 m'den uzun USB kablosu var ama adaptör kablosu 1 m'den kısa. Prizlerin, USB girişlerine göre daha zor ulaşılabilir yerlerde olduğunu düşününce adaptör kablosu çok kısa. Kartı masaya koyduğumda; priz, yerde kartın tam altında değilse adaptör kablosu yetmiyor. Bu yüzden uzatma kablosunu bilgisayar kasasının üstüne koymak zorunda kaldım.

Korktuğum hirose konektörü. Korktuğum kadar varmış. Bu konnektörden hayatta bağlantı alamazdım. İyi ki eklenti kartını almışım.

Eklenti kartı ve 7 segment display ile görüntüsü. 7 segment, hirose konnektörün altındaki sokete de takılabiliyor ama hirose kartı takılı değil iken.

Kitin içinde iki tane referans kitabı çıktı:
  • Introduction to Programmable Logic
  • EDK Concepts, Tools and Techniques
Introduction to Programmable Logic kitabında, Xilinx FPGA ve CLPD'leri ve Webpack programını anlatıyor. Spartan serisi için en son Spartan 2E'lerden bahsediyor. Webpack'in de 6 sürümü üzerinden anlatıyor. Kitabın güncellemeye ihtiyacı var.

İkinci kitapta Embedded Design Kit'ini anlatıyor. EDK hakkında çok bilgim olmadığı için bu kitap hakkında pek yorum yapamayacağım.

Aldığım kitin kullanıcı rehberinin çıkmaması hoş değil. Bunu kendim kitap haline getireceğim artık.

Kitten 3 cd çıktı.
  • Spartan 3 Customer Resource CD
  • Xilinx 9.2i Design Tools Evaluation DVD
  • Embedded Development Kit DVD ve ISE 9.2i DVD
ISE'nin 11 sürümü çıkmışken kitin içinden 9.2 sürümü çıkıyor. Üstelik 2 tane. Hoş değil.

Spartan 3 Customer Resource CD'sinde bir sürü pdf var. İnanıyorum ki hepsini Xilinx'in sitesinden indirebilirim.

Design Tools Evaluation DVD'sinde ISE, webpack Chip scope gibi programlar var. Ama hepsi 9.2 sürümü. Şu sıralar işime yarayacak sadece webpack. Onunda 10.1 sürümünü kullanıyorum. Şu an işime yaramaz bir cd.

EDK DVD'sinde, ne olduğunu yeni yeni öğrenmeye başladığım gömülü tasarımdan bahsediyor.

Kitten çıkanlar hakkında bu kadar.

Kartın her tarafı açıkta olduğu için ESD tehlikesi var. Bunun için aklıma gelen ilk şey adaptör toprağına bir kablo bağlayıp ara sıra bu kabloya dokunmak. Şimdilik böyle idare edeceğim. Belki ileride ESD korumalı masa örtülerinden alırım.

Kartı çalıştırdığımda, kart üzerindeki flash bellekte saklanan program yükleniyor. Bu program test programı. LED'leri, döner kodlayıcıyı , tuşları ve LDC ekranı test ediyor. Bende hepsi düzgün çalışıyor. Bu program http://www.xilinx.com/products/boards/s3estarter/files/s3esk_startup.zip adresinden indirilebilir. Benim için kötü yanı vhdl ile yazılmış olması.

Kartla ilk yapmak istediğim 7 segment ile zıplama önleyiciyi denemek. Bunun için programı yazmaya başladım. Her şey bittiğinde buraya yazacağım.

25 Mayıs 2009 Pazartesi

FPGA Referans Kitabı

Evde kullanmak üzere Amazon.com'dan FPGA kitabı sipariş ettim. Okuldaki kütüphanede de var ama hep bende dursun istedim. Kitabın adı: FPGA Prototyping by Verilog Examples: Xilinx Spartan-3 Version. Kapak görüntüsü:


Kitap hakkında daha ayrıntılı bilgi için http://www.amazon.com/gp/product/0470185325/. Ben altığımda 58$'dı.

Piyasada bir sürü Verilog ve FPGA kitabı arasından bunu seçmemin sebebi
  • Kitap herhangi bir FPGA için değil, Spartan 3 göz önüne alınarak yazılmış. Kitapta bazı bölümler Xilinx FPGA'lere özgü. Örneğin son konu olan PicoBlazo mikroişlemci. PicoBlaze ile uğraşmak istediğimde çok işime yarayacak.
  • Kitapta siparişini verdiğim Spartan 3E Starter Kit'le yapabileceğim VGA, PS2 fare ve klavye, RS232 ile ilgili bölümler var. Bu bölümlerde her bir devrenin nasıl yapılacağını anlatıyor. İleride bana yol gösterici olacaklar. Bazı temel modülleri de anlatıyor.
  • Verilog için başvuru kitabı olacak nitelikte. Herhangi bir konuyu unuttuğumda açıp hatırlayacağım. İnternet var ama alıştığım bir kitapta bir konuyu bulmak daha kolay.
  • Verilog anlatan benzer kitaplara göre daha ucuz. Verilog ve FPGA ile ilgili 70$'ın altında başka kitap yok.
Sahip olmaktan mutlu olacağım bir kitap.

23 Mayıs 2009 Cumartesi

Spartan 3E Starter Kit Eklenti Kartları

Bu kartı almayı ciddi olarak düşünürken kartın I/O pinleri için olan genişleme konektörü ile ne yapacağımı düşünüyordum. Kartın kullanabileceğim 48 I/O’sundan 40’ı abuk Hirose FX-2 konektörde. Geri kalan 8 tanesi bana yetmez. Hirose FX-2’den kablo yardımıyla bağlantı almam mümkün değil. O yüzden bu konektörü kullanılabilir yapmaya karar verdim.

İnternetten konektör ile ilgili arama yaparken Digilent isimli bir firmanın sitesini buldum. Xilinx kartının üzerinde de Digilent yazıyor ama ben onları Texas Instruments, Micron, Intel, Linear gibi parça sağlayıcısı olduğunu düşünmüştüm (TI, güç kaynağını; Micron, SDRAM’i; Intel, flash RAM’i; Linear de ADC ve DAC’ı üretiyor). Meğersem adamlar kartın tasarımını yapmışlar.

Digilent’in sitesinde (http://www.digilentinc.com) tam benim ilacım olacak şeyler var. Ben de gümrüğe takılmasın diye 100$’ı geçmeyecek şekilde bir şeyler almaya karar verdim. (Sonradan öğrendim ki bu sınır, kargo ücreti dahil 100€’ymuş). Kargomu USPS (United States Postal Service) ile gönderdiler. 10 günde bana ulaştı. Kargo ücreti 43$. Kargomu Amerika dışında takip edemedim. Kargo elime ulaştığında, internette hala kargo San Francisco’dan ayrıldı gözüküyordu.

Gelelim neler aldığıma. Aldığım en önemli şey FX2 Module Interface Board. Bu kart sayesinde I/O’lara sıradan bir kablo ile ulaşabileceğim. Kartın fotoğrafı
Bu kartın esas amacı Pmod kartları için yer yaratmak. Pmod (Peripheral Modules), Digilent’in ürettiği envai çeşit eklenti kartları. Yine de benim işimi görür. Sonradan düşündüğümde FX2 Wirewrap alsaydım keşke dedim. Wirewrap üzerine kendi breadboard’umu yapıştırabilirdim. Neyse çok da önemli değil.

İkinci önemli kart 7 segment display. Xilinx kartında olmaması eksiklik zaten. 2 basamaklı, zaman çoklama (time multiplexing) kullanan basit bir kart. Program debug için LCD’den daha pratik bir çözüm. Kartın fotoğrafı

Xilinx kartı üzerindeki ADC ve DAC’a kolayca ulaşabilmek için 6 pinlik kablo aldım. Bu sayede ADC ve DAC pinlerine kendi breadboard’umdan erişebileceğim. Kablonun fotoğrafı

Tel kablo aldım! Amerika’dan tel kablo getirtmek ne kadar mantıklı olabilir? Ama kullanımı çok pratik. Adamlar breadboarda uygun olacak şekilde boylarını ayarlayıp uçlarını sıyırıp bir de bükmüşler. Kutusuyla birlikte geliyor, dağınıklık da olmuyor. Çok beğendiğimden 3 tane aldım. Belki Türkiye’de de satan vardır. Kutunun fotoğrafı
Breadboarda takılınca
Kutuda daha uzun kablolar da var tabii.

6 pinlik cinsiyet değiştirici (gender changer) aldım. Yukarıda aldığım kabloya uygun. ADC ve DAC için kullanacağım kabloyu breadboard’a takmak için lazım.

Bu aksesuarlar, Xilinx kartı ile bağlantı olayını epey kolaylaştıracaklar.

22 Mayıs 2009 Cuma

Spartan 3E Starter Kit Ön İnceleme

Merhaba.
Bir kaç ay önce evimde FPGA (Field Programmable Gate Array) işine girişmeye karar verdim. Bunun için internetten Xilinx'in başlangıç ve geliştirme kartlarına baktım. Sonunda Spartan 3E Starter Kit'in benim için en uygun kart olduğuna karar verdim. Bu kartı seçmemdeki sebepler
  • Xilinx FPGA kullanması. Altera kullanmak istemiyorum çünkü Xilinx daha yaygın. İşimde de Xilinx kullanılıyor.
  • Xilinx Türkiye Distribütöründen sipariş edilebiliyor. Kartın fiyatı 150$ olduğu için yurtdışından getirtmek istediğinizde büyük ihtimalle gümrüğe takılacak.
  • Xilinx'in doğrudan desteklediği bir kart olması. Bu sayede herhangi bir 3. parti programına ihtiyaç duymuyor. Bir tek ISE yeterli. Bu sayede bu 3. parti programlarını öğrenmekle vakit harcamıyorsunuz. Sadece FPGA'in kendisi ve ISE ile ilgileniyorsunuz.
  • Giriş çıkış portları çok. VGA, RS232 (voltaj ayarlama dervesi ile), PS/2, eternet (arayüz çipi ile). VGA'ya monitör bağlayabilir, PS/2'ye fare klavye bağlayabilir, RS232 ile bilgisayarla konuşabilirsiniz. Ethernet ile bilgisayar iletişiminin çok zor olduğunu okumuştum ama emin değilim.
  • Çevre birimleri çok. LCD ekran, 4 çıkışlı DAC, 2 girişli ADC, döner kodlayıcı (rotary encoder), 128 Mbit Flash bellek, 64 Mbyte SDRAM, EEPROM, toplam 48 pinlik genişleme portları, 4 buton, 8 LED. LCD ekran çok iyi debug imkanı veriyor. ADC ve DAC ile analog dervelerle uğraşabiliyorsunuz, herhangi analog sensorü okuyabilir veya aktuatörü sürebilirsiniz. Her çeşit bellek var. 48 pinlik genişleme yuvası da yeterli.
  • Kartta bir tane de CPLD (Complex Programmable Logic Device) var. Bu da FPGA gibi programlanabilen ama iç yapısı biraz farklı, içindeki bilgiler güç kesildiğinde kaybolmayan, nispeten daha küçük boyutta bir çip. CPLD'nin olması kartla yapabileceklerinizi oldukça arttırıyor.
Xilinx'in Spartan 3 ve Spartan 3A için de başlangıç kartları var ama fiyat/performans oranları daha düşük kanımca.

İşte Spartan 3E Starter Kit'in görünümü
Kart hakkında daha ayrıntılı bilgilere http://www.xilinx.com/products/devkits/HW-SPAR3E-SK-US-G.htm adresinden ulaşılabilir.

Kartın en problemli kısmı genişleme yuvaları. Çok abuk bir konektör kullanılmış: Hirose FX-2 100p. Hiç de evrensel bir konektör değil, sadece bu kartta kullanılıyor. Neyseki bu konektöre uygun genişleme kartları satılıyor.