MIPS mimarisi

MIPS Assembly Dili

MIPS assembly diğer Assembly'lere göre çok daha kullanışlı ve basittir. Intel 80x86 assembly dilinin karmaşık yapısına kıyasla tasarımı takip eden, mantıklı bir yapıdadır.

Yorumlar

Assembly kodunda yorumlar # karakterinden sonra başlar ve sıra sonuna kadar devam eder.
# Bu bir yorumdur
# Bu da yeni bir sırada yer alan yorumdur

Etiketler

Etiketler kodun bir sırasını işaretler ve sonra bu sıraya yeniden dönülmesini sağlar.
loop: blt $a0, 1, end      # loop etiketi tanımlanıyor  
      mul $v0, $v0, $a0
      sub $a0, $a0, 1
      b loop               # loop etiketi çağrılıyor

Komutlar

Her komut bir sıra alır.
# Eksiltme komutu (sub)
# $a0 = $a0 - 1
sub $a0, $a0, 1

İşlem kodu

İşlem kodu komut türünü tanımlar.
# Komut türü = blt (branch if less than)
blt $a0, 1, end
# Eğer $a0 yazmacında bulunan sayı 
# 1'den az ise end etiketine atla

Register

Merkezi İşlem Biriminde bulunan, belli sayıdaki hızlı saklama aygıtları
end: j $ra  # $ra bir yazmaçtır

SPIM Simulatörü

MIPS R2000 mimarisinin ücretsiz dağıtılan simulatörü SPIM, Unix, MS Windows ve Macintosh OS X altında kolayca kullanılabilen bir yazılımdır.

MIPS Yapısı

İlk MIPS(Microprocessor without Interlockes Pipeline Stage) mimarileri 32-bit olarak gerçekleştirilmiştir (genellikle 32-bit geniş yazmaçlar ve veri yolları). Daha sonraki versiyonları ise 64-bit olarak tasarlanmış ve gerçekleştirilmiştir. Öncekileriyle uyumlu 5 tane düzeltilmiş MIPS komut kümesi tanımlanır. Bunlar MIPS I, MIPS II, MIPS III, MIPS IV, ve MIPS 32/64’tür.

Geçmişi

1981 yılında Stanford Üniversitesi’nde John L. Hennessy ilk MIPS işlemcisinin nasıl olması gerektiği konusunda çalışmalarına başlamıştır. Temel düşünce, performansı, komut boru hatlarını kullanarak etkileyici bir biçimde artırmaktı, ama bunu gerçekleştirmek zordu. Genellikle bir boru hattı görevi birçok adımda gerçekleştirir ve bunu birçok adıma yayar, bir önceki komut tamamlanmadan, bir komutun “birinci adım”dan başlayarak onu çalıştırır. Buna karşı, o dönemin geleneksel tasarımlarında bir sonraki komuta geçilmeden, bir önceki işletilen komutun tamamlanması beklenir.
Boru hattı uygulamasında karşılaşılan en büyük engel, komutların birbirine bağlanma (interlock) işleminin kurulmasındaki zorluktu. Ayrıca bu çok zaman alan bir işlemdi ve gelecekte yapılacak olan hız geliştirmeleri çalışmaları için büyük engel teşkil ediyordu. MIPS tasarımlarının görülen en önemli kısmı, bütün komutların bir döngü süresi içerinde tamamlanmasıdır. Bunun gerçekleştirilebilmesi, birbirine bağlanma işlemi gereksinimlerini ortadan kaldırmakla olur.
Bu tasarım birçok kullanışlı komutları ortadan kaldırmasına rağmen, sistemin geneline baktığımızda, sistemin performansını etkileyici bir biçimde geliştirmiştir. Çünkü çipler çok yüksek saat hızlarında(oranlarında) çalışmaktadır.
Bazı komutların ortadan kalkması tartışılan bir konu olmuştur. Çoğu gözlemler bu tasarımın canlılığını koruyamayacağını iddia ediyorlardı. Eğer basit bir komut, basit eklemlerle karmaşık birçok komutla değiştirilecekse hızın nerede artacağı sorusu akla geliyor. Bu tamamıyla basit çözümlemelerle göz ardı edilebilir, tasarımın hızı komutlarla değil boru hatları unsuruyla gerçekleşir.
1984 yılında Hennessy tasarımın gelecekteki ticari potansiyeli hakkında ikna edildi.1985 yılında ilk MIPS tasarımı olan R2000 çıktı. Bu tasarım biraz daha geliştirilerek 1988 yılında R3000 yapıldı. Firmanın esas oluşmasını 32 bitlik R2000 ve R3000 oluşturuyordu.
1991 yılında MIPS ilk 64-bit mikroişlemcili piyasaya çıkardı,R4000. MIPS pazara girene kadar bazı finansal zorluklarla karşılaştı. Bu yeni tasarım SGI için çok önemliydi, çünkü SGI MIPS’in en önemli müşterilerinden birisiydi ve 1992 yılında SGI tamamiyle MIPS’i satın aldı.

