Seçici veriyi bir kaç kaynaktan alıp ortak bir yola aktaran aygıttır.
Seçici veriyi bir kaç kaynaktan alıp ortak bir yola aktaran aygıttır. Hangi girişin çıkışa aktarılacağını veri seçme hattı belirler.
Bazı kitaplarda seçici yukarıdaki simge ile gösteriliyor.
Doğruluk tablosundan da görülebileceği üzere seç 0
ise giriş0
seçilir. Seç 1
ise giriş1
seçilir.
Doğruluk tablosunu kullanarak iki girişli seçicinin devre şemasını çıkarabiliriz.
Dört girişli seçicinin devre şemasını aşağıda bulabilirsiniz.
Bir kaç tane iki girişli seçici birleştirilerek dört girişli seçici oluşturulabilir.
Seç0
girişinin her iki seçicide ortak kullanıldığına dikkat ediniz.
Aşağıdaki benzetimde üç tane iki girişli seçici kullanılarak dört girişli seçici oluşturulmuştur.
Okunabilirlik açısından veri seçme hattı, küçüğü sağda olacak şekilde dizilmiştir.
Bu örnek ise VE, VEYA ve DEĞİL kapıları kullanılarak oluşturulmuştur.
module dortgirislisecici(giris, sec, cikis);
input [3:0] giris;
input [1:0] sec;
output reg cikis;
always @ (*) begin
case (sec)
2'b00: cikis = giris[0];
2'b01: cikis = giris[1];
2'b10: cikis = giris[2];
2'b11: cikis = giris[3];
endcase
end
endmodule // dortgirislisecici
Seçiciyi yazdıktan sonra dortgirislisecici.v olarak kaydedelim.
always @ (*) begin
ifadesinde içerideki yıldız her şeyi seçiyor. Bir başka ifade ile girişlerin herhangi biri değiştiğinde always
bloğunun içerisindeki ifadenin yürütüleceğini belirtiyor.
Tek tek yazmak yerine, input [3:0] giris;
ifadesi ile giris3, giris2, giris1, giris0
şeklinde dört girişi tek seferde tanımlayabiliyoruz.
input [1:0] sec;
ifadesi ile de iki seçme hattını tek seferde tanımlıyoruz.
2'b00: cikis = giris[0];
kullanımında en baştaki 2'b
ile ikilik sayı sisteminde 2 bit bir sayı tanımlamak istediğimizi belirtiyoruz.
Eğer seçme hattı 0 ise, sıfır numaralı girişi seçiyoruz. Eğer 1 ise, bir numaralı girişi seçiyoruz.
module dortgirislisecici_tezgah;
// Girişler
reg [3:0] giris;
reg [1:0] sec;
// Çıkışlar
wire cikis;
// Test edilecekler
dortgirislisecici uut (
.giris (giris),
.sec (sec),
.cikis (cikis)
);
initial begin
$dumpfile("dortgirislisecici.vcd");
$dumpvars(0,dortgirislisecici_tezgah);
// Girişleri ilklendir
giris = 0;
sec = 0;
// 100 ns bekle
#100;
giris = 4'b0010;
sec = 2'b01;
// 10 ns bekle
#10;
giris = 4'b0000;
sec = 2'b01;
// Giriş değerini 0 yapalım
// 10 ns bekle
#10;
end
endmodule // dortgirislisecici_tezgah
Sınama tezgahını dortgirislisecici_tezgah.v ismi ile kaydediniz.
Sınama tezgahında 1 numaralı girişin değerini 1 yapıyoruz. Seç değerini 1 yapıyoruz. Böylece girişteki 1 çıkışa aktarılıyor.
Yaklaşık 10 s sonra, 1 numaralı girişin değerini 0 yapıyoruz. Bir numaralı giriş hala seçili olduğu için bu 0 değeri çıkışa aktarılıyor.
İlk önce giris[3:0]
kapısına 0010
vererek giris1
kapısını 1
yapıyoruz. sec[1:0]
kapısına 01
vererek giris1
kapısının çıkışa aktarılacağını belirtiyoruz.
giris1
'i tekrar 0
yaptığımızda çıkışın da sıfırlandığına dikkat ediniz.
Yorumlar