• Sonuç bulunamadı

¸Sekil 1’de 16-bit kaydedici, multiplexer, toplayıcı/çıkarıcı ve kontrol birimi(sonlu durum makinesi) bulunan sa-yısal bir sistem gösterilmi¸stir. 16-bit data sisteme DIN giri¸sinden girer. Bu data 16-bitlik multiplexer aracılı˘gıyla kaydedicilere(R0, . . . , R7 ve A) aktarılır. Multiplexer aynı zamanda bir kaydedicinin içindeki datayı ba¸ska bir kaydediciye kaydetmek içinde kullanılabilmektedir. ¸Sekilde multiplexerın çıkı¸sı bus olarak adlandırılmı¸stır. Bu-nun sebebi genellikle bir datayı sistemin içinde bir yerden di˘gerine ta¸sıyan birimlere bus denilmesidir.

Toplayıcı yada çıkarıcı multiplexerın çıkı¸sının A kaydedicisine kaydedildi˘gi zaman i¸sleme girer. A kaydedi-cisine bir data kaydedildi˘ginde ikinci 16-bitlik sayı bus’a gelir i¸slem yapıldıktan sonra sonuç G kaydedikaydedi-cisine kaydedilir. Daha sonra G kaydedicisindeki data di˘ger kaydedicilere yollanabilir.

AddSub

Control unit FSM

¸Sekil 1: A digital system.

Sistem kontrol birimi sayesinde her bir saat döngüsünde farklı bir i¸slem yapabilir. Kontrol birimi gelen veriyi tanımlar ve hangi kaydediciye kaydedilece˘gini belirler. Örnek olarak, e˘ger kontrol birimi R0 kaydedicisindeki datanın A’ya yazılmasına karar verdiyse bir sonraki saat döngüsünde data A’ya yazılır.

Böyle sistemlere genellikle i¸slemci denir. Tablo 1’de bu çalı¸smada tanımlanan i¸slemcinin sahip oldu˘gu ko-mutların listesi verilmi¸stir. Operation kolonu komutları ve ve bu koko-mutların argumanlarını göstermektedir. RX

← [RY] RY kaydedicisindeki datanın RX kaydedicisine kaydedilece˘gini belirtmektedir. mv (move) komutu bir kaydediciden di˘gerine datanın ta¸sınması için kullanılmaktadır. mvi komutu ise D sabitini kaydediciye ta¸sımak için kullanılmaktadır.

Kod ˙I¸sletilen fonksiyon

mv Rx,Ry Rx ← [Ry]

mvi Rx,#D Rx ← D

add Rx, Ry Rx ← [Rx] + [Ry]

sub Rx, Ry Rx ← [Rx] − [Ry]

Tablo 1. Komut seti

Her komut IR kaydedicisine 9-bitlik IIIXXXYYY ¸seklinde kodlanarak kaydedilir. Burada III kısmı komu-tun ne oldu˘gunu, XXX kısmı RX kaydedicisinin hangisi oldu˘gunu, YYY kısmı ise RY kaydedicisinin hangisi oldu˘gunu i¸saret eder. Komut için 2-bitlik kod yeterli olmasına kar¸sın i¸slemciye daha sonra ba¸ska komutlarda ekleyece˘gimiz için 3-bit kulandık. Bu yüzden ¸Sekil 1’de gösterildi˘gi gibi DIN giri¸sinin 9-biti IR kaydedicisine ba˘glanmı¸stır. mvi komutu için YYY kodlarının bir anlamı yoktur ve mvi komutu IR kaydedicisine yazıldı˘gında DINgiri¸sine gelen 16-bitlik veri i¸sleme alınır.

Soplama yada çıkarma gibi i¸slenmesi sırasında çoklu atama yapılan komutlar tamamlanmaları için birden çok saat döngüsüne ihtiyaç duyarlar. Kontrol birimindeki sonlu durum makinesi bir sonraki komuta geçmeden i¸slemdeki komutun tamamlanmasını sa˘glamak için saati komtrol etmektedir. ˙I¸slemci bir komutu i¸slerken Run sinyali verilir ve komut tamamlandı˘gında ise Done sinyali verilerek komutun bitti˘gi haber verilir. Tablo 2’de Tablo 1’deki komutların kontrol sinyalleri gösterilmi¸stir. Burada T0 anında IRinkontrol sinyali olmasına kar¸sın tabloda T0 anı verilmemi¸stir.

