CITIUS-ALTIUS-FORTIUS

Benzer belgeler
CITIUS-ALTIUS-FORTIUS

K uark projesi. Temel Özellikler :

KASIRGA -4 Buyruk Tasarımı Belgesi Ankara

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi

Mikroçita. Mikroçita Rapor 2:

BM-311 Bilgisayar Mimarisi

CPU TURKEY CPU-KULIS MİKROİŞLEMCİSİ ÇALIŞMA RAPORU

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

BM-311 Bilgisayar Mimarisi

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

BM 375 Bilgisayar Organizasyonu Dersi Vize Sınavı Cevapları 10 Nisan 2009

Lecture 7. Assembler language nedir? Language in 3 seviyesi. Language 3 seviyesi. Nicin onu ogreniriz?

Dr. Feza BUZLUCA İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü

Quiz:8086 Mikroişlemcisi Mimarisi ve Emirleri

BİLGİSAYAR MİMARİSİ. Bilgisayar Bileşenleri Ve Programların Yürütülmesi. Özer Çelik Matematik-Bilgisayar Bölümü

BM-311 Bilgisayar Mimarisi

Hem lw hem de sw komutlarının ofseti 16-bitlik işaretli tamsayıdır.

Şekil. 64 Kelimelik Yığıtın Blok Şeması

Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ. MİB Yapısı. MİB in İç Yapısı. MİB Altbirimleri. MİB in İç Yapısı

Bilgisayar Mimarisi ve Organizasyonu Giriş

Von Neumann Mimarisi. Mikroişlemciler ve Mikrobilgisayarlar 1

KASIRGA 4. GELİŞME RAPORU

Komutların Yürütülmesi

Mimari Esaslar. Mikroişlemcinin mimari esasları; Kaydediciler Veriyolları İş hatları dır.

Mikrobilgisayar Sistemleri ve Assembler

Komut Seti Mimarisi (ISA)

Verilog HDL e Giriş Bilg. Yük. Müh. Selçuk BAŞAK

BM-311 Bilgisayar Mimarisi

Mikroişlemci ve Yapısı. Mikroişlemciler ve Mikrobilgisayarlar

İşletim Sistemleri (Operating Systems)

FPGA Kullanarak 16 Bitlik Mikroişlemci Tasarımı Designing of a 16 bit Microprocessor by Using FPGA

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

DOĞU AKDENİZ ÜNİVERSİTESİ BAHAR BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BLGM-324 BİLGİSAYAR MİMARİSİ DENEY #6

SelCPU. Version Temmuz Proje Ekibi. Selçuk BAŞAK Bilgisayar Bilimleri Mühendisi (YTÜ 1998)

DSP DONANIMI. Pek çok DSP için temel elemanlar aşağıdaki gibidir.

İşlemci Tasarımı ve Aşamaları

Giris {\} /\ Suhap SAHIN

BM-311 Bilgisayar Mimarisi

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

Embedded(Gömülü)Sistem Nedir?

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

MİKROİŞLEMCİ MİMARİLERİ

Ders 3 ADRESLEME MODLARI ve TEMEL KOMUTLAR

Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ. MİB Yapısı. MİB Altbirimleri. Durum Kütüğü. Yardımcı Kütükler

Bilgisayar Mühendisliğine Giriş

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

8086 Mikroişlemcisi Komut Seti

Programlanabilir Devreler

İŞLEMCİLER (CPU) İşlemciler bir cihazdaki tüm girdilerin tabii tutulduğu ve çıkış bilgilerinin üretildiği bölümdür.

BİLGİSAYAR MİMARİSİNDE YENİ YAKLAŞIMLAR DÖNEM PROJESİ

Özet DERS 5. Şu ana kadar bilmeniz gerekenler... İşaretsiz Çarpma. Bayraklardaki Durumlar. İşaretli Çarpma

PASCAL PROGRAMLAMA DİLİ YAPISI

A.Ü. GAMA MYO. Elektrik ve Enerji Bölümü ALGORİTMA VE PROGRAMLAMA 1.HAFTA

BİLGİSAYAR MİMARİSİ. Komut Seti Mimarisi. Özer Çelik Matematik-Bilgisayar Bölümü

Mikrobilgisayar Mimarisi ve Programlama

Bölüm Bazı Temel Konseptler

Komut Seti Mimarisi (ISA)

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

Sunucu Bilgisayarlarda Kullanılan CISC ve RISC İşlemcilerin Performans Karşılaştırımı

Adresleme Yöntemleri MİKROİŞLEMCİ SİSTEMLERİ. İşlenenin Yeri. Örnek MİB Buyruk Yapısı. İvedi Adresleme. Adresleme Yöntemleri. Bellek. Kütükler.

