• Sonuç bulunamadı

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ YÜKSEK LİSANS TEZİ FPGA TABANLI SANAL İŞLEMCİ TASARIMI VE PERFORMANS ANALİZİ. Muhammet Ertuğrul ÇAKIR

N/A
N/A
Protected

Academic year: 2022

Share "ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ YÜKSEK LİSANS TEZİ FPGA TABANLI SANAL İŞLEMCİ TASARIMI VE PERFORMANS ANALİZİ. Muhammet Ertuğrul ÇAKIR"

Copied!
65
0
0

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

Tam metin

(1)

ANKARA ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ

YÜKSEK LİSANS TEZİ

FPGA TABANLI SANAL İŞLEMCİ TASARIMI VE PERFORMANS ANALİZİ

Muhammet Ertuğrul ÇAKIR

ELEKTRİK ELEKTRONİK MÜHENDİSLİĞİ ANABİLİM DALI

ANKARA 2018

Her hakkı saklıdır

(2)
(3)
(4)

ii ÖZET

Yüksek Lisans Tezi

FPGA TABANLI SANAL İŞLEMCİ TASARIMI VE PERFORMANS ANALİZİ

Muhammet Ertuğrul ÇAKIR

Ankara Üniversitesi Fen Bilimleri Enstitüsü

Elektrik Elektronik Mühendisliği Anabilim Dalı

Danışman: Prof. Dr. Hakkı Gökhan İLK

Bu çalışmada, FPGA üzerinde düşük güç tüketimi, düşük kaynak kullanımı ve yüksek frekansta işlem yapabilme kabiliyetlerine sahip olan bir sanal işlemci tasarlanması ve tasarlanan işlemcinin performans analizinin yapılması amaçlanmıştır. Tasarlanan sanal işlemcinin, önde gelen FPGA üretici firmalarının tasarlayıp kullanıcıya sunduğu sanal işlemcilerle karşılaştırıldığında performans olarak daha üstün konumda olması hedeflenmiştir. Bu kapsamda, işlemcilerin iç yapısı ve işlemci mimarileri hakkında detaylı araştırmalar yapılmıştır. Yapılan araştırmalar sonucunda tasarlanacak olan işlemcinin kabiliyetleri belirlenmiş, belirlenen kabiliyetlere bağlı olarak işlemci tasarımının nasıl olacağına karar verilmiştir. Tasarlanan işlemci 8 bit genişliğinde veri yoluna sahiptir. İşlemci 40 adet komut içeren RISC yapıda komut setine ve çok döngülü komut işleme düzenine sahiptir. Harvard hafıza mimarisinde olan işlemci 256 byte veri belleği, 704 byte program belleği ve 16 adet genel amaçlı yazmaç içermektedir.

İşlemcinin Vivado geliştirme ortamı kullanılarak davranışsal seviyede tasarımı yapılmış ve simülasyon sonuçları incelenmiştir. Tasarımın gerçeklenmesi amacıyla Arty A7-35T FPGA geliştirme ortamı kullanılmış ve gerçeklenme sonrasında güç tüketimi, kaynak kullanımı ve maksimum çalışma frekansına dair sonuçlar Picoblaze sanal işlemcisi ile karşılaştırmalı olarak ortaya koyulmuştur. Bu sonuçlar incelendiğinde tasarlanan işlemcinin kaynak kullanımı ve güç tüketimi açısından Picoblaze sanal işlemcisine kıyasla daha üstün bir konumda olduğu, maksimum çalışma frekansı açısından ise daha düşük bir performans ortaya koyduğu görülmüştür.

Aralık 2018, 54 sayfa

Anahtar Kelimeler: Sanal işlemci, işlemci iç yapısı, işlemci mimarisi, sayısal tasarım, programlanabilir mantık cihazları, FPGA, donanım tanımlama dili

(5)

iii ABSTRACT Master Thesis

FPGA BASED SOFT-CORE PROCESSOR DESIGN AND PERFORMANCE ANALYSIS

Muhammet Ertuğrul ÇAKIR

Ankara University

Graduate School of Natural and Applied Sciences Department of Electrical and Electronics Engineering

Supervisor : Prof. Dr. Hakkı Gökhan İLK

In this study, it is aimed to design a soft core processor which has low power consumption, low area usage and high frequency processing capability on FPGA and to analyze the performance of the designed processor. The designed soft core processor intented to be superior position compared to the soft core processors designed and manufactered by leading FPGA manufacterers. In this context, detailed research have been made about the structure of the processors and processor architectures. The capabilities of the processor to be designed have been determined as a result of the research and the design of the processor has been decided depending on the determined capabilities. The designed processor has an 8-bit wide bus. The processor has a RISC instruction set with 40 instructions and multi cycle instruction processing architecture . The processor in the Harvard memory architecture contains 256 bytes of data memory, 256 bytes of program memory and 16 general purpose registers. At the behavioral level, the desing of the processor has been made and the simulation results were examined using the Vivado development environment. Arty A7-35T FPGA development environment was used for the realization of the design and the results of power consumption, resource utilization and maximum operating frequency were determined after the implementation. When the results are analyzed, it was seen that the designed processor has a superior position in terms of resource usage and power consumption compared to the Picoblaze virtual processor, and has a lower performance in terms of maximum operating frequency.

December 2018, 54 pages

Key Words: Soft core processor, processor structure, processor architecture, digital design, programmable logic devices, FPGA, hardware description language

(6)

iv TEŞEKKÜR

Tez çalışmam boyunca özgür çalışma olanağı sağlayan danışman hocam Sayın Prof. Dr.

Hakkı Gökhan İLK’e (Ankara Üniversitesi Elektrik Elektronik Mühendisliği Anabilim Dalı) ve bu konuda çalışma yapmama vesile olan hocam Sayın Dr. Celal Onur GÖKÇE’ye teşekkür ederim.

Muhammet Ertuğrul ÇAKIR Ankara, Aralık 2018

(7)

v

İÇİNDEKİLER

TEZ ONAY SAYFASI

ETİK ... i

ÖZET ... ii

ABSTRACT ... iii

TEŞEKKÜR ... iv

KISALTMALAR DİZİNİ ... vii

ŞEKİLLER DİZİNİ ... viii

ÇİZELGELER DİZİNİ ... ix

1. GİRİŞ ... 1

2. KAYNAK ÖZETLERİ ... 4

3. MATERYAL ve YÖNTEM ... 7

3.1 Materyal ... 7

3.1.1 Programlanabilir mantık cihazları ... 7

3.1.1.1 PLA ... 7

3.1.1.2 PAL ... 8

3.1.1.3 GAL ... 8

3.1.1.4 CPLD ... 9

3.1.1.5 FPGA ... 9

3.1.2 Donanım tanımlama dilleri ... 12

3.1.3 İşlemci temelleri ... 13

3.1.3.1 Fiziksel işlemciler ... 13

3.1.3.2 Sanal işlemciler ... 15

3.1.4 İşlemci iç yapısı ... 16

3.1.5 İşlemci tasarım mimarileri ... 18

3.1.5.1 Hafıza mimarileri ... 18

3.1.5.2 Komut işleme düzenleri ... 20

3.1.5.3 Komut seti mimarileri ... 22

3.1.5.4 Adresleme yöntemleri ... 24

3.1.6 Vivado Design Suite Geliştirme Ortamı ... 24

3.1.7 Arty A7-35T FPGA Geliştirme Platformu ... 25

(8)

vi

3.1.8 Uart arabirimi ... 26

3.2 Yöntem ... 27

3.2.1 Tasarlanan işlemcinin temel özellikleri ... 27

3.2.2 Komut yapısı ... 27

3.2.3 Komut seti ... 28

3.2.4 Adresleme yöntemleri ... 32

3.2.5 Çok Döngülü komut işleme düzeni ... 33

3.2.6 Yakalama birimi ... 34

3.2.7 Kod Çözme birimi ... 35

3.2.8 Yürütme birimi ... 36

3.2.9 Genel amaçlı yazmaçlar ... 37

3.2.10 Hafıza organizasyonu... 38

4. ARAŞTIRMA BULGULARI ... 39

4.1 Varyans Hesabı Uygulaması ... 39

4.2 Ortanca Süzgeci Uygulaması ... 40

4.3 Performans Analizi ... 41

4.3.1 Maksimum saat frekansı ... 41

4.3.2 Kaynak kullanımı ... 41

4.3.3 Güç tüketimi ... 42

5. SONUÇ ... 43

5.1 Değerlendirme ... 43

5.2 Öneriler ... 44

6. KAYNAKLAR ... 45

EKLER ... 47

EK 1 Tasarlanan İşlemcinin Komut Seti ... 48

EK 2 Tasarlanan İşlemcinin Şematik Gösterimi ... 50

EK 3 Varyans Hesabı Uygulaması Assembly Kodu... 51

EK 4 Ortanca Süzgeci Uygulaması Assembly Kodu ... 52

ÖZGEÇMİŞ ... 54

(9)

vii

KISALTMALAR DİZİNİ

ALU Aritmetik Mantık Birimi (Arithmetic Logic Unit)

BRAM Rastgele Erişimli Bellek Bloğu (Block Random Access Memory) BUFG Evrensel Tampon (Global Buffer)

CISC Karmaşık Komut Kümesiyle Hesaplama (Complex Instruction Set Computing)

CPLD Karmaşık Programlanabilir Mantık Cihazı (Complex Programmable Logic Device)