T1 T2 T3

(mv): I0 RYout, RXin, Done (mvi): I1 DINout, RXin,

Done

(add): I2 RXout, Ain RYout, Gin Gout, RXin, Done (sub): I3 RXout, Ain RYout, Gin, Gout, RXin,

AddSub Done

Tablo 2. Komut seti/zaman ili¸skisi.

Uygulama I

¸Sekil 1’deki i¸slemciyi verilog dilini kullanarak a¸sa˘gıdaki gibi tasarlayıp gerçekleyin:

1. Yeni bir proje olu¸sturun.

2. ˙Istenen verilog dosyasını olu¸sturun, projenize ekleyin ve derleyin. Olu¸sturmanız gereken verilog kodunun iskelet yapısı ¸Sekil 2’de verilmi¸stir.

3. Simulasyonu çalı¸stırarak devrenizin davranı¸sını gözlemleyin. Düzgün tasarlanmı¸s devrenin simulasyon çık-tısı ¸Sekil 3’teki gibi olmalıdır. Bu ¸sekilde 30. ns’de DIN giri¸sine (2000)16verisi verilmi¸stir. Yani mvi R0,

#D komutu verilmi¸stir, 50. ns’de ise giri¸se verilen 5 verisi R0 kaydedicisine yüklenmi¸stir. 90. ns’de mv R1,R0, 110. ns’de add R0,R1 ve 190. ns’de ise sub R0,R0 komutları verilmi¸stir. Burada simulasyon çıktı-sının DIN giri¸sini 4 basamaklı 16lık sayı olarak ve IR kaydedicisindeki veriyi 3 basamaklı 8lik sayı olarak gösterdi˘gine dikkat edin.

4. Bir modül daha olu¸sturarak giri¸s ve çıkı¸sları FPGA kartına uygun ¸sekilde ayarlayın. SW15−0anahtarlarını DIN giri¸sine, SW17 anahtarını Run giri¸sine, KEY0 butonunu Resetn giri¸sine ve KEY1 botununuda Clock giri¸sine ba˘glayın. Bus çıkı¸sını LEDR15−0ledlerine ve LEDR17ledinide Done çıkı¸sına ba˘glayın.

5. pin assignment dosyasını projenize ekleyin. Devrenizi derleyip FPGA kartına yükleyin.

6. Anahtarların konumlarını de˘gi¸stirerek i¸slemcinizin davranı¸sını test edin.

module proc (DIN, Resetn, Clock, Run, Done, BusWires);

input [15:0] DIN;

input Resetn, Clock, Run;

output Done;

output [15:0] BusWires;

parameter T0 = 2’b00, T1 = 2’b01, T2 = 2’b10, T3 = 2’b11;

. . . declare variables assign I = IR[1:3];

dec3to8 decX (IR[4:6], 1’b1, Xreg);

dec3to8 decY (IR[7:9], 1’b1, Yreg);

¸Sekil 2a. ˙I¸slemci kodu için iskelet yapı.

// Kontrol SDM durumları always @(Tstep_Q, Run, Done) begin

case (Tstep_Q)

T0: // Bu adımda giri¸steki veri yüklenir.

if (!Run) Tstep_D = T0;

else Tstep_D = T1;

T1: . . . endcase end

// Kontrol SDM çıkı¸sları

always @(Tstep_Q or I or Xreg or Yreg) begin

. . . ilklendirmeleri yap.

case (Tstep_Q)

T0: // Giri¸si DIN-e kaydet begin

IRin = 1’b1;

end

T1: //Bu adımdaki sinyalleri tanımla case (I)

. . . endcase

T2: //Bu adımdaki sinyalleri tanımla case (I)

. . . endcase

T3: //Bu adımdaki sinyalleri tanımla case (I)

. . . endcase endcase end

// Kontrol SDM kaydedicileri

always @(posedge Clock, negedge Resetn) if (!Resetn)

. . .

regn reg_0 (BusWires, Rin[0], Clock, R0);

. . . di˘ger kaydedicileri ve toplama çıkarma birimini olu¸stur.

