Agah Burak DEMİRKAN Ahmet ÇOBAN Ahmet SÖNMEZ Uğurhan KUTBAY IEI-32 SANAL İŞLEMCİ Ağustos 2008 Gazi Üniversitesi Elektrik ve Elektronik Mühendisliği Agah Burak DEMİRKAN Ahmet ÇOBAN Ahmet SÖNMEZ Uğurhan KUTBAY
ÖZET Bu sunumda “Türkiye İşlemcisini Tasarlıyor” yarışmasının Sanal İşlemci Tasarımı kategorisi için tasarlanmış olan IEI-32 sanal işlemcisinin özelliklerini, çalışma prensibini ve bu aşamaya nasıl gelindiğini anlatacaktır. İşlemcinin, açık kodlar üzerinde anlatımı ve bir faktöriyel programının simülasyon olarak gösterimi Ise WebPack programı aracılığıyla da sunulacaktır.
İÇİNDEKİLER İlk Günden Bugüne Nasıl Gelindi? İşlemci Özellikleri Komut Yapısı Komut Listesi IEI-32 Sanal İşlemci Çalışma Prensibi IEI-32 İşlemcisinin Açık Kodları İle Anlatımı
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
Pipeline Yapısında IEI-32 İlk Günden Bugüne ALU Tasarımı Toplama-Çıkarma Mantıksal İşlemler Kaydırma Kıyaslama Single Cycle IEI-32 Optimizasyon Pipeline Yapısında IEI-32
ALU Toplama ve Çıkarma always @(fn or alu_a or alu_b) begin: ripple integer i; reg cin,p,g; reg [31:0] xb; xb = fn ? ~alu_b : alu_b; //a - b == a + ~b + 1 cin = fn; for (i = 0; i < 32; i = i + 1) begin p = alu_a[i] ^ xb[i]; g = alu_a[i] & xb[i]; sonuc[i] = p ^ cin; cin = g | (p & cin); // diğer kata taşma end n = sonuc[31]; // negatif z = ~|sonuc; // sıfır v = (alu_a[31] & xb[31] & !n) | (~alu_a[31] & ~xb[31] & n);
Mantıksal İşlemler //AND: fn = 4'b1000 //OR: fn = 4'b1110 //XOR: fn = 4'b0110 //NOR: fn = 4’b0001 always @(fn or alu_a or alu_b) begin: bits integer i; for (i = 0; i < 32; i = i + 1) begin sonuc[i] = alu_b[i] ? (alu_a[i] ? fn[3] : fn[2]) : (alu_a[i] ? fn[1] : fn[0]); end
Kıyaslama - Compare // fn == 2'b01: eşitse (Z) // fn == 2'b10: küçük (N ^ V) // fn == 2'b11: küçükeşit (Z | (N ^ V)) //Mantıksal ifade doğruysa çıkış aritmetik 1, yanlışsa çıkış aritmetik 0 assign sonuc = {31'b0,(fn[0] & z) | (fn[1] & (n ^ v))};
Kaydırma - Shift assign sin = fn[1] & alu_a[31]; always @(fn[0] or alu_a) begin: loopA integer i; for (i = 0; i < 32; i = i + 1) u[i] = fn[0] ? alu_a[31 - i] : alu_a[i]; end assign v=alu_b[4]?{u[15:0],{16{sin}}} : u[31:0]; assign w=alu_b[3]?{v[23:0],{8{sin}}} : v[31:0]; assign x=alu_b[2]?{w[27:0],{4{sin}}} : w[31:0]; assign y=alu_b[1]?{x[29:0],{2{sin}}} : x[31:0]; assign z=alu_b[0]?{y[30:0],sin} : y[31:0]; always @(fn[0] or z) begin: loopB sonuc[i] = fn[0] ? z[31 - i] : z[i];
Single Cycle IEI-32
Yapılan Optimizasyonlar Kıyaslama – Compare Bloğu Çıkarılmış Yerine Çarpma Bloğu Eklenmesi Shift ve Toplama-Çıkarma Bloklarının Değiştirilmesi Instruction Yapısının Değiştirilmesi
Pipeline Yapısında IEI-32
IEI-32 Özellikleri 5 Stage Pipeline ,32 Bit İşlemci - Program Counter - Instruction Memory - Instruction Decoder - Register File - ALU R (register) , I (immediate) , J (jump) type instruction formatları Maksimum Frekans : 112.425 MHz (Spartan 3 E Starter Kit Speed:-4) Jump Komutları ve Hazard Çözümleri İçin Kontrol Birimi
IEI-32 Komut Yapısı
IEI-32 Komut Listesi Add :0000xxx0_xxxxxxxx_ xxxxxxxx_ xxxxxxxx Addi :0100xxx0_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Sub :0000xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Subi :0100xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Mul :0011xxxx_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Muli :0111xxxx_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Asr :0010xx10_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Asri :0110xx10_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Asl :0010xx11_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Asli :0110xx11_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Lsr :0010xx00_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Lsri :0110xx00_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Lsl :0010xx01_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Lsli :0110xx01_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx And :00011000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Andi :01011000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Nand :00010111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Nandi :01010111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Or :00011110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Ori :01011110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Cmp :0000xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Cmpi :0100xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Nor :00010001_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Nori :01010001_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Xor :00010110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Xori :01010110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Clr :00010000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Set :00011111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Load a :00011010_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Load a’ :00010101_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Load b :00011100_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx Load b’ :00010011_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx
Jump Komutları Brz :11xxx01x_ xxxxx01x_ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Brnz :11xxx01x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Breq :11xxx01x_ xxxxx01x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Brneq :11xxx01x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Brgr :11xxx11x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Brng :11xxx11x_ xxxxx01x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump (Bleq) Brls :11xxx10x_ xxxxx01x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Brnl :11xxx10x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump (Brge) Jmp :11xxxxxx_ xxxxx00x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump Halt :11xxxxxx_ xxxxx00x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump
IEI-32 İŞLEMCİSİ NASIL ÇALIŞIR?
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
MUX INSTRUCTION MEMORY Pc değeri adres PC reset CONTROL UNIT yazp yk data kt yaz sv ay İnst yaz kaynak n INSTRUCTION DECODER v jmp z adresA REGFILE adresB ALU dataS instruction adresS dataA n dataS v pga MUX dataB z yaz pca sabitG secy Jump_adresi alufn sabitsec
ŞİMDİ IEI-32 İŞLEMCİSİ AÇIK KODLARI İLE BERABER ISE WEBPACK PROGRAMI ÜZERİNDE ANLATILACAKTIR
TEŞEKKÜRLER