Tek Vuruşluk Đşlemci. -- Company : Ege Universitesi, Elektrik-Elektronik Mühendisliği

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

İşletim Sistemlerine Giriş

Bilgisayarların Gelişimi

Ozet. Review pointers (in C) Memory Addressing

Mikroişlemciler ve Assembler Programlama. Teknoloji Fakültesi / Bilgisayar Mühendisliği Öğr.Gör. Günay TEMÜR

Bölüm 5: ARITMETIK VE MANTIK IŞLEM YAPAN KOMUTLAR

Eğitim Amaçlı Temel Bir Mikrobilgisayarın Tasarlanması ve Gerçeklemesi Design and Implementation of a Basic Microcomputer for Educational Purpose

8. MİKROİŞLEMCİ MİMARİSİ

Adresleme Yöntemleri MİKROİŞLEMCİ SİSTEMLERİ. Örnek MİB ile Adresleme. Adresleme Yöntemleri. Doğal Adresleme. İvedi Adresleme

8086 Mikroişlemcisi Komut Seti

KASIRGA PROJESİ 2. GELİŞME RAPORU

Yrd.Doç.Dr. Celal Murat KANDEMİR

D Duplex : Alıcı + Verici Çalışma Debouching : DMA : Direct Memory Access Data-Bus : Data Veri Yolu Data Flow : Veri Akışı Data Processing : Veri

Program Kontrol Komutları. Mikroişlemciler ve Mikrobilgisayarlar 1

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi

Hacettepe Robot Topluluğu

BİL 361 BİLGİSAYAR MİMARİSİ VE ORGANİZASYONU Güz Dönemi ÖDEV 1

W SAYAC SAYAC SAYAC. SAYAC= ise, d=0 W

MTM 305 MİKROİŞLEMCİLER

HAFTA 1 KALICI OLMAYAN HAFIZA RAM SRAM DRAM DDRAM KALICI HAFIZA ROM PROM EPROM EEPROM FLASH HARDDISK

Çalışma Açısından Bilgisayarlar

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

Mikroişlemcili Sistemler ve Laboratuvarı 8.Hafta

MTM 305 MİKROİŞLEMCİLER

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

Spatial locality nin getirdigi avantaji kullanmak

PIC16F877A nın Genel Özellikleri

Kasırga [Gizli] KASIRGA PROJESİ 3. GELİŞME RAPORU Ankara

Mikrobilgisayar Mimarisi ve Programlama

İÇİNDEKİLER ÖNSÖZ...3

AND Komutu. and hedef, kaynak

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

Pre-requisite : EE240

Arithmetic ve Logical Operations

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

MİKROİŞLEMCİLER 1 Ders 1

Bilgisayara Giriş. Bilgisayarlar ilk geliştirilmeye başlandıklarından bugüne kadar geçen süre içerisinde oldukça değişmişlerdir.

Transkript:

CITIUS-ALTIUS-FORTIUS PROCESSOR Versiyon 1.00 15/04/2008 PROJE SORUMLUSU : BERKAY AYBAR MURAT GOKSEL E-MAIL : baybar@gmail.com, mgoksel@gmail.com

ICINDEKILER Tablo Listesi... Figur Listesi... 1 GIRIS... 1.1 FPGA... 1.2 RISC Islemci... 1.3 EDA Yazilimlari... 2 FPGA ile Fiziksel Islemci Tasarimi Uygulamasi... 2.1 RISC Komut Seti Mimarisi... 2.2 RISC Islemci Mimarisi... 2.3 RISC Islemci Verilog Uygulamasi... 2.3.1 Komut Yakalama Birimi... 2.3.2 Komut Cozumleme Birimi... 2.3.3 Kontrol Unitesi... 2.3.4 Calisma Unitesi... 2.3.5 Hafiza Birimleri... 2.4 16 bitlik Pipeline Islemci Uygulamasi 2.4.1 Pipeline Tehlikeleri... 2.5 Donanim Uygulamasi... 3 Sonuclar... 4 Gelicekte Yapilmasi Gereken Calismalar... 5 Sonuc... Referanslar... Appendiks... A. Komut Aciklamari... B. CAF Processor Verilog Kodu... C. CAF Processor Testbench Verilog Kodu... D. Simulasyon Sonuclari... E. Kaynaklar... FPGA ile CPU tasarimi Page 2

