You are on page 1of 7

VHDL ile Mikroişlemci Tasarımı ve Eğitimde Uygulanabilirliği

Deniz TAŞKIN1, Kenan BAYSAL2, Nurşen TOPÇUBAŞI3


1,2
Trakya Üniversitesi, Bilgisayar Mühendislği Bölümü, Edirne
3 Okan Üniversitesi, İstanbul
deniztaskin@trakya.edu.tr, kenanbaysal59@gmail.com,
nursen@trakya.edu.tr

Özet: Günlük hayatta kullandığımız neredeyse her elektronik cihazda sistemin çalışmasını
kontrol eden ve işlemleri sonuçlandıran bir mikroişlemci bulunmaktadır. Yarı iletkenlerden
meydana gelen transistörler mikroişlemciyi oluşturan temel elektronik devre elemanıdır. Bazı
mikroişlemcilerde transistör sayısı milyarlara ulaşmaktadır. Mühendislik açısından bu koşullar
mikroişlemcinin tasarımı ve bu konuda eğitim vermeyi zorlaştırmaktadır.
Bu çalışmanın amacı VHDL dili kullanılarak bir mikroişlemci tasarımının basite indirgenmesi
ve eğitimi alanında sağladığı kolaylıkları göstermektir.

Anahtar Kelimeler: Mikroişlemci tasarımı, VHDL, Aritmetik Lojik Ünite

Designing Microprocessor with VHDL and Applicability in Education

Abstract: Almost every electronic device that we use in daily life has a microprocessor that
controls working of system and results the procedures. Transistors, consisting of
semiconductors, are basic electronic circuit devices that compose the microprocessors. In some
microprocessors, transistors could reach billions. In terms of engineering designing a
microprocessor is too much hard and is too hard to educate on this subject.

The aim of this study is to show, how to simplify a microprocessor design and to provide the
facilities in education area.

Keywords: Microprocessor design, VHDL, Arithmetic Logic Unit

1. Giriş bağlantılarının öncelikle kağıt üzerinde


Bir mikroişlemci farklı görevler icra eden bir tasarlandığı görülmektedir. Ardından bu
dizi birimden meydana gelmektedir. Her devreler şekil 1’de de görüldüğü gibi kartlar
birimin giriş ve çıkışlarına göre bir davranışı üzerinde entegrelerin kablolar ile
mevcuttur. Bu davranışları oluşturan yine bu birleştirilmesi sonucunda oluşturulmaktadır.
birimlerin içinde bir dizi elektronik devredir. “Agnus ve Defne Dizileri” olarak adlandırılan
bu prototipler istenilen işlemleri başarılı bir
Bir mikroişlemciyi tasarlamak için elektronik şekilde gerçekleştirdiğinde tasarı, üretim
konusunda bilgili ve tecrübeli olmanın aşamasına gelmektedir. Bir hata ile
dışında yeteneğe de sahip olmak gereklidir. karşılaşılması durumunda ise tasarım en
Örnek olarak Amiga ait grafik işlemcisinin baştan incelenmesi ve gerekirse sıfırdan
tasarım aşamaları ele alındığında, ilk tekrar oluşturulması gerekmektedir. Bu da
prototipin genel yapısının ve devre zaman ve para kaybının yanı sıra işlemci
tasarımı yapacak veya mevcut tasarım 2.1 Lojik Olarak 16 Bit ALU Tasarımı
üzerinde geliştirme yapabilecek mühendis
Şekil 2’de görüldüğü gibi ALU’ya ait yazma
yetiştirmeyi zorlaştırmaktadır.
girişi(load) 1 bit, işlem seçim girişi 3 bit, giriş
VHDL donanım dili sayesinde sadece
birimlerin davranış biçimlerini tanımlayarak
işlemci birimleri oluşturulabilmektedir.
Günümüzde mikroişlemci temel bilgisine
sahip bir öğrenci temel bir mikroişlemciyi
VHDL kullanarak tasarlayabilmektedir. Her
birim birbirinden bağımsız parçalar
biçiminde tasarlanarak sonradan
birleştirilebilmektedir.

Şekil 2. ALU’nin komşu birimlerle bağlantısı

yazacı (input register) girişi 8bit, veri yazacı


girişi (data register) 16 bit ve akümülatör
Şekil 1. Agnus ve Defne Dizileri (AC) girişi ise 16 bittir.

