• Sonuç bulunamadı

Laboratuvar çalı¸sması 9’da basit bir i¸slemci tanımlamı¸stık. Uygulama I’de i¸slemcinin kendisini tanımladık, Uy-gulama II’de de bu i¸slemciyi bir sayıcı ve hafıza brimine ba˘gladık. Bu çalı¸smada ise i¸slemci tasarlamanın daha sonraki adımlarını gerçekleyece˘giz. Bu çalı¸smadaki ¸Sekil ve Tablolar bir önceki çalı¸smanın devamıdır.

Uygulama III

Bu uygulamada i¸slemcimizi geli¸stirece˘giz; olu¸sturaca˘gımız i¸slemcinin harici bir sayıcıya ihtiyacı olmayacak. Bu-nun yanında hafıza yada di˘ger donanımlar için bir yazma-okuma biti ekleyece˘giz. Tablo 3’teki üç yeni komutu i¸slemcinize ekleyeceksiniz. ld (load) komutu harici hafızanın RY kaydedisinin içindeki veriyle belirtilen adre-sindeki veriyi RX kaydedicisine yazar. st (store) komutu RX kaydedicisinin içerdi˘gi veriyi hafıza biriminin RY kaydedicisi ile verilen adresine kaydeder. Son olarak mvnz (move if not zero) komutu ise daha önce tanımladı˘gı-nız mv komutunun denetleme ifadesi eklenmi¸s bir versiyonudur. Bu komut e˘ger G kaydedicisinin içindeki verinin sıfırdan farklı oldu˘gu durumlarda çalı¸sır.

Kod ˙I¸sletilen fonksiyon

ld Rx,[Ry] Rx ← [[Ry]]

st Rx,[Ry] [Ry] ← [Rx]

mvnz Rx, Ry if G != 0, Rx ← [Ry]

Tablo 3. ˙I¸slemciye eklenen komutlar.

Geli¸stirilmi¸s i¸slemcinizin ¸sematik görünümü ¸Sekil 7’de verilmi¸stir. Bu ¸sekilde, R0-R6 kaydedicileri Labora-tuvar çalı¸sması 9’daki ¸Sekil 1’dekilerle aynıdır. Ancak R7 yerine bir sayıcı bulunmaktadır. Bu sayıcı daha önceki çalı¸smada kullanılan harici sayıcı gibi, i¸slemcinin hafıza biriminden verileri okuması için gerekli adress verile-rini olu¸sturmak için kullanılmaktadır. R7 sayıcısı endüstride kullanılan gerçek i¸slemcilerde program counter (PC) ismiyle anılmaktadır. ˙I¸slemci sıfırlandı˘gında sayıcı 0 adresine i¸saret eder. Bir komutun ba¸slaması için hafıza bi-riminin PC’nin içerdi˘gi adreste o komutun bulunması gerekir. Komut IR kaydedicisine yazılır ve PC bir sonraki komut için bir artar. (mvi komutu için PC verilen sabitin hafıza adresini verir, daha sonra bir artar.)

˙I¸slemcinin Kontrol birimi PC’yi sayıcıyı aktif konuma geçiren incr_PC sinyaliyle artırır. Bunun yanında i¸s-lemci mv yada mvi komutlarını gerçekle¸stirirken R7 kaydedicisi verilirse direk olarak adres bilgisi PC (R7)’ye kaydedilebilir. Paralel yüklenen sayaçta R7insinyali kontrol ünite anahtarı olarak kullanılır. Bu yolla, üretecin hafıza adresini ö˘grenebilir ve art arda gelen adresteki depolarda bulunan uygulamaları kar¸sıla¸stıraca˘gız. Benzer

¸sekilde bilgisayardaki akım miktarı ba¸ska bir kayıta kopyalanıp bir mv’de kullanılabilir. Bilgisayar kayıt defteri araçlarında kullanılan kodun döngüsü a¸sa˘gıda gösterilmi¸s, kodda ki her satırdan sonra % i¸sareti kullanılmı¸s. mv R5,R7 komutunun adresteki hafızaları sub R4,R2 ‘dedir. mvnz R7,R5 kodu R4 sıfır olana kadar sub kodunun uygulanmasını sa˘glar. A¸sa˘gıdaki döngü uzun programlarda bir gecikme olu¸sturmak için kullanılabilir.

mvi R2,#1