CAF PROCESSOR PROJE OZETI Bu proje kapsaminda verilen komut setinin tasarimda oncelikli olarak en verimli sekilde gerceklenmesi on gorulmustur. Tasarimi zenginlestirmek icin verilen komut setine ek olarak guncel islemcilerde kullanilan yaygin komutlar da eklenicektir(orn: POP, PUSH ). Tasarim 16- bitlik pipelined RISC mimarisi gerceklestirilerek uygulanacaktir. CAF_Processor tasariminin dort farkli bolumden olusmasi on gorulmustur, bunlar sirasiyla; 1) Komut Yakalama Bolumu (Instruction Fetch Stage) 2) Komut Cozumleme Bolumu (Instruction Decoding Stage) 3) Calisma Bolumu (Execution Stage) 4) Geri Okuma Bolumu( Write Back Stage) Her bolum bir veya birden fazla verilog modulunden olusacaktir. Projenin iki fazdan olusturulmasi on gorulmustur. Birinci faz verilen komut kumesinin ve buna ek olarak guncel komutlarin kullanilacagi 16-bitlik RISC islemci tasarimidir. Ikinci faz da ek olarak IEEE 754 Floating Point Unitesi nin de donanima entegre edilip komut kumesini zenginlestirmek ayni zamanda tasarlanicak islemcinin islem yapabilme gucunu artirmak olarak hedeflenmistir. Proje kapsamin da tasarlanicak islemci ile ornek bir FIR filtre uygulamasi yapilmasi planlanmaktadir. Proje kapsaminda ozellikle fonksyonel simulasyonlari ve post-synthesis simulasyonlarini gerceklestirmek icin gerekli olan EDA yazilimlari ve bir gelistirme boardi talep edilmektedir. C, A, F harfleri latince Citius- Altius- Fortius kelimelerinin bas harflerinden gelmektedir. Latince de bu kelimeler sirasiyla Daha hizli, Daha Yuksek, Daha Guclu anlamina gelmektedir. Tasarlanicak islemcininde butun bu ozellikleri saglamasi hedeflendigi icin bu isim proje icin uygun gorulmustur. FPGA ile CPU tasarimi Page 3

1 Add Addition 20 Lw Load word 2 Addi Addition (immediate) 21 Sw Store word 3 Sub Subtraction 22 Mov Move data between registers 4 Subi Subtraction (immediate) 23 Movi Move data (immediate) 5 Mul Multiplication 24 Beq Branch if equal to 0 6 Muli Multiplication (immediate) 25 Bne Branch if not equal to 0 7 Mulu Multiplication (unsigned) 26 Ba Branch always 8 Cmp Compare 27 BL Branch and Link 9 And AND 28 Nop No operation 10 Andi AND (immediate) 29 Hlt Halt 11 Or OR 30 Syscall System call (software interrupt) 12 Ori OR (immediate) 13 Not NOT 14 Xor XOR 15 Xori XOR (immediate) 16 Sll Logical shift left 17 Srl Logical shift right 18 Sla Arithmetic shift left 19 Sra Arithmetic shift right FPGA ile CPU tasarimi Page 4

FPGA ile CPU tasarimi Page 5

1 GIRIS 1.1 FPGA Bu projenin amaci FPGA icerisinde 16 bitlik RISC islemci tasarlamak ve bu islemciyi kullanarak bir uygulama gerceklestirmektir. Bu p roje raporu ileride egitim amacli kullanicagi dusunulerek sayisal tasarim ve FPGA teknolojisi hakkinda genel bilgilerde icermektedir. FPGA teknolojisi sayisal tasarimcilara cok buyuk esneklik saglamaktadir.bunun en buyuk sebeplerinden biri FPGA in tekrar programlanabilmesidir. Ayni zamanda FPGA lerin kismen dusuk fiyatli olmasi ve FPGA sirketlerinin(xilinx, Altera, Actel gibi...) sagladiklari gelismis yazilim araclari sayisal tasarimla ugrasan donanim muhendislerinin hayatini kolaylastirir. FPGA ile yeni calismaya baslayan genc muhensdiler genellikle FPGA yi farkli bir tur mikroislemci sanarlar. Fakat FPGA kullanim amaci ile mikroislemcinin kullanim amaci bir cok zaman birbirlerinden cok farklidir. FPGA in iki farkli kullanim alani vardir bunlardan ilki ASIC prototip gerceklemesidir. ASIC tasarimcilari yaptiklari tasarimlari bilgisayar uzerinde yaptiklari simulasyonlardan sonra FPGA uzerine tasirlar. Cunku FPGA uzerine tasinan bir tasarim gercek zamanda fonksyonellik gosterir. Tasarimci kendisinden istenen tasarimin kriterleri gerceklesip gerceklesmedigini bu evrede test etme sansi bulunur.tasarim muhendisleri icin tasarimlarinin kriterleri olusturup olusturmadigini gormelerini saglayan onemli bir firsattir. Bundan sonraki adim tasarimin ASIC(Chip) in fabrikasyonu icin proses e gonderilmesidir. FPGA baska bir kullanim alani ise dusuk hacimde sistem uretimlerinde ASIC ye bir alternatiftir. ASIC uretimi cok maliyetli bir is oldugu icin ancak yuksek hacimde uretim yapildigi zaman ASIC in birim fiyati makul bir degere ulasir. Ama eger yuksek hacimli bir uretim yapilmayacaksa ASIC uretimi cok pahali olabilir. Bu noktada FPGA boslugu doldurur tasarimcilara hem fiyat hemde tasarim kolayligi acisindan cok fazla avantaj saglar. Tasarlanicak olan spesifik devre FPGA icinde gerceklestirilir ve sistem icinde calistirilir. FPGA ile CPU tasarimi Page 6

