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

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.

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

8 Haziran 2009 Pazartesi

Asus EEE ve ISE

Asus EEE dizüstü bilgisayarıma önce Eeebuntu ardından ISE 11.1 kurdum. ISE kurmak oldukça uğraştırdı. ISE'yi yüklemek problemsiz ama programı FPGA'e atmak için gerekli kablo sürücülerini yüklemek vakit alıyor.

Kablo sürücülerini yüklemek için http://www.xilinx.com/support/documentation/user_guides/install_drivers.tar.gz adresinden sürücü dosyalarını indirmek lazım. Bu sürücüyü kullanabilmek için WinDriver'ı kurmak lazım. WinDriver, sürücü programı hazırlamayı çok kolaylaştıran bir programmış. WinDriver http://www.jungo.com/st/download/WD1001LN.tgz adresinden indirilebilir. WinDriver'ı da düzgünce kurmak için fxload programını kurmak lazım. Fxload JTAG arayüzü sağlıyormuş. Fxload

apt-get install fxload


komutuyla kurulabiliyor. 1 program yüklemek için 3 program yüklemek durumunda kaldım.

Yüklemeler bittikten sonra iMPACT doğru çalışıyor. Fakat bilgisayarımın her açılışında windriver'ı yüklemem lazım. Bunu her açılışta yapabilmek için linux boot dosyasına windriver'ı yükleme için gerekli komutları eklemem gerekiyor. Eeebuntu'da linux boot dosyası /etc/rc2.d/S99rc.local
Bunu bir metin editörü ile açıp en sonuna şunları ekledim

/home/dincay/Programs/WinDriver/util/wdreg windrvr6
chmod 666 /dev/windrvr6


Ilk satırda WinDriver programının adresi yazmalı. Bu sayede her açılışta windriver yükleniyor.

Artık linux ortamında çalışan ISE 11.1'im var. 10 inçlik EEE ekranına ISE'yi sığdırmak biraz vakit aldı. Ama son hali çok hoşuma gitti.

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.