• Sonuç bulunamadı

Föy Kitapçıg ı O NDOKUZ M AYIS Ü N I VERS I TES I B I LG I SAYAR M ÜHEND I SL I G I B ÖLÜMÜ S AYISAL TASARIM L ABORATUVARI

N/A
N/A
Protected

Academic year: 2022

Share "Föy Kitapçıg ı O NDOKUZ M AYIS Ü N I VERS I TES I B I LG I SAYAR M ÜHEND I SL I G I B ÖLÜMÜ S AYISAL TASARIM L ABORATUVARI"

Copied!
60
0
0

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

Tam metin

(1)

O NDOKUZ M AYIS Ü N˙IVERS˙ITES˙I

B ˙ILG˙ISAYAR M ÜHEND˙ISL˙I ˘ G˙I B ÖLÜMÜ

S AYISAL T ASARIM L ABORATUVARI

Föy Kitapçı˘gı

Düzenleyenler:

Doç. Dr. Erdal KILIÇ Erdem ALKIM

12 ¸Subat 2013

(2)
(3)

Sayısal Tasarım Laboratuvar Föyü

Giri¸s

Bu dökuman Altera DE2-115 serisi FPGA geli¸stirme kitleri için hazırlanmı¸s oniki deneyden olu¸smaktadır. Bu deneyler ö˘grencilerin Sayısal Devreler ve Mantıksal Tasarım" dersini daha iyi anlayabilmeleri için ders müfreda- tına göre olu¸sturulmu¸stur.

Deneyler Altera’nın Quartus II yazılımı kullanılarak gerçeklenmektedir. Bu yazılımın kullanımının anlatılması dersin müfredatı içinde bulunmamaktadır. Laboratuvara ait internet sitesinde DE2 geli¸stirma kitleri için Verilog HDL ile olu¸sturulmu¸s basit bir devrenin Quartus II yazılımında nasıl derlenece˘gini ve karta yüklenece˘gini an- latan bir doküman bulunmaktadır. Ö˘grenciler laboratuvara gelmeden önce Quartus II yazılımını edinmeli ve bu dokümanları inceleyip uygulamalıdırlar.

Ayrıca deney kartları ve yazılımlar hakkında birçok ingilizce dokümana Altera’nın sitesinde University Prog- ramsayfasında Educational Materials linkinden ula¸sılabilir.

Deneyler Hakkında

Deneyler DE2 geli¸stirme kitlerinin üzerindeki anahtarları kullanarak ledlerin yada 7-segment göstergelerin kontrol edilmesi gibi basit uygulamalarla ba¸slamaktadır. Bu, ö˘grencilerin geli¸stirme kitini daha iyi tanımasını sa˘glayarak, aritmetik devreler, flip-floplar, sayaçlar, durum makineleri, hafıza birimleri ve basit i¸slemci gibi daha karma¸sık tasarımları gerçeklemek için nasıl kullanacaklarını ö˘gretir.

Her deney birden çok uygulama içermektedir. Ço˘gu zaman bir önceki uygulamada olu¸sturuln devre bir sonra- kinde kullanılmaktadır. Bu yapı ö˘grencilerin karma¸sık devreleri küçük görevlere bölerek adım adım gerçekleme- sini sa˘glamak amacıyla kullanılmı¸stır.

(4)
(5)

˙Içindekiler

Lab1: Anahtarlar, Ledler, Multiplexerlar . . . 1

Lab2: Rakamlar ve Göstergeler . . . 9

Lab3: Mandallar, Flip-floplar, Kaydediciler . . . 15

Lab4: Sayaçlar . . . 21

Lab5: Zamanlayıcılar ve Gerçek Zamanlı Saat . . . 23

Lab6: Toplayıcı, Çıkarıcı ve Çarpıcılar . . . 27

Lab7: Sonlu Durum Makinesi . . . 33

Lab8: Hafıza Birimleri . . . 39

Lab9: Basit ˙I¸slemci I . . . 43

Lab10: Basit ˙I¸slemci II . . . 51

(6)
(7)

Laboratuvar Çalı¸sması 1

Anahtarlar, Ledler ve Multiplexerlar

Bu çalı¸smanın amacı, FPGA yongalarının giri¸s çıkı¸slarını yönetmek ve devreleri bu gürü¸s çıkı¸slara nasıl ba˘g- layaca˘gımızı ö˘grenmektir. Bu çalı¸smada anahtarları (SW17−0) giri¸s olarak, ledleri ve 7-segment göstergeleri çıkı¸s olarak kullanaca˘gız.

Uygulama I

DE2 serisi kartlar herhengi bir devreye giri¸s olarak kullanılabilinecek 18 tane anahtar (SW17−0) içerirler. Bunun yanında devrenin çıkı¸slarını görmek için kullanılabilinecek 18 tanede led (LEDR17−0) barındırırlar. Anahtarların durumlarını ledler ile gösteren bir Verilog Modülü ¸Sekil 3 te gösterilmi¸stir. 18 seçici ve led olmasına ra˘gmen Verilogda bunları tek bir vektör ile gösterebiliriz. Bununla birlikte bütün ledlere ayrı ayrı atamalarda yapabiliriz.

assign LEDR[17] = SW[17];

assign LEDR[16] = SW[16];

. . .

assign LEDR[0] = SW[0];

DE2 serisi kartların üstündeki anahtar ve ledleri kullanmak için de˘gi¸sken tanımlamak yeterli de˘gildir. Tanımla- dı˘gımız de˘gi¸skenleri FPGA’in DE2-series User Manual da verilen do˘gru pinlerine ba˘glamamız gerekir. Örnek olarak kullandı˘gımız DE2-115 modelinde SW0 de˘gi¸skenini FPGA’in AB28 ve LEDR0 de˘gi¸skenini ise FPGA’de G19 pinine ba˘glamamız gerekmektedir. Do˘gru pin ataması yapmanın en güvenilir yolu Quartus II yazılımına DE2_115_pin_assignments.qsfdosyasını import etmektir. Böylece verilog kodunda LEDR0 de˘gi¸skenini kullan- dı˘gımızda otomatik olarak G19 pinine ba˘glanır. Quartus II programına pin_assignments dosyasını import etmek için;Import Assignments’a tıklandıktan sonra açılan ¸Sekil 1’deki pencereden Advanced... butonuna tıklanır, açılan ¸Sekil 2’deki pencereden ise Global assignments kutusu i¸saretlenip OK butonuyla kapatılır.

¸Sekil 1: DE2-115 Import Assignments Penceresi.

Burada önemli olan .qsf dosyasının kullanılması sadece pin isimlerinin verilog modülündeki portlarla tam olarak aynı olmasıyla yararlı olur. Bu yüzden ¸Sekil 3’te oldu˘gu gibi kolarımızda hep büyük harflerle kullanaca˘gız.

¸Sekil 3’teki kodu FPGA kartında uygulamak için a¸sa˘gıdaki adımları izleyin:

(8)

¸Sekil 2: DE2-115 Advanced Import Settings Penceresi.

// Ledlerle anahtarların ba˘glandı˘gı basit bir modül module part1 (SW, LEDR);

input [17:0] SW; // Anahtarlar output [17:0] LEDR; // Kırmızı Ledler assign LEDR = SW;

endmodule

¸Sekil 3: Ledlerin ve anahtarların kullanıldı˘gı verilog kodu

1. eni bir Quartus II projesi olu¸sturun. Cyclone IV EP4CE115F29C7 FPGA yongasını seçin.

2. ¸Sekil 3’teki kod için verilog modülü olu¸sturun ve projenize ekleyin.

3. Projenize pin assignments dosyasını ekleyin ve derleyin.

4. Derlenmi¸s devreyi FPGA yongasına yükleyin ve seçicilerin konumunu de˘gi¸stirerek ledleri kontrol edin.

Uygulama II

¸Sekil 4a s seçici ucuna sahip, 2x1’lik bir multiplexerı çarpımlar toplamı olarak göstermektedir. E˘ger s = 0 ise multiplexerın çıkı¸sı (m) x giri¸sine e¸sittir. E˘ger s = 1 ise çıkı¸s y giri¸sine e¸sit olacaktır. b ¸seklinde multiplexerın do˘gruluk tablosu c ¸seklinde ise devre sembolü gösterilmi¸stir.

(9)

x

s y

0 1

x s

y

m

m

s m

0

1 x

y

a) Circuit

b) Truth table c) Symbol

¸Sekil 4: 2x1’lik multiplexer.

Bir multiplexer verilog kodunda a¸sa˘gıdaki gibi tanımlanır.

assign m = (∼s & x) | (s & y);

Bu kodu kullanarak 8 atamadan olu¸san ¸sekil 5a’daki gibi bir devrenin verilog modülü olu¸sturun. Devre iki 8-bitlik giri¸si ve bir 8-bitlik çıkı¸sa sahip, ve e˘ger s = 0 ise M = X, s = 1 ise M = Y ¸seklinde çalı¸smaktadır.

