Marmara Ünv. Bilgisayar Mühendisliği Bölümü USTURLAB Marmara Ünv. Bilgisayar Mühendisliği Bölümü
Temel Özellikler 16 bit veri yolu 32 bit adres yolu 32 genel amaçlı register JAL 8 clock cycle, LD / ST ve MUL (signed) 3 clock cycle, kalan bütün komutlar 2 clock cycle. (JAL dışındaki) tüm komutlar 1-2 word uzunluğunda. JAL 3 word uzunluğunda
Komut Setinin Özellikleri Sysenter dışındaki bütün komutlar gerçeklendi.Sysenter Linux bazlı sistemlerde kullanıcı modundan kernel moduna geçişte kullanılıyor. İşlemcimizde memory management (paging) ve ayrıcalık seviyeleri olmadığı için bu komutu kullanmadık. Daha hızlı çalışan ek komutlar ekledik.
Genel mimari ALU Kontrol ünitesi (microprogramlı) Adresleme ünitesi ( addresleme modu hesapları için ) Register bankası (32 16-bit register) PC (program counter), DR (data register) LO, HI registerleri (çarpma operasyonu için – MIPS gibi )
LD ve ST komutları USTURLAB LD /ST mimarisinde tasarlandı. Ana belleğe sadece LD ve ST komutlarıyla ulaşılıyor. LD reg1, reg2, reg3, disp reg3 <- M( [ reg1 : reg2 ] + sign-ex(disp) ) disp işaretli 11-bitlik bir sayı ST operasyonu da aynı şekilde çalışıyor.
Addresleme Modu Önceki saydamda gösterilen adresleme modu en karışık array / struct işlemlerini gerçekleyebilecek şekilde seçildi. A[i+1] = A[i] + A[i-1] A[i-1].salary , A[i].age gibi nispeten karmaşık C yapıları bu adresleme moduyla kolaylıkla makina koduna çevrilebilir.
Akış kontrol komutları Bütün akış komutları PC-göreli olarak tasarlandı (relocatability için). İki temel akış kontrol komutu var: JPL, JPS JPL (long jump): JPL xyz PC <- (address of JPL instruction+1) + sign-extend-to-32-bits( xyz ) xyz 26 bitlik işaretli sabit bir sayı.
JPS (Short Jump): JPS xyz xyz 10-bitlik işaretli bir sayı. PC <- PC + sign-extend-to-32-bits( xyz ) JPL uzun sıçramalar yapma olanağını veriyor, ama yavaş ve hafızada çok yer tutuyor. Programlardaki sıçramaların çoğu kısa mesafelere yapıldığı için JPS (3 yerine 2 clock cycle, 2 yerine 1 word uzunluğunda) avantaj sağlıyor.
Şartlı akış kontrolü komutları XOR operasyonuyla set edilen sıfır bayrağını kullanıyorlar Bu komutların da short ve long versiyonları var: JPLZ, JPLNZ JPSZ, JPSNZ
Fonksiyon çağırma JAL (jump and link) operasyonu. Aynen MIPS te olduğu gibi çalışıyor: JAL reg1, reg2, addr(32-bit): Reg1<- LOW(PC+2) Reg2 <- HIGH(PC+2) PC<- addr //resolv’d by linker JR tam tersini yaparak fonksiyondan dönüyor
ALU komutları-1 Register - register: ADD, SUB, MULI, MUL, AND, OR, XOR, SLL, SRL, SLA, SRA, MOV OPR reg1, reg2 : reg1 <- reg1 opr reg2 Örnek: MOV reg1,reg2 : reg1 <- reg2 SUB reg1,reg2: reg1 <-reg1-reg2
ALU komutları-2 İmmediate : ADDI, SUBI, MULI, MULI, MULUI, MOVI, ANDI, ORI, XORI. OPR reg1, reg2, amt : reg1 <- reg2 opr amt amt 16 bitlik işaretli bir sayı Immediate ALU komutları fazladan bir hafıza erişimi gerektiriyor ve hafızada bir word daha fazla yer tutuyorlar.
ALU komutları-3 ADDI ve SUBI çoğunlukla küçük sayılar için kullanıldığından bu komutların sadece küçük sayılar için çalışan daha hızlı versiyonlarını da komut setimize ekledik: ADDIS, SUBIS aynı INC ve DEC operasyonlar gibi çalışıyor, ancak (-1, +1) yerine 6 bitlik işaretli sayıları kullanıyor.
ALU komutları-4 Dört çarpma komutu var : MUL, MULU, MULI, MULUI Çarpma operasyonları 32 bit sonuç verdiği için sonuçlar LO ve HI isimli iki 16 bitlik özel registera atılıyor. Daha sonra bu sonuçlar MOV reg, LO ve MOV reg, HI özel MOV komutlarıyla istenilen genel amaçlı registera getiriliyor.
Tasarımımızdaki Eksiklikler Byte operasyonları yok Nonaligned hafıza erişimi yok Overflow bayrağı yok Sıfır bayrağı şu anda sadece XOR ile set ediliyor ( CMP operasyonu). ADD ve SUB gibi operasyonlarla da set edilebilmeli. Stack yok Kesmeler yok
Test Programı-1 Usturlabı test etmek için kısa bir program yazdık. Program bellekte 64KWord’den başlayan 5 wordluk alana 1, 2, 3, 4, 5 yazıyor. Program şartlı sıçramaları, ALU operasyonlarını (ADD, XOR), MOV ve ST komutlarını test ediyor.
Test programı-2 Movi reg3, 1 8460 0001 Movi reg1, 1 8420 0001 Loop St [reg1:reg2]+0, reg3 0822 0003 Addis reg2, 1 4841 Addis reg3, 1 4861 Xori reg3, 5 94a2 0005 Jpstz Loop 1bf9 Halt 3c00
Test Programı-3 Test programının çalışması (bazı ek mimari bilgileriyle beraber) bu klasördeki usturlab mimarisi.vmw klibi ile belgelendi. Şu noktada bu klibi seyredeblirsiniz. Klipte açıkça görülebildiği gibi CPU’nun çalışmasında bazı problemler var. Bu hatalar bizim CPU tasarımımızdan ziyade Logisim’den kaynaklanıyor!
Problemler ve Sebepleri-1 Usturlab’ın hatalı sonuç ürettiği bir işaretli çarpma işlemi carpma hatasi.wmv klibinde analiz edildi. Şu noktada bu klibi izleyebilirsiniz. Klipte, çarpma hatasının ALU içindeki bir OR kapısının hatalı çalışmasından kaynaklandığı açıkça görülüyor. Yani hata Logisim kaynaklı.
Problemler ve Sebepleri-2 Programlar genellikle doğru çalışıyor. Ancak daha önce birçok kez doğru çalışmış bir program hatalı çalışabiliyor. Yaptığımız analizlerde bu hataların Logisim kaynaklı olduğunu saptadık. Hatalar genellikle ALU’daki veya adresleme ünitesindeki bir kapının yanlış çalışmasından kaynaklanıyor.
Problemler ve Sebepleri-3 Logisim’de gözlemlediğimiz bu problemi başkaları da gözlemlemiş. Sourceforge’deki Logisim sitesinde “Logisim sometimes calculates incorrect value with basic gate” başlığı altında bug report’lar var. http://sourceforge.net/tracker/index.php?func=detail&aid=1938274&group_id=143273&atid=755041
Problemler ve Sebepleri:Sonuç Dizaynımızın doğru çalıştığına ve hataların tümüyle Logisim kaynaklı olduğuna inanıyoruz.
Sunumumuza zaman ayırdığınız için teşekkür ederiz Sunumumuza zaman ayırdığınız için teşekkür ederiz! Sorularınız varsa: Mehmet Baran : 0532 243 85 49
Kaynaklar-1 John Carpinelli, Computer Systems Organization and Architecture David A. Patterson and John L. Hennessy Computer Architecture The Art of Assembly Language Chapter 5: Instruction Set Architecture http://webster.cs.ucr.edu/AoA/Windows/HTML/ISA.html
Kaynaklar-2 Morris Mano Digital Design Intel® 64 and IA-32 Architectures Software Developer's Manuals http://www.intel.com/products/processor/manuals/