VHDL ile yapılan bir tasarımın basitliği ve Burada bulunan 3 bitlik işlem seçim uçları ve
anlaşılabilirliği, mikroişlemcinin temel birimi Load ucu doğrudan işlemcinin kontrol
olan Aritmetik Lojik Ünitenin tasarımı birimine bağlıdır. Tek veri çıkışı ise doğrudan
incelenerek görülebilir. Akümülatöre bağlıdır, E çıkışı ise yapılan
aritmetik işlem sonucunda oluşan elde bitini
E bayrağına aktarır. Tablo 1’de belirtilen
2. 16 Bitlik Aritmetik Lojik Ünite Tasarımı
sekiz adet işlem 16 bitlik ALU devresinin her
bir biti için ayrı ayrı gerçekleştirilmiştir
Devresi çıkartılacak 16 bitlik ALU’nun
gerçekleştireceği işlemler ve işlemlerin seçim LD girişi aktif edildiğinde; AC aktar, AND,
kodları Tablo 1’de, ALU’ya bağlı birimler ADD, CMP, DR aktarma, INPR aktar, SHR
Şekil 2’de gösterilmiştir. veya SHL işlem girişlerinden aktif edilene ait
edilen sonucu JK tipi yaz-boza aktarmaktadır.
Yaz-boz, sonuca ait 1 bitlik değeri bir saat
vuruşu süresince korumaktadır. Şekil 3’te gösterilen Aritmetik Lojik Ünitenin
1 bit düzeyinde işlem yapan bu birimler 1 bitinin lojik devresinin Şekil 4’te
birleştirilerek 16 bitlik ALU elde gösterildiği gibi 16 adet ardışık olarak
edilmektedir. Şekil 4’te ALU’nun içersinde bağlanmasıyla elde edilmektedir. Bunun
her bir bitin blok olarak nasıl bağlandığı sadece 16 bitlik bir işlemcinin Aritmetik
gösterilmiştir. Lojik Ünitesi olduğu göz önüne alınırsa, 32
bit ve 64 bitlik işlemcilerin kullanıldığı
günümüz teknolojisinde, bu şekilde bir
tasarımın gerçekleştirilmesi ve benzetiminin
yapılması oldukça güçtür.

Şekil 3. Akümülatöre ait 1 bitlik devre

Tablo 1. ALU işlemleri ve seçim kodları

İşlem Açıklama
Seçim
000 AC’ü çıkışa aktar
001 AC AND DR
010 AC + DR
011 DR’i, AC’ye aktar
100 NOT AC
101 INPUT Reg.’i AC’ye
aktar
110 AC’yi bir sağa kaydır
111 AC’yi bir sola kaydır

VHDL kullanılmadan her bitin tek tek lojik


kapılar kullanılarak yapılması gerekirse;
prototipin Agnus ve Defne dizileri gibi
karmaşık devreler kurularak denenmesi
gerekmektedir. Oluşturulacak prototip devresi
Şekil 4. ALU’ya ait tüm bitlerinin birbirine
bağlanması

2.2 VHDL ile 16 Bit ALU Tasarımı


Öncelikle giriş ve çıkış portlarının
tanımlandığı, bir tanımlama işlemi yapılır.
Tablo 2’de VHDL programında giriş ve
çıkışlara atanan isim kısaltma listesi ve bit
uzunlukları verilmiştir.

Entity kalıbıyla oluşturulacak yapının ismi


05 entity alu is port (
belirtilerek port tanımlama işlemi 06 sec : in std_logic_vector(2 downto 0);
gerçekleştirilir. Sec, ac, dr ve inp portları 07
08
ac
dr
: in std_logic_vector(15 downto 0);
: in std_logic_vector(15 downto 0);
vektör olarak tanımlanmıştır. Birden fazla 09 inp : in std_logic_vector(7 downto 0);
10 ld : in std_logic;
giriş çıkışı olan portlar vektör olarak 11 alu_cikis :out std_logic_vector(15 downto
tanımlanmaktadır. Yüksek değerlikli bit 12
0);
e :out std_logic);
tanımı parantez içinde yapılır. Örneğin 7. 13 end alu;