¸Sekil 5b’de olu¸sturaca˘gımız 8-bitlik multiplexerin devre sembolü gösterilmi¸stir. Bu modülü olu¸stururken a¸sa˘gıdaki adımları izleyin.

0 1

s

a) Circuit b) Symbol

0 1

0

1 m0

m6 m7

x6

x0 y6

y0 y7 x7

0 1

s

M Y

X 8

8

8

¸Sekil 5: 8-bit 2x1’lik multiplexer.

(10)

1. Quartus II programında devreniz için yeni bir proje olu¸sturun.

2. Olu¸sturdu˘gunuz 8-bitlik multiplexer verilog kodunu projeye ekleyin. Burada X yerine SW7−0 , Y için SW15−8 ve s giri¸si içinde SW17 anahtarlarını atayın. Bu anahtarları aynı sıradaki kırmızı ledlere (LEDR) ba˘glayın ve son olarak M çıkı¸sını ye¸sil ledlere (LEDG7−0) ba˘glayın.

3. Projenize pin assignments dosyasını ekleyin.

4. Projeyi derleyin.

5. Derlenmi¸s projeyi FPGA kartına yükleyin ve devrenin i¸slevlerini kontrol edin.

Uygulama III

Uygulama II’de 2x1’lik multiplexer uygulaması gösterilmi¸sti. Ancak multiplexerlar ikiden fazla sayıda giri¸se sa- hip olabilmektedir. ¸Sekil 6’da 2x1’lik multiplexerler yardımıyla nasıl 5x1’lik bir multiplexer olu¸sturabilece˘giniz gösterilmi¸stir. Devre 3-bitlik seçici uç kullanmaktadır(s2s1s0). Daha önce 2x1’lik multiplexerda 8-bitlik de˘gi¸s- kenler kullanmı¸stık, ¸Sekil 7’de 5x1’lik multiplexerda 3-bitlik de˘gi¸skenlerin kullanıldı˘gı bir örnek gösterilmi¸stir.

Uygulama II’de yaptı˘gımız gibi bu devreyide ¸Sekil 6a’daki devrenin kombinasyonu ¸seklinde olu¸sturmanız gerek- mektedir.

0 1

a) Circuit

0 1

0 1

w x v u

000

m

0 1

s1 s2

s0

y

m

001 010 011 100

s1 s2

s0

w x v u

y

c) Symbol m

0 0

u v

b) Truth table s1s0 s2

0 0 0 1 0 0

w x 1 0 1 1 1 0 0 y 1

1 0 1 1 0 1 1 1

y y y

¸Sekil 6. 5x1’lik multiplexer.

(11)

000 001 M

010 011 100

s1 s2

s0

W X V U

Y

3

3

3 3

3

3

¸Sekil 7. 3-bit 5x1’lik multiplexer.

Bunun için a¸sa˘gıdaki adımları izleyin:

1. Devreniz için bir Quartus II projesi olu¸sturun.

2. Verilogda 3-bitlik de˘gi¸skenlerin kullanıldı˘gı bir 5x1’lik multiplexer modülü olu¸sturun ve seçme ucu SW17−15, di˘ger be¸s giri¸side SW14−0uçlarına ba˘glayın, Anahtarların durumlarını görmek için kırmızı ledleri ve devre- nin çıkı¸sını görmek için ise ye¸sil ledleri kullanın.

3. Projenize pin assignment dosyasını ekleyerek derleyin.

4. Derledi˘giniz dosyayı FPGA kartına yükleyip devrenizin do˘gru çalı¸sıp çalı¸smadı˘gını test edin.

Uygulama IV

¸Sekil 8’de 3-bit giri¸sli (c2c1c0) bir 7-segment dekoder gösterilmi¸stir. Dekoder 7-segment göstergeyi sürmek üzere 7 çıkı¸sa sahiptir. Tablo 1’de giri¸sin kombinasyonlarına göre göstergede gösterilmesi gereken harfler verilmi¸stir.(

100 − 111 arasındaki giri¸sler bo¸s olarak ayarlanmalıdır.) 7-segment göstergeler ¸sekil 8’deki gibi 0-6 indisleriyle tanımlanır. Yazaca˘gınız verilog modülünde verilen harfler için gerekli olan lojic fonksiyonlarını içermelidir. Ko- dunuzda boolean i¸slemleri gerçeklemek için sadece basit assign kodunu kullanmalısınız.

7-segment

0 1

2 3 4

5 6

decoder c2

c1 c0

¸Sekil 8. 7-segment çözücü.

(12)

c2c1c0 Karakter

000 H

001 E

010 L

011 O

100 101 110 111

Tablo 1. Karakter Kodları.

A¸sa˘gıdaki adımları takip edin:

1. Devreniz için yeni bir Quartus II projesi olu¸sturun.

2. 7-segment dekoderi yazaca˘gınız verilog dosyasını olu¸sturun. Giri¸sleri SW2−0’a ba˘glayın ve çıkı¸sı HEX06−0’a ba˘glamanız gerekmektedir. 7-segment göstergeyi modülünüze çıkı¸s olarak verebilmeniz için çıkı¸sı a¸sa˘gıdaki

¸sekilde tanımlamalısınız.

output [0:6] HEX0;

3. pin assignment dosyasını projenize ekledikten sonra projenizi derleyin.

4. Derledi˘giniz projeyi FPGA kartına yükleyip anahtarları de˘gi¸stirerek 7- segment göstergeyi test edin.

Uygulama V

Uygulama III ve Uygulama IV’de olu¸sturdu˘gunuz modülleri ¸Sekil 9’daki devreyi olu¸sturacak ¸sekilde birle¸stirerek yeni bir devre olu¸sturmalısınız. Olu¸sturmanız gereken verilog kodunun iskelet yapısı ¸Sekil 10’da verilmi¸stir. Daha sonra kodunuzu tablo 2’deki gibi “HELLO” kelimesini gösterecek ve giri¸sin durumuna göre kaydırabilecek ¸sekilde düzenlemelsiniz.

7-segment decoder

000 001 010 011 100 3

3

3 3

3

3

SW17 SW16 SW15 SW1412 SW119 SW86 SW53 SW20

7

0 1

2 3 4

5 6

¸Sekil 9. Be¸s karakterden birini seçip gösteren devre.

(13)

module part5 (SW, HEX0);

input [17:0] SW; // anahtarlar output [0:6] HEX0; // 7-seg göstergeler wire [2:0] M;

mux_3bit_5to1 M0 (SW[17:15], SW[14:12], SW[11:9], SW[8:6], SW[5:3], SW[2:0], M);

char_7seg H0 (M, HEX0);

endmodule

// 3-bit 5x1’lik multiplexer

module mux_3bit_5to1 (S, U, V, W, X, Y, M);

input [2:0] S, U, V, W, X, Y;

output [2:0] M;

. . . kod gösterilmiyor endmodule

module char_7seg (C, Display);

input [2:0] C; // input output [0:6] Display; // output . . . code not shown

endmodule

¸Sekil 10. ¸Sekil 9’daki devrenin verilog kodu.

SW17SW16SW15 Karakter

000 H E L L O

001 E L L O H

010 L L O H E

011 L O H E L

100 O H E L L

Tablo 2. Be¸s göstergede kayan "HELLO" yazısı.

A¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Projeye verilog codunuzu ekleyin. Modülünün giri¸sini SW ve çıkı¸sını HEX4, HEX3, HEX2, HEX1, ve HEX0 olacak ¸sekilde ayarlayın.

3. pin assignment dosyasını projenize ekleyip derleyin.

4. Derledi˘giniz projeyi FPGA kartına yükleyip, giri¸sin durumuna göre göstergelerin do˘grulu˘gunu test edin.

(14)

Uygulama VI

Uygulama V’deki kodu tüm 7-segment göstergeleri kapsayacak ¸sekilde geni¸sletin. Tablo 3’teki gibi göstergeleri sürecek modülü olu¸sturun.

SW17SW16SW15 Character pattern

000 H E L L O

001 H E L L O

010 H E L L O

011 H E L L O

100 E L L O H

101 L L O H E

110 L O H E L

111 O H E L L

Tablo 3. Sekiz gösterge kayan "HELLO" yazısı.

A¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Projeye verilog codunuzu ekleyin. Modülünüün giri¸sini SW ve çıkı¸sını HEX7, . . ., HEX0 olacak ¸sekilde ayarlayın.

3. pin assignment dosyasını projenize ekleyip derleyin.

4. Derledi˘giniz projeyi FPGA kartına yükleyip, giri¸sin durumuna göre göstergelerin do˘grulu˘gunu test edin.

(15)

Laboratuvar Çalı¸sması 2

Sayılar ve Göstergeler

Bu çalı¸smanın amacı kombinasyonel devreler tasarlayarak ikilik sayılar ile onluk sayılar üzerinde i¸slem yap- mak ve ikili olarak kodlanmı¸s onluk sistemde (BSD) toplama i¸slemini gerçeklemektir.

Uygulama I

