• Sonuç bulunamadı

Sequential (SEQ, Ardışıl) Y86 İşlemci Uygulaması (Devamı)

N/A
N/A
Protected

Academic year: 2022

Share "Sequential (SEQ, Ardışıl) Y86 İşlemci Uygulaması (Devamı)"

Copied!
31
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

– 1 –

Sequential (SEQ, Ardışıl) Y86 İşlemci Uygulaması (Devamı)

BIL-304: Bilgisayar Mimarisi

Dersi veren öğretim üyesi:

Dr. Öğr. Üyesi Fatih Gökçe

Ders kitabına ait sunum dosyalarından adapte edilmiştir: http://csapp.cs.cmu.edu/

Adapted from slides of the textbook: http://csapp.cs.cmu.edu/

(2)

call‘un Yürütülmesi

Fetch

9 byte okunur

PC 9 arttırılır

Decode

Yığın pointer’ı okunur

Execute

Yığın pointer’ı 8 azaltılır

Memory

Arttırılmış PC değeri (dönüş noktasının adresi) yığın

pointer’ının yeni değeriyle gösterilen adrese yazılır

Write back

Yığın pointer’ı güncellenir

PC Update

PC’ye Hedef’in adresi yüklenir

call Hedef 8 0 Hedef

XX XX Dönüş noktası:

XX XX Hedef:

(3)

– 3 –

Hesaplama Aşamaları: call

Yığın pointer’ını azaltmak için ALU kullanılır

Arttırılmış PC değeri (geri dönerken kullanılmak üzere yığına) kaydedilir

call Hedef

icode:ifun  M1[PC]

valC  M8[PC+1]

valP  PC+9 Fetch

Komut byte’ını oku

Hedef adresini oku

Dönüş noktasının adresini hesapla

valB  R[%rsp]

Decode

Yığın pointer’ını oku valE  valB + –8

Execute Yığın pointer’ını azalt

M8[valE]  valP

Memory Dönüş noktasının adresini yığına yaz

R[%rsp]  valE Write

back

Yığın pointer’ını güncelle PC  valC

PC update PC’ye Hedef adresini yükle

(4)

ret‘in Yürütülmesi

Fetch

1 byte okunur

Decode

Yığın pointer’ı okunur

Execute

Yığın pointer’ı 8 arttırılır

Memory

Geri dönüş adresi arttırılmamış yığın

pointer’ının gösterdiği adresten okunur

Write back

Yığın pointer’ını güncelle

PC Update

PC’ye okunan geri dönüş adresini yükle

ret 9 0

XX XX return:

(5)

– 5 –

Hesaplama Aşamaları: ret

Yığın pointer’ını arttırmak için ALU kullanılır

Geri dönüş adresi hafızadan okunur

ret

icode:ifun  M1[PC]

Fetch

Komut byte’ını oku

valA  R[%rsp]

valB  R[%rsp]

Decode İşlem yapılacak yığın pointer’ını oku

İşlem yapılacak yığın pointer’ını oku valE  valB + 8

Execute Yığın pointer’ını arttır

valM  M8[valA]

Memory Geri dönüş adresini oku

R[%rsp]  valE Write

back

Yığın pointer’ını güncelle PC  valM

PC update PC’ye geri dönüş adresini yükle

(6)

Hesaplama Adımları

Tüm komutlar aynı genel biçimi izler

Her bir adımda hesaplananlar farklılaşır

OPq rA, rB

icode:ifun  M1[PC]

rA:rB  M1[PC+1]

valP  PC+2 Fetch

Komut byte’ını oku Kaydedici byte’nı oku [Sabit sözcüğü oku]

Bir sonraki PC'yi hesapla valA  R[rA]

valB  R[rB]

Decode İşlem yapılacak A değerini oku

İşlem yapılacak B değerini oku valE  valB OP valA

Set CC

Execute ALU işlemini gerçekleştir

Durum kodlarını güncelle

Memory [Hafızadan oku/hafızaya yaz]

R[rB]  valE Write

back