Bitin yüksek değerlikli bit olmasını Şekil 5. Giriş Çıkış portlarının VHDL ile
isteniyorsa “7 downto 0” veya tersi durumda tanımlanması
“0 to 7” şeklinde tanımı yapılmaktadır.
Aritmetik ve Lojik Ünitenin gerçekleştirmesi
Tablo 2. Giriş Çıkış portları istenilen 8 işlemin davranışları “architecture”
yapısı altında tanımlanır. “signal” olarak
tanımlanan 17 bitlik “elde” dizisi, ALU
Bit Uzunluğu

içinde her bitin taşma ucunu bir sonraki bite


Açıklama
Kısaltma

taşıma işlemini yapmaktadır. 17. Biti ise “e”


G/Ç

elde çıkışına aktarmaktadır. Process altında


tanımlanan “temp” değişkeni geçici veri
bilgisini tutmakla görevlidir. Process
İşlem seçme başlangıcından sonra 17 bitlik “elde” birimi
sec Giriş 3 bit girişleri sıfırlanır. ld=’1’ şartı sağlandığında işlem
seçme giriş uçlarının 000-111 arasında aldığı
Akümülatör değerlere göre işlem gerçekleşir
ac Giriş 16 bit veri girişi
16 bitlik bir işlemcinin 8 işlem gerçekleştiren
Data Register
Aritmetik Lojik Ünitesi VHDL dilinde
dr Giriş 16 bit veri girişi
kodları Şekil 6 ve şekil 7’de görülmektedir.
Input Register Bu yöntem ile mühendisin görevi sadece
inp Giriş 8 bit veri girişi birimlerin ne iş yapacağına karar vermek ve
bunları basit sayılabilecek bir programlama
Load girişi dilinde tanıtmasıdır.
ld Giriş 1 bit
ALU veri çıkışı
alu_cikis Çıkış 16 bit
Elde biti
e Çıkış 1 bit
14 architecture yapi of alu is
15 signal elde: std_logic_vector(16
Şekil 6. ALU VHDL kod yapısı -1 downto 0);
16 begin
30 -------AC+DR------------ 17 alu_islem : process(ld,elde)
if sec = "010" then 18 variable temp :
- std_logic_vector(15 downto
31 toplayici: for i in 15 downto 0 0);
loop 19 begin
32 elde(i+1) <= (ac(i) and dr(i)) 20 elde <= "00000000000000000";
or (elde(i) and (ac(i) xor dr(i))); 21 if ld = '1' then
33 alu_cikis(i) <= ac(i) xor dr(i) 22 -----AC’yi Aktar-------
xor elde(i); if sec = "000" then
34 end loop toplayici; 23 temp := ac;
35 e <= elde(16); 24 alu_cikis <= temp;
36 end if; 25 end if;
37 -------DR’yi aktar------- 26 -------AC and DR--------
if sec = "011" then if sec = "001" then
38 temp := dr; 27 temp:= ac and dr;
39 alu_cikis <= temp; 28 alu_cikis <= temp;
40 end if; 29 end if;
41 -----AC’yi Tersle--------
if sec = "100" then yapılacak ufak değişiklikler ile
42
43
temp := not ac;
alu_cikis <= temp;
giderilebilmektedir.
44 end if;
45 ----INP AC’ye aktar------- … …
if sec = "101" then 05 entity cpu is port(
46 alu_cikis(7 downto 0)<= inp; 06 signal alu_sec: in std_logic_vector(2
47 alu_cikis(15 downto 8)<= X"00"; downto 0);
48 end if; 07 signal alu_a : in std_logic_vector(15
49 --Sağa Kaydır------------- downto 0);
if sec = "110" then 08 signal alu_d : in std_logic_vector(15
50 temp := ac; downto 0);
51 alu_cikis(15)<= temp(0); 09 signal alu_out : out std_logic_vector(15
52 for i in 15 downto 1 loop downto 0);
53 alu_cikis(i-1)<= temp(i); 10 signal alu_e : out std_logic;
54 end loop; 11 signal input : in std_logic_vector(7
55 --Sola Kaydır------------- downto 0);
if sec = "111" then … …
56 temp := ac; 35 );
57 alu_cikis(0)<= temp(15); 36 end cpu;
58 for i in 0 to 14 loop … ……
59 alu_cikis(i+1)<= temp(i); 59 component alu port(
60 end loop; 60 sec : in std_logic_vector(2 downto 0);
61 end if; 61 ac : in std_logic_vector(15 downto 0);
62 end if; 62 dr : in std_logic_vector(15 downto 0);
63 end process alu_islem; 63 inp : in std_logic_vector(7 downto 0);
64 end yapi; 64 ld : in std_logic;
65 alu_cikis :out std_logic_vector(15 downto
0);
Şekil 7. ALU VHDL kod yapısı -2 66 e :out std_logic);
67 end component;
… …
Tasarlanan Aritmetik Lojik Ünitenin diğer … …
birimler ile bağlanması yine VHDL kod …
117