FF Yazboz (Flip Flop)

FPGA Sahada Programlanabilir Kapı Dizileri (Field Programmable Gate Arrays) GAL Genel Dizi Mantığı (Generic Array Logic)

HDL Donanım Tanımlama Dili (Hardware Description Language) LUT Başvuru Tablosu (Look Up Table)

MIPS Saniyede Milyon Komut (Millions of Instructions Per Second) OPCODE İşlem Kodu (Operation Code)

PAL Programlanabilir Dizi Mantığı (Programmable Array Logic) PLA Programlanabilir Mantık Dizisi (Programmable Logic Array) RISC İndirgenmiş Komut Kümesiyle Hesaplama (Reduced Instruction Set

Computing)

RTL Yazmaç Transfer Seviyesi (Register Transfer Level)

SRAM Durağan Rasgele Erişimli Bellek (Static Random Access Memory) UART Evrensel Asenkron Alıcı Verici (Universal Asynchronous Receiver

Transmitter)

VHDL Çok Yüksek Hızlı Tümleşik Devre Donanım Tanımlama Dili (Very High Speed Integrated Circuit Hardware Description Language)

VLIW Çok Uzun Komut Kelimesi (Very Long Instruction Word)

(10)

viii

ŞEKİLLER DİZİNİ

Şekil 3.1 PLA ve PAL iç yapısı ... 8

Şekil 3.2 FPGA’in iç yapısı ve mantık hücresi ... 9

Şekil 3.3 SRAM bellek hücresi ... 10

Şekil 3.4 FPGA tasarım akışı ... 12

Şekil 3.5 VHDL ve Verilog ile yazılmış D flip flop devresi ... 13

Şekil 3.6 Yıllara göre işlemcilerde bulunan transistör sayısı ... 15

Şekil 3.7 Von Neumann ve Harvard mimarisi ... 19

Şekil 3.8 Komut işleme düzenleri ... 20

Şekil 3.9 RISC vs CISC komutlarının karşılaştırılması ... 22

Şekil 3.10 Merkezi İşlem Birimi ile veri belleği hız arasındaki farkı ... 23

Şekil 3.11 Vivado Design Suite Geliştirme Ortamı ... 24

Şekil 3.12 Arty A7-35T Fpga geliştirme platformu ... 25

Şekil 3.13 Uart arabirimi bit düzeni ... 26

Şekil 3.14 Tasarlanan işlemcinin komut yapıları ... 28

Şekil 3.15 Çok döngülü komut işleme düzeni ... 33

Şekil 3.16 Tasarlanan işlemcinin yakalama birimi ... 34

Şekil 3.17 Tasarlanan işlemcinin kod çözme birimi ... 35

Şekil 3.18 Tasarlanan işlemcinin yürütme birimi ... 36

Şekil 3.19 Tasarlanan işlemcinin genel amaçlı yazmaçlar birimi ... 37

Şekil 3.20 Tasarlanan işlemcinin hafıza organizasyonu ... 38

Şekil 4.1 Varyans hesabı uygulaması... 39

Şekil 4.2 Ortanca süzgeci uygulaması ... 40

(11)

ix

ÇİZELGELER DİZİNİ

Çizelge 3.1 Aritmetik ve Mantık işlem komutları ... 29

Çizelge 3.2 Kaydırma ve Döndürme komutları ... 30

Çizelge 3.3 Veri transfer komutları ... 30

Çizelge 3.4 Karşılaştırma ve Dallanma komutları ... 31

Çizelge 3.5 Kesme komutları ... 32

Çizelge 4.1 Maksimum çalışma frekansı ... 41

Çizelge 4.2 Kaynak kullanımı ... 42

Çizelge 4.3 Güç tüketimi... 42

(12)

1 1. GİRİŞ

Fiziksel işlemciler silikona gömülü, sabit donanım yapısına sahip ve üzerinde bulunduğu elektronik yapının yönetimini sağlayan cihazlardır. Yüksek performansları ve düşük enerji tüketimleri sebebiyle gömülü sistem tasarımında sıkça tercih edilmektedirler. Ancak performans ve enerji tüketimi avantajlarının yanında, tasarıma getirdikleri sınırlar ve üretim maliyetlerinin ancak yüksek sayıda üretilmeleri koşuluyla ekonomik olması gibi dezavantajları vardır.

FPGA’ler (Field Programmable Gate Arrays) ise üretimden sonra amaca bağlı olarak programlanabilen, yapılan programlamaya bağlı olarak donanım yapısı değişen programlanabilir mantık cihazlarıdır. FPGA’lerin üretimden sonra donanım yapılarının değiştirilebilmesi özelliği, kullanıcılara FPGA üzerinde işlemci donanımı oluşturma imkanı sağlamaktadır.

Sanal işlemciler, donanım tanımlama dilleri ile oluşturulmuş programlanabilir mantık cihazları üzerinde çalışan işlemcilerdir. Programlanabilir mantık cihazları ile gerçeklendikleri için fiziksel işlemcilere kıyasla daha düşük performansa sahiptirler.

Ancak tasarımda esneklik sağlamaları, uygulamaya yönelik özelleştirilebilmeleri, çoklu olarak tasarlanabilmeleri ve maliyet olarak fiziksel işlemcilere kıyasla düşük seviyede olmaları gibi avantajlara sahiptirler. Bu avantajları sayesinde sanal işlemciler, programlanabilir mantık cihazları üzerinde genel amaçlı olarak tasarlanarak fiziksel işlemciler yerine kullanılmaktadırlar.

Programlanabilir mantık cihazları üzerinde sanal işlemci tasarımı, genel amaçlı tasarımın yanında modelleme ve doğrulama amacıyla da gerçekleştirilmektedir. Fiziksel işlemci üretim maliyetinin çok yüksek olması sebebiyle öncesinde iyi bir şekilde modellenmesi ve istenen özelliklere sahip olduğunun doğrulanması gerekmektedir.

Fiziksel işlemcilerin, üretimden önce programlanabilir mantık cihazları üzerinde modellenmesi ve doğrulamalarının yapılması amacıyla sanal işlemci olarak oluşturulmaları günümüzde sıkça kullanılan bir yöntemdir.

(13)

2

Sanal işlemcilerin fiziksel işlemcilere karşı var olan avantajları sayesinde fiziksel işlemcilere alternatif olarak kullanılması ve fiziksel işlemcilerin üretimi öncesi modelleme amaçlı olarak tasarlanması gibi sebeplerle sanal işlemci tasarımı konusunda yapılan çalışmalar gün geçtikçe artmaktadır.

Tez çalışmasının amacı düşük güç tüketimi, düşük kaynak kullanımı ve yüksek çalışma frekansı özelliklerine sahip bir sanal işlemci tasarlayarak; sanal işlemciler konusuna akademik açıdan katkı sağlamak ve işlemcilerin çalışma mantığı, iç yapısı, tasarım mimarileri ve FPGA kullanımı konularında yetkinlik kazanmaktır.

Bu kapsamda ilk olarak sanal işlemci tasarımı konusunda yapılmış olan akademik çalışmalar incelenmiştir. Sanal işlemci tasarımı konusunda yapılan çalışmaların artarak devam edeceği öngörüsü (Tong vd. 2006), bilgisayar mimarisi öğretiminin bir parçası olarak sanal işlemci tasarımı yapılması (Zavala vd. 2015) ve yüksek performanslı sanal işlemci tasarımı (Başak 2008) gibi konunun önemini gösteren birçok çalışma kaynak özetleri bölümünde detaylarıyla paylaşılmıştır.

Kaynak incelemelerinin ardından materyal bölümünde çalışma kapsamında kullanılan nesneler incelenmiştir. Yapılan çalışmada sanal işlemci tasarımında programlanabilir mantık cihazı olarak FPGA kullanılmıştır. Bu sebeple materyal bölümünde FPGA’ler hakkında detaylı bilgi verilmiştir. Bunun yanında sanal işlemci tasarımı gerçekleştirebilmek için işlemcilerin çalışma mantığı, iç yapısı ve tasarım mimarileri hakkında detaylı bilgiler gerekmektedir. Bu bilgiler de yine materyal bölümünde anlatılmıştır.

Tasarlanan işlemci 8 bit genişliğinde veri yolu, RISC (Reduced Instruction Set Computing) yapıda komut seti, Çok Döngülü komut işleme düzeni, Harvard hafıza mimarisi özelliklerine sahiptir. Bunun yanında tasarlanan işlemci aritmetik ve mantık, kaydırma ve döndürme, koşullu ya da koşulsuz dallanma, kesme ve fiziksel giriş- çıkışlar ile veri transferi işlemlerini yerine getirme kabiliyetlerine sahiptir. Yöntem bölümünde tasarlanan işlemcinin özellikleri ve kabiliyetleri detaylı bir şekilde anlatılmıştır.

(14)

3

Performans Analizi bölümünde, tasarlanan sanal işlemcinin simülasyonları yapılmıştır.

Tasarlanan sanal işlemci kullanılarak varyans hesabı uygulaması ve ortanca süzgeci uygulaması gerçekleştirilmiştir. Yapılan uygulamaların sonuçları bölüm içinde paylaşılarak tasarımın doğruluğu davranışsal seviyede ortaya koyulmuştur.

