• Sonuç bulunamadı

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ı.

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

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.

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ı.

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.

Benzer Belgeler