CPU Ailesi

MIPS’in ilk ticari CPU modeli R2000 1985 yılında ilan edildi. R2000 bölme ve çarpma komutlarına birçok döngü ekledi, bunlar çipin üzerindeki birimlerden bağımsızdı. Bu birimlerden işletilen çekirdeğe yeni komutların düzeltilmiş sonuçları eklendi. Bu düzeltilen komutlar birbirine bağlandı.
R2000 ayrıca 4 tane işlemciyi de destekliyordu, bunlardan bir tanesi Merkezi İşlem Birimi’nin (CPU) içine monte edildi. Diğer 3 işlemci ise başka amaçlar için ayrıldı.
R3000 modeli 1988 yılında R2000’i takip etti, bu model çok işlemcili uygulamalar için ön bellek tutarlılığı “cache coherency” desteğinin yanı sıra komutlar ve veri için 32 kB ( bu kısa bir süre sonra 64 KB’a yükseltildi ) ön bellek özelliği getirmişti. R3000’in çok işlemcili uygulamalara destek konusunda bazı eksiklikleri olmasına rağmen, bu eksiklikler yine de bazı başarılı çok işlemcili tasarımların parçası haline gelmesine engel olmadı.R3000’in, çağın CPU’ları arasında çok rastlanan bir özellik tümleşik bir de olarak MMU’su vardı. R3000 pazardaki ilk başarılı MIPS tasarımı idi ve bir milyon adetten fazla üretildi. R3000A, son derece başarılı bir ürün olan Sony PlayStation’da kullanıldı. Bu üründe kullanılan, 40 MHz hızda çalışarak 32 VUP performans sağlayan hızı artırılmış bir versiyondu. R2000 gibi, R3000 de R3010 FPU ile çiftlendirilmişti. Pacemips R3400’ü üretirken IDT R3500’ü üretti. Bunların her ikisi de aynı yonga üzerinde R3010 fpu’ya sahip birer R3000 idiler. Toshiba'nın R3900’ü ise Windows CE tabanlı ilk Cep Bilgisayarları “Handheld PC” için gerçekte üretilen ilk SoC idi.
R4000 serisi, 1991’de piyasaya çıkartıldı ve MIPS komut serisini tam 64 - bit mimarisine genişletti, tek yongalı bir sistem yaratmak için FPU’yu ana zar üzerine taşıdı ve radikal derecede yüksek bir dahili saat besleme hızında çalıştı (100 MHz olarak tanıtılmıştı ). Fakat belirtilen bu saat besleme hızına erişebilmek için ön bellekler 8 KB’ye indirilmişti ve erişim için üç çevrim tamamlanması gerekiyordu. Yüksek işletim frekanslarına ulaşılması için derin boru hattı “deep pipelining” ( o zamanlar süper boru hattı diye adlandırılıyordu ) adında bir teknik kullanılması gerekiyordu. R4000’in piyasaya sürülmesinin hemen ardından daha geliştirilmiş versiyonları takip etti. Bunların arasında bulunan, 1993 yılında piyasaya çıkan R4400’ün 16 KB ön belleği bulunuyordu, R4400 64 – bit ile büyük ölçüde hatasız çalışıyordu ve ilave edilebilecek bir başka 1 MB’lik harici ( seviye 2 ) ön bellek için bir kontrol birimine sahipti.
Artık SGI’nın MTI adındaki bir bölümü olarak işlev yapan MIPS, daha düşük maliyetli R4200’ü daha sonra da bundan da daha düşük maliyetli R4300’ü piyasaya çıkarttı. R4300 32 – bitlik veri yoluna sahip bir R4200 idi. Nintendo 64 düşük maliyetli MIPS R4300i[1] üzerine kurulmuş bir CPU olan NEC VR4300 kullanıyordu.
Kuantum Etkisi Cihazları “Quantum Effect Devices” (QED); MIPS’den ayrılan bir grup ayrı bir şirket kurarak R4600 "Orion", R4700 "Orion", R4650 ve R5000’i tasarladı. Bunlardan R4000 saat besleme frekansını arttırırken ön bellek kapasitesini feda etti, QED tasarımları sadece iki çevrimde erişilebilen ve silikon alanların daha verimli kullanılmasına olanak tanıyan büyük ön bellek kapasitelerine önem veriyordu. R4600 ve R4700 SGI Indy iş istasyonunun düşük maliyetli versiyonlarında ve 36x0 and 7x00-serisi yönlendiriciler gibi MIPS tabanlı ilk Cisco yönlendiricilerinde kullanılıyordu. R4650 orijinal WebTV kutularında ( şimdi Microsoft Tv ) kullanılıyordu. R5000 FPU’nun R4000’e kıyasla daha esnek tekli hassas kayan - nokta çizelgeleme yeteneği vardı ve bunun sonucunda R5000 tabanlı SGI’ye sahip Indy’ler kendilerinde kullanılanın aynı saat beslemesine ve grafik donanımına sahip R4000’ler kullanılan Indy’lere kıyasla çok daha yüksek bir grafik performansına erişiyordu. SGI, eski grafik kartını R5000 ile birleştirince elde edilen gelişmeyi vurgulamak için karta yeni bir isim koydu. QED daha sonra ağ oluşturma ve lazer yazıcılar gibi gömülü pazarlar için RM7000 ve RM9000 ailesi cihazları geliştirdi. QED Ağustos 2000 tarihinde PMC-Sierra adında bir şirket tarafından satın alındı. Satın alımı yapan şirket MIPS mimarisine yatırım yapmaya devam etti.
R8000 (1994) ilk süper ölçekli “superscalar” MIPS tasarımıydı, her çevrimde iki adet ALU ve iki adet hafıza işlemini gerçekleştirebiliyordu. Tasarım altı adet yonga üzerine yayılmıştı: bir tam sayı ünitesi (16 KB komut ve 16 KB L1 veri ön belleği olan), bir kayan nokta ünitesi, üç adet tamamen isteğe bağlı kullanılan ikincil ön bellek yönlendirme RAM’i (ikisi ikincil ön bellek erişimi için, biri veri yolu trafik gözetlemesi için) ve bir adet ön bellek kontrol birimi ASIC. Tasarım tam anlamıyla boru hatlı iki adet çarpma – toplama birimine sahipti, bunlar yonga dışındaki 4MB’lik ikincil ön bellekten veri aktarımı sağlıyordu. R8000’ler 1990’lı yıllarda SGI’nın Power Challenge serisi sunucularında, daha sonra da Power Indigo2 iş istasyonlarında kullanıldılar. Yüksek FPU performansı bilimsel uygulamalara oldukça uygun olmasına rağmen tam sayı işleme konusundaki kısıtlı performansı ve yüksek maliyeti pek çok kullanıcının hevesini kırdığından R8000 pazarda ancak bir yıl kadar tutunabildi, artık piyasada çok az sayıda R8000 bulunabiliyor.
1995, R10000 piyasaya çıktı. Bu işlemci tek yongalı bir tasarıma sahipti, R8000’den daha yüksek bir saat besleme hızında çalışıyordu ve daha büyük bir 32 KB birincil komut ile veri ön belleğine sahipti. Aynı zamanda süper ölçekliydi, fakat getirdiği asıl yenilik sıra dışı işleyişindeydi. Tek bir hafıza boru hattı ve daha basit bir FPU kullanıldığında bile çok büyük tam sayı performansına, düşük maliyetlere ve yüksek yoğunluğa ulaşıyor olması R10000’in çok geniş bir müşteri tarafından tercih edilmesini sağladı. 
Son zamanlarda geliştirilen tasarımların hepsi R10000 çekirdeği üzerine kurulmaktadır. R12000 kullanılmaya başlandığında yongayı küçültüp üretimi geliştirirken daha yüksek saat besleme hızlarında çalışılabilmesine olanak tanıdı. R12000 daha geliştirilerek üretilen R14000 daha yüksek saat hızlarına olanak tanırken yonga dışındaki ön bellekte “cache”, DDR SRAM için ilave destek ve 200 MHz’de daha iyi saat besleme hızlı bir ön yüz veri yoluna “front side bus” iş çıkarma yeteneği sağladı. Daha sonra gerçekleştirilen geliştirmelere R16000 ve R16000A adları verildi. Bunlardaki değişiklikler öncekine kıyasla arttırılmış saat besleme hızı, ilave L1 ön bellek, ve daha küçük zar üretimi idi.