1.2 RISC Islemci Bu projede yer alan islemci mimarisi RISC islemci mimarisidir. RISC (Reduced Instruction Set Computer ) Komut Seti Azaltilmis Bilgisayar anlamina gelmektedir. Komut setinin azaltilmasi, cogu zaman islemcinin komut kumesindeki kompleks komutlarin cikartilmasi ile gerceklesir. Bu RISC islemci mimarisini daha az kompleks yapar. RISC islemcilerde asil amac tasarlanan komut kumesini basit yapmak ve bunun sonucunda komutlari hizli isleyen bir islemci elde etmektir. RISC islemcilerde komutlarin islenmesi bir saat cevrimi surer ve komutlarin uzunlugu sabittir. RISC islemci mimarisi bir baska islemci mimarisi olan CISC(Complex Instruction Set Computer) mimarisine alternatif olarak tasarlanmistir. Gunumuzde kullanilan bir cok kisisel bilgasayar CISC mimarisi icerir. 1970 lerin basinda ilk mikroislemci tasarlandiginda hafiza birimleri pahali oldugundan komutlari mumkun oldugu kompleks tasarlayip olusturulucak programlarin hafizada daha az yer kaplanmasi amaclanmistir. O donemde hafiza birimleri maliyetli oldugu icin islemci tasarimcilarini bu yola yoneltmistir. Hafiza maliyetlerinin dusmesi tasarimcilari RISC islemci mimarisine yoneltmistir. RISC ve CISC komut setleri arasindaki iliskiyi guzel bir analoji yaparak aciklamaya calisalim. Ornegin latin alfabesi kullanarak yazilmis bir kitap in toplam sayfa sayisi ile ayni kitabin Cince yazilmis versiyonu ayni sayida degildir. Cince yazilan kitap cok daha az sayfadan olusur bunun sebebi Cın alfabesinde 4000 den fazla farkli sembolun olusudur. Semboller cok spesifik anlamlar icerebilirler fakat bunun sonucunda cok kompleks ve ogrenmesi cok zordur. Latin alfabesinde ise sadece 26 farkli sembol vardir. Bununla beraber ayni kitap cok daha fazla sayfa icermektedir. RISC islemci ve CISC islemci komut seti arasindaki farkda buna cok benzerdir. CISC islemcileri cozumlemek cok daha karisik ve zordur. Genel RISC mimarisi dort bolumden olusmustur. Bunlar sirasiyla 1. Komut Yakalama Evresi(Instruction Fetch Stage) 2. Komut Cozumleme Evresi(Instruction Decode Stage) 3. Komut Calistirma Evresi (Instruction Execution Stage) 4. Geri Yazma Evresi(Write Back) Ilerleyen bolumlerde CAF islemci tasarimi ve mimarisi ile ilgili daha detayli bilgi verilecektir. FPGA ile CPU tasarimi Page 7

1.3 EDA Yazilimlari FPGA ile CPU tasarimi Page 8