Sonuç bölümünde tasarlanan işlemcinin kaynak kullanımı, güç tüketimi ve maksimum çalışma frekansı değerleri incelenmiştir. Bu inceleme, Xilinx firmasının tasarladığı Picoblaze sanal işlemcisi ile karşılaştırmalı olarak yapılmıştır. Karşılaştırmada Picoblaze işlemcisinin kullanılmasının sebebi ise tasarlanan işlemci ile veri yolu genişliği, hafıza mimarisi ve fiziksel giriş çıkışlar başta olmak üzere birçok açıdan benzerlik göstermesidir. Detayları sonuç bölümünde verilen karşılaştırma sonucunda Picoblaze sanal işlemcisi maksimum çalışma frekansı açısından tasarlanan sanal işlemciye, kaynak kullanımı ve güç tüketimi açısından ise tasarlanan sanal işlemci, Picoblaze sanal işlemcisine karşı üstünlük göstermiştir. Tez çalışması sonunda, başlangıçta belirlenen hedeflere büyük ölçüde ulaşılmıştır.

(15)

4 2. KAYNAK ÖZETLERİ

Sanal işlemci tasarımı ticari amaçlı ya da açık kaynaklı olarak birçok platformda birçok firma ya da kişi tarafından gerçekleştirilmektedir. Bunların yanında akademik alanda çalışma yapan kişiler tarafından da üzerinde araştırmalar yapılan, farklı tasarım mimarilerinin denendiği bir konu olma özelliğine sahiptir. Bu bölümde, yapılan bazı akademik çalışmalar incelenecek ve yapılan sanal işlemci tasarımlarının özelliklerinden bahsedilecektir.

Alaer (2006) yaptığı çalışmada, 16 bit genişliğinde adres ve veri yoluna sahip bir sanal işlemciyi tüm alt birimleriyle birlikte tasarlamıştır. 16 adet genel amaçlı yazmaç, 3 bit genişliğinde bir durum yazmacı içeren işlemcinin her bir komutu 16 bit genişliğindedir.

Tasarlanan sanal işlemci aritmetik, mantık ve veri transfer komutları yürütebilmektedir.

İşlemcinin çalışma frekansı aritmetik ve mantık işlemleri için yaklaşık 3 MHz, veri transferi komutları için yaklaşık 1,5 MHz ve anlık komutlar için 2,3 MHz’dir. Tasarım ISE 3.1 geliştirme ortamı kullanılarak gerçekleştirilmiştir. Çalışma sonunda tasarım yapılan simülasyon ve gerçekleme ile doğrulanmıştır.

Tong vd. (2006) çalışmasında, Altera firması tarafından geliştirilen Nios II, Xilinx firması tarafından geliştirilen MicroBlaze ve Picoblaze, Tensilica firması tarafından geliştirilen Xtensa XL, OpenCores.org tarafından geliştirilen OpenRISC 1200 ve Gaisler Research tarafından geliştirilen LEON3 sanal işlemcilerini karşılaştırmıştır.

Çalışma frekansı, komut seti mimarisi, komut işleme düzeni, kaynak tüketimi gibi açılardan karşılaştırmalı olarak değerlendirilen sanal işlemcilerin sonuçları tablo haline getirilmiştir. Bu açıdan iyi bir kaynak olan çalışmada sanal işlemcilerin kullanımının yaygınlaşacağı da öngörülmüştür.

Öztürk (2010) tarafından yapılan çalışmada, FPGA üzerinde mantık kapılarını birbirleriyle ilişkilendirerek HSEO16 isimli bir sanal işlemci mimarisi oluşturmak ve bu mimarinin çalışırlığını ispatlamak amaçlanmıştır. İşlemcide 16 bit genişliğinde veri

(16)

5

yolu, 8 adet genel amaçlı olmak üzere 17 adet yazmaç bulunmaktadır. 33 adet komut içeren RISC komut seti mimarisi kullanılan işlemcide hafıza mimarisi olarak Von Neumann tercih edilmiştir ve 8 kilobyte kapasiteli bir bellek mevcuttur. İşlemcinin giriş çıkış işlevlerini yerine getirebilmesi için sisteme bir adet UART (Universal Asynchronous Receiver Transmitter) arayüzü eklenmiştir. Kullanıcıya yazılım geliştirme imkanı sağlamak amacıyla da Smart Assembler programı geliştirilmiştir. Bu sayede kullanıcı Smart Assembler programını kullanarak yazılım geliştirdikten sonra UART arayüzü vasıtasıyla işlemciyi programlayabilmektedir. Binary Sayaç ve Faktöriyel programları yazılarak işlemci test edilmiş ve sonuç olarak istenen tasarım başarıyla gerçekleştirilmiştir.

Başak (2011) düşük kaynak tüketimi, düşük alan kullanımı ve yüksek çalışma frekansı hedefleyerek FPGA tabanlı SelCPU2 isimli bir sanal işlemci tasarımı yapmıştır ve tasarım Altera Nios II sanal işlemcisi ile performans ve özellik açısından karşılaştırılmıştır. SelCPU2 67 adet komut içeren RISC komut seti mimarisine sahiptir.

Harvard hafıza mimarisine sahip olan işlemcinin veri yolu 32 bit genişliğindedir. Komut işleme düzeni olarak 3 aşamalı İş Hattı yapıda olan işlemcide çoğu komut tek saat darbesinde tamamlanabilmektedir. İşlemcinin gerçeklenmesi amacıyla Altera Cyclone 3 FPGA’i içeren DE0 eğitim ve geliştirme platformu kullanılmıştır. Simülasyon için temel algoritmalardan olan Quicksort, Bubble Sort ve Fibonacci serisi algoritmaları kullanılmış ve SelCPU2 - Nios II işlemcilerinin performansları karşılaştırılmalı olarak değerlendirilmiştir. Karşılaştırmalar sonucunda Nios II işlemcisi 185 MHz maksimum saat frekansına ulaşabilirken SELCPU2 85 MHz’de kalmıştır. Maksimum çalışma frekansı dışındaki değerlendirmelerde ise SELCPU2 işlemcisi üstünlük göstermiştir.

Zavala vd. (2015) tarafından bilgisayar mimarisinin öğrenciler tarafından daha iyi anlaşılması amacıyla bir sanal işlemci tasarımı yapılmıştır. İşlemci 8 bit genişliğinde veri yolu, 29 adet komut içeren RISC komut seti ve Harvard hafıza mimarisine sahiptir.

512 byte program ve 256 byte veri belleği, 8 adet genel amaçlı yazmaçlar ve 2 adet aritmetik, 6 adet mantıksal işlem yapabilen sade bir ALU (Arithmetic Logic Unit) birimine sahip olan işlemci Çok Döngülü komut işleme düzenine sahiptir. İşlemcinin gerçeklenmesi amacıyla Xilinx Spartan-3E FPGA platformu kullanılmıştır. İşlemci

(17)

6

tasarımının doğruluğunu test etmek ve performansını gözlemlemek adına işlemcinin bütün birimlerini ve komutların çoğunluğunu kullanan bir program olarak Fibonacci Serisi’nin ilk 10 elemanını hesaplayan program seçilmiştir. Tasarım ve simülasyonlar sonucunda istenen amaca ulaşılmış, öğrencilerin bilgisayar mimarisini anlayabilmesi adına bir kaynak ortaya çıkarılmıştır.

Jeemon (2016) Verilog kullanarak 8 bit genişliğinde veri yolu olan bir sanal işlemci tasarlamıştır. İşlemci 34 adet komut içeren RISC yapıda komut setine sahiptir. Hafıza mimarisi olarak Harvard kullanan işlemci 8 bit genişliğinde ALU, 8 bit genişliğinde bir giriş bir çıkış portu, 8 bit genişliğinde 8 adet genel amaçlı yazmaç, 4 bit genişliğinde durum yazmacı ve kesme giriş portu içermektedir. İş hattı komut işleme düzenine sahip işlemci 19.34 MHz maksimum saat frekansında çalışabilecek şekilde doğrulanmıştır.

Thakor and Pal (2017) yaptığı çalışmada, VHDL (VHSIC Hardware Description Language) kullanarak 16 bit genişliğinde veri yolu olan bir sanal işlemci tasarlamayı ve gerçeklemeyi amaçlamıştır. İşlemci 16 adet komut içeren RISC komut seti mimarisine sahiptir. Komut işleme düzeni olarak Çok Döngülü yapıda olan işlemcinin kontrol biriminde Start, Fetch, Decode, Execute ve Writeback olmak üzere beş ayrı durum bulunmaktadır. İşlemcinin gerçeklenmesi amacıyla Xilinx Spartan 6 FPGA platformu kullanılmıştır. Simülasyon için hazırlanan test programı ise 16 komutun hepsini kullanmaktadır. Simülasyon sonuçları ve beklenen sonuçlar karşılaştırılarak işlemcinin tasarımı doğrulanmıştır.

(18)

7 3. MATERYAL VE YÖNTEM

Materyal bölümünde üzerinde çalışılacak olan konu ile ilgili nesneler ve teknikler hakkında bilgi verilecektir. Yöntem kısmında ise yapılan çalışmada kullanılan nesneler ve teknikler detaylı bir şekilde anlatılacaktır.

3.1 Materyal