7-segment göstergeleri (HEX3 – HEX0) anahtarlarla (SW15−0) ile sürmek istiyoruz. Olu¸sturaca˘gınız modül gös- tergelerde 0’dan 9’a kadar olan rakamları gösterecek yapıda olmalıdır. Bunun için dekoderinizin giri¸si 4-bit olmalı ve herbir dekoder için 1010’dan 1111’e kadar giri¸sler etkisiz olmalıdır.

A¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Projeye verilog dosyası ekleyin. Verilog ile olu¸sturaca˘gınız modülünüzde 7- segment göstergeleri sadece basit assign komutuyla atamalısınız.

3. Modülün giri¸sini SW[15:0] ve çıkı¸sını HEX3, HEX2, HEX1 ve HEX0 olacak ¸sekilde ayarlayın.

4. pin assignment dosyasını projenize ekleyip derleyin.

5. Derledi˘giniz projeyi FPGA kartına yükleyip, giri¸sin durumuna göre göstergelerin do˘grulu˘gunu test edin.

Uygulama II

4-bit ikilik sayıyı iki basamaklı onluk sayıya çeviren bir devre tasarlamalısınız. Tablo 1’de giri¸sin durumuna göre olması gereken çıkı¸slar verilmi¸stir. Olu¸sturmanız gereken devrenin sembolik gösterimi ¸Sekil 1’de verilmi¸stir. Olu¸s- turaca˘gınız modül if-else yada case gibi ifadeler içermemeli sadece boolean i¸slemler ile olu¸sturulmu¸s olmalıdır.

Binary value Decimal digits

0000 0 0

0001 0 1

0010 0 2

. . . .

1001 0 9

1010 1 0

1011 1 1

1100 1 2

1101 1 3

1110 1 4

1111 1 5

Table 1. Binary-to-decimal conversion values.

A¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Projeye verilog dosyası ekleyin. Modülünüzü B devresi ve dekoder olmadan olu¸sturun. v3−0 giri¸slerini anahtarlara, m3−0 ile z çıkı¸slarınıda ledlere ba˘glayarak derleyin ve devrenizin do˘gru çalı¸stı˘gından emin olun.

3. B devresini ve dekoderi kodunuza ekleyerek modülün çıkı¸sını HEX1 ve HEX0 olarak ayarlayın.

(16)

4. pin assignment dosyasını projenize ekleyip derleyin.

5. Derledi˘giniz projeyi FPGA kartına yükleyip, giri¸sin durumuna göre göstergelerin do˘grulu˘gunu test edin.

0 1

0 1

v2

0 v3

Circuit B 7

0 1 2 3 4

5 6

7-segment 7

0 1 2 3 4

5 6

0 1

v1

0 1

v0

Circuit A Comparator

decoder

d1

d0 m2

m3

m1

m0 z

¸Sekil 1: Partial design of the binary-to-decimal conversion circuit.

Uygulama III

a, b ve cj giri¸slerine, s ve c0 çıkılarına sahip bir tam toplayıcıya ait devre ¸seması ¸Sekil 2a’da verilmi¸stir. ¸Sekil 2b ve c’de tam toplayıcıya ait devre sembolü ve do˘gruluk tablosu gösterilmi¸stir. ¸Sekil 2d’de ise 4-bitlik bir tam toplayıcının devre ¸seması verilmi¸stir. Burada her bir bitin toplanması sonucu olu¸san eldenin bir sonraki toplama i¸slemine eklendi˘gi görülebilir.

(17)

FA

0

1

ci

a) Full adder circuit a

b

co

s ci

a

b co

s

b) Full adder symbol

FA a0 b0

s0 FA

c1 a1 b1

s1 FA

c2 a2 b2

s2 FA

c3 a3 b3

s3 cout

d) Four-bit ripple-carry adder circuit

cin 0

0

c) Full adder truth table a ci

b 0 0 0 1 0 0

1 0 1 1 1 0 0 1 1

0 1 1 0 1 1 1

0 0

s co

0 1 0 1

1 0 0 1 1 1

0 0 1 1

¸Sekil 2: A ripple-carry adder circuit.

Bu devrenin verilog kodunu a¸sa˘gıdaki adımları takip ederek olu¸sturun.

1. Yeni bir proje olu¸sturun. Bir tam toplayıcı alt modülü yazın ve ana modülü 4-bitlik toplamayı yapmak için bu alt modülü kulanacak ¸sekilde olu¸sturun.

2. Modülün giri¸slerini anahtarlara ve anahtarlarıda durumlarını görmek için kırmızı ledlere ba˘glayın. Modülün çıkı¸slarını ise ye¸sil ledlere ba˘glayın.

3. pin assignment dosyasını projenize ekleyin ve projenizi derleyip FPGA kartına yükleyin.

4. Devrenizi test etmek için de˘gi¸sik giri¸s de˘gerleriyle sonucun do˘grulu˘gunu test edin.

Uygulama IV

Uygulama II’de ikilik sayılarıla onluk tabandaki rakamların ili¸skisinden bahsetmi¸stik. Bu tarz bir kullanım devre- nin çıkı¸sını kullanıcının algılamasını kolayla¸stırmaktadır. Herbir rakamın 4-bitlik ikilik sayılarla temsil edilmesine binary coded decimal(BCD) denilmektedir. Örnek olarak onluk sistemde 59 olan bir sayının BCD kar¸sılı˘gı 1010 1001 dir. ˙Iki BCD sayıyı toplayan bir devre olu¸sturmalısınız. Giri¸sleriniz tek basamaklı iki BCD sayı ve elde, çıkı¸sınız ise iki basamaklı BCD sayı olmalıdır. Olu¸sturaca˘gınız toplayıcının ula¸saca˘gı en büyük sonuç 9 + 9 + 1 = 19 olacaktır. Modülünüzü a¸sa˘gıdaki adımları takip ederek olu¸sturun.

1. BCD toplayıcınız için yeni bir proje olu¸sturun. Uygulama III’te olu¸sturdu˘gunuz 4-bit tam toplayıcıyı kullan- malısınız. ˙Iki basamaklı BCD çıkı¸sı ise Uygulama II’de olu¸sturdu˘gunuz çeviriciye benzer ¸sekilde olu¸stura- bilirsiniz. Verilog kodunuzu basit assign komutunu kullanarak olu¸sturmalı, if-else yada case gibi karma¸sık yapılar kullanmamalısınız.

2. Modülün giri¸slerini anahtarlara ve anahtarlarıda durumlarını görmek için HEX6 ve HEX4 e ba˘glayın. Çıkı¸s- ları ise HEX1 ve HEX0 göstergelerine ba˘glayın.

(18)

3. Devrenizin giri¸sleri BCD sayı oldu˘gu için e˘ger giri¸s 9’dan büyükse LEDG8ledini yakarak kullanıcıya uyarı verecek ¸sekilde gerekli ayarlamaları yapın.

4. pin assignment dosyasını projenize ekleyin ve projenizi derleyip FPGA kartına yükleyin.

5. Devrenizi test etmek için de˘gi¸sik giri¸s de˘gerleriyle sonucun do˘grulu˘gunu test edin.

Uygulama V

Uygulama IV’te yaptı˘gınız toplayıcıyı giri¸sleri iki basamaklı BCD sayı olacak ¸sekilde a¸sa˘gıdaki adımları izleyerek düzenleyin.

1. Modülün giri¸slerini anahtarlara ve anahtarlarıda durumlarını görmek için HEX7 - HEX6 ve HEX5 - HEX4 e ba˘glayın. Çıkı¸sları ise HEX2, HEX1 ve HEX0 göstergelerine ba˘glayın.

2. pin assignment dosyasını projenize ekleyin ve projenizi derleyip FPGA kartına yükleyin.

3. Devrenizi test etmek için de˘gi¸sik giri¸s de˘gerleriyle sonucun do˘grulu˘gunu test edin.

Uygulama VI

Uygulama V’de iki basamaklı BCD toplatıcıyı Uygulama IV’de yaptı˘gımız tek basamaklı BCD sayı toplayıcılar- dan ikisini birle¸stirerek olu¸sturduk. A¸sa˘gıda iki basamaklı iki BCD sayıyı toplayacak devrenin farklı bir ¸sekilde olu¸sturulmu¸s algoritması bulunmaktadır.

1 T0= A0+ B0

2 if (T0> 9) then 3 Z0= 10;

4 c1= 1;

5 else 6 Z0= 0;

7 c1= 0;

8 end if

9 S0= T0− Z0

10 T1= A1+ B1+ c1 11 if (T1> 9) then 12 Z1= 10;

13 c2= 1;

14 else 15 Z1= 0;

16 c2= 0;

17 end if

18 S1= T1− Z1

19 S2= c2

Bu kodun gerçeklenmesinde hangi devrelerin kullanılaca˘gını anlamak için incelenmesi gerekmektedir. 1., 9., 10.

ve 18. satırlarda toplayıcılar, 2. ve 8. satırla arası ile 11. ve 17. satırlar arasındaki kodlar için multiplexerlar ve son olarakta T0 > 9 ve T1 > 9 kar¸sıla¸stırmaları içinde kar¸sıla¸stırma birimleri kullanılmalıdır. Bu kodu gerçeklerken a¸sa˘gıdaki adımları izleyerek ve if-else ve > ve + gibi operatorleri kullanarak verilog kodunuzu olu¸sturacaksınız.