2 FPGA ile Fiziksel Islemci Uygulamasi 2.1 Komut Seti Mimarisi Genel olarak RISC islemcilerde basit ve tekduze bir komut formati kullanilir. RISC islemcilerde cok fazla komut formati olmamasi komut cozumlemesini onemli olcude kolaylastirir. CAF islemci komut mimarisi de 30 komut tan olusmustur. Ileride ek komutlarin mimariye eklenmesi planlanmisitir. Genel RISC islemci mimarisinde iki veya uc farkli adresleme teknigi kullanilir ve en genel adresleme teknikleri immediate, direct ve indexed dir. CAF islemci komut setinde de ayni sekilde uc farkli adresleme teknigi kullanilmistir. Diger gerekli adresleme modlari bu temel adresleme modlarindan elde edilebir. CAF islemcisindeki komutlari fonksiyonelliklerine gore gruplandirildiginda dort farkli gruba ayrilir. 1. Brans(Dallanma) Komutlari (Branch Instructions) 2. Veri Isleme Komutlari(Data Processing Instructions) 3. Yukleme ve Depolama Komutlari(Load&Store Instructions) 4. Kesme ve Diger Komutlar(Interrupt) Brans Komutlari: CAF islemcide uc cesit Brans komutu vardir bunlar kosulsuz(branch Always), Kosullu(Branch Equal, Branch Not Equal) ve altprogramlardir(branc&link). Brans komutlari program sayacinin icerigini degistirerek hafiza icerisinde farkli bir bolgeye yonlendirirler. Kosullu brans komutlarinda programi yonlendirmek icin kosulun saglanmasi gerekir. Kosul saglanirsa program sayaci ana-rutinden cikar ve altprogramin komutlarini islemeye baslar. CAF islemcide kosulsuz brans komutu program sayacini 1Kbyte ileri veya geri goturebilirler. Kosullu brans komutu ise ancak 256 byte ileri veya geri goturebilir. Veri Isleme Komutlari: Yukleme ve Depolama Komutlari: Kesme ve Diger Komutlar: CAF_Processor Komut Kumesi Komut Sembol Ornek Anlam Yorum Toplama add 000001 Toplama addi 000010 Immediate Cikarma sub 000011 Cikarma Immediate Subi 000100 FPGA ile CPU tasarimi Page 9

Carpma Mul 000101 Carpma Muli 000110 Immediate Carpma mulu 000111 Isaretsiz Kiyaslama Cmp 001000 Ve And 001001 Ve Andi 001010 Immediate Veya Or 001011 Veya Ori 001100 Immediate Not Not 001101 Xor Xor 001110 Xor Xori 001111 immediate Mantiksal Sll 010000 sola kaydirma Mantiksal Sri 010001 saga kaydirma Aritmetik Sla 010010 sola kaydirma Aritmetik Sra 010011 saga kaydirma Kelime Lw 010100 Yukleme Kelime Sw 010101 Depolama Tasima mov 010110 Tasima Movi 010111 Immediate Kosul(Eger Beq 011000 0 a esit ise) Kosul (Eger Bne 011001 0 esit degil ise) Kosul her Ba 011010 zaman Kosul ve BL 011011 baglama İslem yok Nop 011100 FPGA ile CPU tasarimi Page 10

Dur Halt 011101 Kesme Syscall 011110 CAF Islemci Ek Komutlar FPGA ile CPU tasarimi Page 11

2.2 RISC Islemci Mimarisi RISC islemcilerin komut setinin basit ve kisa olmasi mimarinin de daha az kompleks olmasinda buyuk bir etkendir. RISC mimarisinin bir baska ozelligi, yukleme(load) ve depolama(store) komutlarinin disindaki tum komutlar veriyi islemci icerisindeki yazicilardan okur veya yazarlar. Sadece yukleme(load) ve depolama(store) komutlari disardaki hafiza birimiyle arayuz saglar. Islemcinin icindeki yazicilar(register) disardaki hafiza birimlerinden(ana hafiza veya cache hafiza) cok daha hizli oldugundan komutlarin cok daha hizli ve efektif calistirilmasi mumkun olur. Genel RISC islemci mimarisinde yazici dosyalari(register file) denilen yazici kumesi bulunur. Yazicilar islemci icerisinde gecici olarak sayisal veri depolamasinda kullanilir. RISC islemci mimarisinde cok sayida genel amacli yazici bulundugundan komut isleme sirasinda gerekli olan veriler burada saklanabilir. Bu da ana hafiza birimine olan bagimliligi azaltir ve islemcinin performansini arttirir. Bilindigi gibi islemcinin disinda bulunan hafiza birimine ulasmak icerdeki yazicilara ulasmaktan cok daha fazla zaman alir. Yazici dosyalari ayni zamanda hizli ve efektif altprogram calistirilmasi icinde kullanilir. Genel RISC islemci mimarisinde herhangi bir zamanda anarutin komut sirasinda giderken yazici dosyalarinin belli bir kismina ulasilabilir. Ornegin CAF islemcide 16 tane 16-bitlik genel amacli yazici dosyasi bulunur fakat bunlardan sadece ilk 8 tanesine ulasilabilir. Bir altprogram cagrildigi zaman altprogramin geri kalan 8 yaziciya ulasma hakki vardir. Boylece altprogram cagrildigi zaman anarutindeki veriler yazicilarda tutulur. FPGA ile CPU tasarimi Page 12