Sanal bir işlemci tasarımının yapılabilmesi için işlemcilerin çalışma mantığı, iç yapısı ve mimarisine dair teorik bilgiye ihtiyaç vardır. Bunun yanında sanal işlemcinin simülasyonlarının yapılacağı bir yazılım geliştirme ortamı, gerçekleneceği bir programlanabilir mantık cihazı, yazılım geliştirme ortamı ve programlanabilir mantık cihazında yapılacak işlemler için bir donanım tanımlama dili bilgisi gereklidir. Bu bölümde programlanabilir mantık cihazları, donanım tanımlama dilleri, işlemciler, yapılan tasarımın simülasyonlarını gerçekleştirmek amacıyla kullanılan yazılım geliştirme ortamı, yapılan tasarımın gerçeklenmesi amacıyla kullanılan geliştirme platformu ve işlemcinin programlanmasında kullanılan haberleşme protokolü hakkında bilgi verilecektir.

3.1.1 Programlanabilir mantık cihazları

Programlanabilir mantık cihazları, yeniden yapılandırılabilir sayısal devreler için kullanılan cihazlardır. Programlanabilir mantık cihazlarının sabit işlevleri yoktur, üretim aşamasından sonra bir devrede kullanılmadan önce amaca bağlı olarak programlanırlar.

Teknolojideki gelişmelere bağlı olarak farklı özelliklerde programlanabilir mantık cihazları (PLA, PAL, CPLD, FPGA vb.) ortaya çıkmıştır.

3.1.1.1 PLA (Programmable Logic Array)

PLA’lar yeniden yapılandırılabilir sayısal devreler oluşturmak amacıyla kullanılan bir çeşit mantık cihazlarıdır. PLA’lar birbirine bağlı programlanabilir AND ve

(19)

8

programlanabilir OR kapı kümelerinden oluşur. Bu kapılar ve kümeler arasındaki bağlantılar değiştirilerek istenen işlevi yerine getiren sayısal devreler elde edilebilir.

3.1.1.2 PAL (Programmable Array Logic)

PAL, PLA’dan farklı olarak programlanabilir AND ve sabit OR kapı kümelerinden oluşur. OR kümesinin sabit yapıda olması daha ucuz, küçük ve hızlı üretim avantajlarını getirmiştir. Buna karşın OR kümesinin sabit yapıda olması esnekliğin azalmasına sebep olmuştur.

Şekil 3.1 PLA ve PAL iç yapısı

Şekil 3.1’de PLA’nın AND ve OR kümelerinin programlanabilir olduğu, PAL’ın ise AND kümesinin programlanabilir olmasına karşın OR kümesinin sabit yapıda olduğu görülmektedir.

3.1.1.3 GAL (Generic Array Logic)

GAL, PLA ve PAL’dan farklı olarak, daha küçük fiziksel boyutu ve yüksek işlem kapasitesinin yanında silinip tekrar programlanabilme özelliğine sahiptir.

(20)

9

3.1.1.4 CPLD (Complex Programmable Logic Device)

PLA, PAL ve GAL cihazlar yüzlerce mantık hücresi bulunduran küçük boyutlu cihazlardır. Buna karşın büyük boyutlu sayısal devrelerin oluşturulması ihtiyacı duyulmuştur. Bu ihtiyaç CPLD’nin ortaya çıkmasıyla karşılanmıştır. CPLD’ler önceki cihazlardan farklı olarak yüzbinlerce mantık hücresi bulunduran, bu yüksek sayıya karşın küçük boyutlu olan ve karmaşık sayısal devre tasarımlarını kolaylaştıran cihazlardır.

3.1.1.5 FPGA

FPGA’ler iç yapısı kullanıcı tarafından değiştirilebilen, paralel işlem yapabilme kabiliyetine sahip programlanabilir tümleşik devrelerdir.

Şekil 3.2 FPGA’in iç yapısı (sol) ve mantık hücresi (sağ)

Şekil 3.2’de görüldüğü üzere FPGA’ler mantık hücreleri, ara bağlantılar ve giriş/çıkış blokları olmak üzere üç temel bölümden oluşur. Her bir mantık hücresi bir adet LUT (Look Up Table), bir adet D flip flop ve bir adet 2x1 çoğullayıcıdan oluşur. İstenen işlevi yerine getirmesi için yazılan programa bağlı olarak mantık hücreleri ve ara bağlantılar şekillenir, bu sayede yeni bir donanım elde edilmiş olur.

Xilinx, Altera ve Lattice Semiconductor önde gelen FPGA üretim firmalarıdır. FPGA üretim kapasiteleri incelendiğinde piyasadaki FPGA üretiminin % 50’si Xilinx, % 37’si

(21)

10

Altera ve % 10’u Lattice Semiconductor firmaları tarafından yapılmaktadır (Mwangi 2016). FPGA’lerin üretim maliyetlerinin zamanla azalması ve tasarım esnasında kullanıcıya esneklik sağlamaları sayesinde kullanımları yaygınlaşmıştır. Özellikle paralel işlem kabiliyeti gereken uygulamalarda sıkça kullanılmaktadır. 2016 yılında 6,36 milyon $ olan FPGA pazarının, 2023 yılında 9,5 milyon $’a çıkması beklenmektedir (Anonymous 2017a).

FPGA’ler şematik tasarım ve HDL (Hardware Description Language) ile tasarım olmak üzere iki farklı yöntemle programlanabilir. Şematik tasarım derleyici programın kütüphanesinde bulunan mantık kapılarının birbirlerine bağlanmasıyla yapılır. HDL tasarım ise bir programlama dili ile istenen tasarımın yapılmasına olanak sağlar.

FPGA üretimi ise farklı teknolojiler kullanılarak gerçekleştirilebilir. (Farooq vd. 2012)

 SRAM Tabanlı Üretim: SRAM (Static RAM) tabanlı FPGA’ler, statik bellekte mantık hücreleri yapılandırma verilerini depolar. SRAM geçici bir bellek olduğundan ve güç kaynağı olmadan verileri tutamayacağından, bu teknoloji ile üretilen FPGAler güç kesintisinden sonra tekrar programlanmalıdır.

Şekil 3.3 SRAM bellek hücresi

(22)

11

Şekil 3.3’te görüldüğü üzere SRAM bellek hücresi bit durumunu (‘1’ ya da ‘0’) oluşturmak üzere 4 adet ve erişim denetimini gerçekleştirmek için 2 adet olmak üzere toplamda 6 adet transistörden oluşur.

 Flaş Tabanlı Üretim: Flaş tabanlı FPGA’ler, yapılandırma verilerinin depolaması için birincil kaynak olarak flaş kullanır ve SRAM gerektirmez. Flash tabanlı FPGA’ler daha az güç tüketir. Ayrıca radyasyon etkilerine daha toleranslıdır.

Bahsedilen üstünlüklere karşın flaş tabanlı FPGA’lerin yeniden programlanma sayısı sınırlıdır. Bu sebeple SRAM tabanlı üretime kıyasla daha az tercih edilen bir üretim teknolojisidir.

 AntiFuse Tabanlı Üretim: Antifuse tabanlı FPGA’ler, önceki tekniklerden farklı olarak sadece bir kez programlanabilirler. AntiFuse, başlangıçta akımı iletmeyen ancak akımı iletmek için bağlantıları yakılan bir cihazdır. Bu sebeple Antifuse tabanlı FPGA daha sonra yeniden programlanamaz ve üretim teknolojisi olarak çok az tercih edilir.

FPGA programlama işlemleri şekil 3.4’teki tasarım akışında görülmektedir.

HDL/Şematik tasarımda istenen sayısal devre, donanım tanımlama dili kullanılarak ya da şematik tasarım ile oluşturulur. Tasarım yapıldıktan sonra ise iki farklı işlem gerçekleştirilebilir. Davranışsal simülasyon işleminde sistemin giriş çıkış tepkisi ve sinyal durumları test edilebilir. Netlist oluşturulması işleminde ise davranışsal seviyede yapılan tasarım, mantık kapısı ve depolama birimleri seviyesine düşürülür. Netlist oluşturulduktan sonra çeviri işlemine başlamadan önce kullanılacak FPGA’e bağlı olarak giriş çıkış pin atamaları yapılarak tasarım kısıtlamaları oluşturulur. Çeviri kısmında gerçeklenecek olan netlist ile tasarım kısıtlamaları birleştirilir. Eşleştirme kısmında, çeviri kısmında oluşturulan birleşim hedef cihaz ile eşleştirilir. Yerleştirme ve Yönlendirme kısmında ise zaman kısıtlarına bağlı olarak tasarımın cihaz üzerindeki yerleşimi ve bağlantıları gerçekleştirilir. Yerleştirme ve Yönlendirme işleminden sonra tasarım cihaza yüklemeye ve zamanlama simülasyonu yapmaya hazır durumdadır.

Zamanlama simülasyonunda davranışsal simülasyondan farklı olarak mantık kapıları arasındaki iletim gecikmeleri hesaba katılır. Bu sebeple davranışsal simülasyona göre

(23)

12

daha doğru sonuç veren karmaşık bir işlemdir. Konfigürasyon kısmında ise oluşturulan tasarım cihaza yüklenerek doğrulama yapılabilir.

Şekil 3.4 FPGA tasarım akışı

3.1.2 Donanım tanımlama dilleri

Donanım tanımlama dilleri sayısal devrelerin oluşturulması amacıyla kullanılan programlama dilleridir. Oluşturulacak olan sayısal devrenin tasarım ve simülasyon çalışmaları donanım tanımlama dilleri kullanılarak yapılır.