. . . bus-ı tanımla.

endmodule

¸Sekil 2b. ˙I¸slemci kodu için iskelet yapı.

module dec3to8(W, En, Y);

input [2:0] W;

input En;

output [0:7] Y;

reg [0:7] Y;

always @(W or En) begin

if (En == 1) case (W)

3’b000: Y = 8’b10000000;

3’b001: Y = 8’b01000000;

3’b010: Y = 8’b00100000;

3’b011: Y = 8’b00010000;

3’b100: Y = 8’b00001000;

3’b101: Y = 8’b00000100;

3’b110: Y = 8’b00000010;

3’b111: Y = 8’b00000001;

endcase else

Y = 8’b00000000;

end endmodule

module regn(R, Rin, Clock, Q);

parameter n = 16;

input [n-1:0] R;

input Rin, Clock;

output [n-1:0] Q;

reg [n-1:0] Q;

always @(posedge Clock) if (Rin)

Q <= R;

endmodule

¸Sekil 2c. ˙I¸slemci için altmodüller.

¸Sekil 3. ˙I¸slemci simülasyon sonuçları.

Uygulama II

Bu uygulamada ¸Sekil 4’deki bir sayıcı ve bir hafıza birimi eklenmi¸s i¸slemciden olu¸san devreyi tasarlayacaksı-nız. Sayıcı hafıza biriminin adreslerini elde etmek için kullanılacak ve devrenizde PClock (i¸slemci için) ve MC-lock(hafıza için) olmak üzere iki ayrı saat kullanılacaktır.

Counter

n

Resetn MClock

Memory

addr data 16

Processor

16

DIN

Bus

Resetn Run

Done

Run

Bus Done

PClock

¸Sekil 4. ˙I¸slemciye hafızanın ve sayacın ba˘glanması.

1. Yeni bir proje olu¸sturun.

2. ˙I¸slemci, sayıcı ve hafıza birimini birle¸stiren bir verilog dosyası olu¸sturun. Hafıza birimini ROM: 1-PORT LPM modülünü kullanarak 16-bitlik 32 kelime kapasitesine sahip olacak ¸sekilde olu¸sturun. Sihirbazın 4.

ekranı ¸Sekil 5’te verilmi¸stir. Hafıza birimi sadece okuma için oldu˘gundan senkron sadece okunabilir hafıza (senkron ROM)olarak adlandırılır. Hafıza birimlerinin adresleri yüklemek için bir kaydedici kullandı˘gına dikkat edin. Bu kaydedici FPGA’lerin hafıza kaynaklarının tasarımından dolayı gereklidir.

˙I¸slemcinin komutlarını hafıza birimine yazmak için öntanımlı de˘gerleri hafızaya kaydetmelisiniz. Bu si-hirbaza memory initialization file (MIF) tanımlayarak yapılabilir. ¸Sekil 6’da MegaWizard Plug-in Mana-ger aracının ilgili ekranı gösterilmi¸stir. Bu ekranda projemizle aynı klasörde olu¸sturaca˘gımız inst_mem.mif dosyasını ekliyece˘giz. Quartus II On-line Help’ten MIF dosyalarının formatı hakkında bilgi edinebilir ve i¸slemciniz için yeteri kadar kod içeren bir MIF dosyasını olu¸sturabilirsiniz.

3. Simulasyonu çalı¸stırarak i¸slemciniz ile ROM devrenizin do˘gru haberle¸sti˘ginden emin olun.

4. Projenize pin assignment dosyasını ekleyin, SW17anahtarını Run giri¸sine, KEY0butonunu Resetn giri¸sine, KEY1butonunu MClock giri¸sine ve KEY2butonunu PClock giri¸sine ba˘glayın. LEDR15−0ledlerini bus

çıkı-¸sına ve son olarak LEDR17ledine Done çıkı¸sına ba˘glayın.

5. Devrenizi derleyin ve FPGA kartına yükleyin.

6. Giri¸sleri de˘gi¸stirerek devrenizin davranı¸slarını gözlemleyin.

¸Sekil 5. 1-PORT ROM için ayarlar.

¸Sekil 6. Öntanımlı de˘gerlerin hafızaya kaydedilmesi.

Benzer Belgeler