2.3 RISC Islemci Verilog Uygulamasi 2.3.1 Komut Yakalama Evresi(Instruction Fetch Unit) Komut yakalama evresinde komut, hafizada program sayacinin gosterdigi yerden alinir ve komut yazicisina yazilir(if_ir). Program sayaci komut adres bilgisini tutar ve komutlar islendikce icerigini iki artirir. Her komut 2byte oldugu icin program sayacida iki artirilir. Hafizadan komut okunmasi icin read_instruction_n sinyalide sifira cekilir. Bir sonraki saat cevriminde hafizadan alinan komut, IF_IR yazicisina depolanir. Komut yakalama evresi her saat cevriminde bu operasyonu yeni komutlar icin gerceklestirir. Boylece komut adresi bir sonraki komut icin hazirlanirken ayni zamanda o anda gelen komut da IF_IR yazicisinda depolanir. Eger brans gelmediyse programi olusturan komutlar sirali bir sekilde calisir. Eger bir brans operasyonu calistirilirsa o zaman program_sayicisina brans in oldugu adres aktarilir. Figur 1.1 Komut Yakalama Evresi //Komut_Yakalama: Komut Yakalama Evresi always@(posedge clk or reset_n) begin if(~reset_n) begin PC <= 0; //program sayaci ilk kosulu read_instruction_n <= 0; end else begin read_instruction_n <= 0; if(branch_active) begin PC <= branch_pc_reg; IF_IR <= branch_instruction; IF_PC <=branch_pc_reg; end else begin PC <= PC + 2; IF_IR <= instruction; // Komut Yakalama Komut Yazicisi IF_IR <= PC + 2; end end end FPGA ile CPU tasarimi Page 13

2.3.2 Komut Cozumleme Evresi Komut cozumleme evresinde IF_IR sayacinda depolanan komut cozumlenir ve genel amacli yazicilarda (yazici dosyasi ) bulunan veri, calistirma evresinde kullanilmak uzere komut cozucu yazicilarina aktarilir. Yazici dosyalarinda bulunan verilerin komut cozucu yazicilarina aktarilmasinin sebebi verilen komutun yazici dosyasi icinden herhangi bir yazicidan veriyi aktarabilmesidir. Bu progamciya esneklik saglar. Asagidaki verilog kodu komut cozumleyici evrenin kodunu gostermistir. Verilog kodunda ornek olmasi icin sadece ADD ve ADDi komutlari cozumlenmistir. Always blogu icinde sadece case statement kullanilmistir. Komut cozumleme evresinin butun kismi Apendiks B kisminda bulunabilir. Figur 1.2 Komut Cozumleme Evresi //Komut_Cozucu Evresi always@(posedge clk) begin case(if_ir[15:10]) 6'b00_0001:begin ID_opcode <= `ADD; ID_Ra <= R[IF_IR[8:6]]; 6'b00_0010:begin ID_opcode <= `ADDi; ID_Ra <= R[10:8]; ID_imm_offset[7:0] <= IF_IR[7:0];.... end case end // always blok sonu FPGA ile CPU tasarimi Page 14

2.3.3 Calistirma Evresi(Execution Stage) FPGA ile CPU tasarimi Page 15

2.3.4 Geri Yazma Evresi (Write Back Stage) FPGA ile CPU tasarimi Page 16

Apendiks A : Komut Aciklamalari CAF Processor Versiyon1.00 1) ADD(Toplama) 0 0 0 0 0 1 X Ra Rb Rc 2 ) Addi(Toplama-Immediate) 0 0 0 0 1 0 Ra Immediate 3)Sub(Cikarma) 0 0 0 0 1 1 X Ra Rb Rc FPGA ile CPU tasarimi Page 17

4)Subi(Cikarma-Immediate) 0 0 0 1 0 0 Ra Immediate 5) Mul(Carpma) 0 0 0 1 0 1 X Ra Rb Rc 6 ) Muli(Carpma-Immediate) 0 0 0 1 1 0 Ra Immediate FPGA ile CPU tasarimi Page 18

7) Mulu(Carpma-Isaretsiz) 0 0 0 1 1 1 X Ra Rb Rc 8)Cmp(Kiyaslama) 0 0 1 0 0 0 X Ra Rb Rc 9)And(Ve) 0 0 1 0 0 1 X Ra Rb Rc 10)Andi(Ve-Immediate) 0 0 1 0 1 0 Ra Immediate FPGA ile CPU tasarimi Page 19