Donanım tanımlama dilleri arasında en çok kullanılan diller VHDL ve Verilog’dur.

Verilog, Gateway Design Automation firması tarafından 1985 yılında oluşturulmuştur.

Tasarımcıları dilin C diline benzemesini istemişler ve benzer şekilde tasarlamışlardır.

VHDL ise Amerikan Savunma Dairesinin isteği üzerine 1987 yılında geliştirilmiştir. Bu iki dilin birbirlerine karşı bazı avantaj ve dezavantajları bulunduğu için hangisinin üstün olduğuna dair bir karşılaştırma yapmak doğru olmayacaktır. Ancak Google Books verileri incelendiğinde, VDHL dilinin Verilog diline göre akademik çalışmalarda daha

(24)

13

çok kullanıldığı ancak aradaki farkın gittikçe azaldığı görülmektedir (Golson and Clark 2016).

Şekil 3.5’te VHDL ve Verilog kullanılarak bir oluşturulan D Flip Flop devresinin örnek tasarım kodu görülmektedir.

Şekil 3.5 VHDL ve Verilog ile yazılmış D Flip Flop devresi

3.1.3 İşlemci temelleri

İşlemci, üzerinde bulunduğu elektronik yapının aritmetik ve mantık işlemlerini yerine getiren programlanabilir elektronik aygıttır. Elektronik yapı üzerindeki diğer aygıtlardan aldığı verileri işler, sonuca ulaşır ve bu sonuca bağlı olarak yapılacak işlemleri gerekli aygıtlara iletir. Bu tanım fiziksel ya da sanal farketmeksizin tüm işlemciler için geçerlidir.

3.1.3.1 Fiziksel işlemciler

Fiziksel işlemciler, sıklıkla kullanılan ismiyle “mikroişlemciler” çok sayıda transistörden oluşan, mekanik parça içermeyen sabit donanım yapısına sahip aygıtlardır.

(25)

14

Fiziksel işlemciler, ikili sayı sistemindeki rakamları temsil etmek amacıyla gelişmiş anahtarlama sistemlerine sahiptirler. İşlemcilerde uzun bir süre bu anahtarlama işlemini yerine getirmek amacıyla vakum tüpleri kullanılmıştır ancak transistör teknolojisindeki gelişim, transistörlerin vakum tüpleri yerine tercih edilmesini sağlamıştır. Transistörün anahtarlama aygıtı olarak kullanılmasıyla birlikte işlemcilerde verim ve işlem kapasitesi artmaya, boyut küçülmeye başlamıştır.

1946 yılında ENIAC tarafından ilk halka açık işlemci üretilmiştir. Bu işlemci 18 bin vakum tüpü içeren, 140kW anlık enerji ihtiyacı olan 30 ton ağırlığında bir işlemcidir (Burks 1947). Buna karşın 2015 yılında IBM tarafından üretilen z13 işlemcisi 678 mm2 alanda 7,1 milyar transistör içermektedir (El-Aawar 2015).

İlk transistör 1947 yılında William Shockley liderliğindeki bir ekip tarafından Bell Laboratuvarlarında üretilmiştir. Bell Laboratuvarlarındaki bu çalışmalar sonucu William Shockley, John Bardeen ve Walter Houser Brattain 1956 yılı Nobel Fizik Ödülü’nün sahipleri olmuşlardır. 1950’li yıllarda ise tümleşik devreler üzerine araştırmalar yoğunlaşmış, Texas Instruments şirketi çalışanı olan John Kilby 1958 yılında ilk çalışan tümleşik devresinin patentini almıştır. 2000 yılında ise Kilby, tümleşik devreler konusunda yaptığı çalışmalar sebebiyle Nobel Fizik Ödülüne layık görülmüştür (Hongbao 2006). 1970 yılında ilk mikroişlemci F14 savaş uçaklarında kullanılmak üzere Steve Geller ve Ray Holts tarafından tasarlanmıştır.

İlk ticari mikroişlemci ise Intel şirketi tarafından 4 bit veri genişliği ve 740 kHz maksimum çalışma frekansına sahip 2300 adet transistör içeren özellikleriyle 1971 yılında 4004 ismiyle sunulmuştur (Baida 2010).

Intel şirketinin kurucularından Gordon Moore 1975 yılında “her iki yılda bir işlemciler içindeki transistör sayısı iki katına çıkacaktır” öngörüsünde bulunmuştur. Bu öngörü daha sonra Moore Yasası olarak ifade edilmeye başlanmıştır.

(26)

15

Şekil 3.6’da 1971 yılından 2016 yılına kadar işlemcilerdeki transistör sayısını gösteren grafik görülmektedir. Bu grafikten incelendiğinde Moore Yasası’nın günümüze kadar geçerliliğini büyük oranda koruduğu görülmektedir.

Şekil 3.6 Yıllara göre işlemcilerde bulunan transistör sayısı

3.1.3.2 Sanal işlemciler

Sanal işlemciler programlanabilir mantık cihazları üzerinde çalışan, donanım tanımlama dilleri ile ifade edilmiş işlemcilerdir. Sanal işlemcilerin esnek tasarım, uygulamaya yönelik özelleştirilebilme, çoklu olarak tasarlanabilme ve düşük maliyet gibi avantajlara sahip olmaları sebebiyle kullanımları yaygınlaşmaktadır. Günümüzde önde gelen FPGA firmaları tarafından geliştirilmiş olan sanal işlemciler ve ticari amaçlı olmayan açık kaynak sanal işlemcilerde mevcuttur.

(27)

16

Microblaze, Xilinx firması tarafından oluşturulmuş, 32 bit Harvard RISC mimarisinde, gömülü sistemler için optimize edilmiş olan bir sanal işlemcidir. 32 bit komut uzunluğu, 3 aşamalı iş hattı komut işleme düzeni ve 32 adet 32 bitlik genel amaçlı yazmaca sahiptir. Basit bir mikroişlemci, ön bellek ve hafıza koruması içeren bir gerçek zamanlı işlemci ya da hafıza yönetimi içeren linux tabanlı bir uygulama işlemcisi olmak üzere üç farklı amaçla kullanılabilir (Nade ve Sarwadnya 2015).

Picoblaze ise yine Xilinx firması tarafından basit işlemlerde kullanılması amacıyla geliştirilmiş, düşük alan tüketimine sahip, 8 bit Harvard RISC mimarisinde bir sanal işlemcidir (Chu 2008). İşlemcilerin konfigürasyonu ve programlanması firma tarafından sunulan Vivado Design Suite isimli geliştirme ortamı ile gerçekleştirilir.

Nios II, Altera firması tarafından geliştirilmiş olan 32 bit Harvard RISC mimarisinde bir sanal işlemcidir. Microblaze ile benzer bir şekilde basit bir mikroişlemci, gerçek zamanlı işlemci ve uygulama odaklı işlemci olmak üzere üç farklı amaçla kullanılabilir.

Bunun yanında economy, standard ve fast olmak üzere üç çeşidi vardır ve bu çeşitler arasında kaynak tüketimi, işlem hızı açısından farklılıkları bulunmaktadır. İşlemcilerin konfigürasyonu ve programlanması firma tarafından sunulan Quartus isimli geliştirme ortamı ile gerçekleştirilir (Nade and Sarwadnya 2015).

OpenRISC 1200, opencores.org sitesinde bulunan açık kaynaklı 32 bit ve 64 bit seçenekleri olan, 5 aşamalı iş hattı ve Harvard RISC mimarisinde bir sanal işlemcidir.

Bu işlemci düşük güç tüketimi, yüksek performans ve çok yönlülük özellikleri önde tutulacak şekilde optimize edilmiştir. OpenRISC 1200’ün C/C++, Java ya da Fortran dilleri kullanılarak programlanabilmesi adına geliştirilen derleyiciler internet ortamında mevcuttur (Bennett ve Baxter 2010).

3.1.4 İşlemci iç yapısı

Temel olarak bir işlemci, veri yolu ve kontrol birimi olmak üzere iki kısımdan oluşmaktadır (Enoch 2005). Veri yolu, veri yönetiminden sorumlu olan birimdir.

(28)

17

Çevresel elemanlardan veri alınması, yürütülecek komutların depolanması, geçici verilerin depolanması, aritmetik mantık işlemlerin yapılması, birbirine bağlı işlemler arasında durum sinyallerinin üretilmesi gibi işlemler veri yönetimi işlemlerinden bazılarıdır. Kontrol birimi ise veri yolunu kontrol eden bir sonlu durum makinesidir.

Veri yolundan gelen durum sinyallerine bağlı olarak gerekli işlemleri yapar, bir sonuca ulaşır ve bu sonuca bağlı olarak ürettiği kontrol sinyallerini veri yoluna gönderir. Veri yolu bu kontrol sinyallerine bağlı olarak veri yönetimine devam eder.

