280 likes | 534 Views
Ağustos 2008. IEI-32 SANAL İŞ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 Sanal İşlemci
E N D
Ağustos 2008 IEI-32 SANAL İŞ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 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.
İlk Günden BugüneNasıl Gelindi? • İşlemci Özellikleri • Komut Yapısı • Komut Listesi İÇİNDEKİLER • IEI-32 Sanal İşlemci Çalışma Prensibi • IEI-32 İşlemcisinin Açık Kodları İle Anlatımı
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
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
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
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
5 Stage Pipeline ,32 Bit İşlemci - Program Counter - InstructionMemory - InstructionDecoder - Register File - ALU IEI-32 Özellikleri • R (register) , I (immediate) , J (jump) typeinstruction 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 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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
INSTRUCTIONMEMORY Pc değeri adres PC reset CONTROLUNIT yazp yk data kt yaz sv ay İnstyaz kaynak n INSTRUCTIONDECODER 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