ALU sonucunu geri yaz [Hafıza sonucunu geri yaz]

PC  valP

PC update PC’yi güncelle

icode,ifun rA,rB

valC valP

valA, srcA valB, srcB valE

Cond code valM

dstE dstM PC

(7)

– 7 –

Hesaplama Adımları

Tüm komutlar aynı genel biçimi izler

Her bir adımda hesaplananlar farklılaşır

call Dest

Fetch

Decode

Execute Memory Write back

PC update

icode,ifun rA,rB

valC valP

valA, srcA valB, srcB valE

Cond code valM

dstE dstM PC

icode:ifun  M1[PC]

valC  M8[PC+1]

valP  PC+9

valB  R[%rsp]

valE  valB + –8

M8[valE]  valP R[%rsp]  valE

PC  valC

Komut byte’ını oku [Kaydedici byte’nı oku]

Sabit sözcüğü oku

Bir sonraki PC'yi hesapla [İşlem yapılacak A değerini oku] İşlem yapılacak B değerini oku ALU işlemini gerçekleştir [Durum kodlarını güncelle/kullan] Hafızaya yaz

ALU sonucunu geri yaz [Hafıza sonucunu geri yaz]

PC’yi güncelle

(8)

Hesaplanan Değerler

Fetch

icode Komut kodu

ifun Komut fonksiyonu rA Komut kaydedicisi A rB Komut kaydedicisi B valC Komut sabiti

valP Arttırılmış PC

Decode

srcA Kaydedici ID’si A srcB Kaydedici ID’si B dstE Hedef kaydedici E dstM Hedef kaydedici M valA Kaydedici değeri A valB Kaydedici değeri B

Execute

valE ALU sonucu

Cnd Şartlı Dallanma/taşıma bayrağı

Memory

valM Hafızadan okunan veri

(9)

– 9 –

SEQ Donanımı

Mavi kutular:

öntasarımlı donanım blokları

Örnek: hafızalar, ALU

Gri kutular:

kontrol lojiği

HCL’de tanımlanır

Beyaz oval kutular:

sinyal etiketleri

Kalın hatlar:

64-bit sözcük değerleri

İnce hatlar:

4-8 bit değerler

Kesikli noktalı hatlar:

1-bit değerler

Sağdaki şekildeki İngilizce terimler ilerleyen

slaytlarda her bir kısım

ayrı ayrı detaylandırılırken

çevrilecektir.

(10)

Fetch Lojiği

Öntasarımlı bloklar

PC: PC değerini içeren kaydedici

Komut hafızası: 10 byte okunması durumunda PC den PC+9’a kadar adreslerdeki byte’lar okunur

Geçersiz adres durumunda geçersiz adres hata sinyalini üretir

Böl: Komut byte’ını icode ve ifun kısımlarına ayırır

Hizala: rA, rB ve valC değerlerini çeker

Komut hafızası

PC arttırma

rB icode ifun rA

PC

valC valP

Need regids

(regid gerekli) Need valC (valC gerekli) Instr

valid (komut geçerli)

Hizala Böl

Bytes 1-9 Byte 0

imem_error

icode ifun

(11)

– 11 –

Fetch Lojiği

Kontrol lojiği

Instr. Valid (komut geçerli): Bu komut geçerli mi?

icode, ifun: Geçersiz adres durumunda nop komutu üretilir

Need regids (regids gerekli): Komutta kaydedici kullanılıyor mu?

Need valC (valC gerekli): Komutta sabit bir sözcük var mı?

Komut hafızası

PC arttırma

rB icode ifun rA

PC

valC valP

Need regids

(regid gerekli) Need valC (valC gerekli) Instr

valid (komut geçerli)

Hizala Böl

Bytes 1-9 Byte 0

imem_error

icode ifun

(12)

HCL dilinde Fetch Kontrol Lojiği

# Komut kodunu belirle int icode = [

imem_error: INOP;

1: imem_icode;

];

# Komut fonksiyonunu belirle int ifun = [

imem_error: FNONE;

1: imem_ifun;

];

Komut hafızası

PC

Böl