Kontrol birimi, işlemci mimarisine bağlı olarak değişebilse de temelde Yakalama, Kod Çözme, Hafıza Erişimi, Yürütme, Geri Yazma olmak üzere beş durum içerir. Yakalama durumunda işlenecek olan komutun adresi komutların tutulduğu belleğe gönderilir ve sıradaki komut alınır daha sonra program sayacının adresi değiştirilir. Program sayacının adresi eğer herhangi bir dallanma işlemi yoksa bir sonraki komutun adresi olacak şekilde, eğer dallanma var ise gerekli adres olacak şekilde değiştirilir. Kod Çözme durumunda işlenecek olan komut bellekten alınır ve çözülür. Çözüme bağlı olarak hangi işlemlerin yapılacağına karar verilir. Eğer komut hafızaya erişim gerektiriyorsa Hafıza Erişimi durumunda belirlenen işlemler gerçekleştirilir. Yürütme durumunda kod çözme durumunda belirlenen işlem yürütülür ve üretilen kontrol sinyalleri gerekli birimlere iletilir. Geri Yazma durumunda ise yürütme durumundaki işlemlere bağlı olarak genel amaçlı yazmaçların içerikleri güncellenir.

Tasarlanan işlemcinin kabiliyetlerine ve mimari özelliklerine bağlı olarak veri yolu birçok alt birimden oluşur. Tüm işlemciler için ortak diyebileceğimiz bazı alt birimler şunlardır:

Program Belleği: Yürütülecek olan komutların tutulduğu bellektir.

 Veri Belleği: İstenen verilerin tutulduğu çevresel birimlerle bağlantısı olan bellektir. Belleğe erişim özel komutlarla sağlanır.

 Program Sayacı: Yürütülecek olan komutun adresini tutan birimdir. İşlenen komuta bağlı olarak diğer birimlerden gelen durum sinyallerine göre bir sonraki komutun adresini belirler.

(29)

18

 Komut Çözücü: Program belleğinden çekilen komutun çözüldüğü birimdir.

Çözüme bağlı olarak durum sinyalleri üretilir.

 Aritmetik-Mantık Birimi: Aritmetik-Mantık işlemlerinin gerçekleştirildiği birimdir.

 Genel Amaçlı Yazmaçlar: İşlemci içerisinde işlemler gerçekleştirilirken geçici verilerin tutulduğu birimdir.

3.1.5 İşlemci tasarım mimarileri

İşlemcinin istenen görevleri yerine getirebilmesi için gerekli olan ihtiyaçlardaki değişimler zaman içinde farklı mimariler ortaya çıkarmıştır. Bu mimarilerin ortaya çıkışında gelişen teknolojinin payı çok büyüktür. Ortaya çıkan mimarilerden bazıları hafıza mimarileri, komut işleme düzenleri, komut kümesi mimarileri ve adresleme yöntemleri başlıkları altında incelenecektir.

3.1.5.1 Hafıza mimarileri

Hafıza mimarilerinden ilki olan Von Neumann mimarisinde program belleği ile veri belleği ortaktır. Buna karşın Harvard mimarisinde program belleği ve veri belleği iki ayrı birim şeklindedir. Şekil 3.7’de Von Neumann ve Harvard mimarileri arasındaki temel farklılık görsel olarak sunulmuştur.

(30)

19

Şekil 3.7 Von Neumann ve Harvard mimarisi

Von Neumann mimarisinin en büyük dezavantajı veriler ve program aynı bellekte tutulduğu için eş zamanlı olarak işlenemezler. Eğer program okunuyorsa belleğe veri yazılıp okunması için ya da belleğe veri yazılıp okunuyorsa bir sonraki programın okunması için yapılan işlemin bitmesini beklemek gereklidir. Ancak Harvard mimarisinde iki farklı bellek olduğu için program ve veriler eş zamanlı olarak işlenebilirler. Von Neumann mimarisinde bu soruna çözüm olarak ön bellek yapısı ortaya çıkmıştır. Ön bellekler, küçük boyutlu ve sık ya da son kullanılan verilerin tutulduğu belleklerdir. Sık ya da son kullanılan verilerin okunup yazılması işlemleri önbellekte yapıldığı için merkezi işlem biriminin ana bellekte yapılan işlemlerin bitmesini bekleme kısıtı ortadan kalkar (Smith 1999).

Harvard mimarisinin ise program ve veri bellekleri arasında doğrudan bir kanal olmadığı için programlar kendi kendini değiştirememesi ve Von Neumann mimarisine kıyasla daha fazla kaynak tüketmesi gibi dezavantajları bulunmaktadır.

(31)

20

Tasarlanan işlemcide Harvard hafıza mimarisi kullanılmıştır. Bunun sebebi ise önbellek yapısı gerektirmediği ve program ile veriler eş zamanlı olarak işlenebildiği için RTL tasarımının daha kolay olmasıdır.

3.1.5.2 Komut işleme düzenleri

İşlemciler komut işleme düzenlerine göre farklılık gösterirler. Bazı komut işleme düzenleri komutların hızlı işlenmesine olanak tanırken bazıları komutları daha yavaş işler ya da bazı düzenler basit yapıda iken bazıları karmaşık bir tasarım süreci gerektirir.

Kısacası açıklamak gerekirse, komut işleme hızı ile işlemci karmaşıklığı arasında bir denge bulunmaktadır. Komut işleme düzenleri Tek Döngülü, Çok Döngülü, İş hattı ve Süper ölçek olmak üzere dört çeşide ayrılabilir. Şekil 3.8’de farklı düzenlerde komutların nasıl işlendiği görülmektedir.

Şekil 3.8 Komut işleme düzenleri

(32)

21

Tek Döngülü düzende tüm komutlar eşit saat darbesinde işlenir. Bu özellik kolay tasarımı beraberinde getirir. Ancak bazı komutların işlenmesi diğerlerine kıyasla daha uzun sürebildiği için saat frekansı, en yavaş işlenen komuta göre seçilir. Bu durumda beraberinde kısa komutlar içinde uzun süre beklemeyi, yani verimsizliği getirir.

Çok Döngülü düzende ise komutlar farklı saat darbesi sayısında işlenebilir. Bu da tek döngülü düzendeki kısa sürede işlenebilecek komutlar için gereksiz beklemeyi ortadan kaldırmış olur. Tek Döngülü düzene kıyasla daha verimlidir ancak tasarımı daha karmaşıktır. Çünkü komutların işlem süresi birbirinden farklı olduğu için birçok birimden durum sinyali alınıp yapılan işin hangi aşamada olduğunun sürekli kontrol edilmesi gereklidir.

İş hattı düzeninde Tek ve Çok Döngülü düzenden farklı ve daha gelişmiş bir özellik olan, bir komutun işlenmesi bitmeden diğer komutun işlenmeye başlaması özelliği vardır. Kontrol biriminin durumlarından biri olan yakalama durumunda komutun yakalama durumunda işlenecek kısmı işlendikten sonra diğer komutun yakalama durumunda işlenecek kısmı alınır. Aynı durum kod çözme, yürütme ve geri yazma durumlarında da devam eder. Bu özellik komut işleme hızını ciddi derecede artırır ancak sıralı gelen komutların birbirinin sonucuna bağlı olması ya da dallanma içeren komutlar bu mimaride soruna sebep olacağı için bu gibi sorunlara önlem almak işlemci tasarımını karmaşıklaştırır.

Süper ölçek mimarisinde tüm komutlar değerlendirilir ve birbirinden bağımsız olan komutlar eş zamanlı olarak işlenir. Bu özellik komut işleme hızını büyük ölçüde arttırır.

Ancak aynı anda birden çok komutun işlenebilmesi için yakalama, kod çözme, yürütme, geri yazma birimlerinin çok sayıda olması yani tasarımın büyümesi gerekir (Nurmi 2009).

Tasarlanan işlemcide Çok Döngülü komut işleme düzeni tercih edilmiştir. Bunun sebebi Tek Döngülü komut işleme düzenine kıyasla daha verimli olması, İş Hattı ve Süperölçek düzenlerine kıyasla tasarım karmaşıklığının daha az olmasıdır.

(33)

22 3.1.5.3 Komut seti mimarileri

İşlemciler komut seti mimarilerine göre farklılık gösterirler. Komutların uzunluğu, yapısı, karmaşıklığı her mimaride değişmektedir. Bu değişim tasarımdaki farklılaşmayı da beraberinde getirir.

Komut seti mimarilerinden ilki olan CISC (Complex Instruction Set Computing) ilk ortaya çıkan komut seti mimarisidir. Bu mimaride komutlar değişken uzunlukta ve karmaşık yapıdadır. Çok sayıda komut tek bir komut haline getirildiği için hem bellekten hem de komut sayısından tasarruf sağlanır. Ancak komutların karmaşıklığı işlemci tasarımında karmaşıklığı da beraberinde getirir.

RISC komut seti mimarisinde komutlar eşit uzunlukta ve basit yapıdadır. Bu sayede işlemci tasarımı daha basit olur. Ancak bir işlemi gerçekleştirmek için CISC mimarisine kıyasla daha fazla komut kullanmak gerekir. (Chevtchenko ve Vale 2014)

Şekil 3.9 RISC ve CISC komutların karşılaştırılması

Şekil 3.9’da üç ayrı yazmaçtaki değerin karelerinin toplamını bir yazmaca aktarma işleminin RISC ve CISC mimarilerindeki işlemcilerle nasıl gerçekleştirebileceği örnek olarak görülmektedir. RISC komut setlerinde komutlar basit yapıda olduğu için çarpma işlemi her bir yazmaca toplamda üç kere uygulandıktan sonra yazmaçlardaki değerler hedef yazmaca iki seferde toplanabilmektedir. Buna karşın CISC komut setlerinde

(34)

23

komutlar karmaşık yapıda ve uzun boyutta oldukları için çarpımların toplamı işlemini gerçekleştirmek üzere sadece bir adet komut bulunabilmektedir.

