# MIPS mimarisi
MIPS, Microprocessor without Interlocked Pipeline Stages, MIPS teknolojileri adlı firma tarafından 1985 yılında geliştirilmiş indirgenmiş komut kümesi türü bir mikroişlemci mimarisidir.
İndirgenmiş komut kümeli bilgisayar terimini ilk kullanan bilgisayar MIPS'dir. Her komut aynı boyuttadır ve komut bilgisayar donanımı tarafından kolayca çözülebilir. Intel x86 ise karmaşık komut kümeli bilgisayar sayılır. Komutların boyutları farklıdır ve komutları çözebilmek için bilgisayar donanımına gömülmüş programlar (microcode) gereklidir.
RISC yapısından ötürü tasarımı çok temiz ve basittir. Sistem karmaşık işlemleri destekleyen yapılar yaratmaktansa sık yapılan basit işlemleri iyileştirme üzerine kuruludur. Bu tasarım avantajından dolayı üniversitelerdeki bilgisayar mimarisi derslerinde genellikle MIPS mimarisi okutulur. Yine basit ve sağlam tasarımından ötürü çoğu modern mikroişlemci mimarisi (IBM/Motorola PowerPC, DEC, ARM) MIPS mimarisinden esinlenerek geliştirilmiştir.
1990 itibarıyla üretilen her üç RISC işlemciden birinin MIPS mimarisinde olduğu tahmin edilmektedir. İlk MIPS tasarımları 32 bit, daha yeni tasarımlar ise 64 bittir.
MIPS mimarisi SGI bilgisayarlarından gömülü sistemlere kadar geniş bir yelpazede kullanılmaktadır. Günümüz itibarıyla Nintendo 64, Sony PlayStation, Sony PlayStation 2 ve Sony PSP MIPS mimarisi ile çalışan işlemcilere sahiptirler.


## Yazmaçlar.
MIPS 32 işlemcisinin parçaları:
  - 32 tane genel-amaçlı yazmaç (her yazmaç 32 bit büyüklüğünde)
  - Birkaç özel-amaçlı yazmaç (PC, HI, LO, vs.)
  - Arithmetic Logic Unit (ALU)


## 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 veriyolları). 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 Üniversitesinde 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çerisinde 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 tamamıyla 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 önbellek 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 ) önbellek ö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 önbellekler 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 önbelleğ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 ) önbellek 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 veriyoluuna 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 önbellek 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 önbellek 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 önbelleği olan), bir kayan nokta ünitesi, üç adet tamamen isteğe bağlı kullanılan ikincil önbellek yönlendirme RAM’i (ikisi ikincil önbellek erişimi için, biri veriyolu trafik gözetlemesi için) ve bir adet önbellek kontrol birimi ASIC. Tasarım tam anlamıyla boru hatlı iki adet çarpma – toplama birimine sahipti, bunlar yonga dışındaki 4MB’lik ikincil önbellekten 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 önbelleğ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 önbellekte “cache”, DDR SRAM için ilave destek ve 200 MHz’de daha iyi saat besleme hızlı bir ön yüz veriyoluuna “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 önbellek 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 önbellek 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 önbellek ve üçüncü bir opsiyonel önbellek 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.