1. Yeni bir proje olu¸sturun ve bir önceki uygulamadaki aynı giri¸s çıkı¸sları kullanın. Projenizi derleyin.

(19)

2. Quartus II RTL Viewer aracıyla olu¸sturdu˘gunuz devreyi inceleyin. Bir önceki uygulamada olu¸sturdu˘gunuz devreyle kar¸sıla¸stırın.

3. Projenizi FPGA kartına yükleyip de˘gi¸sik giri¸s de˘gerleriyle çıkı¸sın do˘grulu˘gunu test edin.

Uygulama VII

6-bitlik ikilik sayıyı iki basamaklı onluk sayıya çevirip BCD formda gösteren bir modül olu¸sturun. Giri¸s olarak SW5−0 anahtarlarını ve çıkı¸s olarak HEX1 ve HEX0 kullanın. Projenizi FPGA kartına yükleyip de˘gi¸sik giri¸s de-

˘gerleriyle çıkı¸sın do˘grulu˘gunu test edin.

(20)
(21)

Laboratuvar Çalı¸sması 3

Mandallar, Flip-floplar ve Kaydediciler

Bu çalı¸smanın amacı mandalları, flip-flopları ve kaydedicileri anlamaktır.

Uygulama I

Alteranın FPGA’lerinde kullanıcıların kullanımına açık flip-floplar bulunmaktadır. Uygulama IV’de bu iki durum- luları nasıl kullanaca˘gımızı görece˘giz. Ancak ön tanımlı flip-flopları kullanmadan önce hafıza birimlerini nasıl olu¸sturabilece˘gimizi görece˘giz. Bir RS latchının kapı yapısı ¸Sekil 1’de veerilmi¸stir. Bu devreyi ¸Sekil 2’de ve- rildi˘gi gibi iki farklı verilog koduyla gerçekleyebiliriz. Aynı devreyi olu¸sturmak için ¸Sekil 2a mantık kapılarını kullanırken, ¸Sekil 2b mantık i¸slemlerini kullanmaktadır. E˘ger bu latchı FPGA üzerinde 4-giri¸sli bir Look Up Table (4-LUT) kullanarak gerçeklemek istersek, o zaman ¸Sekil 3a’da görüldü˘gü gibi sadece tek bir LUT ile gerçekleye- biliriz.

R

S Clk

S_g

Qa (Q) R_g

Qb

¸Sekil 1: RS mandalı devresi.

// A gated RS latch

module part1 (Clk, R, S, Q);

input Clk, R, S;

output Q;

wire R_g, S_g, Qa, Qb /* synthesis keep */ ; and (R_g, R, Clk);

and (S_g, S, Clk);

nor (Qa, R_g, Qb);

nor (Qb, S_g, Qa);

assign Q = Qa;

endmodule

¸Sekil 2a. RS mandalının mantık kapıları kullanılarak tanımlanması.

(22)

// A gated RS latch

module part1 (Clk, R, S, Q);

input Clk, R, S;

output Q;

wire R_g, S_g, Qa, Qb /* synthesis keep */ ; assign R_g = R & Clk;

assign S_g = S & Clk;

assign Qa = ∼(R_g | Qb);

assign Qb = ∼(S_g | Qa);

assign Q = Qa;

endmodule

¸Sekil 2b. RS mandalının mantık i¸slemleri kullanılarak tanımlaması.

Tek bir 4-LUT ile gerçeklenebilmesine ra˘gmen devrenin iç yapısını gözlemlememize izin vermez. Devrenin iç yapısını inceleyebilmek için derleyici komutlarına ihtiyaç duyarız. ¸Sekil 2’deki /* synthesis keep */ komutu devre- nin iç yapısındaki de˘gi¸siklikleri inceleyebilmemiz için Quartus programının bunları ayrı birer mantık elemanı gibi görmesini sa˘glar. E˘ger 4-LUT kullanarak olu¸sturdu˘gumuz devrenin iç yapısını görmek istersek o zaman devreyi

¸Sekil 3b’deki gibi dört tane 4-LUT ile olu¸sturmamız gerekmektedir.

R

S Clk

S_g

Qa (Q) R_g

Qb

(a) Using one 4-input lookup table for the RS latch.

(b) Using four 4-input lookup tables for the RS latch.

Qa (Q) R

S

Clk 4-LUT

4-LUT 4-LUT

4-LUT

4-LUT

¸Sekil 3. ¸Sekil 1’deki devrenin gerçeklenmesi.

Bir RS mandalı için bir Quartus II projesini a¸sa˘gıdaki adımları izleyerek olu¸sturun:

(23)

1. Yeni bir proje olu¸sturun. Hedef yonga olarak Cyclone IV EP4CE115F29C7’yi seçin.

2. ¸Sekil 2’deki kodlardan birini seçip verilog dosyasını olu¸sturun.(˙Iki kodda aynı devreyi olu¸sturur.)

3. Kodunuzu derleyin. RTL Viewer aracını kullanarak kapı-düzeyinde devrenizi gözlemleyin. Aynı ¸sekilde Technoloji map Viewer aracıyla gözlemleyerek ¸Sekil 3b’deki gerçeklemeyle kar¸sıla¸stırın.

4. 4. Qsim programını çalı¸stırıp bir Vector Waveform File (.vwf) dosyası olu¸sturun. R ve S giri¸sleri için bir sinyal olu¸sturup programa R_g, S_g, Qa ve Qb için çıkı¸s sinyallerini olu¸sturun.

Uygulama II

D mandalının kapı yapısı ¸Sekil 4 de gösterilmi¸stir.

S

R Clk

D S_g

R_g

Qa (Q)

Qb

¸Sekil 4. D flip-flop’u devresi.

A¸sa˘gıdaki adımları takip edin:

1. Yeni bir proje olu¸sturun ve ¸Sekil 2b’deki gibi mantık i¸slemleri kullanarak D flip-flop’unun verilog kodunu olu¸sturun. R, S_g, R_g, Qa, ve Qb sinyallerinin ayrı mantık birimlerinde saklanması için /* synthesis keep

*/ komutunu kullanın.

2. Kodunuzu derleyin ve Technology Viewer aracını kullanarak olu¸sturdu˘gunuz devreyi inceleyin.

3. fonksiyonel simulasyonu kullanarak devrenizin bütün giri¸s kombinasyonlarında do˘gru çalı¸stı˘gını kontrol edin ve zamanlama simulasyonu yaparak kontrol edin.

4. SW0anahtarını D giri¸sine, SW1anahtarını Clk giri¸sine ve LEDR0ledinide Q çıkı¸sına ba˘glayın.

5. Projenizi tekrar derlyip karta yükleyin.

6. Anahtarları açıp kapatarak devrenizin do˘gru çalı¸stırı˘gını kontrol edin.

(24)

Uygulama III

¸Sekil 5’te iki D flip-flop’unun ba˘glandı˘gı bir devre gösterilmi¸stir.

D Q

Q

Master Slave

D

Clock

Q

Q

D Q

Q

Qm Qs

Clk Clk

¸Sekil 5. Birbirine ba˘glı iki D flip-flop’u.

A¸sa˘gıdaki adımları uygulayın:

1. Yen bir proje olu¸sturun ve bir önceki uygulamada yazdı˘gınız D flip-flop’u kodundan biri master biri slave olmak üzere iki tane içerecek yeni verilog kodunuzu olu¸sturun.

2. SW0anahtarını D giri¸sine, SW1anahtarını Clock giri¸sine ve LEDR0ledinide Q çıkı¸sına ba˘glayın.

3. Projenizi derleyin.

4. Technology Viewer aracını kullanarak olu¸strudu˘gunuz devreyi kontrol edin. Simulasyon yaparak sonuçları inceleyin.

5. Devreyi karta yükleyip anahtarları de˘gi¸stirerek kontrol edin.

(25)

Uygulama IV

¸Sekil 6’da farklı kenar tetiklemeli D flip-flop’larının devreleri gösterilmi¸stir.

D Clock

Qa

Qb

D Q

Q

(b) Timing diagram

D Q

Q

D Q

Q D

Clock Qa

Qb

Qc Qc Qb Qa

(a) Circuit Clk

Qc

¸Sekil 6. Bu uygulama için devre ve zaman çizelgesi.

Bu devreyi gerçeklemek ve simulasyonunu yapmak için a¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Üç tür D flip-flop’unu içeren verilog dosyasını olu¸sturun. ¸Sekil 7’de standart bir D flip-flop’una ait verilog kodu verilmi¸stir.

3. Projenizi derleyin ve Technology Viewer aracıyla kontrol edin.

4. Bir Vector Waveform File (.vwf) dosyası olu¸sturarak ¸Sekil 6’daki gibi D ve Clock giri¸slerini olu¸sturun.