11 )Or(Veya) 0 0 1 0 1 1 X Ra Rb Rc 12)Ori (Veya-Immediate) 0 0 1 1 0 0 Ra Immediate 13)Xori(Exor-Immediate) 0 0 1 1 0 1 Ra Immediate FPGA ile CPU tasarimi Page 20

14)Xor(Exor) 0 0 1 1 1 0 X Ra Rb Rc 15)Sll(Mantiksal Sola Kaydirma) 0 0 1 1 1 1 Immediate Rb Rc 16)Srl(Mantiksal Saga Kaydirma) 0 1 0 0 0 0 Immediate Rb Rc FPGA ile CPU tasarimi Page 21

17)Sra(Aritmatik-Saga Kaydirma) 0 1 0 0 0 1 Immediate Rb Rc 18)Sla(Aritmatik-Sola Kaydirma) 0 1 0 0 1 0 Immediate Rb Rc 19)Not 0 1 0 0 1 1 X Ra Rb Rc FPGA ile CPU tasarimi Page 22

20)Lw(Kelime Yukleme) 0 1 0 1 0 0 X Ra Rb Rc 21)Sw(Kelime Depolama) 0 1 0 1 0 1 X Ra Rb Rc 22) Movi(Veri tasima Immediate) 0 1 0 1 1 1 Ra Immediate FPGA ile CPU tasarimi Page 23

23) Mov(Veri Tasima) 0 1 0 1 1 0 X XXX Rb Rc 24)Beq(Brans Esit) 0 1 1 0 0 0 Kosul Immediate 25)Bnq(Brans Esit Degil) 0 1 1 0 0 1 Kosul Immediate FPGA ile CPU tasarimi Page 24

26)Ba(Branch always) 0 1 1 0 1 0 Immediate 27)Nop(No Operation) 0 1 1 0 1 1 Kosul Immediate 28)Hlt(Halt) 0 1 1 1 0 0 Kosul Immediate FPGA ile CPU tasarimi Page 25

29)Syscall(System calll) 0 1 1 1 0 1 Kosul Immediate FPGA ile CPU tasarimi Page 26

