CpuKulisCalismaRaporu_v1.3

Transkript

CpuKulisCalismaRaporu_v1.3
CPU TURKEY
CPU-KULIS MİKROİŞLEMCİSİ ÇALIŞMA
RAPORU
Proje Danışmanı:
Prof. Dr. Sarp ERTÜRK, Kocaeli Üniversitesi, Elektronik ve
Haberleşme Mühendisliği Bölümü
Proje Yetkilisi:
Arş. Gör. Anıl ÇELEBİ, Kocaeli Üniversitesi, Elektronik ve
Haberleşme Mühendisliği Bölümü
Proje Ekibi:
Çağrı GÜVENEL
Ahmet TEKYILDIZ, Kocaeli Üniversitesi Elektronik ve Haberleşme
Mühendisliği Bölümü, 3. sınıf öğrencileri
Akademik Destek: Yrd. Doç. Dr. Oğuzhan Urhan, Kocaeli Üniversitesi Elektronik ve
Haberleşme Mühendisliği Bölümü
Yrd. Doç. Dr. Mehmet Kemal GÜLLÜ, Kocaeli Üniversitesi Elektronik
ve Haberleşme Mühendisliği Bölümü
İçindekiler
İçindekiler.................................................................................................................................... i
Şekiller Dizini ............................................................................................................................ ii
Tablolar Dizini ........................................................................................................................... ii
Önsöz.......................................................................................................................................... 1
1. CPU-KULIS MİKROİŞLEMCİSİNİN GENEL YAPISI ...................................................... 2
1.1. Cpu-Kulis Mikroişlemcisi Genel Şematik Gösterimi ..................................................... 3
1.2. Cpu-Kulis Mikroişlemcisinin Ana Öbekleri ................................................................... 3
1.2.1. Komut çekme ........................................................................................................... 3
1.2.2. Kod çözme................................................................................................................ 4
1.2.3. Yürütme.................................................................................................................... 5
1.2.4 Geri yazma ................................................................................................................ 6
1.3. Ardışık Düzen Hata Denetimi: ........................................................................................ 8
2. CPU-KULIS DERLEYİCİSİ ............................................................................................... 10
2.1. Giriş............................................................................................................................... 10
2.2. Derleyici Kullanımı....................................................................................................... 10
2.2.1 Komut kümesinin kullanımı:................................................................................... 11
2.2.2 Sembolik sabit tanımlama: ...................................................................................... 13
2.2.3- Etiket tanımlama: ................................................................................................... 13
2.2.4- Başlama noktası tanımlama: .................................................................................. 13
3. KOMUTLARIN İŞLEM BASAMAKLARI........................................................................ 14
i
Şekiller Dizini
Şekil 1.1. Cpu-kulis mikroişlemcisinin en üst seviye şematik görünümü ................................. 3
Şekil 1.2. Komut çekme ana öbek şeması................................................................................... 4
Şekil 1.3. Kod çözme öbeği şematik görünümü ......................................................................... 5
Şekil 1.4. Yürütme öbeği altında bulunan ALU biriminin RTL şemasının bir bölümü............. 6
Şekil 1.5. Geri yazma öbeği RTL şeması................................................................................... 7
Şekil 1.6. Ardışık düzen hata denetimi öbeğinin RTL şeması................................................... 9
Tablolar Dizini
Tablo 1.1. decode_wire[14:0] sinyalinin kontrol ettiği birimler ve makine kodu karşılıkları.. 5
Tablo 1.2. Hedef ve kaynak bilgilerinin makine kodu karşılıkları ............................................ 7
Tablo 1.3. wb_signals[10:0] sinyalinin kontrol ettiği birimler ve makine kodu karşılıkları .... 7
Tablo 2.1. 32 bitlik işlem kodunun bölümleri ......................................................................... 11
Tablo 2.2. İşlem kodu-işlenen karşılık tablosu........................................................................ 11
Tablo 2.3. Cpu-Kulis işlemcisinin komut kümesi ve aldığı işlenenleri................................... 11
ii
Önsöz
CPU-KULIS mikroişlemcisi çalışma raporunda mikroişlemcinin genel yapısı, saat
darbelerinde komutların işlendiği ana öbekler, bu öbeklerin şematik gösterimleri üzerinde
durulmuştur.
Komutların makine diline çevrilmesi için tasarlanan derleyicinin tanıtımı yapılmıştır.
İşlemcide kullanılan komutların kaynak ve hedef birimleri gösterilmiştir. Tasarımda bulunan
bazı önemli bağlantıların etkilediği birimler tablo halinde gösterilmiştir. Komutlar, kullanım
alanlarına göre bölümlere ayrılmış ve işlem basamakları ayrıntılı bir biçimde anlatılmıştır.
Mikroişlemci ana kısımları, şematik kullanılarak oluşturulmuştur. Şemaların gösteriminde asıl
amaç; ana öbeklerin teorik anlatımına uygulamalı gösterim ile destek olmaktır. Bu nedenle;
şemalar oluşturulurken şeklin sade ve anlaşılır olması birinci hedeftir. Sıra düzensel olarak bir
seviyeden daha aşağı inilmemeye özen gösterilmiştir. (Şemaların ayrıntılı hali eklenen
dosyalardan “RTL_Semalar” içerisinde bulunmaktadır. Komutların işleyişi hakkında ayrıntılı
uygulama eklenen dosyalar arasında benzetim anlatımı videosu olarak bulunmaktadır.)
1
1. CPU-KULIS MİKROİŞLEMCİSİNİN GENEL YAPISI
Cpu-Kulis, standart mikroişlemci yapıları temel alınarak tasarlanmış
“özgün” bir
çalışmadır. Cpu-Kulis mikroişlemcisi , Komut çekme, Kod çözme, yürütme ve geri yazma
isimlerinin verildiği dört ana bloktan oluşmaktadır.
Ana bloklardan kısaca bahsetmek gerekirse;
Komut çekme, ROM’da bulunan komutlara ait işlem kodlarının ROM’dan okunmasını
sağlayan yapıdır. Komut çekme ROM’dan aldığı bu bilgiyi Kod çözme öbeğine iletir. Kod
çözme, Komut çekme öbeğinden aldığı kod bilgisini istenilen işlemin yapılabilmesi için uygun
sinyaller olarak yürütme kısmına iletir. Aynı zamanda herhangi bir geri yazım işlemi için
uygun sinyalleri hedef ve kaynak bilgisi olarak Geri yazma öbeğine iletir. Yürütme, uygun
sinyaller uygulanarak istenilen işlemin yürütülmesini sağlayan işlemcinin en karmaşık
kısmıdır, veri yolu olarak da adlandırılabilir. Geri yazma, Kod çözme öbeğinden aldığı hedef
ve kaynak bilgisine göre; verinin istenilen birime yazılması için gerekli sinyalleri yürütme
bloğu için üretir.
Cpu-Kulis, dört iş hatlı Ardışık Düzen Hata Denetimi (Pipeline Hazard Detect) yapısına sahip
bir işlemcidir. İstisna durumlar hariç her işlem bir saat çevrimi süresinde yapılmaktadır. (Bu
istisnalar bölüm 1.3’ de anlatılmıştır.)
Cpu-Kulis, 30 temel komutun yanı sıra sonradan eklenen PUSH, POP ve RET komutlarını da
yürütme özelliğine sahiptir. Mikroişlemci performansına bir etkisi bulunmayacağı için
CACHE bellek bu aşamada kullanılmamıştır.
Cpu-Kulis mikroişlemcisinde
dört adet yazmaç, ROM, RAM, yığın ve alu ana blokları
mevcuttur.
İşlemci tasarımı Xilinx ISE tasrım ortamı kullanılarak verilog donanım tanımlama dili
ile yazılmıştır. Şematik gösterimler için ISE şematik düzenleyicisinden faydalanılmıştır.
Benzetim için MentorGraphics’ in ModelSim yazılımı kullanılmıştır.
2
1.1. Cpu-Kulis Mikroişlemcisi Genel Şematik Gösterimi
Şekil 1.1. Cpu-kulis mikroişlemcisinin en üst seviye şematik görünümü
Şekil 1.1’ de Cpu-kulis mikroişlemcisinin en üst seviye modelinin şematik gösterimi ‘kabaca
eklenmiştir. Yapıdan da anlaşılacağı üzere; birbirine gerekli bağlantılar ile bağlanan dört ana
öbek ve bu öbekler arası eş zamanlamayı sağlayan ardışık düzen yapısı genel hatlarıyla
görülmektedir. Şekilde en sağda görülen büyük öbek veri-yolu öbeğidir ve sistemin en
karmaşık yapısıdır. İlerleyen bölümlerde veri-yolu öbeği ve diğer alt öbeklere kısaca
değinilecektir.
1.2. Cpu-Kulis Mikroişlemcisinin Ana Öbekleri
1.2.1. Komut çekme
Komut çekme, ROM’dan komutlara ait makine kodlarını alır ve değerlendirmesi için kod
çözme öbeğine gönderir.
Komut çekme öbeği dört ana alt öbekten oluşmaktadır.
Program sayıcı yürütülen komutun kaçıncı adreste olduğunu belirtir. Program sayıcı çıkışı
ROM’ a bağlıdır ve belirtilen adresin içerisindeki makine kodu ROM’ dan veri çıkışı olarak
kod çözme öbeğine bağlanır.
3
ROM’ da her biri 16 bit adres verisiyle erişilen bilginin uzunluğu 32 bittir. (ROM, 256 satır
uzunluğunda alınmıştır, 256 satırı adresleyebilmek için 16 bitlik adres girişinin en az anlamlı
8 biti kullanılmaktadır.
Şekil 1.2. Komut çekme ana öbek şeması
Toplam ROM uzunluğu 32bit * 256satır / (8bit/byte) = 1024 byte’ dır ). Aynı zamanda
program sayıcının göstermiş olduğu adres de bir saat çevrimi ile kod çözme öbeğine iletilir.
Bir komutun yürütülmesi işlemi komut çekme öbeğinden başlar. Komut yürütümünde bir saat
çevrimi komut çekme öbeğinde harcanmaktadır.
1.2.2. Kod çözme
Komut çekme çıkışından aldığı adres bilgisi ile ROM’ dan aldığı makine kodu bilgisini
değerlendiren ve hangi komutun yürütüleceğini, hangi birimlerde işlem yapılacağını
belirleyen öbektir. Kod çözme öbeğinin şematik gösterimi Şekil 1.3’ de görülmektedir.
Şekil 1.3’ de kod çözme öbeğinin iki ana kısımdan oluştuğu görülmektedir. Bu iki ana öbek
yanında, komut çekme öbeğinde da bulunan flush yazmacı görülmektedir. Flush yazmacının
işlevi, öbek çıkışındaki verinin geçerli olup olmadığını anlatmaktadır. Eğer komut çekme
öbeği çıkışındaki flush yazmacının değeri mantıksal “1” ise, kod çözme öbeği, komut çekme
çıkışındaki verinin çöp değer olduğunu anlamaktadır. Komut çekme birimi çıkışında 15 bitlik
durum sinyali verisi ile 16 bitlik sabit verisi üretilir. Bu değer komut çekme öbeğinden gelen
ROM verisinin anlamlı iki parçaya bölünmesi ile elde edilir. Durum sinyali verisinin son 6
biti komut bilgisini , daha sonra gelen 4 bit yazmaç bilgisini ardından gelen 4 bit yine yazmaç
4
bilgisini ve ilk bit ise; elde bilgisini verir. Bu bilgiler doğrultusunda yürütme öbeğine,
komutun yürütülebilmesi için uygun sinyaller gönderilir.
Şekil 1.3. Kod çözme öbeği şematik görünümü
Kod çözme işlemini için oluşturulan makine kodu tablosu Tablo 1.1’ de verilmiştir.
Tablo 1.1. decode_wire[14:0] sinyalinin kontrol ettiği birimler ve makine kodu karşılıkları
Decode_statck_ctrl
Halt
Mux1_selector
Mux2_selector
Mux3_selector
Alu_opselect
Alu_en
Decode_Ram_ctrl
decode_wire[1:0]
decode_wire[2]
decode_wire[4:3]
decode_wire[6:5]
decode_wire[7]
decode_wire[11:8]
decode_wire[12]
decode_wire[14:13]
1.2.3. Yürütme
Yürütme öbeği komutların yürütülmesi işleminin gerçekleştirildiği öbek yapı olduğu için CpuKulis işlemcisinin veri-yolu olarak adlandırılabilir. İçerisinde toplam 16 adet komutun
yürütülebildiği ALU bulunur. Bunu yanı sıra; dört adet yazmaç,11 adet çoğullayıcı, bayrak
sonuçları, içerisinde bulunan diğer önemli birimlerdir.
5
Yürütme öbeği, mikroişlemcide aritmetik ve mantıksal işlemleri gerçekleştiren öbektir. Bu
nedenle; yapı diğer öbeklere oranla hayli karmaşıktır. Yapının içerisinde bulunan ALU
biriminin sentez işlemi sonrasında oluşan birkaç sayfalık RTL şemasından sadece bir
sayfasının görünümü Şekil 1.4’ de görülmektedir. Yapının diğer alt öbeklerinin RTL şemaları
yarışma sayfasına yüklenen dosyalar arasında daha ayrıntılı olarak bulunmaktadır.
Şekil 1.4. Yürütme öbeği altında bulunan ALU biriminin RTL şemasının bir bölümü.
1.2.4 Geri yazma
Geri yazma öbeği bir komutun son saat çevriminin yürütüldüğü yapıdır. Kod çözme
öbeğinden aldığı kaynak ve hedef sinyallerini, geri yazma işleminin yapılabilmesi için
yürütme öbeğine uygun sinyalleri üreten öbektir.
6
Şekil 1.5. Geri yazma öbeği RTL şeması
Şekil 1.5’ e göre; gerekli koşullar sağlandığı taktirde, dörder bitlik hedef ve kaynak verileri
doğrultusunda çıkışa wb_signals adını verdiğimiz kontrol sinyalleri vektörünü bu öbek
içerisinde üretilir.
Tablo 1.2. Hedef ve kaynak bilgilerinin makine kodu karşılıkları
HEDEF
000:AREG
001:BREG
010:CREG
011:DREG
100:ALU
101:STACK
110:RAM
KAYNAK
000:AREG
001:BREG
010:CREG
011:DREG
100:ALU
101:STACK
110:RAM
Tablo 1.3. wb_signals[10:0] sinyalinin kontrol ettiği birimler ve makine kodu karşılıkları
Mux7_ctrl
Mux6_ctrl
Reg_select
Wb_RAM
Wb_EN
Wb_RW
Wb_stack
Wb_stack_ctrl(en-rw)
wb_signals[0]
wb_signals[1]
wb_signals[4:2]
wb_signals[5]
wb_signals[6]
wb_signals[7]
wb_signals[8]
wb_signals[10:9]
7
1.3. Ardışık Düzen Hata Denetimi:
Normal koşullar altında bir komut, komut çekme, kod çözme, yürütme, geri yazma olmak
üzere dört saat çevrimi sonucunda işlenmektedir. Bir komut yürütümü bitmeden diğer komut
öbekler arasında ilerleyememektedir. Ardışık düzen yapısı mikroişlemciye her saat
çevriminde bir komutun yürütülmesi olanağını sağlar. Bu sayede; komut yürütme performansı
artar ve mikroişlemcinin performansı büyük oranda iyileştirilmiş olur. Bu nedenle; tasarlanan
mikroişlemcinin “ardışık düzen” yapısı bulundurması kaçınılmazdır. İdealde her saat
çevriminde bir komutun yürütülmesi gerekirken uygulamada bazı komutların ard arda gelmesi
komutun yürütülme süresini artırabilmektedir.
Yapılan benzetim uygulamasında da gözleneceği üzere; bu problem ile ilgili birkaç örnek
verilebilir:
Movi ar, 0x5
Add ar, br
Yukarıdaki örnekte, movi geri yazma işlemine gireceği sırada ardışık düzen özelliği
dolayısıyla, add işleminin de yürütme işlemine girmesi gerekir. Movi komutu ar yazmacının
değerini daha güncelleyememişken, add komutu, işlemini güncellenmemiş değeri kullanarak
yapacaktır ve yanlış sonuç elde edilecektir. Bu problemin çözümü için, movi komutunun geri
yazma işlemini yapması beklenmeli ve add işlemi bundan sonra yürütme öbeğinde işlem
görmelidir.
Başka bir problem aşağıdaki gibi bir kodda meydana gelir.
Push ar
Pop br
Push ve pop komutları yığına veri yazmak ve yığından veri almak için kullanılır. Bu iki
komut ard arda geldiği zaman şöyle bir durum oluşur. Push komutu geri yazma öbeğinde
yığına yazmak için erişir. Pop işlemi bu esnada yürütme öbeğinde işlem görecek ve yığındaki
veriyi çekmeye çalışacaktır. Yığına yazma ve okuma işlemi aynı anda yapılmak
istenmektedir. Bu problem de ilk komutun geri yazma işlemine öncelik verilerek çözülür.
Ardışık düzen hata denetimi öbeği bu şekildeki durumları anlayarak, öbekler için eş
8
zamanlama bilgisi üretip, gerekli durumlarda beklemelerini sağlamaktadır. Şekil 1.6’ da bu
yapının RTL şeması görülmektedir.
Şekil 1.6. Ardışık düzen hata denetimi öbeğinin RTL şeması
9
2. CPU-KULIS DERLEYİCİSİ
2.1. Giriş
Cpu-kulis mikroişlemcisi için tasarlanan ROM’ a benzetim için ilk değerler
$readmemb komutu ile kaydedilmektedir. Bu komutu kullanarak herhangi bir bellek birimini
–ROM veya RAM olabilir- gerek benzetim gerekse sentez aşaması için ilklendirmek
mümkündür. Program belleğine gidecek makine kodlarını elde etmek için ise bu proje
kapsamında Cpu-Kulis derleyicisi tasarlanmıştır. Derleyici çıktı olarak program belleğini
ilklendirmek için kullanılacak olan ikili kodları içeren output.txt isimli basit bir metin dosyası
üretmektedir.
İşlemcinin program belleği 256 satır ve genişliği 4 byte/satır dır. Her yığın verisi 16 bittir.
RAM uzunluğu ise 1024 satırdır, genişliği de 2 byte/satır dır. Dolayısıyla 2KB RAM
mevcuttur.
Kullanılan
komutların
mikroişlemcinin
anlayacağı
makine
komutlarına
dönüştürülmesi işlemini tasarlanan derleyici halleder.
2.2. Derleyici Kullanımı
Bir metin düzenleyici kullanılarak, asm program yazılır. Bu dosya kaydedilir.
Örneğin; kaydedilen dosya “d:\cpu\code.txt” olsun. Derleyicinin, kaynak kodlarını
derledikten sonra oluşan çalıştırılabilir dosya (compiler.exe), herhangi bir dizine kopyalanır,
örneğin c:\compiler.exe. Komut satırından, bu dizine gidilir compiler [asm kodun
bulunduğu dizin adresi] yazılarak derleme işlemi yapılır.
C:\>compiler d:\cpu\code.txt
Aktif dizin compiler.exe dosyasının bulunduğu dizin olmalıdır ve derleme işlemi sonucunda
output.txt dosyası aktif dizinde oluşturulmaktadır. Bu dosya işlemci proje dosyasına
kopyalanarak ROM un ilk değerlerini buradan alması sağlanır.
10
Derleyici bir komut için 32 bitlik işlem kodunun bölümleri Tablo 2.1’ de
görülmektedir. Tablo 2.2 de ise işlenenleri nasıl belirlendiğini gösteren karşılık tablosu
bulunmaktadır.
Tablo 2.1. 32 bitlik işlem kodunun bölümleri
[31:26]
[25:22]
[21:18]
[17]
[15:0]
Operatör kodu
1. İşlenen
2. İşlenen
3. İşlenen
Sabit
Tablo 2.2. İşlem kodu-işlenen karşılık tablosu
0000
0001
0010
0011
0100 -> 0111
1111
1. İşlenen
A yazmacı
B yazmacı
C yazmacı
D yazmacı
Kullanılmaz
Sabit
2. İşlenen
A yazmacı
B yazmacı
C yazmacı
D yazmacı
Kullanılmaz
Sabit
2.2.1 Komut kümesinin kullanımı:
Tablo 2.3. Cpu-Kulis işlemcisinin komut kümesi ve aldığı işlenenleri
1
2
3
4
5
6
7
8
9
Komut 1. işlenen 2. işlenen
3.işlenen
İşlevi
Y
Y
Elde bayrağı İki işlenen toplanır, sonuç 1.
Add
işlenene yazılır
Y
S
Elde bayrağı İki işlenen toplanır, sonuç 1.
Addi
işlenene yazılır
Y
Y
Elde bayrağı İki işlenen çıkartılır, sonuç 1.
Sub
işlenene yazılır
Y
S
Elde bayrağı İki işlenen çıkartılır , sonuç 1.
Subi
işlenene yazılır
Y
YS
----İki işlenen çarpılır, sonuç 1.
Mul
işlenene yazılır
Y
YS
----İki işlenen çarpılır, sonuç 1.
Muli
işlenene yazılır
Y
YS
----İki işlenen çarpılır, sonuç 1.
Mulu
işlenene yazılır
Y
YS
----İki işlenen çıkartılır, sadece
Cmp
bayraklar etkilenir
Y
YS
----İki işlenen VE lenir, sonuç 1.
And
işlenene yazılır
11
10
Andi
Y
S
-----
11
Or
Y
Y
-----
12
Ori
Y
YS
-----
13
14
Not
Xor
Y
Y
----Y
---------
15
Xori
Y
S
-----
16
Sll
Y
YS
-----
17
Srl
Y
YS
-----
18
Sla
Y
YS
-----
19
Sra
Y
YS
-----
20
Lw
Y
YS
-----
21
Sw
Y
YS
-----
22
23
24
Mov
Movi
Beq
Y
Y
YS
Y
S
-----
-------------
25
Bne
YS
-----
-----
26
Ba
YS
-----
-----
27
Bl
YS
-----
-----
28
Nop
29
Hlt
30 Syscall
--------YS
-------------
-------------
31
32
33
Y
Y
-----
-------------
-------------
Push
Pop
Ret
12
İki işlenen VE lenir, sonuç 1.
işlenene yazılır
İki işlenen VEYA lanır, sonuç
1.işlenene yazılır
İki işlenen VEYA lanır, sonuç
1.işlenene yazılır
İşlenenin DEĞİL lenir, geri yazılır
İki işlenen XOR lanır. Sonuç 1.
işlenene yazılır
İki işlenen XOR lanır. Sonuç 1.
işlenene yazılır
1. işlenen, 2.işlenen değeri kadar
sola kaydırılır. Besleme sıfır ile
yapılır.
1. işlenen, 2.işlenen değeri kadar
sağa kaydırılır. Besleme sıfır ile
yapılır.
1. işlenen, 2.işlenen değeri kadar
sola kaydırılır. Besleme sıfır ile
yapılır.
1. işlenen, 2.işlenen değeri kadar
sağa kaydırılır. Besleme işaret biti
ile yapılır.
2.işlenen ile gösterilen adresteki
veri, 1. işlenene yazılır.
2. işlenendeki veri, 1.işlenen ile
gösterilen adrese yazılır.
2. işlenen değeri, 1. işlenene yazılır
2. işlenen değeri, 1. işlenene yazılır
En son yapılan aritmetik işlem
sonucu sıfırsa (sıfır bayrağı = ‘1’)
1. işlenenin gösterdiği adrese dallan
En son yapılan aritmetik işlem
sonucu sıfır değilse (sıfır bayrağı =
‘0’) 1. işlenenin gösterdiği adrese
dallan
1. İşlenenin gösterdiği adrese
koşulsuz dallan
1. işlenenin gösterdiği adrese
koşulsuz dallan, geri dönüş adresini
yığına at.
İşlem yapma
Dur
İşlenen değeriyle RAM’ i adresle,
RAM’ deki veriye dallan.
İşlenen değerini yığına yaz.
yığından veri al ve işlenene yaz.
Yığından geri dönüş adresini al ve
dallan
Tablo 2.3’ de Y ile yazmaç, S ile sabit, YS ile de yazmaç ve sabit kullanan işlemler
gösterilmiştir.
Dört adet yazmaç kullanılabilmektedir: ar, br, cr, dr.
2.2.2 Sembolik sabit tanımlama:
#define <YAZI1> [YAZI2]
Kod içerisinde kullanılan YAZI1 atomu YAZI2 ile değişecektir.
Örnek;
#define CPU_KULIS 1
Addi ar, CPU_KULIS
ifadesi
Addi ar, 1
ifadesi ile aynı anlama gelir.
2.2.3- Etiket tanımlama:
Cpu-Kulis mikroişlemci derleyicisi etiket alabilme özelliğine de sahiptir.
<ETİKET İSMİ> <:>
İşlenenler sırasıyla girildiğinde işlemci sol tarafta girilen ismi “etiket” olarak algılayacaktır.
2.2.4- Başlama noktası tanımlama:
org
Bu
<sabit>
ifadeden
sonra
yazılacak
kodlar
‘sabit’
adres
değerinden
itibaren
ROM’a
yerleştirilecektir.Kod yazımına başlanırken, org komutu ile aksi belirtilmedikçe, ROM a sıfır
adresinden itibaren kodlar yerleştirilmeye başlanacaktır.
NOT: Açısal parantezler (< >) içerisine yazılan ifadeler kullanımı zorunlu olan ifadelerdir.
Köşeli parantezler ([ ]) içerisine yazılan ifadelerde böyle bir zorunluluk yoktur.
13
3. KOMUTLARIN İŞLEM BASAMAKLARI
Bu bölümde komutların işlem basamakları üzerinde durulacaktır. Bir komut “komut çekme”
öbeğinden “geri yazma” öbeğine kadar hangi birimlerden geçmektedir, hangi komut için
hangi birimler kullanılmaktadır sorularına yanıt verilecektir.
Komutlar aritmetik, mantık ve dallanma komutları olarak 3 bölüme ayrılabilir.
1. Aritmetik Komutlar: add, addi, sub, subi, mul, muli, mulu
2. Mantık Komutları: cmp, and, andi, or, ori, not, xor, xori , sll, srl, sla, sra
3. Dallanma Komutları: beq, bne, ba , bl
Aynı zamanda RAM’ den veri okuma ve RAM’ ye veri yazma komutlarının (sw, lw) ; sistem
durdurma komutunun (hlt), yığından veri çekme, yığına veri yazma komutlarının (push, pop)
ve kesme komutu olan (syscall) komutunun işlem basamakları da anlatılacaktır.
Tüm komutlar için, komut çekme ve kod çözme bölümlerinde yapılan işlemler ortaktır. Komut
çekme öbeğinde işlem kodu ROM dan okunur, Kod çözme bölümünde ise Yürütme öbeği için
uygun sinyallere dönüşüm gerçekleşir.
Aritmetik ve mantıksal işlemler için yürütme öbeğinde gerçekleşen işlemler şunlardır:
Kod çözme bölümünden gelen sinyaller sayesinde, ALU için uygun işlemin seçimi
yapılır. Bir saat darbesi süresinde işlem sonucu ALU’ nun çıkışında görülür. Elde
bayrağı elde bitinin işleme dahil edilip edilmeyeceğini belirtir. Elde biti kullanılmak
isteniyorsa elde bayrağı ‘1’ olmalıdır, istenmiyorsa ‘0’ olmalıdır. Eğer elde bayrağı
değeri kullanılmazsa bu değer ‘0’olarak kabul edilmektedir.
Dallanma komutları için yürütme öbeğinde gerçekleşen işlemler şunlardır:
Eğer ;dallanma işlemi gerçekleştirilecekse, geri dönüş adresi yığına atılır ve yürütme
öbeği çıkışında, dallanılacak adres verisi ve dallanma işleminin yapılmasını belirten
bir bayrak verisi görülür.
14
Bellek komutları için yürütme öbeğinde gerçekleşen işlemler şunlardır:
LW komutu için, 2. işlenen değeri ile RAM adreslenir ve o adresteki bilgi RAM
çıkışında elde edilir. SW komutu için gerekli 2. işlenenin çoğullayıcılarla ALU girişine
getirilmesi sağlanır. ALU bu değeri değiştirmeden çıkışına verir.
Yığın komutları için yürütme öbeğinde gerçekleşen işlemler şunlardır:
Pop komutunda, yığındaki veri çekilir, veri yığın çıkışında görülür. Push komutu için,
komut işleneninin çoğullayıcılarla ALU girişine getirilmesi sağlanır. ALU bu değeri
değiştirmeden çıkışa verir.
SYSCALL komutu için Yürütme öbeğinde gerçekleşen işlemler şunlardır:
İşlenen değeri ile RAM adreslenir, aynı anda geri dönüş adresi yığına atılır.
Tüm komutlar için, kod çözme öbeği çıkışında, geri yazma öbeği için Tablo 1.2 de görülen
hedef ve kaynak verileri üretilir. Bu verilere göre geri yazma öbeği yürütme bölümünde
hesaplanan sonucun istenilen hedefe yazılması için gerekli sinyalleri üretir.
HALT Komutu:
Halt komutu geldiği zaman kod çözme öbeğinin çıkışında bu bildirilir. Bu bilgiye
göre; işlemlerin yürütülmesine devam edilir. Eğer; halt komutu gelmiş ise; en son
işlenen komutun geri yazma işlemine izin verildikten sonra başka işlem yapılmaz.
Reset işlemi ile işlemci yeniden başlatılabilir.
15

Benzer belgeler