Bu derste verilog ile özel veya kapısı tasarımını anlatıyoruz.
Öncelikle devremize bakalım.
Devrenin çıkışı Y yukarıda sarı ile vurgulanmış işlevi gerçekleştiriyor.
Bu kapıya özel veya "xor"
kapısı deniliyor. Eğer A ve B farklı ise çıkışta 1 üretiyor, aynı ise çıkışta 0 veriyor.
Devremiz sadece A ve B farklı ise çıkışta 1 veriyor.
Benzetim yazılımı üzerinde sınayabilirsiniz.
module ozelveya (a, b, y);
input a, b;
output y;
assign y = (~a & b) | (a & ~b);
endmodule // ozelveya
Bu kütüğü ozelveya.v ismi ile kaydedelim.
Atama ifadesinde kullanılan ~
DEĞİL
, &
VE
, |
ise VEYA
anlamına geliyor.
(~a & b)
ifadesini A'NIN DEĞİLİ VE B
diğerini ise (a & ~b)
A VE B'NİN DEĞİLİ
olarak okuyabiliriz.
Sonra bir |
VEYA
kapısı bu iki ifadeyi birbirine bağlıyor.
Sonucu da Y işlevine atıyoruz.
Bir tane kütük oluşturalım.
module ozelveya_tezgah;
// Girişler
reg a;
reg b;
// Çıkışlar
wire y;
// Test edilecekler
ozelveya uut (
.a (a),
.b (b),
.y (y)
);
initial begin
$dumpfile("ozelveya.vcd");
$dumpvars(0,ozelveya_tezgah);
// Girişleri ilklendir
a = 0;
b = 0;
// 100 ns bekle
#100;
a = 0;
b = 1;
// 10 ns bekle
#10;
a = 1;
b = 0;
// 10 ns bekle
#10;
a = 1;
b = 1;
// 10 ns bekle
#10;
end
endmodule // ozelveya_tezgah
Kütüğü ozelveya_tezgah.v olarak kaydedelim.
Sınama tezgahında diğer yaptığımız örnekten fazla bir değişiklik yok.
a
0
b
0
,
a
0
b
1
,
a
1
b
0
,
a
1
b
1
olacak şekilde girişe farklı değerler veriyoruz.
Uygulamayı derlemek için
iverilog -o ozelveya ozelveya.v ozelveya_tezgah.v
komutunu veriniz.
Benzetim kütüğünü oluşturmak için
vvp ozelveya
komutunu veriniz. Böylece ozelveya.vcd isimli bir benzetim kütüğü oluşacak.
Son olarak oluşan dalga şekline bakmak için
gtkwave ozelveya.vcd &
komutunu verebiliriz.
Sol üstte bulunan ozelveya_tezgah yazan yere fare ile tıklayalım.
Fare ile işaretleri seçip ekle Append
düğmesi ile ekleyelim.
Sadece a
ve b
farklı iken y = 1
olduğunu görebilirsiniz.
Aşağıda aynı devrenin Microcap ile benzetimini görebilirsiniz.
Benzetim kütüğünü buradan indirebilirsiniz.
Benzetimi başlatmak için Analysis -> Dynamic DC
seçmek yeterlidir.
Öncelikle var olmayan girişleri C, D, E, F
ekliyoruz.
Bu sefer aynı örneği kapılara bölerek tasarlayacağız.
module ozelveya2 (a, b, y);
input wire a, b;
output wire y;
wire c, d, e, f;
not kapi1 (c, a);
not kapi2 (d, b);
and kapi3 (e, b, c);
and kapi4 (f, a, d);
or kapi5 (y, e, f);
endmodule // ozelveya2
Kütüğü ozelveya2.v ismi ile kaydediniz.
Uygulamayı kapılara bölerek 5 tane kapı oluşturduk.
DEĞİL
kapısı için not
, VE
kapısı için and
, VEYA
kapısı için ise or
kullanıyoruz.
İlk kapıya bakarsak not kapi1 (c, a);
ifadesinde, kapı isminden hemen sonra parantezler içerisine önce çıkışı, sonra girişi yazıyoruz.
Benzer şekilde üçüncü kapıya baktığımızda e
'nin çıkış b
ve c
'nin giriş olarak tanımlandığını görebiliriz.
module ozelveya2_tezgah;
// Girişler
reg a;
reg b;
// Çıkışlar
wire y;
// Test edilecekler
ozelveya2 uut (
.a (a),
.b (b),
.y (y)
);
initial begin
$dumpfile("ozelveya2.vcd");
$dumpvars(0,ozelveya2_tezgah);
// Girişleri ilklendir
a = 0;
b = 0;
// 100 ns bekle
#100;
a = 0;
b = 1;
// 10 ns bekle
#10;
a = 1;
b = 0;
// 10 ns bekle
#10;
a = 1;
b = 1;
// 10 ns bekle
#10;
end
endmodule // ozelveya2_tezgah
Kütüğü ozelveya2_tezgah.v ismi ile kaydediniz.
İkinci örneği derlemek için
iverilog -o ozelveya2 ozelveya2.v ozelveya2_tezgah.v
komutunu veriniz.
Benzetim kütüğünü oluşturmak için
vvp ozelveya2
komutunu veriniz. Böylece ozelveya2.vcd isimli bir benzetim kütüğü oluşacak.
Son olarak oluşan dalga şekline bakmak için
gtkwave ozelveya2.vcd &
komutunu verebilirsiniz.
Yorumlar