architecture yapi of cpu is
yapısı ile mümkündür. Tasarlanan birimler 118 Begin
119 u3: alu port map(
component anahtar sözcüğü ile bileşen haline 120 sec=>alu_sec,
getirilirler. Bileşenler birbirlerine 121
122
ac=>alu_a,
dr=>alu_d,
bağlanabilmekte ve daha büyük bir birim 123 inp=>input,
124 alu_cikis=>alu_out,
oluşturmak için birleşebilmektedirler. Şekil 125 e=>alu_e);
8’de bileşen tanımları ve portların birbirine …



bağlanması görülmektedir. 299 end yapi;

VHDL ile tasarımın sağladığı en önemli


yenilik, yapılan çalışmaya ait benzetim Şekil 8. 16 bit işlemci bileşen tanımlama ve
işlemlerinin donanımın devreye portların birbirine bağlanması
dönüştürülmeden önce yapılabilmesidir. Bu
sayede tasarımda yapılmış olan hatalar Şekil 9’da Modelsim programı ile yapılan 16
üretimden önce görülebilmekte ve kodda bit ALU devresinin benzetim sonuçları
verilmiştir.

Bu benzetimde Akümülatör girişine veri


girişi olarak “1101110111011101” değeri,
Data yazacı girişine “1011101110111011”
değerleri verilmiştir. Sırasıyla işlem seçim
girişlerine göre bu değerler arasındaki işlem
sonuçları ALU çıkışında görülmektedir.

Benzer biçimde Akümülatör ve Data register


birimlerinin davranış tanımlamaları ayrı birer
dosya üzerinden yapılabilir. Örneğin
akümülatör için 16 bit çıkış ve 16 bit giriş
Şekil 9. 16 bit Aritmetik Lojik Ünite ModelSim benzetim sonuçları

portları tanımlanır. Bunlarla beraber birer ders içeriğine dahil edilebilir. Öğrenci,
adet “Yaz”, “Sil”, “Arttır” tek bit giriş uçları mevcut bir işlemcinin tasarımını
tanımlanır. Yaz=’1’ olması durumunda geliştirebileceği gibi aynı zamanda yeni bir
işlenecek process, 16 bitlik girişin mikroişlemciyi en baştan tasarlayacak
akümülatörün içeriğine aktarılması olarak seviyeye ulaşabilir.
tanımlanır. Buna benzer şekilde Sil=’1’
durumunda akümülatörün içeriğinin
4. Kaynaklar
temizlenmesi, Arttır=’1’ durumunun
akümülatörün içeriğinin bir arttırılması olarak
tanımlanır. Sil, Arttır ve Yaz uçlarının hangi [1]
durumlarda ‘1’ olacağı işlemcinin kontrol http://www.amigahistory.co.uk/amigahist
ory. html
biriminde tanımlanır. İşlemcinin diğer bütün
birimleri buna benzer şekilde tanımlandıktan [2] M. Morris Mano, “Computer
sonra ‘component’ tanımlaması ile birimler System Architecture”, (1993).
birbirine bağlanır.
[3] Enoch O. Hwang, “Digital and Logic
3. Sonuç Microprocessor Design With VHDL”,
La Sierra University, Riverside, (2005).
Geçmişte işlemci tasarımının en sorunlu
aşaması olan prototip üretiminin VHDL ile [4] Jayaram Bhasker, “A VHDL Primer,
basit bir hale geldiği, örneklenen 16 bit American Telephone and Telgraph
Aritmetik Lojik Ünite devresinde açık olarak Company Bell Laboratories Division”,
görülmektedir. VHDL dili ile mikroişlemci (1991).
tasarımı; Algoritma ve programlama bilgisi
olan ve temel mikroişlemci mimarisi bilgisine
sahip bir öğrencinin anlayabileceği seviyede

You might also like