Apendiks B : Verilog Kodu CAF Processor Versiyon1.00 Not: Verilog kodunda kullanilan degiskenler verilogdaki anahtar kelimelerle uyum gostermesi icin Ingilizce isimlendirme yapilmistir. Yorum satirlarinda degiskenlerle ilgili gerekli Turkce aciklamalar yapilmistir. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 // CAF_Processor.v `include "global_parameters_def.v" module (clk, reset_n, read_instruction_n, instruction_address, instruction, read_data_n, write_data_n,data_address, data); //Islemcinin giris ve cikis sinyalleri input clk; input reset_n; input read_instruction_n; input [`WORD_SIZE-1:0] instruction_address; input [`WORD_SIZE-1:0] instruction; output read_data_n; output write_data_n; output [`WORD_SIZE-1:0] data_address; output [`WORD_SIZE-1:0] data; //CAF islemci icindeki yazicilar ve ic sinyaller reg read_instruction_n; reg read_data; reg write_data_n; reg [`WORD_SIZE-1:0] PC; //program sayaci reg [`WORD_SIZE-1:0] LR; // baglama yazicisi reg [`WORD_SIZE-1:0] // yigin gostericisi reg [`WORD_SIZE-1:0] R[`reg_file_size-1:0];// general regs reg N_FLAG; //condition flags (N = negative) reg Z_FLAG; //Sifir Bayragi reg C_FLAG; // Elde Bayragi reg V_FLAG; //Tasma Bayragi(Overflow) reg branch_active; reg [`WORD_SIZE-1:0] branch_pc_reg; reg [`WORD_SIZE-1:0] ALU_out_reg; reg [`WORD_SIZE-1:0] DR; integer i, ex_i; integer found_i, found_ex_i; //pipeline yazicilari reg [`WORD_SIZE-1:0] IF_IR; reg [`WORD_SIZE-1:0] IF_PC; reg [`WORD_SIZE-1:0] ID_PC; reg [`WORD_SIZE-1:0] ID_Ra; reg [`WORD_SIZE-1:0] ID_Rb; reg [`WORD_SIZE-1:0] ID_Rc; FPGA ile CPU tasarimi Page 27

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 reg [`WORD_SIZE-1:0] EX_ALU_out; reg [5:0] ID_opcode; reg [5:0] EX_opcode; reg [10:0] ID_Imm_offset; reg [7:0] EX_Imm_offset; reg [3:0] ID_cond; reg [2:0] ID_Rd_code; reg [2:0] EX_Rd_code; //Program sayaci bir cikis portu olan instruction_addresi aktariliyor. assign instruction_address = PC; assign data = (~write_data_n)? DR : `bz; //tri-state data //Komut_Yakalama: Komut Yakalama Evresi always@(posedge clk or reset_n) begin if(~reset_n) begin PC <= 0; //program sayaci ilk kosulu read_instruction_n <= 0; end else begin read_instruction_n <= 0; if(branch_active) begin PC <= branch_pc_reg; IF_IR <= branch_instruction; IF_PC <=branch_pc_reg; end else begin PC <= PC + 2; IF_IR <= instruction; // Komut Yakalama Komut Yazicisi IF_IR <= PC + 2; end end end //Komut_Cozucu Evresi always@(posedge clk) begin case(if_ir[15:10]) 6'b00_0001:begin ID_opcode <= `ADD; ID_Ra <= R[IF_IR[8:6]]; 6'b00_0010:begin ID_opcode <= `ADDi; ID_Ra <= R[10:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b00_0011:begin ID_opcode <=`SUB; FPGA ile CPU tasarimi Page 28

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 ID_Ra <= R[IF_IR[8:6]]; 6'b00_0100:begin ID_opcode <= `SUBi; ID_Ra <= R[10:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b00_0101:begin ID_opcode <= `MUL; ID_Ra <= R[IF_IR[8:6]]; 6'b00_0110:begin ID_opcode <= `MULi; ID_Ra <= R[IF_IR[10:8]]; ID_imm_offset <= R[IF_IR[7:0]]; 6'b00_0111:begin ID_opcode <= `MULu; ID_Ra <= R[IF_IR[8:6]]; 6'b00_1000:begin ID_opcode <= `CMP; ID_Ra <= R[IF_IR[8:6]]; 6'b00_1001:begin ID_opcode <= `AND; ID_Ra <= R[IF_IR[8:6]]; 6'b00_1010:begin ID_opcode <= `ANDi; ID_Ra <= R[IF_IR[10:8]]; ID_imm_offset <= R[IF_IR[7:0]]; 6'b00_1011:begin ID_opcode <= `OR; ID_Ra <= R[IF_IR[8:6]]; 6'b00_1100:begin ID_opcode <= `ORi; FPGA ile CPU tasarimi Page 29

135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 ID_Ra <= R[10:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b00_1101:begin ID_opcode <= `XOR; ID_Ra <= R[IF_IR[8:6]]; 6'b00_1110:begin ID_opcode <= `XORi; ID_Ra <= R[10:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b00_1111:begin ID_opcode <= `SLL; ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 6'b01_0000:begin ID_opcode <= `SRL; ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 6'b01_0001:begin ID_opcode <= `SLA; ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 6'b01_0010:begin ID_opcode <= `SRA; ID_imm_offset[4:0] <= R[IF_IR[8:6]]; 6'b01_0011:begin ID_opcode <= `NOT; ID_Ra <= R[IF_IR[8:6]]; 6'b01_0100:begin FPGA ile CPU tasarimi Page 30

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 ID_opcode <= `LW; ID_Ra <= R[IF_IR[8:6]]; 6'b01_0101:begin ID_opcode <= `SW; ID_Ra <= R[IF_IR[8:6]]; 6'b01_0110:begin ID_opcode <= `MOVi; ID_Ra <= R[IF_IR[8:6]]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b01_0111:begin ID_opcode <= `MOV; ID_Ra <= R[IF_IR[5:3]]; ID_Rb <= R[IF_IR[2:0]]; 6'b01_1000:begin ID_opcode <= `BEQ; ID_cond <= IF_IR[11:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b01_1001:begin ID_opcode <= `BNQ; ID_cond <= IF_IR[11:8]; ID_imm_offset[7:0] <= IF_IR[7:0]; 6'b01_1010:begin ID_opcode <= `BA; ID_imm_offset[9:0] <= IF_IR[9:0]; 6'b01_1011:begin ID_opcode <= `NOP; ID_Ra <= R[IF_IR[8:6]]; 6'b01_1100:begin ID_opcode <= `HLT; ID_Ra <= R[IF_IR[8:6]]; FPGA ile CPU tasarimi Page 31

227 228 229 230 231 232 233 234 235 236 237 238 6'b01_1101:begin ID_opcode <= `SYSCALL; ID_Ra <= R[IF_IR[8:6]]; endcase end endmodule FPGA ile CPU tasarimi Page 32