300 likes | 570 Views
Ağustos 2008. IEI-32 FİZİKSEL İŞLEMCİ. Gazi Üniversitesi Elektrik ve Elektronik Mühendisliği. Agah Burak DEMİRKAN Ahmet ÇOBAN Ahmet SÖNMEZ Uğurhan KUTBAY. ÖZET.
E N D
Ağustos 2008 IEI-32 FİZİKSEL İŞLEMCİ 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 FPGA İle Fiziksel İşlemci Tasarımı kategorisi için tasarlanmış olan IEI-32 fiziksel işlemcisinin özelliklerini, çalışma prensibini anlatacağı gibi yaşanılan sorunlar ve bu sorunların çözümleriyle beraber bu aşamaya gelene kadar yapılan değişikliklerden de bahsedilecektir. İşlemcinin, açık kodlar üzerinde anlatımı Ise WebPack programı aracılığıyla da sunulacaktır.
İlk Günden BugüneNasıl Gelindi? • İşlemci Özellikleri • Komut Yapısı • Komut Listesi İÇİNDEKİLER • IEI-32 Fiziksel İşlemci Çalışma Prensibi • IEI-32 İşlemcisinin Açık Kodları İle Anlatımı
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) alu,adres Tris jmp Tris A,B,C,D alu,adres
ALU Tasarımı Toplama-Çıkarma Mantıksal İşlemler Kaydırma Kıyaslama • SingleCycle IEI-32 İlk Günden Bugüne • Optimizasyon • Pipeline Yapısında IEI-32 Sanal İşlemcisi • Fiziksel İşlemci İçin Optimizasyon • Pipeline Yapısında IEI-32 Fiziksel İşlemcisi
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); • end
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 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 integer i; for (i = 0; i < 32; i = i + 1) sonuc[i] = fn[0] ? z[31 - i] : z[i]; end
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
Fiziksel İşlemci İçin Yapılan Optimizasyonlar • Pipeline Yapısının 5 Stage den 7 StagePipeline Yapısına Dönüştürülmesi - Program Counter - InstructionMemory - InstructionDecoder - Register File - ALU_Sec - ALU - MultiPlexer • 4 adet 32 bitlik Port Eklenmesi • Tris Modülü Eklenmesi • Timer Modülü Eklenmesi • Memory Eklenmesi
Instruction Formatının Değiştirilmesi • Kontrol Biriminin Hazard ve Jump Kontrol Olmak Üzere İkiye Ayrılması • Hazard Kontrolünün Bloklar Arasında Kontrol Mekanizmasıyla Yapılması • Frekans Uyumlarının Sağlanması
7 Stage Pipeline ,32 Bit İşlemci • - Program Counter • - InstructionMemory • - InstructionDecoder • - Register File • ALU_Sec • ALU • - MultiPlexer IEI-32 Özellikleri • R (register) , I (immediate) , J (jump) typeinstruction formatları • Maksimum Frekans : 109.878 MHz (Spartan 3 E Starter Kit Speed:-4) • Jump Komutları ve Hazard Çözümleri İçin Kontrol Birimleri
4 Adet 32 Bitlik Port • Timer • Harici Hafıza (Memory) • Seriport İletişimli IEI-32 1.0 Compiler Stüdyosu • İstenilen Hızda Çalışabilirlik • ALU • - Toplama ve Çıkarma • - Çarpma • - Mantıksal İşlemler • - Büyük ve Küçük Sayı • Kaydırma - Shift • 38 Adet İşlem Komutu ve Dolaylı Yollarla Yapılabilir Kıyaslama İşlemleri
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) alu,adres Tris jmp Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) alu,adres Tris jmp Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) alu,adres Tris jmp Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) jmp alu,adres Tris Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) jmp alu,adres Tris Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) jmp alu,adres Tris Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) jmp alu,adres Tris Tris A,B,C,D alu,adres
reset PC pcbekle ALU_Sec Verileri HAZARD KONTROL Port çalıştır Alu verileri alu,adres instyaz Memory Idec verileri Port A,B,C,D Pcdeğeri Rf verileri alu,adres Imem verileri INSTRUCTIONMEMORY sel MUX ALU addsub sabit adres A ALU_SEC INSTRUCTIONDECODER REGFILE boole regA aluA Jmp_adresi adres B maxmin regB aluB carpma adres S asec instruction alufn shift data bsec sabit nry memory alu,adres Timer JUMP KONTROL Timer Ds (dallanma şartı) jmp alu,adres Tris Tris A,B,C,D alu,adres
ŞİMDİ IEI-32 İŞLEMCİSİ AÇIK KODLARI İLE BERABER ISE WEBPACK PROGRAMI ÜZERİNDE ANLATILACAKTIR