Byte 0

imem_error

icode ifun

(13)

– 13 –

HCL dilinde Fetch Kontrol Lojiği

bool need_regids =

icode in { IRRMOVQ, IOPQ, IPUSHQ, IPOPQ, IIRMOVQ, IRMMOVQ, IMRMOVQ };

bool instr_valid = icode in

{ INOP, IHALT, IRRMOVQ, IIRMOVQ, IRMMOVQ, IMRMOVQ, IOPQ, IJXX, ICALL, IRET, IPUSHQ, IPOPQ };

pushq rA A 0 rA F

jXX Hedef 7 fn Hedef

popq rA B 0 rA F

call Hedef 8 0 Hedef

cmovXX rA, rB 2 fn rA rB

irmovq V, rB 3 0 F rB V

rmmovq rA, D(rB) 4 0 rA rB D

mrmovq D(rB), rA 5 0 rA rB D

OPq rA, rB 6 fn rA rB

ret 9 0

nop 1 0

halt 0 0

(14)

– 14 –

Decode Lojiği

Kaydedici Dizisi

Okuma portları: A, B

Yazma portları: E, M

Adresler kaydedici ID’leri veya 15 (0xF)’tir (kaydedici erişimi olmaması durumunda)

Kontrol Lojiği

srcA, srcB: Okuma port adresleri

dstE, dstM: Yazma port

adresleri

rB

dstE dstM srcA srcB

Kaydedici dizisi

A B

M

E dstE dstM srcA srcB

icode rA

valB

valA valM valE

Cnd

Sinyaller

Cnd: Şartlı taşıma yapılıp yapılmayacağını belirtir

Execute aşamasında

hesaplanır

(15)

– 15 –

A Değerinin Kaynakları

