28
IEI-32 SANAL İŞLEMCİ Agah Burak DEMİRKAN Ahmet ÇOBAN Ahmet SÖNMEZ Uğurhan KUTBAY Gazi Üniversitesi Elektrik ve Elektronik Mühendisliği Ağustos 2008

IEI-32 SANAL İŞLEMCİ

  • Upload
    flo

  • View
    90

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: IEI-32 SANAL İŞLEMCİ

IEI-32 SANAL İŞLEMCİ

Agah Burak DEMİRKANAhmet ÇOBAN

Ahmet SÖNMEZUğurhan KUTBAY

Gazi ÜniversitesiElektrik ve Elektronik Mühendisliği

Ağustos 2008

Page 2: IEI-32 SANAL İŞLEMCİ

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.

ÖZET

Page 3: IEI-32 SANAL İŞLEMCİ

İÇİNDEKİLER

Komut Yapısı

Komut Listesi

IEI-32 Sanal İşlemci Çalışma Prensibi

İşlemci Özellikleri

İlk Günden Bugüne Nasıl Gelindi?

IEI-32 İşlemcisinin Açık Kodları İle Anlatımı

Page 4: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 5: IEI-32 SANAL İŞLEMCİ

İlk Günden Bugüne

Single Cycle IEI-32

Optimizasyon

Pipeline Yapısında IEI-32

ALU TasarımıToplama-ÇıkarmaMantıksal İşlemler

KaydırmaKıyaslama

Page 6: IEI-32 SANAL İŞLEMCİ

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

Toplama ve ÇıkarmaALU

Page 7: IEI-32 SANAL İŞLEMCİ

//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) beginsonuc[i] = alu_b[i] ? (alu_a[i] ? fn[3] : fn[2]) : (alu_a[i] ? fn[1] : fn[0]);endend

Mantıksal İşlemler

Page 8: IEI-32 SANAL İŞLEMCİ

// 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))};

Kıyaslama - Compare

Page 9: IEI-32 SANAL İŞLEMCİ

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]; endassign 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

Kaydırma - Shift

Page 10: IEI-32 SANAL İŞLEMCİ

Single Cycle IEI-32

Page 11: IEI-32 SANAL İŞLEMCİ

Shift ve Toplama-Çıkarma Bloklarının Değiştirilmesi

Instruction Yapısının Değiştirilmesi

Kıyaslama – Compare Bloğu Çıkarılmış Yerine Çarpma Bloğu Eklenmesi

Yapılan Optimizasyonlar

Page 12: IEI-32 SANAL İŞLEMCİ

Pipeline Yapısında IEI-32

Page 13: IEI-32 SANAL İŞLEMCİ

IEI-32 Özellikleri

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

5 Stage Pipeline ,32 Bit İşlemci- Program Counter

- Instruction Memory- Instruction Decoder

- Register File- ALU

Page 14: IEI-32 SANAL İŞLEMCİ

IEI-32 Komut Yapısı

Page 15: IEI-32 SANAL İŞLEMCİ

Or :00011110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxOri :01011110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxCmp :0000xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxCmpi :0100xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxNor :00010001_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxNori :01010001_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxXor :00010110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxXori :01010110_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxClr :00010000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxSet :00011111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLoad a :00011010_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLoad a’ :00010101_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLoad b :00011100_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLoad b’ :00010011_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx

Add :0000xxx0_xxxxxxxx_ xxxxxxxx_ xxxxxxxxAddi :0100xxx0_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxSub :0000xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxSubi :0100xxx1_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxMul :0011xxxx_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxMuli :0111xxxx_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAsr :0010xx10_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAsri :0110xx10_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAsl :0010xx11_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAsli :0110xx11_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLsr :0010xx00_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLsri :0110xx00_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLsl :0010xx01_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxLsli :0110xx01_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAnd :00011000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxAndi :01011000_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxNand :00010111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxxNandi :01010111_ xxxxxxxx_ xxxxxxxx_ xxxxxxxx

IEI-32 Komut Listesi

Page 16: IEI-32 SANAL İŞLEMCİ

Brz :11xxx01x_ xxxxx01x_ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jumpBrnz :11xxx01x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jumpBreq :11xxx01x_ xxxxx01x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jumpBrneq :11xxx01x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jumpBrgr :11xxx11x_ xxxxx11x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jumpBrng :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ğı jumpBrnl :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ğı jumpHalt :11xxxxxx_ xxxxx00x _ xxxxxxxx_ xxxxxxxx 16. Bit 1 olursa yukarı,0 olursa aşağı jump

Jump Komutları

Page 17: IEI-32 SANAL İŞLEMCİ

IEI-32 İŞLEMCİSİ NASIL ÇALIŞIR?

Page 18: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 19: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 20: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 21: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 22: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 23: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 24: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 25: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 26: IEI-32 SANAL İŞLEMCİ

MUX

ALU

INSTRUCTION MEMORY

INSTRUCTION DECODER

CONTROL UNIT

PC

REGFILE

adresA

adresB

adresS

dataS

yaz

dataA

dataB

sabitG

sabitsec

dataS

n

z

v

adres

instruction

Pc değeri

jmp

kaynak

yaz

yazp

z

v

n

ay

sv

kt

yk

alufn

pga

pca

secy

Jump_adresi

data

İnst yaz

reset

Page 27: IEI-32 SANAL İŞLEMCİ

ŞİMDİ IEI-32 İŞLEMCİSİ AÇIK KODLARI İLE BERABER ISE

WEBPACK PROGRAMI ÜZERİNDE ANLATILACAKTIR

Page 28: IEI-32 SANAL İŞLEMCİ

TEŞEKKÜRLER