İşlemci üretiminin ilk dönemlerinde belleklerin çok daha masraflı ve yavaş olması belleğin mümkün olduğunca az kullanıldığı CISC mimarisini ortaya çıkarmıştır. CISC mimarisinden RISC mimarisine geçişi sağlayan teknolojik gelişmeler bellek hızlarının artması ve maliyetlerinin düşmesi olmuştur. Bellek ve merkezi işlem birimi hızları arasındaki fark şekil 3.10’da görülmektedir.

Şekil 3.10 Merkezi İşlem Birimi ile veri belleği hız arasındaki farkı (Hruska 2018)

Gelişen bilgisayar teknolojisi ve artan hız ihtiyacı, komut seviyesinde paralellik sağlayan VLIW (Very Long Instruction Word) mimarisini ortaya çıkarmıştır. VLIW mimarisinde komutlar çok uzundur ve çok sayıda işlem içerir. Bu karmaşık ve uzun komutların çözümü ise derleyici kullanılarak gerçekleştirilir. VLIW mimarisine uygun olarak oluşturulmuş derleyiciler, bir komut içerisindeki sıralı ve paralel işlemleri tanımlar ve bunları donanıma bildirir. VLIW mimarisinde işlem tanımının derleyici tarafından yapılması donanımdaki karmaşıklığın düşük seviyede kalmasını sağlar (Nurmi 2009).

(35)

24

RISC yapıdaki komutlar basit yapıda olduğu için komutların çözülmesinde diğer komut seti mimarilerine kıyasla daha basit kod çözme birimi yeterli olmaktadır. Bu sebeple tasarlanan işlemcide, tasarım hedeflerinden biri olan düşük kaynak kullanımı hedefine ulaşmak amacıyla işlemci karmaşıklığının daha az olduğu RISC komut işleme düzeni tercih edilmiştir.

3.1.5.4 Adresleme yöntemleri

Adresleme yöntemi verinin belleğe nasıl yerleştirileceğini ve bellekteki veriye nasıl erişileceğini belirler. Bir işlemcide adresleme yönteminin çokluğu işlemci tasarımının karmaşıklığını artırır ancak karmaşık işlemlerin daha hızlı ve kolay yerine getirilmesini sağlar. İşlemci mimarisine bağlı olarak adresleme yöntemlerinin sayısı değişmektedir.

Tasarlanan işlemcide 6 farklı adresleme yöntemi kullanılmıştır.

3.1.6 Vivado Design Suite Geliştirme Ortamı

Vivado Design Suite, Xilinx firması tarafından HDL tasarımlarının sentezi ve analizi için üretilmiş, çip geliştirme ve yüksek seviyeli sentez için ek özellikler sunan bir yazılım paketidir.Simülasyon için dahili bir mantık simülatörü içerir.

Şekil 3.11 Vivado Design Suite Geliştirme Ortamı

(36)

25

Vivado Desing Suite ayrıca C kodunu programlanabilir mantığa dönüştüren bir takım zinciri ile yüksek seviyeli sentez de sunar. Vivado, geliştiricilerin tasarımlarını sentezlemesine, zamanlama analizini gerçekleştirmesine, RTL diyagramlarını incelemesine, tasarımlarını simüle etmesine ve hedef cihazı yapılandırılmasına olanak sağlar. Vivado, Xilinx FPGA ürünleri için bir tasarım ortamıdır ve bu tür yongaların mimarisine sıkı sıkıya bağlıdır ve diğer üreticilerin FPGA ürünleriyle kullanılamaz (Anonymous 2017b)

3.1.7 Arty A7-35T : Artix FPGA Geliştirme Platformu

Arty A7-35T, Xilinx firması tarafından Artix-7 FPGA’i kullanılarak tasarlanmış kullanıma hazır bir geliştirme platformdur. Yapılan çalışmada tasarlanan sanal işlemcinin gerçeklenmesi sırasında Arty A7-35T Geliştirme Platformu kullanılmıştır.

Şekil 3.12 Arty A7-35T FPGA Geliştirme Platformu

Şekil 3.12’de görseli bulunan Arty A7-35T Platformu,

 33.280 mantık hücresi

 450MHz frekansa kadar dahili saat

 Anolog/Sayısal Çevirgeç

(37)

26

 16 bit genişlik, 667 MHz frekans 256MB DDR3L RAM

 16MB Quad-SPI Flash Bellek

 USB-JTAG Programlama Devresi

 10/100 Mbps Ethernet Modulü

 4 Pmod Konnektörü

 Arduino/chipKIT Shield Konnektörü

 4 Anahtar, 5 Buton, 4 LED, 4 RGB LED donanım bileşenlerine sahiptir (Anonymous 2017c)

3.1.8 UART arabirimi

UART çift yönlü, seri, asenkron bir haberleşme protokolüdür. UART sistemlerde bir verici, bir alıcı ve iki hat bulunmaktadır. Temel olarak verici, gönderilecek olan verileri paralel olarak toplar, ardından bu verileri belirli bir hızda seri olarak gönderir. Alıcı ise seri olarak gelen verileri toplar. Sistem boştayken seri hat ‘1’ dir. Aktarım, ‘0’ olan bir başlangıç biti ile başlar, ardından veri bitleri ve isteğe bağlı bir eşlik biti gönderilir ve

‘1’ olan bitiş bitiyle sona erer (Chu 2008). Şekil 3.13’te başlangıç biti, veri bitleri, eşlik biti ve bitiş bitinden oluşan bit düzeni görülmektedir.

Şekil 3.13 UART arabirimi bit düzeni

Tasarlanan işlemcinin programlanması UART Arabirimi kullanılarak gerçekleştirilir.

(38)

27 3.2 Yöntem

Bu bölümde tasarlanan işlemcinin mimari ve işlevsel özelliklerinden bahsedilecektir. İlk olarak işlemcinin temel özellikleri kısa bir şekilde sunulacaktır. Daha sonra işlemcide kullanılan komutlar ve yapıları açıklamalarıyla gösterilecektir. Komutların açıklanmasından sonra ise işlevsel birimler tanıtılacak ve her birimin görevleri, bu görevleri nasıl yerine getirdiği açıklanacaktır. Son olarak bellek organizasyonu ve komut işleme düzeni hakkında bilgi verilecektir.

3.2.1 Tasarlanan işlemcinin temel özellikleri

Tasarlanan işlemci 8 adet veri giriş ve 8 adet veri çıkış, 1 adet kesme giriş ve 1 adet kesme çıkış, 1 adet saat, 1 adet reset ve 1 adet programlama girişi olmak üzere toplamda 12 adet giriş, 9 adet çıkış portu bulundurmaktadır. İşlemci 8 bit genişliğinde veri yoluna sahiptir. Literatürdeki diğer sanal işlemcilerin çoğundan farklı olarak tasarlanan işlemcide hafıza erişimi haricinde veri giriş çıkış portları ve kesme giriş çıkış portları olacaktır. Kullanılan FPGA platformu üzerindeki genel amaçlı giriş çıkış portu sayısı göz önüne alındığında işlemcinin 8 bit genişliğinde veri yoluna sahip olması uygun görülmüştür. İşlemci 40 adet komut içeren RISC yapıda komut setine sahiptir. Harvard hafıza mimarisinde olan işlemci 256 byte veri belleği ve 704 byte program belleği içermektedir. 16 adet genel amaçlı yazmaç ve Çok Döngülü komut işleme düzenine sahip olan işlemcinin gerçeklenmesi amacıyla Arty 7-35T FPGA Geliştirme Platformu kullanılmıştır.

3.2.2 Komut yapısı

Tasarlanan işlemcide 10 farklı komut yapısı bulunmaktadır ve tüm komutlar 22 bit genişliğindedir. İşlemcinin tüm komut yapılarında ilk 6 bit Opcode (Operation Code) için ayrılmıştır. 4 bit genişliğindeki kaynak yazmaçları genel amaçlı yazmaçların içeriğinin okunmasında, hedef yazmaçları ise genel amaçlı yazmaçların içeriğinin değiştirilmesinde kullanılmaktadır. Anlık değer ise veri belleği ya da fiziksel girişten

(39)

28

alınan değerdir. Bunun yanında komut yapısına bağlı olarak komut içerisinde kullanılmayan bitler bulunmaktadır. Şekil 3.14’de tasarlanan işlemcinin komut yapıları görülmektedir.

Opcode Hedef Yazmacı Kaynak Yazmacı-1 Kaynak Yazmacı-2 Kullanılmayan

6 bit 4 bit 4 bit 4 bit 4 bit

Opcode Hedef Yazmacı Kaynak Yazmacı Anlık Değer

6 bit 4 bit 4 bit 8 bit

Opcode Hedef Yazmacı Kaynak Yazmacı Kullanılmayan

6 bit 4 bit 4 bit 8 bit

Opcode Hedef Yazmacı Kullanılmayan Anlık Değer

6 bit 4 bit 4 bit 8 bit

Opcode Kullanılmayan Kaynak Yazmacı Anlık Değer

6 bit 4 bit 4 bit 8 bit

Opcode Kullanılmayan Kaynak Yazmacı-1 Kaynak Yazmacı-2 Kullanılmayan

6 bit 4 bit 4 bit 4 bit 4 bit

Opcode Kullanılmayan Anlık Değer

6 bit 8 bit 8 bit

Opcode Hedef Yazmacı Kullanılmayan