Diğer modeller ve geleceğe ait planlar

MIPS ailesinin diğer bireyleri arasında Bipolar Integrated Technology tarafından üretilen, MIPS mimarisinin bir ECL uygulaması olan R6000’i sayabiliriz. R6000 mikro işlemcisi MIPS – II komut setini de beraberinde getirdi. R6000’in TLB ve ön bellek mimarisi MIPS ailesinin bütün diğer üyelerinden farklıdır. R6000 kendinden beklenen performansı gösteremedi, bazı Kontrol Verileri “Control Data" makinelerinde kullanılmasına rağmen pazardan kısa sürede silindi. PMC-Sierra RM7000, içerisinde kendinden 256 kB seviyede 2 ön bellek ve üçüncü bir opsiyonel ön bellek için bir adet kontrol birimi bulunan R5000’in bir versiyonuydu. Öncelikle SGI’nın grafik işlemcileri ve çoğunlukla Cisco tarafından geliştirilen muhtelif ağ oluşturma çözümleri gibi gömülü “embedded” tasarımları hedefliyordu.  R9000 ismi hiçbir zaman kullanılmadı. 
Bir seferinde SGI, MIPS platformundan uzaklaşıp Intel Itanium platformunu denedi, geliştirme çalışmasının sonucu R10000 idi. Itaniumun piyasaya çıkartılmasında yaşanan gecikmeler MIPS tabanlı makinelerin daha da artması sonucunu getirdi. 1999 yılına gelindiğinde geliştirme çalışmaları sonuçlanmıştı ve bu çalışmalar neticesinde R14000 ve R16000 piyasaya sürüldü. SGI, ileride çıkartacağı R serisi cihazlar için daha karmaşık R8000 tipi FPU’ya ve aynı zamanda dual çekirdekli bir işlemciye dair bazı ipuçları vermiş olmasına rağmen SGI’nin mali sorunları ve Altix üzerinde IRIX ikililerinin çalıştırılması için resmen QuickTransit emülasyonunun destekleniyor olması IRIX / MIPS donanımının geliştirilmesi çalışmalarının sonu oldu.

R3000 komut setinin özeti

Komutlar üç ayrı tipe ayrılmaktadır: R, I ve J. Her komut 6 - bitlik bir işlem kodu ile başlar. İşlem koduna ek olarak R – tipi komutlar üç yazmaçı, bir kayma miktarı alanını ve bir fonksiyon alanını belirler; I – tipi komutlar iki yazmaçı ve 16 – bitlik anında erişim değerini belirler; J – tipi komutlar işlem kodunu 26- bitlik [2][3] bir zıplama hedefi ile takip eder.