int srcA = [

icode in { IRRMOVQ, IRMMOVQ, IOPQ, IPUSHQ } : rA;

icode in { IPOPQ, IRET } : RRSP;

1 : RNONE; # Kaydediciye gerek yok ];

cmovXX rA, rB valA  R[rA]

Decode İşlem yapılacak A

değerini oku rmmovq rA, D(rB)

valA  R[rA]

Decode İşlem yapılacak A

değerini oku popq rA

valA  R[%rsp]

Decode Yığın pointer’ını oku

jXX Dest

Decode İşlem yapılacak bir şey yok

call Dest

valA  R[%rsp]

Decode Yığın pointer’ını oku

ret

Decode İşlem yapılacak bir şey yok

OPq rA, rB valA  R[rA]

Decode İşlem yapılacak A

değerini oku

(16)

– 16 –

E Değerinin Yazılacağı Yerler

int dstE = [

icode in { IRRMOVQ } && Cnd : rB;

icode in { IIRMOVQ, IOPQ} : rB;

icode in { IPUSHQ, IPOPQ, ICALL, IRET } : RRSP;

1 : RNONE; # Herhangi bir kaydediciye yazma ];

Hiçbir şey yok

R[%rsp]  valE Yığın pointer’ını güncelle Hiçbir şey yok

R[rB]  valE cmovXX rA, rB Write-back

rmmovq rA, D(rB)

popq rA

jXX Dest

call Dest

ret Write-back

Write-back

Write-back

Write-back

Write-back

Şarta bağlı olarak sonucu geri yaz

R[%rsp]  valE Yığın pointer’ını güncelle

R[%rsp]  valE Yığın pointer’ını güncelle R[rB]  valE

OPq rA, rB

Write-back Sonucu geri yaz

(17)

– 17 –

Execute Lojiği

Birimler

ALU

İhtiyaç duyulan 4 fonksiyonu gerçekleştirir

Durum kodu değerlerini üretir

CC

3 bitlik durum kodlarını içeren kaydedici

cond

Şartlı dallanma/taşıma bayrağını (Cnd) hesaplar

Kontrol Lojiği

Set CC: Durum kodu kaydedicisi yüklenmeli mi?

ALU A: ALU’nun A girişi

ALU B: ALU’nun B girişi

ALU fun: ALU hangi fonksiyonu hesaplamalı?

CC ALU

ALU A

ALU B

ALU fun.

Cnd

icode ifun valC valA valB valE

Set CC

cond

(18)

– 18 –

ALU A Girişi

int aluA = [

icode in { IRRMOVQ, IOPQ } : valA;

icode in { IIRMOVQ, IRMMOVQ, IMRMOVQ } : valC;

icode in { ICALL, IPUSHQ } : -8;

icode in { IRET, IPOPQ } : 8;

# Diğer komutlar ALU’ya gerek duymaz ];

valE valB + –8 Yığın pointer’ını azalt İşlem yok

valE valB + 8 Yığın pointer’ını arttır valE  valB + valC Efektif adresi hesapla

valE 0 + valA valA’yı ALU üzerinden aktar cmovXX rA, rB

Execute

rmmovq rA, D(rB)

popq rA

jXX Dest

call Dest

ret Execute

Execute

Execute

Execute

Execute valE valB + 8 Yığın pointer’ını arttır valE  valB OP valA ALU işlemini gerçekleştir OPq rA, rB

Execute

(19)

– 19 –

ALU İşlemi

int alufun = [

icode == IOPQ : ifun;

1 : ALUADD;

];

valE  valB + –8 Yığın pointer’ını azalt İşlem yok

valE  valB + 8 Yığın pointer’ını arttır valE  valB + valC Efektif adresi hesapla

valE  0 + valA valA’yı ALU üzerinden aktar cmovXX rA, rB

Execute

rmmovl rA, D(rB)

popq rA

jXX Dest

call Dest

ret Execute

Execute

Execute

Execute

Execute valE  valB + 8 Yığın pointer’ını arttır valE  valB OP valA ALU işlemini gerçekleştir OPl rA, rB

Execute

(20)

Memory Lojiği

Memory

Hafızadan sözcük okunur veya hafızaya sözcük yazılır

Kontrol Lojiği

stat: Komutun durumu nedir?

Mem. read: sözcük okunacak mı?

Mem. write: sözcük yazılacak mı?

Mem. addr.: Adresi seçer

Mem. data.: Veriyi seçer

Veri Hafızası

Mem.

read

Mem.

addr

okuma

yazma

Veri çıkışı

Mem.

data

valE valM

valA valP Mem.

write

Veri girişi

icode Stat

dmem_error

instr_valid imem_error

stat

(21)

– 21 –

Komut durumu

Kontrol Lojiği

stat: Komut durumu nedir?

Veri Hafızası

Mem.

read

Mem.

addr

okuma

yazma

Veri çıkışı

Mem.

data

valE valM

valA valP Mem.

write

Veri girişi

icode Stat

dmem_error

instr_valid imem_error

stat

## Komut durumunu belirle int Stat = [

imem_error || dmem_error : SADR;

!instr_valid: SINS;

icode == IHALT : SHLT;

1 : SAOK;

];

(22)

– 22 –

Memory Adresi

OPq rA, rB Memory

rmmovq rA, D(rB)

popq rA

jXX Dest

call Dest

ret

İşlem yok

M8[valE]  valA

Memory Değeri hafızaya yaz

valM  M8[valA]

Memory Yığından oku

M8[valE]  valP

Memory Dönüş adresini yığına yaz

valM  M8[valA]

Memory Dönüş adresini oku

Memory İşlem yok

int mem_addr = [

icode in { IRMMOVQ, IPUSHQ, ICALL, IMRMOVQ } : valE;

icode in { IPOPQ, IRET } : valA;

# Diğer komutlar adrese ihtiyaç duymaz ];

(23)

– 23 –

Memory Read (Okuma)

OPq rA, rB Memory

rmmovq rA, D(rB)

popq rA

jXX Dest

call Dest

ret

İşlem yok

M8[valE]  valA

Memory Değeri hafızaya yaz

valM  M8[valA]

Memory Yığından oku

M8[valE]  valP

Memory Dönüş adresini yığına yaz

valM  M8[valA]

Memory Dönüş adresini oku

Memory İşlem yok

bool mem_read = icode in { IMRMOVQ, IPOPQ, IRET };

(24)

PC Update (Güncelleme) Lojiği

New (Yeni) PC

PC’nin bir sonraki değerini seç

New (Yeni) PC

Cnd

icode valC valM valP

PC

(25)

– 25 –

PC

Update

OPq rA, rB

rmmovq rA, D(rB)

popq rA

jXX Hedef

call Hedef

ret

PC  valP

PC update PC’yi güncelle

PC  valP

PC update PC’yi güncelle

PC  valP

PC update PC’yi güncelle

PC  Cnd ? valC : valP

PC update PC’yi güncelle

PC  valC

PC update PC’ye Hedef adresini yükle

PC  valM

PC update PC’ye dönüş adresini yükle

int new_pc = [

icode == ICALL : valC;

icode == IJXX && Cnd : valC;

icode == IRET : valM;

1 : valP;

];

(26)

SEQ’in Çalışması

Durum

PC kaydedicisi

Durum kodu kaydedicisi

Veri hafızası

Kaydedici dizisi

Tamamı saat sinyalinin yükselen kenarında güncellenir

Kombinasyonel Lojik

ALU

Kontrol lojiği

Hafıza okumaları

Komut hafızası

Kaydedici dizisi

Veri hafızası

Kombinasyonel

lojik Veri

Hafızası

Kaydedici Dizisi

%rbx = 0x100

PC 0x014

CC

100 Okuma

portları

Yazma portları

Okuma Yazma

(27)

– 27 –

SEQ’in

Çalışması

#2

durum ikinci irmovq komutuna bağlı olarak set edilir

kombinasyonel lojik durum değişikliğine tepki vermeye başlar

0x014: addq %rdx,%rbx # %rbx <-- 0x300 CC <-- 000 0x016: je hedef # Dallanma olmaz

0x01f: rmmovq %rbx,0(%rdx) # M[0x200] <-- 0x300 Cycle 3:

Cycle 4:

Cycle 5:

0x00a: irmovq $0x200,%rdx # %rdx <-- 0x200 Cycle 2:

0x000: irmovq $0x100,%rbx # %rbx <-- 0x100 Cycle 1:

Clock

Cycle 1

j k l m

Cycle 2 Cycle 3 Cycle 4

Combinational

logic Veri

Hafızası

Kaydedici Dizisi

%rbx = 0x100

PC 0x014

CC

100 Okuma

portları

Yazma portları

Okuma Yazma

(28)

SEQ’in

Çalışması

#3

durum ikinci irmovq komutuna bağlı olarak set edilir

kombinasyonel lojik addq komutunun sonuçlarını oluşturur

Kombinasyonel

lojik Veri

Hafızası

Kaydedici Dizisi

%rbx = 0x100

PC 0x014

CC

100 Okuma

portları

Yazma portları

0x016

000

%rbx

<-- 0x300

Okuma Yazma

0x014: addq %rdx,%rbx # %rbx <-- 0x300 CC <-- 000 0x016: je hedef # Dallanma olmaz

0x01f: rmmovq %rbx,0(%rdx) # M[0x200] <-- 0x300 Cycle 3:

Cycle 4:

Cycle 5:

0x00a: irmovq $0x200,%rdx # %rdx <-- 0x200 Cycle 2:

0x000: irmovq $0x100,%rbx # %rbx <-- 0x100 Cycle 1:

Clock

Cycle 1

j k l m

Cycle 2 Cycle 3 Cycle 4

(29)

– 29 –

SEQ’in

Çalışması

#4

durum addq

komutuna bağlı olarak set edilir

kombinasyonel lojik durum

değişikliğine tepki vermeye başlar

0x014: addq %rdx,%rbx # %rbx <-- 0x300 CC <-- 000 0x016: je hedef # Dallanma olmaz

0x01f: rmmovq %rbx,0(%rdx) # M[0x200] <-- 0x300 Cycle 3:

Cycle 4:

Cycle 5:

0x00a: irmovq $0x200,%rdx # %rdx <-- 0x200 Cycle 2:

0x000: irmovq $0x100,%rbx # %rbx <-- 0x100 Cycle 1:

Clock

Cycle 1

j k l m

Cycle 2 Cycle 3 Cycle 4

Kombinasyonel

lojik Veri

Hafızası

Kaydedici Dizisi

%rbx = 0x300

PC 0x016

CC

000 Okuma

portları

Yazma portları

Okuma Yazma

(30)

SEQ’in

Çalışması

#5

durum addq

komutuna bağlı olarak set edilir

kombinasyonel lojik je

komutunun sonuçlarını oluşturur

0x014: addq %rdx,%rbx # %rbx <-- 0x300 CC <-- 000 0x016: je hedef # Dallanma olmaz

0x01f: rmmovq %rbx,0(%rdx) # M[0x200] <-- 0x300 Cycle 3:

Cycle 4:

Cycle 5:

0x00a: irmovq $0x200,%rdx # %rdx <-- 0x200 Cycle 2:

0x000: irmovq $0x100,%rbx # %rbx <-- 0x100 Cycle 1:

Clock

Cycle 1

j k l m

Cycle 2 Cycle 3 Cycle 4

Kombinasyonel

lojik Veri

Hafızası

Kaydedici Dizisi

%rbx = 0x300

PC 0x016

CC

000 Okuma

portları

Yazma portları

0x01f

Okuma Yazma

(31)

– 31 –

SEQ Özeti

Uygulaması

Herbir komut basit adımlar dizisi olarak ifade edilir

Her komut tipi için aynı genel akış izlenir

Kaydedici, hafızalar ve öntasarımlı kombinasyonel blokları birleştirir

Bu blokların birleşimini kontrol lojiği ile sağlar

Kısıtlamalar

Pratik uygulama açısından çok yavaştır

Bir saat palsinde, komut hafızası, kaydedici dizisi, ALU ve veri hafızası boyunca sinyallerin yayılmaları gerekir

Bu yayılma gereksinimi nedeniyle saat sinyalinin çok yavaş işlemesi gerekir

Donanım alt birimleri saat palsinin sadece belli bir kısmında aktif olarak çalışırlar (saat palsinin geri kalan süresinde

sadece beklerle, herhangi bir işlem gerçekleştirmezler)

Referanslar

Benzer Belgeler

• Memory Stick ve , Sony Corporation şirketinin ticari markaları veya tescilli ticari markalarıdır. • Blu-ray Disc™ ve Blu-ray™, Blu-ray Disc Association’ın ticari

Videoların görüntü kalitesinin seçilmesi (Kayıt modu) Yüksek çözünürlüklü (HD) görüntü kalitesinde kayıt yaparken, video kalitesini seçmek için kayıt modunu

şirketinin ABD ve diğer ülkelerde ticari markaları veya tescilli ticari markalarıdır. • Facebook ve “f” logosu, Facebook, Inc.’nin ticari markaları veya tescilli

• Bir bellek kartını kayıt ortamı olarak seçmek için, sırasıyla  [Kurulum]  [ Ortam Ayarları]  [Ortam Seçimi]  [Bellek Kartı]..

Toshiba 4610-2NF Yeni Nesil Ödeme Kaydedici Cihaz (YNÖKC), hem fiş, hem de belge düzenleyen çift istasyonlu yazıcısı ile perakende ortamları için ideal ve üstün

Tüm satışlarına e-Fatura ve/veya e-Arşiv fatura düzenleyen ve diğer şartları da yerine getirerek YN ÖKC kullanımından muaf tutulan ve işletmelerinde kısmen YN ÖKC

Bununla birlikte, işletmelerinin teknik ve altyapı sorunlarının mevcudiyeti nedeniyle ÖKC TSM Merkezleri aracılığıyla yeni nesil ödeme kaydedici cihazlardan

Bilgilerin kaydedici devresine sırayla yüklendiği ve uygulanan tetikleme sinyali ile önceki bilgilerin sağa veya sola kaydırıldığı devrelere, kaymalı/seri