Daha sonra simulasyonu çalı¸stırarak üç flip-flop’un çıkı¸slarını kontrol edin.

(26)

module D_latch (D, Clk, Q);

input D, Clk;

output reg Q;

always @ (D, Clk) if (Clk)

Q = D;

endmodule

¸Sekil 7. D flip-flop’u için verilog kodu.

Uygulama V

Bu uygulamada 16-bitlik A de˘gi¸skenini HEX7 − 4 göstergelerinde, yine 16-bitlik B de˘gi¸skenini HEX3 − 0 göstergelerinde gösteren bir devre olu¸sturaca˘gız. A ve B de˘gi¸skenlerini SW15−0anahtarları yardımıyla tanımla- yacaksınız. Devreniz çalı¸stı˘gında ilk A de˘gi¸skeninin de˘geri anahtarlardan okunacak ve daha sonra B de˘gi¸skeninin de˘geri okunacaktır. B de˘gi¸skeni okunurken A’nın de˘geri kaydedicilerde tutulmalıdır.

1. Yeni bir proje olu¸sturun.

2. Proje için verilog kodunu olu¸sturun. KEY0anahtarını negatif kenar tetiklemeli asenkron reset olarak, KEY1

anahtarını da saat giri¸si olarak ayarlayın.

3. Projenizi derleyin.

4. Gerekli anahtarları ve göstergeleri projenize ekleyin.

5. Projenizi tekrar derleyin ve karta yükleyin.

6. Anahtarların pozisyonlarını de˘gi¸stirerek göstergeleri kontrol edin.

(27)

Laboratuvar Çalı¸sması 4

Sayaçlar

Bu çalı¸smada sayaçları nasıl olu¸sturaca˘gımızı ve kullanaca˘gımızı görece˘giz. Daha sonra olu¸sturaca˘gımız devreyi FPGA kartına yükleyece˘giz.

Uygulama I

¸Sekil 1’de T flip-flop’larından olu¸san 4-bit counter gösterilmi¸stir. Sayaç e˘ger Enable biti 1 ise clk sinyalinin her positif kenarında bir sonraki durumuna geçer. Clear sinyalinin 0 durumuna geçmesiyle tüm bitler sıfırlanır. Sizde benzer yapıda bir 8-bitlik sayıcı olu¸sturun.

T Q

Q Clock

T Q

Q Enable

Clear

T Q

Q

T Q

Q

¸Sekil 1: A 4-bit counter.

1. ¸Sekil 1 birdeki yapıda 8-bitlik bir sayıcının verilog kodunu olu¸sturun. Yazaca˘gınız kod 8 tane T filp- flop’undan olu¸smalıdır. Kodunuzu derleyin. Devreniz kaç mantık elemanı kaplıyor? Devrenizin maksimum çalı¸sma frekansı (Fmax) nedir?

2. Simulasyon yaparak devrenizin do˘gru çalı¸stı˘gından emin olun.

3. Kodunuzu, Clock giri¸sini butona (KEY0), Enable ve Clear giri¸sini SW1ve SW0anahtarlarına, 4 bit çıkı¸sı ise HEX1-0 göstergelerine ba˘glanacak ¸sekilde güncelleyin ve tekrar derleyin.

4. Devrenizi FPGA kartına yükleyin ve çalı¸smasını test edin.

5. Kodunuzun 4-bitlik versiyonunu derleyip RTL Viewer yardımıyla ¸Sekil 1 ile kar¸sıla¸stırın.

Uygulama II

Verilog donanım tanımlama dilinde sayaç yazmanın bir ba¸ska yoluda de˘gi¸skene 1 eklemektir. Bu a¸sa˘gıdaki gibi yazılabilir.

Q <= Q + 1;

Bu ¸sekilde olu¸sturaca˘gınız 16-bitlik bir sayacı derleyin ve yonga üzerinde kaç mantık elemanı kapladı˘gını ve maksimum çalı¸sma frekansını daha önceki yöntemle kar¸sıla¸stırın. RTL Viewer aracını kullanarak iki yöntemin farklılıklarını gözlemleyin.

Uygulama III

16-bitlik bir sayıcı olu¸sturmak için Library of Parameterized modules(LPM) modülü kullanın. Daha önceki uygu- malarda olu¸sturduklarınızdan farklı mı? Kar¸sıla¸stırın.

(28)

Not: LPM kullanımıyla ilgili detaylı bilgiye ula¸sabilece˘giniz Using the Parameterized Modules(LPM) dosyasını Altera University Program internet sayfasından indirebilirsiniz.

Uygulama IV

HEX07-segment göstergeyi sürecek bir devre tasarlayıp gerçeklyin. Her bir dijit yakla¸sık bir saniye yanmalıdır.

Saniyeleri olu¸sturaca˘gınız bir sayıcı ile sayacaksınız. Olu¸sturaca˘gınız sayıcı FPGA’in üzerindeki 50MHz saati kullanmalıdır. Ba¸ska herhangi bir saat kullanmayın, devrenizdeki bütün flip-flopların direk olarak 50MHz saate ba˘glandı˘gından emin olun.

Uygulama V

7-segmente göstergelerde(HEX7-0) HELLO yazacak devreyi olu¸sturun. Devrenizi her saniye a¸sa˘gıdaki Tablo 1’de oldu˘gu gibi bir harf sa˘gdan sola do˘gru kayacak ¸sekilde düzenleyin.

Clock cycle Displayed pattern

0 H E L L O

1 H E L L O

2 H E L L O

3 H E L L O

4 E L L O H

5 L L O H E

6 L O H E L

7 O H E L L

8 H E L L O

. . . and so on

Tablo 1. Kayan "HELLO" yazısı.

Ön Çalı¸sma

Laboratuvara gelmeden önce a¸sa˘gıdakileri yapın.

1. Uygulama I’deki devrenin verilog kodunu olu¸sturun.

2. Uygulama II’deki devrenin verilog kodunu olu¸sturun.

3. Uygulama III’deki devrenin verilog kodunu olu¸sturun.

Ayrıca 7-segment göstergelerde 16-lık tabanda sayıları gösteren bir modül olu¸sturmak ileriki laboratuvarlarda yararlı olabilir.

(29)

Laboratuvar Çalı¸sması 5

Zamanlayıcılar ve Gerçek Zamanlı Saat

Bu çalı¸smada zamanlanmı¸s devrelerin gerçeklenmesini görece˘giz. Olu¸sturdu˘gumuz devreleri FPGA kartı üze- rinde deneyece˘giz.

Ön Bilgi

Verilog donanım tanımlama dilinde parametre tanımlayarak de˘gi¸sken boyutlu sayıcılar tasarlayabiliriz. ¸Sekil 1’de bir n-bit sayacın verilogda nasıl tanımlanaca˘gı gösterilmi¸stir.

module counter(clock, reset_n, Q);

parameter n = 4;

input clock, reset_n;

output [n-1:0] Q;

reg [n-1:0] Q;

always @(posedge clock or negedge reset_n) begin

if (~reset_n) Q <= ’d0;

else

Q <= Q + 1’b1;

end endmodule

¸Sekil 1: Verilog da n-bit sayaç kodu.

n parametresi sayıcının kaç bit oldu˘gunu tanımlar. N parametresine defparam komutuyla de˘ger atayabilirsiniz.

Örnek olarak 8-bitlik bir sayacı a¸sa˘gıdaki gibi tanımlanabilir.

counter eight_bit(clock, reset_n, Q);

defparam eight_bit.N = 8;

Parametre kullanarak yeni bir modül olu¸sturmak zorunda kalmadan de˘gi¸sik boyutlarda sayıcılar olu¸sturabiliriz.

Uygulama I

8-bitlik sayıcıya fazladan bir parametre daha ekleyerek modulo-k sayıcı olu¸sturun. Olu¸sturdu˘gunuz sayıcı 0’dan k − 1’e kadar sayıp k − 1’e ula¸stı˘gında 0’a geri dönecek ¸sekilde çalı¸smalıdır.

Devreniz KEY0 butonunu asenkron reset olarak ve KEY1butonunuda saat olarak kullanmalıdır. Sayacın de-

˘gerleri kırmızı ledler ile gösterilmelidir. Olu¸sturdu˘gunuz devreyi Quartus II yazılımında derleyin ve FPGA kartına yükleyip test edin. A¸sa˘gıdaki adımları takip edin:

1. ˙Istenen devrenin gerçeklenmesinde kullanmak için yeni bir proje olu¸sturun.

2. ˙Istenen devrenin verilog kodunu olu¸sturun ve projeye ekleyip derleyin.

3. ˙Islevselli˘gini kontrol etmek için devrenin simulasyonunu yapın.

(30)

4. pin assignment dosyasını projenize ekleyip derleyin.

5. Tekrar derleyip FPGA kartına yükleyin.

6. Botunlara basarak devrenin çalı¸smasını kontrol edin.

Uygulama II