mvi R4,#10000000 % ikilik tabanda gecikme de˘geri mv R5,R7 % yan bilgilerin saklandı˘gı adres sub R4,R2 % gecikme sayacındaki azalma miktarı

mvnz R7,R5 % sayaç 0 olana kadar i¸slemin devam etmesini sa˘glar

AddSub

¸Sekil 7. ˙I¸slemcinin geli¸stirilmi¸s versiyonu

¸Sekil 7’deki i¸slemcide veri transferi için kullanılan iki kaydedici vardır. ADDR kaydedicisi Hafıza blo˘gu gibi harici bir modüle adres bilgisini göndermek için kullanılırken, DOUT verinin harici modüllere gönderilmesini sa˘glar. ADDR kaydedicisi okuma ve yazma olarak iki farklı ¸sekilde kullanılır. Bunlardan biri hafızadan komutların okunması (fetching) için PC (R7)’deki adres bilgisinin bu kaydediciye yüklenmesidir. Bu adres hafıza birimine gönderilir ve ilgili veri DIN giri¸sinden i¸slemciye ula¸sır. Di˘ger kullanım ise i¸slemcinin elde etti˘gi sonuçların DOUT kaydedicisi yardımıyla hafıza biriminin ADDR kaydedicisindeki adresine çıkı¸s de˘gerinin yazılmasıdır. Bu kulla-nımlar W (write) flip-flopu yardımıyla yönetilir (0 hafızadan okuma, 1 hafızaya yazma).

¸Sekil 8’de ˙I¸slemcinin hafıza brimleri yada di˘ger aygıtlarla nasıl ba˘glandı˘gı gösterilmi¸stir. ¸Sekildeki hafıza birimi yazma ve okuma i¸slemlerini içermektedir. Birimin adres ve veri giri¸slerinin haricinde yazma okuma i¸slev-lerinin yönetilmesini sa˘glayan write enable kontrol ucu ve veri ileti¸simini düzenlemek için saat ucu bulunmaktadır.

