K uark projesi Temel Özellikler : Kuark işlemcisi 16 bit kelime uzunluğuna sahip bir işlemcidir. Veri ve komut belleği aynıdır ve en fazla 4 Gigabyte bellek adresleyebilir. İşlemcimiz paralel çalışabilecek şekilde tasarlanacaktır ve her bir komutu tek saat çevriminde tamamlayabilecektir. Doğrudan ve dolaylı adresleme modlarını desteklemektedir. Değişken uzunluklu komut formatı kullanılmıştır ve bir komut boyu en fazla 48 bittir. Aşağıda işlemcimizde kullanılan kütükler ve açıklamaları, komut formatı ve tüm komutların opkodları(komut kodları) açıklamalarıyla birlikte verilmiştir. Muhammet Dinç M. Fatih Uslu Recep Özçelik
Komut Formatı Komut uzunluğumuz azami 48 bit tir. Değişken uzunluklu komut formatı kullanılmıştır. Adres Modu 0: Doğrudan Adresleme 1: Dolaylı Adresleme Komut Türü 00: Bellek referanslı komutlar 01: Kütük referanslı komutlar 10: Giriş / Çıkış komutları 11: Kesme komutları Bellek referanslı komutlar: 48 bit uzunluğundadır. Birinci işlenen ile bellek arasında işlem yapıp sonucu 1. işlenene yazar.
Kütük referanslı komutlar: 16 bit uzunluğundadır. İvedi argüman alabilen komutlar da kütük referanslı komutlar kategorisindedir ve komut uzunluğu 48 bittir. Birinci işlenen ile ikinci işlenen arasında işlem yapıp sonucu 1. işlenene yazar. Giriş / Çıkış komutları: 16 bit uzunluğundadır. Eğer komut giriş komutu ise giriş kütüğündeki veriyi 1. işlenene yazar. Eğer komut çıkış komutu ise 1. İşlenendeki veriyi çıkış kütüğüne yazar. Kesme komutları: 16 bit uzunluğundadır. Yazılım kesmesi, harici kesmelere izin verme, harici kesmelerin iznini kaldırma komutlarını içerir. Not: Sadece bellek referanslı komutlarda dolaylı adreslemeye izin verilir. Birinci işlenen: S onucun yazılacağı kütük numarasını içerir. İkinci işlenen: Kütük referanslı komutlarda işlenecek ikinci kütük numarasını içerir.
Kütük numaraları 16 bitlik kütükler 0000 A (akümülatör) 0001 B (yardımcı kütük) 0010 C (yardımcı kütük) 0011 D (yardımcı kütük) 0100 BVK (bellek veri kütüğü) 0101 GRK (giriş kütüğü) 0110 CK (çıkış kütüğü) 0111 DK (durum kütüğü) 32 bitlik kütükler 1000 YG (yığın göstergesi) 1001 HG (hedef göstergesi) 1010 KG (kaynak göstergesi) 1011 P S (program sayacı) 1100 BAK (bellek adres kütüğü) Kütüklerimizi Tanıyalım 16 bitlik kütükler: A: Akümülatör B: Yardımcı kütük C: Yardımcı kütük D: Yardımcı kütük
BVK: Bellek veri kütüğü (bellekten okuduğumuz verileri yazacağımız kütük) G RK: Giriş kütüğü C K: DK: Çıkış kütüğü Durum kütüğü T: Taşma Bayrağı 0: Taşma yok 1: Taşma var I: İşaret Bayrağı 0: İşaret pozitif 1: İşaret negatif K: Kesme Bayrağı 0: Kesme izni yok 1: Kesme izni var E: Elde Bayrağı 0: Elde yok 1: Elde var S: Sıfır Bayrağı (Eşitlik) 0: Son işlemin sonucu 0 değil 1: Son işlemin sonucu 0
32 bitlik kütüklerimiz YG: HG: K G: P S: Yığın göstergesi Hedef göstergesi Kaynak göstergesi Program sayacı BAK: Bellek adres kütüğü OPKODLA R Bellek referanslı komutlar için Add 00000 (Addition) Sub 00001 (Subtraction) Mul 00010 (Multiplication) Mulu 00011 (Multiplication unsigned) Cmp 00100 (Compare) And 00101 (AND) Or 00110 (OR) Xor 00111 (XOR) Lw 01000 (Load word: Bellekten birinci işlenene veri okuma) Sw 01001 (Store word: Birinci işlenenden belleğe veri yazma) Beq 01010 (Branch if equal to 0) Bne 01011 (Branch if not equal to 0) Ba 01100 (Branch always) BL 01101 (Branch and link) : Halt 11110 (Dur) Nop 11111 (no operation)
Kütük referanslı komutlar için Add 00000 (Addition) Addi 00001 (Addition immediate) Sub 00010 (Subtraction) Subi 00011 (Subtraction immediate) Mul 00100 (Multiplication) Muli 00101 (Multiplication immediate) Mulu 00110 (Multiplication unsigned) Cmp 00111 (Compare) And 01000 (AND) Andi 01001 (AND immediate) Or 01010 (OR) Ori 01011 (OR immediate) Not 01100 (NOT) Xor 01101 (XOR) Xori 01110 (XOR immediate) Sll 01111 (Logical shift left) Srl 10000 (Logical shift right) Sla 10001 (Arithmetic shift left) Sra 10010 (Arithmetic shift right) Mov 10011 (Move data between registers) Movi 10100 (Move data immediate) Clear 10101 (1. işlenendeki kütüğü sıfırlama) Sil S 10110 (Durum kütüğündeki sıfır bayrağını sıfırlama) Sil E 10111 (Durum kütüğündeki elde bayrağını sıfırlama) Sil K 11000 (Durum kütüğündeki kesme bayrağını sıfırlama) Sil I 11001 (Durum kütüğündeki işaret bayrağını sıfırlama) Sil T 11010 (Durum kütüğündeki taşma bayrağını sıfırlama)
Yig 11011 (Yığına 1. işlenendeki veriyi at) Cek 11100 (Yığından 1. işlenene veriyi al) : Halt 11110 (Dur) Nop 11111 (no operation) Giriş / Çıkış komutları için Gir 00000 (1. işlenene GRK daki veriyi al) Cik 00001 (1. işlenendeki veriyi CK ya yaz) : Halt 11110 (Dur) Nop 11111 (no operation) Kesme komutları için Syscall 00000 (Software Interrupt) ION 00001 (Harici kesmeye izin ver) IOFF 00010 (Harici kesme iznini iptal et) : Halt 11110 (Dur) Nop 11111 (no operation)