3-basamaklı bir BCD sayıcı olu¸sturun. Olu¸sturdu˘gunuz devrenin çıkı¸sını HEX2−0 7-segment göstergelerine ba˘g- layın. Saat sinyali olarak kartın üzerindeki 50MHz’lik saati, her saniye devrenin çıkı¸sını de˘gi¸stirecek ¸sekilde kul- lanın. Son olarak KEY0butonunu sayıcıyı sıfırlamak için kullanın.

Uygulama III

FPGA kartı üzerinde günlük saat olu¸sturun. Devreniz saatleri(0-23) HEX7−6’da, dakikaları(0-59) HEX5−4’de ve saniyeleri(0-59) HEX3−2’de göstermelidir. Ayrıca saatin ilk durumunu ayarlamak için SW15−0 anahtarları kullanılmalıdır.

Uygulama IV

Eski bir haberle¸sme metodu olan telgraf mors kodlarına dayanmaktadır. Bu kodlar kısa(nokta) ve uzun(çizgi) sinyallerden olu¸smaktadır. Her harf bu sinyalllerin de˘gi¸sik kombinasyonlarıyla olu¸sturulur. Örnek olarak mors ko- dunda alfabedeki ilk sekiz harf a¸sa˘gıdaki gibi temsil edilir.

A • —

B — • • •

C — • — •

D — • •

E •

F • • — •

G — — •

H • • • •

Alfabenin ilk sekiz harfinden birini alıp kırmızı ledlerde o harfe ait mors kodunu gösteren devreyi tasarlayın.

Devrenizde giri¸s olarak SW2−0anahtarlarını ve KEY1−0butonlarını kullanmalısınız. KEY1butonuna basıldı˘gında SW2−0 anahtarlarıyla belirtilen(A için 000, b için 001,...) harfin mors kodu kırmızı led ile nokta 0.5 saniye ve çizgi 1.5 saniye olacak ¸sekilde gösterilmelidir. KEY0ise asenkron reset olarak görev yapmalıdır. Devrenin ¸sematik gösterimi ¸Sekil 5’de verilmi¸stir. Design and implement a circuit that takes as input one of the first eight letters of the alphabet and displays the Morse code for it on a red LED. Your circuit should use switches SW2−0 and pushbuttons KEY1−0as inputs. When a user presses KEY1, the circuit should display the Morse code for a letter specified by SW2−0(000 for A, 001 for B, etc.), using 0.5-second pulses to represent dots, and 1.5-second pulses to represent dashes. Pushbutton KEY0should function as an asynchronous reset. A high-level schematic diagram of the circuit is shown in Figure 5.

˙Ipucu: 0.5 saniyelik saati olu¸sturmak için bir sayacı, LEDR0’ın 0.5 yada 1.5 saniye yanmasını sa˘glamak için ba¸ska bir sayacı kullanın.

(31)

Letter size register

Enable Load Data

Letter symbols shift register

Enable Load Data

Logic Letter

Selection Logic

LEDR0

2-bit counter

Enable Reset

Pushbuttons and switches

¸Sekil 2: Uygulama IV için ¸sematik gösterim.

Ön Çalı¸sma

Laboratuvara gelmeden önce a¸sa˘gıdakileri yapın:

1. Uygulama I’deki devrenin verilog kodunu olu¸stur.

2. Uygulama II’deki devrenin verilog kodunu olu¸stur.

3. Uygulama III’deki devrenin verilog kodunu olu¸stur.

(32)
(33)

Laboratuvar Çalı¸sması 6

Toplayıcı, Çıkarıcı ve Çarpıcılar

Bu çalı¸smanın amacı sayıların arasındaki toplama, çıkarma ve çarpma i¸slemlerini yapabilecek devre elemanları olu¸sturmaktır. Her devre verilog ile olu¸sturulup FPGA kartında gerçeklenecektir.

Uygulama I

Laboratuvar Çalı¸sması 2’de yaptı˘gımız 4-bitlik tam toplayıcı ¸Sekil 1’de gösterilmi¸stir.

FA

0

1

ci

a) Full adder circuit a

b

co

s ci

a

b co

s

b) Full adder symbol

FA a0 b0

s0 FA

c1 a1 b1

s1 FA

c2 a2 b2

s2 FA

c3 a3 b3

s3 cout

d) Four-bit ripple-carry adder circuit

cin 0

0

c) Full adder truth table a ci

b 0 0 0 1 0 0

1 0 1 1 1 0 0 1 1

0 1 1 0 1 1 1

0 0

s co

0 1 0 1

1 0 0 1 1 1

0 0 1 1

¸Sekil 1: 4-bit tam toplayıcı.

Bu devre verilogda “+” i¸saretiyle tanımlanabilir. Mesela a¸sa˘gıdaki kodda n-bitlik bir toplayıcı tanımlanmı¸stır:

wire [n-1:0] sum;

wire carry;

. . .

assign {carry, sum} = A + B;

Bu yapıyı kullanarak ¸Sekil 2’deki sistemi olu¸sturun.

A¸sa˘gıdaki gibi kodunuzu olu¸sturup Quartus II yazılımında derleyin, FPGA kartına yükleyerek test edin.

1. Yeni bir proje olu¸sturun.

2. ¸Sekil 2’deki devre için bir verilog dosyası olu¸sturun.

3. A giri¸sini SW7−0 anahtarlarına, asenkron reseti KEY0 butonuna ve saatide KEY1 butonuna ba˘glayın. Sum çıkı¸sını LEDR7−0kırmızı ledlerine veson olarak elde bitini(carry) LEDR8kırmızı ledine ba˘glayın.

4. Pin assignment dosyasını projeye ekleyin.

5. Projenizi derleyin ve zamanlama simulasyonunu kullanarak test edin. Simulasyon sorunsuz çalı¸sırsa proje- nizi FPGA kartına yükleyip farklı giri¸s de˘gerleri için test edin.

6. Quartus II Compilation Report’ta timing analyzer kısmını inceleyin. Devrenizin maksimum frekansı nedir?

Devrenizin en uzun gecikme süresi nedir?

(34)

+

S 8

8 R

Q

R Q

0

D Q

Overflow

FA a0 b0

s0 FA

c1 a1 b1

s1 FA

c2 a2 b2

s2 FA

c3 a3 b3

s3 cout

a) Four-bit ripple-carry adder circuit

cin

A

S 8

8 R

Q

R Q

0

D Q

Overflow Clock

cin overflow

b) Eight-bit registered adder circuit¸Sekil 2: 8-bit akümülator.

Uygulama II

Uygulama I’deki devrenizi toplama ve çıkartma yapabilecek ¸sekilde geni¸sletin. Bunun için bir devreye add_sub giri¸si ekleyin. E˘ger add_sub giri¸si 1 ise devre S’den A’yı çıkaracak, sıfır oldu˘gunda ise uygulama I’deki gibi A ile S’yi toplayacak.

Uygulama III

¸Sekil 3a’da bir çarpma i¸slemi gösterilmi¸stir.

b0 a0

p0 p1 p2 p3 p4 p6

p7 p5

b0 a1 b0 a2 b0 a3

b1 a0 b1 a1 b1 a2 b1 a3

b2 a0 b2 a1 b2 a2 b2 a3

b3 a0 b3 a1 b3 a2 b3 a3 x

1 1 1 0

0 0 1 1

0 0 0 0

0 0 0 0

1 1 1 0

1 1 1 0

0 0 0 1 0 0 1 0

b) Binary c) Implementation

x

a0 a1 a2 a3

b0 b1 b2 b3

x 1 1 1 2 2 2 1 1

3 2 1

a) Decimal

¸Sekil 3: Multiplication of binary numbers.

P = A × B ifadesini iki sayının toplamı ¸seklinde hesaplarız. ˙Ilki A ile B sayısının birler basama˘gının çarpımı, ikincisi ise A sayısıyla B sayısının onlar basama˘gının çarpımının bir birim sola kaydırılmı¸s halidir. Bu iki sayıyı toplayarak sonuca ula¸sırız.

¸Sekil 3b’de aynı örne˘gin 4-bitlik ikilik sistemde sayıların kullanıldı˘gı hali gösterilmi¸stir. P = A × B e¸sitli˘gini hesaplamak için A ile B’nin bütün basamaklarının çarpımlarını toplamalıyız. ¸Sekil 3c’de çarpma i¸sleminin mantık i¸slemleriyle gösterimi verilmi¸stir.

4-bitlik bir çarpma i¸sleminin devre ¸seması ¸Sekil 4’te verilmi¸stir. Düzenli yapısı nedeniyle bu tarz yapılara dizi çarpıcıdenir. Her satırdaki AND kapıları toplam terimlerini olu¸sturur tam toplayıcılarda bu terimleri toplayarak çarpma i¸sleminin sonucunu olu¸stururlar.

(35)

a1

FA ci a b co s

FA ci a b co s a2 a3

b0

b1

b2

a0

FA ci a b co

s

b3 a0

FA ci a b co s

FA ci a b co

s a1 a2

0

FA ci a b co s a0 a1

0

0 a0

a2

FA ci a b co s

FA ci a b co

s a3

a1

FA ci a b co s

0

a3

FA ci a b co

