KAFA Open-Source/Open-Implementation, 32-bit CPU Proje Yetkilisi: Deniz ALTINBÜKEN Proje Danışmanı: Prof. Emin Gün Sirer Projenin Bağlı Olduğu Kurum: Koç Üniversitesi, Bilgisayar Mühendisliği Bölümü
Desteklenen Komutlar J, JR, JAL BEQ, BNE, BLEZ, BGTZ LW, SW, MOV, MOVI LUI ADDIU, ANDI, ORI, XORI, SUBI ADDU, SUBU, AND, OR, XOR, NOR, CMP, NOT SLL, SLA, SRL, SRA, SLLV, SRLV, SRAV
Desteklenen Komutlar Java koduyla oluşturulmuş olan Program Counter implementasyonunda aşağıdaki komutlar bulunmadığı için simülasyonları yapılamamıştır. Fakat implementasyonları yapılmıştır ve işlemci içerisinde simüle edilmemiş olsalar da çalışma durumları ayrı ayrı test edilmiştir. SUBI, MULT, MULTI, MULTU, CMP, NOT SLA, MOV, MOVI, JAL, HLT, SYSCALL
Örnek Adres Dağılımı Adres dağılımına göre hangi Register’dan okuma yapılacağı, hangi Register’a data kaydı yapılacağı, yukarıdaki örnekte verilen sayının kaç bit kaydırılacağı gibi bilgiler ayrıştırılır. Bu ayrıştırma ve Adres değerine göre karar alma süreci iki adet Control Unit tarafından yapılmaktadır.
Örnek MIPS Diagramı Turuncu çizgiler bilgi akışının sağlandığı yolları, siyah çizgiler ise 32-bitlik adres değerlerinin akışının sağlandığı yolları göstermektedir.
Genel Dizayn
ALU Dizaynı • Temel Aritmetik ve Lojik işlemler ALU’da gerçekleştirilmektedir. • ALU 32-bitlik işlemler için tasarlanmıştır. • Hangi işlemin yapılacağına karar verilmesi için kullanılan opcode ALU Kontrol Ünitesinde oluşturulmaktadır. • ALU’da işlem görecek olan değerlerin nereden geleceği Ana Kontrol Ünitesinde oluşturulan kontrol datalarına bağlıdır. • MULT işlemi ALU’ya gömülememiştir fakat kendi içerisinde çalışır durumdadır.
32-bit Toplama-Çıkarma Ünitesi Çıkarma işlemi Two’s Complement Mantığı implement edilerek yapılmıştır: 1011 – 0011 = 1011 + 1100 + 1 = 1000
1-bit Toplama-Çıkarma Ünitesi Toplama-Çıkarma Ünitesi’nin yapıtaşı olan bu 1-bitlik ünite 32-bit sayılara ait her bit toplanırken kullanılmaktadır. Ardarda yapılan toplama işlemleri arasında ‘elde kalan değer’ler bir önceki işlemden bir sonrakine taşınmaktadır.
32-bit Right Shifter Ünitesi Bu ünite içerisinde 5 katmanda 25-bitlik sağa kaydırma işlemi yapılmaktadır. İlk katmanda 2-bit, ikinci katmanda 4-bit, üçüncü katmanda 8-bit... kaydırma prensibine göre çalışmaktadır.
32-bit Total Shifter Ünitesi Bu ünite içerisinde sadece Right Shifter kullanılarak Right ve Left-Shift işlemleri yapılmaktadır. Left-Shift işlemi aşağıda gösterilen mantığa göre yapılmıştır: 101111 << 2 = R(R(101111) >> 2)) = R(111101 >> 2) = R(001111) = 111100
32-bit Çarpma Ünitesi • Bu ünite içerisinde iki 32-bit sayının çarpım işlemi hem pozitif hem de negatif sayılar için gerçeklenmiştir. • İmplementasyonda bilinen çarpma işlemi mantığı kullanılmıştır: İlk sayı ikinci sayının her biti ile çarpılır ve her çarpma işlemi sonrasında kaydırma işlemi yapılır. Elde edilen tüm sayılar toplanır ve sonuç elde edilir. • Bu ünite içerisinde yapılan toplama, çıkarma ve kaydırma işlemleri 64-bitlik sayılar üzerinde yapıldığı için 64-bitlik toplama-çıkarma ve kaydırma ünitesi tasarlanmıştır.
32-bit ile 1-bit Çarpma Ünitesi • 32-bitlik bir sayının her bitinin 1-bit ile çarpıldığı 32-bitlik Çarpma Ünitesinin yapıtaşı olan ünitedir. • Çarpma işlemi 32-bit için ayrı ayrı 32 adet AND işlemi yapılarak gerçekleştirilmiştir.
64-bit Toplama-Çıkarma Ünitesi • Bu ünite Çarpma Ünitesi içerisinde oluşturulan 64-bitlik sayıların toplanması için tasarlanmıştır. • Yapıtaşı olarak 1-bitlik toplama çıkarma ünitesi kullanılmıştır.
64-bit Right Shifter Ünitesi • Bu ünite içerisinde 64-bitlik bir sayının 5 katmanda 25-bitlik sağa kaydırma işlemi yapılmaktadır. • Bu ünite Çarpma İşlemi sırasında yapılması gereken kaydırmaların gerçekleştirilmesi için ilk adım olarak tasarlanmıştır.
64-bit Total Shifter Ünitesi • Bu ünite içerisinde 64-bitlik bir sayının sağa ve sola kaydırma işlemleri yapılmaktadır. • Sola kaydırma işlemi 32-bit Total Shifter Ünitesinde olduğu gibi Right Shifter kullanılarak yapılmıştır.
PC Güncellenme Detayı • Görülen Program Counter Jump ve Branch olmadığı durumlarda Program ROM’u dörder satır ilerletmektedir. Jump veya Branch olduğu durumlarda yeni PC değeri PC’nin solunda ve üzerinde kalan kısımlarda hesaplanmaktadır.
Ana Kontrol Ünitesi Ana Konrol Ünitesinde ALUda yapılacak işlemler için opcode ayrıştırılması, okunacak ve yazılacak dataları kontrol edecek değerlerin oluşturulması, Branch ve Jump gibi komutlara karar verilmesi gibi işlemler yapılmaktadır.
ALU Kontrol Ünitesi ALU Konrol Ünitesinde ALUda yapılacak işleme karar verilmesi için gerekli olan 4-bitlik opcode Ana Kontrol Ünitesinden gelen ALUop, address değerinden alınan opcode ve function değerleri işlenerek yaratılmaktadır.
Memory Ünitesi Detayı Memory Ünitesi Memory’ye kayıt ve Memory’den okuma işlemleri sırasında kullanılmaktadır. Okuma ve yazma işlemleri Ana Kontrol Ünitesi içerisinde üretilen değerler ile kontrol edilmektedir.
Branch Detayları Branch komutunun yerine getirilip getirilmeyeceğine 4 farklı Branch Ünitesi içerisinde ayrı ayrı karar verilmektedir. Branch senaryosuna göre, ALU’dan gelen veriler bu üniteler içerisinde yorumlanır ve alınan karara göre PC değerinin update edilmesi için komut gönderilir.
Simülasyon Simülasyon için Program ROM’a çalıştırılacak Assembly Kodu yüklenmiş ve Clock ilerlerken Register File, Memory ve Program ROM’daki değişiklikler izlenerek beklenen değerlerin elde edilip edilmediği incelenmiştir. Alınan değerler beklenen değerlerle aynıdır.
Simülasyon
Simülasyon
Simülasyon
Simülasyon • Simülasyonlar sırasında isteğe yönelik olarak hazırlanmış ya da C Kodundan compile edilerek hazırlanmış (.s formatında) Assembly Kodları kullanılmıştır. Örnek kodlar aşağıda verilmiştir. ORI $14, $0, 4 SLLV $11, $12, $14 SRAV $11, $13, $14 SRLV $11, $13, $12 SW $29, 16($25) LW $10, 12($26) ORI $12, $28, 56 ... BEQ $29, $30, ARI1 #NO_APP ori $29,$29,0 ori $29,$30,0 lw $30,0($29) addiu $29,$29,8 jr $31 .end putc .align 2 .globl getc .ent getc .type getc, @function
Detaylı Bilgi İçin... Bu sunum içerisinde projenin yalnızca temel noktalarına değinilmiştir. İşlemcinin dizaynı sırasında kullanılan prensiplerin, işlemcinin yapısının ve simülasyon verilerinin daha detaylı anlatımı hazırlamış olduğum rapor içerisinde bulunmaktadır. Teşekkür ederim.