Aktif saat tetiklemesinde adres, veri ve write enable kontrol verisi hafıza birimine yüklenir. Bu tarz hafıza birimle-rine senkron rastgele eri¸simli hafıza birimi (synchronous random access memory (synchronous RAM) denir. ¸Sekil 8’de ayrıca i¸slemcideki bilgilerin yüklenebilmesi için kullanılabilecek 16-bitlik bir kaydedicide gösterilmi¸stir. Bu kaydedici Ledlere ba˘glanarak verilerin DE2-serisi kartlarda gösterilmesi sa˘glanabilir. ˙I¸slemcinin yazma i¸slemini hafızayamı yoksa bu kaydediciyemi yapaca˘gının anla¸sılması eklenen bir mantık devresinin adres bilgisinin çö-zümlemesiyle (address decoding) yapılmaktadır: e˘ger adres verisinin en anlamlı dört biti A15A14A13A12= 0000 ise en anlamsız n bit hafıza birimine adres bilgisi olarak gönderilir. Buradaki örnekte hafıza birimi 128 kelime kapasiteye sahiptir. Bu yüzden n = 7 olarak alınır ve hafıza birimine A6. . . A0 bitler adres bilgisi olarak gön-derilir. E˘ger en anlamlı dört bit A15A14A13A12 = 0001 ise bu sefer i¸slemciden gelen veri LEDlere ba˘glı olan kaydediciye yazılır.

Resetn

¸Sekil 8. ˙I¸slemcinin hafıza birimi ve kaydediciye ba˘glanması.

1. ˙I¸slemcinin geli¸smi¸s versiyonu için yeni bir proje olu¸sturun.

2. ˙I¸slemci için verilog konunu olu¸sturup DIN giri¸sine komutları vererek fonksiyonel simulasyon yapın. ˙I¸slemci ile hafıza birimi arasındaki zamanlamaya dikkat edin.

3. Ba¸ska bir proje olu¸sturarak ¸Sekil 8’deki yapıyı olu¸sturun. Bunun için Quartus II MegaWizard Plug-In Mana-ger aracını kullanarak RAM: 1-PORT hafıza birimini 128 kelime kapasiteli 16-bitlik yazılabilir/okunabilir olacak ¸sekilde ayarlayın. Ve MIF dosyası kullanarak ˙I¸slemcinin i¸sleyece˘gi komutları hafıza birimine yazın.

4. Fonksiyonel simulasyonu kullanarak komutların do˘gru okundu˘gunu kontrol edin.

5. Projenize gerekli olan pin atamalarını yapın. SW17anahtarını i¸slemcinizin Run giri¸sine, KEY0butonunu Re-setngiri¸sine ve 50MHz’lik saati Clock giri¸sine ba˘glayın. Projenizin Quartus II yazılımında Timing Analyzer aracı yardımıyla denetleyip i¸slemcinizin gerçekten 50Mhz saat hızıyla çalı¸stı˘gına emin olun e˘ger de˘gilse ve-rilog kodunu düzenleyerek bu hızda çalı¸smasını sa˘glayın. Ayrıca Run giri¸sinin i¸slemcinin saatiyle asenkron oldu˘guna dikkat edin bu durumu flip-flop kullanarak düzeltin. ˙I¸slemcinizin çıkı¸sını takip edebilmek için, LEDskaydedicisini LEDR15−0ledlerine ba˘glayın.

6. Projenizi derleyip FPGA kartına yükleyin.

7. ˙I¸slemcinizin i¸slevselli˘gini ledleri takip ederek kontrol edin.

Uygulama IV

Bu uygulamada bir öncekinde olu¸sturdu˘gumuz i¸slemciye ek giri¸s çıkı¸s aygıtları ba˘glayaca˘gız.

seg7_scrolladında yeni bir modül olu¸sturaca˘gız. Bu modül FPGA kartındaki herbir 7-segment gösterge için bir kaydedici içermelidir. ˙I¸slemcinizin bu göstergeleri kullanabilmesi için her kaydedici direk olarak göstergelerdek ledleri kontrol etmelidir. Ayrıca i¸slemciniz bu kaydedicilere veri yollayabilmesi için yeni bir adres çözümleme devresi olu¸sturulmalıdır.

1. Yeni bir proje olu¸sturun. ¸Sekil 8’deki devreye ek olarak yeni olu¸sturaca˘gınız seg7_scroll modülünün verilog kodlarını olu¸sturun.

2. Devrenizin i¸sleyi¸sin kontrol edin.

3. Projenize gerekli pin atamalarını yapın ve 7-segment göstergeleri kullanabilmek için yeni bir MIF dosyası olu¸sturun. ˙Ilk önce göstergelere bir kelime yazan basit bir kod olu¸sturun, daha sonra bu kodu yazılan keli-menin sa˘ga yada sola kaydırılmasını sa˘gyalacak ¸sekilde geni¸sletin .

4. Devrenizi çalı¸stırın ve göstergeleri takip ederek kontrol edin.

Uygulama V

Bu uygulamada bir önceki uygulamaya port_n adında yeni bir modül ekleyece˘giz. Bu modül kartın üzerindek anahtarların o andaki durumlarını bir kaydediciye yazarak i¸slemcinin bu bilgiyi ld komutunu kulanarak kullanma-sını sa˘glayacaktır. Ayrıca i¸slemcinin bu bilgiye ula¸sabilmesi için adres çözümlemesinde ek devreye ve çoklayıcıya ihtiyaç duyacaksınız.

1. Olu¸sturaca˘gınız modülün i¸slemciyle ileti¸simini bir devre ¸semasıyla gösterin.

2. Yeni bir proje olu¸sturun, verilog kodlarını yazın ve MIF dosyanızı göstergelerdeki kelimenin kayma hızını port_nmodülünden okudu˘gu de˘gere göre ayarlayacak bir uygulama içerecek ¸sekilde ayarlayın.

3. Devrenizin davranı¸sını simulasyon ve karta yükleyerek test edin.

Bonus

A¸sa˘gıda olu¸sturdu˘gunuz i¸slemci için bonus uygulamalar verilmi¸stir.

1. Quartus II yazılımının araçlarını kullanarak i¸slemciniz için kritik yolu hesaplayınız. ˙I¸slemcinizi olabilecek en hızlı çalı¸sacak ¸sekilde güncelleyin.

2. Komutlarınızı i¸slemcinizi daha esnek hale getirmek için geni¸sletin. Bunun için bazı öneriler mantık i¸slemleri (AND, OR, XOR), kaydırma komutları ve branch olarak sıralanabilir. Ayrıca mvnz komutundaki “not zero”

dan farklı denetleme komutlarıda ekleyebilirsiniz.

3. ˙I¸slemciniz için assembly kodundan MIF dosyası olu¸sturacak bir derleyeci olu¸sturun.

Benzer Belgeler