s a2

FA ci a b co s a3

FA ci a b co s

p0 p1

p2 p3

p4 p6

p7 p5

¸Sekil 4: Dizi çarpıcı devresi.

Dizi çarpıcı devreyi olu¸sturmak için a¸sa˘gıdaki adımları izleyin:

1. Yeni bir proje olu¸sturun.

2. Gerekli olan verilog dosyasını olu¸sturun ve devrenizi derleyin.

3. ˙I¸slevsel simulasyon yaparak devrenizi test edin.

4. Devrenin A giri¸sini SW11−8 anahtarlarına, B giri¸sini SW3−0 anahtarlarına ba˘glayın. A ve B nin 16-lık tabanda de˘gerlerini sırasıyla HEX6 ve HEX4 göstergelernde sonucu ise HEX1 ve HEX0 göstergelerinde gösterecek ¸sekilde çıkı¸sları ayarlayın.

5. Projenizi tekrar derleyip FPGA kartına yükleyin.

6. Devrenizin i¸slevselli˘gini farklı giri¸sler kullanarak test edin.

Uygulama IV

(36)

Uygulama III’te bir dizi çarpıcıyı tam toplayıcılar kullanarak gerçeklemi¸stik. Bu uygulamada ise tam toplayıcıların bir dizisi olan n-bit toplayıcılar kullanarak devreyi tekrar gerçekleyece˘giz. Olu¸sturmanız istenen devrenin ¸seması

¸Sekil 5’te verilmi¸stir.

a1

b0

b1

b2

a0

b3 a0

ci

0 a2

co

a1 a3

a2 a3

p0 p1

p2 p3

p4 p6

p7 p5

a1 a0

a2 a3

n-bit Adder

a0 b0 a1

b1 b2 a2

a3 b3

s3 s2 s1 s0

ci

co n-bit Adder

a0 b0 a1

b1 b2 a2

a3 b3

s3 s2 s1 s0

ci

co n-bit Adder

a0 b0 a1

b1 b2 a2

a3 b3

s3 s2 s1 s0

0

a1 a0

a2 a3

0

0

¸Sekil 5: An array multiplier implemented using n-bit adders.

Çarpıcı devreyi sıralı toplamlar ¸seklinde olu¸sturmak bize tasarımımızı geni¸sletme olana˘gı tanımaktadır. Bu yapıyı kullanarak 8x8 çarpıcı ¸Sekil 5’daki gibi giri¸s çıkı¸slara flip-flop ba˘glayarak gerçekleyin.

Çarpıcı devreyi sıralı toplamlar ¸seklinde olu¸sturmak bize tasarımımızı geni¸sletme olana˘gı tanımaktadır. Bu yapıyı kullanarak 8x8 çarpıcı ¸Sekil 6’daki gibi giri¸s çıkı¸slara flip-flop ba˘glayarak gerçekleyin.

(37)

A

P 5

10 B

R Q

Clock

A

D Q

Clock

D Q Q

D Q Q 5

Multiplier

¸Sekil 6: A registered multiplier circuit.

A¸sa˘gıdaki adımları takip edin:

1. Yeni bir proje olu¸sturun.

2. ˙Istenen devrenin verilog dosyasını olu¸sturarak derleyin.

3. ˙I¸slevsel simulasyon yaparak olu¸sturdu˘gunuz devreyi kontrol edin.

4. Devrenin A giri¸sini SW15−8anahtarlarına ve B giri¸sini SW7−0anahtarlarına ba˘glayın. A ve B de˘gi¸skenle- rini sırasıyla HEX7-6 ve HEX5-4 göstergelerine ve P = A × B çıkı¸sınıda HEX3-0 göstergelerine ba˘glayın.

5. Projenizi tekrar derleyip FPGA kartına yükleyin.

6. Devrenizin çalı¸smasını anahtar ve göstergeler yardımıyla kontrol edin.

7. Devreniz kaç mantıksal eleman kaplıyor?

8. Devrenizin maksimum frekansı nedir?

(38)

Uygulama V

Uygulama IV’te sıralı toplayıcılar kullanarak çarpıcı olu¸sturduk. Ancak bir çarpıcı olu¸sturmanın bir di˘ger yolu ise toplayıcı a˘gaçları kullanmaktır.

Bir toplayıcı a˘gacı birkaç sayının aynı anda paralel olarak toplanmasıdır. Bir toplayıcı a˘gacı ¸Sekil 7’de göste- rilmi¸stir. ¸Sekil 7’de A, B, C, D, E, F , G ve H sayıları ikili gruplar halinde(A + B, C + D, E + F ve G + H) paralel olarak toplanır. Daha sonra bu toplamlarda ikili gruplar halinde paralel olarak toplanır. Sonuca ula¸sıncaya kadar i¸slemler bu ¸sekilde devam eder.

C

A B D E F G H

P

+

+ +

+ +

+ +

¸Sekil 7: 8 rakam için toplayıcı a˘gacı.

Bu uygulamada sizden 8x8 dizi çarpıcı olu¸sturmanız istenmektedir. Bir toplayıcı a˘gacı kullanarak ¸Sekil 5’teki devreyi olu¸sturun. Giri¸sler A ile B ve çıkı¸s olarak P Uygulama IV’teki gibi flip-flop ile devreye ba˘glanmalıdır.

Olu¸sturdu˘gunuz devrenin maksimum frekansı nedir?

Ön Çalı¸sma

Laboratuvara gelmeden önce bütün uygulamaların verilog kodlarını olu¸sturun.

(39)

Laboratuvar Çalı¸sması 7

Sonlu Durum Makinesi

Bu çalı¸sma sonlu durum makinelerini anlamayı ve kullanmayı amaçlamaktadır.

Uygulama I

Giri¸sin dört saat darbesi boyunca aynı kalmasıyla çıkı¸sı bir yapan di˘ger durumlarda çıkı¸sın sıfır kaldı˘gı bir sonlu durum makinesi tasarlamak istiyoruz. Devrenin bir giri¸si (w) ve bir çıkı¸sı (z) olacak. w dört saat darbesi boyunca bir yada dört saat dilimi boyunca sıfır olarak kalırsa z 1 olacak di˘ger tüm durumlarda z 0 olarak kalacak. E˘ger w 5 saat darbesi boyunca sabit kalırsa o zaman z iki saat darbesi boyunca 1 olarak kalıp 0’a dönecek. ¸Sekil 1 w, z ve saat arasındaki ili¸skiyi göstermektedir.

Clock

w

z

¸Sekil 1: z için zaman diagramı.

Bu sonlu durum makinesi için olu¸sturulan durum diagramı ¸Sekil 2’de verilmi¸stir. Bu uygulamada diagram- daki her durumun flip-flopta tutuldu˘gu sonlu durum makinesini kendimiz olu¸sturaca˘gız. Sonlu durum makinesi olu¸sturmak için 9 durum flip-flopunun (y8, . . . , y0) Tablo 1’deki gibi atamalarının yapıması gerekir.

E/1 0

Reset

w = 0 D/0 w = 0

C/0 w = 0

B/0

A/0

I/1 1

1 H/0 1 G/0 1 F/0 w = 1 w = 0

1 0

1

1

1

0

0

0

¸Sekil 2: Sonlu durum makinası için durum diagramı.

(40)

State Code Name y8y7y6y5y4y3y2y1y0

A 000000001

B 000000010

C 000000100

D 000001000

E 000010000

F 000100000

G 001000000

H 010000000

I 100000000

Tablo 1: Sonlu durum makinası için kodlar.

Devrenizi a¸sa˘gıdaki gibi tasarlayıp gerçekleyin:

1. Sonlu durum makinesi için yeni bir proje olu¸sturun.

2. Devrenizin verilog kodunu olu¸sturun. Bunu yaparken sadece assign komutunu kullanmalısınız. Senkron reset giri¸si için SW0anahtarını, sonlu durum makinesinin w giri¸si için iseSW1anahtarını ve saat için KEY[0]

butonunu kullanın. Devrenin z çıkı¸sı için ye¸sil ledi (LEDG0) ve durum flip-flopunun çıkı¸sınıda kırmızı ledleri (LEDR8- LEDR0) kullanın.

3. Verilog kodunuzu projenize ekleyin ve giri¸s çıkı¸sları ilgili pinlere ba˘glayın ve projenizi derleyin.

4. Devrenizi davranı¸sını simulasyon yaparak kontrol edin.

5. Devreniz do˘gru çalı¸sıyorsa FPGA kartına yükleyin ve de˘gi¸sik giri¸slerle test edin.

6. Son olarak tablo 1’deki kodlamayı de˘gi¸stirmeyi göz önünde bulundurmalısınız. Sonlu durum makinesini FPGA üzerinde gerçekledi˘ginizde bütün durum flip-floplarının 0 oldu˘gunu göreceksiniz. Çünkü FPGA üze- rindeki flip-floplar clear biti içerirler ancak ilklendirme giri¸si içermezler.

