For english version http://dincaysroom.blogspot.com (Not complete yet)

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.

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.

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.