6 bit 4 bit 12 bit

Opcode Kullanılmayan Kaynak Yazmacı Kullanılmayan

6 bit 4 bit 4 bit 8 bit

Opcode Kullanılmayan

6 bit 16 bit

Şekil 3.14 Tasarlanan işlemcinin komut yapıları

3.2.3 Komut seti

Tasarlanan işlemcinin komut setinde aritmetik ve mantık, veri transferi, kaydırma ve döndürme, karşılaştırma ve dallanma gibi işlemleri yerine getirmekte olan 40 adet komut bulunmaktadır. Tasarlanan işlemcinin komutları gruplandırılarak ayrı ayrı

(40)

29

çizelgelerde verilmiştir. Çizelgelerde HY kısaltması hedef yazmacı, KY kısaltması kaynak yazmacı, KY-1 kısaltması birinci kaynak yazmacı, KY-2 kısaltması ikinci kaynak yazmacı temsil etmektedir. Bir adet kaynak yazmacı kullanılan komutlarda KY kısaltması, iki adet kaynak yazmacı kullanılan komutlarda ise KY-1, KY-2 kısaltmaları kullanılmıştır.

Çizelge 3.1’de aritmetik ve mantık işlemlerini gerçekleştirmek üzere kullanılan 15 adet komut görülmektedir. İşlemci 0 ile 256 doğal sayı aralığını destekler. Aritmetik ve mantık işlemler kaynak yazmacındaki değer ya da anlık değer ile yapılabilir.

Çizelge 3.1 Aritmetik ve Mantık işlem komutları Komut Opcode İşlem Açıklama AND 011001 HY =KY1 &

KY2

Mantıksal ve işlemi OR 011001 HY = KY1 | KY2 Mantıksal veya işlemi

XOR 011010 HY = KY1 ^

KY2

Mantıksal özel veya işlemi

ADD 011100 HY = KY1 +

KY2

İşaretsiz toplama işlemi SUB 011101 HY = KY1- KY2 İşaretsiz çıkarma işlemi

MUL 011110 HY = KY1 *

KY2

İşaretsiz çarpma işlemi DİV 011111 HY= KY1 / KY2 İşaretsiz bölme işlemi

ANDi 111000 HY= KY & A.D. Anlık değer ile mantıksal ve işlemi ORi 111001 HY = KY | A.D. Anlık değer ile mantıksal veya işlemi XORi 111010 HY = KY ^ A.D. Anlık değer ile mantıksal özel veya işlemi ADDi 111100 HY = KY + A.D. Anlık değer ile işaretsiz toplama işlemi SUBi 111101 HY = KY – A.D. Anlık değer ile işaretsiz çıkarma işlemi MULi 111110 HY = KY * A.D. Anlık değer ile işaretsiz çarpma işlemi DİVi 111111 HY = KY / A.D. Anlık değer ile işaretsiz bölme işlemi NOT 110000 HY = ~ KY Hedef yazmaca kaynak yazmacının tersinin

yazılması

(41)

30

Çizelge 3.2’de kaydırma ve döndürme komutları görülmektedir. İşlemci mantıksal kaydırma, aritmetik kaydırma ve dairesel kaydırma işlemlerini desteklemektedir. Birinci kaynak yazmacındaki değer anlık veri değeri kadar kaydırılarak hedef yazmaca aktarılır.

Çizelge 3.2 Kaydırma ve döndürme komutları

Komut Opcode İşlem Açıklama

SLL 110010 HY =KY << A.D. Anlık değer kadar sola mantıksal kaydırma SRL 110011 HY= KY >> A.D. Anlık değer kadar sağa mantıksal kaydırma SLA 110100 HY =KY << A.D. Anlık değer kadar sola aritmetik kaydırma SRA 110101 HY= KY >> A.D. Anlık değer kadar sağa aritmetik kaydırma SLC 110110 HY = KY <<

A.D.

Anlık değer kadar sola dairesel kaydırma SRC 110111 HY = KY >>

A.D.

Anlık değer kadar sağa dairesel kaydırma

Çizelge 3.3’te veri transfer komutları görülmektedir. MOV ve MOVi komutları hedef yazmaca kaynak yazmaçtaki değeri ya da anlık değeri aktarmak için kullanılır. LOAD ve STR komutları hafıza erişim komutlarıdır. Birinci kaynak yazmacındaki değeri hafızada istenen adrese aktarmayı ya da hafızada belirli bir adresteki değeri hedef yazmaca aktarmayı sağlarlar. IN ve OUT komutları ise giriş portlarından veri alınmasını ya da yazmaçtaki verinin çıkış portlarına aktarılması amacıyla kullanılır.

Çizelge 3.3 Veri transfer komutları

Komut Opcode İşlem Açıklama

MOV 110001 HY = KY Hedef yazmaca kaynak yazmacının içeriği aktarılır

MOVi 101000 HY = Anlık Değer Kaynak yazmaca anlık değer aktarılır LOAD 100000 HY = Mem[A.D.] Hedef yazmaca hafızanın anlık değer ile

belirlenen adresinin içeriği aktarılır

STR 101111 Mem[A.D.] = KY Hafızanın anlık değer ile belirlenen adresine kaynak yazmacının içeriği aktarılır

IN 100010 HY = Input Hedef yazmaca giriş portundaki değer aktarılır

OUT 010001 Output = KY Çıkış portuna kaynak yazmacının değeri aktarılır

(42)

31

Çizelge 3.4’te karşılaştırma ve dallanma komutları görülmektedir. CMP komutu kaynak yazmaçlarındaki değerleri karşılaştırarak bayrak durumlarını günceller. Koşullu dallanma komutları bu bayrak durumlarına bağlı olarak dallanma işlemini gerçekleştirir.

Dallanma komutlarından JMP ve CALL koşulsuz dallanma gerçekleştirirler. CALL komutu JMP komutundan farklı olarak dallanmayla birlikte bir sonraki komutun adresini yazmaçta tutar. RET komutuyla birlikte tutulan bu adrese geri dönülebilir.

Çizelge 3.4 Karşılaştırma ve dallanma komutları

Komut Opcode İşlem Açıklama

CMP 010000

KY1 = KY2 ise

Karşılaştırma Bayrağı(1) = ‘1’

KY1 < KY2 ise

Karşılaştırma Bayrağı(0) = ‘1’

KY > KY2 ise

Karşılaştırma Bayrağı(2) = ‘1’

Kaynak yazmaçlarındaki değerler karşılaştırılarak karşılaştırma bayrağı güncellenir.

JMP 001000 Program Sayacı = Anlık Değer Koşulsuz dallanma JE 001001 Karşılaştırma Bayrağı(1) = ‘1’ise

Program Sayacı = Anlık Değer

Koşullu dallanma

JNE 001010 Karşılaştırma Bayrağı(1) = ‘0’ise Program Sayacı = Anlık Değer

Koşullu dallanma

JG 001011 Karşılaştırma Bayrağı(2) = ‘1’ise Program Sayacı = Anlık Değer

Koşullu dallanma

JL 001100 Karşılaştırma Bayrağı(0) = ‘1’ise Program Sayacı = Anlık Değer

Koşullu dallanma

JGE 001101 Karşılaştırma Bayrağı(1) = ‘1’ise veya

Karşılaştırma Bayrağı(2) = ‘1’ise Program Sayacı = Anlık Değer

Koşullu dallanma

JLE 001110 Karşılaştırma Bayrağı(1) = ‘1’ise veya

Karşılaştırma Bayrağı(0) = ‘1’ise Program Sayacı = Anlık Değer

Koşullu dallanma

CALL 001111 Program Sayacı = Anlık Değer P.S_Ret = Program Sayacı+1

Koşulsuz dallanma

RET 000000 Program Sayacı = P.S_Ret Koşullu dallanma NOP 000010 Program Sayacı = Program Sayacı+1 İşlem yok

Referanslar

Benzer Belgeler

An embedded test program code using MPLAB is also developed, and then loaded into the designed microcontroller residing in the FPGA.. In order to perform a

Kod yazarken sıklıkla kullanılan koşul belirteçleri, duruma bağlı olarak işlemler yapmamıza olanak sağlar.. şeklinde uzunca bir komut kullanmak hem zamanımızı

Diğer bir deyişle, daha az sayıda ve basit yapıya sahip komutlar kullanan işlemci, karmaşık komut seti kullanan işlemciye göre daha hızlı çalışır.. RISC

 Erişim Zamanı: rastgele erişimli bellekler için okuma veya yazma işlemini gerçekleştirmek için gerekli zamandır; bu zaman, bellekte erişilecek adresin adres

Meterpreter, tamamen istismar edilen hedef işlemin (process) içinde yani hafızada çalışabilen, hedef sistemin diski ile herhangi bir etkileşimde bulunmadığı için de

A6IPM10 10”TFT dokunmatik ekran Android işletim sistemi IPS kapasitif çoklu dokunuş RF, KNX, Cloud akıllı ev kontrolü Wi-Fi kontrol Daireler arası sesli görüşme Daireler

Anahtarlama prensibi Ağır çekim anahtarlama elemanı Tetiklendiği için kapalı kontak sayısı 2. Normalde açık kontak

Bu çalışma sonraki yıllarda, McKee ve Barson kullanmış oluşturdukları robotik laboratuarını paylaşıma açmak ve uzaktan erişim sağlayabilmek amacıyla