Tablo 2’de tüm flip-flopların sıfır oldu˘gu durumu içerecek ¸sekilde de˘gi¸stirilmi¸s durum atamaları gösterilmi¸s- tir. Yeni tabloya göre kodunuzu de˘gi¸stirin (˙Ipucu: sadece durum atamalarını de˘gi¸stirmeniz yeterli olacaktır.) devrenizi derleyin. Hem simulasyon hemde FPGA kartına yükleyerek devrenizi test edin.

State Code Name y8y7y6y5y4y3y2y1y0

A 000000000

B 000000011

C 000000101

D 000001001

E 000010001

F 000100001

G 001000001

H 010000001

I 100000001

Tablo 2: Modified one-hot codes for the FSM.

Uygulama II

(41)

Bu uygulama için farklı bir yöntemle ¸Sekil 2’deki gibi bir sonlu durum makinesini verilog ile gerçekleyeceksiniz.

Sonlu durum makinesinin bu versiyonunda durumlara ait flip-flopları direk atama yöntemiyle atamayacaksınız.

Bunun yerine verilog donanım tanımlama dilinin always blo˘gu içinde case komutunu kullanacaksınız. Bir ba¸ska always blo˘gunuda durum flip-floplarını temsil etmek için olu¸sturacaksınız. Devrenin çıkı¸sını sürmek için ayrı bir always blo˘gu yada assign komutunu kullanabilirsiniz. Dört durumlu sonlu durum makinesini gerçeklemek için Tablo 3’teki ikilik kodları kullanın.

State Code Name y3y2y1y0

A 0000

B 0001

C 0010

D 0011

E 0100

F 0101

G 0110

H 0111

I 1000

Tablo 3: Binary codes for the FSM.

Bu devreyi gerçeklemek için olu¸sturaca˘gınız verilog kodunun iskelet yapısı ¸Sekil 3’te verilmi¸stir.

module part2 ( . . . );

. . . define input and output ports . . . define signals

reg [3:0] y_Q, Y_D; // y_Q represents current state, Y_D represents next state parameter A = 4’b0000, B = 4’b0001, C = 4’b0010, D = 4’b0011, E = 4’b0100,

F = 4’b0101, G = 4’b0110, H = 4’b0111, I = 4’b1000;

always @(w, y_Q) begin: state_table

case (y_Q)

A: if (!w) Y_D = B;

else Y_D = F;

. . . remainder of state table default: Y_D = 4’bxxxx;

endcase end // state_table

always @(posedge Clock) begin: state_FFs

. . .

end // state_FFS

. . . assignments for output z and the LEDs endmodule

¸Sekil 3: Skeleton Verilog code for the FSM.

(42)

Devrenizi a¸sa˘gıdaki gibi gerçekleyin:

1. Yeni bir proje olu¸sturun.

2. ¸Sekil 3’teki gibi olu¸sturdu˘gunuz verilog kodunu projenize ekleyin. Senkron reset giri¸si için SW0anahtarını, sonlu durum makinesinin w giri¸si için ise SW1anahtarını ve saat için KEY0butonunu kullanın. Devrenin z çıkı¸sı için ye¸sil ledi (LEDG0) ve durum flip-flopunun çıkı¸sınıda kırmızı ledleri (LEDR3- LEDR0) kullanın.

3. Kodunuzu derlemeden önce Quartus II’deki Synthesis aracına sonlu durum makinenizi tanıtmalısınız. E˘ger yapmazsanız Synthesis aracı durum tanımlamalarınızı de˘gi¸sken ataması gibi algılayacak ve sonlu durum makinenizi tanımayacaktır. Bu ayarı yapmak için Quartus II programında Assignments > Settings me- nüsüne girip Analysis and Synthesis’e tıklayın. Daha sonra More Setting butonuna tıklayın. ¸Sekil 4’de gösterildi˘gi gibi State Machine Processing kısmında User-Encoded seçene˘gini seçin.

4. Quartus II programında RTL Viewer aracını kullanarak devrenizi inceleyin. Durum diagramını görüntüle- mek için durum makinesinin simgesinin üzerine çift-tıklayın. Compilation Report kısmından Analysis and Synthesis’in altında State Machines yazısına tıklayın.

5. Devrenizin simulasyonunu yapın.

6. Devrenizin do˘gru çalı¸stı˘gından emin olduktan sonra FPGA kartına yükleyin ve test edin.

7. 7. Adım 3’teki ayarları geri alıp devrenizi tekrar derleyin. Tekrar Quartus II programında Assignments >

Settings menüsüne girip Analysis and Synthesis’e tıklayın. Daha sonra More Setting butonuna tıklayın.

Açılan pencereden State Machine Processing kısmında User-Encoded yerine One-Hot seçin ve Tablo 2’de verilen durum kodlarını kar¸sıla¸stırın.

¸Sekil 4: Quartus II’de durum atamaları.

(43)

Uygulama III

Uygulama I ve II’de yaptı˘gımız devreyi kayan kaydediciler yardımıyla olu¸sturabiliriz. ˙Iki tane 4-bit kayan kayde- dici olu¸sturun; birini pe¸spe¸se dört tane biri tespit etmek için, di˘gerini ise dört tane sıfırı tespit etmek için ayarlayın.

z çıkı¸sını üretmek için mantık i¸slemlerini kullanacaksınız. Quartus II programında yeni bir proje olu¸sturun. Anah- tar ve ledleri Uygulama I ve II’de oldu˘gu gibi kullanın ve devrenizin davranı¸sını gözlemleyin. Bu devreyi tek bir kayan kaydediciyle olu¸sturabilir misiniz? Nasıl?

Uygulama IV

Bu uygulamada mors kodu çözücüyü sonlu durum makinesi kullanarak olu¸sturacaksınız. Mors kodu kısa(nokta) ve uzun(çizgi) sinyallerden olu¸smaktadır. Herbir harf bu sinyallerin de˘gi¸sik kombinasyonlarıyla olu¸sturulur. Alfa- benin ilk sekiz harfi için mors kodları:

A • —

B — • • •

C — • — •

D — • •

E •

F • • — •

G — — •

H • • • •

Sonlu durum makinesi kullanan bir mors kodu çözücüyü tasarlayıp gerçekleyin. Devreniz giri¸s olarak alfabenin ilk sekiz harfinden birini almalı ve kırmızı ledlerden birinde harfe ait mors kodunu gösterecektir. SW2−0anahtarlarını ve KEY1−0butonlarını giri¸s olarak kullanın. E˘ger KEY1butonuna basılırsa SW2−0anahtarlarıyla belirtilen (A için 000, B için 001, ...) harfe ait mors kodunu kırmızı ledde göstermelisiniz. Nokta için 0,5 saniye, çizgi için ise 1,5 saniye ledi yakacaksınız. KEY0butonu ise asenkron reset olarak devreyi sıfırlamak için kullanılacaktır.

Bir mors kodu çözücünün ¸sematik gösterimi ¸Sekil 5’te verilmi¸stir.

Letter size register

Enable Load Data

Letter symbols shift register

Enable Load Data

Logic Letter

Selection Logic

LEDR0

2-bit counter

Enable Reset

Pushbuttons and switches

¸Sekil 5: Uygulama IV için kod çözücü.

Ön Çalı¸sma

Laboratuvara gelmeden önce Uygulama I’den IV’e kadar olan bütün devrelerin verilog kodlarını olu¸sturun.

(44)

Referanslar

Benzer Belgeler

421 Borç Senetleri hesabı nda takip edilmekte olan iktisadi kı ymetler enflasyon muhasebesi uygulaması nda parasal kı ymet olarak kabul edildiğ inden bu hesap enflasyon

Vergi denetim yapısını daha etkin ve güçlü bir yapıya kavuşturmak adına yapılan bu çalışma Türkiye’deki bir ilimize bağlı Vergi Dairesi Başkanlığı

Sosyol oji böl ümünü tercih eden öğrencil erin el eştirel düşünme beceril erini gel iştirmel erine, sosyal sorunl ara potansiyel çözüml er bel irl emel

Çekirdek aileye dönüşün başladığını, yaşlı bireylerin (anne-baba) ailedeki o otoriter ve saygın rolünün ortadan kalktığını ve yaşlıların artık

Şehir Pazarlaması Unsurlarından Kültür ve Turizm Ölçeğine İlişkin Yapılan Doğrulayıcı Faktör Analizi Sonucu Elde Edilen Faktör Yükleri .... Şehir

(2002) tarafından yapılan bir çalışmada Trichophyton rubrum LKY-7 soyunun glukoz-pepton sıvı ortamına 2.5, 5.0, 10.0 µM konsantrasyonlarda 2,5-ksilidin ilave edilmiş ve 5.0

Böyle durumlarda, sprey işlemi süresince, toz ve çözgen buharı derişimi maruziyet sınırlarının altına düşünceye kadar, basınçlı hava beslemeli solunum

Bu güzel yol boyunca, Orta Avrupa’nın en güzel manzaraları sizlere eşlik edecek ve ayrıca Özge Ersu, “Orta Avrupa Coğrafyası ve Osmanlı İmparatorluğu’nda